diff --git a/.github/workflows/EU.yml b/.github/workflows/EU.yml index e7506b99..e4760010 100644 --- a/.github/workflows/EU.yml +++ b/.github/workflows/EU.yml @@ -21,13 +21,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Bypass Cloudflare for GitHub Action - uses: xiaotianxt/bypass-cloudflare-for-github-action@v1.1.1 + uses: xiaotianxt/bypass-cloudflare-for-github-action@a87c9ac0348806058904e62e5c8e70d8e37b4a65 # v1.1.1 with: cf_zone_id: ${{ secrets.CF_ZONE_ID }} cf_api_token: ${{ secrets.CF_API_TOKEN }} - - uses: actions/checkout@v2 - name: Install Depedencies run: | diff --git a/.github/workflows/JPN.yml b/.github/workflows/JPN.yml index 90eb5020..926bd33f 100644 --- a/.github/workflows/JPN.yml +++ b/.github/workflows/JPN.yml @@ -21,13 +21,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Bypass Cloudflare for GitHub Action - uses: xiaotianxt/bypass-cloudflare-for-github-action@v1.1.1 + uses: xiaotianxt/bypass-cloudflare-for-github-action@a87c9ac0348806058904e62e5c8e70d8e37b4a65 # v1.1.1 with: cf_zone_id: ${{ secrets.CF_ZONE_ID }} cf_api_token: ${{ secrets.CF_API_TOKEN }} - - uses: actions/checkout@v2 - name: Install Depedencies run: | diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3901e861..5ee68352 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,13 +21,13 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: Bypass Cloudflare for GitHub Action - uses: xiaotianxt/bypass-cloudflare-for-github-action@v1.1.1 + uses: xiaotianxt/bypass-cloudflare-for-github-action@a87c9ac0348806058904e62e5c8e70d8e37b4a65 # v1.1.1 with: cf_zone_id: ${{ secrets.CF_ZONE_ID }} cf_api_token: ${{ secrets.CF_API_TOKEN }} - - uses: actions/checkout@v2 - name: Install Depedencies run: | diff --git a/Dockerfile b/Dockerfile index aa1f8ca4..d134b1ca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM ubuntu:22.04 RUN echo ">> install distro packages ..." && \ apt update && \ - apt -y install bash-completion sudo binutils-mips-linux-gnu wget make git python3 libcapstone-dev pkg-config build-essential + apt -y install bash-completion sudo binutils-mips-linux-gnu wget make git python3 build-essential # Hint: comment out qemu installation, if you're using ido recomp RUN echo ">> install qemu ..." && \ diff --git a/assets/embedded/player_gait_object/modelnode.inc.c b/assets/embedded/player_gait_object/modelnode.inc.c index 35243b85..dbf00277 100644 --- a/assets/embedded/player_gait_object/modelnode.inc.c +++ b/assets/embedded/player_gait_object/modelnode.inc.c @@ -7,7 +7,7 @@ ModelNode player_gait_pos_hdr_2 = {2, &player_gait_pos_2, &player_gait_pos_hdr_1 //D:8003C5C8 ModelNode player_gait_pos_hdr_3 = {2, &player_gait_pos_3, &player_gait_pos_hdr_2, 0, 0, 0}; //D:8003C5E0 -ModelRoData_HeaderRecord player_gait_obj = {1, &player_gait_pos_hdr_1, 0, 0, 0, 0}; +ModelRoData_HeaderRecord player_gait_obj = {0, 1, &player_gait_pos_hdr_1, 0, 0, 0}; //D:8003C5F0 ModelRoData_GroupRecord player_gait_pos_1 = {{0.0, 0.0, 0.0}, 0x0001, 0x0002, 0xFFFF, 0xFFFF, &player_gait_pos_hdr_2, 0}; //D:8003C60C diff --git a/assets/obseg/setup/Ump_setupameZ.c b/assets/obseg/setup/Ump_setupameZ.c index dd8d71f1..9fae3441 100644 --- a/assets/obseg/setup/Ump_setupameZ.c +++ b/assets/obseg/setup/Ump_setupameZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -323,7 +324,9 @@ PathRecord patrolpaths[] = { }; -u32 ai_not_used_0[] = { 0x04000000 }; +u8 ai_not_used_0[] = { + ai_list_end +}; diff --git a/assets/obseg/setup/Ump_setupashZ.c b/assets/obseg/setup/Ump_setupashZ.c index 1e18f8f0..265db555 100644 --- a/assets/obseg/setup/Ump_setupashZ.c +++ b/assets/obseg/setup/Ump_setupashZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -285,7 +286,9 @@ PathRecord patrolpaths[] = { }; -u32 ai_not_used_0[] = { 0x04000000 }; +u8 ai_not_used_0[] = { + ai_list_end +}; diff --git a/assets/obseg/setup/Ump_setupcradZ.c b/assets/obseg/setup/Ump_setupcradZ.c index 2632aea9..87685081 100644 --- a/assets/obseg/setup/Ump_setupcradZ.c +++ b/assets/obseg/setup/Ump_setupcradZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -319,7 +320,9 @@ PathRecord patrolpaths[] = { }; -u32 ai_not_used_0[] = { 0x04000000 }; +u8 ai_not_used_0[] = { + ai_list_end +}; diff --git a/assets/obseg/setup/Ump_setupimpZ.c b/assets/obseg/setup/Ump_setupimpZ.c index 6d295996..fdca9170 100644 --- a/assets/obseg/setup/Ump_setupimpZ.c +++ b/assets/obseg/setup/Ump_setupimpZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -217,7 +218,9 @@ PathRecord patrolpaths[] = { }; -u32 ai_not_used_0[] = { 0x04000000 }; +u8 ai_not_used_0[] = { + ai_list_end +}; diff --git a/assets/obseg/setup/Ump_setupoatZ.c b/assets/obseg/setup/Ump_setupoatZ.c index 78311059..3f579ac4 100644 --- a/assets/obseg/setup/Ump_setupoatZ.c +++ b/assets/obseg/setup/Ump_setupoatZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -186,7 +187,9 @@ PathRecord patrolpaths[] = { }; -u32 ai_not_used_0[] = { 0x04000000 }; +u8 ai_not_used_0[] = { + ai_list_end +}; diff --git a/assets/obseg/setup/Ump_setuprefZ.c b/assets/obseg/setup/Ump_setuprefZ.c index 52ec93a2..ae60f6e8 100644 --- a/assets/obseg/setup/Ump_setuprefZ.c +++ b/assets/obseg/setup/Ump_setuprefZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -200,7 +201,9 @@ PathRecord patrolpaths[] = { }; -u32 ai_not_used_0[] = { 0x04000000 }; +u8 ai_not_used_0[] = { + ai_list_end +}; diff --git a/assets/obseg/setup/Ump_setuprunZ.c b/assets/obseg/setup/Ump_setuprunZ.c index 14d68b3a..9fa13780 100644 --- a/assets/obseg/setup/Ump_setuprunZ.c +++ b/assets/obseg/setup/Ump_setuprunZ.c @@ -1,6 +1,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -2457,8 +2458,16 @@ PathRecord patrolpaths[] = { { NULL, 0x00, 0x00, 0x0000 } }; -u32 ai_0[] = {0XCD026C00, 0x00020003, 0X1000201, 0x04000000}; -u32 ai_1[] = {0x20003010, 0x0040000}; +u8 ai_0[] = { + goto_next(0x02) + goto_next(0x03) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x00) + if_chr_dying_or_dead(0x10, 0x00) + ai_list_end +}; AIListRecord ailists[] = { diff --git a/assets/obseg/setup/UsetuparkZ.c b/assets/obseg/setup/UsetuparkZ.c index 4a21934e..c20c14fc 100644 --- a/assets/obseg/setup/UsetuparkZ.c +++ b/assets/obseg/setup/UsetuparkZ.c @@ -7,6 +7,8 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" + // forward declarations PadRecord padlist[]; @@ -2219,61 +2221,1668 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x200005fd, 0x00070400 }; -u32 ai_1[] = { 0x200105fd, 0x00070400 }; -u32 ai_2[] = { 0x200205fd, 0x040c0400 }; -u32 ai_3[] = { 0x200305fd, 0x00070400 }; -u32 ai_4[] = { 0x200405fd, 0x00070400 }; -u32 ai_5[] = { 0x200505fd, 0x00070400 }; -u32 ai_6[] = { 0x200605fd, 0x00070400 }; -u32 ai_12[] = { 0x02000346, 0x252f4801, 0x00024846, 0x253a253b, 0x26321d03, 0x391b3e1b, 0x3f1b3c1c, 0x02470396, 0x80192f03, 0x01000219, 0x42290100, 0x02290604, 0x0d05fd00, 0x04020379, 0x00260100, 0x02040100, 0x021b3335, 0x401e0100, 0x021e101c, 0x95800100, 0x021c4740, 0x1d48c01d, 0x4b000a1d, 0x0100021d, 0x3335c821, 0x45210100, 0x02219580, 0x4b006425, 0x79002606, 0x040d05fd, 0x040e0225, 0x06040d05, 0xfd040f02, 0x26333540, 0x2a06040d, 0x05fd0410, 0x022aad49, 0x66206f6e, 0x6c792049, 0x20686164, 0x20612067, 0x756e2121, 0x210a001a, 0x2b010002, 0x2b032f01, 0x012b0201, 0x01000400 }; -u32 ai_13[] = { 0x0200032f, 0x22010002, 0x22333596, 0x23333500, 0x24000102, 0x230e0102, 0x24100102, 0x01032f03, 0x01010203, 0x3c1c0702, 0x1c476e1d, 0x48911d4b, 0x000a1d07, 0x021d0122, 0x04000000 }; -u32 ai_14[] = { 0x02000333, 0x35fd2646, 0x26002502, 0x2545274c, 0x00c8203c, 0x27002002, 0x27790102, 0x21010002, 0x20002602, 0x2606040f, 0x05fd0410, 0x02010702, 0x0205fd00, 0x10040000 }; -u32 ai_15[] = { 0x61fd0200, 0x1c001702, 0x03032f01, 0x4dfd0032, 0x00170146, 0x25010302, 0x25ad210a, 0x00210229, 0x033335dc, 0x293b292f, 0x29012902, 0x29ad496d, 0x206f6666, 0x210a0001, 0x0002014d, 0xfd003200, 0x17330702, 0x333c0422, 0x07020403, 0x07040000 }; -u32 ai_16[] = { 0x02009d00, 0x0000101f, 0x00170203, 0x032f014d, 0xfd003200, 0x17010103, 0x02014dfd, 0x00320017, 0x33010002, 0x332205fd, 0x00010400 }; -u32 ai_36[] = { 0x8e4fa0fd, 0x00100000, 0x9d000008, 0x006400fd, 0x023a033c, 0x2d013a02, 0x2dad636f, 0x6e210a00, 0x03290302, 0x03032f29, 0x4b001404, 0x01030229, 0x4b001404, 0x012d0204, 0x30fd02c3, 0x0c111700, 0x01000029, 0x0229ae02, 0x0503b400, 0x012c0101, 0x05020130, 0xfd02c30c, 0x1263009a, 0x00000200, 0x020603b4, 0x0001e029, 0x01060229, 0x06041005, 0xfd041002, 0x02030102, 0x04000000 }; -u32 ai_11[] = { 0x02000332, 0x1b3e1b3f, 0x1b461b3a, 0x1b3b1b01, 0x00021b06, 0x040d05fd, 0x040f0400 }; -u32 ai_7[] = { 0x0200033c, 0x29010002, 0x299a0000, 0x2000ad73, 0x65742066, 0x6c61670a, 0x00060002, 0x05fd0409, 0x04000000 }; -u32 ai_8[] = { 0x0200033c, 0x2a010002, 0x2a110300, 0x2a020303, 0x2f2a0103, 0x022a1204, 0x00010204, 0x032f0101, 0x04020106, 0x000205fd, 0x00020400 }; -u32 ai_9[] = { 0x04000000 }; -u32 ai_10[] = { 0x0200bf00, 0xb8080000, 0x00000002, 0x00c000d9, 0x00000000, 0x00020002, 0x29033335, 0xfa2d3c2a, 0x0129022d, 0xad610a00, 0x1c003f02, 0x03033c2a, 0x0103022a, 0x12010201, 0x94010600, 0x0205fd00, 0x06022a94, 0x01060002, 0x05fd0008, 0x04000000 }; -u32 ai_17[] = { 0x02000332, 0x017300f0, 0x2d010002, 0x2dad496d, 0x20627572, 0x7374696e, 0x67210a00, 0x1c000b02, 0x03032f01, 0x32010103, 0x02010604, 0x0d05fd04, 0x0d040000 }; -u32 ai_18[] = { 0x8f00509d, 0x00000840, 0x1e007c02, 0x3a032f00, 0x013a0200, 0x036e0803, 0x6e04036e, 0x02036e01, 0x03010002, 0x031e2328, 0x00040204, 0x03321d02, 0x292f0501, 0x04020501, 0x00021dad, 0x49207365, 0x65420a00, 0x06041405, 0xfd041401, 0x00040000 }; -u32 ai_19[] = { 0x02002803, 0x02030379, 0x00435500, 0x633b30fd, 0x2f4b0019, 0x052f0401, 0x03020403, 0x4b001905, 0x01000205, 0x9c000000, 0x103c08c3, 0x0c090029, 0x023c08c3, 0x0c150229, 0xae4b001e, 0x29292902, 0x29021103, 0x79004355, 0x00633b30, 0xfd2fb400, 0x01a42901, 0x11022908, 0xc30c0a4b, 0x001e2929, 0x29022902, 0x0c037900, 0x43550063, 0x3b30fd2f, 0xb4000258, 0x29010c02, 0x2908c30c, 0x0b9a0000, 0x01004b00, 0x1e292929, 0x0229020d, 0x03790043, 0x5500633b, 0x30fd2fb4, 0x00038429, 0x010d0229, 0x087f4c3f, 0x7fb23e02, 0x3dc30c0c, 0x0029023e, 0xc30c1700, 0x29023fc3, 0x0c180029, 0x02294b00, 0x1e292929, 0x0229020e, 0x03790043, 0x5500633b, 0x30fd2fb4, 0x0004b029, 0x010e0229, 0x08c30c0d, 0x4b001e29, 0x29290229, 0x020f0379, 0x00435500, 0x633b30fd, 0x2fb40005, 0xdc29010f, 0x022908c3, 0x0c0e4b00, 0x1e292929, 0x02290210, 0x03790043, 0x5500633b, 0x30fd2fb4, 0x00069001, 0x01100201, 0x03250830, 0xfd2fb400, 0x07082901, 0x010229c3, 0x0c0f0207, 0x9a000000, 0x021c007c, 0x0206034d, 0xfd000f00, 0x7c082f29, 0x01060229, 0x4dfd000f, 0x007c0801, 0x07020831, 0x44191500, 0x24004829, 0x02193145, 0x19150024, 0x00462902, 0x19314619, 0x15002400, 0x45290219, 0x31471915, 0x00240047, 0x29021931, 0x48191500, 0x24004429, 0x02191400, 0x28006d29, 0x0229ae02, 0x0903b400, 0x003c2901, 0x09022931, 0x44191600, 0x04004834, 0x02193145, 0x19160004, 0x00463402, 0x19314619, 0x16000400, 0x45340219, 0x31471916, 0x00040047, 0x34021931, 0x48191600, 0x04004434, 0x02191600, 0x08006d34, 0x02340396, 0x012d2f29, 0x01340229, 0x02290108, 0x022d0604, 0x1505fd04, 0x15022fc3, 0x0c109a00, 0x00000225, 0x02390301, 0x39023bc3, 0x0c169a00, 0x00001006, 0x041305fd, 0x04130243, 0x06041605, 0xfd041604 }; -u32 ai_20[] = { 0x02008f00, 0x0a1e007a, 0x0203032f, 0x04010302, 0x044dfd00, 0x14007a29, 0x01000229, 0xc30c149a, 0x00000020, 0x022521ae, 0x020803b4, 0x00003c29, 0x01080229, 0x09020503, 0x9c000000, 0x04060105, 0x02060207, 0x03010704 }; -u32 ai_21[] = { 0xc30c259a, 0x00001000, 0xae024203, 0x30fd2f3c, 0x03002d01, 0x42022d28, 0x04020403, 0x30fd2f4b, 0x0064292f, 0x29010402, 0x29030142, 0x02039620, 0x29b40003, 0x84440229, 0x14000100, 0x00290229, 0x02050330, 0xfd2f2f29, 0x01050229, 0x0142022f, 0xc30c109a, 0x00000002, 0x25023903, 0x01390244, 0x9420c30c, 0x26010304 }; -u32 ai_23[] = { 0x9003e88f, 0x012c913c, 0x93649264, 0x9d000008, 0x008e4e9d, 0x00000040, 0xbf00cd06, 0x00000000, 0x00020005, 0xfd041704 }; -u32 ai_22[] = { 0x02001c00, 0x7b020303, 0x2f040103, 0x02043143, 0x284dfd00, 0x14007b29, 0x01000229, 0xf400ffff, 0x974301c3, 0x0c131400, 0x24004305, 0x02059c00, 0x0000042a, 0x9c000000, 0x40414628, 0x9c000000, 0x20290301, 0x050229ae, 0x0242039c, 0x00000004, 0x2a9c0000, 0x00404146, 0x28b40005, 0x6428b400, 0x052813b4, 0x0004b012, 0xb4000438, 0x11b40003, 0xc010b400, 0x03480fb4, 0x0002d00e, 0xb4000258, 0x0db40001, 0xe00cb400, 0x01680bb4, 0x0000780a, 0x0142020a, 0xb400012c, 0x29c30c24, 0x02290142, 0x020bb400, 0x01a429c3, 0x0c190229, 0x0142020c, 0xb400021c, 0x29c30c1a, 0x02290142, 0x020db400, 0x029429c3, 0x0c1b0229, 0x0142020e, 0xb400030c, 0x29c30c1c, 0x02290142, 0x020fb400, 0x038429c3, 0x0c1d0229, 0x01420210, 0xb40003fc, 0x29c30c1e, 0x02290142, 0x0211b400, 0x047429c3, 0x0c1f0229, 0x01420212, 0xb40004ec, 0x29c30c20, 0x02290142, 0x021303c3, 0x0c231600, 0x04004329, 0x02290303, 0x03184308, 0x06014202, 0x289a0000, 0x0004022a, 0x31431916, 0x00040043, 0x01021914, 0x00010000, 0x01020103, 0x2f290101, 0x02293143, 0x19184308, 0x0602199c, 0x00000040, 0x41790541, 0x9a000000, 0x08112914, 0x00010000, 0x29022901, 0x01020106, 0x041705fd, 0x00080241, 0x06041705, 0xfd041104 }; -u32 ai_24[] = { 0xad310a00, 0x8e44ab00, 0x73060002, 0x05fd0423, 0x04000000 }; -u32 ai_25[] = { 0xad320a00, 0x8e45ab00, 0x74060002, 0x05fd0423, 0x04000000 }; -u32 ai_26[] = { 0xad330a00, 0x8e46ab00, 0x75060002, 0x05fd0423, 0x04000000 }; -u32 ai_27[] = { 0xad340a00, 0x8e47ab00, 0x76060002, 0x05fd0423, 0x04000000 }; -u32 ai_28[] = { 0xad350a00, 0x8e48ab00, 0x77060002, 0x05fd0423, 0x04000000 }; -u32 ai_29[] = { 0xad360a00, 0x8e49ab00, 0x79060002, 0x05fd0423, 0x04000000 }; -u32 ai_30[] = { 0xad68310a, 0x008e2506, 0x000205fd, 0x04240400 }; -u32 ai_31[] = { 0xad68320a, 0x008e2606, 0x000205fd, 0x04240400 }; -u32 ai_32[] = { 0xad68330a, 0x008e2706, 0x000205fd, 0x04240400 }; -u32 ai_33[] = { 0xad68340a, 0x008e2806, 0x000205fd, 0x04240400 }; -u32 ai_34[] = { 0xad640a00, 0x3c330200, 0xbf00b808, 0x00000000, 0x000200c0, 0x00d90000, 0x00000002, 0x00020353, 0x00c8007b, 0x2d1f2328, 0x0229032f, 0x314b0032, 0x2d460701, 0x2902079a, 0x00000004, 0x002d0231, 0x33358029, 0x14002100, 0x00450229, 0x15002100, 0x00450245, 0x0234034c, 0x0190289c, 0x00000004, 0x2a46282f, 0x04013402, 0x04013102, 0x2a160001, 0x00000102, 0x01034c00, 0xc82d2f05, 0x01010205, 0x33358029, 0x14002100, 0x00450229, 0x15002100, 0x00450245, 0x012a0228, 0x9a000000, 0x04012a02, 0x2dad2d3e, 0x0a008f00, 0x50940106, 0x000205fd, 0x00080233, 0x23fd0301, 0x33024022, 0x02060301, 0x06040000 }; -u32 ai_35[] = { 0xad480a00, 0x3c33bf00, 0xb8080000, 0x00000002, 0x00038f00, 0x50060002, 0x05fd0008, 0x023323fd, 0x03013304 }; -u32 ai_41[] = { 0x97338097, 0x34809735, 0x80973680, 0x97378002, 0x00039c00, 0x00000203, 0x01000203, 0x03ad5420, 0x73617720, 0x420a00f3, 0x36bd07ff, 0x00580418, 0x00000000, 0x36023603, 0x31442900, 0x190229f3, 0x19bd02ff, 0x005c0419, 0x00000000, 0x04021903, 0x31452900, 0x190229ad, 0x210a00f3, 0x19bd02ff, 0x005a041a, 0x00000000, 0x04021903, 0x31462900, 0x190229f3, 0x19bd02ff, 0x005d041b, 0x00000000, 0x04021903, 0x31472900, 0x190229f3, 0x19bd02ff, 0x005f041c, 0x00000000, 0x04021903, 0x31482900, 0x190229f3, 0x19bd02ff, 0x0059041d, 0x00000000, 0x04021903, 0x31492900, 0x190229f3, 0x19bd02ff, 0x005b041e, 0x00000000, 0x04021902, 0x04039c00, 0x00000837, 0x01360237, 0x03312529, 0x00190229, 0xf319bd02, 0xff005c04, 0x1f000000, 0x00050219, 0x03312629, 0x00190229, 0xf319bd02, 0xff005c04, 0x20000000, 0x00050219, 0x03312729, 0x00190229, 0xf319bd02, 0xff005c04, 0x21000000, 0x00050219, 0x0205039c, 0x00000040, 0x06013602, 0x06030106, 0x04000000 }; -u32 ai_42[] = { 0x023a0203, 0x03382901, 0x030229ae, 0x020403b4, 0x00012c29, 0x01040229, 0x9a000000, 0x409a0000, 0x00040205, 0x03010504 }; -u32 ai_43[] = { 0x023a035c, 0x0b015c0c, 0x015c0d01, 0x013a0201, 0xc20c2701, 0x3a040000 }; -u32 ai_44[] = { 0x023a039c, 0x00002000, 0x29013a02, 0x29f329bd, 0x02ff0103, 0x040b0000, 0x00002902, 0x29f329bd, 0x02ff0104, 0x040b0000, 0x00002902, 0x29f329bd, 0x02ff0105, 0x040b0000, 0x00002902, 0x29f329bd, 0x02ff0106, 0x040b0000, 0x00002902, 0x29020103, 0x01010400 }; -u32 ai_45[] = { 0x023a0333, 0x55000b29, 0x013a0229, 0x33352329, 0xad53310a, 0x00f301bd, 0x233300ee, 0x04250000, 0x00100102, 0x29354629, 0xad53320a, 0x00f301bd, 0x233300ef, 0x04250000, 0x00100102, 0x29356929, 0xad53330a, 0x00f301bd, 0x233300f0, 0x04250000, 0x00100102, 0x29358c29, 0xad53340a, 0x00f301bd, 0x233300f1, 0x04250000, 0x00100102, 0x2935af29, 0xad53350a, 0x00f301bd, 0x233300f2, 0x04250000, 0x00100102, 0x2935d229, 0xad53360a, 0x00f301bd, 0x233300f3, 0x04250000, 0x00100102, 0x29ad5337, 0x0a00f301, 0xbd233300, 0xf4042500, 0x00001001, 0x02019a00, 0x02000003, 0x01010400 }; -u32 ai_46[] = { 0x0242035b, 0x17290003, 0x02295b18, 0x29000302, 0x295b1929, 0x00030229, 0x5b1a2900, 0x03022903, 0x5b1b2900, 0x0302295b, 0x1c290003, 0x02295b1d, 0x29000302, 0x295b1e29, 0x00030229, 0x5b1f2900, 0x03022901, 0x420203c3, 0x0c28c400, 0xa1006720, 0x6a2080a6, 0x20200000, 0x00a62010, 0x000000a6, 0x20080000, 0x00020003, 0x01000400 }; -u32 ai_37[] = { 0xdf22df23, 0xd9fd0086, 0x2902290a, 0x006bffff, 0xffff0610, 0xae020303, 0xb400003c, 0x29010302, 0x290a0068, 0x0000ffff, 0x06100204, 0x032f2901, 0x040229da, 0x020503dc, 0x29010502, 0x29d205fd, 0x00010400 }; -u32 ai_38[] = { 0xd9fd0136, 0x2902290a, 0x0062007f, 0xffff8610, 0xae020303, 0xb40000ba, 0x29010302, 0x29e0fd00, 0x0204032f, 0x29b40000, 0xbe290104, 0x0229da02, 0x0503dc29, 0x01050229, 0xd205fd00, 0x01040000 }; -u32 ai_47[] = { 0x9501023a, 0x03eb4655, 0x01352955, 0x00874501, 0x3a024594, 0x0102299a, 0x00008000, 0xecd700da, 0x020603dc, 0x29010602, 0x29f12905, 0xfd000f02, 0x29ddea59, 0x18295919, 0x29590429, 0x59052959, 0x06295907, 0x29590829, 0x59092959, 0x0a29590b, 0x29590c29, 0x590d2959, 0x0e29590f, 0x29591029, 0x59112959, 0x12295913, 0x29591629, 0x59142959, 0x1529e405, 0x0229ed03, 0x03039601, 0x45d52500, 0x02000005, 0xf80427db, 0x020303dc, 0x29010302, 0x2905fd00, 0x010245d5, 0x24000200, 0x0005f804, 0x26db0204, 0x03dc2901, 0x04022905, 0xfd000102, 0x4605fd00, 0x01040000 }; -u32 ai_48[] = { 0x023a7100, 0x196b2608, 0x02190203, 0x035d2629, 0x01030229, 0x59262901, 0x030229c4, 0x00b800c5, 0x00260000, 0xae020403, 0xb40000b4, 0x29010402, 0x29c40053, 0x01c50126, 0x0000c30c, 0x29662601, 0x03040000 }; -u32 ai_49[] = { 0x023a03a0, 0x33001000, 0x00a03400, 0x100000a0, 0x35001000, 0x00a03600, 0x100000a0, 0x37001000, 0x0003a039, 0x00100000, 0xa03a0010, 0x0000a03b, 0x00100000, 0xa03c0010, 0x000003a0, 0x3d001000, 0x00a03e00, 0x100000a0, 0x3f001000, 0x00a04000, 0x100000a0, 0x41001000, 0x00a04200, 0x10000002, 0x4203f702, 0x29014202, 0x29c30c2a, 0x9a000040, 0x0005fd00, 0x01040000 }; -u32 ai_50[] = { 0x004a024d, 0x03682704, 0x4c014d02, 0x50036827, 0x014a6827, 0x084b0150, 0x024e0368, 0x27084b01, 0x4e024f03, 0x68270249, 0x6827044c, 0x014f0249, 0xd00b002f, 0x014d024c, 0xd00b002e, 0x0150024a, 0xd00b002e, 0x014e024b, 0xd00b002f, 0x014f0400 }; -u32 ai_51[] = { 0x004a024d, 0x03682004, 0x4c014d02, 0x50036820, 0x014a6820, 0x084b0150, 0x024e0368, 0x20084b01, 0x4e024f03, 0x68200249, 0x6820044c, 0x014f0249, 0xd00c002f, 0x014d024c, 0xd00c002e, 0x0150024a, 0xd00c002e, 0x014e024b, 0xd00c002f, 0x014f0400 }; -u32 ai_52[] = { 0x004a024d, 0x03682904, 0x4c014d02, 0x50036829, 0x014a6829, 0x084b0150, 0x024e0368, 0x29084b01, 0x4e024f03, 0x68290249, 0x6829044c, 0x014f0249, 0xd00d002f, 0x014d024c, 0xd00d002e, 0x0150024a, 0xd00d002e, 0x014e024b, 0xd00d002f, 0x014f0400, 0x03bd07ff, 0x00580011, 0x00000000, 0x29022903, 0xad544553, 0x544d454d, 0x20444f4e, 0x450a0005, 0xfd000104 }; -u32 ai_40[] = { 0x02000330, 0xfd2e2f48, 0x01000248, 0x55232853, 0x32523e53, 0x3f544651, 0x3a533b53, 0x0b293335, 0x01290604, 0x2805fd00, 0x03022901, 0x00025133, 0x357f5206, 0x042805fd, 0x000a0252, 0x06042805, 0xfd000602, 0x53060428, 0x05fd0008, 0x02540604, 0x2805fd00, 0x0b022e05, 0xfd000104 }; -u32 ai_53[] = { 0x023a039c, 0x00020000, 0x00013a02, 0x0003304f, 0x29010002, 0x299c0000, 0x02000170, 0x0201c30c, 0x479a0001, 0x00000201, 0x03010104 }; -u32 ai_54[] = { 0x004a024d, 0x03682004, 0x4c014d02, 0x50036820, 0x014a6820, 0x084b0150, 0x024e0368, 0x20084b01, 0x4e024f03, 0x68200249, 0x6820044c, 0x014f0249, 0xd02a0032, 0xd02b0032, 0x014d024c, 0xd02a002e, 0xd02b002e, 0x0150024a, 0xd02a0031, 0xd02b0031, 0x014e024b, 0xd02a012f, 0xd02b012f, 0x014f0400 }; -u32 ai_55[] = { 0x004a024d, 0x03682104, 0x4c014d02, 0x50036821, 0x014a6821, 0x084b0150, 0x024e0368, 0x21084b01, 0x4e024f03, 0x68210249, 0x6821044c, 0x014f0249, 0xd02c0132, 0xd02d0132, 0x014d024c, 0xd02c002e, 0xd02d002e, 0x0150024a, 0xd02c0031, 0xd02d0031, 0x014e024b, 0xd02c012f, 0xd02d012f, 0x014f0400 }; +u8 ai_0[] = { + guard_start_patrol(0x00) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x01) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_2[] = { + guard_start_patrol(0x02) + jump_to_ai_list(0xfd, 0x0c04) + ai_list_end +}; +u8 ai_3[] = { + guard_start_patrol(0x03) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_4[] = { + guard_start_patrol(0x04) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_5[] = { + guard_start_patrol(0x05) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_6[] = { + guard_start_patrol(0x06) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_12[] = { + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x25) + if_guard_has_stopped_moving(0x48) + goto_first(0x00) + label(0x48) + if_guard_shot_from_bond_missed(0x25) + if_guard_see_another_guard_shot(0x25) + if_guard_see_another_guard_die(0x26) + if_guard_sees_bond(0x1d) + ai_sleep + if_guard_heard_bond(0x1b) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x1b) + if_guard_heard_bond_within_last_10_secs(0x1b) + if_guard_and_bond_within_line_of_sight(0x1c) + label(0x47) + ai_sleep + if_guard_bitfield_is_set_on(0x80, 0x19) + if_guard_has_stopped_moving(0x03) + goto_first(0x00) + label(0x19) + if_guard_is_on_screen(0x29) + goto_first(0x00) + label(0x29) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0400) + label(0x03) + if_guard_hits_greater_than(0x00, 0x26) + goto_first(0x00) + label(0x04) + goto_first(0x00) + label(0x1b) + random_generate_seed + if_random_seed_greater_than(0x40, 0x1e) + goto_first(0x00) + label(0x1e) + guard_try_running_to_side(0x1c) + guard_bitfield_set_off(0x80) + goto_first(0x00) + label(0x1c) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x1d) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x1d) + if_guard_distance_to_bond_less_than(0x0a00, 0x1d) + goto_first(0x00) + label(0x1d) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x21) + if_guard_is_targeted_by_bond(0x21) + goto_first(0x00) + label(0x21) + guard_bitfield_set_off(0x80) + if_guard_distance_to_bond_less_than(0x6400, 0x25) + if_guard_hits_greater_than(0x00, 0x26) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0e04) + label(0x25) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0f04) + label(0x26) + random_generate_seed + if_random_seed_greater_than(0x40, 0x2a) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + label(0x2a) + debug_log 'I', 'f', ' ', 'o', 'n', 'l', 'y', ' ', 'I', ' ', 'h', 'a', 'd', ' ', 'a', ' ', 'g', 'u', 'n', '!', '!', '!', '\n', '\0', + guard_try_throwing_grenade(0x2b) + goto_first(0x00) + label(0x2b) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x2b) + label(0x01) + goto_first(0x00) + ai_list_end +}; +u8 ai_13[] = { + label(0x00) + ai_sleep + if_guard_has_stopped_moving(0x22) + goto_first(0x00) + label(0x22) + random_generate_seed + if_random_seed_greater_than(0x96, 0x23) + random_generate_seed + if_random_seed_greater_than(0x00, 0x24) + goto_next(0x01) + label(0x23) + guard_try_sidestepping(0x01) + label(0x24) + guard_try_running_to_side(0x01) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x03) + goto_first(0x01) + label(0x03) + if_guard_and_bond_within_line_of_sight(0x1c) + jump_to_return_ai_list + label(0x1c) + if_guard_counter_clockwise_direction_to_bond_less_than(0x6e, 0x1d) + if_guard_counter_clockwise_direction_to_bond_greater_than(0x91, 0x1d) + if_guard_distance_to_bond_less_than(0x0a00, 0x1d) + jump_to_return_ai_list + label(0x1d) + goto_first(0x22) + ai_list_end +}; +u8 ai_14[] = { + label(0x00) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfd, 0x26) + if_guard_shot_from_bond_missed(0x26) + goto_next(0x25) + label(0x25) + if_guard_is_targeted_by_bond(0x27) + if_guard_distance_to_bond_greater_than(0xc800, 0x20) + if_guard_and_bond_within_line_of_sight(0x27) + goto_next(0x20) + label(0x27) + if_guard_hits_greater_than(0x01, 0x02) + guard_surrenders + goto_first(0x00) + label(0x20) + goto_next(0x26) + label(0x26) + set_return_ai_list(0x0f04) + jump_to_ai_list(0xfd, 0x1004) + label(0x01) + jump_to_return_ai_list + label(0x02) + jump_to_ai_list(0xfd, 0x1000) + ai_list_end +}; +u8 ai_15[] = { + chr_drop_all_concealed_items(0xfd) + label(0x00) + guard_runs_to_pad(0x1700) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x01) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x1700, 0x01) + if_guard_shot_from_bond_missed(0x25) + goto_first(0x03) + label(0x25) + debug_log '!', '\n', '\0', + guard_surrenders + label(0x29) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xdc, 0x29) + if_guard_see_another_guard_die(0x29) + if_guard_has_stopped_moving(0x29) + goto_first(0x29) + label(0x29) + debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0', + goto_first(0x00) + label(0x01) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x1700, 0x33) + jump_to_return_ai_list + label(0x33) + if_guard_and_bond_within_line_of_sight(0x04) + guard_remove_fade + jump_to_return_ai_list + label(0x04) + ai_sleep + jump_to_return_ai_list + ai_list_end +}; +u8 ai_16[] = { + label(0x00) + guard_flags_set_on(0x10000000) + guard_sprints_to_pad(0x1700) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x01) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x1700, 0x01) + goto_first(0x03) + label(0x01) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x1700, 0x33) + goto_first(0x00) + label(0x33) + guard_remove_fade + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_36[] = { + guard_set_chr_num(0x4f) + chr_flags_set_on(0xfd, 0x00001000) + guard_flags_set_on(0x00080000) + chr_equip_object(0x00, 0xfd) + label(0x3a) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2d) + goto_first(0x3a) + label(0x2d) + debug_log 'c', 'o', 'n', '!', '\n', '\0', + ai_sleep + guard_try_walking_to_bond_position(0x03) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x29) + if_guard_distance_to_bond_less_than(0x1400, 0x04) + goto_first(0x03) + label(0x29) + if_guard_distance_to_bond_less_than(0x1400, 0x04) + goto_first(0x2d) + label(0x04) + if_chr_dying_or_dead(0xfd, 0x02) + text_print_top(0x110c) + guard_try_facing_target(0x0100, 0x0000, 0x29) + label(0x29) + local_timer_reset_start + label(0x05) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x01) + goto_first(0x05) + label(0x01) + if_chr_dying_or_dead(0xfd, 0x02) + text_print_top(0x120c) + bond_collect_object(0x00) + objective_bitfield_set_on(0x00020000) + label(0x06) + ai_sleep + if_local_timer_greater_than(0xe00100, 0x29) + goto_first(0x06) + label(0x29) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x1004) + label(0x02) + ai_sleep + goto_first(0x02) + ai_list_end +}; +u8 ai_11[] = { + label(0x00) + ai_sleep + if_guard_sees_bond(0x1b) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x1b) + if_guard_heard_bond_within_last_10_secs(0x1b) + if_guard_shot_from_bond_missed(0x1b) + if_guard_see_another_guard_shot(0x1b) + if_guard_see_another_guard_die(0x1b) + goto_first(0x00) + label(0x1b) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0f04) + ai_list_end +}; +u8 ai_7[] = { + label(0x00) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x29) + goto_first(0x00) + label(0x29) + objective_bitfield_set_on(0x00200000) + debug_log 's', 'e', 't', ' ', 'f', 'l', 'a', 'g', '\n', '\0', + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_8[] = { + label(0x00) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2a) + goto_first(0x00) + label(0x2a) + guard_try_firing_walk(0x03) + goto_next(0x2a) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x2a) + goto_first(0x03) + label(0x2a) + guard_try_firing_run(0x04) + goto_next(0x01) + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x04) + label(0x01) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_9[] = { + ai_list_end +}; +u8 ai_10[] = { + label(0x00) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x00) + label(0x00) + guard_try_spawning_hat(0xd900, 0x00000000, 0x00) + label(0x00) + label(0x29) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x2d) + if_guard_and_bond_within_line_of_sight(0x2a) + goto_first(0x29) + label(0x2d) + debug_log 'a', '\n', '\0', + guard_runs_to_pad(0x3f00) + label(0x03) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2a) + goto_first(0x03) + label(0x2a) + guard_try_firing_run(0x01) + label(0x01) + guard_bitfield_set_on(0x01) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0600) + label(0x2a) + guard_bitfield_set_on(0x01) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + ai_list_end +}; +u8 ai_17[] = { + label(0x00) + ai_sleep + if_guard_sees_bond(0x01) + if_mission_time_greater_than(0xf000, 0x2d) + goto_first(0x00) + label(0x2d) + debug_log 'I', 'm', ' ', 'b', 'u', 'r', 's', 't', 'i', 'n', 'g', '!', '\n', '\0', + guard_runs_to_pad(0x0b00) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x01) + if_guard_sees_bond(0x01) + goto_first(0x03) + label(0x01) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0d04) + ai_list_end +}; +u8 ai_18[] = { + guard_set_health_total(0x5000) + guard_flags_set_on(0x40080000) + guard_walks_to_pad(0x7c00) + label(0x3a) + ai_sleep + if_guard_has_stopped_moving(0x00) + goto_first(0x3a) + label(0x00) + ai_sleep + guard_try_unknown6E(0x08, 0x03) + guard_try_unknown6E(0x04, 0x03) + guard_try_unknown6E(0x02, 0x03) + guard_try_unknown6E(0x01, 0x03) + goto_first(0x00) + label(0x03) + guard_walks_to_pad(0x2823) + goto_next(0x04) + label(0x04) + ai_sleep + if_guard_sees_bond(0x1d) + label(0x29) + if_guard_has_stopped_moving(0x05) + goto_first(0x04) + label(0x05) + goto_first(0x00) + label(0x1d) + debug_log 'I', ' ', 's', 'e', 'e', 'B', '\n', '\0', + set_return_ai_list(0x1404) + jump_to_ai_list(0xfd, 0x1404) + goto_first(0x00) + ai_list_end +}; +u8 ai_19[] = { + label(0x00) + guard_try_running_to_bond_position(0x03) + label(0x03) + ai_sleep + if_guard_hits_greater_than(0x00, 0x43) + if_bond_in_room_with_pad(0x6300, 0x3b) + if_chr_dying_or_dead(0xfd, 0x2f) + if_guard_distance_to_bond_less_than(0x1900, 0x05) + if_guard_has_stopped_moving(0x04) + goto_first(0x03) + label(0x04) + ai_sleep + if_guard_distance_to_bond_less_than(0x1900, 0x05) + goto_first(0x00) + label(0x05) + if_objective_bitfield_is_set_on(0x10000000, 0x3c) + guard_animation_stop + text_print_top(0x090c) + goto_next(0x29) + label(0x3c) + guard_animation_stop + text_print_top(0x150c) + label(0x29) + local_timer_reset_start + if_guard_distance_to_bond_less_than(0x1e00, 0x29) + guard_try_walking_to_bond_position(0x29) + label(0x29) + label(0x11) + ai_sleep + if_guard_hits_greater_than(0x00, 0x43) + if_bond_in_room_with_pad(0x6300, 0x3b) + if_chr_dying_or_dead(0xfd, 0x2f) + if_local_timer_greater_than(0xa40100, 0x29) + goto_first(0x11) + label(0x29) + guard_animation_stop + text_print_top(0x0a0c) + if_guard_distance_to_bond_less_than(0x1e00, 0x29) + guard_try_walking_to_bond_position(0x29) + label(0x29) + label(0x0c) + ai_sleep + if_guard_hits_greater_than(0x00, 0x43) + if_bond_in_room_with_pad(0x6300, 0x3b) + if_chr_dying_or_dead(0xfd, 0x2f) + if_local_timer_greater_than(0x580200, 0x29) + goto_first(0x0c) + label(0x29) + guard_animation_stop + text_print_top(0x0b0c) + objective_bitfield_set_on(0x00010000) + if_guard_distance_to_bond_less_than(0x1e00, 0x29) + guard_try_walking_to_bond_position(0x29) + label(0x29) + label(0x0d) + ai_sleep + if_guard_hits_greater_than(0x00, 0x43) + if_bond_in_room_with_pad(0x6300, 0x3b) + if_chr_dying_or_dead(0xfd, 0x2f) + if_local_timer_greater_than(0x840300, 0x29) + goto_first(0x0d) + label(0x29) + guard_animation_stop + if_bond_health_less_than(0x4c, 0x3f) + if_bond_health_less_than(0xb2, 0x3e) + label(0x3d) + text_print_top(0x0c0c) + goto_next(0x29) + label(0x3e) + text_print_top(0x170c) + goto_next(0x29) + label(0x3f) + text_print_top(0x180c) + goto_next(0x29) + label(0x29) + if_guard_distance_to_bond_less_than(0x1e00, 0x29) + guard_try_walking_to_bond_position(0x29) + label(0x29) + label(0x0e) + ai_sleep + if_guard_hits_greater_than(0x00, 0x43) + if_bond_in_room_with_pad(0x6300, 0x3b) + if_chr_dying_or_dead(0xfd, 0x2f) + if_local_timer_greater_than(0xb00400, 0x29) + goto_first(0x0e) + label(0x29) + guard_animation_stop + text_print_top(0x0d0c) + if_guard_distance_to_bond_less_than(0x1e00, 0x29) + guard_try_walking_to_bond_position(0x29) + label(0x29) + label(0x0f) + ai_sleep + if_guard_hits_greater_than(0x00, 0x43) + if_bond_in_room_with_pad(0x6300, 0x3b) + if_chr_dying_or_dead(0xfd, 0x2f) + if_local_timer_greater_than(0xdc0500, 0x29) + goto_first(0x0f) + label(0x29) + guard_animation_stop + text_print_top(0x0e0c) + if_guard_distance_to_bond_less_than(0x1e00, 0x29) + guard_try_walking_to_bond_position(0x29) + label(0x29) + label(0x10) + ai_sleep + if_guard_hits_greater_than(0x00, 0x43) + if_bond_in_room_with_pad(0x6300, 0x3b) + if_chr_dying_or_dead(0xfd, 0x2f) + if_local_timer_greater_than(0x900600, 0x01) + goto_first(0x10) + label(0x01) + ai_sleep + alarm_on + guard_animation_stop + if_chr_dying_or_dead(0xfd, 0x2f) + if_local_timer_greater_than(0x080700, 0x29) + goto_first(0x01) + label(0x29) + text_print_top(0x0f0c) + label(0x07) + objective_bitfield_set_on(0x02000000) + guard_runs_to_pad(0x7c00) + label(0x06) + ai_sleep + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x7c00, 0x08) + if_guard_has_stopped_moving(0x29) + goto_first(0x06) + label(0x29) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x7c00, 0x08) + goto_first(0x07) + label(0x08) + if_chr_does_not_exist(0x44, 0x19) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0x4800, 0x29) + label(0x19) + if_chr_does_not_exist(0x45, 0x19) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0x4600, 0x29) + label(0x19) + if_chr_does_not_exist(0x46, 0x19) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0x4500, 0x29) + label(0x19) + if_chr_does_not_exist(0x47, 0x19) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0x4700, 0x29) + label(0x19) + if_chr_does_not_exist(0x48, 0x19) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0x4400, 0x29) + label(0x19) + guard_try_fire_or_aim_at_target(0x2800, 0x6d00, 0x29) + label(0x29) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x29) + goto_first(0x09) + label(0x29) + if_chr_does_not_exist(0x44, 0x19) + guard_try_fire_or_aim_at_target_update(0x0400, 0x4800, 0x34) + label(0x19) + if_chr_does_not_exist(0x45, 0x19) + guard_try_fire_or_aim_at_target_update(0x0400, 0x4600, 0x34) + label(0x19) + if_chr_does_not_exist(0x46, 0x19) + guard_try_fire_or_aim_at_target_update(0x0400, 0x4500, 0x34) + label(0x19) + if_chr_does_not_exist(0x47, 0x19) + guard_try_fire_or_aim_at_target_update(0x0400, 0x4700, 0x34) + label(0x19) + if_chr_does_not_exist(0x48, 0x19) + guard_try_fire_or_aim_at_target_update(0x0400, 0x4400, 0x34) + label(0x19) + guard_try_fire_or_aim_at_target_update(0x0800, 0x6d00, 0x34) + label(0x34) + ai_sleep + if_guard_bitfield_is_set_on(0x01, 0x2d) + if_guard_has_stopped_moving(0x29) + goto_first(0x34) + label(0x29) + label(0x29) + goto_first(0x08) + label(0x2d) + set_return_ai_list(0x1504) + jump_to_ai_list(0xfd, 0x1504) + label(0x2f) + text_print_top(0x100c) + objective_bitfield_set_on(0x02000000) + alarm_on + label(0x39) + ai_sleep + goto_first(0x39) + label(0x3b) + text_print_top(0x160c) + objective_bitfield_set_on(0x10000000) + set_return_ai_list(0x1304) + jump_to_ai_list(0xfd, 0x1304) + label(0x43) + set_return_ai_list(0x1604) + jump_to_ai_list(0xfd, 0x1604) + ai_list_end +}; +u8 ai_20[] = { + label(0x00) + guard_set_health_total(0x0a00) + guard_walks_to_pad(0x7a00) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x04) + goto_first(0x03) + label(0x04) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x7a00, 0x29) + goto_first(0x00) + label(0x29) + text_print_top(0x140c) + objective_bitfield_set_on(0x20000000) + label(0x25) + guard_surrenders + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x29) + goto_first(0x08) + label(0x29) + guard_kneel + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x04000000, 0x06) + goto_first(0x05) + label(0x06) + label(0x07) + ai_sleep + goto_first(0x07) + ai_list_end +}; +u8 ai_21[] = { + text_print_top(0x250c) + objective_bitfield_set_on(0x00100000) + local_timer_reset_start + label(0x42) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x2f) + if_guard_and_bond_within_line_of_sight(0x03) + goto_next(0x2d) + goto_first(0x42) + label(0x2d) + guard_try_running_to_bond_position(0x04) + label(0x04) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x2f) + if_guard_distance_to_bond_less_than(0x6400, 0x29) + if_guard_has_stopped_moving(0x29) + goto_first(0x04) + label(0x29) + ai_sleep + goto_first(0x42) + label(0x03) + if_guard_bitfield_is_set_on(0x20, 0x29) + if_local_timer_greater_than(0x840300, 0x44) + label(0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x29) + label(0x29) + label(0x05) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x2f) + if_guard_has_stopped_moving(0x29) + goto_first(0x05) + label(0x29) + goto_first(0x42) + label(0x2f) + text_print_top(0x100c) + objective_bitfield_set_on(0x02000000) + alarm_on + label(0x39) + ai_sleep + goto_first(0x39) + label(0x44) + guard_bitfield_set_on(0x20) + text_print_top(0x260c) + goto_first(0x03) + ai_list_end +}; +u8 ai_23[] = { + guard_set_armour(0xe803) + guard_set_health_total(0x2c01) + guard_set_speed_rating(0x3c) + guard_set_accuracy_rating(0x64) + guard_set_argh_rating(0x64) + guard_flags_set_on(0x00080000) + guard_set_chr_num(0x4e) + guard_flags_set_on(0x40000000) + guard_try_spawning_item(0xcd00, 0x06, 0x00000000, 0x00) + label(0x00) + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_22[] = { + label(0x00) + guard_runs_to_pad(0x7b00) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x04) + goto_first(0x03) + label(0x04) + if_chr_does_not_exist(0x43, 0x28) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x7b00, 0x29) + goto_first(0x00) + label(0x29) + music_xtrack_play(0x00, 0xff, 0xff) + chr_bitfield_set_on(0x43, 0x01) + text_print_top(0x130c) + guard_try_fire_or_aim_at_target(0x2400, 0x4300, 0x05) + label(0x05) + if_objective_bitfield_is_set_on(0x04000000, 0x2a) + if_objective_bitfield_is_set_on(0x40000000, 0x41) + if_guard_shot_from_bond_missed(0x28) + if_objective_bitfield_is_set_on(0x20000000, 0x29) + ai_sleep + goto_first(0x05) + label(0x29) + local_timer_reset_start + label(0x42) + ai_sleep + if_objective_bitfield_is_set_on(0x04000000, 0x2a) + if_objective_bitfield_is_set_on(0x40000000, 0x41) + if_guard_shot_from_bond_missed(0x28) + if_local_timer_greater_than(0x640500, 0x28) + if_local_timer_greater_than(0x280500, 0x13) + if_local_timer_greater_than(0xb00400, 0x12) + if_local_timer_greater_than(0x380400, 0x11) + if_local_timer_greater_than(0xc00300, 0x10) + if_local_timer_greater_than(0x480300, 0x0f) + if_local_timer_greater_than(0xd00200, 0x0e) + if_local_timer_greater_than(0x580200, 0x0d) + if_local_timer_greater_than(0xe00100, 0x0c) + if_local_timer_greater_than(0x680100, 0x0b) + if_local_timer_greater_than(0x780000, 0x0a) + goto_first(0x42) + label(0x0a) + if_local_timer_greater_than(0x2c0100, 0x29) + text_print_top(0x240c) + label(0x29) + goto_first(0x42) + label(0x0b) + if_local_timer_greater_than(0xa40100, 0x29) + text_print_top(0x190c) + label(0x29) + goto_first(0x42) + label(0x0c) + if_local_timer_greater_than(0x1c0200, 0x29) + text_print_top(0x1a0c) + label(0x29) + goto_first(0x42) + label(0x0d) + if_local_timer_greater_than(0x940200, 0x29) + text_print_top(0x1b0c) + label(0x29) + goto_first(0x42) + label(0x0e) + if_local_timer_greater_than(0x0c0300, 0x29) + text_print_top(0x1c0c) + label(0x29) + goto_first(0x42) + label(0x0f) + if_local_timer_greater_than(0x840300, 0x29) + text_print_top(0x1d0c) + label(0x29) + goto_first(0x42) + label(0x10) + if_local_timer_greater_than(0xfc0300, 0x29) + text_print_top(0x1e0c) + label(0x29) + goto_first(0x42) + label(0x11) + if_local_timer_greater_than(0x740400, 0x29) + text_print_top(0x1f0c) + label(0x29) + goto_first(0x42) + label(0x12) + if_local_timer_greater_than(0xec0400, 0x29) + text_print_top(0x200c) + label(0x29) + goto_first(0x42) + label(0x13) + ai_sleep + text_print_top(0x230c) + guard_try_fire_or_aim_at_target_update(0x0400, 0x4300, 0x29) + label(0x29) + ai_sleep + ai_sleep + ai_sleep + chr_hit_body_part_with_item_damage(0x43, 0x08, 0x06) + goto_first(0x42) + label(0x28) + objective_bitfield_set_on(0x04000000) + label(0x2a) + if_chr_does_not_exist(0x43, 0x19) + guard_try_fire_or_aim_at_target_update(0x0400, 0x4300, 0x01) + label(0x19) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x01) + label(0x29) + if_chr_does_not_exist(0x43, 0x19) + chr_hit_body_part_with_item_damage(0x43, 0x08, 0x06) + label(0x19) + if_objective_bitfield_is_set_on(0x40000000, 0x41) + if_guard_hits_greater_than(0x05, 0x41) + objective_bitfield_set_on(0x08000000) + guard_try_firing_walk(0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x29) + label(0x29) + goto_first(0x01) + label(0x01) + set_return_ai_list(0x1704) + jump_to_ai_list(0xfd, 0x0800) + label(0x41) + set_return_ai_list(0x1704) + jump_to_ai_list(0xfd, 0x1104) + ai_list_end +}; +u8 ai_24[] = { + debug_log '1', '\n', '\0', + guard_set_chr_num(0x44) + guard_set_pad_preset(0x7300) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_25[] = { + debug_log '2', '\n', '\0', + guard_set_chr_num(0x45) + guard_set_pad_preset(0x7400) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_26[] = { + debug_log '3', '\n', '\0', + guard_set_chr_num(0x46) + guard_set_pad_preset(0x7500) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_27[] = { + debug_log '4', '\n', '\0', + guard_set_chr_num(0x47) + guard_set_pad_preset(0x7600) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_28[] = { + debug_log '5', '\n', '\0', + guard_set_chr_num(0x48) + guard_set_pad_preset(0x7700) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_29[] = { + debug_log '6', '\n', '\0', + guard_set_chr_num(0x49) + guard_set_pad_preset(0x7900) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_30[] = { + debug_log 'h', '1', '\n', '\0', + guard_set_chr_num(0x25) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_31[] = { + debug_log 'h', '2', '\n', '\0', + guard_set_chr_num(0x26) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_32[] = { + debug_log 'h', '3', '\n', '\0', + guard_set_chr_num(0x27) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_33[] = { + debug_log 'h', '4', '\n', '\0', + guard_set_chr_num(0x28) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_34[] = { + debug_log 'd', '\n', '\0', + if_guard_and_bond_within_line_of_sight(0x33) + label(0x00) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x00) + label(0x00) + guard_try_spawning_hat(0xd900, 0x00000000, 0x00) + label(0x00) + label(0x03) + if_bond_distance_to_pad_greater_than(0xc800, 0x7b00, 0x2d) + guard_sprints_to_pad(0x2823) + label(0x29) + ai_sleep + if_guard_has_stopped_moving(0x31) + if_guard_distance_to_bond_less_than(0x3200, 0x2d) + if_guard_shot_from_bond_missed(0x07) + goto_first(0x29) + label(0x07) + objective_bitfield_set_on(0x04000000) + goto_next(0x2d) + label(0x31) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x45) + label(0x29) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x45) + label(0x45) + label(0x34) + ai_sleep + if_guard_distance_to_bond_greater_than(0x9001, 0x28) + if_objective_bitfield_is_set_on(0x04000000, 0x2a) + if_guard_shot_from_bond_missed(0x28) + if_guard_has_stopped_moving(0x04) + goto_first(0x34) + label(0x04) + goto_first(0x31) + label(0x2a) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + if_guard_distance_to_bond_greater_than(0xc800, 0x2d) + if_guard_has_stopped_moving(0x05) + goto_first(0x01) + label(0x05) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x45) + label(0x29) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x45) + label(0x45) + goto_first(0x2a) + label(0x28) + objective_bitfield_set_on(0x04000000) + goto_first(0x2a) + label(0x2d) + debug_log '-', '>', '\n', '\0', + guard_set_health_total(0x5000) + guard_bitfield_set_on(0x01) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + label(0x33) + chr_remove_instant(0xfd) + ai_sleep + goto_first(0x33) + label(0x40) + guard_remove_fade + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_35[] = { + debug_log 'H', '\n', '\0', + if_guard_and_bond_within_line_of_sight(0x33) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x00) + label(0x00) + ai_sleep + guard_set_health_total(0x5000) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + label(0x33) + chr_remove_instant(0xfd) + ai_sleep + goto_first(0x33) + ai_list_end +}; +u8 ai_41[] = { + chr_bitfield_set_on(0x33, 0x80) + chr_bitfield_set_on(0x34, 0x80) + chr_bitfield_set_on(0x35, 0x80) + chr_bitfield_set_on(0x36, 0x80) + chr_bitfield_set_on(0x37, 0x80) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x02000000, 0x03) + goto_first(0x00) + label(0x03) + ai_sleep + debug_log 'T', ' ', 's', 'a', 'w', ' ', 'B', '\n', '\0', + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x07, 0xff, 0x5800, 0x1804, 0x00000000, 0x36) + label(0x36) + ai_sleep + if_chr_does_not_exist(0x44, 0x29) + goto_next(0x19) + label(0x29) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x02, 0xff, 0x5c00, 0x1904, 0x00000000, 0x04) + label(0x19) + ai_sleep + if_chr_does_not_exist(0x45, 0x29) + goto_next(0x19) + label(0x29) + debug_log '!', '\n', '\0', + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x02, 0xff, 0x5a00, 0x1a04, 0x00000000, 0x04) + label(0x19) + ai_sleep + if_chr_does_not_exist(0x46, 0x29) + goto_next(0x19) + label(0x29) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x02, 0xff, 0x5d00, 0x1b04, 0x00000000, 0x04) + label(0x19) + ai_sleep + if_chr_does_not_exist(0x47, 0x29) + goto_next(0x19) + label(0x29) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x02, 0xff, 0x5f00, 0x1c04, 0x00000000, 0x04) + label(0x19) + ai_sleep + if_chr_does_not_exist(0x48, 0x29) + goto_next(0x19) + label(0x29) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x02, 0xff, 0x5900, 0x1d04, 0x00000000, 0x04) + label(0x19) + ai_sleep + if_chr_does_not_exist(0x49, 0x29) + goto_next(0x19) + label(0x29) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x02, 0xff, 0x5b00, 0x1e04, 0x00000000, 0x04) + label(0x19) + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x08000000, 0x37) + goto_first(0x36) + label(0x37) + ai_sleep + if_chr_does_not_exist(0x25, 0x29) + goto_next(0x19) + label(0x29) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x02, 0xff, 0x5c00, 0x1f04, 0x00000000, 0x05) + label(0x19) + ai_sleep + if_chr_does_not_exist(0x26, 0x29) + goto_next(0x19) + label(0x29) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x02, 0xff, 0x5c00, 0x2004, 0x00000000, 0x05) + label(0x19) + ai_sleep + if_chr_does_not_exist(0x27, 0x29) + goto_next(0x19) + label(0x29) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x02, 0xff, 0x5c00, 0x2104, 0x00000000, 0x05) + label(0x19) + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x40000000, 0x06) + goto_first(0x36) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_42[] = { + label(0x3a) + label(0x03) + ai_sleep + if_gas_is_leaking(0x29) + goto_first(0x03) + label(0x29) + local_timer_reset_start + label(0x04) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x29) + goto_first(0x04) + label(0x29) + objective_bitfield_set_on(0x40000000) + objective_bitfield_set_on(0x04000000) + label(0x05) + ai_sleep + goto_first(0x05) + ai_list_end +}; +u8 ai_43[] = { + label(0x3a) + ai_sleep + if_object_was_activated(0x0b, 0x01) + if_object_was_activated(0x0c, 0x01) + if_object_was_activated(0x0d, 0x01) + goto_first(0x3a) + label(0x01) + text_print_bottom(0x270c) + goto_first(0x3a) + ai_list_end +}; +u8 ai_44[] = { + label(0x3a) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x29) + goto_first(0x3a) + label(0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x02, 0xff, 0x0301, 0x0b04, 0x00000000, 0x29) + label(0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x02, 0xff, 0x0401, 0x0b04, 0x00000000, 0x29) + label(0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x02, 0xff, 0x0501, 0x0b04, 0x00000000, 0x29) + label(0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x02, 0xff, 0x0601, 0x0b04, 0x00000000, 0x29) + label(0x29) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_45[] = { + label(0x3a) + ai_sleep + random_generate_seed + if_bond_in_room_with_pad(0x0b00, 0x29) + goto_first(0x3a) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x23, 0x29) + debug_log 'S', '1', '\n', '\0', + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x23, 0x33, 0xee00, 0x2504, 0x10000000, 0x01) + label(0x29) + if_random_seed_greater_than(0x46, 0x29) + debug_log 'S', '2', '\n', '\0', + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x23, 0x33, 0xef00, 0x2504, 0x10000000, 0x01) + label(0x29) + if_random_seed_greater_than(0x69, 0x29) + debug_log 'S', '3', '\n', '\0', + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x23, 0x33, 0xf000, 0x2504, 0x10000000, 0x01) + label(0x29) + if_random_seed_greater_than(0x8c, 0x29) + debug_log 'S', '4', '\n', '\0', + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x23, 0x33, 0xf100, 0x2504, 0x10000000, 0x01) + label(0x29) + if_random_seed_greater_than(0xaf, 0x29) + debug_log 'S', '5', '\n', '\0', + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x23, 0x33, 0xf200, 0x2504, 0x10000000, 0x01) + label(0x29) + if_random_seed_greater_than(0xd2, 0x29) + debug_log 'S', '6', '\n', '\0', + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x23, 0x33, 0xf300, 0x2504, 0x10000000, 0x01) + label(0x29) + debug_log 'S', '7', '\n', '\0', + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x23, 0x33, 0xf400, 0x2504, 0x10000000, 0x01) + label(0x01) + objective_bitfield_set_on(0x00000200) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_46[] = { + label(0x42) + ai_sleep + if_object_not_destroyed(0x17, 0x29) + goto_next(0x03) + label(0x29) + if_object_not_destroyed(0x18, 0x29) + goto_next(0x03) + label(0x29) + if_object_not_destroyed(0x19, 0x29) + goto_next(0x03) + label(0x29) + if_object_not_destroyed(0x1a, 0x29) + goto_next(0x03) + label(0x29) + ai_sleep + if_object_not_destroyed(0x1b, 0x29) + goto_next(0x03) + label(0x29) + if_object_not_destroyed(0x1c, 0x29) + goto_next(0x03) + label(0x29) + if_object_not_destroyed(0x1d, 0x29) + goto_next(0x03) + label(0x29) + if_object_not_destroyed(0x1e, 0x29) + goto_next(0x03) + label(0x29) + if_object_not_destroyed(0x1f, 0x29) + goto_next(0x03) + label(0x29) + goto_first(0x42) + label(0x03) + text_print_top(0x280c) + sfx_play(0xa100, 0x00) + door_close(0x20) + door_set_lock(0x20, 0x80) + object_flags_2_set_on(0x20, 0x00000020) + object_flags_2_set_on(0x20, 0x00000010) + object_flags_2_set_on(0x20, 0x00000008) + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_37[] = { + door_open_instant(0x22) + door_open_instant(0x23) + chr_try_teleporting_to_pad(0xfd, 0x8600, 0x29) + label(0x29) + guard_play_animation(0x6b00, 0xffff, 0xffff, 0x06, 0x10) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x29) + goto_first(0x03) + label(0x29) + guard_play_animation(0x6800, 0x0000, 0xffff, 0x06, 0x10) + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x04) + label(0x29) + screen_fade_to_black + label(0x05) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x05) + label(0x29) + exit_level + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_38[] = { + chr_try_teleporting_to_pad(0xfd, 0x3601, 0x29) + label(0x29) + guard_play_animation(0x6200, 0x7f00, 0xffff, 0x86, 0x10) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0xba0000, 0x29) + goto_first(0x03) + label(0x29) + chr_remove_item_in_hand(0xfd, 0x00) + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x29) + if_local_timer_greater_than(0xbe0000, 0x29) + goto_first(0x04) + label(0x29) + screen_fade_to_black + label(0x05) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x05) + label(0x29) + exit_level + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_47[] = { + guard_bitfield_set_off(0x01) + label(0x3a) + ai_sleep + if_bond_is_dead(0x46) + if_bond_in_room_with_pad(0x3501, 0x29) + if_bond_in_room_with_pad(0x8700, 0x45) + goto_first(0x3a) + label(0x45) + guard_bitfield_set_on(0x01) + label(0x29) + objective_bitfield_set_on(0x00800000) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x06) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x06) + label(0x29) + if_objective_all_completed(0x29) + jump_to_ai_list(0xfd, 0x0f00) + label(0x29) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + if_bond_has_item_equipped(0x18, 0x29) + if_bond_has_item_equipped(0x19, 0x29) + if_bond_has_item_equipped(0x04, 0x29) + if_bond_has_item_equipped(0x05, 0x29) + if_bond_has_item_equipped(0x06, 0x29) + if_bond_has_item_equipped(0x07, 0x29) + if_bond_has_item_equipped(0x08, 0x29) + if_bond_has_item_equipped(0x09, 0x29) + if_bond_has_item_equipped(0x0a, 0x29) + if_bond_has_item_equipped(0x0b, 0x29) + if_bond_has_item_equipped(0x0c, 0x29) + if_bond_has_item_equipped(0x0d, 0x29) + if_bond_has_item_equipped(0x0e, 0x29) + if_bond_has_item_equipped(0x0f, 0x29) + if_bond_has_item_equipped(0x10, 0x29) + if_bond_has_item_equipped(0x11, 0x29) + if_bond_has_item_equipped(0x12, 0x29) + if_bond_has_item_equipped(0x13, 0x29) + if_bond_has_item_equipped(0x16, 0x29) + if_bond_has_item_equipped(0x14, 0x29) + if_bond_has_item_equipped(0x15, 0x29) + bond_equip_item_cinema(0x05) + label(0x29) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + if_guard_bitfield_is_set_on(0x01, 0x45) + camera_switch(0x25, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x2704) + screen_fade_from_black + label(0x03) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x03) + label(0x29) + jump_to_ai_list(0xfd, 0x0100) + label(0x45) + camera_switch(0x24, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x2604) + screen_fade_from_black + label(0x04) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x04) + label(0x29) + jump_to_ai_list(0xfd, 0x0100) + label(0x46) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_48[] = { + label(0x3a) + if_game_difficulty_greater_than(0x00, 0x19) + door_unset_lock(0x26, 0x08) + label(0x19) + label(0x03) + ai_sleep + if_bond_used_gadget_on_object(0x26, 0x29) + goto_first(0x03) + label(0x29) + if_bond_has_item_equipped(0x26, 0x29) + goto_first(0x03) + label(0x29) + sfx_play(0xb800, 0x00) + sfx_emit_from_object(0x00, 0x26, 0x0000) + local_timer_reset_start + label(0x04) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x29) + goto_first(0x04) + label(0x29) + sfx_play(0x5300, 0x01) + sfx_emit_from_object(0x01, 0x26, 0x0000) + text_print_top(0x290c) + door_open(0x26) + goto_first(0x03) + ai_list_end +}; +u8 ai_49[] = { + label(0x3a) + ai_sleep + chr_flags_set_on(0x33, 0x00001000) + chr_flags_set_on(0x34, 0x00001000) + chr_flags_set_on(0x35, 0x00001000) + chr_flags_set_on(0x36, 0x00001000) + chr_flags_set_on(0x37, 0x00001000) + ai_sleep + chr_flags_set_on(0x39, 0x00001000) + chr_flags_set_on(0x3a, 0x00001000) + chr_flags_set_on(0x3b, 0x00001000) + chr_flags_set_on(0x3c, 0x00001000) + ai_sleep + chr_flags_set_on(0x3d, 0x00001000) + chr_flags_set_on(0x3e, 0x00001000) + chr_flags_set_on(0x3f, 0x00001000) + chr_flags_set_on(0x40, 0x00001000) + chr_flags_set_on(0x41, 0x00001000) + chr_flags_set_on(0x42, 0x00001000) + label(0x42) + ai_sleep + if_killed_civilians_greater_than(0x02, 0x29) + goto_first(0x42) + label(0x29) + text_print_top(0x2a0c) + objective_bitfield_set_on(0x00400000) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_50[] = { + goto_next(0x4a) + label(0x4d) + ai_sleep + if_door_state_equal(0x27, 0x04, 0x4c) + goto_first(0x4d) + label(0x50) + ai_sleep + if_door_state_equal(0x27, 0x01, 0x4a) + if_door_state_equal(0x27, 0x08, 0x4b) + goto_first(0x50) + label(0x4e) + ai_sleep + if_door_state_equal(0x27, 0x08, 0x4b) + goto_first(0x4e) + label(0x4f) + ai_sleep + if_door_state_equal(0x27, 0x02, 0x49) + if_door_state_equal(0x27, 0x04, 0x4c) + goto_first(0x4f) + label(0x49) + tv_change_screen_bank(0x0b, 0x00, 0x2f) + goto_first(0x4d) + label(0x4c) + tv_change_screen_bank(0x0b, 0x00, 0x2e) + goto_first(0x50) + label(0x4a) + tv_change_screen_bank(0x0b, 0x00, 0x2e) + goto_first(0x4e) + label(0x4b) + tv_change_screen_bank(0x0b, 0x00, 0x2f) + goto_first(0x4f) + ai_list_end +}; +u8 ai_51[] = { + goto_next(0x4a) + label(0x4d) + ai_sleep + if_door_state_equal(0x20, 0x04, 0x4c) + goto_first(0x4d) + label(0x50) + ai_sleep + if_door_state_equal(0x20, 0x01, 0x4a) + if_door_state_equal(0x20, 0x08, 0x4b) + goto_first(0x50) + label(0x4e) + ai_sleep + if_door_state_equal(0x20, 0x08, 0x4b) + goto_first(0x4e) + label(0x4f) + ai_sleep + if_door_state_equal(0x20, 0x02, 0x49) + if_door_state_equal(0x20, 0x04, 0x4c) + goto_first(0x4f) + label(0x49) + tv_change_screen_bank(0x0c, 0x00, 0x2f) + goto_first(0x4d) + label(0x4c) + tv_change_screen_bank(0x0c, 0x00, 0x2e) + goto_first(0x50) + label(0x4a) + tv_change_screen_bank(0x0c, 0x00, 0x2e) + goto_first(0x4e) + label(0x4b) + tv_change_screen_bank(0x0c, 0x00, 0x2f) + goto_first(0x4f) + ai_list_end +}; +u8 ai_52[] = { + goto_next(0x4a) + label(0x4d) + ai_sleep + if_door_state_equal(0x29, 0x04, 0x4c) + goto_first(0x4d) + label(0x50) + ai_sleep + if_door_state_equal(0x29, 0x01, 0x4a) + if_door_state_equal(0x29, 0x08, 0x4b) + goto_first(0x50) + label(0x4e) + ai_sleep + if_door_state_equal(0x29, 0x08, 0x4b) + goto_first(0x4e) + label(0x4f) + ai_sleep + if_door_state_equal(0x29, 0x02, 0x49) + if_door_state_equal(0x29, 0x04, 0x4c) + goto_first(0x4f) + label(0x49) + tv_change_screen_bank(0x0d, 0x00, 0x2f) + goto_first(0x4d) + label(0x4c) + tv_change_screen_bank(0x0d, 0x00, 0x2e) + goto_first(0x50) + label(0x4a) + tv_change_screen_bank(0x0d, 0x00, 0x2e) + goto_first(0x4e) + label(0x4b) + tv_change_screen_bank(0x0d, 0x00, 0x2f) + goto_first(0x4f) + ai_list_end + goto_next(0x03) + chr_try_spawning_at_pad(0x07, 0xff, 0x5800, 0x1100, 0x00000000, 0x29) + label(0x29) + ai_sleep + debug_log 'T', 'E', 'S', 'T', 'M', 'E', 'M', ' ', 'D', 'O', 'N', 'E', '\n', '\0', + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_40[] = { + label(0x00) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x2e) + if_guard_has_stopped_moving(0x48) + goto_first(0x00) + label(0x48) + if_bond_in_room_with_pad(0x2823, 0x53) + if_guard_sees_bond(0x52) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x53) + if_guard_heard_bond_within_last_10_secs(0x54) + if_guard_shot_from_bond_missed(0x51) + if_guard_see_another_guard_shot(0x53) + if_guard_see_another_guard_die(0x53) + if_guard_playing_animation(0x29) + random_generate_seed + if_random_seed_greater_than(0x01, 0x29) + set_return_ai_list(0x2804) + jump_to_ai_list(0xfd, 0x0300) + label(0x29) + goto_first(0x00) + label(0x51) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x52) + set_return_ai_list(0x2804) + jump_to_ai_list(0xfd, 0x0a00) + label(0x52) + set_return_ai_list(0x2804) + jump_to_ai_list(0xfd, 0x0600) + label(0x53) + set_return_ai_list(0x2804) + jump_to_ai_list(0xfd, 0x0800) + label(0x54) + set_return_ai_list(0x2804) + jump_to_ai_list(0xfd, 0x0b00) + label(0x2e) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_53[] = { + label(0x3a) + ai_sleep + if_objective_bitfield_is_set_on(0x00000200, 0x00) + goto_first(0x3a) + label(0x00) + ai_sleep + if_chr_dying_or_dead(0x4f, 0x29) + goto_first(0x00) + label(0x29) + if_objective_bitfield_is_set_on(0x00020000, 0x01) + if_game_difficulty_less_than(0x02, 0x01) + text_print_top(0x470c) + objective_bitfield_set_on(0x00000100) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_54[] = { + goto_next(0x4a) + label(0x4d) + ai_sleep + if_door_state_equal(0x20, 0x04, 0x4c) + goto_first(0x4d) + label(0x50) + ai_sleep + if_door_state_equal(0x20, 0x01, 0x4a) + if_door_state_equal(0x20, 0x08, 0x4b) + goto_first(0x50) + label(0x4e) + ai_sleep + if_door_state_equal(0x20, 0x08, 0x4b) + goto_first(0x4e) + label(0x4f) + ai_sleep + if_door_state_equal(0x20, 0x02, 0x49) + if_door_state_equal(0x20, 0x04, 0x4c) + goto_first(0x4f) + label(0x49) + tv_change_screen_bank(0x2a, 0x00, 0x32) + tv_change_screen_bank(0x2b, 0x00, 0x32) + goto_first(0x4d) + label(0x4c) + tv_change_screen_bank(0x2a, 0x00, 0x2e) + tv_change_screen_bank(0x2b, 0x00, 0x2e) + goto_first(0x50) + label(0x4a) + tv_change_screen_bank(0x2a, 0x00, 0x31) + tv_change_screen_bank(0x2b, 0x00, 0x31) + goto_first(0x4e) + label(0x4b) + tv_change_screen_bank(0x2a, 0x01, 0x2f) + tv_change_screen_bank(0x2b, 0x01, 0x2f) + goto_first(0x4f) + ai_list_end +}; +u8 ai_55[] = { + goto_next(0x4a) + label(0x4d) + ai_sleep + if_door_state_equal(0x21, 0x04, 0x4c) + goto_first(0x4d) + label(0x50) + ai_sleep + if_door_state_equal(0x21, 0x01, 0x4a) + if_door_state_equal(0x21, 0x08, 0x4b) + goto_first(0x50) + label(0x4e) + ai_sleep + if_door_state_equal(0x21, 0x08, 0x4b) + goto_first(0x4e) + label(0x4f) + ai_sleep + if_door_state_equal(0x21, 0x02, 0x49) + if_door_state_equal(0x21, 0x04, 0x4c) + goto_first(0x4f) + label(0x49) + tv_change_screen_bank(0x2c, 0x01, 0x32) + tv_change_screen_bank(0x2d, 0x01, 0x32) + goto_first(0x4d) + label(0x4c) + tv_change_screen_bank(0x2c, 0x00, 0x2e) + tv_change_screen_bank(0x2d, 0x00, 0x2e) + goto_first(0x50) + label(0x4a) + tv_change_screen_bank(0x2c, 0x00, 0x31) + tv_change_screen_bank(0x2d, 0x00, 0x31) + goto_first(0x4e) + label(0x4b) + tv_change_screen_bank(0x2c, 0x01, 0x2f) + tv_change_screen_bank(0x2d, 0x01, 0x2f) + goto_first(0x4f) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/UsetupaztZ.c b/assets/obseg/setup/UsetupaztZ.c index 78967f62..c01ad989 100644 --- a/assets/obseg/setup/UsetupaztZ.c +++ b/assets/obseg/setup/UsetupaztZ.c @@ -1434,2409 +1434,696 @@ PathRecord patrolpaths[] = { u8 ai_0[] = { - // 0x20 - guard_start_patrol( - // path_num - 0x0) - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x700) - // 0x04 + guard_start_patrol(0x0) + jump_to_ai_list(0xfd, 0x700) ai_list_end - ,0x00 }; u8 ai_10[] = { - // 0x02 - label( - // id - 0x6) - // 0x03 + label(0x6) ai_sleep - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x8300, 0x2c) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x2c) - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x10000, 0x36) - // 0x5e - object_activate( - // object_tag - 0xb) - // 0x02 - label( - // id - 0x36) - // 0x02 - label( - // id - 0x7) - // 0x03 + if_bond_in_room_with_pad(0x8300, 0x2c) + goto_first(0x6) + label(0x2c) + if_objective_bitfield_is_set_on(0x10000, 0x36) + object_activate(0xb) + label(0x36) + label(0x7) ai_sleep - // 0xad - // debug_log: W2 - 0xad, 0x57, 0x32, 0x0a, 0x00, - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x10000, 0x2c) - // 0x01 - goto_first( - // label - 0x7) - // 0x02 - label( - // id - 0x2c) - // 0xae + debug_log 'W', '2', '\n', '\0', + if_objective_bitfield_is_set_on(0x10000, 0x2c) + goto_first(0x7) + label(0x2c) local_timer_reset_start - // 0x02 - label( - // id - 0xb) - // 0x03 + label(0xb) ai_sleep - // 0xad - // debug_log: I2 - 0xad, 0x49, 0x32, 0x0a, 0x00, - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x580200, 0x18) - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x860100, 0x17) - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x4a0100, 0x16) - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0xd20000, 0x15) - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x960000, 0x14) - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x5a0000, 0x13) - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x1e0000, 0x12) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x12) - // 0xad - // debug_log: T1 - 0xad, 0x54, 0x31, 0x0a, 0x00, - // 0xa4 - object_flags_1_set_off( - // object_tag, bitfield - 0x1, 0x200) - // 0x5f - object_destroy( - // object_tag - 0x1) - // 0xa4 - object_flags_1_set_off( - // object_tag, bitfield - 0x2, 0x200) - // 0x5f - object_destroy( - // object_tag - 0x2) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x13) - // 0xa4 - object_flags_1_set_off( - // object_tag, bitfield - 0x3, 0x200) - // 0x5f - object_destroy( - // object_tag - 0x3) - // 0xa4 - object_flags_1_set_off( - // object_tag, bitfield - 0x4, 0x200) - // 0x5f - object_destroy( - // object_tag - 0x4) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x14) - // 0xa4 - object_flags_1_set_off( - // object_tag, bitfield - 0x5, 0x200) - // 0x5f - object_destroy( - // object_tag - 0x5) - // 0xa4 - object_flags_1_set_off( - // object_tag, bitfield - 0x6, 0x200) - // 0x5f - object_destroy( - // object_tag - 0x6) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x15) - // 0xa4 - object_flags_1_set_off( - // object_tag, bitfield - 0x7, 0x200) - // 0x5f - object_destroy( - // object_tag - 0x7) - // 0xa4 - object_flags_1_set_off( - // object_tag, bitfield - 0x8, 0x200) - // 0x5f - object_destroy( - // object_tag - 0x8) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x16) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x17) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x18) - // 0xad - // debug_log: CL - 0xad, 0x43, 0x4c, 0x0a, 0x00, - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x100) - // 0x04 + debug_log 'I', '2', '\n', '\0', + if_local_timer_greater_than(0x580200, 0x18) + if_local_timer_greater_than(0x860100, 0x17) + if_local_timer_greater_than(0x4a0100, 0x16) + if_local_timer_greater_than(0xd20000, 0x15) + if_local_timer_greater_than(0x960000, 0x14) + if_local_timer_greater_than(0x5a0000, 0x13) + if_local_timer_greater_than(0x1e0000, 0x12) + goto_first(0xb) + label(0x12) + debug_log 'T', '1', '\n', '\0', + object_flags_1_set_off(0x1, 0x200) + object_destroy(0x1) + object_flags_1_set_off(0x2, 0x200) + object_destroy(0x2) + goto_first(0xb) + label(0x13) + object_flags_1_set_off(0x3, 0x200) + object_destroy(0x3) + object_flags_1_set_off(0x4, 0x200) + object_destroy(0x4) + goto_first(0xb) + label(0x14) + object_flags_1_set_off(0x5, 0x200) + object_destroy(0x5) + object_flags_1_set_off(0x6, 0x200) + object_destroy(0x6) + goto_first(0xb) + label(0x15) + object_flags_1_set_off(0x7, 0x200) + object_destroy(0x7) + object_flags_1_set_off(0x8, 0x200) + object_destroy(0x8) + goto_first(0xb) + label(0x16) + goto_first(0xb) + label(0x17) + goto_first(0xb) + label(0x18) + debug_log 'C', 'L', '\n', '\0', + jump_to_ai_list(0xfd, 0x100) ai_list_end - ,0x00,0x00 }; u8 ai_11[] = { - // 0x9b - objective_bitfield_set_off( - // bitfield - 0x10000) - // 0x02 - label( - // id - 0x0) - // 0x03 + objective_bitfield_set_off(0x10000) + label(0x0) ai_sleep - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x10000, 0x36) - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x40000, 0xa) - // 0x01 - goto_first( - // label - 0x0) - // 0x02 - label( - // id - 0x36) - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x80000, 0xd) - // 0x01 - goto_first( - // label - 0x0) - // 0x02 - label( - // id - 0xa) - // 0xc3 - text_print_top( - // text_slot - 0x614) - // 0x67 - door_close( - // object_tag - 0x14) - // 0x66 - door_open( - // object_tag - 0x0) - // 0xae + if_objective_bitfield_is_set_on(0x10000, 0x36) + if_objective_bitfield_is_set_on(0x40000, 0xa) + goto_first(0x0) + label(0x36) + if_objective_bitfield_is_set_on(0x80000, 0xd) + goto_first(0x0) + label(0xa) + text_print_top(0x614) + door_close(0x14) + door_open(0x0) local_timer_reset_start - // 0x02 - label( - // id - 0xb) - // 0x03 + label(0xb) ai_sleep - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x840300, 0x2c) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x2c) - // 0x66 - door_open( - // object_tag - 0x9) - // 0x67 - door_close( - // object_tag - 0xa) - // 0x02 - label( - // id - 0xc) - // 0x03 + if_local_timer_greater_than(0x840300, 0x2c) + goto_first(0xb) + label(0x2c) + door_open(0x9) + door_close(0xa) + label(0xc) ai_sleep - // 0x68 - if_door_state_equal( - // object_tag, door_state, label - 0x0, 0x2, 0x2c) - // 0x01 - goto_first( - // label - 0xc) - // 0x02 - label( - // id - 0x2c) - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x10000) - // 0x9b - objective_bitfield_set_off( - // bitfield - 0x40000) - // 0x01 - goto_first( - // label - 0x0) - // 0x02 - label( - // id - 0xd) - // 0xc3 - text_print_top( - // text_slot - 0x714) - // 0x66 - door_open( - // object_tag - 0x14) - // 0x67 - door_close( - // object_tag - 0x0) - // 0xae + if_door_state_equal(0x0, 0x2, 0x2c) + goto_first(0xc) + label(0x2c) + objective_bitfield_set_on(0x10000) + objective_bitfield_set_off(0x40000) + goto_first(0x0) + label(0xd) + text_print_top(0x714) + door_open(0x14) + door_close(0x0) local_timer_reset_start - // 0x02 - label( - // id - 0xe) - // 0x03 + label(0xe) ai_sleep - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x840300, 0x2c) - // 0x01 - goto_first( - // label - 0xe) - // 0x02 - label( - // id - 0x2c) - // 0x67 - door_close( - // object_tag - 0x9) - // 0x66 - door_open( - // object_tag - 0xa) - // 0x02 - label( - // id - 0xf) - // 0x03 + if_local_timer_greater_than(0x840300, 0x2c) + goto_first(0xe) + label(0x2c) + door_close(0x9) + door_open(0xa) + label(0xf) ai_sleep - // 0x68 - if_door_state_equal( - // object_tag, door_state, label - 0x0, 0x1, 0x2c) - // 0x01 - goto_first( - // label - 0xf) - // 0x02 - label( - // id - 0x2c) - // 0x9b - objective_bitfield_set_off( - // bitfield - 0x10000) - // 0x9b - objective_bitfield_set_off( - // bitfield - 0x80000) - // 0x01 - goto_first( - // label - 0x0) - // 0x04 + if_door_state_equal(0x0, 0x1, 0x2c) + goto_first(0xf) + label(0x2c) + objective_bitfield_set_off(0x10000) + objective_bitfield_set_off(0x80000) + goto_first(0x0) ai_list_end - ,0x00 }; u8 ai_12[] = { - // 0x02 - label( - // id - 0x0) - // 0x03 + label(0x0) ai_sleep - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x40000, 0x36) - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x80000, 0x36) - // 0x5c - if_object_was_activated( - // object_tag, label - 0xb, 0x2c) - // 0x02 - label( - // id - 0x36) - // 0x5c - if_object_was_activated( - // object_tag, label - 0xb, 0x36) - // 0x02 - label( - // id - 0x36) - // 0x01 - goto_first( - // label - 0x0) - // 0x02 - label( - // id - 0x2c) - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x10000, 0xa) - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x40000) - // 0x01 - goto_first( - // label - 0x0) - // 0x02 - label( - // id - 0xa) - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x100, 0xb) - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x80000) - // 0x01 - goto_first( - // label - 0x0) - // 0x02 - label( - // id - 0xb) - // 0xc3 - text_print_top( - // text_slot - 0xf14) - // 0x01 - goto_first( - // label - 0x0) - // 0x04 + if_objective_bitfield_is_set_on(0x40000, 0x36) + if_objective_bitfield_is_set_on(0x80000, 0x36) + if_object_was_activated(0xb, 0x2c) + label(0x36) + if_object_was_activated(0xb, 0x36) + label(0x36) + goto_first(0x0) + label(0x2c) + if_objective_bitfield_is_set_on(0x10000, 0xa) + objective_bitfield_set_on(0x40000) + goto_first(0x0) + label(0xa) + if_objective_bitfield_is_set_on(0x100, 0xb) + objective_bitfield_set_on(0x80000) + goto_first(0x0) + label(0xb) + text_print_top(0xf14) + goto_first(0x0) ai_list_end - ,0x00,0x00,0x00 }; u8 ai_13[] = { - // 0x02 - label( - // id - 0x6) - // 0x03 + label(0x6) ai_sleep - // 0x5d - if_bond_used_gadget_on_object( - // object_tag, label - 0x13, 0x2c) - // 0x5c - if_object_was_activated( - // object_tag, label - 0x13, 0x2d) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x2c) - // 0x59 - if_bond_has_item_equipped( - // item_num, label - 0x32, 0xb) - // 0x02 - label( - // id - 0x2d) - // 0xc3 - text_print_top( - // text_slot - 0x914) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0xb) - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x100000) - // 0xc3 - text_print_top( - // text_slot - 0x814) - // 0x02 - label( - // id - 0xc) - // 0x03 + if_bond_used_gadget_on_object(0x13, 0x2c) + if_object_was_activated(0x13, 0x2d) + goto_first(0x6) + label(0x2c) + if_bond_has_item_equipped(0x32, 0xb) + label(0x2d) + text_print_top(0x914) + goto_first(0x6) + label(0xb) + objective_bitfield_set_on(0x100000) + text_print_top(0x814) + label(0xc) ai_sleep - // 0x01 - goto_first( - // label - 0xc) - // 0x04 + goto_first(0xc) ai_list_end - ,0x00 }; u8 ai_14[] = { - // 0x02 - label( - // id - 0x6) - // 0x03 + label(0x6) ai_sleep - // 0x5d - if_bond_used_gadget_on_object( - // object_tag, label - 0xf, 0x2c) - // 0x5c - if_object_was_activated( - // object_tag, label - 0xf, 0x2d) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x2c) - // 0x59 - if_bond_has_item_equipped( - // item_num, label - 0x49, 0xb) - // 0x02 - label( - // id - 0x2d) - // 0xc3 - text_print_top( - // text_slot - 0xa14) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0xb) - // 0xc3 - text_print_top( - // text_slot - 0xb14) - // 0x02 - label( - // id - 0x2c) - // 0xae + if_bond_used_gadget_on_object(0xf, 0x2c) + if_object_was_activated(0xf, 0x2d) + goto_first(0x6) + label(0x2c) + if_bond_has_item_equipped(0x49, 0xb) + label(0x2d) + text_print_top(0xa14) + goto_first(0x6) + label(0xb) + text_print_top(0xb14) + label(0x2c) local_timer_reset_start - // 0x02 - label( - // id - 0xd) - // 0x03 + label(0xd) ai_sleep - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x2c0100, 0x2c) - // 0x01 - goto_first( - // label - 0xd) - // 0x02 - label( - // id - 0x2c) - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x200000) - // 0x02 - label( - // id - 0xc) - // 0x03 + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0xd) + label(0x2c) + objective_bitfield_set_on(0x200000) + label(0xc) ai_sleep - // 0x01 - goto_first( - // label - 0xc) - // 0x04 + goto_first(0xc) ai_list_end - ,0x00,0x00 }; u8 ai_15[] = { - // 0x02 - label( - // id - 0x6) - // 0x03 + label(0x6) ai_sleep - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x200000, 0x2c) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x2c) - // 0xb7 - hud_countdown_set( - // seconds - 0x1e00) - // 0xb9 + if_objective_bitfield_is_set_on(0x200000, 0x2c) + goto_first(0x6) + label(0x2c) + hud_countdown_set(0x1e00) hud_countdown_start - // 0xb5 hud_countdown_show - // 0xf4 - music_xtrack_play( - // music_slot, seconds_stopped_duration, seconds_total_duration - 0x0, 0x0, 0xff) - // 0xc3 - text_print_top( - // text_slot - 0xc14) - // 0x02 - label( - // id - 0xa) - // 0x03 + music_xtrack_play(0x0, 0x0, 0xff) + text_print_top(0xc14) + label(0xa) ai_sleep - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x10000, 0x2c) - // 0x00 - goto_next( - // label - 0x36) - // 0x02 - label( - // id - 0x2c) - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x100) - // 0x02 - label( - // id - 0x36) - // 0xbb - if_hud_countdown_less_than( - // seconds, label - 0xa00, 0x2c) - // 0x01 - goto_first( - // label - 0xa) - // 0x02 - label( - // id - 0x2c) - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x80000, 0x7) - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x10000, 0x4) - // 0x02 - label( - // id - 0x7) - // 0xb8 + if_objective_bitfield_is_set_on(0x10000, 0x2c) + goto_next(0x36) + label(0x2c) + objective_bitfield_set_on(0x100) + label(0x36) + if_hud_countdown_less_than(0xa00, 0x2c) + goto_first(0xa) + label(0x2c) + if_objective_bitfield_is_set_on(0x80000, 0x7) + if_objective_bitfield_is_set_on(0x10000, 0x4) + label(0x7) hud_countdown_stop - // 0xb7 - hud_countdown_set( - // seconds - 0xa00) - // 0xae + hud_countdown_set(0xa00) local_timer_reset_start - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x10000, 0x36) - // 0xc3 - text_print_top( - // text_slot - 0xe14) - // 0x02 - label( - // id - 0xc) - // 0x03 + if_objective_bitfield_is_set_on(0x10000, 0x36) + text_print_top(0xe14) + label(0xc) ai_sleep - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x2c0100, 0x2c) - // 0x01 - goto_first( - // label - 0xc) - // 0x02 - label( - // id - 0x2c) - // 0x01 - goto_first( - // label - 0x7) - // 0x02 - label( - // id - 0x36) - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x100) - // 0xb9 + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0xc) + label(0x2c) + goto_first(0x7) + label(0x36) + objective_bitfield_set_on(0x100) hud_countdown_start - // 0x02 - label( - // id - 0x4) - // 0xc3 - text_print_top( - // text_slot - 0xd14) - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x100) - // 0x02 - label( - // id - 0xb) - // 0x03 + label(0x4) + text_print_top(0xd14) + objective_bitfield_set_on(0x100) + label(0xb) ai_sleep - // 0xbb - if_hud_countdown_less_than( - // seconds, label - 0x100, 0x2c) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x2c) - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x400000) - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x800000) - // 0xb6 + if_hud_countdown_less_than(0x100, 0x2c) + goto_first(0xb) + label(0x2c) + objective_bitfield_set_on(0x400000) + objective_bitfield_set_on(0x800000) hud_countdown_hide - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x100) - // 0x04 + jump_to_ai_list(0xfd, 0x100) ai_list_end - }; u8 ai_1[] = { - // 0x91 - guard_set_speed_rating( - // speed_rating - 0x32) - // 0x93 - guard_set_accuracy_rating( - // accuracy_rating - 0x32) - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x200) - // 0x04 + guard_set_speed_rating(0x32) + guard_set_accuracy_rating(0x32) + jump_to_ai_list(0xfd, 0x200) ai_list_end - ,0x00,0x00,0x00 }; u8 ai_3[] = { - // 0x91 - guard_set_speed_rating( - // speed_rating - 0x32) - // 0x93 - guard_set_accuracy_rating( - // accuracy_rating - 0x32) - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x500) - // 0x04 + guard_set_speed_rating(0x32) + guard_set_accuracy_rating(0x32) + jump_to_ai_list(0xfd, 0x500) ai_list_end - ,0x00,0x00,0x00 }; u8 ai_2[] = { - // 0x90 - guard_set_armour( - // armour_value - 0xf401) - // 0x8f - guard_set_health_total( - // total_health - 0xf401) - // 0x91 - guard_set_speed_rating( - // speed_rating - 0x50) - // 0x93 - guard_set_accuracy_rating( - // accuracy_rating - 0x50) - // 0x92 - guard_set_argh_rating( - // speed_rating - 0x50) - // 0x9d - guard_flags_set_on( - // bitfield - 0x80000) - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x200) - // 0x04 + guard_set_armour(0xf401) + guard_set_health_total(0xf401) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_set_argh_rating(0x50) + guard_flags_set_on(0x80000) + jump_to_ai_list(0xfd, 0x200) ai_list_end - ,0x00,0x00 }; u8 ai_4[] = { - // 0x90 - guard_set_armour( - // armour_value - 0x1400) - // 0x91 - guard_set_speed_rating( - // speed_rating - 0x50) - // 0x93 - guard_set_accuracy_rating( - // accuracy_rating - 0x50) - // 0x02 - label( - // id - 0x4) - // 0x14 - guard_try_fire_or_aim_at_target( - // bitfield, target, label - 0x2100, 0x0, 0x6) - // 0x02 - label( - // id - 0x6) - // 0x03 + guard_set_armour(0x1400) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + label(0x4) + guard_try_fire_or_aim_at_target(0x2100, 0x0, 0x6) + label(0x6) ai_sleep - // 0x46 - if_guard_shot_from_bond_missed( - // label - 0x2c) - // 0x3a - if_guard_see_another_guard_shot( - // label - 0x2c) - // 0x3b - if_guard_see_another_guard_die( - // label - 0x2c) - // 0x32 - if_guard_sees_bond( - // label - 0x2c) - // 0x3c - if_guard_and_bond_within_line_of_sight( - // label - 0x2c) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x2c) - // 0x33 + if_guard_shot_from_bond_missed(0x2c) + if_guard_see_another_guard_shot(0x2c) + if_guard_see_another_guard_die(0x2c) + if_guard_sees_bond(0x2c) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_first(0x6) + label(0x2c) random_generate_seed - // 0x35 - if_random_seed_greater_than( - // cbyte, label - 0xc8, 0x2d) - // 0x35 - if_random_seed_greater_than( - // cbyte, label - 0x64, 0x2c) - // 0x16 - guard_try_fire_or_aim_at_target_update( - // bitfield, target, label - 0x100, 0x0, 0xa) - // 0x02 - label( - // id - 0x2d) - // 0x1a - guard_try_throwing_grenade( - // label - 0xa) - // 0x02 - label( - // id - 0x2c) - // 0x09 + if_random_seed_greater_than(0xc8, 0x2d) + if_random_seed_greater_than(0x64, 0x2c) + guard_try_fire_or_aim_at_target_update(0x100, 0x0, 0xa) + label(0x2d) + guard_try_throwing_grenade(0xa) + label(0x2c) guard_kneel - // 0xae local_timer_reset_start - // 0x02 - label( - // id - 0xb) - // 0x03 + label(0xb) ai_sleep - // 0x33 random_generate_seed - // 0x35 - if_random_seed_greater_than( - // cbyte, label - 0xfa, 0x2c) - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0xb40000, 0x8) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x2c) - // 0x14 - guard_try_fire_or_aim_at_target( - // bitfield, target, label - 0x2100, 0x0, 0x2c) - // 0x02 - label( - // id - 0x2c) - // 0x16 - guard_try_fire_or_aim_at_target_update( - // bitfield, target, label - 0x100, 0x0, 0x2c) - // 0x02 - label( - // id - 0x2c) - // 0x02 - label( - // id - 0xa) - // 0x03 + if_random_seed_greater_than(0xfa, 0x2c) + if_local_timer_greater_than(0xb40000, 0x8) + goto_first(0xb) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2100, 0x0, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x100, 0x0, 0x2c) + label(0x2c) + label(0xa) ai_sleep - // 0x2f - if_guard_has_stopped_moving( - // label - 0x8) - // 0x01 - goto_first( - // label - 0xa) - // 0x02 - label( - // id - 0x8) - // 0x01 - goto_first( - // label - 0x4) - // 0x04 + if_guard_has_stopped_moving(0x8) + goto_first(0xa) + label(0x8) + goto_first(0x4) ai_list_end - ,0x00,0x00,0x00 }; u8 ai_16[] = { - // 0x02 - label( - // id - 0x4) - // 0x03 + label(0x4) ai_sleep - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x400000, 0x2c) - // 0x01 - goto_first( - // label - 0x4) - // 0x02 - label( - // id - 0x2c) - // 0xeb - if_bond_is_dead( - // label - 0x5f) - // 0xec + if_objective_bitfield_is_set_on(0x400000, 0x2c) + goto_first(0x4) + label(0x2c) + if_bond_is_dead(0x5f) bond_disable_damage_and_pickups - // 0xd7 - hud_hide_and_lock_controls_and_pause_mission_time( - // bitfield - 0x0) - // 0xda + hud_hide_and_lock_controls_and_pause_mission_time(0x0) screen_fade_to_black - // 0x02 - label( - // id - 0xa) - // 0x03 + label(0xa) ai_sleep - // 0xdc - if_screen_fade_completed( - // label - 0x2c) - // 0x01 - goto_first( - // label - 0xa) - // 0x02 - label( - // id - 0x2c) - // 0xdd + if_screen_fade_completed(0x2c) + goto_first(0xa) + label(0x2c) chr_hide_all - // 0xea trigger_fade_and_exit_level_on_button_press - // 0xed bond_hide_weapons - // 0x03 ai_sleep - // 0x03 ai_sleep - // 0x03 ai_sleep - // 0xd5 - camera_switch( - // object_tag, look_at_bond_flag, unused_flag - 0x16, 0x200, 0x0) - // 0xd9 - chr_try_teleporting_to_pad( - // chr_num, pad, label - 0xf8, 0x8100, 0x2c) - // 0x02 - label( - // id - 0x2c) - // 0x03 + camera_switch(0x16, 0x200, 0x0) + chr_try_teleporting_to_pad(0xf8, 0x8100, 0x2c) + label(0x2c) ai_sleep - // 0x03 ai_sleep - // 0xdb screen_fade_from_black - // 0xfc - object_rocket_launch( - // object_tag - 0x17) - // 0xe9 + object_rocket_launch(0x17) switch_fog_instantly - // 0xae local_timer_reset_start - // 0x02 - label( - // id - 0xc) - // 0x03 + label(0xc) ai_sleep - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x580200, 0x2c) - // 0x01 - goto_first( - // label - 0xc) - // 0x02 - label( - // id - 0x2c) - // 0xda + if_local_timer_greater_than(0x580200, 0x2c) + goto_first(0xc) + label(0x2c) screen_fade_to_black - // 0x02 - label( - // id - 0xd) - // 0x03 + label(0xd) ai_sleep - // 0xdc - if_screen_fade_completed( - // label - 0x2c) - // 0x01 - goto_first( - // label - 0xd) - // 0x02 - label( - // id - 0x2c) - // 0xd2 + if_screen_fade_completed(0x2c) + goto_first(0xd) + label(0x2c) exit_level - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x100) - // 0x02 - label( - // id - 0x5f) - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x100) - // 0x04 + jump_to_ai_list(0xfd, 0x100) + label(0x5f) + jump_to_ai_list(0xfd, 0x100) ai_list_end - }; u8 ai_17[] = { - // 0x02 - label( - // id - 0x6) - // 0x03 + label(0x6) ai_sleep - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x8200, 0x40) - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x1600, 0x40) - // 0x03 + if_bond_in_room_with_pad(0x8200, 0x40) + if_bond_in_room_with_pad(0x1600, 0x40) ai_sleep - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x1700, 0x41) - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x6b00, 0x41) - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x5400, 0x42) - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x5500, 0x42) - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x4e00, 0x42) - // 0x03 + if_bond_in_room_with_pad(0x1700, 0x41) + if_bond_in_room_with_pad(0x6b00, 0x41) + if_bond_in_room_with_pad(0x5400, 0x42) + if_bond_in_room_with_pad(0x5500, 0x42) + if_bond_in_room_with_pad(0x4e00, 0x42) ai_sleep - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x2700, 0x43) - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x2500, 0x43) - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x7e00, 0x44) - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x4100, 0x44) - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x6d00, 0x45) - // 0x55 - if_bond_in_room_with_pad( - // pad, label - 0x4b00, 0x45) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x40) - // 0x03 + if_bond_in_room_with_pad(0x2700, 0x43) + if_bond_in_room_with_pad(0x2500, 0x43) + if_bond_in_room_with_pad(0x7e00, 0x44) + if_bond_in_room_with_pad(0x4100, 0x44) + if_bond_in_room_with_pad(0x6d00, 0x45) + if_bond_in_room_with_pad(0x4b00, 0x45) + goto_first(0x6) + label(0x40) ai_sleep - // 0xad - // debug_log: START - 0xad, 0x53, 0x54, 0x41, 0x52, 0x54, 0x0a, 0x00, - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x0, 0x6100) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x1, 0x6500) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x2, 0x6300) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x41) - // 0x03 + debug_log 'S', 'T', 'A', 'R', 'T', '\n', '\0', + chr_set_pad_preset(0x0, 0x6100) + chr_set_pad_preset(0x1, 0x6500) + chr_set_pad_preset(0x2, 0x6300) + goto_first(0x6) + label(0x41) ai_sleep - // 0xad - // debug_log: SCREEN - 0xad, 0x53, 0x43, 0x52, 0x45, 0x45, 0x4e, 0x0a, 0x00, - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x0, 0x6700) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x1, 0x5a00) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x2, 0x5900) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x42) - // 0x03 + debug_log 'S', 'C', 'R', 'E', 'E', 'N', '\n', '\0', + chr_set_pad_preset(0x0, 0x6700) + chr_set_pad_preset(0x1, 0x5a00) + chr_set_pad_preset(0x2, 0x5900) + goto_first(0x6) + label(0x42) ai_sleep - // 0xad - // debug_log: DUCT - 0xad, 0x44, 0x55, 0x43, 0x54, 0x0a, 0x00, - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x0, 0x7500) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x1, 0x8000) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x2, 0x7600) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x43) - // 0x03 + debug_log 'D', 'U', 'C', 'T', '\n', '\0', + chr_set_pad_preset(0x0, 0x7500) + chr_set_pad_preset(0x1, 0x8000) + chr_set_pad_preset(0x2, 0x7600) + goto_first(0x6) + label(0x43) ai_sleep - // 0xad - // debug_log: BAY - 0xad, 0x42, 0x41, 0x59, 0x0a, 0x00, - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x0, 0x5400) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x1, 0x7d00) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x2, 0x7c00) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x44) - // 0x03 + debug_log 'B', 'A', 'Y', '\n', '\0', + chr_set_pad_preset(0x0, 0x5400) + chr_set_pad_preset(0x1, 0x7d00) + chr_set_pad_preset(0x2, 0x7c00) + goto_first(0x6) + label(0x44) ai_sleep - // 0xad - // debug_log: AZT1 - 0xad, 0x41, 0x5a, 0x54, 0x31, 0x0a, 0x00, - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x0, 0x7600) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x1, 0x6f00) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x2, 0x7000) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x45) - // 0x03 + debug_log 'A', 'Z', 'T', '1', '\n', '\0', + chr_set_pad_preset(0x0, 0x7600) + chr_set_pad_preset(0x1, 0x6f00) + chr_set_pad_preset(0x2, 0x7000) + goto_first(0x6) + label(0x45) ai_sleep - // 0xad - // debug_log: AZT2 - 0xad, 0x41, 0x5a, 0x54, 0x32, 0x0a, 0x00, - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x0, 0x5f00) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x1, 0x5b00) - // 0xac - chr_set_pad_preset( - // chr_num, pad_preset - 0x2, 0x7c00) - // 0x01 - goto_first( - // label - 0x6) - // 0x04 + debug_log 'A', 'Z', 'T', '2', '\n', '\0', + chr_set_pad_preset(0x0, 0x5f00) + chr_set_pad_preset(0x1, 0x5b00) + chr_set_pad_preset(0x2, 0x7c00) + goto_first(0x6) ai_list_end - ,0x00,0x00 }; u8 ai_18[] = { - // 0x8e - guard_set_chr_num( - // chr_num - 0x0) - // 0xae + guard_set_chr_num(0x0) local_timer_reset_start - // 0x02 - label( - // id - 0x4a) - // 0x03 + label(0x4a) ai_sleep - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x780000, 0x4) - // 0x01 - goto_first( - // label - 0x4a) - // 0x02 - label( - // id - 0x4) - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x400, 0xb) - // 0xae + if_local_timer_greater_than(0x780000, 0x4) + goto_first(0x4a) + label(0x4) + if_objective_bitfield_is_set_on(0x400, 0xb) local_timer_reset_start - // 0x02 - label( - // id - 0xa) - // 0x03 + label(0xa) ai_sleep - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x580200, 0x2c) - // 0x01 - goto_first( - // label - 0xa) - // 0x02 - label( - // id - 0x2c) - // 0x31 - if_chr_does_not_exist( - // chr_num, label - 0x3, 0x2c) - // 0x01 - goto_first( - // label - 0x4) - // 0x02 - label( - // id - 0x2c) - // 0xad - // debug_log: spawn1 - 0xad, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x31, 0x00, - // 0xf3 - if_bond_damage_and_pickups_disabled( - // label - 0x36) - // 0x02 - label( - // id - 0x56) - // 0xbd - chr_try_spawning_at_pad( - // body_num, head_num, pad, ai_list, bitfield, label - 0x27, 0xff, 0x2823, 0x604, 0x0, 0x8) - // 0x02 - label( - // id - 0x36) - // 0xad - // debug_log: ->fail - 0xad, 0x2d, 0x3e, 0x66, 0x61, 0x69, 0x6c, 0x00, - // 0x01 - goto_first( - // label - 0x4) - // 0x02 - label( - // id - 0x8) - // 0xad - // debug_log: s1 OK! - 0xad, 0x73, 0x31, 0x20, 0x4f, 0x4b, 0x21, 0x00, - // 0x01 - goto_first( - // label - 0x4) - // 0x02 - label( - // id - 0xb) - // 0x03 + if_local_timer_greater_than(0x580200, 0x2c) + goto_first(0xa) + label(0x2c) + if_chr_does_not_exist(0x3, 0x2c) + goto_first(0x4) + label(0x2c) + debug_log 's', 'p', 'a', 'w', 'n', '1', '\0', + if_bond_damage_and_pickups_disabled(0x36) + label(0x56) + chr_try_spawning_at_pad(0x27, 0xff, 0x2823, 0x604, 0x0, 0x8) + label(0x36) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x4) + label(0x8) + debug_log 's', '1', ' ', 'O', 'K', '!', '\0', + goto_first(0x4) + label(0xb) ai_sleep - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x200, 0x2c) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x2c) - // 0x01 - goto_first( - // label - 0x4) - // 0x04 + if_objective_bitfield_is_set_on(0x200, 0x2c) + goto_first(0xb) + label(0x2c) + goto_first(0x4) ai_list_end - ,0x00,0x00,0x00 }; u8 ai_19[] = { - // 0x8e - guard_set_chr_num( - // chr_num - 0x1) - // 0xae + guard_set_chr_num(0x1) local_timer_reset_start - // 0x02 - label( - // id - 0x4a) - // 0x03 + label(0x4a) ai_sleep - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x780000, 0x4) - // 0x01 - goto_first( - // label - 0x4a) - // 0x02 - label( - // id - 0x4) - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x400, 0xb) - // 0xae + if_local_timer_greater_than(0x780000, 0x4) + goto_first(0x4a) + label(0x4) + if_objective_bitfield_is_set_on(0x400, 0xb) local_timer_reset_start - // 0x02 - label( - // id - 0xa) - // 0x03 + label(0xa) ai_sleep - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x580200, 0x2c) - // 0x01 - goto_first( - // label - 0xa) - // 0x02 - label( - // id - 0x2c) - // 0x31 - if_chr_does_not_exist( - // chr_num, label - 0x4, 0x2c) - // 0x01 - goto_first( - // label - 0x4) - // 0x02 - label( - // id - 0x2c) - // 0xad - // debug_log: spawn2 - 0xad, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x32, 0x00, - // 0xf3 - if_bond_damage_and_pickups_disabled( - // label - 0x36) - // 0x02 - label( - // id - 0x56) - // 0xbd - chr_try_spawning_at_pad( - // body_num, head_num, pad, ai_list, bitfield, label - 0x27, 0xff, 0x2823, 0x704, 0x0, 0x8) - // 0x02 - label( - // id - 0x36) - // 0xad - // debug_log: ->fail - 0xad, 0x2d, 0x3e, 0x66, 0x61, 0x69, 0x6c, 0x00, - // 0x01 - goto_first( - // label - 0x4) - // 0x02 - label( - // id - 0x8) - // 0xad - // debug_log: s2 OK! - 0xad, 0x73, 0x32, 0x20, 0x4f, 0x4b, 0x21, 0x00, - // 0x01 - goto_first( - // label - 0x4) - // 0x02 - label( - // id - 0xb) - // 0x03 + if_local_timer_greater_than(0x580200, 0x2c) + goto_first(0xa) + label(0x2c) + if_chr_does_not_exist(0x4, 0x2c) + goto_first(0x4) + label(0x2c) + debug_log 's', 'p', 'a', 'w', 'n', '2', '\0', + if_bond_damage_and_pickups_disabled(0x36) + label(0x56) + chr_try_spawning_at_pad(0x27, 0xff, 0x2823, 0x704, 0x0, 0x8) + label(0x36) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x4) + label(0x8) + debug_log 's', '2', ' ', 'O', 'K', '!', '\0', + goto_first(0x4) + label(0xb) ai_sleep - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x200, 0x2c) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x2c) - // 0x01 - goto_first( - // label - 0x4) - // 0x04 + if_objective_bitfield_is_set_on(0x200, 0x2c) + goto_first(0xb) + label(0x2c) + goto_first(0x4) ai_list_end - ,0x00,0x00,0x00 }; u8 ai_20[] = { - // 0x8e - guard_set_chr_num( - // chr_num - 0x2) - // 0xae + guard_set_chr_num(0x2) local_timer_reset_start - // 0x02 - label( - // id - 0x4a) - // 0x03 + label(0x4a) ai_sleep - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x780000, 0x4) - // 0x01 - goto_first( - // label - 0x4a) - // 0x02 - label( - // id - 0x4) - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x400, 0xb) - // 0xae + if_local_timer_greater_than(0x780000, 0x4) + goto_first(0x4a) + label(0x4) + if_objective_bitfield_is_set_on(0x400, 0xb) local_timer_reset_start - // 0x02 - label( - // id - 0xa) - // 0x03 + label(0xa) ai_sleep - // 0xb4 - if_local_timer_greater_than( - // time60, label - 0x580200, 0x2c) - // 0x01 - goto_first( - // label - 0xa) - // 0x02 - label( - // id - 0x2c) - // 0x31 - if_chr_does_not_exist( - // chr_num, label - 0x5, 0x2c) - // 0x01 - goto_first( - // label - 0x4) - // 0x02 - label( - // id - 0x2c) - // 0xad - // debug_log: spawn3 - 0xad, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x33, 0x00, - // 0xf3 - if_bond_damage_and_pickups_disabled( - // label - 0x36) - // 0x02 - label( - // id - 0x56) - // 0xbd - chr_try_spawning_at_pad( - // body_num, head_num, pad, ai_list, bitfield, label - 0x27, 0xff, 0x2823, 0x804, 0x0, 0x8) - // 0x02 - label( - // id - 0x36) - // 0xad - // debug_log: ->fail - 0xad, 0x2d, 0x3e, 0x66, 0x61, 0x69, 0x6c, 0x00, - // 0x01 - goto_first( - // label - 0x4) - // 0x02 - label( - // id - 0x8) - // 0xad - // debug_log: s3 OK! - 0xad, 0x73, 0x33, 0x20, 0x4f, 0x4b, 0x21, 0x00, - // 0x01 - goto_first( - // label - 0x4) - // 0x02 - label( - // id - 0xb) - // 0x03 + if_local_timer_greater_than(0x580200, 0x2c) + goto_first(0xa) + label(0x2c) + if_chr_does_not_exist(0x5, 0x2c) + goto_first(0x4) + label(0x2c) + debug_log 's', 'p', 'a', 'w', 'n', '3', '\0', + if_bond_damage_and_pickups_disabled(0x36) + label(0x56) + chr_try_spawning_at_pad(0x27, 0xff, 0x2823, 0x804, 0x0, 0x8) + label(0x36) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x4) + label(0x8) + debug_log 's', '3', ' ', 'O', 'K', '!', '\0', + goto_first(0x4) + label(0xb) ai_sleep - // 0x9c - if_objective_bitfield_is_set_on( - // bitfield, label - 0x200, 0x2c) - // 0x01 - goto_first( - // label - 0xb) - // 0x02 - label( - // id - 0x2c) - // 0x01 - goto_first( - // label - 0x4) - // 0x04 + if_objective_bitfield_is_set_on(0x200, 0x2c) + goto_first(0xb) + label(0x2c) + goto_first(0x4) ai_list_end - ,0x00,0x00,0x00 }; u8 ai_5[] = { - // 0x8e - guard_set_chr_num( - // chr_num - 0x3) - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x904) - // 0x04 + guard_set_chr_num(0x3) + jump_to_ai_list(0xfd, 0x904) ai_list_end - ,0x00 }; u8 ai_6[] = { - // 0x8e - guard_set_chr_num( - // chr_num - 0x4) - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x904) - // 0x04 + guard_set_chr_num(0x4) + jump_to_ai_list(0xfd, 0x904) ai_list_end - ,0x00 }; u8 ai_7[] = { - // 0x8e - guard_set_chr_num( - // chr_num - 0x5) - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x904) - // 0x04 + guard_set_chr_num(0x5) + jump_to_ai_list(0xfd, 0x904) ai_list_end - ,0x00 }; u8 ai_8[] = { - // 0x02 - label( - // id - 0x40) - // 0x91 - guard_set_speed_rating( - // speed_rating - 0x28) - // 0x93 - guard_set_accuracy_rating( - // accuracy_rating - 0x28) - // 0x00 - goto_next( - // label - 0x2c) - // 0x02 - label( - // id - 0x41) - // 0x91 - guard_set_speed_rating( - // speed_rating - 0x32) - // 0x93 - guard_set_accuracy_rating( - // accuracy_rating - 0x32) - // 0x00 - goto_next( - // label - 0x2c) - // 0x02 - label( - // id - 0x42) - // 0x91 - guard_set_speed_rating( - // speed_rating - 0x3c) - // 0x93 - guard_set_accuracy_rating( - // accuracy_rating - 0x3c) - // 0x00 - goto_next( - // label - 0x2c) - // 0x02 - label( - // id - 0x43) - // 0x91 - guard_set_speed_rating( - // speed_rating - 0x50) - // 0x93 - guard_set_accuracy_rating( - // accuracy_rating - 0x50) - // 0x00 - goto_next( - // label - 0x2c) - // 0x02 - label( - // id - 0x2c) - // 0x33 + label(0x40) + guard_set_speed_rating(0x28) + guard_set_accuracy_rating(0x28) + goto_next(0x2c) + label(0x41) + guard_set_speed_rating(0x32) + guard_set_accuracy_rating(0x32) + goto_next(0x2c) + label(0x42) + guard_set_speed_rating(0x3c) + guard_set_accuracy_rating(0x3c) + goto_next(0x2c) + label(0x43) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + goto_next(0x2c) + label(0x2c) random_generate_seed - // 0x35 - if_random_seed_greater_than( - // cbyte, label - 0x82, 0x39) - // 0x02 - label( - // id - 0x36) - // 0x8f - guard_set_health_total( - // total_health - 0x2800) - // 0x90 - guard_set_armour( - // armour_value - 0xa00) - // 0x8d - guard_set_grenade_probability( - // grenade_prob - 0xcc) - // 0xbf - guard_try_spawning_item( - // prop_num, item_num, prop_bitfield, label - 0xbb00, 0x16, 0x0, 0x2c) - // 0x02 - label( - // id - 0x2c) - // 0x02 - label( - // id - 0x2c) - // 0x00 - goto_next( - // label - 0x8) - // 0x02 - label( - // id - 0x39) - // 0x8f - guard_set_health_total( - // total_health - 0x2800) - // 0x90 - guard_set_armour( - // armour_value - 0x1400) - // 0x02 - label( - // id - 0x2c) - // 0xbf - guard_try_spawning_item( - // prop_num, item_num, prop_bitfield, label - 0xbb00, 0x16, 0x80, 0x2c) - // 0x02 - label( - // id - 0x2c) - // 0xbf - guard_try_spawning_item( - // prop_num, item_num, prop_bitfield, label - 0xbb00, 0x16, 0x90, 0x8) - // 0x02 - label( - // id - 0x8) - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0xa04) - // 0x04 + if_random_seed_greater_than(0x82, 0x39) + label(0x36) + guard_set_health_total(0x2800) + guard_set_armour(0xa00) + guard_set_grenade_probability(0xcc) + guard_try_spawning_item(0xbb00, 0x16, 0x0, 0x2c) + label(0x2c) + label(0x2c) + goto_next(0x8) + label(0x39) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + label(0x2c) + guard_try_spawning_item(0xbb00, 0x16, 0x80, 0x2c) + label(0x2c) + guard_try_spawning_item(0xbb00, 0x16, 0x90, 0x8) + label(0x8) + jump_to_ai_list(0xfd, 0xa04) ai_list_end - }; u8 ai_9[] = { - // 0x02 - label( - // id - 0x3a) - // 0x03 + label(0x3a) ai_sleep - // 0x4c - if_guard_distance_to_bond_greater_than( - // distance, label - 0x2c01, 0x36) - // 0x4c - if_guard_distance_to_bond_greater_than( - // distance, label - 0x2003, 0x9) - // 0x28 - guard_try_running_to_bond_position( - // label - 0xa) - // 0x02 - label( - // id - 0x36) - // 0x2a - guard_try_sprinting_to_bond_position( - // label - 0xa) - // 0x02 - label( - // id - 0xa) - // 0x03 + if_guard_distance_to_bond_greater_than(0x2c01, 0x36) + if_guard_distance_to_bond_greater_than(0x2003, 0x9) + guard_try_running_to_bond_position(0xa) + label(0x36) + guard_try_sprinting_to_bond_position(0xa) + label(0xa) ai_sleep - // 0x4c - if_guard_distance_to_bond_greater_than( - // distance, label - 0x9001, 0x36) - // 0x4c - if_guard_distance_to_bond_greater_than( - // distance, label - 0x2003, 0x9) - // 0x3c - if_guard_and_bond_within_line_of_sight( - // label - 0x3b) - // 0x02 - label( - // id - 0x36) - // 0x2f - if_guard_has_stopped_moving( - // label - 0x3c) - // 0x01 - goto_first( - // label - 0xa) - // 0x02 - label( - // id - 0x3b) - // 0x3c - if_guard_and_bond_within_line_of_sight( - // label - 0x2c) - // 0x00 - goto_next( - // label - 0x8) - // 0x02 - label( - // id - 0x3c) - // 0x03 + if_guard_distance_to_bond_greater_than(0x9001, 0x36) + if_guard_distance_to_bond_greater_than(0x2003, 0x9) + if_guard_and_bond_within_line_of_sight(0x3b) + label(0x36) + if_guard_has_stopped_moving(0x3c) + goto_first(0xa) + label(0x3b) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_next(0x8) + label(0x3c) ai_sleep - // 0x01 - goto_first( - // label - 0x3a) - // 0x02 - label( - // id - 0x2c) - // 0x02 - label( - // id - 0x3d) - // 0x33 + goto_first(0x3a) + label(0x2c) + label(0x3d) random_generate_seed - // 0x35 - if_random_seed_greater_than( - // cbyte, label - 0xa, 0x2c) - // 0x1a - guard_try_throwing_grenade( - // label - 0x8) - // 0x02 - label( - // id - 0x2c) - // 0x35 - if_random_seed_greater_than( - // cbyte, label - 0x32, 0x2c) - // 0x0e - guard_try_sidestepping( - // label - 0x8) - // 0x02 - label( - // id - 0x2c) - // 0x35 - if_random_seed_greater_than( - // cbyte, label - 0x3c, 0x2c) - // 0x13 - guard_try_firing_roll( - // label - 0x8) - // 0x02 - label( - // id - 0x2c) - // 0x35 - if_random_seed_greater_than( - // cbyte, label - 0x50, 0x2c) - // 0x13 - guard_try_firing_roll( - // label - 0x8) - // 0x02 - label( - // id - 0x2c) - // 0x35 - if_random_seed_greater_than( - // cbyte, label - 0x64, 0x2c) - // 0x11 - guard_try_firing_walk( - // label - 0x8) - // 0x02 - label( - // id - 0x2c) - // 0x35 - if_random_seed_greater_than( - // cbyte, label - 0x96, 0x2c) - // 0x12 - guard_try_firing_run( - // label - 0x8) - // 0x02 - label( - // id - 0x2c) - // 0x35 - if_random_seed_greater_than( - // cbyte, label - 0xc8, 0x2c) - // 0x14 - guard_try_fire_or_aim_at_target( - // bitfield, target, label - 0x100, 0x0, 0x8) - // 0x02 - label( - // id - 0x2c) - // 0x15 - guard_try_fire_or_aim_at_target_kneel( - // bitfield, target, label - 0x100, 0x0, 0x8) - // 0x02 - label( - // id - 0x8) - // 0x03 + if_random_seed_greater_than(0xa, 0x2c) + guard_try_throwing_grenade(0x8) + label(0x2c) + if_random_seed_greater_than(0x32, 0x2c) + guard_try_sidestepping(0x8) + label(0x2c) + if_random_seed_greater_than(0x3c, 0x2c) + guard_try_firing_roll(0x8) + label(0x2c) + if_random_seed_greater_than(0x50, 0x2c) + guard_try_firing_roll(0x8) + label(0x2c) + if_random_seed_greater_than(0x64, 0x2c) + guard_try_firing_walk(0x8) + label(0x2c) + if_random_seed_greater_than(0x96, 0x2c) + guard_try_firing_run(0x8) + label(0x2c) + if_random_seed_greater_than(0xc8, 0x2c) + guard_try_fire_or_aim_at_target(0x100, 0x0, 0x8) + label(0x2c) + guard_try_fire_or_aim_at_target_kneel(0x100, 0x0, 0x8) + label(0x8) ai_sleep - // 0x2f - if_guard_has_stopped_moving( - // label - 0x2c) - // 0x01 - goto_first( - // label - 0x8) - // 0x02 - label( - // id - 0x2c) - // 0x3c - if_guard_and_bond_within_line_of_sight( - // label - 0x2c) - // 0x00 - goto_next( - // label - 0xa) - // 0x02 - label( - // id - 0xa) - // 0x03 + if_guard_has_stopped_moving(0x2c) + goto_first(0x8) + label(0x2c) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_next(0xa) + label(0xa) ai_sleep - // 0x01 - goto_first( - // label - 0x3a) - // 0x02 - label( - // id - 0x2c) - // 0x03 + goto_first(0x3a) + label(0x2c) ai_sleep - // 0x01 - goto_first( - // label - 0x3d) - // 0x02 - label( - // id - 0x9) - // 0x42 - if_guard_is_on_screen( - // label - 0x36) - // 0xad - // debug_log: DELETE! - 0xad, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x21, 0x00, - // 0x23 - chr_remove_instant( - // chr_num - 0xfd) - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x100) - // 0x02 - label( - // id - 0x36) - // 0x01 - goto_first( - // label - 0x3a) - // 0x04 + goto_first(0x3d) + label(0x9) + if_guard_is_on_screen(0x36) + debug_log 'D', 'E', 'L', 'E', 'T', 'E', '!', '\0', + chr_remove_instant(0xfd) + jump_to_ai_list(0xfd, 0x100) + label(0x36) + goto_first(0x3a) ai_list_end - ,0x00,0x00 }; u8 ai_21[] = { - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x400) - // 0x9b - objective_bitfield_set_off( - // bitfield - 0x200) - // 0x02 - label( - // id - 0x6) - // 0x03 + objective_bitfield_set_on(0x400) + objective_bitfield_set_off(0x200) + label(0x6) ai_sleep - // 0x31 - if_chr_does_not_exist( - // chr_num, label - 0x2a, 0x2c) - // 0x01 - goto_first( - // label - 0x6) - // 0x01 - goto_first( - // label - 0x6) - // 0x02 - label( - // id - 0x2c) - // 0x9a - objective_bitfield_set_on( - // bitfield - 0x200) - // 0x9b - objective_bitfield_set_off( - // bitfield - 0x400) - // 0x05 - jump_to_ai_list( - // chr_num, ai_list - 0xfd, 0x100) - // 0x04 + if_chr_does_not_exist(0x2a, 0x2c) + goto_first(0x6) + goto_first(0x6) + label(0x2c) + objective_bitfield_set_on(0x200) + objective_bitfield_set_off(0x400) + jump_to_ai_list(0xfd, 0x100) ai_list_end - ,0x00,0x00,0x00 }; u8 ai_22[] = { - // 0x00 - goto_next( - // label - 0x58) - // 0x02 - label( - // id - 0x5b) - // 0x03 + goto_next(0x58) + label(0x5b) ai_sleep - // 0x68 - if_door_state_equal( - // object_tag, door_state, label - 0x15, 0x4, 0x5a) - // 0x01 - goto_first( - // label - 0x5b) - // 0x02 - label( - // id - 0x5e) - // 0x03 + if_door_state_equal(0x15, 0x4, 0x5a) + goto_first(0x5b) + label(0x5e) ai_sleep - // 0x68 - if_door_state_equal( - // object_tag, door_state, label - 0x15, 0x1, 0x58) - // 0x68 - if_door_state_equal( - // object_tag, door_state, label - 0x15, 0x8, 0x59) - // 0x01 - goto_first( - // label - 0x5e) - // 0x02 - label( - // id - 0x5c) - // 0x03 + if_door_state_equal(0x15, 0x1, 0x58) + if_door_state_equal(0x15, 0x8, 0x59) + goto_first(0x5e) + label(0x5c) ai_sleep - // 0x68 - if_door_state_equal( - // object_tag, door_state, label - 0x15, 0x8, 0x59) - // 0x01 - goto_first( - // label - 0x5c) - // 0x02 - label( - // id - 0x5d) - // 0x03 + if_door_state_equal(0x15, 0x8, 0x59) + goto_first(0x5c) + label(0x5d) ai_sleep - // 0x68 - if_door_state_equal( - // object_tag, door_state, label - 0x15, 0x2, 0x57) - // 0x68 - if_door_state_equal( - // object_tag, door_state, label - 0x15, 0x4, 0x5a) - // 0x01 - goto_first( - // label - 0x5d) - // 0x02 - label( - // id - 0x57) - // 0xd0 - tv_change_screen_bank( - // object_tag, screen_index, screen_bank - 0x12, 0x0, 0x2f) - // 0x01 - goto_first( - // label - 0x5b) - // 0x02 - label( - // id - 0x5a) - // 0xd0 - tv_change_screen_bank( - // object_tag, screen_index, screen_bank - 0x12, 0x0, 0x2e) - // 0x01 - goto_first( - // label - 0x5e) - // 0x02 - label( - // id - 0x58) - // 0xd0 - tv_change_screen_bank( - // object_tag, screen_index, screen_bank - 0x12, 0x0, 0x2e) - // 0x01 - goto_first( - // label - 0x5c) - // 0x02 - label( - // id - 0x59) - // 0xd0 - tv_change_screen_bank( - // object_tag, screen_index, screen_bank - 0x12, 0x0, 0x2f) - // 0x01 - goto_first( - // label - 0x5d) - // 0x04 + if_door_state_equal(0x15, 0x2, 0x57) + if_door_state_equal(0x15, 0x4, 0x5a) + goto_first(0x5d) + label(0x57) + tv_change_screen_bank(0x12, 0x0, 0x2f) + goto_first(0x5b) + label(0x5a) + tv_change_screen_bank(0x12, 0x0, 0x2e) + goto_first(0x5e) + label(0x58) + tv_change_screen_bank(0x12, 0x0, 0x2e) + goto_first(0x5c) + label(0x59) + tv_change_screen_bank(0x12, 0x0, 0x2f) + goto_first(0x5d) ai_list_end - ,0x00 }; AIListRecord ailists[] = { diff --git a/assets/obseg/setup/UsetupcaveZ.c b/assets/obseg/setup/UsetupcaveZ.c index 121a4137..c1be90bb 100644 --- a/assets/obseg/setup/UsetupcaveZ.c +++ b/assets/obseg/setup/UsetupcaveZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -2205,35 +2206,741 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x200005fd, 0x00070400 }; -u32 ai_1[] = { 0x200105fd, 0x00070400 }; -u32 ai_2[] = { 0x200205fd, 0x00070400 }; -u32 ai_3[] = { 0x200305fd, 0x00070400 }; -u32 ai_4[] = { 0x200405fd, 0x00070400 }; -u32 ai_5[] = { 0x200505fd, 0x00070400 }; -u32 ai_6[] = { 0x200605fd, 0x00070400 }; -u32 ai_11[] = { 0x8fea60ab, 0x00c19d00, 0x00080002, 0x40033c33, 0x01400233, 0x1f232800, 0x1d021d03, 0x54fd2328, 0x022f2e01, 0x1d022e01, 0x33020403, 0x2f2e0104, 0x0202ad44, 0x0a009c00, 0x0100002f, 0x9c000080, 0x0001022f, 0x9c000080, 0x001c9c00, 0x0020001b, 0x9c000010, 0x00199c00, 0x00080018, 0x9c000004, 0x00179c00, 0x00020016, 0x9c000001, 0x00150214, 0xad310a00, 0x9a000001, 0x00ab00d3, 0x67196710, 0x002e0215, 0x9a000002, 0x00ab00de, 0x671a6711, 0x002e0216, 0x9a000004, 0x00ab0107, 0x671b6712, 0x002e0217, 0x9a000008, 0x00ab0110, 0x671c6713, 0x002e0218, 0xad350a00, 0x9a000010, 0x00ab0159, 0x671d6714, 0x002e0219, 0xad360a00, 0x9a000020, 0x00ab0167, 0x671e6715, 0x002e021b, 0xad370a00, 0x9a000080, 0x00ab0169, 0x67206717, 0x67246725, 0x002e021c, 0xad380a00, 0x67216718, 0xab016f00, 0x05022e01, 0x3302051d, 0x0206032f, 0x2e4dfd00, 0x0a23282e, 0x0106022e, 0x22020b03, 0x010b0201, 0xad570a00, 0x1c01689a, 0x00010000, 0x0207ad34, 0x0a00032f, 0x2e4dfd00, 0x3201682e, 0x0107022e, 0x0208ad35, 0x0a00033c, 0x2e010802, 0x2ec31c0a, 0x9a000200, 0x00ae0209, 0x033335c8, 0x2f150001, 0x00002e02, 0x2f1a2e01, 0x09022e02, 0x0a034b00, 0x640c5b22, 0x0c010202, 0x2eb40009, 0x600c2f2f, 0x010a020c, 0x03662166, 0x18002e02, 0x2e010202, 0x2f010904 }; -u32 ai_7[] = { 0x02000396, 0x102e462a, 0x3a2a3b2b, 0x32223c21, 0x39203e20, 0x3f202f04, 0x0100022e, 0x01000204, 0x79002b01, 0x00020501, 0x00022033, 0x35402301, 0x00022310, 0x21010002, 0x21474022, 0x48c0224b, 0x000a2201, 0x00022233, 0x35c82645, 0x26010002, 0x264b0014, 0x2a79002b, 0x06040805, 0xfd040902, 0x2a060408, 0x05fd040a, 0x022b3335, 0x40300604, 0x0805fd04, 0x0b0230ad, 0x4966206f, 0x6e6c7920, 0x49206861, 0x64206120, 0x67756e21, 0x21210a00, 0x1a310100, 0x0231032f, 0x02013102, 0x02010004 }; -u32 ai_8[] = { 0x0200032f, 0x27010002, 0x27333596, 0x28333500, 0x29000202, 0x280e0202, 0x29100202, 0x02032f04, 0x01020204, 0x3c210702, 0x21476e22, 0x4891224b, 0x000a2207, 0x02220127, 0x04000000 }; -u32 ai_9[] = { 0x02000333, 0x35fd2b46, 0x2b002a02, 0x2a452c4c, 0x00c8253c, 0x2c002502, 0x2c790103, 0x21010002, 0x25002b02, 0x2b06040a, 0x05fd040b, 0x02020702, 0x0305fd00, 0x10040000 }; -u32 ai_10[] = { 0x61fd0200, 0x1c017002, 0x04032f02, 0x4dfd0032, 0x01700246, 0x2a010402, 0x2aad210a, 0x0021022e, 0x033335dc, 0x2e3b2e2f, 0x2e012e02, 0x2ead496d, 0x206f6666, 0x210a0001, 0x0002024d, 0xfd003201, 0x70390702, 0x393c0522, 0x07020503, 0x07040000 }; -u32 ai_14[] = { 0x02000346, 0x2e3a2e3b, 0x2e322e3c, 0x2e010002, 0x2e3335fa, 0x2f35962e, 0x14000100, 0x0004022f, 0x4b00502e, 0x4c012c2e, 0x1a04022e, 0x15000100, 0x00040204, 0x032f0201, 0x04020201, 0x00040000 }; -u32 ai_13[] = { 0x04000000 }; -u32 ai_12[] = { 0x04000000 }; -u32 ai_23[] = { 0x021d039c, 0x00040000, 0x2f5b092e, 0x9a000400, 0x00022e9c, 0x00080000, 0x2f5b0a2e, 0x9a000800, 0x00022e9c, 0x00100000, 0x2f5b0b2e, 0x9a001000, 0x00022e9c, 0x00200000, 0x2f5b0c2e, 0x9a002000, 0x00022e5c, 0x09055c0a, 0x055c0b05, 0x5c0c0501, 0x1d022fc3, 0x1c0b0004, 0x0205c400, 0x5000c500, 0x090000ae, 0x020003b4, 0x00003c06, 0x01000206, 0xc31c0c9a, 0x00400000, 0x00040204, 0x03010404 }; -u32 ai_24[] = { 0xad68656c, 0x6c6f0002, 0x00039c00, 0x0200003c, 0x0100023c, 0xae662366, 0x246625ad, 0x210a0003, 0x31592e00, 0x1e022ef3, 0x1ebd04ff, 0x01660410, 0x00000001, 0x2e021e02, 0x2e03315a, 0x2e001e02, 0x2ef31ebd, 0x04ff0124, 0x04110000, 0x00012e02, 0x1e022e03, 0x315b2e00, 0x1e022ef3, 0x1ebd04ff, 0x01330412, 0x00000001, 0x2e021e02, 0x0203b400, 0x09602e01, 0x02022e01, 0x3c040000 }; -u32 ai_15[] = { 0x8e59ad68, 0x310a0005, 0xfd041304 }; -u32 ai_16[] = { 0x8e5aad68, 0x320a0005, 0xfd041304 }; -u32 ai_17[] = { 0x8e5bad68, 0x330a0005, 0xfd041304 }; -u32 ai_18[] = { 0x3335c82e, 0x7200782e, 0x3564048f, 0x0050c000, 0xde000000, 0x00000200, 0xbf00c309, 0x80000000, 0x00020033, 0x356400bf, 0x00c30990, 0x00000000, 0x02000002, 0x02048f00, 0x78c000dd, 0x00000000, 0x000200bf, 0x00c50e80, 0x00000000, 0x02003335, 0x6400bf00, 0xc50e9000, 0x00000002, 0x00000202, 0x2e8f003c, 0xc000dc00, 0x00000000, 0x0200bf00, 0xcf100000, 0x00000002, 0x00020206, 0x000205fd, 0x00080400 }; -u32 ai_19[] = { 0x0200033a, 0x333b3303, 0x46333c33, 0x03333532, 0x2e453302, 0x2e010002, 0x33060002, 0x05fd0008, 0x04000000 }; -u32 ai_20[] = { 0x90005002, 0x00033a33, 0x3b333933, 0x0346333c, 0x33033335, 0x322e4533, 0x022e0100, 0x02330600, 0x0d05fd00, 0x0d040000 }; -u32 ai_21[] = { 0xd9fd0171, 0x2e022ee0, 0xfd01ae02, 0x0803b400, 0x003c2e01, 0x08022e0a, 0x00650008, 0x006d0410, 0x020403b4, 0x0000702e, 0x0104022e, 0xe0fd0002, 0x0503b400, 0x00ea2e01, 0x05022e67, 0x26020703, 0x6826012e, 0x0107022e, 0xda020603, 0xdc2e0106, 0x022ed202, 0x02030102, 0x04000000 }; -u32 ai_25[] = { 0x024003eb, 0x43550171, 0x2e014002, 0x2e9a0080, 0x0000ecd7, 0x00da0204, 0x03dc2e01, 0x04022ef1, 0x2e05fd00, 0x0f022edd, 0xeadf26df, 0x2759022e, 0x59032e59, 0x1a2e591b, 0x2e591c2e, 0x591d2e59, 0x182e5919, 0x2e59042e, 0x59052e59, 0x062e5907, 0x2e59082e, 0x59092e59, 0x0a2e590b, 0x2e590c2e, 0x590d2e59, 0x0e2e590f, 0x2e59102e, 0x59112e59, 0x122e5913, 0x2e59162e, 0x59142e59, 0x152ee404, 0x022eed03, 0x0303d528, 0x00020000, 0x05f80416, 0xdbf40000, 0xff020503, 0xdc2e0105, 0x022e05fd, 0x00010243, 0x05fd0001, 0x04000000 }; -u32 ai_22[] = { 0xae0a0062, 0x00000001, 0x04100204, 0x03b40000, 0x002e0104, 0x022e0a00, 0x620001ff, 0xff041002, 0x02030102, 0x04000000 }; -u32 ai_26[] = { 0x020403cf, 0x2e010402, 0x2e05f804, 0x17020203, 0x01020400 }; -u32 ai_27[] = { 0x024003a0, 0x49001000, 0x00a04a00, 0x100000a0, 0x4b001000, 0x00a05400, 0x100000a0, 0x55001000, 0x0003021d, 0x03f7022e, 0x011d022e, 0xc31c0d9a, 0x01000000, 0x05fd0001, 0x04000000 }; -u32 ai_28[] = { 0x020003cf, 0x05010002, 0x04035501, 0x701e002e, 0x021e0104, 0x022ef501, 0x02050355, 0x01702e01, 0x05022ef4, 0x0100ff01, 0x04040000 }; +u8 ai_0[] = { + guard_start_patrol(0x00) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x01) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_2[] = { + guard_start_patrol(0x02) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_3[] = { + guard_start_patrol(0x03) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_4[] = { + guard_start_patrol(0x04) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_5[] = { + guard_start_patrol(0x05) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_6[] = { + guard_start_patrol(0x06) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_11[] = { + guard_set_health_total(0x60ea) + guard_set_pad_preset(0xc100) + guard_flags_set_on(0x00080000) + label(0x40) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x33) + goto_first(0x40) + label(0x33) + guard_sprints_to_pad(0x2823) + goto_next(0x1d) + label(0x1d) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x2823, 0x02) + if_guard_has_stopped_moving(0x2e) + goto_first(0x1d) + label(0x2e) + goto_first(0x33) + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x2e) + goto_first(0x04) + label(0x02) + debug_log 'D', '\n', '\0', + if_objective_bitfield_is_set_on(0x00000100, 0x2f) + if_objective_bitfield_is_set_on(0x00800000, 0x01) + label(0x2f) + if_objective_bitfield_is_set_on(0x00800000, 0x1c) + if_objective_bitfield_is_set_on(0x00200000, 0x1b) + if_objective_bitfield_is_set_on(0x00100000, 0x19) + if_objective_bitfield_is_set_on(0x00080000, 0x18) + if_objective_bitfield_is_set_on(0x00040000, 0x17) + if_objective_bitfield_is_set_on(0x00020000, 0x16) + if_objective_bitfield_is_set_on(0x00010000, 0x15) + label(0x14) + debug_log '1', '\n', '\0', + objective_bitfield_set_on(0x00010000) + guard_set_pad_preset(0xd300) + door_close(0x19) + door_close(0x10) + goto_next(0x2e) + label(0x15) + objective_bitfield_set_on(0x00020000) + guard_set_pad_preset(0xde00) + door_close(0x1a) + door_close(0x11) + goto_next(0x2e) + label(0x16) + objective_bitfield_set_on(0x00040000) + guard_set_pad_preset(0x0701) + door_close(0x1b) + door_close(0x12) + goto_next(0x2e) + label(0x17) + objective_bitfield_set_on(0x00080000) + guard_set_pad_preset(0x1001) + door_close(0x1c) + door_close(0x13) + goto_next(0x2e) + label(0x18) + debug_log '5', '\n', '\0', + objective_bitfield_set_on(0x00100000) + guard_set_pad_preset(0x5901) + door_close(0x1d) + door_close(0x14) + goto_next(0x2e) + label(0x19) + debug_log '6', '\n', '\0', + objective_bitfield_set_on(0x00200000) + guard_set_pad_preset(0x6701) + door_close(0x1e) + door_close(0x15) + goto_next(0x2e) + label(0x1b) + debug_log '7', '\n', '\0', + objective_bitfield_set_on(0x00800000) + guard_set_pad_preset(0x6901) + door_close(0x20) + door_close(0x17) + door_close(0x24) + door_close(0x25) + goto_next(0x2e) + label(0x1c) + debug_log '8', '\n', '\0', + door_close(0x21) + door_close(0x18) + guard_set_pad_preset(0x6f01) + goto_next(0x05) + label(0x2e) + goto_first(0x33) + label(0x05) + guard_runs_to_pad_preset + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x2e) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x2e) + goto_first(0x06) + label(0x2e) + guard_remove_fade + label(0x0b) + ai_sleep + goto_first(0x0b) + label(0x01) + debug_log 'W', '\n', '\0', + guard_runs_to_pad(0x6801) + objective_bitfield_set_on(0x00000100) + label(0x07) + debug_log '4', '\n', '\0', + ai_sleep + if_guard_has_stopped_moving(0x2e) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x6801, 0x2e) + goto_first(0x07) + label(0x2e) + label(0x08) + debug_log '5', '\n', '\0', + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2e) + goto_first(0x08) + label(0x2e) + text_print_top(0x0a1c) + objective_bitfield_set_on(0x00000200) + local_timer_reset_start + label(0x09) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xc8, 0x2f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x2e) + label(0x2f) + guard_try_throwing_grenade(0x2e) + goto_first(0x09) + label(0x2e) + label(0x0a) + ai_sleep + if_guard_distance_to_bond_less_than(0x6400, 0x0c) + if_object_not_destroyed(0x22, 0x0c) + goto_first(0x02) + label(0x2e) + if_local_timer_greater_than(0x600900, 0x0c) + if_guard_has_stopped_moving(0x2f) + goto_first(0x0a) + label(0x0c) + ai_sleep + door_open(0x21) + door_open(0x18) + goto_next(0x2e) + label(0x2e) + goto_first(0x02) + label(0x2f) + goto_first(0x09) + ai_list_end +}; +u8 ai_7[] = { + label(0x00) + ai_sleep + if_guard_bitfield_is_set_on(0x10, 0x2e) + if_guard_shot_from_bond_missed(0x2a) + if_guard_see_another_guard_shot(0x2a) + if_guard_see_another_guard_die(0x2b) + if_guard_sees_bond(0x22) + if_guard_and_bond_within_line_of_sight(0x21) + if_guard_heard_bond(0x20) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x20) + if_guard_heard_bond_within_last_10_secs(0x20) + if_guard_has_stopped_moving(0x04) + goto_first(0x00) + label(0x2e) + goto_first(0x00) + label(0x04) + if_guard_hits_greater_than(0x00, 0x2b) + goto_first(0x00) + label(0x05) + goto_first(0x00) + label(0x20) + random_generate_seed + if_random_seed_greater_than(0x40, 0x23) + goto_first(0x00) + label(0x23) + guard_try_running_to_side(0x21) + goto_first(0x00) + label(0x21) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x22) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x22) + if_guard_distance_to_bond_less_than(0x0a00, 0x22) + goto_first(0x00) + label(0x22) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x26) + if_guard_is_targeted_by_bond(0x26) + goto_first(0x00) + label(0x26) + if_guard_distance_to_bond_less_than(0x1400, 0x2a) + if_guard_hits_greater_than(0x00, 0x2b) + set_return_ai_list(0x0804) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + set_return_ai_list(0x0804) + jump_to_ai_list(0xfd, 0x0a04) + label(0x2b) + random_generate_seed + if_random_seed_greater_than(0x40, 0x30) + set_return_ai_list(0x0804) + jump_to_ai_list(0xfd, 0x0b04) + label(0x30) + debug_log 'I', 'f', ' ', 'o', 'n', 'l', 'y', ' ', 'I', ' ', 'h', 'a', 'd', ' ', 'a', ' ', 'g', 'u', 'n', '!', '!', '!', '\n', '\0', + guard_try_throwing_grenade(0x31) + goto_first(0x00) + label(0x31) + ai_sleep + if_guard_has_stopped_moving(0x02) + goto_first(0x31) + label(0x02) + goto_first(0x00) + ai_list_end +}; +u8 ai_8[] = { + label(0x00) + ai_sleep + if_guard_has_stopped_moving(0x27) + goto_first(0x00) + label(0x27) + random_generate_seed + if_random_seed_greater_than(0x96, 0x28) + random_generate_seed + if_random_seed_greater_than(0x00, 0x29) + goto_next(0x02) + label(0x28) + guard_try_sidestepping(0x02) + label(0x29) + guard_try_running_to_side(0x02) + label(0x02) + ai_sleep + if_guard_has_stopped_moving(0x04) + goto_first(0x02) + label(0x04) + if_guard_and_bond_within_line_of_sight(0x21) + jump_to_return_ai_list + label(0x21) + if_guard_counter_clockwise_direction_to_bond_less_than(0x6e, 0x22) + if_guard_counter_clockwise_direction_to_bond_greater_than(0x91, 0x22) + if_guard_distance_to_bond_less_than(0x0a00, 0x22) + jump_to_return_ai_list + label(0x22) + goto_first(0x27) + ai_list_end +}; +u8 ai_9[] = { + label(0x00) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfd, 0x2b) + if_guard_shot_from_bond_missed(0x2b) + goto_next(0x2a) + label(0x2a) + if_guard_is_targeted_by_bond(0x2c) + if_guard_distance_to_bond_greater_than(0xc800, 0x25) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_next(0x25) + label(0x2c) + if_guard_hits_greater_than(0x01, 0x03) + guard_surrenders + goto_first(0x00) + label(0x25) + goto_next(0x2b) + label(0x2b) + set_return_ai_list(0x0a04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x02) + jump_to_return_ai_list + label(0x03) + jump_to_ai_list(0xfd, 0x1000) + ai_list_end +}; +u8 ai_10[] = { + chr_drop_all_concealed_items(0xfd) + label(0x00) + guard_runs_to_pad(0x7001) + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x02) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x7001, 0x02) + if_guard_shot_from_bond_missed(0x2a) + goto_first(0x04) + label(0x2a) + debug_log '!', '\n', '\0', + guard_surrenders + label(0x2e) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xdc, 0x2e) + if_guard_see_another_guard_die(0x2e) + if_guard_has_stopped_moving(0x2e) + goto_first(0x2e) + label(0x2e) + debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0', + goto_first(0x00) + label(0x02) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x7001, 0x39) + jump_to_return_ai_list + label(0x39) + if_guard_and_bond_within_line_of_sight(0x05) + guard_remove_fade + jump_to_return_ai_list + label(0x05) + ai_sleep + jump_to_return_ai_list + ai_list_end +}; +u8 ai_14[] = { + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x2e) + if_guard_see_another_guard_shot(0x2e) + if_guard_see_another_guard_die(0x2e) + if_guard_sees_bond(0x2e) + if_guard_and_bond_within_line_of_sight(0x2e) + goto_first(0x00) + label(0x2e) + random_generate_seed + if_random_seed_greater_than(0xfa, 0x2f) + if_random_seed_greater_than(0x96, 0x2e) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x04) + label(0x2f) + if_guard_distance_to_bond_less_than(0x5000, 0x2e) + if_guard_distance_to_bond_greater_than(0x2c01, 0x2e) + guard_try_throwing_grenade(0x04) + label(0x2e) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x04) + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x02) + goto_first(0x04) + label(0x02) + goto_first(0x00) + ai_list_end +}; +u8 ai_13[] = { + ai_list_end +}; +u8 ai_12[] = { + ai_list_end +}; +u8 ai_23[] = { + label(0x1d) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x2f) + if_object_not_destroyed(0x09, 0x2e) + objective_bitfield_set_on(0x00000400) + label(0x2e) + if_objective_bitfield_is_set_on(0x00000800, 0x2f) + if_object_not_destroyed(0x0a, 0x2e) + objective_bitfield_set_on(0x00000800) + label(0x2e) + if_objective_bitfield_is_set_on(0x00001000, 0x2f) + if_object_not_destroyed(0x0b, 0x2e) + objective_bitfield_set_on(0x00001000) + label(0x2e) + if_objective_bitfield_is_set_on(0x00002000, 0x2f) + if_object_not_destroyed(0x0c, 0x2e) + objective_bitfield_set_on(0x00002000) + label(0x2e) + if_object_was_activated(0x09, 0x05) + if_object_was_activated(0x0a, 0x05) + if_object_was_activated(0x0b, 0x05) + if_object_was_activated(0x0c, 0x05) + goto_first(0x1d) + label(0x2f) + text_print_top(0x0b1c) + goto_next(0x04) + label(0x05) + sfx_play(0x5000, 0x00) + sfx_emit_from_object(0x00, 0x09, 0x0000) + local_timer_reset_start + label(0x00) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x06) + goto_first(0x00) + label(0x06) + text_print_top(0x0c1c) + objective_bitfield_set_on(0x00004000) + goto_next(0x04) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_24[] = { + debug_log 'h', 'e', 'l', 'l', 'o', '\0', + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000200, 0x3c) + goto_first(0x00) + label(0x3c) + local_timer_reset_start + door_open(0x23) + door_open(0x24) + door_open(0x25) + debug_log '!', '\n', '\0', + ai_sleep + if_chr_does_not_exist(0x59, 0x2e) + goto_next(0x1e) + label(0x2e) + if_bond_damage_and_pickups_disabled(0x1e) + chr_try_spawning_at_pad(0x04, 0xff, 0x6601, 0x1004, 0x01000000, 0x2e) + label(0x1e) + label(0x2e) + ai_sleep + if_chr_does_not_exist(0x5a, 0x2e) + goto_next(0x1e) + label(0x2e) + if_bond_damage_and_pickups_disabled(0x1e) + chr_try_spawning_at_pad(0x04, 0xff, 0x2401, 0x1104, 0x01000000, 0x2e) + label(0x1e) + label(0x2e) + ai_sleep + if_chr_does_not_exist(0x5b, 0x2e) + goto_next(0x1e) + label(0x2e) + if_bond_damage_and_pickups_disabled(0x1e) + chr_try_spawning_at_pad(0x04, 0xff, 0x3301, 0x1204, 0x01000000, 0x2e) + label(0x1e) + label(0x02) + ai_sleep + if_local_timer_greater_than(0x600900, 0x2e) + goto_first(0x02) + label(0x2e) + goto_first(0x3c) + ai_list_end +}; +u8 ai_15[] = { + guard_set_chr_num(0x59) + debug_log 'h', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x1304) + ai_list_end +}; +u8 ai_16[] = { + guard_set_chr_num(0x5a) + debug_log 'h', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x1304) + ai_list_end +}; +u8 ai_17[] = { + guard_set_chr_num(0x5b) + debug_log 'h', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x1304) + ai_list_end +}; +u8 ai_18[] = { + random_generate_seed + if_random_seed_greater_than(0xc8, 0x2e) + if_mission_time_less_than(0x7800, 0x2e) + if_random_seed_greater_than(0x64, 0x04) + guard_set_health_total(0x5000) + guard_try_spawning_hat(0xde00, 0x00000000, 0x00) + label(0x00) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x00) + label(0x00) + random_generate_seed + if_random_seed_greater_than(0x64, 0x00) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x00) + label(0x00) + goto_next(0x02) + label(0x04) + guard_set_health_total(0x7800) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x00) + label(0x00) + guard_try_spawning_item(0xc500, 0x0e, 0x00000080, 0x00) + label(0x00) + random_generate_seed + if_random_seed_greater_than(0x64, 0x00) + guard_try_spawning_item(0xc500, 0x0e, 0x00000090, 0x00) + label(0x00) + goto_next(0x02) + label(0x2e) + guard_set_health_total(0x3c00) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x00) + label(0x00) + guard_try_spawning_item(0xcf00, 0x10, 0x00000000, 0x00) + label(0x00) + label(0x02) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + ai_list_end +}; +u8 ai_19[] = { + label(0x00) + ai_sleep + if_guard_see_another_guard_shot(0x33) + if_guard_see_another_guard_die(0x33) + ai_sleep + if_guard_shot_from_bond_missed(0x33) + if_guard_and_bond_within_line_of_sight(0x33) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x32, 0x2e) + if_guard_is_targeted_by_bond(0x33) + label(0x2e) + goto_first(0x00) + label(0x33) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + ai_list_end +}; +u8 ai_20[] = { + guard_set_armour(0x5000) + label(0x00) + ai_sleep + if_guard_see_another_guard_shot(0x33) + if_guard_see_another_guard_die(0x33) + if_guard_heard_bond(0x33) + ai_sleep + if_guard_shot_from_bond_missed(0x33) + if_guard_and_bond_within_line_of_sight(0x33) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x32, 0x2e) + if_guard_is_targeted_by_bond(0x33) + label(0x2e) + goto_first(0x00) + label(0x33) + set_return_ai_list(0x0d00) + jump_to_ai_list(0xfd, 0x0d00) + ai_list_end +}; +u8 ai_21[] = { + chr_try_teleporting_to_pad(0xfd, 0x7101, 0x2e) + label(0x2e) + chr_remove_item_in_hand(0xfd, 0x01) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2e) + goto_first(0x08) + label(0x2e) + guard_play_animation(0x6500, 0x0800, 0x6d00, 0x04, 0x10) + label(0x04) + ai_sleep + if_local_timer_greater_than(0x700000, 0x2e) + goto_first(0x04) + label(0x2e) + chr_remove_item_in_hand(0xfd, 0x00) + label(0x05) + ai_sleep + if_local_timer_greater_than(0xea0000, 0x2e) + goto_first(0x05) + label(0x2e) + door_close(0x26) + label(0x07) + ai_sleep + if_door_state_equal(0x26, 0x01, 0x2e) + goto_first(0x07) + label(0x2e) + screen_fade_to_black + label(0x06) + ai_sleep + if_screen_fade_completed(0x2e) + goto_first(0x06) + label(0x2e) + exit_level + label(0x02) + ai_sleep + goto_first(0x02) + ai_list_end +}; +u8 ai_25[] = { + label(0x40) + ai_sleep + if_bond_is_dead(0x43) + if_bond_in_room_with_pad(0x7101, 0x2e) + goto_first(0x40) + label(0x2e) + objective_bitfield_set_on(0x00008000) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x04) + ai_sleep + if_screen_fade_completed(0x2e) + goto_first(0x04) + label(0x2e) + if_objective_all_completed(0x2e) + jump_to_ai_list(0xfd, 0x0f00) + label(0x2e) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + door_open_instant(0x26) + door_open_instant(0x27) + if_bond_has_item_equipped(0x02, 0x2e) + if_bond_has_item_equipped(0x03, 0x2e) + if_bond_has_item_equipped(0x1a, 0x2e) + if_bond_has_item_equipped(0x1b, 0x2e) + if_bond_has_item_equipped(0x1c, 0x2e) + if_bond_has_item_equipped(0x1d, 0x2e) + if_bond_has_item_equipped(0x18, 0x2e) + if_bond_has_item_equipped(0x19, 0x2e) + if_bond_has_item_equipped(0x04, 0x2e) + if_bond_has_item_equipped(0x05, 0x2e) + if_bond_has_item_equipped(0x06, 0x2e) + if_bond_has_item_equipped(0x07, 0x2e) + if_bond_has_item_equipped(0x08, 0x2e) + if_bond_has_item_equipped(0x09, 0x2e) + if_bond_has_item_equipped(0x0a, 0x2e) + if_bond_has_item_equipped(0x0b, 0x2e) + if_bond_has_item_equipped(0x0c, 0x2e) + if_bond_has_item_equipped(0x0d, 0x2e) + if_bond_has_item_equipped(0x0e, 0x2e) + if_bond_has_item_equipped(0x0f, 0x2e) + if_bond_has_item_equipped(0x10, 0x2e) + if_bond_has_item_equipped(0x11, 0x2e) + if_bond_has_item_equipped(0x12, 0x2e) + if_bond_has_item_equipped(0x13, 0x2e) + if_bond_has_item_equipped(0x16, 0x2e) + if_bond_has_item_equipped(0x14, 0x2e) + if_bond_has_item_equipped(0x15, 0x2e) + bond_equip_item_cinema(0x04) + label(0x2e) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x28, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x1604) + screen_fade_from_black + music_xtrack_play(0x00, 0x00, 0xff) + label(0x05) + ai_sleep + if_screen_fade_completed(0x2e) + goto_first(0x05) + label(0x2e) + jump_to_ai_list(0xfd, 0x0100) + label(0x43) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_22[] = { + local_timer_reset_start + guard_play_animation(0x6200, 0x0000, 0x0100, 0x04, 0x10) + label(0x04) + ai_sleep + if_local_timer_greater_than(0x000000, 0x2e) + goto_first(0x04) + label(0x2e) + guard_play_animation(0x6200, 0x0100, 0xffff, 0x04, 0x10) + label(0x02) + ai_sleep + goto_first(0x02) + ai_list_end +}; +u8 ai_26[] = { + label(0x04) + ai_sleep + if_camera_is_in_bond_swirl(0x2e) + goto_first(0x04) + label(0x2e) + jump_to_ai_list(0xf8, 0x1704) + label(0x02) + ai_sleep + goto_first(0x02) + ai_list_end +}; +u8 ai_27[] = { + label(0x40) + ai_sleep + chr_flags_set_on(0x49, 0x00001000) + chr_flags_set_on(0x4a, 0x00001000) + chr_flags_set_on(0x4b, 0x00001000) + chr_flags_set_on(0x54, 0x00001000) + chr_flags_set_on(0x55, 0x00001000) + ai_sleep + label(0x1d) + ai_sleep + if_killed_civilians_greater_than(0x02, 0x2e) + goto_first(0x1d) + label(0x2e) + text_print_top(0x0d1c) + objective_bitfield_set_on(0x00000001) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_28[] = { + label(0x00) + ai_sleep + if_camera_is_in_bond_swirl(0x05) + goto_first(0x00) + label(0x04) + ai_sleep + if_bond_in_room_with_pad(0x7001, 0x1e) + goto_next(0x2e) + label(0x1e) + goto_first(0x04) + label(0x2e) + music_xtrack_stop(0x01) + label(0x05) + ai_sleep + if_bond_in_room_with_pad(0x7001, 0x2e) + goto_first(0x05) + label(0x2e) + music_xtrack_play(0x01, 0x00, 0xff) + goto_first(0x04) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/UsetupcontrolZ.c b/assets/obseg/setup/UsetupcontrolZ.c index ead28df0..17519a6c 100644 --- a/assets/obseg/setup/UsetupcontrolZ.c +++ b/assets/obseg/setup/UsetupcontrolZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1685,34 +1686,1121 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x9000648f, 0x00649d00, 0x0008009d, 0x00000080, 0x020403ce, 0x2ccf2c00, 0x08022c01, 0x040208c3, 0x2008020a, 0x035b0236, 0x5b03365b, 0x0436311c, 0x2c003602, 0x2c311d2c, 0x0036022c, 0x311e2c00, 0x36022c31, 0x1f2c0036, 0x022c3126, 0x2c003602, 0x2c31272c, 0x00360236, 0x010a022c, 0x020b033c, 0x2c010b02, 0x2c7f4c52, 0x7fb25302, 0x54c3200b, 0x002c0253, 0xc3200c00, 0x2c0252c3, 0x200d002c, 0x022c05fd, 0x04020400 }; -u32 ai_1[] = { 0x02041c00, 0xdc020a03, 0x4dfd0019, 0x00dc052f, 0x2c010a02, 0x2c4dfd00, 0x1900dc2c, 0x0104022c, 0x02051e00, 0xe1020e03, 0x2f2c010e, 0x022c4dfd, 0x000f00e1, 0x2c010502, 0x2c170008, 0x00e22c02, 0x2cae020b, 0x03b40000, 0x3c2c010b, 0x022c0a00, 0xa3000000, 0x8c001002, 0x0d032f2c, 0x010d022c, 0xc3200902, 0x00035500, 0xd6089c00, 0x00040036, 0xb4000384, 0x0f023633, 0x35322c0a, 0x00a30000, 0x008c0010, 0x000c022c, 0x35642c0a, 0x00ac0000, 0x00450010, 0x9a000800, 0x00000c02, 0x2c35962c, 0x0a00ad00, 0x00004a00, 0x109a0008, 0x0000000c, 0x022c35c8, 0x2c0a00ae, 0x0000004f, 0x00109a00, 0x08000000, 0x0c022c0a, 0x00af0000, 0x00590010, 0x9a000800, 0x00000c02, 0x2c020c03, 0x5b233600, 0x0902365b, 0x24360009, 0x02362f2c, 0x010c022c, 0x02060355, 0x00d60842, 0x2dd90000, 0xe12c022c, 0x0106022d, 0x0100020f, 0xc3200a9a, 0x00000400, 0x01000208, 0x039c0002, 0x00003631, 0x02550236, 0x05fd0403, 0x01080209, 0xc3201d05, 0xfd041402, 0x5505fd04, 0x15040000 }; -u32 ai_2[] = { 0xc320109a, 0x00100000, 0xa7122000, 0x0000a712, 0x10000000, 0xa7120800, 0x00000204, 0x1c007002, 0x0a034dfd, 0x00190070, 0x052f2c01, 0x0a022c4d, 0xfd001900, 0x702c0104, 0x022c0205, 0x1e00e302, 0x0e032f2c, 0x010e022c, 0x4dfd000f, 0x00e32c01, 0x05022c17, 0x000800e4, 0x2c022cae, 0x020b03b4, 0x00003c2c, 0x010b022c, 0x0a00a300, 0x00008c00, 0x10020d03, 0x2f2c010d, 0x022cc320, 0x0e020003, 0x9c000008, 0x0036b400, 0x03840f02, 0x36ad7469, 0x6d650002, 0x01333532, 0x2c0a00a3, 0x0000008c, 0x0010000c, 0x022c3564, 0x2c0a00ac, 0x00000045, 0x00109a00, 0x08000000, 0x0c022c35, 0x962c0a00, 0xad000000, 0x4a00109a, 0x00080000, 0x000c022c, 0x35c82c0a, 0x00ae0000, 0x004f0010, 0x9a000800, 0x00000c02, 0x2c0a00af, 0x00000059, 0x00109a00, 0x08000000, 0x0c022c02, 0x0c0330fd, 0x4b9c0000, 0x40002c5b, 0x25360009, 0x02365b26, 0x36000902, 0x364c0096, 0x18022c95, 0x01b1023a, 0x0330fd4b, 0x2f2cb400, 0x21fc08b4, 0x0020d017, 0xb4001fa4, 0x16b40012, 0xc015b400, 0x0e1019b4, 0x00096014, 0x010c022c, 0x0206033c, 0x2dd90000, 0xe32d022c, 0x0106022d, 0x0100020f, 0xc3200f9a, 0x00000800, 0x25010002, 0x14b40009, 0x9c2cc320, 0x15022c01, 0x0c0219b4, 0x000e4c2c, 0xc3201702, 0x2c010c02, 0x15b40012, 0xfc2cc320, 0x14022c01, 0x0c0216b4, 0x001fe02c, 0xc320119a, 0x00004000, 0x022c010c, 0x0217b400, 0x210c2c9a, 0x00004000, 0xc3201202, 0x2c010c02, 0x18960136, 0xc3201602, 0x36b09401, 0x013a0208, 0x05fd0404, 0x03010802, 0x4bc32018, 0x024c0301, 0x4c0209c3, 0x201e05fd, 0x04140400 }; -u32 ai_3[] = { 0x9a000080, 0x009a0004, 0x0000c320, 0x1302041c, 0x00e0020a, 0x032f2c01, 0x0a022c4d, 0xfd001900, 0xe02c0104, 0x022c9a00, 0x00100003, 0x22020803, 0x01080400 }; -u32 ai_19[] = { 0xae020b03, 0xb4000168, 0x2c010b02, 0x2c9a0000, 0x8000c320, 0x1f9a0001, 0x00000204, 0x1c00e002, 0x0a032f2c, 0x010a022c, 0x4dfd0019, 0x00e02c01, 0x04022c02, 0x2c020855, 0x00e02c03, 0x0108022c, 0xd700da02, 0x0c03dc2c, 0x010c022c, 0xd2020903, 0x01090400 }; -u32 ai_20[] = { 0x6b120166, 0x12020603, 0x3c2c0106, 0x022cc320, 0x20170001, 0x00002c02, 0x2cae020a, 0x03b40001, 0x2c2c010a, 0x022cc320, 0x2105fd04, 0x14040000 }; -u32 ai_21[] = { 0x0206039c, 0x00000800, 0x2c010602, 0x2c0204ae, 0x020a03b4, 0x00003c2c, 0x010a022c, 0x311c2c00, 0x36022cad, 0x533100bd, 0x00ff003f, 0x04050000, 0x00103602, 0x36311d2c, 0x0036022c, 0xad533200, 0xbd00ff00, 0x45040600, 0x00001036, 0x0236311d, 0x2c003602, 0x2cad5333, 0x00023602, 0x08010404 }; -u32 ai_4[] = { 0x8e1c9150, 0x93509d00, 0x00004033, 0x343c0833, 0x355036ab, 0x007b002c, 0x023635a0, 0x36ab0073, 0x002c0236, 0xab007400, 0x2c022cbf, 0x00bd0a00, 0x00000004, 0x02041c23, 0x28020a03, 0x2f2c010a, 0x022c4dfd, 0x000f2328, 0x2c010402, 0x2c05fd04, 0x0a020805, 0xfd040704 }; -u32 ai_6[] = { 0x8e1c9150, 0x93509d00, 0x00004033, 0xab007e02, 0x2cbf00bd, 0x0a000000, 0x00040204, 0x1c232802, 0x0a032f2c, 0x010a022c, 0x4dfd000f, 0x23282c01, 0x04022c5f, 0x2205fd04, 0x0a040000 }; -u32 ai_5[] = { 0x8e1d9150, 0x93509d00, 0x00004033, 0x343c0835, 0x5036ab00, 0x65002c02, 0x3635a036, 0xab006d00, 0x2c0236ab, 0x006b002c, 0x022cbf00, 0xbd0a0000, 0x00000402, 0x041c2328, 0x020a032f, 0x2c010a02, 0x2c4dfd00, 0x0f23282c, 0x0104022c, 0x05fd040a, 0x020805fd, 0x04080400 }; -u32 ai_7[] = { 0x8e1d9150, 0x93509d00, 0x00004033, 0xab007c02, 0x2cbf00bd, 0x0a000000, 0x00040204, 0x1c232802, 0x0a032f2c, 0x010a022c, 0x4dfd000f, 0x23282c01, 0x04022c5f, 0x2105fd04, 0x0a040000 }; -u32 ai_8[] = { 0x8e1e9150, 0x93509d00, 0x00004033, 0x353c36ab, 0x0067002c, 0x02363578, 0x36ab006e, 0x002c0236, 0x35b436ab, 0x0079002c, 0x0236ab00, 0x72002c02, 0x2cbf00bd, 0x0a000000, 0x00040204, 0x1c232802, 0x0a032f2c, 0x010a022c, 0x4dfd000f, 0x23282c01, 0x04022c05, 0xfd040a04 }; -u32 ai_9[] = { 0x02049c00, 0x00800008, 0x310008a9, 0x00333580, 0x36140024, 0x00fc3d02, 0x36150024, 0x00fc3d02, 0x3dae020a, 0x0330fc08, 0x31fc08b4, 0x0000782c, 0x010a022c, 0x16000400, 0xfc2c022c, 0x020b30fc, 0x4b31fc4b, 0x032f2c01, 0x0b022c01, 0x04024b02, 0x0805fd00, 0x0d040000 }; -u32 ai_11[] = { 0x90001491, 0x50935002, 0x04140021, 0x00000602, 0x0603462c, 0x3a2c3b2c, 0x322c3c2c, 0x0106022c, 0x3335c82d, 0x35642c16, 0x00010000, 0x0a022d1a, 0x0a022c09, 0xae020b03, 0x3335fa2c, 0xb40000b4, 0x08010b02, 0x2c140021, 0x00002c02, 0x2c160001, 0x00002c02, 0x2c020a03, 0x2f08010a, 0x02080104, 0x04000000 }; -u32 ai_22[] = { 0xa6112000, 0x0000a612, 0x20000000, 0xa60d2000, 0x0000a608, 0x20000000, 0xa6092000, 0x0000a60a, 0x20000000, 0x0206039c, 0x00000400, 0x2c010602, 0x2c66116b, 0x1101020b, 0x035500d2, 0x2c010b02, 0x2c67116a, 0x1101020a, 0x039c0000, 0x08002c01, 0x0a022ca7, 0x0a200000, 0x006b0a01, 0xa70d2000, 0x00006b0d, 0x01a70820, 0x0000006b, 0x0801a709, 0x20000000, 0x6b090102, 0x08030108, 0x04000000 }; -u32 ai_23[] = { 0x0206039c, 0x00001000, 0x2d31002c, 0x0106022c, 0xc320239a, 0x00002000, 0x0008022d, 0x00080208, 0x03010804 }; -u32 ai_12[] = { 0x023a280a, 0x020a033c, 0x2c2f3c01, 0x0a023c03, 0x3c2c013a, 0x022c023d, 0x33350a2c, 0x1a08022c, 0x35322c0e, 0x08022c35, 0x642c1108, 0x022c3596, 0x2c120802, 0x2c35c82c, 0x14000100, 0x0008022c, 0x15000100, 0x00080208, 0x032f2c01, 0x08022c3c, 0x2c000a02, 0x0a03013a, 0x022c0301, 0x3d040000 }; -u32 ai_10[] = { 0xd9fd00a8, 0x2c022cae, 0x020e03b4, 0x00003c2c, 0x010e022c, 0x0a006500, 0x08006d04, 0x10020a03, 0xb400012c, 0x2c010a02, 0x2ce0fd00, 0xe0fd0102, 0x2c671c02, 0x0d03b400, 0x01a42c01, 0x0d022cda, 0x020c03dc, 0x2c010c02, 0x2cd20208, 0x03010804 }; -u32 ai_24[] = { 0x02040355, 0x00a82c01, 0x04022ceb, 0x56ecd700, 0xda020a03, 0xdc2c010a, 0x022cf12c, 0x05fd000f, 0x022cddea, 0xdf1cdf1d, 0xe4000303, 0x03d52000, 0x02000005, 0xf8040bdb, 0xf40000ff, 0x020b03dc, 0x2c010b02, 0x2c000802, 0x08030108, 0x025605fd, 0x00010400 }; -u32 ai_25[] = { 0x0206039c, 0x00000800, 0x2c010602, 0x2cae022c, 0x0331262c, 0x0036022c, 0x3335282c, 0xbd00ff00, 0x7e040e00, 0x00000036, 0x022c3550, 0x2cbd00ff, 0x0047040e, 0x00000000, 0x36022c35, 0x782cbd00, 0xff008104, 0x0e000000, 0x0036022c, 0x35a02cbd, 0x00ff00ca, 0x040e0000, 0x00003602, 0x2c35c82c, 0xbd00ff00, 0xbd040e00, 0x00000036, 0x022c35e6, 0x2cbd00ff, 0x003d040e, 0x00000000, 0x36022cbd, 0x00ff007c, 0x040e0000, 0x00003602, 0x36022c03, 0x31272c00, 0x36022c33, 0x35282cbd, 0x00ff0056, 0x040f0000, 0x00003602, 0x2c35502c, 0xbd00ff00, 0xd7040f00, 0x00000036, 0x022c3578, 0x2cbd00ff, 0x008c040f, 0x00000000, 0x36022c35, 0xa02cbd00, 0xff00a504, 0x0f000000, 0x0036022c, 0x35c82cbd, 0x00ff0095, 0x040f0000, 0x00003602, 0x2c35e62c, 0xbd00ff00, 0xb7040f00, 0x00000036, 0x022cbd00, 0xff005204, 0x0f000000, 0x00360236, 0x02080355, 0x00952d55, 0x009f2d55, 0x276a2d55, 0x00a42d55, 0x00a62d9c, 0x00040000, 0x36022db4, 0x00003c2c, 0x0236b400, 0x09602c01, 0x08022c01, 0x06040000 }; -u32 ai_13[] = { 0x8e26ad53, 0x340a0005, 0xfd041004 }; -u32 ai_14[] = { 0x8e27ad53, 0x350a0005, 0xfd041004 }; -u32 ai_15[] = { 0x022c9132, 0x93288f00, 0x28900014, 0x8dbf3335, 0x8036bf00, 0xbd0a0000, 0x00002c02, 0x36bf00bd, 0x0a100000, 0x002c022c, 0xc000dc00, 0x00000008, 0x00080208, 0x05fd040d, 0x04000000 }; -u32 ai_16[] = { 0x9d000008, 0x00020603, 0x3c2c0106, 0x022c1700, 0x0100002c, 0x022c020e, 0x034b0032, 0x2c010e02, 0x2cc32022, 0xae020a03, 0xb40000f0, 0x2c010a02, 0x2c422c00, 0x55022c0a, 0x00420000, 0x00140410, 0x020b032f, 0x2c010b02, 0x2cbf00bf, 0x04000000, 0x002c022c, 0x0a004100, 0x15002804, 0x10020c03, 0x2f2c010c, 0x022c62fd, 0xc3201c02, 0x2cae020d, 0x03b40000, 0x1e2c010d, 0x022cc320, 0x19210208, 0x032f5542, 0x36005502, 0x36010802, 0x5505fd04, 0x12040000 }; -u32 ai_17[] = { 0x020430fd, 0x08c3201a, 0x1f00e502, 0x0a032f2c, 0x010a022c, 0x4dfd001e, 0x00e52c01, 0x04022c9a, 0x00020000, 0x22020803, 0x01080400 }; -u32 ai_18[] = { 0x90138891, 0x6493649d, 0x00000800, 0x0206033c, 0x3d46554b, 0x00325501, 0x06023d14, 0x00010000, 0x0a020a03, 0x46554b00, 0x64552f2c, 0x010a022c, 0x01060255, 0x671e6a1e, 0x016a1f01, 0xc3201b02, 0x08030108, 0x04000000 }; -u32 ai_26[] = { 0x020603cf, 0x0b010602, 0x0a035500, 0xdf36002c, 0x0236010a, 0x022cf501, 0x020b0355, 0x00df2c01, 0x0b022cf4, 0x0100ff01, 0x0a040000 }; -u32 ai_27[] = { 0x0206039c, 0x00080000, 0x2c010602, 0x2cae020a, 0x03b40000, 0x3c2c010a, 0x022c3335, 0xc836c400, 0xb8079c00, 0x1000002d, 0xc5072400, 0x00003602, 0x2dc50726, 0x00000236, 0x9b000800, 0x00010602, 0x0805fd00, 0x01040000 }; +u8 ai_0[] = { + guard_set_armour(0x6400) + guard_set_health_total(0x6400) + guard_flags_set_on(0x00080000) + guard_flags_set_on(0x80000000) + label(0x04) + ai_sleep + if_camera_is_in_intro(0x2c) + if_camera_is_in_bond_swirl(0x2c) + goto_next(0x08) + label(0x2c) + goto_first(0x04) + label(0x08) + text_print_top(0x0820) + label(0x0a) + ai_sleep + if_object_not_destroyed(0x02, 0x36) + if_object_not_destroyed(0x03, 0x36) + if_object_not_destroyed(0x04, 0x36) + if_chr_does_not_exist(0x1c, 0x2c) + goto_next(0x36) + label(0x2c) + if_chr_does_not_exist(0x1d, 0x2c) + goto_next(0x36) + label(0x2c) + if_chr_does_not_exist(0x1e, 0x2c) + goto_next(0x36) + label(0x2c) + if_chr_does_not_exist(0x1f, 0x2c) + goto_next(0x36) + label(0x2c) + if_chr_does_not_exist(0x26, 0x2c) + goto_next(0x36) + label(0x2c) + if_chr_does_not_exist(0x27, 0x2c) + goto_next(0x36) + label(0x36) + goto_first(0x0a) + label(0x2c) + label(0x0b) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2c) + goto_first(0x0b) + label(0x2c) + if_bond_health_less_than(0x4c, 0x52) + if_bond_health_less_than(0xb2, 0x53) + label(0x54) + text_print_top(0x0b20) + goto_next(0x2c) + label(0x53) + text_print_top(0x0c20) + goto_next(0x2c) + label(0x52) + text_print_top(0x0d20) + goto_next(0x2c) + label(0x2c) + jump_to_ai_list(0xfd, 0x0204) + ai_list_end +}; +u8 ai_1[] = { + label(0x04) + guard_runs_to_pad(0xdc00) + label(0x0a) + ai_sleep + if_chr_distance_to_pad_less_than(0xfd, 0x1900, 0xdc00, 0x05) + if_guard_has_stopped_moving(0x2c) + goto_first(0x0a) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x1900, 0xdc00, 0x2c) + goto_first(0x04) + label(0x2c) + label(0x05) + guard_walks_to_pad(0xe100) + label(0x0e) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0e) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0xe100, 0x2c) + goto_first(0x05) + label(0x2c) + guard_try_facing_target(0x0800, 0xe200, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0b) + label(0x2c) + guard_play_animation(0xa300, 0x0000, 0x8c00, 0x00, 0x10) + label(0x0d) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0d) + label(0x2c) + text_print_top(0x0920) + label(0x00) + ai_sleep + if_bond_in_room_with_pad(0xd600, 0x08) + if_objective_bitfield_is_set_on(0x00040000, 0x36) + if_local_timer_greater_than(0x840300, 0x0f) + label(0x36) + random_generate_seed + if_random_seed_greater_than(0x32, 0x2c) + guard_play_animation(0xa300, 0x0000, 0x8c00, 0x00, 0x10) + goto_next(0x0c) + label(0x2c) + if_random_seed_greater_than(0x64, 0x2c) + guard_play_animation(0xac00, 0x0000, 0x4500, 0x00, 0x10) + objective_bitfield_set_on(0x00000800) + goto_next(0x0c) + label(0x2c) + if_random_seed_greater_than(0x96, 0x2c) + guard_play_animation(0xad00, 0x0000, 0x4a00, 0x00, 0x10) + objective_bitfield_set_on(0x00000800) + goto_next(0x0c) + label(0x2c) + if_random_seed_greater_than(0xc8, 0x2c) + guard_play_animation(0xae00, 0x0000, 0x4f00, 0x00, 0x10) + objective_bitfield_set_on(0x00000800) + goto_next(0x0c) + label(0x2c) + guard_play_animation(0xaf00, 0x0000, 0x5900, 0x00, 0x10) + objective_bitfield_set_on(0x00000800) + goto_next(0x0c) + label(0x2c) + label(0x0c) + ai_sleep + if_object_not_destroyed(0x23, 0x36) + goto_next(0x09) + label(0x36) + if_object_not_destroyed(0x24, 0x36) + goto_next(0x09) + label(0x36) + if_guard_has_stopped_moving(0x2c) + goto_first(0x0c) + label(0x2c) + label(0x06) + ai_sleep + if_bond_in_room_with_pad(0xd600, 0x08) + if_guard_is_on_screen(0x2d) + chr_try_teleporting_to_pad(0x00, 0xe100, 0x2c) + label(0x2c) + goto_first(0x06) + label(0x2d) + goto_first(0x00) + label(0x0f) + text_print_top(0x0a20) + objective_bitfield_set_on(0x00040000) + goto_first(0x00) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00000200, 0x36) + if_chr_does_not_exist(0x02, 0x55) + label(0x36) + jump_to_ai_list(0xfd, 0x0304) + goto_first(0x08) + label(0x09) + text_print_top(0x1d20) + jump_to_ai_list(0xfd, 0x1404) + label(0x55) + jump_to_ai_list(0xfd, 0x1504) + ai_list_end +}; +u8 ai_2[] = { + text_print_top(0x1020) + objective_bitfield_set_on(0x00001000) + object_flags_2_set_off(0x12, 0x00000020) + object_flags_2_set_off(0x12, 0x00000010) + object_flags_2_set_off(0x12, 0x00000008) + label(0x04) + guard_runs_to_pad(0x7000) + label(0x0a) + ai_sleep + if_chr_distance_to_pad_less_than(0xfd, 0x1900, 0x7000, 0x05) + if_guard_has_stopped_moving(0x2c) + goto_first(0x0a) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x1900, 0x7000, 0x2c) + goto_first(0x04) + label(0x2c) + label(0x05) + guard_walks_to_pad(0xe300) + label(0x0e) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0e) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0xe300, 0x2c) + goto_first(0x05) + label(0x2c) + guard_try_facing_target(0x0800, 0xe400, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0b) + label(0x2c) + guard_play_animation(0xa300, 0x0000, 0x8c00, 0x00, 0x10) + label(0x0d) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0d) + label(0x2c) + text_print_top(0x0e20) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x36) + if_local_timer_greater_than(0x840300, 0x0f) + label(0x36) + debug_log 't', 'i', 'm', 'e', '\0', + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x32, 0x2c) + guard_play_animation(0xa300, 0x0000, 0x8c00, 0x00, 0x10) + goto_next(0x0c) + label(0x2c) + if_random_seed_greater_than(0x64, 0x2c) + guard_play_animation(0xac00, 0x0000, 0x4500, 0x00, 0x10) + objective_bitfield_set_on(0x00000800) + goto_next(0x0c) + label(0x2c) + if_random_seed_greater_than(0x96, 0x2c) + guard_play_animation(0xad00, 0x0000, 0x4a00, 0x00, 0x10) + objective_bitfield_set_on(0x00000800) + goto_next(0x0c) + label(0x2c) + if_random_seed_greater_than(0xc8, 0x2c) + guard_play_animation(0xae00, 0x0000, 0x4f00, 0x00, 0x10) + objective_bitfield_set_on(0x00000800) + goto_next(0x0c) + label(0x2c) + guard_play_animation(0xaf00, 0x0000, 0x5900, 0x00, 0x10) + objective_bitfield_set_on(0x00000800) + goto_next(0x0c) + label(0x2c) + label(0x0c) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x4b) + if_objective_bitfield_is_set_on(0x00400000, 0x2c) + if_object_not_destroyed(0x25, 0x36) + goto_next(0x09) + label(0x36) + if_object_not_destroyed(0x26, 0x36) + goto_next(0x09) + label(0x36) + if_guard_distance_to_bond_greater_than(0x9600, 0x18) + label(0x2c) + guard_bitfield_set_off(0x01) + local_timer_start + label(0x3a) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x4b) + if_guard_has_stopped_moving(0x2c) + if_local_timer_greater_than(0xfc2100, 0x08) + if_local_timer_greater_than(0xd02000, 0x17) + if_local_timer_greater_than(0xa41f00, 0x16) + if_local_timer_greater_than(0xc01200, 0x15) + if_local_timer_greater_than(0x100e00, 0x19) + if_local_timer_greater_than(0x600900, 0x14) + goto_first(0x0c) + label(0x2c) + label(0x06) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2d) + chr_try_teleporting_to_pad(0x00, 0xe300, 0x2d) + label(0x2c) + goto_first(0x06) + label(0x2d) + goto_first(0x00) + label(0x0f) + text_print_top(0x0f20) + objective_bitfield_set_on(0x00080000) + alarm_on + goto_first(0x00) + label(0x14) + if_local_timer_greater_than(0x9c0900, 0x2c) + text_print_top(0x1520) + label(0x2c) + goto_first(0x0c) + label(0x19) + if_local_timer_greater_than(0x4c0e00, 0x2c) + text_print_top(0x1720) + label(0x2c) + goto_first(0x0c) + label(0x15) + if_local_timer_greater_than(0xfc1200, 0x2c) + text_print_top(0x1420) + label(0x2c) + goto_first(0x0c) + label(0x16) + if_local_timer_greater_than(0xe01f00, 0x2c) + text_print_top(0x1120) + objective_bitfield_set_on(0x00400000) + label(0x2c) + goto_first(0x0c) + label(0x17) + if_local_timer_greater_than(0x0c2100, 0x2c) + objective_bitfield_set_on(0x00400000) + text_print_top(0x1220) + label(0x2c) + goto_first(0x0c) + label(0x18) + if_guard_bitfield_is_set_on(0x01, 0x36) + text_print_top(0x1620) + label(0x36) + local_timer_stop + guard_bitfield_set_on(0x01) + goto_first(0x3a) + label(0x08) + jump_to_ai_list(0xfd, 0x0404) + ai_sleep + goto_first(0x08) + label(0x4b) + text_print_top(0x1820) + label(0x4c) + ai_sleep + goto_first(0x4c) + label(0x09) + text_print_top(0x1e20) + jump_to_ai_list(0xfd, 0x1404) + ai_list_end +}; +u8 ai_3[] = { + objective_bitfield_set_on(0x00800000) + objective_bitfield_set_on(0x00000400) + text_print_top(0x1320) + label(0x04) + guard_runs_to_pad(0xe000) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0a) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x1900, 0xe000, 0x2c) + goto_first(0x04) + label(0x2c) + objective_bitfield_set_on(0x00100000) + ai_sleep + guard_remove_fade + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; +u8 ai_19[] = { + local_timer_reset_start + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x680100, 0x2c) + goto_first(0x0b) + label(0x2c) + objective_bitfield_set_on(0x00800000) + text_print_top(0x1f20) + objective_bitfield_set_on(0x00000100) + label(0x04) + guard_runs_to_pad(0xe000) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0a) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x1900, 0xe000, 0x2c) + goto_first(0x04) + label(0x2c) + label(0x2c) + label(0x08) + if_bond_in_room_with_pad(0xe000, 0x2c) + ai_sleep + goto_first(0x08) + label(0x2c) + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x0c) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x0c) + label(0x2c) + exit_level + label(0x09) + ai_sleep + goto_first(0x09) + ai_list_end +}; +u8 ai_20[] = { + door_unset_lock(0x12, 0x01) + door_open(0x12) + label(0x06) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2c) + goto_first(0x06) + label(0x2c) + text_print_top(0x2020) + guard_try_facing_target(0x0100, 0x0000, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0x0a) + label(0x2c) + text_print_top(0x2120) + jump_to_ai_list(0xfd, 0x1404) + ai_list_end +}; +u8 ai_21[] = { + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x2c) + goto_first(0x06) + label(0x2c) + label(0x04) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0a) + label(0x2c) + if_chr_does_not_exist(0x1c, 0x2c) + goto_next(0x36) + label(0x2c) + debug_log 'S', '1', '\0', + chr_try_spawning_at_pad(0x00, 0xff, 0x3f00, 0x0504, 0x10000000, 0x36) + label(0x36) + if_chr_does_not_exist(0x1d, 0x2c) + goto_next(0x36) + label(0x2c) + debug_log 'S', '2', '\0', + chr_try_spawning_at_pad(0x00, 0xff, 0x4500, 0x0604, 0x10000000, 0x36) + label(0x36) + if_chr_does_not_exist(0x1d, 0x2c) + goto_next(0x36) + label(0x2c) + debug_log 'S', '3', '\0', + label(0x36) + label(0x08) + goto_first(0x04) + ai_list_end +}; +u8 ai_4[] = { + guard_set_chr_num(0x1c) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_flags_set_on(0x40000000) + random_generate_seed + if_random_seed_less_than(0x3c, 0x08) + random_generate_seed + if_random_seed_greater_than(0x50, 0x36) + guard_set_pad_preset(0x7b00) + goto_next(0x2c) + label(0x36) + if_random_seed_greater_than(0xa0, 0x36) + guard_set_pad_preset(0x7300) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0x7400) + goto_next(0x2c) + label(0x2c) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x04) + label(0x04) + guard_runs_to_pad(0x2823) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0a) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x2823, 0x2c) + goto_first(0x04) + label(0x2c) + jump_to_ai_list(0xfd, 0x0a04) + label(0x08) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_6[] = { + guard_set_chr_num(0x1c) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_flags_set_on(0x40000000) + random_generate_seed + guard_set_pad_preset(0x7e00) + label(0x2c) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x04) + label(0x04) + guard_runs_to_pad(0x2823) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0a) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x2823, 0x2c) + goto_first(0x04) + label(0x2c) + object_destroy(0x22) + jump_to_ai_list(0xfd, 0x0a04) + ai_list_end +}; +u8 ai_5[] = { + guard_set_chr_num(0x1d) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_flags_set_on(0x40000000) + random_generate_seed + if_random_seed_less_than(0x3c, 0x08) + if_random_seed_greater_than(0x50, 0x36) + guard_set_pad_preset(0x6500) + goto_next(0x2c) + label(0x36) + if_random_seed_greater_than(0xa0, 0x36) + guard_set_pad_preset(0x6d00) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0x6b00) + goto_next(0x2c) + label(0x2c) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x04) + label(0x04) + guard_runs_to_pad(0x2823) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0a) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x2823, 0x2c) + goto_first(0x04) + label(0x2c) + jump_to_ai_list(0xfd, 0x0a04) + label(0x08) + jump_to_ai_list(0xfd, 0x0804) + ai_list_end +}; +u8 ai_7[] = { + guard_set_chr_num(0x1d) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_flags_set_on(0x40000000) + random_generate_seed + guard_set_pad_preset(0x7c00) + label(0x2c) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x04) + label(0x04) + guard_runs_to_pad(0x2823) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0a) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x2823, 0x2c) + goto_first(0x04) + label(0x2c) + object_destroy(0x21) + jump_to_ai_list(0xfd, 0x0a04) + ai_list_end +}; +u8 ai_8[] = { + guard_set_chr_num(0x1e) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_flags_set_on(0x40000000) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x36) + guard_set_pad_preset(0x6700) + goto_next(0x2c) + label(0x36) + if_random_seed_greater_than(0x78, 0x36) + guard_set_pad_preset(0x6e00) + goto_next(0x2c) + label(0x36) + if_random_seed_greater_than(0xb4, 0x36) + guard_set_pad_preset(0x7900) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0x7200) + goto_next(0x2c) + label(0x2c) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x04) + label(0x04) + guard_runs_to_pad(0x2823) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0a) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x2823, 0x2c) + goto_first(0x04) + label(0x2c) + jump_to_ai_list(0xfd, 0x0a04) + ai_list_end +}; +u8 ai_9[] = { + label(0x04) + if_objective_bitfield_is_set_on(0x00800000, 0x08) + if_chr_does_not_exist(0x00, 0x08) + guard_set_chr_preset(0x00) + random_generate_seed + if_random_seed_greater_than(0x80, 0x36) + guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x3d) + label(0x36) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0xfc00, 0x3d) + label(0x3d) + local_timer_reset_start + label(0x0a) + ai_sleep + if_chr_dying_or_dead(0xfc, 0x08) + if_chr_does_not_exist(0xfc, 0x08) + if_local_timer_greater_than(0x780000, 0x2c) + goto_first(0x0a) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + label(0x2c) + label(0x0b) + if_chr_dying_or_dead(0xfc, 0x4b) + if_chr_does_not_exist(0xfc, 0x4b) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0b) + label(0x2c) + goto_first(0x04) + label(0x4b) + label(0x08) + jump_to_ai_list(0xfd, 0x0d00) + ai_list_end +}; +u8 ai_11[] = { + guard_set_armour(0x1400) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + label(0x04) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x2c) + if_guard_see_another_guard_shot(0x2c) + if_guard_see_another_guard_die(0x2c) + if_guard_sees_bond(0x2c) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_first(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x2d) + if_random_seed_greater_than(0x64, 0x2c) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x0a) + label(0x2d) + guard_try_throwing_grenade(0x0a) + label(0x2c) + guard_kneel + local_timer_reset_start + label(0x0b) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x2c) + if_local_timer_greater_than(0xb40000, 0x08) + goto_first(0x0b) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x2c) + label(0x2c) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x08) + goto_first(0x0a) + label(0x08) + goto_first(0x04) + ai_list_end +}; +u8 ai_22[] = { + object_flags_2_set_on(0x11, 0x00000020) + object_flags_2_set_on(0x12, 0x00000020) + object_flags_2_set_on(0x0d, 0x00000020) + object_flags_2_set_on(0x08, 0x00000020) + object_flags_2_set_on(0x09, 0x00000020) + object_flags_2_set_on(0x0a, 0x00000020) + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00040000, 0x2c) + goto_first(0x06) + label(0x2c) + door_open(0x11) + door_unset_lock(0x11, 0x01) + label(0x0b) + ai_sleep + if_bond_in_room_with_pad(0xd200, 0x2c) + goto_first(0x0b) + label(0x2c) + door_close(0x11) + door_set_lock(0x11, 0x01) + label(0x0a) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x2c) + goto_first(0x0a) + label(0x2c) + object_flags_2_set_off(0x0a, 0x00000020) + door_unset_lock(0x0a, 0x01) + object_flags_2_set_off(0x0d, 0x00000020) + door_unset_lock(0x0d, 0x01) + object_flags_2_set_off(0x08, 0x00000020) + door_unset_lock(0x08, 0x01) + object_flags_2_set_off(0x09, 0x00000020) + door_unset_lock(0x09, 0x01) + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; +u8 ai_23[] = { + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00100000, 0x2d) + if_chr_does_not_exist(0x00, 0x2c) + goto_first(0x06) + label(0x2c) + text_print_top(0x2320) + objective_bitfield_set_on(0x00200000) + goto_next(0x08) + label(0x2d) + goto_next(0x08) + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; +u8 ai_12[] = { + label(0x3a) + guard_try_running_to_bond_position(0x0a) + label(0x0a) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2c) + if_guard_has_stopped_moving(0x3c) + goto_first(0x0a) + label(0x3c) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2c) + goto_first(0x3a) + label(0x2c) + label(0x3d) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x2c) + guard_try_throwing_grenade(0x08) + label(0x2c) + if_random_seed_greater_than(0x32, 0x2c) + guard_try_sidestepping(0x08) + label(0x2c) + if_random_seed_greater_than(0x64, 0x2c) + guard_try_firing_walk(0x08) + label(0x2c) + if_random_seed_greater_than(0x96, 0x2c) + guard_try_firing_run(0x08) + label(0x2c) + if_random_seed_greater_than(0xc8, 0x2c) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x2c) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x08) + label(0x2c) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_next(0x0a) + label(0x0a) + ai_sleep + goto_first(0x3a) + label(0x2c) + ai_sleep + goto_first(0x3d) + ai_list_end +}; +u8 ai_10[] = { + chr_try_teleporting_to_pad(0xfd, 0xa800, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0e) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0e) + label(0x2c) + guard_play_animation(0x6500, 0x0800, 0x6d00, 0x04, 0x10) + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0x0a) + label(0x2c) + chr_remove_item_in_hand(0xfd, 0x00) + chr_remove_item_in_hand(0xfd, 0x01) + label(0x2c) + door_close(0x1c) + label(0x0d) + ai_sleep + if_local_timer_greater_than(0xa40100, 0x2c) + goto_first(0x0d) + label(0x2c) + screen_fade_to_black + label(0x0c) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x0c) + label(0x2c) + exit_level + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; +u8 ai_24[] = { + label(0x04) + ai_sleep + if_bond_in_room_with_pad(0xa800, 0x2c) + goto_first(0x04) + label(0x2c) + if_bond_is_dead(0x56) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x0a) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x0a) + label(0x2c) + if_objective_all_completed(0x2c) + jump_to_ai_list(0xfd, 0x0f00) + label(0x2c) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + door_open_instant(0x1c) + door_open_instant(0x1d) + bond_equip_item_cinema(0x00) + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x20, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x0b04) + screen_fade_from_black + music_xtrack_play(0x00, 0x00, 0xff) + label(0x0b) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x0b) + label(0x2c) + goto_next(0x08) + label(0x08) + ai_sleep + goto_first(0x08) + label(0x56) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_25[] = { + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x2c) + goto_first(0x06) + label(0x2c) + local_timer_reset_start + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x26, 0x2c) + goto_next(0x36) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x28, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0x7e00, 0x0e04, 0x00000000, 0x36) + label(0x2c) + if_random_seed_greater_than(0x50, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0x4700, 0x0e04, 0x00000000, 0x36) + label(0x2c) + if_random_seed_greater_than(0x78, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0x8100, 0x0e04, 0x00000000, 0x36) + label(0x2c) + if_random_seed_greater_than(0xa0, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0xca00, 0x0e04, 0x00000000, 0x36) + label(0x2c) + if_random_seed_greater_than(0xc8, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0xbd00, 0x0e04, 0x00000000, 0x36) + label(0x2c) + if_random_seed_greater_than(0xe6, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0x3d00, 0x0e04, 0x00000000, 0x36) + label(0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0x7c00, 0x0e04, 0x00000000, 0x36) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x27, 0x2c) + goto_next(0x36) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x28, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0x5600, 0x0f04, 0x00000000, 0x36) + label(0x2c) + if_random_seed_greater_than(0x50, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0xd700, 0x0f04, 0x00000000, 0x36) + label(0x2c) + if_random_seed_greater_than(0x78, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0x8c00, 0x0f04, 0x00000000, 0x36) + label(0x2c) + if_random_seed_greater_than(0xa0, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0xa500, 0x0f04, 0x00000000, 0x36) + label(0x2c) + if_random_seed_greater_than(0xc8, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0x9500, 0x0f04, 0x00000000, 0x36) + label(0x2c) + if_random_seed_greater_than(0xe6, 0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0xb700, 0x0f04, 0x00000000, 0x36) + label(0x2c) + chr_try_spawning_at_pad(0x00, 0xff, 0x5200, 0x0f04, 0x00000000, 0x36) + label(0x36) + label(0x08) + ai_sleep + if_bond_in_room_with_pad(0x9500, 0x2d) + if_bond_in_room_with_pad(0x9f00, 0x2d) + if_bond_in_room_with_pad(0x6a27, 0x2d) + if_bond_in_room_with_pad(0xa400, 0x2d) + if_bond_in_room_with_pad(0xa600, 0x2d) + if_objective_bitfield_is_set_on(0x00000400, 0x36) + label(0x2d) + if_local_timer_greater_than(0x3c0000, 0x2c) + label(0x36) + if_local_timer_greater_than(0x600900, 0x2c) + goto_first(0x08) + label(0x2c) + goto_first(0x06) + ai_list_end +}; +u8 ai_13[] = { + guard_set_chr_num(0x26) + debug_log 'S', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_14[] = { + guard_set_chr_num(0x27) + debug_log 'S', '5', '\n', '\0', + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_15[] = { + label(0x2c) + guard_set_speed_rating(0x32) + guard_set_accuracy_rating(0x28) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x36) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x2c) + label(0x36) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000010, 0x2c) + label(0x2c) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x08) + goto_next(0x08) + label(0x08) + jump_to_ai_list(0xfd, 0x0d04) + ai_list_end +}; +u8 ai_16[] = { + guard_flags_set_on(0x00080000) + label(0x06) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2c) + goto_first(0x06) + label(0x2c) + guard_try_facing_target(0x0100, 0x0000, 0x2c) + label(0x2c) + label(0x0e) + ai_sleep + if_guard_distance_to_bond_less_than(0x3200, 0x2c) + goto_first(0x0e) + label(0x2c) + text_print_top(0x2220) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0xf00000, 0x2c) + goto_first(0x0a) + label(0x2c) + if_guard_is_on_screen(0x2c) + goto_next(0x55) + label(0x2c) + guard_play_animation(0x4200, 0x0000, 0x1400, 0x04, 0x10) + label(0x0b) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0b) + label(0x2c) + guard_try_spawning_item(0xbf00, 0x04, 0x00000000, 0x2c) + label(0x2c) + guard_play_animation(0x4100, 0x1500, 0x2800, 0x04, 0x10) + label(0x0c) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0c) + label(0x2c) + chr_drop_all_held_items(0xfd) + text_print_top(0x1c20) + label(0x2c) + local_timer_reset_start + label(0x0d) + ai_sleep + if_local_timer_greater_than(0x1e0000, 0x2c) + goto_first(0x0d) + label(0x2c) + text_print_top(0x1920) + guard_surrenders + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x55) + if_guard_is_on_screen(0x36) + goto_next(0x55) + label(0x36) + goto_first(0x08) + label(0x55) + jump_to_ai_list(0xfd, 0x1204) + ai_list_end +}; +u8 ai_17[] = { + label(0x04) + if_chr_dying_or_dead(0xfd, 0x08) + text_print_top(0x1a20) + guard_sprints_to_pad(0xe500) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0a) + label(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0xe500, 0x2c) + goto_first(0x04) + label(0x2c) + objective_bitfield_set_on(0x00000200) + guard_remove_fade + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; +u8 ai_18[] = { + guard_set_armour(0x8813) + guard_set_speed_rating(0x64) + guard_set_accuracy_rating(0x64) + guard_flags_set_on(0x00080000) + label(0x06) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x3d) + if_guard_shot_from_bond_missed(0x55) + if_guard_distance_to_bond_less_than(0x3200, 0x55) + goto_first(0x06) + label(0x3d) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x0a) + label(0x0a) + ai_sleep + if_guard_shot_from_bond_missed(0x55) + if_guard_distance_to_bond_less_than(0x6400, 0x55) + if_guard_has_stopped_moving(0x2c) + goto_first(0x0a) + label(0x2c) + goto_first(0x06) + label(0x55) + door_close(0x1e) + door_set_lock(0x1e, 0x01) + door_set_lock(0x1f, 0x01) + text_print_top(0x1b20) + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; +u8 ai_26[] = { + label(0x06) + ai_sleep + if_camera_is_in_bond_swirl(0x0b) + goto_first(0x06) + label(0x0a) + ai_sleep + if_bond_in_room_with_pad(0xdf00, 0x36) + goto_next(0x2c) + label(0x36) + goto_first(0x0a) + label(0x2c) + music_xtrack_stop(0x01) + label(0x0b) + ai_sleep + if_bond_in_room_with_pad(0xdf00, 0x2c) + goto_first(0x0b) + label(0x2c) + music_xtrack_play(0x01, 0x00, 0xff) + goto_first(0x0a) + ai_list_end +}; +u8 ai_27[] = { + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00000800, 0x2c) + goto_first(0x06) + label(0x2c) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0a) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + sfx_play(0xb800, 0x07) + if_objective_bitfield_is_set_on(0x00001000, 0x2d) + sfx_emit_from_object(0x07, 0x24, 0x0000) + goto_next(0x36) + label(0x2d) + sfx_emit_from_object(0x07, 0x26, 0x0000) + label(0x36) + objective_bitfield_set_off(0x00000800) + goto_first(0x06) + label(0x08) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/UsetupcrypZ.c b/assets/obseg/setup/UsetupcrypZ.c index d3f9039d..ebbc3cf0 100644 --- a/assets/obseg/setup/UsetupcrypZ.c +++ b/assets/obseg/setup/UsetupcrypZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1014,32 +1015,907 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x90012c8f, 0x00289164, 0x93649264, 0x9d000002, 0x00020903, 0x3c2b0109, 0x022b05fd, 0x04030400 }; -u32 ai_1[] = { 0x9d000008, 0x009d0000, 0x02009d00, 0x0000109c, 0x00000800, 0x419c0000, 0x04004002, 0x3f9000c8, 0x8f00c891, 0x32933292, 0x328e1402, 0x2bbf00cd, 0x06800020, 0x002b022b, 0xbf00cd06, 0x90002000, 0x07024090, 0x03e88f01, 0xf4915093, 0x5092508e, 0x159a0000, 0x1000022b, 0xbf00cd09, 0x80002000, 0x2b022bbf, 0x00cd0990, 0x00200007, 0x0241900b, 0xb88f01f4, 0x91649364, 0x92648e16, 0x9a000020, 0x00022bbf, 0x00cd1680, 0x0020002b, 0x022bbf00, 0xcd169000, 0x20000702, 0x07170001, 0x00002b02, 0x2bae0205, 0x03b40001, 0x2c2b0105, 0x022b9e00, 0x00001002, 0x0903452b, 0x3c2b0109, 0x022bc400, 0x36ff05fd, 0x04030400 }; -u32 ai_24[] = { 0x02090331, 0x142b0109, 0x022b9a00, 0x000400bd, 0x0cff00ba, 0x04020000, 0x00102b02, 0x2ba40600, 0x0200005f, 0x06020503, 0x9c000010, 0x002b0105, 0x022bc400, 0x36ff020a, 0x0331152b, 0x010a022b, 0x9a000008, 0x00bd0cff, 0x00920402, 0x00000010, 0x2b022ba4, 0x07000200, 0x005f0702, 0x0603ad42, 0x3f009c00, 0x0020002b, 0x0106022b, 0xad423300, 0xfbae020c, 0x03b40000, 0x782b010c, 0x022bc400, 0x36ff020d, 0x0331162b, 0x010d022b, 0x9a000040, 0x00020e03, 0x010e0400 }; -u32 ai_2[] = { 0xad58202d, 0x206d6100, 0x02030306, 0x04033335, 0x80354551, 0x02353c3c, 0x023005fd, 0x04050251, 0x05fd0406, 0x023c05fd, 0x04040400 }; -u32 ai_3[] = { 0xad58202d, 0x20617400, 0x02033335, 0x802b4551, 0x7f3f3c33, 0x022b3528, 0x2b130702, 0x2b35502b, 0x1107022b, 0x35782b02, 0x3c120702, 0x2b35a02b, 0x14000100, 0x0007022b, 0x35c82b15, 0x00010000, 0x07022b35, 0xe12b1500, 0x2100002b, 0x022b1400, 0x2100002b, 0x022b0303, 0x03160001, 0x00000702, 0x07032f2b, 0x0107022b, 0x05fd0403, 0x02510604, 0x0405fd04, 0x06040000 }; -u32 ai_5[] = { 0xad58202d, 0x20657600, 0x02030333, 0x022b3335, 0x3c2b0f07, 0x022b3335, 0x782b0e07, 0x022b3335, 0xb42b1007, 0x022b0a00, 0x0b001400, 0x3c001000, 0x07020703, 0x2f2b0107, 0x022b0704 }; -u32 ai_4[] = { 0xad58202d, 0x20676f00, 0x0203282b, 0x022b0209, 0x032f073c, 0x07455101, 0x09025106, 0x040505fd, 0x04060207, 0x06040305, 0xfd040304, 0x02070301, 0x07040000 }; -u32 ai_17[] = { 0x02036703, 0x67006601, 0xa3040040, 0x0000a304, 0x00100000, 0xa3050040, 0x0000a305, 0x00100000, 0x02050355, 0x00972b01, 0x05022b67, 0x02670102, 0x09035200, 0x0900972b, 0x52000900, 0x982b5200, 0x0900992b, 0x52000900, 0x9a2b5200, 0x09009b2b, 0x03520009, 0x009c2b52, 0x0009009d, 0x2b520009, 0x009e2b52, 0x0009009f, 0x2b520009, 0x00a02b03, 0x52000900, 0xa12b5200, 0x0900a22b, 0x52000900, 0xa32b5200, 0x0900a42b, 0x52000900, 0xa52b5200, 0x0900a72b, 0x52000900, 0xa82b0352, 0x000900a9, 0x2b520009, 0x00aa2b52, 0x000900ab, 0x2b520009, 0x00ac2b52, 0x000900ad, 0x2b520009, 0x00ae2b52, 0x000a00a6, 0x2c010902, 0x2b660000, 0x0a022c66, 0x01020b03, 0x68010e2b, 0x010b022b, 0xa4040010, 0x0000a405, 0x00100000, 0x020a0355, 0x00452b01, 0x0a022b01, 0x03040000 }; -u32 ai_23[] = { 0x9a000001, 0x00020503, 0x55009152, 0x039a0000, 0x01009b00, 0x00020003, 0x5500013f, 0x55007240, 0x55001541, 0x55006842, 0x55003043, 0x03550064, 0x44550056, 0x45550058, 0x4655005f, 0x47550050, 0x4855005e, 0x49550043, 0x4a010502, 0x3f03ac00, 0x0015ac01, 0x001aac02, 0x005aac03, 0x008cac04, 0x00890105, 0x024003ac, 0x00006cac, 0x010070ac, 0x020050ac, 0x03004fac, 0x04006701, 0x05024103, 0xac00008d, 0xac010030, 0xac02002f, 0xac030058, 0xac04008b, 0x01050242, 0x03ac0000, 0x65ac0100, 0x66ac0200, 0x72ac0300, 0x79ac0400, 0x61010502, 0x4303ac00, 0x008dac01, 0x000bac02, 0x0015ac03, 0x0055ac04, 0x00400105, 0x024403ac, 0x000071ac, 0x010070ac, 0x02005fac, 0x03005eac, 0x04007201, 0x05024503, 0xac00008d, 0xac010050, 0xac020047, 0xac030027, 0xac040030, 0x01050246, 0x03ac0000, 0x15ac0100, 0x1aac0200, 0x8cac0300, 0x8bac0400, 0x50010502, 0x4703ac00, 0x0061ac01, 0x0063ac02, 0x002fac03, 0x003bac04, 0x00910105, 0x024803ac, 0x000072ac, 0x010089ac, 0x02008aac, 0x03002aac, 0x04004201, 0x05024903, 0xac00000e, 0xac010040, 0xac020043, 0xac03008b, 0xac04008a, 0x0105024a, 0x03ac0000, 0x27ac0100, 0x3bac0200, 0x47ac0300, 0x48ac0400, 0x55010502, 0x529a0000, 0x02009b00, 0x00010001, 0x05040000 }; -u32 ai_18[] = { 0x8e00ae02, 0x4b03b400, 0x04b00301, 0x4b02039c, 0x00000200, 0x0aae0209, 0x03b40009, 0x602b0109, 0x022b3105, 0x2b010302, 0x2bad7370, 0x61776e31, 0x00f335bd, 0x03ff2328, 0x04070000, 0x00000702, 0x35ad2d3e, 0x6661696c, 0x00010302, 0x07ad7331, 0x204f4b21, 0x00010302, 0x0a039c00, 0x0001002b, 0x010a022b, 0x01030400 }; -u32 ai_19[] = { 0x8e01ae02, 0x4b03b400, 0x04b00301, 0x4b02039c, 0x00000200, 0x0aae0209, 0x03b40009, 0x602b0109, 0x022b3106, 0x2b010302, 0x2bad7370, 0x61776e32, 0x00f335bd, 0x03ff2328, 0x04080000, 0x00000702, 0x35ad2d3e, 0x6661696c, 0x00010302, 0x07ad7332, 0x204f4b21, 0x00010302, 0x0a039c00, 0x0001002b, 0x010a022b, 0x01030400 }; -u32 ai_20[] = { 0x8e02ae02, 0x4b03b400, 0x04b00301, 0x4b02039c, 0x00000200, 0x0aae0209, 0x03b4000b, 0xb82b0109, 0x022b3107, 0x2b010302, 0x2bad7370, 0x61776e33, 0x00f335bd, 0x03ff2328, 0x04090000, 0x00000702, 0x35ad2d3e, 0x6661696c, 0x00010302, 0x07ad7333, 0x204f4b21, 0x00010302, 0x0a039c00, 0x0001002b, 0x010a022b, 0x01030400 }; -u32 ai_21[] = { 0x8e03ae02, 0x4b03b400, 0x04b00301, 0x4b02039c, 0x00000200, 0x0aae0209, 0x03b4000b, 0xb82b0109, 0x022b3108, 0x2b010302, 0x2bad7370, 0x61776e34, 0x00f335bd, 0x03ff2328, 0x040a0000, 0x00000702, 0x35ad2d3e, 0x6661696c, 0x00010302, 0x07ad7334, 0x204f4b21, 0x00010302, 0x0a039c00, 0x0001002b, 0x010a022b, 0x01030400 }; -u32 ai_22[] = { 0x8e04ae02, 0x4b03b400, 0x04b00301, 0x4b02039c, 0x00000200, 0x0aae0209, 0x03b4000e, 0x102b0109, 0x022b3109, 0x2b010302, 0x2bad7370, 0x61776e35, 0x00f335bd, 0x03ff2328, 0x040b0000, 0x00000702, 0x35ad2d3e, 0x6661696c, 0x00010302, 0x07ad7335, 0x204f4b21, 0x00010302, 0x0a039c00, 0x0001002b, 0x010a022b, 0x01030400 }; -u32 ai_6[] = { 0x8e05ad64, 0x310a0005, 0xfd040c04 }; -u32 ai_7[] = { 0x8e06ad64, 0x320a0005, 0xfd040c04 }; -u32 ai_8[] = { 0x8e07ad64, 0x330a0005, 0xfd040c04 }; -u32 ai_9[] = { 0x8e08ad64, 0x340a0005, 0xfd040c04 }; -u32 ai_10[] = { 0x8e09ad64, 0x350a0005, 0xfd040c04 }; -u32 ai_11[] = { 0x73038442, 0x73025841, 0x73012c40, 0x7300783f, 0x023f9114, 0x9314002b, 0x02409128, 0x9328002b, 0x0241913c, 0x933c002b, 0x02429150, 0x9350002b, 0x022b3335, 0xa0383550, 0x358f0028, 0x9000008d, 0xe5bf00c3, 0x09000000, 0x002b022b, 0x00070235, 0x8f002890, 0x000a8dcc, 0xbf00c309, 0x00000000, 0x2b022b02, 0x2b000702, 0x388f0028, 0x90001402, 0x2bbf00c3, 0x09800000, 0x002b022b, 0xbf00c309, 0x90000000, 0x07020705, 0xfd040d04 }; -u32 ai_12[] = { 0x02399c00, 0x00020008, 0x4c019035, 0x28090235, 0x2a090209, 0x034c00c8, 0x353c3a02, 0x352f3b01, 0x09023a3c, 0x2b000702, 0x3b030139, 0x022b023c, 0x33350a2b, 0x1a07022b, 0x35322b0e, 0x07022b35, 0x3c2b1307, 0x022b3550, 0x2b130702, 0x2b35642b, 0x1107022b, 0x35962b12, 0x07022b35, 0xc82b1400, 0x01000007, 0x022b35fa, 0x08150001, 0x00000702, 0x07032f2b, 0x0107022b, 0x3c2b0009, 0x02090301, 0x39022b03, 0x013c0208, 0x05fd040e, 0x04000000 }; -u32 ai_13[] = { 0xad202d3e, 0x434f5645, 0x520a0028, 0x09020903, 0x46084b00, 0xc8070109, 0x020705fd, 0x040f0208, 0x05fd040d, 0x04000000 }; -u32 ai_14[] = { 0xad202d3e, 0x54524545, 0x440a0002, 0x03150021, 0x00002b46, 0x07022b02, 0x09034c01, 0x2c074607, 0x3c2b0109, 0x022b1600, 0x0100002b, 0x022b020a, 0x0346072f, 0x2b010a02, 0x2b010302, 0x0705fd04, 0x0d040000 }; -u32 ai_25[] = { 0x020303f1, 0x2b010302, 0x2beb53ec, 0xd700da02, 0x0903dc2b, 0x0109022b, 0xddeae413, 0xed030303, 0xd50b0001, 0x0000a1f8, 0x00000400, 0xd9f800bb, 0x2b022b05, 0xf8041023, 0x05230623, 0x07230823, 0x09230a23, 0x0b230c23, 0x0d230e23, 0x0f231023, 0x11231203, 0xdb020a03, 0x52000a00, 0x582b010a, 0x022bbd0c, 0xff00bb04, 0x11000000, 0x102bad53, 0x210a0002, 0x2b05fd00, 0x01025305, 0xfd000104 }; -u32 ai_15[] = { 0x1e00be02, 0x09030109, 0x02070301, 0x07040000 }; -u32 ai_16[] = { 0xad532d3e, 0x500a001c, 0x00580209, 0x032f2b01, 0x09022b17, 0x00010000, 0x2b022b03, 0xda020a03, 0xdc2b010a, 0x022bd50c, 0x00020000, 0xdb03c400, 0x36ffae02, 0x030a00a3, 0x00aa0128, 0x0010b400, 0x02583502, 0x0b032f2b, 0x010b022b, 0xc40036ff, 0x01030235, 0xda020c03, 0xdc2b010c, 0x022bd205, 0xfd000104 }; +u8 ai_0[] = { + guard_set_armour(0x2c01) + guard_set_health_total(0x2800) + guard_set_speed_rating(0x64) + guard_set_accuracy_rating(0x64) + guard_set_argh_rating(0x64) + guard_flags_set_on(0x00020000) + label(0x09) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2b) + goto_first(0x09) + label(0x2b) + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_1[] = { + guard_flags_set_on(0x00080000) + guard_flags_set_on(0x00020000) + guard_flags_set_on(0x10000000) + if_objective_bitfield_is_set_on(0x00080000, 0x41) + if_objective_bitfield_is_set_on(0x00040000, 0x40) + label(0x3f) + guard_set_armour(0xc800) + guard_set_health_total(0xc800) + guard_set_speed_rating(0x32) + guard_set_accuracy_rating(0x32) + guard_set_argh_rating(0x32) + guard_set_chr_num(0x14) + label(0x2b) + guard_try_spawning_item(0xcd00, 0x06, 0x00200080, 0x2b) + label(0x2b) + guard_try_spawning_item(0xcd00, 0x06, 0x00200090, 0x07) + label(0x40) + guard_set_armour(0xe803) + guard_set_health_total(0xf401) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_set_argh_rating(0x50) + guard_set_chr_num(0x15) + objective_bitfield_set_on(0x00100000) + label(0x2b) + guard_try_spawning_item(0xcd00, 0x09, 0x00200080, 0x2b) + label(0x2b) + guard_try_spawning_item(0xcd00, 0x09, 0x00200090, 0x07) + label(0x41) + guard_set_armour(0xb80b) + guard_set_health_total(0xf401) + guard_set_speed_rating(0x64) + guard_set_accuracy_rating(0x64) + guard_set_argh_rating(0x64) + guard_set_chr_num(0x16) + objective_bitfield_set_on(0x00200000) + label(0x2b) + guard_try_spawning_item(0xcd00, 0x16, 0x00200080, 0x2b) + label(0x2b) + guard_try_spawning_item(0xcd00, 0x16, 0x00200090, 0x07) + label(0x07) + guard_try_facing_target(0x0100, 0x0000, 0x2b) + label(0x2b) + local_timer_reset_start + label(0x05) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2b) + goto_first(0x05) + label(0x2b) + guard_flags_set_off(0x10000000) + label(0x09) + ai_sleep + if_guard_is_targeted_by_bond(0x2b) + if_guard_and_bond_within_line_of_sight(0x2b) + goto_first(0x09) + label(0x2b) + sfx_play(0x3600, 0xff) + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_24[] = { + label(0x09) + ai_sleep + if_chr_does_not_exist(0x14, 0x2b) + goto_first(0x09) + label(0x2b) + objective_bitfield_set_on(0x00040000) + chr_try_spawning_at_pad(0x0c, 0xff, 0xba00, 0x0204, 0x10000000, 0x2b) + label(0x2b) + object_flags_1_set_off(0x06, 0x00000200) + object_destroy(0x06) + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00100000, 0x2b) + goto_first(0x05) + label(0x2b) + sfx_play(0x3600, 0xff) + label(0x0a) + ai_sleep + if_chr_does_not_exist(0x15, 0x2b) + goto_first(0x0a) + label(0x2b) + objective_bitfield_set_on(0x00080000) + chr_try_spawning_at_pad(0x0c, 0xff, 0x9200, 0x0204, 0x10000000, 0x2b) + label(0x2b) + object_flags_1_set_off(0x07, 0x00000200) + object_destroy(0x07) + label(0x06) + ai_sleep + debug_log 'B', '?', '\0', + if_objective_bitfield_is_set_on(0x00200000, 0x2b) + goto_first(0x06) + label(0x2b) + debug_log 'B', '3', '\0', + gas_leak_and_fade_fog + local_timer_reset_start + label(0x0c) + ai_sleep + if_local_timer_greater_than(0x780000, 0x2b) + goto_first(0x0c) + label(0x2b) + sfx_play(0x3600, 0xff) + label(0x0d) + ai_sleep + if_chr_does_not_exist(0x16, 0x2b) + goto_first(0x0d) + label(0x2b) + objective_bitfield_set_on(0x00400000) + label(0x0e) + ai_sleep + goto_first(0x0e) + ai_list_end +}; +u8 ai_2[] = { + debug_log 'X', ' ', '-', ' ', 'm', 'a', '\0', + label(0x03) + ai_sleep + set_return_ai_list(0x0304) + random_generate_seed + if_random_seed_greater_than(0x80, 0x35) + if_guard_is_targeted_by_bond(0x51) + label(0x35) + if_guard_and_bond_within_line_of_sight(0x3c) + label(0x30) + jump_to_ai_list(0xfd, 0x0504) + label(0x51) + jump_to_ai_list(0xfd, 0x0604) + label(0x3c) + jump_to_ai_list(0xfd, 0x0404) + ai_list_end +}; +u8 ai_3[] = { + debug_log 'X', ' ', '-', ' ', 'a', 't', '\0', + label(0x03) + random_generate_seed + if_random_seed_greater_than(0x80, 0x2b) + if_guard_is_targeted_by_bond(0x51) + if_bond_health_less_than(0x3f, 0x3c) + random_generate_seed + label(0x2b) + if_random_seed_greater_than(0x28, 0x2b) + guard_try_firing_roll(0x07) + label(0x2b) + if_random_seed_greater_than(0x50, 0x2b) + guard_try_firing_walk(0x07) + label(0x2b) + if_random_seed_greater_than(0x78, 0x2b) + label(0x3c) + guard_try_firing_run(0x07) + label(0x2b) + if_random_seed_greater_than(0xa0, 0x2b) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x07) + label(0x2b) + if_random_seed_greater_than(0xc8, 0x2b) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x07) + label(0x2b) + if_random_seed_greater_than(0xe1, 0x2b) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x2b) + label(0x2b) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x2b) + label(0x2b) + ai_sleep + ai_sleep + ai_sleep + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x07) + label(0x07) + ai_sleep + if_guard_has_stopped_moving(0x2b) + goto_first(0x07) + label(0x2b) + jump_to_ai_list(0xfd, 0x0304) + label(0x51) + set_return_ai_list(0x0404) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_5[] = { + debug_log 'X', ' ', '-', ' ', 'e', 'v', '\0', + label(0x03) + ai_sleep + random_generate_seed + label(0x2b) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2b) + guard_try_hopping_sideways(0x07) + label(0x2b) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2b) + guard_try_sidestepping(0x07) + label(0x2b) + random_generate_seed + if_random_seed_greater_than(0xb4, 0x2b) + guard_try_running_to_side(0x07) + label(0x2b) + guard_play_animation(0x0b00, 0x1400, 0x3c00, 0x00, 0x10) + goto_next(0x07) + label(0x07) + ai_sleep + if_guard_has_stopped_moving(0x2b) + goto_first(0x07) + label(0x2b) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_4[] = { + debug_log 'X', ' ', '-', ' ', 'g', 'o', '\0', + label(0x03) + guard_try_running_to_bond_position(0x2b) + label(0x2b) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x07) + if_guard_and_bond_within_line_of_sight(0x07) + if_guard_is_targeted_by_bond(0x51) + goto_first(0x09) + label(0x51) + set_return_ai_list(0x0504) + jump_to_ai_list(0xfd, 0x0604) + label(0x07) + set_return_ai_list(0x0304) + jump_to_ai_list(0xfd, 0x0304) + ai_list_end + label(0x07) + ai_sleep + goto_first(0x07) + ai_list_end +}; +u8 ai_17[] = { + label(0x03) + door_close(0x03) + door_close(0x00) + door_open(0x01) + object_flags_1_set_on(0x04, 0x00004000) + object_flags_1_set_on(0x04, 0x00001000) + object_flags_1_set_on(0x05, 0x00004000) + object_flags_1_set_on(0x05, 0x00001000) + label(0x05) + ai_sleep + if_bond_in_room_with_pad(0x9700, 0x2b) + goto_first(0x05) + label(0x2b) + door_close(0x02) + door_close(0x01) + label(0x09) + ai_sleep + if_bond_distance_to_pad_less_than(0x0900, 0x9700, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0x9800, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0x9900, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0x9a00, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0x9b00, 0x2b) + ai_sleep + if_bond_distance_to_pad_less_than(0x0900, 0x9c00, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0x9d00, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0x9e00, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0x9f00, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xa000, 0x2b) + ai_sleep + if_bond_distance_to_pad_less_than(0x0900, 0xa100, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xa200, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xa300, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xa400, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xa500, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xa700, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xa800, 0x2b) + ai_sleep + if_bond_distance_to_pad_less_than(0x0900, 0xa900, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xaa00, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xab00, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xac00, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xad00, 0x2b) + if_bond_distance_to_pad_less_than(0x0900, 0xae00, 0x2b) + if_bond_distance_to_pad_less_than(0x0a00, 0xa600, 0x2c) + goto_first(0x09) + label(0x2b) + door_open(0x00) + goto_next(0x0a) + label(0x2c) + door_open(0x01) + label(0x0b) + ai_sleep + if_door_state_equal(0x01, 0x0e, 0x2b) + goto_first(0x0b) + label(0x2b) + object_flags_1_set_off(0x04, 0x00001000) + object_flags_1_set_off(0x05, 0x00001000) + label(0x0a) + ai_sleep + if_bond_in_room_with_pad(0x4500, 0x2b) + goto_first(0x0a) + label(0x2b) + goto_first(0x03) + ai_list_end +}; +u8 ai_23[] = { + objective_bitfield_set_on(0x00010000) + label(0x05) + ai_sleep + if_bond_in_room_with_pad(0x9100, 0x52) + ai_sleep + objective_bitfield_set_on(0x00010000) + objective_bitfield_set_off(0x00020000) + ai_sleep + if_bond_in_room_with_pad(0x0100, 0x3f) + if_bond_in_room_with_pad(0x7200, 0x40) + if_bond_in_room_with_pad(0x1500, 0x41) + if_bond_in_room_with_pad(0x6800, 0x42) + if_bond_in_room_with_pad(0x3000, 0x43) + ai_sleep + if_bond_in_room_with_pad(0x6400, 0x44) + if_bond_in_room_with_pad(0x5600, 0x45) + if_bond_in_room_with_pad(0x5800, 0x46) + if_bond_in_room_with_pad(0x5f00, 0x47) + if_bond_in_room_with_pad(0x5000, 0x48) + if_bond_in_room_with_pad(0x5e00, 0x49) + if_bond_in_room_with_pad(0x4300, 0x4a) + goto_first(0x05) + label(0x3f) + ai_sleep + chr_set_pad_preset(0x00, 0x1500) + chr_set_pad_preset(0x01, 0x1a00) + chr_set_pad_preset(0x02, 0x5a00) + chr_set_pad_preset(0x03, 0x8c00) + chr_set_pad_preset(0x04, 0x8900) + goto_first(0x05) + label(0x40) + ai_sleep + chr_set_pad_preset(0x00, 0x6c00) + chr_set_pad_preset(0x01, 0x7000) + chr_set_pad_preset(0x02, 0x5000) + chr_set_pad_preset(0x03, 0x4f00) + chr_set_pad_preset(0x04, 0x6700) + goto_first(0x05) + label(0x41) + ai_sleep + chr_set_pad_preset(0x00, 0x8d00) + chr_set_pad_preset(0x01, 0x3000) + chr_set_pad_preset(0x02, 0x2f00) + chr_set_pad_preset(0x03, 0x5800) + chr_set_pad_preset(0x04, 0x8b00) + goto_first(0x05) + label(0x42) + ai_sleep + chr_set_pad_preset(0x00, 0x6500) + chr_set_pad_preset(0x01, 0x6600) + chr_set_pad_preset(0x02, 0x7200) + chr_set_pad_preset(0x03, 0x7900) + chr_set_pad_preset(0x04, 0x6100) + goto_first(0x05) + label(0x43) + ai_sleep + chr_set_pad_preset(0x00, 0x8d00) + chr_set_pad_preset(0x01, 0x0b00) + chr_set_pad_preset(0x02, 0x1500) + chr_set_pad_preset(0x03, 0x5500) + chr_set_pad_preset(0x04, 0x4000) + goto_first(0x05) + label(0x44) + ai_sleep + chr_set_pad_preset(0x00, 0x7100) + chr_set_pad_preset(0x01, 0x7000) + chr_set_pad_preset(0x02, 0x5f00) + chr_set_pad_preset(0x03, 0x5e00) + chr_set_pad_preset(0x04, 0x7200) + goto_first(0x05) + label(0x45) + ai_sleep + chr_set_pad_preset(0x00, 0x8d00) + chr_set_pad_preset(0x01, 0x5000) + chr_set_pad_preset(0x02, 0x4700) + chr_set_pad_preset(0x03, 0x2700) + chr_set_pad_preset(0x04, 0x3000) + goto_first(0x05) + label(0x46) + ai_sleep + chr_set_pad_preset(0x00, 0x1500) + chr_set_pad_preset(0x01, 0x1a00) + chr_set_pad_preset(0x02, 0x8c00) + chr_set_pad_preset(0x03, 0x8b00) + chr_set_pad_preset(0x04, 0x5000) + goto_first(0x05) + label(0x47) + ai_sleep + chr_set_pad_preset(0x00, 0x6100) + chr_set_pad_preset(0x01, 0x6300) + chr_set_pad_preset(0x02, 0x2f00) + chr_set_pad_preset(0x03, 0x3b00) + chr_set_pad_preset(0x04, 0x9100) + goto_first(0x05) + label(0x48) + ai_sleep + chr_set_pad_preset(0x00, 0x7200) + chr_set_pad_preset(0x01, 0x8900) + chr_set_pad_preset(0x02, 0x8a00) + chr_set_pad_preset(0x03, 0x2a00) + chr_set_pad_preset(0x04, 0x4200) + goto_first(0x05) + label(0x49) + ai_sleep + chr_set_pad_preset(0x00, 0x0e00) + chr_set_pad_preset(0x01, 0x4000) + chr_set_pad_preset(0x02, 0x4300) + chr_set_pad_preset(0x03, 0x8b00) + chr_set_pad_preset(0x04, 0x8a00) + goto_first(0x05) + label(0x4a) + ai_sleep + chr_set_pad_preset(0x00, 0x2700) + chr_set_pad_preset(0x01, 0x3b00) + chr_set_pad_preset(0x02, 0x4700) + chr_set_pad_preset(0x03, 0x4800) + chr_set_pad_preset(0x04, 0x5500) + goto_first(0x05) + label(0x52) + objective_bitfield_set_on(0x00020000) + objective_bitfield_set_off(0x00010000) + goto_first(0x05) + ai_list_end +}; +u8 ai_18[] = { + guard_set_chr_num(0x00) + local_timer_reset_start + label(0x4b) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4b) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x0a) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x600900, 0x2b) + goto_first(0x09) + label(0x2b) + if_chr_does_not_exist(0x05, 0x2b) + goto_first(0x03) + label(0x2b) + debug_log 's', 'p', 'a', 'w', 'n', '1', '\0', + if_bond_damage_and_pickups_disabled(0x35) + chr_try_spawning_at_pad(0x03, 0xff, 0x2823, 0x0704, 0x00000000, 0x07) + label(0x35) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x07) + debug_log 's', '1', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x0a) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2b) + goto_first(0x0a) + label(0x2b) + goto_first(0x03) + ai_list_end +}; +u8 ai_19[] = { + guard_set_chr_num(0x01) + local_timer_reset_start + label(0x4b) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4b) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x0a) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x600900, 0x2b) + goto_first(0x09) + label(0x2b) + if_chr_does_not_exist(0x06, 0x2b) + goto_first(0x03) + label(0x2b) + debug_log 's', 'p', 'a', 'w', 'n', '2', '\0', + if_bond_damage_and_pickups_disabled(0x35) + chr_try_spawning_at_pad(0x03, 0xff, 0x2823, 0x0804, 0x00000000, 0x07) + label(0x35) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x07) + debug_log 's', '2', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x0a) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2b) + goto_first(0x0a) + label(0x2b) + goto_first(0x03) + ai_list_end +}; +u8 ai_20[] = { + guard_set_chr_num(0x02) + local_timer_reset_start + label(0x4b) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4b) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x0a) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0xb80b00, 0x2b) + goto_first(0x09) + label(0x2b) + if_chr_does_not_exist(0x07, 0x2b) + goto_first(0x03) + label(0x2b) + debug_log 's', 'p', 'a', 'w', 'n', '3', '\0', + if_bond_damage_and_pickups_disabled(0x35) + chr_try_spawning_at_pad(0x03, 0xff, 0x2823, 0x0904, 0x00000000, 0x07) + label(0x35) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x07) + debug_log 's', '3', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x0a) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2b) + goto_first(0x0a) + label(0x2b) + goto_first(0x03) + ai_list_end +}; +u8 ai_21[] = { + guard_set_chr_num(0x03) + local_timer_reset_start + label(0x4b) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4b) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x0a) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0xb80b00, 0x2b) + goto_first(0x09) + label(0x2b) + if_chr_does_not_exist(0x08, 0x2b) + goto_first(0x03) + label(0x2b) + debug_log 's', 'p', 'a', 'w', 'n', '4', '\0', + if_bond_damage_and_pickups_disabled(0x35) + chr_try_spawning_at_pad(0x03, 0xff, 0x2823, 0x0a04, 0x00000000, 0x07) + label(0x35) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x07) + debug_log 's', '4', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x0a) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2b) + goto_first(0x0a) + label(0x2b) + goto_first(0x03) + ai_list_end +}; +u8 ai_22[] = { + guard_set_chr_num(0x04) + local_timer_reset_start + label(0x4b) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4b) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x0a) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x100e00, 0x2b) + goto_first(0x09) + label(0x2b) + if_chr_does_not_exist(0x09, 0x2b) + goto_first(0x03) + label(0x2b) + debug_log 's', 'p', 'a', 'w', 'n', '5', '\0', + if_bond_damage_and_pickups_disabled(0x35) + chr_try_spawning_at_pad(0x03, 0xff, 0x2823, 0x0b04, 0x00000000, 0x07) + label(0x35) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x07) + debug_log 's', '5', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x0a) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2b) + goto_first(0x0a) + label(0x2b) + goto_first(0x03) + ai_list_end +}; +u8 ai_6[] = { + guard_set_chr_num(0x05) + debug_log 'd', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0c04) + ai_list_end +}; +u8 ai_7[] = { + guard_set_chr_num(0x06) + debug_log 'd', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0c04) + ai_list_end +}; +u8 ai_8[] = { + guard_set_chr_num(0x07) + debug_log 'd', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0c04) + ai_list_end +}; +u8 ai_9[] = { + guard_set_chr_num(0x08) + debug_log 'd', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x0c04) + ai_list_end +}; +u8 ai_10[] = { + guard_set_chr_num(0x09) + debug_log 'd', '5', '\n', '\0', + jump_to_ai_list(0xfd, 0x0c04) + ai_list_end +}; +u8 ai_11[] = { + if_mission_time_greater_than(0x8403, 0x42) + if_mission_time_greater_than(0x5802, 0x41) + if_mission_time_greater_than(0x2c01, 0x40) + if_mission_time_greater_than(0x7800, 0x3f) + label(0x3f) + guard_set_speed_rating(0x14) + guard_set_accuracy_rating(0x14) + goto_next(0x2b) + label(0x40) + guard_set_speed_rating(0x28) + guard_set_accuracy_rating(0x28) + goto_next(0x2b) + label(0x41) + guard_set_speed_rating(0x3c) + guard_set_accuracy_rating(0x3c) + goto_next(0x2b) + label(0x42) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + goto_next(0x2b) + label(0x2b) + random_generate_seed + if_random_seed_greater_than(0xa0, 0x38) + if_random_seed_greater_than(0x50, 0x35) + guard_set_health_total(0x2800) + guard_set_armour(0x0000) + guard_set_grenade_probability(0xe5) + guard_try_spawning_item(0xc300, 0x09, 0x00000000, 0x2b) + label(0x2b) + goto_next(0x07) + label(0x35) + guard_set_health_total(0x2800) + guard_set_armour(0x0a00) + guard_set_grenade_probability(0xcc) + guard_try_spawning_item(0xc300, 0x09, 0x00000000, 0x2b) + label(0x2b) + label(0x2b) + goto_next(0x07) + label(0x38) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + label(0x2b) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x2b) + label(0x2b) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x07) + label(0x07) + jump_to_ai_list(0xfd, 0x0d04) + ai_list_end +}; +u8 ai_12[] = { + label(0x39) + if_objective_bitfield_is_set_on(0x00020000, 0x08) + if_guard_distance_to_bond_greater_than(0x9001, 0x35) + guard_try_running_to_bond_position(0x09) + label(0x35) + guard_try_sprinting_to_bond_position(0x09) + label(0x09) + ai_sleep + if_guard_distance_to_bond_greater_than(0xc800, 0x35) + if_guard_and_bond_within_line_of_sight(0x3a) + label(0x35) + if_guard_has_stopped_moving(0x3b) + goto_first(0x09) + label(0x3a) + if_guard_and_bond_within_line_of_sight(0x2b) + goto_next(0x07) + label(0x3b) + ai_sleep + goto_first(0x39) + label(0x2b) + label(0x3c) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x2b) + guard_try_throwing_grenade(0x07) + label(0x2b) + if_random_seed_greater_than(0x32, 0x2b) + guard_try_sidestepping(0x07) + label(0x2b) + if_random_seed_greater_than(0x3c, 0x2b) + guard_try_firing_roll(0x07) + label(0x2b) + if_random_seed_greater_than(0x50, 0x2b) + guard_try_firing_roll(0x07) + label(0x2b) + if_random_seed_greater_than(0x64, 0x2b) + guard_try_firing_walk(0x07) + label(0x2b) + if_random_seed_greater_than(0x96, 0x2b) + guard_try_firing_run(0x07) + label(0x2b) + if_random_seed_greater_than(0xc8, 0x2b) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x07) + label(0x2b) + if_random_seed_greater_than(0xfa, 0x08) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x07) + label(0x07) + ai_sleep + if_guard_has_stopped_moving(0x2b) + goto_first(0x07) + label(0x2b) + if_guard_and_bond_within_line_of_sight(0x2b) + goto_next(0x09) + label(0x09) + ai_sleep + goto_first(0x39) + label(0x2b) + ai_sleep + goto_first(0x3c) + label(0x08) + jump_to_ai_list(0xfd, 0x0e04) + ai_list_end +}; +u8 ai_13[] = { + debug_log ' ', '-', '>', 'C', 'O', 'V', 'E', 'R', '\n', '\0', + guard_try_running_to_bond_position(0x09) + label(0x09) + ai_sleep + if_guard_shot_from_bond_missed(0x08) + if_guard_distance_to_bond_less_than(0xc800, 0x07) + goto_first(0x09) + label(0x07) + jump_to_ai_list(0xfd, 0x0f04) + label(0x08) + jump_to_ai_list(0xfd, 0x0d04) + ai_list_end +}; +u8 ai_14[] = { + debug_log ' ', '-', '>', 'T', 'R', 'E', 'E', 'D', '\n', '\0', + label(0x03) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x2b) + if_guard_shot_from_bond_missed(0x07) + label(0x2b) + label(0x09) + ai_sleep + if_guard_distance_to_bond_greater_than(0x2c01, 0x07) + if_guard_shot_from_bond_missed(0x07) + if_guard_and_bond_within_line_of_sight(0x2b) + goto_first(0x09) + label(0x2b) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x2b) + label(0x2b) + label(0x0a) + ai_sleep + if_guard_shot_from_bond_missed(0x07) + if_guard_has_stopped_moving(0x2b) + goto_first(0x0a) + label(0x2b) + goto_first(0x03) + label(0x07) + jump_to_ai_list(0xfd, 0x0d04) + ai_list_end +}; +u8 ai_25[] = { + label(0x03) + ai_sleep + if_objective_all_completed(0x2b) + goto_first(0x03) + label(0x2b) + if_bond_is_dead(0x53) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x09) + ai_sleep + if_screen_fade_completed(0x2b) + goto_first(0x09) + label(0x2b) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_equip_item_cinema(0x13) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x0b, 0x0100, 0x0000) + chr_flags_set_off(0xf8, 0x00040000) + chr_try_teleporting_to_pad(0xf8, 0xbb00, 0x2b) + label(0x2b) + jump_to_ai_list(0xf8, 0x1004) + chr_remove_instant(0x05) + chr_remove_instant(0x06) + chr_remove_instant(0x07) + chr_remove_instant(0x08) + chr_remove_instant(0x09) + chr_remove_instant(0x0a) + chr_remove_instant(0x0b) + chr_remove_instant(0x0c) + chr_remove_instant(0x0d) + chr_remove_instant(0x0e) + chr_remove_instant(0x0f) + chr_remove_instant(0x10) + chr_remove_instant(0x11) + chr_remove_instant(0x12) + ai_sleep + screen_fade_from_black + label(0x0a) + ai_sleep + if_bond_distance_to_pad_less_than(0x0a00, 0x5800, 0x2b) + goto_first(0x0a) + label(0x2b) + chr_try_spawning_at_pad(0x0c, 0xff, 0xbb00, 0x1104, 0x10000000, 0x2b) + debug_log 'S', '!', '\n', '\0', + label(0x2b) + jump_to_ai_list(0xfd, 0x0100) + label(0x53) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_15[] = { + guard_walks_to_pad(0xbe00) + label(0x09) + ai_sleep + goto_first(0x09) + label(0x07) + ai_sleep + goto_first(0x07) + ai_list_end +}; +u8 ai_16[] = { + debug_log 'S', '-', '>', 'P', '\n', '\0', + guard_runs_to_pad(0x5800) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x2b) + goto_first(0x09) + label(0x2b) + guard_try_facing_target(0x0100, 0x0000, 0x2b) + label(0x2b) + ai_sleep + screen_fade_to_black + label(0x0a) + ai_sleep + if_screen_fade_completed(0x2b) + goto_first(0x0a) + label(0x2b) + camera_switch(0x0c, 0x0200, 0x0000) + screen_fade_from_black + ai_sleep + sfx_play(0x3600, 0xff) + local_timer_reset_start + label(0x03) + guard_play_animation(0xa300, 0xaa00, 0x2801, 0x00, 0x10) + if_local_timer_greater_than(0x580200, 0x35) + label(0x0b) + ai_sleep + if_guard_has_stopped_moving(0x2b) + goto_first(0x0b) + label(0x2b) + sfx_play(0x3600, 0xff) + goto_first(0x03) + label(0x35) + screen_fade_to_black + label(0x0c) + ai_sleep + if_screen_fade_completed(0x2b) + goto_first(0x0c) + label(0x2b) + exit_level + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/UsetupdamZ.c b/assets/obseg/setup/UsetupdamZ.c index bcbf1762..03c035a5 100644 --- a/assets/obseg/setup/UsetupdamZ.c +++ b/assets/obseg/setup/UsetupdamZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1989,34 +1990,676 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x200005fd, 0x00070400 }; -u32 ai_1[] = { 0x200105fd, 0x00070400 }; -u32 ai_2[] = { 0x200205fd, 0x00070400 }; -u32 ai_3[] = { 0x200305fd, 0x00070400 }; -u32 ai_4[] = { 0x200405fd, 0x00070400 }; -u32 ai_5[] = { 0x200505fd, 0x00070400 }; -u32 ai_6[] = { 0x200605fd, 0x00070400 }; -u32 ai_9[] = { 0xad627272, 0x6d206272, 0x726d0a00, 0xcb07cc02, 0x00007802, 0x00030100, 0x04000000 }; -u32 ai_11[] = { 0x8f002890, 0x00140200, 0x0346073a, 0x073b0732, 0x073c0701, 0x00020733, 0x35e60b35, 0x6e071400, 0x0100000a, 0x02071500, 0x0100000a, 0x020a032f, 0x04010a02, 0x04010002, 0x0b060002, 0x05fd0008, 0x04000000 }; -u32 ai_12[] = { 0x8f002890, 0x0014a0fd, 0x00000020, 0x02000346, 0x073a073b, 0x0732073c, 0x07010002, 0x073335c8, 0x07140001, 0x00000a02, 0x071a0a02, 0x0a032f04, 0x010a0204, 0x01000400 }; -u32 ai_7[] = { 0x86000000, 0x0203ae02, 0x00033c09, 0x46093a09, 0x96800701, 0x000207b3, 0x00012c08, 0x87058a08, 0x00100208, 0x01000209, 0x33020735, 0x32070e04, 0x02073564, 0x07110402, 0x07359607, 0x12040207, 0x35c80714, 0x00010000, 0x04020715, 0x00010000, 0x04020402, 0x07020b03, 0x3c29000a, 0x02292f07, 0x010b0207, 0x0109020a, 0x03020c4d, 0xfd00c823, 0x2800020d, 0x87058a07, 0x00100207, 0x94800200, 0x3335c807, 0x020eae28, 0x0f020f03, 0x2f07b400, 0x00780701, 0x0f020786, 0x00010002, 0x10ad676f, 0x696e670a, 0x0095801d, 0x0211032f, 0x07011102, 0x07ad686f, 0x6d650a00, 0x010e0400 }; -u32 ai_8[] = { 0xae020003, 0x3c2cb400, 0x00b42d01, 0x00022d03, 0x33359607, 0x52001e23, 0x282c0207, 0x0335dc07, 0x52003223, 0x282c0207, 0x0335f507, 0x52004b23, 0x282c0207, 0x0335fa07, 0x52006423, 0x282c0207, 0x035200c8, 0x23282cae, 0x0100022c, 0x0305fd00, 0x08040000 }; -u32 ai_23[] = { 0x0200035c, 0x080a5c09, 0x0b010002, 0x0a680808, 0x29010002, 0x2968090e, 0x29010002, 0x29c22c10, 0x0100020b, 0x68090829, 0x01000229, 0x68080e29, 0x01000229, 0xc22c0f01, 0x00040000 }; -u32 ai_26[] = { 0x002f0233, 0x03680804, 0x32013302, 0x36036808, 0x01306808, 0x08310136, 0x02340368, 0x08083101, 0x34023503, 0x6808022f, 0x68080432, 0x0135022f, 0xd00f0030, 0xd00f0132, 0xd0100030, 0xd0100132, 0x01330232, 0xd00f002e, 0xd00f0130, 0xd010002e, 0xd0100130, 0x01360230, 0xd00f0031, 0xd00f0130, 0xd0100031, 0xd0100130, 0x01340231, 0xd00f0030, 0xd00f012f, 0xd0100030, 0xd010012f, 0x01350400 }; -u32 ai_27[] = { 0x00300233, 0x03680904, 0x32013302, 0x36036809, 0x01306809, 0x08310136, 0x02340368, 0x09083101, 0x34023503, 0x6809022f, 0x68090432, 0x0135022f, 0xd0110030, 0xd0110132, 0xd0120030, 0xd0120132, 0x01330232, 0xd011002e, 0xd0110130, 0xd012002e, 0xd0120130, 0x01360230, 0xd0110031, 0xd0110130, 0xd0120031, 0xd0120130, 0x01340231, 0xd0110030, 0xd011012f, 0xd0120030, 0xd012012f, 0x01350400 }; -u32 ai_20[] = { 0x022a039c, 0x00000400, 0x045b0507, 0x000c0207, 0x5b040700, 0x0c02079c, 0x00000100, 0x079c0000, 0x20000758, 0x2f050a57, 0x2f0d0207, 0x012a020a, 0x9a000001, 0x00c32c08, 0xc400e300, 0xc5000500, 0x00012a02, 0x0d9a0000, 0x2000c32c, 0x21012a02, 0x07020bc3, 0x2c0e9a00, 0x00020000, 0x04020cc3, 0x2c0e9a00, 0x0008009a, 0x00000200, 0x00040204, 0x03010404 }; -u32 ai_21[] = { 0x022a039c, 0x00000100, 0x2b5b0607, 0x5b070700, 0x0b02075c, 0x06075c07, 0x07012a02, 0x07c32c0d, 0x012a022b, 0x035b0607, 0x5b070700, 0x0b02075c, 0x06075c07, 0x07012b02, 0x079c0000, 0x020004ae, 0xb7000ab9, 0xb5c32c09, 0x020a035b, 0x06075b07, 0x07000c02, 0x07b40000, 0x3c08bb00, 0x0107010a, 0x0208c400, 0xbd01c501, 0x060000ae, 0x010a0207, 0xb6b8c32c, 0x0a9a0000, 0x04000004, 0x020cc32c, 0x0b9a0000, 0x0200b6b8, 0x0004020b, 0xc32c0c9a, 0x00000200, 0x00040204, 0x03010404 }; -u32 ai_10[] = { 0xcd026c1c, 0x20020003, 0x01000400 }; -u32 ai_13[] = { 0x022a0301, 0x2a040000 }; -u32 ai_22[] = { 0x02000337, 0x07010002, 0x07f307bd, 0x25ff0074, 0x040f0000, 0x00000702, 0x0703f307, 0xbd25ff00, 0x74040f00, 0x00000007, 0x02070207, 0x020a0301, 0x0a040000 }; -u32 ai_14[] = { 0x9000148f, 0x0028bf00, 0xb8080000, 0x00000702, 0x07020406, 0x000205fd, 0x00080400 }; -u32 ai_15[] = { 0x9000148f, 0x00280200, 0x0339043a, 0x043c0437, 0x04010002, 0x04060002, 0x05fd0008, 0x04000000 }; -u32 ai_16[] = { 0xae020a03, 0xb4000168, 0x07010a02, 0x070a0063, 0xffff0060, 0x04100204, 0x03010404 }; -u32 ai_25[] = { 0x020a03cf, 0x07010a02, 0x0705f804, 0x11020403, 0x01040400 }; -u32 ai_17[] = { 0xad776865, 0x650a00d9, 0xfd014b07, 0x02079d00, 0x002000db, 0xf400ffff, 0x0a00b1ff, 0xff000324, 0x10ae0210, 0x039d0000, 0x1000b400, 0x003c0701, 0x1002070a, 0x00b10003, 0x005a0410, 0xae020a03, 0xb4000064, 0x07010a02, 0x07da020b, 0x03dc0701, 0x0b0207d5, 0x0b000100, 0x009e0000, 0x1000d9fd, 0x014b0702, 0x07db0a00, 0xb10050ff, 0xff0410ae, 0x020c039d, 0x00001000, 0xb400012c, 0x07010c02, 0x07da020d, 0x03dc0701, 0x0d0207d5, 0x0c000100, 0x009e0000, 0x1000d9fd, 0x014b0702, 0x07db0a00, 0xb10050ff, 0xff0410ae, 0x020e039d, 0x00001000, 0xb40001c2, 0x07010e02, 0x07da020f, 0x03dc0701, 0x0f020702, 0x04d20301, 0x04040000 }; -u32 ai_19[] = { 0x1e000402, 0x0a032f07, 0x010a0207, 0x05fd0408, 0x04000000 }; -u32 ai_18[] = { 0xae020003, 0xb4000078, 0x07010002, 0x070a00ac, 0x00000045, 0x0010020a, 0x032f0701, 0x0a020767, 0x081e0005, 0x020b032f, 0x07010b02, 0x07170001, 0x00000702, 0x0705fd04, 0x0c040000 }; -u32 ai_24[] = { 0x020303eb, 0x2e55014a, 0x07010302, 0x079a0000, 0x1000ecd7, 0x00e300e5, 0x0004ae02, 0x0a03d6bd, 0x9807b400, 0x015e0701, 0x0a0207da, 0x020b03dc, 0x07010b02, 0x07f10705, 0xfd000f02, 0x07ddeaed, 0x030303d5, 0x0a000100, 0x0005f804, 0x1205fd00, 0x01022e05, 0xfd000104 }; +u8 ai_0[] = { + guard_start_patrol(0x00) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x01) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_2[] = { + guard_start_patrol(0x02) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_3[] = { + guard_start_patrol(0x03) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_4[] = { + guard_start_patrol(0x04) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_5[] = { + guard_start_patrol(0x05) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_6[] = { + guard_start_patrol(0x06) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_9[] = { + debug_log 'b', 'r', 'r', 'm', ' ', 'b', 'r', 'r', 'm', '\n', '\0', + vehicle_start_path(0x07) + vehicle_speed(0x0002, 0x7800) + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_11[] = { + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x07) + if_guard_see_another_guard_shot(0x07) + if_guard_see_another_guard_die(0x07) + if_guard_sees_bond(0x07) + if_guard_and_bond_within_line_of_sight(0x07) + goto_first(0x00) + label(0x07) + random_generate_seed + if_random_seed_greater_than(0xe6, 0x0b) + if_random_seed_greater_than(0x6e, 0x07) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x0a) + label(0x07) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x0a) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x04) + goto_first(0x0a) + label(0x04) + goto_first(0x00) + label(0x0b) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + ai_list_end +}; +u8 ai_12[] = { + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + chr_flags_set_on(0xfd, 0x20000000) + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x07) + if_guard_see_another_guard_shot(0x07) + if_guard_see_another_guard_die(0x07) + if_guard_sees_bond(0x07) + if_guard_and_bond_within_line_of_sight(0x07) + goto_first(0x00) + label(0x07) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x07) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x0a) + label(0x07) + guard_try_throwing_grenade(0x0a) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x04) + goto_first(0x0a) + label(0x04) + goto_first(0x00) + ai_list_end +}; +u8 ai_7[] = { + local_byte_2_set(0x00) + goto_next(0x00) + label(0x03) + local_timer_reset_start + label(0x00) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x09) + if_guard_shot_from_bond_missed(0x09) + if_guard_see_another_guard_shot(0x09) + if_guard_bitfield_is_set_on(0x80, 0x07) + goto_first(0x00) + label(0x07) + if_local_timer_less_than(0x2c0100, 0x08) + local_byte_2_add(0x05) + if_local_byte_2_less_than_random_seed(0x08) + goto_next(0x10) + label(0x08) + goto_first(0x00) + label(0x09) + random_generate_seed + label(0x07) + if_random_seed_greater_than(0x32, 0x07) + guard_try_sidestepping(0x04) + label(0x07) + if_random_seed_greater_than(0x64, 0x07) + guard_try_firing_walk(0x04) + label(0x07) + if_random_seed_greater_than(0x96, 0x07) + guard_try_firing_run(0x04) + label(0x07) + if_random_seed_greater_than(0xc8, 0x07) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x04) + label(0x07) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x04) + label(0x04) + label(0x07) + label(0x0b) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x29) + goto_next(0x0a) + label(0x29) + if_guard_has_stopped_moving(0x07) + goto_first(0x0b) + label(0x07) + goto_first(0x09) + label(0x0a) + ai_sleep + label(0x0c) + if_chr_distance_to_pad_less_than(0xfd, 0xc800, 0x2823, 0x00) + label(0x0d) + local_byte_2_add(0x05) + if_local_byte_2_less_than_random_seed(0x07) + goto_next(0x10) + label(0x07) + guard_bitfield_set_on(0x80) + label(0x00) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x07) + label(0x0e) + local_timer_reset_start + guard_try_running_to_bond_position(0x0f) + label(0x0f) + ai_sleep + if_guard_has_stopped_moving(0x07) + if_local_timer_greater_than(0x780000, 0x07) + goto_first(0x0f) + label(0x07) + local_byte_2_set(0x00) + goto_first(0x00) + label(0x10) + debug_log 'g', 'o', 'i', 'n', 'g', '\n', '\0', + guard_bitfield_set_off(0x80) + guard_runs_to_pad_preset + label(0x11) + ai_sleep + if_guard_has_stopped_moving(0x07) + goto_first(0x11) + label(0x07) + debug_log 'h', 'o', 'm', 'e', '\n', '\0', + goto_first(0x0e) + ai_list_end +}; +u8 ai_8[] = { + local_timer_reset_start + label(0x00) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2c) + if_local_timer_greater_than(0xb40000, 0x2d) + goto_first(0x00) + label(0x2d) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x96, 0x07) + if_bond_distance_to_pad_less_than(0x1e00, 0x2823, 0x2c) + label(0x07) + ai_sleep + if_random_seed_greater_than(0xdc, 0x07) + if_bond_distance_to_pad_less_than(0x3200, 0x2823, 0x2c) + label(0x07) + ai_sleep + if_random_seed_greater_than(0xf5, 0x07) + if_bond_distance_to_pad_less_than(0x4b00, 0x2823, 0x2c) + label(0x07) + ai_sleep + if_random_seed_greater_than(0xfa, 0x07) + if_bond_distance_to_pad_less_than(0x6400, 0x2823, 0x2c) + label(0x07) + ai_sleep + if_bond_distance_to_pad_less_than(0xc800, 0x2823, 0x2c) + local_timer_reset_start + goto_first(0x00) + label(0x2c) + ai_sleep + jump_to_ai_list(0xfd, 0x0800) + ai_list_end +}; +u8 ai_23[] = { + label(0x00) + ai_sleep + if_object_was_activated(0x08, 0x0a) + if_object_was_activated(0x09, 0x0b) + goto_first(0x00) + label(0x0a) + if_door_state_equal(0x08, 0x08, 0x29) + goto_first(0x00) + label(0x29) + if_door_state_equal(0x09, 0x0e, 0x29) + goto_first(0x00) + label(0x29) + text_print_bottom(0x102c) + goto_first(0x00) + label(0x0b) + if_door_state_equal(0x09, 0x08, 0x29) + goto_first(0x00) + label(0x29) + if_door_state_equal(0x08, 0x0e, 0x29) + goto_first(0x00) + label(0x29) + text_print_bottom(0x0f2c) + goto_first(0x00) + ai_list_end +}; +u8 ai_26[] = { + goto_next(0x2f) + label(0x33) + ai_sleep + if_door_state_equal(0x08, 0x04, 0x32) + goto_first(0x33) + label(0x36) + ai_sleep + if_door_state_equal(0x08, 0x01, 0x30) + if_door_state_equal(0x08, 0x08, 0x31) + goto_first(0x36) + label(0x34) + ai_sleep + if_door_state_equal(0x08, 0x08, 0x31) + goto_first(0x34) + label(0x35) + ai_sleep + if_door_state_equal(0x08, 0x02, 0x2f) + if_door_state_equal(0x08, 0x04, 0x32) + goto_first(0x35) + label(0x2f) + tv_change_screen_bank(0x0f, 0x00, 0x30) + tv_change_screen_bank(0x0f, 0x01, 0x32) + tv_change_screen_bank(0x10, 0x00, 0x30) + tv_change_screen_bank(0x10, 0x01, 0x32) + goto_first(0x33) + label(0x32) + tv_change_screen_bank(0x0f, 0x00, 0x2e) + tv_change_screen_bank(0x0f, 0x01, 0x30) + tv_change_screen_bank(0x10, 0x00, 0x2e) + tv_change_screen_bank(0x10, 0x01, 0x30) + goto_first(0x36) + label(0x30) + tv_change_screen_bank(0x0f, 0x00, 0x31) + tv_change_screen_bank(0x0f, 0x01, 0x30) + tv_change_screen_bank(0x10, 0x00, 0x31) + tv_change_screen_bank(0x10, 0x01, 0x30) + goto_first(0x34) + label(0x31) + tv_change_screen_bank(0x0f, 0x00, 0x30) + tv_change_screen_bank(0x0f, 0x01, 0x2f) + tv_change_screen_bank(0x10, 0x00, 0x30) + tv_change_screen_bank(0x10, 0x01, 0x2f) + goto_first(0x35) + ai_list_end +}; +u8 ai_27[] = { + goto_next(0x30) + label(0x33) + ai_sleep + if_door_state_equal(0x09, 0x04, 0x32) + goto_first(0x33) + label(0x36) + ai_sleep + if_door_state_equal(0x09, 0x01, 0x30) + if_door_state_equal(0x09, 0x08, 0x31) + goto_first(0x36) + label(0x34) + ai_sleep + if_door_state_equal(0x09, 0x08, 0x31) + goto_first(0x34) + label(0x35) + ai_sleep + if_door_state_equal(0x09, 0x02, 0x2f) + if_door_state_equal(0x09, 0x04, 0x32) + goto_first(0x35) + label(0x2f) + tv_change_screen_bank(0x11, 0x00, 0x30) + tv_change_screen_bank(0x11, 0x01, 0x32) + tv_change_screen_bank(0x12, 0x00, 0x30) + tv_change_screen_bank(0x12, 0x01, 0x32) + goto_first(0x33) + label(0x32) + tv_change_screen_bank(0x11, 0x00, 0x2e) + tv_change_screen_bank(0x11, 0x01, 0x30) + tv_change_screen_bank(0x12, 0x00, 0x2e) + tv_change_screen_bank(0x12, 0x01, 0x30) + goto_first(0x36) + label(0x30) + tv_change_screen_bank(0x11, 0x00, 0x31) + tv_change_screen_bank(0x11, 0x01, 0x30) + tv_change_screen_bank(0x12, 0x00, 0x31) + tv_change_screen_bank(0x12, 0x01, 0x30) + goto_first(0x34) + label(0x31) + tv_change_screen_bank(0x11, 0x00, 0x30) + tv_change_screen_bank(0x11, 0x01, 0x2f) + tv_change_screen_bank(0x12, 0x00, 0x30) + tv_change_screen_bank(0x12, 0x01, 0x2f) + goto_first(0x35) + ai_list_end +}; +u8 ai_20[] = { + label(0x2a) + ai_sleep + if_objective_bitfield_is_set_on(0x00040000, 0x04) + if_object_not_destroyed(0x05, 0x07) + goto_next(0x0c) + label(0x07) + if_object_not_destroyed(0x04, 0x07) + goto_next(0x0c) + label(0x07) + if_objective_bitfield_is_set_on(0x00010000, 0x07) + if_objective_bitfield_is_set_on(0x00200000, 0x07) + if_item_is_attached_to_object(0x2f, 0x05, 0x0a) + if_item_is_stationary_within_level(0x2f, 0x0d) + label(0x07) + goto_first(0x2a) + label(0x0a) + objective_bitfield_set_on(0x00010000) + text_print_top(0x082c) + sfx_play(0xe300, 0x00) + sfx_emit_from_object(0x00, 0x05, 0x0000) + goto_first(0x2a) + label(0x0d) + objective_bitfield_set_on(0x00200000) + text_print_top(0x212c) + goto_first(0x2a) + label(0x07) + label(0x0b) + text_print_top(0x0e2c) + objective_bitfield_set_on(0x00020000) + goto_next(0x04) + label(0x0c) + text_print_top(0x0e2c) + objective_bitfield_set_on(0x00080000) + objective_bitfield_set_on(0x00020000) + goto_next(0x04) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_21[] = { + label(0x2a) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2b) + if_object_not_destroyed(0x06, 0x07) + if_object_not_destroyed(0x07, 0x07) + goto_next(0x0b) + label(0x07) + if_object_was_activated(0x06, 0x07) + if_object_was_activated(0x07, 0x07) + goto_first(0x2a) + label(0x07) + text_print_top(0x0d2c) + goto_first(0x2a) + label(0x2b) + ai_sleep + if_object_not_destroyed(0x06, 0x07) + if_object_not_destroyed(0x07, 0x07) + goto_next(0x0b) + label(0x07) + if_object_was_activated(0x06, 0x07) + if_object_was_activated(0x07, 0x07) + goto_first(0x2b) + label(0x07) + if_objective_bitfield_is_set_on(0x00020000, 0x04) + local_timer_reset_start + hud_countdown_set(0x0a00) + hud_countdown_start + hud_countdown_show + text_print_top(0x092c) + label(0x0a) + ai_sleep + if_object_not_destroyed(0x06, 0x07) + if_object_not_destroyed(0x07, 0x07) + goto_next(0x0c) + label(0x07) + if_local_timer_greater_than(0x3c0000, 0x08) + if_hud_countdown_less_than(0x0100, 0x07) + goto_first(0x0a) + label(0x08) + sfx_play(0xbd00, 0x01) + sfx_emit_from_object(0x01, 0x06, 0x0000) + local_timer_reset_start + goto_first(0x0a) + label(0x07) + hud_countdown_hide + hud_countdown_stop + text_print_top(0x0a2c) + objective_bitfield_set_on(0x00040000) + goto_next(0x04) + label(0x0c) + text_print_top(0x0b2c) + objective_bitfield_set_on(0x00020000) + hud_countdown_hide + hud_countdown_stop + goto_next(0x04) + label(0x0b) + text_print_top(0x0c2c) + objective_bitfield_set_on(0x00020000) + goto_next(0x04) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_10[] = { + aircraft_rotor_speed(0x6c02, 0x201c) + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_13[] = { + label(0x2a) + ai_sleep + goto_first(0x2a) + ai_list_end +}; +u8 ai_22[] = { + label(0x00) + ai_sleep + if_alarm_is_on(0x07) + goto_first(0x00) + label(0x07) + if_bond_damage_and_pickups_disabled(0x07) + chr_try_spawning_at_pad(0x25, 0xff, 0x7400, 0x0f04, 0x00000000, 0x07) + label(0x07) + ai_sleep + if_bond_damage_and_pickups_disabled(0x07) + chr_try_spawning_at_pad(0x25, 0xff, 0x7400, 0x0f04, 0x00000000, 0x07) + label(0x07) + label(0x07) + label(0x0a) + ai_sleep + goto_first(0x0a) + ai_list_end +}; +u8 ai_14[] = { + guard_set_armour(0x1400) + guard_set_health_total(0x2800) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x07) + label(0x07) + label(0x04) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + ai_list_end +}; +u8 ai_15[] = { + guard_set_armour(0x1400) + guard_set_health_total(0x2800) + label(0x00) + ai_sleep + if_guard_heard_bond(0x04) + if_guard_see_another_guard_shot(0x04) + if_guard_and_bond_within_line_of_sight(0x04) + if_alarm_is_on(0x04) + goto_first(0x00) + label(0x04) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + ai_list_end +}; +u8 ai_16[] = { + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x680100, 0x07) + goto_first(0x0a) + label(0x07) + guard_play_animation(0x6300, 0xffff, 0x6000, 0x04, 0x10) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_25[] = { + label(0x0a) + ai_sleep + if_camera_is_in_bond_swirl(0x07) + goto_first(0x0a) + label(0x07) + jump_to_ai_list(0xf8, 0x1104) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_17[] = { + debug_log 'w', 'h', 'e', 'e', '\n', '\0', + chr_try_teleporting_to_pad(0xfd, 0x4b01, 0x07) + label(0x07) + guard_flags_set_on(0x00200000) + screen_fade_from_black + music_xtrack_play(0x00, 0xff, 0xff) + guard_play_animation(0xb100, 0xffff, 0x0300, 0x24, 0x10) + local_timer_reset_start + label(0x10) + ai_sleep + guard_flags_set_on(0x00100000) + if_local_timer_greater_than(0x3c0000, 0x07) + goto_first(0x10) + label(0x07) + guard_play_animation(0xb100, 0x0300, 0x5a00, 0x04, 0x10) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x640000, 0x07) + goto_first(0x0a) + label(0x07) + screen_fade_to_black + label(0x0b) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0b) + label(0x07) + camera_switch(0x0b, 0x0100, 0x0000) + guard_flags_set_off(0x00100000) + chr_try_teleporting_to_pad(0xfd, 0x4b01, 0x07) + label(0x07) + screen_fade_from_black + guard_play_animation(0xb100, 0x5000, 0xffff, 0x04, 0x10) + local_timer_reset_start + label(0x0c) + ai_sleep + guard_flags_set_on(0x00100000) + if_local_timer_greater_than(0x2c0100, 0x07) + goto_first(0x0c) + label(0x07) + screen_fade_to_black + label(0x0d) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0d) + label(0x07) + camera_switch(0x0c, 0x0100, 0x0000) + guard_flags_set_off(0x00100000) + chr_try_teleporting_to_pad(0xfd, 0x4b01, 0x07) + label(0x07) + screen_fade_from_black + guard_play_animation(0xb100, 0x5000, 0xffff, 0x04, 0x10) + local_timer_reset_start + label(0x0e) + ai_sleep + guard_flags_set_on(0x00100000) + if_local_timer_greater_than(0xc20100, 0x07) + goto_first(0x0e) + label(0x07) + screen_fade_to_black + label(0x0f) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0f) + label(0x07) + label(0x04) + exit_level + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_19[] = { + guard_walks_to_pad(0x0400) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x07) + goto_first(0x0a) + label(0x07) + jump_to_ai_list(0xfd, 0x0804) + ai_list_end +}; +u8 ai_18[] = { + local_timer_reset_start + label(0x00) + ai_sleep + if_local_timer_greater_than(0x780000, 0x07) + goto_first(0x00) + label(0x07) + guard_play_animation(0xac00, 0x0000, 0x4500, 0x00, 0x10) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x07) + goto_first(0x0a) + label(0x07) + door_close(0x08) + guard_walks_to_pad(0x0500) + label(0x0b) + ai_sleep + if_guard_has_stopped_moving(0x07) + goto_first(0x0b) + label(0x07) + guard_try_facing_target(0x0100, 0x0000, 0x07) + label(0x07) + jump_to_ai_list(0xfd, 0x0c04) + ai_list_end +}; +u8 ai_24[] = { + label(0x03) + ai_sleep + if_bond_is_dead(0x2e) + if_bond_in_room_with_pad(0x4a01, 0x07) + goto_first(0x03) + label(0x07) + objective_bitfield_set_on(0x00100000) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + bond_equip_item(0x00) + bond_set_locked_velocity(0x00, 0x04) + local_timer_reset_start + label(0x0a) + ai_sleep + if_bond_y_pos_less_than(0x98bd, 0x07) + if_local_timer_greater_than(0x5e0100, 0x07) + goto_first(0x0a) + label(0x07) + screen_fade_to_black + label(0x0b) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0b) + label(0x07) + if_objective_all_completed(0x07) + jump_to_ai_list(0xfd, 0x0f00) + label(0x07) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x0a, 0x0100, 0x0000) + jump_to_ai_list(0xf8, 0x1204) + jump_to_ai_list(0xfd, 0x0100) + label(0x2e) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/UsetupdepoZ.c b/assets/obseg/setup/UsetupdepoZ.c index 5cdac26c..ffbc8ef7 100644 --- a/assets/obseg/setup/UsetupdepoZ.c +++ b/assets/obseg/setup/UsetupdepoZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1525,33 +1526,907 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x8e00ad64, 0x310a0005, 0xfd040804 }; -u32 ai_1[] = { 0x8e01ad64, 0x320a0005, 0xfd040804 }; -u32 ai_2[] = { 0x8e02ad64, 0x330a0005, 0xfd040804 }; -u32 ai_3[] = { 0x8e03ad64, 0x340a0005, 0xfd040804 }; -u32 ai_4[] = { 0x8e04ad64, 0x350a0005, 0xfd040804 }; -u32 ai_5[] = { 0x8e05ad64, 0x360a0005, 0xfd040804 }; -u32 ai_6[] = { 0x8e06ad64, 0x370a0005, 0xfd040804 }; -u32 ai_7[] = { 0x022d3335, 0xa03a3550, 0x378f0028, 0x9000008d, 0xe5bf00bd, 0x0a000000, 0x002d022d, 0x00060237, 0x8f002890, 0x000a8dcc, 0xbf00bd0a, 0x00000000, 0x2d022d02, 0x2d000602, 0x3a8f0028, 0x90001402, 0x2dbf00bd, 0x0a800000, 0x002d022d, 0xbf00bd0a, 0x90000000, 0x06020605, 0xfd040904 }; -u32 ai_8[] = { 0x023b463e, 0x039c0000, 0x0400074c, 0x01903728, 0x0802372a, 0x08020803, 0x4c00c837, 0x3c3c0237, 0x2f3d0108, 0x023c3c2d, 0x0006023d, 0x03013b02, 0x2d023e33, 0x350a2d1a, 0x06022d35, 0x322d0e06, 0x022d353c, 0x2d130602, 0x2d35502d, 0x1306022d, 0x35642d11, 0x06022d35, 0x962d1206, 0x022d35c8, 0x2d140001, 0x00000602, 0x2d35fa07, 0x15000100, 0x00060206, 0x032f2d01, 0x06022d3c, 0x2d000802, 0x0803013b, 0x022d0301, 0x3e020705, 0xfd040a04 }; -u32 ai_9[] = { 0xad202d3e, 0x434f5645, 0x520a0028, 0x08020803, 0x46074b00, 0xc8060108, 0x020605fd, 0x040b0207, 0x05fd0409, 0x04000000 }; -u32 ai_10[] = { 0xad202d3e, 0x54524545, 0x440a0002, 0x03150021, 0x00002d46, 0x06022d02, 0x08034c01, 0xf4064606, 0x3c2d0108, 0x022d1600, 0x0100002d, 0x022d0209, 0x0346062f, 0x2d010902, 0x2d010302, 0x0605fd04, 0x09040000 }; -u32 ai_18[] = { 0x9a000002, 0x00020403, 0x5500734d, 0x5500e64d, 0x5500ff4d, 0x5501044d, 0x5501064d, 0x5500974d, 0x5500894d, 0x5500924d, 0x5500c94d, 0x5500ce4d, 0x035500d6, 0x4d5500db, 0x4d5500e0, 0x4d5500ef, 0x4d5500f5, 0x4d5500a6, 0x4d039a00, 0x0002009b, 0x00000400, 0x03550110, 0x41550080, 0x41550079, 0x4255009a, 0x435500c0, 0x44035500, 0xba465500, 0xb2475500, 0xec485500, 0xe6495500, 0xfb4a5501, 0x014b0104, 0x024103ad, 0x494e310a, 0x00ac0700, 0x97ac0800, 0x6eac0900, 0x73ac0a00, 0x92ac0b00, 0x9aac0c00, 0xbeac0d00, 0xba010402, 0x4203ad49, 0x4e320a00, 0xac070110, 0xac0800a6, 0xac090011, 0xac0a00be, 0xac0b00c3, 0xac0c00ba, 0xac0d00b2, 0x01040243, 0x03ad494e, 0x330a00ac, 0x07006eac, 0x080073ac, 0x090110ac, 0x0a00c3ac, 0x0b00baac, 0x0c00c9ac, 0x0d00db01, 0x04024403, 0xad494e34, 0x0a00ac07, 0x0079ac08, 0x00a6ac09, 0x00ecac0a, 0x002cac0b, 0x002dac0c, 0x00b2ac0d, 0x00db0104, 0x024503ad, 0x494e350a, 0x00ac0700, 0x9aac0800, 0xc9ac0900, 0x2cac0a00, 0x2dac0b00, 0xdbac0c00, 0xb2ac0d00, 0xe0010402, 0x4603ad49, 0x4e360a00, 0xac07009a, 0xac0800f5, 0xac0900c3, 0xac0a00ec, 0xac0b00e6, 0xac0c00fb, 0xac0d00ef, 0x01040247, 0x03ad494e, 0x370a00ac, 0x07002cac, 0x0800beac, 0x0900efac, 0x0a00dbac, 0x0b00e8ac, 0x0c00fbac, 0x0d002d01, 0x04024803, 0xad494e38, 0x0a00ac07, 0x00baac08, 0x002dac09, 0x00efac0a, 0x00ffac0b, 0x00beac0c, 0x00dbac0d, 0x002c0104, 0x024903ad, 0x494e390a, 0x00ac0700, 0xfbac0800, 0xb0ac0900, 0xe0ac0a00, 0xbaac0b00, 0xfdac0c00, 0x2dac0d00, 0x2c010402, 0x4a03ad49, 0x4e31300a, 0x00ac0700, 0xe8ac0800, 0xb0ac0901, 0x0aac0a01, 0x0cac0b01, 0x0cac0c00, 0x2cac0d00, 0x2d010402, 0x4b03ad49, 0x4e31310a, 0x00ac0700, 0xfdac0800, 0xfbac0900, 0xe8ac0a00, 0xb0ac0b00, 0xb2ac0c00, 0x2cac0d00, 0x2d010402, 0x4dad4f46, 0x46210a00, 0x9a000004, 0x009b0000, 0x02000104, 0x04000000 }; -u32 ai_19[] = { 0x8e07ae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b40004, 0xb02d0108, 0x022d3100, 0x2d010302, 0x2dad7370, 0x61776e31, 0x00f306bd, 0x11ff2328, 0x04010000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7331204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 }; -u32 ai_20[] = { 0x8e08ae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b40005, 0xdc2d0108, 0x022d3101, 0x2d010302, 0x2dad7370, 0x61776e32, 0x00f306bd, 0x11ff2328, 0x04020000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7332204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 }; -u32 ai_21[] = { 0x8e09ae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b40007, 0x082d0108, 0x022d3102, 0x2d010302, 0x2dad7370, 0x61776e33, 0x00f306bd, 0x11ff2328, 0x04030000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7333204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 }; -u32 ai_22[] = { 0x8e0aae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b40008, 0x342d0108, 0x022d3103, 0x2d010302, 0x2dad7370, 0x61776e34, 0x00f306bd, 0x11ff2328, 0x04040000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7334204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 }; -u32 ai_23[] = { 0x8e0bae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b4000e, 0x102d0108, 0x022d3104, 0x2d010302, 0x2dad7370, 0x61776e35, 0x00f306bd, 0x11ff2328, 0x04050000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7335204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 }; -u32 ai_24[] = { 0x8e0cae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b4001c, 0x202d0108, 0x022d3105, 0x2d010302, 0x2dad7370, 0x61776e36, 0x00f306bd, 0x11ff2328, 0x04060000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7336204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 }; -u32 ai_25[] = { 0x8e0dae02, 0x4c03b400, 0x04b00301, 0x4c02039c, 0x00000400, 0x09ae0208, 0x03b40023, 0x282d0108, 0x022d3106, 0x2d010302, 0x2dad7370, 0x61776e37, 0x00f306bd, 0x11ff2328, 0x04070000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7337204f, 0x4b210001, 0x03020903, 0x9c000002, 0x002d0109, 0x022d0103, 0x04000000 }; -u32 ai_17[] = { 0x02080368, 0x060e2d01, 0x08022d9a, 0x00000100, 0x02090301, 0x09040000 }; -u32 ai_26[] = { 0x020303eb, 0x4f55010f, 0x2d010302, 0x2decd700, 0xda020803, 0xdc2d0108, 0x022df12d, 0x05fd000f, 0x022dddea, 0x59042d59, 0x052d5906, 0x2d59072d, 0x59082d59, 0x092d590a, 0x2d590b2d, 0x590c2d59, 0x0d2d590e, 0x2d590f2d, 0x59102d59, 0x112d5912, 0x2d59132d, 0x59162d59, 0x142d5915, 0x2de40402, 0x2ded0303, 0x03d50800, 0x02000005, 0xf8040d05, 0xfd000102, 0x4f05fd00, 0x01040000 }; -u32 ai_12[] = { 0x95019502, 0xdf06df07, 0x310e4e30, 0x0e4e540e, 0x01112d54, 0x0e01182d, 0x540e0115, 0x2d004e02, 0x2d940102, 0x4e310f4e, 0x300f4e54, 0x0f01112d, 0x540f0118, 0x2d540f01, 0x152d004e, 0x022d9402, 0x024e9601, 0x2d96022d, 0x0006022d, 0x9d000000, 0x109d0000, 0x00409155, 0xd9fd0114, 0x2d022d96, 0x0210a10e, 0x00000400, 0x050e040e, 0x000f0210, 0xa10f0000, 0x0400050f, 0x040f9601, 0x10000f02, 0x10a10e00, 0x00040005, 0x0e041002, 0x0f0303db, 0xf400ffff, 0x96022d00, 0x4e022d02, 0x0b140024, 0x000f2d03, 0x010b022d, 0x020de72d, 0x03010d02, 0x2d160004, 0x000f2d02, 0x2d030303, 0x180f0f04, 0x0208032f, 0x2d010802, 0x2d024e96, 0x012d004e, 0x022d9a00, 0x00080002, 0x0c150024, 0x000e2d03, 0x010c022d, 0x020ee72d, 0x03010e02, 0x2d160004, 0x000e2d02, 0x2d030303, 0x180e0f04, 0x0209032f, 0x2d010902, 0x2d024eda, 0x020a03dc, 0x2d010a02, 0x2d0206dd, 0xa1f80000, 0x040005fd, 0x040c0400 }; -u32 ai_13[] = { 0x9d000000, 0x808f000a, 0x900000d9, 0xfd01132d, 0x022d0a00, 0x00ffffff, 0xff0610ae, 0x020803b4, 0x0000462d, 0x0108022d, 0x02091400, 0x2801162d, 0x03010902, 0x2d160008, 0x01162d02, 0x2d020603, 0x01060400 }; -u32 ai_14[] = { 0x9d000000, 0x808f000a, 0x900000d9, 0xfd01122d, 0x022d0a00, 0x00ffffff, 0xff0610ae, 0x020803b4, 0x00003c2d, 0x0108022d, 0x02091400, 0x2801162d, 0x03010902, 0x2d160008, 0x01162d02, 0x2d020603, 0x01060400 }; -u32 ai_15[] = { 0x9d000000, 0x808f000a, 0x900000d9, 0xfd01172d, 0x022d0a00, 0x00ffffff, 0xff4410ae, 0x0208039c, 0x00000800, 0x2d010802, 0x2d0a002a, 0xffffffff, 0x0610ae02, 0x0903b400, 0x00142d01, 0x09022d02, 0x0a140028, 0x01162d03, 0x010a022d, 0x16000801, 0x162d022d, 0x02060301, 0x06040000 }; -u32 ai_11[] = { 0xd9fd0111, 0x2d022de0, 0xfd01df06, 0xdf070a00, 0x69000000, 0x1d0610db, 0x0208032f, 0x2d010802, 0x2de0fd00, 0x0a006900, 0x1d00a006, 0x10ae0209, 0x032f2db4, 0x0000782d, 0x0109022d, 0x6706ae02, 0x0a036806, 0x012db400, 0x00b42d01, 0x0a022dda, 0x020b03dc, 0x2d010b02, 0x2dd20206, 0x03010604 }; -u32 ai_16[] = { 0xae0a0061, 0x00000001, 0x04100208, 0x03b40000, 0x1e2d0108, 0x022d0a00, 0x610001ff, 0xff041005, 0xfd000104, 0x020803cf, 0x2d010802, 0x2d05f804, 0x1105fd00, 0x01040000 }; +u8 ai_0[] = { + guard_set_chr_num(0x00) + debug_log 'd', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0804) + ai_list_end +}; +u8 ai_1[] = { + guard_set_chr_num(0x01) + debug_log 'd', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0804) + ai_list_end +}; +u8 ai_2[] = { + guard_set_chr_num(0x02) + debug_log 'd', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0804) + ai_list_end +}; +u8 ai_3[] = { + guard_set_chr_num(0x03) + debug_log 'd', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x0804) + ai_list_end +}; +u8 ai_4[] = { + guard_set_chr_num(0x04) + debug_log 'd', '5', '\n', '\0', + jump_to_ai_list(0xfd, 0x0804) + ai_list_end +}; +u8 ai_5[] = { + guard_set_chr_num(0x05) + debug_log 'd', '6', '\n', '\0', + jump_to_ai_list(0xfd, 0x0804) + ai_list_end +}; +u8 ai_6[] = { + guard_set_chr_num(0x06) + debug_log 'd', '7', '\n', '\0', + jump_to_ai_list(0xfd, 0x0804) + ai_list_end +}; +u8 ai_7[] = { + label(0x2d) + random_generate_seed + if_random_seed_greater_than(0xa0, 0x3a) + if_random_seed_greater_than(0x50, 0x37) + guard_set_health_total(0x2800) + guard_set_armour(0x0000) + guard_set_grenade_probability(0xe5) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x2d) + label(0x2d) + goto_next(0x06) + label(0x37) + guard_set_health_total(0x2800) + guard_set_armour(0x0a00) + guard_set_grenade_probability(0xcc) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x2d) + label(0x2d) + label(0x2d) + goto_next(0x06) + label(0x3a) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + label(0x2d) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000080, 0x2d) + label(0x2d) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000090, 0x06) + label(0x06) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_8[] = { + label(0x3b) + if_guard_shot_from_bond_missed(0x3e) + ai_sleep + if_objective_bitfield_is_set_on(0x00040000, 0x07) + if_guard_distance_to_bond_greater_than(0x9001, 0x37) + guard_try_running_to_bond_position(0x08) + label(0x37) + guard_try_sprinting_to_bond_position(0x08) + label(0x08) + ai_sleep + if_guard_distance_to_bond_greater_than(0xc800, 0x37) + if_guard_and_bond_within_line_of_sight(0x3c) + label(0x37) + if_guard_has_stopped_moving(0x3d) + goto_first(0x08) + label(0x3c) + if_guard_and_bond_within_line_of_sight(0x2d) + goto_next(0x06) + label(0x3d) + ai_sleep + goto_first(0x3b) + label(0x2d) + label(0x3e) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x2d) + guard_try_throwing_grenade(0x06) + label(0x2d) + if_random_seed_greater_than(0x32, 0x2d) + guard_try_sidestepping(0x06) + label(0x2d) + if_random_seed_greater_than(0x3c, 0x2d) + guard_try_firing_roll(0x06) + label(0x2d) + if_random_seed_greater_than(0x50, 0x2d) + guard_try_firing_roll(0x06) + label(0x2d) + if_random_seed_greater_than(0x64, 0x2d) + guard_try_firing_walk(0x06) + label(0x2d) + if_random_seed_greater_than(0x96, 0x2d) + guard_try_firing_run(0x06) + label(0x2d) + if_random_seed_greater_than(0xc8, 0x2d) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x2d) + if_random_seed_greater_than(0xfa, 0x07) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x2d) + goto_first(0x06) + label(0x2d) + if_guard_and_bond_within_line_of_sight(0x2d) + goto_next(0x08) + label(0x08) + ai_sleep + goto_first(0x3b) + label(0x2d) + ai_sleep + goto_first(0x3e) + label(0x07) + jump_to_ai_list(0xfd, 0x0a04) + ai_list_end +}; +u8 ai_9[] = { + debug_log ' ', '-', '>', 'C', 'O', 'V', 'E', 'R', '\n', '\0', + guard_try_running_to_bond_position(0x08) + label(0x08) + ai_sleep + if_guard_shot_from_bond_missed(0x07) + if_guard_distance_to_bond_less_than(0xc800, 0x06) + goto_first(0x08) + label(0x06) + jump_to_ai_list(0xfd, 0x0b04) + label(0x07) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_10[] = { + debug_log ' ', '-', '>', 'T', 'R', 'E', 'E', 'D', '\n', '\0', + label(0x03) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x2d) + if_guard_shot_from_bond_missed(0x06) + label(0x2d) + label(0x08) + ai_sleep + if_guard_distance_to_bond_greater_than(0xf401, 0x06) + if_guard_shot_from_bond_missed(0x06) + if_guard_and_bond_within_line_of_sight(0x2d) + goto_first(0x08) + label(0x2d) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x2d) + label(0x2d) + label(0x09) + ai_sleep + if_guard_shot_from_bond_missed(0x06) + if_guard_has_stopped_moving(0x2d) + goto_first(0x09) + label(0x2d) + goto_first(0x03) + label(0x06) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_18[] = { + objective_bitfield_set_on(0x00020000) + label(0x04) + ai_sleep + if_bond_in_room_with_pad(0x7300, 0x4d) + if_bond_in_room_with_pad(0xe600, 0x4d) + if_bond_in_room_with_pad(0xff00, 0x4d) + if_bond_in_room_with_pad(0x0401, 0x4d) + if_bond_in_room_with_pad(0x0601, 0x4d) + if_bond_in_room_with_pad(0x9700, 0x4d) + if_bond_in_room_with_pad(0x8900, 0x4d) + if_bond_in_room_with_pad(0x9200, 0x4d) + if_bond_in_room_with_pad(0xc900, 0x4d) + if_bond_in_room_with_pad(0xce00, 0x4d) + ai_sleep + if_bond_in_room_with_pad(0xd600, 0x4d) + if_bond_in_room_with_pad(0xdb00, 0x4d) + if_bond_in_room_with_pad(0xe000, 0x4d) + if_bond_in_room_with_pad(0xef00, 0x4d) + if_bond_in_room_with_pad(0xf500, 0x4d) + if_bond_in_room_with_pad(0xa600, 0x4d) + ai_sleep + objective_bitfield_set_on(0x00020000) + objective_bitfield_set_off(0x00040000) + ai_sleep + if_bond_in_room_with_pad(0x1001, 0x41) + if_bond_in_room_with_pad(0x8000, 0x41) + if_bond_in_room_with_pad(0x7900, 0x42) + if_bond_in_room_with_pad(0x9a00, 0x43) + if_bond_in_room_with_pad(0xc000, 0x44) + ai_sleep + if_bond_in_room_with_pad(0xba00, 0x46) + if_bond_in_room_with_pad(0xb200, 0x47) + if_bond_in_room_with_pad(0xec00, 0x48) + if_bond_in_room_with_pad(0xe600, 0x49) + if_bond_in_room_with_pad(0xfb00, 0x4a) + if_bond_in_room_with_pad(0x0101, 0x4b) + goto_first(0x04) + label(0x41) + ai_sleep + debug_log 'I', 'N', '1', '\n', '\0', + chr_set_pad_preset(0x07, 0x9700) + chr_set_pad_preset(0x08, 0x6e00) + chr_set_pad_preset(0x09, 0x7300) + chr_set_pad_preset(0x0a, 0x9200) + chr_set_pad_preset(0x0b, 0x9a00) + chr_set_pad_preset(0x0c, 0xbe00) + chr_set_pad_preset(0x0d, 0xba00) + goto_first(0x04) + label(0x42) + ai_sleep + debug_log 'I', 'N', '2', '\n', '\0', + chr_set_pad_preset(0x07, 0x1001) + chr_set_pad_preset(0x08, 0xa600) + chr_set_pad_preset(0x09, 0x1100) + chr_set_pad_preset(0x0a, 0xbe00) + chr_set_pad_preset(0x0b, 0xc300) + chr_set_pad_preset(0x0c, 0xba00) + chr_set_pad_preset(0x0d, 0xb200) + goto_first(0x04) + label(0x43) + ai_sleep + debug_log 'I', 'N', '3', '\n', '\0', + chr_set_pad_preset(0x07, 0x6e00) + chr_set_pad_preset(0x08, 0x7300) + chr_set_pad_preset(0x09, 0x1001) + chr_set_pad_preset(0x0a, 0xc300) + chr_set_pad_preset(0x0b, 0xba00) + chr_set_pad_preset(0x0c, 0xc900) + chr_set_pad_preset(0x0d, 0xdb00) + goto_first(0x04) + label(0x44) + ai_sleep + debug_log 'I', 'N', '4', '\n', '\0', + chr_set_pad_preset(0x07, 0x7900) + chr_set_pad_preset(0x08, 0xa600) + chr_set_pad_preset(0x09, 0xec00) + chr_set_pad_preset(0x0a, 0x2c00) + chr_set_pad_preset(0x0b, 0x2d00) + chr_set_pad_preset(0x0c, 0xb200) + chr_set_pad_preset(0x0d, 0xdb00) + goto_first(0x04) + label(0x45) + ai_sleep + debug_log 'I', 'N', '5', '\n', '\0', + chr_set_pad_preset(0x07, 0x9a00) + chr_set_pad_preset(0x08, 0xc900) + chr_set_pad_preset(0x09, 0x2c00) + chr_set_pad_preset(0x0a, 0x2d00) + chr_set_pad_preset(0x0b, 0xdb00) + chr_set_pad_preset(0x0c, 0xb200) + chr_set_pad_preset(0x0d, 0xe000) + goto_first(0x04) + label(0x46) + ai_sleep + debug_log 'I', 'N', '6', '\n', '\0', + chr_set_pad_preset(0x07, 0x9a00) + chr_set_pad_preset(0x08, 0xf500) + chr_set_pad_preset(0x09, 0xc300) + chr_set_pad_preset(0x0a, 0xec00) + chr_set_pad_preset(0x0b, 0xe600) + chr_set_pad_preset(0x0c, 0xfb00) + chr_set_pad_preset(0x0d, 0xef00) + goto_first(0x04) + label(0x47) + ai_sleep + debug_log 'I', 'N', '7', '\n', '\0', + chr_set_pad_preset(0x07, 0x2c00) + chr_set_pad_preset(0x08, 0xbe00) + chr_set_pad_preset(0x09, 0xef00) + chr_set_pad_preset(0x0a, 0xdb00) + chr_set_pad_preset(0x0b, 0xe800) + chr_set_pad_preset(0x0c, 0xfb00) + chr_set_pad_preset(0x0d, 0x2d00) + goto_first(0x04) + label(0x48) + ai_sleep + debug_log 'I', 'N', '8', '\n', '\0', + chr_set_pad_preset(0x07, 0xba00) + chr_set_pad_preset(0x08, 0x2d00) + chr_set_pad_preset(0x09, 0xef00) + chr_set_pad_preset(0x0a, 0xff00) + chr_set_pad_preset(0x0b, 0xbe00) + chr_set_pad_preset(0x0c, 0xdb00) + chr_set_pad_preset(0x0d, 0x2c00) + goto_first(0x04) + label(0x49) + ai_sleep + debug_log 'I', 'N', '9', '\n', '\0', + chr_set_pad_preset(0x07, 0xfb00) + chr_set_pad_preset(0x08, 0xb000) + chr_set_pad_preset(0x09, 0xe000) + chr_set_pad_preset(0x0a, 0xba00) + chr_set_pad_preset(0x0b, 0xfd00) + chr_set_pad_preset(0x0c, 0x2d00) + chr_set_pad_preset(0x0d, 0x2c00) + goto_first(0x04) + label(0x4a) + ai_sleep + debug_log 'I', 'N', '1', '0', '\n', '\0', + chr_set_pad_preset(0x07, 0xe800) + chr_set_pad_preset(0x08, 0xb000) + chr_set_pad_preset(0x09, 0x0a01) + chr_set_pad_preset(0x0a, 0x0c01) + chr_set_pad_preset(0x0b, 0x0c01) + chr_set_pad_preset(0x0c, 0x2c00) + chr_set_pad_preset(0x0d, 0x2d00) + goto_first(0x04) + label(0x4b) + ai_sleep + debug_log 'I', 'N', '1', '1', '\n', '\0', + chr_set_pad_preset(0x07, 0xfd00) + chr_set_pad_preset(0x08, 0xfb00) + chr_set_pad_preset(0x09, 0xe800) + chr_set_pad_preset(0x0a, 0xb000) + chr_set_pad_preset(0x0b, 0xb200) + chr_set_pad_preset(0x0c, 0x2c00) + chr_set_pad_preset(0x0d, 0x2d00) + goto_first(0x04) + label(0x4d) + debug_log 'O', 'F', 'F', '!', '\n', '\0', + objective_bitfield_set_on(0x00040000) + objective_bitfield_set_off(0x00020000) + goto_first(0x04) + ai_list_end +}; +u8 ai_19[] = { + guard_set_chr_num(0x07) + local_timer_reset_start + label(0x4c) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4c) + label(0x03) + if_objective_bitfield_is_set_on(0x00040000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x2d) + goto_first(0x08) + label(0x2d) + if_chr_does_not_exist(0x00, 0x2d) + goto_first(0x03) + label(0x2d) + debug_log 's', 'p', 'a', 'w', 'n', '1', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0104, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '1', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x2d) + goto_first(0x09) + label(0x2d) + goto_first(0x03) + ai_list_end +}; +u8 ai_20[] = { + guard_set_chr_num(0x08) + local_timer_reset_start + label(0x4c) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4c) + label(0x03) + if_objective_bitfield_is_set_on(0x00040000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0xdc0500, 0x2d) + goto_first(0x08) + label(0x2d) + if_chr_does_not_exist(0x01, 0x2d) + goto_first(0x03) + label(0x2d) + debug_log 's', 'p', 'a', 'w', 'n', '2', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0204, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '2', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x2d) + goto_first(0x09) + label(0x2d) + goto_first(0x03) + ai_list_end +}; +u8 ai_21[] = { + guard_set_chr_num(0x09) + local_timer_reset_start + label(0x4c) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4c) + label(0x03) + if_objective_bitfield_is_set_on(0x00040000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x080700, 0x2d) + goto_first(0x08) + label(0x2d) + if_chr_does_not_exist(0x02, 0x2d) + goto_first(0x03) + label(0x2d) + debug_log 's', 'p', 'a', 'w', 'n', '3', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0304, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '3', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x2d) + goto_first(0x09) + label(0x2d) + goto_first(0x03) + ai_list_end +}; +u8 ai_22[] = { + guard_set_chr_num(0x0a) + local_timer_reset_start + label(0x4c) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4c) + label(0x03) + if_objective_bitfield_is_set_on(0x00040000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x340800, 0x2d) + goto_first(0x08) + label(0x2d) + if_chr_does_not_exist(0x03, 0x2d) + goto_first(0x03) + label(0x2d) + debug_log 's', 'p', 'a', 'w', 'n', '4', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0404, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '4', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x2d) + goto_first(0x09) + label(0x2d) + goto_first(0x03) + ai_list_end +}; +u8 ai_23[] = { + guard_set_chr_num(0x0b) + local_timer_reset_start + label(0x4c) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4c) + label(0x03) + if_objective_bitfield_is_set_on(0x00040000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x100e00, 0x2d) + goto_first(0x08) + label(0x2d) + if_chr_does_not_exist(0x04, 0x2d) + goto_first(0x03) + label(0x2d) + debug_log 's', 'p', 'a', 'w', 'n', '5', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0504, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '5', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x2d) + goto_first(0x09) + label(0x2d) + goto_first(0x03) + ai_list_end +}; +u8 ai_24[] = { + guard_set_chr_num(0x0c) + local_timer_reset_start + label(0x4c) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4c) + label(0x03) + if_objective_bitfield_is_set_on(0x00040000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x201c00, 0x2d) + goto_first(0x08) + label(0x2d) + if_chr_does_not_exist(0x05, 0x2d) + goto_first(0x03) + label(0x2d) + debug_log 's', 'p', 'a', 'w', 'n', '6', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0604, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '6', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x2d) + goto_first(0x09) + label(0x2d) + goto_first(0x03) + ai_list_end +}; +u8 ai_25[] = { + guard_set_chr_num(0x0d) + local_timer_reset_start + label(0x4c) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4c) + label(0x03) + if_objective_bitfield_is_set_on(0x00040000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x282300, 0x2d) + goto_first(0x08) + label(0x2d) + if_chr_does_not_exist(0x06, 0x2d) + goto_first(0x03) + label(0x2d) + debug_log 's', 'p', 'a', 'w', 'n', '7', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x11, 0xff, 0x2823, 0x0704, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '7', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x2d) + goto_first(0x09) + label(0x2d) + goto_first(0x03) + ai_list_end +}; +u8 ai_17[] = { + label(0x08) + ai_sleep + if_door_state_equal(0x06, 0x0e, 0x2d) + goto_first(0x08) + label(0x2d) + objective_bitfield_set_on(0x00010000) + label(0x09) + ai_sleep + goto_first(0x09) + ai_list_end +}; +u8 ai_26[] = { + label(0x03) + ai_sleep + if_bond_is_dead(0x4f) + if_bond_in_room_with_pad(0x0f01, 0x2d) + goto_first(0x03) + label(0x2d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x2d) + goto_first(0x08) + label(0x2d) + if_objective_all_completed(0x2d) + jump_to_ai_list(0xfd, 0x0f00) + label(0x2d) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + if_bond_has_item_equipped(0x04, 0x2d) + if_bond_has_item_equipped(0x05, 0x2d) + if_bond_has_item_equipped(0x06, 0x2d) + if_bond_has_item_equipped(0x07, 0x2d) + if_bond_has_item_equipped(0x08, 0x2d) + if_bond_has_item_equipped(0x09, 0x2d) + if_bond_has_item_equipped(0x0a, 0x2d) + if_bond_has_item_equipped(0x0b, 0x2d) + if_bond_has_item_equipped(0x0c, 0x2d) + if_bond_has_item_equipped(0x0d, 0x2d) + if_bond_has_item_equipped(0x0e, 0x2d) + if_bond_has_item_equipped(0x0f, 0x2d) + if_bond_has_item_equipped(0x10, 0x2d) + if_bond_has_item_equipped(0x11, 0x2d) + if_bond_has_item_equipped(0x12, 0x2d) + if_bond_has_item_equipped(0x13, 0x2d) + if_bond_has_item_equipped(0x16, 0x2d) + if_bond_has_item_equipped(0x14, 0x2d) + if_bond_has_item_equipped(0x15, 0x2d) + bond_equip_item_cinema(0x04) + label(0x2d) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x08, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x0d04) + jump_to_ai_list(0xfd, 0x0100) + label(0x4f) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_12[] = { + guard_bitfield_set_off(0x01) + guard_bitfield_set_off(0x02) + door_open_instant(0x06) + door_open_instant(0x07) + if_chr_does_not_exist(0x0e, 0x4e) + if_chr_dying_or_dead(0x0e, 0x4e) + if_chr_in_room_with_pad(0x0e, 0x1101, 0x2d) + if_chr_in_room_with_pad(0x0e, 0x1801, 0x2d) + if_chr_in_room_with_pad(0x0e, 0x1501, 0x2d) + goto_next(0x4e) + label(0x2d) + guard_bitfield_set_on(0x01) + label(0x4e) + if_chr_does_not_exist(0x0f, 0x4e) + if_chr_dying_or_dead(0x0f, 0x4e) + if_chr_in_room_with_pad(0x0f, 0x1101, 0x2d) + if_chr_in_room_with_pad(0x0f, 0x1801, 0x2d) + if_chr_in_room_with_pad(0x0f, 0x1501, 0x2d) + goto_next(0x4e) + label(0x2d) + guard_bitfield_set_on(0x02) + label(0x4e) + if_guard_bitfield_is_set_on(0x01, 0x2d) + if_guard_bitfield_is_set_on(0x02, 0x2d) + goto_next(0x06) + label(0x2d) + guard_flags_set_on(0x10000000) + guard_flags_set_on(0x40000000) + guard_set_speed_rating(0x55) + chr_try_teleporting_to_pad(0xfd, 0x1401, 0x2d) + label(0x2d) + if_guard_bitfield_is_set_on(0x02, 0x10) + chr_flags_set_off(0x0e, 0x00040000) + jump_to_ai_list(0x0e, 0x0e04) + goto_next(0x0f) + label(0x10) + chr_flags_set_off(0x0f, 0x00040000) + jump_to_ai_list(0x0f, 0x0f04) + if_guard_bitfield_is_set_on(0x01, 0x10) + goto_next(0x0f) + label(0x10) + chr_flags_set_off(0x0e, 0x00040000) + jump_to_ai_list(0x0e, 0x1004) + label(0x0f) + ai_sleep + ai_sleep + screen_fade_from_black + music_xtrack_play(0x00, 0xff, 0xff) + if_guard_bitfield_is_set_on(0x02, 0x2d) + goto_next(0x4e) + label(0x2d) + label(0x0b) + guard_try_fire_or_aim_at_target(0x2400, 0x0f00, 0x2d) + ai_sleep + goto_first(0x0b) + label(0x2d) + label(0x0d) + if_guard_is_firing_and_using_180_range_flag(0x2d) + ai_sleep + goto_first(0x0d) + label(0x2d) + guard_try_fire_or_aim_at_target_update(0x0400, 0x0f00, 0x2d) + label(0x2d) + ai_sleep + ai_sleep + ai_sleep + chr_hit_body_part_with_item_damage(0x0f, 0x0f, 0x04) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2d) + goto_first(0x08) + label(0x2d) + label(0x4e) + if_guard_bitfield_is_set_on(0x01, 0x2d) + goto_next(0x4e) + label(0x2d) + objective_bitfield_set_on(0x00080000) + label(0x0c) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0x0e00, 0x2d) + ai_sleep + goto_first(0x0c) + label(0x2d) + label(0x0e) + if_guard_is_firing_and_using_180_range_flag(0x2d) + ai_sleep + goto_first(0x0e) + label(0x2d) + guard_try_fire_or_aim_at_target_update(0x0400, 0x0e00, 0x2d) + label(0x2d) + ai_sleep + ai_sleep + ai_sleep + chr_hit_body_part_with_item_damage(0x0e, 0x0f, 0x04) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x2d) + goto_first(0x09) + label(0x2d) + label(0x4e) + screen_fade_to_black + label(0x0a) + ai_sleep + if_screen_fade_completed(0x2d) + goto_first(0x0a) + label(0x2d) + label(0x06) + chr_hide_all + chr_flags_set_off(0xf8, 0x00040000) + jump_to_ai_list(0xfd, 0x0c04) + ai_list_end +}; +u8 ai_13[] = { + guard_flags_set_on(0x80000000) + guard_set_health_total(0x0a00) + guard_set_armour(0x0000) + chr_try_teleporting_to_pad(0xfd, 0x1301, 0x2d) + label(0x2d) + guard_play_animation(0x0000, 0xffff, 0xffff, 0x06, 0x10) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x460000, 0x2d) + goto_first(0x08) + label(0x2d) + label(0x09) + guard_try_fire_or_aim_at_target(0x2800, 0x1601, 0x2d) + ai_sleep + goto_first(0x09) + label(0x2d) + guard_try_fire_or_aim_at_target_update(0x0800, 0x1601, 0x2d) + label(0x2d) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_14[] = { + guard_flags_set_on(0x80000000) + guard_set_health_total(0x0a00) + guard_set_armour(0x0000) + chr_try_teleporting_to_pad(0xfd, 0x1201, 0x2d) + label(0x2d) + guard_play_animation(0x0000, 0xffff, 0xffff, 0x06, 0x10) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2d) + goto_first(0x08) + label(0x2d) + label(0x09) + guard_try_fire_or_aim_at_target(0x2800, 0x1601, 0x2d) + ai_sleep + goto_first(0x09) + label(0x2d) + guard_try_fire_or_aim_at_target_update(0x0800, 0x1601, 0x2d) + label(0x2d) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_15[] = { + guard_flags_set_on(0x80000000) + guard_set_health_total(0x0a00) + guard_set_armour(0x0000) + chr_try_teleporting_to_pad(0xfd, 0x1701, 0x2d) + label(0x2d) + guard_play_animation(0x0000, 0xffff, 0xffff, 0x44, 0x10) + local_timer_reset_start + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x2d) + goto_first(0x08) + label(0x2d) + guard_play_animation(0x2a00, 0xffff, 0xffff, 0x06, 0x10) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x140000, 0x2d) + goto_first(0x09) + label(0x2d) + label(0x0a) + guard_try_fire_or_aim_at_target(0x2800, 0x1601, 0x2d) + ai_sleep + goto_first(0x0a) + label(0x2d) + guard_try_fire_or_aim_at_target_update(0x0800, 0x1601, 0x2d) + label(0x2d) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_11[] = { + chr_try_teleporting_to_pad(0xfd, 0x1101, 0x2d) + label(0x2d) + chr_remove_item_in_hand(0xfd, 0x01) + door_open_instant(0x06) + door_open_instant(0x07) + guard_play_animation(0x6900, 0x0000, 0x1d00, 0x06, 0x10) + screen_fade_from_black + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2d) + goto_first(0x08) + label(0x2d) + chr_remove_item_in_hand(0xfd, 0x00) + guard_play_animation(0x6900, 0x1d00, 0xa000, 0x06, 0x10) + local_timer_reset_start + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x2d) + if_local_timer_greater_than(0x780000, 0x2d) + goto_first(0x09) + label(0x2d) + door_close(0x06) + local_timer_reset_start + label(0x0a) + ai_sleep + if_door_state_equal(0x06, 0x01, 0x2d) + if_local_timer_greater_than(0xb40000, 0x2d) + goto_first(0x0a) + label(0x2d) + screen_fade_to_black + label(0x0b) + ai_sleep + if_screen_fade_completed(0x2d) + goto_first(0x0b) + label(0x2d) + exit_level + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_16[] = { + local_timer_reset_start + guard_play_animation(0x6100, 0x0000, 0x0100, 0x04, 0x10) + label(0x08) + ai_sleep + if_local_timer_greater_than(0x1e0000, 0x2d) + goto_first(0x08) + label(0x2d) + guard_play_animation(0x6100, 0x0100, 0xffff, 0x04, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end + label(0x08) + ai_sleep + if_camera_is_in_bond_swirl(0x2d) + goto_first(0x08) + label(0x2d) + jump_to_ai_list(0xf8, 0x1104) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/UsetuppeteZ.c b/assets/obseg/setup/UsetuppeteZ.c index 5d8f11eb..046c00f4 100644 --- a/assets/obseg/setup/UsetuppeteZ.c +++ b/assets/obseg/setup/UsetuppeteZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1589,36 +1590,1132 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x02000301, 0x00040000 }; -u32 ai_1[] = { 0xad627272, 0x6d206272, 0x726d0a00, 0x02030352, 0x0032010a, 0x2c010302, 0x2cad0a0a, 0x0a676f0a, 0x0a0a00cb, 0x00cc0600, 0x00780204, 0x03010404 }; -u32 ai_26[] = { 0xae020803, 0xb4000258, 0x2c010802, 0x2c710038, 0xb7012c00, 0x2c0238b7, 0x00b4022c, 0xb9b5020a, 0x039c0001, 0x000038bb, 0x00002c01, 0x0a0238b7, 0x01680209, 0x03bb0000, 0x2c010902, 0x2c9a0000, 0x8000c364, 0x0ab6b802, 0x0b03010b, 0x020cb702, 0x58010904 }; -u32 ai_20[] = { 0x020303eb, 0x565500f8, 0x2c010302, 0x2c520064, 0x00f82c01, 0x03022c9a, 0x00004000, 0xecd700da, 0x020803dc, 0x2c010802, 0x2cf12c05, 0xfd000f02, 0x2cddeaed, 0x030303d5, 0x01000200, 0x0005f804, 0x1405fd00, 0x01025605, 0xfd000104 }; -u32 ai_19[] = { 0xd9fd00f7, 0x2c022ce6, 0x0000f610, 0x002c0210, 0x03650000, 0xa9036500, 0x00f6022c, 0x0a006bff, 0xffffff06, 0x10dbf400, 0x00ffae02, 0x0803b400, 0x00782c01, 0x08022ca4, 0x02000200, 0x005f0202, 0x0903b400, 0x012c2c01, 0x09022cda, 0x020a03dc, 0x2c010a02, 0x2cd20206, 0x03010604 }; -u32 ai_21[] = { 0x9a000001, 0x00020403, 0x9a000001, 0x009b0000, 0x02000355, 0x002c4155, 0x002e4155, 0x00314103, 0x55003442, 0x55003742, 0x55004342, 0x03550049, 0x4355004c, 0x4355004f, 0x43035500, 0x3b445500, 0x46445500, 0x5e440355, 0x005c4555, 0x00644503, 0x55005246, 0x55005546, 0x55005846, 0x0355006a, 0x4755006d, 0x47550070, 0x47035500, 0x73485500, 0x76480355, 0x007c4955, 0x00824903, 0x5500914a, 0x55008f4a, 0x5500944a, 0x03550089, 0x4b550084, 0x4b55008a, 0x4b035500, 0x974c5500, 0x9a4c5500, 0x9d4c0355, 0x00a34d55, 0x00a74d55, 0x00ac4d03, 0xac2a002d, 0xac2b002e, 0xac2c002f, 0xac2d0030, 0xac2e0031, 0xac2f0032, 0xac300034, 0x01040241, 0x03ad494e, 0x310a00ac, 0x2a0036ac, 0x2b0037ac, 0x2c0038ac, 0x2d0043ac, 0x2e003eac, 0x2f0049ac, 0x30003b01, 0x04024203, 0xad494e32, 0x0a00ac2a, 0x004cac2b, 0x004bac2c, 0x004dac2d, 0x0045ac2e, 0x0046ac2f, 0x0047ac30, 0x005e0104, 0x024303ad, 0x494e330a, 0x00ac2a00, 0x54ac2b00, 0x55ac2c00, 0x56ac2d00, 0x63ac2e00, 0x64ac2f00, 0x65ac3000, 0x3b010402, 0x4403ad49, 0x4e340a00, 0xac2a0069, 0xac2b006a, 0xac2c006b, 0xac2d006c, 0xac2e006d, 0xac2f006e, 0xac300070, 0x01040245, 0x03ad494e, 0x350a00ac, 0x2a006cac, 0x2b006dac, 0x2c006eac, 0x2d0055ac, 0x2e0072ac, 0x2f0073ac, 0x30007401, 0x04024603, 0xad494e36, 0x0a00ac2a, 0x0069ac2b, 0x006aac2c, 0x006bac2d, 0x006fac2e, 0x0070ac2f, 0x0071ac30, 0x00730104, 0x024703ad, 0x494e370a, 0x00ac2a00, 0x76ac2b00, 0x79ac2c00, 0x7cac2d00, 0x7fac2e00, 0x82ac2f00, 0x91ac3000, 0x63010402, 0x4803ad49, 0x4e380a00, 0xac2a0082, 0xac2b0089, 0xac2c0088, 0xac2d008e, 0xac2e008f, 0xac2f0093, 0xac300097, 0x01040249, 0x03ad494e, 0x390a00ac, 0x2a0085ac, 0x2b0086ac, 0x2c0084ac, 0x2d0093ac, 0x2e0094ac, 0x2f008eac, 0x30008f01, 0x04024a03, 0xad494e31, 0x300a00ac, 0x2a0099ac, 0x2b009cac, 0x2c009dac, 0x2d00a0ac, 0x2e00a6ac, 0x2f0081ac, 0x30008201, 0x04024b03, 0xad494e31, 0x310a00ac, 0x2a00a8ac, 0x2b00a9ac, 0x2c00aaac, 0x2d009cac, 0x2e009dac, 0x2f007fac, 0x30007c01, 0x04024c03, 0xad494e31, 0x320a00ac, 0x2a008bac, 0x2b00acac, 0x2c00a8ac, 0x2d00a9ac, 0x2e008fac, 0x2f008eac, 0x30008501, 0x04024d03, 0xad494e31, 0x330a00ac, 0x2a0085ac, 0x2b0089ac, 0x2c0087ac, 0x2d0088ac, 0x2e009aac, 0x2f0099ac, 0x30009601, 0x0402559a, 0x00000200, 0x9b000001, 0x00010404 }; -u32 ai_22[] = { 0x8e2aae02, 0x4e03b400, 0x04b00301, 0x4e02039c, 0x00000200, 0x09ae0208, 0x03b40001, 0x2c2c0108, 0x022c3120, 0x2c010302, 0x2cad7370, 0x61776e31, 0x00f306bd, 0x02ff2328, 0x04030000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7331204f, 0x4b210001, 0x03020903, 0x9c000001, 0x002c0109, 0x022c0103, 0x04000000 }; -u32 ai_23[] = { 0x8e2bae02, 0x4e03b400, 0x04b00301, 0x4e02039c, 0x00000200, 0x09ae0208, 0x03b40001, 0x682c0108, 0x022c3127, 0x2c010302, 0x2cad7370, 0x61776e32, 0x00f306bd, 0x20ff2328, 0x04040000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x03020697, 0x2d02ad63, 0x31204f4b, 0x21000103, 0x0209039c, 0x00000100, 0x2c010902, 0x2c010304, 0x8e2cae02, 0x4e03b400, 0x04b00301, 0x4e02039c, 0x00000200, 0x09ae0208, 0x03b40001, 0xa42c0108, 0x022c3121, 0x2c010302, 0x2cad7370, 0x61776e33, 0x00f306bd, 0x02ff2328, 0x04050000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7333204f, 0x4b210001, 0x03020903, 0x9c000001, 0x002c0109, 0x022c0103, 0x04000000 }; -u32 ai_24[] = { 0x8e2dae02, 0x4e03b400, 0x04b00301, 0x4e02039c, 0x00000200, 0x09ae0208, 0x03b40001, 0xe02c0108, 0x022c3128, 0x2c010302, 0x2cad7370, 0x61776e34, 0x00f306bd, 0x20ff2328, 0x04060000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x03020697, 0x2d02ad63, 0x32204f4b, 0x21000103, 0x0209039c, 0x00000100, 0x2c010902, 0x2c010304 }; -u32 ai_25[] = { 0x8e2eae02, 0x4e03b400, 0x04b00301, 0x4e02039c, 0x00000200, 0x09ae0208, 0x03b40002, 0x1c2c0108, 0x022c3122, 0x2c010302, 0x2cad7370, 0x61776e35, 0x00f306bd, 0x02ff2328, 0x04070000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7335204f, 0x4b210001, 0x03020903, 0x9c000001, 0x002c0109, 0x022c0103, 0x04000000, 0x8e2fae02, 0x4e03b400, 0x04b00301, 0x4e02039c, 0x00000200, 0x09ae0208, 0x03b40002, 0x582c0108, 0x022c3129, 0x2c010302, 0x2cad7370, 0x61776e36, 0x00f306bd, 0x20ff2328, 0x04080000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x03020697, 0x2f02ad63, 0x33204f4b, 0x21000103, 0x0209039c, 0x00000100, 0x2c010902, 0x2c010304, 0x8e30ae02, 0x4e03b400, 0x04b00301, 0x4e02039c, 0x00000200, 0x09ae0208, 0x03b40000, 0xb42c0108, 0x022c3123, 0x2c010302, 0x2cad7370, 0x61776e37, 0x00f306bd, 0x02ff2328, 0x04090000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7337204f, 0x4b210001, 0x03020903, 0x9c000001, 0x002c0109, 0x022c0103, 0x04000000 }; -u32 ai_2[] = { 0x8e20ad64, 0x310a0005, 0xfd040a04 }; -u32 ai_3[] = { 0x8e27ad64, 0x320a0005, 0xfd040b04 }; -u32 ai_4[] = { 0x8e21ad64, 0x330a0005, 0xfd040a04 }; -u32 ai_5[] = { 0x8e28ad64, 0x340a0005, 0xfd040b04 }; -u32 ai_6[] = { 0x8e22ad64, 0x350a0005, 0xfd040a04 }; -u32 ai_7[] = { 0x8e29ad64, 0x360a0005, 0xfd040b04 }; -u32 ai_8[] = { 0x8e23ad64, 0x370a0005, 0xfd040a04 }; -u32 ai_10[] = { 0x02000345, 0x28000101, 0x00020103, 0x4c032007, 0x4b00c808, 0x28090101, 0x0209032f, 0x064b0064, 0x08010902, 0x08033335, 0x8006036f, 0x202c6f02, 0x2c6f042c, 0x6f082c6f, 0x012c0801, 0x00022cad, 0x66726f6c, 0x6963001d, 0x020a032f, 0x064c012c, 0x06010902, 0x2821022f, 0xae020b03, 0xb40000f0, 0x2c010b02, 0x2c339100, 0x35c82e35, 0x962d3564, 0x2c010002, 0x2c91320a, 0x00930000, 0x00190010, 0x0038022d, 0x0a009400, 0x00001100, 0x10003802, 0x2e210038, 0x0238012f, 0x02060100, 0x020705fd, 0x04100400 }; -u32 ai_15[] = { 0xad0a2d2d, 0x2d2d3e64, 0x656c6574, 0x65210a00, 0x9a000020, 0x0023fd02, 0x05030105, 0x04000000 }; -u32 ai_16[] = { 0x23fd0205, 0x03010504 }; -u32 ai_9[] = { 0x022c3335, 0xdc573564, 0x388f0028, 0x9000008d, 0xe5bf00b8, 0x08000000, 0x002c022c, 0x00060238, 0x8f002890, 0x00148dcc, 0xbf00b808, 0x00000000, 0x2c022c02, 0x2c000602, 0x3b8f0028, 0x90001402, 0x2cbf00c1, 0x07800000, 0x002c022c, 0xbf00c107, 0x90000000, 0x0602578f, 0x00289000, 0x14022cbf, 0x00b91800, 0x00000006, 0x02588f00, 0x28900014, 0x022cbf00, 0xd3190000, 0x00000602, 0x069d0000, 0x004005fd, 0x040c0400 }; -u32 ai_11[] = { 0x023c4c03, 0x20074c01, 0x90382808, 0x02382a08, 0x0208034c, 0x01c2383c, 0x3d02382f, 0x3e010802, 0x3d3c2c00, 0x06023e03, 0x013c022c, 0x023f3335, 0x142c1a06, 0x022c3532, 0x2c0e0602, 0x2c353c2c, 0x1306022c, 0x35502c13, 0x06022c35, 0x642c1106, 0x022c3596, 0x2c120602, 0x2c35c82c, 0x14000100, 0x0006022c, 0x15000100, 0x00060206, 0x032f2c01, 0x06022c3c, 0x2c000802, 0x0803013c, 0x022c0301, 0x3f020705, 0xfd041104 }; -u32 ai_13[] = { 0x02040301, 0x04040000 }; -u32 ai_12[] = { 0xbf00d319, 0x00000000, 0x2c022cc0, 0x00de0000, 0x00002c02, 0x2c915093, 0x64925002, 0x04034b00, 0x64073c3f, 0x0104023f, 0x33022c35, 0xc82c1400, 0x01000006, 0x022c1500, 0x01000006, 0x0206032f, 0x2c010602, 0x2c3c2c00, 0x08020803, 0x0104022c, 0x03013f02, 0x0705fd00, 0x02040000 }; -u32 ai_14[] = { 0xbf00b808, 0x00000000, 0x2c022c91, 0x14931492, 0x3205fd00, 0x02040000 }; -u32 ai_27[] = { 0x860f0200, 0x039c0000, 0x20004499, 0x2b024199, 0x2d024299, 0x2f02439c, 0x00001000, 0x0b89010a, 0x9c000008, 0x00388904, 0x099c0000, 0x04003889, 0x08080238, 0x01000241, 0xad0a6d75, 0x72646572, 0x210a0088, 0x01023898, 0x2b020100, 0x0242ad0a, 0x6d757264, 0x6572210a, 0x00880102, 0x38982d02, 0x01000243, 0xad0a6d75, 0x72646572, 0x210a0088, 0x01023898, 0x2f020100, 0x0244ad0a, 0x66616c73, 0x65210a00, 0x87019b00, 0x00200001, 0x00020803, 0xc364079a, 0x00000400, 0x01000209, 0x03c36408, 0x9a000008, 0x00010002, 0x0a03c364, 0x099a0000, 0x10000100, 0x020b0301, 0x0b040000 }; -u32 ai_17[] = { 0x90002802, 0x03140021, 0x00000402, 0x0403462c, 0x3a2c3b2c, 0x322c3c2c, 0x0104022c, 0x3335962c, 0x16000100, 0x0008022c, 0x09ae0209, 0x033335fa, 0x2cb40000, 0xf0060109, 0x022c1400, 0x2100002c, 0x022c1600, 0x0100002c, 0x022c0208, 0x032f0601, 0x08020601, 0x03040000 }; -u32 ai_18[] = { 0x9d000008, 0x00020403, 0x3c2c30fd, 0x0b010402, 0x2c170001, 0x00002c02, 0x2c0209ae, 0xad68656c, 0x6c6f0a00, 0x02000330, 0xfd0c4c01, 0xf4184c00, 0x50179501, 0xb1b40006, 0x901ab400, 0x05a016b4, 0x0004b015, 0xb40003c0, 0x14b40002, 0xd013b400, 0x01e012b4, 0x0000f011, 0x01000211, 0xb400012c, 0x2cc3640b, 0x022c0100, 0x0212b400, 0x021c2cc3, 0x640c022c, 0x01000213, 0xb400030c, 0x2cc3640d, 0x022c0100, 0x0214b400, 0x03fc2cc3, 0x640e022c, 0x01000215, 0xb40004ec, 0x2cc3640f, 0x022c0100, 0x0216b400, 0x05dc2cc3, 0x6410022c, 0x01000217, 0x960138c3, 0x64110238, 0xb0940101, 0x000218c3, 0x64129a00, 0x04000000, 0x29021a03, 0x0033011a, 0x02339a00, 0x0800009a, 0x00020000, 0x1c00f502, 0x29034c01, 0x2c062f2c, 0x4dfd000f, 0x00f52c01, 0x29022c02, 0x06039c00, 0x0400002c, 0xc364139a, 0x00010000, 0x022c2201, 0x06020b02, 0x0c03010c, 0x04000000 }; -u32 ai_28[] = { 0x02040355, 0x002c2c01, 0x04022c33, 0x358038ad, 0x33204841, 0x52440a00, 0x0506040d, 0x0507040d, 0x0508040d, 0x050c040f, 0x050d040f, 0x050e040f, 0x00080238, 0xad352048, 0x4152440a, 0x00050604, 0x0f050704, 0x0f050804, 0x0f050c04, 0x0d050d04, 0x0d050e04, 0x0d000802, 0x08333580, 0x38ad3820, 0x48415244, 0x0a00050f, 0x040d0510, 0x040d0511, 0x040d0515, 0x040f0516, 0x040f0517, 0x040f0009, 0x0238ad31, 0x31204841, 0x52440a00, 0x050f040f, 0x0510040f, 0x0511040f, 0x0515040d, 0x0516040d, 0x0517040d, 0x00090209, 0x02060301, 0x06040000 }; -u32 ai_29[] = { 0x0204039c, 0x00080000, 0x06301f2c, 0x311f2c01, 0x04022c9a, 0x00040000, 0x02060301, 0x06040000 }; +u8 ai_0[] = { + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_1[] = { + debug_log 'b', 'r', 'r', 'm', ' ', 'b', 'r', 'r', 'm', '\n', '\0', + label(0x03) + ai_sleep + if_bond_distance_to_pad_less_than(0x3200, 0x0a01, 0x2c) + goto_first(0x03) + label(0x2c) + debug_log '\n', '\n', '\n', 'g', 'o', '\n', '\n', '\n', '\0', + vehicle_start_path(0x00) + vehicle_speed(0x0006, 0x7800) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_26[] = { + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x580200, 0x2c) + goto_first(0x08) + label(0x2c) + if_game_difficulty_greater_than(0x00, 0x38) + hud_countdown_set(0x2c01) + goto_next(0x2c) + label(0x38) + hud_countdown_set(0xb400) + label(0x2c) + hud_countdown_start + hud_countdown_show + label(0x0a) + ai_sleep + if_objective_bitfield_is_set_on(0x00000100, 0x38) + if_hud_countdown_less_than(0x0000, 0x2c) + goto_first(0x0a) + label(0x38) + hud_countdown_set(0x6801) + label(0x09) + ai_sleep + if_hud_countdown_less_than(0x0000, 0x2c) + goto_first(0x09) + label(0x2c) + objective_bitfield_set_on(0x00800000) + text_print_top(0x0a64) + hud_countdown_hide + hud_countdown_stop + label(0x0b) + ai_sleep + goto_first(0x0b) + label(0x0c) + hud_countdown_set(0x5802) + goto_first(0x09) + ai_list_end +}; +u8 ai_20[] = { + label(0x03) + ai_sleep + if_bond_is_dead(0x56) + if_bond_in_room_with_pad(0xf800, 0x2c) + goto_first(0x03) + label(0x2c) + if_bond_distance_to_pad_less_than(0x6400, 0xf800, 0x2c) + goto_first(0x03) + label(0x2c) + objective_bitfield_set_on(0x00400000) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x08) + label(0x2c) + if_objective_all_completed(0x2c) + jump_to_ai_list(0xfd, 0x0f00) + label(0x2c) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x01, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x1404) + jump_to_ai_list(0xfd, 0x0100) + label(0x56) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_19[] = { + chr_try_teleporting_to_pad(0xfd, 0xf700, 0x2c) + label(0x2c) + if_object_in_room_with_pad(0x00, 0xf600, 0x10) + goto_next(0x2c) + label(0x10) + ai_sleep + object_move_to_pad(0x00, 0xa900) + ai_sleep + object_move_to_pad(0x00, 0xf600) + label(0x2c) + guard_play_animation(0x6b00, 0xffff, 0xffff, 0x06, 0x10) + screen_fade_from_black + music_xtrack_play(0x00, 0x00, 0xff) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x780000, 0x2c) + goto_first(0x08) + label(0x2c) + object_flags_1_set_off(0x02, 0x00000200) + object_destroy(0x02) + label(0x09) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0x09) + label(0x2c) + screen_fade_to_black + label(0x0a) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x0a) + label(0x2c) + exit_level + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_21[] = { + objective_bitfield_set_on(0x00010000) + label(0x04) + ai_sleep + objective_bitfield_set_on(0x00010000) + objective_bitfield_set_off(0x00020000) + ai_sleep + if_bond_in_room_with_pad(0x2c00, 0x41) + if_bond_in_room_with_pad(0x2e00, 0x41) + if_bond_in_room_with_pad(0x3100, 0x41) + ai_sleep + if_bond_in_room_with_pad(0x3400, 0x42) + if_bond_in_room_with_pad(0x3700, 0x42) + if_bond_in_room_with_pad(0x4300, 0x42) + ai_sleep + if_bond_in_room_with_pad(0x4900, 0x43) + if_bond_in_room_with_pad(0x4c00, 0x43) + if_bond_in_room_with_pad(0x4f00, 0x43) + ai_sleep + if_bond_in_room_with_pad(0x3b00, 0x44) + if_bond_in_room_with_pad(0x4600, 0x44) + if_bond_in_room_with_pad(0x5e00, 0x44) + ai_sleep + if_bond_in_room_with_pad(0x5c00, 0x45) + if_bond_in_room_with_pad(0x6400, 0x45) + ai_sleep + if_bond_in_room_with_pad(0x5200, 0x46) + if_bond_in_room_with_pad(0x5500, 0x46) + if_bond_in_room_with_pad(0x5800, 0x46) + ai_sleep + if_bond_in_room_with_pad(0x6a00, 0x47) + if_bond_in_room_with_pad(0x6d00, 0x47) + if_bond_in_room_with_pad(0x7000, 0x47) + ai_sleep + if_bond_in_room_with_pad(0x7300, 0x48) + if_bond_in_room_with_pad(0x7600, 0x48) + ai_sleep + if_bond_in_room_with_pad(0x7c00, 0x49) + if_bond_in_room_with_pad(0x8200, 0x49) + ai_sleep + if_bond_in_room_with_pad(0x9100, 0x4a) + if_bond_in_room_with_pad(0x8f00, 0x4a) + if_bond_in_room_with_pad(0x9400, 0x4a) + ai_sleep + if_bond_in_room_with_pad(0x8900, 0x4b) + if_bond_in_room_with_pad(0x8400, 0x4b) + if_bond_in_room_with_pad(0x8a00, 0x4b) + ai_sleep + if_bond_in_room_with_pad(0x9700, 0x4c) + if_bond_in_room_with_pad(0x9a00, 0x4c) + if_bond_in_room_with_pad(0x9d00, 0x4c) + ai_sleep + if_bond_in_room_with_pad(0xa300, 0x4d) + if_bond_in_room_with_pad(0xa700, 0x4d) + if_bond_in_room_with_pad(0xac00, 0x4d) + ai_sleep + chr_set_pad_preset(0x2a, 0x2d00) + chr_set_pad_preset(0x2b, 0x2e00) + chr_set_pad_preset(0x2c, 0x2f00) + chr_set_pad_preset(0x2d, 0x3000) + chr_set_pad_preset(0x2e, 0x3100) + chr_set_pad_preset(0x2f, 0x3200) + chr_set_pad_preset(0x30, 0x3400) + goto_first(0x04) + label(0x41) + ai_sleep + debug_log 'I', 'N', '1', '\n', '\0', + chr_set_pad_preset(0x2a, 0x3600) + chr_set_pad_preset(0x2b, 0x3700) + chr_set_pad_preset(0x2c, 0x3800) + chr_set_pad_preset(0x2d, 0x4300) + chr_set_pad_preset(0x2e, 0x3e00) + chr_set_pad_preset(0x2f, 0x4900) + chr_set_pad_preset(0x30, 0x3b00) + goto_first(0x04) + label(0x42) + ai_sleep + debug_log 'I', 'N', '2', '\n', '\0', + chr_set_pad_preset(0x2a, 0x4c00) + chr_set_pad_preset(0x2b, 0x4b00) + chr_set_pad_preset(0x2c, 0x4d00) + chr_set_pad_preset(0x2d, 0x4500) + chr_set_pad_preset(0x2e, 0x4600) + chr_set_pad_preset(0x2f, 0x4700) + chr_set_pad_preset(0x30, 0x5e00) + goto_first(0x04) + label(0x43) + ai_sleep + debug_log 'I', 'N', '3', '\n', '\0', + chr_set_pad_preset(0x2a, 0x5400) + chr_set_pad_preset(0x2b, 0x5500) + chr_set_pad_preset(0x2c, 0x5600) + chr_set_pad_preset(0x2d, 0x6300) + chr_set_pad_preset(0x2e, 0x6400) + chr_set_pad_preset(0x2f, 0x6500) + chr_set_pad_preset(0x30, 0x3b00) + goto_first(0x04) + label(0x44) + ai_sleep + debug_log 'I', 'N', '4', '\n', '\0', + chr_set_pad_preset(0x2a, 0x6900) + chr_set_pad_preset(0x2b, 0x6a00) + chr_set_pad_preset(0x2c, 0x6b00) + chr_set_pad_preset(0x2d, 0x6c00) + chr_set_pad_preset(0x2e, 0x6d00) + chr_set_pad_preset(0x2f, 0x6e00) + chr_set_pad_preset(0x30, 0x7000) + goto_first(0x04) + label(0x45) + ai_sleep + debug_log 'I', 'N', '5', '\n', '\0', + chr_set_pad_preset(0x2a, 0x6c00) + chr_set_pad_preset(0x2b, 0x6d00) + chr_set_pad_preset(0x2c, 0x6e00) + chr_set_pad_preset(0x2d, 0x5500) + chr_set_pad_preset(0x2e, 0x7200) + chr_set_pad_preset(0x2f, 0x7300) + chr_set_pad_preset(0x30, 0x7400) + goto_first(0x04) + label(0x46) + ai_sleep + debug_log 'I', 'N', '6', '\n', '\0', + chr_set_pad_preset(0x2a, 0x6900) + chr_set_pad_preset(0x2b, 0x6a00) + chr_set_pad_preset(0x2c, 0x6b00) + chr_set_pad_preset(0x2d, 0x6f00) + chr_set_pad_preset(0x2e, 0x7000) + chr_set_pad_preset(0x2f, 0x7100) + chr_set_pad_preset(0x30, 0x7300) + goto_first(0x04) + label(0x47) + ai_sleep + debug_log 'I', 'N', '7', '\n', '\0', + chr_set_pad_preset(0x2a, 0x7600) + chr_set_pad_preset(0x2b, 0x7900) + chr_set_pad_preset(0x2c, 0x7c00) + chr_set_pad_preset(0x2d, 0x7f00) + chr_set_pad_preset(0x2e, 0x8200) + chr_set_pad_preset(0x2f, 0x9100) + chr_set_pad_preset(0x30, 0x6300) + goto_first(0x04) + label(0x48) + ai_sleep + debug_log 'I', 'N', '8', '\n', '\0', + chr_set_pad_preset(0x2a, 0x8200) + chr_set_pad_preset(0x2b, 0x8900) + chr_set_pad_preset(0x2c, 0x8800) + chr_set_pad_preset(0x2d, 0x8e00) + chr_set_pad_preset(0x2e, 0x8f00) + chr_set_pad_preset(0x2f, 0x9300) + chr_set_pad_preset(0x30, 0x9700) + goto_first(0x04) + label(0x49) + ai_sleep + debug_log 'I', 'N', '9', '\n', '\0', + chr_set_pad_preset(0x2a, 0x8500) + chr_set_pad_preset(0x2b, 0x8600) + chr_set_pad_preset(0x2c, 0x8400) + chr_set_pad_preset(0x2d, 0x9300) + chr_set_pad_preset(0x2e, 0x9400) + chr_set_pad_preset(0x2f, 0x8e00) + chr_set_pad_preset(0x30, 0x8f00) + goto_first(0x04) + label(0x4a) + ai_sleep + debug_log 'I', 'N', '1', '0', '\n', '\0', + chr_set_pad_preset(0x2a, 0x9900) + chr_set_pad_preset(0x2b, 0x9c00) + chr_set_pad_preset(0x2c, 0x9d00) + chr_set_pad_preset(0x2d, 0xa000) + chr_set_pad_preset(0x2e, 0xa600) + chr_set_pad_preset(0x2f, 0x8100) + chr_set_pad_preset(0x30, 0x8200) + goto_first(0x04) + label(0x4b) + ai_sleep + debug_log 'I', 'N', '1', '1', '\n', '\0', + chr_set_pad_preset(0x2a, 0xa800) + chr_set_pad_preset(0x2b, 0xa900) + chr_set_pad_preset(0x2c, 0xaa00) + chr_set_pad_preset(0x2d, 0x9c00) + chr_set_pad_preset(0x2e, 0x9d00) + chr_set_pad_preset(0x2f, 0x7f00) + chr_set_pad_preset(0x30, 0x7c00) + goto_first(0x04) + label(0x4c) + ai_sleep + debug_log 'I', 'N', '1', '2', '\n', '\0', + chr_set_pad_preset(0x2a, 0x8b00) + chr_set_pad_preset(0x2b, 0xac00) + chr_set_pad_preset(0x2c, 0xa800) + chr_set_pad_preset(0x2d, 0xa900) + chr_set_pad_preset(0x2e, 0x8f00) + chr_set_pad_preset(0x2f, 0x8e00) + chr_set_pad_preset(0x30, 0x8500) + goto_first(0x04) + label(0x4d) + ai_sleep + debug_log 'I', 'N', '1', '3', '\n', '\0', + chr_set_pad_preset(0x2a, 0x8500) + chr_set_pad_preset(0x2b, 0x8900) + chr_set_pad_preset(0x2c, 0x8700) + chr_set_pad_preset(0x2d, 0x8800) + chr_set_pad_preset(0x2e, 0x9a00) + chr_set_pad_preset(0x2f, 0x9900) + chr_set_pad_preset(0x30, 0x9600) + goto_first(0x04) + label(0x55) + objective_bitfield_set_on(0x00020000) + objective_bitfield_set_off(0x00010000) + goto_first(0x04) + ai_list_end +}; +u8 ai_22[] = { + guard_set_chr_num(0x2a) + local_timer_reset_start + label(0x4e) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4e) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0x08) + label(0x2c) + if_chr_does_not_exist(0x20, 0x2c) + goto_first(0x03) + label(0x2c) + debug_log 's', 'p', 'a', 'w', 'n', '1', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0304, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '1', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2c) + goto_first(0x09) + label(0x2c) + goto_first(0x03) + ai_list_end +}; +u8 ai_23[] = { + guard_set_chr_num(0x2b) + local_timer_reset_start + label(0x4e) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4e) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x680100, 0x2c) + goto_first(0x08) + label(0x2c) + if_chr_does_not_exist(0x27, 0x2c) + goto_first(0x03) + label(0x2c) + debug_log 's', 'p', 'a', 'w', 'n', '2', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x20, 0xff, 0x2823, 0x0404, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + chr_bitfield_set_on(0x2d, 0x02) + debug_log 'c', '1', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2c) + goto_first(0x09) + label(0x2c) + goto_first(0x03) + ai_list_end + guard_set_chr_num(0x2c) + local_timer_reset_start + label(0x4e) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4e) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0xa40100, 0x2c) + goto_first(0x08) + label(0x2c) + if_chr_does_not_exist(0x21, 0x2c) + goto_first(0x03) + label(0x2c) + debug_log 's', 'p', 'a', 'w', 'n', '3', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0504, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '3', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2c) + goto_first(0x09) + label(0x2c) + goto_first(0x03) + ai_list_end +}; +u8 ai_24[] = { + guard_set_chr_num(0x2d) + local_timer_reset_start + label(0x4e) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4e) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0xe00100, 0x2c) + goto_first(0x08) + label(0x2c) + if_chr_does_not_exist(0x28, 0x2c) + goto_first(0x03) + label(0x2c) + debug_log 's', 'p', 'a', 'w', 'n', '4', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x20, 0xff, 0x2823, 0x0604, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + chr_bitfield_set_on(0x2d, 0x02) + debug_log 'c', '2', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2c) + goto_first(0x09) + label(0x2c) + goto_first(0x03) + ai_list_end +}; +u8 ai_25[] = { + guard_set_chr_num(0x2e) + local_timer_reset_start + label(0x4e) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4e) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x1c0200, 0x2c) + goto_first(0x08) + label(0x2c) + if_chr_does_not_exist(0x22, 0x2c) + goto_first(0x03) + label(0x2c) + debug_log 's', 'p', 'a', 'w', 'n', '5', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0704, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '5', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2c) + goto_first(0x09) + label(0x2c) + goto_first(0x03) + ai_list_end + goto_next(0x00) + goto_next(0x8e) + if_guard_has_stopped_moving(0xae) + label(0x4e) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4e) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x580200, 0x2c) + goto_first(0x08) + label(0x2c) + if_chr_does_not_exist(0x29, 0x2c) + goto_first(0x03) + label(0x2c) + debug_log 's', 'p', 'a', 'w', 'n', '6', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x20, 0xff, 0x2823, 0x0804, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + chr_bitfield_set_on(0x2f, 0x02) + debug_log 'c', '3', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2c) + goto_first(0x09) + label(0x2c) + goto_first(0x03) + ai_list_end + guard_set_chr_num(0x30) + local_timer_reset_start + label(0x4e) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x03) + goto_first(0x4e) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x09) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x2c) + goto_first(0x08) + label(0x2c) + if_chr_does_not_exist(0x23, 0x2c) + goto_first(0x03) + label(0x2c) + debug_log 's', 'p', 'a', 'w', 'n', '7', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0904, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '7', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x2c) + goto_first(0x09) + label(0x2c) + goto_first(0x03) + ai_list_end +}; +u8 ai_2[] = { + guard_set_chr_num(0x20) + debug_log 'd', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0a04) + ai_list_end +}; +u8 ai_3[] = { + guard_set_chr_num(0x27) + debug_log 'd', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0b04) + ai_list_end +}; +u8 ai_4[] = { + guard_set_chr_num(0x21) + debug_log 'd', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0a04) + ai_list_end +}; +u8 ai_5[] = { + guard_set_chr_num(0x28) + debug_log 'd', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x0b04) + ai_list_end +}; +u8 ai_6[] = { + guard_set_chr_num(0x22) + debug_log 'd', '5', '\n', '\0', + jump_to_ai_list(0xfd, 0x0a04) + ai_list_end +}; +u8 ai_7[] = { + guard_set_chr_num(0x29) + debug_log 'd', '6', '\n', '\0', + jump_to_ai_list(0xfd, 0x0b04) + ai_list_end +}; +u8 ai_8[] = { + guard_set_chr_num(0x23) + debug_log 'd', '7', '\n', '\0', + jump_to_ai_list(0xfd, 0x0a04) + ai_list_end +}; +u8 ai_10[] = { + label(0x00) + ai_sleep + if_guard_is_targeted_by_bond(0x28) + goto_next(0x01) + goto_first(0x00) + label(0x01) + ai_sleep + if_guard_distance_to_bond_greater_than(0x2003, 0x07) + if_guard_distance_to_bond_less_than(0xc800, 0x08) + guard_try_running_to_bond_position(0x09) + goto_first(0x01) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_guard_distance_to_bond_less_than(0x6400, 0x08) + goto_first(0x09) + label(0x08) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x80, 0x06) + ai_sleep + guard_try_unknown6F(0x20, 0x2c) + guard_try_unknown6F(0x02, 0x2c) + guard_try_unknown6F(0x04, 0x2c) + guard_try_unknown6F(0x08, 0x2c) + guard_try_unknown6F(0x01, 0x2c) + guard_animation_stop + goto_first(0x00) + label(0x2c) + debug_log 'f', 'r', 'o', 'l', 'i', 'c', '\0', + guard_runs_to_pad_preset + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_guard_distance_to_bond_greater_than(0x2c01, 0x06) + goto_first(0x09) + label(0x28) + guard_surrenders + label(0x2f) + local_timer_reset_start + label(0x0b) + ai_sleep + if_local_timer_greater_than(0xf00000, 0x2c) + goto_first(0x0b) + label(0x2c) + random_generate_seed + guard_set_speed_rating(0x00) + if_random_seed_greater_than(0xc8, 0x2e) + if_random_seed_greater_than(0x96, 0x2d) + if_random_seed_greater_than(0x64, 0x2c) + goto_first(0x00) + label(0x2c) + guard_set_speed_rating(0x32) + guard_play_animation(0x9300, 0x0000, 0x1900, 0x00, 0x10) + goto_next(0x38) + label(0x2d) + guard_play_animation(0x9400, 0x0000, 0x1100, 0x00, 0x10) + goto_next(0x38) + label(0x2e) + guard_surrenders + goto_next(0x38) + label(0x38) + goto_first(0x2f) + label(0x06) + goto_first(0x00) + label(0x07) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_15[] = { + debug_log '\n', '-', '-', '-', '-', '>', 'd', 'e', 'l', 'e', 't', 'e', '!', '\n', '\0', + objective_bitfield_set_on(0x00200000) + chr_remove_instant(0xfd) + label(0x05) + ai_sleep + goto_first(0x05) + ai_list_end +}; +u8 ai_16[] = { + chr_remove_instant(0xfd) + label(0x05) + ai_sleep + goto_first(0x05) + ai_list_end +}; +u8 ai_9[] = { + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0xdc, 0x57) + if_random_seed_greater_than(0x64, 0x38) + guard_set_health_total(0x2800) + guard_set_armour(0x0000) + guard_set_grenade_probability(0xe5) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x2c) + label(0x2c) + goto_next(0x06) + label(0x38) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_grenade_probability(0xcc) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x2c) + label(0x2c) + label(0x2c) + goto_next(0x06) + label(0x3b) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + label(0x2c) + guard_try_spawning_item(0xc100, 0x07, 0x00000080, 0x2c) + label(0x2c) + guard_try_spawning_item(0xc100, 0x07, 0x00000090, 0x06) + label(0x57) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + label(0x2c) + guard_try_spawning_item(0xb900, 0x18, 0x00000000, 0x06) + label(0x58) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + label(0x2c) + guard_try_spawning_item(0xd300, 0x19, 0x00000000, 0x06) + label(0x06) + guard_flags_set_on(0x40000000) + jump_to_ai_list(0xfd, 0x0c04) + ai_list_end +}; +u8 ai_11[] = { + label(0x3c) + if_guard_distance_to_bond_greater_than(0x2003, 0x07) + if_guard_distance_to_bond_greater_than(0x9001, 0x38) + guard_try_running_to_bond_position(0x08) + label(0x38) + guard_try_sprinting_to_bond_position(0x08) + label(0x08) + ai_sleep + if_guard_distance_to_bond_greater_than(0xc201, 0x38) + if_guard_and_bond_within_line_of_sight(0x3d) + label(0x38) + if_guard_has_stopped_moving(0x3e) + goto_first(0x08) + label(0x3d) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_next(0x06) + label(0x3e) + ai_sleep + goto_first(0x3c) + label(0x2c) + label(0x3f) + random_generate_seed + if_random_seed_greater_than(0x14, 0x2c) + guard_try_throwing_grenade(0x06) + label(0x2c) + if_random_seed_greater_than(0x32, 0x2c) + guard_try_sidestepping(0x06) + label(0x2c) + if_random_seed_greater_than(0x3c, 0x2c) + guard_try_firing_roll(0x06) + label(0x2c) + if_random_seed_greater_than(0x50, 0x2c) + guard_try_firing_roll(0x06) + label(0x2c) + if_random_seed_greater_than(0x64, 0x2c) + guard_try_firing_walk(0x06) + label(0x2c) + if_random_seed_greater_than(0x96, 0x2c) + guard_try_firing_run(0x06) + label(0x2c) + if_random_seed_greater_than(0xc8, 0x2c) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x2c) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x06) + label(0x2c) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_next(0x08) + label(0x08) + ai_sleep + goto_first(0x3c) + label(0x2c) + ai_sleep + goto_first(0x3f) + label(0x07) + jump_to_ai_list(0xfd, 0x1104) + ai_list_end +}; +u8 ai_13[] = { + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_12[] = { + guard_try_spawning_item(0xd300, 0x19, 0x00000000, 0x2c) + label(0x2c) + guard_try_spawning_hat(0xde00, 0x00000000, 0x2c) + label(0x2c) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x64) + guard_set_argh_rating(0x50) + label(0x04) + ai_sleep + if_guard_distance_to_bond_less_than(0x6400, 0x07) + if_guard_and_bond_within_line_of_sight(0x3f) + goto_first(0x04) + label(0x3f) + random_generate_seed + label(0x2c) + if_random_seed_greater_than(0xc8, 0x2c) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x2c) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x06) + label(0x2c) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_next(0x08) + label(0x08) + ai_sleep + goto_first(0x04) + label(0x2c) + ai_sleep + goto_first(0x3f) + label(0x07) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_14[] = { + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x2c) + label(0x2c) + guard_set_speed_rating(0x14) + guard_set_accuracy_rating(0x14) + guard_set_argh_rating(0x32) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_27[] = { + local_byte_2_set(0x0f) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x44) + if_chr_bitfield_is_set_on(0x2b, 0x02, 0x41) + if_chr_bitfield_is_set_on(0x2d, 0x02, 0x42) + if_chr_bitfield_is_set_on(0x2f, 0x02, 0x43) + if_objective_bitfield_is_set_on(0x00100000, 0x0b) + if_local_byte_2_less_than(0x01, 0x0a) + if_objective_bitfield_is_set_on(0x00080000, 0x38) + if_local_byte_2_less_than(0x04, 0x09) + if_objective_bitfield_is_set_on(0x00040000, 0x38) + if_local_byte_2_less_than(0x08, 0x08) + label(0x38) + goto_first(0x00) + label(0x41) + debug_log '\n', 'm', 'u', 'r', 'd', 'e', 'r', '!', '\n', '\0', + local_byte_2_subtract(0x01) + label(0x38) + chr_bitfield_set_off(0x2b, 0x02) + goto_first(0x00) + label(0x42) + debug_log '\n', 'm', 'u', 'r', 'd', 'e', 'r', '!', '\n', '\0', + local_byte_2_subtract(0x01) + label(0x38) + chr_bitfield_set_off(0x2d, 0x02) + goto_first(0x00) + label(0x43) + debug_log '\n', 'm', 'u', 'r', 'd', 'e', 'r', '!', '\n', '\0', + local_byte_2_subtract(0x01) + label(0x38) + chr_bitfield_set_off(0x2f, 0x02) + goto_first(0x00) + label(0x44) + debug_log '\n', 'f', 'a', 'l', 's', 'e', '!', '\n', '\0', + local_byte_2_add(0x01) + objective_bitfield_set_off(0x00200000) + goto_first(0x00) + label(0x08) + ai_sleep + text_print_top(0x0764) + objective_bitfield_set_on(0x00040000) + goto_first(0x00) + label(0x09) + ai_sleep + text_print_top(0x0864) + objective_bitfield_set_on(0x00080000) + goto_first(0x00) + label(0x0a) + ai_sleep + text_print_top(0x0964) + objective_bitfield_set_on(0x00100000) + goto_first(0x00) + label(0x0b) + ai_sleep + goto_first(0x0b) + ai_list_end +}; +u8 ai_17[] = { + guard_set_armour(0x2800) + label(0x03) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x04) + label(0x04) + ai_sleep + if_guard_shot_from_bond_missed(0x2c) + if_guard_see_another_guard_shot(0x2c) + if_guard_see_another_guard_die(0x2c) + if_guard_sees_bond(0x2c) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_first(0x04) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x96, 0x2c) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x08) + label(0x2c) + guard_kneel + local_timer_reset_start + label(0x09) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x2c) + if_local_timer_greater_than(0xf00000, 0x06) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x2c) + label(0x2c) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x06) + goto_first(0x08) + label(0x06) + goto_first(0x03) + ai_list_end +}; +u8 ai_18[] = { + guard_flags_set_on(0x00080000) + label(0x04) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2c) + if_chr_dying_or_dead(0xfd, 0x0b) + goto_first(0x04) + label(0x2c) + guard_try_facing_target(0x0100, 0x0000, 0x2c) + label(0x2c) + label(0x09) + local_timer_reset_start + debug_log 'h', 'e', 'l', 'l', 'o', '\n', '\0', + label(0x00) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x0c) + if_guard_distance_to_bond_greater_than(0xf401, 0x18) + if_guard_distance_to_bond_greater_than(0x5000, 0x17) + guard_bitfield_set_off(0x01) + local_timer_start + if_local_timer_greater_than(0x900600, 0x1a) + if_local_timer_greater_than(0xa00500, 0x16) + if_local_timer_greater_than(0xb00400, 0x15) + if_local_timer_greater_than(0xc00300, 0x14) + if_local_timer_greater_than(0xd00200, 0x13) + if_local_timer_greater_than(0xe00100, 0x12) + if_local_timer_greater_than(0xf00000, 0x11) + goto_first(0x00) + label(0x11) + if_local_timer_greater_than(0x2c0100, 0x2c) + text_print_top(0x0b64) + label(0x2c) + goto_first(0x00) + label(0x12) + if_local_timer_greater_than(0x1c0200, 0x2c) + text_print_top(0x0c64) + label(0x2c) + goto_first(0x00) + label(0x13) + if_local_timer_greater_than(0x0c0300, 0x2c) + text_print_top(0x0d64) + label(0x2c) + goto_first(0x00) + label(0x14) + if_local_timer_greater_than(0xfc0300, 0x2c) + text_print_top(0x0e64) + label(0x2c) + goto_first(0x00) + label(0x15) + if_local_timer_greater_than(0xec0400, 0x2c) + text_print_top(0x0f64) + label(0x2c) + goto_first(0x00) + label(0x16) + if_local_timer_greater_than(0xdc0500, 0x2c) + text_print_top(0x1064) + label(0x2c) + goto_first(0x00) + label(0x17) + if_guard_bitfield_is_set_on(0x01, 0x38) + text_print_top(0x1164) + label(0x38) + local_timer_stop + guard_bitfield_set_on(0x01) + goto_first(0x00) + label(0x18) + text_print_top(0x1264) + objective_bitfield_set_on(0x00000400) + goto_next(0x29) + label(0x1a) + ai_sleep + goto_next(0x33) + goto_first(0x1a) + label(0x33) + objective_bitfield_set_on(0x00000800) + objective_bitfield_set_on(0x00000200) + guard_runs_to_pad(0xf500) + label(0x29) + ai_sleep + if_guard_distance_to_bond_greater_than(0x2c01, 0x06) + if_guard_has_stopped_moving(0x2c) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0xf500, 0x2c) + goto_first(0x29) + label(0x2c) + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x2c) + text_print_top(0x1364) + objective_bitfield_set_on(0x00000100) + label(0x2c) + guard_remove_fade + goto_first(0x06) + label(0x0b) + label(0x0c) + ai_sleep + goto_first(0x0c) + ai_list_end +}; +u8 ai_28[] = { + label(0x04) + ai_sleep + if_bond_in_room_with_pad(0x2c00, 0x2c) + goto_first(0x04) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x80, 0x38) + debug_log '3', ' ', 'H', 'A', 'R', 'D', '\n', '\0', + jump_to_ai_list(0x06, 0x0d04) + jump_to_ai_list(0x07, 0x0d04) + jump_to_ai_list(0x08, 0x0d04) + jump_to_ai_list(0x0c, 0x0f04) + jump_to_ai_list(0x0d, 0x0f04) + jump_to_ai_list(0x0e, 0x0f04) + goto_next(0x08) + label(0x38) + debug_log '5', ' ', 'H', 'A', 'R', 'D', '\n', '\0', + jump_to_ai_list(0x06, 0x0f04) + jump_to_ai_list(0x07, 0x0f04) + jump_to_ai_list(0x08, 0x0f04) + jump_to_ai_list(0x0c, 0x0d04) + jump_to_ai_list(0x0d, 0x0d04) + jump_to_ai_list(0x0e, 0x0d04) + goto_next(0x08) + label(0x08) + random_generate_seed + if_random_seed_greater_than(0x80, 0x38) + debug_log '8', ' ', 'H', 'A', 'R', 'D', '\n', '\0', + jump_to_ai_list(0x0f, 0x0d04) + jump_to_ai_list(0x10, 0x0d04) + jump_to_ai_list(0x11, 0x0d04) + jump_to_ai_list(0x15, 0x0f04) + jump_to_ai_list(0x16, 0x0f04) + jump_to_ai_list(0x17, 0x0f04) + goto_next(0x09) + label(0x38) + debug_log '1', '1', ' ', 'H', 'A', 'R', 'D', '\n', '\0', + jump_to_ai_list(0x0f, 0x0f04) + jump_to_ai_list(0x10, 0x0f04) + jump_to_ai_list(0x11, 0x0f04) + jump_to_ai_list(0x15, 0x0d04) + jump_to_ai_list(0x16, 0x0d04) + jump_to_ai_list(0x17, 0x0d04) + goto_next(0x09) + label(0x09) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_29[] = { + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00000800, 0x06) + if_chr_dying_or_dead(0x1f, 0x2c) + if_chr_does_not_exist(0x1f, 0x2c) + goto_first(0x04) + label(0x2c) + objective_bitfield_set_on(0x00000400) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/UsetuprunZ.c b/assets/obseg/setup/UsetuprunZ.c index f369227b..8ea1ac67 100644 --- a/assets/obseg/setup/UsetuprunZ.c +++ b/assets/obseg/setup/UsetuprunZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -839,28 +840,624 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x200005fd, 0x00070400 }; -u32 ai_1[] = { 0x200105fd, 0x00070400 }; -u32 ai_3[] = { 0x8e19ad64, 0x310a0005, 0xfd040304 }; -u32 ai_4[] = { 0x8e1aad64, 0x320a0005, 0xfd040304 }; -u32 ai_5[] = { 0x8e1bad64, 0x330a0005, 0xfd040304 }; -u32 ai_6[] = { 0x8e1cad64, 0x340a0005, 0xfd040304 }; -u32 ai_7[] = { 0x8e1dad64, 0x350a0005, 0xfd040304 }; -u32 ai_8[] = { 0x8e1ead64, 0x360a0005, 0xfd040304 }; -u32 ai_9[] = { 0x8e1fad64, 0x370a0005, 0xfd040304 }; -u32 ai_2[] = { 0x02293335, 0xa0363550, 0x338f0028, 0x9000008d, 0xe5bf00c1, 0x07000000, 0x00290229, 0x00060233, 0x8f002890, 0x000a8dcc, 0xbf00b808, 0x00000000, 0x29022902, 0x29000602, 0x368f0028, 0x90001402, 0x29bf00c1, 0x07800000, 0x00290229, 0xbf00c107, 0x90000000, 0x06020605, 0xfd040b04 }; -u32 ai_10[] = { 0x02374c01, 0x90332807, 0x02332a07, 0x0207034c, 0x01c2333c, 0x3802332f, 0x39010702, 0x383c2900, 0x06023903, 0x01370229, 0x023a3335, 0x0a291a06, 0x02293532, 0x290e0602, 0x29353c29, 0x13060229, 0x35502913, 0x06022935, 0x64291106, 0x02293596, 0x29120602, 0x2935c829, 0x14000100, 0x00060229, 0x15000100, 0x00060206, 0x032f2901, 0x0602293c, 0x29000702, 0x07030137, 0x02290301, 0x3a040000 }; -u32 ai_13[] = { 0x9a000001, 0x00020403, 0x5500a53d, 0x5500a83e, 0x5500933f, 0x55009140, 0x55008e41, 0x035500ac, 0x42550084, 0x43550068, 0x44550066, 0x45550035, 0x46010402, 0x3d03ac20, 0x001aac21, 0x001eac22, 0x006dac23, 0x00abac24, 0x008cac25, 0x00abac26, 0x008c0104, 0x023e03ac, 0x20008fac, 0x210071ac, 0x22006dac, 0x2300abac, 0x24008cac, 0x2500abac, 0x26008c01, 0x04023f03, 0xac20008f, 0xac210071, 0xac22006d, 0xac2300ab, 0xac24008e, 0xac2500ab, 0xac26008e, 0x01040240, 0x03ac2000, 0x67ac2100, 0x66ac2200, 0x71ac2300, 0x8eac2400, 0x06ac2500, 0x8eac2600, 0x06010402, 0x4103ac20, 0x001aac21, 0x001eac22, 0x0071ac23, 0x0005ac24, 0x0006ac25, 0x0005ac26, 0x00060104, 0x024203ac, 0x200067ac, 0x210005ac, 0x22001bac, 0x23001fac, 0x24001dac, 0x25001fac, 0x26001d01, 0x04024303, 0xac20001d, 0xac21001f, 0xac22001c, 0xac23008e, 0xac240066, 0xac25008e, 0xac260066, 0x01040244, 0x03ac2000, 0x8eac2100, 0x71ac2200, 0x1fac2300, 0x1bac2400, 0x1eac2500, 0x1bac2600, 0x1e010402, 0x4503ac20, 0x001cac21, 0x001dac22, 0x008eac23, 0x001aac24, 0x0071ac25, 0x001aac26, 0x00710104, 0x024603ac, 0x20001fac, 0x21001aac, 0x22008fac, 0x23001eac, 0x24008eac, 0x25001eac, 0x26008e01, 0x04040000 }; -u32 ai_14[] = { 0x8e20ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x02293119, 0x29010302, 0x29ad7370, 0x61776e31, 0x00f306bd, 0x02ff2328, 0x04040000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7331204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000 }; -u32 ai_15[] = { 0x8e21ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311a, 0x29010302, 0x29ad7370, 0x61776e32, 0x00f306bd, 0x02ff2328, 0x04050000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7332204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000, 0x8e22ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311b, 0x29010302, 0x29ad7370, 0x61776e33, 0x00f306bd, 0x02ff2328, 0x04060000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7333204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000 }; -u32 ai_16[] = { 0x8e23ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311c, 0x29010302, 0x29ad7370, 0x61776e34, 0x00f306bd, 0x02ff2328, 0x04070000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7334204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000 }; -u32 ai_17[] = { 0x8e24ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311d, 0x29010302, 0x29ad7370, 0x61776e35, 0x00f306bd, 0x02ff2328, 0x04080000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7335204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000 }; -u32 ai_18[] = { 0x8e25ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311e, 0x29010302, 0x29ad7370, 0x61776e36, 0x00f306bd, 0x25ff2328, 0x04090000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7336204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000, 0x8e26ae02, 0x4703b400, 0x00780301, 0x4702039c, 0x00000200, 0x08ae0207, 0x03b40000, 0x78290107, 0x0229311f, 0x29010302, 0x29ad7370, 0x61776e37, 0x00f306bd, 0x25ff2328, 0x040a0000, 0x001006ad, 0x2d3e6661, 0x696c0001, 0x030206ad, 0x7337204f, 0x4b210001, 0x03020803, 0x9c000001, 0x00290108, 0x02290103, 0x04000000 }; -u32 ai_19[] = { 0x0204035b, 0x03330007, 0x02335c03, 0x29010402, 0x29560208, 0xc3700801, 0x040207c3, 0x70099a00, 0x00040005, 0xfd000102, 0x08eb489a, 0x00000800, 0xa3030002, 0x0000a603, 0x04000000, 0xecd700da, 0x020903dc, 0x29010902, 0x29f12905, 0xfd000f02, 0x29ed0303, 0x03d50600, 0x020000dd, 0xeadbf400, 0x00ff6503, 0x004c9a00, 0x001000ae, 0x0303020a, 0x03dc2901, 0x0a022902, 0x0b03b400, 0x00dc2901, 0x0b0229da, 0x020c03dc, 0x29010c02, 0x29d205fd, 0x00010248, 0x05fd0001, 0x04000000 }; -u32 ai_11[] = { 0x0a0063ff, 0xffffff04, 0x10020603, 0x01060400 }; -u32 ai_20[] = { 0x020703cf, 0x29010702, 0x2905f804, 0x0c020603, 0x01060400 }; -u32 ai_12[] = { 0xcd000000, 0x00020703, 0x9c000010, 0x00290107, 0x0229cd02, 0x6c0000ab, 0x004c0a00, 0x01ffffff, 0xff04100a, 0x0001ffff, 0xffff0410, 0x02060301, 0x06040000 }; -u32 ai_21[] = { 0x0207039c, 0x00001000, 0x29010702, 0x29ae0204, 0x03b40000, 0x3c290104, 0x0229c400, 0xf8ff0206, 0x03010604 }; +u8 ai_0[] = { + guard_start_patrol(0x00) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x01) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_3[] = { + guard_set_chr_num(0x19) + debug_log 'd', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_4[] = { + guard_set_chr_num(0x1a) + debug_log 'd', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_5[] = { + guard_set_chr_num(0x1b) + debug_log 'd', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_6[] = { + guard_set_chr_num(0x1c) + debug_log 'd', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_7[] = { + guard_set_chr_num(0x1d) + debug_log 'd', '5', '\n', '\0', + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_8[] = { + guard_set_chr_num(0x1e) + debug_log 'd', '6', '\n', '\0', + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_9[] = { + guard_set_chr_num(0x1f) + debug_log 'd', '7', '\n', '\0', + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_2[] = { + label(0x29) + random_generate_seed + if_random_seed_greater_than(0xa0, 0x36) + if_random_seed_greater_than(0x50, 0x33) + guard_set_health_total(0x2800) + guard_set_armour(0x0000) + guard_set_grenade_probability(0xe5) + guard_try_spawning_item(0xc100, 0x07, 0x00000000, 0x29) + label(0x29) + goto_next(0x06) + label(0x33) + guard_set_health_total(0x2800) + guard_set_armour(0x0a00) + guard_set_grenade_probability(0xcc) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x29) + label(0x29) + label(0x29) + goto_next(0x06) + label(0x36) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + label(0x29) + guard_try_spawning_item(0xc100, 0x07, 0x00000080, 0x29) + label(0x29) + guard_try_spawning_item(0xc100, 0x07, 0x00000090, 0x06) + label(0x06) + jump_to_ai_list(0xfd, 0x0b04) + ai_list_end +}; +u8 ai_10[] = { + label(0x37) + if_guard_distance_to_bond_greater_than(0x9001, 0x33) + guard_try_running_to_bond_position(0x07) + label(0x33) + guard_try_sprinting_to_bond_position(0x07) + label(0x07) + ai_sleep + if_guard_distance_to_bond_greater_than(0xc201, 0x33) + if_guard_and_bond_within_line_of_sight(0x38) + label(0x33) + if_guard_has_stopped_moving(0x39) + goto_first(0x07) + label(0x38) + if_guard_and_bond_within_line_of_sight(0x29) + goto_next(0x06) + label(0x39) + ai_sleep + goto_first(0x37) + label(0x29) + label(0x3a) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x29) + guard_try_throwing_grenade(0x06) + label(0x29) + if_random_seed_greater_than(0x32, 0x29) + guard_try_sidestepping(0x06) + label(0x29) + if_random_seed_greater_than(0x3c, 0x29) + guard_try_firing_roll(0x06) + label(0x29) + if_random_seed_greater_than(0x50, 0x29) + guard_try_firing_roll(0x06) + label(0x29) + if_random_seed_greater_than(0x64, 0x29) + guard_try_firing_walk(0x06) + label(0x29) + if_random_seed_greater_than(0x96, 0x29) + guard_try_firing_run(0x06) + label(0x29) + if_random_seed_greater_than(0xc8, 0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x29) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x06) + label(0x29) + if_guard_and_bond_within_line_of_sight(0x29) + goto_next(0x07) + label(0x07) + ai_sleep + goto_first(0x37) + label(0x29) + ai_sleep + goto_first(0x3a) + ai_list_end +}; +u8 ai_13[] = { + objective_bitfield_set_on(0x00010000) + label(0x04) + ai_sleep + if_bond_in_room_with_pad(0xa500, 0x3d) + if_bond_in_room_with_pad(0xa800, 0x3e) + if_bond_in_room_with_pad(0x9300, 0x3f) + if_bond_in_room_with_pad(0x9100, 0x40) + if_bond_in_room_with_pad(0x8e00, 0x41) + ai_sleep + if_bond_in_room_with_pad(0xac00, 0x42) + if_bond_in_room_with_pad(0x8400, 0x43) + if_bond_in_room_with_pad(0x6800, 0x44) + if_bond_in_room_with_pad(0x6600, 0x45) + if_bond_in_room_with_pad(0x3500, 0x46) + goto_first(0x04) + label(0x3d) + ai_sleep + chr_set_pad_preset(0x20, 0x1a00) + chr_set_pad_preset(0x21, 0x1e00) + chr_set_pad_preset(0x22, 0x6d00) + chr_set_pad_preset(0x23, 0xab00) + chr_set_pad_preset(0x24, 0x8c00) + chr_set_pad_preset(0x25, 0xab00) + chr_set_pad_preset(0x26, 0x8c00) + goto_first(0x04) + label(0x3e) + ai_sleep + chr_set_pad_preset(0x20, 0x8f00) + chr_set_pad_preset(0x21, 0x7100) + chr_set_pad_preset(0x22, 0x6d00) + chr_set_pad_preset(0x23, 0xab00) + chr_set_pad_preset(0x24, 0x8c00) + chr_set_pad_preset(0x25, 0xab00) + chr_set_pad_preset(0x26, 0x8c00) + goto_first(0x04) + label(0x3f) + ai_sleep + chr_set_pad_preset(0x20, 0x8f00) + chr_set_pad_preset(0x21, 0x7100) + chr_set_pad_preset(0x22, 0x6d00) + chr_set_pad_preset(0x23, 0xab00) + chr_set_pad_preset(0x24, 0x8e00) + chr_set_pad_preset(0x25, 0xab00) + chr_set_pad_preset(0x26, 0x8e00) + goto_first(0x04) + label(0x40) + ai_sleep + chr_set_pad_preset(0x20, 0x6700) + chr_set_pad_preset(0x21, 0x6600) + chr_set_pad_preset(0x22, 0x7100) + chr_set_pad_preset(0x23, 0x8e00) + chr_set_pad_preset(0x24, 0x0600) + chr_set_pad_preset(0x25, 0x8e00) + chr_set_pad_preset(0x26, 0x0600) + goto_first(0x04) + label(0x41) + ai_sleep + chr_set_pad_preset(0x20, 0x1a00) + chr_set_pad_preset(0x21, 0x1e00) + chr_set_pad_preset(0x22, 0x7100) + chr_set_pad_preset(0x23, 0x0500) + chr_set_pad_preset(0x24, 0x0600) + chr_set_pad_preset(0x25, 0x0500) + chr_set_pad_preset(0x26, 0x0600) + goto_first(0x04) + label(0x42) + ai_sleep + chr_set_pad_preset(0x20, 0x6700) + chr_set_pad_preset(0x21, 0x0500) + chr_set_pad_preset(0x22, 0x1b00) + chr_set_pad_preset(0x23, 0x1f00) + chr_set_pad_preset(0x24, 0x1d00) + chr_set_pad_preset(0x25, 0x1f00) + chr_set_pad_preset(0x26, 0x1d00) + goto_first(0x04) + label(0x43) + ai_sleep + chr_set_pad_preset(0x20, 0x1d00) + chr_set_pad_preset(0x21, 0x1f00) + chr_set_pad_preset(0x22, 0x1c00) + chr_set_pad_preset(0x23, 0x8e00) + chr_set_pad_preset(0x24, 0x6600) + chr_set_pad_preset(0x25, 0x8e00) + chr_set_pad_preset(0x26, 0x6600) + goto_first(0x04) + label(0x44) + ai_sleep + chr_set_pad_preset(0x20, 0x8e00) + chr_set_pad_preset(0x21, 0x7100) + chr_set_pad_preset(0x22, 0x1f00) + chr_set_pad_preset(0x23, 0x1b00) + chr_set_pad_preset(0x24, 0x1e00) + chr_set_pad_preset(0x25, 0x1b00) + chr_set_pad_preset(0x26, 0x1e00) + goto_first(0x04) + label(0x45) + ai_sleep + chr_set_pad_preset(0x20, 0x1c00) + chr_set_pad_preset(0x21, 0x1d00) + chr_set_pad_preset(0x22, 0x8e00) + chr_set_pad_preset(0x23, 0x1a00) + chr_set_pad_preset(0x24, 0x7100) + chr_set_pad_preset(0x25, 0x1a00) + chr_set_pad_preset(0x26, 0x7100) + goto_first(0x04) + label(0x46) + ai_sleep + chr_set_pad_preset(0x20, 0x1f00) + chr_set_pad_preset(0x21, 0x1a00) + chr_set_pad_preset(0x22, 0x8f00) + chr_set_pad_preset(0x23, 0x1e00) + chr_set_pad_preset(0x24, 0x8e00) + chr_set_pad_preset(0x25, 0x1e00) + chr_set_pad_preset(0x26, 0x8e00) + goto_first(0x04) + ai_list_end +}; +u8 ai_14[] = { + guard_set_chr_num(0x20) + local_timer_reset_start + label(0x47) + ai_sleep + if_local_timer_greater_than(0x780000, 0x03) + goto_first(0x47) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x08) + local_timer_reset_start + label(0x07) + ai_sleep + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x07) + label(0x29) + if_chr_does_not_exist(0x19, 0x29) + goto_first(0x03) + label(0x29) + debug_log 's', 'p', 'a', 'w', 'n', '1', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0404, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '1', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x29) + goto_first(0x08) + label(0x29) + goto_first(0x03) + ai_list_end +}; +u8 ai_15[] = { + guard_set_chr_num(0x21) + local_timer_reset_start + label(0x47) + ai_sleep + if_local_timer_greater_than(0x780000, 0x03) + goto_first(0x47) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x08) + local_timer_reset_start + label(0x07) + ai_sleep + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x07) + label(0x29) + if_chr_does_not_exist(0x1a, 0x29) + goto_first(0x03) + label(0x29) + debug_log 's', 'p', 'a', 'w', 'n', '2', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0504, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '2', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x29) + goto_first(0x08) + label(0x29) + goto_first(0x03) + ai_list_end + goto_next(0x00) + goto_next(0x8e) + guard_remove_fade + local_timer_reset_start + label(0x47) + ai_sleep + if_local_timer_greater_than(0x780000, 0x03) + goto_first(0x47) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x08) + local_timer_reset_start + label(0x07) + ai_sleep + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x07) + label(0x29) + if_chr_does_not_exist(0x1b, 0x29) + goto_first(0x03) + label(0x29) + debug_log 's', 'p', 'a', 'w', 'n', '3', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0604, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '3', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x29) + goto_first(0x08) + label(0x29) + goto_first(0x03) + ai_list_end +}; +u8 ai_16[] = { + guard_set_chr_num(0x23) + local_timer_reset_start + label(0x47) + ai_sleep + if_local_timer_greater_than(0x780000, 0x03) + goto_first(0x47) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x08) + local_timer_reset_start + label(0x07) + ai_sleep + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x07) + label(0x29) + if_chr_does_not_exist(0x1c, 0x29) + goto_first(0x03) + label(0x29) + debug_log 's', 'p', 'a', 'w', 'n', '4', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0704, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '4', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x29) + goto_first(0x08) + label(0x29) + goto_first(0x03) + ai_list_end +}; +u8 ai_17[] = { + guard_set_chr_num(0x24) + local_timer_reset_start + label(0x47) + ai_sleep + if_local_timer_greater_than(0x780000, 0x03) + goto_first(0x47) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x08) + local_timer_reset_start + label(0x07) + ai_sleep + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x07) + label(0x29) + if_chr_does_not_exist(0x1d, 0x29) + goto_first(0x03) + label(0x29) + debug_log 's', 'p', 'a', 'w', 'n', '5', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x02, 0xff, 0x2823, 0x0804, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '5', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x29) + goto_first(0x08) + label(0x29) + goto_first(0x03) + ai_list_end +}; +u8 ai_18[] = { + guard_set_chr_num(0x25) + local_timer_reset_start + label(0x47) + ai_sleep + if_local_timer_greater_than(0x780000, 0x03) + goto_first(0x47) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x08) + local_timer_reset_start + label(0x07) + ai_sleep + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x07) + label(0x29) + if_chr_does_not_exist(0x1e, 0x29) + goto_first(0x03) + label(0x29) + debug_log 's', 'p', 'a', 'w', 'n', '6', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x25, 0xff, 0x2823, 0x0904, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '6', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x29) + goto_first(0x08) + label(0x29) + goto_first(0x03) + ai_list_end + goto_next(0x00) + goto_next(0x8e) + alarm_off + local_timer_reset_start + label(0x47) + ai_sleep + if_local_timer_greater_than(0x780000, 0x03) + goto_first(0x47) + label(0x03) + if_objective_bitfield_is_set_on(0x00020000, 0x08) + local_timer_reset_start + label(0x07) + ai_sleep + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x07) + label(0x29) + if_chr_does_not_exist(0x1f, 0x29) + goto_first(0x03) + label(0x29) + debug_log 's', 'p', 'a', 'w', 'n', '7', '\0', + if_bond_damage_and_pickups_disabled(0x06) + chr_try_spawning_at_pad(0x25, 0xff, 0x2823, 0x0a04, 0x10000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x06) + debug_log 's', '7', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x29) + goto_first(0x08) + label(0x29) + goto_first(0x03) + ai_list_end +}; +u8 ai_19[] = { + label(0x04) + ai_sleep + if_object_not_destroyed(0x03, 0x33) + goto_next(0x07) + label(0x33) + if_object_was_activated(0x03, 0x29) + goto_first(0x04) + label(0x29) + if_bond_collected_object(0x02, 0x08) + text_print_top(0x0870) + goto_first(0x04) + label(0x07) + text_print_top(0x0970) + objective_bitfield_set_on(0x00040000) + jump_to_ai_list(0xfd, 0x0100) + label(0x08) + if_bond_is_dead(0x48) + objective_bitfield_set_on(0x00080000) + object_flags_1_set_on(0x03, 0x00000200) + object_flags_2_set_on(0x03, 0x00000004) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x09) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x09) + label(0x29) + if_objective_all_completed(0x29) + jump_to_ai_list(0xfd, 0x0f00) + label(0x29) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x06, 0x0200, 0x0000) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + screen_fade_from_black + music_xtrack_play(0x00, 0x00, 0xff) + object_move_to_pad(0x03, 0x4c00) + objective_bitfield_set_on(0x00100000) + local_timer_reset_start + ai_sleep + ai_sleep + label(0x0a) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x0a) + label(0x29) + label(0x0b) + ai_sleep + if_local_timer_greater_than(0xdc0000, 0x29) + goto_first(0x0b) + label(0x29) + screen_fade_to_black + label(0x0c) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x0c) + label(0x29) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x48) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_11[] = { + guard_play_animation(0x6300, 0xffff, 0xffff, 0x04, 0x10) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_20[] = { + label(0x07) + ai_sleep + if_camera_is_in_bond_swirl(0x29) + goto_first(0x07) + label(0x29) + jump_to_ai_list(0xf8, 0x0c04) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_12[] = { + aircraft_rotor_speed(0x0000, 0x0000) + label(0x07) + ai_sleep + if_objective_bitfield_is_set_on(0x00100000, 0x29) + goto_first(0x07) + label(0x29) + aircraft_rotor_speed(0x6c02, 0x0000) + guard_set_pad_preset(0x4c00) + guard_play_animation(0x0100, 0xffff, 0xffff, 0x04, 0x10) + guard_play_animation(0x0100, 0xffff, 0xffff, 0x04, 0x10) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_21[] = { + label(0x07) + ai_sleep + if_objective_bitfield_is_set_on(0x00100000, 0x29) + goto_first(0x07) + label(0x29) + local_timer_reset_start + label(0x04) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x29) + goto_first(0x04) + label(0x29) + sfx_play(0xf800, 0xff) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/UsetupsevbZ.c b/assets/obseg/setup/UsetupsevbZ.c index da724e34..460283a2 100644 --- a/assets/obseg/setup/UsetupsevbZ.c +++ b/assets/obseg/setup/UsetupsevbZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1307,35 +1308,926 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x200005fd, 0x00070400 }; -u32 ai_1[] = { 0x200105fd, 0x00070400 }; -u32 ai_2[] = { 0x200205fd, 0x00070400 }; -u32 ai_3[] = { 0x02040205, 0x03333580, 0x09000802, 0x08ad310a, 0x00ab0064, 0x002f0209, 0xad320a00, 0xab006000, 0x2f022f06, 0x040405fd, 0x04050400 }; -u32 ai_4[] = { 0xad670a00, 0x1e232802, 0x2f03691a, 0x0902302f, 0x074dfd00, 0x0a232807, 0x012f0207, 0x9602349c, 0x00000001, 0x2a023407, 0x022a5200, 0x1900632a, 0x022a0604, 0x0505fd04, 0x060209c3, 0x74240600, 0x0205fd04, 0x15040000 }; -u32 ai_5[] = { 0x1e006302, 0x08032f2a, 0x52000a00, 0x632a0108, 0x022a9601, 0x2a060405, 0x05fd0407, 0x022a9602, 0x2a060405, 0x05fd0408, 0x022a0704 }; -u32 ai_6[] = { 0xad4a310a, 0x00170001, 0x00002a02, 0x2aaec374, 0x1a020003, 0x55005e2a, 0x0007022a, 0xb40004b0, 0x18b40003, 0x8411b400, 0x012c0f01, 0x00020fb4, 0x0001682a, 0xc3741b02, 0x2a010002, 0x11b40003, 0xc02ac374, 0x1c022a01, 0x00021803, 0x00070118, 0x02079401, 0x07040000 }; -u32 ai_7[] = { 0xad4a320a, 0x00170001, 0x00002a02, 0x2aaec374, 0x1d020003, 0x55005e2a, 0x0007022a, 0xb40004b0, 0x18b40003, 0x8411b400, 0x012c0f01, 0x00020fb4, 0x0001682a, 0xc3741e02, 0x2a010002, 0x11b40003, 0xc02ac374, 0x1f022a01, 0x00021803, 0x00070118, 0x02079402, 0x07040000 }; -u32 ai_8[] = { 0x9d000000, 0x8002059c, 0x00000400, 0x0269032f, 0x96020603, 0x08520019, 0x005f2a01, 0x05022a1e, 0x005f0208, 0x032f2a4d, 0xfd000500, 0x5f2a0108, 0x022a9601, 0x2a060409, 0x05fd040a, 0x022a0604, 0x0905fd04, 0x0b020603, 0x08010502, 0x0206040c, 0x05fd040d, 0x022fa703, 0x20000000, 0x9a000004, 0x00010504 }; -u32 ai_9[] = { 0xad4e310a, 0x0008aec3, 0x74090200, 0x0355005e, 0x2a000702, 0x2ab4000a, 0x8c18b400, 0x096017b4, 0x00083416, 0xb4000708, 0x15b40005, 0xdc14b400, 0x04b013b4, 0x00038412, 0xb4000258, 0x11b40001, 0x2c100100, 0x0210b400, 0x01682ac3, 0x740a022a, 0x01000211, 0xb4000294, 0x2ac3740b, 0x022a0100, 0x0212b400, 0x03c02ac3, 0x740c022a, 0x01000213, 0xb40004ec, 0x2ac3740d, 0x022a0100, 0x0214b400, 0x06182ac3, 0x740e022a, 0x01000215, 0xb4000744, 0x2ac3740f, 0x022a0100, 0x0216b400, 0x08702ac3, 0x7410022a, 0x01000217, 0xb400099c, 0x2ac37411, 0x022a0100, 0x021803c3, 0x74120007, 0x01180207, 0x94010704 }; -u32 ai_10[] = { 0xad4e320a, 0x0008ae02, 0x00035500, 0x5e2a0007, 0x022ab400, 0x0bb818b4, 0x000a8c17, 0xb4000960, 0x16b40008, 0x3415b400, 0x070814b4, 0x0005dc13, 0xb40004b0, 0x12b40003, 0x8411b400, 0x025810b4, 0x00012c0f, 0x0100020f, 0xb4000168, 0x2ac37413, 0x022a0100, 0x0210b400, 0x02942ac3, 0x7414022a, 0x01000211, 0xb40003c0, 0x2ac37415, 0x022a0100, 0x0212b400, 0x04ec2ac3, 0x7416022a, 0x01000213, 0xb4000618, 0x2ac37417, 0x022a0100, 0x0214b400, 0x07442ac3, 0x7418022a, 0x01000215, 0xb4000870, 0x2a022a01, 0x000216b4, 0x00099c2a, 0x022a0100, 0x0217b400, 0x0ac82a02, 0x2a010002, 0x18030007, 0x01180207, 0x94029a00, 0x00000107, 0x04000000 }; -u32 ai_11[] = { 0x02050308, 0x01050400 }; -u32 ai_12[] = { 0x9a000008, 0x00020203, 0x96042a4d, 0xfd00fa00, 0x392f022a, 0x4b00642a, 0x2805022a, 0x29050102, 0x0205034b, 0x0019082f, 0x07010502, 0x33010202, 0x08080209, 0x034b0008, 0x1d4c0028, 0x07010902, 0x1d47401e, 0x48c01ec3, 0x74200d00, 0x0a021ec3, 0x7421022b, 0xfa000a02, 0x0a032f0b, 0x010a020b, 0x01080207, 0x0102022f, 0x05fd040e, 0x04000000 }; -u32 ai_13[] = { 0xc3742602, 0x041c0039, 0x022f0355, 0x0019114d, 0xfd003c00, 0x39082f2a, 0x012f022a, 0x4dfd003c, 0x00390801, 0x0402081e, 0x00390230, 0x03550019, 0x112f2a4d, 0xfd000500, 0x392a0130, 0x022a4dfd, 0x000a0039, 0x09010802, 0x09170008, 0x272b2a02, 0x2aae9a00, 0x00200002, 0x00035500, 0x19114234, 0xd9000039, 0x34023403, 0x5b233400, 0x1102345b, 0x24340011, 0x0234022a, 0xb4000384, 0x11b40002, 0x5810b400, 0x012c0f02, 0x01032f2a, 0x0100022a, 0x3335642a, 0x0a00ac00, 0x00004500, 0x109a0000, 0x40000100, 0x022a3596, 0x2a0a00ad, 0x0000004a, 0x00109a00, 0x00400001, 0x00022a35, 0xc82a0a00, 0xae000000, 0x4f00109a, 0x00004000, 0x0100022a, 0x0a00af00, 0x00005900, 0x109a0000, 0x40000100, 0x020fb400, 0x01682ac3, 0x7427022a, 0x01000210, 0xb4000294, 0x2ac37428, 0x022a0100, 0x021103c3, 0x74290007, 0x0207ad67, 0x6f009404, 0x9a000020, 0x0005fd04, 0x16040000 }; -u32 ai_28[] = { 0x0205039c, 0x00004000, 0x2a010502, 0x2aae0208, 0x03b40000, 0x3c2a0108, 0x022a3335, 0x8034c400, 0xb807c507, 0x24000002, 0x349b0000, 0x40000105, 0x020705fd, 0x00010400 }; -u32 ai_21[] = { 0x0204ad47, 0x4f001c00, 0x78020803, 0x2f2a0108, 0x022a4dfd, 0x00140078, 0x2a010402, 0x2a170001, 0x00002a02, 0x2a020703, 0x01070400 }; -u32 ai_25[] = { 0xad68656c, 0x6c6f0002, 0x05033736, 0x01050236, 0x0235aead, 0x210a0003, 0x31232a00, 0x34022af3, 0x34bd26ff, 0x00320410, 0x00000001, 0x2a023402, 0x2a033124, 0x2a003402, 0x2af334bd, 0x26ff0032, 0x04110000, 0x00012a02, 0x34022a03, 0x31252a00, 0x34022af3, 0x34bd26ff, 0x00320412, 0x00000001, 0x2a023402, 0x2a033126, 0x2a003402, 0x2af334bd, 0x26ff0032, 0x04130000, 0x00012a02, 0x34022a03, 0x31272a00, 0x34022af3, 0x34bd26ff, 0x00320414, 0x00000001, 0x2a023402, 0x0703b400, 0x07082a01, 0x07022a01, 0x35040000 }; -u32 ai_15[] = { 0x8e23ad68, 0x310a0005, 0xfd040f04 }; -u32 ai_16[] = { 0x8e24ad68, 0x320a0005, 0xfd040f04 }; -u32 ai_17[] = { 0x8e25ad68, 0x330a0005, 0xfd040f04 }; -u32 ai_18[] = { 0x8e26ad68, 0x340a0005, 0xfd040f04 }; -u32 ai_19[] = { 0x8e27ad68, 0x350a0005, 0xfd040f04 }; -u32 ai_14[] = { 0x022a3335, 0x64373532, 0x348f003c, 0x911e931e, 0x8d33bf00, 0xb8080000, 0x00002a02, 0x2ac000dc, 0x00000000, 0x07000702, 0x348f0028, 0x90003c91, 0x1e931ebf, 0x00c10780, 0x0000002a, 0x022ac000, 0xde000000, 0x002a022a, 0xbf00c107, 0x90000000, 0x07000702, 0x378f003c, 0x90005091, 0x329332c0, 0x00dd0000, 0x00002a02, 0x2abf00cd, 0x06800000, 0x002a022a, 0xbf00cd06, 0x90000000, 0x07020733, 0x35803405, 0xfd000d02, 0x3405fd04, 0x18040000 }; -u32 ai_24[] = { 0x0200035b, 0x022a9a00, 0x00100002, 0x2a9c0000, 0x01002a30, 0x0009022a, 0x9c000002, 0x002a5600, 0x08022a01, 0x00020856, 0x012a0100, 0x022a9a00, 0x00020001, 0x0002099a, 0x00000100, 0xc37422c2, 0x74230100, 0x04000000 }; -u32 ai_26[] = { 0x0205039c, 0x00002000, 0x2a010502, 0x2ad00500, 0x10d00600, 0x0fc400e3, 0x00c60027, 0x570000d0, 0x070003d0, 0x08000f03, 0xd0090003, 0xd00a0005, 0xc400c601, 0xc6012757, 0x0000d00b, 0x000fd00c, 0x001303d0, 0x0d0005d0, 0x0e000cc4, 0x00e302c6, 0x02275700, 0x00d00f00, 0x08d01000, 0x0d03d011, 0x000dd012, 0x000ec400, 0xe303c603, 0x27570000, 0xd013000d, 0xd0140002, 0x03d01500, 0x10d01600, 0x0dc400c6, 0x04c60427, 0x570000d0, 0x170008d0, 0x180011d0, 0x190003ae, 0xc400a205, 0xc7050000, 0x00000209, 0x03b40000, 0x782a0109, 0x022a03c7, 0x057ef407, 0x08b7003c, 0xf40000ff, 0xb9b5020a, 0x03bb000f, 0x2a010a02, 0x2ad00500, 0x2ed00600, 0x2ec400e3, 0x00c60027, 0x570000d0, 0x07002ed0, 0x08002e03, 0xd009002e, 0xd00a002e, 0xc400c601, 0xc6012757, 0x0000d00b, 0x002ed00c, 0x002e03d0, 0x0d002ed0, 0x0e002ec4, 0x00e302c6, 0x02275700, 0x00d00f00, 0x2ed01000, 0x2e03d011, 0x002ed012, 0x002ec400, 0xe303c603, 0x27570000, 0xd013002e, 0xd014002e, 0x03d01500, 0x2ed01600, 0x2ec400c6, 0x04c60427, 0x570000d0, 0x17002ed0, 0x18002ed0, 0x19002e02, 0x0b03bb00, 0x002a010b, 0x022af6b6, 0xb8020c03, 0x010c0400 }; -u32 ai_27[] = { 0x020403eb, 0x3e550033, 0x2a010402, 0x2aecd700, 0xda020803, 0xdc2a0108, 0x022af12a, 0x05fd000f, 0x022addea, 0xed030303, 0xd51b0002, 0x0000a100, 0x00000400, 0x54000078, 0x2ad90000, 0x322a022a, 0x05000416, 0xa1f80000, 0x0400d9f8, 0x00772a02, 0x2a05f804, 0x1705fd00, 0x01023e05, 0xfd000104 }; -u32 ai_22[] = { 0x0a0059ff, 0xffffff06, 0x10ae03db, 0x020803b4, 0x0000f02a, 0x0108022a, 0xda0209dc, 0x2a030109, 0x022ad202, 0x07030107, 0x04000000 }; -u32 ai_20[] = { 0x02041500, 0x2100002a, 0x4607022a, 0x02080346, 0x073c2a01, 0x08022a16, 0x00010000, 0x2a022a02, 0x09034607, 0x2f2a0109, 0x022a0104, 0x020705fd, 0x000d0400 }; -u32 ai_23[] = { 0x02382808, 0x0208034c, 0x01f4343c, 0x3902342f, 0x3a010802, 0x393c2a00, 0x07023a03, 0x0138022a, 0x023b3335, 0x0a2a1a07, 0x022a3532, 0x2a0e0702, 0x2a353c2a, 0x1307022a, 0x35502a13, 0x07022a35, 0x642a1107, 0x022a3596, 0x2a120702, 0x2a35c82a, 0x14000100, 0x0007022a, 0x15000100, 0x00070207, 0x032f2a01, 0x07022a3c, 0x2a000802, 0x08030138, 0x022a0301, 0x3b040000 }; +u8 ai_0[] = { + guard_start_patrol(0x00) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x01) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_2[] = { + guard_start_patrol(0x02) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_3[] = { + label(0x04) + label(0x05) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x80, 0x09) + goto_next(0x08) + label(0x08) + debug_log '1', '\n', '\0', + guard_set_pad_preset(0x6400) + goto_next(0x2f) + label(0x09) + debug_log '2', '\n', '\0', + guard_set_pad_preset(0x6000) + goto_next(0x2f) + label(0x2f) + set_return_ai_list(0x0404) + jump_to_ai_list(0xfd, 0x0504) + ai_list_end +}; +u8 ai_4[] = { + debug_log 'g', '\n', '\0', + guard_walks_to_pad(0x2823) + label(0x2f) + ai_sleep + if_door_has_been_opened_before(0x1a, 0x09) + label(0x30) + if_guard_has_stopped_moving(0x07) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x07) + goto_first(0x2f) + label(0x07) + if_guard_bitfield_is_set_on(0x02, 0x34) + if_objective_bitfield_is_set_on(0x01000000, 0x2a) + label(0x34) + jump_to_return_ai_list + label(0x2a) + if_bond_distance_to_pad_less_than(0x1900, 0x6300, 0x2a) + label(0x2a) + set_return_ai_list(0x0504) + jump_to_ai_list(0xfd, 0x0604) + label(0x09) + text_print_top(0x2474) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x1504) + ai_list_end +}; +u8 ai_5[] = { + guard_walks_to_pad(0x6300) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2a) + if_bond_distance_to_pad_less_than(0x0a00, 0x6300, 0x2a) + goto_first(0x08) + label(0x2a) + if_guard_bitfield_is_set_on(0x01, 0x2a) + set_return_ai_list(0x0504) + jump_to_ai_list(0xfd, 0x0704) + label(0x2a) + if_guard_bitfield_is_set_on(0x02, 0x2a) + set_return_ai_list(0x0504) + jump_to_ai_list(0xfd, 0x0804) + label(0x2a) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_6[] = { + debug_log 'J', '1', '\n', '\0', + guard_try_facing_target(0x0100, 0x0000, 0x2a) + label(0x2a) + local_timer_reset_start + text_print_top(0x1a74) + label(0x00) + ai_sleep + if_bond_in_room_with_pad(0x5e00, 0x2a) + goto_next(0x07) + label(0x2a) + if_local_timer_greater_than(0xb00400, 0x18) + if_local_timer_greater_than(0x840300, 0x11) + if_local_timer_greater_than(0x2c0100, 0x0f) + goto_first(0x00) + label(0x0f) + if_local_timer_greater_than(0x680100, 0x2a) + text_print_top(0x1b74) + label(0x2a) + goto_first(0x00) + label(0x11) + if_local_timer_greater_than(0xc00300, 0x2a) + text_print_top(0x1c74) + label(0x2a) + goto_first(0x00) + label(0x18) + ai_sleep + goto_next(0x07) + goto_first(0x18) + label(0x07) + guard_bitfield_set_on(0x01) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_7[] = { + debug_log 'J', '2', '\n', '\0', + guard_try_facing_target(0x0100, 0x0000, 0x2a) + label(0x2a) + local_timer_reset_start + text_print_top(0x1d74) + label(0x00) + ai_sleep + if_bond_in_room_with_pad(0x5e00, 0x2a) + goto_next(0x07) + label(0x2a) + if_local_timer_greater_than(0xb00400, 0x18) + if_local_timer_greater_than(0x840300, 0x11) + if_local_timer_greater_than(0x2c0100, 0x0f) + goto_first(0x00) + label(0x0f) + if_local_timer_greater_than(0x680100, 0x2a) + text_print_top(0x1e74) + label(0x2a) + goto_first(0x00) + label(0x11) + if_local_timer_greater_than(0xc00300, 0x2a) + text_print_top(0x1f74) + label(0x2a) + goto_first(0x00) + label(0x18) + ai_sleep + goto_next(0x07) + goto_first(0x18) + label(0x07) + guard_bitfield_set_on(0x02) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_8[] = { + guard_flags_set_on(0x80000000) + label(0x05) + if_objective_bitfield_is_set_on(0x00040000, 0x02) + if_door_has_been_opened_before(0x03, 0x2f) + if_guard_bitfield_is_set_on(0x02, 0x06) + ai_sleep + guard_animation_stop + if_bond_distance_to_pad_less_than(0x1900, 0x5f00, 0x2a) + goto_first(0x05) + label(0x2a) + guard_walks_to_pad(0x5f00) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2a) + if_chr_distance_to_pad_less_than(0xfd, 0x0500, 0x5f00, 0x2a) + goto_first(0x08) + label(0x2a) + if_guard_bitfield_is_set_on(0x01, 0x2a) + set_return_ai_list(0x0904) + jump_to_ai_list(0xfd, 0x0a04) + label(0x2a) + set_return_ai_list(0x0904) + jump_to_ai_list(0xfd, 0x0b04) + label(0x06) + ai_sleep + guard_animation_stop + goto_first(0x05) + label(0x02) + set_return_ai_list(0x0c04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2f) + object_flags_2_set_off(0x03, 0x00000020) + objective_bitfield_set_on(0x00040000) + goto_first(0x05) + ai_list_end +}; +u8 ai_9[] = { + debug_log 'N', '1', '\n', '\0', + guard_animation_stop + local_timer_reset_start + text_print_top(0x0974) + label(0x00) + ai_sleep + if_bond_in_room_with_pad(0x5e00, 0x2a) + goto_next(0x07) + label(0x2a) + if_local_timer_greater_than(0x8c0a00, 0x18) + if_local_timer_greater_than(0x600900, 0x17) + if_local_timer_greater_than(0x340800, 0x16) + if_local_timer_greater_than(0x080700, 0x15) + if_local_timer_greater_than(0xdc0500, 0x14) + if_local_timer_greater_than(0xb00400, 0x13) + if_local_timer_greater_than(0x840300, 0x12) + if_local_timer_greater_than(0x580200, 0x11) + if_local_timer_greater_than(0x2c0100, 0x10) + goto_first(0x00) + label(0x10) + if_local_timer_greater_than(0x680100, 0x2a) + text_print_top(0x0a74) + label(0x2a) + goto_first(0x00) + label(0x11) + if_local_timer_greater_than(0x940200, 0x2a) + text_print_top(0x0b74) + label(0x2a) + goto_first(0x00) + label(0x12) + if_local_timer_greater_than(0xc00300, 0x2a) + text_print_top(0x0c74) + label(0x2a) + goto_first(0x00) + label(0x13) + if_local_timer_greater_than(0xec0400, 0x2a) + text_print_top(0x0d74) + label(0x2a) + goto_first(0x00) + label(0x14) + if_local_timer_greater_than(0x180600, 0x2a) + text_print_top(0x0e74) + label(0x2a) + goto_first(0x00) + label(0x15) + if_local_timer_greater_than(0x440700, 0x2a) + text_print_top(0x0f74) + label(0x2a) + goto_first(0x00) + label(0x16) + if_local_timer_greater_than(0x700800, 0x2a) + text_print_top(0x1074) + label(0x2a) + goto_first(0x00) + label(0x17) + if_local_timer_greater_than(0x9c0900, 0x2a) + text_print_top(0x1174) + label(0x2a) + goto_first(0x00) + label(0x18) + ai_sleep + text_print_top(0x1274) + goto_next(0x07) + goto_first(0x18) + label(0x07) + guard_bitfield_set_on(0x01) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_10[] = { + debug_log 'N', '2', '\n', '\0', + guard_animation_stop + local_timer_reset_start + label(0x00) + ai_sleep + if_bond_in_room_with_pad(0x5e00, 0x2a) + goto_next(0x07) + label(0x2a) + if_local_timer_greater_than(0xb80b00, 0x18) + if_local_timer_greater_than(0x8c0a00, 0x17) + if_local_timer_greater_than(0x600900, 0x16) + if_local_timer_greater_than(0x340800, 0x15) + if_local_timer_greater_than(0x080700, 0x14) + if_local_timer_greater_than(0xdc0500, 0x13) + if_local_timer_greater_than(0xb00400, 0x12) + if_local_timer_greater_than(0x840300, 0x11) + if_local_timer_greater_than(0x580200, 0x10) + if_local_timer_greater_than(0x2c0100, 0x0f) + goto_first(0x00) + label(0x0f) + if_local_timer_greater_than(0x680100, 0x2a) + text_print_top(0x1374) + label(0x2a) + goto_first(0x00) + label(0x10) + if_local_timer_greater_than(0x940200, 0x2a) + text_print_top(0x1474) + label(0x2a) + goto_first(0x00) + label(0x11) + if_local_timer_greater_than(0xc00300, 0x2a) + text_print_top(0x1574) + label(0x2a) + goto_first(0x00) + label(0x12) + if_local_timer_greater_than(0xec0400, 0x2a) + text_print_top(0x1674) + label(0x2a) + goto_first(0x00) + label(0x13) + if_local_timer_greater_than(0x180600, 0x2a) + text_print_top(0x1774) + label(0x2a) + goto_first(0x00) + label(0x14) + if_local_timer_greater_than(0x440700, 0x2a) + text_print_top(0x1874) + label(0x2a) + goto_first(0x00) + label(0x15) + if_local_timer_greater_than(0x700800, 0x2a) + label(0x2a) + goto_first(0x00) + label(0x16) + if_local_timer_greater_than(0x9c0900, 0x2a) + label(0x2a) + goto_first(0x00) + label(0x17) + if_local_timer_greater_than(0xc80a00, 0x2a) + label(0x2a) + goto_first(0x00) + label(0x18) + ai_sleep + goto_next(0x07) + goto_first(0x18) + label(0x07) + guard_bitfield_set_on(0x02) + objective_bitfield_set_on(0x01000000) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_11[] = { + label(0x05) + ai_sleep + guard_animation_stop + goto_first(0x05) + ai_list_end +}; +u8 ai_12[] = { + objective_bitfield_set_on(0x00080000) + label(0x02) + ai_sleep + if_guard_bitfield_is_set_on(0x04, 0x2a) + if_chr_distance_to_pad_less_than(0xfd, 0xfa00, 0x3900, 0x2f) + label(0x2a) + if_guard_distance_to_bond_less_than(0x6400, 0x2a) + guard_try_running_to_bond_position(0x05) + label(0x2a) + guard_try_walking_to_bond_position(0x05) + goto_first(0x02) + label(0x05) + ai_sleep + if_guard_distance_to_bond_less_than(0x1900, 0x08) + if_guard_has_stopped_moving(0x07) + goto_first(0x05) + label(0x33) + goto_first(0x02) + label(0x08) + guard_animation_stop + label(0x09) + ai_sleep + if_guard_distance_to_bond_less_than(0x0800, 0x1d) + if_guard_distance_to_bond_greater_than(0x2800, 0x07) + goto_first(0x09) + label(0x1d) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x1e) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x1e) + text_print_top(0x2074) + guard_looks_around_self + goto_next(0x0a) + label(0x1e) + text_print_top(0x2174) + label(0x2b) + guard_raises_arms + goto_next(0x0a) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x0b) + goto_first(0x0a) + label(0x0b) + goto_first(0x08) + label(0x07) + goto_first(0x02) + label(0x2f) + jump_to_ai_list(0xfd, 0x0e04) + ai_list_end +}; +u8 ai_13[] = { + text_print_top(0x2674) + label(0x04) + guard_runs_to_pad(0x3900) + label(0x2f) + ai_sleep + if_bond_in_room_with_pad(0x1900, 0x11) + if_chr_distance_to_pad_less_than(0xfd, 0x3c00, 0x3900, 0x08) + if_guard_has_stopped_moving(0x2a) + goto_first(0x2f) + label(0x2a) + if_chr_distance_to_pad_less_than(0xfd, 0x3c00, 0x3900, 0x08) + goto_first(0x04) + label(0x08) + guard_walks_to_pad(0x3900) + label(0x30) + ai_sleep + if_bond_in_room_with_pad(0x1900, 0x11) + if_guard_has_stopped_moving(0x2a) + if_chr_distance_to_pad_less_than(0xfd, 0x0500, 0x3900, 0x2a) + goto_first(0x30) + label(0x2a) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x3900, 0x09) + goto_first(0x08) + label(0x09) + guard_try_facing_target(0x0800, 0x2b27, 0x2a) + label(0x2a) + local_timer_reset_start + objective_bitfield_set_on(0x00200000) + label(0x00) + ai_sleep + if_bond_in_room_with_pad(0x1900, 0x11) + if_guard_is_on_screen(0x34) + chr_try_teleporting_to_pad(0x00, 0x3900, 0x34) + label(0x34) + ai_sleep + if_object_not_destroyed(0x23, 0x34) + goto_next(0x11) + label(0x34) + if_object_not_destroyed(0x24, 0x34) + goto_next(0x11) + label(0x34) + label(0x2a) + if_local_timer_greater_than(0x840300, 0x11) + if_local_timer_greater_than(0x580200, 0x10) + if_local_timer_greater_than(0x2c0100, 0x0f) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x2a) + goto_first(0x00) + label(0x2a) + random_generate_seed + if_random_seed_greater_than(0x64, 0x2a) + guard_play_animation(0xac00, 0x0000, 0x4500, 0x00, 0x10) + objective_bitfield_set_on(0x00400000) + goto_first(0x00) + label(0x2a) + if_random_seed_greater_than(0x96, 0x2a) + guard_play_animation(0xad00, 0x0000, 0x4a00, 0x00, 0x10) + objective_bitfield_set_on(0x00400000) + goto_first(0x00) + label(0x2a) + if_random_seed_greater_than(0xc8, 0x2a) + guard_play_animation(0xae00, 0x0000, 0x4f00, 0x00, 0x10) + objective_bitfield_set_on(0x00400000) + goto_first(0x00) + label(0x2a) + guard_play_animation(0xaf00, 0x0000, 0x5900, 0x00, 0x10) + objective_bitfield_set_on(0x00400000) + goto_first(0x00) + label(0x0f) + if_local_timer_greater_than(0x680100, 0x2a) + text_print_top(0x2774) + label(0x2a) + goto_first(0x00) + label(0x10) + if_local_timer_greater_than(0x940200, 0x2a) + text_print_top(0x2874) + label(0x2a) + goto_first(0x00) + label(0x11) + ai_sleep + text_print_top(0x2974) + goto_next(0x07) + label(0x07) + debug_log 'g', 'o', '\0', + guard_bitfield_set_on(0x04) + objective_bitfield_set_on(0x00200000) + jump_to_ai_list(0xfd, 0x1604) + ai_list_end +}; +u8 ai_28[] = { + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00400000, 0x2a) + goto_first(0x05) + label(0x2a) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2a) + goto_first(0x08) + label(0x2a) + random_generate_seed + if_random_seed_greater_than(0x80, 0x34) + sfx_play(0xb800, 0x07) + sfx_emit_from_object(0x07, 0x24, 0x0000) + label(0x34) + objective_bitfield_set_off(0x00400000) + goto_first(0x05) + label(0x07) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_21[] = { + label(0x04) + debug_log 'G', 'O', '\0', + guard_runs_to_pad(0x7800) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2a) + goto_first(0x08) + label(0x2a) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x7800, 0x2a) + goto_first(0x04) + label(0x2a) + guard_try_facing_target(0x0100, 0x0000, 0x2a) + label(0x2a) + label(0x07) + ai_sleep + goto_first(0x07) + ai_list_end +}; +u8 ai_25[] = { + debug_log 'h', 'e', 'l', 'l', 'o', '\0', + label(0x05) + ai_sleep + if_alarm_is_on(0x36) + goto_first(0x05) + label(0x36) + label(0x35) + local_timer_reset_start + debug_log '!', '\n', '\0', + ai_sleep + if_chr_does_not_exist(0x23, 0x2a) + goto_next(0x34) + label(0x2a) + if_bond_damage_and_pickups_disabled(0x34) + chr_try_spawning_at_pad(0x26, 0xff, 0x3200, 0x1004, 0x01000000, 0x2a) + label(0x34) + label(0x2a) + ai_sleep + if_chr_does_not_exist(0x24, 0x2a) + goto_next(0x34) + label(0x2a) + if_bond_damage_and_pickups_disabled(0x34) + chr_try_spawning_at_pad(0x26, 0xff, 0x3200, 0x1104, 0x01000000, 0x2a) + label(0x34) + label(0x2a) + ai_sleep + if_chr_does_not_exist(0x25, 0x2a) + goto_next(0x34) + label(0x2a) + if_bond_damage_and_pickups_disabled(0x34) + chr_try_spawning_at_pad(0x26, 0xff, 0x3200, 0x1204, 0x01000000, 0x2a) + label(0x34) + label(0x2a) + ai_sleep + if_chr_does_not_exist(0x26, 0x2a) + goto_next(0x34) + label(0x2a) + if_bond_damage_and_pickups_disabled(0x34) + chr_try_spawning_at_pad(0x26, 0xff, 0x3200, 0x1304, 0x01000000, 0x2a) + label(0x34) + label(0x2a) + ai_sleep + if_chr_does_not_exist(0x27, 0x2a) + goto_next(0x34) + label(0x2a) + if_bond_damage_and_pickups_disabled(0x34) + chr_try_spawning_at_pad(0x26, 0xff, 0x3200, 0x1404, 0x01000000, 0x2a) + label(0x34) + label(0x07) + ai_sleep + if_local_timer_greater_than(0x080700, 0x2a) + goto_first(0x07) + label(0x2a) + goto_first(0x35) + ai_list_end +}; +u8 ai_15[] = { + guard_set_chr_num(0x23) + debug_log 'h', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0f04) + ai_list_end +}; +u8 ai_16[] = { + guard_set_chr_num(0x24) + debug_log 'h', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0f04) + ai_list_end +}; +u8 ai_17[] = { + guard_set_chr_num(0x25) + debug_log 'h', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0f04) + ai_list_end +}; +u8 ai_18[] = { + guard_set_chr_num(0x26) + debug_log 'h', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x0f04) + ai_list_end +}; +u8 ai_19[] = { + guard_set_chr_num(0x27) + debug_log 'h', '5', '\n', '\0', + jump_to_ai_list(0xfd, 0x0f04) + ai_list_end +}; +u8 ai_14[] = { + label(0x2a) + random_generate_seed + if_random_seed_greater_than(0x64, 0x37) + if_random_seed_greater_than(0x32, 0x34) + guard_set_health_total(0x3c00) + guard_set_speed_rating(0x1e) + guard_set_accuracy_rating(0x1e) + guard_set_grenade_probability(0x33) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x2a) + label(0x2a) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x07) + goto_next(0x07) + label(0x34) + guard_set_health_total(0x2800) + guard_set_armour(0x3c00) + guard_set_speed_rating(0x1e) + guard_set_accuracy_rating(0x1e) + guard_try_spawning_item(0xc100, 0x07, 0x00000080, 0x2a) + label(0x2a) + guard_try_spawning_hat(0xde00, 0x00000000, 0x2a) + label(0x2a) + guard_try_spawning_item(0xc100, 0x07, 0x00000090, 0x07) + goto_next(0x07) + label(0x37) + guard_set_health_total(0x3c00) + guard_set_armour(0x5000) + guard_set_speed_rating(0x32) + guard_set_accuracy_rating(0x32) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x2a) + label(0x2a) + guard_try_spawning_item(0xcd00, 0x06, 0x00000080, 0x2a) + label(0x2a) + guard_try_spawning_item(0xcd00, 0x06, 0x00000090, 0x07) + label(0x07) + random_generate_seed + if_random_seed_greater_than(0x80, 0x34) + jump_to_ai_list(0xfd, 0x0d00) + label(0x34) + jump_to_ai_list(0xfd, 0x1804) + ai_list_end +}; +u8 ai_24[] = { + label(0x00) + ai_sleep + if_object_not_destroyed(0x02, 0x2a) + objective_bitfield_set_on(0x00100000) + label(0x2a) + if_objective_bitfield_is_set_on(0x00010000, 0x2a) + if_chr_dying_or_dead(0x00, 0x09) + label(0x2a) + if_objective_bitfield_is_set_on(0x00020000, 0x2a) + if_bond_collected_object(0x00, 0x08) + label(0x2a) + goto_first(0x00) + label(0x08) + if_bond_collected_object(0x01, 0x2a) + goto_first(0x00) + label(0x2a) + objective_bitfield_set_on(0x00020000) + goto_first(0x00) + label(0x09) + objective_bitfield_set_on(0x00010000) + text_print_top(0x2274) + text_print_bottom(0x2374) + goto_first(0x00) + ai_list_end +}; +u8 ai_26[] = { + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x2a) + goto_first(0x05) + label(0x2a) + tv_change_screen_bank(0x05, 0x00, 0x10) + tv_change_screen_bank(0x06, 0x00, 0x0f) + sfx_play(0xe300, 0x00) + sfx_emit_from_pad(0x00, 0x5727, 0x0000) + tv_change_screen_bank(0x07, 0x00, 0x03) + tv_change_screen_bank(0x08, 0x00, 0x0f) + ai_sleep + tv_change_screen_bank(0x09, 0x00, 0x03) + tv_change_screen_bank(0x0a, 0x00, 0x05) + sfx_play(0xc600, 0x01) + sfx_emit_from_pad(0x01, 0x5727, 0x0000) + tv_change_screen_bank(0x0b, 0x00, 0x0f) + tv_change_screen_bank(0x0c, 0x00, 0x13) + ai_sleep + tv_change_screen_bank(0x0d, 0x00, 0x05) + tv_change_screen_bank(0x0e, 0x00, 0x0c) + sfx_play(0xe300, 0x02) + sfx_emit_from_pad(0x02, 0x5727, 0x0000) + tv_change_screen_bank(0x0f, 0x00, 0x08) + tv_change_screen_bank(0x10, 0x00, 0x0d) + ai_sleep + tv_change_screen_bank(0x11, 0x00, 0x0d) + tv_change_screen_bank(0x12, 0x00, 0x0e) + sfx_play(0xe300, 0x03) + sfx_emit_from_pad(0x03, 0x5727, 0x0000) + tv_change_screen_bank(0x13, 0x00, 0x0d) + tv_change_screen_bank(0x14, 0x00, 0x02) + ai_sleep + tv_change_screen_bank(0x15, 0x00, 0x10) + tv_change_screen_bank(0x16, 0x00, 0x0d) + sfx_play(0xc600, 0x04) + sfx_emit_from_pad(0x04, 0x5727, 0x0000) + tv_change_screen_bank(0x17, 0x00, 0x08) + tv_change_screen_bank(0x18, 0x00, 0x11) + tv_change_screen_bank(0x19, 0x00, 0x03) + local_timer_reset_start + sfx_play(0xa200, 0x05) + sfx_set_channel_volume(0x05, 0x0000, 0x0000) + label(0x09) + ai_sleep + if_local_timer_greater_than(0x780000, 0x2a) + goto_first(0x09) + label(0x2a) + ai_sleep + sfx_set_channel_volume(0x05, 0xf47e, 0x0807) + hud_countdown_set(0x3c00) + music_xtrack_play(0x00, 0x00, 0xff) + hud_countdown_start + hud_countdown_show + label(0x0a) + ai_sleep + if_hud_countdown_less_than(0x0f00, 0x2a) + goto_first(0x0a) + label(0x2a) + tv_change_screen_bank(0x05, 0x00, 0x2e) + tv_change_screen_bank(0x06, 0x00, 0x2e) + sfx_play(0xe300, 0x00) + sfx_emit_from_pad(0x00, 0x5727, 0x0000) + tv_change_screen_bank(0x07, 0x00, 0x2e) + tv_change_screen_bank(0x08, 0x00, 0x2e) + ai_sleep + tv_change_screen_bank(0x09, 0x00, 0x2e) + tv_change_screen_bank(0x0a, 0x00, 0x2e) + sfx_play(0xc600, 0x01) + sfx_emit_from_pad(0x01, 0x5727, 0x0000) + tv_change_screen_bank(0x0b, 0x00, 0x2e) + tv_change_screen_bank(0x0c, 0x00, 0x2e) + ai_sleep + tv_change_screen_bank(0x0d, 0x00, 0x2e) + tv_change_screen_bank(0x0e, 0x00, 0x2e) + sfx_play(0xe300, 0x02) + sfx_emit_from_pad(0x02, 0x5727, 0x0000) + tv_change_screen_bank(0x0f, 0x00, 0x2e) + tv_change_screen_bank(0x10, 0x00, 0x2e) + ai_sleep + tv_change_screen_bank(0x11, 0x00, 0x2e) + tv_change_screen_bank(0x12, 0x00, 0x2e) + sfx_play(0xe300, 0x03) + sfx_emit_from_pad(0x03, 0x5727, 0x0000) + tv_change_screen_bank(0x13, 0x00, 0x2e) + tv_change_screen_bank(0x14, 0x00, 0x2e) + ai_sleep + tv_change_screen_bank(0x15, 0x00, 0x2e) + tv_change_screen_bank(0x16, 0x00, 0x2e) + sfx_play(0xc600, 0x04) + sfx_emit_from_pad(0x04, 0x5727, 0x0000) + tv_change_screen_bank(0x17, 0x00, 0x2e) + tv_change_screen_bank(0x18, 0x00, 0x2e) + tv_change_screen_bank(0x19, 0x00, 0x2e) + label(0x0b) + ai_sleep + if_hud_countdown_less_than(0x0000, 0x2a) + goto_first(0x0b) + label(0x2a) + trigger_explosions_around_bond + hud_countdown_hide + hud_countdown_stop + label(0x0c) + ai_sleep + goto_first(0x0c) + ai_list_end +}; +u8 ai_27[] = { + label(0x04) + ai_sleep + if_bond_is_dead(0x3e) + if_bond_in_room_with_pad(0x3300, 0x2a) + goto_first(0x04) + label(0x2a) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x2a) + goto_first(0x08) + label(0x2a) + if_objective_all_completed(0x2a) + jump_to_ai_list(0xfd, 0x0f00) + label(0x2a) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x1b, 0x0200, 0x0000) + chr_flags_set_off(0x00, 0x00040000) + if_chr_in_room_with_pad(0x00, 0x7800, 0x2a) + chr_try_teleporting_to_pad(0x00, 0x3200, 0x2a) + label(0x2a) + jump_to_ai_list(0x00, 0x1604) + chr_flags_set_off(0xf8, 0x00040000) + chr_try_teleporting_to_pad(0xf8, 0x7700, 0x2a) + label(0x2a) + jump_to_ai_list(0xf8, 0x1704) + jump_to_ai_list(0xfd, 0x0100) + label(0x3e) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_22[] = { + guard_play_animation(0x5900, 0xffff, 0xffff, 0x06, 0x10) + local_timer_reset_start + ai_sleep + screen_fade_from_black + label(0x08) + ai_sleep + if_local_timer_greater_than(0xf00000, 0x2a) + goto_first(0x08) + label(0x2a) + screen_fade_to_black + label(0x09) + if_screen_fade_completed(0x2a) + ai_sleep + goto_first(0x09) + label(0x2a) + exit_level + label(0x07) + ai_sleep + goto_first(0x07) + ai_list_end +}; +u8 ai_20[] = { + label(0x04) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x2a) + if_guard_shot_from_bond_missed(0x07) + label(0x2a) + label(0x08) + ai_sleep + if_guard_shot_from_bond_missed(0x07) + if_guard_and_bond_within_line_of_sight(0x2a) + goto_first(0x08) + label(0x2a) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x2a) + label(0x2a) + label(0x09) + ai_sleep + if_guard_shot_from_bond_missed(0x07) + if_guard_has_stopped_moving(0x2a) + goto_first(0x09) + label(0x2a) + goto_first(0x04) + label(0x07) + jump_to_ai_list(0xfd, 0x0d00) + ai_list_end +}; +u8 ai_23[] = { + label(0x38) + guard_try_running_to_bond_position(0x08) + label(0x08) + ai_sleep + if_guard_distance_to_bond_greater_than(0xf401, 0x34) + if_guard_and_bond_within_line_of_sight(0x39) + label(0x34) + if_guard_has_stopped_moving(0x3a) + goto_first(0x08) + label(0x39) + if_guard_and_bond_within_line_of_sight(0x2a) + goto_next(0x07) + label(0x3a) + ai_sleep + goto_first(0x38) + label(0x2a) + label(0x3b) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x2a) + guard_try_throwing_grenade(0x07) + label(0x2a) + if_random_seed_greater_than(0x32, 0x2a) + guard_try_sidestepping(0x07) + label(0x2a) + if_random_seed_greater_than(0x3c, 0x2a) + guard_try_firing_roll(0x07) + label(0x2a) + if_random_seed_greater_than(0x50, 0x2a) + guard_try_firing_roll(0x07) + label(0x2a) + if_random_seed_greater_than(0x64, 0x2a) + guard_try_firing_walk(0x07) + label(0x2a) + if_random_seed_greater_than(0x96, 0x2a) + guard_try_firing_run(0x07) + label(0x2a) + if_random_seed_greater_than(0xc8, 0x2a) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x07) + label(0x2a) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x07) + label(0x07) + ai_sleep + if_guard_has_stopped_moving(0x2a) + goto_first(0x07) + label(0x2a) + if_guard_and_bond_within_line_of_sight(0x2a) + goto_next(0x08) + label(0x08) + ai_sleep + goto_first(0x38) + label(0x2a) + ai_sleep + goto_first(0x3b) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/UsetupsevbunkerZ.c b/assets/obseg/setup/UsetupsevbunkerZ.c index 92b0689c..77d963e3 100644 --- a/assets/obseg/setup/UsetupsevbunkerZ.c +++ b/assets/obseg/setup/UsetupsevbunkerZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -884,25 +885,564 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x200005fd, 0x00070400 }; -u32 ai_1[] = { 0x200105fd, 0x00070400 }; -u32 ai_2[] = { 0xf300be00, 0xfffd0404, 0x00000002, 0x00020005, 0xfd000204 }; -u32 ai_3[] = { 0xbf00b808, 0x00000000, 0x000200c0, 0x00dd0000, 0x00000002, 0x0005fd00, 0x02040000 }; -u32 ai_4[] = { 0x8e1aad68, 0x310a0005, 0xfd040904 }; -u32 ai_5[] = { 0x8e1bad68, 0x320a0005, 0xfd040904 }; -u32 ai_6[] = { 0x8e1cad68, 0x330a0005, 0xfd040904 }; -u32 ai_8[] = { 0x3335c806, 0x72007806, 0x35640890, 0x003cc000, 0xde000000, 0x00000200, 0xbf00cd06, 0x80000000, 0x00020033, 0x356400bf, 0x00cd0690, 0x00000000, 0x02000001, 0x02089000, 0x50c000dd, 0x00000000, 0x000200bf, 0x00c10780, 0x00000000, 0x02003335, 0x6400bf00, 0xc1079000, 0x00000002, 0x00000102, 0x06900014, 0xc000dc00, 0x00000000, 0x0200bf00, 0xb8080000, 0x00000002, 0x00020105, 0xfd040b04 }; -u32 ai_10[] = { 0x022d2808, 0x0208034c, 0x01f4273c, 0x2f02272f, 0x2e010802, 0x2f3c0600, 0x01022e03, 0x012d0206, 0x02303335, 0x0a061a01, 0x02063532, 0x060e0102, 0x06353c06, 0x13010206, 0x35500613, 0x01020635, 0x64061101, 0x02063596, 0x06120102, 0x0635c806, 0x14000100, 0x00010206, 0x15000100, 0x00010201, 0x032f0601, 0x0102063c, 0x06000802, 0x0803012d, 0x02060301, 0x30040000 }; -u32 ai_7[] = { 0x02000346, 0x213b2132, 0x21392196, 0x01210100, 0x0221ae02, 0x0803214b, 0x000f06b4, 0x0002581b, 0x001f0206, 0xb40000b4, 0x06001f02, 0x06452200, 0x1f021b45, 0x1f4c0050, 0x1c3c1f00, 0x1c021f01, 0x08021c95, 0x04951096, 0x01066f20, 0x1d6e081d, 0x6e041d6e, 0x021d6e01, 0x1d010802, 0x06ab0061, 0x0006021d, 0x03333532, 0x061e2328, 0x001e0206, 0x1d021e03, 0x4dfd0064, 0x0063024d, 0xfd000f23, 0x28012f01, 0x011e0201, 0x96012533, 0x4b001406, 0x4506011c, 0x02060100, 0x02229604, 0x06c3780a, 0x94040007, 0x0206b300, 0x01e007c3, 0x780b0207, 0xae961006, 0x94101e00, 0x18020602, 0x23032f01, 0xb400012c, 0x1b012302, 0x014dfd00, 0x0f001806, 0x001b021b, 0x451f4c00, 0x321c3c1f, 0x021f0122, 0x021c011c, 0x0206ae5b, 0x06245b07, 0x24002802, 0x24c37812, 0x0d022803, 0x30fd2a31, 0xfd2a5b06, 0x065b0706, 0x00290206, 0xb4000708, 0x16b40005, 0xdc15b400, 0x04b014b4, 0x00038413, 0xb4000258, 0x12b40001, 0x2c110128, 0x0211b400, 0x016806c3, 0x780e0206, 0x01280212, 0xb4000294, 0x06c3780f, 0x02060128, 0x0213b400, 0x03c006c3, 0x78100206, 0x01280214, 0xb40004ec, 0x06259a00, 0x00010094, 0x01c37811, 0x02060128, 0x0215b400, 0x06180602, 0x06012802, 0x16030006, 0x01160206, 0x01000225, 0x00020100, 0x02060322, 0x01250229, 0xc3781794, 0x01010002, 0x2a05fd00, 0x01020205, 0xfd040c04 }; -u32 ai_11[] = { 0x02231c00, 0x65020303, 0x2f064dfd, 0x000f0065, 0x06010302, 0x064dfd00, 0x0f006501, 0x01230201, 0x039c0000, 0x01000670, 0x0206c378, 0x139a0000, 0x02000206, 0x22010102, 0x2a05fd00, 0x01040000 }; -u32 ai_13[] = { 0xad68656c, 0x6c6f0002, 0x00033705, 0x01000205, 0xf4003c4b, 0x96010194, 0x010226ae, 0xad210a00, 0x03311a06, 0x00270206, 0xf327bd04, 0xff006104, 0x05000000, 0x01060227, 0x02060331, 0x1b060027, 0x0206f327, 0xbd04ff00, 0x61040600, 0x00000106, 0x02270206, 0x03311c06, 0x00270206, 0xf327bd04, 0xff006104, 0x07000000, 0x01060227, 0x020103b4, 0x0004b006, 0x01010206, 0x01260400 }; -u32 ai_14[] = { 0x02080331, 0x19060108, 0x02069c00, 0x00010009, 0x9a000002, 0x00020903, 0x01090400 }; -u32 ai_15[] = { 0x0208039c, 0x00000100, 0x095d0606, 0x5d070601, 0x08020659, 0x37060108, 0x0206c378, 0x14010802, 0x09035d06, 0x065d0706, 0x01090206, 0x59370601, 0x090206c3, 0x7815aec4, 0x00e3ff02, 0x00035d06, 0x2402245d, 0x07240224, 0xb40000f0, 0x06010002, 0x06c37816, 0x9a000004, 0x00010904 }; -u32 ai_17[] = { 0x022b7002, 0x01020003, 0x6d03015b, 0x06275b07, 0x27000602, 0x27010002, 0x06c3782e, 0x9a000008, 0x00020103, 0x01010400 }; -u32 ai_16[] = { 0x022b03eb, 0x2c550064, 0x06012b02, 0x06ecd700, 0xda020803, 0xdc060108, 0x0206f106, 0x05fd000f, 0x0206ddea, 0xed030303, 0xd5090002, 0x0000d9f8, 0x00680602, 0x0605f804, 0x0a05fd00, 0x01022c05, 0xfd000104 }; -u32 ai_9[] = { 0xdbf400ff, 0xffdf080a, 0x006affff, 0xffff0610, 0xae020a03, 0xb400003c, 0x06010a02, 0x060a0059, 0xffffffff, 0x0610ae02, 0x0803b400, 0x00b40601, 0x080206da, 0x0209dc06, 0x03010902, 0x06d20201, 0x03010104 }; -u32 ai_12[] = { 0x02000330, 0xfd352f2f, 0x0100022f, 0x5b022700, 0x31022732, 0x313e323f, 0x3346343a, 0x323b320b, 0x06333501, 0x0606040d, 0x05fd0003, 0x02060100, 0x02343335, 0x7f310604, 0x0d05fd00, 0x0a023106, 0x040d05fd, 0x00060232, 0x06040d05, 0xfd000802, 0x3306040d, 0x05fd000b, 0x023505fd, 0x00010400 }; -u32 ai_18[] = { 0x0200036d, 0x01060100, 0x0206a304, 0x00100000, 0x02010301, 0x01040000 }; +u8 ai_0[] = { + guard_start_patrol(0x00) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x01) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_2[] = { + if_bond_damage_and_pickups_disabled(0x00) + chr_try_spawning_next_to_unseen_chr(0x00, 0xff, 0xfd, 0x0404, 0x02000000, 0x00) + label(0x00) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_3[] = { + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x00) + label(0x00) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x00) + label(0x00) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_4[] = { + guard_set_chr_num(0x1a) + debug_log 'h', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_5[] = { + guard_set_chr_num(0x1b) + debug_log 'h', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_6[] = { + guard_set_chr_num(0x1c) + debug_log 'h', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_8[] = { + random_generate_seed + if_random_seed_greater_than(0xc8, 0x06) + if_mission_time_less_than(0x7800, 0x06) + if_random_seed_greater_than(0x64, 0x08) + guard_set_armour(0x3c00) + guard_try_spawning_hat(0xde00, 0x00000000, 0x00) + label(0x00) + guard_try_spawning_item(0xcd00, 0x06, 0x00000080, 0x00) + label(0x00) + random_generate_seed + if_random_seed_greater_than(0x64, 0x00) + guard_try_spawning_item(0xcd00, 0x06, 0x00000090, 0x00) + label(0x00) + goto_next(0x01) + label(0x08) + guard_set_armour(0x5000) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x00) + label(0x00) + guard_try_spawning_item(0xc100, 0x07, 0x00000080, 0x00) + label(0x00) + random_generate_seed + if_random_seed_greater_than(0x64, 0x00) + guard_try_spawning_item(0xc100, 0x07, 0x00000090, 0x00) + label(0x00) + goto_next(0x01) + label(0x06) + guard_set_armour(0x1400) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x00) + label(0x00) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x00) + label(0x00) + label(0x01) + jump_to_ai_list(0xfd, 0x0b04) + ai_list_end +}; +u8 ai_10[] = { + label(0x2d) + guard_try_running_to_bond_position(0x08) + label(0x08) + ai_sleep + if_guard_distance_to_bond_greater_than(0xf401, 0x27) + if_guard_and_bond_within_line_of_sight(0x2f) + label(0x27) + if_guard_has_stopped_moving(0x2e) + goto_first(0x08) + label(0x2f) + if_guard_and_bond_within_line_of_sight(0x06) + goto_next(0x01) + label(0x2e) + ai_sleep + goto_first(0x2d) + label(0x06) + label(0x30) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x06) + guard_try_throwing_grenade(0x01) + label(0x06) + if_random_seed_greater_than(0x32, 0x06) + guard_try_sidestepping(0x01) + label(0x06) + if_random_seed_greater_than(0x3c, 0x06) + guard_try_firing_roll(0x01) + label(0x06) + if_random_seed_greater_than(0x50, 0x06) + guard_try_firing_roll(0x01) + label(0x06) + if_random_seed_greater_than(0x64, 0x06) + guard_try_firing_walk(0x01) + label(0x06) + if_random_seed_greater_than(0x96, 0x06) + guard_try_firing_run(0x01) + label(0x06) + if_random_seed_greater_than(0xc8, 0x06) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x06) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x06) + goto_first(0x01) + label(0x06) + if_guard_and_bond_within_line_of_sight(0x06) + goto_next(0x08) + label(0x08) + ai_sleep + goto_first(0x2d) + label(0x06) + ai_sleep + goto_first(0x30) + ai_list_end +}; +u8 ai_7[] = { + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x21) + if_guard_see_another_guard_die(0x21) + if_guard_sees_bond(0x21) + if_guard_heard_bond(0x21) + if_guard_bitfield_is_set_on(0x01, 0x21) + goto_first(0x00) + label(0x21) + local_timer_reset_start + label(0x08) + ai_sleep + guard_surrenders + if_guard_distance_to_bond_less_than(0x0f00, 0x06) + if_local_timer_greater_than(0x580200, 0x1b) + goto_next(0x1f) + label(0x06) + if_local_timer_greater_than(0xb40000, 0x06) + goto_next(0x1f) + label(0x06) + if_guard_is_targeted_by_bond(0x22) + goto_next(0x1f) + label(0x1b) + if_guard_is_targeted_by_bond(0x1f) + if_guard_distance_to_bond_greater_than(0x5000, 0x1c) + if_guard_and_bond_within_line_of_sight(0x1f) + goto_next(0x1c) + label(0x1f) + goto_first(0x08) + label(0x1c) + guard_bitfield_set_off(0x04) + guard_bitfield_set_off(0x10) + if_guard_bitfield_is_set_on(0x01, 0x06) + guard_try_unknown6F(0x20, 0x1d) + guard_try_unknown6E(0x08, 0x1d) + guard_try_unknown6E(0x04, 0x1d) + guard_try_unknown6E(0x02, 0x1d) + guard_try_unknown6E(0x01, 0x1d) + goto_first(0x08) + label(0x06) + guard_set_pad_preset(0x6100) + goto_next(0x06) + label(0x1d) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x32, 0x06) + guard_walks_to_pad(0x2823) + goto_next(0x1e) + label(0x06) + guard_runs_to_pad_preset + label(0x1e) + ai_sleep + if_chr_distance_to_pad_less_than(0xfd, 0x6400, 0x6300, 0x02) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x2823, 0x01) + if_guard_has_stopped_moving(0x01) + goto_first(0x1e) + label(0x01) + if_guard_bitfield_is_set_on(0x01, 0x25) + random_generate_seed + if_guard_distance_to_bond_less_than(0x1400, 0x06) + if_guard_is_targeted_by_bond(0x06) + goto_first(0x1c) + label(0x06) + goto_first(0x00) + label(0x22) + if_guard_bitfield_is_set_on(0x04, 0x06) + text_print_top(0x0a78) + guard_bitfield_set_on(0x04) + goto_next(0x07) + label(0x06) + if_local_timer_less_than(0xe00100, 0x07) + text_print_top(0x0b78) + label(0x07) + local_timer_reset_start + if_guard_bitfield_is_set_on(0x10, 0x06) + guard_bitfield_set_on(0x10) + guard_walks_to_pad(0x1800) + label(0x06) + label(0x23) + ai_sleep + if_guard_has_stopped_moving(0x01) + if_local_timer_greater_than(0x2c0100, 0x1b) + goto_first(0x23) + label(0x01) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x1800, 0x06) + goto_next(0x1b) + label(0x1b) + if_guard_is_targeted_by_bond(0x1f) + if_guard_distance_to_bond_greater_than(0x3200, 0x1c) + if_guard_and_bond_within_line_of_sight(0x1f) + label(0x1f) + goto_first(0x22) + label(0x1c) + goto_first(0x1c) + label(0x06) + local_timer_reset_start + if_object_not_destroyed(0x06, 0x24) + if_object_not_destroyed(0x07, 0x24) + goto_next(0x28) + label(0x24) + text_print_top(0x1278) + guard_looks_around_self + label(0x28) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x2a) + if_chr_does_not_exist(0xfd, 0x2a) + if_object_not_destroyed(0x06, 0x06) + if_object_not_destroyed(0x07, 0x06) + goto_next(0x29) + label(0x06) + if_local_timer_greater_than(0x080700, 0x16) + if_local_timer_greater_than(0xdc0500, 0x15) + if_local_timer_greater_than(0xb00400, 0x14) + if_local_timer_greater_than(0x840300, 0x13) + if_local_timer_greater_than(0x580200, 0x12) + if_local_timer_greater_than(0x2c0100, 0x11) + goto_first(0x28) + label(0x11) + if_local_timer_greater_than(0x680100, 0x06) + text_print_top(0x0e78) + label(0x06) + goto_first(0x28) + label(0x12) + if_local_timer_greater_than(0x940200, 0x06) + text_print_top(0x0f78) + label(0x06) + goto_first(0x28) + label(0x13) + if_local_timer_greater_than(0xc00300, 0x06) + text_print_top(0x1078) + label(0x06) + goto_first(0x28) + label(0x14) + if_local_timer_greater_than(0xec0400, 0x06) + alarm_on + objective_bitfield_set_on(0x00010000) + guard_bitfield_set_on(0x01) + text_print_top(0x1178) + label(0x06) + goto_first(0x28) + label(0x15) + if_local_timer_greater_than(0x180600, 0x06) + label(0x06) + goto_first(0x28) + label(0x16) + ai_sleep + goto_next(0x06) + goto_first(0x16) + label(0x06) + goto_first(0x00) + label(0x25) + goto_next(0x02) + goto_first(0x00) + label(0x06) + ai_sleep + guard_remove_fade + goto_first(0x25) + label(0x29) + text_print_top(0x1778) + guard_bitfield_set_on(0x01) + goto_first(0x00) + label(0x2a) + jump_to_ai_list(0xfd, 0x0100) + label(0x02) + jump_to_ai_list(0xfd, 0x0c04) + ai_list_end +}; +u8 ai_11[] = { + label(0x23) + guard_runs_to_pad(0x6500) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x6500, 0x06) + goto_first(0x03) + label(0x06) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x6500, 0x01) + goto_first(0x23) + label(0x01) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x06) + if_game_difficulty_less_than(0x02, 0x06) + text_print_top(0x1378) + objective_bitfield_set_on(0x00020000) + label(0x06) + guard_remove_fade + goto_first(0x01) + label(0x2a) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_13[] = { + debug_log 'h', 'e', 'l', 'l', 'o', '\0', + label(0x00) + ai_sleep + if_alarm_is_on(0x05) + goto_first(0x00) + label(0x05) + music_xtrack_play(0x00, 0x3c, 0x4b) + if_guard_bitfield_is_set_on(0x01, 0x01) + guard_bitfield_set_on(0x01) + label(0x26) + local_timer_reset_start + debug_log '!', '\n', '\0', + ai_sleep + if_chr_does_not_exist(0x1a, 0x06) + goto_next(0x27) + label(0x06) + if_bond_damage_and_pickups_disabled(0x27) + chr_try_spawning_at_pad(0x04, 0xff, 0x6100, 0x0504, 0x01000000, 0x06) + label(0x27) + label(0x06) + ai_sleep + if_chr_does_not_exist(0x1b, 0x06) + goto_next(0x27) + label(0x06) + if_bond_damage_and_pickups_disabled(0x27) + chr_try_spawning_at_pad(0x04, 0xff, 0x6100, 0x0604, 0x01000000, 0x06) + label(0x27) + label(0x06) + ai_sleep + if_chr_does_not_exist(0x1c, 0x06) + goto_next(0x27) + label(0x06) + if_bond_damage_and_pickups_disabled(0x27) + chr_try_spawning_at_pad(0x04, 0xff, 0x6100, 0x0704, 0x01000000, 0x06) + label(0x27) + label(0x01) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x06) + goto_first(0x01) + label(0x06) + goto_first(0x26) + ai_list_end +}; +u8 ai_14[] = { + label(0x08) + ai_sleep + if_chr_does_not_exist(0x19, 0x06) + goto_first(0x08) + label(0x06) + if_objective_bitfield_is_set_on(0x00010000, 0x09) + objective_bitfield_set_on(0x00020000) + label(0x09) + ai_sleep + goto_first(0x09) + ai_list_end +}; +u8 ai_15[] = { + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x09) + if_bond_used_gadget_on_object(0x06, 0x06) + if_bond_used_gadget_on_object(0x07, 0x06) + goto_first(0x08) + label(0x06) + if_bond_has_item_equipped(0x37, 0x06) + goto_first(0x08) + label(0x06) + text_print_top(0x1478) + goto_first(0x08) + label(0x09) + ai_sleep + if_bond_used_gadget_on_object(0x06, 0x06) + if_bond_used_gadget_on_object(0x07, 0x06) + goto_first(0x09) + label(0x06) + if_bond_has_item_equipped(0x37, 0x06) + goto_first(0x09) + label(0x06) + text_print_top(0x1578) + local_timer_reset_start + sfx_play(0xe300, 0xff) + label(0x00) + ai_sleep + if_bond_used_gadget_on_object(0x06, 0x24) + label(0x24) + if_bond_used_gadget_on_object(0x07, 0x24) + label(0x24) + if_local_timer_greater_than(0xf00000, 0x06) + goto_first(0x00) + label(0x06) + text_print_top(0x1678) + objective_bitfield_set_on(0x00040000) + goto_first(0x09) + ai_list_end +}; +u8 ai_17[] = { + label(0x2b) + if_game_difficulty_less_than(0x02, 0x01) + label(0x00) + ai_sleep + if_objective_num_complete(0x03, 0x01) + if_object_not_destroyed(0x06, 0x27) + if_object_not_destroyed(0x07, 0x27) + goto_next(0x06) + label(0x27) + goto_first(0x00) + label(0x06) + text_print_top(0x2e78) + objective_bitfield_set_on(0x00080000) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_16[] = { + label(0x2b) + ai_sleep + if_bond_is_dead(0x2c) + if_bond_in_room_with_pad(0x6400, 0x06) + goto_first(0x2b) + label(0x06) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x06) + goto_first(0x08) + label(0x06) + if_objective_all_completed(0x06) + jump_to_ai_list(0xfd, 0x0f00) + label(0x06) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x09, 0x0200, 0x0000) + chr_try_teleporting_to_pad(0xf8, 0x6800, 0x06) + label(0x06) + jump_to_ai_list(0xf8, 0x0a04) + jump_to_ai_list(0xfd, 0x0100) + label(0x2c) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_9[] = { + screen_fade_from_black + music_xtrack_play(0x00, 0xff, 0xff) + door_open_instant(0x08) + guard_play_animation(0x6a00, 0xffff, 0xffff, 0x06, 0x10) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x06) + goto_first(0x0a) + label(0x06) + guard_play_animation(0x5900, 0xffff, 0xffff, 0x06, 0x10) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x06) + goto_first(0x08) + label(0x06) + screen_fade_to_black + label(0x09) + if_screen_fade_completed(0x06) + ai_sleep + goto_first(0x09) + label(0x06) + exit_level + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_12[] = { + label(0x00) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x35) + if_guard_has_stopped_moving(0x2f) + goto_first(0x00) + label(0x2f) + if_object_not_destroyed(0x02, 0x27) + goto_next(0x31) + label(0x27) + if_guard_sees_bond(0x31) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x32) + if_guard_heard_bond_within_last_10_secs(0x33) + if_guard_shot_from_bond_missed(0x34) + if_guard_see_another_guard_shot(0x32) + if_guard_see_another_guard_die(0x32) + if_guard_playing_animation(0x06) + random_generate_seed + if_random_seed_greater_than(0x01, 0x06) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0300) + label(0x06) + goto_first(0x00) + label(0x34) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x31) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0a00) + label(0x31) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0600) + label(0x32) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0800) + label(0x33) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0b00) + label(0x35) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_18[] = { + label(0x00) + ai_sleep + if_objective_num_complete(0x01, 0x06) + goto_first(0x00) + label(0x06) + object_flags_1_set_on(0x04, 0x00001000) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/UsetupsevxZ.c b/assets/obseg/setup/UsetupsevxZ.c index 62c82bf3..d9ee99bb 100644 --- a/assets/obseg/setup/UsetupsevxZ.c +++ b/assets/obseg/setup/UsetupsevxZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1960,53 +1961,984 @@ PathRecord patrolpaths[] = { }; -u32 ai_17[] = { 0x0203032f, 0x00010302, 0x00033335, 0x3c073596, 0x086e080a, 0x02076e04, 0x0a02086e, 0x020a6e01, 0x0a010002, 0x0aae1e23, 0x28000b02, 0x0b03322f, 0x0207b400, 0x1c200c4d, 0xfd001e23, 0x280c2f0c, 0x010b020c, 0x0100022f, 0xad492073, 0x6565420a, 0x00060413, 0x05fd0412, 0x01000400 }; -u32 ai_16[] = { 0x02093302, 0x07353207, 0x0e040207, 0x35640711, 0x04020735, 0x96071204, 0x020735c8, 0x07140001, 0x00000402, 0x07150001, 0x00000402, 0x04020b03, 0x2f07010b, 0x02070704 }; -u32 ai_35[] = { 0x02000355, 0x002d3055, 0x004d3155, 0x00513255, 0x00333355, 0x00663403, 0x55003635, 0x55007b36, 0x55009337, 0x5500db38, 0x55004a39, 0x035500d2, 0x3a5500ba, 0x3b5500eb, 0x3c5500fc, 0x3d5500f1, 0x3e010002, 0x3003ac00, 0x0030ac01, 0x0042ac02, 0x0038ac03, 0x007b0100, 0x023103ac, 0x00002dac, 0x010066ac, 0x020045ac, 0x03009301, 0x00023203, 0xac00002d, 0xac010047, 0xac02007b, 0xac030038, 0x01000233, 0x03ac0000, 0x2dac0100, 0x45ac0200, 0xb5ac0300, 0x38010002, 0x3403ac00, 0x002dac01, 0x003cac02, 0x00b5ac03, 0x00330100, 0x023503ac, 0x00004dac, 0x010045ac, 0x020047ac, 0x03003c01, 0x00023603, 0xac000030, 0xac0100a3, 0xac02004a, 0xac0300bc, 0x01000237, 0x03ac0000, 0x4dac0100, 0x45ac0200, 0x3dac0300, 0xdb010002, 0x3803ac00, 0x00bcac01, 0x00d2ac02, 0x00b5ac03, 0x007b0100, 0x023903ac, 0x0000ebac, 0x01007bac, 0x020045ac, 0x0300fc01, 0x00023a03, 0xac0000db, 0xac010066, 0xac020038, 0xac0300fc, 0x0100023b, 0x03ac0000, 0xdbac0100, 0xf1ac0200, 0x51ac0300, 0x33010002, 0x3c03ac00, 0x0051ac01, 0x00d2ac02, 0x0047ac03, 0x00450100, 0x023d03ac, 0x0000d2ac, 0x010093ac, 0x020040ac, 0x03003f01, 0x00023e03, 0xac0000fc, 0xac0100b5, 0xac020038, 0xac03008f, 0x01000400 }; -u32 ai_36[] = { 0x8e00ae02, 0x4003b400, 0x00780301, 0x4002039c, 0x00000400, 0x0bae020a, 0x03b40000, 0x7807010a, 0x02073104, 0x07010302, 0x07ad7370, 0x61776e31, 0x00f32933, 0x35c80759, 0x01295902, 0x29590329, 0x59042959, 0x05295911, 0x29020735, 0x322a5907, 0x29591829, 0x59082902, 0x2abd15ff, 0x23280414, 0x00000001, 0x040229ad, 0x2d3e6661, 0x696c0001, 0x030204ad, 0x7331204f, 0x4b210001, 0x03020b03, 0x9c000002, 0x0007010b, 0x02070103, 0x04000000 }; -u32 ai_37[] = { 0x8e01ae02, 0x4003b400, 0x00780301, 0x4002039c, 0x00000400, 0x0bae020a, 0x03b40000, 0x7807010a, 0x02073105, 0x07010302, 0x07ad7370, 0x61776e32, 0x00f32933, 0x35c80759, 0x01295902, 0x29590329, 0x59042959, 0x05295911, 0x29020735, 0x322a5907, 0x29591829, 0x59082902, 0x2abd15ff, 0x23280415, 0x00000001, 0x040229ad, 0x2d3e6661, 0x696c0001, 0x030204ad, 0x7332204f, 0x4b210001, 0x03020b03, 0x9c000002, 0x0007010b, 0x02070103, 0x04000000 }; -u32 ai_38[] = { 0x8e02ae02, 0x4003b400, 0x00780301, 0x4002039c, 0x00000400, 0x0bae020a, 0x03b40000, 0x7807010a, 0x02073106, 0x07010302, 0x07ad7370, 0x61776e33, 0x00f32933, 0x35c80759, 0x01295902, 0x29590329, 0x59042959, 0x05295911, 0x29020735, 0x322a5907, 0x29591829, 0x59082902, 0x2abd15ff, 0x23280416, 0x00000001, 0x040229ad, 0x2d3e6661, 0x696c0001, 0x030204ad, 0x7333204f, 0x4b210001, 0x03020b03, 0x9c000002, 0x0007010b, 0x02070103, 0x04000000 }; -u32 ai_39[] = { 0x8e03ae02, 0x4003b400, 0x00780301, 0x4002039c, 0x00000400, 0x0bae020a, 0x03b40000, 0x7807010a, 0x02073107, 0x07010302, 0x07ad7370, 0x61776e34, 0x00f32933, 0x35c80759, 0x01295902, 0x29590329, 0x59042959, 0x05295911, 0x29020735, 0x322a5907, 0x29591829, 0x59082902, 0x2abd15ff, 0x23280417, 0x00000001, 0x040229ad, 0x2d3e6661, 0x696c0001, 0x030204ad, 0x7334204f, 0x4b210001, 0x03020b03, 0x9c000002, 0x0007010b, 0x02070103, 0x04000000 }; -u32 ai_18[] = { 0x8e0405fd, 0x04180400 }; -u32 ai_19[] = { 0x8e0505fd, 0x04180400 }; -u32 ai_20[] = { 0x8e0605fd, 0x04180400 }; -u32 ai_21[] = { 0x8e0705fd, 0x04180400 }; -u32 ai_22[] = { 0x4b03e80a, 0x3335c80a, 0x05fd041a, 0x020abf00, 0xc1070000, 0x00000702, 0x078dbf05, 0xfd041904 }; -u32 ai_23[] = { 0xbf00d211, 0x00000000, 0x0702078d, 0xbf05fd04, 0x1b040000 }; -u32 ai_25[] = { 0x022dae4c, 0x012c2928, 0x0a02292a, 0x0a020a03, 0x4c0bb83f, 0x4c00a029, 0x3c420229, 0x2f41b400, 0x00f00701, 0x0a020701, 0x2d02423c, 0x07000402, 0x4103012d, 0x02070209, 0x33350a07, 0x1a040207, 0x3532070e, 0x04020735, 0x3c071304, 0x02073550, 0x07130402, 0x07356407, 0x11040207, 0x35960712, 0x04020735, 0xc8071400, 0x01000004, 0x02071500, 0x01000004, 0x0204032f, 0x07010402, 0x074c00a0, 0x0a3c0700, 0x0a020a03, 0x012d0207, 0x03010902, 0x3fad746f, 0x6f206661, 0x72202d20, 0x64656c65, 0x74656421, 0x0023fd02, 0x0b03010b, 0x04000000 }; -u32 ai_24[] = { 0x022dae4b, 0x012c0d4c, 0x05dc2928, 0x0a02292a, 0x0a020a03, 0x4c0bb83f, 0x2f414c03, 0xe8293c09, 0x0229b400, 0x00f00701, 0x0a020701, 0x2d024103, 0x4b03e807, 0x012d0207, 0x02423c07, 0x012d0207, 0x02091500, 0x21000007, 0x0207ae02, 0x0b033c29, 0x00040229, 0xb400012c, 0x07010b02, 0x07160001, 0x00000702, 0x07020c03, 0x2f04010c, 0x0204012d, 0x020d05fd, 0x0419023f, 0xad746f6f, 0x20666172, 0x202d2064, 0x656c6574, 0x65642100, 0x23fd020e, 0x03010e04 }; -u32 ai_26[] = { 0x0200034c, 0x012c2932, 0x4302293a, 0x437efd43, 0x01000243, 0x06041905, 0xfd041904 }; -u32 ai_40[] = { 0x0200035b, 0x0129000a, 0x02295c01, 0x07010002, 0x07c40055, 0x00c50001, 0x0000c37c, 0x089a0000, 0x0100d001, 0x7833a606, 0x40000000, 0x020b035b, 0x0129000a, 0x0229010b, 0x020aae02, 0x0c03b400, 0x00b40701, 0x0c0207c4, 0x00c601c5, 0x01010000, 0xc37c099a, 0x00000800, 0xa7064000, 0x00002502, 0x04030104, 0x04000000 }; -u32 ai_41[] = { 0x9b000002, 0x009a0000, 0x04000200, 0x03710207, 0x70012955, 0x007b0755, 0x00930702, 0x29311329, 0x01000229, 0x55007b07, 0x55009307, 0x01000207, 0x9a000002, 0x009b0000, 0x0400020a, 0x03010a04 }; -u32 ai_42[] = { 0xad68656c, 0x6c6f0002, 0x00039c00, 0x00100029, 0x9c000008, 0x00060229, 0x9c000040, 0x00299c00, 0x00200045, 0x02290100, 0x02069a00, 0x00100000, 0x0a02459a, 0x00004000, 0x000a020a, 0x31080700, 0x290207f3, 0x29bd26ff, 0x0009041d, 0x00000010, 0x07022902, 0x07033109, 0x07002902, 0x07f329bd, 0x26ff000a, 0x041e0000, 0x00100702, 0x29020703, 0x310a0700, 0x290207f3, 0x29bd26ff, 0x000b041f, 0x00000010, 0x07022902, 0x0703310b, 0x07002902, 0x07f329bd, 0x26ff000c, 0x04200000, 0x00100702, 0x29020701, 0x00040000 }; -u32 ai_27[] = { 0x8e08ad68, 0x310a00ab, 0x000905fd, 0x04210400 }; -u32 ai_28[] = { 0x8e09ad68, 0x320a00ab, 0x000a05fd, 0x04210400 }; -u32 ai_29[] = { 0x8e0aad68, 0x330a00ab, 0x000b05fd, 0x04210400 }; -u32 ai_30[] = { 0x8e0bad68, 0x340a00ab, 0x000c05fd, 0x04210400 }; -u32 ai_31[] = { 0x020a9000, 0x28c000dd, 0x00000000, 0x000200bf, 0x00c10700, 0x00000000, 0x02003335, 0x6400bf00, 0xc1071000, 0x00000002, 0x00000402, 0x0405fd04, 0x22040000 }; -u32 ai_32[] = { 0x02039c00, 0x00200004, 0x15002100, 0x00074604, 0x0207020a, 0x0346043c, 0x07010a02, 0x07160001, 0x00000702, 0x07020b03, 0x46042f07, 0x010b0207, 0x01030204, 0x05fd0419, 0x04000000 }; -u32 ai_43[] = { 0x02039b00, 0x0020009b, 0x00004000, 0xb0af0200, 0x03b30003, 0xc0070103, 0x02075c03, 0x07010002, 0x07a80300, 0x00000807, 0x01000207, 0x25c37c0a, 0x9a000020, 0x00ae0100, 0x04000000 }; -u32 ai_0[] = { 0x200005fd, 0x041c0400 }; -u32 ai_1[] = { 0x200105fd, 0x041c0400 }; -u32 ai_2[] = { 0x200205fd, 0x041c0400 }; -u32 ai_3[] = { 0x200305fd, 0x041c0400 }; -u32 ai_4[] = { 0x200405fd, 0x041c0400 }; -u32 ai_5[] = { 0x200505fd, 0x041c0400 }; -u32 ai_6[] = { 0x200605fd, 0x041c0400 }; -u32 ai_7[] = { 0x200705fd, 0x041c0400 }; -u32 ai_8[] = { 0x200805fd, 0x041c0400 }; -u32 ai_9[] = { 0x200905fd, 0x041c0400 }; -u32 ai_10[] = { 0x200a05fd, 0x041c0400 }; -u32 ai_11[] = { 0x200b05fd, 0x041c0400 }; -u32 ai_12[] = { 0x200c05fd, 0x041c0400 }; -u32 ai_13[] = { 0x200d05fd, 0x041c0400 }; -u32 ai_14[] = { 0x200e05fd, 0x041c0400 }; -u32 ai_15[] = { 0x200f05fd, 0x041c0400 }; -u32 ai_33[] = { 0x0a006600, 0x00000104, 0x10ae020a, 0x03b40000, 0x3207010a, 0x02070a00, 0x660001ff, 0xff041005, 0xfd000104 }; -u32 ai_45[] = { 0x020a03cf, 0x07010a02, 0x0705f804, 0x2305fd00, 0x01040000 }; -u32 ai_44[] = { 0x02030355, 0x002e0701, 0x030207d6, 0x012c0701, 0x030207d7, 0x00ae020a, 0x03eb4655, 0x002e0700, 0x010207d6, 0x000007b4, 0x0000b407, 0x010a0207, 0x9a000080, 0x00ecda02, 0x0b03dc07, 0x010b0207, 0xf10705fd, 0x000f0207, 0xddeaed03, 0x0303d504, 0x00020000, 0x05f80424, 0x05fd0001, 0x0201d801, 0x03024605, 0xfd000104 }; -u32 ai_34[] = { 0xa6050008, 0x0000d9fd, 0x002f0702, 0x079d0000, 0x20009d00, 0x800000db, 0xf400ffff, 0x0a0063ff, 0xff004206, 0x10039d00, 0x00100002, 0x0c032f07, 0x010c0207, 0x0a00b200, 0x14ffff06, 0x18ae020a, 0x03b40000, 0xb407010a, 0x0207da02, 0x0b03dc07, 0x010b0207, 0xd205fd00, 0x01040000 }; -u32 ai_46[] = { 0x02000368, 0x050e0701, 0x000207ae, 0x020a03b4, 0x00007807, 0x010a0207, 0xc4010502, 0xc5020500, 0x0005fd00, 0x01040000 }; +u8 ai_17[] = { + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x00) + goto_first(0x03) + label(0x00) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x3c, 0x07) + if_random_seed_greater_than(0x96, 0x08) + guard_try_unknown6E(0x08, 0x0a) + label(0x07) + guard_try_unknown6E(0x04, 0x0a) + label(0x08) + guard_try_unknown6E(0x02, 0x0a) + guard_try_unknown6E(0x01, 0x0a) + goto_first(0x00) + label(0x0a) + local_timer_reset_start + guard_walks_to_pad(0x2823) + goto_next(0x0b) + label(0x0b) + ai_sleep + if_guard_sees_bond(0x2f) + label(0x07) + if_local_timer_greater_than(0x201c00, 0x0c) + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0x2823, 0x0c) + if_guard_has_stopped_moving(0x0c) + goto_first(0x0b) + label(0x0c) + goto_first(0x00) + label(0x2f) + debug_log 'I', ' ', 's', 'e', 'e', 'B', '\n', '\0', + set_return_ai_list(0x1304) + jump_to_ai_list(0xfd, 0x1204) + goto_first(0x00) + ai_list_end +}; +u8 ai_16[] = { + label(0x09) + random_generate_seed + label(0x07) + if_random_seed_greater_than(0x32, 0x07) + guard_try_sidestepping(0x04) + label(0x07) + if_random_seed_greater_than(0x64, 0x07) + guard_try_firing_walk(0x04) + label(0x07) + if_random_seed_greater_than(0x96, 0x07) + guard_try_firing_run(0x04) + label(0x07) + if_random_seed_greater_than(0xc8, 0x07) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x04) + label(0x07) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x04) + label(0x04) + label(0x0b) + ai_sleep + if_guard_has_stopped_moving(0x07) + goto_first(0x0b) + label(0x07) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_35[] = { + label(0x00) + ai_sleep + if_bond_in_room_with_pad(0x2d00, 0x30) + if_bond_in_room_with_pad(0x4d00, 0x31) + if_bond_in_room_with_pad(0x5100, 0x32) + if_bond_in_room_with_pad(0x3300, 0x33) + if_bond_in_room_with_pad(0x6600, 0x34) + ai_sleep + if_bond_in_room_with_pad(0x3600, 0x35) + if_bond_in_room_with_pad(0x7b00, 0x36) + if_bond_in_room_with_pad(0x9300, 0x37) + if_bond_in_room_with_pad(0xdb00, 0x38) + if_bond_in_room_with_pad(0x4a00, 0x39) + ai_sleep + if_bond_in_room_with_pad(0xd200, 0x3a) + if_bond_in_room_with_pad(0xba00, 0x3b) + if_bond_in_room_with_pad(0xeb00, 0x3c) + if_bond_in_room_with_pad(0xfc00, 0x3d) + if_bond_in_room_with_pad(0xf100, 0x3e) + goto_first(0x00) + label(0x30) + ai_sleep + chr_set_pad_preset(0x00, 0x3000) + chr_set_pad_preset(0x01, 0x4200) + chr_set_pad_preset(0x02, 0x3800) + chr_set_pad_preset(0x03, 0x7b00) + goto_first(0x00) + label(0x31) + ai_sleep + chr_set_pad_preset(0x00, 0x2d00) + chr_set_pad_preset(0x01, 0x6600) + chr_set_pad_preset(0x02, 0x4500) + chr_set_pad_preset(0x03, 0x9300) + goto_first(0x00) + label(0x32) + ai_sleep + chr_set_pad_preset(0x00, 0x2d00) + chr_set_pad_preset(0x01, 0x4700) + chr_set_pad_preset(0x02, 0x7b00) + chr_set_pad_preset(0x03, 0x3800) + goto_first(0x00) + label(0x33) + ai_sleep + chr_set_pad_preset(0x00, 0x2d00) + chr_set_pad_preset(0x01, 0x4500) + chr_set_pad_preset(0x02, 0xb500) + chr_set_pad_preset(0x03, 0x3800) + goto_first(0x00) + label(0x34) + ai_sleep + chr_set_pad_preset(0x00, 0x2d00) + chr_set_pad_preset(0x01, 0x3c00) + chr_set_pad_preset(0x02, 0xb500) + chr_set_pad_preset(0x03, 0x3300) + goto_first(0x00) + label(0x35) + ai_sleep + chr_set_pad_preset(0x00, 0x4d00) + chr_set_pad_preset(0x01, 0x4500) + chr_set_pad_preset(0x02, 0x4700) + chr_set_pad_preset(0x03, 0x3c00) + goto_first(0x00) + label(0x36) + ai_sleep + chr_set_pad_preset(0x00, 0x3000) + chr_set_pad_preset(0x01, 0xa300) + chr_set_pad_preset(0x02, 0x4a00) + chr_set_pad_preset(0x03, 0xbc00) + goto_first(0x00) + label(0x37) + ai_sleep + chr_set_pad_preset(0x00, 0x4d00) + chr_set_pad_preset(0x01, 0x4500) + chr_set_pad_preset(0x02, 0x3d00) + chr_set_pad_preset(0x03, 0xdb00) + goto_first(0x00) + label(0x38) + ai_sleep + chr_set_pad_preset(0x00, 0xbc00) + chr_set_pad_preset(0x01, 0xd200) + chr_set_pad_preset(0x02, 0xb500) + chr_set_pad_preset(0x03, 0x7b00) + goto_first(0x00) + label(0x39) + ai_sleep + chr_set_pad_preset(0x00, 0xeb00) + chr_set_pad_preset(0x01, 0x7b00) + chr_set_pad_preset(0x02, 0x4500) + chr_set_pad_preset(0x03, 0xfc00) + goto_first(0x00) + label(0x3a) + ai_sleep + chr_set_pad_preset(0x00, 0xdb00) + chr_set_pad_preset(0x01, 0x6600) + chr_set_pad_preset(0x02, 0x3800) + chr_set_pad_preset(0x03, 0xfc00) + goto_first(0x00) + label(0x3b) + ai_sleep + chr_set_pad_preset(0x00, 0xdb00) + chr_set_pad_preset(0x01, 0xf100) + chr_set_pad_preset(0x02, 0x5100) + chr_set_pad_preset(0x03, 0x3300) + goto_first(0x00) + label(0x3c) + ai_sleep + chr_set_pad_preset(0x00, 0x5100) + chr_set_pad_preset(0x01, 0xd200) + chr_set_pad_preset(0x02, 0x4700) + chr_set_pad_preset(0x03, 0x4500) + goto_first(0x00) + label(0x3d) + ai_sleep + chr_set_pad_preset(0x00, 0xd200) + chr_set_pad_preset(0x01, 0x9300) + chr_set_pad_preset(0x02, 0x4000) + chr_set_pad_preset(0x03, 0x3f00) + goto_first(0x00) + label(0x3e) + ai_sleep + chr_set_pad_preset(0x00, 0xfc00) + chr_set_pad_preset(0x01, 0xb500) + chr_set_pad_preset(0x02, 0x3800) + chr_set_pad_preset(0x03, 0x8f00) + goto_first(0x00) + ai_list_end +}; +u8 ai_36[] = { + guard_set_chr_num(0x00) + local_timer_reset_start + label(0x40) + ai_sleep + if_local_timer_greater_than(0x780000, 0x03) + goto_first(0x40) + label(0x03) + if_objective_bitfield_is_set_on(0x00040000, 0x0b) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x780000, 0x07) + goto_first(0x0a) + label(0x07) + if_chr_does_not_exist(0x04, 0x07) + goto_first(0x03) + label(0x07) + debug_log 's', 'p', 'a', 'w', 'n', '1', '\0', + if_bond_damage_and_pickups_disabled(0x29) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x07) + if_bond_has_item_equipped(0x01, 0x29) + if_bond_has_item_equipped(0x02, 0x29) + if_bond_has_item_equipped(0x03, 0x29) + if_bond_has_item_equipped(0x04, 0x29) + if_bond_has_item_equipped(0x05, 0x29) + if_bond_has_item_equipped(0x11, 0x29) + label(0x07) + if_random_seed_greater_than(0x32, 0x2a) + if_bond_has_item_equipped(0x07, 0x29) + if_bond_has_item_equipped(0x18, 0x29) + if_bond_has_item_equipped(0x08, 0x29) + label(0x2a) + chr_try_spawning_at_pad(0x15, 0xff, 0x2823, 0x1404, 0x01000000, 0x04) + label(0x29) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x04) + debug_log 's', '1', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x0b) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x07) + goto_first(0x0b) + label(0x07) + goto_first(0x03) + ai_list_end +}; +u8 ai_37[] = { + guard_set_chr_num(0x01) + local_timer_reset_start + label(0x40) + ai_sleep + if_local_timer_greater_than(0x780000, 0x03) + goto_first(0x40) + label(0x03) + if_objective_bitfield_is_set_on(0x00040000, 0x0b) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x780000, 0x07) + goto_first(0x0a) + label(0x07) + if_chr_does_not_exist(0x05, 0x07) + goto_first(0x03) + label(0x07) + debug_log 's', 'p', 'a', 'w', 'n', '2', '\0', + if_bond_damage_and_pickups_disabled(0x29) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x07) + if_bond_has_item_equipped(0x01, 0x29) + if_bond_has_item_equipped(0x02, 0x29) + if_bond_has_item_equipped(0x03, 0x29) + if_bond_has_item_equipped(0x04, 0x29) + if_bond_has_item_equipped(0x05, 0x29) + if_bond_has_item_equipped(0x11, 0x29) + label(0x07) + if_random_seed_greater_than(0x32, 0x2a) + if_bond_has_item_equipped(0x07, 0x29) + if_bond_has_item_equipped(0x18, 0x29) + if_bond_has_item_equipped(0x08, 0x29) + label(0x2a) + chr_try_spawning_at_pad(0x15, 0xff, 0x2823, 0x1504, 0x01000000, 0x04) + label(0x29) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x04) + debug_log 's', '2', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x0b) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x07) + goto_first(0x0b) + label(0x07) + goto_first(0x03) + ai_list_end +}; +u8 ai_38[] = { + guard_set_chr_num(0x02) + local_timer_reset_start + label(0x40) + ai_sleep + if_local_timer_greater_than(0x780000, 0x03) + goto_first(0x40) + label(0x03) + if_objective_bitfield_is_set_on(0x00040000, 0x0b) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x780000, 0x07) + goto_first(0x0a) + label(0x07) + if_chr_does_not_exist(0x06, 0x07) + goto_first(0x03) + label(0x07) + debug_log 's', 'p', 'a', 'w', 'n', '3', '\0', + if_bond_damage_and_pickups_disabled(0x29) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x07) + if_bond_has_item_equipped(0x01, 0x29) + if_bond_has_item_equipped(0x02, 0x29) + if_bond_has_item_equipped(0x03, 0x29) + if_bond_has_item_equipped(0x04, 0x29) + if_bond_has_item_equipped(0x05, 0x29) + if_bond_has_item_equipped(0x11, 0x29) + label(0x07) + if_random_seed_greater_than(0x32, 0x2a) + if_bond_has_item_equipped(0x07, 0x29) + if_bond_has_item_equipped(0x18, 0x29) + if_bond_has_item_equipped(0x08, 0x29) + label(0x2a) + chr_try_spawning_at_pad(0x15, 0xff, 0x2823, 0x1604, 0x01000000, 0x04) + label(0x29) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x04) + debug_log 's', '3', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x0b) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x07) + goto_first(0x0b) + label(0x07) + goto_first(0x03) + ai_list_end +}; +u8 ai_39[] = { + guard_set_chr_num(0x03) + local_timer_reset_start + label(0x40) + ai_sleep + if_local_timer_greater_than(0x780000, 0x03) + goto_first(0x40) + label(0x03) + if_objective_bitfield_is_set_on(0x00040000, 0x0b) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x780000, 0x07) + goto_first(0x0a) + label(0x07) + if_chr_does_not_exist(0x07, 0x07) + goto_first(0x03) + label(0x07) + debug_log 's', 'p', 'a', 'w', 'n', '4', '\0', + if_bond_damage_and_pickups_disabled(0x29) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x07) + if_bond_has_item_equipped(0x01, 0x29) + if_bond_has_item_equipped(0x02, 0x29) + if_bond_has_item_equipped(0x03, 0x29) + if_bond_has_item_equipped(0x04, 0x29) + if_bond_has_item_equipped(0x05, 0x29) + if_bond_has_item_equipped(0x11, 0x29) + label(0x07) + if_random_seed_greater_than(0x32, 0x2a) + if_bond_has_item_equipped(0x07, 0x29) + if_bond_has_item_equipped(0x18, 0x29) + if_bond_has_item_equipped(0x08, 0x29) + label(0x2a) + chr_try_spawning_at_pad(0x15, 0xff, 0x2823, 0x1704, 0x01000000, 0x04) + label(0x29) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + goto_first(0x03) + label(0x04) + debug_log 's', '4', ' ', 'O', 'K', '!', '\0', + goto_first(0x03) + label(0x0b) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x07) + goto_first(0x0b) + label(0x07) + goto_first(0x03) + ai_list_end +}; +u8 ai_18[] = { + guard_set_chr_num(0x04) + jump_to_ai_list(0xfd, 0x1804) + ai_list_end +}; +u8 ai_19[] = { + guard_set_chr_num(0x05) + jump_to_ai_list(0xfd, 0x1804) + ai_list_end +}; +u8 ai_20[] = { + guard_set_chr_num(0x06) + jump_to_ai_list(0xfd, 0x1804) + ai_list_end +}; +u8 ai_21[] = { + guard_set_chr_num(0x07) + jump_to_ai_list(0xfd, 0x1804) + ai_list_end +}; +u8 ai_22[] = { + if_guard_distance_to_bond_less_than(0xe803, 0x0a) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x0a) + jump_to_ai_list(0xfd, 0x1a04) + label(0x0a) + guard_try_spawning_item(0xc100, 0x07, 0x00000000, 0x07) + label(0x07) + guard_set_grenade_probability(0xbf) + jump_to_ai_list(0xfd, 0x1904) + ai_list_end +}; +u8 ai_23[] = { + guard_try_spawning_item(0xd200, 0x11, 0x00000000, 0x07) + label(0x07) + guard_set_grenade_probability(0xbf) + jump_to_ai_list(0xfd, 0x1b04) + ai_list_end +}; +u8 ai_25[] = { + label(0x2d) + local_timer_reset_start + if_guard_distance_to_bond_greater_than(0x2c01, 0x29) + guard_try_running_to_bond_position(0x0a) + label(0x29) + guard_try_sprinting_to_bond_position(0x0a) + label(0x0a) + ai_sleep + if_guard_distance_to_bond_greater_than(0xb80b, 0x3f) + if_guard_distance_to_bond_greater_than(0xa000, 0x29) + if_guard_and_bond_within_line_of_sight(0x42) + label(0x29) + if_guard_has_stopped_moving(0x41) + if_local_timer_greater_than(0xf00000, 0x07) + goto_first(0x0a) + label(0x07) + goto_first(0x2d) + label(0x42) + if_guard_and_bond_within_line_of_sight(0x07) + goto_next(0x04) + label(0x41) + ai_sleep + goto_first(0x2d) + label(0x07) + label(0x09) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x07) + guard_try_throwing_grenade(0x04) + label(0x07) + if_random_seed_greater_than(0x32, 0x07) + guard_try_sidestepping(0x04) + label(0x07) + if_random_seed_greater_than(0x3c, 0x07) + guard_try_firing_roll(0x04) + label(0x07) + if_random_seed_greater_than(0x50, 0x07) + guard_try_firing_roll(0x04) + label(0x07) + if_random_seed_greater_than(0x64, 0x07) + guard_try_firing_walk(0x04) + label(0x07) + if_random_seed_greater_than(0x96, 0x07) + guard_try_firing_run(0x04) + label(0x07) + if_random_seed_greater_than(0xc8, 0x07) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x04) + label(0x07) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x04) + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x07) + goto_first(0x04) + label(0x07) + if_guard_distance_to_bond_greater_than(0xa000, 0x0a) + if_guard_and_bond_within_line_of_sight(0x07) + goto_next(0x0a) + label(0x0a) + ai_sleep + goto_first(0x2d) + label(0x07) + ai_sleep + goto_first(0x09) + label(0x3f) + debug_log 't', 'o', 'o', ' ', 'f', 'a', 'r', ' ', '-', ' ', 'd', 'e', 'l', 'e', 't', 'e', 'd', '!', '\0', + chr_remove_instant(0xfd) + label(0x0b) + ai_sleep + goto_first(0x0b) + ai_list_end +}; +u8 ai_24[] = { + label(0x2d) + local_timer_reset_start + if_guard_distance_to_bond_less_than(0x2c01, 0x0d) + if_guard_distance_to_bond_greater_than(0xdc05, 0x29) + guard_try_running_to_bond_position(0x0a) + label(0x29) + guard_try_sprinting_to_bond_position(0x0a) + label(0x0a) + ai_sleep + if_guard_distance_to_bond_greater_than(0xb80b, 0x3f) + if_guard_has_stopped_moving(0x41) + if_guard_distance_to_bond_greater_than(0xe803, 0x29) + if_guard_and_bond_within_line_of_sight(0x09) + label(0x29) + if_local_timer_greater_than(0xf00000, 0x07) + goto_first(0x0a) + label(0x07) + goto_first(0x2d) + label(0x41) + ai_sleep + if_guard_distance_to_bond_less_than(0xe803, 0x07) + goto_first(0x2d) + label(0x07) + label(0x42) + if_guard_and_bond_within_line_of_sight(0x07) + goto_first(0x2d) + label(0x07) + label(0x09) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x07) + label(0x07) + local_timer_reset_start + label(0x0b) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x29) + goto_next(0x04) + label(0x29) + if_local_timer_greater_than(0x2c0100, 0x07) + goto_first(0x0b) + label(0x07) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x07) + label(0x07) + label(0x0c) + ai_sleep + if_guard_has_stopped_moving(0x04) + goto_first(0x0c) + label(0x04) + goto_first(0x2d) + label(0x0d) + jump_to_ai_list(0xfd, 0x1904) + label(0x3f) + debug_log 't', 'o', 'o', ' ', 'f', 'a', 'r', ' ', '-', ' ', 'd', 'e', 'l', 'e', 't', 'e', 'd', '!', '\0', + chr_remove_instant(0xfd) + label(0x0e) + ai_sleep + goto_first(0x0e) + ai_list_end +}; +u8 ai_26[] = { + label(0x00) + ai_sleep + if_guard_distance_to_bond_greater_than(0x2c01, 0x29) + if_guard_sees_bond(0x43) + label(0x29) + if_guard_see_another_guard_shot(0x43) + if_chr_was_damaged_since_last_check(0xfd, 0x43) + goto_first(0x00) + label(0x43) + set_return_ai_list(0x1904) + jump_to_ai_list(0xfd, 0x1904) + ai_list_end +}; +u8 ai_40[] = { + label(0x00) + ai_sleep + if_object_not_destroyed(0x01, 0x29) + goto_next(0x0a) + label(0x29) + if_object_was_activated(0x01, 0x07) + goto_first(0x00) + label(0x07) + sfx_play(0x5500, 0x00) + sfx_emit_from_object(0x00, 0x01, 0x0000) + text_print_top(0x087c) + objective_bitfield_set_on(0x00010000) + tv_change_screen_bank(0x01, 0x78, 0x33) + object_flags_2_set_on(0x06, 0x00000040) + label(0x0b) + ai_sleep + if_object_not_destroyed(0x01, 0x29) + goto_next(0x0a) + label(0x29) + goto_first(0x0b) + label(0x0a) + local_timer_reset_start + label(0x0c) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x07) + goto_first(0x0c) + label(0x07) + sfx_play(0xc600, 0x01) + sfx_emit_from_object(0x01, 0x01, 0x0000) + text_print_top(0x097c) + objective_bitfield_set_on(0x00080000) + object_flags_2_set_off(0x06, 0x00000040) + alarm_on + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_41[] = { + objective_bitfield_set_off(0x00020000) + objective_bitfield_set_on(0x00040000) + label(0x00) + ai_sleep + if_game_difficulty_greater_than(0x02, 0x07) + if_game_difficulty_less_than(0x01, 0x29) + if_bond_in_room_with_pad(0x7b00, 0x07) + if_bond_in_room_with_pad(0x9300, 0x07) + label(0x29) + if_chr_does_not_exist(0x13, 0x29) + goto_first(0x00) + label(0x29) + if_bond_in_room_with_pad(0x7b00, 0x07) + if_bond_in_room_with_pad(0x9300, 0x07) + goto_first(0x00) + label(0x07) + objective_bitfield_set_on(0x00020000) + objective_bitfield_set_off(0x00040000) + label(0x0a) + ai_sleep + goto_first(0x0a) + ai_list_end +}; +u8 ai_42[] = { + debug_log 'h', 'e', 'l', 'l', 'o', '\0', + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00100000, 0x29) + if_objective_bitfield_is_set_on(0x00080000, 0x06) + label(0x29) + if_objective_bitfield_is_set_on(0x00400000, 0x29) + if_objective_bitfield_is_set_on(0x00200000, 0x45) + label(0x29) + goto_first(0x00) + label(0x06) + objective_bitfield_set_on(0x00100000) + goto_next(0x0a) + label(0x45) + objective_bitfield_set_on(0x00400000) + goto_next(0x0a) + label(0x0a) + if_chr_does_not_exist(0x08, 0x07) + goto_next(0x29) + label(0x07) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x26, 0xff, 0x0900, 0x1d04, 0x10000000, 0x07) + label(0x29) + label(0x07) + ai_sleep + if_chr_does_not_exist(0x09, 0x07) + goto_next(0x29) + label(0x07) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x26, 0xff, 0x0a00, 0x1e04, 0x10000000, 0x07) + label(0x29) + label(0x07) + ai_sleep + if_chr_does_not_exist(0x0a, 0x07) + goto_next(0x29) + label(0x07) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x26, 0xff, 0x0b00, 0x1f04, 0x10000000, 0x07) + label(0x29) + label(0x07) + ai_sleep + if_chr_does_not_exist(0x0b, 0x07) + goto_next(0x29) + label(0x07) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x26, 0xff, 0x0c00, 0x2004, 0x10000000, 0x07) + label(0x29) + label(0x07) + goto_first(0x00) + ai_list_end +}; +u8 ai_27[] = { + guard_set_chr_num(0x08) + debug_log 'h', '1', '\n', '\0', + guard_set_pad_preset(0x0900) + jump_to_ai_list(0xfd, 0x2104) + ai_list_end +}; +u8 ai_28[] = { + guard_set_chr_num(0x09) + debug_log 'h', '2', '\n', '\0', + guard_set_pad_preset(0x0a00) + jump_to_ai_list(0xfd, 0x2104) + ai_list_end +}; +u8 ai_29[] = { + guard_set_chr_num(0x0a) + debug_log 'h', '3', '\n', '\0', + guard_set_pad_preset(0x0b00) + jump_to_ai_list(0xfd, 0x2104) + ai_list_end +}; +u8 ai_30[] = { + guard_set_chr_num(0x0b) + debug_log 'h', '4', '\n', '\0', + guard_set_pad_preset(0x0c00) + jump_to_ai_list(0xfd, 0x2104) + ai_list_end +}; +u8 ai_31[] = { + label(0x0a) + guard_set_armour(0x2800) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x00) + label(0x00) + guard_try_spawning_item(0xc100, 0x07, 0x00000000, 0x00) + label(0x00) + random_generate_seed + if_random_seed_greater_than(0x64, 0x00) + guard_try_spawning_item(0xc100, 0x07, 0x00000010, 0x00) + label(0x00) + goto_next(0x04) + label(0x04) + jump_to_ai_list(0xfd, 0x2204) + ai_list_end +}; +u8 ai_32[] = { + label(0x03) + if_objective_bitfield_is_set_on(0x00200000, 0x04) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x07) + if_guard_shot_from_bond_missed(0x04) + label(0x07) + label(0x0a) + ai_sleep + if_guard_shot_from_bond_missed(0x04) + if_guard_and_bond_within_line_of_sight(0x07) + goto_first(0x0a) + label(0x07) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x07) + label(0x07) + label(0x0b) + ai_sleep + if_guard_shot_from_bond_missed(0x04) + if_guard_has_stopped_moving(0x07) + goto_first(0x0b) + label(0x07) + goto_first(0x03) + label(0x04) + jump_to_ai_list(0xfd, 0x1904) + ai_list_end +}; +u8 ai_43[] = { + label(0x03) + objective_bitfield_set_off(0x00200000) + objective_bitfield_set_off(0x00400000) + local_timer_stop + local_timer_reset + label(0x00) + ai_sleep + if_local_timer_less_than(0xc00300, 0x07) + goto_first(0x03) + label(0x07) + if_object_was_activated(0x03, 0x07) + goto_first(0x00) + label(0x07) + if_object_flags_2_is_set_on(0x03, 0x08000000, 0x07) + goto_first(0x00) + label(0x07) + alarm_on + text_print_top(0x0a7c) + objective_bitfield_set_on(0x00200000) + local_timer_reset_start + goto_first(0x00) + ai_list_end +}; +u8 ai_0[] = { + guard_start_patrol(0x00) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x01) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_2[] = { + guard_start_patrol(0x02) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_3[] = { + guard_start_patrol(0x03) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_4[] = { + guard_start_patrol(0x04) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_5[] = { + guard_start_patrol(0x05) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_6[] = { + guard_start_patrol(0x06) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_7[] = { + guard_start_patrol(0x07) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_8[] = { + guard_start_patrol(0x08) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_9[] = { + guard_start_patrol(0x09) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_10[] = { + guard_start_patrol(0x0a) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_11[] = { + guard_start_patrol(0x0b) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_12[] = { + guard_start_patrol(0x0c) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_13[] = { + guard_start_patrol(0x0d) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_14[] = { + guard_start_patrol(0x0e) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_15[] = { + guard_start_patrol(0x0f) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_33[] = { + guard_play_animation(0x6600, 0x0000, 0x0100, 0x04, 0x10) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x320000, 0x07) + goto_first(0x0a) + label(0x07) + guard_play_animation(0x6600, 0x0100, 0xffff, 0x04, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_45[] = { + label(0x0a) + ai_sleep + if_camera_is_in_bond_swirl(0x07) + goto_first(0x0a) + label(0x07) + jump_to_ai_list(0xf8, 0x2304) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_44[] = { + label(0x03) + ai_sleep + if_bond_in_room_with_pad(0x2e00, 0x07) + goto_first(0x03) + label(0x07) + if_bond_y_pos_less_than(0x2c01, 0x07) + goto_first(0x03) + label(0x07) + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + local_timer_reset_start + label(0x0a) + ai_sleep + if_bond_is_dead(0x46) + if_bond_in_room_with_pad(0x2e00, 0x07) + goto_next(0x01) + label(0x07) + if_bond_y_pos_less_than(0x0000, 0x07) + if_local_timer_greater_than(0xb40000, 0x07) + goto_first(0x0a) + label(0x07) + objective_bitfield_set_on(0x00800000) + bond_disable_damage_and_pickups + screen_fade_to_black + label(0x0b) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0b) + label(0x07) + if_objective_all_completed(0x07) + jump_to_ai_list(0xfd, 0x0f00) + label(0x07) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x04, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x2404) + jump_to_ai_list(0xfd, 0x0100) + label(0x01) + hud_show_all_and_unlock_controls_and_resume_mission_time + goto_first(0x03) + label(0x46) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_34[] = { + object_flags_2_set_on(0x05, 0x00000800) + chr_try_teleporting_to_pad(0xfd, 0x2f00, 0x07) + label(0x07) + guard_flags_set_on(0x00200000) + guard_flags_set_on(0x00008000) + screen_fade_from_black + music_xtrack_play(0x00, 0xff, 0xff) + guard_play_animation(0x6300, 0xffff, 0x4200, 0x06, 0x10) + ai_sleep + guard_flags_set_on(0x00100000) + label(0x0c) + ai_sleep + if_guard_has_stopped_moving(0x07) + goto_first(0x0c) + label(0x07) + guard_play_animation(0xb200, 0x1400, 0xffff, 0x06, 0x18) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x07) + goto_first(0x0a) + label(0x07) + screen_fade_to_black + label(0x0b) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0b) + label(0x07) + exit_level + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_46[] = { + label(0x00) + ai_sleep + if_door_state_equal(0x05, 0x0e, 0x07) + goto_first(0x00) + label(0x07) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x780000, 0x07) + goto_first(0x0a) + label(0x07) + sfx_play(0x0501, 0x02) + sfx_emit_from_object(0x02, 0x05, 0x0000) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/UsetupsevxbZ.c b/assets/obseg/setup/UsetupsevxbZ.c index 8047802f..1c945ed1 100644 --- a/assets/obseg/setup/UsetupsevxbZ.c +++ b/assets/obseg/setup/UsetupsevxbZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1782,66 +1783,1230 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x200005fd, 0x04240400 }; -u32 ai_1[] = { 0x200105fd, 0x04240400 }; -u32 ai_2[] = { 0x200205fd, 0x04240400 }; -u32 ai_3[] = { 0x200305fd, 0x04240400 }; -u32 ai_4[] = { 0x200405fd, 0x04240400 }; -u32 ai_5[] = { 0x200505fd, 0x04240400 }; -u32 ai_6[] = { 0x200605fd, 0x04240400 }; -u32 ai_7[] = { 0x200705fd, 0x04240400 }; -u32 ai_8[] = { 0x200805fd, 0x04240400 }; -u32 ai_9[] = { 0x200905fd, 0x04240400 }; -u32 ai_10[] = { 0x200a05fd, 0x04240400 }; -u32 ai_11[] = { 0x200b05fd, 0x04240400 }; -u32 ai_12[] = { 0x200c05fd, 0x04240400 }; -u32 ai_13[] = { 0x200d05fd, 0x04240400 }; -u32 ai_14[] = { 0x200e05fd, 0x04240400 }; -u32 ai_15[] = { 0x200f05fd, 0x04240400 }; -u32 ai_42[] = { 0x0227039c, 0x00040000, 0x1c5b001b, 0x9a000400, 0x00021b9c, 0x00080000, 0x1c5b011b, 0x9a000800, 0x00021b02, 0x1b5c0009, 0x5c010901, 0x27021cc3, 0x80080008, 0x0209c400, 0x5000c500, 0x000000ae, 0x020503b4, 0x00003c0a, 0x0105020a, 0xc380099a, 0x00400000, 0x00080208, 0x03010804 }; -u32 ai_43[] = { 0x0205039c, 0x00400000, 0x1b010502, 0x1bd00200, 0x13c400e3, 0x01c60127, 0x4a0000ae, 0xc400a202, 0xc7020000, 0x00000209, 0x03b40000, 0x781b0109, 0x021b03c7, 0x027ef407, 0x08020603, 0x01060400 }; -u32 ai_44[] = { 0x02050358, 0x1d091b57, 0x1d1c0105, 0x021bc380, 0x0b9a0000, 0x01000009, 0x021cc380, 0x0c9a0000, 0x02000008, 0x02080301, 0x080209ae, 0xb7000ab9, 0xb5020a03, 0xbb00011b, 0x010a021b, 0xb6b89a00, 0x80000002, 0x06030106, 0x04000000 }; -u32 ai_16[] = { 0xcd026c1c, 0x20020503, 0x01050400 }; -u32 ai_17[] = { 0xf305be26, 0xfffd0413, 0x00000002, 0x05020505, 0xfd000204 }; -u32 ai_18[] = { 0xbf00b808, 0x00000000, 0x050205c0, 0x00dd0000, 0x00000502, 0x0505fd00, 0x02040000 }; -u32 ai_19[] = { 0x8e0fad68, 0x310a0005, 0xfd041704 }; -u32 ai_20[] = { 0x8e10ad68, 0x320a0005, 0xfd041704 }; -u32 ai_21[] = { 0x8e11ad68, 0x330a0005, 0xfd041704 }; -u32 ai_22[] = { 0x3335c81b, 0x7200781b, 0x35640890, 0x003cc000, 0xde000000, 0x00050205, 0xbf00b808, 0x00000000, 0x05020500, 0x06020890, 0x0050c000, 0xdd000000, 0x00050205, 0xbf00c107, 0x80000000, 0x05020533, 0x356405bf, 0x00c10790, 0x00000005, 0x02050006, 0x021b9000, 0x14c000dc, 0x00000000, 0x050205bf, 0x00b80800, 0x00000005, 0x02050206, 0x06042305, 0xfd042304 }; -u32 ai_45[] = { 0xad68656c, 0x6c6f0002, 0x05033702, 0x01050202, 0x0224aead, 0x210a0003, 0x9c000004, 0x0019310f, 0x1b001902, 0x1bf319bd, 0x26ff00d6, 0x04140000, 0x00011b02, 0x19021b03, 0x9c000004, 0x00193110, 0x1b001902, 0x1bf319bd, 0x26ff00d6, 0x04150000, 0x00011b02, 0x19021b03, 0x9c000004, 0x00193111, 0x1b001902, 0x1bf319bd, 0x26ff00d6, 0x04160000, 0x00011b02, 0x19020603, 0xb40004b0, 0x1b010602, 0x1b012404 }; -u32 ai_46[] = { 0x0205ae03, 0xad706174, 0x6831009c, 0x00000400, 0x1931091b, 0x0019021b, 0xf319bd15, 0xff00d604, 0x18000000, 0x011b0219, 0x020603b4, 0x0009601b, 0x0106021b, 0x01050400 }; -u32 ai_23[] = { 0x8e09ad70, 0x310a0002, 0x05bf00b8, 0x08000000, 0x00050205, 0x02031c00, 0x27020803, 0x2f1b3209, 0x4dfd0014, 0x00270401, 0x08021b4d, 0xfd001400, 0x27040009, 0x02040604, 0x2305fd04, 0x01020906, 0x042305fd, 0x04230400 }; -u32 ai_47[] = { 0x0205ae03, 0xad706174, 0x6832009c, 0x00000400, 0x19310a1b, 0x0019021b, 0xf319bd15, 0xff00d604, 0x19000000, 0x011b0219, 0x020603b4, 0x0009601b, 0x0106021b, 0x01050400 }; -u32 ai_24[] = { 0x8e0aad70, 0x320a0002, 0x05bf00b8, 0x08000000, 0x00050205, 0x02031c00, 0x39020803, 0x2f1b3209, 0x4dfd0014, 0x00390401, 0x08021b4d, 0xfd001400, 0x39040009, 0x02040604, 0x2305fd04, 0x02020906, 0x042305fd, 0x04230400 }; -u32 ai_48[] = { 0x0205ae03, 0xad706174, 0x6833009c, 0x00000400, 0x19310b1b, 0x0019021b, 0xf319bd15, 0xff00d604, 0x1a000000, 0x011b0219, 0x020603b4, 0x0009601b, 0x0106021b, 0x01050400 }; -u32 ai_25[] = { 0x8e0bad70, 0x330a0002, 0x05bf00b8, 0x08000000, 0x00050205, 0x02031c00, 0x48020803, 0x2f1b3209, 0x4dfd0014, 0x00480401, 0x08021b4d, 0xfd001400, 0x48040009, 0x02040604, 0x2305fd04, 0x03020906, 0x042305fd, 0x04230400 }; -u32 ai_49[] = { 0x0205ae03, 0xad706174, 0x6838009c, 0x00000400, 0x19310c1b, 0x0019021b, 0xf319bd15, 0xff00d604, 0x1b000000, 0x011b0219, 0x020603b4, 0x0009601b, 0x0106021b, 0x01050400 }; -u32 ai_26[] = { 0x8e0cad70, 0x380a0002, 0x05bf00b8, 0x08000000, 0x00050205, 0x02031c00, 0xb9020803, 0x2f1b3209, 0x4dfd0014, 0x00b90401, 0x08021b4d, 0xfd001400, 0xb9040009, 0x02040604, 0x2305fd04, 0x08020906, 0x042305fd, 0x04230400 }; -u32 ai_50[] = { 0x0205ae03, 0xad706174, 0x68313100, 0x9c000004, 0x0019310d, 0x1b001902, 0x1bf319bd, 0x15ff00d6, 0x041c0000, 0x00011b02, 0x19020603, 0xb4000960, 0x1b010602, 0x1b010504 }; -u32 ai_27[] = { 0x8e0dad70, 0x31310a00, 0x0205bf00, 0xb8080000, 0x00000502, 0x0502031c, 0x007f0208, 0x032f1b32, 0x094dfd00, 0x14007f04, 0x0108021b, 0x4dfd0014, 0x007f0400, 0x09020406, 0x042305fd, 0x040b0209, 0x06042305, 0xfd042304 }; -u32 ai_51[] = { 0x0205ae03, 0xad706174, 0x68313600, 0x9c000004, 0x0019310e, 0x1b001902, 0x1bf319bd, 0x15ff00d6, 0x041d0000, 0x00011b02, 0x19020603, 0xb4000960, 0x1b010602, 0x1b010504 }; -u32 ai_28[] = { 0x8e0ead70, 0x31360a00, 0x0205bf00, 0xb8080000, 0x00000502, 0x0502031c, 0x011b0208, 0x032f1b32, 0x094dfd00, 0x14011b04, 0x0108021b, 0x4dfd0014, 0x011b0400, 0x09020406, 0x042305fd, 0x04100209, 0x06042305, 0xfd042304 }; -u32 ai_52[] = { 0x02050355, 0x001e2f55, 0x00443055, 0x00483155, 0x002a3255, 0x005d3303, 0x55002d34, 0x55007235, 0x55008a36, 0x5500d237, 0x55004138, 0x035500c9, 0x395500b1, 0x3a5500e2, 0x3b5500f3, 0x3c5500e8, 0x3d010502, 0x2f03ac00, 0x0027ac01, 0x0039ac02, 0x0048ac03, 0x002a0105, 0x023003ac, 0x00001eac, 0x010039ac, 0x02002aac, 0x03002701, 0x05023103, 0xac000044, 0xac01005d, 0xac02002a, 0xac030048, 0x01050232, 0x03ac0000, 0x2dac0100, 0x27ac0200, 0x5dac0300, 0x48010502, 0x3303ac00, 0x002dac01, 0x0048ac02, 0x0072ac03, 0x003c0105, 0x023403ac, 0x00002fac, 0x01005dac, 0x02008aac, 0x03002a01, 0x05023503, 0xac00008a, 0xac01003a, 0xac0200b7, 0xac03005d, 0x01050236, 0x03ac0000, 0x72ac0100, 0xe0ac0200, 0x2fac0300, 0x33010502, 0x3703ac00, 0x0041ac01, 0x00b7ac02, 0x00b1ac03, 0x003e0105, 0x023803ac, 0x0000d2ac, 0x0100c9ac, 0x02003eac, 0x0300b701, 0x05023903, 0xac00003e, 0xac010086, 0xac0200b3, 0xac0300b1, 0x0105023a, 0x03ac0000, 0x8aac0100, 0xe2ac0200, 0xacac0300, 0x86010502, 0x3b03ac00, 0x00b1ac01, 0x00f3ac02, 0x0034ac03, 0x00e80105, 0x023c03ac, 0x0000b3ac, 0x010038ac, 0x020033ac, 0x0300e801, 0x05023d03, 0xac0000f3, 0xac0100e2, 0xac020034, 0xac0300b1, 0x01050400 }; -u32 ai_53[] = { 0x8e00ae02, 0x0003b400, 0x012c2c01, 0x00022cae, 0x020803b4, 0x0000781b, 0x0108021b, 0x9c000004, 0x00193104, 0x1b001902, 0x1bad7370, 0x61776e31, 0x00f31933, 0x35c81b59, 0x01195902, 0x19590319, 0x59041959, 0x05195911, 0x19021b35, 0x321a5907, 0x19591819, 0x59081902, 0x1abd15ff, 0x2328041e, 0x00000001, 0x06ad2d3e, 0x6661696c, 0x00021901, 0x2c0206ad, 0x7331204f, 0x4b210001, 0x2c040000 }; -u32 ai_54[] = { 0x8e01ae02, 0x0003b400, 0x012c2c01, 0x00022cae, 0x020803b4, 0x0000781b, 0x0108021b, 0x9c000004, 0x00193105, 0x1b001902, 0x1bad7370, 0x61776e32, 0x00f31933, 0x35c81b59, 0x01195902, 0x19590319, 0x59041959, 0x05195911, 0x19021b35, 0x321a5907, 0x19591819, 0x59081902, 0x1abd15ff, 0x2328041f, 0x00000001, 0x06ad2d3e, 0x6661696c, 0x00021901, 0x2c0206ad, 0x7332204f, 0x4b210001, 0x2c040000 }; -u32 ai_55[] = { 0x8e02ae02, 0x0003b400, 0x012c2c01, 0x00022cae, 0x020803b4, 0x0000781b, 0x0108021b, 0x9c000004, 0x00193106, 0x1b001902, 0x1bad7370, 0x61776e33, 0x00f31933, 0x35c81b59, 0x01195902, 0x19590319, 0x59041959, 0x05195911, 0x19021b35, 0x321a5907, 0x19591819, 0x59081902, 0x1abd15ff, 0x23280420, 0x00000001, 0x06ad2d3e, 0x6661696c, 0x00021901, 0x2c0206ad, 0x7333204f, 0x4b210001, 0x2c040000 }; -u32 ai_56[] = { 0x8e03ae02, 0x0003b400, 0x012c2c01, 0x00022cae, 0x020803b4, 0x0000781b, 0x0108021b, 0x9c000004, 0x00193107, 0x1b001902, 0x1bad7370, 0x61776e34, 0x00f31933, 0x35c81b59, 0x01195902, 0x19590319, 0x59041959, 0x05195911, 0x19021b35, 0x321a5907, 0x19591819, 0x59081902, 0x1abd15ff, 0x23280421, 0x00000001, 0x06ad2d3e, 0x6661696c, 0x00021901, 0x2c0206ad, 0x7334204f, 0x4b210001, 0x2c040000 }; -u32 ai_29[] = { 0x8e0405fd, 0x04220400 }; -u32 ai_30[] = { 0x8e0505fd, 0x04220400 }; -u32 ai_31[] = { 0x8e0605fd, 0x04220400 }; -u32 ai_32[] = { 0x8e0705fd, 0x04220400 }; -u32 ai_33[] = { 0xbf00c107, 0x00000000, 0x1b021b8d, 0xbf05fd04, 0x23040000 }; -u32 ai_34[] = { 0x0229ae4c, 0x00c81928, 0x0802192a, 0x08020803, 0x4c05dc3f, 0x4c005019, 0x3c2a0219, 0x2f2bb400, 0x00f01b01, 0x08021b01, 0x29022a3c, 0x1b000602, 0x2b030129, 0x021b0228, 0x33350a1b, 0x1a06021b, 0x35321b0e, 0x06021b35, 0x3c1b1306, 0x021b3550, 0x1b130602, 0x1b35641b, 0x1106021b, 0x35961b12, 0x06021b35, 0xc81b1400, 0x01000006, 0x021b1500, 0x01000006, 0x0206032f, 0x1b010602, 0x1b4c0050, 0x083c1b00, 0x08020803, 0x0129021b, 0x03012802, 0x3fad746f, 0x6f206661, 0x72202d20, 0x64656c65, 0x74656421, 0x0023fd02, 0x09030109, 0x04000000 }; -u32 ai_35[] = { 0x0205034c, 0x012c1932, 0x3e02197e, 0xfd3e0105, 0x023e0604, 0x2305fd04, 0x23040000 }; -u32 ai_57[] = { 0x022c03eb, 0x40550003, 0x1b550006, 0x1b550007, 0x1b550008, 0x1b550009, 0x1b012c02, 0x1becd703, 0xda9a0000, 0x04000208, 0x03dc1b01, 0x08021bf1, 0x1b05fd00, 0x0f021bdd, 0xeaed0303, 0x03d50b00, 0x020000a1, 0xf8000004, 0x00d9f800, 0x031b021b, 0x05f80425, 0x230f2310, 0x23112309, 0x230a230b, 0x230c230d, 0x230e2300, 0x23012302, 0x23032304, 0x23052306, 0x230703bd, 0x26ff0000, 0x04260000, 0x00111b02, 0x1bdb05fd, 0x00010240, 0x05fd0001, 0x04000000 }; -u32 ai_36[] = { 0x0a0059ff, 0xffffff06, 0x10e0fd01, 0xae020803, 0xb40000b4, 0x1b010802, 0x1bda0209, 0x03dc1b01, 0x09021bd5, 0x0c000200, 0x00d9f800, 0x041b021b, 0x0a0065ff, 0xff002206, 0x10bd26ff, 0x00010427, 0x00000011, 0x1b021bbd, 0x15ff0005, 0x04280000, 0x00111b02, 0x1bdbf400, 0xffffae02, 0x0a032f1b, 0x010a021b, 0xe0fd000a, 0x00650022, 0xffff0610, 0xc3800e02, 0x0b03b400, 0x00f01b01, 0x0b021bda, 0x020c03dc, 0x1b010c02, 0x1bd50d00, 0x020000df, 0x0adb020d, 0x03dc1b01, 0x0d021b67, 0x0aae020e, 0x03680a01, 0x1bb40000, 0xb41b010e, 0x021bda02, 0x0f03dc1b, 0x010f021b, 0xd2020603, 0x01060400 }; -u32 ai_37[] = { 0xad65310a, 0x00bf00b8, 0x08000000, 0x001b021b, 0x15002100, 0x001b021b, 0x02060301, 0x06040000 }; -u32 ai_38[] = { 0xad65320a, 0x00bf00b8, 0x08000000, 0x001b021b, 0x14002100, 0x001b021b, 0x02060301, 0x06040000 }; -u32 ai_39[] = { 0xad65330a, 0x00bf00b8, 0x08000000, 0x001b021b, 0x0a006bff, 0xffffff06, 0x10ae0208, 0x03b40000, 0x781b0108, 0x021b1400, 0x2100001b, 0x021b0206, 0x03010604 }; -u32 ai_40[] = { 0x0a0062ff, 0xff006304, 0x100a0062, 0xffff0063, 0x04100206, 0x03010604 }; -u32 ai_58[] = { 0x020803cf, 0x1b010802, 0x1b05f804, 0x29020603, 0x01060400 }; -u32 ai_59[] = { 0x0205039c, 0x00800000, 0x1b010502, 0x1bae0209, 0x03ad4932, 0x0a00b400, 0x025818b4, 0x00025817, 0xb400021c, 0x16b40001, 0xa415b400, 0x016814b4, 0x0000b413, 0xb4000000, 0x12010902, 0x12ad5431, 0x0a00a40e, 0x00020000, 0x5f0ea40f, 0x00020000, 0x5f0f0109, 0x0213a410, 0x00020000, 0x5f10a411, 0x00020000, 0x5f110109, 0x0214a412, 0x00020000, 0x5f12a413, 0x00020000, 0x5f13a409, 0x00020000, 0x5f09c380, 0x0d010902, 0x15010902, 0x16010902, 0x17010902, 0x18ad434c, 0x0a0005fd, 0x00010400 }; -u32 ai_41[] = { 0xcd000000, 0x00020803, 0x0108021b, 0x04000000 }; +u8 ai_0[] = { + guard_start_patrol(0x00) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x01) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_2[] = { + guard_start_patrol(0x02) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_3[] = { + guard_start_patrol(0x03) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_4[] = { + guard_start_patrol(0x04) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_5[] = { + guard_start_patrol(0x05) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_6[] = { + guard_start_patrol(0x06) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_7[] = { + guard_start_patrol(0x07) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_8[] = { + guard_start_patrol(0x08) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_9[] = { + guard_start_patrol(0x09) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_10[] = { + guard_start_patrol(0x0a) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_11[] = { + guard_start_patrol(0x0b) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_12[] = { + guard_start_patrol(0x0c) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_13[] = { + guard_start_patrol(0x0d) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_14[] = { + guard_start_patrol(0x0e) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_15[] = { + guard_start_patrol(0x0f) + jump_to_ai_list(0xfd, 0x2404) + ai_list_end +}; +u8 ai_42[] = { + label(0x27) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x1c) + if_object_not_destroyed(0x00, 0x1b) + objective_bitfield_set_on(0x00000400) + label(0x1b) + if_objective_bitfield_is_set_on(0x00000800, 0x1c) + if_object_not_destroyed(0x01, 0x1b) + objective_bitfield_set_on(0x00000800) + label(0x1b) + label(0x1b) + if_object_was_activated(0x00, 0x09) + if_object_was_activated(0x01, 0x09) + goto_first(0x27) + label(0x1c) + text_print_top(0x0880) + goto_next(0x08) + label(0x09) + sfx_play(0x5000, 0x00) + sfx_emit_from_object(0x00, 0x00, 0x0000) + local_timer_reset_start + label(0x05) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x0a) + goto_first(0x05) + label(0x0a) + text_print_top(0x0980) + objective_bitfield_set_on(0x00004000) + goto_next(0x08) + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; +u8 ai_43[] = { + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00004000, 0x1b) + goto_first(0x05) + label(0x1b) + tv_change_screen_bank(0x02, 0x00, 0x13) + sfx_play(0xe300, 0x01) + sfx_emit_from_pad(0x01, 0x4a27, 0x0000) + local_timer_reset_start + sfx_play(0xa200, 0x02) + sfx_set_channel_volume(0x02, 0x0000, 0x0000) + label(0x09) + ai_sleep + if_local_timer_greater_than(0x780000, 0x1b) + goto_first(0x09) + label(0x1b) + ai_sleep + sfx_set_channel_volume(0x02, 0xf47e, 0x0807) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_44[] = { + label(0x05) + ai_sleep + if_item_is_attached_to_object(0x1d, 0x09, 0x1b) + if_item_is_stationary_within_level(0x1d, 0x1c) + goto_first(0x05) + label(0x1b) + text_print_top(0x0b80) + objective_bitfield_set_on(0x00010000) + goto_next(0x09) + label(0x1c) + text_print_top(0x0c80) + objective_bitfield_set_on(0x00020000) + goto_next(0x08) + label(0x08) + ai_sleep + goto_first(0x08) + label(0x09) + local_timer_reset_start + hud_countdown_set(0x0a00) + hud_countdown_start + hud_countdown_show + label(0x0a) + ai_sleep + if_hud_countdown_less_than(0x0100, 0x1b) + goto_first(0x0a) + label(0x1b) + hud_countdown_hide + hud_countdown_stop + objective_bitfield_set_on(0x00008000) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_16[] = { + aircraft_rotor_speed(0x6c02, 0x201c) + label(0x05) + ai_sleep + goto_first(0x05) + ai_list_end +}; +u8 ai_17[] = { + if_bond_damage_and_pickups_disabled(0x05) + chr_try_spawning_next_to_unseen_chr(0x26, 0xff, 0xfd, 0x1304, 0x02000000, 0x05) + label(0x05) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_18[] = { + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x05) + label(0x05) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x05) + label(0x05) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_19[] = { + guard_set_chr_num(0x0f) + debug_log 'h', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_20[] = { + guard_set_chr_num(0x10) + debug_log 'h', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_21[] = { + guard_set_chr_num(0x11) + debug_log 'h', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_22[] = { + random_generate_seed + if_random_seed_greater_than(0xc8, 0x1b) + if_mission_time_less_than(0x7800, 0x1b) + if_random_seed_greater_than(0x64, 0x08) + guard_set_armour(0x3c00) + guard_try_spawning_hat(0xde00, 0x00000000, 0x05) + label(0x05) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x05) + label(0x05) + goto_next(0x06) + label(0x08) + guard_set_armour(0x5000) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x05) + label(0x05) + guard_try_spawning_item(0xc100, 0x07, 0x00000080, 0x05) + label(0x05) + random_generate_seed + if_random_seed_greater_than(0x64, 0x05) + guard_try_spawning_item(0xc100, 0x07, 0x00000090, 0x05) + label(0x05) + goto_next(0x06) + label(0x1b) + guard_set_armour(0x1400) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x05) + label(0x05) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x05) + label(0x05) + label(0x06) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_45[] = { + debug_log 'h', 'e', 'l', 'l', 'o', '\0', + label(0x05) + ai_sleep + if_alarm_is_on(0x02) + goto_first(0x05) + label(0x02) + label(0x24) + local_timer_reset_start + debug_log '!', '\n', '\0', + ai_sleep + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x0f, 0x1b) + goto_next(0x19) + label(0x1b) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x26, 0xff, 0xd600, 0x1404, 0x01000000, 0x1b) + label(0x19) + label(0x1b) + ai_sleep + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x10, 0x1b) + goto_next(0x19) + label(0x1b) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x26, 0xff, 0xd600, 0x1504, 0x01000000, 0x1b) + label(0x19) + label(0x1b) + ai_sleep + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x11, 0x1b) + goto_next(0x19) + label(0x1b) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x26, 0xff, 0xd600, 0x1604, 0x01000000, 0x1b) + label(0x19) + label(0x06) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x1b) + goto_first(0x06) + label(0x1b) + goto_first(0x24) + ai_list_end +}; +u8 ai_46[] = { + label(0x05) + local_timer_reset_start + ai_sleep + debug_log 'p', 'a', 't', 'h', '1', '\0', + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x09, 0x1b) + goto_next(0x19) + label(0x1b) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x15, 0xff, 0xd600, 0x1804, 0x01000000, 0x1b) + label(0x19) + label(0x06) + ai_sleep + if_local_timer_greater_than(0x600900, 0x1b) + goto_first(0x06) + label(0x1b) + goto_first(0x05) + ai_list_end +}; +u8 ai_23[] = { + guard_set_chr_num(0x09) + debug_log 'p', '1', '\n', '\0', + label(0x05) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x05) + label(0x05) + label(0x03) + guard_runs_to_pad(0x2700) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x1b) + if_guard_sees_bond(0x09) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x2700, 0x04) + goto_first(0x08) + label(0x1b) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x2700, 0x04) + goto_next(0x09) + label(0x04) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x0104) + label(0x09) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_47[] = { + label(0x05) + local_timer_reset_start + ai_sleep + debug_log 'p', 'a', 't', 'h', '2', '\0', + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x0a, 0x1b) + goto_next(0x19) + label(0x1b) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x15, 0xff, 0xd600, 0x1904, 0x01000000, 0x1b) + label(0x19) + label(0x06) + ai_sleep + if_local_timer_greater_than(0x600900, 0x1b) + goto_first(0x06) + label(0x1b) + goto_first(0x05) + ai_list_end +}; +u8 ai_24[] = { + guard_set_chr_num(0x0a) + debug_log 'p', '2', '\n', '\0', + label(0x05) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x05) + label(0x05) + label(0x03) + guard_runs_to_pad(0x3900) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x1b) + if_guard_sees_bond(0x09) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x3900, 0x04) + goto_first(0x08) + label(0x1b) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x3900, 0x04) + goto_next(0x09) + label(0x04) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x0204) + label(0x09) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_48[] = { + label(0x05) + local_timer_reset_start + ai_sleep + debug_log 'p', 'a', 't', 'h', '3', '\0', + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x0b, 0x1b) + goto_next(0x19) + label(0x1b) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x15, 0xff, 0xd600, 0x1a04, 0x01000000, 0x1b) + label(0x19) + label(0x06) + ai_sleep + if_local_timer_greater_than(0x600900, 0x1b) + goto_first(0x06) + label(0x1b) + goto_first(0x05) + ai_list_end +}; +u8 ai_25[] = { + guard_set_chr_num(0x0b) + debug_log 'p', '3', '\n', '\0', + label(0x05) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x05) + label(0x05) + label(0x03) + guard_runs_to_pad(0x4800) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x1b) + if_guard_sees_bond(0x09) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x4800, 0x04) + goto_first(0x08) + label(0x1b) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x4800, 0x04) + goto_next(0x09) + label(0x04) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x0304) + label(0x09) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_49[] = { + label(0x05) + local_timer_reset_start + ai_sleep + debug_log 'p', 'a', 't', 'h', '8', '\0', + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x0c, 0x1b) + goto_next(0x19) + label(0x1b) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x15, 0xff, 0xd600, 0x1b04, 0x01000000, 0x1b) + label(0x19) + label(0x06) + ai_sleep + if_local_timer_greater_than(0x600900, 0x1b) + goto_first(0x06) + label(0x1b) + goto_first(0x05) + ai_list_end +}; +u8 ai_26[] = { + guard_set_chr_num(0x0c) + debug_log 'p', '8', '\n', '\0', + label(0x05) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x05) + label(0x05) + label(0x03) + guard_runs_to_pad(0xb900) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x1b) + if_guard_sees_bond(0x09) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0xb900, 0x04) + goto_first(0x08) + label(0x1b) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0xb900, 0x04) + goto_next(0x09) + label(0x04) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x0804) + label(0x09) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_50[] = { + label(0x05) + local_timer_reset_start + ai_sleep + debug_log 'p', 'a', 't', 'h', '1', '1', '\0', + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x0d, 0x1b) + goto_next(0x19) + label(0x1b) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x15, 0xff, 0xd600, 0x1c04, 0x01000000, 0x1b) + label(0x19) + label(0x06) + ai_sleep + if_local_timer_greater_than(0x600900, 0x1b) + goto_first(0x06) + label(0x1b) + goto_first(0x05) + ai_list_end +}; +u8 ai_27[] = { + guard_set_chr_num(0x0d) + debug_log 'p', '1', '1', '\n', '\0', + label(0x05) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x05) + label(0x05) + label(0x03) + guard_runs_to_pad(0x7f00) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x1b) + if_guard_sees_bond(0x09) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x7f00, 0x04) + goto_first(0x08) + label(0x1b) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x7f00, 0x04) + goto_next(0x09) + label(0x04) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x0b04) + label(0x09) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_51[] = { + label(0x05) + local_timer_reset_start + ai_sleep + debug_log 'p', 'a', 't', 'h', '1', '6', '\0', + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x0e, 0x1b) + goto_next(0x19) + label(0x1b) + if_bond_damage_and_pickups_disabled(0x19) + chr_try_spawning_at_pad(0x15, 0xff, 0xd600, 0x1d04, 0x01000000, 0x1b) + label(0x19) + label(0x06) + ai_sleep + if_local_timer_greater_than(0x600900, 0x1b) + goto_first(0x06) + label(0x1b) + goto_first(0x05) + ai_list_end +}; +u8 ai_28[] = { + guard_set_chr_num(0x0e) + debug_log 'p', '1', '6', '\n', '\0', + label(0x05) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x05) + label(0x05) + label(0x03) + guard_runs_to_pad(0x1b01) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x1b) + if_guard_sees_bond(0x09) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x1b01, 0x04) + goto_first(0x08) + label(0x1b) + if_chr_distance_to_pad_less_than(0xfd, 0x1400, 0x1b01, 0x04) + goto_next(0x09) + label(0x04) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x1004) + label(0x09) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_52[] = { + label(0x05) + ai_sleep + if_bond_in_room_with_pad(0x1e00, 0x2f) + if_bond_in_room_with_pad(0x4400, 0x30) + if_bond_in_room_with_pad(0x4800, 0x31) + if_bond_in_room_with_pad(0x2a00, 0x32) + if_bond_in_room_with_pad(0x5d00, 0x33) + ai_sleep + if_bond_in_room_with_pad(0x2d00, 0x34) + if_bond_in_room_with_pad(0x7200, 0x35) + if_bond_in_room_with_pad(0x8a00, 0x36) + if_bond_in_room_with_pad(0xd200, 0x37) + if_bond_in_room_with_pad(0x4100, 0x38) + ai_sleep + if_bond_in_room_with_pad(0xc900, 0x39) + if_bond_in_room_with_pad(0xb100, 0x3a) + if_bond_in_room_with_pad(0xe200, 0x3b) + if_bond_in_room_with_pad(0xf300, 0x3c) + if_bond_in_room_with_pad(0xe800, 0x3d) + goto_first(0x05) + label(0x2f) + ai_sleep + chr_set_pad_preset(0x00, 0x2700) + chr_set_pad_preset(0x01, 0x3900) + chr_set_pad_preset(0x02, 0x4800) + chr_set_pad_preset(0x03, 0x2a00) + goto_first(0x05) + label(0x30) + ai_sleep + chr_set_pad_preset(0x00, 0x1e00) + chr_set_pad_preset(0x01, 0x3900) + chr_set_pad_preset(0x02, 0x2a00) + chr_set_pad_preset(0x03, 0x2700) + goto_first(0x05) + label(0x31) + ai_sleep + chr_set_pad_preset(0x00, 0x4400) + chr_set_pad_preset(0x01, 0x5d00) + chr_set_pad_preset(0x02, 0x2a00) + chr_set_pad_preset(0x03, 0x4800) + goto_first(0x05) + label(0x32) + ai_sleep + chr_set_pad_preset(0x00, 0x2d00) + chr_set_pad_preset(0x01, 0x2700) + chr_set_pad_preset(0x02, 0x5d00) + chr_set_pad_preset(0x03, 0x4800) + goto_first(0x05) + label(0x33) + ai_sleep + chr_set_pad_preset(0x00, 0x2d00) + chr_set_pad_preset(0x01, 0x4800) + chr_set_pad_preset(0x02, 0x7200) + chr_set_pad_preset(0x03, 0x3c00) + goto_first(0x05) + label(0x34) + ai_sleep + chr_set_pad_preset(0x00, 0x2f00) + chr_set_pad_preset(0x01, 0x5d00) + chr_set_pad_preset(0x02, 0x8a00) + chr_set_pad_preset(0x03, 0x2a00) + goto_first(0x05) + label(0x35) + ai_sleep + chr_set_pad_preset(0x00, 0x8a00) + chr_set_pad_preset(0x01, 0x3a00) + chr_set_pad_preset(0x02, 0xb700) + chr_set_pad_preset(0x03, 0x5d00) + goto_first(0x05) + label(0x36) + ai_sleep + chr_set_pad_preset(0x00, 0x7200) + chr_set_pad_preset(0x01, 0xe000) + chr_set_pad_preset(0x02, 0x2f00) + chr_set_pad_preset(0x03, 0x3300) + goto_first(0x05) + label(0x37) + ai_sleep + chr_set_pad_preset(0x00, 0x4100) + chr_set_pad_preset(0x01, 0xb700) + chr_set_pad_preset(0x02, 0xb100) + chr_set_pad_preset(0x03, 0x3e00) + goto_first(0x05) + label(0x38) + ai_sleep + chr_set_pad_preset(0x00, 0xd200) + chr_set_pad_preset(0x01, 0xc900) + chr_set_pad_preset(0x02, 0x3e00) + chr_set_pad_preset(0x03, 0xb700) + goto_first(0x05) + label(0x39) + ai_sleep + chr_set_pad_preset(0x00, 0x3e00) + chr_set_pad_preset(0x01, 0x8600) + chr_set_pad_preset(0x02, 0xb300) + chr_set_pad_preset(0x03, 0xb100) + goto_first(0x05) + label(0x3a) + ai_sleep + chr_set_pad_preset(0x00, 0x8a00) + chr_set_pad_preset(0x01, 0xe200) + chr_set_pad_preset(0x02, 0xac00) + chr_set_pad_preset(0x03, 0x8600) + goto_first(0x05) + label(0x3b) + ai_sleep + chr_set_pad_preset(0x00, 0xb100) + chr_set_pad_preset(0x01, 0xf300) + chr_set_pad_preset(0x02, 0x3400) + chr_set_pad_preset(0x03, 0xe800) + goto_first(0x05) + label(0x3c) + ai_sleep + chr_set_pad_preset(0x00, 0xb300) + chr_set_pad_preset(0x01, 0x3800) + chr_set_pad_preset(0x02, 0x3300) + chr_set_pad_preset(0x03, 0xe800) + goto_first(0x05) + label(0x3d) + ai_sleep + chr_set_pad_preset(0x00, 0xf300) + chr_set_pad_preset(0x01, 0xe200) + chr_set_pad_preset(0x02, 0x3400) + chr_set_pad_preset(0x03, 0xb100) + goto_first(0x05) + ai_list_end +}; +u8 ai_53[] = { + guard_set_chr_num(0x00) + local_timer_reset_start + label(0x00) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0x00) + label(0x2c) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x780000, 0x1b) + goto_first(0x08) + label(0x1b) + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x04, 0x1b) + goto_next(0x19) + label(0x1b) + debug_log 's', 'p', 'a', 'w', 'n', '1', '\0', + if_bond_damage_and_pickups_disabled(0x19) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x1b) + if_bond_has_item_equipped(0x01, 0x19) + if_bond_has_item_equipped(0x02, 0x19) + if_bond_has_item_equipped(0x03, 0x19) + if_bond_has_item_equipped(0x04, 0x19) + if_bond_has_item_equipped(0x05, 0x19) + if_bond_has_item_equipped(0x11, 0x19) + label(0x1b) + if_random_seed_greater_than(0x32, 0x1a) + if_bond_has_item_equipped(0x07, 0x19) + if_bond_has_item_equipped(0x18, 0x19) + if_bond_has_item_equipped(0x08, 0x19) + label(0x1a) + chr_try_spawning_at_pad(0x15, 0xff, 0x2823, 0x1e04, 0x01000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + label(0x19) + goto_first(0x2c) + label(0x06) + debug_log 's', '1', ' ', 'O', 'K', '!', '\0', + goto_first(0x2c) + ai_list_end +}; +u8 ai_54[] = { + guard_set_chr_num(0x01) + local_timer_reset_start + label(0x00) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0x00) + label(0x2c) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x780000, 0x1b) + goto_first(0x08) + label(0x1b) + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x05, 0x1b) + goto_next(0x19) + label(0x1b) + debug_log 's', 'p', 'a', 'w', 'n', '2', '\0', + if_bond_damage_and_pickups_disabled(0x19) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x1b) + if_bond_has_item_equipped(0x01, 0x19) + if_bond_has_item_equipped(0x02, 0x19) + if_bond_has_item_equipped(0x03, 0x19) + if_bond_has_item_equipped(0x04, 0x19) + if_bond_has_item_equipped(0x05, 0x19) + if_bond_has_item_equipped(0x11, 0x19) + label(0x1b) + if_random_seed_greater_than(0x32, 0x1a) + if_bond_has_item_equipped(0x07, 0x19) + if_bond_has_item_equipped(0x18, 0x19) + if_bond_has_item_equipped(0x08, 0x19) + label(0x1a) + chr_try_spawning_at_pad(0x15, 0xff, 0x2823, 0x1f04, 0x01000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + label(0x19) + goto_first(0x2c) + label(0x06) + debug_log 's', '2', ' ', 'O', 'K', '!', '\0', + goto_first(0x2c) + ai_list_end +}; +u8 ai_55[] = { + guard_set_chr_num(0x02) + local_timer_reset_start + label(0x00) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0x00) + label(0x2c) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x780000, 0x1b) + goto_first(0x08) + label(0x1b) + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x06, 0x1b) + goto_next(0x19) + label(0x1b) + debug_log 's', 'p', 'a', 'w', 'n', '3', '\0', + if_bond_damage_and_pickups_disabled(0x19) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x1b) + if_bond_has_item_equipped(0x01, 0x19) + if_bond_has_item_equipped(0x02, 0x19) + if_bond_has_item_equipped(0x03, 0x19) + if_bond_has_item_equipped(0x04, 0x19) + if_bond_has_item_equipped(0x05, 0x19) + if_bond_has_item_equipped(0x11, 0x19) + label(0x1b) + if_random_seed_greater_than(0x32, 0x1a) + if_bond_has_item_equipped(0x07, 0x19) + if_bond_has_item_equipped(0x18, 0x19) + if_bond_has_item_equipped(0x08, 0x19) + label(0x1a) + chr_try_spawning_at_pad(0x15, 0xff, 0x2823, 0x2004, 0x01000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + label(0x19) + goto_first(0x2c) + label(0x06) + debug_log 's', '3', ' ', 'O', 'K', '!', '\0', + goto_first(0x2c) + ai_list_end +}; +u8 ai_56[] = { + guard_set_chr_num(0x03) + local_timer_reset_start + label(0x00) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0x00) + label(0x2c) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x780000, 0x1b) + goto_first(0x08) + label(0x1b) + if_objective_bitfield_is_set_on(0x00040000, 0x19) + if_chr_does_not_exist(0x07, 0x1b) + goto_next(0x19) + label(0x1b) + debug_log 's', 'p', 'a', 'w', 'n', '4', '\0', + if_bond_damage_and_pickups_disabled(0x19) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x1b) + if_bond_has_item_equipped(0x01, 0x19) + if_bond_has_item_equipped(0x02, 0x19) + if_bond_has_item_equipped(0x03, 0x19) + if_bond_has_item_equipped(0x04, 0x19) + if_bond_has_item_equipped(0x05, 0x19) + if_bond_has_item_equipped(0x11, 0x19) + label(0x1b) + if_random_seed_greater_than(0x32, 0x1a) + if_bond_has_item_equipped(0x07, 0x19) + if_bond_has_item_equipped(0x18, 0x19) + if_bond_has_item_equipped(0x08, 0x19) + label(0x1a) + chr_try_spawning_at_pad(0x15, 0xff, 0x2823, 0x2104, 0x01000000, 0x06) + debug_log '-', '>', 'f', 'a', 'i', 'l', '\0', + label(0x19) + goto_first(0x2c) + label(0x06) + debug_log 's', '4', ' ', 'O', 'K', '!', '\0', + goto_first(0x2c) + ai_list_end +}; +u8 ai_29[] = { + guard_set_chr_num(0x04) + jump_to_ai_list(0xfd, 0x2204) + ai_list_end +}; +u8 ai_30[] = { + guard_set_chr_num(0x05) + jump_to_ai_list(0xfd, 0x2204) + ai_list_end +}; +u8 ai_31[] = { + guard_set_chr_num(0x06) + jump_to_ai_list(0xfd, 0x2204) + ai_list_end +}; +u8 ai_32[] = { + guard_set_chr_num(0x07) + jump_to_ai_list(0xfd, 0x2204) + ai_list_end +}; +u8 ai_33[] = { + guard_try_spawning_item(0xc100, 0x07, 0x00000000, 0x1b) + label(0x1b) + guard_set_grenade_probability(0xbf) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_34[] = { + label(0x29) + local_timer_reset_start + if_guard_distance_to_bond_greater_than(0xc800, 0x19) + guard_try_running_to_bond_position(0x08) + label(0x19) + guard_try_sprinting_to_bond_position(0x08) + label(0x08) + ai_sleep + if_guard_distance_to_bond_greater_than(0xdc05, 0x3f) + if_guard_distance_to_bond_greater_than(0x5000, 0x19) + if_guard_and_bond_within_line_of_sight(0x2a) + label(0x19) + if_guard_has_stopped_moving(0x2b) + if_local_timer_greater_than(0xf00000, 0x1b) + goto_first(0x08) + label(0x1b) + goto_first(0x29) + label(0x2a) + if_guard_and_bond_within_line_of_sight(0x1b) + goto_next(0x06) + label(0x2b) + ai_sleep + goto_first(0x29) + label(0x1b) + label(0x28) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x1b) + guard_try_throwing_grenade(0x06) + label(0x1b) + if_random_seed_greater_than(0x32, 0x1b) + guard_try_sidestepping(0x06) + label(0x1b) + if_random_seed_greater_than(0x3c, 0x1b) + guard_try_firing_roll(0x06) + label(0x1b) + if_random_seed_greater_than(0x50, 0x1b) + guard_try_firing_roll(0x06) + label(0x1b) + if_random_seed_greater_than(0x64, 0x1b) + guard_try_firing_walk(0x06) + label(0x1b) + if_random_seed_greater_than(0x96, 0x1b) + guard_try_firing_run(0x06) + label(0x1b) + if_random_seed_greater_than(0xc8, 0x1b) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x1b) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x1b) + goto_first(0x06) + label(0x1b) + if_guard_distance_to_bond_greater_than(0x5000, 0x08) + if_guard_and_bond_within_line_of_sight(0x1b) + goto_next(0x08) + label(0x08) + ai_sleep + goto_first(0x29) + label(0x1b) + ai_sleep + goto_first(0x28) + label(0x3f) + debug_log 't', 'o', 'o', ' ', 'f', 'a', 'r', ' ', '-', ' ', 'd', 'e', 'l', 'e', 't', 'e', 'd', '!', '\0', + chr_remove_instant(0xfd) + label(0x09) + ai_sleep + goto_first(0x09) + ai_list_end +}; +u8 ai_35[] = { + label(0x05) + ai_sleep + if_guard_distance_to_bond_greater_than(0x2c01, 0x19) + if_guard_sees_bond(0x3e) + label(0x19) + if_chr_was_damaged_since_last_check(0xfd, 0x3e) + goto_first(0x05) + label(0x3e) + set_return_ai_list(0x2304) + jump_to_ai_list(0xfd, 0x2304) + ai_list_end +}; +u8 ai_57[] = { + label(0x2c) + ai_sleep + if_bond_is_dead(0x40) + if_bond_in_room_with_pad(0x0300, 0x1b) + if_bond_in_room_with_pad(0x0600, 0x1b) + if_bond_in_room_with_pad(0x0700, 0x1b) + if_bond_in_room_with_pad(0x0800, 0x1b) + if_bond_in_room_with_pad(0x0900, 0x1b) + goto_first(0x2c) + label(0x1b) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x03) + screen_fade_to_black + objective_bitfield_set_on(0x00040000) + label(0x08) + ai_sleep + if_screen_fade_completed(0x1b) + goto_first(0x08) + label(0x1b) + if_objective_all_completed(0x1b) + jump_to_ai_list(0xfd, 0x0f00) + label(0x1b) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x0b, 0x0200, 0x0000) + chr_flags_set_off(0xf8, 0x00040000) + chr_try_teleporting_to_pad(0xf8, 0x0300, 0x1b) + label(0x1b) + jump_to_ai_list(0xf8, 0x2504) + chr_remove_instant(0x0f) + chr_remove_instant(0x10) + chr_remove_instant(0x11) + chr_remove_instant(0x09) + chr_remove_instant(0x0a) + chr_remove_instant(0x0b) + chr_remove_instant(0x0c) + chr_remove_instant(0x0d) + chr_remove_instant(0x0e) + chr_remove_instant(0x00) + chr_remove_instant(0x01) + chr_remove_instant(0x02) + chr_remove_instant(0x03) + chr_remove_instant(0x04) + chr_remove_instant(0x05) + chr_remove_instant(0x06) + chr_remove_instant(0x07) + ai_sleep + chr_try_spawning_at_pad(0x26, 0xff, 0x0000, 0x2604, 0x11000000, 0x1b) + label(0x1b) + screen_fade_from_black + jump_to_ai_list(0xfd, 0x0100) + label(0x40) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_36[] = { + guard_play_animation(0x5900, 0xffff, 0xffff, 0x06, 0x10) + chr_remove_item_in_hand(0xfd, 0x01) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x1b) + goto_first(0x08) + label(0x1b) + screen_fade_to_black + label(0x09) + ai_sleep + if_screen_fade_completed(0x1b) + goto_first(0x09) + label(0x1b) + camera_switch(0x0c, 0x0200, 0x0000) + chr_try_teleporting_to_pad(0xf8, 0x0400, 0x1b) + label(0x1b) + guard_play_animation(0x6500, 0xffff, 0x2200, 0x06, 0x10) + chr_try_spawning_at_pad(0x26, 0xff, 0x0100, 0x2704, 0x11000000, 0x1b) + label(0x1b) + chr_try_spawning_at_pad(0x15, 0xff, 0x0500, 0x2804, 0x11000000, 0x1b) + label(0x1b) + screen_fade_from_black + music_xtrack_play(0x00, 0xff, 0xff) + local_timer_reset_start + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x1b) + goto_first(0x0a) + label(0x1b) + chr_remove_item_in_hand(0xfd, 0x00) + guard_play_animation(0x6500, 0x2200, 0xffff, 0x06, 0x10) + text_print_top(0x0e80) + label(0x0b) + ai_sleep + if_local_timer_greater_than(0xf00000, 0x1b) + goto_first(0x0b) + label(0x1b) + screen_fade_to_black + label(0x0c) + ai_sleep + if_screen_fade_completed(0x1b) + goto_first(0x0c) + label(0x1b) + camera_switch(0x0d, 0x0200, 0x0000) + door_open_instant(0x0a) + screen_fade_from_black + label(0x0d) + ai_sleep + if_screen_fade_completed(0x1b) + goto_first(0x0d) + label(0x1b) + door_close(0x0a) + local_timer_reset_start + label(0x0e) + ai_sleep + if_door_state_equal(0x0a, 0x01, 0x1b) + if_local_timer_greater_than(0xb40000, 0x1b) + goto_first(0x0e) + label(0x1b) + screen_fade_to_black + label(0x0f) + ai_sleep + if_screen_fade_completed(0x1b) + goto_first(0x0f) + label(0x1b) + exit_level + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_37[] = { + debug_log 'e', '1', '\n', '\0', + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x1b) + label(0x1b) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x1b) + label(0x1b) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_38[] = { + debug_log 'e', '2', '\n', '\0', + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x1b) + label(0x1b) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x1b) + label(0x1b) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_39[] = { + debug_log 'e', '3', '\n', '\0', + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x1b) + label(0x1b) + guard_play_animation(0x6b00, 0xffff, 0xffff, 0x06, 0x10) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x780000, 0x1b) + goto_first(0x08) + label(0x1b) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x1b) + label(0x1b) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_40[] = { + guard_play_animation(0x6200, 0xffff, 0x6300, 0x04, 0x10) + guard_play_animation(0x6200, 0xffff, 0x6300, 0x04, 0x10) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_58[] = { + label(0x08) + ai_sleep + if_camera_is_in_bond_swirl(0x1b) + goto_first(0x08) + label(0x1b) + jump_to_ai_list(0xf8, 0x2904) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_59[] = { + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x1b) + goto_first(0x05) + label(0x1b) + local_timer_reset_start + label(0x09) + ai_sleep + debug_log 'I', '2', '\n', '\0', + if_local_timer_greater_than(0x580200, 0x18) + if_local_timer_greater_than(0x580200, 0x17) + if_local_timer_greater_than(0x1c0200, 0x16) + if_local_timer_greater_than(0xa40100, 0x15) + if_local_timer_greater_than(0x680100, 0x14) + if_local_timer_greater_than(0xb40000, 0x13) + if_local_timer_greater_than(0x000000, 0x12) + goto_first(0x09) + label(0x12) + debug_log 'T', '1', '\n', '\0', + object_flags_1_set_off(0x0e, 0x00000200) + object_destroy(0x0e) + object_flags_1_set_off(0x0f, 0x00000200) + object_destroy(0x0f) + goto_first(0x09) + label(0x13) + object_flags_1_set_off(0x10, 0x00000200) + object_destroy(0x10) + object_flags_1_set_off(0x11, 0x00000200) + object_destroy(0x11) + goto_first(0x09) + label(0x14) + object_flags_1_set_off(0x12, 0x00000200) + object_destroy(0x12) + object_flags_1_set_off(0x13, 0x00000200) + object_destroy(0x13) + object_flags_1_set_off(0x09, 0x00000200) + object_destroy(0x09) + text_print_top(0x0d80) + goto_first(0x09) + label(0x15) + goto_first(0x09) + label(0x16) + goto_first(0x09) + label(0x17) + goto_first(0x09) + label(0x18) + debug_log 'C', 'L', '\n', '\0', + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_41[] = { + aircraft_rotor_speed(0x0000, 0x0000) + label(0x08) + ai_sleep + goto_first(0x08) + label(0x1b) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/e/UsetupcradZ.c b/assets/obseg/setup/e/UsetupcradZ.c index 469f7b23..f25ed1ae 100644 --- a/assets/obseg/setup/e/UsetupcradZ.c +++ b/assets/obseg/setup/e/UsetupcradZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -864,48 +865,1525 @@ PathRecord patrolpaths[] = { }; -u32 ai_34[] = { 0xad68656c, 0x6c6f0002, 0x350234ae, 0xad210a00, 0x03310129, 0x00330229, 0x33358029, 0xf329bd04, 0xff008304, 0x02000000, 0x01330229, 0xf333bd04, 0xff004f04, 0x02000000, 0x01290233, 0x02290331, 0x02290033, 0x02293335, 0x8029f329, 0xbd04ff00, 0x8a040300, 0x00000133, 0x0229f333, 0xbd04ff00, 0x08040300, 0x00000129, 0x02330229, 0x03310329, 0x00330229, 0x33358029, 0xf329bd04, 0xff001204, 0x04000000, 0x01330229, 0xf333bd04, 0xff005c04, 0x04000000, 0x01290233, 0x02290331, 0x04290033, 0x02293335, 0x8029f329, 0xbd04ff00, 0x3e040500, 0x00000133, 0x0229f333, 0xbd04ff00, 0x00040500, 0x00000129, 0x02330229, 0x03310529, 0x00330229, 0x33358029, 0xf329bd04, 0xff006e04, 0x06000000, 0x01060229, 0xf333bd04, 0xff007d04, 0x06000000, 0x01060233, 0x020603b4, 0x0002d029, 0x01060229, 0x01340400 }; -u32 ai_1[] = { 0x8e01ad68, 0x310a0005, 0xfd040104 }; -u32 ai_2[] = { 0x8e02ad68, 0x320a0005, 0xfd040104 }; -u32 ai_3[] = { 0x8e03ad68, 0x330a0005, 0xfd040104 }; -u32 ai_4[] = { 0x8e04ad68, 0x340a0005, 0xfd040104 }; -u32 ai_5[] = { 0x8e05ad68, 0x350a0005, 0xfd040104 }; -u32 ai_0[] = { 0x02293335, 0xa0363550, 0x338f0028, 0x90001491, 0x3293328d, 0xbfbf00c3, 0x09000000, 0x00290229, 0xc000dc00, 0x00000006, 0x00060233, 0x8f002890, 0x0014913c, 0x933cbf00, 0xc3098000, 0x00002902, 0x29c000de, 0x00000000, 0x290229bf, 0x00c30990, 0x00000006, 0x00060236, 0x8f002890, 0x00149150, 0x9350c000, 0xdd000000, 0x00290229, 0xbf00c309, 0x80000000, 0x290229bf, 0x00c30990, 0x00000006, 0x020605fd, 0x04070400 }; -u32 ai_6[] = { 0x02372807, 0x0207034c, 0x01c2333c, 0x3802332f, 0x39010702, 0x383c2900, 0x06023903, 0x01370229, 0x023a3335, 0x0a291a06, 0x02293532, 0x290e0602, 0x29356429, 0x11060229, 0x35962912, 0x06022935, 0xc8291400, 0x01000006, 0x02291500, 0x01000006, 0x0206032f, 0x29010602, 0x293c2900, 0x07020703, 0x01370229, 0x03013a04 }; -u32 ai_7[] = { 0x9000148f, 0x00aa9164, 0x93649264, 0x9d000002, 0x009d0000, 0x08009d00, 0x000010ab, 0x00900203, 0x1c232802, 0x07034dfd, 0x000a2328, 0x292f2901, 0x0702294d, 0xfd001e23, 0x28290103, 0x02299a00, 0x0004009d, 0x00080000, 0x05fd0413, 0x04000000 }; -u32 ai_41[] = { 0x0207039c, 0x00800000, 0x29010702, 0x299b0080, 0x00009c00, 0x00100029, 0xc3240d9a, 0x00001000, 0x01070229, 0x9c000020, 0x0029c324, 0x0e9a0000, 0x20000107, 0x02299c00, 0x00400029, 0xc3240f9a, 0x00004000, 0x01070229, 0x9c000080, 0x0029c324, 0x109a0000, 0x80000107, 0x02299c00, 0x01000029, 0xc324119a, 0x00010000, 0x01070229, 0x9c000200, 0x0029c324, 0x129a0002, 0x00000107, 0x02299c00, 0x04000029, 0xc324139a, 0x00040000, 0x01070229, 0x9c000800, 0x0029c324, 0x149a0008, 0x00000107, 0x02290107, 0x04000000 }; -u32 ai_18[] = { 0xad547374, 0x616e640a, 0x009b0200, 0x00009b01, 0x0000009e, 0x00000010, 0xad2d3e64, 0x616d6167, 0x65206f6e, 0x28737461, 0x6e64290a, 0x007efd29, 0x02290203, 0x14002100, 0x00290229, 0x0207f8fd, 0x29022903, 0x4b005006, 0x7efd2a3c, 0x089c0100, 0x00002900, 0x33022996, 0x04069a04, 0x00000002, 0x339f0000, 0x00102900, 0x33022946, 0x29f8fd29, 0x00330229, 0x9604069a, 0x04000000, 0x02330107, 0x02089f00, 0x00001029, 0x00330229, 0x33353233, 0x1a090233, 0x16000100, 0x00090209, 0x33353c0a, 0x9a020000, 0x00020af8, 0xfd290229, 0x034b0050, 0x067efd2a, 0x9c010000, 0x00290033, 0x02299604, 0x069a0400, 0x00000233, 0x9f000000, 0x10290033, 0x02294629, 0xf8fd2900, 0x3302299c, 0x02000000, 0x4c003302, 0x4c960406, 0x9a040000, 0x0002332f, 0x29010a02, 0x29010302, 0x2a9d0000, 0x0010ad3c, 0x2d64616d, 0x61676520, 0x6f666628, 0x7374616e, 0x64290a00, 0x9a008000, 0x0033353c, 0x339a0100, 0x00000233, 0x01030206, 0x05fd0411, 0x04000000 }; -u32 ai_16[] = { 0xad547275, 0x6e0a007d, 0xfd5a2905, 0xfd041002, 0x29ae9502, 0x95049508, 0x95100203, 0x1f232802, 0x07037efd, 0x2a960233, 0xb400003c, 0x08023396, 0x08330233, 0x961033b4, 0x0002580a, 0x02334dfd, 0x000a2328, 0x062f0601, 0x07020605, 0xfd041302, 0x089402ad, 0x6772656e, 0x61646521, 0x0a003335, 0x50291b00, 0xc41a2902, 0x29010702, 0x099408ad, 0x6772656e, 0x61646521, 0x0a003335, 0x50291b00, 0xc41a2902, 0x29010702, 0x0a9410ad, 0x77616c6b, 0x20617474, 0x61636b0a, 0x003c2901, 0x0702297f, 0x33290107, 0x0229c324, 0x19022901, 0x03022a9d, 0x00000010, 0xad3c2d64, 0x616d6167, 0x65206f66, 0x66287275, 0x6e290a00, 0x9a008000, 0x00010304 }; -u32 ai_20[] = { 0x1e007402, 0x08032f29, 0x01080229, 0x05fd0417, 0x04000000 }; -u32 ai_22[] = { 0x1c007602, 0x09032f29, 0x01090229, 0x020a0355, 0x00742901, 0x0a022902, 0x0b035200, 0x46007429, 0x010b0229, 0x05fd0418, 0x04000000 }; -u32 ai_21[] = { 0x0a006aff, 0xffffff06, 0x00030207, 0x0a006aff, 0xffffff44, 0x00020803, 0x46293c29, 0x2f090108, 0x02090107, 0x0229c324, 0x160a006b, 0xffffffff, 0x8610ae02, 0x0a03b400, 0x00782901, 0x0a022955, 0x00742905, 0xfd041502, 0x2905fd04, 0x17040000 }; -u32 ai_15[] = { 0xad54480a, 0x009d0000, 0x0010ad3c, 0x2d64616d, 0x61676520, 0x6f666628, 0x48290a00, 0xc32415f4, 0x0000ff1f, 0x00969164, 0x92649364, 0x0204032f, 0x29010402, 0x29550073, 0x29550074, 0x29550094, 0x2955006d, 0x29000302, 0x2905fd04, 0x150203d9, 0xfd009629, 0x05fd0415, 0x0229ad62, 0x61636b0a, 0x0005fd04, 0x16040000 }; -u32 ai_19[] = { 0xad54210a, 0x00140021, 0x00000402, 0x04030104, 0x04000000 }; -u32 ai_17[] = { 0xad547768, 0x6572650a, 0x009d0000, 0x02000203, 0x031f005c, 0x01030400 }; -u32 ai_8[] = { 0xad54410a, 0x00020403, 0x53003200, 0x3b290247, 0xac00005c, 0x97000405, 0xfd040e02, 0x29530032, 0x003e2902, 0x4833353c, 0x2aac0000, 0x91970004, 0x05fd040a, 0x022a3578, 0x2a9b0800, 0x0000ac00, 0x00019700, 0x0405fd04, 0x0b022a35, 0xb42a9b08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c022a, 0x9b080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x02299c04, 0x00000041, 0x01040241, 0x9b040000, 0x00550022, 0x42550045, 0x4355005b, 0x43333532, 0x43024201, 0x47024301, 0x48040000 }; -u32 ai_9[] = { 0xad54420a, 0x00020403, 0x53003200, 0x27290247, 0xac00004f, 0x97000405, 0xfd040f02, 0x29530032, 0x002a2902, 0x4833353c, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022a3578, 0x2a9b0800, 0x0000ac00, 0x00019700, 0x0405fd04, 0x0b022a35, 0xb42a9b08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c022a, 0x9b080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x02299c04, 0x00000041, 0x01040241, 0x9b040000, 0x0055001f, 0x42550031, 0x43550050, 0x43333532, 0x43024201, 0x47024301, 0x48040000 }; -u32 ai_10[] = { 0xad54430a, 0x00020403, 0x53003200, 0x04290247, 0x3335782a, 0xac000090, 0x97000405, 0xfd040902, 0x2aac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32000729, 0x02483335, 0x782aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0229, 0x53003200, 0x1d290249, 0x3335c83f, 0x9c080000, 0x003e023f, 0x3335782a, 0x9a080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x022a9a08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c023e, 0x01470229, 0x9c040000, 0x00410104, 0x02419b04, 0x00000055, 0x00184255, 0x001d4255, 0x00114355, 0x00134355, 0x001c4355, 0x00034455, 0x00094455, 0x001b4433, 0x357f4502, 0x42014902, 0x43333555, 0x2a9a0800, 0x0000ac00, 0x00099700, 0x0405fd04, 0x0c022a35, 0xaa2aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0244, 0x3335552a, 0x9a080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x022a35aa, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022aac00, 0x00919700, 0x0405fd04, 0x0a024501, 0x47040000 }; -u32 ai_11[] = { 0xad54440a, 0x00020403, 0x53003200, 0x0c290247, 0x3335782a, 0xac000090, 0x97000405, 0xfd040902, 0x2aac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32000f29, 0x02483335, 0x782aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0229, 0x53003200, 0x1b290249, 0x3335c83f, 0x9c080000, 0x003e023f, 0x3335782a, 0x9a080000, 0x00ac0000, 0x01970004, 0x05fd040b, 0x022a9a08, 0x000000ac, 0x00001397, 0x000405fd, 0x040d023e, 0x01470229, 0x9c040000, 0x00410104, 0x02419b04, 0x00000055, 0x00094255, 0x001b4255, 0x00034355, 0x00014355, 0x001d4355, 0x000b4455, 0x00134455, 0x001c4433, 0x357f4502, 0x42014902, 0x43333555, 0x2a9a0800, 0x0000ac00, 0x00139700, 0x0405fd04, 0x0c022a35, 0xaa2aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0244, 0x3335552a, 0x9a080000, 0x00ac0000, 0x01970004, 0x05fd040d, 0x022a35aa, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022aac00, 0x00919700, 0x0405fd04, 0x0a024501, 0x47040000 }; -u32 ai_12[] = { 0xad54450a, 0x00020403, 0x53003200, 0x16290247, 0x3335782a, 0xac000090, 0x97000405, 0xfd040902, 0x2aac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32001529, 0x02483335, 0x782aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0229, 0x53003200, 0x1c290249, 0x3335c83f, 0x9c080000, 0x003e023f, 0x3335782a, 0x9a080000, 0x00ac0000, 0x01970004, 0x05fd040b, 0x022a9a08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c023e, 0x01470229, 0x9c040000, 0x00410104, 0x02419b04, 0x00000055, 0x00134255, 0x001c4255, 0x000b4355, 0x00094355, 0x001b4355, 0x00114455, 0x00014455, 0x001d4433, 0x357f4502, 0x42014902, 0x43333555, 0x2a9a0800, 0x0000ac00, 0x00019700, 0x0405fd04, 0x0c022a35, 0xaa2aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0244, 0x3335552a, 0x9a080000, 0x00ac0000, 0x09970004, 0x05fd040d, 0x022a35aa, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022aac00, 0x00919700, 0x0405fd04, 0x0a024501, 0x47040000 }; -u32 ai_13[] = { 0xad54460a, 0x00020403, 0x53003200, 0x45290247, 0xac000091, 0x97000405, 0xfd040a02, 0x29530032, 0x00592902, 0x48ac0000, 0x90970004, 0x05fd0409, 0x02295300, 0x32006029, 0x0249ac00, 0x00909700, 0x0405fd04, 0x0902299c, 0x04000000, 0x41010402, 0x419b0400, 0x00005500, 0x44425500, 0x3e425500, 0x60435500, 0x61435500, 0x64435500, 0x50433335, 0x7f440147, 0x02420147, 0x02430148, 0x02440148, 0x04000000 }; -u32 ai_14[] = { 0xad54470a, 0x00020403, 0x53003200, 0x31290247, 0xac000090, 0x97000405, 0xfd040902, 0x29530032, 0x00542902, 0x48ac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32006429, 0x0249ac00, 0x00919700, 0x0405fd04, 0x0a02299c, 0x04000000, 0x41010402, 0x419b0400, 0x00005500, 0x31425500, 0x2a425500, 0x64435500, 0x63435500, 0x60435500, 0x5d433335, 0x7f440147, 0x02420147, 0x02430148, 0x02440148, 0x04000000 }; -u32 ai_35[] = { 0x0204035b, 0x0029002a, 0x02299c00, 0x00040029, 0x01040229, 0xc32406ae, 0x0207035b, 0x0029002a, 0x0229b400, 0x012c2901, 0x070229c3, 0x2407c400, 0xa100b700, 0xb4b9b502, 0x0b035b00, 0x29002a02, 0x29bb003c, 0x29010b02, 0x29020803, 0x5b002900, 0x2a0229bb, 0x000f2901, 0x080229c3, 0x24090209, 0x035b0029, 0x002a0229, 0xbb000029, 0x01090229, 0x9a000008, 0x00c3240a, 0xc900f500, 0xb6b8020a, 0x03010a02, 0x2ac900c3, 0x24089a00, 0x000200f5, 0x00b6b802, 0x06030106, 0x04000000 }; -u32 ai_36[] = { 0x02040331, 0x00290104, 0x02299a00, 0x00010002, 0x06030106, 0x04000000 }; -u32 ai_37[] = { 0x02040229, 0x05fd0409, 0x04000000 }; -u32 ai_23[] = { 0x9e000000, 0x109d0000, 0x80000203, 0x3c292807, 0x02070354, 0xfd009431, 0x30fd303c, 0x29010702, 0x29333540, 0x29110602, 0x2933357f, 0x29140001, 0x00000602, 0x29150001, 0x00000602, 0x060354fd, 0x00943130, 0xfd302f29, 0x01060229, 0x01030231, 0x9a100000, 0x009d0000, 0x40002202, 0x3003c324, 0x17ae020b, 0x0354fd00, 0x94310033, 0x02319a10, 0x00000002, 0x33b40000, 0x7829010b, 0x0229c324, 0x18020c03, 0x54fd0094, 0x31003302, 0x319a1000, 0x00000233, 0x010c0400 }; -u32 ai_24[] = { 0xd9fd0092, 0x290229e0, 0xfd00e0fd, 0x019d0000, 0x2000db0a, 0x00b30002, 0xffff0610, 0x0a00b300, 0x02ffff06, 0x109a8000, 0x0000ae02, 0x07039d00, 0x001000b4, 0x00012229, 0x01070229, 0xda020803, 0xdc290108, 0x0229d502, 0x00020000, 0xd9fd0092, 0x290229db, 0x0a00b300, 0x02ffff06, 0x100a00b3, 0x0002ffff, 0x06109a40, 0x000000ae, 0x0209039d, 0x00001000, 0xb4000122, 0x29010902, 0x29da020a, 0x03dc2901, 0x0a022902, 0x06d20301, 0x06040000 }; -u32 ai_25[] = { 0xd9fd0092, 0x2902290a, 0x00b4ffff, 0xffff0610, 0x039d0000, 0x1000d9fd, 0x00942902, 0x299d0000, 0x2000dbae, 0x0207039e, 0x00001000, 0x9e000000, 0x01b40000, 0x3c290107, 0x0229da02, 0x0803dc29, 0x01080229, 0xd5030002, 0x0000d9fd, 0x00922902, 0x290a00b4, 0xffffffff, 0x06100303, 0x9d000010, 0x00d9fd00, 0x94290229, 0xdbae0209, 0x039e0000, 0x10009e00, 0x000001b4, 0x00005a29, 0x01090229, 0xda020a03, 0xdc29010a, 0x02299a20, 0x00000002, 0x06030106, 0x04000000 }; -u32 ai_26[] = { 0xd9fd0095, 0x29022908, 0x02060301, 0x06040000 }; -u32 ai_39[] = { 0x02030355, 0x00922955, 0x00933001, 0x03022931, 0x00290103, 0x02299601, 0x299401ae, 0x0229b400, 0x003c2901, 0x0302299c, 0x10000000, 0x2905fd04, 0x20022905, 0xfd041d02, 0x30d6f60a, 0x29010302, 0x29d70002, 0x07035500, 0x9329d801, 0x030229d6, 0xf01a2901, 0x07022905, 0xfd041c04 }; -u32 ai_30[] = { 0xeb3decd7, 0x00e300dd, 0xeaed0303, 0x03d50100, 0x010000a1, 0xf8000004, 0x00a0f818, 0x00000005, 0xf8041905, 0xfd000102, 0x3d05fd00, 0x01040000 }; -u32 ai_31[] = { 0xeb3decd7, 0x00e300da, 0x020703dc, 0x29010702, 0x2905fd04, 0x1f023d05, 0xfd000104 }; -u32 ai_27[] = { 0xeb3decd7, 0x00e300f9, 0xda020703, 0xdc290107, 0x0229ddea, 0xed030303, 0xd5040002, 0x000005f8, 0x041a3000, 0x29310029, 0x54000074, 0x0a002902, 0x0aa10000, 0x00040005, 0x00041b02, 0x29020803, 0x9c200000, 0x00290108, 0x0229d205, 0xfd000102, 0x3d05fd00, 0x01040000 }; -u32 ai_29[] = { 0x8e000206, 0x03010604 }; -u32 ai_28[] = { 0xeb3decd7, 0x00da0207, 0x03dc2901, 0x07022931, 0x00300029, 0x0230bd08, 0xff009204, 0x1e000000, 0x10290229, 0x03033100, 0x30002902, 0x3005fd04, 0x1f0229dd, 0xeaed0303, 0x03d50400, 0x020000a1, 0x00000004, 0x00050004, 0x1a550074, 0x0a550094, 0x0aa0f800, 0x00040000, 0x29020a05, 0xf8041b02, 0x29020803, 0x9c200000, 0x00290108, 0x022905fd, 0x041f023d, 0x05fd0001, 0x04000000 }; -u32 ai_32[] = { 0xcd026c00, 0x000a0000, 0xffff0002, 0x06100207, 0x039c8000, 0x00002901, 0x070229a7, 0x05000800, 0x000a0000, 0x0002ffff, 0x06100208, 0x039c4000, 0x00002901, 0x08022965, 0x0500930a, 0x00000002, 0xffff0610, 0x0a000000, 0x02ffff06, 0x10020603, 0x01060400 }; -u32 ai_33[] = { 0xae0a0063, 0x00000001, 0x06100207, 0x03b40000, 0x14290107, 0x02290a00, 0x630001ff, 0xff061002, 0x06030106, 0x04000000 }; -u32 ai_38[] = { 0x020703cf, 0x29010702, 0x2905f804, 0x22020603, 0x01060400 }; -u32 ai_40[] = { 0x0203034e, 0x00003c27, 0x11296806, 0x0a296606, 0x02294e00, 0x003c2712, 0x2968070a, 0x29660702, 0x294e0000, 0x3c271329, 0x68080a29, 0x66080229, 0x4e00003c, 0x27142968, 0x090a2966, 0x0902294e, 0x00001427, 0x1529680a, 0x0a29660a, 0x02290103, 0x04000000 }; +u8 ai_34[] = { + debug_log 'h', 'e', 'l', 'l', 'o', '\0', + label(0x35) + label(0x34) + local_timer_reset_start + debug_log '!', '\n', '\0', + ai_sleep + if_chr_does_not_exist(0x01, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x8300, 0x0204, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x4f00, 0x0204, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x02, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x8a00, 0x0304, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x0800, 0x0304, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x03, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x1200, 0x0404, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x5c00, 0x0404, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x04, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x3e00, 0x0504, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x0000, 0x0504, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x05, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x6e00, 0x0604, 0x01000000, 0x06) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x7d00, 0x0604, 0x01000000, 0x06) + label(0x33) + label(0x06) + ai_sleep + if_local_timer_greater_than(0xd00200, 0x29) + goto_first(0x06) + label(0x29) + goto_first(0x34) + ai_list_end +}; +u8 ai_1[] = { + guard_set_chr_num(0x01) + debug_log 'h', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_2[] = { + guard_set_chr_num(0x02) + debug_log 'h', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_3[] = { + guard_set_chr_num(0x03) + debug_log 'h', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_4[] = { + guard_set_chr_num(0x04) + debug_log 'h', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_5[] = { + guard_set_chr_num(0x05) + debug_log 'h', '5', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_0[] = { + label(0x29) + random_generate_seed + if_random_seed_greater_than(0xa0, 0x36) + if_random_seed_greater_than(0x50, 0x33) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_speed_rating(0x32) + guard_set_accuracy_rating(0x32) + guard_set_grenade_probability(0xbf) + guard_try_spawning_item(0xc300, 0x09, 0x00000000, 0x29) + label(0x29) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x06) + goto_next(0x06) + label(0x33) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_speed_rating(0x3c) + guard_set_accuracy_rating(0x3c) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x29) + label(0x29) + guard_try_spawning_hat(0xde00, 0x00000000, 0x29) + label(0x29) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x06) + goto_next(0x06) + label(0x36) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x29) + label(0x29) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x29) + label(0x29) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x06) + label(0x06) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_6[] = { + label(0x37) + guard_try_running_to_bond_position(0x07) + label(0x07) + ai_sleep + if_guard_distance_to_bond_greater_than(0xc201, 0x33) + if_guard_and_bond_within_line_of_sight(0x38) + label(0x33) + if_guard_has_stopped_moving(0x39) + goto_first(0x07) + label(0x38) + if_guard_and_bond_within_line_of_sight(0x29) + goto_next(0x06) + label(0x39) + ai_sleep + goto_first(0x37) + label(0x29) + label(0x3a) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x29) + guard_try_throwing_grenade(0x06) + label(0x29) + if_random_seed_greater_than(0x32, 0x29) + guard_try_sidestepping(0x06) + label(0x29) + if_random_seed_greater_than(0x64, 0x29) + guard_try_firing_walk(0x06) + label(0x29) + if_random_seed_greater_than(0x96, 0x29) + guard_try_firing_run(0x06) + label(0x29) + if_random_seed_greater_than(0xc8, 0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x29) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x06) + label(0x29) + if_guard_and_bond_within_line_of_sight(0x29) + goto_next(0x07) + label(0x07) + ai_sleep + goto_first(0x37) + label(0x29) + ai_sleep + goto_first(0x3a) + ai_list_end +}; +u8 ai_7[] = { + guard_set_armour(0x1400) + guard_set_health_total(0xaa00) + guard_set_speed_rating(0x64) + guard_set_accuracy_rating(0x64) + guard_set_argh_rating(0x64) + guard_flags_set_on(0x00020000) + guard_flags_set_on(0x00080000) + guard_flags_set_on(0x10000000) + guard_set_pad_preset(0x9000) + label(0x03) + guard_runs_to_pad(0x2823) + label(0x07) + ai_sleep + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x29) + if_guard_has_stopped_moving(0x29) + goto_first(0x07) + label(0x29) + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0x2823, 0x29) + goto_first(0x03) + label(0x29) + objective_bitfield_set_on(0x00040000) + guard_flags_set_on(0x00000800) + jump_to_ai_list(0xfd, 0x1304) + ai_list_end +}; +u8 ai_41[] = { + label(0x07) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x29) + goto_first(0x07) + label(0x29) + objective_bitfield_set_off(0x00008000) + if_objective_bitfield_is_set_on(0x00100000, 0x29) + text_print_top(0x0d24) + objective_bitfield_set_on(0x00100000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00200000, 0x29) + text_print_top(0x0e24) + objective_bitfield_set_on(0x00200000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00400000, 0x29) + text_print_top(0x0f24) + objective_bitfield_set_on(0x00400000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00800000, 0x29) + text_print_top(0x1024) + objective_bitfield_set_on(0x00800000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000100, 0x29) + text_print_top(0x1124) + objective_bitfield_set_on(0x00000100) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000200, 0x29) + text_print_top(0x1224) + objective_bitfield_set_on(0x00000200) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000400, 0x29) + text_print_top(0x1324) + objective_bitfield_set_on(0x00000400) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000800, 0x29) + text_print_top(0x1424) + objective_bitfield_set_on(0x00000800) + goto_first(0x07) + label(0x29) + goto_first(0x07) + ai_list_end +}; +u8 ai_18[] = { + debug_log 'T', 's', 't', 'a', 'n', 'd', '\n', '\0', + objective_bitfield_set_off(0x00000002) + objective_bitfield_set_off(0x00000001) + guard_flags_set_off(0x10000000) + debug_log '-', '>', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'n', '(', 's', 't', 'a', 'n', 'd', ')', '\n', '\0', + if_chr_was_damaged_since_last_check(0xfd, 0x29) + label(0x29) + label(0x03) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x29) + label(0x29) + label(0x07) + if_chr_was_shot_since_last_check(0xfd, 0x29) + label(0x29) + ai_sleep + if_guard_distance_to_bond_less_than(0x5000, 0x06) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_guard_and_bond_within_line_of_sight(0x08) + if_objective_bitfield_is_set_on(0x00000001, 0x29) + goto_next(0x33) + label(0x29) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + if_guard_flags_is_set_on(0x10000000, 0x29) + goto_next(0x33) + label(0x29) + if_guard_shot_from_bond_missed(0x29) + if_chr_was_shot_since_last_check(0xfd, 0x29) + goto_next(0x33) + label(0x29) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + goto_first(0x07) + label(0x08) + if_guard_flags_is_set_on(0x10000000, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x32, 0x33) + guard_try_throwing_grenade(0x09) + label(0x33) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x09) + label(0x09) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x0a) + objective_bitfield_set_on(0x00000002) + label(0x0a) + if_chr_was_shot_since_last_check(0xfd, 0x29) + label(0x29) + ai_sleep + if_guard_distance_to_bond_less_than(0x5000, 0x06) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_objective_bitfield_is_set_on(0x00000001, 0x29) + goto_next(0x33) + label(0x29) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + if_guard_flags_is_set_on(0x10000000, 0x29) + goto_next(0x33) + label(0x29) + if_guard_shot_from_bond_missed(0x29) + if_chr_was_shot_since_last_check(0xfd, 0x29) + goto_next(0x33) + label(0x29) + if_objective_bitfield_is_set_on(0x00000002, 0x4c) + goto_next(0x33) + label(0x4c) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + if_guard_has_stopped_moving(0x29) + goto_first(0x0a) + label(0x29) + goto_first(0x03) + label(0x2a) + guard_flags_set_on(0x10000000) + debug_log '<', '-', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'f', 'f', '(', 's', 't', 'a', 'n', 'd', ')', '\n', '\0', + objective_bitfield_set_on(0x00008000) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x33) + objective_bitfield_set_on(0x00000001) + label(0x33) + goto_first(0x03) + label(0x06) + jump_to_ai_list(0xfd, 0x1104) + ai_list_end +}; +u8 ai_16[] = { + debug_log 'T', 'r', 'u', 'n', '\n', '\0', + if_chr_health_greater_than(0xfd, 0x5a, 0x29) + jump_to_ai_list(0xfd, 0x1004) + label(0x29) + local_timer_reset_start + guard_bitfield_set_off(0x02) + guard_bitfield_set_off(0x04) + guard_bitfield_set_off(0x08) + guard_bitfield_set_off(0x10) + label(0x03) + guard_sprints_to_pad(0x2823) + label(0x07) + ai_sleep + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_guard_bitfield_is_set_on(0x02, 0x33) + if_local_timer_greater_than(0x3c0000, 0x08) + label(0x33) + if_guard_bitfield_is_set_on(0x08, 0x33) + label(0x33) + if_guard_bitfield_is_set_on(0x10, 0x33) + if_local_timer_greater_than(0x580200, 0x0a) + label(0x33) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x06) + if_guard_has_stopped_moving(0x06) + goto_first(0x07) + label(0x06) + jump_to_ai_list(0xfd, 0x1304) + label(0x08) + guard_bitfield_set_on(0x02) + debug_log 'g', 'r', 'e', 'n', 'a', 'd', 'e', '!', '\n', '\0', + random_generate_seed + if_random_seed_greater_than(0x50, 0x29) + guard_try_dropping_item(0xc400, 0x1a, 0x29) + label(0x29) + goto_first(0x07) + label(0x09) + guard_bitfield_set_on(0x08) + debug_log 'g', 'r', 'e', 'n', 'a', 'd', 'e', '!', '\n', '\0', + random_generate_seed + if_random_seed_greater_than(0x50, 0x29) + guard_try_dropping_item(0xc400, 0x1a, 0x29) + label(0x29) + goto_first(0x07) + label(0x0a) + guard_bitfield_set_on(0x10) + debug_log 'w', 'a', 'l', 'k', ' ', 'a', 't', 't', 'a', 'c', 'k', '\n', '\0', + if_guard_and_bond_within_line_of_sight(0x29) + goto_first(0x07) + label(0x29) + if_bond_health_less_than(0x33, 0x29) + goto_first(0x07) + label(0x29) + text_print_top(0x1924) + label(0x29) + goto_first(0x03) + label(0x2a) + guard_flags_set_on(0x10000000) + debug_log '<', '-', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'f', 'f', '(', 'r', 'u', 'n', ')', '\n', '\0', + objective_bitfield_set_on(0x00008000) + goto_first(0x03) + ai_list_end +}; +u8 ai_20[] = { + guard_walks_to_pad(0x7400) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x08) + label(0x29) + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_22[] = { + guard_runs_to_pad(0x7600) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x09) + label(0x29) + label(0x0a) + ai_sleep + if_bond_in_room_with_pad(0x7400, 0x29) + goto_first(0x0a) + label(0x29) + label(0x0b) + ai_sleep + if_bond_distance_to_pad_less_than(0x4600, 0x7400, 0x29) + goto_first(0x0b) + label(0x29) + jump_to_ai_list(0xfd, 0x1804) + ai_list_end +}; +u8 ai_21[] = { + guard_play_animation(0x6a00, 0xffff, 0xffff, 0x06, 0x00) + ai_sleep + label(0x07) + guard_play_animation(0x6a00, 0xffff, 0xffff, 0x44, 0x00) + label(0x08) + ai_sleep + if_guard_shot_from_bond_missed(0x29) + if_guard_and_bond_within_line_of_sight(0x29) + if_guard_has_stopped_moving(0x09) + goto_first(0x08) + label(0x09) + goto_first(0x07) + label(0x29) + text_print_top(0x1624) + guard_play_animation(0x6b00, 0xffff, 0xffff, 0x86, 0x10) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x0a) + label(0x29) + if_bond_in_room_with_pad(0x7400, 0x29) + jump_to_ai_list(0xfd, 0x1504) + label(0x29) + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_15[] = { + debug_log 'T', 'H', '\n', '\0', + guard_flags_set_on(0x10000000) + debug_log '<', '-', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'f', 'f', '(', 'H', ')', '\n', '\0', + text_print_top(0x1524) + music_xtrack_play(0x00, 0x00, 0xff) + guard_sprints_to_pad(0x9600) + guard_set_speed_rating(0x64) + guard_set_argh_rating(0x64) + guard_set_accuracy_rating(0x64) + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x04) + label(0x29) + if_bond_in_room_with_pad(0x7300, 0x29) + if_bond_in_room_with_pad(0x7400, 0x29) + if_bond_in_room_with_pad(0x9400, 0x29) + if_bond_in_room_with_pad(0x6d00, 0x29) + goto_next(0x03) + label(0x29) + jump_to_ai_list(0xfd, 0x1504) + label(0x03) + chr_try_teleporting_to_pad(0xfd, 0x9600, 0x29) + jump_to_ai_list(0xfd, 0x1504) + label(0x29) + debug_log 'b', 'a', 'c', 'k', '\n', '\0', + jump_to_ai_list(0xfd, 0x1604) + ai_list_end +}; +u8 ai_19[] = { + debug_log 'T', '!', '\n', '\0', + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x04) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_17[] = { + debug_log 'T', 'w', 'h', 'e', 'r', 'e', '\n', '\0', + guard_flags_set_on(0x00020000) + label(0x03) + ai_sleep + guard_sprints_to_pad(0x5c00) + goto_first(0x03) + ai_list_end +}; +u8 ai_8[] = { + debug_log 'T', 'A', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x3b00, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x5c00) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0e04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x3e00, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x2a) + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + if_random_seed_greater_than(0xb4, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x2200, 0x42) + if_bond_in_room_with_pad(0x4500, 0x43) + if_bond_in_room_with_pad(0x5b00, 0x43) + random_generate_seed + if_random_seed_greater_than(0x32, 0x43) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + ai_list_end +}; +u8 ai_9[] = { + debug_log 'T', 'B', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x2700, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x4f00) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0f04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x2a00, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + if_random_seed_greater_than(0xb4, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x1f00, 0x42) + if_bond_in_room_with_pad(0x3100, 0x43) + if_bond_in_room_with_pad(0x5000, 0x43) + random_generate_seed + if_random_seed_greater_than(0x32, 0x43) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + ai_list_end +}; +u8 ai_10[] = { + debug_log 'T', 'C', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x0400, 0x29) + label(0x47) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x0700, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1d00, 0x29) + label(0x49) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3f) + if_objective_bitfield_is_set_on(0x00000008, 0x3e) + label(0x3f) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x3e) + goto_first(0x47) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x1800, 0x42) + if_bond_in_room_with_pad(0x1d00, 0x42) + if_bond_in_room_with_pad(0x1100, 0x43) + if_bond_in_room_with_pad(0x1300, 0x43) + if_bond_in_room_with_pad(0x1c00, 0x43) + if_bond_in_room_with_pad(0x0300, 0x44) + if_bond_in_room_with_pad(0x0900, 0x44) + if_bond_in_room_with_pad(0x1b00, 0x44) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x45) + label(0x42) + goto_first(0x49) + label(0x43) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x44) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x45) + goto_first(0x47) + ai_list_end +}; +u8 ai_11[] = { + debug_log 'T', 'D', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x0c00, 0x29) + label(0x47) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x0f00, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1b00, 0x29) + label(0x49) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3f) + if_objective_bitfield_is_set_on(0x00000008, 0x3e) + label(0x3f) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x3e) + goto_first(0x47) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x0900, 0x42) + if_bond_in_room_with_pad(0x1b00, 0x42) + if_bond_in_room_with_pad(0x0300, 0x43) + if_bond_in_room_with_pad(0x0100, 0x43) + if_bond_in_room_with_pad(0x1d00, 0x43) + if_bond_in_room_with_pad(0x0b00, 0x44) + if_bond_in_room_with_pad(0x1300, 0x44) + if_bond_in_room_with_pad(0x1c00, 0x44) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x45) + label(0x42) + goto_first(0x49) + label(0x43) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x44) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x45) + goto_first(0x47) + ai_list_end +}; +u8 ai_12[] = { + debug_log 'T', 'E', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x1600, 0x29) + label(0x47) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1500, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1c00, 0x29) + label(0x49) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3f) + if_objective_bitfield_is_set_on(0x00000008, 0x3e) + label(0x3f) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x3e) + goto_first(0x47) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x1300, 0x42) + if_bond_in_room_with_pad(0x1c00, 0x42) + if_bond_in_room_with_pad(0x0b00, 0x43) + if_bond_in_room_with_pad(0x0900, 0x43) + if_bond_in_room_with_pad(0x1b00, 0x43) + if_bond_in_room_with_pad(0x1100, 0x44) + if_bond_in_room_with_pad(0x0100, 0x44) + if_bond_in_room_with_pad(0x1d00, 0x44) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x45) + label(0x42) + goto_first(0x49) + label(0x43) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x44) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x45) + goto_first(0x47) + ai_list_end +}; +u8 ai_13[] = { + debug_log 'T', 'F', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x4500, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x5900, 0x29) + label(0x48) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x6000, 0x29) + label(0x49) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x4400, 0x42) + if_bond_in_room_with_pad(0x3e00, 0x42) + if_bond_in_room_with_pad(0x6000, 0x43) + if_bond_in_room_with_pad(0x6100, 0x43) + if_bond_in_room_with_pad(0x6400, 0x43) + if_bond_in_room_with_pad(0x5000, 0x43) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x44) + goto_first(0x47) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + label(0x44) + goto_first(0x48) + ai_list_end +}; +u8 ai_14[] = { + debug_log 'T', 'G', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x3100, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x5400, 0x29) + label(0x48) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x6400, 0x29) + label(0x49) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x3100, 0x42) + if_bond_in_room_with_pad(0x2a00, 0x42) + if_bond_in_room_with_pad(0x6400, 0x43) + if_bond_in_room_with_pad(0x6300, 0x43) + if_bond_in_room_with_pad(0x6000, 0x43) + if_bond_in_room_with_pad(0x5d00, 0x43) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x44) + goto_first(0x47) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + label(0x44) + goto_first(0x48) + ai_list_end +}; +u8 ai_35[] = { + label(0x04) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_objective_bitfield_is_set_on(0x00040000, 0x29) + goto_first(0x04) + label(0x29) + text_print_top(0x0624) + local_timer_reset_start + label(0x07) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_local_timer_greater_than(0x2c0100, 0x29) + goto_first(0x07) + label(0x29) + text_print_top(0x0724) + sfx_play(0xa100, 0x00) + hud_countdown_set(0xb400) + hud_countdown_start + hud_countdown_show + label(0x0b) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_hud_countdown_less_than(0x3c00, 0x29) + goto_first(0x0b) + label(0x29) + label(0x08) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_hud_countdown_less_than(0x0f00, 0x29) + goto_first(0x08) + label(0x29) + text_print_top(0x0924) + label(0x09) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_hud_countdown_less_than(0x0000, 0x29) + goto_first(0x09) + label(0x29) + objective_bitfield_set_on(0x00080000) + text_print_top(0x0a24) + sfx_stop_channel(0x00) + music_xtrack_stop(0x00) + hud_countdown_hide + hud_countdown_stop + label(0x0a) + ai_sleep + goto_first(0x0a) + label(0x2a) + sfx_stop_channel(0x00) + text_print_top(0x0824) + objective_bitfield_set_on(0x00020000) + music_xtrack_stop(0x00) + hud_countdown_hide + hud_countdown_stop + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_36[] = { + label(0x04) + ai_sleep + if_chr_does_not_exist(0x00, 0x29) + goto_first(0x04) + label(0x29) + objective_bitfield_set_on(0x00010000) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_37[] = { + label(0x04) + label(0x29) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_23[] = { + guard_flags_set_off(0x10000000) + guard_flags_set_on(0x00800000) + label(0x03) + if_guard_and_bond_within_line_of_sight(0x29) + guard_try_running_to_bond_position(0x07) + label(0x07) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + if_chr_dying_or_dead(0xfd, 0x30) + if_guard_and_bond_within_line_of_sight(0x29) + goto_first(0x07) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x40, 0x29) + guard_try_firing_walk(0x06) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x29) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + if_chr_dying_or_dead(0xfd, 0x30) + if_guard_has_stopped_moving(0x29) + goto_first(0x06) + label(0x29) + goto_first(0x03) + label(0x31) + objective_bitfield_set_on(0x00000010) + guard_flags_set_on(0x00400000) + guard_remove_fade + label(0x30) + ai_sleep + text_print_top(0x1724) + local_timer_reset_start + label(0x0b) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + goto_next(0x33) + label(0x31) + objective_bitfield_set_on(0x00000010) + label(0x33) + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x0b) + label(0x29) + text_print_top(0x1824) + label(0x0c) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + goto_next(0x33) + label(0x31) + objective_bitfield_set_on(0x00000010) + label(0x33) + goto_first(0x0c) + ai_list_end +}; +u8 ai_24[] = { + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + chr_remove_item_in_hand(0xfd, 0x00) + chr_remove_item_in_hand(0xfd, 0x01) + guard_flags_set_on(0x00200000) + screen_fade_from_black + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + objective_bitfield_set_on(0x00000080) + local_timer_reset_start + label(0x07) + ai_sleep + guard_flags_set_on(0x00100000) + if_local_timer_greater_than(0x220100, 0x29) + goto_first(0x07) + label(0x29) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x08) + label(0x29) + camera_switch(0x02, 0x0200, 0x0000) + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + screen_fade_from_black + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + objective_bitfield_set_on(0x00000040) + local_timer_reset_start + label(0x09) + ai_sleep + guard_flags_set_on(0x00100000) + if_local_timer_greater_than(0x220100, 0x29) + goto_first(0x09) + label(0x29) + screen_fade_to_black + label(0x0a) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x0a) + label(0x29) + label(0x06) + exit_level + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_25[] = { + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + guard_play_animation(0xb400, 0xffff, 0xffff, 0x06, 0x10) + ai_sleep + guard_flags_set_on(0x00100000) + chr_try_teleporting_to_pad(0xfd, 0x9400, 0x29) + label(0x29) + guard_flags_set_on(0x00200000) + screen_fade_from_black + local_timer_reset_start + label(0x07) + ai_sleep + guard_flags_set_off(0x00100000) + guard_flags_set_off(0x01000000) + if_local_timer_greater_than(0x3c0000, 0x29) + goto_first(0x07) + label(0x29) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x08) + label(0x29) + camera_switch(0x03, 0x0200, 0x0000) + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + guard_play_animation(0xb400, 0xffff, 0xffff, 0x06, 0x10) + ai_sleep + ai_sleep + guard_flags_set_on(0x00100000) + chr_try_teleporting_to_pad(0xfd, 0x9400, 0x29) + label(0x29) + screen_fade_from_black + local_timer_reset_start + label(0x09) + ai_sleep + guard_flags_set_off(0x00100000) + guard_flags_set_off(0x01000000) + if_local_timer_greater_than(0x5a0000, 0x29) + goto_first(0x09) + label(0x29) + screen_fade_to_black + label(0x0a) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x0a) + label(0x29) + objective_bitfield_set_on(0x00000020) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_26[] = { + chr_try_teleporting_to_pad(0xfd, 0x9500, 0x29) + label(0x29) + guard_animation_stop + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_39[] = { + label(0x03) + ai_sleep + if_bond_in_room_with_pad(0x9200, 0x29) + if_bond_in_room_with_pad(0x9300, 0x30) + goto_first(0x03) + label(0x29) + if_chr_does_not_exist(0x00, 0x29) + goto_first(0x03) + label(0x29) + if_guard_bitfield_is_set_on(0x01, 0x29) + guard_bitfield_set_on(0x01) + local_timer_reset_start + label(0x29) + if_local_timer_greater_than(0x3c0000, 0x29) + goto_first(0x03) + label(0x29) + if_objective_bitfield_is_set_on(0x00000010, 0x29) + jump_to_ai_list(0xfd, 0x2004) + label(0x29) + jump_to_ai_list(0xfd, 0x1d04) + label(0x30) + if_bond_y_pos_less_than(0x0af6, 0x29) + goto_first(0x03) + label(0x29) + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + label(0x07) + ai_sleep + if_bond_in_room_with_pad(0x9300, 0x29) + hud_show_all_and_unlock_controls_and_resume_mission_time + goto_first(0x03) + label(0x29) + if_bond_y_pos_less_than(0x1af0, 0x29) + goto_first(0x07) + label(0x29) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_30[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + bond_equip_item(0x00) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x01, 0x0100, 0x0000) + chr_flags_set_off(0xf8, 0x00040000) + chr_flags_set_on(0xf8, 0x00000018) + jump_to_ai_list(0xf8, 0x1904) + jump_to_ai_list(0xfd, 0x0100) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_31[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + bond_equip_item(0x00) + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x07) + label(0x29) + jump_to_ai_list(0xfd, 0x1f04) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_27[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + bond_equip_item(0x00) + bond_killed_in_action + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x07) + label(0x29) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x04, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x1a04) + if_chr_dying_or_dead(0x00, 0x29) + if_chr_does_not_exist(0x00, 0x29) + if_chr_in_room_with_pad(0x00, 0x7400, 0x0a) + goto_next(0x29) + label(0x0a) + chr_flags_set_off(0x00, 0x00040000) + jump_to_ai_list(0x00, 0x1b04) + label(0x29) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00000020, 0x29) + goto_first(0x08) + label(0x29) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_29[] = { + guard_set_chr_num(0x00) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_28[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x07) + label(0x29) + if_chr_does_not_exist(0x00, 0x30) + goto_next(0x29) + label(0x30) + chr_try_spawning_at_pad(0x08, 0xff, 0x9200, 0x1e04, 0x10000000, 0x29) + label(0x29) + ai_sleep + ai_sleep + if_chr_does_not_exist(0x00, 0x30) + goto_next(0x29) + label(0x30) + jump_to_ai_list(0xfd, 0x1f04) + label(0x29) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x04, 0x0200, 0x0000) + chr_flags_set_off(0x00, 0x00040000) + jump_to_ai_list(0x00, 0x1a04) + if_bond_in_room_with_pad(0x7400, 0x0a) + if_bond_in_room_with_pad(0x9400, 0x0a) + chr_flags_set_on(0xf8, 0x00040000) + goto_next(0x29) + label(0x0a) + jump_to_ai_list(0xf8, 0x1b04) + label(0x29) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00000020, 0x29) + goto_first(0x08) + label(0x29) + jump_to_ai_list(0xfd, 0x1f04) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_32[] = { + aircraft_rotor_speed(0x6c02, 0x0000) + guard_play_animation(0x0000, 0xffff, 0x0200, 0x06, 0x10) + label(0x07) + ai_sleep + if_objective_bitfield_is_set_on(0x00000080, 0x29) + goto_first(0x07) + label(0x29) + object_flags_2_set_off(0x05, 0x00000800) + guard_play_animation(0x0000, 0x0200, 0xffff, 0x06, 0x10) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00000040, 0x29) + goto_first(0x08) + label(0x29) + object_move_to_pad(0x05, 0x9300) + guard_play_animation(0x0000, 0x0200, 0xffff, 0x06, 0x10) + guard_play_animation(0x0000, 0x0200, 0xffff, 0x06, 0x10) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_33[] = { + local_timer_reset_start + guard_play_animation(0x6300, 0x0000, 0x0100, 0x06, 0x10) + label(0x07) + ai_sleep + if_local_timer_greater_than(0x140000, 0x29) + goto_first(0x07) + label(0x29) + guard_play_animation(0x6300, 0x0100, 0xffff, 0x06, 0x10) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_38[] = { + label(0x07) + ai_sleep + if_camera_is_in_bond_swirl(0x29) + goto_first(0x07) + label(0x29) + jump_to_ai_list(0xf8, 0x2204) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_40[] = { + label(0x03) + ai_sleep + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1127, 0x29) + if_door_state_equal(0x06, 0x0a, 0x29) + door_open(0x06) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1227, 0x29) + if_door_state_equal(0x07, 0x0a, 0x29) + door_open(0x07) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1327, 0x29) + if_door_state_equal(0x08, 0x0a, 0x29) + door_open(0x08) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1427, 0x29) + if_door_state_equal(0x09, 0x0a, 0x29) + door_open(0x09) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x1400, 0x1527, 0x29) + if_door_state_equal(0x0a, 0x0a, 0x29) + door_open(0x0a) + label(0x29) + goto_first(0x03) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/e/UsetupdestZ.c b/assets/obseg/setup/e/UsetupdestZ.c index 1e0beb74..2959f11c 100644 --- a/assets/obseg/setup/e/UsetupdestZ.c +++ b/assets/obseg/setup/e/UsetupdestZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1292,19 +1293,441 @@ PathRecord patrolpaths[] = { }; -u32 ai_1[] = { 0x21020003, 0x3c073207, 0x31fc0c01, 0x00020702, 0x0b0330fd, 0x0731fc0c, 0x010b0207, 0xc3340818, 0xfd080802, 0x0a03010a, 0x020cc334, 0x09060404, 0x05fd0404, 0x04000000 }; -u32 ai_2[] = { 0x14002400, 0xfc000200, 0x0346073c, 0x07320701, 0x000207ae, 0x020a0370, 0x0229b400, 0x00780700, 0x08022970, 0x0129b400, 0x00960700, 0x080229b4, 0x0000b407, 0x02087900, 0x0b010a02, 0x07160004, 0x00fc0702, 0x07030303, 0x030318fc, 0x080a0600, 0x0205fd00, 0x08020b03, 0x06000205, 0xfd000201, 0x0b040000 }; -u32 ai_3[] = { 0x61fd0200, 0x33352807, 0xab008f00, 0x08020735, 0x5007ab00, 0x91000802, 0x07357807, 0xab009300, 0x08020735, 0xa007ab00, 0x94000802, 0x0735c807, 0xab00a800, 0x080207ab, 0x00a90008, 0x02081c23, 0x28020a03, 0x2f044dfd, 0x00322328, 0x04462301, 0x0a0223ad, 0x210a0021, 0x02070333, 0x35dc073b, 0x072f0701, 0x070207ad, 0x496d206f, 0x6666210a, 0x00010002, 0x044dfd00, 0x3223282e, 0x07022e3c, 0x0cc3340a, 0x000d020b, 0x03010b02, 0x0c010002, 0x0d229c00, 0x00010007, 0x9a000001, 0x00000e02, 0x079c0000, 0x0200079a, 0x00000200, 0x000e0207, 0x9c000004, 0x00079a00, 0x00040000, 0x0e02079c, 0x00000800, 0x079a0000, 0x0800000e, 0x02079c00, 0x00100007, 0x9a000010, 0x00000e02, 0x07020e03, 0x010e0400 }; -u32 ai_0[] = { 0xcd026c00, 0x000a0002, 0xffff0002, 0x06000200, 0x03010004 }; -u32 ai_5[] = { 0x02000358, 0x2f000757, 0x2f080100, 0x020c0358, 0x2f000701, 0x0c0207c3, 0x340b9b00, 0x0080009a, 0x00004000, 0x000a020a, 0x03582f00, 0x07000802, 0x07010a02, 0x08c3340c, 0x9a000080, 0x009b0000, 0x4000010c, 0x04000000 }; -u32 ai_6[] = { 0xc4003c00, 0xc7000000, 0x0000020a, 0x0352005a, 0x27540755, 0x006c0755, 0x001c0755, 0x00350755, 0x006e0755, 0x001d0755, 0x00750755, 0x00660755, 0x0063079c, 0x00080000, 0x08010a02, 0x07ad2121, 0x210a00c7, 0x007fff00, 0x78000b02, 0x0b039c00, 0x08000008, 0x53008c27, 0x5407010b, 0x0207ad6f, 0x66660a00, 0xc7000000, 0x00f0010a, 0x0208ad62, 0x616e670a, 0x00a40300, 0x0200005f, 0x03c90002, 0x0c03010c, 0x04000000 }; -u32 ai_7[] = { 0x0200035d, 0x01075c01, 0x08010002, 0x0759270b, 0x02085f01, 0x000c020b, 0xc400f701, 0xc5010100, 0x009a0001, 0x0000c334, 0x0da30100, 0x02000002, 0x0c03010c, 0x04000000 }; -u32 ai_8[] = { 0x0200035d, 0x02075c02, 0x08010002, 0x0759270b, 0x02085f02, 0x000c020b, 0xc400f702, 0xc5020200, 0x009a0002, 0x0000c334, 0x0ea30200, 0x02000002, 0x0c03010c, 0x04000000 }; -u32 ai_9[] = { 0x022a039c, 0x00040000, 0x075b0107, 0x9a000400, 0x0002079c, 0x00080000, 0x075b0207, 0x9a000800, 0x00020701, 0x2a040000 }; -u32 ai_10[] = { 0x020a0355, 0x00990755, 0x00950700, 0x03020701, 0x0a020303, 0xeb2f5500, 0x99070103, 0x0207ecd7, 0x00da020e, 0x03dc0701, 0x0e0207f1, 0x0705fd00, 0x0f0207dd, 0xea590207, 0x59030759, 0x1a07591b, 0x07591c07, 0x591d0759, 0x18075919, 0x07590407, 0x59050759, 0x06075907, 0x07590807, 0x59090759, 0x0a07590b, 0x07590c07, 0x590d0759, 0x0e07590f, 0x07591007, 0x59110759, 0x12075913, 0x07591607, 0x59140759, 0x1507e404, 0x0207ed03, 0x0303d504, 0x00020000, 0x05f80405, 0xdb020f03, 0xdc07010f, 0x020705fd, 0x0001022f, 0x05fd0001, 0x04000000 }; -u32 ai_4[] = { 0xd9fd00b0, 0x070207e0, 0xfd010a00, 0x69000000, 0x1d061002, 0x0b032f07, 0x010b0207, 0xe0fd000a, 0x0069001d, 0x00a00610, 0xae020c03, 0x2f07b400, 0x00de0701, 0x0c0207da, 0x020d03dc, 0x07010d02, 0x07d20204, 0x03010404 }; -u32 ai_11[] = { 0x7101049a, 0x00000100, 0x7100049a, 0x00000200, 0x9a000004, 0x00020405, 0xfd000104 }; -u32 ai_12[] = { 0x020303a0, 0x2c001000, 0x00a02d00, 0x100000a0, 0x30001000, 0x0003a031, 0x00100000, 0xa0340010, 0x0000a035, 0x00100000, 0x022a0370, 0x0229f701, 0x07012a02, 0x29700129, 0xf7020701, 0x2a0229f7, 0x0407012a, 0x0207ae02, 0x0a03b400, 0x003c07c3, 0x341e9a00, 0x10000001, 0x0a020705, 0xfd000104 }; +u8 ai_1[] = { + guard_surrenders + label(0x00) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x07) + if_guard_sees_bond(0x07) + if_chr_does_not_exist(0xfc, 0x0c) + goto_first(0x00) + label(0x07) + label(0x0b) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x07) + if_chr_does_not_exist(0xfc, 0x0c) + goto_first(0x0b) + label(0x07) + text_print_top(0x0834) + chr_hit_body_part_with_item_damage(0xfd, 0x08, 0x08) + label(0x0a) + ai_sleep + goto_first(0x0a) + label(0x0c) + text_print_top(0x0934) + set_return_ai_list(0x0404) + jump_to_ai_list(0xfd, 0x0404) + ai_list_end +}; +u8 ai_2[] = { + guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x00) + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x07) + if_guard_and_bond_within_line_of_sight(0x07) + if_guard_sees_bond(0x07) + goto_first(0x00) + label(0x07) + local_timer_reset_start + label(0x0a) + ai_sleep + if_game_difficulty_less_than(0x02, 0x29) + if_local_timer_greater_than(0x780000, 0x07) + goto_next(0x08) + label(0x29) + if_game_difficulty_less_than(0x01, 0x29) + if_local_timer_greater_than(0x960000, 0x07) + goto_next(0x08) + label(0x29) + if_local_timer_greater_than(0xb40000, 0x07) + label(0x08) + if_guard_hits_greater_than(0x00, 0x0b) + goto_first(0x0a) + label(0x07) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x07) + label(0x07) + ai_sleep + ai_sleep + ai_sleep + ai_sleep + ai_sleep + chr_hit_body_part_with_item_damage(0xfc, 0x08, 0x0a) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + label(0x0b) + ai_sleep + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0200) + goto_first(0x0b) + ai_list_end +}; +u8 ai_3[] = { + chr_drop_all_concealed_items(0xfd) + label(0x00) + random_generate_seed + if_random_seed_greater_than(0x28, 0x07) + guard_set_pad_preset(0x8f00) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0x50, 0x07) + guard_set_pad_preset(0x9100) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0x78, 0x07) + guard_set_pad_preset(0x9300) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0xa0, 0x07) + guard_set_pad_preset(0x9400) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0xc8, 0x07) + guard_set_pad_preset(0xa800) + goto_next(0x08) + label(0x07) + guard_set_pad_preset(0xa900) + goto_next(0x08) + label(0x08) + guard_runs_to_pad(0x2823) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x04) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x04) + if_guard_shot_from_bond_missed(0x23) + goto_first(0x0a) + label(0x23) + debug_log '!', '\n', '\0', + guard_surrenders + label(0x07) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xdc, 0x07) + if_guard_see_another_guard_die(0x07) + if_guard_has_stopped_moving(0x07) + goto_first(0x07) + label(0x07) + debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0', + goto_first(0x00) + label(0x04) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x2e) + jump_to_return_ai_list + label(0x2e) + if_guard_and_bond_within_line_of_sight(0x0c) + text_print_top(0x0a34) + goto_next(0x0d) + label(0x0b) + ai_sleep + goto_first(0x0b) + label(0x0c) + goto_first(0x00) + label(0x0d) + guard_remove_fade + if_objective_bitfield_is_set_on(0x00010000, 0x07) + objective_bitfield_set_on(0x00010000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00020000, 0x07) + objective_bitfield_set_on(0x00020000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00040000, 0x07) + objective_bitfield_set_on(0x00040000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00080000, 0x07) + objective_bitfield_set_on(0x00080000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00100000, 0x07) + objective_bitfield_set_on(0x00100000) + goto_next(0x0e) + label(0x07) + label(0x0e) + ai_sleep + goto_first(0x0e) + ai_list_end +}; +u8 ai_0[] = { + aircraft_rotor_speed(0x6c02, 0x0000) + guard_play_animation(0x0200, 0xffff, 0x0200, 0x06, 0x00) + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_5[] = { + label(0x00) + ai_sleep + if_item_is_attached_to_object(0x2f, 0x00, 0x07) + if_item_is_stationary_within_level(0x2f, 0x08) + goto_first(0x00) + label(0x0c) + ai_sleep + if_item_is_attached_to_object(0x2f, 0x00, 0x07) + goto_first(0x0c) + label(0x07) + text_print_top(0x0b34) + objective_bitfield_set_off(0x00800000) + objective_bitfield_set_on(0x00400000) + goto_next(0x0a) + label(0x0a) + ai_sleep + if_item_is_attached_to_object(0x2f, 0x00, 0x07) + goto_next(0x08) + label(0x07) + goto_first(0x0a) + label(0x08) + text_print_top(0x0c34) + objective_bitfield_set_on(0x00800000) + objective_bitfield_set_off(0x00400000) + goto_first(0x0c) + ai_list_end +}; +u8 ai_6[] = { + sfx_play(0x3c00, 0x00) + sfx_set_channel_volume(0x00, 0x0000, 0x0000) + label(0x0a) + ai_sleep + if_bond_distance_to_pad_less_than(0x5a00, 0x5427, 0x07) + if_bond_in_room_with_pad(0x6c00, 0x07) + if_bond_in_room_with_pad(0x1c00, 0x07) + if_bond_in_room_with_pad(0x3500, 0x07) + if_bond_in_room_with_pad(0x6e00, 0x07) + if_bond_in_room_with_pad(0x1d00, 0x07) + if_bond_in_room_with_pad(0x7500, 0x07) + if_bond_in_room_with_pad(0x6600, 0x07) + if_bond_in_room_with_pad(0x6300, 0x07) + if_objective_bitfield_is_set_on(0x00000800, 0x08) + goto_first(0x0a) + label(0x07) + debug_log '!', '!', '!', '\n', '\0', + sfx_set_channel_volume(0x00, 0xff7f, 0x7800) + goto_next(0x0b) + label(0x0b) + ai_sleep + if_objective_bitfield_is_set_on(0x00000800, 0x08) + if_bond_distance_to_pad_greater_than(0x8c00, 0x5427, 0x07) + goto_first(0x0b) + label(0x07) + debug_log 'o', 'f', 'f', '\n', '\0', + sfx_set_channel_volume(0x00, 0x0000, 0xf000) + goto_first(0x0a) + label(0x08) + debug_log 'b', 'a', 'n', 'g', '\n', '\0', + object_flags_1_set_off(0x03, 0x00000200) + object_destroy(0x03) + sfx_stop_channel(0x00) + label(0x0c) + ai_sleep + goto_first(0x0c) + ai_list_end +}; +u8 ai_7[] = { + label(0x00) + ai_sleep + if_bond_used_gadget_on_object(0x01, 0x07) + if_object_was_activated(0x01, 0x08) + goto_first(0x00) + label(0x07) + if_bond_has_item_equipped(0x27, 0x0b) + label(0x08) + object_destroy(0x01) + goto_next(0x0c) + label(0x0b) + sfx_play(0xf700, 0x01) + sfx_emit_from_object(0x01, 0x01, 0x0000) + objective_bitfield_set_on(0x00000100) + text_print_top(0x0d34) + object_flags_1_set_on(0x01, 0x00000200) + label(0x0c) + ai_sleep + goto_first(0x0c) + ai_list_end +}; +u8 ai_8[] = { + label(0x00) + ai_sleep + if_bond_used_gadget_on_object(0x02, 0x07) + if_object_was_activated(0x02, 0x08) + goto_first(0x00) + label(0x07) + if_bond_has_item_equipped(0x27, 0x0b) + label(0x08) + object_destroy(0x02) + goto_next(0x0c) + label(0x0b) + sfx_play(0xf700, 0x02) + sfx_emit_from_object(0x02, 0x02, 0x0000) + objective_bitfield_set_on(0x00000200) + text_print_top(0x0e34) + object_flags_1_set_on(0x02, 0x00000200) + label(0x0c) + ai_sleep + goto_first(0x0c) + ai_list_end +}; +u8 ai_9[] = { + label(0x2a) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x07) + if_object_not_destroyed(0x01, 0x07) + objective_bitfield_set_on(0x00000400) + label(0x07) + if_objective_bitfield_is_set_on(0x00000800, 0x07) + if_object_not_destroyed(0x02, 0x07) + objective_bitfield_set_on(0x00000800) + label(0x07) + goto_first(0x2a) + ai_list_end +}; +u8 ai_10[] = { + label(0x0a) + ai_sleep + if_bond_in_room_with_pad(0x9900, 0x07) + if_bond_in_room_with_pad(0x9500, 0x07) + goto_next(0x03) + label(0x07) + goto_first(0x0a) + label(0x03) + ai_sleep + if_bond_is_dead(0x2f) + if_bond_in_room_with_pad(0x9900, 0x07) + goto_first(0x03) + label(0x07) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x0e) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0e) + label(0x07) + if_objective_all_completed(0x07) + jump_to_ai_list(0xfd, 0x0f00) + label(0x07) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + if_bond_has_item_equipped(0x02, 0x07) + if_bond_has_item_equipped(0x03, 0x07) + if_bond_has_item_equipped(0x1a, 0x07) + if_bond_has_item_equipped(0x1b, 0x07) + if_bond_has_item_equipped(0x1c, 0x07) + if_bond_has_item_equipped(0x1d, 0x07) + if_bond_has_item_equipped(0x18, 0x07) + if_bond_has_item_equipped(0x19, 0x07) + if_bond_has_item_equipped(0x04, 0x07) + if_bond_has_item_equipped(0x05, 0x07) + if_bond_has_item_equipped(0x06, 0x07) + if_bond_has_item_equipped(0x07, 0x07) + if_bond_has_item_equipped(0x08, 0x07) + if_bond_has_item_equipped(0x09, 0x07) + if_bond_has_item_equipped(0x0a, 0x07) + if_bond_has_item_equipped(0x0b, 0x07) + if_bond_has_item_equipped(0x0c, 0x07) + if_bond_has_item_equipped(0x0d, 0x07) + if_bond_has_item_equipped(0x0e, 0x07) + if_bond_has_item_equipped(0x0f, 0x07) + if_bond_has_item_equipped(0x10, 0x07) + if_bond_has_item_equipped(0x11, 0x07) + if_bond_has_item_equipped(0x12, 0x07) + if_bond_has_item_equipped(0x13, 0x07) + if_bond_has_item_equipped(0x16, 0x07) + if_bond_has_item_equipped(0x14, 0x07) + if_bond_has_item_equipped(0x15, 0x07) + bond_equip_item_cinema(0x04) + label(0x07) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x04, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x0504) + screen_fade_from_black + label(0x0f) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0f) + label(0x07) + jump_to_ai_list(0xfd, 0x0100) + label(0x2f) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_4[] = { + chr_try_teleporting_to_pad(0xfd, 0xb000, 0x07) + label(0x07) + chr_remove_item_in_hand(0xfd, 0x01) + guard_play_animation(0x6900, 0x0000, 0x1d00, 0x06, 0x10) + label(0x0b) + ai_sleep + if_guard_has_stopped_moving(0x07) + goto_first(0x0b) + label(0x07) + chr_remove_item_in_hand(0xfd, 0x00) + guard_play_animation(0x6900, 0x1d00, 0xa000, 0x06, 0x10) + local_timer_reset_start + label(0x0c) + ai_sleep + if_guard_has_stopped_moving(0x07) + if_local_timer_greater_than(0xde0000, 0x07) + goto_first(0x0c) + label(0x07) + screen_fade_to_black + label(0x0d) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0d) + label(0x07) + exit_level + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_11[] = { + if_game_difficulty_greater_than(0x01, 0x04) + objective_bitfield_set_on(0x00010000) + if_game_difficulty_greater_than(0x00, 0x04) + objective_bitfield_set_on(0x00020000) + objective_bitfield_set_on(0x00040000) + label(0x04) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_12[] = { + label(0x03) + ai_sleep + chr_flags_set_on(0x2c, 0x00001000) + chr_flags_set_on(0x2d, 0x00001000) + chr_flags_set_on(0x30, 0x00001000) + ai_sleep + chr_flags_set_on(0x31, 0x00001000) + chr_flags_set_on(0x34, 0x00001000) + chr_flags_set_on(0x35, 0x00001000) + label(0x2a) + ai_sleep + if_game_difficulty_less_than(0x02, 0x29) + if_killed_civilians_greater_than(0x01, 0x07) + goto_first(0x2a) + label(0x29) + if_game_difficulty_less_than(0x01, 0x29) + if_killed_civilians_greater_than(0x02, 0x07) + goto_first(0x2a) + label(0x29) + if_killed_civilians_greater_than(0x04, 0x07) + goto_first(0x2a) + label(0x07) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x07) + text_print_top(0x1e34) + objective_bitfield_set_on(0x00001000) + goto_first(0x0a) + label(0x07) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/e/UsetupjunZ.c b/assets/obseg/setup/e/UsetupjunZ.c index df30a4bb..92afa34b 100644 --- a/assets/obseg/setup/e/UsetupjunZ.c +++ b/assets/obseg/setup/e/UsetupjunZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -2267,44 +2268,1182 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x04000000 }; -u32 ai_31[] = { 0x02040330, 0x002c3100, 0x2c010402, 0x2cf5009a, 0x00000100, 0x02060301, 0x06040000 }; -u32 ai_1[] = { 0x9001908f, 0x00649164, 0x93649264, 0x9d000002, 0x009d0000, 0x08000208, 0x033c2c42, 0x2c010802, 0x2cc3481e, 0xf40000ff, 0x05fd0403, 0x04000000 }; -u32 ai_2[] = { 0xad58202d, 0x206d6100, 0x02030306, 0x04033335, 0x3c364551, 0x02363c3d, 0x023105fd, 0x04050251, 0x05fd0406, 0x023d05fd, 0x04040400 }; -u32 ai_3[] = { 0xad58202d, 0x20617400, 0x02033335, 0x802c4551, 0x7f3f3d33, 0x022c3528, 0x2c130602, 0x2c35502c, 0x1106022c, 0x35782c02, 0x3d120602, 0x2c35a02c, 0x14000100, 0x0006022c, 0x35c82c15, 0x00010000, 0x06022c35, 0xe12c1500, 0x2100002c, 0x022c1400, 0x2100002c, 0x022c0303, 0x03160001, 0x00000602, 0x06032f2c, 0x0106022c, 0x05fd0403, 0x02510604, 0x0405fd04, 0x06040000 }; -u32 ai_5[] = { 0xad58202d, 0x20657600, 0x02030333, 0x022c3335, 0x3c2c0f06, 0x022c3335, 0x782c0e06, 0x022c3335, 0xb42c1006, 0x022c0a00, 0x0b001400, 0x3c001000, 0x06020603, 0x2f2c0106, 0x022c0704 }; -u32 ai_4[] = { 0xad58202d, 0x20676f00, 0x0203282c, 0x022c0208, 0x032f063c, 0x06455101, 0x08025106, 0x040505fd, 0x04060206, 0x06040305, 0xfd040304 }; -u32 ai_7[] = { 0x9000508f, 0x00509d00, 0x00080002, 0x0303ce2c, 0xcf2c0006, 0x022c0103, 0x0206c348, 0x1c05fd04, 0x07040000 }; -u32 ai_6[] = { 0xad666f6c, 0x00910a9d, 0x00000040, 0x0201034b, 0x00960828, 0x09010102, 0x09032f06, 0x4b004b08, 0x01090208, 0x03333580, 0x06036f02, 0x2c6f042c, 0x6f082c08, 0x05fd040c, 0x022cad66, 0x726f6c69, 0x63001d02, 0x0a032f06, 0x4c00fa06, 0x01090206, 0x05fd0409, 0x02070400 }; -u32 ai_8[] = { 0xad6d646b, 0x00eb2602, 0x03510064, 0x26035100, 0xc82c0351, 0x012c2c05, 0xfd040c02, 0x2c40fc36, 0x00070236, 0x33358036, 0x14002400, 0xfc3d0236, 0x15002400, 0xfc3d1700, 0x0400fc2c, 0x022cae02, 0x0d03b400, 0x003c2c01, 0x0d022c40, 0xfc360007, 0x02360103, 0x023d97fc, 0x80ae020b, 0x0330fc4b, 0xb400003c, 0x2c010b02, 0x2c160004, 0x00fc2c02, 0x2c020c30, 0xfc4b31fc, 0x4b03b400, 0x012c2c2f, 0x2c010c02, 0x2c333580, 0x2c010302, 0x2c020798, 0xfc8005fd, 0x0407024b, 0x05fd040a, 0x022605fd, 0x040b0400 }; -u32 ai_9[] = { 0x98fc809c, 0x00000200, 0x367f3307, 0x02363303, 0x353c0633, 0x03350a2c, 0xc3480800, 0x06022c35, 0x142cc348, 0x09000602, 0x2c351e2c, 0xc3480a00, 0x06022c35, 0x282cc348, 0x0b000602, 0x2c35322c, 0xc3480c00, 0x06022c35, 0x3c2cc348, 0x0d000602, 0x2c35462c, 0xc3480e00, 0x06022c35, 0x502cc348, 0x0f000602, 0x2c355a2c, 0xc3481000, 0x06022c35, 0x642cc348, 0x11000602, 0x2c356e2c, 0xc3481200, 0x06022c35, 0x782cc348, 0x13000602, 0x2c35822c, 0xc3481400, 0x06022c35, 0x8c2cc348, 0x15000602, 0x2c35962c, 0xc3481600, 0x06022c35, 0xa02cc348, 0x17000602, 0x2c35aa2c, 0xc3481800, 0x06022c35, 0xb42cc348, 0x19000602, 0x2c35be2c, 0xc3481a00, 0x06022c02, 0x0605fd04, 0x070207c3, 0x481d9a00, 0x00020001, 0x06040000 }; -u32 ai_11[] = { 0xad736361, 0x6e009100, 0x33353c2c, 0x0a009600, 0x00005600, 0x10000802, 0x2c35782c, 0x0a009700, 0x00005600, 0x10000802, 0x2c358c2c, 0x0a005300, 0x00002200, 0x10003602, 0x2c35a02c, 0x0a005400, 0x00002400, 0x10003602, 0x2c35b42c, 0x0a006300, 0x00009500, 0x10000802, 0x2c036e02, 0x2c6e042c, 0x6e082c6e, 0x012cab02, 0x02022c91, 0x0035c82c, 0x15012823, 0x28360036, 0x022c35dc, 0x2c140128, 0x23283600, 0x36022c17, 0x00082328, 0x36003602, 0x08032f06, 0x01080236, 0xae020903, 0xb4000078, 0x06010902, 0x0605fd04, 0x07040000 }; -u32 ai_10[] = { 0xad657661, 0x64009114, 0x97fc8033, 0x35800a0a, 0x000b0014, 0x003c0210, 0x0208032f, 0x2c010802, 0x2c020a15, 0x002400fc, 0x3d023dae, 0x020b0330, 0xfc4bb400, 0x003c2c01, 0x0b022c4f, 0x0019fc09, 0x16000400, 0xfc2c022c, 0x020c03b4, 0x00012c2c, 0x2f2c010c, 0x022c30fc, 0x4b333580, 0x2c010802, 0x2c020798, 0xfc8005fd, 0x0407024b, 0x05fd040a, 0x0209032f, 0x2ce72c01, 0x09022c16, 0x000400fc, 0x2c05fd04, 0x07022c03, 0x19fdfc08, 0xad636865, 0x61700098, 0xfc80020d, 0x032f2c01, 0x0d022c05, 0xfd040704 }; -u32 ai_12[] = { 0x02040330, 0xfd332f3b, 0x0104023b, 0x324e3e4f, 0x3f4d4650, 0x3a4d3b4d, 0x0b2c3335, 0x012c0604, 0x0d05fd00, 0x03022c01, 0x04025033, 0x357f4e06, 0x040d05fd, 0x040f024e, 0x06040d05, 0xfd040e02, 0x4f06040d, 0x05fd0410, 0x024d0604, 0x0d05fd00, 0x0b023305, 0xfd000104 }; -u32 ai_13[] = { 0x96012c33, 0x35202c0c, 0x94010702, 0x2c94011a, 0x06022c03, 0x31012c30, 0x012c0333, 0x35642c4f, 0x0050012a, 0x96802a02, 0x08022c4c, 0x00964f33, 0x350a2c13, 0x06022c33, 0x350a2c0f, 0x06022c33, 0x35192c0e, 0x06022c33, 0x35322c10, 0x06022c33, 0x35402c11, 0x06022c35, 0x7f2c1206, 0x022c3335, 0x7f3e1400, 0x01000006, 0x023e1500, 0x01000006, 0x02060702, 0x2a034001, 0x36000702, 0x3606040e, 0x05fd041c, 0x02070108, 0x024f0604, 0x0d05fd04, 0x10040000 }; -u32 ai_14[] = { 0x0d020403, 0x2f060104, 0x020605fd, 0x04100400 }; -u32 ai_15[] = { 0x94012804, 0x07020403, 0x2f3b324e, 0x0104024e, 0x4b009636, 0x01040236, 0x05fd040e, 0x023b0704 }; -u32 ai_27[] = { 0xad676574, 0x204e00a9, 0x01039e00, 0x00004033, 0x3580039d, 0x00000040, 0x02030331, 0xfc4b30fc, 0x4b40fc36, 0x00070236, 0x33358036, 0x14002400, 0xfc3d0236, 0x15002400, 0xfc3d1700, 0x0400fc2c, 0x022cae02, 0x0d03b400, 0x003c2c01, 0x0d022c00, 0x07023601, 0x03023daa, 0x01fdae02, 0x0b03b400, 0x003c2c01, 0x0b022c16, 0x000400fc, 0x2c022c02, 0x0c30fc4b, 0x032f2c01, 0x0c022c02, 0x07022602, 0x06039e00, 0x00004007, 0x024b0604, 0x0d05fd04, 0x10040000 }; -u32 ai_16[] = { 0x94014c00, 0xfa4d414d, 0x05fd0410, 0x024d31f9, 0x4d05fd04, 0x0d024dc1, 0xfd04122c, 0x05fd0410, 0x022c05fd, 0x040d0400 }; -u32 ai_17[] = { 0x06040d05, 0xfd041004 }; -u32 ai_18[] = { 0x90001402, 0x03140021, 0x00000402, 0x0403462c, 0x3a2c3b2c, 0x322c3c2c, 0x0104022c, 0x3335962c, 0x16000100, 0x0008022c, 0x09ae0209, 0x033335fa, 0x2cb40000, 0xf0060109, 0x022c1400, 0x2100002c, 0x022c1600, 0x0100002c, 0x022c0208, 0x032f0601, 0x08020601, 0x03040000 }; -u32 ai_32[] = { 0x02040331, 0x012c0104, 0x022cc348, 0x1f9a0000, 0x04000206, 0x03010604 }; -u32 ai_33[] = { 0x020303eb, 0x4c5501d4, 0x2c010302, 0x2c9a0004, 0x0000ecd7, 0x00da0208, 0x03dc2c01, 0x08022c31, 0x014b3001, 0x4bf12c05, 0xfd000f02, 0x2cddeadf, 0x1fdf2059, 0x042c5905, 0x2c59062c, 0x59072c59, 0x082c5909, 0x2c590a2c, 0x590b2c59, 0x0c2c590d, 0x2c590e2c, 0x590f2c59, 0x102c5911, 0x2c59122c, 0x59132c59, 0x162c5914, 0x2c59152c, 0xe404022c, 0xed030303, 0xd51e0002, 0x0000a101, 0x00000400, 0xa0010480, 0x0000d901, 0x024f2c02, 0x2c050104, 0x1ea0f804, 0x800000d9, 0xf802502c, 0x022c05f8, 0x041f0303, 0xdbf40100, 0xff05fd00, 0x01024bd2, 0x05fd0001, 0x024c05fd, 0x00010400 }; -u32 ai_30[] = { 0xa0fd0000, 0x0010a0fd, 0x00000080, 0x0a005aff, 0xffffff06, 0x1059042c, 0x59052c59, 0x062c5907, 0x2c59082c, 0x59092c59, 0x0a2c590b, 0x2c590c2c, 0x590d2c59, 0x0e2c590f, 0x2c59102c, 0x59112c59, 0x122c5913, 0x2c59162c, 0x59142c59, 0x152ce0fd, 0x00e0fd01, 0xbf00bf04, 0x00000000, 0x2c022c02, 0x08035401, 0x01d42c01, 0x08022cae, 0x020903b4, 0x00001e2c, 0x0109022c, 0x14002802, 0x4f2c022c, 0x16000802, 0x4f2c022c, 0xae020a03, 0xb400005a, 0x2c010a02, 0x2c671f02, 0x0b03b400, 0x00962c01, 0x0b022cda, 0x020c03dc, 0x2c010c02, 0x2cd205fd, 0x00010400 }; -u32 ai_29[] = { 0xa0fd0000, 0x0010a0fd, 0x00000080, 0x0a005a00, 0x07ffff06, 0x10020803, 0x540101d4, 0x2c010802, 0x2cae0209, 0x03b40000, 0x0a2c0109, 0x022c1500, 0x2802502c, 0x022c1600, 0x0802502c, 0x022c05fd, 0x00010400 }; -u32 ai_37[] = { 0xae020903, 0xb4000258, 0x2c010902, 0x2ca40300, 0x0200005f, 0x03020a03, 0xb40002d0, 0x2c010a02, 0x2ca40400, 0x0200005f, 0x04020b03, 0xb400030c, 0x2c010b02, 0x2ca40500, 0x0200005f, 0x0505fd00, 0x01040000 }; -u32 ai_34[] = { 0x02040355, 0x01c82c01, 0x04022c9a, 0x00000800, 0x0237aead, 0x210a0003, 0x31272c00, 0x36022c9c, 0x00001000, 0x36f336bd, 0x00ff01d3, 0x04140000, 0x00002c02, 0x36022c03, 0x31282c00, 0x36022c9c, 0x00002000, 0x36f336bd, 0x00ff01d3, 0x04150000, 0x00002c02, 0x36022c03, 0x31292c00, 0x36022c9c, 0x00004000, 0x36f336bd, 0x00ff01d3, 0x04160000, 0x00002c02, 0x36022c03, 0x311d2c00, 0x36022c9c, 0x00008000, 0x36f336bd, 0x00ff01d3, 0x04170000, 0x00002c02, 0x36022c03, 0x31222c00, 0x36022c9c, 0x00010000, 0x36f336bd, 0x00ff01d3, 0x04180000, 0x00002c02, 0x36022c03, 0x311e2c00, 0x36022c9c, 0x00020000, 0x36f336bd, 0x00ff01d3, 0x04190000, 0x00002c02, 0x36020603, 0x9c000008, 0x00360007, 0x0236b400, 0x00782c55, 0x01d20755, 0x01b90701, 0x06022c01, 0x370207ad, 0x73706177, 0x6e206f66, 0x66009b00, 0x00080001, 0x04040000 }; -u32 ai_19[] = { 0x8e273335, 0xc836ab02, 0x49002c02, 0x36ab01cb, 0x022cad31, 0x380a0005, 0xfd041a04 }; -u32 ai_20[] = { 0x8e283335, 0xc836ab02, 0x4a002c02, 0x36ab01ca, 0x022cad31, 0x390a0005, 0xfd041a04 }; -u32 ai_21[] = { 0x8e293335, 0xc836ab02, 0x4b002c02, 0x36ab01c7, 0x022cad32, 0x300a0005, 0xfd041a04 }; -u32 ai_22[] = { 0x8e1d3335, 0xc836ab02, 0x41002c02, 0x36ab01c8, 0x022cad31, 0x300a0005, 0xfd041a04 }; -u32 ai_23[] = { 0x8e223335, 0xc836ab02, 0x42002c02, 0x36ab01c9, 0x022cad31, 0x310a0005, 0xfd041a04 }; -u32 ai_24[] = { 0x8e1e3335, 0xc836ab02, 0x47002c02, 0x36ab01c4, 0x022cad32, 0x300a0005, 0xfd041a04 }; -u32 ai_25[] = { 0xc000d900, 0x00000004, 0x0204bf00, 0xbc0d0000, 0x00000402, 0x04000602, 0x06060002, 0x05fd041b, 0x04000000 }; -u32 ai_26[] = { 0x02031f23, 0x28030208, 0x032f2c4b, 0x0064074d, 0xfd000a23, 0x28060108, 0x022c034b, 0x0064074d, 0xfd000a23, 0x28060103, 0x020605fd, 0x04130207, 0x06040d05, 0xfd041004 }; -u32 ai_35[] = { 0x0208039c, 0x00000800, 0x2c010802, 0x2cae9b00, 0x0010009b, 0x00002000, 0x9b000040, 0x009b0000, 0x80009b00, 0x0100009b, 0x00020000, 0x0209039c, 0x00000800, 0x36000602, 0x36b4002a, 0x302c0109, 0x022cad72, 0x616d7020, 0x646f776e, 0x2031009a, 0x00008000, 0x9a000100, 0x009a0002, 0x0000020a, 0x039c0000, 0x08003600, 0x060236b4, 0x008ca02c, 0x010a022c, 0xad72616d, 0x7020646f, 0x776e2032, 0x009a0000, 0x10009a00, 0x0020009a, 0x00004000, 0x02069b00, 0x00080001, 0x08040000 }; -u32 ai_28[] = { 0x0a006700, 0x00000104, 0x10ae0208, 0x03b40000, 0x3c2c0108, 0x022c0a00, 0x670001ff, 0xff041005, 0xfd000104 }; -u32 ai_36[] = { 0x020803cf, 0x2c010802, 0x2c05f804, 0x1d020603, 0x01060400 }; +u8 ai_0[] = { + ai_list_end +}; +u8 ai_31[] = { + label(0x04) + ai_sleep + if_chr_dying_or_dead(0x00, 0x2c) + if_chr_does_not_exist(0x00, 0x2c) + goto_first(0x04) + label(0x2c) + music_xtrack_stop(0x00) + objective_bitfield_set_on(0x00010000) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_1[] = { + guard_set_armour(0x9001) + guard_set_health_total(0x6400) + guard_set_speed_rating(0x64) + guard_set_accuracy_rating(0x64) + guard_set_argh_rating(0x64) + guard_flags_set_on(0x00020000) + guard_flags_set_on(0x00080000) + label(0x08) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2c) + if_guard_is_on_screen(0x2c) + goto_first(0x08) + label(0x2c) + text_print_top(0x1e48) + music_xtrack_play(0x00, 0x00, 0xff) + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_2[] = { + debug_log 'X', ' ', '-', ' ', 'm', 'a', '\0', + label(0x03) + ai_sleep + set_return_ai_list(0x0304) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x36) + if_guard_is_targeted_by_bond(0x51) + label(0x36) + if_guard_and_bond_within_line_of_sight(0x3d) + label(0x31) + jump_to_ai_list(0xfd, 0x0504) + label(0x51) + jump_to_ai_list(0xfd, 0x0604) + label(0x3d) + jump_to_ai_list(0xfd, 0x0404) + ai_list_end +}; +u8 ai_3[] = { + debug_log 'X', ' ', '-', ' ', 'a', 't', '\0', + label(0x03) + random_generate_seed + if_random_seed_greater_than(0x80, 0x2c) + if_guard_is_targeted_by_bond(0x51) + if_bond_health_less_than(0x3f, 0x3d) + random_generate_seed + label(0x2c) + if_random_seed_greater_than(0x28, 0x2c) + guard_try_firing_roll(0x06) + label(0x2c) + if_random_seed_greater_than(0x50, 0x2c) + guard_try_firing_walk(0x06) + label(0x2c) + if_random_seed_greater_than(0x78, 0x2c) + label(0x3d) + guard_try_firing_run(0x06) + label(0x2c) + if_random_seed_greater_than(0xa0, 0x2c) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x2c) + if_random_seed_greater_than(0xc8, 0x2c) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x2c) + if_random_seed_greater_than(0xe1, 0x2c) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x2c) + label(0x2c) + ai_sleep + ai_sleep + ai_sleep + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x06) + label(0x2c) + jump_to_ai_list(0xfd, 0x0304) + label(0x51) + set_return_ai_list(0x0404) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_5[] = { + debug_log 'X', ' ', '-', ' ', 'e', 'v', '\0', + label(0x03) + ai_sleep + random_generate_seed + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2c) + guard_try_hopping_sideways(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2c) + guard_try_sidestepping(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0xb4, 0x2c) + guard_try_running_to_side(0x06) + label(0x2c) + guard_play_animation(0x0b00, 0x1400, 0x3c00, 0x00, 0x10) + goto_next(0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x06) + label(0x2c) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_4[] = { + debug_log 'X', ' ', '-', ' ', 'g', 'o', '\0', + label(0x03) + guard_try_running_to_bond_position(0x2c) + label(0x2c) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_guard_and_bond_within_line_of_sight(0x06) + if_guard_is_targeted_by_bond(0x51) + goto_first(0x08) + label(0x51) + set_return_ai_list(0x0504) + jump_to_ai_list(0xfd, 0x0604) + label(0x06) + set_return_ai_list(0x0304) + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_7[] = { + guard_set_armour(0x5000) + guard_set_health_total(0x5000) + guard_flags_set_on(0x00080000) + label(0x03) + ai_sleep + if_camera_is_in_intro(0x2c) + if_camera_is_in_bond_swirl(0x2c) + goto_next(0x06) + label(0x2c) + goto_first(0x03) + label(0x06) + text_print_top(0x1c48) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_6[] = { + debug_log 'f', 'o', 'l', '\0', + guard_set_speed_rating(0x0a) + guard_flags_set_on(0x40000000) + label(0x01) + ai_sleep + if_guard_distance_to_bond_less_than(0x9600, 0x08) + guard_try_running_to_bond_position(0x09) + goto_first(0x01) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_guard_distance_to_bond_less_than(0x4b00, 0x08) + goto_first(0x09) + label(0x08) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x80, 0x06) + ai_sleep + guard_try_unknown6F(0x02, 0x2c) + guard_try_unknown6F(0x04, 0x2c) + guard_try_unknown6F(0x08, 0x2c) + guard_animation_stop + jump_to_ai_list(0xfd, 0x0c04) + label(0x2c) + debug_log 'f', 'r', 'o', 'l', 'i', 'c', '\0', + guard_runs_to_pad_preset + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_guard_distance_to_bond_greater_than(0xfa00, 0x06) + goto_first(0x09) + label(0x06) + jump_to_ai_list(0xfd, 0x0904) + label(0x07) + ai_list_end +}; +u8 ai_8[] = { + debug_log 'm', 'd', 'k', '\0', + if_bond_is_dead(0x26) + label(0x03) + guard_try_setting_chr_preset_to_guard_within_distance(0x6400, 0x26) + ai_sleep + guard_try_setting_chr_preset_to_guard_within_distance(0xc800, 0x2c) + ai_sleep + guard_try_setting_chr_preset_to_guard_within_distance(0x2c01, 0x2c) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2c) + if_guard_in_room_with_chr(0xfc, 0x36) + goto_next(0x07) + label(0x36) + random_generate_seed + if_random_seed_greater_than(0x80, 0x36) + guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x3d) + label(0x36) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0xfc00, 0x3d) + guard_try_facing_target(0x0400, 0xfc00, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0d) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0d) + label(0x2c) + if_guard_in_room_with_chr(0xfc, 0x36) + goto_next(0x07) + label(0x36) + goto_first(0x03) + label(0x3d) + chr_bitfield_set_on(0xfc, 0x80) + local_timer_reset_start + label(0x0b) + ai_sleep + if_chr_dying_or_dead(0xfc, 0x4b) + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0b) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + label(0x2c) + label(0x0c) + if_chr_dying_or_dead(0xfc, 0x4b) + if_chr_does_not_exist(0xfc, 0x4b) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + if_guard_has_stopped_moving(0x2c) + goto_first(0x0c) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x80, 0x2c) + goto_first(0x03) + label(0x2c) + label(0x07) + chr_bitfield_set_off(0xfc, 0x80) + jump_to_ai_list(0xfd, 0x0704) + label(0x4b) + jump_to_ai_list(0xfd, 0x0a04) + label(0x26) + jump_to_ai_list(0xfd, 0x0b04) + ai_list_end +}; +u8 ai_9[] = { + chr_bitfield_set_off(0xfc, 0x80) + if_objective_bitfield_is_set_on(0x00020000, 0x36) + if_bond_health_less_than(0x33, 0x07) + label(0x36) + random_generate_seed + ai_sleep + if_random_seed_greater_than(0x3c, 0x06) + random_generate_seed + ai_sleep + if_random_seed_greater_than(0x0a, 0x2c) + text_print_top(0x0848) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x14, 0x2c) + text_print_top(0x0948) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x1e, 0x2c) + text_print_top(0x0a48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x28, 0x2c) + text_print_top(0x0b48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x32, 0x2c) + text_print_top(0x0c48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x3c, 0x2c) + text_print_top(0x0d48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x46, 0x2c) + text_print_top(0x0e48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x50, 0x2c) + text_print_top(0x0f48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x5a, 0x2c) + text_print_top(0x1048) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x64, 0x2c) + text_print_top(0x1148) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x6e, 0x2c) + text_print_top(0x1248) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x78, 0x2c) + text_print_top(0x1348) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x82, 0x2c) + text_print_top(0x1448) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x8c, 0x2c) + text_print_top(0x1548) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x96, 0x2c) + text_print_top(0x1648) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xa0, 0x2c) + text_print_top(0x1748) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xaa, 0x2c) + text_print_top(0x1848) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xb4, 0x2c) + text_print_top(0x1948) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xbe, 0x2c) + text_print_top(0x1a48) + goto_next(0x06) + label(0x2c) + label(0x06) + jump_to_ai_list(0xfd, 0x0704) + label(0x07) + text_print_top(0x1d48) + objective_bitfield_set_on(0x00020000) + goto_first(0x06) + ai_list_end +}; +u8 ai_11[] = { + debug_log 's', 'c', 'a', 'n', '\0', + guard_set_speed_rating(0x00) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2c) + guard_play_animation(0x9600, 0x0000, 0x5600, 0x00, 0x10) + goto_next(0x08) + label(0x2c) + if_random_seed_greater_than(0x78, 0x2c) + guard_play_animation(0x9700, 0x0000, 0x5600, 0x00, 0x10) + goto_next(0x08) + label(0x2c) + if_random_seed_greater_than(0x8c, 0x2c) + guard_play_animation(0x5300, 0x0000, 0x2200, 0x00, 0x10) + goto_next(0x36) + label(0x2c) + if_random_seed_greater_than(0xa0, 0x2c) + guard_play_animation(0x5400, 0x0000, 0x2400, 0x00, 0x10) + goto_next(0x36) + label(0x2c) + if_random_seed_greater_than(0xb4, 0x2c) + guard_play_animation(0x6300, 0x0000, 0x9500, 0x00, 0x10) + goto_next(0x08) + label(0x2c) + ai_sleep + guard_try_unknown6E(0x02, 0x2c) + guard_try_unknown6E(0x04, 0x2c) + guard_try_unknown6E(0x08, 0x2c) + guard_try_unknown6E(0x01, 0x2c) + guard_set_pad_preset(0x0202) + label(0x2c) + guard_set_speed_rating(0x00) + if_random_seed_greater_than(0xc8, 0x2c) + guard_try_fire_or_aim_at_target_kneel(0x2801, 0x2823, 0x36) + goto_next(0x36) + label(0x2c) + if_random_seed_greater_than(0xdc, 0x2c) + guard_try_fire_or_aim_at_target(0x2801, 0x2823, 0x36) + goto_next(0x36) + label(0x2c) + guard_try_facing_target(0x0800, 0x2823, 0x36) + goto_next(0x36) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x06) + goto_first(0x08) + label(0x36) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x780000, 0x06) + goto_first(0x09) + label(0x06) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_10[] = { + debug_log 'e', 'v', 'a', 'd', '\0', + guard_set_speed_rating(0x14) + chr_bitfield_set_on(0xfc, 0x80) + random_generate_seed + if_random_seed_greater_than(0x80, 0x0a) + guard_play_animation(0x0b00, 0x1400, 0x3c00, 0x02, 0x10) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x08) + label(0x2c) + label(0x0a) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0xfc00, 0x3d) + label(0x3d) + local_timer_reset_start + label(0x0b) + ai_sleep + if_chr_dying_or_dead(0xfc, 0x4b) + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0b) + label(0x2c) + if_guard_distance_to_chr_less_than(0x1900, 0xfc, 0x09) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + label(0x2c) + label(0x0c) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + if_guard_has_stopped_moving(0x2c) + goto_first(0x0c) + label(0x2c) + if_chr_dying_or_dead(0xfc, 0x4b) + random_generate_seed + if_random_seed_greater_than(0x80, 0x2c) + goto_first(0x08) + label(0x2c) + label(0x07) + chr_bitfield_set_off(0xfc, 0x80) + jump_to_ai_list(0xfd, 0x0704) + label(0x4b) + jump_to_ai_list(0xfd, 0x0a04) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x2c) + if_guard_is_firing_and_using_180_range_flag(0x2c) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + jump_to_ai_list(0xfd, 0x0704) + label(0x2c) + ai_sleep + chr_hit_chr_body_part_with_held_item(0xfd, 0xfc, 0x08) + debug_log 'c', 'h', 'e', 'a', 'p', '\0', + chr_bitfield_set_off(0xfc, 0x80) + label(0x0d) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0d) + label(0x2c) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_12[] = { + label(0x04) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x33) + if_guard_has_stopped_moving(0x3b) + goto_first(0x04) + label(0x3b) + if_guard_sees_bond(0x4e) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x4f) + if_guard_heard_bond_within_last_10_secs(0x4d) + if_guard_shot_from_bond_missed(0x50) + if_guard_see_another_guard_shot(0x4d) + if_guard_see_another_guard_die(0x4d) + if_guard_playing_animation(0x2c) + random_generate_seed + if_random_seed_greater_than(0x01, 0x2c) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0300) + label(0x2c) + goto_first(0x04) + label(0x50) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x4e) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0f04) + label(0x4e) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0e04) + label(0x4f) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + label(0x4d) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0b00) + label(0x33) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_13[] = { + if_guard_bitfield_is_set_on(0x01, 0x2c) + random_generate_seed + if_random_seed_greater_than(0x20, 0x2c) + guard_points_at_bond + guard_bitfield_set_on(0x01) + jump_to_return_ai_list + label(0x2c) + guard_bitfield_set_on(0x01) + guard_try_throwing_grenade(0x06) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x01, 0x2c) + if_chr_dying_or_dead(0x01, 0x2c) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x64, 0x2c) + if_guard_distance_to_chr_less_than(0x5000, 0x01, 0x2a) + if_guard_bitfield_is_set_on(0x80, 0x2a) + label(0x08) + label(0x2c) + if_guard_distance_to_bond_greater_than(0x9600, 0x4f) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x2c) + guard_try_firing_roll(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x2c) + guard_try_hopping_sideways(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x19, 0x2c) + guard_try_sidestepping(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x32, 0x2c) + guard_try_running_to_side(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x40, 0x2c) + guard_try_firing_walk(0x06) + label(0x2c) + if_random_seed_greater_than(0x7f, 0x2c) + guard_try_firing_run(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x3e) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x3e) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + jump_to_return_ai_list + label(0x2a) + ai_sleep + if_guard_in_room_with_chr(0x01, 0x36) + goto_next(0x07) + label(0x36) + set_return_ai_list(0x0e04) + jump_to_ai_list(0xfd, 0x1c04) + label(0x07) + goto_first(0x08) + label(0x4f) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_14[] = { + guard_looks_around_self + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x06) + goto_first(0x04) + label(0x06) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_15[] = { + guard_bitfield_set_on(0x01) + guard_try_running_to_bond_position(0x04) + jump_to_return_ai_list + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x3b) + if_guard_sees_bond(0x4e) + goto_first(0x04) + label(0x4e) + if_guard_distance_to_bond_less_than(0x9600, 0x36) + goto_first(0x04) + label(0x36) + jump_to_ai_list(0xfd, 0x0e04) + label(0x3b) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_27[] = { + debug_log 'g', 'e', 't', ' ', 'N', '\0', + guard_set_chr_preset(0x01) + ai_sleep + guard_flags_set_off(0x40000000) + random_generate_seed + if_random_seed_greater_than(0x80, 0x03) + guard_flags_set_on(0x40000000) + label(0x03) + ai_sleep + if_chr_does_not_exist(0xfc, 0x4b) + if_chr_dying_or_dead(0xfc, 0x4b) + if_guard_in_room_with_chr(0xfc, 0x36) + goto_next(0x07) + label(0x36) + random_generate_seed + if_random_seed_greater_than(0x80, 0x36) + guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x3d) + label(0x36) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0xfc00, 0x3d) + guard_try_facing_target(0x0400, 0xfc00, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0d) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0d) + label(0x2c) + goto_next(0x07) + label(0x36) + goto_first(0x03) + label(0x3d) + chr_set_chr_preset(0x01, 0xfd) + local_timer_reset_start + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0b) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + label(0x2c) + label(0x0c) + if_chr_dying_or_dead(0xfc, 0x4b) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0c) + label(0x2c) + label(0x07) + label(0x26) + label(0x06) + ai_sleep + guard_flags_set_off(0x40000000) + jump_to_return_ai_list + label(0x4b) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_16[] = { + guard_bitfield_set_on(0x01) + if_guard_distance_to_bond_greater_than(0xfa00, 0x4d) + if_guard_has_not_been_seen(0x4d) + jump_to_ai_list(0xfd, 0x1004) + label(0x4d) + if_chr_does_not_exist(0xf9, 0x4d) + jump_to_ai_list(0xfd, 0x0d04) + label(0x4d) + chr_try_spawning_clone(0xfd, 0x1204, 0x2c) + jump_to_ai_list(0xfd, 0x1004) + label(0x2c) + jump_to_ai_list(0xfd, 0x0d04) + ai_list_end +}; +u8 ai_17[] = { + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_18[] = { + guard_set_armour(0x1400) + label(0x03) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x04) + label(0x04) + ai_sleep + if_guard_shot_from_bond_missed(0x2c) + if_guard_see_another_guard_shot(0x2c) + if_guard_see_another_guard_die(0x2c) + if_guard_sees_bond(0x2c) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_first(0x04) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x96, 0x2c) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x08) + label(0x2c) + guard_kneel + local_timer_reset_start + label(0x09) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x2c) + if_local_timer_greater_than(0xf00000, 0x06) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x2c) + label(0x2c) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x06) + goto_first(0x08) + label(0x06) + goto_first(0x03) + ai_list_end +}; +u8 ai_32[] = { + label(0x04) + ai_sleep + if_chr_does_not_exist(0x01, 0x2c) + goto_first(0x04) + label(0x2c) + text_print_top(0x1f48) + objective_bitfield_set_on(0x00040000) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_33[] = { + label(0x03) + ai_sleep + if_bond_is_dead(0x4c) + if_bond_in_room_with_pad(0xd401, 0x2c) + goto_first(0x03) + label(0x2c) + objective_bitfield_set_on(0x00000400) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x08) + label(0x2c) + if_chr_does_not_exist(0x01, 0x4b) + if_chr_dying_or_dead(0x01, 0x4b) + if_objective_all_completed(0x2c) + jump_to_ai_list(0xfd, 0x0f00) + label(0x2c) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + door_open_instant(0x1f) + door_open_instant(0x20) + if_bond_has_item_equipped(0x04, 0x2c) + if_bond_has_item_equipped(0x05, 0x2c) + if_bond_has_item_equipped(0x06, 0x2c) + if_bond_has_item_equipped(0x07, 0x2c) + if_bond_has_item_equipped(0x08, 0x2c) + if_bond_has_item_equipped(0x09, 0x2c) + if_bond_has_item_equipped(0x0a, 0x2c) + if_bond_has_item_equipped(0x0b, 0x2c) + if_bond_has_item_equipped(0x0c, 0x2c) + if_bond_has_item_equipped(0x0d, 0x2c) + if_bond_has_item_equipped(0x0e, 0x2c) + if_bond_has_item_equipped(0x0f, 0x2c) + if_bond_has_item_equipped(0x10, 0x2c) + if_bond_has_item_equipped(0x11, 0x2c) + if_bond_has_item_equipped(0x12, 0x2c) + if_bond_has_item_equipped(0x13, 0x2c) + if_bond_has_item_equipped(0x16, 0x2c) + if_bond_has_item_equipped(0x14, 0x2c) + if_bond_has_item_equipped(0x15, 0x2c) + bond_equip_item_cinema(0x04) + label(0x2c) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x1e, 0x0200, 0x0000) + chr_flags_set_off(0x01, 0x00040000) + chr_flags_set_on(0x01, 0x00008004) + chr_try_teleporting_to_pad(0x01, 0x4f02, 0x2c) + label(0x2c) + jump_to_ai_list(0x01, 0x1e04) + chr_flags_set_on(0xf8, 0x00008004) + chr_try_teleporting_to_pad(0xf8, 0x5002, 0x2c) + label(0x2c) + jump_to_ai_list(0xf8, 0x1f04) + ai_sleep + ai_sleep + screen_fade_from_black + music_xtrack_play(0x01, 0x00, 0xff) + jump_to_ai_list(0xfd, 0x0100) + label(0x4b) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x4c) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_30[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_flags_set_on(0xfd, 0x80000000) + guard_play_animation(0x5a00, 0xffff, 0xffff, 0x06, 0x10) + if_bond_has_item_equipped(0x04, 0x2c) + if_bond_has_item_equipped(0x05, 0x2c) + if_bond_has_item_equipped(0x06, 0x2c) + if_bond_has_item_equipped(0x07, 0x2c) + if_bond_has_item_equipped(0x08, 0x2c) + if_bond_has_item_equipped(0x09, 0x2c) + if_bond_has_item_equipped(0x0a, 0x2c) + if_bond_has_item_equipped(0x0b, 0x2c) + if_bond_has_item_equipped(0x0c, 0x2c) + if_bond_has_item_equipped(0x0d, 0x2c) + if_bond_has_item_equipped(0x0e, 0x2c) + if_bond_has_item_equipped(0x0f, 0x2c) + if_bond_has_item_equipped(0x10, 0x2c) + if_bond_has_item_equipped(0x11, 0x2c) + if_bond_has_item_equipped(0x12, 0x2c) + if_bond_has_item_equipped(0x13, 0x2c) + if_bond_has_item_equipped(0x16, 0x2c) + if_bond_has_item_equipped(0x14, 0x2c) + if_bond_has_item_equipped(0x15, 0x2c) + chr_remove_item_in_hand(0xfd, 0x00) + chr_remove_item_in_hand(0xfd, 0x01) + guard_try_spawning_item(0xbf00, 0x04, 0x00000000, 0x2c) + label(0x2c) + label(0x08) + ai_sleep + if_chr_in_room_with_pad(0x01, 0xd401, 0x2c) + goto_first(0x08) + label(0x2c) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x1e0000, 0x2c) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2800, 0x4f02, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0800, 0x4f02, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x5a0000, 0x2c) + goto_first(0x0a) + label(0x2c) + door_close(0x1f) + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x960000, 0x2c) + goto_first(0x0b) + label(0x2c) + screen_fade_to_black + label(0x0c) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x0c) + label(0x2c) + exit_level + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_29[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_flags_set_on(0xfd, 0x80000000) + guard_play_animation(0x5a00, 0x0700, 0xffff, 0x06, 0x10) + label(0x08) + ai_sleep + if_chr_in_room_with_pad(0x01, 0xd401, 0x2c) + goto_first(0x08) + label(0x2c) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x0a0000, 0x2c) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target_kneel(0x2800, 0x5002, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0800, 0x5002, 0x2c) + label(0x2c) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_37[] = { + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x580200, 0x2c) + goto_first(0x09) + label(0x2c) + object_flags_1_set_off(0x03, 0x00000200) + object_destroy(0x03) + label(0x0a) + ai_sleep + if_local_timer_greater_than(0xd00200, 0x2c) + goto_first(0x0a) + label(0x2c) + object_flags_1_set_off(0x04, 0x00000200) + object_destroy(0x04) + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x0c0300, 0x2c) + goto_first(0x0b) + label(0x2c) + object_flags_1_set_off(0x05, 0x00000200) + object_destroy(0x05) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_34[] = { + label(0x04) + ai_sleep + if_bond_in_room_with_pad(0xc801, 0x2c) + goto_first(0x04) + label(0x2c) + objective_bitfield_set_on(0x00080000) + label(0x37) + local_timer_reset_start + debug_log '!', '\n', '\0', + ai_sleep + if_chr_does_not_exist(0x27, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00100000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1404, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x28, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00200000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1504, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x29, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00400000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1604, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x1d, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00800000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1704, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x22, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00000100, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1804, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x1e, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00000200, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1904, 0x00000000, 0x2c) + label(0x36) + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x36) + goto_next(0x07) + label(0x36) + if_local_timer_greater_than(0x780000, 0x2c) + if_bond_in_room_with_pad(0xd201, 0x07) + if_bond_in_room_with_pad(0xb901, 0x07) + goto_first(0x06) + label(0x2c) + goto_first(0x37) + label(0x07) + debug_log 's', 'p', 'a', 'w', 'n', ' ', 'o', 'f', 'f', '\0', + objective_bitfield_set_off(0x00080000) + goto_first(0x04) + ai_list_end +}; +u8 ai_19[] = { + guard_set_chr_num(0x27) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4902) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xcb01) + label(0x2c) + debug_log '1', '8', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_20[] = { + guard_set_chr_num(0x28) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4a02) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xca01) + label(0x2c) + debug_log '1', '9', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_21[] = { + guard_set_chr_num(0x29) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4b02) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc701) + label(0x2c) + debug_log '2', '0', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_22[] = { + guard_set_chr_num(0x1d) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4102) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc801) + label(0x2c) + debug_log '1', '0', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_23[] = { + guard_set_chr_num(0x22) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4202) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc901) + label(0x2c) + debug_log '1', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_24[] = { + guard_set_chr_num(0x1e) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4702) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc401) + label(0x2c) + debug_log '2', '0', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_25[] = { + guard_try_spawning_hat(0xd900, 0x00000000, 0x04) + label(0x04) + guard_try_spawning_item(0xbc00, 0x0d, 0x00000000, 0x04) + label(0x04) + goto_next(0x06) + label(0x06) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x1b04) + ai_list_end +}; +u8 ai_26[] = { + label(0x03) + guard_sprints_to_pad(0x2823) + ai_sleep + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2c) + if_guard_distance_to_bond_less_than(0x6400, 0x07) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x06) + goto_first(0x08) + label(0x2c) + ai_sleep + if_guard_distance_to_bond_less_than(0x6400, 0x07) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x06) + goto_first(0x03) + label(0x06) + jump_to_ai_list(0xfd, 0x1304) + label(0x07) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_35[] = { + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x2c) + goto_first(0x08) + label(0x2c) + local_timer_reset_start + objective_bitfield_set_off(0x00100000) + objective_bitfield_set_off(0x00200000) + objective_bitfield_set_off(0x00400000) + objective_bitfield_set_off(0x00800000) + objective_bitfield_set_off(0x00000100) + objective_bitfield_set_off(0x00000200) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x36) + goto_next(0x06) + label(0x36) + if_local_timer_greater_than(0x302a00, 0x2c) + goto_first(0x09) + label(0x2c) + debug_log 'r', 'a', 'm', 'p', ' ', 'd', 'o', 'w', 'n', ' ', '1', '\0', + objective_bitfield_set_on(0x00800000) + objective_bitfield_set_on(0x00000100) + objective_bitfield_set_on(0x00000200) + label(0x0a) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x36) + goto_next(0x06) + label(0x36) + if_local_timer_greater_than(0xa08c00, 0x2c) + goto_first(0x0a) + label(0x2c) + debug_log 'r', 'a', 'm', 'p', ' ', 'd', 'o', 'w', 'n', ' ', '2', '\0', + objective_bitfield_set_on(0x00100000) + objective_bitfield_set_on(0x00200000) + objective_bitfield_set_on(0x00400000) + label(0x06) + objective_bitfield_set_off(0x00080000) + goto_first(0x08) + ai_list_end +}; +u8 ai_28[] = { + guard_play_animation(0x6700, 0x0000, 0x0100, 0x04, 0x10) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x08) + label(0x2c) + guard_play_animation(0x6700, 0x0100, 0xffff, 0x04, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_36[] = { + label(0x08) + ai_sleep + if_camera_is_in_bond_swirl(0x2c) + goto_first(0x08) + label(0x2c) + jump_to_ai_list(0xf8, 0x1d04) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/e/UsetuplenZ.c b/assets/obseg/setup/e/UsetuplenZ.c index ed433ccd..ba7616cd 100644 --- a/assets/obseg/setup/e/UsetuplenZ.c +++ b/assets/obseg/setup/e/UsetuplenZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -795,15 +796,122 @@ PathRecord patrolpaths[] = { }; -u32 ai_not_used_0[] = { 0x04000000 }; +u8 ai_not_used_0[] = { + ai_list_end +}; -u32 ai_1[] = { 0xd9fd002d, 0x2c022c0a, 0x00b6ffff, 0xffff0600, 0x05fd0001, 0x04000000 }; -u32 ai_3[] = { 0x02030a00, 0xb6009e00, 0xfa442005, 0xfd000104 }; -u32 ai_4[] = { 0x02030a00, 0xb60103ff, 0xff442005, 0xfd000104 }; -u32 ai_2[] = { 0xf20009d9, 0xfd002c2c, 0x0209ad62, 0x320a00d9, 0xfd002f2c, 0x022c0a00, 0xb5ffffff, 0xff060002, 0x08032f2c, 0x0108022c, 0x3335dc2c, 0x0a00b500, 0x9e00fa44, 0x20050004, 0x03010802, 0x2c0a00b5, 0x0103ffff, 0x44200500, 0x04040108, 0x04000000 }; -u32 ai_5[] = { 0x03d701ed, 0x030303ee, 0x012c0064, 0x0012002e, 0xffba1c71, 0xa0f80001, 0x0000a000, 0x00010000, 0xa0f80002, 0x0000a000, 0x00020000, 0x05f80402, 0x05000401, 0x0303db02, 0x0b03dc2c, 0x010b022c, 0xae020f03, 0xb400001e, 0x2c010f02, 0x2cc35008, 0xae020c03, 0xb40000b4, 0x2c010c02, 0x2cc35009, 0xae020d03, 0xb40000b4, 0x2c010d02, 0x2cc3500a, 0xae020e03, 0xb400012c, 0x2c010e02, 0x2cef0208, 0x03f02c01, 0x08022cda, 0x020903dc, 0x2c010902, 0x2c020a03, 0xd2010a04 }; +u8 ai_1[] = { + chr_try_teleporting_to_pad(0xfd, 0x2d00, 0x2c) + label(0x2c) + guard_play_animation(0xb600, 0xffff, 0xffff, 0x06, 0x00) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_3[] = { + label(0x03) + guard_play_animation(0xb600, 0x9e00, 0xfa00, 0x44, 0x20) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_4[] = { + label(0x03) + guard_play_animation(0xb600, 0x0301, 0xffff, 0x44, 0x20) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_2[] = { + if_folder_actor_is_equal(0x00, 0x09) + chr_try_teleporting_to_pad(0xfd, 0x2c00, 0x2c) + label(0x09) + debug_log 'b', '2', '\n', '\0', + chr_try_teleporting_to_pad(0xfd, 0x2f00, 0x2c) + label(0x2c) + guard_play_animation(0xb500, 0xffff, 0xffff, 0x06, 0x00) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x08) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0xdc, 0x2c) + guard_play_animation(0xb500, 0x9e00, 0xfa00, 0x44, 0x20) + jump_to_ai_list(0x00, 0x0304) + goto_first(0x08) + label(0x2c) + guard_play_animation(0xb500, 0x0301, 0xffff, 0x44, 0x20) + jump_to_ai_list(0x00, 0x0404) + goto_first(0x08) + ai_list_end +}; +u8 ai_5[] = { + ai_sleep + hud_hide_and_lock_controls_and_pause_mission_time(0x01) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_orbit_pad(0x2c01, 0x6400, 0x1200, 0x2e00, 0xbaff, 0x711c) + chr_flags_set_on(0xf8, 0x00000100) + chr_flags_set_on(0x00, 0x00000100) + chr_flags_set_on(0xf8, 0x00000200) + chr_flags_set_on(0x00, 0x00000200) + jump_to_ai_list(0xf8, 0x0204) + jump_to_ai_list(0x00, 0x0104) + ai_sleep + ai_sleep + screen_fade_from_black + label(0x0b) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x0b) + label(0x2c) + local_timer_reset_start + label(0x0f) + ai_sleep + if_local_timer_greater_than(0x1e0000, 0x2c) + goto_first(0x0f) + label(0x2c) + text_print_top(0x0850) + local_timer_reset_start + label(0x0c) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x2c) + goto_first(0x0c) + label(0x2c) + text_print_top(0x0950) + local_timer_reset_start + label(0x0d) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x2c) + goto_first(0x0d) + label(0x2c) + text_print_top(0x0a50) + local_timer_reset_start + label(0x0e) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0x0e) + label(0x2c) + credits_roll + label(0x08) + ai_sleep + if_credits_has_completed(0x2c) + goto_first(0x08) + label(0x2c) + screen_fade_to_black + label(0x09) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x09) + label(0x2c) + label(0x0a) + ai_sleep + exit_level + goto_first(0x0a) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/e/UsetupsiloZ.c b/assets/obseg/setup/e/UsetupsiloZ.c index 698b4830..915067a0 100644 --- a/assets/obseg/setup/e/UsetupsiloZ.c +++ b/assets/obseg/setup/e/UsetupsiloZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1481,38 +1482,689 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x200005fd, 0x00070400 }; -u32 ai_1[] = { 0x200105fd, 0x00070400 }; -u32 ai_2[] = { 0x200205fd, 0x00070400 }; -u32 ai_3[] = { 0x200305fd, 0x00070400 }; -u32 ai_4[] = { 0x200405fd, 0x00070400 }; -u32 ai_5[] = { 0x200505fd, 0x00070400 }; -u32 ai_6[] = { 0x200605fd, 0x00070400 }; -u32 ai_7[] = { 0x200705fd, 0x00070400 }; -u32 ai_8[] = { 0x200805fd, 0x00070400 }; -u32 ai_9[] = { 0x200905fd, 0x00070400 }; -u32 ai_10[] = { 0x200a05fd, 0x00070400 }; -u32 ai_11[] = { 0x200b05fd, 0x00070400 }; -u32 ai_12[] = { 0x200c05fd, 0x00070400 }; -u32 ai_13[] = { 0x200d05fd, 0x00070400 }; -u32 ai_14[] = { 0x200e05fd, 0x00070400 }; -u32 ai_15[] = { 0x02000346, 0x1f2f3c01, 0x00023c46, 0x1f3a1f3b, 0x20321703, 0x39153e15, 0x3f153c16, 0x023d0396, 0x80132f03, 0x01000213, 0x42230100, 0x02230604, 0x1005fd00, 0x04020379, 0x00200100, 0x02040100, 0x02153335, 0x40180100, 0x02181016, 0x01000216, 0x47401748, 0xc0174b00, 0x0a170100, 0x02173335, 0xc81b451b, 0x0100021b, 0x4b00641f, 0x79002006, 0x041005fd, 0x0411021f, 0x06041005, 0xfd041202, 0x20333540, 0x24060410, 0x05fd0413, 0x0224ad49, 0x66206f6e, 0x6c792049, 0x20686164, 0x20612067, 0x756e2121, 0x210a001a, 0x25010002, 0x25032f01, 0x01250201, 0x01000400 }; -u32 ai_16[] = { 0x0200032f, 0x1c010002, 0x1c333596, 0x1d333500, 0x1e000102, 0x1d0e0102, 0x1e100102, 0x01032f03, 0x01010203, 0x3c160702, 0x16476e17, 0x4891174b, 0x000a1707, 0x0217011c, 0x04000000 }; -u32 ai_17[] = { 0x02000333, 0x35fd2046, 0x20001f02, 0x1f45214c, 0x00c81a3c, 0x21001a02, 0x21790102, 0x21010002, 0x1a002002, 0x20060412, 0x05fd0413, 0x02010702, 0x0205fd00, 0x10040000 }; -u32 ai_18[] = { 0x61fd0200, 0x1c00d102, 0x03032f01, 0x4dfd0032, 0x00d10146, 0x1f010302, 0x1fad210a, 0x00210223, 0x033335dc, 0x233b232f, 0x23012302, 0x23ad496d, 0x206f6666, 0x210a0001, 0x0002014d, 0xfd003200, 0xd12d0702, 0x2d3c0422, 0x07020403, 0x07040000 }; -u32 ai_19[] = { 0x9d000008, 0x009d0000, 0x02009001, 0x2c8f00c8, 0x91509350, 0x92500234, 0x03083c23, 0x01340223, 0xc3880aae, 0x0237034b, 0x0032387c, 0xfdc838b4, 0x00070838, 0x2f230137, 0x02233335, 0x80231400, 0x0100003a, 0x02231500, 0x0100003a, 0x0137023a, 0x01370238, 0x05fd0415, 0x04000000 }; -u32 ai_20[] = { 0x9d000000, 0x107cfdc8, 0x0302381f, 0x00c70239, 0x032f079c, 0x00001000, 0x1354fd00, 0xba040213, 0x9c000020, 0x001354fd, 0x00be0502, 0x134dfd00, 0x3200c701, 0x01390207, 0x4dfd0032, 0x00c70101, 0x38020122, 0x05fd0001, 0x02036007, 0x01380204, 0x670f9a00, 0x00100001, 0x38020567, 0x109a0000, 0x20000138, 0x04000000 }; -u32 ai_26[] = { 0x02349736, 0x80973780, 0x97388097, 0x3980973b, 0x80973e80, 0x973f8002, 0x37039c00, 0x00010023, 0x5b02239a, 0x00000100, 0x02239c00, 0x00020023, 0x5b03239a, 0x00000200, 0x02239c00, 0x00040023, 0x5b04239a, 0x00000400, 0x02239c00, 0x00080023, 0x5b05239a, 0x00000800, 0x02230137, 0x04000000 }; -u32 ai_27[] = { 0x020003cf, 0x23010002, 0x23ae0203, 0x03700113, 0xb300012c, 0x1370023f, 0x70044002, 0x1357223e, 0x0103023e, 0xc38809b7, 0x01680034, 0x023fc388, 0x46b701c2, 0x00340240, 0xc38846b7, 0x01fe0034, 0x0234b9b5, 0x020703bb, 0x00192301, 0x070223f4, 0x00ffff02, 0x0403bb00, 0x0f230104, 0x0223c388, 0x0b020503, 0xbb000023, 0x01050223, 0xf6b6b802, 0x06030106, 0x04000000 }; -u32 ai_28[] = { 0x02030359, 0x01230103, 0x0223660a, 0x02040359, 0x05230104, 0x0223670a, 0x01030400 }; -u32 ai_21[] = { 0xd9fd00e8, 0x230223ae, 0x020303b4, 0x00003c23, 0x01030223, 0x0a006500, 0x08006d04, 0x10020403, 0xb4000070, 0x23010402, 0x23e0fd00, 0xe0fd0102, 0x0503b400, 0x00ea2301, 0x05022367, 0x0d020603, 0x680d0123, 0x01060223, 0xda020703, 0xdc230107, 0x02236d00, 0x23001302, 0x23d51200, 0x020000db, 0x020803dc, 0x23010802, 0x23b70002, 0xb5b9ae02, 0x0903bb00, 0x00230109, 0x0223b6a4, 0x11000200, 0x005f11ae, 0x020a03b4, 0x0000b423, 0x010a0223, 0xda020b03, 0xdc23010b, 0x02230213, 0xd2020103, 0x01010400 }; -u32 ai_22[] = { 0x0a006200, 0x00000104, 0x10ae0203, 0x03b40000, 0x3c230103, 0x02230a00, 0x620001ff, 0xff041002, 0x01030101, 0x04000000 }; -u32 ai_30[] = { 0x020303cf, 0x23010302, 0x2305f804, 0x17020103, 0x01010400 }; -u32 ai_29[] = { 0x023403eb, 0x3b5500e8, 0x23013402, 0x239a0000, 0x8000ecd7, 0x04b6b8da, 0x020303dc, 0x23010302, 0x23f12305, 0xfd000f02, 0x23ddeadf, 0x0ddf0e59, 0x02235903, 0x23591a23, 0x591b2359, 0x1c23591d, 0x23591823, 0x59192359, 0x04235905, 0x23590623, 0x59072359, 0x08235909, 0x23590a23, 0x590b2359, 0x0c23590d, 0x23590e23, 0x590f2359, 0x10235911, 0x23591223, 0x59132359, 0x16235914, 0x23591523, 0xe4050223, 0xed030303, 0xd50c0002, 0x000005f8, 0x0416db02, 0x0403dc23, 0x01040223, 0x05fd0001, 0x023b05fd, 0x00010400 }; -u32 ai_23[] = { 0x911e9314, 0x8d330234, 0x14002100, 0x00000200, 0x0346233a, 0x233b2332, 0x233c2301, 0x00022333, 0x35c83a35, 0x64231600, 0x01000003, 0x023a1a03, 0x022309ae, 0x02040333, 0x35fa23b4, 0x0000b423, 0x01040223, 0x08030303, 0x03022314, 0x00210000, 0x23022316, 0x00010000, 0x23022302, 0x03032f01, 0x01030201, 0x01340400 }; -u32 ai_24[] = { 0x020303d6, 0xfc7c0400, 0x23020401, 0x03022305, 0xfd000204 }; -u32 ai_25[] = { 0x020303d6, 0x00000400, 0x23020401, 0x03022305, 0xfd000204 }; -u32 ai_31[] = { 0x023403a0, 0x36001000, 0x00a03700, 0x100000a0, 0x38001000, 0x00a03900, 0x100000a0, 0x3a001000, 0x0003a03b, 0x00100000, 0xa03c0010, 0x0000a03d, 0x00100000, 0xa03e0010, 0x0000a03f, 0x00100000, 0x03023703, 0xf7022301, 0x370223c3, 0x880c9a00, 0x00400005, 0xfd000104 }; +u8 ai_0[] = { + guard_start_patrol(0x00) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x01) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_2[] = { + guard_start_patrol(0x02) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_3[] = { + guard_start_patrol(0x03) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_4[] = { + guard_start_patrol(0x04) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_5[] = { + guard_start_patrol(0x05) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_6[] = { + guard_start_patrol(0x06) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_7[] = { + guard_start_patrol(0x07) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_8[] = { + guard_start_patrol(0x08) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_9[] = { + guard_start_patrol(0x09) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_10[] = { + guard_start_patrol(0x0a) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_11[] = { + guard_start_patrol(0x0b) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_12[] = { + guard_start_patrol(0x0c) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_13[] = { + guard_start_patrol(0x0d) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_14[] = { + guard_start_patrol(0x0e) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_15[] = { + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x1f) + if_guard_has_stopped_moving(0x3c) + goto_first(0x00) + label(0x3c) + if_guard_shot_from_bond_missed(0x1f) + if_guard_see_another_guard_shot(0x1f) + if_guard_see_another_guard_die(0x20) + if_guard_sees_bond(0x17) + ai_sleep + if_guard_heard_bond(0x15) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x15) + if_guard_heard_bond_within_last_10_secs(0x15) + if_guard_and_bond_within_line_of_sight(0x16) + label(0x3d) + ai_sleep + if_guard_bitfield_is_set_on(0x80, 0x13) + if_guard_has_stopped_moving(0x03) + goto_first(0x00) + label(0x13) + if_guard_is_on_screen(0x23) + goto_first(0x00) + label(0x23) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x0400) + label(0x03) + if_guard_hits_greater_than(0x00, 0x20) + goto_first(0x00) + label(0x04) + goto_first(0x00) + label(0x15) + random_generate_seed + if_random_seed_greater_than(0x40, 0x18) + goto_first(0x00) + label(0x18) + guard_try_running_to_side(0x16) + goto_first(0x00) + label(0x16) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x17) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x17) + if_guard_distance_to_bond_less_than(0x0a00, 0x17) + goto_first(0x00) + label(0x17) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x1b) + if_guard_is_targeted_by_bond(0x1b) + goto_first(0x00) + label(0x1b) + if_guard_distance_to_bond_less_than(0x6400, 0x1f) + if_guard_hits_greater_than(0x00, 0x20) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x1104) + label(0x1f) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x1204) + label(0x20) + random_generate_seed + if_random_seed_greater_than(0x40, 0x24) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x1304) + label(0x24) + debug_log 'I', 'f', ' ', 'o', 'n', 'l', 'y', ' ', 'I', ' ', 'h', 'a', 'd', ' ', 'a', ' ', 'g', 'u', 'n', '!', '!', '!', '\n', '\0', + guard_try_throwing_grenade(0x25) + goto_first(0x00) + label(0x25) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x25) + label(0x01) + goto_first(0x00) + ai_list_end +}; +u8 ai_16[] = { + label(0x00) + ai_sleep + if_guard_has_stopped_moving(0x1c) + goto_first(0x00) + label(0x1c) + random_generate_seed + if_random_seed_greater_than(0x96, 0x1d) + random_generate_seed + if_random_seed_greater_than(0x00, 0x1e) + goto_next(0x01) + label(0x1d) + guard_try_sidestepping(0x01) + label(0x1e) + guard_try_running_to_side(0x01) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x03) + goto_first(0x01) + label(0x03) + if_guard_and_bond_within_line_of_sight(0x16) + jump_to_return_ai_list + label(0x16) + if_guard_counter_clockwise_direction_to_bond_less_than(0x6e, 0x17) + if_guard_counter_clockwise_direction_to_bond_greater_than(0x91, 0x17) + if_guard_distance_to_bond_less_than(0x0a00, 0x17) + jump_to_return_ai_list + label(0x17) + goto_first(0x1c) + ai_list_end +}; +u8 ai_17[] = { + label(0x00) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfd, 0x20) + if_guard_shot_from_bond_missed(0x20) + goto_next(0x1f) + label(0x1f) + if_guard_is_targeted_by_bond(0x21) + if_guard_distance_to_bond_greater_than(0xc800, 0x1a) + if_guard_and_bond_within_line_of_sight(0x21) + goto_next(0x1a) + label(0x21) + if_guard_hits_greater_than(0x01, 0x02) + guard_surrenders + goto_first(0x00) + label(0x1a) + goto_next(0x20) + label(0x20) + set_return_ai_list(0x1204) + jump_to_ai_list(0xfd, 0x1304) + label(0x01) + jump_to_return_ai_list + label(0x02) + jump_to_ai_list(0xfd, 0x1000) + ai_list_end +}; +u8 ai_18[] = { + chr_drop_all_concealed_items(0xfd) + label(0x00) + guard_runs_to_pad(0xd100) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x01) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x01) + if_guard_shot_from_bond_missed(0x1f) + goto_first(0x03) + label(0x1f) + debug_log '!', '\n', '\0', + guard_surrenders + label(0x23) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xdc, 0x23) + if_guard_see_another_guard_die(0x23) + if_guard_has_stopped_moving(0x23) + goto_first(0x23) + label(0x23) + debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0', + goto_first(0x00) + label(0x01) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x2d) + jump_to_return_ai_list + label(0x2d) + if_guard_and_bond_within_line_of_sight(0x04) + guard_remove_fade + jump_to_return_ai_list + label(0x04) + ai_sleep + jump_to_return_ai_list + ai_list_end +}; +u8 ai_19[] = { + guard_flags_set_on(0x00080000) + guard_flags_set_on(0x00020000) + guard_set_armour(0x2c01) + guard_set_health_total(0xc800) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_set_argh_rating(0x50) + label(0x34) + ai_sleep + guard_animation_stop + if_guard_and_bond_within_line_of_sight(0x23) + goto_first(0x34) + label(0x23) + text_print_top(0x0a88) + local_timer_reset_start + label(0x37) + ai_sleep + if_guard_distance_to_bond_less_than(0x3200, 0x38) + if_chr_health_less_than(0xfd, 0xc8, 0x38) + if_local_timer_greater_than(0x080700, 0x38) + if_guard_has_stopped_moving(0x23) + goto_first(0x37) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x80, 0x23) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x3a) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x3a) + goto_first(0x37) + label(0x3a) + goto_first(0x37) + label(0x38) + jump_to_ai_list(0xfd, 0x1504) + ai_list_end +}; +u8 ai_20[] = { + guard_flags_set_on(0x10000000) + if_chr_health_less_than(0xfd, 0xc8, 0x03) + label(0x38) + guard_sprints_to_pad(0xc700) + label(0x39) + ai_sleep + if_guard_has_stopped_moving(0x07) + if_objective_bitfield_is_set_on(0x00100000, 0x13) + if_chr_in_room_with_pad(0xfd, 0xba00, 0x04) + label(0x13) + if_objective_bitfield_is_set_on(0x00200000, 0x13) + if_chr_in_room_with_pad(0xfd, 0xbe00, 0x05) + label(0x13) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01) + goto_first(0x39) + label(0x07) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01) + goto_first(0x38) + label(0x01) + guard_remove_fade + jump_to_ai_list(0xfd, 0x0100) + label(0x03) + object_drop_from_chr(0x07) + goto_first(0x38) + label(0x04) + door_close(0x0f) + objective_bitfield_set_on(0x00100000) + goto_first(0x38) + label(0x05) + door_close(0x10) + objective_bitfield_set_on(0x00200000) + goto_first(0x38) + ai_list_end +}; +u8 ai_26[] = { + label(0x34) + chr_bitfield_set_on(0x36, 0x80) + chr_bitfield_set_on(0x37, 0x80) + chr_bitfield_set_on(0x38, 0x80) + chr_bitfield_set_on(0x39, 0x80) + chr_bitfield_set_on(0x3b, 0x80) + chr_bitfield_set_on(0x3e, 0x80) + chr_bitfield_set_on(0x3f, 0x80) + label(0x37) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x23) + if_object_not_destroyed(0x02, 0x23) + objective_bitfield_set_on(0x00010000) + label(0x23) + if_objective_bitfield_is_set_on(0x00020000, 0x23) + if_object_not_destroyed(0x03, 0x23) + objective_bitfield_set_on(0x00020000) + label(0x23) + if_objective_bitfield_is_set_on(0x00040000, 0x23) + if_object_not_destroyed(0x04, 0x23) + objective_bitfield_set_on(0x00040000) + label(0x23) + if_objective_bitfield_is_set_on(0x00080000, 0x23) + if_object_not_destroyed(0x05, 0x23) + objective_bitfield_set_on(0x00080000) + label(0x23) + goto_first(0x37) + ai_list_end +}; +u8 ai_27[] = { + label(0x00) + ai_sleep + if_camera_is_in_bond_swirl(0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_game_difficulty_less_than(0x01, 0x13) + if_local_timer_less_than(0x2c0100, 0x13) + if_game_difficulty_less_than(0x02, 0x3f) + if_game_difficulty_less_than(0x04, 0x40) + label(0x13) + if_item_is_stationary_within_level(0x22, 0x3e) + goto_first(0x03) + label(0x3e) + text_print_top(0x0988) + hud_countdown_set(0x6801) + goto_next(0x34) + label(0x3f) + text_print_top(0x4688) + hud_countdown_set(0xc201) + goto_next(0x34) + label(0x40) + text_print_top(0x4688) + hud_countdown_set(0xfe01) + goto_next(0x34) + label(0x34) + hud_countdown_start + hud_countdown_show + label(0x07) + ai_sleep + if_hud_countdown_less_than(0x1900, 0x23) + goto_first(0x07) + label(0x23) + music_xtrack_play(0x00, 0xff, 0xff) + label(0x04) + ai_sleep + if_hud_countdown_less_than(0x0f00, 0x23) + goto_first(0x04) + label(0x23) + text_print_top(0x0b88) + label(0x05) + ai_sleep + if_hud_countdown_less_than(0x0000, 0x23) + goto_first(0x05) + label(0x23) + trigger_explosions_around_bond + hud_countdown_hide + hud_countdown_stop + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_28[] = { + label(0x03) + ai_sleep + if_bond_has_item_equipped(0x01, 0x23) + goto_first(0x03) + label(0x23) + door_open(0x0a) + label(0x04) + ai_sleep + if_bond_has_item_equipped(0x05, 0x23) + goto_first(0x04) + label(0x23) + door_close(0x0a) + goto_first(0x03) + ai_list_end +}; +u8 ai_21[] = { + chr_try_teleporting_to_pad(0xfd, 0xe800, 0x23) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x23) + goto_first(0x03) + label(0x23) + guard_play_animation(0x6500, 0x0800, 0x6d00, 0x04, 0x10) + label(0x04) + ai_sleep + if_local_timer_greater_than(0x700000, 0x23) + goto_first(0x04) + label(0x23) + chr_remove_item_in_hand(0xfd, 0x00) + chr_remove_item_in_hand(0xfd, 0x01) + label(0x05) + ai_sleep + if_local_timer_greater_than(0xea0000, 0x23) + goto_first(0x05) + label(0x23) + door_close(0x0d) + label(0x06) + ai_sleep + if_door_state_equal(0x0d, 0x01, 0x23) + goto_first(0x06) + label(0x23) + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x07) + label(0x23) + if_objective_num_complete(0x00, 0x23) + goto_next(0x13) + label(0x23) + camera_switch(0x12, 0x0200, 0x0000) + screen_fade_from_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x08) + label(0x23) + hud_countdown_set(0x0200) + hud_countdown_show + hud_countdown_start + local_timer_reset_start + label(0x09) + ai_sleep + if_hud_countdown_less_than(0x0000, 0x23) + goto_first(0x09) + label(0x23) + hud_countdown_hide + object_flags_1_set_off(0x11, 0x00000200) + object_destroy(0x11) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x23) + goto_first(0x0a) + label(0x23) + screen_fade_to_black + label(0x0b) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x0b) + label(0x23) + label(0x13) + exit_level + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_22[] = { + guard_play_animation(0x6200, 0x0000, 0x0100, 0x04, 0x10) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x23) + goto_first(0x03) + label(0x23) + guard_play_animation(0x6200, 0x0100, 0xffff, 0x04, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_30[] = { + label(0x03) + ai_sleep + if_camera_is_in_bond_swirl(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xf8, 0x1704) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_29[] = { + label(0x34) + ai_sleep + if_bond_is_dead(0x3b) + if_bond_in_room_with_pad(0xe800, 0x23) + goto_first(0x34) + label(0x23) + objective_bitfield_set_on(0x00800000) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x04) + hud_countdown_hide + hud_countdown_stop + screen_fade_to_black + label(0x03) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x03) + label(0x23) + if_objective_all_completed(0x23) + jump_to_ai_list(0xfd, 0x0f00) + label(0x23) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + door_open_instant(0x0d) + door_open_instant(0x0e) + if_bond_has_item_equipped(0x02, 0x23) + if_bond_has_item_equipped(0x03, 0x23) + if_bond_has_item_equipped(0x1a, 0x23) + if_bond_has_item_equipped(0x1b, 0x23) + if_bond_has_item_equipped(0x1c, 0x23) + if_bond_has_item_equipped(0x1d, 0x23) + if_bond_has_item_equipped(0x18, 0x23) + if_bond_has_item_equipped(0x19, 0x23) + if_bond_has_item_equipped(0x04, 0x23) + if_bond_has_item_equipped(0x05, 0x23) + if_bond_has_item_equipped(0x06, 0x23) + if_bond_has_item_equipped(0x07, 0x23) + if_bond_has_item_equipped(0x08, 0x23) + if_bond_has_item_equipped(0x09, 0x23) + if_bond_has_item_equipped(0x0a, 0x23) + if_bond_has_item_equipped(0x0b, 0x23) + if_bond_has_item_equipped(0x0c, 0x23) + if_bond_has_item_equipped(0x0d, 0x23) + if_bond_has_item_equipped(0x0e, 0x23) + if_bond_has_item_equipped(0x0f, 0x23) + if_bond_has_item_equipped(0x10, 0x23) + if_bond_has_item_equipped(0x11, 0x23) + if_bond_has_item_equipped(0x12, 0x23) + if_bond_has_item_equipped(0x13, 0x23) + if_bond_has_item_equipped(0x16, 0x23) + if_bond_has_item_equipped(0x14, 0x23) + if_bond_has_item_equipped(0x15, 0x23) + bond_equip_item_cinema(0x05) + label(0x23) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x0c, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x1604) + screen_fade_from_black + label(0x04) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x04) + label(0x23) + jump_to_ai_list(0xfd, 0x0100) + label(0x3b) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_23[] = { + guard_set_speed_rating(0x1e) + guard_set_accuracy_rating(0x14) + guard_set_grenade_probability(0x33) + label(0x34) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x23) + if_guard_see_another_guard_shot(0x23) + if_guard_see_another_guard_die(0x23) + if_guard_sees_bond(0x23) + if_guard_and_bond_within_line_of_sight(0x23) + goto_first(0x00) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3a) + if_random_seed_greater_than(0x64, 0x23) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03) + label(0x3a) + guard_try_throwing_grenade(0x03) + label(0x23) + guard_kneel + local_timer_reset_start + label(0x04) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x23) + if_local_timer_greater_than(0xb40000, 0x23) + goto_first(0x04) + label(0x23) + guard_animation_stop + ai_sleep + ai_sleep + ai_sleep + ai_sleep + label(0x23) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23) + label(0x23) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x03) + label(0x01) + goto_first(0x34) + ai_list_end +}; +u8 ai_24[] = { + label(0x03) + ai_sleep + if_bond_y_pos_less_than(0x7cfc, 0x04) + goto_next(0x23) + label(0x04) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_25[] = { + label(0x03) + ai_sleep + if_bond_y_pos_less_than(0x0000, 0x04) + goto_next(0x23) + label(0x04) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_31[] = { + label(0x34) + ai_sleep + chr_flags_set_on(0x36, 0x00001000) + chr_flags_set_on(0x37, 0x00001000) + chr_flags_set_on(0x38, 0x00001000) + chr_flags_set_on(0x39, 0x00001000) + chr_flags_set_on(0x3a, 0x00001000) + ai_sleep + chr_flags_set_on(0x3b, 0x00001000) + chr_flags_set_on(0x3c, 0x00001000) + chr_flags_set_on(0x3d, 0x00001000) + chr_flags_set_on(0x3e, 0x00001000) + chr_flags_set_on(0x3f, 0x00001000) + ai_sleep + label(0x37) + ai_sleep + if_killed_civilians_greater_than(0x02, 0x23) + goto_first(0x37) + label(0x23) + text_print_top(0x0c88) + objective_bitfield_set_on(0x00400000) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/e/UsetupstatueZ.c b/assets/obseg/setup/e/UsetupstatueZ.c index 03e01a20..e0fa146a 100644 --- a/assets/obseg/setup/e/UsetupstatueZ.c +++ b/assets/obseg/setup/e/UsetupstatueZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1092,52 +1093,1470 @@ PathRecord patrolpaths[] = { }; -u32 ai_17[] = { 0x9d000008, 0x00020003, 0x3c2330fd, 0x06010002, 0x239a0008, 0x00001700, 0x01000023, 0x02230204, 0xaead6865, 0x6c6c6f0a, 0x00023303, 0x30fd064c, 0x00c80f4c, 0x00500e95, 0x01b1b400, 0x070812b4, 0x0005dc0d, 0xb40004b0, 0x0cb40003, 0x840bb400, 0x02580ab4, 0x00012c09, 0x01330209, 0xb4000168, 0x23c38c09, 0x02230133, 0x020ab400, 0x029423c3, 0x8c0a0223, 0x0133020b, 0xb40003c0, 0x23c38c0b, 0x02230133, 0x020cb400, 0x04ec23c3, 0x8c0c0223, 0x0133020d, 0xb4000618, 0x23c38c0d, 0x02230133, 0x020e9601, 0x13c38c0e, 0x0213b094, 0x01013302, 0x0fc38c0f, 0x9a001000, 0x009a0020, 0x00000001, 0x02120300, 0x27011202, 0x279a0000, 0x01009a00, 0x1000001e, 0x00160220, 0x034c012c, 0x012f234d, 0xfd000f00, 0x16230120, 0x02234efd, 0x000f0016, 0x134c012c, 0x01021301, 0x27020103, 0x22010102, 0x06c38c30, 0x9a002000, 0x00020703, 0x01070400 }; -u32 ai_36[] = { 0x0238039c, 0x00000100, 0x00013802, 0x00035200, 0x50003b23, 0x01000223, 0xf323bd08, 0xff003604, 0x13000000, 0x0023ad54, 0x20666169, 0x6c0a0001, 0x0002239a, 0x00040000, 0xad542069, 0x6e69740a, 0x0003f323, 0xbd04ff00, 0x36040200, 0x00000123, 0x0223f323, 0xbd04ff00, 0x36040300, 0x00000123, 0x0223f323, 0xbd04ff00, 0x36040400, 0x00000123, 0x0223f323, 0xbd04ff00, 0x36040500, 0x00000123, 0x02230203, 0x0353008c, 0x003b059c, 0x00004000, 0x04010302, 0x04035300, 0x8c003b05, 0x59011300, 0x05021301, 0x0402059a, 0x00002000, 0x02010301, 0x01040000 }; -u32 ai_37[] = { 0x0200039c, 0x00008000, 0x23010002, 0x23ae0203, 0x03b40002, 0x58230103, 0x0223c38c, 0x1f650000, 0x189a8000, 0x0000f323, 0xbd10ff00, 0x06041600, 0x00000023, 0x02239a08, 0x000000b7, 0x00b4b9b5, 0x0205039c, 0x00000200, 0x1352012c, 0x00180802, 0x139c1000, 0x00001352, 0x00320018, 0x070213bb, 0x00002301, 0x0502239a, 0x40000000, 0x0303039c, 0x20000000, 0x13180008, 0x060213c3, 0x8c209a00, 0x800000c9, 0x00b6b802, 0x06030106, 0x0207039a, 0x10000000, 0xc38c32b7, 0x000f0105, 0x0208039a, 0x00000200, 0x01050400 }; -u32 ai_1[] = { 0x8e02ad68, 0x310a00ab, 0x000205fd, 0x04060400 }; -u32 ai_2[] = { 0x8e03ad68, 0x320a00ab, 0x000305fd, 0x04060400 }; -u32 ai_3[] = { 0x8e04ad68, 0x330a00ab, 0x000405fd, 0x04060400 }; -u32 ai_4[] = { 0x8e05ad68, 0x340a00ab, 0x000505fd, 0x04060400 }; -u32 ai_5[] = { 0x02238f00, 0x28900014, 0x8dbf3335, 0x8013bf00, 0xcf100000, 0x00002302, 0x13bf00cf, 0x10100000, 0x00230223, 0x00010201, 0x9c000020, 0x00039c00, 0x00800003, 0x05fd0408, 0x020305fd, 0x04090400 }; -u32 ai_7[] = { 0x1e232802, 0x03039c00, 0x00200034, 0x46342f23, 0x01030223, 0x14002100, 0x00230223, 0x0204039c, 0x00002000, 0x34463401, 0x0402349a, 0x00002000, 0x16000100, 0x00230223, 0x05fd0409, 0x04000000 }; -u32 ai_8[] = { 0x02353335, 0x503f2803, 0x023f2a03, 0x0203034c, 0x0096133c, 0x3602132f, 0x37010302, 0x363c2300, 0x01023703, 0x01350223, 0x02346d04, 0x0233350a, 0x231a0102, 0x23353223, 0x0e010223, 0x353c2313, 0x01022335, 0x50231301, 0x02233564, 0x23110102, 0x23359623, 0x12010223, 0x35c82314, 0x00010000, 0x01022315, 0x00010000, 0x01020103, 0x2f230101, 0x02233c23, 0x00030203, 0x03013502, 0x23030134, 0x020205fd, 0x04100400 }; -u32 ai_9[] = { 0x02353335, 0x503f2803, 0x023f2a03, 0xae020303, 0x9c000400, 0x00029c00, 0x10000013, 0x9c000800, 0x00020213, 0x032f374c, 0x0096133c, 0x360213b3, 0x00025813, 0x01350213, 0x2f370103, 0x02363c23, 0x00010237, 0x03013502, 0x2302349c, 0x00040000, 0x029c0010, 0x0000139c, 0x00080000, 0x02021333, 0x350a231a, 0x01022335, 0x32230e01, 0x0223353c, 0x23130102, 0x23355023, 0x13010223, 0x35642311, 0x01022335, 0x96231201, 0x022335c8, 0x23140001, 0x00000102, 0x23150001, 0x00000102, 0x01039d00, 0x4000002f, 0x23010102, 0x233c2300, 0x03020303, 0x01350223, 0x03013402, 0x0205fd04, 0x0f040000 }; -u32 ai_18[] = { 0x9d000008, 0x001e0001, 0x0203039c, 0x00002000, 0x0646062f, 0x23010302, 0x23170001, 0x00002302, 0x23c38c12, 0xae020403, 0x9c000020, 0x00064606, 0xb4000078, 0x23010402, 0x2359013d, 0xc38c13ae, 0x0205039c, 0x00010000, 0x13b40002, 0x58070213, 0xb40004b0, 0x069c0000, 0x20000646, 0x06590123, 0x01050223, 0x9a000040, 0x00c38c14, 0x0001023d, 0x9a000040, 0x00c38c33, 0x00010201, 0x0305fd04, 0x14010102, 0x069a0000, 0x2000c38c, 0x2205fd04, 0x150207c3, 0x8c219a00, 0x01000001, 0x05040000 }; -u32 ai_19[] = { 0xae023303, 0x9c000020, 0x00014601, 0xb4000a8c, 0x11b40009, 0x6010b400, 0x08340fb4, 0x0007080e, 0xb40005dc, 0x0db40004, 0xb00cb400, 0x03840bb4, 0x0002580a, 0xb400012c, 0x09013302, 0x09b40001, 0x6823c38c, 0x16022301, 0x33020a9a, 0x00000400, 0xb4000294, 0x23c38c17, 0x02230133, 0x020bb400, 0x03c023c3, 0x8c180223, 0x0133020c, 0xb40004ec, 0x23c38c19, 0x02230133, 0x020db400, 0x061823c3, 0x8c1a0223, 0x0133020e, 0xb4000744, 0x23c38c1b, 0x02230133, 0x020fb400, 0x087023c3, 0x8c1c0223, 0x01330210, 0xb400099c, 0x23c38c1d, 0x02230133, 0x0211b400, 0x0ac823c3, 0x8c1e0223, 0x00120133, 0x021205fd, 0x04150201, 0x9a000020, 0x009c0000, 0x040013c3, 0x8c220023, 0x0213c38c, 0x15002302, 0x2305fd04, 0x15040000 }; -u32 ai_20[] = { 0x9d000000, 0x10ab0032, 0x9a000080, 0x009c0000, 0x0400139a, 0x00020000, 0x02130238, 0x9c000020, 0x00131c23, 0x28000302, 0x131f2328, 0x0203034d, 0xfd001e23, 0x282d2f23, 0x01030223, 0x9a000020, 0x00013802, 0x2d3c2322, 0x02010301, 0x0102239a, 0x00002000, 0xab008b01, 0x38040000 }; -u32 ai_16[] = { 0xcd026c00, 0x000a0002, 0xffff0002, 0x06006500, 0x00160200, 0x03010004 }; -u32 ai_38[] = { 0x0230ae9c, 0x00002000, 0x039c0000, 0x8000039c, 0x00040000, 0x019c0010, 0x0000139c, 0x00080000, 0x010213ad, 0x210a0002, 0x23033106, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00c4, 0x040b0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff008104, 0x0b000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x0024040b, 0x00000000, 0x130223f3, 0x13bd03ff, 0x0000040b, 0x00000000, 0x13021302, 0x23033107, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00a3, 0x040c0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff005904, 0x0c000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x003a040c, 0x00000000, 0x130223f3, 0x13bd03ff, 0x0034040c, 0x00000000, 0x13021302, 0x23033108, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00a2, 0x040d0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff00cb04, 0x0d000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x0036040d, 0x00000000, 0x130223f3, 0x13bd03ff, 0x00c0040d, 0x00000000, 0x13021302, 0x23033109, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00d6, 0x040e0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff009804, 0x0e000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x006b040e, 0x00000000, 0x130223f3, 0x13bd03ff, 0x002a040e, 0x00000000, 0x13021300, 0x0102036d, 0x04010223, 0x03310223, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00c404, 0x02000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00810402, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x24040200, 0x00000013, 0x0223f313, 0xbd04ff00, 0x00040200, 0x00000013, 0x02130223, 0x03310323, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00a304, 0x03000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00590403, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x3a040300, 0x00000013, 0x0223f313, 0xbd04ff00, 0x34040300, 0x00000013, 0x02130223, 0x03310423, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00a204, 0x04000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00cb0404, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x36040400, 0x00000013, 0x0223f313, 0xbd04ff00, 0xc0040400, 0x00000013, 0x02130223, 0x03310523, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00d604, 0x05000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00980405, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x6b040500, 0x00000013, 0x0223f313, 0xbd04ff00, 0x2a040500, 0x00000013, 0x02130001, 0x020103b4, 0x00007823, 0x01010223, 0x01300400 }; -u32 ai_10[] = { 0x8e06ad72, 0x310a0005, 0xfd040704 }; -u32 ai_11[] = { 0x8e07ad72, 0x320a0005, 0xfd040704 }; -u32 ai_12[] = { 0x8e08ad72, 0x330a0005, 0xfd040704 }; -u32 ai_13[] = { 0x8e09ad72, 0x340a0005, 0xfd040704 }; -u32 ai_6[] = { 0x02238f00, 0x288dbf33, 0x358013bf, 0x00b80800, 0x00000023, 0x0213bf00, 0xb8081000, 0x00002302, 0x23c000d9, 0x00000000, 0x01000102, 0x0105fd04, 0x0a040000 }; -u32 ai_14[] = { 0x02381f00, 0xcd020303, 0x2f230103, 0x02234dfd, 0x001e00cd, 0x23013802, 0x2322ad67, 0x6f6e650a, 0x00020103, 0x01010400 }; -u32 ai_15[] = { 0x02381f00, 0x23020303, 0x2f230103, 0x02234dfd, 0x001e0023, 0x23013802, 0x2322ad67, 0x6f6e650a, 0x00020103, 0x01010400 }; -u32 ai_21[] = { 0x9d000008, 0x0002388e, 0x00020003, 0x0a001e00, 0x53005404, 0x104b001e, 0x23010002, 0x23c38c26, 0xae020303, 0xb4000078, 0x23010302, 0x239a2000, 0x00000a00, 0xa8003c00, 0x780010c3, 0x8c230201, 0x032f2301, 0x010223c3, 0x8c2405fd, 0x04170400 }; -u32 ai_22[] = { 0x0239039c, 0x00800000, 0x23001302, 0x23960123, 0x9a000008, 0x00ae9401, 0x00130223, 0xb300012c, 0x13c38c25, 0x05fd0418, 0x02134b00, 0x32232800, 0x02232900, 0x01390200, 0x039c0080, 0x0000014b, 0x0014032f, 0x01010002, 0x3a013902, 0x03080204, 0x039c0080, 0x0000014b, 0x00083b4c, 0x00280101, 0x04023b47, 0x403c48c0, 0x3c000502, 0x3c023d00, 0x05020503, 0x9c008000, 0x00012f06, 0x01050206, 0x01030201, 0x01390400 }; -u32 ai_23[] = { 0xae020503, 0xb4000078, 0x38010502, 0x381f0009, 0x0203036d, 0x043d0013, 0x023dd900, 0x00091302, 0x132f234d, 0xfd002800, 0x09230103, 0x02234dfd, 0x00280009, 0x23013802, 0x239a0100, 0x00001700, 0x01000000, 0x0200039c, 0x02000000, 0x23010002, 0x23210204, 0x03010404 }; -u32 ai_39[] = { 0x0203039c, 0x08000000, 0x00010302, 0x00033100, 0x239c0400, 0x00003d01, 0x00023d03, 0x03031800, 0x08080223, 0x9a004000, 0x00020103, 0x01010400 }; -u32 ai_40[] = { 0x0200039c, 0x01000000, 0x23010002, 0x236d0423, 0x01000223, 0x02030353, 0x01f40009, 0x23010302, 0x23f323bd, 0x1345000c, 0x041d0000, 0x001023ad, 0x4f206661, 0x696c0a00, 0x01030223, 0x9a020000, 0x00ad4f20, 0x696e6974, 0x0a0003f3, 0x23bd13ff, 0x000a041a, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000b041b, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000d041c, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000e041c, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000f041c, 0x00000010, 0x23022302, 0x04030104, 0x04000000 }; -u32 ai_28[] = { 0x9d000008, 0x008e0abf, 0x00cd0600, 0x00000023, 0x02231400, 0x21000000, 0x0200039c, 0x04000000, 0x23462330, 0xfd234b00, 0x96230100, 0x0223ae00, 0x33023303, 0x9c040000, 0x00014601, 0x30fd014c, 0x00fa0f95, 0x01b1b400, 0x096010b4, 0x0007080e, 0xb40005dc, 0x0db40004, 0xb00cb400, 0x03840bb4, 0x0002580a, 0xb400012c, 0x09013302, 0x09b40001, 0x6823c38c, 0x28022301, 0x33020ab4, 0x00029423, 0xc38c2902, 0x23013302, 0x0bb40003, 0xc023c38c, 0x2a022301, 0x33020cb4, 0x0004ec23, 0xc38c2b02, 0x23013302, 0x0db40006, 0x1823c38c, 0x2c022301, 0x33020eb4, 0x00074423, 0xc38c2d02, 0x23013302, 0x10b40009, 0x9c23c38c, 0x2f022301, 0x33020f96, 0x0113c38c, 0x2e0213b0, 0x94010133, 0x02019a04, 0x00000016, 0x00010000, 0x03020303, 0x2f230103, 0x022305fd, 0x041e0400 }; -u32 ai_24[] = { 0x8dbf3335, 0x8013bf00, 0xb8080000, 0x00002302, 0x13bf00b8, 0x08100000, 0x00230223, 0xc000d600, 0x00000023, 0x02231400, 0x24000000, 0x0200039c, 0x04000000, 0x23462330, 0xfd230100, 0x02239a04, 0x00000016, 0x00040000, 0x03020303, 0x2f230103, 0x022305fd, 0x041e0400 }; -u32 ai_25[] = { 0x8e0b05fd, 0x04190400 }; -u32 ai_26[] = { 0x8e0c05fd, 0x04190400 }; -u32 ai_27[] = { 0x8dbf3335, 0x8013bf00, 0xb8080000, 0x00002302, 0x13bf00b8, 0x08100000, 0x00230223, 0xc000d600, 0x00000023, 0x02231500, 0x21000000, 0x0200039c, 0x04000000, 0x23462330, 0xfd230100, 0x02239a04, 0x00000016, 0x00010000, 0x03020303, 0x2f230103, 0x022305fd, 0x041e0400 }; -u32 ai_29[] = { 0x02381500, 0x21000023, 0x02230316, 0x00010000, 0x23022302, 0x03032f23, 0x01030223, 0x01380400 }; -u32 ai_41[] = { 0x0200039c, 0x00800000, 0x23010002, 0x23a30100, 0x04000033, 0x351e2365, 0x0100cd00, 0x03022335, 0x3c236501, 0x00d60003, 0x0223355a, 0x23650100, 0xd0000302, 0x23357823, 0x650100c8, 0x00030223, 0x35962365, 0x0100cb00, 0x03022335, 0xb4236501, 0x00c40003, 0x022335d2, 0x23650100, 0xd5000302, 0x2335f023, 0x650100c2, 0x00030223, 0x650100c0, 0x0203036d, 0x04045500, 0xb3230103, 0x0223c38c, 0x27010302, 0x04030104, 0x04000000 }; -u32 ai_0[] = { 0xad627272, 0x6d206272, 0x726d0a00, 0x02000301, 0x00040000 }; -u32 ai_42[] = { 0x023803eb, 0x3e550016, 0x23013802, 0x23ecd700, 0xda020303, 0xdc230103, 0x0223310a, 0x299c0400, 0x00002905, 0xfd042002, 0x29d205fd, 0x0001023e, 0x05fd0001, 0x04000000 }; -u32 ai_31[] = { 0xf12305fd, 0x000f0223, 0xddeaed03, 0x0303d502, 0x00010000, 0xdbf40000, 0xffdf03df, 0x0405f804, 0x21a10a00, 0x00040005, 0x0a0422a1, 0x0b000004, 0x00050b04, 0x23a10c00, 0x00040005, 0x0c042402, 0x01030101, 0x04000000 }; -u32 ai_32[] = { 0xd9fd0010, 0x2302230a, 0x006bffff, 0xffff0610, 0xae020303, 0xb400012c, 0x23010302, 0x23da0204, 0x03dc2301, 0x040223d2, 0x02010301, 0x01040000 }; -u32 ai_33[] = { 0xd9fd0011, 0x2302230a, 0x0052ffff, 0xffff0610, 0x02010301, 0x01040000 }; -u32 ai_34[] = { 0xd9fd0014, 0x2302230a, 0x0028ffff, 0xffff0610, 0x02010301, 0x01040000 }; -u32 ai_35[] = { 0xd9fd0013, 0x23022315, 0x00210000, 0x230223ae, 0x020303b4, 0x00010e23, 0x01030223, 0x08022302, 0x01030101, 0x04000000 }; -u32 ai_30[] = { 0xae020303, 0xb4000000, 0x23010302, 0x230a0061, 0xffff00af, 0x04100201, 0x03010104 }; -u32 ai_43[] = { 0x020303cf, 0x23010302, 0x2305f804, 0x1f020103, 0x01010400 }; -u32 ai_44[] = { 0x0200039c, 0x40000000, 0x23010002, 0x23ae0204, 0x03ad4932, 0x0a00b400, 0x025810b4, 0x0001680f, 0xb400012c, 0x0eb40000, 0xb40db400, 0x00780cb4, 0x00003c0b, 0xb4000000, 0x0a010402, 0x0aad5431, 0x0a00a40b, 0x00020000, 0x5f0ba40c, 0x00020000, 0x5f0c0104, 0x020ba400, 0x00020000, 0x5f00a40d, 0x00020000, 0x5f0da40e, 0x00020000, 0x5f0e0104, 0x020ca40f, 0x00020000, 0x5f0fa410, 0x00020000, 0x5f100104, 0x020d0104, 0x020e0104, 0x020f0104, 0x0210ad43, 0x4c0a0005, 0xfd000104 }; -u32 ai_45[] = { 0xa0010010, 0x00000302, 0x3303f700, 0x23013302, 0x239a0020, 0x000005fd, 0x00010400 }; +u8 ai_17[] = { + guard_flags_set_on(0x00080000) + label(0x00) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x23) + if_chr_dying_or_dead(0xfd, 0x06) + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000800) + guard_try_facing_target(0x0100, 0x0000, 0x23) + label(0x23) + label(0x04) + local_timer_reset_start + debug_log 'h', 'e', 'l', 'l', 'o', '\n', '\0', + label(0x33) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x06) + if_guard_distance_to_bond_greater_than(0xc800, 0x0f) + if_guard_distance_to_bond_greater_than(0x5000, 0x0e) + guard_bitfield_set_off(0x01) + local_timer_start + if_local_timer_greater_than(0x080700, 0x12) + if_local_timer_greater_than(0xdc0500, 0x0d) + if_local_timer_greater_than(0xb00400, 0x0c) + if_local_timer_greater_than(0x840300, 0x0b) + if_local_timer_greater_than(0x580200, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x09) + goto_first(0x33) + label(0x09) + if_local_timer_greater_than(0x680100, 0x23) + text_print_top(0x098c) + label(0x23) + goto_first(0x33) + label(0x0a) + if_local_timer_greater_than(0x940200, 0x23) + text_print_top(0x0a8c) + label(0x23) + goto_first(0x33) + label(0x0b) + if_local_timer_greater_than(0xc00300, 0x23) + text_print_top(0x0b8c) + label(0x23) + goto_first(0x33) + label(0x0c) + if_local_timer_greater_than(0xec0400, 0x23) + text_print_top(0x0c8c) + label(0x23) + goto_first(0x33) + label(0x0d) + if_local_timer_greater_than(0x180600, 0x23) + text_print_top(0x0d8c) + label(0x23) + goto_first(0x33) + label(0x0e) + if_guard_bitfield_is_set_on(0x01, 0x13) + text_print_top(0x0e8c) + label(0x13) + local_timer_stop + guard_bitfield_set_on(0x01) + goto_first(0x33) + label(0x0f) + text_print_top(0x0f8c) + objective_bitfield_set_on(0x00001000) + objective_bitfield_set_on(0x00002000) + goto_next(0x01) + label(0x12) + ai_sleep + goto_next(0x27) + goto_first(0x12) + label(0x27) + objective_bitfield_set_on(0x00010000) + objective_bitfield_set_on(0x00001000) + guard_walks_to_pad(0x1600) + label(0x20) + ai_sleep + if_guard_distance_to_bond_greater_than(0x2c01, 0x01) + if_guard_has_stopped_moving(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x1600, 0x23) + goto_first(0x20) + label(0x23) + if_chr_distance_to_pad_greater_than(0xfd, 0x0f00, 0x1600, 0x13) + if_guard_distance_to_bond_greater_than(0x2c01, 0x01) + label(0x13) + goto_first(0x27) + label(0x01) + ai_sleep + guard_remove_fade + goto_first(0x01) + label(0x06) + text_print_top(0x308c) + objective_bitfield_set_on(0x00002000) + label(0x07) + ai_sleep + goto_first(0x07) + ai_list_end +}; +u8 ai_36[] = { + label(0x38) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x00) + goto_first(0x38) + label(0x00) + ai_sleep + if_bond_distance_to_pad_less_than(0x5000, 0x3b00, 0x23) + goto_first(0x00) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x08, 0xff, 0x3600, 0x1304, 0x00000000, 0x23) + debug_log 'T', ' ', 'f', 'a', 'i', 'l', '\n', '\0', + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000400) + debug_log 'T', ' ', 'i', 'n', 'i', 't', '\n', '\0', + ai_sleep + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0204, 0x01000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0304, 0x01000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0404, 0x01000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0504, 0x01000000, 0x23) + label(0x23) + label(0x03) + ai_sleep + if_bond_distance_to_pad_greater_than(0x8c00, 0x3b00, 0x05) + if_objective_bitfield_is_set_on(0x00400000, 0x04) + goto_first(0x03) + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x8c00, 0x3b00, 0x05) + if_bond_has_item_equipped(0x01, 0x13) + goto_next(0x05) + label(0x13) + goto_first(0x04) + label(0x05) + objective_bitfield_set_on(0x00200000) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_37[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00800000, 0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x580200, 0x23) + goto_first(0x03) + label(0x23) + text_print_top(0x1f8c) + object_move_to_pad(0x00, 0x1800) + objective_bitfield_set_on(0x00000080) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x10, 0xff, 0x0600, 0x1604, 0x00000000, 0x23) + label(0x23) + objective_bitfield_set_on(0x00000008) + hud_countdown_set(0xb400) + hud_countdown_start + hud_countdown_show + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x13) + if_bond_distance_to_pad_less_than(0x2c01, 0x1800, 0x08) + label(0x13) + if_objective_bitfield_is_set_on(0x00000010, 0x13) + if_bond_distance_to_pad_less_than(0x3200, 0x1800, 0x07) + label(0x13) + if_hud_countdown_less_than(0x0000, 0x23) + goto_first(0x05) + label(0x23) + objective_bitfield_set_on(0x00000040) + ai_sleep + ai_sleep + ai_sleep + if_objective_bitfield_is_set_on(0x00000020, 0x13) + chr_hit_body_part_with_item_damage(0x00, 0x08, 0x06) + label(0x13) + text_print_top(0x208c) + objective_bitfield_set_on(0x00008000) + sfx_stop_channel(0x00) + hud_countdown_hide + hud_countdown_stop + label(0x06) + ai_sleep + goto_first(0x06) + label(0x07) + ai_sleep + objective_bitfield_set_on(0x00000010) + text_print_top(0x328c) + hud_countdown_set(0x0f00) + goto_first(0x05) + label(0x08) + ai_sleep + objective_bitfield_set_on(0x00020000) + goto_first(0x05) + ai_list_end +}; +u8 ai_1[] = { + guard_set_chr_num(0x02) + debug_log 'h', '1', '\n', '\0', + guard_set_pad_preset(0x0200) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_2[] = { + guard_set_chr_num(0x03) + debug_log 'h', '2', '\n', '\0', + guard_set_pad_preset(0x0300) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_3[] = { + guard_set_chr_num(0x04) + debug_log 'h', '3', '\n', '\0', + guard_set_pad_preset(0x0400) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_4[] = { + guard_set_chr_num(0x05) + debug_log 'h', '4', '\n', '\0', + guard_set_pad_preset(0x0500) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_5[] = { + label(0x23) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xcf00, 0x10, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xcf00, 0x10, 0x00000010, 0x23) + label(0x23) + goto_next(0x01) + label(0x01) + if_objective_bitfield_is_set_on(0x00200000, 0x03) + if_objective_bitfield_is_set_on(0x00800000, 0x03) + jump_to_ai_list(0xfd, 0x0804) + label(0x03) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_7[] = { + guard_walks_to_pad(0x2823) + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x34) + if_guard_shot_from_bond_missed(0x34) + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x23) + label(0x23) + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x34) + if_guard_shot_from_bond_missed(0x34) + goto_first(0x04) + label(0x34) + objective_bitfield_set_on(0x00200000) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23) + label(0x23) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_8[] = { + label(0x35) + random_generate_seed + if_random_seed_greater_than(0x50, 0x3f) + guard_try_running_to_bond_position(0x03) + label(0x3f) + guard_try_sprinting_to_bond_position(0x03) + label(0x03) + ai_sleep + if_guard_distance_to_bond_greater_than(0x9600, 0x13) + if_guard_and_bond_within_line_of_sight(0x36) + label(0x13) + if_guard_has_stopped_moving(0x37) + goto_first(0x03) + label(0x36) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x01) + label(0x37) + ai_sleep + goto_first(0x35) + label(0x23) + label(0x34) + if_objective_num_complete(0x04, 0x02) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x23) + guard_try_throwing_grenade(0x01) + label(0x23) + if_random_seed_greater_than(0x32, 0x23) + guard_try_sidestepping(0x01) + label(0x23) + if_random_seed_greater_than(0x3c, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x50, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x64, 0x23) + guard_try_firing_walk(0x01) + label(0x23) + if_random_seed_greater_than(0x96, 0x23) + guard_try_firing_run(0x01) + label(0x23) + if_random_seed_greater_than(0xc8, 0x23) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x01) + label(0x23) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x03) + label(0x03) + ai_sleep + goto_first(0x35) + label(0x23) + ai_sleep + goto_first(0x34) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_9[] = { + label(0x35) + random_generate_seed + if_random_seed_greater_than(0x50, 0x3f) + guard_try_running_to_bond_position(0x03) + label(0x3f) + guard_try_sprinting_to_bond_position(0x03) + local_timer_reset_start + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x02) + if_objective_bitfield_is_set_on(0x00001000, 0x13) + if_objective_bitfield_is_set_on(0x00000800, 0x02) + label(0x13) + ai_sleep + if_guard_has_stopped_moving(0x37) + if_guard_distance_to_bond_greater_than(0x9600, 0x13) + if_guard_and_bond_within_line_of_sight(0x36) + label(0x13) + if_local_timer_less_than(0x580200, 0x13) + goto_first(0x35) + label(0x13) + if_guard_has_stopped_moving(0x37) + goto_first(0x03) + label(0x36) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x01) + label(0x37) + ai_sleep + goto_first(0x35) + label(0x23) + label(0x34) + if_objective_bitfield_is_set_on(0x00000400, 0x02) + if_objective_bitfield_is_set_on(0x00001000, 0x13) + if_objective_bitfield_is_set_on(0x00000800, 0x02) + label(0x13) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x23) + guard_try_throwing_grenade(0x01) + label(0x23) + if_random_seed_greater_than(0x32, 0x23) + guard_try_sidestepping(0x01) + label(0x23) + if_random_seed_greater_than(0x3c, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x50, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x64, 0x23) + guard_try_firing_walk(0x01) + label(0x23) + if_random_seed_greater_than(0x96, 0x23) + guard_try_firing_run(0x01) + label(0x23) + if_random_seed_greater_than(0xc8, 0x23) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + guard_flags_set_on(0x00004000) + if_guard_has_stopped_moving(0x23) + goto_first(0x01) + label(0x23) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x03) + label(0x03) + ai_sleep + goto_first(0x35) + label(0x23) + ai_sleep + goto_first(0x34) + label(0x02) + jump_to_ai_list(0xfd, 0x0f04) + ai_list_end +}; +u8 ai_18[] = { + guard_flags_set_on(0x00080000) + guard_walks_to_pad(0x0100) + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x06) + if_guard_shot_from_bond_missed(0x06) + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + guard_try_facing_target(0x0100, 0x0000, 0x23) + label(0x23) + text_print_top(0x128c) + local_timer_reset_start + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x06) + if_guard_shot_from_bond_missed(0x06) + if_local_timer_greater_than(0x780000, 0x23) + goto_first(0x04) + label(0x23) + if_bond_has_item_equipped(0x01, 0x3d) + text_print_top(0x138c) + local_timer_reset_start + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00000100, 0x13) + if_local_timer_greater_than(0x580200, 0x07) + label(0x13) + if_local_timer_greater_than(0xb00400, 0x06) + if_objective_bitfield_is_set_on(0x00200000, 0x06) + if_guard_shot_from_bond_missed(0x06) + if_bond_has_item_equipped(0x01, 0x23) + goto_first(0x05) + label(0x23) + objective_bitfield_set_on(0x00400000) + text_print_top(0x148c) + goto_next(0x01) + label(0x3d) + objective_bitfield_set_on(0x00400000) + text_print_top(0x338c) + goto_next(0x01) + label(0x01) + ai_sleep + jump_to_ai_list(0xfd, 0x1404) + goto_first(0x01) + label(0x06) + objective_bitfield_set_on(0x00200000) + text_print_top(0x228c) + jump_to_ai_list(0xfd, 0x1504) + label(0x07) + text_print_top(0x218c) + objective_bitfield_set_on(0x00000100) + goto_first(0x05) + ai_list_end +}; +u8 ai_19[] = { + local_timer_reset_start + label(0x33) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x01) + if_guard_shot_from_bond_missed(0x01) + if_local_timer_greater_than(0x8c0a00, 0x11) + if_local_timer_greater_than(0x600900, 0x10) + if_local_timer_greater_than(0x340800, 0x0f) + if_local_timer_greater_than(0x080700, 0x0e) + if_local_timer_greater_than(0xdc0500, 0x0d) + if_local_timer_greater_than(0xb00400, 0x0c) + if_local_timer_greater_than(0x840300, 0x0b) + if_local_timer_greater_than(0x580200, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x09) + goto_first(0x33) + label(0x09) + if_local_timer_greater_than(0x680100, 0x23) + text_print_top(0x168c) + label(0x23) + goto_first(0x33) + label(0x0a) + objective_bitfield_set_on(0x00040000) + if_local_timer_greater_than(0x940200, 0x23) + text_print_top(0x178c) + label(0x23) + goto_first(0x33) + label(0x0b) + if_local_timer_greater_than(0xc00300, 0x23) + text_print_top(0x188c) + label(0x23) + goto_first(0x33) + label(0x0c) + if_local_timer_greater_than(0xec0400, 0x23) + text_print_top(0x198c) + label(0x23) + goto_first(0x33) + label(0x0d) + if_local_timer_greater_than(0x180600, 0x23) + text_print_top(0x1a8c) + label(0x23) + goto_first(0x33) + label(0x0e) + if_local_timer_greater_than(0x440700, 0x23) + text_print_top(0x1b8c) + label(0x23) + goto_first(0x33) + label(0x0f) + if_local_timer_greater_than(0x700800, 0x23) + text_print_top(0x1c8c) + label(0x23) + goto_first(0x33) + label(0x10) + if_local_timer_greater_than(0x9c0900, 0x23) + text_print_top(0x1d8c) + label(0x23) + goto_first(0x33) + label(0x11) + if_local_timer_greater_than(0xc80a00, 0x23) + text_print_top(0x1e8c) + label(0x23) + goto_next(0x12) + goto_first(0x33) + label(0x12) + jump_to_ai_list(0xfd, 0x1504) + label(0x01) + objective_bitfield_set_on(0x00200000) + if_objective_bitfield_is_set_on(0x00040000, 0x13) + text_print_top(0x228c) + goto_next(0x23) + label(0x13) + text_print_top(0x158c) + goto_next(0x23) + label(0x23) + jump_to_ai_list(0xfd, 0x1504) + ai_list_end +}; +u8 ai_20[] = { + guard_flags_set_on(0x10000000) + guard_set_pad_preset(0x3200) + objective_bitfield_set_on(0x00800000) + if_objective_bitfield_is_set_on(0x00040000, 0x13) + objective_bitfield_set_on(0x00000200) + label(0x13) + label(0x38) + if_objective_bitfield_is_set_on(0x00200000, 0x13) + guard_runs_to_pad(0x2823) + goto_next(0x03) + label(0x13) + guard_sprints_to_pad(0x2823) + label(0x03) + ai_sleep + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0x2823, 0x2d) + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + objective_bitfield_set_on(0x00200000) + goto_first(0x38) + label(0x2d) + if_guard_and_bond_within_line_of_sight(0x23) + guard_remove_fade + label(0x01) + ai_sleep + goto_first(0x01) + label(0x23) + objective_bitfield_set_on(0x00200000) + guard_set_pad_preset(0x8b00) + goto_first(0x38) + ai_list_end +}; +u8 ai_16[] = { + aircraft_rotor_speed(0x6c02, 0x0000) + guard_play_animation(0x0200, 0xffff, 0x0200, 0x06, 0x00) + object_move_to_pad(0x00, 0x1600) + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_38[] = { + label(0x30) + local_timer_reset_start + if_objective_bitfield_is_set_on(0x00200000, 0x03) + if_objective_bitfield_is_set_on(0x00800000, 0x03) + if_objective_bitfield_is_set_on(0x00000400, 0x01) + if_objective_bitfield_is_set_on(0x00001000, 0x13) + if_objective_bitfield_is_set_on(0x00000800, 0x01) + label(0x13) + debug_log '!', '\n', '\0', + label(0x23) + ai_sleep + if_chr_does_not_exist(0x06, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xc400, 0x0b04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x8100, 0x0b04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x2400, 0x0b04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x0000, 0x0b04, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x07, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xa300, 0x0c04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x5900, 0x0c04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x3a00, 0x0c04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x3400, 0x0c04, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x08, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xa200, 0x0d04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xcb00, 0x0d04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x3600, 0x0d04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xc000, 0x0d04, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x09, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xd600, 0x0e04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x9800, 0x0e04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x6b00, 0x0e04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x2a00, 0x0e04, 0x00000000, 0x13) + label(0x13) + goto_next(0x01) + label(0x03) + if_objective_num_complete(0x04, 0x01) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x02, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xc400, 0x0204, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x8100, 0x0204, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x2400, 0x0204, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x0000, 0x0204, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x03, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xa300, 0x0304, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x5900, 0x0304, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x3a00, 0x0304, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x3400, 0x0304, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x04, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xa200, 0x0404, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xcb00, 0x0404, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0404, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xc000, 0x0404, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x05, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xd600, 0x0504, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x9800, 0x0504, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x6b00, 0x0504, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x2a00, 0x0504, 0x00000000, 0x13) + label(0x13) + goto_next(0x01) + label(0x01) + ai_sleep + if_local_timer_greater_than(0x780000, 0x23) + goto_first(0x01) + label(0x23) + goto_first(0x30) + ai_list_end +}; +u8 ai_10[] = { + guard_set_chr_num(0x06) + debug_log 'r', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_11[] = { + guard_set_chr_num(0x07) + debug_log 'r', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_12[] = { + guard_set_chr_num(0x08) + debug_log 'r', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_13[] = { + guard_set_chr_num(0x09) + debug_log 'r', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_6[] = { + label(0x23) + guard_set_health_total(0x2800) + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000010, 0x23) + label(0x23) + guard_try_spawning_hat(0xd900, 0x00000000, 0x01) + goto_next(0x01) + label(0x01) + jump_to_ai_list(0xfd, 0x0a04) + ai_list_end +}; +u8 ai_14[] = { + label(0x38) + guard_sprints_to_pad(0xcd00) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0xcd00, 0x23) + goto_first(0x38) + label(0x23) + guard_remove_fade + debug_log 'g', 'o', 'n', 'e', '\n', '\0', + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_15[] = { + label(0x38) + guard_sprints_to_pad(0x2300) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0x2300, 0x23) + goto_first(0x38) + label(0x23) + guard_remove_fade + debug_log 'g', 'o', 'n', 'e', '\n', '\0', + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_21[] = { + guard_flags_set_on(0x00080000) + label(0x38) + guard_set_chr_num(0x00) + label(0x00) + ai_sleep + guard_play_animation(0x1e00, 0x5300, 0x5400, 0x04, 0x10) + if_guard_distance_to_bond_less_than(0x1e00, 0x23) + goto_first(0x00) + label(0x23) + text_print_top(0x268c) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x780000, 0x23) + goto_first(0x03) + label(0x23) + objective_bitfield_set_on(0x00000020) + guard_play_animation(0xa800, 0x3c00, 0x7800, 0x00, 0x10) + text_print_top(0x238c) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x01) + label(0x23) + text_print_top(0x248c) + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_22[] = { + label(0x39) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x23) + goto_next(0x13) + label(0x23) + if_guard_bitfield_is_set_on(0x01, 0x23) + objective_bitfield_set_on(0x00080000) + local_timer_reset_start + guard_bitfield_set_on(0x01) + goto_next(0x13) + label(0x23) + if_local_timer_less_than(0x2c0100, 0x13) + text_print_top(0x258c) + jump_to_ai_list(0xfd, 0x1804) + label(0x13) + if_guard_distance_to_bond_less_than(0x3200, 0x23) + guard_try_running_to_bond_position(0x00) + label(0x23) + guard_try_walking_to_bond_position(0x00) + goto_first(0x39) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x01) + if_guard_distance_to_bond_less_than(0x1400, 0x03) + if_guard_has_stopped_moving(0x01) + goto_first(0x00) + label(0x3a) + goto_first(0x39) + label(0x03) + guard_animation_stop + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x01) + if_guard_distance_to_bond_less_than(0x0800, 0x3b) + if_guard_distance_to_bond_greater_than(0x2800, 0x01) + goto_first(0x04) + label(0x3b) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x3c) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x3c) + goto_next(0x05) + label(0x3c) + label(0x3d) + goto_next(0x05) + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x01) + if_guard_has_stopped_moving(0x06) + goto_first(0x05) + label(0x06) + goto_first(0x03) + label(0x01) + goto_first(0x39) + ai_list_end +}; +u8 ai_23[] = { + local_timer_reset_start + label(0x05) + ai_sleep + if_local_timer_greater_than(0x780000, 0x38) + goto_first(0x05) + label(0x38) + guard_sprints_to_pad(0x0900) + label(0x03) + ai_sleep + if_objective_num_complete(0x04, 0x3d) + goto_next(0x13) + label(0x3d) + chr_try_teleporting_to_pad(0x00, 0x0900, 0x13) + label(0x13) + if_guard_has_stopped_moving(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x2800, 0x0900, 0x23) + goto_first(0x03) + label(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x2800, 0x0900, 0x23) + goto_first(0x38) + label(0x23) + objective_bitfield_set_on(0x00000001) + guard_try_facing_target(0x0100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000002, 0x23) + goto_first(0x00) + label(0x23) + guard_surrenders + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_39[] = { + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00000008, 0x00) + goto_first(0x03) + label(0x00) + ai_sleep + if_chr_does_not_exist(0x00, 0x23) + if_objective_bitfield_is_set_on(0x00000004, 0x3d) + goto_first(0x00) + label(0x3d) + ai_sleep + ai_sleep + ai_sleep + chr_hit_body_part_with_item_damage(0x00, 0x08, 0x08) + label(0x23) + objective_bitfield_set_on(0x00004000) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_40[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000001, 0x23) + goto_first(0x00) + label(0x23) + if_objective_num_complete(0x04, 0x23) + goto_first(0x00) + label(0x23) + label(0x03) + ai_sleep + if_bond_distance_to_pad_greater_than(0xf401, 0x0900, 0x23) + goto_first(0x03) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0x45, 0x0c00, 0x1d04, 0x10000000, 0x23) + debug_log 'O', ' ', 'f', 'a', 'i', 'l', '\n', '\0', + goto_first(0x03) + label(0x23) + objective_bitfield_set_on(0x00000002) + debug_log 'O', ' ', 'i', 'n', 'i', 't', '\n', '\0', + ai_sleep + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0a00, 0x1a04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0b00, 0x1b04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0d00, 0x1c04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0e00, 0x1c04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0f00, 0x1c04, 0x10000000, 0x23) + label(0x23) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_28[] = { + guard_flags_set_on(0x00080000) + guard_set_chr_num(0x0a) + guard_try_spawning_item(0xcd00, 0x06, 0x00000000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x23) + if_guard_shot_from_bond_missed(0x23) + if_chr_dying_or_dead(0xfd, 0x23) + if_guard_distance_to_bond_less_than(0x9600, 0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + goto_next(0x33) + label(0x33) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x01) + if_guard_shot_from_bond_missed(0x01) + if_chr_dying_or_dead(0xfd, 0x01) + if_guard_distance_to_bond_greater_than(0xfa00, 0x0f) + guard_bitfield_set_off(0x01) + local_timer_start + if_local_timer_greater_than(0x600900, 0x10) + if_local_timer_greater_than(0x080700, 0x0e) + if_local_timer_greater_than(0xdc0500, 0x0d) + if_local_timer_greater_than(0xb00400, 0x0c) + if_local_timer_greater_than(0x840300, 0x0b) + if_local_timer_greater_than(0x580200, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x09) + goto_first(0x33) + label(0x09) + if_local_timer_greater_than(0x680100, 0x23) + text_print_top(0x288c) + label(0x23) + goto_first(0x33) + label(0x0a) + if_local_timer_greater_than(0x940200, 0x23) + text_print_top(0x298c) + label(0x23) + goto_first(0x33) + label(0x0b) + if_local_timer_greater_than(0xc00300, 0x23) + text_print_top(0x2a8c) + label(0x23) + goto_first(0x33) + label(0x0c) + if_local_timer_greater_than(0xec0400, 0x23) + text_print_top(0x2b8c) + label(0x23) + goto_first(0x33) + label(0x0d) + if_local_timer_greater_than(0x180600, 0x23) + text_print_top(0x2c8c) + label(0x23) + goto_first(0x33) + label(0x0e) + if_local_timer_greater_than(0x440700, 0x23) + text_print_top(0x2d8c) + label(0x23) + goto_first(0x33) + label(0x10) + if_local_timer_greater_than(0x9c0900, 0x23) + text_print_top(0x2f8c) + label(0x23) + goto_first(0x33) + label(0x0f) + if_guard_bitfield_is_set_on(0x01, 0x13) + text_print_top(0x2e8c) + label(0x13) + local_timer_stop + guard_bitfield_set_on(0x01) + goto_first(0x33) + label(0x01) + objective_bitfield_set_on(0x00000004) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x1e04) + ai_list_end +}; +u8 ai_24[] = { + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000010, 0x23) + label(0x23) + guard_try_spawning_hat(0xd600, 0x00000000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target(0x2400, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x23) + if_guard_shot_from_bond_missed(0x23) + if_chr_dying_or_dead(0xfd, 0x23) + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000004) + guard_try_fire_or_aim_at_target_update(0x0400, 0x0000, 0x03) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x1e04) + ai_list_end +}; +u8 ai_25[] = { + guard_set_chr_num(0x0b) + jump_to_ai_list(0xfd, 0x1904) + ai_list_end +}; +u8 ai_26[] = { + guard_set_chr_num(0x0c) + jump_to_ai_list(0xfd, 0x1904) + ai_list_end +}; +u8 ai_27[] = { + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000010, 0x23) + label(0x23) + guard_try_spawning_hat(0xd600, 0x00000000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x23) + if_guard_shot_from_bond_missed(0x23) + if_chr_dying_or_dead(0xfd, 0x23) + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000004) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x1e04) + ai_list_end +}; +u8 ai_29[] = { + label(0x38) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x23) + label(0x23) + ai_sleep + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23) + label(0x23) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + goto_first(0x38) + ai_list_end +}; +u8 ai_41[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x23) + goto_first(0x00) + label(0x23) + object_flags_1_set_on(0x01, 0x00000400) + random_generate_seed + if_random_seed_greater_than(0x1e, 0x23) + object_move_to_pad(0x01, 0xcd00) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x3c, 0x23) + object_move_to_pad(0x01, 0xd600) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x5a, 0x23) + object_move_to_pad(0x01, 0xd000) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + object_move_to_pad(0x01, 0xc800) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x96, 0x23) + object_move_to_pad(0x01, 0xcb00) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + object_move_to_pad(0x01, 0xc400) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0xd2, 0x23) + object_move_to_pad(0x01, 0xd500) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0xf0, 0x23) + object_move_to_pad(0x01, 0xc200) + goto_next(0x03) + label(0x23) + object_move_to_pad(0x01, 0xc000) + label(0x03) + ai_sleep + if_objective_num_complete(0x04, 0x04) + if_bond_in_room_with_pad(0xb300, 0x23) + goto_first(0x03) + label(0x23) + text_print_top(0x278c) + goto_first(0x03) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_0[] = { + debug_log 'b', 'r', 'r', 'm', ' ', 'b', 'r', 'r', 'm', '\n', '\0', + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_42[] = { + label(0x38) + ai_sleep + if_bond_is_dead(0x3e) + if_bond_in_room_with_pad(0x1600, 0x23) + goto_first(0x38) + label(0x23) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x03) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x03) + label(0x23) + if_chr_does_not_exist(0x0a, 0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x29) + jump_to_ai_list(0xfd, 0x2004) + label(0x29) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3e) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_31[] = { + if_objective_all_completed(0x23) + jump_to_ai_list(0xfd, 0x0f00) + label(0x23) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x02, 0x0100, 0x0000) + screen_fade_from_black + music_xtrack_play(0x00, 0x00, 0xff) + door_open_instant(0x03) + door_open_instant(0x04) + jump_to_ai_list(0xf8, 0x2104) + chr_flags_set_off(0x0a, 0x00040000) + jump_to_ai_list(0x0a, 0x2204) + chr_flags_set_off(0x0b, 0x00040000) + jump_to_ai_list(0x0b, 0x2304) + chr_flags_set_off(0x0c, 0x00040000) + jump_to_ai_list(0x0c, 0x2404) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_32[] = { + chr_try_teleporting_to_pad(0xfd, 0x1000, 0x23) + label(0x23) + guard_play_animation(0x6b00, 0xffff, 0xffff, 0x06, 0x10) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x23) + goto_first(0x03) + label(0x23) + screen_fade_to_black + label(0x04) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x04) + label(0x23) + exit_level + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_33[] = { + chr_try_teleporting_to_pad(0xfd, 0x1100, 0x23) + label(0x23) + guard_play_animation(0x5200, 0xffff, 0xffff, 0x06, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_34[] = { + chr_try_teleporting_to_pad(0xfd, 0x1400, 0x23) + label(0x23) + guard_play_animation(0x2800, 0xffff, 0xffff, 0x06, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_35[] = { + chr_try_teleporting_to_pad(0xfd, 0x1300, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x23) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x0e0100, 0x23) + goto_first(0x03) + label(0x23) + guard_animation_stop + label(0x23) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_30[] = { + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x000000, 0x23) + goto_first(0x03) + label(0x23) + guard_play_animation(0x6100, 0xffff, 0xaf00, 0x04, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_43[] = { + label(0x03) + ai_sleep + if_camera_is_in_bond_swirl(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xf8, 0x1f04) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_44[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000040, 0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + label(0x04) + ai_sleep + debug_log 'I', '2', '\n', '\0', + if_local_timer_greater_than(0x580200, 0x10) + if_local_timer_greater_than(0x680100, 0x0f) + if_local_timer_greater_than(0x2c0100, 0x0e) + if_local_timer_greater_than(0xb40000, 0x0d) + if_local_timer_greater_than(0x780000, 0x0c) + if_local_timer_greater_than(0x3c0000, 0x0b) + if_local_timer_greater_than(0x000000, 0x0a) + goto_first(0x04) + label(0x0a) + debug_log 'T', '1', '\n', '\0', + object_flags_1_set_off(0x0b, 0x00000200) + object_destroy(0x0b) + object_flags_1_set_off(0x0c, 0x00000200) + object_destroy(0x0c) + goto_first(0x04) + label(0x0b) + object_flags_1_set_off(0x00, 0x00000200) + object_destroy(0x00) + object_flags_1_set_off(0x0d, 0x00000200) + object_destroy(0x0d) + object_flags_1_set_off(0x0e, 0x00000200) + object_destroy(0x0e) + goto_first(0x04) + label(0x0c) + object_flags_1_set_off(0x0f, 0x00000200) + object_destroy(0x0f) + object_flags_1_set_off(0x10, 0x00000200) + object_destroy(0x10) + goto_first(0x04) + label(0x0d) + goto_first(0x04) + label(0x0e) + goto_first(0x04) + label(0x0f) + goto_first(0x04) + label(0x10) + debug_log 'C', 'L', '\n', '\0', + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_45[] = { + chr_flags_set_on(0x01, 0x00001000) + ai_sleep + label(0x33) + ai_sleep + if_killed_civilians_greater_than(0x00, 0x23) + goto_first(0x33) + label(0x23) + objective_bitfield_set_on(0x00002000) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/e/UsetuptraZ.c b/assets/obseg/setup/e/UsetuptraZ.c index 1b15ecda..4685f80f 100644 --- a/assets/obseg/setup/e/UsetuptraZ.c +++ b/assets/obseg/setup/e/UsetuptraZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1708,47 +1709,1448 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x02060346, 0x013a013b, 0x0132013c, 0x012f1101, 0x06021101, 0x06020133, 0x3519010e, 0x08020133, 0x35400111, 0x08020135, 0x7f011208, 0x02013335, 0x7f011400, 0x01000008, 0x02019602, 0x01940202, 0x01020f15, 0x00010000, 0x08020803, 0x2f010108, 0x02010101, 0x04000000 }; -u32 ai_1[] = { 0x02060346, 0x0b3a0b3b, 0x0b320b3c, 0x0b2f1101, 0x06021179, 0x001a0106, 0x021a1201, 0x96010133, 0x3520010c, 0x94010702, 0x0b039610, 0x019410f3, 0x0abd11ff, 0x00980406, 0x00000000, 0x21ad4621, 0x0a00020a, 0x01060221, 0xad48656c, 0x6c6f210a, 0x00020133, 0x3519010e, 0x08020133, 0x35400111, 0x08020135, 0x7f011208, 0x02013335, 0x7f011400, 0x01000008, 0x02019602, 0x01940202, 0x01020f15, 0x00010000, 0x08020803, 0x2f010108, 0x02010101, 0x04000000 }; -u32 ai_2[] = { 0x02060346, 0x0b3a0b3b, 0x0b320b3c, 0x0b2f1101, 0x06021179, 0x001a0106, 0x021a1201, 0x96010133, 0x3520010c, 0x94010702, 0x0b039620, 0x019420c1, 0xfd040621, 0xad46210a, 0x00010602, 0x2103ad48, 0x656c6c6f, 0x210a0002, 0x01333519, 0x010e0802, 0x01333540, 0x01110802, 0x01357f01, 0x12080201, 0x33357f01, 0x14000100, 0x00080201, 0x96020194, 0x02020102, 0x0f150001, 0x00000802, 0x08032f01, 0x01080201, 0x01010400 }; -u32 ai_4[] = { 0x90001402, 0x06034601, 0x3a013b01, 0x32013c01, 0x01060201, 0x3335c801, 0x14000100, 0x00110201, 0x15000100, 0x00110211, 0x032f0801, 0x11020801, 0x06040000 }; -u32 ai_3[] = { 0x90001402, 0x00140021, 0x00000602, 0x06034601, 0x3a013b01, 0x32013c01, 0x01060201, 0x33359601, 0x16000100, 0x00110201, 0x09ae0212, 0x033335fa, 0x01b40000, 0xf0080112, 0x02011400, 0x21000001, 0x02011600, 0x01000001, 0x02010211, 0x032f0801, 0x11020801, 0x00040000 }; -u32 ai_5[] = { 0x02210227, 0xc000dc00, 0x00000027, 0x0227bf00, 0xc3098000, 0x00002702, 0x27bf00c3, 0x09900000, 0x002003ad, 0x44612d44, 0x61210a00, 0x02200328, 0x1f021f03, 0x4b003222, 0x2f010120, 0x02010301, 0x20022203, 0x05fd0401, 0x04000000 }; -u32 ai_7[] = { 0x02260394, 0x01280602, 0x06032f25, 0x32240106, 0x02240305, 0xfd040902, 0x25030126, 0x04000000 }; -u32 ai_8[] = { 0x02262811, 0x0211033c, 0x252f0801, 0x11020603, 0x7806359f, 0x00000010, 0x3702352f, 0x254c00c8, 0x01010602, 0x01012602, 0x253c0100, 0x08021f03, 0x4b003201, 0x2f010126, 0x02019f00, 0x00001037, 0x02293335, 0x19010e08, 0x02013335, 0x40011108, 0x0201357f, 0x01120802, 0x0133357f, 0x0f140001, 0x00000802, 0x0f150001, 0x00000802, 0x08033c01, 0x00110211, 0x3335c801, 0x00120201, 0x01060212, 0xae281302, 0x13032f01, 0xb400003c, 0x01011302, 0x0108ad77, 0x6169740a, 0x00950433, 0x35c80194, 0x040201ae, 0x0214033c, 0x01460103, 0xb3000258, 0x02960403, 0x01260203, 0x01120202, 0x01140201, 0x01060237, 0x7806019e, 0x00000010, 0x02010129, 0x04000000 }; -u32 ai_6[] = { 0xae020603, 0x3c265200, 0x14232826, 0xb40000b4, 0x23010602, 0x23033335, 0x96015200, 0x1e232826, 0x02010335, 0xdc015200, 0x32232826, 0x02010335, 0xf5015200, 0x4b232826, 0x02010335, 0xfa015200, 0x64232826, 0x02010352, 0x00c82328, 0x26ae0106, 0x02260305, 0xfd040904 }; -u32 ai_18[] = { 0x9d000400, 0x009d0000, 0x08000206, 0x033c0155, 0x005e0101, 0x060201c3, 0x9010f400, 0x00ff0207, 0x039c0000, 0x0800299c, 0x00000100, 0x299c0000, 0x04002946, 0x2a7efd2a, 0x55005301, 0x01070201, 0xae9a0000, 0x2000c390, 0x09020403, 0x9c000008, 0x00299c00, 0x00010029, 0x9c000004, 0x0029462a, 0x7efd2a52, 0x00190052, 0x11550058, 0x13b40007, 0x082db400, 0x04b02cb4, 0x0002582b, 0x0104022b, 0xb4000294, 0x01c3900c, 0x02010104, 0x022cb400, 0x04ec01c3, 0x900a0201, 0x0104022d, 0xb4000744, 0x01c39019, 0x9a000008, 0x00020101, 0x04021103, 0xc3900f03, 0x002a0213, 0x03c39011, 0x03002a02, 0x2a9a0000, 0x02009a00, 0x00080002, 0x29c3900d, 0x14000100, 0x00010201, 0x05fd0001, 0x04000000 }; -u32 ai_22[] = { 0x9d000008, 0x00020403, 0x9c000008, 0x00299c00, 0x00010029, 0x9c000002, 0x0029462a, 0x7efd2a01, 0x04022a9a, 0x00000400, 0x9a000008, 0x00022914, 0x00010000, 0x01020102, 0x120330fd, 0x01011202, 0x01c3900e, 0x05fd0001, 0x04000000 }; -u32 ai_19[] = { 0x9d000008, 0x00140024, 0x00460602, 0x06034601, 0x7efd019c, 0x00000800, 0x29010602, 0x019a0000, 0x01009a00, 0x00080002, 0x290330fd, 0x11304615, 0x314615e8, 0x122f1401, 0x29021414, 0x00240046, 0x01020101, 0x290212e7, 0x13012902, 0x13160004, 0x00460102, 0x019a0000, 0x10000129, 0x02150600, 0x0205fd00, 0x08021105, 0xfd000104 }; -u32 ai_20[] = { 0x9d000008, 0x009d0000, 0x00802102, 0x06039c00, 0x00100001, 0x31470230, 0x47020106, 0x020118fd, 0x08069a00, 0x00400005, 0xfd000102, 0x020d0219, 0x039c0000, 0x08000101, 0x190201ae, 0x021203b4, 0x0004b001, 0x01120201, 0x1e005102, 0x04035500, 0x62084235, 0xd9460051, 0x35023503, 0x5b2a3500, 0x0a02355b, 0x2935000a, 0x02357002, 0x35b40011, 0x942fb400, 0x0f3c2e02, 0x35b4000b, 0xb82db400, 0x09602c02, 0x05032f01, 0x01040201, 0x33356401, 0x0a00ac00, 0x00004500, 0x109a0020, 0x00000104, 0x02013596, 0x010a00ad, 0x0000004a, 0x00109a00, 0x20000001, 0x04020135, 0xc8010a00, 0xae000000, 0x4f00109a, 0x00200000, 0x01040201, 0x0a00af00, 0x00005900, 0x109a0020, 0x00000104, 0x022cb400, 0x099c01c3, 0x90140201, 0x0105022d, 0xb4000bf4, 0x01c39015, 0x9a000100, 0x00020101, 0x05022eb4, 0x000f7801, 0xc3901602, 0x01010502, 0x2fb40011, 0xd001c390, 0x179a0002, 0x00000201, 0x01050208, 0x05fd0416, 0x020a05fd, 0x041c0400 }; -u32 ai_27[] = { 0x17000100, 0x00010201, 0x039c0008, 0x00000ac3, 0x901aae02, 0x040330fd, 0x0ab40001, 0x2c015500, 0x62080104, 0x0201c390, 0x1b020503, 0x30fd0a55, 0x00620801, 0x05020805, 0xfd041602, 0x0a05fd00, 0x01040000 }; -u32 ai_21[] = { 0xc3901802, 0x38032806, 0x01380206, 0x034b0019, 0x112f0801, 0x06023901, 0x38021108, 0x0212034b, 0x00083a4c, 0x00280801, 0x12023a47, 0x403b48c0, 0x3b0d0013, 0x023b0202, 0xfa001302, 0x13032f14, 0x01130214, 0x01110208, 0x01380400 }; -u32 ai_17[] = { 0x04000000 }; -u32 ai_9[] = { 0xad446f6e, 0x650a008f, 0x0050c000, 0xdc000000, 0x00010201, 0xbf00bd0a, 0x00000000, 0x01020133, 0x35c80106, 0x040105fd, 0x04010201, 0x94010600, 0x0205fd00, 0x08040000 }; -u32 ai_10[] = { 0x33353c01, 0xab007002, 0x01357801, 0xab003702, 0x0135b401, 0xab003402, 0x01ab0043, 0x020205fd, 0x04100400 }; -u32 ai_11[] = { 0x33353c01, 0xab007102, 0x01357801, 0xab007502, 0x0135b401, 0xab006e02, 0x01ab0078, 0x020205fd, 0x04100400 }; -u32 ai_12[] = { 0x33353c01, 0xab007102, 0x01357801, 0xab006b02, 0x0135b401, 0xab007702, 0x01ab0078, 0x020205fd, 0x04100400 }; -u32 ai_13[] = { 0x33353c01, 0xab007502, 0x01357801, 0xab007402, 0x0135b401, 0xab007002, 0x01ab0078, 0x020205fd, 0x04100400 }; -u32 ai_14[] = { 0x02013335, 0x78358f00, 0x3cbf00bd, 0x0a000000, 0x00010201, 0xc000dc00, 0x00000008, 0x02358f00, 0x50c000de, 0x00000000, 0x010201bf, 0x00c30980, 0x00000001, 0x0201bf00, 0xc3099000, 0x00000802, 0x0805fd04, 0x01040000 }; -u32 ai_15[] = { 0x02013335, 0x64373532, 0x35900014, 0x8f0028bf, 0x00bd0a00, 0x00000001, 0x0201c000, 0xdc000000, 0x00080235, 0x9000288f, 0x0028bf00, 0xc3098000, 0x00000102, 0x01c000de, 0x00000000, 0x010201bf, 0x00c30990, 0x00000008, 0x02379000, 0x288f003c, 0xc000dd00, 0x00000001, 0x0201bf00, 0xc3098000, 0x00000102, 0x01bf00c3, 0x09900000, 0x00080208, 0x05fd0407, 0x04000000 }; -u32 ai_16[] = { 0x9000288f, 0x003c0206, 0x036d0008, 0x01060208, 0x05fd0409, 0x04000000 }; -u32 ai_28[] = { 0x02040301, 0x04040000 }; -u32 ai_29[] = { 0x02060352, 0x00140052, 0x369c0000, 0x08000155, 0x00583501, 0x0602359c, 0x00002000, 0x35010602, 0x35003602, 0x01ae0211, 0x03b40000, 0x4b015200, 0x14005201, 0x55005835, 0x01110235, 0x9c000020, 0x00350111, 0x02350236, 0x0201ae67, 0x00670102, 0x1403b400, 0x00b40101, 0x14020167, 0x02670367, 0x04670567, 0x06670767, 0x2e021203, 0x68010101, 0x01120201, 0xa0450000, 0x0010a048, 0x00000010, 0xd94500ba, 0x010201d9, 0x4800ba01, 0x0201a045, 0x00040400, 0xa0480004, 0x04000213, 0x03011304 }; -u32 ai_30[] = { 0x02060352, 0x006400af, 0x01010602, 0x01ad476f, 0x0a003335, 0x6401f311, 0xbd04ff00, 0x0a040a00, 0x00000011, 0x020135c8, 0x01f311bd, 0x04ff000c, 0x040a0000, 0x00001102, 0x01f311bd, 0x04ff000d, 0x040a0000, 0x00001102, 0x11033335, 0x6401f312, 0xbd04ff00, 0x09040a00, 0x00000012, 0x0201f312, 0xbd04ff00, 0x0b040a00, 0x00000012, 0x02120355, 0x00900101, 0x120201ad, 0x706f7032, 0x0a0003f3, 0x01bd04ff, 0x0041040b, 0x00000000, 0x01020103, 0xf301bd04, 0xff003a04, 0x0c000000, 0x00010201, 0x03f301bd, 0x04ff003b, 0x040d0000, 0x00000102, 0x0103f301, 0xbd04ff00, 0x35040e00, 0x00000001, 0x02010333, 0x355001f3, 0x02bd04ff, 0x0036040f, 0x00000000, 0x02020135, 0xa001f302, 0xbd04ff00, 0x3d040f00, 0x00000002, 0x0201f302, 0xbd04ff00, 0x42040f00, 0x00000002, 0x02020333, 0x355001f3, 0x02bd04ff, 0x0037040f, 0x00000000, 0x02020135, 0xa001f302, 0xbd04ff00, 0x3e040f00, 0x00000002, 0x0201f302, 0xbd04ff00, 0x40040f00, 0x00000002, 0x02020333, 0x355001f3, 0x02bd04ff, 0x0038040f, 0x00000000, 0x02020135, 0xa001f302, 0xbd04ff00, 0x3f040f00, 0x00000002, 0x0201f302, 0xbd04ff00, 0x34040f00, 0x00000002, 0x02020333, 0x357801f3, 0x02bd04ff, 0x0039040f, 0x00000000, 0x020201f3, 0x02bd04ff, 0x003c040f, 0x00000000, 0x020202ad, 0x706f7033, 0x0a000213, 0x03011304 }; -u32 ai_31[] = { 0x0206039c, 0x00000800, 0x01010602, 0x01ae0211, 0x03304602, 0x31460230, 0x48353148, 0x350202b4, 0x00038401, 0x01110235, 0xb4000708, 0x01011102, 0x01aec390, 0x120212b4, 0x00012c01, 0x03011202, 0x01c39013, 0xb7003cb9, 0xb5021303, 0x960435bb, 0x001e1402, 0x35960235, 0xbb001702, 0x02359601, 0x35bb0014, 0x010235bb, 0x00001501, 0x130201c4, 0x003a00c7, 0x0000000e, 0x10940101, 0x130202c9, 0x01c400d7, 0x02c60200, 0x47000094, 0x02011302, 0x14c400d6, 0x03c60300, 0x47000003, 0xc400d801, 0xc6010047, 0x00009404, 0x01130215, 0xb69a0008, 0x00000208, 0x03010804 }; -u32 ai_32[] = { 0x0204aec4, 0x0040ff6d, 0x00010006, 0x0201c400, 0x3fff0206, 0x039c0004, 0x000008b4, 0x00003c01, 0x01060201, 0x01040208, 0xc4003dff, 0x02110301, 0x11040000 }; -u32 ai_33[] = { 0x0204ae33, 0x35af2d35, 0x642c022b, 0xc400f9ff, 0x0006022c, 0xc400dfff, 0x0006022d, 0xc40033ff, 0x00060206, 0x033335fe, 0x013335fa, 0x11b40000, 0x78010106, 0x02110333, 0x35fe01b4, 0x0000b401, 0x01110201, 0x6d000101, 0x04020105, 0xfd041804 }; -u32 ai_23[] = { 0x86fa8100, 0x02118228, 0xae950184, 0x64040008, 0x020403b4, 0x00007801, 0x01040201, 0x85010111, 0x02013335, 0xaf2d3564, 0x2c022bc4, 0x00f9ff00, 0x06022cc4, 0x00dfff00, 0x06022dc4, 0x0033ff00, 0x06020601, 0x11020803, 0x9a000400, 0x00010804 }; -u32 ai_34[] = { 0x02000352, 0x003200cb, 0x01010002, 0x01ae0219, 0x03eb3db4, 0x0000b401, 0x01190201, 0xecd700da, 0x31460130, 0x46019a00, 0x00800002, 0x01021103, 0xdc010111, 0x02013146, 0x3c30463c, 0xf10105fd, 0x000f0201, 0xddeaed03, 0x0303d51d, 0x00020000, 0xa1460000, 0x04000546, 0x041b05f8, 0x041a0303, 0xdbae0212, 0x03b40001, 0x2c01b400, 0x00f02fb4, 0x0000b42e, 0xb400005a, 0x2db40000, 0x3c2c0112, 0x022ca419, 0x00020000, 0x5f190112, 0x022da41a, 0x00020000, 0x5f1a0112, 0x022ea41b, 0x00020000, 0x5f1b0112, 0x022fa41c, 0x00020000, 0x5f1c0112, 0x0201da02, 0x1303dc01, 0x01130201, 0xd205fd00, 0x01023cd2, 0x05fd0001, 0x023d05fd, 0x00010400 }; -u32 ai_25[] = { 0xa0fd0000, 0x0010d9fd, 0x00cd0102, 0x010a005a, 0xffffffff, 0x061005fd, 0x00010400 }; -u32 ai_26[] = { 0xa0fd0000, 0x0010d9fd, 0x00cc0102, 0x010a005a, 0x0007ffff, 0x061005fd, 0x00010400 }; -u32 ai_24[] = { 0xae0a0064, 0x00000001, 0x04100211, 0x03b40000, 0x00010111, 0x02010a00, 0x640001ff, 0xff041005, 0xfd000104 }; -u32 ai_35[] = { 0x021103cf, 0x01011102, 0x0105f804, 0x1905fd00, 0x01040000 }; -u32 ai_36[] = { 0x0211039c, 0x00080000, 0x01011102, 0x01ae0212, 0x03b40003, 0x6632b400, 0x027631b4, 0x00023a30, 0xb40001c2, 0x2fb40000, 0xd22eb400, 0x005a2db4, 0x00001e2c, 0x0112022c, 0xa40f0002, 0x00005f0f, 0x0112022d, 0xa4100002, 0x00005f10, 0xa42b0002, 0x00005f2b, 0x0112022e, 0xa4110002, 0x00005f11, 0x0112022f, 0xa4120002, 0x00005f12, 0xa42c0002, 0x00005f2c, 0x01120230, 0xa4130002, 0x00005f13, 0x01120231, 0xa4140002, 0x00005f14, 0x01120232, 0xa4150002, 0x00005f15, 0xa42d0002, 0x00005f2d, 0x011205fd, 0x00010400 }; -u32 ai_37[] = { 0x02110355, 0x00620101, 0x110201e9, 0x9a001000, 0x0005fd00, 0x01040000 }; -u32 ai_38[] = { 0x02040368, 0x1e01356b, 0x1e020235, 0x681f0135, 0x6b1f0202, 0x35036820, 0x01356b20, 0x02023568, 0x2101356b, 0x21020235, 0x03682201, 0x356b2202, 0x02356823, 0x01356b23, 0x02023503, 0x68240135, 0x6b240202, 0x35682501, 0x356b2502, 0x02350368, 0x2601356b, 0x26020235, 0x68270135, 0x6b270202, 0x35036828, 0x01356b28, 0x02023501, 0x04040000 }; -u32 ai_39[] = { 0x0206039c, 0x00200000, 0x01010602, 0x01ae0211, 0x03b40000, 0x3c010111, 0x02013335, 0x8035c400, 0xb807c507, 0x29000002, 0x359b0020, 0x00000106, 0x020805fd, 0x00010400 }; -u32 ai_40[] = { 0x02060331, 0x46010106, 0x0201c390, 0x1c9a0000, 0x40000208, 0x03010804 }; +u8 ai_0[] = { + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_guard_see_another_guard_shot(0x01) + if_guard_see_another_guard_die(0x01) + if_guard_sees_bond(0x01) + if_guard_and_bond_within_line_of_sight(0x01) + if_guard_has_stopped_moving(0x11) + goto_first(0x06) + label(0x11) + goto_first(0x06) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x01) + if_guard_bitfield_is_set_on(0x02, 0x01) + guard_bitfield_set_on(0x02) + label(0x01) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x08) + label(0x01) + goto_first(0x01) + ai_list_end +}; +u8 ai_1[] = { + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x0b) + if_guard_see_another_guard_shot(0x0b) + if_guard_see_another_guard_die(0x0b) + if_guard_sees_bond(0x0b) + if_guard_and_bond_within_line_of_sight(0x0b) + if_guard_has_stopped_moving(0x11) + goto_first(0x06) + label(0x11) + if_guard_hits_greater_than(0x00, 0x1a) + goto_first(0x06) + label(0x1a) + guard_try_firing_run(0x01) + if_guard_bitfield_is_set_on(0x01, 0x01) + random_generate_seed + if_random_seed_greater_than(0x20, 0x01) + guard_points_at_bond + guard_bitfield_set_on(0x01) + jump_to_return_ai_list + label(0x0b) + ai_sleep + if_guard_bitfield_is_set_on(0x10, 0x01) + guard_bitfield_set_on(0x10) + if_bond_damage_and_pickups_disabled(0x0a) + chr_try_spawning_at_pad(0x11, 0xff, 0x9800, 0x0604, 0x00000000, 0x21) + debug_log 'F', '!', '\n', '\0', + label(0x0a) + goto_first(0x06) + label(0x21) + debug_log 'H', 'e', 'l', 'l', 'o', '!', '\n', '\0', + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x01) + if_guard_bitfield_is_set_on(0x02, 0x01) + guard_bitfield_set_on(0x02) + label(0x01) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x08) + label(0x01) + goto_first(0x01) + ai_list_end +}; +u8 ai_2[] = { + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x0b) + if_guard_see_another_guard_shot(0x0b) + if_guard_see_another_guard_die(0x0b) + if_guard_sees_bond(0x0b) + if_guard_and_bond_within_line_of_sight(0x0b) + if_guard_has_stopped_moving(0x11) + goto_first(0x06) + label(0x11) + if_guard_hits_greater_than(0x00, 0x1a) + goto_first(0x06) + label(0x1a) + guard_try_firing_run(0x01) + if_guard_bitfield_is_set_on(0x01, 0x01) + random_generate_seed + if_random_seed_greater_than(0x20, 0x01) + guard_points_at_bond + guard_bitfield_set_on(0x01) + jump_to_return_ai_list + label(0x0b) + ai_sleep + if_guard_bitfield_is_set_on(0x20, 0x01) + guard_bitfield_set_on(0x20) + chr_try_spawning_clone(0xfd, 0x0604, 0x21) + debug_log 'F', '!', '\n', '\0', + goto_first(0x06) + label(0x21) + ai_sleep + debug_log 'H', 'e', 'l', 'l', 'o', '!', '\n', '\0', + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x01) + if_guard_bitfield_is_set_on(0x02, 0x01) + guard_bitfield_set_on(0x02) + label(0x01) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x08) + label(0x01) + goto_first(0x01) + ai_list_end +}; +u8 ai_4[] = { + guard_set_armour(0x1400) + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_guard_see_another_guard_shot(0x01) + if_guard_see_another_guard_die(0x01) + if_guard_sees_bond(0x01) + if_guard_and_bond_within_line_of_sight(0x01) + goto_first(0x06) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x11) + label(0x01) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x11) + label(0x11) + ai_sleep + if_guard_has_stopped_moving(0x08) + goto_first(0x11) + label(0x08) + goto_first(0x06) + ai_list_end +}; +u8 ai_3[] = { + guard_set_armour(0x1400) + label(0x00) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_guard_see_another_guard_shot(0x01) + if_guard_see_another_guard_die(0x01) + if_guard_sees_bond(0x01) + if_guard_and_bond_within_line_of_sight(0x01) + goto_first(0x06) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x96, 0x01) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x11) + label(0x01) + guard_kneel + local_timer_reset_start + label(0x12) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x01) + if_local_timer_greater_than(0xf00000, 0x08) + goto_first(0x12) + label(0x01) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x01) + label(0x01) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x01) + label(0x01) + label(0x11) + ai_sleep + if_guard_has_stopped_moving(0x08) + goto_first(0x11) + label(0x08) + goto_first(0x00) + ai_list_end +}; +u8 ai_5[] = { + label(0x21) + label(0x27) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x27) + label(0x27) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x27) + label(0x27) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x20) + ai_sleep + debug_log 'D', 'a', '-', 'D', 'a', '!', '\n', '\0', + label(0x20) + ai_sleep + guard_try_running_to_bond_position(0x1f) + label(0x1f) + ai_sleep + if_guard_distance_to_bond_less_than(0x3200, 0x22) + if_guard_has_stopped_moving(0x01) + goto_first(0x20) + label(0x01) + ai_sleep + goto_first(0x20) + label(0x22) + ai_sleep + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_7[] = { + label(0x26) + ai_sleep + guard_bitfield_set_on(0x01) + guard_try_running_to_bond_position(0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x25) + if_guard_sees_bond(0x24) + goto_first(0x06) + label(0x24) + ai_sleep + jump_to_ai_list(0xfd, 0x0904) + label(0x25) + ai_sleep + goto_first(0x26) + ai_list_end +}; +u8 ai_8[] = { + label(0x26) + guard_try_running_to_bond_position(0x11) + label(0x11) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x25) + if_guard_has_stopped_moving(0x08) + goto_first(0x11) + label(0x06) + ai_sleep + if_guard_hits_less_than(0x06, 0x35) + if_guard_flags_is_set_on(0x10000000, 0x37) + label(0x35) + if_guard_has_stopped_moving(0x25) + if_guard_distance_to_bond_greater_than(0xc800, 0x01) + goto_first(0x06) + label(0x01) + goto_first(0x26) + label(0x25) + if_guard_and_bond_within_line_of_sight(0x01) + goto_next(0x08) + label(0x1f) + ai_sleep + if_guard_distance_to_bond_less_than(0x3200, 0x01) + if_guard_has_stopped_moving(0x01) + goto_first(0x26) + label(0x01) + if_guard_flags_is_set_on(0x10000000, 0x37) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x0f) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x01) + goto_next(0x11) + label(0x11) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + goto_next(0x12) + label(0x01) + goto_first(0x06) + label(0x12) + local_timer_reset_start + guard_try_running_to_bond_position(0x13) + label(0x13) + ai_sleep + if_guard_has_stopped_moving(0x01) + if_local_timer_greater_than(0x3c0000, 0x01) + goto_first(0x13) + label(0x01) + guard_animation_stop + debug_log 'w', 'a', 'i', 't', '\n', '\0', + guard_bitfield_set_off(0x04) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + guard_bitfield_set_on(0x04) + label(0x01) + local_timer_reset_start + label(0x14) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x01) + if_guard_shot_from_bond_missed(0x01) + ai_sleep + if_local_timer_less_than(0x580200, 0x02) + if_guard_bitfield_is_set_on(0x04, 0x03) + goto_first(0x26) + label(0x03) + goto_first(0x12) + label(0x02) + goto_first(0x14) + label(0x01) + goto_first(0x06) + label(0x37) + if_guard_hits_less_than(0x06, 0x01) + guard_flags_set_off(0x10000000) + label(0x01) + goto_first(0x29) + ai_list_end +}; +u8 ai_6[] = { + local_timer_reset_start + label(0x06) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x26) + if_bond_distance_to_pad_less_than(0x1400, 0x2823, 0x26) + if_local_timer_greater_than(0xb40000, 0x23) + goto_first(0x06) + label(0x23) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x96, 0x01) + if_bond_distance_to_pad_less_than(0x1e00, 0x2823, 0x26) + label(0x01) + ai_sleep + if_random_seed_greater_than(0xdc, 0x01) + if_bond_distance_to_pad_less_than(0x3200, 0x2823, 0x26) + label(0x01) + ai_sleep + if_random_seed_greater_than(0xf5, 0x01) + if_bond_distance_to_pad_less_than(0x4b00, 0x2823, 0x26) + label(0x01) + ai_sleep + if_random_seed_greater_than(0xfa, 0x01) + if_bond_distance_to_pad_less_than(0x6400, 0x2823, 0x26) + label(0x01) + ai_sleep + if_bond_distance_to_pad_less_than(0xc800, 0x2823, 0x26) + local_timer_reset_start + goto_first(0x06) + label(0x26) + ai_sleep + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_18[] = { + guard_flags_set_on(0x00000400) + guard_flags_set_on(0x00080000) + label(0x06) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x01) + if_bond_in_room_with_pad(0x5e00, 0x01) + goto_first(0x06) + label(0x01) + text_print_top(0x1090) + music_xtrack_play(0x00, 0x00, 0xff) + label(0x07) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x29) + if_objective_bitfield_is_set_on(0x00010000, 0x29) + if_objective_bitfield_is_set_on(0x00040000, 0x29) + if_guard_shot_from_bond_missed(0x2a) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_bond_in_room_with_pad(0x5300, 0x01) + goto_first(0x07) + label(0x01) + local_timer_reset_start + objective_bitfield_set_on(0x00200000) + text_print_top(0x0990) + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x29) + if_objective_bitfield_is_set_on(0x00010000, 0x29) + if_objective_bitfield_is_set_on(0x00040000, 0x29) + if_guard_shot_from_bond_missed(0x2a) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_bond_distance_to_pad_less_than(0x1900, 0x5200, 0x11) + if_bond_in_room_with_pad(0x5800, 0x13) + if_local_timer_greater_than(0x080700, 0x2d) + if_local_timer_greater_than(0xb00400, 0x2c) + if_local_timer_greater_than(0x580200, 0x2b) + goto_first(0x04) + label(0x2b) + if_local_timer_greater_than(0x940200, 0x01) + text_print_top(0x0c90) + label(0x01) + goto_first(0x04) + label(0x2c) + if_local_timer_greater_than(0xec0400, 0x01) + text_print_top(0x0a90) + label(0x01) + goto_first(0x04) + label(0x2d) + if_local_timer_greater_than(0x440700, 0x01) + text_print_top(0x1990) + objective_bitfield_set_on(0x00080000) + label(0x01) + goto_first(0x04) + label(0x11) + ai_sleep + text_print_top(0x0f90) + ai_sleep + goto_next(0x2a) + label(0x13) + ai_sleep + text_print_top(0x1190) + ai_sleep + goto_next(0x2a) + label(0x2a) + objective_bitfield_set_on(0x00020000) + objective_bitfield_set_on(0x00080000) + label(0x29) + text_print_top(0x0d90) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x01) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_22[] = { + guard_flags_set_on(0x00080000) + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x29) + if_objective_bitfield_is_set_on(0x00010000, 0x29) + if_objective_bitfield_is_set_on(0x00020000, 0x29) + if_guard_shot_from_bond_missed(0x2a) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + goto_first(0x04) + label(0x2a) + objective_bitfield_set_on(0x00040000) + objective_bitfield_set_on(0x00080000) + label(0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x01) + label(0x12) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x01) + goto_first(0x12) + label(0x01) + text_print_top(0x0e90) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_19[] = { + guard_flags_set_on(0x00080000) + guard_try_fire_or_aim_at_target(0x2400, 0x4600, 0x06) + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_chr_was_damaged_since_last_check(0xfd, 0x01) + if_objective_bitfield_is_set_on(0x00080000, 0x29) + goto_first(0x06) + label(0x01) + objective_bitfield_set_on(0x00010000) + objective_bitfield_set_on(0x00080000) + label(0x29) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x11) + if_chr_dying_or_dead(0x46, 0x15) + if_chr_does_not_exist(0x46, 0x15) + if_guard_is_firing(0x12) + if_guard_has_stopped_moving(0x14) + goto_first(0x29) + label(0x14) + guard_try_fire_or_aim_at_target(0x2400, 0x4600, 0x01) + label(0x01) + goto_first(0x29) + label(0x12) + if_guard_is_firing_and_using_180_range_flag(0x13) + goto_first(0x29) + label(0x13) + guard_try_fire_or_aim_at_target_update(0x0400, 0x4600, 0x01) + label(0x01) + objective_bitfield_set_on(0x00100000) + goto_first(0x29) + label(0x15) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + label(0x11) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_20[] = { + guard_flags_set_on(0x00080000) + guard_flags_set_on(0x80000000) + guard_surrenders + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00100000, 0x01) + if_chr_does_not_exist(0x47, 0x02) + if_chr_dying_or_dead(0x47, 0x02) + goto_first(0x06) + label(0x01) + chr_hit_body_part_with_item_damage(0xfd, 0x08, 0x06) + objective_bitfield_set_on(0x00400000) + jump_to_ai_list(0xfd, 0x0100) + label(0x02) + guard_looks_around_self + label(0x19) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x01) + goto_first(0x19) + label(0x01) + local_timer_reset_start + label(0x12) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x01) + goto_first(0x12) + label(0x01) + guard_walks_to_pad(0x5100) + label(0x04) + ai_sleep + if_bond_in_room_with_pad(0x6200, 0x08) + if_guard_is_on_screen(0x35) + chr_try_teleporting_to_pad(0x46, 0x5100, 0x35) + label(0x35) + ai_sleep + if_object_not_destroyed(0x2a, 0x35) + goto_next(0x0a) + label(0x35) + if_object_not_destroyed(0x29, 0x35) + goto_next(0x0a) + label(0x35) + if_game_difficulty_less_than(0x02, 0x35) + if_local_timer_greater_than(0x941100, 0x2f) + if_local_timer_greater_than(0x3c0f00, 0x2e) + label(0x35) + if_local_timer_greater_than(0xb80b00, 0x2d) + if_local_timer_greater_than(0x600900, 0x2c) + label(0x05) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x04) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x64, 0x01) + guard_play_animation(0xac00, 0x0000, 0x4500, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x01) + if_random_seed_greater_than(0x96, 0x01) + guard_play_animation(0xad00, 0x0000, 0x4a00, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x01) + if_random_seed_greater_than(0xc8, 0x01) + guard_play_animation(0xae00, 0x0000, 0x4f00, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x01) + guard_play_animation(0xaf00, 0x0000, 0x5900, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x2c) + if_local_timer_greater_than(0x9c0900, 0x01) + text_print_top(0x1490) + label(0x01) + goto_first(0x05) + label(0x2d) + if_local_timer_greater_than(0xf40b00, 0x01) + text_print_top(0x1590) + objective_bitfield_set_on(0x00000100) + label(0x01) + goto_first(0x05) + label(0x2e) + if_local_timer_greater_than(0x780f00, 0x01) + text_print_top(0x1690) + label(0x01) + goto_first(0x05) + label(0x2f) + if_local_timer_greater_than(0xd01100, 0x01) + text_print_top(0x1790) + objective_bitfield_set_on(0x00000200) + label(0x01) + goto_first(0x05) + label(0x08) + jump_to_ai_list(0xfd, 0x1604) + label(0x0a) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_27[] = { + guard_try_facing_target(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + if_objective_bitfield_is_set_on(0x00000800, 0x0a) + text_print_top(0x1a90) + local_timer_reset_start + label(0x04) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x01) + if_bond_in_room_with_pad(0x6200, 0x08) + goto_first(0x04) + label(0x01) + text_print_top(0x1b90) + label(0x05) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x0a) + if_bond_in_room_with_pad(0x6200, 0x08) + goto_first(0x05) + label(0x08) + jump_to_ai_list(0xfd, 0x1604) + label(0x0a) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_21[] = { + text_print_top(0x1890) + label(0x38) + ai_sleep + guard_try_running_to_bond_position(0x06) + goto_first(0x38) + label(0x06) + ai_sleep + if_guard_distance_to_bond_less_than(0x1900, 0x11) + if_guard_has_stopped_moving(0x08) + goto_first(0x06) + label(0x39) + goto_first(0x38) + label(0x11) + guard_animation_stop + label(0x12) + ai_sleep + if_guard_distance_to_bond_less_than(0x0800, 0x3a) + if_guard_distance_to_bond_greater_than(0x2800, 0x08) + goto_first(0x12) + label(0x3a) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x3b) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x3b) + guard_looks_around_self + goto_next(0x13) + label(0x3b) + label(0x02) + guard_raises_arms + goto_next(0x13) + label(0x13) + ai_sleep + if_guard_has_stopped_moving(0x14) + goto_first(0x13) + label(0x14) + goto_first(0x11) + label(0x08) + goto_first(0x38) + ai_list_end +}; +u8 ai_17[] = { + ai_list_end +}; +u8 ai_9[] = { + debug_log 'D', 'o', 'n', 'e', '\n', '\0', + guard_set_health_total(0x5000) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x01) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + set_return_ai_list(0x0104) + jump_to_ai_list(0xfd, 0x0104) + label(0x01) + guard_bitfield_set_on(0x01) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + ai_list_end +}; +u8 ai_10[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7000) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x3700) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x3400) + label(0x01) + guard_set_pad_preset(0x4300) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_11[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7100) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x7500) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x6e00) + label(0x01) + guard_set_pad_preset(0x7800) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_12[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7100) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x6b00) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x7700) + label(0x01) + guard_set_pad_preset(0x7800) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_13[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7500) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x7400) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x7000) + label(0x01) + guard_set_pad_preset(0x7800) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_14[] = { + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x78, 0x35) + guard_set_health_total(0x3c00) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x08) + label(0x35) + guard_set_health_total(0x5000) + guard_try_spawning_hat(0xde00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x08) + label(0x08) + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_15[] = { + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x64, 0x37) + if_random_seed_greater_than(0x32, 0x35) + guard_set_armour(0x1400) + guard_set_health_total(0x2800) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x08) + label(0x35) + guard_set_armour(0x2800) + guard_set_health_total(0x2800) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x01) + label(0x01) + guard_try_spawning_hat(0xde00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x08) + label(0x37) + guard_set_armour(0x2800) + guard_set_health_total(0x3c00) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x08) + label(0x08) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_16[] = { + guard_set_armour(0x2800) + guard_set_health_total(0x3c00) + label(0x06) + ai_sleep + if_objective_num_complete(0x00, 0x08) + goto_first(0x06) + label(0x08) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_28[] = { + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_29[] = { + label(0x06) + ai_sleep + if_bond_distance_to_pad_less_than(0x1400, 0x5200, 0x36) + if_objective_bitfield_is_set_on(0x00080000, 0x01) + if_bond_in_room_with_pad(0x5800, 0x35) + goto_first(0x06) + label(0x35) + if_objective_bitfield_is_set_on(0x00200000, 0x35) + goto_first(0x06) + label(0x35) + goto_next(0x36) + label(0x01) + local_timer_reset_start + label(0x11) + ai_sleep + if_local_timer_greater_than(0x4b0000, 0x01) + if_bond_distance_to_pad_less_than(0x1400, 0x5200, 0x01) + if_bond_in_room_with_pad(0x5800, 0x35) + goto_first(0x11) + label(0x35) + if_objective_bitfield_is_set_on(0x00200000, 0x35) + goto_first(0x11) + label(0x35) + label(0x36) + label(0x01) + local_timer_reset_start + door_close(0x00) + door_close(0x01) + label(0x14) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x01) + goto_first(0x14) + label(0x01) + door_close(0x02) + door_close(0x03) + door_close(0x04) + door_close(0x05) + door_close(0x06) + door_close(0x07) + door_close(0x2e) + label(0x12) + ai_sleep + if_door_state_equal(0x01, 0x01, 0x01) + goto_first(0x12) + label(0x01) + chr_flags_set_on(0x45, 0x10000000) + chr_flags_set_on(0x48, 0x10000000) + chr_try_teleporting_to_pad(0x45, 0xba00, 0x01) + label(0x01) + chr_try_teleporting_to_pad(0x48, 0xba00, 0x01) + label(0x01) + chr_flags_set_on(0x45, 0x00040400) + chr_flags_set_on(0x48, 0x00040400) + label(0x13) + ai_sleep + goto_first(0x13) + ai_list_end +}; +u8 ai_30[] = { + label(0x06) + ai_sleep + if_bond_distance_to_pad_less_than(0x6400, 0xaf00, 0x01) + goto_first(0x06) + label(0x01) + debug_log 'G', 'o', '\n', '\0', + random_generate_seed + if_random_seed_greater_than(0x64, 0x01) + if_bond_damage_and_pickups_disabled(0x11) + chr_try_spawning_at_pad(0x04, 0xff, 0x0a00, 0x0a04, 0x00000000, 0x11) + label(0x01) + if_random_seed_greater_than(0xc8, 0x01) + if_bond_damage_and_pickups_disabled(0x11) + chr_try_spawning_at_pad(0x04, 0xff, 0x0c00, 0x0a04, 0x00000000, 0x11) + label(0x01) + if_bond_damage_and_pickups_disabled(0x11) + chr_try_spawning_at_pad(0x04, 0xff, 0x0d00, 0x0a04, 0x00000000, 0x11) + label(0x11) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x64, 0x01) + if_bond_damage_and_pickups_disabled(0x12) + chr_try_spawning_at_pad(0x04, 0xff, 0x0900, 0x0a04, 0x00000000, 0x12) + label(0x01) + if_bond_damage_and_pickups_disabled(0x12) + chr_try_spawning_at_pad(0x04, 0xff, 0x0b00, 0x0a04, 0x00000000, 0x12) + label(0x12) + ai_sleep + if_bond_in_room_with_pad(0x9000, 0x01) + goto_first(0x12) + label(0x01) + debug_log 'p', 'o', 'p', '2', '\n', '\0', + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x4100, 0x0b04, 0x00000000, 0x01) + label(0x01) + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x3a00, 0x0c04, 0x00000000, 0x01) + label(0x01) + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x3b00, 0x0d04, 0x00000000, 0x01) + label(0x01) + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x3500, 0x0e04, 0x00000000, 0x01) + label(0x01) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x50, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_random_seed_greater_than(0xa0, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3d00, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x4200, 0x0f04, 0x00000000, 0x02) + label(0x02) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x50, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3700, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_random_seed_greater_than(0xa0, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3e00, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x4000, 0x0f04, 0x00000000, 0x02) + label(0x02) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x50, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3800, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_random_seed_greater_than(0xa0, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3f00, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3400, 0x0f04, 0x00000000, 0x02) + label(0x02) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x78, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3900, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3c00, 0x0f04, 0x00000000, 0x02) + label(0x02) + debug_log 'p', 'o', 'p', '3', '\n', '\0', + label(0x13) + ai_sleep + goto_first(0x13) + ai_list_end +}; +u8 ai_31[] = { + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x01) + goto_first(0x06) + label(0x01) + local_timer_reset_start + label(0x11) + ai_sleep + if_chr_dying_or_dead(0x46, 0x02) + if_chr_does_not_exist(0x46, 0x02) + if_chr_dying_or_dead(0x48, 0x35) + if_chr_does_not_exist(0x48, 0x35) + label(0x02) + if_local_timer_greater_than(0x840300, 0x01) + goto_first(0x11) + label(0x35) + if_local_timer_greater_than(0x080700, 0x01) + goto_first(0x11) + label(0x01) + local_timer_reset_start + text_print_top(0x1290) + label(0x12) + if_local_timer_greater_than(0x2c0100, 0x01) + ai_sleep + goto_first(0x12) + label(0x01) + text_print_top(0x1390) + hud_countdown_set(0x3c00) + hud_countdown_start + hud_countdown_show + label(0x13) + ai_sleep + if_guard_bitfield_is_set_on(0x04, 0x35) + if_hud_countdown_less_than(0x1e00, 0x14) + label(0x35) + if_guard_bitfield_is_set_on(0x02, 0x35) + if_hud_countdown_less_than(0x1700, 0x02) + label(0x35) + if_guard_bitfield_is_set_on(0x01, 0x35) + if_hud_countdown_less_than(0x1400, 0x01) + label(0x35) + if_hud_countdown_less_than(0x0000, 0x15) + goto_first(0x13) + label(0x01) + sfx_play(0x3a00, 0x00) + sfx_set_channel_volume(0x00, 0x0000, 0x100e) + guard_bitfield_set_on(0x01) + goto_first(0x13) + label(0x02) + sfx_stop_channel(0x01) + sfx_play(0xd700, 0x02) + sfx_emit_from_pad(0x02, 0x4700, 0x0000) + guard_bitfield_set_on(0x02) + goto_first(0x13) + label(0x14) + sfx_play(0xd600, 0x03) + sfx_emit_from_pad(0x03, 0x4700, 0x0000) + ai_sleep + sfx_play(0xd800, 0x01) + sfx_emit_from_pad(0x01, 0x4700, 0x0000) + guard_bitfield_set_on(0x04) + goto_first(0x13) + label(0x15) + hud_countdown_hide + objective_bitfield_set_on(0x00000800) + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; +u8 ai_32[] = { + label(0x04) + local_timer_reset_start + sfx_play(0x4000, 0xff) + if_objective_num_complete(0x00, 0x01) + goto_next(0x06) + label(0x01) + sfx_play(0x3f00, 0xff) + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x08) + if_local_timer_greater_than(0x3c0000, 0x01) + goto_first(0x06) + label(0x01) + goto_first(0x04) + label(0x08) + sfx_play(0x3d00, 0xff) + label(0x11) + ai_sleep + goto_first(0x11) + ai_list_end +}; +u8 ai_33[] = { + label(0x04) + local_timer_reset_start + random_generate_seed + if_random_seed_greater_than(0xaf, 0x2d) + if_random_seed_greater_than(0x64, 0x2c) + label(0x2b) + sfx_play(0xf900, 0xff) + goto_next(0x06) + label(0x2c) + sfx_play(0xdf00, 0xff) + goto_next(0x06) + label(0x2d) + sfx_play(0x3300, 0xff) + goto_next(0x06) + label(0x06) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfe, 0x01) + random_generate_seed + if_random_seed_greater_than(0xfa, 0x11) + if_local_timer_greater_than(0x780000, 0x01) + goto_first(0x06) + label(0x11) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfe, 0x01) + if_local_timer_greater_than(0xb40000, 0x01) + goto_first(0x11) + label(0x01) + if_objective_num_complete(0x00, 0x01) + goto_first(0x04) + label(0x01) + jump_to_ai_list(0xfd, 0x1804) + ai_list_end +}; +u8 ai_23[] = { + local_byte_2_set(0xfa) + local_byte_1_set(0x00) + label(0x11) + local_byte_1_add(0x28) + local_timer_reset_start + guard_bitfield_set_off(0x01) + if_local_byte_1_less_than(0x64, 0x04) + goto_next(0x08) + label(0x04) + ai_sleep + if_local_timer_greater_than(0x780000, 0x01) + goto_first(0x04) + label(0x01) + if_local_byte_1_less_than_random_seed(0x01) + goto_first(0x11) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0xaf, 0x2d) + if_random_seed_greater_than(0x64, 0x2c) + label(0x2b) + sfx_play(0xf900, 0xff) + goto_next(0x06) + label(0x2c) + sfx_play(0xdf00, 0xff) + goto_next(0x06) + label(0x2d) + sfx_play(0x3300, 0xff) + goto_next(0x06) + label(0x06) + goto_first(0x11) + label(0x08) + ai_sleep + objective_bitfield_set_on(0x00000400) + goto_first(0x08) + ai_list_end +}; +u8 ai_34[] = { + label(0x00) + ai_sleep + if_bond_distance_to_pad_less_than(0x3200, 0xcb00, 0x01) + goto_first(0x00) + label(0x01) + local_timer_reset_start + label(0x19) + ai_sleep + if_bond_is_dead(0x3d) + if_local_timer_greater_than(0xb40000, 0x01) + goto_first(0x19) + label(0x01) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + if_chr_does_not_exist(0x46, 0x01) + if_chr_dying_or_dead(0x46, 0x01) + objective_bitfield_set_on(0x00800000) + label(0x01) + label(0x11) + ai_sleep + if_screen_fade_completed(0x01) + goto_first(0x11) + label(0x01) + if_chr_does_not_exist(0x46, 0x3c) + if_chr_dying_or_dead(0x46, 0x3c) + if_objective_all_completed(0x01) + jump_to_ai_list(0xfd, 0x0f00) + label(0x01) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x1d, 0x0200, 0x0000) + chr_flags_set_off(0x46, 0x00040000) + jump_to_ai_list(0x46, 0x1b04) + jump_to_ai_list(0xf8, 0x1a04) + ai_sleep + ai_sleep + screen_fade_from_black + local_timer_reset_start + label(0x12) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x01) + if_local_timer_greater_than(0xf00000, 0x2f) + if_local_timer_greater_than(0xb40000, 0x2e) + if_local_timer_greater_than(0x5a0000, 0x2d) + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x12) + label(0x2c) + object_flags_1_set_off(0x19, 0x00000200) + object_destroy(0x19) + goto_first(0x12) + label(0x2d) + object_flags_1_set_off(0x1a, 0x00000200) + object_destroy(0x1a) + goto_first(0x12) + label(0x2e) + object_flags_1_set_off(0x1b, 0x00000200) + object_destroy(0x1b) + goto_first(0x12) + label(0x2f) + object_flags_1_set_off(0x1c, 0x00000200) + object_destroy(0x1c) + goto_first(0x12) + label(0x01) + screen_fade_to_black + label(0x13) + ai_sleep + if_screen_fade_completed(0x01) + goto_first(0x13) + label(0x01) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3c) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_25[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_try_teleporting_to_pad(0xfd, 0xcd00, 0x01) + label(0x01) + guard_play_animation(0x5a00, 0xffff, 0xffff, 0x06, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_26[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_try_teleporting_to_pad(0xfd, 0xcc00, 0x01) + label(0x01) + guard_play_animation(0x5a00, 0x0700, 0xffff, 0x06, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_24[] = { + local_timer_reset_start + guard_play_animation(0x6400, 0x0000, 0x0100, 0x04, 0x10) + label(0x11) + ai_sleep + if_local_timer_greater_than(0x000000, 0x01) + goto_first(0x11) + label(0x01) + guard_play_animation(0x6400, 0x0100, 0xffff, 0x04, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_35[] = { + label(0x11) + ai_sleep + if_camera_is_in_bond_swirl(0x01) + goto_first(0x11) + label(0x01) + jump_to_ai_list(0xf8, 0x1904) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_36[] = { + label(0x11) + ai_sleep + if_objective_bitfield_is_set_on(0x00000800, 0x01) + goto_first(0x11) + label(0x01) + local_timer_reset_start + label(0x12) + ai_sleep + if_local_timer_greater_than(0x660300, 0x32) + if_local_timer_greater_than(0x760200, 0x31) + if_local_timer_greater_than(0x3a0200, 0x30) + if_local_timer_greater_than(0xc20100, 0x2f) + if_local_timer_greater_than(0xd20000, 0x2e) + if_local_timer_greater_than(0x5a0000, 0x2d) + if_local_timer_greater_than(0x1e0000, 0x2c) + goto_first(0x12) + label(0x2c) + object_flags_1_set_off(0x0f, 0x00000200) + object_destroy(0x0f) + goto_first(0x12) + label(0x2d) + object_flags_1_set_off(0x10, 0x00000200) + object_destroy(0x10) + object_flags_1_set_off(0x2b, 0x00000200) + object_destroy(0x2b) + goto_first(0x12) + label(0x2e) + object_flags_1_set_off(0x11, 0x00000200) + object_destroy(0x11) + goto_first(0x12) + label(0x2f) + object_flags_1_set_off(0x12, 0x00000200) + object_destroy(0x12) + object_flags_1_set_off(0x2c, 0x00000200) + object_destroy(0x2c) + goto_first(0x12) + label(0x30) + object_flags_1_set_off(0x13, 0x00000200) + object_destroy(0x13) + goto_first(0x12) + label(0x31) + object_flags_1_set_off(0x14, 0x00000200) + object_destroy(0x14) + goto_first(0x12) + label(0x32) + object_flags_1_set_off(0x15, 0x00000200) + object_destroy(0x15) + object_flags_1_set_off(0x2d, 0x00000200) + object_destroy(0x2d) + goto_first(0x12) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_37[] = { + label(0x11) + ai_sleep + if_bond_in_room_with_pad(0x6200, 0x01) + goto_first(0x11) + label(0x01) + switch_fog_instantly + objective_bitfield_set_on(0x00001000) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_38[] = { + label(0x04) + ai_sleep + if_door_state_equal(0x1e, 0x01, 0x35) + door_unset_lock(0x1e, 0x02) + label(0x35) + if_door_state_equal(0x1f, 0x01, 0x35) + door_unset_lock(0x1f, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x20, 0x01, 0x35) + door_unset_lock(0x20, 0x02) + label(0x35) + if_door_state_equal(0x21, 0x01, 0x35) + door_unset_lock(0x21, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x22, 0x01, 0x35) + door_unset_lock(0x22, 0x02) + label(0x35) + if_door_state_equal(0x23, 0x01, 0x35) + door_unset_lock(0x23, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x24, 0x01, 0x35) + door_unset_lock(0x24, 0x02) + label(0x35) + if_door_state_equal(0x25, 0x01, 0x35) + door_unset_lock(0x25, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x26, 0x01, 0x35) + door_unset_lock(0x26, 0x02) + label(0x35) + if_door_state_equal(0x27, 0x01, 0x35) + door_unset_lock(0x27, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x28, 0x01, 0x35) + door_unset_lock(0x28, 0x02) + label(0x35) + goto_first(0x04) + ai_list_end +}; +u8 ai_39[] = { + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00002000, 0x01) + goto_first(0x06) + label(0x01) + local_timer_reset_start + label(0x11) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x01) + goto_first(0x11) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x80, 0x35) + sfx_play(0xb800, 0x07) + sfx_emit_from_object(0x07, 0x29, 0x0000) + label(0x35) + objective_bitfield_set_off(0x00002000) + goto_first(0x06) + label(0x08) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_40[] = { + label(0x06) + ai_sleep + if_chr_does_not_exist(0x46, 0x01) + goto_first(0x06) + label(0x01) + text_print_top(0x1c90) + objective_bitfield_set_on(0x00400000) + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/j/UsetupcradZ.c b/assets/obseg/setup/j/UsetupcradZ.c index 61b8aec9..8c1ffa62 100644 --- a/assets/obseg/setup/j/UsetupcradZ.c +++ b/assets/obseg/setup/j/UsetupcradZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -864,48 +865,1525 @@ PathRecord patrolpaths[] = { }; -u32 ai_34[] = { 0xad68656c, 0x6c6f0002, 0x350234ae, 0xad210a00, 0x03310129, 0x00330229, 0x33358029, 0xf329bd04, 0xff008304, 0x02000000, 0x01330229, 0xf333bd04, 0xff004f04, 0x02000000, 0x01290233, 0x02290331, 0x02290033, 0x02293335, 0x8029f329, 0xbd04ff00, 0x8a040300, 0x00000133, 0x0229f333, 0xbd04ff00, 0x08040300, 0x00000129, 0x02330229, 0x03310329, 0x00330229, 0x33358029, 0xf329bd04, 0xff001204, 0x04000000, 0x01330229, 0xf333bd04, 0xff005c04, 0x04000000, 0x01290233, 0x02290331, 0x04290033, 0x02293335, 0x8029f329, 0xbd04ff00, 0x3e040500, 0x00000133, 0x0229f333, 0xbd04ff00, 0x00040500, 0x00000129, 0x02330229, 0x03310529, 0x00330229, 0x33358029, 0xf329bd04, 0xff006e04, 0x06000000, 0x01060229, 0xf333bd04, 0xff007d04, 0x06000000, 0x01060233, 0x020603b4, 0x0002d029, 0x01060229, 0x01340400 }; -u32 ai_1[] = { 0x8e01ad68, 0x310a0005, 0xfd040104 }; -u32 ai_2[] = { 0x8e02ad68, 0x320a0005, 0xfd040104 }; -u32 ai_3[] = { 0x8e03ad68, 0x330a0005, 0xfd040104 }; -u32 ai_4[] = { 0x8e04ad68, 0x340a0005, 0xfd040104 }; -u32 ai_5[] = { 0x8e05ad68, 0x350a0005, 0xfd040104 }; -u32 ai_0[] = { 0x02293335, 0xa0363550, 0x338f0028, 0x90001491, 0x3293328d, 0xbfbf00c3, 0x09000000, 0x00290229, 0xc000dc00, 0x00000006, 0x00060233, 0x8f002890, 0x0014913c, 0x933cbf00, 0xc3098000, 0x00002902, 0x29c000de, 0x00000000, 0x290229bf, 0x00c30990, 0x00000006, 0x00060236, 0x8f002890, 0x00149150, 0x9350c000, 0xdd000000, 0x00290229, 0xbf00c309, 0x80000000, 0x290229bf, 0x00c30990, 0x00000006, 0x020605fd, 0x04070400 }; -u32 ai_6[] = { 0x02372807, 0x0207034c, 0x01c2333c, 0x3802332f, 0x39010702, 0x383c2900, 0x06023903, 0x01370229, 0x023a3335, 0x0a291a06, 0x02293532, 0x290e0602, 0x29356429, 0x11060229, 0x35962912, 0x06022935, 0xc8291400, 0x01000006, 0x02291500, 0x01000006, 0x0206032f, 0x29010602, 0x293c2900, 0x07020703, 0x01370229, 0x03013a04 }; -u32 ai_7[] = { 0x9000148f, 0x00aa9164, 0x93649264, 0x9d000002, 0x009d0000, 0x08009d00, 0x000010ab, 0x00900203, 0x1c232802, 0x07034dfd, 0x000a2328, 0x292f2901, 0x0702294d, 0xfd001e23, 0x28290103, 0x02299a00, 0x0004009d, 0x00080000, 0x05fd0413, 0x04000000 }; -u32 ai_41[] = { 0x0207039c, 0x00800000, 0x29010702, 0x299b0080, 0x00009c00, 0x00100029, 0xc3240d9a, 0x00001000, 0x01070229, 0x9c000020, 0x0029c324, 0x0e9a0000, 0x20000107, 0x02299c00, 0x00400029, 0xc3240f9a, 0x00004000, 0x01070229, 0x9c000080, 0x0029c324, 0x109a0000, 0x80000107, 0x02299c00, 0x01000029, 0xc324119a, 0x00010000, 0x01070229, 0x9c000200, 0x0029c324, 0x129a0002, 0x00000107, 0x02299c00, 0x04000029, 0xc324139a, 0x00040000, 0x01070229, 0x9c000800, 0x0029c324, 0x149a0008, 0x00000107, 0x02290107, 0x04000000 }; -u32 ai_18[] = { 0xad547374, 0x616e640a, 0x009b0200, 0x00009b01, 0x0000009e, 0x00000010, 0xad2d3e64, 0x616d6167, 0x65206f6e, 0x28737461, 0x6e64290a, 0x007efd29, 0x02290203, 0x14002100, 0x00290229, 0x0207f8fd, 0x29022903, 0x4b005006, 0x7efd2a3c, 0x089c0100, 0x00002900, 0x33022996, 0x04069a04, 0x00000002, 0x339f0000, 0x00102900, 0x33022946, 0x29f8fd29, 0x00330229, 0x9604069a, 0x04000000, 0x02330107, 0x02089f00, 0x00001029, 0x00330229, 0x33353233, 0x1a090233, 0x16000100, 0x00090209, 0x33353c0a, 0x9a020000, 0x00020af8, 0xfd290229, 0x034b0050, 0x067efd2a, 0x9c010000, 0x00290033, 0x02299604, 0x069a0400, 0x00000233, 0x9f000000, 0x10290033, 0x02294629, 0xf8fd2900, 0x3302299c, 0x02000000, 0x4c003302, 0x4c960406, 0x9a040000, 0x0002332f, 0x29010a02, 0x29010302, 0x2a9d0000, 0x0010ad3c, 0x2d64616d, 0x61676520, 0x6f666628, 0x7374616e, 0x64290a00, 0x9a008000, 0x0033353c, 0x339a0100, 0x00000233, 0x01030206, 0x05fd0411, 0x04000000 }; -u32 ai_16[] = { 0xad547275, 0x6e0a007d, 0xfd5a2905, 0xfd041002, 0x29ae9502, 0x95049508, 0x95100203, 0x1f232802, 0x07037efd, 0x2a960233, 0xb400003c, 0x08023396, 0x08330233, 0x961033b4, 0x0002580a, 0x02334dfd, 0x000a2328, 0x062f0601, 0x07020605, 0xfd041302, 0x089402ad, 0x6772656e, 0x61646521, 0x0a003335, 0x50291b00, 0xc41a2902, 0x29010702, 0x099408ad, 0x6772656e, 0x61646521, 0x0a003335, 0x50291b00, 0xc41a2902, 0x29010702, 0x0a9410ad, 0x77616c6b, 0x20617474, 0x61636b0a, 0x003c2901, 0x0702297f, 0x33290107, 0x0229c324, 0x19022901, 0x03022a9d, 0x00000010, 0xad3c2d64, 0x616d6167, 0x65206f66, 0x66287275, 0x6e290a00, 0x9a008000, 0x00010304 }; -u32 ai_20[] = { 0x1e007402, 0x08032f29, 0x01080229, 0x05fd0417, 0x04000000 }; -u32 ai_22[] = { 0x1c007602, 0x09032f29, 0x01090229, 0x020a0355, 0x00742901, 0x0a022902, 0x0b035200, 0x46007429, 0x010b0229, 0x05fd0418, 0x04000000 }; -u32 ai_21[] = { 0x0a006aff, 0xffffff06, 0x00030207, 0x0a006aff, 0xffffff44, 0x00020803, 0x46293c29, 0x2f090108, 0x02090107, 0x0229c324, 0x160a006b, 0xffffffff, 0x8610ae02, 0x0a03b400, 0x00782901, 0x0a022955, 0x00742905, 0xfd041502, 0x2905fd04, 0x17040000 }; -u32 ai_15[] = { 0xad54480a, 0x009d0000, 0x0010ad3c, 0x2d64616d, 0x61676520, 0x6f666628, 0x48290a00, 0xc32415f4, 0x0000ff1f, 0x00969164, 0x92649364, 0x0204032f, 0x29010402, 0x29550073, 0x29550074, 0x29550094, 0x2955006d, 0x29000302, 0x2905fd04, 0x150203d9, 0xfd009629, 0x05fd0415, 0x0229ad62, 0x61636b0a, 0x0005fd04, 0x16040000 }; -u32 ai_19[] = { 0xad54210a, 0x00140021, 0x00000402, 0x04030104, 0x04000000 }; -u32 ai_17[] = { 0xad547768, 0x6572650a, 0x009d0000, 0x02000203, 0x031f005c, 0x01030400 }; -u32 ai_8[] = { 0xad54410a, 0x00020403, 0x53003200, 0x3b290247, 0xac00005c, 0x97000405, 0xfd040e02, 0x29530032, 0x003e2902, 0x4833353c, 0x2aac0000, 0x91970004, 0x05fd040a, 0x022a3578, 0x2a9b0800, 0x0000ac00, 0x00019700, 0x0405fd04, 0x0b022a35, 0xb42a9b08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c022a, 0x9b080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x02299c04, 0x00000041, 0x01040241, 0x9b040000, 0x00550022, 0x42550045, 0x4355005b, 0x43333532, 0x43024201, 0x47024301, 0x48040000 }; -u32 ai_9[] = { 0xad54420a, 0x00020403, 0x53003200, 0x27290247, 0xac00004f, 0x97000405, 0xfd040f02, 0x29530032, 0x002a2902, 0x4833353c, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022a3578, 0x2a9b0800, 0x0000ac00, 0x00019700, 0x0405fd04, 0x0b022a35, 0xb42a9b08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c022a, 0x9b080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x02299c04, 0x00000041, 0x01040241, 0x9b040000, 0x0055001f, 0x42550031, 0x43550050, 0x43333532, 0x43024201, 0x47024301, 0x48040000 }; -u32 ai_10[] = { 0xad54430a, 0x00020403, 0x53003200, 0x04290247, 0x3335782a, 0xac000090, 0x97000405, 0xfd040902, 0x2aac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32000729, 0x02483335, 0x782aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0229, 0x53003200, 0x1d290249, 0x3335c83f, 0x9c080000, 0x003e023f, 0x3335782a, 0x9a080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x022a9a08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c023e, 0x01470229, 0x9c040000, 0x00410104, 0x02419b04, 0x00000055, 0x00184255, 0x001d4255, 0x00114355, 0x00134355, 0x001c4355, 0x00034455, 0x00094455, 0x001b4433, 0x357f4502, 0x42014902, 0x43333555, 0x2a9a0800, 0x0000ac00, 0x00099700, 0x0405fd04, 0x0c022a35, 0xaa2aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0244, 0x3335552a, 0x9a080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x022a35aa, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022aac00, 0x00919700, 0x0405fd04, 0x0a024501, 0x47040000 }; -u32 ai_11[] = { 0xad54440a, 0x00020403, 0x53003200, 0x0c290247, 0x3335782a, 0xac000090, 0x97000405, 0xfd040902, 0x2aac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32000f29, 0x02483335, 0x782aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0229, 0x53003200, 0x1b290249, 0x3335c83f, 0x9c080000, 0x003e023f, 0x3335782a, 0x9a080000, 0x00ac0000, 0x01970004, 0x05fd040b, 0x022a9a08, 0x000000ac, 0x00001397, 0x000405fd, 0x040d023e, 0x01470229, 0x9c040000, 0x00410104, 0x02419b04, 0x00000055, 0x00094255, 0x001b4255, 0x00034355, 0x00014355, 0x001d4355, 0x000b4455, 0x00134455, 0x001c4433, 0x357f4502, 0x42014902, 0x43333555, 0x2a9a0800, 0x0000ac00, 0x00139700, 0x0405fd04, 0x0c022a35, 0xaa2aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0244, 0x3335552a, 0x9a080000, 0x00ac0000, 0x01970004, 0x05fd040d, 0x022a35aa, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022aac00, 0x00919700, 0x0405fd04, 0x0a024501, 0x47040000 }; -u32 ai_12[] = { 0xad54450a, 0x00020403, 0x53003200, 0x16290247, 0x3335782a, 0xac000090, 0x97000405, 0xfd040902, 0x2aac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32001529, 0x02483335, 0x782aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0229, 0x53003200, 0x1c290249, 0x3335c83f, 0x9c080000, 0x003e023f, 0x3335782a, 0x9a080000, 0x00ac0000, 0x01970004, 0x05fd040b, 0x022a9a08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c023e, 0x01470229, 0x9c040000, 0x00410104, 0x02419b04, 0x00000055, 0x00134255, 0x001c4255, 0x000b4355, 0x00094355, 0x001b4355, 0x00114455, 0x00014455, 0x001d4433, 0x357f4502, 0x42014902, 0x43333555, 0x2a9a0800, 0x0000ac00, 0x00019700, 0x0405fd04, 0x0c022a35, 0xaa2aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0244, 0x3335552a, 0x9a080000, 0x00ac0000, 0x09970004, 0x05fd040d, 0x022a35aa, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022aac00, 0x00919700, 0x0405fd04, 0x0a024501, 0x47040000 }; -u32 ai_13[] = { 0xad54460a, 0x00020403, 0x53003200, 0x45290247, 0xac000091, 0x97000405, 0xfd040a02, 0x29530032, 0x00592902, 0x48ac0000, 0x90970004, 0x05fd0409, 0x02295300, 0x32006029, 0x0249ac00, 0x00909700, 0x0405fd04, 0x0902299c, 0x04000000, 0x41010402, 0x419b0400, 0x00005500, 0x44425500, 0x3e425500, 0x60435500, 0x61435500, 0x64435500, 0x50433335, 0x7f440147, 0x02420147, 0x02430148, 0x02440148, 0x04000000 }; -u32 ai_14[] = { 0xad54470a, 0x00020403, 0x53003200, 0x31290247, 0xac000090, 0x97000405, 0xfd040902, 0x29530032, 0x00542902, 0x48ac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32006429, 0x0249ac00, 0x00919700, 0x0405fd04, 0x0a02299c, 0x04000000, 0x41010402, 0x419b0400, 0x00005500, 0x31425500, 0x2a425500, 0x64435500, 0x63435500, 0x60435500, 0x5d433335, 0x7f440147, 0x02420147, 0x02430148, 0x02440148, 0x04000000 }; -u32 ai_35[] = { 0x0204035b, 0x0029002a, 0x02299c00, 0x00040029, 0x01040229, 0xc32406ae, 0x0207035b, 0x0029002a, 0x0229b400, 0x012c2901, 0x070229c3, 0x2407c400, 0xa100b700, 0xb4b9b502, 0x0b035b00, 0x29002a02, 0x29bb003c, 0x29010b02, 0x29020803, 0x5b002900, 0x2a0229bb, 0x000f2901, 0x080229c3, 0x24090209, 0x035b0029, 0x002a0229, 0xbb000029, 0x01090229, 0x9a000008, 0x00c3240a, 0xc900f500, 0xb6b8020a, 0x03010a02, 0x2ac900c3, 0x24089a00, 0x000200f5, 0x00b6b802, 0x06030106, 0x04000000 }; -u32 ai_36[] = { 0x02040331, 0x00290104, 0x02299a00, 0x00010002, 0x06030106, 0x04000000 }; -u32 ai_37[] = { 0x02040229, 0x05fd0409, 0x04000000 }; -u32 ai_23[] = { 0x9e000000, 0x109d0000, 0x80000203, 0x3c292807, 0x02070354, 0xfd009431, 0x30fd303c, 0x29010702, 0x29333540, 0x29110602, 0x2933357f, 0x29140001, 0x00000602, 0x29150001, 0x00000602, 0x060354fd, 0x00943130, 0xfd302f29, 0x01060229, 0x01030231, 0x9a100000, 0x009d0000, 0x40002202, 0x3003c324, 0x17ae020b, 0x0354fd00, 0x94310033, 0x02319a10, 0x00000002, 0x33b40000, 0x7829010b, 0x0229c324, 0x18020c03, 0x54fd0094, 0x31003302, 0x319a1000, 0x00000233, 0x010c0400 }; -u32 ai_24[] = { 0xd9fd0092, 0x290229e0, 0xfd00e0fd, 0x019d0000, 0x2000db0a, 0x00b30002, 0xffff0610, 0x0a00b300, 0x02ffff06, 0x109a8000, 0x0000ae02, 0x07039d00, 0x001000b4, 0x00012229, 0x01070229, 0xda020803, 0xdc290108, 0x0229d502, 0x00020000, 0xd9fd0092, 0x290229db, 0x0a00b300, 0x02ffff06, 0x100a00b3, 0x0002ffff, 0x06109a40, 0x000000ae, 0x0209039d, 0x00001000, 0xb4000122, 0x29010902, 0x29da020a, 0x03dc2901, 0x0a022902, 0x06d20301, 0x06040000 }; -u32 ai_25[] = { 0xd9fd0092, 0x2902290a, 0x00b4ffff, 0xffff0610, 0x039d0000, 0x1000d9fd, 0x00942902, 0x299d0000, 0x2000dbae, 0x0207039e, 0x00001000, 0x9e000000, 0x01b40000, 0x3c290107, 0x0229da02, 0x0803dc29, 0x01080229, 0xd5030002, 0x0000d9fd, 0x00922902, 0x290a00b4, 0xffffffff, 0x06100303, 0x9d000010, 0x00d9fd00, 0x94290229, 0xdbae0209, 0x039e0000, 0x10009e00, 0x000001b4, 0x00005a29, 0x01090229, 0xda020a03, 0xdc29010a, 0x02299a20, 0x00000002, 0x06030106, 0x04000000 }; -u32 ai_26[] = { 0xd9fd0095, 0x29022908, 0x02060301, 0x06040000 }; -u32 ai_39[] = { 0x02030355, 0x00922955, 0x00933001, 0x03022931, 0x00290103, 0x02299601, 0x299401ae, 0x0229b400, 0x003c2901, 0x0302299c, 0x10000000, 0x2905fd04, 0x20022905, 0xfd041d02, 0x30d6f60a, 0x29010302, 0x29d70002, 0x07035500, 0x9329d801, 0x030229d6, 0xf01a2901, 0x07022905, 0xfd041c04 }; -u32 ai_30[] = { 0xeb3decd7, 0x00e300dd, 0xeaed0303, 0x03d50100, 0x010000a1, 0xf8000004, 0x00a0f818, 0x00000005, 0xf8041905, 0xfd000102, 0x3d05fd00, 0x01040000 }; -u32 ai_31[] = { 0xeb3decd7, 0x00e300da, 0x020703dc, 0x29010702, 0x2905fd04, 0x1f023d05, 0xfd000104 }; -u32 ai_27[] = { 0xeb3decd7, 0x00e300f9, 0xda020703, 0xdc290107, 0x0229ddea, 0xed030303, 0xd5040002, 0x000005f8, 0x041a3000, 0x29310029, 0x54000074, 0x0a002902, 0x0aa10000, 0x00040005, 0x00041b02, 0x29020803, 0x9c200000, 0x00290108, 0x0229d205, 0xfd000102, 0x3d05fd00, 0x01040000 }; -u32 ai_29[] = { 0x8e000206, 0x03010604 }; -u32 ai_28[] = { 0xeb3decd7, 0x00da0207, 0x03dc2901, 0x07022931, 0x00300029, 0x0230bd08, 0xff009204, 0x1e000000, 0x10290229, 0x03033100, 0x30002902, 0x3005fd04, 0x1f0229dd, 0xeaed0303, 0x03d50400, 0x020000a1, 0x00000004, 0x00050004, 0x1a550074, 0x0a550094, 0x0aa0f800, 0x00040000, 0x29020a05, 0xf8041b02, 0x29020803, 0x9c200000, 0x00290108, 0x022905fd, 0x041f023d, 0x05fd0001, 0x04000000 }; -u32 ai_32[] = { 0xcd026c00, 0x000a0000, 0xffff0002, 0x06100207, 0x039c8000, 0x00002901, 0x070229a7, 0x05000800, 0x000a0000, 0x0002ffff, 0x06100208, 0x039c4000, 0x00002901, 0x08022965, 0x0500930a, 0x00000002, 0xffff0610, 0x0a000000, 0x02ffff06, 0x10020603, 0x01060400 }; -u32 ai_33[] = { 0xae0a0063, 0x00000001, 0x06100207, 0x03b40000, 0x14290107, 0x02290a00, 0x630001ff, 0xff061002, 0x06030106, 0x04000000 }; -u32 ai_38[] = { 0x020703cf, 0x29010702, 0x2905f804, 0x22020603, 0x01060400 }; -u32 ai_40[] = { 0x0203034e, 0x00003c27, 0x11296806, 0x0a296606, 0x02294e00, 0x003c2712, 0x2968070a, 0x29660702, 0x294e0000, 0x3c271329, 0x68080a29, 0x66080229, 0x4e00003c, 0x27142968, 0x090a2966, 0x0902294e, 0x00001427, 0x1529680a, 0x0a29660a, 0x02290103, 0x04000000 }; +u8 ai_34[] = { + debug_log 'h', 'e', 'l', 'l', 'o', '\0', + label(0x35) + label(0x34) + local_timer_reset_start + debug_log '!', '\n', '\0', + ai_sleep + if_chr_does_not_exist(0x01, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x8300, 0x0204, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x4f00, 0x0204, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x02, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x8a00, 0x0304, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x0800, 0x0304, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x03, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x1200, 0x0404, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x5c00, 0x0404, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x04, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x3e00, 0x0504, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x0000, 0x0504, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x05, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x6e00, 0x0604, 0x01000000, 0x06) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x7d00, 0x0604, 0x01000000, 0x06) + label(0x33) + label(0x06) + ai_sleep + if_local_timer_greater_than(0xd00200, 0x29) + goto_first(0x06) + label(0x29) + goto_first(0x34) + ai_list_end +}; +u8 ai_1[] = { + guard_set_chr_num(0x01) + debug_log 'h', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_2[] = { + guard_set_chr_num(0x02) + debug_log 'h', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_3[] = { + guard_set_chr_num(0x03) + debug_log 'h', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_4[] = { + guard_set_chr_num(0x04) + debug_log 'h', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_5[] = { + guard_set_chr_num(0x05) + debug_log 'h', '5', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_0[] = { + label(0x29) + random_generate_seed + if_random_seed_greater_than(0xa0, 0x36) + if_random_seed_greater_than(0x50, 0x33) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_speed_rating(0x32) + guard_set_accuracy_rating(0x32) + guard_set_grenade_probability(0xbf) + guard_try_spawning_item(0xc300, 0x09, 0x00000000, 0x29) + label(0x29) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x06) + goto_next(0x06) + label(0x33) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_speed_rating(0x3c) + guard_set_accuracy_rating(0x3c) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x29) + label(0x29) + guard_try_spawning_hat(0xde00, 0x00000000, 0x29) + label(0x29) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x06) + goto_next(0x06) + label(0x36) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x29) + label(0x29) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x29) + label(0x29) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x06) + label(0x06) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_6[] = { + label(0x37) + guard_try_running_to_bond_position(0x07) + label(0x07) + ai_sleep + if_guard_distance_to_bond_greater_than(0xc201, 0x33) + if_guard_and_bond_within_line_of_sight(0x38) + label(0x33) + if_guard_has_stopped_moving(0x39) + goto_first(0x07) + label(0x38) + if_guard_and_bond_within_line_of_sight(0x29) + goto_next(0x06) + label(0x39) + ai_sleep + goto_first(0x37) + label(0x29) + label(0x3a) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x29) + guard_try_throwing_grenade(0x06) + label(0x29) + if_random_seed_greater_than(0x32, 0x29) + guard_try_sidestepping(0x06) + label(0x29) + if_random_seed_greater_than(0x64, 0x29) + guard_try_firing_walk(0x06) + label(0x29) + if_random_seed_greater_than(0x96, 0x29) + guard_try_firing_run(0x06) + label(0x29) + if_random_seed_greater_than(0xc8, 0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x29) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x06) + label(0x29) + if_guard_and_bond_within_line_of_sight(0x29) + goto_next(0x07) + label(0x07) + ai_sleep + goto_first(0x37) + label(0x29) + ai_sleep + goto_first(0x3a) + ai_list_end +}; +u8 ai_7[] = { + guard_set_armour(0x1400) + guard_set_health_total(0xaa00) + guard_set_speed_rating(0x64) + guard_set_accuracy_rating(0x64) + guard_set_argh_rating(0x64) + guard_flags_set_on(0x00020000) + guard_flags_set_on(0x00080000) + guard_flags_set_on(0x10000000) + guard_set_pad_preset(0x9000) + label(0x03) + guard_runs_to_pad(0x2823) + label(0x07) + ai_sleep + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x29) + if_guard_has_stopped_moving(0x29) + goto_first(0x07) + label(0x29) + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0x2823, 0x29) + goto_first(0x03) + label(0x29) + objective_bitfield_set_on(0x00040000) + guard_flags_set_on(0x00000800) + jump_to_ai_list(0xfd, 0x1304) + ai_list_end +}; +u8 ai_41[] = { + label(0x07) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x29) + goto_first(0x07) + label(0x29) + objective_bitfield_set_off(0x00008000) + if_objective_bitfield_is_set_on(0x00100000, 0x29) + text_print_top(0x0d24) + objective_bitfield_set_on(0x00100000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00200000, 0x29) + text_print_top(0x0e24) + objective_bitfield_set_on(0x00200000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00400000, 0x29) + text_print_top(0x0f24) + objective_bitfield_set_on(0x00400000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00800000, 0x29) + text_print_top(0x1024) + objective_bitfield_set_on(0x00800000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000100, 0x29) + text_print_top(0x1124) + objective_bitfield_set_on(0x00000100) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000200, 0x29) + text_print_top(0x1224) + objective_bitfield_set_on(0x00000200) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000400, 0x29) + text_print_top(0x1324) + objective_bitfield_set_on(0x00000400) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000800, 0x29) + text_print_top(0x1424) + objective_bitfield_set_on(0x00000800) + goto_first(0x07) + label(0x29) + goto_first(0x07) + ai_list_end +}; +u8 ai_18[] = { + debug_log 'T', 's', 't', 'a', 'n', 'd', '\n', '\0', + objective_bitfield_set_off(0x00000002) + objective_bitfield_set_off(0x00000001) + guard_flags_set_off(0x10000000) + debug_log '-', '>', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'n', '(', 's', 't', 'a', 'n', 'd', ')', '\n', '\0', + if_chr_was_damaged_since_last_check(0xfd, 0x29) + label(0x29) + label(0x03) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x29) + label(0x29) + label(0x07) + if_chr_was_shot_since_last_check(0xfd, 0x29) + label(0x29) + ai_sleep + if_guard_distance_to_bond_less_than(0x5000, 0x06) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_guard_and_bond_within_line_of_sight(0x08) + if_objective_bitfield_is_set_on(0x00000001, 0x29) + goto_next(0x33) + label(0x29) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + if_guard_flags_is_set_on(0x10000000, 0x29) + goto_next(0x33) + label(0x29) + if_guard_shot_from_bond_missed(0x29) + if_chr_was_shot_since_last_check(0xfd, 0x29) + goto_next(0x33) + label(0x29) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + goto_first(0x07) + label(0x08) + if_guard_flags_is_set_on(0x10000000, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x32, 0x33) + guard_try_throwing_grenade(0x09) + label(0x33) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x09) + label(0x09) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x0a) + objective_bitfield_set_on(0x00000002) + label(0x0a) + if_chr_was_shot_since_last_check(0xfd, 0x29) + label(0x29) + ai_sleep + if_guard_distance_to_bond_less_than(0x5000, 0x06) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_objective_bitfield_is_set_on(0x00000001, 0x29) + goto_next(0x33) + label(0x29) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + if_guard_flags_is_set_on(0x10000000, 0x29) + goto_next(0x33) + label(0x29) + if_guard_shot_from_bond_missed(0x29) + if_chr_was_shot_since_last_check(0xfd, 0x29) + goto_next(0x33) + label(0x29) + if_objective_bitfield_is_set_on(0x00000002, 0x4c) + goto_next(0x33) + label(0x4c) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + if_guard_has_stopped_moving(0x29) + goto_first(0x0a) + label(0x29) + goto_first(0x03) + label(0x2a) + guard_flags_set_on(0x10000000) + debug_log '<', '-', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'f', 'f', '(', 's', 't', 'a', 'n', 'd', ')', '\n', '\0', + objective_bitfield_set_on(0x00008000) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x33) + objective_bitfield_set_on(0x00000001) + label(0x33) + goto_first(0x03) + label(0x06) + jump_to_ai_list(0xfd, 0x1104) + ai_list_end +}; +u8 ai_16[] = { + debug_log 'T', 'r', 'u', 'n', '\n', '\0', + if_chr_health_greater_than(0xfd, 0x5a, 0x29) + jump_to_ai_list(0xfd, 0x1004) + label(0x29) + local_timer_reset_start + guard_bitfield_set_off(0x02) + guard_bitfield_set_off(0x04) + guard_bitfield_set_off(0x08) + guard_bitfield_set_off(0x10) + label(0x03) + guard_sprints_to_pad(0x2823) + label(0x07) + ai_sleep + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_guard_bitfield_is_set_on(0x02, 0x33) + if_local_timer_greater_than(0x3c0000, 0x08) + label(0x33) + if_guard_bitfield_is_set_on(0x08, 0x33) + label(0x33) + if_guard_bitfield_is_set_on(0x10, 0x33) + if_local_timer_greater_than(0x580200, 0x0a) + label(0x33) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x06) + if_guard_has_stopped_moving(0x06) + goto_first(0x07) + label(0x06) + jump_to_ai_list(0xfd, 0x1304) + label(0x08) + guard_bitfield_set_on(0x02) + debug_log 'g', 'r', 'e', 'n', 'a', 'd', 'e', '!', '\n', '\0', + random_generate_seed + if_random_seed_greater_than(0x50, 0x29) + guard_try_dropping_item(0xc400, 0x1a, 0x29) + label(0x29) + goto_first(0x07) + label(0x09) + guard_bitfield_set_on(0x08) + debug_log 'g', 'r', 'e', 'n', 'a', 'd', 'e', '!', '\n', '\0', + random_generate_seed + if_random_seed_greater_than(0x50, 0x29) + guard_try_dropping_item(0xc400, 0x1a, 0x29) + label(0x29) + goto_first(0x07) + label(0x0a) + guard_bitfield_set_on(0x10) + debug_log 'w', 'a', 'l', 'k', ' ', 'a', 't', 't', 'a', 'c', 'k', '\n', '\0', + if_guard_and_bond_within_line_of_sight(0x29) + goto_first(0x07) + label(0x29) + if_bond_health_less_than(0x33, 0x29) + goto_first(0x07) + label(0x29) + text_print_top(0x1924) + label(0x29) + goto_first(0x03) + label(0x2a) + guard_flags_set_on(0x10000000) + debug_log '<', '-', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'f', 'f', '(', 'r', 'u', 'n', ')', '\n', '\0', + objective_bitfield_set_on(0x00008000) + goto_first(0x03) + ai_list_end +}; +u8 ai_20[] = { + guard_walks_to_pad(0x7400) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x08) + label(0x29) + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_22[] = { + guard_runs_to_pad(0x7600) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x09) + label(0x29) + label(0x0a) + ai_sleep + if_bond_in_room_with_pad(0x7400, 0x29) + goto_first(0x0a) + label(0x29) + label(0x0b) + ai_sleep + if_bond_distance_to_pad_less_than(0x4600, 0x7400, 0x29) + goto_first(0x0b) + label(0x29) + jump_to_ai_list(0xfd, 0x1804) + ai_list_end +}; +u8 ai_21[] = { + guard_play_animation(0x6a00, 0xffff, 0xffff, 0x06, 0x00) + ai_sleep + label(0x07) + guard_play_animation(0x6a00, 0xffff, 0xffff, 0x44, 0x00) + label(0x08) + ai_sleep + if_guard_shot_from_bond_missed(0x29) + if_guard_and_bond_within_line_of_sight(0x29) + if_guard_has_stopped_moving(0x09) + goto_first(0x08) + label(0x09) + goto_first(0x07) + label(0x29) + text_print_top(0x1624) + guard_play_animation(0x6b00, 0xffff, 0xffff, 0x86, 0x10) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x0a) + label(0x29) + if_bond_in_room_with_pad(0x7400, 0x29) + jump_to_ai_list(0xfd, 0x1504) + label(0x29) + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_15[] = { + debug_log 'T', 'H', '\n', '\0', + guard_flags_set_on(0x10000000) + debug_log '<', '-', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'f', 'f', '(', 'H', ')', '\n', '\0', + text_print_top(0x1524) + music_xtrack_play(0x00, 0x00, 0xff) + guard_sprints_to_pad(0x9600) + guard_set_speed_rating(0x64) + guard_set_argh_rating(0x64) + guard_set_accuracy_rating(0x64) + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x04) + label(0x29) + if_bond_in_room_with_pad(0x7300, 0x29) + if_bond_in_room_with_pad(0x7400, 0x29) + if_bond_in_room_with_pad(0x9400, 0x29) + if_bond_in_room_with_pad(0x6d00, 0x29) + goto_next(0x03) + label(0x29) + jump_to_ai_list(0xfd, 0x1504) + label(0x03) + chr_try_teleporting_to_pad(0xfd, 0x9600, 0x29) + jump_to_ai_list(0xfd, 0x1504) + label(0x29) + debug_log 'b', 'a', 'c', 'k', '\n', '\0', + jump_to_ai_list(0xfd, 0x1604) + ai_list_end +}; +u8 ai_19[] = { + debug_log 'T', '!', '\n', '\0', + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x04) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_17[] = { + debug_log 'T', 'w', 'h', 'e', 'r', 'e', '\n', '\0', + guard_flags_set_on(0x00020000) + label(0x03) + ai_sleep + guard_sprints_to_pad(0x5c00) + goto_first(0x03) + ai_list_end +}; +u8 ai_8[] = { + debug_log 'T', 'A', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x3b00, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x5c00) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0e04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x3e00, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x2a) + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + if_random_seed_greater_than(0xb4, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x2200, 0x42) + if_bond_in_room_with_pad(0x4500, 0x43) + if_bond_in_room_with_pad(0x5b00, 0x43) + random_generate_seed + if_random_seed_greater_than(0x32, 0x43) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + ai_list_end +}; +u8 ai_9[] = { + debug_log 'T', 'B', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x2700, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x4f00) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0f04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x2a00, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + if_random_seed_greater_than(0xb4, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x1f00, 0x42) + if_bond_in_room_with_pad(0x3100, 0x43) + if_bond_in_room_with_pad(0x5000, 0x43) + random_generate_seed + if_random_seed_greater_than(0x32, 0x43) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + ai_list_end +}; +u8 ai_10[] = { + debug_log 'T', 'C', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x0400, 0x29) + label(0x47) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x0700, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1d00, 0x29) + label(0x49) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3f) + if_objective_bitfield_is_set_on(0x00000008, 0x3e) + label(0x3f) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x3e) + goto_first(0x47) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x1800, 0x42) + if_bond_in_room_with_pad(0x1d00, 0x42) + if_bond_in_room_with_pad(0x1100, 0x43) + if_bond_in_room_with_pad(0x1300, 0x43) + if_bond_in_room_with_pad(0x1c00, 0x43) + if_bond_in_room_with_pad(0x0300, 0x44) + if_bond_in_room_with_pad(0x0900, 0x44) + if_bond_in_room_with_pad(0x1b00, 0x44) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x45) + label(0x42) + goto_first(0x49) + label(0x43) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x44) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x45) + goto_first(0x47) + ai_list_end +}; +u8 ai_11[] = { + debug_log 'T', 'D', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x0c00, 0x29) + label(0x47) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x0f00, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1b00, 0x29) + label(0x49) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3f) + if_objective_bitfield_is_set_on(0x00000008, 0x3e) + label(0x3f) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x3e) + goto_first(0x47) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x0900, 0x42) + if_bond_in_room_with_pad(0x1b00, 0x42) + if_bond_in_room_with_pad(0x0300, 0x43) + if_bond_in_room_with_pad(0x0100, 0x43) + if_bond_in_room_with_pad(0x1d00, 0x43) + if_bond_in_room_with_pad(0x0b00, 0x44) + if_bond_in_room_with_pad(0x1300, 0x44) + if_bond_in_room_with_pad(0x1c00, 0x44) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x45) + label(0x42) + goto_first(0x49) + label(0x43) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x44) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x45) + goto_first(0x47) + ai_list_end +}; +u8 ai_12[] = { + debug_log 'T', 'E', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x1600, 0x29) + label(0x47) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1500, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1c00, 0x29) + label(0x49) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3f) + if_objective_bitfield_is_set_on(0x00000008, 0x3e) + label(0x3f) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x3e) + goto_first(0x47) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x1300, 0x42) + if_bond_in_room_with_pad(0x1c00, 0x42) + if_bond_in_room_with_pad(0x0b00, 0x43) + if_bond_in_room_with_pad(0x0900, 0x43) + if_bond_in_room_with_pad(0x1b00, 0x43) + if_bond_in_room_with_pad(0x1100, 0x44) + if_bond_in_room_with_pad(0x0100, 0x44) + if_bond_in_room_with_pad(0x1d00, 0x44) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x45) + label(0x42) + goto_first(0x49) + label(0x43) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x44) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x45) + goto_first(0x47) + ai_list_end +}; +u8 ai_13[] = { + debug_log 'T', 'F', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x4500, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x5900, 0x29) + label(0x48) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x6000, 0x29) + label(0x49) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x4400, 0x42) + if_bond_in_room_with_pad(0x3e00, 0x42) + if_bond_in_room_with_pad(0x6000, 0x43) + if_bond_in_room_with_pad(0x6100, 0x43) + if_bond_in_room_with_pad(0x6400, 0x43) + if_bond_in_room_with_pad(0x5000, 0x43) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x44) + goto_first(0x47) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + label(0x44) + goto_first(0x48) + ai_list_end +}; +u8 ai_14[] = { + debug_log 'T', 'G', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x3100, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x5400, 0x29) + label(0x48) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x6400, 0x29) + label(0x49) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x3100, 0x42) + if_bond_in_room_with_pad(0x2a00, 0x42) + if_bond_in_room_with_pad(0x6400, 0x43) + if_bond_in_room_with_pad(0x6300, 0x43) + if_bond_in_room_with_pad(0x6000, 0x43) + if_bond_in_room_with_pad(0x5d00, 0x43) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x44) + goto_first(0x47) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + label(0x44) + goto_first(0x48) + ai_list_end +}; +u8 ai_35[] = { + label(0x04) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_objective_bitfield_is_set_on(0x00040000, 0x29) + goto_first(0x04) + label(0x29) + text_print_top(0x0624) + local_timer_reset_start + label(0x07) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_local_timer_greater_than(0x2c0100, 0x29) + goto_first(0x07) + label(0x29) + text_print_top(0x0724) + sfx_play(0xa100, 0x00) + hud_countdown_set(0xb400) + hud_countdown_start + hud_countdown_show + label(0x0b) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_hud_countdown_less_than(0x3c00, 0x29) + goto_first(0x0b) + label(0x29) + label(0x08) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_hud_countdown_less_than(0x0f00, 0x29) + goto_first(0x08) + label(0x29) + text_print_top(0x0924) + label(0x09) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_hud_countdown_less_than(0x0000, 0x29) + goto_first(0x09) + label(0x29) + objective_bitfield_set_on(0x00080000) + text_print_top(0x0a24) + sfx_stop_channel(0x00) + music_xtrack_stop(0x00) + hud_countdown_hide + hud_countdown_stop + label(0x0a) + ai_sleep + goto_first(0x0a) + label(0x2a) + sfx_stop_channel(0x00) + text_print_top(0x0824) + objective_bitfield_set_on(0x00020000) + music_xtrack_stop(0x00) + hud_countdown_hide + hud_countdown_stop + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_36[] = { + label(0x04) + ai_sleep + if_chr_does_not_exist(0x00, 0x29) + goto_first(0x04) + label(0x29) + objective_bitfield_set_on(0x00010000) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_37[] = { + label(0x04) + label(0x29) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_23[] = { + guard_flags_set_off(0x10000000) + guard_flags_set_on(0x00800000) + label(0x03) + if_guard_and_bond_within_line_of_sight(0x29) + guard_try_running_to_bond_position(0x07) + label(0x07) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + if_chr_dying_or_dead(0xfd, 0x30) + if_guard_and_bond_within_line_of_sight(0x29) + goto_first(0x07) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x40, 0x29) + guard_try_firing_walk(0x06) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x29) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + if_chr_dying_or_dead(0xfd, 0x30) + if_guard_has_stopped_moving(0x29) + goto_first(0x06) + label(0x29) + goto_first(0x03) + label(0x31) + objective_bitfield_set_on(0x00000010) + guard_flags_set_on(0x00400000) + guard_remove_fade + label(0x30) + ai_sleep + text_print_top(0x1724) + local_timer_reset_start + label(0x0b) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + goto_next(0x33) + label(0x31) + objective_bitfield_set_on(0x00000010) + label(0x33) + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x0b) + label(0x29) + text_print_top(0x1824) + label(0x0c) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + goto_next(0x33) + label(0x31) + objective_bitfield_set_on(0x00000010) + label(0x33) + goto_first(0x0c) + ai_list_end +}; +u8 ai_24[] = { + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + chr_remove_item_in_hand(0xfd, 0x00) + chr_remove_item_in_hand(0xfd, 0x01) + guard_flags_set_on(0x00200000) + screen_fade_from_black + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + objective_bitfield_set_on(0x00000080) + local_timer_reset_start + label(0x07) + ai_sleep + guard_flags_set_on(0x00100000) + if_local_timer_greater_than(0x220100, 0x29) + goto_first(0x07) + label(0x29) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x08) + label(0x29) + camera_switch(0x02, 0x0200, 0x0000) + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + screen_fade_from_black + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + objective_bitfield_set_on(0x00000040) + local_timer_reset_start + label(0x09) + ai_sleep + guard_flags_set_on(0x00100000) + if_local_timer_greater_than(0x220100, 0x29) + goto_first(0x09) + label(0x29) + screen_fade_to_black + label(0x0a) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x0a) + label(0x29) + label(0x06) + exit_level + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_25[] = { + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + guard_play_animation(0xb400, 0xffff, 0xffff, 0x06, 0x10) + ai_sleep + guard_flags_set_on(0x00100000) + chr_try_teleporting_to_pad(0xfd, 0x9400, 0x29) + label(0x29) + guard_flags_set_on(0x00200000) + screen_fade_from_black + local_timer_reset_start + label(0x07) + ai_sleep + guard_flags_set_off(0x00100000) + guard_flags_set_off(0x01000000) + if_local_timer_greater_than(0x3c0000, 0x29) + goto_first(0x07) + label(0x29) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x08) + label(0x29) + camera_switch(0x03, 0x0200, 0x0000) + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + guard_play_animation(0xb400, 0xffff, 0xffff, 0x06, 0x10) + ai_sleep + ai_sleep + guard_flags_set_on(0x00100000) + chr_try_teleporting_to_pad(0xfd, 0x9400, 0x29) + label(0x29) + screen_fade_from_black + local_timer_reset_start + label(0x09) + ai_sleep + guard_flags_set_off(0x00100000) + guard_flags_set_off(0x01000000) + if_local_timer_greater_than(0x5a0000, 0x29) + goto_first(0x09) + label(0x29) + screen_fade_to_black + label(0x0a) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x0a) + label(0x29) + objective_bitfield_set_on(0x00000020) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_26[] = { + chr_try_teleporting_to_pad(0xfd, 0x9500, 0x29) + label(0x29) + guard_animation_stop + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_39[] = { + label(0x03) + ai_sleep + if_bond_in_room_with_pad(0x9200, 0x29) + if_bond_in_room_with_pad(0x9300, 0x30) + goto_first(0x03) + label(0x29) + if_chr_does_not_exist(0x00, 0x29) + goto_first(0x03) + label(0x29) + if_guard_bitfield_is_set_on(0x01, 0x29) + guard_bitfield_set_on(0x01) + local_timer_reset_start + label(0x29) + if_local_timer_greater_than(0x3c0000, 0x29) + goto_first(0x03) + label(0x29) + if_objective_bitfield_is_set_on(0x00000010, 0x29) + jump_to_ai_list(0xfd, 0x2004) + label(0x29) + jump_to_ai_list(0xfd, 0x1d04) + label(0x30) + if_bond_y_pos_less_than(0x0af6, 0x29) + goto_first(0x03) + label(0x29) + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + label(0x07) + ai_sleep + if_bond_in_room_with_pad(0x9300, 0x29) + hud_show_all_and_unlock_controls_and_resume_mission_time + goto_first(0x03) + label(0x29) + if_bond_y_pos_less_than(0x1af0, 0x29) + goto_first(0x07) + label(0x29) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_30[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + bond_equip_item(0x00) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x01, 0x0100, 0x0000) + chr_flags_set_off(0xf8, 0x00040000) + chr_flags_set_on(0xf8, 0x00000018) + jump_to_ai_list(0xf8, 0x1904) + jump_to_ai_list(0xfd, 0x0100) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_31[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + bond_equip_item(0x00) + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x07) + label(0x29) + jump_to_ai_list(0xfd, 0x1f04) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_27[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + bond_equip_item(0x00) + bond_killed_in_action + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x07) + label(0x29) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x04, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x1a04) + if_chr_dying_or_dead(0x00, 0x29) + if_chr_does_not_exist(0x00, 0x29) + if_chr_in_room_with_pad(0x00, 0x7400, 0x0a) + goto_next(0x29) + label(0x0a) + chr_flags_set_off(0x00, 0x00040000) + jump_to_ai_list(0x00, 0x1b04) + label(0x29) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00000020, 0x29) + goto_first(0x08) + label(0x29) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_29[] = { + guard_set_chr_num(0x00) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_28[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x07) + label(0x29) + if_chr_does_not_exist(0x00, 0x30) + goto_next(0x29) + label(0x30) + chr_try_spawning_at_pad(0x08, 0xff, 0x9200, 0x1e04, 0x10000000, 0x29) + label(0x29) + ai_sleep + ai_sleep + if_chr_does_not_exist(0x00, 0x30) + goto_next(0x29) + label(0x30) + jump_to_ai_list(0xfd, 0x1f04) + label(0x29) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x04, 0x0200, 0x0000) + chr_flags_set_off(0x00, 0x00040000) + jump_to_ai_list(0x00, 0x1a04) + if_bond_in_room_with_pad(0x7400, 0x0a) + if_bond_in_room_with_pad(0x9400, 0x0a) + chr_flags_set_on(0xf8, 0x00040000) + goto_next(0x29) + label(0x0a) + jump_to_ai_list(0xf8, 0x1b04) + label(0x29) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00000020, 0x29) + goto_first(0x08) + label(0x29) + jump_to_ai_list(0xfd, 0x1f04) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_32[] = { + aircraft_rotor_speed(0x6c02, 0x0000) + guard_play_animation(0x0000, 0xffff, 0x0200, 0x06, 0x10) + label(0x07) + ai_sleep + if_objective_bitfield_is_set_on(0x00000080, 0x29) + goto_first(0x07) + label(0x29) + object_flags_2_set_off(0x05, 0x00000800) + guard_play_animation(0x0000, 0x0200, 0xffff, 0x06, 0x10) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00000040, 0x29) + goto_first(0x08) + label(0x29) + object_move_to_pad(0x05, 0x9300) + guard_play_animation(0x0000, 0x0200, 0xffff, 0x06, 0x10) + guard_play_animation(0x0000, 0x0200, 0xffff, 0x06, 0x10) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_33[] = { + local_timer_reset_start + guard_play_animation(0x6300, 0x0000, 0x0100, 0x06, 0x10) + label(0x07) + ai_sleep + if_local_timer_greater_than(0x140000, 0x29) + goto_first(0x07) + label(0x29) + guard_play_animation(0x6300, 0x0100, 0xffff, 0x06, 0x10) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_38[] = { + label(0x07) + ai_sleep + if_camera_is_in_bond_swirl(0x29) + goto_first(0x07) + label(0x29) + jump_to_ai_list(0xf8, 0x2204) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_40[] = { + label(0x03) + ai_sleep + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1127, 0x29) + if_door_state_equal(0x06, 0x0a, 0x29) + door_open(0x06) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1227, 0x29) + if_door_state_equal(0x07, 0x0a, 0x29) + door_open(0x07) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1327, 0x29) + if_door_state_equal(0x08, 0x0a, 0x29) + door_open(0x08) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1427, 0x29) + if_door_state_equal(0x09, 0x0a, 0x29) + door_open(0x09) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x1400, 0x1527, 0x29) + if_door_state_equal(0x0a, 0x0a, 0x29) + door_open(0x0a) + label(0x29) + goto_first(0x03) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/j/UsetupdestZ.c b/assets/obseg/setup/j/UsetupdestZ.c index 8bc15811..db2ca45f 100644 --- a/assets/obseg/setup/j/UsetupdestZ.c +++ b/assets/obseg/setup/j/UsetupdestZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1292,19 +1293,441 @@ PathRecord patrolpaths[] = { }; -u32 ai_1[] = { 0x21020003, 0x3c073207, 0x31fc0c01, 0x00020702, 0x0b0330fd, 0x0731fc0c, 0x010b0207, 0xc3340818, 0xfd080802, 0x0a03010a, 0x020cc334, 0x09060404, 0x05fd0404, 0x04000000 }; -u32 ai_2[] = { 0x14002400, 0xfc000200, 0x0346073c, 0x07320701, 0x000207ae, 0x020a0370, 0x0229b400, 0x00780700, 0x08022970, 0x0129b400, 0x00960700, 0x080229b4, 0x0000b407, 0x02087900, 0x0b010a02, 0x07160004, 0x00fc0702, 0x07030303, 0x030318fc, 0x080a0600, 0x0205fd00, 0x08020b03, 0x06000205, 0xfd000201, 0x0b040000 }; -u32 ai_3[] = { 0x61fd0200, 0x33352807, 0xab008f00, 0x08020735, 0x5007ab00, 0x91000802, 0x07357807, 0xab009300, 0x08020735, 0xa007ab00, 0x94000802, 0x0735c807, 0xab00a800, 0x080207ab, 0x00a90008, 0x02081c23, 0x28020a03, 0x2f044dfd, 0x00322328, 0x04462301, 0x0a0223ad, 0x210a0021, 0x02070333, 0x35dc073b, 0x072f0701, 0x070207ad, 0x496d206f, 0x6666210a, 0x00010002, 0x044dfd00, 0x3223282e, 0x07022e3c, 0x0cc3340a, 0x000d020b, 0x03010b02, 0x0c010002, 0x0d229c00, 0x00010007, 0x9a000001, 0x00000e02, 0x079c0000, 0x0200079a, 0x00000200, 0x000e0207, 0x9c000004, 0x00079a00, 0x00040000, 0x0e02079c, 0x00000800, 0x079a0000, 0x0800000e, 0x02079c00, 0x00100007, 0x9a000010, 0x00000e02, 0x07020e03, 0x010e0400 }; -u32 ai_0[] = { 0xcd026c00, 0x000a0002, 0xffff0002, 0x06000200, 0x03010004 }; -u32 ai_5[] = { 0x02000358, 0x2f000757, 0x2f080100, 0x020c0358, 0x2f000701, 0x0c0207c3, 0x340b9b00, 0x0080009a, 0x00004000, 0x000a020a, 0x03582f00, 0x07000802, 0x07010a02, 0x08c3340c, 0x9a000080, 0x009b0000, 0x4000010c, 0x04000000 }; -u32 ai_6[] = { 0xc4003c00, 0xc7000000, 0x0000020a, 0x0352005a, 0x27540755, 0x006c0755, 0x001c0755, 0x00350755, 0x006e0755, 0x001d0755, 0x00750755, 0x00660755, 0x0063079c, 0x00080000, 0x08010a02, 0x07ad2121, 0x210a00c7, 0x007fff00, 0x78000b02, 0x0b039c00, 0x08000008, 0x53008c27, 0x5407010b, 0x0207ad6f, 0x66660a00, 0xc7000000, 0x00f0010a, 0x0208ad62, 0x616e670a, 0x00a40300, 0x0200005f, 0x03c90002, 0x0c03010c, 0x04000000 }; -u32 ai_7[] = { 0x0200035d, 0x01075c01, 0x08010002, 0x0759270b, 0x02085f01, 0x000c020b, 0xc400f701, 0xc5010100, 0x009a0001, 0x0000c334, 0x0da30100, 0x02000002, 0x0c03010c, 0x04000000 }; -u32 ai_8[] = { 0x0200035d, 0x02075c02, 0x08010002, 0x0759270b, 0x02085f02, 0x000c020b, 0xc400f702, 0xc5020200, 0x009a0002, 0x0000c334, 0x0ea30200, 0x02000002, 0x0c03010c, 0x04000000 }; -u32 ai_9[] = { 0x022a039c, 0x00040000, 0x075b0107, 0x9a000400, 0x0002079c, 0x00080000, 0x075b0207, 0x9a000800, 0x00020701, 0x2a040000 }; -u32 ai_10[] = { 0x020a0355, 0x00990755, 0x00950700, 0x03020701, 0x0a020303, 0xeb2f5500, 0x99070103, 0x0207ecd7, 0x00da020e, 0x03dc0701, 0x0e0207f1, 0x0705fd00, 0x0f0207dd, 0xea590207, 0x59030759, 0x1a07591b, 0x07591c07, 0x591d0759, 0x18075919, 0x07590407, 0x59050759, 0x06075907, 0x07590807, 0x59090759, 0x0a07590b, 0x07590c07, 0x590d0759, 0x0e07590f, 0x07591007, 0x59110759, 0x12075913, 0x07591607, 0x59140759, 0x1507e404, 0x0207ed03, 0x0303d504, 0x00020000, 0x05f80405, 0xdb020f03, 0xdc07010f, 0x020705fd, 0x0001022f, 0x05fd0001, 0x04000000 }; -u32 ai_4[] = { 0xd9fd00b0, 0x070207e0, 0xfd010a00, 0x69000000, 0x1d061002, 0x0b032f07, 0x010b0207, 0xe0fd000a, 0x0069001d, 0x00a00610, 0xae020c03, 0x2f07b400, 0x00de0701, 0x0c0207da, 0x020d03dc, 0x07010d02, 0x07d20204, 0x03010404 }; -u32 ai_11[] = { 0x7101049a, 0x00000100, 0x7100049a, 0x00000200, 0x9a000004, 0x00020405, 0xfd000104 }; -u32 ai_12[] = { 0x020303a0, 0x2c001000, 0x00a02d00, 0x100000a0, 0x30001000, 0x0003a031, 0x00100000, 0xa0340010, 0x0000a035, 0x00100000, 0x022a0370, 0x0229f701, 0x07012a02, 0x29700129, 0xf7020701, 0x2a0229f7, 0x0407012a, 0x0207ae02, 0x0a03b400, 0x003c07c3, 0x341e9a00, 0x10000001, 0x0a020705, 0xfd000104 }; +u8 ai_1[] = { + guard_surrenders + label(0x00) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x07) + if_guard_sees_bond(0x07) + if_chr_does_not_exist(0xfc, 0x0c) + goto_first(0x00) + label(0x07) + label(0x0b) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x07) + if_chr_does_not_exist(0xfc, 0x0c) + goto_first(0x0b) + label(0x07) + text_print_top(0x0834) + chr_hit_body_part_with_item_damage(0xfd, 0x08, 0x08) + label(0x0a) + ai_sleep + goto_first(0x0a) + label(0x0c) + text_print_top(0x0934) + set_return_ai_list(0x0404) + jump_to_ai_list(0xfd, 0x0404) + ai_list_end +}; +u8 ai_2[] = { + guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x00) + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x07) + if_guard_and_bond_within_line_of_sight(0x07) + if_guard_sees_bond(0x07) + goto_first(0x00) + label(0x07) + local_timer_reset_start + label(0x0a) + ai_sleep + if_game_difficulty_less_than(0x02, 0x29) + if_local_timer_greater_than(0x780000, 0x07) + goto_next(0x08) + label(0x29) + if_game_difficulty_less_than(0x01, 0x29) + if_local_timer_greater_than(0x960000, 0x07) + goto_next(0x08) + label(0x29) + if_local_timer_greater_than(0xb40000, 0x07) + label(0x08) + if_guard_hits_greater_than(0x00, 0x0b) + goto_first(0x0a) + label(0x07) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x07) + label(0x07) + ai_sleep + ai_sleep + ai_sleep + ai_sleep + ai_sleep + chr_hit_body_part_with_item_damage(0xfc, 0x08, 0x0a) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + label(0x0b) + ai_sleep + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0200) + goto_first(0x0b) + ai_list_end +}; +u8 ai_3[] = { + chr_drop_all_concealed_items(0xfd) + label(0x00) + random_generate_seed + if_random_seed_greater_than(0x28, 0x07) + guard_set_pad_preset(0x8f00) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0x50, 0x07) + guard_set_pad_preset(0x9100) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0x78, 0x07) + guard_set_pad_preset(0x9300) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0xa0, 0x07) + guard_set_pad_preset(0x9400) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0xc8, 0x07) + guard_set_pad_preset(0xa800) + goto_next(0x08) + label(0x07) + guard_set_pad_preset(0xa900) + goto_next(0x08) + label(0x08) + guard_runs_to_pad(0x2823) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x04) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x04) + if_guard_shot_from_bond_missed(0x23) + goto_first(0x0a) + label(0x23) + debug_log '!', '\n', '\0', + guard_surrenders + label(0x07) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xdc, 0x07) + if_guard_see_another_guard_die(0x07) + if_guard_has_stopped_moving(0x07) + goto_first(0x07) + label(0x07) + debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0', + goto_first(0x00) + label(0x04) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x2e) + jump_to_return_ai_list + label(0x2e) + if_guard_and_bond_within_line_of_sight(0x0c) + text_print_top(0x0a34) + goto_next(0x0d) + label(0x0b) + ai_sleep + goto_first(0x0b) + label(0x0c) + goto_first(0x00) + label(0x0d) + guard_remove_fade + if_objective_bitfield_is_set_on(0x00010000, 0x07) + objective_bitfield_set_on(0x00010000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00020000, 0x07) + objective_bitfield_set_on(0x00020000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00040000, 0x07) + objective_bitfield_set_on(0x00040000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00080000, 0x07) + objective_bitfield_set_on(0x00080000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00100000, 0x07) + objective_bitfield_set_on(0x00100000) + goto_next(0x0e) + label(0x07) + label(0x0e) + ai_sleep + goto_first(0x0e) + ai_list_end +}; +u8 ai_0[] = { + aircraft_rotor_speed(0x6c02, 0x0000) + guard_play_animation(0x0200, 0xffff, 0x0200, 0x06, 0x00) + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_5[] = { + label(0x00) + ai_sleep + if_item_is_attached_to_object(0x2f, 0x00, 0x07) + if_item_is_stationary_within_level(0x2f, 0x08) + goto_first(0x00) + label(0x0c) + ai_sleep + if_item_is_attached_to_object(0x2f, 0x00, 0x07) + goto_first(0x0c) + label(0x07) + text_print_top(0x0b34) + objective_bitfield_set_off(0x00800000) + objective_bitfield_set_on(0x00400000) + goto_next(0x0a) + label(0x0a) + ai_sleep + if_item_is_attached_to_object(0x2f, 0x00, 0x07) + goto_next(0x08) + label(0x07) + goto_first(0x0a) + label(0x08) + text_print_top(0x0c34) + objective_bitfield_set_on(0x00800000) + objective_bitfield_set_off(0x00400000) + goto_first(0x0c) + ai_list_end +}; +u8 ai_6[] = { + sfx_play(0x3c00, 0x00) + sfx_set_channel_volume(0x00, 0x0000, 0x0000) + label(0x0a) + ai_sleep + if_bond_distance_to_pad_less_than(0x5a00, 0x5427, 0x07) + if_bond_in_room_with_pad(0x6c00, 0x07) + if_bond_in_room_with_pad(0x1c00, 0x07) + if_bond_in_room_with_pad(0x3500, 0x07) + if_bond_in_room_with_pad(0x6e00, 0x07) + if_bond_in_room_with_pad(0x1d00, 0x07) + if_bond_in_room_with_pad(0x7500, 0x07) + if_bond_in_room_with_pad(0x6600, 0x07) + if_bond_in_room_with_pad(0x6300, 0x07) + if_objective_bitfield_is_set_on(0x00000800, 0x08) + goto_first(0x0a) + label(0x07) + debug_log '!', '!', '!', '\n', '\0', + sfx_set_channel_volume(0x00, 0xff7f, 0x7800) + goto_next(0x0b) + label(0x0b) + ai_sleep + if_objective_bitfield_is_set_on(0x00000800, 0x08) + if_bond_distance_to_pad_greater_than(0x8c00, 0x5427, 0x07) + goto_first(0x0b) + label(0x07) + debug_log 'o', 'f', 'f', '\n', '\0', + sfx_set_channel_volume(0x00, 0x0000, 0xf000) + goto_first(0x0a) + label(0x08) + debug_log 'b', 'a', 'n', 'g', '\n', '\0', + object_flags_1_set_off(0x03, 0x00000200) + object_destroy(0x03) + sfx_stop_channel(0x00) + label(0x0c) + ai_sleep + goto_first(0x0c) + ai_list_end +}; +u8 ai_7[] = { + label(0x00) + ai_sleep + if_bond_used_gadget_on_object(0x01, 0x07) + if_object_was_activated(0x01, 0x08) + goto_first(0x00) + label(0x07) + if_bond_has_item_equipped(0x27, 0x0b) + label(0x08) + object_destroy(0x01) + goto_next(0x0c) + label(0x0b) + sfx_play(0xf700, 0x01) + sfx_emit_from_object(0x01, 0x01, 0x0000) + objective_bitfield_set_on(0x00000100) + text_print_top(0x0d34) + object_flags_1_set_on(0x01, 0x00000200) + label(0x0c) + ai_sleep + goto_first(0x0c) + ai_list_end +}; +u8 ai_8[] = { + label(0x00) + ai_sleep + if_bond_used_gadget_on_object(0x02, 0x07) + if_object_was_activated(0x02, 0x08) + goto_first(0x00) + label(0x07) + if_bond_has_item_equipped(0x27, 0x0b) + label(0x08) + object_destroy(0x02) + goto_next(0x0c) + label(0x0b) + sfx_play(0xf700, 0x02) + sfx_emit_from_object(0x02, 0x02, 0x0000) + objective_bitfield_set_on(0x00000200) + text_print_top(0x0e34) + object_flags_1_set_on(0x02, 0x00000200) + label(0x0c) + ai_sleep + goto_first(0x0c) + ai_list_end +}; +u8 ai_9[] = { + label(0x2a) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x07) + if_object_not_destroyed(0x01, 0x07) + objective_bitfield_set_on(0x00000400) + label(0x07) + if_objective_bitfield_is_set_on(0x00000800, 0x07) + if_object_not_destroyed(0x02, 0x07) + objective_bitfield_set_on(0x00000800) + label(0x07) + goto_first(0x2a) + ai_list_end +}; +u8 ai_10[] = { + label(0x0a) + ai_sleep + if_bond_in_room_with_pad(0x9900, 0x07) + if_bond_in_room_with_pad(0x9500, 0x07) + goto_next(0x03) + label(0x07) + goto_first(0x0a) + label(0x03) + ai_sleep + if_bond_is_dead(0x2f) + if_bond_in_room_with_pad(0x9900, 0x07) + goto_first(0x03) + label(0x07) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x0e) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0e) + label(0x07) + if_objective_all_completed(0x07) + jump_to_ai_list(0xfd, 0x0f00) + label(0x07) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + if_bond_has_item_equipped(0x02, 0x07) + if_bond_has_item_equipped(0x03, 0x07) + if_bond_has_item_equipped(0x1a, 0x07) + if_bond_has_item_equipped(0x1b, 0x07) + if_bond_has_item_equipped(0x1c, 0x07) + if_bond_has_item_equipped(0x1d, 0x07) + if_bond_has_item_equipped(0x18, 0x07) + if_bond_has_item_equipped(0x19, 0x07) + if_bond_has_item_equipped(0x04, 0x07) + if_bond_has_item_equipped(0x05, 0x07) + if_bond_has_item_equipped(0x06, 0x07) + if_bond_has_item_equipped(0x07, 0x07) + if_bond_has_item_equipped(0x08, 0x07) + if_bond_has_item_equipped(0x09, 0x07) + if_bond_has_item_equipped(0x0a, 0x07) + if_bond_has_item_equipped(0x0b, 0x07) + if_bond_has_item_equipped(0x0c, 0x07) + if_bond_has_item_equipped(0x0d, 0x07) + if_bond_has_item_equipped(0x0e, 0x07) + if_bond_has_item_equipped(0x0f, 0x07) + if_bond_has_item_equipped(0x10, 0x07) + if_bond_has_item_equipped(0x11, 0x07) + if_bond_has_item_equipped(0x12, 0x07) + if_bond_has_item_equipped(0x13, 0x07) + if_bond_has_item_equipped(0x16, 0x07) + if_bond_has_item_equipped(0x14, 0x07) + if_bond_has_item_equipped(0x15, 0x07) + bond_equip_item_cinema(0x04) + label(0x07) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x04, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x0504) + screen_fade_from_black + label(0x0f) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0f) + label(0x07) + jump_to_ai_list(0xfd, 0x0100) + label(0x2f) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_4[] = { + chr_try_teleporting_to_pad(0xfd, 0xb000, 0x07) + label(0x07) + chr_remove_item_in_hand(0xfd, 0x01) + guard_play_animation(0x6900, 0x0000, 0x1d00, 0x06, 0x10) + label(0x0b) + ai_sleep + if_guard_has_stopped_moving(0x07) + goto_first(0x0b) + label(0x07) + chr_remove_item_in_hand(0xfd, 0x00) + guard_play_animation(0x6900, 0x1d00, 0xa000, 0x06, 0x10) + local_timer_reset_start + label(0x0c) + ai_sleep + if_guard_has_stopped_moving(0x07) + if_local_timer_greater_than(0xde0000, 0x07) + goto_first(0x0c) + label(0x07) + screen_fade_to_black + label(0x0d) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0d) + label(0x07) + exit_level + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_11[] = { + if_game_difficulty_greater_than(0x01, 0x04) + objective_bitfield_set_on(0x00010000) + if_game_difficulty_greater_than(0x00, 0x04) + objective_bitfield_set_on(0x00020000) + objective_bitfield_set_on(0x00040000) + label(0x04) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_12[] = { + label(0x03) + ai_sleep + chr_flags_set_on(0x2c, 0x00001000) + chr_flags_set_on(0x2d, 0x00001000) + chr_flags_set_on(0x30, 0x00001000) + ai_sleep + chr_flags_set_on(0x31, 0x00001000) + chr_flags_set_on(0x34, 0x00001000) + chr_flags_set_on(0x35, 0x00001000) + label(0x2a) + ai_sleep + if_game_difficulty_less_than(0x02, 0x29) + if_killed_civilians_greater_than(0x01, 0x07) + goto_first(0x2a) + label(0x29) + if_game_difficulty_less_than(0x01, 0x29) + if_killed_civilians_greater_than(0x02, 0x07) + goto_first(0x2a) + label(0x29) + if_killed_civilians_greater_than(0x04, 0x07) + goto_first(0x2a) + label(0x07) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x07) + text_print_top(0x1e34) + objective_bitfield_set_on(0x00001000) + goto_first(0x0a) + label(0x07) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/j/UsetupjunZ.c b/assets/obseg/setup/j/UsetupjunZ.c index 1cbfe200..a7a0e7d9 100644 --- a/assets/obseg/setup/j/UsetupjunZ.c +++ b/assets/obseg/setup/j/UsetupjunZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -2267,44 +2268,1182 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x04000000 }; -u32 ai_31[] = { 0x02040330, 0x002c3100, 0x2c010402, 0x2cf5009a, 0x00000100, 0x02060301, 0x06040000 }; -u32 ai_1[] = { 0x9001908f, 0x00649164, 0x93649264, 0x9d000002, 0x009d0000, 0x08000208, 0x033c2c42, 0x2c010802, 0x2cc3481e, 0xf40000ff, 0x05fd0403, 0x04000000 }; -u32 ai_2[] = { 0xad58202d, 0x206d6100, 0x02030306, 0x04033335, 0x3c364551, 0x02363c3d, 0x023105fd, 0x04050251, 0x05fd0406, 0x023d05fd, 0x04040400 }; -u32 ai_3[] = { 0xad58202d, 0x20617400, 0x02033335, 0x802c4551, 0x7f3f3d33, 0x022c3528, 0x2c130602, 0x2c35502c, 0x1106022c, 0x35782c02, 0x3d120602, 0x2c35a02c, 0x14000100, 0x0006022c, 0x35c82c15, 0x00010000, 0x06022c35, 0xe12c1500, 0x2100002c, 0x022c1400, 0x2100002c, 0x022c0303, 0x03160001, 0x00000602, 0x06032f2c, 0x0106022c, 0x05fd0403, 0x02510604, 0x0405fd04, 0x06040000 }; -u32 ai_5[] = { 0xad58202d, 0x20657600, 0x02030333, 0x022c3335, 0x3c2c0f06, 0x022c3335, 0x782c0e06, 0x022c3335, 0xb42c1006, 0x022c0a00, 0x0b001400, 0x3c001000, 0x06020603, 0x2f2c0106, 0x022c0704 }; -u32 ai_4[] = { 0xad58202d, 0x20676f00, 0x0203282c, 0x022c0208, 0x032f063c, 0x06455101, 0x08025106, 0x040505fd, 0x04060206, 0x06040305, 0xfd040304 }; -u32 ai_7[] = { 0x9000508f, 0x00509d00, 0x00080002, 0x0303ce2c, 0xcf2c0006, 0x022c0103, 0x0206c348, 0x1c05fd04, 0x07040000 }; -u32 ai_6[] = { 0xad666f6c, 0x00910a9d, 0x00000040, 0x0201034b, 0x00960828, 0x09010102, 0x09032f06, 0x4b004b08, 0x01090208, 0x03333580, 0x06036f02, 0x2c6f042c, 0x6f082c08, 0x05fd040c, 0x022cad66, 0x726f6c69, 0x63001d02, 0x0a032f06, 0x4c00fa06, 0x01090206, 0x05fd0409, 0x02070400 }; -u32 ai_8[] = { 0xad6d646b, 0x00eb2602, 0x03510064, 0x26035100, 0xc82c0351, 0x012c2c05, 0xfd040c02, 0x2c40fc36, 0x00070236, 0x33358036, 0x14002400, 0xfc3d0236, 0x15002400, 0xfc3d1700, 0x0400fc2c, 0x022cae02, 0x0d03b400, 0x003c2c01, 0x0d022c40, 0xfc360007, 0x02360103, 0x023d97fc, 0x80ae020b, 0x0330fc4b, 0xb400003c, 0x2c010b02, 0x2c160004, 0x00fc2c02, 0x2c020c30, 0xfc4b31fc, 0x4b03b400, 0x012c2c2f, 0x2c010c02, 0x2c333580, 0x2c010302, 0x2c020798, 0xfc8005fd, 0x0407024b, 0x05fd040a, 0x022605fd, 0x040b0400 }; -u32 ai_9[] = { 0x98fc809c, 0x00000200, 0x367f3307, 0x02363303, 0x353c0633, 0x03350a2c, 0xc3480800, 0x06022c35, 0x142cc348, 0x09000602, 0x2c351e2c, 0xc3480a00, 0x06022c35, 0x282cc348, 0x0b000602, 0x2c35322c, 0xc3480c00, 0x06022c35, 0x3c2cc348, 0x0d000602, 0x2c35462c, 0xc3480e00, 0x06022c35, 0x502cc348, 0x0f000602, 0x2c355a2c, 0xc3481000, 0x06022c35, 0x642cc348, 0x11000602, 0x2c356e2c, 0xc3481200, 0x06022c35, 0x782cc348, 0x13000602, 0x2c35822c, 0xc3481400, 0x06022c35, 0x8c2cc348, 0x15000602, 0x2c35962c, 0xc3481600, 0x06022c35, 0xa02cc348, 0x17000602, 0x2c35aa2c, 0xc3481800, 0x06022c35, 0xb42cc348, 0x19000602, 0x2c35be2c, 0xc3481a00, 0x06022c02, 0x0605fd04, 0x070207c3, 0x481d9a00, 0x00020001, 0x06040000 }; -u32 ai_11[] = { 0xad736361, 0x6e009100, 0x33353c2c, 0x0a009600, 0x00005600, 0x10000802, 0x2c35782c, 0x0a009700, 0x00005600, 0x10000802, 0x2c358c2c, 0x0a005300, 0x00002200, 0x10003602, 0x2c35a02c, 0x0a005400, 0x00002400, 0x10003602, 0x2c35b42c, 0x0a006300, 0x00009500, 0x10000802, 0x2c036e02, 0x2c6e042c, 0x6e082c6e, 0x012cab02, 0x02022c91, 0x0035c82c, 0x15012823, 0x28360036, 0x022c35dc, 0x2c140128, 0x23283600, 0x36022c17, 0x00082328, 0x36003602, 0x08032f06, 0x01080236, 0xae020903, 0xb4000078, 0x06010902, 0x0605fd04, 0x07040000 }; -u32 ai_10[] = { 0xad657661, 0x64009114, 0x97fc8033, 0x35800a0a, 0x000b0014, 0x003c0210, 0x0208032f, 0x2c010802, 0x2c020a15, 0x002400fc, 0x3d023dae, 0x020b0330, 0xfc4bb400, 0x003c2c01, 0x0b022c4f, 0x0019fc09, 0x16000400, 0xfc2c022c, 0x020c03b4, 0x00012c2c, 0x2f2c010c, 0x022c30fc, 0x4b333580, 0x2c010802, 0x2c020798, 0xfc8005fd, 0x0407024b, 0x05fd040a, 0x0209032f, 0x2ce72c01, 0x09022c16, 0x000400fc, 0x2c05fd04, 0x07022c03, 0x19fdfc08, 0xad636865, 0x61700098, 0xfc80020d, 0x032f2c01, 0x0d022c05, 0xfd040704 }; -u32 ai_12[] = { 0x02040330, 0xfd332f3b, 0x0104023b, 0x324e3e4f, 0x3f4d4650, 0x3a4d3b4d, 0x0b2c3335, 0x012c0604, 0x0d05fd00, 0x03022c01, 0x04025033, 0x357f4e06, 0x040d05fd, 0x040f024e, 0x06040d05, 0xfd040e02, 0x4f06040d, 0x05fd0410, 0x024d0604, 0x0d05fd00, 0x0b023305, 0xfd000104 }; -u32 ai_13[] = { 0x96012c33, 0x35202c0c, 0x94010702, 0x2c94011a, 0x06022c03, 0x31012c30, 0x012c0333, 0x35642c4f, 0x0050012a, 0x96802a02, 0x08022c4c, 0x00964f33, 0x350a2c13, 0x06022c33, 0x350a2c0f, 0x06022c33, 0x35192c0e, 0x06022c33, 0x35322c10, 0x06022c33, 0x35402c11, 0x06022c35, 0x7f2c1206, 0x022c3335, 0x7f3e1400, 0x01000006, 0x023e1500, 0x01000006, 0x02060702, 0x2a034001, 0x36000702, 0x3606040e, 0x05fd041c, 0x02070108, 0x024f0604, 0x0d05fd04, 0x10040000 }; -u32 ai_14[] = { 0x0d020403, 0x2f060104, 0x020605fd, 0x04100400 }; -u32 ai_15[] = { 0x94012804, 0x07020403, 0x2f3b324e, 0x0104024e, 0x4b009636, 0x01040236, 0x05fd040e, 0x023b0704 }; -u32 ai_27[] = { 0xad676574, 0x204e00a9, 0x01039e00, 0x00004033, 0x3580039d, 0x00000040, 0x02030331, 0xfc4b30fc, 0x4b40fc36, 0x00070236, 0x33358036, 0x14002400, 0xfc3d0236, 0x15002400, 0xfc3d1700, 0x0400fc2c, 0x022cae02, 0x0d03b400, 0x003c2c01, 0x0d022c00, 0x07023601, 0x03023daa, 0x01fdae02, 0x0b03b400, 0x003c2c01, 0x0b022c16, 0x000400fc, 0x2c022c02, 0x0c30fc4b, 0x032f2c01, 0x0c022c02, 0x07022602, 0x06039e00, 0x00004007, 0x024b0604, 0x0d05fd04, 0x10040000 }; -u32 ai_16[] = { 0x94014c00, 0xfa4d414d, 0x05fd0410, 0x024d31f9, 0x4d05fd04, 0x0d024dc1, 0xfd04122c, 0x05fd0410, 0x022c05fd, 0x040d0400 }; -u32 ai_17[] = { 0x06040d05, 0xfd041004 }; -u32 ai_18[] = { 0x90001402, 0x03140021, 0x00000402, 0x0403462c, 0x3a2c3b2c, 0x322c3c2c, 0x0104022c, 0x3335962c, 0x16000100, 0x0008022c, 0x09ae0209, 0x033335fa, 0x2cb40000, 0xf0060109, 0x022c1400, 0x2100002c, 0x022c1600, 0x0100002c, 0x022c0208, 0x032f0601, 0x08020601, 0x03040000 }; -u32 ai_32[] = { 0x02040331, 0x012c0104, 0x022cc348, 0x1f9a0000, 0x04000206, 0x03010604 }; -u32 ai_33[] = { 0x020303eb, 0x4c5501d4, 0x2c010302, 0x2c9a0004, 0x0000ecd7, 0x00da0208, 0x03dc2c01, 0x08022c31, 0x014b3001, 0x4bf12c05, 0xfd000f02, 0x2cddeadf, 0x1fdf2059, 0x042c5905, 0x2c59062c, 0x59072c59, 0x082c5909, 0x2c590a2c, 0x590b2c59, 0x0c2c590d, 0x2c590e2c, 0x590f2c59, 0x102c5911, 0x2c59122c, 0x59132c59, 0x162c5914, 0x2c59152c, 0xe404022c, 0xed030303, 0xd51e0002, 0x0000a101, 0x00000400, 0xa0010480, 0x0000d901, 0x024f2c02, 0x2c050104, 0x1ea0f804, 0x800000d9, 0xf802502c, 0x022c05f8, 0x041f0303, 0xdbf40100, 0xff05fd00, 0x01024bd2, 0x05fd0001, 0x024c05fd, 0x00010400 }; -u32 ai_30[] = { 0xa0fd0000, 0x0010a0fd, 0x00000080, 0x0a005aff, 0xffffff06, 0x1059042c, 0x59052c59, 0x062c5907, 0x2c59082c, 0x59092c59, 0x0a2c590b, 0x2c590c2c, 0x590d2c59, 0x0e2c590f, 0x2c59102c, 0x59112c59, 0x122c5913, 0x2c59162c, 0x59142c59, 0x152ce0fd, 0x00e0fd01, 0xbf00bf04, 0x00000000, 0x2c022c02, 0x08035401, 0x01d42c01, 0x08022cae, 0x020903b4, 0x00001e2c, 0x0109022c, 0x14002802, 0x4f2c022c, 0x16000802, 0x4f2c022c, 0xae020a03, 0xb400005a, 0x2c010a02, 0x2c671f02, 0x0b03b400, 0x00962c01, 0x0b022cda, 0x020c03dc, 0x2c010c02, 0x2cd205fd, 0x00010400 }; -u32 ai_29[] = { 0xa0fd0000, 0x0010a0fd, 0x00000080, 0x0a005a00, 0x07ffff06, 0x10020803, 0x540101d4, 0x2c010802, 0x2cae0209, 0x03b40000, 0x0a2c0109, 0x022c1500, 0x2802502c, 0x022c1600, 0x0802502c, 0x022c05fd, 0x00010400 }; -u32 ai_37[] = { 0xae020903, 0xb4000258, 0x2c010902, 0x2ca40300, 0x0200005f, 0x03020a03, 0xb40002d0, 0x2c010a02, 0x2ca40400, 0x0200005f, 0x04020b03, 0xb400030c, 0x2c010b02, 0x2ca40500, 0x0200005f, 0x0505fd00, 0x01040000 }; -u32 ai_34[] = { 0x02040355, 0x01c82c01, 0x04022c9a, 0x00000800, 0x0237aead, 0x210a0003, 0x31272c00, 0x36022c9c, 0x00001000, 0x36f336bd, 0x00ff01d3, 0x04140000, 0x00002c02, 0x36022c03, 0x31282c00, 0x36022c9c, 0x00002000, 0x36f336bd, 0x00ff01d3, 0x04150000, 0x00002c02, 0x36022c03, 0x31292c00, 0x36022c9c, 0x00004000, 0x36f336bd, 0x00ff01d3, 0x04160000, 0x00002c02, 0x36022c03, 0x311d2c00, 0x36022c9c, 0x00008000, 0x36f336bd, 0x00ff01d3, 0x04170000, 0x00002c02, 0x36022c03, 0x31222c00, 0x36022c9c, 0x00010000, 0x36f336bd, 0x00ff01d3, 0x04180000, 0x00002c02, 0x36022c03, 0x311e2c00, 0x36022c9c, 0x00020000, 0x36f336bd, 0x00ff01d3, 0x04190000, 0x00002c02, 0x36020603, 0x9c000008, 0x00360007, 0x0236b400, 0x00782c55, 0x01d20755, 0x01b90701, 0x06022c01, 0x370207ad, 0x73706177, 0x6e206f66, 0x66009b00, 0x00080001, 0x04040000 }; -u32 ai_19[] = { 0x8e273335, 0xc836ab02, 0x49002c02, 0x36ab01cb, 0x022cad31, 0x380a0005, 0xfd041a04 }; -u32 ai_20[] = { 0x8e283335, 0xc836ab02, 0x4a002c02, 0x36ab01ca, 0x022cad31, 0x390a0005, 0xfd041a04 }; -u32 ai_21[] = { 0x8e293335, 0xc836ab02, 0x4b002c02, 0x36ab01c7, 0x022cad32, 0x300a0005, 0xfd041a04 }; -u32 ai_22[] = { 0x8e1d3335, 0xc836ab02, 0x41002c02, 0x36ab01c8, 0x022cad31, 0x300a0005, 0xfd041a04 }; -u32 ai_23[] = { 0x8e223335, 0xc836ab02, 0x42002c02, 0x36ab01c9, 0x022cad31, 0x310a0005, 0xfd041a04 }; -u32 ai_24[] = { 0x8e1e3335, 0xc836ab02, 0x47002c02, 0x36ab01c4, 0x022cad32, 0x300a0005, 0xfd041a04 }; -u32 ai_25[] = { 0xc000d900, 0x00000004, 0x0204bf00, 0xbc0d0000, 0x00000402, 0x04000602, 0x06060002, 0x05fd041b, 0x04000000 }; -u32 ai_26[] = { 0x02031f23, 0x28030208, 0x032f2c4b, 0x0064074d, 0xfd000a23, 0x28060108, 0x022c034b, 0x0064074d, 0xfd000a23, 0x28060103, 0x020605fd, 0x04130207, 0x06040d05, 0xfd041004 }; -u32 ai_35[] = { 0x0208039c, 0x00000800, 0x2c010802, 0x2cae9b00, 0x0010009b, 0x00002000, 0x9b000040, 0x009b0000, 0x80009b00, 0x0100009b, 0x00020000, 0x0209039c, 0x00000800, 0x36000602, 0x36b4002a, 0x302c0109, 0x022cad72, 0x616d7020, 0x646f776e, 0x2031009a, 0x00008000, 0x9a000100, 0x009a0002, 0x0000020a, 0x039c0000, 0x08003600, 0x060236b4, 0x008ca02c, 0x010a022c, 0xad72616d, 0x7020646f, 0x776e2032, 0x009a0000, 0x10009a00, 0x0020009a, 0x00004000, 0x02069b00, 0x00080001, 0x08040000 }; -u32 ai_28[] = { 0x0a006700, 0x00000104, 0x10ae0208, 0x03b40000, 0x3c2c0108, 0x022c0a00, 0x670001ff, 0xff041005, 0xfd000104 }; -u32 ai_36[] = { 0x020803cf, 0x2c010802, 0x2c05f804, 0x1d020603, 0x01060400 }; +u8 ai_0[] = { + ai_list_end +}; +u8 ai_31[] = { + label(0x04) + ai_sleep + if_chr_dying_or_dead(0x00, 0x2c) + if_chr_does_not_exist(0x00, 0x2c) + goto_first(0x04) + label(0x2c) + music_xtrack_stop(0x00) + objective_bitfield_set_on(0x00010000) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_1[] = { + guard_set_armour(0x9001) + guard_set_health_total(0x6400) + guard_set_speed_rating(0x64) + guard_set_accuracy_rating(0x64) + guard_set_argh_rating(0x64) + guard_flags_set_on(0x00020000) + guard_flags_set_on(0x00080000) + label(0x08) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2c) + if_guard_is_on_screen(0x2c) + goto_first(0x08) + label(0x2c) + text_print_top(0x1e48) + music_xtrack_play(0x00, 0x00, 0xff) + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_2[] = { + debug_log 'X', ' ', '-', ' ', 'm', 'a', '\0', + label(0x03) + ai_sleep + set_return_ai_list(0x0304) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x36) + if_guard_is_targeted_by_bond(0x51) + label(0x36) + if_guard_and_bond_within_line_of_sight(0x3d) + label(0x31) + jump_to_ai_list(0xfd, 0x0504) + label(0x51) + jump_to_ai_list(0xfd, 0x0604) + label(0x3d) + jump_to_ai_list(0xfd, 0x0404) + ai_list_end +}; +u8 ai_3[] = { + debug_log 'X', ' ', '-', ' ', 'a', 't', '\0', + label(0x03) + random_generate_seed + if_random_seed_greater_than(0x80, 0x2c) + if_guard_is_targeted_by_bond(0x51) + if_bond_health_less_than(0x3f, 0x3d) + random_generate_seed + label(0x2c) + if_random_seed_greater_than(0x28, 0x2c) + guard_try_firing_roll(0x06) + label(0x2c) + if_random_seed_greater_than(0x50, 0x2c) + guard_try_firing_walk(0x06) + label(0x2c) + if_random_seed_greater_than(0x78, 0x2c) + label(0x3d) + guard_try_firing_run(0x06) + label(0x2c) + if_random_seed_greater_than(0xa0, 0x2c) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x2c) + if_random_seed_greater_than(0xc8, 0x2c) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x2c) + if_random_seed_greater_than(0xe1, 0x2c) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x2c) + label(0x2c) + ai_sleep + ai_sleep + ai_sleep + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x06) + label(0x2c) + jump_to_ai_list(0xfd, 0x0304) + label(0x51) + set_return_ai_list(0x0404) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_5[] = { + debug_log 'X', ' ', '-', ' ', 'e', 'v', '\0', + label(0x03) + ai_sleep + random_generate_seed + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2c) + guard_try_hopping_sideways(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2c) + guard_try_sidestepping(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0xb4, 0x2c) + guard_try_running_to_side(0x06) + label(0x2c) + guard_play_animation(0x0b00, 0x1400, 0x3c00, 0x00, 0x10) + goto_next(0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x06) + label(0x2c) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_4[] = { + debug_log 'X', ' ', '-', ' ', 'g', 'o', '\0', + label(0x03) + guard_try_running_to_bond_position(0x2c) + label(0x2c) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_guard_and_bond_within_line_of_sight(0x06) + if_guard_is_targeted_by_bond(0x51) + goto_first(0x08) + label(0x51) + set_return_ai_list(0x0504) + jump_to_ai_list(0xfd, 0x0604) + label(0x06) + set_return_ai_list(0x0304) + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_7[] = { + guard_set_armour(0x5000) + guard_set_health_total(0x5000) + guard_flags_set_on(0x00080000) + label(0x03) + ai_sleep + if_camera_is_in_intro(0x2c) + if_camera_is_in_bond_swirl(0x2c) + goto_next(0x06) + label(0x2c) + goto_first(0x03) + label(0x06) + text_print_top(0x1c48) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_6[] = { + debug_log 'f', 'o', 'l', '\0', + guard_set_speed_rating(0x0a) + guard_flags_set_on(0x40000000) + label(0x01) + ai_sleep + if_guard_distance_to_bond_less_than(0x9600, 0x08) + guard_try_running_to_bond_position(0x09) + goto_first(0x01) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_guard_distance_to_bond_less_than(0x4b00, 0x08) + goto_first(0x09) + label(0x08) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x80, 0x06) + ai_sleep + guard_try_unknown6F(0x02, 0x2c) + guard_try_unknown6F(0x04, 0x2c) + guard_try_unknown6F(0x08, 0x2c) + guard_animation_stop + jump_to_ai_list(0xfd, 0x0c04) + label(0x2c) + debug_log 'f', 'r', 'o', 'l', 'i', 'c', '\0', + guard_runs_to_pad_preset + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_guard_distance_to_bond_greater_than(0xfa00, 0x06) + goto_first(0x09) + label(0x06) + jump_to_ai_list(0xfd, 0x0904) + label(0x07) + ai_list_end +}; +u8 ai_8[] = { + debug_log 'm', 'd', 'k', '\0', + if_bond_is_dead(0x26) + label(0x03) + guard_try_setting_chr_preset_to_guard_within_distance(0x6400, 0x26) + ai_sleep + guard_try_setting_chr_preset_to_guard_within_distance(0xc800, 0x2c) + ai_sleep + guard_try_setting_chr_preset_to_guard_within_distance(0x2c01, 0x2c) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2c) + if_guard_in_room_with_chr(0xfc, 0x36) + goto_next(0x07) + label(0x36) + random_generate_seed + if_random_seed_greater_than(0x80, 0x36) + guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x3d) + label(0x36) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0xfc00, 0x3d) + guard_try_facing_target(0x0400, 0xfc00, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0d) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0d) + label(0x2c) + if_guard_in_room_with_chr(0xfc, 0x36) + goto_next(0x07) + label(0x36) + goto_first(0x03) + label(0x3d) + chr_bitfield_set_on(0xfc, 0x80) + local_timer_reset_start + label(0x0b) + ai_sleep + if_chr_dying_or_dead(0xfc, 0x4b) + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0b) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + label(0x2c) + label(0x0c) + if_chr_dying_or_dead(0xfc, 0x4b) + if_chr_does_not_exist(0xfc, 0x4b) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + if_guard_has_stopped_moving(0x2c) + goto_first(0x0c) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x80, 0x2c) + goto_first(0x03) + label(0x2c) + label(0x07) + chr_bitfield_set_off(0xfc, 0x80) + jump_to_ai_list(0xfd, 0x0704) + label(0x4b) + jump_to_ai_list(0xfd, 0x0a04) + label(0x26) + jump_to_ai_list(0xfd, 0x0b04) + ai_list_end +}; +u8 ai_9[] = { + chr_bitfield_set_off(0xfc, 0x80) + if_objective_bitfield_is_set_on(0x00020000, 0x36) + if_bond_health_less_than(0x33, 0x07) + label(0x36) + random_generate_seed + ai_sleep + if_random_seed_greater_than(0x3c, 0x06) + random_generate_seed + ai_sleep + if_random_seed_greater_than(0x0a, 0x2c) + text_print_top(0x0848) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x14, 0x2c) + text_print_top(0x0948) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x1e, 0x2c) + text_print_top(0x0a48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x28, 0x2c) + text_print_top(0x0b48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x32, 0x2c) + text_print_top(0x0c48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x3c, 0x2c) + text_print_top(0x0d48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x46, 0x2c) + text_print_top(0x0e48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x50, 0x2c) + text_print_top(0x0f48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x5a, 0x2c) + text_print_top(0x1048) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x64, 0x2c) + text_print_top(0x1148) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x6e, 0x2c) + text_print_top(0x1248) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x78, 0x2c) + text_print_top(0x1348) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x82, 0x2c) + text_print_top(0x1448) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x8c, 0x2c) + text_print_top(0x1548) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x96, 0x2c) + text_print_top(0x1648) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xa0, 0x2c) + text_print_top(0x1748) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xaa, 0x2c) + text_print_top(0x1848) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xb4, 0x2c) + text_print_top(0x1948) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xbe, 0x2c) + text_print_top(0x1a48) + goto_next(0x06) + label(0x2c) + label(0x06) + jump_to_ai_list(0xfd, 0x0704) + label(0x07) + text_print_top(0x1d48) + objective_bitfield_set_on(0x00020000) + goto_first(0x06) + ai_list_end +}; +u8 ai_11[] = { + debug_log 's', 'c', 'a', 'n', '\0', + guard_set_speed_rating(0x00) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2c) + guard_play_animation(0x9600, 0x0000, 0x5600, 0x00, 0x10) + goto_next(0x08) + label(0x2c) + if_random_seed_greater_than(0x78, 0x2c) + guard_play_animation(0x9700, 0x0000, 0x5600, 0x00, 0x10) + goto_next(0x08) + label(0x2c) + if_random_seed_greater_than(0x8c, 0x2c) + guard_play_animation(0x5300, 0x0000, 0x2200, 0x00, 0x10) + goto_next(0x36) + label(0x2c) + if_random_seed_greater_than(0xa0, 0x2c) + guard_play_animation(0x5400, 0x0000, 0x2400, 0x00, 0x10) + goto_next(0x36) + label(0x2c) + if_random_seed_greater_than(0xb4, 0x2c) + guard_play_animation(0x6300, 0x0000, 0x9500, 0x00, 0x10) + goto_next(0x08) + label(0x2c) + ai_sleep + guard_try_unknown6E(0x02, 0x2c) + guard_try_unknown6E(0x04, 0x2c) + guard_try_unknown6E(0x08, 0x2c) + guard_try_unknown6E(0x01, 0x2c) + guard_set_pad_preset(0x0202) + label(0x2c) + guard_set_speed_rating(0x00) + if_random_seed_greater_than(0xc8, 0x2c) + guard_try_fire_or_aim_at_target_kneel(0x2801, 0x2823, 0x36) + goto_next(0x36) + label(0x2c) + if_random_seed_greater_than(0xdc, 0x2c) + guard_try_fire_or_aim_at_target(0x2801, 0x2823, 0x36) + goto_next(0x36) + label(0x2c) + guard_try_facing_target(0x0800, 0x2823, 0x36) + goto_next(0x36) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x06) + goto_first(0x08) + label(0x36) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x780000, 0x06) + goto_first(0x09) + label(0x06) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_10[] = { + debug_log 'e', 'v', 'a', 'd', '\0', + guard_set_speed_rating(0x14) + chr_bitfield_set_on(0xfc, 0x80) + random_generate_seed + if_random_seed_greater_than(0x80, 0x0a) + guard_play_animation(0x0b00, 0x1400, 0x3c00, 0x02, 0x10) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x08) + label(0x2c) + label(0x0a) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0xfc00, 0x3d) + label(0x3d) + local_timer_reset_start + label(0x0b) + ai_sleep + if_chr_dying_or_dead(0xfc, 0x4b) + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0b) + label(0x2c) + if_guard_distance_to_chr_less_than(0x1900, 0xfc, 0x09) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + label(0x2c) + label(0x0c) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + if_guard_has_stopped_moving(0x2c) + goto_first(0x0c) + label(0x2c) + if_chr_dying_or_dead(0xfc, 0x4b) + random_generate_seed + if_random_seed_greater_than(0x80, 0x2c) + goto_first(0x08) + label(0x2c) + label(0x07) + chr_bitfield_set_off(0xfc, 0x80) + jump_to_ai_list(0xfd, 0x0704) + label(0x4b) + jump_to_ai_list(0xfd, 0x0a04) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x2c) + if_guard_is_firing_and_using_180_range_flag(0x2c) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + jump_to_ai_list(0xfd, 0x0704) + label(0x2c) + ai_sleep + chr_hit_chr_body_part_with_held_item(0xfd, 0xfc, 0x08) + debug_log 'c', 'h', 'e', 'a', 'p', '\0', + chr_bitfield_set_off(0xfc, 0x80) + label(0x0d) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0d) + label(0x2c) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_12[] = { + label(0x04) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x33) + if_guard_has_stopped_moving(0x3b) + goto_first(0x04) + label(0x3b) + if_guard_sees_bond(0x4e) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x4f) + if_guard_heard_bond_within_last_10_secs(0x4d) + if_guard_shot_from_bond_missed(0x50) + if_guard_see_another_guard_shot(0x4d) + if_guard_see_another_guard_die(0x4d) + if_guard_playing_animation(0x2c) + random_generate_seed + if_random_seed_greater_than(0x01, 0x2c) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0300) + label(0x2c) + goto_first(0x04) + label(0x50) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x4e) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0f04) + label(0x4e) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0e04) + label(0x4f) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + label(0x4d) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0b00) + label(0x33) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_13[] = { + if_guard_bitfield_is_set_on(0x01, 0x2c) + random_generate_seed + if_random_seed_greater_than(0x20, 0x2c) + guard_points_at_bond + guard_bitfield_set_on(0x01) + jump_to_return_ai_list + label(0x2c) + guard_bitfield_set_on(0x01) + guard_try_throwing_grenade(0x06) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x01, 0x2c) + if_chr_dying_or_dead(0x01, 0x2c) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x64, 0x2c) + if_guard_distance_to_chr_less_than(0x5000, 0x01, 0x2a) + if_guard_bitfield_is_set_on(0x80, 0x2a) + label(0x08) + label(0x2c) + if_guard_distance_to_bond_greater_than(0x9600, 0x4f) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x2c) + guard_try_firing_roll(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x2c) + guard_try_hopping_sideways(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x19, 0x2c) + guard_try_sidestepping(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x32, 0x2c) + guard_try_running_to_side(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x40, 0x2c) + guard_try_firing_walk(0x06) + label(0x2c) + if_random_seed_greater_than(0x7f, 0x2c) + guard_try_firing_run(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x3e) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x3e) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + jump_to_return_ai_list + label(0x2a) + ai_sleep + if_guard_in_room_with_chr(0x01, 0x36) + goto_next(0x07) + label(0x36) + set_return_ai_list(0x0e04) + jump_to_ai_list(0xfd, 0x1c04) + label(0x07) + goto_first(0x08) + label(0x4f) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_14[] = { + guard_looks_around_self + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x06) + goto_first(0x04) + label(0x06) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_15[] = { + guard_bitfield_set_on(0x01) + guard_try_running_to_bond_position(0x04) + jump_to_return_ai_list + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x3b) + if_guard_sees_bond(0x4e) + goto_first(0x04) + label(0x4e) + if_guard_distance_to_bond_less_than(0x9600, 0x36) + goto_first(0x04) + label(0x36) + jump_to_ai_list(0xfd, 0x0e04) + label(0x3b) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_27[] = { + debug_log 'g', 'e', 't', ' ', 'N', '\0', + guard_set_chr_preset(0x01) + ai_sleep + guard_flags_set_off(0x40000000) + random_generate_seed + if_random_seed_greater_than(0x80, 0x03) + guard_flags_set_on(0x40000000) + label(0x03) + ai_sleep + if_chr_does_not_exist(0xfc, 0x4b) + if_chr_dying_or_dead(0xfc, 0x4b) + if_guard_in_room_with_chr(0xfc, 0x36) + goto_next(0x07) + label(0x36) + random_generate_seed + if_random_seed_greater_than(0x80, 0x36) + guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x3d) + label(0x36) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0xfc00, 0x3d) + guard_try_facing_target(0x0400, 0xfc00, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0d) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0d) + label(0x2c) + goto_next(0x07) + label(0x36) + goto_first(0x03) + label(0x3d) + chr_set_chr_preset(0x01, 0xfd) + local_timer_reset_start + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0b) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + label(0x2c) + label(0x0c) + if_chr_dying_or_dead(0xfc, 0x4b) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0c) + label(0x2c) + label(0x07) + label(0x26) + label(0x06) + ai_sleep + guard_flags_set_off(0x40000000) + jump_to_return_ai_list + label(0x4b) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_16[] = { + guard_bitfield_set_on(0x01) + if_guard_distance_to_bond_greater_than(0xfa00, 0x4d) + if_guard_has_not_been_seen(0x4d) + jump_to_ai_list(0xfd, 0x1004) + label(0x4d) + if_chr_does_not_exist(0xf9, 0x4d) + jump_to_ai_list(0xfd, 0x0d04) + label(0x4d) + chr_try_spawning_clone(0xfd, 0x1204, 0x2c) + jump_to_ai_list(0xfd, 0x1004) + label(0x2c) + jump_to_ai_list(0xfd, 0x0d04) + ai_list_end +}; +u8 ai_17[] = { + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_18[] = { + guard_set_armour(0x1400) + label(0x03) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x04) + label(0x04) + ai_sleep + if_guard_shot_from_bond_missed(0x2c) + if_guard_see_another_guard_shot(0x2c) + if_guard_see_another_guard_die(0x2c) + if_guard_sees_bond(0x2c) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_first(0x04) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x96, 0x2c) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x08) + label(0x2c) + guard_kneel + local_timer_reset_start + label(0x09) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x2c) + if_local_timer_greater_than(0xf00000, 0x06) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x2c) + label(0x2c) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x06) + goto_first(0x08) + label(0x06) + goto_first(0x03) + ai_list_end +}; +u8 ai_32[] = { + label(0x04) + ai_sleep + if_chr_does_not_exist(0x01, 0x2c) + goto_first(0x04) + label(0x2c) + text_print_top(0x1f48) + objective_bitfield_set_on(0x00040000) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_33[] = { + label(0x03) + ai_sleep + if_bond_is_dead(0x4c) + if_bond_in_room_with_pad(0xd401, 0x2c) + goto_first(0x03) + label(0x2c) + objective_bitfield_set_on(0x00000400) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x08) + label(0x2c) + if_chr_does_not_exist(0x01, 0x4b) + if_chr_dying_or_dead(0x01, 0x4b) + if_objective_all_completed(0x2c) + jump_to_ai_list(0xfd, 0x0f00) + label(0x2c) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + door_open_instant(0x1f) + door_open_instant(0x20) + if_bond_has_item_equipped(0x04, 0x2c) + if_bond_has_item_equipped(0x05, 0x2c) + if_bond_has_item_equipped(0x06, 0x2c) + if_bond_has_item_equipped(0x07, 0x2c) + if_bond_has_item_equipped(0x08, 0x2c) + if_bond_has_item_equipped(0x09, 0x2c) + if_bond_has_item_equipped(0x0a, 0x2c) + if_bond_has_item_equipped(0x0b, 0x2c) + if_bond_has_item_equipped(0x0c, 0x2c) + if_bond_has_item_equipped(0x0d, 0x2c) + if_bond_has_item_equipped(0x0e, 0x2c) + if_bond_has_item_equipped(0x0f, 0x2c) + if_bond_has_item_equipped(0x10, 0x2c) + if_bond_has_item_equipped(0x11, 0x2c) + if_bond_has_item_equipped(0x12, 0x2c) + if_bond_has_item_equipped(0x13, 0x2c) + if_bond_has_item_equipped(0x16, 0x2c) + if_bond_has_item_equipped(0x14, 0x2c) + if_bond_has_item_equipped(0x15, 0x2c) + bond_equip_item_cinema(0x04) + label(0x2c) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x1e, 0x0200, 0x0000) + chr_flags_set_off(0x01, 0x00040000) + chr_flags_set_on(0x01, 0x00008004) + chr_try_teleporting_to_pad(0x01, 0x4f02, 0x2c) + label(0x2c) + jump_to_ai_list(0x01, 0x1e04) + chr_flags_set_on(0xf8, 0x00008004) + chr_try_teleporting_to_pad(0xf8, 0x5002, 0x2c) + label(0x2c) + jump_to_ai_list(0xf8, 0x1f04) + ai_sleep + ai_sleep + screen_fade_from_black + music_xtrack_play(0x01, 0x00, 0xff) + jump_to_ai_list(0xfd, 0x0100) + label(0x4b) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x4c) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_30[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_flags_set_on(0xfd, 0x80000000) + guard_play_animation(0x5a00, 0xffff, 0xffff, 0x06, 0x10) + if_bond_has_item_equipped(0x04, 0x2c) + if_bond_has_item_equipped(0x05, 0x2c) + if_bond_has_item_equipped(0x06, 0x2c) + if_bond_has_item_equipped(0x07, 0x2c) + if_bond_has_item_equipped(0x08, 0x2c) + if_bond_has_item_equipped(0x09, 0x2c) + if_bond_has_item_equipped(0x0a, 0x2c) + if_bond_has_item_equipped(0x0b, 0x2c) + if_bond_has_item_equipped(0x0c, 0x2c) + if_bond_has_item_equipped(0x0d, 0x2c) + if_bond_has_item_equipped(0x0e, 0x2c) + if_bond_has_item_equipped(0x0f, 0x2c) + if_bond_has_item_equipped(0x10, 0x2c) + if_bond_has_item_equipped(0x11, 0x2c) + if_bond_has_item_equipped(0x12, 0x2c) + if_bond_has_item_equipped(0x13, 0x2c) + if_bond_has_item_equipped(0x16, 0x2c) + if_bond_has_item_equipped(0x14, 0x2c) + if_bond_has_item_equipped(0x15, 0x2c) + chr_remove_item_in_hand(0xfd, 0x00) + chr_remove_item_in_hand(0xfd, 0x01) + guard_try_spawning_item(0xbf00, 0x04, 0x00000000, 0x2c) + label(0x2c) + label(0x08) + ai_sleep + if_chr_in_room_with_pad(0x01, 0xd401, 0x2c) + goto_first(0x08) + label(0x2c) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x1e0000, 0x2c) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2800, 0x4f02, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0800, 0x4f02, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x5a0000, 0x2c) + goto_first(0x0a) + label(0x2c) + door_close(0x1f) + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x960000, 0x2c) + goto_first(0x0b) + label(0x2c) + screen_fade_to_black + label(0x0c) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x0c) + label(0x2c) + exit_level + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_29[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_flags_set_on(0xfd, 0x80000000) + guard_play_animation(0x5a00, 0x0700, 0xffff, 0x06, 0x10) + label(0x08) + ai_sleep + if_chr_in_room_with_pad(0x01, 0xd401, 0x2c) + goto_first(0x08) + label(0x2c) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x0a0000, 0x2c) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target_kneel(0x2800, 0x5002, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0800, 0x5002, 0x2c) + label(0x2c) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_37[] = { + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x580200, 0x2c) + goto_first(0x09) + label(0x2c) + object_flags_1_set_off(0x03, 0x00000200) + object_destroy(0x03) + label(0x0a) + ai_sleep + if_local_timer_greater_than(0xd00200, 0x2c) + goto_first(0x0a) + label(0x2c) + object_flags_1_set_off(0x04, 0x00000200) + object_destroy(0x04) + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x0c0300, 0x2c) + goto_first(0x0b) + label(0x2c) + object_flags_1_set_off(0x05, 0x00000200) + object_destroy(0x05) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_34[] = { + label(0x04) + ai_sleep + if_bond_in_room_with_pad(0xc801, 0x2c) + goto_first(0x04) + label(0x2c) + objective_bitfield_set_on(0x00080000) + label(0x37) + local_timer_reset_start + debug_log '!', '\n', '\0', + ai_sleep + if_chr_does_not_exist(0x27, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00100000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1404, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x28, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00200000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1504, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x29, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00400000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1604, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x1d, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00800000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1704, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x22, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00000100, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1804, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x1e, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00000200, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1904, 0x00000000, 0x2c) + label(0x36) + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x36) + goto_next(0x07) + label(0x36) + if_local_timer_greater_than(0x780000, 0x2c) + if_bond_in_room_with_pad(0xd201, 0x07) + if_bond_in_room_with_pad(0xb901, 0x07) + goto_first(0x06) + label(0x2c) + goto_first(0x37) + label(0x07) + debug_log 's', 'p', 'a', 'w', 'n', ' ', 'o', 'f', 'f', '\0', + objective_bitfield_set_off(0x00080000) + goto_first(0x04) + ai_list_end +}; +u8 ai_19[] = { + guard_set_chr_num(0x27) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4902) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xcb01) + label(0x2c) + debug_log '1', '8', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_20[] = { + guard_set_chr_num(0x28) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4a02) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xca01) + label(0x2c) + debug_log '1', '9', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_21[] = { + guard_set_chr_num(0x29) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4b02) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc701) + label(0x2c) + debug_log '2', '0', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_22[] = { + guard_set_chr_num(0x1d) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4102) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc801) + label(0x2c) + debug_log '1', '0', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_23[] = { + guard_set_chr_num(0x22) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4202) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc901) + label(0x2c) + debug_log '1', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_24[] = { + guard_set_chr_num(0x1e) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4702) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc401) + label(0x2c) + debug_log '2', '0', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_25[] = { + guard_try_spawning_hat(0xd900, 0x00000000, 0x04) + label(0x04) + guard_try_spawning_item(0xbc00, 0x0d, 0x00000000, 0x04) + label(0x04) + goto_next(0x06) + label(0x06) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x1b04) + ai_list_end +}; +u8 ai_26[] = { + label(0x03) + guard_sprints_to_pad(0x2823) + ai_sleep + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2c) + if_guard_distance_to_bond_less_than(0x6400, 0x07) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x06) + goto_first(0x08) + label(0x2c) + ai_sleep + if_guard_distance_to_bond_less_than(0x6400, 0x07) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x06) + goto_first(0x03) + label(0x06) + jump_to_ai_list(0xfd, 0x1304) + label(0x07) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_35[] = { + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x2c) + goto_first(0x08) + label(0x2c) + local_timer_reset_start + objective_bitfield_set_off(0x00100000) + objective_bitfield_set_off(0x00200000) + objective_bitfield_set_off(0x00400000) + objective_bitfield_set_off(0x00800000) + objective_bitfield_set_off(0x00000100) + objective_bitfield_set_off(0x00000200) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x36) + goto_next(0x06) + label(0x36) + if_local_timer_greater_than(0x302a00, 0x2c) + goto_first(0x09) + label(0x2c) + debug_log 'r', 'a', 'm', 'p', ' ', 'd', 'o', 'w', 'n', ' ', '1', '\0', + objective_bitfield_set_on(0x00800000) + objective_bitfield_set_on(0x00000100) + objective_bitfield_set_on(0x00000200) + label(0x0a) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x36) + goto_next(0x06) + label(0x36) + if_local_timer_greater_than(0xa08c00, 0x2c) + goto_first(0x0a) + label(0x2c) + debug_log 'r', 'a', 'm', 'p', ' ', 'd', 'o', 'w', 'n', ' ', '2', '\0', + objective_bitfield_set_on(0x00100000) + objective_bitfield_set_on(0x00200000) + objective_bitfield_set_on(0x00400000) + label(0x06) + objective_bitfield_set_off(0x00080000) + goto_first(0x08) + ai_list_end +}; +u8 ai_28[] = { + guard_play_animation(0x6700, 0x0000, 0x0100, 0x04, 0x10) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x08) + label(0x2c) + guard_play_animation(0x6700, 0x0100, 0xffff, 0x04, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_36[] = { + label(0x08) + ai_sleep + if_camera_is_in_bond_swirl(0x2c) + goto_first(0x08) + label(0x2c) + jump_to_ai_list(0xf8, 0x1d04) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/j/UsetuplenZ.c b/assets/obseg/setup/j/UsetuplenZ.c index f0eb4327..fe336228 100644 --- a/assets/obseg/setup/j/UsetuplenZ.c +++ b/assets/obseg/setup/j/UsetuplenZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -798,15 +799,122 @@ PathRecord patrolpaths[] = { }; -u32 ai_not_used_0[] = { 0x04000000 }; +u8 ai_not_used_0[] = { + ai_list_end +}; -u32 ai_1[] = { 0xd9fd002d, 0x2c022c0a, 0x00b6ffff, 0xffff0600, 0x05fd0001, 0x04000000 }; -u32 ai_3[] = { 0x02030a00, 0xb6009e00, 0xfa442005, 0xfd000104 }; -u32 ai_4[] = { 0x02030a00, 0xb60103ff, 0xff442005, 0xfd000104 }; -u32 ai_2[] = { 0xf20009d9, 0xfd002c2c, 0x0209ad62, 0x320a00d9, 0xfd002f2c, 0x022c0a00, 0xb5ffffff, 0xff060002, 0x08032f2c, 0x0108022c, 0x3335dc2c, 0x0a00b500, 0x9e00fa44, 0x20050004, 0x03010802, 0x2c0a00b5, 0x0103ffff, 0x44200500, 0x04040108, 0x04000000 }; -u32 ai_5[] = { 0x03d701ed, 0x030303ee, 0x012c0064, 0x0012002e, 0xffba1c71, 0xa0f80001, 0x0000a000, 0x00010000, 0xa0f80002, 0x0000a000, 0x00020000, 0x05f80402, 0x05000401, 0x0303db02, 0x0b03dc2c, 0x010b022c, 0xae020f03, 0xb400001e, 0x2c010f02, 0x2cc35008, 0xae020c03, 0xb40000b4, 0x2c010c02, 0x2cc35009, 0xae020d03, 0xb40000b4, 0x2c010d02, 0x2cc3500a, 0xae020e03, 0xb400012c, 0x2c010e02, 0x2cef0208, 0x03f02c01, 0x08022cda, 0x020903dc, 0x2c010902, 0x2c020a03, 0xd2010a04 }; +u8 ai_1[] = { + chr_try_teleporting_to_pad(0xfd, 0x2d00, 0x2c) + label(0x2c) + guard_play_animation(0xb600, 0xffff, 0xffff, 0x06, 0x00) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_3[] = { + label(0x03) + guard_play_animation(0xb600, 0x9e00, 0xfa00, 0x44, 0x20) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_4[] = { + label(0x03) + guard_play_animation(0xb600, 0x0301, 0xffff, 0x44, 0x20) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_2[] = { + if_folder_actor_is_equal(0x00, 0x09) + chr_try_teleporting_to_pad(0xfd, 0x2c00, 0x2c) + label(0x09) + debug_log 'b', '2', '\n', '\0', + chr_try_teleporting_to_pad(0xfd, 0x2f00, 0x2c) + label(0x2c) + guard_play_animation(0xb500, 0xffff, 0xffff, 0x06, 0x00) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x08) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0xdc, 0x2c) + guard_play_animation(0xb500, 0x9e00, 0xfa00, 0x44, 0x20) + jump_to_ai_list(0x00, 0x0304) + goto_first(0x08) + label(0x2c) + guard_play_animation(0xb500, 0x0301, 0xffff, 0x44, 0x20) + jump_to_ai_list(0x00, 0x0404) + goto_first(0x08) + ai_list_end +}; +u8 ai_5[] = { + ai_sleep + hud_hide_and_lock_controls_and_pause_mission_time(0x01) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_orbit_pad(0x2c01, 0x6400, 0x1200, 0x2e00, 0xbaff, 0x711c) + chr_flags_set_on(0xf8, 0x00000100) + chr_flags_set_on(0x00, 0x00000100) + chr_flags_set_on(0xf8, 0x00000200) + chr_flags_set_on(0x00, 0x00000200) + jump_to_ai_list(0xf8, 0x0204) + jump_to_ai_list(0x00, 0x0104) + ai_sleep + ai_sleep + screen_fade_from_black + label(0x0b) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x0b) + label(0x2c) + local_timer_reset_start + label(0x0f) + ai_sleep + if_local_timer_greater_than(0x1e0000, 0x2c) + goto_first(0x0f) + label(0x2c) + text_print_top(0x0850) + local_timer_reset_start + label(0x0c) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x2c) + goto_first(0x0c) + label(0x2c) + text_print_top(0x0950) + local_timer_reset_start + label(0x0d) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x2c) + goto_first(0x0d) + label(0x2c) + text_print_top(0x0a50) + local_timer_reset_start + label(0x0e) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0x0e) + label(0x2c) + credits_roll + label(0x08) + ai_sleep + if_credits_has_completed(0x2c) + goto_first(0x08) + label(0x2c) + screen_fade_to_black + label(0x09) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x09) + label(0x2c) + label(0x0a) + ai_sleep + exit_level + goto_first(0x0a) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/j/UsetupsiloZ.c b/assets/obseg/setup/j/UsetupsiloZ.c index 990a08cb..5efef829 100644 --- a/assets/obseg/setup/j/UsetupsiloZ.c +++ b/assets/obseg/setup/j/UsetupsiloZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1481,38 +1482,689 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x200005fd, 0x00070400 }; -u32 ai_1[] = { 0x200105fd, 0x00070400 }; -u32 ai_2[] = { 0x200205fd, 0x00070400 }; -u32 ai_3[] = { 0x200305fd, 0x00070400 }; -u32 ai_4[] = { 0x200405fd, 0x00070400 }; -u32 ai_5[] = { 0x200505fd, 0x00070400 }; -u32 ai_6[] = { 0x200605fd, 0x00070400 }; -u32 ai_7[] = { 0x200705fd, 0x00070400 }; -u32 ai_8[] = { 0x200805fd, 0x00070400 }; -u32 ai_9[] = { 0x200905fd, 0x00070400 }; -u32 ai_10[] = { 0x200a05fd, 0x00070400 }; -u32 ai_11[] = { 0x200b05fd, 0x00070400 }; -u32 ai_12[] = { 0x200c05fd, 0x00070400 }; -u32 ai_13[] = { 0x200d05fd, 0x00070400 }; -u32 ai_14[] = { 0x200e05fd, 0x00070400 }; -u32 ai_15[] = { 0x02000346, 0x1f2f3c01, 0x00023c46, 0x1f3a1f3b, 0x20321703, 0x39153e15, 0x3f153c16, 0x023d0396, 0x80132f03, 0x01000213, 0x42230100, 0x02230604, 0x1005fd00, 0x04020379, 0x00200100, 0x02040100, 0x02153335, 0x40180100, 0x02181016, 0x01000216, 0x47401748, 0xc0174b00, 0x0a170100, 0x02173335, 0xc81b451b, 0x0100021b, 0x4b00641f, 0x79002006, 0x041005fd, 0x0411021f, 0x06041005, 0xfd041202, 0x20333540, 0x24060410, 0x05fd0413, 0x0224ad49, 0x66206f6e, 0x6c792049, 0x20686164, 0x20612067, 0x756e2121, 0x210a001a, 0x25010002, 0x25032f01, 0x01250201, 0x01000400 }; -u32 ai_16[] = { 0x0200032f, 0x1c010002, 0x1c333596, 0x1d333500, 0x1e000102, 0x1d0e0102, 0x1e100102, 0x01032f03, 0x01010203, 0x3c160702, 0x16476e17, 0x4891174b, 0x000a1707, 0x0217011c, 0x04000000 }; -u32 ai_17[] = { 0x02000333, 0x35fd2046, 0x20001f02, 0x1f45214c, 0x00c81a3c, 0x21001a02, 0x21790102, 0x21010002, 0x1a002002, 0x20060412, 0x05fd0413, 0x02010702, 0x0205fd00, 0x10040000 }; -u32 ai_18[] = { 0x61fd0200, 0x1c00d102, 0x03032f01, 0x4dfd0032, 0x00d10146, 0x1f010302, 0x1fad210a, 0x00210223, 0x033335dc, 0x233b232f, 0x23012302, 0x23ad496d, 0x206f6666, 0x210a0001, 0x0002014d, 0xfd003200, 0xd12d0702, 0x2d3c0422, 0x07020403, 0x07040000 }; -u32 ai_19[] = { 0x9d000008, 0x009d0000, 0x02009001, 0x2c8f00c8, 0x91509350, 0x92500234, 0x03083c23, 0x01340223, 0xc3880aae, 0x0237034b, 0x0032387c, 0xfdc838b4, 0x00070838, 0x2f230137, 0x02233335, 0x80231400, 0x0100003a, 0x02231500, 0x0100003a, 0x0137023a, 0x01370238, 0x05fd0415, 0x04000000 }; -u32 ai_20[] = { 0x9d000000, 0x107cfdc8, 0x0302381f, 0x00c70239, 0x032f079c, 0x00001000, 0x1354fd00, 0xba040213, 0x9c000020, 0x001354fd, 0x00be0502, 0x134dfd00, 0x3200c701, 0x01390207, 0x4dfd0032, 0x00c70101, 0x38020122, 0x05fd0001, 0x02036007, 0x01380204, 0x670f9a00, 0x00100001, 0x38020567, 0x109a0000, 0x20000138, 0x04000000 }; -u32 ai_26[] = { 0x02349736, 0x80973780, 0x97388097, 0x3980973b, 0x80973e80, 0x973f8002, 0x37039c00, 0x00010023, 0x5b02239a, 0x00000100, 0x02239c00, 0x00020023, 0x5b03239a, 0x00000200, 0x02239c00, 0x00040023, 0x5b04239a, 0x00000400, 0x02239c00, 0x00080023, 0x5b05239a, 0x00000800, 0x02230137, 0x04000000 }; -u32 ai_27[] = { 0x020003cf, 0x23010002, 0x23ae0203, 0x03700113, 0xb300012c, 0x1370023f, 0x70044002, 0x1357223e, 0x0103023e, 0xc38809b7, 0x01680034, 0x023fc388, 0x46b701c2, 0x00340240, 0xc38846b7, 0x01fe0034, 0x0234b9b5, 0x020703bb, 0x00192301, 0x070223f4, 0x00ffff02, 0x0403bb00, 0x0f230104, 0x0223c388, 0x0b020503, 0xbb000023, 0x01050223, 0xf6b6b802, 0x06030106, 0x04000000 }; -u32 ai_28[] = { 0x02030359, 0x01230103, 0x0223660a, 0x02040359, 0x05230104, 0x0223670a, 0x01030400 }; -u32 ai_21[] = { 0xd9fd00e8, 0x230223ae, 0x020303b4, 0x00003c23, 0x01030223, 0x0a006500, 0x08006d04, 0x10020403, 0xb4000070, 0x23010402, 0x23e0fd00, 0xe0fd0102, 0x0503b400, 0x00ea2301, 0x05022367, 0x0d020603, 0x680d0123, 0x01060223, 0xda020703, 0xdc230107, 0x02236d00, 0x23001302, 0x23d51200, 0x020000db, 0x020803dc, 0x23010802, 0x23b70002, 0xb5b9ae02, 0x0903bb00, 0x00230109, 0x0223b6a4, 0x11000200, 0x005f11ae, 0x020a03b4, 0x0000b423, 0x010a0223, 0xda020b03, 0xdc23010b, 0x02230213, 0xd2020103, 0x01010400 }; -u32 ai_22[] = { 0x0a006200, 0x00000104, 0x10ae0203, 0x03b40000, 0x3c230103, 0x02230a00, 0x620001ff, 0xff041002, 0x01030101, 0x04000000 }; -u32 ai_30[] = { 0x020303cf, 0x23010302, 0x2305f804, 0x17020103, 0x01010400 }; -u32 ai_29[] = { 0x023403eb, 0x3b5500e8, 0x23013402, 0x239a0000, 0x8000ecd7, 0x04b6b8da, 0x020303dc, 0x23010302, 0x23f12305, 0xfd000f02, 0x23ddeadf, 0x0ddf0e59, 0x02235903, 0x23591a23, 0x591b2359, 0x1c23591d, 0x23591823, 0x59192359, 0x04235905, 0x23590623, 0x59072359, 0x08235909, 0x23590a23, 0x590b2359, 0x0c23590d, 0x23590e23, 0x590f2359, 0x10235911, 0x23591223, 0x59132359, 0x16235914, 0x23591523, 0xe4050223, 0xed030303, 0xd50c0002, 0x000005f8, 0x0416db02, 0x0403dc23, 0x01040223, 0x05fd0001, 0x023b05fd, 0x00010400 }; -u32 ai_23[] = { 0x911e9314, 0x8d330234, 0x14002100, 0x00000200, 0x0346233a, 0x233b2332, 0x233c2301, 0x00022333, 0x35c83a35, 0x64231600, 0x01000003, 0x023a1a03, 0x022309ae, 0x02040333, 0x35fa23b4, 0x0000b423, 0x01040223, 0x08030303, 0x03022314, 0x00210000, 0x23022316, 0x00010000, 0x23022302, 0x03032f01, 0x01030201, 0x01340400 }; -u32 ai_24[] = { 0x020303d6, 0xfc7c0400, 0x23020401, 0x03022305, 0xfd000204 }; -u32 ai_25[] = { 0x020303d6, 0x00000400, 0x23020401, 0x03022305, 0xfd000204 }; -u32 ai_31[] = { 0x023403a0, 0x36001000, 0x00a03700, 0x100000a0, 0x38001000, 0x00a03900, 0x100000a0, 0x3a001000, 0x0003a03b, 0x00100000, 0xa03c0010, 0x0000a03d, 0x00100000, 0xa03e0010, 0x0000a03f, 0x00100000, 0x03023703, 0xf7022301, 0x370223c3, 0x880c9a00, 0x00400005, 0xfd000104 }; +u8 ai_0[] = { + guard_start_patrol(0x00) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x01) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_2[] = { + guard_start_patrol(0x02) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_3[] = { + guard_start_patrol(0x03) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_4[] = { + guard_start_patrol(0x04) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_5[] = { + guard_start_patrol(0x05) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_6[] = { + guard_start_patrol(0x06) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_7[] = { + guard_start_patrol(0x07) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_8[] = { + guard_start_patrol(0x08) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_9[] = { + guard_start_patrol(0x09) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_10[] = { + guard_start_patrol(0x0a) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_11[] = { + guard_start_patrol(0x0b) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_12[] = { + guard_start_patrol(0x0c) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_13[] = { + guard_start_patrol(0x0d) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_14[] = { + guard_start_patrol(0x0e) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_15[] = { + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x1f) + if_guard_has_stopped_moving(0x3c) + goto_first(0x00) + label(0x3c) + if_guard_shot_from_bond_missed(0x1f) + if_guard_see_another_guard_shot(0x1f) + if_guard_see_another_guard_die(0x20) + if_guard_sees_bond(0x17) + ai_sleep + if_guard_heard_bond(0x15) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x15) + if_guard_heard_bond_within_last_10_secs(0x15) + if_guard_and_bond_within_line_of_sight(0x16) + label(0x3d) + ai_sleep + if_guard_bitfield_is_set_on(0x80, 0x13) + if_guard_has_stopped_moving(0x03) + goto_first(0x00) + label(0x13) + if_guard_is_on_screen(0x23) + goto_first(0x00) + label(0x23) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x0400) + label(0x03) + if_guard_hits_greater_than(0x00, 0x20) + goto_first(0x00) + label(0x04) + goto_first(0x00) + label(0x15) + random_generate_seed + if_random_seed_greater_than(0x40, 0x18) + goto_first(0x00) + label(0x18) + guard_try_running_to_side(0x16) + goto_first(0x00) + label(0x16) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x17) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x17) + if_guard_distance_to_bond_less_than(0x0a00, 0x17) + goto_first(0x00) + label(0x17) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x1b) + if_guard_is_targeted_by_bond(0x1b) + goto_first(0x00) + label(0x1b) + if_guard_distance_to_bond_less_than(0x6400, 0x1f) + if_guard_hits_greater_than(0x00, 0x20) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x1104) + label(0x1f) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x1204) + label(0x20) + random_generate_seed + if_random_seed_greater_than(0x40, 0x24) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x1304) + label(0x24) + debug_log 'I', 'f', ' ', 'o', 'n', 'l', 'y', ' ', 'I', ' ', 'h', 'a', 'd', ' ', 'a', ' ', 'g', 'u', 'n', '!', '!', '!', '\n', '\0', + guard_try_throwing_grenade(0x25) + goto_first(0x00) + label(0x25) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x25) + label(0x01) + goto_first(0x00) + ai_list_end +}; +u8 ai_16[] = { + label(0x00) + ai_sleep + if_guard_has_stopped_moving(0x1c) + goto_first(0x00) + label(0x1c) + random_generate_seed + if_random_seed_greater_than(0x96, 0x1d) + random_generate_seed + if_random_seed_greater_than(0x00, 0x1e) + goto_next(0x01) + label(0x1d) + guard_try_sidestepping(0x01) + label(0x1e) + guard_try_running_to_side(0x01) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x03) + goto_first(0x01) + label(0x03) + if_guard_and_bond_within_line_of_sight(0x16) + jump_to_return_ai_list + label(0x16) + if_guard_counter_clockwise_direction_to_bond_less_than(0x6e, 0x17) + if_guard_counter_clockwise_direction_to_bond_greater_than(0x91, 0x17) + if_guard_distance_to_bond_less_than(0x0a00, 0x17) + jump_to_return_ai_list + label(0x17) + goto_first(0x1c) + ai_list_end +}; +u8 ai_17[] = { + label(0x00) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfd, 0x20) + if_guard_shot_from_bond_missed(0x20) + goto_next(0x1f) + label(0x1f) + if_guard_is_targeted_by_bond(0x21) + if_guard_distance_to_bond_greater_than(0xc800, 0x1a) + if_guard_and_bond_within_line_of_sight(0x21) + goto_next(0x1a) + label(0x21) + if_guard_hits_greater_than(0x01, 0x02) + guard_surrenders + goto_first(0x00) + label(0x1a) + goto_next(0x20) + label(0x20) + set_return_ai_list(0x1204) + jump_to_ai_list(0xfd, 0x1304) + label(0x01) + jump_to_return_ai_list + label(0x02) + jump_to_ai_list(0xfd, 0x1000) + ai_list_end +}; +u8 ai_18[] = { + chr_drop_all_concealed_items(0xfd) + label(0x00) + guard_runs_to_pad(0xd100) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x01) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x01) + if_guard_shot_from_bond_missed(0x1f) + goto_first(0x03) + label(0x1f) + debug_log '!', '\n', '\0', + guard_surrenders + label(0x23) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xdc, 0x23) + if_guard_see_another_guard_die(0x23) + if_guard_has_stopped_moving(0x23) + goto_first(0x23) + label(0x23) + debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0', + goto_first(0x00) + label(0x01) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x2d) + jump_to_return_ai_list + label(0x2d) + if_guard_and_bond_within_line_of_sight(0x04) + guard_remove_fade + jump_to_return_ai_list + label(0x04) + ai_sleep + jump_to_return_ai_list + ai_list_end +}; +u8 ai_19[] = { + guard_flags_set_on(0x00080000) + guard_flags_set_on(0x00020000) + guard_set_armour(0x2c01) + guard_set_health_total(0xc800) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_set_argh_rating(0x50) + label(0x34) + ai_sleep + guard_animation_stop + if_guard_and_bond_within_line_of_sight(0x23) + goto_first(0x34) + label(0x23) + text_print_top(0x0a88) + local_timer_reset_start + label(0x37) + ai_sleep + if_guard_distance_to_bond_less_than(0x3200, 0x38) + if_chr_health_less_than(0xfd, 0xc8, 0x38) + if_local_timer_greater_than(0x080700, 0x38) + if_guard_has_stopped_moving(0x23) + goto_first(0x37) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x80, 0x23) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x3a) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x3a) + goto_first(0x37) + label(0x3a) + goto_first(0x37) + label(0x38) + jump_to_ai_list(0xfd, 0x1504) + ai_list_end +}; +u8 ai_20[] = { + guard_flags_set_on(0x10000000) + if_chr_health_less_than(0xfd, 0xc8, 0x03) + label(0x38) + guard_sprints_to_pad(0xc700) + label(0x39) + ai_sleep + if_guard_has_stopped_moving(0x07) + if_objective_bitfield_is_set_on(0x00100000, 0x13) + if_chr_in_room_with_pad(0xfd, 0xba00, 0x04) + label(0x13) + if_objective_bitfield_is_set_on(0x00200000, 0x13) + if_chr_in_room_with_pad(0xfd, 0xbe00, 0x05) + label(0x13) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01) + goto_first(0x39) + label(0x07) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01) + goto_first(0x38) + label(0x01) + guard_remove_fade + jump_to_ai_list(0xfd, 0x0100) + label(0x03) + object_drop_from_chr(0x07) + goto_first(0x38) + label(0x04) + door_close(0x0f) + objective_bitfield_set_on(0x00100000) + goto_first(0x38) + label(0x05) + door_close(0x10) + objective_bitfield_set_on(0x00200000) + goto_first(0x38) + ai_list_end +}; +u8 ai_26[] = { + label(0x34) + chr_bitfield_set_on(0x36, 0x80) + chr_bitfield_set_on(0x37, 0x80) + chr_bitfield_set_on(0x38, 0x80) + chr_bitfield_set_on(0x39, 0x80) + chr_bitfield_set_on(0x3b, 0x80) + chr_bitfield_set_on(0x3e, 0x80) + chr_bitfield_set_on(0x3f, 0x80) + label(0x37) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x23) + if_object_not_destroyed(0x02, 0x23) + objective_bitfield_set_on(0x00010000) + label(0x23) + if_objective_bitfield_is_set_on(0x00020000, 0x23) + if_object_not_destroyed(0x03, 0x23) + objective_bitfield_set_on(0x00020000) + label(0x23) + if_objective_bitfield_is_set_on(0x00040000, 0x23) + if_object_not_destroyed(0x04, 0x23) + objective_bitfield_set_on(0x00040000) + label(0x23) + if_objective_bitfield_is_set_on(0x00080000, 0x23) + if_object_not_destroyed(0x05, 0x23) + objective_bitfield_set_on(0x00080000) + label(0x23) + goto_first(0x37) + ai_list_end +}; +u8 ai_27[] = { + label(0x00) + ai_sleep + if_camera_is_in_bond_swirl(0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_game_difficulty_less_than(0x01, 0x13) + if_local_timer_less_than(0x2c0100, 0x13) + if_game_difficulty_less_than(0x02, 0x3f) + if_game_difficulty_less_than(0x04, 0x40) + label(0x13) + if_item_is_stationary_within_level(0x22, 0x3e) + goto_first(0x03) + label(0x3e) + text_print_top(0x0988) + hud_countdown_set(0x6801) + goto_next(0x34) + label(0x3f) + text_print_top(0x4688) + hud_countdown_set(0xc201) + goto_next(0x34) + label(0x40) + text_print_top(0x4688) + hud_countdown_set(0xfe01) + goto_next(0x34) + label(0x34) + hud_countdown_start + hud_countdown_show + label(0x07) + ai_sleep + if_hud_countdown_less_than(0x1900, 0x23) + goto_first(0x07) + label(0x23) + music_xtrack_play(0x00, 0xff, 0xff) + label(0x04) + ai_sleep + if_hud_countdown_less_than(0x0f00, 0x23) + goto_first(0x04) + label(0x23) + text_print_top(0x0b88) + label(0x05) + ai_sleep + if_hud_countdown_less_than(0x0000, 0x23) + goto_first(0x05) + label(0x23) + trigger_explosions_around_bond + hud_countdown_hide + hud_countdown_stop + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_28[] = { + label(0x03) + ai_sleep + if_bond_has_item_equipped(0x01, 0x23) + goto_first(0x03) + label(0x23) + door_open(0x0a) + label(0x04) + ai_sleep + if_bond_has_item_equipped(0x05, 0x23) + goto_first(0x04) + label(0x23) + door_close(0x0a) + goto_first(0x03) + ai_list_end +}; +u8 ai_21[] = { + chr_try_teleporting_to_pad(0xfd, 0xe800, 0x23) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x23) + goto_first(0x03) + label(0x23) + guard_play_animation(0x6500, 0x0800, 0x6d00, 0x04, 0x10) + label(0x04) + ai_sleep + if_local_timer_greater_than(0x700000, 0x23) + goto_first(0x04) + label(0x23) + chr_remove_item_in_hand(0xfd, 0x00) + chr_remove_item_in_hand(0xfd, 0x01) + label(0x05) + ai_sleep + if_local_timer_greater_than(0xea0000, 0x23) + goto_first(0x05) + label(0x23) + door_close(0x0d) + label(0x06) + ai_sleep + if_door_state_equal(0x0d, 0x01, 0x23) + goto_first(0x06) + label(0x23) + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x07) + label(0x23) + if_objective_num_complete(0x00, 0x23) + goto_next(0x13) + label(0x23) + camera_switch(0x12, 0x0200, 0x0000) + screen_fade_from_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x08) + label(0x23) + hud_countdown_set(0x0200) + hud_countdown_show + hud_countdown_start + local_timer_reset_start + label(0x09) + ai_sleep + if_hud_countdown_less_than(0x0000, 0x23) + goto_first(0x09) + label(0x23) + hud_countdown_hide + object_flags_1_set_off(0x11, 0x00000200) + object_destroy(0x11) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x23) + goto_first(0x0a) + label(0x23) + screen_fade_to_black + label(0x0b) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x0b) + label(0x23) + label(0x13) + exit_level + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_22[] = { + guard_play_animation(0x6200, 0x0000, 0x0100, 0x04, 0x10) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x23) + goto_first(0x03) + label(0x23) + guard_play_animation(0x6200, 0x0100, 0xffff, 0x04, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_30[] = { + label(0x03) + ai_sleep + if_camera_is_in_bond_swirl(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xf8, 0x1704) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_29[] = { + label(0x34) + ai_sleep + if_bond_is_dead(0x3b) + if_bond_in_room_with_pad(0xe800, 0x23) + goto_first(0x34) + label(0x23) + objective_bitfield_set_on(0x00800000) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x04) + hud_countdown_hide + hud_countdown_stop + screen_fade_to_black + label(0x03) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x03) + label(0x23) + if_objective_all_completed(0x23) + jump_to_ai_list(0xfd, 0x0f00) + label(0x23) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + door_open_instant(0x0d) + door_open_instant(0x0e) + if_bond_has_item_equipped(0x02, 0x23) + if_bond_has_item_equipped(0x03, 0x23) + if_bond_has_item_equipped(0x1a, 0x23) + if_bond_has_item_equipped(0x1b, 0x23) + if_bond_has_item_equipped(0x1c, 0x23) + if_bond_has_item_equipped(0x1d, 0x23) + if_bond_has_item_equipped(0x18, 0x23) + if_bond_has_item_equipped(0x19, 0x23) + if_bond_has_item_equipped(0x04, 0x23) + if_bond_has_item_equipped(0x05, 0x23) + if_bond_has_item_equipped(0x06, 0x23) + if_bond_has_item_equipped(0x07, 0x23) + if_bond_has_item_equipped(0x08, 0x23) + if_bond_has_item_equipped(0x09, 0x23) + if_bond_has_item_equipped(0x0a, 0x23) + if_bond_has_item_equipped(0x0b, 0x23) + if_bond_has_item_equipped(0x0c, 0x23) + if_bond_has_item_equipped(0x0d, 0x23) + if_bond_has_item_equipped(0x0e, 0x23) + if_bond_has_item_equipped(0x0f, 0x23) + if_bond_has_item_equipped(0x10, 0x23) + if_bond_has_item_equipped(0x11, 0x23) + if_bond_has_item_equipped(0x12, 0x23) + if_bond_has_item_equipped(0x13, 0x23) + if_bond_has_item_equipped(0x16, 0x23) + if_bond_has_item_equipped(0x14, 0x23) + if_bond_has_item_equipped(0x15, 0x23) + bond_equip_item_cinema(0x05) + label(0x23) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x0c, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x1604) + screen_fade_from_black + label(0x04) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x04) + label(0x23) + jump_to_ai_list(0xfd, 0x0100) + label(0x3b) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_23[] = { + guard_set_speed_rating(0x1e) + guard_set_accuracy_rating(0x14) + guard_set_grenade_probability(0x33) + label(0x34) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x23) + if_guard_see_another_guard_shot(0x23) + if_guard_see_another_guard_die(0x23) + if_guard_sees_bond(0x23) + if_guard_and_bond_within_line_of_sight(0x23) + goto_first(0x00) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3a) + if_random_seed_greater_than(0x64, 0x23) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03) + label(0x3a) + guard_try_throwing_grenade(0x03) + label(0x23) + guard_kneel + local_timer_reset_start + label(0x04) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x23) + if_local_timer_greater_than(0xb40000, 0x23) + goto_first(0x04) + label(0x23) + guard_animation_stop + ai_sleep + ai_sleep + ai_sleep + ai_sleep + label(0x23) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23) + label(0x23) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x03) + label(0x01) + goto_first(0x34) + ai_list_end +}; +u8 ai_24[] = { + label(0x03) + ai_sleep + if_bond_y_pos_less_than(0x7cfc, 0x04) + goto_next(0x23) + label(0x04) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_25[] = { + label(0x03) + ai_sleep + if_bond_y_pos_less_than(0x0000, 0x04) + goto_next(0x23) + label(0x04) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_31[] = { + label(0x34) + ai_sleep + chr_flags_set_on(0x36, 0x00001000) + chr_flags_set_on(0x37, 0x00001000) + chr_flags_set_on(0x38, 0x00001000) + chr_flags_set_on(0x39, 0x00001000) + chr_flags_set_on(0x3a, 0x00001000) + ai_sleep + chr_flags_set_on(0x3b, 0x00001000) + chr_flags_set_on(0x3c, 0x00001000) + chr_flags_set_on(0x3d, 0x00001000) + chr_flags_set_on(0x3e, 0x00001000) + chr_flags_set_on(0x3f, 0x00001000) + ai_sleep + label(0x37) + ai_sleep + if_killed_civilians_greater_than(0x02, 0x23) + goto_first(0x37) + label(0x23) + text_print_top(0x0c88) + objective_bitfield_set_on(0x00400000) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/j/UsetupstatueZ.c b/assets/obseg/setup/j/UsetupstatueZ.c index 1c372802..abd4bc33 100644 --- a/assets/obseg/setup/j/UsetupstatueZ.c +++ b/assets/obseg/setup/j/UsetupstatueZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1092,52 +1093,1470 @@ PathRecord patrolpaths[] = { }; -u32 ai_17[] = { 0x9d000008, 0x00020003, 0x3c2330fd, 0x06010002, 0x239a0008, 0x00001700, 0x01000023, 0x02230204, 0xaead6865, 0x6c6c6f0a, 0x00023303, 0x30fd064c, 0x00c80f4c, 0x00500e95, 0x01b1b400, 0x070812b4, 0x0005dc0d, 0xb40004b0, 0x0cb40003, 0x840bb400, 0x02580ab4, 0x00012c09, 0x01330209, 0xb4000168, 0x23c38c09, 0x02230133, 0x020ab400, 0x029423c3, 0x8c0a0223, 0x0133020b, 0xb40003c0, 0x23c38c0b, 0x02230133, 0x020cb400, 0x04ec23c3, 0x8c0c0223, 0x0133020d, 0xb4000618, 0x23c38c0d, 0x02230133, 0x020e9601, 0x13c38c0e, 0x0213b094, 0x01013302, 0x0fc38c0f, 0x9a001000, 0x009a0020, 0x00000001, 0x02120300, 0x27011202, 0x279a0000, 0x01009a00, 0x1000001e, 0x00160220, 0x034c012c, 0x012f234d, 0xfd000f00, 0x16230120, 0x02234efd, 0x000f0016, 0x134c012c, 0x01021301, 0x27020103, 0x22010102, 0x06c38c30, 0x9a002000, 0x00020703, 0x01070400 }; -u32 ai_36[] = { 0x0238039c, 0x00000100, 0x00013802, 0x00035200, 0x50003b23, 0x01000223, 0xf323bd08, 0xff003604, 0x13000000, 0x0023ad54, 0x20666169, 0x6c0a0001, 0x0002239a, 0x00040000, 0xad542069, 0x6e69740a, 0x0003f323, 0xbd04ff00, 0x36040200, 0x00000123, 0x0223f323, 0xbd04ff00, 0x36040300, 0x00000123, 0x0223f323, 0xbd04ff00, 0x36040400, 0x00000123, 0x0223f323, 0xbd04ff00, 0x36040500, 0x00000123, 0x02230203, 0x0353008c, 0x003b059c, 0x00004000, 0x04010302, 0x04035300, 0x8c003b05, 0x59011300, 0x05021301, 0x0402059a, 0x00002000, 0x02010301, 0x01040000 }; -u32 ai_37[] = { 0x0200039c, 0x00008000, 0x23010002, 0x23ae0203, 0x03b40002, 0x58230103, 0x0223c38c, 0x1f650000, 0x189a8000, 0x0000f323, 0xbd10ff00, 0x06041600, 0x00000023, 0x02239a08, 0x000000b7, 0x00b4b9b5, 0x0205039c, 0x00000200, 0x1352012c, 0x00180802, 0x139c1000, 0x00001352, 0x00320018, 0x070213bb, 0x00002301, 0x0502239a, 0x40000000, 0x0303039c, 0x20000000, 0x13180008, 0x060213c3, 0x8c209a00, 0x800000c9, 0x00b6b802, 0x06030106, 0x0207039a, 0x10000000, 0xc38c32b7, 0x000f0105, 0x0208039a, 0x00000200, 0x01050400 }; -u32 ai_1[] = { 0x8e02ad68, 0x310a00ab, 0x000205fd, 0x04060400 }; -u32 ai_2[] = { 0x8e03ad68, 0x320a00ab, 0x000305fd, 0x04060400 }; -u32 ai_3[] = { 0x8e04ad68, 0x330a00ab, 0x000405fd, 0x04060400 }; -u32 ai_4[] = { 0x8e05ad68, 0x340a00ab, 0x000505fd, 0x04060400 }; -u32 ai_5[] = { 0x02238f00, 0x28900014, 0x8dbf3335, 0x8013bf00, 0xcf100000, 0x00002302, 0x13bf00cf, 0x10100000, 0x00230223, 0x00010201, 0x9c000020, 0x00039c00, 0x00800003, 0x05fd0408, 0x020305fd, 0x04090400 }; -u32 ai_7[] = { 0x1e232802, 0x03039c00, 0x00200034, 0x46342f23, 0x01030223, 0x14002100, 0x00230223, 0x0204039c, 0x00002000, 0x34463401, 0x0402349a, 0x00002000, 0x16000100, 0x00230223, 0x05fd0409, 0x04000000 }; -u32 ai_8[] = { 0x02353335, 0x503f2803, 0x023f2a03, 0x0203034c, 0x0096133c, 0x3602132f, 0x37010302, 0x363c2300, 0x01023703, 0x01350223, 0x02346d04, 0x0233350a, 0x231a0102, 0x23353223, 0x0e010223, 0x353c2313, 0x01022335, 0x50231301, 0x02233564, 0x23110102, 0x23359623, 0x12010223, 0x35c82314, 0x00010000, 0x01022315, 0x00010000, 0x01020103, 0x2f230101, 0x02233c23, 0x00030203, 0x03013502, 0x23030134, 0x020205fd, 0x04100400 }; -u32 ai_9[] = { 0x02353335, 0x503f2803, 0x023f2a03, 0xae020303, 0x9c000400, 0x00029c00, 0x10000013, 0x9c000800, 0x00020213, 0x032f374c, 0x0096133c, 0x360213b3, 0x00025813, 0x01350213, 0x2f370103, 0x02363c23, 0x00010237, 0x03013502, 0x2302349c, 0x00040000, 0x029c0010, 0x0000139c, 0x00080000, 0x02021333, 0x350a231a, 0x01022335, 0x32230e01, 0x0223353c, 0x23130102, 0x23355023, 0x13010223, 0x35642311, 0x01022335, 0x96231201, 0x022335c8, 0x23140001, 0x00000102, 0x23150001, 0x00000102, 0x01039d00, 0x4000002f, 0x23010102, 0x233c2300, 0x03020303, 0x01350223, 0x03013402, 0x0205fd04, 0x0f040000 }; -u32 ai_18[] = { 0x9d000008, 0x001e0001, 0x0203039c, 0x00002000, 0x0646062f, 0x23010302, 0x23170001, 0x00002302, 0x23c38c12, 0xae020403, 0x9c000020, 0x00064606, 0xb4000078, 0x23010402, 0x2359013d, 0xc38c13ae, 0x0205039c, 0x00010000, 0x13b40002, 0x58070213, 0xb40004b0, 0x069c0000, 0x20000646, 0x06590123, 0x01050223, 0x9a000040, 0x00c38c14, 0x0001023d, 0x9a000040, 0x00c38c33, 0x00010201, 0x0305fd04, 0x14010102, 0x069a0000, 0x2000c38c, 0x2205fd04, 0x150207c3, 0x8c219a00, 0x01000001, 0x05040000 }; -u32 ai_19[] = { 0xae023303, 0x9c000020, 0x00014601, 0xb4000a8c, 0x11b40009, 0x6010b400, 0x08340fb4, 0x0007080e, 0xb40005dc, 0x0db40004, 0xb00cb400, 0x03840bb4, 0x0002580a, 0xb400012c, 0x09013302, 0x09b40001, 0x6823c38c, 0x16022301, 0x33020a9a, 0x00000400, 0xb4000294, 0x23c38c17, 0x02230133, 0x020bb400, 0x03c023c3, 0x8c180223, 0x0133020c, 0xb40004ec, 0x23c38c19, 0x02230133, 0x020db400, 0x061823c3, 0x8c1a0223, 0x0133020e, 0xb4000744, 0x23c38c1b, 0x02230133, 0x020fb400, 0x087023c3, 0x8c1c0223, 0x01330210, 0xb400099c, 0x23c38c1d, 0x02230133, 0x0211b400, 0x0ac823c3, 0x8c1e0223, 0x00120133, 0x021205fd, 0x04150201, 0x9a000020, 0x009c0000, 0x040013c3, 0x8c220023, 0x0213c38c, 0x15002302, 0x2305fd04, 0x15040000 }; -u32 ai_20[] = { 0x9d000000, 0x10ab0032, 0x9a000080, 0x009c0000, 0x0400139a, 0x00020000, 0x02130238, 0x9c000020, 0x00131c23, 0x28000302, 0x131f2328, 0x0203034d, 0xfd001e23, 0x282d2f23, 0x01030223, 0x9a000020, 0x00013802, 0x2d3c2322, 0x02010301, 0x0102239a, 0x00002000, 0xab008b01, 0x38040000 }; -u32 ai_16[] = { 0xcd026c00, 0x000a0002, 0xffff0002, 0x06006500, 0x00160200, 0x03010004 }; -u32 ai_38[] = { 0x0230ae9c, 0x00002000, 0x039c0000, 0x8000039c, 0x00040000, 0x019c0010, 0x0000139c, 0x00080000, 0x010213ad, 0x210a0002, 0x23033106, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00c4, 0x040b0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff008104, 0x0b000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x0024040b, 0x00000000, 0x130223f3, 0x13bd03ff, 0x0000040b, 0x00000000, 0x13021302, 0x23033107, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00a3, 0x040c0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff005904, 0x0c000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x003a040c, 0x00000000, 0x130223f3, 0x13bd03ff, 0x0034040c, 0x00000000, 0x13021302, 0x23033108, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00a2, 0x040d0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff00cb04, 0x0d000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x0036040d, 0x00000000, 0x130223f3, 0x13bd03ff, 0x00c0040d, 0x00000000, 0x13021302, 0x23033109, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00d6, 0x040e0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff009804, 0x0e000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x006b040e, 0x00000000, 0x130223f3, 0x13bd03ff, 0x002a040e, 0x00000000, 0x13021300, 0x0102036d, 0x04010223, 0x03310223, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00c404, 0x02000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00810402, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x24040200, 0x00000013, 0x0223f313, 0xbd04ff00, 0x00040200, 0x00000013, 0x02130223, 0x03310323, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00a304, 0x03000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00590403, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x3a040300, 0x00000013, 0x0223f313, 0xbd04ff00, 0x34040300, 0x00000013, 0x02130223, 0x03310423, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00a204, 0x04000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00cb0404, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x36040400, 0x00000013, 0x0223f313, 0xbd04ff00, 0xc0040400, 0x00000013, 0x02130223, 0x03310523, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00d604, 0x05000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00980405, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x6b040500, 0x00000013, 0x0223f313, 0xbd04ff00, 0x2a040500, 0x00000013, 0x02130001, 0x020103b4, 0x00007823, 0x01010223, 0x01300400 }; -u32 ai_10[] = { 0x8e06ad72, 0x310a0005, 0xfd040704 }; -u32 ai_11[] = { 0x8e07ad72, 0x320a0005, 0xfd040704 }; -u32 ai_12[] = { 0x8e08ad72, 0x330a0005, 0xfd040704 }; -u32 ai_13[] = { 0x8e09ad72, 0x340a0005, 0xfd040704 }; -u32 ai_6[] = { 0x02238f00, 0x288dbf33, 0x358013bf, 0x00b80800, 0x00000023, 0x0213bf00, 0xb8081000, 0x00002302, 0x23c000d9, 0x00000000, 0x01000102, 0x0105fd04, 0x0a040000 }; -u32 ai_14[] = { 0x02381f00, 0xcd020303, 0x2f230103, 0x02234dfd, 0x001e00cd, 0x23013802, 0x2322ad67, 0x6f6e650a, 0x00020103, 0x01010400 }; -u32 ai_15[] = { 0x02381f00, 0x23020303, 0x2f230103, 0x02234dfd, 0x001e0023, 0x23013802, 0x2322ad67, 0x6f6e650a, 0x00020103, 0x01010400 }; -u32 ai_21[] = { 0x9d000008, 0x0002388e, 0x00020003, 0x0a001e00, 0x53005404, 0x104b001e, 0x23010002, 0x23c38c26, 0xae020303, 0xb4000078, 0x23010302, 0x239a2000, 0x00000a00, 0xa8003c00, 0x780010c3, 0x8c230201, 0x032f2301, 0x010223c3, 0x8c2405fd, 0x04170400 }; -u32 ai_22[] = { 0x0239039c, 0x00800000, 0x23001302, 0x23960123, 0x9a000008, 0x00ae9401, 0x00130223, 0xb300012c, 0x13c38c25, 0x05fd0418, 0x02134b00, 0x32232800, 0x02232900, 0x01390200, 0x039c0080, 0x0000014b, 0x0014032f, 0x01010002, 0x3a013902, 0x03080204, 0x039c0080, 0x0000014b, 0x00083b4c, 0x00280101, 0x04023b47, 0x403c48c0, 0x3c000502, 0x3c023d00, 0x05020503, 0x9c008000, 0x00012f06, 0x01050206, 0x01030201, 0x01390400 }; -u32 ai_23[] = { 0xae020503, 0xb4000078, 0x38010502, 0x381f0009, 0x0203036d, 0x043d0013, 0x023dd900, 0x00091302, 0x132f234d, 0xfd002800, 0x09230103, 0x02234dfd, 0x00280009, 0x23013802, 0x239a0100, 0x00001700, 0x01000000, 0x0200039c, 0x02000000, 0x23010002, 0x23210204, 0x03010404 }; -u32 ai_39[] = { 0x0203039c, 0x08000000, 0x00010302, 0x00033100, 0x239c0400, 0x00003d01, 0x00023d03, 0x03031800, 0x08080223, 0x9a004000, 0x00020103, 0x01010400 }; -u32 ai_40[] = { 0x0200039c, 0x01000000, 0x23010002, 0x236d0423, 0x01000223, 0x02030353, 0x01f40009, 0x23010302, 0x23f323bd, 0x1345000c, 0x041d0000, 0x001023ad, 0x4f206661, 0x696c0a00, 0x01030223, 0x9a020000, 0x00ad4f20, 0x696e6974, 0x0a0003f3, 0x23bd13ff, 0x000a041a, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000b041b, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000d041c, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000e041c, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000f041c, 0x00000010, 0x23022302, 0x04030104, 0x04000000 }; -u32 ai_28[] = { 0x9d000008, 0x008e0abf, 0x00cd0600, 0x00000023, 0x02231400, 0x21000000, 0x0200039c, 0x04000000, 0x23462330, 0xfd234b00, 0x96230100, 0x0223ae00, 0x33023303, 0x9c040000, 0x00014601, 0x30fd014c, 0x00fa0f95, 0x01b1b400, 0x096010b4, 0x0007080e, 0xb40005dc, 0x0db40004, 0xb00cb400, 0x03840bb4, 0x0002580a, 0xb400012c, 0x09013302, 0x09b40001, 0x6823c38c, 0x28022301, 0x33020ab4, 0x00029423, 0xc38c2902, 0x23013302, 0x0bb40003, 0xc023c38c, 0x2a022301, 0x33020cb4, 0x0004ec23, 0xc38c2b02, 0x23013302, 0x0db40006, 0x1823c38c, 0x2c022301, 0x33020eb4, 0x00074423, 0xc38c2d02, 0x23013302, 0x10b40009, 0x9c23c38c, 0x2f022301, 0x33020f96, 0x0113c38c, 0x2e0213b0, 0x94010133, 0x02019a04, 0x00000016, 0x00010000, 0x03020303, 0x2f230103, 0x022305fd, 0x041e0400 }; -u32 ai_24[] = { 0x8dbf3335, 0x8013bf00, 0xb8080000, 0x00002302, 0x13bf00b8, 0x08100000, 0x00230223, 0xc000d600, 0x00000023, 0x02231400, 0x24000000, 0x0200039c, 0x04000000, 0x23462330, 0xfd230100, 0x02239a04, 0x00000016, 0x00040000, 0x03020303, 0x2f230103, 0x022305fd, 0x041e0400 }; -u32 ai_25[] = { 0x8e0b05fd, 0x04190400 }; -u32 ai_26[] = { 0x8e0c05fd, 0x04190400 }; -u32 ai_27[] = { 0x8dbf3335, 0x8013bf00, 0xb8080000, 0x00002302, 0x13bf00b8, 0x08100000, 0x00230223, 0xc000d600, 0x00000023, 0x02231500, 0x21000000, 0x0200039c, 0x04000000, 0x23462330, 0xfd230100, 0x02239a04, 0x00000016, 0x00010000, 0x03020303, 0x2f230103, 0x022305fd, 0x041e0400 }; -u32 ai_29[] = { 0x02381500, 0x21000023, 0x02230316, 0x00010000, 0x23022302, 0x03032f23, 0x01030223, 0x01380400 }; -u32 ai_41[] = { 0x0200039c, 0x00800000, 0x23010002, 0x23a30100, 0x04000033, 0x351e2365, 0x0100cd00, 0x03022335, 0x3c236501, 0x00d60003, 0x0223355a, 0x23650100, 0xd0000302, 0x23357823, 0x650100c8, 0x00030223, 0x35962365, 0x0100cb00, 0x03022335, 0xb4236501, 0x00c40003, 0x022335d2, 0x23650100, 0xd5000302, 0x2335f023, 0x650100c2, 0x00030223, 0x650100c0, 0x0203036d, 0x04045500, 0xb3230103, 0x0223c38c, 0x27010302, 0x04030104, 0x04000000 }; -u32 ai_0[] = { 0xad627272, 0x6d206272, 0x726d0a00, 0x02000301, 0x00040000 }; -u32 ai_42[] = { 0x023803eb, 0x3e550016, 0x23013802, 0x23ecd700, 0xda020303, 0xdc230103, 0x0223310a, 0x299c0400, 0x00002905, 0xfd042002, 0x29d205fd, 0x0001023e, 0x05fd0001, 0x04000000 }; -u32 ai_31[] = { 0xf12305fd, 0x000f0223, 0xddeaed03, 0x0303d502, 0x00010000, 0xdbf40000, 0xffdf03df, 0x0405f804, 0x21a10a00, 0x00040005, 0x0a0422a1, 0x0b000004, 0x00050b04, 0x23a10c00, 0x00040005, 0x0c042402, 0x01030101, 0x04000000 }; -u32 ai_32[] = { 0xd9fd0010, 0x2302230a, 0x006bffff, 0xffff0610, 0xae020303, 0xb400012c, 0x23010302, 0x23da0204, 0x03dc2301, 0x040223d2, 0x02010301, 0x01040000 }; -u32 ai_33[] = { 0xd9fd0011, 0x2302230a, 0x0052ffff, 0xffff0610, 0x02010301, 0x01040000 }; -u32 ai_34[] = { 0xd9fd0014, 0x2302230a, 0x0028ffff, 0xffff0610, 0x02010301, 0x01040000 }; -u32 ai_35[] = { 0xd9fd0013, 0x23022315, 0x00210000, 0x230223ae, 0x020303b4, 0x00010e23, 0x01030223, 0x08022302, 0x01030101, 0x04000000 }; -u32 ai_30[] = { 0xae020303, 0xb4000000, 0x23010302, 0x230a0061, 0xffff00af, 0x04100201, 0x03010104 }; -u32 ai_43[] = { 0x020303cf, 0x23010302, 0x2305f804, 0x1f020103, 0x01010400 }; -u32 ai_44[] = { 0x0200039c, 0x40000000, 0x23010002, 0x23ae0204, 0x03ad4932, 0x0a00b400, 0x025810b4, 0x0001680f, 0xb400012c, 0x0eb40000, 0xb40db400, 0x00780cb4, 0x00003c0b, 0xb4000000, 0x0a010402, 0x0aad5431, 0x0a00a40b, 0x00020000, 0x5f0ba40c, 0x00020000, 0x5f0c0104, 0x020ba400, 0x00020000, 0x5f00a40d, 0x00020000, 0x5f0da40e, 0x00020000, 0x5f0e0104, 0x020ca40f, 0x00020000, 0x5f0fa410, 0x00020000, 0x5f100104, 0x020d0104, 0x020e0104, 0x020f0104, 0x0210ad43, 0x4c0a0005, 0xfd000104 }; -u32 ai_45[] = { 0xa0010010, 0x00000302, 0x3303f700, 0x23013302, 0x239a0020, 0x000005fd, 0x00010400 }; +u8 ai_17[] = { + guard_flags_set_on(0x00080000) + label(0x00) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x23) + if_chr_dying_or_dead(0xfd, 0x06) + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000800) + guard_try_facing_target(0x0100, 0x0000, 0x23) + label(0x23) + label(0x04) + local_timer_reset_start + debug_log 'h', 'e', 'l', 'l', 'o', '\n', '\0', + label(0x33) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x06) + if_guard_distance_to_bond_greater_than(0xc800, 0x0f) + if_guard_distance_to_bond_greater_than(0x5000, 0x0e) + guard_bitfield_set_off(0x01) + local_timer_start + if_local_timer_greater_than(0x080700, 0x12) + if_local_timer_greater_than(0xdc0500, 0x0d) + if_local_timer_greater_than(0xb00400, 0x0c) + if_local_timer_greater_than(0x840300, 0x0b) + if_local_timer_greater_than(0x580200, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x09) + goto_first(0x33) + label(0x09) + if_local_timer_greater_than(0x680100, 0x23) + text_print_top(0x098c) + label(0x23) + goto_first(0x33) + label(0x0a) + if_local_timer_greater_than(0x940200, 0x23) + text_print_top(0x0a8c) + label(0x23) + goto_first(0x33) + label(0x0b) + if_local_timer_greater_than(0xc00300, 0x23) + text_print_top(0x0b8c) + label(0x23) + goto_first(0x33) + label(0x0c) + if_local_timer_greater_than(0xec0400, 0x23) + text_print_top(0x0c8c) + label(0x23) + goto_first(0x33) + label(0x0d) + if_local_timer_greater_than(0x180600, 0x23) + text_print_top(0x0d8c) + label(0x23) + goto_first(0x33) + label(0x0e) + if_guard_bitfield_is_set_on(0x01, 0x13) + text_print_top(0x0e8c) + label(0x13) + local_timer_stop + guard_bitfield_set_on(0x01) + goto_first(0x33) + label(0x0f) + text_print_top(0x0f8c) + objective_bitfield_set_on(0x00001000) + objective_bitfield_set_on(0x00002000) + goto_next(0x01) + label(0x12) + ai_sleep + goto_next(0x27) + goto_first(0x12) + label(0x27) + objective_bitfield_set_on(0x00010000) + objective_bitfield_set_on(0x00001000) + guard_walks_to_pad(0x1600) + label(0x20) + ai_sleep + if_guard_distance_to_bond_greater_than(0x2c01, 0x01) + if_guard_has_stopped_moving(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x1600, 0x23) + goto_first(0x20) + label(0x23) + if_chr_distance_to_pad_greater_than(0xfd, 0x0f00, 0x1600, 0x13) + if_guard_distance_to_bond_greater_than(0x2c01, 0x01) + label(0x13) + goto_first(0x27) + label(0x01) + ai_sleep + guard_remove_fade + goto_first(0x01) + label(0x06) + text_print_top(0x308c) + objective_bitfield_set_on(0x00002000) + label(0x07) + ai_sleep + goto_first(0x07) + ai_list_end +}; +u8 ai_36[] = { + label(0x38) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x00) + goto_first(0x38) + label(0x00) + ai_sleep + if_bond_distance_to_pad_less_than(0x5000, 0x3b00, 0x23) + goto_first(0x00) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x08, 0xff, 0x3600, 0x1304, 0x00000000, 0x23) + debug_log 'T', ' ', 'f', 'a', 'i', 'l', '\n', '\0', + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000400) + debug_log 'T', ' ', 'i', 'n', 'i', 't', '\n', '\0', + ai_sleep + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0204, 0x01000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0304, 0x01000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0404, 0x01000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0504, 0x01000000, 0x23) + label(0x23) + label(0x03) + ai_sleep + if_bond_distance_to_pad_greater_than(0x8c00, 0x3b00, 0x05) + if_objective_bitfield_is_set_on(0x00400000, 0x04) + goto_first(0x03) + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x8c00, 0x3b00, 0x05) + if_bond_has_item_equipped(0x01, 0x13) + goto_next(0x05) + label(0x13) + goto_first(0x04) + label(0x05) + objective_bitfield_set_on(0x00200000) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_37[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00800000, 0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x580200, 0x23) + goto_first(0x03) + label(0x23) + text_print_top(0x1f8c) + object_move_to_pad(0x00, 0x1800) + objective_bitfield_set_on(0x00000080) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x10, 0xff, 0x0600, 0x1604, 0x00000000, 0x23) + label(0x23) + objective_bitfield_set_on(0x00000008) + hud_countdown_set(0xb400) + hud_countdown_start + hud_countdown_show + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x13) + if_bond_distance_to_pad_less_than(0x2c01, 0x1800, 0x08) + label(0x13) + if_objective_bitfield_is_set_on(0x00000010, 0x13) + if_bond_distance_to_pad_less_than(0x3200, 0x1800, 0x07) + label(0x13) + if_hud_countdown_less_than(0x0000, 0x23) + goto_first(0x05) + label(0x23) + objective_bitfield_set_on(0x00000040) + ai_sleep + ai_sleep + ai_sleep + if_objective_bitfield_is_set_on(0x00000020, 0x13) + chr_hit_body_part_with_item_damage(0x00, 0x08, 0x06) + label(0x13) + text_print_top(0x208c) + objective_bitfield_set_on(0x00008000) + sfx_stop_channel(0x00) + hud_countdown_hide + hud_countdown_stop + label(0x06) + ai_sleep + goto_first(0x06) + label(0x07) + ai_sleep + objective_bitfield_set_on(0x00000010) + text_print_top(0x328c) + hud_countdown_set(0x0f00) + goto_first(0x05) + label(0x08) + ai_sleep + objective_bitfield_set_on(0x00020000) + goto_first(0x05) + ai_list_end +}; +u8 ai_1[] = { + guard_set_chr_num(0x02) + debug_log 'h', '1', '\n', '\0', + guard_set_pad_preset(0x0200) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_2[] = { + guard_set_chr_num(0x03) + debug_log 'h', '2', '\n', '\0', + guard_set_pad_preset(0x0300) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_3[] = { + guard_set_chr_num(0x04) + debug_log 'h', '3', '\n', '\0', + guard_set_pad_preset(0x0400) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_4[] = { + guard_set_chr_num(0x05) + debug_log 'h', '4', '\n', '\0', + guard_set_pad_preset(0x0500) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_5[] = { + label(0x23) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xcf00, 0x10, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xcf00, 0x10, 0x00000010, 0x23) + label(0x23) + goto_next(0x01) + label(0x01) + if_objective_bitfield_is_set_on(0x00200000, 0x03) + if_objective_bitfield_is_set_on(0x00800000, 0x03) + jump_to_ai_list(0xfd, 0x0804) + label(0x03) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_7[] = { + guard_walks_to_pad(0x2823) + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x34) + if_guard_shot_from_bond_missed(0x34) + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x23) + label(0x23) + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x34) + if_guard_shot_from_bond_missed(0x34) + goto_first(0x04) + label(0x34) + objective_bitfield_set_on(0x00200000) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23) + label(0x23) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_8[] = { + label(0x35) + random_generate_seed + if_random_seed_greater_than(0x50, 0x3f) + guard_try_running_to_bond_position(0x03) + label(0x3f) + guard_try_sprinting_to_bond_position(0x03) + label(0x03) + ai_sleep + if_guard_distance_to_bond_greater_than(0x9600, 0x13) + if_guard_and_bond_within_line_of_sight(0x36) + label(0x13) + if_guard_has_stopped_moving(0x37) + goto_first(0x03) + label(0x36) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x01) + label(0x37) + ai_sleep + goto_first(0x35) + label(0x23) + label(0x34) + if_objective_num_complete(0x04, 0x02) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x23) + guard_try_throwing_grenade(0x01) + label(0x23) + if_random_seed_greater_than(0x32, 0x23) + guard_try_sidestepping(0x01) + label(0x23) + if_random_seed_greater_than(0x3c, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x50, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x64, 0x23) + guard_try_firing_walk(0x01) + label(0x23) + if_random_seed_greater_than(0x96, 0x23) + guard_try_firing_run(0x01) + label(0x23) + if_random_seed_greater_than(0xc8, 0x23) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x01) + label(0x23) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x03) + label(0x03) + ai_sleep + goto_first(0x35) + label(0x23) + ai_sleep + goto_first(0x34) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_9[] = { + label(0x35) + random_generate_seed + if_random_seed_greater_than(0x50, 0x3f) + guard_try_running_to_bond_position(0x03) + label(0x3f) + guard_try_sprinting_to_bond_position(0x03) + local_timer_reset_start + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x02) + if_objective_bitfield_is_set_on(0x00001000, 0x13) + if_objective_bitfield_is_set_on(0x00000800, 0x02) + label(0x13) + ai_sleep + if_guard_has_stopped_moving(0x37) + if_guard_distance_to_bond_greater_than(0x9600, 0x13) + if_guard_and_bond_within_line_of_sight(0x36) + label(0x13) + if_local_timer_less_than(0x580200, 0x13) + goto_first(0x35) + label(0x13) + if_guard_has_stopped_moving(0x37) + goto_first(0x03) + label(0x36) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x01) + label(0x37) + ai_sleep + goto_first(0x35) + label(0x23) + label(0x34) + if_objective_bitfield_is_set_on(0x00000400, 0x02) + if_objective_bitfield_is_set_on(0x00001000, 0x13) + if_objective_bitfield_is_set_on(0x00000800, 0x02) + label(0x13) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x23) + guard_try_throwing_grenade(0x01) + label(0x23) + if_random_seed_greater_than(0x32, 0x23) + guard_try_sidestepping(0x01) + label(0x23) + if_random_seed_greater_than(0x3c, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x50, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x64, 0x23) + guard_try_firing_walk(0x01) + label(0x23) + if_random_seed_greater_than(0x96, 0x23) + guard_try_firing_run(0x01) + label(0x23) + if_random_seed_greater_than(0xc8, 0x23) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + guard_flags_set_on(0x00004000) + if_guard_has_stopped_moving(0x23) + goto_first(0x01) + label(0x23) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x03) + label(0x03) + ai_sleep + goto_first(0x35) + label(0x23) + ai_sleep + goto_first(0x34) + label(0x02) + jump_to_ai_list(0xfd, 0x0f04) + ai_list_end +}; +u8 ai_18[] = { + guard_flags_set_on(0x00080000) + guard_walks_to_pad(0x0100) + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x06) + if_guard_shot_from_bond_missed(0x06) + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + guard_try_facing_target(0x0100, 0x0000, 0x23) + label(0x23) + text_print_top(0x128c) + local_timer_reset_start + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x06) + if_guard_shot_from_bond_missed(0x06) + if_local_timer_greater_than(0x780000, 0x23) + goto_first(0x04) + label(0x23) + if_bond_has_item_equipped(0x01, 0x3d) + text_print_top(0x138c) + local_timer_reset_start + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00000100, 0x13) + if_local_timer_greater_than(0x580200, 0x07) + label(0x13) + if_local_timer_greater_than(0xb00400, 0x06) + if_objective_bitfield_is_set_on(0x00200000, 0x06) + if_guard_shot_from_bond_missed(0x06) + if_bond_has_item_equipped(0x01, 0x23) + goto_first(0x05) + label(0x23) + objective_bitfield_set_on(0x00400000) + text_print_top(0x148c) + goto_next(0x01) + label(0x3d) + objective_bitfield_set_on(0x00400000) + text_print_top(0x338c) + goto_next(0x01) + label(0x01) + ai_sleep + jump_to_ai_list(0xfd, 0x1404) + goto_first(0x01) + label(0x06) + objective_bitfield_set_on(0x00200000) + text_print_top(0x228c) + jump_to_ai_list(0xfd, 0x1504) + label(0x07) + text_print_top(0x218c) + objective_bitfield_set_on(0x00000100) + goto_first(0x05) + ai_list_end +}; +u8 ai_19[] = { + local_timer_reset_start + label(0x33) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x01) + if_guard_shot_from_bond_missed(0x01) + if_local_timer_greater_than(0x8c0a00, 0x11) + if_local_timer_greater_than(0x600900, 0x10) + if_local_timer_greater_than(0x340800, 0x0f) + if_local_timer_greater_than(0x080700, 0x0e) + if_local_timer_greater_than(0xdc0500, 0x0d) + if_local_timer_greater_than(0xb00400, 0x0c) + if_local_timer_greater_than(0x840300, 0x0b) + if_local_timer_greater_than(0x580200, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x09) + goto_first(0x33) + label(0x09) + if_local_timer_greater_than(0x680100, 0x23) + text_print_top(0x168c) + label(0x23) + goto_first(0x33) + label(0x0a) + objective_bitfield_set_on(0x00040000) + if_local_timer_greater_than(0x940200, 0x23) + text_print_top(0x178c) + label(0x23) + goto_first(0x33) + label(0x0b) + if_local_timer_greater_than(0xc00300, 0x23) + text_print_top(0x188c) + label(0x23) + goto_first(0x33) + label(0x0c) + if_local_timer_greater_than(0xec0400, 0x23) + text_print_top(0x198c) + label(0x23) + goto_first(0x33) + label(0x0d) + if_local_timer_greater_than(0x180600, 0x23) + text_print_top(0x1a8c) + label(0x23) + goto_first(0x33) + label(0x0e) + if_local_timer_greater_than(0x440700, 0x23) + text_print_top(0x1b8c) + label(0x23) + goto_first(0x33) + label(0x0f) + if_local_timer_greater_than(0x700800, 0x23) + text_print_top(0x1c8c) + label(0x23) + goto_first(0x33) + label(0x10) + if_local_timer_greater_than(0x9c0900, 0x23) + text_print_top(0x1d8c) + label(0x23) + goto_first(0x33) + label(0x11) + if_local_timer_greater_than(0xc80a00, 0x23) + text_print_top(0x1e8c) + label(0x23) + goto_next(0x12) + goto_first(0x33) + label(0x12) + jump_to_ai_list(0xfd, 0x1504) + label(0x01) + objective_bitfield_set_on(0x00200000) + if_objective_bitfield_is_set_on(0x00040000, 0x13) + text_print_top(0x228c) + goto_next(0x23) + label(0x13) + text_print_top(0x158c) + goto_next(0x23) + label(0x23) + jump_to_ai_list(0xfd, 0x1504) + ai_list_end +}; +u8 ai_20[] = { + guard_flags_set_on(0x10000000) + guard_set_pad_preset(0x3200) + objective_bitfield_set_on(0x00800000) + if_objective_bitfield_is_set_on(0x00040000, 0x13) + objective_bitfield_set_on(0x00000200) + label(0x13) + label(0x38) + if_objective_bitfield_is_set_on(0x00200000, 0x13) + guard_runs_to_pad(0x2823) + goto_next(0x03) + label(0x13) + guard_sprints_to_pad(0x2823) + label(0x03) + ai_sleep + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0x2823, 0x2d) + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + objective_bitfield_set_on(0x00200000) + goto_first(0x38) + label(0x2d) + if_guard_and_bond_within_line_of_sight(0x23) + guard_remove_fade + label(0x01) + ai_sleep + goto_first(0x01) + label(0x23) + objective_bitfield_set_on(0x00200000) + guard_set_pad_preset(0x8b00) + goto_first(0x38) + ai_list_end +}; +u8 ai_16[] = { + aircraft_rotor_speed(0x6c02, 0x0000) + guard_play_animation(0x0200, 0xffff, 0x0200, 0x06, 0x00) + object_move_to_pad(0x00, 0x1600) + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_38[] = { + label(0x30) + local_timer_reset_start + if_objective_bitfield_is_set_on(0x00200000, 0x03) + if_objective_bitfield_is_set_on(0x00800000, 0x03) + if_objective_bitfield_is_set_on(0x00000400, 0x01) + if_objective_bitfield_is_set_on(0x00001000, 0x13) + if_objective_bitfield_is_set_on(0x00000800, 0x01) + label(0x13) + debug_log '!', '\n', '\0', + label(0x23) + ai_sleep + if_chr_does_not_exist(0x06, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xc400, 0x0b04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x8100, 0x0b04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x2400, 0x0b04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x0000, 0x0b04, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x07, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xa300, 0x0c04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x5900, 0x0c04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x3a00, 0x0c04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x3400, 0x0c04, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x08, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xa200, 0x0d04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xcb00, 0x0d04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x3600, 0x0d04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xc000, 0x0d04, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x09, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xd600, 0x0e04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x9800, 0x0e04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x6b00, 0x0e04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x2a00, 0x0e04, 0x00000000, 0x13) + label(0x13) + goto_next(0x01) + label(0x03) + if_objective_num_complete(0x04, 0x01) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x02, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xc400, 0x0204, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x8100, 0x0204, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x2400, 0x0204, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x0000, 0x0204, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x03, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xa300, 0x0304, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x5900, 0x0304, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x3a00, 0x0304, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x3400, 0x0304, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x04, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xa200, 0x0404, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xcb00, 0x0404, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0404, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xc000, 0x0404, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x05, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xd600, 0x0504, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x9800, 0x0504, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x6b00, 0x0504, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x2a00, 0x0504, 0x00000000, 0x13) + label(0x13) + goto_next(0x01) + label(0x01) + ai_sleep + if_local_timer_greater_than(0x780000, 0x23) + goto_first(0x01) + label(0x23) + goto_first(0x30) + ai_list_end +}; +u8 ai_10[] = { + guard_set_chr_num(0x06) + debug_log 'r', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_11[] = { + guard_set_chr_num(0x07) + debug_log 'r', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_12[] = { + guard_set_chr_num(0x08) + debug_log 'r', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_13[] = { + guard_set_chr_num(0x09) + debug_log 'r', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_6[] = { + label(0x23) + guard_set_health_total(0x2800) + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000010, 0x23) + label(0x23) + guard_try_spawning_hat(0xd900, 0x00000000, 0x01) + goto_next(0x01) + label(0x01) + jump_to_ai_list(0xfd, 0x0a04) + ai_list_end +}; +u8 ai_14[] = { + label(0x38) + guard_sprints_to_pad(0xcd00) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0xcd00, 0x23) + goto_first(0x38) + label(0x23) + guard_remove_fade + debug_log 'g', 'o', 'n', 'e', '\n', '\0', + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_15[] = { + label(0x38) + guard_sprints_to_pad(0x2300) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0x2300, 0x23) + goto_first(0x38) + label(0x23) + guard_remove_fade + debug_log 'g', 'o', 'n', 'e', '\n', '\0', + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_21[] = { + guard_flags_set_on(0x00080000) + label(0x38) + guard_set_chr_num(0x00) + label(0x00) + ai_sleep + guard_play_animation(0x1e00, 0x5300, 0x5400, 0x04, 0x10) + if_guard_distance_to_bond_less_than(0x1e00, 0x23) + goto_first(0x00) + label(0x23) + text_print_top(0x268c) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x780000, 0x23) + goto_first(0x03) + label(0x23) + objective_bitfield_set_on(0x00000020) + guard_play_animation(0xa800, 0x3c00, 0x7800, 0x00, 0x10) + text_print_top(0x238c) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x01) + label(0x23) + text_print_top(0x248c) + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_22[] = { + label(0x39) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x23) + goto_next(0x13) + label(0x23) + if_guard_bitfield_is_set_on(0x01, 0x23) + objective_bitfield_set_on(0x00080000) + local_timer_reset_start + guard_bitfield_set_on(0x01) + goto_next(0x13) + label(0x23) + if_local_timer_less_than(0x2c0100, 0x13) + text_print_top(0x258c) + jump_to_ai_list(0xfd, 0x1804) + label(0x13) + if_guard_distance_to_bond_less_than(0x3200, 0x23) + guard_try_running_to_bond_position(0x00) + label(0x23) + guard_try_walking_to_bond_position(0x00) + goto_first(0x39) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x01) + if_guard_distance_to_bond_less_than(0x1400, 0x03) + if_guard_has_stopped_moving(0x01) + goto_first(0x00) + label(0x3a) + goto_first(0x39) + label(0x03) + guard_animation_stop + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x01) + if_guard_distance_to_bond_less_than(0x0800, 0x3b) + if_guard_distance_to_bond_greater_than(0x2800, 0x01) + goto_first(0x04) + label(0x3b) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x3c) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x3c) + goto_next(0x05) + label(0x3c) + label(0x3d) + goto_next(0x05) + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x01) + if_guard_has_stopped_moving(0x06) + goto_first(0x05) + label(0x06) + goto_first(0x03) + label(0x01) + goto_first(0x39) + ai_list_end +}; +u8 ai_23[] = { + local_timer_reset_start + label(0x05) + ai_sleep + if_local_timer_greater_than(0x780000, 0x38) + goto_first(0x05) + label(0x38) + guard_sprints_to_pad(0x0900) + label(0x03) + ai_sleep + if_objective_num_complete(0x04, 0x3d) + goto_next(0x13) + label(0x3d) + chr_try_teleporting_to_pad(0x00, 0x0900, 0x13) + label(0x13) + if_guard_has_stopped_moving(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x2800, 0x0900, 0x23) + goto_first(0x03) + label(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x2800, 0x0900, 0x23) + goto_first(0x38) + label(0x23) + objective_bitfield_set_on(0x00000001) + guard_try_facing_target(0x0100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000002, 0x23) + goto_first(0x00) + label(0x23) + guard_surrenders + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_39[] = { + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00000008, 0x00) + goto_first(0x03) + label(0x00) + ai_sleep + if_chr_does_not_exist(0x00, 0x23) + if_objective_bitfield_is_set_on(0x00000004, 0x3d) + goto_first(0x00) + label(0x3d) + ai_sleep + ai_sleep + ai_sleep + chr_hit_body_part_with_item_damage(0x00, 0x08, 0x08) + label(0x23) + objective_bitfield_set_on(0x00004000) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_40[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000001, 0x23) + goto_first(0x00) + label(0x23) + if_objective_num_complete(0x04, 0x23) + goto_first(0x00) + label(0x23) + label(0x03) + ai_sleep + if_bond_distance_to_pad_greater_than(0xf401, 0x0900, 0x23) + goto_first(0x03) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0x45, 0x0c00, 0x1d04, 0x10000000, 0x23) + debug_log 'O', ' ', 'f', 'a', 'i', 'l', '\n', '\0', + goto_first(0x03) + label(0x23) + objective_bitfield_set_on(0x00000002) + debug_log 'O', ' ', 'i', 'n', 'i', 't', '\n', '\0', + ai_sleep + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0a00, 0x1a04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0b00, 0x1b04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0d00, 0x1c04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0e00, 0x1c04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0f00, 0x1c04, 0x10000000, 0x23) + label(0x23) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_28[] = { + guard_flags_set_on(0x00080000) + guard_set_chr_num(0x0a) + guard_try_spawning_item(0xcd00, 0x06, 0x00000000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x23) + if_guard_shot_from_bond_missed(0x23) + if_chr_dying_or_dead(0xfd, 0x23) + if_guard_distance_to_bond_less_than(0x9600, 0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + goto_next(0x33) + label(0x33) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x01) + if_guard_shot_from_bond_missed(0x01) + if_chr_dying_or_dead(0xfd, 0x01) + if_guard_distance_to_bond_greater_than(0xfa00, 0x0f) + guard_bitfield_set_off(0x01) + local_timer_start + if_local_timer_greater_than(0x600900, 0x10) + if_local_timer_greater_than(0x080700, 0x0e) + if_local_timer_greater_than(0xdc0500, 0x0d) + if_local_timer_greater_than(0xb00400, 0x0c) + if_local_timer_greater_than(0x840300, 0x0b) + if_local_timer_greater_than(0x580200, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x09) + goto_first(0x33) + label(0x09) + if_local_timer_greater_than(0x680100, 0x23) + text_print_top(0x288c) + label(0x23) + goto_first(0x33) + label(0x0a) + if_local_timer_greater_than(0x940200, 0x23) + text_print_top(0x298c) + label(0x23) + goto_first(0x33) + label(0x0b) + if_local_timer_greater_than(0xc00300, 0x23) + text_print_top(0x2a8c) + label(0x23) + goto_first(0x33) + label(0x0c) + if_local_timer_greater_than(0xec0400, 0x23) + text_print_top(0x2b8c) + label(0x23) + goto_first(0x33) + label(0x0d) + if_local_timer_greater_than(0x180600, 0x23) + text_print_top(0x2c8c) + label(0x23) + goto_first(0x33) + label(0x0e) + if_local_timer_greater_than(0x440700, 0x23) + text_print_top(0x2d8c) + label(0x23) + goto_first(0x33) + label(0x10) + if_local_timer_greater_than(0x9c0900, 0x23) + text_print_top(0x2f8c) + label(0x23) + goto_first(0x33) + label(0x0f) + if_guard_bitfield_is_set_on(0x01, 0x13) + text_print_top(0x2e8c) + label(0x13) + local_timer_stop + guard_bitfield_set_on(0x01) + goto_first(0x33) + label(0x01) + objective_bitfield_set_on(0x00000004) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x1e04) + ai_list_end +}; +u8 ai_24[] = { + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000010, 0x23) + label(0x23) + guard_try_spawning_hat(0xd600, 0x00000000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target(0x2400, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x23) + if_guard_shot_from_bond_missed(0x23) + if_chr_dying_or_dead(0xfd, 0x23) + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000004) + guard_try_fire_or_aim_at_target_update(0x0400, 0x0000, 0x03) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x1e04) + ai_list_end +}; +u8 ai_25[] = { + guard_set_chr_num(0x0b) + jump_to_ai_list(0xfd, 0x1904) + ai_list_end +}; +u8 ai_26[] = { + guard_set_chr_num(0x0c) + jump_to_ai_list(0xfd, 0x1904) + ai_list_end +}; +u8 ai_27[] = { + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000010, 0x23) + label(0x23) + guard_try_spawning_hat(0xd600, 0x00000000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x23) + if_guard_shot_from_bond_missed(0x23) + if_chr_dying_or_dead(0xfd, 0x23) + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000004) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x1e04) + ai_list_end +}; +u8 ai_29[] = { + label(0x38) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x23) + label(0x23) + ai_sleep + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23) + label(0x23) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + goto_first(0x38) + ai_list_end +}; +u8 ai_41[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x23) + goto_first(0x00) + label(0x23) + object_flags_1_set_on(0x01, 0x00000400) + random_generate_seed + if_random_seed_greater_than(0x1e, 0x23) + object_move_to_pad(0x01, 0xcd00) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x3c, 0x23) + object_move_to_pad(0x01, 0xd600) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x5a, 0x23) + object_move_to_pad(0x01, 0xd000) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + object_move_to_pad(0x01, 0xc800) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x96, 0x23) + object_move_to_pad(0x01, 0xcb00) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + object_move_to_pad(0x01, 0xc400) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0xd2, 0x23) + object_move_to_pad(0x01, 0xd500) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0xf0, 0x23) + object_move_to_pad(0x01, 0xc200) + goto_next(0x03) + label(0x23) + object_move_to_pad(0x01, 0xc000) + label(0x03) + ai_sleep + if_objective_num_complete(0x04, 0x04) + if_bond_in_room_with_pad(0xb300, 0x23) + goto_first(0x03) + label(0x23) + text_print_top(0x278c) + goto_first(0x03) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_0[] = { + debug_log 'b', 'r', 'r', 'm', ' ', 'b', 'r', 'r', 'm', '\n', '\0', + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_42[] = { + label(0x38) + ai_sleep + if_bond_is_dead(0x3e) + if_bond_in_room_with_pad(0x1600, 0x23) + goto_first(0x38) + label(0x23) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x03) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x03) + label(0x23) + if_chr_does_not_exist(0x0a, 0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x29) + jump_to_ai_list(0xfd, 0x2004) + label(0x29) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3e) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_31[] = { + if_objective_all_completed(0x23) + jump_to_ai_list(0xfd, 0x0f00) + label(0x23) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x02, 0x0100, 0x0000) + screen_fade_from_black + music_xtrack_play(0x00, 0x00, 0xff) + door_open_instant(0x03) + door_open_instant(0x04) + jump_to_ai_list(0xf8, 0x2104) + chr_flags_set_off(0x0a, 0x00040000) + jump_to_ai_list(0x0a, 0x2204) + chr_flags_set_off(0x0b, 0x00040000) + jump_to_ai_list(0x0b, 0x2304) + chr_flags_set_off(0x0c, 0x00040000) + jump_to_ai_list(0x0c, 0x2404) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_32[] = { + chr_try_teleporting_to_pad(0xfd, 0x1000, 0x23) + label(0x23) + guard_play_animation(0x6b00, 0xffff, 0xffff, 0x06, 0x10) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x23) + goto_first(0x03) + label(0x23) + screen_fade_to_black + label(0x04) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x04) + label(0x23) + exit_level + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_33[] = { + chr_try_teleporting_to_pad(0xfd, 0x1100, 0x23) + label(0x23) + guard_play_animation(0x5200, 0xffff, 0xffff, 0x06, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_34[] = { + chr_try_teleporting_to_pad(0xfd, 0x1400, 0x23) + label(0x23) + guard_play_animation(0x2800, 0xffff, 0xffff, 0x06, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_35[] = { + chr_try_teleporting_to_pad(0xfd, 0x1300, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x23) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x0e0100, 0x23) + goto_first(0x03) + label(0x23) + guard_animation_stop + label(0x23) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_30[] = { + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x000000, 0x23) + goto_first(0x03) + label(0x23) + guard_play_animation(0x6100, 0xffff, 0xaf00, 0x04, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_43[] = { + label(0x03) + ai_sleep + if_camera_is_in_bond_swirl(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xf8, 0x1f04) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_44[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000040, 0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + label(0x04) + ai_sleep + debug_log 'I', '2', '\n', '\0', + if_local_timer_greater_than(0x580200, 0x10) + if_local_timer_greater_than(0x680100, 0x0f) + if_local_timer_greater_than(0x2c0100, 0x0e) + if_local_timer_greater_than(0xb40000, 0x0d) + if_local_timer_greater_than(0x780000, 0x0c) + if_local_timer_greater_than(0x3c0000, 0x0b) + if_local_timer_greater_than(0x000000, 0x0a) + goto_first(0x04) + label(0x0a) + debug_log 'T', '1', '\n', '\0', + object_flags_1_set_off(0x0b, 0x00000200) + object_destroy(0x0b) + object_flags_1_set_off(0x0c, 0x00000200) + object_destroy(0x0c) + goto_first(0x04) + label(0x0b) + object_flags_1_set_off(0x00, 0x00000200) + object_destroy(0x00) + object_flags_1_set_off(0x0d, 0x00000200) + object_destroy(0x0d) + object_flags_1_set_off(0x0e, 0x00000200) + object_destroy(0x0e) + goto_first(0x04) + label(0x0c) + object_flags_1_set_off(0x0f, 0x00000200) + object_destroy(0x0f) + object_flags_1_set_off(0x10, 0x00000200) + object_destroy(0x10) + goto_first(0x04) + label(0x0d) + goto_first(0x04) + label(0x0e) + goto_first(0x04) + label(0x0f) + goto_first(0x04) + label(0x10) + debug_log 'C', 'L', '\n', '\0', + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_45[] = { + chr_flags_set_on(0x01, 0x00001000) + ai_sleep + label(0x33) + ai_sleep + if_killed_civilians_greater_than(0x00, 0x23) + goto_first(0x33) + label(0x23) + objective_bitfield_set_on(0x00002000) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/j/UsetuptraZ.c b/assets/obseg/setup/j/UsetuptraZ.c index 9a8c298d..a15d2b52 100644 --- a/assets/obseg/setup/j/UsetuptraZ.c +++ b/assets/obseg/setup/j/UsetuptraZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1708,47 +1709,1448 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x02060346, 0x013a013b, 0x0132013c, 0x012f1101, 0x06021101, 0x06020133, 0x3519010e, 0x08020133, 0x35400111, 0x08020135, 0x7f011208, 0x02013335, 0x7f011400, 0x01000008, 0x02019602, 0x01940202, 0x01020f15, 0x00010000, 0x08020803, 0x2f010108, 0x02010101, 0x04000000 }; -u32 ai_1[] = { 0x02060346, 0x0b3a0b3b, 0x0b320b3c, 0x0b2f1101, 0x06021179, 0x001a0106, 0x021a1201, 0x96010133, 0x3520010c, 0x94010702, 0x0b039610, 0x019410f3, 0x0abd11ff, 0x00980406, 0x00000000, 0x21ad4621, 0x0a00020a, 0x01060221, 0xad48656c, 0x6c6f210a, 0x00020133, 0x3519010e, 0x08020133, 0x35400111, 0x08020135, 0x7f011208, 0x02013335, 0x7f011400, 0x01000008, 0x02019602, 0x01940202, 0x01020f15, 0x00010000, 0x08020803, 0x2f010108, 0x02010101, 0x04000000 }; -u32 ai_2[] = { 0x02060346, 0x0b3a0b3b, 0x0b320b3c, 0x0b2f1101, 0x06021179, 0x001a0106, 0x021a1201, 0x96010133, 0x3520010c, 0x94010702, 0x0b039620, 0x019420c1, 0xfd040621, 0xad46210a, 0x00010602, 0x2103ad48, 0x656c6c6f, 0x210a0002, 0x01333519, 0x010e0802, 0x01333540, 0x01110802, 0x01357f01, 0x12080201, 0x33357f01, 0x14000100, 0x00080201, 0x96020194, 0x02020102, 0x0f150001, 0x00000802, 0x08032f01, 0x01080201, 0x01010400 }; -u32 ai_4[] = { 0x90001402, 0x06034601, 0x3a013b01, 0x32013c01, 0x01060201, 0x3335c801, 0x14000100, 0x00110201, 0x15000100, 0x00110211, 0x032f0801, 0x11020801, 0x06040000 }; -u32 ai_3[] = { 0x90001402, 0x00140021, 0x00000602, 0x06034601, 0x3a013b01, 0x32013c01, 0x01060201, 0x33359601, 0x16000100, 0x00110201, 0x09ae0212, 0x033335fa, 0x01b40000, 0xf0080112, 0x02011400, 0x21000001, 0x02011600, 0x01000001, 0x02010211, 0x032f0801, 0x11020801, 0x00040000 }; -u32 ai_5[] = { 0x02210227, 0xc000dc00, 0x00000027, 0x0227bf00, 0xc3098000, 0x00002702, 0x27bf00c3, 0x09900000, 0x002003ad, 0x44612d44, 0x61210a00, 0x02200328, 0x1f021f03, 0x4b003222, 0x2f010120, 0x02010301, 0x20022203, 0x05fd0401, 0x04000000 }; -u32 ai_7[] = { 0x02260394, 0x01280602, 0x06032f25, 0x32240106, 0x02240305, 0xfd040902, 0x25030126, 0x04000000 }; -u32 ai_8[] = { 0x02262811, 0x0211033c, 0x252f0801, 0x11020603, 0x7806359f, 0x00000010, 0x3702352f, 0x254c00c8, 0x01010602, 0x01012602, 0x253c0100, 0x08021f03, 0x4b003201, 0x2f010126, 0x02019f00, 0x00001037, 0x02293335, 0x19010e08, 0x02013335, 0x40011108, 0x0201357f, 0x01120802, 0x0133357f, 0x0f140001, 0x00000802, 0x0f150001, 0x00000802, 0x08033c01, 0x00110211, 0x3335c801, 0x00120201, 0x01060212, 0xae281302, 0x13032f01, 0xb400003c, 0x01011302, 0x0108ad77, 0x6169740a, 0x00950433, 0x35c80194, 0x040201ae, 0x0214033c, 0x01460103, 0xb3000258, 0x02960403, 0x01260203, 0x01120202, 0x01140201, 0x01060237, 0x7806019e, 0x00000010, 0x02010129, 0x04000000 }; -u32 ai_6[] = { 0xae020603, 0x3c265200, 0x14232826, 0xb40000b4, 0x23010602, 0x23033335, 0x96015200, 0x1e232826, 0x02010335, 0xdc015200, 0x32232826, 0x02010335, 0xf5015200, 0x4b232826, 0x02010335, 0xfa015200, 0x64232826, 0x02010352, 0x00c82328, 0x26ae0106, 0x02260305, 0xfd040904 }; -u32 ai_18[] = { 0x9d000400, 0x009d0000, 0x08000206, 0x033c0155, 0x005e0101, 0x060201c3, 0x9010f400, 0x00ff0207, 0x039c0000, 0x0800299c, 0x00000100, 0x299c0000, 0x04002946, 0x2a7efd2a, 0x55005301, 0x01070201, 0xae9a0000, 0x2000c390, 0x09020403, 0x9c000008, 0x00299c00, 0x00010029, 0x9c000004, 0x0029462a, 0x7efd2a52, 0x00190052, 0x11550058, 0x13b40007, 0x082db400, 0x04b02cb4, 0x0002582b, 0x0104022b, 0xb4000294, 0x01c3900c, 0x02010104, 0x022cb400, 0x04ec01c3, 0x900a0201, 0x0104022d, 0xb4000744, 0x01c39019, 0x9a000008, 0x00020101, 0x04021103, 0xc3900f03, 0x002a0213, 0x03c39011, 0x03002a02, 0x2a9a0000, 0x02009a00, 0x00080002, 0x29c3900d, 0x14000100, 0x00010201, 0x05fd0001, 0x04000000 }; -u32 ai_22[] = { 0x9d000008, 0x00020403, 0x9c000008, 0x00299c00, 0x00010029, 0x9c000002, 0x0029462a, 0x7efd2a01, 0x04022a9a, 0x00000400, 0x9a000008, 0x00022914, 0x00010000, 0x01020102, 0x120330fd, 0x01011202, 0x01c3900e, 0x05fd0001, 0x04000000 }; -u32 ai_19[] = { 0x9d000008, 0x00140024, 0x00460602, 0x06034601, 0x7efd019c, 0x00000800, 0x29010602, 0x019a0000, 0x01009a00, 0x00080002, 0x290330fd, 0x11304615, 0x314615e8, 0x122f1401, 0x29021414, 0x00240046, 0x01020101, 0x290212e7, 0x13012902, 0x13160004, 0x00460102, 0x019a0000, 0x10000129, 0x02150600, 0x0205fd00, 0x08021105, 0xfd000104 }; -u32 ai_20[] = { 0x9d000008, 0x009d0000, 0x00802102, 0x06039c00, 0x00100001, 0x31470230, 0x47020106, 0x020118fd, 0x08069a00, 0x00400005, 0xfd000102, 0x020d0219, 0x039c0000, 0x08000101, 0x190201ae, 0x021203b4, 0x0004b001, 0x01120201, 0x1e005102, 0x04035500, 0x62084235, 0xd9460051, 0x35023503, 0x5b2a3500, 0x0a02355b, 0x2935000a, 0x02357002, 0x35b40011, 0x942fb400, 0x0f3c2e02, 0x35b4000b, 0xb82db400, 0x09602c02, 0x05032f01, 0x01040201, 0x33356401, 0x0a00ac00, 0x00004500, 0x109a0020, 0x00000104, 0x02013596, 0x010a00ad, 0x0000004a, 0x00109a00, 0x20000001, 0x04020135, 0xc8010a00, 0xae000000, 0x4f00109a, 0x00200000, 0x01040201, 0x0a00af00, 0x00005900, 0x109a0020, 0x00000104, 0x022cb400, 0x099c01c3, 0x90140201, 0x0105022d, 0xb4000bf4, 0x01c39015, 0x9a000100, 0x00020101, 0x05022eb4, 0x000f7801, 0xc3901602, 0x01010502, 0x2fb40011, 0xd001c390, 0x179a0002, 0x00000201, 0x01050208, 0x05fd0416, 0x020a05fd, 0x041c0400 }; -u32 ai_27[] = { 0x17000100, 0x00010201, 0x039c0008, 0x00000ac3, 0x901aae02, 0x040330fd, 0x0ab40001, 0x2c015500, 0x62080104, 0x0201c390, 0x1b020503, 0x30fd0a55, 0x00620801, 0x05020805, 0xfd041602, 0x0a05fd00, 0x01040000 }; -u32 ai_21[] = { 0xc3901802, 0x38032806, 0x01380206, 0x034b0019, 0x112f0801, 0x06023901, 0x38021108, 0x0212034b, 0x00083a4c, 0x00280801, 0x12023a47, 0x403b48c0, 0x3b0d0013, 0x023b0202, 0xfa001302, 0x13032f14, 0x01130214, 0x01110208, 0x01380400 }; -u32 ai_17[] = { 0x04000000 }; -u32 ai_9[] = { 0xad446f6e, 0x650a008f, 0x0050c000, 0xdc000000, 0x00010201, 0xbf00bd0a, 0x00000000, 0x01020133, 0x35c80106, 0x040105fd, 0x04010201, 0x94010600, 0x0205fd00, 0x08040000 }; -u32 ai_10[] = { 0x33353c01, 0xab007002, 0x01357801, 0xab003702, 0x0135b401, 0xab003402, 0x01ab0043, 0x020205fd, 0x04100400 }; -u32 ai_11[] = { 0x33353c01, 0xab007102, 0x01357801, 0xab007502, 0x0135b401, 0xab006e02, 0x01ab0078, 0x020205fd, 0x04100400 }; -u32 ai_12[] = { 0x33353c01, 0xab007102, 0x01357801, 0xab006b02, 0x0135b401, 0xab007702, 0x01ab0078, 0x020205fd, 0x04100400 }; -u32 ai_13[] = { 0x33353c01, 0xab007502, 0x01357801, 0xab007402, 0x0135b401, 0xab007002, 0x01ab0078, 0x020205fd, 0x04100400 }; -u32 ai_14[] = { 0x02013335, 0x78358f00, 0x3cbf00bd, 0x0a000000, 0x00010201, 0xc000dc00, 0x00000008, 0x02358f00, 0x50c000de, 0x00000000, 0x010201bf, 0x00c30980, 0x00000001, 0x0201bf00, 0xc3099000, 0x00000802, 0x0805fd04, 0x01040000 }; -u32 ai_15[] = { 0x02013335, 0x64373532, 0x35900014, 0x8f0028bf, 0x00bd0a00, 0x00000001, 0x0201c000, 0xdc000000, 0x00080235, 0x9000288f, 0x0028bf00, 0xc3098000, 0x00000102, 0x01c000de, 0x00000000, 0x010201bf, 0x00c30990, 0x00000008, 0x02379000, 0x288f003c, 0xc000dd00, 0x00000001, 0x0201bf00, 0xc3098000, 0x00000102, 0x01bf00c3, 0x09900000, 0x00080208, 0x05fd0407, 0x04000000 }; -u32 ai_16[] = { 0x9000288f, 0x003c0206, 0x036d0008, 0x01060208, 0x05fd0409, 0x04000000 }; -u32 ai_28[] = { 0x02040301, 0x04040000 }; -u32 ai_29[] = { 0x02060352, 0x00140052, 0x369c0000, 0x08000155, 0x00583501, 0x0602359c, 0x00002000, 0x35010602, 0x35003602, 0x01ae0211, 0x03b40000, 0x4b015200, 0x14005201, 0x55005835, 0x01110235, 0x9c000020, 0x00350111, 0x02350236, 0x0201ae67, 0x00670102, 0x1403b400, 0x00b40101, 0x14020167, 0x02670367, 0x04670567, 0x06670767, 0x2e021203, 0x68010101, 0x01120201, 0xa0450000, 0x0010a048, 0x00000010, 0xd94500ba, 0x010201d9, 0x4800ba01, 0x0201a045, 0x00040400, 0xa0480004, 0x04000213, 0x03011304 }; -u32 ai_30[] = { 0x02060352, 0x006400af, 0x01010602, 0x01ad476f, 0x0a003335, 0x6401f311, 0xbd04ff00, 0x0a040a00, 0x00000011, 0x020135c8, 0x01f311bd, 0x04ff000c, 0x040a0000, 0x00001102, 0x01f311bd, 0x04ff000d, 0x040a0000, 0x00001102, 0x11033335, 0x6401f312, 0xbd04ff00, 0x09040a00, 0x00000012, 0x0201f312, 0xbd04ff00, 0x0b040a00, 0x00000012, 0x02120355, 0x00900101, 0x120201ad, 0x706f7032, 0x0a0003f3, 0x01bd04ff, 0x0041040b, 0x00000000, 0x01020103, 0xf301bd04, 0xff003a04, 0x0c000000, 0x00010201, 0x03f301bd, 0x04ff003b, 0x040d0000, 0x00000102, 0x0103f301, 0xbd04ff00, 0x35040e00, 0x00000001, 0x02010333, 0x355001f3, 0x02bd04ff, 0x0036040f, 0x00000000, 0x02020135, 0xa001f302, 0xbd04ff00, 0x3d040f00, 0x00000002, 0x0201f302, 0xbd04ff00, 0x42040f00, 0x00000002, 0x02020333, 0x355001f3, 0x02bd04ff, 0x0037040f, 0x00000000, 0x02020135, 0xa001f302, 0xbd04ff00, 0x3e040f00, 0x00000002, 0x0201f302, 0xbd04ff00, 0x40040f00, 0x00000002, 0x02020333, 0x355001f3, 0x02bd04ff, 0x0038040f, 0x00000000, 0x02020135, 0xa001f302, 0xbd04ff00, 0x3f040f00, 0x00000002, 0x0201f302, 0xbd04ff00, 0x34040f00, 0x00000002, 0x02020333, 0x357801f3, 0x02bd04ff, 0x0039040f, 0x00000000, 0x020201f3, 0x02bd04ff, 0x003c040f, 0x00000000, 0x020202ad, 0x706f7033, 0x0a000213, 0x03011304 }; -u32 ai_31[] = { 0x0206039c, 0x00000800, 0x01010602, 0x01ae0211, 0x03304602, 0x31460230, 0x48353148, 0x350202b4, 0x00038401, 0x01110235, 0xb4000708, 0x01011102, 0x01aec390, 0x120212b4, 0x00012c01, 0x03011202, 0x01c39013, 0xb7003cb9, 0xb5021303, 0x960435bb, 0x001e1402, 0x35960235, 0xbb001702, 0x02359601, 0x35bb0014, 0x010235bb, 0x00001501, 0x130201c4, 0x003a00c7, 0x0000000e, 0x10940101, 0x130202c9, 0x01c400d7, 0x02c60200, 0x47000094, 0x02011302, 0x14c400d6, 0x03c60300, 0x47000003, 0xc400d801, 0xc6010047, 0x00009404, 0x01130215, 0xb69a0008, 0x00000208, 0x03010804 }; -u32 ai_32[] = { 0x0204aec4, 0x0040ff6d, 0x00010006, 0x0201c400, 0x3fff0206, 0x039c0004, 0x000008b4, 0x00003c01, 0x01060201, 0x01040208, 0xc4003dff, 0x02110301, 0x11040000 }; -u32 ai_33[] = { 0x0204ae33, 0x35af2d35, 0x642c022b, 0xc400f9ff, 0x0006022c, 0xc400dfff, 0x0006022d, 0xc40033ff, 0x00060206, 0x033335fe, 0x013335fa, 0x11b40000, 0x78010106, 0x02110333, 0x35fe01b4, 0x0000b401, 0x01110201, 0x6d000101, 0x04020105, 0xfd041804 }; -u32 ai_23[] = { 0x86fa8100, 0x02118228, 0xae950184, 0x64040008, 0x020403b4, 0x00007801, 0x01040201, 0x85010111, 0x02013335, 0xaf2d3564, 0x2c022bc4, 0x00f9ff00, 0x06022cc4, 0x00dfff00, 0x06022dc4, 0x0033ff00, 0x06020601, 0x11020803, 0x9a000400, 0x00010804 }; -u32 ai_34[] = { 0x02000352, 0x003200cb, 0x01010002, 0x01ae0219, 0x03eb3db4, 0x0000b401, 0x01190201, 0xecd700da, 0x31460130, 0x46019a00, 0x00800002, 0x01021103, 0xdc010111, 0x02013146, 0x3c30463c, 0xf10105fd, 0x000f0201, 0xddeaed03, 0x0303d51d, 0x00020000, 0xa1460000, 0x04000546, 0x041b05f8, 0x041a0303, 0xdbae0212, 0x03b40001, 0x2c01b400, 0x00f02fb4, 0x0000b42e, 0xb400005a, 0x2db40000, 0x3c2c0112, 0x022ca419, 0x00020000, 0x5f190112, 0x022da41a, 0x00020000, 0x5f1a0112, 0x022ea41b, 0x00020000, 0x5f1b0112, 0x022fa41c, 0x00020000, 0x5f1c0112, 0x0201da02, 0x1303dc01, 0x01130201, 0xd205fd00, 0x01023cd2, 0x05fd0001, 0x023d05fd, 0x00010400 }; -u32 ai_25[] = { 0xa0fd0000, 0x0010d9fd, 0x00cd0102, 0x010a005a, 0xffffffff, 0x061005fd, 0x00010400 }; -u32 ai_26[] = { 0xa0fd0000, 0x0010d9fd, 0x00cc0102, 0x010a005a, 0x0007ffff, 0x061005fd, 0x00010400 }; -u32 ai_24[] = { 0xae0a0064, 0x00000001, 0x04100211, 0x03b40000, 0x00010111, 0x02010a00, 0x640001ff, 0xff041005, 0xfd000104 }; -u32 ai_35[] = { 0x021103cf, 0x01011102, 0x0105f804, 0x1905fd00, 0x01040000 }; -u32 ai_36[] = { 0x0211039c, 0x00080000, 0x01011102, 0x01ae0212, 0x03b40003, 0x6632b400, 0x027631b4, 0x00023a30, 0xb40001c2, 0x2fb40000, 0xd22eb400, 0x005a2db4, 0x00001e2c, 0x0112022c, 0xa40f0002, 0x00005f0f, 0x0112022d, 0xa4100002, 0x00005f10, 0xa42b0002, 0x00005f2b, 0x0112022e, 0xa4110002, 0x00005f11, 0x0112022f, 0xa4120002, 0x00005f12, 0xa42c0002, 0x00005f2c, 0x01120230, 0xa4130002, 0x00005f13, 0x01120231, 0xa4140002, 0x00005f14, 0x01120232, 0xa4150002, 0x00005f15, 0xa42d0002, 0x00005f2d, 0x011205fd, 0x00010400 }; -u32 ai_37[] = { 0x02110355, 0x00620101, 0x110201e9, 0x9a001000, 0x0005fd00, 0x01040000 }; -u32 ai_38[] = { 0x02040368, 0x1e01356b, 0x1e020235, 0x681f0135, 0x6b1f0202, 0x35036820, 0x01356b20, 0x02023568, 0x2101356b, 0x21020235, 0x03682201, 0x356b2202, 0x02356823, 0x01356b23, 0x02023503, 0x68240135, 0x6b240202, 0x35682501, 0x356b2502, 0x02350368, 0x2601356b, 0x26020235, 0x68270135, 0x6b270202, 0x35036828, 0x01356b28, 0x02023501, 0x04040000 }; -u32 ai_39[] = { 0x0206039c, 0x00200000, 0x01010602, 0x01ae0211, 0x03b40000, 0x3c010111, 0x02013335, 0x8035c400, 0xb807c507, 0x29000002, 0x359b0020, 0x00000106, 0x020805fd, 0x00010400 }; -u32 ai_40[] = { 0x02060331, 0x46010106, 0x0201c390, 0x1c9a0000, 0x40000208, 0x03010804 }; +u8 ai_0[] = { + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_guard_see_another_guard_shot(0x01) + if_guard_see_another_guard_die(0x01) + if_guard_sees_bond(0x01) + if_guard_and_bond_within_line_of_sight(0x01) + if_guard_has_stopped_moving(0x11) + goto_first(0x06) + label(0x11) + goto_first(0x06) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x01) + if_guard_bitfield_is_set_on(0x02, 0x01) + guard_bitfield_set_on(0x02) + label(0x01) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x08) + label(0x01) + goto_first(0x01) + ai_list_end +}; +u8 ai_1[] = { + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x0b) + if_guard_see_another_guard_shot(0x0b) + if_guard_see_another_guard_die(0x0b) + if_guard_sees_bond(0x0b) + if_guard_and_bond_within_line_of_sight(0x0b) + if_guard_has_stopped_moving(0x11) + goto_first(0x06) + label(0x11) + if_guard_hits_greater_than(0x00, 0x1a) + goto_first(0x06) + label(0x1a) + guard_try_firing_run(0x01) + if_guard_bitfield_is_set_on(0x01, 0x01) + random_generate_seed + if_random_seed_greater_than(0x20, 0x01) + guard_points_at_bond + guard_bitfield_set_on(0x01) + jump_to_return_ai_list + label(0x0b) + ai_sleep + if_guard_bitfield_is_set_on(0x10, 0x01) + guard_bitfield_set_on(0x10) + if_bond_damage_and_pickups_disabled(0x0a) + chr_try_spawning_at_pad(0x11, 0xff, 0x9800, 0x0604, 0x00000000, 0x21) + debug_log 'F', '!', '\n', '\0', + label(0x0a) + goto_first(0x06) + label(0x21) + debug_log 'H', 'e', 'l', 'l', 'o', '!', '\n', '\0', + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x01) + if_guard_bitfield_is_set_on(0x02, 0x01) + guard_bitfield_set_on(0x02) + label(0x01) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x08) + label(0x01) + goto_first(0x01) + ai_list_end +}; +u8 ai_2[] = { + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x0b) + if_guard_see_another_guard_shot(0x0b) + if_guard_see_another_guard_die(0x0b) + if_guard_sees_bond(0x0b) + if_guard_and_bond_within_line_of_sight(0x0b) + if_guard_has_stopped_moving(0x11) + goto_first(0x06) + label(0x11) + if_guard_hits_greater_than(0x00, 0x1a) + goto_first(0x06) + label(0x1a) + guard_try_firing_run(0x01) + if_guard_bitfield_is_set_on(0x01, 0x01) + random_generate_seed + if_random_seed_greater_than(0x20, 0x01) + guard_points_at_bond + guard_bitfield_set_on(0x01) + jump_to_return_ai_list + label(0x0b) + ai_sleep + if_guard_bitfield_is_set_on(0x20, 0x01) + guard_bitfield_set_on(0x20) + chr_try_spawning_clone(0xfd, 0x0604, 0x21) + debug_log 'F', '!', '\n', '\0', + goto_first(0x06) + label(0x21) + ai_sleep + debug_log 'H', 'e', 'l', 'l', 'o', '!', '\n', '\0', + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x01) + if_guard_bitfield_is_set_on(0x02, 0x01) + guard_bitfield_set_on(0x02) + label(0x01) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x08) + label(0x01) + goto_first(0x01) + ai_list_end +}; +u8 ai_4[] = { + guard_set_armour(0x1400) + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_guard_see_another_guard_shot(0x01) + if_guard_see_another_guard_die(0x01) + if_guard_sees_bond(0x01) + if_guard_and_bond_within_line_of_sight(0x01) + goto_first(0x06) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x11) + label(0x01) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x11) + label(0x11) + ai_sleep + if_guard_has_stopped_moving(0x08) + goto_first(0x11) + label(0x08) + goto_first(0x06) + ai_list_end +}; +u8 ai_3[] = { + guard_set_armour(0x1400) + label(0x00) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_guard_see_another_guard_shot(0x01) + if_guard_see_another_guard_die(0x01) + if_guard_sees_bond(0x01) + if_guard_and_bond_within_line_of_sight(0x01) + goto_first(0x06) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x96, 0x01) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x11) + label(0x01) + guard_kneel + local_timer_reset_start + label(0x12) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x01) + if_local_timer_greater_than(0xf00000, 0x08) + goto_first(0x12) + label(0x01) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x01) + label(0x01) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x01) + label(0x01) + label(0x11) + ai_sleep + if_guard_has_stopped_moving(0x08) + goto_first(0x11) + label(0x08) + goto_first(0x00) + ai_list_end +}; +u8 ai_5[] = { + label(0x21) + label(0x27) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x27) + label(0x27) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x27) + label(0x27) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x20) + ai_sleep + debug_log 'D', 'a', '-', 'D', 'a', '!', '\n', '\0', + label(0x20) + ai_sleep + guard_try_running_to_bond_position(0x1f) + label(0x1f) + ai_sleep + if_guard_distance_to_bond_less_than(0x3200, 0x22) + if_guard_has_stopped_moving(0x01) + goto_first(0x20) + label(0x01) + ai_sleep + goto_first(0x20) + label(0x22) + ai_sleep + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_7[] = { + label(0x26) + ai_sleep + guard_bitfield_set_on(0x01) + guard_try_running_to_bond_position(0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x25) + if_guard_sees_bond(0x24) + goto_first(0x06) + label(0x24) + ai_sleep + jump_to_ai_list(0xfd, 0x0904) + label(0x25) + ai_sleep + goto_first(0x26) + ai_list_end +}; +u8 ai_8[] = { + label(0x26) + guard_try_running_to_bond_position(0x11) + label(0x11) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x25) + if_guard_has_stopped_moving(0x08) + goto_first(0x11) + label(0x06) + ai_sleep + if_guard_hits_less_than(0x06, 0x35) + if_guard_flags_is_set_on(0x10000000, 0x37) + label(0x35) + if_guard_has_stopped_moving(0x25) + if_guard_distance_to_bond_greater_than(0xc800, 0x01) + goto_first(0x06) + label(0x01) + goto_first(0x26) + label(0x25) + if_guard_and_bond_within_line_of_sight(0x01) + goto_next(0x08) + label(0x1f) + ai_sleep + if_guard_distance_to_bond_less_than(0x3200, 0x01) + if_guard_has_stopped_moving(0x01) + goto_first(0x26) + label(0x01) + if_guard_flags_is_set_on(0x10000000, 0x37) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x0f) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x01) + goto_next(0x11) + label(0x11) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + goto_next(0x12) + label(0x01) + goto_first(0x06) + label(0x12) + local_timer_reset_start + guard_try_running_to_bond_position(0x13) + label(0x13) + ai_sleep + if_guard_has_stopped_moving(0x01) + if_local_timer_greater_than(0x3c0000, 0x01) + goto_first(0x13) + label(0x01) + guard_animation_stop + debug_log 'w', 'a', 'i', 't', '\n', '\0', + guard_bitfield_set_off(0x04) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + guard_bitfield_set_on(0x04) + label(0x01) + local_timer_reset_start + label(0x14) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x01) + if_guard_shot_from_bond_missed(0x01) + ai_sleep + if_local_timer_less_than(0x580200, 0x02) + if_guard_bitfield_is_set_on(0x04, 0x03) + goto_first(0x26) + label(0x03) + goto_first(0x12) + label(0x02) + goto_first(0x14) + label(0x01) + goto_first(0x06) + label(0x37) + if_guard_hits_less_than(0x06, 0x01) + guard_flags_set_off(0x10000000) + label(0x01) + goto_first(0x29) + ai_list_end +}; +u8 ai_6[] = { + local_timer_reset_start + label(0x06) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x26) + if_bond_distance_to_pad_less_than(0x1400, 0x2823, 0x26) + if_local_timer_greater_than(0xb40000, 0x23) + goto_first(0x06) + label(0x23) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x96, 0x01) + if_bond_distance_to_pad_less_than(0x1e00, 0x2823, 0x26) + label(0x01) + ai_sleep + if_random_seed_greater_than(0xdc, 0x01) + if_bond_distance_to_pad_less_than(0x3200, 0x2823, 0x26) + label(0x01) + ai_sleep + if_random_seed_greater_than(0xf5, 0x01) + if_bond_distance_to_pad_less_than(0x4b00, 0x2823, 0x26) + label(0x01) + ai_sleep + if_random_seed_greater_than(0xfa, 0x01) + if_bond_distance_to_pad_less_than(0x6400, 0x2823, 0x26) + label(0x01) + ai_sleep + if_bond_distance_to_pad_less_than(0xc800, 0x2823, 0x26) + local_timer_reset_start + goto_first(0x06) + label(0x26) + ai_sleep + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_18[] = { + guard_flags_set_on(0x00000400) + guard_flags_set_on(0x00080000) + label(0x06) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x01) + if_bond_in_room_with_pad(0x5e00, 0x01) + goto_first(0x06) + label(0x01) + text_print_top(0x1090) + music_xtrack_play(0x00, 0x00, 0xff) + label(0x07) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x29) + if_objective_bitfield_is_set_on(0x00010000, 0x29) + if_objective_bitfield_is_set_on(0x00040000, 0x29) + if_guard_shot_from_bond_missed(0x2a) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_bond_in_room_with_pad(0x5300, 0x01) + goto_first(0x07) + label(0x01) + local_timer_reset_start + objective_bitfield_set_on(0x00200000) + text_print_top(0x0990) + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x29) + if_objective_bitfield_is_set_on(0x00010000, 0x29) + if_objective_bitfield_is_set_on(0x00040000, 0x29) + if_guard_shot_from_bond_missed(0x2a) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_bond_distance_to_pad_less_than(0x1900, 0x5200, 0x11) + if_bond_in_room_with_pad(0x5800, 0x13) + if_local_timer_greater_than(0x080700, 0x2d) + if_local_timer_greater_than(0xb00400, 0x2c) + if_local_timer_greater_than(0x580200, 0x2b) + goto_first(0x04) + label(0x2b) + if_local_timer_greater_than(0x940200, 0x01) + text_print_top(0x0c90) + label(0x01) + goto_first(0x04) + label(0x2c) + if_local_timer_greater_than(0xec0400, 0x01) + text_print_top(0x0a90) + label(0x01) + goto_first(0x04) + label(0x2d) + if_local_timer_greater_than(0x440700, 0x01) + text_print_top(0x1990) + objective_bitfield_set_on(0x00080000) + label(0x01) + goto_first(0x04) + label(0x11) + ai_sleep + text_print_top(0x0f90) + ai_sleep + goto_next(0x2a) + label(0x13) + ai_sleep + text_print_top(0x1190) + ai_sleep + goto_next(0x2a) + label(0x2a) + objective_bitfield_set_on(0x00020000) + objective_bitfield_set_on(0x00080000) + label(0x29) + text_print_top(0x0d90) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x01) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_22[] = { + guard_flags_set_on(0x00080000) + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x29) + if_objective_bitfield_is_set_on(0x00010000, 0x29) + if_objective_bitfield_is_set_on(0x00020000, 0x29) + if_guard_shot_from_bond_missed(0x2a) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + goto_first(0x04) + label(0x2a) + objective_bitfield_set_on(0x00040000) + objective_bitfield_set_on(0x00080000) + label(0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x01) + label(0x12) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x01) + goto_first(0x12) + label(0x01) + text_print_top(0x0e90) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_19[] = { + guard_flags_set_on(0x00080000) + guard_try_fire_or_aim_at_target(0x2400, 0x4600, 0x06) + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_chr_was_damaged_since_last_check(0xfd, 0x01) + if_objective_bitfield_is_set_on(0x00080000, 0x29) + goto_first(0x06) + label(0x01) + objective_bitfield_set_on(0x00010000) + objective_bitfield_set_on(0x00080000) + label(0x29) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x11) + if_chr_dying_or_dead(0x46, 0x15) + if_chr_does_not_exist(0x46, 0x15) + if_guard_is_firing(0x12) + if_guard_has_stopped_moving(0x14) + goto_first(0x29) + label(0x14) + guard_try_fire_or_aim_at_target(0x2400, 0x4600, 0x01) + label(0x01) + goto_first(0x29) + label(0x12) + if_guard_is_firing_and_using_180_range_flag(0x13) + goto_first(0x29) + label(0x13) + guard_try_fire_or_aim_at_target_update(0x0400, 0x4600, 0x01) + label(0x01) + objective_bitfield_set_on(0x00100000) + goto_first(0x29) + label(0x15) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + label(0x11) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_20[] = { + guard_flags_set_on(0x00080000) + guard_flags_set_on(0x80000000) + guard_surrenders + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00100000, 0x01) + if_chr_does_not_exist(0x47, 0x02) + if_chr_dying_or_dead(0x47, 0x02) + goto_first(0x06) + label(0x01) + chr_hit_body_part_with_item_damage(0xfd, 0x08, 0x06) + objective_bitfield_set_on(0x00400000) + jump_to_ai_list(0xfd, 0x0100) + label(0x02) + guard_looks_around_self + label(0x19) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x01) + goto_first(0x19) + label(0x01) + local_timer_reset_start + label(0x12) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x01) + goto_first(0x12) + label(0x01) + guard_walks_to_pad(0x5100) + label(0x04) + ai_sleep + if_bond_in_room_with_pad(0x6200, 0x08) + if_guard_is_on_screen(0x35) + chr_try_teleporting_to_pad(0x46, 0x5100, 0x35) + label(0x35) + ai_sleep + if_object_not_destroyed(0x2a, 0x35) + goto_next(0x0a) + label(0x35) + if_object_not_destroyed(0x29, 0x35) + goto_next(0x0a) + label(0x35) + if_game_difficulty_less_than(0x02, 0x35) + if_local_timer_greater_than(0x941100, 0x2f) + if_local_timer_greater_than(0x3c0f00, 0x2e) + label(0x35) + if_local_timer_greater_than(0xb80b00, 0x2d) + if_local_timer_greater_than(0x600900, 0x2c) + label(0x05) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x04) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x64, 0x01) + guard_play_animation(0xac00, 0x0000, 0x4500, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x01) + if_random_seed_greater_than(0x96, 0x01) + guard_play_animation(0xad00, 0x0000, 0x4a00, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x01) + if_random_seed_greater_than(0xc8, 0x01) + guard_play_animation(0xae00, 0x0000, 0x4f00, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x01) + guard_play_animation(0xaf00, 0x0000, 0x5900, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x2c) + if_local_timer_greater_than(0x9c0900, 0x01) + text_print_top(0x1490) + label(0x01) + goto_first(0x05) + label(0x2d) + if_local_timer_greater_than(0xf40b00, 0x01) + text_print_top(0x1590) + objective_bitfield_set_on(0x00000100) + label(0x01) + goto_first(0x05) + label(0x2e) + if_local_timer_greater_than(0x780f00, 0x01) + text_print_top(0x1690) + label(0x01) + goto_first(0x05) + label(0x2f) + if_local_timer_greater_than(0xd01100, 0x01) + text_print_top(0x1790) + objective_bitfield_set_on(0x00000200) + label(0x01) + goto_first(0x05) + label(0x08) + jump_to_ai_list(0xfd, 0x1604) + label(0x0a) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_27[] = { + guard_try_facing_target(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + if_objective_bitfield_is_set_on(0x00000800, 0x0a) + text_print_top(0x1a90) + local_timer_reset_start + label(0x04) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x01) + if_bond_in_room_with_pad(0x6200, 0x08) + goto_first(0x04) + label(0x01) + text_print_top(0x1b90) + label(0x05) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x0a) + if_bond_in_room_with_pad(0x6200, 0x08) + goto_first(0x05) + label(0x08) + jump_to_ai_list(0xfd, 0x1604) + label(0x0a) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_21[] = { + text_print_top(0x1890) + label(0x38) + ai_sleep + guard_try_running_to_bond_position(0x06) + goto_first(0x38) + label(0x06) + ai_sleep + if_guard_distance_to_bond_less_than(0x1900, 0x11) + if_guard_has_stopped_moving(0x08) + goto_first(0x06) + label(0x39) + goto_first(0x38) + label(0x11) + guard_animation_stop + label(0x12) + ai_sleep + if_guard_distance_to_bond_less_than(0x0800, 0x3a) + if_guard_distance_to_bond_greater_than(0x2800, 0x08) + goto_first(0x12) + label(0x3a) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x3b) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x3b) + guard_looks_around_self + goto_next(0x13) + label(0x3b) + label(0x02) + guard_raises_arms + goto_next(0x13) + label(0x13) + ai_sleep + if_guard_has_stopped_moving(0x14) + goto_first(0x13) + label(0x14) + goto_first(0x11) + label(0x08) + goto_first(0x38) + ai_list_end +}; +u8 ai_17[] = { + ai_list_end +}; +u8 ai_9[] = { + debug_log 'D', 'o', 'n', 'e', '\n', '\0', + guard_set_health_total(0x5000) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x01) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + set_return_ai_list(0x0104) + jump_to_ai_list(0xfd, 0x0104) + label(0x01) + guard_bitfield_set_on(0x01) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + ai_list_end +}; +u8 ai_10[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7000) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x3700) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x3400) + label(0x01) + guard_set_pad_preset(0x4300) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_11[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7100) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x7500) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x6e00) + label(0x01) + guard_set_pad_preset(0x7800) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_12[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7100) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x6b00) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x7700) + label(0x01) + guard_set_pad_preset(0x7800) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_13[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7500) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x7400) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x7000) + label(0x01) + guard_set_pad_preset(0x7800) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_14[] = { + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x78, 0x35) + guard_set_health_total(0x3c00) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x08) + label(0x35) + guard_set_health_total(0x5000) + guard_try_spawning_hat(0xde00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x08) + label(0x08) + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_15[] = { + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x64, 0x37) + if_random_seed_greater_than(0x32, 0x35) + guard_set_armour(0x1400) + guard_set_health_total(0x2800) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x08) + label(0x35) + guard_set_armour(0x2800) + guard_set_health_total(0x2800) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x01) + label(0x01) + guard_try_spawning_hat(0xde00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x08) + label(0x37) + guard_set_armour(0x2800) + guard_set_health_total(0x3c00) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x08) + label(0x08) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_16[] = { + guard_set_armour(0x2800) + guard_set_health_total(0x3c00) + label(0x06) + ai_sleep + if_objective_num_complete(0x00, 0x08) + goto_first(0x06) + label(0x08) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_28[] = { + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_29[] = { + label(0x06) + ai_sleep + if_bond_distance_to_pad_less_than(0x1400, 0x5200, 0x36) + if_objective_bitfield_is_set_on(0x00080000, 0x01) + if_bond_in_room_with_pad(0x5800, 0x35) + goto_first(0x06) + label(0x35) + if_objective_bitfield_is_set_on(0x00200000, 0x35) + goto_first(0x06) + label(0x35) + goto_next(0x36) + label(0x01) + local_timer_reset_start + label(0x11) + ai_sleep + if_local_timer_greater_than(0x4b0000, 0x01) + if_bond_distance_to_pad_less_than(0x1400, 0x5200, 0x01) + if_bond_in_room_with_pad(0x5800, 0x35) + goto_first(0x11) + label(0x35) + if_objective_bitfield_is_set_on(0x00200000, 0x35) + goto_first(0x11) + label(0x35) + label(0x36) + label(0x01) + local_timer_reset_start + door_close(0x00) + door_close(0x01) + label(0x14) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x01) + goto_first(0x14) + label(0x01) + door_close(0x02) + door_close(0x03) + door_close(0x04) + door_close(0x05) + door_close(0x06) + door_close(0x07) + door_close(0x2e) + label(0x12) + ai_sleep + if_door_state_equal(0x01, 0x01, 0x01) + goto_first(0x12) + label(0x01) + chr_flags_set_on(0x45, 0x10000000) + chr_flags_set_on(0x48, 0x10000000) + chr_try_teleporting_to_pad(0x45, 0xba00, 0x01) + label(0x01) + chr_try_teleporting_to_pad(0x48, 0xba00, 0x01) + label(0x01) + chr_flags_set_on(0x45, 0x00040400) + chr_flags_set_on(0x48, 0x00040400) + label(0x13) + ai_sleep + goto_first(0x13) + ai_list_end +}; +u8 ai_30[] = { + label(0x06) + ai_sleep + if_bond_distance_to_pad_less_than(0x6400, 0xaf00, 0x01) + goto_first(0x06) + label(0x01) + debug_log 'G', 'o', '\n', '\0', + random_generate_seed + if_random_seed_greater_than(0x64, 0x01) + if_bond_damage_and_pickups_disabled(0x11) + chr_try_spawning_at_pad(0x04, 0xff, 0x0a00, 0x0a04, 0x00000000, 0x11) + label(0x01) + if_random_seed_greater_than(0xc8, 0x01) + if_bond_damage_and_pickups_disabled(0x11) + chr_try_spawning_at_pad(0x04, 0xff, 0x0c00, 0x0a04, 0x00000000, 0x11) + label(0x01) + if_bond_damage_and_pickups_disabled(0x11) + chr_try_spawning_at_pad(0x04, 0xff, 0x0d00, 0x0a04, 0x00000000, 0x11) + label(0x11) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x64, 0x01) + if_bond_damage_and_pickups_disabled(0x12) + chr_try_spawning_at_pad(0x04, 0xff, 0x0900, 0x0a04, 0x00000000, 0x12) + label(0x01) + if_bond_damage_and_pickups_disabled(0x12) + chr_try_spawning_at_pad(0x04, 0xff, 0x0b00, 0x0a04, 0x00000000, 0x12) + label(0x12) + ai_sleep + if_bond_in_room_with_pad(0x9000, 0x01) + goto_first(0x12) + label(0x01) + debug_log 'p', 'o', 'p', '2', '\n', '\0', + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x4100, 0x0b04, 0x00000000, 0x01) + label(0x01) + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x3a00, 0x0c04, 0x00000000, 0x01) + label(0x01) + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x3b00, 0x0d04, 0x00000000, 0x01) + label(0x01) + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x3500, 0x0e04, 0x00000000, 0x01) + label(0x01) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x50, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_random_seed_greater_than(0xa0, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3d00, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x4200, 0x0f04, 0x00000000, 0x02) + label(0x02) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x50, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3700, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_random_seed_greater_than(0xa0, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3e00, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x4000, 0x0f04, 0x00000000, 0x02) + label(0x02) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x50, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3800, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_random_seed_greater_than(0xa0, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3f00, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3400, 0x0f04, 0x00000000, 0x02) + label(0x02) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x78, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3900, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3c00, 0x0f04, 0x00000000, 0x02) + label(0x02) + debug_log 'p', 'o', 'p', '3', '\n', '\0', + label(0x13) + ai_sleep + goto_first(0x13) + ai_list_end +}; +u8 ai_31[] = { + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x01) + goto_first(0x06) + label(0x01) + local_timer_reset_start + label(0x11) + ai_sleep + if_chr_dying_or_dead(0x46, 0x02) + if_chr_does_not_exist(0x46, 0x02) + if_chr_dying_or_dead(0x48, 0x35) + if_chr_does_not_exist(0x48, 0x35) + label(0x02) + if_local_timer_greater_than(0x840300, 0x01) + goto_first(0x11) + label(0x35) + if_local_timer_greater_than(0x080700, 0x01) + goto_first(0x11) + label(0x01) + local_timer_reset_start + text_print_top(0x1290) + label(0x12) + if_local_timer_greater_than(0x2c0100, 0x01) + ai_sleep + goto_first(0x12) + label(0x01) + text_print_top(0x1390) + hud_countdown_set(0x3c00) + hud_countdown_start + hud_countdown_show + label(0x13) + ai_sleep + if_guard_bitfield_is_set_on(0x04, 0x35) + if_hud_countdown_less_than(0x1e00, 0x14) + label(0x35) + if_guard_bitfield_is_set_on(0x02, 0x35) + if_hud_countdown_less_than(0x1700, 0x02) + label(0x35) + if_guard_bitfield_is_set_on(0x01, 0x35) + if_hud_countdown_less_than(0x1400, 0x01) + label(0x35) + if_hud_countdown_less_than(0x0000, 0x15) + goto_first(0x13) + label(0x01) + sfx_play(0x3a00, 0x00) + sfx_set_channel_volume(0x00, 0x0000, 0x100e) + guard_bitfield_set_on(0x01) + goto_first(0x13) + label(0x02) + sfx_stop_channel(0x01) + sfx_play(0xd700, 0x02) + sfx_emit_from_pad(0x02, 0x4700, 0x0000) + guard_bitfield_set_on(0x02) + goto_first(0x13) + label(0x14) + sfx_play(0xd600, 0x03) + sfx_emit_from_pad(0x03, 0x4700, 0x0000) + ai_sleep + sfx_play(0xd800, 0x01) + sfx_emit_from_pad(0x01, 0x4700, 0x0000) + guard_bitfield_set_on(0x04) + goto_first(0x13) + label(0x15) + hud_countdown_hide + objective_bitfield_set_on(0x00000800) + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; +u8 ai_32[] = { + label(0x04) + local_timer_reset_start + sfx_play(0x4000, 0xff) + if_objective_num_complete(0x00, 0x01) + goto_next(0x06) + label(0x01) + sfx_play(0x3f00, 0xff) + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x08) + if_local_timer_greater_than(0x3c0000, 0x01) + goto_first(0x06) + label(0x01) + goto_first(0x04) + label(0x08) + sfx_play(0x3d00, 0xff) + label(0x11) + ai_sleep + goto_first(0x11) + ai_list_end +}; +u8 ai_33[] = { + label(0x04) + local_timer_reset_start + random_generate_seed + if_random_seed_greater_than(0xaf, 0x2d) + if_random_seed_greater_than(0x64, 0x2c) + label(0x2b) + sfx_play(0xf900, 0xff) + goto_next(0x06) + label(0x2c) + sfx_play(0xdf00, 0xff) + goto_next(0x06) + label(0x2d) + sfx_play(0x3300, 0xff) + goto_next(0x06) + label(0x06) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfe, 0x01) + random_generate_seed + if_random_seed_greater_than(0xfa, 0x11) + if_local_timer_greater_than(0x780000, 0x01) + goto_first(0x06) + label(0x11) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfe, 0x01) + if_local_timer_greater_than(0xb40000, 0x01) + goto_first(0x11) + label(0x01) + if_objective_num_complete(0x00, 0x01) + goto_first(0x04) + label(0x01) + jump_to_ai_list(0xfd, 0x1804) + ai_list_end +}; +u8 ai_23[] = { + local_byte_2_set(0xfa) + local_byte_1_set(0x00) + label(0x11) + local_byte_1_add(0x28) + local_timer_reset_start + guard_bitfield_set_off(0x01) + if_local_byte_1_less_than(0x64, 0x04) + goto_next(0x08) + label(0x04) + ai_sleep + if_local_timer_greater_than(0x780000, 0x01) + goto_first(0x04) + label(0x01) + if_local_byte_1_less_than_random_seed(0x01) + goto_first(0x11) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0xaf, 0x2d) + if_random_seed_greater_than(0x64, 0x2c) + label(0x2b) + sfx_play(0xf900, 0xff) + goto_next(0x06) + label(0x2c) + sfx_play(0xdf00, 0xff) + goto_next(0x06) + label(0x2d) + sfx_play(0x3300, 0xff) + goto_next(0x06) + label(0x06) + goto_first(0x11) + label(0x08) + ai_sleep + objective_bitfield_set_on(0x00000400) + goto_first(0x08) + ai_list_end +}; +u8 ai_34[] = { + label(0x00) + ai_sleep + if_bond_distance_to_pad_less_than(0x3200, 0xcb00, 0x01) + goto_first(0x00) + label(0x01) + local_timer_reset_start + label(0x19) + ai_sleep + if_bond_is_dead(0x3d) + if_local_timer_greater_than(0xb40000, 0x01) + goto_first(0x19) + label(0x01) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + if_chr_does_not_exist(0x46, 0x01) + if_chr_dying_or_dead(0x46, 0x01) + objective_bitfield_set_on(0x00800000) + label(0x01) + label(0x11) + ai_sleep + if_screen_fade_completed(0x01) + goto_first(0x11) + label(0x01) + if_chr_does_not_exist(0x46, 0x3c) + if_chr_dying_or_dead(0x46, 0x3c) + if_objective_all_completed(0x01) + jump_to_ai_list(0xfd, 0x0f00) + label(0x01) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x1d, 0x0200, 0x0000) + chr_flags_set_off(0x46, 0x00040000) + jump_to_ai_list(0x46, 0x1b04) + jump_to_ai_list(0xf8, 0x1a04) + ai_sleep + ai_sleep + screen_fade_from_black + local_timer_reset_start + label(0x12) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x01) + if_local_timer_greater_than(0xf00000, 0x2f) + if_local_timer_greater_than(0xb40000, 0x2e) + if_local_timer_greater_than(0x5a0000, 0x2d) + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x12) + label(0x2c) + object_flags_1_set_off(0x19, 0x00000200) + object_destroy(0x19) + goto_first(0x12) + label(0x2d) + object_flags_1_set_off(0x1a, 0x00000200) + object_destroy(0x1a) + goto_first(0x12) + label(0x2e) + object_flags_1_set_off(0x1b, 0x00000200) + object_destroy(0x1b) + goto_first(0x12) + label(0x2f) + object_flags_1_set_off(0x1c, 0x00000200) + object_destroy(0x1c) + goto_first(0x12) + label(0x01) + screen_fade_to_black + label(0x13) + ai_sleep + if_screen_fade_completed(0x01) + goto_first(0x13) + label(0x01) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3c) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_25[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_try_teleporting_to_pad(0xfd, 0xcd00, 0x01) + label(0x01) + guard_play_animation(0x5a00, 0xffff, 0xffff, 0x06, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_26[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_try_teleporting_to_pad(0xfd, 0xcc00, 0x01) + label(0x01) + guard_play_animation(0x5a00, 0x0700, 0xffff, 0x06, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_24[] = { + local_timer_reset_start + guard_play_animation(0x6400, 0x0000, 0x0100, 0x04, 0x10) + label(0x11) + ai_sleep + if_local_timer_greater_than(0x000000, 0x01) + goto_first(0x11) + label(0x01) + guard_play_animation(0x6400, 0x0100, 0xffff, 0x04, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_35[] = { + label(0x11) + ai_sleep + if_camera_is_in_bond_swirl(0x01) + goto_first(0x11) + label(0x01) + jump_to_ai_list(0xf8, 0x1904) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_36[] = { + label(0x11) + ai_sleep + if_objective_bitfield_is_set_on(0x00000800, 0x01) + goto_first(0x11) + label(0x01) + local_timer_reset_start + label(0x12) + ai_sleep + if_local_timer_greater_than(0x660300, 0x32) + if_local_timer_greater_than(0x760200, 0x31) + if_local_timer_greater_than(0x3a0200, 0x30) + if_local_timer_greater_than(0xc20100, 0x2f) + if_local_timer_greater_than(0xd20000, 0x2e) + if_local_timer_greater_than(0x5a0000, 0x2d) + if_local_timer_greater_than(0x1e0000, 0x2c) + goto_first(0x12) + label(0x2c) + object_flags_1_set_off(0x0f, 0x00000200) + object_destroy(0x0f) + goto_first(0x12) + label(0x2d) + object_flags_1_set_off(0x10, 0x00000200) + object_destroy(0x10) + object_flags_1_set_off(0x2b, 0x00000200) + object_destroy(0x2b) + goto_first(0x12) + label(0x2e) + object_flags_1_set_off(0x11, 0x00000200) + object_destroy(0x11) + goto_first(0x12) + label(0x2f) + object_flags_1_set_off(0x12, 0x00000200) + object_destroy(0x12) + object_flags_1_set_off(0x2c, 0x00000200) + object_destroy(0x2c) + goto_first(0x12) + label(0x30) + object_flags_1_set_off(0x13, 0x00000200) + object_destroy(0x13) + goto_first(0x12) + label(0x31) + object_flags_1_set_off(0x14, 0x00000200) + object_destroy(0x14) + goto_first(0x12) + label(0x32) + object_flags_1_set_off(0x15, 0x00000200) + object_destroy(0x15) + object_flags_1_set_off(0x2d, 0x00000200) + object_destroy(0x2d) + goto_first(0x12) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_37[] = { + label(0x11) + ai_sleep + if_bond_in_room_with_pad(0x6200, 0x01) + goto_first(0x11) + label(0x01) + switch_fog_instantly + objective_bitfield_set_on(0x00001000) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_38[] = { + label(0x04) + ai_sleep + if_door_state_equal(0x1e, 0x01, 0x35) + door_unset_lock(0x1e, 0x02) + label(0x35) + if_door_state_equal(0x1f, 0x01, 0x35) + door_unset_lock(0x1f, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x20, 0x01, 0x35) + door_unset_lock(0x20, 0x02) + label(0x35) + if_door_state_equal(0x21, 0x01, 0x35) + door_unset_lock(0x21, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x22, 0x01, 0x35) + door_unset_lock(0x22, 0x02) + label(0x35) + if_door_state_equal(0x23, 0x01, 0x35) + door_unset_lock(0x23, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x24, 0x01, 0x35) + door_unset_lock(0x24, 0x02) + label(0x35) + if_door_state_equal(0x25, 0x01, 0x35) + door_unset_lock(0x25, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x26, 0x01, 0x35) + door_unset_lock(0x26, 0x02) + label(0x35) + if_door_state_equal(0x27, 0x01, 0x35) + door_unset_lock(0x27, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x28, 0x01, 0x35) + door_unset_lock(0x28, 0x02) + label(0x35) + goto_first(0x04) + ai_list_end +}; +u8 ai_39[] = { + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00002000, 0x01) + goto_first(0x06) + label(0x01) + local_timer_reset_start + label(0x11) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x01) + goto_first(0x11) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x80, 0x35) + sfx_play(0xb800, 0x07) + sfx_emit_from_object(0x07, 0x29, 0x0000) + label(0x35) + objective_bitfield_set_off(0x00002000) + goto_first(0x06) + label(0x08) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_40[] = { + label(0x06) + ai_sleep + if_chr_does_not_exist(0x46, 0x01) + goto_first(0x06) + label(0x01) + text_print_top(0x1c90) + objective_bitfield_set_on(0x00400000) + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/u/UsetupcradZ.c b/assets/obseg/setup/u/UsetupcradZ.c index 1c058e57..05322d45 100644 --- a/assets/obseg/setup/u/UsetupcradZ.c +++ b/assets/obseg/setup/u/UsetupcradZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -864,48 +865,1523 @@ PathRecord patrolpaths[] = { }; -u32 ai_34[] = { 0xad68656c, 0x6c6f0002, 0x350234ae, 0xad210a00, 0x03310129, 0x00330229, 0x33358029, 0xf329bd04, 0xff008304, 0x02000000, 0x01330229, 0xf333bd04, 0xff004f04, 0x02000000, 0x01290233, 0x02290331, 0x02290033, 0x02293335, 0x8029f329, 0xbd04ff00, 0x8a040300, 0x00000133, 0x0229f333, 0xbd04ff00, 0x08040300, 0x00000129, 0x02330229, 0x03310329, 0x00330229, 0x33358029, 0xf329bd04, 0xff001204, 0x04000000, 0x01330229, 0xf333bd04, 0xff005c04, 0x04000000, 0x01290233, 0x02290331, 0x04290033, 0x02293335, 0x8029f329, 0xbd04ff00, 0x3e040500, 0x00000133, 0x0229f333, 0xbd04ff00, 0x00040500, 0x00000129, 0x02330229, 0x03310529, 0x00330229, 0x33358029, 0xf329bd04, 0xff006e04, 0x06000000, 0x01060229, 0xf333bd04, 0xff007d04, 0x06000000, 0x01060233, 0x020603b4, 0x0002d029, 0x01060229, 0x01340400 }; -u32 ai_1[] = { 0x8e01ad68, 0x310a0005, 0xfd040104 }; -u32 ai_2[] = { 0x8e02ad68, 0x320a0005, 0xfd040104 }; -u32 ai_3[] = { 0x8e03ad68, 0x330a0005, 0xfd040104 }; -u32 ai_4[] = { 0x8e04ad68, 0x340a0005, 0xfd040104 }; -u32 ai_5[] = { 0x8e05ad68, 0x350a0005, 0xfd040104 }; -u32 ai_0[] = { 0x02293335, 0xa0363550, 0x338f0028, 0x90001491, 0x3293328d, 0xbfbf00c3, 0x09000000, 0x00290229, 0xc000dc00, 0x00000006, 0x00060233, 0x8f002890, 0x0014913c, 0x933cbf00, 0xc3098000, 0x00002902, 0x29c000de, 0x00000000, 0x290229bf, 0x00c30990, 0x00000006, 0x00060236, 0x8f002890, 0x00149150, 0x9350c000, 0xdd000000, 0x00290229, 0xbf00c309, 0x80000000, 0x290229bf, 0x00c30990, 0x00000006, 0x020605fd, 0x04070400 }; -u32 ai_6[] = { 0x02372807, 0x0207034c, 0x01c2333c, 0x3802332f, 0x39010702, 0x383c2900, 0x06023903, 0x01370229, 0x023a3335, 0x0a291a06, 0x02293532, 0x290e0602, 0x29356429, 0x11060229, 0x35962912, 0x06022935, 0xc8291400, 0x01000006, 0x02291500, 0x01000006, 0x0206032f, 0x29010602, 0x293c2900, 0x07020703, 0x01370229, 0x03013a04 }; -u32 ai_7[] = { 0x9000148f, 0x00aa9164, 0x93649264, 0x9d000002, 0x009d0000, 0x08009d00, 0x000010ab, 0x00900203, 0x1c232802, 0x07034dfd, 0x000a2328, 0x292f2901, 0x0702294d, 0xfd001e23, 0x28290103, 0x02299a00, 0x0004009d, 0x00080000, 0x05fd0413, 0x04000000 }; -u32 ai_41[] = { 0x0207039c, 0x00800000, 0x29010702, 0x299b0080, 0x00009c00, 0x00100029, 0xc3240d9a, 0x00001000, 0x01070229, 0x9c000020, 0x0029c324, 0x0e9a0000, 0x20000107, 0x02299c00, 0x00400029, 0xc3240f9a, 0x00004000, 0x01070229, 0x9c000080, 0x0029c324, 0x109a0000, 0x80000107, 0x02299c00, 0x01000029, 0xc324119a, 0x00010000, 0x01070229, 0x9c000200, 0x0029c324, 0x129a0002, 0x00000107, 0x02299c00, 0x04000029, 0xc324139a, 0x00040000, 0x01070229, 0x9c000800, 0x0029c324, 0x149a0008, 0x00000107, 0x02290107, 0x04000000 }; -u32 ai_18[] = { 0xad547374, 0x616e640a, 0x009b0200, 0x00009b01, 0x0000009e, 0x00000010, 0xad2d3e64, 0x616d6167, 0x65206f6e, 0x28737461, 0x6e64290a, 0x007efd29, 0x02290203, 0x14002100, 0x00290229, 0x0207f8fd, 0x29022903, 0x4b005006, 0x7efd2a3c, 0x089c0100, 0x00002900, 0x33022996, 0x04069a04, 0x00000002, 0x339f0000, 0x00102900, 0x33022946, 0x29f8fd29, 0x00330229, 0x9604069a, 0x04000000, 0x02330107, 0x02089f00, 0x00001029, 0x00330229, 0x33353233, 0x1a090233, 0x16000100, 0x00090209, 0x33353c0a, 0x9a020000, 0x00020af8, 0xfd290229, 0x034b0050, 0x067efd2a, 0x9c010000, 0x00290033, 0x02299604, 0x069a0400, 0x00000233, 0x9f000000, 0x10290033, 0x02294629, 0xf8fd2900, 0x3302299c, 0x02000000, 0x4c003302, 0x4c960406, 0x9a040000, 0x0002332f, 0x29010a02, 0x29010302, 0x2a9d0000, 0x0010ad3c, 0x2d64616d, 0x61676520, 0x6f666628, 0x7374616e, 0x64290a00, 0x9a008000, 0x0033353c, 0x339a0100, 0x00000233, 0x01030206, 0x05fd0411, 0x04000000 }; -u32 ai_16[] = { 0xad547275, 0x6e0a007d, 0xfd5a2905, 0xfd041002, 0x29ae9502, 0x95049508, 0x95100203, 0x1f232802, 0x07037efd, 0x2a960233, 0xb400003c, 0x08023396, 0x08330233, 0x961033b4, 0x0002580a, 0x02334dfd, 0x000a2328, 0x062f0601, 0x07020605, 0xfd041302, 0x089402ad, 0x6772656e, 0x61646521, 0x0a003335, 0x50291b00, 0xc41a2902, 0x29010702, 0x099408ad, 0x6772656e, 0x61646521, 0x0a003335, 0x50291b00, 0xc41a2902, 0x29010702, 0x0a9410ad, 0x77616c6b, 0x20617474, 0x61636b0a, 0x003c2901, 0x0702297f, 0x33290107, 0x0229c324, 0x19022901, 0x03022a9d, 0x00000010, 0xad3c2d64, 0x616d6167, 0x65206f66, 0x66287275, 0x6e290a00, 0x9a008000, 0x00010304 }; -u32 ai_20[] = { 0x1e007402, 0x08032f29, 0x01080229, 0x05fd0417, 0x04000000 }; -u32 ai_22[] = { 0x1c007602, 0x09032f29, 0x01090229, 0x020a0355, 0x00742901, 0x0a022902, 0x0b035200, 0x46007429, 0x010b0229, 0x05fd0418, 0x04000000 }; -u32 ai_21[] = { 0x0a006aff, 0xffffff06, 0x00030207, 0x0a006aff, 0xffffff44, 0x00020803, 0x46293c29, 0x2f090108, 0x02090107, 0x0229c324, 0x160a006b, 0xffffffff, 0x8610ae02, 0x0a03b400, 0x00782901, 0x0a022955, 0x00742905, 0xfd041502, 0x2905fd04, 0x17040000 }; -u32 ai_15[] = { 0xad54480a, 0x009d0000, 0x0010ad3c, 0x2d64616d, 0x61676520, 0x6f666628, 0x48290a00, 0xc32415f4, 0x0000ff1f, 0x00969164, 0x92649364, 0x0204032f, 0x29010402, 0x29550073, 0x29550074, 0x29550094, 0x2955006d, 0x29000302, 0x2905fd04, 0x150203d9, 0xfd009629, 0x05fd0415, 0x0229ad62, 0x61636b0a, 0x0005fd04, 0x16040000 }; -u32 ai_19[] = { 0xad54210a, 0x00140021, 0x00000402, 0x04030104, 0x04000000 }; -u32 ai_17[] = { 0xad547768, 0x6572650a, 0x009d0000, 0x02000203, 0x031f005c, 0x01030400 }; -u32 ai_8[] = { 0xad54410a, 0x00020403, 0x53003200, 0x3b290247, 0xac00005c, 0x97000405, 0xfd040e02, 0x29530032, 0x003e2902, 0x4833353c, 0x2aac0000, 0x91970004, 0x05fd040a, 0x022a3578, 0x2a9b0800, 0x0000ac00, 0x00019700, 0x0405fd04, 0x0b022a35, 0xb42a9b08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c022a, 0x9b080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x02299c04, 0x00000041, 0x01040241, 0x9b040000, 0x00550022, 0x42550045, 0x4355005b, 0x43333532, 0x43024201, 0x47024301, 0x48040000 }; -u32 ai_9[] = { 0xad54420a, 0x00020403, 0x53003200, 0x27290247, 0xac00004f, 0x97000405, 0xfd040f02, 0x29530032, 0x002a2902, 0x4833353c, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022a3578, 0x2a9b0800, 0x0000ac00, 0x00019700, 0x0405fd04, 0x0b022a35, 0xb42a9b08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c022a, 0x9b080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x02299c04, 0x00000041, 0x01040241, 0x9b040000, 0x0055001f, 0x42550031, 0x43550050, 0x43333532, 0x43024201, 0x47024301, 0x48040000 }; -u32 ai_10[] = { 0xad54430a, 0x00020403, 0x53003200, 0x04290247, 0x3335782a, 0xac000090, 0x97000405, 0xfd040902, 0x2aac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32000729, 0x02483335, 0x782aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0229, 0x53003200, 0x1d290249, 0x3335c83f, 0x9c080000, 0x003e023f, 0x3335782a, 0x9a080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x022a9a08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c023e, 0x01470229, 0x9c040000, 0x00410104, 0x02419b04, 0x00000055, 0x00184255, 0x001d4255, 0x00114355, 0x00134355, 0x001c4355, 0x00034455, 0x00094455, 0x001b4433, 0x357f4502, 0x42014902, 0x43333555, 0x2a9a0800, 0x0000ac00, 0x00099700, 0x0405fd04, 0x0c022a35, 0xaa2aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0244, 0x3335552a, 0x9a080000, 0x00ac0000, 0x13970004, 0x05fd040d, 0x022a35aa, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022aac00, 0x00919700, 0x0405fd04, 0x0a024501, 0x47040000 }; -u32 ai_11[] = { 0xad54440a, 0x00020403, 0x53003200, 0x0c290247, 0x3335782a, 0xac000090, 0x97000405, 0xfd040902, 0x2aac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32000f29, 0x02483335, 0x782aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0229, 0x53003200, 0x1b290249, 0x3335c83f, 0x9c080000, 0x003e023f, 0x3335782a, 0x9a080000, 0x00ac0000, 0x01970004, 0x05fd040b, 0x022a9a08, 0x000000ac, 0x00001397, 0x000405fd, 0x040d023e, 0x01470229, 0x9c040000, 0x00410104, 0x02419b04, 0x00000055, 0x00094255, 0x001b4255, 0x00034355, 0x00014355, 0x001d4355, 0x000b4455, 0x00134455, 0x001c4433, 0x357f4502, 0x42014902, 0x43333555, 0x2a9a0800, 0x0000ac00, 0x00139700, 0x0405fd04, 0x0c022a35, 0xaa2aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0244, 0x3335552a, 0x9a080000, 0x00ac0000, 0x01970004, 0x05fd040d, 0x022a35aa, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022aac00, 0x00919700, 0x0405fd04, 0x0a024501, 0x47040000 }; -u32 ai_12[] = { 0xad54450a, 0x00020403, 0x53003200, 0x16290247, 0x3335782a, 0xac000090, 0x97000405, 0xfd040902, 0x2aac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32001529, 0x02483335, 0x782aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0229, 0x53003200, 0x1c290249, 0x3335c83f, 0x9c080000, 0x003e023f, 0x3335782a, 0x9a080000, 0x00ac0000, 0x01970004, 0x05fd040b, 0x022a9a08, 0x000000ac, 0x00000997, 0x000405fd, 0x040c023e, 0x01470229, 0x9c040000, 0x00410104, 0x02419b04, 0x00000055, 0x00134255, 0x001c4255, 0x000b4355, 0x00094355, 0x001b4355, 0x00114455, 0x00014455, 0x001d4433, 0x357f4502, 0x42014902, 0x43333555, 0x2a9a0800, 0x0000ac00, 0x00019700, 0x0405fd04, 0x0c022a35, 0xaa2aac00, 0x00909700, 0x0405fd04, 0x09022aac, 0x00009197, 0x000405fd, 0x040a0244, 0x3335552a, 0x9a080000, 0x00ac0000, 0x09970004, 0x05fd040d, 0x022a35aa, 0x2aac0000, 0x90970004, 0x05fd0409, 0x022aac00, 0x00919700, 0x0405fd04, 0x0a024501, 0x47040000 }; -u32 ai_13[] = { 0xad54460a, 0x00020403, 0x53003200, 0x45290247, 0xac000091, 0x97000405, 0xfd040a02, 0x29530032, 0x00592902, 0x48ac0000, 0x90970004, 0x05fd0409, 0x02295300, 0x32006029, 0x0249ac00, 0x00909700, 0x0405fd04, 0x0902299c, 0x04000000, 0x41010402, 0x419b0400, 0x00005500, 0x44425500, 0x3e425500, 0x60435500, 0x61435500, 0x64435500, 0x50433335, 0x7f440147, 0x02420147, 0x02430148, 0x02440148, 0x04000000 }; -u32 ai_14[] = { 0xad54470a, 0x00020403, 0x53003200, 0x31290247, 0xac000090, 0x97000405, 0xfd040902, 0x29530032, 0x00542902, 0x48ac0000, 0x91970004, 0x05fd040a, 0x02295300, 0x32006429, 0x0249ac00, 0x00919700, 0x0405fd04, 0x0a02299c, 0x04000000, 0x41010402, 0x419b0400, 0x00005500, 0x31425500, 0x2a425500, 0x64435500, 0x63435500, 0x60435500, 0x5d433335, 0x7f440147, 0x02420147, 0x02430148, 0x02440148, 0x04000000 }; -u32 ai_35[] = { 0x0204035b, 0x0029002a, 0x02299c00, 0x00040029, 0x01040229, 0xc32406ae, 0x0207035b, 0x0029002a, 0x0229b400, 0x012c2901, 0x070229c3, 0x2407c400, 0xa100b700, 0xb4b9b502, 0x0b035b00, 0x29002a02, 0x29bb003c, 0x29010b02, 0x29020803, 0x5b002900, 0x2a0229bb, 0x000f2901, 0x080229c3, 0x24090209, 0x035b0029, 0x002a0229, 0xbb000029, 0x01090229, 0x9a000008, 0x00c3240a, 0xc900f500, 0xb6b8020a, 0x03010a02, 0x2ac900c3, 0x24089a00, 0x000200f5, 0x00b6b802, 0x06030106, 0x04000000 }; -u32 ai_36[] = { 0x02040331, 0x00290104, 0x02299a00, 0x00010002, 0x06030106, 0x04000000 }; -u32 ai_37[] = { 0x02040229, 0x05fd0409, 0x04000000 }; -u32 ai_23[] = { 0x9e000000, 0x109d0000, 0x80000203, 0x3c292807, 0x02070354, 0xfd009431, 0x30fd303c, 0x29010702, 0x29333540, 0x29110602, 0x2933357f, 0x29140001, 0x00000602, 0x29150001, 0x00000602, 0x060354fd, 0x00943130, 0xfd302f29, 0x01060229, 0x01030231, 0x9a100000, 0x009d0000, 0x40002202, 0x3003c324, 0x17ae020b, 0x0354fd00, 0x94310033, 0x02319a10, 0x00000002, 0x33b40000, 0x7829010b, 0x0229c324, 0x18020c03, 0x54fd0094, 0x31003302, 0x319a1000, 0x00000233, 0x010c0400 }; -u32 ai_24[] = { 0xd9fd0092, 0x290229e0, 0xfd00e0fd, 0x019d0000, 0x2000db0a, 0x00b30002, 0xffff0610, 0x0a00b300, 0x02ffff06, 0x109a8000, 0x0000ae02, 0x07039d00, 0x001000b4, 0x00012229, 0x01070229, 0xda020803, 0xdc290108, 0x0229d502, 0x00020000, 0xd9fd0092, 0x290229db, 0x0a00b300, 0x02ffff06, 0x100a00b3, 0x0002ffff, 0x06109a40, 0x000000ae, 0x0209039d, 0x00001000, 0xb4000122, 0x29010902, 0x29da020a, 0x03dc2901, 0x0a022902, 0x06d20301, 0x06040000 }; -u32 ai_25[] = { 0xd9fd0092, 0x2902290a, 0x00b4ffff, 0xffff0610, 0x039d0000, 0x1000d9fd, 0x00942902, 0x299d0000, 0x2000dbae, 0x0207039e, 0x00001000, 0x9e000000, 0x01b40000, 0x3c290107, 0x0229da02, 0x0803dc29, 0x01080229, 0xd5030002, 0x0000d9fd, 0x00922902, 0x290a00b4, 0xffffffff, 0x06100303, 0x9d000010, 0x00d9fd00, 0x94290229, 0xdbae0209, 0x039e0000, 0x10009e00, 0x000001b4, 0x00005a29, 0x01090229, 0xda020a03, 0xdc29010a, 0x02299a20, 0x00000002, 0x06030106, 0x04000000 }; -u32 ai_26[] = { 0xd9fd0095, 0x29022908, 0x02060301, 0x06040000 }; -u32 ai_39[] = { 0x02030355, 0x00922955, 0x00933001, 0x03022931, 0x00290103, 0x02299601, 0x299401ae, 0x0229b400, 0x003c2901, 0x0302299c, 0x10000000, 0x2905fd04, 0x20022905, 0xfd041d02, 0x30d6f60a, 0x29010302, 0x29d70002, 0x07035500, 0x9329d801, 0x030229d6, 0xf01a2901, 0x07022905, 0xfd041c04 }; -u32 ai_30[] = { 0xeb3decd7, 0x00e300dd, 0xeaed0303, 0x03d50100, 0x010000a1, 0xf8000004, 0x0005f804, 0x1905fd00, 0x01023d05, 0xfd000104 }; -u32 ai_31[] = { 0xeb3decd7, 0x00e300da, 0x020703dc, 0x29010702, 0x2905fd04, 0x1f023d05, 0xfd000104 }; -u32 ai_27[] = { 0xeb3decd7, 0x00e300f9, 0xda020703, 0xdc290107, 0x0229ddea, 0xed030303, 0xd5040002, 0x000005f8, 0x041a3000, 0x29310029, 0x54000074, 0x0a002902, 0x0aa10000, 0x00040005, 0x00041b02, 0x29020803, 0x9c200000, 0x00290108, 0x0229d205, 0xfd000102, 0x3d05fd00, 0x01040000 }; -u32 ai_29[] = { 0x8e000206, 0x03010604 }; -u32 ai_28[] = { 0xeb3decd7, 0x00da0207, 0x03dc2901, 0x07022931, 0x00300029, 0x0230bd08, 0xff009204, 0x1e000000, 0x10290229, 0x03033100, 0x30002902, 0x3005fd04, 0x1f0229dd, 0xeaed0303, 0x03d50400, 0x020000a1, 0x00000004, 0x00050004, 0x1a550074, 0x0aa0f800, 0x00040000, 0x29020a05, 0xf8041b02, 0x29020803, 0x9c200000, 0x00290108, 0x022905fd, 0x041f023d, 0x05fd0001, 0x04000000 }; -u32 ai_32[] = { 0xcd026c00, 0x000a0000, 0xffff0002, 0x06100207, 0x039c8000, 0x00002901, 0x070229a7, 0x05000800, 0x000a0000, 0x0002ffff, 0x06100208, 0x039c4000, 0x00002901, 0x08022965, 0x0500930a, 0x00000002, 0xffff0610, 0x0a000000, 0x02ffff06, 0x10020603, 0x01060400 }; -u32 ai_33[] = { 0xae0a0063, 0x00000001, 0x06100207, 0x03b40000, 0x14290107, 0x02290a00, 0x630001ff, 0xff061002, 0x06030106, 0x04000000 }; -u32 ai_38[] = { 0x020703cf, 0x29010702, 0x2905f804, 0x22020603, 0x01060400 }; -u32 ai_40[] = { 0x0203034e, 0x00003c27, 0x11296806, 0x0a296606, 0x02294e00, 0x003c2712, 0x2968070a, 0x29660702, 0x294e0000, 0x3c271329, 0x68080a29, 0x66080229, 0x4e00003c, 0x27142968, 0x090a2966, 0x0902294e, 0x00001427, 0x1529680a, 0x0a29660a, 0x02290103, 0x04000000 }; +u8 ai_34[] = { + debug_log 'h', 'e', 'l', 'l', 'o', '\0', + label(0x35) + label(0x34) + local_timer_reset_start + debug_log '!', '\n', '\0', + ai_sleep + if_chr_does_not_exist(0x01, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x8300, 0x0204, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x4f00, 0x0204, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x02, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x8a00, 0x0304, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x0800, 0x0304, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x03, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x1200, 0x0404, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x5c00, 0x0404, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x04, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x3e00, 0x0504, 0x01000000, 0x33) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x0000, 0x0504, 0x01000000, 0x29) + label(0x33) + label(0x29) + ai_sleep + if_chr_does_not_exist(0x05, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x80, 0x29) + if_bond_damage_and_pickups_disabled(0x29) + chr_try_spawning_at_pad(0x04, 0xff, 0x6e00, 0x0604, 0x01000000, 0x06) + label(0x29) + if_bond_damage_and_pickups_disabled(0x33) + chr_try_spawning_at_pad(0x04, 0xff, 0x7d00, 0x0604, 0x01000000, 0x06) + label(0x33) + label(0x06) + ai_sleep + if_local_timer_greater_than(0xd00200, 0x29) + goto_first(0x06) + label(0x29) + goto_first(0x34) + ai_list_end +}; +u8 ai_1[] = { + guard_set_chr_num(0x01) + debug_log 'h', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_2[] = { + guard_set_chr_num(0x02) + debug_log 'h', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_3[] = { + guard_set_chr_num(0x03) + debug_log 'h', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_4[] = { + guard_set_chr_num(0x04) + debug_log 'h', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_5[] = { + guard_set_chr_num(0x05) + debug_log 'h', '5', '\n', '\0', + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_0[] = { + label(0x29) + random_generate_seed + if_random_seed_greater_than(0xa0, 0x36) + if_random_seed_greater_than(0x50, 0x33) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_speed_rating(0x32) + guard_set_accuracy_rating(0x32) + guard_set_grenade_probability(0xbf) + guard_try_spawning_item(0xc300, 0x09, 0x00000000, 0x29) + label(0x29) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x06) + goto_next(0x06) + label(0x33) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_speed_rating(0x3c) + guard_set_accuracy_rating(0x3c) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x29) + label(0x29) + guard_try_spawning_hat(0xde00, 0x00000000, 0x29) + label(0x29) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x06) + goto_next(0x06) + label(0x36) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x29) + label(0x29) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x29) + label(0x29) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x06) + label(0x06) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_6[] = { + label(0x37) + guard_try_running_to_bond_position(0x07) + label(0x07) + ai_sleep + if_guard_distance_to_bond_greater_than(0xc201, 0x33) + if_guard_and_bond_within_line_of_sight(0x38) + label(0x33) + if_guard_has_stopped_moving(0x39) + goto_first(0x07) + label(0x38) + if_guard_and_bond_within_line_of_sight(0x29) + goto_next(0x06) + label(0x39) + ai_sleep + goto_first(0x37) + label(0x29) + label(0x3a) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x29) + guard_try_throwing_grenade(0x06) + label(0x29) + if_random_seed_greater_than(0x32, 0x29) + guard_try_sidestepping(0x06) + label(0x29) + if_random_seed_greater_than(0x64, 0x29) + guard_try_firing_walk(0x06) + label(0x29) + if_random_seed_greater_than(0x96, 0x29) + guard_try_firing_run(0x06) + label(0x29) + if_random_seed_greater_than(0xc8, 0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x29) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x06) + label(0x29) + if_guard_and_bond_within_line_of_sight(0x29) + goto_next(0x07) + label(0x07) + ai_sleep + goto_first(0x37) + label(0x29) + ai_sleep + goto_first(0x3a) + ai_list_end +}; +u8 ai_7[] = { + guard_set_armour(0x1400) + guard_set_health_total(0xaa00) + guard_set_speed_rating(0x64) + guard_set_accuracy_rating(0x64) + guard_set_argh_rating(0x64) + guard_flags_set_on(0x00020000) + guard_flags_set_on(0x00080000) + guard_flags_set_on(0x10000000) + guard_set_pad_preset(0x9000) + label(0x03) + guard_runs_to_pad(0x2823) + label(0x07) + ai_sleep + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x29) + if_guard_has_stopped_moving(0x29) + goto_first(0x07) + label(0x29) + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0x2823, 0x29) + goto_first(0x03) + label(0x29) + objective_bitfield_set_on(0x00040000) + guard_flags_set_on(0x00000800) + jump_to_ai_list(0xfd, 0x1304) + ai_list_end +}; +u8 ai_41[] = { + label(0x07) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x29) + goto_first(0x07) + label(0x29) + objective_bitfield_set_off(0x00008000) + if_objective_bitfield_is_set_on(0x00100000, 0x29) + text_print_top(0x0d24) + objective_bitfield_set_on(0x00100000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00200000, 0x29) + text_print_top(0x0e24) + objective_bitfield_set_on(0x00200000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00400000, 0x29) + text_print_top(0x0f24) + objective_bitfield_set_on(0x00400000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00800000, 0x29) + text_print_top(0x1024) + objective_bitfield_set_on(0x00800000) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000100, 0x29) + text_print_top(0x1124) + objective_bitfield_set_on(0x00000100) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000200, 0x29) + text_print_top(0x1224) + objective_bitfield_set_on(0x00000200) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000400, 0x29) + text_print_top(0x1324) + objective_bitfield_set_on(0x00000400) + goto_first(0x07) + label(0x29) + if_objective_bitfield_is_set_on(0x00000800, 0x29) + text_print_top(0x1424) + objective_bitfield_set_on(0x00000800) + goto_first(0x07) + label(0x29) + goto_first(0x07) + ai_list_end +}; +u8 ai_18[] = { + debug_log 'T', 's', 't', 'a', 'n', 'd', '\n', '\0', + objective_bitfield_set_off(0x00000002) + objective_bitfield_set_off(0x00000001) + guard_flags_set_off(0x10000000) + debug_log '-', '>', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'n', '(', 's', 't', 'a', 'n', 'd', ')', '\n', '\0', + if_chr_was_damaged_since_last_check(0xfd, 0x29) + label(0x29) + label(0x03) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x29) + label(0x29) + label(0x07) + if_chr_was_shot_since_last_check(0xfd, 0x29) + label(0x29) + ai_sleep + if_guard_distance_to_bond_less_than(0x5000, 0x06) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_guard_and_bond_within_line_of_sight(0x08) + if_objective_bitfield_is_set_on(0x00000001, 0x29) + goto_next(0x33) + label(0x29) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + if_guard_flags_is_set_on(0x10000000, 0x29) + goto_next(0x33) + label(0x29) + if_guard_shot_from_bond_missed(0x29) + if_chr_was_shot_since_last_check(0xfd, 0x29) + goto_next(0x33) + label(0x29) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + goto_first(0x07) + label(0x08) + if_guard_flags_is_set_on(0x10000000, 0x29) + goto_next(0x33) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x32, 0x33) + guard_try_throwing_grenade(0x09) + label(0x33) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x09) + label(0x09) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x0a) + objective_bitfield_set_on(0x00000002) + label(0x0a) + if_chr_was_shot_since_last_check(0xfd, 0x29) + label(0x29) + ai_sleep + if_guard_distance_to_bond_less_than(0x5000, 0x06) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_objective_bitfield_is_set_on(0x00000001, 0x29) + goto_next(0x33) + label(0x29) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + if_guard_flags_is_set_on(0x10000000, 0x29) + goto_next(0x33) + label(0x29) + if_guard_shot_from_bond_missed(0x29) + if_chr_was_shot_since_last_check(0xfd, 0x29) + goto_next(0x33) + label(0x29) + if_objective_bitfield_is_set_on(0x00000002, 0x4c) + goto_next(0x33) + label(0x4c) + if_guard_bitfield_is_set_on(0x04, 0x06) + objective_bitfield_set_on(0x00000004) + label(0x33) + if_guard_has_stopped_moving(0x29) + goto_first(0x0a) + label(0x29) + goto_first(0x03) + label(0x2a) + guard_flags_set_on(0x10000000) + debug_log '<', '-', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'f', 'f', '(', 's', 't', 'a', 'n', 'd', ')', '\n', '\0', + objective_bitfield_set_on(0x00008000) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x33) + objective_bitfield_set_on(0x00000001) + label(0x33) + goto_first(0x03) + label(0x06) + jump_to_ai_list(0xfd, 0x1104) + ai_list_end +}; +u8 ai_16[] = { + debug_log 'T', 'r', 'u', 'n', '\n', '\0', + if_chr_health_greater_than(0xfd, 0x5a, 0x29) + jump_to_ai_list(0xfd, 0x1004) + label(0x29) + local_timer_reset_start + guard_bitfield_set_off(0x02) + guard_bitfield_set_off(0x04) + guard_bitfield_set_off(0x08) + guard_bitfield_set_off(0x10) + label(0x03) + guard_sprints_to_pad(0x2823) + label(0x07) + ai_sleep + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_guard_bitfield_is_set_on(0x02, 0x33) + if_local_timer_greater_than(0x3c0000, 0x08) + label(0x33) + if_guard_bitfield_is_set_on(0x08, 0x33) + label(0x33) + if_guard_bitfield_is_set_on(0x10, 0x33) + if_local_timer_greater_than(0x580200, 0x0a) + label(0x33) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x06) + if_guard_has_stopped_moving(0x06) + goto_first(0x07) + label(0x06) + jump_to_ai_list(0xfd, 0x1304) + label(0x08) + guard_bitfield_set_on(0x02) + debug_log 'g', 'r', 'e', 'n', 'a', 'd', 'e', '!', '\n', '\0', + random_generate_seed + if_random_seed_greater_than(0x50, 0x29) + guard_try_dropping_item(0xc400, 0x1a, 0x29) + label(0x29) + goto_first(0x07) + label(0x09) + guard_bitfield_set_on(0x08) + debug_log 'g', 'r', 'e', 'n', 'a', 'd', 'e', '!', '\n', '\0', + random_generate_seed + if_random_seed_greater_than(0x50, 0x29) + guard_try_dropping_item(0xc400, 0x1a, 0x29) + label(0x29) + goto_first(0x07) + label(0x0a) + guard_bitfield_set_on(0x10) + debug_log 'w', 'a', 'l', 'k', ' ', 'a', 't', 't', 'a', 'c', 'k', '\n', '\0', + if_guard_and_bond_within_line_of_sight(0x29) + goto_first(0x07) + label(0x29) + if_bond_health_less_than(0x33, 0x29) + goto_first(0x07) + label(0x29) + text_print_top(0x1924) + label(0x29) + goto_first(0x03) + label(0x2a) + guard_flags_set_on(0x10000000) + debug_log '<', '-', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'f', 'f', '(', 'r', 'u', 'n', ')', '\n', '\0', + objective_bitfield_set_on(0x00008000) + goto_first(0x03) + ai_list_end +}; +u8 ai_20[] = { + guard_walks_to_pad(0x7400) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x08) + label(0x29) + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_22[] = { + guard_runs_to_pad(0x7600) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x09) + label(0x29) + label(0x0a) + ai_sleep + if_bond_in_room_with_pad(0x7400, 0x29) + goto_first(0x0a) + label(0x29) + label(0x0b) + ai_sleep + if_bond_distance_to_pad_less_than(0x4600, 0x7400, 0x29) + goto_first(0x0b) + label(0x29) + jump_to_ai_list(0xfd, 0x1804) + ai_list_end +}; +u8 ai_21[] = { + guard_play_animation(0x6a00, 0xffff, 0xffff, 0x06, 0x00) + ai_sleep + label(0x07) + guard_play_animation(0x6a00, 0xffff, 0xffff, 0x44, 0x00) + label(0x08) + ai_sleep + if_guard_shot_from_bond_missed(0x29) + if_guard_and_bond_within_line_of_sight(0x29) + if_guard_has_stopped_moving(0x09) + goto_first(0x08) + label(0x09) + goto_first(0x07) + label(0x29) + text_print_top(0x1624) + guard_play_animation(0x6b00, 0xffff, 0xffff, 0x86, 0x10) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x0a) + label(0x29) + if_bond_in_room_with_pad(0x7400, 0x29) + jump_to_ai_list(0xfd, 0x1504) + label(0x29) + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_15[] = { + debug_log 'T', 'H', '\n', '\0', + guard_flags_set_on(0x10000000) + debug_log '<', '-', 'd', 'a', 'm', 'a', 'g', 'e', ' ', 'o', 'f', 'f', '(', 'H', ')', '\n', '\0', + text_print_top(0x1524) + music_xtrack_play(0x00, 0x00, 0xff) + guard_sprints_to_pad(0x9600) + guard_set_speed_rating(0x64) + guard_set_argh_rating(0x64) + guard_set_accuracy_rating(0x64) + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x29) + goto_first(0x04) + label(0x29) + if_bond_in_room_with_pad(0x7300, 0x29) + if_bond_in_room_with_pad(0x7400, 0x29) + if_bond_in_room_with_pad(0x9400, 0x29) + if_bond_in_room_with_pad(0x6d00, 0x29) + goto_next(0x03) + label(0x29) + jump_to_ai_list(0xfd, 0x1504) + label(0x03) + chr_try_teleporting_to_pad(0xfd, 0x9600, 0x29) + jump_to_ai_list(0xfd, 0x1504) + label(0x29) + debug_log 'b', 'a', 'c', 'k', '\n', '\0', + jump_to_ai_list(0xfd, 0x1604) + ai_list_end +}; +u8 ai_19[] = { + debug_log 'T', '!', '\n', '\0', + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x04) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_17[] = { + debug_log 'T', 'w', 'h', 'e', 'r', 'e', '\n', '\0', + guard_flags_set_on(0x00020000) + label(0x03) + ai_sleep + guard_sprints_to_pad(0x5c00) + goto_first(0x03) + ai_list_end +}; +u8 ai_8[] = { + debug_log 'T', 'A', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x3b00, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x5c00) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0e04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x3e00, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x2a) + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + if_random_seed_greater_than(0xb4, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x2200, 0x42) + if_bond_in_room_with_pad(0x4500, 0x43) + if_bond_in_room_with_pad(0x5b00, 0x43) + random_generate_seed + if_random_seed_greater_than(0x32, 0x43) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + ai_list_end +}; +u8 ai_9[] = { + debug_log 'T', 'B', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x2700, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x4f00) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0f04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x2a00, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + if_random_seed_greater_than(0xb4, 0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + objective_bitfield_set_off(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x1f00, 0x42) + if_bond_in_room_with_pad(0x3100, 0x43) + if_bond_in_room_with_pad(0x5000, 0x43) + random_generate_seed + if_random_seed_greater_than(0x32, 0x43) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + ai_list_end +}; +u8 ai_10[] = { + debug_log 'T', 'C', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x0400, 0x29) + label(0x47) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x0700, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1d00, 0x29) + label(0x49) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3f) + if_objective_bitfield_is_set_on(0x00000008, 0x3e) + label(0x3f) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x3e) + goto_first(0x47) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x1800, 0x42) + if_bond_in_room_with_pad(0x1d00, 0x42) + if_bond_in_room_with_pad(0x1100, 0x43) + if_bond_in_room_with_pad(0x1300, 0x43) + if_bond_in_room_with_pad(0x1c00, 0x43) + if_bond_in_room_with_pad(0x0300, 0x44) + if_bond_in_room_with_pad(0x0900, 0x44) + if_bond_in_room_with_pad(0x1b00, 0x44) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x45) + label(0x42) + goto_first(0x49) + label(0x43) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x44) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x45) + goto_first(0x47) + ai_list_end +}; +u8 ai_11[] = { + debug_log 'T', 'D', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x0c00, 0x29) + label(0x47) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x0f00, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1b00, 0x29) + label(0x49) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3f) + if_objective_bitfield_is_set_on(0x00000008, 0x3e) + label(0x3f) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x3e) + goto_first(0x47) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x0900, 0x42) + if_bond_in_room_with_pad(0x1b00, 0x42) + if_bond_in_room_with_pad(0x0300, 0x43) + if_bond_in_room_with_pad(0x0100, 0x43) + if_bond_in_room_with_pad(0x1d00, 0x43) + if_bond_in_room_with_pad(0x0b00, 0x44) + if_bond_in_room_with_pad(0x1300, 0x44) + if_bond_in_room_with_pad(0x1c00, 0x44) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x45) + label(0x42) + goto_first(0x49) + label(0x43) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x1300) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x44) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x45) + goto_first(0x47) + ai_list_end +}; +u8 ai_12[] = { + debug_log 'T', 'E', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x1600, 0x29) + label(0x47) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1500, 0x29) + label(0x48) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x1c00, 0x29) + label(0x49) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3f) + if_objective_bitfield_is_set_on(0x00000008, 0x3e) + label(0x3f) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0b04) + label(0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x3e) + goto_first(0x47) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x1300, 0x42) + if_bond_in_room_with_pad(0x1c00, 0x42) + if_bond_in_room_with_pad(0x0b00, 0x43) + if_bond_in_room_with_pad(0x0900, 0x43) + if_bond_in_room_with_pad(0x1b00, 0x43) + if_bond_in_room_with_pad(0x1100, 0x44) + if_bond_in_room_with_pad(0x0100, 0x44) + if_bond_in_room_with_pad(0x1d00, 0x44) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x45) + label(0x42) + goto_first(0x49) + label(0x43) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x44) + random_generate_seed + if_random_seed_greater_than(0x55, 0x2a) + objective_bitfield_set_on(0x00000008) + chr_set_pad_preset(0x00, 0x0900) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0d04) + label(0x2a) + if_random_seed_greater_than(0xaa, 0x2a) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x2a) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x45) + goto_first(0x47) + ai_list_end +}; +u8 ai_13[] = { + debug_log 'T', 'F', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x4500, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x5900, 0x29) + label(0x48) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x6000, 0x29) + label(0x49) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x4400, 0x42) + if_bond_in_room_with_pad(0x3e00, 0x42) + if_bond_in_room_with_pad(0x6000, 0x43) + if_bond_in_room_with_pad(0x6100, 0x43) + if_bond_in_room_with_pad(0x6400, 0x43) + if_bond_in_room_with_pad(0x5000, 0x43) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x44) + goto_first(0x47) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + label(0x44) + goto_first(0x48) + ai_list_end +}; +u8 ai_14[] = { + debug_log 'T', 'G', '\n', '\0', + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x3200, 0x3100, 0x29) + label(0x47) + chr_set_pad_preset(0x00, 0x9000) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0904) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x5400, 0x29) + label(0x48) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_bond_distance_to_pad_greater_than(0x3200, 0x6400, 0x29) + label(0x49) + chr_set_pad_preset(0x00, 0x9100) + chr_bitfield_set_on(0x00, 0x04) + jump_to_ai_list(0xfd, 0x0a04) + label(0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x41) + goto_first(0x04) + label(0x41) + objective_bitfield_set_off(0x00000004) + if_bond_in_room_with_pad(0x3100, 0x42) + if_bond_in_room_with_pad(0x2a00, 0x42) + if_bond_in_room_with_pad(0x6400, 0x43) + if_bond_in_room_with_pad(0x6300, 0x43) + if_bond_in_room_with_pad(0x6000, 0x43) + if_bond_in_room_with_pad(0x5d00, 0x43) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x44) + goto_first(0x47) + label(0x42) + goto_first(0x47) + label(0x43) + goto_first(0x48) + label(0x44) + goto_first(0x48) + ai_list_end +}; +u8 ai_35[] = { + label(0x04) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_objective_bitfield_is_set_on(0x00040000, 0x29) + goto_first(0x04) + label(0x29) + text_print_top(0x0624) + local_timer_reset_start + label(0x07) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_local_timer_greater_than(0x2c0100, 0x29) + goto_first(0x07) + label(0x29) + text_print_top(0x0724) + sfx_play(0xa100, 0x00) + hud_countdown_set(0xb400) + hud_countdown_start + hud_countdown_show + label(0x0b) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_hud_countdown_less_than(0x3c00, 0x29) + goto_first(0x0b) + label(0x29) + label(0x08) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_hud_countdown_less_than(0x0f00, 0x29) + goto_first(0x08) + label(0x29) + text_print_top(0x0924) + label(0x09) + ai_sleep + if_object_not_destroyed(0x00, 0x29) + goto_next(0x2a) + label(0x29) + if_hud_countdown_less_than(0x0000, 0x29) + goto_first(0x09) + label(0x29) + objective_bitfield_set_on(0x00080000) + text_print_top(0x0a24) + sfx_stop_channel(0x00) + music_xtrack_stop(0x00) + hud_countdown_hide + hud_countdown_stop + label(0x0a) + ai_sleep + goto_first(0x0a) + label(0x2a) + sfx_stop_channel(0x00) + text_print_top(0x0824) + objective_bitfield_set_on(0x00020000) + music_xtrack_stop(0x00) + hud_countdown_hide + hud_countdown_stop + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_36[] = { + label(0x04) + ai_sleep + if_chr_does_not_exist(0x00, 0x29) + goto_first(0x04) + label(0x29) + objective_bitfield_set_on(0x00010000) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_37[] = { + label(0x04) + label(0x29) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_23[] = { + guard_flags_set_off(0x10000000) + guard_flags_set_on(0x00800000) + label(0x03) + if_guard_and_bond_within_line_of_sight(0x29) + guard_try_running_to_bond_position(0x07) + label(0x07) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + if_chr_dying_or_dead(0xfd, 0x30) + if_guard_and_bond_within_line_of_sight(0x29) + goto_first(0x07) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x40, 0x29) + guard_try_firing_walk(0x06) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x29) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + if_chr_dying_or_dead(0xfd, 0x30) + if_guard_has_stopped_moving(0x29) + goto_first(0x06) + label(0x29) + goto_first(0x03) + label(0x31) + objective_bitfield_set_on(0x00000010) + guard_flags_set_on(0x00400000) + guard_remove_fade + label(0x30) + ai_sleep + text_print_top(0x1724) + local_timer_reset_start + label(0x0b) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + goto_next(0x33) + label(0x31) + objective_bitfield_set_on(0x00000010) + label(0x33) + if_local_timer_greater_than(0x780000, 0x29) + goto_first(0x0b) + label(0x29) + text_print_top(0x1824) + label(0x0c) + ai_sleep + if_chr_in_room_with_pad(0xfd, 0x9400, 0x31) + goto_next(0x33) + label(0x31) + objective_bitfield_set_on(0x00000010) + label(0x33) + goto_first(0x0c) + ai_list_end +}; +u8 ai_24[] = { + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + chr_remove_item_in_hand(0xfd, 0x00) + chr_remove_item_in_hand(0xfd, 0x01) + guard_flags_set_on(0x00200000) + screen_fade_from_black + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + objective_bitfield_set_on(0x00000080) + local_timer_reset_start + label(0x07) + ai_sleep + guard_flags_set_on(0x00100000) + if_local_timer_greater_than(0x220100, 0x29) + goto_first(0x07) + label(0x29) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x08) + label(0x29) + camera_switch(0x02, 0x0200, 0x0000) + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + screen_fade_from_black + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + guard_play_animation(0xb300, 0x0200, 0xffff, 0x06, 0x10) + objective_bitfield_set_on(0x00000040) + local_timer_reset_start + label(0x09) + ai_sleep + guard_flags_set_on(0x00100000) + if_local_timer_greater_than(0x220100, 0x29) + goto_first(0x09) + label(0x29) + screen_fade_to_black + label(0x0a) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x0a) + label(0x29) + label(0x06) + exit_level + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_25[] = { + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + guard_play_animation(0xb400, 0xffff, 0xffff, 0x06, 0x10) + ai_sleep + guard_flags_set_on(0x00100000) + chr_try_teleporting_to_pad(0xfd, 0x9400, 0x29) + label(0x29) + guard_flags_set_on(0x00200000) + screen_fade_from_black + local_timer_reset_start + label(0x07) + ai_sleep + guard_flags_set_off(0x00100000) + guard_flags_set_off(0x01000000) + if_local_timer_greater_than(0x3c0000, 0x29) + goto_first(0x07) + label(0x29) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x08) + label(0x29) + camera_switch(0x03, 0x0200, 0x0000) + chr_try_teleporting_to_pad(0xfd, 0x9200, 0x29) + label(0x29) + guard_play_animation(0xb400, 0xffff, 0xffff, 0x06, 0x10) + ai_sleep + ai_sleep + guard_flags_set_on(0x00100000) + chr_try_teleporting_to_pad(0xfd, 0x9400, 0x29) + label(0x29) + screen_fade_from_black + local_timer_reset_start + label(0x09) + ai_sleep + guard_flags_set_off(0x00100000) + guard_flags_set_off(0x01000000) + if_local_timer_greater_than(0x5a0000, 0x29) + goto_first(0x09) + label(0x29) + screen_fade_to_black + label(0x0a) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x0a) + label(0x29) + objective_bitfield_set_on(0x00000020) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_26[] = { + chr_try_teleporting_to_pad(0xfd, 0x9500, 0x29) + label(0x29) + guard_animation_stop + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_39[] = { + label(0x03) + ai_sleep + if_bond_in_room_with_pad(0x9200, 0x29) + if_bond_in_room_with_pad(0x9300, 0x30) + goto_first(0x03) + label(0x29) + if_chr_does_not_exist(0x00, 0x29) + goto_first(0x03) + label(0x29) + if_guard_bitfield_is_set_on(0x01, 0x29) + guard_bitfield_set_on(0x01) + local_timer_reset_start + label(0x29) + if_local_timer_greater_than(0x3c0000, 0x29) + goto_first(0x03) + label(0x29) + if_objective_bitfield_is_set_on(0x00000010, 0x29) + jump_to_ai_list(0xfd, 0x2004) + label(0x29) + jump_to_ai_list(0xfd, 0x1d04) + label(0x30) + if_bond_y_pos_less_than(0x0af6, 0x29) + goto_first(0x03) + label(0x29) + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + label(0x07) + ai_sleep + if_bond_in_room_with_pad(0x9300, 0x29) + hud_show_all_and_unlock_controls_and_resume_mission_time + goto_first(0x03) + label(0x29) + if_bond_y_pos_less_than(0x1af0, 0x29) + goto_first(0x07) + label(0x29) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_30[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + bond_equip_item(0x00) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x01, 0x0100, 0x0000) + chr_flags_set_off(0xf8, 0x00040000) + jump_to_ai_list(0xf8, 0x1904) + jump_to_ai_list(0xfd, 0x0100) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_31[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + bond_equip_item(0x00) + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x07) + label(0x29) + jump_to_ai_list(0xfd, 0x1f04) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_27[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + bond_equip_item(0x00) + bond_killed_in_action + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x07) + label(0x29) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x04, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x1a04) + if_chr_dying_or_dead(0x00, 0x29) + if_chr_does_not_exist(0x00, 0x29) + if_chr_in_room_with_pad(0x00, 0x7400, 0x0a) + goto_next(0x29) + label(0x0a) + chr_flags_set_off(0x00, 0x00040000) + jump_to_ai_list(0x00, 0x1b04) + label(0x29) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00000020, 0x29) + goto_first(0x08) + label(0x29) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_29[] = { + guard_set_chr_num(0x00) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_28[] = { + if_bond_is_dead(0x3d) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x29) + goto_first(0x07) + label(0x29) + if_chr_does_not_exist(0x00, 0x30) + goto_next(0x29) + label(0x30) + chr_try_spawning_at_pad(0x08, 0xff, 0x9200, 0x1e04, 0x10000000, 0x29) + label(0x29) + ai_sleep + ai_sleep + if_chr_does_not_exist(0x00, 0x30) + goto_next(0x29) + label(0x30) + jump_to_ai_list(0xfd, 0x1f04) + label(0x29) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x04, 0x0200, 0x0000) + chr_flags_set_off(0x00, 0x00040000) + jump_to_ai_list(0x00, 0x1a04) + if_bond_in_room_with_pad(0x7400, 0x0a) + chr_flags_set_on(0xf8, 0x00040000) + goto_next(0x29) + label(0x0a) + jump_to_ai_list(0xf8, 0x1b04) + label(0x29) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00000020, 0x29) + goto_first(0x08) + label(0x29) + jump_to_ai_list(0xfd, 0x1f04) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_32[] = { + aircraft_rotor_speed(0x6c02, 0x0000) + guard_play_animation(0x0000, 0xffff, 0x0200, 0x06, 0x10) + label(0x07) + ai_sleep + if_objective_bitfield_is_set_on(0x00000080, 0x29) + goto_first(0x07) + label(0x29) + object_flags_2_set_off(0x05, 0x00000800) + guard_play_animation(0x0000, 0x0200, 0xffff, 0x06, 0x10) + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00000040, 0x29) + goto_first(0x08) + label(0x29) + object_move_to_pad(0x05, 0x9300) + guard_play_animation(0x0000, 0x0200, 0xffff, 0x06, 0x10) + guard_play_animation(0x0000, 0x0200, 0xffff, 0x06, 0x10) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_33[] = { + local_timer_reset_start + guard_play_animation(0x6300, 0x0000, 0x0100, 0x06, 0x10) + label(0x07) + ai_sleep + if_local_timer_greater_than(0x140000, 0x29) + goto_first(0x07) + label(0x29) + guard_play_animation(0x6300, 0x0100, 0xffff, 0x06, 0x10) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_38[] = { + label(0x07) + ai_sleep + if_camera_is_in_bond_swirl(0x29) + goto_first(0x07) + label(0x29) + jump_to_ai_list(0xf8, 0x2204) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_40[] = { + label(0x03) + ai_sleep + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1127, 0x29) + if_door_state_equal(0x06, 0x0a, 0x29) + door_open(0x06) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1227, 0x29) + if_door_state_equal(0x07, 0x0a, 0x29) + door_open(0x07) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1327, 0x29) + if_door_state_equal(0x08, 0x0a, 0x29) + door_open(0x08) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x3c00, 0x1427, 0x29) + if_door_state_equal(0x09, 0x0a, 0x29) + door_open(0x09) + label(0x29) + if_chr_distance_to_pad_greater_than(0x00, 0x1400, 0x1527, 0x29) + if_door_state_equal(0x0a, 0x0a, 0x29) + door_open(0x0a) + label(0x29) + goto_first(0x03) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/u/UsetupdestZ.c b/assets/obseg/setup/u/UsetupdestZ.c index b87ca635..6952f590 100644 --- a/assets/obseg/setup/u/UsetupdestZ.c +++ b/assets/obseg/setup/u/UsetupdestZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1292,19 +1293,441 @@ PathRecord patrolpaths[] = { }; -u32 ai_1[] = { 0x21020003, 0x3c073207, 0x31fc0c01, 0x00020702, 0x0b0330fd, 0x0731fc0c, 0x010b0207, 0xc3340818, 0xfd080802, 0x0a03010a, 0x020cc334, 0x09060404, 0x05fd0404, 0x04000000 }; -u32 ai_2[] = { 0x14002400, 0xfc000200, 0x0346073c, 0x07320701, 0x000207ae, 0x020a0370, 0x0229b400, 0x00780700, 0x08022970, 0x0129b400, 0x00960700, 0x080229b4, 0x0000b407, 0x02087900, 0x0b010a02, 0x07160004, 0x00fc0702, 0x07030303, 0x030318fc, 0x080a0600, 0x0205fd00, 0x08020b03, 0x06000205, 0xfd000201, 0x0b040000 }; -u32 ai_3[] = { 0x61fd0200, 0x33352807, 0xab008f00, 0x08020735, 0x5007ab00, 0x91000802, 0x07357807, 0xab009300, 0x08020735, 0xa007ab00, 0x94000802, 0x0735c807, 0xab00a800, 0x080207ab, 0x00a90008, 0x02081c23, 0x28020a03, 0x2f044dfd, 0x00322328, 0x04462301, 0x0a0223ad, 0x210a0021, 0x02070333, 0x35dc073b, 0x072f0701, 0x070207ad, 0x496d206f, 0x6666210a, 0x00010002, 0x044dfd00, 0x3223282e, 0x07022e3c, 0x0cc3340a, 0x000d020b, 0x03010b02, 0x0c010002, 0x0d229c00, 0x00010007, 0x9a000001, 0x00000e02, 0x079c0000, 0x0200079a, 0x00000200, 0x000e0207, 0x9c000004, 0x00079a00, 0x00040000, 0x0e02079c, 0x00000800, 0x079a0000, 0x0800000e, 0x02079c00, 0x00100007, 0x9a000010, 0x00000e02, 0x07020e03, 0x010e0400 }; -u32 ai_0[] = { 0xcd026c00, 0x000a0002, 0xffff0002, 0x06000200, 0x03010004 }; -u32 ai_5[] = { 0x02000358, 0x2f000757, 0x2f080100, 0x020c0358, 0x2f000701, 0x0c0207c3, 0x340b9b00, 0x0080009a, 0x00004000, 0x000a020a, 0x03582f00, 0x07000802, 0x07010a02, 0x08c3340c, 0x9a000080, 0x009b0000, 0x4000010c, 0x04000000 }; -u32 ai_6[] = { 0xc4003c00, 0xc7000000, 0x0000020a, 0x0352005a, 0x27540755, 0x006c0755, 0x001c0755, 0x00350755, 0x006e0755, 0x001d0755, 0x00750755, 0x00660755, 0x0063079c, 0x00080000, 0x08010a02, 0x07ad2121, 0x210a00c7, 0x007fff00, 0x78000b02, 0x0b039c00, 0x08000008, 0x53008c27, 0x5407010b, 0x0207ad6f, 0x66660a00, 0xc7000000, 0x00f0010a, 0x0208ad62, 0x616e670a, 0x00a40300, 0x0200005f, 0x03c90002, 0x0c03010c, 0x04000000 }; -u32 ai_7[] = { 0x0200035d, 0x01075c01, 0x08010002, 0x0759270b, 0x02085f01, 0x000c020b, 0xc400f701, 0xc5010100, 0x009a0001, 0x0000c334, 0x0da30100, 0x02000002, 0x0c03010c, 0x04000000 }; -u32 ai_8[] = { 0x0200035d, 0x02075c02, 0x08010002, 0x0759270b, 0x02085f02, 0x000c020b, 0xc400f702, 0xc5020200, 0x009a0002, 0x0000c334, 0x0ea30200, 0x02000002, 0x0c03010c, 0x04000000 }; -u32 ai_9[] = { 0x022a039c, 0x00040000, 0x075b0107, 0x9a000400, 0x0002079c, 0x00080000, 0x075b0207, 0x9a000800, 0x00020701, 0x2a040000 }; -u32 ai_10[] = { 0x020a0355, 0x00990755, 0x00950700, 0x03020701, 0x0a020303, 0xeb2f5500, 0x99070103, 0x0207ecd7, 0x00da020e, 0x03dc0701, 0x0e0207f1, 0x0705fd00, 0x0f0207dd, 0xea590207, 0x59030759, 0x1a07591b, 0x07591c07, 0x591d0759, 0x18075919, 0x07590407, 0x59050759, 0x06075907, 0x07590807, 0x59090759, 0x0a07590b, 0x07590c07, 0x590d0759, 0x0e07590f, 0x07591007, 0x59110759, 0x12075913, 0x07591607, 0x59140759, 0x1507e404, 0x0207ed03, 0x0303d504, 0x00020000, 0x05f80405, 0xdb020f03, 0xdc07010f, 0x020705fd, 0x0001022f, 0x05fd0001, 0x04000000 }; -u32 ai_4[] = { 0xd9fd00b0, 0x070207e0, 0xfd010a00, 0x69000000, 0x1d061002, 0x0b032f07, 0x010b0207, 0xe0fd000a, 0x0069001d, 0x00a00610, 0xae020c03, 0x2f07b400, 0x00de0701, 0x0c0207da, 0x020d03dc, 0x07010d02, 0x07d20204, 0x03010404 }; -u32 ai_11[] = { 0x7101049a, 0x00000100, 0x7100049a, 0x00000200, 0x9a000004, 0x00020405, 0xfd000104 }; -u32 ai_12[] = { 0x020303a0, 0x2c001000, 0x00a02d00, 0x100000a0, 0x30001000, 0x0003a031, 0x00100000, 0xa0340010, 0x0000a035, 0x00100000, 0x022a0370, 0x0229f701, 0x07012a02, 0x29700129, 0xf7020701, 0x2a0229f7, 0x0407012a, 0x0207ae02, 0x0a03b400, 0x003c07c3, 0x341e9a00, 0x10000001, 0x0a020705, 0xfd000104 }; +u8 ai_1[] = { + guard_surrenders + label(0x00) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x07) + if_guard_sees_bond(0x07) + if_chr_does_not_exist(0xfc, 0x0c) + goto_first(0x00) + label(0x07) + label(0x0b) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x07) + if_chr_does_not_exist(0xfc, 0x0c) + goto_first(0x0b) + label(0x07) + text_print_top(0x0834) + chr_hit_body_part_with_item_damage(0xfd, 0x08, 0x08) + label(0x0a) + ai_sleep + goto_first(0x0a) + label(0x0c) + text_print_top(0x0934) + set_return_ai_list(0x0404) + jump_to_ai_list(0xfd, 0x0404) + ai_list_end +}; +u8 ai_2[] = { + guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x00) + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x07) + if_guard_and_bond_within_line_of_sight(0x07) + if_guard_sees_bond(0x07) + goto_first(0x00) + label(0x07) + local_timer_reset_start + label(0x0a) + ai_sleep + if_game_difficulty_less_than(0x02, 0x29) + if_local_timer_greater_than(0x780000, 0x07) + goto_next(0x08) + label(0x29) + if_game_difficulty_less_than(0x01, 0x29) + if_local_timer_greater_than(0x960000, 0x07) + goto_next(0x08) + label(0x29) + if_local_timer_greater_than(0xb40000, 0x07) + label(0x08) + if_guard_hits_greater_than(0x00, 0x0b) + goto_first(0x0a) + label(0x07) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x07) + label(0x07) + ai_sleep + ai_sleep + ai_sleep + ai_sleep + ai_sleep + chr_hit_body_part_with_item_damage(0xfc, 0x08, 0x0a) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + label(0x0b) + ai_sleep + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0200) + goto_first(0x0b) + ai_list_end +}; +u8 ai_3[] = { + chr_drop_all_concealed_items(0xfd) + label(0x00) + random_generate_seed + if_random_seed_greater_than(0x28, 0x07) + guard_set_pad_preset(0x8f00) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0x50, 0x07) + guard_set_pad_preset(0x9100) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0x78, 0x07) + guard_set_pad_preset(0x9300) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0xa0, 0x07) + guard_set_pad_preset(0x9400) + goto_next(0x08) + label(0x07) + if_random_seed_greater_than(0xc8, 0x07) + guard_set_pad_preset(0xa800) + goto_next(0x08) + label(0x07) + guard_set_pad_preset(0xa900) + goto_next(0x08) + label(0x08) + guard_runs_to_pad(0x2823) + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x04) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x04) + if_guard_shot_from_bond_missed(0x23) + goto_first(0x0a) + label(0x23) + debug_log '!', '\n', '\0', + guard_surrenders + label(0x07) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xdc, 0x07) + if_guard_see_another_guard_die(0x07) + if_guard_has_stopped_moving(0x07) + goto_first(0x07) + label(0x07) + debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0', + goto_first(0x00) + label(0x04) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0x2823, 0x2e) + jump_to_return_ai_list + label(0x2e) + if_guard_and_bond_within_line_of_sight(0x0c) + text_print_top(0x0a34) + goto_next(0x0d) + label(0x0b) + ai_sleep + goto_first(0x0b) + label(0x0c) + goto_first(0x00) + label(0x0d) + guard_remove_fade + if_objective_bitfield_is_set_on(0x00010000, 0x07) + objective_bitfield_set_on(0x00010000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00020000, 0x07) + objective_bitfield_set_on(0x00020000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00040000, 0x07) + objective_bitfield_set_on(0x00040000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00080000, 0x07) + objective_bitfield_set_on(0x00080000) + goto_next(0x0e) + label(0x07) + if_objective_bitfield_is_set_on(0x00100000, 0x07) + objective_bitfield_set_on(0x00100000) + goto_next(0x0e) + label(0x07) + label(0x0e) + ai_sleep + goto_first(0x0e) + ai_list_end +}; +u8 ai_0[] = { + aircraft_rotor_speed(0x6c02, 0x0000) + guard_play_animation(0x0200, 0xffff, 0x0200, 0x06, 0x00) + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_5[] = { + label(0x00) + ai_sleep + if_item_is_attached_to_object(0x2f, 0x00, 0x07) + if_item_is_stationary_within_level(0x2f, 0x08) + goto_first(0x00) + label(0x0c) + ai_sleep + if_item_is_attached_to_object(0x2f, 0x00, 0x07) + goto_first(0x0c) + label(0x07) + text_print_top(0x0b34) + objective_bitfield_set_off(0x00800000) + objective_bitfield_set_on(0x00400000) + goto_next(0x0a) + label(0x0a) + ai_sleep + if_item_is_attached_to_object(0x2f, 0x00, 0x07) + goto_next(0x08) + label(0x07) + goto_first(0x0a) + label(0x08) + text_print_top(0x0c34) + objective_bitfield_set_on(0x00800000) + objective_bitfield_set_off(0x00400000) + goto_first(0x0c) + ai_list_end +}; +u8 ai_6[] = { + sfx_play(0x3c00, 0x00) + sfx_set_channel_volume(0x00, 0x0000, 0x0000) + label(0x0a) + ai_sleep + if_bond_distance_to_pad_less_than(0x5a00, 0x5427, 0x07) + if_bond_in_room_with_pad(0x6c00, 0x07) + if_bond_in_room_with_pad(0x1c00, 0x07) + if_bond_in_room_with_pad(0x3500, 0x07) + if_bond_in_room_with_pad(0x6e00, 0x07) + if_bond_in_room_with_pad(0x1d00, 0x07) + if_bond_in_room_with_pad(0x7500, 0x07) + if_bond_in_room_with_pad(0x6600, 0x07) + if_bond_in_room_with_pad(0x6300, 0x07) + if_objective_bitfield_is_set_on(0x00000800, 0x08) + goto_first(0x0a) + label(0x07) + debug_log '!', '!', '!', '\n', '\0', + sfx_set_channel_volume(0x00, 0xff7f, 0x7800) + goto_next(0x0b) + label(0x0b) + ai_sleep + if_objective_bitfield_is_set_on(0x00000800, 0x08) + if_bond_distance_to_pad_greater_than(0x8c00, 0x5427, 0x07) + goto_first(0x0b) + label(0x07) + debug_log 'o', 'f', 'f', '\n', '\0', + sfx_set_channel_volume(0x00, 0x0000, 0xf000) + goto_first(0x0a) + label(0x08) + debug_log 'b', 'a', 'n', 'g', '\n', '\0', + object_flags_1_set_off(0x03, 0x00000200) + object_destroy(0x03) + sfx_stop_channel(0x00) + label(0x0c) + ai_sleep + goto_first(0x0c) + ai_list_end +}; +u8 ai_7[] = { + label(0x00) + ai_sleep + if_bond_used_gadget_on_object(0x01, 0x07) + if_object_was_activated(0x01, 0x08) + goto_first(0x00) + label(0x07) + if_bond_has_item_equipped(0x27, 0x0b) + label(0x08) + object_destroy(0x01) + goto_next(0x0c) + label(0x0b) + sfx_play(0xf700, 0x01) + sfx_emit_from_object(0x01, 0x01, 0x0000) + objective_bitfield_set_on(0x00000100) + text_print_top(0x0d34) + object_flags_1_set_on(0x01, 0x00000200) + label(0x0c) + ai_sleep + goto_first(0x0c) + ai_list_end +}; +u8 ai_8[] = { + label(0x00) + ai_sleep + if_bond_used_gadget_on_object(0x02, 0x07) + if_object_was_activated(0x02, 0x08) + goto_first(0x00) + label(0x07) + if_bond_has_item_equipped(0x27, 0x0b) + label(0x08) + object_destroy(0x02) + goto_next(0x0c) + label(0x0b) + sfx_play(0xf700, 0x02) + sfx_emit_from_object(0x02, 0x02, 0x0000) + objective_bitfield_set_on(0x00000200) + text_print_top(0x0e34) + object_flags_1_set_on(0x02, 0x00000200) + label(0x0c) + ai_sleep + goto_first(0x0c) + ai_list_end +}; +u8 ai_9[] = { + label(0x2a) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x07) + if_object_not_destroyed(0x01, 0x07) + objective_bitfield_set_on(0x00000400) + label(0x07) + if_objective_bitfield_is_set_on(0x00000800, 0x07) + if_object_not_destroyed(0x02, 0x07) + objective_bitfield_set_on(0x00000800) + label(0x07) + goto_first(0x2a) + ai_list_end +}; +u8 ai_10[] = { + label(0x0a) + ai_sleep + if_bond_in_room_with_pad(0x9900, 0x07) + if_bond_in_room_with_pad(0x9500, 0x07) + goto_next(0x03) + label(0x07) + goto_first(0x0a) + label(0x03) + ai_sleep + if_bond_is_dead(0x2f) + if_bond_in_room_with_pad(0x9900, 0x07) + goto_first(0x03) + label(0x07) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x0e) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0e) + label(0x07) + if_objective_all_completed(0x07) + jump_to_ai_list(0xfd, 0x0f00) + label(0x07) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + if_bond_has_item_equipped(0x02, 0x07) + if_bond_has_item_equipped(0x03, 0x07) + if_bond_has_item_equipped(0x1a, 0x07) + if_bond_has_item_equipped(0x1b, 0x07) + if_bond_has_item_equipped(0x1c, 0x07) + if_bond_has_item_equipped(0x1d, 0x07) + if_bond_has_item_equipped(0x18, 0x07) + if_bond_has_item_equipped(0x19, 0x07) + if_bond_has_item_equipped(0x04, 0x07) + if_bond_has_item_equipped(0x05, 0x07) + if_bond_has_item_equipped(0x06, 0x07) + if_bond_has_item_equipped(0x07, 0x07) + if_bond_has_item_equipped(0x08, 0x07) + if_bond_has_item_equipped(0x09, 0x07) + if_bond_has_item_equipped(0x0a, 0x07) + if_bond_has_item_equipped(0x0b, 0x07) + if_bond_has_item_equipped(0x0c, 0x07) + if_bond_has_item_equipped(0x0d, 0x07) + if_bond_has_item_equipped(0x0e, 0x07) + if_bond_has_item_equipped(0x0f, 0x07) + if_bond_has_item_equipped(0x10, 0x07) + if_bond_has_item_equipped(0x11, 0x07) + if_bond_has_item_equipped(0x12, 0x07) + if_bond_has_item_equipped(0x13, 0x07) + if_bond_has_item_equipped(0x16, 0x07) + if_bond_has_item_equipped(0x14, 0x07) + if_bond_has_item_equipped(0x15, 0x07) + bond_equip_item_cinema(0x04) + label(0x07) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x04, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x0504) + screen_fade_from_black + label(0x0f) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0f) + label(0x07) + jump_to_ai_list(0xfd, 0x0100) + label(0x2f) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_4[] = { + chr_try_teleporting_to_pad(0xfd, 0xb000, 0x07) + label(0x07) + chr_remove_item_in_hand(0xfd, 0x01) + guard_play_animation(0x6900, 0x0000, 0x1d00, 0x06, 0x10) + label(0x0b) + ai_sleep + if_guard_has_stopped_moving(0x07) + goto_first(0x0b) + label(0x07) + chr_remove_item_in_hand(0xfd, 0x00) + guard_play_animation(0x6900, 0x1d00, 0xa000, 0x06, 0x10) + local_timer_reset_start + label(0x0c) + ai_sleep + if_guard_has_stopped_moving(0x07) + if_local_timer_greater_than(0xde0000, 0x07) + goto_first(0x0c) + label(0x07) + screen_fade_to_black + label(0x0d) + ai_sleep + if_screen_fade_completed(0x07) + goto_first(0x0d) + label(0x07) + exit_level + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_11[] = { + if_game_difficulty_greater_than(0x01, 0x04) + objective_bitfield_set_on(0x00010000) + if_game_difficulty_greater_than(0x00, 0x04) + objective_bitfield_set_on(0x00020000) + objective_bitfield_set_on(0x00040000) + label(0x04) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_12[] = { + label(0x03) + ai_sleep + chr_flags_set_on(0x2c, 0x00001000) + chr_flags_set_on(0x2d, 0x00001000) + chr_flags_set_on(0x30, 0x00001000) + ai_sleep + chr_flags_set_on(0x31, 0x00001000) + chr_flags_set_on(0x34, 0x00001000) + chr_flags_set_on(0x35, 0x00001000) + label(0x2a) + ai_sleep + if_game_difficulty_less_than(0x02, 0x29) + if_killed_civilians_greater_than(0x01, 0x07) + goto_first(0x2a) + label(0x29) + if_game_difficulty_less_than(0x01, 0x29) + if_killed_civilians_greater_than(0x02, 0x07) + goto_first(0x2a) + label(0x29) + if_killed_civilians_greater_than(0x04, 0x07) + goto_first(0x2a) + label(0x07) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x07) + text_print_top(0x1e34) + objective_bitfield_set_on(0x00001000) + goto_first(0x0a) + label(0x07) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/u/UsetupjunZ.c b/assets/obseg/setup/u/UsetupjunZ.c index 84b8b82e..beb311ca 100644 --- a/assets/obseg/setup/u/UsetupjunZ.c +++ b/assets/obseg/setup/u/UsetupjunZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -2267,44 +2268,1180 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x04000000 }; -u32 ai_31[] = { 0x02040330, 0x002c3100, 0x2c010402, 0x2cf5009a, 0x00000100, 0x02060301, 0x06040000 }; -u32 ai_1[] = { 0x9001908f, 0x00649164, 0x93649264, 0x9d000002, 0x009d0000, 0x08000208, 0x033c2c42, 0x2c010802, 0x2cc3481e, 0xf40000ff, 0x05fd0403, 0x04000000 }; -u32 ai_2[] = { 0xad58202d, 0x206d6100, 0x02030306, 0x04033335, 0x3c364551, 0x02363c3d, 0x023105fd, 0x04050251, 0x05fd0406, 0x023d05fd, 0x04040400 }; -u32 ai_3[] = { 0xad58202d, 0x20617400, 0x02033335, 0x802c4551, 0x7f3f3d33, 0x022c3528, 0x2c130602, 0x2c35502c, 0x1106022c, 0x35782c02, 0x3d120602, 0x2c35a02c, 0x14000100, 0x0006022c, 0x35c82c15, 0x00010000, 0x06022c35, 0xe12c1500, 0x2100002c, 0x022c1400, 0x2100002c, 0x022c0303, 0x03160001, 0x00000602, 0x06032f2c, 0x0106022c, 0x05fd0403, 0x02510604, 0x0405fd04, 0x06040000 }; -u32 ai_5[] = { 0xad58202d, 0x20657600, 0x02030333, 0x022c3335, 0x3c2c0f06, 0x022c3335, 0x782c0e06, 0x022c3335, 0xb42c1006, 0x022c0a00, 0x0b001400, 0x3c001000, 0x06020603, 0x2f2c0106, 0x022c0704 }; -u32 ai_4[] = { 0xad58202d, 0x20676f00, 0x0203282c, 0x022c0208, 0x032f063c, 0x06455101, 0x08025106, 0x040505fd, 0x04060206, 0x06040305, 0xfd040304 }; -u32 ai_7[] = { 0x9000508f, 0x00509d00, 0x00080002, 0x0303ce2c, 0xcf2c0006, 0x022c0103, 0x0206c348, 0x1c05fd04, 0x07040000 }; -u32 ai_6[] = { 0xad666f6c, 0x00910a9d, 0x00000040, 0x0201034b, 0x00960828, 0x09010102, 0x09032f06, 0x4b004b08, 0x01090208, 0x03333580, 0x06036f02, 0x2c6f042c, 0x6f082c08, 0x05fd040c, 0x022cad66, 0x726f6c69, 0x63001d02, 0x0a032f06, 0x4c00fa06, 0x01090206, 0x05fd0409, 0x02070400 }; -u32 ai_8[] = { 0xad6d646b, 0x00eb2602, 0x03510064, 0x26035100, 0xc82c0351, 0x012c2c05, 0xfd040c02, 0x2c40fc36, 0x00070236, 0x33358036, 0x14002400, 0xfc3d0236, 0x15002400, 0xfc3d1700, 0x0400fc2c, 0x022cae02, 0x0d03b400, 0x003c2c01, 0x0d022c40, 0xfc360007, 0x02360103, 0x023d97fc, 0x80ae020b, 0x0330fc4b, 0xb400003c, 0x2c010b02, 0x2c160004, 0x00fc2c02, 0x2c020c30, 0xfc4b31fc, 0x4b032f2c, 0x010c022c, 0x3335802c, 0x0103022c, 0x020798fc, 0x8005fd04, 0x07024b05, 0xfd040a02, 0x2605fd04, 0x0b040000 }; -u32 ai_9[] = { 0x98fc809c, 0x00000200, 0x367f3307, 0x02363303, 0x353c0633, 0x03350a2c, 0xc3480800, 0x06022c35, 0x142cc348, 0x09000602, 0x2c351e2c, 0xc3480a00, 0x06022c35, 0x282cc348, 0x0b000602, 0x2c35322c, 0xc3480c00, 0x06022c35, 0x3c2cc348, 0x0d000602, 0x2c35462c, 0xc3480e00, 0x06022c35, 0x502cc348, 0x0f000602, 0x2c355a2c, 0xc3481000, 0x06022c35, 0x642cc348, 0x11000602, 0x2c356e2c, 0xc3481200, 0x06022c35, 0x782cc348, 0x13000602, 0x2c35822c, 0xc3481400, 0x06022c35, 0x8c2cc348, 0x15000602, 0x2c35962c, 0xc3481600, 0x06022c35, 0xa02cc348, 0x17000602, 0x2c35aa2c, 0xc3481800, 0x06022c35, 0xb42cc348, 0x19000602, 0x2c35be2c, 0xc3481a00, 0x06022c02, 0x0605fd04, 0x070207c3, 0x481d9a00, 0x00020001, 0x06040000 }; -u32 ai_11[] = { 0xad736361, 0x6e009100, 0x33353c2c, 0x0a009600, 0x00005600, 0x10000802, 0x2c35782c, 0x0a009700, 0x00005600, 0x10000802, 0x2c358c2c, 0x0a005300, 0x00002200, 0x10003602, 0x2c35a02c, 0x0a005400, 0x00002400, 0x10003602, 0x2c35b42c, 0x0a006300, 0x00009500, 0x10000802, 0x2c036e02, 0x2c6e042c, 0x6e082c6e, 0x012cab02, 0x02022c91, 0x0035c82c, 0x15012823, 0x28360036, 0x022c35dc, 0x2c140128, 0x23283600, 0x36022c17, 0x00082328, 0x36003602, 0x08032f06, 0x01080236, 0xae020903, 0xb4000078, 0x06010902, 0x0605fd04, 0x07040000 }; -u32 ai_10[] = { 0xad657661, 0x64009114, 0x97fc8033, 0x35800a0a, 0x000b0014, 0x003c0210, 0x0208032f, 0x2c010802, 0x2c020a15, 0x002400fc, 0x3d023dae, 0x020b0330, 0xfc4bb400, 0x003c2c01, 0x0b022c4f, 0x0019fc09, 0x16000400, 0xfc2c022c, 0x020c032f, 0x2c010c02, 0x2c30fc4b, 0x3335802c, 0x0108022c, 0x020798fc, 0x8005fd04, 0x07024b05, 0xfd040a02, 0x09032f2c, 0xe72c0109, 0x022c1600, 0x0400fc2c, 0x05fd0407, 0x022c0319, 0xfdfc08ad, 0x63686561, 0x700098fc, 0x80020d03, 0x2f2c010d, 0x022c05fd, 0x04070400 }; -u32 ai_12[] = { 0x02040330, 0xfd332f3b, 0x0104023b, 0x324e3e4f, 0x3f4d4650, 0x3a4d3b4d, 0x0b2c3335, 0x012c0604, 0x0d05fd00, 0x03022c01, 0x04025033, 0x357f4e06, 0x040d05fd, 0x040f024e, 0x06040d05, 0xfd040e02, 0x4f06040d, 0x05fd0410, 0x024d0604, 0x0d05fd00, 0x0b023305, 0xfd000104 }; -u32 ai_13[] = { 0x96012c33, 0x35202c0c, 0x94010702, 0x2c94011a, 0x06022c03, 0x31012c30, 0x012c0333, 0x35642c4f, 0x0050012a, 0x96802a02, 0x08022c4c, 0x00964f33, 0x350a2c13, 0x06022c33, 0x350a2c0f, 0x06022c33, 0x35192c0e, 0x06022c33, 0x35322c10, 0x06022c33, 0x35402c11, 0x06022c35, 0x7f2c1206, 0x022c3335, 0x7f3e1400, 0x01000006, 0x023e1500, 0x01000006, 0x02060702, 0x2a034001, 0x36000702, 0x3606040e, 0x05fd041c, 0x02070108, 0x024f0604, 0x0d05fd04, 0x10040000 }; -u32 ai_14[] = { 0x0d020403, 0x2f060104, 0x020605fd, 0x04100400 }; -u32 ai_15[] = { 0x94012804, 0x07020403, 0x2f3b324e, 0x0104024e, 0x4b009636, 0x01040236, 0x05fd040e, 0x023b0704 }; -u32 ai_27[] = { 0xad676574, 0x204e00a9, 0x01039e00, 0x00004033, 0x3580039d, 0x00000040, 0x02030331, 0xfc4b30fc, 0x4b40fc36, 0x00070236, 0x33358036, 0x14002400, 0xfc3d0236, 0x15002400, 0xfc3d1700, 0x0400fc2c, 0x022cae02, 0x0d03b400, 0x003c2c01, 0x0d022c00, 0x07023601, 0x03023daa, 0x01fdae02, 0x0b03b400, 0x003c2c01, 0x0b022c16, 0x000400fc, 0x2c022c02, 0x0c30fc4b, 0x032f2c01, 0x0c022c02, 0x07022602, 0x06039e00, 0x00004007, 0x024b0604, 0x0d05fd04, 0x10040000 }; -u32 ai_16[] = { 0x94014c00, 0xfa4d414d, 0x05fd0410, 0x024d31f9, 0x4d05fd04, 0x0d024dc1, 0xfd04122c, 0x05fd0410, 0x022c05fd, 0x040d0400 }; -u32 ai_17[] = { 0x06040d05, 0xfd041004 }; -u32 ai_18[] = { 0x90001402, 0x03140021, 0x00000402, 0x0403462c, 0x3a2c3b2c, 0x322c3c2c, 0x0104022c, 0x3335962c, 0x16000100, 0x0008022c, 0x09ae0209, 0x033335fa, 0x2cb40000, 0xf0060109, 0x022c1400, 0x2100002c, 0x022c1600, 0x0100002c, 0x022c0208, 0x032f0601, 0x08020601, 0x03040000 }; -u32 ai_32[] = { 0x02040331, 0x012c0104, 0x022cc348, 0x1f9a0000, 0x04000206, 0x03010604 }; -u32 ai_33[] = { 0x020303eb, 0x4c5501d4, 0x2c010302, 0x2c9a0000, 0x8000ecd7, 0x00da0208, 0x03dc2c01, 0x08022c31, 0x014b3001, 0x4bf12c05, 0xfd000f02, 0x2cddeadf, 0x1fdf2059, 0x042c5905, 0x2c59062c, 0x59072c59, 0x082c5909, 0x2c590a2c, 0x590b2c59, 0x0c2c590d, 0x2c590e2c, 0x590f2c59, 0x102c5911, 0x2c59122c, 0x59132c59, 0x162c5914, 0x2c59152c, 0xe404022c, 0xed030303, 0xd51e0002, 0x0000a101, 0x00000400, 0xa0010480, 0x0000d901, 0x024f2c02, 0x2c050104, 0x1ea0f804, 0x800000d9, 0xf802502c, 0x022c05f8, 0x041f0303, 0xdbf40100, 0xff05fd00, 0x01024bd2, 0x05fd0001, 0x024c05fd, 0x00010400 }; -u32 ai_30[] = { 0xa0fd0000, 0x0010a0fd, 0x00000080, 0x0a005aff, 0xffffff06, 0x1059042c, 0x59052c59, 0x062c5907, 0x2c59082c, 0x59092c59, 0x0a2c590b, 0x2c590c2c, 0x590d2c59, 0x0e2c590f, 0x2c59102c, 0x59112c59, 0x122c5913, 0x2c59162c, 0x59142c59, 0x152ce0fd, 0x00e0fd01, 0xbf00bf04, 0x00000000, 0x2c022c02, 0x08035401, 0x01d42c01, 0x08022cae, 0x020903b4, 0x00001e2c, 0x0109022c, 0x14002802, 0x4f2c022c, 0x16000802, 0x4f2c022c, 0xae020a03, 0xb400005a, 0x2c010a02, 0x2c671f02, 0x0b03b400, 0x00962c01, 0x0b022cda, 0x020c03dc, 0x2c010c02, 0x2cd205fd, 0x00010400 }; -u32 ai_29[] = { 0xa0fd0000, 0x0010a0fd, 0x00000080, 0x0a005a00, 0x07ffff06, 0x10020803, 0x540101d4, 0x2c010802, 0x2cae0209, 0x03b40000, 0x0a2c0109, 0x022c1500, 0x2802502c, 0x022c1600, 0x0802502c, 0x022c05fd, 0x00010400 }; -u32 ai_37[] = { 0xae020903, 0xb4000258, 0x2c010902, 0x2ca40300, 0x0200005f, 0x03020a03, 0xb40002d0, 0x2c010a02, 0x2ca40400, 0x0200005f, 0x04020b03, 0xb400030c, 0x2c010b02, 0x2ca40500, 0x0200005f, 0x0505fd00, 0x01040000 }; -u32 ai_34[] = { 0x02040355, 0x01c82c01, 0x04022c9a, 0x00000800, 0x0237aead, 0x210a0003, 0x31272c00, 0x36022c9c, 0x00001000, 0x36f336bd, 0x00ff01d3, 0x04140000, 0x00002c02, 0x36022c03, 0x31282c00, 0x36022c9c, 0x00002000, 0x36f336bd, 0x00ff01d3, 0x04150000, 0x00002c02, 0x36022c03, 0x31292c00, 0x36022c9c, 0x00004000, 0x36f336bd, 0x00ff01d3, 0x04160000, 0x00002c02, 0x36022c03, 0x311d2c00, 0x36022c9c, 0x00008000, 0x36f336bd, 0x00ff01d3, 0x04170000, 0x00002c02, 0x36022c03, 0x31222c00, 0x36022c9c, 0x00010000, 0x36f336bd, 0x00ff01d3, 0x04180000, 0x00002c02, 0x36022c03, 0x311e2c00, 0x36022c9c, 0x00020000, 0x36f336bd, 0x00ff01d3, 0x04190000, 0x00002c02, 0x36020603, 0x9c000008, 0x00360007, 0x0236b400, 0x00782c55, 0x01d20755, 0x01b90701, 0x06022c01, 0x370207ad, 0x73706177, 0x6e206f66, 0x66009b00, 0x00080001, 0x04040000 }; -u32 ai_19[] = { 0x8e273335, 0xc836ab02, 0x49002c02, 0x36ab01cb, 0x022cad31, 0x380a0005, 0xfd041a04 }; -u32 ai_20[] = { 0x8e283335, 0xc836ab02, 0x4a002c02, 0x36ab01ca, 0x022cad31, 0x390a0005, 0xfd041a04 }; -u32 ai_21[] = { 0x8e293335, 0xc836ab02, 0x4b002c02, 0x36ab01c7, 0x022cad32, 0x300a0005, 0xfd041a04 }; -u32 ai_22[] = { 0x8e1d3335, 0xc836ab02, 0x41002c02, 0x36ab01c8, 0x022cad31, 0x300a0005, 0xfd041a04 }; -u32 ai_23[] = { 0x8e223335, 0xc836ab02, 0x42002c02, 0x36ab01c9, 0x022cad31, 0x310a0005, 0xfd041a04 }; -u32 ai_24[] = { 0x8e1e3335, 0xc836ab02, 0x47002c02, 0x36ab01c4, 0x022cad32, 0x300a0005, 0xfd041a04 }; -u32 ai_25[] = { 0xc000d900, 0x00000004, 0x0204bf00, 0xbc0d0000, 0x00000402, 0x04000602, 0x06060002, 0x05fd041b, 0x04000000 }; -u32 ai_26[] = { 0x02031f23, 0x28030208, 0x032f2c4b, 0x0064074d, 0xfd000a23, 0x28060108, 0x022c034b, 0x0064074d, 0xfd000a23, 0x28060103, 0x020605fd, 0x04130207, 0x06040d05, 0xfd041004 }; -u32 ai_35[] = { 0x0208039c, 0x00000800, 0x2c010802, 0x2cae9b00, 0x0010009b, 0x00002000, 0x9b000040, 0x009b0000, 0x80009b00, 0x0100009b, 0x00020000, 0x0209039c, 0x00000800, 0x36000602, 0x36b4002a, 0x302c0109, 0x022cad72, 0x616d7020, 0x646f776e, 0x2031009a, 0x00008000, 0x9a000100, 0x009a0002, 0x0000020a, 0x039c0000, 0x08003600, 0x060236b4, 0x008ca02c, 0x010a022c, 0xad72616d, 0x7020646f, 0x776e2032, 0x009a0000, 0x10009a00, 0x0020009a, 0x00004000, 0x02069b00, 0x00080001, 0x08040000 }; -u32 ai_28[] = { 0x0a006700, 0x00000104, 0x10ae0208, 0x03b40000, 0x3c2c0108, 0x022c0a00, 0x670001ff, 0xff041005, 0xfd000104 }; -u32 ai_36[] = { 0x020803cf, 0x2c010802, 0x2c05f804, 0x1d020603, 0x01060400 }; +u8 ai_0[] = { + ai_list_end +}; +u8 ai_31[] = { + label(0x04) + ai_sleep + if_chr_dying_or_dead(0x00, 0x2c) + if_chr_does_not_exist(0x00, 0x2c) + goto_first(0x04) + label(0x2c) + music_xtrack_stop(0x00) + objective_bitfield_set_on(0x00010000) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_1[] = { + guard_set_armour(0x9001) + guard_set_health_total(0x6400) + guard_set_speed_rating(0x64) + guard_set_accuracy_rating(0x64) + guard_set_argh_rating(0x64) + guard_flags_set_on(0x00020000) + guard_flags_set_on(0x00080000) + label(0x08) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x2c) + if_guard_is_on_screen(0x2c) + goto_first(0x08) + label(0x2c) + text_print_top(0x1e48) + music_xtrack_play(0x00, 0x00, 0xff) + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_2[] = { + debug_log 'X', ' ', '-', ' ', 'm', 'a', '\0', + label(0x03) + ai_sleep + set_return_ai_list(0x0304) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x36) + if_guard_is_targeted_by_bond(0x51) + label(0x36) + if_guard_and_bond_within_line_of_sight(0x3d) + label(0x31) + jump_to_ai_list(0xfd, 0x0504) + label(0x51) + jump_to_ai_list(0xfd, 0x0604) + label(0x3d) + jump_to_ai_list(0xfd, 0x0404) + ai_list_end +}; +u8 ai_3[] = { + debug_log 'X', ' ', '-', ' ', 'a', 't', '\0', + label(0x03) + random_generate_seed + if_random_seed_greater_than(0x80, 0x2c) + if_guard_is_targeted_by_bond(0x51) + if_bond_health_less_than(0x3f, 0x3d) + random_generate_seed + label(0x2c) + if_random_seed_greater_than(0x28, 0x2c) + guard_try_firing_roll(0x06) + label(0x2c) + if_random_seed_greater_than(0x50, 0x2c) + guard_try_firing_walk(0x06) + label(0x2c) + if_random_seed_greater_than(0x78, 0x2c) + label(0x3d) + guard_try_firing_run(0x06) + label(0x2c) + if_random_seed_greater_than(0xa0, 0x2c) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x2c) + if_random_seed_greater_than(0xc8, 0x2c) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x2c) + if_random_seed_greater_than(0xe1, 0x2c) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x2c) + label(0x2c) + ai_sleep + ai_sleep + ai_sleep + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x06) + label(0x2c) + jump_to_ai_list(0xfd, 0x0304) + label(0x51) + set_return_ai_list(0x0404) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_5[] = { + debug_log 'X', ' ', '-', ' ', 'e', 'v', '\0', + label(0x03) + ai_sleep + random_generate_seed + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2c) + guard_try_hopping_sideways(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x78, 0x2c) + guard_try_sidestepping(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0xb4, 0x2c) + guard_try_running_to_side(0x06) + label(0x2c) + guard_play_animation(0x0b00, 0x1400, 0x3c00, 0x00, 0x10) + goto_next(0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x06) + label(0x2c) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_4[] = { + debug_log 'X', ' ', '-', ' ', 'g', 'o', '\0', + label(0x03) + guard_try_running_to_bond_position(0x2c) + label(0x2c) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_guard_and_bond_within_line_of_sight(0x06) + if_guard_is_targeted_by_bond(0x51) + goto_first(0x08) + label(0x51) + set_return_ai_list(0x0504) + jump_to_ai_list(0xfd, 0x0604) + label(0x06) + set_return_ai_list(0x0304) + jump_to_ai_list(0xfd, 0x0304) + ai_list_end +}; +u8 ai_7[] = { + guard_set_armour(0x5000) + guard_set_health_total(0x5000) + guard_flags_set_on(0x00080000) + label(0x03) + ai_sleep + if_camera_is_in_intro(0x2c) + if_camera_is_in_bond_swirl(0x2c) + goto_next(0x06) + label(0x2c) + goto_first(0x03) + label(0x06) + text_print_top(0x1c48) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_6[] = { + debug_log 'f', 'o', 'l', '\0', + guard_set_speed_rating(0x0a) + guard_flags_set_on(0x40000000) + label(0x01) + ai_sleep + if_guard_distance_to_bond_less_than(0x9600, 0x08) + guard_try_running_to_bond_position(0x09) + goto_first(0x01) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_guard_distance_to_bond_less_than(0x4b00, 0x08) + goto_first(0x09) + label(0x08) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x80, 0x06) + ai_sleep + guard_try_unknown6F(0x02, 0x2c) + guard_try_unknown6F(0x04, 0x2c) + guard_try_unknown6F(0x08, 0x2c) + guard_animation_stop + jump_to_ai_list(0xfd, 0x0c04) + label(0x2c) + debug_log 'f', 'r', 'o', 'l', 'i', 'c', '\0', + guard_runs_to_pad_preset + label(0x0a) + ai_sleep + if_guard_has_stopped_moving(0x06) + if_guard_distance_to_bond_greater_than(0xfa00, 0x06) + goto_first(0x09) + label(0x06) + jump_to_ai_list(0xfd, 0x0904) + label(0x07) + ai_list_end +}; +u8 ai_8[] = { + debug_log 'm', 'd', 'k', '\0', + if_bond_is_dead(0x26) + label(0x03) + guard_try_setting_chr_preset_to_guard_within_distance(0x6400, 0x26) + ai_sleep + guard_try_setting_chr_preset_to_guard_within_distance(0xc800, 0x2c) + ai_sleep + guard_try_setting_chr_preset_to_guard_within_distance(0x2c01, 0x2c) + jump_to_ai_list(0xfd, 0x0c04) + label(0x2c) + if_guard_in_room_with_chr(0xfc, 0x36) + goto_next(0x07) + label(0x36) + random_generate_seed + if_random_seed_greater_than(0x80, 0x36) + guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x3d) + label(0x36) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0xfc00, 0x3d) + guard_try_facing_target(0x0400, 0xfc00, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0d) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0d) + label(0x2c) + if_guard_in_room_with_chr(0xfc, 0x36) + goto_next(0x07) + label(0x36) + goto_first(0x03) + label(0x3d) + chr_bitfield_set_on(0xfc, 0x80) + local_timer_reset_start + label(0x0b) + ai_sleep + if_chr_dying_or_dead(0xfc, 0x4b) + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0b) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + label(0x2c) + label(0x0c) + if_chr_dying_or_dead(0xfc, 0x4b) + if_chr_does_not_exist(0xfc, 0x4b) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0c) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x80, 0x2c) + goto_first(0x03) + label(0x2c) + label(0x07) + chr_bitfield_set_off(0xfc, 0x80) + jump_to_ai_list(0xfd, 0x0704) + label(0x4b) + jump_to_ai_list(0xfd, 0x0a04) + label(0x26) + jump_to_ai_list(0xfd, 0x0b04) + ai_list_end +}; +u8 ai_9[] = { + chr_bitfield_set_off(0xfc, 0x80) + if_objective_bitfield_is_set_on(0x00020000, 0x36) + if_bond_health_less_than(0x33, 0x07) + label(0x36) + random_generate_seed + ai_sleep + if_random_seed_greater_than(0x3c, 0x06) + random_generate_seed + ai_sleep + if_random_seed_greater_than(0x0a, 0x2c) + text_print_top(0x0848) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x14, 0x2c) + text_print_top(0x0948) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x1e, 0x2c) + text_print_top(0x0a48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x28, 0x2c) + text_print_top(0x0b48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x32, 0x2c) + text_print_top(0x0c48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x3c, 0x2c) + text_print_top(0x0d48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x46, 0x2c) + text_print_top(0x0e48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x50, 0x2c) + text_print_top(0x0f48) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x5a, 0x2c) + text_print_top(0x1048) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x64, 0x2c) + text_print_top(0x1148) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x6e, 0x2c) + text_print_top(0x1248) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x78, 0x2c) + text_print_top(0x1348) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x82, 0x2c) + text_print_top(0x1448) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x8c, 0x2c) + text_print_top(0x1548) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0x96, 0x2c) + text_print_top(0x1648) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xa0, 0x2c) + text_print_top(0x1748) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xaa, 0x2c) + text_print_top(0x1848) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xb4, 0x2c) + text_print_top(0x1948) + goto_next(0x06) + label(0x2c) + if_random_seed_greater_than(0xbe, 0x2c) + text_print_top(0x1a48) + goto_next(0x06) + label(0x2c) + label(0x06) + jump_to_ai_list(0xfd, 0x0704) + label(0x07) + text_print_top(0x1d48) + objective_bitfield_set_on(0x00020000) + goto_first(0x06) + ai_list_end +}; +u8 ai_11[] = { + debug_log 's', 'c', 'a', 'n', '\0', + guard_set_speed_rating(0x00) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x2c) + guard_play_animation(0x9600, 0x0000, 0x5600, 0x00, 0x10) + goto_next(0x08) + label(0x2c) + if_random_seed_greater_than(0x78, 0x2c) + guard_play_animation(0x9700, 0x0000, 0x5600, 0x00, 0x10) + goto_next(0x08) + label(0x2c) + if_random_seed_greater_than(0x8c, 0x2c) + guard_play_animation(0x5300, 0x0000, 0x2200, 0x00, 0x10) + goto_next(0x36) + label(0x2c) + if_random_seed_greater_than(0xa0, 0x2c) + guard_play_animation(0x5400, 0x0000, 0x2400, 0x00, 0x10) + goto_next(0x36) + label(0x2c) + if_random_seed_greater_than(0xb4, 0x2c) + guard_play_animation(0x6300, 0x0000, 0x9500, 0x00, 0x10) + goto_next(0x08) + label(0x2c) + ai_sleep + guard_try_unknown6E(0x02, 0x2c) + guard_try_unknown6E(0x04, 0x2c) + guard_try_unknown6E(0x08, 0x2c) + guard_try_unknown6E(0x01, 0x2c) + guard_set_pad_preset(0x0202) + label(0x2c) + guard_set_speed_rating(0x00) + if_random_seed_greater_than(0xc8, 0x2c) + guard_try_fire_or_aim_at_target_kneel(0x2801, 0x2823, 0x36) + goto_next(0x36) + label(0x2c) + if_random_seed_greater_than(0xdc, 0x2c) + guard_try_fire_or_aim_at_target(0x2801, 0x2823, 0x36) + goto_next(0x36) + label(0x2c) + guard_try_facing_target(0x0800, 0x2823, 0x36) + goto_next(0x36) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x06) + goto_first(0x08) + label(0x36) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x780000, 0x06) + goto_first(0x09) + label(0x06) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_10[] = { + debug_log 'e', 'v', 'a', 'd', '\0', + guard_set_speed_rating(0x14) + chr_bitfield_set_on(0xfc, 0x80) + random_generate_seed + if_random_seed_greater_than(0x80, 0x0a) + guard_play_animation(0x0b00, 0x1400, 0x3c00, 0x02, 0x10) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x08) + label(0x2c) + label(0x0a) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0xfc00, 0x3d) + label(0x3d) + local_timer_reset_start + label(0x0b) + ai_sleep + if_chr_dying_or_dead(0xfc, 0x4b) + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0b) + label(0x2c) + if_guard_distance_to_chr_less_than(0x1900, 0xfc, 0x09) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + label(0x2c) + label(0x0c) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0c) + label(0x2c) + if_chr_dying_or_dead(0xfc, 0x4b) + random_generate_seed + if_random_seed_greater_than(0x80, 0x2c) + goto_first(0x08) + label(0x2c) + label(0x07) + chr_bitfield_set_off(0xfc, 0x80) + jump_to_ai_list(0xfd, 0x0704) + label(0x4b) + jump_to_ai_list(0xfd, 0x0a04) + label(0x09) + ai_sleep + if_guard_has_stopped_moving(0x2c) + if_guard_is_firing_and_using_180_range_flag(0x2c) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + jump_to_ai_list(0xfd, 0x0704) + label(0x2c) + ai_sleep + chr_hit_chr_body_part_with_held_item(0xfd, 0xfc, 0x08) + debug_log 'c', 'h', 'e', 'a', 'p', '\0', + chr_bitfield_set_off(0xfc, 0x80) + label(0x0d) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0d) + label(0x2c) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_12[] = { + label(0x04) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x33) + if_guard_has_stopped_moving(0x3b) + goto_first(0x04) + label(0x3b) + if_guard_sees_bond(0x4e) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x4f) + if_guard_heard_bond_within_last_10_secs(0x4d) + if_guard_shot_from_bond_missed(0x50) + if_guard_see_another_guard_shot(0x4d) + if_guard_see_another_guard_die(0x4d) + if_guard_playing_animation(0x2c) + random_generate_seed + if_random_seed_greater_than(0x01, 0x2c) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0300) + label(0x2c) + goto_first(0x04) + label(0x50) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x4e) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0f04) + label(0x4e) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0e04) + label(0x4f) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + label(0x4d) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x0b00) + label(0x33) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_13[] = { + if_guard_bitfield_is_set_on(0x01, 0x2c) + random_generate_seed + if_random_seed_greater_than(0x20, 0x2c) + guard_points_at_bond + guard_bitfield_set_on(0x01) + jump_to_return_ai_list + label(0x2c) + guard_bitfield_set_on(0x01) + guard_try_throwing_grenade(0x06) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x01, 0x2c) + if_chr_dying_or_dead(0x01, 0x2c) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x64, 0x2c) + if_guard_distance_to_chr_less_than(0x5000, 0x01, 0x2a) + if_guard_bitfield_is_set_on(0x80, 0x2a) + label(0x08) + label(0x2c) + if_guard_distance_to_bond_greater_than(0x9600, 0x4f) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x2c) + guard_try_firing_roll(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x2c) + guard_try_hopping_sideways(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x19, 0x2c) + guard_try_sidestepping(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x32, 0x2c) + guard_try_running_to_side(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x40, 0x2c) + guard_try_firing_walk(0x06) + label(0x2c) + if_random_seed_greater_than(0x7f, 0x2c) + guard_try_firing_run(0x06) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x3e) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x06) + label(0x3e) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x06) + label(0x06) + jump_to_return_ai_list + label(0x2a) + ai_sleep + if_guard_in_room_with_chr(0x01, 0x36) + goto_next(0x07) + label(0x36) + set_return_ai_list(0x0e04) + jump_to_ai_list(0xfd, 0x1c04) + label(0x07) + goto_first(0x08) + label(0x4f) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_14[] = { + guard_looks_around_self + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x06) + goto_first(0x04) + label(0x06) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_15[] = { + guard_bitfield_set_on(0x01) + guard_try_running_to_bond_position(0x04) + jump_to_return_ai_list + label(0x04) + ai_sleep + if_guard_has_stopped_moving(0x3b) + if_guard_sees_bond(0x4e) + goto_first(0x04) + label(0x4e) + if_guard_distance_to_bond_less_than(0x9600, 0x36) + goto_first(0x04) + label(0x36) + jump_to_ai_list(0xfd, 0x0e04) + label(0x3b) + jump_to_return_ai_list + ai_list_end +}; +u8 ai_27[] = { + debug_log 'g', 'e', 't', ' ', 'N', '\0', + guard_set_chr_preset(0x01) + ai_sleep + guard_flags_set_off(0x40000000) + random_generate_seed + if_random_seed_greater_than(0x80, 0x03) + guard_flags_set_on(0x40000000) + label(0x03) + ai_sleep + if_chr_does_not_exist(0xfc, 0x4b) + if_chr_dying_or_dead(0xfc, 0x4b) + if_guard_in_room_with_chr(0xfc, 0x36) + goto_next(0x07) + label(0x36) + random_generate_seed + if_random_seed_greater_than(0x80, 0x36) + guard_try_fire_or_aim_at_target(0x2400, 0xfc00, 0x3d) + label(0x36) + guard_try_fire_or_aim_at_target_kneel(0x2400, 0xfc00, 0x3d) + guard_try_facing_target(0x0400, 0xfc00, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0d) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0d) + label(0x2c) + goto_next(0x07) + label(0x36) + goto_first(0x03) + label(0x3d) + chr_set_chr_preset(0x01, 0xfd) + local_timer_reset_start + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x0b) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0400, 0xfc00, 0x2c) + label(0x2c) + label(0x0c) + if_chr_dying_or_dead(0xfc, 0x4b) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x0c) + label(0x2c) + label(0x07) + label(0x26) + label(0x06) + ai_sleep + guard_flags_set_off(0x40000000) + jump_to_return_ai_list + label(0x4b) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_16[] = { + guard_bitfield_set_on(0x01) + if_guard_distance_to_bond_greater_than(0xfa00, 0x4d) + if_guard_has_not_been_seen(0x4d) + jump_to_ai_list(0xfd, 0x1004) + label(0x4d) + if_chr_does_not_exist(0xf9, 0x4d) + jump_to_ai_list(0xfd, 0x0d04) + label(0x4d) + chr_try_spawning_clone(0xfd, 0x1204, 0x2c) + jump_to_ai_list(0xfd, 0x1004) + label(0x2c) + jump_to_ai_list(0xfd, 0x0d04) + ai_list_end +}; +u8 ai_17[] = { + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_18[] = { + guard_set_armour(0x1400) + label(0x03) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x04) + label(0x04) + ai_sleep + if_guard_shot_from_bond_missed(0x2c) + if_guard_see_another_guard_shot(0x2c) + if_guard_see_another_guard_die(0x2c) + if_guard_sees_bond(0x2c) + if_guard_and_bond_within_line_of_sight(0x2c) + goto_first(0x04) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0x96, 0x2c) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x08) + label(0x2c) + guard_kneel + local_timer_reset_start + label(0x09) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x2c) + if_local_timer_greater_than(0xf00000, 0x06) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x2c) + label(0x2c) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x06) + goto_first(0x08) + label(0x06) + goto_first(0x03) + ai_list_end +}; +u8 ai_32[] = { + label(0x04) + ai_sleep + if_chr_does_not_exist(0x01, 0x2c) + goto_first(0x04) + label(0x2c) + text_print_top(0x1f48) + objective_bitfield_set_on(0x00040000) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_33[] = { + label(0x03) + ai_sleep + if_bond_is_dead(0x4c) + if_bond_in_room_with_pad(0xd401, 0x2c) + goto_first(0x03) + label(0x2c) + objective_bitfield_set_on(0x00800000) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x08) + label(0x2c) + if_chr_does_not_exist(0x01, 0x4b) + if_chr_dying_or_dead(0x01, 0x4b) + if_objective_all_completed(0x2c) + jump_to_ai_list(0xfd, 0x0f00) + label(0x2c) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + door_open_instant(0x1f) + door_open_instant(0x20) + if_bond_has_item_equipped(0x04, 0x2c) + if_bond_has_item_equipped(0x05, 0x2c) + if_bond_has_item_equipped(0x06, 0x2c) + if_bond_has_item_equipped(0x07, 0x2c) + if_bond_has_item_equipped(0x08, 0x2c) + if_bond_has_item_equipped(0x09, 0x2c) + if_bond_has_item_equipped(0x0a, 0x2c) + if_bond_has_item_equipped(0x0b, 0x2c) + if_bond_has_item_equipped(0x0c, 0x2c) + if_bond_has_item_equipped(0x0d, 0x2c) + if_bond_has_item_equipped(0x0e, 0x2c) + if_bond_has_item_equipped(0x0f, 0x2c) + if_bond_has_item_equipped(0x10, 0x2c) + if_bond_has_item_equipped(0x11, 0x2c) + if_bond_has_item_equipped(0x12, 0x2c) + if_bond_has_item_equipped(0x13, 0x2c) + if_bond_has_item_equipped(0x16, 0x2c) + if_bond_has_item_equipped(0x14, 0x2c) + if_bond_has_item_equipped(0x15, 0x2c) + bond_equip_item_cinema(0x04) + label(0x2c) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x1e, 0x0200, 0x0000) + chr_flags_set_off(0x01, 0x00040000) + chr_flags_set_on(0x01, 0x00008004) + chr_try_teleporting_to_pad(0x01, 0x4f02, 0x2c) + label(0x2c) + jump_to_ai_list(0x01, 0x1e04) + chr_flags_set_on(0xf8, 0x00008004) + chr_try_teleporting_to_pad(0xf8, 0x5002, 0x2c) + label(0x2c) + jump_to_ai_list(0xf8, 0x1f04) + ai_sleep + ai_sleep + screen_fade_from_black + music_xtrack_play(0x01, 0x00, 0xff) + jump_to_ai_list(0xfd, 0x0100) + label(0x4b) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x4c) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_30[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_flags_set_on(0xfd, 0x80000000) + guard_play_animation(0x5a00, 0xffff, 0xffff, 0x06, 0x10) + if_bond_has_item_equipped(0x04, 0x2c) + if_bond_has_item_equipped(0x05, 0x2c) + if_bond_has_item_equipped(0x06, 0x2c) + if_bond_has_item_equipped(0x07, 0x2c) + if_bond_has_item_equipped(0x08, 0x2c) + if_bond_has_item_equipped(0x09, 0x2c) + if_bond_has_item_equipped(0x0a, 0x2c) + if_bond_has_item_equipped(0x0b, 0x2c) + if_bond_has_item_equipped(0x0c, 0x2c) + if_bond_has_item_equipped(0x0d, 0x2c) + if_bond_has_item_equipped(0x0e, 0x2c) + if_bond_has_item_equipped(0x0f, 0x2c) + if_bond_has_item_equipped(0x10, 0x2c) + if_bond_has_item_equipped(0x11, 0x2c) + if_bond_has_item_equipped(0x12, 0x2c) + if_bond_has_item_equipped(0x13, 0x2c) + if_bond_has_item_equipped(0x16, 0x2c) + if_bond_has_item_equipped(0x14, 0x2c) + if_bond_has_item_equipped(0x15, 0x2c) + chr_remove_item_in_hand(0xfd, 0x00) + chr_remove_item_in_hand(0xfd, 0x01) + guard_try_spawning_item(0xbf00, 0x04, 0x00000000, 0x2c) + label(0x2c) + label(0x08) + ai_sleep + if_chr_in_room_with_pad(0x01, 0xd401, 0x2c) + goto_first(0x08) + label(0x2c) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x1e0000, 0x2c) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target(0x2800, 0x4f02, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0800, 0x4f02, 0x2c) + label(0x2c) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0x5a0000, 0x2c) + goto_first(0x0a) + label(0x2c) + door_close(0x1f) + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x960000, 0x2c) + goto_first(0x0b) + label(0x2c) + screen_fade_to_black + label(0x0c) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x0c) + label(0x2c) + exit_level + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_29[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_flags_set_on(0xfd, 0x80000000) + guard_play_animation(0x5a00, 0x0700, 0xffff, 0x06, 0x10) + label(0x08) + ai_sleep + if_chr_in_room_with_pad(0x01, 0xd401, 0x2c) + goto_first(0x08) + label(0x2c) + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x0a0000, 0x2c) + goto_first(0x09) + label(0x2c) + guard_try_fire_or_aim_at_target_kneel(0x2800, 0x5002, 0x2c) + label(0x2c) + guard_try_fire_or_aim_at_target_update(0x0800, 0x5002, 0x2c) + label(0x2c) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_37[] = { + local_timer_reset_start + label(0x09) + ai_sleep + if_local_timer_greater_than(0x580200, 0x2c) + goto_first(0x09) + label(0x2c) + object_flags_1_set_off(0x03, 0x00000200) + object_destroy(0x03) + label(0x0a) + ai_sleep + if_local_timer_greater_than(0xd00200, 0x2c) + goto_first(0x0a) + label(0x2c) + object_flags_1_set_off(0x04, 0x00000200) + object_destroy(0x04) + label(0x0b) + ai_sleep + if_local_timer_greater_than(0x0c0300, 0x2c) + goto_first(0x0b) + label(0x2c) + object_flags_1_set_off(0x05, 0x00000200) + object_destroy(0x05) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_34[] = { + label(0x04) + ai_sleep + if_bond_in_room_with_pad(0xc801, 0x2c) + goto_first(0x04) + label(0x2c) + objective_bitfield_set_on(0x00080000) + label(0x37) + local_timer_reset_start + debug_log '!', '\n', '\0', + ai_sleep + if_chr_does_not_exist(0x27, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00100000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1404, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x28, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00200000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1504, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x29, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00400000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1604, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x1d, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00800000, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1704, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x22, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00000100, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1804, 0x00000000, 0x2c) + label(0x36) + label(0x2c) + ai_sleep + if_chr_does_not_exist(0x1e, 0x2c) + goto_next(0x36) + label(0x2c) + if_objective_bitfield_is_set_on(0x00000200, 0x36) + if_bond_damage_and_pickups_disabled(0x36) + chr_try_spawning_at_pad(0x00, 0xff, 0xd301, 0x1904, 0x00000000, 0x2c) + label(0x36) + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x36) + goto_next(0x07) + label(0x36) + if_local_timer_greater_than(0x780000, 0x2c) + if_bond_in_room_with_pad(0xd201, 0x07) + if_bond_in_room_with_pad(0xb901, 0x07) + goto_first(0x06) + label(0x2c) + goto_first(0x37) + label(0x07) + debug_log 's', 'p', 'a', 'w', 'n', ' ', 'o', 'f', 'f', '\0', + objective_bitfield_set_off(0x00080000) + goto_first(0x04) + ai_list_end +}; +u8 ai_19[] = { + guard_set_chr_num(0x27) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4902) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xcb01) + label(0x2c) + debug_log '1', '8', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_20[] = { + guard_set_chr_num(0x28) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4a02) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xca01) + label(0x2c) + debug_log '1', '9', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_21[] = { + guard_set_chr_num(0x29) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4b02) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc701) + label(0x2c) + debug_log '2', '0', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_22[] = { + guard_set_chr_num(0x1d) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4102) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc801) + label(0x2c) + debug_log '1', '0', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_23[] = { + guard_set_chr_num(0x22) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4202) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc901) + label(0x2c) + debug_log '1', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_24[] = { + guard_set_chr_num(0x1e) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x36) + guard_set_pad_preset(0x4702) + goto_next(0x2c) + label(0x36) + guard_set_pad_preset(0xc401) + label(0x2c) + debug_log '2', '0', '\n', '\0', + jump_to_ai_list(0xfd, 0x1a04) + ai_list_end +}; +u8 ai_25[] = { + guard_try_spawning_hat(0xd900, 0x00000000, 0x04) + label(0x04) + guard_try_spawning_item(0xbc00, 0x0d, 0x00000000, 0x04) + label(0x04) + goto_next(0x06) + label(0x06) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x1b04) + ai_list_end +}; +u8 ai_26[] = { + label(0x03) + guard_sprints_to_pad(0x2823) + ai_sleep + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2c) + if_guard_distance_to_bond_less_than(0x6400, 0x07) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x06) + goto_first(0x08) + label(0x2c) + ai_sleep + if_guard_distance_to_bond_less_than(0x6400, 0x07) + if_chr_distance_to_pad_less_than(0xfd, 0x0a00, 0x2823, 0x06) + goto_first(0x03) + label(0x06) + jump_to_ai_list(0xfd, 0x1304) + label(0x07) + set_return_ai_list(0x0d04) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_35[] = { + label(0x08) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x2c) + goto_first(0x08) + label(0x2c) + local_timer_reset_start + objective_bitfield_set_off(0x00100000) + objective_bitfield_set_off(0x00200000) + objective_bitfield_set_off(0x00400000) + objective_bitfield_set_off(0x00800000) + objective_bitfield_set_off(0x00000100) + objective_bitfield_set_off(0x00000200) + label(0x09) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x36) + goto_next(0x06) + label(0x36) + if_local_timer_greater_than(0x302a00, 0x2c) + goto_first(0x09) + label(0x2c) + debug_log 'r', 'a', 'm', 'p', ' ', 'd', 'o', 'w', 'n', ' ', '1', '\0', + objective_bitfield_set_on(0x00800000) + objective_bitfield_set_on(0x00000100) + objective_bitfield_set_on(0x00000200) + label(0x0a) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x36) + goto_next(0x06) + label(0x36) + if_local_timer_greater_than(0xa08c00, 0x2c) + goto_first(0x0a) + label(0x2c) + debug_log 'r', 'a', 'm', 'p', ' ', 'd', 'o', 'w', 'n', ' ', '2', '\0', + objective_bitfield_set_on(0x00100000) + objective_bitfield_set_on(0x00200000) + objective_bitfield_set_on(0x00400000) + label(0x06) + objective_bitfield_set_off(0x00080000) + goto_first(0x08) + ai_list_end +}; +u8 ai_28[] = { + guard_play_animation(0x6700, 0x0000, 0x0100, 0x04, 0x10) + local_timer_reset_start + label(0x08) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x08) + label(0x2c) + guard_play_animation(0x6700, 0x0100, 0xffff, 0x04, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_36[] = { + label(0x08) + ai_sleep + if_camera_is_in_bond_swirl(0x2c) + goto_first(0x08) + label(0x2c) + jump_to_ai_list(0xf8, 0x1d04) + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/u/UsetuplenZ.c b/assets/obseg/setup/u/UsetuplenZ.c index 0472357a..cf548a26 100644 --- a/assets/obseg/setup/u/UsetuplenZ.c +++ b/assets/obseg/setup/u/UsetuplenZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -742,15 +743,122 @@ PathRecord patrolpaths[] = { }; -u32 ai_not_used_0[] = { 0x04000000 }; +u8 ai_not_used_0[] = { + ai_list_end +}; -u32 ai_1[] = { 0xd9fd002d, 0x2c022c0a, 0x00b6ffff, 0xffff0600, 0x05fd0001, 0x04000000 }; -u32 ai_3[] = { 0x02030a00, 0xb6009e00, 0xfa442005, 0xfd000104 }; -u32 ai_4[] = { 0x02030a00, 0xb60103ff, 0xff442005, 0xfd000104 }; -u32 ai_2[] = { 0xf20009d9, 0xfd002c2c, 0x0209ad62, 0x320a00d9, 0xfd002f2c, 0x022c0a00, 0xb5ffffff, 0xff060002, 0x08032f2c, 0x0108022c, 0x3335dc2c, 0x0a00b500, 0x9e00fa44, 0x20050004, 0x03010802, 0x2c0a00b5, 0x0103ffff, 0x44200500, 0x04040108, 0x04000000 }; -u32 ai_5[] = { 0x03d701ed, 0x030303ee, 0x012c0064, 0x0012002e, 0xffba1c71, 0xa0f80001, 0x0000a000, 0x00010000, 0xa0f80002, 0x0000a000, 0x00020000, 0x05f80402, 0x05000401, 0x0303db02, 0x0b03dc2c, 0x010b022c, 0xae020f03, 0xb400001e, 0x2c010f02, 0x2cc35008, 0xae020c03, 0xb40000b4, 0x2c010c02, 0x2cc35009, 0xae020d03, 0xb40000b4, 0x2c010d02, 0x2cc3500a, 0xae020e03, 0xb400012c, 0x2c010e02, 0x2cef0208, 0x03f02c01, 0x08022cda, 0x020903dc, 0x2c010902, 0x2c020a03, 0xd2010a04 }; +u8 ai_1[] = { + chr_try_teleporting_to_pad(0xfd, 0x2d00, 0x2c) + label(0x2c) + guard_play_animation(0xb600, 0xffff, 0xffff, 0x06, 0x00) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_3[] = { + label(0x03) + guard_play_animation(0xb600, 0x9e00, 0xfa00, 0x44, 0x20) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_4[] = { + label(0x03) + guard_play_animation(0xb600, 0x0301, 0xffff, 0x44, 0x20) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_2[] = { + if_folder_actor_is_equal(0x00, 0x09) + chr_try_teleporting_to_pad(0xfd, 0x2c00, 0x2c) + label(0x09) + debug_log 'b', '2', '\n', '\0', + chr_try_teleporting_to_pad(0xfd, 0x2f00, 0x2c) + label(0x2c) + guard_play_animation(0xb500, 0xffff, 0xffff, 0x06, 0x00) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x2c) + goto_first(0x08) + label(0x2c) + random_generate_seed + if_random_seed_greater_than(0xdc, 0x2c) + guard_play_animation(0xb500, 0x9e00, 0xfa00, 0x44, 0x20) + jump_to_ai_list(0x00, 0x0304) + goto_first(0x08) + label(0x2c) + guard_play_animation(0xb500, 0x0301, 0xffff, 0x44, 0x20) + jump_to_ai_list(0x00, 0x0404) + goto_first(0x08) + ai_list_end +}; +u8 ai_5[] = { + ai_sleep + hud_hide_and_lock_controls_and_pause_mission_time(0x01) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_orbit_pad(0x2c01, 0x6400, 0x1200, 0x2e00, 0xbaff, 0x711c) + chr_flags_set_on(0xf8, 0x00000100) + chr_flags_set_on(0x00, 0x00000100) + chr_flags_set_on(0xf8, 0x00000200) + chr_flags_set_on(0x00, 0x00000200) + jump_to_ai_list(0xf8, 0x0204) + jump_to_ai_list(0x00, 0x0104) + ai_sleep + ai_sleep + screen_fade_from_black + label(0x0b) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x0b) + label(0x2c) + local_timer_reset_start + label(0x0f) + ai_sleep + if_local_timer_greater_than(0x1e0000, 0x2c) + goto_first(0x0f) + label(0x2c) + text_print_top(0x0850) + local_timer_reset_start + label(0x0c) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x2c) + goto_first(0x0c) + label(0x2c) + text_print_top(0x0950) + local_timer_reset_start + label(0x0d) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x2c) + goto_first(0x0d) + label(0x2c) + text_print_top(0x0a50) + local_timer_reset_start + label(0x0e) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x2c) + goto_first(0x0e) + label(0x2c) + credits_roll + label(0x08) + ai_sleep + if_credits_has_completed(0x2c) + goto_first(0x08) + label(0x2c) + screen_fade_to_black + label(0x09) + ai_sleep + if_screen_fade_completed(0x2c) + goto_first(0x09) + label(0x2c) + label(0x0a) + ai_sleep + exit_level + goto_first(0x0a) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/u/UsetupsiloZ.c b/assets/obseg/setup/u/UsetupsiloZ.c index badb715a..dd7c2931 100644 --- a/assets/obseg/setup/u/UsetupsiloZ.c +++ b/assets/obseg/setup/u/UsetupsiloZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1473,38 +1474,689 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x200005fd, 0x00070400 }; -u32 ai_1[] = { 0x200105fd, 0x00070400 }; -u32 ai_2[] = { 0x200205fd, 0x00070400 }; -u32 ai_3[] = { 0x200305fd, 0x00070400 }; -u32 ai_4[] = { 0x200405fd, 0x00070400 }; -u32 ai_5[] = { 0x200505fd, 0x00070400 }; -u32 ai_6[] = { 0x200605fd, 0x00070400 }; -u32 ai_7[] = { 0x200705fd, 0x00070400 }; -u32 ai_8[] = { 0x200805fd, 0x00070400 }; -u32 ai_9[] = { 0x200905fd, 0x00070400 }; -u32 ai_10[] = { 0x200a05fd, 0x00070400 }; -u32 ai_11[] = { 0x200b05fd, 0x00070400 }; -u32 ai_12[] = { 0x200c05fd, 0x00070400 }; -u32 ai_13[] = { 0x200d05fd, 0x00070400 }; -u32 ai_14[] = { 0x200e05fd, 0x00070400 }; -u32 ai_15[] = { 0x02000346, 0x1f2f3c01, 0x00023c46, 0x1f3a1f3b, 0x20321703, 0x39153e15, 0x3f153c16, 0x023d0396, 0x80132f03, 0x01000213, 0x42230100, 0x02230604, 0x1005fd00, 0x04020379, 0x00200100, 0x02040100, 0x02153335, 0x40180100, 0x02181016, 0x01000216, 0x47401748, 0xc0174b00, 0x0a170100, 0x02173335, 0xc81b451b, 0x0100021b, 0x4b00641f, 0x79002006, 0x041005fd, 0x0411021f, 0x06041005, 0xfd041202, 0x20333540, 0x24060410, 0x05fd0413, 0x0224ad49, 0x66206f6e, 0x6c792049, 0x20686164, 0x20612067, 0x756e2121, 0x210a001a, 0x25010002, 0x25032f01, 0x01250201, 0x01000400 }; -u32 ai_16[] = { 0x0200032f, 0x1c010002, 0x1c333596, 0x1d333500, 0x1e000102, 0x1d0e0102, 0x1e100102, 0x01032f03, 0x01010203, 0x3c160702, 0x16476e17, 0x4891174b, 0x000a1707, 0x0217011c, 0x04000000 }; -u32 ai_17[] = { 0x02000333, 0x35fd2046, 0x20001f02, 0x1f45214c, 0x00c81a3c, 0x21001a02, 0x21790102, 0x21010002, 0x1a002002, 0x20060412, 0x05fd0413, 0x02010702, 0x0205fd00, 0x10040000 }; -u32 ai_18[] = { 0x61fd0200, 0x1c00d102, 0x03032f01, 0x4dfd0032, 0x00d10146, 0x1f010302, 0x1fad210a, 0x00210223, 0x033335dc, 0x233b232f, 0x23012302, 0x23ad496d, 0x206f6666, 0x210a0001, 0x0002014d, 0xfd003200, 0xd12d0702, 0x2d3c0422, 0x07020403, 0x07040000 }; -u32 ai_19[] = { 0x9d000008, 0x009d0000, 0x02009001, 0x2c8f00c8, 0x91509350, 0x92500234, 0x03083c23, 0x01340223, 0xc3880aae, 0x0237034b, 0x0032387c, 0xfdc838b4, 0x00070838, 0x2f230137, 0x02233335, 0x80231400, 0x0100003a, 0x02231500, 0x0100003a, 0x0137023a, 0x01370238, 0x05fd0415, 0x04000000 }; -u32 ai_20[] = { 0x9d000000, 0x107cfdc8, 0x0302381f, 0x00c70239, 0x032f079c, 0x00001000, 0x1354fd00, 0xba040213, 0x9c000020, 0x001354fd, 0x00be0502, 0x134dfd00, 0x3200c701, 0x01390207, 0x4dfd0032, 0x00c70101, 0x38020122, 0x05fd0001, 0x02036007, 0x01380204, 0x670f9a00, 0x00100001, 0x38020567, 0x109a0000, 0x20000138, 0x04000000 }; -u32 ai_26[] = { 0x02349736, 0x80973780, 0x97388097, 0x3980973b, 0x80973e80, 0x973f8002, 0x37039c00, 0x00010023, 0x5b02239a, 0x00000100, 0x02239c00, 0x00020023, 0x5b03239a, 0x00000200, 0x02239c00, 0x00040023, 0x5b04239a, 0x00000400, 0x02239c00, 0x00080023, 0x5b05239a, 0x00000800, 0x02230137, 0x04000000 }; -u32 ai_27[] = { 0x020003cf, 0x23010002, 0x23ae0203, 0x03700113, 0xb300012c, 0x1370023f, 0x70044002, 0x1357223e, 0x0103023e, 0xc38809b7, 0x01680034, 0x023fc388, 0x46b701c2, 0x00340240, 0xc38846b7, 0x01fe0034, 0x0234b9b5, 0x020703bb, 0x00192301, 0x070223f4, 0x00ffff02, 0x0403bb00, 0x0f230104, 0x0223c388, 0x0b020503, 0xbb000023, 0x01050223, 0xf6b6b802, 0x06030106, 0x04000000 }; -u32 ai_28[] = { 0x02030359, 0x01230103, 0x0223660a, 0x02040359, 0x05230104, 0x0223670a, 0x01030400 }; -u32 ai_21[] = { 0xd9fd00e8, 0x230223ae, 0x020303b4, 0x00003c23, 0x01030223, 0x0a006500, 0x08006d04, 0x10020403, 0xb4000070, 0x23010402, 0x23e0fd00, 0xe0fd0102, 0x0503b400, 0x00ea2301, 0x05022367, 0x0d020603, 0x680d0123, 0x01060223, 0xda020703, 0xdc230107, 0x02236d00, 0x23001302, 0x23d51200, 0x020000db, 0x020803dc, 0x23010802, 0x23b70002, 0xb5b9ae02, 0x0903bb00, 0x00230109, 0x0223b6a4, 0x11000200, 0x005f11ae, 0x020a03b4, 0x0000b423, 0x010a0223, 0xda020b03, 0xdc23010b, 0x02230213, 0xd2020103, 0x01010400 }; -u32 ai_22[] = { 0x0a006200, 0x00000104, 0x10ae0203, 0x03b40000, 0x3c230103, 0x02230a00, 0x620001ff, 0xff041002, 0x01030101, 0x04000000 }; -u32 ai_30[] = { 0x020303cf, 0x23010302, 0x2305f804, 0x17020103, 0x01010400 }; -u32 ai_29[] = { 0x023403eb, 0x3b5500e8, 0x23013402, 0x239a0000, 0x8000ecd7, 0x04b6b8da, 0x020303dc, 0x23010302, 0x23f12305, 0xfd000f02, 0x23ddeadf, 0x0ddf0e59, 0x02235903, 0x23591a23, 0x591b2359, 0x1c23591d, 0x23591823, 0x59192359, 0x04235905, 0x23590623, 0x59072359, 0x08235909, 0x23590a23, 0x590b2359, 0x0c23590d, 0x23590e23, 0x590f2359, 0x10235911, 0x23591223, 0x59132359, 0x16235914, 0x23591523, 0xe4050223, 0xed030303, 0xd50c0002, 0x000005f8, 0x0416db02, 0x0403dc23, 0x01040223, 0x05fd0001, 0x023b05fd, 0x00010400 }; -u32 ai_23[] = { 0x911e9314, 0x8d330234, 0x14002100, 0x00000200, 0x0346233a, 0x233b2332, 0x233c2301, 0x00022333, 0x35c83a35, 0x64231600, 0x01000003, 0x023a1a03, 0x022309ae, 0x02040333, 0x35fa23b4, 0x0000b423, 0x01040223, 0x08030303, 0x03022314, 0x00210000, 0x23022316, 0x00010000, 0x23022302, 0x03032f01, 0x01030201, 0x01340400 }; -u32 ai_24[] = { 0x020303d6, 0xfc7c0400, 0x23020401, 0x03022305, 0xfd000204 }; -u32 ai_25[] = { 0x020303d6, 0x00000400, 0x23020401, 0x03022305, 0xfd000204 }; -u32 ai_31[] = { 0x023403a0, 0x36001000, 0x00a03700, 0x100000a0, 0x38001000, 0x00a03900, 0x100000a0, 0x3a001000, 0x0003a03b, 0x00100000, 0xa03c0010, 0x0000a03d, 0x00100000, 0xa03e0010, 0x0000a03f, 0x00100000, 0x03023703, 0xf7022301, 0x370223c3, 0x880c9a00, 0x00400005, 0xfd000104 }; +u8 ai_0[] = { + guard_start_patrol(0x00) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_1[] = { + guard_start_patrol(0x01) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_2[] = { + guard_start_patrol(0x02) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_3[] = { + guard_start_patrol(0x03) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_4[] = { + guard_start_patrol(0x04) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_5[] = { + guard_start_patrol(0x05) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_6[] = { + guard_start_patrol(0x06) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_7[] = { + guard_start_patrol(0x07) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_8[] = { + guard_start_patrol(0x08) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_9[] = { + guard_start_patrol(0x09) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_10[] = { + guard_start_patrol(0x0a) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_11[] = { + guard_start_patrol(0x0b) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_12[] = { + guard_start_patrol(0x0c) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_13[] = { + guard_start_patrol(0x0d) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_14[] = { + guard_start_patrol(0x0e) + jump_to_ai_list(0xfd, 0x0700) + ai_list_end +}; +u8 ai_15[] = { + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x1f) + if_guard_has_stopped_moving(0x3c) + goto_first(0x00) + label(0x3c) + if_guard_shot_from_bond_missed(0x1f) + if_guard_see_another_guard_shot(0x1f) + if_guard_see_another_guard_die(0x20) + if_guard_sees_bond(0x17) + ai_sleep + if_guard_heard_bond(0x15) + if_guard_was_shot_or_seen_bond_within_last_10_secs(0x15) + if_guard_heard_bond_within_last_10_secs(0x15) + if_guard_and_bond_within_line_of_sight(0x16) + label(0x3d) + ai_sleep + if_guard_bitfield_is_set_on(0x80, 0x13) + if_guard_has_stopped_moving(0x03) + goto_first(0x00) + label(0x13) + if_guard_is_on_screen(0x23) + goto_first(0x00) + label(0x23) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x0400) + label(0x03) + if_guard_hits_greater_than(0x00, 0x20) + goto_first(0x00) + label(0x04) + goto_first(0x00) + label(0x15) + random_generate_seed + if_random_seed_greater_than(0x40, 0x18) + goto_first(0x00) + label(0x18) + guard_try_running_to_side(0x16) + goto_first(0x00) + label(0x16) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x17) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x17) + if_guard_distance_to_bond_less_than(0x0a00, 0x17) + goto_first(0x00) + label(0x17) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x1b) + if_guard_is_targeted_by_bond(0x1b) + goto_first(0x00) + label(0x1b) + if_guard_distance_to_bond_less_than(0x6400, 0x1f) + if_guard_hits_greater_than(0x00, 0x20) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x1104) + label(0x1f) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x1204) + label(0x20) + random_generate_seed + if_random_seed_greater_than(0x40, 0x24) + set_return_ai_list(0x1004) + jump_to_ai_list(0xfd, 0x1304) + label(0x24) + debug_log 'I', 'f', ' ', 'o', 'n', 'l', 'y', ' ', 'I', ' ', 'h', 'a', 'd', ' ', 'a', ' ', 'g', 'u', 'n', '!', '!', '!', '\n', '\0', + guard_try_throwing_grenade(0x25) + goto_first(0x00) + label(0x25) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x25) + label(0x01) + goto_first(0x00) + ai_list_end +}; +u8 ai_16[] = { + label(0x00) + ai_sleep + if_guard_has_stopped_moving(0x1c) + goto_first(0x00) + label(0x1c) + random_generate_seed + if_random_seed_greater_than(0x96, 0x1d) + random_generate_seed + if_random_seed_greater_than(0x00, 0x1e) + goto_next(0x01) + label(0x1d) + guard_try_sidestepping(0x01) + label(0x1e) + guard_try_running_to_side(0x01) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x03) + goto_first(0x01) + label(0x03) + if_guard_and_bond_within_line_of_sight(0x16) + jump_to_return_ai_list + label(0x16) + if_guard_counter_clockwise_direction_to_bond_less_than(0x6e, 0x17) + if_guard_counter_clockwise_direction_to_bond_greater_than(0x91, 0x17) + if_guard_distance_to_bond_less_than(0x0a00, 0x17) + jump_to_return_ai_list + label(0x17) + goto_first(0x1c) + ai_list_end +}; +u8 ai_17[] = { + label(0x00) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfd, 0x20) + if_guard_shot_from_bond_missed(0x20) + goto_next(0x1f) + label(0x1f) + if_guard_is_targeted_by_bond(0x21) + if_guard_distance_to_bond_greater_than(0xc800, 0x1a) + if_guard_and_bond_within_line_of_sight(0x21) + goto_next(0x1a) + label(0x21) + if_guard_hits_greater_than(0x01, 0x02) + guard_surrenders + goto_first(0x00) + label(0x1a) + goto_next(0x20) + label(0x20) + set_return_ai_list(0x1204) + jump_to_ai_list(0xfd, 0x1304) + label(0x01) + jump_to_return_ai_list + label(0x02) + jump_to_ai_list(0xfd, 0x1000) + ai_list_end +}; +u8 ai_18[] = { + chr_drop_all_concealed_items(0xfd) + label(0x00) + guard_runs_to_pad(0xd100) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x01) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x01) + if_guard_shot_from_bond_missed(0x1f) + goto_first(0x03) + label(0x1f) + debug_log '!', '\n', '\0', + guard_surrenders + label(0x23) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xdc, 0x23) + if_guard_see_another_guard_die(0x23) + if_guard_has_stopped_moving(0x23) + goto_first(0x23) + label(0x23) + debug_log 'I', 'm', ' ', 'o', 'f', 'f', '!', '\n', '\0', + goto_first(0x00) + label(0x01) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xd100, 0x2d) + jump_to_return_ai_list + label(0x2d) + if_guard_and_bond_within_line_of_sight(0x04) + guard_remove_fade + jump_to_return_ai_list + label(0x04) + ai_sleep + jump_to_return_ai_list + ai_list_end +}; +u8 ai_19[] = { + guard_flags_set_on(0x00080000) + guard_flags_set_on(0x00020000) + guard_set_armour(0x2c01) + guard_set_health_total(0xc800) + guard_set_speed_rating(0x50) + guard_set_accuracy_rating(0x50) + guard_set_argh_rating(0x50) + label(0x34) + ai_sleep + guard_animation_stop + if_guard_and_bond_within_line_of_sight(0x23) + goto_first(0x34) + label(0x23) + text_print_top(0x0a88) + local_timer_reset_start + label(0x37) + ai_sleep + if_guard_distance_to_bond_less_than(0x3200, 0x38) + if_chr_health_less_than(0xfd, 0xc8, 0x38) + if_local_timer_greater_than(0x080700, 0x38) + if_guard_has_stopped_moving(0x23) + goto_first(0x37) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x80, 0x23) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x3a) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x3a) + goto_first(0x37) + label(0x3a) + goto_first(0x37) + label(0x38) + jump_to_ai_list(0xfd, 0x1504) + ai_list_end +}; +u8 ai_20[] = { + guard_flags_set_on(0x10000000) + if_chr_health_less_than(0xfd, 0xc8, 0x03) + label(0x38) + guard_sprints_to_pad(0xc700) + label(0x39) + ai_sleep + if_guard_has_stopped_moving(0x07) + if_objective_bitfield_is_set_on(0x00100000, 0x13) + if_chr_in_room_with_pad(0xfd, 0xba00, 0x04) + label(0x13) + if_objective_bitfield_is_set_on(0x00200000, 0x13) + if_chr_in_room_with_pad(0xfd, 0xbe00, 0x05) + label(0x13) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01) + goto_first(0x39) + label(0x07) + if_chr_distance_to_pad_less_than(0xfd, 0x3200, 0xc700, 0x01) + goto_first(0x38) + label(0x01) + guard_remove_fade + jump_to_ai_list(0xfd, 0x0100) + label(0x03) + object_drop_from_chr(0x07) + goto_first(0x38) + label(0x04) + door_close(0x0f) + objective_bitfield_set_on(0x00100000) + goto_first(0x38) + label(0x05) + door_close(0x10) + objective_bitfield_set_on(0x00200000) + goto_first(0x38) + ai_list_end +}; +u8 ai_26[] = { + label(0x34) + chr_bitfield_set_on(0x36, 0x80) + chr_bitfield_set_on(0x37, 0x80) + chr_bitfield_set_on(0x38, 0x80) + chr_bitfield_set_on(0x39, 0x80) + chr_bitfield_set_on(0x3b, 0x80) + chr_bitfield_set_on(0x3e, 0x80) + chr_bitfield_set_on(0x3f, 0x80) + label(0x37) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x23) + if_object_not_destroyed(0x02, 0x23) + objective_bitfield_set_on(0x00010000) + label(0x23) + if_objective_bitfield_is_set_on(0x00020000, 0x23) + if_object_not_destroyed(0x03, 0x23) + objective_bitfield_set_on(0x00020000) + label(0x23) + if_objective_bitfield_is_set_on(0x00040000, 0x23) + if_object_not_destroyed(0x04, 0x23) + objective_bitfield_set_on(0x00040000) + label(0x23) + if_objective_bitfield_is_set_on(0x00080000, 0x23) + if_object_not_destroyed(0x05, 0x23) + objective_bitfield_set_on(0x00080000) + label(0x23) + goto_first(0x37) + ai_list_end +}; +u8 ai_27[] = { + label(0x00) + ai_sleep + if_camera_is_in_bond_swirl(0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_game_difficulty_less_than(0x01, 0x13) + if_local_timer_less_than(0x2c0100, 0x13) + if_game_difficulty_less_than(0x02, 0x3f) + if_game_difficulty_less_than(0x04, 0x40) + label(0x13) + if_item_is_stationary_within_level(0x22, 0x3e) + goto_first(0x03) + label(0x3e) + text_print_top(0x0988) + hud_countdown_set(0x6801) + goto_next(0x34) + label(0x3f) + text_print_top(0x4688) + hud_countdown_set(0xc201) + goto_next(0x34) + label(0x40) + text_print_top(0x4688) + hud_countdown_set(0xfe01) + goto_next(0x34) + label(0x34) + hud_countdown_start + hud_countdown_show + label(0x07) + ai_sleep + if_hud_countdown_less_than(0x1900, 0x23) + goto_first(0x07) + label(0x23) + music_xtrack_play(0x00, 0xff, 0xff) + label(0x04) + ai_sleep + if_hud_countdown_less_than(0x0f00, 0x23) + goto_first(0x04) + label(0x23) + text_print_top(0x0b88) + label(0x05) + ai_sleep + if_hud_countdown_less_than(0x0000, 0x23) + goto_first(0x05) + label(0x23) + trigger_explosions_around_bond + hud_countdown_hide + hud_countdown_stop + label(0x06) + ai_sleep + goto_first(0x06) + ai_list_end +}; +u8 ai_28[] = { + label(0x03) + ai_sleep + if_bond_has_item_equipped(0x01, 0x23) + goto_first(0x03) + label(0x23) + door_open(0x0a) + label(0x04) + ai_sleep + if_bond_has_item_equipped(0x05, 0x23) + goto_first(0x04) + label(0x23) + door_close(0x0a) + goto_first(0x03) + ai_list_end +}; +u8 ai_21[] = { + chr_try_teleporting_to_pad(0xfd, 0xe800, 0x23) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x23) + goto_first(0x03) + label(0x23) + guard_play_animation(0x6500, 0x0800, 0x6d00, 0x04, 0x10) + label(0x04) + ai_sleep + if_local_timer_greater_than(0x700000, 0x23) + goto_first(0x04) + label(0x23) + chr_remove_item_in_hand(0xfd, 0x00) + chr_remove_item_in_hand(0xfd, 0x01) + label(0x05) + ai_sleep + if_local_timer_greater_than(0xea0000, 0x23) + goto_first(0x05) + label(0x23) + door_close(0x0d) + label(0x06) + ai_sleep + if_door_state_equal(0x0d, 0x01, 0x23) + goto_first(0x06) + label(0x23) + screen_fade_to_black + label(0x07) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x07) + label(0x23) + if_objective_num_complete(0x00, 0x23) + goto_next(0x13) + label(0x23) + camera_switch(0x12, 0x0200, 0x0000) + screen_fade_from_black + label(0x08) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x08) + label(0x23) + hud_countdown_set(0x0200) + hud_countdown_show + hud_countdown_start + local_timer_reset_start + label(0x09) + ai_sleep + if_hud_countdown_less_than(0x0000, 0x23) + goto_first(0x09) + label(0x23) + hud_countdown_hide + object_flags_1_set_off(0x11, 0x00000200) + object_destroy(0x11) + local_timer_reset_start + label(0x0a) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x23) + goto_first(0x0a) + label(0x23) + screen_fade_to_black + label(0x0b) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x0b) + label(0x23) + label(0x13) + exit_level + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_22[] = { + guard_play_animation(0x6200, 0x0000, 0x0100, 0x04, 0x10) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x23) + goto_first(0x03) + label(0x23) + guard_play_animation(0x6200, 0x0100, 0xffff, 0x04, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_30[] = { + label(0x03) + ai_sleep + if_camera_is_in_bond_swirl(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xf8, 0x1704) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_29[] = { + label(0x34) + ai_sleep + if_bond_is_dead(0x3b) + if_bond_in_room_with_pad(0xe800, 0x23) + goto_first(0x34) + label(0x23) + objective_bitfield_set_on(0x00800000) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x04) + hud_countdown_hide + hud_countdown_stop + screen_fade_to_black + label(0x03) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x03) + label(0x23) + if_objective_all_completed(0x23) + jump_to_ai_list(0xfd, 0x0f00) + label(0x23) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + door_open_instant(0x0d) + door_open_instant(0x0e) + if_bond_has_item_equipped(0x02, 0x23) + if_bond_has_item_equipped(0x03, 0x23) + if_bond_has_item_equipped(0x1a, 0x23) + if_bond_has_item_equipped(0x1b, 0x23) + if_bond_has_item_equipped(0x1c, 0x23) + if_bond_has_item_equipped(0x1d, 0x23) + if_bond_has_item_equipped(0x18, 0x23) + if_bond_has_item_equipped(0x19, 0x23) + if_bond_has_item_equipped(0x04, 0x23) + if_bond_has_item_equipped(0x05, 0x23) + if_bond_has_item_equipped(0x06, 0x23) + if_bond_has_item_equipped(0x07, 0x23) + if_bond_has_item_equipped(0x08, 0x23) + if_bond_has_item_equipped(0x09, 0x23) + if_bond_has_item_equipped(0x0a, 0x23) + if_bond_has_item_equipped(0x0b, 0x23) + if_bond_has_item_equipped(0x0c, 0x23) + if_bond_has_item_equipped(0x0d, 0x23) + if_bond_has_item_equipped(0x0e, 0x23) + if_bond_has_item_equipped(0x0f, 0x23) + if_bond_has_item_equipped(0x10, 0x23) + if_bond_has_item_equipped(0x11, 0x23) + if_bond_has_item_equipped(0x12, 0x23) + if_bond_has_item_equipped(0x13, 0x23) + if_bond_has_item_equipped(0x16, 0x23) + if_bond_has_item_equipped(0x14, 0x23) + if_bond_has_item_equipped(0x15, 0x23) + bond_equip_item_cinema(0x05) + label(0x23) + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x0c, 0x0200, 0x0000) + jump_to_ai_list(0xf8, 0x1604) + screen_fade_from_black + label(0x04) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x04) + label(0x23) + jump_to_ai_list(0xfd, 0x0100) + label(0x3b) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_23[] = { + guard_set_speed_rating(0x1e) + guard_set_accuracy_rating(0x14) + guard_set_grenade_probability(0x33) + label(0x34) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_guard_shot_from_bond_missed(0x23) + if_guard_see_another_guard_shot(0x23) + if_guard_see_another_guard_die(0x23) + if_guard_sees_bond(0x23) + if_guard_and_bond_within_line_of_sight(0x23) + goto_first(0x00) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x3a) + if_random_seed_greater_than(0x64, 0x23) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03) + label(0x3a) + guard_try_throwing_grenade(0x03) + label(0x23) + guard_kneel + local_timer_reset_start + label(0x04) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x23) + if_local_timer_greater_than(0xb40000, 0x23) + goto_first(0x04) + label(0x23) + guard_animation_stop + ai_sleep + ai_sleep + ai_sleep + ai_sleep + label(0x23) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23) + label(0x23) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x03) + label(0x01) + goto_first(0x34) + ai_list_end +}; +u8 ai_24[] = { + label(0x03) + ai_sleep + if_bond_y_pos_less_than(0x7cfc, 0x04) + goto_next(0x23) + label(0x04) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_25[] = { + label(0x03) + ai_sleep + if_bond_y_pos_less_than(0x0000, 0x04) + goto_next(0x23) + label(0x04) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x0200) + ai_list_end +}; +u8 ai_31[] = { + label(0x34) + ai_sleep + chr_flags_set_on(0x36, 0x00001000) + chr_flags_set_on(0x37, 0x00001000) + chr_flags_set_on(0x38, 0x00001000) + chr_flags_set_on(0x39, 0x00001000) + chr_flags_set_on(0x3a, 0x00001000) + ai_sleep + chr_flags_set_on(0x3b, 0x00001000) + chr_flags_set_on(0x3c, 0x00001000) + chr_flags_set_on(0x3d, 0x00001000) + chr_flags_set_on(0x3e, 0x00001000) + chr_flags_set_on(0x3f, 0x00001000) + ai_sleep + label(0x37) + ai_sleep + if_killed_civilians_greater_than(0x02, 0x23) + goto_first(0x37) + label(0x23) + text_print_top(0x0c88) + objective_bitfield_set_on(0x00400000) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/u/UsetupstatueZ.c b/assets/obseg/setup/u/UsetupstatueZ.c index 7360729f..1f4b933f 100644 --- a/assets/obseg/setup/u/UsetupstatueZ.c +++ b/assets/obseg/setup/u/UsetupstatueZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1092,51 +1093,1470 @@ PathRecord patrolpaths[] = { }; -u32 ai_17[] = { 0x9d000008, 0x00020003, 0x3c2330fd, 0x06010002, 0x239a0008, 0x00001700, 0x01000023, 0x02230204, 0xaead6865, 0x6c6c6f0a, 0x00023303, 0x30fd064c, 0x00c80f4c, 0x00500e95, 0x01b1b400, 0x070812b4, 0x0005dc0d, 0xb40004b0, 0x0cb40003, 0x840bb400, 0x02580ab4, 0x00012c09, 0x01330209, 0xb4000168, 0x23c38c09, 0x02230133, 0x020ab400, 0x029423c3, 0x8c0a0223, 0x0133020b, 0xb40003c0, 0x23c38c0b, 0x02230133, 0x020cb400, 0x04ec23c3, 0x8c0c0223, 0x0133020d, 0xb4000618, 0x23c38c0d, 0x02230133, 0x020e9601, 0x13c38c0e, 0x0213b094, 0x01013302, 0x0fc38c0f, 0x9a001000, 0x009a0020, 0x00000001, 0x02120300, 0x27011202, 0x279a0000, 0x01009a00, 0x1000001e, 0x00160220, 0x034c012c, 0x012f234d, 0xfd000f00, 0x16230120, 0x02234efd, 0x000f0016, 0x134c012c, 0x01021301, 0x27020103, 0x22010102, 0x06c38c30, 0x9a002000, 0x00020703, 0x01070400 }; -u32 ai_36[] = { 0x0238039c, 0x00000100, 0x00013802, 0x00035200, 0x50003b23, 0x01000223, 0xf323bd08, 0xff003604, 0x13000000, 0x0023ad54, 0x20666169, 0x6c0a0001, 0x0002239a, 0x00040000, 0xad542069, 0x6e69740a, 0x0003f323, 0xbd04ff00, 0x36040200, 0x00000123, 0x0223f323, 0xbd04ff00, 0x36040300, 0x00000123, 0x0223f323, 0xbd04ff00, 0x36040400, 0x00000123, 0x0223f323, 0xbd04ff00, 0x36040500, 0x00000123, 0x02230203, 0x0353008c, 0x003b059c, 0x00004000, 0x04010302, 0x04035300, 0x8c003b05, 0x59011300, 0x05021301, 0x0402059a, 0x00002000, 0x02010301, 0x01040000 }; -u32 ai_37[] = { 0x0200039c, 0x00008000, 0x23010002, 0x23ae0203, 0x03b40002, 0x58230103, 0x0223c38c, 0x1f650000, 0x189a8000, 0x0000f323, 0xbd10ff00, 0x06041600, 0x00000023, 0x02239a08, 0x000000b7, 0x00b4b9b5, 0x0205039c, 0x00000200, 0x1352012c, 0x00180802, 0x139c1000, 0x00001352, 0x00320018, 0x070213bb, 0x00002301, 0x0502239a, 0x40000000, 0x0303039c, 0x20000000, 0x13180008, 0x060213c3, 0x8c209a00, 0x800000c9, 0x00b6b802, 0x06030106, 0x0207039a, 0x10000000, 0xc38c32b7, 0x000f0105, 0x0208039a, 0x00000200, 0x01050400 }; -u32 ai_1[] = { 0x8e02ad68, 0x310a00ab, 0x000205fd, 0x04060400 }; -u32 ai_2[] = { 0x8e03ad68, 0x320a00ab, 0x000305fd, 0x04060400 }; -u32 ai_3[] = { 0x8e04ad68, 0x330a00ab, 0x000405fd, 0x04060400 }; -u32 ai_4[] = { 0x8e05ad68, 0x340a00ab, 0x000505fd, 0x04060400 }; -u32 ai_5[] = { 0x02238f00, 0x28900014, 0x8dbf3335, 0x8013bf00, 0xcf100000, 0x00002302, 0x13bf00cf, 0x10100000, 0x00230223, 0x00010201, 0x9c000020, 0x00039c00, 0x00800003, 0x05fd0408, 0x020305fd, 0x04090400 }; -u32 ai_7[] = { 0x1e232802, 0x03039c00, 0x00200034, 0x46342f23, 0x01030223, 0x14002100, 0x00230223, 0x0204039c, 0x00002000, 0x34463401, 0x0402349a, 0x00002000, 0x16000100, 0x00230223, 0x05fd0409, 0x04000000 }; -u32 ai_8[] = { 0x02353335, 0x503f2803, 0x023f2a03, 0x0203034c, 0x0096133c, 0x3602132f, 0x37010302, 0x363c2300, 0x01023703, 0x01350223, 0x02346d04, 0x0233350a, 0x231a0102, 0x23353223, 0x0e010223, 0x353c2313, 0x01022335, 0x50231301, 0x02233564, 0x23110102, 0x23359623, 0x12010223, 0x35c82314, 0x00010000, 0x01022315, 0x00010000, 0x01020103, 0x2f230101, 0x02233c23, 0x00030203, 0x03013502, 0x23030134, 0x020205fd, 0x04100400 }; -u32 ai_9[] = { 0x02353335, 0x503f2803, 0x023f2a03, 0xae020303, 0x9c000400, 0x00029c00, 0x10000013, 0x9c000800, 0x00020213, 0x032f374c, 0x0096133c, 0x360213b3, 0x00025813, 0x01350213, 0x2f370103, 0x02363c23, 0x00010237, 0x03013502, 0x2302349c, 0x00040000, 0x029c0010, 0x0000139c, 0x00080000, 0x02021333, 0x350a231a, 0x01022335, 0x32230e01, 0x0223353c, 0x23130102, 0x23355023, 0x13010223, 0x35642311, 0x01022335, 0x96231201, 0x022335c8, 0x23140001, 0x00000102, 0x23150001, 0x00000102, 0x01039d00, 0x4000002f, 0x23010102, 0x233c2300, 0x03020303, 0x01350223, 0x03013402, 0x0205fd04, 0x0f040000 }; -u32 ai_18[] = { 0x9d000008, 0x001e0001, 0x0203039c, 0x00002000, 0x0646062f, 0x23010302, 0x23170001, 0x00002302, 0x23c38c12, 0xae020403, 0x9c000020, 0x00064606, 0xb4000078, 0x23010402, 0x2359013d, 0xc38c13ae, 0x0205039c, 0x00010000, 0x13b40002, 0x58070213, 0xb40004b0, 0x069c0000, 0x20000646, 0x06590123, 0x01050223, 0x9a000040, 0x00c38c14, 0x0001023d, 0x9a000040, 0x00c38c33, 0x00010201, 0x0305fd04, 0x14010102, 0x069a0000, 0x2000c38c, 0x2205fd04, 0x150207c3, 0x8c219a00, 0x01000001, 0x05040000 }; -u32 ai_19[] = { 0xae023303, 0x9c000020, 0x00014601, 0xb4000a8c, 0x11b40009, 0x6010b400, 0x08340fb4, 0x0007080e, 0xb40005dc, 0x0db40004, 0xb00cb400, 0x03840bb4, 0x0002580a, 0xb400012c, 0x09013302, 0x09b40001, 0x6823c38c, 0x16022301, 0x33020a9a, 0x00000400, 0xb4000294, 0x23c38c17, 0x02230133, 0x020bb400, 0x03c023c3, 0x8c180223, 0x0133020c, 0xb40004ec, 0x23c38c19, 0x02230133, 0x020db400, 0x061823c3, 0x8c1a0223, 0x0133020e, 0xb4000744, 0x23c38c1b, 0x02230133, 0x020fb400, 0x087023c3, 0x8c1c0223, 0x01330210, 0xb400099c, 0x23c38c1d, 0x02230133, 0x0211b400, 0x0ac823c3, 0x8c1e0223, 0x00120133, 0x021205fd, 0x04150201, 0x9a000020, 0x009c0000, 0x040013c3, 0x8c220023, 0x0213c38c, 0x15002302, 0x2305fd04, 0x15040000 }; -u32 ai_20[] = { 0x9d000000, 0x10ab0032, 0x9a000080, 0x009c0000, 0x0400139a, 0x00020000, 0x02130238, 0x9c000020, 0x00131c23, 0x28000302, 0x131f2328, 0x0203034d, 0xfd001e23, 0x282d2f23, 0x01030223, 0x9a000020, 0x00013802, 0x2d3c2322, 0x02010301, 0x0102239a, 0x00002000, 0xab008b01, 0x38040000 }; -u32 ai_16[] = { 0xcd026c00, 0x000a0002, 0xffff0002, 0x06006500, 0x00160200, 0x03010004 }; -u32 ai_38[] = { 0x0230ae9c, 0x00002000, 0x039c0000, 0x8000039c, 0x00040000, 0x019c0010, 0x0000139c, 0x00080000, 0x010213ad, 0x210a0002, 0x23033106, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00c4, 0x040b0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff008104, 0x0b000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x0024040b, 0x00000000, 0x130223f3, 0x13bd03ff, 0x0000040b, 0x00000000, 0x13021302, 0x23033107, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00a3, 0x040c0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff005904, 0x0c000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x003a040c, 0x00000000, 0x130223f3, 0x13bd03ff, 0x0034040c, 0x00000000, 0x13021302, 0x23033108, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00a2, 0x040d0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff00cb04, 0x0d000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x0036040d, 0x00000000, 0x130223f3, 0x13bd03ff, 0x00c0040d, 0x00000000, 0x13021302, 0x23033109, 0x23001302, 0x2333353c, 0x23f313bd, 0x03ff00d6, 0x040e0000, 0x00001302, 0x23357823, 0xf313bd03, 0xff009804, 0x0e000000, 0x00130223, 0x35b423f3, 0x13bd03ff, 0x006b040e, 0x00000000, 0x130223f3, 0x13bd03ff, 0x002a040e, 0x00000000, 0x13021300, 0x0102036d, 0x04010223, 0x03310223, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00c404, 0x02000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00810402, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x24040200, 0x00000013, 0x0223f313, 0xbd04ff00, 0x00040200, 0x00000013, 0x02130223, 0x03310323, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00a304, 0x03000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00590403, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x3a040300, 0x00000013, 0x0223f313, 0xbd04ff00, 0x34040300, 0x00000013, 0x02130223, 0x03310423, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00a204, 0x04000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00cb0404, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x36040400, 0x00000013, 0x0223f313, 0xbd04ff00, 0xc0040400, 0x00000013, 0x02130223, 0x03310523, 0x00130223, 0x33353c23, 0xf313bd04, 0xff00d604, 0x05000000, 0x00130223, 0x357823f3, 0x13bd04ff, 0x00980405, 0x00000000, 0x13022335, 0xb423f313, 0xbd04ff00, 0x6b040500, 0x00000013, 0x0223f313, 0xbd04ff00, 0x2a040500, 0x00000013, 0x02130001, 0x020103b4, 0x00007823, 0x01010223, 0x01300400 }; -u32 ai_10[] = { 0x8e06ad72, 0x310a0005, 0xfd040704 }; -u32 ai_11[] = { 0x8e07ad72, 0x320a0005, 0xfd040704 }; -u32 ai_12[] = { 0x8e08ad72, 0x330a0005, 0xfd040704 }; -u32 ai_13[] = { 0x8e09ad72, 0x340a0005, 0xfd040704 }; -u32 ai_6[] = { 0x02238f00, 0x288dbf33, 0x358013bf, 0x00b80800, 0x00000023, 0x0213bf00, 0xb8081000, 0x00002302, 0x23c000d9, 0x00000000, 0x01000102, 0x0105fd04, 0x0a040000 }; -u32 ai_14[] = { 0x02381f00, 0xcd020303, 0x2f230103, 0x02234dfd, 0x001e00cd, 0x23013802, 0x2322ad67, 0x6f6e650a, 0x00020103, 0x01010400 }; -u32 ai_15[] = { 0x02381f00, 0x23020303, 0x2f230103, 0x02234dfd, 0x001e0023, 0x23013802, 0x2322ad67, 0x6f6e650a, 0x00020103, 0x01010400 }; -u32 ai_21[] = { 0x9d000008, 0x0002388e, 0x00020003, 0x0a001e00, 0x53005404, 0x104b001e, 0x23010002, 0x23c38c26, 0xae020303, 0xb4000078, 0x23010302, 0x239a2000, 0x00000a00, 0xa8003c00, 0x780010c3, 0x8c230201, 0x032f2301, 0x010223c3, 0x8c2405fd, 0x04170400 }; -u32 ai_22[] = { 0x0239039c, 0x00800000, 0x23001302, 0x23960123, 0x9a000008, 0x00ae9401, 0x00130223, 0xb300012c, 0x13c38c25, 0x05fd0418, 0x02134b00, 0x32232800, 0x02232900, 0x01390200, 0x039c0080, 0x0000014b, 0x0014032f, 0x01010002, 0x3a013902, 0x03080204, 0x039c0080, 0x0000014b, 0x00083b4c, 0x00280101, 0x04023b47, 0x403c48c0, 0x3c000502, 0x3c023d00, 0x05020503, 0x9c008000, 0x00012f06, 0x01050206, 0x01030201, 0x01390400 }; -u32 ai_23[] = { 0xae020503, 0xb4000078, 0x38010502, 0x381f0009, 0x0203036d, 0x043d0013, 0x023dd900, 0x00091302, 0x132f234d, 0xfd002800, 0x09230103, 0x02234dfd, 0x00280009, 0x23013802, 0x239a0100, 0x00001700, 0x01000000, 0x0200039c, 0x02000000, 0x23010002, 0x23210204, 0x03010404 }; -u32 ai_39[] = { 0x0203039c, 0x08000000, 0x00010302, 0x00033100, 0x239c0400, 0x00003d01, 0x00023d03, 0x03031800, 0x08080223, 0x9a004000, 0x00020103, 0x01010400 }; -u32 ai_40[] = { 0x0200039c, 0x01000000, 0x23010002, 0x236d0423, 0x01000223, 0x02030353, 0x01f40009, 0x23010302, 0x23f323bd, 0x1345000c, 0x041d0000, 0x001023ad, 0x4f206661, 0x696c0a00, 0x01030223, 0x9a020000, 0x00ad4f20, 0x696e6974, 0x0a0003f3, 0x23bd13ff, 0x000a041a, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000b041b, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000d041c, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000e041c, 0x00000010, 0x230223f3, 0x23bd13ff, 0x000f041c, 0x00000010, 0x23022302, 0x04030104, 0x04000000 }; -u32 ai_28[] = { 0x9d000008, 0x008e0abf, 0x00cd0600, 0x00000023, 0x02231400, 0x21000000, 0x0200039c, 0x04000000, 0x23462330, 0xfd234b00, 0x96230100, 0x0223ae00, 0x33023303, 0x9c040000, 0x00014601, 0x30fd014c, 0x00fa0f95, 0x01b1b400, 0x096010b4, 0x0007080e, 0xb40005dc, 0x0db40004, 0xb00cb400, 0x03840bb4, 0x0002580a, 0xb400012c, 0x09013302, 0x09b40001, 0x6823c38c, 0x28022301, 0x33020ab4, 0x00029423, 0xc38c2902, 0x23013302, 0x0bb40003, 0xc023c38c, 0x2a022301, 0x33020cb4, 0x0004ec23, 0xc38c2b02, 0x23013302, 0x0db40006, 0x1823c38c, 0x2c022301, 0x33020eb4, 0x00074423, 0xc38c2d02, 0x23013302, 0x10b40009, 0x9c23c38c, 0x2f022301, 0x33020f96, 0x0113c38c, 0x2e0213b0, 0x94010133, 0x02019a04, 0x00000016, 0x00010000, 0x03020303, 0x2f230103, 0x022305fd, 0x041e0400 }; -u32 ai_24[] = { 0x8dbf3335, 0x8013bf00, 0xb8080000, 0x00002302, 0x13bf00b8, 0x08100000, 0x00230223, 0xc000d600, 0x00000023, 0x02231400, 0x24000000, 0x0200039c, 0x04000000, 0x23462330, 0xfd230100, 0x02239a04, 0x00000016, 0x00040000, 0x03020303, 0x2f230103, 0x022305fd, 0x041e0400 }; -u32 ai_25[] = { 0x8e0b05fd, 0x04190400 }; -u32 ai_26[] = { 0x8e0c05fd, 0x04190400 }; -u32 ai_27[] = { 0x8dbf3335, 0x8013bf00, 0xb8080000, 0x00002302, 0x13bf00b8, 0x08100000, 0x00230223, 0xc000d600, 0x00000023, 0x02231500, 0x21000000, 0x0200039c, 0x04000000, 0x23462330, 0xfd230100, 0x02239a04, 0x00000016, 0x00010000, 0x03020303, 0x2f230103, 0x022305fd, 0x041e0400 }; -u32 ai_29[] = { 0x02381500, 0x21000023, 0x02230316, 0x00010000, 0x23022302, 0x03032f23, 0x01030223, 0x01380400 }; -u32 ai_41[] = { 0x0200039c, 0x00800000, 0x23010002, 0x23a30100, 0x04000033, 0x351e2365, 0x0100cd00, 0x03022335, 0x3c236501, 0x00d60003, 0x0223355a, 0x23650100, 0xd0000302, 0x23357823, 0x650100c8, 0x00030223, 0x35962365, 0x0100cb00, 0x03022335, 0xb4236501, 0x00c40003, 0x022335d2, 0x23650100, 0xd5000302, 0x2335f023, 0x650100c2, 0x00030223, 0x650100c0, 0x0203036d, 0x04045500, 0xb3230103, 0x0223c38c, 0x27010302, 0x04030104, 0x04000000 }; -u32 ai_0[] = { 0xad627272, 0x6d206272, 0x726d0a00, 0x02000301, 0x00040000 }; -u32 ai_42[] = { 0x023803eb, 0x3e550016, 0x23013802, 0x23ecd700, 0xda020303, 0xdc230103, 0x0223310a, 0x299c0400, 0x00002905, 0xfd042002, 0x29d205fd, 0x0001023e, 0x05fd0001, 0x04000000 }; -u32 ai_31[] = { 0xf12305fd, 0x000f0223, 0xddeaed03, 0x0303d502, 0x00010000, 0xdbf40000, 0xffdf03df, 0x0405f804, 0x21a10a00, 0x00040005, 0x0a0422a1, 0x0b000004, 0x00050b04, 0x23a10c00, 0x00040005, 0x0c042402, 0x01030101, 0x04000000 }; -u32 ai_32[] = { 0xd9fd0010, 0x2302230a, 0x006bffff, 0xffff0610, 0xae020303, 0xb400012c, 0x23010302, 0x23da0204, 0x03dc2301, 0x040223d2, 0x02010301, 0x01040000 }; -u32 ai_33[] = { 0xd9fd0011, 0x2302230a, 0x0052ffff, 0xffff0610, 0x02010301, 0x01040000 }; -u32 ai_34[] = { 0xd9fd0014, 0x2302230a, 0x0028ffff, 0xffff0610, 0x02010301, 0x01040000 }; -u32 ai_35[] = { 0xd9fd0013, 0x23022315, 0x00210000, 0x230223ae, 0x020303b4, 0x00010e23, 0x01030223, 0x08022302, 0x01030101, 0x04000000 }; -u32 ai_30[] = { 0xae020303, 0xb4000000, 0x23010302, 0x230a0061, 0xffff00af, 0x04100201, 0x03010104 }; -u32 ai_43[] = { 0x020303cf, 0x23010302, 0x2305f804, 0x1f020103, 0x01010400 }; -u32 ai_44[] = { 0x0200039c, 0x40000000, 0x23010002, 0x23ae0204, 0x03ad4932, 0x0a00b400, 0x025810b4, 0x0001680f, 0xb400012c, 0x0eb40000, 0xb40db400, 0x00780cb4, 0x00003c0b, 0xb4000000, 0x0a010402, 0x0aad5431, 0x0a00a40b, 0x00020000, 0x5f0ba40c, 0x00020000, 0x5f0c0104, 0x020ba400, 0x00020000, 0x5f00a40d, 0x00020000, 0x5f0da40e, 0x00020000, 0x5f0e0104, 0x020ca40f, 0x00020000, 0x5f0fa410, 0x00020000, 0x5f100104, 0x020d0104, 0x020e0104, 0x020f0104, 0x0210ad43, 0x4c0a0005, 0xfd000104, 0x0200039c, 0x00100000, 0x01300123, 0x31012301, 0x0002239a, 0x00200000, 0x02010301, 0x01040000 }; +u8 ai_17[] = { + guard_flags_set_on(0x00080000) + label(0x00) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x23) + if_chr_dying_or_dead(0xfd, 0x06) + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000800) + guard_try_facing_target(0x0100, 0x0000, 0x23) + label(0x23) + label(0x04) + local_timer_reset_start + debug_log 'h', 'e', 'l', 'l', 'o', '\n', '\0', + label(0x33) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x06) + if_guard_distance_to_bond_greater_than(0xc800, 0x0f) + if_guard_distance_to_bond_greater_than(0x5000, 0x0e) + guard_bitfield_set_off(0x01) + local_timer_start + if_local_timer_greater_than(0x080700, 0x12) + if_local_timer_greater_than(0xdc0500, 0x0d) + if_local_timer_greater_than(0xb00400, 0x0c) + if_local_timer_greater_than(0x840300, 0x0b) + if_local_timer_greater_than(0x580200, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x09) + goto_first(0x33) + label(0x09) + if_local_timer_greater_than(0x680100, 0x23) + text_print_top(0x098c) + label(0x23) + goto_first(0x33) + label(0x0a) + if_local_timer_greater_than(0x940200, 0x23) + text_print_top(0x0a8c) + label(0x23) + goto_first(0x33) + label(0x0b) + if_local_timer_greater_than(0xc00300, 0x23) + text_print_top(0x0b8c) + label(0x23) + goto_first(0x33) + label(0x0c) + if_local_timer_greater_than(0xec0400, 0x23) + text_print_top(0x0c8c) + label(0x23) + goto_first(0x33) + label(0x0d) + if_local_timer_greater_than(0x180600, 0x23) + text_print_top(0x0d8c) + label(0x23) + goto_first(0x33) + label(0x0e) + if_guard_bitfield_is_set_on(0x01, 0x13) + text_print_top(0x0e8c) + label(0x13) + local_timer_stop + guard_bitfield_set_on(0x01) + goto_first(0x33) + label(0x0f) + text_print_top(0x0f8c) + objective_bitfield_set_on(0x00001000) + objective_bitfield_set_on(0x00002000) + goto_next(0x01) + label(0x12) + ai_sleep + goto_next(0x27) + goto_first(0x12) + label(0x27) + objective_bitfield_set_on(0x00010000) + objective_bitfield_set_on(0x00001000) + guard_walks_to_pad(0x1600) + label(0x20) + ai_sleep + if_guard_distance_to_bond_greater_than(0x2c01, 0x01) + if_guard_has_stopped_moving(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x0f00, 0x1600, 0x23) + goto_first(0x20) + label(0x23) + if_chr_distance_to_pad_greater_than(0xfd, 0x0f00, 0x1600, 0x13) + if_guard_distance_to_bond_greater_than(0x2c01, 0x01) + label(0x13) + goto_first(0x27) + label(0x01) + ai_sleep + guard_remove_fade + goto_first(0x01) + label(0x06) + text_print_top(0x308c) + objective_bitfield_set_on(0x00002000) + label(0x07) + ai_sleep + goto_first(0x07) + ai_list_end +}; +u8 ai_36[] = { + label(0x38) + ai_sleep + if_objective_bitfield_is_set_on(0x00010000, 0x00) + goto_first(0x38) + label(0x00) + ai_sleep + if_bond_distance_to_pad_less_than(0x5000, 0x3b00, 0x23) + goto_first(0x00) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x08, 0xff, 0x3600, 0x1304, 0x00000000, 0x23) + debug_log 'T', ' ', 'f', 'a', 'i', 'l', '\n', '\0', + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000400) + debug_log 'T', ' ', 'i', 'n', 'i', 't', '\n', '\0', + ai_sleep + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0204, 0x01000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0304, 0x01000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0404, 0x01000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0504, 0x01000000, 0x23) + label(0x23) + label(0x03) + ai_sleep + if_bond_distance_to_pad_greater_than(0x8c00, 0x3b00, 0x05) + if_objective_bitfield_is_set_on(0x00400000, 0x04) + goto_first(0x03) + label(0x04) + ai_sleep + if_bond_distance_to_pad_greater_than(0x8c00, 0x3b00, 0x05) + if_bond_has_item_equipped(0x01, 0x13) + goto_next(0x05) + label(0x13) + goto_first(0x04) + label(0x05) + objective_bitfield_set_on(0x00200000) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_37[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00800000, 0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x580200, 0x23) + goto_first(0x03) + label(0x23) + text_print_top(0x1f8c) + object_move_to_pad(0x00, 0x1800) + objective_bitfield_set_on(0x00000080) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x10, 0xff, 0x0600, 0x1604, 0x00000000, 0x23) + label(0x23) + objective_bitfield_set_on(0x00000008) + hud_countdown_set(0xb400) + hud_countdown_start + hud_countdown_show + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00020000, 0x13) + if_bond_distance_to_pad_less_than(0x2c01, 0x1800, 0x08) + label(0x13) + if_objective_bitfield_is_set_on(0x00000010, 0x13) + if_bond_distance_to_pad_less_than(0x3200, 0x1800, 0x07) + label(0x13) + if_hud_countdown_less_than(0x0000, 0x23) + goto_first(0x05) + label(0x23) + objective_bitfield_set_on(0x00000040) + ai_sleep + ai_sleep + ai_sleep + if_objective_bitfield_is_set_on(0x00000020, 0x13) + chr_hit_body_part_with_item_damage(0x00, 0x08, 0x06) + label(0x13) + text_print_top(0x208c) + objective_bitfield_set_on(0x00008000) + sfx_stop_channel(0x00) + hud_countdown_hide + hud_countdown_stop + label(0x06) + ai_sleep + goto_first(0x06) + label(0x07) + ai_sleep + objective_bitfield_set_on(0x00000010) + text_print_top(0x328c) + hud_countdown_set(0x0f00) + goto_first(0x05) + label(0x08) + ai_sleep + objective_bitfield_set_on(0x00020000) + goto_first(0x05) + ai_list_end +}; +u8 ai_1[] = { + guard_set_chr_num(0x02) + debug_log 'h', '1', '\n', '\0', + guard_set_pad_preset(0x0200) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_2[] = { + guard_set_chr_num(0x03) + debug_log 'h', '2', '\n', '\0', + guard_set_pad_preset(0x0300) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_3[] = { + guard_set_chr_num(0x04) + debug_log 'h', '3', '\n', '\0', + guard_set_pad_preset(0x0400) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_4[] = { + guard_set_chr_num(0x05) + debug_log 'h', '4', '\n', '\0', + guard_set_pad_preset(0x0500) + jump_to_ai_list(0xfd, 0x0604) + ai_list_end +}; +u8 ai_5[] = { + label(0x23) + guard_set_health_total(0x2800) + guard_set_armour(0x1400) + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xcf00, 0x10, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xcf00, 0x10, 0x00000010, 0x23) + label(0x23) + goto_next(0x01) + label(0x01) + if_objective_bitfield_is_set_on(0x00200000, 0x03) + if_objective_bitfield_is_set_on(0x00800000, 0x03) + jump_to_ai_list(0xfd, 0x0804) + label(0x03) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_7[] = { + guard_walks_to_pad(0x2823) + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x34) + if_guard_shot_from_bond_missed(0x34) + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x23) + label(0x23) + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x34) + if_guard_shot_from_bond_missed(0x34) + goto_first(0x04) + label(0x34) + objective_bitfield_set_on(0x00200000) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23) + label(0x23) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_8[] = { + label(0x35) + random_generate_seed + if_random_seed_greater_than(0x50, 0x3f) + guard_try_running_to_bond_position(0x03) + label(0x3f) + guard_try_sprinting_to_bond_position(0x03) + label(0x03) + ai_sleep + if_guard_distance_to_bond_greater_than(0x9600, 0x13) + if_guard_and_bond_within_line_of_sight(0x36) + label(0x13) + if_guard_has_stopped_moving(0x37) + goto_first(0x03) + label(0x36) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x01) + label(0x37) + ai_sleep + goto_first(0x35) + label(0x23) + label(0x34) + if_objective_num_complete(0x04, 0x02) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x23) + guard_try_throwing_grenade(0x01) + label(0x23) + if_random_seed_greater_than(0x32, 0x23) + guard_try_sidestepping(0x01) + label(0x23) + if_random_seed_greater_than(0x3c, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x50, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x64, 0x23) + guard_try_firing_walk(0x01) + label(0x23) + if_random_seed_greater_than(0x96, 0x23) + guard_try_firing_run(0x01) + label(0x23) + if_random_seed_greater_than(0xc8, 0x23) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x01) + label(0x23) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x03) + label(0x03) + ai_sleep + goto_first(0x35) + label(0x23) + ai_sleep + goto_first(0x34) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_9[] = { + label(0x35) + random_generate_seed + if_random_seed_greater_than(0x50, 0x3f) + guard_try_running_to_bond_position(0x03) + label(0x3f) + guard_try_sprinting_to_bond_position(0x03) + local_timer_reset_start + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x02) + if_objective_bitfield_is_set_on(0x00001000, 0x13) + if_objective_bitfield_is_set_on(0x00000800, 0x02) + label(0x13) + ai_sleep + if_guard_has_stopped_moving(0x37) + if_guard_distance_to_bond_greater_than(0x9600, 0x13) + if_guard_and_bond_within_line_of_sight(0x36) + label(0x13) + if_local_timer_less_than(0x580200, 0x13) + goto_first(0x35) + label(0x13) + if_guard_has_stopped_moving(0x37) + goto_first(0x03) + label(0x36) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x01) + label(0x37) + ai_sleep + goto_first(0x35) + label(0x23) + label(0x34) + if_objective_bitfield_is_set_on(0x00000400, 0x02) + if_objective_bitfield_is_set_on(0x00001000, 0x13) + if_objective_bitfield_is_set_on(0x00000800, 0x02) + label(0x13) + random_generate_seed + if_random_seed_greater_than(0x0a, 0x23) + guard_try_throwing_grenade(0x01) + label(0x23) + if_random_seed_greater_than(0x32, 0x23) + guard_try_sidestepping(0x01) + label(0x23) + if_random_seed_greater_than(0x3c, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x50, 0x23) + guard_try_firing_roll(0x01) + label(0x23) + if_random_seed_greater_than(0x64, 0x23) + guard_try_firing_walk(0x01) + label(0x23) + if_random_seed_greater_than(0x96, 0x23) + guard_try_firing_run(0x01) + label(0x23) + if_random_seed_greater_than(0xc8, 0x23) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + guard_flags_set_on(0x00004000) + if_guard_has_stopped_moving(0x23) + goto_first(0x01) + label(0x23) + if_guard_and_bond_within_line_of_sight(0x23) + goto_next(0x03) + label(0x03) + ai_sleep + goto_first(0x35) + label(0x23) + ai_sleep + goto_first(0x34) + label(0x02) + jump_to_ai_list(0xfd, 0x0f04) + ai_list_end +}; +u8 ai_18[] = { + guard_flags_set_on(0x00080000) + guard_walks_to_pad(0x0100) + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x06) + if_guard_shot_from_bond_missed(0x06) + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + guard_try_facing_target(0x0100, 0x0000, 0x23) + label(0x23) + text_print_top(0x128c) + local_timer_reset_start + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x06) + if_guard_shot_from_bond_missed(0x06) + if_local_timer_greater_than(0x780000, 0x23) + goto_first(0x04) + label(0x23) + if_bond_has_item_equipped(0x01, 0x3d) + text_print_top(0x138c) + local_timer_reset_start + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00000100, 0x13) + if_local_timer_greater_than(0x580200, 0x07) + label(0x13) + if_local_timer_greater_than(0xb00400, 0x06) + if_objective_bitfield_is_set_on(0x00200000, 0x06) + if_guard_shot_from_bond_missed(0x06) + if_bond_has_item_equipped(0x01, 0x23) + goto_first(0x05) + label(0x23) + objective_bitfield_set_on(0x00400000) + text_print_top(0x148c) + goto_next(0x01) + label(0x3d) + objective_bitfield_set_on(0x00400000) + text_print_top(0x338c) + goto_next(0x01) + label(0x01) + ai_sleep + jump_to_ai_list(0xfd, 0x1404) + goto_first(0x01) + label(0x06) + objective_bitfield_set_on(0x00200000) + text_print_top(0x228c) + jump_to_ai_list(0xfd, 0x1504) + label(0x07) + text_print_top(0x218c) + objective_bitfield_set_on(0x00000100) + goto_first(0x05) + ai_list_end +}; +u8 ai_19[] = { + local_timer_reset_start + label(0x33) + ai_sleep + if_objective_bitfield_is_set_on(0x00200000, 0x01) + if_guard_shot_from_bond_missed(0x01) + if_local_timer_greater_than(0x8c0a00, 0x11) + if_local_timer_greater_than(0x600900, 0x10) + if_local_timer_greater_than(0x340800, 0x0f) + if_local_timer_greater_than(0x080700, 0x0e) + if_local_timer_greater_than(0xdc0500, 0x0d) + if_local_timer_greater_than(0xb00400, 0x0c) + if_local_timer_greater_than(0x840300, 0x0b) + if_local_timer_greater_than(0x580200, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x09) + goto_first(0x33) + label(0x09) + if_local_timer_greater_than(0x680100, 0x23) + text_print_top(0x168c) + label(0x23) + goto_first(0x33) + label(0x0a) + objective_bitfield_set_on(0x00040000) + if_local_timer_greater_than(0x940200, 0x23) + text_print_top(0x178c) + label(0x23) + goto_first(0x33) + label(0x0b) + if_local_timer_greater_than(0xc00300, 0x23) + text_print_top(0x188c) + label(0x23) + goto_first(0x33) + label(0x0c) + if_local_timer_greater_than(0xec0400, 0x23) + text_print_top(0x198c) + label(0x23) + goto_first(0x33) + label(0x0d) + if_local_timer_greater_than(0x180600, 0x23) + text_print_top(0x1a8c) + label(0x23) + goto_first(0x33) + label(0x0e) + if_local_timer_greater_than(0x440700, 0x23) + text_print_top(0x1b8c) + label(0x23) + goto_first(0x33) + label(0x0f) + if_local_timer_greater_than(0x700800, 0x23) + text_print_top(0x1c8c) + label(0x23) + goto_first(0x33) + label(0x10) + if_local_timer_greater_than(0x9c0900, 0x23) + text_print_top(0x1d8c) + label(0x23) + goto_first(0x33) + label(0x11) + if_local_timer_greater_than(0xc80a00, 0x23) + text_print_top(0x1e8c) + label(0x23) + goto_next(0x12) + goto_first(0x33) + label(0x12) + jump_to_ai_list(0xfd, 0x1504) + label(0x01) + objective_bitfield_set_on(0x00200000) + if_objective_bitfield_is_set_on(0x00040000, 0x13) + text_print_top(0x228c) + goto_next(0x23) + label(0x13) + text_print_top(0x158c) + goto_next(0x23) + label(0x23) + jump_to_ai_list(0xfd, 0x1504) + ai_list_end +}; +u8 ai_20[] = { + guard_flags_set_on(0x10000000) + guard_set_pad_preset(0x3200) + objective_bitfield_set_on(0x00800000) + if_objective_bitfield_is_set_on(0x00040000, 0x13) + objective_bitfield_set_on(0x00000200) + label(0x13) + label(0x38) + if_objective_bitfield_is_set_on(0x00200000, 0x13) + guard_runs_to_pad(0x2823) + goto_next(0x03) + label(0x13) + guard_sprints_to_pad(0x2823) + label(0x03) + ai_sleep + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0x2823, 0x2d) + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + objective_bitfield_set_on(0x00200000) + goto_first(0x38) + label(0x2d) + if_guard_and_bond_within_line_of_sight(0x23) + guard_remove_fade + label(0x01) + ai_sleep + goto_first(0x01) + label(0x23) + objective_bitfield_set_on(0x00200000) + guard_set_pad_preset(0x8b00) + goto_first(0x38) + ai_list_end +}; +u8 ai_16[] = { + aircraft_rotor_speed(0x6c02, 0x0000) + guard_play_animation(0x0200, 0xffff, 0x0200, 0x06, 0x00) + object_move_to_pad(0x00, 0x1600) + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_38[] = { + label(0x30) + local_timer_reset_start + if_objective_bitfield_is_set_on(0x00200000, 0x03) + if_objective_bitfield_is_set_on(0x00800000, 0x03) + if_objective_bitfield_is_set_on(0x00000400, 0x01) + if_objective_bitfield_is_set_on(0x00001000, 0x13) + if_objective_bitfield_is_set_on(0x00000800, 0x01) + label(0x13) + debug_log '!', '\n', '\0', + label(0x23) + ai_sleep + if_chr_does_not_exist(0x06, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xc400, 0x0b04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x8100, 0x0b04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x2400, 0x0b04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x0000, 0x0b04, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x07, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xa300, 0x0c04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x5900, 0x0c04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x3a00, 0x0c04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x3400, 0x0c04, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x08, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xa200, 0x0d04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xcb00, 0x0d04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x3600, 0x0d04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xc000, 0x0d04, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x09, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0xd600, 0x0e04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x9800, 0x0e04, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x6b00, 0x0e04, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x03, 0xff, 0x2a00, 0x0e04, 0x00000000, 0x13) + label(0x13) + goto_next(0x01) + label(0x03) + if_objective_num_complete(0x04, 0x01) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x02, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xc400, 0x0204, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x8100, 0x0204, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x2400, 0x0204, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x0000, 0x0204, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x03, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xa300, 0x0304, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x5900, 0x0304, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x3a00, 0x0304, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x3400, 0x0304, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x04, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xa200, 0x0404, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xcb00, 0x0404, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0404, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xc000, 0x0404, 0x00000000, 0x13) + label(0x13) + label(0x23) + ai_sleep + if_chr_does_not_exist(0x05, 0x23) + goto_next(0x13) + label(0x23) + random_generate_seed + if_random_seed_greater_than(0x3c, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0xd600, 0x0504, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x9800, 0x0504, 0x00000000, 0x13) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x6b00, 0x0504, 0x00000000, 0x13) + label(0x23) + if_bond_damage_and_pickups_disabled(0x13) + chr_try_spawning_at_pad(0x04, 0xff, 0x2a00, 0x0504, 0x00000000, 0x13) + label(0x13) + goto_next(0x01) + label(0x01) + ai_sleep + if_local_timer_greater_than(0x780000, 0x23) + goto_first(0x01) + label(0x23) + goto_first(0x30) + ai_list_end +}; +u8 ai_10[] = { + guard_set_chr_num(0x06) + debug_log 'r', '1', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_11[] = { + guard_set_chr_num(0x07) + debug_log 'r', '2', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_12[] = { + guard_set_chr_num(0x08) + debug_log 'r', '3', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_13[] = { + guard_set_chr_num(0x09) + debug_log 'r', '4', '\n', '\0', + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_6[] = { + label(0x23) + guard_set_health_total(0x2800) + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000010, 0x23) + label(0x23) + guard_try_spawning_hat(0xd900, 0x00000000, 0x01) + goto_next(0x01) + label(0x01) + jump_to_ai_list(0xfd, 0x0a04) + ai_list_end +}; +u8 ai_14[] = { + label(0x38) + guard_sprints_to_pad(0xcd00) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0xcd00, 0x23) + goto_first(0x38) + label(0x23) + guard_remove_fade + debug_log 'g', 'o', 'n', 'e', '\n', '\0', + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_15[] = { + label(0x38) + guard_sprints_to_pad(0x2300) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x1e00, 0x2300, 0x23) + goto_first(0x38) + label(0x23) + guard_remove_fade + debug_log 'g', 'o', 'n', 'e', '\n', '\0', + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_21[] = { + guard_flags_set_on(0x00080000) + label(0x38) + guard_set_chr_num(0x00) + label(0x00) + ai_sleep + guard_play_animation(0x1e00, 0x5300, 0x5400, 0x04, 0x10) + if_guard_distance_to_bond_less_than(0x1e00, 0x23) + goto_first(0x00) + label(0x23) + text_print_top(0x268c) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x780000, 0x23) + goto_first(0x03) + label(0x23) + objective_bitfield_set_on(0x00000020) + guard_play_animation(0xa800, 0x3c00, 0x7800, 0x00, 0x10) + text_print_top(0x238c) + label(0x01) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x01) + label(0x23) + text_print_top(0x248c) + jump_to_ai_list(0xfd, 0x1704) + ai_list_end +}; +u8 ai_22[] = { + label(0x39) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x23) + goto_next(0x13) + label(0x23) + if_guard_bitfield_is_set_on(0x01, 0x23) + objective_bitfield_set_on(0x00080000) + local_timer_reset_start + guard_bitfield_set_on(0x01) + goto_next(0x13) + label(0x23) + if_local_timer_less_than(0x2c0100, 0x13) + text_print_top(0x258c) + jump_to_ai_list(0xfd, 0x1804) + label(0x13) + if_guard_distance_to_bond_less_than(0x3200, 0x23) + guard_try_running_to_bond_position(0x00) + label(0x23) + guard_try_walking_to_bond_position(0x00) + goto_first(0x39) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x01) + if_guard_distance_to_bond_less_than(0x1400, 0x03) + if_guard_has_stopped_moving(0x01) + goto_first(0x00) + label(0x3a) + goto_first(0x39) + label(0x03) + guard_animation_stop + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x01) + if_guard_distance_to_bond_less_than(0x0800, 0x3b) + if_guard_distance_to_bond_greater_than(0x2800, 0x01) + goto_first(0x04) + label(0x3b) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x3c) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x3c) + goto_next(0x05) + label(0x3c) + label(0x3d) + goto_next(0x05) + label(0x05) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x01) + if_guard_has_stopped_moving(0x06) + goto_first(0x05) + label(0x06) + goto_first(0x03) + label(0x01) + goto_first(0x39) + ai_list_end +}; +u8 ai_23[] = { + local_timer_reset_start + label(0x05) + ai_sleep + if_local_timer_greater_than(0x780000, 0x38) + goto_first(0x05) + label(0x38) + guard_sprints_to_pad(0x0900) + label(0x03) + ai_sleep + if_objective_num_complete(0x04, 0x3d) + goto_next(0x13) + label(0x3d) + chr_try_teleporting_to_pad(0x00, 0x0900, 0x13) + label(0x13) + if_guard_has_stopped_moving(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x2800, 0x0900, 0x23) + goto_first(0x03) + label(0x23) + if_chr_distance_to_pad_less_than(0xfd, 0x2800, 0x0900, 0x23) + goto_first(0x38) + label(0x23) + objective_bitfield_set_on(0x00000001) + guard_try_facing_target(0x0100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000002, 0x23) + goto_first(0x00) + label(0x23) + guard_surrenders + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_39[] = { + label(0x03) + ai_sleep + if_objective_bitfield_is_set_on(0x00000008, 0x00) + goto_first(0x03) + label(0x00) + ai_sleep + if_chr_does_not_exist(0x00, 0x23) + if_objective_bitfield_is_set_on(0x00000004, 0x3d) + goto_first(0x00) + label(0x3d) + ai_sleep + ai_sleep + ai_sleep + chr_hit_body_part_with_item_damage(0x00, 0x08, 0x08) + label(0x23) + objective_bitfield_set_on(0x00004000) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_40[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000001, 0x23) + goto_first(0x00) + label(0x23) + if_objective_num_complete(0x04, 0x23) + goto_first(0x00) + label(0x23) + label(0x03) + ai_sleep + if_bond_distance_to_pad_greater_than(0xf401, 0x0900, 0x23) + goto_first(0x03) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0x45, 0x0c00, 0x1d04, 0x10000000, 0x23) + debug_log 'O', ' ', 'f', 'a', 'i', 'l', '\n', '\0', + goto_first(0x03) + label(0x23) + objective_bitfield_set_on(0x00000002) + debug_log 'O', ' ', 'i', 'n', 'i', 't', '\n', '\0', + ai_sleep + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0a00, 0x1a04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0b00, 0x1b04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0d00, 0x1c04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0e00, 0x1c04, 0x10000000, 0x23) + label(0x23) + if_bond_damage_and_pickups_disabled(0x23) + chr_try_spawning_at_pad(0x13, 0xff, 0x0f00, 0x1c04, 0x10000000, 0x23) + label(0x23) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_28[] = { + guard_flags_set_on(0x00080000) + guard_set_chr_num(0x0a) + guard_try_spawning_item(0xcd00, 0x06, 0x00000000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x23) + if_guard_shot_from_bond_missed(0x23) + if_chr_dying_or_dead(0xfd, 0x23) + if_guard_distance_to_bond_less_than(0x9600, 0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + goto_next(0x33) + label(0x33) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x01) + if_guard_shot_from_bond_missed(0x01) + if_chr_dying_or_dead(0xfd, 0x01) + if_guard_distance_to_bond_greater_than(0xfa00, 0x0f) + guard_bitfield_set_off(0x01) + local_timer_start + if_local_timer_greater_than(0x600900, 0x10) + if_local_timer_greater_than(0x080700, 0x0e) + if_local_timer_greater_than(0xdc0500, 0x0d) + if_local_timer_greater_than(0xb00400, 0x0c) + if_local_timer_greater_than(0x840300, 0x0b) + if_local_timer_greater_than(0x580200, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x09) + goto_first(0x33) + label(0x09) + if_local_timer_greater_than(0x680100, 0x23) + text_print_top(0x288c) + label(0x23) + goto_first(0x33) + label(0x0a) + if_local_timer_greater_than(0x940200, 0x23) + text_print_top(0x298c) + label(0x23) + goto_first(0x33) + label(0x0b) + if_local_timer_greater_than(0xc00300, 0x23) + text_print_top(0x2a8c) + label(0x23) + goto_first(0x33) + label(0x0c) + if_local_timer_greater_than(0xec0400, 0x23) + text_print_top(0x2b8c) + label(0x23) + goto_first(0x33) + label(0x0d) + if_local_timer_greater_than(0x180600, 0x23) + text_print_top(0x2c8c) + label(0x23) + goto_first(0x33) + label(0x0e) + if_local_timer_greater_than(0x440700, 0x23) + text_print_top(0x2d8c) + label(0x23) + goto_first(0x33) + label(0x10) + if_local_timer_greater_than(0x9c0900, 0x23) + text_print_top(0x2f8c) + label(0x23) + goto_first(0x33) + label(0x0f) + if_guard_bitfield_is_set_on(0x01, 0x13) + text_print_top(0x2e8c) + label(0x13) + local_timer_stop + guard_bitfield_set_on(0x01) + goto_first(0x33) + label(0x01) + objective_bitfield_set_on(0x00000004) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x1e04) + ai_list_end +}; +u8 ai_24[] = { + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000010, 0x23) + label(0x23) + guard_try_spawning_hat(0xd600, 0x00000000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target(0x2400, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x23) + if_guard_shot_from_bond_missed(0x23) + if_chr_dying_or_dead(0xfd, 0x23) + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000004) + guard_try_fire_or_aim_at_target_update(0x0400, 0x0000, 0x03) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x1e04) + ai_list_end +}; +u8 ai_25[] = { + guard_set_chr_num(0x0b) + jump_to_ai_list(0xfd, 0x1904) + ai_list_end +}; +u8 ai_26[] = { + guard_set_chr_num(0x0c) + jump_to_ai_list(0xfd, 0x1904) + ai_list_end +}; +u8 ai_27[] = { + guard_set_grenade_probability(0xbf) + random_generate_seed + if_random_seed_greater_than(0x80, 0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000000, 0x23) + label(0x13) + guard_try_spawning_item(0xb800, 0x08, 0x00000010, 0x23) + label(0x23) + guard_try_spawning_hat(0xd600, 0x00000000, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x00) + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000004, 0x23) + if_guard_shot_from_bond_missed(0x23) + if_chr_dying_or_dead(0xfd, 0x23) + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00000004) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x03) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xfd, 0x1e04) + ai_list_end +}; +u8 ai_29[] = { + label(0x38) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x23) + label(0x23) + ai_sleep + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x23) + label(0x23) + label(0x03) + ai_sleep + if_guard_has_stopped_moving(0x23) + goto_first(0x03) + label(0x23) + goto_first(0x38) + ai_list_end +}; +u8 ai_41[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00008000, 0x23) + goto_first(0x00) + label(0x23) + object_flags_1_set_on(0x01, 0x00000400) + random_generate_seed + if_random_seed_greater_than(0x1e, 0x23) + object_move_to_pad(0x01, 0xcd00) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x3c, 0x23) + object_move_to_pad(0x01, 0xd600) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x5a, 0x23) + object_move_to_pad(0x01, 0xd000) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x78, 0x23) + object_move_to_pad(0x01, 0xc800) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0x96, 0x23) + object_move_to_pad(0x01, 0xcb00) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0xb4, 0x23) + object_move_to_pad(0x01, 0xc400) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0xd2, 0x23) + object_move_to_pad(0x01, 0xd500) + goto_next(0x03) + label(0x23) + if_random_seed_greater_than(0xf0, 0x23) + object_move_to_pad(0x01, 0xc200) + goto_next(0x03) + label(0x23) + object_move_to_pad(0x01, 0xc000) + label(0x03) + ai_sleep + if_objective_num_complete(0x04, 0x04) + if_bond_in_room_with_pad(0xb300, 0x23) + goto_first(0x03) + label(0x23) + text_print_top(0x278c) + goto_first(0x03) + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_0[] = { + debug_log 'b', 'r', 'r', 'm', ' ', 'b', 'r', 'r', 'm', '\n', '\0', + label(0x00) + ai_sleep + goto_first(0x00) + ai_list_end +}; +u8 ai_42[] = { + label(0x38) + ai_sleep + if_bond_is_dead(0x3e) + if_bond_in_room_with_pad(0x1600, 0x23) + goto_first(0x38) + label(0x23) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + label(0x03) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x03) + label(0x23) + if_chr_does_not_exist(0x0a, 0x29) + if_objective_bitfield_is_set_on(0x00000004, 0x29) + jump_to_ai_list(0xfd, 0x2004) + label(0x29) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3e) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_31[] = { + if_objective_all_completed(0x23) + jump_to_ai_list(0xfd, 0x0f00) + label(0x23) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x02, 0x0100, 0x0000) + screen_fade_from_black + music_xtrack_play(0x00, 0x00, 0xff) + door_open_instant(0x03) + door_open_instant(0x04) + jump_to_ai_list(0xf8, 0x2104) + chr_flags_set_off(0x0a, 0x00040000) + jump_to_ai_list(0x0a, 0x2204) + chr_flags_set_off(0x0b, 0x00040000) + jump_to_ai_list(0x0b, 0x2304) + chr_flags_set_off(0x0c, 0x00040000) + jump_to_ai_list(0x0c, 0x2404) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_32[] = { + chr_try_teleporting_to_pad(0xfd, 0x1000, 0x23) + label(0x23) + guard_play_animation(0x6b00, 0xffff, 0xffff, 0x06, 0x10) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x23) + goto_first(0x03) + label(0x23) + screen_fade_to_black + label(0x04) + ai_sleep + if_screen_fade_completed(0x23) + goto_first(0x04) + label(0x23) + exit_level + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_33[] = { + chr_try_teleporting_to_pad(0xfd, 0x1100, 0x23) + label(0x23) + guard_play_animation(0x5200, 0xffff, 0xffff, 0x06, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_34[] = { + chr_try_teleporting_to_pad(0xfd, 0x1400, 0x23) + label(0x23) + guard_play_animation(0x2800, 0xffff, 0xffff, 0x06, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_35[] = { + chr_try_teleporting_to_pad(0xfd, 0x1300, 0x23) + label(0x23) + guard_try_fire_or_aim_at_target_kneel(0x2100, 0x0000, 0x23) + label(0x23) + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x0e0100, 0x23) + goto_first(0x03) + label(0x23) + guard_animation_stop + label(0x23) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_30[] = { + local_timer_reset_start + label(0x03) + ai_sleep + if_local_timer_greater_than(0x000000, 0x23) + goto_first(0x03) + label(0x23) + guard_play_animation(0x6100, 0xffff, 0xaf00, 0x04, 0x10) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_43[] = { + label(0x03) + ai_sleep + if_camera_is_in_bond_swirl(0x23) + goto_first(0x03) + label(0x23) + jump_to_ai_list(0xf8, 0x1f04) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; +u8 ai_44[] = { + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00000040, 0x23) + goto_first(0x00) + label(0x23) + local_timer_reset_start + label(0x04) + ai_sleep + debug_log 'I', '2', '\n', '\0', + if_local_timer_greater_than(0x580200, 0x10) + if_local_timer_greater_than(0x680100, 0x0f) + if_local_timer_greater_than(0x2c0100, 0x0e) + if_local_timer_greater_than(0xb40000, 0x0d) + if_local_timer_greater_than(0x780000, 0x0c) + if_local_timer_greater_than(0x3c0000, 0x0b) + if_local_timer_greater_than(0x000000, 0x0a) + goto_first(0x04) + label(0x0a) + debug_log 'T', '1', '\n', '\0', + object_flags_1_set_off(0x0b, 0x00000200) + object_destroy(0x0b) + object_flags_1_set_off(0x0c, 0x00000200) + object_destroy(0x0c) + goto_first(0x04) + label(0x0b) + object_flags_1_set_off(0x00, 0x00000200) + object_destroy(0x00) + object_flags_1_set_off(0x0d, 0x00000200) + object_destroy(0x0d) + object_flags_1_set_off(0x0e, 0x00000200) + object_destroy(0x0e) + goto_first(0x04) + label(0x0c) + object_flags_1_set_off(0x0f, 0x00000200) + object_destroy(0x0f) + object_flags_1_set_off(0x10, 0x00000200) + object_destroy(0x10) + goto_first(0x04) + label(0x0d) + goto_first(0x04) + label(0x0e) + goto_first(0x04) + label(0x0f) + goto_first(0x04) + label(0x10) + debug_log 'C', 'L', '\n', '\0', + jump_to_ai_list(0xfd, 0x0100) + ai_list_end + label(0x00) + ai_sleep + if_objective_bitfield_is_set_on(0x00001000, 0x01) + if_chr_dying_or_dead(0x01, 0x23) + if_chr_does_not_exist(0x01, 0x23) + goto_first(0x00) + label(0x23) + objective_bitfield_set_on(0x00002000) + label(0x01) + ai_sleep + goto_first(0x01) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/obseg/setup/u/UsetuptraZ.c b/assets/obseg/setup/u/UsetuptraZ.c index 538e5b54..70ce5f20 100644 --- a/assets/obseg/setup/u/UsetuptraZ.c +++ b/assets/obseg/setup/u/UsetuptraZ.c @@ -7,6 +7,7 @@ #include "ultra64.h" #include "bondtypes.h" +#include "bondaicommands.h" // forward declarations PadRecord padlist[]; @@ -1708,47 +1709,1446 @@ PathRecord patrolpaths[] = { }; -u32 ai_0[] = { 0x02060346, 0x013a013b, 0x0132013c, 0x012f1101, 0x06021101, 0x06020133, 0x3519010e, 0x08020133, 0x35400111, 0x08020135, 0x7f011208, 0x02013335, 0x7f011400, 0x01000008, 0x02019602, 0x01940202, 0x01020f15, 0x00010000, 0x08020803, 0x2f010108, 0x02010101, 0x04000000 }; -u32 ai_1[] = { 0x02060346, 0x0b3a0b3b, 0x0b320b3c, 0x0b2f1101, 0x06021179, 0x001a0106, 0x021a1201, 0x96010133, 0x3520010c, 0x94010702, 0x0b039610, 0x019410f3, 0x0abd11ff, 0x00980406, 0x00000000, 0x21ad4621, 0x0a00020a, 0x01060221, 0xad48656c, 0x6c6f210a, 0x00020133, 0x3519010e, 0x08020133, 0x35400111, 0x08020135, 0x7f011208, 0x02013335, 0x7f011400, 0x01000008, 0x02019602, 0x01940202, 0x01020f15, 0x00010000, 0x08020803, 0x2f010108, 0x02010101, 0x04000000 }; -u32 ai_2[] = { 0x02060346, 0x0b3a0b3b, 0x0b320b3c, 0x0b2f1101, 0x06021179, 0x001a0106, 0x021a1201, 0x96010133, 0x3520010c, 0x94010702, 0x0b039620, 0x019420c1, 0xfd040621, 0xad46210a, 0x00010602, 0x2103ad48, 0x656c6c6f, 0x210a0002, 0x01333519, 0x010e0802, 0x01333540, 0x01110802, 0x01357f01, 0x12080201, 0x33357f01, 0x14000100, 0x00080201, 0x96020194, 0x02020102, 0x0f150001, 0x00000802, 0x08032f01, 0x01080201, 0x01010400 }; -u32 ai_4[] = { 0x90001402, 0x06034601, 0x3a013b01, 0x32013c01, 0x01060201, 0x3335c801, 0x14000100, 0x00110201, 0x15000100, 0x00110211, 0x032f0801, 0x11020801, 0x06040000 }; -u32 ai_3[] = { 0x90001402, 0x00140021, 0x00000602, 0x06034601, 0x3a013b01, 0x32013c01, 0x01060201, 0x33359601, 0x16000100, 0x00110201, 0x09ae0212, 0x033335fa, 0x01b40000, 0xf0080112, 0x02011400, 0x21000001, 0x02011600, 0x01000001, 0x02010211, 0x032f0801, 0x11020801, 0x00040000 }; -u32 ai_5[] = { 0x02210227, 0xc000dc00, 0x00000027, 0x0227bf00, 0xc3098000, 0x00002702, 0x27bf00c3, 0x09900000, 0x002003ad, 0x44612d44, 0x61210a00, 0x02200328, 0x1f021f03, 0x4b003222, 0x2f010120, 0x02010301, 0x20022203, 0x05fd0401, 0x04000000 }; -u32 ai_7[] = { 0x02260394, 0x01280602, 0x06032f25, 0x32240106, 0x02240305, 0xfd040902, 0x25030126, 0x04000000 }; -u32 ai_8[] = { 0x02262811, 0x0211033c, 0x252f0801, 0x11020603, 0x7806359f, 0x00000010, 0x3702352f, 0x254c00c8, 0x01010602, 0x01012602, 0x253c0100, 0x08021f03, 0x4b003201, 0x2f010126, 0x02019f00, 0x00001037, 0x02293335, 0x19010e08, 0x02013335, 0x40011108, 0x0201357f, 0x01120802, 0x0133357f, 0x0f140001, 0x00000802, 0x0f150001, 0x00000802, 0x08033c01, 0x00110211, 0x3335c801, 0x00120201, 0x01060212, 0xae281302, 0x13032f01, 0xb400003c, 0x01011302, 0x0108ad77, 0x6169740a, 0x00950433, 0x35c80194, 0x040201ae, 0x0214033c, 0x01460103, 0xb3000258, 0x02960403, 0x01260203, 0x01120202, 0x01140201, 0x01060237, 0x7806019e, 0x00000010, 0x02010129, 0x04000000 }; -u32 ai_6[] = { 0xae020603, 0x3c265200, 0x14232826, 0xb40000b4, 0x23010602, 0x23033335, 0x96015200, 0x1e232826, 0x02010335, 0xdc015200, 0x32232826, 0x02010335, 0xf5015200, 0x4b232826, 0x02010335, 0xfa015200, 0x64232826, 0x02010352, 0x00c82328, 0x26ae0106, 0x02260305, 0xfd040904 }; -u32 ai_18[] = { 0x9d000400, 0x009d0000, 0x08000206, 0x033c0155, 0x005e0101, 0x060201c3, 0x9010f400, 0x00ff0207, 0x039c0000, 0x0800299c, 0x00000100, 0x299c0000, 0x04002946, 0x2a7efd2a, 0x55005301, 0x01070201, 0xae9a0000, 0x2000c390, 0x09020403, 0x9c000008, 0x00299c00, 0x00010029, 0x9c000004, 0x0029462a, 0x7efd2a52, 0x00190052, 0x11550058, 0x13b40007, 0x082db400, 0x04b02cb4, 0x0002582b, 0x0104022b, 0xb4000294, 0x01c3900c, 0x02010104, 0x022cb400, 0x04ec01c3, 0x900a0201, 0x0104022d, 0xb4000744, 0x01c39019, 0x9a000008, 0x00020101, 0x04021103, 0xc3900f03, 0x002a0213, 0x03c39011, 0x03002a02, 0x2a9a0000, 0x02009a00, 0x00080002, 0x29c3900d, 0x14000100, 0x00010201, 0x05fd0001, 0x04000000 }; -u32 ai_22[] = { 0x9d000008, 0x00020403, 0x9c000008, 0x00299c00, 0x00010029, 0x9c000002, 0x0029462a, 0x7efd2a01, 0x04022a9a, 0x00000400, 0x9a000008, 0x00022914, 0x00010000, 0x01020102, 0x120330fd, 0x01011202, 0x01c3900e, 0x05fd0001, 0x04000000 }; -u32 ai_19[] = { 0x9d000008, 0x00140024, 0x00460602, 0x06034601, 0x7efd019c, 0x00000800, 0x29010602, 0x019a0000, 0x01009a00, 0x00080002, 0x290330fd, 0x11304615, 0x314615e8, 0x122f1401, 0x29021414, 0x00240046, 0x01020101, 0x290212e7, 0x13012902, 0x13160004, 0x00460102, 0x019a0000, 0x10000129, 0x02150600, 0x0205fd00, 0x08021105, 0xfd000104 }; -u32 ai_20[] = { 0x9d000008, 0x009d0000, 0x00802102, 0x06039c00, 0x00100001, 0x31470230, 0x47020106, 0x020118fd, 0x08069a00, 0x00400005, 0xfd000102, 0x020d0219, 0x039c0000, 0x08000101, 0x190201ae, 0x021203b4, 0x0004b001, 0x01120201, 0x1e005102, 0x04035500, 0x62084235, 0xd9460051, 0x35023503, 0x5b2a3500, 0x0a02355b, 0x2935000a, 0x02357002, 0x35b40011, 0x942fb400, 0x0f3c2e02, 0x35b4000b, 0xb82db400, 0x09602c02, 0x05032f01, 0x01040201, 0x33356401, 0x0a00ac00, 0x00004500, 0x109a0020, 0x00000104, 0x02013596, 0x010a00ad, 0x0000004a, 0x00109a00, 0x20000001, 0x04020135, 0xc8010a00, 0xae000000, 0x4f00109a, 0x00200000, 0x01040201, 0x0a00af00, 0x00005900, 0x109a0020, 0x00000104, 0x022cb400, 0x099c01c3, 0x90140201, 0x0105022d, 0xb4000bf4, 0x01c39015, 0x9a000100, 0x00020101, 0x05022eb4, 0x000f7801, 0xc3901602, 0x01010502, 0x2fb40011, 0xd001c390, 0x179a0002, 0x00000201, 0x01050208, 0x05fd0416, 0x020a05fd, 0x041c0400 }; -u32 ai_27[] = { 0x17000100, 0x00010201, 0x039c0008, 0x00000ac3, 0x901aae02, 0x040330fd, 0x0ab40001, 0x2c015500, 0x62080104, 0x0201c390, 0x1b020503, 0x30fd0a55, 0x00620801, 0x05020805, 0xfd041602, 0x0a05fd00, 0x01040000 }; -u32 ai_21[] = { 0xc3901802, 0x38032806, 0x01380206, 0x034b0019, 0x112f0801, 0x06023901, 0x38021108, 0x0212034b, 0x00083a4c, 0x00280801, 0x12023a47, 0x403b48c0, 0x3b0d0013, 0x023b0202, 0xfa001302, 0x13032f14, 0x01130214, 0x01110208, 0x01380400 }; -u32 ai_17[] = { 0x04000000 }; -u32 ai_9[] = { 0xad446f6e, 0x650a008f, 0x0050c000, 0xdc000000, 0x00010201, 0xbf00bd0a, 0x00000000, 0x01020133, 0x35c80106, 0x040105fd, 0x04010201, 0x94010600, 0x0205fd00, 0x08040000 }; -u32 ai_10[] = { 0x33353c01, 0xab007002, 0x01357801, 0xab003702, 0x0135b401, 0xab003402, 0x01ab0043, 0x020205fd, 0x04100400 }; -u32 ai_11[] = { 0x33353c01, 0xab007102, 0x01357801, 0xab007502, 0x0135b401, 0xab006e02, 0x01ab0078, 0x020205fd, 0x04100400 }; -u32 ai_12[] = { 0x33353c01, 0xab007102, 0x01357801, 0xab006b02, 0x0135b401, 0xab007702, 0x01ab0078, 0x020205fd, 0x04100400 }; -u32 ai_13[] = { 0x33353c01, 0xab007502, 0x01357801, 0xab007402, 0x0135b401, 0xab007002, 0x01ab0078, 0x020205fd, 0x04100400 }; -u32 ai_14[] = { 0x02013335, 0x78358f00, 0x3cbf00bd, 0x0a000000, 0x00010201, 0xc000dc00, 0x00000008, 0x02358f00, 0x50c000de, 0x00000000, 0x010201bf, 0x00c30980, 0x00000001, 0x0201bf00, 0xc3099000, 0x00000802, 0x0805fd04, 0x01040000 }; -u32 ai_15[] = { 0x02013335, 0x64373532, 0x35900014, 0x8f0028bf, 0x00bd0a00, 0x00000001, 0x0201c000, 0xdc000000, 0x00080235, 0x9000288f, 0x0028bf00, 0xc3098000, 0x00000102, 0x01c000de, 0x00000000, 0x010201bf, 0x00c30990, 0x00000008, 0x02379000, 0x288f003c, 0xc000dd00, 0x00000001, 0x0201bf00, 0xc3098000, 0x00000102, 0x01bf00c3, 0x09900000, 0x00080208, 0x05fd0407, 0x04000000 }; -u32 ai_16[] = { 0x9000288f, 0x003c0206, 0x036d0008, 0x01060208, 0x05fd0409, 0x04000000 }; -u32 ai_28[] = { 0x02040301, 0x04040000 }; -u32 ai_29[] = { 0x02060352, 0x00140052, 0x369c0000, 0x08000155, 0x00583501, 0x0602359c, 0x00002000, 0x35010602, 0x35003602, 0x01ae0211, 0x03b40000, 0x4b015200, 0x14005201, 0x55005835, 0x01110235, 0x9c000020, 0x00350111, 0x02350236, 0x0201ae67, 0x00670102, 0x1403b400, 0x00b40101, 0x14020167, 0x02670367, 0x04670567, 0x06670767, 0x2e021203, 0x68010101, 0x01120201, 0xa0450000, 0x0010a048, 0x00000010, 0xd94500ba, 0x010201d9, 0x4800ba01, 0x0201a045, 0x00040400, 0xa0480004, 0x04000213, 0x03011304 }; -u32 ai_30[] = { 0x02060352, 0x006400af, 0x01010602, 0x01ad476f, 0x0a003335, 0x6401f311, 0xbd04ff00, 0x0a040a00, 0x00000011, 0x020135c8, 0x01f311bd, 0x04ff000c, 0x040a0000, 0x00001102, 0x01f311bd, 0x04ff000d, 0x040a0000, 0x00001102, 0x11033335, 0x6401f312, 0xbd04ff00, 0x09040a00, 0x00000012, 0x0201f312, 0xbd04ff00, 0x0b040a00, 0x00000012, 0x02120355, 0x00900101, 0x120201ad, 0x706f7032, 0x0a0003f3, 0x01bd04ff, 0x0041040b, 0x00000000, 0x01020103, 0xf301bd04, 0xff003a04, 0x0c000000, 0x00010201, 0x03f301bd, 0x04ff003b, 0x040d0000, 0x00000102, 0x0103f301, 0xbd04ff00, 0x35040e00, 0x00000001, 0x02010333, 0x355001f3, 0x02bd04ff, 0x0036040f, 0x00000000, 0x02020135, 0xa001f302, 0xbd04ff00, 0x3d040f00, 0x00000002, 0x0201f302, 0xbd04ff00, 0x42040f00, 0x00000002, 0x02020333, 0x355001f3, 0x02bd04ff, 0x0037040f, 0x00000000, 0x02020135, 0xa001f302, 0xbd04ff00, 0x3e040f00, 0x00000002, 0x0201f302, 0xbd04ff00, 0x40040f00, 0x00000002, 0x02020333, 0x355001f3, 0x02bd04ff, 0x0038040f, 0x00000000, 0x02020135, 0xa001f302, 0xbd04ff00, 0x3f040f00, 0x00000002, 0x0201f302, 0xbd04ff00, 0x34040f00, 0x00000002, 0x02020333, 0x357801f3, 0x02bd04ff, 0x0039040f, 0x00000000, 0x020201f3, 0x02bd04ff, 0x003c040f, 0x00000000, 0x020202ad, 0x706f7033, 0x0a000213, 0x03011304 }; -u32 ai_31[] = { 0x0206039c, 0x00000800, 0x01010602, 0x01ae0211, 0x03314602, 0x31483502, 0x02b40003, 0x84010111, 0x0235b400, 0x07080101, 0x110201ae, 0xc3901202, 0x12b40001, 0x2c010301, 0x120201c3, 0x9013b700, 0x3cb9b502, 0x13039604, 0x35bb001e, 0x14023596, 0x0235bb00, 0x17020235, 0x960135bb, 0x00140102, 0x35bb0000, 0x15011302, 0x01c4003a, 0x00c70000, 0x000e1094, 0x01011302, 0x02c901c4, 0x00d702c6, 0x02004700, 0x00940201, 0x130214c4, 0x00d603c6, 0x03004700, 0x0003c400, 0xd801c601, 0x00470000, 0x94040113, 0x0215b69a, 0x00080000, 0x02080301, 0x08040000 }; -u32 ai_32[] = { 0x0204aec4, 0x0040ff6d, 0x00010006, 0x0201c400, 0x3fff0206, 0x039c0004, 0x000008b4, 0x00003c01, 0x01060201, 0x01040208, 0xc4003dff, 0x02110301, 0x11040000 }; -u32 ai_33[] = { 0x0204ae33, 0x35af2d35, 0x642c022b, 0xc400f9ff, 0x0006022c, 0xc400dfff, 0x0006022d, 0xc40033ff, 0x00060206, 0x033335fe, 0x013335fa, 0x11b40000, 0x78010106, 0x02110333, 0x35fe01b4, 0x0000b401, 0x01110201, 0x6d000101, 0x04020105, 0xfd041804 }; -u32 ai_23[] = { 0x86fa8100, 0x02118228, 0xae950184, 0x64040008, 0x020403b4, 0x00007801, 0x01040201, 0x85010111, 0x02013335, 0xaf2d3564, 0x2c022bc4, 0x00f9ff00, 0x06022cc4, 0x00dfff00, 0x06022dc4, 0x0033ff00, 0x06020601, 0x11020803, 0x9a000400, 0x00010804 }; -u32 ai_34[] = { 0x02000352, 0x003200cb, 0x01010002, 0x01ae0219, 0x03eb3db4, 0x0000b401, 0x01190201, 0xecd700da, 0x31460130, 0x46019a00, 0x00800002, 0x01021103, 0xdc010111, 0x02013146, 0x3c30463c, 0xf10105fd, 0x000f0201, 0xddeaed03, 0x0303d51d, 0x00020000, 0xa1460000, 0x04000546, 0x041b05f8, 0x041a0303, 0xdbae0212, 0x03b40001, 0x2c01b400, 0x00f02fb4, 0x0000b42e, 0xb400005a, 0x2db40000, 0x3c2c0112, 0x022ca419, 0x00020000, 0x5f190112, 0x022da41a, 0x00020000, 0x5f1a0112, 0x022ea41b, 0x00020000, 0x5f1b0112, 0x022fa41c, 0x00020000, 0x5f1c0112, 0x0201da02, 0x1303dc01, 0x01130201, 0xd205fd00, 0x01023cd2, 0x05fd0001, 0x023d05fd, 0x00010400 }; -u32 ai_25[] = { 0xa0fd0000, 0x0010d9fd, 0x00cd0102, 0x010a005a, 0xffffffff, 0x061005fd, 0x00010400 }; -u32 ai_26[] = { 0xa0fd0000, 0x0010d9fd, 0x00cc0102, 0x010a005a, 0x0007ffff, 0x061005fd, 0x00010400 }; -u32 ai_24[] = { 0xae0a0064, 0x00000001, 0x04100211, 0x03b40000, 0x00010111, 0x02010a00, 0x640001ff, 0xff041005, 0xfd000104 }; -u32 ai_35[] = { 0x021103cf, 0x01011102, 0x0105f804, 0x1905fd00, 0x01040000 }; -u32 ai_36[] = { 0x0211039c, 0x00080000, 0x01011102, 0x01ae0212, 0x03b40003, 0x6632b400, 0x027631b4, 0x00023a30, 0xb40001c2, 0x2fb40000, 0xd22eb400, 0x005a2db4, 0x00001e2c, 0x0112022c, 0xa40f0002, 0x00005f0f, 0x0112022d, 0xa4100002, 0x00005f10, 0xa42b0002, 0x00005f2b, 0x0112022e, 0xa4110002, 0x00005f11, 0x0112022f, 0xa4120002, 0x00005f12, 0xa42c0002, 0x00005f2c, 0x01120230, 0xa4130002, 0x00005f13, 0x01120231, 0xa4140002, 0x00005f14, 0x01120232, 0xa4150002, 0x00005f15, 0xa42d0002, 0x00005f2d, 0x011205fd, 0x00010400 }; -u32 ai_37[] = { 0x02110355, 0x00620101, 0x110201e9, 0x9a001000, 0x0005fd00, 0x01040000 }; -u32 ai_38[] = { 0x02040368, 0x1e01356b, 0x1e020235, 0x681f0135, 0x6b1f0202, 0x35036820, 0x01356b20, 0x02023568, 0x2101356b, 0x21020235, 0x03682201, 0x356b2202, 0x02356823, 0x01356b23, 0x02023503, 0x68240135, 0x6b240202, 0x35682501, 0x356b2502, 0x02350368, 0x2601356b, 0x26020235, 0x68270135, 0x6b270202, 0x35036828, 0x01356b28, 0x02023501, 0x04040000 }; -u32 ai_39[] = { 0x0206039c, 0x00200000, 0x01010602, 0x01ae0211, 0x03b40000, 0x3c010111, 0x02013335, 0x8035c400, 0xb807c507, 0x29000002, 0x359b0020, 0x00000106, 0x020805fd, 0x00010400 }; -u32 ai_40[] = { 0x02060331, 0x46010106, 0x0201c390, 0x1c9a0000, 0x40000208, 0x03010804 }; +u8 ai_0[] = { + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_guard_see_another_guard_shot(0x01) + if_guard_see_another_guard_die(0x01) + if_guard_sees_bond(0x01) + if_guard_and_bond_within_line_of_sight(0x01) + if_guard_has_stopped_moving(0x11) + goto_first(0x06) + label(0x11) + goto_first(0x06) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x01) + if_guard_bitfield_is_set_on(0x02, 0x01) + guard_bitfield_set_on(0x02) + label(0x01) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x08) + label(0x01) + goto_first(0x01) + ai_list_end +}; +u8 ai_1[] = { + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x0b) + if_guard_see_another_guard_shot(0x0b) + if_guard_see_another_guard_die(0x0b) + if_guard_sees_bond(0x0b) + if_guard_and_bond_within_line_of_sight(0x0b) + if_guard_has_stopped_moving(0x11) + goto_first(0x06) + label(0x11) + if_guard_hits_greater_than(0x00, 0x1a) + goto_first(0x06) + label(0x1a) + guard_try_firing_run(0x01) + if_guard_bitfield_is_set_on(0x01, 0x01) + random_generate_seed + if_random_seed_greater_than(0x20, 0x01) + guard_points_at_bond + guard_bitfield_set_on(0x01) + jump_to_return_ai_list + label(0x0b) + ai_sleep + if_guard_bitfield_is_set_on(0x10, 0x01) + guard_bitfield_set_on(0x10) + if_bond_damage_and_pickups_disabled(0x0a) + chr_try_spawning_at_pad(0x11, 0xff, 0x9800, 0x0604, 0x00000000, 0x21) + debug_log 'F', '!', '\n', '\0', + label(0x0a) + goto_first(0x06) + label(0x21) + debug_log 'H', 'e', 'l', 'l', 'o', '!', '\n', '\0', + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x01) + if_guard_bitfield_is_set_on(0x02, 0x01) + guard_bitfield_set_on(0x02) + label(0x01) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x08) + label(0x01) + goto_first(0x01) + ai_list_end +}; +u8 ai_2[] = { + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x0b) + if_guard_see_another_guard_shot(0x0b) + if_guard_see_another_guard_die(0x0b) + if_guard_sees_bond(0x0b) + if_guard_and_bond_within_line_of_sight(0x0b) + if_guard_has_stopped_moving(0x11) + goto_first(0x06) + label(0x11) + if_guard_hits_greater_than(0x00, 0x1a) + goto_first(0x06) + label(0x1a) + guard_try_firing_run(0x01) + if_guard_bitfield_is_set_on(0x01, 0x01) + random_generate_seed + if_random_seed_greater_than(0x20, 0x01) + guard_points_at_bond + guard_bitfield_set_on(0x01) + jump_to_return_ai_list + label(0x0b) + ai_sleep + if_guard_bitfield_is_set_on(0x20, 0x01) + guard_bitfield_set_on(0x20) + chr_try_spawning_clone(0xfd, 0x0604, 0x21) + debug_log 'F', '!', '\n', '\0', + goto_first(0x06) + label(0x21) + ai_sleep + debug_log 'H', 'e', 'l', 'l', 'o', '!', '\n', '\0', + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x01) + if_guard_bitfield_is_set_on(0x02, 0x01) + guard_bitfield_set_on(0x02) + label(0x01) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x08) + label(0x01) + goto_first(0x01) + ai_list_end +}; +u8 ai_4[] = { + guard_set_armour(0x1400) + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_guard_see_another_guard_shot(0x01) + if_guard_see_another_guard_die(0x01) + if_guard_sees_bond(0x01) + if_guard_and_bond_within_line_of_sight(0x01) + goto_first(0x06) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x11) + label(0x01) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x11) + label(0x11) + ai_sleep + if_guard_has_stopped_moving(0x08) + goto_first(0x11) + label(0x08) + goto_first(0x06) + ai_list_end +}; +u8 ai_3[] = { + guard_set_armour(0x1400) + label(0x00) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x06) + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_guard_see_another_guard_shot(0x01) + if_guard_see_another_guard_die(0x01) + if_guard_sees_bond(0x01) + if_guard_and_bond_within_line_of_sight(0x01) + goto_first(0x06) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x96, 0x01) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x11) + label(0x01) + guard_kneel + local_timer_reset_start + label(0x12) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfa, 0x01) + if_local_timer_greater_than(0xf00000, 0x08) + goto_first(0x12) + label(0x01) + guard_try_fire_or_aim_at_target(0x2100, 0x0000, 0x01) + label(0x01) + guard_try_fire_or_aim_at_target_update(0x0100, 0x0000, 0x01) + label(0x01) + label(0x11) + ai_sleep + if_guard_has_stopped_moving(0x08) + goto_first(0x11) + label(0x08) + goto_first(0x00) + ai_list_end +}; +u8 ai_5[] = { + label(0x21) + label(0x27) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x27) + label(0x27) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x27) + label(0x27) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x20) + ai_sleep + debug_log 'D', 'a', '-', 'D', 'a', '!', '\n', '\0', + label(0x20) + ai_sleep + guard_try_running_to_bond_position(0x1f) + label(0x1f) + ai_sleep + if_guard_distance_to_bond_less_than(0x3200, 0x22) + if_guard_has_stopped_moving(0x01) + goto_first(0x20) + label(0x01) + ai_sleep + goto_first(0x20) + label(0x22) + ai_sleep + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_7[] = { + label(0x26) + ai_sleep + guard_bitfield_set_on(0x01) + guard_try_running_to_bond_position(0x06) + label(0x06) + ai_sleep + if_guard_has_stopped_moving(0x25) + if_guard_sees_bond(0x24) + goto_first(0x06) + label(0x24) + ai_sleep + jump_to_ai_list(0xfd, 0x0904) + label(0x25) + ai_sleep + goto_first(0x26) + ai_list_end +}; +u8 ai_8[] = { + label(0x26) + guard_try_running_to_bond_position(0x11) + label(0x11) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x25) + if_guard_has_stopped_moving(0x08) + goto_first(0x11) + label(0x06) + ai_sleep + if_guard_hits_less_than(0x06, 0x35) + if_guard_flags_is_set_on(0x10000000, 0x37) + label(0x35) + if_guard_has_stopped_moving(0x25) + if_guard_distance_to_bond_greater_than(0xc800, 0x01) + goto_first(0x06) + label(0x01) + goto_first(0x26) + label(0x25) + if_guard_and_bond_within_line_of_sight(0x01) + goto_next(0x08) + label(0x1f) + ai_sleep + if_guard_distance_to_bond_less_than(0x3200, 0x01) + if_guard_has_stopped_moving(0x01) + goto_first(0x26) + label(0x01) + if_guard_flags_is_set_on(0x10000000, 0x37) + label(0x29) + random_generate_seed + if_random_seed_greater_than(0x19, 0x01) + guard_try_sidestepping(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x40, 0x01) + guard_try_firing_walk(0x08) + label(0x01) + if_random_seed_greater_than(0x7f, 0x01) + guard_try_firing_run(0x08) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x7f, 0x0f) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x08) + label(0x0f) + guard_try_fire_or_aim_at_target_kneel(0x0100, 0x0000, 0x08) + label(0x08) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x01) + goto_next(0x11) + label(0x11) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + goto_next(0x12) + label(0x01) + goto_first(0x06) + label(0x12) + local_timer_reset_start + guard_try_running_to_bond_position(0x13) + label(0x13) + ai_sleep + if_guard_has_stopped_moving(0x01) + if_local_timer_greater_than(0x3c0000, 0x01) + goto_first(0x13) + label(0x01) + guard_animation_stop + debug_log 'w', 'a', 'i', 't', '\n', '\0', + guard_bitfield_set_off(0x04) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + guard_bitfield_set_on(0x04) + label(0x01) + local_timer_reset_start + label(0x14) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x01) + if_guard_shot_from_bond_missed(0x01) + ai_sleep + if_local_timer_less_than(0x580200, 0x02) + if_guard_bitfield_is_set_on(0x04, 0x03) + goto_first(0x26) + label(0x03) + goto_first(0x12) + label(0x02) + goto_first(0x14) + label(0x01) + goto_first(0x06) + label(0x37) + if_guard_hits_less_than(0x06, 0x01) + guard_flags_set_off(0x10000000) + label(0x01) + goto_first(0x29) + ai_list_end +}; +u8 ai_6[] = { + local_timer_reset_start + label(0x06) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x26) + if_bond_distance_to_pad_less_than(0x1400, 0x2823, 0x26) + if_local_timer_greater_than(0xb40000, 0x23) + goto_first(0x06) + label(0x23) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x96, 0x01) + if_bond_distance_to_pad_less_than(0x1e00, 0x2823, 0x26) + label(0x01) + ai_sleep + if_random_seed_greater_than(0xdc, 0x01) + if_bond_distance_to_pad_less_than(0x3200, 0x2823, 0x26) + label(0x01) + ai_sleep + if_random_seed_greater_than(0xf5, 0x01) + if_bond_distance_to_pad_less_than(0x4b00, 0x2823, 0x26) + label(0x01) + ai_sleep + if_random_seed_greater_than(0xfa, 0x01) + if_bond_distance_to_pad_less_than(0x6400, 0x2823, 0x26) + label(0x01) + ai_sleep + if_bond_distance_to_pad_less_than(0xc800, 0x2823, 0x26) + local_timer_reset_start + goto_first(0x06) + label(0x26) + ai_sleep + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_18[] = { + guard_flags_set_on(0x00000400) + guard_flags_set_on(0x00080000) + label(0x06) + ai_sleep + if_guard_and_bond_within_line_of_sight(0x01) + if_bond_in_room_with_pad(0x5e00, 0x01) + goto_first(0x06) + label(0x01) + text_print_top(0x1090) + music_xtrack_play(0x00, 0x00, 0xff) + label(0x07) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x29) + if_objective_bitfield_is_set_on(0x00010000, 0x29) + if_objective_bitfield_is_set_on(0x00040000, 0x29) + if_guard_shot_from_bond_missed(0x2a) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_bond_in_room_with_pad(0x5300, 0x01) + goto_first(0x07) + label(0x01) + local_timer_reset_start + objective_bitfield_set_on(0x00200000) + text_print_top(0x0990) + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x29) + if_objective_bitfield_is_set_on(0x00010000, 0x29) + if_objective_bitfield_is_set_on(0x00040000, 0x29) + if_guard_shot_from_bond_missed(0x2a) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + if_bond_distance_to_pad_less_than(0x1900, 0x5200, 0x11) + if_bond_in_room_with_pad(0x5800, 0x13) + if_local_timer_greater_than(0x080700, 0x2d) + if_local_timer_greater_than(0xb00400, 0x2c) + if_local_timer_greater_than(0x580200, 0x2b) + goto_first(0x04) + label(0x2b) + if_local_timer_greater_than(0x940200, 0x01) + text_print_top(0x0c90) + label(0x01) + goto_first(0x04) + label(0x2c) + if_local_timer_greater_than(0xec0400, 0x01) + text_print_top(0x0a90) + label(0x01) + goto_first(0x04) + label(0x2d) + if_local_timer_greater_than(0x440700, 0x01) + text_print_top(0x1990) + objective_bitfield_set_on(0x00080000) + label(0x01) + goto_first(0x04) + label(0x11) + ai_sleep + text_print_top(0x0f90) + ai_sleep + goto_next(0x2a) + label(0x13) + ai_sleep + text_print_top(0x1190) + ai_sleep + goto_next(0x2a) + label(0x2a) + objective_bitfield_set_on(0x00020000) + objective_bitfield_set_on(0x00080000) + label(0x29) + text_print_top(0x0d90) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x01) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_22[] = { + guard_flags_set_on(0x00080000) + label(0x04) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x29) + if_objective_bitfield_is_set_on(0x00010000, 0x29) + if_objective_bitfield_is_set_on(0x00020000, 0x29) + if_guard_shot_from_bond_missed(0x2a) + if_chr_was_damaged_since_last_check(0xfd, 0x2a) + goto_first(0x04) + label(0x2a) + objective_bitfield_set_on(0x00040000) + objective_bitfield_set_on(0x00080000) + label(0x29) + guard_try_fire_or_aim_at_target(0x0100, 0x0000, 0x01) + label(0x01) + label(0x12) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x01) + goto_first(0x12) + label(0x01) + text_print_top(0x0e90) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_19[] = { + guard_flags_set_on(0x00080000) + guard_try_fire_or_aim_at_target(0x2400, 0x4600, 0x06) + label(0x06) + ai_sleep + if_guard_shot_from_bond_missed(0x01) + if_chr_was_damaged_since_last_check(0xfd, 0x01) + if_objective_bitfield_is_set_on(0x00080000, 0x29) + goto_first(0x06) + label(0x01) + objective_bitfield_set_on(0x00010000) + objective_bitfield_set_on(0x00080000) + label(0x29) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x11) + if_chr_dying_or_dead(0x46, 0x15) + if_chr_does_not_exist(0x46, 0x15) + if_guard_is_firing(0x12) + if_guard_has_stopped_moving(0x14) + goto_first(0x29) + label(0x14) + guard_try_fire_or_aim_at_target(0x2400, 0x4600, 0x01) + label(0x01) + goto_first(0x29) + label(0x12) + if_guard_is_firing_and_using_180_range_flag(0x13) + goto_first(0x29) + label(0x13) + guard_try_fire_or_aim_at_target_update(0x0400, 0x4600, 0x01) + label(0x01) + objective_bitfield_set_on(0x00100000) + goto_first(0x29) + label(0x15) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + label(0x11) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_20[] = { + guard_flags_set_on(0x00080000) + guard_flags_set_on(0x80000000) + guard_surrenders + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00100000, 0x01) + if_chr_does_not_exist(0x47, 0x02) + if_chr_dying_or_dead(0x47, 0x02) + goto_first(0x06) + label(0x01) + chr_hit_body_part_with_item_damage(0xfd, 0x08, 0x06) + objective_bitfield_set_on(0x00400000) + jump_to_ai_list(0xfd, 0x0100) + label(0x02) + guard_looks_around_self + label(0x19) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x01) + goto_first(0x19) + label(0x01) + local_timer_reset_start + label(0x12) + ai_sleep + if_local_timer_greater_than(0xb00400, 0x01) + goto_first(0x12) + label(0x01) + guard_walks_to_pad(0x5100) + label(0x04) + ai_sleep + if_bond_in_room_with_pad(0x6200, 0x08) + if_guard_is_on_screen(0x35) + chr_try_teleporting_to_pad(0x46, 0x5100, 0x35) + label(0x35) + ai_sleep + if_object_not_destroyed(0x2a, 0x35) + goto_next(0x0a) + label(0x35) + if_object_not_destroyed(0x29, 0x35) + goto_next(0x0a) + label(0x35) + if_game_difficulty_less_than(0x02, 0x35) + if_local_timer_greater_than(0x941100, 0x2f) + if_local_timer_greater_than(0x3c0f00, 0x2e) + label(0x35) + if_local_timer_greater_than(0xb80b00, 0x2d) + if_local_timer_greater_than(0x600900, 0x2c) + label(0x05) + ai_sleep + if_guard_has_stopped_moving(0x01) + goto_first(0x04) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x64, 0x01) + guard_play_animation(0xac00, 0x0000, 0x4500, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x01) + if_random_seed_greater_than(0x96, 0x01) + guard_play_animation(0xad00, 0x0000, 0x4a00, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x01) + if_random_seed_greater_than(0xc8, 0x01) + guard_play_animation(0xae00, 0x0000, 0x4f00, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x01) + guard_play_animation(0xaf00, 0x0000, 0x5900, 0x00, 0x10) + objective_bitfield_set_on(0x00002000) + goto_first(0x04) + label(0x2c) + if_local_timer_greater_than(0x9c0900, 0x01) + text_print_top(0x1490) + label(0x01) + goto_first(0x05) + label(0x2d) + if_local_timer_greater_than(0xf40b00, 0x01) + text_print_top(0x1590) + objective_bitfield_set_on(0x00000100) + label(0x01) + goto_first(0x05) + label(0x2e) + if_local_timer_greater_than(0x780f00, 0x01) + text_print_top(0x1690) + label(0x01) + goto_first(0x05) + label(0x2f) + if_local_timer_greater_than(0xd01100, 0x01) + text_print_top(0x1790) + objective_bitfield_set_on(0x00000200) + label(0x01) + goto_first(0x05) + label(0x08) + jump_to_ai_list(0xfd, 0x1604) + label(0x0a) + jump_to_ai_list(0xfd, 0x1c04) + ai_list_end +}; +u8 ai_27[] = { + guard_try_facing_target(0x0100, 0x0000, 0x01) + label(0x01) + ai_sleep + if_objective_bitfield_is_set_on(0x00000800, 0x0a) + text_print_top(0x1a90) + local_timer_reset_start + label(0x04) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x0a) + if_local_timer_greater_than(0x2c0100, 0x01) + if_bond_in_room_with_pad(0x6200, 0x08) + goto_first(0x04) + label(0x01) + text_print_top(0x1b90) + label(0x05) + ai_sleep + if_chr_dying_or_dead(0xfd, 0x0a) + if_bond_in_room_with_pad(0x6200, 0x08) + goto_first(0x05) + label(0x08) + jump_to_ai_list(0xfd, 0x1604) + label(0x0a) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_21[] = { + text_print_top(0x1890) + label(0x38) + ai_sleep + guard_try_running_to_bond_position(0x06) + goto_first(0x38) + label(0x06) + ai_sleep + if_guard_distance_to_bond_less_than(0x1900, 0x11) + if_guard_has_stopped_moving(0x08) + goto_first(0x06) + label(0x39) + goto_first(0x38) + label(0x11) + guard_animation_stop + label(0x12) + ai_sleep + if_guard_distance_to_bond_less_than(0x0800, 0x3a) + if_guard_distance_to_bond_greater_than(0x2800, 0x08) + goto_first(0x12) + label(0x3a) + if_guard_counter_clockwise_direction_to_bond_less_than(0x40, 0x3b) + if_guard_counter_clockwise_direction_to_bond_greater_than(0xc0, 0x3b) + guard_looks_around_self + goto_next(0x13) + label(0x3b) + label(0x02) + guard_raises_arms + goto_next(0x13) + label(0x13) + ai_sleep + if_guard_has_stopped_moving(0x14) + goto_first(0x13) + label(0x14) + goto_first(0x11) + label(0x08) + goto_first(0x38) + ai_list_end +}; +u8 ai_17[] = { + ai_list_end +}; +u8 ai_9[] = { + debug_log 'D', 'o', 'n', 'e', '\n', '\0', + guard_set_health_total(0x5000) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x01) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0xc8, 0x01) + set_return_ai_list(0x0104) + jump_to_ai_list(0xfd, 0x0104) + label(0x01) + guard_bitfield_set_on(0x01) + set_return_ai_list(0x0200) + jump_to_ai_list(0xfd, 0x0800) + ai_list_end +}; +u8 ai_10[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7000) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x3700) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x3400) + label(0x01) + guard_set_pad_preset(0x4300) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_11[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7100) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x7500) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x6e00) + label(0x01) + guard_set_pad_preset(0x7800) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_12[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7100) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x6b00) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x7700) + label(0x01) + guard_set_pad_preset(0x7800) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_13[] = { + random_generate_seed + if_random_seed_greater_than(0x3c, 0x01) + guard_set_pad_preset(0x7500) + label(0x01) + if_random_seed_greater_than(0x78, 0x01) + guard_set_pad_preset(0x7400) + label(0x01) + if_random_seed_greater_than(0xb4, 0x01) + guard_set_pad_preset(0x7000) + label(0x01) + guard_set_pad_preset(0x7800) + label(0x02) + jump_to_ai_list(0xfd, 0x1004) + ai_list_end +}; +u8 ai_14[] = { + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x78, 0x35) + guard_set_health_total(0x3c00) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x08) + label(0x35) + guard_set_health_total(0x5000) + guard_try_spawning_hat(0xde00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x08) + label(0x08) + jump_to_ai_list(0xfd, 0x0104) + ai_list_end +}; +u8 ai_15[] = { + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x64, 0x37) + if_random_seed_greater_than(0x32, 0x35) + guard_set_armour(0x1400) + guard_set_health_total(0x2800) + guard_try_spawning_item(0xbd00, 0x0a, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_hat(0xdc00, 0x00000000, 0x08) + label(0x35) + guard_set_armour(0x2800) + guard_set_health_total(0x2800) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x01) + label(0x01) + guard_try_spawning_hat(0xde00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x08) + label(0x37) + guard_set_armour(0x2800) + guard_set_health_total(0x3c00) + guard_try_spawning_hat(0xdd00, 0x00000000, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000080, 0x01) + label(0x01) + guard_try_spawning_item(0xc300, 0x09, 0x00000090, 0x08) + label(0x08) + jump_to_ai_list(0xfd, 0x0704) + ai_list_end +}; +u8 ai_16[] = { + guard_set_armour(0x2800) + guard_set_health_total(0x3c00) + label(0x06) + ai_sleep + if_objective_num_complete(0x00, 0x08) + goto_first(0x06) + label(0x08) + jump_to_ai_list(0xfd, 0x0904) + ai_list_end +}; +u8 ai_28[] = { + label(0x04) + ai_sleep + goto_first(0x04) + ai_list_end +}; +u8 ai_29[] = { + label(0x06) + ai_sleep + if_bond_distance_to_pad_less_than(0x1400, 0x5200, 0x36) + if_objective_bitfield_is_set_on(0x00080000, 0x01) + if_bond_in_room_with_pad(0x5800, 0x35) + goto_first(0x06) + label(0x35) + if_objective_bitfield_is_set_on(0x00200000, 0x35) + goto_first(0x06) + label(0x35) + goto_next(0x36) + label(0x01) + local_timer_reset_start + label(0x11) + ai_sleep + if_local_timer_greater_than(0x4b0000, 0x01) + if_bond_distance_to_pad_less_than(0x1400, 0x5200, 0x01) + if_bond_in_room_with_pad(0x5800, 0x35) + goto_first(0x11) + label(0x35) + if_objective_bitfield_is_set_on(0x00200000, 0x35) + goto_first(0x11) + label(0x35) + label(0x36) + label(0x01) + local_timer_reset_start + door_close(0x00) + door_close(0x01) + label(0x14) + ai_sleep + if_local_timer_greater_than(0xb40000, 0x01) + goto_first(0x14) + label(0x01) + door_close(0x02) + door_close(0x03) + door_close(0x04) + door_close(0x05) + door_close(0x06) + door_close(0x07) + door_close(0x2e) + label(0x12) + ai_sleep + if_door_state_equal(0x01, 0x01, 0x01) + goto_first(0x12) + label(0x01) + chr_flags_set_on(0x45, 0x10000000) + chr_flags_set_on(0x48, 0x10000000) + chr_try_teleporting_to_pad(0x45, 0xba00, 0x01) + label(0x01) + chr_try_teleporting_to_pad(0x48, 0xba00, 0x01) + label(0x01) + chr_flags_set_on(0x45, 0x00040400) + chr_flags_set_on(0x48, 0x00040400) + label(0x13) + ai_sleep + goto_first(0x13) + ai_list_end +}; +u8 ai_30[] = { + label(0x06) + ai_sleep + if_bond_distance_to_pad_less_than(0x6400, 0xaf00, 0x01) + goto_first(0x06) + label(0x01) + debug_log 'G', 'o', '\n', '\0', + random_generate_seed + if_random_seed_greater_than(0x64, 0x01) + if_bond_damage_and_pickups_disabled(0x11) + chr_try_spawning_at_pad(0x04, 0xff, 0x0a00, 0x0a04, 0x00000000, 0x11) + label(0x01) + if_random_seed_greater_than(0xc8, 0x01) + if_bond_damage_and_pickups_disabled(0x11) + chr_try_spawning_at_pad(0x04, 0xff, 0x0c00, 0x0a04, 0x00000000, 0x11) + label(0x01) + if_bond_damage_and_pickups_disabled(0x11) + chr_try_spawning_at_pad(0x04, 0xff, 0x0d00, 0x0a04, 0x00000000, 0x11) + label(0x11) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x64, 0x01) + if_bond_damage_and_pickups_disabled(0x12) + chr_try_spawning_at_pad(0x04, 0xff, 0x0900, 0x0a04, 0x00000000, 0x12) + label(0x01) + if_bond_damage_and_pickups_disabled(0x12) + chr_try_spawning_at_pad(0x04, 0xff, 0x0b00, 0x0a04, 0x00000000, 0x12) + label(0x12) + ai_sleep + if_bond_in_room_with_pad(0x9000, 0x01) + goto_first(0x12) + label(0x01) + debug_log 'p', 'o', 'p', '2', '\n', '\0', + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x4100, 0x0b04, 0x00000000, 0x01) + label(0x01) + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x3a00, 0x0c04, 0x00000000, 0x01) + label(0x01) + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x3b00, 0x0d04, 0x00000000, 0x01) + label(0x01) + ai_sleep + if_bond_damage_and_pickups_disabled(0x01) + chr_try_spawning_at_pad(0x04, 0xff, 0x3500, 0x0e04, 0x00000000, 0x01) + label(0x01) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x50, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3600, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_random_seed_greater_than(0xa0, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3d00, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x4200, 0x0f04, 0x00000000, 0x02) + label(0x02) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x50, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3700, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_random_seed_greater_than(0xa0, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3e00, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x4000, 0x0f04, 0x00000000, 0x02) + label(0x02) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x50, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3800, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_random_seed_greater_than(0xa0, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3f00, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3400, 0x0f04, 0x00000000, 0x02) + label(0x02) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0x78, 0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3900, 0x0f04, 0x00000000, 0x02) + label(0x01) + if_bond_damage_and_pickups_disabled(0x02) + chr_try_spawning_at_pad(0x04, 0xff, 0x3c00, 0x0f04, 0x00000000, 0x02) + label(0x02) + debug_log 'p', 'o', 'p', '3', '\n', '\0', + label(0x13) + ai_sleep + goto_first(0x13) + ai_list_end +}; +u8 ai_31[] = { + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00080000, 0x01) + goto_first(0x06) + label(0x01) + local_timer_reset_start + label(0x11) + ai_sleep + if_chr_does_not_exist(0x46, 0x02) + if_chr_does_not_exist(0x48, 0x35) + label(0x02) + if_local_timer_greater_than(0x840300, 0x01) + goto_first(0x11) + label(0x35) + if_local_timer_greater_than(0x080700, 0x01) + goto_first(0x11) + label(0x01) + local_timer_reset_start + text_print_top(0x1290) + label(0x12) + if_local_timer_greater_than(0x2c0100, 0x01) + ai_sleep + goto_first(0x12) + label(0x01) + text_print_top(0x1390) + hud_countdown_set(0x3c00) + hud_countdown_start + hud_countdown_show + label(0x13) + ai_sleep + if_guard_bitfield_is_set_on(0x04, 0x35) + if_hud_countdown_less_than(0x1e00, 0x14) + label(0x35) + if_guard_bitfield_is_set_on(0x02, 0x35) + if_hud_countdown_less_than(0x1700, 0x02) + label(0x35) + if_guard_bitfield_is_set_on(0x01, 0x35) + if_hud_countdown_less_than(0x1400, 0x01) + label(0x35) + if_hud_countdown_less_than(0x0000, 0x15) + goto_first(0x13) + label(0x01) + sfx_play(0x3a00, 0x00) + sfx_set_channel_volume(0x00, 0x0000, 0x100e) + guard_bitfield_set_on(0x01) + goto_first(0x13) + label(0x02) + sfx_stop_channel(0x01) + sfx_play(0xd700, 0x02) + sfx_emit_from_pad(0x02, 0x4700, 0x0000) + guard_bitfield_set_on(0x02) + goto_first(0x13) + label(0x14) + sfx_play(0xd600, 0x03) + sfx_emit_from_pad(0x03, 0x4700, 0x0000) + ai_sleep + sfx_play(0xd800, 0x01) + sfx_emit_from_pad(0x01, 0x4700, 0x0000) + guard_bitfield_set_on(0x04) + goto_first(0x13) + label(0x15) + hud_countdown_hide + objective_bitfield_set_on(0x00000800) + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; +u8 ai_32[] = { + label(0x04) + local_timer_reset_start + sfx_play(0x4000, 0xff) + if_objective_num_complete(0x00, 0x01) + goto_next(0x06) + label(0x01) + sfx_play(0x3f00, 0xff) + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00000400, 0x08) + if_local_timer_greater_than(0x3c0000, 0x01) + goto_first(0x06) + label(0x01) + goto_first(0x04) + label(0x08) + sfx_play(0x3d00, 0xff) + label(0x11) + ai_sleep + goto_first(0x11) + ai_list_end +}; +u8 ai_33[] = { + label(0x04) + local_timer_reset_start + random_generate_seed + if_random_seed_greater_than(0xaf, 0x2d) + if_random_seed_greater_than(0x64, 0x2c) + label(0x2b) + sfx_play(0xf900, 0xff) + goto_next(0x06) + label(0x2c) + sfx_play(0xdf00, 0xff) + goto_next(0x06) + label(0x2d) + sfx_play(0x3300, 0xff) + goto_next(0x06) + label(0x06) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfe, 0x01) + random_generate_seed + if_random_seed_greater_than(0xfa, 0x11) + if_local_timer_greater_than(0x780000, 0x01) + goto_first(0x06) + label(0x11) + ai_sleep + random_generate_seed + if_random_seed_greater_than(0xfe, 0x01) + if_local_timer_greater_than(0xb40000, 0x01) + goto_first(0x11) + label(0x01) + if_objective_num_complete(0x00, 0x01) + goto_first(0x04) + label(0x01) + jump_to_ai_list(0xfd, 0x1804) + ai_list_end +}; +u8 ai_23[] = { + local_byte_2_set(0xfa) + local_byte_1_set(0x00) + label(0x11) + local_byte_1_add(0x28) + local_timer_reset_start + guard_bitfield_set_off(0x01) + if_local_byte_1_less_than(0x64, 0x04) + goto_next(0x08) + label(0x04) + ai_sleep + if_local_timer_greater_than(0x780000, 0x01) + goto_first(0x04) + label(0x01) + if_local_byte_1_less_than_random_seed(0x01) + goto_first(0x11) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0xaf, 0x2d) + if_random_seed_greater_than(0x64, 0x2c) + label(0x2b) + sfx_play(0xf900, 0xff) + goto_next(0x06) + label(0x2c) + sfx_play(0xdf00, 0xff) + goto_next(0x06) + label(0x2d) + sfx_play(0x3300, 0xff) + goto_next(0x06) + label(0x06) + goto_first(0x11) + label(0x08) + ai_sleep + objective_bitfield_set_on(0x00000400) + goto_first(0x08) + ai_list_end +}; +u8 ai_34[] = { + label(0x00) + ai_sleep + if_bond_distance_to_pad_less_than(0x3200, 0xcb00, 0x01) + goto_first(0x00) + label(0x01) + local_timer_reset_start + label(0x19) + ai_sleep + if_bond_is_dead(0x3d) + if_local_timer_greater_than(0xb40000, 0x01) + goto_first(0x19) + label(0x01) + bond_disable_damage_and_pickups + hud_hide_and_lock_controls_and_pause_mission_time(0x00) + screen_fade_to_black + if_chr_does_not_exist(0x46, 0x01) + if_chr_dying_or_dead(0x46, 0x01) + objective_bitfield_set_on(0x00800000) + label(0x01) + label(0x11) + ai_sleep + if_screen_fade_completed(0x01) + goto_first(0x11) + label(0x01) + if_chr_does_not_exist(0x46, 0x3c) + if_chr_dying_or_dead(0x46, 0x3c) + if_objective_all_completed(0x01) + jump_to_ai_list(0xfd, 0x0f00) + label(0x01) + chr_hide_all + trigger_fade_and_exit_level_on_button_press + bond_hide_weapons + ai_sleep + ai_sleep + ai_sleep + camera_switch(0x1d, 0x0200, 0x0000) + chr_flags_set_off(0x46, 0x00040000) + jump_to_ai_list(0x46, 0x1b04) + jump_to_ai_list(0xf8, 0x1a04) + ai_sleep + ai_sleep + screen_fade_from_black + local_timer_reset_start + label(0x12) + ai_sleep + if_local_timer_greater_than(0x2c0100, 0x01) + if_local_timer_greater_than(0xf00000, 0x2f) + if_local_timer_greater_than(0xb40000, 0x2e) + if_local_timer_greater_than(0x5a0000, 0x2d) + if_local_timer_greater_than(0x3c0000, 0x2c) + goto_first(0x12) + label(0x2c) + object_flags_1_set_off(0x19, 0x00000200) + object_destroy(0x19) + goto_first(0x12) + label(0x2d) + object_flags_1_set_off(0x1a, 0x00000200) + object_destroy(0x1a) + goto_first(0x12) + label(0x2e) + object_flags_1_set_off(0x1b, 0x00000200) + object_destroy(0x1b) + goto_first(0x12) + label(0x2f) + object_flags_1_set_off(0x1c, 0x00000200) + object_destroy(0x1c) + goto_first(0x12) + label(0x01) + screen_fade_to_black + label(0x13) + ai_sleep + if_screen_fade_completed(0x01) + goto_first(0x13) + label(0x01) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3c) + exit_level + jump_to_ai_list(0xfd, 0x0100) + label(0x3d) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_25[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_try_teleporting_to_pad(0xfd, 0xcd00, 0x01) + label(0x01) + guard_play_animation(0x5a00, 0xffff, 0xffff, 0x06, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_26[] = { + chr_flags_set_on(0xfd, 0x10000000) + chr_try_teleporting_to_pad(0xfd, 0xcc00, 0x01) + label(0x01) + guard_play_animation(0x5a00, 0x0700, 0xffff, 0x06, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_24[] = { + local_timer_reset_start + guard_play_animation(0x6400, 0x0000, 0x0100, 0x04, 0x10) + label(0x11) + ai_sleep + if_local_timer_greater_than(0x000000, 0x01) + goto_first(0x11) + label(0x01) + guard_play_animation(0x6400, 0x0100, 0xffff, 0x04, 0x10) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_35[] = { + label(0x11) + ai_sleep + if_camera_is_in_bond_swirl(0x01) + goto_first(0x11) + label(0x01) + jump_to_ai_list(0xf8, 0x1904) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_36[] = { + label(0x11) + ai_sleep + if_objective_bitfield_is_set_on(0x00000800, 0x01) + goto_first(0x11) + label(0x01) + local_timer_reset_start + label(0x12) + ai_sleep + if_local_timer_greater_than(0x660300, 0x32) + if_local_timer_greater_than(0x760200, 0x31) + if_local_timer_greater_than(0x3a0200, 0x30) + if_local_timer_greater_than(0xc20100, 0x2f) + if_local_timer_greater_than(0xd20000, 0x2e) + if_local_timer_greater_than(0x5a0000, 0x2d) + if_local_timer_greater_than(0x1e0000, 0x2c) + goto_first(0x12) + label(0x2c) + object_flags_1_set_off(0x0f, 0x00000200) + object_destroy(0x0f) + goto_first(0x12) + label(0x2d) + object_flags_1_set_off(0x10, 0x00000200) + object_destroy(0x10) + object_flags_1_set_off(0x2b, 0x00000200) + object_destroy(0x2b) + goto_first(0x12) + label(0x2e) + object_flags_1_set_off(0x11, 0x00000200) + object_destroy(0x11) + goto_first(0x12) + label(0x2f) + object_flags_1_set_off(0x12, 0x00000200) + object_destroy(0x12) + object_flags_1_set_off(0x2c, 0x00000200) + object_destroy(0x2c) + goto_first(0x12) + label(0x30) + object_flags_1_set_off(0x13, 0x00000200) + object_destroy(0x13) + goto_first(0x12) + label(0x31) + object_flags_1_set_off(0x14, 0x00000200) + object_destroy(0x14) + goto_first(0x12) + label(0x32) + object_flags_1_set_off(0x15, 0x00000200) + object_destroy(0x15) + object_flags_1_set_off(0x2d, 0x00000200) + object_destroy(0x2d) + goto_first(0x12) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_37[] = { + label(0x11) + ai_sleep + if_bond_in_room_with_pad(0x6200, 0x01) + goto_first(0x11) + label(0x01) + switch_fog_instantly + objective_bitfield_set_on(0x00001000) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_38[] = { + label(0x04) + ai_sleep + if_door_state_equal(0x1e, 0x01, 0x35) + door_unset_lock(0x1e, 0x02) + label(0x35) + if_door_state_equal(0x1f, 0x01, 0x35) + door_unset_lock(0x1f, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x20, 0x01, 0x35) + door_unset_lock(0x20, 0x02) + label(0x35) + if_door_state_equal(0x21, 0x01, 0x35) + door_unset_lock(0x21, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x22, 0x01, 0x35) + door_unset_lock(0x22, 0x02) + label(0x35) + if_door_state_equal(0x23, 0x01, 0x35) + door_unset_lock(0x23, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x24, 0x01, 0x35) + door_unset_lock(0x24, 0x02) + label(0x35) + if_door_state_equal(0x25, 0x01, 0x35) + door_unset_lock(0x25, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x26, 0x01, 0x35) + door_unset_lock(0x26, 0x02) + label(0x35) + if_door_state_equal(0x27, 0x01, 0x35) + door_unset_lock(0x27, 0x02) + label(0x35) + ai_sleep + if_door_state_equal(0x28, 0x01, 0x35) + door_unset_lock(0x28, 0x02) + label(0x35) + goto_first(0x04) + ai_list_end +}; +u8 ai_39[] = { + label(0x06) + ai_sleep + if_objective_bitfield_is_set_on(0x00002000, 0x01) + goto_first(0x06) + label(0x01) + local_timer_reset_start + label(0x11) + ai_sleep + if_local_timer_greater_than(0x3c0000, 0x01) + goto_first(0x11) + label(0x01) + random_generate_seed + if_random_seed_greater_than(0x80, 0x35) + sfx_play(0xb800, 0x07) + sfx_emit_from_object(0x07, 0x29, 0x0000) + label(0x35) + objective_bitfield_set_off(0x00002000) + goto_first(0x06) + label(0x08) + jump_to_ai_list(0xfd, 0x0100) + ai_list_end +}; +u8 ai_40[] = { + label(0x06) + ai_sleep + if_chr_does_not_exist(0x46, 0x01) + goto_first(0x06) + label(0x01) + text_print_top(0x1c90) + objective_bitfield_set_on(0x00400000) + label(0x08) + ai_sleep + goto_first(0x08) + ai_list_end +}; AIListRecord ailists[] = { /* index = 0 */ diff --git a/assets/rarewarelogo.c b/assets/rarewarelogo.c index baf72918..49f876a9 100644 --- a/assets/rarewarelogo.c +++ b/assets/rarewarelogo.c @@ -12,120 +12,120 @@ Gfx DL_0x0018[] = { }; //G_IM_FMT_RGBA, G_IM_SIZ_16b u32 imgRAre_0x0020[] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FCC4F, 0x0000ED0F, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FED11, 0x82C9ED0F, - 0x00000000, 0xED11ED11, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xED53ED53, 0x0000DCD1, 0x0000ED0F, 0xED0FCC8F, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xED0FED0F, 0xED0F82C8, 0xED0FED11, 0x49870000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000DCD1, 0xED51E4D1, - 0xF50FCC8F, 0x0000F50F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xED0F3184, 0xED0FED0F, 0xB3CD0000, 0xED0FED0F, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xF551E511, 0x0000F551, 0x0000F511, 0xF511CC8F, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FF50F, 0xED110000, - 0xE4CFF50F, 0xCC4F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x51C4F551, 0xF551DDD5, 0xF511D48F, 0x0000F551, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xED110000, 0xED0FF50F, 0xF50F0800, 0xD48DF50F, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF5517BCE, 0x934BF551, - 0x0000F551, 0xF551ED11, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xF50FF50F, 0xED110000, 0x0000F50F, 0xF50F59C6, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xC40DF551, 0xF5510000, 0xF551ED11, 0x0000F551, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF5110000, 0xF50FF50F, - 0xF50F9309, 0x0000F50F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xF5510000, 0xD48FF551, 0x0000FD51, 0xF551F50F, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xF50FF50F, 0xDCCF0000, 0x0000F54F, 0xF50FE4CF, - 0x00000000, 0x00000000, 0x00000000, 0x00001880, 0xF551F551, 0xF5D50000, - 0xFD51F50F, 0x0000FD51, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xE4CF0000, 0xF50FFD4F, 0xFD4FFD51, 0x0000B3CB, 0x62066206, 0x72466206, - 0x624682C8, 0x62066206, 0xB5150000, 0xFD51FD51, 0x0000FD4F, 0xFD4FDCD1, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFD4FFD4F, 0xD48F0000, - 0x00003902, 0xFD51FD51, 0xED0FECCF, 0xECCFECCF, 0xED0FED0F, 0xED11ED11, - 0xFD51FD93, 0x21040000, 0xFD4FF50F, 0x0000FD4F, 0x00000000, 0x00000000, - 0x00007246, 0x00000000, 0xFDD30000, 0xFD4FFD4F, 0xFD51FD51, 0x00000000, - 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0x08400000, 0xFD91FD93, - 0x0000FD4F, 0xFD4FF54F, 0x00000000, 0x00000000, 0x00000000, 0x0000ED0F, - 0xFD51FD51, 0xD5970000, 0x00000000, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, - 0xFD51FD51, 0xFD51FD91, 0xFD91FE99, 0x00000000, 0xFD4FFD4F, 0x0000FD4F, - 0x8B088B08, 0x8B088B08, 0xFD51FD51, 0x8B08FD4F, 0x9C190000, 0xFD51FD51, - 0x59C4FD51, 0x00000000, 0x8C4E8C4E, 0xFD51944F, 0x9C8FFD91, 0x8C4E8C4E, - 0x00000000, 0xFD91A38B, 0x0000FD4F, 0xFD4FFD4F, 0xFD4FFD4F, 0xFD51FD51, - 0xFD51FD51, 0xFD51FD51, 0xFD51ED0F, 0x5AD60000, 0x00000000, 0x59C4FD51, - 0xFD510840, 0x00000000, 0x00000000, 0x9B4BFD91, 0xFD91A4D5, 0x00000000, - 0xFD4FFD51, 0x0000FD4F, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, - 0x00000000, 0xFD4F7BD4, 0x0000FD91, 0x00000000, 0x00000000, 0xFD91FD51, - 0x9B4BFD91, 0x00000000, 0x00000000, 0xFD9120C2, 0x0000DC8D, 0xFD91FD91, - 0xFD91FD91, 0xFD91FD91, 0xFD91FD91, 0xFD91FD91, 0xFD9120C2, 0x00000000, - 0x00000000, 0x0000D48D, 0xFD91FD51, 0x00000000, 0x00000000, 0x9B4BFD91, - 0xFE572104, 0x00000000, 0xFD91FD51, 0x0000DC8D, 0x8C4E8C4E, 0x8C4E8C4E, - 0x8B08FD91, 0x8C4E8B08, 0x00000000, 0xFD91FD91, 0x0000A38B, 0x00000000, - 0x00000000, 0xFD91FD91, 0xFD91FD91, 0x00000000, 0x00000000, 0xC44D0000, - 0x0000DCCD, 0xFD91FD91, 0x00000000, 0x00000000, 0x00000000, 0x0000DCCF, - 0xFD91FD91, 0xB40D0000, 0x00000000, 0x00000000, 0xFD91FD91, 0x29020000, - 0x00000000, 0xFD91FD91, 0xC5130000, 0x00000000, 0xFD91FD91, 0x0000DCCD, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFD910000, 0xFD91FD91, - 0x00000000, 0x00000000, 0xDCCF0000, 0xFD91FD91, 0xFD91FD93, 0x00000000, - 0x00000000, 0x838C0000, 0x0000DCCD, 0xFD91FD91, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xF54FFD91, 0xFD914144, 0x00000000, 0x00000000, - 0xED51FD91, 0xE50F0000, 0x00008B08, 0xFD91FDD3, 0x49840000, 0x00000000, - 0xFD91FD91, 0x0000DCCD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xFD915A06, 0x7AC8FD91, 0x00000000, 0x00000000, 0xFD910800, 0xCC8DFD91, - 0xFDD1FDD3, 0x0000ED51, 0x00000000, 0x39C80000, 0x0000DCCD, 0xFD91FD91, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3944FD91, 0xFD91934B, - 0x00000000, 0x00000000, 0x5A06FD91, 0xFD9151C4, 0x0000F591, 0xFDD1E511, - 0x00000000, 0x00000000, 0xFD91FD91, 0x0000DCCF, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0xFDD1A3CD, 0x9349FDD1, 0x00000000, 0x00000000, - 0xFDD1ABCB, 0x0000FD91, 0xFDD1AC0D, 0x0000FD91, 0x00000000, 0x00000000, - 0x0000DCCF, 0xFDD1FDD1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x9349FDD1, 0xFDD1AC4F, 0x00000000, 0x00000000, 0x0000FD91, 0xFDD1D4CF, - 0x49C4FDD1, 0xFDD1730C, 0x00000000, 0x00000000, 0xFDD1FDD1, 0x0000BC0D, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFDD149C4, 0xED4FFDD1, - 0x00000000, 0x00000000, 0xFDD1FDD1, 0x00004144, 0xFDD318C2, 0xC44DFDD1, - 0x00000000, 0x00000000, 0x0000D4CF, 0xFDD1FDD1, 0x00000000, 0x00000000, - 0x00000000, 0x0000E50F, 0xFDD1FDD1, 0xD4CF3148, 0x00000000, 0x00000000, - 0x00000840, 0xFDD1FDD1, 0xFDD1FDD1, 0xF5910000, 0x00000000, 0x00000000, - 0xFDD1FDD1, 0x0000DD0F, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, - 0x9B8B0000, 0xFDD1FDD1, 0x00000000, 0x00000000, 0xFDD1FDD1, 0x00000000, - 0xF69B0000, 0xFDD1FDD1, 0x00000000, 0x00000000, 0x0000B40D, 0xFDD1FDD1, - 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0x5A040000, - 0x00000000, 0x00000000, 0x00000000, 0xFDD1FDD1, 0xFDD1FDD1, 0x83080000, - 0x00000000, 0x00000000, 0xFE11FE11, 0x0000B40D, 0xFE11FE11, 0xFE11FE11, - 0xFE11FE11, 0xFE11FE11, 0x00000000, 0xFE11EEA5, 0x00000000, 0x00000000, - 0x3944FE13, 0x00000000, 0x84140000, 0xFE13FE13, 0x00000000, 0x00000000, - 0x0000B40D, 0xFE11FE11, 0xFE11FE11, 0xFE11FE11, 0xFE11FE11, 0xFE11FE13, - 0x8B4A0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20C2FE13, - 0xFE13FE13, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x49847A88, 0x00000000, 0x00000000, 0x6A4682C8, - 0x82C80000, 0x00000000, 0x00000000, 0x418482CA, 0x00000000, 0x82C8DCCF, - 0xED0FABCB, 0x00000000, 0x00000000, 0xED0F4984, 0x82C8ED11, 0x00000000, - 0x8AC8E4D1, 0x00000000, 0x00000000, 0xED0F82C9, 0xE4CF7A89, 0x00000000, - 0x00000000, 0xB3CDCD13, 0x00000000, 0x8AC8F511, 0xF50F82C9, 0x00000000, - 0x00000000, 0x8AC9B3CD, 0xE4CF8B08, 0x00000000, 0x8B08F551, 0x00000000, - 0x00000000, 0xF50F7AC8, 0x7A86F50F, 0x39443902, 0x39424184, 0xF5517B0A, - 0x00000000, 0x8B08F50F, 0xFD4F82C8, 0x000020C2, 0xF50FF50F, 0x1040FD51, - 0xFD510840, 0xF511F551, 0x8B08FD4F, 0x51845184, 0x7246C40D, 0xFD516ACC, - 0x0000DC8D, 0xE50FCCCF, 0xCCCFE551, 0xED530000, 0xFD4FFD51, 0x8B08FD4F, - 0xDCD118C6, 0xFD51FD51, 0xCC4D0000, 0x0000A34B, 0xBC4F0000, 0x0000CC4D, - 0x7A86FD91, 0xCD0FCD0F, 0xCC8FE4CF, 0xCC4D0000, 0x00006A46, 0xFD910000, - 0x0000E50F, 0x830A0000, 0x00000000, 0x7A86FD91, 0xFD917AC9, 0x00004184, - 0xFD9149C4, 0x00000000, 0x5A480000, 0x0000FD91, 0x7A86FD91, 0x00000000, - 0x00000000, 0xDCCFABCB, 0x00000000, 0xED518B08, 0x6A46FDD3, 0x29040000, - 0x00000000, 0x7AC6FD91, 0xB40BCC8F, 0x00000000, 0xA38BC44D, 0x00000000, - 0x00000000, 0x8B08E511, 0x7286FDD1, 0x00000000, 0x00000000, 0xDD0FC48D, - 0x00000000, 0x5A06F591, 0xC48DAC0D, 0x00000000, 0x8B488B48, 0x7AC8FDD1, - 0xFDD17288, 0x8B48C44D, 0x0000FDD1, 0x00000000, 0x00000000, 0xFDD18B8C, - 0x6246FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFE171882, 0x00000000, 0x0000D4CF, - 0xFE114A08, 0x00000000, 0x934B934B, 0x3944934B, 0x29020000, 0x934B934B, - 0x00005206, 0x00000000, 0x00000000, 0x934B0000, 0x8B090000, 0x0000A38B, - 0x7A880000, 0x0000930B, 0x0000BC0D, 0xBC0D0000, 0x0000BC4F, 0xAB8B0000, - 0xC40D0000, 0x0840BC0D, 0xA38B9B4B, 0x9B4BA3CD, 0xCC4D9B8D, 0xCC4DAB8B, - 0xA3CD72C8, 0x6A46A3CB, 0xBC0D72C8, 0x83089B4B, 0x20829B8B, 0x8B084184, - 0x0000C44D, 0xBC0D0000, 0xBC0D0840, 0x0000B40D, 0xBC4D49C4, 0x5A06C48D, - 0x00009B8B, 0xC48F0000, 0xCCCF5A48, 0x8B4ACCCD, 0x83080000, 0x00005206, - 0x5A066206, 0x51C45A06, 0x934B9B8B, 0x9309930B, 0x82C882C8, 0x62466A46, - 0x41845A06, 0x9B8B938B, 0x7A887A88, 0x00000000, 0x00000000, 0x8B485A06, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FCC4F, 0x0000ED0F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FED11, 0x82C9ED0F, + 0x00000000, 0xED11ED11, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xED53ED53, 0x0000DCD1, 0x0000ED0F, 0xED0FCC8F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xED0FED0F, 0xED0F82C8, 0xED0FED11, 0x49870000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000DCD1, 0xED51E4D1, + 0xF50FCC8F, 0x0000F50F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xED0F3184, 0xED0FED0F, 0xB3CD0000, 0xED0FED0F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xF551E511, 0x0000F551, 0x0000F511, 0xF511CC8F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xED0FF50F, 0xED110000, + 0xE4CFF50F, 0xCC4F0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x51C4F551, 0xF551DDD5, 0xF511D48F, 0x0000F551, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xED110000, 0xED0FF50F, 0xF50F0800, 0xD48DF50F, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF5517BCE, 0x934BF551, + 0x0000F551, 0xF551ED11, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xF50FF50F, 0xED110000, 0x0000F50F, 0xF50F59C6, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xC40DF551, 0xF5510000, 0xF551ED11, 0x0000F551, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xF5110000, 0xF50FF50F, + 0xF50F9309, 0x0000F50F, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xF5510000, 0xD48FF551, 0x0000FD51, 0xF551F50F, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xF50FF50F, 0xDCCF0000, 0x0000F54F, 0xF50FE4CF, + 0x00000000, 0x00000000, 0x00000000, 0x00001880, 0xF551F551, 0xF5D50000, + 0xFD51F50F, 0x0000FD51, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xE4CF0000, 0xF50FFD4F, 0xFD4FFD51, 0x0000B3CB, 0x62066206, 0x72466206, + 0x624682C8, 0x62066206, 0xB5150000, 0xFD51FD51, 0x0000FD4F, 0xFD4FDCD1, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFD4FFD4F, 0xD48F0000, + 0x00003902, 0xFD51FD51, 0xED0FECCF, 0xECCFECCF, 0xED0FED0F, 0xED11ED11, + 0xFD51FD93, 0x21040000, 0xFD4FF50F, 0x0000FD4F, 0x00000000, 0x00000000, + 0x00007246, 0x00000000, 0xFDD30000, 0xFD4FFD4F, 0xFD51FD51, 0x00000000, + 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0x08400000, 0xFD91FD93, + 0x0000FD4F, 0xFD4FF54F, 0x00000000, 0x00000000, 0x00000000, 0x0000ED0F, + 0xFD51FD51, 0xD5970000, 0x00000000, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, + 0xFD51FD51, 0xFD51FD91, 0xFD91FE99, 0x00000000, 0xFD4FFD4F, 0x0000FD4F, + 0x8B088B08, 0x8B088B08, 0xFD51FD51, 0x8B08FD4F, 0x9C190000, 0xFD51FD51, + 0x59C4FD51, 0x00000000, 0x8C4E8C4E, 0xFD51944F, 0x9C8FFD91, 0x8C4E8C4E, + 0x00000000, 0xFD91A38B, 0x0000FD4F, 0xFD4FFD4F, 0xFD4FFD4F, 0xFD51FD51, + 0xFD51FD51, 0xFD51FD51, 0xFD51ED0F, 0x5AD60000, 0x00000000, 0x59C4FD51, + 0xFD510840, 0x00000000, 0x00000000, 0x9B4BFD91, 0xFD91A4D5, 0x00000000, + 0xFD4FFD51, 0x0000FD4F, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, 0xFD51FD51, + 0x00000000, 0xFD4F7BD4, 0x0000FD91, 0x00000000, 0x00000000, 0xFD91FD51, + 0x9B4BFD91, 0x00000000, 0x00000000, 0xFD9120C2, 0x0000DC8D, 0xFD91FD91, + 0xFD91FD91, 0xFD91FD91, 0xFD91FD91, 0xFD91FD91, 0xFD9120C2, 0x00000000, + 0x00000000, 0x0000D48D, 0xFD91FD51, 0x00000000, 0x00000000, 0x9B4BFD91, + 0xFE572104, 0x00000000, 0xFD91FD51, 0x0000DC8D, 0x8C4E8C4E, 0x8C4E8C4E, + 0x8B08FD91, 0x8C4E8B08, 0x00000000, 0xFD91FD91, 0x0000A38B, 0x00000000, + 0x00000000, 0xFD91FD91, 0xFD91FD91, 0x00000000, 0x00000000, 0xC44D0000, + 0x0000DCCD, 0xFD91FD91, 0x00000000, 0x00000000, 0x00000000, 0x0000DCCF, + 0xFD91FD91, 0xB40D0000, 0x00000000, 0x00000000, 0xFD91FD91, 0x29020000, + 0x00000000, 0xFD91FD91, 0xC5130000, 0x00000000, 0xFD91FD91, 0x0000DCCD, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFD910000, 0xFD91FD91, + 0x00000000, 0x00000000, 0xDCCF0000, 0xFD91FD91, 0xFD91FD93, 0x00000000, + 0x00000000, 0x838C0000, 0x0000DCCD, 0xFD91FD91, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xF54FFD91, 0xFD914144, 0x00000000, 0x00000000, + 0xED51FD91, 0xE50F0000, 0x00008B08, 0xFD91FDD3, 0x49840000, 0x00000000, + 0xFD91FD91, 0x0000DCCD, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFD915A06, 0x7AC8FD91, 0x00000000, 0x00000000, 0xFD910800, 0xCC8DFD91, + 0xFDD1FDD3, 0x0000ED51, 0x00000000, 0x39C80000, 0x0000DCCD, 0xFD91FD91, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x3944FD91, 0xFD91934B, + 0x00000000, 0x00000000, 0x5A06FD91, 0xFD9151C4, 0x0000F591, 0xFDD1E511, + 0x00000000, 0x00000000, 0xFD91FD91, 0x0000DCCF, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0xFDD1A3CD, 0x9349FDD1, 0x00000000, 0x00000000, + 0xFDD1ABCB, 0x0000FD91, 0xFDD1AC0D, 0x0000FD91, 0x00000000, 0x00000000, + 0x0000DCCF, 0xFDD1FDD1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x9349FDD1, 0xFDD1AC4F, 0x00000000, 0x00000000, 0x0000FD91, 0xFDD1D4CF, + 0x49C4FDD1, 0xFDD1730C, 0x00000000, 0x00000000, 0xFDD1FDD1, 0x0000BC0D, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFDD149C4, 0xED4FFDD1, + 0x00000000, 0x00000000, 0xFDD1FDD1, 0x00004144, 0xFDD318C2, 0xC44DFDD1, + 0x00000000, 0x00000000, 0x0000D4CF, 0xFDD1FDD1, 0x00000000, 0x00000000, + 0x00000000, 0x0000E50F, 0xFDD1FDD1, 0xD4CF3148, 0x00000000, 0x00000000, + 0x00000840, 0xFDD1FDD1, 0xFDD1FDD1, 0xF5910000, 0x00000000, 0x00000000, + 0xFDD1FDD1, 0x0000DD0F, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, + 0x9B8B0000, 0xFDD1FDD1, 0x00000000, 0x00000000, 0xFDD1FDD1, 0x00000000, + 0xF69B0000, 0xFDD1FDD1, 0x00000000, 0x00000000, 0x0000B40D, 0xFDD1FDD1, + 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0x5A040000, + 0x00000000, 0x00000000, 0x00000000, 0xFDD1FDD1, 0xFDD1FDD1, 0x83080000, + 0x00000000, 0x00000000, 0xFE11FE11, 0x0000B40D, 0xFE11FE11, 0xFE11FE11, + 0xFE11FE11, 0xFE11FE11, 0x00000000, 0xFE11EEA5, 0x00000000, 0x00000000, + 0x3944FE13, 0x00000000, 0x84140000, 0xFE13FE13, 0x00000000, 0x00000000, + 0x0000B40D, 0xFE11FE11, 0xFE11FE11, 0xFE11FE11, 0xFE11FE11, 0xFE11FE13, + 0x8B4A0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20C2FE13, + 0xFE13FE13, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0x00000000, 0x00000000, 0x49847A88, 0x00000000, 0x00000000, 0x6A4682C8, + 0x82C80000, 0x00000000, 0x00000000, 0x418482CA, 0x00000000, 0x82C8DCCF, + 0xED0FABCB, 0x00000000, 0x00000000, 0xED0F4984, 0x82C8ED11, 0x00000000, + 0x8AC8E4D1, 0x00000000, 0x00000000, 0xED0F82C9, 0xE4CF7A89, 0x00000000, + 0x00000000, 0xB3CDCD13, 0x00000000, 0x8AC8F511, 0xF50F82C9, 0x00000000, + 0x00000000, 0x8AC9B3CD, 0xE4CF8B08, 0x00000000, 0x8B08F551, 0x00000000, + 0x00000000, 0xF50F7AC8, 0x7A86F50F, 0x39443902, 0x39424184, 0xF5517B0A, + 0x00000000, 0x8B08F50F, 0xFD4F82C8, 0x000020C2, 0xF50FF50F, 0x1040FD51, + 0xFD510840, 0xF511F551, 0x8B08FD4F, 0x51845184, 0x7246C40D, 0xFD516ACC, + 0x0000DC8D, 0xE50FCCCF, 0xCCCFE551, 0xED530000, 0xFD4FFD51, 0x8B08FD4F, + 0xDCD118C6, 0xFD51FD51, 0xCC4D0000, 0x0000A34B, 0xBC4F0000, 0x0000CC4D, + 0x7A86FD91, 0xCD0FCD0F, 0xCC8FE4CF, 0xCC4D0000, 0x00006A46, 0xFD910000, + 0x0000E50F, 0x830A0000, 0x00000000, 0x7A86FD91, 0xFD917AC9, 0x00004184, + 0xFD9149C4, 0x00000000, 0x5A480000, 0x0000FD91, 0x7A86FD91, 0x00000000, + 0x00000000, 0xDCCFABCB, 0x00000000, 0xED518B08, 0x6A46FDD3, 0x29040000, + 0x00000000, 0x7AC6FD91, 0xB40BCC8F, 0x00000000, 0xA38BC44D, 0x00000000, + 0x00000000, 0x8B08E511, 0x7286FDD1, 0x00000000, 0x00000000, 0xDD0FC48D, + 0x00000000, 0x5A06F591, 0xC48DAC0D, 0x00000000, 0x8B488B48, 0x7AC8FDD1, + 0xFDD17288, 0x8B48C44D, 0x0000FDD1, 0x00000000, 0x00000000, 0xFDD18B8C, + 0x6246FDD1, 0xFDD1FDD1, 0xFDD1FDD1, 0xFE171882, 0x00000000, 0x0000D4CF, + 0xFE114A08, 0x00000000, 0x934B934B, 0x3944934B, 0x29020000, 0x934B934B, + 0x00005206, 0x00000000, 0x00000000, 0x934B0000, 0x8B090000, 0x0000A38B, + 0x7A880000, 0x0000930B, 0x0000BC0D, 0xBC0D0000, 0x0000BC4F, 0xAB8B0000, + 0xC40D0000, 0x0840BC0D, 0xA38B9B4B, 0x9B4BA3CD, 0xCC4D9B8D, 0xCC4DAB8B, + 0xA3CD72C8, 0x6A46A3CB, 0xBC0D72C8, 0x83089B4B, 0x20829B8B, 0x8B084184, + 0x0000C44D, 0xBC0D0000, 0xBC0D0840, 0x0000B40D, 0xBC4D49C4, 0x5A06C48D, + 0x00009B8B, 0xC48F0000, 0xCCCF5A48, 0x8B4ACCCD, 0x83080000, 0x00005206, + 0x5A066206, 0x51C45A06, 0x934B9B8B, 0x9309930B, 0x82C882C8, 0x62466A46, + 0x41845A06, 0x9B8B938B, 0x7A887A88, 0x00000000, 0x00000000, 0x8B485A06, 0x7A880000, 0x00000000 }; @@ -805,7 +805,7 @@ Vtx verts31B8[] = { {0x0024, 0x009A, 0x000F, 0x0000, 0x016F, 0x0876, 0x1F, 0x43, 0x66, 0x00}, {0x0026, 0x009F, 0x000B, 0x0000, 0x0184, 0x08A1, 0x1F, 0x43, 0x66, 0x00}, {0x0038, 0x0091, 0x000B, 0x0000, 0x0242, 0x082A, 0x39, 0x33, 0x64, 0x00} - + }; Vtx verts3298[] = { {0x0062, 0xFF48, 0x000B, 0x0000, 0xFE37, 0x00CB, 0x0C, 0xE4, 0x7B, 0x00}, @@ -1516,7 +1516,7 @@ Gfx D_02004758[] = { gsSP1Triangle(13, 1, 2, 0), gsSP1Triangle(3, 4, 5, 0), gsSP1Triangle(3, 5, 6, 0), - + gsSPVertex(verts4258, 16, 0), gsSP1Triangle(8, 9, 10, 0), gsSP1Triangle(8, 10, 11, 0), diff --git a/docs/SetupGuide.md b/docs/SetupGuide.md index c6d00bf0..d7bc5af7 100644 --- a/docs/SetupGuide.md +++ b/docs/SetupGuide.md @@ -40,7 +40,6 @@ The requirements for Debian / Ubuntu should be: ```bash sudo apt-get update sudo apt-get install binutils-mips-linux-gnu make git python3 -sudo apt-get install libcapstone-dev pkg-config ``` If you don't have host development tools already installed then you will also need to install `build-essential`: @@ -49,6 +48,14 @@ If you don't have host development tools already installed then you will also ne sudo apt-get install build-essential ``` +> **Note:** `libcapstone-dev`/`pkg-config` are **no longer required**. Older +> versions of this repo's recompiled IDO toolchain (`tools/ido5.3_recomp`, +> see [Recompile IDO](#recompile-ido) below) linked against the system +> `libcapstone` library for MIPS disassembly. The current toolchain vendors +> its own disassembly library (`rabbitizer`) instead, so there's nothing +> extra to install for it beyond the compiler already covered by +> `build-essential` above. + Additionally, [qemu-irix](https://github.com/n64decomp/qemu-irix/releases) is needed. Download the package to a desired location and install with: ```bash @@ -71,13 +78,29 @@ Alternatively, you can start the container with `docker compose up` and connect ### Recompile IDO -Recompile IDO for your platform to increase compilation speed +This project can compile the ROM's C code in one of two ways, controlled by the `IDO_RECOMP` build option (see +[Build the ROM](#build-the-rom)): + +* `IDO_RECOMP=YES` (the default) — uses `tools/ido5.3_recomp/cc`, a copy of the original SGI IRIX 5.3 IDO compiler + that has been *statically recompiled* into a native x86-64 Linux program. Since it runs directly on your machine + instead of under an emulator, it's noticeably faster to compile with — this is why the setup step below exists. +* `IDO_RECOMP=NO` — runs the original, unmodified IRIX IDO binaries (`tools/irix/root/usr/bin/cc` etc.) under the + [qemu-irix](https://github.com/n64decomp/qemu-irix/releases) user-mode emulator instead. Slower, but useful as a + lower-risk reference if you ever suspect the recompiled toolchain is misbehaving. + +The recompiled toolchain isn't checked into git — it's generated locally the first time it's needed, from the +original IDO binaries in `tools/irix/root`. A plain `make` from the repo root builds it automatically if it's +missing (wired up via `tools/Makefile`), so most people never need to run this step by hand. To build it explicitly +(e.g. to watch its own build output, or force a rebuild after changing it): ```bash cd tools/ido5.3_recomp make ``` +For what this toolchain actually *is*, where it comes from upstream, and how to update it to a newer version, see +[`tools/ido5.3_recomp/README.md`](../tools/ido5.3_recomp/README.md). + Be careful! If you previously compiled GoldenEye on a different operating system or CPU architecture, the binaries (gzip, n64cksum) that were compiled will be incompatible. You must delete them. diff --git a/include/gbi_extension.h b/include/gbi_extension.h index acaa9cd2..788607eb 100644 --- a/include/gbi_extension.h +++ b/include/gbi_extension.h @@ -4,8 +4,8 @@ #define TRI4_Ext -/** - * This file should contain most of the extensions to gbi avoiding loosing +/** + * This file should contain most of the extensions to gbi avoiding loosing * changes should the OS ever be updated. */ @@ -25,7 +25,7 @@ #define MASK_512 9 #define MASK_1024 10 -typedef enum +typedef enum { TEXTURETYPE_LOD, TEXTURETYPE_DETAIL, @@ -144,7 +144,7 @@ typedef enum } /** - Source compatable F3DEX gSP2Triangles for GE + Source compatible F3DEX gSP2Triangles for GE Vertex index is 0-15, to use a higher index use gSP1Triangle */ #define gSP2Triangles(pkt, x1, y1, z1, flag0, x2, y2, z2, flag1) \ @@ -178,19 +178,18 @@ typedef enum Use Texture from bank. If detail, use shift eg 15 for 2x detail per base texel, 14 fpr 4x. - Confirm params from decomp in CO expand function - + Confirm params from decomp in CO expand function + @param cms: s-axis mirror, no-mirror, wrap, and clamp flags - @param cmt: t-axis mirror, no-mirror, wrap, and clamp flags eg G_TX_CLAMP + @param cmt: t-axis mirror, no-mirror, wrap, and clamp flags eg G_TX_CLAMP @param tile: Number of tiles - @param shifts: s-coordinate shift value or G_TX_NOLOD - @param shiftt: t-coordinate shift value or G_TX_NOLOD - @param type: texture type: E.g. TEXTURETYPE_DETAIL + @param shifts: s-coordinate shift value or G_TX_NOLOD + @param shiftt: t-coordinate shift value or G_TX_NOLOD + @param type: texture type: E.g. TEXTURETYPE_DETAIL @param minlevel: Clamp at tile 0 + frac (eg, 0.5) @param detail_id: Detail Texture ID @param texture_id: Texture ID */ - #define gsSPUseTexture(cms, cmt, tile, shifts, shiftt, type, minlevel, detail_id, texture_id) \ { \ { \ @@ -207,54 +206,6 @@ typedef enum } \ } - -/** - * GoldenEye Custom Vertex Commands - * - * These commands use different encodings than standard F3DEX macros. - * Opcode 0x01: Custom GE format with simplified encoding - * Opcode 0x04: Uses (v0+n)*2 encoding instead of v0*2 - */ - -/* GoldenEye Matrix command (opcode 0x01) - G_MTX */ -#define G_MTX_GE 0x01 -#define G_VTX_GE 0x04 - -#define gsSPMatrixGE(m, p) \ -{ \ - { \ - (_SHIFTL(G_MTX_GE, 24, 8) | \ - _SHIFTL((p), 16, 8) | \ - _SHIFTL(sizeof(Mtx), 0, 16)), \ - (unsigned int)(m) \ - } \ -} - -/* RARE vertex load (opcode 0x04) - Custom encoding for GE/PD Tri4 support */ -/* Format: cmd(24-31) | (((v0+n)<<1)|flag)(16-23) | sizeof(Vtx)*n(0-15) */ -#define gsSPVertexGE(v, n, v0, flag) \ -{ \ - { \ - (_SHIFTL(G_VTX_GE, 24, 8) | \ - _SHIFTL((((v0) + (n)) << 1) | (flag), 16, 8) | \ - _SHIFTL(sizeof(Vtx) * (n), 0, 16)), \ - (unsigned int)(v) \ - } \ -} - -/* F3DEX gsSP1Triangle without flag rotation (GoldenEye uses simpler encoding) */ -/* Format: w0=0xBF000000, w1=(v0*2<<16)|(v1*2<<8)|(v2*2) */ -#define gsSP1TriangleGE(v0, v1, v2, flag) \ -{ \ - { \ - 0xBF000000, \ - (_SHIFTL((v0)*2, 16, 8) | \ - _SHIFTL((v1)*2, 8, 8) | \ - _SHIFTL((v2)*2, 0, 8)) \ - } \ -} - - #endif /** @@ -281,8 +232,8 @@ typedef enum Override of Load Texture Block without the PipeSync. Loads a Texture and sets its tile @param timg: Address of the texture image. E.g. IMAGESEG(IMAGE_SMOKE_0) - @param fmt: Texture image format: E.g. G_IM_FMT_IA - @param siz: Pixel component size: E.g. G_IM_SIZ_8b + @param fmt: Texture image format: E.g. G_IM_FMT_IA + @param siz: Pixel component size: E.g. G_IM_SIZ_8b @param width: Texture image width @param height: Texture image height @param pal: Location of palette for 4-bit color index texture (0 - 15) @@ -290,8 +241,8 @@ typedef enum @param cmt: t-axis mirror, no-mirror, wrap, and clamp flags @param masks: s-axis mask (0 - 15 or G_TX_NOMASK) @param maskt: t-axis mask (0 - 15 or G_TX_NOMASK) - @param shifts: s-coordinate shift value or G_TX_NOLOD - @param shiftt: t-coordinate shift value or G_TX_NOLOD + @param shifts: s-coordinate shift value or G_TX_NOLOD + @param shiftt: t-coordinate shift value or G_TX_NOLOD */ #define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ { \ @@ -308,8 +259,8 @@ typedef enum Override of Load Texture Block (static) without the PipeSync. Loads a Texture and sets its tile @param timg: Address of the texture image. E.g. IMAGESEG(IMAGE_SMOKE_0) - @param fmt: Texture image format: E.g. G_IM_FMT_IA - @param siz: Pixel component size: E.g. G_IM_SIZ_8b + @param fmt: Texture image format: E.g. G_IM_FMT_IA + @param siz: Pixel component size: E.g. G_IM_SIZ_8b @param width: Texture image width @param height: Texture image height @param pal: Location of palette for 4-bit color index texture (0 - 15) @@ -317,8 +268,8 @@ typedef enum @param cmt: t-axis mirror, no-mirror, wrap, and clamp flags @param masks: s-axis mask (0 - 15 or G_TX_NOMASK) @param maskt: t-axis mask (0 - 15 or G_TX_NOMASK) - @param shifts: s-coordinate shift value or G_TX_NOLOD - @param shiftt: t-coordinate shift value or G_TX_NOLOD + @param shifts: s-coordinate shift value or G_TX_NOLOD + @param shiftt: t-coordinate shift value or G_TX_NOLOD */ #define gsDPLoadTextureBlock(timg, fmt, siz, width, height, pal, cms, cmt, masks, maskt, shifts, shiftt) \ \ diff --git a/ld/game.bss.ld.inc b/ld/game.bss.ld.inc index a15e93f0..459f26c8 100644 --- a/ld/game.bss.ld.inc +++ b/ld/game.bss.ld.inc @@ -43,10 +43,11 @@ build/OUTCODE/src/game/title.o (.bss); build/OUTCODE/src/game/front.o (.bss); build/OUTCODE/src/game/rle.o (.bss); - build/OUTCODE/src/game/unk_01B240.o (.bss); - build/OUTCODE/src/game/unk_01BAE0.o (.bss); + build/OUTCODE/src/game/title2.o (.bss); + build/OUTCODE/src/game/title3.o (.bss); build/OUTCODE/src/game/blood_animation.o (.bss); build/OUTCODE/src/game/blood_decrypt.o (.bss); + build/OUTCODE/src/game/sub_GAME_7F01D1C0.o (.bss); build/OUTCODE/src/game/file.o (.bss); build/OUTCODE/src/game/file2.o (.bss); build/OUTCODE/src/game/chr.o (.bss); @@ -93,9 +94,10 @@ build/OUTCODE/src/game/player.o (.bss); build/OUTCODE/src/game/crc.o (.bss); build/OUTCODE/src/game/chrObjRandom.o (.bss); - build/OUTCODE/src/game/unk_09B7A0.o (.bss); + build/OUTCODE/src/game/vtxstore.o (.bss); build/OUTCODE/src/game/explosion.o (.bss); build/OUTCODE/src/game/glass.o (.bss); + build/OUTCODE/src/game/glass2.o (.bss); build/OUTCODE/src/game/options.o (.bss); build/OUTCODE/src/game/textrelated.o (.bss); build/OUTCODE/src/game/stan.o (.bss); diff --git a/ld/game.data.ld.inc b/ld/game.data.ld.inc index 54d17fb8..327b371b 100644 --- a/ld/game.data.ld.inc +++ b/ld/game.data.ld.inc @@ -43,10 +43,11 @@ build/OUTCODE/src/game/title.o (.data); build/OUTCODE/src/game/front.o (.data); build/OUTCODE/src/game/rle.o (.data); - build/OUTCODE/src/game/unk_01B240.o (.data); - build/OUTCODE/src/game/unk_01BAE0.o (.data); + build/OUTCODE/src/game/title2.o (.data); + build/OUTCODE/src/game/title3.o (.data); build/OUTCODE/src/game/blood_animation.o (.data); build/OUTCODE/src/game/blood_decrypt.o (.data); + build/OUTCODE/src/game/sub_GAME_7F01D1C0.o (.data); build/OUTCODE/src/game/file.o (.data); build/OUTCODE/src/game/file2.o (.data); build/OUTCODE/src/game/chr.o (.data); @@ -93,9 +94,10 @@ build/OUTCODE/src/game/player.o (.data); build/OUTCODE/src/game/crc.o (.data); build/OUTCODE/src/game/chrObjRandom.o (.data); - build/OUTCODE/src/game/unk_09B7A0.o (.data); + build/OUTCODE/src/game/vtxstore.o (.data); build/OUTCODE/src/game/explosion.o (.data); build/OUTCODE/src/game/glass.o (.data); + build/OUTCODE/src/game/glass2.o (.data); build/OUTCODE/src/game/options.o (.data); build/OUTCODE/src/game/textrelated.o (.data); build/OUTCODE/src/game/stan.o (.data); diff --git a/ld/game.rodata.ld.inc b/ld/game.rodata.ld.inc index f46a18cb..c23cbd5e 100644 --- a/ld/game.rodata.ld.inc +++ b/ld/game.rodata.ld.inc @@ -43,10 +43,11 @@ build/OUTCODE/src/game/title.o (.rodata); build/OUTCODE/src/game/front.o (.rodata); build/OUTCODE/src/game/rle.o (.rodata); - build/OUTCODE/src/game/unk_01B240.o (.rodata); - build/OUTCODE/src/game/unk_01BAE0.o (.rodata); + build/OUTCODE/src/game/title2.o (.rodata); + build/OUTCODE/src/game/title3.o (.rodata); build/OUTCODE/src/game/blood_animation.o (.rodata); build/OUTCODE/src/game/blood_decrypt.o (.rodata); + build/OUTCODE/src/game/sub_GAME_7F01D1C0.o (.rodata); build/OUTCODE/src/game/file.o (.rodata); build/OUTCODE/src/game/file2.o (.rodata); build/OUTCODE/src/game/chr.o (.rodata); @@ -93,9 +94,10 @@ build/OUTCODE/src/game/player.o (.rodata); build/OUTCODE/src/game/crc.o (.rodata); build/OUTCODE/src/game/chrObjRandom.o (.rodata); - build/OUTCODE/src/game/unk_09B7A0.o (.rodata); + build/OUTCODE/src/game/vtxstore.o (.rodata); build/OUTCODE/src/game/explosion.o (.rodata); build/OUTCODE/src/game/glass.o (.rodata); + build/OUTCODE/src/game/glass2.o (.rodata); build/OUTCODE/src/game/options.o (.rodata); build/OUTCODE/src/game/textrelated.o (.rodata); build/OUTCODE/src/game/stan.o (.rodata); diff --git a/ld/game.text.ld.inc b/ld/game.text.ld.inc index 8792a8ce..24ec692d 100644 --- a/ld/game.text.ld.inc +++ b/ld/game.text.ld.inc @@ -43,10 +43,11 @@ build/OUTCODE/src/game/title.o (.text); build/OUTCODE/src/game/front.o (.text); build/OUTCODE/src/game/rle.o (.text); - build/OUTCODE/src/game/unk_01B240.o (.text); - build/OUTCODE/src/game/unk_01BAE0.o (.text); + build/OUTCODE/src/game/title2.o (.text); + build/OUTCODE/src/game/title3.o (.text); build/OUTCODE/src/game/blood_animation.o (.text); build/OUTCODE/src/game/blood_decrypt.o (.text); + build/OUTCODE/src/game/sub_GAME_7F01D1C0.o (.text); build/OUTCODE/src/game/file.o (.text); build/OUTCODE/src/game/file2.o (.text); build/OUTCODE/src/game/chr.o (.text); @@ -93,9 +94,10 @@ build/OUTCODE/src/game/player.o (.text); build/OUTCODE/src/game/crc.o (.text); build/OUTCODE/src/game/chrObjRandom.o (.text); - build/OUTCODE/src/game/unk_09B7A0.o (.text); + build/OUTCODE/src/game/vtxstore.o (.text); build/OUTCODE/src/game/explosion.o (.text); build/OUTCODE/src/game/glass.o (.text); + build/OUTCODE/src/game/glass2.o (.text); build/OUTCODE/src/game/options.o (.text); build/OUTCODE/src/game/textrelated.o (.text); build/OUTCODE/src/game/stan.o (.text); diff --git a/ld/lib.bss.ld.inc b/ld/lib.bss.ld.inc index 74fd69bf..5c17be78 100644 --- a/ld/lib.bss.ld.inc +++ b/ld/lib.bss.ld.inc @@ -248,5 +248,5 @@ #endif build/OUTCODE/src/libultra/io/vimodentsclan1.o (.bss); build/OUTCODE/src/libultrare/io/vimodepallan1.o (.bss); - build/OUTCODE/src/libultrare/ultra80069080.o (.bss); /*edited*/ + build/OUTCODE/src/libultrare/io/ultra80069080.o (.bss); /*edited*/ /*build/OUTCODE/src/libultra/libultra.a:libultra.o (.bss);*/ diff --git a/ld/lib.data.ld.inc b/ld/lib.data.ld.inc index 28e5c209..4e58a9c2 100644 --- a/ld/lib.data.ld.inc +++ b/ld/lib.data.ld.inc @@ -252,5 +252,5 @@ build/OUTCODE/src/libultra/io/vimodentsclan1.o (.data); build/OUTCODE/src/libultrare/io/vimodepallan1.o (.data); #endif - build/OUTCODE/src/libultrare/ultra80069080.o (.data); /*edited*/ + build/OUTCODE/src/libultrare/io/ultra80069080.o (.data); /*edited*/ /*build/OUTCODE/src/libultra/libultra.a:libultra.o (.data);*/ diff --git a/ld/lib.rodata.ld.inc b/ld/lib.rodata.ld.inc index 1516b647..1e48f5fd 100644 --- a/ld/lib.rodata.ld.inc +++ b/ld/lib.rodata.ld.inc @@ -250,5 +250,5 @@ #endif build/OUTCODE/src/libultra/io/vimodentsclan1.o (.rodata); build/OUTCODE/src/libultrare/io/vimodepallan1.o (.rodata); - build/OUTCODE/src/libultrare/ultra80069080.o (.rodata); /*edited*/ + build/OUTCODE/src/libultrare/io/ultra80069080.o (.rodata); /*edited*/ /*build/OUTCODE/src/libultra/libultra.a:libultra.o (.rodata);*/ diff --git a/ld/lib.text.ld.inc b/ld/lib.text.ld.inc index 3e471a8b..7938bcb8 100644 --- a/ld/lib.text.ld.inc +++ b/ld/lib.text.ld.inc @@ -249,5 +249,5 @@ #endif build/OUTCODE/src/libultra/io/vimodentsclan1.o (.text); build/OUTCODE/src/libultrare/io/vimodepallan1.o (.text); - build/OUTCODE/src/libultrare/ultra80069080.o (.text); /*edited*/ + build/OUTCODE/src/libultrare/io/ultra80069080.o (.text); /*edited*/ /*build/OUTCODE/src/libultra/libultra.a:libultra.o (.text);*/ diff --git a/scripts/__pycache__/generate_prop_model_c.cpython-38.pyc b/scripts/__pycache__/generate_prop_model_c.cpython-38.pyc index 3b83b074..c7d78378 100644 Binary files a/scripts/__pycache__/generate_prop_model_c.cpython-38.pyc and b/scripts/__pycache__/generate_prop_model_c.cpython-38.pyc differ diff --git a/scripts/ge007.e-test_basis.csv b/scripts/ge007.e-test_basis.csv index e1592932..ff50acd2 100644 --- a/scripts/ge007.e-test_basis.csv +++ b/scripts/ge007.e-test_basis.csv @@ -773,16 +773,16 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/rle.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/rle.o d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/rle.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/rle.o -e8b537a19dbef522cab0d218d9e0cd28,.text,build/e/src/game/unk_01B240.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_01B240.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_01B240.o -2e036a1e94af4dca08dbda3ca29bb9f1,.data,build/e/src/game/unk_01B240.o -c1c2bef3d9452a0f148d8613ed14b3f1,.rodata,build/e/src/game/unk_01B240.o -9dd182e36f7cdfc30e37c9479de46c22,.text,build/e/src/game/unk_01BAE0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_01BAE0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_01BAE0.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/unk_01BAE0.o -334b90953c5606d68014564e5eda0c1b,.rodata,build/e/src/game/unk_01BAE0.o +e8b537a19dbef522cab0d218d9e0cd28,.text,build/e/src/game/title2.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/title2.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/title2.o +2e036a1e94af4dca08dbda3ca29bb9f1,.data,build/e/src/game/title2.o +c1c2bef3d9452a0f148d8613ed14b3f1,.rodata,build/e/src/game/title2.o +9dd182e36f7cdfc30e37c9479de46c22,.text,build/e/src/game/title3.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/title3.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/title3.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/title3.o +334b90953c5606d68014564e5eda0c1b,.rodata,build/e/src/game/title3.o d0f801f11337accd96ccf6967a01ce8c,.text,build/e/src/game/bondhead.o d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/bondhead.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/bondhead.o @@ -803,11 +803,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_092E50.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_092E50.o 2503662ee6318a7e4cb77c46c99506d5,.data,build/e/src/game/unk_092E50.o f1dbcb1438dbbb5e8506a728d9c4d142,.rodata,build/e/src/game/unk_092E50.o -3288d6c4e46d199aa581307312d196d9,.text,build/e/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/unk_09B7A0.o +3288d6c4e46d199aa581307312d196d9,.text,build/e/src/game/vtxstore.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/vtxstore.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/vtxstore.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/e/src/game/vtxstore.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/vtxstore.o 8729ba49ddeb23c78aea1637f63dc141,.text,build/e/src/game/explosion.o d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/explosion.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/explosion.o diff --git a/scripts/ge007.j-test_basis.csv b/scripts/ge007.j-test_basis.csv index 2acd85cc..7ec7445c 100644 --- a/scripts/ge007.j-test_basis.csv +++ b/scripts/ge007.j-test_basis.csv @@ -768,16 +768,16 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/rle.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/rle.o d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/rle.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/rle.o -e8b537a19dbef522cab0d218d9e0cd28,.text,build/j/src/game/unk_01B240.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_01B240.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_01B240.o -2e036a1e94af4dca08dbda3ca29bb9f1,.data,build/j/src/game/unk_01B240.o -c1c2bef3d9452a0f148d8613ed14b3f1,.rodata,build/j/src/game/unk_01B240.o -9dd182e36f7cdfc30e37c9479de46c22,.text,build/j/src/game/unk_01BAE0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_01BAE0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_01BAE0.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/unk_01BAE0.o -334b90953c5606d68014564e5eda0c1b,.rodata,build/j/src/game/unk_01BAE0.o +e8b537a19dbef522cab0d218d9e0cd28,.text,build/j/src/game/title2.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/title2.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/title2.o +2e036a1e94af4dca08dbda3ca29bb9f1,.data,build/j/src/game/title2.o +c1c2bef3d9452a0f148d8613ed14b3f1,.rodata,build/j/src/game/title2.o +9dd182e36f7cdfc30e37c9479de46c22,.text,build/j/src/game/title3.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/title3.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/title3.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/title3.o +334b90953c5606d68014564e5eda0c1b,.rodata,build/j/src/game/title3.o 155f1fa47776a23483dca05a6d9d83c2,.text,build/j/src/game/bondhead.o d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/bondhead.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/bondhead.o @@ -798,11 +798,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_092E50.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_092E50.o a64d97ec0061b70dcbcebed4ae05d125,.data,build/j/src/game/unk_092E50.o f1dbcb1438dbbb5e8506a728d9c4d142,.rodata,build/j/src/game/unk_092E50.o -3288d6c4e46d199aa581307312d196d9,.text,build/j/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/unk_09B7A0.o +3288d6c4e46d199aa581307312d196d9,.text,build/j/src/game/vtxstore.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/vtxstore.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/vtxstore.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/j/src/game/vtxstore.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/vtxstore.o 8729ba49ddeb23c78aea1637f63dc141,.text,build/j/src/game/explosion.o d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/explosion.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/explosion.o diff --git a/scripts/ge007.u-test_basis.csv b/scripts/ge007.u-test_basis.csv index f455b4da..ad26b628 100644 --- a/scripts/ge007.u-test_basis.csv +++ b/scripts/ge007.u-test_basis.csv @@ -1,1518 +1,1405 @@ -f9eaf36fba2d9fbb6e34367e1d5c575b,.text,build/u/src/_start.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/_start.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/_start.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/_start.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/_start.o +1b8fde074095f50bd06a307fc28739a7,.data,build/u/assets/animationtable_data.o +bd7913a4d356016d1b6f6d1423be0b01,.data,build/u/assets/animationtable_entries.o +3e9157eeb112cd26be531f42ffe1567f,.data,build/u/assets/font/fontBankGothic.o +1f37a9f024114d58cd7f85974952a706,.data,build/u/assets/font/fontZurichBold.o +9af58de0042fcd649da0dc79c2ee7dfb,.data,build/u/assets/font_chardatae.o +da2c7362837d93d38dc9e079152d7de1,.data,build/u/assets/font_chardataj.o +032d2ad0c1b5c15c8e2bf6287ffc9bc9,.data,build/u/assets/font_dl.o +9e15f3cc7cc8d5888fdc2cfb9662324f,.data,build/u/assets/GlobalImageTable.o +7f61155038897232d63b337bebc49fc8,.data,build/u/assets/music/instruments.ctl.o +0b2f3335bd7a1cac0973d16a5d397ee0,.data,build/u/assets/music/instruments.tbl.o +1ee4767b0c9fa3741f03a896f807bb39,.data,build/u/assets/music/sfx.ctl.o +2b5d4becab8c5585e272c878f3e100e2,.data,build/u/assets/music/sfx.tbl.o +3239a921c076ddd6d68188b937597905,.data,build/u/assets/obseg/bg/bg_ame_all_p.o +04b985028d4b5c4cf5ce7e08c25d33bf,.data,build/u/assets/obseg/bg/bg_arch_all_p.o +e8e22dea25b3ac3f1a4de020c946f7dd,.data,build/u/assets/obseg/bg/bg_arec_all_p.o +9cc41d4626731edc6a49b890499e2d33,.data,build/u/assets/obseg/bg/bg_azt_all_p.o +ad5f24079eabba3ae1418aa85706cc67,.data,build/u/assets/obseg/bg/bg_cat_all_p.o +461aca5d52c9a3a3bf2afee37d453f67,.data,build/u/assets/obseg/bg/bg_crad_all_p.o +c22c7e1ae9576209d311a94cc579da59,.data,build/u/assets/obseg/bg/bg_cryp_all_p.o +b3af6a77beb24fa4c3d5acf2bcdeeb88,.data,build/u/assets/obseg/bg/bg_dish_all_p.o +357d4c781f68a77f77777f22312ca8be,.data,build/u/assets/obseg/bg/bg_len_all_p.o +96ecc30d5e54a3bc35158283ff3a6179,.data,build/u/assets/obseg/bg/bg_oat_all_p.o +728f045cd2dcfcab7e956001c8210ee7,.data,build/u/assets/obseg/bg/bg_ref_all_p.o +f9bfa0db72247cc624983241a80cc2da,.data,build/u/assets/obseg/bg/bg_run_all_p.o +5211ec305c79ea15ed47aed9f5dda406,.data,build/u/assets/obseg/bg/bg_sevb_all_p.o +b4d1351d8b0c55dd49d04255057c8050,.data,build/u/assets/obseg/bg/bg_sevx_all_p.o +f6f5db8f3e72452f8610625d1d8e45af,.data,build/u/assets/obseg/bg/bg_sev_all_p.o +0350e5c2f3ed8a04455e14fdcd6ea59b,.data,build/u/assets/obseg/bg/bg_silo_all_p.o +77c226b389bef0ef4b3f80d21b79aa6a,.data,build/u/assets/obseg/brief/UbriefarchZ.o +76e2c28739b6df8b6c89932b2fc0c39b,.data,build/u/assets/obseg/brief/UbriefarkZ.o +2e557d3d54ebc9a0d294a6eba027d03c,.data,build/u/assets/obseg/brief/UbriefaztZ.o +7390bdb6dd0acb0e524a6a43741d1b89,.data,build/u/assets/obseg/brief/UbriefcaveZ.o +b8514744d08309042f601fda8b644664,.data,build/u/assets/obseg/brief/UbriefcontrolZ.o +dceac86d93054c478611067a82a03ffe,.data,build/u/assets/obseg/brief/UbriefcradZ.o +7fa9a86594803746ba4dee34e177a124,.data,build/u/assets/obseg/brief/UbriefcrypZ.o +b5675a0fd69baf15b8eb5f004feb2d99,.data,build/u/assets/obseg/brief/UbriefdamZ.o +d935f64befdbd153f0ec51de4805bf37,.data,build/u/assets/obseg/brief/UbriefdepoZ.o +f5876420ea174366dc93849887704f6d,.data,build/u/assets/obseg/brief/UbriefdestZ.o +07ab7cdb9ad6c988b342705a63d57fca,.data,build/u/assets/obseg/brief/UbriefjunZ.o +6c62e402a083a9f9081729db2272563f,.data,build/u/assets/obseg/brief/UbriefpeteZ.o +2e72c21b0aa658363c7d26a846616a5c,.data,build/u/assets/obseg/brief/UbriefrunZ.o +2207330d53ebb26240adadac3075dc37,.data,build/u/assets/obseg/brief/UbriefsevbunkerZ.o +ee356641add167a35310a6bb14b7d7f1,.data,build/u/assets/obseg/brief/UbriefsevbZ.o +06e62170941cf9226161b204a0bcc975,.data,build/u/assets/obseg/brief/UbriefsevxbZ.o +1fbf379b61826ed7dd56cd57934b1031,.data,build/u/assets/obseg/brief/UbriefsevxZ.o +1f012033e14273295212b6999665899f,.data,build/u/assets/obseg/brief/UbriefsiloZ.o +844bb85f8ac9c5c6f42d34b755fb7cd5,.data,build/u/assets/obseg/brief/UbriefstatueZ.o +615247e8e832c24d06f5b02e777a5664,.data,build/u/assets/obseg/brief/UbrieftraZ.o +5124bdcf57e4966a44db62e7cf415d8a,.data,build/u/assets/obseg/chr/armourguard/Model.o +bd652241f95c76adf02840fd10a7b732,.data,build/u/assets/obseg/chr/baronsamedi/Model.o +046f42fcd9d044c5d4d3a2797e92e19e,.data,build/u/assets/obseg/chr/bluecamguard/Model.o +9d79e4fdafef672fe31962f6c7451ed9,.data,build/u/assets/obseg/chr/blueman/Model.o +2c254c957eb50b66d5e386a825dad37d,.data,build/u/assets/obseg/chr/bluewoman/Model.o +c5c2138758c5d84b9df5a390fcb3a5e0,.data,build/u/assets/obseg/chr/boilerbond/Model.o +1d0867c35238272efa90ccdc06ed849e,.data,build/u/assets/obseg/chr/boilertrev/Model.o +be27e2a9030bccb7948a486259114ed9,.data,build/u/assets/obseg/chr/boris/Model.o +b4f368c21714d641e045a13aac5657e8,.data,build/u/assets/obseg/chr/camguard/Model.o +ca8484bdd2eb91a96786dd3c87b4c69e,.data,build/u/assets/obseg/chr/cardiman/Model.o +8627131e58fd025e6dfb3bba8ebd6293,.data,build/u/assets/obseg/chr/checkman/Model.o +7ef052529c24a6bc04fb21d23c68ca7d,.data,build/u/assets/obseg/chr/commguard/Model.o +b1d3e52c878a523723fb087712ae1eb8,.data,build/u/assets/obseg/chr/djbond/Model.o +ffe658b75c7abf7e1992c7e53e15c5bd,.data,build/u/assets/obseg/chr/fattechwoman/Model.o +d65cda37f579413b12e50adb2604d6d7,.data,build/u/assets/obseg/chr/greatguard/Model.o +2fe89b93239b865b7fc7c9e06e719710,.data,build/u/assets/obseg/chr/greatguard2/Model.o +69f9736382a34d3e73c0bd663d81674b,.data,build/u/assets/obseg/chr/greyguard/Model.o +4b430cbb9cdefbbc9a8ec545c0febc20,.data,build/u/assets/obseg/chr/greyman/Model.o +b0ddddd7752340c8078eeda967b0997b,.data,build/u/assets/obseg/chr/headalan/Model.o +b9ee5be7bb9457b4c610eda24ec163cb,.data,build/u/assets/obseg/chr/headb/Model.o +d1ec401a396fc7045f4590f0f90f83dc,.data,build/u/assets/obseg/chr/headbalaclava/Model.o +9adeae40b2711b5a430baa8b2f547173,.data,build/u/assets/obseg/chr/headbike/Model.o +e9bff38a3894fde852887a37bc2e43e3,.data,build/u/assets/obseg/chr/headbrosnan/Model.o +cbd014dbfb8c9904b0016e800c82f345,.data,build/u/assets/obseg/chr/headbrosnanboiler/Model.o +3040ad30f2ce421ec6ed0c49c7605f52,.data,build/u/assets/obseg/chr/headbrosnansnow/Model.o +c0571c3a01925032c832860b7b3ed5c0,.data,build/u/assets/obseg/chr/headbrosnansuit/Model.o +fc78d8dc8aeb8ca38e14b8fe7f3d72c9,.data,build/u/assets/obseg/chr/headbrosnantimber/Model.o +ef54f4157e70a5d9b86ac2fb81af8bc9,.data,build/u/assets/obseg/chr/headchris/Model.o +f2886336c9ac17356029ff28369d8e89,.data,build/u/assets/obseg/chr/headdave/Model.o +f0188ade3156a7547375d39453ce20cc,.data,build/u/assets/obseg/chr/headdes/Model.o +52f29562118a08ec24ed5f4dd6499a17,.data,build/u/assets/obseg/chr/headduncan/Model.o +26ae096f49beb41a1af3896574823047,.data,build/u/assets/obseg/chr/headdwayne/Model.o +b2c47930c3d98426d0868b7986f2e3ba,.data,build/u/assets/obseg/chr/headgraham/Model.o +51ee97881cd5d73971116a046d0af4eb,.data,build/u/assets/obseg/chr/headgrant/Model.o +7d0bec09a4c1d40b3dbeed32beb2454e,.data,build/u/assets/obseg/chr/headjim/Model.o +a19c61e2a7d5ef980ec07068ebb46374,.data,build/u/assets/obseg/chr/headjoe/Model.o +d83e42c4a6ebb71730db1ce161445555,.data,build/u/assets/obseg/chr/headjoe2/Model.o +ebb666cfc2269ad4a711a98b7a3e2d92,.data,build/u/assets/obseg/chr/headjoel/Model.o +076c2fca065f893f11f9ced15d69af36,.data,build/u/assets/obseg/chr/headkarl/Model.o +249e5d185a4fa51abe9f27edca38a8e9,.data,build/u/assets/obseg/chr/headken/Model.o +75ba96f188a726f3e61fb359023d6b28,.data,build/u/assets/obseg/chr/headlee/Model.o +e0eb57c228b1ae60c90a679f731e8292,.data,build/u/assets/obseg/chr/headmandy/Model.o +3d320481ce42189cbc30d9eddb8b80d5,.data,build/u/assets/obseg/chr/headmarion/Model.o +d9cf746f11f54f8493ea7f6a98ba01f2,.data,build/u/assets/obseg/chr/headmark/Model.o +8b04f964da35ea3571f9b12c95f31e2e,.data,build/u/assets/obseg/chr/headmartin/Model.o +72d4a6af9c588e11304314fa4a19c60c,.data,build/u/assets/obseg/chr/headmishkin/Model.o +7e790d80a2e43061a0acedb3fb561d62,.data,build/u/assets/obseg/chr/headneil/Model.o +c3de6ca475263e4ab8049a9f0dca5f9c,.data,build/u/assets/obseg/chr/headpete/Model.o +80588ab50964f38c0e878ff7c85ca5b3,.data,build/u/assets/obseg/chr/headrobin/Model.o +58243cbc105d38d9346aea0423f7fcd1,.data,build/u/assets/obseg/chr/headsally/Model.o +1e9530c5b5c888504c9c5255255fb878,.data,build/u/assets/obseg/chr/headscott/Model.o +20c5a0c2237cd86b4d5c500e9647c2c1,.data,build/u/assets/obseg/chr/headshaun/Model.o +094c7dfddac242d5c5c5a787af076c1f,.data,build/u/assets/obseg/chr/headstevee/Model.o +330e21b59687124e2dc767a89f38f713,.data,build/u/assets/obseg/chr/headsteveh/Model.o +2c8c717a0ccbeb5caf9b402990c7a051,.data,build/u/assets/obseg/chr/headvivien/Model.o +18865eb0a06b3b737d60c374797bb1b6,.data,build/u/assets/obseg/chr/jaws/Model.o +2f933d58b6022d5a90b136f636c6fe66,.data,build/u/assets/obseg/chr/jeanwoman/Model.o +e2e5a7b67a489aad80c95aa31f9c7fe4,.data,build/u/assets/obseg/chr/mayday/Model.o +5fb2f20068e5f098e1c1864e942aaf2e,.data,build/u/assets/obseg/chr/moonfemale/Model.o +40c71f18144c8cff1fa77fa2b7daae30,.data,build/u/assets/obseg/chr/moonguard/Model.o +8cb04831d957d81bd651ccde93d012a5,.data,build/u/assets/obseg/chr/natalya/Model.o +76816875fbb1b2cbfb4a31a53d7efefb,.data,build/u/assets/obseg/chr/navyguard/Model.o +ea8b0c1a0bac5e9a7d709aa6413f5d82,.data,build/u/assets/obseg/chr/oddjob/Model.o +b6403a03684a068164a4a72172db65da,.data,build/u/assets/obseg/chr/oliveguard/Model.o +e1f5b369eb2a22ed50ffd09d6e2c552e,.data,build/u/assets/obseg/chr/orumov/Model.o +da6c1c2a752096bbb2dffb6ebcf968e8,.data,build/u/assets/obseg/chr/pilot/Model.o +1d8d4f597cdf3302e8ac129a0b61dffd,.data,build/u/assets/obseg/chr/redman/Model.o +0a50ef26a9f0917c21b41d662282de16,.data,build/u/assets/obseg/chr/rusguard/Model.o +3211343edb19fc6bf9d767255b1dd386,.data,build/u/assets/obseg/chr/snowbond/Model.o +b8fdc5fc6ad5b2131429ba914a9f2e18,.data,build/u/assets/obseg/chr/snowguard/Model.o +a020ce55ea5ace4420486d1e0167cac7,.data,build/u/assets/obseg/chr/spicebond/Model.o +2238249218bd3388d4918a14920aed9e,.data,build/u/assets/obseg/chr/suitbond/Model.o +827e4d5e8e03039ca7b314098551e81c,.data,build/u/assets/obseg/chr/suit_lf_hand/Model.o +0967e94ae9e4a9ab22e0cdcadc37aca7,.data,build/u/assets/obseg/chr/techman/Model.o +b8f3fd0089e6e16a33b1d74472685608,.data,build/u/assets/obseg/chr/techwoman/Model.o +9130d5570ce986881da5acd024ae532d,.data,build/u/assets/obseg/chr/timberbond/Model.o +7687d6ae98a2cd193d1bef337a201e76,.data,build/u/assets/obseg/chr/trevelyan/Model.o +74f5d6987cfa1bac53151568e3ba5a83,.data,build/u/assets/obseg/chr/trevguard/Model.o +1392702a1e4110509e6af8b4fd6029e3,.data,build/u/assets/obseg/chr/valentin/Model.o +e6e457e8e5cc55d658d4918c72dc7abc,.data,build/u/assets/obseg/chr/xenia/Model.o +5b42b281f99e33191e141f29011701d9,.data,build/u/assets/obseg/gun/ak47/Model.o +38ac7a995a1db3559b4af6b2ad69cb81,.data,build/u/assets/obseg/gun/audiotape/Model.o +9d4f8088ffe76717d0dd9a13e1395e72,.data,build/u/assets/obseg/gun/autoshot/Model.o +5ea5723a24aa07a5caf1eefca85f2167,.data,build/u/assets/obseg/gun/blackbox/Model.o +5a95d506008e44303645ab1540c520ce,.data,build/u/assets/obseg/gun/blueprints/Model.o +bb9ac206df2e10ecb31f5d56bc875ed4,.data,build/u/assets/obseg/gun/bombcase/Model.o +e176f1590af4c773cd404af2da2c17bf,.data,build/u/assets/obseg/gun/bombdefuser/Model.o +bb9ac206df2e10ecb31f5d56bc875ed4,.data,build/u/assets/obseg/gun/briefcase/Model.o +0aa47af8e5f5e66f7395335c9f112527,.data,build/u/assets/obseg/gun/bug/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/bugdetector/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/bungee/Model.o +6e1606c4c38fb8ad57273debad8b6453,.data,build/u/assets/obseg/gun/camera/Model.o +ae9ff4d2ea3e103bd4f8d838ef406560,.data,build/u/assets/obseg/gun/cartblue/Model.o +098ab7c1515f9ef34f9820a8cdd07e27,.data,build/u/assets/obseg/gun/cartridge/Model.o +ad3dae339ea18eb2edc3b1879a0e8dc8,.data,build/u/assets/obseg/gun/cartrifle/Model.o +36449b06ada03c5cb6e155669beb2112,.data,build/u/assets/obseg/gun/cartshell/Model.o +45d1ed90f97d16b8133495a3b3f467d7,.data,build/u/assets/obseg/gun/circuitboard/Model.o +560e18122d87b55689abfe7eeeef16db,.data,build/u/assets/obseg/gun/clipboard/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/creditcard/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/darkglasses/Model.o +3ed0136f1cc1e571ce4451e6c8faf816,.data,build/u/assets/obseg/gun/datathief/Model.o +afba26893b1b9fd73b1f002e8637fd81,.data,build/u/assets/obseg/gun/dattape/Model.o +629d83cdec145fcacb0c25dcfa8c70cd,.data,build/u/assets/obseg/gun/doordecoder/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/doorexploder/Model.o +f681567f8ee52f209f746158682bdefe,.data,build/u/assets/obseg/gun/dossierred/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/dynamite/Model.o +a58c9f0317f07bb31ec31937b26a8b17,.data,build/u/assets/obseg/gun/explosivefloppy/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/explosivepen/Model.o +9657bda6bc08b095ef7e593e78178b2f,.data,build/u/assets/obseg/gun/extinguisher/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/fingergun/Model.o +8e1bcb24c22c628bfc0149cda787aa0c,.data,build/u/assets/obseg/gun/fist/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/flarepistol/Model.o +6909e18fb263d47e0480eda463a8e12c,.data,build/u/assets/obseg/gun/fnp90/Model.o +65439b8c16b7896ab6d278fbe162a9cf,.data,build/u/assets/obseg/gun/gaskeyring/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/goldbar/Model.o +18db96bfc6ce24ac50b45af00cf17615,.data,build/u/assets/obseg/gun/goldeneyekey/Model.o +50a4299ad2a0ca11133f1cda887aaba8,.data,build/u/assets/obseg/gun/goldengun/Model.o +5bb2e847b0e28053b924d8382a525093,.data,build/u/assets/obseg/gun/goldwppk/Model.o +5e0f9706c8bc06fcd70266580447c3af,.data,build/u/assets/obseg/gun/grenade/Model.o +82c3c1b4a4868da406732e4110ef5c3b,.data,build/u/assets/obseg/gun/grenadelaunch/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/heroin/Model.o +ea98e92813dc20abcf173956991ebec7,.data,build/u/assets/obseg/gun/joypad/Model.o +bb9ac206df2e10ecb31f5d56bc875ed4,.data,build/u/assets/obseg/gun/keyanalysercase/Model.o +188807030ce08a04a7824b225a42d772,.data,build/u/assets/obseg/gun/keybolt/Model.o +e7be65d479875024f6fc185ce5076892,.data,build/u/assets/obseg/gun/keycard/Model.o +f067946425eab8bf8f1881da79c11a1e,.data,build/u/assets/obseg/gun/keyyale/Model.o +2a487ae577acac6f76627bd431e2906b,.data,build/u/assets/obseg/gun/knife/Model.o +2e6f5b3081dce58f64d3c775d2fa1f27,.data,build/u/assets/obseg/gun/laser/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/lectre/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/lockexploder/Model.o +61fa1a0964a23642d0376286588120dc,.data,build/u/assets/obseg/gun/m16/Model.o +cb577ce951c23436893653e17f670b82,.data,build/u/assets/obseg/gun/map/Model.o +db3bba8874f8e9d97260b834fc6ce4b5,.data,build/u/assets/obseg/gun/microcamera/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/microcode/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/microfilm/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/money/Model.o +6da10240a94257b02982294f3eeeda85,.data,build/u/assets/obseg/gun/mp5k/Model.o +6892e25d883578afe1736ef3a5193aea,.data,build/u/assets/obseg/gun/mp5ksil/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/pitongun/Model.o +07f32dda951337851d05626155db0700,.data,build/u/assets/obseg/gun/plans/Model.o +bd1439473ce9b4a5181526853519013b,.data,build/u/assets/obseg/gun/plastique/Model.o +47e376ca10589c46780a2c0dacd75c75,.data,build/u/assets/obseg/gun/polarizedglasses/Model.o +62c063b6007b164e1fac9c1110b31ad0,.data,build/u/assets/obseg/gun/proximitymine/Model.o +0bcdea38a0b5beabd08d876d0fb80061,.data,build/u/assets/obseg/gun/remotemine/Model.o +fbc2f418010ba89c2c42b3acc925ca1c,.data,build/u/assets/obseg/gun/rocketlaunch/Model.o +422ee227acea9e340b944bd554c19338,.data,build/u/assets/obseg/gun/ruger/Model.o +bb9ac206df2e10ecb31f5d56bc875ed4,.data,build/u/assets/obseg/gun/safecrackercase/Model.o +ed2f212aad86b946d60db2a218f6e9cc,.data,build/u/assets/obseg/gun/shotgun/Model.o +f73a11f60deced2e0350e8a145755953,.data,build/u/assets/obseg/gun/silverwppk/Model.o +6ad9cfa9bd65079d2936a504abeb61a8,.data,build/u/assets/obseg/gun/skorpion/Model.o +e9eeb4caa61d987733bfdc48e0083814,.data,build/u/assets/obseg/gun/sniperrifle/Model.o +3b9cb4557132a2bcdaec7a94386cb3b1,.data,build/u/assets/obseg/gun/spectre/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/spooltape/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/spyfile/Model.o +04978975528251a4bf22bfe007ee0fb4,.data,build/u/assets/obseg/gun/stafflist/Model.o +16a06ad691d1a0a6809ea37d43da9405,.data,build/u/assets/obseg/gun/taser/Model.o +e181e01f84497d3e7f8eec52a4e3641c,.data,build/u/assets/obseg/gun/throwknife/Model.o +2c094d826e830c7bacadd213c5b86f46,.data,build/u/assets/obseg/gun/timedmine/Model.o +9e4021c30cd74d38fab008a2a7c6eb1c,.data,build/u/assets/obseg/gun/trigger/Model.o +afa086447f0a380b723d4849709d8d94,.data,build/u/assets/obseg/gun/tt33/Model.o +a1f352ec9045a1039017c11e5f2edabb,.data,build/u/assets/obseg/gun/uzi/Model.o +37a69e331515b2c04c8e0d977c30c345,.data,build/u/assets/obseg/gun/videotape/Model.o +81bcc07038b4ef96e6bf687a8c0d138a,.data,build/u/assets/obseg/gun/watchcommunicator/Model.o +81bcc07038b4ef96e6bf687a8c0d138a,.data,build/u/assets/obseg/gun/watchgeigercounter/Model.o +81bcc07038b4ef96e6bf687a8c0d138a,.data,build/u/assets/obseg/gun/watchidentifier/Model.o +9e4021c30cd74d38fab008a2a7c6eb1c,.data,build/u/assets/obseg/gun/watchlaser/Model.o +cce4f45225ef1a6ae63a7edc3a5b781e,.data,build/u/assets/obseg/gun/watchmagnetattract/Model.o +81bcc07038b4ef96e6bf687a8c0d138a,.data,build/u/assets/obseg/gun/watchmagnetrepel/Model.o +bb9ac206df2e10ecb31f5d56bc875ed4,.data,build/u/assets/obseg/gun/weaponcase/Model.o +17f90bb4e88c159014e12f5dc1448a2b,.data,build/u/assets/obseg/gun/wppk/Model.o +1c75b746e880c0eb05bf112c19b3df48,.data,build/u/assets/obseg/gun/wppksil/Model.o +d28070742295e098b2ed2e4d089e8701,.data,build/u/assets/obseg/gun/wristdart/Model.o +bf668e685fa9c7c2ce0ae36949915327,.data,build/u/assets/obseg/ob_seg.o +b8d0fb6bd11a8d385a325a2df247c89e,.data,build/u/assets/obseg/prop/ak47mag/Model.o +1f10e298b30d0c24b65470008bc334ac,.data,build/u/assets/obseg/prop/alarm1/Model.o +cfd53e0816642fee9fc44289e5506046,.data,build/u/assets/obseg/prop/alarm2/Model.o +929321f3d50100128a90b7cf3c73dc2c,.data,build/u/assets/obseg/prop/ammo_crate1/Model.o +e7289d736edcebac071ed56e8d16af39,.data,build/u/assets/obseg/prop/ammo_crate2/Model.o +7939bb62f79ddc2f8f3c6cd1514ebafb,.data,build/u/assets/obseg/prop/ammo_crate3/Model.o +c164926449d41954d7507bb3c169d6f4,.data,build/u/assets/obseg/prop/ammo_crate4/Model.o +a2c04a3725fc3bb13f62184403b990ba,.data,build/u/assets/obseg/prop/ammo_crate5/Model.o +97e68382b931a94d88ffa1356c5942b8,.data,build/u/assets/obseg/prop/apc/Model.o +8e134f8becfac81d7e012ae0f66ef915,.data,build/u/assets/obseg/prop/archsecdoor1/Model.o +ca2828b10fa727afdbd92c8773fde906,.data,build/u/assets/obseg/prop/archsecdoor2/Model.o +cf3834b2d2e29716653fce98e9144497,.data,build/u/assets/obseg/prop/artic/Model.o +d7bd9020e1e64b544b4cef73d1368687,.data,build/u/assets/obseg/prop/artictrailer/Model.o +c82ac8bcb2537eb5fc75dd440ecc17c6,.data,build/u/assets/obseg/prop/barricade/Model.o +e7a1a1ad8ad7b6ecb31860ec056cce88,.data,build/u/assets/obseg/prop/bin1/Model.o +1771e5abaa704d42c35c82479f1d6074,.data,build/u/assets/obseg/prop/blotter1/Model.o +c941182d7cd1112a53a464224aed9286,.data,build/u/assets/obseg/prop/bodyarmour/Model.o +9b0112e9aa6327688406beb67763903c,.data,build/u/assets/obseg/prop/bodyarmourvest/Model.o +82b497e91f18fc2be3a5939ccb46a065,.data,build/u/assets/obseg/prop/bollard/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/bomb/Model.o +a3b12ffa888a8f250fd0a6fa3b0692b2,.data,build/u/assets/obseg/prop/book1/Model.o +db50a34a7be540d6410e88073b86266c,.data,build/u/assets/obseg/prop/bookshelf1/Model.o +7f8afdbc86ff0fe590654c2285d59382,.data,build/u/assets/obseg/prop/borg_crate/Model.o +ab85604c2f93708f6da39983e60b538f,.data,build/u/assets/obseg/prop/boxcartridges/Model.o +c9d42efdb37ac2bae09ae5e2dd09ae11,.data,build/u/assets/obseg/prop/boxes2x4/Model.o +6bd9d56d9a4c9daa0691502a0eb1cf69,.data,build/u/assets/obseg/prop/boxes3x4/Model.o +768efd9eec2aa25e8b632debb109834c,.data,build/u/assets/obseg/prop/boxes4x4/Model.o +41fb5c9fa8f3bbbbc55400227434cc54,.data,build/u/assets/obseg/prop/brakeunit/Model.o +64027579ea578fff60d6a2c981eeba59,.data,build/u/assets/obseg/prop/bridge_console1a/Model.o +29f135df87ae47517bfb0caf779bcab2,.data,build/u/assets/obseg/prop/bridge_console1b/Model.o +f7117f78e2ff9ecd4cc117c197ca9bda,.data,build/u/assets/obseg/prop/bridge_console2a/Model.o +83c80639724a158af6ab8eba6c0d4268,.data,build/u/assets/obseg/prop/bridge_console2b/Model.o +277303daf8afe598072db562b21cef1e,.data,build/u/assets/obseg/prop/bridge_console3a/Model.o +454bf474a8ad8fedffa7498e3f813ad3,.data,build/u/assets/obseg/prop/bridge_console3b/Model.o +ea61efbf33012da17aed13a0fe3c928b,.data,build/u/assets/obseg/prop/carbmw/Model.o +471ba66488226ba5986b34849a7c9604,.data,build/u/assets/obseg/prop/card_box1/Model.o +5401af8c531e252b780ea0f7f8802f47,.data,build/u/assets/obseg/prop/card_box2/Model.o +f12909653943e83efdf09dd81e99a399,.data,build/u/assets/obseg/prop/card_box3/Model.o +76901642f696ee4ff143f1aa77b861d5,.data,build/u/assets/obseg/prop/card_box4_lg/Model.o +ef2a80553b7d9b5089ce6c1782f2d246,.data,build/u/assets/obseg/prop/card_box5_lg/Model.o +25eb2164a7bc2fa71cd7ed510650ca3f,.data,build/u/assets/obseg/prop/card_box6_lg/Model.o +e709217b59e0e15163edee450289e0e3,.data,build/u/assets/obseg/prop/carescort/Model.o +7711d64becece044c1bb3a9e527b4e9c,.data,build/u/assets/obseg/prop/cargolf/Model.o +655179154af8b5f9027ded59fa116bf7,.data,build/u/assets/obseg/prop/carweird/Model.o +361d27aae545a6f1f250ed882abac5a8,.data,build/u/assets/obseg/prop/carzil/Model.o +023dd9fd2148e8cd291d9889f698c94d,.data,build/u/assets/obseg/prop/cctv/Model.o +46da7e5e43d86f2d0d127feb189d071a,.data,build/u/assets/obseg/prop/chraudiotape/Model.o +322fb4766a649d89a2764990b9b03d06,.data,build/u/assets/obseg/prop/chrautoshot/Model.o +8f64e987e183ebb7f9cf4dbc824ccf8a,.data,build/u/assets/obseg/prop/chrblackbox/Model.o +99e96d4c3722945a7d53209e3205a55c,.data,build/u/assets/obseg/prop/chrblueprints/Model.o +5f2b83ce46819f6b88e41cce6874cdcd,.data,build/u/assets/obseg/prop/chrbombcase/Model.o +cb8a681e0591457e8f1e1243b79f3bcf,.data,build/u/assets/obseg/prop/chrbombdefuser/Model.o +3a5b9bbe4a20a1b172326a60b791f548,.data,build/u/assets/obseg/prop/chrbriefcase/Model.o +c0478ceb5207f33fe1bc57b07ec89d93,.data,build/u/assets/obseg/prop/chrbug/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrbugdetector/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrbungee/Model.o +8a42f07a602cd3c3e1f7a6ce80954b3c,.data,build/u/assets/obseg/prop/chrcamera/Model.o +ac4a4de3020c7a7de87e841cda6c22c6,.data,build/u/assets/obseg/prop/chrcircuitboard/Model.o +e782e95859c62a71450308ade1f70f50,.data,build/u/assets/obseg/prop/chrclipboard/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrcreditcard/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrdarkglasses/Model.o +0f2df6f811db6a7c0a00677fd99c1420,.data,build/u/assets/obseg/prop/chrdatathief/Model.o +a72430c951ee4917c21e24f4f3289511,.data,build/u/assets/obseg/prop/chrdattape/Model.o +7f627317d8600714f2464ef5e01a6bf7,.data,build/u/assets/obseg/prop/chrdoordecoder/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrdoorexploder/Model.o +90f05fd5f3bcaebe5c73b58e7ab1d2d1,.data,build/u/assets/obseg/prop/chrdossierred/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrdynamite/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrexplosivepen/Model.o +9a8a6de71d4160d17c3c44029c363646,.data,build/u/assets/obseg/prop/chrextinguisher/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrfingergun/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrflarepistol/Model.o +f1ed8030bbffd61cddc64e5d84adf737,.data,build/u/assets/obseg/prop/chrfnp90/Model.o +968f8e874851fe8fd14f6c65db51cc79,.data,build/u/assets/obseg/prop/chrgaskeyring/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrgoldbar/Model.o +055d9663245ee0ac58e617b753621884,.data,build/u/assets/obseg/prop/chrgolden/Model.o +318af42e516074f4cf7b7d4a11e0f173,.data,build/u/assets/obseg/prop/chrgoldeneyekey/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrgoldwppk/Model.o +d01858a1a5e899c00264bc8701ae2c8c,.data,build/u/assets/obseg/prop/chrgrenade/Model.o +0f4783842ba7f9f404a70e5439b8716b,.data,build/u/assets/obseg/prop/chrgrenadelaunch/Model.o +88af3fa90bedbb3e187d522c90adcfa1,.data,build/u/assets/obseg/prop/chrgrenaderound/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrheroin/Model.o +7082dd00cd7f7dd1f2c42d56dc6032a2,.data,build/u/assets/obseg/prop/chrkalash/Model.o +5f2b83ce46819f6b88e41cce6874cdcd,.data,build/u/assets/obseg/prop/chrkeyanalysercase/Model.o +9e26ad84b8dab1979f9d62596bab51e7,.data,build/u/assets/obseg/prop/chrkeybolt/Model.o +bb675d2f6e83d413524fb4839fe4f6d0,.data,build/u/assets/obseg/prop/chrkeyyale/Model.o +9bc3289cf24326617c4c924ee3a5be52,.data,build/u/assets/obseg/prop/chrknife/Model.o +ace699114c9ae6a894959794cc43a04a,.data,build/u/assets/obseg/prop/chrlaser/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrlectre/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrlockexploder/Model.o +ab3347580730c0cc2188dbe8bc681b8c,.data,build/u/assets/obseg/prop/chrm16/Model.o +1f926fb17e2c8bcd268fc85a7691dd9f,.data,build/u/assets/obseg/prop/chrmap/Model.o +e8ad0a88d1960a8daf12735ec9f7f0c5,.data,build/u/assets/obseg/prop/chrmicrocamera/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrmicrocode/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrmicrofilm/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrmoney/Model.o +6aefb6bca186ed8a1d2cbbea71def989,.data,build/u/assets/obseg/prop/chrmp5k/Model.o +d255c656ddd4b90d95690948a61df28d,.data,build/u/assets/obseg/prop/chrmp5ksil/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrpitongun/Model.o +effd4b489f25ed3818e0511e57aec6c1,.data,build/u/assets/obseg/prop/chrplans/Model.o +e1b014344c22efca0c87c415526ea605,.data,build/u/assets/obseg/prop/chrplastique/Model.o +39ecfbe0c172d7b68f470609c9a9814c,.data,build/u/assets/obseg/prop/chrpolarizedglasses/Model.o +58b34ec1568bb42856542be449b2b7c1,.data,build/u/assets/obseg/prop/chrproximitymine/Model.o +04625d49ea97f1f245783207b91ee0e7,.data,build/u/assets/obseg/prop/chrremotemine/Model.o +cfdafbf82ddf9b5fe2b00645bdb0e2b6,.data,build/u/assets/obseg/prop/chrrocket/Model.o +6f51c21b1e65c45f90bc865719dfe05b,.data,build/u/assets/obseg/prop/chrrocketlaunch/Model.o +610baff10228f762441861d3dc88ab47,.data,build/u/assets/obseg/prop/chrruger/Model.o +5f2b83ce46819f6b88e41cce6874cdcd,.data,build/u/assets/obseg/prop/chrsafecrackercase/Model.o +7ac30755f4d74af6e02cf8911b6043c8,.data,build/u/assets/obseg/prop/chrshotgun/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrsilverwppk/Model.o +0554f15197454ae06e85a483ee491fed,.data,build/u/assets/obseg/prop/chrskorpion/Model.o +8ffcdb5de814c89da600b56a91f1f92c,.data,build/u/assets/obseg/prop/chrsniperrifle/Model.o +e7bca9da27d9ee917390bf1fea072d9d,.data,build/u/assets/obseg/prop/chrspectre/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrspooltape/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrspyfile/Model.o +848b9ddff9390625101628f81f404cdc,.data,build/u/assets/obseg/prop/chrstafflist/Model.o +875b5e48495c2ac1bf314972b37903b7,.data,build/u/assets/obseg/prop/chrtesttube/Model.o +99aa9dc73003b61a5cb314b9d2b80b0b,.data,build/u/assets/obseg/prop/chrthrowknife/Model.o +7f5d54e1f2e58a7b1369a11871dd3e8e,.data,build/u/assets/obseg/prop/chrtimedmine/Model.o +c824a8a0d43ccf56cdf89dc0cb89953d,.data,build/u/assets/obseg/prop/chrtt33/Model.o +0d7285d49ca8c41c04b7e24df1f5f6b6,.data,build/u/assets/obseg/prop/chruzi/Model.o +1a2dae4028c819942549abfedeb3f401,.data,build/u/assets/obseg/prop/chrvideotape/Model.o +e2b3abc092286ea14e0223e6dfc25dcb,.data,build/u/assets/obseg/prop/chrweaponcase/Model.o +025694fdefeafb017e86cf957bbc85cd,.data,build/u/assets/obseg/prop/chrwppk/Model.o +98c3b916001974d4fc3bd8e3d4d5720d,.data,build/u/assets/obseg/prop/chrwppksil/Model.o +10a2cf4e690edf11cb08db486e5048b5,.data,build/u/assets/obseg/prop/chrwristdart/Model.o +f02a3c79b8a7390d3e993da73b4638e1,.data,build/u/assets/obseg/prop/console1/Model.o +f5831d45255c3c96e5db4ee13fb43e35,.data,build/u/assets/obseg/prop/console2/Model.o +b7140fb40c47e61c21ad464cf5b006fc,.data,build/u/assets/obseg/prop/console3/Model.o +3ff600f4e95b641cafdaff1e3c6cb60d,.data,build/u/assets/obseg/prop/console_sev2a/Model.o +83de978a813861113fd53726bcb0bc8f,.data,build/u/assets/obseg/prop/console_sev2b/Model.o +4d28ad780aec99830bc1cae7d157845e,.data,build/u/assets/obseg/prop/console_sev2c/Model.o +79f0a17ca4edbec0cc8d06d68ba6d83a,.data,build/u/assets/obseg/prop/console_sev2d/Model.o +67c6f086e14be1379fab985ca645bb23,.data,build/u/assets/obseg/prop/console_seva/Model.o +99af8be0236d239f7cf995a89b3d485a,.data,build/u/assets/obseg/prop/console_sevb/Model.o +7639293b5811e0b4c91ddd67e44c69d7,.data,build/u/assets/obseg/prop/console_sevc/Model.o +c95b80c1896d68278fd9c851485c8eaf,.data,build/u/assets/obseg/prop/console_sevd/Model.o +d28a2f4399ee4a4c5d708d866970daa3,.data,build/u/assets/obseg/prop/console_sev_GEa/Model.o +83238eaf1123abeb193e611f984f202e,.data,build/u/assets/obseg/prop/console_sev_GEb/Model.o +ce60774106eda10e22563443a831f892,.data,build/u/assets/obseg/prop/cryptdoor1a/Model.o +d88850791f781ee15be914df5d186daf,.data,build/u/assets/obseg/prop/cryptdoor1b/Model.o +279876baffcdb5e75d776fc60da88b56,.data,build/u/assets/obseg/prop/cryptdoor2a/Model.o +3e1728f2a795fe7b31a935a22e13f416,.data,build/u/assets/obseg/prop/cryptdoor2b/Model.o +f95804a7ffa9e4b46b55b5e2ca727d54,.data,build/u/assets/obseg/prop/cryptdoor3/Model.o +606d94ee1702b5564e2ec6d45cea2fd4,.data,build/u/assets/obseg/prop/cryptdoor4/Model.o +7ebc9d80878aa9d3ac1d4f4356389c80,.data,build/u/assets/obseg/prop/damchaindoor/Model.o +6e76720e2cad1a3da150850b3603a7e6,.data,build/u/assets/obseg/prop/damgatedoor/Model.o +e11127659eb5988c785ae4595f5f2ba9,.data,build/u/assets/obseg/prop/damtundoor/Model.o +e2f76aa4881cc04ad5944f811dd43919,.data,build/u/assets/obseg/prop/depot_door_steel/Model.o +c8c41257b1bb776f901c8e10a2709c56,.data,build/u/assets/obseg/prop/depot_gate_entry/Model.o +80571ad5b880bfa2f275b9399b2b222a,.data,build/u/assets/obseg/prop/desk1/Model.o +9ad60ba47a15b5cf6611a66d4f27ddbb,.data,build/u/assets/obseg/prop/desk2/Model.o +1a242a409b4ccd58cf9e684f78968f3a,.data,build/u/assets/obseg/prop/desk_arecibo1/Model.o +9c628b31d29efc9432dd49a07d06ea7c,.data,build/u/assets/obseg/prop/desk_lamp2/Model.o +98b1aaa3c2f7ef6cc79d891143800620,.data,build/u/assets/obseg/prop/dest_engine/Model.o +ce9f92c777c5c0e33c452a6fd754fb9f,.data,build/u/assets/obseg/prop/dest_exocet/Model.o +ad54a82249b08d4d17df567f6146e639,.data,build/u/assets/obseg/prop/dest_gun/Model.o +2b0a3e363027dfd8fd9aa5fbaf9129de,.data,build/u/assets/obseg/prop/dest_harpoon/Model.o +dc1a728a887070548992bf9024d90dcb,.data,build/u/assets/obseg/prop/dest_seawolf/Model.o +1de468d6da9ef4be2168698279059ae0,.data,build/u/assets/obseg/prop/disc_reader/Model.o +6fa7d3b1641b7ab3dcc048f1b1faff54,.data,build/u/assets/obseg/prop/disk_drive1/Model.o +b67f9a80ecdc599ad29e951d19da4eba,.data,build/u/assets/obseg/prop/doorconsole/Model.o +4c5e2830b72e80b4c7782a3a019755ec,.data,build/u/assets/obseg/prop/doorpanel/Model.o +375ac8a7a36c8c25c282b018319ab47e,.data,build/u/assets/obseg/prop/doorprison1/Model.o +7a930d947b3fcb7e5dfe13ac8aba4da3,.data,build/u/assets/obseg/prop/doorstatgate/Model.o +afe85898ca00b7ebbdf8e5c7f20f9e13,.data,build/u/assets/obseg/prop/door_aztec/Model.o +a3a0f93c186b748fcdb6906862132f9b,.data,build/u/assets/obseg/prop/door_azt_chair/Model.o +847e33bedfb11fdf62a7be109d84b519,.data,build/u/assets/obseg/prop/door_azt_desk/Model.o +1692f44aa88248ef589c8a8add2c482d,.data,build/u/assets/obseg/prop/door_azt_desk_top/Model.o +51b0beb893ebbb9ffc1d3e59f84b7ba7,.data,build/u/assets/obseg/prop/door_dest1/Model.o +7cbaf7a03f50a48dab2b27ac1564c256,.data,build/u/assets/obseg/prop/door_dest2/Model.o +130e8e67bdb757827b05800ccd8b2517,.data,build/u/assets/obseg/prop/door_eyelid/Model.o +0005b33f9e9fd96a4cc734ba2603e0e6,.data,build/u/assets/obseg/prop/door_iris/Model.o +d638cfd6f1b5fbfb4938330b999fda3e,.data,build/u/assets/obseg/prop/door_mf/Model.o +11258402c587b93b99c67140b5332426,.data,build/u/assets/obseg/prop/door_roller1/Model.o +32455b116d89a397fee004d47799f740,.data,build/u/assets/obseg/prop/door_roller2/Model.o +f83a4a39b97d0abb12b897566bd67cfc,.data,build/u/assets/obseg/prop/door_roller3/Model.o +c245d9db5f92cf837e09a0928f27ef8f,.data,build/u/assets/obseg/prop/door_roller4/Model.o +e77d025161a297b2bef6f81ad2a552f1,.data,build/u/assets/obseg/prop/door_rollertrain/Model.o +29aa7abd6c96c3faa2025859c5f77fe6,.data,build/u/assets/obseg/prop/door_st_arec1/Model.o +39b093ff95fbdc0af81dc3572d4027bc,.data,build/u/assets/obseg/prop/door_st_arec2/Model.o +397022473224922ae5124a61b9cd4d3f,.data,build/u/assets/obseg/prop/door_win/Model.o +ceed0423e2a58673a0c3b3abb9407ffc,.data,build/u/assets/obseg/prop/explosionbit/Model.o +1abc8e205215e654637340e8f30c0853,.data,build/u/assets/obseg/prop/filing_cabinet1/Model.o +e5c20763ae0cf1888a1b7ad642460e58,.data,build/u/assets/obseg/prop/flag/Model.o +045a3f78dee529e9b4179e6cbb33b431,.data,build/u/assets/obseg/prop/floppy/Model.o +74cc9c0eef7959679d980b7146fba768,.data,build/u/assets/obseg/prop/fnp90mag/Model.o +47cc2b95e0212be90177d4eb5587d217,.data,build/u/assets/obseg/prop/gasbarrel/Model.o +0c4eb6202db6e868f10399d52174d068,.data,build/u/assets/obseg/prop/gasbarrels/Model.o +694024f381d6dadabb6d291880b825e8,.data,build/u/assets/obseg/prop/gasplant_clear_door/Model.o +158540187583dcbc0a187418ab2595d2,.data,build/u/assets/obseg/prop/gastank/Model.o +52c16d1886df4955cf1e69ba2f6e48bd,.data,build/u/assets/obseg/prop/gas_plant_met1_do1/Model.o +b386a96c5b2f965abc689022121743f7,.data,build/u/assets/obseg/prop/gas_plant_sw2_do1/Model.o +25a7ea69ac5986875773469a0aa40453,.data,build/u/assets/obseg/prop/gas_plant_sw3_do1/Model.o +5dd0099c1e0719cc0126f5cc5bb82c13,.data,build/u/assets/obseg/prop/gas_plant_sw4_do1/Model.o +3e291537f9632babd896e5194d79f46d,.data,build/u/assets/obseg/prop/gas_plant_sw_do1/Model.o +735a21d27d95d8d031aea3e149a65bdd,.data,build/u/assets/obseg/prop/gas_plant_wc_cub1/Model.o +11af46843febec0768344be091408512,.data,build/u/assets/obseg/prop/glassware1/Model.o +1c0e2935c96c59bc9c088c7bc0d5600e,.data,build/u/assets/obseg/prop/glassware2/Model.o +f6997a29e4197818a8a3fdef97f2cd9c,.data,build/u/assets/obseg/prop/glassware3/Model.o +1265c276b1f424305e46a8e0eff7153c,.data,build/u/assets/obseg/prop/glassware4/Model.o +5209af05dab959623b062e6f970fa38f,.data,build/u/assets/obseg/prop/goldeneyelogo/Model.o +ab85604c2f93708f6da39983e60b538f,.data,build/u/assets/obseg/prop/goldenshells/Model.o +faa50cbc71df684c3c93abbba91505a9,.data,build/u/assets/obseg/prop/groundgun/Model.o +f0dc0fa0d79c3afc8235552e6260457a,.data,build/u/assets/obseg/prop/gun_runway1/Model.o +8604065b529772dd22618199ebb2606e,.data,build/u/assets/obseg/prop/hatberet/Model.o +67faf5f5dea9af40144d6226dd4e8f7e,.data,build/u/assets/obseg/prop/hatberetblue/Model.o +cec7370626e8e9ef3dcb1a7b6a421a19,.data,build/u/assets/obseg/prop/hatberetred/Model.o +6347ccf880c5c173ad96e61f02d4119e,.data,build/u/assets/obseg/prop/hatchbolt/Model.o +b9c6240cef1c81d93fe0c2c0ff03a2e4,.data,build/u/assets/obseg/prop/hatchdoor/Model.o +348eb1e24786538380ead4040d878989,.data,build/u/assets/obseg/prop/hatchsevx/Model.o +48f591b637b6d31973f6df78c83cf5bc,.data,build/u/assets/obseg/prop/hatfurry/Model.o +7469cbd377b729546c2233720e134378,.data,build/u/assets/obseg/prop/hatfurryblack/Model.o +303e40b5942fdee429c9a49f8963ab06,.data,build/u/assets/obseg/prop/hatfurrybrown/Model.o +24d51ffbb5eb4779fae7357ffa28a5d2,.data,build/u/assets/obseg/prop/hathelmet/Model.o +24d51ffbb5eb4779fae7357ffa28a5d2,.data,build/u/assets/obseg/prop/hathelmetgrey/Model.o +dd93745b2d677522423510e8c6c32e2b,.data,build/u/assets/obseg/prop/hatmoon/Model.o +754d16dfcb9e77b85a05e0fc125198a4,.data,build/u/assets/obseg/prop/hatpeaked/Model.o +32b0d9aeaea9e7d5d9e6544608672202,.data,build/u/assets/obseg/prop/hattbird/Model.o +0f895edf3537bfdc76a7fe27e5bea57c,.data,build/u/assets/obseg/prop/hattbirdbrown/Model.o +26b76da3bace76005aedd7a96df2ee52,.data,build/u/assets/obseg/prop/helicopter/Model.o +b8f9cd47b3b04e76c3618c2ced0b885f,.data,build/u/assets/obseg/prop/hind/Model.o +4518e75f2488f9aa4df2b67f81ca589f,.data,build/u/assets/obseg/prop/ICBM/Model.o +87c4c8c55a3ee16df2a00afeb8c5298e,.data,build/u/assets/obseg/prop/ICBM_nose/Model.o +a7132126eee85993bd0528a90bc4c1fd,.data,build/u/assets/obseg/prop/jeep/Model.o +cc2f1f49de5e6b9ba73cdedc14a8f1d3,.data,build/u/assets/obseg/prop/jerry_can1/Model.o +730de4c22e84cdafcbf104953a09d512,.data,build/u/assets/obseg/prop/jungle3_tree/Model.o +4a20fffa3b047643897664e7e62365cd,.data,build/u/assets/obseg/prop/jungle5_tree/Model.o +07127e10c984436c76f60ce9a36650ab,.data,build/u/assets/obseg/prop/keyboard1/Model.o +95ee80b39a4e5ff9b391328e69f10a5b,.data,build/u/assets/obseg/prop/key_holder/Model.o +4533857f5e1e89d506bef81e1620a41a,.data,build/u/assets/obseg/prop/kit_units1/Model.o +5353882c02ac986144e37bc2d2f7675e,.data,build/u/assets/obseg/prop/labbench/Model.o +a6a1a174c6acc1b0bb4a1ce24eac4034,.data,build/u/assets/obseg/prop/landmine/Model.o +13fc6d4f9c45a9b0df16ce3827a03dd2,.data,build/u/assets/obseg/prop/legalpage/Model.o +1bbeaa6a5497fca3bae50e2980c3578e,.data,build/u/assets/obseg/prop/letter_tray1/Model.o +79b07c74283b530a735830165967fb1c,.data,build/u/assets/obseg/prop/locker3/Model.o +a8051084a8cee306905410dc203dfe74,.data,build/u/assets/obseg/prop/locker4/Model.o +dd380c60590ba931e9306430740180c3,.data,build/u/assets/obseg/prop/m16mag/Model.o +ab85604c2f93708f6da39983e60b538f,.data,build/u/assets/obseg/prop/magnumshells/Model.o +c607f5020212ffd920b2c03ccdb675f4,.data,build/u/assets/obseg/prop/mainframe1/Model.o +59b6b34d89d3d47e602b5363d753869a,.data,build/u/assets/obseg/prop/mainframe2/Model.o +9bd2d60c185118e85d843f11648e9523,.data,build/u/assets/obseg/prop/metal_chair1/Model.o +131cfd3d4667668fdedb3feb882e5cc7,.data,build/u/assets/obseg/prop/metal_crate1/Model.o +c9735aa1efd63a2371ecaadf13a57ff7,.data,build/u/assets/obseg/prop/metal_crate2/Model.o +7028bcb826d30a31c95a31afe0b26641,.data,build/u/assets/obseg/prop/metal_crate3/Model.o +791f38168449c0c163086d1cb4124faa,.data,build/u/assets/obseg/prop/metal_crate4/Model.o +42c56b626bd4bfef30a228c08d1e6a3f,.data,build/u/assets/obseg/prop/milcopter/Model.o +76808a62fdc0549f5c88aacfda78c372,.data,build/u/assets/obseg/prop/miltruck/Model.o +115ae1bbf28e37e2a80fcdfea681c0d3,.data,build/u/assets/obseg/prop/missile_rack/Model.o +c8559cf6e886d8088bf48ea7c10f962e,.data,build/u/assets/obseg/prop/missile_rack2/Model.o +90ab39b50af0a9b91ce44e2e80ba8eee,.data,build/u/assets/obseg/prop/modembox/Model.o +ee0bf40d78d685171e31e6a15b52c94a,.data,build/u/assets/obseg/prop/motorbike/Model.o +6b5634b644467e8dcc962aefcb2f12d8,.data,build/u/assets/obseg/prop/mp5kmag/Model.o +1231f6bd6574c280fae72a41119d0327,.data,build/u/assets/obseg/prop/nintendologo/Model.o +247593320e8dd2f41f7d46c96f312c04,.data,build/u/assets/obseg/prop/oil_drum1/Model.o +cdbd27b8831ee6cf9d1dfa42982a2f83,.data,build/u/assets/obseg/prop/oil_drum2/Model.o +b4aec49d2070a02f6576b6e7c4f9c86f,.data,build/u/assets/obseg/prop/oil_drum3/Model.o +7f95efa573bcae3a0d3f1cf0bf84e807,.data,build/u/assets/obseg/prop/oil_drum5/Model.o +40b36aa3a62904e5d32acac50430d2f0,.data,build/u/assets/obseg/prop/oil_drum6/Model.o +c7e9cca0fa8d5befed27f6d08c54ad53,.data,build/u/assets/obseg/prop/oil_drum7/Model.o +17629af2a683b0b81145ba1baffda715,.data,build/u/assets/obseg/prop/padlock/Model.o +c4071d10bf4cdbc3e65cd1c0c0dd48ce,.data,build/u/assets/obseg/prop/palm/Model.o +b067960f21ae8c629ddd88474ccabb7a,.data,build/u/assets/obseg/prop/palmtree/Model.o +9055587d41125ab09c4d0c4cd652ee65,.data,build/u/assets/obseg/prop/phone1/Model.o +421a9ece7bb72146a463cdc761fd5c5d,.data,build/u/assets/obseg/prop/plane/Model.o +6613f2421ca5c0c067462e77ea609b4b,.data,build/u/assets/obseg/prop/plant1/Model.o +00975a7d7ef34ef8df744fcbc1251ed6,.data,build/u/assets/obseg/prop/plant11/Model.o +850e4b92e61de2b56dcc84a9b262cb98,.data,build/u/assets/obseg/prop/plant2/Model.o +0cc23eef38d6c65f5c9b839175f3eb47,.data,build/u/assets/obseg/prop/plant2b/Model.o +457f59084e4f16a5db7909b4520de85b,.data,build/u/assets/obseg/prop/plant3/Model.o +06fb1a5ff5dc4f93091fdb6519249d1b,.data,build/u/assets/obseg/prop/radio_unit1/Model.o +d3dcc8a9e04572f2e80161eab0ae99d6,.data,build/u/assets/obseg/prop/radio_unit2/Model.o +0dc42ef4b72581fdc47449d37aaeee0a,.data,build/u/assets/obseg/prop/radio_unit3/Model.o +487df2a9701be43cec47df2fb49d7b61,.data,build/u/assets/obseg/prop/radio_unit4/Model.o +70429f8c96f909fc2f330240daea4ada,.data,build/u/assets/obseg/prop/roofgun/Model.o +4e73a50dcbfa98d5ea9db23b6393fc56,.data,build/u/assets/obseg/prop/safe/Model.o +3d3771b46a70becc3917881036d561f9,.data,build/u/assets/obseg/prop/safedoor/Model.o +bacfb9482faad04a7cf2420304b44daf,.data,build/u/assets/obseg/prop/sat1_reflect/Model.o +027b797a17b9076bf0cb97411fd10c07,.data,build/u/assets/obseg/prop/satbox/Model.o +feba6214bcb15aea0141b6d39514c803,.data,build/u/assets/obseg/prop/satdish/Model.o +19ece06a9c2a1931486129dbbd397e14,.data,build/u/assets/obseg/prop/sec_panel/Model.o +e72b31d58cc45fa3841099fc855c1560,.data,build/u/assets/obseg/prop/sevdish/Model.o +eb9aa667f7691edfa35095c85f547f90,.data,build/u/assets/obseg/prop/sevdoormetslide/Model.o +0cea3d47b5eab8ebf685dd346940a1a8,.data,build/u/assets/obseg/prop/sevdoornowind/Model.o +3c0e4adc90789dc72b5a0eb7e2e1aa29,.data,build/u/assets/obseg/prop/sevdoorwind/Model.o +8a84a4fdf60f53b9ca380b5c12358cb6,.data,build/u/assets/obseg/prop/sevdoorwood/Model.o +62d03ed228e04de504573a1e2f65644e,.data,build/u/assets/obseg/prop/sev_door/Model.o +198b6b583eff5b7f7c101fdc646ec6e1,.data,build/u/assets/obseg/prop/sev_door3/Model.o +62c72778e6737866187036c4fb94f1e9,.data,build/u/assets/obseg/prop/sev_door3_wind/Model.o +5a8453bbdb9c753e9bff3fc3595e8430,.data,build/u/assets/obseg/prop/sev_door4_wind/Model.o +3d9a9259f4c6ebfe77b6721bfa0dd886,.data,build/u/assets/obseg/prop/sev_door_v1/Model.o +7b7f1028a850d66930a85e96fb5b8efe,.data,build/u/assets/obseg/prop/sev_trislide/Model.o +9cb3029ebf79d42a1bc49048a7414fda,.data,build/u/assets/obseg/prop/shuttle/Model.o +eba5c5c1d6785acbe2fd8d1448eaa5e3,.data,build/u/assets/obseg/prop/shuttle_door_l/Model.o +444f48cf9927b6898e5f5884404bb580,.data,build/u/assets/obseg/prop/shuttle_door_r/Model.o +6cd37b030c2540e3e59c1115b55ab823,.data,build/u/assets/obseg/prop/silencer/Model.o +3da9ee036458a1a2da4196e4a5bb7399,.data,build/u/assets/obseg/prop/silotopdoor/Model.o +5b5d48322960dbc84f93030f9da45c48,.data,build/u/assets/obseg/prop/silo_lift_door/Model.o +60affdd74d1718a598d2576b20bb01f8,.data,build/u/assets/obseg/prop/skorpionmag/Model.o +faa56a8bbb6dc56d943b7fc867da8507,.data,build/u/assets/obseg/prop/spectremag/Model.o +455dfc7279c89e58bf0c87f887c2817f,.data,build/u/assets/obseg/prop/speedboat/Model.o +13780398429e89eca1c28a38902ca14f,.data,build/u/assets/obseg/prop/steel_door1/Model.o +4948132b783fb674a1f293e87d0535a4,.data,build/u/assets/obseg/prop/steel_door2/Model.o +cc76f1ef1db03c2bdbf884c8af020c28,.data,build/u/assets/obseg/prop/steel_door2b/Model.o +3e6bfce0b08759206ac42647effde8be,.data,build/u/assets/obseg/prop/steel_door3/Model.o +50eaf0d08834d9b5d063c2324f7b0040,.data,build/u/assets/obseg/prop/stool1/Model.o +4273714c13ca122c431ef6fc7ff3e82a,.data,build/u/assets/obseg/prop/st_pete_room_1i/Model.o +094ccd8cdc2136be6f673a30798378e3,.data,build/u/assets/obseg/prop/st_pete_room_2i/Model.o +a20a740ccba2e1cdd691c35a049e6898,.data,build/u/assets/obseg/prop/st_pete_room_3t/Model.o +a62809c34920ce88daae462146a692cb,.data,build/u/assets/obseg/prop/st_pete_room_5c/Model.o +ebf5e8a1bc245e400e7e67282cfd9277,.data,build/u/assets/obseg/prop/st_pete_room_6c/Model.o +3ed97844759027983bf8a37652861297,.data,build/u/assets/obseg/prop/swipe_card2/Model.o +848616f569f1bdaf5b38398204e5eb50,.data,build/u/assets/obseg/prop/swivel_chair1/Model.o +c0c04ee1713395d332e5fbbc82b2fe98,.data,build/u/assets/obseg/prop/tank/Model.o +794aae1b96fa2d6fb5acd04508ce5166,.data,build/u/assets/obseg/prop/tiger/Model.o +60b46418b34756daceb381849397ed30,.data,build/u/assets/obseg/prop/torpedo_rack/Model.o +93765b32d17efeff7b424f6ab8a112d3,.data,build/u/assets/obseg/prop/trainextdoor/Model.o +d3411c11bb7b4845971b3d2c7031cb45,.data,build/u/assets/obseg/prop/train_door/Model.o +2fbe15a7e2ee0dd755a5136b31048204,.data,build/u/assets/obseg/prop/train_door2/Model.o +84ad081404721dc4a84d2a9484da7655,.data,build/u/assets/obseg/prop/train_door3/Model.o +920653007bf5e538aa54e863866907a3,.data,build/u/assets/obseg/prop/tt33mag/Model.o +579a6760630c21d894c0301e604a9615,.data,build/u/assets/obseg/prop/tuning_console1/Model.o +61e7235db27b1977c68319bdca9cb513,.data,build/u/assets/obseg/prop/tv1/Model.o +596aec1823435ff9df464bf9831011fc,.data,build/u/assets/obseg/prop/tv4screen/Model.o +1e2e160cae44551c17301fdb0dea8378,.data,build/u/assets/obseg/prop/tvscreen/Model.o +8ec00d8246f82255c7069b814759363f,.data,build/u/assets/obseg/prop/tv_holder/Model.o +920653007bf5e538aa54e863866907a3,.data,build/u/assets/obseg/prop/uzimag/Model.o +649affcf6b91f1d4c497bfb6c8167429,.data,build/u/assets/obseg/prop/vertdoor/Model.o +d77e6b013ded91ea18f3656705c878d4,.data,build/u/assets/obseg/prop/walletbond/Model.o +1831172d39edfbf374f824935fdfda2c,.data,build/u/assets/obseg/prop/window/Model.o +0999ea224cc5f50c0e4a36fbdbf83f4c,.data,build/u/assets/obseg/prop/window_cor11/Model.o +17517a7c961b75fdb2dc6db671991f50,.data,build/u/assets/obseg/prop/window_lib_lg1/Model.o +1c60a20ab667e9438264754be3d6b9db,.data,build/u/assets/obseg/prop/window_lib_sm1/Model.o +91fa9c8f88c3ba1a7ca6af15d407fe38,.data,build/u/assets/obseg/prop/wooden_table1/Model.o +f5ccccfb45330e8c05c6211a2410faef,.data,build/u/assets/obseg/prop/wood_lg_crate1/Model.o +45028b282968aaeca3d1aee214501daf,.data,build/u/assets/obseg/prop/wood_lg_crate2/Model.o +db93df26237be436a6948cf7d8fa7dd5,.data,build/u/assets/obseg/prop/wood_md_crate3/Model.o +edd1e55ffca754814f563268a323b824,.data,build/u/assets/obseg/prop/wood_sm_crate4/Model.o +943fdab113b6cb2bb73078aed1d23bfb,.data,build/u/assets/obseg/prop/wood_sm_crate5/Model.o +871d4bce9a4767b66f4105330a0e3ed4,.data,build/u/assets/obseg/prop/wood_sm_crate6/Model.o +920653007bf5e538aa54e863866907a3,.data,build/u/assets/obseg/prop/wppkmag/Model.o +505a174e9ba17b40733bf87bab422350,.data,build/u/assets/obseg/setup/Ump_setupameZ.o +ab1d1168e3309a4e1d8898dead14d5ca,.rodata,build/u/assets/obseg/setup/Ump_setupameZ.o +d3ecd34091343233de96fcd7709fb389,.data,build/u/assets/obseg/setup/Ump_setuparchZ.o +5dddc63a188899ef3aacf71dc92c8e75,.rodata,build/u/assets/obseg/setup/Ump_setuparchZ.o +d72a224479ee04046e2458e75ba971dd,.data,build/u/assets/obseg/setup/Ump_setuparkZ.o +9da7d43d1061590d6aaed55112c30adf,.rodata,build/u/assets/obseg/setup/Ump_setuparkZ.o +4bbf2415439ad3988b72542dc7c16435,.data,build/u/assets/obseg/setup/Ump_setupashZ.o +ab1d1168e3309a4e1d8898dead14d5ca,.rodata,build/u/assets/obseg/setup/Ump_setupashZ.o +9caabe90e7f9b62668b607b286e14738,.data,build/u/assets/obseg/setup/Ump_setupcaveZ.o +966bcbf56fab2e5a8306a27c2be2821e,.rodata,build/u/assets/obseg/setup/Ump_setupcaveZ.o +e3270c14ece27e5f15f0bf54e20f000b,.data,build/u/assets/obseg/setup/Ump_setupcradZ.o +1332398676dda34bcb4104546a94cde8,.rodata,build/u/assets/obseg/setup/Ump_setupcradZ.o +baf4a21c4c3a50dfc68dd4bb79e1a4e4,.data,build/u/assets/obseg/setup/Ump_setupcrypZ.o +25568bb18b99a852d18fba045213caa4,.rodata,build/u/assets/obseg/setup/Ump_setupcrypZ.o +5d8b43300e7b701a21629ccee455aa44,.data,build/u/assets/obseg/setup/Ump_setupdamZ.o +f351df409b29d7b80f07b28b2b39c19d,.rodata,build/u/assets/obseg/setup/Ump_setupdamZ.o +d371b61f3ef254edc288c388a8dc6898,.data,build/u/assets/obseg/setup/Ump_setupdepotZ.o +bce3c8f75bf884451c11c5992d3d76bf,.rodata,build/u/assets/obseg/setup/Ump_setupdepotZ.o +ac0f775f3312808d3f479dc5c8542142,.data,build/u/assets/obseg/setup/Ump_setupdestZ.o +6b1258f76736d8ab71a948030a16e689,.rodata,build/u/assets/obseg/setup/Ump_setupdestZ.o +52738bf0cf907b44c5c304bdb71b5635,.data,build/u/assets/obseg/setup/Ump_setupdishZ.o +db0620822dd4f53ca244a0997bd92f9d,.rodata,build/u/assets/obseg/setup/Ump_setupdishZ.o +9a2d5bb6c18ee5acdaade6edd0ea6571,.data,build/u/assets/obseg/setup/Ump_setupimpZ.o +ab1d1168e3309a4e1d8898dead14d5ca,.rodata,build/u/assets/obseg/setup/Ump_setupimpZ.o +66ed502d7ebd0286c31df6d918342d76,.data,build/u/assets/obseg/setup/Ump_setupoatZ.o +2a285f6bffe60426c716f84bd5178948,.rodata,build/u/assets/obseg/setup/Ump_setupoatZ.o +a192e4098a04675dc0406394441c5596,.data,build/u/assets/obseg/setup/Ump_setuprefZ.o +acc9011f897a5b3b45cad7c1ea4b4715,.rodata,build/u/assets/obseg/setup/Ump_setuprefZ.o +840c26a79b0425b9635f70ea5d1cce2c,.data,build/u/assets/obseg/setup/Ump_setuprunZ.o +d8dd467ddada77c0a04028e782a49e22,.rodata,build/u/assets/obseg/setup/Ump_setuprunZ.o +fa7a848eb5dac0a60671450aa46df0aa,.data,build/u/assets/obseg/setup/Ump_setupsevbZ.o +44b3c131f9627281b5d1e3d72ddd50d2,.rodata,build/u/assets/obseg/setup/Ump_setupsevbZ.o +39e07e5a0707a6c1ba36f23bc2b8a867,.data,build/u/assets/obseg/setup/Ump_setupstatueZ.o +adb0b6f3ef926a53ca4468251dc25d24,.rodata,build/u/assets/obseg/setup/Ump_setupstatueZ.o +14a533d673facd6407d27994b5add721,.data,build/u/assets/obseg/setup/UsetuparchZ.o +8c9e41dc4bfd4e3a4257e50d01d59f16,.rodata,build/u/assets/obseg/setup/UsetuparchZ.o +df46b4d3b99be3fec5c4af95622ebd35,.data,build/u/assets/obseg/setup/UsetuparkZ.o +e3a6ea2b5e0116a92c0d944720f4555d,.rodata,build/u/assets/obseg/setup/UsetuparkZ.o +dea9ac3dcf299ac954a6d31b6998dbde,.data,build/u/assets/obseg/setup/UsetupaztZ.o +90dfc984ae56837963ad6c378179e575,.rodata,build/u/assets/obseg/setup/UsetupaztZ.o +cfcdf6399fd8558a81aedabca825886f,.data,build/u/assets/obseg/setup/UsetupcaveZ.o +b4d18f2d43ed9ab43c66ea8a9dbf601e,.rodata,build/u/assets/obseg/setup/UsetupcaveZ.o +86bb66970474e427936a5b4278d0a4e8,.data,build/u/assets/obseg/setup/UsetupcontrolZ.o +0a6d7e907a934a22f192afd8a338864f,.rodata,build/u/assets/obseg/setup/UsetupcontrolZ.o +7a97b531c89ef4100caca1810791a330,.data,build/u/assets/obseg/setup/UsetupcradZ.o +352f4bbf95b387e7dac966ea4039df16,.rodata,build/u/assets/obseg/setup/UsetupcradZ.o +2116905de55f8a2add7def57bfab3733,.data,build/u/assets/obseg/setup/UsetupcrypZ.o +2ca0538045df922ddffd5f7a56bf9f6f,.rodata,build/u/assets/obseg/setup/UsetupcrypZ.o +192c4a53cf1a38e18926f44bbccd276d,.data,build/u/assets/obseg/setup/UsetupdamZ.o +f3f0addffd8b48b5a1eefe4799791d48,.rodata,build/u/assets/obseg/setup/UsetupdamZ.o +aa084741c9c5db45bae711efc0a33fe2,.data,build/u/assets/obseg/setup/UsetupdepoZ.o +7ea25ce7fd3caf5849a08d69accca997,.rodata,build/u/assets/obseg/setup/UsetupdepoZ.o +6c75f6b6ad2377d28ca7b72f77ac30d8,.data,build/u/assets/obseg/setup/UsetupdestZ.o +513cf92e4775bacf5d139789b86a9598,.rodata,build/u/assets/obseg/setup/UsetupdestZ.o +a1115ec641db7f5ca65fa6ba1a8861e3,.data,build/u/assets/obseg/setup/UsetupjunZ.o +ebd5e09c96d80ae0b3244a7607f40185,.rodata,build/u/assets/obseg/setup/UsetupjunZ.o +456a996465f1681c534404419a07efc8,.data,build/u/assets/obseg/setup/UsetuplenZ.o +aa0cd1b5e2fa6aa154d53b48882dd8d4,.rodata,build/u/assets/obseg/setup/UsetuplenZ.o +2d05088e0082bae7a720d6a476283519,.data,build/u/assets/obseg/setup/UsetuppeteZ.o +3887668ddf86cf4380d9a5f16bc2dcf3,.rodata,build/u/assets/obseg/setup/UsetuppeteZ.o +2a26a94abd77eb88153ce42d4d6e3414,.data,build/u/assets/obseg/setup/UsetuprunZ.o +7638bc9258fb1dd47ce0cbb77a916f4f,.rodata,build/u/assets/obseg/setup/UsetuprunZ.o +6ae37ef5d6eee372ef100bc85e864de2,.data,build/u/assets/obseg/setup/UsetupsevbunkerZ.o +b5d1f1688129156bed0f46a1f10f4c4e,.rodata,build/u/assets/obseg/setup/UsetupsevbunkerZ.o +a94881aeb4f12a22bd27b71fcbea7f93,.data,build/u/assets/obseg/setup/UsetupsevbZ.o +0cf8f0dc88c6e5c615415596d9ee1439,.rodata,build/u/assets/obseg/setup/UsetupsevbZ.o +493bfe05761a14f4f7647f613115e0f7,.data,build/u/assets/obseg/setup/UsetupsevxbZ.o +214e937f3abb7fa20e8ec4df011578de,.rodata,build/u/assets/obseg/setup/UsetupsevxbZ.o +5a95cb479a12148813980fcbca8cf93c,.data,build/u/assets/obseg/setup/UsetupsevxZ.o +6b0d217217cc5137855ec4f175ebcfa5,.rodata,build/u/assets/obseg/setup/UsetupsevxZ.o +631ac7507ee4572ecddf59fd9af48b7e,.data,build/u/assets/obseg/setup/UsetupsiloZ.o +6fdb011700c5c0c289ae934e8c6ec60f,.rodata,build/u/assets/obseg/setup/UsetupsiloZ.o +599e0f739b5a910616a71b009cc85ebc,.data,build/u/assets/obseg/setup/UsetupstatueZ.o +71a776c5247039f708ce1346c95ed2fb,.rodata,build/u/assets/obseg/setup/UsetupstatueZ.o +12f885daaf75467887b7cbb43354e935,.data,build/u/assets/obseg/setup/UsetuptraZ.o +4701660837b568334586d2a494bea037,.rodata,build/u/assets/obseg/setup/UsetuptraZ.o +b1c4e40a881c345e593eb8246d727f46,.data,build/u/assets/obseg/stan/Tbg_ame_all_p_stanZ.o +7ca676a375a0d8d08e5931610598b6d4,.data,build/u/assets/obseg/stan/Tbg_arch_all_p_stanZ.o +2688daaa6b0f2f59e7e02ae9ba95be85,.data,build/u/assets/obseg/stan/Tbg_arec_all_p_stanZ.o +a057fe4ab5f288016da38006086756b7,.data,build/u/assets/obseg/stan/Tbg_ark_all_p_stanZ.o +b1c4e40a881c345e593eb8246d727f46,.data,build/u/assets/obseg/stan/Tbg_ash_all_p_stanZ.o +09ed891dfef1e77bc487b23c6f5bea95,.data,build/u/assets/obseg/stan/Tbg_azt_all_p_stanZ.o +faba7e91e6d464cc6cc671aed03b7719,.data,build/u/assets/obseg/stan/Tbg_cat_all_p_stanZ.o +827ae21e5b4aa345fa3b51c8494ca1d8,.rodata,build/u/assets/obseg/stan/Tbg_cat_all_p_stanZ.o +b3215b85b77d6adbc495d0e446eba0cf,.data,build/u/assets/obseg/stan/Tbg_cave_all_p_stanZ.o +1b488bbae36c96593c4636e8406afb2c,.data,build/u/assets/obseg/stan/Tbg_crad_all_p_stanZ.o +ee1fb6264844257ae78e0de464be1f6d,.data,build/u/assets/obseg/stan/Tbg_cryp_all_p_stanZ.o +ac9b55ee6961cfbe4a8b0f79fdcbc7fe,.data,build/u/assets/obseg/stan/Tbg_dam_all_p_stanZ.o +7ea1a82a0f3b87a38e42ecd8e44baa76,.data,build/u/assets/obseg/stan/Tbg_depo_all_p_stanZ.o +856a8f0f2ddb31a1fd512dbbfe0c8763,.data,build/u/assets/obseg/stan/Tbg_dest_all_p_stanZ.o +bb55353a9f75ada784750decf91337f8,.data,build/u/assets/obseg/stan/Tbg_dish_all_p_stanZ.o +b1c4e40a881c345e593eb8246d727f46,.data,build/u/assets/obseg/stan/Tbg_imp_all_p_stanZ.o +e5b50da9773335420524ae4e33cce850,.data,build/u/assets/obseg/stan/Tbg_jun_all_p_stanZ.o +ae5ede059252d6ce4da9e79a0393ee98,.data,build/u/assets/obseg/stan/Tbg_len_all_p_stanZ.o +8260b7a7be2a02444f074fe4315070e5,.data,build/u/assets/obseg/stan/Tbg_oat_all_p_stanZ.o +e5b4cb17a05fdb99d908d0d5927cd19e,.data,build/u/assets/obseg/stan/Tbg_pete_all_p_stanZ.o +aa1546f1e09f7a6116d51f87786621d9,.data,build/u/assets/obseg/stan/Tbg_ref_all_p_stanZ.o +ef1efff8f0d100d3a3d7c8d9b9805643,.data,build/u/assets/obseg/stan/Tbg_run_all_p_stanZ.o +b490026d969f03bbd454d174f6c64c42,.data,build/u/assets/obseg/stan/Tbg_sevb_all_p_stanZ.o +42c5b0307eec8549956b0a75397ade93,.data,build/u/assets/obseg/stan/Tbg_sevx_all_p_stanZ.o +1a18c0d029054b8c4026b3efb2264d12,.data,build/u/assets/obseg/stan/Tbg_sev_all_p_stanZ.o +570a958a10b9e6962b0d55449f62ea3f,.data,build/u/assets/obseg/stan/Tbg_sho_all_p_stanZ.o +f0a204c9b33851d045971d5b33d0b9cd,.data,build/u/assets/obseg/stan/Tbg_silo_all_p_stanZ.o +8bafb0743a0d92c83b0aec2bf2dedc17,.data,build/u/assets/obseg/stan/Tbg_stat_all_p_stanZ.o +228d56baf9bf34d1a6f45e4195306831,.data,build/u/assets/obseg/stan/Tbg_tra_all_p_stanZ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LameE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LameJ.o +40375b0a8c1eee1a393674140514db0f,.data,build/u/assets/obseg/text/LarchE.o +5bcae7d284bbfc80408fadd4badd73b7,.rodata,build/u/assets/obseg/text/LarchE.o +dbe9e4326b4e5b1b129950484651897c,.data,build/u/assets/obseg/text/LarchJ.o +018896a1b133d314f6ed19b82250b35e,.rodata,build/u/assets/obseg/text/LarchJ.o +915a2f930db20f887e025a442446efdb,.data,build/u/assets/obseg/text/LarecE.o +66c43c14b6f1331860cc42c6f75f5dce,.rodata,build/u/assets/obseg/text/LarecE.o +d0c51d28aa7e3ead90e7692b1878c3bd,.data,build/u/assets/obseg/text/LarecJ.o +a39231dc9106ae83632440debcca1f17,.rodata,build/u/assets/obseg/text/LarecJ.o +68016142854324635bb656ed81a1fbd2,.data,build/u/assets/obseg/text/LarkE.o +05a5ea6aaf7af5225d5424568d7260f4,.rodata,build/u/assets/obseg/text/LarkE.o +a11d9aaeb270df2553ac17be83792938,.data,build/u/assets/obseg/text/LarkJ.o +46bec36881b439fb7d239e91e747928e,.rodata,build/u/assets/obseg/text/LarkJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LashE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LashJ.o +78ed274beb6e13710bae643814b671ed,.data,build/u/assets/obseg/text/LaztE.o +b15a317aed068809603365223c76e6c0,.rodata,build/u/assets/obseg/text/LaztE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LcatE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LcatJ.o +8912e4552c084430fb39d132f2629c92,.data,build/u/assets/obseg/text/LcaveE.o +a3fecff5d1388aabed62f5993b8c1ae6,.rodata,build/u/assets/obseg/text/LcaveE.o +9e2991e2b3908b0be3087e621170d5eb,.data,build/u/assets/obseg/text/LcaveJ.o +e632526d0c18895dee5bfd7a149efc2d,.rodata,build/u/assets/obseg/text/LcaveJ.o +cad64034f753f2197f25909cfe85a69c,.data,build/u/assets/obseg/text/LcradE.o +1a99f6b879c658c72669c359522bf22e,.rodata,build/u/assets/obseg/text/LcradE.o +a5db25f77d2019e62d9ef08690a72d47,.data,build/u/assets/obseg/text/LcradJ.o +459c114c8cbf2975830c31a17c2575d1,.rodata,build/u/assets/obseg/text/LcradJ.o +a5dd43fa608e1e19b53db6955c7075a1,.data,build/u/assets/obseg/text/LcrypE.o +fb2e8c50b91a21ba4b169c04a742127a,.rodata,build/u/assets/obseg/text/LcrypE.o +c960e86f0c66732d8336cd4ba75f46ed,.data,build/u/assets/obseg/text/LcrypJ.o +b6a20ee727fc89acd95cf192de24ff3e,.rodata,build/u/assets/obseg/text/LcrypJ.o +e205f5cdce6490730ad57d9c840a430f,.data,build/u/assets/obseg/text/LdamE.o +e07024a5df42036b189573b1179fa412,.rodata,build/u/assets/obseg/text/LdamE.o +d65c3c8f893a3db65d0ff5b557f7d9e8,.data,build/u/assets/obseg/text/LdamJ.o +f53bede52d021cfb15bbf665fff73db4,.rodata,build/u/assets/obseg/text/LdamJ.o +77b03ef19e0263a057e8df1c81f47de4,.data,build/u/assets/obseg/text/LdepoE.o +566a0cb0d5fb0165f50c817d53d82337,.rodata,build/u/assets/obseg/text/LdepoE.o +f092d9e7fb8deb596dd5c72d251262a4,.data,build/u/assets/obseg/text/LdepoJ.o +f36cdf9fea81b9cca3213d5c3304fa07,.rodata,build/u/assets/obseg/text/LdepoJ.o +78c0742ea9a47d55d3e014d1dd89b79b,.data,build/u/assets/obseg/text/LdestE.o +d8d294b690ace59508fad0252c2bfa22,.rodata,build/u/assets/obseg/text/LdestE.o +58f12d62fdf22ab403b4000f756da9b4,.data,build/u/assets/obseg/text/LdestJ.o +91ae39a8422254da064603940e9d78b3,.rodata,build/u/assets/obseg/text/LdestJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LdishE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LdishJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LearE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LearJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LeldE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LeldJ.o +a164e63ed1cb68255fd985a6eab8e927,.data,build/u/assets/obseg/text/LgunE.o +9768b9303970aa139698b3f210495d8e,.rodata,build/u/assets/obseg/text/LgunE.o +3c6c4fe43d93937e67701b50246f77df,.data,build/u/assets/obseg/text/LgunJ.o +1e7f24ceb1a009911f3415be2b2498ab,.rodata,build/u/assets/obseg/text/LgunJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LimpE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LimpJ.o +e0eb6398245dd1df5952be511569a7c6,.data,build/u/assets/obseg/text/LjunE.o +c3f6256e87dc5d2238c91d9e35b35203,.rodata,build/u/assets/obseg/text/LjunE.o +93977f3cb19d1accd13f3a02c800fa3c,.data,build/u/assets/obseg/text/LjunJ.o +1c134a5614358f8e3df504845a4dd948,.rodata,build/u/assets/obseg/text/LjunJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LleeE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LleeJ.o +45870e825e124904bf6c6f651abc3330,.data,build/u/assets/obseg/text/LlenE.o +e08ee7e9fbc0619b0033edd4d46ba5e0,.rodata,build/u/assets/obseg/text/LlenE.o +af3fe7c0e822377bef963ec817851854,.data,build/u/assets/obseg/text/LlenJ.o +d5c7f2581757b2c88453d2d123c9ae08,.rodata,build/u/assets/obseg/text/LlenJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LlipE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LlipJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LlueE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LlueJ.o +63e974a34fd5944c38fd03fad1c8554c,.data,build/u/assets/obseg/text/LmiscE.o +b1b2626e2f70e9f64374f5d225581da2,.rodata,build/u/assets/obseg/text/LmiscE.o +1c3f1e9b16fcdd7e5ca632cc4143b8c7,.data,build/u/assets/obseg/text/LmpmenuE.o +51b7f06e0dbd8989f8c21661faedcbc5,.rodata,build/u/assets/obseg/text/LmpmenuE.o +3c005bea9e17093c957adb85dd4b724b,.data,build/u/assets/obseg/text/LmpmenuJ.o +4823853f7fef5656740908dc5326503e,.rodata,build/u/assets/obseg/text/LmpmenuJ.o +27b33a70975e8963d090085d67c0e11e,.data,build/u/assets/obseg/text/LmpweaponsE.o +4258a3157197bfd902a3edf5ebeca094,.rodata,build/u/assets/obseg/text/LmpweaponsE.o +a60f257d3486c29290de1d96c7aba1f1,.data,build/u/assets/obseg/text/LmpweaponsJ.o +67c3d4478ce7fe03628da496b8724a60,.rodata,build/u/assets/obseg/text/LmpweaponsJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LoatE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LoatJ.o +8cb0539d740502fd140b92d50cddebbe,.data,build/u/assets/obseg/text/LoptionsE.o +983fd0a54b2bf95f1f6d22b10334017e,.rodata,build/u/assets/obseg/text/LoptionsE.o +d9fbcd58c4fbf1291c8e768e67c540c4,.data,build/u/assets/obseg/text/LoptionsJ.o +e3ab3d69b0a6b4c129f0c5e8951ca771,.rodata,build/u/assets/obseg/text/LoptionsJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LpamE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LpamJ.o +04a39af55d3cf6a355fa7e1abf9d3936,.data,build/u/assets/obseg/text/LpeteE.o +eaadee243470be31eb552f5d820f3a5d,.rodata,build/u/assets/obseg/text/LpeteE.o +749ac5b1f0cbf6ef5a0d0186c6016f7d,.data,build/u/assets/obseg/text/LpeteJ.o +2f4e116b1e74df22cee53bec9a6c0180,.rodata,build/u/assets/obseg/text/LpeteJ.o +fa5bea6a2ce0736029d3435f3da08a71,.data,build/u/assets/obseg/text/LpropobjE.o +42a88b249ca7c8d56a4ced2f13c8dab9,.rodata,build/u/assets/obseg/text/LpropobjE.o +d09a2dec8eafc3c7b623b26056109d8f,.data,build/u/assets/obseg/text/LpropobjJ.o +b0b622c9c88222155aa0d4b1e3638ec8,.rodata,build/u/assets/obseg/text/LpropobjJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LrefE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LrefJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LritE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LritJ.o +e9c5308dc6ccc93b5f34141b8f9a46ba,.data,build/u/assets/obseg/text/LrunE.o +2fd0d517cff1a6e76b2fd8d5e03b84d2,.rodata,build/u/assets/obseg/text/LrunE.o +53d5da8d3b0a205209bc32bffb623f2c,.data,build/u/assets/obseg/text/LrunJ.o +9ee606c9907824ea41a68ed50449b8c2,.rodata,build/u/assets/obseg/text/LrunJ.o +99b5d2c99e8436044ab80f4d5c10955d,.data,build/u/assets/obseg/text/LsevbE.o +a533dc0dea666db00823112b16a25e35,.rodata,build/u/assets/obseg/text/LsevbE.o +857201f7708da54326d9f65a607f0699,.data,build/u/assets/obseg/text/LsevE.o +4388dfac4ac5ddd6f1e806f444785d1f,.rodata,build/u/assets/obseg/text/LsevE.o +216e3e8ac6df1deefd48a44048b7f2a9,.data,build/u/assets/obseg/text/LsevJ.o +9d5d536dbf0ac817c41c6f6ce1da1c2e,.rodata,build/u/assets/obseg/text/LsevJ.o +381c7194edce1643c856ee5408955858,.data,build/u/assets/obseg/text/LsevxbE.o +5c151a11ab6f175f6dd2cf18fc8d9c48,.rodata,build/u/assets/obseg/text/LsevxbE.o +4b3b5544e4cb3af47d90f2d0bf992003,.data,build/u/assets/obseg/text/LsevxbJ.o +7a6f1aef8ae105dfb7b8c7e4944bbe19,.rodata,build/u/assets/obseg/text/LsevxbJ.o +b7253c719a43dcc64c39e3021777dfe4,.data,build/u/assets/obseg/text/LsevxE.o +bc300a0d53e25053b73dd7f2515a622b,.rodata,build/u/assets/obseg/text/LsevxE.o +ce0d781b0d13eec737ed28c1ec89700c,.data,build/u/assets/obseg/text/LsevxJ.o +b7b850df3d2cac26c9cfd6ba47f632d1,.rodata,build/u/assets/obseg/text/LsevxJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LshoE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LshoJ.o +7194bf077bcf7820a0525b9a7e37bac1,.data,build/u/assets/obseg/text/LsiloE.o +24a3e8a64ce0c707fab8a7aa11a252e3,.rodata,build/u/assets/obseg/text/LsiloE.o +156b33414aa03ab6e5990a6c0a59739c,.data,build/u/assets/obseg/text/LsiloJ.o +0f2bf8b4fba6f5c67e647b4e267da6a7,.rodata,build/u/assets/obseg/text/LsiloJ.o +beb5446cf51a511f1f5340c4e9dffb0b,.data,build/u/assets/obseg/text/LstatE.o +7b27123365b22407d6b61c22bd7475f5,.rodata,build/u/assets/obseg/text/LstatE.o +d1c38171fda9ed66e044ba9aa25e9297,.data,build/u/assets/obseg/text/LtitleE.o +fc81a6395d6b22c0bee22a3912eeef08,.rodata,build/u/assets/obseg/text/LtitleE.o +147293ccd4dbcd659b4eb15e89dcd416,.data,build/u/assets/obseg/text/LtitleJ.o +0613cb2ad4a7e5b8e02e61df7efee3a4,.rodata,build/u/assets/obseg/text/LtitleJ.o +d5a8b464357e4582526d3e194fdb613c,.data,build/u/assets/obseg/text/LtraE.o +690a72eb06470f3413686da7c1de04bb,.rodata,build/u/assets/obseg/text/LtraE.o +9c0161152260e669b702ed1d9259bbcb,.data,build/u/assets/obseg/text/LtraJ.o +bcfefbdf605af75037f04dfc07f6fbe7,.rodata,build/u/assets/obseg/text/LtraJ.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LwaxE.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LwaxJ.o +9e15f3cc7cc8d5888fdc2cfb9662324f,.data,build/u/assets/oddtextures.o +432621881a34c3f5ca4f747e51625ebf,.data,build/u/assets/ramrom/ramrom.o +2e9525ff4a94e12c5236b051b45e2b91,.data,build/u/assets/rarewarelogo.o +9726ddf4884124a266d21037a4764c8c,.data,build/u/assets/romfiles2.o 491aefb4d4b8ac93d91148b1ffba34ac,.text,build/u/src/aspboot.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/aspboot.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/aspboot.o efed453a5d8495a5ff7a9242f47ca5a1,.data,build/u/src/aspboot.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/aspboot.o cbc7fa12683f60e5808eb38a0c05d8b3,.text,build/u/src/audi.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/audi.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/audi.o e62d8b253b0235961f2b07a2fc6aa310,.data,build/u/src/audi.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/audi.o 777e15af9a517597194bb67603ffc8c0,.text,build/u/src/boot.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/boot.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/boot.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/boot.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/boot.o 390a6e8fd9248820c669513b093e671d,.text,build/u/src/bootcode.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/bootcode.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/bootcode.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/bootcode.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/bootcode.o b02cc13378f02a5cd4e3279a9ae5c1e3,.text,build/u/src/boss.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/boss.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/boss.o e3a62fd6496be9baa0ba838d0a6a3f5b,.data,build/u/src/boss.o 410ffb771c9a0d9f4d7e6c7c5f3e1482,.rodata,build/u/src/boss.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/c_data_filler.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/c_data_filler.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/c_data_filler.o -070ee92d9640e7ee5c871516833e7913,.data,build/u/src/c_data_filler.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/c_data_filler.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/cfb.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/cfb.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/cfb.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/cfb.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/cfb.o 1b26367f447e1934799ce7f835db6a32,.text,build/u/src/crash.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/crash.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/crash.o 08f0f14492e929b8a74f9a2005c0122d,.data,build/u/src/crash.o 778ded1675811d28570afa393ab3501b,.rodata,build/u/src/crash.o +070ee92d9640e7ee5c871516833e7913,.data,build/u/src/c_data_filler.o 1a53f2324202f75c22c5e2ab48fb6ea1,.text,build/u/src/deb.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/deb.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/deb.o 70bc8f4b72a86921468bf8e8441dce51,.data,build/u/src/deb.o 7f819c72a85094a2370e27c08875e1e3,.rodata,build/u/src/deb.o 4477e4008770aca3857f3ecf07fe2003,.text,build/u/src/debugmenu.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/debugmenu.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/debugmenu.o 276d4a6d9a2e7c9d498e07fc837a2aa0,.data,build/u/src/debugmenu.o e92288836956bf9224ae53a0dba0f810,.rodata,build/u/src/debugmenu.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/decompressbuffer.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/decompressbuffer.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/decompressbuffer.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/decompressbuffer.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/decompressbuffer.o c6af3c2e9a83066c1ff902c20ee56af0,.text,build/u/src/fr.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/fr.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/fr.o 01d89d596b628d788126e30b0914e799,.data,build/u/src/fr.o 94e2bec0d83b53385ba626feb3005cb4,.rodata,build/u/src/fr.o -ca1cbcc4fb9c78a067294329e536525b,.text,build/u/src/getra.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/getra.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/getra.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/getra.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/getra.o -f324bf220c6a6440660ae248f5caacff,.text,build/u/src/gspboot.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/gspboot.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/gspboot.o -139b8a71a892412631fde2baec4c818a,.data,build/u/src/gspboot.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/gspboot.o -7f67be25a6de8e1cfb9f7de1e358ca60,.text,build/u/src/init.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/init.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/init.o -6722e53003673c8d170b5e7b90347db8,.data,build/u/src/init.o -1ae0db2fe4e9df3204e902fb33d0d912,.rodata,build/u/src/init.o -aad691b2486e2c9e16086666f6e0932e,.text,build/u/src/joy.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/joy.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/joy.o -7ec00c5c61b1ffae630f69b9af0b948a,.data,build/u/src/joy.o -f977a71969374ebad0f7c04f294cac7a,.rodata,build/u/src/joy.o -0382ca46a3288d6e0026350d51be0285,.text,build/u/src/mema.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/mema.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/mema.o -4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/mema.o -f21e5f744b3e890f6888d01d3fa30186,.rodata,build/u/src/mema.o -ffb59be5f8e4ce2e682400b440ea67fc,.text,build/u/src/memp.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/memp.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/memp.o -51125f3585975b26997e1d958d1be315,.data,build/u/src/memp.o -577016899f32faa28940c56975dfbc10,.rodata,build/u/src/memp.o -9baf0615bc8479cbe4cc7731f04c4db8,.text,build/u/src/motor.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/motor.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/motor.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/motor.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/motor.o -9fc1c0102906fd56dab03a9a41d3d959,.text,build/u/src/music.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/music.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/music.o -8fed398f393ac0fd73bd9ca6c9f78da5,.data,build/u/src/music.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/music.o -f0e9bbd85c751a3c50e5f901e758a689,.text,build/u/src/osMapTLB.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/osMapTLB.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/osMapTLB.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/osMapTLB.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/osMapTLB.o -bb6e964831508d590c0ab981c8ea972d,.text,build/u/src/pi.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/pi.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/pi.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/pi.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/pi.o -e92b27891ce4a80638a9420e1686462c,.text,build/u/src/ramrom.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/ramrom.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/ramrom.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/ramrom.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/ramrom.o -6bdd08e2a1776366268f64cd380b565e,.text,build/u/src/random.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/random.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/random.o -dca45fee049430e0eb82fbab95852594,.data,build/u/src/random.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/random.o -2f18a8a28ba6d871e606bf3d84733b17,.text,build/u/src/rmon.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/rmon.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/rmon.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/rmon.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/rmon.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/rom_header.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/rom_header.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/rom_header.o -86cceb7c08a71576068016a44e557845,.data,build/u/src/rom_header.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/rom_header.o -9414dd746eddee59ce6bf97eca16853e,.text,build/u/src/rspboot.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/rspboot.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/rspboot.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/rspboot.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/rspboot.o -2e608563efcb2b39c34ba69075a26ba3,.text,build/u/src/sched.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/sched.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/sched.o -5052d2e59ba75fdce35192c3329208ed,.data,build/u/src/sched.o -7f4f9def985640140dc039da5e5901bc,.rodata,build/u/src/sched.o -5cc2b96a3af0731511e13116941881aa,.text,build/u/src/snd.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/snd.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/snd.o -3164fd3deaf61a47e826f42ac0cb0ef6,.data,build/u/src/snd.o -3b5d3c7d207e37dceeedd301e35e2e58,.rodata,build/u/src/snd.o -6793e62c6c048c8076ef1ba01c811afd,.text,build/u/src/speed_graph.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/speed_graph.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/speed_graph.o -6ba2212493a6e0df179e18776ec91a2d,.data,build/u/src/speed_graph.o -2d3c6d36b6aa6dc8cf369460a1f7f475,.rodata,build/u/src/speed_graph.o -feac6448e0cd21ecef02216d2e4382e3,.text,build/u/src/sprintf.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/sprintf.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/sprintf.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/sprintf.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/sprintf.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/stacks.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/stacks.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/stacks.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/stacks.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/stacks.o -9daa52f61a66d99824ff1819e30eaf45,.text,build/u/src/str.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/str.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/str.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/str.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/str.o -bf1dbfbf68152d4c12b0dcc7cfccdead,.text,build/u/src/tlb_hardwire.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/tlb_hardwire.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/tlb_hardwire.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/tlb_hardwire.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/tlb_hardwire.o -841fed8cf334353719e7cc62a23d6f8c,.text,build/u/src/tlb_manage.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/tlb_manage.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/tlb_manage.o -4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/tlb_manage.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/tlb_manage.o -edd570cb162c22ef99374ad4eaf2d997,.text,build/u/src/tlb_random.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/tlb_random.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/tlb_random.o -dca45fee049430e0eb82fbab95852594,.data,build/u/src/tlb_random.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/tlb_random.o -c697a3b4db3fe4c2f4f3b6b61c59f805,.text,build/u/src/tlb_resolve.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/tlb_resolve.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/tlb_resolve.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/tlb_resolve.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/tlb_resolve.o -66613e43d8d4226c3561d2b76981656a,.text,build/u/src/token.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/token.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/token.o -517c562ef69db9b195e72398e86df2e8,.data,build/u/src/token.o -a42d56e2d5c450108bc25059309dde97,.rodata,build/u/src/token.o -88df3b22747a0669007e5dc45395eb36,.text,build/u/src/usb.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/usb.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/usb.o -4a00906b1a7d23084c88deff78bc4925,.data,build/u/src/usb.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/usb.o -837b3153b8a25676f66f18514229a9d8,.text,build/u/src/vi.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/vi.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/vi.o -7fd04b9095026981c5f4433e9eb658c4,.data,build/u/src/vi.o -3890dff1c2a5913504508f6cf5c6760b,.rodata,build/u/src/vi.o c3e080f35dd357dc91f2c000908766b3,.text,build/u/src/game/alloc_window_pieces.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/alloc_window_pieces.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/alloc_window_pieces.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/alloc_window_pieces.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/alloc_window_pieces.o -24a7f13aff1807605ab3c310053ea433,.text,build/u/src/game/bg.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bg.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bg.o +f412cbfba0ba856765c769eb9231b9a9,.text,build/u/src/game/bg.o bd127dd2e420266918d4e0fc29c3aec1,.data,build/u/src/game/bg.o acbd92f46e58f485783dd7990993e722,.rodata,build/u/src/game/bg.o a147ff55f19da8d2fed990b18129a648,.text,build/u/src/game/bg2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bg2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bg2.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/bg2.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/bg2.o a147ff55f19da8d2fed990b18129a648,.text,build/u/src/game/bgapply.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bgapply.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bgapply.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/bgapply.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/bgapply.o 6262372c48959b0d142d7bd9512818d7,.text,build/u/src/game/bgfog.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bgfog.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bgfog.o 3334c40f44aa232d8e19c8e008dea37a,.data,build/u/src/game/bgfog.o 63a41286331e03e597726bae6bd57d73,.rodata,build/u/src/game/bgfog.o b8e29d8a733d631a70c9776164049ab8,.text,build/u/src/game/bgroomtrans.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bgroomtrans.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bgroomtrans.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/bgroomtrans.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/bgroomtrans.o fe503f7412d15ae04b09165052627104,.text,build/u/src/game/blood_animation.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/blood_animation.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/blood_animation.o 6c0079f4274dd0c1f76ec3f0f3167467,.data,build/u/src/game/blood_animation.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/blood_animation.o 08178bf41fa308c2e673b358890c6b2d,.text,build/u/src/game/blood_decrypt.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/blood_decrypt.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/blood_decrypt.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/blood_decrypt.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/blood_decrypt.o e3573c7b32f39670f3b097946aca7daf,.text,build/u/src/game/bondhead.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bondhead.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bondhead.o 1f41ef4e892dded7bd385975a10cc847,.data,build/u/src/game/bondhead.o eb5394271972e0dc98385a7f324e03b8,.rodata,build/u/src/game/bondhead.o b80f4ac38334b9b697c3f04b128b672d,.text,build/u/src/game/bondinv.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bondinv.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bondinv.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/bondinv.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/bondinv.o -45d80b642fe6c1b693c576fea58891fc,.text,build/u/src/game/bondview.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bondview.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bondview.o +ea82a4d702e250b38aaa31c42e4b57f0,.text,build/u/src/game/bondview.o 9a2ea906234912531f10259886af5a71,.data,build/u/src/game/bondview.o d4df812547f220942fc71306e1314ad5,.rodata,build/u/src/game/bondview.o 4c5d3a0f0c118d20e4b4209ac79ca075,.text,build/u/src/game/bondview_r.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bondview_r.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bondview_r.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/bondview_r.o 47630b5c91c2e70fe3449a8847a4ea22,.rodata,build/u/src/game/bondview_r.o 8062ef389340fa7f6f331ada94862ae8,.text,build/u/src/game/bondwalk2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bondwalk2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bondwalk2.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/bondwalk2.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/bondwalk2.o 071eefa7f0a5f685ebad34c2340204ad,.text,build/u/src/game/cheat.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cheat.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cheat.o a5d9f8135b3ee2e5c0e1594a670b2d91,.data,build/u/src/game/cheat.o 3bb27c0cde12447e0dedd3ddd829314b,.rodata,build/u/src/game/cheat.o 071eefa7f0a5f685ebad34c2340204ad,.text,build/u/src/game/cheat_buttons.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cheat_buttons.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cheat_buttons.o a5d9f8135b3ee2e5c0e1594a670b2d91,.data,build/u/src/game/cheat_buttons.o 3bb27c0cde12447e0dedd3ddd829314b,.rodata,build/u/src/game/cheat_buttons.o -ab69f37ac9853c7b285e6fdbcc3c8db1,.text,build/u/src/game/chr.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chr.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chr.o -3d3dd3bc067d8f01ebfb0ee1d6c26367,.data,build/u/src/game/chr.o +3eddaa865156cfb1940d2ed312902ab2,.text,build/u/src/game/chr.o +dd8b193df2c9fedb4acbf5723ebf7bb4,.data,build/u/src/game/chr.o 85fabff9d72f8d2d78f7ab3b09d25418,.rodata,build/u/src/game/chr.o -e51cbd1536b829abf8760560fe767afb,.text,build/u/src/game/chrObjRandom.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrObjRandom.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrObjRandom.o -dca45fee049430e0eb82fbab95852594,.data,build/u/src/game/chrObjRandom.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/chrObjRandom.o -b7cc4eb31582c3b06090d75aa740fa60,.text,build/u/src/game/chr_b.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chr_b.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chr_b.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/chr_b.o -54c85123dad8457678af007c7c7d4026,.rodata,build/u/src/game/chr_b.o -89198a9e01688e7a382abfd44782e2c7,.text,build/u/src/game/chraction.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chraction.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chraction.o -873553fec38e500fd0459ed32ba07065,.data,build/u/src/game/chraction.o +f1c30542293f1b731c06b6ddc2c9d86a,.text,build/u/src/game/chraction.o +e21b0212e5a5d644a01048ce5a189c7c,.data,build/u/src/game/chraction.o 365e4726f2a4e1b80043f9fbedc3657b,.rodata,build/u/src/game/chraction.o b39b9ec278ea21267f13af8d74631e37,.text,build/u/src/game/chrai.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrai.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrai.o b203621a65475445e6fcdca717c667b5,.data,build/u/src/game/chrai.o ea37c1d473ff45caadf97ad82a428d01,.rodata,build/u/src/game/chrai.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/chraidata.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chraidata.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chraidata.o 6c8450891609d05baa1ba76d025b3845,.data,build/u/src/game/chraidata.o 90e9dc5eef55aaad94ae4590c98f8f7a,.rodata,build/u/src/game/chraidata.o 89198a9e01688e7a382abfd44782e2c7,.text,build/u/src/game/chrlv.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrlv.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrlv.o 873553fec38e500fd0459ed32ba07065,.data,build/u/src/game/chrlv.o 365e4726f2a4e1b80043f9fbedc3657b,.rodata,build/u/src/game/chrlv.o 3fd3ec69631dd5b0eb5cf8e28500abdd,.text,build/u/src/game/chrobjhandler.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrobjhandler.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrobjhandler.o d6999d725ff5515f392fcd371be980b7,.data,build/u/src/game/chrobjhandler.o 1520b85ea7306a448406364f3c51fe95,.rodata,build/u/src/game/chrobjhandler.o +e51cbd1536b829abf8760560fe767afb,.text,build/u/src/game/chrObjRandom.o +dca45fee049430e0eb82fbab95852594,.data,build/u/src/game/chrObjRandom.o 55f5291095565c6d972749c9ef45ff13,.text,build/u/src/game/chrprop.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrprop.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrprop.o 085fe3d18808921cfb8737e0c19f6bfb,.data,build/u/src/game/chrprop.o 5bc2a5b36071a2cfefb643368ce01f8a,.rodata,build/u/src/game/chrprop.o +b7cc4eb31582c3b06090d75aa740fa60,.text,build/u/src/game/chr_b.o +54c85123dad8457678af007c7c7d4026,.rodata,build/u/src/game/chr_b.o 65eba106b7145c8d18e62e41b0fca5cb,.text,build/u/src/game/cleanexplosions.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanexplosions.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanexplosions.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanexplosions.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanexplosions.o 581ec48b1cabdc45315a9a7ef4dde5ec,.text,build/u/src/game/cleanplayersound.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanplayersound.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanplayersound.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanplayersound.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanplayersound.o d61324cc5e9a0d979fe6e7f35395fa1c,.text,build/u/src/game/cleanupSFXRelated.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanupSFXRelated.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanupSFXRelated.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanupSFXRelated.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanupSFXRelated.o e8111e7712186220218476fa1e164f60,.text,build/u/src/game/cleanup_alarms.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_alarms.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_alarms.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_alarms.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanup_alarms.o 8e400a3267ff4e97615eea6a8aac3637,.text,build/u/src/game/cleanup_guard_data.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_guard_data.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_guard_data.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_guard_data.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanup_guard_data.o -5d250b152f2a3e502f4b4da990f03366,.text,build/u/src/game/cleanup_object_sounds.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_object_sounds.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_object_sounds.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_object_sounds.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanup_object_sounds.o baa128fff074de6122fb0029a59dc5e6,.text,build/u/src/game/cleanup_objectives.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_objectives.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_objectives.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_objectives.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanup_objectives.o dada45d71bb4725409c990afbf2f8830,.text,build/u/src/game/cleanup_objects.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_objects.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_objects.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_objects.o f8cc02e3fca557906560baee10d58b8e,.rodata,build/u/src/game/cleanup_objects.o +5d250b152f2a3e502f4b4da990f03366,.text,build/u/src/game/cleanup_object_sounds.o e27c6eaae21319ffd65df3ec73cae9ba,.text,build/u/src/game/cleanwindowpieces.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanwindowpieces.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanwindowpieces.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanwindowpieces.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanwindowpieces.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/cobjdata.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cobjdata.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cobjdata.o 0f2dc9417cad9b3c62faa812d496e55f,.data,build/u/src/game/cobjdata.o a01e13041a85a76104e2b445001c19f6,.rodata,build/u/src/game/cobjdata.o c0aa075c5bfe7e4be111cdceb3620295,.text,build/u/src/game/compiletime.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/compiletime.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/compiletime.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/compiletime.o 3ede035e3eeefbd09d7590d648da3e50,.rodata,build/u/src/game/compiletime.o 82e4e3ac8284fbde690ca9c36688e175,.text,build/u/src/game/crc.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/crc.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/crc.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/crc.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/crc.o -e182bb84db1d3539e0d669f60e9320b2,.text,build/u/src/game/deb_loadallmodels.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/deb_loadallmodels.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/deb_loadallmodels.o -01cd947cf3226f6d98ed4471ef102c8e,.data,build/u/src/game/deb_loadallmodels.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/deb_loadallmodels.o -dd242b32c8416fd08783a347d95b57b5,.text,build/u/src/game/debug_camera.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/debug_camera.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/debug_camera.o -8b28117b30ba1eb01aece3db381370ae,.data,build/u/src/game/debug_camera.o -79936c25e933da15f6d69407363f5b1b,.rodata,build/u/src/game/debug_camera.o 2d5153c05c3882aee1d16ece9db88570,.text,build/u/src/game/debugmenu_08FE00.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/debugmenu_08FE00.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/debugmenu_08FE00.o 2c7bd276745dcdc96ad8f5208821d33f,.data,build/u/src/game/debugmenu_08FE00.o 2c8135c82c264dbddcd191237d4cdb7e,.rodata,build/u/src/game/debugmenu_08FE00.o 745a9be0507a0263a931dc71eb93d9b6,.text,build/u/src/game/debugmenu_handler.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/debugmenu_handler.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/debugmenu_handler.o 5b4e4215afc95ebc9e9f8ad22a188723,.data,build/u/src/game/debugmenu_handler.o 6fabacc939a6bd1bf3d1abf33015e6ae,.rodata,build/u/src/game/debugmenu_handler.o +dd242b32c8416fd08783a347d95b57b5,.text,build/u/src/game/debug_camera.o +8b28117b30ba1eb01aece3db381370ae,.data,build/u/src/game/debug_camera.o +79936c25e933da15f6d69407363f5b1b,.rodata,build/u/src/game/debug_camera.o +e182bb84db1d3539e0d669f60e9320b2,.text,build/u/src/game/deb_loadallmodels.o +01cd947cf3226f6d98ed4471ef102c8e,.data,build/u/src/game/deb_loadallmodels.o c6424e5984b8bb8d8de8fc3ce41ba995,.text,build/u/src/game/decompress.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/decompress.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/decompress.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/decompress.o f252a9401cd76f46600f0da563879166,.rodata,build/u/src/game/decompress.o 5771513e3dd38561fbc0580695632485,.text,build/u/src/game/dyn.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/dyn.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/dyn.o 062a8e296fe206f8023cad1c6124c17b,.data,build/u/src/game/dyn.o 98b2039f9b5a250a69026b80f92242b4,.rodata,build/u/src/game/dyn.o 4e58e5ab806e0283d16e7a6e1bd7850d,.text,build/u/src/game/ejectedcartridges.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/ejectedcartridges.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/ejectedcartridges.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/ejectedcartridges.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/ejectedcartridges.o 611b9b73637f8add35cf24f49abd88f7,.text,build/u/src/game/explosion.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/explosion.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/explosion.o fbda85eb8d9891c2efde432e0336946e,.data,build/u/src/game/explosion.o 9b1db0ae34ae1901b30b1cb9163c1f66,.rodata,build/u/src/game/explosion.o 611b9b73637f8add35cf24f49abd88f7,.text,build/u/src/game/explosions.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/explosions.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/explosions.o fbda85eb8d9891c2efde432e0336946e,.data,build/u/src/game/explosions.o 9b1db0ae34ae1901b30b1cb9163c1f66,.rodata,build/u/src/game/explosions.o 1600018b9afbe69881f274b0023644fb,.text,build/u/src/game/file.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/file.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/file.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/file.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/file.o dc557102f98af1012104e5468e2deed8,.text,build/u/src/game/file2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/file2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/file2.o eeec347630f5896aa34d74a8014be746,.data,build/u/src/game/file2.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/file2.o 6262372c48959b0d142d7bd9512818d7,.text,build/u/src/game/fog.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/fog.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/fog.o 3334c40f44aa232d8e19c8e008dea37a,.data,build/u/src/game/fog.o 63a41286331e03e597726bae6bd57d73,.rodata,build/u/src/game/fog.o 5f0314fc8dd209051e24975482e3b763,.text,build/u/src/game/frametiming.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/frametiming.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/frametiming.o 0245cdd8c5a57e8097d2a659cfe4e5a9,.data,build/u/src/game/frametiming.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/frametiming.o ffa8cb5c91f127dcc58c8ed8239b9bd9,.text,build/u/src/game/front.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/front.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/front.o 202cacaebbb7c0e6f88647e7b36e4c6f,.data,build/u/src/game/front.o 9b68f3408850d02a9c9c358ccb8cf15b,.rodata,build/u/src/game/front.o b08bde2e31044c0b408ede1cfdd06325,.text,build/u/src/game/game_debug.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/game_debug.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/game_debug.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/game_debug.o 9b7ce57fe7617597f32ff056b43202c4,.rodata,build/u/src/game/game_debug.o -b41030c1904e701bcdeab30ed5c5148d,.text,build/u/src/game/glass.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/glass.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/glass.o -7449248de18da3f5a96c70e5dd0570e9,.data,build/u/src/game/glass.o -91e9c74a6ac093c98ffc9e1515ea270d,.rodata,build/u/src/game/glass.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/gobjdata.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/gobjdata.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/gobjdata.o +9ee7b104a58bf24b3e0c94593fa66155,.text,build/u/src/game/glass.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/src/game/glass.o +2777eee61f3d2834ab4f9e75b1e6a3aa,.rodata,build/u/src/game/glass.o +eee76ecf1254152e56c799b08633c7e7,.text,build/u/src/game/glass2.o +78cdaf0a51b9fc310467772a89ece367,.data,build/u/src/game/glass2.o +50f68dfbb6232a95fc5c4e2067b206c7,.rodata,build/u/src/game/glass2.o 09534983a7284daabcc290c7a3b1b5c5,.data,build/u/src/game/gobjdata.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/gobjdata.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/gobjdata2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/gobjdata2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/gobjdata2.o 5b486cfa5049803b6e6480dc1db84c6c,.data,build/u/src/game/gobjdata2.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/gobjdata2.o -328b98f1fdabe1c489d36f7c34de979b,.text,build/u/src/game/gun.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/gun.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/gun.o +92f21351a534d7e501f792541e071ebb,.text,build/u/src/game/gun.o 0289c36e967840bba7f6fbd026dda001,.data,build/u/src/game/gun.o c22c38087e38ab54d904cdfe76f17b48,.rodata,build/u/src/game/gun.o 3506c50473e5f831f4b5b67d80cf2880,.text,build/u/src/game/image.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/image.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/image.o 5cc07645f31f767e06e7275daa6a48b9,.data,build/u/src/game/image.o 7bb5a82d66dcf043723196d3397ea8d5,.rodata,build/u/src/game/image.o 60381b4620ccbe55b06819b8d4f719b2,.text,build/u/src/game/image_bank.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/image_bank.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/image_bank.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/image_bank.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/image_bank.o 6ddd854f71ff162f3ba95dc9eeb3eb81,.text,build/u/src/game/indy_commands.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/indy_commands.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/indy_commands.o a2d9aa1a7c43a271d8c8574382d7f81b,.data,build/u/src/game/indy_commands.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/indy_commands.o 148c8e0f7777f97b679c1d5b9033ca46,.text,build/u/src/game/indy_comms.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/indy_comms.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/indy_comms.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/indy_comms.o 8b739a82297d5b19e4cf48c594c782f7,.rodata,build/u/src/game/indy_comms.o +95168eefd6ab31c2c07026b668af073e,.text,build/u/src/game/initactorpropstuff.o +d1c7d5ce895aab2c74f422e89ac7301f,.rodata,build/u/src/game/initactorpropstuff.o +eaf91a3b414baab952b0b11e09316245,.text,build/u/src/game/initanitable.o +5e19c149b3a17a65bef4f99dfe9fe15c,.data,build/u/src/game/initanitable.o 1d041d34492b00d9ffc6b8e575235636,.text,build/u/src/game/initBondDATA.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initBondDATA.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initBondDATA.o f1a3cd21448026b51237816257ec0cd5,.data,build/u/src/game/initBondDATA.o d7bf0e953e2938586e9839ac4e151ee0,.rodata,build/u/src/game/initBondDATA.o 381e243566b9012cb61d0ea4f304a3a6,.text,build/u/src/game/initBondDATAdefaults.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initBondDATAdefaults.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initBondDATAdefaults.o 31507984a7ba9b284e07be5ec9215734,.data,build/u/src/game/initBondDATAdefaults.o bb937d22d13b6582963664b638217077,.rodata,build/u/src/game/initBondDATAdefaults.o -aa2690d8ca90d088dd990f1d1717cc70,.text,build/u/src/game/initactorpropstuff.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initactorpropstuff.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initactorpropstuff.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initactorpropstuff.o -d1c7d5ce895aab2c74f422e89ac7301f,.rodata,build/u/src/game/initactorpropstuff.o -eaf91a3b414baab952b0b11e09316245,.text,build/u/src/game/initanitable.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initanitable.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initanitable.o -5e19c149b3a17a65bef4f99dfe9fe15c,.data,build/u/src/game/initanitable.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initanitable.o b2f21d41a0d43d7510c362992f97aaf4,.text,build/u/src/game/initcheattext.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initcheattext.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initcheattext.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initcheattext.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initcheattext.o 7bd576aee1e6380edb6cfdc47475f6f0,.text,build/u/src/game/initexplosioncasing.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initexplosioncasing.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initexplosioncasing.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initexplosioncasing.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initexplosioncasing.o 99f6cc60bcd17a50e41035b7ecf5cf91,.text,build/u/src/game/initgamedata.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initgamedata.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initgamedata.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initgamedata.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initgamedata.o 04e6cf71b39c743c5890573cd9a01508,.text,build/u/src/game/initguards.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initguards.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initguards.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initguards.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initguards.o df6262b2d91ab887aa39afafa0258888,.text,build/u/src/game/initimages.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initimages.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initimages.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initimages.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initimages.o c49a0e3357ec04175b0e640da21050c9,.text,build/u/src/game/initintromatrices.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initintromatrices.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initintromatrices.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initintromatrices.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initintromatrices.o 4dae56c2e99c8a9a6fb08023460323c7,.text,build/u/src/game/inititemslots.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/inititemslots.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/inititemslots.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/inititemslots.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/inititemslots.o 1be876526904eebd36e0364e83cc07bf,.text,build/u/src/game/initmenus.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initmenus.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initmenus.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initmenus.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initmenus.o 48c14d478bc31f2aa77b1f7f1396082d,.text,build/u/src/game/initmttex.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initmttex.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initmttex.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initmttex.o 519c61364853b2c886b3dc8b94107dc1,.rodata,build/u/src/game/initmttex.o e18f29cde359687b16c95810d9961d6e,.text,build/u/src/game/initnull_0009D0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initnull_0009D0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initnull_0009D0.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initnull_0009D0.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initnull_0009D0.o e18f29cde359687b16c95810d9961d6e,.text,build/u/src/game/initnull_000BC0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initnull_000BC0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initnull_000BC0.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initnull_000BC0.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initnull_000BC0.o 2255e1e585f9addc9fc5999826ca57dc,.text,build/u/src/game/initobjects.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initobjects.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initobjects.o e316194eedd5006d7682d37ed0179a36,.data,build/u/src/game/initobjects.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initobjects.o cd47b37e68a4be3e8eb976503a05c100,.text,build/u/src/game/initpathtablelinks.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initpathtablelinks.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initpathtablelinks.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initpathtablelinks.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initpathtablelinks.o 0f4d0e9e68fa6330e361a61d4009f100,.text,build/u/src/game/initpathtablesomething.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initpathtablesomething.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initpathtablesomething.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initpathtablesomething.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initpathtablesomething.o 239042f1335aa427f57421ca758d9bb0,.text,build/u/src/game/initplayergaitobject.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initplayergaitobject.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initplayergaitobject.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initplayergaitobject.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initplayergaitobject.o 548fdcc0dc9fd285a616c4dc344e261a,.text,build/u/src/game/initunk_0009E0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initunk_0009E0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initunk_0009E0.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initunk_0009E0.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initunk_0009E0.o 9c888747ded6cac3d42903bfcdede568,.text,build/u/src/game/initunk_005450.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initunk_005450.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initunk_005450.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initunk_005450.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initunk_005450.o 69b65fb47f0adc0f7ce7e7b71525ecc3,.text,build/u/src/game/initunk_005520.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initunk_005520.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initunk_005520.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initunk_005520.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initunk_005520.o 80c4741ea8d335e1cd55bc6f8855b8fe,.text,build/u/src/game/initunk_007290.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initunk_007290.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initunk_007290.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initunk_007290.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initunk_007290.o 4fc91dfaef607af506049f33839c6a99,.text,build/u/src/game/initweaponanigroups.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initweaponanigroups.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initweaponanigroups.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initweaponanigroups.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initweaponanigroups.o 08a5bb8287043d4e671605f88cc077c1,.text,build/u/src/game/language.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/language.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/language.o b608913d417cf5898f46d451d2ee7e36,.data,build/u/src/game/language.o 02a3f90183d88a10b9038d5ebc53aa14,.rodata,build/u/src/game/language.o 82621e294a3ff34195d75bbcbb2a746f,.text,build/u/src/game/lightfixture.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/lightfixture.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/lightfixture.o 70bc8f4b72a86921468bf8e8441dce51,.data,build/u/src/game/lightfixture.o 5feb1f52242be6ca00278aea97630cc2,.rodata,build/u/src/game/lightfixture.o 9edfef9597ffff8486766db887b8a448,.text,build/u/src/game/line_tri_intersect.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/line_tri_intersect.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/line_tri_intersect.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/line_tri_intersect.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/line_tri_intersect.o f93afdcea6b3baecd3e8bd0c79b93e12,.text,build/u/src/game/loadobjectmodel.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/loadobjectmodel.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/loadobjectmodel.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/loadobjectmodel.o 758dd27724bf2441991958a52d84b620,.rodata,build/u/src/game/loadobjectmodel.o -43fa0dd4d48b7f01f50dd922d167d229,.text,build/u/src/game/lv.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/lv.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/lv.o +deefcadf0d5545abc1320d92926f107a,.text,build/u/src/game/lv.o 778b187770df6551fc254a75c066d47a,.data,build/u/src/game/lv.o 43ee36987e8d9804ad1f15d27b6e0171,.rodata,build/u/src/game/lv.o 43fa0dd4d48b7f01f50dd922d167d229,.text,build/u/src/game/lvl.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/lvl.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/lvl.o 778b187770df6551fc254a75c066d47a,.data,build/u/src/game/lvl.o 43ee36987e8d9804ad1f15d27b6e0171,.rodata,build/u/src/game/lvl.o 08a5bb8287043d4e671605f88cc077c1,.text,build/u/src/game/lvl_text.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/lvl_text.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/lvl_text.o b608913d417cf5898f46d451d2ee7e36,.data,build/u/src/game/lvl_text.o 02a3f90183d88a10b9038d5ebc53aa14,.rodata,build/u/src/game/lvl_text.o 623da8353735cbacda28be429ee6d8f5,.text,build/u/src/game/math_asinacos.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/math_asinacos.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/math_asinacos.o b3024a8481396e6d476526eb0b79ba26,.data,build/u/src/game/math_asinacos.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/math_asinacos.o a650dd899154d9ca0f97b3c111d68afd,.text,build/u/src/game/math_asinfacosf.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/math_asinfacosf.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/math_asinfacosf.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/math_asinfacosf.o 14ebb8b0d158b1c94ccf7a18e89a9de2,.rodata,build/u/src/game/math_asinfacosf.o 7c59de2dabf61f339905e659a288928f,.text,build/u/src/game/math_atan2f.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/math_atan2f.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/math_atan2f.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/math_atan2f.o 546c324b783f89764425250e5177d2cc,.rodata,build/u/src/game/math_atan2f.o 4d2b4f6f4727449ebf9f00c3c00189e9,.text,build/u/src/game/math_ceil.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/math_ceil.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/math_ceil.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/math_ceil.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/math_ceil.o 0e5d17b9bb61cedf04777bb22e82af5a,.text,build/u/src/game/math_floor.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/math_floor.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/math_floor.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/math_floor.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/math_floor.o 48e65305ec9a1f986e4f98d30a4702d7,.text,build/u/src/game/math_sincos.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/math_sincos.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/math_sincos.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/math_sincos.o 62fee117785188396ed7a81341402e43,.rodata,build/u/src/game/math_sincos.o 3be797f6c4f732f6c95ec073653e0683,.text,build/u/src/game/math_unk_05A9E0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/math_unk_05A9E0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/math_unk_05A9E0.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/math_unk_05A9E0.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/math_unk_05A9E0.o a3f297256593b1b9e3e63d7c5027ee9a,.text,build/u/src/game/matrixmath.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/matrixmath.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/matrixmath.o 443b5cb29b8db751795a83e372d93c13,.data,build/u/src/game/matrixmath.o 0a35159196687bb0c05210537b0b72dd,.rodata,build/u/src/game/matrixmath.o 36ad186936847099dfd0ff45b6da2bfe,.text,build/u/src/game/matrixmath_misc.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/matrixmath_misc.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/matrixmath_misc.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/matrixmath_misc.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/matrixmath_misc.o -a252a9d335a8471918264868c8ff61b0,.text,build/u/src/game/model.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/model.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/model.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/model.o +34038805cea4c0ecbeaaecb6bd606204,.text,build/u/src/game/model.o 63392afd7ef8420cf22b9e1f4b947ac7,.rodata,build/u/src/game/model.o +1ef1d44912f118a4415d32c0b6817f69,.text,build/u/src/game/mpmenu.o +73fd6c08f30314bfa70d1800c88309b3,.data,build/u/src/game/mpmenu.o +0175f5015d4bbd3659819bea4577395c,.rodata,build/u/src/game/mpmenu.o cb8e6a63ac2bb5a94211a678cb31643f,.text,build/u/src/game/mp_music.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/mp_music.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/mp_music.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/mp_music.o 4f29b2b0a354eef2f858c1912ef6b3f4,.rodata,build/u/src/game/mp_music.o 99b616ded0340b1539d2f41654a92d1f,.text,build/u/src/game/mp_watch.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/mp_watch.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/mp_watch.o 73fd6c08f30314bfa70d1800c88309b3,.data,build/u/src/game/mp_watch.o 0175f5015d4bbd3659819bea4577395c,.rodata,build/u/src/game/mp_watch.o 30f3bfd31d453c60e9ff7fff181ae693,.text,build/u/src/game/mp_weapon.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/mp_weapon.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/mp_weapon.o 04cfbf991d3d23ca47eaaca1adc4f01f,.data,build/u/src/game/mp_weapon.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/mp_weapon.o -99b616ded0340b1539d2f41654a92d1f,.text,build/u/src/game/mpmenu.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/mpmenu.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/mpmenu.o -73fd6c08f30314bfa70d1800c88309b3,.data,build/u/src/game/mpmenu.o -0175f5015d4bbd3659819bea4577395c,.rodata,build/u/src/game/mpmenu.o ef12b800e133e094a649de9ca4466108,.text,build/u/src/game/music_0D2720.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/music_0D2720.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/music_0D2720.o 1dd7048c0817cc4b72e9e60d77a44710,.data,build/u/src/game/music_0D2720.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/music_0D2720.o e18f29cde359687b16c95810d9961d6e,.text,build/u/src/game/null_007970.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/null_007970.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/null_007970.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/null_007970.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/null_007970.o 81b0883c0454e8dd88e9b265bda740c1,.text,build/u/src/game/ob.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/ob.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/ob.o c2028385babc92baad8fcbe57e4a7882,.data,build/u/src/game/ob.o f04d26298c53b9ed2b1846e108c4f0f5,.rodata,build/u/src/game/ob.o -3cfcae2ddcf69c0d104d787245961440,.text,build/u/src/game/objecthandler.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objecthandler.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objecthandler.o +88b59629302ca7571727462b2c581b4f,.text,build/u/src/game/objecthandler.o 766d7aee05f96dff2a5649eb36ac32c1,.data,build/u/src/game/objecthandler.o 0412997c691931680d7ec0b02d2dcaa4,.rodata,build/u/src/game/objecthandler.o b9ecfe8ecc3ef965e425146c53659a76,.text,build/u/src/game/objecthandler_2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objecthandler_2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objecthandler_2.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/objecthandler_2.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/objecthandler_2.o c5316b432784e09aaa71a939117d1732,.text,build/u/src/game/objective.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objective.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objective.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/objective.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/objective.o f696b8003446a0b74e7a0d78fcfb1f01,.text,build/u/src/game/objective_status.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objective_status.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objective_status.o 696656bad06fe3f908e2d43ca762cc24,.data,build/u/src/game/objective_status.o 8f76ee8ed548ce1d035595be064438a0,.rodata,build/u/src/game/objective_status.o 1b2cb18a0aa475a34a0df250a9d325a8,.text,build/u/src/game/objective_status2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objective_status2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objective_status2.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/objective_status2.o 66c72a9f52883a35821c069094d98950,.rodata,build/u/src/game/objective_status2.o -e5efaca4f99364758f1e20aebf293455,.text,build/u/src/game/options.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/options.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/options.o +e0fb74a9ff5e739d57826e9e66e7ed9e,.text,build/u/src/game/options.o 5761f5a56e201189104122ad0642a536,.data,build/u/src/game/options.o d775c8a4c52b2462c520e410957f1280,.rodata,build/u/src/game/options.o 4383ca9144751d6b8bed63a299117578,.text,build/u/src/game/othermodemicrocode.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/othermodemicrocode.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/othermodemicrocode.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/othermodemicrocode.o 68d0cd46011653e6d810f11c93f2c981,.rodata,build/u/src/game/othermodemicrocode.o 9a3a5f96a32de7e7d9acf59aaeda0bf8,.text,build/u/src/game/padhalllv.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/padhalllv.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/padhalllv.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/padhalllv.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/padhalllv.o c27212f178434893a386379a5d0d951e,.text,build/u/src/game/player.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/player.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/player.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/player.o f874444d8bfd10718f57b02b19629fea,.rodata,build/u/src/game/player.o -c27212f178434893a386379a5d0d951e,.text,build/u/src/game/player_2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/player_2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/player_2.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/player_2.o -f874444d8bfd10718f57b02b19629fea,.rodata,build/u/src/game/player_2.o e6962f02e5f239114544446d7948c05c,.text,build/u/src/game/playerstats_007770.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/playerstats_007770.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/playerstats_007770.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/playerstats_007770.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/playerstats_007770.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/pobjdata.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/pobjdata.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/pobjdata.o +c27212f178434893a386379a5d0d951e,.text,build/u/src/game/player_2.o +f874444d8bfd10718f57b02b19629fea,.rodata,build/u/src/game/player_2.o a6765d6de23292908d03ba983ed2f8b2,.data,build/u/src/game/pobjdata.o a02237588cbbf3cbb6f84791e1edc256,.rodata,build/u/src/game/pobjdata.o 71574a112bea3350da72bc31cf29c739,.text,build/u/src/game/prop.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/prop.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/prop.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/prop.o 4e1b4af471bd96e1e321f0e73fea029a,.rodata,build/u/src/game/prop.o -c4dc3f426c18a44d32504f15465a2a8d,.text,build/u/src/game/propobj.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/propobj.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/propobj.o +a1b95e75007bfe831d60437a71aef92b,.text,build/u/src/game/propobj.o d6999d725ff5515f392fcd371be980b7,.data,build/u/src/game/propobj.o 1520b85ea7306a448406364f3c51fe95,.rodata,build/u/src/game/propobj.o bd0039e95325cb3f211f8b04cdfaa9fa,.text,build/u/src/game/quaternion.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/quaternion.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/quaternion.o dd8a23d5bf38aa81e9e52eb43d310cea,.data,build/u/src/game/quaternion.o dcf28c5b87d1bafd8f6cb584ea25112a,.rodata,build/u/src/game/quaternion.o 750fbea75750acbcfb5c3feb1cbff4f2,.text,build/u/src/game/radar.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/radar.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/radar.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/radar.o 03c3fbafd5dd335bac35e7b54da4709c,.rodata,build/u/src/game/radar.o 938d1d7605ff49f1f0418dbec37c8e7a,.text,build/u/src/game/ramromreplay.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/ramromreplay.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/ramromreplay.o cb415e05b85be31494ae1bc233beb58b,.data,build/u/src/game/ramromreplay.o c90adc466041f6e464269a31165d0499,.rodata,build/u/src/game/ramromreplay.o 7e46aa3c9b889a57f29a750575d15d57,.text,build/u/src/game/rle.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/rle.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/rle.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/rle.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/rle.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/room_model_buffer.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/room_model_buffer.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/room_model_buffer.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/room_model_buffer.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/room_model_buffer.o c04809de48f600cf8896f2727f3cb06b,.text,build/u/src/game/rsp.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/rsp.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/rsp.o caacffbfa882584920cc8398c864dcc2,.data,build/u/src/game/rsp.o e1ed1c19804abe45b9a45b4283574bd6,.rodata,build/u/src/game/rsp.o b88e3ccd7b30cf28cdf47e15f9defc93,.text,build/u/src/game/setguscale.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/setguscale.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/setguscale.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/setguscale.o d509d7dba6c1a819411b224d38e40828,.rodata,build/u/src/game/setguscale.o 8a06ff554d3f774a1d5c3efec9c18d15,.text,build/u/src/game/sky.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/sky.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/sky.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/sky.o 02bdd476e84dbefa5ab23eab7cc4c7d5,.rodata,build/u/src/game/sky.o e7c619938dcc1b4d6d953528540da8a7,.text,build/u/src/game/spectrum.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/spectrum.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/spectrum.o 2ce81ebe3ddf133df9e5efc28f0e99ad,.data,build/u/src/game/spectrum.o 3035d02bd694ebdead84c918a03129d6,.rodata,build/u/src/game/spectrum.o 16b4e13d4b5d2c2924a59aff80c5f24a,.text,build/u/src/game/speedgraphrenderer.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/speedgraphrenderer.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/speedgraphrenderer.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/speedgraphrenderer.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/speedgraphrenderer.o -a43eb71310cabab33807e1e48a9e426a,.text,build/u/src/game/stan.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/stan.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/stan.o +1c5813ea0c011e7d5291f0ec44b93a89,.text,build/u/src/game/stan.o 3b98c643ab1cb4391d44340cbc01d0e6,.data,build/u/src/game/stan.o 11748dd8e62697e481a5479b151d491e,.rodata,build/u/src/game/stan.o d5263986657df7aac13742312709305d,.text,build/u/src/game/stanintersection.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/stanintersection.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/stanintersection.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/stanintersection.o 58beed8ba05634d9511690c0a476f146,.rodata,build/u/src/game/stanintersection.o 67dbacb3028281856d2e39a06130c582,.text,build/u/src/game/tex.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/tex.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/tex.o 3276b0ae12d43e34773e3e7340fd7eb7,.data,build/u/src/game/tex.o 649f505c857e9b5f6bc4b652ea1d387e,.rodata,build/u/src/game/tex.o 72e03b6f6d784f9cbafa221c2bc74eb3,.text,build/u/src/game/textrelated.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/textrelated.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/textrelated.o 5b2be5a4a56e5d047ddd92f749836d87,.data,build/u/src/game/textrelated.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/textrelated.o 5152db464b3f52019f62367b97c1a055,.text,build/u/src/game/title.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/title.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/title.o e09fcfa9f21f3499758e33b62d2d3668,.data,build/u/src/game/title.o 071a279563d8add07811107f2c2ec0f1,.rodata,build/u/src/game/title.o +e8b537a19dbef522cab0d218d9e0cd28,.text,build/u/src/game/title2.o +2e036a1e94af4dca08dbda3ca29bb9f1,.data,build/u/src/game/title2.o +c1c2bef3d9452a0f148d8613ed14b3f1,.rodata,build/u/src/game/title2.o +9dd182e36f7cdfc30e37c9479de46c22,.text,build/u/src/game/title3.o +334b90953c5606d68014564e5eda0c1b,.rodata,build/u/src/game/title3.o 7e46aa3c9b889a57f29a750575d15d57,.text,build/u/src/game/unk_01B0E0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_01B0E0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_01B0E0.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/unk_01B0E0.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/unk_01B0E0.o e8b537a19dbef522cab0d218d9e0cd28,.text,build/u/src/game/unk_01B240.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_01B240.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_01B240.o 2e036a1e94af4dca08dbda3ca29bb9f1,.data,build/u/src/game/unk_01B240.o c1c2bef3d9452a0f148d8613ed14b3f1,.rodata,build/u/src/game/unk_01B240.o 9dd182e36f7cdfc30e37c9479de46c22,.text,build/u/src/game/unk_01BAE0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_01BAE0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_01BAE0.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/unk_01BAE0.o 334b90953c5606d68014564e5eda0c1b,.rodata,build/u/src/game/unk_01BAE0.o dd242b32c8416fd08783a347d95b57b5,.text,build/u/src/game/unk_091080.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_091080.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_091080.o 8b28117b30ba1eb01aece3db381370ae,.data,build/u/src/game/unk_091080.o 79936c25e933da15f6d69407363f5b1b,.rodata,build/u/src/game/unk_091080.o 9edfef9597ffff8486766db887b8a448,.text,build/u/src/game/unk_092890.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_092890.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_092890.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/unk_092890.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/unk_092890.o 8240067a2619e260e6153d7b9de421f7,.text,build/u/src/game/unk_092E50.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_092E50.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_092E50.o a64d97ec0061b70dcbcebed4ae05d125,.data,build/u/src/game/unk_092E50.o f1dbcb1438dbbb5e8506a728d9c4d142,.rodata,build/u/src/game/unk_092E50.o 3288d6c4e46d199aa581307312d196d9,.text,build/u/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/unk_09B7A0.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/unk_09B7A0.o b41030c1904e701bcdeab30ed5c5148d,.text,build/u/src/game/unk_0A1DA0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_0A1DA0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_0A1DA0.o 7449248de18da3f5a96c70e5dd0570e9,.data,build/u/src/game/unk_0A1DA0.o 91e9c74a6ac093c98ffc9e1515ea270d,.rodata,build/u/src/game/unk_0A1DA0.o d5263986657df7aac13742312709305d,.text,build/u/src/game/unk_0B3200.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_0B3200.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_0B3200.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/unk_0B3200.o 58beed8ba05634d9511690c0a476f146,.rodata,build/u/src/game/unk_0B3200.o b8e29d8a733d631a70c9776164049ab8,.text,build/u/src/game/unk_0BC530.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_0BC530.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_0BC530.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/unk_0BC530.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/unk_0BC530.o 5f0314fc8dd209051e24975482e3b763,.text,build/u/src/game/unk_0C0A70.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_0C0A70.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_0C0A70.o 0245cdd8c5a57e8097d2a659cfe4e5a9,.data,build/u/src/game/unk_0C0A70.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/unk_0C0A70.o 67dbacb3028281856d2e39a06130c582,.text,build/u/src/game/unk_0CC4C0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_0CC4C0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_0CC4C0.o 3276b0ae12d43e34773e3e7340fd7eb7,.data,build/u/src/game/unk_0CC4C0.o 649f505c857e9b5f6bc4b652ea1d387e,.rodata,build/u/src/game/unk_0CC4C0.o 7e01bd828f54335aefbf28fc14d26b02,.text,build/u/src/game/viewport.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/viewport.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/viewport.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/viewport.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/viewport.o +3288d6c4e46d199aa581307312d196d9,.text,build/u/src/game/vtxstore.o e5efaca4f99364758f1e20aebf293455,.text,build/u/src/game/watch.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/watch.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/watch.o 5761f5a56e201189104122ad0642a536,.data,build/u/src/game/watch.o d775c8a4c52b2462c520e410957f1280,.rodata,build/u/src/game/watch.o 5508daba9a3b7bb3e82a637ae59a43bb,.text,build/u/src/game/zlib.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/zlib.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/zlib.o 199c3b1b31bf1142efdd9e00d27d4765,.data,build/u/src/game/zlib.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/zlib.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_ame_all_p.o -3239a921c076ddd6d68188b937597905,.data,build/u/assets/obseg/bg/bg_ame_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_ame_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_arch_all_p.o -04b985028d4b5c4cf5ce7e08c25d33bf,.data,build/u/assets/obseg/bg/bg_arch_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_arch_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_arec_all_p.o -e8e22dea25b3ac3f1a4de020c946f7dd,.data,build/u/assets/obseg/bg/bg_arec_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_arec_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_azt_all_p.o -9cc41d4626731edc6a49b890499e2d33,.data,build/u/assets/obseg/bg/bg_azt_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_azt_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_cat_all_p.o -ad5f24079eabba3ae1418aa85706cc67,.data,build/u/assets/obseg/bg/bg_cat_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_cat_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_crad_all_p.o -461aca5d52c9a3a3bf2afee37d453f67,.data,build/u/assets/obseg/bg/bg_crad_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_crad_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_cryp_all_p.o -c22c7e1ae9576209d311a94cc579da59,.data,build/u/assets/obseg/bg/bg_cryp_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_cryp_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_dish_all_p.o -b3af6a77beb24fa4c3d5acf2bcdeeb88,.data,build/u/assets/obseg/bg/bg_dish_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_dish_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_len_all_p.o -357d4c781f68a77f77777f22312ca8be,.data,build/u/assets/obseg/bg/bg_len_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_len_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_oat_all_p.o -96ecc30d5e54a3bc35158283ff3a6179,.data,build/u/assets/obseg/bg/bg_oat_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_oat_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_ref_all_p.o -728f045cd2dcfcab7e956001c8210ee7,.data,build/u/assets/obseg/bg/bg_ref_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_ref_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_run_all_p.o -f9bfa0db72247cc624983241a80cc2da,.data,build/u/assets/obseg/bg/bg_run_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_run_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_sev_all_p.o -f6f5db8f3e72452f8610625d1d8e45af,.data,build/u/assets/obseg/bg/bg_sev_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_sev_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_sevb_all_p.o -5211ec305c79ea15ed47aed9f5dda406,.data,build/u/assets/obseg/bg/bg_sevb_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_sevb_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_sevx_all_p.o -b4d1351d8b0c55dd49d04255057c8050,.data,build/u/assets/obseg/bg/bg_sevx_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_sevx_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_silo_all_p.o -0350e5c2f3ed8a04455e14fdcd6ea59b,.data,build/u/assets/obseg/bg/bg_silo_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_silo_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefarchZ.o -77c226b389bef0ef4b3f80d21b79aa6a,.data,build/u/assets/obseg/brief/UbriefarchZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefarchZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefarkZ.o -76e2c28739b6df8b6c89932b2fc0c39b,.data,build/u/assets/obseg/brief/UbriefarkZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefarkZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefaztZ.o -2e557d3d54ebc9a0d294a6eba027d03c,.data,build/u/assets/obseg/brief/UbriefaztZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefaztZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefcaveZ.o -7390bdb6dd0acb0e524a6a43741d1b89,.data,build/u/assets/obseg/brief/UbriefcaveZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefcaveZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefcontrolZ.o -b8514744d08309042f601fda8b644664,.data,build/u/assets/obseg/brief/UbriefcontrolZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefcontrolZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefcradZ.o -dceac86d93054c478611067a82a03ffe,.data,build/u/assets/obseg/brief/UbriefcradZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefcradZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefcrypZ.o -7fa9a86594803746ba4dee34e177a124,.data,build/u/assets/obseg/brief/UbriefcrypZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefcrypZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefdamZ.o -b5675a0fd69baf15b8eb5f004feb2d99,.data,build/u/assets/obseg/brief/UbriefdamZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefdamZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefdepoZ.o -d935f64befdbd153f0ec51de4805bf37,.data,build/u/assets/obseg/brief/UbriefdepoZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefdepoZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefdestZ.o -f5876420ea174366dc93849887704f6d,.data,build/u/assets/obseg/brief/UbriefdestZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefdestZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefjunZ.o -07ab7cdb9ad6c988b342705a63d57fca,.data,build/u/assets/obseg/brief/UbriefjunZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefjunZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefpeteZ.o -6c62e402a083a9f9081729db2272563f,.data,build/u/assets/obseg/brief/UbriefpeteZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefpeteZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefrunZ.o -2e72c21b0aa658363c7d26a846616a5c,.data,build/u/assets/obseg/brief/UbriefrunZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefrunZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsevbZ.o -ee356641add167a35310a6bb14b7d7f1,.data,build/u/assets/obseg/brief/UbriefsevbZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsevbZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsevbunkerZ.o -2207330d53ebb26240adadac3075dc37,.data,build/u/assets/obseg/brief/UbriefsevbunkerZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsevbunkerZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsevxZ.o -1fbf379b61826ed7dd56cd57934b1031,.data,build/u/assets/obseg/brief/UbriefsevxZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsevxZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsevxbZ.o -06e62170941cf9226161b204a0bcc975,.data,build/u/assets/obseg/brief/UbriefsevxbZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsevxbZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsiloZ.o -1f012033e14273295212b6999665899f,.data,build/u/assets/obseg/brief/UbriefsiloZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsiloZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefstatueZ.o -844bb85f8ac9c5c6f42d34b755fb7cd5,.data,build/u/assets/obseg/brief/UbriefstatueZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefstatueZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbrieftraZ.o -615247e8e832c24d06f5b02e777a5664,.data,build/u/assets/obseg/brief/UbrieftraZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbrieftraZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupameZ.o -505a174e9ba17b40733bf87bab422350,.data,build/u/assets/obseg/setup/Ump_setupameZ.o -ab1d1168e3309a4e1d8898dead14d5ca,.rodata,build/u/assets/obseg/setup/Ump_setupameZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setuparchZ.o -d3ecd34091343233de96fcd7709fb389,.data,build/u/assets/obseg/setup/Ump_setuparchZ.o -5dddc63a188899ef3aacf71dc92c8e75,.rodata,build/u/assets/obseg/setup/Ump_setuparchZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setuparkZ.o -d72a224479ee04046e2458e75ba971dd,.data,build/u/assets/obseg/setup/Ump_setuparkZ.o -9da7d43d1061590d6aaed55112c30adf,.rodata,build/u/assets/obseg/setup/Ump_setuparkZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupashZ.o -4bbf2415439ad3988b72542dc7c16435,.data,build/u/assets/obseg/setup/Ump_setupashZ.o -ab1d1168e3309a4e1d8898dead14d5ca,.rodata,build/u/assets/obseg/setup/Ump_setupashZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupcaveZ.o -9caabe90e7f9b62668b607b286e14738,.data,build/u/assets/obseg/setup/Ump_setupcaveZ.o -966bcbf56fab2e5a8306a27c2be2821e,.rodata,build/u/assets/obseg/setup/Ump_setupcaveZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupcradZ.o -e3270c14ece27e5f15f0bf54e20f000b,.data,build/u/assets/obseg/setup/Ump_setupcradZ.o -1332398676dda34bcb4104546a94cde8,.rodata,build/u/assets/obseg/setup/Ump_setupcradZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupcrypZ.o -baf4a21c4c3a50dfc68dd4bb79e1a4e4,.data,build/u/assets/obseg/setup/Ump_setupcrypZ.o -25568bb18b99a852d18fba045213caa4,.rodata,build/u/assets/obseg/setup/Ump_setupcrypZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupdamZ.o -5d8b43300e7b701a21629ccee455aa44,.data,build/u/assets/obseg/setup/Ump_setupdamZ.o -f351df409b29d7b80f07b28b2b39c19d,.rodata,build/u/assets/obseg/setup/Ump_setupdamZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupdepotZ.o -d371b61f3ef254edc288c388a8dc6898,.data,build/u/assets/obseg/setup/Ump_setupdepotZ.o -bce3c8f75bf884451c11c5992d3d76bf,.rodata,build/u/assets/obseg/setup/Ump_setupdepotZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupdestZ.o -ac0f775f3312808d3f479dc5c8542142,.data,build/u/assets/obseg/setup/Ump_setupdestZ.o -6b1258f76736d8ab71a948030a16e689,.rodata,build/u/assets/obseg/setup/Ump_setupdestZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupdishZ.o -52738bf0cf907b44c5c304bdb71b5635,.data,build/u/assets/obseg/setup/Ump_setupdishZ.o -db0620822dd4f53ca244a0997bd92f9d,.rodata,build/u/assets/obseg/setup/Ump_setupdishZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupimpZ.o -9a2d5bb6c18ee5acdaade6edd0ea6571,.data,build/u/assets/obseg/setup/Ump_setupimpZ.o -ab1d1168e3309a4e1d8898dead14d5ca,.rodata,build/u/assets/obseg/setup/Ump_setupimpZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupoatZ.o -66ed502d7ebd0286c31df6d918342d76,.data,build/u/assets/obseg/setup/Ump_setupoatZ.o -2a285f6bffe60426c716f84bd5178948,.rodata,build/u/assets/obseg/setup/Ump_setupoatZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setuprefZ.o -a192e4098a04675dc0406394441c5596,.data,build/u/assets/obseg/setup/Ump_setuprefZ.o -acc9011f897a5b3b45cad7c1ea4b4715,.rodata,build/u/assets/obseg/setup/Ump_setuprefZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setuprunZ.o -b14e999c1634c7fd7cf5f3b2f3a56513,.data,build/u/assets/obseg/setup/Ump_setuprunZ.o -d8dd467ddada77c0a04028e782a49e22,.rodata,build/u/assets/obseg/setup/Ump_setuprunZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupsevbZ.o -fa7a848eb5dac0a60671450aa46df0aa,.data,build/u/assets/obseg/setup/Ump_setupsevbZ.o -44b3c131f9627281b5d1e3d72ddd50d2,.rodata,build/u/assets/obseg/setup/Ump_setupsevbZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/Ump_setupstatueZ.o -39e07e5a0707a6c1ba36f23bc2b8a867,.data,build/u/assets/obseg/setup/Ump_setupstatueZ.o -adb0b6f3ef926a53ca4468251dc25d24,.rodata,build/u/assets/obseg/setup/Ump_setupstatueZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetuparchZ.o -14a533d673facd6407d27994b5add721,.data,build/u/assets/obseg/setup/UsetuparchZ.o -8c9e41dc4bfd4e3a4257e50d01d59f16,.rodata,build/u/assets/obseg/setup/UsetuparchZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetuparkZ.o -df46b4d3b99be3fec5c4af95622ebd35,.data,build/u/assets/obseg/setup/UsetuparkZ.o -e3a6ea2b5e0116a92c0d944720f4555d,.rodata,build/u/assets/obseg/setup/UsetuparkZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupaztZ.o -dea9ac3dcf299ac954a6d31b6998dbde,.data,build/u/assets/obseg/setup/UsetupaztZ.o -90dfc984ae56837963ad6c378179e575,.rodata,build/u/assets/obseg/setup/UsetupaztZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupcaveZ.o -cfcdf6399fd8558a81aedabca825886f,.data,build/u/assets/obseg/setup/UsetupcaveZ.o -b4d18f2d43ed9ab43c66ea8a9dbf601e,.rodata,build/u/assets/obseg/setup/UsetupcaveZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupcontrolZ.o -86bb66970474e427936a5b4278d0a4e8,.data,build/u/assets/obseg/setup/UsetupcontrolZ.o -0a6d7e907a934a22f192afd8a338864f,.rodata,build/u/assets/obseg/setup/UsetupcontrolZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupcradZ.o -7a97b531c89ef4100caca1810791a330,.data,build/u/assets/obseg/setup/UsetupcradZ.o -352f4bbf95b387e7dac966ea4039df16,.rodata,build/u/assets/obseg/setup/UsetupcradZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupcrypZ.o -2116905de55f8a2add7def57bfab3733,.data,build/u/assets/obseg/setup/UsetupcrypZ.o -2ca0538045df922ddffd5f7a56bf9f6f,.rodata,build/u/assets/obseg/setup/UsetupcrypZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupdamZ.o -192c4a53cf1a38e18926f44bbccd276d,.data,build/u/assets/obseg/setup/UsetupdamZ.o -f3f0addffd8b48b5a1eefe4799791d48,.rodata,build/u/assets/obseg/setup/UsetupdamZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupdepoZ.o -aa084741c9c5db45bae711efc0a33fe2,.data,build/u/assets/obseg/setup/UsetupdepoZ.o -7ea25ce7fd3caf5849a08d69accca997,.rodata,build/u/assets/obseg/setup/UsetupdepoZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupdestZ.o -6c75f6b6ad2377d28ca7b72f77ac30d8,.data,build/u/assets/obseg/setup/UsetupdestZ.o -513cf92e4775bacf5d139789b86a9598,.rodata,build/u/assets/obseg/setup/UsetupdestZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupjunZ.o -a1115ec641db7f5ca65fa6ba1a8861e3,.data,build/u/assets/obseg/setup/UsetupjunZ.o -ebd5e09c96d80ae0b3244a7607f40185,.rodata,build/u/assets/obseg/setup/UsetupjunZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetuplenZ.o -456a996465f1681c534404419a07efc8,.data,build/u/assets/obseg/setup/UsetuplenZ.o -aa0cd1b5e2fa6aa154d53b48882dd8d4,.rodata,build/u/assets/obseg/setup/UsetuplenZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetuppeteZ.o -2d05088e0082bae7a720d6a476283519,.data,build/u/assets/obseg/setup/UsetuppeteZ.o -3887668ddf86cf4380d9a5f16bc2dcf3,.rodata,build/u/assets/obseg/setup/UsetuppeteZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetuprunZ.o -2a26a94abd77eb88153ce42d4d6e3414,.data,build/u/assets/obseg/setup/UsetuprunZ.o -7638bc9258fb1dd47ce0cbb77a916f4f,.rodata,build/u/assets/obseg/setup/UsetuprunZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsevbZ.o -a94881aeb4f12a22bd27b71fcbea7f93,.data,build/u/assets/obseg/setup/UsetupsevbZ.o -0cf8f0dc88c6e5c615415596d9ee1439,.rodata,build/u/assets/obseg/setup/UsetupsevbZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsevbunkerZ.o -6ae37ef5d6eee372ef100bc85e864de2,.data,build/u/assets/obseg/setup/UsetupsevbunkerZ.o -b5d1f1688129156bed0f46a1f10f4c4e,.rodata,build/u/assets/obseg/setup/UsetupsevbunkerZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsevxZ.o -5a95cb479a12148813980fcbca8cf93c,.data,build/u/assets/obseg/setup/UsetupsevxZ.o -6b0d217217cc5137855ec4f175ebcfa5,.rodata,build/u/assets/obseg/setup/UsetupsevxZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsevxbZ.o -493bfe05761a14f4f7647f613115e0f7,.data,build/u/assets/obseg/setup/UsetupsevxbZ.o -214e937f3abb7fa20e8ec4df011578de,.rodata,build/u/assets/obseg/setup/UsetupsevxbZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsiloZ.o -631ac7507ee4572ecddf59fd9af48b7e,.data,build/u/assets/obseg/setup/UsetupsiloZ.o -6fdb011700c5c0c289ae934e8c6ec60f,.rodata,build/u/assets/obseg/setup/UsetupsiloZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupstatueZ.o -599e0f739b5a910616a71b009cc85ebc,.data,build/u/assets/obseg/setup/UsetupstatueZ.o -71a776c5247039f708ce1346c95ed2fb,.rodata,build/u/assets/obseg/setup/UsetupstatueZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetuptraZ.o -12f885daaf75467887b7cbb43354e935,.data,build/u/assets/obseg/setup/UsetuptraZ.o -4701660837b568334586d2a494bea037,.rodata,build/u/assets/obseg/setup/UsetuptraZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_ame_all_p_stanZ.o -b1c4e40a881c345e593eb8246d727f46,.data,build/u/assets/obseg/stan/Tbg_ame_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_ame_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_arch_all_p_stanZ.o -7ca676a375a0d8d08e5931610598b6d4,.data,build/u/assets/obseg/stan/Tbg_arch_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_arch_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_arec_all_p_stanZ.o -2688daaa6b0f2f59e7e02ae9ba95be85,.data,build/u/assets/obseg/stan/Tbg_arec_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_arec_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_ark_all_p_stanZ.o -a057fe4ab5f288016da38006086756b7,.data,build/u/assets/obseg/stan/Tbg_ark_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_ark_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_ash_all_p_stanZ.o -b1c4e40a881c345e593eb8246d727f46,.data,build/u/assets/obseg/stan/Tbg_ash_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_ash_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_azt_all_p_stanZ.o -09ed891dfef1e77bc487b23c6f5bea95,.data,build/u/assets/obseg/stan/Tbg_azt_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_azt_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_cat_all_p_stanZ.o -faba7e91e6d464cc6cc671aed03b7719,.data,build/u/assets/obseg/stan/Tbg_cat_all_p_stanZ.o -827ae21e5b4aa345fa3b51c8494ca1d8,.rodata,build/u/assets/obseg/stan/Tbg_cat_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_cave_all_p_stanZ.o -b3215b85b77d6adbc495d0e446eba0cf,.data,build/u/assets/obseg/stan/Tbg_cave_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_cave_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_crad_all_p_stanZ.o -1b488bbae36c96593c4636e8406afb2c,.data,build/u/assets/obseg/stan/Tbg_crad_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_crad_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_cryp_all_p_stanZ.o -ee1fb6264844257ae78e0de464be1f6d,.data,build/u/assets/obseg/stan/Tbg_cryp_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_cryp_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_dam_all_p_stanZ.o -ac9b55ee6961cfbe4a8b0f79fdcbc7fe,.data,build/u/assets/obseg/stan/Tbg_dam_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_dam_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_depo_all_p_stanZ.o -7ea1a82a0f3b87a38e42ecd8e44baa76,.data,build/u/assets/obseg/stan/Tbg_depo_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_depo_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_dest_all_p_stanZ.o -856a8f0f2ddb31a1fd512dbbfe0c8763,.data,build/u/assets/obseg/stan/Tbg_dest_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_dest_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_dish_all_p_stanZ.o -bb55353a9f75ada784750decf91337f8,.data,build/u/assets/obseg/stan/Tbg_dish_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_dish_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_imp_all_p_stanZ.o -b1c4e40a881c345e593eb8246d727f46,.data,build/u/assets/obseg/stan/Tbg_imp_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_imp_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_jun_all_p_stanZ.o -e5b50da9773335420524ae4e33cce850,.data,build/u/assets/obseg/stan/Tbg_jun_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_jun_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_len_all_p_stanZ.o -ae5ede059252d6ce4da9e79a0393ee98,.data,build/u/assets/obseg/stan/Tbg_len_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_len_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_oat_all_p_stanZ.o -8260b7a7be2a02444f074fe4315070e5,.data,build/u/assets/obseg/stan/Tbg_oat_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_oat_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_pete_all_p_stanZ.o -e5b4cb17a05fdb99d908d0d5927cd19e,.data,build/u/assets/obseg/stan/Tbg_pete_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_pete_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_ref_all_p_stanZ.o -aa1546f1e09f7a6116d51f87786621d9,.data,build/u/assets/obseg/stan/Tbg_ref_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_ref_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_run_all_p_stanZ.o -ef1efff8f0d100d3a3d7c8d9b9805643,.data,build/u/assets/obseg/stan/Tbg_run_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_run_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_sev_all_p_stanZ.o -1a18c0d029054b8c4026b3efb2264d12,.data,build/u/assets/obseg/stan/Tbg_sev_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_sev_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_sevb_all_p_stanZ.o -b490026d969f03bbd454d174f6c64c42,.data,build/u/assets/obseg/stan/Tbg_sevb_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_sevb_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_sevx_all_p_stanZ.o -42c5b0307eec8549956b0a75397ade93,.data,build/u/assets/obseg/stan/Tbg_sevx_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_sevx_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_sho_all_p_stanZ.o -570a958a10b9e6962b0d55449f62ea3f,.data,build/u/assets/obseg/stan/Tbg_sho_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_sho_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_silo_all_p_stanZ.o -f0a204c9b33851d045971d5b33d0b9cd,.data,build/u/assets/obseg/stan/Tbg_silo_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_silo_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_stat_all_p_stanZ.o -8bafb0743a0d92c83b0aec2bf2dedc17,.data,build/u/assets/obseg/stan/Tbg_stat_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_stat_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/stan/Tbg_tra_all_p_stanZ.o -228d56baf9bf34d1a6f45e4195306831,.data,build/u/assets/obseg/stan/Tbg_tra_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/stan/Tbg_tra_all_p_stanZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LameE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LameE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LameE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LameJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LameJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LameJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LarchE.o -40375b0a8c1eee1a393674140514db0f,.data,build/u/assets/obseg/text/LarchE.o -5bcae7d284bbfc80408fadd4badd73b7,.rodata,build/u/assets/obseg/text/LarchE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LarchJ.o -dbe9e4326b4e5b1b129950484651897c,.data,build/u/assets/obseg/text/LarchJ.o -018896a1b133d314f6ed19b82250b35e,.rodata,build/u/assets/obseg/text/LarchJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LarecE.o -915a2f930db20f887e025a442446efdb,.data,build/u/assets/obseg/text/LarecE.o -66c43c14b6f1331860cc42c6f75f5dce,.rodata,build/u/assets/obseg/text/LarecE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LarecJ.o -d0c51d28aa7e3ead90e7692b1878c3bd,.data,build/u/assets/obseg/text/LarecJ.o -a39231dc9106ae83632440debcca1f17,.rodata,build/u/assets/obseg/text/LarecJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LarkE.o -68016142854324635bb656ed81a1fbd2,.data,build/u/assets/obseg/text/LarkE.o -05a5ea6aaf7af5225d5424568d7260f4,.rodata,build/u/assets/obseg/text/LarkE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LarkJ.o -a11d9aaeb270df2553ac17be83792938,.data,build/u/assets/obseg/text/LarkJ.o -46bec36881b439fb7d239e91e747928e,.rodata,build/u/assets/obseg/text/LarkJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LashE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LashE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LashE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LashJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LashJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LashJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LaztE.o -78ed274beb6e13710bae643814b671ed,.data,build/u/assets/obseg/text/LaztE.o -b15a317aed068809603365223c76e6c0,.rodata,build/u/assets/obseg/text/LaztE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LcatE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LcatE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LcatE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LcatJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LcatJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LcatJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LcaveE.o -8912e4552c084430fb39d132f2629c92,.data,build/u/assets/obseg/text/LcaveE.o -a3fecff5d1388aabed62f5993b8c1ae6,.rodata,build/u/assets/obseg/text/LcaveE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LcaveJ.o -9e2991e2b3908b0be3087e621170d5eb,.data,build/u/assets/obseg/text/LcaveJ.o -e632526d0c18895dee5bfd7a149efc2d,.rodata,build/u/assets/obseg/text/LcaveJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LcradE.o -cad64034f753f2197f25909cfe85a69c,.data,build/u/assets/obseg/text/LcradE.o -1a99f6b879c658c72669c359522bf22e,.rodata,build/u/assets/obseg/text/LcradE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LcradJ.o -a5db25f77d2019e62d9ef08690a72d47,.data,build/u/assets/obseg/text/LcradJ.o -459c114c8cbf2975830c31a17c2575d1,.rodata,build/u/assets/obseg/text/LcradJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LcrypE.o -a5dd43fa608e1e19b53db6955c7075a1,.data,build/u/assets/obseg/text/LcrypE.o -fb2e8c50b91a21ba4b169c04a742127a,.rodata,build/u/assets/obseg/text/LcrypE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LcrypJ.o -c960e86f0c66732d8336cd4ba75f46ed,.data,build/u/assets/obseg/text/LcrypJ.o -b6a20ee727fc89acd95cf192de24ff3e,.rodata,build/u/assets/obseg/text/LcrypJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LdamE.o -e205f5cdce6490730ad57d9c840a430f,.data,build/u/assets/obseg/text/LdamE.o -e07024a5df42036b189573b1179fa412,.rodata,build/u/assets/obseg/text/LdamE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LdamJ.o -d65c3c8f893a3db65d0ff5b557f7d9e8,.data,build/u/assets/obseg/text/LdamJ.o -f53bede52d021cfb15bbf665fff73db4,.rodata,build/u/assets/obseg/text/LdamJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LdepoE.o -77b03ef19e0263a057e8df1c81f47de4,.data,build/u/assets/obseg/text/LdepoE.o -566a0cb0d5fb0165f50c817d53d82337,.rodata,build/u/assets/obseg/text/LdepoE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LdepoJ.o -f092d9e7fb8deb596dd5c72d251262a4,.data,build/u/assets/obseg/text/LdepoJ.o -f36cdf9fea81b9cca3213d5c3304fa07,.rodata,build/u/assets/obseg/text/LdepoJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LdestE.o -78c0742ea9a47d55d3e014d1dd89b79b,.data,build/u/assets/obseg/text/LdestE.o -d8d294b690ace59508fad0252c2bfa22,.rodata,build/u/assets/obseg/text/LdestE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LdestJ.o -58f12d62fdf22ab403b4000f756da9b4,.data,build/u/assets/obseg/text/LdestJ.o -91ae39a8422254da064603940e9d78b3,.rodata,build/u/assets/obseg/text/LdestJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LdishE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LdishE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LdishE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LdishJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LdishJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LdishJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LearE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LearE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LearE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LearJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LearJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LearJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LeldE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LeldE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LeldE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LeldJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LeldJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LeldJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LgunE.o -a164e63ed1cb68255fd985a6eab8e927,.data,build/u/assets/obseg/text/LgunE.o -9768b9303970aa139698b3f210495d8e,.rodata,build/u/assets/obseg/text/LgunE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LgunJ.o -3c6c4fe43d93937e67701b50246f77df,.data,build/u/assets/obseg/text/LgunJ.o -1e7f24ceb1a009911f3415be2b2498ab,.rodata,build/u/assets/obseg/text/LgunJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LimpE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LimpE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LimpE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LimpJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LimpJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LimpJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LjunE.o -e0eb6398245dd1df5952be511569a7c6,.data,build/u/assets/obseg/text/LjunE.o -c3f6256e87dc5d2238c91d9e35b35203,.rodata,build/u/assets/obseg/text/LjunE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LjunJ.o -93977f3cb19d1accd13f3a02c800fa3c,.data,build/u/assets/obseg/text/LjunJ.o -1c134a5614358f8e3df504845a4dd948,.rodata,build/u/assets/obseg/text/LjunJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LleeE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LleeE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LleeE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LleeJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LleeJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LleeJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LlenE.o -45870e825e124904bf6c6f651abc3330,.data,build/u/assets/obseg/text/LlenE.o -e08ee7e9fbc0619b0033edd4d46ba5e0,.rodata,build/u/assets/obseg/text/LlenE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LlenJ.o -af3fe7c0e822377bef963ec817851854,.data,build/u/assets/obseg/text/LlenJ.o -d5c7f2581757b2c88453d2d123c9ae08,.rodata,build/u/assets/obseg/text/LlenJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LlipE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LlipE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LlipE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LlipJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LlipJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LlipJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LlueE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LlueE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LlueE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LlueJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LlueJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LlueJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LmiscE.o -63e974a34fd5944c38fd03fad1c8554c,.data,build/u/assets/obseg/text/LmiscE.o -b1b2626e2f70e9f64374f5d225581da2,.rodata,build/u/assets/obseg/text/LmiscE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LmpmenuE.o -1c3f1e9b16fcdd7e5ca632cc4143b8c7,.data,build/u/assets/obseg/text/LmpmenuE.o -51b7f06e0dbd8989f8c21661faedcbc5,.rodata,build/u/assets/obseg/text/LmpmenuE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LmpmenuJ.o -3c005bea9e17093c957adb85dd4b724b,.data,build/u/assets/obseg/text/LmpmenuJ.o -4823853f7fef5656740908dc5326503e,.rodata,build/u/assets/obseg/text/LmpmenuJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LmpweaponsE.o -27b33a70975e8963d090085d67c0e11e,.data,build/u/assets/obseg/text/LmpweaponsE.o -4258a3157197bfd902a3edf5ebeca094,.rodata,build/u/assets/obseg/text/LmpweaponsE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LmpweaponsJ.o -a60f257d3486c29290de1d96c7aba1f1,.data,build/u/assets/obseg/text/LmpweaponsJ.o -67c3d4478ce7fe03628da496b8724a60,.rodata,build/u/assets/obseg/text/LmpweaponsJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LoatE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LoatE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LoatE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LoatJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LoatJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LoatJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LoptionsE.o -8cb0539d740502fd140b92d50cddebbe,.data,build/u/assets/obseg/text/LoptionsE.o -983fd0a54b2bf95f1f6d22b10334017e,.rodata,build/u/assets/obseg/text/LoptionsE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LoptionsJ.o -d9fbcd58c4fbf1291c8e768e67c540c4,.data,build/u/assets/obseg/text/LoptionsJ.o -e3ab3d69b0a6b4c129f0c5e8951ca771,.rodata,build/u/assets/obseg/text/LoptionsJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LpamE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LpamE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LpamE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LpamJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LpamJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LpamJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LpeteE.o -04a39af55d3cf6a355fa7e1abf9d3936,.data,build/u/assets/obseg/text/LpeteE.o -eaadee243470be31eb552f5d820f3a5d,.rodata,build/u/assets/obseg/text/LpeteE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LpeteJ.o -749ac5b1f0cbf6ef5a0d0186c6016f7d,.data,build/u/assets/obseg/text/LpeteJ.o -2f4e116b1e74df22cee53bec9a6c0180,.rodata,build/u/assets/obseg/text/LpeteJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LpropobjE.o -fa5bea6a2ce0736029d3435f3da08a71,.data,build/u/assets/obseg/text/LpropobjE.o -42a88b249ca7c8d56a4ced2f13c8dab9,.rodata,build/u/assets/obseg/text/LpropobjE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LpropobjJ.o -d09a2dec8eafc3c7b623b26056109d8f,.data,build/u/assets/obseg/text/LpropobjJ.o -b0b622c9c88222155aa0d4b1e3638ec8,.rodata,build/u/assets/obseg/text/LpropobjJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LrefE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LrefE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LrefE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LrefJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LrefJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LrefJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LritE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LritE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LritE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LritJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LritJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LritJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LrunE.o -e9c5308dc6ccc93b5f34141b8f9a46ba,.data,build/u/assets/obseg/text/LrunE.o -2fd0d517cff1a6e76b2fd8d5e03b84d2,.rodata,build/u/assets/obseg/text/LrunE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LrunJ.o -53d5da8d3b0a205209bc32bffb623f2c,.data,build/u/assets/obseg/text/LrunJ.o -9ee606c9907824ea41a68ed50449b8c2,.rodata,build/u/assets/obseg/text/LrunJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevE.o -857201f7708da54326d9f65a607f0699,.data,build/u/assets/obseg/text/LsevE.o -4388dfac4ac5ddd6f1e806f444785d1f,.rodata,build/u/assets/obseg/text/LsevE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevJ.o -216e3e8ac6df1deefd48a44048b7f2a9,.data,build/u/assets/obseg/text/LsevJ.o -9d5d536dbf0ac817c41c6f6ce1da1c2e,.rodata,build/u/assets/obseg/text/LsevJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevbE.o -99b5d2c99e8436044ab80f4d5c10955d,.data,build/u/assets/obseg/text/LsevbE.o -a533dc0dea666db00823112b16a25e35,.rodata,build/u/assets/obseg/text/LsevbE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevxE.o -b7253c719a43dcc64c39e3021777dfe4,.data,build/u/assets/obseg/text/LsevxE.o -bc300a0d53e25053b73dd7f2515a622b,.rodata,build/u/assets/obseg/text/LsevxE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevxJ.o -ce0d781b0d13eec737ed28c1ec89700c,.data,build/u/assets/obseg/text/LsevxJ.o -b7b850df3d2cac26c9cfd6ba47f632d1,.rodata,build/u/assets/obseg/text/LsevxJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevxbE.o -381c7194edce1643c856ee5408955858,.data,build/u/assets/obseg/text/LsevxbE.o -5c151a11ab6f175f6dd2cf18fc8d9c48,.rodata,build/u/assets/obseg/text/LsevxbE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevxbJ.o -4b3b5544e4cb3af47d90f2d0bf992003,.data,build/u/assets/obseg/text/LsevxbJ.o -7a6f1aef8ae105dfb7b8c7e4944bbe19,.rodata,build/u/assets/obseg/text/LsevxbJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LshoE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LshoE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LshoE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LshoJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LshoJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LshoJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsiloE.o -7194bf077bcf7820a0525b9a7e37bac1,.data,build/u/assets/obseg/text/LsiloE.o -24a3e8a64ce0c707fab8a7aa11a252e3,.rodata,build/u/assets/obseg/text/LsiloE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsiloJ.o -156b33414aa03ab6e5990a6c0a59739c,.data,build/u/assets/obseg/text/LsiloJ.o -0f2bf8b4fba6f5c67e647b4e267da6a7,.rodata,build/u/assets/obseg/text/LsiloJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LstatE.o -beb5446cf51a511f1f5340c4e9dffb0b,.data,build/u/assets/obseg/text/LstatE.o -7b27123365b22407d6b61c22bd7475f5,.rodata,build/u/assets/obseg/text/LstatE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LtitleE.o -d1c38171fda9ed66e044ba9aa25e9297,.data,build/u/assets/obseg/text/LtitleE.o -fc81a6395d6b22c0bee22a3912eeef08,.rodata,build/u/assets/obseg/text/LtitleE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LtitleJ.o -147293ccd4dbcd659b4eb15e89dcd416,.data,build/u/assets/obseg/text/LtitleJ.o -0613cb2ad4a7e5b8e02e61df7efee3a4,.rodata,build/u/assets/obseg/text/LtitleJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LtraE.o -d5a8b464357e4582526d3e194fdb613c,.data,build/u/assets/obseg/text/LtraE.o -690a72eb06470f3413686da7c1de04bb,.rodata,build/u/assets/obseg/text/LtraE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LtraJ.o -9c0161152260e669b702ed1d9259bbcb,.data,build/u/assets/obseg/text/LtraJ.o -bcfefbdf605af75037f04dfc07f6fbe7,.rodata,build/u/assets/obseg/text/LtraJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LwaxE.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LwaxE.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LwaxE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LwaxJ.o -70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LwaxJ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LwaxJ.o +ca1cbcc4fb9c78a067294329e536525b,.text,build/u/src/getra.o +f324bf220c6a6440660ae248f5caacff,.text,build/u/src/gspboot.o +139b8a71a892412631fde2baec4c818a,.data,build/u/src/gspboot.o +7e0870866c9eaf1adbd7d04e6816ffab,.text,build/u/src/inflate/inflate.o +4996fccdfdfd0ad0c5800e20e313e6c9,.data,build/u/src/inflate/inflate.o +7f67be25a6de8e1cfb9f7de1e358ca60,.text,build/u/src/init.o +6722e53003673c8d170b5e7b90347db8,.data,build/u/src/init.o +1ae0db2fe4e9df3204e902fb33d0d912,.rodata,build/u/src/init.o +aad691b2486e2c9e16086666f6e0932e,.text,build/u/src/joy.o +7ec00c5c61b1ffae630f69b9af0b948a,.data,build/u/src/joy.o +f977a71969374ebad0f7c04f294cac7a,.rodata,build/u/src/joy.o +9812a14f81963ad6fc775491be0adca7,.text,build/u/src/libultra/audio/auxbus.o +bf242b92f8a31c89dcfb7f6293eb0ad4,.text,build/u/src/libultra/audio/bnkf.o +a3352aa6fb79bfdb42426f2792064666,.text,build/u/src/libultra/audio/cents2ratio.o +182fccf4d28589a06f5c62879619c38d,.rodata,build/u/src/libultra/audio/cents2ratio.o +a0ca0cb9184fe9b9a34708cc7aa7cf22,.text,build/u/src/libultra/audio/copy.o +8c714e0062992cce39da575493dcc807,.text,build/u/src/libultra/audio/cseq.o +c64ce95a13bce253455715e4ffd50981,.rodata,build/u/src/libultra/audio/cseq.o +39cfebd1a144bbb471ddc040b04ab3ee,.text,build/u/src/libultra/audio/cspgetstate.o +397dd298f74cf6617a0a0a4a8be7fd6f,.text,build/u/src/libultra/audio/csplayer.o +5cc8dfbe9ff4b1b069ee28e3d935b78d,.rodata,build/u/src/libultra/audio/csplayer.o +4b90fb394831a51a0e37da4287d96221,.text,build/u/src/libultra/audio/cspplay.o +f79d682707cec1bddd4c0f7ecef15320,.text,build/u/src/libultra/audio/cspsetseq.o +397eab9fdd6de5f664cfb50e45ec373a,.text,build/u/src/libultra/audio/cspsetvol.o +625b48c36b0d81e0b86a166026e08cc4,.text,build/u/src/libultra/audio/cspstop.o +d0b15d74b026cca33062afa201901221,.text,build/u/src/libultra/audio/event.o +f585b75138011d81e80eefb3e6616cc5,.text,build/u/src/libultra/audio/filter.o +a88ff071888658b7a81b538773263439,.text,build/u/src/libultra/audio/heapalloc.o +ee7619cc3a603669a451c52aa0dbd8d8,.text,build/u/src/libultra/audio/heapinit.o +99155c3c84e33b1a856b16bac719dad3,.text,build/u/src/libultra/audio/load.o +bffced045880244db90ef1a7195f71e9,.text,build/u/src/libultra/audio/mainbus.o +87de623b3c14c27b6b0aee769f326a09,.text,build/u/src/libultra/audio/resample.o +a456fa83a4cfc395e83b9056b32c5d5b,.rodata,build/u/src/libultra/audio/resample.o +4d63eb5eaf746f5a0bc507b8f4c37431,.text,build/u/src/libultra/audio/save.o +a93b3ae4287760f8e9f85e3a31bf8ba2,.text,build/u/src/libultra/audio/seq.o +c64ce95a13bce253455715e4ffd50981,.rodata,build/u/src/libultra/audio/seq.o +6b89276398d729b58a2ebd39ae2a85ad,.text,build/u/src/libultra/audio/seqplayer.o +fdcae6ef50ada15e9915a5e7925ccf75,.rodata,build/u/src/libultra/audio/seqplayer.o +31879642c68899d7498e5209470ad964,.text,build/u/src/libultra/audio/seqpsetbank.o +1aadb646e1dc462a3bf6eaef835c63c5,.text,build/u/src/libultra/audio/sl.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/libultra/audio/sl.o +b99d01b26dc778ee09e31e3b586fcb09,.text,build/u/src/libultra/audio/synaddplayer.o +dae56de4eaf8b63aa067adcec389bebc,.text,build/u/src/libultra/audio/synallocfx.o +9fd8eb498893d32679b00dd63f021ab1,.text,build/u/src/libultra/audio/synallocvoice.o +b7ca6f52c97784edffc24b38a5f4e271,.text,build/u/src/libultra/audio/syndelete.o +365dba095ac939f6b882e6278783888f,.text,build/u/src/libultra/audio/synfreevoice.o +e57547a9f59c73ce5319e8f58c282bc3,.text,build/u/src/libultra/audio/synsetfxmix.o +fa194c3c619002a4efb4a8e16cce37bd,.text,build/u/src/libultra/audio/synsetpan.o +bf489ee36e189510dc70824c7ca99bb7,.text,build/u/src/libultra/audio/synsetpitch.o +a3e0b4dc9c5d5fb2303a5da47ac9358f,.text,build/u/src/libultra/audio/synsetpriority.o +4c058a83500ddedc9b14ac0ac76a7bd7,.text,build/u/src/libultra/audio/synsetvol.o +907baf434e0320b8edf6f1daeb846e24,.text,build/u/src/libultra/audio/synstartvoice.o +b0b05f84eec51589a11f8618f0c09b41,.text,build/u/src/libultra/audio/synstartvoiceparam.o +63aa92fa2495194c131f0b28ebae1ac6,.text,build/u/src/libultra/audio/synstopvoice.o +fc44a75127525033a877818a83fa4930,.text,build/u/src/libultra/audio/synthesizer.o +c64ce95a13bce253455715e4ffd50981,.rodata,build/u/src/libultra/audio/synthesizer.o +4dedb444692164b0f9b9ec47586d9d01,.text,build/u/src/libultra/gu/align.o +988781e549cddbbbfde653183d096a30,.rodata,build/u/src/libultra/gu/align.o +c3290d1bea89f1f19d6960bc49db3424,.text,build/u/src/libultra/gu/cosf.o +b689f25eae2d80c5df5f1a3514c76aa1,.rodata,build/u/src/libultra/gu/cosf.o +d961bb3d7db056f6f6d00c0e820502ef,.text,build/u/src/libultra/gu/coss.o +acd92350d4c2415dc61c416e5d996fdb,.rodata,build/u/src/libultra/gu/libm_vals.o +9303fa1bf73429eebb5993d7cb8b6b8c,.text,build/u/src/libultra/gu/lookat.o +3ce21f7539743cbeeb82b6fe75721618,.text,build/u/src/libultra/gu/lookatref.o +637e8c206815d59d91da0437352452b1,.rodata,build/u/src/libultra/gu/lookatref.o +1f915ff6471165e55350e77fee0cd5b7,.text,build/u/src/libultra/gu/mtxutil.o +ac7341343a98ff4b66edb73ca57e6b39,.text,build/u/src/libultra/gu/normalize.o +23a8f8567dc7e7573698ed9eed58324c,.text,build/u/src/libultra/gu/ortho.o +968639ad8191f0933b687d136c8d33d9,.text,build/u/src/libultra/gu/perspective.o +b1123e90dacd103e8aaad4e0c057f4f0,.rodata,build/u/src/libultra/gu/perspective.o +557a9f7a1edb536f37581fa4b9751b05,.text,build/u/src/libultra/gu/rotate.o +988781e549cddbbbfde653183d096a30,.rodata,build/u/src/libultra/gu/rotate.o +92c00e7340bbeda19651007b38872eb8,.text,build/u/src/libultra/gu/scale.o +1b532025315811c6db031aa6c0e0f0f3,.text,build/u/src/libultra/gu/sinf.o +b689f25eae2d80c5df5f1a3514c76aa1,.rodata,build/u/src/libultra/gu/sinf.o +b3334a857bfd53ac65963889c56c1048,.text,build/u/src/libultra/gu/sins.o +baa5a9a8d9f1099ce00da68ddb6d788a,.data,build/u/src/libultra/gu/sins.o +cb7f0f508b271a9f3582a2271a671b78,.text,build/u/src/libultra/gu/sqrtf.o +a5d47c523ea073bd5e8509fce7a27441,.text,build/u/src/libultra/gu/translate.o +973564621df4a9f79e0dc269ce577744,.text,build/u/src/libultra/io/ai.o +75a3748c1ccfdeef4a046f72b39d0467,.text,build/u/src/libultra/io/aigetlen.o +bd87d99d59842482d938f603493c4ac2,.text,build/u/src/libultra/io/aisetfreq.o +e16cb837814b215234cb395cb08607b2,.text,build/u/src/libultra/io/contpfs.o +cee3efca030162f0deb11b03c3506a53,.text,build/u/src/libultra/io/contquery.o +ac7d3bff173326d5d0a3fc54ba573433,.text,build/u/src/libultra/io/crc.o +524706b68b3a5b6218e2a56cf96814bb,.text,build/u/src/libultra/io/dp.o +0dc185f6a400c4cbd68a84cc8110819e,.text,build/u/src/libultra/io/dpctr.o +742e23192f1f3391c1a7377c05a3c8a0,.text,build/u/src/libultra/io/dpsetnextbuf.o +00f69d4f329077709f78eb343d3353fb,.text,build/u/src/libultra/io/dpsetstat.o +bcd9c07c0b25a8e6774244d70d250080,.text,build/u/src/libultra/io/piacs.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/libultra/io/piacs.o +0cb841790a5e1d650d6726eabbdf2639,.text,build/u/src/libultra/io/pidma.o +97ae109cf9c0f08c5bd681a9b0fbb0fa,.text,build/u/src/libultra/io/pigetcmdq.o +e78d5385218bda222c3688f4a2a25f1a,.text,build/u/src/libultra/io/pigetstat.o +8c7fc34c30b9057852ea5206a3390149,.text,build/u/src/libultra/io/pirawdma.o +262cf6434e76dc08a224564a7af6fbdd,.text,build/u/src/libultra/io/pirawread.o +2cb23c789d9e59356bbe3bc40392099e,.text,build/u/src/libultra/io/pirawwrite.o +0e75da2cc4c4d36e879374e41637ba48,.text,build/u/src/libultra/io/piread.o +0e75da2cc4c4d36e879374e41637ba48,.text,build/u/src/libultra/io/piwrite.o +706a283c79694a28198091c43f11418e,.text,build/u/src/libultra/io/si.o +bcd9c07c0b25a8e6774244d70d250080,.text,build/u/src/libultra/io/siacs.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/libultra/io/siacs.o +bd0f24cce4f861e12fbaf74faef5123f,.text,build/u/src/libultra/io/sirawdma.o +7e4dea85c31cf95cffe0a37b86fd35df,.text,build/u/src/libultra/io/sirawread.o +d19f046dcbf4bb46ab7d77a801b884a0,.text,build/u/src/libultra/io/sirawwrite.o +398533aca0956a1abca441050f80a012,.text,build/u/src/libultra/io/sp.o +2c9c276194b5a2937013cb732b2b2cd0,.text,build/u/src/libultra/io/spgetstat.o +eacfeaf0e6e030f391872551bcaf4cb3,.text,build/u/src/libultra/io/sprawdma.o +431dbe6760406d5eb2735ee3197f42a9,.text,build/u/src/libultra/io/spsetpc.o +45e138023ab96519bed58a4e6a0e6472,.text,build/u/src/libultra/io/spsetstat.o +686c3d84c2460a0d9f1767fe5be8fe21,.text,build/u/src/libultra/io/sptaskyield.o +90a2fad3caf4bc3ce70a8aa68a72b191,.text,build/u/src/libultra/io/sptaskyielded.o +81d17aacb2969cafda56b993c69b9194,.text,build/u/src/libultra/io/viblack.o +9606fa675e6e05c1c82935fa508c6b30,.text,build/u/src/libultra/io/vigetcurrcontext.o +23d44fb2343b399833eb0e3f8748c582,.text,build/u/src/libultra/io/vigetcurrframebuf.o +23d44fb2343b399833eb0e3f8748c582,.text,build/u/src/libultra/io/vigetnextframebuf.o +37bb81bb1a3cfd115b0fe28c82790785,.data,build/u/src/libultra/io/vimodentsclan1.o +ce03ce1f69bb0d0ee28daf604f419e46,.text,build/u/src/libultra/io/virepeatline.o +410cba44672add7bd206d9e948ea9c0e,.text,build/u/src/libultra/io/visetevent.o +836ec0b3250b05c9673385e1d700571d,.text,build/u/src/libultra/io/visetmode.o +71e423b80d8050893dc2a853591333ab,.text,build/u/src/libultra/io/visetspecial.o +d1a8d01a0f18c4b3bc49d72178c65fc1,.text,build/u/src/libultra/io/visetxscale.o +f4332dca531b6f4429c3d1eddaf7e095,.text,build/u/src/libultra/io/visetyscale.o +65fa0b480f1e190831b3d2451f61abdf,.text,build/u/src/libultra/io/viswapbuf.o +3c5a4133e1b8966ec70ec449f59266ff,.text,build/u/src/libultra/io/viswapcontext.o +fe6da71268dbcfa1132b614e3a80df46,.text,build/u/src/libultra/libc/bcmp.o +6e6d21ba6a77ecb62c70a82de7700a2c,.text,build/u/src/libultra/libc/bcopy.o +a23e9b86a418624346764dcb962c429a,.text,build/u/src/libultra/libc/bzero.o +000fe395d1d03062ecc76da3bf7d910a,.text,build/u/src/libultra/libc/ldiv.o +5e172c104a37d98ade2097e1f8018e46,.text,build/u/src/libultra/libc/ll.o +388bfff2832def3a50ae95bf13bd57ec,.text,build/u/src/libultra/libc/llcvt.o +aeb35d5566ac612c02923d2e3613ec0e,.rodata,build/u/src/libultra/libc/llcvt.o +20d9a31c157ba4a06466d560d63ef02a,.text,build/u/src/libultra/libc/string.o +87a676fec95367197153e38c9294462d,.text,build/u/src/libultra/libc/xldtob.o +70557af9bc7db1392b8634a1185d0e8d,.rodata,build/u/src/libultra/libc/xldtob.o +623e8ba5dba76455bf0e757a2fecd7fd,.text,build/u/src/libultra/libc/xlitob.o +d98206026ba7d859f87c3b9cc5d851ea,.data,build/u/src/libultra/libc/xlitob.o +62e954b6ea092468377485798bb39e47,.text,build/u/src/libultra/os/createmesgqueue.o +cfa90645cf806207f4def3a9576e7675,.text,build/u/src/libultra/os/createthread.o +50770394f7ccb9c95a94bdaffc431c4e,.text,build/u/src/libultra/os/exception.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/src/libultra/os/exception.o +d936c0fcb56fc97296f7479cc17e1025,.rodata,build/u/src/libultra/os/exception.o +64c6633c368873c4237ee0ea3f8484fc,.text,build/u/src/libultra/os/getcount.o +9606fa675e6e05c1c82935fa508c6b30,.text,build/u/src/libultra/os/getcurrfaultthread.o +d3a64cefe11bee71a8d9fd55088661be,.text,build/u/src/libultra/os/getfpccsr.o +ce07eca63165b406d5efdf7ca7b4cd5f,.text,build/u/src/libultra/os/getsr.o +dbced829099bf5f69719d988ddf2a950,.text,build/u/src/libultra/os/getthreadpri.o +a4b52967e2051f81d824a7365c643424,.text,build/u/src/libultra/os/gettime.o +ab36f32503c39f6b4cfd8a065aaa6f7e,.text,build/u/src/libultra/os/gettlbhi.o +694989c484f1c8049de0ada2b8ab205e,.text,build/u/src/libultra/os/interrupt.o +c063f5a03141495ba21f3e47661a26a4,.text,build/u/src/libultra/os/invaldcache.o +91a03ff95ae612448823e7d7571b081b,.text,build/u/src/libultra/os/invalicache.o +de845aaea10ce68488cfaf2867f18750,.text,build/u/src/libultra/os/jammesg.o +3b5d3c7d207e37dceeedd301e35e2e58,.text,build/u/src/libultra/os/parameters.o +d39d668aeca88127ef02301d064c15d6,.text,build/u/src/libultra/os/probetlb.o +c45e0a5f92ba1c4e029dcf1d9c50bf3e,.text,build/u/src/libultra/os/recvmesg.o +3d721e89d9f9ceb264e931c13e527a70,.text,build/u/src/libultra/os/resetglobalintmask.o +67c92d936ac65b2220e17cba53fd244d,.text,build/u/src/libultra/os/sendmesg.o +cd2e88f4c76e09f0fad2ceb5bf92e05d,.text,build/u/src/libultra/os/setcompare.o +486cd5a5d3f68e6fae27d8da1f754975,.text,build/u/src/libultra/os/seteventmesg.o +8710281ee340a113c37270228b257a08,.text,build/u/src/libultra/os/setfpccsr.o +49304376615289609d51d730c3ad7130,.text,build/u/src/libultra/os/sethwinterrupt.o +c41e8a0ca288afb2c4bc9f1ab8576819,.text,build/u/src/libultra/os/setintmask.o +b0ea7f017b07c4519af0dc8b87d35af6,.rodata,build/u/src/libultra/os/setintmask.o +2274b1a5d0754f6dc81c11e147b1b085,.text,build/u/src/libultra/os/setsr.o +6822ce1844454aa29f879fc49f822795,.text,build/u/src/libultra/os/setthreadpri.o +c008a3df1c804f841a5a4ae2ac161207,.text,build/u/src/libultra/os/settimer.o +f6a47b85d84ec02a57f93aa80a96c9b6,.text,build/u/src/libultra/os/startthread.o +0f8072c062db49b74a33d1b48c51fa9a,.text,build/u/src/libultra/os/stopthread.o +e02b0a025ee1fdb051b73f5ee7eb808a,.text,build/u/src/libultra/os/thread.o +cf80f1d60d1dfb180a2977471f33d8c6,.data,build/u/src/libultra/os/thread.o +db3ba28a51babc6b665360b9d517be34,.text,build/u/src/libultra/os/timerintr.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/libultra/os/timerintr.o +0abd5756c9af4cc7d9e854bd5758d51d,.text,build/u/src/libultra/os/unmaptlb.o +4034d1667e7d6e73fb107a1ddedd5b6a,.text,build/u/src/libultra/os/virtualtophysical.o +07a49964cea0054e6ab32c36eef4789e,.text,build/u/src/libultra/os/writebackdcache.o +9792c417bd1362e4948ffe907e3df549,.text,build/u/src/libultra/os/writebackdcacheall.o +fa5f705895f9564f1fdf8793596227e9,.text,build/u/src/libultra/os/yieldthread.o +d48fcad03cc89af6014f80ba4e1ed812,.text,build/u/src/libultrare/audio/drvrNew.o +14377e700479692e77566966c88460c4,.data,build/u/src/libultrare/audio/drvrNew.o +e412d9e7605c5f68eae3b8544e025948,.rodata,build/u/src/libultrare/audio/drvrNew.o +3eb0c0fc4c35080577dadfc2d110da80,.text,build/u/src/libultrare/audio/env.o +7a21b828bcec1a23dee0e649a0b3a4d2,.data,build/u/src/libultrare/audio/env.o +b68202d30fde29325dd35dd59d690bf0,.rodata,build/u/src/libultrare/audio/env.o +bd734b2a8e0fd41edd470230d690bb04,.text,build/u/src/libultrare/audio/reverb.o +f7611bc5c17b95e3482dfc0368b1238b,.rodata,build/u/src/libultrare/audio/reverb.o +c58e24b5cfc920eee515fa5243968f4c,.text,build/u/src/libultrare/io/aisetnextbuf.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/libultrare/io/aisetnextbuf.o +c650260fbac43415c27a13072b526616,.text,build/u/src/libultrare/io/conteeplongread.o +c650260fbac43415c27a13072b526616,.text,build/u/src/libultrare/io/conteeplongwrite.o +a4224a3223f8e2f2107b1968352df561,.text,build/u/src/libultrare/io/conteepprobe.o +167b3626112a129f6248a6b1b6fcb737,.text,build/u/src/libultrare/io/conteepread.o +2c674df3b14c575b800cd23d9f6b584d,.text,build/u/src/libultrare/io/conteepwrite.o +e84bd9145b147abec0296706cdb56a9f,.text,build/u/src/libultrare/io/contramread.o +d01fcfb1891f8b8d0b906acc558ba866,.text,build/u/src/libultrare/io/contramwrite.o +88dced237350bfec0070f87bbe9599a3,.text,build/u/src/libultrare/io/contreaddata.o +9a933fb4e771941cf6f6b1f8e7dc0a75,.text,build/u/src/libultrare/io/controller.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/libultrare/io/controller.o +aa2d237dba78355e58df07d7d9796ecf,.text,build/u/src/libultrare/io/devmgr.o +c7e6ddaebf17a5dec79f7ac052911c3a,.rodata,build/u/src/libultrare/io/devmgr.o +ffa4216b496969d924f0852b480ad16c,.text,build/u/src/libultrare/io/epirawdma.o +0e5419ba1db973af156bd305c485cd52,.text,build/u/src/libultrare/io/epirawwrite.o +263b2c6a4c732ab3bbeb40190f0f596e,.text,build/u/src/libultrare/io/leodiskinit.o +c00f3042799d83c7caa9eac0f4ea7745,.text,build/u/src/libultrare/io/leointerrupt.o +84251e620a086348b5a1fa9b08c04103,.text,build/u/src/libultrare/io/pfsinit.o +1171648cc4ba0e5ff3e92cf5fc27ca7c,.text,build/u/src/libultrare/io/pfsisplug.o +188bf4004a773b301a35b350f9fc9864,.text,build/u/src/libultrare/io/pimgr.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/src/libultrare/io/pimgr.o +a2b0dbe0a20c3f4ad442b811be14510c,.text,build/u/src/libultrare/io/sptask.o +0aed066aa325407f3a0d5056a555c98b,.text,build/u/src/libultrare/io/vi.o +85a1198b02e1d20563c0d0a13e5cd853,.data,build/u/src/libultrare/io/vi.o +694f18317ceb9653d8476c65edb8034b,.text,build/u/src/libultrare/io/vimgr.o +70bc8f4b72a86921468bf8e8441dce51,.data,build/u/src/libultrare/io/vimgr.o +2a593729e5b2ba4b36a24bb021b29e8e,.data,build/u/src/libultrare/io/vimodepallan1.o +dd56f97f00e7308f30795b74a8e97087,.data,build/u/src/libultrare/io/vitbl.o +4add8c89975755e0f8d00eb49cdc7d40,.text,build/u/src/libultrare/libc/xprintf.o +e05055aaf4a28eab5198f0b190562b6f,.data,build/u/src/libultrare/libc/xprintf.o +1936c88cbc991d93aa93bdd217b769e4,.rodata,build/u/src/libultrare/libc/xprintf.o +fc1006793c7e9d3fe40ef3fe65f023b3,.text,build/u/src/libultrare/os/destroythread.o +30105f5a9f150e22c94ad7d3c9d4e594,.text,build/u/src/libultrare/os/initialize.o +971e604c39e630a3c5b4f0d039381f82,.data,build/u/src/libultrare/os/initialize.o +46288f1cf98e6b84857b9c90a2aa4450,.data,build/u/src/libultrare/ultra80069080.o +0382ca46a3288d6e0026350d51be0285,.text,build/u/src/mema.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/mema.o +f21e5f744b3e890f6888d01d3fa30186,.rodata,build/u/src/mema.o +ffb59be5f8e4ce2e682400b440ea67fc,.text,build/u/src/memp.o +51125f3585975b26997e1d958d1be315,.data,build/u/src/memp.o +577016899f32faa28940c56975dfbc10,.rodata,build/u/src/memp.o +9baf0615bc8479cbe4cc7731f04c4db8,.text,build/u/src/motor.o +9fc1c0102906fd56dab03a9a41d3d959,.text,build/u/src/music.o +8fed398f393ac0fd73bd9ca6c9f78da5,.data,build/u/src/music.o +f0e9bbd85c751a3c50e5f901e758a689,.text,build/u/src/osMapTLB.o +bb6e964831508d590c0ab981c8ea972d,.text,build/u/src/pi.o +e92b27891ce4a80638a9420e1686462c,.text,build/u/src/ramrom.o +6bdd08e2a1776366268f64cd380b565e,.text,build/u/src/random.o +dca45fee049430e0eb82fbab95852594,.data,build/u/src/random.o +2f18a8a28ba6d871e606bf3d84733b17,.text,build/u/src/rmon.o +86cceb7c08a71576068016a44e557845,.data,build/u/src/rom_header.o +9414dd746eddee59ce6bf97eca16853e,.text,build/u/src/rspboot.o +2e608563efcb2b39c34ba69075a26ba3,.text,build/u/src/sched.o +5052d2e59ba75fdce35192c3329208ed,.data,build/u/src/sched.o +7f4f9def985640140dc039da5e5901bc,.rodata,build/u/src/sched.o +5cc2b96a3af0731511e13116941881aa,.text,build/u/src/snd.o +3164fd3deaf61a47e826f42ac0cb0ef6,.data,build/u/src/snd.o +3b5d3c7d207e37dceeedd301e35e2e58,.rodata,build/u/src/snd.o +6793e62c6c048c8076ef1ba01c811afd,.text,build/u/src/speed_graph.o +6ba2212493a6e0df179e18776ec91a2d,.data,build/u/src/speed_graph.o +2d3c6d36b6aa6dc8cf369460a1f7f475,.rodata,build/u/src/speed_graph.o +feac6448e0cd21ecef02216d2e4382e3,.text,build/u/src/sprintf.o +9daa52f61a66d99824ff1819e30eaf45,.text,build/u/src/str.o +bf1dbfbf68152d4c12b0dcc7cfccdead,.text,build/u/src/tlb_hardwire.o +841fed8cf334353719e7cc62a23d6f8c,.text,build/u/src/tlb_manage.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/tlb_manage.o +edd570cb162c22ef99374ad4eaf2d997,.text,build/u/src/tlb_random.o +dca45fee049430e0eb82fbab95852594,.data,build/u/src/tlb_random.o +c697a3b4db3fe4c2f4f3b6b61c59f805,.text,build/u/src/tlb_resolve.o +66613e43d8d4226c3561d2b76981656a,.text,build/u/src/token.o +517c562ef69db9b195e72398e86df2e8,.data,build/u/src/token.o +a42d56e2d5c450108bc25059309dde97,.rodata,build/u/src/token.o +88df3b22747a0669007e5dc45395eb36,.text,build/u/src/usb.o +4a00906b1a7d23084c88deff78bc4925,.data,build/u/src/usb.o +837b3153b8a25676f66f18514229a9d8,.text,build/u/src/vi.o +7fd04b9095026981c5f4433e9eb658c4,.data,build/u/src/vi.o +3890dff1c2a5913504508f6cf5c6760b,.rodata,build/u/src/vi.o +f9eaf36fba2d9fbb6e34367e1d5c575b,.text,build/u/src/_start.o diff --git a/scripts/generate_prop_model_c.py b/scripts/generate_prop_model_c.py index 2277db86..08a95e8d 100755 --- a/scripts/generate_prop_model_c.py +++ b/scripts/generate_prop_model_c.py @@ -6,7 +6,7 @@ Parses N64 binary model files (.bin) and generates C source code (Model.c). Binary Format: Offset 0x00: Switches array (if numSwitches > 0) - Offset 0x??: Texture table (ModelFileTextures[numtextures]) + Offset 0x??: Texture table (ModelFileTextures[numtextures]) Offset 0x??: RootNode and complete ModelNode tree with embedded data All pointers in the binary are stored as offsets from base address 0x05000000. @@ -104,7 +104,7 @@ class BinaryModelParser: self.switches = [] self.base_address = BASE_ADDRESS self.image_map = image_map or {} - + def to_file_offset(self, addr: int) -> int: """Convert base-relative address to file offset. Returns -1 for NULL (0x00000000)""" if addr == 0: @@ -112,7 +112,7 @@ class BinaryModelParser: if addr < self.base_address: return addr # Already a file offset return addr - self.base_address - + def offset_to_ptr_name(self, offset: int) -> str: """Convert binary offset to C pointer/symbol name""" if offset == 0: @@ -122,14 +122,14 @@ class BinaryModelParser: return f"&ModelNode_0x{offset:03x}" # It's some data structure return f"0x{offset:08x}" # Will need resolving later - + def parse(self): """Parse the complete binary model file""" num_switches = self.metadata.get('num_switches', 0) num_textures = self.metadata['num_textures'] - + offset = 0 - + # Parse switches array (array of u32 pointers) if num_switches > 0: for i in range(num_switches): @@ -141,7 +141,7 @@ class BinaryModelParser: switch_offset = 0 self.switches.append(switch_offset) offset += 4 - + # Parse texture table (12 bytes per texture) for i in range(num_textures): tex = ModelTexture( @@ -156,15 +156,15 @@ class BinaryModelParser: ) self.textures.append(tex) offset += 12 - + # Parse ModelNode tree (starts after textures) # RootNode is at this offset root_offset = offset self.parse_node_tree(root_offset) - + # Second pass: parse structures referenced by pointers but not in ModelNode tree self.parse_referenced_structures() - + return { 'switches': self.switches, 'textures': self.textures, @@ -172,12 +172,12 @@ class BinaryModelParser: 'referenced_data': self.referenced_data, 'root_offset': root_offset } - + def parse_node_tree(self, node_offset: int): """Recursively parse ModelNode tree structure""" if node_offset in self.nodes: return - + # Parse ModelNode structure (24 bytes) # typedef struct ModelNode { # u8 UseAdditionalMatrices; /*0x00 - high byte of opcode field, used in chr models*/ @@ -190,7 +190,7 @@ class BinaryModelParser: # struct ModelNode *Child; /*0x14*/ # } ModelNode; # Note: Officially it's "u16 Opcode" but chr models use both bytes separately - + opcode_u16 = read_u16(self.data, node_offset) opcode_flags = (opcode_u16 >> 8) & 0xFF # High byte opcode = opcode_u16 & 0xFF # Low byte @@ -199,7 +199,7 @@ class BinaryModelParser: next_offset = self.to_file_offset(read_u32(self.data, node_offset + 12)) prev_offset = self.to_file_offset(read_u32(self.data, node_offset + 16)) child_offset = self.to_file_offset(read_u32(self.data, node_offset + 20)) - + # Create node node = ModelNode( offset=node_offset, @@ -211,33 +211,33 @@ class BinaryModelParser: prev_offset=prev_offset, child_offset=child_offset ) - + self.nodes[node_offset] = node - + # Parse the data structure for this opcode if data_offset > 0: node.data = self.parse_node_data(node.opcode, data_offset) - + # Recursively parse linked nodes (but not parent to avoid cycles) if child_offset > 0: self.parse_node_tree(child_offset) if next_offset > 0: self.parse_node_tree(next_offset) - + def parse_referenced_structures(self): """Parse structures referenced by pointers that aren't in ModelNode tree""" # Collect all referenced offsets referenced_offsets = set() - + for node_offset, node in self.nodes.items(): if not node.data: continue - + dtype = node.data.get('_type') - + # HeaderRecord.FirstGroup actually points to a ModelNode (not directly to GroupRecord) # The ModelNode is already in the tree, so no need to parse as referenced structure - + # LODRecord.Children point to ModelNodes with data if dtype == 'LODRecord': for i in range(3): @@ -248,22 +248,22 @@ class BinaryModelParser: # Determine opcode from child node ref_opcode = child_node.opcode referenced_offsets.add((child_node.data_offset, ref_opcode)) - + # Parse any referenced structures that don't already have a ModelNode for ref_offset, ref_opcode in referenced_offsets: # Check if this offset already has a node pointing to it already_exists = any( - node.data_offset == ref_offset + node.data_offset == ref_offset for node in self.nodes.values() ) - + if not already_exists and ref_offset not in self.referenced_data: # Parse and store as a standalone data structure (not a ModelNode) self.referenced_data[ref_offset] = self.parse_node_data(ref_opcode, ref_offset) - + def parse_node_data(self, opcode: int, data_offset: int) -> Dict: """Parse the data structure for a specific opcode""" - + if opcode == 2: # GROUP return self.parse_group_record(data_offset) elif opcode == 9: # BSP @@ -280,7 +280,7 @@ class BinaryModelParser: return self.parse_gunfire_record(data_offset) elif opcode == 22: # DLPRIMARY return self.parse_dlprimary_record(data_offset) - elif opcode == 24: # DLCOLLISION + elif opcode == 24: # DLCOLLISION return self.parse_dlcollision_record(data_offset) elif opcode == 4: # DL return self.parse_dl_record(data_offset) @@ -295,7 +295,7 @@ class BinaryModelParser: # Add more as needed else: return {'_raw_offset': data_offset} - + def parse_group_record(self, offset: int) -> Dict: """Parse ModelRoData_GroupRecord (28 bytes)""" return { @@ -310,7 +310,7 @@ class BinaryModelParser: 'child_group_offset': self.to_file_offset(read_u32(self.data, offset + 20)), 'bounding_volume_radius': read_float(self.data, offset + 24), } - + def parse_bbox_record(self, offset: int) -> Dict: """Parse ModelRoData_BoundingBoxRecord (28 bytes)""" return { @@ -323,10 +323,10 @@ class BinaryModelParser: 'zmin': read_float(self.data, offset + 20), 'zmax': read_float(self.data, offset + 24), } - + def parse_lod_record(self, offset: int) -> Dict: """Parse ModelRoData_LODRecord (16 bytes) - + Structure (from bondtypes.h): f32 MinDistance; // 0x0 f32 MaxDistance; // 0x4 @@ -344,10 +344,10 @@ class BinaryModelParser: 'reserved': read_u16(self.data, offset + 0xE), '_binary_size': 16, # Actual size in binary } - + def parse_dlcollision_record(self, offset: int) -> Dict: """Parse ModelRoData_DisplayList_CollisionRecord (32 bytes) - + Structure (from bondtypes.h): Gfx *Primary; // 0x00 - Primary display list Gfx *Secondary; // 0x04 - Secondary display list (optional) @@ -371,16 +371,16 @@ class BinaryModelParser: model_type = read_s16(self.data, offset + 0x18) rw_data_index = read_u16(self.data, offset + 0x1A) # base_addr at 0x1C is runtime pointer, not needed - + # Parse vertex arrays vertices = self.parse_vertex_array(vertices_offset, num_vertices) if vertices_offset > 0 else [] collision_vertices = self.parse_vertex_array(collision_vertices_offset, num_collision_vertices) if collision_vertices_offset > 0 else [] point_usage = self.parse_point_usage(point_usage_offset, num_vertices) if point_usage_offset > 0 else [] - + # Parse GDL commands primary_gfx = self.parse_gfx_list(primary_offset, vertices_offset) if primary_offset > 0 else [] secondary_gfx = self.parse_gfx_list(secondary_offset, vertices_offset) if secondary_offset > 0 else [] - + return { '_type': 'DisplayListCollisionRecord', 'primary_offset': primary_offset, @@ -396,7 +396,7 @@ class BinaryModelParser: 'primary_gfx': primary_gfx, 'secondary_gfx': secondary_gfx, } - + def parse_dl_record(self, offset: int) -> Dict: """Parse ModelRoData_DisplayListRecord (19 bytes logical, 20 with padding)""" return { @@ -405,7 +405,7 @@ class BinaryModelParser: 'secondary_offset': self.to_file_offset(read_u32(self.data, offset + 4)), # More fields... } - + def parse_bsp_record(self, offset: int) -> Dict: """Parse ModelRoData_BSPRecord (36 bytes total)""" return { @@ -421,7 +421,7 @@ class BinaryModelParser: 'reserved': read_s16(self.data, offset + 32), 'rw_data_index': read_u16(self.data, offset + 34), } - + def parse_switch_record(self, offset: int) -> Dict: """Parse ModelRoData_SwitchRecord (8 bytes)""" return { @@ -430,10 +430,10 @@ class BinaryModelParser: 'rw_data_index': read_u16(self.data, offset + 4), 'reserved': read_u16(self.data, offset + 6), } - + def parse_interlink_record(self, offset: int) -> Dict: """Parse ModelRoData_InterlinkageRecord (28 bytes) - + Structure (from bondtypes.h): coord3d pos; // 0x0 - position (3 floats) u32 unknown1; // 0xC @@ -452,7 +452,7 @@ class BinaryModelParser: 'unknown3': read_u32(self.data, offset + 0x14), 'scale': read_float(self.data, offset + 0x18), } - + def parse_groupsimple_record(self, offset: int) -> Dict: """Parse ModelRoData_GroupSimpleRecord (20 bytes)""" return { @@ -464,22 +464,23 @@ class BinaryModelParser: 'group2': read_u16(self.data, offset + 14), 'bounding_volume_radius': read_float(self.data, offset + 16), } - + def parse_header_record(self, offset: int) -> Dict: """Parse ModelRoData_HeaderRecord (16 bytes)""" return { '_type': 'HeaderRecord', - 'model_type': read_u32(self.data, offset), + 'anim_part': read_u16(self.data, offset), + 'matrix_index': read_s16(self.data, offset + 2), 'first_group_offset': self.to_file_offset(read_u32(self.data, offset + 4)), 'group1': read_u16(self.data, offset + 8), 'group2': read_u16(self.data, offset + 10), 'rw_data_index': read_u16(self.data, offset + 12), 'reserved': read_u16(self.data, offset + 14), } - + def parse_head_placeholder_record(self, offset: int) -> Dict: """Parse ModelRoData_HeadPlaceholderRecord (4 bytes with padding) - + Structure (from bondtypes.h): u16 RwDataIndex; // 0x0 u16 padding; // 0x2 (implicit padding to 4 bytes) @@ -490,10 +491,10 @@ class BinaryModelParser: 'rw_data_index': read_u16(self.data, offset), 'padding': read_u16(self.data, offset + 2), } - + def parse_shadow_record(self, offset: int) -> Dict: """Parse ModelRoData_ShadowRecord (32 bytes) - + Structure (from bondtypes.h): coord2d pos; // 0x0 (2 floats) coord2d size; // 0x8 (2 floats) @@ -505,10 +506,10 @@ class BinaryModelParser: """ image_ptr = read_u32(self.data, offset + 0x10) image_offset = self.to_file_offset(image_ptr) if image_ptr != 0 else 0 - + header_ptr = read_u32(self.data, offset + 0x14) header_offset = self.to_file_offset(header_ptr) if header_ptr != 0 else 0 - + return { '_type': 'ShadowRecord', 'pos_x': read_float(self.data, offset + 0x0), @@ -520,10 +521,10 @@ class BinaryModelParser: 'scale': read_float(self.data, offset + 0x18), 'base_addr': read_u32(self.data, offset + 0x1C), } - + def parse_gunfire_record(self, offset: int) -> Dict: """Parse ModelRoData_GunfireRecord (40 bytes) - + Structure (from bondtypes.h): coord3d Offset; // 0x0 (3 floats) coord3d Size; // 0xC (3 floats) @@ -536,7 +537,7 @@ class BinaryModelParser: """ image_ptr = read_u32(self.data, offset + 0x18) image_offset = self.to_file_offset(image_ptr) if image_ptr != 0 else 0 - + return { '_type': 'GunfireRecord', 'offset_x': read_float(self.data, offset + 0x0), @@ -552,10 +553,10 @@ class BinaryModelParser: 'base_addr': read_u32(self.data, offset + 0x24), '_binary_size': 40, } - + def parse_dlprimary_record(self, offset: int) -> Dict: """Parse ModelRoData_DisplayListPrimaryRecord (16 bytes) - + Structure (from bondtypes.h): s32 numVertices; // 0x0 Vertex *Vertices; // 0x4 @@ -567,10 +568,10 @@ class BinaryModelParser: vertices_ptr = read_u32(self.data, offset + 4) primary_ptr = read_u32(self.data, offset + 8) base_addr = read_u32(self.data, offset + 12) - + vertices_offset = self.to_file_offset(vertices_ptr) if vertices_ptr != 0 else 0 primary_offset = self.to_file_offset(primary_ptr) if primary_ptr != 0 else 0 - + # Parse vertex array if present vertices = [] if vertices_offset > 0 and num_vertices > 0: @@ -588,10 +589,10 @@ class BinaryModelParser: b=read_u8(self.data, v_offset + 14), a=read_u8(self.data, v_offset + 15) )) - + # Parse Gfx array primary_gfx, _ = parse_gfx_array(self.data, primary_offset, self.base_address) if primary_offset > 0 else ([], 0) - + return { '_type': 'DisplayListPrimaryRecord', 'num_vertices': num_vertices, @@ -602,28 +603,28 @@ class BinaryModelParser: 'primary_gfx': primary_gfx, '_binary_size': 16, } - + def parse_dl_record(self, offset: int) -> Dict: """Parse ModelRoData_DisplayListRecord (19 bytes)""" primary_offset = self.to_file_offset(read_u32(self.data, offset)) secondary_offset = self.to_file_offset(read_u32(self.data, offset + 4)) vertices_offset = self.to_file_offset(read_u32(self.data, offset + 12)) num_vertices = read_u16(self.data, offset + 16) - + # Extract vertex array if present vertices = [] if vertices_offset > 0 and num_vertices > 0: vertices = self.parse_vertex_array(vertices_offset, num_vertices) - + # Extract Gfx display lists if present primary_gfx = [] if primary_offset > 0: primary_gfx = self.parse_gfx_list(primary_offset, vertices_offset) - + secondary_gfx = [] if secondary_offset > 0: secondary_gfx = self.parse_gfx_list(secondary_offset, vertices_offset) - + return { '_type': 'DisplayListRecord', 'primary_offset': primary_offset, @@ -636,7 +637,7 @@ class BinaryModelParser: 'primary_gfx': primary_gfx, 'secondary_gfx': secondary_gfx, } - + def parse_vertex_array(self, offset: int, count: int) -> List[Vertex]: """Parse Vertex array (16 bytes per vertex)""" vertices = [] @@ -656,44 +657,44 @@ class BinaryModelParser: ) vertices.append(v) return vertices - + def parse_point_usage(self, offset: int, count: int) -> List[int]: """Parse point usage array (s16[])""" return [read_s16(self.data, offset + i * 2) for i in range(count)] - + def parse_gfx_list(self, offset: int, vertices_offset: int = None) -> List[str]: """Parse Gfx display list commands (8 bytes each) until final end marker Returns decoded command strings ready for C output - + vertices_offset: File offset where vertex array starts (for resolving vertex addresses) """ if offset <= 0 or offset >= len(self.data): return [] - + # Prepare vertex array name for address resolution vtx_array_name = f"Vertex_0x{vertices_offset:03x}" if vertices_offset else None - + gfx_cmds = [] while offset + 8 <= len(self.data): w0 = read_u32(self.data, offset) w1 = read_u32(self.data, offset + 4) - + # Decode command to macro format with image_map for texture lookup decoded = decode_gfx_command(w0, w1, vtx_array_name, vertices_offset, self.image_map) gfx_cmds.append(decoded) - + opcode = (w0 >> 24) & 0xFF - + # Stop at B8 (final end marker), but continue past E7 (initial marker) if opcode == 0xB8: break - + offset += 8 - + # Safety limit to prevent infinite loops if len(gfx_cmds) > 10000: break - + return gfx_cmds @@ -718,15 +719,15 @@ def load_image_map(): def parse_metadata_files(prop_name: str) -> Optional[Dict]: """Parse ModelFileHeader.inc.c and propFileRecord.inc.c""" prop_dir = Path("assets/obseg/prop") / prop_name - + header_file = prop_dir / "ModelFileHeader.inc.c" record_file = prop_dir / "propFileRecord.inc.c" - + if not header_file.exists() or not record_file.exists(): return None - + metadata = {} - + # Parse ModelFileHeader.inc.c with open(header_file, 'r') as f: content = f.read() @@ -738,14 +739,14 @@ def parse_metadata_files(prop_name: str) -> Optional[Dict]: metadata['num_switches'] = int(match.group(5), 0) metadata['bounding_radius'] = float(match.group(7)) metadata['num_textures'] = int(match.group(9), 0) # 0 base auto-detects hex/decimal - + # Parse propFileRecord.inc.c with open(record_file, 'r') as f: content = f.read() match = re.search(r'PROPFILERECORD\s*\(\s*\w+\s*,\s*([\d.]+)\s*\)', content) if match: metadata['scale'] = float(match.group(1)) - + return metadata if 'num_textures' in metadata else None @@ -755,25 +756,25 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a Returns the macro call as a string (e.g., "gsDPPipeSync()"). Falls back to raw hex format if command is unknown. image_map: dict mapping texture_id -> IMAGE_NAME for G_SETTEX - + Reference: include/PR/gbi.h - + vertex_array_name: Name of the vertex array (e.g., "Vertex_0x098") vertex_array_offset: File offset where vertex array starts """ opcode = (w0 >> 24) & 0xFF - + # Helper to resolve segment addresses to symbol names def resolve_address(addr): # All segment addresses (0xXX000000 format) are runtime-resolved # Leave them as raw hex for the game engine to resolve # The segments (3, 4, 5, etc.) are set up at runtime return f"0x{addr:08X}" - + # Helper to extract bit fields using _SHIFTR logic def extract_bits(value, shift, width): return (value >> shift) & ((1 << width) - 1) - + # G_IM_FMT_ constants from gbi.h FMT_NAMES = { 0: "G_IM_FMT_RGBA", @@ -782,7 +783,7 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a 3: "G_IM_FMT_IA", 4: "G_IM_FMT_I", } - + # G_IM_SIZ_ constants from gbi.h SIZ_NAMES = { 0: "G_IM_SIZ_4b", @@ -791,7 +792,7 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a 3: "G_IM_SIZ_32b", 5: "G_IM_SIZ_DD", } - + # RDP Sync commands (no parameters) if opcode == 0xE7: return "gsDPPipeSync()" @@ -813,17 +814,17 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a minlevel = extract_bits(w1, 24, 8) detail_id = extract_bits(w1, 12, 12) texture_id = extract_bits(w1, 0, 12) - + # Map type value to TextureTypes enum type_names = [ "TEXTURETYPE_LOD", - "TEXTURETYPE_DETAIL", + "TEXTURETYPE_DETAIL", "TEXTURETYPE_MIPMAP", "TEXTURETYPE_TILE", "TEXTURETYPE_TILE_PRESWAPPED" ] type_str = type_names[type_val] if type_val < len(type_names) else str(type_val) - + # Look up IMAGE enum from texture_id if image_map and texture_id in image_map: image_name = image_map[texture_id] @@ -831,14 +832,14 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a else: # Fallback to raw texture_id if not found in map return f"gsSPUseTexture({cms}, {cmt}, {tile}, {shifts}, {shiftt}, {type_str}, {minlevel}, {detail_id}, 0x{texture_id:03X})" - + elif opcode == 0x00: return "gsDPNoOp()" - + # gsSPEndDisplayList (0xB8 or 0xDF depending on mode) elif opcode == 0xB8 or opcode == 0xDF: return "gsSPEndDisplayList()" - + # gsSPMatrixGE (0x01 G_MTX) - GoldenEye matrix command # Format: w0 = cmd(24-31) | params(16-23) | sizeof(Mtx)(0-15), w1 = address # params bits: projection(0) | load(1) | push(2) @@ -847,27 +848,27 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a size = extract_bits(w0, 0, 16) addr = w1 addr_str = resolve_address(addr) - + # Decode matrix parameters param_str = "" if params & 0x01: param_str = "G_MTX_PROJECTION" else: param_str = "G_MTX_MODELVIEW" - + if params & 0x02: param_str += " | G_MTX_LOAD" else: param_str += " | G_MTX_MUL" - + if params & 0x04: param_str += " | G_MTX_PUSH" else: param_str += " | G_MTX_NOPUSH" - + # Output raw bytes with decoded comment - return f"gsSPMatrixGE({addr_str}, {param_str})" - + return f"gsSPMatrix({addr_str}, {param_str})" + elif opcode == 0x04: # RARE vertex format: w0 = cmd(24-31) | encoded(16-23) | sizeof(Vtx)*n(0-15) # encoded byte format: ((v0+n) << 1) | flag @@ -875,24 +876,14 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a encoded_value = extract_bits(w0, 16, 8) length = extract_bits(w0, 0, 16) flag = encoded_value & 1 - v0_plus_n = encoded_value >> 1 - n = length // 16 # sizeof(Vtx) = 16 - v0 = v0_plus_n - n + n = encoded_value >> 4 + #n = length // 16 # sizeof(Vtx) = 16 + v0 = encoded_value & 15 addr = w1 addr_str = resolve_address(addr) - return f"gsSPVertexGE({addr_str}, {n}, {v0}, {flag})" - v00 = extract_bits(w0, 16, 8) // 2 - v01 = extract_bits(w0, 8, 8) // 2 - v02 = extract_bits(w0, 0, 8) // 2 - flag0 = 0 # Simplified - actual flag extraction is complex - - v10 = extract_bits(w1, 16, 8) // 2 - v11 = extract_bits(w1, 8, 8) // 2 - v12 = extract_bits(w1, 0, 8) // 2 - flag1 = 0 - - return f"gsSP2Triangles({v00}, {v01}, {v02}, {flag0}, {v10}, {v11}, {v12}, {flag1})" - + return f"gsSPVertex({addr_str}, {n+1}, {v0})" + + # G_TRI4 (0xB1) - GoldenEye extension packing 4 triangles with 4-bit vertex indices # gsSP4Triangles(x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4) elif opcode == 0xB1: @@ -901,7 +892,7 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a z2 = extract_bits(w0, 4, 4) z3 = extract_bits(w0, 8, 4) z4 = extract_bits(w0, 12, 4) - + # Extract from w1: y4(28-31) | x4(24-27) | y3(20-23) | x3(16-19) | y2(12-15) | x2(8-11) | y1(4-7) | x1(0-3) x1 = extract_bits(w1, 0, 4) y1 = extract_bits(w1, 4, 4) @@ -911,9 +902,13 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a y3 = extract_bits(w1, 20, 4) x4 = extract_bits(w1, 24, 4) y4 = extract_bits(w1, 28, 4) - + + # If z3 and z4 are both zero, produce a shorter gsSP2Triangles macro as requested + if x3 == 0 and x4 == 0 and y3 == 0 and y4 == 0 and z3 == 0 and z4 == 0: + return f"gsSP2Triangles({x1}, {y1}, {z1},{x1}, {x2}, {y2}, {z2}, {x2})" + return f"gsSP4Triangles({x1}, {y1}, {z1}, {x2}, {y2}, {z2}, {x3}, {y3}, {z3}, {x4}, {y4}, {z4})" - + # gsSP1Triangle (0x05 in F3DEX_GBI_2, 0xBF in F3DEX/classic) elif opcode == 0x05: v0 = extract_bits(w1, 16, 8) // 2 @@ -921,15 +916,15 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a v2 = extract_bits(w1, 0, 8) // 2 flag = 0 return f"gsSP1Triangle({v0}, {v1}, {v2}, {flag})" - + # 0xBF - F3DEX gsSP1Triangle (GoldenEye version without flag rotation) elif opcode == 0xBF: - v0 = extract_bits(w1, 16, 8) // 2 - v1 = extract_bits(w1, 8, 8) // 2 - v2 = extract_bits(w1, 0, 8) // 2 + v0 = extract_bits(w1, 16, 8) // 10 + v1 = extract_bits(w1, 8, 8) // 10 + v2 = extract_bits(w1, 0, 8) // 10 flag = 0 - return f"gsSP1TriangleGE({v0}, {v1}, {v2}, {flag})" - + return f"gsSP1Triangle({v0}, {v1}, {v2}, {flag})" + # gsSPTexture (0xD7 in F3DEX_GBI_2, 0xBB in classic) elif opcode == 0xD7 or opcode == 0xBB: # w0 = cmd(24-31) | bowtie(16-23) | level(11-13) | tile(8-10) | on(0-7) @@ -940,26 +935,26 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a on = extract_bits(w0, 0, 8) s = extract_bits(w1, 16, 16) t = extract_bits(w1, 0, 16) - + # Use gsSPTextureL if bowtie != 0, otherwise gsSPTexture if bowtie != 0: return f"gsSPTextureL({s}, {t}, {level}, 0x{bowtie:02X}, {tile}, {on})" else: return f"gsSPTexture({s}, {t}, {level}, {tile}, {on})" - + # gsDPSetCombineMode / gsDPSetCombineLERP (0xFC) elif opcode == 0xFC: # Complex color combiner - show as raw for now muxs0 = w0 & 0xFFFFFF muxs1 = w1 return f"gsDPSetCombine(0x{muxs0:06X}, 0x{muxs1:08X})" - + # gsSPSetOtherMode_H (0xE3 in F3DEX_GBI_2, 0xBA in classic) elif opcode == 0xE3 or opcode == 0xBA: sft = extract_bits(w0, 8, 8) length = extract_bits(w0, 0, 8) data = w1 - + # Decode common high-level macros if sft == 16 and length == 1: # gsDPSetTextureLOD @@ -983,33 +978,33 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a return "gsDPSetTextureFilter(G_TF_BILERP)" elif data == 0x00003000: return "gsDPSetTextureFilter(G_TF_AVERAGE)" - + # Fallback to generic macro return f"gsSPSetOtherMode(G_SETOTHERMODE_H, {sft}, {length}, 0x{data:08X})" - + # gsSPSetOtherMode_L (0xE2 in F3DEX_GBI_2, 0xB9 in classic) elif opcode == 0xE2 or opcode == 0xB9: sft = extract_bits(w0, 8, 8) length = extract_bits(w0, 0, 8) data = w1 return f"gsSPSetOtherMode(G_SETOTHERMODE_L, {sft}, {length}, 0x{data:08X})" - + # gsSPGeometryMode (0xD9 in F3DEX_GBI_2) elif opcode == 0xD9: clearbits = (~w0) & 0xFFFFFF setbits = w1 return f"gsSPGeometryMode(0x{clearbits:08X}, 0x{setbits:08X})" - + # gsSPSetGeometryMode (0xB7 classic, 0xD9 F3DEX2 variant) elif opcode == 0xB7: mode = w1 return f"gsSPSetGeometryMode(0x{mode:08X})" - + # gsSPClearGeometryMode (0xB6) elif opcode == 0xB6: mode = w1 return f"gsSPClearGeometryMode(0x{mode:08X})" - + # gsDPSetPrimColor (0xFA) elif opcode == 0xFA: m = extract_bits(w0, 8, 8) @@ -1019,7 +1014,7 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a b = extract_bits(w1, 8, 8) a = extract_bits(w1, 0, 8) return f"gsDPSetPrimColor({m}, {l}, {r}, {g}, {b}, {a})" - + # gsDPSetEnvColor (0xFB) elif opcode == 0xFB: r = extract_bits(w1, 24, 8) @@ -1027,7 +1022,7 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a b = extract_bits(w1, 8, 8) a = extract_bits(w1, 0, 8) return f"gsDPSetEnvColor({r}, {g}, {b}, {a})" - + # gsDPSetTextureImage (0xFD) elif opcode == 0xFD: fmt = extract_bits(w0, 21, 3) @@ -1037,7 +1032,7 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a fmt_name = FMT_NAMES.get(fmt, f"0x{fmt:X}") siz_name = SIZ_NAMES.get(siz, f"0x{siz:X}") return f"gsDPSetTextureImage({fmt_name}, {siz_name}, {width}, 0x{addr:08X})" - + # gsDPSetTile (0xF5) - output as raw bytes due to complex parameter encoding elif opcode == 0xF5: fmt = extract_bits(w0, 21, 3) @@ -1057,7 +1052,7 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a fmt_name = FMT_NAMES.get(fmt, f"0x{fmt:X}") siz_name = SIZ_NAMES.get(siz, f"0x{siz:X}") return f"{{{{ 0x{w0:08X}, 0x{w1:08X} }}}} /* gsDPSetTile({fmt_name}, {siz_name}, {line}, {tmem}, {tile}, {palette}, {ct}, {maskt}, {shiftt}, {cs}, {masks}, {shifts}) */" - + # gsDPLoadBlock (0xF3) elif opcode == 0xF3: uls = extract_bits(w0, 12, 12) @@ -1066,7 +1061,7 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a lrs = extract_bits(w1, 12, 12) dxt = extract_bits(w1, 0, 12) return f"gsDPLoadBlock({tile}, {uls}, {ult}, {lrs}, {dxt})" - + # gsDPSetTileSize (0xF2) - output as raw bytes due to precision issues elif opcode == 0xF2: uls = extract_bits(w0, 12, 12) @@ -1075,33 +1070,33 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a lrs = extract_bits(w1, 12, 12) lrt = extract_bits(w1, 0, 12) return f"{{{{ 0x{w0:08X}, 0x{w1:08X} }}}} /* gsDPSetTileSize({tile}, {uls}, {ult}, {lrs}, {lrt}) */" - + # gsSPDisplayList (0xDE in F3DEX_GBI_2, 0x06 in classic) elif opcode == 0xDE or opcode == 0x06: addr = w1 return f"gsSPDisplayList(0x{addr:08X})" - + # gsSPBranchList (0xDE with different flags) # Distinguishing from DisplayList requires looking at push/nopush flag # For now, treat as DisplayList - + # gsSPMatrix (0xDA in F3DEX_GBI_2, 0x01 in classic) elif opcode == 0xDA or opcode == 0x01: params = extract_bits(w0, 0, 8) addr = w1 return f"gsSPMatrix(0x{addr:08X}, {params})" - + # gsSPPopMatrix (0xD8 in F3DEX_GBI_2, 0xBD in classic) elif opcode == 0xD8 or opcode == 0xBD: n = w1 return f"gsSPPopMatrix(G_MTX_MODELVIEW, {n})" - + # gsDPLoadTLUT (0xF0) elif opcode == 0xF0: tile = extract_bits(w1, 24, 3) count = extract_bits(w1, 14, 10) return f"gsDPLoadTLUT({tile}, {count})" - + # gsDPSetScissor (0xED) elif opcode == 0xED: mode = extract_bits(w0, 0, 2) @@ -1110,7 +1105,7 @@ def decode_gfx_command(w0: int, w1: int, vertex_array_name: str = None, vertex_a lrx = extract_bits(w1, 12, 12) lry = extract_bits(w1, 0, 12) return f"gsDPSetScissor(G_SC_NON_INTERLACE, {ulx}, {uly}, {lrx}, {lry})" - + # Unknown command - output as raw hex with comment else: return "{{0x%08X, 0x%08X}} /* unknown opcode 0x%02X */" % (w0, w1, opcode) @@ -1120,42 +1115,42 @@ def parse_gfx_array(data: bytes, offset: int, base_addr: int) -> Tuple[List[str] """Parse Gfx display list commands until end marker (0xB8 or 0xDF)""" if offset == 0: return [], 0 - + commands = [] pos = offset max_commands = 1000 # Safety limit to prevent infinite loops - + for _ in range(max_commands): if pos + 8 > len(data): break - + # Read Gfx command (8 bytes) w0 = read_u32(data, pos) w1 = read_u32(data, pos + 4) - + opcode = (w0 >> 24) & 0xFF - + # Decode command to macro format decoded = decode_gfx_command(w0, w1) commands.append(decoded) pos += 8 - + # Stop at B8 (gsSPEndDisplayList) or DF end markers if opcode == 0xB8 or opcode == 0xDF: break - + return commands, pos - offset def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_map: Dict, binary_data: bytes) -> str: """Generate complete Model.c source code from parsed model data""" - + switches = parsed_model['switches'] textures = parsed_model['textures'] nodes = parsed_model['nodes'] referenced_data = parsed_model.get('referenced_data', {}) root_offset = parsed_model['root_offset'] - + lines = [] lines.append('#include "bondtypes.h"') lines.append('#include "bondconstants.h"') @@ -1163,13 +1158,13 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m lines.append("") lines.append(f"#define TEXTURECOUNT {len(textures)}") lines.append("") - + # Calculate vertex counts from DisplayList nodes to generate #define statements vertex_counts = {} collision_vertex_counts = {} vertex_array_index = 0 collision_array_index = 0 - + for node_offset in sorted(nodes.keys()): node = nodes[node_offset] # DisplayListCollisionRecord (opcode 24) @@ -1188,25 +1183,25 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m if node.data.get('vertices'): vertex_counts[vertex_array_index] = len(node.data['vertices']) vertex_array_index += 1 - + # Generate vertex count defines for idx, count in vertex_counts.items(): lines.append(f"#define VERTEXGROUPCOUNT{idx} {count}") for idx, count in collision_vertex_counts.items(): lines.append(f"#define COLLISIONVERTEXCOUNT{idx} {count}") lines.append("") - + # Forward declarations (will be populated after structure collection) lines.append("// Forward declarations") - + # First, declare all ModelNodes for node_offset in sorted(nodes.keys()): lines.append(f"extern ModelNode ModelNode_0x{node_offset:03x};") lines.append("") - + # Placeholder for data structure forward declarations (will be filled in later) forward_decl_placeholder_index = len(lines) - + # For props with switches: generate switch array at start of file # Game code expects: filedata[0..numSwitches*4-1] = switches, then textures, then nodes if len(switches) > 0: @@ -1221,7 +1216,7 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m lines.append(f" 0x00000000, // NULL") lines.append("};") lines.append("") - + # Generate texture table lines.append("//base address is 0x05000000") if len(textures) > 0: @@ -1235,12 +1230,12 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m # Zero-sized arrays are invalid in C, so don't generate them lines.append("// No textures for this prop") lines.append("") - + # Generate ModelNode tree lines.append("// ModelNode tree") for node_offset in sorted(nodes.keys()): node = nodes[node_offset] - + # Format the opcode field - need to include both flag byte and opcode byte # In the binary it's stored as u16 big-endian: (flags << 8) | opcode # We output it as a compound literal to ensure correct byte layout @@ -1251,30 +1246,30 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m # Just the opcode for prop models (flags=0) opcode_name = f"MODELNODE_OPCODE_{OPCODES.get(node.opcode, 'UNKNOWN')}" opcode_value = opcode_name - + # Format pointers data_ptr = f"&{get_data_symbol_name(node)}" if node.data else "NULL" parent_ptr = f"&ModelNode_0x{node.parent_offset:03x}" if node.parent_offset is not None and node.parent_offset >= 0 else "NULL" next_ptr = f"&ModelNode_0x{node.next_offset:03x}" if node.next_offset is not None and node.next_offset >= 0 else "NULL" prev_ptr = f"&ModelNode_0x{node.prev_offset:03x}" if node.prev_offset is not None and node.prev_offset >= 0 else "NULL" child_ptr = f"&ModelNode_0x{node.child_offset:03x}" if node.child_offset is not None and node.child_offset >= 0 else "NULL" - + lines.append(f"ModelNode ModelNode_0x{node_offset:03x} = {{{opcode_value}, {data_ptr}, {parent_ptr}, {next_ptr}, {prev_ptr}, {child_ptr}}};") lines.append("") - + # CRITICAL: IDO compiler places structures in .data section in exact C file declaration order # We MUST output all structures sorted by their original binary offset to match the layout - + # Step 1: Collect all structures with their (file_offset, code_lines, dependencies) all_structures = [] - + # Map node offset to symbolic names for each data array node_to_vtx_name = {} node_to_colvtx_name = {} node_to_ptusage_name = {} node_to_gdl_prim_name = {} node_to_gdl_sec_name = {} - + # Create mapping from node_offset to vertex/collision array indices # This must match the indices generated in the first loop node_to_vtx_index = {} @@ -1296,20 +1291,20 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m if node.data.get('vertices'): node_to_vtx_index[node_offset] = vtx_counter vtx_counter += 1 - + # Counters for generating unique names ptusage_idx = 0 gdl_prim_idx = 0 gdl_sec_idx = 0 - + # Step 2: Process nodes to collect all structures with their offsets for node_offset in sorted(nodes.keys()): node = nodes[node_offset] if not node.data: continue - + dtype = node.data.get('_type') - + # GroupRecord structures if dtype == 'GroupRecord': struct_lines = [] @@ -1319,7 +1314,7 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {{{ox}, {oy}, {oz}}}, //origin {{x,y,z}}") struct_lines.append(f" 0x{node.data['joint_id']:X}, //JointID") mid0 = node.data['matrix_id0'] - mid1 = node.data['matrix_id1'] + mid1 = node.data['matrix_id1'] mid2 = node.data['matrix_id2'] struct_lines.append(f" 0x{mid0 & 0xFFFF:X}, //MatrixID0") struct_lines.append(f" 0x{mid1 & 0xFFFF:X}, //MatrixID1") @@ -1333,7 +1328,7 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {node.data['bounding_volume_radius']} //BoundingVolumeRadius") struct_lines.append("};") all_structures.append((node.data_offset, '\n'.join(struct_lines))) - + # BoundingBoxRecord structures elif dtype == 'BoundingBoxRecord': struct_lines = [] @@ -1346,9 +1341,9 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {{{xmin}, {xmax}, {ymin}, {ymax}, {zmin}, {zmax}}}") struct_lines.append("};") all_structures.append((node.data_offset, '\n'.join(struct_lines))) - + # Note: Padding is handled by gap detection, not added here - + # LODRecord structures elif dtype == 'LODRecord': struct_lines = [] @@ -1365,7 +1360,7 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append("};") all_structures.append((node.data_offset, '\n'.join(struct_lines))) # Note: Padding is detected and added separately - + # BSPRecord structures elif dtype == 'BSPRecord': struct_lines = [] @@ -1385,7 +1380,7 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" 0x{node.data['reserved']:X}, 0x{node.data['rw_data_index']:X} //reserved, RwDataIndex") struct_lines.append("};") all_structures.append((node.data_offset, '\n'.join(struct_lines))) - + # SwitchRecord structures elif dtype == 'SwitchRecord': struct_lines = [] @@ -1397,7 +1392,7 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" 0x{node.data['rw_data_index']:X}, 0x{node.data['reserved']:X} //RwDataIndex, reserved") struct_lines.append("};") all_structures.append((node.data_offset, '\n'.join(struct_lines))) - + # InterlinkageRecord structures (28 bytes) elif dtype == 'InterlinkageRecord': struct_lines = [] @@ -1411,7 +1406,7 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {node.data['scale']} //Scale") struct_lines.append("};") all_structures.append((node.data_offset, '\n'.join(struct_lines))) - + # GroupSimpleRecord structures (20 bytes) elif dtype == 'GroupSimpleRecord': struct_lines = [] @@ -1423,22 +1418,23 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {node.data['bounding_volume_radius']} //BoundingVolumeRadius") struct_lines.append("};") all_structures.append((node.data_offset, '\n'.join(struct_lines))) - + # HeaderRecord structures (16 bytes) elif dtype == 'HeaderRecord': struct_lines = [] struct_lines.append(f"ModelRoData_HeaderRecord HeaderRecord_0x{node.data_offset:03x} = ") struct_lines.append("{") - struct_lines.append(f" 0x{node.data['model_type']:X}, //ModelType") - # FirstGroup pointer (points to ModelNode, despite the type name in bondtypes.h) + struct_lines.append(f" 0x{node.data['anim_part']:X}, //AnimPart") + struct_lines.append(f" {node.data['matrix_index']}, //MatrixIndex") + # FirstGroup points to the first child node in the header subtree. first_group_offset = node.data.get('first_group_offset', 0) - group_ptr = f"(struct ModelRoData_GroupRecord *)&ModelNode_0x{first_group_offset:03x}" if first_group_offset > 0 else "NULL" + group_ptr = f"&ModelNode_0x{first_group_offset:03x}" if first_group_offset > 0 else "NULL" struct_lines.append(f" {group_ptr}, //FirstGroup") struct_lines.append(f" 0x{node.data['group1']:X}, 0x{node.data['group2']:X}, //Group1, Group2") - struct_lines.append(f" 0x{node.data['rw_data_index']:X} //RwDataIndex") + struct_lines.append(f" 0x{node.data['rw_data_index']:X}, 0x{node.data['reserved']:X} //RwDataIndex, reserved") struct_lines.append("};") all_structures.append((node.data_offset, '\n'.join(struct_lines))) - + # HeadPlaceholderRecord structures (4 bytes) elif dtype == 'HeadPlaceholderRecord': struct_lines = [] @@ -1447,7 +1443,7 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" 0x{node.data['rw_data_index']:X} //RwDataIndex") struct_lines.append("};") all_structures.append((node.data_offset, '\n'.join(struct_lines))) - + # ShadowRecord structures (32 bytes) elif dtype == 'ShadowRecord': data = node.data @@ -1456,24 +1452,24 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append("{") struct_lines.append(f" {{{float_to_c(data['pos_x'])}, {float_to_c(data['pos_y'])}}}, //pos") struct_lines.append(f" {{{float_to_c(data['size_x'])}, {float_to_c(data['size_y'])}}}, //size") - + # Image pointer if data['image_offset'] > 0: struct_lines.append(f" (void *)(0x05000000 + 0x{data['image_offset']:03x}), //image") else: struct_lines.append(" NULL, //image") - + # Header pointer - points to a ModelNode with HEADER opcode usually if data['header_offset'] > 0: struct_lines.append(f" (struct ModelRoData_HeaderRecord *)(0x05000000 + 0x{data['header_offset']:03x}), //Header") else: struct_lines.append(" NULL, //Header") - + struct_lines.append(f" {float_to_c(data['scale'])}, //Scale") struct_lines.append(f" (void *)0x{data['base_addr']:X} //BaseAddr") struct_lines.append("};") all_structures.append((node.data_offset, '\n'.join(struct_lines))) - + # GunfireRecord structures (40 bytes) elif dtype == 'GunfireRecord': data = node.data @@ -1503,25 +1499,25 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" 0x{data['base_addr']:08X} //BaseAddr") struct_lines.append("};") all_structures.append((node.data_offset, '\n'.join(struct_lines))) - + # DisplayListPrimaryRecord structures (16 bytes) with sub-arrays elif dtype == 'DisplayListPrimaryRecord': data = node.data dl_offset = node.data_offset - + # Extract file offsets vertices_offset = data.get('vertices_offset', 0) primary_offset = data['primary_offset'] - + vtx_name = None prim_name = None - + # Vertex array if data.get('vertices') and vertices_offset > 0: vtx_name = f"Vertex_0x{vertices_offset:03x}" vtx_index = node_to_vtx_index.get(node_offset, 0) node_to_vtx_name[node_offset] = (vtx_name, vtx_index) - + struct_lines = [] struct_lines.append(f"Vertex {vtx_name}[VERTEXGROUPCOUNT{vtx_index}] = ") struct_lines.append("{ //{ { x, y, z}, index, s, t, r, g, b, a }") @@ -1531,12 +1527,12 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {{ {{ {v.x:4d}, {v.y:4d}, {v.z:4d}}}, 0x{v.flag:X}, {s_str:>6}, {t_str:>6}, 0x{v.r:02X}, 0x{v.g:02X}, 0x{v.b:02X}, 0x{v.a:02X} }},") struct_lines.append("};") all_structures.append((vertices_offset, '\n'.join(struct_lines))) - + # Primary Gfx array if data['primary_gfx'] and primary_offset > 0: prim_name = f"GDL_0x{primary_offset:03x}" node_to_gdl_prim_name[node_offset] = prim_name - + struct_lines = [] struct_lines.append(f"Gfx {prim_name}[] = ") struct_lines.append("{") @@ -1544,7 +1540,7 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {cmd},") struct_lines.append("};") all_structures.append((primary_offset, '\n'.join(struct_lines))) - + # DLPrimary record itself struct_lines = [] struct_lines.append(f"ModelRoData_DisplayListPrimaryRecord DLPrimaryRecord_0x{dl_offset:03x} = ") @@ -1561,28 +1557,28 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" (void *)0x{data['base_addr']:08X} //BaseAddr") struct_lines.append("};") all_structures.append((dl_offset, '\n'.join(struct_lines))) - + # DisplayListRecord structures (19 bytes) with sub-arrays elif dtype == 'DisplayListRecord': data = node.data dl_offset = node.data_offset - + # Extract file offsets for all sub-structures vertices_offset = data.get('vertices_offset', 0) primary_offset = data['primary_offset'] secondary_offset = data['secondary_offset'] - + # Assign unique symbolic names vtx_name = None prim_name = None sec_name = None - + # Vertex array if data.get('vertices') and vertices_offset > 0: vtx_name = f"Vertex_0x{vertices_offset:03x}" vtx_index = node_to_vtx_index.get(node_offset, 0) node_to_vtx_name[node_offset] = (vtx_name, vtx_index) - + struct_lines = [] struct_lines.append(f"Vertex {vtx_name}[VERTEXGROUPCOUNT{vtx_index}] = ") struct_lines.append("{ //{ { x, y, z}, index, s, t, r, g, b, a }") @@ -1592,13 +1588,13 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {{ {{ {v.x:4d}, {v.y:4d}, {v.z:4d}}}, 0x{v.flag:X}, {s_str:>6}, {t_str:>6}, 0x{v.r:02X}, 0x{v.g:02X}, 0x{v.b:02X}, 0x{v.a:02X} }},") struct_lines.append("};") all_structures.append((vertices_offset, '\n'.join(struct_lines))) - + # Primary GFX array if data.get('primary_gfx') and primary_offset > 0: prim_name = f"GFX_PRIMARY_0x{primary_offset:03x}" node_to_gdl_prim_name[node_offset] = prim_name gdl_prim_idx += 1 - + struct_lines = [] struct_lines.append(f"Gfx {prim_name}[] = ") struct_lines.append("{") @@ -1606,13 +1602,13 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {cmd_str},") struct_lines.append("};") all_structures.append((primary_offset, '\n'.join(struct_lines))) - + # Secondary GFX array if data.get('secondary_gfx') and secondary_offset > 0: sec_name = f"GFX_SECONDARY_0x{secondary_offset:03x}" node_to_gdl_sec_name[node_offset] = sec_name gdl_sec_idx += 1 - + struct_lines = [] struct_lines.append(f"Gfx {sec_name}[] = ") struct_lines.append("{") @@ -1620,22 +1616,22 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {cmd_str},") struct_lines.append("};") all_structures.append((secondary_offset, '\n'.join(struct_lines))) - + # Now the DisplayListRecord itself struct_lines = [] struct_lines.append(f"ModelRoData_DisplayListRecord DisplayListRecord_0x{dl_offset:03x} = ") struct_lines.append("{") - + primary_ref = f"&{node_to_gdl_prim_name[node_offset]}" if node_offset in node_to_gdl_prim_name else "NULL" secondary_ref = f"&{node_to_gdl_sec_name[node_offset]}" if node_offset in node_to_gdl_sec_name else "NULL" - + struct_lines.append(f" {primary_ref}, //PrimaryDisplayList") struct_lines.append(f" {secondary_ref}, //SecondaryDisplayList") - + # BaseAddr pointer (raw value from binary) base_addr = data.get('base_addr', 0) struct_lines.append(f" (void *)0x{base_addr:08X}, //BaseAddr") - + # Vertices pointer if node_offset in node_to_vtx_name: vtx_ref = f"&{node_to_vtx_name[node_offset][0]}" @@ -1649,34 +1645,34 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {data['model_type']} //ModelType") struct_lines.append("};") all_structures.append((dl_offset, '\n'.join(struct_lines))) - + # DisplayListCollisionRecord and all its sub-structures elif dtype == 'DisplayListCollisionRecord': data = node.data - + # DLCollisionRecord itself (32 bytes at node.data_offset) dlcoll_offset = node.data_offset - + # Extract file offsets for all sub-structures vertices_offset = data.get('vertices_offset', 0) collision_vertices_offset = data.get('collision_vertices_offset', 0) point_usage_offset = data.get('point_usage_offset', 0) primary_offset = data['primary_offset'] secondary_offset = data['secondary_offset'] - + # Assign unique symbolic names for this node's arrays vtx_name = None colvtx_name = None ptusage_name = None prim_name = None sec_name = None - + # Vertex array if data.get('vertices') and vertices_offset > 0: vtx_name = f"Vertex_0x{vertices_offset:03x}" vtx_index = node_to_vtx_index.get(node_offset, 0) node_to_vtx_name[node_offset] = (vtx_name, vtx_index) - + struct_lines = [] struct_lines.append(f"Vertex {vtx_name}[VERTEXGROUPCOUNT{vtx_index}] = ") struct_lines.append("{ //{ { x, y, z}, index, s, t, r, g, b, a }") @@ -1686,13 +1682,13 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {{ {{ {v.x:4d}, {v.y:4d}, {v.z:4d}}}, 0x{v.flag:X}, {s_str:>6}, {t_str:>6}, 0x{v.r:02X}, 0x{v.g:02X}, 0x{v.b:02X}, 0x{v.a:02X} }},") struct_lines.append("};") all_structures.append((vertices_offset, '\n'.join(struct_lines))) - + # Collision vertex array if data['collision_vertices'] and collision_vertices_offset > 0: colvtx_name = f"Collision_Vertex_0x{collision_vertices_offset:03x}" colvtx_index = node_to_colvtx_index.get(node_offset, 0) node_to_colvtx_name[node_offset] = (colvtx_name, colvtx_index) - + struct_lines = [] struct_lines.append(f"Vertex {colvtx_name}[COLLISIONVERTEXCOUNT{colvtx_index}] = ") struct_lines.append("{ //{ { x, y, z}, index, s, t, r, g, b, a }") @@ -1702,13 +1698,13 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {{ {{ {v.x:4d}, {v.y:4d}, {v.z:4d}}}, 0x{v.flag:X}, {s_str:>6}, {t_str:>6}, 0x{v.r:02X}, 0x{v.g:02X}, 0x{v.b:02X}, 0x{v.a:02X} }},") struct_lines.append("};") all_structures.append((collision_vertices_offset, '\n'.join(struct_lines))) - + # Point usage array if data['point_usage'] and point_usage_offset > 0: ptusage_name = f"POINT_USAGE_0x{point_usage_offset:03x}" node_to_ptusage_name[node_offset] = (ptusage_name, ptusage_idx) ptusage_idx += 1 - + struct_lines = [] struct_lines.append(f"s16 {ptusage_name}[VERTEXGROUPCOUNT{node_to_vtx_name[node_offset][1]}] = ") struct_lines.append("{") @@ -1718,15 +1714,15 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {formatted},") struct_lines.append("};") all_structures.append((point_usage_offset, '\n'.join(struct_lines))) - + # Note: Padding is detected via gap analysis, not added explicitly here - + # Primary GFX array if data.get('primary_gfx') and primary_offset > 0: prim_name = f"GFX_PRIMARY_0x{primary_offset:03x}" node_to_gdl_prim_name[node_offset] = prim_name gdl_prim_idx += 1 - + struct_lines = [] struct_lines.append(f"Gfx {prim_name}[] = ") struct_lines.append("{") @@ -1734,13 +1730,13 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {cmd_str},") struct_lines.append("};") all_structures.append((primary_offset, '\n'.join(struct_lines))) - + # Secondary GFX array if data.get('secondary_gfx') and secondary_offset > 0: sec_name = f"GFX_SECONDARY_0x{secondary_offset:03x}" node_to_gdl_sec_name[node_offset] = sec_name gdl_sec_idx += 1 - + struct_lines = [] struct_lines.append(f"Gfx {sec_name}[] = ") struct_lines.append("{") @@ -1748,31 +1744,31 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {cmd_str},") struct_lines.append("};") all_structures.append((secondary_offset, '\n'.join(struct_lines))) - + # Now the DLCollisionRecord itself, which references the arrays above struct_lines = [] struct_lines.append(f"ModelRoData_DisplayList_CollisionRecord DLCollisionRecord_0x{dlcoll_offset:03x} = ") struct_lines.append("{") - + primary_ref = node_to_gdl_prim_name.get(node_offset, "NULL") secondary_ref = node_to_gdl_sec_name.get(node_offset, "NULL") - + if node_offset in node_to_vtx_name: vtx_ref_name = node_to_vtx_name[node_offset][0] vtx_count_ref = f"VERTEXGROUPCOUNT{node_to_vtx_name[node_offset][1]}" else: vtx_ref_name = "NULL" vtx_count_ref = "0" - + if node_offset in node_to_colvtx_name: colvtx_ref_name = node_to_colvtx_name[node_offset][0] colvtx_count_ref = f"COLLISIONVERTEXCOUNT{node_to_colvtx_name[node_offset][1]}" else: colvtx_ref_name = "NULL" colvtx_count_ref = "0" - + ptusage_ref = node_to_ptusage_name.get(node_offset, ("NULL", -1))[0] - + struct_lines.append(f" {primary_ref}, //primary") struct_lines.append(f" {secondary_ref}, //secondary") struct_lines.append(f" {vtx_ref_name}, {vtx_count_ref}, //vertices,vcount") @@ -1782,12 +1778,12 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" 0x0 //baseaddr") struct_lines.append("};") all_structures.append((dlcoll_offset, '\n'.join(struct_lines))) - + # Step 2.1: Process referenced_data structures (not in ModelNode tree) for ref_offset in sorted(referenced_data.keys()): ref_data = referenced_data[ref_offset] dtype = ref_data.get('_type') - + # Only handle GroupRecord for now (main use case) if dtype == 'GroupRecord': struct_lines = [] @@ -1797,7 +1793,7 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {{{ox}, {oy}, {oz}}}, //origin {{x,y,z}}") struct_lines.append(f" 0x{ref_data['joint_id']:X}, //JointID") mid0 = ref_data['matrix_id0'] - mid1 = ref_data['matrix_id1'] + mid1 = ref_data['matrix_id1'] mid2 = ref_data['matrix_id2'] struct_lines.append(f" 0x{mid0 & 0xFFFF:X}, //MatrixID0") struct_lines.append(f" 0x{mid1 & 0xFFFF:X}, //MatrixID1") @@ -1811,29 +1807,29 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m struct_lines.append(f" {ref_data['bounding_volume_radius']} //BoundingVolumeRadius") struct_lines.append("};") all_structures.append((ref_offset, '\n'.join(struct_lines))) - + # Step 2.5: Detect padding by finding gaps between sorted structures # Mark all structure bytes, find gaps if binary_data: binary_size = len(binary_data) byte_map = [False] * binary_size - + # Mark switches (handled separately in Switches.c, not padding) switch_size = len(switches) * 4 if switches else 0 for i in range(switch_size): byte_map[i] = True - + # Mark textures tex_end = switch_size + len(textures) * 12 for i in range(switch_size, tex_end): byte_map[i] = True - + # Mark nodes nodes_start = tex_end nodes_end = nodes_start + len(nodes) * 24 for i in range(nodes_start, nodes_end): byte_map[i] = True - + # Mark all structures by their offsets in all_structures list for offset, _ in all_structures: # Determine size based on what's at this offset @@ -1843,114 +1839,114 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m continue dtype = node.data.get('_type') data = node.data - + # GroupRecord or BoundingBoxRecord if offset == node.data_offset and dtype in ('GroupRecord', 'BoundingBoxRecord'): for i in range(offset, offset + 28): byte_map[i] = True - + # LODRecord (16 bytes) if offset == node.data_offset and dtype == 'LODRecord': for i in range(offset, offset + 16): byte_map[i] = True - + # BSPRecord (36 bytes) if offset == node.data_offset and dtype == 'BSPRecord': for i in range(offset, offset + 36): byte_map[i] = True - + # SwitchRecord (8 bytes) if offset == node.data_offset and dtype == 'SwitchRecord': for i in range(offset, offset + 8): byte_map[i] = True - + # GroupSimpleRecord (20 bytes) if offset == node.data_offset and dtype == 'GroupSimpleRecord': for i in range(offset, offset + 20): byte_map[i] = True - + # HeaderRecord (16 bytes) if offset == node.data_offset and dtype == 'HeaderRecord': for i in range(offset, offset + 16): byte_map[i] = True - + # DisplayListRecord (19 bytes logical, 20 bytes with compiler padding) if offset == node.data_offset and dtype == 'DisplayListRecord': for i in range(offset, offset + 20): byte_map[i] = True - + # GunfireRecord (40 bytes) if offset == node.data_offset and dtype == 'GunfireRecord': for i in range(offset, offset + 40): byte_map[i] = True - + # ShadowRecord (32 bytes) if offset == node.data_offset and dtype == 'ShadowRecord': for i in range(offset, offset + 32): byte_map[i] = True - + # HeadPlaceholderRecord (4 bytes) if offset == node.data_offset and dtype == 'HeadPlaceholderRecord': for i in range(offset, offset + 4): byte_map[i] = True - + # InterlinkageRecord (28 bytes) if offset == node.data_offset and dtype == 'InterlinkageRecord': for i in range(offset, offset + 28): byte_map[i] = True - + # DisplayListPrimaryRecord (16 bytes) if offset == node.data_offset and dtype == 'DisplayListPrimaryRecord': for i in range(offset, offset + 16): byte_map[i] = True - + # DLCollisionRecord (32 bytes) if offset == node.data_offset and dtype == 'DisplayListCollisionRecord': for i in range(offset, offset + 32): byte_map[i] = True - + # Vertices if data.get('vertices_offset') and offset == data['vertices_offset']: vsize = len(data['vertices']) * 16 for i in range(offset, offset + vsize): byte_map[i] = True - + # Collision vertices if data.get('collision_vertices_offset') and offset == data['collision_vertices_offset']: csize = len(data['collision_vertices']) * 16 for i in range(offset, offset + csize): byte_map[i] = True - + # Point usage if data.get('point_usage_offset') and offset == data['point_usage_offset']: psize = len(data['point_usage']) * 2 for i in range(offset, offset + psize): byte_map[i] = True - + # GFX arrays if data.get('primary_offset') and offset == data['primary_offset']: gsize = len(data['primary_gfx']) * 8 for i in range(offset, offset + gsize): byte_map[i] = True - + if data.get('secondary_offset') and offset == data['secondary_offset']: gsize = len(data['secondary_gfx']) * 8 for i in range(offset, offset + gsize): byte_map[i] = True - + # Find last real structure (handle empty case) if all_structures: last_offset = max(off for off, _ in all_structures) else: last_offset = binary_size - 1 - + # Calculate switch size to skip that region (switches handled separately in Switches.c) switch_size = len(switches) * 4 if switches else 0 - + # Find padding gaps (up to last structure only, SKIP switch region at start) # Don't scan past last_offset + 256 bytes to avoid trailing data scan_limit = min(last_offset + 256, binary_size) - + i = switch_size # Start AFTER switches while i < scan_limit: if not byte_map[i]: @@ -1959,14 +1955,14 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m i += 1 pad_end = i pad_size = pad_end - pad_start - + # ONLY add padding for 4+ byte gaps that are BETWEEN structures (not at the end) # 2-byte gaps are natural compiler alignment - don't add variables for them # Skip padding that extends to near the end of the file (trailing data) if pad_size >= 4 and pad_end < scan_limit - 32: # Read padding bytes pad_bytes = binary_data[pad_start:pad_end] - + # Generate padding as u32 array for proper alignment if pad_size == 4: val = struct.unpack('>I', pad_bytes)[0] @@ -1981,22 +1977,22 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m all_structures.append((pad_start, f"u8 PADDING_0x{pad_start:03x}[{pad_size}] = {{{vals_str}}};")) else: i += 1 - + # Step 2.5.1: REMOVED - Trailing padding generation # Trailing padding after arrays is compiler-generated for alignment, not source data # The compiler automatically adds padding between structures as needed # DO NOT generate PADDING_TRAILING variables - they cause incorrect binary sizes - + # Step 2.6: Generate forward declarations with correct names forward_decl_lines = [] - + # Declare referenced data structures (not in ModelNode tree) for ref_offset in sorted(referenced_data.keys()): ref_data = referenced_data[ref_offset] dtype = ref_data.get('_type') if dtype == 'GroupRecord': forward_decl_lines.append(f"extern ModelRoData_GroupRecord GroupRecord_0x{ref_offset:03x};") - + # Declare all data structures for node_offset in sorted(nodes.keys()): node = nodes[node_offset] @@ -2026,68 +2022,68 @@ def generate_model_c(prop_name: str, parsed_model: Dict, metadata: Dict, image_m forward_decl_lines.append(f"extern ModelRoData_GunfireRecord GunfireRecord_0x{node.data_offset:03x};") elif dtype == 'DisplayListPrimaryRecord': forward_decl_lines.append(f"extern ModelRoData_DisplayListPrimaryRecord DLPrimaryRecord_0x{node.data_offset:03x};") - + # Declare arrays for DisplayListPrimaryRecord if node_offset in node_to_vtx_name: vtx_name, vtx_idx = node_to_vtx_name[node_offset] forward_decl_lines.append(f"extern Vertex {vtx_name}[VERTEXGROUPCOUNT{vtx_idx}];") - + if node_offset in node_to_gdl_prim_name: prim_name = node_to_gdl_prim_name[node_offset] forward_decl_lines.append(f"extern Gfx {prim_name}[];") elif dtype == 'DisplayListRecord': forward_decl_lines.append(f"extern ModelRoData_DisplayListRecord DisplayListRecord_0x{node.data_offset:03x};") - + # Declare arrays for DisplayListRecord if node_offset in node_to_vtx_name: vtx_name, vtx_idx = node_to_vtx_name[node_offset] forward_decl_lines.append(f"extern Vertex {vtx_name}[VERTEXGROUPCOUNT{vtx_idx}];") - + if node_offset in node_to_gdl_prim_name: prim_name = node_to_gdl_prim_name[node_offset] forward_decl_lines.append(f"extern Gfx {prim_name}[];") - + if node_offset in node_to_gdl_sec_name: sec_name = node_to_gdl_sec_name[node_offset] forward_decl_lines.append(f"extern Gfx {sec_name}[];") elif dtype == 'DisplayListCollisionRecord': forward_decl_lines.append(f"extern ModelRoData_DisplayList_CollisionRecord DLCollisionRecord_0x{node.data_offset:03x};") - + # Declare arrays using the SAME names we assigned during structure collection if node_offset in node_to_vtx_name: vtx_name, vtx_idx = node_to_vtx_name[node_offset] forward_decl_lines.append(f"extern Vertex {vtx_name}[VERTEXGROUPCOUNT{vtx_idx}];") - + if node_offset in node_to_colvtx_name: colvtx_name, colvtx_idx = node_to_colvtx_name[node_offset] forward_decl_lines.append(f"extern Vertex {colvtx_name}[COLLISIONVERTEXCOUNT{colvtx_idx}];") - + if node_offset in node_to_ptusage_name: ptusage_name, _ = node_to_ptusage_name[node_offset] vtx_idx = node_to_vtx_name[node_offset][1] forward_decl_lines.append(f"extern s16 {ptusage_name}[VERTEXGROUPCOUNT{vtx_idx}];") - + if node_offset in node_to_gdl_prim_name: prim_name = node_to_gdl_prim_name[node_offset] forward_decl_lines.append(f"extern Gfx {prim_name}[];") - + if node_offset in node_to_gdl_sec_name: sec_name = node_to_gdl_sec_name[node_offset] forward_decl_lines.append(f"extern Gfx {sec_name}[];") - + forward_decl_lines.append("") - + # Insert forward declarations at the placeholder position lines[forward_decl_placeholder_index:forward_decl_placeholder_index] = forward_decl_lines - + # Step 3: Sort ALL structures by their original binary file offset all_structures.sort(key=lambda x: x[0]) - + # Step 4: Output structures in sorted offset order for offset, code in all_structures: lines.append(code) lines.append("") - + return "\n".join(lines) @@ -2095,7 +2091,7 @@ def get_data_symbol_name(node: ModelNode) -> str: """Get the C symbol name for a node's data structure""" if not node.data: return "NULL" - + dtype = node.data.get('_type') if dtype == 'GroupRecord': return f"GroupRecord_0x{node.data_offset:03x}" @@ -2131,89 +2127,89 @@ def get_data_symbol_name(node: ModelNode) -> str: def main(): import argparse - + parser = argparse.ArgumentParser(description="Generate Model.c from binary prop files") parser.add_argument('props', nargs='*', help="Prop names to process (default: all)") parser.add_argument('--dry-run', action='store_true', help="Show what would be done") parser.add_argument('--force', action='store_true', help="Overwrite existing Model.c files") parser.add_argument('--cleanup', action='store_true', help="Delete source PnameZ.bin files after successful conversion") args = parser.parse_args() - + # Load image mapping image_map = load_image_map() print(f"Loaded {len(image_map)} image definitions") - + # Find all props prop_dir = Path("assets/obseg/prop") all_props = [] prop_name_map = {} # Map lowercase name to actual binary filename - + for bin_file in prop_dir.glob("P*Z.bin"): # Extract name between P and Z, preserve original case actual_name = bin_file.stem[1:-1] lower_name = actual_name.lower() all_props.append(lower_name) prop_name_map[lower_name] = actual_name - + props_to_process = args.props if args.props else all_props - + stats = {'processed': 0, 'skipped': 0, 'errors': 0} - + for prop_name_input in sorted(props_to_process): prop_name_lower = prop_name_input.lower() - + # Get the actual case from the binary file if prop_name_lower not in prop_name_map: print(f" ✗ {prop_name_input}: Binary file not found") stats['errors'] += 1 continue - + actual_prop_name = prop_name_map[prop_name_lower] bin_file = prop_dir / f"P{actual_prop_name}Z.bin" - + # Find the actual directory name (case-insensitive search) prop_subdirs = list(prop_dir.glob(f"{actual_prop_name}")) if not prop_subdirs: # Try case-insensitive - prop_subdirs = [d for d in prop_dir.iterdir() + prop_subdirs = [d for d in prop_dir.iterdir() if d.is_dir() and d.name.lower() == prop_name_lower] - + if not prop_subdirs: # Try fuzzy match for names with suffixes like _lg - prop_subdirs = [d for d in prop_dir.iterdir() + prop_subdirs = [d for d in prop_dir.iterdir() if d.is_dir() and d.name.lower().startswith(prop_name_lower)] - + if not prop_subdirs: print(f" ⊘ {actual_prop_name}: Missing metadata directory") stats['skipped'] += 1 continue - + actual_dir_name = prop_subdirs[0].name - + # Parse metadata using the actual directory name metadata = parse_metadata_files(actual_dir_name) if not metadata: print(f" ⊘ {actual_prop_name}: Missing metadata files") stats['skipped'] += 1 continue - + output_file = prop_dir / actual_dir_name / "Model.c" if output_file.exists() and not args.force: print(f" ⊘ {actual_prop_name}: Model.c already exists (use --force)") stats['skipped'] += 1 continue - + try: # Parse binary with open(bin_file, 'rb') as f: binary_data = f.read() - + parser = BinaryModelParser(binary_data, metadata, image_map) parsed_model = parser.parse() - + # Generate C code - use the directory name for output c_code = generate_model_c(actual_dir_name, parsed_model, metadata, image_map, binary_data) - + if args.dry_run: if len(parsed_model['switches']) > 0: print(f" ✓ {actual_prop_name}: Would generate Model.c ({len(parsed_model['nodes'])} nodes, {len(parsed_model['textures'])} textures, {len(parsed_model['switches'])} switches)") @@ -2223,26 +2219,26 @@ def main(): output_file.parent.mkdir(parents=True, exist_ok=True) with open(output_file, 'w') as f: f.write(c_code) - + # Report generation if len(parsed_model['switches']) > 0: print(f" ✓ {actual_prop_name}: Generated Model.c ({len(parsed_model['nodes'])} nodes, {len(parsed_model['textures'])} textures, {len(parsed_model['switches'])} switches)") else: print(f" ✓ {actual_prop_name}: Generated Model.c ({len(parsed_model['nodes'])} nodes, {len(parsed_model['textures'])} textures)") - + # Clean up source binary file after successful conversion if args.cleanup and bin_file.exists(): bin_file.unlink() print(f" Cleaned up {bin_file.name}") - + stats['processed'] += 1 - + except Exception as e: print(f" ✗ {actual_prop_name}: Error - {e}") stats['errors'] += 1 import traceback traceback.print_exc() - + print(f"\n=== Summary ===") print(f"Processed: {stats['processed']}") print(f"Skipped: {stats['skipped']}") diff --git a/scripts/make/build_hashtable.sh b/scripts/make/build_hashtable.sh index 9ed95c89..e93b8000 100755 --- a/scripts/make/build_hashtable.sh +++ b/scripts/make/build_hashtable.sh @@ -2,6 +2,7 @@ COUNTRY_CODE="" OUTFILE="" +ARG_VERSION="" usage() { echo "$0 usage:" @@ -11,168 +12,97 @@ usage() { echo " -o output filename. Optional. Defaults to full_hashtable_{version}.csv" echo " -v version. Supported options are: US,u, JP,j, EU,e" echo "" - exit 0; + exit 0 } [ $# -eq 0 ] && usage -while getopts "o:hv:" arg; do - case $arg in - v) # version - if [ "${OPTARG,,}" = "us" ]; then - COUNTRY_CODE="u" - elif [ "${OPTARG,,}" = "u" ]; then - COUNTRY_CODE="u" - elif [ "${OPTARG,,}" = "jp" ]; then - COUNTRY_CODE="j" - elif [ "${OPTARG,,}" = "j" ]; then - COUNTRY_CODE="j" - elif [ "${OPTARG,,}" = "eu" ]; then - COUNTRY_CODE="e" - elif [ "${OPTARG,,}" = "e" ]; then - COUNTRY_CODE="e" - fi - ARG_VERSION="${OPTARG}" - ;; - o) # out file - OUTFILE="${OPTARG}" - ;; - h | *) # Display help. - usage - exit 0 - ;; - esac +while getopts "o:hv:" arg; do + case $arg in + v) + case "${OPTARG,,}" in + us | u) + COUNTRY_CODE="u" + ;; + jp | j) + COUNTRY_CODE="j" + ;; + eu | e) + COUNTRY_CODE="e" + ;; + *) + echo "Unsupported version: ${OPTARG}" + usage + ;; + esac + + ARG_VERSION="${OPTARG}" + ;; + o) + OUTFILE="${OPTARG}" + ;; + h | *) + usage + ;; + esac done +if [ -z "${COUNTRY_CODE}" ]; then + echo "No valid version provided." + usage +fi + if ! command -v "mips-linux-gnu-objcopy" &> /dev/null then echo "command mips-linux-gnu-objcopy not found" exit 1 fi -if [ "${OUTFILE}" = "" ] ; then - OUTFILE="full_hashtable_${version}.csv" + if ! command -v "md5sum" &> /dev/null +then + echo "command md5sum not found" + exit 1 fi -TMP=$(mktemp /tmp/ge_test_files.XXXXXX) +if [ -z "${OUTFILE}" ] ; then + OUTFILE="full_hashtable_${ARG_VERSION}.csv" +fi + +TMP=$(mktemp /tmp/ge_test_files.XXXXXX) || { echo "Failed to create temp file"; exit 1; } +trap 'rm -f "${TMP}"' EXIT rm -f "${OUTFILE}" - touch "${OUTFILE}" -# output format is simple csv, one entry per line -# 32 character md5, name of section extracted from ELF binary, and path to file relative from repo root (where this script is) -# -# escaped csv, quotes or commas in filenames are not supported. +SECTIONS=( ".text" ".code" ".bss" ".data" ".rodata" ) -for FILE in build/${COUNTRY_CODE}/src/*.o +# Search roots: build country tree and repository root assets folder +SEARCH_ROOTS=( "build/${COUNTRY_CODE}" ) + +for ROOT in "${SEARCH_ROOTS[@]}" do - echo "adding ${FILE}" + if [ -d "${ROOT}" ]; then + # find all object files under this root, but skip build/${COUNTRY_CODE}/assets/images/* + find "${ROOT}" -type f -name '*.o' ! -path "*/assets/images/*" -print0 | while IFS= read -r -d '' FILE + do + echo "adding ${FILE}" + for SEC in "${SECTIONS[@]}" + do + # Extract section to TMP; suppress objcopy stderr (section may be missing) + mips-linux-gnu-objcopy -j "${SEC}" -O binary "${FILE}" "${TMP}" 2>/dev/null || true - mips-linux-gnu-objcopy -j .text -O binary "${FILE}" "${TMP}" - printf "%s,.text,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" + # If TMP has content, compute md5 and append to OUTFILE + if [ -s "${TMP}" ]; then + MD5=$(md5sum -b "${TMP}" | cut -c -32) + printf "%s,%s,%s\n" "${MD5}" "${SEC}" "${FILE}" >> "${OUTFILE}" + fi - mips-linux-gnu-objcopy -j .code -O binary "${FILE}" "${TMP}" - printf "%s,.code,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" - printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" - printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" - printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" + # Clear TMP for next section + : > "${TMP}" + done + done + fi done -for FILE in build/${COUNTRY_CODE}/src/game/*.o -do - echo "adding ${FILE}" - - mips-linux-gnu-objcopy -j .text -O binary "${FILE}" "${TMP}" - printf "%s,.text,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .code -O binary "${FILE}" "${TMP}" - printf "%s,.code,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" - printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" - printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" - printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" -done - -for FILE in build/${COUNTRY_CODE}/assets/obseg/bg/*.o -do - echo "adding ${FILE}" - - mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" - printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" - printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" - printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" -done - -for FILE in build/${COUNTRY_CODE}/assets/obseg/brief/*.o -do - echo "adding ${FILE}" - - mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" - printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" - printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" - printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" -done - -for FILE in build/${COUNTRY_CODE}/assets/obseg/setup/*.o -do - echo "adding ${FILE}" - - mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" - printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" - printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" - printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" -done - -for FILE in build/${COUNTRY_CODE}/assets/obseg/stan/*.o -do - echo "adding ${FILE}" - - mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" - printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" - printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" - printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" -done - -for FILE in build/${COUNTRY_CODE}/assets/obseg/text/*.o -do - echo "adding ${FILE}" - - mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" - printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" - printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - - mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" - printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" -done - -rm -f "${TMP}" +# TMP is removed by trap on exit +exit 0 diff --git a/scripts/test_files.sh b/scripts/test_files.sh index 239bb928..694673e8 100755 --- a/scripts/test_files.sh +++ b/scripts/test_files.sh @@ -66,8 +66,9 @@ do mips-linux-gnu-objcopy -j "${SECTION}" -O binary "${FILE}" "${TMP}" ACTUAL=$(md5sum -b "${TMP}" | cut -c -32 | tr '[:upper:]' '[:lower:]') EXPECTED=$(echo "${MD5}" | tr '[:upper:]' '[:lower:]') - FILENAME=$(echo $FILE | sed -E -e 's/build\/[uje]\/src\//src\//g;'); - VERSION=$(echo $FILE | sed -E -e 's/build\/([uje])\/.*/\1/g;'); + # derive VERSION (u/j/e) and relative path inside build// + VERSION=$(echo "${FILE}" | sed -E -e 's|build/([uje])(/.*)|\1|') + FILENAME=$(echo "${FILE}" | sed -E -e 's|build/[uje]/(.*)|\1|') if [ "${ACTUAL}" != "${EXPECTED}" ] ; then #if [ "${SECTION}" == ".data" ] || [ "${SECTION}" == ".rodata" ] ; then diff --git a/src/aicommands.def b/src/aicommands.def index b9cb14b8..45e38b0b 100644 --- a/src/aicommands.def +++ b/src/aicommands.def @@ -4485,7 +4485,7 @@ _AI_CMD( * Is Key, if it exists, "Dropped"? (not moving/in mid-air) ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @exception: Used to check if a Key with ID has been "Dropped" (RUNTIMEBITFLAG_DEPOSIT) +* @exception: Used to check if a Key with ID has been "Dropped" (RUNTIMEBITFLAG_HASPROJECTILE) * Make sure IFItemIsAttachedToObject takes priority over * IFKeyDropped when using both commands *******************************************************************************/ @@ -4879,7 +4879,7 @@ _AI_CMD( if (!objGetDestroyedLevel(obj)) { f32 damage = ((obj->damage - obj->maxdamage) + 1) / 250.0f; - maybe_detonate_object(obj, damage, &obj->runtime_pos, 29, -1); + objApplyDamage(obj, damage, &obj->runtime_pos, 29, -1); } } Offset += CAT(CAT(AI_, CMDNAME), _LENGTH); @@ -5062,7 +5062,7 @@ _AI_CMD( ObjectRecord *obj = objFindByTagId(ai->val[0]); if (obj && obj->prop) { - bool a = collect_or_interact_object(obj->prop, 0); + bool a = propPickupByPlayer(obj->prop, 0); propExecuteTickOperation(obj->prop, a); } Offset += CAT(CAT(AI_, CMDNAME), _LENGTH); @@ -6394,7 +6394,7 @@ _AI_CMD( { AIRecord *ai = AiListp + Offset; float val = (ai->val[0]) / 255.0f; - if (val > bondviewGetCurrentPlayerHealth()) + if (val > currentPlayerGetHealth()) { Offset = chraiGoToLabel(AiListp, Offset, ai->val[1]); } @@ -6436,7 +6436,7 @@ _AI_CMD( { AIRecord *ai = AiListp + Offset; float val = (ai->val[0]) / 255.0f; - if (val < bondviewGetCurrentPlayerHealth()) + if (val < currentPlayerGetHealth()) { Offset = chraiGoToLabel(AiListp, Offset, ai->val[1]); } @@ -10165,11 +10165,11 @@ _AI_CMD( u16 padnum = CharArrayTo16(ai->val,0); if (isNotBoundPad(padnum)) { - dword_CODE_bss_800799F8 = &g_CurrentSetup.pads[padnum]; + g_CameraLookAtBondPad = &g_CurrentSetup.pads[padnum]; } else { - dword_CODE_bss_800799F8 = (PadRecord *) &g_CurrentSetup.boundpads[getBoundPadNum(padnum)]; + g_CameraLookAtBondPad = (PadRecord *) &g_CurrentSetup.boundpads[getBoundPadNum(padnum)]; } set_camera_mode(CAMERAMODE_POSEND); Offset += CAT(CAT(AI_, CMDNAME), _LENGTH); @@ -10218,7 +10218,7 @@ _AI_CMD( if (TagIndex >= 0) { CutsceneRecord *cdef = setupGetPtrToCommandByIndex(tag->OffsetToObj + TagIndex); - dword_CODE_bss_800799F8 = NULL; + g_CameraLookAtBondPad = NULL; gBondViewCutscene = cdef; dword_CODE_bss_80079A18 = CharArrayTo16(ai->val,1); dword_CODE_bss_80079A1C = CharArrayTo16(ai->val,3); @@ -10262,7 +10262,7 @@ _AI_CMD( { AIRecord * ai = AiListp + Offset; f32 bondpos = (s16) CharArrayTo16(ai->val,0); - if (get_curplayer_positiondata()->pos.y < bondpos) + if (getCurrentPlayerProp()->pos.y < bondpos) { Offset = chraiGoToLabel(AiListp, Offset, ai->val[2]); } @@ -11294,7 +11294,7 @@ _AI_CMD( padnum = CharArrayTo16(ai->val, 6); targetHeight = (s16)CharArrayTo16(ai->val, 8); start = CharArrayTo16(ai->val, 10); - dword_CODE_bss_800799F8 = NULL; + g_CameraLookAtBondPad = NULL; gBondViewCutscene = NULL; flt_CODE_bss_80079A00 = (start * M_TAU_F) / M_U16_MAX_VALUE_F; /*unit direction 0 - 1 (increments are 0.000001)*/ flt_CODE_bss_80079A04 = (speed60 * M_TAU_F) / M_U16_MAX_VALUE_F; /*how many increments per frame*/ @@ -11850,7 +11850,7 @@ _AI_CMD( if (obj && obj->prop) { sub_GAME_7F03FDA8(obj->prop); - if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) + if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) { obj->projectile->flags |= 0x601; projectileSetSticky(obj->prop); diff --git a/src/bondaicommands.h b/src/bondaicommands.h index 859ee196..6246306f 100644 --- a/src/bondaicommands.h +++ b/src/bondaicommands.h @@ -933,7 +933,7 @@ IF_VA(NOT(IS_EMPTY(CASE_VAL0)))(IF_VA(NOT(IS_EMPTY(CASE_VAL1)))(BREAK(FAIL_LBL) #define ai_list_end_ID 0x04 #define ai_list_end_LENGTH 0x01 #define ai_list_end \ - ai_list_end_ID + ai_list_end_ID, /*============================================================================= // name: jump_to_ai_list diff --git a/src/bondconstants.h b/src/bondconstants.h index e9c0d8b7..45bd0ecd 100644 --- a/src/bondconstants.h +++ b/src/bondconstants.h @@ -229,6 +229,13 @@ typedef enum CHRFLAG CHRFLAG_80000000 = 0x80000000 // unknown }CHRFLAG; +enum CHR_RENDER_PART { + CHR_RENDERPART_HEAD, + CHR_RENDERPART_TORSO, + CHR_RENDERPART_LEFT_ARM, + CHR_RENDERPART_RIGHT_ARM +}; + // collision detection types typedef enum CDTYPE { @@ -287,7 +294,7 @@ BITFLAG(PS_FLAGS2, typedef enum PROPFLAG { PROPFLAG_RENDERPOSTBG = 0x00000001, // Fall to Ground - PROPFLAG_ONSCREEN = 0x00000002, // In Air Rotated 90 Deg Upside-Down + PROPFLAG_ONSCREEN = 0x00000002, // In Air Rotated 90 Deg Upside-Down PROPFLAG_ENABLED = 0x00000004, // In Air Upside-Down PROPFLAG_00000008 = 0x00000008, // In Air PROPFLAG_00000010 = 0x00000010, // Scale to Pad Bounds @@ -296,17 +303,17 @@ typedef enum PROPFLAG PROPFLAG_00000080 = 0x00000080, // Scale Z to Pad Bounds PROPFLAG_00000100 = 0x00000100, // Force Collisions PROPFLAG_00000200 = 0x00000200, // Glass Env Mapping Style - PROPFLAG_ILLUMINATED = 0x00000400, /* ignore Stan Colour?*/ + PROPFLAG_ILLUMINATED = 0x00000400, // ignore Stan Colour? PROPFLAG_00000800 = 0x00000800, // Free Standing Glass PROPFLAG_00001000 = 0x00001000, // Absolute Position - PROPFLAG_AIUNDROPPABLE = 0x00002000, /* Item Not Droppedz*/ + PROPFLAG_AIUNDROPPABLE = 0x00002000, // Item Not Droppedz PROPFLAG_ASSIGNEDTOCHR = 0x00004000, // Assigned to Actor PROPFLAG_INSIDEANOTHEROBJ = 0x00008000, // Embedded Object PROPFLAG_FORCEMORTAL = 0x00010000, // unknown PROPFLAG_INVINCIBLE = 0x00020000, // Invincible PROPFLAG_00040000 = 0x00040000, // Allow Pickup (chr_type) PROPFLAG_00080000 = 0x00080000, // Collect Object by Interaction Button Only - PROPFLAG_UNCOLLECTABLE = 0x00100000, /* Item Not Collectable*/ + PROPFLAG_UNCOLLECTABLE = 0x00100000, // Item Not Collectable PROPFLAG_00200000 = 0x00200000, // Bounce and Destroy If Shot PROPFLAG_00400000 = 0x00400000, // unknown PROPFLAG_00800000 = 0x00800000, // unknown @@ -314,21 +321,24 @@ typedef enum PROPFLAG PROPFLAG_CANNOT_ACTIVATE = 0x02000000, // Cannot Activate Door/Object PROPFLAG_04000000 = 0x04000000, // AI Sees Through Door/Object PROPFLAG_DOOR_TWOWAY = 0x08000000, // Open Away From Player - PROPFLAG_WEAPON_LEFTHANDED = 0x10000000, /* Left-Handed weapon*/ - PROPFLAG_GLASS_HASPORTAL = 0x10000000, /* Glass Has Portal*/ + PROPFLAG_WEAPON_LEFTHANDED = 0x10000000, // Left-Handed weapon + PROPFLAG_GLASS_HASPORTAL = 0x10000000, // Glass Has Portal PROPFLAG_CULL_BEHIND_DOOR = 0x10000000, // Area Behind Door Invisible PROPFLAG_FIXED_MONITOR = 0x10000000, // Monitor Fixed PROPFLAG_CCTV_DISABLED = 0x10000000, // Disable security camera PROPFLAG_IS_DRONE_GUN = 0x10000000, // drone gun - PROPFLAG_DOOR_OPENTOFRONT = 0x20000000, /* Open Backwards*/ - PROPFLAG_SPECIAL_FUNC = 0x20000000, //Special Function - PROPFLAG_CONCEAL_GUN = 0x20000000, //Conceal Weapon + PROPFLAG_DOOR_OPENTOFRONT = 0x20000000, // Open Backwards + PROPFLAG_SPECIAL_FUNC = 0x20000000, // Special Function + PROPFLAG_INMOTION = 0x20000000, // projectile/prop is in motion + PROPFLAG_CONCEAL_GUN = 0x20000000, // Conceal Weapon PROPFLAG_MONITOR_RENDERPOSTBG = 0x40000000, PROPFLAG_NO_PORTAL_CLOSE = 0x40000000, // Area Behind Door Visible - PROPFLAG_NO_AMMO = 0x40000000,/* No Ammo on pickup */ + PROPFLAG_NO_AMMO = 0x40000000, // No Ammo on pickup PROPFLAG_80000000 = 0x80000000, // Open By Default/Weapon Paired for Player - PROPFLAG_IS_DOUBLE = 0x80000000 + PROPFLAG_IS_DOUBLE = 0x80000000, + PROPFLAG_DOOR_KEEPOPEN = 0x80000000 }PROPFLAG; + // prop definition flags typedef enum PROPFLAG2 { @@ -366,65 +376,40 @@ typedef enum PROPFLAG2 PROPFLAG2_DOOR_ALTCOORDSYSTEM = 0x80000000 // Massive Explosion (08 Type)/Rotating Disabled Drone Gun (0D Type) } PROPFLAG2; +// Flags on DoorRecord.doorFlags (u16, offset 0x98) typedef enum DOORFLAG { - DOORFLAG_0001 = 0x00000001, + DOORFLAG_EXTENDEDY = 0x00000001, DOORFLAG_WINDOWED = 0x00000002, - DOORFLAG_0004 = 0x00000004, - DOORFLAG_FLIP = 0x00000008, - DOORFLAG_AUTOMATIC = 0x00000010, - DOORFLAG_0020 = 0x00000020, - DOORFLAG_ROTATEDPAD = 0x00000040, - DOORFLAG_080 = 0x00000080, - DOORFLAG_100 = 0x00000100, - DOORFLAG_LONGRANGE = 0x00000200, - DOORFLAG_DAMAGEONCONTACT = 0x00000400, // Lasers - DOORFLAG_UNBLOCKABLEOPEN = 0x00000800, // Skip collision checks when opening - DOORFLAG_4000 = 0x00004000, // Two Investigation vertical doors after lasers - DOORFLAG_CANNOT_ACTIVATE = 0x02000000, - DOORFLAG_KEEPOPEN = 0x80000000 - + DOORFLAG_CLIP_TO_BBOX = 0x00000004, // Clip the mesh to the shrinking/expanding bbox while sliding + DOORFLAG_FLIP = 0x00000008 } DOORFLAG; -typedef enum DOORMODE -{ - DOORMODE_IDLE, - DOORMODE_OPENING, - DOORMODE_CLOSING, - // Waiting for sibling door to close. Eg. Dam gates in GE - DOORMODE_WAITING -} DOORMODE; - typedef enum DOORSTATE { DOORSTATE_STATIONARY, - DOORSTATE_OPENING,// also OPEN but NOT AIlist compatible (02) + DOORSTATE_OPENING, // also OPEN but NOT AIlist compatible (02) DOORSTATE_CLOSING, // also CLOSE but NOT AIlist compatible (01) - DOORSTATE_WAITING + DOORSTATE_WAITING // Waiting for sibling door to close. Eg. Dam gates } DOORSTATE; -#define DOORTYPE_SLIDING 0 -// GE only - Bunker flexi door -#define DOORTYPE_FLEXI1 1 -#define DOORTYPE_FLEXI2 2 -#define DOORTYPE_FLEXI3 3 -#define DOORTYPE_VERTICAL 4 -#define DOORTYPE_SWINGING 5 -// GE only - Caverns -#define DOORTYPE_EYE 6 -// GE only - Caverns -#define DOORTYPE_IRIS 7 -// GE only - Surface grate and Train floor panel -#define DOORTYPE_FALLAWAY 8 -// GE only -#define DOORTYPE_AZTECCHAIR 9 -// Attack Ship windows -#define DOORTYPE_HULL 10 -#define DOORTYPE_LASER 11 +typedef enum DOORTYPE +{ + DOORTYPE_SLIDING, + DOORTYPE_FLEXI1, // Bunker flexi door + DOORTYPE_FLEXI2, + DOORTYPE_FLEXI3, + DOORTYPE_VERTICAL, + DOORTYPE_SWINGING, + DOORTYPE_EYE, // Caverns + DOORTYPE_IRIS, // Caverns + DOORTYPE_FALLAWAY, // Surface grate and Train floor panel + DOORTYPE_AZTECCHAIR +} DOORTYPE; typedef enum DOOR_OPEN_SOUND { - DOOR_OPEN_SOUND_NONE = 0, + DOOR_OPEN_SOUND_NONE, DOOR_OPEN_SOUND_01, DOOR_OPEN_SOUND_02, DOOR_OPEN_SOUND_METAL, @@ -458,10 +443,13 @@ typedef enum PROJECTILEFLAG PROJECTILEFLAG_AIRBORNE = 0x00000001, PROJECTILEFLAG_00000002 = 0x00000002, PROJECTILEFLAG_STICKY = 0x00000004, + PROJECTILEFLAG_00000008 = 0x00000008, PROJECTILEFLAG_POWERED = 0x00000010, PROJECTILEFLAG_00000020 = 0x00000020, + PROJECTILEFLAG_00000040 = 0x00000040, PROJECTILEFLAG_LAUNCHING = 0x00000080, PROJECTILEFLAG_00000100 = 0x00000100, + PROJECTILEFLAG_00000200 = 0x00000200, PROJECTILEFLAG_FALLING = 0x00000400, PROJECTILEFLAG_SLIDING = 0x00000800, PROJECTILEFLAG_00001000 = 0x00001000, @@ -503,6 +491,17 @@ typedef enum PROPSTATE { #define PROPSTATE_NORMAL PROPSTATE_NONE +typedef enum STANTILEFLAG +{ + STANTILEFLAG_NORMAL = 0x01, + STANTILEFLAG_FORCECROUCH = 0x02, + STANTILEFLAG_04 = 0x04, + STANTILEFLAG_08 = 0x08, + STANTILEFLAG_10 = 0x10, + STANTILEFLAG_20 = 0x20, + STANTILEFLAG_LADDER = 0x40 +} STANTILE_FLAG; + BITFLAG(PLAYERFLAG, LOCKCONTROLS, NOCONTROL, @@ -512,23 +511,23 @@ BITFLAG(PLAYERFLAG, BITFLAG(RUNTIMEBITFLAG, 00000001, 00000002, - REMOVE, /* removes object when set */ + REMOVE, /* removes object when set */ ISRETICK, TAGGED, THROWING_KNIFE_RELATED, EMBEDDED, - DEPOSIT, /* depositted (thrown/launching) */ + HASPROJECTILE, /* this object owns a live Projectile record in obj->projectile */ 00000100, BEENOPENED, - DESTROYED, /* only set with disabled or destroyed doors */ + DESTROYED, /* only set with disabled or destroyed doors */ 00000800, 00001000, PADLOCKEDDOOR, - ACTIVATED, /* activated */ + ACTIVATED, /* activated */ 00008000, 00010000, - 00020000, /* owner 2bit (0-3) used to */ - 00040000, /* attribute kills to players */ + 00020000, /* owner 2bit (0-3) used to */ + 00040000, /* attribute kills to players */ HASOWNER, 00100000, 00200000, @@ -544,9 +543,15 @@ BITFLAG(RUNTIMEBITFLAG, 80000000 ) -#define RUNTIMEBITFLAG_OWNER 0x60000 -#define RUNTIMEBITSHIFT_OWNER 0x11 -#define RUNTIMEBITFLAG_00000001 0x1 +#define RUNTIMEBITFLAG_OWNER 0x60000 +#define RUNTIMEBITSHIFT_OWNER 0x11 +#define RUNTIMEBITFLAG_00000001 0x1 +#define RUNTIMEBITFLAG_00000080 0x00000080 +#define RUNTIMEBITFLAG_00000100 0x00000100 +#define RUNTIMEBITFLAG_00001000 0x00001000 +#define RUNTIMEBITFLAG_00000800 0X00000800 +#define RUNTIMEBITFLAG_PADLOCKEDDOOR 0X00002000 +#define RUNTIMEBITFLAG_HASOWNER 0X00080000 #define WEAPONSTATBITFLAG_00000001 0x1 /* skip from fire to reload animation; item "disappears" after use, redrawn from off-screen like knives" */ @@ -1523,6 +1528,47 @@ typedef enum GAMEMODE GAMEMODE_CHEATS } GAMEMODE; +typedef enum GUN_ANIMATION_STATE_IDS +{ + GUN_ANIM_STATE_IDLE, + GUN_ANIM_STATE_TRIGGER_PRESS, + GUN_ANIM_STATE_FIRE, + GUN_ANIM_STATE_RECOIL1, + GUN_ANIM_STATE_RECOIL2, + GUN_ANIM_STATE_SWITCH_LOWER, + GUN_ANIM_STATE_SWITCH_SWAP, + GUN_ANIM_STATE_SWITCH_HOLD, + GUN_ANIM_STATE_SWITCH_RAISE, + GUN_ANIM_STATE_RELOAD_START, + GUN_ANIM_STATE_RELOAD_LOWER, + GUN_ANIM_STATE_RELOAD_SWAP, + GUN_ANIM_STATE_RELOAD_RAISE, + GUN_ANIM_STATE_DRY_FIRE, + GUN_ANIM_STATE_WATCH_LOWER, + GUN_ANIM_STATE_WATCH_SWAP, + GUN_ANIM_STATE_WATCH_RAISE, + GUN_ANIM_STATE_KNIFE_SLASH1_BEGIN, // Slash right to left + GUN_ANIM_STATE_KNIFE_SLASH1_STRIKE, + GUN_ANIM_STATE_KNIFE_SLASH1_RECOVER, + GUN_ANIM_STATE_KNIFE_SLASH2_BEGIN, // Slash left to right + GUN_ANIM_STATE_KNIFE_SLASH2_STRIKE, + GUN_ANIM_STATE_KNIFE_SLASH2_RECOVER, + GUN_ANIM_STATE_THROWKNIFE_DRAW, + GUN_ANIM_STATE_THROWKNIFE_THROW, + GUN_ANIM_STATE_THROWKNIFE_RECOVER, + GUN_ANIM_STATE_GRENADE_THROW, + GUN_ANIM_STATE_GRENADE_RECOVER, + GUN_ANIM_STATE_MINE_PLACE, + GUN_ANIM_STATE_MINE_RECOVER, + GUN_ANIM_STATE_PUNCH1_STRIKE, + GUN_ANIM_STATE_PUNCH1_RECOVER, + GUN_ANIM_STATE_PUNCH2_STRIKE, + GUN_ANIM_STATE_PUNCH2_RECOVER, + GUN_ANIM_STATE_UNUSED_34, + GUN_ANIM_STATE_UNUSED_35, + GUN_ANIM_STATE_USE_ITEM +} GUN_ANIMATION_STATE_IDS; + typedef enum GUNHAND //Canonical name { GUNRIGHT, @@ -1865,6 +1911,12 @@ typedef enum MODELNODE_CHILD MODELNODE_CHILD_MAX } MODELNODE_CHILD; +typedef enum MODEL_GROUP_MTX_BUILD_FLAGS +{ + MODELGROUP_MTX_HAS_MATRIX1 = 0x0100, + MODELGROUP_MTX_HAS_MATRIX2 = 0x0200 +} MODEL_GROUP_MTX_BUILD_FLAGS; + typedef enum BOND { BOND_BROSNAN, @@ -1898,8 +1950,8 @@ typedef enum MPMENU MENU_SCORES, MENU_PAUSE, MENU_EXIT, - MENU_6, - MENU_7 + MENU_EXIT_CONFIRM, + MENU_FINISHED } MPMENU; typedef enum MPSCENARIOS @@ -2063,6 +2115,12 @@ typedef enum PLAYER_ID PLAYER_4 } PLAYER_ID; +typedef enum PORTALFLAGS +{ + PORTALFLAG_DISABLED = 0x01, + PORTALFLAG_SPECIAL = 0x02 +} PORTALFLAGS; + #define SAVESLOT1 0x0 #define SAVESLOT2 0x1 #define SAVESLOT3 0x2 @@ -2768,15 +2826,15 @@ char *TEXTBANK_LEVEL_INDEX_ToString[] = #define GUNAMMOREASON_DAMAGE 0x08 typedef enum WATCH_ANIMATION_STATE_IDS { - WATCH_ANIMATION_0x0 = 0, - WATCH_ANIMATION_0x1, - WATCH_ANIMATION_0x2, - WATCH_ANIMATION_0x3, - WATCH_ANIMATION_0x4, - WATCH_ANIMATION_0x5, - WATCH_ANIMATION_0x6, - WATCH_ANIMATION_0x7, - WATCH_ANIMATION_0x8, + WATCH_ANIMATION_0x0, /* Watch closed, normal play. */ + WATCH_ANIMATION_0x1, /* Pause initiated, lower any weapon in left hand. */ + WATCH_ANIMATION_0x2, /* Tilt player camera to watch angle. */ + WATCH_ANIMATION_0x3, /* Raise left arm. */ + WATCH_ANIMATION_0x4, /* Zoom into watch face. */ + WATCH_ANIMATION_0x5, /* Watch open, game paused. */ + WATCH_ANIMATION_0x6, /* Zoom out from watch face. */ + WATCH_ANIMATION_0x7, /* Lower left arm. */ + WATCH_ANIMATION_0x8, /* Tilt player camera to where it was before pause initiated, finish pause. */ WATCH_ANIMATION_0x9, WATCH_ANIMATION_0xa, WATCH_ANIMATION_0xb, @@ -2794,7 +2852,6 @@ typedef enum WATCH_BRIEFING_PAGE BRIEFING_MONEYPENNY } WATCH_BRIEFING_PAGE; - typedef enum AWARD { AWARD_MOSTSUICIDAL = 0x00001, @@ -2816,7 +2873,6 @@ typedef enum AWARD { AWARD_QUADKILL = 0x10000 } AWARD; - typedef enum WAYMODE { WAYMODE_0, @@ -2844,22 +2900,22 @@ typedef enum SPSEGMENT typedef enum TVCMD { - TVCMD_STOPSCROLL = 0x00, - TVCMD_SCROLLRELX = 0x01, - TVCMD_SCROLLRELY = 0x02, - TVCMD_SCROLLABSX = 0x03, - TVCMD_SCROLLABSY = 0x04, - TVCMD_SCALEABSX = 0x05, - TVCMD_SCALEABSY = 0x06, - TVCMD_SETTEXTURE = 0x07, - TVCMD_PAUSE = 0x08, - TVCMD_SETCMDLIST = 0x09, - TVCMD_RANDSETCMDLIST = 0x0a, - TVCMD_RESTART = 0x0b, - TVCMD_YIELD = 0x0c, - TVCMD_SETCOLOUR = 0x0d, - TVCMD_ROTATEABS = 0x0e, - TVCMD_ROTATEREL = 0x0f + TVCMD_STOPSCROLL, + TVCMD_SCROLLRELX, + TVCMD_SCROLLRELY, + TVCMD_SCROLLABSX, + TVCMD_SCROLLABSY, + TVCMD_SCALEABSX, + TVCMD_SCALEABSY, + TVCMD_SETTEXTURE, + TVCMD_PAUSE, + TVCMD_SETCMDLIST, + TVCMD_RANDSETCMDLIST, + TVCMD_RESTART, + TVCMD_YIELD, + TVCMD_SETCOLOUR, + TVCMD_ROTATEABS, + TVCMD_ROTATEREL } TVCMD; enum CCRMLUT @@ -2967,6 +3023,7 @@ enum CCRMLUT BODY_Natalya_Jungle_Fatigues, BODIES_MAX } BODIES; + typedef enum GENDER { FEMALE, @@ -4006,6 +4063,7 @@ typedef enum PROJECTILES HATTYPE_FURRY, HATTYPE_MOON } HATTYPE; + typedef enum INV_ITEM_TYPE { INV_ITEM_NONE, @@ -4015,6 +4073,23 @@ typedef enum PROJECTILES INV_ITEM_PICKUP } INV_ITEM_TYPE; + /** + * Tick operations + * The per-prop tick functions like chrTick, objTick, playerTick, explosionTick, explosionSmokeTick + * and the collect/interact chain returns a tickop telling the game what to do with the prop it just processed. + * + * TICKOP_DISABLE and TICKOP_RETICK are handled but never actually used. + */ + typedef enum TICKOP + { + TICKOP_NONE, // Default, do nothing. + TICKOP_FREE, // Deregister, delist, disable and free the prop except for weapons flagged PROPSTATE_RESPAWN which begin their respawn timer instead. + TICKOP_DISABLE, // Deregister, delist and disable the prop, but keep the record. + TICKOP_RETICK, // Delist the prop and reactivate it so it is ticked again this frame. + TICKOP_GIVETOPLAYER, // Detach the prop and reparent it to the player prop e.g. collected pickups. + TICKOP_CHANGEDLIST // The tick restructured the prop list (such as being embedded), so prop->prev is stale. The loop resumes from the prev captured before the tick. + } TICKOP; + typedef enum ITEM_IDS { ITEM_NOTHING = -1, @@ -4383,6 +4458,13 @@ typedef enum PROJECTILES }; #endif + typedef enum INTRO_WEAPON_TYPE + { + INTRO_WEAPON_TYPE_NONE, + INTRO_WEAPON_TYPE_PISTOL, + INTRO_WEAPON_TYPE_RIFLE + } INTRO_WEAPON_TYPE; + typedef enum MISSION_STATE_IDS { MISSION_STATE_0, @@ -4422,7 +4504,7 @@ typedef enum PROJECTILES typedef enum TANK_RUN_STATE { - TANK_RUN_STATE_NOT_RUNNING = 0, + TANK_RUN_STATE_NOT_RUNNING, TANK_RUN_STATE_STARTING, TANK_RUN_STATE_RUNNING } TANK_RUN_STATE; @@ -4467,6 +4549,14 @@ typedef enum PROJECTILES VIDEOMODE_320x240 = MD_NORMAL, VIDEOMODE_640x480 = MD_MAXIMUM } VIDEOMODE; + + typedef enum ZBUFMODE + { + ZBUF_OFF, /* G_RM_AA_*_SURF (no z-buffer) */ + ZBUF_SURFACE, /* G_RM_AA_ZB_*_SURF */ + ZBUF_DECAL /* G_RM_AA_ZB_*_DECAL */ + } ZBUFMODE; + #pragma endregion #if !defined(VERSION_EU) @@ -4529,6 +4619,7 @@ typedef enum PROJECTILES #define S32_MAX 2147483647 #define U32_MAX 4294967295 +#define M_SQRT2_F 1.41412f #pragma region Inline Macro Functions #ifndef _MATH_EXT_H_ #define M_TAU_F 6.2831855f @@ -4747,6 +4838,7 @@ typedef enum PROJECTILES #define ALIGN8(val) (((val) + 0x7 | 0x7) ^ 0x7) #define RANDOMFRAC() ((f32) randomGetNext() * 2.3283064e-10f) #define MAXFLOAT ((float)3.40282346638528860e+38) +#define SQ(x) ((x) * (x)) #define HUDHALIGN_RIGHT 0 #define HUDHALIGN_LEFT 1 diff --git a/src/bondtypes.h b/src/bondtypes.h index 828d605e..53fd4fa5 100644 --- a/src/bondtypes.h +++ b/src/bondtypes.h @@ -500,10 +500,10 @@ typedef union // Very similar but definitely different to the above? struct StandTileLocusCallbackRecord { - s32 unk00; - s32 count; - s32 bufMax; - s32 nearEdgeCount; + s32 *rooms; /* 0x00 */ + s32 count; /* 0x04 */ + s32 bufMax; /* 0x08 */ + s32 nearEdgeCount; /* 0x0c */ }; typedef struct StandFileFooter @@ -516,7 +516,7 @@ typedef union } StandFileFooter; typedef s32 (*standTileLocusCallback_A_t)(struct StandTile *, struct StandTileLocusCallbackRecord *); - typedef s32 (*standTileLocusCallback_B_t)(StandTile *arg0, s32 arg1, f32 arg2, f32 arg3, s32 arg4, struct StandTileLocusCallbackRecord *arg5); + typedef s32 (*standTileLocusCallback_B_t)(StandTile *arg0, s32 arg1, f32 arg2, f32 arg3, f32 arg4, struct StandTileLocusCallbackRecord *arg5); typedef s32 (*standTileLocusCallback_C_t)(struct StandTile **, s32, struct StandTileLocusCallbackRecord *); typedef s32 (*tilePredicate_t)(struct StandTile *); @@ -556,33 +556,45 @@ typedef union int a; char b; } AnimTable2; - // unknown struct, unknown size. + + typedef struct ModelAnimBitField { + u16 bitOffset; + u8 bitCount; + u8 padding; + u16 valueOffset; + } ModelAnimBitField; + + typedef struct ModelAnimRootMotionChannel + { + u16 bitOffset; + u8 bitCount; + u8 padding; + u16 valueOffset; + } ModelAnimRootMotionChannel; + typedef struct ModelAnimation { s32 address; - u16 unk04; //nextframe - u16 unk06; - u16 unk08; - u16 unk0A; + u16 unk04; // number of frames in the animation + u8 unk06; + u8 unk07; // bit 0 is a loop flag: 0 means freeze anim at end, 1 means loop anim + ModelAnimBitField *bitDescriptors; // 0x08 u16 unk0C; u16 unk0E; - int unk10; - int unk14; - int unk18; - int unk1c; - int unk20; - int unk24; - int unk28; - int unk2c; - int unk30; - int unk34; - int unk38; - int unk3c; //endframe - - // ... + u8 *bitStream; // 0x10 + s32 unk14; + s32 unk18; + s32 unk1c; + s32 unk20; + s32 unk24; + s32 unk28; + s32 unk2c; + s32 unk30; + s32 unk34; + s32 unk38; + s32 unk3c; // end frame } ModelAnimation; - struct object_animation_controller { void *ptranimation; // 0x00 @@ -635,12 +647,12 @@ typedef union */ typedef struct ModelRenderData { - Mtxf *unk_matrix; /*0x00 */ + Mtxf *basemtx; /*0x00*/ // Canonical name. See instcalcmatrices in model.c. bool zbufferenabled; /*0x04*/ u32 flags; /*0x08*/ Gfx *gdl; /*0x0c*/ - Mtxf *mtxlist; /*0x10 */ + Mtxf *mtxlist; /*0x10*/ // Canonical name. See instcalcmatrices in model.c. u32 unk14; /*0x14*/ u32 unk18; /*0x18*/ u32 unk1c; /*0x1c*/ @@ -650,7 +662,7 @@ typedef union u32 unk28; /*0x28*/ u32 unk2c; /*0x2c*/ - s32 PropType; /*0x30*/ + s32 PropType; /*0x30*/ rgba_u8 envcolour; /*0x34*/ rgba_u8 fogcolour; /*0x38*/ u32 cullmode; /*0x3c*/ @@ -663,32 +675,47 @@ typedef union typedef struct Vertex { coord16 coord; - s16 index; /*0x6 Collisions Only - points to vertex*/ + + s16 index; /* 0x6 Collisions Only - points to vertex */ + union { struct { - s16 s; /*0x8*/ - s16 t; /*0xa*/ + s16 s; /* 0x8 */ + s16 t; /* 0xa */ }; + struct Vertex *LinkedTo; + + /* Collision vertices only: points to related model node. */ + void *CollisionRelatedNode; /* 0x8 */ }; + union { - u8 r; /*0xc*/ - u8 nx; + struct + { + u8 r; /* 0xc */ + u8 g; /* 0xd */ + u8 b; /* 0xe */ + u8 a; /* 0xf */ + }; + + struct + { + u8 nx; /* 0xc */ + u8 ny; /* 0xd */ + u8 nz; /* 0xe */ + u8 nflag; /* 0xf */ + }; + + struct + { + s16 CollisionRelatedIndex; /* 0xc */ + s16 CollisionReserved; /* 0xe */ + }; }; - union - { - u8 g; /*0xd*/ - u8 ny; - }; - union - { - u8 b; /*0xe*/ - u8 nz; - }; - u8 a; /*0xf*/ } Vertex; #pragma region OpenFlight Records @@ -814,8 +841,12 @@ typedef union */ typedef struct ModelRoData_HeaderRecord { - u32 ModelType; /*0x0 Legnth of Record (4)*/ - struct ModelRoData_GroupRecord *FirstGroup; /*0x4 First group in tree*/ + u16 AnimPart; /* 0x00 */ + s16 MatrixIndex; /* 0x02 */ + union { + struct ModelRoData_GroupRecord *FirstGroup; /* 0x04 */ /*0x4 First group in tree*/ + ModelNode *FirstGroupNode; + }; union { @@ -878,7 +909,10 @@ typedef union s16 MatrixID2; /*0x12 never used*/ }; }; - struct ModelRoData_GroupRecord *ChildGroup; /*0x14*/ + union { /*0x14*/ + struct ModelRoData_GroupRecord *ChildGroup; + ModelNode *ChildGroupNode; + }; f32 BoundingVolumeRadius; /*0x18*/ } ModelRoData_GroupRecord; @@ -1027,11 +1061,15 @@ typedef union */ typedef struct ModelRoData_Op11Record { - u32 unk0c[16]; /*0x0*/ - f32 BoundingVolumeRadius; - u16 RwDataIndex; /*0x44*/ - u16 unk46; - void* BaseAddr; + union { + coord3d pos; /* 0x00 */ + u32 unk0c[16]; /* 0x00 */ + }; + + f32 BoundingVolumeRadius; /* 0x40 */ + u16 RwDataIndex; /* 0x44 */ + u16 unk46; /* 0x46 */ + void *BaseAddr; /* 0x48 */ } ModelRoData_Op11Record; typedef struct ModelRwData_Op11Record @@ -1066,12 +1104,17 @@ typedef union */ typedef struct ModelRoData_ShadowRecord { - coord2d pos; /*0x0*/ - coord2d size; /*0x8*/ - void *image; /*0x10*/ - ModelRoData_HeaderRecord *Header; /*0x14*/ - f32 Scale; /*0x18*/ - void *BaseAddr; /*0x1C*/ + coord2d pos; /* 0x00 */ + coord2d size; /* 0x08 */ + void *image; /* 0x10 */ + + union { /* 0x14 */ + ModelRoData_HeaderRecord *Header; + ModelNode *HeaderNode; + }; + + f32 Scale; /* 0x18 */ + void *BaseAddr; /* 0x1c */ } ModelRoData_ShadowRecord; /** @@ -1098,29 +1141,59 @@ typedef union */ typedef struct ModelRoData_InterlinkageRecord { - coord3d pos; /*0x0*/ - u32 unknown1; /*0xC*/ - u32 unknown2; /*0x10*/ - u32 unknown3; /*0x14*/ - f32 Scale; /*0x18*/ + coord3d pos; /* 0x00 */ + coord3d pos2; /* 0x0c */ + f32 Scale; /* 0x18 */ } ModelRoData_InterlinkageRecord; /** * Opcode 16 - * unused + * unused but referenced */ typedef struct ModelNode_Op16Record { - coord3d pos; /*0x0*/ - u32 unknown1; /*0xC*/ - u32 unknown2; /*0x10*/ - f32 Scale; /*0x14*/ + coord3d pos; /* 0x00 */ + s16 nodeindex0c; /* 0x0c */ + s16 nodeindex0e; /* 0x0e */ + s16 nodeindex10; /* 0x10 */ + s16 unk12; /* 0x12 */ + f32 Scale; /* 0x14 */ } ModelNode_Op16Record; /** * Opcode 17 - * unused */ + typedef struct ModelRoData_Op17Record + { + s32 hitpart; /* 0x00 */ + f32 radiusSq; /* 0x04 */ + coord3d pos; /* 0x08 */ + ModelNode *othernode; /* 0x14 */ + f32 scale1; /* 0x18 */ + f32 scale2; /* 0x1c */ + } ModelRoData_Op17Record; + + typedef struct + { + u8 pad0[0x8]; + struct + { + coord3d pos; + f32 radiusSq; + coord3d rel; + coord3d dir; + } data; + } ModelOp17MainStack; + + typedef struct + { + struct + { + coord3d axis; + f32 scale; + } axisAdjustment; + u8 pad0[0x0c]; + } ModelOp17AxisStack; /** * Opcode 18 0x12 @@ -1397,9 +1470,8 @@ typedef union */ typedef struct Model { - s16 unk00; /*0x00*/ // objInit() indicates that unk00 is a s16... - s16 Type; /*0x01*/ // but modelInit() indicates that Type is a s16... - // not sure which is correct. + s16 unk00; /*0x00*/ // objInit() indicates that unk00 is a s16... + s16 rwdatalen; /*0x01*/ struct ChrRecord *chr; /*0x04*/ ModelFileHeader *obj; /*0x08 GE Name confirmed*/ @@ -1422,7 +1494,7 @@ typedef union s8 animlooping; /*0x26*/ s8 unk27; - f32 unk28; // animation related + f32 animframe1; /*0x28*/ f32 unk2c; /** @@ -1448,7 +1520,7 @@ typedef union ModelAnimation *anim2; - f32 unk58; + f32 animframe2; /* 0x58*/ f32 unk5c; /** @@ -1468,11 +1540,11 @@ typedef union f32 unk6c; // 0x70 f32 speed2; - s32 unk74; - s32 unk78; + f32 unk74; + f32 unk78; f32 unk7c; // 0x80 - s32 unk80; + f32 unk80; /** * Related to "anim2", per debug message. @@ -1480,22 +1552,21 @@ typedef union f32 unk84; f32 unk88; - s32 unk8c; + f32 unk8c; // 0x90 f32 animloopframe; /*0x90*/ f32 animloopmerge; /*0x94*/ s32 animflipfunc; /*0x98*/ s32 unk9c; // 0xa0 - s32 unka0; + s32 unka0; // This is likely a function pointer, see sub_GAME_7F06D490() f32 playspeed; // used by ACT_STAND in chrlv f32 animrate; f32 unkac; // 0xb0 f32 unkb0; f32 unkb4; - f32 unkb8; // used by ACT_ANIM in chrlv - s32 unkbc; + f32 anim_translation_scale; // used by ACT_ANIM in chrlv } Model; /* @@ -1533,10 +1604,61 @@ typedef union } ExplosionDetailsRecordEuList; #pragma endregion Explosion Stuff +#pragma region Hit Structures + + typedef struct HitThing { + coord3d hitpos; // 0x00 + coord3d normal; // 0x0c + + Vertex *vtx0; // 0x18 + Vertex *vtx1; // 0x1c + Vertex *vtx2; // 0x20 + + Gfx *tricmd; // 0x24 - display-list command associated with hit triangle + + s16 unk28; // 0x28 + s16 texturenum; // 0x2a + + s16 tileformat; // 0x2c + s16 tilesize; // 0x2e + } HitThing; + + typedef struct BulletHit { + f32 dist; // 0x00 + struct PropRecord *prop; // 0x04 + s32 hitpart; // 0x08 + struct ModelNode *node; // 0x0c + HitThing hit; // 0x10, size 0x30 + s32 room; // 0x40 + struct ModelNode *unk44; // 0x44 + struct Model *model; // 0x48 + s32 countsAsPenetration; // 0x4c + } BulletHit; + + typedef struct ShotData { + coord3d viewOrigin; // 0x00 + coord3d viewDir; // 0x0c + ITEM_IDS weapon; // 0x18 + coord3d gunpos; // 0x1c + coord3d dir; // 0x28 + f32 maxdist; // 0x34 + BulletHit hits[10]; // 0x38 + } ShotData; + + typedef struct ModelHitEntry { + struct Model *model; /* 0x00 */ + struct ModelNode *rootnode; /* 0x04 */ + f32 sortvalue; /* 0x08 */ + struct ModelHitEntry *next; /* 0x0c */ + struct ModelHitEntry *prev; /* 0x10 */ + } ModelHitEntry; + +#pragma endregion Hit Structures + #pragma region PadAndPaths /** * Pads hold a location in space and are tied to a specified Stand Tile. - * Other attributes include its roation and normal. + * Other attributes include its rotation and normal. */ typedef struct PadRecord /*0x2c (44) long confirmed*/ { @@ -2176,9 +2298,11 @@ typedef union #pragma region GlobalPropDef /** + * Record for bullet/laser beam tracers. + * * sizeof = 0x2c = 44 bytes. */ - typedef struct ChrRecord_f180 + typedef struct BeamRecord { /***/ s8 unk00; @@ -2197,7 +2321,7 @@ typedef union f32 unk20; f32 unk24; f32 unk28; - } ChrRecord_f180; + } BeamRecord; typedef struct PropDefHeaderRecord @@ -2227,30 +2351,29 @@ typedef union /* unfinished struct, WIP */ typedef struct ChrRecord { - s16 chrnum; /* 0x0000 */ - s8 accuracyrating; /* 0x0002 */ - s8 speedrating; /* 0x0003 */ //0-100 - u8 firecount[2]; /* 0x0004 */ - s8 headnum; /* 0x0006 */ - ACT_TYPE actiontype : 8; /* 0x0007 */ //force 8bit - s8 sleep; /* 0x0008 */ - s8 invalidmove; /* 0x0009 */ - s8 numclosearghs; /* 0x000A */ - s8 numarghs; /* 0x000B */ - u8 fadealpha; /* 0x000C */ - s8 arghrating; /* 0x000D */ - s8 aimendcount; /* 0x000E */ - s8 bodynum; /* 0x000F */ - u8 grenadeprob; /* 0x0010 */ - s8 flinchcnt; /* 0x0011 */ - u16 hidden; /* 0x0012 */ - CHRFLAG chrflags; /* 0x0014 */ - PropRecord *prop; /* 0x0018 */ - Model *model; /* 0x001C */ - /* 0x0020 */ - void *field_20; /* 0x0020 */ //path? - f32 chrwidth; /* 0x0024 */ - f32 chrheight; /* 0x0028 */ + s16 chrnum; /* 0x0000 */ + s8 accuracyrating; /* 0x0002 */ + s8 speedrating; /* 0x0003 */ //0-100 + u8 firecount[2]; /* 0x0004 */ + s8 headnum; /* 0x0006 */ + ACT_TYPE actiontype : 8; /* 0x0007 */ //force 8bit + s8 sleep; /* 0x0008 */ + s8 invalidmove; /* 0x0009 */ + s8 numclosearghs; /* 0x000A */ + s8 numarghs; /* 0x000B */ + u8 fadealpha; /* 0x000C */ + s8 arghrating; /* 0x000D */ + s8 aimendcount; /* 0x000E */ + s8 bodynum; /* 0x000F */ + u8 grenadeprob; /* 0x0010 */ + s8 flinchcnt; /* 0x0011 */ + u16 hidden; /* 0x0012 */ + CHRFLAG chrflags; /* 0x0014 */ + PropRecord *prop; /* 0x0018 */ + Model *model; /* 0x001C */ + ModelHitEntry *field_20; /* 0x0020 */ + f32 chrwidth; /* 0x0024 */ + f32 chrheight; /* 0x0028 */ union { struct act_init act_init; @@ -2348,55 +2471,37 @@ typedef union f32 aimendback; f32 aimendsideback; - /* 0x0160 */ - // this section needs work, see: - // - sub_GAME_7F02BFE4 - // - disable_sounds_attached_to_player_then_something - // there should be some ALSoundState * pointers in here. - // - PropRecord *weapons_held[3]; /* handle_positiondata 0x0160 0x0164 0x0168 Right, Left, Hat*/ - union { - s32 fireslot_word; - s8 fireslot[2]; /* 0x016C 0x0170*/ - }; - int *ptr_SEbuffer3; - int *ptr_SEbuffer4; - int field_178[2]; - //int field_17C; + PropRecord *weapons_held[2]; /* handle_positiondata 0x0160 0x0164 Right, Left */ + struct { /* 0x0168 */ + ALSoundState *ptr_SEbuffer1; + ALSoundState *ptr_SEbuffer2; + } field_160[2]; + s32 field_178[2]; // 0x178-17c /* 0x0180 */ /** * Method chrlvFireWeaponRelated calls CapBeamLengthAndDecideIfRendered, and passes an address * which makes it look like this is an array at ChrRecord offset 180. */ - ChrRecord_f180 unk180[2]; + BeamRecord beams[2]; PropRecord *handle_positiondata_hat; } ChrRecord; // ChrRecord *pChrData; //not Global, local to Object or function + typedef struct ChrRenderContext { + s32 unk00; + ChrRecord *chr; + } ChrRenderContext; + #pragma region IndividualObjectTypes typedef struct collision_data { - s32 edges; // 0x00 - - rect4f polygon; // 0x04 - - s32 unk24; - s32 unk28; - s32 unk2C; - - s32 unk30; - s32 unk34; - s32 unk38; - s32 unk3C; - - s32 unk40; - f32 top; // 0x44 - - // Might be related to collision radius - f32 bottom; // 0x48 + s32 edges; // 0x00 + coord2d polygon[8]; // 0x04 - 0x43 + f32 top; // 0x44 + f32 bottom; // 0x48 } collision_data; typedef struct Projectile { @@ -2418,11 +2523,10 @@ typedef union u32 unk90; f32 unk94; - struct ALSoundState* sound1; // 0x98 - struct ALSoundState* sound2; // 0x9C + struct ALSoundState* sounds[2]; // 0x98 - u32 unkA0; - u32 unkA4; + u32 lastSfxTimer; // 0xa0 + u32 soundSlot; // 0xa4 u32 unkA8; u32 unkAC; @@ -2441,7 +2545,7 @@ typedef union u32 unkD8; u32 unkDC; - u32 unkE0; + u32 age; //0xE0 struct ObjectRecord* obj; // 0xE4; s32 unkE8; } Projectile; @@ -2452,6 +2556,23 @@ typedef union /*0x044*/ struct Projectile *projectile; } Embedment; + // Not exactly sure where this belongs or if it may even already have an existing struct + typedef struct AttachmentChild { + u8 pad00[0x01]; + u8 flags1; // 0x01 + u8 pad02[0x16]; + f32 unk18; // 0x18 + } AttachmentChild; + + // Not exactly sure where this belongs or if it may even already have an existing struct + typedef struct AttachedObj { + u8 pad00[0x10]; + AttachmentChild *child; // 0x10 + Model *model; // 0x14 + Mtxf transform; // 0x18 + coord3d position; // 0x58 + } AttachedObj; + /** * Object (Prop Definition) Record holds common data such as pad and health. */ @@ -2797,7 +2918,7 @@ typedef union */ s8 openstate; - u8 unkbd; /*0xbd*/ + s8 unkbd; /*0xbd*/ // something related to rendering s16 calculatedopacity; /*0xbe*/ @@ -2965,7 +3086,7 @@ typedef union /** * Offset 0xd0. - * Used in object_interaction, setting to zero won't disable. + * Used in objTick, setting to zero won't disable. */ s32 is_active; // 0xD0 @@ -3593,6 +3714,8 @@ typedef union // objtype 48+ #define EndObjectList PropDefHeaderRecord endme = New_PropDefHeaderRecord(48) #pragma endregion IndividualObjectTypes + + #pragma endregion //Propdefs #pragma region Intro @@ -3908,22 +4031,6 @@ typedef struct stagesetup u16 half[3]; }; - - - - - - - - - - - - - - - - typedef struct object_standard { s16 scale; u8 state; @@ -4065,23 +4172,16 @@ struct PortalMetric { f32 max; }; -struct FolderSelect { - s32 unk00; - s32 unk04; - s32 unk08; +struct FolderSelectColour { + s32 red; + s32 green; + s32 blue; }; struct damage_display_val { - s16 unk00; - s16 unk02; - s16 unk04; - s16 unk06; - s16 unk08; - s16 unk0A; - s8 unk0C; - s8 unk0D; - s8 unk0E; - s8 unk0F; + coord16 pos; + coord16 normal; + rgba_u8 colour; }; struct damage_display_parent { diff --git a/src/boot.c b/src/boot.c deleted file mode 100644 index 2b558069..00000000 --- a/src/boot.c +++ /dev/null @@ -1,108 +0,0 @@ -#include -#include "boot.h" -#include -#include "inflate/inflate.h" - -/** - * @file boot.c - * This file sets up initial tlb mapping then jumps to boot1. - * - * In particular, it: - * - also contains functions that grab segment addresses - * - will likely always be asm as it manipulates tlb directly - */ - - -/** - * 1050 70000450 registers 70000000-70400000 in TLB, JR to 70000510 - * technically, this is used in bootcode and used prior to TLB registration - */ -GLOBAL_ASM( -glabel boot -/* 001050 70000450 24020001 */ li $v0, 1 -/* 001054 70000454 24030000 */ li $v1, 0 -/* 001058 70000458 24040000 */ li $a0, 0 -/* 00105C 7000045C 3C057000 */ lui $a1, 0x7000 -/* 001060 70000460 2406001F */ li $a2, 31 -/* 001064 70000464 24070001 */ li $a3, 1 -/* 001068 70000468 3C08007F */ lui $t0, (0x007FE000 >> 16) # lui $t0, 0x7f -/* 00106C 7000046C 3508E000 */ ori $t0, (0x007FE000 & 0xFFFF) # ori $t0, $t0, 0xe000 -/* 001070 70000470 40820000 */ mtc0 $v0, $0 -/* 001074 70000474 00031B02 */ srl $v1, $v1, 0xc -/* 001078 70000478 00031980 */ sll $v1, $v1, 6 -/* 00107C 7000047C 00661821 */ addu $v1, $v1, $a2 -/* 001080 70000480 40831000 */ mtc0 $v1, $2 -/* 001084 70000484 00042302 */ srl $a0, $a0, 0xc -/* 001088 70000488 00042180 */ sll $a0, $a0, 6 -/* 00108C 7000048C 00872021 */ addu $a0, $a0, $a3 -/* 001090 70000490 40841800 */ mtc0 $a0, $3 -/* 001094 70000494 00052342 */ srl $a0, $a1, 0xd -/* 001098 70000498 00042340 */ sll $a0, $a0, 0xd -/* 00109C 7000049C 40845000 */ mtc0 $a0, $10 -/* 0010A0 700004A0 40882800 */ mtc0 $t0, $5 -/* 0010A4 700004A4 00000000 */ nop -/* 0010A8 700004A8 42000002 */ tlbwi -/* 0010AC 700004AC 3C0A7000 */ lui $t2, %hi(init) # $t2, 0x7000 -/* 0010B0 700004B0 254A0510 */ addiu $t2, %lo(init) # addiu $t2, $t2, 0x510 -/* 0010B4 700004B4 01400008 */ jr $t2 -/* 0010B8 700004B8 00000000 */ nop -) - -/** - * Due to alignments the following functions are included here - * these could have been assembly originally, or more likely part - * of the code inserted by the custom makerom rare created - */ - -/** - *10BC 700004BC V0=80020D90: target address for 21990 (USA) - */ -u32 get_csegmentSegmentStart(void) -{ - return &_csegmentSegmentStart; -} - -/** - *10C8 700004C8 V0=21990: ROM address of main compressed block (USA) - */ -u32 get_cdataSegmentRomStart(void) -{ - return &_cdataSegmentRomStart; -} - -/** - *10D4 700004D4 V0=33590: ROM address of 70200000 inflate ASM [33590-34B30 ROM] (USA) - */ -u32 get_cdataSegmentRomEnd(void) -{ - return &_cdataSegmentRomEnd; -} - -/** - *10E0 700004E0 V0=33590: ROM address of 70200000 inflate ASM [33590-34B30 ROM] (USA) - */ -u32 get_inflateSegmentRomStart(void) -{ - return &_inflateSegmentRomStart; -} - -/** - *10EC 700004EC V0=34B30: ROM address of 7F- TLB routines (USA) - */ -u32 get_inflateSegmentRomEnd(void) -{ - return &_inflateSegmentRomEnd; -} - -/** - * 10F8 700004F8 redirect to 7020141C: decompression routine - * accepts: A0=p->source, A1=p->target, A2=p->buffer - * sets A3=7020141C, then jumps to address - */ -GLOBAL_ASM( -glabel jump_decompressfile -/* 0010F8 700004F8 3C077020 */ lui $a3, %hi(decompress_entry) # $a3, 0x7020 -/* 0010FC 700004FC 24E7141C */ addiu $a3, %lo(decompress_entry) # addiu $a3, $a3, 0x141c -/* 001100 70000500 00E00008 */ jr $a3 -/* 001104 70000504 00000000 */ nop -) diff --git a/src/boot.h b/src/boot.h index b8a69577..973a7542 100644 --- a/src/boot.h +++ b/src/boot.h @@ -2,6 +2,7 @@ #define _BOOT_H_ #include +void boot(void); u32 get_csegmentSegmentStart(void); u32 get_cdataSegmentRomStart(void); u32 get_cdataSegmentRomEnd(void); diff --git a/src/boot.s b/src/boot.s new file mode 100644 index 00000000..5066200a --- /dev/null +++ b/src/boot.s @@ -0,0 +1,68 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .text, "ax" + +glabel boot +/* 001050 70000450 24020001 */ li $v0, 1 +/* 001054 70000454 24030000 */ li $v1, 0 +/* 001058 70000458 24040000 */ li $a0, 0 +/* 00105C 7000045C 3C057000 */ lui $a1, 0x7000 +/* 001060 70000460 2406001F */ li $a2, 31 +/* 001064 70000464 24070001 */ li $a3, 1 +/* 001068 70000468 3C08007F */ lui $t0, (0x007FE000 >> 16) +/* 00106C 7000046C 3508E000 */ ori $t0, (0x007FE000 & 0xFFFF) +/* 001070 70000470 40820000 */ mtc0 $v0, $0 +/* 001074 70000474 00031B02 */ srl $v1, $v1, 0xc +/* 001078 70000478 00031980 */ sll $v1, $v1, 6 +/* 00107C 7000047C 00661821 */ addu $v1, $v1, $a2 +/* 001080 70000480 40831000 */ mtc0 $v1, $2 +/* 001084 70000484 00042302 */ srl $a0, $a0, 0xc +/* 001088 70000488 00042180 */ sll $a0, $a0, 6 +/* 00108C 7000048C 00872021 */ addu $a0, $a0, $a3 +/* 001090 70000490 40841800 */ mtc0 $a0, $3 +/* 001094 70000494 00052342 */ srl $a0, $a1, 0xd +/* 001098 70000498 00042340 */ sll $a0, $a0, 0xd +/* 00109C 7000049C 40845000 */ mtc0 $a0, $10 +/* 0010A0 700004A0 40882800 */ mtc0 $t0, $5 +/* 0010A4 700004A4 00000000 */ nop +/* 0010A8 700004A8 42000002 */ tlbwi +/* 0010AC 700004AC 3C0A7000 */ lui $t2, %hi(init) +/* 0010B0 700004B0 254A0510 */ addiu $t2, $t2, %lo(init) +/* 0010B4 700004B4 01400008 */ jr $t2 +/* 0010B8 700004B8 00000000 */ nop + +glabel get_csegmentSegmentStart +/* 0010BC 700004BC 3C028002 */ lui $v0, %hi(_csegmentSegmentStart) +/* 0010C0 700004C0 03E00008 */ jr $ra +/* 0010C4 700004C4 24420D90 */ addiu $v0, $v0, %lo(_csegmentSegmentStart) + +glabel get_cdataSegmentRomStart +/* 0010C8 700004C8 3C020000 */ lui $v0, %hi(_cdataSegmentRomStart) +/* 0010CC 700004CC 03E00008 */ jr $ra +/* 0010D0 700004D0 24421990 */ addiu $v0, $v0, %lo(_cdataSegmentRomStart) + +glabel get_cdataSegmentRomEnd +/* 0010D4 700004D4 3C020000 */ lui $v0, %hi(_cdataSegmentRomEnd) +/* 0010D8 700004D8 03E00008 */ jr $ra +/* 0010DC 700004DC 24423590 */ addiu $v0, $v0, %lo(_cdataSegmentRomEnd) + +glabel get_inflateSegmentRomStart +/* 0010E0 700004E0 3C020000 */ lui $v0, %hi(_inflateSegmentRomStart) +/* 0010E4 700004E4 03E00008 */ jr $ra +/* 0010E8 700004E8 24423590 */ addiu $v0, $v0, %lo(_inflateSegmentRomStart) + +glabel get_inflateSegmentRomEnd +/* 0010EC 700004EC 3C020000 */ lui $v0, %hi(_inflateSegmentRomEnd) +/* 0010F0 700004F0 03E00008 */ jr $ra +/* 0010F4 700004F4 24424B30 */ addiu $v0, $v0, %lo(_inflateSegmentRomEnd) + +glabel jump_decompressfile +/* 0010F8 700004F8 3C077020 */ lui $a3, %hi(decompress_entry) +/* 0010FC 700004FC 24E7141C */ addiu $a3, $a3, %lo(decompress_entry) +/* 001100 70000500 00E00008 */ jr $a3 +/* 001104 70000504 00000000 */ nop \ No newline at end of file diff --git a/src/boss.c b/src/boss.c index afa81538..bfad266f 100644 --- a/src/boss.c +++ b/src/boss.c @@ -228,7 +228,7 @@ void bossInitMainthreadData(void) speedgraphInit(); set_gu_scale(); null_init_main_2(); - sub_GAME_7F000980(); + casingsInit(); alloc_load_expand_ani_table(); init_weapon_animation_groups_maybe(); reset_counter_rand_body_head(); diff --git a/src/fr.c b/src/fr.c index b239aac9..07cb48da 100644 --- a/src/fr.c +++ b/src/fr.c @@ -281,41 +281,30 @@ void viVsyncRelated(void) g_viVstartSign = -g_viVstartSign; } -/** - * 3E98 70003298 - * Some code (and defines) based on n64devkit\ultra\usr\src\pr\demos\blockmonkey\block.c - * - * https://decomp.me/scratch/0yXle 98.52% - * - * decomp status: - * - compiles: yes - * - stack resize: ok - * - identical instructions: fail - * - identical registers: fail - * - * There's a problem loading D_800232C0 the first time (+1 instruction), and again when - * it's being stored (-1 instruction), but the opcodes match other than that. - * Then just some regalloc. - */ -#ifdef NONMATCHING + +#ifndef VERSION_EU void video_related_8(void) { + u32 packedStart; s32 registerValue; f32 calculatedYScale; + s32 yScaleMax; f32 calculatedXScale; VideoSettings *settings; - s32 nextMode; if (g_ViFrontData->mode != g_ViBackData->mode) { - switch (g_ViBackData->mode) + registerValue = g_ViBackData->mode; + + switch (registerValue) { case MD_BLACK: { + if (D_800232C0); + osViSetYScale(1.0f); osViBlack(TRUE); - break; } @@ -345,18 +334,15 @@ void video_related_8(void) } viMode = &g_viOriginalVideoMode; - g_viOriginalHstart = viMode->comRegs.hStart; g_viOriginalVstart0 = viMode->fldRegs[0].vStart; g_viOriginalVstart1 = viMode->fldRegs[1].vStart; frBlack(0); - break; } case MD_MAXIMUM: - { if (osTvType == TV_TYPE_MPAL) { viMode = &osViModeTable[OS_VI_MPAL_HAF1]; @@ -371,10 +357,8 @@ void video_related_8(void) g_viOriginalVstart1 = viMode->fldRegs[1].vStart; osViBlack(FALSE); - break; - } - }; + } osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF); } @@ -382,103 +366,91 @@ void video_related_8(void) calculatedXScale = (f32)g_ViBackData->x / (f32)g_ViBackData->bufx; calculatedYScale = (f32)g_ViBackData->y / (f32)g_ViBackData->bufy; - // osViBlack requires YScale to be 1.0, otherwise, - // "Using it for YScale factors that are not 1.0 creates the potential - // for the video interface to malfunction and enter a state that cannot - // be exited without resetting the system." - if (g_ViBackData->mode == MD_BLACK) - { - calculatedYScale = 1.0f; - } + /* Keep these statements on the same logical source line for IDO scheduling. */ + if (g_ViBackData->mode == MD_BLACK) \ + { \ + calculatedYScale = 1.0f; \ + } nextMode = D_800232C0; - // macro for testing theories ... -#define GET_D_800232C0 D_800232C0 + yScaleMax = YSCALE_MAX; - // current: - // lui t4, 0x0 4ec: R_MIPS_HI16 D_800232C0 - // ... - // addiu t4, t4, 0 4f8: R_MIPS_LO16 D_800232C0 - // ... - // lw t0, 0(t4) - // - // target: - // lui t2, 0x0 4f0: R_MIPS_HI16 D_800232C0 - // ... - // lw t2, 0(t2) 520: R_MIPS_LO16 D_800232C0 + if (1); + if (1); + if (1); + if (1); - g_ViXScales[GET_D_800232C0] = calculatedXScale; - g_ViYScales[GET_D_800232C0] = calculatedYScale; + g_ViXScales[nextMode] = calculatedXScale; + g_ViYScales[nextMode] = calculatedYScale; if (g_ViBackData->mode == VIDEOMODE_320x240) { - g_ViModePtrs[GET_D_800232C0] = &g_viOriginalVideoMode; + g_ViModePtrs[nextMode] = &g_viOriginalVideoMode; if (g_viColorOutputMode != COLORMODE_32BIT) { if (osTvType == TV_TYPE_MPAL) { - g_ViModes[GET_D_800232C0] = osViModeTable[OS_VI_MPAL_LAN1]; + g_ViModes[nextMode] = osViModeTable[OS_VI_MPAL_LAN1]; } else { - g_ViModes[GET_D_800232C0] = osViModeTable[OS_VI_NTSC_LAN1]; + g_ViModes[nextMode] = osViModeTable[OS_VI_NTSC_LAN1]; } } else { if (osTvType == TV_TYPE_MPAL) { - g_ViModes[GET_D_800232C0] = osViModeTable[OS_VI_MPAL_LAN2]; + g_ViModes[nextMode] = osViModeTable[OS_VI_MPAL_LAN2]; } else { - g_ViModes[GET_D_800232C0] = osViModeTable[OS_VI_NTSC_LAN2]; + g_ViModes[nextMode] = osViModeTable[OS_VI_NTSC_LAN2]; } } - g_ViModes[GET_D_800232C0].comRegs.width = g_ViBackData->bufx; - g_ViModes[GET_D_800232C0].comRegs.xScale = ((g_ViBackData->bufx * XSCALE_MAX) / SCREEN_WIDTH_MAX); - g_ViModes[GET_D_800232C0].fldRegs[0].yScale = ((g_ViBackData->bufy * YSCALE_MAX) / SCREEN_HEIGHT_MAX); - g_ViModes[GET_D_800232C0].fldRegs[1].yScale = ((g_ViBackData->bufy * YSCALE_MAX) / SCREEN_HEIGHT_MAX); - g_ViModes[GET_D_800232C0].fldRegs[0].origin = (g_ViBackData->bufx * 2); - g_ViModes[GET_D_800232C0].fldRegs[1].origin = (g_ViBackData->bufx * 2); + g_ViModes[nextMode].comRegs.width = g_ViBackData->bufx; + g_ViModes[nextMode].comRegs.xScale = (g_ViBackData->bufx * XSCALE_MAX) / SCREEN_WIDTH_MAX; - registerValue = g_ViModes[GET_D_800232C0].comRegs.hStart; + if (1) + { + g_ViModes[nextMode].fldRegs[0].yScale = (g_ViBackData->bufy * yScaleMax) / SCREEN_HEIGHT_MAX; + } + + packedStart = g_ViModes[nextMode].comRegs.hStart; + + g_ViModes[nextMode].fldRegs[1].yScale = (g_ViBackData->bufy * yScaleMax) / SCREEN_HEIGHT_MAX; + g_ViModes[nextMode].fldRegs[0].origin = g_ViBackData->bufx * 2; + g_ViModes[nextMode].fldRegs[1].origin = g_ViBackData->bufx * 2; + + registerValue = packedStart; registerValue = ADD_LOW_AND_HI_16_MOD(registerValue, g_viHorizontalOffset); - g_ViModes[GET_D_800232C0].comRegs.hStart = registerValue; + + g_ViModes[nextMode].comRegs.hStart = registerValue; g_viOriginalHstart = registerValue; - registerValue = g_ViModes[GET_D_800232C0].fldRegs[0].vStart; + packedStart = g_ViModes[nextMode].fldRegs[0].vStart; + registerValue = packedStart; registerValue = ADD_LOW_AND_HI_16_MOD(registerValue, D_800232A0); - g_ViModes[GET_D_800232C0].fldRegs[0].vStart = registerValue; + + g_ViModes[nextMode].fldRegs[0].vStart = registerValue; g_viOriginalVstart0 = registerValue; - registerValue = g_ViModes[GET_D_800232C0].fldRegs[1].vStart; + packedStart = g_ViModes[nextMode].fldRegs[1].vStart; + registerValue = packedStart; registerValue = ADD_LOW_AND_HI_16_MOD(registerValue, D_800232A0); - g_ViModes[GET_D_800232C0].fldRegs[1].vStart = registerValue; + + g_ViModes[nextMode].fldRegs[1].vStart = registerValue; g_viOriginalVstart1 = registerValue; - g_ViChangeVideoModes[GET_D_800232C0] = 1; + g_ViChangeVideoModes[nextMode] = 1; } else { - g_ViChangeVideoModes[GET_D_800232C0] = 0; + g_ViChangeVideoModes[nextMode] = 0; } - // current: - // ... - // sw t9, 0(t4) - // - // target: - // lui at, 0x0 98c: R_MIPS_HI16 D_800232C0 - // ... - // lw sw, 0(at) 994: R_MIPS_LO16 D_800232C0 - - // This is probably just a happy little accident, but this causes the - // rest of the function to match. - // Instead if probably looks like the increment+mod a few lines later: - // //D_800232C0 = (D_800232C0 + 1) % NUM_VIDEO_FRAME_BUFFERS; - nextMode = (D_800232C0 + 1) % NUM_VIDEO_FRAME_BUFFERS; + nextMode = (nextMode + 1) % NUM_VIDEO_FRAME_BUFFERS; D_800232C0 = nextMode; if (g_viColorOutputMode != COLORMODE_32BIT) @@ -496,1119 +468,156 @@ void video_related_8(void) g_ViBackIndex = (g_ViBackIndex + 1) % NUM_VIDEO_SETTINGS; g_ViFrontData = g_ViDataArray + g_ViFrontIndex; - g_ViBackData = g_ViDataArray + g_ViBackIndex; + g_ViBackData = g_ViDataArray + g_ViBackIndex; bcopy(settings, g_ViBackData, sizeof(VideoSettings)); + g_ViBackData->framebuf = cfb_16[g_ViBackIndex]; } -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.text -glabel video_related_8 -/* 003E98 70003298 3C0D8002 */ lui $t5, %hi(g_ViBackData) -/* 003E9C 7000329C 25AD32A8 */ addiu $t5, %lo(g_ViBackData) # addiu $t5, $t5, 0x32a8 -/* 003EA0 700032A0 3C0E8002 */ lui $t6, %hi(g_ViFrontData) -/* 003EA4 700032A4 8DCE32A4 */ lw $t6, %lo(g_ViFrontData)($t6) -/* 003EA8 700032A8 8DA80000 */ lw $t0, ($t5) -/* 003EAC 700032AC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 003EB0 700032B0 AFBF0014 */ sw $ra, 0x14($sp) -/* 003EB4 700032B4 91CF0000 */ lbu $t7, ($t6) -/* 003EB8 700032B8 91020000 */ lbu $v0, ($t0) -/* 003EBC 700032BC 504F009B */ beql $v0, $t7, .L7000352C -/* 003EC0 700032C0 850F0004 */ lh $t7, 4($t0) -/* 003EC4 700032C4 10400009 */ beqz $v0, .L700032EC -/* 003EC8 700032C8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 003ECC 700032CC 24010001 */ li $at, 1 -/* 003ED0 700032D0 1041000D */ beq $v0, $at, .L70003308 -/* 003ED4 700032D4 3C188002 */ lui $t8, %hi(g_viColorOutputMode) -/* 003ED8 700032D8 24010002 */ li $at, 2 -/* 003EDC 700032DC 10410071 */ beq $v0, $at, .L700034A4 -/* 003EE0 700032E0 3C198000 */ lui $t9, 0x8000 -/* 003EE4 700032E4 10000089 */ b .L7000350C -/* 003EE8 700032E8 00000000 */ nop -.L700032EC: -/* 003EEC 700032EC 44816000 */ mtc1 $at, $f12 -/* 003EF0 700032F0 0C003880 */ jal osViSetYScale -/* 003EF4 700032F4 00000000 */ nop -/* 003EF8 700032F8 0C0038B4 */ jal osViBlack -/* 003EFC 700032FC 24040001 */ li $a0, 1 -/* 003F00 70003300 10000082 */ b .L7000350C -/* 003F04 70003304 00000000 */ nop -.L70003308: -/* 003F08 70003308 8F1832AC */ lw $t8, %lo(g_viColorOutputMode)($t8) -/* 003F0C 7000330C 3C038006 */ lui $v1, %hi(viMode) -/* 003F10 70003310 3C0F8000 */ lui $t7, 0x8000 -/* 003F14 70003314 1300002B */ beqz $t8, .L700033C4 -/* 003F18 70003318 2463087C */ addiu $v1, %lo(viMode) # addiu $v1, $v1, 0x87c -/* 003F1C 7000331C 3C198000 */ lui $t9, %hi(osTvType) -/* 003F20 70003320 8F390300 */ lw $t9, %lo(osTvType)($t9) -/* 003F24 70003324 24010002 */ li $at, 2 -/* 003F28 70003328 3C188006 */ lui $t8, %hi(g_viOriginalVideoMode) -/* 003F2C 7000332C 17210014 */ bne $t9, $at, .L70003380 -/* 003F30 70003330 27180828 */ addiu $t8, %lo(g_viOriginalVideoMode) # addiu $t8, $t8, 0x828 -/* 003F34 70003334 3C0F8002 */ lui $t7, %hi(osViModeTable + 2400) -/* 003F38 70003338 25EF7320 */ addiu $t7, %lo(osViModeTable + 2400) # addiu $t7, $t7, 0x7320 -/* 003F3C 7000333C 3C0E8006 */ lui $t6, %hi(g_viOriginalVideoMode) -/* 003F40 70003340 25CE0828 */ addiu $t6, %lo(g_viOriginalVideoMode) # addiu $t6, $t6, 0x828 -/* 003F44 70003344 25F90048 */ addiu $t9, $t7, 0x48 -.L70003348: -/* 003F48 70003348 8DE10000 */ lw $at, ($t7) -/* 003F4C 7000334C 25EF000C */ addiu $t7, $t7, 0xc -/* 003F50 70003350 25CE000C */ addiu $t6, $t6, 0xc -/* 003F54 70003354 ADC1FFF4 */ sw $at, -0xc($t6) -/* 003F58 70003358 8DE1FFF8 */ lw $at, -8($t7) -/* 003F5C 7000335C ADC1FFF8 */ sw $at, -8($t6) -/* 003F60 70003360 8DE1FFFC */ lw $at, -4($t7) -/* 003F64 70003364 15F9FFF8 */ bne $t7, $t9, .L70003348 -/* 003F68 70003368 ADC1FFFC */ sw $at, -4($t6) -/* 003F6C 7000336C 8DE10000 */ lw $at, ($t7) -/* 003F70 70003370 8DF90004 */ lw $t9, 4($t7) -/* 003F74 70003374 ADC10000 */ sw $at, ($t6) -/* 003F78 70003378 1000003A */ b .L70003464 -/* 003F7C 7000337C ADD90004 */ sw $t9, 4($t6) -.L70003380: -/* 003F80 70003380 3C198002 */ lui $t9, %hi(osViModeTable + 160) -/* 003F84 70003384 27396A60 */ addiu $t9, %lo(osViModeTable + 160) # addiu $t9, $t9, 0x6a60 -/* 003F88 70003388 272E0048 */ addiu $t6, $t9, 0x48 -.L7000338C: -/* 003F8C 7000338C 8F210000 */ lw $at, ($t9) -/* 003F90 70003390 2739000C */ addiu $t9, $t9, 0xc -/* 003F94 70003394 2718000C */ addiu $t8, $t8, 0xc -/* 003F98 70003398 AF01FFF4 */ sw $at, -0xc($t8) -/* 003F9C 7000339C 8F21FFF8 */ lw $at, -8($t9) -/* 003FA0 700033A0 AF01FFF8 */ sw $at, -8($t8) -/* 003FA4 700033A4 8F21FFFC */ lw $at, -4($t9) -/* 003FA8 700033A8 172EFFF8 */ bne $t9, $t6, .L7000338C -/* 003FAC 700033AC AF01FFFC */ sw $at, -4($t8) -/* 003FB0 700033B0 8F210000 */ lw $at, ($t9) -/* 003FB4 700033B4 8F2E0004 */ lw $t6, 4($t9) -/* 003FB8 700033B8 AF010000 */ sw $at, ($t8) -/* 003FBC 700033BC 10000029 */ b .L70003464 -/* 003FC0 700033C0 AF0E0004 */ sw $t6, 4($t8) -.L700033C4: -/* 003FC4 700033C4 8DEF0300 */ lw $t7, 0x300($t7) -/* 003FC8 700033C8 24010002 */ li $at, 2 -/* 003FCC 700033CC 3C188006 */ lui $t8, %hi(g_viOriginalVideoMode) -/* 003FD0 700033D0 15E10014 */ bne $t7, $at, .L70003424 -/* 003FD4 700033D4 27180828 */ addiu $t8, %lo(g_viOriginalVideoMode) # addiu $t8, $t8, 0x828 -/* 003FD8 700033D8 3C198002 */ lui $t9, %hi(osViModeTable + 2720) -/* 003FDC 700033DC 27397460 */ addiu $t9, %lo(osViModeTable + 2720) # addiu $t9, $t9, 0x7460 -/* 003FE0 700033E0 3C0E8006 */ lui $t6, %hi(g_viOriginalVideoMode) -/* 003FE4 700033E4 25CE0828 */ addiu $t6, %lo(g_viOriginalVideoMode) # addiu $t6, $t6, 0x828 -/* 003FE8 700033E8 272F0048 */ addiu $t7, $t9, 0x48 -.L700033EC: -/* 003FEC 700033EC 8F210000 */ lw $at, ($t9) -/* 003FF0 700033F0 2739000C */ addiu $t9, $t9, 0xc -/* 003FF4 700033F4 25CE000C */ addiu $t6, $t6, 0xc -/* 003FF8 700033F8 ADC1FFF4 */ sw $at, -0xc($t6) -/* 003FFC 700033FC 8F21FFF8 */ lw $at, -8($t9) -/* 004000 70003400 ADC1FFF8 */ sw $at, -8($t6) -/* 004004 70003404 8F21FFFC */ lw $at, -4($t9) -/* 004008 70003408 172FFFF8 */ bne $t9, $t7, .L700033EC -/* 00400C 7000340C ADC1FFFC */ sw $at, -4($t6) -/* 004010 70003410 8F210000 */ lw $at, ($t9) -/* 004014 70003414 8F2F0004 */ lw $t7, 4($t9) -/* 004018 70003418 ADC10000 */ sw $at, ($t6) -/* 00401C 7000341C 10000011 */ b .L70003464 -/* 004020 70003420 ADCF0004 */ sw $t7, 4($t6) -.L70003424: -/* 004024 70003424 3C0F8002 */ lui $t7, %hi(osViModeTable + 480) -/* 004028 70003428 25EF6BA0 */ addiu $t7, %lo(osViModeTable + 480) # addiu $t7, $t7, 0x6ba0 -/* 00402C 7000342C 25EE0048 */ addiu $t6, $t7, 0x48 -.L70003430: -/* 004030 70003430 8DE10000 */ lw $at, ($t7) -/* 004034 70003434 25EF000C */ addiu $t7, $t7, 0xc -/* 004038 70003438 2718000C */ addiu $t8, $t8, 0xc -/* 00403C 7000343C AF01FFF4 */ sw $at, -0xc($t8) -/* 004040 70003440 8DE1FFF8 */ lw $at, -8($t7) -/* 004044 70003444 AF01FFF8 */ sw $at, -8($t8) -/* 004048 70003448 8DE1FFFC */ lw $at, -4($t7) -/* 00404C 7000344C 15EEFFF8 */ bne $t7, $t6, .L70003430 -/* 004050 70003450 AF01FFFC */ sw $at, -4($t8) -/* 004054 70003454 8DE10000 */ lw $at, ($t7) -/* 004058 70003458 8DEE0004 */ lw $t6, 4($t7) -/* 00405C 7000345C AF010000 */ sw $at, ($t8) -/* 004060 70003460 AF0E0004 */ sw $t6, 4($t8) -.L70003464: -/* 004064 70003464 3C198006 */ lui $t9, %hi(g_viOriginalVideoMode) -/* 004068 70003468 27390828 */ addiu $t9, %lo(g_viOriginalVideoMode) # addiu $t9, $t9, 0x828 -/* 00406C 7000346C AC790000 */ sw $t9, ($v1) -/* 004070 70003470 8F2E001C */ lw $t6, 0x1c($t9) -/* 004074 70003474 3C018006 */ lui $at, %hi(viMode+0x4) -/* 004078 70003478 00002025 */ move $a0, $zero -/* 00407C 7000347C AC2E0880 */ sw $t6, %lo(viMode+0x4)($at) -/* 004080 70003480 8F2F0030 */ lw $t7, 0x30($t9) -/* 004084 70003484 3C018006 */ lui $at, %hi(viMode+0x8) -/* 004088 70003488 AC2F0884 */ sw $t7, %lo(viMode+0x8)($at) -/* 00408C 7000348C 8F380044 */ lw $t8, 0x44($t9) -/* 004090 70003490 3C018006 */ lui $at, %hi(viMode+0xC) -/* 004094 70003494 0C000C64 */ jal frBlack -/* 004098 70003498 AC380888 */ sw $t8, %lo(viMode+0xC)($at) -/* 00409C 7000349C 1000001B */ b .L7000350C -/* 0040A0 700034A0 00000000 */ nop -.L700034A4: -/* 0040A4 700034A4 8F390300 */ lw $t9, 0x300($t9) -/* 0040A8 700034A8 24010002 */ li $at, 2 -/* 0040AC 700034AC 3C038006 */ lui $v1, %hi(viMode) -/* 0040B0 700034B0 17210007 */ bne $t9, $at, .L700034D0 -/* 0040B4 700034B4 2463087C */ addiu $v1, %lo(viMode) # addiu $v1, $v1, 0x87c -/* 0040B8 700034B8 3C038006 */ lui $v1, %hi(viMode) -/* 0040BC 700034BC 3C0E8002 */ lui $t6, %hi(osViModeTable + 3120) -/* 0040C0 700034C0 2463087C */ addiu $v1, %lo(viMode) # addiu $v1, $v1, 0x87c -/* 0040C4 700034C4 25CE75F0 */ addiu $t6, %lo(osViModeTable + 3120) # addiu $t6, $t6, 0x75f0 -/* 0040C8 700034C8 10000004 */ b .L700034DC -/* 0040CC 700034CC AC6E0000 */ sw $t6, ($v1) -.L700034D0: -/* 0040D0 700034D0 3C0F8002 */ lui $t7, %hi(osViModeTable + 880) -/* 0040D4 700034D4 25EF6D30 */ addiu $t7, %lo(osViModeTable + 880) # addiu $t7, $t7, 0x6d30 -/* 0040D8 700034D8 AC6F0000 */ sw $t7, ($v1) -.L700034DC: -/* 0040DC 700034DC 8C620000 */ lw $v0, ($v1) -/* 0040E0 700034E0 3C018006 */ lui $at, %hi(viMode+0x4) -/* 0040E4 700034E4 00002025 */ move $a0, $zero -/* 0040E8 700034E8 8C58001C */ lw $t8, 0x1c($v0) -/* 0040EC 700034EC AC380880 */ sw $t8, %lo(viMode+0x4)($at) -/* 0040F0 700034F0 8C590030 */ lw $t9, 0x30($v0) -/* 0040F4 700034F4 3C018006 */ lui $at, %hi(viMode+0x8) -/* 0040F8 700034F8 AC390884 */ sw $t9, %lo(viMode+0x8)($at) -/* 0040FC 700034FC 8C4E0044 */ lw $t6, 0x44($v0) -/* 004100 70003500 3C018006 */ lui $at, %hi(viMode+0xC) -/* 004104 70003504 0C0038B4 */ jal osViBlack -/* 004108 70003508 AC2E0888 */ sw $t6, %lo(viMode+0xC)($at) -.L7000350C: -/* 00410C 7000350C 0C003DEC */ jal osViSetSpecialFeatures -/* 004110 70003510 24040042 */ li $a0, 66 -/* 004114 70003514 3C088002 */ lui $t0, %hi(g_ViBackData) -/* 004118 70003518 8D0832A8 */ lw $t0, %lo(g_ViBackData)($t0) -/* 00411C 7000351C 3C0D8002 */ lui $t5, %hi(g_ViBackData) -/* 004120 70003520 25AD32A8 */ addiu $t5, %lo(g_ViBackData) # addiu $t5, $t5, 0x32a8 -/* 004124 70003524 91020000 */ lbu $v0, ($t0) -/* 004128 70003528 850F0004 */ lh $t7, 4($t0) -.L7000352C: -/* 00412C 7000352C 85180018 */ lh $t8, 0x18($t0) -/* 004130 70003530 85190006 */ lh $t9, 6($t0) -/* 004134 70003534 448F2000 */ mtc1 $t7, $f4 -/* 004138 70003538 850E001A */ lh $t6, 0x1a($t0) -/* 00413C 7000353C 44984000 */ mtc1 $t8, $f8 -/* 004140 70003540 468021A0 */ cvt.s.w $f6, $f4 -/* 004144 70003544 44998000 */ mtc1 $t9, $f16 -/* 004148 70003548 448E2000 */ mtc1 $t6, $f4 -/* 00414C 7000354C 3C188006 */ lui $t8, %hi(g_viOriginalVideoMode) -/* 004150 70003550 3C0A8002 */ lui $t2, %hi(D_800232C0) -/* 004154 70003554 468042A0 */ cvt.s.w $f10, $f8 -/* 004158 70003558 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 00415C 7000355C 27180828 */ addiu $t8, %lo(g_viOriginalVideoMode) # addiu $t8, $t8, 0x828 -/* 004160 70003560 3C0B8002 */ lui $t3, %hi(g_viColorOutputMode) -/* 004164 70003564 468084A0 */ cvt.s.w $f18, $f16 -/* 004168 70003568 46802220 */ cvt.s.w $f8, $f4 -/* 00416C 7000356C 460A3083 */ div.s $f2, $f6, $f10 -/* 004170 70003570 14400003 */ bnez $v0, .L70003580 -/* 004174 70003574 46089003 */ div.s $f0, $f18, $f8 -/* 004178 70003578 44810000 */ mtc1 $at, $f0 -/* 00417C 7000357C 00000000 */ nop -.L70003580: -/* 004180 70003580 8D4A32C0 */ lw $t2, %lo(D_800232C0)($t2) -/* 004184 70003584 3C018002 */ lui $at, %hi(g_ViXScales) -/* 004188 70003588 000A4880 */ sll $t1, $t2, 2 -/* 00418C 7000358C 00290821 */ addu $at, $at, $t1 -/* 004190 70003590 E42230B4 */ swc1 $f2, %lo(g_ViXScales)($at) -/* 004194 70003594 3C018002 */ lui $at, %hi(g_ViYScales) -/* 004198 70003598 00290821 */ addu $at, $at, $t1 -/* 00419C 7000359C E42030BC */ swc1 $f0, %lo(g_ViYScales)($at) -/* 0041A0 700035A0 910F0000 */ lbu $t7, ($t0) -/* 0041A4 700035A4 24010001 */ li $at, 1 -/* 0041A8 700035A8 15E10105 */ bne $t7, $at, .L700039C0 -/* 0041AC 700035AC 00000000 */ nop -/* 0041B0 700035B0 8D6B32AC */ lw $t3, %lo(g_viColorOutputMode)($t3) -/* 0041B4 700035B4 3C018006 */ lui $at, %hi(g_ViModePtrs) -/* 0041B8 700035B8 00290821 */ addu $at, $at, $t1 -/* 0041BC 700035BC 11600035 */ beqz $t3, .L70003694 -/* 0041C0 700035C0 AC38DBE0 */ sw $t8, %lo(g_ViModePtrs)($at) -/* 0041C4 700035C4 3C198000 */ lui $t9, %hi(osTvType) -/* 0041C8 700035C8 8F390300 */ lw $t9, %lo(osTvType)($t9) -/* 0041CC 700035CC 24010002 */ li $at, 2 -/* 0041D0 700035D0 3C0E8006 */ lui $t6, %hi(g_ViModes) -/* 0041D4 700035D4 17210019 */ bne $t9, $at, .L7000363C -/* 0041D8 700035D8 25CEDB40 */ addiu $t6, %lo(g_ViModes) # addiu $t6, $t6, -0x24c0 -/* 0041DC 700035DC 000A7080 */ sll $t6, $t2, 2 -/* 0041E0 700035E0 01CA7021 */ addu $t6, $t6, $t2 -/* 0041E4 700035E4 3C0F8006 */ lui $t7, %hi(g_ViModes) -/* 0041E8 700035E8 25EFDB40 */ addiu $t7, %lo(g_ViModes) # addiu $t7, $t7, -0x24c0 -/* 0041EC 700035EC 000E7100 */ sll $t6, $t6, 4 -/* 0041F0 700035F0 01CF1821 */ addu $v1, $t6, $t7 -/* 0041F4 700035F4 3C188002 */ lui $t8, %hi(osViModeTable + 2400) -/* 0041F8 700035F8 27187320 */ addiu $t8, %lo(osViModeTable + 2400) # addiu $t8, $t8, 0x7320 -/* 0041FC 700035FC 270E0048 */ addiu $t6, $t8, 0x48 -/* 004200 70003600 00607825 */ move $t7, $v1 -.L70003604: -/* 004204 70003604 8F010000 */ lw $at, ($t8) -/* 004208 70003608 2718000C */ addiu $t8, $t8, 0xc -/* 00420C 7000360C 25EF000C */ addiu $t7, $t7, 0xc -/* 004210 70003610 ADE1FFF4 */ sw $at, -0xc($t7) -/* 004214 70003614 8F01FFF8 */ lw $at, -8($t8) -/* 004218 70003618 ADE1FFF8 */ sw $at, -8($t7) -/* 00421C 7000361C 8F01FFFC */ lw $at, -4($t8) -/* 004220 70003620 170EFFF8 */ bne $t8, $t6, .L70003604 -/* 004224 70003624 ADE1FFFC */ sw $at, -4($t7) -/* 004228 70003628 8F010000 */ lw $at, ($t8) -/* 00422C 7000362C ADE10000 */ sw $at, ($t7) -/* 004230 70003630 8F0E0004 */ lw $t6, 4($t8) -/* 004234 70003634 1000004A */ b .L70003760 -/* 004238 70003638 ADEE0004 */ sw $t6, 4($t7) -.L7000363C: -/* 00423C 7000363C 000AC880 */ sll $t9, $t2, 2 -/* 004240 70003640 032AC821 */ addu $t9, $t9, $t2 -/* 004244 70003644 0019C900 */ sll $t9, $t9, 4 -/* 004248 70003648 032E1821 */ addu $v1, $t9, $t6 -/* 00424C 7000364C 3C188002 */ lui $t8, %hi(osViModeTable + 160) -/* 004250 70003650 27186A60 */ addiu $t8, %lo(osViModeTable + 160) # addiu $t8, $t8, 0x6a60 -/* 004254 70003654 27190048 */ addiu $t9, $t8, 0x48 -/* 004258 70003658 00607025 */ move $t6, $v1 -.L7000365C: -/* 00425C 7000365C 8F010000 */ lw $at, ($t8) -/* 004260 70003660 2718000C */ addiu $t8, $t8, 0xc -/* 004264 70003664 25CE000C */ addiu $t6, $t6, 0xc -/* 004268 70003668 ADC1FFF4 */ sw $at, -0xc($t6) -/* 00426C 7000366C 8F01FFF8 */ lw $at, -8($t8) -/* 004270 70003670 ADC1FFF8 */ sw $at, -8($t6) -/* 004274 70003674 8F01FFFC */ lw $at, -4($t8) -/* 004278 70003678 1719FFF8 */ bne $t8, $t9, .L7000365C -/* 00427C 7000367C ADC1FFFC */ sw $at, -4($t6) -/* 004280 70003680 8F010000 */ lw $at, ($t8) -/* 004284 70003684 ADC10000 */ sw $at, ($t6) -/* 004288 70003688 8F190004 */ lw $t9, 4($t8) -/* 00428C 7000368C 10000034 */ b .L70003760 -/* 004290 70003690 ADD90004 */ sw $t9, 4($t6) -.L70003694: -/* 004294 70003694 3C0F8000 */ lui $t7, %hi(osTvType) -/* 004298 70003698 8DEF0300 */ lw $t7, %lo(osTvType)($t7) -/* 00429C 7000369C 24010002 */ li $at, 2 -/* 0042A0 700036A0 15E10018 */ bne $t7, $at, .L70003704 -/* 0042A4 700036A4 000AC880 */ sll $t9, $t2, 2 -/* 0042A8 700036A8 032AC821 */ addu $t9, $t9, $t2 -/* 0042AC 700036AC 3C188006 */ lui $t8, %hi(g_ViModes) -/* 0042B0 700036B0 2718DB40 */ addiu $t8, %lo(g_ViModes) # addiu $t8, $t8, -0x24c0 -/* 0042B4 700036B4 0019C900 */ sll $t9, $t9, 4 -/* 0042B8 700036B8 03381821 */ addu $v1, $t9, $t8 -/* 0042BC 700036BC 3C0E8002 */ lui $t6, %hi(osViModeTable + 2720) -/* 0042C0 700036C0 25CE7460 */ addiu $t6, %lo(osViModeTable + 2720) # addiu $t6, $t6, 0x7460 -/* 0042C4 700036C4 25D90048 */ addiu $t9, $t6, 0x48 -/* 0042C8 700036C8 0060C025 */ move $t8, $v1 -.L700036CC: -/* 0042CC 700036CC 8DC10000 */ lw $at, ($t6) -/* 0042D0 700036D0 25CE000C */ addiu $t6, $t6, 0xc -/* 0042D4 700036D4 2718000C */ addiu $t8, $t8, 0xc -/* 0042D8 700036D8 AF01FFF4 */ sw $at, -0xc($t8) -/* 0042DC 700036DC 8DC1FFF8 */ lw $at, -8($t6) -/* 0042E0 700036E0 AF01FFF8 */ sw $at, -8($t8) -/* 0042E4 700036E4 8DC1FFFC */ lw $at, -4($t6) -/* 0042E8 700036E8 15D9FFF8 */ bne $t6, $t9, .L700036CC -/* 0042EC 700036EC AF01FFFC */ sw $at, -4($t8) -/* 0042F0 700036F0 8DC10000 */ lw $at, ($t6) -/* 0042F4 700036F4 AF010000 */ sw $at, ($t8) -/* 0042F8 700036F8 8DD90004 */ lw $t9, 4($t6) -/* 0042FC 700036FC 10000018 */ b .L70003760 -/* 004300 70003700 AF190004 */ sw $t9, 4($t8) -.L70003704: -/* 004304 70003704 000A7880 */ sll $t7, $t2, 2 -/* 004308 70003708 01EA7821 */ addu $t7, $t7, $t2 -/* 00430C 7000370C 3C198006 */ lui $t9, %hi(g_ViModes) -/* 004310 70003710 2739DB40 */ addiu $t9, %lo(g_ViModes) # addiu $t9, $t9, -0x24c0 -/* 004314 70003714 000F7900 */ sll $t7, $t7, 4 -/* 004318 70003718 01F91821 */ addu $v1, $t7, $t9 -/* 00431C 7000371C 3C0E8002 */ lui $t6, %hi(osViModeTable + 480) -/* 004320 70003720 25CE6BA0 */ addiu $t6, %lo(osViModeTable + 480) # addiu $t6, $t6, 0x6ba0 -/* 004324 70003724 25CF0048 */ addiu $t7, $t6, 0x48 -/* 004328 70003728 0060C825 */ move $t9, $v1 -.L7000372C: -/* 00432C 7000372C 8DC10000 */ lw $at, ($t6) -/* 004330 70003730 25CE000C */ addiu $t6, $t6, 0xc -/* 004334 70003734 2739000C */ addiu $t9, $t9, 0xc -/* 004338 70003738 AF21FFF4 */ sw $at, -0xc($t9) -/* 00433C 7000373C 8DC1FFF8 */ lw $at, -8($t6) -/* 004340 70003740 AF21FFF8 */ sw $at, -8($t9) -/* 004344 70003744 8DC1FFFC */ lw $at, -4($t6) -/* 004348 70003748 15CFFFF8 */ bne $t6, $t7, .L7000372C -/* 00434C 7000374C AF21FFFC */ sw $at, -4($t9) -/* 004350 70003750 8DC10000 */ lw $at, ($t6) -/* 004354 70003754 AF210000 */ sw $at, ($t9) -/* 004358 70003758 8DCF0004 */ lw $t7, 4($t6) -/* 00435C 7000375C AF2F0004 */ sw $t7, 4($t9) -.L70003760: -/* 004360 70003760 85180018 */ lh $t8, 0x18($t0) -/* 004364 70003764 24010280 */ li $at, 640 -/* 004368 70003768 240C01E0 */ li $t4, 480 -/* 00436C 7000376C AC780008 */ sw $t8, 8($v1) -/* 004370 70003770 850F0018 */ lh $t7, 0x18($t0) -/* 004374 70003774 8C62001C */ lw $v0, 0x1c($v1) -/* 004378 70003778 3C078002 */ lui $a3, %hi(g_viHorizontalOffset) -/* 00437C 7000377C 000F7280 */ sll $t6, $t7, 0xa -/* 004380 70003780 01C1001A */ div $zero, $t6, $at -/* 004384 70003784 0000C812 */ mflo $t9 -/* 004388 70003788 AC790020 */ sw $t9, 0x20($v1) -/* 00438C 7000378C 8518001A */ lh $t8, 0x1a($t0) -/* 004390 70003790 3406FFFF */ li $a2, 65535 -/* 004394 70003794 3C058002 */ lui $a1, %hi(D_800232A0) -/* 004398 70003798 00187AC0 */ sll $t7, $t8, 0xb -/* 00439C 7000379C 01EC001A */ div $zero, $t7, $t4 -/* 0043A0 700037A0 00007012 */ mflo $t6 -/* 0043A4 700037A4 AC6E002C */ sw $t6, 0x2c($v1) -/* 0043A8 700037A8 8519001A */ lh $t9, 0x1a($t0) -/* 0043AC 700037AC 15800002 */ bnez $t4, .L700037B8 -/* 0043B0 700037B0 00000000 */ nop -/* 0043B4 700037B4 0007000D */ break 7 -.L700037B8: -/* 0043B8 700037B8 2401FFFF */ li $at, -1 -/* 0043BC 700037BC 15810004 */ bne $t4, $at, .L700037D0 -/* 0043C0 700037C0 3C018000 */ lui $at, 0x8000 -/* 0043C4 700037C4 15E10002 */ bne $t7, $at, .L700037D0 -/* 0043C8 700037C8 00000000 */ nop -/* 0043CC 700037CC 0006000D */ break 6 -.L700037D0: -/* 0043D0 700037D0 0019C2C0 */ sll $t8, $t9, 0xb -/* 0043D4 700037D4 030C001A */ div $zero, $t8, $t4 -/* 0043D8 700037D8 00007812 */ mflo $t7 -/* 0043DC 700037DC AC6F0040 */ sw $t7, 0x40($v1) -/* 0043E0 700037E0 850E0018 */ lh $t6, 0x18($t0) -/* 0043E4 700037E4 15800002 */ bnez $t4, .L700037F0 -/* 0043E8 700037E8 00000000 */ nop -/* 0043EC 700037EC 0007000D */ break 7 -.L700037F0: -/* 0043F0 700037F0 2401FFFF */ li $at, -1 -/* 0043F4 700037F4 15810004 */ bne $t4, $at, .L70003808 -/* 0043F8 700037F8 3C018000 */ lui $at, 0x8000 -/* 0043FC 700037FC 17010002 */ bne $t8, $at, .L70003808 -/* 004400 70003800 00000000 */ nop -/* 004404 70003804 0006000D */ break 6 -.L70003808: -/* 004408 70003808 000EC840 */ sll $t9, $t6, 1 -/* 00440C 7000380C AC790028 */ sw $t9, 0x28($v1) -/* 004410 70003810 85180018 */ lh $t8, 0x18($t0) -/* 004414 70003814 00027403 */ sra $t6, $v0, 0x10 -/* 004418 70003818 31D9FFFF */ andi $t9, $t6, 0xffff -/* 00441C 7000381C 00187840 */ sll $t7, $t8, 1 -/* 004420 70003820 AC6F003C */ sw $t7, 0x3c($v1) -/* 004424 70003824 8CE7329C */ lw $a3, %lo(g_viHorizontalOffset)($a3) -/* 004428 70003828 0327C021 */ addu $t8, $t9, $a3 -/* 00442C 7000382C 0306001A */ div $zero, $t8, $a2 -/* 004430 70003830 14C00002 */ bnez $a2, .L7000383C -/* 004434 70003834 00000000 */ nop -/* 004438 70003838 0007000D */ break 7 -.L7000383C: -/* 00443C 7000383C 2401FFFF */ li $at, -1 -/* 004440 70003840 14C10004 */ bne $a2, $at, .L70003854 -/* 004444 70003844 3C018000 */ lui $at, 0x8000 -/* 004448 70003848 17010002 */ bne $t8, $at, .L70003854 -/* 00444C 7000384C 00000000 */ nop -/* 004450 70003850 0006000D */ break 6 -.L70003854: -/* 004454 70003854 3059FFFF */ andi $t9, $v0, 0xffff -/* 004458 70003858 00007810 */ mfhi $t7 -/* 00445C 7000385C 0327C021 */ addu $t8, $t9, $a3 -/* 004460 70003860 000F7400 */ sll $t6, $t7, 0x10 -/* 004464 70003864 0306001A */ div $zero, $t8, $a2 -/* 004468 70003868 14C00002 */ bnez $a2, .L70003874 -/* 00446C 7000386C 00000000 */ nop -/* 004470 70003870 0007000D */ break 7 -.L70003874: -/* 004474 70003874 2401FFFF */ li $at, -1 -/* 004478 70003878 14C10004 */ bne $a2, $at, .L7000388C -/* 00447C 7000387C 3C018000 */ lui $at, 0x8000 -/* 004480 70003880 17010002 */ bne $t8, $at, .L7000388C -/* 004484 70003884 00000000 */ nop -/* 004488 70003888 0006000D */ break 6 -.L7000388C: -/* 00448C 7000388C 00007810 */ mfhi $t7 -/* 004490 70003890 01CF2025 */ or $a0, $t6, $t7 -/* 004494 70003894 AC64001C */ sw $a0, 0x1c($v1) -/* 004498 70003898 3C018006 */ lui $at, %hi(viMode+0x4) -/* 00449C 7000389C AC240880 */ sw $a0, %lo(viMode+0x4)($at) -/* 0044A0 700038A0 8C620030 */ lw $v0, 0x30($v1) -/* 0044A4 700038A4 8CA532A0 */ lw $a1, %lo(D_800232A0)($a1) -/* 0044A8 700038A8 0002CC03 */ sra $t9, $v0, 0x10 -/* 0044AC 700038AC 3338FFFF */ andi $t8, $t9, 0xffff -/* 0044B0 700038B0 03057021 */ addu $t6, $t8, $a1 -/* 0044B4 700038B4 01C6001A */ div $zero, $t6, $a2 -/* 0044B8 700038B8 14C00002 */ bnez $a2, .L700038C4 -/* 0044BC 700038BC 00000000 */ nop -/* 0044C0 700038C0 0007000D */ break 7 -.L700038C4: -/* 0044C4 700038C4 2401FFFF */ li $at, -1 -/* 0044C8 700038C8 14C10004 */ bne $a2, $at, .L700038DC -/* 0044CC 700038CC 3C018000 */ lui $at, 0x8000 -/* 0044D0 700038D0 15C10002 */ bne $t6, $at, .L700038DC -/* 0044D4 700038D4 00000000 */ nop -/* 0044D8 700038D8 0006000D */ break 6 -.L700038DC: -/* 0044DC 700038DC 3058FFFF */ andi $t8, $v0, 0xffff -/* 0044E0 700038E0 00007810 */ mfhi $t7 -/* 0044E4 700038E4 03057021 */ addu $t6, $t8, $a1 -/* 0044E8 700038E8 000FCC00 */ sll $t9, $t7, 0x10 -/* 0044EC 700038EC 01C6001A */ div $zero, $t6, $a2 -/* 0044F0 700038F0 14C00002 */ bnez $a2, .L700038FC -/* 0044F4 700038F4 00000000 */ nop -/* 0044F8 700038F8 0007000D */ break 7 -.L700038FC: -/* 0044FC 700038FC 2401FFFF */ li $at, -1 -/* 004500 70003900 14C10004 */ bne $a2, $at, .L70003914 -/* 004504 70003904 3C018000 */ lui $at, 0x8000 -/* 004508 70003908 15C10002 */ bne $t6, $at, .L70003914 -/* 00450C 7000390C 00000000 */ nop -/* 004510 70003910 0006000D */ break 6 -.L70003914: -/* 004514 70003914 00007810 */ mfhi $t7 -/* 004518 70003918 032F2025 */ or $a0, $t9, $t7 -/* 00451C 7000391C AC640030 */ sw $a0, 0x30($v1) -/* 004520 70003920 3C018006 */ lui $at, %hi(viMode+0x8) -/* 004524 70003924 AC240884 */ sw $a0, %lo(viMode+0x8)($at) -/* 004528 70003928 8C620044 */ lw $v0, 0x44($v1) -/* 00452C 7000392C 0002C403 */ sra $t8, $v0, 0x10 -/* 004530 70003930 330EFFFF */ andi $t6, $t8, 0xffff -/* 004534 70003934 01C5C821 */ addu $t9, $t6, $a1 -/* 004538 70003938 0326001A */ div $zero, $t9, $a2 -/* 00453C 7000393C 14C00002 */ bnez $a2, .L70003948 -/* 004540 70003940 00000000 */ nop -/* 004544 70003944 0007000D */ break 7 -.L70003948: -/* 004548 70003948 2401FFFF */ li $at, -1 -/* 00454C 7000394C 14C10004 */ bne $a2, $at, .L70003960 -/* 004550 70003950 3C018000 */ lui $at, 0x8000 -/* 004554 70003954 17210002 */ bne $t9, $at, .L70003960 -/* 004558 70003958 00000000 */ nop -/* 00455C 7000395C 0006000D */ break 6 -.L70003960: -/* 004560 70003960 304EFFFF */ andi $t6, $v0, 0xffff -/* 004564 70003964 01C5C821 */ addu $t9, $t6, $a1 -/* 004568 70003968 00007810 */ mfhi $t7 -/* 00456C 7000396C 000FC400 */ sll $t8, $t7, 0x10 -/* 004570 70003970 240E0001 */ li $t6, 1 -/* 004574 70003974 0326001A */ div $zero, $t9, $a2 -/* 004578 70003978 14C00002 */ bnez $a2, .L70003984 -/* 00457C 7000397C 00000000 */ nop -/* 004580 70003980 0007000D */ break 7 -.L70003984: -/* 004584 70003984 2401FFFF */ li $at, -1 -/* 004588 70003988 14C10004 */ bne $a2, $at, .L7000399C -/* 00458C 7000398C 3C018000 */ lui $at, 0x8000 -/* 004590 70003990 17210002 */ bne $t9, $at, .L7000399C -/* 004594 70003994 00000000 */ nop -/* 004598 70003998 0006000D */ break 6 -.L7000399C: -/* 00459C 7000399C 00007810 */ mfhi $t7 -/* 0045A0 700039A0 030F2025 */ or $a0, $t8, $t7 -/* 0045A4 700039A4 AC640044 */ sw $a0, 0x44($v1) -/* 0045A8 700039A8 3C018006 */ lui $at, %hi(viMode+0xC) -/* 0045AC 700039AC AC240888 */ sw $a0, %lo(viMode+0xC)($at) -/* 0045B0 700039B0 3C018002 */ lui $at, %hi(g_ViChangeVideoModes) -/* 0045B4 700039B4 00290821 */ addu $at, $at, $t1 -/* 0045B8 700039B8 10000006 */ b .L700039D4 -/* 0045BC 700039BC AC2E30C4 */ sw $t6, %lo(g_ViChangeVideoModes)($at) -.L700039C0: -/* 0045C0 700039C0 3C018002 */ lui $at, %hi(g_ViChangeVideoModes) -/* 0045C4 700039C4 00290821 */ addu $at, $at, $t1 -/* 0045C8 700039C8 3C0B8002 */ lui $t3, %hi(g_viColorOutputMode) -/* 0045CC 700039CC 8D6B32AC */ lw $t3, %lo(g_viColorOutputMode)($t3) -/* 0045D0 700039D0 AC2030C4 */ sw $zero, %lo(g_ViChangeVideoModes)($at) -.L700039D4: -/* 0045D4 700039D4 254A0001 */ addiu $t2, $t2, 1 -/* 0045D8 700039D8 05410004 */ bgez $t2, .L700039EC -/* 0045DC 700039DC 31590001 */ andi $t9, $t2, 1 -/* 0045E0 700039E0 13200002 */ beqz $t9, .L700039EC -/* 0045E4 700039E4 00000000 */ nop -/* 0045E8 700039E8 2739FFFE */ addiu $t9, $t9, -2 -.L700039EC: -/* 0045EC 700039EC 3C018002 */ lui $at, %hi(D_800232C0) -/* 0045F0 700039F0 11600006 */ beqz $t3, .L70003A0C -/* 0045F4 700039F4 AC3932C0 */ sw $t9, %lo(D_800232C0)($at) -/* 0045F8 700039F8 3C0F8005 */ lui $t7, %hi(g_gfxTaskSettingsList) -/* 0045FC 700039FC 8DEFEAB0 */ lw $t7, %lo(g_gfxTaskSettingsList)($t7) -/* 004600 70003A00 8D180028 */ lw $t8, 0x28($t0) -/* 004604 70003A04 10000006 */ b .L70003A20 -/* 004608 70003A08 ADF80058 */ sw $t8, 0x58($t7) -.L70003A0C: -/* 00460C 70003A0C 3C198005 */ lui $t9, %hi(g_gfxTaskSettingsList) -/* 004610 70003A10 8F39EAB0 */ lw $t9, %lo(g_gfxTaskSettingsList)($t9) -/* 004614 70003A14 3C0E803B */ lui $t6, %hi(cfb_16) # $t6, 0x803b -/* 004618 70003A18 25CE5000 */ addiu $t6, %lo(cfb_16) # addiu $t6, $t6, 0x5000 -/* 00461C 70003A1C AF2E0058 */ sw $t6, 0x58($t9) -.L70003A20: -/* 004620 70003A20 3C028006 */ lui $v0, %hi(g_ViFrontIndex) -/* 004624 70003A24 24420878 */ addiu $v0, %lo(g_ViFrontIndex) # addiu $v0, $v0, 0x878 -/* 004628 70003A28 90580000 */ lbu $t8, ($v0) -/* 00462C 70003A2C 3C038006 */ lui $v1, %hi(g_ViBackIndex) -/* 004630 70003A30 2408002C */ li $t0, 44 -/* 004634 70003A34 270F0001 */ addiu $t7, $t8, 1 -/* 004638 70003A38 24630879 */ addiu $v1, %lo(g_ViBackIndex) # addiu $v1, $v1, 0x879 -/* 00463C 70003A3C 90790000 */ lbu $t9, ($v1) -/* 004640 70003A40 3C078002 */ lui $a3, %hi(g_ViDataArray) -/* 004644 70003A44 24E73244 */ addiu $a3, %lo(g_ViDataArray) # addiu $a3, $a3, 0x3244 -/* 004648 70003A48 27380001 */ addiu $t8, $t9, 1 -/* 00464C 70003A4C 8DA40000 */ lw $a0, ($t5) -/* 004650 70003A50 05E10004 */ bgez $t7, .L70003A64 -/* 004654 70003A54 31EE0001 */ andi $t6, $t7, 1 -/* 004658 70003A58 11C00002 */ beqz $t6, .L70003A64 -/* 00465C 70003A5C 00000000 */ nop -/* 004660 70003A60 25CEFFFE */ addiu $t6, $t6, -2 -.L70003A64: -/* 004664 70003A64 A04E0000 */ sb $t6, ($v0) -/* 004668 70003A68 904E0000 */ lbu $t6, ($v0) -/* 00466C 70003A6C 07010004 */ bgez $t8, .L70003A80 -/* 004670 70003A70 330F0001 */ andi $t7, $t8, 1 -/* 004674 70003A74 11E00002 */ beqz $t7, .L70003A80 -/* 004678 70003A78 00000000 */ nop -/* 00467C 70003A7C 25EFFFFE */ addiu $t7, $t7, -2 -.L70003A80: -/* 004680 70003A80 01C80019 */ multu $t6, $t0 -/* 004684 70003A84 A06F0000 */ sb $t7, ($v1) -/* 004688 70003A88 3C018002 */ lui $at, %hi(g_ViFrontData) -/* 00468C 70003A8C 2406002C */ li $a2, 44 -/* 004690 70003A90 0000C812 */ mflo $t9 -/* 004694 70003A94 00F9C021 */ addu $t8, $a3, $t9 -/* 004698 70003A98 AC3832A4 */ sw $t8, %lo(g_ViFrontData)($at) -/* 00469C 70003A9C 906F0000 */ lbu $t7, ($v1) -/* 0046A0 70003AA0 01E80019 */ multu $t7, $t0 -/* 0046A4 70003AA4 00007012 */ mflo $t6 -/* 0046A8 70003AA8 00EE2821 */ addu $a1, $a3, $t6 -/* 0046AC 70003AAC 0C003E5C */ jal bcopy -/* 0046B0 70003AB0 ADA50000 */ sw $a1, ($t5) -/* 0046B4 70003AB4 3C038006 */ lui $v1, %hi(g_ViBackIndex) -/* 0046B8 70003AB8 24630879 */ addiu $v1, %lo(g_ViBackIndex) # addiu $v1, $v1, 0x879 -/* 0046BC 70003ABC 90780000 */ lbu $t8, ($v1) -/* 0046C0 70003AC0 3C0E803B */ lui $t6, %hi(cfb_16) # $t6, 0x803b -/* 0046C4 70003AC4 25CE5000 */ addiu $t6, %lo(cfb_16) # addiu $t6, $t6, 0x5000 -/* 0046C8 70003AC8 00187880 */ sll $t7, $t8, 2 -/* 0046CC 70003ACC 01F87821 */ addu $t7, $t7, $t8 -/* 0046D0 70003AD0 000F7880 */ sll $t7, $t7, 2 -/* 0046D4 70003AD4 01F87823 */ subu $t7, $t7, $t8 -/* 0046D8 70003AD8 000F7880 */ sll $t7, $t7, 2 -/* 0046DC 70003ADC 01F87823 */ subu $t7, $t7, $t8 -/* 0046E0 70003AE0 3C188002 */ lui $t8, %hi(g_ViBackData) -/* 0046E4 70003AE4 8F1832A8 */ lw $t8, %lo(g_ViBackData)($t8) -/* 0046E8 70003AE8 000F7AC0 */ sll $t7, $t7, 0xb -/* 0046EC 70003AEC 01EEC821 */ addu $t9, $t7, $t6 -/* 0046F0 70003AF0 AF190028 */ sw $t9, 0x28($t8) -/* 0046F4 70003AF4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0046F8 70003AF8 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0046FC 70003AFC 03E00008 */ jr $ra -/* 004700 70003B00 00000000 */ nop -) #endif #ifdef VERSION_EU -GLOBAL_ASM( -.text -glabel video_related_8 -/* 003A0C 70002E0C 3C078002 */ lui $a3, %hi(g_ViBackData) # $a3, 0x8002 -/* 003A10 70002E10 3C0E8002 */ lui $t6, %hi(g_ViFrontData) # $t6, 0x8002 -/* 003A14 70002E14 8DCE1144 */ lw $t6, %lo(g_ViFrontData)($t6) -/* 003A18 70002E18 8CE71148 */ lw $a3, %lo(g_ViBackData)($a3) -/* 003A1C 70002E1C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 003A20 70002E20 AFBF0014 */ sw $ra, 0x14($sp) -/* 003A24 70002E24 91CF0000 */ lbu $t7, ($t6) -/* 003A28 70002E28 90E30000 */ lbu $v1, ($a3) -/* 003A2C 70002E2C 506F0060 */ beql $v1, $t7, .L70002FB0 -/* 003A30 70002E30 84EE0004 */ lh $t6, 4($a3) -/* 003A34 70002E34 10600009 */ beqz $v1, .L70002E5C -/* 003A38 70002E38 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 003A3C 70002E3C 24010001 */ li $at, 1 -/* 003A40 70002E40 1061000D */ beq $v1, $at, .L70002E78 -/* 003A44 70002E44 3C188002 */ lui $t8, %hi(g_viColorOutputMode) # $t8, 0x8002 -/* 003A48 70002E48 24010002 */ li $at, 2 -/* 003A4C 70002E4C 10610043 */ beq $v1, $at, .L70002F5C -/* 003A50 70002E50 3C0E8002 */ lui $t6, 0x8002 # fixme? -/* 003A54 70002E54 10000050 */ b .L70002F98 -/* 003A58 70002E58 00000000 */ nop -.L70002E5C: -/* 003A5C 70002E5C 44816000 */ mtc1 $at, $f12 -/* 003A60 70002E60 0C003300 */ jal osViSetYScale -/* 003A64 70002E64 00000000 */ nop -/* 003A68 70002E68 0C003334 */ jal osViBlack -/* 003A6C 70002E6C 24040001 */ li $a0, 1 -/* 003A70 70002E70 10000049 */ b .L70002F98 -/* 003A74 70002E74 00000000 */ nop -.L70002E78: -/* 003A78 70002E78 8F18114C */ lw $t8, %lo(g_viColorOutputMode)($t8) -/* 003A7C 70002E7C 3C038005 */ lui $v1, %hi(viMode) # $v1, 0x8005 -/* 003A80 70002E80 24633E4C */ addiu $v1, %lo(viMode) # addiu $v1, $v1, 0x3e4c -/* 003A84 70002E84 13000014 */ beqz $t8, .L70002ED8 -/* 003A88 70002E88 3C0F8005 */ lui $t7, %hi(g_viOriginalVideoMode) # $t7, 0x8005 -/* 003A8C 70002E8C 3C0E8002 */ lui $t6, %hi(osViModeTable + 1280) # $t6, 0x8002 -/* 003A90 70002E90 25CE2930 */ addiu $t6, %lo(osViModeTable + 1280) # addiu $t6, $t6, 0x2930 -/* 003A94 70002E94 3C198005 */ lui $t9, %hi(g_viOriginalVideoMode) # $t9, 0x8005 -/* 003A98 70002E98 27393DF8 */ addiu $t9, %lo(g_viOriginalVideoMode) # addiu $t9, $t9, 0x3df8 -/* 003A9C 70002E9C 25D80048 */ addiu $t8, $t6, 0x48 -.L70002EA0: -/* 003AA0 70002EA0 8DC10000 */ lw $at, ($t6) -/* 003AA4 70002EA4 25CE000C */ addiu $t6, $t6, 0xc -/* 003AA8 70002EA8 2739000C */ addiu $t9, $t9, 0xc -/* 003AAC 70002EAC AF21FFF4 */ sw $at, -0xc($t9) -/* 003AB0 70002EB0 8DC1FFF8 */ lw $at, -8($t6) -/* 003AB4 70002EB4 AF21FFF8 */ sw $at, -8($t9) -/* 003AB8 70002EB8 8DC1FFFC */ lw $at, -4($t6) -/* 003ABC 70002EBC 15D8FFF8 */ bne $t6, $t8, .L70002EA0 -/* 003AC0 70002EC0 AF21FFFC */ sw $at, -4($t9) -/* 003AC4 70002EC4 8DC10000 */ lw $at, ($t6) -/* 003AC8 70002EC8 8DD80004 */ lw $t8, 4($t6) -/* 003ACC 70002ECC AF210000 */ sw $at, ($t9) -/* 003AD0 70002ED0 10000012 */ b .L70002F1C -/* 003AD4 70002ED4 AF380004 */ sw $t8, 4($t9) -.L70002ED8: -/* 003AD8 70002ED8 3C188002 */ lui $t8, %hi(osViModeTable + 1600) # $t8, 0x8002 -/* 003ADC 70002EDC 27182A70 */ addiu $t8, %lo(osViModeTable + 1600) # addiu $t8, $t8, 0x2a70 -/* 003AE0 70002EE0 27190048 */ addiu $t9, $t8, 0x48 -/* 003AE4 70002EE4 25EF3DF8 */ addiu $t7, %lo(g_viOriginalVideoMode) # addiu $t7, $t7, 0x3df8 -.L70002EE8: -/* 003AE8 70002EE8 8F010000 */ lw $at, ($t8) -/* 003AEC 70002EEC 2718000C */ addiu $t8, $t8, 0xc -/* 003AF0 70002EF0 25EF000C */ addiu $t7, $t7, 0xc -/* 003AF4 70002EF4 ADE1FFF4 */ sw $at, -0xc($t7) -/* 003AF8 70002EF8 8F01FFF8 */ lw $at, -8($t8) -/* 003AFC 70002EFC ADE1FFF8 */ sw $at, -8($t7) -/* 003B00 70002F00 8F01FFFC */ lw $at, -4($t8) -/* 003B04 70002F04 1719FFF8 */ bne $t8, $t9, .L70002EE8 -/* 003B08 70002F08 ADE1FFFC */ sw $at, -4($t7) -/* 003B0C 70002F0C 8F010000 */ lw $at, ($t8) -/* 003B10 70002F10 8F190004 */ lw $t9, 4($t8) -/* 003B14 70002F14 ADE10000 */ sw $at, ($t7) -/* 003B18 70002F18 ADF90004 */ sw $t9, 4($t7) -.L70002F1C: -/* 003B1C 70002F1C 3C0E8005 */ lui $t6, %hi(g_viOriginalVideoMode) # $t6, 0x8005 -/* 003B20 70002F20 25CE3DF8 */ addiu $t6, %lo(g_viOriginalVideoMode) # addiu $t6, $t6, 0x3df8 -/* 003B24 70002F24 AC6E0000 */ sw $t6, ($v1) -/* 003B28 70002F28 8DD9001C */ lw $t9, 0x1c($t6) -/* 003B2C 70002F2C 3C018005 */ lui $at, %hi(viMode+0x4) # $at, 0x8005 -/* 003B30 70002F30 00002025 */ move $a0, $zero -/* 003B34 70002F34 AC393E50 */ sw $t9, %lo(viMode+0x4)($at) -/* 003B38 70002F38 8DD80030 */ lw $t8, 0x30($t6) -/* 003B3C 70002F3C 3C018005 */ lui $at, %hi(viMode+0x8) # $at, 0x8005 -/* 003B40 70002F40 AC383E54 */ sw $t8, %lo(viMode+0x8)($at) -/* 003B44 70002F44 8DCF0044 */ lw $t7, 0x44($t6) -/* 003B48 70002F48 3C018005 */ lui $at, %hi(viMode+0xC) # $at, 0x8005 -/* 003B4C 70002F4C 0C000B41 */ jal frBlack -/* 003B50 70002F50 AC2F3E58 */ sw $t7, %lo(viMode+0xC)($at) -/* 003B54 70002F54 10000010 */ b .L70002F98 -/* 003B58 70002F58 00000000 */ nop -.L70002F5C: -/* 003B5C 70002F5C 3C038005 */ lui $v1, %hi(viMode) # $v1, 0x8005 -/* 003B60 70002F60 24633E4C */ addiu $v1, %lo(viMode) # addiu $v1, $v1, 0x3e4c -/* 003B64 70002F64 25CE2C00 */ addiu $t6, $t6, 0x2c00 -/* 003B68 70002F68 AC6E0000 */ sw $t6, ($v1) -/* 003B6C 70002F6C 8DD9001C */ lw $t9, 0x1c($t6) -/* 003B70 70002F70 3C018005 */ lui $at, %hi(viMode+0x4) # $at, 0x8005 -/* 003B74 70002F74 00002025 */ move $a0, $zero -/* 003B78 70002F78 AC393E50 */ sw $t9, %lo(viMode+0x4)($at) -/* 003B7C 70002F7C 8DD80030 */ lw $t8, 0x30($t6) -/* 003B80 70002F80 3C018005 */ lui $at, %hi(viMode+0x8) # $at, 0x8005 -/* 003B84 70002F84 AC383E54 */ sw $t8, %lo(viMode+0x8)($at) -/* 003B88 70002F88 8DCF0044 */ lw $t7, 0x44($t6) -/* 003B8C 70002F8C 3C018005 */ lui $at, %hi(viMode+0xC) # $at, 0x8005 -/* 003B90 70002F90 0C003334 */ jal osViBlack -/* 003B94 70002F94 AC2F3E58 */ sw $t7, %lo(viMode+0xC)($at) -.L70002F98: -/* 003B98 70002F98 0C003BF8 */ jal osViSetSpecialFeatures -/* 003B9C 70002F9C 24040042 */ li $a0, 66 -/* 003BA0 70002FA0 3C078002 */ lui $a3, %hi(g_ViBackData) # $a3, 0x8002 -/* 003BA4 70002FA4 8CE71148 */ lw $a3, %lo(g_ViBackData)($a3) -/* 003BA8 70002FA8 90E30000 */ lbu $v1, ($a3) -/* 003BAC 70002FAC 84EE0004 */ lh $t6, 4($a3) -.L70002FB0: -/* 003BB0 70002FB0 84F90018 */ lh $t9, 0x18($a3) -/* 003BB4 70002FB4 84F80006 */ lh $t8, 6($a3) -/* 003BB8 70002FB8 448E2000 */ mtc1 $t6, $f4 -/* 003BBC 70002FBC 84EF001A */ lh $t7, 0x1a($a3) -/* 003BC0 70002FC0 44994000 */ mtc1 $t9, $f8 -/* 003BC4 70002FC4 468021A0 */ cvt.s.w $f6, $f4 -/* 003BC8 70002FC8 44988000 */ mtc1 $t8, $f16 -/* 003BCC 70002FCC 448F2000 */ mtc1 $t7, $f4 -/* 003BD0 70002FD0 3C198005 */ lui $t9, %hi(g_viOriginalVideoMode) # $t9, 0x8005 -/* 003BD4 70002FD4 3C1F8002 */ lui $ra, %hi(D_800232C0) # $ra, 0x8002 -/* 003BD8 70002FD8 468042A0 */ cvt.s.w $f10, $f8 -/* 003BDC 70002FDC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 003BE0 70002FE0 27393DF8 */ addiu $t9, %lo(g_viOriginalVideoMode) # addiu $t9, $t9, 0x3df8 -/* 003BE4 70002FE4 3C0D8002 */ lui $t5, %hi(g_viColorOutputMode) # $t5, 0x8002 -/* 003BE8 70002FE8 340AFFFF */ li $t2, 65535 -/* 003BEC 70002FEC 468084A0 */ cvt.s.w $f18, $f16 -/* 003BF0 70002FF0 3C088002 */ lui $t0, %hi(D_800232A0) -/* 003BF4 70002FF4 46802220 */ cvt.s.w $f8, $f4 -/* 003BF8 70002FF8 460A3083 */ div.s $f2, $f6, $f10 -/* 003BFC 70002FFC 14600003 */ bnez $v1, .L7000300C -/* 003C00 70003000 46089003 */ div.s $f0, $f18, $f8 -/* 003C04 70003004 44810000 */ mtc1 $at, $f0 -/* 003C08 70003008 00000000 */ nop -.L7000300C: -/* 003C0C 7000300C 8FFF1160 */ lw $ra, %lo(D_800232C0)($ra) -/* 003C10 70003010 3C018002 */ lui $at, %hi(g_ViXScales) -/* 003C14 70003014 001F6080 */ sll $t4, $ra, 2 -/* 003C18 70003018 002C0821 */ addu $at, $at, $t4 -/* 003C1C 7000301C E4220F74 */ swc1 $f2, %lo(g_ViXScales)($at) -/* 003C20 70003020 3C018002 */ lui $at, %hi(g_ViYScales) -/* 003C24 70003024 002C0821 */ addu $at, $at, $t4 -/* 003C28 70003028 E4200F7C */ swc1 $f0, %lo(g_ViYScales)($at) -/* 003C2C 7000302C 90EE0000 */ lbu $t6, ($a3) -/* 003C30 70003030 24010001 */ li $at, 1 -/* 003C34 70003034 15C100F2 */ bne $t6, $at, .L70003400 -/* 003C38 70003038 00000000 */ nop -/* 003C3C 7000303C 8DAD114C */ lw $t5, %lo(g_viColorOutputMode)($t5) -/* 003C40 70003040 3C018005 */ lui $at, %hi(g_ViModePtrs) -/* 003C44 70003044 002C0821 */ addu $at, $at, $t4 -/* 003C48 70003048 11A00019 */ beqz $t5, .L700030B0 -/* 003C4C 7000304C AC391FA0 */ sw $t9, %lo(g_ViModePtrs)($at) -/* 003C50 70003050 001FC080 */ sll $t8, $ra, 2 -/* 003C54 70003054 031FC021 */ addu $t8, $t8, $ra -/* 003C58 70003058 3C0F8005 */ lui $t7, %hi(g_ViModes) # $t7, 0x8005 -/* 003C5C 7000305C 25EF1F00 */ addiu $t7, %lo(g_ViModes) # addiu $t7, $t7, 0x1f00 -/* 003C60 70003060 0018C100 */ sll $t8, $t8, 4 -/* 003C64 70003064 030F2021 */ addu $a0, $t8, $t7 -/* 003C68 70003068 3C0E8002 */ lui $t6, %hi(osViModeTable + 1280) # $t6, 0x8002 -/* 003C6C 7000306C 25CE2930 */ addiu $t6, %lo(osViModeTable + 1280) # addiu $t6, $t6, 0x2930 -/* 003C70 70003070 25D80048 */ addiu $t8, $t6, 0x48 -/* 003C74 70003074 00807825 */ move $t7, $a0 -.L70003078: -/* 003C78 70003078 8DC10000 */ lw $at, ($t6) -/* 003C7C 7000307C 25CE000C */ addiu $t6, $t6, 0xc -/* 003C80 70003080 25EF000C */ addiu $t7, $t7, 0xc -/* 003C84 70003084 ADE1FFF4 */ sw $at, -0xc($t7) -/* 003C88 70003088 8DC1FFF8 */ lw $at, -8($t6) -/* 003C8C 7000308C ADE1FFF8 */ sw $at, -8($t7) -/* 003C90 70003090 8DC1FFFC */ lw $at, -4($t6) -/* 003C94 70003094 15D8FFF8 */ bne $t6, $t8, .L70003078 -/* 003C98 70003098 ADE1FFFC */ sw $at, -4($t7) -/* 003C9C 7000309C 8DC10000 */ lw $at, ($t6) -/* 003CA0 700030A0 ADE10000 */ sw $at, ($t7) -/* 003CA4 700030A4 8DD80004 */ lw $t8, 4($t6) -/* 003CA8 700030A8 10000018 */ b .L7000310C -/* 003CAC 700030AC ADF80004 */ sw $t8, 4($t7) -.L700030B0: -/* 003CB0 700030B0 001FC880 */ sll $t9, $ra, 2 -/* 003CB4 700030B4 033FC821 */ addu $t9, $t9, $ra -/* 003CB8 700030B8 3C188005 */ lui $t8, %hi(g_ViModes) # $t8, 0x8005 -/* 003CBC 700030BC 27181F00 */ addiu $t8, %lo(g_ViModes) # addiu $t8, $t8, 0x1f00 -/* 003CC0 700030C0 0019C900 */ sll $t9, $t9, 4 -/* 003CC4 700030C4 03382021 */ addu $a0, $t9, $t8 -/* 003CC8 700030C8 3C0E8002 */ lui $t6, %hi(osViModeTable + 1600) # $t6, 0x8002 -/* 003CCC 700030CC 25CE2A70 */ addiu $t6, %lo(osViModeTable + 1600) # addiu $t6, $t6, 0x2a70 -/* 003CD0 700030D0 25D90048 */ addiu $t9, $t6, 0x48 -/* 003CD4 700030D4 0080C025 */ move $t8, $a0 -.L700030D8: -/* 003CD8 700030D8 8DC10000 */ lw $at, ($t6) -/* 003CDC 700030DC 25CE000C */ addiu $t6, $t6, 0xc -/* 003CE0 700030E0 2718000C */ addiu $t8, $t8, 0xc -/* 003CE4 700030E4 AF01FFF4 */ sw $at, -0xc($t8) -/* 003CE8 700030E8 8DC1FFF8 */ lw $at, -8($t6) -/* 003CEC 700030EC AF01FFF8 */ sw $at, -8($t8) -/* 003CF0 700030F0 8DC1FFFC */ lw $at, -4($t6) -/* 003CF4 700030F4 15D9FFF8 */ bne $t6, $t9, .L700030D8 -/* 003CF8 700030F8 AF01FFFC */ sw $at, -4($t8) -/* 003CFC 700030FC 8DC10000 */ lw $at, ($t6) -/* 003D00 70003100 AF010000 */ sw $at, ($t8) -/* 003D04 70003104 8DD90004 */ lw $t9, 4($t6) -/* 003D08 70003108 AF190004 */ sw $t9, 4($t8) -.L7000310C: -/* 003D0C 7000310C 84EF0018 */ lh $t7, 0x18($a3) -/* 003D10 70003110 24010280 */ li $at, 640 -/* 003D14 70003114 240B014A */ li $t3, 330 -/* 003D18 70003118 AC8F0008 */ sw $t7, 8($a0) -/* 003D1C 7000311C 84F90018 */ lh $t9, 0x18($a3) -/* 003D20 70003120 00001025 */ move $v0, $zero -/* 003D24 70003124 00004825 */ move $t1, $zero -/* 003D28 70003128 00197280 */ sll $t6, $t9, 0xa -/* 003D2C 7000312C 01C1001A */ div $zero, $t6, $at -/* 003D30 70003130 0000C012 */ mflo $t8 -/* 003D34 70003134 AC980020 */ sw $t8, 0x20($a0) -/* 003D38 70003138 84E5001A */ lh $a1, 0x1a($a3) -/* 003D3C 7000313C 15650003 */ bne $t3, $a1, .L7000314C -/* 003D40 70003140 00057AC0 */ sll $t7, $a1, 0xb -/* 003D44 70003144 10000001 */ b .L7000314C -/* 003D48 70003148 2402001C */ li $v0, 28 -.L7000314C: -/* 003D4C 7000314C 24590220 */ addiu $t9, $v0, 0x220 -/* 003D50 70003150 01F9001A */ div $zero, $t7, $t9 -/* 003D54 70003154 00007012 */ mflo $t6 -/* 003D58 70003158 AC8E002C */ sw $t6, 0x2c($a0) -/* 003D5C 7000315C 84E5001A */ lh $a1, 0x1a($a3) -/* 003D60 70003160 17200002 */ bnez $t9, .L7000316C -/* 003D64 70003164 00000000 */ nop -/* 003D68 70003168 0007000D */ break 7 -.L7000316C: -/* 003D6C 7000316C 2401FFFF */ li $at, -1 -/* 003D70 70003170 17210004 */ bne $t9, $at, .L70003184 -/* 003D74 70003174 3C018000 */ lui $at, 0x8000 -/* 003D78 70003178 15E10002 */ bne $t7, $at, .L70003184 -/* 003D7C 7000317C 00000000 */ nop -/* 003D80 70003180 0006000D */ break 6 -.L70003184: -/* 003D84 70003184 00001025 */ move $v0, $zero -/* 003D88 70003188 15650003 */ bne $t3, $a1, .L70003198 -/* 003D8C 7000318C 0005C2C0 */ sll $t8, $a1, 0xb -/* 003D90 70003190 10000001 */ b .L70003198 -/* 003D94 70003194 2402001C */ li $v0, 28 -.L70003198: -/* 003D98 70003198 244F0220 */ addiu $t7, $v0, 0x220 -/* 003D9C 7000319C 030F001A */ div $zero, $t8, $t7 -/* 003DA0 700031A0 0000C812 */ mflo $t9 -/* 003DA4 700031A4 AC990040 */ sw $t9, 0x40($a0) -/* 003DA8 700031A8 84EE0018 */ lh $t6, 0x18($a3) -/* 003DAC 700031AC 15E00002 */ bnez $t7, .L700031B8 -/* 003DB0 700031B0 00000000 */ nop -/* 003DB4 700031B4 0007000D */ break 7 -.L700031B8: -/* 003DB8 700031B8 2401FFFF */ li $at, -1 -/* 003DBC 700031BC 15E10004 */ bne $t7, $at, .L700031D0 -/* 003DC0 700031C0 3C018000 */ lui $at, 0x8000 -/* 003DC4 700031C4 17010002 */ bne $t8, $at, .L700031D0 -/* 003DC8 700031C8 00000000 */ nop -/* 003DCC 700031CC 0006000D */ break 6 -.L700031D0: -/* 003DD0 700031D0 000EC040 */ sll $t8, $t6, 1 -/* 003DD4 700031D4 AC980028 */ sw $t8, 0x28($a0) -/* 003DD8 700031D8 84EF0018 */ lh $t7, 0x18($a3) -/* 003DDC 700031DC 8C86001C */ lw $a2, 0x1c($a0) -/* 003DE0 700031E0 3C038002 */ lui $v1, %hi(g_viHorizontalOffset) # $v1, 0x8002 -/* 003DE4 700031E4 000FC840 */ sll $t9, $t7, 1 -/* 003DE8 700031E8 AC99003C */ sw $t9, 0x3c($a0) -/* 003DEC 700031EC 8C63113C */ lw $v1, %lo(g_viHorizontalOffset)($v1) -/* 003DF0 700031F0 00067403 */ sra $t6, $a2, 0x10 -/* 003DF4 700031F4 31D8FFFF */ andi $t8, $t6, 0xffff -/* 003DF8 700031F8 03037821 */ addu $t7, $t8, $v1 -/* 003DFC 700031FC 01EA001A */ div $zero, $t7, $t2 -/* 003E00 70003200 15400002 */ bnez $t2, .L7000320C -/* 003E04 70003204 00000000 */ nop -/* 003E08 70003208 0007000D */ break 7 -.L7000320C: -/* 003E0C 7000320C 2401FFFF */ li $at, -1 -/* 003E10 70003210 15410004 */ bne $t2, $at, .L70003224 -/* 003E14 70003214 3C018000 */ lui $at, 0x8000 -/* 003E18 70003218 15E10002 */ bne $t7, $at, .L70003224 -/* 003E1C 7000321C 00000000 */ nop -/* 003E20 70003220 0006000D */ break 6 -.L70003224: -/* 003E24 70003224 30D8FFFF */ andi $t8, $a2, 0xffff -/* 003E28 70003228 0000C810 */ mfhi $t9 -/* 003E2C 7000322C 03037821 */ addu $t7, $t8, $v1 -/* 003E30 70003230 00197400 */ sll $t6, $t9, 0x10 -/* 003E34 70003234 01EA001A */ div $zero, $t7, $t2 -/* 003E38 70003238 15400002 */ bnez $t2, .L70003244 -/* 003E3C 7000323C 00000000 */ nop -/* 003E40 70003240 0007000D */ break 7 -.L70003244: -/* 003E44 70003244 2401FFFF */ li $at, -1 -/* 003E48 70003248 15410004 */ bne $t2, $at, .L7000325C -/* 003E4C 7000324C 3C018000 */ lui $at, 0x8000 -/* 003E50 70003250 15E10002 */ bne $t7, $at, .L7000325C -/* 003E54 70003254 00000000 */ nop -/* 003E58 70003258 0006000D */ break 6 -.L7000325C: -/* 003E5C 7000325C 0000C810 */ mfhi $t9 -/* 003E60 70003260 01D91025 */ or $v0, $t6, $t9 -/* 003E64 70003264 AC82001C */ sw $v0, 0x1c($a0) -/* 003E68 70003268 3C018005 */ lui $at, %hi(viMode+0x4) # $at, 0x8005 -/* 003E6C 7000326C AC223E50 */ sw $v0, %lo(viMode+0x4)($at) -/* 003E70 70003270 84E5001A */ lh $a1, 0x1a($a3) -/* 003E74 70003274 8C860030 */ lw $a2, 0x30($a0) -/* 003E78 70003278 00001825 */ move $v1, $zero -/* 003E7C 7000327C 15650003 */ bne $t3, $a1, .L7000328C -/* 003E80 70003280 00000000 */ nop -/* 003E84 70003284 10000001 */ b .L7000328C -/* 003E88 70003288 2409FFF2 */ li $t1, -14 -.L7000328C: -/* 003E8C 7000328C 15650003 */ bne $t3, $a1, .L7000329C -/* 003E90 70003290 00000000 */ nop -/* 003E94 70003294 10000001 */ b .L7000329C -/* 003E98 70003298 2403000E */ li $v1, 14 -.L7000329C: -/* 003E9C 7000329C 8D081140 */ lw $t0, %lo(D_800232A0)($t0) -/* 003EA0 700032A0 30D8FFFF */ andi $t8, $a2, 0xffff -/* 003EA4 700032A4 00787821 */ addu $t7, $v1, $t8 -/* 003EA8 700032A8 01E87021 */ addu $t6, $t7, $t0 -/* 003EAC 700032AC 25D90040 */ addiu $t9, $t6, 0x40 -/* 003EB0 700032B0 032A001A */ div $zero, $t9, $t2 -/* 003EB4 700032B4 00067C03 */ sra $t7, $a2, 0x10 -/* 003EB8 700032B8 15400002 */ bnez $t2, .L700032C4 -/* 003EBC 700032BC 00000000 */ nop -/* 003EC0 700032C0 0007000D */ break 7 -.L700032C4: -/* 003EC4 700032C4 2401FFFF */ li $at, -1 -/* 003EC8 700032C8 15410004 */ bne $t2, $at, .L700032DC -/* 003ECC 700032CC 3C018000 */ lui $at, 0x8000 -/* 003ED0 700032D0 17210002 */ bne $t9, $at, .L700032DC -/* 003ED4 700032D4 00000000 */ nop -/* 003ED8 700032D8 0006000D */ break 6 -.L700032DC: -/* 003EDC 700032DC 31EEFFFF */ andi $t6, $t7, 0xffff -/* 003EE0 700032E0 01C8C821 */ addu $t9, $t6, $t0 -/* 003EE4 700032E4 03297821 */ addu $t7, $t9, $t1 -/* 003EE8 700032E8 0000C010 */ mfhi $t8 -/* 003EEC 700032EC 00004825 */ move $t1, $zero -/* 003EF0 700032F0 00001825 */ move $v1, $zero -/* 003EF4 700032F4 01EA001A */ div $zero, $t7, $t2 -/* 003EF8 700032F8 15400002 */ bnez $t2, .L70003304 -/* 003EFC 700032FC 00000000 */ nop -/* 003F00 70003300 0007000D */ break 7 -.L70003304: -/* 003F04 70003304 2401FFFF */ li $at, -1 -/* 003F08 70003308 15410004 */ bne $t2, $at, .L7000331C -/* 003F0C 7000330C 3C018000 */ lui $at, 0x8000 -/* 003F10 70003310 15E10002 */ bne $t7, $at, .L7000331C -/* 003F14 70003314 00000000 */ nop -/* 003F18 70003318 0006000D */ break 6 -.L7000331C: -/* 003F1C 7000331C 00007010 */ mfhi $t6 -/* 003F20 70003320 000ECC00 */ sll $t9, $t6, 0x10 -/* 003F24 70003324 03191025 */ or $v0, $t8, $t9 -/* 003F28 70003328 AC820030 */ sw $v0, 0x30($a0) -/* 003F2C 7000332C 3C018005 */ lui $at, %hi(viMode+0x8) # $at, 0x8005 -/* 003F30 70003330 AC223E54 */ sw $v0, %lo(viMode+0x8)($at) -/* 003F34 70003334 84E5001A */ lh $a1, 0x1a($a3) -/* 003F38 70003338 8C860044 */ lw $a2, 0x44($a0) -/* 003F3C 7000333C 15650003 */ bne $t3, $a1, .L7000334C -/* 003F40 70003340 30CFFFFF */ andi $t7, $a2, 0xffff -/* 003F44 70003344 10000001 */ b .L7000334C -/* 003F48 70003348 2409FFF2 */ li $t1, -14 -.L7000334C: -/* 003F4C 7000334C 15650003 */ bne $t3, $a1, .L7000335C -/* 003F50 70003350 00000000 */ nop -/* 003F54 70003354 10000001 */ b .L7000335C -/* 003F58 70003358 2403000E */ li $v1, 14 -.L7000335C: -/* 003F5C 7000335C 006F7021 */ addu $t6, $v1, $t7 -/* 003F60 70003360 01C8C021 */ addu $t8, $t6, $t0 -/* 003F64 70003364 27190040 */ addiu $t9, $t8, 0x40 -/* 003F68 70003368 032A001A */ div $zero, $t9, $t2 -/* 003F6C 7000336C 00067403 */ sra $t6, $a2, 0x10 -/* 003F70 70003370 15400002 */ bnez $t2, .L7000337C -/* 003F74 70003374 00000000 */ nop -/* 003F78 70003378 0007000D */ break 7 -.L7000337C: -/* 003F7C 7000337C 2401FFFF */ li $at, -1 -/* 003F80 70003380 15410004 */ bne $t2, $at, .L70003394 -/* 003F84 70003384 3C018000 */ lui $at, 0x8000 -/* 003F88 70003388 17210002 */ bne $t9, $at, .L70003394 -/* 003F8C 7000338C 00000000 */ nop -/* 003F90 70003390 0006000D */ break 6 -.L70003394: -/* 003F94 70003394 31D8FFFF */ andi $t8, $t6, 0xffff -/* 003F98 70003398 0308C821 */ addu $t9, $t8, $t0 -/* 003F9C 7000339C 03297021 */ addu $t6, $t9, $t1 -/* 003FA0 700033A0 00007810 */ mfhi $t7 -/* 003FA4 700033A4 00000000 */ nop -/* 003FA8 700033A8 00000000 */ nop -/* 003FAC 700033AC 01CA001A */ div $zero, $t6, $t2 -/* 003FB0 700033B0 15400002 */ bnez $t2, .L700033BC -/* 003FB4 700033B4 00000000 */ nop -/* 003FB8 700033B8 0007000D */ break 7 -.L700033BC: -/* 003FBC 700033BC 2401FFFF */ li $at, -1 -/* 003FC0 700033C0 15410004 */ bne $t2, $at, .L700033D4 -/* 003FC4 700033C4 3C018000 */ lui $at, 0x8000 -/* 003FC8 700033C8 15C10002 */ bne $t6, $at, .L700033D4 -/* 003FCC 700033CC 00000000 */ nop -/* 003FD0 700033D0 0006000D */ break 6 -.L700033D4: -/* 003FD4 700033D4 0000C010 */ mfhi $t8 -/* 003FD8 700033D8 0018CC00 */ sll $t9, $t8, 0x10 -/* 003FDC 700033DC 01F91025 */ or $v0, $t7, $t9 -/* 003FE0 700033E0 AC820044 */ sw $v0, 0x44($a0) -/* 003FE4 700033E4 3C018005 */ lui $at, %hi(viMode+0xC) # $at, 0x8005 -/* 003FE8 700033E8 AC223E58 */ sw $v0, %lo(viMode+0xC)($at) -/* 003FEC 700033EC 3C018002 */ lui $at, %hi(g_ViChangeVideoModes) -/* 003FF0 700033F0 002C0821 */ addu $at, $at, $t4 -/* 003FF4 700033F4 240E0001 */ li $t6, 1 -/* 003FF8 700033F8 10000006 */ b .L70003414 -/* 003FFC 700033FC AC2E0F84 */ sw $t6, %lo(g_ViChangeVideoModes)($at) -.L70003400: -/* 004000 70003400 3C018002 */ lui $at, %hi(g_ViChangeVideoModes) -/* 004004 70003404 002C0821 */ addu $at, $at, $t4 -/* 004008 70003408 3C0D8002 */ lui $t5, %hi(g_viColorOutputMode) # $t5, 0x8002 -/* 00400C 7000340C 8DAD114C */ lw $t5, %lo(g_viColorOutputMode)($t5) -/* 004010 70003410 AC200F84 */ sw $zero, %lo(g_ViChangeVideoModes)($at) -.L70003414: -/* 004014 70003414 27FF0001 */ addiu $ra, $ra, 1 -/* 004018 70003418 07E10004 */ bgez $ra, .L7000342C -/* 00401C 7000341C 33F80001 */ andi $t8, $ra, 1 -/* 004020 70003420 13000002 */ beqz $t8, .L7000342C -/* 004024 70003424 00000000 */ nop -/* 004028 70003428 2718FFFE */ addiu $t8, $t8, -2 -.L7000342C: -/* 00402C 7000342C 3C018002 */ lui $at, %hi(D_800232C0) # $at, 0x8002 -/* 004030 70003430 11A00006 */ beqz $t5, .L7000344C -/* 004034 70003434 AC381160 */ sw $t8, %lo(D_800232C0)($at) -/* 004038 70003438 3C198004 */ lui $t9, %hi(g_gfxTaskSettingsList) # $t9, 0x8004 -/* 00403C 7000343C 8F397030 */ lw $t9, %lo(g_gfxTaskSettingsList)($t9) -/* 004040 70003440 8CEF0028 */ lw $t7, 0x28($a3) -/* 004044 70003444 10000006 */ b .L70003460 -/* 004048 70003448 AF2F0058 */ sw $t7, 0x58($t9) -.L7000344C: -/* 00404C 7000344C 3C188004 */ lui $t8, %hi(g_gfxTaskSettingsList) # $t8, 0x8004 -/* 004050 70003450 8F187030 */ lw $t8, %lo(g_gfxTaskSettingsList)($t8) -/* 004054 70003454 3C0E803B */ lui $t6, %hi(cfb_16) # $t6, 0x803b -/* 004058 70003458 25CEB000 */ addiu $t6, %lo(cfb_16) # addiu $t6, $t6, -0x5000 -/* 00405C 7000345C AF0E0058 */ sw $t6, 0x58($t8) -.L70003460: -/* 004060 70003460 3C028005 */ lui $v0, %hi(g_ViFrontIndex) # $v0, 0x8005 -/* 004064 70003464 24423E48 */ addiu $v0, %lo(g_ViFrontIndex) # addiu $v0, $v0, 0x3e48 -/* 004068 70003468 904F0000 */ lbu $t7, ($v0) -/* 00406C 7000346C 3C048002 */ lui $a0, %hi(g_ViBackData) # $a0, 0x8002 -/* 004070 70003470 8C841148 */ lw $a0, %lo(g_ViBackData)($a0) -/* 004074 70003474 25F90001 */ addiu $t9, $t7, 1 -/* 004078 70003478 3C038005 */ lui $v1, %hi(g_ViBackIndex) # $v1, 0x8005 -/* 00407C 7000347C 2408002C */ li $t0, 44 -/* 004080 70003480 24633E49 */ addiu $v1, %lo(g_ViBackIndex) # addiu $v1, $v1, 0x3e49 -/* 004084 70003484 90780000 */ lbu $t8, ($v1) -/* 004088 70003488 3C078002 */ lui $a3, %hi(g_ViDataArray) # $a3, 0x8002 -/* 00408C 7000348C 24E710E4 */ addiu $a3, %lo(g_ViDataArray) # addiu $a3, $a3, 0x10e4 -/* 004090 70003490 07210004 */ bgez $t9, .L700034A4 -/* 004094 70003494 332E0001 */ andi $t6, $t9, 1 -/* 004098 70003498 11C00002 */ beqz $t6, .L700034A4 -/* 00409C 7000349C 00000000 */ nop -/* 0040A0 700034A0 25CEFFFE */ addiu $t6, $t6, -2 -.L700034A4: -/* 0040A4 700034A4 A04E0000 */ sb $t6, ($v0) -/* 0040A8 700034A8 904E0000 */ lbu $t6, ($v0) -/* 0040AC 700034AC 270F0001 */ addiu $t7, $t8, 1 -/* 0040B0 700034B0 05E10004 */ bgez $t7, .L700034C4 -/* 0040B4 700034B4 31F90001 */ andi $t9, $t7, 1 -/* 0040B8 700034B8 13200002 */ beqz $t9, .L700034C4 -/* 0040BC 700034BC 00000000 */ nop -/* 0040C0 700034C0 2739FFFE */ addiu $t9, $t9, -2 -.L700034C4: -/* 0040C4 700034C4 01C80019 */ multu $t6, $t0 -/* 0040C8 700034C8 A0790000 */ sb $t9, ($v1) -/* 0040CC 700034CC 3C018002 */ lui $at, %hi(g_ViFrontData) # $at, 0x8002 -/* 0040D0 700034D0 3C058002 */ lui $a1, %hi(g_ViBackData) # $a1, 0x8002 -/* 0040D4 700034D4 2406002C */ li $a2, 44 -/* 0040D8 700034D8 0000C012 */ mflo $t8 -/* 0040DC 700034DC 00F87821 */ addu $t7, $a3, $t8 -/* 0040E0 700034E0 AC2F1144 */ sw $t7, %lo(g_ViFrontData)($at) -/* 0040E4 700034E4 90790000 */ lbu $t9, ($v1) -/* 0040E8 700034E8 3C018002 */ lui $at, %hi(g_ViBackData) # $at, 0x8002 -/* 0040EC 700034EC 03280019 */ multu $t9, $t0 -/* 0040F0 700034F0 00007012 */ mflo $t6 -/* 0040F4 700034F4 00EEC021 */ addu $t8, $a3, $t6 -/* 0040F8 700034F8 AC381148 */ sw $t8, %lo(g_ViBackData)($at) -/* 0040FC 700034FC 0C003C68 */ jal bcopy -/* 004100 70003500 8CA51148 */ lw $a1, %lo(g_ViBackData)($a1) -/* 004104 70003504 3C038005 */ lui $v1, %hi(g_ViBackIndex) # $v1, 0x8005 -/* 004108 70003508 24633E49 */ addiu $v1, %lo(g_ViBackIndex) # addiu $v1, $v1, 0x3e49 -/* 00410C 7000350C 906F0000 */ lbu $t7, ($v1) -/* 004110 70003510 3C0E803B */ lui $t6, %hi(cfb_16) # $t6, 0x803b -/* 004114 70003514 25CEB000 */ addiu $t6, %lo(cfb_16) # addiu $t6, $t6, -0x5000 -/* 004118 70003518 000FC880 */ sll $t9, $t7, 2 -/* 00411C 7000351C 032FC821 */ addu $t9, $t9, $t7 -/* 004120 70003520 0019C880 */ sll $t9, $t9, 2 -/* 004124 70003524 032FC821 */ addu $t9, $t9, $t7 -/* 004128 70003528 0019C880 */ sll $t9, $t9, 2 -/* 00412C 7000352C 032FC821 */ addu $t9, $t9, $t7 -/* 004130 70003530 3C0F8002 */ lui $t7, %hi(g_ViBackData) # $t7, 0x8002 -/* 004134 70003534 8DEF1148 */ lw $t7, %lo(g_ViBackData)($t7) -/* 004138 70003538 0019CAC0 */ sll $t9, $t9, 0xb -/* 00413C 7000353C 032EC021 */ addu $t8, $t9, $t6 -/* 004140 70003540 ADF80028 */ sw $t8, 0x28($t7) -/* 004144 70003544 8FBF0014 */ lw $ra, 0x14($sp) -/* 004148 70003548 27BD0018 */ addiu $sp, $sp, 0x18 -/* 00414C 7000354C 03E00008 */ jr $ra -/* 004150 70003550 00000000 */ nop -) -#endif +void video_related_8(void) +{ + s32 new_var2; + s32 registerValue; + f32 calculatedYScale; + s32 new_var; + f32 calculatedXScale; + VideoSettings *settings; + s32 modeIndex; + s32 upperAdjust; + + if (g_ViFrontData->mode != g_ViBackData->mode) + { + registerValue = g_ViBackData->mode; + + switch (registerValue) + { + case 0: + osViSetYScale(1.0f); + osViBlack(1); + break; + + case 1: + if (g_viColorOutputMode != 0) + { + g_viOriginalVideoMode = osViModeTable[16]; + } + else + { + g_viOriginalVideoMode = osViModeTable[20]; + } + + viMode = &g_viOriginalVideoMode; + g_viOriginalHstart = viMode->comRegs.hStart; + g_viOriginalVstart0 = viMode->fldRegs[0].vStart; + g_viOriginalVstart1 = viMode->fldRegs[1].vStart; + + frBlack(0); + break; + + case 2: + viMode = &osViModeTable[25]; + g_viOriginalHstart = viMode->comRegs.hStart; + g_viOriginalVstart0 = viMode->fldRegs[0].vStart; + g_viOriginalVstart1 = viMode->fldRegs[1].vStart; + + osViBlack(0); + break; + } + osViSetSpecialFeatures(0x0040 | 0x0002); + } + + calculatedXScale = ((f32)g_ViBackData->x) / ((f32)g_ViBackData->bufx); + calculatedYScale = ((f32)g_ViBackData->y) / ((f32)g_ViBackData->bufy); + + if (g_ViBackData->mode == 0) { calculatedYScale = 1.0f; } modeIndex = D_800232C0; + if (1); + if (1); + if (1); + if (1); + new_var = 0xffff; + + g_ViXScales[modeIndex] = calculatedXScale; + g_ViYScales[modeIndex] = calculatedYScale; + + if (g_ViBackData); + if (g_ViBackData->mode == 1) + { + g_ViModePtrs[modeIndex] = &g_viOriginalVideoMode; + + if (g_viColorOutputMode != 0) + { + g_ViModes[modeIndex] = osViModeTable[16]; + } + else + { + g_ViModes[modeIndex] = osViModeTable[20]; + } + + g_ViModes[modeIndex].comRegs.width = g_ViBackData->bufx; + g_ViModes[modeIndex].comRegs.xScale = (g_ViBackData->bufx * 0x400) / 640; + registerValue = (g_ViBackData->bufy == 330) ? (28) : (0); + upperAdjust = 0; + g_ViModes[modeIndex].fldRegs[0].yScale = (g_ViBackData->bufy * 0x800) / (registerValue + 0x220); + registerValue = (g_ViBackData->bufy == 330) ? (28) : (0); + g_ViModes[modeIndex].fldRegs[1].yScale = (g_ViBackData->bufy * 0x800) / (registerValue + 0x220); + g_ViModes[modeIndex].fldRegs[0].origin = g_ViBackData->bufx * 2; + g_ViModes[modeIndex].fldRegs[1].origin = g_ViBackData->bufx * 2; + + new_var2 = g_ViModes[modeIndex].comRegs.hStart; + registerValue = (((((new_var2 >> 16) & 0xffff) + g_viHorizontalOffset) % 0xffff) << 16) | + ((((u16)new_var2) + g_viHorizontalOffset) % 0xffff); + g_ViModes[modeIndex].comRegs.hStart = registerValue; + g_viOriginalHstart = registerValue; + + new_var2 = g_ViModes[modeIndex].fldRegs[0].vStart; + upperAdjust = (g_ViBackData->bufy == 330) ? (-14) : (0); + registerValue = + ((((((g_ViBackData->bufy == 330) ? (14) : (0)) + ((u16)new_var2)) + D_800232A0) + 0x40) % new_var) | + ((((((new_var2 >> 16) & 0xffff) + D_800232A0) + upperAdjust) % new_var) << 16); + g_ViModes[modeIndex].fldRegs[0].vStart = registerValue; + g_viOriginalVstart0 = registerValue; + + new_var2 = g_ViModes[modeIndex].fldRegs[1].vStart; + upperAdjust = (g_ViBackData->bufy == 330) ? (-14) : (0); + registerValue = + ((((((g_ViBackData->bufy == 330) ? (14) : (0)) + ((u16)new_var2)) + D_800232A0) + 0x40) % new_var) | + ((((((new_var2 >> 16) & 0xffff) + D_800232A0) + upperAdjust) % new_var) << 16); + g_ViModes[modeIndex].fldRegs[1].vStart = registerValue; + g_viOriginalVstart1 = registerValue; + + g_ViChangeVideoModes[modeIndex] = 1; + } + else + { + g_ViChangeVideoModes[modeIndex] = 0; + } + + modeIndex = (modeIndex + 1) % 2; + D_800232C0 = modeIndex; + + if (g_viColorOutputMode != (g_viColorOutputMode * 0)) + { + ((struct GfxInfo_s *)g_gfxTaskSettingsList)->cfb = g_ViBackData->framebuf; + } + else + { + ((struct GfxInfo_s *)g_gfxTaskSettingsList)->cfb = cfb_16[0]; + } + + settings = g_ViBackData; + + g_ViFrontIndex = (g_ViFrontIndex + 1) % 2; + g_ViBackIndex = (g_ViBackIndex + 1) % 2; + + g_ViFrontData = g_ViDataArray + g_ViFrontIndex; + g_ViBackData = g_ViDataArray + g_ViBackIndex; + + bcopy(settings, g_ViBackData, sizeof(VideoSettings)); + + g_ViBackData->framebuf = cfb_16[g_ViBackIndex]; +} #endif @@ -1681,7 +690,8 @@ u16 viGetPerspNorm(void) return g_viPerspNorm; } -Gfx *video_related_F(Gfx *gdl) + +Gfx *viSetupCurrentPlayerView(Gfx *gdl) { if (g_CurrentPlayer != NULL) { @@ -1691,19 +701,31 @@ Gfx *video_related_F(Gfx *gdl) g_CurrentPlayer->viewports[g_ViBackIndex].vp.vtrans[1] = (g_ViBackData->viewy * 2) + (g_ViBackData->viewtop * 4); } + // Make the RSP's viewport transform the current player's screen rectangle. gSPViewport(gdl++, OS_K0_TO_PHYSICAL(&g_CurrentPlayer->viewports[g_ViBackIndex])); + + // Create both a floating-point matrix for the CPU side and a fixed-point matrix for the RSP. g_viProjectionMatrix = dynAllocateMatrix(); guPerspectiveF(g_viProjectionMatrixF, &g_viPerspNorm, g_ViBackData->fovy, g_ViBackData->aspect, g_ViBackData->znear, g_ViBackData->zfar, 1.0f); guMtxF2L(g_viProjectionMatrixF, g_viProjectionMatrix); + + /** + * Load g_viProjectionMatrix as the current projection matrix. + * All subsequent rendering uses this projection until a another projection matrix is loaded. + */ gSPMatrix(gdl++, OS_K0_TO_PHYSICAL(g_viProjectionMatrix), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPPerspNormalize(gdl++, g_viPerspNorm); + + // Store the float and non-float projection matrices so we can recall them later instead of having to rebuild them. currentPlayerSetProjectionMatrix(g_viProjectionMatrix); currentPlayerSetProjectionMatrixF(g_viProjectionMatrixF); + // Normal rendering mode is a 16-bit RGBA image. if (g_viColorOutputMode != COLORMODE_32BIT) { gDPSetColorImage(gdl++, G_IM_FMT_RGBA, G_IM_SIZ_16b, g_ViBackData->bufx, OS_K0_TO_PHYSICAL(g_ViBackData->framebuf)); } + // 32-bit mode is only used for the 32-bit screenshot routines. else { gDPSetColorImage(gdl++, G_IM_FMT_RGBA, G_IM_SIZ_32b, g_ViBackData->bufx, OS_K0_TO_PHYSICAL(cfb_16[0])); @@ -1712,6 +734,7 @@ Gfx *video_related_F(Gfx *gdl) return gdl; } + Gfx *viClearZBufCurrentPlayer(Gfx *gdl) { if (g_ViBackData->usezbuf != 0) diff --git a/src/fr.h b/src/fr.h index 313afb79..74fe4961 100644 --- a/src/fr.h +++ b/src/fr.h @@ -216,7 +216,7 @@ s32 viGet800232A0(void); void viSet800232A0(s32 arg0); Gfx *viClearZBufCurrentPlayer(Gfx *gdl); -Gfx *video_related_F(Gfx *gdl); +Gfx *viSetupCurrentPlayerView(Gfx *gdl); void viGetZRange(f32 *zrange); #endif diff --git a/src/game/bg.c b/src/game/bg.c index c307468a..f3276166 100644 --- a/src/game/bg.c +++ b/src/game/bg.c @@ -1,12 +1,15 @@ #include #include #include +#include #include #include #include #include #include "bg.h" #include "bondview.h" +#include "chr.h" +#include "debug_camera.h" #include "debugmenu_handler.h" #include "decompress.h" #include "bgfog.h" @@ -14,11 +17,69 @@ #include "math_ceil.h" #include "matrixmath.h" #include "player.h" +#include "stan.h" #include "explosion.h" #include "bgroomtrans.h" #define BG_STACK_SIZE 20 +#define STAGES_MAX 38 + +typedef struct GlobalVisCommand { + u8 type; + u8 length; + u8 padding[2]; + s32 arg; +} GlobalVisCommand; + +typedef struct Unk80081600 { + bbox2d unk0; + s32 unk10; + s32 unk14; +} Unk80081600; + +enum GlobalVisOpcode { + VISOP_END = 0x00, + VISOP_PUSH = 0x01, + VISOP_POP = 0x02, + VISOP_AND = 0x03, + VISOP_OR = 0x04, + VISOP_NOT = 0x05, + VISOP_XOR = 0x06, + VISOP_PUSH_IF_ROOM_IN_RANGE = 0x14, + VISOP_FORCE_VISIBLE = 0x1e, + VISOP_MATCH_PORTAL_VIS = 0x1f, + VISOP_ADD_VISIBLE_ROOM = 0x20, + VISOP_REMOVE_VIS = 0x21, + VISOP_VISIBLE_IF_SEEN_THROUGH_PORTAL = 0x22, + VISOP_NOT_VISIBLE_IF_SEEN_THROUGH_PORTAL = 0x23, + VISOP_DISABLE_ROOM = 0x24, + VISOP_DISABLE_ROOM_RANGE = 0x25, + VISOP_PRELOAD_ROOM = 0x26, + VISOP_PRELOAD_ROOM_RANGE = 0x27, + VISOP_IF_STATEMENT = 0x50, + VISOP_DONT_EXEC_COMMANDS_EVEN_ON_RETURN = 0x51, + VISOP_ENDIF_CONTINUE_EXEC = 0x52, + VISOP_IF_STATEMENT_PULL_FROM_STACK = 0x5a, + VISOP_TOGGLE_EXEC_VS_READONLY = 0x5b, + VISOP_ENDIF = 0x5c +}; + +extern struct unk_portalstruct table_for_portals[PORTMAX]; +extern s32 ptr_bgdata_offsets; +extern s32 dword_CODE_bss_8007FF88; +extern s32 *dword_CODE_bss_8007FF90; +extern f32 *dword_CODE_bss_8007FF94; +extern s_bound_info dword_CODE_bss_8007FFA0[]; +#ifndef VERSION_EU +extern s32 dword_CODE_bss_8007FF98; +#endif + +#ifdef VERSION_EU +#define BG_PORTAL_QUEUE_LEN 250 +#else +#define BG_PORTAL_QUEUE_LEN 500 +#endif // bss //CODE.bss:8007BF90 @@ -53,100 +114,6 @@ char list_visible_rooms_in_cur_global_vis_packet[0x98]; */ s32 num_visible_rooms_in_cur_global_vis_packet; -/** - * address 8007C040 - * EU .bss 80079f80 -*/ -char bgDebPortalOutBuffer[10][9]; - -s16 bss_pad_8007C09A; /* not required, but making alignment explicit */ -s32 bss_pad_8007C09C; /* not required, but making alignment explicit */ - -/** - * address 8007C0A0 - * EU .bss 80079FE0 -*/ -char bgDebRoomOutBuffer[10][9]; - -s16 bss_pad_8007C0FA; /* not required, but making alignment explicit */ -s32 bss_pad_8007C0FC; /* not required, but making alignment explicit */ - -/** - * address 8007C100 - * EU .bss 8007A040 -*/ -#ifdef VERSION_EU -char dword_CODE_bss_8007C100[0x1388]; -#else -char dword_CODE_bss_8007C100[0x3e80]; -#endif - -/** - * address 8007FF80 - * EU .bss 8007B3C8 -*/ -bg_portal_data_entry* g_BgPortals; - -//CODE.bss:8007FF84 -s32 ptr_bgdata_offsets; - -//CODE.bss:8007FF88 -s32 dword_CODE_bss_8007FF88; - -/** - * address 8007FF8C - * EU .bss 8007B3D4 -*/ -bg_room_data * ptr_bgdata_room_fileposition_list; - -//CODE.bss:8007FF90 -s32 dword_CODE_bss_8007FF90; - -//CODE.bss:8007FF94 -f32* dword_CODE_bss_8007FF94; - -#ifndef VERSION_EU -//CODE.bss:8007FF98 -s32 dword_CODE_bss_8007FF98; - -//CODE.bss:8007FF9C -s32 dword_CODE_bss_8007FF9C; -#endif - -#ifdef VERSION_EU -/* sizeof(struct s_bound_info) = 7 words */ -/** - * EU .bss 8007B3E0 -*/ -s_bound_info dword_CODE_bss_8007FFA0[124]; -//this doesnt FEEL correct -u32 missingeubytes[4]; -#else -s_bound_info dword_CODE_bss_8007FFA0[204]; -#endif - -// 7ca30?? - -s32 dword_CODE_bss_800815f0; -s32 dword_CODE_bss_800815f4; -s32 dword_CODE_bss_800815f8; - -#ifdef VERSION_EU -s32 eu_bss_8007BFA0; -s32 eu_bss_8007BFA4; -#endif - -/** - * address 80081600 - * EU .bss 8007BFA8 -*/ -char dword_CODE_bss_80081600[0x18]; - -//CODE.bss:80081618 -struct unk_portalstruct table_for_portals[200]; - - -// data /* D:800413F0 Level gCurrentLevel = {0, 1.0, 1.0, 1.0, 1}; cant check this anymore however will concede seperate vars since below gets match? */ s32 *ptr_bg_c_debug_debug_notice_list = 0; @@ -179,19 +146,25 @@ s32 bgViewRelated[] = { 1, 1, -1, -1 }; * Address 0x80041414 */ s_room_info g_BgRoomInfo[MAXROOMCOUNT] = {0}; -//D:800442F4 +//D:800442F4 canonically roomnumber s32 g_MaxNumRooms = MAXROOMCOUNT; +/** + * Limits the number of rooms that can be loaded per frame. + * Address: 0x800442F8 + */ +s32 g_RoomLoadBudget = 0; -//D:800442F8 -s32 D_800442F8 = 0; //D:800442FC -s32 D_800442FC[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; +u8 D_800442FC[PORTMAX] = {0}; //D:800443C4 -s32 D_800443C4[] = { +u8 D_800443C4[PORTMAX] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; @@ -282,42 +255,1622 @@ Lights1 GlobalLight = gdSPDefLights1( s32 D_80044858 = 0; //D:8004485C s32 D_8004485C = 1; -//D:80044860 -s32 bgDebPortalOutLineNum = 0; -//D:80044864 -s32 bgDebRoomOutLineNum = 0; + +// forward declarations + +void unload_rooms(void); +Gfx *sub_GAME_7F0B8D78(Gfx *arg0); +Gfx *sub_GAME_7F0B3C8C(Gfx *arg0); +s32 bgCheckIfRoomModelNeedsLoad(s32 roomID); +void bgLoadRoomModelData(s32 room); +void bgBuildRoomVtxBounds(s32 roomID); +Gfx *bgRenderRoomPrimary(Gfx *gdl, s32 room_index); +Gfx *bgRenderRoomSecondary(Gfx *gdl, s32 room_index); + +Gfx *bgScissorCurrentPlayerView(Gfx *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); + +bool bgIsRoomOnScreen(s32 roomID, struct rectbbox *screenbox); +s32 sub_GAME_7F0B39BC(s32 curroom, s32 unk1, bbox2d *screensize, s32 next); +void bgUpdateCurrentPlayerScreenMinMax(void); +void *sub_GAME_7F0B8A24(s32 *pc); +void bgDetermineVisibleRooms(void); +s32 sub_GAME_7F0B5864(s32 portalnum, bbox2d *screenbox); +f32 sub_GAME_7F0B9990(s32 portalnum); +void sub_GAME_7F0B95D8(s32 roomID); +#if defined(VERSION_EU) +void sub_GAME_7F0B7F84(s32 roomnum, s32 portalnum, s32 depth, bbox2d *parentbox); +#endif +void sub_GAME_7F0B4810(f32 arg0); +s32 sub_GAME_7F0B5528(s32 portalnum, f32 scale, coord3d *points); +void bgOrderPortal(s32 portalnum); + +// end forward declarations + + +void bgInit(void) +{ + debTryAdd(&ptr_bg_c_debug_debug_notice_list, "bg_c_debug"); +} + + +void sub_GAME_7F0B37EC(void) { + u8 *ptr; + u8 *end; + u8 portal; + u8 cur; + u32 masked; + + ptr = (u8 *)specialportalarray; + end = (u8 *)&g_BgCurrentRoom; + + do { + if (levelentry_index == *ptr++) { + do { + portal = ptr[0]; + while (ptr[1] >= portal) { + ((u8 *)g_BgPortals)[(portal << 3) + 6] |= 2; + portal++; + } + + ptr += 2; + } while (ptr[0] != 0xff); + } else { + do { + ptr += 2; + } while (ptr[0] != 0xff); + } + + ptr++; + } while ((u32)ptr < (u32)end); +} + + +/* +* Unused function +* Address: 7F0B38B4 +*/ +void sub_GAME_7F0B38B4(s32 arg0, u8 *arg1) { + + u8 *s0; + u8 *entry_start; + s32 v0; + s32 v1; + + s0 = arg1; + v0 = *arg1; + v1 = arg0 & 0xff; + + do { + entry_start = s0; + + do { + if (v1 == v0) goto found; + v0 = *(s0 + 1); + s0++; + } while (v0 != 0); + + do { s0++; } while (*s0 != 0); + s0++; + goto next_entry; + +found: + s0 = entry_start; + for (v0 = *entry_start; ; ) { + if (bgIsRoomOnScreen(v0 ^ 0, &g_CurrentPlayer->screensize)) { + sub_GAME_7F0B39BC(*s0, 0, &g_CurrentPlayer->screensize, 1); + } + v0 = *(s0 + 1); + s0++; + if (v0 == 0) break; + } + s0++; + v0 = *s0; + do { + if (bgIsRoomOnScreen(v0 ^ 0, &g_CurrentPlayer->screensize)) { + sub_GAME_7F0B39BC(*s0, 0, &g_CurrentPlayer->screensize, 1); + } + v0 = *(s0 + 1); + s0++; + } while (v0 != 0); + return; + +next_entry: + v0 = *s0; + } while (v0 != 0); + +} + + +/** + * Address 0x7F0B39BC. + * +*/ +s32 sub_GAME_7F0B39BC(int curroom,int unk1, bbox2d * screensize, s32 next) +{ + int i; + int temp; + + g_BgRoomInfo[curroom].room_rendered = '\x01'; + + if (g_BgRoomInfo[curroom].room_loaded_mask != '\0') { + return 0; + } + + // Need g_BgNumberOfRoomsDrawn in a3 + for (i = 0; i < g_BgNumberOfRoomsDrawn; i++) + { + if (curroom == dword_CODE_bss_8007FFA0[i].roomid) { + if (dword_CODE_bss_8007FFA0[i].unk1 < unk1) { + dword_CODE_bss_8007FFA0[i].unk1 = unk1; + } + bgRectOutersect(screensize,&dword_CODE_bss_8007FFA0[i].bbox); + temp = dword_CODE_bss_8007FFA0[i].next; + dword_CODE_bss_8007FFA0[i].bbox.min.x = screensize->min.x; + dword_CODE_bss_8007FFA0[i].bbox.min.y = screensize->min.y; + dword_CODE_bss_8007FFA0[i].bbox.max.x = screensize->max.x; + dword_CODE_bss_8007FFA0[i].bbox.max.y = screensize->max.y; + dword_CODE_bss_8007FFA0[i].next = temp | next; + + return temp; + } + } + +#if defined(VERSION_EU) + i = g_BgNumberOfRoomsDrawn; + if (i >= 0x78) { + i = 0x77; + } + dword_CODE_bss_8007FFA0[i].roomid = curroom; + dword_CODE_bss_8007FFA0[i].unk1 = unk1; + dword_CODE_bss_8007FFA0[i].bbox.min.x = screensize->min.x; + dword_CODE_bss_8007FFA0[i].bbox.min.y = screensize->min.y; + dword_CODE_bss_8007FFA0[i].bbox.max.x = screensize->max.x; + dword_CODE_bss_8007FFA0[i].bbox.max.y = screensize->max.y; + dword_CODE_bss_8007FFA0[i].next = next; + eu_cdata_0x1f0d0++; + if (eu_cdata_0x1f0d0 < 0x78) { + g_BgNumberOfRoomsDrawn = eu_cdata_0x1f0d0; + } + + return 0; +#else + i = g_BgNumberOfRoomsDrawn; + dword_CODE_bss_8007FFA0[i].roomid = curroom; + dword_CODE_bss_8007FFA0[i].unk1 = unk1; + dword_CODE_bss_8007FFA0[i].bbox.min.x = screensize->min.x; + dword_CODE_bss_8007FFA0[i].bbox.min.y = screensize->min.y; + dword_CODE_bss_8007FFA0[i].bbox.max.x = screensize->max.x; + dword_CODE_bss_8007FFA0[i].bbox.max.y = screensize->max.y; + dword_CODE_bss_8007FFA0[i].next = next; + g_BgNumberOfRoomsDrawn = i + 1; + + if (g_BgNumberOfRoomsDrawn) {} + + return 0; +#endif +} + + +/* +* Unused function +* Address: ? +*/ +void bgZeroPortalsToRoom(s32 roomnum) +{ + g_BgRoomInfo[roomnum].portal_visit_count = 0; +} + + +/* +* Unused function +* Address: 7F0B3B20 +*/ +s32 bgFindFirstPortalVisitedRoom(void) +{ + s32 i; + + for (i=0;if[0][0] = dword_CODE_bss_8007FFA0[i].bbox.f[0][0]; + result->f[0][1] = dword_CODE_bss_8007FFA0[i].bbox.f[0][1]; + result->f[1][0] = dword_CODE_bss_8007FFA0[i].bbox.f[1][0]; + result->f[1][1] = dword_CODE_bss_8007FFA0[i].bbox.f[1][1]; + + return 1; + } + } + + // It's pointless to set those because when this function returns false, result is unused + result->f[0][0] = 0.0f; + result->f[0][1] = 0.0f; + result->f[1][0] = 0.0f; + result->f[1][1] = 0.0f; + + return 0; +} + + +/** + * Address: 7F0B3C8C + */ +Gfx *sub_GAME_7F0B3C8C(Gfx *gdl) +{ +#ifdef VERSION_EU + s16 i; +#else + s32 i; +#endif + s32 j; +#ifdef VERSION_EU + s16 b_max; + s16 b_min; +#else + s32 b_max; + s32 b_min; +#endif + s32 notdone; +#ifdef VERSION_EU + b_max = 0; + b_min = 32767; +#else + b_min = 99999999; + b_max = 0; +#endif + + for (j = 0; j < g_BgNumberOfRoomsDrawn; j++) + { + if (b_max < dword_CODE_bss_8007FFA0[j].unk1) + { + b_max = dword_CODE_bss_8007FFA0[j].unk1; + } + + if (dword_CODE_bss_8007FFA0[j].unk1 < b_min) + { + b_min=dword_CODE_bss_8007FFA0[j].unk1; + } + } + + for (i = b_min; i <= b_max; i++) + { + #ifdef DEBUG + notdone = g_BgNumberOfRoomsDrawn; + #endif + for (j = 0; j < g_BgNumberOfRoomsDrawn; j++) + { + if (i == dword_CODE_bss_8007FFA0[j].unk1) + { + gSPMatrix(gdl++, osVirtualToPhysical((void*)currentPlayerGetProjectionMatrix()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); + gdl = fogRenderClearFogMode(gdl); + + if (get_debug_do_draw_obj()) + { + if (sub_GAME_7F0BD8F0()) + { + gdl = chrpropsRenderPass(gdl, dword_CODE_bss_8007FFA0[j].roomid, 0); + } + } + + gSPMatrix(gdl++, osVirtualToPhysical((void*)get_BONDdata_field_10E0()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); + gdl = fogSetRenderFogColor( + bgScissorCurrentPlayerViewF( + gdl++, + dword_CODE_bss_8007FFA0[j].bbox.min.x, + dword_CODE_bss_8007FFA0[j].bbox.min.y, + dword_CODE_bss_8007FFA0[j].bbox.max.x, + dword_CODE_bss_8007FFA0[j].bbox.max.y), + 0); + + if (get_debug_do_draw_bg()) + { + if (sub_GAME_7F0BD8F0()) + { + gdl = bgRenderRoomPrimary(gdl, dword_CODE_bss_8007FFA0[j].roomid); + } + } + + gSPMatrix(gdl++, osVirtualToPhysical((void*)currentPlayerGetProjectionMatrix()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); + gdl = fogRenderClearFogMode(gdl); + + if (get_debug_do_draw_obj()) + { + if (sub_GAME_7F0BD8F0()) + { + gdl = chrpropsRenderPass(gdl, dword_CODE_bss_8007FFA0[j].roomid, 2); + } + } + + if (1); + } + #ifdef DEBUG + notdone--; + #endif + } + } + #ifdef DEBUG + assert(notdone == 0); + #endif + + gdl = bgScissorCurrentPlayerViewDefault(fogRenderClearFogMode(gdl)); + gSPMatrix(gdl++, osVirtualToPhysical((void*)get_BONDdata_field_10E0()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); + + if (sub_GAME_7F0BD8F0()) + { + gdl = explosionRenderScorchBuffer(gdl); + gdl = explosionCallRenderBulletImpactOnProp(gdl); + } + + if (g_BgNumberOfRoomsDrawn); + if (dword_CODE_bss_8007FFA0); + + for (i = b_max; i >= b_min; i--) + { + #ifdef DEBUG + notdone = g_BgNumberOfRoomsDrawn; + #endif + + for (j = 0; j < g_BgNumberOfRoomsDrawn; j++) + { + if (i == dword_CODE_bss_8007FFA0[j].unk1) + { + gSPMatrix(gdl++, osVirtualToPhysical((void*)get_BONDdata_field_10E0()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); + gdl = fogSetRenderFogColor( + bgScissorCurrentPlayerViewF( + gdl++, + dword_CODE_bss_8007FFA0[j].bbox.min.x, + dword_CODE_bss_8007FFA0[j].bbox.min.y, + dword_CODE_bss_8007FFA0[j].bbox.max.x, + dword_CODE_bss_8007FFA0[j].bbox.max.y), + 1); + + if (get_debug_do_draw_bg()) + { + if (sub_GAME_7F0BD8F0()) + { + gdl = bgRenderRoomSecondary(gdl, dword_CODE_bss_8007FFA0[j].roomid); + } + } + + gSPMatrix(gdl++, osVirtualToPhysical((void*)currentPlayerGetProjectionMatrix()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); + gdl = fogRenderClearFogMode(gdl); + + if (get_debug_do_draw_obj()) + { + if (sub_GAME_7F0BD8F0()) + { + gdl = chrpropsRenderPass(gdl, dword_CODE_bss_8007FFA0[j].roomid, 1); + } + } + + if (1); + } + #ifdef DEBUG + notdone--; + #endif + } + } + #ifdef DEBUG + assert(notdone == 0); + #endif + + return gdl; +} + + +/* + * Address: 0x7F0B4034 +*/ +s32 getPriMappingBinCount(s32 room) +{ + s32 i = room; + + while (ptr_bgdata_room_fileposition_list[i].pPriMappingBin == 0) + { + i++; + } + + return i; +} + + +/* + * Address: 0x7F0B4084 +*/ +s32 getSecMappingBinCount(s32 room) +{ + s32 i = room; + + while (ptr_bgdata_room_fileposition_list[i].pSecMappingBin == 0) + { + i++; + } + + return i; +} + + +/* + * Address: 0x7F0B40D4 +*/ +s32 getPointTableBinCount(s32 room) +{ + s32 i = room; + + while (ptr_bgdata_room_fileposition_list[i].pPointTableBin == 0) + { + i++; + } + + return i; +} + + +/* + * Address: 0x7F0B4124 +*/ +void load_bg_file(LEVEL_INDEX levelid) +{ + typedef struct bg_envdata_entry_local { + u8 type; + u8 pad[3]; + s32 data; + } bg_envdata_entry_local; + s32 i; + s32 size; + s32 header[0x10]; + s32 *data; + + levelentry_index = 0; + + for (i = 0; i < MAXROOMCOUNT; i++) + { + g_BgRoomInfo[i].vtx_batch_bounds = NULL; + } + + for (i = 0; i < STAGES_MAX; i++) + { + if (levelinfotable[i].levelID == levelid) + { + levelentry_index = i; + } + } + + lightFixtureInitTables(); + + ptr_bg_data = (s32)header; + obLoadBGFileBytesAtOffset(levelinfotable[levelentry_index].bg_seg_filename, (u8 *) ptr_bg_data, 0, 0x40); + + if (((levelid && ptr_bg_data) && levelentry_index)); + + ptr_bgdata_offsets = ptr_bg_data; + ptr_bgdata_room_fileposition_list = (bg_room_data *) BG_SEG_TO_PTR(ptr_bg_data, ((s32 *)ptr_bg_data)[1]); + + size = (((((u32) ptr_bgdata_room_fileposition_list[1].pPointTableBin) & 0x00ffffff) - 1) | 0xf) + 1; + + ptr_bg_data = (s32) mempAllocBytesInBank(size, 4); + obLoadBGFileBytesAtOffset(levelinfotable[levelentry_index].bg_seg_filename, (u8 *) ptr_bg_data, 0, size); + + gptr_stan = (s32) _fileNameLoadToBank(levelinfotable[levelentry_index].bg_stan_filename, 2, 0, 4); + + stanDetermineEOF((struct StanPrefixRecord *) gptr_stan, 0, (u8 *) gptr_stan); + stanLoadFile((struct StanPrefixRecord *) gptr_stan); + + sub_GAME_7F0B4810(levelinfotable[levelentry_index].levelscale); + setLevelScale(levelinfotable[levelentry_index].levelscale); + setDebugCameraScale(levelinfotable[levelentry_index].levelscale); + chrRemoved7F022E1C(levelinfotable[levelentry_index].levelscale); + + mCurrentLevelVisibilityScale = levelinfotable[levelentry_index].visibility; + + sub_GAME_7F08976C(mCurrentLevelVisibilityScale); + matrix_4x4_7F058C4C(mCurrentLevelVisibilityScale); + + data = (s32 *)ptr_bg_data; + dword_CODE_bss_8007BF98 = *data; + dword_CODE_bss_8007FF88 = 1; + + if (dword_CODE_bss_8007BF98 == 0) + { + dword_CODE_bss_8007FF88 = 2; + ptr_bgdata_offsets = (s32)data; + ptr_bgdata_room_fileposition_list = (bg_room_data *) BG_SEG_TO_PTR(data, ((s32 *)ptr_bgdata_offsets)[1]); + + // Keep this fake goto for matching. + goto dummy_label_543534; dummy_label_543534: ; + + g_MaxNumRooms = 0; + + for (i = 1; ptr_bgdata_room_fileposition_list[i].pPriMappingBin != NULL; i++) + { + g_MaxNumRooms++; + } + + g_BgPortals = (bg_portal_data_entry *) BG_SEG_TO_PTR(data, ((s32 *)ptr_bgdata_offsets)[2]); + + if (1); + + if (((s32 *)ptr_bgdata_offsets)[3] == 0) + { + dword_CODE_bss_8007FF90 = 0; + } + else + { + dword_CODE_bss_8007FF90 = (s32 *) BG_SEG_TO_PTR(data, ((s32 *)ptr_bgdata_offsets)[3]); + + if (((s32 *)ptr_bgdata_offsets)[4] == 0) + { + dword_CODE_bss_8007FF94 = NULL; + } + else + { + dword_CODE_bss_8007FF94 = (f32 *) BG_SEG_TO_PTR(data, ((s32 *)ptr_bgdata_offsets)[4]); + } + } + + for (i = 0; g_BgPortals[i].offset_portal != (NULL); i++) + { + g_BgPortals[i].offset_portal = (bg_portal_entry *) BG_SEG_TO_PTR(ptr_bg_data, g_BgPortals[i].offset_portal); + } + + if (dword_CODE_bss_8007FF90 != NULL) + { + for (i = 0; ((bg_envdata_entry_local *)dword_CODE_bss_8007FF90)[i].type != 0; i++) + { + if (((bg_envdata_entry_local *)dword_CODE_bss_8007FF90)[i].type == ENVIRONMENTDATA_ALT) + { + ((bg_envdata_entry_local *)dword_CODE_bss_8007FF90)[i].data = getIndexOfPORTALID((s32) BG_SEG_TO_PTR(ptr_bg_data, ((bg_envdata_entry_local *)dword_CODE_bss_8007FF90)[i].data)); + } + } + } + + for (i = 1; i < g_MaxNumRooms; i++) + { + g_BgRoomInfo[i].model_bin_loaded = 0; + g_BgRoomInfo[i].field_35 = 0; + + if (ptr_bgdata_room_fileposition_list[i].pPriMappingBin != (NULL)) + { + s32 primaryindex; + s32 secondaryindex; + primaryindex = getPriMappingBinCount(i + 1); + secondaryindex = getSecMappingBinCount(i); + + if (primaryindex <= secondaryindex) + { + g_BgRoomInfo[i].csize_primary_DL_binary = ((s32) ptr_bgdata_room_fileposition_list[primaryindex].pPriMappingBin) - ((s32) ptr_bgdata_room_fileposition_list[i].pPriMappingBin); + } + else + { + g_BgRoomInfo[i].csize_primary_DL_binary = ((s32) ptr_bgdata_room_fileposition_list[secondaryindex].pSecMappingBin) - ((s32) ptr_bgdata_room_fileposition_list[i].pPriMappingBin); + } + } + else + { + g_BgRoomInfo[i].csize_primary_DL_binary = 0; + } + + if (ptr_bgdata_room_fileposition_list[i].pSecMappingBin != (NULL)) + { + s32 primaryindex; + s32 secondaryindex; + primaryindex = getPriMappingBinCount(i + 1); + secondaryindex = getSecMappingBinCount(i + 1); + + if (primaryindex <= secondaryindex) + { + g_BgRoomInfo[i].csize_secondary_DL_binary = ((s32) ptr_bgdata_room_fileposition_list[primaryindex].pPriMappingBin) - ((s32) ptr_bgdata_room_fileposition_list[i].pSecMappingBin); + } + else + { + g_BgRoomInfo[i].csize_secondary_DL_binary = ((s32) ptr_bgdata_room_fileposition_list[secondaryindex].pSecMappingBin) - ((s32) ptr_bgdata_room_fileposition_list[i].pSecMappingBin); + } + } + else + { + g_BgRoomInfo[i].csize_secondary_DL_binary = 0; + } + + if (ptr_bgdata_room_fileposition_list[i].pPointTableBin != (NULL)) + { + s32 pointindex; + pointindex = getPointTableBinCount(i + 1); + g_BgRoomInfo[i].csize_point_index_binary = ((s32) ptr_bgdata_room_fileposition_list[pointindex].pPointTableBin) - ((s32) ptr_bgdata_room_fileposition_list[i].pPointTableBin); + } + else + { + g_BgRoomInfo[i].csize_point_index_binary = 0; + } + + g_BgRoomInfo[i].cur_room_totalsize = -1; + } + + initializeRoomData(); + + for (i = 1; i < g_MaxNumRooms; i++) + { + bgRoomCalcBB(i); + } + + for (i = 0; g_BgPortals[i].offset_portal != (NULL); i++) + { + D_800443C4[i] = sub_GAME_7F0B993C(i); + } + + for (i = 0; g_BgPortals[i].offset_portal != (NULL); i++) + { + bgOrderPortal(i); + } + + for (i = 0; i < g_MaxNumRooms; i++) + { + sub_GAME_7F0B95D8(i); + } + + for (i = 0; g_BgPortals[i].offset_portal != (NULL); i++) + { + g_BgPortals[i].controlbytes1 &= 0xfe; + } + + sub_GAME_7F0B37EC(); + } + + fogRemoved7F0BAA5C(levelid); + g_RoomLoadBudget = 200; +} + + +void cleanup_rooms(void) { + unload_rooms(); + matrix_4x4_7F058C4C(1.0); +} + + +void sub_GAME_7F0B4810(f32 arg0) { + room_data_float1 = arg0; + room_data_float2 = (f32) (1.0f / arg0); +} + + +f32 get_room_data_float2(void){ + return room_data_float2; +} + + +f32 get_room_data_float1(void){ + return room_data_float1; +} + + +f32 sub_GAME_7F0B4848(void) +{ + return levelinfotable[levelentry_index].unknownfloat / levelinfotable[levelentry_index].levelscale; +} + + +//sub_GAME_7F0B4878 +f32 bgGetLevelVisibilityScale(void) { + return mCurrentLevelVisibilityScale; +} + + +// defined later in the same file +extern void bgRoomsTickUnload(void); + +void bgRoomVisibilityRelated(void) +{ + bg_portal_data_entry *portal; + bg_portal_entry *next; + coord3d *pos; + coord3d *pos3; + u8 *portalflags; + s32 room; + s32 portalnum; + s32 lastportal; + s32 depth; + s32 maxdepth; + s32 offset; + s32 cammode; + + lastportal = -1; + + num_visible_rooms_in_cur_global_vis_packet = 0; + + if (get_player_position_in_shuffled(get_cur_playernum()) == 0) { + bgRoomsTickUnload(); + } + + cammode = bondviewGetCameraMode(); + + g_RoomLoadBudget = 3; + + switch (cammode) { + case CAMERAMODE_INTRO: + case CAMERAMODE_FADESWIRL: + case CAMERAMODE_SWIRL: + case CAMERAMODE_POSEND: + case CAMERAMODE_MP: + g_RoomLoadBudget = 0xc8; + break; + case CAMERAMODE_FP: + case CAMERAMODE_DEATH_CAM_SP: + case CAMERAMODE_DEATH_CAM_MP: + case CAMERAMODE_FP_NOINPUT: + break; + } + + room = bondviewGetCurrentPlayersRoom(); + g_BgCurrentRoom = room; + + pos = bondviewGetCurrentPlayersPosition(); + pos3 = bondviewGetCurrentPlayersPosition3(); + + // FAKE + if (1) {} + + for (depth = 0, maxdepth = 11; depth != maxdepth; depth++) { + for (portalnum = 0; g_BgPortals[portalnum].offset_portal != NULL; portalnum++) { + + if (D_800443C4[portalnum] != 0) { + continue; + } + if (portalnum == lastportal) { + continue; + } + + if (((room == g_BgPortals[portalnum].connectedRoom1 || room == g_BgPortals[portalnum].connectedRoom2) && sub_GAME_7F0B9F14(portalnum, pos, pos3))) { + lastportal = portalnum; + + room = (room ^ g_BgPortals[portalnum].connectedRoom1) ^ g_BgPortals[portalnum].connectedRoom2; + + break; + } + } + + if (g_BgPortals[portalnum].offset_portal == NULL) { + break; + } + } + + g_BgCurrentRoom = room; + bgDetermineVisibleRooms(); +} + + + +void addToByteSetMaxSize15(u8* set, u8 newElement) { + s32 i = 0; + + while (i < 0x10 && set[i] != 0xFF) { + if (newElement == set[i]) { + return; + } + i++; + } + + if (i < 0xF) { + set[i] = newElement; + set[i+1] = -1; + } + return; +} + + +/** + * Address: 7F0B4AB4 + */ +void bgFindRoomsAlongSegment(coord3d *fromPos, coord3d *toPos, u8 *fromRooms, u8 *finalRooms, s32 *traversedRooms, s32 *traversedRoomCount, s32 maxTraversedRooms) +{ + u8 sourceRooms[16]; + u8 foundRooms[16]; + u8 allRooms[16]; + s32 portalnum; + s32 i; + s32 count; + u8 portalStatuses[PORTMAX]; + + for (portalnum = 0; g_BgPortals[portalnum].offset_portal != 0; portalnum++) + { + portalStatuses[portalnum] = sub_GAME_7F0B9F14(portalnum, fromPos, toPos); + } + + for (count = 0; count < 8; count++) + { + sourceRooms[count] = fromRooms[count]; + } + + for (count = 0; count < 8; count++) + { + allRooms[count] = fromRooms[count]; + } + + count = 0; + + while ((sourceRooms[count] != 0xff) && (count < 16)) + { + count++; + } + + count = 0; + + do + { + foundRooms[0] = 0xff; + + for (portalnum = 0; g_BgPortals[portalnum].offset_portal != 0; portalnum++) + { + for (i = 0; (sourceRooms[i] != 0xff) && (i < 16); i++) + { + if (portalStatuses[portalnum] == 1) + { + if (g_BgPortals[portalnum].connectedRoom1 == sourceRooms[i]) + { + addToByteSetMaxSize15(foundRooms, g_BgPortals[portalnum].connectedRoom2); + addToByteSetMaxSize15(allRooms, g_BgPortals[portalnum].connectedRoom2); + portalStatuses[portalnum] = 0; + } + } + + if (portalStatuses[portalnum] == 2) + { + if (g_BgPortals[portalnum].connectedRoom2 == sourceRooms[i]) + { + addToByteSetMaxSize15(foundRooms, g_BgPortals[portalnum].connectedRoom1); + addToByteSetMaxSize15(allRooms, g_BgPortals[portalnum].connectedRoom1); + portalStatuses[portalnum] = 0; + } + } + } + } + + if (foundRooms[0] == 0xff) + { + break; + } + + for (count = 0; count < 16; count++) + { + sourceRooms[count] = foundRooms[count]; + } + + count = 0; + + while ((foundRooms[count] != 0xff) && (count < 16)) + { + count++; + } + + count = 0; + } + while (foundRooms[count] != 0xff); + + for (count = 0; (count < 7) && (sourceRooms[count] != 0xff); count++) + { + finalRooms[count] = sourceRooms[count]; + } + + finalRooms[count] = 0xff; + + for (count = 0; (count < maxTraversedRooms) && (allRooms[count] != 0xff); count++) + { + traversedRooms[count] = allRooms[count]; + } + + *traversedRoomCount = count; +} + + +/** + * Address 0x7F0B4E40. +*/ +Gfx *bgLevelRender(Gfx *arg0) +{ + gSPSetLights1(arg0++, GlobalLight); + gSPLookAt(arg0++, sub_GAME_7F078474()); + gSPSegment(arg0++, SPSEGMENT_BG_DL, ptr_bg_data); + + if (dword_CODE_bss_8007FF88 == 1) + { + gSPDisplayList(arg0++, dword_CODE_bss_8007BF98); + } + else + { + arg0 = fogRenderClearFogMode(bgScissorCurrentPlayerViewDefault(sub_GAME_7F0B8D78(fogSetRenderFogColor(arg0, 0)))); + } + + gSPMatrix(arg0++, g_viProjectionMatrix, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + + return bondviewGfxPlayerField5cMatrix(arg0++); +} + + + + + +f32 sub_GAME_7F0B4F9C(s32 arg0) +{ + return dword_CODE_bss_8007FF94[arg0 + 1]; +} + + + + + + +/** + * Calls @see bgScissorCurrentPlayerView with default current player values. + * Address 0x7F0B4FB4. + */ +Gfx* bgScissorCurrentPlayerViewDefault(Gfx* arg0) +{ + return bgScissorCurrentPlayerView( + arg0, + g_CurrentPlayer->viewleft, + g_CurrentPlayer->viewtop, + g_CurrentPlayer->viewleft + g_CurrentPlayer->viewx, + g_CurrentPlayer->viewtop + g_CurrentPlayer->viewy); +} + + + + + +/** + * Same as @see bgScissorCurrentPlayerView, but accepts float parameters. + * Address 0x7F0B4FF4. + */ +Gfx* bgScissorCurrentPlayerViewF(Gfx* arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) +{ + return bgScissorCurrentPlayerView( + arg0, + (s32)arg1, + (s32)arg2, + ceilFloatToInt(arg3), + ceilFloatToInt(arg4)); +} + + + + + +/** + * Specifies the drawing area (the scissoring box). + * View is bound to current player view properties, but parameters can clip to smaller area. + * + * @param arg0: Display list pointer + * @param left: Screen's left edge coordinates. Must be >= g_CurrentPlayer->viewleft otherwise ignored. + * @param top: Screen's top edge coordinates. Must be >= g_CurrentPlayer->viewtop otherwise ignored. + * @param width: Screen's right edge coordinates. Must be <= g_CurrentPlayer->viewleft+viewx otherwise ignored. + * @param height: Screen's left bottom coordinates. Must be <= g_CurrentPlayer->viewtop+viewy otherwise ignored. + * + * Address 0x7F0B5058. +*/ +Gfx *bgScissorCurrentPlayerView(Gfx *arg0, s32 left, s32 top, s32 width, s32 height) +{ + struct player *temp_v0; + + temp_v0 = g_CurrentPlayer; + + if (left < (s32) temp_v0->viewleft) + { + left = (s32) temp_v0->viewleft; + } + + if (top < (s32) temp_v0->viewtop) + { + top = (s32) temp_v0->viewtop; + } + + if (temp_v0->viewleft + temp_v0->viewx < width) + { + width = temp_v0->viewleft + temp_v0->viewx; + } + + if (temp_v0->viewtop + temp_v0->viewy < height) + { + height = temp_v0->viewtop + temp_v0->viewy; + } + + gDPSetScissor(arg0++, G_SC_NON_INTERLACE, left, top, width, height); + + return arg0; +} + + +void sub_GAME_7F0B5168(void) +{ + s32 i; + + for (i = 0; i < PORTMAX; i++) + { + table_for_portals[i].unk0 = -1; + } +} + + +/** + * Unreferenced. + * + * Loosely checks that arg1 surrounds arg0. Requires points be ordered according to min/max. + * + * Address 0x7F0B519C. + */ +s32 bgRectIsInside(struct bbox2d *arg0, struct bbox2d *arg1) +{ + if (arg1->min.x <= arg0->min.x) + { + if (arg0->min.x <= arg1->max.x) + { + if (arg1->min.y <= arg0->min.y) + { + if (arg0->min.y <= arg1->max.y) + { + return 1; + } + } + } + } + return 0; +} + + +/** + * Address: 7F0B5208 + */ +bool bgIsRoomOnScreen(s32 roomID, struct rectbbox *screenbox) +{ + s32 i; + coord3d projected; + coord3d corner; + s32 count_z; + s32 count_failed_projection; + s32 count_left; + s32 count_right; + s32 count_top; + s32 count_bottom; + f32 zrange[2]; + + count_z = 0; + count_failed_projection = 0; + count_left = 0; + count_right = 0; + count_top = 0; + count_bottom = 0; + + viGetZRange(zrange); + + zrange[1] = zrange[1] / mCurrentLevelVisibilityScale; + + for (i = 0; i < 8; i++) { + if (i & 1) { + corner.x = g_BgRoomInfo[roomID].minbounds.x; + } else { + corner.x = g_BgRoomInfo[roomID].maxbounds.x; + } + + if (i & 2) { + corner.y = g_BgRoomInfo[roomID].minbounds.y; + } else { + corner.y = g_BgRoomInfo[roomID].maxbounds.y; + } + + if (i & 4) { + corner.z = g_BgRoomInfo[roomID].minbounds.z; + } else { + corner.z = g_BgRoomInfo[roomID].maxbounds.z; + } + + if (bgProjectRoomCoordToScreen(&corner, &projected) == 0) { + if (zrange[1] <= -projected.z) { + count_z++; + } + + if (screenbox->left <= projected.x) { + count_left++; + } + + if (projected.x <= screenbox->right) { + count_right++; + } + + if (screenbox->up <= projected.y) { + count_top++; + } + + if (projected.y <= screenbox->down) { + count_bottom++; + } + + count_failed_projection++; + } else { + if (zrange[1] <= -projected.z) { + count_z++; + } + + if (projected.x <= screenbox->left) { + count_left++; + } else if (screenbox->right <= projected.x) { + count_right++; + } + + if (projected.y <= screenbox->up) { + count_top++; + } else if (screenbox->down <= projected.y) { + count_bottom++; + } + } + } + + /** + * If all 8 of the room's bounding box corners are behind the camera, + * reject this room + */ + if (count_failed_projection == 8 + || count_z == 8 + || count_left == 8 + || count_right == 8 + || count_top == 8 + || count_bottom == 8) { + return FALSE; + } + + return TRUE; +} + + +/** + * Address: 7F0B5488 + */ +bool bgProjectRoomCoordToScreen(coord3d* src, coord3d* dst) +{ + Mtxf* temp_a0; + s32 var_v0; + + temp_a0 = camGetWorldToScreenMtxf(); + dst->x = src->x * room_data_float2; + dst->y = src->y * room_data_float2; + dst->z = src->z * room_data_float2; + mtx4TransformVecInPlace(temp_a0, dst); + + transform3Dto2DWithZScaling(dst, dst); + + if (dst->z > 0.0f) + { + return FALSE; + } + else + { + return TRUE; + } +} + + +s32 sub_GAME_7F0B5528(s32 portalnum, f32 arg1, coord3d *arg2) +{ + Mtxf *matrix; + coord3d *point; + s32 i; + s32 next; + f32 zrange[2]; + s32 allbehind; + struct PortalMetric metric; + s32 len; + + matrix = camGetWorldToScreenMtxf(); + allbehind = 1; + viGetZRange(zrange); + zrange[1] /= mCurrentLevelVisibilityScale; + + for (i = 0; i < g_BgPortals[portalnum].offset_portal->numPoints; i++) { + point = &arg2[i]; + + point->x = (&g_BgPortals[portalnum].offset_portal->point)[i].x; + point->y = (&g_BgPortals[portalnum].offset_portal->point)[i].y; + point->z = (&g_BgPortals[portalnum].offset_portal->point)[i].z; + + if (arg1 != 0.0f) { + sub_GAME_7F0B96CC(portalnum, (f32 *) &metric); + + point->x += metric.normal.x * arg1; + point->y += metric.normal.y * arg1; + point->z += metric.normal.z * arg1; + } + + point = &arg2[i]; + point->x *= room_data_float2; + point->y *= room_data_float2; + point->z *= room_data_float2; + + mtx4TransformVecInPlace(matrix, point); + + if (-zrange[1] * 0.9f < point->z) { + allbehind = 0; + } + } + + if (allbehind) { + return 0; + } + + len = g_BgPortals[portalnum].offset_portal->numPoints; + + for (i = 0; i < g_BgPortals[portalnum].offset_portal->numPoints; i++) { + point = &arg2[i]; + next = (i + 1) % g_BgPortals[portalnum].offset_portal->numPoints; + + if ((point->z > 0.0f && arg2[next].z <= 0.0f) || (point->z <= 0.0f && arg2[next].z > 0.0f)) { + f32 scale = -point->z / (arg2[next].z - point->z); + + arg2[len].x = point->x + ((arg2[next].x - point->x) * scale); + arg2[len].y = point->y + ((arg2[next].y - point->y) * scale); + point = &arg2[i]; + arg2[len].z = 0.0f; + len++; + } + } + + return len; +} + + +s32 sub_GAME_7F0B5864(s32 portalnum, bbox2d *bbox) +{ + f32 scale; + PortalCache *cache; + s32 j; + coord3d points[19]; + coord2d screenpos; + bbox2d bounds; + s32 pointcount; + s32 onscreencount; + s32 i; + + cache = &table_for_portals[portalnum]; + + if (cache->count >= 0) + { + bbox->min.x = cache->bbox.min.x; + bbox->min.y = cache->bbox.min.y; + bbox->max.x = cache->bbox.max.x; + bbox->max.y = cache->bbox.max.y; + + return cache->count; + } + + scale = sub_GAME_7F0B9990(portalnum); + pointcount = sub_GAME_7F0B5528(portalnum, scale, points); + + if (scale > 0.0f) + { + pointcount += sub_GAME_7F0B5528(portalnum, -scale, &points[pointcount]); + } + + onscreencount = 0; + i = 0; + + if (pointcount > 0) + { + j = 0; + + do + { + if (points[j].z <= 0.0f) + { + transform3Dto2DWithZScaling(&points[j], &screenpos); + + if (onscreencount == 0) + { + bounds.min.x = (bounds.max.x = screenpos.x); + bounds.min.y = (bounds.f[1][1] = screenpos.f[1]); + } + else + { + if (screenpos.x < bounds.min.x) + { + bounds.min.x = screenpos.x; + } + + if (bounds.max.x < screenpos.x) + { + bounds.max.x = screenpos.x; + } + + if (screenpos.y < bounds.min.y) + { + bounds.min.y = screenpos.y; + } + + if (bounds.max.y < screenpos.y) + { + bounds.max.y = screenpos.y; + } + } + + onscreencount++; + } + + i++; + j++; + + } + while (i != pointcount); + } + + if (onscreencount == 0) + { + bounds.max.y = (bounds.min.x = 0.0f); + bounds.min.y = 0.0f; + bounds.max.x = 0.0f; + } + else + { + if ((bounds.max.x <= bounds.min.x) || (bounds.max.y <= bounds.min.y)) + { + bounds.min.x = g_CurrentPlayer->screensize.min.x; + bounds.min.y = g_CurrentPlayer->screensize.min.y; + bounds.max.x = g_CurrentPlayer->screensize.max.x; + bounds.max.y = g_CurrentPlayer->screensize.max.y; + } + } + + bbox->min.x = bounds.min.x; + bbox->min.y = bounds.min.y; + bbox->max.x = bounds.max.x; + bbox->max.y = bounds.max.y; + + cache->bbox.min.x = bbox->min.x; + cache->bbox.min.y = bbox->min.y; + cache->bbox.max.x = bbox->max.x; + cache->bbox.max.y = bbox->max.y; + cache->count = onscreencount; + + return onscreencount; +} + + +/** + * Unreferenced. + * + * Address 0x7F0B5B14. + */ +Gfx *bgFillRectangle(Gfx *gdl, s32 ulx, s32 uly, s32 lrx, s32 lry) +{ + gDPFillRectangle(gdl++, ulx, uly, lrx + 1, lry + 1); + return gdl; +} + + +/** + * Unreferenced. + */ +void bgFillRectangleWithSides(Gfx *gdl, s32 ulx, s32 uly, s32 lrx, s32 lry) +{ + bgFillRectangle( + bgFillRectangle( + bgFillRectangle( + bgFillRectangle(gdl, + ulx, uly, lrx, uly), /* full rectangle */ + lrx, uly, lrx, lry), /* right side */ + ulx, lry, lrx, lry), /* bottom */ + ulx, uly, ulx, lry); /* top */ +} + + + +/** + * Determines if two rectangles overlap, adjusting first argument to be the intersection. + * + * Returns 0 if no intersection (or edge equality), 1 otherwise. + * + * Address 0x7F0B5BDC. + */ +s32 bgRectIntersect(struct bbox2d *a, struct bbox2d *b) +{ + a->min.x = a->min.x > b->min.x ? a->min.x : b->min.x; + a->min.y = a->min.y > b->min.y ? a->min.y : b->min.y; + a->max.x = b->max.x > a->max.x ? a->max.x : b->max.x; + a->max.y = b->max.y > a->max.y ? a->max.y : b->max.y; + + if (a->min.x >= a->max.x) { + a->min.x = a->max.x; + return FALSE; + } + + if (a->max.y <= a->min.y) { + a->min.y = a->max.y; + return FALSE; + } + + return TRUE; +} + + +// Address: 0x7F0B5CC0 +// Does a union. Increases the size of 'a' so it contains 'b'. +void bgRectOutersect(struct bbox2d *a, struct bbox2d *b) +{ + (a->min).x = ((a->min).x < (b->min).x) ? (a->min).x : (b->min).x; + (a->min).y = ((a->min).y < (b->min).y) ? (a->min).y : (b->min).y; + (a->max).x = ((a->max).x > (b->max).x) ? (a->max).x : (b->max).x; + (a->max).y = ((a->max).y > (b->max).y) ? (a->max).y : (b->max).y; +} + +// Address: 0x7f0b5d58 +// Does a shallow copy of 'b' into 'a'. Equivalent to '*a = *b;'. +void bbox2dCopy(struct bbox2d *a, struct bbox2d *b) +{ + (a->min).x = (b->min).x; + (a->min).y = (b->min).y; + (a->max).x = (b->max).x; + (a->max).y = (b->max).y; +} + + +/** + * Formats a portal ID for debug output. + */ +char *bgDebPrintPORTALID(s32 portID) +{ + static char bgDebPortalOutBuffer[10][9]; + static s32 bgDebPortalOutLineNum = 0; + char *portIdStr; + + bgDebPortalOutLineNum = (bgDebPortalOutLineNum + 1) % 10; + portIdStr = bgDebPortalOutBuffer[bgDebPortalOutLineNum]; + + sprintf(portIdStr, "PORT%d", portID); + + return portIdStr; +} + + +/** + * Formats a room ID for debug output. + */ +char *bgDebPrintROOMID(s32 roomId) +{ + static char bgDebRoomOutBuffer[10][9]; + static s32 bgDebRoomOutLineNum = 0; + char *roomIdStr; + + bgDebRoomOutLineNum = (bgDebRoomOutLineNum + 1) % 10; + roomIdStr = bgDebRoomOutBuffer[bgDebRoomOutLineNum]; + + sprintf(roomIdStr, "ROOM%d", roomId); + + return roomIdStr; +} + + +/** + * These definitions must come AFTER bgDebPrintROOMID for matching. + */ + +/** + * address 8007C100 + * EU .bss 8007A040 +*/ +bg_queued_portal_entry g_BgPortalQueue[BG_PORTAL_QUEUE_LEN]; + +#ifdef VERSION_EU +GLOBAL_ASM( +.bss +.balign 4 +glabel g_BgPortals +.space 4 +glabel ptr_bgdata_offsets +.space 4 +glabel dword_CODE_bss_8007FF88 +.space 4 +glabel ptr_bgdata_room_fileposition_list +.space 4 +glabel dword_CODE_bss_8007FF90 +.space 4 +glabel dword_CODE_bss_8007FF94 +.space 4 +glabel dword_CODE_bss_8007FFA0 +.space 0xba0 +) + +u32 missingeubytes[4]; +s32 dword_CODE_bss_800815f0; +s32 dword_CODE_bss_800815f4; +s32 dword_CODE_bss_800815f8; +s32 eu_bss_8007BFA0; +s32 eu_bss_8007BFA4; +#else +GLOBAL_ASM( +.bss +.balign 4 +glabel g_BgPortals +.space 4 +glabel ptr_bgdata_offsets +.space 4 +glabel dword_CODE_bss_8007FF88 +.space 4 +glabel ptr_bgdata_room_fileposition_list +.space 4 +glabel dword_CODE_bss_8007FF90 +.space 4 +glabel dword_CODE_bss_8007FF94 +.space 4 +) + +s32 dword_CODE_bss_8007FF98; +s32 dword_CODE_bss_8007FF9C; + +GLOBAL_ASM( +.bss +.balign 4 +glabel dword_CODE_bss_8007FFA0 +.space 0x1650 +) + +s32 dword_CODE_bss_800815f0; +s32 dword_CODE_bss_800815f4; +s32 dword_CODE_bss_800815f8; +#endif + + //D:80044868 -s32 D_80044868 = 0x7FFF; -//D:8004486C -s32 D_8004486C = 0x7FFF; -//D:80044870 -s32 D_80044870 = 0x7FFF; +BoundVec D_80044868 = {0x7FFF, 0x7FFF, 0x7FFF}; //D:80044874 -s32 D_80044874 = 0xFFFF8000; -//D:80044878 -s32 D_80044878 = 0xFFFF8000; -//D:8004487C -s32 D_8004487C = 0xFFFF8000; +BoundVec D_80044874 = {-0x8000, -0x8000, -0x8000}; //D:80044880 -s32 D_80044880 = 0x7FFF; -//D:80044884 -s32 D_80044884 = 0x7FFF; -//D:80044888 -s32 D_80044888 = 0x7FFF; +BoundVec D_80044880 = {0x7FFF, 0x7FFF, 0x7FFF}; //D:8004488C -s32 D_8004488C = 0xFFFF8000; -//D:80044890 -s32 D_80044890 = 0xFFFF8000; -//D:80044894 -s32 D_80044894 = 0xFFFF8000; +BoundVec D_8004488C = {-0x8000, -0x8000, -0x8000}; //D:80044898 s32 D_80044898 = 0; //D:8004489C s32 D_8004489C = 0xF; //D:800448A0 -s32 D_800448A0 = 0; +s32 g_BgPortalQueueWriteIndex = 0; //D:800448A4 -s32 D_800448A4 = 0; +s32 g_BgPortalQueueReadIndex = 0; /** * Local stack. @@ -363,24 +1916,6 @@ s32 eu_cdata_0x1f1c0 = 0; s32 eu_cdata_0x1f1c4 = 0; #endif -// forward declarations - -void unload_rooms(void); -Gfx *sub_GAME_7F0B8D78(Gfx *arg0); -Gfx *sub_GAME_7F0B3C8C(Gfx *arg0); -s32 bgCheckIfRoomModelNeedsLoad(s32 roomID); -void sub_GAME_7F0B6368(s32 room); -Gfx *sub_GAME_7F0B677C(Gfx *arg0, s32 room_index); -Gfx *sub_GAME_7F0B6898(Gfx *arg0, s32 room_index); - -Gfx *bgScissorCurrentPlayerView(Gfx *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); - -s32 sub_GAME_7F0B5208(s32 arg0, void *arg1); -s32 sub_GAME_7F0B39BC(s32 curroom, s32 unk1, bbox2d *screensize, s32 next); - -// end forward declarations - - /* //###RenderMode / Combiner Look - Up - Tables The reason for this LUT is to dynamicly change the rendermode and combiner to @@ -632,3676 +2167,12 @@ Gfx *ptrDynamic_CC_RM_LUT[] = { }; - -// rodata - - - - -void bgInit(void) { - debTryAdd(&ptr_bg_c_debug_debug_notice_list, "bg_c_debug"); -} - - - - - -#ifdef NONMATCHING -// 91.60% mostly reg alloc -// https://decomp.me/scratch/puCqt -void sub_GAME_7F0B37EC(void) { - s_specialportal* currentPortal; - u8* portalList; - u8 portalId; - s32 portalIndex; - s32 portalIndex2; - bg_portal_data_entry* portalData; - u8 controlByte; - u8 tempByte; - - currentPortal = specialportalarray; - do { - portalList = currentPortal->portallist; - if (levelentry_index == currentPortal->levelid) { - portalId = *portalList; - do { - portalIndex = portalId & 0xFF; - portalIndex2 = portalIndex; - if ((s32) portalList[1] >= portalIndex) { - do { - portalData = &g_BgPortals[portalIndex2]; - controlByte = portalData->controlbytes1; - portalIndex2 = (portalIndex + 1) & 0xFF; - portalIndex = portalIndex2; - portalData->controlbytes1 = controlByte | 2; - } while ((s32) portalList[1] >= portalIndex2); - } - portalId = portalList[2]; - portalList += 2; - } while (portalId != 0xFF); - } else { - do { - tempByte = portalList[2]; - portalList += 2; - } while (tempByte != 0xFF); - } - currentPortal = (s_specialportal* ) (portalList + 1); - } while ((u32) currentPortal < (u32) &g_BgCurrentRoom); -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B37EC -/* 0E831C 7F0B37EC 3C028004 */ lui $v0, %hi(specialportalarray) -/* 0E8320 7F0B37F0 3C038004 */ lui $v1, %hi(g_BgCurrentRoom) -/* 0E8324 7F0B37F4 3C088008 */ lui $t0, %hi(g_BgPortals) -/* 0E8328 7F0B37F8 3C078004 */ lui $a3, %hi(levelentry_index) -/* 0E832C 7F0B37FC 24424824 */ addiu $v0, %lo(specialportalarray) # addiu $v0, $v0, 0x4824 -/* 0E8330 7F0B3800 24634838 */ addiu $v1, %lo(g_BgCurrentRoom) # addiu $v1, $v1, 0x4838 -/* 0E8334 7F0B3804 24E71400 */ addiu $a3, %lo(levelentry_index) # addiu $a3, $a3, 0x1400 -/* 0E8338 7F0B3808 2508FF80 */ addiu $t0, %lo(g_BgPortals) # addiu $t0, $t0, -0x80 -/* 0E833C 7F0B380C 240900FF */ li $t1, 255 -/* 0E8340 7F0B3810 8CEE0000 */ lw $t6, ($a3) -.L7F0B3814: -/* 0E8344 7F0B3814 904F0000 */ lbu $t7, ($v0) -/* 0E8348 7F0B3818 24420001 */ addiu $v0, $v0, 1 -/* 0E834C 7F0B381C 55CF001C */ bnel $t6, $t7, .L7F0B3890 -/* 0E8350 7F0B3820 904F0002 */ lbu $t7, 2($v0) -/* 0E8354 7F0B3824 90440000 */ lbu $a0, ($v0) -/* 0E8358 7F0B3828 90580001 */ lbu $t8, 1($v0) -.L7F0B382C: -/* 0E835C 7F0B382C 308500FF */ andi $a1, $a0, 0xff -/* 0E8360 7F0B3830 00A03025 */ move $a2, $a1 -/* 0E8364 7F0B3834 0305082A */ slt $at, $t8, $a1 -/* 0E8368 7F0B3838 5420000F */ bnezl $at, .L7F0B3878 -/* 0E836C 7F0B383C 90440002 */ lbu $a0, 2($v0) -/* 0E8370 7F0B3840 8D190000 */ lw $t9, ($t0) -.L7F0B3844: -/* 0E8374 7F0B3844 000650C0 */ sll $t2, $a2, 3 -/* 0E8378 7F0B3848 24A50001 */ addiu $a1, $a1, 1 -/* 0E837C 7F0B384C 032A2021 */ addu $a0, $t9, $t2 -/* 0E8380 7F0B3850 908B0006 */ lbu $t3, 6($a0) -/* 0E8384 7F0B3854 30A600FF */ andi $a2, $a1, 0xff -/* 0E8388 7F0B3858 00C02825 */ move $a1, $a2 -/* 0E838C 7F0B385C 356C0002 */ ori $t4, $t3, 2 -/* 0E8390 7F0B3860 A08C0006 */ sb $t4, 6($a0) -/* 0E8394 7F0B3864 904E0001 */ lbu $t6, 1($v0) -/* 0E8398 7F0B3868 01C6082A */ slt $at, $t6, $a2 -/* 0E839C 7F0B386C 5020FFF5 */ beql $at, $zero, .L7F0B3844 -/* 0E83A0 7F0B3870 8D190000 */ lw $t9, ($t0) -/* 0E83A4 7F0B3874 90440002 */ lbu $a0, 2($v0) -.L7F0B3878: -/* 0E83A8 7F0B3878 24420002 */ addiu $v0, $v0, 2 -/* 0E83AC 7F0B387C 5524FFEB */ bnel $t1, $a0, .L7F0B382C -/* 0E83B0 7F0B3880 90580001 */ lbu $t8, 1($v0) -/* 0E83B4 7F0B3884 10000006 */ b .L7F0B38A0 -/* 0E83B8 7F0B3888 24420001 */ addiu $v0, $v0, 1 -/* 0E83BC 7F0B388C 904F0002 */ lbu $t7, 2($v0) -.L7F0B3890: -/* 0E83C0 7F0B3890 24420002 */ addiu $v0, $v0, 2 -/* 0E83C4 7F0B3894 552FFFFE */ bnel $t1, $t7, .L7F0B3890 -/* 0E83C8 7F0B3898 904F0002 */ lbu $t7, 2($v0) -/* 0E83CC 7F0B389C 24420001 */ addiu $v0, $v0, 1 -.L7F0B38A0: -/* 0E83D0 7F0B38A0 0043082B */ sltu $at, $v0, $v1 -/* 0E83D4 7F0B38A4 5420FFDB */ bnezl $at, .L7F0B3814 -/* 0E83D8 7F0B38A8 8CEE0000 */ lw $t6, ($a3) -/* 0E83DC 7F0B38AC 03E00008 */ jr $ra -/* 0E83E0 7F0B38B0 00000000 */ nop -) -#endif - - - - - -/* -* Unused function -* Address: 7F0B38B4 -*/ -void sub_GAME_7F0B38B4(s32 arg0, u8 *arg1) { - - u8 *s0; - u8 *entry_start; - s32 v0; - s32 v1; - - s0 = arg1; - v0 = *arg1; - v1 = arg0 & 0xff; - - do { - entry_start = s0; - - do { - if (v1 == v0) goto found; - v0 = *(s0 + 1); - s0++; - } while (v0 != 0); - - do { s0++; } while (*s0 != 0); - s0++; - goto next_entry; - -found: - s0 = entry_start; - for (v0 = *entry_start; ; ) { - if (sub_GAME_7F0B5208(v0 ^ 0, &g_CurrentPlayer->screensize)) { - sub_GAME_7F0B39BC(*s0, 0, &g_CurrentPlayer->screensize, 1); - } - v0 = *(s0 + 1); - s0++; - if (v0 == 0) break; - } - s0++; - v0 = *s0; - do { - if (sub_GAME_7F0B5208(v0 ^ 0, &g_CurrentPlayer->screensize)) { - sub_GAME_7F0B39BC(*s0, 0, &g_CurrentPlayer->screensize, 1); - } - v0 = *(s0 + 1); - s0++; - } while (v0 != 0); - return; - -next_entry: - v0 = *s0; - } while (v0 != 0); - -} - - - -/** - * Address 0x7F0B39BC. - * -*/ -s32 sub_GAME_7F0B39BC(int curroom,int unk1, bbox2d * screensize, s32 next) +s32 getMaxNumRooms(void) { - int i; - int temp; - - g_BgRoomInfo[curroom].room_rendered = '\x01'; - - if (g_BgRoomInfo[curroom].room_loaded_mask != '\0') { - return 0; - } - - // Need g_BgNumberOfRoomsDrawn in a3 - for (i = 0; i < g_BgNumberOfRoomsDrawn; i++) - { - if (curroom == dword_CODE_bss_8007FFA0[i].roomid) { - if (dword_CODE_bss_8007FFA0[i].unk1 < unk1) { - dword_CODE_bss_8007FFA0[i].unk1 = unk1; - } - sub_GAME_7F0B5CC0(screensize,&dword_CODE_bss_8007FFA0[i].bbox); - temp = dword_CODE_bss_8007FFA0[i].next; - dword_CODE_bss_8007FFA0[i].bbox.min.x = screensize->min.x; - dword_CODE_bss_8007FFA0[i].bbox.min.y = screensize->min.y; - dword_CODE_bss_8007FFA0[i].bbox.max.x = screensize->max.x; - dword_CODE_bss_8007FFA0[i].bbox.max.y = screensize->max.y; - dword_CODE_bss_8007FFA0[i].next = temp | next; - - return temp; - } - } - -#if defined(VERSION_EU) - i = g_BgNumberOfRoomsDrawn; - if (i >= 0x78) { - i = 0x77; - } - dword_CODE_bss_8007FFA0[i].roomid = curroom; - dword_CODE_bss_8007FFA0[i].unk1 = unk1; - dword_CODE_bss_8007FFA0[i].bbox.min.x = screensize->min.x; - dword_CODE_bss_8007FFA0[i].bbox.min.y = screensize->min.y; - dword_CODE_bss_8007FFA0[i].bbox.max.x = screensize->max.x; - dword_CODE_bss_8007FFA0[i].bbox.max.y = screensize->max.y; - dword_CODE_bss_8007FFA0[i].next = next; - eu_cdata_0x1f0d0++; - if (eu_cdata_0x1f0d0 < 0x78) { - g_BgNumberOfRoomsDrawn = eu_cdata_0x1f0d0; - } - - return 0; -#else - i = g_BgNumberOfRoomsDrawn; - dword_CODE_bss_8007FFA0[i].roomid = curroom; - dword_CODE_bss_8007FFA0[i].unk1 = unk1; - dword_CODE_bss_8007FFA0[i].bbox.min.x = screensize->min.x; - dword_CODE_bss_8007FFA0[i].bbox.min.y = screensize->min.y; - dword_CODE_bss_8007FFA0[i].bbox.max.x = screensize->max.x; - dword_CODE_bss_8007FFA0[i].bbox.max.y = screensize->max.y; - dword_CODE_bss_8007FFA0[i].next = next; - g_BgNumberOfRoomsDrawn = i + 1; - - if (g_BgNumberOfRoomsDrawn) {} - - return 0; -#endif -} - - - - - -/* -* Unused function -* Address: ? -*/ -void bgZeroPortalsToRoom(s32 roomnum) -{ - g_BgRoomInfo[roomnum].portals_to_room_count = '\0'; -} - - - - - - -/* -* Unused function -* Address: 7F0B3B20 -*/ -s32 sub_GAME_7F0B3B20(void) -{ - s32 i; - - for (i=0;if[0][0] = dword_CODE_bss_8007FFA0[i].bbox.f[0][0]; - result->f[0][1] = dword_CODE_bss_8007FFA0[i].bbox.f[0][1]; - result->f[1][0] = dword_CODE_bss_8007FFA0[i].bbox.f[1][0]; - result->f[1][1] = dword_CODE_bss_8007FFA0[i].bbox.f[1][1]; - - return 1; - } - } - - // It's pointless to set those because when this function returns false, result is unused - result->f[0][0] = 0.0f; - result->f[0][1] = 0.0f; - result->f[1][0] = 0.0f; - result->f[1][1] = 0.0f; - - return 0; -} - - - - - -#if defined(LEFTOVERDEBUG) - -Gfx *sub_GAME_7F0B3C8C(Gfx *gdl) -{ - s32 i; - s32 j; - s32 b_max; - s32 b_min; - s32 notdone; - b_min = 99999999; - b_max = 0; - - for (j = 0; j < g_BgNumberOfRoomsDrawn; j++) - { - if (b_max < dword_CODE_bss_8007FFA0[j].unk1) - { - b_max = dword_CODE_bss_8007FFA0[j].unk1; - } - - if (dword_CODE_bss_8007FFA0[j].unk1 < b_min) - { - b_min=dword_CODE_bss_8007FFA0[j].unk1; - } - } - - for (i = b_min; i <= b_max; i++) - { - #ifdef DEBUG - notdone = g_BgNumberOfRoomsDrawn; - #endif - for (j = 0; j < g_BgNumberOfRoomsDrawn; j++) - { - if (i == dword_CODE_bss_8007FFA0[j].unk1) - { - gSPMatrix(gdl++, osVirtualToPhysical((void*)currentPlayerGetProjectionMatrix()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); - gdl = fogRenderClearFogMode(gdl); - - if (get_debug_do_draw_obj()) - { - if (sub_GAME_7F0BD8F0()) - { - gdl = chrpropsRenderPass(gdl, dword_CODE_bss_8007FFA0[j].roomid, 0); - } - } - - gSPMatrix(gdl++, osVirtualToPhysical((void*)get_BONDdata_field_10E0()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); - gdl = fogSetRenderFogColor( - bgScissorCurrentPlayerViewF( - gdl++, - dword_CODE_bss_8007FFA0[j].bbox.min.x, - dword_CODE_bss_8007FFA0[j].bbox.min.y, - dword_CODE_bss_8007FFA0[j].bbox.max.x, - dword_CODE_bss_8007FFA0[j].bbox.max.y), - 0); - - if (get_debug_do_draw_bg()) - { - if (sub_GAME_7F0BD8F0()) - { - gdl = sub_GAME_7F0B677C(gdl, dword_CODE_bss_8007FFA0[j].roomid); - } - } - - gSPMatrix(gdl++, osVirtualToPhysical((void*)currentPlayerGetProjectionMatrix()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); - gdl = fogRenderClearFogMode(gdl); - - if (get_debug_do_draw_obj()) - { - if (sub_GAME_7F0BD8F0()) - { - gdl = chrpropsRenderPass(gdl, dword_CODE_bss_8007FFA0[j].roomid, 2); - } - } - - if (1); - } - #ifdef DEBUG - notdone--; - #endif - } - } - #ifdef DEBUG - assert(notdone == 0); - #endif - - gdl = bgScissorCurrentPlayerViewDefault(fogRenderClearFogMode(gdl)); - gSPMatrix(gdl++, osVirtualToPhysical((void*)get_BONDdata_field_10E0()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); - - if (sub_GAME_7F0BD8F0()) - { - gdl = explosionRenderScorchBuffer(gdl); - gdl = explosionCallRenderBulletImpactOnProp(gdl); - } - - if (g_BgNumberOfRoomsDrawn); - if (dword_CODE_bss_8007FFA0); - - for (i = b_max; i >= b_min; i--) - { - #ifdef DEBUG - notdone = g_BgNumberOfRoomsDrawn; - #endif - - for (j = 0; j < g_BgNumberOfRoomsDrawn; j++) - { - if (i == dword_CODE_bss_8007FFA0[j].unk1) - { - gSPMatrix(gdl++, osVirtualToPhysical((void*)get_BONDdata_field_10E0()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); - gdl = fogSetRenderFogColor( - bgScissorCurrentPlayerViewF( - gdl++, - dword_CODE_bss_8007FFA0[j].bbox.min.x, - dword_CODE_bss_8007FFA0[j].bbox.min.y, - dword_CODE_bss_8007FFA0[j].bbox.max.x, - dword_CODE_bss_8007FFA0[j].bbox.max.y), - 1); - - if (get_debug_do_draw_bg()) - { - if (sub_GAME_7F0BD8F0()) - { - gdl = sub_GAME_7F0B6898(gdl, dword_CODE_bss_8007FFA0[j].roomid); - } - } - - gSPMatrix(gdl++, osVirtualToPhysical((void*)currentPlayerGetProjectionMatrix()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); - gdl = fogRenderClearFogMode(gdl); - - if (get_debug_do_draw_obj()) - { - if (sub_GAME_7F0BD8F0()) - { - gdl = chrpropsRenderPass(gdl, dword_CODE_bss_8007FFA0[j].roomid, 1); - } - } - - if (1); - } - #ifdef DEBUG - notdone--; - #endif - } - } - #ifdef DEBUG - assert(notdone == 0); - #endif - - return gdl; -} -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B3C8C -/* 0E5994 7F0B2FA4 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0E5998 7F0B2FA8 3C028004 */ lui $v0, %hi(g_BgNumberOfRoomsDrawn) # $v0, 0x8004 -/* 0E599C 7F0B2FAC 8C42DD1C */ lw $v0, %lo(g_BgNumberOfRoomsDrawn)($v0) -/* 0E59A0 7F0B2FB0 AFB70038 */ sw $s7, 0x38($sp) -/* 0E59A4 7F0B2FB4 AFB60034 */ sw $s6, 0x34($sp) -/* 0E59A8 7F0B2FB8 AFB0001C */ sw $s0, 0x1c($sp) -/* 0E59AC 7F0B2FBC 00808025 */ move $s0, $a0 -/* 0E59B0 7F0B2FC0 AFBF003C */ sw $ra, 0x3c($sp) -/* 0E59B4 7F0B2FC4 AFB50030 */ sw $s5, 0x30($sp) -/* 0E59B8 7F0B2FC8 AFB4002C */ sw $s4, 0x2c($sp) -/* 0E59BC 7F0B2FCC AFB30028 */ sw $s3, 0x28($sp) -/* 0E59C0 7F0B2FD0 AFB20024 */ sw $s2, 0x24($sp) -/* 0E59C4 7F0B2FD4 AFB10020 */ sw $s1, 0x20($sp) -/* 0E59C8 7F0B2FD8 0000B025 */ move $s6, $zero -/* 0E59CC 7F0B2FDC 18400018 */ blez $v0, .L7F0B3040 -/* 0E59D0 7F0B2FE0 24177FFF */ li $s7, 32767 -/* 0E59D4 7F0B2FE4 00027880 */ sll $t7, $v0, 2 -/* 0E59D8 7F0B2FE8 01E27823 */ subu $t7, $t7, $v0 -/* 0E59DC 7F0B2FEC 3C0E8007 */ lui $t6, %hi(dword_CODE_bss_8007FFA0) -/* 0E59E0 7F0B2FF0 25D2B3E0 */ addiu $s2, $t6, %lo(dword_CODE_bss_8007FFA0) -/* 0E59E4 7F0B2FF4 000F78C0 */ sll $t7, $t7, 3 -/* 0E59E8 7F0B2FF8 01F22021 */ addu $a0, $t7, $s2 -/* 0E59EC 7F0B2FFC 86430002 */ lh $v1, 2($s2) -.L7F0B3000: -/* 0E59F0 7F0B3000 26520018 */ addiu $s2, $s2, 0x18 -/* 0E59F4 7F0B3004 02C3082A */ slt $at, $s6, $v1 -/* 0E59F8 7F0B3008 50200005 */ beql $at, $zero, .L7F0B3020 -/* 0E59FC 7F0B300C 0077082A */ slt $at, $v1, $s7 -/* 0E5A00 7F0B3010 0003B400 */ sll $s6, $v1, 0x10 -/* 0E5A04 7F0B3014 0016C403 */ sra $t8, $s6, 0x10 -/* 0E5A08 7F0B3018 0300B025 */ move $s6, $t8 -/* 0E5A0C 7F0B301C 0077082A */ slt $at, $v1, $s7 -.L7F0B3020: -/* 0E5A10 7F0B3020 50200005 */ beql $at, $zero, .L7F0B3038 -/* 0E5A14 7F0B3024 0244082B */ sltu $at, $s2, $a0 -/* 0E5A18 7F0B3028 0003BC00 */ sll $s7, $v1, 0x10 -/* 0E5A1C 7F0B302C 0017CC03 */ sra $t9, $s7, 0x10 -/* 0E5A20 7F0B3030 0320B825 */ move $s7, $t9 -/* 0E5A24 7F0B3034 0244082B */ sltu $at, $s2, $a0 -.L7F0B3038: -/* 0E5A28 7F0B3038 5420FFF1 */ bnezl $at, .L7F0B3000 -/* 0E5A2C 7F0B303C 86430002 */ lh $v1, 2($s2) -.L7F0B3040: -/* 0E5A30 7F0B3040 0017AC00 */ sll $s5, $s7, 0x10 -/* 0E5A34 7F0B3044 00154403 */ sra $t0, $s5, 0x10 -/* 0E5A38 7F0B3048 02D7082A */ slt $at, $s6, $s7 -/* 0E5A3C 7F0B304C 1420005C */ bnez $at, .L7F0B31C0 -/* 0E5A40 7F0B3050 0100A825 */ move $s5, $t0 -/* 0E5A44 7F0B3054 3C140103 */ lui $s4, (0x01030040 >> 16) # lui $s4, 0x103 -/* 0E5A48 7F0B3058 36940040 */ ori $s4, (0x01030040 & 0xFFFF) # ori $s4, $s4, 0x40 -.L7F0B305C: -/* 0E5A4C 7F0B305C 18400052 */ blez $v0, .L7F0B31A8 -/* 0E5A50 7F0B3060 00009825 */ move $s3, $zero -/* 0E5A54 7F0B3064 3C128007 */ lui $s2, %hi(dword_CODE_bss_8007FFA0) # $s2, 0x8007 -/* 0E5A58 7F0B3068 2652B3E0 */ addiu $s2, %lo(dword_CODE_bss_8007FFA0) # addiu $s2, $s2, -0x4c20 -.L7F0B306C: -/* 0E5A5C 7F0B306C 86490002 */ lh $t1, 2($s2) -/* 0E5A60 7F0B3070 02008825 */ move $s1, $s0 -/* 0E5A64 7F0B3074 56A90049 */ bnel $s5, $t1, .L7F0B319C -/* 0E5A68 7F0B3078 26730001 */ addiu $s3, $s3, 1 -/* 0E5A6C 7F0B307C 26100008 */ addiu $s0, $s0, 8 -/* 0E5A70 7F0B3080 0FC1E0FD */ jal currentPlayerGetProjectionMatrix -/* 0E5A74 7F0B3084 AE340000 */ sw $s4, ($s1) -/* 0E5A78 7F0B3088 0C003838 */ jal osVirtualToPhysical -/* 0E5A7C 7F0B308C 00402025 */ move $a0, $v0 -/* 0E5A80 7F0B3090 AE220004 */ sw $v0, 4($s1) -/* 0E5A84 7F0B3094 0FC2E9A6 */ jal fogRenderClearFogMode -/* 0E5A88 7F0B3098 02002025 */ move $a0, $s0 -/* 0E5A8C 7F0B309C 0FC24104 */ jal get_debug_do_draw_obj -/* 0E5A90 7F0B30A0 00408025 */ move $s0, $v0 -/* 0E5A94 7F0B30A4 5040000A */ beql $v0, $zero, .L7F0B30D0 -/* 0E5A98 7F0B30A8 02008825 */ move $s1, $s0 -/* 0E5A9C 7F0B30AC 0FC2F328 */ jal sub_GAME_7F0BD8F0 -/* 0E5AA0 7F0B30B0 00000000 */ nop -/* 0E5AA4 7F0B30B4 10400005 */ beqz $v0, .L7F0B30CC -/* 0E5AA8 7F0B30B8 02002025 */ move $a0, $s0 -/* 0E5AAC 7F0B30BC 92450000 */ lbu $a1, ($s2) -/* 0E5AB0 7F0B30C0 0FC0E9ED */ jal chrpropsRenderPass -/* 0E5AB4 7F0B30C4 00003025 */ move $a2, $zero -/* 0E5AB8 7F0B30C8 00408025 */ move $s0, $v0 -.L7F0B30CC: -/* 0E5ABC 7F0B30CC 02008825 */ move $s1, $s0 -.L7F0B30D0: -/* 0E5AC0 7F0B30D0 AE340000 */ sw $s4, ($s1) -/* 0E5AC4 7F0B30D4 0FC1E105 */ jal get_BONDdata_field_10E0 -/* 0E5AC8 7F0B30D8 26100008 */ addiu $s0, $s0, 8 -/* 0E5ACC 7F0B30DC 0C003838 */ jal osVirtualToPhysical -/* 0E5AD0 7F0B30E0 00402025 */ move $a0, $v0 -/* 0E5AD4 7F0B30E4 AE220004 */ sw $v0, 4($s1) -/* 0E5AD8 7F0B30E8 C6440014 */ lwc1 $f4, 0x14($s2) -/* 0E5ADC 7F0B30EC 8E470010 */ lw $a3, 0x10($s2) -/* 0E5AE0 7F0B30F0 8E46000C */ lw $a2, 0xc($s2) -/* 0E5AE4 7F0B30F4 8E450008 */ lw $a1, 8($s2) -/* 0E5AE8 7F0B30F8 02002025 */ move $a0, $s0 -/* 0E5AEC 7F0B30FC 0FC2D0CC */ jal bgScissorCurrentPlayerViewF -/* 0E5AF0 7F0B3100 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0E5AF4 7F0B3104 00402025 */ move $a0, $v0 -/* 0E5AF8 7F0B3108 0FC2E91C */ jal fogSetRenderFogColor -/* 0E5AFC 7F0B310C 00002825 */ move $a1, $zero -/* 0E5B00 7F0B3110 0FC24102 */ jal get_debug_do_draw_bg -/* 0E5B04 7F0B3114 00408025 */ move $s0, $v0 -/* 0E5B08 7F0B3118 50400009 */ beql $v0, $zero, .L7F0B3140 -/* 0E5B0C 7F0B311C 02008825 */ move $s1, $s0 -/* 0E5B10 7F0B3120 0FC2F328 */ jal sub_GAME_7F0BD8F0 -/* 0E5B14 7F0B3124 00000000 */ nop -/* 0E5B18 7F0B3128 10400004 */ beqz $v0, .L7F0B313C -/* 0E5B1C 7F0B312C 02002025 */ move $a0, $s0 -/* 0E5B20 7F0B3130 0FC2D6AE */ jal sub_GAME_7F0B677C -/* 0E5B24 7F0B3134 92450000 */ lbu $a1, ($s2) -/* 0E5B28 7F0B3138 00408025 */ move $s0, $v0 -.L7F0B313C: -/* 0E5B2C 7F0B313C 02008825 */ move $s1, $s0 -.L7F0B3140: -/* 0E5B30 7F0B3140 AE340000 */ sw $s4, ($s1) -/* 0E5B34 7F0B3144 0FC1E0FD */ jal currentPlayerGetProjectionMatrix -/* 0E5B38 7F0B3148 26100008 */ addiu $s0, $s0, 8 -/* 0E5B3C 7F0B314C 0C003838 */ jal osVirtualToPhysical -/* 0E5B40 7F0B3150 00402025 */ move $a0, $v0 -/* 0E5B44 7F0B3154 AE220004 */ sw $v0, 4($s1) -/* 0E5B48 7F0B3158 0FC2E9A6 */ jal fogRenderClearFogMode -/* 0E5B4C 7F0B315C 02002025 */ move $a0, $s0 -/* 0E5B50 7F0B3160 0FC24104 */ jal get_debug_do_draw_obj -/* 0E5B54 7F0B3164 00408025 */ move $s0, $v0 -/* 0E5B58 7F0B3168 10400009 */ beqz $v0, .L7F0B3190 -/* 0E5B5C 7F0B316C 00000000 */ nop -/* 0E5B60 7F0B3170 0FC2F328 */ jal sub_GAME_7F0BD8F0 -/* 0E5B64 7F0B3174 00000000 */ nop -/* 0E5B68 7F0B3178 10400005 */ beqz $v0, .L7F0B3190 -/* 0E5B6C 7F0B317C 02002025 */ move $a0, $s0 -/* 0E5B70 7F0B3180 92450000 */ lbu $a1, ($s2) -/* 0E5B74 7F0B3184 0FC0E9ED */ jal chrpropsRenderPass -/* 0E5B78 7F0B3188 24060002 */ li $a2, 2 -/* 0E5B7C 7F0B318C 00408025 */ move $s0, $v0 -.L7F0B3190: -/* 0E5B80 7F0B3190 3C028004 */ lui $v0, %hi(g_BgNumberOfRoomsDrawn) # $v0, 0x8004 -/* 0E5B84 7F0B3194 8C42DD1C */ lw $v0, %lo(g_BgNumberOfRoomsDrawn)($v0) -/* 0E5B88 7F0B3198 26730001 */ addiu $s3, $s3, 1 -.L7F0B319C: -/* 0E5B8C 7F0B319C 0262082A */ slt $at, $s3, $v0 -/* 0E5B90 7F0B31A0 1420FFB2 */ bnez $at, .L7F0B306C -/* 0E5B94 7F0B31A4 26520018 */ addiu $s2, $s2, 0x18 -.L7F0B31A8: -/* 0E5B98 7F0B31A8 26B50001 */ addiu $s5, $s5, 1 -/* 0E5B9C 7F0B31AC 00155400 */ sll $t2, $s5, 0x10 -/* 0E5BA0 7F0B31B0 000AAC03 */ sra $s5, $t2, 0x10 -/* 0E5BA4 7F0B31B4 02D5082A */ slt $at, $s6, $s5 -/* 0E5BA8 7F0B31B8 1020FFA8 */ beqz $at, .L7F0B305C -/* 0E5BAC 7F0B31BC 00000000 */ nop -.L7F0B31C0: -/* 0E5BB0 7F0B31C0 3C140103 */ lui $s4, (0x01030040 >> 16) # lui $s4, 0x103 -/* 0E5BB4 7F0B31C4 36940040 */ ori $s4, (0x01030040 & 0xFFFF) # ori $s4, $s4, 0x40 -/* 0E5BB8 7F0B31C8 0FC2E9A6 */ jal fogRenderClearFogMode -/* 0E5BBC 7F0B31CC 02002025 */ move $a0, $s0 -/* 0E5BC0 7F0B31D0 0FC2D0BC */ jal bgScissorCurrentPlayerViewDefault -/* 0E5BC4 7F0B31D4 00402025 */ move $a0, $v0 -/* 0E5BC8 7F0B31D8 00408825 */ move $s1, $v0 -/* 0E5BCC 7F0B31DC 24500008 */ addiu $s0, $v0, 8 -/* 0E5BD0 7F0B31E0 0FC1E105 */ jal get_BONDdata_field_10E0 -/* 0E5BD4 7F0B31E4 AC540000 */ sw $s4, ($v0) -/* 0E5BD8 7F0B31E8 0C003838 */ jal osVirtualToPhysical -/* 0E5BDC 7F0B31EC 00402025 */ move $a0, $v0 -/* 0E5BE0 7F0B31F0 0FC2F328 */ jal sub_GAME_7F0BD8F0 -/* 0E5BE4 7F0B31F4 AE220004 */ sw $v0, 4($s1) -/* 0E5BE8 7F0B31F8 50400007 */ beql $v0, $zero, .L7F0B3218 -/* 0E5BEC 7F0B31FC 0016AC00 */ sll $s5, $s6, 0x10 -/* 0E5BF0 7F0B3200 0FC27FFE */ jal explosionRenderScorchBuffer -/* 0E5BF4 7F0B3204 02002025 */ move $a0, $s0 -/* 0E5BF8 7F0B3208 0FC284AF */ jal explosionCallRenderBulletImpactOnProp -/* 0E5BFC 7F0B320C 00402025 */ move $a0, $v0 -/* 0E5C00 7F0B3210 00408025 */ move $s0, $v0 -/* 0E5C04 7F0B3214 0016AC00 */ sll $s5, $s6, 0x10 -.L7F0B3218: -/* 0E5C08 7F0B3218 3C028004 */ lui $v0, %hi(g_BgNumberOfRoomsDrawn) # $v0, 0x8004 -/* 0E5C0C 7F0B321C 00156403 */ sra $t4, $s5, 0x10 -/* 0E5C10 7F0B3220 02D7082A */ slt $at, $s6, $s7 -/* 0E5C14 7F0B3224 8C42DD1C */ lw $v0, %lo(g_BgNumberOfRoomsDrawn)($v0) -/* 0E5C18 7F0B3228 14200045 */ bnez $at, .L7F0B3340 -/* 0E5C1C 7F0B322C 0180A825 */ move $s5, $t4 -.L7F0B3230: -/* 0E5C20 7F0B3230 1840003D */ blez $v0, .L7F0B3328 -/* 0E5C24 7F0B3234 00009825 */ move $s3, $zero -/* 0E5C28 7F0B3238 3C128007 */ lui $s2, %hi(dword_CODE_bss_8007FFA0) # $s2, 0x8007 -/* 0E5C2C 7F0B323C 2652B3E0 */ addiu $s2, %lo(dword_CODE_bss_8007FFA0) # addiu $s2, $s2, -0x4c20 -.L7F0B3240: -/* 0E5C30 7F0B3240 864D0002 */ lh $t5, 2($s2) -/* 0E5C34 7F0B3244 02008825 */ move $s1, $s0 -/* 0E5C38 7F0B3248 56AD0034 */ bnel $s5, $t5, .L7F0B331C -/* 0E5C3C 7F0B324C 26730001 */ addiu $s3, $s3, 1 -/* 0E5C40 7F0B3250 26100008 */ addiu $s0, $s0, 8 -/* 0E5C44 7F0B3254 0FC1E105 */ jal get_BONDdata_field_10E0 -/* 0E5C48 7F0B3258 AE340000 */ sw $s4, ($s1) -/* 0E5C4C 7F0B325C 0C003838 */ jal osVirtualToPhysical -/* 0E5C50 7F0B3260 00402025 */ move $a0, $v0 -/* 0E5C54 7F0B3264 AE220004 */ sw $v0, 4($s1) -/* 0E5C58 7F0B3268 C6460014 */ lwc1 $f6, 0x14($s2) -/* 0E5C5C 7F0B326C 8E470010 */ lw $a3, 0x10($s2) -/* 0E5C60 7F0B3270 8E46000C */ lw $a2, 0xc($s2) -/* 0E5C64 7F0B3274 8E450008 */ lw $a1, 8($s2) -/* 0E5C68 7F0B3278 02002025 */ move $a0, $s0 -/* 0E5C6C 7F0B327C 0FC2D0CC */ jal bgScissorCurrentPlayerViewF -/* 0E5C70 7F0B3280 E7A60010 */ swc1 $f6, 0x10($sp) -/* 0E5C74 7F0B3284 00402025 */ move $a0, $v0 -/* 0E5C78 7F0B3288 0FC2E91C */ jal fogSetRenderFogColor -/* 0E5C7C 7F0B328C 24050001 */ li $a1, 1 -/* 0E5C80 7F0B3290 0FC24102 */ jal get_debug_do_draw_bg -/* 0E5C84 7F0B3294 00408025 */ move $s0, $v0 -/* 0E5C88 7F0B3298 50400009 */ beql $v0, $zero, .L7F0B32C0 -/* 0E5C8C 7F0B329C 02008825 */ move $s1, $s0 -/* 0E5C90 7F0B32A0 0FC2F328 */ jal sub_GAME_7F0BD8F0 -/* 0E5C94 7F0B32A4 00000000 */ nop -/* 0E5C98 7F0B32A8 10400004 */ beqz $v0, .L7F0B32BC -/* 0E5C9C 7F0B32AC 02002025 */ move $a0, $s0 -/* 0E5CA0 7F0B32B0 0FC2D6F5 */ jal sub_GAME_7F0B6898 -/* 0E5CA4 7F0B32B4 92450000 */ lbu $a1, ($s2) -/* 0E5CA8 7F0B32B8 00408025 */ move $s0, $v0 -.L7F0B32BC: -/* 0E5CAC 7F0B32BC 02008825 */ move $s1, $s0 -.L7F0B32C0: -/* 0E5CB0 7F0B32C0 AE340000 */ sw $s4, ($s1) -/* 0E5CB4 7F0B32C4 0FC1E0FD */ jal currentPlayerGetProjectionMatrix -/* 0E5CB8 7F0B32C8 26100008 */ addiu $s0, $s0, 8 -/* 0E5CBC 7F0B32CC 0C003838 */ jal osVirtualToPhysical -/* 0E5CC0 7F0B32D0 00402025 */ move $a0, $v0 -/* 0E5CC4 7F0B32D4 AE220004 */ sw $v0, 4($s1) -/* 0E5CC8 7F0B32D8 0FC2E9A6 */ jal fogRenderClearFogMode -/* 0E5CCC 7F0B32DC 02002025 */ move $a0, $s0 -/* 0E5CD0 7F0B32E0 0FC24104 */ jal get_debug_do_draw_obj -/* 0E5CD4 7F0B32E4 00408025 */ move $s0, $v0 -/* 0E5CD8 7F0B32E8 10400009 */ beqz $v0, .L7F0B3310 -/* 0E5CDC 7F0B32EC 00000000 */ nop -/* 0E5CE0 7F0B32F0 0FC2F328 */ jal sub_GAME_7F0BD8F0 -/* 0E5CE4 7F0B32F4 00000000 */ nop -/* 0E5CE8 7F0B32F8 10400005 */ beqz $v0, .L7F0B3310 -/* 0E5CEC 7F0B32FC 02002025 */ move $a0, $s0 -/* 0E5CF0 7F0B3300 92450000 */ lbu $a1, ($s2) -/* 0E5CF4 7F0B3304 0FC0E9ED */ jal chrpropsRenderPass -/* 0E5CF8 7F0B3308 24060001 */ li $a2, 1 -/* 0E5CFC 7F0B330C 00408025 */ move $s0, $v0 -.L7F0B3310: -/* 0E5D00 7F0B3310 3C028004 */ lui $v0, %hi(g_BgNumberOfRoomsDrawn) # $v0, 0x8004 -/* 0E5D04 7F0B3314 8C42DD1C */ lw $v0, %lo(g_BgNumberOfRoomsDrawn)($v0) -/* 0E5D08 7F0B3318 26730001 */ addiu $s3, $s3, 1 -.L7F0B331C: -/* 0E5D0C 7F0B331C 0262082A */ slt $at, $s3, $v0 -/* 0E5D10 7F0B3320 1420FFC7 */ bnez $at, .L7F0B3240 -/* 0E5D14 7F0B3324 26520018 */ addiu $s2, $s2, 0x18 -.L7F0B3328: -/* 0E5D18 7F0B3328 26B5FFFF */ addiu $s5, $s5, -1 -/* 0E5D1C 7F0B332C 00157C00 */ sll $t7, $s5, 0x10 -/* 0E5D20 7F0B3330 000FAC03 */ sra $s5, $t7, 0x10 -/* 0E5D24 7F0B3334 02B7082A */ slt $at, $s5, $s7 -/* 0E5D28 7F0B3338 1020FFBD */ beqz $at, .L7F0B3230 -/* 0E5D2C 7F0B333C 00000000 */ nop -.L7F0B3340: -/* 0E5D30 7F0B3340 8FBF003C */ lw $ra, 0x3c($sp) -/* 0E5D34 7F0B3344 02001025 */ move $v0, $s0 -/* 0E5D38 7F0B3348 8FB0001C */ lw $s0, 0x1c($sp) -/* 0E5D3C 7F0B334C 8FB10020 */ lw $s1, 0x20($sp) -/* 0E5D40 7F0B3350 8FB20024 */ lw $s2, 0x24($sp) -/* 0E5D44 7F0B3354 8FB30028 */ lw $s3, 0x28($sp) -/* 0E5D48 7F0B3358 8FB4002C */ lw $s4, 0x2c($sp) -/* 0E5D4C 7F0B335C 8FB50030 */ lw $s5, 0x30($sp) -/* 0E5D50 7F0B3360 8FB60034 */ lw $s6, 0x34($sp) -/* 0E5D54 7F0B3364 8FB70038 */ lw $s7, 0x38($sp) -/* 0E5D58 7F0B3368 03E00008 */ jr $ra -/* 0E5D5C 7F0B336C 27BD0040 */ addiu $sp, $sp, 0x40 -) -#endif - - - - - -/* - * Address: 0x7F0B4034 -*/ -s32 getPriMappingBinCount(s32 room) -{ - int i = room; - while (ptr_bgdata_room_fileposition_list[i].pPriMappingBin == 0) - { - i++; - } - return i; -} - -/* - * Address: 0x7F0B4084 -*/ -s32 getSecMappingBinCount(s32 room) -{ - int i = room; - while (ptr_bgdata_room_fileposition_list[i].pSecMappingBin == 0) - { - i++; - } - return i; -} - - -/* - * Address: 0x7F0B40D4 -*/ -s32 getPointTableBinCount(s32 room) -{ - int i = room; - while (ptr_bgdata_room_fileposition_list[i].pPointTableBin == 0) - { - i++; - } - return i; -} - - - - - - -/* - * Address: 0x7F0B4124 -*/ -#ifdef NONMATCHING -void load_bg_file(LEVEL_INDEX stagenum) -{ - -} -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel load_bg_file -/* 0E8C54 7F0B4124 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 0E8C58 7F0B4128 AFB20020 */ sw $s2, 0x20($sp) -/* 0E8C5C 7F0B412C 3C128004 */ lui $s2, %hi(levelentry_index) -/* 0E8C60 7F0B4130 AFB00018 */ sw $s0, 0x18($sp) -/* 0E8C64 7F0B4134 26521400 */ addiu $s2, %lo(levelentry_index) # addiu $s2, $s2, 0x1400 -/* 0E8C68 7F0B4138 3C108004 */ lui $s0, %hi(g_BgRoomInfo) -/* 0E8C6C 7F0B413C 3C028004 */ lui $v0, %hi(g_MaxNumRooms) -/* 0E8C70 7F0B4140 AFBF003C */ sw $ra, 0x3c($sp) -/* 0E8C74 7F0B4144 AFBE0038 */ sw $fp, 0x38($sp) -/* 0E8C78 7F0B4148 AFB70034 */ sw $s7, 0x34($sp) -/* 0E8C7C 7F0B414C AFB60030 */ sw $s6, 0x30($sp) -/* 0E8C80 7F0B4150 AFB5002C */ sw $s5, 0x2c($sp) -/* 0E8C84 7F0B4154 AFB40028 */ sw $s4, 0x28($sp) -/* 0E8C88 7F0B4158 AFB30024 */ sw $s3, 0x24($sp) -/* 0E8C8C 7F0B415C AFB1001C */ sw $s1, 0x1c($sp) -/* 0E8C90 7F0B4160 AE400000 */ sw $zero, ($s2) -/* 0E8C94 7F0B4164 244242F4 */ addiu $v0, %lo(g_MaxNumRooms) # addiu $v0, $v0, 0x42f4 -/* 0E8C98 7F0B4168 26101414 */ addiu $s0, %lo(g_BgRoomInfo) # addiu $s0, $s0, 0x1414 -.L7F0B416C: -/* 0E8C9C 7F0B416C 26100050 */ addiu $s0, $s0, 0x50 -/* 0E8CA0 7F0B4170 0202082B */ sltu $at, $s0, $v0 -/* 0E8CA4 7F0B4174 1420FFFD */ bnez $at, .L7F0B416C -/* 0E8CA8 7F0B4178 AE00FFDC */ sw $zero, -0x24($s0) -/* 0E8CAC 7F0B417C 3C028004 */ lui $v0, %hi(levelinfotable) -/* 0E8CB0 7F0B4180 2442448C */ addiu $v0, %lo(levelinfotable) # addiu $v0, $v0, 0x448c -/* 0E8CB4 7F0B4184 00008825 */ move $s1, $zero -.L7F0B4188: -/* 0E8CB8 7F0B4188 8C4E0000 */ lw $t6, ($v0) -/* 0E8CBC 7F0B418C 548E0003 */ bnel $a0, $t6, .L7F0B419C -/* 0E8CC0 7F0B4190 26310001 */ addiu $s1, $s1, 1 -/* 0E8CC4 7F0B4194 AE510000 */ sw $s1, ($s2) -/* 0E8CC8 7F0B4198 26310001 */ addiu $s1, $s1, 1 -.L7F0B419C: -/* 0E8CCC 7F0B419C 2A210026 */ slti $at, $s1, 0x26 -/* 0E8CD0 7F0B41A0 1420FFF9 */ bnez $at, .L7F0B4188 -/* 0E8CD4 7F0B41A4 24420018 */ addiu $v0, $v0, 0x18 -/* 0E8CD8 7F0B41A8 0FC2ED34 */ jal init_lightfixture_tables -/* 0E8CDC 7F0B41AC AFA400B8 */ sw $a0, 0xb8($sp) -/* 0E8CE0 7F0B41B0 8E580000 */ lw $t8, ($s2) -/* 0E8CE4 7F0B41B4 24140018 */ li $s4, 24 -/* 0E8CE8 7F0B41B8 3C118004 */ lui $s1, %hi(levelinfotable) -/* 0E8CEC 7F0B41BC 03140019 */ multu $t8, $s4 -/* 0E8CF0 7F0B41C0 2631448C */ addiu $s1, %lo(levelinfotable) # addiu $s1, $s1, 0x448c -/* 0E8CF4 7F0B41C4 3C178008 */ lui $s7, %hi(ptr_bg_data) -/* 0E8CF8 7F0B41C8 26F7BF90 */ addiu $s7, %lo(ptr_bg_data) # addiu $s7, $s7, -0x4070 -/* 0E8CFC 7F0B41CC 27A50070 */ addiu $a1, $sp, 0x70 -/* 0E8D00 7F0B41D0 AEE50000 */ sw $a1, ($s7) -/* 0E8D04 7F0B41D4 00003025 */ move $a2, $zero -/* 0E8D08 7F0B41D8 24070040 */ li $a3, 64 -/* 0E8D0C 7F0B41DC 0000C812 */ mflo $t9 -/* 0E8D10 7F0B41E0 02394021 */ addu $t0, $s1, $t9 -/* 0E8D14 7F0B41E4 0FC2F35F */ jal obLoadBGFileBytesAtOffset -/* 0E8D18 7F0B41E8 8D040004 */ lw $a0, 4($t0) -/* 0E8D1C 7F0B41EC 8EE20000 */ lw $v0, ($s7) -/* 0E8D20 7F0B41F0 3C168008 */ lui $s6, %hi(ptr_bgdata_offsets) -/* 0E8D24 7F0B41F4 26D6FF84 */ addiu $s6, %lo(ptr_bgdata_offsets) # addiu $s6, $s6, -0x7c -/* 0E8D28 7F0B41F8 AEC20000 */ sw $v0, ($s6) -/* 0E8D2C 7F0B41FC 8C4A0004 */ lw $t2, 4($v0) -/* 0E8D30 7F0B4200 3C13F100 */ lui $s3, 0xf100 -/* 0E8D34 7F0B4204 3C158008 */ lui $s5, %hi(ptr_bgdata_room_fileposition_list) -/* 0E8D38 7F0B4208 01425821 */ addu $t3, $t2, $v0 -/* 0E8D3C 7F0B420C 26B5FF8C */ addiu $s5, %lo(ptr_bgdata_room_fileposition_list) # addiu $s5, $s5, -0x74 -/* 0E8D40 7F0B4210 01736021 */ addu $t4, $t3, $s3 -/* 0E8D44 7F0B4214 AEAC0000 */ sw $t4, ($s5) -/* 0E8D48 7F0B4218 8D900018 */ lw $s0, 0x18($t4) -/* 0E8D4C 7F0B421C 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff -/* 0E8D50 7F0B4220 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0E8D54 7F0B4224 02017024 */ and $t6, $s0, $at -/* 0E8D58 7F0B4228 25D0FFFF */ addiu $s0, $t6, -1 -/* 0E8D5C 7F0B422C 360F000F */ ori $t7, $s0, 0xf -/* 0E8D60 7F0B4230 25F00001 */ addiu $s0, $t7, 1 -/* 0E8D64 7F0B4234 02002025 */ move $a0, $s0 -/* 0E8D68 7F0B4238 0C0025C8 */ jal mempAllocBytesInBank -/* 0E8D6C 7F0B423C 24050004 */ li $a1, 4 -/* 0E8D70 7F0B4240 8E580000 */ lw $t8, ($s2) -/* 0E8D74 7F0B4244 AEE20000 */ sw $v0, ($s7) -/* 0E8D78 7F0B4248 00402825 */ move $a1, $v0 -/* 0E8D7C 7F0B424C 03140019 */ multu $t8, $s4 -/* 0E8D80 7F0B4250 00003025 */ move $a2, $zero -/* 0E8D84 7F0B4254 02003825 */ move $a3, $s0 -/* 0E8D88 7F0B4258 0000C812 */ mflo $t9 -/* 0E8D8C 7F0B425C 02394021 */ addu $t0, $s1, $t9 -/* 0E8D90 7F0B4260 0FC2F35F */ jal obLoadBGFileBytesAtOffset -/* 0E8D94 7F0B4264 8D040004 */ lw $a0, 4($t0) -/* 0E8D98 7F0B4268 8E490000 */ lw $t1, ($s2) -/* 0E8D9C 7F0B426C 24050002 */ li $a1, 2 -/* 0E8DA0 7F0B4270 00003025 */ move $a2, $zero -/* 0E8DA4 7F0B4274 01340019 */ multu $t1, $s4 -/* 0E8DA8 7F0B4278 24070004 */ li $a3, 4 -/* 0E8DAC 7F0B427C 00005012 */ mflo $t2 -/* 0E8DB0 7F0B4280 022A5821 */ addu $t3, $s1, $t2 -/* 0E8DB4 7F0B4284 0FC2F341 */ jal _fileNameLoadToBank -/* 0E8DB8 7F0B4288 8D640008 */ lw $a0, 8($t3) -/* 0E8DBC 7F0B428C 3C108008 */ lui $s0, %hi(gptr_stan) -/* 0E8DC0 7F0B4290 2610BF94 */ addiu $s0, %lo(gptr_stan) # addiu $s0, $s0, -0x406c -/* 0E8DC4 7F0B4294 AE020000 */ sw $v0, ($s0) -/* 0E8DC8 7F0B4298 00402025 */ move $a0, $v0 -/* 0E8DCC 7F0B429C 00002825 */ move $a1, $zero -/* 0E8DD0 7F0B42A0 0FC2CBCB */ jal stanDetermineEOF -/* 0E8DD4 7F0B42A4 00403025 */ move $a2, $v0 -/* 0E8DD8 7F0B42A8 0FC2BD6E */ jal stanLoadFile -/* 0E8DDC 7F0B42AC 8E040000 */ lw $a0, ($s0) -/* 0E8DE0 7F0B42B0 8E4C0000 */ lw $t4, ($s2) -/* 0E8DE4 7F0B42B4 01940019 */ multu $t4, $s4 -/* 0E8DE8 7F0B42B8 00006812 */ mflo $t5 -/* 0E8DEC 7F0B42BC 022D7021 */ addu $t6, $s1, $t5 -/* 0E8DF0 7F0B42C0 0FC2D204 */ jal sub_GAME_7F0B4810 -/* 0E8DF4 7F0B42C4 C5CC000C */ lwc1 $f12, 0xc($t6) -/* 0E8DF8 7F0B42C8 8E4F0000 */ lw $t7, ($s2) -/* 0E8DFC 7F0B42CC 01F40019 */ multu $t7, $s4 -/* 0E8E00 7F0B42D0 0000C012 */ mflo $t8 -/* 0E8E04 7F0B42D4 0238C821 */ addu $t9, $s1, $t8 -/* 0E8E08 7F0B42D8 0FC2CA54 */ jal setLevelScale -/* 0E8E0C 7F0B42DC C72C000C */ lwc1 $f12, 0xc($t9) -/* 0E8E10 7F0B42E0 8E480000 */ lw $t0, ($s2) -/* 0E8E14 7F0B42E4 01140019 */ multu $t0, $s4 -/* 0E8E18 7F0B42E8 00004812 */ mflo $t1 -/* 0E8E1C 7F0B42EC 02295021 */ addu $t2, $s1, $t1 -/* 0E8E20 7F0B42F0 0FC2456F */ jal setDebugCameraScale -/* 0E8E24 7F0B42F4 C54C000C */ lwc1 $f12, 0xc($t2) -/* 0E8E28 7F0B42F8 8E4B0000 */ lw $t3, ($s2) -/* 0E8E2C 7F0B42FC 01740019 */ multu $t3, $s4 -/* 0E8E30 7F0B4300 00006012 */ mflo $t4 -/* 0E8E34 7F0B4304 022C6821 */ addu $t5, $s1, $t4 -/* 0E8E38 7F0B4308 0FC08B87 */ jal chrRemoved7F022E1C -/* 0E8E3C 7F0B430C C5AC000C */ lwc1 $f12, 0xc($t5) -/* 0E8E40 7F0B4310 8E4E0000 */ lw $t6, ($s2) -/* 0E8E44 7F0B4314 3C108004 */ lui $s0, %hi(mCurrentLevelVisibilityScale) -/* 0E8E48 7F0B4318 261013FC */ addiu $s0, %lo(mCurrentLevelVisibilityScale) # addiu $s0, $s0, 0x13fc -/* 0E8E4C 7F0B431C 01D40019 */ multu $t6, $s4 -/* 0E8E50 7F0B4320 00007812 */ mflo $t7 -/* 0E8E54 7F0B4324 022FC021 */ addu $t8, $s1, $t7 -/* 0E8E58 7F0B4328 C7040010 */ lwc1 $f4, 0x10($t8) -/* 0E8E5C 7F0B432C E6040000 */ swc1 $f4, ($s0) -/* 0E8E60 7F0B4330 0FC225DB */ jal sub_GAME_7F08976C -/* 0E8E64 7F0B4334 C60C0000 */ lwc1 $f12, ($s0) -/* 0E8E68 7F0B4338 0FC16313 */ jal matrix_4x4_7F058C4C -/* 0E8E6C 7F0B433C C60C0000 */ lwc1 $f12, ($s0) -/* 0E8E70 7F0B4340 8EE20000 */ lw $v0, ($s7) -/* 0E8E74 7F0B4344 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007BF98) -/* 0E8E78 7F0B4348 3C048008 */ lui $a0, %hi(dword_CODE_bss_8007FF88) -/* 0E8E7C 7F0B434C 8C590000 */ lw $t9, ($v0) -/* 0E8E80 7F0B4350 2484FF88 */ addiu $a0, %lo(dword_CODE_bss_8007FF88) # addiu $a0, $a0, -0x78 -/* 0E8E84 7F0B4354 2463BF98 */ addiu $v1, %lo(dword_CODE_bss_8007BF98) # addiu $v1, $v1, -0x4068 -/* 0E8E88 7F0B4358 24080001 */ li $t0, 1 -/* 0E8E8C 7F0B435C AC880000 */ sw $t0, ($a0) -/* 0E8E90 7F0B4360 1720010E */ bnez $t9, .L7F0B479C -/* 0E8E94 7F0B4364 AC790000 */ sw $t9, ($v1) -/* 0E8E98 7F0B4368 240A0002 */ li $t2, 2 -/* 0E8E9C 7F0B436C AC8A0000 */ sw $t2, ($a0) -/* 0E8EA0 7F0B4370 AEC20000 */ sw $v0, ($s6) -/* 0E8EA4 7F0B4374 8C4B0004 */ lw $t3, 4($v0) -/* 0E8EA8 7F0B4378 3C168004 */ lui $s6, %hi(g_MaxNumRooms) -/* 0E8EAC 7F0B437C 26D642F4 */ addiu $s6, %lo(g_MaxNumRooms) # addiu $s6, $s6, 0x42f4 -/* 0E8EB0 7F0B4380 01626021 */ addu $t4, $t3, $v0 -/* 0E8EB4 7F0B4384 01936821 */ addu $t5, $t4, $s3 -/* 0E8EB8 7F0B4388 AEAD0000 */ sw $t5, ($s5) -/* 0E8EBC 7F0B438C AEC00000 */ sw $zero, ($s6) -/* 0E8EC0 7F0B4390 8DAE001C */ lw $t6, 0x1c($t5) -/* 0E8EC4 7F0B4394 00402825 */ move $a1, $v0 -/* 0E8EC8 7F0B4398 11C00008 */ beqz $t6, .L7F0B43BC -/* 0E8ECC 7F0B439C 25A40018 */ addiu $a0, $t5, 0x18 -/* 0E8ED0 7F0B43A0 8ECF0000 */ lw $t7, ($s6) -.L7F0B43A4: -/* 0E8ED4 7F0B43A4 24840018 */ addiu $a0, $a0, 0x18 -/* 0E8ED8 7F0B43A8 25F80001 */ addiu $t8, $t7, 1 -/* 0E8EDC 7F0B43AC AED80000 */ sw $t8, ($s6) -/* 0E8EE0 7F0B43B0 8C990004 */ lw $t9, 4($a0) -/* 0E8EE4 7F0B43B4 5720FFFB */ bnezl $t9, .L7F0B43A4 -/* 0E8EE8 7F0B43B8 8ECF0000 */ lw $t7, ($s6) -.L7F0B43BC: -/* 0E8EEC 7F0B43BC 8CA80008 */ lw $t0, 8($a1) -/* 0E8EF0 7F0B43C0 3C1E8008 */ lui $fp, %hi(g_BgPortals) -/* 0E8EF4 7F0B43C4 27DEFF80 */ addiu $fp, %lo(g_BgPortals) # addiu $fp, $fp, -0x80 -/* 0E8EF8 7F0B43C8 01024821 */ addu $t1, $t0, $v0 -/* 0E8EFC 7F0B43CC 01335021 */ addu $t2, $t1, $s3 -/* 0E8F00 7F0B43D0 AFCA0000 */ sw $t2, ($fp) -/* 0E8F04 7F0B43D4 8CA3000C */ lw $v1, 0xc($a1) -/* 0E8F08 7F0B43D8 14600004 */ bnez $v1, .L7F0B43EC -/* 0E8F0C 7F0B43DC 3C128008 */ lui $s2, %hi(dword_CODE_bss_8007FF90) -/* 0E8F10 7F0B43E0 2652FF90 */ addiu $s2, %lo(dword_CODE_bss_8007FF90) # addiu $s2, $s2, -0x70 -/* 0E8F14 7F0B43E4 1000000F */ b .L7F0B4424 -/* 0E8F18 7F0B43E8 AE400000 */ sw $zero, ($s2) -.L7F0B43EC: -/* 0E8F1C 7F0B43EC 3C128008 */ lui $s2, %hi(dword_CODE_bss_8007FF90) -/* 0E8F20 7F0B43F0 00625821 */ addu $t3, $v1, $v0 -/* 0E8F24 7F0B43F4 2652FF90 */ addiu $s2, %lo(dword_CODE_bss_8007FF90) # addiu $s2, $s2, -0x70 -/* 0E8F28 7F0B43F8 01736021 */ addu $t4, $t3, $s3 -/* 0E8F2C 7F0B43FC AE4C0000 */ sw $t4, ($s2) -/* 0E8F30 7F0B4400 8CA40010 */ lw $a0, 0x10($a1) -/* 0E8F34 7F0B4404 3C018008 */ lui $at, %hi(dword_CODE_bss_8007FF94) -/* 0E8F38 7F0B4408 14800004 */ bnez $a0, .L7F0B441C -/* 0E8F3C 7F0B440C 00826821 */ addu $t5, $a0, $v0 -/* 0E8F40 7F0B4410 3C018008 */ lui $at, %hi(dword_CODE_bss_8007FF94) -/* 0E8F44 7F0B4414 10000003 */ b .L7F0B4424 -/* 0E8F48 7F0B4418 AC20FF94 */ sw $zero, %lo(dword_CODE_bss_8007FF94)($at) -.L7F0B441C: -/* 0E8F4C 7F0B441C 01B37021 */ addu $t6, $t5, $s3 -/* 0E8F50 7F0B4420 AC2EFF94 */ sw $t6, %lo(dword_CODE_bss_8007FF94)($at) -.L7F0B4424: -/* 0E8F54 7F0B4424 8FC40000 */ lw $a0, ($fp) -/* 0E8F58 7F0B4428 00008025 */ move $s0, $zero -/* 0E8F5C 7F0B442C 8C8F0000 */ lw $t7, ($a0) -/* 0E8F60 7F0B4430 00801025 */ move $v0, $a0 -/* 0E8F64 7F0B4434 11E0000B */ beqz $t7, .L7F0B4464 -/* 0E8F68 7F0B4438 01E01825 */ move $v1, $t7 -/* 0E8F6C 7F0B443C 8EF80000 */ lw $t8, ($s7) -.L7F0B4440: -/* 0E8F70 7F0B4440 26100008 */ addiu $s0, $s0, 8 -/* 0E8F74 7F0B4444 0078C821 */ addu $t9, $v1, $t8 -/* 0E8F78 7F0B4448 03334021 */ addu $t0, $t9, $s3 -/* 0E8F7C 7F0B444C AC480000 */ sw $t0, ($v0) -/* 0E8F80 7F0B4450 8FC90000 */ lw $t1, ($fp) -/* 0E8F84 7F0B4454 01301021 */ addu $v0, $t1, $s0 -/* 0E8F88 7F0B4458 8C430000 */ lw $v1, ($v0) -/* 0E8F8C 7F0B445C 5460FFF8 */ bnezl $v1, .L7F0B4440 -/* 0E8F90 7F0B4460 8EF80000 */ lw $t8, ($s7) -.L7F0B4464: -/* 0E8F94 7F0B4464 8E440000 */ lw $a0, ($s2) -/* 0E8F98 7F0B4468 50800019 */ beql $a0, $zero, .L7F0B44D0 -/* 0E8F9C 7F0B446C 8ED90000 */ lw $t9, ($s6) -/* 0E8FA0 7F0B4470 908A0000 */ lbu $t2, ($a0) -/* 0E8FA4 7F0B4474 00008025 */ move $s0, $zero -/* 0E8FA8 7F0B4478 00801825 */ move $v1, $a0 -/* 0E8FAC 7F0B447C 11400013 */ beqz $t2, .L7F0B44CC -/* 0E8FB0 7F0B4480 314200FF */ andi $v0, $t2, 0xff -/* 0E8FB4 7F0B4484 24110064 */ li $s1, 100 -.L7F0B4488: -/* 0E8FB8 7F0B4488 5622000C */ bnel $s1, $v0, .L7F0B44BC -/* 0E8FBC 7F0B448C 90620008 */ lbu $v0, 8($v1) -/* 0E8FC0 7F0B4490 8C6B0004 */ lw $t3, 4($v1) -/* 0E8FC4 7F0B4494 8EEC0000 */ lw $t4, ($s7) -/* 0E8FC8 7F0B4498 016C6821 */ addu $t5, $t3, $t4 -/* 0E8FCC 7F0B449C 0FC2D7A2 */ jal getIndexOfPORTALID -/* 0E8FD0 7F0B44A0 01B32021 */ addu $a0, $t5, $s3 -/* 0E8FD4 7F0B44A4 8E4E0000 */ lw $t6, ($s2) -/* 0E8FD8 7F0B44A8 01D07821 */ addu $t7, $t6, $s0 -/* 0E8FDC 7F0B44AC ADE20004 */ sw $v0, 4($t7) -/* 0E8FE0 7F0B44B0 8E580000 */ lw $t8, ($s2) -/* 0E8FE4 7F0B44B4 03101821 */ addu $v1, $t8, $s0 -/* 0E8FE8 7F0B44B8 90620008 */ lbu $v0, 8($v1) -.L7F0B44BC: -/* 0E8FEC 7F0B44BC 26100008 */ addiu $s0, $s0, 8 -/* 0E8FF0 7F0B44C0 24630008 */ addiu $v1, $v1, 8 -/* 0E8FF4 7F0B44C4 1440FFF0 */ bnez $v0, .L7F0B4488 -/* 0E8FF8 7F0B44C8 00000000 */ nop -.L7F0B44CC: -/* 0E8FFC 7F0B44CC 8ED90000 */ lw $t9, ($s6) -.L7F0B44D0: -/* 0E9000 7F0B44D0 3C108004 */ lui $s0, %hi(g_BgRoomInfo + 0x10 +0x40) -/* 0E9004 7F0B44D4 26101464 */ addiu $s0, %lo(g_BgRoomInfo + 0x10 +0x40) # addiu $s0, $s0, 0x1464 -/* 0E9008 7F0B44D8 2B210002 */ slti $at, $t9, 2 -/* 0E900C 7F0B44DC 14200064 */ bnez $at, .L7F0B4670 -/* 0E9010 7F0B44E0 24110001 */ li $s1, 1 -/* 0E9014 7F0B44E4 8EA40000 */ lw $a0, ($s5) -/* 0E9018 7F0B44E8 24130018 */ li $s3, 24 -/* 0E901C 7F0B44EC 2417FFFF */ li $s7, -1 -/* 0E9020 7F0B44F0 24840018 */ addiu $a0, $a0, 0x18 -.L7F0B44F4: -/* 0E9024 7F0B44F4 A2000002 */ sb $zero, 2($s0) -/* 0E9028 7F0B44F8 A2000035 */ sb $zero, 0x35($s0) -/* 0E902C 7F0B44FC 8C880004 */ lw $t0, 4($a0) -/* 0E9030 7F0B4500 26320001 */ addiu $s2, $s1, 1 -/* 0E9034 7F0B4504 51000020 */ beql $t0, $zero, .L7F0B4588 -/* 0E9038 7F0B4508 AE000014 */ sw $zero, 0x14($s0) -/* 0E903C 7F0B450C 26320001 */ addiu $s2, $s1, 1 -/* 0E9040 7F0B4510 0FC2D00D */ jal getPriMappingBinCount -/* 0E9044 7F0B4514 02402025 */ move $a0, $s2 -/* 0E9048 7F0B4518 02202025 */ move $a0, $s1 -/* 0E904C 7F0B451C 0FC2D021 */ jal getSecMappingBinCount -/* 0E9050 7F0B4520 AFA20068 */ sw $v0, 0x68($sp) -/* 0E9054 7F0B4524 8FA50068 */ lw $a1, 0x68($sp) -/* 0E9058 7F0B4528 0045082A */ slt $at, $v0, $a1 -/* 0E905C 7F0B452C 1420000B */ bnez $at, .L7F0B455C -/* 0E9060 7F0B4530 00000000 */ nop -/* 0E9064 7F0B4534 00B40019 */ multu $a1, $s4 -/* 0E9068 7F0B4538 8EA30000 */ lw $v1, ($s5) -/* 0E906C 7F0B453C 00732021 */ addu $a0, $v1, $s3 -/* 0E9070 7F0B4540 8C8C0004 */ lw $t4, 4($a0) -/* 0E9074 7F0B4544 00004812 */ mflo $t1 -/* 0E9078 7F0B4548 00695021 */ addu $t2, $v1, $t1 -/* 0E907C 7F0B454C 8D4B0004 */ lw $t3, 4($t2) -/* 0E9080 7F0B4550 016C6823 */ subu $t5, $t3, $t4 -/* 0E9084 7F0B4554 1000000C */ b .L7F0B4588 -/* 0E9088 7F0B4558 AE0D0014 */ sw $t5, 0x14($s0) -.L7F0B455C: -/* 0E908C 7F0B455C 00540019 */ multu $v0, $s4 -/* 0E9090 7F0B4560 8EA30000 */ lw $v1, ($s5) -/* 0E9094 7F0B4564 00732021 */ addu $a0, $v1, $s3 -/* 0E9098 7F0B4568 8C990004 */ lw $t9, 4($a0) -/* 0E909C 7F0B456C 00007012 */ mflo $t6 -/* 0E90A0 7F0B4570 006E7821 */ addu $t7, $v1, $t6 -/* 0E90A4 7F0B4574 8DF80008 */ lw $t8, 8($t7) -/* 0E90A8 7F0B4578 03194023 */ subu $t0, $t8, $t9 -/* 0E90AC 7F0B457C 10000002 */ b .L7F0B4588 -/* 0E90B0 7F0B4580 AE080014 */ sw $t0, 0x14($s0) -/* 0E90B4 7F0B4584 AE000014 */ sw $zero, 0x14($s0) -.L7F0B4588: -/* 0E90B8 7F0B4588 8C890008 */ lw $t1, 8($a0) -/* 0E90BC 7F0B458C 5120001E */ beql $t1, $zero, .L7F0B4608 -/* 0E90C0 7F0B4590 AE000018 */ sw $zero, 0x18($s0) -/* 0E90C4 7F0B4594 0FC2D00D */ jal getPriMappingBinCount -/* 0E90C8 7F0B4598 02402025 */ move $a0, $s2 -/* 0E90CC 7F0B459C 00408825 */ move $s1, $v0 -/* 0E90D0 7F0B45A0 0FC2D021 */ jal getSecMappingBinCount -/* 0E90D4 7F0B45A4 02402025 */ move $a0, $s2 -/* 0E90D8 7F0B45A8 0051082A */ slt $at, $v0, $s1 -/* 0E90DC 7F0B45AC 1420000B */ bnez $at, .L7F0B45DC -/* 0E90E0 7F0B45B0 00000000 */ nop -/* 0E90E4 7F0B45B4 02340019 */ multu $s1, $s4 -/* 0E90E8 7F0B45B8 8EA30000 */ lw $v1, ($s5) -/* 0E90EC 7F0B45BC 00732021 */ addu $a0, $v1, $s3 -/* 0E90F0 7F0B45C0 8C8D0008 */ lw $t5, 8($a0) -/* 0E90F4 7F0B45C4 00005012 */ mflo $t2 -/* 0E90F8 7F0B45C8 006A5821 */ addu $t3, $v1, $t2 -/* 0E90FC 7F0B45CC 8D6C0004 */ lw $t4, 4($t3) -/* 0E9100 7F0B45D0 018D7023 */ subu $t6, $t4, $t5 -/* 0E9104 7F0B45D4 1000000C */ b .L7F0B4608 -/* 0E9108 7F0B45D8 AE0E0018 */ sw $t6, 0x18($s0) -.L7F0B45DC: -/* 0E910C 7F0B45DC 00540019 */ multu $v0, $s4 -/* 0E9110 7F0B45E0 8EA30000 */ lw $v1, ($s5) -/* 0E9114 7F0B45E4 00732021 */ addu $a0, $v1, $s3 -/* 0E9118 7F0B45E8 8C880008 */ lw $t0, 8($a0) -/* 0E911C 7F0B45EC 00007812 */ mflo $t7 -/* 0E9120 7F0B45F0 006FC021 */ addu $t8, $v1, $t7 -/* 0E9124 7F0B45F4 8F190008 */ lw $t9, 8($t8) -/* 0E9128 7F0B45F8 03284823 */ subu $t1, $t9, $t0 -/* 0E912C 7F0B45FC 10000002 */ b .L7F0B4608 -/* 0E9130 7F0B4600 AE090018 */ sw $t1, 0x18($s0) -/* 0E9134 7F0B4604 AE000018 */ sw $zero, 0x18($s0) -.L7F0B4608: -/* 0E9138 7F0B4608 8C8A0000 */ lw $t2, ($a0) -/* 0E913C 7F0B460C 5140000F */ beql $t2, $zero, .L7F0B464C -/* 0E9140 7F0B4610 AE000010 */ sw $zero, 0x10($s0) -/* 0E9144 7F0B4614 0FC2D035 */ jal getPointTableBinCount -/* 0E9148 7F0B4618 02402025 */ move $a0, $s2 -/* 0E914C 7F0B461C 00540019 */ multu $v0, $s4 -/* 0E9150 7F0B4620 8EA30000 */ lw $v1, ($s5) -/* 0E9154 7F0B4624 8EC50000 */ lw $a1, ($s6) -/* 0E9158 7F0B4628 00732021 */ addu $a0, $v1, $s3 -/* 0E915C 7F0B462C 8C8E0000 */ lw $t6, ($a0) -/* 0E9160 7F0B4630 00005812 */ mflo $t3 -/* 0E9164 7F0B4634 006B6021 */ addu $t4, $v1, $t3 -/* 0E9168 7F0B4638 8D8D0000 */ lw $t5, ($t4) -/* 0E916C 7F0B463C 01AE7823 */ subu $t7, $t5, $t6 -/* 0E9170 7F0B4640 10000003 */ b .L7F0B4650 -/* 0E9174 7F0B4644 AE0F0010 */ sw $t7, 0x10($s0) -/* 0E9178 7F0B4648 AE000010 */ sw $zero, 0x10($s0) -.L7F0B464C: -/* 0E917C 7F0B464C 8EC50000 */ lw $a1, ($s6) -.L7F0B4650: -/* 0E9180 7F0B4650 0245082A */ slt $at, $s2, $a1 -/* 0E9184 7F0B4654 02408825 */ move $s1, $s2 -/* 0E9188 7F0B4658 26100050 */ addiu $s0, $s0, 0x50 -/* 0E918C 7F0B465C 26730018 */ addiu $s3, $s3, 0x18 -/* 0E9190 7F0B4660 24840018 */ addiu $a0, $a0, 0x18 -/* 0E9194 7F0B4664 1420FFA3 */ bnez $at, .L7F0B44F4 -/* 0E9198 7F0B4668 AE17FFD8 */ sw $s7, -0x28($s0) -/* 0E919C 7F0B466C 24110001 */ li $s1, 1 -.L7F0B4670: -/* 0E91A0 7F0B4670 0FC2F14C */ jal initializeRoomData -/* 0E91A4 7F0B4674 00000000 */ nop -/* 0E91A8 7F0B4678 8ED80000 */ lw $t8, ($s6) -/* 0E91AC 7F0B467C 2B010002 */ slti $at, $t8, 2 -/* 0E91B0 7F0B4680 54200009 */ bnezl $at, .L7F0B46A8 -/* 0E91B4 7F0B4684 8FC40000 */ lw $a0, ($fp) -.L7F0B4688: -/* 0E91B8 7F0B4688 0FC2E4CE */ jal sub_GAME_7F0B9338 -/* 0E91BC 7F0B468C 02202025 */ move $a0, $s1 -/* 0E91C0 7F0B4690 8ED90000 */ lw $t9, ($s6) -/* 0E91C4 7F0B4694 26310001 */ addiu $s1, $s1, 1 -/* 0E91C8 7F0B4698 0239082A */ slt $at, $s1, $t9 -/* 0E91CC 7F0B469C 1420FFFA */ bnez $at, .L7F0B4688 -/* 0E91D0 7F0B46A0 00000000 */ nop -/* 0E91D4 7F0B46A4 8FC40000 */ lw $a0, ($fp) -.L7F0B46A8: -/* 0E91D8 7F0B46A8 3C038004 */ lui $v1, %hi(D_800443C4) -/* 0E91DC 7F0B46AC 246343C4 */ addiu $v1, %lo(D_800443C4) # addiu $v1, $v1, 0x43c4 -/* 0E91E0 7F0B46B0 8C820000 */ lw $v0, ($a0) -/* 0E91E4 7F0B46B4 00008825 */ move $s1, $zero -/* 0E91E8 7F0B46B8 00008025 */ move $s0, $zero -/* 0E91EC 7F0B46BC 10400010 */ beqz $v0, .L7F0B4700 -/* 0E91F0 7F0B46C0 00000000 */ nop -/* 0E91F4 7F0B46C4 02202025 */ move $a0, $s1 -.L7F0B46C8: -/* 0E91F8 7F0B46C8 0FC2E64F */ jal sub_GAME_7F0B993C -/* 0E91FC 7F0B46CC AFA3004C */ sw $v1, 0x4c($sp) -/* 0E9200 7F0B46D0 8FC40000 */ lw $a0, ($fp) -/* 0E9204 7F0B46D4 8FA3004C */ lw $v1, 0x4c($sp) -/* 0E9208 7F0B46D8 26100008 */ addiu $s0, $s0, 8 -/* 0E920C 7F0B46DC 00904021 */ addu $t0, $a0, $s0 -/* 0E9210 7F0B46E0 A0620000 */ sb $v0, ($v1) -/* 0E9214 7F0B46E4 8D090000 */ lw $t1, ($t0) -/* 0E9218 7F0B46E8 26310001 */ addiu $s1, $s1, 1 -/* 0E921C 7F0B46EC 24630001 */ addiu $v1, $v1, 1 -/* 0E9220 7F0B46F0 5520FFF5 */ bnezl $t1, .L7F0B46C8 -/* 0E9224 7F0B46F4 02202025 */ move $a0, $s1 -/* 0E9228 7F0B46F8 00008825 */ move $s1, $zero -/* 0E922C 7F0B46FC 8C820000 */ lw $v0, ($a0) -.L7F0B4700: -/* 0E9230 7F0B4700 1040000B */ beqz $v0, .L7F0B4730 -/* 0E9234 7F0B4704 00008025 */ move $s0, $zero -.L7F0B4708: -/* 0E9238 7F0B4708 0FC2E6E5 */ jal sub_GAME_7F0B9B94 -/* 0E923C 7F0B470C 02202025 */ move $a0, $s1 -/* 0E9240 7F0B4710 8FC40000 */ lw $a0, ($fp) -/* 0E9244 7F0B4714 26100008 */ addiu $s0, $s0, 8 -/* 0E9248 7F0B4718 26310001 */ addiu $s1, $s1, 1 -/* 0E924C 7F0B471C 00905021 */ addu $t2, $a0, $s0 -/* 0E9250 7F0B4720 8D4B0000 */ lw $t3, ($t2) -/* 0E9254 7F0B4724 1560FFF8 */ bnez $t3, .L7F0B4708 -/* 0E9258 7F0B4728 00000000 */ nop -/* 0E925C 7F0B472C 00008825 */ move $s1, $zero -.L7F0B4730: -/* 0E9260 7F0B4730 8ECC0000 */ lw $t4, ($s6) -/* 0E9264 7F0B4734 5980000A */ blezl $t4, .L7F0B4760 -/* 0E9268 7F0B4738 8C8E0000 */ lw $t6, ($a0) -.L7F0B473C: -/* 0E926C 7F0B473C 0FC2E576 */ jal sub_GAME_7F0B95D8 -/* 0E9270 7F0B4740 02202025 */ move $a0, $s1 -/* 0E9274 7F0B4744 8ECD0000 */ lw $t5, ($s6) -/* 0E9278 7F0B4748 26310001 */ addiu $s1, $s1, 1 -/* 0E927C 7F0B474C 022D082A */ slt $at, $s1, $t5 -/* 0E9280 7F0B4750 1420FFFA */ bnez $at, .L7F0B473C -/* 0E9284 7F0B4754 00000000 */ nop -/* 0E9288 7F0B4758 8FC40000 */ lw $a0, ($fp) -/* 0E928C 7F0B475C 8C8E0000 */ lw $t6, ($a0) -.L7F0B4760: -/* 0E9290 7F0B4760 00008025 */ move $s0, $zero -/* 0E9294 7F0B4764 00801025 */ move $v0, $a0 -/* 0E9298 7F0B4768 11C0000A */ beqz $t6, .L7F0B4794 -/* 0E929C 7F0B476C 00000000 */ nop -/* 0E92A0 7F0B4770 904F0006 */ lbu $t7, 6($v0) -.L7F0B4774: -/* 0E92A4 7F0B4774 26100008 */ addiu $s0, $s0, 8 -/* 0E92A8 7F0B4778 31F800FE */ andi $t8, $t7, 0xfe -/* 0E92AC 7F0B477C A0580006 */ sb $t8, 6($v0) -/* 0E92B0 7F0B4780 8FD90000 */ lw $t9, ($fp) -/* 0E92B4 7F0B4784 03301021 */ addu $v0, $t9, $s0 -/* 0E92B8 7F0B4788 8C480000 */ lw $t0, ($v0) -/* 0E92BC 7F0B478C 5500FFF9 */ bnezl $t0, .L7F0B4774 -/* 0E92C0 7F0B4790 904F0006 */ lbu $t7, 6($v0) -.L7F0B4794: -/* 0E92C4 7F0B4794 0FC2CDFB */ jal sub_GAME_7F0B37EC -/* 0E92C8 7F0B4798 00000000 */ nop -.L7F0B479C: -/* 0E92CC 7F0B479C 0FC2EA97 */ jal fogRemoved7F0BAA5C -/* 0E92D0 7F0B47A0 8FA400B8 */ lw $a0, 0xb8($sp) -/* 0E92D4 7F0B47A4 8FBF003C */ lw $ra, 0x3c($sp) -/* 0E92D8 7F0B47A8 240900C8 */ li $t1, 200 -/* 0E92DC 7F0B47AC 3C018004 */ lui $at, %hi(D_800442F8) -/* 0E92E0 7F0B47B0 8FB00018 */ lw $s0, 0x18($sp) -/* 0E92E4 7F0B47B4 8FB1001C */ lw $s1, 0x1c($sp) -/* 0E92E8 7F0B47B8 8FB20020 */ lw $s2, 0x20($sp) -/* 0E92EC 7F0B47BC 8FB30024 */ lw $s3, 0x24($sp) -/* 0E92F0 7F0B47C0 8FB40028 */ lw $s4, 0x28($sp) -/* 0E92F4 7F0B47C4 8FB5002C */ lw $s5, 0x2c($sp) -/* 0E92F8 7F0B47C8 8FB60030 */ lw $s6, 0x30($sp) -/* 0E92FC 7F0B47CC 8FB70034 */ lw $s7, 0x34($sp) -/* 0E9300 7F0B47D0 8FBE0038 */ lw $fp, 0x38($sp) -/* 0E9304 7F0B47D4 AC2942F8 */ sw $t1, %lo(D_800442F8)($at) -/* 0E9308 7F0B47D8 03E00008 */ jr $ra -/* 0E930C 7F0B47DC 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel load_bg_file -/* 0E5E50 7F0B3460 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 0E5E54 7F0B3464 AFB20020 */ sw $s2, 0x20($sp) -/* 0E5E58 7F0B3468 3C128004 */ lui $s2, %hi(levelentry_index) # $s2, 0x8004 -/* 0E5E5C 7F0B346C AFB00018 */ sw $s0, 0x18($sp) -/* 0E5E60 7F0B3470 2652AC50 */ addiu $s2, %lo(levelentry_index) # addiu $s2, $s2, -0x53b0 -/* 0E5E64 7F0B3474 3C108004 */ lui $s0, %hi(g_BgRoomInfo) # $s0, 0x8004 -/* 0E5E68 7F0B3478 3C028004 */ lui $v0, %hi(g_MaxNumRooms) # $v0, 0x8004 -/* 0E5E6C 7F0B347C AFBF003C */ sw $ra, 0x3c($sp) -/* 0E5E70 7F0B3480 AFBE0038 */ sw $fp, 0x38($sp) -/* 0E5E74 7F0B3484 AFB70034 */ sw $s7, 0x34($sp) -/* 0E5E78 7F0B3488 AFB60030 */ sw $s6, 0x30($sp) -/* 0E5E7C 7F0B348C AFB5002C */ sw $s5, 0x2c($sp) -/* 0E5E80 7F0B3490 AFB40028 */ sw $s4, 0x28($sp) -/* 0E5E84 7F0B3494 AFB30024 */ sw $s3, 0x24($sp) -/* 0E5E88 7F0B3498 AFB1001C */ sw $s1, 0x1c($sp) -/* 0E5E8C 7F0B349C AE400000 */ sw $zero, ($s2) -/* 0E5E90 7F0B34A0 2442D7D4 */ addiu $v0, %lo(g_MaxNumRooms) # addiu $v0, $v0, -0x282c -/* 0E5E94 7F0B34A4 2610AC64 */ addiu $s0, %lo(g_BgRoomInfo) # addiu $s0, $s0, -0x539c -.L7F0B34A8: -/* 0E5E98 7F0B34A8 26100050 */ addiu $s0, $s0, 0x50 -/* 0E5E9C 7F0B34AC 0202082B */ sltu $at, $s0, $v0 -/* 0E5EA0 7F0B34B0 1420FFFD */ bnez $at, .L7F0B34A8 -/* 0E5EA4 7F0B34B4 AE00FFDC */ sw $zero, -0x24($s0) -/* 0E5EA8 7F0B34B8 3C028004 */ lui $v0, %hi(levelinfotable) # $v0, 0x8004 -/* 0E5EAC 7F0B34BC 2442D96C */ addiu $v0, %lo(levelinfotable) # addiu $v0, $v0, -0x2694 -/* 0E5EB0 7F0B34C0 00008825 */ move $s1, $zero -.L7F0B34C4: -/* 0E5EB4 7F0B34C4 8C4E0000 */ lw $t6, ($v0) -/* 0E5EB8 7F0B34C8 548E0003 */ bnel $a0, $t6, .L7F0B34D8 -/* 0E5EBC 7F0B34CC 26310001 */ addiu $s1, $s1, 1 -/* 0E5EC0 7F0B34D0 AE510000 */ sw $s1, ($s2) -/* 0E5EC4 7F0B34D4 26310001 */ addiu $s1, $s1, 1 -.L7F0B34D8: -/* 0E5EC8 7F0B34D8 2A210026 */ slti $at, $s1, 0x26 -/* 0E5ECC 7F0B34DC 1420FFF9 */ bnez $at, .L7F0B34C4 -/* 0E5ED0 7F0B34E0 24420018 */ addiu $v0, $v0, 0x18 -/* 0E5ED4 7F0B34E4 0FC2EA34 */ jal init_lightfixture_tables -/* 0E5ED8 7F0B34E8 AFA400B8 */ sw $a0, 0xb8($sp) -/* 0E5EDC 7F0B34EC 8E580000 */ lw $t8, ($s2) -/* 0E5EE0 7F0B34F0 24140018 */ li $s4, 24 -/* 0E5EE4 7F0B34F4 3C118004 */ lui $s1, %hi(levelinfotable) # $s1, 0x8004 -/* 0E5EE8 7F0B34F8 03140019 */ multu $t8, $s4 -/* 0E5EEC 7F0B34FC 2631D96C */ addiu $s1, %lo(levelinfotable) # addiu $s1, $s1, -0x2694 -/* 0E5EF0 7F0B3500 3C178007 */ lui $s7, %hi(ptr_bg_data) # $s7, 0x8007 -/* 0E5EF4 7F0B3504 26F79EE0 */ addiu $s7, %lo(ptr_bg_data) # addiu $s7, $s7, -0x6120 -/* 0E5EF8 7F0B3508 27A50070 */ addiu $a1, $sp, 0x70 -/* 0E5EFC 7F0B350C AEE50000 */ sw $a1, ($s7) -/* 0E5F00 7F0B3510 00003025 */ move $a2, $zero -/* 0E5F04 7F0B3514 24070040 */ li $a3, 64 -/* 0E5F08 7F0B3518 0000C812 */ mflo $t9 -/* 0E5F0C 7F0B351C 02394021 */ addu $t0, $s1, $t9 -/* 0E5F10 7F0B3520 0FC2F02F */ jal obLoadBGFileBytesAtOffset -/* 0E5F14 7F0B3524 8D040004 */ lw $a0, 4($t0) -/* 0E5F18 7F0B3528 8EE20000 */ lw $v0, ($s7) -/* 0E5F1C 7F0B352C 3C168007 */ lui $s6, %hi(ptr_bgdata_offsets) # $s6, 0x8007 -/* 0E5F20 7F0B3530 26D6B3CC */ addiu $s6, %lo(ptr_bgdata_offsets) # addiu $s6, $s6, -0x4c34 -/* 0E5F24 7F0B3534 AEC20000 */ sw $v0, ($s6) -/* 0E5F28 7F0B3538 8C4A0004 */ lw $t2, 4($v0) -/* 0E5F2C 7F0B353C 3C13F100 */ lui $s3, 0xf100 -/* 0E5F30 7F0B3540 3C158007 */ lui $s5, %hi(ptr_bgdata_room_fileposition_list) # $s5, 0x8007 -/* 0E5F34 7F0B3544 01425821 */ addu $t3, $t2, $v0 -/* 0E5F38 7F0B3548 26B5B3D4 */ addiu $s5, %lo(ptr_bgdata_room_fileposition_list) # addiu $s5, $s5, -0x4c2c -/* 0E5F3C 7F0B354C 01736021 */ addu $t4, $t3, $s3 -/* 0E5F40 7F0B3550 AEAC0000 */ sw $t4, ($s5) -/* 0E5F44 7F0B3554 8D900018 */ lw $s0, 0x18($t4) -/* 0E5F48 7F0B3558 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff -/* 0E5F4C 7F0B355C 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0E5F50 7F0B3560 02017024 */ and $t6, $s0, $at -/* 0E5F54 7F0B3564 25D0FFFF */ addiu $s0, $t6, -1 -/* 0E5F58 7F0B3568 360F000F */ ori $t7, $s0, 0xf -/* 0E5F5C 7F0B356C 25F00001 */ addiu $s0, $t7, 1 -/* 0E5F60 7F0B3570 02002025 */ move $a0, $s0 -/* 0E5F64 7F0B3574 0C0022E0 */ jal mempAllocBytesInBank -/* 0E5F68 7F0B3578 24050004 */ li $a1, 4 -/* 0E5F6C 7F0B357C 8E580000 */ lw $t8, ($s2) -/* 0E5F70 7F0B3580 AEE20000 */ sw $v0, ($s7) -/* 0E5F74 7F0B3584 00402825 */ move $a1, $v0 -/* 0E5F78 7F0B3588 03140019 */ multu $t8, $s4 -/* 0E5F7C 7F0B358C 00003025 */ move $a2, $zero -/* 0E5F80 7F0B3590 02003825 */ move $a3, $s0 -/* 0E5F84 7F0B3594 0000C812 */ mflo $t9 -/* 0E5F88 7F0B3598 02394021 */ addu $t0, $s1, $t9 -/* 0E5F8C 7F0B359C 0FC2F02F */ jal obLoadBGFileBytesAtOffset -/* 0E5F90 7F0B35A0 8D040004 */ lw $a0, 4($t0) -/* 0E5F94 7F0B35A4 8E490000 */ lw $t1, ($s2) -/* 0E5F98 7F0B35A8 24050002 */ li $a1, 2 -/* 0E5F9C 7F0B35AC 00003025 */ move $a2, $zero -/* 0E5FA0 7F0B35B0 01340019 */ multu $t1, $s4 -/* 0E5FA4 7F0B35B4 24070004 */ li $a3, 4 -/* 0E5FA8 7F0B35B8 00005012 */ mflo $t2 -/* 0E5FAC 7F0B35BC 022A5821 */ addu $t3, $s1, $t2 -/* 0E5FB0 7F0B35C0 0FC2F053 */ jal _fileNameLoadToBank -/* 0E5FB4 7F0B35C4 8D640008 */ lw $a0, 8($t3) -/* 0E5FB8 7F0B35C8 3C108007 */ lui $s0, %hi(gptr_stan) # $s0, 0x8007 -/* 0E5FBC 7F0B35CC 26109EE4 */ addiu $s0, %lo(gptr_stan) # addiu $s0, $s0, -0x611c -/* 0E5FC0 7F0B35D0 AE020000 */ sw $v0, ($s0) -/* 0E5FC4 7F0B35D4 00402025 */ move $a0, $v0 -/* 0E5FC8 7F0B35D8 00002825 */ move $a1, $zero -/* 0E5FCC 7F0B35DC 0FC2C87B */ jal stanDetermineEOF -/* 0E5FD0 7F0B35E0 00403025 */ move $a2, $v0 -/* 0E5FD4 7F0B35E4 0FC2BA1E */ jal stanLoadFile -/* 0E5FD8 7F0B35E8 8E040000 */ lw $a0, ($s0) -/* 0E5FDC 7F0B35EC 8E4C0000 */ lw $t4, ($s2) -/* 0E5FE0 7F0B35F0 01940019 */ multu $t4, $s4 -/* 0E5FE4 7F0B35F4 00006812 */ mflo $t5 -/* 0E5FE8 7F0B35F8 022D7021 */ addu $t6, $s1, $t5 -/* 0E5FEC 7F0B35FC 0FC2CED3 */ jal sub_GAME_7F0B4810 -/* 0E5FF0 7F0B3600 C5CC000C */ lwc1 $f12, 0xc($t6) -/* 0E5FF4 7F0B3604 8E4F0000 */ lw $t7, ($s2) -/* 0E5FF8 7F0B3608 01F40019 */ multu $t7, $s4 -/* 0E5FFC 7F0B360C 0000C012 */ mflo $t8 -/* 0E6000 7F0B3610 0238C821 */ addu $t9, $s1, $t8 -/* 0E6004 7F0B3614 0FC2C704 */ jal setLevelScale -/* 0E6008 7F0B3618 C72C000C */ lwc1 $f12, 0xc($t9) -/* 0E600C 7F0B361C 8E480000 */ lw $t0, ($s2) -/* 0E6010 7F0B3620 01140019 */ multu $t0, $s4 -/* 0E6014 7F0B3624 00004812 */ mflo $t1 -/* 0E6018 7F0B3628 02295021 */ addu $t2, $s1, $t1 -/* 0E601C 7F0B362C 0FC2428F */ jal setDebugCameraScale -/* 0E6020 7F0B3630 C54C000C */ lwc1 $f12, 0xc($t2) -/* 0E6024 7F0B3634 8E4B0000 */ lw $t3, ($s2) -/* 0E6028 7F0B3638 01740019 */ multu $t3, $s4 -/* 0E602C 7F0B363C 00006012 */ mflo $t4 -/* 0E6030 7F0B3640 022C6821 */ addu $t5, $s1, $t4 -/* 0E6034 7F0B3644 0FC08B79 */ jal chrRemoved7F022E1C -/* 0E6038 7F0B3648 C5AC000C */ lwc1 $f12, 0xc($t5) -/* 0E603C 7F0B364C 8E4E0000 */ lw $t6, ($s2) -/* 0E6040 7F0B3650 3C108004 */ lui $s0, %hi(mCurrentLevelVisibilityScale) # $s0, 0x8004 -/* 0E6044 7F0B3654 2610AC4C */ addiu $s0, %lo(mCurrentLevelVisibilityScale) # addiu $s0, $s0, -0x53b4 -/* 0E6048 7F0B3658 01D40019 */ multu $t6, $s4 -/* 0E604C 7F0B365C 00007812 */ mflo $t7 -/* 0E6050 7F0B3660 022FC021 */ addu $t8, $s1, $t7 -/* 0E6054 7F0B3664 C7040010 */ lwc1 $f4, 0x10($t8) -/* 0E6058 7F0B3668 E6040000 */ swc1 $f4, ($s0) -/* 0E605C 7F0B366C 0FC22635 */ jal sub_GAME_7F08976C -/* 0E6060 7F0B3670 C60C0000 */ lwc1 $f12, ($s0) -/* 0E6064 7F0B3674 0FC1643D */ jal matrix_4x4_7F058C4C -/* 0E6068 7F0B3678 C60C0000 */ lwc1 $f12, ($s0) -/* 0E606C 7F0B367C 8EE20000 */ lw $v0, ($s7) -/* 0E6070 7F0B3680 3C038007 */ lui $v1, %hi(dword_CODE_bss_8007BF98) # $v1, 0x8007 -/* 0E6074 7F0B3684 3C048007 */ lui $a0, %hi(dword_CODE_bss_8007FF88) # $a0, 0x8007 -/* 0E6078 7F0B3688 8C590000 */ lw $t9, ($v0) -/* 0E607C 7F0B368C 2484B3D0 */ addiu $a0, %lo(dword_CODE_bss_8007FF88) # addiu $a0, $a0, -0x4c30 -/* 0E6080 7F0B3690 24639EE8 */ addiu $v1, %lo(dword_CODE_bss_8007BF98) # addiu $v1, $v1, -0x6118 -/* 0E6084 7F0B3694 24080001 */ li $t0, 1 -/* 0E6088 7F0B3698 AC880000 */ sw $t0, ($a0) -/* 0E608C 7F0B369C 1720010E */ bnez $t9, .L7F0B3AD8 -/* 0E6090 7F0B36A0 AC790000 */ sw $t9, ($v1) -/* 0E6094 7F0B36A4 240A0002 */ li $t2, 2 -/* 0E6098 7F0B36A8 AC8A0000 */ sw $t2, ($a0) -/* 0E609C 7F0B36AC AEC20000 */ sw $v0, ($s6) -/* 0E60A0 7F0B36B0 8C4B0004 */ lw $t3, 4($v0) -/* 0E60A4 7F0B36B4 3C168004 */ lui $s6, %hi(g_MaxNumRooms) # $s6, 0x8004 -/* 0E60A8 7F0B36B8 26D6D7D4 */ addiu $s6, %lo(g_MaxNumRooms) # addiu $s6, $s6, -0x282c -/* 0E60AC 7F0B36BC 01626021 */ addu $t4, $t3, $v0 -/* 0E60B0 7F0B36C0 01936821 */ addu $t5, $t4, $s3 -/* 0E60B4 7F0B36C4 AEAD0000 */ sw $t5, ($s5) -/* 0E60B8 7F0B36C8 AEC00000 */ sw $zero, ($s6) -/* 0E60BC 7F0B36CC 8DAE001C */ lw $t6, 0x1c($t5) -/* 0E60C0 7F0B36D0 00402825 */ move $a1, $v0 -/* 0E60C4 7F0B36D4 11C00008 */ beqz $t6, .L7F0B36F8 -/* 0E60C8 7F0B36D8 25A40018 */ addiu $a0, $t5, 0x18 -/* 0E60CC 7F0B36DC 8ECF0000 */ lw $t7, ($s6) -.L7F0B36E0: -/* 0E60D0 7F0B36E0 24840018 */ addiu $a0, $a0, 0x18 -/* 0E60D4 7F0B36E4 25F80001 */ addiu $t8, $t7, 1 -/* 0E60D8 7F0B36E8 AED80000 */ sw $t8, ($s6) -/* 0E60DC 7F0B36EC 8C990004 */ lw $t9, 4($a0) -/* 0E60E0 7F0B36F0 5720FFFB */ bnezl $t9, .L7F0B36E0 -/* 0E60E4 7F0B36F4 8ECF0000 */ lw $t7, ($s6) -.L7F0B36F8: -/* 0E60E8 7F0B36F8 8CA80008 */ lw $t0, 8($a1) -/* 0E60EC 7F0B36FC 3C1E8007 */ lui $fp, %hi(g_BgPortals) # $fp, 0x8007 -/* 0E60F0 7F0B3700 27DEB3C8 */ addiu $fp, %lo(g_BgPortals) # addiu $fp, $fp, -0x4c38 -/* 0E60F4 7F0B3704 01024821 */ addu $t1, $t0, $v0 -/* 0E60F8 7F0B3708 01335021 */ addu $t2, $t1, $s3 -/* 0E60FC 7F0B370C AFCA0000 */ sw $t2, ($fp) -/* 0E6100 7F0B3710 8CA3000C */ lw $v1, 0xc($a1) -/* 0E6104 7F0B3714 14600004 */ bnez $v1, .L7F0B3728 -/* 0E6108 7F0B3718 3C128007 */ lui $s2, %hi(dword_CODE_bss_8007FF90) # $s2, 0x8007 -/* 0E610C 7F0B371C 2652B3D8 */ addiu $s2, %lo(dword_CODE_bss_8007FF90) # addiu $s2, $s2, -0x4c28 -/* 0E6110 7F0B3720 1000000F */ b .L7F0B3760 -/* 0E6114 7F0B3724 AE400000 */ sw $zero, ($s2) -.L7F0B3728: -/* 0E6118 7F0B3728 3C128007 */ lui $s2, %hi(dword_CODE_bss_8007FF90) # $s2, 0x8007 -/* 0E611C 7F0B372C 00625821 */ addu $t3, $v1, $v0 -/* 0E6120 7F0B3730 2652B3D8 */ addiu $s2, %lo(dword_CODE_bss_8007FF90) # addiu $s2, $s2, -0x4c28 -/* 0E6124 7F0B3734 01736021 */ addu $t4, $t3, $s3 -/* 0E6128 7F0B3738 AE4C0000 */ sw $t4, ($s2) -/* 0E612C 7F0B373C 8CA40010 */ lw $a0, 0x10($a1) -/* 0E6130 7F0B3740 3C018007 */ lui $at, %hi(dword_CODE_bss_8007FF94) -/* 0E6134 7F0B3744 14800004 */ bnez $a0, .L7F0B3758 -/* 0E6138 7F0B3748 00826821 */ addu $t5, $a0, $v0 -/* 0E613C 7F0B374C 3C018007 */ lui $at, %hi(dword_CODE_bss_8007FF94) # $at, 0x8007 -/* 0E6140 7F0B3750 10000003 */ b .L7F0B3760 -/* 0E6144 7F0B3754 AC20B3DC */ sw $zero, %lo(dword_CODE_bss_8007FF94)($at) -.L7F0B3758: -/* 0E6148 7F0B3758 01B37021 */ addu $t6, $t5, $s3 -/* 0E614C 7F0B375C AC2EB3DC */ sw $t6, %lo(dword_CODE_bss_8007FF94)($at) -.L7F0B3760: -/* 0E6150 7F0B3760 8FC40000 */ lw $a0, ($fp) -/* 0E6154 7F0B3764 00008025 */ move $s0, $zero -/* 0E6158 7F0B3768 8C8F0000 */ lw $t7, ($a0) -/* 0E615C 7F0B376C 00801025 */ move $v0, $a0 -/* 0E6160 7F0B3770 11E0000B */ beqz $t7, .L7F0B37A0 -/* 0E6164 7F0B3774 01E01825 */ move $v1, $t7 -/* 0E6168 7F0B3778 8EF80000 */ lw $t8, ($s7) -.L7F0B377C: -/* 0E616C 7F0B377C 26100008 */ addiu $s0, $s0, 8 -/* 0E6170 7F0B3780 0078C821 */ addu $t9, $v1, $t8 -/* 0E6174 7F0B3784 03334021 */ addu $t0, $t9, $s3 -/* 0E6178 7F0B3788 AC480000 */ sw $t0, ($v0) -/* 0E617C 7F0B378C 8FC90000 */ lw $t1, ($fp) -/* 0E6180 7F0B3790 01301021 */ addu $v0, $t1, $s0 -/* 0E6184 7F0B3794 8C430000 */ lw $v1, ($v0) -/* 0E6188 7F0B3798 5460FFF8 */ bnezl $v1, .L7F0B377C -/* 0E618C 7F0B379C 8EF80000 */ lw $t8, ($s7) -.L7F0B37A0: -/* 0E6190 7F0B37A0 8E440000 */ lw $a0, ($s2) -/* 0E6194 7F0B37A4 50800019 */ beql $a0, $zero, .L7F0B380C -/* 0E6198 7F0B37A8 8ED90000 */ lw $t9, ($s6) -/* 0E619C 7F0B37AC 908A0000 */ lbu $t2, ($a0) -/* 0E61A0 7F0B37B0 00008025 */ move $s0, $zero -/* 0E61A4 7F0B37B4 00801825 */ move $v1, $a0 -/* 0E61A8 7F0B37B8 11400013 */ beqz $t2, .L7F0B3808 -/* 0E61AC 7F0B37BC 314200FF */ andi $v0, $t2, 0xff -/* 0E61B0 7F0B37C0 24110064 */ li $s1, 100 -.L7F0B37C4: -/* 0E61B4 7F0B37C4 5622000C */ bnel $s1, $v0, .L7F0B37F8 -/* 0E61B8 7F0B37C8 90620008 */ lbu $v0, 8($v1) -/* 0E61BC 7F0B37CC 8C6B0004 */ lw $t3, 4($v1) -/* 0E61C0 7F0B37D0 8EEC0000 */ lw $t4, ($s7) -/* 0E61C4 7F0B37D4 016C6821 */ addu $t5, $t3, $t4 -/* 0E61C8 7F0B37D8 0FC2D471 */ jal getIndexOfPORTALID -/* 0E61CC 7F0B37DC 01B32021 */ addu $a0, $t5, $s3 -/* 0E61D0 7F0B37E0 8E4E0000 */ lw $t6, ($s2) -/* 0E61D4 7F0B37E4 01D07821 */ addu $t7, $t6, $s0 -/* 0E61D8 7F0B37E8 ADE20004 */ sw $v0, 4($t7) -/* 0E61DC 7F0B37EC 8E580000 */ lw $t8, ($s2) -/* 0E61E0 7F0B37F0 03101821 */ addu $v1, $t8, $s0 -/* 0E61E4 7F0B37F4 90620008 */ lbu $v0, 8($v1) -.L7F0B37F8: -/* 0E61E8 7F0B37F8 26100008 */ addiu $s0, $s0, 8 -/* 0E61EC 7F0B37FC 24630008 */ addiu $v1, $v1, 8 -/* 0E61F0 7F0B3800 1440FFF0 */ bnez $v0, .L7F0B37C4 -/* 0E61F4 7F0B3804 00000000 */ nop -.L7F0B3808: -/* 0E61F8 7F0B3808 8ED90000 */ lw $t9, ($s6) -.L7F0B380C: -/* 0E61FC 7F0B380C 3C108004 */ lui $s0, %hi(g_BgRoomInfo + 0x10 +0x40) # $s0, 0x8004 -/* 0E6200 7F0B3810 2610ACB4 */ addiu $s0, %lo(g_BgRoomInfo + 0x10 +0x40) # addiu $s0, $s0, -0x534c -/* 0E6204 7F0B3814 2B210002 */ slti $at, $t9, 2 -/* 0E6208 7F0B3818 14200064 */ bnez $at, .L7F0B39AC -/* 0E620C 7F0B381C 24110001 */ li $s1, 1 -/* 0E6210 7F0B3820 8EA40000 */ lw $a0, ($s5) -/* 0E6214 7F0B3824 24130018 */ li $s3, 24 -/* 0E6218 7F0B3828 2417FFFF */ li $s7, -1 -/* 0E621C 7F0B382C 24840018 */ addiu $a0, $a0, 0x18 -.L7F0B3830: -/* 0E6220 7F0B3830 A2000002 */ sb $zero, 2($s0) -/* 0E6224 7F0B3834 A2000035 */ sb $zero, 0x35($s0) -/* 0E6228 7F0B3838 8C880004 */ lw $t0, 4($a0) -/* 0E622C 7F0B383C 26320001 */ addiu $s2, $s1, 1 -/* 0E6230 7F0B3840 51000020 */ beql $t0, $zero, .L7F0B38C4 -/* 0E6234 7F0B3844 AE000014 */ sw $zero, 0x14($s0) -/* 0E6238 7F0B3848 26320001 */ addiu $s2, $s1, 1 -/* 0E623C 7F0B384C 0FC2CCDC */ jal getPriMappingBinCount -/* 0E6240 7F0B3850 02402025 */ move $a0, $s2 -/* 0E6244 7F0B3854 02202025 */ move $a0, $s1 -/* 0E6248 7F0B3858 0FC2CCF0 */ jal getSecMappingBinCount -/* 0E624C 7F0B385C AFA20068 */ sw $v0, 0x68($sp) -/* 0E6250 7F0B3860 8FA50068 */ lw $a1, 0x68($sp) -/* 0E6254 7F0B3864 0045082A */ slt $at, $v0, $a1 -/* 0E6258 7F0B3868 1420000B */ bnez $at, .L7F0B3898 -/* 0E625C 7F0B386C 00000000 */ nop -/* 0E6260 7F0B3870 00B40019 */ multu $a1, $s4 -/* 0E6264 7F0B3874 8EA30000 */ lw $v1, ($s5) -/* 0E6268 7F0B3878 00732021 */ addu $a0, $v1, $s3 -/* 0E626C 7F0B387C 8C8C0004 */ lw $t4, 4($a0) -/* 0E6270 7F0B3880 00004812 */ mflo $t1 -/* 0E6274 7F0B3884 00695021 */ addu $t2, $v1, $t1 -/* 0E6278 7F0B3888 8D4B0004 */ lw $t3, 4($t2) -/* 0E627C 7F0B388C 016C6823 */ subu $t5, $t3, $t4 -/* 0E6280 7F0B3890 1000000C */ b .L7F0B38C4 -/* 0E6284 7F0B3894 AE0D0014 */ sw $t5, 0x14($s0) -.L7F0B3898: -/* 0E6288 7F0B3898 00540019 */ multu $v0, $s4 -/* 0E628C 7F0B389C 8EA30000 */ lw $v1, ($s5) -/* 0E6290 7F0B38A0 00732021 */ addu $a0, $v1, $s3 -/* 0E6294 7F0B38A4 8C990004 */ lw $t9, 4($a0) -/* 0E6298 7F0B38A8 00007012 */ mflo $t6 -/* 0E629C 7F0B38AC 006E7821 */ addu $t7, $v1, $t6 -/* 0E62A0 7F0B38B0 8DF80008 */ lw $t8, 8($t7) -/* 0E62A4 7F0B38B4 03194023 */ subu $t0, $t8, $t9 -/* 0E62A8 7F0B38B8 10000002 */ b .L7F0B38C4 -/* 0E62AC 7F0B38BC AE080014 */ sw $t0, 0x14($s0) -/* 0E62B0 7F0B38C0 AE000014 */ sw $zero, 0x14($s0) -.L7F0B38C4: -/* 0E62B4 7F0B38C4 8C890008 */ lw $t1, 8($a0) -/* 0E62B8 7F0B38C8 5120001E */ beql $t1, $zero, .L7F0B3944 -/* 0E62BC 7F0B38CC AE000018 */ sw $zero, 0x18($s0) -/* 0E62C0 7F0B38D0 0FC2CCDC */ jal getPriMappingBinCount -/* 0E62C4 7F0B38D4 02402025 */ move $a0, $s2 -/* 0E62C8 7F0B38D8 00408825 */ move $s1, $v0 -/* 0E62CC 7F0B38DC 0FC2CCF0 */ jal getSecMappingBinCount -/* 0E62D0 7F0B38E0 02402025 */ move $a0, $s2 -/* 0E62D4 7F0B38E4 0051082A */ slt $at, $v0, $s1 -/* 0E62D8 7F0B38E8 1420000B */ bnez $at, .L7F0B3918 -/* 0E62DC 7F0B38EC 00000000 */ nop -/* 0E62E0 7F0B38F0 02340019 */ multu $s1, $s4 -/* 0E62E4 7F0B38F4 8EA30000 */ lw $v1, ($s5) -/* 0E62E8 7F0B38F8 00732021 */ addu $a0, $v1, $s3 -/* 0E62EC 7F0B38FC 8C8D0008 */ lw $t5, 8($a0) -/* 0E62F0 7F0B3900 00005012 */ mflo $t2 -/* 0E62F4 7F0B3904 006A5821 */ addu $t3, $v1, $t2 -/* 0E62F8 7F0B3908 8D6C0004 */ lw $t4, 4($t3) -/* 0E62FC 7F0B390C 018D7023 */ subu $t6, $t4, $t5 -/* 0E6300 7F0B3910 1000000C */ b .L7F0B3944 -/* 0E6304 7F0B3914 AE0E0018 */ sw $t6, 0x18($s0) -.L7F0B3918: -/* 0E6308 7F0B3918 00540019 */ multu $v0, $s4 -/* 0E630C 7F0B391C 8EA30000 */ lw $v1, ($s5) -/* 0E6310 7F0B3920 00732021 */ addu $a0, $v1, $s3 -/* 0E6314 7F0B3924 8C880008 */ lw $t0, 8($a0) -/* 0E6318 7F0B3928 00007812 */ mflo $t7 -/* 0E631C 7F0B392C 006FC021 */ addu $t8, $v1, $t7 -/* 0E6320 7F0B3930 8F190008 */ lw $t9, 8($t8) -/* 0E6324 7F0B3934 03284823 */ subu $t1, $t9, $t0 -/* 0E6328 7F0B3938 10000002 */ b .L7F0B3944 -/* 0E632C 7F0B393C AE090018 */ sw $t1, 0x18($s0) -/* 0E6330 7F0B3940 AE000018 */ sw $zero, 0x18($s0) -.L7F0B3944: -/* 0E6334 7F0B3944 8C8A0000 */ lw $t2, ($a0) -/* 0E6338 7F0B3948 5140000F */ beql $t2, $zero, .L7F0B3988 -/* 0E633C 7F0B394C AE000010 */ sw $zero, 0x10($s0) -/* 0E6340 7F0B3950 0FC2CD04 */ jal getPointTableBinCount -/* 0E6344 7F0B3954 02402025 */ move $a0, $s2 -/* 0E6348 7F0B3958 00540019 */ multu $v0, $s4 -/* 0E634C 7F0B395C 8EA30000 */ lw $v1, ($s5) -/* 0E6350 7F0B3960 8EC50000 */ lw $a1, ($s6) -/* 0E6354 7F0B3964 00732021 */ addu $a0, $v1, $s3 -/* 0E6358 7F0B3968 8C8E0000 */ lw $t6, ($a0) -/* 0E635C 7F0B396C 00005812 */ mflo $t3 -/* 0E6360 7F0B3970 006B6021 */ addu $t4, $v1, $t3 -/* 0E6364 7F0B3974 8D8D0000 */ lw $t5, ($t4) -/* 0E6368 7F0B3978 01AE7823 */ subu $t7, $t5, $t6 -/* 0E636C 7F0B397C 10000003 */ b .L7F0B398C -/* 0E6370 7F0B3980 AE0F0010 */ sw $t7, 0x10($s0) -/* 0E6374 7F0B3984 AE000010 */ sw $zero, 0x10($s0) -.L7F0B3988: -/* 0E6378 7F0B3988 8EC50000 */ lw $a1, ($s6) -.L7F0B398C: -/* 0E637C 7F0B398C 0245082A */ slt $at, $s2, $a1 -/* 0E6380 7F0B3990 02408825 */ move $s1, $s2 -/* 0E6384 7F0B3994 26100050 */ addiu $s0, $s0, 0x50 -/* 0E6388 7F0B3998 26730018 */ addiu $s3, $s3, 0x18 -/* 0E638C 7F0B399C 24840018 */ addiu $a0, $a0, 0x18 -/* 0E6390 7F0B39A0 1420FFA3 */ bnez $at, .L7F0B3830 -/* 0E6394 7F0B39A4 AE17FFD8 */ sw $s7, -0x28($s0) -/* 0E6398 7F0B39A8 24110001 */ li $s1, 1 -.L7F0B39AC: -/* 0E639C 7F0B39AC 0FC2EE4C */ jal initializeRoomData -/* 0E63A0 7F0B39B0 00000000 */ nop -/* 0E63A4 7F0B39B4 8ED80000 */ lw $t8, ($s6) -/* 0E63A8 7F0B39B8 2B010002 */ slti $at, $t8, 2 -/* 0E63AC 7F0B39BC 54200009 */ bnezl $at, .L7F0B39E4 -/* 0E63B0 7F0B39C0 8FC40000 */ lw $a0, ($fp) -.L7F0B39C4: -/* 0E63B4 7F0B39C4 0FC2E175 */ jal sub_GAME_7F0B9338 -/* 0E63B8 7F0B39C8 02202025 */ move $a0, $s1 -/* 0E63BC 7F0B39CC 8ED90000 */ lw $t9, ($s6) -/* 0E63C0 7F0B39D0 26310001 */ addiu $s1, $s1, 1 -/* 0E63C4 7F0B39D4 0239082A */ slt $at, $s1, $t9 -/* 0E63C8 7F0B39D8 1420FFFA */ bnez $at, .L7F0B39C4 -/* 0E63CC 7F0B39DC 00000000 */ nop -/* 0E63D0 7F0B39E0 8FC40000 */ lw $a0, ($fp) -.L7F0B39E4: -/* 0E63D4 7F0B39E4 3C038004 */ lui $v1, %hi(D_800443C4) # $v1, 0x8004 -/* 0E63D8 7F0B39E8 2463D8A4 */ addiu $v1, %lo(D_800443C4) # addiu $v1, $v1, -0x275c -/* 0E63DC 7F0B39EC 8C820000 */ lw $v0, ($a0) -/* 0E63E0 7F0B39F0 00008825 */ move $s1, $zero -/* 0E63E4 7F0B39F4 00008025 */ move $s0, $zero -/* 0E63E8 7F0B39F8 10400010 */ beqz $v0, .L7F0B3A3C -/* 0E63EC 7F0B39FC 00000000 */ nop -/* 0E63F0 7F0B3A00 02202025 */ move $a0, $s1 -.L7F0B3A04: -/* 0E63F4 7F0B3A04 0FC2E2F6 */ jal sub_GAME_7F0B993C -/* 0E63F8 7F0B3A08 AFA3004C */ sw $v1, 0x4c($sp) -/* 0E63FC 7F0B3A0C 8FC40000 */ lw $a0, ($fp) -/* 0E6400 7F0B3A10 8FA3004C */ lw $v1, 0x4c($sp) -/* 0E6404 7F0B3A14 26100008 */ addiu $s0, $s0, 8 -/* 0E6408 7F0B3A18 00904021 */ addu $t0, $a0, $s0 -/* 0E640C 7F0B3A1C A0620000 */ sb $v0, ($v1) -/* 0E6410 7F0B3A20 8D090000 */ lw $t1, ($t0) -/* 0E6414 7F0B3A24 26310001 */ addiu $s1, $s1, 1 -/* 0E6418 7F0B3A28 24630001 */ addiu $v1, $v1, 1 -/* 0E641C 7F0B3A2C 5520FFF5 */ bnezl $t1, .L7F0B3A04 -/* 0E6420 7F0B3A30 02202025 */ move $a0, $s1 -/* 0E6424 7F0B3A34 00008825 */ move $s1, $zero -/* 0E6428 7F0B3A38 8C820000 */ lw $v0, ($a0) -.L7F0B3A3C: -/* 0E642C 7F0B3A3C 1040000B */ beqz $v0, .L7F0B3A6C -/* 0E6430 7F0B3A40 00008025 */ move $s0, $zero -.L7F0B3A44: -/* 0E6434 7F0B3A44 0FC2E38C */ jal sub_GAME_7F0B9B94 -/* 0E6438 7F0B3A48 02202025 */ move $a0, $s1 -/* 0E643C 7F0B3A4C 8FC40000 */ lw $a0, ($fp) -/* 0E6440 7F0B3A50 26100008 */ addiu $s0, $s0, 8 -/* 0E6444 7F0B3A54 26310001 */ addiu $s1, $s1, 1 -/* 0E6448 7F0B3A58 00905021 */ addu $t2, $a0, $s0 -/* 0E644C 7F0B3A5C 8D4B0000 */ lw $t3, ($t2) -/* 0E6450 7F0B3A60 1560FFF8 */ bnez $t3, .L7F0B3A44 -/* 0E6454 7F0B3A64 00000000 */ nop -/* 0E6458 7F0B3A68 00008825 */ move $s1, $zero -.L7F0B3A6C: -/* 0E645C 7F0B3A6C 8ECC0000 */ lw $t4, ($s6) -/* 0E6460 7F0B3A70 5980000A */ blezl $t4, .L7F0B3A9C -/* 0E6464 7F0B3A74 8C8E0000 */ lw $t6, ($a0) -.L7F0B3A78: -/* 0E6468 7F0B3A78 0FC2E21D */ jal sub_GAME_7F0B95D8 -/* 0E646C 7F0B3A7C 02202025 */ move $a0, $s1 -/* 0E6470 7F0B3A80 8ECD0000 */ lw $t5, ($s6) -/* 0E6474 7F0B3A84 26310001 */ addiu $s1, $s1, 1 -/* 0E6478 7F0B3A88 022D082A */ slt $at, $s1, $t5 -/* 0E647C 7F0B3A8C 1420FFFA */ bnez $at, .L7F0B3A78 -/* 0E6480 7F0B3A90 00000000 */ nop -/* 0E6484 7F0B3A94 8FC40000 */ lw $a0, ($fp) -/* 0E6488 7F0B3A98 8C8E0000 */ lw $t6, ($a0) -.L7F0B3A9C: -/* 0E648C 7F0B3A9C 00008025 */ move $s0, $zero -/* 0E6490 7F0B3AA0 00801025 */ move $v0, $a0 -/* 0E6494 7F0B3AA4 11C0000A */ beqz $t6, .L7F0B3AD0 -/* 0E6498 7F0B3AA8 00000000 */ nop -/* 0E649C 7F0B3AAC 904F0006 */ lbu $t7, 6($v0) -.L7F0B3AB0: -/* 0E64A0 7F0B3AB0 26100008 */ addiu $s0, $s0, 8 -/* 0E64A4 7F0B3AB4 31F800FE */ andi $t8, $t7, 0xfe -/* 0E64A8 7F0B3AB8 A0580006 */ sb $t8, 6($v0) -/* 0E64AC 7F0B3ABC 8FD90000 */ lw $t9, ($fp) -/* 0E64B0 7F0B3AC0 03301021 */ addu $v0, $t9, $s0 -/* 0E64B4 7F0B3AC4 8C480000 */ lw $t0, ($v0) -/* 0E64B8 7F0B3AC8 5500FFF9 */ bnezl $t0, .L7F0B3AB0 -/* 0E64BC 7F0B3ACC 904F0006 */ lbu $t7, 6($v0) -.L7F0B3AD0: -/* 0E64C0 7F0B3AD0 0FC2CAAB */ jal sub_GAME_7F0B37EC -/* 0E64C4 7F0B3AD4 00000000 */ nop -.L7F0B3AD8: -/* 0E64C8 7F0B3AD8 0FC2E78B */ jal fogRemoved7F0BAA5C -/* 0E64CC 7F0B3ADC 8FA400B8 */ lw $a0, 0xb8($sp) -/* 0E64D0 7F0B3AE0 8FBF003C */ lw $ra, 0x3c($sp) -/* 0E64D4 7F0B3AE4 240900C8 */ li $t1, 200 -/* 0E64D8 7F0B3AE8 3C018004 */ lui $at, %hi(D_800442F8) # $at, 0x8004 -/* 0E64DC 7F0B3AEC 8FB00018 */ lw $s0, 0x18($sp) -/* 0E64E0 7F0B3AF0 8FB1001C */ lw $s1, 0x1c($sp) -/* 0E64E4 7F0B3AF4 8FB20020 */ lw $s2, 0x20($sp) -/* 0E64E8 7F0B3AF8 8FB30024 */ lw $s3, 0x24($sp) -/* 0E64EC 7F0B3AFC 8FB40028 */ lw $s4, 0x28($sp) -/* 0E64F0 7F0B3B00 8FB5002C */ lw $s5, 0x2c($sp) -/* 0E64F4 7F0B3B04 8FB60030 */ lw $s6, 0x30($sp) -/* 0E64F8 7F0B3B08 8FB70034 */ lw $s7, 0x34($sp) -/* 0E64FC 7F0B3B0C 8FBE0038 */ lw $fp, 0x38($sp) -/* 0E6500 7F0B3B10 AC29D7D8 */ sw $t1, %lo(D_800442F8)($at) -/* 0E6504 7F0B3B14 03E00008 */ jr $ra -/* 0E6508 7F0B3B18 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif - -#endif - - - - - - -void cleanup_rooms(void) { - unload_rooms(); - matrix_4x4_7F058C4C(1.0); -} - - - - - - -void sub_GAME_7F0B4810(f32 arg0) { - room_data_float1 = arg0; - room_data_float2 = (f32) (1.0f / arg0); -} - - -f32 get_room_data_float2(void){ - return room_data_float2; -} - -f32 get_room_data_float1(void){ - return room_data_float1; -} - - -f32 sub_GAME_7F0B4848(void) -{ - return levelinfotable[levelentry_index].unknownfloat / levelinfotable[levelentry_index].levelscale; -} - - -//sub_GAME_7F0B4878 -f32 bgGetLevelVisibilityScale(void) { - return mCurrentLevelVisibilityScale; -} - - - - - - -#ifdef NONMATCHING -void bgRoomVisibilityRelated(void) { - -} -#else -GLOBAL_ASM( -.late_rodata -/*D:80058C58*/ -glabel jpt_80058C58 -.word .L7F0B4914 -.word .L7F0B4914 -.word .L7F0B4914 -.word .L7F0B491C -.word .L7F0B491C -.word .L7F0B491C -.word .L7F0B4914 -.word .L7F0B491C -.word .L7F0B4914 - -.text -glabel bgRoomVisibilityRelated -/* 0E93B4 7F0B4884 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0E93B8 7F0B4888 AFBF003C */ sw $ra, 0x3c($sp) -/* 0E93BC 7F0B488C AFB60030 */ sw $s6, 0x30($sp) -/* 0E93C0 7F0B4890 3C018008 */ lui $at, %hi(num_visible_rooms_in_cur_global_vis_packet) -/* 0E93C4 7F0B4894 AFBE0038 */ sw $fp, 0x38($sp) -/* 0E93C8 7F0B4898 AFB70034 */ sw $s7, 0x34($sp) -/* 0E93CC 7F0B489C AFB5002C */ sw $s5, 0x2c($sp) -/* 0E93D0 7F0B48A0 AFB40028 */ sw $s4, 0x28($sp) -/* 0E93D4 7F0B48A4 AFB30024 */ sw $s3, 0x24($sp) -/* 0E93D8 7F0B48A8 AFB20020 */ sw $s2, 0x20($sp) -/* 0E93DC 7F0B48AC AFB1001C */ sw $s1, 0x1c($sp) -/* 0E93E0 7F0B48B0 AFB00018 */ sw $s0, 0x18($sp) -/* 0E93E4 7F0B48B4 2416FFFF */ li $s6, -1 -/* 0E93E8 7F0B48B8 0FC26C54 */ jal get_cur_playernum -/* 0E93EC 7F0B48BC AC20C038 */ sw $zero, %lo(num_visible_rooms_in_cur_global_vis_packet)($at) -/* 0E93F0 7F0B48C0 0FC26D36 */ jal get_player_position_in_shuffled -/* 0E93F4 7F0B48C4 00402025 */ move $a0, $v0 -/* 0E93F8 7F0B48C8 14400003 */ bnez $v0, .L7F0B48D8 -/* 0E93FC 7F0B48CC 00000000 */ nop -/* 0E9400 7F0B48D0 0FC2D9BA */ jal sub_GAME_7F0B66E8 -/* 0E9404 7F0B48D4 00000000 */ nop -.L7F0B48D8: -/* 0E9408 7F0B48D8 0FC1E94A */ jal bondviewGetCameraMode -/* 0E940C 7F0B48DC 00000000 */ nop -/* 0E9410 7F0B48E0 3C038004 */ lui $v1, %hi(D_800442F8) -/* 0E9414 7F0B48E4 244FFFFF */ addiu $t7, $v0, -1 -/* 0E9418 7F0B48E8 246342F8 */ addiu $v1, %lo(D_800442F8) # addiu $v1, $v1, 0x42f8 -/* 0E941C 7F0B48EC 240E0003 */ li $t6, 3 -/* 0E9420 7F0B48F0 2DE10009 */ sltiu $at, $t7, 9 -/* 0E9424 7F0B48F4 10200009 */ beqz $at, .L7F0B491C -/* 0E9428 7F0B48F8 AC6E0000 */ sw $t6, ($v1) -/* 0E942C 7F0B48FC 000F7880 */ sll $t7, $t7, 2 -/* 0E9430 7F0B4900 3C018006 */ lui $at, %hi(jpt_80058C58) -/* 0E9434 7F0B4904 002F0821 */ addu $at, $at, $t7 -/* 0E9438 7F0B4908 8C2F8C58 */ lw $t7, %lo(jpt_80058C58)($at) -.L7F0B490C: -/* 0E943C 7F0B490C 01E00008 */ jr $t7 -/* 0E9440 7F0B4910 00000000 */ nop -.L7F0B4914: -/* 0E9444 7F0B4914 241800C8 */ li $t8, 200 -/* 0E9448 7F0B4918 AC780000 */ sw $t8, ($v1) -def_7F0B490C: -.L7F0B491C: -/* 0E944C 7F0B491C 0FC227E6 */ jal bondviewGetCurrentPlayersRoom -/* 0E9450 7F0B4920 00000000 */ nop -/* 0E9454 7F0B4924 3C018004 */ lui $at, %hi(g_BgCurrentRoom) -/* 0E9458 7F0B4928 00409825 */ move $s3, $v0 -/* 0E945C 7F0B492C 0FC227F5 */ jal bondviewGetCurrentPlayersPosition -/* 0E9460 7F0B4930 AC224838 */ sw $v0, %lo(g_BgCurrentRoom)($at) -/* 0E9464 7F0B4934 0FC22800 */ jal bondviewGetCurrentPlayersPosition3 -/* 0E9468 7F0B4938 0040A025 */ move $s4, $v0 -/* 0E946C 7F0B493C 3C038008 */ lui $v1, %hi(g_BgPortals) -/* 0E9470 7F0B4940 0040A825 */ move $s5, $v0 -/* 0E9474 7F0B4944 8C63FF80 */ lw $v1, %lo(g_BgPortals)($v1) -/* 0E9478 7F0B4948 0000B825 */ move $s7, $zero -/* 0E947C 7F0B494C 241E000B */ li $fp, 11 -/* 0E9480 7F0B4950 8C790000 */ lw $t9, ($v1) -.L7F0B4954: -/* 0E9484 7F0B4954 3C128004 */ lui $s2, %hi(D_800443C4) -/* 0E9488 7F0B4958 265243C4 */ addiu $s2, %lo(D_800443C4) # addiu $s2, $s2, 0x43c4 -/* 0E948C 7F0B495C 13200025 */ beqz $t9, .L7F0B49F4 -/* 0E9490 7F0B4960 00008025 */ move $s0, $zero -/* 0E9494 7F0B4964 00008825 */ move $s1, $zero -/* 0E9498 7F0B4968 00601025 */ move $v0, $v1 -.L7F0B496C: -/* 0E949C 7F0B496C 92480000 */ lbu $t0, ($s2) -/* 0E94A0 7F0B4970 5500001B */ bnezl $t0, .L7F0B49E0 -/* 0E94A4 7F0B4974 8C4E0008 */ lw $t6, 8($v0) -/* 0E94A8 7F0B4978 52160019 */ beql $s0, $s6, .L7F0B49E0 -/* 0E94AC 7F0B497C 8C4E0008 */ lw $t6, 8($v0) -/* 0E94B0 7F0B4980 90490004 */ lbu $t1, 4($v0) -/* 0E94B4 7F0B4984 02002025 */ move $a0, $s0 -/* 0E94B8 7F0B4988 02802825 */ move $a1, $s4 -/* 0E94BC 7F0B498C 12690004 */ beq $s3, $t1, .L7F0B49A0 -/* 0E94C0 7F0B4990 00000000 */ nop -/* 0E94C4 7F0B4994 904A0005 */ lbu $t2, 5($v0) -/* 0E94C8 7F0B4998 166A000D */ bne $s3, $t2, .L7F0B49D0 -/* 0E94CC 7F0B499C 00000000 */ nop -.L7F0B49A0: -/* 0E94D0 7F0B49A0 0FC2E7C5 */ jal sub_GAME_7F0B9F14 -/* 0E94D4 7F0B49A4 02A03025 */ move $a2, $s5 -/* 0E94D8 7F0B49A8 10400009 */ beqz $v0, .L7F0B49D0 -/* 0E94DC 7F0B49AC 3C038008 */ lui $v1, %hi(g_BgPortals) -/* 0E94E0 7F0B49B0 8C63FF80 */ lw $v1, %lo(g_BgPortals)($v1) -/* 0E94E4 7F0B49B4 0200B025 */ move $s6, $s0 -/* 0E94E8 7F0B49B8 00711021 */ addu $v0, $v1, $s1 -/* 0E94EC 7F0B49BC 904C0004 */ lbu $t4, 4($v0) -/* 0E94F0 7F0B49C0 904B0005 */ lbu $t3, 5($v0) -/* 0E94F4 7F0B49C4 026C6826 */ xor $t5, $s3, $t4 -/* 0E94F8 7F0B49C8 1000000A */ b .L7F0B49F4 -/* 0E94FC 7F0B49CC 016D9826 */ xor $s3, $t3, $t5 -.L7F0B49D0: -/* 0E9500 7F0B49D0 3C038008 */ lui $v1, %hi(g_BgPortals) -/* 0E9504 7F0B49D4 8C63FF80 */ lw $v1, %lo(g_BgPortals)($v1) -/* 0E9508 7F0B49D8 00711021 */ addu $v0, $v1, $s1 -/* 0E950C 7F0B49DC 8C4E0008 */ lw $t6, 8($v0) -.L7F0B49E0: -/* 0E9510 7F0B49E0 26100001 */ addiu $s0, $s0, 1 -/* 0E9514 7F0B49E4 26520001 */ addiu $s2, $s2, 1 -/* 0E9518 7F0B49E8 26310008 */ addiu $s1, $s1, 8 -/* 0E951C 7F0B49EC 15C0FFDF */ bnez $t6, .L7F0B496C -/* 0E9520 7F0B49F0 24420008 */ addiu $v0, $v0, 8 -.L7F0B49F4: -/* 0E9524 7F0B49F4 001078C0 */ sll $t7, $s0, 3 -/* 0E9528 7F0B49F8 006FC021 */ addu $t8, $v1, $t7 -/* 0E952C 7F0B49FC 8F190000 */ lw $t9, ($t8) -/* 0E9530 7F0B4A00 26F70001 */ addiu $s7, $s7, 1 -/* 0E9534 7F0B4A04 13200003 */ beqz $t9, .L7F0B4A14 -/* 0E9538 7F0B4A08 00000000 */ nop -/* 0E953C 7F0B4A0C 56FEFFD1 */ bnel $s7, $fp, .L7F0B4954 -/* 0E9540 7F0B4A10 8C790000 */ lw $t9, ($v1) -.L7F0B4A14: -/* 0E9544 7F0B4A14 3C018004 */ lui $at, %hi(g_BgCurrentRoom) -/* 0E9548 7F0B4A18 0FC2E29B */ jal sub_GAME_7F0B8A6C -/* 0E954C 7F0B4A1C AC334838 */ sw $s3, %lo(g_BgCurrentRoom)($at) -/* 0E9550 7F0B4A20 8FBF003C */ lw $ra, 0x3c($sp) -/* 0E9554 7F0B4A24 8FB00018 */ lw $s0, 0x18($sp) -/* 0E9558 7F0B4A28 8FB1001C */ lw $s1, 0x1c($sp) -/* 0E955C 7F0B4A2C 8FB20020 */ lw $s2, 0x20($sp) -/* 0E9560 7F0B4A30 8FB30024 */ lw $s3, 0x24($sp) -/* 0E9564 7F0B4A34 8FB40028 */ lw $s4, 0x28($sp) -/* 0E9568 7F0B4A38 8FB5002C */ lw $s5, 0x2c($sp) -/* 0E956C 7F0B4A3C 8FB60030 */ lw $s6, 0x30($sp) -/* 0E9570 7F0B4A40 8FB70034 */ lw $s7, 0x34($sp) -/* 0E9574 7F0B4A44 8FBE0038 */ lw $fp, 0x38($sp) -/* 0E9578 7F0B4A48 03E00008 */ jr $ra -/* 0E957C 7F0B4A4C 27BD0040 */ addiu $sp, $sp, 0x40 -) -#endif - - - -void addToByteSetMaxSize15(u8* set, u8 newElement) { - s32 i = 0; - - while (i < 0x10 && set[i] != 0xFF) { - if (newElement == set[i]) { - return; - } - i++; - } - - if (i < 0xF) { - set[i] = newElement; - set[i+1] = -1; - } - return; -} - - - - -#ifdef NONMATCHING -void sub_GAME_7F0B4AB4(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B4AB4 -/* 0E95E4 7F0B4AB4 27BDFEA0 */ addiu $sp, $sp, -0x160 -/* 0E95E8 7F0B4AB8 AFB5002C */ sw $s5, 0x2c($sp) -/* 0E95EC 7F0B4ABC 3C158008 */ lui $s5, %hi(g_BgPortals) -/* 0E95F0 7F0B4AC0 26B5FF80 */ addiu $s5, %lo(g_BgPortals) # addiu $s5, $s5, -0x80 -/* 0E95F4 7F0B4AC4 8EA80000 */ lw $t0, ($s5) -/* 0E95F8 7F0B4AC8 AFBF003C */ sw $ra, 0x3c($sp) -/* 0E95FC 7F0B4ACC AFBE0038 */ sw $fp, 0x38($sp) -/* 0E9600 7F0B4AD0 AFB70034 */ sw $s7, 0x34($sp) -/* 0E9604 7F0B4AD4 AFB60030 */ sw $s6, 0x30($sp) -/* 0E9608 7F0B4AD8 AFB40028 */ sw $s4, 0x28($sp) -/* 0E960C 7F0B4ADC AFB30024 */ sw $s3, 0x24($sp) -/* 0E9610 7F0B4AE0 AFB20020 */ sw $s2, 0x20($sp) -/* 0E9614 7F0B4AE4 AFB1001C */ sw $s1, 0x1c($sp) -/* 0E9618 7F0B4AE8 AFB00018 */ sw $s0, 0x18($sp) -/* 0E961C 7F0B4AEC AFA7016C */ sw $a3, 0x16c($sp) -/* 0E9620 7F0B4AF0 8D0E0000 */ lw $t6, ($t0) -/* 0E9624 7F0B4AF4 00809825 */ move $s3, $a0 -/* 0E9628 7F0B4AF8 00A0A025 */ move $s4, $a1 -/* 0E962C 7F0B4AFC 11C00013 */ beqz $t6, .L7F0B4B4C -/* 0E9630 7F0B4B00 00C0B025 */ move $s6, $a2 -/* 0E9634 7F0B4B04 27B1005C */ addiu $s1, $sp, 0x5c -/* 0E9638 7F0B4B08 00009025 */ move $s2, $zero -/* 0E963C 7F0B4B0C AFA0012C */ sw $zero, 0x12c($sp) -/* 0E9640 7F0B4B10 8FA4012C */ lw $a0, 0x12c($sp) -.L7F0B4B14: -/* 0E9644 7F0B4B14 02602825 */ move $a1, $s3 -/* 0E9648 7F0B4B18 0FC2E7C5 */ jal sub_GAME_7F0B9F14 -/* 0E964C 7F0B4B1C 02803025 */ move $a2, $s4 -/* 0E9650 7F0B4B20 A2220000 */ sb $v0, ($s1) -/* 0E9654 7F0B4B24 8FAF012C */ lw $t7, 0x12c($sp) -/* 0E9658 7F0B4B28 8EA80000 */ lw $t0, ($s5) -/* 0E965C 7F0B4B2C 26520008 */ addiu $s2, $s2, 8 -/* 0E9660 7F0B4B30 25F80001 */ addiu $t8, $t7, 1 -/* 0E9664 7F0B4B34 AFB8012C */ sw $t8, 0x12c($sp) -/* 0E9668 7F0B4B38 0112C821 */ addu $t9, $t0, $s2 -/* 0E966C 7F0B4B3C 8F290000 */ lw $t1, ($t9) -/* 0E9670 7F0B4B40 26310001 */ addiu $s1, $s1, 1 -/* 0E9674 7F0B4B44 5520FFF3 */ bnezl $t1, .L7F0B4B14 -/* 0E9678 7F0B4B48 8FA4012C */ lw $a0, 0x12c($sp) -.L7F0B4B4C: -/* 0E967C 7F0B4B4C 27A30150 */ addiu $v1, $sp, 0x150 -/* 0E9680 7F0B4B50 02C02025 */ move $a0, $s6 -/* 0E9684 7F0B4B54 27A20158 */ addiu $v0, $sp, 0x158 -.L7F0B4B58: -/* 0E9688 7F0B4B58 908A0000 */ lbu $t2, ($a0) -/* 0E968C 7F0B4B5C 24630001 */ addiu $v1, $v1, 1 -/* 0E9690 7F0B4B60 0062082B */ sltu $at, $v1, $v0 -/* 0E9694 7F0B4B64 24840001 */ addiu $a0, $a0, 1 -/* 0E9698 7F0B4B68 1420FFFB */ bnez $at, .L7F0B4B58 -/* 0E969C 7F0B4B6C A06AFFFF */ sb $t2, -1($v1) -/* 0E96A0 7F0B4B70 02C02025 */ move $a0, $s6 -/* 0E96A4 7F0B4B74 27A20130 */ addiu $v0, $sp, 0x130 -/* 0E96A8 7F0B4B78 27A30138 */ addiu $v1, $sp, 0x138 -.L7F0B4B7C: -/* 0E96AC 7F0B4B7C 908B0000 */ lbu $t3, ($a0) -/* 0E96B0 7F0B4B80 24420001 */ addiu $v0, $v0, 1 -/* 0E96B4 7F0B4B84 0043082B */ sltu $at, $v0, $v1 -/* 0E96B8 7F0B4B88 24840001 */ addiu $a0, $a0, 1 -/* 0E96BC 7F0B4B8C 1420FFFB */ bnez $at, .L7F0B4B7C -/* 0E96C0 7F0B4B90 A04BFFFF */ sb $t3, -1($v0) -/* 0E96C4 7F0B4B94 93AC0150 */ lbu $t4, 0x150($sp) -/* 0E96C8 7F0B4B98 240500FF */ li $a1, 255 -/* 0E96CC 7F0B4B9C AFA00124 */ sw $zero, 0x124($sp) -/* 0E96D0 7F0B4BA0 10AC0009 */ beq $a1, $t4, .L7F0B4BC8 -/* 0E96D4 7F0B4BA4 27BE0160 */ addiu $fp, $sp, 0x160 -/* 0E96D8 7F0B4BA8 27A30150 */ addiu $v1, $sp, 0x150 -/* 0E96DC 7F0B4BAC 27A20160 */ addiu $v0, $sp, 0x160 -/* 0E96E0 7F0B4BB0 906D0001 */ lbu $t5, 1($v1) -.L7F0B4BB4: -/* 0E96E4 7F0B4BB4 24630001 */ addiu $v1, $v1, 1 -/* 0E96E8 7F0B4BB8 50AD0004 */ beql $a1, $t5, .L7F0B4BCC -/* 0E96EC 7F0B4BBC AFA00124 */ sw $zero, 0x124($sp) -/* 0E96F0 7F0B4BC0 5462FFFC */ bnel $v1, $v0, .L7F0B4BB4 -/* 0E96F4 7F0B4BC4 906D0001 */ lbu $t5, 1($v1) -.L7F0B4BC8: -/* 0E96F8 7F0B4BC8 AFA00124 */ sw $zero, 0x124($sp) -.L7F0B4BCC: -/* 0E96FC 7F0B4BCC 24170002 */ li $s7, 2 -/* 0E9700 7F0B4BD0 24160001 */ li $s6, 1 -/* 0E9704 7F0B4BD4 27B40130 */ addiu $s4, $sp, 0x130 -/* 0E9708 7F0B4BD8 27B30140 */ addiu $s3, $sp, 0x140 -.L7F0B4BDC: -/* 0E970C 7F0B4BDC 240E00FF */ li $t6, 255 -/* 0E9710 7F0B4BE0 A3AE0140 */ sb $t6, 0x140($sp) -/* 0E9714 7F0B4BE4 AFA0012C */ sw $zero, 0x12c($sp) -/* 0E9718 7F0B4BE8 8D0F0000 */ lw $t7, ($t0) -/* 0E971C 7F0B4BEC 00009025 */ move $s2, $zero -/* 0E9720 7F0B4BF0 01001825 */ move $v1, $t0 -/* 0E9724 7F0B4BF4 51E0003D */ beql $t7, $zero, .L7F0B4CEC -/* 0E9728 7F0B4BF8 93A40140 */ lbu $a0, 0x140($sp) -/* 0E972C 7F0B4BFC 93B80150 */ lbu $t8, 0x150($sp) -.L7F0B4C00: -/* 0E9730 7F0B4C00 8FB9012C */ lw $t9, 0x12c($sp) -/* 0E9734 7F0B4C04 27A9005C */ addiu $t1, $sp, 0x5c -/* 0E9738 7F0B4C08 10B8002E */ beq $a1, $t8, .L7F0B4CC4 -/* 0E973C 7F0B4C0C 03298821 */ addu $s1, $t9, $t1 -/* 0E9740 7F0B4C10 27AA0150 */ addiu $t2, $sp, 0x150 -/* 0E9744 7F0B4C14 000A8021 */ addu $s0, $zero, $t2 -/* 0E9748 7F0B4C18 92220000 */ lbu $v0, ($s1) -.L7F0B4C1C: -/* 0E974C 7F0B4C1C 16C20011 */ bne $s6, $v0, .L7F0B4C64 -/* 0E9750 7F0B4C20 00000000 */ nop -/* 0E9754 7F0B4C24 906B0004 */ lbu $t3, 4($v1) -/* 0E9758 7F0B4C28 920C0000 */ lbu $t4, ($s0) -/* 0E975C 7F0B4C2C 02602025 */ move $a0, $s3 -/* 0E9760 7F0B4C30 156C000C */ bne $t3, $t4, .L7F0B4C64 -/* 0E9764 7F0B4C34 00000000 */ nop -/* 0E9768 7F0B4C38 0FC2D294 */ jal addToByteSetMaxSize15 -/* 0E976C 7F0B4C3C 90650005 */ lbu $a1, 5($v1) -/* 0E9770 7F0B4C40 8EAD0000 */ lw $t5, ($s5) -/* 0E9774 7F0B4C44 02802025 */ move $a0, $s4 -/* 0E9778 7F0B4C48 01B27021 */ addu $t6, $t5, $s2 -/* 0E977C 7F0B4C4C 0FC2D294 */ jal addToByteSetMaxSize15 -/* 0E9780 7F0B4C50 91C50005 */ lbu $a1, 5($t6) -/* 0E9784 7F0B4C54 8EA80000 */ lw $t0, ($s5) -/* 0E9788 7F0B4C58 A2200000 */ sb $zero, ($s1) -/* 0E978C 7F0B4C5C 300200FF */ andi $v0, $zero, 0xff -/* 0E9790 7F0B4C60 01121821 */ addu $v1, $t0, $s2 -.L7F0B4C64: -/* 0E9794 7F0B4C64 56E20011 */ bnel $s7, $v0, .L7F0B4CAC -/* 0E9798 7F0B4C68 920A0001 */ lbu $t2, 1($s0) -/* 0E979C 7F0B4C6C 906F0005 */ lbu $t7, 5($v1) -/* 0E97A0 7F0B4C70 92180000 */ lbu $t8, ($s0) -/* 0E97A4 7F0B4C74 02602025 */ move $a0, $s3 -/* 0E97A8 7F0B4C78 55F8000C */ bnel $t7, $t8, .L7F0B4CAC -/* 0E97AC 7F0B4C7C 920A0001 */ lbu $t2, 1($s0) -/* 0E97B0 7F0B4C80 0FC2D294 */ jal addToByteSetMaxSize15 -/* 0E97B4 7F0B4C84 90650004 */ lbu $a1, 4($v1) -/* 0E97B8 7F0B4C88 8EB90000 */ lw $t9, ($s5) -/* 0E97BC 7F0B4C8C 02802025 */ move $a0, $s4 -/* 0E97C0 7F0B4C90 03324821 */ addu $t1, $t9, $s2 -/* 0E97C4 7F0B4C94 0FC2D294 */ jal addToByteSetMaxSize15 -/* 0E97C8 7F0B4C98 91250004 */ lbu $a1, 4($t1) -/* 0E97CC 7F0B4C9C 8EA80000 */ lw $t0, ($s5) -/* 0E97D0 7F0B4CA0 A2200000 */ sb $zero, ($s1) -/* 0E97D4 7F0B4CA4 01121821 */ addu $v1, $t0, $s2 -/* 0E97D8 7F0B4CA8 920A0001 */ lbu $t2, 1($s0) -.L7F0B4CAC: -/* 0E97DC 7F0B4CAC 240100FF */ li $at, 255 -/* 0E97E0 7F0B4CB0 26100001 */ addiu $s0, $s0, 1 -/* 0E97E4 7F0B4CB4 51410004 */ beql $t2, $at, .L7F0B4CC8 -/* 0E97E8 7F0B4CB8 8FAB012C */ lw $t3, 0x12c($sp) -/* 0E97EC 7F0B4CBC 561EFFD7 */ bnel $s0, $fp, .L7F0B4C1C -/* 0E97F0 7F0B4CC0 92220000 */ lbu $v0, ($s1) -.L7F0B4CC4: -/* 0E97F4 7F0B4CC4 8FAB012C */ lw $t3, 0x12c($sp) -.L7F0B4CC8: -/* 0E97F8 7F0B4CC8 26520008 */ addiu $s2, $s2, 8 -/* 0E97FC 7F0B4CCC 24630008 */ addiu $v1, $v1, 8 -/* 0E9800 7F0B4CD0 256C0001 */ addiu $t4, $t3, 1 -/* 0E9804 7F0B4CD4 AFAC012C */ sw $t4, 0x12c($sp) -/* 0E9808 7F0B4CD8 8C6D0000 */ lw $t5, ($v1) -/* 0E980C 7F0B4CDC 240500FF */ li $a1, 255 -/* 0E9810 7F0B4CE0 55A0FFC7 */ bnezl $t5, .L7F0B4C00 -/* 0E9814 7F0B4CE4 93B80150 */ lbu $t8, 0x150($sp) -/* 0E9818 7F0B4CE8 93A40140 */ lbu $a0, 0x140($sp) -.L7F0B4CEC: -/* 0E981C 7F0B4CEC 27A30150 */ addiu $v1, $sp, 0x150 -/* 0E9820 7F0B4CF0 27A20140 */ addiu $v0, $sp, 0x140 -/* 0E9824 7F0B4CF4 14A40003 */ bne $a1, $a0, .L7F0B4D04 -/* 0E9828 7F0B4CF8 00000000 */ nop -/* 0E982C 7F0B4CFC 10000015 */ b .L7F0B4D54 -/* 0E9830 7F0B4D00 93A20150 */ lbu $v0, 0x150($sp) -.L7F0B4D04: -/* 0E9834 7F0B4D04 904E0000 */ lbu $t6, ($v0) -/* 0E9838 7F0B4D08 24420001 */ addiu $v0, $v0, 1 -/* 0E983C 7F0B4D0C 27AF0150 */ addiu $t7, $sp, 0x150 -/* 0E9840 7F0B4D10 004F082B */ sltu $at, $v0, $t7 -/* 0E9844 7F0B4D14 24630001 */ addiu $v1, $v1, 1 -/* 0E9848 7F0B4D18 1420FFFA */ bnez $at, .L7F0B4D04 -/* 0E984C 7F0B4D1C A06EFFFF */ sb $t6, -1($v1) -/* 0E9850 7F0B4D20 10A40009 */ beq $a1, $a0, .L7F0B4D48 -/* 0E9854 7F0B4D24 AFA00124 */ sw $zero, 0x124($sp) -/* 0E9858 7F0B4D28 02601025 */ move $v0, $s3 -/* 0E985C 7F0B4D2C 90580001 */ lbu $t8, 1($v0) -.L7F0B4D30: -/* 0E9860 7F0B4D30 24420001 */ addiu $v0, $v0, 1 -/* 0E9864 7F0B4D34 27B90150 */ addiu $t9, $sp, 0x150 -/* 0E9868 7F0B4D38 10B80003 */ beq $a1, $t8, .L7F0B4D48 -/* 0E986C 7F0B4D3C 00000000 */ nop -/* 0E9870 7F0B4D40 5459FFFB */ bnel $v0, $t9, .L7F0B4D30 -/* 0E9874 7F0B4D44 90580001 */ lbu $t8, 1($v0) -.L7F0B4D48: -/* 0E9878 7F0B4D48 14A4FFA4 */ bne $a1, $a0, .L7F0B4BDC -/* 0E987C 7F0B4D4C AFA00124 */ sw $zero, 0x124($sp) -/* 0E9880 7F0B4D50 93A20150 */ lbu $v0, 0x150($sp) -.L7F0B4D54: -/* 0E9884 7F0B4D54 10A20011 */ beq $a1, $v0, .L7F0B4D9C -/* 0E9888 7F0B4D58 8FA90124 */ lw $t1, 0x124($sp) -/* 0E988C 7F0B4D5C 8FAB016C */ lw $t3, 0x16c($sp) -/* 0E9890 7F0B4D60 27AA0150 */ addiu $t2, $sp, 0x150 -/* 0E9894 7F0B4D64 012A1821 */ addu $v1, $t1, $t2 -/* 0E9898 7F0B4D68 90620000 */ lbu $v0, ($v1) -/* 0E989C 7F0B4D6C 01692021 */ addu $a0, $t3, $t1 -/* 0E98A0 7F0B4D70 A0820000 */ sb $v0, ($a0) -.L7F0B4D74: -/* 0E98A4 7F0B4D74 8FAD0124 */ lw $t5, 0x124($sp) -/* 0E98A8 7F0B4D78 24630001 */ addiu $v1, $v1, 1 -/* 0E98AC 7F0B4D7C 24840001 */ addiu $a0, $a0, 1 -/* 0E98B0 7F0B4D80 25AE0001 */ addiu $t6, $t5, 1 -/* 0E98B4 7F0B4D84 29C10007 */ slti $at, $t6, 7 -/* 0E98B8 7F0B4D88 10200004 */ beqz $at, .L7F0B4D9C -/* 0E98BC 7F0B4D8C AFAE0124 */ sw $t6, 0x124($sp) -/* 0E98C0 7F0B4D90 90620000 */ lbu $v0, ($v1) -/* 0E98C4 7F0B4D94 54A2FFF7 */ bnel $a1, $v0, .L7F0B4D74 -/* 0E98C8 7F0B4D98 A0820000 */ sb $v0, ($a0) -.L7F0B4D9C: -/* 0E98CC 7F0B4D9C 8FB8016C */ lw $t8, 0x16c($sp) -/* 0E98D0 7F0B4DA0 8FB90124 */ lw $t9, 0x124($sp) -/* 0E98D4 7F0B4DA4 8FA60178 */ lw $a2, 0x178($sp) -/* 0E98D8 7F0B4DA8 240F00FF */ li $t7, 255 -/* 0E98DC 7F0B4DAC 03194821 */ addu $t1, $t8, $t9 -/* 0E98E0 7F0B4DB0 A12F0000 */ sb $t7, ($t1) -/* 0E98E4 7F0B4DB4 18C00013 */ blez $a2, .L7F0B4E04 -/* 0E98E8 7F0B4DB8 AFA00124 */ sw $zero, 0x124($sp) -/* 0E98EC 7F0B4DBC 93AA0130 */ lbu $t2, 0x130($sp) -/* 0E98F0 7F0B4DC0 27A20130 */ addiu $v0, $sp, 0x130 -/* 0E98F4 7F0B4DC4 8FA40170 */ lw $a0, 0x170($sp) -/* 0E98F8 7F0B4DC8 50AA000F */ beql $a1, $t2, .L7F0B4E08 -/* 0E98FC 7F0B4DCC 8FAD0124 */ lw $t5, 0x124($sp) -/* 0E9900 7F0B4DD0 90430000 */ lbu $v1, ($v0) -/* 0E9904 7F0B4DD4 AC830000 */ sw $v1, ($a0) -.L7F0B4DD8: -/* 0E9908 7F0B4DD8 8FAB0124 */ lw $t3, 0x124($sp) -/* 0E990C 7F0B4DDC 24420001 */ addiu $v0, $v0, 1 -/* 0E9910 7F0B4DE0 24840004 */ addiu $a0, $a0, 4 -/* 0E9914 7F0B4DE4 256C0001 */ addiu $t4, $t3, 1 -/* 0E9918 7F0B4DE8 0186082A */ slt $at, $t4, $a2 -/* 0E991C 7F0B4DEC 10200005 */ beqz $at, .L7F0B4E04 -/* 0E9920 7F0B4DF0 AFAC0124 */ sw $t4, 0x124($sp) -/* 0E9924 7F0B4DF4 90430000 */ lbu $v1, ($v0) -/* 0E9928 7F0B4DF8 240100FF */ li $at, 255 -/* 0E992C 7F0B4DFC 5461FFF6 */ bnel $v1, $at, .L7F0B4DD8 -/* 0E9930 7F0B4E00 AC830000 */ sw $v1, ($a0) -.L7F0B4E04: -/* 0E9934 7F0B4E04 8FAD0124 */ lw $t5, 0x124($sp) -.L7F0B4E08: -/* 0E9938 7F0B4E08 8FAE0174 */ lw $t6, 0x174($sp) -/* 0E993C 7F0B4E0C ADCD0000 */ sw $t5, ($t6) -/* 0E9940 7F0B4E10 8FBF003C */ lw $ra, 0x3c($sp) -/* 0E9944 7F0B4E14 8FBE0038 */ lw $fp, 0x38($sp) -/* 0E9948 7F0B4E18 8FB70034 */ lw $s7, 0x34($sp) -/* 0E994C 7F0B4E1C 8FB60030 */ lw $s6, 0x30($sp) -/* 0E9950 7F0B4E20 8FB5002C */ lw $s5, 0x2c($sp) -/* 0E9954 7F0B4E24 8FB40028 */ lw $s4, 0x28($sp) -/* 0E9958 7F0B4E28 8FB30024 */ lw $s3, 0x24($sp) -/* 0E995C 7F0B4E2C 8FB20020 */ lw $s2, 0x20($sp) -/* 0E9960 7F0B4E30 8FB1001C */ lw $s1, 0x1c($sp) -/* 0E9964 7F0B4E34 8FB00018 */ lw $s0, 0x18($sp) -/* 0E9968 7F0B4E38 03E00008 */ jr $ra -/* 0E996C 7F0B4E3C 27BD0160 */ addiu $sp, $sp, 0x160 -) -#endif - - - - - -/** - * Address 0x7F0B4E40. -*/ -Gfx *bgLevelRender(Gfx *arg0) -{ - gSPSetLights1(arg0++, GlobalLight); - gSPLookAt(arg0++, sub_GAME_7F078474()); - gSPSegment(arg0++, SPSEGMENT_BG_DL, ptr_bg_data); - - if (dword_CODE_bss_8007FF88 == 1) - { - gSPDisplayList(arg0++, dword_CODE_bss_8007BF98); - } - else - { - arg0 = fogRenderClearFogMode(bgScissorCurrentPlayerViewDefault(sub_GAME_7F0B8D78(fogSetRenderFogColor(arg0, 0)))); - } - - gSPMatrix(arg0++, g_viProjectionMatrix, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); - - return bondviewGfxPlayerField5cMatrix(arg0++); -} - - - - - -f32 sub_GAME_7F0B4F9C(s32 arg0) -{ - return dword_CODE_bss_8007FF94[arg0 + 1]; -} - - - - - - -/** - * Calls @see bgScissorCurrentPlayerView with default current player values. - * Address 0x7F0B4FB4. - */ -Gfx* bgScissorCurrentPlayerViewDefault(Gfx* arg0) -{ - return bgScissorCurrentPlayerView( - arg0, - g_CurrentPlayer->viewleft, - g_CurrentPlayer->viewtop, - g_CurrentPlayer->viewleft + g_CurrentPlayer->viewx, - g_CurrentPlayer->viewtop + g_CurrentPlayer->viewy); -} - - - - - -/** - * Same as @see bgScissorCurrentPlayerView, but accepts float parameters. - * Address 0x7F0B4FF4. - */ -Gfx* bgScissorCurrentPlayerViewF(Gfx* arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) -{ - return bgScissorCurrentPlayerView( - arg0, - (s32)arg1, - (s32)arg2, - ceilFloatToInt(arg3), - ceilFloatToInt(arg4)); -} - - - - - -/** - * Specifies the drawing area (the scissoring box). - * View is bound to current player view properties, but parameters can clip to smaller area. - * - * @param arg0: Display list pointer - * @param left: Screen's left edge coordinates. Must be >= g_CurrentPlayer->viewleft otherwise ignored. - * @param top: Screen's top edge coordinates. Must be >= g_CurrentPlayer->viewtop otherwise ignored. - * @param width: Screen's right edge coordinates. Must be <= g_CurrentPlayer->viewleft+viewx otherwise ignored. - * @param height: Screen's left bottom coordinates. Must be <= g_CurrentPlayer->viewtop+viewy otherwise ignored. - * - * Address 0x7F0B5058. -*/ -Gfx *bgScissorCurrentPlayerView(Gfx *arg0, s32 left, s32 top, s32 width, s32 height) -{ - struct player *temp_v0; - - temp_v0 = g_CurrentPlayer; - - if (left < (s32) temp_v0->viewleft) - { - left = (s32) temp_v0->viewleft; - } - - if (top < (s32) temp_v0->viewtop) - { - top = (s32) temp_v0->viewtop; - } - - if (temp_v0->viewleft + temp_v0->viewx < width) - { - width = temp_v0->viewleft + temp_v0->viewx; - } - - if (temp_v0->viewtop + temp_v0->viewy < height) - { - height = temp_v0->viewtop + temp_v0->viewy; - } - - gDPSetScissor(arg0++, G_SC_NON_INTERLACE, left, top, width, height); - - return arg0; -} - - - - - -void sub_GAME_7F0B5168(void) { - s32 i; - - for (i = 0; i < 200; i++) { - table_for_portals[i].unk0 = -1; - } -} - - - - - -/** - * Unreferenced. - * - * Loosely checks that arg1 surrounds arg0. Requires points be ordered according to min/max. - * - * Address 0x7F0B519C. - */ -s32 bgRectIsInside(struct bbox2d *arg0, struct bbox2d *arg1) -{ - if (arg1->min.x <= arg0->min.x) - { - if (arg0->min.x <= arg1->max.x) - { - if (arg1->min.y <= arg0->min.y) - { - if (arg0->min.y <= arg1->max.y) - { - return 1; - } - } - } - } - return 0; -} - - - -#ifdef NONMATCHING -void sub_GAME_7F0B5208(s32 arg0, void *arg1) { - ? sp3C; - f32 sp40; - f32 sp5C; - f32 sp60; - f32 sp64; - f32 sp68; - s32 sp74; - ? temp_ret; - s32 temp_v1; - s32 phi_v1; - void *phi_a2; - s32 phi_s6; - s32 phi_s1; - s32 phi_s2; - s32 phi_s3; - s32 phi_s4; - s32 phi_s5; - s32 phi_s6_2; - s32 phi_s1_2; - s32 phi_s2_2; - s32 phi_s3_2; - s32 phi_s4_2; - s32 phi_s5_2; - s32 phi_s1_3; - s32 phi_s2_3; - s32 phi_s3_3; - - // Node 0 - viGetZRange(&sp3C); - sp40 = (f32) (sp40 / mCurrentLevelVisibilityScale); - phi_v1 = 0; - phi_a2 = ((arg0 * 0x50) + &g_BgRoomInfo); - phi_s6_2 = 0; - phi_s4_2 = 0; - phi_s5_2 = 0; - phi_s1_3 = 0; - phi_s2_3 = 0; - phi_s3_3 = 0; -loop_1: - // Node 1 - if ((phi_v1 & 1) != 0) - { - // Node 2 - sp5C = (f32) phi_a2->unk38; - } - else - { - // Node 3 - sp5C = (f32) phi_a2->unk44; - } - // Node 4 - if ((phi_v1 & 2) != 0) - { - // Node 5 - sp60 = (f32) phi_a2->unk3C; - } - else - { - // Node 6 - sp60 = (f32) phi_a2->unk48; - } - // Node 7 - if ((phi_v1 & 4) != 0) - { - // Node 8 - sp64 = (f32) phi_a2->unk40; - } - else - { - // Node 9 - sp64 = (f32) phi_a2->unk4C; - } - // Node 10 - sp74 = (s32) phi_v1; - temp_ret = sub_GAME_7F0B5488(&sp5C, &sp68, phi_a2); - if (temp_ret == 0) - { - // Node 11 - phi_s1 = phi_s1_3; - if (sp40 <= -sp70) - { - // Node 12 - phi_s1 = (phi_s1_3 + 1); - } - // Node 13 - phi_s2 = phi_s2_3; - if (*arg1 <= sp68) - { - // Node 14 - phi_s2 = (phi_s2_3 + 1); - } - // Node 15 - phi_s3 = phi_s3_3; - if (sp68 <= arg1->unk8) - { - // Node 16 - phi_s3 = (phi_s3_3 + 1); - } - // Node 17 - phi_s4 = phi_s4_2; - if (arg1->unk4 <= sp6C) - { - // Node 18 - phi_s4 = (phi_s4_2 + 1); - } - // Node 19 - phi_s5 = phi_s5_2; - if (sp6C <= arg1->unkC) - { - // Node 20 - phi_s5 = (phi_s5_2 + 1); - } - // Node 21 - phi_s6 = (phi_s6_2 + 1); - } - else - { - // Node 22 - phi_s1_2 = phi_s1_3; - if (sp40 <= -sp70) - { - // Node 23 - phi_s1_2 = (phi_s1_3 + 1); - } - // Node 24 - if (sp68 <= *arg1) - { - // Node 25 - phi_s2_2 = (phi_s2_3 + 1); - phi_s3_2 = phi_s3_3; - } - else - { - // Node 26 - phi_s2_2 = phi_s2_3; - phi_s3_2 = phi_s3_3; - if (arg1->unk8 <= sp68) - { - // Node 27 - phi_s2_2 = phi_s2_3; - phi_s3_2 = (phi_s3_3 + 1); - } - } - // Node 28 - if (sp6C <= arg1->unk4) - { - // Node 29 - phi_s6 = phi_s6_2; - phi_s1 = phi_s1_2; - phi_s2 = phi_s2_2; - phi_s3 = phi_s3_2; - phi_s4 = (phi_s4_2 + 1); - phi_s5 = phi_s5_2; - } - else - { - // Node 30 - phi_s6 = phi_s6_2; - phi_s1 = phi_s1_2; - phi_s2 = phi_s2_2; - phi_s3 = phi_s3_2; - phi_s4 = phi_s4_2; - phi_s5 = phi_s5_2; - if (arg1->unkC <= sp6C) - { - // Node 31 - phi_s6 = phi_s6_2; - phi_s1 = phi_s1_2; - phi_s2 = phi_s2_2; - phi_s3 = phi_s3_2; - phi_s4 = phi_s4_2; - phi_s5 = (phi_s5_2 + 1); - } - } - } - // Node 32 - temp_v1 = (phi_v1 + 1); - phi_v1 = temp_v1; - phi_a2 = sp38; - phi_s6_2 = phi_s6; - phi_s4_2 = phi_s4; - phi_s5_2 = phi_s5; - phi_s1_3 = phi_s1; - phi_s2_3 = phi_s2; - phi_s3_3 = phi_s3; - if (temp_v1 != 8) - { - goto loop_1; - } - // Node 33 - if ((((((phi_s6 == 8) || (phi_s1 == 8)) || (phi_s2 == 8)) || (phi_s3 == 8)) || (phi_s4 == 8)) || (phi_s5 == 8)) - { - // Node 39 - } - else - { - - } - // Node 40 - return temp_ret; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B5208 -/* 0E9D38 7F0B5208 27BDFF88 */ addiu $sp, $sp, -0x78 -/* 0E9D3C 7F0B520C AFBF0034 */ sw $ra, 0x34($sp) -/* 0E9D40 7F0B5210 AFB60030 */ sw $s6, 0x30($sp) -/* 0E9D44 7F0B5214 AFB5002C */ sw $s5, 0x2c($sp) -/* 0E9D48 7F0B5218 AFB40028 */ sw $s4, 0x28($sp) -/* 0E9D4C 7F0B521C AFB30024 */ sw $s3, 0x24($sp) -/* 0E9D50 7F0B5220 AFB20020 */ sw $s2, 0x20($sp) -/* 0E9D54 7F0B5224 AFB1001C */ sw $s1, 0x1c($sp) -/* 0E9D58 7F0B5228 AFB00018 */ sw $s0, 0x18($sp) -/* 0E9D5C 7F0B522C AFA40078 */ sw $a0, 0x78($sp) -/* 0E9D60 7F0B5230 00A08025 */ move $s0, $a1 -/* 0E9D64 7F0B5234 00008825 */ move $s1, $zero -/* 0E9D68 7F0B5238 0000B025 */ move $s6, $zero -/* 0E9D6C 7F0B523C 00009025 */ move $s2, $zero -/* 0E9D70 7F0B5240 00009825 */ move $s3, $zero -/* 0E9D74 7F0B5244 0000A025 */ move $s4, $zero -/* 0E9D78 7F0B5248 0000A825 */ move $s5, $zero -/* 0E9D7C 7F0B524C 0C0011AB */ jal viGetZRange -/* 0E9D80 7F0B5250 27A4003C */ addiu $a0, $sp, 0x3c -/* 0E9D84 7F0B5254 3C018004 */ lui $at, %hi(mCurrentLevelVisibilityScale) -/* 0E9D88 7F0B5258 C42613FC */ lwc1 $f6, %lo(mCurrentLevelVisibilityScale)($at) -/* 0E9D8C 7F0B525C C7A40040 */ lwc1 $f4, 0x40($sp) -/* 0E9D90 7F0B5260 8FAE0078 */ lw $t6, 0x78($sp) -/* 0E9D94 7F0B5264 3C188004 */ lui $t8, %hi(g_BgRoomInfo) -/* 0E9D98 7F0B5268 46062203 */ div.s $f8, $f4, $f6 -/* 0E9D9C 7F0B526C 000E7880 */ sll $t7, $t6, 2 -/* 0E9DA0 7F0B5270 01EE7821 */ addu $t7, $t7, $t6 -/* 0E9DA4 7F0B5274 000F7900 */ sll $t7, $t7, 4 -/* 0E9DA8 7F0B5278 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 -/* 0E9DAC 7F0B527C 01F83021 */ addu $a2, $t7, $t8 -/* 0E9DB0 7F0B5280 00001825 */ move $v1, $zero -/* 0E9DB4 7F0B5284 E7A80040 */ swc1 $f8, 0x40($sp) -/* 0E9DB8 7F0B5288 30790001 */ andi $t9, $v1, 1 -.L7F0B528C: -/* 0E9DBC 7F0B528C 13200004 */ beqz $t9, .L7F0B52A0 -/* 0E9DC0 7F0B5290 30680002 */ andi $t0, $v1, 2 -/* 0E9DC4 7F0B5294 C4CA0038 */ lwc1 $f10, 0x38($a2) -/* 0E9DC8 7F0B5298 10000003 */ b .L7F0B52A8 -/* 0E9DCC 7F0B529C E7AA005C */ swc1 $f10, 0x5c($sp) -.L7F0B52A0: -/* 0E9DD0 7F0B52A0 C4D00044 */ lwc1 $f16, 0x44($a2) -/* 0E9DD4 7F0B52A4 E7B0005C */ swc1 $f16, 0x5c($sp) -.L7F0B52A8: -/* 0E9DD8 7F0B52A8 11000004 */ beqz $t0, .L7F0B52BC -/* 0E9DDC 7F0B52AC 30690004 */ andi $t1, $v1, 4 -/* 0E9DE0 7F0B52B0 C4D2003C */ lwc1 $f18, 0x3c($a2) -/* 0E9DE4 7F0B52B4 10000003 */ b .L7F0B52C4 -/* 0E9DE8 7F0B52B8 E7B20060 */ swc1 $f18, 0x60($sp) -.L7F0B52BC: -/* 0E9DEC 7F0B52BC C4C40048 */ lwc1 $f4, 0x48($a2) -/* 0E9DF0 7F0B52C0 E7A40060 */ swc1 $f4, 0x60($sp) -.L7F0B52C4: -/* 0E9DF4 7F0B52C4 11200004 */ beqz $t1, .L7F0B52D8 -/* 0E9DF8 7F0B52C8 27A4005C */ addiu $a0, $sp, 0x5c -/* 0E9DFC 7F0B52CC C4C60040 */ lwc1 $f6, 0x40($a2) -/* 0E9E00 7F0B52D0 10000003 */ b .L7F0B52E0 -/* 0E9E04 7F0B52D4 E7A60064 */ swc1 $f6, 0x64($sp) -.L7F0B52D8: -/* 0E9E08 7F0B52D8 C4C8004C */ lwc1 $f8, 0x4c($a2) -/* 0E9E0C 7F0B52DC E7A80064 */ swc1 $f8, 0x64($sp) -.L7F0B52E0: -/* 0E9E10 7F0B52E0 27A50068 */ addiu $a1, $sp, 0x68 -/* 0E9E14 7F0B52E4 AFA30074 */ sw $v1, 0x74($sp) -/* 0E9E18 7F0B52E8 0FC2D522 */ jal sub_GAME_7F0B5488 -/* 0E9E1C 7F0B52EC AFA60038 */ sw $a2, 0x38($sp) -/* 0E9E20 7F0B52F0 8FA30074 */ lw $v1, 0x74($sp) -/* 0E9E24 7F0B52F4 8FA60038 */ lw $a2, 0x38($sp) -/* 0E9E28 7F0B52F8 14400025 */ bnez $v0, .L7F0B5390 -/* 0E9E2C 7F0B52FC 24070008 */ li $a3, 8 -/* 0E9E30 7F0B5300 C7AA0070 */ lwc1 $f10, 0x70($sp) -/* 0E9E34 7F0B5304 C7B20040 */ lwc1 $f18, 0x40($sp) -/* 0E9E38 7F0B5308 C7A40068 */ lwc1 $f4, 0x68($sp) -/* 0E9E3C 7F0B530C 46005407 */ neg.s $f16, $f10 -/* 0E9E40 7F0B5310 C7AA0068 */ lwc1 $f10, 0x68($sp) -/* 0E9E44 7F0B5314 4610903E */ c.le.s $f18, $f16 -/* 0E9E48 7F0B5318 C7B0006C */ lwc1 $f16, 0x6c($sp) -/* 0E9E4C 7F0B531C 45020003 */ bc1fl .L7F0B532C -/* 0E9E50 7F0B5320 C6060000 */ lwc1 $f6, ($s0) -/* 0E9E54 7F0B5324 26310001 */ addiu $s1, $s1, 1 -/* 0E9E58 7F0B5328 C6060000 */ lwc1 $f6, ($s0) -.L7F0B532C: -/* 0E9E5C 7F0B532C 4604303E */ c.le.s $f6, $f4 -/* 0E9E60 7F0B5330 C7A6006C */ lwc1 $f6, 0x6c($sp) -/* 0E9E64 7F0B5334 45020003 */ bc1fl .L7F0B5344 -/* 0E9E68 7F0B5338 C6080008 */ lwc1 $f8, 8($s0) -/* 0E9E6C 7F0B533C 26520001 */ addiu $s2, $s2, 1 -/* 0E9E70 7F0B5340 C6080008 */ lwc1 $f8, 8($s0) -.L7F0B5344: -/* 0E9E74 7F0B5344 4608503E */ c.le.s $f10, $f8 -/* 0E9E78 7F0B5348 00000000 */ nop -/* 0E9E7C 7F0B534C 45020003 */ bc1fl .L7F0B535C -/* 0E9E80 7F0B5350 C6120004 */ lwc1 $f18, 4($s0) -/* 0E9E84 7F0B5354 26730001 */ addiu $s3, $s3, 1 -/* 0E9E88 7F0B5358 C6120004 */ lwc1 $f18, 4($s0) -.L7F0B535C: -/* 0E9E8C 7F0B535C 4610903E */ c.le.s $f18, $f16 -/* 0E9E90 7F0B5360 00000000 */ nop -/* 0E9E94 7F0B5364 45020003 */ bc1fl .L7F0B5374 -/* 0E9E98 7F0B5368 C604000C */ lwc1 $f4, 0xc($s0) -/* 0E9E9C 7F0B536C 26940001 */ addiu $s4, $s4, 1 -/* 0E9EA0 7F0B5370 C604000C */ lwc1 $f4, 0xc($s0) -.L7F0B5374: -/* 0E9EA4 7F0B5374 4604303E */ c.le.s $f6, $f4 -/* 0E9EA8 7F0B5378 00000000 */ nop -/* 0E9EAC 7F0B537C 45000002 */ bc1f .L7F0B5388 -/* 0E9EB0 7F0B5380 00000000 */ nop -/* 0E9EB4 7F0B5384 26B50001 */ addiu $s5, $s5, 1 -.L7F0B5388: -/* 0E9EB8 7F0B5388 10000025 */ b .L7F0B5420 -/* 0E9EBC 7F0B538C 26D60001 */ addiu $s6, $s6, 1 -.L7F0B5390: -/* 0E9EC0 7F0B5390 C7A80070 */ lwc1 $f8, 0x70($sp) -/* 0E9EC4 7F0B5394 C7B00040 */ lwc1 $f16, 0x40($sp) -/* 0E9EC8 7F0B5398 C7A40068 */ lwc1 $f4, 0x68($sp) -/* 0E9ECC 7F0B539C 46004287 */ neg.s $f10, $f8 -/* 0E9ED0 7F0B53A0 C7A60068 */ lwc1 $f6, 0x68($sp) -/* 0E9ED4 7F0B53A4 460A803E */ c.le.s $f16, $f10 -/* 0E9ED8 7F0B53A8 C7B0006C */ lwc1 $f16, 0x6c($sp) -/* 0E9EDC 7F0B53AC 45020003 */ bc1fl .L7F0B53BC -/* 0E9EE0 7F0B53B0 C6120000 */ lwc1 $f18, ($s0) -/* 0E9EE4 7F0B53B4 26310001 */ addiu $s1, $s1, 1 -/* 0E9EE8 7F0B53B8 C6120000 */ lwc1 $f18, ($s0) -.L7F0B53BC: -/* 0E9EEC 7F0B53BC 4612203E */ c.le.s $f4, $f18 -/* 0E9EF0 7F0B53C0 C7B2006C */ lwc1 $f18, 0x6c($sp) -/* 0E9EF4 7F0B53C4 45020004 */ bc1fl .L7F0B53D8 -/* 0E9EF8 7F0B53C8 C6080008 */ lwc1 $f8, 8($s0) -/* 0E9EFC 7F0B53CC 10000007 */ b .L7F0B53EC -/* 0E9F00 7F0B53D0 26520001 */ addiu $s2, $s2, 1 -/* 0E9F04 7F0B53D4 C6080008 */ lwc1 $f8, 8($s0) -.L7F0B53D8: -/* 0E9F08 7F0B53D8 4606403E */ c.le.s $f8, $f6 -/* 0E9F0C 7F0B53DC 00000000 */ nop -/* 0E9F10 7F0B53E0 45020003 */ bc1fl .L7F0B53F0 -/* 0E9F14 7F0B53E4 C60A0004 */ lwc1 $f10, 4($s0) -/* 0E9F18 7F0B53E8 26730001 */ addiu $s3, $s3, 1 -.L7F0B53EC: -/* 0E9F1C 7F0B53EC C60A0004 */ lwc1 $f10, 4($s0) -.L7F0B53F0: -/* 0E9F20 7F0B53F0 460A803E */ c.le.s $f16, $f10 -/* 0E9F24 7F0B53F4 00000000 */ nop -/* 0E9F28 7F0B53F8 45020004 */ bc1fl .L7F0B540C -/* 0E9F2C 7F0B53FC C604000C */ lwc1 $f4, 0xc($s0) -/* 0E9F30 7F0B5400 10000007 */ b .L7F0B5420 -/* 0E9F34 7F0B5404 26940001 */ addiu $s4, $s4, 1 -/* 0E9F38 7F0B5408 C604000C */ lwc1 $f4, 0xc($s0) -.L7F0B540C: -/* 0E9F3C 7F0B540C 4612203E */ c.le.s $f4, $f18 -/* 0E9F40 7F0B5410 00000000 */ nop -/* 0E9F44 7F0B5414 45020003 */ bc1fl .L7F0B5424 -/* 0E9F48 7F0B5418 24630001 */ addiu $v1, $v1, 1 -/* 0E9F4C 7F0B541C 26B50001 */ addiu $s5, $s5, 1 -.L7F0B5420: -/* 0E9F50 7F0B5420 24630001 */ addiu $v1, $v1, 1 -.L7F0B5424: -/* 0E9F54 7F0B5424 5467FF99 */ bnel $v1, $a3, .L7F0B528C -/* 0E9F58 7F0B5428 30790001 */ andi $t9, $v1, 1 -/* 0E9F5C 7F0B542C 12C7000B */ beq $s6, $a3, .L7F0B545C -/* 0E9F60 7F0B5430 8FB00018 */ lw $s0, 0x18($sp) -/* 0E9F64 7F0B5434 12270009 */ beq $s1, $a3, .L7F0B545C -/* 0E9F68 7F0B5438 00000000 */ nop -/* 0E9F6C 7F0B543C 12470007 */ beq $s2, $a3, .L7F0B545C -/* 0E9F70 7F0B5440 00000000 */ nop -/* 0E9F74 7F0B5444 12670005 */ beq $s3, $a3, .L7F0B545C -/* 0E9F78 7F0B5448 00000000 */ nop -/* 0E9F7C 7F0B544C 12870003 */ beq $s4, $a3, .L7F0B545C -/* 0E9F80 7F0B5450 00000000 */ nop -/* 0E9F84 7F0B5454 16A70003 */ bne $s5, $a3, .L7F0B5464 -/* 0E9F88 7F0B5458 24020001 */ li $v0, 1 -.L7F0B545C: -/* 0E9F8C 7F0B545C 10000001 */ b .L7F0B5464 -/* 0E9F90 7F0B5460 00001025 */ move $v0, $zero -.L7F0B5464: -/* 0E9F94 7F0B5464 8FBF0034 */ lw $ra, 0x34($sp) -/* 0E9F98 7F0B5468 8FB1001C */ lw $s1, 0x1c($sp) -/* 0E9F9C 7F0B546C 8FB20020 */ lw $s2, 0x20($sp) -/* 0E9FA0 7F0B5470 8FB30024 */ lw $s3, 0x24($sp) -/* 0E9FA4 7F0B5474 8FB40028 */ lw $s4, 0x28($sp) -/* 0E9FA8 7F0B5478 8FB5002C */ lw $s5, 0x2c($sp) -/* 0E9FAC 7F0B547C 8FB60030 */ lw $s6, 0x30($sp) -/* 0E9FB0 7F0B5480 03E00008 */ jr $ra -/* 0E9FB4 7F0B5484 27BD0078 */ addiu $sp, $sp, 0x78 -) -#endif - - -s32 sub_GAME_7F0B5488(coord3d* arg0, coord3d* arg1) -{ - Mtxf* temp_a0; - s32 var_v0; - - temp_a0 = camGetWorldToScreenMtxf(); - arg1->x = arg0->x * room_data_float2; - arg1->y = arg0->y * room_data_float2; - arg1->z = arg0->z * room_data_float2; - mtx4TransformVecInPlace(temp_a0, arg1); - - transform3Dto2DWithZScaling(arg1, arg1); - - if (arg1->z > 0.0f) - { - return 0; - } - else - { - return 1; - } -} - - -#ifdef NONMATCHING -void sub_GAME_7F0B5528(void) { - -} -#else -GLOBAL_ASM( -.late_rodata -glabel D_80058C7C -.word 0x3f666666 /*0.89999998*/ -.text -glabel sub_GAME_7F0B5528 -/* 0EA058 7F0B5528 27BDFF50 */ addiu $sp, $sp, -0xb0 -/* 0EA05C 7F0B552C F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0EA060 7F0B5530 4485A000 */ mtc1 $a1, $f20 -/* 0EA064 7F0B5534 AFBF0054 */ sw $ra, 0x54($sp) -/* 0EA068 7F0B5538 AFB60048 */ sw $s6, 0x48($sp) -/* 0EA06C 7F0B553C 00C0B025 */ move $s6, $a2 -/* 0EA070 7F0B5540 AFBE0050 */ sw $fp, 0x50($sp) -/* 0EA074 7F0B5544 AFB7004C */ sw $s7, 0x4c($sp) -/* 0EA078 7F0B5548 AFB50044 */ sw $s5, 0x44($sp) -/* 0EA07C 7F0B554C AFB40040 */ sw $s4, 0x40($sp) -/* 0EA080 7F0B5550 AFB3003C */ sw $s3, 0x3c($sp) -/* 0EA084 7F0B5554 AFB20038 */ sw $s2, 0x38($sp) -/* 0EA088 7F0B5558 AFB10034 */ sw $s1, 0x34($sp) -/* 0EA08C 7F0B555C AFB00030 */ sw $s0, 0x30($sp) -/* 0EA090 7F0B5560 F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0EA094 7F0B5564 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0EA098 7F0B5568 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 0EA09C 7F0B556C AFA400B0 */ sw $a0, 0xb0($sp) -/* 0EA0A0 7F0B5570 AFA200AC */ sw $v0, 0xac($sp) -/* 0EA0A4 7F0B5574 241E0001 */ li $fp, 1 -/* 0EA0A8 7F0B5578 0C0011AB */ jal viGetZRange -/* 0EA0AC 7F0B557C 27A40098 */ addiu $a0, $sp, 0x98 -/* 0EA0B0 7F0B5580 3C018004 */ lui $at, %hi(mCurrentLevelVisibilityScale) -/* 0EA0B4 7F0B5584 C42613FC */ lwc1 $f6, %lo(mCurrentLevelVisibilityScale)($at) -/* 0EA0B8 7F0B5588 C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 0EA0BC 7F0B558C 3C138008 */ lui $s3, %hi(g_BgPortals) -/* 0EA0C0 7F0B5590 8FB500B0 */ lw $s5, 0xb0($sp) -/* 0EA0C4 7F0B5594 46062203 */ div.s $f8, $f4, $f6 -/* 0EA0C8 7F0B5598 2673FF80 */ addiu $s3, %lo(g_BgPortals) # addiu $s3, $s3, -0x80 -/* 0EA0CC 7F0B559C 8E6F0000 */ lw $t7, ($s3) -/* 0EA0D0 7F0B55A0 001570C0 */ sll $t6, $s5, 3 -/* 0EA0D4 7F0B55A4 01C0A825 */ move $s5, $t6 -/* 0EA0D8 7F0B55A8 01EEC021 */ addu $t8, $t7, $t6 -/* 0EA0DC 7F0B55AC 00009025 */ move $s2, $zero -/* 0EA0E0 7F0B55B0 02C08025 */ move $s0, $s6 -/* 0EA0E4 7F0B55B4 E7A8009C */ swc1 $f8, 0x9c($sp) -/* 0EA0E8 7F0B55B8 8F020000 */ lw $v0, ($t8) -/* 0EA0EC 7F0B55BC 90440000 */ lbu $a0, ($v0) -/* 0EA0F0 7F0B55C0 5880004E */ blezl $a0, .L7F0B56FC -/* 0EA0F4 7F0B55C4 4480B000 */ mtc1 $zero, $f22 -/* 0EA0F8 7F0B55C8 3C018006 */ lui $at, %hi(D_80058C7C) -/* 0EA0FC 7F0B55CC 3C148004 */ lui $s4, %hi(room_data_float2) -/* 0EA100 7F0B55D0 4480B000 */ mtc1 $zero, $f22 -/* 0EA104 7F0B55D4 269413F8 */ addiu $s4, %lo(room_data_float2) # addiu $s4, $s4, 0x13f8 -/* 0EA108 7F0B55D8 C4388C7C */ lwc1 $f24, %lo(D_80058C7C)($at) -/* 0EA10C 7F0B55DC 00008825 */ move $s1, $zero -/* 0EA110 7F0B55E0 27B70080 */ addiu $s7, $sp, 0x80 -/* 0EA114 7F0B55E4 0051C821 */ addu $t9, $v0, $s1 -.L7F0B55E8: -/* 0EA118 7F0B55E8 C72A0004 */ lwc1 $f10, 4($t9) -/* 0EA11C 7F0B55EC 4616A032 */ c.eq.s $f20, $f22 -/* 0EA120 7F0B55F0 02E02825 */ move $a1, $s7 -/* 0EA124 7F0B55F4 E60A0000 */ swc1 $f10, ($s0) -/* 0EA128 7F0B55F8 8E680000 */ lw $t0, ($s3) -/* 0EA12C 7F0B55FC 01154821 */ addu $t1, $t0, $s5 -/* 0EA130 7F0B5600 8D2A0000 */ lw $t2, ($t1) -/* 0EA134 7F0B5604 01515821 */ addu $t3, $t2, $s1 -/* 0EA138 7F0B5608 C5720008 */ lwc1 $f18, 8($t3) -/* 0EA13C 7F0B560C E6120004 */ swc1 $f18, 4($s0) -/* 0EA140 7F0B5610 8E6C0000 */ lw $t4, ($s3) -/* 0EA144 7F0B5614 01956821 */ addu $t5, $t4, $s5 -/* 0EA148 7F0B5618 8DAE0000 */ lw $t6, ($t5) -/* 0EA14C 7F0B561C 01D17821 */ addu $t7, $t6, $s1 -/* 0EA150 7F0B5620 C5E4000C */ lwc1 $f4, 0xc($t7) -/* 0EA154 7F0B5624 45010012 */ bc1t .L7F0B5670 -/* 0EA158 7F0B5628 E6040008 */ swc1 $f4, 8($s0) -/* 0EA15C 7F0B562C 0FC2E5B3 */ jal sub_GAME_7F0B96CC -/* 0EA160 7F0B5630 8FA400B0 */ lw $a0, 0xb0($sp) -/* 0EA164 7F0B5634 C7A80080 */ lwc1 $f8, 0x80($sp) -/* 0EA168 7F0B5638 C6060000 */ lwc1 $f6, ($s0) -/* 0EA16C 7F0B563C C6040004 */ lwc1 $f4, 4($s0) -/* 0EA170 7F0B5640 46144282 */ mul.s $f10, $f8, $f20 -/* 0EA174 7F0B5644 460A3480 */ add.s $f18, $f6, $f10 -/* 0EA178 7F0B5648 E6120000 */ swc1 $f18, ($s0) -/* 0EA17C 7F0B564C C7A80084 */ lwc1 $f8, 0x84($sp) -/* 0EA180 7F0B5650 C6120008 */ lwc1 $f18, 8($s0) -/* 0EA184 7F0B5654 46144182 */ mul.s $f6, $f8, $f20 -/* 0EA188 7F0B5658 46062280 */ add.s $f10, $f4, $f6 -/* 0EA18C 7F0B565C E60A0004 */ swc1 $f10, 4($s0) -/* 0EA190 7F0B5660 C7A80088 */ lwc1 $f8, 0x88($sp) -/* 0EA194 7F0B5664 46144102 */ mul.s $f4, $f8, $f20 -/* 0EA198 7F0B5668 46049180 */ add.s $f6, $f18, $f4 -/* 0EA19C 7F0B566C E6060008 */ swc1 $f6, 8($s0) -.L7F0B5670: -/* 0EA1A0 7F0B5670 C60A0000 */ lwc1 $f10, ($s0) -/* 0EA1A4 7F0B5674 C6880000 */ lwc1 $f8, ($s4) -/* 0EA1A8 7F0B5678 C6040004 */ lwc1 $f4, 4($s0) -/* 0EA1AC 7F0B567C 02002825 */ move $a1, $s0 -/* 0EA1B0 7F0B5680 46085482 */ mul.s $f18, $f10, $f8 -/* 0EA1B4 7F0B5684 C6080008 */ lwc1 $f8, 8($s0) -/* 0EA1B8 7F0B5688 E6120000 */ swc1 $f18, ($s0) -/* 0EA1BC 7F0B568C C6860000 */ lwc1 $f6, ($s4) -/* 0EA1C0 7F0B5690 46062282 */ mul.s $f10, $f4, $f6 -/* 0EA1C4 7F0B5694 E60A0004 */ swc1 $f10, 4($s0) -/* 0EA1C8 7F0B5698 C6920000 */ lwc1 $f18, ($s4) -/* 0EA1CC 7F0B569C 46124102 */ mul.s $f4, $f8, $f18 -/* 0EA1D0 7F0B56A0 E6040008 */ swc1 $f4, 8($s0) -/* 0EA1D4 7F0B56A4 0FC1611D */ jal mtx4TransformVecInPlace -/* 0EA1D8 7F0B56A8 8FA400AC */ lw $a0, 0xac($sp) -/* 0EA1DC 7F0B56AC C7A6009C */ lwc1 $f6, 0x9c($sp) -/* 0EA1E0 7F0B56B0 C6120008 */ lwc1 $f18, 8($s0) -/* 0EA1E4 7F0B56B4 46003287 */ neg.s $f10, $f6 -/* 0EA1E8 7F0B56B8 46185202 */ mul.s $f8, $f10, $f24 -/* 0EA1EC 7F0B56BC 4612403C */ c.lt.s $f8, $f18 -/* 0EA1F0 7F0B56C0 00000000 */ nop -/* 0EA1F4 7F0B56C4 45020003 */ bc1fl .L7F0B56D4 -/* 0EA1F8 7F0B56C8 8E780000 */ lw $t8, ($s3) -/* 0EA1FC 7F0B56CC 0000F025 */ move $fp, $zero -/* 0EA200 7F0B56D0 8E780000 */ lw $t8, ($s3) -.L7F0B56D4: -/* 0EA204 7F0B56D4 26520001 */ addiu $s2, $s2, 1 -/* 0EA208 7F0B56D8 2631000C */ addiu $s1, $s1, 0xc -/* 0EA20C 7F0B56DC 0315C821 */ addu $t9, $t8, $s5 -/* 0EA210 7F0B56E0 8F220000 */ lw $v0, ($t9) -/* 0EA214 7F0B56E4 2610000C */ addiu $s0, $s0, 0xc -/* 0EA218 7F0B56E8 90440000 */ lbu $a0, ($v0) -/* 0EA21C 7F0B56EC 0244082A */ slt $at, $s2, $a0 -/* 0EA220 7F0B56F0 5420FFBD */ bnezl $at, .L7F0B55E8 -/* 0EA224 7F0B56F4 0051C821 */ addu $t9, $v0, $s1 -/* 0EA228 7F0B56F8 4480B000 */ mtc1 $zero, $f22 -.L7F0B56FC: -/* 0EA22C 7F0B56FC 13C00003 */ beqz $fp, .L7F0B570C -/* 0EA230 7F0B5700 00803825 */ move $a3, $a0 -/* 0EA234 7F0B5704 10000048 */ b .L7F0B5828 -/* 0EA238 7F0B5708 00001025 */ move $v0, $zero -.L7F0B570C: -/* 0EA23C 7F0B570C 18800045 */ blez $a0, .L7F0B5824 -/* 0EA240 7F0B5710 00009025 */ move $s2, $zero -/* 0EA244 7F0B5714 02C08025 */ move $s0, $s6 -/* 0EA248 7F0B5718 2406000C */ li $a2, 12 -.L7F0B571C: -/* 0EA24C 7F0B571C 26450001 */ addiu $a1, $s2, 1 -/* 0EA250 7F0B5720 00A4001A */ div $zero, $a1, $a0 -/* 0EA254 7F0B5724 C6100008 */ lwc1 $f16, 8($s0) -/* 0EA258 7F0B5728 00001810 */ mfhi $v1 -/* 0EA25C 7F0B572C 00A09025 */ move $s2, $a1 -/* 0EA260 7F0B5730 4610B03C */ c.lt.s $f22, $f16 -/* 0EA264 7F0B5734 14800002 */ bnez $a0, .L7F0B5740 -/* 0EA268 7F0B5738 00000000 */ nop -/* 0EA26C 7F0B573C 0007000D */ break 7 -.L7F0B5740: -/* 0EA270 7F0B5740 2401FFFF */ li $at, -1 -/* 0EA274 7F0B5744 14810004 */ bne $a0, $at, .L7F0B5758 -/* 0EA278 7F0B5748 3C018000 */ lui $at, 0x8000 -/* 0EA27C 7F0B574C 14A10002 */ bne $a1, $at, .L7F0B5758 -/* 0EA280 7F0B5750 00000000 */ nop -/* 0EA284 7F0B5754 0006000D */ break 6 -.L7F0B5758: -/* 0EA288 7F0B5758 4502000A */ bc1fl .L7F0B5784 -/* 0EA28C 7F0B575C 4616803E */ c.le.s $f16, $f22 -/* 0EA290 7F0B5760 00660019 */ multu $v1, $a2 -/* 0EA294 7F0B5764 00004012 */ mflo $t0 -/* 0EA298 7F0B5768 02C81021 */ addu $v0, $s6, $t0 -/* 0EA29C 7F0B576C C44E0008 */ lwc1 $f14, 8($v0) -/* 0EA2A0 7F0B5770 4616703E */ c.le.s $f14, $f22 -/* 0EA2A4 7F0B5774 00000000 */ nop -/* 0EA2A8 7F0B5778 4503000E */ bc1tl .L7F0B57B4 -/* 0EA2AC 7F0B577C 46107181 */ sub.s $f6, $f14, $f16 -/* 0EA2B0 7F0B5780 4616803E */ c.le.s $f16, $f22 -.L7F0B5784: -/* 0EA2B4 7F0B5784 00000000 */ nop -/* 0EA2B8 7F0B5788 45020024 */ bc1fl .L7F0B581C -/* 0EA2BC 7F0B578C 00A4082A */ slt $at, $a1, $a0 -/* 0EA2C0 7F0B5790 00660019 */ multu $v1, $a2 -/* 0EA2C4 7F0B5794 00004812 */ mflo $t1 -/* 0EA2C8 7F0B5798 02C91021 */ addu $v0, $s6, $t1 -/* 0EA2CC 7F0B579C C44E0008 */ lwc1 $f14, 8($v0) -/* 0EA2D0 7F0B57A0 460EB03C */ c.lt.s $f22, $f14 -/* 0EA2D4 7F0B57A4 00000000 */ nop -/* 0EA2D8 7F0B57A8 4502001C */ bc1fl .L7F0B581C -/* 0EA2DC 7F0B57AC 00A4082A */ slt $at, $a1, $a0 -/* 0EA2E0 7F0B57B0 46107181 */ sub.s $f6, $f14, $f16 -.L7F0B57B4: -/* 0EA2E4 7F0B57B4 C6000000 */ lwc1 $f0, ($s0) -/* 0EA2E8 7F0B57B8 C44A0000 */ lwc1 $f10, ($v0) -/* 0EA2EC 7F0B57BC 46008107 */ neg.s $f4, $f16 -/* 0EA2F0 7F0B57C0 00E60019 */ multu $a3, $a2 -/* 0EA2F4 7F0B57C4 46062303 */ div.s $f12, $f4, $f6 -/* 0EA2F8 7F0B57C8 3C0B8008 */ lui $t3, %hi(g_BgPortals) -/* 0EA2FC 7F0B57CC 24E70001 */ addiu $a3, $a3, 1 -/* 0EA300 7F0B57D0 46005201 */ sub.s $f8, $f10, $f0 -/* 0EA304 7F0B57D4 00005012 */ mflo $t2 -/* 0EA308 7F0B57D8 02CA1821 */ addu $v1, $s6, $t2 -/* 0EA30C 7F0B57DC 2463000C */ addiu $v1, $v1, 0xc -/* 0EA310 7F0B57E0 460C4482 */ mul.s $f18, $f8, $f12 -/* 0EA314 7F0B57E4 46009100 */ add.s $f4, $f18, $f0 -/* 0EA318 7F0B57E8 E464FFF4 */ swc1 $f4, -0xc($v1) -/* 0EA31C 7F0B57EC C4460004 */ lwc1 $f6, 4($v0) -/* 0EA320 7F0B57F0 C6020004 */ lwc1 $f2, 4($s0) -/* 0EA324 7F0B57F4 E476FFFC */ swc1 $f22, -4($v1) -/* 0EA328 7F0B57F8 46023281 */ sub.s $f10, $f6, $f2 -/* 0EA32C 7F0B57FC 460C5202 */ mul.s $f8, $f10, $f12 -/* 0EA330 7F0B5800 46024480 */ add.s $f18, $f8, $f2 -/* 0EA334 7F0B5804 E472FFF8 */ swc1 $f18, -8($v1) -/* 0EA338 7F0B5808 8D6BFF80 */ lw $t3, %lo(g_BgPortals)($t3) -/* 0EA33C 7F0B580C 01756021 */ addu $t4, $t3, $s5 -/* 0EA340 7F0B5810 8D8D0000 */ lw $t5, ($t4) -/* 0EA344 7F0B5814 91A40000 */ lbu $a0, ($t5) -/* 0EA348 7F0B5818 00A4082A */ slt $at, $a1, $a0 -.L7F0B581C: -/* 0EA34C 7F0B581C 1420FFBF */ bnez $at, .L7F0B571C -/* 0EA350 7F0B5820 2610000C */ addiu $s0, $s0, 0xc -.L7F0B5824: -/* 0EA354 7F0B5824 00E01025 */ move $v0, $a3 -.L7F0B5828: -/* 0EA358 7F0B5828 8FBF0054 */ lw $ra, 0x54($sp) -/* 0EA35C 7F0B582C D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0EA360 7F0B5830 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0EA364 7F0B5834 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0EA368 7F0B5838 8FB00030 */ lw $s0, 0x30($sp) -/* 0EA36C 7F0B583C 8FB10034 */ lw $s1, 0x34($sp) -/* 0EA370 7F0B5840 8FB20038 */ lw $s2, 0x38($sp) -/* 0EA374 7F0B5844 8FB3003C */ lw $s3, 0x3c($sp) -/* 0EA378 7F0B5848 8FB40040 */ lw $s4, 0x40($sp) -/* 0EA37C 7F0B584C 8FB50044 */ lw $s5, 0x44($sp) -/* 0EA380 7F0B5850 8FB60048 */ lw $s6, 0x48($sp) -/* 0EA384 7F0B5854 8FB7004C */ lw $s7, 0x4c($sp) -/* 0EA388 7F0B5858 8FBE0050 */ lw $fp, 0x50($sp) -/* 0EA38C 7F0B585C 03E00008 */ jr $ra -/* 0EA390 7F0B5860 27BD00B0 */ addiu $sp, $sp, 0xb0 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0B5864(void) { - -} -#else -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B5864 -/* 0EA394 7F0B5864 27BDFE90 */ addiu $sp, $sp, -0x170 -/* 0EA398 7F0B5868 00047080 */ sll $t6, $a0, 2 -/* 0EA39C 7F0B586C 01C47021 */ addu $t6, $t6, $a0 -/* 0EA3A0 7F0B5870 3C0F8008 */ lui $t7, %hi(table_for_portals) -/* 0EA3A4 7F0B5874 AFB5003C */ sw $s5, 0x3c($sp) -/* 0EA3A8 7F0B5878 25EF1618 */ addiu $t7, %lo(table_for_portals) # addiu $t7, $t7, 0x1618 -/* 0EA3AC 7F0B587C 000E7080 */ sll $t6, $t6, 2 -/* 0EA3B0 7F0B5880 01CFA821 */ addu $s5, $t6, $t7 -/* 0EA3B4 7F0B5884 8EB80000 */ lw $t8, ($s5) -/* 0EA3B8 7F0B5888 AFB60040 */ sw $s6, 0x40($sp) -/* 0EA3BC 7F0B588C AFB00028 */ sw $s0, 0x28($sp) -/* 0EA3C0 7F0B5890 00808025 */ move $s0, $a0 -/* 0EA3C4 7F0B5894 00A0B025 */ move $s6, $a1 -/* 0EA3C8 7F0B5898 AFBF0044 */ sw $ra, 0x44($sp) -/* 0EA3CC 7F0B589C AFB40038 */ sw $s4, 0x38($sp) -/* 0EA3D0 7F0B58A0 AFB30034 */ sw $s3, 0x34($sp) -/* 0EA3D4 7F0B58A4 AFB20030 */ sw $s2, 0x30($sp) -/* 0EA3D8 7F0B58A8 AFB1002C */ sw $s1, 0x2c($sp) -/* 0EA3DC 7F0B58AC F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0EA3E0 7F0B58B0 0700000B */ bltz $t8, .L7F0B58E0 -/* 0EA3E4 7F0B58B4 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0EA3E8 7F0B58B8 C6A40004 */ lwc1 $f4, 4($s5) -/* 0EA3EC 7F0B58BC E4A40000 */ swc1 $f4, ($a1) -/* 0EA3F0 7F0B58C0 C6A60008 */ lwc1 $f6, 8($s5) -/* 0EA3F4 7F0B58C4 E4A60004 */ swc1 $f6, 4($a1) -/* 0EA3F8 7F0B58C8 C6A8000C */ lwc1 $f8, 0xc($s5) -/* 0EA3FC 7F0B58CC E4A80008 */ swc1 $f8, 8($a1) -/* 0EA400 7F0B58D0 C6AA0010 */ lwc1 $f10, 0x10($s5) -/* 0EA404 7F0B58D4 E4AA000C */ swc1 $f10, 0xc($a1) -/* 0EA408 7F0B58D8 10000082 */ b .L7F0B5AE4 -/* 0EA40C 7F0B58DC 8EA20000 */ lw $v0, ($s5) -.L7F0B58E0: -/* 0EA410 7F0B58E0 0FC2E664 */ jal sub_GAME_7F0B9990 -/* 0EA414 7F0B58E4 02002025 */ move $a0, $s0 -/* 0EA418 7F0B58E8 27B10080 */ addiu $s1, $sp, 0x80 -/* 0EA41C 7F0B58EC 44050000 */ mfc1 $a1, $f0 -/* 0EA420 7F0B58F0 46000586 */ mov.s $f22, $f0 -/* 0EA424 7F0B58F4 02203025 */ move $a2, $s1 -/* 0EA428 7F0B58F8 0FC2D54A */ jal sub_GAME_7F0B5528 -/* 0EA42C 7F0B58FC 02002025 */ move $a0, $s0 -/* 0EA430 7F0B5900 4480A000 */ mtc1 $zero, $f20 -/* 0EA434 7F0B5904 0002C880 */ sll $t9, $v0, 2 -/* 0EA438 7F0B5908 00409825 */ move $s3, $v0 -/* 0EA43C 7F0B590C 4616A03C */ c.lt.s $f20, $f22 -/* 0EA440 7F0B5910 0322C823 */ subu $t9, $t9, $v0 -/* 0EA444 7F0B5914 02002025 */ move $a0, $s0 -/* 0EA448 7F0B5918 45020008 */ bc1fl .L7F0B593C -/* 0EA44C 7F0B591C 00009025 */ move $s2, $zero -/* 0EA450 7F0B5920 4600B107 */ neg.s $f4, $f22 -/* 0EA454 7F0B5924 0019C880 */ sll $t9, $t9, 2 -/* 0EA458 7F0B5928 44052000 */ mfc1 $a1, $f4 -/* 0EA45C 7F0B592C 0FC2D54A */ jal sub_GAME_7F0B5528 -/* 0EA460 7F0B5930 02393021 */ addu $a2, $s1, $t9 -/* 0EA464 7F0B5934 02629821 */ addu $s3, $s3, $v0 -/* 0EA468 7F0B5938 00009025 */ move $s2, $zero -.L7F0B593C: -/* 0EA46C 7F0B593C 1A600039 */ blez $s3, .L7F0B5A24 -/* 0EA470 7F0B5940 00008825 */ move $s1, $zero -/* 0EA474 7F0B5944 27B00080 */ addiu $s0, $sp, 0x80 -/* 0EA478 7F0B5948 27B40078 */ addiu $s4, $sp, 0x78 -.L7F0B594C: -/* 0EA47C 7F0B594C C6060008 */ lwc1 $f6, 8($s0) -/* 0EA480 7F0B5950 C7AE0074 */ lwc1 $f14, 0x74($sp) -/* 0EA484 7F0B5954 C7B0006C */ lwc1 $f16, 0x6c($sp) -/* 0EA488 7F0B5958 4614303E */ c.le.s $f6, $f20 -/* 0EA48C 7F0B595C C7B20070 */ lwc1 $f18, 0x70($sp) -/* 0EA490 7F0B5960 C7B60068 */ lwc1 $f22, 0x68($sp) -/* 0EA494 7F0B5964 02002025 */ move $a0, $s0 -/* 0EA498 7F0B5968 45020024 */ bc1fl .L7F0B59FC -/* 0EA49C 7F0B596C 26310001 */ addiu $s1, $s1, 1 -/* 0EA4A0 7F0B5970 0FC1E018 */ jal transform3Dto2DWithZScaling -/* 0EA4A4 7F0B5974 02802825 */ move $a1, $s4 -/* 0EA4A8 7F0B5978 16400006 */ bnez $s2, .L7F0B5994 -/* 0EA4AC 7F0B597C C7A20078 */ lwc1 $f2, 0x78($sp) -/* 0EA4B0 7F0B5980 C7B60078 */ lwc1 $f22, 0x78($sp) -/* 0EA4B4 7F0B5984 C7B0007C */ lwc1 $f16, 0x7c($sp) -/* 0EA4B8 7F0B5988 4600B486 */ mov.s $f18, $f22 -/* 0EA4BC 7F0B598C 10000019 */ b .L7F0B59F4 -/* 0EA4C0 7F0B5990 46008386 */ mov.s $f14, $f16 -.L7F0B5994: -/* 0EA4C4 7F0B5994 C7B60068 */ lwc1 $f22, 0x68($sp) -/* 0EA4C8 7F0B5998 C7B20070 */ lwc1 $f18, 0x70($sp) -/* 0EA4CC 7F0B599C C7AC007C */ lwc1 $f12, 0x7c($sp) -/* 0EA4D0 7F0B59A0 4616103C */ c.lt.s $f2, $f22 -/* 0EA4D4 7F0B59A4 C7B0006C */ lwc1 $f16, 0x6c($sp) -/* 0EA4D8 7F0B59A8 C7AE0074 */ lwc1 $f14, 0x74($sp) -/* 0EA4DC 7F0B59AC 45020003 */ bc1fl .L7F0B59BC -/* 0EA4E0 7F0B59B0 4602903C */ c.lt.s $f18, $f2 -/* 0EA4E4 7F0B59B4 46001586 */ mov.s $f22, $f2 -/* 0EA4E8 7F0B59B8 4602903C */ c.lt.s $f18, $f2 -.L7F0B59BC: -/* 0EA4EC 7F0B59BC 00000000 */ nop -/* 0EA4F0 7F0B59C0 45020003 */ bc1fl .L7F0B59D0 -/* 0EA4F4 7F0B59C4 4610603C */ c.lt.s $f12, $f16 -/* 0EA4F8 7F0B59C8 46001486 */ mov.s $f18, $f2 -/* 0EA4FC 7F0B59CC 4610603C */ c.lt.s $f12, $f16 -.L7F0B59D0: -/* 0EA500 7F0B59D0 00000000 */ nop -/* 0EA504 7F0B59D4 45020003 */ bc1fl .L7F0B59E4 -/* 0EA508 7F0B59D8 460C703C */ c.lt.s $f14, $f12 -/* 0EA50C 7F0B59DC 46006406 */ mov.s $f16, $f12 -/* 0EA510 7F0B59E0 460C703C */ c.lt.s $f14, $f12 -.L7F0B59E4: -/* 0EA514 7F0B59E4 00000000 */ nop -/* 0EA518 7F0B59E8 45020003 */ bc1fl .L7F0B59F8 -/* 0EA51C 7F0B59EC 26520001 */ addiu $s2, $s2, 1 -/* 0EA520 7F0B59F0 46006386 */ mov.s $f14, $f12 -.L7F0B59F4: -/* 0EA524 7F0B59F4 26520001 */ addiu $s2, $s2, 1 -.L7F0B59F8: -/* 0EA528 7F0B59F8 26310001 */ addiu $s1, $s1, 1 -.L7F0B59FC: -/* 0EA52C 7F0B59FC 2610000C */ addiu $s0, $s0, 0xc -/* 0EA530 7F0B5A00 E7AE0074 */ swc1 $f14, 0x74($sp) -/* 0EA534 7F0B5A04 E7B0006C */ swc1 $f16, 0x6c($sp) -/* 0EA538 7F0B5A08 E7B20070 */ swc1 $f18, 0x70($sp) -/* 0EA53C 7F0B5A0C 1633FFCF */ bne $s1, $s3, .L7F0B594C -/* 0EA540 7F0B5A10 E7B60068 */ swc1 $f22, 0x68($sp) -/* 0EA544 7F0B5A14 E7AE0074 */ swc1 $f14, 0x74($sp) -/* 0EA548 7F0B5A18 E7B0006C */ swc1 $f16, 0x6c($sp) -/* 0EA54C 7F0B5A1C E7B20070 */ swc1 $f18, 0x70($sp) -/* 0EA550 7F0B5A20 E7B60068 */ swc1 $f22, 0x68($sp) -.L7F0B5A24: -/* 0EA554 7F0B5A24 C7AE0074 */ lwc1 $f14, 0x74($sp) -/* 0EA558 7F0B5A28 C7B0006C */ lwc1 $f16, 0x6c($sp) -/* 0EA55C 7F0B5A2C C7B20070 */ lwc1 $f18, 0x70($sp) -/* 0EA560 7F0B5A30 16400006 */ bnez $s2, .L7F0B5A4C -/* 0EA564 7F0B5A34 C7B60068 */ lwc1 $f22, 0x68($sp) -/* 0EA568 7F0B5A38 E7B40074 */ swc1 $f20, 0x74($sp) -/* 0EA56C 7F0B5A3C E7B4006C */ swc1 $f20, 0x6c($sp) -/* 0EA570 7F0B5A40 E7B40070 */ swc1 $f20, 0x70($sp) -/* 0EA574 7F0B5A44 10000015 */ b .L7F0B5A9C -/* 0EA578 7F0B5A48 E7B40068 */ swc1 $f20, 0x68($sp) -.L7F0B5A4C: -/* 0EA57C 7F0B5A4C 4616903E */ c.le.s $f18, $f22 -/* 0EA580 7F0B5A50 E7AE0074 */ swc1 $f14, 0x74($sp) -/* 0EA584 7F0B5A54 E7B0006C */ swc1 $f16, 0x6c($sp) -/* 0EA588 7F0B5A58 E7B20070 */ swc1 $f18, 0x70($sp) -/* 0EA58C 7F0B5A5C 45010005 */ bc1t .L7F0B5A74 -/* 0EA590 7F0B5A60 E7B60068 */ swc1 $f22, 0x68($sp) -/* 0EA594 7F0B5A64 4610703E */ c.le.s $f14, $f16 -/* 0EA598 7F0B5A68 E7AE0074 */ swc1 $f14, 0x74($sp) -/* 0EA59C 7F0B5A6C E7B0006C */ swc1 $f16, 0x6c($sp) -/* 0EA5A0 7F0B5A70 4500000A */ bc1f .L7F0B5A9C -.L7F0B5A74: -/* 0EA5A4 7F0B5A74 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0EA5A8 7F0B5A78 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0EA5AC 7F0B5A7C C4481118 */ lwc1 $f8, 0x1118($v0) -/* 0EA5B0 7F0B5A80 E7A80068 */ swc1 $f8, 0x68($sp) -/* 0EA5B4 7F0B5A84 C44A111C */ lwc1 $f10, 0x111c($v0) -/* 0EA5B8 7F0B5A88 E7AA006C */ swc1 $f10, 0x6c($sp) -/* 0EA5BC 7F0B5A8C C4441120 */ lwc1 $f4, 0x1120($v0) -/* 0EA5C0 7F0B5A90 E7A40070 */ swc1 $f4, 0x70($sp) -/* 0EA5C4 7F0B5A94 C4461124 */ lwc1 $f6, 0x1124($v0) -/* 0EA5C8 7F0B5A98 E7A60074 */ swc1 $f6, 0x74($sp) -.L7F0B5A9C: -/* 0EA5CC 7F0B5A9C C7A80068 */ lwc1 $f8, 0x68($sp) -/* 0EA5D0 7F0B5AA0 02401025 */ move $v0, $s2 -/* 0EA5D4 7F0B5AA4 E6C80000 */ swc1 $f8, ($s6) -/* 0EA5D8 7F0B5AA8 C7AA006C */ lwc1 $f10, 0x6c($sp) -/* 0EA5DC 7F0B5AAC C6C80000 */ lwc1 $f8, ($s6) -/* 0EA5E0 7F0B5AB0 E6CA0004 */ swc1 $f10, 4($s6) -/* 0EA5E4 7F0B5AB4 C7A40070 */ lwc1 $f4, 0x70($sp) -/* 0EA5E8 7F0B5AB8 E6C40008 */ swc1 $f4, 8($s6) -/* 0EA5EC 7F0B5ABC C7A60074 */ lwc1 $f6, 0x74($sp) -/* 0EA5F0 7F0B5AC0 E6C6000C */ swc1 $f6, 0xc($s6) -/* 0EA5F4 7F0B5AC4 E6A80004 */ swc1 $f8, 4($s5) -/* 0EA5F8 7F0B5AC8 C6CA0004 */ lwc1 $f10, 4($s6) -/* 0EA5FC 7F0B5ACC E6AA0008 */ swc1 $f10, 8($s5) -/* 0EA600 7F0B5AD0 C6C40008 */ lwc1 $f4, 8($s6) -/* 0EA604 7F0B5AD4 E6A4000C */ swc1 $f4, 0xc($s5) -/* 0EA608 7F0B5AD8 C6C6000C */ lwc1 $f6, 0xc($s6) -/* 0EA60C 7F0B5ADC AEB20000 */ sw $s2, ($s5) -/* 0EA610 7F0B5AE0 E6A60010 */ swc1 $f6, 0x10($s5) -.L7F0B5AE4: -/* 0EA614 7F0B5AE4 8FBF0044 */ lw $ra, 0x44($sp) -/* 0EA618 7F0B5AE8 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0EA61C 7F0B5AEC D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0EA620 7F0B5AF0 8FB00028 */ lw $s0, 0x28($sp) -/* 0EA624 7F0B5AF4 8FB1002C */ lw $s1, 0x2c($sp) -/* 0EA628 7F0B5AF8 8FB20030 */ lw $s2, 0x30($sp) -/* 0EA62C 7F0B5AFC 8FB30034 */ lw $s3, 0x34($sp) -/* 0EA630 7F0B5B00 8FB40038 */ lw $s4, 0x38($sp) -/* 0EA634 7F0B5B04 8FB5003C */ lw $s5, 0x3c($sp) -/* 0EA638 7F0B5B08 8FB60040 */ lw $s6, 0x40($sp) -/* 0EA63C 7F0B5B0C 03E00008 */ jr $ra -/* 0EA640 7F0B5B10 27BD0170 */ addiu $sp, $sp, 0x170 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B5864 -/* 0E7590 7F0B4BA0 27BDFE90 */ addiu $sp, $sp, -0x170 -/* 0E7594 7F0B4BA4 00047080 */ sll $t6, $a0, 2 -/* 0E7598 7F0B4BA8 01C47021 */ addu $t6, $t6, $a0 -/* 0E759C 7F0B4BAC 3C0F8007 */ lui $t7, %hi(table_for_portals) # $t7, 0x8007 -/* 0E75A0 7F0B4BB0 AFB5003C */ sw $s5, 0x3c($sp) -/* 0E75A4 7F0B4BB4 25EFBFC0 */ addiu $t7, %lo(table_for_portals) # addiu $t7, $t7, -0x4040 -/* 0E75A8 7F0B4BB8 000E7080 */ sll $t6, $t6, 2 -/* 0E75AC 7F0B4BBC 01CFA821 */ addu $s5, $t6, $t7 -/* 0E75B0 7F0B4BC0 8EB80000 */ lw $t8, ($s5) -/* 0E75B4 7F0B4BC4 AFB60040 */ sw $s6, 0x40($sp) -/* 0E75B8 7F0B4BC8 AFB00028 */ sw $s0, 0x28($sp) -/* 0E75BC 7F0B4BCC 00808025 */ move $s0, $a0 -/* 0E75C0 7F0B4BD0 00A0B025 */ move $s6, $a1 -/* 0E75C4 7F0B4BD4 AFBF0044 */ sw $ra, 0x44($sp) -/* 0E75C8 7F0B4BD8 AFB40038 */ sw $s4, 0x38($sp) -/* 0E75CC 7F0B4BDC AFB30034 */ sw $s3, 0x34($sp) -/* 0E75D0 7F0B4BE0 AFB20030 */ sw $s2, 0x30($sp) -/* 0E75D4 7F0B4BE4 AFB1002C */ sw $s1, 0x2c($sp) -/* 0E75D8 7F0B4BE8 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0E75DC 7F0B4BEC 0700000B */ bltz $t8, .Leu7F0B4C1C -/* 0E75E0 7F0B4BF0 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0E75E4 7F0B4BF4 C6A40004 */ lwc1 $f4, 4($s5) -/* 0E75E8 7F0B4BF8 E4A40000 */ swc1 $f4, ($a1) -/* 0E75EC 7F0B4BFC C6A60008 */ lwc1 $f6, 8($s5) -/* 0E75F0 7F0B4C00 E4A60004 */ swc1 $f6, 4($a1) -/* 0E75F4 7F0B4C04 C6A8000C */ lwc1 $f8, 0xc($s5) -/* 0E75F8 7F0B4C08 E4A80008 */ swc1 $f8, 8($a1) -/* 0E75FC 7F0B4C0C C6AA0010 */ lwc1 $f10, 0x10($s5) -/* 0E7600 7F0B4C10 E4AA000C */ swc1 $f10, 0xc($a1) -/* 0E7604 7F0B4C14 10000082 */ b .L7F0B4E20 -/* 0E7608 7F0B4C18 8EA20000 */ lw $v0, ($s5) -.Leu7F0B4C1C: -/* 0E760C 7F0B4C1C 0FC2E30B */ jal sub_GAME_7F0B9990 -/* 0E7610 7F0B4C20 02002025 */ move $a0, $s0 -/* 0E7614 7F0B4C24 27B10080 */ addiu $s1, $sp, 0x80 -/* 0E7618 7F0B4C28 44050000 */ mfc1 $a1, $f0 -/* 0E761C 7F0B4C2C 46000586 */ mov.s $f22, $f0 -/* 0E7620 7F0B4C30 02203025 */ move $a2, $s1 -/* 0E7624 7F0B4C34 0FC2D219 */ jal sub_GAME_7F0B5528 -/* 0E7628 7F0B4C38 02002025 */ move $a0, $s0 -/* 0E762C 7F0B4C3C 4480A000 */ mtc1 $zero, $f20 -/* 0E7630 7F0B4C40 0002C880 */ sll $t9, $v0, 2 -/* 0E7634 7F0B4C44 00409825 */ move $s3, $v0 -/* 0E7638 7F0B4C48 4616A03C */ c.lt.s $f20, $f22 -/* 0E763C 7F0B4C4C 0322C823 */ subu $t9, $t9, $v0 -/* 0E7640 7F0B4C50 02002025 */ move $a0, $s0 -/* 0E7644 7F0B4C54 45020008 */ bc1fl .L7F0B4C78 -/* 0E7648 7F0B4C58 00009025 */ move $s2, $zero -/* 0E764C 7F0B4C5C 4600B107 */ neg.s $f4, $f22 -/* 0E7650 7F0B4C60 0019C880 */ sll $t9, $t9, 2 -/* 0E7654 7F0B4C64 44052000 */ mfc1 $a1, $f4 -/* 0E7658 7F0B4C68 0FC2D219 */ jal sub_GAME_7F0B5528 -/* 0E765C 7F0B4C6C 02393021 */ addu $a2, $s1, $t9 -/* 0E7660 7F0B4C70 02629821 */ addu $s3, $s3, $v0 -/* 0E7664 7F0B4C74 00009025 */ move $s2, $zero -.L7F0B4C78: -/* 0E7668 7F0B4C78 1A600039 */ blez $s3, .L7F0B4D60 -/* 0E766C 7F0B4C7C 00008825 */ move $s1, $zero -/* 0E7670 7F0B4C80 27B00080 */ addiu $s0, $sp, 0x80 -/* 0E7674 7F0B4C84 27B40078 */ addiu $s4, $sp, 0x78 -.L7F0B4C88: -/* 0E7678 7F0B4C88 C6060008 */ lwc1 $f6, 8($s0) -/* 0E767C 7F0B4C8C C7AE0074 */ lwc1 $f14, 0x74($sp) -/* 0E7680 7F0B4C90 C7B0006C */ lwc1 $f16, 0x6c($sp) -/* 0E7684 7F0B4C94 4614303E */ c.le.s $f6, $f20 -/* 0E7688 7F0B4C98 C7B20070 */ lwc1 $f18, 0x70($sp) -/* 0E768C 7F0B4C9C C7B60068 */ lwc1 $f22, 0x68($sp) -/* 0E7690 7F0B4CA0 02002025 */ move $a0, $s0 -/* 0E7694 7F0B4CA4 45020024 */ bc1fl .L7F0B4D38 -/* 0E7698 7F0B4CA8 26310001 */ addiu $s1, $s1, 1 -/* 0E769C 7F0B4CAC 0FC1E038 */ jal transform3Dto2DWithZScaling -/* 0E76A0 7F0B4CB0 02802825 */ move $a1, $s4 -/* 0E76A4 7F0B4CB4 16400006 */ bnez $s2, .L7F0B4CD0 -/* 0E76A8 7F0B4CB8 C7A20078 */ lwc1 $f2, 0x78($sp) -/* 0E76AC 7F0B4CBC C7B60078 */ lwc1 $f22, 0x78($sp) -/* 0E76B0 7F0B4CC0 C7B0007C */ lwc1 $f16, 0x7c($sp) -/* 0E76B4 7F0B4CC4 4600B486 */ mov.s $f18, $f22 -/* 0E76B8 7F0B4CC8 10000019 */ b .Leu7F0B4D30 -/* 0E76BC 7F0B4CCC 46008386 */ mov.s $f14, $f16 -.L7F0B4CD0: -/* 0E76C0 7F0B4CD0 C7B60068 */ lwc1 $f22, 0x68($sp) -/* 0E76C4 7F0B4CD4 C7B20070 */ lwc1 $f18, 0x70($sp) -/* 0E76C8 7F0B4CD8 C7AC007C */ lwc1 $f12, 0x7c($sp) -/* 0E76CC 7F0B4CDC 4616103C */ c.lt.s $f2, $f22 -/* 0E76D0 7F0B4CE0 C7B0006C */ lwc1 $f16, 0x6c($sp) -/* 0E76D4 7F0B4CE4 C7AE0074 */ lwc1 $f14, 0x74($sp) -/* 0E76D8 7F0B4CE8 45020003 */ bc1fl .L7F0B4CF8 -/* 0E76DC 7F0B4CEC 4602903C */ c.lt.s $f18, $f2 -/* 0E76E0 7F0B4CF0 46001586 */ mov.s $f22, $f2 -/* 0E76E4 7F0B4CF4 4602903C */ c.lt.s $f18, $f2 -.L7F0B4CF8: -/* 0E76E8 7F0B4CF8 00000000 */ nop -/* 0E76EC 7F0B4CFC 45020003 */ bc1fl .L7F0B4D0C -/* 0E76F0 7F0B4D00 4610603C */ c.lt.s $f12, $f16 -/* 0E76F4 7F0B4D04 46001486 */ mov.s $f18, $f2 -/* 0E76F8 7F0B4D08 4610603C */ c.lt.s $f12, $f16 -.L7F0B4D0C: -/* 0E76FC 7F0B4D0C 00000000 */ nop -/* 0E7700 7F0B4D10 45020003 */ bc1fl .L7F0B4D20 -/* 0E7704 7F0B4D14 460C703C */ c.lt.s $f14, $f12 -/* 0E7708 7F0B4D18 46006406 */ mov.s $f16, $f12 -/* 0E770C 7F0B4D1C 460C703C */ c.lt.s $f14, $f12 -.L7F0B4D20: -/* 0E7710 7F0B4D20 00000000 */ nop -/* 0E7714 7F0B4D24 45020003 */ bc1fl .L7F0B4D34 -/* 0E7718 7F0B4D28 26520001 */ addiu $s2, $s2, 1 -/* 0E771C 7F0B4D2C 46006386 */ mov.s $f14, $f12 -.Leu7F0B4D30: -/* 0E7720 7F0B4D30 26520001 */ addiu $s2, $s2, 1 -.L7F0B4D34: -/* 0E7724 7F0B4D34 26310001 */ addiu $s1, $s1, 1 -.L7F0B4D38: -/* 0E7728 7F0B4D38 2610000C */ addiu $s0, $s0, 0xc -/* 0E772C 7F0B4D3C E7AE0074 */ swc1 $f14, 0x74($sp) -/* 0E7730 7F0B4D40 E7B0006C */ swc1 $f16, 0x6c($sp) -/* 0E7734 7F0B4D44 E7B20070 */ swc1 $f18, 0x70($sp) -/* 0E7738 7F0B4D48 1633FFCF */ bne $s1, $s3, .L7F0B4C88 -/* 0E773C 7F0B4D4C E7B60068 */ swc1 $f22, 0x68($sp) -/* 0E7740 7F0B4D50 E7AE0074 */ swc1 $f14, 0x74($sp) -/* 0E7744 7F0B4D54 E7B0006C */ swc1 $f16, 0x6c($sp) -/* 0E7748 7F0B4D58 E7B20070 */ swc1 $f18, 0x70($sp) -/* 0E774C 7F0B4D5C E7B60068 */ swc1 $f22, 0x68($sp) -.L7F0B4D60: -/* 0E7750 7F0B4D60 C7AE0074 */ lwc1 $f14, 0x74($sp) -/* 0E7754 7F0B4D64 C7B0006C */ lwc1 $f16, 0x6c($sp) -/* 0E7758 7F0B4D68 C7B20070 */ lwc1 $f18, 0x70($sp) -/* 0E775C 7F0B4D6C 16400006 */ bnez $s2, .L7F0B4D88 -/* 0E7760 7F0B4D70 C7B60068 */ lwc1 $f22, 0x68($sp) -/* 0E7764 7F0B4D74 E7B40074 */ swc1 $f20, 0x74($sp) -/* 0E7768 7F0B4D78 E7B4006C */ swc1 $f20, 0x6c($sp) -/* 0E776C 7F0B4D7C E7B40070 */ swc1 $f20, 0x70($sp) -/* 0E7770 7F0B4D80 10000015 */ b .Leu7F0B4DD8 -/* 0E7774 7F0B4D84 E7B40068 */ swc1 $f20, 0x68($sp) -.L7F0B4D88: -/* 0E7778 7F0B4D88 4616903E */ c.le.s $f18, $f22 -/* 0E777C 7F0B4D8C E7AE0074 */ swc1 $f14, 0x74($sp) -/* 0E7780 7F0B4D90 E7B0006C */ swc1 $f16, 0x6c($sp) -/* 0E7784 7F0B4D94 E7B20070 */ swc1 $f18, 0x70($sp) -/* 0E7788 7F0B4D98 45010005 */ bc1t .L7F0B4DB0 -/* 0E778C 7F0B4D9C E7B60068 */ swc1 $f22, 0x68($sp) -/* 0E7790 7F0B4DA0 4610703E */ c.le.s $f14, $f16 -/* 0E7794 7F0B4DA4 E7AE0074 */ swc1 $f14, 0x74($sp) -/* 0E7798 7F0B4DA8 E7B0006C */ swc1 $f16, 0x6c($sp) -/* 0E779C 7F0B4DAC 4500000A */ bc1f .Leu7F0B4DD8 -.L7F0B4DB0: -/* 0E77A0 7F0B4DB0 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0E77A4 7F0B4DB4 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0E77A8 7F0B4DB8 C4481110 */ lwc1 $f8, 0x1110($v0) -/* 0E77AC 7F0B4DBC E7A80068 */ swc1 $f8, 0x68($sp) -/* 0E77B0 7F0B4DC0 C44A1114 */ lwc1 $f10, 0x1114($v0) -/* 0E77B4 7F0B4DC4 E7AA006C */ swc1 $f10, 0x6c($sp) -/* 0E77B8 7F0B4DC8 C4441118 */ lwc1 $f4, 0x1118($v0) -/* 0E77BC 7F0B4DCC E7A40070 */ swc1 $f4, 0x70($sp) -/* 0E77C0 7F0B4DD0 C446111C */ lwc1 $f6, 0x111c($v0) -/* 0E77C4 7F0B4DD4 E7A60074 */ swc1 $f6, 0x74($sp) -.Leu7F0B4DD8: -/* 0E77C8 7F0B4DD8 C7A80068 */ lwc1 $f8, 0x68($sp) -/* 0E77CC 7F0B4DDC 02401025 */ move $v0, $s2 -/* 0E77D0 7F0B4DE0 E6C80000 */ swc1 $f8, ($s6) -/* 0E77D4 7F0B4DE4 C7AA006C */ lwc1 $f10, 0x6c($sp) -/* 0E77D8 7F0B4DE8 C6C80000 */ lwc1 $f8, ($s6) -/* 0E77DC 7F0B4DEC E6CA0004 */ swc1 $f10, 4($s6) -/* 0E77E0 7F0B4DF0 C7A40070 */ lwc1 $f4, 0x70($sp) -/* 0E77E4 7F0B4DF4 E6C40008 */ swc1 $f4, 8($s6) -/* 0E77E8 7F0B4DF8 C7A60074 */ lwc1 $f6, 0x74($sp) -/* 0E77EC 7F0B4DFC E6C6000C */ swc1 $f6, 0xc($s6) -/* 0E77F0 7F0B4E00 E6A80004 */ swc1 $f8, 4($s5) -/* 0E77F4 7F0B4E04 C6CA0004 */ lwc1 $f10, 4($s6) -/* 0E77F8 7F0B4E08 E6AA0008 */ swc1 $f10, 8($s5) -/* 0E77FC 7F0B4E0C C6C40008 */ lwc1 $f4, 8($s6) -/* 0E7800 7F0B4E10 E6A4000C */ swc1 $f4, 0xc($s5) -/* 0E7804 7F0B4E14 C6C6000C */ lwc1 $f6, 0xc($s6) -/* 0E7808 7F0B4E18 AEB20000 */ sw $s2, ($s5) -/* 0E780C 7F0B4E1C E6A60010 */ swc1 $f6, 0x10($s5) -.L7F0B4E20: -/* 0E7810 7F0B4E20 8FBF0044 */ lw $ra, 0x44($sp) -/* 0E7814 7F0B4E24 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0E7818 7F0B4E28 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0E781C 7F0B4E2C 8FB00028 */ lw $s0, 0x28($sp) -/* 0E7820 7F0B4E30 8FB1002C */ lw $s1, 0x2c($sp) -/* 0E7824 7F0B4E34 8FB20030 */ lw $s2, 0x30($sp) -/* 0E7828 7F0B4E38 8FB30034 */ lw $s3, 0x34($sp) -/* 0E782C 7F0B4E3C 8FB40038 */ lw $s4, 0x38($sp) -/* 0E7830 7F0B4E40 8FB5003C */ lw $s5, 0x3c($sp) -/* 0E7834 7F0B4E44 8FB60040 */ lw $s6, 0x40($sp) -/* 0E7838 7F0B4E48 03E00008 */ jr $ra -/* 0E783C 7F0B4E4C 27BD0170 */ addiu $sp, $sp, 0x170 -) -#endif -#endif - - - - - -/** - * Unreferenced. - * - * Address 0x7F0B5B14. - */ -Gfx *bgFillRectangle(Gfx *gdl, s32 ulx, s32 uly, s32 lrx, s32 lry) -{ - gDPFillRectangle(gdl++, ulx, uly, lrx + 1, lry + 1); - return gdl; -} - - - - - -/** - * Unreferenced. - */ -void bgFillRectangleWithSides(Gfx *gdl, s32 ulx, s32 uly, s32 lrx, s32 lry) -{ - bgFillRectangle( - bgFillRectangle( - bgFillRectangle( - bgFillRectangle(gdl, - ulx, uly, lrx, uly), /* full rectangle */ - lrx, uly, lrx, lry), /* right side */ - ulx, lry, lrx, lry), /* bottom */ - ulx, uly, ulx, lry); /* top */ -} - - - -/** - * Determines if two rectangles overlap, adjusting first argument to be the intersection. - * - * Returns 0 if no intersection (or edge equality), 1 otherwise. - * - * Address 0x7F0B5BDC. - */ -s32 bgRectIntersect(struct bbox2d *a, struct bbox2d *b) -{ - a->min.x = a->min.x > b->min.x ? a->min.x : b->min.x; - a->min.y = a->min.y > b->min.y ? a->min.y : b->min.y; - a->max.x = b->max.x > a->max.x ? a->max.x : b->max.x; - a->max.y = b->max.y > a->max.y ? a->max.y : b->max.y; - - if (a->min.x >= a->max.x) { - a->min.x = a->max.x; - return FALSE; - } - - if (a->max.y <= a->min.y) { - a->min.y = a->max.y; - return FALSE; - } - - return TRUE; -} - - - - - - -void sub_GAME_7F0B5CC0(struct bbox2d *a, struct bbox2d *b) -{ - (a->min).x = ((a->min).x < (b->min).x) ? (a->min).x : (b->min).x; - (a->min).y = ((a->min).y < (b->min).y) ? (a->min).y : (b->min).y; - (a->max).x = ((a->max).x > (b->max).x) ? (a->max).x : (b->max).x; - (a->max).y = ((a->max).y > (b->max).y) ? (a->max).y : (b->max).y; -} - -void bbox2dCopy(struct bbox2d *a, struct bbox2d *b) -{ - (a->min).x = (b->min).x; - (a->min).y = (b->min).y; - (a->max).x = (b->max).x; - (a->max).y = (b->max).y; -} - - - - - -#ifdef NONMATCHING -char *bgDebPrintPORTALID(s32 portID) -{ - s32 temp_hi = (bgDebPortalOutLineNum + 1) % 0xA; - - bgDebPortalOutLineNum = temp_hi; - sprintf(&bgDebPortalOutBuffer[temp_hi], "PORT%d", portID); - return &bgDebPortalOutBuffer[temp_hi]; -} -#else -GLOBAL_ASM( -.rdata -/*D:80058C48*/ -glabel aPortD -/*"PORT%d"*/ -.word 0x504F5254, 0x25640000 - - - -.text -glabel bgDebPrintPORTALID -/* 0EA8AC 7F0B5D7C 3C028004 */ lui $v0, %hi(bgDebPortalOutLineNum) -/* 0EA8B0 7F0B5D80 8C424860 */ lw $v0, %lo(bgDebPortalOutLineNum)($v0) -/* 0EA8B4 7F0B5D84 2401000A */ li $at, 10 -/* 0EA8B8 7F0B5D88 3C188008 */ lui $t8, %hi(bgDebPortalOutBuffer) -/* 0EA8BC 7F0B5D8C 24420001 */ addiu $v0, $v0, 1 -/* 0EA8C0 7F0B5D90 0041001A */ div $zero, $v0, $at -/* 0EA8C4 7F0B5D94 00007010 */ mfhi $t6 -/* 0EA8C8 7F0B5D98 000E78C0 */ sll $t7, $t6, 3 -/* 0EA8CC 7F0B5D9C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0EA8D0 7F0B5DA0 00803025 */ move $a2, $a0 -/* 0EA8D4 7F0B5DA4 01EE7821 */ addu $t7, $t7, $t6 -/* 0EA8D8 7F0B5DA8 2718C040 */ addiu $t8, %lo(bgDebPortalOutBuffer) # addiu $t8, $t8, -0x3fc0 -/* 0EA8DC 7F0B5DAC AFBF0014 */ sw $ra, 0x14($sp) -/* 0EA8E0 7F0B5DB0 01F82021 */ addu $a0, $t7, $t8 -/* 0EA8E4 7F0B5DB4 3C018004 */ lui $at, %hi(bgDebPortalOutLineNum) -/* 0EA8E8 7F0B5DB8 3C058006 */ lui $a1, %hi(aPortD) -/* 0EA8EC 7F0B5DBC AFA4001C */ sw $a0, 0x1c($sp) -/* 0EA8F0 7F0B5DC0 24A58C48 */ addiu $a1, %lo(aPortD) # addiu $a1, $a1, -0x73b8 -/* 0EA8F4 7F0B5DC4 0C002B25 */ jal sprintf -/* 0EA8F8 7F0B5DC8 AC2E4860 */ sw $t6, %lo(bgDebPortalOutLineNum)($at) -/* 0EA8FC 7F0B5DCC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0EA900 7F0B5DD0 8FA2001C */ lw $v0, 0x1c($sp) -/* 0EA904 7F0B5DD4 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0EA908 7F0B5DD8 03E00008 */ jr $ra -/* 0EA90C 7F0B5DDC 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -// Maching -char *bgDebPrintROOMID(s32 roomId) -{ - static char bgDebRoomOutBuffer[10][9]; - static s32 bgDebRoomOutLineNum; - char* roomIdStr; - - bgDebRoomOutLineNum = (bgDebRoomOutLineNum + 1) % 10; - roomIdStr = bgDebRoomOutBuffer[bgDebRoomOutLineNum]; - - sprintf(roomIdStr, "ROOM%d", roomId); - - return roomIdStr; -} -#else -GLOBAL_ASM( -.rdata -/*D:80058C50*/ -glabel aRoomD -/*"ROOM%d"*/ -.word 0x524F4F4D, 0x25640000 - -.text -glabel bgDebPrintROOMID -/* 0EA910 7F0B5DE0 3C028004 */ lui $v0, %hi(bgDebRoomOutLineNum) -/* 0EA914 7F0B5DE4 8C424864 */ lw $v0, %lo(bgDebRoomOutLineNum)($v0) -/* 0EA918 7F0B5DE8 2401000A */ li $at, 10 -/* 0EA91C 7F0B5DEC 3C188008 */ lui $t8, %hi(bgDebRoomOutBuffer) -/* 0EA920 7F0B5DF0 24420001 */ addiu $v0, $v0, 1 -/* 0EA924 7F0B5DF4 0041001A */ div $zero, $v0, $at -/* 0EA928 7F0B5DF8 00007010 */ mfhi $t6 -/* 0EA92C 7F0B5DFC 000E78C0 */ sll $t7, $t6, 3 -/* 0EA930 7F0B5E00 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0EA934 7F0B5E04 00803025 */ move $a2, $a0 -/* 0EA938 7F0B5E08 01EE7821 */ addu $t7, $t7, $t6 -/* 0EA93C 7F0B5E0C 2718C0A0 */ addiu $t8, %lo(bgDebRoomOutBuffer) # addiu $t8, $t8, -0x3f60 -/* 0EA940 7F0B5E10 AFBF0014 */ sw $ra, 0x14($sp) -/* 0EA944 7F0B5E14 01F82021 */ addu $a0, $t7, $t8 -/* 0EA948 7F0B5E18 3C018004 */ lui $at, %hi(bgDebRoomOutLineNum) -/* 0EA94C 7F0B5E1C 3C058006 */ lui $a1, %hi(aRoomD) -/* 0EA950 7F0B5E20 AFA4001C */ sw $a0, 0x1c($sp) -/* 0EA954 7F0B5E24 24A58C50 */ addiu $a1, %lo(aRoomD) # addiu $a1, $a1, -0x73b0 -/* 0EA958 7F0B5E28 0C002B25 */ jal sprintf -/* 0EA95C 7F0B5E2C AC2E4864 */ sw $t6, %lo(bgDebRoomOutLineNum)($at) -/* 0EA960 7F0B5E30 8FBF0014 */ lw $ra, 0x14($sp) -/* 0EA964 7F0B5E34 8FA2001C */ lw $v0, 0x1c($sp) -/* 0EA968 7F0B5E38 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0EA96C 7F0B5E3C 03E00008 */ jr $ra -/* 0EA970 7F0B5E40 00000000 */ nop -) -#endif - - - - - - -s32 getMaxNumRooms(void) { return g_MaxNumRooms; } + /* * Return butflags0 (confirmed u8) */ @@ -4310,6 +2181,7 @@ u8 getROOMID_isRendered(s32 roomID) return g_BgRoomInfo[roomID].room_rendered; } + /* * Return butflags1 (confirmed u8) */ @@ -4337,183 +2209,28 @@ s32 getIndexOfPORTALID(s32 portalID) } +void roomsHandleStateDebugging(void) +{ + char roomstates[MAXROOMCOUNT + 1]; + s32 roomnum; - -#ifdef NONMATCHING - -void roomsHandleStateDebugging(void) { - ? sp29; - ? temp_ret; - void *phi_v1; - s32 phi_a0; - void *phi_v0; - s32 phi_a0_2; - s32 phi_a0_3; - - // Node 0 - temp_ret = debugIsRoomStateDebugEnabled(); - if (temp_ret != 0) + if (debugIsRoomStateDebugEnabled()) { - // Node 1 - phi_a0_3 = 1; - if (g_MaxNumRooms >= 2) + for (roomnum = 1; roomnum < g_MaxNumRooms; roomnum++) { - // Node 2 - phi_v1 = &g_BgRoomInfo + 0x10 +0x40; - phi_a0 = 1; - phi_v0 = &sp29; -loop_3: - // Node 3 - if (phi_v1->unk2 != 0) + if (g_BgRoomInfo[roomnum].model_bin_loaded) { - // Node 4 - *phi_v0 = (s8) (((s32) phi_a0 % 0xa) + 0x30); - phi_a0_2 = (phi_a0 + 1); + roomstates[roomnum] = (roomnum % 10) + '0'; } else { - // Node 5 - *phi_v0 = (u8)0x2e; - phi_a0_2 = (phi_a0 + 1); - } - // Node 6 - phi_v1 = (phi_v1 + 0x50); - phi_a0 = phi_a0_2; - phi_v0 = (phi_v0 + 1); - phi_a0_3 = phi_a0_2; - if (phi_a0_2 < g_MaxNumRooms) - { - goto loop_3; + roomstates[roomnum] = '.'; } } - // Node 7 - (sp + phi_a0_3)->unk28 = (u8)0; + + roomstates[roomnum] = '\0'; } - // Node 8 - return temp_ret; } -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel roomsHandleStateDebugging -/* 0EAA08 7F0B5ED8 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 0EAA0C 7F0B5EDC AFBF0014 */ sw $ra, 0x14($sp) -/* 0EAA10 7F0B5EE0 0FC243F4 */ jal debugIsRoomStateDebugEnabled -/* 0EAA14 7F0B5EE4 00000000 */ nop -/* 0EAA18 7F0B5EE8 10400024 */ beqz $v0, .L7F0B5F7C -/* 0EAA1C 7F0B5EEC 3C078004 */ lui $a3, %hi(g_MaxNumRooms) -/* 0EAA20 7F0B5EF0 8CE742F4 */ lw $a3, %lo(g_MaxNumRooms)($a3) -/* 0EAA24 7F0B5EF4 3C038004 */ lui $v1, %hi(g_BgRoomInfo + 0x10 +0x40) -/* 0EAA28 7F0B5EF8 24631464 */ addiu $v1, %lo(g_BgRoomInfo + 0x10 +0x40) # addiu $v1, $v1, 0x1464 -/* 0EAA2C 7F0B5EFC 28E10002 */ slti $at, $a3, 2 -/* 0EAA30 7F0B5F00 1420001C */ bnez $at, .L7F0B5F74 -/* 0EAA34 7F0B5F04 24040001 */ li $a0, 1 -/* 0EAA38 7F0B5F08 27A20029 */ addiu $v0, $sp, 0x29 -/* 0EAA3C 7F0B5F0C 2406002E */ li $a2, 46 -/* 0EAA40 7F0B5F10 2405000A */ li $a1, 10 -.L7F0B5F14: -/* 0EAA44 7F0B5F14 906E0002 */ lbu $t6, 2($v1) -/* 0EAA48 7F0B5F18 24630050 */ addiu $v1, $v1, 0x50 -/* 0EAA4C 7F0B5F1C 51C00011 */ beql $t6, $zero, .L7F0B5F64 -/* 0EAA50 7F0B5F20 A0460000 */ sb $a2, ($v0) -/* 0EAA54 7F0B5F24 0085001A */ div $zero, $a0, $a1 -/* 0EAA58 7F0B5F28 00007810 */ mfhi $t7 -/* 0EAA5C 7F0B5F2C 25F80030 */ addiu $t8, $t7, 0x30 -/* 0EAA60 7F0B5F30 14A00002 */ bnez $a1, .L7F0B5F3C -/* 0EAA64 7F0B5F34 00000000 */ nop -/* 0EAA68 7F0B5F38 0007000D */ break 7 -.L7F0B5F3C: -/* 0EAA6C 7F0B5F3C 2401FFFF */ li $at, -1 -/* 0EAA70 7F0B5F40 14A10004 */ bne $a1, $at, .L7F0B5F54 -/* 0EAA74 7F0B5F44 3C018000 */ lui $at, 0x8000 -/* 0EAA78 7F0B5F48 14810002 */ bne $a0, $at, .L7F0B5F54 -/* 0EAA7C 7F0B5F4C 00000000 */ nop -/* 0EAA80 7F0B5F50 0006000D */ break 6 -.L7F0B5F54: -/* 0EAA84 7F0B5F54 A0580000 */ sb $t8, ($v0) -/* 0EAA88 7F0B5F58 10000003 */ b .L7F0B5F68 -/* 0EAA8C 7F0B5F5C 24840001 */ addiu $a0, $a0, 1 -/* 0EAA90 7F0B5F60 A0460000 */ sb $a2, ($v0) -.L7F0B5F64: -/* 0EAA94 7F0B5F64 24840001 */ addiu $a0, $a0, 1 -.L7F0B5F68: -/* 0EAA98 7F0B5F68 0087082A */ slt $at, $a0, $a3 -/* 0EAA9C 7F0B5F6C 1420FFE9 */ bnez $at, .L7F0B5F14 -/* 0EAAA0 7F0B5F70 24420001 */ addiu $v0, $v0, 1 -.L7F0B5F74: -/* 0EAAA4 7F0B5F74 03A4C821 */ addu $t9, $sp, $a0 -/* 0EAAA8 7F0B5F78 A3200028 */ sb $zero, 0x28($t9) -.L7F0B5F7C: -/* 0EAAAC 7F0B5F7C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0EAAB0 7F0B5F80 27BD00C0 */ addiu $sp, $sp, 0xc0 -/* 0EAAB4 7F0B5F84 03E00008 */ jr $ra -/* 0EAAB8 7F0B5F88 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel roomsHandleStateDebugging -/* 0E7C04 7F0B5214 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 0E7C08 7F0B5218 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E7C0C 7F0B521C 0FC2411A */ jal debugIsRoomStateDebugEnabled -/* 0E7C10 7F0B5220 00000000 */ nop -/* 0E7C14 7F0B5224 10400024 */ beqz $v0, .L7F0B52B8 -/* 0E7C18 7F0B5228 3C078004 */ lui $a3, %hi(g_MaxNumRooms) # $a3, 0x8004 -/* 0E7C1C 7F0B522C 8CE7D7D4 */ lw $a3, %lo(g_MaxNumRooms)($a3) -/* 0E7C20 7F0B5230 3C038004 */ lui $v1, %hi(g_BgRoomInfo + 0x10 +0x40) # $v1, 0x8004 -/* 0E7C24 7F0B5234 2463ACB4 */ addiu $v1, %lo(g_BgRoomInfo + 0x10 +0x40) # addiu $v1, $v1, -0x534c -/* 0E7C28 7F0B5238 28E10002 */ slti $at, $a3, 2 -/* 0E7C2C 7F0B523C 1420001C */ bnez $at, .L7F0B52B0 -/* 0E7C30 7F0B5240 24040001 */ li $a0, 1 -/* 0E7C34 7F0B5244 27A2002D */ addiu $v0, $sp, 0x2d -/* 0E7C38 7F0B5248 2406002E */ li $a2, 46 -/* 0E7C3C 7F0B524C 2405000A */ li $a1, 10 -.L7F0B5250: -/* 0E7C40 7F0B5250 906E0002 */ lbu $t6, 2($v1) -/* 0E7C44 7F0B5254 24630050 */ addiu $v1, $v1, 0x50 -/* 0E7C48 7F0B5258 51C00011 */ beql $t6, $zero, .Leu7F0B52A0 -/* 0E7C4C 7F0B525C A0460000 */ sb $a2, ($v0) -/* 0E7C50 7F0B5260 0085001A */ div $zero, $a0, $a1 -/* 0E7C54 7F0B5264 00007810 */ mfhi $t7 -/* 0E7C58 7F0B5268 25F80030 */ addiu $t8, $t7, 0x30 -/* 0E7C5C 7F0B526C 14A00002 */ bnez $a1, .L7F0B5278 -/* 0E7C60 7F0B5270 00000000 */ nop -/* 0E7C64 7F0B5274 0007000D */ break 7 -.L7F0B5278: -/* 0E7C68 7F0B5278 2401FFFF */ li $at, -1 -/* 0E7C6C 7F0B527C 14A10004 */ bne $a1, $at, .L7F0B5290 -/* 0E7C70 7F0B5280 3C018000 */ lui $at, 0x8000 -/* 0E7C74 7F0B5284 14810002 */ bne $a0, $at, .L7F0B5290 -/* 0E7C78 7F0B5288 00000000 */ nop -/* 0E7C7C 7F0B528C 0006000D */ break 6 -.L7F0B5290: -/* 0E7C80 7F0B5290 A0580000 */ sb $t8, ($v0) -/* 0E7C84 7F0B5294 10000003 */ b .L7F0B52A4 -/* 0E7C88 7F0B5298 24840001 */ addiu $a0, $a0, 1 -/* 0E7C8C 7F0B529C A0460000 */ sb $a2, ($v0) -.Leu7F0B52A0: -/* 0E7C90 7F0B52A0 24840001 */ addiu $a0, $a0, 1 -.L7F0B52A4: -/* 0E7C94 7F0B52A4 0087082A */ slt $at, $a0, $a3 -/* 0E7C98 7F0B52A8 1420FFE9 */ bnez $at, .L7F0B5250 -/* 0E7C9C 7F0B52AC 24420001 */ addiu $v0, $v0, 1 -.L7F0B52B0: -/* 0E7CA0 7F0B52B0 03A4C821 */ addu $t9, $sp, $a0 -/* 0E7CA4 7F0B52B4 A320002C */ sb $zero, 0x2c($t9) -.L7F0B52B8: -/* 0E7CA8 7F0B52B8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E7CAC 7F0B52BC 27BD00B8 */ addiu $sp, $sp, 0xb8 -/* 0E7CB0 7F0B52C0 03E00008 */ jr $ra -/* 0E7CB4 7F0B52C4 00000000 */ nop -) -#endif -#endif - - u32 bgDecompress(u8* source, u8 *target) @@ -4523,1229 +2240,379 @@ u32 bgDecompress(u8* source, u8 *target) } - - - -#ifdef NONMATCHING -void* sub_GAME_7F0B5FAC(int roomID, int* data, int size) +/** + * Address: 7F0B5FAC + * + * Load room's compressed vertex table from the bg file, decompress it + * into dst, and store the resulting Vtx buffer in room. + */ +s32 bgLoadRoomVtxData(s32 roomnum, u8 *dst, s32 len) { - void *source; - void* dest; + s_room_info *room; + s32 alignedsize; + s32 offset; + s32 result; - s32 len; - - - - len = g_BgRoomInfo[roomID].csize_point_index_binary + 0xfU & 0xfffffff0; - if (size < len + 0x20) { - dest = -1; + room = &g_BgRoomInfo[roomnum]; + alignedsize = (room->csize_point_index_binary + 0xf) & ~0xf; + if (len < alignedsize + 0x20) { + return -1; } - else { - source = (size - len) + data; - obLoadBGFileBytesAtOffset(levelinfotable[levelentry_index].bg_seg_filename, source, - (ptr_bg_data+ &ptr_bgdata_room_fileposition_list[roomID] - ptr_bg_data) + 0xF1000000, len); - dest = bgDecompress(source,data); - g_BgRoomInfo[roomID].usize_point_index_binary = dest; - g_BgRoomInfo[roomID].ptr_point_index = data; - } - return dest; + + /** + * pPointTableBin is stored as a segment-0x0f bgdata address. + * The seemingly unncessary " + ptr_bg_data - ptr_bg_data" likely comes from paired bgdata pointer/offset macros. + * Adding 0xf1000000 strips the 0x0f000000 segment tag, yielding a file offset. + */ + offset = (((u8 *)ptr_bgdata_room_fileposition_list[roomnum].pPointTableBin + ptr_bg_data) - ptr_bg_data) + 0xf1000000; + obLoadBGFileBytesAtOffset(levelinfotable[levelentry_index].bg_seg_filename, dst + (len - alignedsize), offset, alignedsize); + result = bgDecompress(dst + (len - alignedsize), dst); + + room->vertices = (Vtx *)dst; + room->usize_point_index_binary = result; + + return result; } -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B5FAC -/* 0EAADC 7F0B5FAC 00047880 */ sll $t7, $a0, 2 -/* 0EAAE0 7F0B5FB0 01E47821 */ addu $t7, $t7, $a0 -/* 0EAAE4 7F0B5FB4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) -/* 0EAAE8 7F0B5FB8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 -/* 0EAAEC 7F0B5FBC 000F7900 */ sll $t7, $t7, 4 -/* 0EAAF0 7F0B5FC0 01F81821 */ addu $v1, $t7, $t8 -/* 0EAAF4 7F0B5FC4 8C670010 */ lw $a3, 0x10($v1) -/* 0EAAF8 7F0B5FC8 2401FFF0 */ li $at, -16 -/* 0EAAFC 7F0B5FCC 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0EAB00 7F0B5FD0 24E7000F */ addiu $a3, $a3, 0xf -/* 0EAB04 7F0B5FD4 00E1C824 */ and $t9, $a3, $at -/* 0EAB08 7F0B5FD8 272A0020 */ addiu $t2, $t9, 0x20 -/* 0EAB0C 7F0B5FDC 00CA082A */ slt $at, $a2, $t2 -/* 0EAB10 7F0B5FE0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0EAB14 7F0B5FE4 AFA40030 */ sw $a0, 0x30($sp) -/* 0EAB18 7F0B5FE8 AFA50034 */ sw $a1, 0x34($sp) -/* 0EAB1C 7F0B5FEC AFA60038 */ sw $a2, 0x38($sp) -/* 0EAB20 7F0B5FF0 10200003 */ beqz $at, .L7F0B6000 -/* 0EAB24 7F0B5FF4 03203825 */ move $a3, $t9 -/* 0EAB28 7F0B5FF8 10000024 */ b .L7F0B608C -/* 0EAB2C 7F0B5FFC 2402FFFF */ li $v0, -1 -.L7F0B6000: -/* 0EAB30 7F0B6000 8FAC0030 */ lw $t4, 0x30($sp) -/* 0EAB34 7F0B6004 24080018 */ li $t0, 24 -/* 0EAB38 7F0B6008 3C198004 */ lui $t9, %hi(levelentry_index) -/* 0EAB3C 7F0B600C 01880019 */ multu $t4, $t0 -/* 0EAB40 7F0B6010 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAB44 7F0B6014 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) -/* 0EAB48 7F0B6018 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) -/* 0EAB4C 7F0B601C 3C028008 */ lui $v0, %hi(ptr_bg_data) -/* 0EAB50 7F0B6020 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) -/* 0EAB54 7F0B6024 8FAA0038 */ lw $t2, 0x38($sp) -/* 0EAB58 7F0B6028 3C048004 */ lui $a0, %hi(levelinfotable) -/* 0EAB5C 7F0B602C 3C01F100 */ lui $at, 0xf100 -/* 0EAB60 7F0B6030 01476023 */ subu $t4, $t2, $a3 -/* 0EAB64 7F0B6034 00006812 */ mflo $t5 -/* 0EAB68 7F0B6038 016D7021 */ addu $t6, $t3, $t5 -/* 0EAB6C 7F0B603C 8DCF0000 */ lw $t7, ($t6) -/* 0EAB70 7F0B6040 03280019 */ multu $t9, $t0 -/* 0EAB74 7F0B6044 8FAB0034 */ lw $t3, 0x34($sp) -/* 0EAB78 7F0B6048 01E2C021 */ addu $t8, $t7, $v0 -/* 0EAB7C 7F0B604C 03023023 */ subu $a2, $t8, $v0 -/* 0EAB80 7F0B6050 018B2821 */ addu $a1, $t4, $t3 -/* 0EAB84 7F0B6054 00C13021 */ addu $a2, $a2, $at -/* 0EAB88 7F0B6058 AFA50018 */ sw $a1, 0x18($sp) -/* 0EAB8C 7F0B605C AFA3001C */ sw $v1, 0x1c($sp) -/* 0EAB90 7F0B6060 00004812 */ mflo $t1 -/* 0EAB94 7F0B6064 00892021 */ addu $a0, $a0, $t1 -/* 0EAB98 7F0B6068 0FC2F35F */ jal obLoadBGFileBytesAtOffset -/* 0EAB9C 7F0B606C 8C844490 */ lw $a0, %lo(levelinfotable+4)($a0) -/* 0EABA0 7F0B6070 8FA40018 */ lw $a0, 0x18($sp) -/* 0EABA4 7F0B6074 0FC2D7E3 */ jal bgDecompress -/* 0EABA8 7F0B6078 8FA50034 */ lw $a1, 0x34($sp) -/* 0EABAC 7F0B607C 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EABB0 7F0B6080 8FAD0034 */ lw $t5, 0x34($sp) -/* 0EABB4 7F0B6084 AC62001C */ sw $v0, 0x1c($v1) -/* 0EABB8 7F0B6088 AC6D0004 */ sw $t5, 4($v1) -.L7F0B608C: -/* 0EABBC 7F0B608C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0EABC0 7F0B6090 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0EABC4 7F0B6094 03E00008 */ jr $ra -/* 0EABC8 7F0B6098 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B5FAC -/* 0EAADC 7F0B5FAC 00047880 */ sll $t7, $a0, 2 -/* 0EAAE0 7F0B5FB0 01E47821 */ addu $t7, $t7, $a0 -/* 0EAAE4 7F0B5FB4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) -/* 0EAAE8 7F0B5FB8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 -/* 0EAAEC 7F0B5FBC 000F7900 */ sll $t7, $t7, 4 -/* 0EAAF0 7F0B5FC0 01F81821 */ addu $v1, $t7, $t8 -/* 0EAAF4 7F0B5FC4 8C670010 */ lw $a3, 0x10($v1) -/* 0EAAF8 7F0B5FC8 2401FFF0 */ li $at, -16 -/* 0EAAFC 7F0B5FCC 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0EAB00 7F0B5FD0 24E7000F */ addiu $a3, $a3, 0xf -/* 0EAB04 7F0B5FD4 00E1C824 */ and $t9, $a3, $at -/* 0EAB08 7F0B5FD8 272A0020 */ addiu $t2, $t9, 0x20 -/* 0EAB0C 7F0B5FDC 00CA082A */ slt $at, $a2, $t2 -/* 0EAB10 7F0B5FE0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0EAB14 7F0B5FE4 AFA40030 */ sw $a0, 0x30($sp) -/* 0EAB18 7F0B5FE8 AFA50034 */ sw $a1, 0x34($sp) -/* 0EAB1C 7F0B5FEC AFA60038 */ sw $a2, 0x38($sp) -/* 0EAB20 7F0B5FF0 10200003 */ beqz $at, .L7F0B6000 -/* 0EAB24 7F0B5FF4 03203825 */ move $a3, $t9 -/* 0EAB28 7F0B5FF8 10000024 */ b .L7F0B608C -/* 0EAB2C 7F0B5FFC 2402FFFF */ li $v0, -1 -.L7F0B6000: -/* 0EAB30 7F0B6000 8FAC0030 */ lw $t4, 0x30($sp) -/* 0EAB34 7F0B6004 24080018 */ li $t0, 24 -/* 0EAB38 7F0B6008 3C198004 */ lui $t9, %hi(levelentry_index) -/* 0EAB3C 7F0B600C 01880019 */ multu $t4, $t0 -/* 0EAB40 7F0B6010 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAB44 7F0B6014 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) -/* 0EAB48 7F0B6018 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) -/* 0EAB4C 7F0B601C 3C028008 */ lui $v0, %hi(ptr_bg_data) -/* 0EAB50 7F0B6020 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) -/* 0EAB54 7F0B6024 8FAA0038 */ lw $t2, 0x38($sp) -/* 0EAB58 7F0B6028 3C048004 */ lui $a0, %hi(levelinfotable) -/* 0EAB5C 7F0B602C 3C01F100 */ lui $at, 0xf100 -/* 0EAB60 7F0B6030 01476023 */ subu $t4, $t2, $a3 -/* 0EAB64 7F0B6034 00006812 */ mflo $t5 -/* 0EAB68 7F0B6038 016D7021 */ addu $t6, $t3, $t5 -/* 0EAB6C 7F0B603C 8DCF0000 */ lw $t7, ($t6) -/* 0EAB70 7F0B6040 03280019 */ multu $t9, $t0 -/* 0EAB74 7F0B6044 8FAB0034 */ lw $t3, 0x34($sp) -/* 0EAB78 7F0B6048 01E2C021 */ addu $t8, $t7, $v0 -/* 0EAB7C 7F0B604C 03023023 */ subu $a2, $t8, $v0 -/* 0EAB80 7F0B6050 018B2821 */ addu $a1, $t4, $t3 -/* 0EAB84 7F0B6054 00C13021 */ addu $a2, $a2, $at -/* 0EAB88 7F0B6058 AFA50018 */ sw $a1, 0x18($sp) -/* 0EAB8C 7F0B605C AFA3001C */ sw $v1, 0x1c($sp) -/* 0EAB90 7F0B6060 00004812 */ mflo $t1 -/* 0EAB94 7F0B6064 00892021 */ addu $a0, $a0, $t1 -/* 0EAB98 7F0B6068 0FC2F35F */ jal obLoadBGFileBytesAtOffset -/* 0EAB9C 7F0B606C 8C844490 */ lw $a0, %lo(levelinfotable+4)($a0) -/* 0EABA0 7F0B6070 8FA40018 */ lw $a0, 0x18($sp) -/* 0EABA4 7F0B6074 0FC2D7E3 */ jal bgDecompress -/* 0EABA8 7F0B6078 8FA50034 */ lw $a1, 0x34($sp) -/* 0EABAC 7F0B607C 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EABB0 7F0B6080 8FAD0034 */ lw $t5, 0x34($sp) -/* 0EABB4 7F0B6084 AC62001C */ sw $v0, 0x1c($v1) -/* 0EABB8 7F0B6088 AC6D0004 */ sw $t5, 4($v1) -.L7F0B608C: -/* 0EABBC 7F0B608C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0EABC0 7F0B6090 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0EABC4 7F0B6094 03E00008 */ jr $ra -/* 0EABC8 7F0B6098 00000000 */ nop -) -#endif - -#endif - - - -#ifdef NONMATCHING -u32 * sub_GAME_7F0B609C(int roomID, int *data, u32 size) +/** + * Address: 7F0B609C + * + * Load and decompress a room's primary display list data. + * + * On success, roominfo->ptr_expanded_mapping_info is set to dst, + * and roominfo->usize_primary_DL_binary is set to the returned size. + */ +s32 bgLoadRoomPrimaryGdl(s32 roomnum, u8 *dst, s32 allocsize) { - u32 dest; - u32 puVar1; - u8 *source; - u32 len; + s_room_info *roominfo; + s32 size; + s32 fileoffset; + u8 *scratch; + s32 expanded_size; - len = g_BgRoomInfo[roomID].csize_primary_DL_binary + 0xfU & 0xfffffff0; - if (size < len + 0x20) { - dest = 0xffffffff; - } - else { - source = (size - len) + data; - obLoadBGFileBytesAtOffset - (levelinfotable[levelentry_index].bg_seg_filename,source, - &ptr_bgdata_room_fileposition_list[roomID] + -0xf000000,len); - dest = bgDecompress(source,data); - puVar1 = (size - dest) + data; - texCopyGdls(data,puVar1,dest); - clear_light_fixturetable_in_room(roomID); - puVar1 = texLoadFromGdl(puVar1,dest,data,NULL); - if (dest < puVar1) { - dest = puVar1; + roominfo = &g_BgRoomInfo[roomnum]; + + size = roominfo->csize_primary_DL_binary; + size = (size + 0xf) & ~0xf; // Align to 16 bytes + + /** + * Check if there is enough room to temporarily place the compressed data + * at the end of the available buffer. Return -1 if there's not. + */ + if (allocsize < size + 0x20) { + return -1; } - g_BgRoomInfo[roomID].ptr_expanded_mapping_info = data; - g_BgRoomInfo[roomID].usize_primary_DL_binary = dest; - } - return dest; + + // Load the compressed data into the end of the buffer, starting at dst. + scratch = dst + (allocsize - size); + + fileoffset = (s32)((u8 *)ptr_bgdata_room_fileposition_list[roomnum].pPriMappingBin + ptr_bg_data) - ptr_bg_data; + fileoffset += 0xf1000000; + + obLoadBGFileBytesAtOffset(levelinfotable[levelentry_index].bg_seg_filename, scratch, fileoffset, size); + + // Decompress from the end-of-buffer location at dst. + expanded_size = bgDecompress(scratch, dst); + + /** + * Copy the decompressed GDL back to the end of the buffer as scratch. + * texLoadFromGdl can then read from scratch and write the final + * texture-processed GDL/data back to dst. + */ + scratch = dst + (allocsize - expanded_size); + + texCopyGdls((Gfx *)dst, (Gfx *)scratch, expanded_size); + + clear_light_fixturetable_in_room(roomnum); + + size = texLoadFromGdl((Gfx *)scratch, expanded_size, (Gfx *)dst, NULL); + + if (expanded_size < size) { + expanded_size = size; + } + + roominfo->ptr_expanded_mapping_info = dst; + roominfo->usize_primary_DL_binary = expanded_size; + + // Return the uncompressed data size. + return expanded_size; } -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B609C -/* 0EABCC 7F0B609C 00047880 */ sll $t7, $a0, 2 -/* 0EABD0 7F0B60A0 01E47821 */ addu $t7, $t7, $a0 -/* 0EABD4 7F0B60A4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) -/* 0EABD8 7F0B60A8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 -/* 0EABDC 7F0B60AC 000F7900 */ sll $t7, $t7, 4 -/* 0EABE0 7F0B60B0 01F84021 */ addu $t0, $t7, $t8 -/* 0EABE4 7F0B60B4 8D070014 */ lw $a3, 0x14($t0) -/* 0EABE8 7F0B60B8 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0EABEC 7F0B60BC 2401FFF0 */ li $at, -16 -/* 0EABF0 7F0B60C0 24E7000F */ addiu $a3, $a3, 0xf -/* 0EABF4 7F0B60C4 00E1C824 */ and $t9, $a3, $at -/* 0EABF8 7F0B60C8 272A0020 */ addiu $t2, $t9, 0x20 -/* 0EABFC 7F0B60CC AFB00014 */ sw $s0, 0x14($sp) -/* 0EAC00 7F0B60D0 00CA082A */ slt $at, $a2, $t2 -/* 0EAC04 7F0B60D4 00A08025 */ move $s0, $a1 -/* 0EAC08 7F0B60D8 AFBF001C */ sw $ra, 0x1c($sp) -/* 0EAC0C 7F0B60DC AFB10018 */ sw $s1, 0x18($sp) -/* 0EAC10 7F0B60E0 AFA40038 */ sw $a0, 0x38($sp) -/* 0EAC14 7F0B60E4 AFA60040 */ sw $a2, 0x40($sp) -/* 0EAC18 7F0B60E8 10200003 */ beqz $at, .L7F0B60F8 -/* 0EAC1C 7F0B60EC 03203825 */ move $a3, $t9 -/* 0EAC20 7F0B60F0 10000035 */ b .L7F0B61C8 -/* 0EAC24 7F0B60F4 2402FFFF */ li $v0, -1 -.L7F0B60F8: -/* 0EAC28 7F0B60F8 8FAC0038 */ lw $t4, 0x38($sp) -/* 0EAC2C 7F0B60FC 24030018 */ li $v1, 24 -/* 0EAC30 7F0B6100 3C198004 */ lui $t9, %hi(levelentry_index) -/* 0EAC34 7F0B6104 01830019 */ multu $t4, $v1 -/* 0EAC38 7F0B6108 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAC3C 7F0B610C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) -/* 0EAC40 7F0B6110 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) -/* 0EAC44 7F0B6114 3C028008 */ lui $v0, %hi(ptr_bg_data) -/* 0EAC48 7F0B6118 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) -/* 0EAC4C 7F0B611C 8FAA0040 */ lw $t2, 0x40($sp) -/* 0EAC50 7F0B6120 3C048004 */ lui $a0, %hi(levelinfotable) -/* 0EAC54 7F0B6124 3C01F100 */ lui $at, 0xf100 -/* 0EAC58 7F0B6128 01476023 */ subu $t4, $t2, $a3 -/* 0EAC5C 7F0B612C 00006812 */ mflo $t5 -/* 0EAC60 7F0B6130 016D7021 */ addu $t6, $t3, $t5 -/* 0EAC64 7F0B6134 8DCF0004 */ lw $t7, 4($t6) -/* 0EAC68 7F0B6138 03230019 */ multu $t9, $v1 -/* 0EAC6C 7F0B613C 01908821 */ addu $s1, $t4, $s0 -/* 0EAC70 7F0B6140 01E2C021 */ addu $t8, $t7, $v0 -/* 0EAC74 7F0B6144 03023023 */ subu $a2, $t8, $v0 -/* 0EAC78 7F0B6148 00C13021 */ addu $a2, $a2, $at -/* 0EAC7C 7F0B614C 02202825 */ move $a1, $s1 -/* 0EAC80 7F0B6150 AFA80020 */ sw $t0, 0x20($sp) -/* 0EAC84 7F0B6154 00004812 */ mflo $t1 -/* 0EAC88 7F0B6158 00892021 */ addu $a0, $a0, $t1 -/* 0EAC8C 7F0B615C 0FC2F35F */ jal obLoadBGFileBytesAtOffset -/* 0EAC90 7F0B6160 8C844490 */ lw $a0, %lo(levelinfotable+4)($a0) -/* 0EAC94 7F0B6164 02202025 */ move $a0, $s1 -/* 0EAC98 7F0B6168 0FC2D7E3 */ jal bgDecompress -/* 0EAC9C 7F0B616C 02002825 */ move $a1, $s0 -/* 0EACA0 7F0B6170 8FAB0040 */ lw $t3, 0x40($sp) -/* 0EACA4 7F0B6174 00408825 */ move $s1, $v0 -/* 0EACA8 7F0B6178 02002025 */ move $a0, $s0 -/* 0EACAC 7F0B617C 01626823 */ subu $t5, $t3, $v0 -/* 0EACB0 7F0B6180 01B02821 */ addu $a1, $t5, $s0 -/* 0EACB4 7F0B6184 AFA50028 */ sw $a1, 0x28($sp) -/* 0EACB8 7F0B6188 0FC339E5 */ jal texCopyGdls -/* 0EACBC 7F0B618C 00403025 */ move $a2, $v0 -/* 0EACC0 7F0B6190 0FC2F131 */ jal clear_light_fixturetable_in_room -/* 0EACC4 7F0B6194 8FA40038 */ lw $a0, 0x38($sp) -/* 0EACC8 7F0B6198 8FA40028 */ lw $a0, 0x28($sp) -/* 0EACCC 7F0B619C 02202825 */ move $a1, $s1 -/* 0EACD0 7F0B61A0 02003025 */ move $a2, $s0 -/* 0EACD4 7F0B61A4 0FC33846 */ jal texLoadFromGdl -/* 0EACD8 7F0B61A8 00003825 */ move $a3, $zero -/* 0EACDC 7F0B61AC 0222082A */ slt $at, $s1, $v0 -/* 0EACE0 7F0B61B0 10200002 */ beqz $at, .L7F0B61BC -/* 0EACE4 7F0B61B4 8FA30020 */ lw $v1, 0x20($sp) -/* 0EACE8 7F0B61B8 00408825 */ move $s1, $v0 -.L7F0B61BC: -/* 0EACEC 7F0B61BC AC700008 */ sw $s0, 8($v1) -/* 0EACF0 7F0B61C0 AC710020 */ sw $s1, 0x20($v1) -/* 0EACF4 7F0B61C4 02201025 */ move $v0, $s1 -.L7F0B61C8: -/* 0EACF8 7F0B61C8 8FBF001C */ lw $ra, 0x1c($sp) -/* 0EACFC 7F0B61CC 8FB00014 */ lw $s0, 0x14($sp) -/* 0EAD00 7F0B61D0 8FB10018 */ lw $s1, 0x18($sp) -/* 0EAD04 7F0B61D4 03E00008 */ jr $ra -/* 0EAD08 7F0B61D8 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B609C -/* 0EABCC 7F0B609C 00047880 */ sll $t7, $a0, 2 -/* 0EABD0 7F0B60A0 01E47821 */ addu $t7, $t7, $a0 -/* 0EABD4 7F0B60A4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) -/* 0EABD8 7F0B60A8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 -/* 0EABDC 7F0B60AC 000F7900 */ sll $t7, $t7, 4 -/* 0EABE0 7F0B60B0 01F84021 */ addu $t0, $t7, $t8 -/* 0EABE4 7F0B60B4 8D070014 */ lw $a3, 0x14($t0) -/* 0EABE8 7F0B60B8 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0EABEC 7F0B60BC 2401FFF0 */ li $at, -16 -/* 0EABF0 7F0B60C0 24E7000F */ addiu $a3, $a3, 0xf -/* 0EABF4 7F0B60C4 00E1C824 */ and $t9, $a3, $at -/* 0EABF8 7F0B60C8 272A0020 */ addiu $t2, $t9, 0x20 -/* 0EABFC 7F0B60CC AFB00014 */ sw $s0, 0x14($sp) -/* 0EAC00 7F0B60D0 00CA082A */ slt $at, $a2, $t2 -/* 0EAC04 7F0B60D4 00A08025 */ move $s0, $a1 -/* 0EAC08 7F0B60D8 AFBF001C */ sw $ra, 0x1c($sp) -/* 0EAC0C 7F0B60DC AFB10018 */ sw $s1, 0x18($sp) -/* 0EAC10 7F0B60E0 AFA40038 */ sw $a0, 0x38($sp) -/* 0EAC14 7F0B60E4 AFA60040 */ sw $a2, 0x40($sp) -/* 0EAC18 7F0B60E8 10200003 */ beqz $at, .L7F0B60F8 -/* 0EAC1C 7F0B60EC 03203825 */ move $a3, $t9 -/* 0EAC20 7F0B60F0 10000035 */ b .L7F0B61C8 -/* 0EAC24 7F0B60F4 2402FFFF */ li $v0, -1 -.L7F0B60F8: -/* 0EAC28 7F0B60F8 8FAC0038 */ lw $t4, 0x38($sp) -/* 0EAC2C 7F0B60FC 24030018 */ li $v1, 24 -/* 0EAC30 7F0B6100 3C198004 */ lui $t9, %hi(levelentry_index) -/* 0EAC34 7F0B6104 01830019 */ multu $t4, $v1 -/* 0EAC38 7F0B6108 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAC3C 7F0B610C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) -/* 0EAC40 7F0B6110 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) -/* 0EAC44 7F0B6114 3C028008 */ lui $v0, %hi(ptr_bg_data) -/* 0EAC48 7F0B6118 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) -/* 0EAC4C 7F0B611C 8FAA0040 */ lw $t2, 0x40($sp) -/* 0EAC50 7F0B6120 3C048004 */ lui $a0, %hi(levelinfotable) -/* 0EAC54 7F0B6124 3C01F100 */ lui $at, 0xf100 -/* 0EAC58 7F0B6128 01476023 */ subu $t4, $t2, $a3 -/* 0EAC5C 7F0B612C 00006812 */ mflo $t5 -/* 0EAC60 7F0B6130 016D7021 */ addu $t6, $t3, $t5 -/* 0EAC64 7F0B6134 8DCF0004 */ lw $t7, 4($t6) -/* 0EAC68 7F0B6138 03230019 */ multu $t9, $v1 -/* 0EAC6C 7F0B613C 01908821 */ addu $s1, $t4, $s0 -/* 0EAC70 7F0B6140 01E2C021 */ addu $t8, $t7, $v0 -/* 0EAC74 7F0B6144 03023023 */ subu $a2, $t8, $v0 -/* 0EAC78 7F0B6148 00C13021 */ addu $a2, $a2, $at -/* 0EAC7C 7F0B614C 02202825 */ move $a1, $s1 -/* 0EAC80 7F0B6150 AFA80020 */ sw $t0, 0x20($sp) -/* 0EAC84 7F0B6154 00004812 */ mflo $t1 -/* 0EAC88 7F0B6158 00892021 */ addu $a0, $a0, $t1 -/* 0EAC8C 7F0B615C 0FC2F35F */ jal obLoadBGFileBytesAtOffset -/* 0EAC90 7F0B6160 8C844490 */ lw $a0, %lo(levelinfotable+4)($a0) -/* 0EAC94 7F0B6164 02202025 */ move $a0, $s1 -/* 0EAC98 7F0B6168 0FC2D7E3 */ jal bgDecompress -/* 0EAC9C 7F0B616C 02002825 */ move $a1, $s0 -/* 0EACA0 7F0B6170 8FAB0040 */ lw $t3, 0x40($sp) -/* 0EACA4 7F0B6174 00408825 */ move $s1, $v0 -/* 0EACA8 7F0B6178 02002025 */ move $a0, $s0 -/* 0EACAC 7F0B617C 01626823 */ subu $t5, $t3, $v0 -/* 0EACB0 7F0B6180 01B02821 */ addu $a1, $t5, $s0 -/* 0EACB4 7F0B6184 AFA50028 */ sw $a1, 0x28($sp) -/* 0EACB8 7F0B6188 0FC339E5 */ jal texCopyGdls -/* 0EACBC 7F0B618C 00403025 */ move $a2, $v0 -/* 0EACC0 7F0B6190 0FC2F131 */ jal clear_light_fixturetable_in_room -/* 0EACC4 7F0B6194 8FA40038 */ lw $a0, 0x38($sp) -/* 0EACC8 7F0B6198 8FA40028 */ lw $a0, 0x28($sp) -/* 0EACCC 7F0B619C 02202825 */ move $a1, $s1 -/* 0EACD0 7F0B61A0 02003025 */ move $a2, $s0 -/* 0EACD4 7F0B61A4 0FC33846 */ jal texLoadFromGdl -/* 0EACD8 7F0B61A8 00003825 */ move $a3, $zero -/* 0EACDC 7F0B61AC 0222082A */ slt $at, $s1, $v0 -/* 0EACE0 7F0B61B0 10200002 */ beqz $at, .L7F0B61BC -/* 0EACE4 7F0B61B4 8FA30020 */ lw $v1, 0x20($sp) -/* 0EACE8 7F0B61B8 00408825 */ move $s1, $v0 -.L7F0B61BC: -/* 0EACEC 7F0B61BC AC700008 */ sw $s0, 8($v1) -/* 0EACF0 7F0B61C0 AC710020 */ sw $s1, 0x20($v1) -/* 0EACF4 7F0B61C4 02201025 */ move $v0, $s1 -.L7F0B61C8: -/* 0EACF8 7F0B61C8 8FBF001C */ lw $ra, 0x1c($sp) -/* 0EACFC 7F0B61CC 8FB00014 */ lw $s0, 0x14($sp) -/* 0EAD00 7F0B61D0 8FB10018 */ lw $s1, 0x18($sp) -/* 0EAD04 7F0B61D4 03E00008 */ jr $ra -/* 0EAD08 7F0B61D8 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif - -#endif - - - -#ifdef NONMATCHING -u32 sub_GAME_7F0B61DC(s32 roomID, u32 *data, s32 size) +/** + * Address: 7F0B61DC + * + * Load and decompress a room's secondary display list data. + * + * On success, roominfo->ptr_secondary_expanded_mapping_info is set to dst, + * and roominfo->usize_secondary_DL_binary is set to the returned size. + */ +s32 bgLoadRoomSecondaryGdl(s32 roomnum, u8 *dst, s32 allocsize) { - u32 dest; - u32 puVar1; - u8 *source; - u32 len; + s_room_info *roominfo; + s32 size; + s32 fileoffset; + u8 *scratch; + s32 expanded_size; - len = g_BgRoomInfo[roomID].csize_secondary_DL_binary + 0xfU & 0xfffffff0; - if (size < len + 0x20) - { - dest = 0xffffffff; + roominfo = &g_BgRoomInfo[roomnum]; + + size = roominfo->csize_secondary_DL_binary; + size = (size + 0xf) & ~0xf; // Align to 16 bytes + + /** + * Check if there is enough room to temporarily place the compressed data + * at the end of the available buffer. Return -1 if there's not. + */ + if (allocsize < size + 0x20) { + return -1; } - else - { - source = (size - len) + data; - obLoadBGFileBytesAtOffset(levelinfotable[levelentry_index].bg_seg_filename,source, ptr_bgdata_room_fileposition_list[roomID].pos.z + -0xf000000,len); - dest = bgDecompress(source,data); - puVar1 = (size - dest) + data; - texCopyGdls(data,puVar1,dest); - puVar1 = texLoadFromGdl(puVar1,dest,data,NULL); - if (dest < puVar1) { - dest = puVar1; - } - g_BgRoomInfo[roomID].ptr_secondary_expanded_mapping_info = data; - g_BgRoomInfo[roomID].usize_secondary_DL_binary = dest; + + // Load the compressed data into the end of the buffer, starting at dst. + scratch = dst + (allocsize - size); + + fileoffset = (s32)((u8 *)ptr_bgdata_room_fileposition_list[roomnum].pSecMappingBin + ptr_bg_data) - ptr_bg_data; + fileoffset += 0xf1000000; + + obLoadBGFileBytesAtOffset(levelinfotable[levelentry_index].bg_seg_filename, scratch, fileoffset, size); + + // Decompress from the end-of-buffer location at dst. + expanded_size = bgDecompress(scratch, dst); + + /** + * Copy the decompressed GDL back to the end of the buffer as scratch. + * texLoadFromGdl can then read from scratch and write the final + * texture-processed GDL/data back to dst. + */ + scratch = dst + (allocsize - expanded_size); + + texCopyGdls((Gfx *)dst, (Gfx *)scratch, expanded_size); + + size = texLoadFromGdl((Gfx *)scratch, (Gfx *)expanded_size, (Gfx *)dst, NULL); + + if (expanded_size < size) { + expanded_size = size; } - return dest; + + roominfo->ptr_secondary_expanded_mapping_info = dst; + roominfo->usize_secondary_DL_binary = expanded_size; + + // Return the uncompressed data size. + return expanded_size; } -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B61DC -/* 0EAD0C 7F0B61DC 00047880 */ sll $t7, $a0, 2 -/* 0EAD10 7F0B61E0 01E47821 */ addu $t7, $t7, $a0 -/* 0EAD14 7F0B61E4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) -/* 0EAD18 7F0B61E8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 -/* 0EAD1C 7F0B61EC 000F7900 */ sll $t7, $t7, 4 -/* 0EAD20 7F0B61F0 01F84021 */ addu $t0, $t7, $t8 -/* 0EAD24 7F0B61F4 8D070018 */ lw $a3, 0x18($t0) -/* 0EAD28 7F0B61F8 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0EAD2C 7F0B61FC 2401FFF0 */ li $at, -16 -/* 0EAD30 7F0B6200 24E7000F */ addiu $a3, $a3, 0xf -/* 0EAD34 7F0B6204 00E1C824 */ and $t9, $a3, $at -/* 0EAD38 7F0B6208 272A0020 */ addiu $t2, $t9, 0x20 -/* 0EAD3C 7F0B620C AFB10018 */ sw $s1, 0x18($sp) -/* 0EAD40 7F0B6210 00CA082A */ slt $at, $a2, $t2 -/* 0EAD44 7F0B6214 00A08825 */ move $s1, $a1 -/* 0EAD48 7F0B6218 AFBF001C */ sw $ra, 0x1c($sp) -/* 0EAD4C 7F0B621C AFB00014 */ sw $s0, 0x14($sp) -/* 0EAD50 7F0B6220 AFA40038 */ sw $a0, 0x38($sp) -/* 0EAD54 7F0B6224 AFA60040 */ sw $a2, 0x40($sp) -/* 0EAD58 7F0B6228 10200003 */ beqz $at, .L7F0B6238 -/* 0EAD5C 7F0B622C 03203825 */ move $a3, $t9 -/* 0EAD60 7F0B6230 10000033 */ b .L7F0B6300 -/* 0EAD64 7F0B6234 2402FFFF */ li $v0, -1 -.L7F0B6238: -/* 0EAD68 7F0B6238 8FAC0038 */ lw $t4, 0x38($sp) -/* 0EAD6C 7F0B623C 24030018 */ li $v1, 24 -/* 0EAD70 7F0B6240 3C198004 */ lui $t9, %hi(levelentry_index) -/* 0EAD74 7F0B6244 01830019 */ multu $t4, $v1 -/* 0EAD78 7F0B6248 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAD7C 7F0B624C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) -/* 0EAD80 7F0B6250 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) -/* 0EAD84 7F0B6254 3C028008 */ lui $v0, %hi(ptr_bg_data) -/* 0EAD88 7F0B6258 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) -/* 0EAD8C 7F0B625C 8FAA0040 */ lw $t2, 0x40($sp) -/* 0EAD90 7F0B6260 3C048004 */ lui $a0, %hi(levelinfotable) -/* 0EAD94 7F0B6264 3C01F100 */ lui $at, 0xf100 -/* 0EAD98 7F0B6268 01476023 */ subu $t4, $t2, $a3 -/* 0EAD9C 7F0B626C 00006812 */ mflo $t5 -/* 0EADA0 7F0B6270 016D7021 */ addu $t6, $t3, $t5 -/* 0EADA4 7F0B6274 8DCF0008 */ lw $t7, 8($t6) -/* 0EADA8 7F0B6278 03230019 */ multu $t9, $v1 -/* 0EADAC 7F0B627C 01918021 */ addu $s0, $t4, $s1 -/* 0EADB0 7F0B6280 01E2C021 */ addu $t8, $t7, $v0 -/* 0EADB4 7F0B6284 03023023 */ subu $a2, $t8, $v0 -/* 0EADB8 7F0B6288 00C13021 */ addu $a2, $a2, $at -/* 0EADBC 7F0B628C 02002825 */ move $a1, $s0 -/* 0EADC0 7F0B6290 AFA80020 */ sw $t0, 0x20($sp) -/* 0EADC4 7F0B6294 00004812 */ mflo $t1 -/* 0EADC8 7F0B6298 00892021 */ addu $a0, $a0, $t1 -/* 0EADCC 7F0B629C 0FC2F35F */ jal obLoadBGFileBytesAtOffset -/* 0EADD0 7F0B62A0 8C844490 */ lw $a0, %lo(levelinfotable+4)($a0) -/* 0EADD4 7F0B62A4 02002025 */ move $a0, $s0 -/* 0EADD8 7F0B62A8 0FC2D7E3 */ jal bgDecompress -/* 0EADDC 7F0B62AC 02202825 */ move $a1, $s1 -/* 0EADE0 7F0B62B0 8FAB0040 */ lw $t3, 0x40($sp) -/* 0EADE4 7F0B62B4 00408025 */ move $s0, $v0 -/* 0EADE8 7F0B62B8 02202025 */ move $a0, $s1 -/* 0EADEC 7F0B62BC 01626823 */ subu $t5, $t3, $v0 -/* 0EADF0 7F0B62C0 01B12821 */ addu $a1, $t5, $s1 -/* 0EADF4 7F0B62C4 AFA50028 */ sw $a1, 0x28($sp) -/* 0EADF8 7F0B62C8 0FC339E5 */ jal texCopyGdls -/* 0EADFC 7F0B62CC 00403025 */ move $a2, $v0 -/* 0EAE00 7F0B62D0 8FA40028 */ lw $a0, 0x28($sp) -/* 0EAE04 7F0B62D4 02002825 */ move $a1, $s0 -/* 0EAE08 7F0B62D8 02203025 */ move $a2, $s1 -/* 0EAE0C 7F0B62DC 0FC33846 */ jal texLoadFromGdl -/* 0EAE10 7F0B62E0 00003825 */ move $a3, $zero -/* 0EAE14 7F0B62E4 0202082A */ slt $at, $s0, $v0 -/* 0EAE18 7F0B62E8 10200002 */ beqz $at, .L7F0B62F4 -/* 0EAE1C 7F0B62EC 8FA30020 */ lw $v1, 0x20($sp) -/* 0EAE20 7F0B62F0 00408025 */ move $s0, $v0 -.L7F0B62F4: -/* 0EAE24 7F0B62F4 AC71000C */ sw $s1, 0xc($v1) -/* 0EAE28 7F0B62F8 AC700024 */ sw $s0, 0x24($v1) -/* 0EAE2C 7F0B62FC 02001025 */ move $v0, $s0 -.L7F0B6300: -/* 0EAE30 7F0B6300 8FBF001C */ lw $ra, 0x1c($sp) -/* 0EAE34 7F0B6304 8FB00014 */ lw $s0, 0x14($sp) -/* 0EAE38 7F0B6308 8FB10018 */ lw $s1, 0x18($sp) -/* 0EAE3C 7F0B630C 03E00008 */ jr $ra -/* 0EAE40 7F0B6310 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B61DC -/* 0EAD0C 7F0B61DC 00047880 */ sll $t7, $a0, 2 -/* 0EAD10 7F0B61E0 01E47821 */ addu $t7, $t7, $a0 -/* 0EAD14 7F0B61E4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) -/* 0EAD18 7F0B61E8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 -/* 0EAD1C 7F0B61EC 000F7900 */ sll $t7, $t7, 4 -/* 0EAD20 7F0B61F0 01F84021 */ addu $t0, $t7, $t8 -/* 0EAD24 7F0B61F4 8D070018 */ lw $a3, 0x18($t0) -/* 0EAD28 7F0B61F8 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0EAD2C 7F0B61FC 2401FFF0 */ li $at, -16 -/* 0EAD30 7F0B6200 24E7000F */ addiu $a3, $a3, 0xf -/* 0EAD34 7F0B6204 00E1C824 */ and $t9, $a3, $at -/* 0EAD38 7F0B6208 272A0020 */ addiu $t2, $t9, 0x20 -/* 0EAD3C 7F0B620C AFB10018 */ sw $s1, 0x18($sp) -/* 0EAD40 7F0B6210 00CA082A */ slt $at, $a2, $t2 -/* 0EAD44 7F0B6214 00A08825 */ move $s1, $a1 -/* 0EAD48 7F0B6218 AFBF001C */ sw $ra, 0x1c($sp) -/* 0EAD4C 7F0B621C AFB00014 */ sw $s0, 0x14($sp) -/* 0EAD50 7F0B6220 AFA40038 */ sw $a0, 0x38($sp) -/* 0EAD54 7F0B6224 AFA60040 */ sw $a2, 0x40($sp) -/* 0EAD58 7F0B6228 10200003 */ beqz $at, .L7F0B6238 -/* 0EAD5C 7F0B622C 03203825 */ move $a3, $t9 -/* 0EAD60 7F0B6230 10000033 */ b .L7F0B6300 -/* 0EAD64 7F0B6234 2402FFFF */ li $v0, -1 -.L7F0B6238: -/* 0EAD68 7F0B6238 8FAC0038 */ lw $t4, 0x38($sp) -/* 0EAD6C 7F0B623C 24030018 */ li $v1, 24 -/* 0EAD70 7F0B6240 3C198004 */ lui $t9, %hi(levelentry_index) -/* 0EAD74 7F0B6244 01830019 */ multu $t4, $v1 -/* 0EAD78 7F0B6248 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAD7C 7F0B624C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) -/* 0EAD80 7F0B6250 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) -/* 0EAD84 7F0B6254 3C028008 */ lui $v0, %hi(ptr_bg_data) -/* 0EAD88 7F0B6258 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) -/* 0EAD8C 7F0B625C 8FAA0040 */ lw $t2, 0x40($sp) -/* 0EAD90 7F0B6260 3C048004 */ lui $a0, %hi(levelinfotable) -/* 0EAD94 7F0B6264 3C01F100 */ lui $at, 0xf100 -/* 0EAD98 7F0B6268 01476023 */ subu $t4, $t2, $a3 -/* 0EAD9C 7F0B626C 00006812 */ mflo $t5 -/* 0EADA0 7F0B6270 016D7021 */ addu $t6, $t3, $t5 -/* 0EADA4 7F0B6274 8DCF0008 */ lw $t7, 8($t6) -/* 0EADA8 7F0B6278 03230019 */ multu $t9, $v1 -/* 0EADAC 7F0B627C 01918021 */ addu $s0, $t4, $s1 -/* 0EADB0 7F0B6280 01E2C021 */ addu $t8, $t7, $v0 -/* 0EADB4 7F0B6284 03023023 */ subu $a2, $t8, $v0 -/* 0EADB8 7F0B6288 00C13021 */ addu $a2, $a2, $at -/* 0EADBC 7F0B628C 02002825 */ move $a1, $s0 -/* 0EADC0 7F0B6290 AFA80020 */ sw $t0, 0x20($sp) -/* 0EADC4 7F0B6294 00004812 */ mflo $t1 -/* 0EADC8 7F0B6298 00892021 */ addu $a0, $a0, $t1 -/* 0EADCC 7F0B629C 0FC2F35F */ jal obLoadBGFileBytesAtOffset -/* 0EADD0 7F0B62A0 8C844490 */ lw $a0, %lo(levelinfotable+4)($a0) -/* 0EADD4 7F0B62A4 02002025 */ move $a0, $s0 -/* 0EADD8 7F0B62A8 0FC2D7E3 */ jal bgDecompress -/* 0EADDC 7F0B62AC 02202825 */ move $a1, $s1 -/* 0EADE0 7F0B62B0 8FAB0040 */ lw $t3, 0x40($sp) -/* 0EADE4 7F0B62B4 00408025 */ move $s0, $v0 -/* 0EADE8 7F0B62B8 02202025 */ move $a0, $s1 -/* 0EADEC 7F0B62BC 01626823 */ subu $t5, $t3, $v0 -/* 0EADF0 7F0B62C0 01B12821 */ addu $a1, $t5, $s1 -/* 0EADF4 7F0B62C4 AFA50028 */ sw $a1, 0x28($sp) -/* 0EADF8 7F0B62C8 0FC339E5 */ jal texCopyGdls -/* 0EADFC 7F0B62CC 00403025 */ move $a2, $v0 -/* 0EAE00 7F0B62D0 8FA40028 */ lw $a0, 0x28($sp) -/* 0EAE04 7F0B62D4 02002825 */ move $a1, $s0 -/* 0EAE08 7F0B62D8 02203025 */ move $a2, $s1 -/* 0EAE0C 7F0B62DC 0FC33846 */ jal texLoadFromGdl -/* 0EAE10 7F0B62E0 00003825 */ move $a3, $zero -/* 0EAE14 7F0B62E4 0202082A */ slt $at, $s0, $v0 -/* 0EAE18 7F0B62E8 10200002 */ beqz $at, .L7F0B62F4 -/* 0EAE1C 7F0B62EC 8FA30020 */ lw $v1, 0x20($sp) -/* 0EAE20 7F0B62F0 00408025 */ move $s0, $v0 -.L7F0B62F4: -/* 0EAE24 7F0B62F4 AC71000C */ sw $s1, 0xc($v1) -/* 0EAE28 7F0B62F8 AC700024 */ sw $s0, 0x24($v1) -/* 0EAE2C 7F0B62FC 02001025 */ move $v0, $s0 -.L7F0B6300: -/* 0EAE30 7F0B6300 8FBF001C */ lw $ra, 0x1c($sp) -/* 0EAE34 7F0B6304 8FB00014 */ lw $s0, 0x14($sp) -/* 0EAE38 7F0B6308 8FB10018 */ lw $s1, 0x18($sp) -/* 0EAE3C 7F0B630C 03E00008 */ jr $ra -/* 0EAE40 7F0B6310 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif - -#endif - - - s32 bgCheckIfRoomModelNeedsLoad(s32 roomID) { g_BgRoomInfo[roomID].field_35 = 1; - if (g_BgRoomInfo[roomID].model_bin_loaded == FALSE) + if (g_BgRoomInfo[roomID].model_bin_loaded == 0) { - sub_GAME_7F0B6368(roomID); + bgLoadRoomModelData(roomID); return 1; } return 0; } - - - -#ifdef NONMATCHING /* * Allocates memory for room and update its display lists +* +* When a room is first allocated, the game will pick the largest block +* available. It doesn't know the size of the decompressed asset as its +* size is not stored as part of the GZIP format. It will then shrink +* the allocated block to the correct size. The size is cached for the +* next time the room is reloaded. +* * Address: 7F0B6368 */ -void sub_GAME_7F0B6368(s32 room) { - void *sp1C; - s32 sp20; - s32 sp28; - s32 sp2C; - void *temp_v1; - ? temp_ret; - void *temp_v1_2; - ? temp_ret_2; - ? temp_ret_3; - void *temp_v1_5; - ? temp_ret_4; - void *temp_v1_6; - s32 temp_t1; - s32 temp_a0; - void *temp_v1_3; - s32 temp_a0_2; - void *temp_v1_4; - void *phi_v1; - s32 phi_a3; - s32 phi_a3_2; - void *phi_v1_2; - void *phi_v1_3; +void bgLoadRoomModelData(s32 roomID) +{ + /* + * Keep this prototype visible here for IDO codegen. + * Without it, the memaRealloc call below schedules a2 too early. + */ + s32 memaRealloc(s32 addr, u32 oldsize, u32 newsize); - // Node 0 - if (room < g_MaxNumRooms) + s32 allocsize; + s32 used; + s32 result; + u8 *data; + + used = 0; + + // Room ID is out of range? + if (roomID >= g_MaxNumRooms) goto end; + + // Room is already loaded? + if (g_BgRoomInfo[roomID].model_bin_loaded) goto end; + + // Get the cached file size. Is zero when the size is not yet known. + allocsize = g_BgRoomInfo[roomID].cur_room_totalsize; + + if (allocsize > 0) { - // Node 1 - temp_v1 = ((room * 0x50) + &g_BgRoomInfo); - if (temp_v1->unk2 == 0) + // Unknown debug code + if (get_debug_joy2detailedit_flag()) { - // Node 2 - if (temp_v1->unk28 > 0) - { - // Node 3 - sp2C = (s32) temp_v1->unk28; - sp1C = temp_v1; - sp28 = 0; - if (get_debug_joy2detailedit_flag(0) != 0) - { - // Node 4 - sp2C = (s32) (sp2C + 0x400); - } - } - else - { - // Node 5 - sp1C = temp_v1; - sp2C = memaGetLongestFree(0); - } - // Node 6 - sp1C = (void *) temp_v1; - temp_ret = memaAlloc(sp2C, sp28); - temp_v1_2 = temp_v1; - sp20 = temp_ret; - if (temp_ret != 0) - { - // Node 7 - if (temp_v1_2->unk10 != 0) - { - // Node 8 - sp1C = temp_v1_2; - temp_ret_2 = sub_GAME_7F0B5FAC(room, temp_ret, sp2C, sp28); - if (temp_ret_2 >= 0) - { - // Node 9 - sp1C = temp_v1_2; - sp28 = temp_ret_2; - redarken_lights_in_room(room, sp28); - } - } - else - { - // Node 10 - temp_v1_2->unk4 = 0; - temp_v1_2->unk1C = 0; - } - // Node 11 - phi_v1 = temp_v1_2; - phi_a3 = sp28; - if (temp_v1_2->unk14 != 0) - { - // Node 12 - sp1C = (void *) temp_v1_2; - temp_ret_3 = sub_GAME_7F0B609C(room, (sp20 + sp28), (sp2C - sp28), sp28); - temp_v1_5 = temp_v1_2; - phi_v1 = temp_v1_5; - phi_a3 = sp28; - if (temp_ret_3 >= 0) - { - // Node 13 - phi_v1 = temp_v1_5; - phi_a3 = (sp28 + temp_ret_3); - } - } - // Node 14 - if (phi_v1->unk18 != 0) - { - // Node 15 - sp1C = (void *) phi_v1; - temp_ret_4 = sub_GAME_7F0B61DC(room, (sp20 + phi_a3), (sp2C - phi_a3), phi_a3); - temp_v1_6 = phi_v1; - phi_a3_2 = sp28; - phi_v1_2 = temp_v1_6; - if (temp_ret_4 > 0) - { - // Node 16 - phi_a3_2 = (sp28 + temp_ret_4); - phi_v1_2 = temp_v1_6; - } - } - else - { - // Node 17 - phi_v1->unkC = 0; - phi_a3_2 = phi_a3; - phi_v1_2 = phi_v1; - } - // Node 18 - temp_t1 = ((phi_a3_2 + 0x20) & -0x10); - phi_v1_2->unk28 = temp_t1; - phi_v1_2->unk2 = (u8)1; - phi_v1_3 = phi_v1_2; - if (sp2C != temp_t1) - { - // Node 19 - sp1C = (void *) phi_v1_2; - memaRealloc(sp20, sp2C, temp_t1, phi_a3_2); - phi_v1_3 = phi_v1_2; - } - // Node 20 - if (g_FogSkyIsEnabled != 0) - { - // Node 21 - temp_a0 = phi_v1_3->unk8; - sp1C = (void *) phi_v1_3; - bgApplyDynamicCCRMLUT(temp_a0, (phi_v1_3->unk20 + temp_a0), CCRMLUT_PRIMARY_ADDFOG); - temp_v1_3 = phi_v1_3; - if (temp_v1_3->unkC != 0) - { - // Node 22 - bgApplyDynamicCCRMLUT(temp_v1_3->unkC, (temp_v1_3->unk24 + temp_v1_3->unkC), CCRMLUT_SECONDARY_ADDFOG); - } - } - else - { - // Node 23 - temp_a0_2 = phi_v1_3->unk8; - sp1C = (void *) phi_v1_3; - bgApplyDynamicCCRMLUT(temp_a0_2, (phi_v1_3->unk20 + temp_a0_2), CCRMLUT_PRIMARY); - temp_v1_4 = phi_v1_3; - if (temp_v1_4->unkC != 0) - { - // Node 24 - bgApplyDynamicCCRMLUT(temp_v1_4->unkC, (temp_v1_4->unk24 + temp_v1_4->unkC), CCRMLUT_SECONDARY); - } - } - // Node 25 - sub_GAME_7F0B6994(room); - roomsHandleStateDebugging(); - } + allocsize += 0x400; } } - // Node 26 - return; -} -#else -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B6368 -/* 0EAE98 7F0B6368 3C0F8004 */ lui $t7, %hi(g_MaxNumRooms) -/* 0EAE9C 7F0B636C 8DEF42F4 */ lw $t7, %lo(g_MaxNumRooms)($t7) -/* 0EAEA0 7F0B6370 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0EAEA4 7F0B6374 AFBF0014 */ sw $ra, 0x14($sp) -/* 0EAEA8 7F0B6378 008F082A */ slt $at, $a0, $t7 -/* 0EAEAC 7F0B637C AFA40030 */ sw $a0, 0x30($sp) -/* 0EAEB0 7F0B6380 1020008C */ beqz $at, .L7F0B65B4 -/* 0EAEB4 7F0B6384 00003825 */ move $a3, $zero -/* 0EAEB8 7F0B6388 0004C880 */ sll $t9, $a0, 2 -/* 0EAEBC 7F0B638C 0324C821 */ addu $t9, $t9, $a0 -/* 0EAEC0 7F0B6390 3C088004 */ lui $t0, %hi(g_BgRoomInfo) -/* 0EAEC4 7F0B6394 25081414 */ addiu $t0, %lo(g_BgRoomInfo) # addiu $t0, $t0, 0x1414 -/* 0EAEC8 7F0B6398 0019C900 */ sll $t9, $t9, 4 -/* 0EAECC 7F0B639C 03281821 */ addu $v1, $t9, $t0 -/* 0EAED0 7F0B63A0 90690002 */ lbu $t1, 2($v1) -/* 0EAED4 7F0B63A4 55200084 */ bnezl $t1, .L7F0B65B8 -/* 0EAED8 7F0B63A8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0EAEDC 7F0B63AC 8C620028 */ lw $v0, 0x28($v1) -/* 0EAEE0 7F0B63B0 5840000D */ blezl $v0, .L7F0B63E8 -/* 0EAEE4 7F0B63B4 AFA3001C */ sw $v1, 0x1c($sp) -/* 0EAEE8 7F0B63B8 AFA2002C */ sw $v0, 0x2c($sp) -/* 0EAEEC 7F0B63BC AFA3001C */ sw $v1, 0x1c($sp) -/* 0EAEF0 7F0B63C0 0FC243EE */ jal get_debug_joy2detailedit_flag -/* 0EAEF4 7F0B63C4 AFA00028 */ sw $zero, 0x28($sp) -/* 0EAEF8 7F0B63C8 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EAEFC 7F0B63CC 1040000B */ beqz $v0, .L7F0B63FC -/* 0EAF00 7F0B63D0 8FA70028 */ lw $a3, 0x28($sp) -/* 0EAF04 7F0B63D4 8FAA002C */ lw $t2, 0x2c($sp) -/* 0EAF08 7F0B63D8 254B0400 */ addiu $t3, $t2, 0x400 -/* 0EAF0C 7F0B63DC 10000007 */ b .L7F0B63FC -/* 0EAF10 7F0B63E0 AFAB002C */ sw $t3, 0x2c($sp) -/* 0EAF14 7F0B63E4 AFA3001C */ sw $v1, 0x1c($sp) -.L7F0B63E8: -/* 0EAF18 7F0B63E8 0C0028DC */ jal memaGetLongestFree -/* 0EAF1C 7F0B63EC AFA70028 */ sw $a3, 0x28($sp) -/* 0EAF20 7F0B63F0 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EAF24 7F0B63F4 8FA70028 */ lw $a3, 0x28($sp) -/* 0EAF28 7F0B63F8 AFA2002C */ sw $v0, 0x2c($sp) -.L7F0B63FC: -/* 0EAF2C 7F0B63FC 8FA4002C */ lw $a0, 0x2c($sp) -/* 0EAF30 7F0B6400 AFA3001C */ sw $v1, 0x1c($sp) -/* 0EAF34 7F0B6404 0C00278D */ jal memaAlloc -/* 0EAF38 7F0B6408 AFA70028 */ sw $a3, 0x28($sp) -/* 0EAF3C 7F0B640C 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EAF40 7F0B6410 8FA70028 */ lw $a3, 0x28($sp) -/* 0EAF44 7F0B6414 10400067 */ beqz $v0, .L7F0B65B4 -/* 0EAF48 7F0B6418 AFA20020 */ sw $v0, 0x20($sp) -/* 0EAF4C 7F0B641C 8C6C0010 */ lw $t4, 0x10($v1) -/* 0EAF50 7F0B6420 8FA40030 */ lw $a0, 0x30($sp) -/* 0EAF54 7F0B6424 00402825 */ move $a1, $v0 -/* 0EAF58 7F0B6428 1180000E */ beqz $t4, .L7F0B6464 -/* 0EAF5C 7F0B642C 8FA6002C */ lw $a2, 0x2c($sp) -/* 0EAF60 7F0B6430 AFA3001C */ sw $v1, 0x1c($sp) -/* 0EAF64 7F0B6434 0FC2D7EB */ jal sub_GAME_7F0B5FAC -/* 0EAF68 7F0B6438 AFA70028 */ sw $a3, 0x28($sp) -/* 0EAF6C 7F0B643C 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EAF70 7F0B6440 0440000A */ bltz $v0, .L7F0B646C -/* 0EAF74 7F0B6444 8FA70028 */ lw $a3, 0x28($sp) -/* 0EAF78 7F0B6448 8FA40030 */ lw $a0, 0x30($sp) -/* 0EAF7C 7F0B644C AFA3001C */ sw $v1, 0x1c($sp) -/* 0EAF80 7F0B6450 0FC2EE5E */ jal redarken_lights_in_room -/* 0EAF84 7F0B6454 AFA20028 */ sw $v0, 0x28($sp) -/* 0EAF88 7F0B6458 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EAF8C 7F0B645C 10000003 */ b .L7F0B646C -/* 0EAF90 7F0B6460 8FA70028 */ lw $a3, 0x28($sp) -.L7F0B6464: -/* 0EAF94 7F0B6464 AC600004 */ sw $zero, 4($v1) -/* 0EAF98 7F0B6468 AC60001C */ sw $zero, 0x1c($v1) -.L7F0B646C: -/* 0EAF9C 7F0B646C 8C6D0014 */ lw $t5, 0x14($v1) -/* 0EAFA0 7F0B6470 8FAE0020 */ lw $t6, 0x20($sp) -/* 0EAFA4 7F0B6474 8FA40030 */ lw $a0, 0x30($sp) -/* 0EAFA8 7F0B6478 11A0000A */ beqz $t5, .L7F0B64A4 -/* 0EAFAC 7F0B647C 01C72821 */ addu $a1, $t6, $a3 -/* 0EAFB0 7F0B6480 8FAF002C */ lw $t7, 0x2c($sp) -/* 0EAFB4 7F0B6484 AFA3001C */ sw $v1, 0x1c($sp) -/* 0EAFB8 7F0B6488 AFA70028 */ sw $a3, 0x28($sp) -/* 0EAFBC 7F0B648C 0FC2D827 */ jal sub_GAME_7F0B609C -/* 0EAFC0 7F0B6490 01E73023 */ subu $a2, $t7, $a3 -/* 0EAFC4 7F0B6494 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EAFC8 7F0B6498 04400002 */ bltz $v0, .L7F0B64A4 -/* 0EAFCC 7F0B649C 8FA70028 */ lw $a3, 0x28($sp) -/* 0EAFD0 7F0B64A0 00E23821 */ addu $a3, $a3, $v0 -.L7F0B64A4: -/* 0EAFD4 7F0B64A4 8C780018 */ lw $t8, 0x18($v1) -/* 0EAFD8 7F0B64A8 8FB90020 */ lw $t9, 0x20($sp) -/* 0EAFDC 7F0B64AC 8FA40030 */ lw $a0, 0x30($sp) -/* 0EAFE0 7F0B64B0 1300000B */ beqz $t8, .L7F0B64E0 -/* 0EAFE4 7F0B64B4 03272821 */ addu $a1, $t9, $a3 -/* 0EAFE8 7F0B64B8 8FA8002C */ lw $t0, 0x2c($sp) -/* 0EAFEC 7F0B64BC AFA3001C */ sw $v1, 0x1c($sp) -/* 0EAFF0 7F0B64C0 AFA70028 */ sw $a3, 0x28($sp) -/* 0EAFF4 7F0B64C4 0FC2D877 */ jal sub_GAME_7F0B61DC -/* 0EAFF8 7F0B64C8 01073023 */ subu $a2, $t0, $a3 -/* 0EAFFC 7F0B64CC 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EB000 7F0B64D0 18400004 */ blez $v0, .L7F0B64E4 -/* 0EB004 7F0B64D4 8FA70028 */ lw $a3, 0x28($sp) -/* 0EB008 7F0B64D8 10000002 */ b .L7F0B64E4 -/* 0EB00C 7F0B64DC 00E23821 */ addu $a3, $a3, $v0 -.L7F0B64E0: -/* 0EB010 7F0B64E0 AC60000C */ sw $zero, 0xc($v1) -.L7F0B64E4: -/* 0EB014 7F0B64E4 8FAB002C */ lw $t3, 0x2c($sp) -/* 0EB018 7F0B64E8 24E20020 */ addiu $v0, $a3, 0x20 -/* 0EB01C 7F0B64EC 2401FFF0 */ li $at, -16 -/* 0EB020 7F0B64F0 00414824 */ and $t1, $v0, $at -/* 0EB024 7F0B64F4 240A0001 */ li $t2, 1 -/* 0EB028 7F0B64F8 AC690028 */ sw $t1, 0x28($v1) -/* 0EB02C 7F0B64FC 11690007 */ beq $t3, $t1, .L7F0B651C -/* 0EB030 7F0B6500 A06A0002 */ sb $t2, 2($v1) -/* 0EB034 7F0B6504 8FA40020 */ lw $a0, 0x20($sp) -/* 0EB038 7F0B6508 01602825 */ move $a1, $t3 -/* 0EB03C 7F0B650C 01203025 */ move $a2, $t1 -/* 0EB040 7F0B6510 0C0028F7 */ jal memaRealloc -/* 0EB044 7F0B6514 AFA3001C */ sw $v1, 0x1c($sp) -/* 0EB048 7F0B6518 8FA3001C */ lw $v1, 0x1c($sp) -.L7F0B651C: -/* 0EB04C 7F0B651C 3C0C8008 */ lui $t4, %hi(g_FogSkyIsEnabled) -/* 0EB050 7F0B6520 8D8C25C0 */ lw $t4, %lo(g_FogSkyIsEnabled)($t4) -/* 0EB054 7F0B6524 24060006 */ li $a2, 6 -/* 0EB058 7F0B6528 51800012 */ beql $t4, $zero, .L7F0B6574 -/* 0EB05C 7F0B652C 8C640008 */ lw $a0, 8($v1) -/* 0EB060 7F0B6530 8C640008 */ lw $a0, 8($v1) -/* 0EB064 7F0B6534 8C6D0020 */ lw $t5, 0x20($v1) -/* 0EB068 7F0B6538 24060001 */ li $a2, 1 -/* 0EB06C 7F0B653C AFA3001C */ sw $v1, 0x1c($sp) -/* 0EB070 7F0B6540 0FC2E990 */ jal bgApplyDynamicCCRMLUT -/* 0EB074 7F0B6544 01A42821 */ addu $a1, $t5, $a0 -/* 0EB078 7F0B6548 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EB07C 7F0B654C 8C64000C */ lw $a0, 0xc($v1) -/* 0EB080 7F0B6550 10800014 */ beqz $a0, .L7F0B65A4 -/* 0EB084 7F0B6554 00000000 */ nop -/* 0EB088 7F0B6558 8C6E0024 */ lw $t6, 0x24($v1) -/* 0EB08C 7F0B655C 24060005 */ li $a2, 5 -/* 0EB090 7F0B6560 0FC2E990 */ jal bgApplyDynamicCCRMLUT -/* 0EB094 7F0B6564 01C42821 */ addu $a1, $t6, $a0 -/* 0EB098 7F0B6568 1000000E */ b .L7F0B65A4 -/* 0EB09C 7F0B656C 00000000 */ nop -/* 0EB0A0 7F0B6570 8C640008 */ lw $a0, 8($v1) -.L7F0B6574: -/* 0EB0A4 7F0B6574 8C6F0020 */ lw $t7, 0x20($v1) -/* 0EB0A8 7F0B6578 AFA3001C */ sw $v1, 0x1c($sp) -/* 0EB0AC 7F0B657C 0FC2E990 */ jal bgApplyDynamicCCRMLUT -/* 0EB0B0 7F0B6580 01E42821 */ addu $a1, $t7, $a0 -/* 0EB0B4 7F0B6584 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EB0B8 7F0B6588 8C64000C */ lw $a0, 0xc($v1) -/* 0EB0BC 7F0B658C 10800005 */ beqz $a0, .L7F0B65A4 -/* 0EB0C0 7F0B6590 00000000 */ nop -/* 0EB0C4 7F0B6594 8C780024 */ lw $t8, 0x24($v1) -/* 0EB0C8 7F0B6598 24060007 */ li $a2, 7 -/* 0EB0CC 7F0B659C 0FC2E990 */ jal bgApplyDynamicCCRMLUT -/* 0EB0D0 7F0B65A0 03042821 */ addu $a1, $t8, $a0 -.L7F0B65A4: -/* 0EB0D4 7F0B65A4 0FC2DA65 */ jal sub_GAME_7F0B6994 -/* 0EB0D8 7F0B65A8 8FA40030 */ lw $a0, 0x30($sp) -/* 0EB0DC 7F0B65AC 0FC2D7B6 */ jal roomsHandleStateDebugging -/* 0EB0E0 7F0B65B0 00000000 */ nop -.L7F0B65B4: -/* 0EB0E4 7F0B65B4 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0B65B8: -/* 0EB0E8 7F0B65B8 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0EB0EC 7F0B65BC 03E00008 */ jr $ra -/* 0EB0F0 7F0B65C0 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B6368 -/* 0E8094 7F0B56A4 3C0F8004 */ lui $t7, %hi(g_MaxNumRooms) # $t7, 0x8004 -/* 0E8098 7F0B56A8 8DEFD7D4 */ lw $t7, %lo(g_MaxNumRooms)($t7) -/* 0E809C 7F0B56AC 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0E80A0 7F0B56B0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E80A4 7F0B56B4 008F082A */ slt $at, $a0, $t7 -/* 0E80A8 7F0B56B8 AFA40030 */ sw $a0, 0x30($sp) -/* 0E80AC 7F0B56BC 1020008C */ beqz $at, .L7F0B58F0 -/* 0E80B0 7F0B56C0 00003825 */ move $a3, $zero -/* 0E80B4 7F0B56C4 0004C880 */ sll $t9, $a0, 2 -/* 0E80B8 7F0B56C8 0324C821 */ addu $t9, $t9, $a0 -/* 0E80BC 7F0B56CC 3C088004 */ lui $t0, %hi(g_BgRoomInfo) # $t0, 0x8004 -/* 0E80C0 7F0B56D0 2508AC64 */ addiu $t0, %lo(g_BgRoomInfo) # addiu $t0, $t0, -0x539c -/* 0E80C4 7F0B56D4 0019C900 */ sll $t9, $t9, 4 -/* 0E80C8 7F0B56D8 03281821 */ addu $v1, $t9, $t0 -/* 0E80CC 7F0B56DC 90690002 */ lbu $t1, 2($v1) -/* 0E80D0 7F0B56E0 55200084 */ bnezl $t1, .L7F0B58F4 -/* 0E80D4 7F0B56E4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E80D8 7F0B56E8 8C620028 */ lw $v0, 0x28($v1) -/* 0E80DC 7F0B56EC 5840000D */ blezl $v0, .L7F0B5724 -/* 0E80E0 7F0B56F0 AFA3001C */ sw $v1, 0x1c($sp) -/* 0E80E4 7F0B56F4 AFA2002C */ sw $v0, 0x2c($sp) -/* 0E80E8 7F0B56F8 AFA3001C */ sw $v1, 0x1c($sp) -/* 0E80EC 7F0B56FC 0FC24116 */ jal get_debug_joy2detailedit_flag -/* 0E80F0 7F0B5700 AFA00028 */ sw $zero, 0x28($sp) -/* 0E80F4 7F0B5704 8FA3001C */ lw $v1, 0x1c($sp) -/* 0E80F8 7F0B5708 1040000B */ beqz $v0, .L7F0B5738 -/* 0E80FC 7F0B570C 8FA70028 */ lw $a3, 0x28($sp) -/* 0E8100 7F0B5710 8FAA002C */ lw $t2, 0x2c($sp) -/* 0E8104 7F0B5714 254B0400 */ addiu $t3, $t2, 0x400 -/* 0E8108 7F0B5718 10000007 */ b .L7F0B5738 -/* 0E810C 7F0B571C AFAB002C */ sw $t3, 0x2c($sp) -/* 0E8110 7F0B5720 AFA3001C */ sw $v1, 0x1c($sp) -.L7F0B5724: -/* 0E8114 7F0B5724 0C0025F4 */ jal memaGetLongestFree -/* 0E8118 7F0B5728 AFA70028 */ sw $a3, 0x28($sp) -/* 0E811C 7F0B572C 8FA3001C */ lw $v1, 0x1c($sp) -/* 0E8120 7F0B5730 8FA70028 */ lw $a3, 0x28($sp) -/* 0E8124 7F0B5734 AFA2002C */ sw $v0, 0x2c($sp) -.L7F0B5738: -/* 0E8128 7F0B5738 8FA4002C */ lw $a0, 0x2c($sp) -/* 0E812C 7F0B573C AFA3001C */ sw $v1, 0x1c($sp) -/* 0E8130 7F0B5740 0C0024A5 */ jal memaAlloc -/* 0E8134 7F0B5744 AFA70028 */ sw $a3, 0x28($sp) -/* 0E8138 7F0B5748 8FA3001C */ lw $v1, 0x1c($sp) -/* 0E813C 7F0B574C 8FA70028 */ lw $a3, 0x28($sp) -/* 0E8140 7F0B5750 10400067 */ beqz $v0, .L7F0B58F0 -/* 0E8144 7F0B5754 AFA20020 */ sw $v0, 0x20($sp) -/* 0E8148 7F0B5758 8C6C0010 */ lw $t4, 0x10($v1) -/* 0E814C 7F0B575C 8FA40030 */ lw $a0, 0x30($sp) -/* 0E8150 7F0B5760 00402825 */ move $a1, $v0 -/* 0E8154 7F0B5764 1180000E */ beqz $t4, .L7F0B57A0 -/* 0E8158 7F0B5768 8FA6002C */ lw $a2, 0x2c($sp) -/* 0E815C 7F0B576C AFA3001C */ sw $v1, 0x1c($sp) -/* 0E8160 7F0B5770 0FC2D4BA */ jal sub_GAME_7F0B5FAC -/* 0E8164 7F0B5774 AFA70028 */ sw $a3, 0x28($sp) -/* 0E8168 7F0B5778 8FA3001C */ lw $v1, 0x1c($sp) -/* 0E816C 7F0B577C 0440000A */ bltz $v0, .L7F0B57A8 -/* 0E8170 7F0B5780 8FA70028 */ lw $a3, 0x28($sp) -/* 0E8174 7F0B5784 8FA40030 */ lw $a0, 0x30($sp) -/* 0E8178 7F0B5788 AFA3001C */ sw $v1, 0x1c($sp) -/* 0E817C 7F0B578C 0FC2EB5E */ jal redarken_lights_in_room -/* 0E8180 7F0B5790 AFA20028 */ sw $v0, 0x28($sp) -/* 0E8184 7F0B5794 8FA3001C */ lw $v1, 0x1c($sp) -/* 0E8188 7F0B5798 10000003 */ b .L7F0B57A8 -/* 0E818C 7F0B579C 8FA70028 */ lw $a3, 0x28($sp) -.L7F0B57A0: -/* 0E8190 7F0B57A0 AC600004 */ sw $zero, 4($v1) -/* 0E8194 7F0B57A4 AC60001C */ sw $zero, 0x1c($v1) -.L7F0B57A8: -/* 0E8198 7F0B57A8 8C6D0014 */ lw $t5, 0x14($v1) -/* 0E819C 7F0B57AC 8FAE0020 */ lw $t6, 0x20($sp) -/* 0E81A0 7F0B57B0 8FA40030 */ lw $a0, 0x30($sp) -/* 0E81A4 7F0B57B4 11A0000A */ beqz $t5, .L7F0B57E0 -/* 0E81A8 7F0B57B8 01C72821 */ addu $a1, $t6, $a3 -/* 0E81AC 7F0B57BC 8FAF002C */ lw $t7, 0x2c($sp) -/* 0E81B0 7F0B57C0 AFA3001C */ sw $v1, 0x1c($sp) -/* 0E81B4 7F0B57C4 AFA70028 */ sw $a3, 0x28($sp) -/* 0E81B8 7F0B57C8 0FC2D4F6 */ jal sub_GAME_7F0B609C -/* 0E81BC 7F0B57CC 01E73023 */ subu $a2, $t7, $a3 -/* 0E81C0 7F0B57D0 8FA3001C */ lw $v1, 0x1c($sp) -/* 0E81C4 7F0B57D4 04400002 */ bltz $v0, .L7F0B57E0 -/* 0E81C8 7F0B57D8 8FA70028 */ lw $a3, 0x28($sp) -/* 0E81CC 7F0B57DC 00E23821 */ addu $a3, $a3, $v0 -.L7F0B57E0: -/* 0E81D0 7F0B57E0 8C780018 */ lw $t8, 0x18($v1) -/* 0E81D4 7F0B57E4 8FB90020 */ lw $t9, 0x20($sp) -/* 0E81D8 7F0B57E8 8FA40030 */ lw $a0, 0x30($sp) -/* 0E81DC 7F0B57EC 1300000B */ beqz $t8, .Leu7F0B581C -/* 0E81E0 7F0B57F0 03272821 */ addu $a1, $t9, $a3 -/* 0E81E4 7F0B57F4 8FA8002C */ lw $t0, 0x2c($sp) -/* 0E81E8 7F0B57F8 AFA3001C */ sw $v1, 0x1c($sp) -/* 0E81EC 7F0B57FC AFA70028 */ sw $a3, 0x28($sp) -/* 0E81F0 7F0B5800 0FC2D546 */ jal sub_GAME_7F0B61DC -/* 0E81F4 7F0B5804 01073023 */ subu $a2, $t0, $a3 -/* 0E81F8 7F0B5808 8FA3001C */ lw $v1, 0x1c($sp) -/* 0E81FC 7F0B580C 18400004 */ blez $v0, .L7F0B5820 -/* 0E8200 7F0B5810 8FA70028 */ lw $a3, 0x28($sp) -/* 0E8204 7F0B5814 10000002 */ b .L7F0B5820 -/* 0E8208 7F0B5818 00E23821 */ addu $a3, $a3, $v0 -.Leu7F0B581C: -/* 0E820C 7F0B581C AC60000C */ sw $zero, 0xc($v1) -.L7F0B5820: -/* 0E8210 7F0B5820 8FAB002C */ lw $t3, 0x2c($sp) -/* 0E8214 7F0B5824 24E20020 */ addiu $v0, $a3, 0x20 -/* 0E8218 7F0B5828 2401FFF0 */ li $at, -16 -/* 0E821C 7F0B582C 00414824 */ and $t1, $v0, $at -/* 0E8220 7F0B5830 240A0001 */ li $t2, 1 -/* 0E8224 7F0B5834 AC690028 */ sw $t1, 0x28($v1) -/* 0E8228 7F0B5838 11690007 */ beq $t3, $t1, .L7F0B5858 -/* 0E822C 7F0B583C A06A0002 */ sb $t2, 2($v1) -/* 0E8230 7F0B5840 8FA40020 */ lw $a0, 0x20($sp) -/* 0E8234 7F0B5844 01602825 */ move $a1, $t3 -/* 0E8238 7F0B5848 01203025 */ move $a2, $t1 -/* 0E823C 7F0B584C 0C00260F */ jal memaRealloc -/* 0E8240 7F0B5850 AFA3001C */ sw $v1, 0x1c($sp) -/* 0E8244 7F0B5854 8FA3001C */ lw $v1, 0x1c($sp) -.L7F0B5858: -/* 0E8248 7F0B5858 3C0C8007 */ lui $t4, %hi(g_FogSkyIsEnabled) # $t4, 0x8007 -/* 0E824C 7F0B585C 8D8CCF60 */ lw $t4, %lo(g_FogSkyIsEnabled)($t4) -/* 0E8250 7F0B5860 24060006 */ li $a2, 6 -/* 0E8254 7F0B5864 51800012 */ beql $t4, $zero, .L7F0B58B0 -/* 0E8258 7F0B5868 8C640008 */ lw $a0, 8($v1) -/* 0E825C 7F0B586C 8C640008 */ lw $a0, 8($v1) -/* 0E8260 7F0B5870 8C6D0020 */ lw $t5, 0x20($v1) -/* 0E8264 7F0B5874 24060001 */ li $a2, 1 -/* 0E8268 7F0B5878 AFA3001C */ sw $v1, 0x1c($sp) -/* 0E826C 7F0B587C 0FC2E638 */ jal bgApplyDynamicCCRMLUT -/* 0E8270 7F0B5880 01A42821 */ addu $a1, $t5, $a0 -/* 0E8274 7F0B5884 8FA3001C */ lw $v1, 0x1c($sp) -/* 0E8278 7F0B5888 8C64000C */ lw $a0, 0xc($v1) -/* 0E827C 7F0B588C 10800014 */ beqz $a0, .L7F0B58E0 -/* 0E8280 7F0B5890 00000000 */ nop -/* 0E8284 7F0B5894 8C6E0024 */ lw $t6, 0x24($v1) -/* 0E8288 7F0B5898 24060005 */ li $a2, 5 -/* 0E828C 7F0B589C 0FC2E638 */ jal bgApplyDynamicCCRMLUT -/* 0E8290 7F0B58A0 01C42821 */ addu $a1, $t6, $a0 -/* 0E8294 7F0B58A4 1000000E */ b .L7F0B58E0 -/* 0E8298 7F0B58A8 00000000 */ nop -/* 0E829C 7F0B58AC 8C640008 */ lw $a0, 8($v1) -.L7F0B58B0: -/* 0E82A0 7F0B58B0 8C6F0020 */ lw $t7, 0x20($v1) -/* 0E82A4 7F0B58B4 AFA3001C */ sw $v1, 0x1c($sp) -/* 0E82A8 7F0B58B8 0FC2E638 */ jal bgApplyDynamicCCRMLUT -/* 0E82AC 7F0B58BC 01E42821 */ addu $a1, $t7, $a0 -/* 0E82B0 7F0B58C0 8FA3001C */ lw $v1, 0x1c($sp) -/* 0E82B4 7F0B58C4 8C64000C */ lw $a0, 0xc($v1) -/* 0E82B8 7F0B58C8 10800005 */ beqz $a0, .L7F0B58E0 -/* 0E82BC 7F0B58CC 00000000 */ nop -/* 0E82C0 7F0B58D0 8C780024 */ lw $t8, 0x24($v1) -/* 0E82C4 7F0B58D4 24060007 */ li $a2, 7 -/* 0E82C8 7F0B58D8 0FC2E638 */ jal bgApplyDynamicCCRMLUT -/* 0E82CC 7F0B58DC 03042821 */ addu $a1, $t8, $a0 -.L7F0B58E0: -/* 0E82D0 7F0B58E0 0FC2D734 */ jal sub_GAME_7F0B6994 -/* 0E82D4 7F0B58E4 8FA40030 */ lw $a0, 0x30($sp) -/* 0E82D8 7F0B58E8 0FC2D485 */ jal roomsHandleStateDebugging -/* 0E82DC 7F0B58EC 00000000 */ nop -.L7F0B58F0: -/* 0E82E0 7F0B58F0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0B58F4: -/* 0E82E4 7F0B58F4 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0E82E8 7F0B58F8 03E00008 */ jr $ra -/* 0E82EC 7F0B58FC 00000000 */ nop -) -#endif - -#endif - - -#ifdef NONMATCHING -void delete_room_data(s32 roomID) -{ - - if (g_BgRoomInfo[roomID].ptr_unique_collision_points) + else { - memaFree(g_BgRoomInfo[roomID].ptr_unique_collision_points, (((s16)g_BgRoomInfo[roomID].bitflags3 * 0x1C) + 0xF) & ~0xF); - g_BgRoomInfo[roomID].ptr_unique_collision_points = 0; + // On a first allocation, we'll allocate the largest memory block available. + allocsize = memaGetLongestFree(); } - if ( 0 < g_BgRoomInfo[roomID].cur_room_totalsize) + /** + * Allocate one contiguous block for vertices and display lists. + */ + data = memaAlloc(allocsize); + + if (data == NULL) goto end; + + if (g_BgRoomInfo[roomID].csize_point_index_binary) { - if (g_BgRoomInfo[roomID].ptr_point_index) + result = bgLoadRoomVtxData(roomID, data, allocsize); + + if (result >= 0) { - memaFree(g_BgRoomInfo[roomID].ptr_point_index, g_BgRoomInfo[roomID].cur_room_totalsize); + used = result; + redarken_lights_in_room(roomID); + } + } + else + { + g_BgRoomInfo[roomID].vertices = NULL; + g_BgRoomInfo[roomID].usize_point_index_binary = 0; + } + + /** + * Append the primary display list after the vertex data. + */ + if (g_BgRoomInfo[roomID].csize_primary_DL_binary) + { + result = bgLoadRoomPrimaryGdl(roomID, data + used, allocsize - used); + + if (result >= 0) + { + used += result; + } + } + + /** + * Append the secondary display list. + */ + if (g_BgRoomInfo[roomID].csize_secondary_DL_binary) + { + result = bgLoadRoomSecondaryGdl(roomID, data + used, allocsize - used); + + if (result > 0) + { + used += result; + } + } + else + { + g_BgRoomInfo[roomID].ptr_secondary_expanded_mapping_info = NULL; + } + + g_BgRoomInfo[roomID].cur_room_totalsize = ((used + 0x20) & ~0xf); + g_BgRoomInfo[roomID].model_bin_loaded = 1; + + // If wasted space is detected, shrink allocated memory block. + if (allocsize != ((used + 0x20) & ~0xf)) + { + memaRealloc((s32)data, allocsize, ((used + 0x20) & ~0xf)); + } + + // Same branches, only the LUT parameter changes + if (g_FogSkyIsEnabled) + { + bgApplyDynamicCCRMLUT( + g_BgRoomInfo[roomID].ptr_expanded_mapping_info, + (Gfx *)((u8 *)g_BgRoomInfo[roomID].ptr_expanded_mapping_info + g_BgRoomInfo[roomID].usize_primary_DL_binary), + 1); + + if (g_BgRoomInfo[roomID].ptr_secondary_expanded_mapping_info) + { + bgApplyDynamicCCRMLUT( + g_BgRoomInfo[roomID].ptr_secondary_expanded_mapping_info, + (Gfx *)((u8 *)g_BgRoomInfo[roomID].ptr_secondary_expanded_mapping_info + g_BgRoomInfo[roomID].usize_secondary_DL_binary), + 5); + } + } + else + { + bgApplyDynamicCCRMLUT( + g_BgRoomInfo[roomID].ptr_expanded_mapping_info, + (Gfx *)((u8 *)g_BgRoomInfo[roomID].ptr_expanded_mapping_info + g_BgRoomInfo[roomID].usize_primary_DL_binary), + 6); + + if (g_BgRoomInfo[roomID].ptr_secondary_expanded_mapping_info) + { + bgApplyDynamicCCRMLUT( + g_BgRoomInfo[roomID].ptr_secondary_expanded_mapping_info, + (Gfx *)((u8 *)g_BgRoomInfo[roomID].ptr_secondary_expanded_mapping_info + g_BgRoomInfo[roomID].usize_secondary_DL_binary), + 7); + } + } + + bgBuildRoomVtxBounds(roomID); + roomsHandleStateDebugging(); + +end:; + +} + + +/** + * Given a room, frees all dynamically allocated data for that room and marks the room as unloaded. + */ +void delete_room_data(s32 roomID) +{ + s_room_info *room = &g_BgRoomInfo[roomID]; + s32 size; + s32 size2; + Vtx *pointindex; + + if (room->vtx_batch_bounds != NULL) { + memaFree( + room->vtx_batch_bounds, + ((room->num_vtx_batch_bounds * sizeof(RoomVtxBatchBounds)) + 0xf) & ~0xf); + + room->vtx_batch_bounds = NULL; + } + + if (room->cur_room_totalsize > 0) { + size = room->cur_room_totalsize; + pointindex = room->vertices; + + if (pointindex != NULL) + { + size2 = room->cur_room_totalsize; + memaFree(pointindex, size2); + room->vertices = NULL; } else { - memaFree(g_BgRoomInfo[roomID].ptr_expanded_mapping_info, g_BgRoomInfo[roomID].cur_room_totalsize); + memaFree(room->ptr_expanded_mapping_info, size); + room->vertices = NULL; } - g_BgRoomInfo[roomID].ptr_point_index = 0; - g_BgRoomInfo[roomID].ptr_expanded_mapping_info = 0; - g_BgRoomInfo[roomID].ptr_secondary_expanded_mapping_info = 0; + + room->ptr_expanded_mapping_info = NULL; + room->ptr_secondary_expanded_mapping_info = NULL; } - g_BgRoomInfo[roomID].model_bin_loaded = 0; + + room->model_bin_loaded = 0; roomsHandleStateDebugging(); } -#else -GLOBAL_ASM( -.text -glabel delete_room_data -/* 0EB0F4 7F0B65C4 00047080 */ sll $t6, $a0, 2 -/* 0EB0F8 7F0B65C8 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0EB0FC 7F0B65CC 01C47021 */ addu $t6, $t6, $a0 -/* 0EB100 7F0B65D0 3C0F8004 */ lui $t7, %hi(g_BgRoomInfo) -/* 0EB104 7F0B65D4 AFB00018 */ sw $s0, 0x18($sp) -/* 0EB108 7F0B65D8 25EF1414 */ addiu $t7, %lo(g_BgRoomInfo) # addiu $t7, $t7, 0x1414 -/* 0EB10C 7F0B65DC 000E7100 */ sll $t6, $t6, 4 -/* 0EB110 7F0B65E0 01CF8021 */ addu $s0, $t6, $t7 -/* 0EB114 7F0B65E4 8E06002C */ lw $a2, 0x2c($s0) -/* 0EB118 7F0B65E8 AFBF001C */ sw $ra, 0x1c($sp) -/* 0EB11C 7F0B65EC 50C0000D */ beql $a2, $zero, .L7F0B6624 -/* 0EB120 7F0B65F0 8E020028 */ lw $v0, 0x28($s0) -/* 0EB124 7F0B65F4 86050030 */ lh $a1, 0x30($s0) -/* 0EB128 7F0B65F8 2401FFF0 */ li $at, -16 -/* 0EB12C 7F0B65FC 00C02025 */ move $a0, $a2 -/* 0EB130 7F0B6600 0005C0C0 */ sll $t8, $a1, 3 -/* 0EB134 7F0B6604 0305C023 */ subu $t8, $t8, $a1 -/* 0EB138 7F0B6608 0018C080 */ sll $t8, $t8, 2 -/* 0EB13C 7F0B660C 2705000F */ addiu $a1, $t8, 0xf -/* 0EB140 7F0B6610 00A1C824 */ and $t9, $a1, $at -/* 0EB144 7F0B6614 0C002808 */ jal memaFree -/* 0EB148 7F0B6618 03202825 */ move $a1, $t9 -/* 0EB14C 7F0B661C AE00002C */ sw $zero, 0x2c($s0) -/* 0EB150 7F0B6620 8E020028 */ lw $v0, 0x28($s0) -.L7F0B6624: -/* 0EB154 7F0B6624 1840000E */ blez $v0, .L7F0B6660 -/* 0EB158 7F0B6628 00000000 */ nop -/* 0EB15C 7F0B662C 8E040004 */ lw $a0, 4($s0) -/* 0EB160 7F0B6630 00402825 */ move $a1, $v0 -/* 0EB164 7F0B6634 10800005 */ beqz $a0, .L7F0B664C -/* 0EB168 7F0B6638 00000000 */ nop -/* 0EB16C 7F0B663C 0C002808 */ jal memaFree -/* 0EB170 7F0B6640 00402825 */ move $a1, $v0 -/* 0EB174 7F0B6644 10000004 */ b .L7F0B6658 -/* 0EB178 7F0B6648 AE000004 */ sw $zero, 4($s0) -.L7F0B664C: -/* 0EB17C 7F0B664C 0C002808 */ jal memaFree -/* 0EB180 7F0B6650 8E040008 */ lw $a0, 8($s0) -/* 0EB184 7F0B6654 AE000004 */ sw $zero, 4($s0) -.L7F0B6658: -/* 0EB188 7F0B6658 AE000008 */ sw $zero, 8($s0) -/* 0EB18C 7F0B665C AE00000C */ sw $zero, 0xc($s0) -.L7F0B6660: -/* 0EB190 7F0B6660 0FC2D7B6 */ jal roomsHandleStateDebugging -/* 0EB194 7F0B6664 A2000002 */ sb $zero, 2($s0) -/* 0EB198 7F0B6668 8FBF001C */ lw $ra, 0x1c($sp) -/* 0EB19C 7F0B666C 8FB00018 */ lw $s0, 0x18($sp) -/* 0EB1A0 7F0B6670 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0EB1A4 7F0B6674 03E00008 */ jr $ra -/* 0EB1A8 7F0B6678 00000000 */ nop -) -#endif - - - - +/** + * Immediately unload all loaded rooms. + * Used for stage cleanup. + */ void unload_rooms(void) { s32 i; @@ -5760,8 +2627,13 @@ void unload_rooms(void) } - -void sub_GAME_7F0B66E8(void) +/** + * Address: 7F0B66E8 + * + * Ages loaded rooms that are no longer marked active, then unloads them + * once their unload delay expires. + */ +void bgRoomsTickUnload(void) { s32 i; @@ -5778,547 +2650,241 @@ void sub_GAME_7F0B66E8(void) g_BgRoomInfo[i].model_bin_loaded = g_BgRoomInfo[i].model_bin_loaded + 1; } } - } + } } - - - /** - * Address 0x7F0B677C. + * Address 7F0B677C + * + * Render a room's primary (solid) geometry. + * Ensures the room's bg data is loaded if budget allows, then appends its display list. + * Also resets the age of rendered rooms so bgRoomsTickUnload won't unload it. */ -Gfx *sub_GAME_7F0B677C(Gfx *arg0, s32 room_index) +Gfx *bgRenderRoomPrimary(Gfx *gdl, s32 room_index) { if (room_index >= g_MaxNumRooms) { - return arg0; + return gdl; } if ((D_8004485C != 0) || (D_80044858 == (room_index % 10))) { if (g_BgRoomInfo[room_index].model_bin_loaded == 0) { - if (D_800442F8 > 0) + if (g_RoomLoadBudget > 0) { - D_800442F8--; - sub_GAME_7F0B6368(room_index); + g_RoomLoadBudget--; + bgLoadRoomModelData(room_index); } } if (g_BgRoomInfo[room_index].model_bin_loaded == 0) { - return arg0; + return gdl; } else { - arg0 = applyRoomMatrixToDisplayList(arg0, room_index); + gdl = applyRoomMatrixToDisplayList(gdl, room_index); - gSPSegment(arg0++, SPSEGMENT_BG_VTX, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].ptr_point_index)); - gSPDisplayList(arg0++, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].ptr_expanded_mapping_info)); + gSPSegment(gdl++, SPSEGMENT_BG_VTX, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].vertices)); + gSPDisplayList(gdl++, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].ptr_expanded_mapping_info)); + // Set the room's state to "loaded" g_BgRoomInfo[room_index].model_bin_loaded = 1; } } - return arg0; + return gdl; } - /** - * Address 0x7F0B6898. + * Address 7F0B6898 + * + * Render a room's secondary (transparent) geometry. */ -Gfx *sub_GAME_7F0B6898(Gfx *arg0, s32 room_index) +Gfx *bgRenderRoomSecondary(Gfx *gdl, s32 room_index) { if (room_index >= g_MaxNumRooms) { - return arg0; + return gdl; } + // Return if the room has no secondary geometry. if (g_BgRoomInfo[room_index].ptr_secondary_expanded_mapping_info == 0) { - return arg0; + return gdl; } else if ((D_8004485C != 0) || (D_80044858 == (room_index % 10))) { if (g_BgRoomInfo[room_index].model_bin_loaded != 0) { - arg0 = applyRoomMatrixToDisplayList(arg0, room_index); + gdl = applyRoomMatrixToDisplayList(gdl, room_index); - gSPSegment(arg0++, SPSEGMENT_BG_VTX, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].ptr_point_index)); - gSPDisplayList(arg0++, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].ptr_secondary_expanded_mapping_info)); + gSPSegment(gdl++, SPSEGMENT_BG_VTX, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].vertices)); + gSPDisplayList(gdl++, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].ptr_secondary_expanded_mapping_info)); + // Set the room's state to "loaded" g_BgRoomInfo[room_index].model_bin_loaded = 1; } else { - sub_GAME_7F0B6368(room_index); + bgLoadRoomModelData(room_index); } } - return arg0; + return gdl; } - -#ifdef NONMATCHING /* -* Is this related to room collisions? (for bullets) +* Build world space bounds for each vertex batch loaded by the room's display list. * Address: 7F0B6994 */ -void sub_GAME_7F0B6994(s32 arg0) { - s32 sp24; - s32 sp3C; - s32 sp44; - void *temp_a1; - s32 temp_v1_8; - s32 temp_t8; - ? temp_ret; - void *temp_a0; - s32 temp_t2; - s32 temp_a2; - void *temp_v1; - s32 temp_a3; - s32 temp_v1_2; - s32 temp_a2_2; - s32 temp_v1_3; - s32 temp_v1_4; - s32 temp_v1_5; - s32 temp_v1_6; - s32 temp_v1_7; - s32 temp_v1_9; - s32 phi_v1; - void *phi_t3; - s32 phi_t5; - s32 phi_v1_2; - s16 phi_ra; - s32 phi_t5_2; - void *phi_v1_3; - s32 phi_a2; - void *phi_t3_2; - void *phi_a1; - s32 phi_a2_2; - s32 phi_t5_3; - s32 phi_t5_4; +#define ALIGN16(val) (((val) + 0xF) & ~0xF) +#define SEGMENT_OFFSET(a) ((unsigned int)(a) & 0x00ffffff) - // Node 0 - temp_a1 = ((arg0 * 0x50) + &g_BgRoomInfo); - if (temp_a1->unk2C == 0) - { - // Node 1 - sp44 = (s32) temp_a1->unk4; - phi_t5 = 0; - if (-0x48 != *temp_a1->unk8) - { - // Node 2 - phi_v1 = *temp_a1->unk8; - phi_t3 = temp_a1->unk8; - phi_t5_4 = 0; -loop_3: - // Node 3 - phi_t5_3 = phi_t5_4; - if (4 == phi_v1) - { - // Node 4 - phi_t5_3 = (phi_t5_4 + 1); - } - // Node 5 - temp_v1_8 = phi_t3->unk8; - phi_v1 = temp_v1_8; - phi_t3 = (phi_t3 + 8); - phi_t5 = phi_t5_3; - phi_t5_4 = phi_t5_3; - if (-0x48 != temp_v1_8) - { - goto loop_3; - } - } - // Node 6 - temp_t8 = (((((phi_t5 * 8) - phi_t5) * 4) + 0xf) & -0x10); - sp24 = temp_t8; - sp3C = (s32) phi_t5; - temp_ret = memaAlloc(temp_t8, temp_a1, temp_a1->unk8); - if (temp_ret != 0) - { - // Node 7 - sp28->unk2C = temp_ret; - sp28->unk30 = (s16) phi_t5; - if (-0x48 != *sp48) - { - // Node 8 - phi_v1_2 = *sp48; - phi_ra = (u16)0; - phi_t5_2 = 0; - phi_t3_2 = sp48; -loop_9: - // Node 9 - phi_t5_2 = phi_t5_2; - if (4 == phi_v1_2) - { - // Node 10 - temp_a0 = (temp_ret + (((phi_t5_2 * 8) - phi_t5_2) * 4)); - *temp_a0 = (s16) phi_ra; - temp_t2 = (arg0 * 0x18); - phi_v1_3 = (temp_ret + (((phi_t5_2 * 8) - phi_t5_2) * 4)); - phi_a2 = 0; -loop_11: - // Node 11 - temp_a2 = (phi_a2 + 1); - temp_v1 = (phi_v1_3 + 4); - *temp_v1 = 0x7fff; - temp_v1->unkC = -0x8000; - phi_v1_3 = temp_v1; - phi_a2 = temp_a2; - if (temp_a2 < 3) - { - goto loop_11; - } - // Node 12 - temp_a3 = ((((u32) phi_t3_2->unk1 >> 4) & 0xf) + 1); - if (temp_a3 > 0) - { - // Node 13 - phi_a1 = ((phi_t3_2->unk4 & 0xffffff) + sp44); - phi_a2_2 = 0; -loop_14: - // Node 14 - temp_v1_2 = *phi_a1; - temp_a2_2 = (phi_a2_2 + 1); - if (temp_v1_2 < temp_a0->unk4) - { - // Node 15 - temp_a0->unk4 = temp_v1_2; - } - // Node 16 - temp_v1_3 = phi_a1->unk2; - if (temp_v1_3 < temp_a0->unk8) - { - // Node 17 - temp_a0->unk8 = temp_v1_3; - } - // Node 18 - temp_v1_4 = phi_a1->unk4; - if (temp_v1_4 < temp_a0->unkC) - { - // Node 19 - temp_a0->unkC = temp_v1_4; - } - // Node 20 - temp_v1_5 = *phi_a1; - if (temp_a0->unk10 < temp_v1_5) - { - // Node 21 - temp_a0->unk10 = temp_v1_5; - } - // Node 22 - temp_v1_6 = phi_a1->unk2; - if (temp_a0->unk14 < temp_v1_6) - { - // Node 23 - temp_a0->unk14 = temp_v1_6; - } - // Node 24 - temp_v1_7 = phi_a1->unk4; - if (temp_a0->unk18 < temp_v1_7) - { - // Node 25 - temp_a0->unk18 = temp_v1_7; - } - // Node 26 - phi_a1 = (phi_a1 + 0x10); - phi_a2_2 = temp_a2_2; - if (temp_a2_2 != temp_a3) - { - goto loop_14; - } - } - // Node 27 - if (temp_a0->unk4 == temp_a0->unk10) - { - // Node 28 - temp_a0->unk10 = (s32) (temp_a0->unk10 + 1); - } - // Node 29 - if (temp_a0->unk8 == temp_a0->unk14) - { - // Node 30 - temp_a0->unk14 = (s32) (temp_a0->unk14 + 1); - } - // Node 31 - if (temp_a0->unkC == temp_a0->unk18) - { - // Node 32 - temp_a0->unk18 = (s32) (temp_a0->unk18 + 1); - } - // Node 33 - temp_a0->unk4 = (s32) (temp_a0->unk4 + (s32) (ptr_bgdata_room_fileposition_list + temp_t2)->unkC); - temp_a0->unk8 = (s32) (temp_a0->unk8 + (s32) (ptr_bgdata_room_fileposition_list + temp_t2)->unk10); - temp_a0->unkC = (s32) (temp_a0->unkC + (s32) (ptr_bgdata_room_fileposition_list + temp_t2)->unk14); - temp_a0->unk10 = (s32) (temp_a0->unk10 + (s32) (ptr_bgdata_room_fileposition_list + temp_t2)->unkC); - temp_a0->unk14 = (s32) (temp_a0->unk14 + (s32) (ptr_bgdata_room_fileposition_list + temp_t2)->unk10); - temp_a0->unk18 = (s32) (temp_a0->unk18 + (s32) (ptr_bgdata_room_fileposition_list + temp_t2)->unk14); - phi_t5_2 = (phi_t5_2 + 1); - } - // Node 34 - temp_v1_9 = phi_t3_2->unk8; - phi_v1_2 = temp_v1_9; - phi_ra = (phi_ra + 1); - phi_t3_2 = (phi_t3_2 + 8); - if (-0x48 != temp_v1_9) - { - goto loop_9; - } - } - } - } - // Node 35 - return; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B6994 -/* 0EB4C4 7F0B6994 00047880 */ sll $t7, $a0, 2 -/* 0EB4C8 7F0B6998 01E47821 */ addu $t7, $t7, $a0 -/* 0EB4CC 7F0B699C 3C188004 */ lui $t8, %hi(g_BgRoomInfo) -/* 0EB4D0 7F0B69A0 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 -/* 0EB4D4 7F0B69A4 000F7900 */ sll $t7, $t7, 4 -/* 0EB4D8 7F0B69A8 01F82821 */ addu $a1, $t7, $t8 -/* 0EB4DC 7F0B69AC 8CB9002C */ lw $t9, 0x2c($a1) -/* 0EB4E0 7F0B69B0 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 0EB4E4 7F0B69B4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0EB4E8 7F0B69B8 AFB10018 */ sw $s1, 0x18($sp) -/* 0EB4EC 7F0B69BC AFB00014 */ sw $s0, 0x14($sp) -/* 0EB4F0 7F0B69C0 172000C5 */ bnez $t9, .L7F0B6CD8 -/* 0EB4F4 7F0B69C4 AFA40050 */ sw $a0, 0x50($sp) -/* 0EB4F8 7F0B69C8 8CAE0004 */ lw $t6, 4($a1) -/* 0EB4FC 7F0B69CC 8CA60008 */ lw $a2, 8($a1) -/* 0EB500 7F0B69D0 2410FFB8 */ li $s0, -72 -/* 0EB504 7F0B69D4 AFAE0044 */ sw $t6, 0x44($sp) -/* 0EB508 7F0B69D8 80CF0000 */ lb $t7, ($a2) -/* 0EB50C 7F0B69DC 00006825 */ move $t5, $zero -/* 0EB510 7F0B69E0 2401FFF0 */ li $at, -16 -/* 0EB514 7F0B69E4 120F000A */ beq $s0, $t7, .L7F0B6A10 -/* 0EB518 7F0B69E8 00C05825 */ move $t3, $a2 -/* 0EB51C 7F0B69EC 80C30000 */ lb $v1, ($a2) -/* 0EB520 7F0B69F0 24110004 */ li $s1, 4 -.L7F0B69F4: -/* 0EB524 7F0B69F4 56230003 */ bnel $s1, $v1, .L7F0B6A04 -/* 0EB528 7F0B69F8 81630008 */ lb $v1, 8($t3) -/* 0EB52C 7F0B69FC 25AD0001 */ addiu $t5, $t5, 1 -/* 0EB530 7F0B6A00 81630008 */ lb $v1, 8($t3) -.L7F0B6A04: -/* 0EB534 7F0B6A04 256B0008 */ addiu $t3, $t3, 8 -/* 0EB538 7F0B6A08 1603FFFA */ bne $s0, $v1, .L7F0B69F4 -/* 0EB53C 7F0B6A0C 00000000 */ nop -.L7F0B6A10: -/* 0EB540 7F0B6A10 000D20C0 */ sll $a0, $t5, 3 -/* 0EB544 7F0B6A14 008D2023 */ subu $a0, $a0, $t5 -/* 0EB548 7F0B6A18 00042080 */ sll $a0, $a0, 2 -/* 0EB54C 7F0B6A1C 2484000F */ addiu $a0, $a0, 0xf -/* 0EB550 7F0B6A20 0081C024 */ and $t8, $a0, $at -/* 0EB554 7F0B6A24 24110004 */ li $s1, 4 -/* 0EB558 7F0B6A28 03002025 */ move $a0, $t8 -/* 0EB55C 7F0B6A2C AFB80024 */ sw $t8, 0x24($sp) -/* 0EB560 7F0B6A30 AFA50028 */ sw $a1, 0x28($sp) -/* 0EB564 7F0B6A34 AFA60048 */ sw $a2, 0x48($sp) -/* 0EB568 7F0B6A38 0C00278D */ jal memaAlloc -/* 0EB56C 7F0B6A3C AFAD003C */ sw $t5, 0x3c($sp) -/* 0EB570 7F0B6A40 8FA50028 */ lw $a1, 0x28($sp) -/* 0EB574 7F0B6A44 8FA60048 */ lw $a2, 0x48($sp) -/* 0EB578 7F0B6A48 104000A3 */ beqz $v0, .L7F0B6CD8 -/* 0EB57C 7F0B6A4C 8FAD003C */ lw $t5, 0x3c($sp) -/* 0EB580 7F0B6A50 ACA2002C */ sw $v0, 0x2c($a1) -/* 0EB584 7F0B6A54 A4AD0030 */ sh $t5, 0x30($a1) -/* 0EB588 7F0B6A58 80D90000 */ lb $t9, ($a2) -/* 0EB58C 7F0B6A5C 00006825 */ move $t5, $zero -/* 0EB590 7F0B6A60 0000F825 */ move $ra, $zero -/* 0EB594 7F0B6A64 1219009C */ beq $s0, $t9, .L7F0B6CD8 -/* 0EB598 7F0B6A68 00C05825 */ move $t3, $a2 -/* 0EB59C 7F0B6A6C 3C0C8008 */ lui $t4, %hi(ptr_bgdata_room_fileposition_list) -/* 0EB5A0 7F0B6A70 258CFF8C */ addiu $t4, %lo(ptr_bgdata_room_fileposition_list) # addiu $t4, $t4, -0x74 -/* 0EB5A4 7F0B6A74 80C30000 */ lb $v1, ($a2) -/* 0EB5A8 7F0B6A78 24098000 */ li $t1, -32768 -/* 0EB5AC 7F0B6A7C 24087FFF */ li $t0, 32767 -.L7F0B6A80: -/* 0EB5B0 7F0B6A80 16230090 */ bne $s1, $v1, .L7F0B6CC4 -/* 0EB5B4 7F0B6A84 000D70C0 */ sll $t6, $t5, 3 -/* 0EB5B8 7F0B6A88 01CD7023 */ subu $t6, $t6, $t5 -/* 0EB5BC 7F0B6A8C 000E7080 */ sll $t6, $t6, 2 -/* 0EB5C0 7F0B6A90 004E2021 */ addu $a0, $v0, $t6 -/* 0EB5C4 7F0B6A94 A49F0000 */ sh $ra, ($a0) -/* 0EB5C8 7F0B6A98 8FAA0050 */ lw $t2, 0x50($sp) -/* 0EB5CC 7F0B6A9C 000DC0C0 */ sll $t8, $t5, 3 -/* 0EB5D0 7F0B6AA0 030DC023 */ subu $t8, $t8, $t5 -/* 0EB5D4 7F0B6AA4 000A7880 */ sll $t7, $t2, 2 -/* 0EB5D8 7F0B6AA8 0018C080 */ sll $t8, $t8, 2 -/* 0EB5DC 7F0B6AAC 01EA7823 */ subu $t7, $t7, $t2 -/* 0EB5E0 7F0B6AB0 000F50C0 */ sll $t2, $t7, 3 -/* 0EB5E4 7F0B6AB4 00581821 */ addu $v1, $v0, $t8 -/* 0EB5E8 7F0B6AB8 00003025 */ move $a2, $zero -.L7F0B6ABC: -/* 0EB5EC 7F0B6ABC 24C60001 */ addiu $a2, $a2, 1 -/* 0EB5F0 7F0B6AC0 28C10003 */ slti $at, $a2, 3 -/* 0EB5F4 7F0B6AC4 24630004 */ addiu $v1, $v1, 4 -/* 0EB5F8 7F0B6AC8 AC680000 */ sw $t0, ($v1) -/* 0EB5FC 7F0B6ACC 1420FFFB */ bnez $at, .L7F0B6ABC -/* 0EB600 7F0B6AD0 AC69000C */ sw $t1, 0xc($v1) -/* 0EB604 7F0B6AD4 91670001 */ lbu $a3, 1($t3) -/* 0EB608 7F0B6AD8 8D6F0004 */ lw $t7, 4($t3) -/* 0EB60C 7F0B6ADC 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff -/* 0EB610 7F0B6AE0 0007C902 */ srl $t9, $a3, 4 -/* 0EB614 7F0B6AE4 332E000F */ andi $t6, $t9, 0xf -/* 0EB618 7F0B6AE8 8FB90044 */ lw $t9, 0x44($sp) -/* 0EB61C 7F0B6AEC 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0EB620 7F0B6AF0 25C70001 */ addiu $a3, $t6, 1 -/* 0EB624 7F0B6AF4 01E1C024 */ and $t8, $t7, $at -/* 0EB628 7F0B6AF8 00003025 */ move $a2, $zero -/* 0EB62C 7F0B6AFC 18E00029 */ blez $a3, .L7F0B6BA4 -/* 0EB630 7F0B6B00 03191821 */ addu $v1, $t8, $t9 -/* 0EB634 7F0B6B04 00602825 */ move $a1, $v1 -.L7F0B6B08: -/* 0EB638 7F0B6B08 84A30000 */ lh $v1, ($a1) -/* 0EB63C 7F0B6B0C 8C8E0004 */ lw $t6, 4($a0) -/* 0EB640 7F0B6B10 24C60001 */ addiu $a2, $a2, 1 -/* 0EB644 7F0B6B14 006E082A */ slt $at, $v1, $t6 -/* 0EB648 7F0B6B18 50200003 */ beql $at, $zero, .L7F0B6B28 -/* 0EB64C 7F0B6B1C 84A30002 */ lh $v1, 2($a1) -/* 0EB650 7F0B6B20 AC830004 */ sw $v1, 4($a0) -/* 0EB654 7F0B6B24 84A30002 */ lh $v1, 2($a1) -.L7F0B6B28: -/* 0EB658 7F0B6B28 8C8F0008 */ lw $t7, 8($a0) -/* 0EB65C 7F0B6B2C 006F082A */ slt $at, $v1, $t7 -/* 0EB660 7F0B6B30 50200003 */ beql $at, $zero, .L7F0B6B40 -/* 0EB664 7F0B6B34 84A30004 */ lh $v1, 4($a1) -/* 0EB668 7F0B6B38 AC830008 */ sw $v1, 8($a0) -/* 0EB66C 7F0B6B3C 84A30004 */ lh $v1, 4($a1) -.L7F0B6B40: -/* 0EB670 7F0B6B40 8C98000C */ lw $t8, 0xc($a0) -/* 0EB674 7F0B6B44 0078082A */ slt $at, $v1, $t8 -/* 0EB678 7F0B6B48 50200003 */ beql $at, $zero, .L7F0B6B58 -/* 0EB67C 7F0B6B4C 84A30000 */ lh $v1, ($a1) -/* 0EB680 7F0B6B50 AC83000C */ sw $v1, 0xc($a0) -/* 0EB684 7F0B6B54 84A30000 */ lh $v1, ($a1) -.L7F0B6B58: -/* 0EB688 7F0B6B58 8C990010 */ lw $t9, 0x10($a0) -/* 0EB68C 7F0B6B5C 0323082A */ slt $at, $t9, $v1 -/* 0EB690 7F0B6B60 50200003 */ beql $at, $zero, .L7F0B6B70 -/* 0EB694 7F0B6B64 84A30002 */ lh $v1, 2($a1) -/* 0EB698 7F0B6B68 AC830010 */ sw $v1, 0x10($a0) -/* 0EB69C 7F0B6B6C 84A30002 */ lh $v1, 2($a1) -.L7F0B6B70: -/* 0EB6A0 7F0B6B70 8C8E0014 */ lw $t6, 0x14($a0) -/* 0EB6A4 7F0B6B74 01C3082A */ slt $at, $t6, $v1 -/* 0EB6A8 7F0B6B78 50200003 */ beql $at, $zero, .L7F0B6B88 -/* 0EB6AC 7F0B6B7C 84A30004 */ lh $v1, 4($a1) -/* 0EB6B0 7F0B6B80 AC830014 */ sw $v1, 0x14($a0) -/* 0EB6B4 7F0B6B84 84A30004 */ lh $v1, 4($a1) -.L7F0B6B88: -/* 0EB6B8 7F0B6B88 8C8F0018 */ lw $t7, 0x18($a0) -/* 0EB6BC 7F0B6B8C 01E3082A */ slt $at, $t7, $v1 -/* 0EB6C0 7F0B6B90 10200002 */ beqz $at, .L7F0B6B9C -/* 0EB6C4 7F0B6B94 00000000 */ nop -/* 0EB6C8 7F0B6B98 AC830018 */ sw $v1, 0x18($a0) -.L7F0B6B9C: -/* 0EB6CC 7F0B6B9C 14C7FFDA */ bne $a2, $a3, .L7F0B6B08 -/* 0EB6D0 7F0B6BA0 24A50010 */ addiu $a1, $a1, 0x10 -.L7F0B6BA4: -/* 0EB6D4 7F0B6BA4 8C830010 */ lw $v1, 0x10($a0) -/* 0EB6D8 7F0B6BA8 8C980004 */ lw $t8, 4($a0) -/* 0EB6DC 7F0B6BAC 24790001 */ addiu $t9, $v1, 1 -/* 0EB6E0 7F0B6BB0 57030003 */ bnel $t8, $v1, .L7F0B6BC0 -/* 0EB6E4 7F0B6BB4 8C830014 */ lw $v1, 0x14($a0) -/* 0EB6E8 7F0B6BB8 AC990010 */ sw $t9, 0x10($a0) -/* 0EB6EC 7F0B6BBC 8C830014 */ lw $v1, 0x14($a0) -.L7F0B6BC0: -/* 0EB6F0 7F0B6BC0 8C8E0008 */ lw $t6, 8($a0) -/* 0EB6F4 7F0B6BC4 246F0001 */ addiu $t7, $v1, 1 -/* 0EB6F8 7F0B6BC8 55C30003 */ bnel $t6, $v1, .L7F0B6BD8 -/* 0EB6FC 7F0B6BCC 8C83000C */ lw $v1, 0xc($a0) -/* 0EB700 7F0B6BD0 AC8F0014 */ sw $t7, 0x14($a0) -/* 0EB704 7F0B6BD4 8C83000C */ lw $v1, 0xc($a0) -.L7F0B6BD8: -/* 0EB708 7F0B6BD8 8C850018 */ lw $a1, 0x18($a0) -/* 0EB70C 7F0B6BDC 14650003 */ bne $v1, $a1, .L7F0B6BEC -/* 0EB710 7F0B6BE0 24B80001 */ addiu $t8, $a1, 1 -/* 0EB714 7F0B6BE4 AC980018 */ sw $t8, 0x18($a0) -/* 0EB718 7F0B6BE8 8C83000C */ lw $v1, 0xc($a0) -.L7F0B6BEC: -/* 0EB71C 7F0B6BEC 8D8E0000 */ lw $t6, ($t4) -/* 0EB720 7F0B6BF0 8C990004 */ lw $t9, 4($a0) -/* 0EB724 7F0B6BF4 8C980008 */ lw $t8, 8($a0) -/* 0EB728 7F0B6BF8 01CA7821 */ addu $t7, $t6, $t2 -/* 0EB72C 7F0B6BFC C5E4000C */ lwc1 $f4, 0xc($t7) -/* 0EB730 7F0B6C00 25AD0001 */ addiu $t5, $t5, 1 -/* 0EB734 7F0B6C04 4600218D */ trunc.w.s $f6, $f4 -/* 0EB738 7F0B6C08 440E3000 */ mfc1 $t6, $f6 -/* 0EB73C 7F0B6C0C 00000000 */ nop -/* 0EB740 7F0B6C10 032E7821 */ addu $t7, $t9, $t6 -/* 0EB744 7F0B6C14 AC8F0004 */ sw $t7, 4($a0) -/* 0EB748 7F0B6C18 8D990000 */ lw $t9, ($t4) -/* 0EB74C 7F0B6C1C 032A7021 */ addu $t6, $t9, $t2 -/* 0EB750 7F0B6C20 C5C80010 */ lwc1 $f8, 0x10($t6) -/* 0EB754 7F0B6C24 4600428D */ trunc.w.s $f10, $f8 -/* 0EB758 7F0B6C28 44195000 */ mfc1 $t9, $f10 -/* 0EB75C 7F0B6C2C 00000000 */ nop -/* 0EB760 7F0B6C30 03197021 */ addu $t6, $t8, $t9 -/* 0EB764 7F0B6C34 AC8E0008 */ sw $t6, 8($a0) -/* 0EB768 7F0B6C38 8D8F0000 */ lw $t7, ($t4) -/* 0EB76C 7F0B6C3C 01EAC021 */ addu $t8, $t7, $t2 -/* 0EB770 7F0B6C40 C7100014 */ lwc1 $f16, 0x14($t8) -/* 0EB774 7F0B6C44 8C980010 */ lw $t8, 0x10($a0) -/* 0EB778 7F0B6C48 4600848D */ trunc.w.s $f18, $f16 -/* 0EB77C 7F0B6C4C 440E9000 */ mfc1 $t6, $f18 -/* 0EB780 7F0B6C50 00000000 */ nop -/* 0EB784 7F0B6C54 006E7821 */ addu $t7, $v1, $t6 -/* 0EB788 7F0B6C58 AC8F000C */ sw $t7, 0xc($a0) -/* 0EB78C 7F0B6C5C 8D990000 */ lw $t9, ($t4) -/* 0EB790 7F0B6C60 8C8F0014 */ lw $t7, 0x14($a0) -/* 0EB794 7F0B6C64 032A7021 */ addu $t6, $t9, $t2 -/* 0EB798 7F0B6C68 C5C4000C */ lwc1 $f4, 0xc($t6) -/* 0EB79C 7F0B6C6C 4600218D */ trunc.w.s $f6, $f4 -/* 0EB7A0 7F0B6C70 44193000 */ mfc1 $t9, $f6 -/* 0EB7A4 7F0B6C74 00000000 */ nop -/* 0EB7A8 7F0B6C78 03197021 */ addu $t6, $t8, $t9 -/* 0EB7AC 7F0B6C7C AC8E0010 */ sw $t6, 0x10($a0) -/* 0EB7B0 7F0B6C80 8D980000 */ lw $t8, ($t4) -/* 0EB7B4 7F0B6C84 8C8E0018 */ lw $t6, 0x18($a0) -/* 0EB7B8 7F0B6C88 030AC821 */ addu $t9, $t8, $t2 -/* 0EB7BC 7F0B6C8C C7280010 */ lwc1 $f8, 0x10($t9) -/* 0EB7C0 7F0B6C90 4600428D */ trunc.w.s $f10, $f8 -/* 0EB7C4 7F0B6C94 44185000 */ mfc1 $t8, $f10 -/* 0EB7C8 7F0B6C98 00000000 */ nop -/* 0EB7CC 7F0B6C9C 01F8C821 */ addu $t9, $t7, $t8 -/* 0EB7D0 7F0B6CA0 AC990014 */ sw $t9, 0x14($a0) -/* 0EB7D4 7F0B6CA4 8D8F0000 */ lw $t7, ($t4) -/* 0EB7D8 7F0B6CA8 01EAC021 */ addu $t8, $t7, $t2 -/* 0EB7DC 7F0B6CAC C7100014 */ lwc1 $f16, 0x14($t8) -/* 0EB7E0 7F0B6CB0 4600848D */ trunc.w.s $f18, $f16 -/* 0EB7E4 7F0B6CB4 440F9000 */ mfc1 $t7, $f18 -/* 0EB7E8 7F0B6CB8 00000000 */ nop -/* 0EB7EC 7F0B6CBC 01CFC021 */ addu $t8, $t6, $t7 -/* 0EB7F0 7F0B6CC0 AC980018 */ sw $t8, 0x18($a0) -.L7F0B6CC4: -/* 0EB7F4 7F0B6CC4 81630008 */ lb $v1, 8($t3) -/* 0EB7F8 7F0B6CC8 27FF0001 */ addiu $ra, $ra, 1 -/* 0EB7FC 7F0B6CCC 256B0008 */ addiu $t3, $t3, 8 -/* 0EB800 7F0B6CD0 1603FF6B */ bne $s0, $v1, .L7F0B6A80 -/* 0EB804 7F0B6CD4 00000000 */ nop -.L7F0B6CD8: -/* 0EB808 7F0B6CD8 8FBF001C */ lw $ra, 0x1c($sp) -/* 0EB80C 7F0B6CDC 8FB00014 */ lw $s0, 0x14($sp) -/* 0EB810 7F0B6CE0 8FB10018 */ lw $s1, 0x18($sp) -/* 0EB814 7F0B6CE4 03E00008 */ jr $ra -/* 0EB818 7F0B6CE8 27BD0050 */ addiu $sp, $sp, 0x50 -) -#endif - - -bool bgTestLineIntersectsBbox(coord3d *arg0, coord3d *arg1, s32 *arg2, s32 *arg3) +void bgBuildRoomVtxBounds(s32 roomID) { - coord3d arg2f; - coord3d arg3f; + s32 cmdindex; + Gfx *gdl; + Vtx *vertices; + RoomVtxBatchBounds *points; + s32 numpoints; + RoomVtxBatchBounds *point; + s32 i; + s32 numvertices; + Vtx *vtx; + + // Check if a cached bounding box is already present for this room + if (g_BgRoomInfo[roomID].vtx_batch_bounds != NULL) + { + return; + } + + gdl = g_BgRoomInfo[roomID].ptr_expanded_mapping_info; + + vertices = g_BgRoomInfo[roomID].vertices; + cmdindex = 0; + numpoints = 0; + + while (gdl[cmdindex].dma.cmd != G_ENDDL) + { + if (gdl[cmdindex].dma.cmd == G_VTX) + { + numpoints++; + } + cmdindex++; + } + + points = memaAlloc(ALIGN16(numpoints * sizeof(RoomVtxBatchBounds))); + + if (ALIGN16(numpoints * sizeof(RoomVtxBatchBounds))) {} + + if (points == NULL) + { + return; + } + + g_BgRoomInfo[roomID].vtx_batch_bounds = points; + g_BgRoomInfo[roomID].num_vtx_batch_bounds = numpoints; + + numpoints = 0; + cmdindex = 0; + + while (gdl[cmdindex].dma.cmd != G_ENDDL) + { + if (gdl[cmdindex].dma.cmd == G_VTX) + { + point = &points[numpoints]; + + points[numpoints].gdlindex = cmdindex; + + for (i = 0; i < 3; i++) + { + points[numpoints].min[i] = 0x7fff; + points[numpoints].max[i] = -0x8000; + } + + numvertices = ((gdl[cmdindex].dma.par >> 4) & 0xf) + 1; + + vtx = (Vtx *)(SEGMENT_OFFSET(gdl[cmdindex].dma.addr) + (u32)vertices); + + for (i = 0; i < numvertices; i++) + { + if (points[numpoints].xmin > vtx[i].v.ob[0]) + { + points[numpoints].xmin = vtx[i].v.ob[0]; + } + + if (points[numpoints].ymin > vtx[i].v.ob[1]) + { + points[numpoints].ymin = vtx[i].v.ob[1]; + } + + if (points[numpoints].zmin > vtx[i].v.ob[2]) + { + points[numpoints].zmin = vtx[i].v.ob[2]; + } + + if (points[numpoints].xmax < vtx[i].v.ob[0]) + { + points[numpoints].xmax = vtx[i].v.ob[0]; + } + + if (points[numpoints].ymax < vtx[i].v.ob[1]) + { + points[numpoints].ymax = vtx[i].v.ob[1]; + } + + if (points[numpoints].zmax < vtx[i].v.ob[2]) + { + points[numpoints].zmax = vtx[i].v.ob[2]; + } + } + + + if (points[numpoints].xmin == points[numpoints].xmax) + { + points[numpoints].xmax++; + } + + if (points[numpoints].ymin == points[numpoints].ymax) + { + points[numpoints].ymax++; + } + + if (points[numpoints].zmin == points[numpoints].zmax) + { + points[numpoints].zmax++; + } + + + points[numpoints].xmin += (s32)ptr_bgdata_room_fileposition_list[roomID].pos.x; + points[numpoints].ymin += (s32)ptr_bgdata_room_fileposition_list[roomID].pos.y; + points[numpoints].zmin += (s32)ptr_bgdata_room_fileposition_list[roomID].pos.z; + + points[numpoints].xmax += (s32)ptr_bgdata_room_fileposition_list[roomID].pos.x; + points[numpoints].ymax += (s32)ptr_bgdata_room_fileposition_list[roomID].pos.y; + points[numpoints].zmax += (s32)ptr_bgdata_room_fileposition_list[roomID].pos.z; + numpoints++; + } + cmdindex++; + } +} + +#undef ALIGN16 +#undef SEGMENT_OFFSET + + +/** + * Slab method ray vs axis aligned bounding box test, written to be division-free. + */ +bool bgTestRayIntersectsBbox(coord3d *origin, coord3d *dir, s32 *bbox_min, s32 *bbox_max) +{ + coord3d bbox_min_f; + coord3d bbox_max_f; u32 stack[4]; f32 f0; f32 f0_2; @@ -6337,18 +2903,18 @@ bool bgTestLineIntersectsBbox(coord3d *arg0, coord3d *arg1, s32 *arg2, s32 *arg3 f32 f14; f32 f14_2; - arg2f.f[0] = arg2[0]; - arg2f.f[1] = arg2[1]; - arg2f.f[2] = arg2[2]; + bbox_min_f.f[0] = bbox_min[0]; + bbox_min_f.f[1] = bbox_min[1]; + bbox_min_f.f[2] = bbox_min[2]; - arg3f.f[0] = arg3[0]; - arg3f.f[1] = arg3[1]; - arg3f.f[2] = arg3[2]; + bbox_max_f.f[0] = bbox_max[0]; + bbox_max_f.f[1] = bbox_max[1]; + bbox_max_f.f[2] = bbox_max[2]; // x - f18 = arg1->x; - f16 = arg3f.x - arg0->x; - f14 = arg2f.x - arg0->x; + f18 = dir->x; + f16 = bbox_max_f.x - origin->x; + f14 = bbox_min_f.x - origin->x; if (f18 < 0.0f) { @@ -6370,9 +2936,9 @@ bool bgTestLineIntersectsBbox(coord3d *arg0, coord3d *arg1, s32 *arg2, s32 *arg3 } // y - f12 = arg1->y; - f2 = arg3f.y - arg0->y; - f0 = arg2f.y - arg0->y; + f12 = dir->y; + f2 = bbox_max_f.y - origin->y; + f0 = bbox_min_f.y - origin->y; if (f12 < 0.0f) { @@ -6429,9 +2995,9 @@ bool bgTestLineIntersectsBbox(coord3d *arg0, coord3d *arg1, s32 *arg2, s32 *arg3 } // z - f2_2 = arg1->z; - f12_2 = arg3f.z - arg0->z; - f18_2 = arg2f.z - arg0->z; + f2_2 = dir->z; + f12_2 = bbox_max_f.z - origin->z; + f18_2 = bbox_min_f.z - origin->z; if (f2_2 < 0.0f) { @@ -6471,2278 +3037,911 @@ bool bgTestLineIntersectsBbox(coord3d *arg0, coord3d *arg1, s32 *arg2, s32 *arg3 } -#ifdef NONMATCHING -?32 bgTestLineIntersectionInRoom(void *arg0, s32 arg1, ?32 arg2, void *arg3, s32 arg4, void *arg5) { - s32 sp54; - void *sp64; - s32 sp80; - s32 sp84; - s32 sp88; - s32 sp8C; - s32 sp90; - s32 sp94; - s32 sp9C; - s32 spA0; - s32 spA4; - ? spA8; - s32 spC8; - s32 spCC; - s32 spD0; - s32 spD4; - s32 spD8; - s32 spDC; - s32 spE4; - s32 spE8; - s32 spEC; - s32 spF0; - f32 spF8; - ?32 sp12C; - void *temp_t0; - void *temp_s3; - s32 temp_t2; - s32 temp_s1; - void *temp_a0; - void *temp_v1; - void *temp_v0; - void *temp_v0_4; - u32 temp_v0_5; - void *temp_a0_2; - void *temp_v1_2; - void *temp_v0_2; - void *temp_v0_6; - u32 temp_v0_7; - s32 temp_s5; - s32 temp_v0_3; - s32 phi_v0; - void *phi_s3; - void *phi_a0; - void *phi_v0_2; - void *phi_v0_3; - s16 phi_s0; - s32 phi_s5; - void *phi_a0_2; - void *phi_t0; - void *phi_v0_4; - void *phi_v0_5; - s16 phi_s0_2; - void *phi_t0_2; +bool bgTestRayIntersectionInRoom(coord3d *from, coord3d *to, coord3d *dir, RoomVtxBatchBounds *point, s32 roomnum, struct HitThing *hitthing) +{ + Vertex *vtxbase; + Vertex *v; - // Node 0 - temp_t0 = ((arg4 * 0x50) + &g_BgRoomInfo); - temp_s3 = ((*arg3 * 8) + temp_t0->unk8); - spF0 = 0x7fffffff; - sp12C = 0; - temp_t2 = (temp_s3->unk1 & 0xf); - temp_s1 = ((temp_s3->unk4 & 0xffffff) + temp_t0->unk4); - if (temp_s3->unk8 != 4) + union { + s32 word; + Vertex *vertices; + s_room_info *roominfo; + } temp; + + s32 op; + s32 found; + Gfx *gdl; + HitThing hitbuf; + Gfx *tcmd; + s32 bestScore; + s32 idx[3]; + s32 vtxoff; + BoundVec bboxMin; + BoundVec bboxMax; + s32 *p; + s32 i; + s32 s2; + s32 texnum; + s32 dx; + s32 dy; + s32 dz; + s32 dist; + s32 idx2[3]; + s32 score; + BoundVec bboxMin2; + BoundVec bboxMax2; + + struct { + s32 unused; + s_room_info *roominfo; + s32 padding[6]; + } local; + + gdl = (Gfx *) g_BgRoomInfo[roomnum].ptr_expanded_mapping_info; + gdl = &gdl[point->gdlindex]; + vtxoff = ((u8 *) gdl)[1] & 0xf; + temp.vertices = (Vertex *)g_BgRoomInfo[roomnum].vertices; + vtxbase = (Vertex *)((s32)temp.vertices + (((u32 *)gdl)[1] & 0x00ffffff)); + temp.roominfo = &g_BgRoomInfo[roomnum]; + bestScore = 0x7FFFFFFF; + found = 0; + gdl++; + op = *((s8 *) gdl); + + if ((op != G_VTX) && (op != ((s8) G_ENDDL))) { - // Node 1 - if (temp_s3->unk8 != -0x48) + local.roominfo = temp.roominfo; + + do { - // Node 2 - sp64 = temp_t0; - phi_v0 = temp_s3->unk8; - phi_s3 = (temp_s3 + 8); - phi_t0_2 = &spA8; -loop_3: - // Node 3 - if (phi_v0 == -0x41) + if (op == ((s8) G_TRI1)) { - // Node 4 - spD4 = (?32) D_80044868; - spD4.unk4 = (?32) D_80044868.unk4; - spD4.unk8 = (?32) D_80044868.unk8; - spC8 = (?32) D_80044874; - spC8.unk4 = (?32) D_80044874.unk4; - spC8.unk8 = (?32) D_80044874.unk8; - spE4 = (s32) (((s32) phi_s3->unk5 / 0xa) - temp_t2); - spE8 = (s32) (((s32) phi_s3->unk6 / 0xa) - temp_t2); - spEC = (s32) (((s32) phi_s3->unk7 / 0xa) - temp_t2); - sp54 = (s32) (arg4 * 0x18); - phi_a0 = &spE4; -loop_5: - // Node 5 - temp_a0 = (phi_a0 + 4); - temp_v1 = (temp_s1 + (*phi_a0 * 0x10)); - if (*temp_v1 < spD4) + bboxMin = D_80044868; + bboxMax = D_80044874; + score = dist; + idx[0] = (((u8 *) gdl)[5] / 10) - vtxoff; + idx[1] = (((u8 *) gdl)[6] / 10) - vtxoff; + idx[2] = (((u8 *) gdl)[7] / 10) - vtxoff; + i = 0; + + do { - // Node 6 - spD4 = (s32) *temp_v1; - } - // Node 7 - if (spC8 < *temp_v1) - { - // Node 8 - spC8 = (s32) *temp_v1; - } - // Node 9 - if (temp_v1->unk2 < spD8) - { - // Node 10 - spD8 = (s32) temp_v1->unk2; - } - // Node 11 - if (spCC < temp_v1->unk2) - { - // Node 12 - spCC = (s32) temp_v1->unk2; - } - // Node 13 - if (temp_v1->unk4 < spDC) - { - // Node 14 - spDC = (s32) temp_v1->unk4; - } - // Node 15 - if (spD0 < temp_v1->unk4) - { - // Node 16 - spD0 = (s32) temp_v1->unk4; - } - // Node 17 - phi_a0 = temp_a0; - if (temp_a0 != &spF0) - { - goto loop_5; - } - // Node 18 - temp_v0 = (ptr_bgdata_room_fileposition_list + sp54); - spD4 = (s32) (spD4 + (s32) temp_v0->unkC); - spD8 = (s32) (spD8 + (s32) temp_v0->unk10); - spDC = (s32) (spDC + (s32) temp_v0->unk14); - spC8 = (s32) (spC8 + (s32) temp_v0->unkC); - spCC = (s32) (spCC + (s32) temp_v0->unk10); - spD0 = (s32) (spD0 + (s32) temp_v0->unk14); - phi_t0_2 = &spA8; - if (bgTestLineIntersectsBbox(arg0, arg2, &spD4, &spC8) != 0) - { - // Node 19 - phi_t0_2 = &spA8; - if (intersectLineTriangle((temp_s1 + (spE4 * 0x10)), (temp_s1 + (spE8 * 0x10)), (temp_s1 + (spEC * 0x10)), ((sp54 + ptr_bgdata_room_fileposition_list) + 0xc), arg0, arg1, arg2, &spF8) != 0) + v = vtxbase; + v += idx[i]; + + if (v->coord.x < bboxMin.x) { - // Node 20 - temp_v0_4 = phi_s3; - sp12C = 1; - phi_v0_3 = temp_v0_4; - if (0xfd != *phi_s3) + bboxMin.x = v->coord.x; + } + if (bboxMax.x < v->coord.x) + { + bboxMax.x = v->coord.x; + } + if (v->coord.y < bboxMin.y) + { + bboxMin.y = v->coord.y; + } + if (bboxMax.y < v->coord.y) + { + bboxMax.y = v->coord.y; + } + + if (roomnum); + + if (v->coord.z < bboxMin.z) + { + bboxMin.z = v->coord.z; + } + if (bboxMax.z < v->coord.z) + { + bboxMax.z = v->coord.z; + } + i++; + } + while (i < 3); + + bboxMin.x += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.x; + bboxMin.y += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.y; + bboxMin.z += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.z; + bboxMax.x += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.x; + bboxMax.y += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.y; + bboxMax.z += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.z; + + if (bgTestRayIntersectsBbox(from, dir, (s32 *) (&bboxMin), (s32 *) (&bboxMax))) + { + if (intersectRayTriangle((Vertex *)((s32)vtxbase - (0 - (idx[0] << 4))), (Vertex *)((s32)vtxbase - (0 - (idx[1] << 4))), (Vertex *)((s32)vtxbase - (0 - (idx[2] << 4))), (coord3d *) (((roomnum * 24) + ((s32) ptr_bgdata_room_fileposition_list)) + 12), from, to, dir, &hitbuf)) + { + tcmd = gdl; + dx = ((s32) hitbuf.hitpos.x) - ((s32) from->x); + dy = ((s32) hitbuf.hitpos.y) - ((s32) from->y); + dz = ((s32) hitbuf.hitpos.z) - ((s32) from->z); + dist = ((dx * dx) + (dy * dy)) + (dz * dz); + score = dist; + found = 1; + + if (((*((u8 *) gdl)) != G_SETTIMG) && (dist || vtxbase || 1) && (((Gfx *) local.roominfo->ptr_expanded_mapping_info) < gdl)) { - // Node 21 - phi_v0_2 = temp_v0_4; - phi_v0_3 = temp_v0_4; - if ((u32) sp64->unk8 < (u32) phi_s3) + do { -loop_22: - // Node 22 - temp_v0_5 = (phi_v0_2 + -8); - phi_v0_3 = temp_v0_5; - if (0xfd != phi_v0_2->unk-8) + tcmd--; + if ((*((u8 *) tcmd)) == G_SETTIMG) { - // Node 23 - phi_v0_2 = temp_v0_5; - phi_v0_3 = temp_v0_5; - if ((u32) sp64->unk8 < temp_v0_5) - { - goto loop_22; - } + break; } } + while (((Gfx *) local.roominfo->ptr_expanded_mapping_info) < tcmd); } - // Node 24 - if (phi_v0_3 == sp64->unk8) + + if (tcmd == ((Gfx *) local.roominfo->ptr_expanded_mapping_info)) { - // Node 25 - phi_s0 = (u16)-1; + texnum = -1; } else { - // Node 26 - phi_s0 = *((phi_v0_3->unk4 + -8) | 0x80000000); + temp.word = ((u32 *) tcmd)[1] - 8; + texnum = *((u16 *) (temp.word | 0x80000000)); } - // Node 27 - if (check_if_imageID_is_light(phi_s0, ((s32) sp100 - (s32) arg0->unk8), arg0) != 0) + + if (check_if_imageID_is_light(texnum)) { - // Node 28 + score = dist - 4; } - // Node 29 - phi_t0_2 = &spA8; - if (0x4fd != 0) + + if (dist); + + // Texture 0x4FD is used for the light shafts that come through windows in Archives. + if ((score < bestScore) && (texnum != 0x4FD)) { - // Node 30 - phi_t0_2 = &spA8; - if (phi_s0 != 0x4fd) - { - // Node 31 - *arg5 = spF8; - arg5->unk4 = spFC; - arg5->unk8 = sp100; - arg5->unkC = sp104; - arg5->unk10 = sp108; - arg5->unk14 = sp10C; - arg5->unk18 = (s32) ((spE4 * 0x10) + temp_s1); - arg5->unk1C = (s32) ((spE8 * 0x10) + temp_s1); - arg5->unk2A = (s16) phi_s0; - arg5->unk24 = (void *) phi_s3; - arg5->unk20 = (s32) ((spEC * 0x10) + temp_s1); - arg5->unk28 = (u16)0; - phi_t0_2 = &spA8; - } + bestScore = score; + hitthing->hitpos.x = hitbuf.hitpos.x; + hitthing->hitpos.y = hitbuf.hitpos.y; + hitthing->hitpos.z = hitbuf.hitpos.z; + hitthing->normal.x = hitbuf.normal.x; + hitthing->normal.y = hitbuf.normal.y; + hitthing->normal.z = hitbuf.normal.z; + hitthing->vtx0 = &vtxbase[idx[0]]; + hitthing->vtx1 = &vtxbase[idx[1]]; + hitthing->vtx2 = &vtxbase[idx[2]]; + hitthing->texturenum = texnum; + hitthing->tricmd = gdl; + hitthing->unk28 = 0; } } } } else { - // Node 32 - phi_t0_2 = phi_t0_2; - if (phi_v0 == -0x4f) + if (op == ((s8) G_TRI4)) { - // Node 33 - sp54 = (s32) (arg4 * 0x18); - phi_s5 = 0; - phi_t0 = phi_t0_2; -loop_34: - // Node 34 - sp8C = (?32) D_80044880; - sp8C.unk4 = (?32) D_80044880.unk4; - sp8C.unk8 = (?32) D_80044880.unk8; - sp80 = (?32) D_8004488C; - sp80.unk4 = (?32) D_8004488C.unk4; - sp80.unk8 = (?32) D_8004488C.unk8; - if (phi_s5 == 0) + // Keep this line as-is for matching. + s2 = 0; do { - // Node 35 - sp9C = (s32) ((phi_s3->unk4 & 0xf) - temp_t2); - spA0 = (s32) (((u32) phi_s3->unk7 >> 4) - temp_t2); - spA4 = (s32) ((*phi_s3 & 0xf) - temp_t2); - } - else - { - // Node 36 - if (phi_s5 == 1) + bboxMin2 = D_80044880; + bboxMax2 = D_8004488C; + + if (s2 == 0) { - // Node 37 - sp9C = (s32) ((phi_s3->unk6 & 0xf) - temp_t2); - spA0 = (s32) (((u32) phi_s3->unk6 >> 0xc) - temp_t2); - spA4 = (s32) (((u32) phi_s3->unk3 >> 4) - temp_t2); + idx2[0] = (((u32 *) gdl)[1] & 0xf) - vtxoff; + idx2[1] = (((u32) ((u8 *) gdl)[7]) >> 4) - vtxoff; + idx2[2] = (((u32 *) gdl)[0] & 0xf) - vtxoff; + } + else if (s2 == 1) + { + idx2[0] = (((u8 *) gdl)[6] & 0xf) - vtxoff; + idx2[1] = (((u32) ((u16 *) gdl)[3]) >> 12) - vtxoff; + idx2[2] = (((u32) ((u8 *) gdl)[3]) >> 4) - vtxoff; + } + else if (s2 == 2) + { + idx2[0] = (((u16 *) gdl)[2] & 0xf) - vtxoff; + idx2[1] = (((u32) ((u8 *) gdl)[5]) >> 4) - vtxoff; + idx2[2] = (((u8 *) gdl)[2] & 0xf) - vtxoff; } else { - // Node 38 - if (phi_s5 == 2) - { - // Node 39 - sp9C = (s32) ((phi_s3->unk4 & 0xf) - temp_t2); - spA0 = (s32) (((u32) phi_s3->unk5 >> 4) - temp_t2); - spA4 = (s32) ((phi_s3->unk2 & 0xf) - temp_t2); - } - else - { - // Node 40 - sp9C = (s32) ((phi_s3->unk4 & 0xf) - temp_t2); - spA0 = (s32) (((u32) phi_s3->unk4 >> 0x1c) - temp_t2); - spA4 = (s32) (((u32) phi_s3->unk2 >> 0xc) - temp_t2); - } + idx2[0] = (((u8 *) gdl)[4] & 0xf) - vtxoff; + idx2[1] = (((u32 *) gdl)[1] >> 28) - vtxoff; + idx2[2] = (((u32) ((u16 *) gdl)[1]) >> 12) - vtxoff; } - } - // Node 41 - phi_a0_2 = &sp9C; -loop_42: - // Node 42 - temp_a0_2 = (phi_a0_2 + 4); - temp_v1_2 = (temp_s1 + (*phi_a0_2 * 0x10)); - if (*temp_v1_2 < sp8C) - { - // Node 43 - sp8C = (s32) *temp_v1_2; - } - // Node 44 - if (sp80 < *temp_v1_2) - { - // Node 45 - sp80 = (s32) *temp_v1_2; - } - // Node 46 - if (temp_v1_2->unk2 < sp90) - { - // Node 47 - sp90 = (s32) temp_v1_2->unk2; - } - // Node 48 - if (sp84 < temp_v1_2->unk2) - { - // Node 49 - sp84 = (s32) temp_v1_2->unk2; - } - // Node 50 - if (temp_v1_2->unk4 < sp94) - { - // Node 51 - sp94 = (s32) temp_v1_2->unk4; - } - // Node 52 - if (sp88 < temp_v1_2->unk4) - { - // Node 53 - sp88 = (s32) temp_v1_2->unk4; - } - // Node 54 - phi_a0_2 = temp_a0_2; - if (temp_a0_2 != phi_t0) - { - goto loop_42; - } - // Node 55 - temp_v0_2 = (ptr_bgdata_room_fileposition_list + sp54); - sp8C = (s32) (sp8C + (s32) temp_v0_2->unkC); - sp90 = (s32) (sp90 + (s32) temp_v0_2->unk10); - sp94 = (s32) (sp94 + (s32) temp_v0_2->unk14); - sp80 = (s32) (sp80 + (s32) temp_v0_2->unkC); - sp84 = (s32) (sp84 + (s32) temp_v0_2->unk10); - sp88 = (s32) (sp88 + (s32) temp_v0_2->unk14); - if (bgTestLineIntersectsBbox(arg0, arg2, &sp8C, &sp80) != 0) - { - // Node 56 - if (intersectLineTriangle((temp_s1 + (sp9C * 0x10)), (temp_s1 + (spA0 * 0x10)), (temp_s1 + (spA4 * 0x10)), ((sp54 + ptr_bgdata_room_fileposition_list) + 0xc), arg0, arg1, arg2, &spF8) != 0) + + i = 0; + + do { - // Node 57 - temp_v0_6 = phi_s3; - sp12C = 1; - phi_v0_5 = temp_v0_6; - if (0xfd != *phi_s3) + v = vtxbase; + v += idx2[i]; + if (v->coord.x < bboxMin2.x) { - // Node 58 - phi_v0_4 = temp_v0_6; - phi_v0_5 = temp_v0_6; - if ((u32) sp64->unk8 < (u32) phi_s3) + bboxMin2.x = v->coord.x; + } + if (bboxMax2.x < v->coord.x) + { + bboxMax2.x = v->coord.x; + } + if (v->coord.y < bboxMin2.y) + { + bboxMin2.y = v->coord.y; + } + if (bboxMax2.y < v->coord.y) + { + bboxMax2.y = v->coord.y; + } + if (v->coord.z < bboxMin2.z) + { + bboxMin2.z = v->coord.z; + } + if (bboxMax2.z < v->coord.z) + { + bboxMax2.z = v->coord.z; + } + i++; + } + while (i < 3); + + bboxMin2.x += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.x; + bboxMin2.y += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.y; + bboxMin2.z += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.z; + bboxMax2.x += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.x; + bboxMax2.y += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.y; + bboxMax2.z += (s32) ptr_bgdata_room_fileposition_list[roomnum].pos.z; + + if (bgTestRayIntersectsBbox(from, dir, (s32 *) (&bboxMin2), (s32 *) (&bboxMax2))) + { + if (intersectRayTriangle((Vertex *)((s32)vtxbase - (0 - (idx2[0] << 4))), (Vertex *)((s32)vtxbase - (0 - (idx2[1] << 4))), (Vertex *)((s32)vtxbase - (0 - (idx2[2] << 4))), (coord3d *) (((roomnum * 24) + ((s32) ptr_bgdata_room_fileposition_list)) + 12), from, to, dir, &hitbuf)) + { + tcmd = gdl; + dx = ((s32) hitbuf.hitpos.x) - ((s32) from->x); + dy = ((s32) hitbuf.hitpos.y) - ((s32) from->y); + dz = ((s32) hitbuf.hitpos.z) - ((s32) from->z); + dist = ((dx * dx) + (dy * dy)) + (dz * dz); + score = dist; + found = 1; + + if (((*((u8 *) gdl)) != G_SETTIMG) && (dist || vtxbase || 1) && (((Gfx *) local.roominfo->ptr_expanded_mapping_info) < gdl)) { -loop_59: - // Node 59 - temp_v0_7 = (phi_v0_4 + -8); - phi_v0_5 = temp_v0_7; - if (0xfd != phi_v0_4->unk-8) + do { - // Node 60 - phi_v0_4 = temp_v0_7; - phi_v0_5 = temp_v0_7; - if ((u32) sp64->unk8 < temp_v0_7) + tcmd--; + if ((*((u8 *) tcmd)) == G_SETTIMG) { - goto loop_59; + break; } } + while (((Gfx *) local.roominfo->ptr_expanded_mapping_info) < tcmd); } - } - // Node 61 - if (phi_v0_5 == sp64->unk8) - { - // Node 62 - phi_s0_2 = (u16)-1; - } - else - { - // Node 63 - phi_s0_2 = *((phi_v0_5->unk4 + -8) | 0x80000000); - } - // Node 64 - if (check_if_imageID_is_light(phi_s0_2, ((s32) sp100 - (s32) arg0->unk8), arg0) != 0) - { - // Node 65 - } - // Node 66 - if (0x4fd != 0) - { - // Node 67 - if (phi_s0_2 != 0x4fd) + + if (tcmd == ((Gfx *) local.roominfo->ptr_expanded_mapping_info)) { - // Node 68 - *arg5 = spF8; - arg5->unk4 = spFC; - arg5->unk8 = sp100; - arg5->unkC = sp104; - arg5->unk10 = sp108; - arg5->unk14 = sp10C; - arg5->unk18 = (s32) ((sp9C * 0x10) + temp_s1); - arg5->unk1C = (s32) ((spA0 * 0x10) + temp_s1); - arg5->unk2A = (s16) phi_s0_2; - arg5->unk24 = (void *) phi_s3; - arg5->unk20 = (s32) ((spA4 * 0x10) + temp_s1); - arg5->unk28 = (s16) (phi_s5 + 1); + texnum = -1; + } + else + { + temp.word = ((u32 *) tcmd)[1] - 8; + texnum = *((u16 *) (temp.word | 0x80000000)); + } + + if (check_if_imageID_is_light(texnum)) + { + score = dist - 4; + } + + if ((score || dist)); + + if ((score < bestScore) && (texnum != 0x4FD)) + { + bestScore = score; + hitthing->hitpos.x = hitbuf.hitpos.x; + hitthing->hitpos.y = hitbuf.hitpos.y; + hitthing->hitpos.z = hitbuf.hitpos.z; + hitthing->normal.x = hitbuf.normal.x; + hitthing->normal.y = hitbuf.normal.y; + hitthing->normal.z = hitbuf.normal.z; + hitthing->vtx0 = &vtxbase[idx2[0]]; + hitthing->vtx1 = &vtxbase[idx2[1]]; + hitthing->vtx2 = &vtxbase[idx2[2]]; + hitthing->texturenum = texnum; + hitthing->tricmd = gdl; + hitthing->unk28 = s2 + 1; } } } + s2++; } - // Node 69 - temp_s5 = (phi_s5 + 1); - phi_s5 = temp_s5; - phi_t0 = &spA8; - phi_t0_2 = &spA8; - if (temp_s5 != 4) - { - goto loop_34; - } + while (s2 != 4); } } - // Node 70 - temp_v0_3 = phi_s3->unk8; - if (temp_v0_3 != -0x48) + + gdl++; + op = *((s8 *) gdl); + } + while ((op != G_VTX) && (op != ((s8) G_ENDDL))); + } + + return found; +} + + +/** + * In order to make bgTestBulletHitBackground match, 4 bytes had to dropped from the regular HitThing struct. + * There might be an alternate way of matching this that doesn't require the sub-struct. + */ +struct HitThingSub { + coord3d hitpos; // 0x00 + coord3d normal; // 0x0c + + Vertex *vtx0; // 0x18 + Vertex *vtx1; // 0x1c + Vertex *vtx2; // 0x20 + + Gfx *tricmd; // 0x24 - display-list command associated with hit triangle + + s16 unk28; // 0x28 + s16 texturenum; // 0x2a +}; + + +bool bgTestBulletHitBackground(coord3d *from, coord3d *to, s32 roomnum, struct HitThing *hit) +{ + RoomVtxBatchBounds *point; + s16 numpoints; + coord3d fromscaled; + coord3d toscaled; + coord3d dir; + s32 i; + struct HitThingSub tmp; + f32 scale; + s32 bestdist; + s32 dist; + bool found; + s32 score; + s32 dx; + s32 dy; + s32 dz; + + found = FALSE; + bestdist = 0x7fffffff; + + scale = room_data_float1; + fromscaled.x = from->x * scale; + fromscaled.y = from->y * scale; + fromscaled.z = from->z * scale; + toscaled.x = to->x * scale; + toscaled.y = to->y * scale; + toscaled.z = to->z * scale; + dir.x = toscaled.x - fromscaled.x; + dir.y = toscaled.y - fromscaled.y; + dir.z = toscaled.z - fromscaled.z; + point = g_BgRoomInfo[roomnum].vtx_batch_bounds; + point = g_BgRoomInfo[roomnum].vtx_batch_bounds; + + if (point == NULL) + { + return FALSE; + } + + numpoints = g_BgRoomInfo[roomnum].num_vtx_batch_bounds; + + for (i = 0; i < numpoints; i++) + { + if (!bgTestRayIntersectsBbox(&fromscaled, &dir, &point[i].xmin, &point[i].xmax)) + { + continue; + } + + if (!bgTestRayIntersectionInRoom(&fromscaled, &toscaled, &dir, &point[i], roomnum, (struct HitThing *)&tmp)) + { + continue; + } + + dx = tmp.hitpos.x - fromscaled.x; + dy = tmp.hitpos.y - fromscaled.y; + dz = tmp.hitpos.z - fromscaled.z; + dist = score = dx * dx + dy * dy + dz * dz; + found = TRUE; + + if (check_if_imageID_is_light(tmp.texturenum)) + { + score = dist - 4; + } + + if (score < bestdist) + { + bestdist = score; + hit->hitpos.x = tmp.hitpos.x; + hit->hitpos.y = tmp.hitpos.y; + hit->hitpos.z = tmp.hitpos.z; + hit->normal.x = tmp.normal.x; + hit->normal.y = tmp.normal.y; + hit->normal.z = tmp.normal.z; + hit->vtx0 = tmp.vtx0; + hit->vtx1 = tmp.vtx1; + hit->vtx2 = tmp.vtx2; + hit->texturenum = tmp.texturenum; + hit->tricmd = tmp.tricmd; + hit->unk28 = tmp.unk28; + } + } + + if (found) + { + point = (RoomVtxBatchBounds *)hit->tricmd; + + if (((u8 *)((Gfx*)point))[0] != G_SETTILE) + { + while ((Gfx *)g_BgRoomInfo[roomnum].ptr_expanded_mapping_info < ((Gfx*)point)) { - // Node 71 - phi_v0 = temp_v0_3; - phi_s3 = (phi_s3 + 8); - if (temp_v0_3 != -0x48) + point = (RoomVtxBatchBounds *)((Gfx *)point - 1); + if (((u8 *)((Gfx*)point))[0] == G_SETTILE) { - goto loop_3; + break; } } } + + if (((Gfx*)point) == g_BgRoomInfo[roomnum].ptr_expanded_mapping_info) + { + hit->tileformat = -1; + hit->tilesize = -1; + } + else + { + hit->tileformat = ((u32)((u8 *)((Gfx*)point))[1]) >> 5; + hit->tilesize = (((Gfx*)point)->words.w0 << 11) >> 30; + } } - // Node 72 - return sp12C; -} -#else -GLOBAL_ASM( -.text -glabel bgTestLineIntersectionInRoom -/* 0EBB40 7F0B7010 27BDFEC0 */ addiu $sp, $sp, -0x140 -/* 0EBB44 7F0B7014 8FAE0150 */ lw $t6, 0x150($sp) -/* 0EBB48 7F0B7018 3C188004 */ lui $t8, %hi(g_BgRoomInfo) -/* 0EBB4C 7F0B701C AFBF004C */ sw $ra, 0x4c($sp) -/* 0EBB50 7F0B7020 000E7880 */ sll $t7, $t6, 2 -/* 0EBB54 7F0B7024 01EE7821 */ addu $t7, $t7, $t6 -/* 0EBB58 7F0B7028 AFBE0048 */ sw $fp, 0x48($sp) -/* 0EBB5C 7F0B702C AFB70044 */ sw $s7, 0x44($sp) -/* 0EBB60 7F0B7030 AFB60040 */ sw $s6, 0x40($sp) -/* 0EBB64 7F0B7034 AFB5003C */ sw $s5, 0x3c($sp) -/* 0EBB68 7F0B7038 AFB40038 */ sw $s4, 0x38($sp) -/* 0EBB6C 7F0B703C AFB30034 */ sw $s3, 0x34($sp) -/* 0EBB70 7F0B7040 AFB20030 */ sw $s2, 0x30($sp) -/* 0EBB74 7F0B7044 AFB1002C */ sw $s1, 0x2c($sp) -/* 0EBB78 7F0B7048 AFB00028 */ sw $s0, 0x28($sp) -/* 0EBB7C 7F0B704C AFA40140 */ sw $a0, 0x140($sp) -/* 0EBB80 7F0B7050 AFA50144 */ sw $a1, 0x144($sp) -/* 0EBB84 7F0B7054 AFA60148 */ sw $a2, 0x148($sp) -/* 0EBB88 7F0B7058 000F7900 */ sll $t7, $t7, 4 -/* 0EBB8C 7F0B705C 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 -/* 0EBB90 7F0B7060 84F90000 */ lh $t9, ($a3) -/* 0EBB94 7F0B7064 01F84021 */ addu $t0, $t7, $t8 -/* 0EBB98 7F0B7068 8D130008 */ lw $s3, 8($t0) -/* 0EBB9C 7F0B706C 001948C0 */ sll $t1, $t9, 3 -/* 0EBBA0 7F0B7070 3C0D7FFF */ lui $t5, (0x7FFFFFFF >> 16) # lui $t5, 0x7fff -/* 0EBBA4 7F0B7074 01339821 */ addu $s3, $t1, $s3 -/* 0EBBA8 7F0B7078 8E6B0004 */ lw $t3, 4($s3) -/* 0EBBAC 7F0B707C 92770001 */ lbu $s7, 1($s3) -/* 0EBBB0 7F0B7080 35ADFFFF */ ori $t5, (0x7FFFFFFF & 0xFFFF) # ori $t5, $t5, 0xffff -/* 0EBBB4 7F0B7084 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff -/* 0EBBB8 7F0B7088 AFAD00F0 */ sw $t5, 0xf0($sp) -/* 0EBBBC 7F0B708C AFA0012C */ sw $zero, 0x12c($sp) -/* 0EBBC0 7F0B7090 82620008 */ lb $v0, 8($s3) -/* 0EBBC4 7F0B7094 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0EBBC8 7F0B7098 8D030004 */ lw $v1, 4($t0) -/* 0EBBCC 7F0B709C 01616024 */ and $t4, $t3, $at -/* 0EBBD0 7F0B70A0 24010004 */ li $at, 4 -/* 0EBBD4 7F0B70A4 32EA000F */ andi $t2, $s7, 0xf -/* 0EBBD8 7F0B70A8 0140B825 */ move $s7, $t2 -/* 0EBBDC 7F0B70AC 26730008 */ addiu $s3, $s3, 8 -/* 0EBBE0 7F0B70B0 10410264 */ beq $v0, $at, .L7F0B7A44 -/* 0EBBE4 7F0B70B4 01838821 */ addu $s1, $t4, $v1 -/* 0EBBE8 7F0B70B8 2401FFB8 */ li $at, -72 -/* 0EBBEC 7F0B70BC 10410261 */ beq $v0, $at, .L7F0B7A44 -/* 0EBBF0 7F0B70C0 241600FD */ li $s6, 253 -/* 0EBBF4 7F0B70C4 AFA80064 */ sw $t0, 0x64($sp) -/* 0EBBF8 7F0B70C8 27A800A8 */ addiu $t0, $sp, 0xa8 -/* 0EBBFC 7F0B70CC 8FB40154 */ lw $s4, 0x154($sp) -/* 0EBC00 7F0B70D0 2401FFBF */ li $at, -65 -.L7F0B70D4: -/* 0EBC04 7F0B70D4 1441011F */ bne $v0, $at, .L7F0B7554 -/* 0EBC08 7F0B70D8 3C0E8004 */ lui $t6, %hi(D_80044868) -/* 0EBC0C 7F0B70DC 25CE4868 */ addiu $t6, %lo(D_80044868) # addiu $t6, $t6, 0x4868 -/* 0EBC10 7F0B70E0 8DC10000 */ lw $at, ($t6) -/* 0EBC14 7F0B70E4 27A600D4 */ addiu $a2, $sp, 0xd4 -/* 0EBC18 7F0B70E8 3C198004 */ lui $t9, %hi(D_80044874) -/* 0EBC1C 7F0B70EC ACC10000 */ sw $at, ($a2) -/* 0EBC20 7F0B70F0 8DD80004 */ lw $t8, 4($t6) -/* 0EBC24 7F0B70F4 27394874 */ addiu $t9, %lo(D_80044874) # addiu $t9, $t9, 0x4874 -/* 0EBC28 7F0B70F8 27A700C8 */ addiu $a3, $sp, 0xc8 -/* 0EBC2C 7F0B70FC ACD80004 */ sw $t8, 4($a2) -/* 0EBC30 7F0B7100 8DC10008 */ lw $at, 8($t6) -/* 0EBC34 7F0B7104 2405000A */ li $a1, 10 -/* 0EBC38 7F0B7108 00001025 */ move $v0, $zero -/* 0EBC3C 7F0B710C ACC10008 */ sw $at, 8($a2) -/* 0EBC40 7F0B7110 8F210000 */ lw $at, ($t9) -/* 0EBC44 7F0B7114 27A400E4 */ addiu $a0, $sp, 0xe4 -/* 0EBC48 7F0B7118 ACE10000 */ sw $at, ($a3) -/* 0EBC4C 7F0B711C 8F2A0004 */ lw $t2, 4($t9) -/* 0EBC50 7F0B7120 ACEA0004 */ sw $t2, 4($a3) -/* 0EBC54 7F0B7124 8F210008 */ lw $at, 8($t9) -/* 0EBC58 7F0B7128 ACE10008 */ sw $at, 8($a3) -/* 0EBC5C 7F0B712C 926B0005 */ lbu $t3, 5($s3) -/* 0EBC60 7F0B7130 0165001A */ div $zero, $t3, $a1 -/* 0EBC64 7F0B7134 00006012 */ mflo $t4 -/* 0EBC68 7F0B7138 01976823 */ subu $t5, $t4, $s7 -/* 0EBC6C 7F0B713C AFAD00E4 */ sw $t5, 0xe4($sp) -/* 0EBC70 7F0B7140 926F0006 */ lbu $t7, 6($s3) -/* 0EBC74 7F0B7144 14A00002 */ bnez $a1, .L7F0B7150 -/* 0EBC78 7F0B7148 00000000 */ nop -/* 0EBC7C 7F0B714C 0007000D */ break 7 -.L7F0B7150: -/* 0EBC80 7F0B7150 2401FFFF */ li $at, -1 -/* 0EBC84 7F0B7154 14A10004 */ bne $a1, $at, .L7F0B7168 -/* 0EBC88 7F0B7158 3C018000 */ lui $at, 0x8000 -/* 0EBC8C 7F0B715C 15610002 */ bne $t3, $at, .L7F0B7168 -/* 0EBC90 7F0B7160 00000000 */ nop -/* 0EBC94 7F0B7164 0006000D */ break 6 -.L7F0B7168: -/* 0EBC98 7F0B7168 01E5001A */ div $zero, $t7, $a1 -/* 0EBC9C 7F0B716C 00007012 */ mflo $t6 -/* 0EBCA0 7F0B7170 01D7C023 */ subu $t8, $t6, $s7 -/* 0EBCA4 7F0B7174 AFB800E8 */ sw $t8, 0xe8($sp) -/* 0EBCA8 7F0B7178 92690007 */ lbu $t1, 7($s3) -/* 0EBCAC 7F0B717C 14A00002 */ bnez $a1, .L7F0B7188 -/* 0EBCB0 7F0B7180 00000000 */ nop -/* 0EBCB4 7F0B7184 0007000D */ break 7 -.L7F0B7188: -/* 0EBCB8 7F0B7188 2401FFFF */ li $at, -1 -/* 0EBCBC 7F0B718C 14A10004 */ bne $a1, $at, .L7F0B71A0 -/* 0EBCC0 7F0B7190 3C018000 */ lui $at, 0x8000 -/* 0EBCC4 7F0B7194 15E10002 */ bne $t7, $at, .L7F0B71A0 -/* 0EBCC8 7F0B7198 00000000 */ nop -/* 0EBCCC 7F0B719C 0006000D */ break 6 -.L7F0B71A0: -/* 0EBCD0 7F0B71A0 0125001A */ div $zero, $t1, $a1 -/* 0EBCD4 7F0B71A4 8FAB0150 */ lw $t3, 0x150($sp) -/* 0EBCD8 7F0B71A8 0000C812 */ mflo $t9 -/* 0EBCDC 7F0B71AC 03375023 */ subu $t2, $t9, $s7 -/* 0EBCE0 7F0B71B0 000B6080 */ sll $t4, $t3, 2 -/* 0EBCE4 7F0B71B4 018B6023 */ subu $t4, $t4, $t3 -/* 0EBCE8 7F0B71B8 000C60C0 */ sll $t4, $t4, 3 -/* 0EBCEC 7F0B71BC AFAA00EC */ sw $t2, 0xec($sp) -/* 0EBCF0 7F0B71C0 AFAC0054 */ sw $t4, 0x54($sp) -/* 0EBCF4 7F0B71C4 14A00002 */ bnez $a1, .L7F0B71D0 -/* 0EBCF8 7F0B71C8 00000000 */ nop -/* 0EBCFC 7F0B71CC 0007000D */ break 7 -.L7F0B71D0: -/* 0EBD00 7F0B71D0 2401FFFF */ li $at, -1 -/* 0EBD04 7F0B71D4 14A10004 */ bne $a1, $at, .L7F0B71E8 -/* 0EBD08 7F0B71D8 3C018000 */ lui $at, 0x8000 -/* 0EBD0C 7F0B71DC 15210002 */ bne $t1, $at, .L7F0B71E8 -/* 0EBD10 7F0B71E0 00000000 */ nop -/* 0EBD14 7F0B71E4 0006000D */ break 6 -.L7F0B71E8: -/* 0EBD18 7F0B71E8 8C8D0000 */ lw $t5, ($a0) -.L7F0B71EC: -/* 0EBD1C 7F0B71EC 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0EBD20 7F0B71F0 24840004 */ addiu $a0, $a0, 4 -/* 0EBD24 7F0B71F4 000D7900 */ sll $t7, $t5, 4 -/* 0EBD28 7F0B71F8 022F1821 */ addu $v1, $s1, $t7 -/* 0EBD2C 7F0B71FC 84620000 */ lh $v0, ($v1) -/* 0EBD30 7F0B7200 27AC00F0 */ addiu $t4, $sp, 0xf0 -/* 0EBD34 7F0B7204 004E082A */ slt $at, $v0, $t6 -/* 0EBD38 7F0B7208 50200004 */ beql $at, $zero, .L7F0B721C -/* 0EBD3C 7F0B720C 8FB800C8 */ lw $t8, 0xc8($sp) -/* 0EBD40 7F0B7210 AFA200D4 */ sw $v0, 0xd4($sp) -/* 0EBD44 7F0B7214 84620000 */ lh $v0, ($v1) -/* 0EBD48 7F0B7218 8FB800C8 */ lw $t8, 0xc8($sp) -.L7F0B721C: -/* 0EBD4C 7F0B721C 0302082A */ slt $at, $t8, $v0 -/* 0EBD50 7F0B7220 50200003 */ beql $at, $zero, .L7F0B7230 -/* 0EBD54 7F0B7224 84620002 */ lh $v0, 2($v1) -/* 0EBD58 7F0B7228 AFA200C8 */ sw $v0, 0xc8($sp) -/* 0EBD5C 7F0B722C 84620002 */ lh $v0, 2($v1) -.L7F0B7230: -/* 0EBD60 7F0B7230 8FA900D8 */ lw $t1, 0xd8($sp) -/* 0EBD64 7F0B7234 0049082A */ slt $at, $v0, $t1 -/* 0EBD68 7F0B7238 50200004 */ beql $at, $zero, .L7F0B724C -/* 0EBD6C 7F0B723C 8FB900CC */ lw $t9, 0xcc($sp) -/* 0EBD70 7F0B7240 AFA200D8 */ sw $v0, 0xd8($sp) -/* 0EBD74 7F0B7244 84620002 */ lh $v0, 2($v1) -/* 0EBD78 7F0B7248 8FB900CC */ lw $t9, 0xcc($sp) -.L7F0B724C: -/* 0EBD7C 7F0B724C 0322082A */ slt $at, $t9, $v0 -/* 0EBD80 7F0B7250 50200003 */ beql $at, $zero, .L7F0B7260 -/* 0EBD84 7F0B7254 84620004 */ lh $v0, 4($v1) -/* 0EBD88 7F0B7258 AFA200CC */ sw $v0, 0xcc($sp) -/* 0EBD8C 7F0B725C 84620004 */ lh $v0, 4($v1) -.L7F0B7260: -/* 0EBD90 7F0B7260 8FAA00DC */ lw $t2, 0xdc($sp) -/* 0EBD94 7F0B7264 004A082A */ slt $at, $v0, $t2 -/* 0EBD98 7F0B7268 50200004 */ beql $at, $zero, .L7F0B727C -/* 0EBD9C 7F0B726C 8FAB00D0 */ lw $t3, 0xd0($sp) -/* 0EBDA0 7F0B7270 AFA200DC */ sw $v0, 0xdc($sp) -/* 0EBDA4 7F0B7274 84620004 */ lh $v0, 4($v1) -/* 0EBDA8 7F0B7278 8FAB00D0 */ lw $t3, 0xd0($sp) -.L7F0B727C: -/* 0EBDAC 7F0B727C 0162082A */ slt $at, $t3, $v0 -/* 0EBDB0 7F0B7280 10200002 */ beqz $at, .L7F0B728C -/* 0EBDB4 7F0B7284 00000000 */ nop -/* 0EBDB8 7F0B7288 AFA200D0 */ sw $v0, 0xd0($sp) -.L7F0B728C: -/* 0EBDBC 7F0B728C 548CFFD7 */ bnel $a0, $t4, .L7F0B71EC -/* 0EBDC0 7F0B7290 8C8D0000 */ lw $t5, ($a0) -/* 0EBDC4 7F0B7294 3C0D8008 */ lui $t5, %hi(ptr_bgdata_room_fileposition_list) -/* 0EBDC8 7F0B7298 8DADFF8C */ lw $t5, %lo(ptr_bgdata_room_fileposition_list)($t5) -/* 0EBDCC 7F0B729C 8FAF0054 */ lw $t7, 0x54($sp) -/* 0EBDD0 7F0B72A0 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0EBDD4 7F0B72A4 8FAA00D8 */ lw $t2, 0xd8($sp) -/* 0EBDD8 7F0B72A8 01AF1021 */ addu $v0, $t5, $t7 -/* 0EBDDC 7F0B72AC C444000C */ lwc1 $f4, 0xc($v0) -/* 0EBDE0 7F0B72B0 8FAF00DC */ lw $t7, 0xdc($sp) -/* 0EBDE4 7F0B72B4 8FA40140 */ lw $a0, 0x140($sp) -/* 0EBDE8 7F0B72B8 4600218D */ trunc.w.s $f6, $f4 -/* 0EBDEC 7F0B72BC 8FA50148 */ lw $a1, 0x148($sp) -/* 0EBDF0 7F0B72C0 44093000 */ mfc1 $t1, $f6 -/* 0EBDF4 7F0B72C4 00000000 */ nop -/* 0EBDF8 7F0B72C8 01C9C821 */ addu $t9, $t6, $t1 -/* 0EBDFC 7F0B72CC AFB900D4 */ sw $t9, 0xd4($sp) -/* 0EBE00 7F0B72D0 C4480010 */ lwc1 $f8, 0x10($v0) -/* 0EBE04 7F0B72D4 8FB900C8 */ lw $t9, 0xc8($sp) -/* 0EBE08 7F0B72D8 4600428D */ trunc.w.s $f10, $f8 -/* 0EBE0C 7F0B72DC 440C5000 */ mfc1 $t4, $f10 -/* 0EBE10 7F0B72E0 00000000 */ nop -/* 0EBE14 7F0B72E4 014C6821 */ addu $t5, $t2, $t4 -/* 0EBE18 7F0B72E8 AFAD00D8 */ sw $t5, 0xd8($sp) -/* 0EBE1C 7F0B72EC C4500014 */ lwc1 $f16, 0x14($v0) -/* 0EBE20 7F0B72F0 8FAD00CC */ lw $t5, 0xcc($sp) -/* 0EBE24 7F0B72F4 4600848D */ trunc.w.s $f18, $f16 -/* 0EBE28 7F0B72F8 440E9000 */ mfc1 $t6, $f18 -/* 0EBE2C 7F0B72FC 00000000 */ nop -/* 0EBE30 7F0B7300 01EE4821 */ addu $t1, $t7, $t6 -/* 0EBE34 7F0B7304 AFA900DC */ sw $t1, 0xdc($sp) -/* 0EBE38 7F0B7308 C444000C */ lwc1 $f4, 0xc($v0) -/* 0EBE3C 7F0B730C 8FA900D0 */ lw $t1, 0xd0($sp) -/* 0EBE40 7F0B7310 4600218D */ trunc.w.s $f6, $f4 -/* 0EBE44 7F0B7314 440A3000 */ mfc1 $t2, $f6 -/* 0EBE48 7F0B7318 00000000 */ nop -/* 0EBE4C 7F0B731C 032A6021 */ addu $t4, $t9, $t2 -/* 0EBE50 7F0B7320 AFAC00C8 */ sw $t4, 0xc8($sp) -/* 0EBE54 7F0B7324 C4480010 */ lwc1 $f8, 0x10($v0) -/* 0EBE58 7F0B7328 4600428D */ trunc.w.s $f10, $f8 -/* 0EBE5C 7F0B732C 440F5000 */ mfc1 $t7, $f10 -/* 0EBE60 7F0B7330 00000000 */ nop -/* 0EBE64 7F0B7334 01AF7021 */ addu $t6, $t5, $t7 -/* 0EBE68 7F0B7338 AFAE00CC */ sw $t6, 0xcc($sp) -/* 0EBE6C 7F0B733C C4500014 */ lwc1 $f16, 0x14($v0) -/* 0EBE70 7F0B7340 4600848D */ trunc.w.s $f18, $f16 -/* 0EBE74 7F0B7344 44199000 */ mfc1 $t9, $f18 -/* 0EBE78 7F0B7348 00000000 */ nop -/* 0EBE7C 7F0B734C 01395021 */ addu $t2, $t1, $t9 -/* 0EBE80 7F0B7350 0FC2DB3B */ jal bgTestLineIntersectsBbox -/* 0EBE84 7F0B7354 AFAA00D0 */ sw $t2, 0xd0($sp) -/* 0EBE88 7F0B7358 104001B3 */ beqz $v0, .L7F0B7A28 -/* 0EBE8C 7F0B735C 27A800A8 */ addiu $t0, $sp, 0xa8 -/* 0EBE90 7F0B7360 8FAC00E4 */ lw $t4, 0xe4($sp) -/* 0EBE94 7F0B7364 8FAD00E8 */ lw $t5, 0xe8($sp) -/* 0EBE98 7F0B7368 3C198008 */ lui $t9, %hi(ptr_bgdata_room_fileposition_list) -/* 0EBE9C 7F0B736C 000CC100 */ sll $t8, $t4, 4 -/* 0EBEA0 7F0B7370 8F39FF8C */ lw $t9, %lo(ptr_bgdata_room_fileposition_list)($t9) -/* 0EBEA4 7F0B7374 8FAE00EC */ lw $t6, 0xec($sp) -/* 0EBEA8 7F0B7378 8FA90054 */ lw $t1, 0x54($sp) -/* 0EBEAC 7F0B737C 02382021 */ addu $a0, $s1, $t8 -/* 0EBEB0 7F0B7380 8FB80148 */ lw $t8, 0x148($sp) -/* 0EBEB4 7F0B7384 8FAC0144 */ lw $t4, 0x144($sp) -/* 0EBEB8 7F0B7388 8FAA0140 */ lw $t2, 0x140($sp) -/* 0EBEBC 7F0B738C 000D7900 */ sll $t7, $t5, 4 -/* 0EBEC0 7F0B7390 27AD00F8 */ addiu $t5, $sp, 0xf8 -/* 0EBEC4 7F0B7394 000E5900 */ sll $t3, $t6, 4 -/* 0EBEC8 7F0B7398 01393821 */ addu $a3, $t1, $t9 -/* 0EBECC 7F0B739C 24E7000C */ addiu $a3, $a3, 0xc -/* 0EBED0 7F0B73A0 022B3021 */ addu $a2, $s1, $t3 -/* 0EBED4 7F0B73A4 AFAD001C */ sw $t5, 0x1c($sp) -/* 0EBED8 7F0B73A8 022F2821 */ addu $a1, $s1, $t7 -/* 0EBEDC 7F0B73AC AFB80018 */ sw $t8, 0x18($sp) -/* 0EBEE0 7F0B73B0 AFAC0014 */ sw $t4, 0x14($sp) -/* 0EBEE4 7F0B73B4 0FC24A24 */ jal intersectLineTriangle -/* 0EBEE8 7F0B73B8 AFAA0010 */ sw $t2, 0x10($sp) -/* 0EBEEC 7F0B73BC 1040019A */ beqz $v0, .L7F0B7A28 -/* 0EBEF0 7F0B73C0 27A800A8 */ addiu $t0, $sp, 0xa8 -/* 0EBEF4 7F0B73C4 8FA60140 */ lw $a2, 0x140($sp) -/* 0EBEF8 7F0B73C8 C7A400F8 */ lwc1 $f4, 0xf8($sp) -/* 0EBEFC 7F0B73CC C7B000FC */ lwc1 $f16, 0xfc($sp) -/* 0EBF00 7F0B73D0 C4C80000 */ lwc1 $f8, ($a2) -/* 0EBF04 7F0B73D4 4600218D */ trunc.w.s $f6, $f4 -/* 0EBF08 7F0B73D8 C4C40004 */ lwc1 $f4, 4($a2) -/* 0EBF0C 7F0B73DC 02601025 */ move $v0, $s3 -/* 0EBF10 7F0B73E0 4600428D */ trunc.w.s $f10, $f8 -/* 0EBF14 7F0B73E4 440E3000 */ mfc1 $t6, $f6 -/* 0EBF18 7F0B73E8 C7A80100 */ lwc1 $f8, 0x100($sp) -/* 0EBF1C 7F0B73EC 4600848D */ trunc.w.s $f18, $f16 -/* 0EBF20 7F0B73F0 44095000 */ mfc1 $t1, $f10 -/* 0EBF24 7F0B73F4 C4D00008 */ lwc1 $f16, 8($a2) -/* 0EBF28 7F0B73F8 4600218D */ trunc.w.s $f6, $f4 -/* 0EBF2C 7F0B73FC 01C91823 */ subu $v1, $t6, $t1 -/* 0EBF30 7F0B7400 00630019 */ multu $v1, $v1 -/* 0EBF34 7F0B7404 440A9000 */ mfc1 $t2, $f18 -/* 0EBF38 7F0B7408 44183000 */ mfc1 $t8, $f6 -/* 0EBF3C 7F0B740C 4600428D */ trunc.w.s $f10, $f8 -/* 0EBF40 7F0B7410 8FAB0064 */ lw $t3, 0x64($sp) -/* 0EBF44 7F0B7414 01582023 */ subu $a0, $t2, $t8 -/* 0EBF48 7F0B7418 4600848D */ trunc.w.s $f18, $f16 -/* 0EBF4C 7F0B741C 440F5000 */ mfc1 $t7, $f10 -/* 0EBF50 7F0B7420 24180001 */ li $t8, 1 -/* 0EBF54 7F0B7424 AFB8012C */ sw $t8, 0x12c($sp) -/* 0EBF58 7F0B7428 00004812 */ mflo $t1 -/* 0EBF5C 7F0B742C 440E9000 */ mfc1 $t6, $f18 -/* 0EBF60 7F0B7430 926D0000 */ lbu $t5, ($s3) -/* 0EBF64 7F0B7434 00840019 */ multu $a0, $a0 -/* 0EBF68 7F0B7438 01EE2823 */ subu $a1, $t7, $t6 -/* 0EBF6C 7F0B743C 8FAE0064 */ lw $t6, 0x64($sp) -/* 0EBF70 7F0B7440 0000C812 */ mflo $t9 -/* 0EBF74 7F0B7444 01396021 */ addu $t4, $t1, $t9 -/* 0EBF78 7F0B7448 00000000 */ nop -/* 0EBF7C 7F0B744C 00A50019 */ multu $a1, $a1 -/* 0EBF80 7F0B7450 00005012 */ mflo $t2 -/* 0EBF84 7F0B7454 018A9021 */ addu $s2, $t4, $t2 -/* 0EBF88 7F0B7458 12CD000C */ beq $s6, $t5, .L7F0B748C -/* 0EBF8C 7F0B745C 0240F025 */ move $fp, $s2 -/* 0EBF90 7F0B7460 8D630008 */ lw $v1, 8($t3) -/* 0EBF94 7F0B7464 0073082B */ sltu $at, $v1, $s3 -/* 0EBF98 7F0B7468 50200009 */ beql $at, $zero, .L7F0B7490 -/* 0EBF9C 7F0B746C 8DC90008 */ lw $t1, 8($t6) -/* 0EBFA0 7F0B7470 904FFFF8 */ lbu $t7, -8($v0) -.L7F0B7474: -/* 0EBFA4 7F0B7474 2442FFF8 */ addiu $v0, $v0, -8 -/* 0EBFA8 7F0B7478 0062082B */ sltu $at, $v1, $v0 -/* 0EBFAC 7F0B747C 52CF0004 */ beql $s6, $t7, .L7F0B7490 -/* 0EBFB0 7F0B7480 8DC90008 */ lw $t1, 8($t6) -/* 0EBFB4 7F0B7484 5420FFFB */ bnezl $at, .L7F0B7474 -/* 0EBFB8 7F0B7488 904FFFF8 */ lbu $t7, -8($v0) -.L7F0B748C: -/* 0EBFBC 7F0B748C 8DC90008 */ lw $t1, 8($t6) -.L7F0B7490: -/* 0EBFC0 7F0B7490 54490004 */ bnel $v0, $t1, .L7F0B74A4 -/* 0EBFC4 7F0B7494 8C430004 */ lw $v1, 4($v0) -/* 0EBFC8 7F0B7498 10000006 */ b .L7F0B74B4 -/* 0EBFCC 7F0B749C 2410FFFF */ li $s0, -1 -/* 0EBFD0 7F0B74A0 8C430004 */ lw $v1, 4($v0) -.L7F0B74A4: -/* 0EBFD4 7F0B74A4 3C018000 */ lui $at, 0x8000 -/* 0EBFD8 7F0B74A8 2463FFF8 */ addiu $v1, $v1, -8 -/* 0EBFDC 7F0B74AC 0061C825 */ or $t9, $v1, $at -/* 0EBFE0 7F0B74B0 97300000 */ lhu $s0, ($t9) -.L7F0B74B4: -/* 0EBFE4 7F0B74B4 0FC2ED8C */ jal check_if_imageID_is_light -/* 0EBFE8 7F0B74B8 02002025 */ move $a0, $s0 -/* 0EBFEC 7F0B74BC 10400002 */ beqz $v0, .L7F0B74C8 -/* 0EBFF0 7F0B74C0 27A800A8 */ addiu $t0, $sp, 0xa8 -/* 0EBFF4 7F0B74C4 265EFFFC */ addiu $fp, $s2, -4 -.L7F0B74C8: -/* 0EBFF8 7F0B74C8 8FAC00F0 */ lw $t4, 0xf0($sp) -/* 0EBFFC 7F0B74CC 03CC082A */ slt $at, $fp, $t4 -/* 0EC000 7F0B74D0 10200155 */ beqz $at, .L7F0B7A28 -/* 0EC004 7F0B74D4 240104FD */ li $at, 1277 -/* 0EC008 7F0B74D8 52010154 */ beql $s0, $at, .L7F0B7A2C -/* 0EC00C 7F0B74DC 82620008 */ lb $v0, 8($s3) -/* 0EC010 7F0B74E0 C7A400F8 */ lwc1 $f4, 0xf8($sp) -/* 0EC014 7F0B74E4 AFBE00F0 */ sw $fp, 0xf0($sp) -/* 0EC018 7F0B74E8 E6840000 */ swc1 $f4, ($s4) -/* 0EC01C 7F0B74EC C7A600FC */ lwc1 $f6, 0xfc($sp) -/* 0EC020 7F0B74F0 E6860004 */ swc1 $f6, 4($s4) -/* 0EC024 7F0B74F4 C7A80100 */ lwc1 $f8, 0x100($sp) -/* 0EC028 7F0B74F8 E6880008 */ swc1 $f8, 8($s4) -/* 0EC02C 7F0B74FC C7AA0104 */ lwc1 $f10, 0x104($sp) -/* 0EC030 7F0B7500 E68A000C */ swc1 $f10, 0xc($s4) -/* 0EC034 7F0B7504 C7B00108 */ lwc1 $f16, 0x108($sp) -/* 0EC038 7F0B7508 E6900010 */ swc1 $f16, 0x10($s4) -/* 0EC03C 7F0B750C C7B2010C */ lwc1 $f18, 0x10c($sp) -/* 0EC040 7F0B7510 E6920014 */ swc1 $f18, 0x14($s4) -/* 0EC044 7F0B7514 8FAA00E4 */ lw $t2, 0xe4($sp) -/* 0EC048 7F0B7518 000AC100 */ sll $t8, $t2, 4 -/* 0EC04C 7F0B751C 03116821 */ addu $t5, $t8, $s1 -/* 0EC050 7F0B7520 AE8D0018 */ sw $t5, 0x18($s4) -/* 0EC054 7F0B7524 8FAB00E8 */ lw $t3, 0xe8($sp) -/* 0EC058 7F0B7528 000B7900 */ sll $t7, $t3, 4 -/* 0EC05C 7F0B752C 01F17021 */ addu $t6, $t7, $s1 -/* 0EC060 7F0B7530 AE8E001C */ sw $t6, 0x1c($s4) -/* 0EC064 7F0B7534 8FA900EC */ lw $t1, 0xec($sp) -/* 0EC068 7F0B7538 A690002A */ sh $s0, 0x2a($s4) -/* 0EC06C 7F0B753C AE930024 */ sw $s3, 0x24($s4) -/* 0EC070 7F0B7540 0009C900 */ sll $t9, $t1, 4 -/* 0EC074 7F0B7544 03316021 */ addu $t4, $t9, $s1 -/* 0EC078 7F0B7548 AE8C0020 */ sw $t4, 0x20($s4) -/* 0EC07C 7F0B754C 10000136 */ b .L7F0B7A28 -/* 0EC080 7F0B7550 A6800028 */ sh $zero, 0x28($s4) -.L7F0B7554: -/* 0EC084 7F0B7554 2401FFB1 */ li $at, -79 -/* 0EC088 7F0B7558 14410133 */ bne $v0, $at, .L7F0B7A28 -/* 0EC08C 7F0B755C 8FAA0150 */ lw $t2, 0x150($sp) -/* 0EC090 7F0B7560 000AC080 */ sll $t8, $t2, 2 -/* 0EC094 7F0B7564 030AC023 */ subu $t8, $t8, $t2 -/* 0EC098 7F0B7568 0018C0C0 */ sll $t8, $t8, 3 -/* 0EC09C 7F0B756C AFB80054 */ sw $t8, 0x54($sp) -/* 0EC0A0 7F0B7570 0000A825 */ move $s5, $zero -.L7F0B7574: -/* 0EC0A4 7F0B7574 3C0B8004 */ lui $t3, %hi(D_80044880) -/* 0EC0A8 7F0B7578 256B4880 */ addiu $t3, %lo(D_80044880) # addiu $t3, $t3, 0x4880 -/* 0EC0AC 7F0B757C 8D610000 */ lw $at, ($t3) -/* 0EC0B0 7F0B7580 27AD008C */ addiu $t5, $sp, 0x8c -/* 0EC0B4 7F0B7584 8D690004 */ lw $t1, 4($t3) -/* 0EC0B8 7F0B7588 ADA10000 */ sw $at, ($t5) -/* 0EC0BC 7F0B758C 8D610008 */ lw $at, 8($t3) -/* 0EC0C0 7F0B7590 3C0C8004 */ lui $t4, %hi(D_8004488C) -/* 0EC0C4 7F0B7594 258C488C */ addiu $t4, %lo(D_8004488C) # addiu $t4, $t4, 0x488c -/* 0EC0C8 7F0B7598 ADA90004 */ sw $t1, 4($t5) -/* 0EC0CC 7F0B759C ADA10008 */ sw $at, 8($t5) -/* 0EC0D0 7F0B75A0 8D810000 */ lw $at, ($t4) -/* 0EC0D4 7F0B75A4 27B90080 */ addiu $t9, $sp, 0x80 -/* 0EC0D8 7F0B75A8 8D8E0004 */ lw $t6, 4($t4) -/* 0EC0DC 7F0B75AC AF210000 */ sw $at, ($t9) -/* 0EC0E0 7F0B75B0 8D810008 */ lw $at, 8($t4) -/* 0EC0E4 7F0B75B4 AF2E0004 */ sw $t6, 4($t9) -/* 0EC0E8 7F0B75B8 16A0000E */ bnez $s5, .L7F0B75F4 -/* 0EC0EC 7F0B75BC AF210008 */ sw $at, 8($t9) -/* 0EC0F0 7F0B75C0 8E6F0004 */ lw $t7, 4($s3) -/* 0EC0F4 7F0B75C4 31ED000F */ andi $t5, $t7, 0xf -/* 0EC0F8 7F0B75C8 01B75823 */ subu $t3, $t5, $s7 -/* 0EC0FC 7F0B75CC AFAB009C */ sw $t3, 0x9c($sp) -/* 0EC100 7F0B75D0 92690007 */ lbu $t1, 7($s3) -/* 0EC104 7F0B75D4 0009C102 */ srl $t8, $t1, 4 -/* 0EC108 7F0B75D8 03175023 */ subu $t2, $t8, $s7 -/* 0EC10C 7F0B75DC AFAA00A0 */ sw $t2, 0xa0($sp) -/* 0EC110 7F0B75E0 8E790000 */ lw $t9, ($s3) -/* 0EC114 7F0B75E4 332C000F */ andi $t4, $t9, 0xf -/* 0EC118 7F0B75E8 01977023 */ subu $t6, $t4, $s7 -/* 0EC11C 7F0B75EC 1000002D */ b .L7F0B76A4 -/* 0EC120 7F0B75F0 AFAE00A4 */ sw $t6, 0xa4($sp) -.L7F0B75F4: -/* 0EC124 7F0B75F4 24010001 */ li $at, 1 -/* 0EC128 7F0B75F8 56A1000F */ bnel $s5, $at, .L7F0B7638 -/* 0EC12C 7F0B75FC 24010002 */ li $at, 2 -/* 0EC130 7F0B7600 926F0006 */ lbu $t7, 6($s3) -/* 0EC134 7F0B7604 31ED000F */ andi $t5, $t7, 0xf -/* 0EC138 7F0B7608 01B75823 */ subu $t3, $t5, $s7 -/* 0EC13C 7F0B760C AFAB009C */ sw $t3, 0x9c($sp) -/* 0EC140 7F0B7610 96690006 */ lhu $t1, 6($s3) -/* 0EC144 7F0B7614 0009C302 */ srl $t8, $t1, 0xc -/* 0EC148 7F0B7618 03175023 */ subu $t2, $t8, $s7 -/* 0EC14C 7F0B761C AFAA00A0 */ sw $t2, 0xa0($sp) -/* 0EC150 7F0B7620 92790003 */ lbu $t9, 3($s3) -/* 0EC154 7F0B7624 00196102 */ srl $t4, $t9, 4 -/* 0EC158 7F0B7628 01977023 */ subu $t6, $t4, $s7 -/* 0EC15C 7F0B762C 1000001D */ b .L7F0B76A4 -/* 0EC160 7F0B7630 AFAE00A4 */ sw $t6, 0xa4($sp) -/* 0EC164 7F0B7634 24010002 */ li $at, 2 -.L7F0B7638: -/* 0EC168 7F0B7638 56A1000F */ bnel $s5, $at, .L7F0B7678 -/* 0EC16C 7F0B763C 926F0004 */ lbu $t7, 4($s3) -/* 0EC170 7F0B7640 966F0004 */ lhu $t7, 4($s3) -/* 0EC174 7F0B7644 31ED000F */ andi $t5, $t7, 0xf -/* 0EC178 7F0B7648 01B75823 */ subu $t3, $t5, $s7 -/* 0EC17C 7F0B764C AFAB009C */ sw $t3, 0x9c($sp) -/* 0EC180 7F0B7650 92690005 */ lbu $t1, 5($s3) -/* 0EC184 7F0B7654 0009C102 */ srl $t8, $t1, 4 -/* 0EC188 7F0B7658 03175023 */ subu $t2, $t8, $s7 -/* 0EC18C 7F0B765C AFAA00A0 */ sw $t2, 0xa0($sp) -/* 0EC190 7F0B7660 92790002 */ lbu $t9, 2($s3) -/* 0EC194 7F0B7664 332C000F */ andi $t4, $t9, 0xf -/* 0EC198 7F0B7668 01977023 */ subu $t6, $t4, $s7 -/* 0EC19C 7F0B766C 1000000D */ b .L7F0B76A4 -/* 0EC1A0 7F0B7670 AFAE00A4 */ sw $t6, 0xa4($sp) -/* 0EC1A4 7F0B7674 926F0004 */ lbu $t7, 4($s3) -.L7F0B7678: -/* 0EC1A8 7F0B7678 31ED000F */ andi $t5, $t7, 0xf -/* 0EC1AC 7F0B767C 01B75823 */ subu $t3, $t5, $s7 -/* 0EC1B0 7F0B7680 AFAB009C */ sw $t3, 0x9c($sp) -/* 0EC1B4 7F0B7684 8E690004 */ lw $t1, 4($s3) -/* 0EC1B8 7F0B7688 0009C702 */ srl $t8, $t1, 0x1c -/* 0EC1BC 7F0B768C 03175023 */ subu $t2, $t8, $s7 -/* 0EC1C0 7F0B7690 AFAA00A0 */ sw $t2, 0xa0($sp) -/* 0EC1C4 7F0B7694 96790002 */ lhu $t9, 2($s3) -/* 0EC1C8 7F0B7698 00196302 */ srl $t4, $t9, 0xc -/* 0EC1CC 7F0B769C 01977023 */ subu $t6, $t4, $s7 -/* 0EC1D0 7F0B76A0 AFAE00A4 */ sw $t6, 0xa4($sp) -.L7F0B76A4: -/* 0EC1D4 7F0B76A4 27A4009C */ addiu $a0, $sp, 0x9c -/* 0EC1D8 7F0B76A8 8C8F0000 */ lw $t7, ($a0) -.L7F0B76AC: -/* 0EC1DC 7F0B76AC 8FAB008C */ lw $t3, 0x8c($sp) -/* 0EC1E0 7F0B76B0 24840004 */ addiu $a0, $a0, 4 -/* 0EC1E4 7F0B76B4 000F6900 */ sll $t5, $t7, 4 -/* 0EC1E8 7F0B76B8 022D1821 */ addu $v1, $s1, $t5 -/* 0EC1EC 7F0B76BC 84620000 */ lh $v0, ($v1) -/* 0EC1F0 7F0B76C0 004B082A */ slt $at, $v0, $t3 -/* 0EC1F4 7F0B76C4 50200004 */ beql $at, $zero, .L7F0B76D8 -/* 0EC1F8 7F0B76C8 8FA90080 */ lw $t1, 0x80($sp) -/* 0EC1FC 7F0B76CC AFA2008C */ sw $v0, 0x8c($sp) -/* 0EC200 7F0B76D0 84620000 */ lh $v0, ($v1) -/* 0EC204 7F0B76D4 8FA90080 */ lw $t1, 0x80($sp) -.L7F0B76D8: -/* 0EC208 7F0B76D8 0122082A */ slt $at, $t1, $v0 -/* 0EC20C 7F0B76DC 50200003 */ beql $at, $zero, .L7F0B76EC -/* 0EC210 7F0B76E0 84620002 */ lh $v0, 2($v1) -/* 0EC214 7F0B76E4 AFA20080 */ sw $v0, 0x80($sp) -/* 0EC218 7F0B76E8 84620002 */ lh $v0, 2($v1) -.L7F0B76EC: -/* 0EC21C 7F0B76EC 8FB80090 */ lw $t8, 0x90($sp) -/* 0EC220 7F0B76F0 0058082A */ slt $at, $v0, $t8 -/* 0EC224 7F0B76F4 50200004 */ beql $at, $zero, .L7F0B7708 -/* 0EC228 7F0B76F8 8FAA0084 */ lw $t2, 0x84($sp) -/* 0EC22C 7F0B76FC AFA20090 */ sw $v0, 0x90($sp) -/* 0EC230 7F0B7700 84620002 */ lh $v0, 2($v1) -/* 0EC234 7F0B7704 8FAA0084 */ lw $t2, 0x84($sp) -.L7F0B7708: -/* 0EC238 7F0B7708 0142082A */ slt $at, $t2, $v0 -/* 0EC23C 7F0B770C 50200003 */ beql $at, $zero, .L7F0B771C -/* 0EC240 7F0B7710 84620004 */ lh $v0, 4($v1) -/* 0EC244 7F0B7714 AFA20084 */ sw $v0, 0x84($sp) -/* 0EC248 7F0B7718 84620004 */ lh $v0, 4($v1) -.L7F0B771C: -/* 0EC24C 7F0B771C 8FB90094 */ lw $t9, 0x94($sp) -/* 0EC250 7F0B7720 0059082A */ slt $at, $v0, $t9 -/* 0EC254 7F0B7724 50200004 */ beql $at, $zero, .L7F0B7738 -/* 0EC258 7F0B7728 8FAC0088 */ lw $t4, 0x88($sp) -/* 0EC25C 7F0B772C AFA20094 */ sw $v0, 0x94($sp) -/* 0EC260 7F0B7730 84620004 */ lh $v0, 4($v1) -/* 0EC264 7F0B7734 8FAC0088 */ lw $t4, 0x88($sp) -.L7F0B7738: -/* 0EC268 7F0B7738 0182082A */ slt $at, $t4, $v0 -/* 0EC26C 7F0B773C 10200002 */ beqz $at, .L7F0B7748 -/* 0EC270 7F0B7740 00000000 */ nop -/* 0EC274 7F0B7744 AFA20088 */ sw $v0, 0x88($sp) -.L7F0B7748: -/* 0EC278 7F0B7748 5488FFD8 */ bnel $a0, $t0, .L7F0B76AC -/* 0EC27C 7F0B774C 8C8F0000 */ lw $t7, ($a0) -/* 0EC280 7F0B7750 3C0E8008 */ lui $t6, %hi(ptr_bgdata_room_fileposition_list) -/* 0EC284 7F0B7754 8DCEFF8C */ lw $t6, %lo(ptr_bgdata_room_fileposition_list)($t6) -/* 0EC288 7F0B7758 8FAF0054 */ lw $t7, 0x54($sp) -/* 0EC28C 7F0B775C 8FAD008C */ lw $t5, 0x8c($sp) -/* 0EC290 7F0B7760 8FAA0090 */ lw $t2, 0x90($sp) -/* 0EC294 7F0B7764 01CF1021 */ addu $v0, $t6, $t7 -/* 0EC298 7F0B7768 C444000C */ lwc1 $f4, 0xc($v0) -/* 0EC29C 7F0B776C 8FAF0094 */ lw $t7, 0x94($sp) -/* 0EC2A0 7F0B7770 8FA40140 */ lw $a0, 0x140($sp) -/* 0EC2A4 7F0B7774 4600218D */ trunc.w.s $f6, $f4 -/* 0EC2A8 7F0B7778 8FA50148 */ lw $a1, 0x148($sp) -/* 0EC2AC 7F0B777C 27A6008C */ addiu $a2, $sp, 0x8c -/* 0EC2B0 7F0B7780 27A70080 */ addiu $a3, $sp, 0x80 -/* 0EC2B4 7F0B7784 44093000 */ mfc1 $t1, $f6 -/* 0EC2B8 7F0B7788 00000000 */ nop -/* 0EC2BC 7F0B778C 01A9C021 */ addu $t8, $t5, $t1 -/* 0EC2C0 7F0B7790 AFB8008C */ sw $t8, 0x8c($sp) -/* 0EC2C4 7F0B7794 C4480010 */ lwc1 $f8, 0x10($v0) -/* 0EC2C8 7F0B7798 8FB80080 */ lw $t8, 0x80($sp) -/* 0EC2CC 7F0B779C 4600428D */ trunc.w.s $f10, $f8 -/* 0EC2D0 7F0B77A0 440C5000 */ mfc1 $t4, $f10 -/* 0EC2D4 7F0B77A4 00000000 */ nop -/* 0EC2D8 7F0B77A8 014C7021 */ addu $t6, $t2, $t4 -/* 0EC2DC 7F0B77AC AFAE0090 */ sw $t6, 0x90($sp) -/* 0EC2E0 7F0B77B0 C4500014 */ lwc1 $f16, 0x14($v0) -/* 0EC2E4 7F0B77B4 8FAE0084 */ lw $t6, 0x84($sp) -/* 0EC2E8 7F0B77B8 4600848D */ trunc.w.s $f18, $f16 -/* 0EC2EC 7F0B77BC 440D9000 */ mfc1 $t5, $f18 -/* 0EC2F0 7F0B77C0 00000000 */ nop -/* 0EC2F4 7F0B77C4 01ED4821 */ addu $t1, $t7, $t5 -/* 0EC2F8 7F0B77C8 AFA90094 */ sw $t1, 0x94($sp) -/* 0EC2FC 7F0B77CC C444000C */ lwc1 $f4, 0xc($v0) -/* 0EC300 7F0B77D0 8FA90088 */ lw $t1, 0x88($sp) -/* 0EC304 7F0B77D4 4600218D */ trunc.w.s $f6, $f4 -/* 0EC308 7F0B77D8 440A3000 */ mfc1 $t2, $f6 -/* 0EC30C 7F0B77DC 00000000 */ nop -/* 0EC310 7F0B77E0 030A6021 */ addu $t4, $t8, $t2 -/* 0EC314 7F0B77E4 AFAC0080 */ sw $t4, 0x80($sp) -/* 0EC318 7F0B77E8 C4480010 */ lwc1 $f8, 0x10($v0) -/* 0EC31C 7F0B77EC 4600428D */ trunc.w.s $f10, $f8 -/* 0EC320 7F0B77F0 440F5000 */ mfc1 $t7, $f10 -/* 0EC324 7F0B77F4 00000000 */ nop -/* 0EC328 7F0B77F8 01CF6821 */ addu $t5, $t6, $t7 -/* 0EC32C 7F0B77FC AFAD0084 */ sw $t5, 0x84($sp) -/* 0EC330 7F0B7800 C4500014 */ lwc1 $f16, 0x14($v0) -/* 0EC334 7F0B7804 4600848D */ trunc.w.s $f18, $f16 -/* 0EC338 7F0B7808 44189000 */ mfc1 $t8, $f18 -/* 0EC33C 7F0B780C 00000000 */ nop -/* 0EC340 7F0B7810 01385021 */ addu $t2, $t1, $t8 -/* 0EC344 7F0B7814 0FC2DB3B */ jal bgTestLineIntersectsBbox -/* 0EC348 7F0B7818 AFAA0088 */ sw $t2, 0x88($sp) -/* 0EC34C 7F0B781C 1040007E */ beqz $v0, .L7F0B7A18 -/* 0EC350 7F0B7820 27A800A8 */ addiu $t0, $sp, 0xa8 -/* 0EC354 7F0B7824 8FAC009C */ lw $t4, 0x9c($sp) -/* 0EC358 7F0B7828 8FAE00A0 */ lw $t6, 0xa0($sp) -/* 0EC35C 7F0B782C 3C188008 */ lui $t8, %hi(ptr_bgdata_room_fileposition_list) -/* 0EC360 7F0B7830 000C5900 */ sll $t3, $t4, 4 -/* 0EC364 7F0B7834 8F18FF8C */ lw $t8, %lo(ptr_bgdata_room_fileposition_list)($t8) -/* 0EC368 7F0B7838 8FAD00A4 */ lw $t5, 0xa4($sp) -/* 0EC36C 7F0B783C 8FA90054 */ lw $t1, 0x54($sp) -/* 0EC370 7F0B7840 022B2021 */ addu $a0, $s1, $t3 -/* 0EC374 7F0B7844 8FAB0148 */ lw $t3, 0x148($sp) -/* 0EC378 7F0B7848 8FAC0144 */ lw $t4, 0x144($sp) -/* 0EC37C 7F0B784C 8FAA0140 */ lw $t2, 0x140($sp) -/* 0EC380 7F0B7850 000E7900 */ sll $t7, $t6, 4 -/* 0EC384 7F0B7854 27AE00F8 */ addiu $t6, $sp, 0xf8 -/* 0EC388 7F0B7858 000DC900 */ sll $t9, $t5, 4 -/* 0EC38C 7F0B785C 01383821 */ addu $a3, $t1, $t8 -/* 0EC390 7F0B7860 24E7000C */ addiu $a3, $a3, 0xc -/* 0EC394 7F0B7864 02393021 */ addu $a2, $s1, $t9 -/* 0EC398 7F0B7868 AFAE001C */ sw $t6, 0x1c($sp) -/* 0EC39C 7F0B786C 022F2821 */ addu $a1, $s1, $t7 -/* 0EC3A0 7F0B7870 AFAB0018 */ sw $t3, 0x18($sp) -/* 0EC3A4 7F0B7874 AFAC0014 */ sw $t4, 0x14($sp) -/* 0EC3A8 7F0B7878 0FC24A24 */ jal intersectLineTriangle -/* 0EC3AC 7F0B787C AFAA0010 */ sw $t2, 0x10($sp) -/* 0EC3B0 7F0B7880 10400065 */ beqz $v0, .L7F0B7A18 -/* 0EC3B4 7F0B7884 27A800A8 */ addiu $t0, $sp, 0xa8 -/* 0EC3B8 7F0B7888 8FA60140 */ lw $a2, 0x140($sp) -/* 0EC3BC 7F0B788C C7A400F8 */ lwc1 $f4, 0xf8($sp) -/* 0EC3C0 7F0B7890 C7B000FC */ lwc1 $f16, 0xfc($sp) -/* 0EC3C4 7F0B7894 C4C80000 */ lwc1 $f8, ($a2) -/* 0EC3C8 7F0B7898 4600218D */ trunc.w.s $f6, $f4 -/* 0EC3CC 7F0B789C C4C40004 */ lwc1 $f4, 4($a2) -/* 0EC3D0 7F0B78A0 02601025 */ move $v0, $s3 -/* 0EC3D4 7F0B78A4 4600428D */ trunc.w.s $f10, $f8 -/* 0EC3D8 7F0B78A8 440D3000 */ mfc1 $t5, $f6 -/* 0EC3DC 7F0B78AC C7A80100 */ lwc1 $f8, 0x100($sp) -/* 0EC3E0 7F0B78B0 4600848D */ trunc.w.s $f18, $f16 -/* 0EC3E4 7F0B78B4 44095000 */ mfc1 $t1, $f10 -/* 0EC3E8 7F0B78B8 C4D00008 */ lwc1 $f16, 8($a2) -/* 0EC3EC 7F0B78BC 4600218D */ trunc.w.s $f6, $f4 -/* 0EC3F0 7F0B78C0 01A91823 */ subu $v1, $t5, $t1 -/* 0EC3F4 7F0B78C4 00630019 */ multu $v1, $v1 -/* 0EC3F8 7F0B78C8 440A9000 */ mfc1 $t2, $f18 -/* 0EC3FC 7F0B78CC 440B3000 */ mfc1 $t3, $f6 -/* 0EC400 7F0B78D0 4600428D */ trunc.w.s $f10, $f8 -/* 0EC404 7F0B78D4 8FB90064 */ lw $t9, 0x64($sp) -/* 0EC408 7F0B78D8 014B2023 */ subu $a0, $t2, $t3 -/* 0EC40C 7F0B78DC 4600848D */ trunc.w.s $f18, $f16 -/* 0EC410 7F0B78E0 440F5000 */ mfc1 $t7, $f10 -/* 0EC414 7F0B78E4 240B0001 */ li $t3, 1 -/* 0EC418 7F0B78E8 AFAB012C */ sw $t3, 0x12c($sp) -/* 0EC41C 7F0B78EC 00004812 */ mflo $t1 -/* 0EC420 7F0B78F0 440D9000 */ mfc1 $t5, $f18 -/* 0EC424 7F0B78F4 926E0000 */ lbu $t6, ($s3) -/* 0EC428 7F0B78F8 00840019 */ multu $a0, $a0 -/* 0EC42C 7F0B78FC 01ED2823 */ subu $a1, $t7, $t5 -/* 0EC430 7F0B7900 8FAD0064 */ lw $t5, 0x64($sp) -/* 0EC434 7F0B7904 0000C012 */ mflo $t8 -/* 0EC438 7F0B7908 01386021 */ addu $t4, $t1, $t8 -/* 0EC43C 7F0B790C 00000000 */ nop -/* 0EC440 7F0B7910 00A50019 */ multu $a1, $a1 -/* 0EC444 7F0B7914 00005012 */ mflo $t2 -/* 0EC448 7F0B7918 018A9021 */ addu $s2, $t4, $t2 -/* 0EC44C 7F0B791C 12CE000C */ beq $s6, $t6, .L7F0B7950 -/* 0EC450 7F0B7920 0240F025 */ move $fp, $s2 -/* 0EC454 7F0B7924 8F230008 */ lw $v1, 8($t9) -/* 0EC458 7F0B7928 0073082B */ sltu $at, $v1, $s3 -/* 0EC45C 7F0B792C 50200009 */ beql $at, $zero, .L7F0B7954 -/* 0EC460 7F0B7930 8DA90008 */ lw $t1, 8($t5) -/* 0EC464 7F0B7934 904FFFF8 */ lbu $t7, -8($v0) -.L7F0B7938: -/* 0EC468 7F0B7938 2442FFF8 */ addiu $v0, $v0, -8 -/* 0EC46C 7F0B793C 0062082B */ sltu $at, $v1, $v0 -/* 0EC470 7F0B7940 52CF0004 */ beql $s6, $t7, .L7F0B7954 -/* 0EC474 7F0B7944 8DA90008 */ lw $t1, 8($t5) -/* 0EC478 7F0B7948 5420FFFB */ bnezl $at, .L7F0B7938 -/* 0EC47C 7F0B794C 904FFFF8 */ lbu $t7, -8($v0) -.L7F0B7950: -/* 0EC480 7F0B7950 8DA90008 */ lw $t1, 8($t5) -.L7F0B7954: -/* 0EC484 7F0B7954 54490004 */ bnel $v0, $t1, .L7F0B7968 -/* 0EC488 7F0B7958 8C430004 */ lw $v1, 4($v0) -/* 0EC48C 7F0B795C 10000006 */ b .L7F0B7978 -/* 0EC490 7F0B7960 2410FFFF */ li $s0, -1 -/* 0EC494 7F0B7964 8C430004 */ lw $v1, 4($v0) -.L7F0B7968: -/* 0EC498 7F0B7968 3C018000 */ lui $at, 0x8000 -/* 0EC49C 7F0B796C 2463FFF8 */ addiu $v1, $v1, -8 -/* 0EC4A0 7F0B7970 0061C025 */ or $t8, $v1, $at -/* 0EC4A4 7F0B7974 97100000 */ lhu $s0, ($t8) -.L7F0B7978: -/* 0EC4A8 7F0B7978 0FC2ED8C */ jal check_if_imageID_is_light -/* 0EC4AC 7F0B797C 02002025 */ move $a0, $s0 -/* 0EC4B0 7F0B7980 10400002 */ beqz $v0, .L7F0B798C -/* 0EC4B4 7F0B7984 27A800A8 */ addiu $t0, $sp, 0xa8 -/* 0EC4B8 7F0B7988 265EFFFC */ addiu $fp, $s2, -4 -.L7F0B798C: -/* 0EC4BC 7F0B798C 8FAC00F0 */ lw $t4, 0xf0($sp) -/* 0EC4C0 7F0B7990 03CC082A */ slt $at, $fp, $t4 -/* 0EC4C4 7F0B7994 10200020 */ beqz $at, .L7F0B7A18 -/* 0EC4C8 7F0B7998 240104FD */ li $at, 1277 -/* 0EC4CC 7F0B799C 5201001F */ beql $s0, $at, .L7F0B7A1C -/* 0EC4D0 7F0B79A0 26B50001 */ addiu $s5, $s5, 1 -/* 0EC4D4 7F0B79A4 C7A400F8 */ lwc1 $f4, 0xf8($sp) -/* 0EC4D8 7F0B79A8 AFBE00F0 */ sw $fp, 0xf0($sp) -/* 0EC4DC 7F0B79AC E6840000 */ swc1 $f4, ($s4) -/* 0EC4E0 7F0B79B0 C7A600FC */ lwc1 $f6, 0xfc($sp) -/* 0EC4E4 7F0B79B4 E6860004 */ swc1 $f6, 4($s4) -/* 0EC4E8 7F0B79B8 C7A80100 */ lwc1 $f8, 0x100($sp) -/* 0EC4EC 7F0B79BC E6880008 */ swc1 $f8, 8($s4) -/* 0EC4F0 7F0B79C0 C7AA0104 */ lwc1 $f10, 0x104($sp) -/* 0EC4F4 7F0B79C4 E68A000C */ swc1 $f10, 0xc($s4) -/* 0EC4F8 7F0B79C8 C7B00108 */ lwc1 $f16, 0x108($sp) -/* 0EC4FC 7F0B79CC E6900010 */ swc1 $f16, 0x10($s4) -/* 0EC500 7F0B79D0 C7B2010C */ lwc1 $f18, 0x10c($sp) -/* 0EC504 7F0B79D4 E6920014 */ swc1 $f18, 0x14($s4) -/* 0EC508 7F0B79D8 8FAA009C */ lw $t2, 0x9c($sp) -/* 0EC50C 7F0B79DC 000A5900 */ sll $t3, $t2, 4 -/* 0EC510 7F0B79E0 01717021 */ addu $t6, $t3, $s1 -/* 0EC514 7F0B79E4 AE8E0018 */ sw $t6, 0x18($s4) -/* 0EC518 7F0B79E8 8FB900A0 */ lw $t9, 0xa0($sp) -/* 0EC51C 7F0B79EC 26AA0001 */ addiu $t2, $s5, 1 -/* 0EC520 7F0B79F0 00197900 */ sll $t7, $t9, 4 -/* 0EC524 7F0B79F4 01F16821 */ addu $t5, $t7, $s1 -/* 0EC528 7F0B79F8 AE8D001C */ sw $t5, 0x1c($s4) -/* 0EC52C 7F0B79FC 8FA900A4 */ lw $t1, 0xa4($sp) -/* 0EC530 7F0B7A00 A690002A */ sh $s0, 0x2a($s4) -/* 0EC534 7F0B7A04 AE930024 */ sw $s3, 0x24($s4) -/* 0EC538 7F0B7A08 0009C100 */ sll $t8, $t1, 4 -/* 0EC53C 7F0B7A0C 03116021 */ addu $t4, $t8, $s1 -/* 0EC540 7F0B7A10 AE8C0020 */ sw $t4, 0x20($s4) -/* 0EC544 7F0B7A14 A68A0028 */ sh $t2, 0x28($s4) -.L7F0B7A18: -/* 0EC548 7F0B7A18 26B50001 */ addiu $s5, $s5, 1 -.L7F0B7A1C: -/* 0EC54C 7F0B7A1C 24010004 */ li $at, 4 -/* 0EC550 7F0B7A20 16A1FED4 */ bne $s5, $at, .L7F0B7574 -/* 0EC554 7F0B7A24 00000000 */ nop -.L7F0B7A28: -/* 0EC558 7F0B7A28 82620008 */ lb $v0, 8($s3) -.L7F0B7A2C: -/* 0EC55C 7F0B7A2C 24010004 */ li $at, 4 -/* 0EC560 7F0B7A30 26730008 */ addiu $s3, $s3, 8 -/* 0EC564 7F0B7A34 10410003 */ beq $v0, $at, .L7F0B7A44 -/* 0EC568 7F0B7A38 2401FFB8 */ li $at, -72 -/* 0EC56C 7F0B7A3C 5441FDA5 */ bnel $v0, $at, .L7F0B70D4 -/* 0EC570 7F0B7A40 2401FFBF */ li $at, -65 -.L7F0B7A44: -/* 0EC574 7F0B7A44 8FBF004C */ lw $ra, 0x4c($sp) -/* 0EC578 7F0B7A48 8FA2012C */ lw $v0, 0x12c($sp) -/* 0EC57C 7F0B7A4C 8FB00028 */ lw $s0, 0x28($sp) -/* 0EC580 7F0B7A50 8FB1002C */ lw $s1, 0x2c($sp) -/* 0EC584 7F0B7A54 8FB20030 */ lw $s2, 0x30($sp) -/* 0EC588 7F0B7A58 8FB30034 */ lw $s3, 0x34($sp) -/* 0EC58C 7F0B7A5C 8FB40038 */ lw $s4, 0x38($sp) -/* 0EC590 7F0B7A60 8FB5003C */ lw $s5, 0x3c($sp) -/* 0EC594 7F0B7A64 8FB60040 */ lw $s6, 0x40($sp) -/* 0EC598 7F0B7A68 8FB70044 */ lw $s7, 0x44($sp) -/* 0EC59C 7F0B7A6C 8FBE0048 */ lw $fp, 0x48($sp) -/* 0EC5A0 7F0B7A70 03E00008 */ jr $ra -/* 0EC5A4 7F0B7A74 27BD0140 */ addiu $sp, $sp, 0x140 -) -#endif - - - - -#ifdef NONMATCHING -void bgTestBulletHitBackground(void) { - -} -#else -GLOBAL_ASM( -.text -glabel bgTestBulletHitBackground -/* 0EC5A8 7F0B7A78 27BDFF28 */ addiu $sp, $sp, -0xd8 -/* 0EC5AC 7F0B7A7C 3C0E7FFF */ lui $t6, (0x7FFFFFFF >> 16) # lui $t6, 0x7fff -/* 0EC5B0 7F0B7A80 35CEFFFF */ ori $t6, (0x7FFFFFFF & 0xFFFF) # ori $t6, $t6, 0xffff -/* 0EC5B4 7F0B7A84 AFBF0044 */ sw $ra, 0x44($sp) -/* 0EC5B8 7F0B7A88 AFBE0040 */ sw $fp, 0x40($sp) -/* 0EC5BC 7F0B7A8C AFB7003C */ sw $s7, 0x3c($sp) -/* 0EC5C0 7F0B7A90 AFB60038 */ sw $s6, 0x38($sp) -/* 0EC5C4 7F0B7A94 AFB50034 */ sw $s5, 0x34($sp) -/* 0EC5C8 7F0B7A98 AFB40030 */ sw $s4, 0x30($sp) -/* 0EC5CC 7F0B7A9C AFB3002C */ sw $s3, 0x2c($sp) -/* 0EC5D0 7F0B7AA0 AFB20028 */ sw $s2, 0x28($sp) -/* 0EC5D4 7F0B7AA4 AFB10024 */ sw $s1, 0x24($sp) -/* 0EC5D8 7F0B7AA8 AFB00020 */ sw $s0, 0x20($sp) -/* 0EC5DC 7F0B7AAC AFA600E0 */ sw $a2, 0xe0($sp) -/* 0EC5E0 7F0B7AB0 AFA0006C */ sw $zero, 0x6c($sp) -/* 0EC5E4 7F0B7AB4 AFAE0074 */ sw $t6, 0x74($sp) -/* 0EC5E8 7F0B7AB8 3C018004 */ lui $at, %hi(room_data_float1) -/* 0EC5EC 7F0B7ABC C42013F4 */ lwc1 $f0, %lo(room_data_float1)($at) -/* 0EC5F0 7F0B7AC0 C4840000 */ lwc1 $f4, ($a0) -/* 0EC5F4 7F0B7AC4 0006C080 */ sll $t8, $a2, 2 -/* 0EC5F8 7F0B7AC8 0306C021 */ addu $t8, $t8, $a2 -/* 0EC5FC 7F0B7ACC 46002182 */ mul.s $f6, $f4, $f0 -/* 0EC600 7F0B7AD0 3C198004 */ lui $t9, %hi(g_BgRoomInfo) -/* 0EC604 7F0B7AD4 27391414 */ addiu $t9, %lo(g_BgRoomInfo) # addiu $t9, $t9, 0x1414 -/* 0EC608 7F0B7AD8 0018C100 */ sll $t8, $t8, 4 -/* 0EC60C 7F0B7ADC 03194021 */ addu $t0, $t8, $t9 -/* 0EC610 7F0B7AE0 8D02002C */ lw $v0, 0x2c($t0) -/* 0EC614 7F0B7AE4 00E08825 */ move $s1, $a3 -/* 0EC618 7F0B7AE8 E7A600C4 */ swc1 $f6, 0xc4($sp) -/* 0EC61C 7F0B7AEC C4880004 */ lwc1 $f8, 4($a0) -/* 0EC620 7F0B7AF0 46004282 */ mul.s $f10, $f8, $f0 -/* 0EC624 7F0B7AF4 E7AA00C8 */ swc1 $f10, 0xc8($sp) -/* 0EC628 7F0B7AF8 C4900008 */ lwc1 $f16, 8($a0) -/* 0EC62C 7F0B7AFC 46008482 */ mul.s $f18, $f16, $f0 -/* 0EC630 7F0B7B00 E7B200CC */ swc1 $f18, 0xcc($sp) -/* 0EC634 7F0B7B04 C4A40000 */ lwc1 $f4, ($a1) -/* 0EC638 7F0B7B08 46002182 */ mul.s $f6, $f4, $f0 -/* 0EC63C 7F0B7B0C E7A600B8 */ swc1 $f6, 0xb8($sp) -/* 0EC640 7F0B7B10 C4A80004 */ lwc1 $f8, 4($a1) -/* 0EC644 7F0B7B14 C7A400B8 */ lwc1 $f4, 0xb8($sp) -/* 0EC648 7F0B7B18 C7A600C4 */ lwc1 $f6, 0xc4($sp) -/* 0EC64C 7F0B7B1C 46004282 */ mul.s $f10, $f8, $f0 -/* 0EC650 7F0B7B20 46062201 */ sub.s $f8, $f4, $f6 -/* 0EC654 7F0B7B24 C7A600CC */ lwc1 $f6, 0xcc($sp) -/* 0EC658 7F0B7B28 E7AA00BC */ swc1 $f10, 0xbc($sp) -/* 0EC65C 7F0B7B2C C4B00008 */ lwc1 $f16, 8($a1) -/* 0EC660 7F0B7B30 C7AA00BC */ lwc1 $f10, 0xbc($sp) -/* 0EC664 7F0B7B34 E7A800AC */ swc1 $f8, 0xac($sp) -/* 0EC668 7F0B7B38 46008482 */ mul.s $f18, $f16, $f0 -/* 0EC66C 7F0B7B3C C7B000C8 */ lwc1 $f16, 0xc8($sp) -/* 0EC670 7F0B7B40 E7B200C0 */ swc1 $f18, 0xc0($sp) -/* 0EC674 7F0B7B44 C7A400C0 */ lwc1 $f4, 0xc0($sp) -/* 0EC678 7F0B7B48 46105481 */ sub.s $f18, $f10, $f16 -/* 0EC67C 7F0B7B4C 46062201 */ sub.s $f8, $f4, $f6 -/* 0EC680 7F0B7B50 E7B200B0 */ swc1 $f18, 0xb0($sp) -/* 0EC684 7F0B7B54 14400003 */ bnez $v0, .L7F0B7B64 -/* 0EC688 7F0B7B58 E7A800B4 */ swc1 $f8, 0xb4($sp) -/* 0EC68C 7F0B7B5C 10000081 */ b .L7F0B7D64 -/* 0EC690 7F0B7B60 00001025 */ move $v0, $zero -.L7F0B7B64: -/* 0EC694 7F0B7B64 85030030 */ lh $v1, 0x30($t0) -/* 0EC698 7F0B7B68 0000A025 */ move $s4, $zero -/* 0EC69C 7F0B7B6C 00409825 */ move $s3, $v0 -/* 0EC6A0 7F0B7B70 1860005A */ blez $v1, .L7F0B7CDC -/* 0EC6A4 7F0B7B74 24550004 */ addiu $s5, $v0, 4 -/* 0EC6A8 7F0B7B78 24560010 */ addiu $s6, $v0, 0x10 -/* 0EC6AC 7F0B7B7C A7A300D2 */ sh $v1, 0xd2($sp) -/* 0EC6B0 7F0B7B80 AFA80058 */ sw $t0, 0x58($sp) -/* 0EC6B4 7F0B7B84 27BE00AC */ addiu $fp, $sp, 0xac -/* 0EC6B8 7F0B7B88 27B700C4 */ addiu $s7, $sp, 0xc4 -.L7F0B7B8C: -/* 0EC6BC 7F0B7B8C 02E02025 */ move $a0, $s7 -/* 0EC6C0 7F0B7B90 03C02825 */ move $a1, $fp -/* 0EC6C4 7F0B7B94 02A03025 */ move $a2, $s5 -/* 0EC6C8 7F0B7B98 0FC2DB3B */ jal bgTestLineIntersectsBbox -/* 0EC6CC 7F0B7B9C 02C03825 */ move $a3, $s6 -/* 0EC6D0 7F0B7BA0 10400047 */ beqz $v0, .L7F0B7CC0 -/* 0EC6D4 7F0B7BA4 02E02025 */ move $a0, $s7 -/* 0EC6D8 7F0B7BA8 8FA900E0 */ lw $t1, 0xe0($sp) -/* 0EC6DC 7F0B7BAC 27AA007C */ addiu $t2, $sp, 0x7c -/* 0EC6E0 7F0B7BB0 AFAA0014 */ sw $t2, 0x14($sp) -/* 0EC6E4 7F0B7BB4 27A500B8 */ addiu $a1, $sp, 0xb8 -/* 0EC6E8 7F0B7BB8 03C03025 */ move $a2, $fp -/* 0EC6EC 7F0B7BBC 02603825 */ move $a3, $s3 -/* 0EC6F0 7F0B7BC0 0FC2DC04 */ jal bgTestLineIntersectionInRoom -/* 0EC6F4 7F0B7BC4 AFA90010 */ sw $t1, 0x10($sp) -/* 0EC6F8 7F0B7BC8 1040003D */ beqz $v0, .L7F0B7CC0 -/* 0EC6FC 7F0B7BCC C7AA007C */ lwc1 $f10, 0x7c($sp) -/* 0EC700 7F0B7BD0 C7B000C4 */ lwc1 $f16, 0xc4($sp) -/* 0EC704 7F0B7BD4 C7A60080 */ lwc1 $f6, 0x80($sp) -/* 0EC708 7F0B7BD8 C7A800C8 */ lwc1 $f8, 0xc8($sp) -/* 0EC70C 7F0B7BDC 46105481 */ sub.s $f18, $f10, $f16 -/* 0EC710 7F0B7BE0 24090001 */ li $t1, 1 -/* 0EC714 7F0B7BE4 AFA9006C */ sw $t1, 0x6c($sp) -/* 0EC718 7F0B7BE8 46083281 */ sub.s $f10, $f6, $f8 -/* 0EC71C 7F0B7BEC 87A400A6 */ lh $a0, 0xa6($sp) -/* 0EC720 7F0B7BF0 4600910D */ trunc.w.s $f4, $f18 -/* 0EC724 7F0B7BF4 C7B20084 */ lwc1 $f18, 0x84($sp) -/* 0EC728 7F0B7BF8 4600540D */ trunc.w.s $f16, $f10 -/* 0EC72C 7F0B7BFC 44022000 */ mfc1 $v0, $f4 -/* 0EC730 7F0B7C00 C7A400CC */ lwc1 $f4, 0xcc($sp) -/* 0EC734 7F0B7C04 00420019 */ multu $v0, $v0 -/* 0EC738 7F0B7C08 44038000 */ mfc1 $v1, $f16 -/* 0EC73C 7F0B7C0C 46049181 */ sub.s $f6, $f18, $f4 -/* 0EC740 7F0B7C10 4600320D */ trunc.w.s $f8, $f6 -/* 0EC744 7F0B7C14 00007012 */ mflo $t6 -/* 0EC748 7F0B7C18 44054000 */ mfc1 $a1, $f8 -/* 0EC74C 7F0B7C1C 00000000 */ nop -/* 0EC750 7F0B7C20 00630019 */ multu $v1, $v1 -/* 0EC754 7F0B7C24 00007812 */ mflo $t7 -/* 0EC758 7F0B7C28 01CFC021 */ addu $t8, $t6, $t7 -/* 0EC75C 7F0B7C2C 00000000 */ nop -/* 0EC760 7F0B7C30 00A50019 */ multu $a1, $a1 -/* 0EC764 7F0B7C34 0000C812 */ mflo $t9 -/* 0EC768 7F0B7C38 03199021 */ addu $s2, $t8, $t9 -/* 0EC76C 7F0B7C3C 0FC2ED8C */ jal check_if_imageID_is_light -/* 0EC770 7F0B7C40 02408025 */ move $s0, $s2 -/* 0EC774 7F0B7C44 10400002 */ beqz $v0, .L7F0B7C50 -/* 0EC778 7F0B7C48 8FAA0074 */ lw $t2, 0x74($sp) -/* 0EC77C 7F0B7C4C 2650FFFC */ addiu $s0, $s2, -4 -.L7F0B7C50: -/* 0EC780 7F0B7C50 020A082A */ slt $at, $s0, $t2 -/* 0EC784 7F0B7C54 5020001B */ beql $at, $zero, .L7F0B7CC4 -/* 0EC788 7F0B7C58 87B900D2 */ lh $t9, 0xd2($sp) -/* 0EC78C 7F0B7C5C C7AA007C */ lwc1 $f10, 0x7c($sp) -/* 0EC790 7F0B7C60 AFB00074 */ sw $s0, 0x74($sp) -/* 0EC794 7F0B7C64 E62A0000 */ swc1 $f10, ($s1) -/* 0EC798 7F0B7C68 C7B00080 */ lwc1 $f16, 0x80($sp) -/* 0EC79C 7F0B7C6C E6300004 */ swc1 $f16, 4($s1) -/* 0EC7A0 7F0B7C70 C7B20084 */ lwc1 $f18, 0x84($sp) -/* 0EC7A4 7F0B7C74 E6320008 */ swc1 $f18, 8($s1) -/* 0EC7A8 7F0B7C78 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 0EC7AC 7F0B7C7C E624000C */ swc1 $f4, 0xc($s1) -/* 0EC7B0 7F0B7C80 C7A6008C */ lwc1 $f6, 0x8c($sp) -/* 0EC7B4 7F0B7C84 E6260010 */ swc1 $f6, 0x10($s1) -/* 0EC7B8 7F0B7C88 C7A80090 */ lwc1 $f8, 0x90($sp) -/* 0EC7BC 7F0B7C8C E6280014 */ swc1 $f8, 0x14($s1) -/* 0EC7C0 7F0B7C90 8FAB0094 */ lw $t3, 0x94($sp) -/* 0EC7C4 7F0B7C94 AE2B0018 */ sw $t3, 0x18($s1) -/* 0EC7C8 7F0B7C98 8FAC0098 */ lw $t4, 0x98($sp) -/* 0EC7CC 7F0B7C9C AE2C001C */ sw $t4, 0x1c($s1) -/* 0EC7D0 7F0B7CA0 8FAD009C */ lw $t5, 0x9c($sp) -/* 0EC7D4 7F0B7CA4 AE2D0020 */ sw $t5, 0x20($s1) -/* 0EC7D8 7F0B7CA8 87AE00A6 */ lh $t6, 0xa6($sp) -/* 0EC7DC 7F0B7CAC A62E002A */ sh $t6, 0x2a($s1) -/* 0EC7E0 7F0B7CB0 8FAF00A0 */ lw $t7, 0xa0($sp) -/* 0EC7E4 7F0B7CB4 AE2F0024 */ sw $t7, 0x24($s1) -/* 0EC7E8 7F0B7CB8 87B800A4 */ lh $t8, 0xa4($sp) -/* 0EC7EC 7F0B7CBC A6380028 */ sh $t8, 0x28($s1) -.L7F0B7CC0: -/* 0EC7F0 7F0B7CC0 87B900D2 */ lh $t9, 0xd2($sp) -.L7F0B7CC4: -/* 0EC7F4 7F0B7CC4 26940001 */ addiu $s4, $s4, 1 -/* 0EC7F8 7F0B7CC8 2673001C */ addiu $s3, $s3, 0x1c -/* 0EC7FC 7F0B7CCC 26B5001C */ addiu $s5, $s5, 0x1c -/* 0EC800 7F0B7CD0 1699FFAE */ bne $s4, $t9, .L7F0B7B8C -/* 0EC804 7F0B7CD4 26D6001C */ addiu $s6, $s6, 0x1c -/* 0EC808 7F0B7CD8 8FA80058 */ lw $t0, 0x58($sp) -.L7F0B7CDC: -/* 0EC80C 7F0B7CDC 8FA9006C */ lw $t1, 0x6c($sp) -/* 0EC810 7F0B7CE0 51200020 */ beql $t1, $zero, .L7F0B7D64 -/* 0EC814 7F0B7CE4 8FA2006C */ lw $v0, 0x6c($sp) -/* 0EC818 7F0B7CE8 8E220024 */ lw $v0, 0x24($s1) -/* 0EC81C 7F0B7CEC 240400F5 */ li $a0, 245 -/* 0EC820 7F0B7CF0 904A0000 */ lbu $t2, ($v0) -/* 0EC824 7F0B7CF4 508A000D */ beql $a0, $t2, .L7F0B7D2C -/* 0EC828 7F0B7CF8 8D0C0008 */ lw $t4, 8($t0) -/* 0EC82C 7F0B7CFC 8D030008 */ lw $v1, 8($t0) -/* 0EC830 7F0B7D00 0062082B */ sltu $at, $v1, $v0 -/* 0EC834 7F0B7D04 50200009 */ beql $at, $zero, .L7F0B7D2C -/* 0EC838 7F0B7D08 8D0C0008 */ lw $t4, 8($t0) -/* 0EC83C 7F0B7D0C 904BFFF8 */ lbu $t3, -8($v0) -.L7F0B7D10: -/* 0EC840 7F0B7D10 2442FFF8 */ addiu $v0, $v0, -8 -/* 0EC844 7F0B7D14 0062082B */ sltu $at, $v1, $v0 -/* 0EC848 7F0B7D18 508B0004 */ beql $a0, $t3, .L7F0B7D2C -/* 0EC84C 7F0B7D1C 8D0C0008 */ lw $t4, 8($t0) -/* 0EC850 7F0B7D20 5420FFFB */ bnezl $at, .L7F0B7D10 -/* 0EC854 7F0B7D24 904BFFF8 */ lbu $t3, -8($v0) -/* 0EC858 7F0B7D28 8D0C0008 */ lw $t4, 8($t0) -.L7F0B7D2C: -/* 0EC85C 7F0B7D2C 544C0006 */ bnel $v0, $t4, .L7F0B7D48 -/* 0EC860 7F0B7D30 904D0001 */ lbu $t5, 1($v0) -/* 0EC864 7F0B7D34 2402FFFF */ li $v0, -1 -/* 0EC868 7F0B7D38 A622002C */ sh $v0, 0x2c($s1) -/* 0EC86C 7F0B7D3C 10000008 */ b .L7F0B7D60 -/* 0EC870 7F0B7D40 A622002E */ sh $v0, 0x2e($s1) -/* 0EC874 7F0B7D44 904D0001 */ lbu $t5, 1($v0) -.L7F0B7D48: -/* 0EC878 7F0B7D48 000D7142 */ srl $t6, $t5, 5 -/* 0EC87C 7F0B7D4C A62E002C */ sh $t6, 0x2c($s1) -/* 0EC880 7F0B7D50 8C4F0000 */ lw $t7, ($v0) -/* 0EC884 7F0B7D54 000FC2C0 */ sll $t8, $t7, 0xb -/* 0EC888 7F0B7D58 0018CF82 */ srl $t9, $t8, 0x1e -/* 0EC88C 7F0B7D5C A639002E */ sh $t9, 0x2e($s1) -.L7F0B7D60: -/* 0EC890 7F0B7D60 8FA2006C */ lw $v0, 0x6c($sp) -.L7F0B7D64: -/* 0EC894 7F0B7D64 8FBF0044 */ lw $ra, 0x44($sp) -/* 0EC898 7F0B7D68 8FB00020 */ lw $s0, 0x20($sp) -/* 0EC89C 7F0B7D6C 8FB10024 */ lw $s1, 0x24($sp) -/* 0EC8A0 7F0B7D70 8FB20028 */ lw $s2, 0x28($sp) -/* 0EC8A4 7F0B7D74 8FB3002C */ lw $s3, 0x2c($sp) -/* 0EC8A8 7F0B7D78 8FB40030 */ lw $s4, 0x30($sp) -/* 0EC8AC 7F0B7D7C 8FB50034 */ lw $s5, 0x34($sp) -/* 0EC8B0 7F0B7D80 8FB60038 */ lw $s6, 0x38($sp) -/* 0EC8B4 7F0B7D84 8FB7003C */ lw $s7, 0x3c($sp) -/* 0EC8B8 7F0B7D88 8FBE0040 */ lw $fp, 0x40($sp) -/* 0EC8BC 7F0B7D8C 03E00008 */ jr $ra -/* 0EC8C0 7F0B7D90 27BD00D8 */ addiu $sp, $sp, 0xd8 -) -#endif - - - - - - -void sub_GAME_7F0B7D94(void) { - D_800448A0 = 0; - D_800448A4 = 0; + return found; } -u8 sub_GAME_7F0B7DA8(s32 arg0) +/** + * Address: 7F0B7D94 + */ +void bgResetPortalQueue(void) +{ + g_BgPortalQueueWriteIndex = 0; + g_BgPortalQueueReadIndex = 0; +} + + +/** + * Address: 7F0B7DA8 + */ +u8 bgIncrementRoomPortalVisitCount(s32 roomnum) { s_room_info* room_info; - u8 tmp_flags; - u8 bitflags; + u8 tmp; + u8 count; u8 out; - room_info = &g_BgRoomInfo[arg0]; - bitflags = room_info->portals_to_room_count; - out = bitflags; + room_info = &g_BgRoomInfo[roomnum]; + count = room_info->portal_visit_count; + out = count; - if ((s32) bitflags < 0xFF) + if ((s32) count < 0xFF) { - tmp_flags = bitflags + 1; - room_info->portals_to_room_count = tmp_flags; - out = tmp_flags & 0xFF; + tmp = count + 1; + room_info->portal_visit_count = tmp; + out = tmp & 0xFF; } return out; } -#ifdef NONMATCHING -void sub_GAME_7F0B7DE4(s32 arg0, s32 arg1, s32 arg2, s32 arg3, void *arg4) { - void *sp1C; - void *temp_v1; - void *temp_v0; - s32 temp_a0; - s32 phi_a0; - - // Node 0 - temp_v1 = ((D_800448A0 << 5) + &dword_CODE_bss_8007C100); - if ((arg3 < 2) || (sub_GAME_7F0B7DA8(((temp_v0->unk4 ^ temp_v0->unk5) ^ arg1)) < 9)) +/** + * Address: 7F0B7DE4 + */ +#ifdef VERSION_EU +void bgQueuePortalTraversal(s32 arg0, s32 arg1, s32 portalnum, f32 *arg4) +{ + bg_queued_portal_entry *entry; + entry = &g_BgPortalQueue[g_BgPortalQueueWriteIndex]; + if (portalnum >= 2) { - // Node 2 - *temp_v1 = arg0; - temp_v1->unk4 = arg1; - temp_v1->unkC = (s32) arg3; - temp_v1->unk8 = arg2; - temp_v1->unk10 = (f32) *arg4; - temp_v1->unk14 = (f32) arg4->unk4; - temp_v1->unk18 = (f32) arg4->unk8; - temp_v1->unk1C = (f32) arg4->unkC; - temp_a0 = D_800448A4; - *&D_800448A0 = temp_a0; - phi_a0 = temp_a0; - if (temp_a0 == 0x1f4) + if (bgIncrementRoomPortalVisitCount((g_BgPortals[arg1].connectedRoom2 ^ g_BgPortals[arg1].connectedRoom1) ^ arg0) >= 9) { - // Node 3 - *&D_800448A0 = 0; - phi_a0 = 0; + return; } - // Node 4 - if (D_800448A4 == phi_a0) + } + entry->arg0 = arg0; + entry->roomnum = arg1; + entry->portalnum = portalnum; + entry->sp4[0] = arg4[0]; + entry->sp4[1] = arg4[1]; + entry->sp4[2] = arg4[2]; + entry->sp4[3] = arg4[3]; + g_BgPortalQueueWriteIndex++; + if (g_BgPortalQueueWriteIndex == BG_PORTAL_QUEUE_LEN) + { + g_BgPortalQueueWriteIndex = 0; + } + if (g_BgPortalQueueWriteIndex == g_BgPortalQueueReadIndex) + { + g_BgPortalQueueWriteIndex--; + } +} +#else +void bgQueuePortalTraversal(s32 arg0, s32 arg1, s32 portalnum, s32 depth, f32 *arg4) +{ + bg_queued_portal_entry *entry; + entry = &g_BgPortalQueue[g_BgPortalQueueWriteIndex]; + if (depth >= 2) + { + if (bgIncrementRoomPortalVisitCount((g_BgPortals[portalnum].connectedRoom2 ^ g_BgPortals[portalnum].connectedRoom1) ^ arg1) >= 9) { - // Node 5 + return; + } + } + entry->arg0 = arg0; + entry->roomnum = arg1; + entry->portalnum = portalnum; + entry->arg3 = depth; + entry->sp10[0] = arg4[0]; + entry->sp10[1] = arg4[1]; + entry->sp10[2] = arg4[2]; + entry->sp10[3] = arg4[3]; + g_BgPortalQueueWriteIndex++; + if (g_BgPortalQueueWriteIndex == BG_PORTAL_QUEUE_LEN) + { + g_BgPortalQueueWriteIndex = 0; + } + if (g_BgPortalQueueWriteIndex == g_BgPortalQueueReadIndex) + { #ifdef DEBUG osSyncPrintf("bg: pstackat: Overflow "); #endif - *&D_800448A0 = (s32) (phi_a0 + -1); + g_BgPortalQueueWriteIndex--; + } +} +#endif + + +/** + * Address: 7F0B7EE4 + */ +#if defined(VERSION_EU) +bool bgProcessNextQueuedPortal(void) +{ + bg_queued_portal_entry *entry; + + if (g_BgPortalQueueReadIndex == g_BgPortalQueueWriteIndex) { + return 0; + } + + entry = &g_BgPortalQueue[g_BgPortalQueueReadIndex]; + + sub_GAME_7F0B7F84(entry->arg0, entry->roomnum, entry->portalnum, entry->sp4); + + g_BgPortalQueueReadIndex++; + + if (g_BgPortalQueueReadIndex == BG_PORTAL_QUEUE_LEN) { + g_BgPortalQueueReadIndex = 0; + } + + return 1; +} +#else +bool bgProcessNextQueuedPortal(s32 *arg0) +{ + bg_queued_portal_entry *entry; + s32 value; + + value = *arg0; + + if (g_BgPortalQueueReadIndex == g_BgPortalQueueWriteIndex) { + return 0; + } + + entry = &g_BgPortalQueue[g_BgPortalQueueReadIndex]; + + value = sub_GAME_7F0B7F84(value, entry->roomnum, entry->portalnum, entry->arg3, entry->sp10); + + g_BgPortalQueueReadIndex++; + + if (g_BgPortalQueueReadIndex == BG_PORTAL_QUEUE_LEN) { + g_BgPortalQueueReadIndex = 0; + } + + *arg0 = value; + + return 1; +} +#endif + + +/** + * EU version drops the value parameter and is type void unlike US/JP which returns s32. + * + * bgPortalDescend + */ +#if defined(VERSION_EU) +void sub_GAME_7F0B7F84(s32 roomnum, s32 portalnum /*canonically p*/, s32 depth, bbox2d *parentbox) +{ + bbox2d screenbox; + coord3d *playerpos; + s32 otherroom; + struct PortalMetric metric; + f32 playermetric; + f32 portalmetric; + s32 i; + + D_80044898++; + + if (depth >= 101) + { +#ifdef DEBUG + osSyncPrintf("bg: << Deep\n"); +#endif + return; + } + + if (D_8004489C < depth) + { + return; + } + + if (depth >= 16) + { + return; + } + + if (depth); + +#ifdef DEBUG + assert(portalnum < PORTMAX); + osSyncPrintf("bg: << bgPortalDescend: Inside out portal '%s' ", bgDebPrintPORTALID(portalnum)); +#endif + + if (g_BgPortals[portalnum].controlbytes1 & PORTALFLAG_DISABLED) + { + return; + } + + i = (s32) &D_800442FC[portalnum]; + + if (i); + + playerpos = bondviewGetCurrentPlayersPosition(); + sub_GAME_7F0B96CC(portalnum, &metric); + playermetric = ((metric.normal.z * playerpos->z) + ((metric.normal.x * playerpos->x) + (metric.normal.y * playerpos->y))) * room_data_float1; + portalmetric = sub_GAME_7F0B9990(portalnum); + + if (roomnum == g_BgPortals[portalnum].connectedRoom1) + { + otherroom = g_BgPortals[portalnum].connectedRoom2; + + if (metric.max <= (playermetric - portalmetric)) + { + return; } } else { - - } - // Node 6 - return; -} -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B7DE4 -/* 0EC914 7F0B7DE4 3C088004 */ lui $t0, %hi(D_800448A0) -/* 0EC918 7F0B7DE8 250848A0 */ addiu $t0, %lo(D_800448A0) # addiu $t0, $t0, 0x48a0 -/* 0EC91C 7F0B7DEC 8D0E0000 */ lw $t6, ($t0) -/* 0EC920 7F0B7DF0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0EC924 7F0B7DF4 3C188008 */ lui $t8, %hi(dword_CODE_bss_8007C100) -/* 0EC928 7F0B7DF8 2718C100 */ addiu $t8, %lo(dword_CODE_bss_8007C100) # addiu $t8, $t8, -0x3f00 -/* 0EC92C 7F0B7DFC 28E10002 */ slti $at, $a3, 2 -/* 0EC930 7F0B7E00 000E7940 */ sll $t7, $t6, 5 -/* 0EC934 7F0B7E04 AFBF0014 */ sw $ra, 0x14($sp) -/* 0EC938 7F0B7E08 AFA40020 */ sw $a0, 0x20($sp) -/* 0EC93C 7F0B7E0C AFA50024 */ sw $a1, 0x24($sp) -/* 0EC940 7F0B7E10 AFA60028 */ sw $a2, 0x28($sp) -/* 0EC944 7F0B7E14 14200012 */ bnez $at, .L7F0B7E60 -/* 0EC948 7F0B7E18 01F81821 */ addu $v1, $t7, $t8 -/* 0EC94C 7F0B7E1C 3C198008 */ lui $t9, %hi(g_BgPortals) -/* 0EC950 7F0B7E20 8F39FF80 */ lw $t9, %lo(g_BgPortals)($t9) -/* 0EC954 7F0B7E24 000650C0 */ sll $t2, $a2, 3 -/* 0EC958 7F0B7E28 032A1021 */ addu $v0, $t9, $t2 -/* 0EC95C 7F0B7E2C 904B0004 */ lbu $t3, 4($v0) -/* 0EC960 7F0B7E30 904C0005 */ lbu $t4, 5($v0) -/* 0EC964 7F0B7E34 AFA7002C */ sw $a3, 0x2c($sp) -/* 0EC968 7F0B7E38 AFA3001C */ sw $v1, 0x1c($sp) -/* 0EC96C 7F0B7E3C 016C6826 */ xor $t5, $t3, $t4 -/* 0EC970 7F0B7E40 0FC2DF6A */ jal sub_GAME_7F0B7DA8 -/* 0EC974 7F0B7E44 01A52026 */ xor $a0, $t5, $a1 -/* 0EC978 7F0B7E48 3C088004 */ lui $t0, %hi(D_800448A0) -/* 0EC97C 7F0B7E4C 28410009 */ slti $at, $v0, 9 -/* 0EC980 7F0B7E50 250848A0 */ addiu $t0, %lo(D_800448A0) # addiu $t0, $t0, 0x48a0 -/* 0EC984 7F0B7E54 8FA3001C */ lw $v1, 0x1c($sp) -/* 0EC988 7F0B7E58 1020001E */ beqz $at, .L7F0B7ED4 -/* 0EC98C 7F0B7E5C 8FA7002C */ lw $a3, 0x2c($sp) -.L7F0B7E60: -/* 0EC990 7F0B7E60 8FAF0020 */ lw $t7, 0x20($sp) -/* 0EC994 7F0B7E64 8FA20030 */ lw $v0, 0x30($sp) -/* 0EC998 7F0B7E68 240101F4 */ li $at, 500 -/* 0EC99C 7F0B7E6C AC6F0000 */ sw $t7, ($v1) -/* 0EC9A0 7F0B7E70 8FB80024 */ lw $t8, 0x24($sp) -/* 0EC9A4 7F0B7E74 3C0B8004 */ lui $t3, %hi(D_800448A4) -/* 0EC9A8 7F0B7E78 AC780004 */ sw $t8, 4($v1) -/* 0EC9AC 7F0B7E7C 8FA90028 */ lw $t1, 0x28($sp) -/* 0EC9B0 7F0B7E80 AC67000C */ sw $a3, 0xc($v1) -/* 0EC9B4 7F0B7E84 AC690008 */ sw $t1, 8($v1) -/* 0EC9B8 7F0B7E88 C4440000 */ lwc1 $f4, ($v0) -/* 0EC9BC 7F0B7E8C E4640010 */ swc1 $f4, 0x10($v1) -/* 0EC9C0 7F0B7E90 C4460004 */ lwc1 $f6, 4($v0) -/* 0EC9C4 7F0B7E94 E4660014 */ swc1 $f6, 0x14($v1) -/* 0EC9C8 7F0B7E98 C4480008 */ lwc1 $f8, 8($v0) -/* 0EC9CC 7F0B7E9C E4680018 */ swc1 $f8, 0x18($v1) -/* 0EC9D0 7F0B7EA0 C44A000C */ lwc1 $f10, 0xc($v0) -/* 0EC9D4 7F0B7EA4 E46A001C */ swc1 $f10, 0x1c($v1) -/* 0EC9D8 7F0B7EA8 8D190000 */ lw $t9, ($t0) -/* 0EC9DC 7F0B7EAC 27240001 */ addiu $a0, $t9, 1 -/* 0EC9E0 7F0B7EB0 14810003 */ bne $a0, $at, .L7F0B7EC0 -/* 0EC9E4 7F0B7EB4 AD040000 */ sw $a0, ($t0) -/* 0EC9E8 7F0B7EB8 AD000000 */ sw $zero, ($t0) -/* 0EC9EC 7F0B7EBC 00002025 */ move $a0, $zero -.L7F0B7EC0: -/* 0EC9F0 7F0B7EC0 8D6B48A4 */ lw $t3, %lo(D_800448A4)($t3) -/* 0EC9F4 7F0B7EC4 248CFFFF */ addiu $t4, $a0, -1 -/* 0EC9F8 7F0B7EC8 55640003 */ bnel $t3, $a0, .L7F0B7ED8 -/* 0EC9FC 7F0B7ECC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0ECA00 7F0B7ED0 AD0C0000 */ sw $t4, ($t0) -.L7F0B7ED4: -/* 0ECA04 7F0B7ED4 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0B7ED8: -/* 0ECA08 7F0B7ED8 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0ECA0C 7F0B7EDC 03E00008 */ jr $ra -/* 0ECA10 7F0B7EE0 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B7DE4 -/* 0E9B10 7F0B7120 3C088004 */ lui $t0, %hi(D_800448A0) # $t0, 0x8004 -/* 0E9B14 7F0B7124 2508DD88 */ addiu $t0, %lo(D_800448A0) # addiu $t0, $t0, -0x2278 -/* 0E9B18 7F0B7128 8D0E0000 */ lw $t6, ($t0) -/* 0E9B1C 7F0B712C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0E9B20 7F0B7130 3C188007 */ lui $t8, %hi(dword_CODE_bss_8007C100) # $t8, 0x8007 -/* 0E9B24 7F0B7134 000E7880 */ sll $t7, $t6, 2 -/* 0E9B28 7F0B7138 01EE7821 */ addu $t7, $t7, $t6 -/* 0E9B2C 7F0B713C 000F7880 */ sll $t7, $t7, 2 -/* 0E9B30 7F0B7140 2718A040 */ addiu $t8, %lo(dword_CODE_bss_8007C100) # addiu $t8, $t8, -0x5fc0 -/* 0E9B34 7F0B7144 28C10002 */ slti $at, $a2, 2 -/* 0E9B38 7F0B7148 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E9B3C 7F0B714C AFA40020 */ sw $a0, 0x20($sp) -/* 0E9B40 7F0B7150 AFA50024 */ sw $a1, 0x24($sp) -/* 0E9B44 7F0B7154 14200014 */ bnez $at, .L7F0B71A8 -/* 0E9B48 7F0B7158 01F81821 */ addu $v1, $t7, $t8 -/* 0E9B4C 7F0B715C 3C198007 */ lui $t9, %hi(g_BgPortals) # $t9, 0x8007 -/* 0E9B50 7F0B7160 8F39B3C8 */ lw $t9, %lo(g_BgPortals)($t9) -/* 0E9B54 7F0B7164 000550C0 */ sll $t2, $a1, 3 -/* 0E9B58 7F0B7168 032A1021 */ addu $v0, $t9, $t2 -/* 0E9B5C 7F0B716C 904B0004 */ lbu $t3, 4($v0) -/* 0E9B60 7F0B7170 904C0005 */ lbu $t4, 5($v0) -/* 0E9B64 7F0B7174 AFA7002C */ sw $a3, 0x2c($sp) -/* 0E9B68 7F0B7178 AFA60028 */ sw $a2, 0x28($sp) -/* 0E9B6C 7F0B717C 016C6826 */ xor $t5, $t3, $t4 -/* 0E9B70 7F0B7180 01A42026 */ xor $a0, $t5, $a0 -/* 0E9B74 7F0B7184 0FC2DC39 */ jal sub_GAME_7F0B7DA8 -/* 0E9B78 7F0B7188 AFA3001C */ sw $v1, 0x1c($sp) -/* 0E9B7C 7F0B718C 3C088004 */ lui $t0, %hi(D_800448A0) # $t0, 0x8004 -/* 0E9B80 7F0B7190 28410009 */ slti $at, $v0, 9 -/* 0E9B84 7F0B7194 2508DD88 */ addiu $t0, %lo(D_800448A0) # addiu $t0, $t0, -0x2278 -/* 0E9B88 7F0B7198 8FA3001C */ lw $v1, 0x1c($sp) -/* 0E9B8C 7F0B719C 8FA60028 */ lw $a2, 0x28($sp) -/* 0E9B90 7F0B71A0 1020001B */ beqz $at, .L7F0B7210 -/* 0E9B94 7F0B71A4 8FA7002C */ lw $a3, 0x2c($sp) -.L7F0B71A8: -/* 0E9B98 7F0B71A8 8FAF0020 */ lw $t7, 0x20($sp) -/* 0E9B9C 7F0B71AC 240100FA */ li $at, 250 -/* 0E9BA0 7F0B71B0 3C0A8004 */ lui $t2, %hi(D_800448A4) # $t2, 0x8004 -/* 0E9BA4 7F0B71B4 A06F0000 */ sb $t7, ($v1) -/* 0E9BA8 7F0B71B8 8FB80024 */ lw $t8, 0x24($sp) -/* 0E9BAC 7F0B71BC A4660002 */ sh $a2, 2($v1) -/* 0E9BB0 7F0B71C0 A0780001 */ sb $t8, 1($v1) -/* 0E9BB4 7F0B71C4 C4E40000 */ lwc1 $f4, ($a3) -/* 0E9BB8 7F0B71C8 E4640004 */ swc1 $f4, 4($v1) -/* 0E9BBC 7F0B71CC C4E60004 */ lwc1 $f6, 4($a3) -/* 0E9BC0 7F0B71D0 E4660008 */ swc1 $f6, 8($v1) -/* 0E9BC4 7F0B71D4 C4E80008 */ lwc1 $f8, 8($a3) -/* 0E9BC8 7F0B71D8 E468000C */ swc1 $f8, 0xc($v1) -/* 0E9BCC 7F0B71DC C4EA000C */ lwc1 $f10, 0xc($a3) -/* 0E9BD0 7F0B71E0 E46A0010 */ swc1 $f10, 0x10($v1) -/* 0E9BD4 7F0B71E4 8D090000 */ lw $t1, ($t0) -/* 0E9BD8 7F0B71E8 25220001 */ addiu $v0, $t1, 1 -/* 0E9BDC 7F0B71EC 14410003 */ bne $v0, $at, .L7F0B71FC -/* 0E9BE0 7F0B71F0 AD020000 */ sw $v0, ($t0) -/* 0E9BE4 7F0B71F4 AD000000 */ sw $zero, ($t0) -/* 0E9BE8 7F0B71F8 00001025 */ move $v0, $zero -.L7F0B71FC: -/* 0E9BEC 7F0B71FC 8D4ADD8C */ lw $t2, %lo(D_800448A4)($t2) -/* 0E9BF0 7F0B7200 244BFFFF */ addiu $t3, $v0, -1 -/* 0E9BF4 7F0B7204 55420003 */ bnel $t2, $v0, .L7F0B7214 -/* 0E9BF8 7F0B7208 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E9BFC 7F0B720C AD0B0000 */ sw $t3, ($t0) -.L7F0B7210: -/* 0E9C00 7F0B7210 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0B7214: -/* 0E9C04 7F0B7214 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0E9C08 7F0B7218 03E00008 */ jr $ra -/* 0E9C0C 7F0B721C 00000000 */ nop -) -#endif - -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0B7EE4(void) { - int iVar1; - undefined8 uVar2; - - if (_D_800448A4 == _D_800448A0) - { - uVar2 = 0; - } - else - { - iVar1 = _D_800448A4 * 0x14; - bgPortalDescend(*(&QWORD_83aa1dd0 + iVar1),*(&QWORD_83aa1dd0 + iVar1 + 1), - *(&QWORD_83aa1dd0 + iVar1 + 2),&QWORD_83aa1dd0 + iVar1 + 4); - _D_800448A4 += 1; - if (_D_800448A4 == 0xfa) - { - _D_800448A4 = 0; - } - uVar2 = 1; - } - return uVar2; -} -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B7EE4 -/* 0ECA14 7F0B7EE4 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0ECA18 7F0B7EE8 3C038004 */ lui $v1, %hi(D_800448A4) -/* 0ECA1C 7F0B7EEC 246348A4 */ addiu $v1, %lo(D_800448A4) # addiu $v1, $v1, 0x48a4 -/* 0ECA20 7F0B7EF0 3C188004 */ lui $t8, %hi(D_800448A0) -/* 0ECA24 7F0B7EF4 8F1848A0 */ lw $t8, %lo(D_800448A0)($t8) -/* 0ECA28 7F0B7EF8 8C680000 */ lw $t0, ($v1) -/* 0ECA2C 7F0B7EFC AFBF001C */ sw $ra, 0x1c($sp) -/* 0ECA30 7F0B7F00 AFA40028 */ sw $a0, 0x28($sp) -/* 0ECA34 7F0B7F04 8C8F0000 */ lw $t7, ($a0) -/* 0ECA38 7F0B7F08 0008C940 */ sll $t9, $t0, 5 -/* 0ECA3C 7F0B7F0C 17080003 */ bne $t8, $t0, .L7F0B7F1C -/* 0ECA40 7F0B7F10 AFAF0020 */ sw $t7, 0x20($sp) -/* 0ECA44 7F0B7F14 10000017 */ b .L7F0B7F74 -/* 0ECA48 7F0B7F18 00001025 */ move $v0, $zero -.L7F0B7F1C: -/* 0ECA4C 7F0B7F1C 3C098008 */ lui $t1, %hi(dword_CODE_bss_8007C100) -/* 0ECA50 7F0B7F20 2529C100 */ addiu $t1, %lo(dword_CODE_bss_8007C100) # addiu $t1, $t1, -0x3f00 -/* 0ECA54 7F0B7F24 03291021 */ addu $v0, $t9, $t1 -/* 0ECA58 7F0B7F28 8C450004 */ lw $a1, 4($v0) -/* 0ECA5C 7F0B7F2C 8C460008 */ lw $a2, 8($v0) -/* 0ECA60 7F0B7F30 8C47000C */ lw $a3, 0xc($v0) -/* 0ECA64 7F0B7F34 244A0010 */ addiu $t2, $v0, 0x10 -/* 0ECA68 7F0B7F38 AFAA0010 */ sw $t2, 0x10($sp) -/* 0ECA6C 7F0B7F3C 0FC2DFE1 */ jal sub_GAME_7F0B7F84 -/* 0ECA70 7F0B7F40 8FA40020 */ lw $a0, 0x20($sp) -/* 0ECA74 7F0B7F44 3C038004 */ lui $v1, %hi(D_800448A4) -/* 0ECA78 7F0B7F48 246348A4 */ addiu $v1, %lo(D_800448A4) # addiu $v1, $v1, 0x48a4 -/* 0ECA7C 7F0B7F4C 8C6B0000 */ lw $t3, ($v1) -/* 0ECA80 7F0B7F50 240101F4 */ li $at, 500 -/* 0ECA84 7F0B7F54 00402025 */ move $a0, $v0 -/* 0ECA88 7F0B7F58 256C0001 */ addiu $t4, $t3, 1 -/* 0ECA8C 7F0B7F5C 15810002 */ bne $t4, $at, .L7F0B7F68 -/* 0ECA90 7F0B7F60 AC6C0000 */ sw $t4, ($v1) -/* 0ECA94 7F0B7F64 AC600000 */ sw $zero, ($v1) -.L7F0B7F68: -/* 0ECA98 7F0B7F68 8FAE0028 */ lw $t6, 0x28($sp) -/* 0ECA9C 7F0B7F6C 24020001 */ li $v0, 1 -/* 0ECAA0 7F0B7F70 ADC40000 */ sw $a0, ($t6) -.L7F0B7F74: -/* 0ECAA4 7F0B7F74 8FBF001C */ lw $ra, 0x1c($sp) -/* 0ECAA8 7F0B7F78 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0ECAAC 7F0B7F7C 03E00008 */ jr $ra -/* 0ECAB0 7F0B7F80 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B7EE4 -/* 0E9C10 7F0B7220 3C038004 */ lui $v1, %hi(D_800448A4) # $v1, 0x8004 -/* 0E9C14 7F0B7224 2463DD8C */ addiu $v1, %lo(D_800448A4) # addiu $v1, $v1, -0x2274 -/* 0E9C18 7F0B7228 3C0E8004 */ lui $t6, %hi(D_800448A0) # $t6, 0x8004 -/* 0E9C1C 7F0B722C 8DCEDD88 */ lw $t6, %lo(D_800448A0)($t6) -/* 0E9C20 7F0B7230 8C680000 */ lw $t0, ($v1) -/* 0E9C24 7F0B7234 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0E9C28 7F0B7238 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E9C2C 7F0B723C 15C80003 */ bne $t6, $t0, .Leu7F0B724C -/* 0E9C30 7F0B7240 00087880 */ sll $t7, $t0, 2 -/* 0E9C34 7F0B7244 10000014 */ b .L7F0B7298 -/* 0E9C38 7F0B7248 00001025 */ move $v0, $zero -.Leu7F0B724C: -/* 0E9C3C 7F0B724C 01E87821 */ addu $t7, $t7, $t0 -/* 0E9C40 7F0B7250 3C188007 */ lui $t8, %hi(dword_CODE_bss_8007C100) # $t8, 0x8007 -/* 0E9C44 7F0B7254 2718A040 */ addiu $t8, %lo(dword_CODE_bss_8007C100) # addiu $t8, $t8, -0x5fc0 -/* 0E9C48 7F0B7258 000F7880 */ sll $t7, $t7, 2 -/* 0E9C4C 7F0B725C 01F81021 */ addu $v0, $t7, $t8 -/* 0E9C50 7F0B7260 90440000 */ lbu $a0, ($v0) -/* 0E9C54 7F0B7264 90450001 */ lbu $a1, 1($v0) -/* 0E9C58 7F0B7268 84460002 */ lh $a2, 2($v0) -/* 0E9C5C 7F0B726C 0FC2DCAA */ jal sub_GAME_7F0B7F84 -/* 0E9C60 7F0B7270 24470004 */ addiu $a3, $v0, 4 -/* 0E9C64 7F0B7274 3C038004 */ lui $v1, %hi(D_800448A4) # $v1, 0x8004 -/* 0E9C68 7F0B7278 2463DD8C */ addiu $v1, %lo(D_800448A4) # addiu $v1, $v1, -0x2274 -/* 0E9C6C 7F0B727C 8C790000 */ lw $t9, ($v1) -/* 0E9C70 7F0B7280 240100FA */ li $at, 250 -/* 0E9C74 7F0B7284 24020001 */ li $v0, 1 -/* 0E9C78 7F0B7288 27290001 */ addiu $t1, $t9, 1 -/* 0E9C7C 7F0B728C 15210002 */ bne $t1, $at, .L7F0B7298 -/* 0E9C80 7F0B7290 AC690000 */ sw $t1, ($v1) -/* 0E9C84 7F0B7294 AC600000 */ sw $zero, ($v1) -.L7F0B7298: -/* 0E9C88 7F0B7298 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E9C8C 7F0B729C 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0E9C90 7F0B72A0 03E00008 */ jr $ra -/* 0E9C94 7F0B72A4 00000000 */ nop -) -#endif - -#endif - - - - -#define PORTMAX 200 -#ifdef NONMATCHING -//bgPortalDesend -void sub_GAME_7F0B7F84(void, int p, int arg2) { - if (arg2 > 100) + otherroom = g_BgPortals[portalnum].connectedRoom1; + + if ((playermetric + portalmetric) <= metric.min) { - osSyncPrintf("bg: << Deep\n"); + return; + } + } + + if (((metric.min - portalmetric) < playermetric) && (playermetric < (metric.max + portalmetric))) + { + screenbox.f[0][0] = g_CurrentPlayer->screensize.f[0][0]; + screenbox.f[0][1] = g_CurrentPlayer->screensize.f[0][1]; + screenbox.f[1][0] = g_CurrentPlayer->screensize.f[1][0]; + screenbox.f[1][1] = g_CurrentPlayer->screensize.f[1][1]; + } + else + { + if (g_BgPortals[portalnum].controlbytes1 & PORTALFLAG_SPECIAL) + { + if (!sub_GAME_7F0B5864(portalnum, &screenbox)) + { + return; + } + + otherroom = (g_BgPortals[portalnum].connectedRoom1 ^ g_BgPortals[portalnum].connectedRoom2) ^ roomnum; + + if (!bgIsRoomOnScreen(otherroom, (struct rectbbox *) &screenbox)) + { + return; + } + + screenbox.f[0][0] = g_CurrentPlayer->screensize.f[0][0]; + screenbox.f[0][1] = g_CurrentPlayer->screensize.f[0][1]; + screenbox.f[1][0] = g_CurrentPlayer->screensize.f[1][0]; + screenbox.f[1][1] = g_CurrentPlayer->screensize.f[1][1]; + } + else + { + if (!sub_GAME_7F0B5864(portalnum, &screenbox)) + { + return; + } + + bgRectIntersect(&screenbox, parentbox); + bgRectIntersect(&screenbox, &g_CurrentPlayer->screensize); + } + + if ((screenbox.max.x <= screenbox.min.x) || (screenbox.max.y <= screenbox.min.y)) + { + return; + } + } + + *((u8 *) i) = depth; + + if ((screenbox.min.x < screenbox.max.x) && (screenbox.min.y < screenbox.max.y)) + { + if (sub_GAME_7F0B39BC(otherroom, depth, &screenbox, g_BgPortals[portalnum].controlbytes1 & PORTALFLAG_SPECIAL)) + { + return; + } + } + else + { + return; + } + + for (i = 0; g_BgPortals[i].offset_portal != NULL; i++) + { + if (i != portalnum) + { + if ((otherroom == g_BgPortals[i].connectedRoom1) || (otherroom == g_BgPortals[i].connectedRoom2)) + { + bgQueuePortalTraversal(otherroom, i, depth + 1, &screenbox); + } + } } - assert(p= 101) + { +#ifdef DEBUG + osSyncPrintf("bg: << Deep\n"); #endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B7F84 -/* 0E9C98 7F0B72A8 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 0E9C9C 7F0B72AC 3C028004 */ lui $v0, %hi(D_80044898) # $v0, 0x8004 -/* 0E9CA0 7F0B72B0 2442DD80 */ addiu $v0, %lo(D_80044898) # addiu $v0, $v0, -0x2280 -/* 0E9CA4 7F0B72B4 8C4E0000 */ lw $t6, ($v0) -/* 0E9CA8 7F0B72B8 AFB30020 */ sw $s3, 0x20($sp) -/* 0E9CAC 7F0B72BC AFB2001C */ sw $s2, 0x1c($sp) -/* 0E9CB0 7F0B72C0 28C10065 */ slti $at, $a2, 0x65 -/* 0E9CB4 7F0B72C4 25CF0001 */ addiu $t7, $t6, 1 -/* 0E9CB8 7F0B72C8 00C09025 */ move $s2, $a2 -/* 0E9CBC 7F0B72CC 00A09825 */ move $s3, $a1 -/* 0E9CC0 7F0B72D0 AFBF0024 */ sw $ra, 0x24($sp) -/* 0E9CC4 7F0B72D4 AFB10018 */ sw $s1, 0x18($sp) -/* 0E9CC8 7F0B72D8 AFB00014 */ sw $s0, 0x14($sp) -/* 0E9CCC 7F0B72DC AFA40070 */ sw $a0, 0x70($sp) -/* 0E9CD0 7F0B72E0 AFA7007C */ sw $a3, 0x7c($sp) -/* 0E9CD4 7F0B72E4 102000C8 */ beqz $at, .L7F0B7608 -/* 0E9CD8 7F0B72E8 AC4F0000 */ sw $t7, ($v0) -/* 0E9CDC 7F0B72EC 3C188004 */ lui $t8, %hi(D_8004489C) # $t8, 0x8004 -/* 0E9CE0 7F0B72F0 8F18DD84 */ lw $t8, %lo(D_8004489C)($t8) -/* 0E9CE4 7F0B72F4 0306082A */ slt $at, $t8, $a2 -/* 0E9CE8 7F0B72F8 142000C3 */ bnez $at, .L7F0B7608 -/* 0E9CEC 7F0B72FC 28C10010 */ slti $at, $a2, 0x10 -/* 0E9CF0 7F0B7300 102000C1 */ beqz $at, .L7F0B7608 -/* 0E9CF4 7F0B7304 3C198007 */ lui $t9, %hi(g_BgPortals) # $t9, 0x8007 -/* 0E9CF8 7F0B7308 8F39B3C8 */ lw $t9, %lo(g_BgPortals)($t9) -/* 0E9CFC 7F0B730C 000510C0 */ sll $v0, $a1, 3 -/* 0E9D00 7F0B7310 3C0B8004 */ lui $t3, %hi(D_800442FC) # $t3, 0x8004 -/* 0E9D04 7F0B7314 03224021 */ addu $t0, $t9, $v0 -/* 0E9D08 7F0B7318 91090006 */ lbu $t1, 6($t0) -/* 0E9D0C 7F0B731C 256BD7DC */ addiu $t3, %lo(D_800442FC) # addiu $t3, $t3, -0x2824 -/* 0E9D10 7F0B7320 00AB1821 */ addu $v1, $a1, $t3 -/* 0E9D14 7F0B7324 312A0001 */ andi $t2, $t1, 1 -/* 0E9D18 7F0B7328 554000B8 */ bnezl $t2, .L7F0B760C -/* 0E9D1C 7F0B732C 8FBF0024 */ lw $ra, 0x24($sp) -/* 0E9D20 7F0B7330 AFA20034 */ sw $v0, 0x34($sp) -/* 0E9D24 7F0B7334 0FC22868 */ jal bondviewGetCurrentPlayersPosition -/* 0E9D28 7F0B7338 AFA3002C */ sw $v1, 0x2c($sp) -/* 0E9D2C 7F0B733C 00408025 */ move $s0, $v0 -/* 0E9D30 7F0B7340 02602025 */ move $a0, $s3 -/* 0E9D34 7F0B7344 0FC2E25A */ jal sub_GAME_7F0B96CC -/* 0E9D38 7F0B7348 27A50044 */ addiu $a1, $sp, 0x44 -/* 0E9D3C 7F0B734C C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0E9D40 7F0B7350 C6060000 */ lwc1 $f6, ($s0) -/* 0E9D44 7F0B7354 C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0E9D48 7F0B7358 C6100004 */ lwc1 $f16, 4($s0) -/* 0E9D4C 7F0B735C 46062202 */ mul.s $f8, $f4, $f6 -/* 0E9D50 7F0B7360 C6060008 */ lwc1 $f6, 8($s0) -/* 0E9D54 7F0B7364 3C018004 */ lui $at, %hi(room_data_float1) # $at, 0x8004 -/* 0E9D58 7F0B7368 46105482 */ mul.s $f18, $f10, $f16 -/* 0E9D5C 7F0B736C C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 0E9D60 7F0B7370 02602025 */ move $a0, $s3 -/* 0E9D64 7F0B7374 460A3402 */ mul.s $f16, $f6, $f10 -/* 0E9D68 7F0B7378 46124100 */ add.s $f4, $f8, $f18 -/* 0E9D6C 7F0B737C C432AC44 */ lwc1 $f18, %lo(room_data_float1)($at) -/* 0E9D70 7F0B7380 46048200 */ add.s $f8, $f16, $f4 -/* 0E9D74 7F0B7384 46124082 */ mul.s $f2, $f8, $f18 -/* 0E9D78 7F0B7388 0FC2E30B */ jal sub_GAME_7F0B9990 -/* 0E9D7C 7F0B738C E7A20040 */ swc1 $f2, 0x40($sp) -/* 0E9D80 7F0B7390 3C0C8007 */ lui $t4, %hi(g_BgPortals) # $t4, 0x8007 -/* 0E9D84 7F0B7394 8D8CB3C8 */ lw $t4, %lo(g_BgPortals)($t4) -/* 0E9D88 7F0B7398 8FAD0034 */ lw $t5, 0x34($sp) -/* 0E9D8C 7F0B739C 8FAE0070 */ lw $t6, 0x70($sp) -/* 0E9D90 7F0B73A0 C7A20040 */ lwc1 $f2, 0x40($sp) -/* 0E9D94 7F0B73A4 018D1021 */ addu $v0, $t4, $t5 -/* 0E9D98 7F0B73A8 90430004 */ lbu $v1, 4($v0) -/* 0E9D9C 7F0B73AC 55C3000B */ bnel $t6, $v1, .L7F0B73DC -/* 0E9DA0 7F0B73B0 46001100 */ add.s $f4, $f2, $f0 -/* 0E9DA4 7F0B73B4 46001181 */ sub.s $f6, $f2, $f0 -/* 0E9DA8 7F0B73B8 C7AA0054 */ lwc1 $f10, 0x54($sp) -/* 0E9DAC 7F0B73BC 90510005 */ lbu $s1, 5($v0) -/* 0E9DB0 7F0B73C0 4606503E */ c.le.s $f10, $f6 -/* 0E9DB4 7F0B73C4 00000000 */ nop -/* 0E9DB8 7F0B73C8 4502000B */ bc1fl .L7F0B73F8 -/* 0E9DBC 7F0B73CC C7A80050 */ lwc1 $f8, 0x50($sp) -/* 0E9DC0 7F0B73D0 1000008E */ b .L7F0B760C -/* 0E9DC4 7F0B73D4 8FBF0024 */ lw $ra, 0x24($sp) -/* 0E9DC8 7F0B73D8 46001100 */ add.s $f4, $f2, $f0 -.L7F0B73DC: -/* 0E9DCC 7F0B73DC C7B00050 */ lwc1 $f16, 0x50($sp) -/* 0E9DD0 7F0B73E0 00608825 */ move $s1, $v1 -/* 0E9DD4 7F0B73E4 4610203E */ c.le.s $f4, $f16 -/* 0E9DD8 7F0B73E8 00000000 */ nop -/* 0E9DDC 7F0B73EC 45030087 */ bc1tl .L7F0B760C -/* 0E9DE0 7F0B73F0 8FBF0024 */ lw $ra, 0x24($sp) -/* 0E9DE4 7F0B73F4 C7A80050 */ lwc1 $f8, 0x50($sp) -.L7F0B73F8: -/* 0E9DE8 7F0B73F8 C7A60054 */ lwc1 $f6, 0x54($sp) -/* 0E9DEC 7F0B73FC 46004481 */ sub.s $f18, $f8, $f0 -/* 0E9DF0 7F0B7400 4602903C */ c.lt.s $f18, $f2 -/* 0E9DF4 7F0B7404 00000000 */ nop -/* 0E9DF8 7F0B7408 45020012 */ bc1fl .L7F0B7454 -/* 0E9DFC 7F0B740C 904F0006 */ lbu $t7, 6($v0) -/* 0E9E00 7F0B7410 46003280 */ add.s $f10, $f6, $f0 -/* 0E9E04 7F0B7414 460A103C */ c.lt.s $f2, $f10 -/* 0E9E08 7F0B7418 00000000 */ nop -/* 0E9E0C 7F0B741C 4502000D */ bc1fl .L7F0B7454 -/* 0E9E10 7F0B7420 904F0006 */ lbu $t7, 6($v0) -/* 0E9E14 7F0B7424 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0E9E18 7F0B7428 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0E9E1C 7F0B742C C4501110 */ lwc1 $f16, 0x1110($v0) -/* 0E9E20 7F0B7430 E7B00060 */ swc1 $f16, 0x60($sp) -/* 0E9E24 7F0B7434 C4441114 */ lwc1 $f4, 0x1114($v0) -/* 0E9E28 7F0B7438 E7A40064 */ swc1 $f4, 0x64($sp) -/* 0E9E2C 7F0B743C C4481118 */ lwc1 $f8, 0x1118($v0) -/* 0E9E30 7F0B7440 E7A80068 */ swc1 $f8, 0x68($sp) -/* 0E9E34 7F0B7444 C452111C */ lwc1 $f18, 0x111c($v0) -/* 0E9E38 7F0B7448 10000039 */ b .L7F0B7530 -/* 0E9E3C 7F0B744C E7B2006C */ swc1 $f18, 0x6c($sp) -/* 0E9E40 7F0B7450 904F0006 */ lbu $t7, 6($v0) -.L7F0B7454: -/* 0E9E44 7F0B7454 27A50060 */ addiu $a1, $sp, 0x60 -/* 0E9E48 7F0B7458 02602025 */ move $a0, $s3 -/* 0E9E4C 7F0B745C 31F80002 */ andi $t8, $t7, 2 -/* 0E9E50 7F0B7460 1300001C */ beqz $t8, .L7F0B74D4 -/* 0E9E54 7F0B7464 00000000 */ nop -/* 0E9E58 7F0B7468 0FC2D2E8 */ jal sub_GAME_7F0B5864 -/* 0E9E5C 7F0B746C 02602025 */ move $a0, $s3 -/* 0E9E60 7F0B7470 10400065 */ beqz $v0, .L7F0B7608 -/* 0E9E64 7F0B7474 3C198007 */ lui $t9, %hi(g_BgPortals) # $t9, 0x8007 -/* 0E9E68 7F0B7478 8F39B3C8 */ lw $t9, %lo(g_BgPortals)($t9) -/* 0E9E6C 7F0B747C 8FA80034 */ lw $t0, 0x34($sp) -/* 0E9E70 7F0B7480 8FAC0070 */ lw $t4, 0x70($sp) -/* 0E9E74 7F0B7484 27A50060 */ addiu $a1, $sp, 0x60 -/* 0E9E78 7F0B7488 03281021 */ addu $v0, $t9, $t0 -/* 0E9E7C 7F0B748C 90490005 */ lbu $t1, 5($v0) -/* 0E9E80 7F0B7490 904A0004 */ lbu $t2, 4($v0) -/* 0E9E84 7F0B7494 012A5826 */ xor $t3, $t1, $t2 -/* 0E9E88 7F0B7498 016C8826 */ xor $s1, $t3, $t4 -/* 0E9E8C 7F0B749C 0FC2D151 */ jal sub_GAME_7F0B5208 -/* 0E9E90 7F0B74A0 02202025 */ move $a0, $s1 -/* 0E9E94 7F0B74A4 10400058 */ beqz $v0, .L7F0B7608 -/* 0E9E98 7F0B74A8 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0E9E9C 7F0B74AC 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0E9EA0 7F0B74B0 C4461110 */ lwc1 $f6, 0x1110($v0) -/* 0E9EA4 7F0B74B4 E7A60060 */ swc1 $f6, 0x60($sp) -/* 0E9EA8 7F0B74B8 C44A1114 */ lwc1 $f10, 0x1114($v0) -/* 0E9EAC 7F0B74BC E7AA0064 */ swc1 $f10, 0x64($sp) -/* 0E9EB0 7F0B74C0 C4501118 */ lwc1 $f16, 0x1118($v0) -/* 0E9EB4 7F0B74C4 E7B00068 */ swc1 $f16, 0x68($sp) -/* 0E9EB8 7F0B74C8 C444111C */ lwc1 $f4, 0x111c($v0) -/* 0E9EBC 7F0B74CC 1000000C */ b .L7F0B7500 -/* 0E9EC0 7F0B74D0 E7A4006C */ swc1 $f4, 0x6c($sp) -.L7F0B74D4: -/* 0E9EC4 7F0B74D4 0FC2D2E8 */ jal sub_GAME_7F0B5864 -/* 0E9EC8 7F0B74D8 27A50060 */ addiu $a1, $sp, 0x60 -/* 0E9ECC 7F0B74DC 1040004A */ beqz $v0, .L7F0B7608 -/* 0E9ED0 7F0B74E0 27A40060 */ addiu $a0, $sp, 0x60 -/* 0E9ED4 7F0B74E4 0FC2D3C6 */ jal bgRectIntersect -/* 0E9ED8 7F0B74E8 8FA5007C */ lw $a1, 0x7c($sp) -/* 0E9EDC 7F0B74EC 3C058007 */ lui $a1, %hi(g_CurrentPlayer) # $a1, 0x8007 -/* 0E9EE0 7F0B74F0 8CA58BC0 */ lw $a1, %lo(g_CurrentPlayer)($a1) -/* 0E9EE4 7F0B74F4 27A40060 */ addiu $a0, $sp, 0x60 -/* 0E9EE8 7F0B74F8 0FC2D3C6 */ jal bgRectIntersect -/* 0E9EEC 7F0B74FC 24A51110 */ addiu $a1, $a1, 0x1110 -.L7F0B7500: -/* 0E9EF0 7F0B7500 C7A80060 */ lwc1 $f8, 0x60($sp) -/* 0E9EF4 7F0B7504 C7B20068 */ lwc1 $f18, 0x68($sp) -/* 0E9EF8 7F0B7508 C7A60064 */ lwc1 $f6, 0x64($sp) -/* 0E9EFC 7F0B750C C7AA006C */ lwc1 $f10, 0x6c($sp) -/* 0E9F00 7F0B7510 4608903E */ c.le.s $f18, $f8 -/* 0E9F04 7F0B7514 00000000 */ nop -/* 0E9F08 7F0B7518 4503003C */ bc1tl .L7F0B760C -/* 0E9F0C 7F0B751C 8FBF0024 */ lw $ra, 0x24($sp) -/* 0E9F10 7F0B7520 4606503E */ c.le.s $f10, $f6 -/* 0E9F14 7F0B7524 00000000 */ nop -/* 0E9F18 7F0B7528 45030038 */ bc1tl .L7F0B760C -/* 0E9F1C 7F0B752C 8FBF0024 */ lw $ra, 0x24($sp) -.L7F0B7530: -/* 0E9F20 7F0B7530 8FAD002C */ lw $t5, 0x2c($sp) -/* 0E9F24 7F0B7534 A1B20000 */ sb $s2, ($t5) -/* 0E9F28 7F0B7538 C7A40068 */ lwc1 $f4, 0x68($sp) -/* 0E9F2C 7F0B753C C7B00060 */ lwc1 $f16, 0x60($sp) -/* 0E9F30 7F0B7540 C7B2006C */ lwc1 $f18, 0x6c($sp) -/* 0E9F34 7F0B7544 C7A80064 */ lwc1 $f8, 0x64($sp) -/* 0E9F38 7F0B7548 4604803C */ c.lt.s $f16, $f4 -/* 0E9F3C 7F0B754C 00000000 */ nop -/* 0E9F40 7F0B7550 4502002E */ bc1fl .L7F0B760C -/* 0E9F44 7F0B7554 8FBF0024 */ lw $ra, 0x24($sp) -/* 0E9F48 7F0B7558 4612403C */ c.lt.s $f8, $f18 -/* 0E9F4C 7F0B755C 3C0E8007 */ lui $t6, %hi(g_BgPortals) # $t6, 0x8007 -/* 0E9F50 7F0B7560 8FAF0034 */ lw $t7, 0x34($sp) -/* 0E9F54 7F0B7564 45020029 */ bc1fl .L7F0B760C -/* 0E9F58 7F0B7568 8FBF0024 */ lw $ra, 0x24($sp) -/* 0E9F5C 7F0B756C 8DCEB3C8 */ lw $t6, %lo(g_BgPortals)($t6) -/* 0E9F60 7F0B7570 02202025 */ move $a0, $s1 -/* 0E9F64 7F0B7574 02402825 */ move $a1, $s2 -/* 0E9F68 7F0B7578 01CFC021 */ addu $t8, $t6, $t7 -/* 0E9F6C 7F0B757C 93070006 */ lbu $a3, 6($t8) -/* 0E9F70 7F0B7580 27A60060 */ addiu $a2, $sp, 0x60 -/* 0E9F74 7F0B7584 30F90002 */ andi $t9, $a3, 2 -/* 0E9F78 7F0B7588 0FC2CB1F */ jal sub_GAME_7F0B39BC -/* 0E9F7C 7F0B758C 03203825 */ move $a3, $t9 -/* 0E9F80 7F0B7590 1440001D */ bnez $v0, .L7F0B7608 -/* 0E9F84 7F0B7594 3C048007 */ lui $a0, %hi(g_BgPortals) # $a0, 0x8007 -/* 0E9F88 7F0B7598 8C84B3C8 */ lw $a0, %lo(g_BgPortals)($a0) -/* 0E9F8C 7F0B759C 00008025 */ move $s0, $zero -/* 0E9F90 7F0B75A0 00001825 */ move $v1, $zero -/* 0E9F94 7F0B75A4 8C880000 */ lw $t0, ($a0) -/* 0E9F98 7F0B75A8 00801025 */ move $v0, $a0 -/* 0E9F9C 7F0B75AC 51000017 */ beql $t0, $zero, .L7F0B760C -/* 0E9FA0 7F0B75B0 8FBF0024 */ lw $ra, 0x24($sp) -.L7F0B75B4: -/* 0E9FA4 7F0B75B4 52130010 */ beql $s0, $s3, .L7F0B75F8 -/* 0E9FA8 7F0B75B8 8C4C0008 */ lw $t4, 8($v0) -/* 0E9FAC 7F0B75BC 90490004 */ lbu $t1, 4($v0) -/* 0E9FB0 7F0B75C0 02202025 */ move $a0, $s1 -/* 0E9FB4 7F0B75C4 02002825 */ move $a1, $s0 -/* 0E9FB8 7F0B75C8 12290003 */ beq $s1, $t1, .L7F0B75D8 -/* 0E9FBC 7F0B75CC 26460001 */ addiu $a2, $s2, 1 -/* 0E9FC0 7F0B75D0 904A0005 */ lbu $t2, 5($v0) -/* 0E9FC4 7F0B75D4 162A0007 */ bne $s1, $t2, .Leu7F0B75F4 -.L7F0B75D8: -/* 0E9FC8 7F0B75D8 27A70060 */ addiu $a3, $sp, 0x60 -/* 0E9FCC 7F0B75DC 0FC2DC48 */ jal sub_GAME_7F0B7DE4 -/* 0E9FD0 7F0B75E0 AFA30030 */ sw $v1, 0x30($sp) -/* 0E9FD4 7F0B75E4 3C0B8007 */ lui $t3, %hi(g_BgPortals) # $t3, 0x8007 -/* 0E9FD8 7F0B75E8 8D6BB3C8 */ lw $t3, %lo(g_BgPortals)($t3) -/* 0E9FDC 7F0B75EC 8FA30030 */ lw $v1, 0x30($sp) -/* 0E9FE0 7F0B75F0 01631021 */ addu $v0, $t3, $v1 -.Leu7F0B75F4: -/* 0E9FE4 7F0B75F4 8C4C0008 */ lw $t4, 8($v0) -.L7F0B75F8: -/* 0E9FE8 7F0B75F8 26100001 */ addiu $s0, $s0, 1 -/* 0E9FEC 7F0B75FC 24630008 */ addiu $v1, $v1, 8 -/* 0E9FF0 7F0B7600 1580FFEC */ bnez $t4, .L7F0B75B4 -/* 0E9FF4 7F0B7604 24420008 */ addiu $v0, $v0, 8 -.L7F0B7608: -/* 0E9FF8 7F0B7608 8FBF0024 */ lw $ra, 0x24($sp) -.L7F0B760C: -/* 0E9FFC 7F0B760C 8FB00014 */ lw $s0, 0x14($sp) -/* 0EA000 7F0B7610 8FB10018 */ lw $s1, 0x18($sp) -/* 0EA004 7F0B7614 8FB2001C */ lw $s2, 0x1c($sp) -/* 0EA008 7F0B7618 8FB30020 */ lw $s3, 0x20($sp) -/* 0EA00C 7F0B761C 03E00008 */ jr $ra -/* 0EA010 7F0B7620 27BD0070 */ addiu $sp, $sp, 0x70 -) + return value; + } + + if (D_8004489C < depth) + { + return value; + } + + if (depth >= 16) + { + return value; + } + + if (depth); + +#ifdef DEBUG + assert(portalnum < PORTMAX); + osSyncPrintf("bg: << bgPortalDescend: Inside out portal '%s' ", bgDebPrintPORTALID(portalnum)); #endif + + if (g_BgPortals[portalnum].controlbytes1 & PORTALFLAG_DISABLED) + { + return value; + } + + i = (s32) &D_800442FC[portalnum]; + if (i); + + playerpos = bondviewGetCurrentPlayersPosition(); + sub_GAME_7F0B96CC(portalnum, &metric); + playermetric = ((metric.normal.z * playerpos->z) + ((metric.normal.x * playerpos->x) + (metric.normal.y * playerpos->y))) * room_data_float1; + portalmetric = sub_GAME_7F0B9990(portalnum); + + if (roomnum == g_BgPortals[portalnum].connectedRoom1) + { + otherroom = g_BgPortals[portalnum].connectedRoom2; + + if (metric.max <= (playermetric - portalmetric)) + { + return value; + } + } + else + { + otherroom = g_BgPortals[portalnum].connectedRoom1; + + if ((playermetric + portalmetric) <= metric.min) + { + return value; + } + } + + if (((metric.min - portalmetric) < playermetric) && (playermetric < (metric.max + portalmetric))) + { + screenbox.f[0][0] = g_CurrentPlayer->screensize.f[0][0]; + screenbox.f[0][1] = g_CurrentPlayer->screensize.f[0][1]; + screenbox.f[1][0] = g_CurrentPlayer->screensize.f[1][0]; + screenbox.f[1][1] = g_CurrentPlayer->screensize.f[1][1]; + } + else + { + if (g_BgPortals[portalnum].controlbytes1 & PORTALFLAG_SPECIAL) + { + if (!sub_GAME_7F0B5864(portalnum, &screenbox)) + { + return value; + } + + otherroom = (g_BgPortals[portalnum].connectedRoom1 ^ g_BgPortals[portalnum].connectedRoom2) ^ roomnum; + + if (!bgIsRoomOnScreen(otherroom, (struct rectbbox *) &screenbox)) + { + return value; + } + + screenbox.f[0][0] = g_CurrentPlayer->screensize.f[0][0]; + screenbox.f[0][1] = g_CurrentPlayer->screensize.f[0][1]; + screenbox.f[1][0] = g_CurrentPlayer->screensize.f[1][0]; + screenbox.f[1][1] = g_CurrentPlayer->screensize.f[1][1]; + } + else + { + if (!sub_GAME_7F0B5864(portalnum, &screenbox)) + { + return value; + } + + bgRectIntersect(&screenbox, parentbox); + bgRectIntersect(&screenbox, &g_CurrentPlayer->screensize); + } + + if ((screenbox.max.x <= screenbox.min.x) || (screenbox.max.y <= screenbox.min.y)) + { + return value; + } + } + + *((u8 *) i) = depth; + + if ((screenbox.min.x < screenbox.max.x) && (screenbox.min.y < screenbox.max.y)) + { + if (sub_GAME_7F0B39BC(otherroom, depth, &screenbox, g_BgPortals[portalnum].controlbytes1 & PORTALFLAG_SPECIAL)) + { + return value; + } + } + else + { + return value; + } + + for (i = 0; g_BgPortals[i].offset_portal != NULL; i++) + { + if (i != portalnum) + { + if ((otherroom == g_BgPortals[i].connectedRoom1) || (otherroom == g_BgPortals[i].connectedRoom2)) + { + bgQueuePortalTraversal(value, otherroom, i, depth + 1, &screenbox); + } + } + } + + return value; +} #endif - - - /** * Add to stack. Push and then increment position. Will wrap on overflow. * @@ -8756,8 +3955,6 @@ s32 bgStackPush(s32 arg0) } - - /** * Pop from stack. Decrement position and retrieve from there. Wraps on underflow. * @@ -8773,1055 +3970,330 @@ s32 bgStackPop(void) } - -s32 bgStackGetNthValueFromEnd(s32 n) { +s32 bgStackGetNthValueFromEnd(s32 n) +{ return g_BgStack[((g_BgStackCount - n) + (BG_STACK_SIZE - 1)) % BG_STACK_SIZE]; } +GlobalVisCommand *parse_global_vis_command_list(GlobalVisCommand *cmd, s32 execute) +{ + static Unk80081600 dword_CODE_bss_80081600; + GlobalVisCommand *ret; + s32 value; + bbox2d sp68; + bbox2d sp58; + u8 preload_ok = TRUE; + dword_CODE_bss_80081600.unk10 = FALSE; + if (cmd == NULL) + { + return cmd; + } -#ifdef NONMATCHING -void parse_global_vis_command_list(void) { + while (TRUE) + { + switch (cmd->type) + { + case VISOP_END: + return cmd; + case VISOP_PUSH: + if (execute) + { + bgStackPush(cmd->arg); + } + + cmd += cmd->length; + break; + + case VISOP_POP: + if (execute) + { + bgStackPop(); + } + + cmd += cmd->length; + break; + + case VISOP_AND: + if (execute) + { + value = bgStackPop(); + bgStackPush(bgStackPop() & value); + } + + cmd += cmd->length; + break; + + case VISOP_OR: + if (execute) + { + value = bgStackPop(); + bgStackPush(bgStackPop() | value); + } + + cmd += cmd->length; + break; + + case VISOP_NOT: + if (execute) + { + bgStackPush(bgStackPop() == 0); + } + + cmd += cmd->length; + break; + + case VISOP_XOR: + if (execute) + { + value = bgStackPop(); + bgStackPush(bgStackPop() ^ value); + } + + cmd += cmd->length; + break; + + case VISOP_PUSH_IF_ROOM_IN_RANGE: + if (execute) + { + s32 curroom; + + curroom = g_BgCurrentRoom; + + bgStackPush(cmd[1].arg <= curroom && curroom <= cmd[2].arg); + } + + cmd += cmd->length; + break; + + case VISOP_FORCE_VISIBLE: + if (execute) + { + dword_CODE_bss_80081600.unk0.f[0][0] = g_CurrentPlayer->screensize.f[0][0]; + dword_CODE_bss_80081600.unk0.f[0][1] = g_CurrentPlayer->screensize.f[0][1]; + dword_CODE_bss_80081600.unk0.f[1][0] = g_CurrentPlayer->screensize.f[1][0]; + dword_CODE_bss_80081600.unk0.f[1][1] = g_CurrentPlayer->screensize.f[1][1]; + + current_visibility = FALSE; + } + + cmd += cmd->length; + break; + + case VISOP_MATCH_PORTAL_VIS: + if (execute) + { + if (sub_GAME_7F0B5864(cmd[1].arg, &dword_CODE_bss_80081600.unk0) == 0) + { + current_visibility = TRUE; + } + else if (bgRectIntersect(&dword_CODE_bss_80081600.unk0, &g_CurrentPlayer->screensize) == 0) + { + current_visibility = TRUE; + } + else + { + current_visibility = FALSE; + } + } + + cmd += cmd->length; + break; + + case VISOP_VISIBLE_IF_SEEN_THROUGH_PORTAL: + if (execute) + { + if (sub_GAME_7F0B5864(cmd[1].arg, &sp68) && bgRectIntersect(&sp68, &g_CurrentPlayer->screensize)) + { + if (current_visibility) + { + bbox2dCopy(&dword_CODE_bss_80081600.unk0, &sp68); + current_visibility = FALSE; + } + else + { + bgRectOutersect(&dword_CODE_bss_80081600.unk0, &sp68); + } + } + } + + cmd += cmd->length; + break; + + case VISOP_NOT_VISIBLE_IF_SEEN_THROUGH_PORTAL: + if (execute && !current_visibility) + { + if (!sub_GAME_7F0B5864(cmd[1].arg, &sp58)) + { + current_visibility = TRUE; + } + else if (!bgRectIntersect(&sp58, &g_CurrentPlayer->screensize)) + { + current_visibility = TRUE; + } + else if (!bgRectIntersect(&dword_CODE_bss_80081600.unk0, &sp58)) + { + current_visibility = TRUE; + } + } + + cmd += cmd->length; + break; + + case VISOP_ADD_VISIBLE_ROOM: + if (execute && !current_visibility) + { + if (bgIsRoomOnScreen(cmd[1].arg, (struct rectbbox *)&dword_CODE_bss_80081600.unk0)) + { + sub_GAME_7F0B39BC(cmd[1].arg, 0, &dword_CODE_bss_80081600.unk0, 0); + + list_visible_rooms_in_cur_global_vis_packet[num_visible_rooms_in_cur_global_vis_packet] = cmd[1].arg; + + num_visible_rooms_in_cur_global_vis_packet++; + } + } + + cmd += cmd->length; + break; + + case VISOP_DISABLE_ROOM: + if (execute) + { + g_BgRoomInfo[cmd[1].arg].room_loaded_mask = TRUE; + } + + cmd += cmd->length; + break; + + case VISOP_DISABLE_ROOM_RANGE: + if (execute) + { + s32 room; + + room = cmd[1].arg; + + while (room <= cmd[2].arg) + { + g_BgRoomInfo[room].room_loaded_mask = TRUE; + room++; + } + } + + cmd += cmd->length; + break; + + case VISOP_PRELOAD_ROOM: + if (execute && preload_ok) + { + preload_ok = !bgCheckIfRoomModelNeedsLoad(cmd[1].arg); + } + + cmd += cmd->length; + break; + + case VISOP_PRELOAD_ROOM_RANGE: + if (execute) + { + s32 room; + + room = cmd[1].arg; + + while (room <= cmd[2].arg) + { + if (preload_ok) + { + preload_ok = !bgCheckIfRoomModelNeedsLoad(room); + } + + room++; + } + } + + cmd += cmd->length; + break; + + case VISOP_REMOVE_VIS: + if (execute) + { + current_visibility = TRUE; + } + + cmd += cmd->length; + break; + + case VISOP_IF_STATEMENT: + ret = parse_global_vis_command_list(cmd + cmd->length, execute); + ret += ret->length; + cmd = ret; + break; + + case VISOP_ENDIF_CONTINUE_EXEC: + cmd += cmd->length; + dword_CODE_bss_80081600.unk10 = FALSE; + return cmd; + + case VISOP_DONT_EXEC_COMMANDS_EVEN_ON_RETURN: + cmd += cmd->length; + + if (execute) + { + execute = FALSE; + dword_CODE_bss_80081600.unk10 = TRUE; + } + else + { + execute = FALSE; + } + + break; + + case VISOP_IF_STATEMENT_PULL_FROM_STACK: + value = bgStackPop(); + + ret = parse_global_vis_command_list(cmd + cmd->length, value & execute); + cmd = ret; + + if (!dword_CODE_bss_80081600.unk10) + { + continue; + } + + execute = FALSE; + break; + + case VISOP_TOGGLE_EXEC_VS_READONLY: + execute ^= TRUE; + cmd += cmd->length; + break; + + case VISOP_ENDIF: + cmd += cmd->length; + return cmd; + + default: + return cmd; + } + } } -#else -#if defined(LEFTOVERDEBUG) + + GLOBAL_ASM( -.late_rodata -/*D:80058C80*/ -glabel jpt_80058C80 -.word if_statement -.word dont_exec_commands_even_on_return -.word endif_continue_exec -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word if_statement_pull_from_stack -.word toggle_exec_vs_ro -.word endif - -/*D:80058CB4*/ -glabel vis_command_jpt -.word break -.word push_to_stack -.word pull_from_stack -.word and_merge_last_two_on_stack -.word or_merge_last_two_on_stack -.word not_merge_last_two_on_stack -.word carrot_merge_last_two_on_stack -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word push_tf_if_in_range_rooms -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word force_visible -.word match_portal_vis -.word add_visible_room -.word remove_vis -.word visible_if_seen_through_portal -.word not_visible_if_seen_through_portal -.word disable_room -.word disable_room_range -.word preload_room -.word preload_room_range -.text -glabel parse_global_vis_command_list -/* 0ECF44 7F0B8414 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0ECF48 7F0B8418 AFB30024 */ sw $s3, 0x24($sp) -/* 0ECF4C 7F0B841C AFB20020 */ sw $s2, 0x20($sp) -/* 0ECF50 7F0B8420 AFB1001C */ sw $s1, 0x1c($sp) -/* 0ECF54 7F0B8424 3C018008 */ lui $at, %hi(dword_CODE_bss_80081600 + 0x10) -/* 0ECF58 7F0B8428 00808825 */ move $s1, $a0 -/* 0ECF5C 7F0B842C 00A09025 */ move $s2, $a1 -/* 0ECF60 7F0B8430 AFBF003C */ sw $ra, 0x3c($sp) -/* 0ECF64 7F0B8434 AFBE0038 */ sw $fp, 0x38($sp) -/* 0ECF68 7F0B8438 AFB70034 */ sw $s7, 0x34($sp) -/* 0ECF6C 7F0B843C AFB60030 */ sw $s6, 0x30($sp) -/* 0ECF70 7F0B8440 AFB5002C */ sw $s5, 0x2c($sp) -/* 0ECF74 7F0B8444 AFB40028 */ sw $s4, 0x28($sp) -/* 0ECF78 7F0B8448 AFB00018 */ sw $s0, 0x18($sp) -/* 0ECF7C 7F0B844C 24130001 */ li $s3, 1 -/* 0ECF80 7F0B8450 14800003 */ bnez $a0, .L7F0B8460 -/* 0ECF84 7F0B8454 AC201610 */ sw $zero, %lo(dword_CODE_bss_80081600 + 0x10)($at) -/* 0ECF88 7F0B8458 10000166 */ b .L7F0B89F4 -/* 0ECF8C 7F0B845C 00801025 */ move $v0, $a0 -.L7F0B8460: -/* 0ECF90 7F0B8460 3C1E8008 */ lui $fp, %hi(g_CurrentPlayer) -/* 0ECF94 7F0B8464 3C168008 */ lui $s6, %hi(dword_CODE_bss_80081600) -/* 0ECF98 7F0B8468 3C148004 */ lui $s4, %hi(current_visibility) -/* 0ECF9C 7F0B846C 269448FC */ addiu $s4, %lo(current_visibility) # addiu $s4, $s4, 0x48fc -/* 0ECFA0 7F0B8470 26D61600 */ addiu $s6, %lo(dword_CODE_bss_80081600) # addiu $s6, $s6, 0x1600 -/* 0ECFA4 7F0B8474 27DEA0B0 */ addiu $fp, %lo(g_CurrentPlayer) # addiu $fp, $fp, -0x5f50 -/* 0ECFA8 7F0B8478 24170001 */ li $s7, 1 -/* 0ECFAC 7F0B847C 24150001 */ li $s5, 1 -.L7F0B8480: -/* 0ECFB0 7F0B8480 92240000 */ lbu $a0, ($s1) -.L7F0B8484: -/* 0ECFB4 7F0B8484 28810028 */ slti $at, $a0, 0x28 -/* 0ECFB8 7F0B8488 14200009 */ bnez $at, .L7F0B84B0 -/* 0ECFBC 7F0B848C 248EFFB0 */ addiu $t6, $a0, -0x50 -/* 0ECFC0 7F0B8490 2DC1000D */ sltiu $at, $t6, 0xd -/* 0ECFC4 7F0B8494 10200156 */ beqz $at, .L7F0B89F0 -/* 0ECFC8 7F0B8498 000E7080 */ sll $t6, $t6, 2 -/* 0ECFCC 7F0B849C 3C018006 */ lui $at, %hi(jpt_80058C80) -/* 0ECFD0 7F0B84A0 002E0821 */ addu $at, $at, $t6 -/* 0ECFD4 7F0B84A4 8C2E8C80 */ lw $t6, %lo(jpt_80058C80)($at) -/* 0ECFD8 7F0B84A8 01C00008 */ jr $t6 -/* 0ECFDC 7F0B84AC 00000000 */ nop -.L7F0B84B0: -/* 0ECFE0 7F0B84B0 2C810028 */ sltiu $at, $a0, 0x28 -/* 0ECFE4 7F0B84B4 1020014E */ beqz $at, .L7F0B89F0 -/* 0ECFE8 7F0B84B8 00047880 */ sll $t7, $a0, 2 -/* 0ECFEC 7F0B84BC 3C018006 */ lui $at, %hi(vis_command_jpt) -/* 0ECFF0 7F0B84C0 002F0821 */ addu $at, $at, $t7 -/* 0ECFF4 7F0B84C4 8C2F8CB4 */ lw $t7, %lo(vis_command_jpt)($at) -/* 0ECFF8 7F0B84C8 01E00008 */ jr $t7 -/* 0ECFFC 7F0B84CC 00000000 */ nop -break: -/* 0ED000 7F0B84D0 10000148 */ b .L7F0B89F4 -/* 0ED004 7F0B84D4 02201025 */ move $v0, $s1 -push_to_stack: -/* 0ED008 7F0B84D8 52400004 */ beql $s2, $zero, .L7F0B84EC -/* 0ED00C 7F0B84DC 92380001 */ lbu $t8, 1($s1) -/* 0ED010 7F0B84E0 0FC2E0DD */ jal bgStackPush -/* 0ED014 7F0B84E4 8E240004 */ lw $a0, 4($s1) -/* 0ED018 7F0B84E8 92380001 */ lbu $t8, 1($s1) -.L7F0B84EC: -/* 0ED01C 7F0B84EC 0018C8C0 */ sll $t9, $t8, 3 -/* 0ED020 7F0B84F0 1000FFE3 */ b .L7F0B8480 -/* 0ED024 7F0B84F4 02398821 */ addu $s1, $s1, $t9 -pull_from_stack: -/* 0ED028 7F0B84F8 52400004 */ beql $s2, $zero, .L7F0B850C -/* 0ED02C 7F0B84FC 92280001 */ lbu $t0, 1($s1) -/* 0ED030 7F0B8500 0FC2E0EC */ jal bgStackPop -/* 0ED034 7F0B8504 00000000 */ nop -/* 0ED038 7F0B8508 92280001 */ lbu $t0, 1($s1) -.L7F0B850C: -/* 0ED03C 7F0B850C 000848C0 */ sll $t1, $t0, 3 -/* 0ED040 7F0B8510 1000FFDB */ b .L7F0B8480 -/* 0ED044 7F0B8514 02298821 */ addu $s1, $s1, $t1 -and_merge_last_two_on_stack: -/* 0ED048 7F0B8518 52400008 */ beql $s2, $zero, .L7F0B853C -/* 0ED04C 7F0B851C 922A0001 */ lbu $t2, 1($s1) -/* 0ED050 7F0B8520 0FC2E0EC */ jal bgStackPop -/* 0ED054 7F0B8524 00000000 */ nop -/* 0ED058 7F0B8528 0FC2E0EC */ jal bgStackPop -/* 0ED05C 7F0B852C 00408025 */ move $s0, $v0 -/* 0ED060 7F0B8530 0FC2E0DD */ jal bgStackPush -/* 0ED064 7F0B8534 00502024 */ and $a0, $v0, $s0 -/* 0ED068 7F0B8538 922A0001 */ lbu $t2, 1($s1) -.L7F0B853C: -/* 0ED06C 7F0B853C 000A58C0 */ sll $t3, $t2, 3 -/* 0ED070 7F0B8540 1000FFCF */ b .L7F0B8480 -/* 0ED074 7F0B8544 022B8821 */ addu $s1, $s1, $t3 -or_merge_last_two_on_stack: -/* 0ED078 7F0B8548 52400008 */ beql $s2, $zero, .L7F0B856C -/* 0ED07C 7F0B854C 922C0001 */ lbu $t4, 1($s1) -/* 0ED080 7F0B8550 0FC2E0EC */ jal bgStackPop -/* 0ED084 7F0B8554 00000000 */ nop -/* 0ED088 7F0B8558 0FC2E0EC */ jal bgStackPop -/* 0ED08C 7F0B855C 00408025 */ move $s0, $v0 -/* 0ED090 7F0B8560 0FC2E0DD */ jal bgStackPush -/* 0ED094 7F0B8564 00502025 */ or $a0, $v0, $s0 -/* 0ED098 7F0B8568 922C0001 */ lbu $t4, 1($s1) -.L7F0B856C: -/* 0ED09C 7F0B856C 000C68C0 */ sll $t5, $t4, 3 -/* 0ED0A0 7F0B8570 1000FFC3 */ b .L7F0B8480 -/* 0ED0A4 7F0B8574 022D8821 */ addu $s1, $s1, $t5 -not_merge_last_two_on_stack: -/* 0ED0A8 7F0B8578 52400006 */ beql $s2, $zero, .L7F0B8594 -/* 0ED0AC 7F0B857C 922E0001 */ lbu $t6, 1($s1) -/* 0ED0B0 7F0B8580 0FC2E0EC */ jal bgStackPop -/* 0ED0B4 7F0B8584 00000000 */ nop -/* 0ED0B8 7F0B8588 0FC2E0DD */ jal bgStackPush -/* 0ED0BC 7F0B858C 2C440001 */ sltiu $a0, $v0, 1 -/* 0ED0C0 7F0B8590 922E0001 */ lbu $t6, 1($s1) -.L7F0B8594: -/* 0ED0C4 7F0B8594 000E78C0 */ sll $t7, $t6, 3 -/* 0ED0C8 7F0B8598 1000FFB9 */ b .L7F0B8480 -/* 0ED0CC 7F0B859C 022F8821 */ addu $s1, $s1, $t7 -carrot_merge_last_two_on_stack: -/* 0ED0D0 7F0B85A0 52400008 */ beql $s2, $zero, .L7F0B85C4 -/* 0ED0D4 7F0B85A4 92380001 */ lbu $t8, 1($s1) -/* 0ED0D8 7F0B85A8 0FC2E0EC */ jal bgStackPop -/* 0ED0DC 7F0B85AC 00000000 */ nop -/* 0ED0E0 7F0B85B0 0FC2E0EC */ jal bgStackPop -/* 0ED0E4 7F0B85B4 00408025 */ move $s0, $v0 -/* 0ED0E8 7F0B85B8 0FC2E0DD */ jal bgStackPush -/* 0ED0EC 7F0B85BC 00502026 */ xor $a0, $v0, $s0 -/* 0ED0F0 7F0B85C0 92380001 */ lbu $t8, 1($s1) -.L7F0B85C4: -/* 0ED0F4 7F0B85C4 0018C8C0 */ sll $t9, $t8, 3 -/* 0ED0F8 7F0B85C8 1000FFAD */ b .L7F0B8480 -/* 0ED0FC 7F0B85CC 02398821 */ addu $s1, $s1, $t9 -push_tf_if_in_range_rooms: -/* 0ED100 7F0B85D0 1240000C */ beqz $s2, .L7F0B8604 -/* 0ED104 7F0B85D4 3C028004 */ lui $v0, %hi(g_BgCurrentRoom) -/* 0ED108 7F0B85D8 8C424838 */ lw $v0, %lo(g_BgCurrentRoom)($v0) -/* 0ED10C 7F0B85DC 8E28000C */ lw $t0, 0xc($s1) -/* 0ED110 7F0B85E0 0048202A */ slt $a0, $v0, $t0 -/* 0ED114 7F0B85E4 38840001 */ xori $a0, $a0, 1 -/* 0ED118 7F0B85E8 10800004 */ beqz $a0, .L7F0B85FC -/* 0ED11C 7F0B85EC 00000000 */ nop -/* 0ED120 7F0B85F0 8E290014 */ lw $t1, 0x14($s1) -/* 0ED124 7F0B85F4 0122202A */ slt $a0, $t1, $v0 -/* 0ED128 7F0B85F8 38840001 */ xori $a0, $a0, 1 -.L7F0B85FC: -/* 0ED12C 7F0B85FC 0FC2E0DD */ jal bgStackPush -/* 0ED130 7F0B8600 00000000 */ nop -.L7F0B8604: -/* 0ED134 7F0B8604 922A0001 */ lbu $t2, 1($s1) -/* 0ED138 7F0B8608 000A58C0 */ sll $t3, $t2, 3 -/* 0ED13C 7F0B860C 1000FF9C */ b .L7F0B8480 -/* 0ED140 7F0B8610 022B8821 */ addu $s1, $s1, $t3 -force_visible: -/* 0ED144 7F0B8614 5240000C */ beql $s2, $zero, .L7F0B8648 -/* 0ED148 7F0B8618 922C0001 */ lbu $t4, 1($s1) -/* 0ED14C 7F0B861C 8FC20000 */ lw $v0, ($fp) -/* 0ED150 7F0B8620 C4441118 */ lwc1 $f4, 0x1118($v0) -/* 0ED154 7F0B8624 E6C40000 */ swc1 $f4, ($s6) -/* 0ED158 7F0B8628 C446111C */ lwc1 $f6, 0x111c($v0) -/* 0ED15C 7F0B862C E6C60004 */ swc1 $f6, 4($s6) -/* 0ED160 7F0B8630 C4481120 */ lwc1 $f8, 0x1120($v0) -/* 0ED164 7F0B8634 E6C80008 */ swc1 $f8, 8($s6) -/* 0ED168 7F0B8638 C44A1124 */ lwc1 $f10, 0x1124($v0) -/* 0ED16C 7F0B863C AE800000 */ sw $zero, ($s4) -/* 0ED170 7F0B8640 E6CA000C */ swc1 $f10, 0xc($s6) -/* 0ED174 7F0B8644 922C0001 */ lbu $t4, 1($s1) -.L7F0B8648: -/* 0ED178 7F0B8648 000C68C0 */ sll $t5, $t4, 3 -/* 0ED17C 7F0B864C 1000FF8C */ b .L7F0B8480 -/* 0ED180 7F0B8650 022D8821 */ addu $s1, $s1, $t5 -match_portal_vis: -/* 0ED184 7F0B8654 12400010 */ beqz $s2, .L7F0B8698 -/* 0ED188 7F0B8658 02C02825 */ move $a1, $s6 -/* 0ED18C 7F0B865C 0FC2D619 */ jal sub_GAME_7F0B5864 -/* 0ED190 7F0B8660 8E24000C */ lw $a0, 0xc($s1) -/* 0ED194 7F0B8664 54400004 */ bnezl $v0, .L7F0B8678 -/* 0ED198 7F0B8668 8FC50000 */ lw $a1, ($fp) -/* 0ED19C 7F0B866C 1000000A */ b .L7F0B8698 -/* 0ED1A0 7F0B8670 AE970000 */ sw $s7, ($s4) -/* 0ED1A4 7F0B8674 8FC50000 */ lw $a1, ($fp) -.L7F0B8678: -/* 0ED1A8 7F0B8678 02C02025 */ move $a0, $s6 -/* 0ED1AC 7F0B867C 0FC2D6F7 */ jal bgRectIntersect -/* 0ED1B0 7F0B8680 24A51118 */ addiu $a1, $a1, 0x1118 -/* 0ED1B4 7F0B8684 54400004 */ bnezl $v0, .L7F0B8698 -/* 0ED1B8 7F0B8688 AE800000 */ sw $zero, ($s4) -/* 0ED1BC 7F0B868C 10000002 */ b .L7F0B8698 -/* 0ED1C0 7F0B8690 AE970000 */ sw $s7, ($s4) -/* 0ED1C4 7F0B8694 AE800000 */ sw $zero, ($s4) -.L7F0B8698: -/* 0ED1C8 7F0B8698 922E0001 */ lbu $t6, 1($s1) -/* 0ED1CC 7F0B869C 000E78C0 */ sll $t7, $t6, 3 -/* 0ED1D0 7F0B86A0 1000FF77 */ b .L7F0B8480 -/* 0ED1D4 7F0B86A4 022F8821 */ addu $s1, $s1, $t7 -visible_if_seen_through_portal: -/* 0ED1D8 7F0B86A8 12400016 */ beqz $s2, .L7F0B8704 -/* 0ED1DC 7F0B86AC 27A50068 */ addiu $a1, $sp, 0x68 -/* 0ED1E0 7F0B86B0 0FC2D619 */ jal sub_GAME_7F0B5864 -/* 0ED1E4 7F0B86B4 8E24000C */ lw $a0, 0xc($s1) -/* 0ED1E8 7F0B86B8 50400013 */ beql $v0, $zero, .L7F0B8708 -/* 0ED1EC 7F0B86BC 92390001 */ lbu $t9, 1($s1) -/* 0ED1F0 7F0B86C0 8FC50000 */ lw $a1, ($fp) -/* 0ED1F4 7F0B86C4 27A40068 */ addiu $a0, $sp, 0x68 -/* 0ED1F8 7F0B86C8 0FC2D6F7 */ jal bgRectIntersect -/* 0ED1FC 7F0B86CC 24A51118 */ addiu $a1, $a1, 0x1118 -/* 0ED200 7F0B86D0 5040000D */ beql $v0, $zero, .L7F0B8708 -/* 0ED204 7F0B86D4 92390001 */ lbu $t9, 1($s1) -/* 0ED208 7F0B86D8 8E980000 */ lw $t8, ($s4) -/* 0ED20C 7F0B86DC 27A50068 */ addiu $a1, $sp, 0x68 -/* 0ED210 7F0B86E0 02C02025 */ move $a0, $s6 -/* 0ED214 7F0B86E4 13000005 */ beqz $t8, .L7F0B86FC -/* 0ED218 7F0B86E8 00000000 */ nop -/* 0ED21C 7F0B86EC 0FC2D756 */ jal bbox2dCopy -/* 0ED220 7F0B86F0 02C02025 */ move $a0, $s6 -/* 0ED224 7F0B86F4 10000003 */ b .L7F0B8704 -/* 0ED228 7F0B86F8 AE800000 */ sw $zero, ($s4) -.L7F0B86FC: -/* 0ED22C 7F0B86FC 0FC2D730 */ jal sub_GAME_7F0B5CC0 -/* 0ED230 7F0B8700 27A50068 */ addiu $a1, $sp, 0x68 -.L7F0B8704: -/* 0ED234 7F0B8704 92390001 */ lbu $t9, 1($s1) -.L7F0B8708: -/* 0ED238 7F0B8708 001940C0 */ sll $t0, $t9, 3 -/* 0ED23C 7F0B870C 1000FF5C */ b .L7F0B8480 -/* 0ED240 7F0B8710 02288821 */ addu $s1, $s1, $t0 -not_visible_if_seen_through_portal: -/* 0ED244 7F0B8714 52400019 */ beql $s2, $zero, .L7F0B877C -/* 0ED248 7F0B8718 922A0001 */ lbu $t2, 1($s1) -/* 0ED24C 7F0B871C 8E890000 */ lw $t1, ($s4) -/* 0ED250 7F0B8720 27A50058 */ addiu $a1, $sp, 0x58 -/* 0ED254 7F0B8724 55200015 */ bnezl $t1, .L7F0B877C -/* 0ED258 7F0B8728 922A0001 */ lbu $t2, 1($s1) -/* 0ED25C 7F0B872C 0FC2D619 */ jal sub_GAME_7F0B5864 -/* 0ED260 7F0B8730 8E24000C */ lw $a0, 0xc($s1) -/* 0ED264 7F0B8734 54400004 */ bnezl $v0, .L7F0B8748 -/* 0ED268 7F0B8738 8FC50000 */ lw $a1, ($fp) -/* 0ED26C 7F0B873C 1000000E */ b .L7F0B8778 -/* 0ED270 7F0B8740 AE970000 */ sw $s7, ($s4) -/* 0ED274 7F0B8744 8FC50000 */ lw $a1, ($fp) -.L7F0B8748: -/* 0ED278 7F0B8748 27A40058 */ addiu $a0, $sp, 0x58 -/* 0ED27C 7F0B874C 0FC2D6F7 */ jal bgRectIntersect -/* 0ED280 7F0B8750 24A51118 */ addiu $a1, $a1, 0x1118 -/* 0ED284 7F0B8754 14400003 */ bnez $v0, .L7F0B8764 -/* 0ED288 7F0B8758 02C02025 */ move $a0, $s6 -/* 0ED28C 7F0B875C 10000006 */ b .L7F0B8778 -/* 0ED290 7F0B8760 AE970000 */ sw $s7, ($s4) -.L7F0B8764: -/* 0ED294 7F0B8764 0FC2D6F7 */ jal bgRectIntersect -/* 0ED298 7F0B8768 27A50058 */ addiu $a1, $sp, 0x58 -/* 0ED29C 7F0B876C 54400003 */ bnezl $v0, .L7F0B877C -/* 0ED2A0 7F0B8770 922A0001 */ lbu $t2, 1($s1) -/* 0ED2A4 7F0B8774 AE970000 */ sw $s7, ($s4) -.L7F0B8778: -/* 0ED2A8 7F0B8778 922A0001 */ lbu $t2, 1($s1) -.L7F0B877C: -/* 0ED2AC 7F0B877C 000A58C0 */ sll $t3, $t2, 3 -/* 0ED2B0 7F0B8780 1000FF3F */ b .L7F0B8480 -/* 0ED2B4 7F0B8784 022B8821 */ addu $s1, $s1, $t3 -add_visible_room: -/* 0ED2B8 7F0B8788 52400017 */ beql $s2, $zero, .L7F0B87E8 -/* 0ED2BC 7F0B878C 922F0001 */ lbu $t7, 1($s1) -/* 0ED2C0 7F0B8790 8E8C0000 */ lw $t4, ($s4) -/* 0ED2C4 7F0B8794 02C02825 */ move $a1, $s6 -/* 0ED2C8 7F0B8798 55800013 */ bnezl $t4, .L7F0B87E8 -/* 0ED2CC 7F0B879C 922F0001 */ lbu $t7, 1($s1) -/* 0ED2D0 7F0B87A0 0FC2D482 */ jal sub_GAME_7F0B5208 -/* 0ED2D4 7F0B87A4 8E24000C */ lw $a0, 0xc($s1) -/* 0ED2D8 7F0B87A8 1040000E */ beqz $v0, .L7F0B87E4 -/* 0ED2DC 7F0B87AC 00002825 */ move $a1, $zero -/* 0ED2E0 7F0B87B0 8E24000C */ lw $a0, 0xc($s1) -/* 0ED2E4 7F0B87B4 02C03025 */ move $a2, $s6 -/* 0ED2E8 7F0B87B8 0FC2CE6F */ jal sub_GAME_7F0B39BC -/* 0ED2EC 7F0B87BC 00003825 */ move $a3, $zero -/* 0ED2F0 7F0B87C0 3C038008 */ lui $v1, %hi(num_visible_rooms_in_cur_global_vis_packet) -/* 0ED2F4 7F0B87C4 8C63C038 */ lw $v1, %lo(num_visible_rooms_in_cur_global_vis_packet)($v1) -/* 0ED2F8 7F0B87C8 8E2D000C */ lw $t5, 0xc($s1) -/* 0ED2FC 7F0B87CC 3C018008 */ lui $at, %hi(list_visible_rooms_in_cur_global_vis_packet) -/* 0ED300 7F0B87D0 00230821 */ addu $at, $at, $v1 -/* 0ED304 7F0B87D4 A02DBFA0 */ sb $t5, %lo(list_visible_rooms_in_cur_global_vis_packet)($at) -/* 0ED308 7F0B87D8 3C018008 */ lui $at, %hi(num_visible_rooms_in_cur_global_vis_packet) -/* 0ED30C 7F0B87DC 246E0001 */ addiu $t6, $v1, 1 -/* 0ED310 7F0B87E0 AC2EC038 */ sw $t6, %lo(num_visible_rooms_in_cur_global_vis_packet)($at) -.L7F0B87E4: -/* 0ED314 7F0B87E4 922F0001 */ lbu $t7, 1($s1) -.L7F0B87E8: -/* 0ED318 7F0B87E8 000FC0C0 */ sll $t8, $t7, 3 -/* 0ED31C 7F0B87EC 1000FF24 */ b .L7F0B8480 -/* 0ED320 7F0B87F0 02388821 */ addu $s1, $s1, $t8 -disable_room: -/* 0ED324 7F0B87F4 52400009 */ beql $s2, $zero, .L7F0B881C -/* 0ED328 7F0B87F8 92290001 */ lbu $t1, 1($s1) -/* 0ED32C 7F0B87FC 8E39000C */ lw $t9, 0xc($s1) -/* 0ED330 7F0B8800 3C018004 */ lui $at, %hi(g_BgRoomInfo + 0x10 +0x24) -/* 0ED334 7F0B8804 00194080 */ sll $t0, $t9, 2 -/* 0ED338 7F0B8808 01194021 */ addu $t0, $t0, $t9 -/* 0ED33C 7F0B880C 00084100 */ sll $t0, $t0, 4 -/* 0ED340 7F0B8810 00280821 */ addu $at, $at, $t0 -/* 0ED344 7F0B8814 A0351448 */ sb $s5, %lo(g_BgRoomInfo + 0x10 +0x24)($at) -/* 0ED348 7F0B8818 92290001 */ lbu $t1, 1($s1) -.L7F0B881C: -/* 0ED34C 7F0B881C 000950C0 */ sll $t2, $t1, 3 -/* 0ED350 7F0B8820 1000FF17 */ b .L7F0B8480 -/* 0ED354 7F0B8824 022A8821 */ addu $s1, $s1, $t2 -disable_room_range: -/* 0ED358 7F0B8828 52400013 */ beql $s2, $zero, .L7F0B8878 -/* 0ED35C 7F0B882C 922F0001 */ lbu $t7, 1($s1) -/* 0ED360 7F0B8830 8E22000C */ lw $v0, 0xc($s1) -/* 0ED364 7F0B8834 8E2B0014 */ lw $t3, 0x14($s1) -/* 0ED368 7F0B8838 3C0D8004 */ lui $t5, %hi(g_BgRoomInfo) -/* 0ED36C 7F0B883C 00026080 */ sll $t4, $v0, 2 -/* 0ED370 7F0B8840 0162082A */ slt $at, $t3, $v0 -/* 0ED374 7F0B8844 1420000B */ bnez $at, .L7F0B8874 -/* 0ED378 7F0B8848 01826021 */ addu $t4, $t4, $v0 -/* 0ED37C 7F0B884C 000C6100 */ sll $t4, $t4, 4 -/* 0ED380 7F0B8850 25AD1414 */ addiu $t5, %lo(g_BgRoomInfo) # addiu $t5, $t5, 0x1414 -/* 0ED384 7F0B8854 018D1821 */ addu $v1, $t4, $t5 -/* 0ED388 7F0B8858 A0750034 */ sb $s5, 0x34($v1) -.L7F0B885C: -/* 0ED38C 7F0B885C 8E2E0014 */ lw $t6, 0x14($s1) -/* 0ED390 7F0B8860 24420001 */ addiu $v0, $v0, 1 -/* 0ED394 7F0B8864 24630050 */ addiu $v1, $v1, 0x50 -/* 0ED398 7F0B8868 01C2082A */ slt $at, $t6, $v0 -/* 0ED39C 7F0B886C 5020FFFB */ beql $at, $zero, .L7F0B885C -/* 0ED3A0 7F0B8870 A0750034 */ sb $s5, 0x34($v1) -.L7F0B8874: -/* 0ED3A4 7F0B8874 922F0001 */ lbu $t7, 1($s1) -.L7F0B8878: -/* 0ED3A8 7F0B8878 000FC0C0 */ sll $t8, $t7, 3 -/* 0ED3AC 7F0B887C 1000FF00 */ b .L7F0B8480 -/* 0ED3B0 7F0B8880 02388821 */ addu $s1, $s1, $t8 -preload_room: -/* 0ED3B4 7F0B8884 52400009 */ beql $s2, $zero, .L7F0B88AC -/* 0ED3B8 7F0B8888 92280001 */ lbu $t0, 1($s1) -/* 0ED3BC 7F0B888C 52600007 */ beql $s3, $zero, .L7F0B88AC -/* 0ED3C0 7F0B8890 92280001 */ lbu $t0, 1($s1) -/* 0ED3C4 7F0B8894 0FC2D8C5 */ jal bgCheckIfRoomModelNeedsLoad -/* 0ED3C8 7F0B8898 8E24000C */ lw $a0, 0xc($s1) -/* 0ED3CC 7F0B889C 2C530001 */ sltiu $s3, $v0, 1 -/* 0ED3D0 7F0B88A0 327900FF */ andi $t9, $s3, 0xff -/* 0ED3D4 7F0B88A4 03209825 */ move $s3, $t9 -/* 0ED3D8 7F0B88A8 92280001 */ lbu $t0, 1($s1) -.L7F0B88AC: -/* 0ED3DC 7F0B88AC 000848C0 */ sll $t1, $t0, 3 -/* 0ED3E0 7F0B88B0 1000FEF3 */ b .L7F0B8480 -/* 0ED3E4 7F0B88B4 02298821 */ addu $s1, $s1, $t1 -preload_room_range: -/* 0ED3E8 7F0B88B8 52400013 */ beql $s2, $zero, .L7F0B8908 -/* 0ED3EC 7F0B88BC 922B0001 */ lbu $t3, 1($s1) -/* 0ED3F0 7F0B88C0 8E30000C */ lw $s0, 0xc($s1) -/* 0ED3F4 7F0B88C4 8E230014 */ lw $v1, 0x14($s1) -/* 0ED3F8 7F0B88C8 0070082A */ slt $at, $v1, $s0 -/* 0ED3FC 7F0B88CC 5420000E */ bnezl $at, .L7F0B8908 -/* 0ED400 7F0B88D0 922B0001 */ lbu $t3, 1($s1) -.L7F0B88D4: -/* 0ED404 7F0B88D4 52600008 */ beql $s3, $zero, .L7F0B88F8 -/* 0ED408 7F0B88D8 26100001 */ addiu $s0, $s0, 1 -/* 0ED40C 7F0B88DC 0FC2D8C5 */ jal bgCheckIfRoomModelNeedsLoad -/* 0ED410 7F0B88E0 02002025 */ move $a0, $s0 -/* 0ED414 7F0B88E4 2C530001 */ sltiu $s3, $v0, 1 -/* 0ED418 7F0B88E8 326A00FF */ andi $t2, $s3, 0xff -/* 0ED41C 7F0B88EC 01409825 */ move $s3, $t2 -/* 0ED420 7F0B88F0 8E230014 */ lw $v1, 0x14($s1) -/* 0ED424 7F0B88F4 26100001 */ addiu $s0, $s0, 1 -.L7F0B88F8: -/* 0ED428 7F0B88F8 0070082A */ slt $at, $v1, $s0 -/* 0ED42C 7F0B88FC 1020FFF5 */ beqz $at, .L7F0B88D4 -/* 0ED430 7F0B8900 00000000 */ nop -/* 0ED434 7F0B8904 922B0001 */ lbu $t3, 1($s1) -.L7F0B8908: -/* 0ED438 7F0B8908 000B60C0 */ sll $t4, $t3, 3 -/* 0ED43C 7F0B890C 1000FEDC */ b .L7F0B8480 -/* 0ED440 7F0B8910 022C8821 */ addu $s1, $s1, $t4 -remove_vis: -/* 0ED444 7F0B8914 52400003 */ beql $s2, $zero, .L7F0B8924 -/* 0ED448 7F0B8918 922D0001 */ lbu $t5, 1($s1) -/* 0ED44C 7F0B891C AE970000 */ sw $s7, ($s4) -/* 0ED450 7F0B8920 922D0001 */ lbu $t5, 1($s1) -.L7F0B8924: -/* 0ED454 7F0B8924 000D70C0 */ sll $t6, $t5, 3 -/* 0ED458 7F0B8928 1000FED5 */ b .L7F0B8480 -/* 0ED45C 7F0B892C 022E8821 */ addu $s1, $s1, $t6 -if_statement: -/* 0ED460 7F0B8930 922F0001 */ lbu $t7, 1($s1) -/* 0ED464 7F0B8934 02402825 */ move $a1, $s2 -/* 0ED468 7F0B8938 000FC0C0 */ sll $t8, $t7, 3 -/* 0ED46C 7F0B893C 0FC2E105 */ jal parse_global_vis_command_list -/* 0ED470 7F0B8940 03112021 */ addu $a0, $t8, $s1 -/* 0ED474 7F0B8944 90590001 */ lbu $t9, 1($v0) -/* 0ED478 7F0B8948 001940C0 */ sll $t0, $t9, 3 -/* 0ED47C 7F0B894C 1000FECC */ b .L7F0B8480 -/* 0ED480 7F0B8950 00488821 */ addu $s1, $v0, $t0 -endif_continue_exec: -/* 0ED484 7F0B8954 92290001 */ lbu $t1, 1($s1) -/* 0ED488 7F0B8958 3C018008 */ lui $at, %hi(dword_CODE_bss_80081600 + 0x10) -/* 0ED48C 7F0B895C AC201610 */ sw $zero, %lo(dword_CODE_bss_80081600 + 0x10)($at) -/* 0ED490 7F0B8960 000950C0 */ sll $t2, $t1, 3 -/* 0ED494 7F0B8964 10000023 */ b .L7F0B89F4 -/* 0ED498 7F0B8968 022A1021 */ addu $v0, $s1, $t2 -dont_exec_commands_even_on_return: -/* 0ED49C 7F0B896C 922B0001 */ lbu $t3, 1($s1) -/* 0ED4A0 7F0B8970 0012102B */ sltu $v0, $zero, $s2 -/* 0ED4A4 7F0B8974 00009025 */ move $s2, $zero -/* 0ED4A8 7F0B8978 000B60C0 */ sll $t4, $t3, 3 -/* 0ED4AC 7F0B897C 1040FEC0 */ beqz $v0, .L7F0B8480 -/* 0ED4B0 7F0B8980 022C8821 */ addu $s1, $s1, $t4 -/* 0ED4B4 7F0B8984 3C018008 */ lui $at, %hi(dword_CODE_bss_80081600 + 0x10) -/* 0ED4B8 7F0B8988 1000FEBD */ b .L7F0B8480 -/* 0ED4BC 7F0B898C AC371610 */ sw $s7, %lo(dword_CODE_bss_80081600 + 0x10)($at) -if_statement_pull_from_stack: -/* 0ED4C0 7F0B8990 0FC2E0EC */ jal bgStackPop -/* 0ED4C4 7F0B8994 00000000 */ nop -/* 0ED4C8 7F0B8998 922D0001 */ lbu $t5, 1($s1) -/* 0ED4CC 7F0B899C 00522824 */ and $a1, $v0, $s2 -/* 0ED4D0 7F0B89A0 000D70C0 */ sll $t6, $t5, 3 -/* 0ED4D4 7F0B89A4 0FC2E105 */ jal parse_global_vis_command_list -/* 0ED4D8 7F0B89A8 01D12021 */ addu $a0, $t6, $s1 -/* 0ED4DC 7F0B89AC 3C0F8008 */ lui $t7, %hi(dword_CODE_bss_80081600 + 0x10) -/* 0ED4E0 7F0B89B0 8DEF1610 */ lw $t7, %lo(dword_CODE_bss_80081600 + 0x10)($t7) -/* 0ED4E4 7F0B89B4 00408825 */ move $s1, $v0 -/* 0ED4E8 7F0B89B8 51E0FEB2 */ beql $t7, $zero, .L7F0B8484 -/* 0ED4EC 7F0B89BC 92240000 */ lbu $a0, ($s1) -/* 0ED4F0 7F0B89C0 1000FEAF */ b .L7F0B8480 -/* 0ED4F4 7F0B89C4 00009025 */ move $s2, $zero -toggle_exec_vs_ro: -/* 0ED4F8 7F0B89C8 92390001 */ lbu $t9, 1($s1) -/* 0ED4FC 7F0B89CC 3A580001 */ xori $t8, $s2, 1 -/* 0ED500 7F0B89D0 03009025 */ move $s2, $t8 -/* 0ED504 7F0B89D4 001940C0 */ sll $t0, $t9, 3 -/* 0ED508 7F0B89D8 1000FEA9 */ b .L7F0B8480 -/* 0ED50C 7F0B89DC 02288821 */ addu $s1, $s1, $t0 -endif: -/* 0ED510 7F0B89E0 92290001 */ lbu $t1, 1($s1) -/* 0ED514 7F0B89E4 000950C0 */ sll $t2, $t1, 3 -/* 0ED518 7F0B89E8 10000002 */ b .L7F0B89F4 -/* 0ED51C 7F0B89EC 022A1021 */ addu $v0, $s1, $t2 -invalid_type_terminate: -.L7F0B89F0: -/* 0ED520 7F0B89F0 02201025 */ move $v0, $s1 -.L7F0B89F4: -/* 0ED524 7F0B89F4 8FBF003C */ lw $ra, 0x3c($sp) -/* 0ED528 7F0B89F8 8FB00018 */ lw $s0, 0x18($sp) -/* 0ED52C 7F0B89FC 8FB1001C */ lw $s1, 0x1c($sp) -/* 0ED530 7F0B8A00 8FB20020 */ lw $s2, 0x20($sp) -/* 0ED534 7F0B8A04 8FB30024 */ lw $s3, 0x24($sp) -/* 0ED538 7F0B8A08 8FB40028 */ lw $s4, 0x28($sp) -/* 0ED53C 7F0B8A0C 8FB5002C */ lw $s5, 0x2c($sp) -/* 0ED540 7F0B8A10 8FB60030 */ lw $s6, 0x30($sp) -/* 0ED544 7F0B8A14 8FB70034 */ lw $s7, 0x34($sp) -/* 0ED548 7F0B8A18 8FBE0038 */ lw $fp, 0x38($sp) -/* 0ED54C 7F0B8A1C 03E00008 */ jr $ra -/* 0ED550 7F0B8A20 27BD0080 */ addiu $sp, $sp, 0x80 +.bss +.balign 4 +glabel table_for_portals +.space 0xfa0 ) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -/*D:80058C80*/ -glabel jpt_80058C80 -.word if_statement -.word dont_exec_commands_even_on_return -.word endif_continue_exec -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word if_statement_pull_from_stack -.word toggle_exec_vs_ro -.word endif - -/*D:80058CB4*/ -glabel vis_command_jpt -.word break -.word push_to_stack -.word pull_from_stack -.word and_merge_last_two_on_stack -.word or_merge_last_two_on_stack -.word not_merge_last_two_on_stack -.word carrot_merge_last_two_on_stack -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word push_tf_if_in_range_rooms -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word invalid_type_terminate -.word force_visible -.word match_portal_vis -.word add_visible_room -.word remove_vis -.word visible_if_seen_through_portal -.word not_visible_if_seen_through_portal -.word disable_room -.word disable_room_range -.word preload_room -.word preload_room_range -.text -glabel parse_global_vis_command_list -/* 0EA0B4 7F0B76C4 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0EA0B8 7F0B76C8 AFB30024 */ sw $s3, 0x24($sp) -/* 0EA0BC 7F0B76CC AFB20020 */ sw $s2, 0x20($sp) -/* 0EA0C0 7F0B76D0 AFB1001C */ sw $s1, 0x1c($sp) -/* 0EA0C4 7F0B76D4 3C018007 */ lui $at, %hi(dword_CODE_bss_80081600 + 0x10) # $at, 0x8007 -/* 0EA0C8 7F0B76D8 00808825 */ move $s1, $a0 -/* 0EA0CC 7F0B76DC 00A09025 */ move $s2, $a1 -/* 0EA0D0 7F0B76E0 AFBF003C */ sw $ra, 0x3c($sp) -/* 0EA0D4 7F0B76E4 AFBE0038 */ sw $fp, 0x38($sp) -/* 0EA0D8 7F0B76E8 AFB70034 */ sw $s7, 0x34($sp) -/* 0EA0DC 7F0B76EC AFB60030 */ sw $s6, 0x30($sp) -/* 0EA0E0 7F0B76F0 AFB5002C */ sw $s5, 0x2c($sp) -/* 0EA0E4 7F0B76F4 AFB40028 */ sw $s4, 0x28($sp) -/* 0EA0E8 7F0B76F8 AFB00018 */ sw $s0, 0x18($sp) -/* 0EA0EC 7F0B76FC 24130001 */ li $s3, 1 -/* 0EA0F0 7F0B7700 14800003 */ bnez $a0, .L7F0B7710 -/* 0EA0F4 7F0B7704 AC20BFB8 */ sw $zero, %lo(dword_CODE_bss_80081600 + 0x10)($at) -/* 0EA0F8 7F0B7708 10000166 */ b .L7F0B7CA4 -/* 0EA0FC 7F0B770C 00801025 */ move $v0, $a0 -.L7F0B7710: -/* 0EA100 7F0B7710 3C1E8007 */ lui $fp, %hi(g_CurrentPlayer) # $fp, 0x8007 -/* 0EA104 7F0B7714 3C168007 */ lui $s6, %hi(dword_CODE_bss_80081600) # $s6, 0x8007 -/* 0EA108 7F0B7718 3C148004 */ lui $s4, %hi(current_visibility) # $s4, 0x8004 -/* 0EA10C 7F0B771C 2694DDE4 */ addiu $s4, %lo(current_visibility) # addiu $s4, $s4, -0x221c -/* 0EA110 7F0B7720 26D6BFA8 */ addiu $s6, %lo(dword_CODE_bss_80081600) # addiu $s6, $s6, -0x4058 -/* 0EA114 7F0B7724 27DE8BC0 */ addiu $fp, %lo(g_CurrentPlayer) # addiu $fp, $fp, -0x7440 -/* 0EA118 7F0B7728 24170001 */ li $s7, 1 -/* 0EA11C 7F0B772C 24150001 */ li $s5, 1 -.L7F0B7730: -/* 0EA120 7F0B7730 92240000 */ lbu $a0, ($s1) -.L7F0B7734: -/* 0EA124 7F0B7734 28810028 */ slti $at, $a0, 0x28 -/* 0EA128 7F0B7738 14200009 */ bnez $at, .L7F0B7760 -/* 0EA12C 7F0B773C 248EFFB0 */ addiu $t6, $a0, -0x50 -/* 0EA130 7F0B7740 2DC1000D */ sltiu $at, $t6, 0xd -/* 0EA134 7F0B7744 10200156 */ beqz $at, .L7F0B7CA0 -/* 0EA138 7F0B7748 000E7080 */ sll $t6, $t6, 2 -/* 0EA13C 7F0B774C 3C018005 */ lui $at, %hi(jpt_80058C80) -/* 0EA140 7F0B7750 002E0821 */ addu $at, $at, $t6 -/* 0EA144 7F0B7754 8C2ED6D0 */ lw $t6, %lo(jpt_80058C80)($at) -/* 0EA148 7F0B7758 01C00008 */ jr $t6 -/* 0EA14C 7F0B775C 00000000 */ nop -.L7F0B7760: -/* 0EA150 7F0B7760 2C810028 */ sltiu $at, $a0, 0x28 -/* 0EA154 7F0B7764 1020014E */ beqz $at, .L7F0B7CA0 -/* 0EA158 7F0B7768 00047880 */ sll $t7, $a0, 2 -/* 0EA15C 7F0B776C 3C018005 */ lui $at, %hi(vis_command_jpt) -/* 0EA160 7F0B7770 002F0821 */ addu $at, $at, $t7 -/* 0EA164 7F0B7774 8C2FD704 */ lw $t7, %lo(vis_command_jpt)($at) -/* 0EA168 7F0B7778 01E00008 */ jr $t7 -/* 0EA16C 7F0B777C 00000000 */ nop -break: -/* 0EA170 7F0B7780 10000148 */ b .L7F0B7CA4 -/* 0EA174 7F0B7784 02201025 */ move $v0, $s1 -push_to_stack: -/* 0EA178 7F0B7788 52400004 */ beql $s2, $zero, .L7F0B779C -/* 0EA17C 7F0B778C 92380001 */ lbu $t8, 1($s1) -/* 0EA180 7F0B7790 0FC2DD89 */ jal bgStackPush -/* 0EA184 7F0B7794 8E240004 */ lw $a0, 4($s1) -/* 0EA188 7F0B7798 92380001 */ lbu $t8, 1($s1) -.L7F0B779C: -/* 0EA18C 7F0B779C 0018C8C0 */ sll $t9, $t8, 3 -/* 0EA190 7F0B77A0 1000FFE3 */ b .L7F0B7730 -/* 0EA194 7F0B77A4 02398821 */ addu $s1, $s1, $t9 -pull_from_stack: -/* 0EA198 7F0B77A8 52400004 */ beql $s2, $zero, .L7F0B77BC -/* 0EA19C 7F0B77AC 92280001 */ lbu $t0, 1($s1) -/* 0EA1A0 7F0B77B0 0FC2DD98 */ jal bgStackPop -/* 0EA1A4 7F0B77B4 00000000 */ nop -/* 0EA1A8 7F0B77B8 92280001 */ lbu $t0, 1($s1) -.L7F0B77BC: -/* 0EA1AC 7F0B77BC 000848C0 */ sll $t1, $t0, 3 -/* 0EA1B0 7F0B77C0 1000FFDB */ b .L7F0B7730 -/* 0EA1B4 7F0B77C4 02298821 */ addu $s1, $s1, $t1 -and_merge_last_two_on_stack: -/* 0EA1B8 7F0B77C8 52400008 */ beql $s2, $zero, .L7F0B77EC -/* 0EA1BC 7F0B77CC 922A0001 */ lbu $t2, 1($s1) -/* 0EA1C0 7F0B77D0 0FC2DD98 */ jal bgStackPop -/* 0EA1C4 7F0B77D4 00000000 */ nop -/* 0EA1C8 7F0B77D8 0FC2DD98 */ jal bgStackPop -/* 0EA1CC 7F0B77DC 00408025 */ move $s0, $v0 -/* 0EA1D0 7F0B77E0 0FC2DD89 */ jal bgStackPush -/* 0EA1D4 7F0B77E4 00502024 */ and $a0, $v0, $s0 -/* 0EA1D8 7F0B77E8 922A0001 */ lbu $t2, 1($s1) -.L7F0B77EC: -/* 0EA1DC 7F0B77EC 000A58C0 */ sll $t3, $t2, 3 -/* 0EA1E0 7F0B77F0 1000FFCF */ b .L7F0B7730 -/* 0EA1E4 7F0B77F4 022B8821 */ addu $s1, $s1, $t3 -or_merge_last_two_on_stack: -/* 0EA1E8 7F0B77F8 52400008 */ beql $s2, $zero, .L7F0B781C -/* 0EA1EC 7F0B77FC 922C0001 */ lbu $t4, 1($s1) -/* 0EA1F0 7F0B7800 0FC2DD98 */ jal bgStackPop -/* 0EA1F4 7F0B7804 00000000 */ nop -/* 0EA1F8 7F0B7808 0FC2DD98 */ jal bgStackPop -/* 0EA1FC 7F0B780C 00408025 */ move $s0, $v0 -/* 0EA200 7F0B7810 0FC2DD89 */ jal bgStackPush -/* 0EA204 7F0B7814 00502025 */ or $a0, $v0, $s0 -/* 0EA208 7F0B7818 922C0001 */ lbu $t4, 1($s1) -.L7F0B781C: -/* 0EA20C 7F0B781C 000C68C0 */ sll $t5, $t4, 3 -/* 0EA210 7F0B7820 1000FFC3 */ b .L7F0B7730 -/* 0EA214 7F0B7824 022D8821 */ addu $s1, $s1, $t5 -not_merge_last_two_on_stack: -/* 0EA218 7F0B7828 52400006 */ beql $s2, $zero, .L7F0B7844 -/* 0EA21C 7F0B782C 922E0001 */ lbu $t6, 1($s1) -/* 0EA220 7F0B7830 0FC2DD98 */ jal bgStackPop -/* 0EA224 7F0B7834 00000000 */ nop -/* 0EA228 7F0B7838 0FC2DD89 */ jal bgStackPush -/* 0EA22C 7F0B783C 2C440001 */ sltiu $a0, $v0, 1 -/* 0EA230 7F0B7840 922E0001 */ lbu $t6, 1($s1) -.L7F0B7844: -/* 0EA234 7F0B7844 000E78C0 */ sll $t7, $t6, 3 -/* 0EA238 7F0B7848 1000FFB9 */ b .L7F0B7730 -/* 0EA23C 7F0B784C 022F8821 */ addu $s1, $s1, $t7 -carrot_merge_last_two_on_stack: -/* 0EA240 7F0B7850 52400008 */ beql $s2, $zero, .L7F0B7874 -/* 0EA244 7F0B7854 92380001 */ lbu $t8, 1($s1) -/* 0EA248 7F0B7858 0FC2DD98 */ jal bgStackPop -/* 0EA24C 7F0B785C 00000000 */ nop -/* 0EA250 7F0B7860 0FC2DD98 */ jal bgStackPop -/* 0EA254 7F0B7864 00408025 */ move $s0, $v0 -/* 0EA258 7F0B7868 0FC2DD89 */ jal bgStackPush -/* 0EA25C 7F0B786C 00502026 */ xor $a0, $v0, $s0 -/* 0EA260 7F0B7870 92380001 */ lbu $t8, 1($s1) -.L7F0B7874: -/* 0EA264 7F0B7874 0018C8C0 */ sll $t9, $t8, 3 -/* 0EA268 7F0B7878 1000FFAD */ b .L7F0B7730 -/* 0EA26C 7F0B787C 02398821 */ addu $s1, $s1, $t9 -push_tf_if_in_range_rooms: -/* 0EA270 7F0B7880 1240000C */ beqz $s2, .L7F0B78B4 -/* 0EA274 7F0B7884 3C028004 */ lui $v0, %hi(g_BgCurrentRoom) # $v0, 0x8004 -/* 0EA278 7F0B7888 8C42DD18 */ lw $v0, %lo(g_BgCurrentRoom)($v0) -/* 0EA27C 7F0B788C 8E28000C */ lw $t0, 0xc($s1) -/* 0EA280 7F0B7890 0048202A */ slt $a0, $v0, $t0 -/* 0EA284 7F0B7894 38840001 */ xori $a0, $a0, 1 -/* 0EA288 7F0B7898 10800004 */ beqz $a0, .L7F0B78AC -/* 0EA28C 7F0B789C 00000000 */ nop -/* 0EA290 7F0B78A0 8E290014 */ lw $t1, 0x14($s1) -/* 0EA294 7F0B78A4 0122202A */ slt $a0, $t1, $v0 -/* 0EA298 7F0B78A8 38840001 */ xori $a0, $a0, 1 -.L7F0B78AC: -/* 0EA29C 7F0B78AC 0FC2DD89 */ jal bgStackPush -/* 0EA2A0 7F0B78B0 00000000 */ nop -.L7F0B78B4: -/* 0EA2A4 7F0B78B4 922A0001 */ lbu $t2, 1($s1) -/* 0EA2A8 7F0B78B8 000A58C0 */ sll $t3, $t2, 3 -/* 0EA2AC 7F0B78BC 1000FF9C */ b .L7F0B7730 -/* 0EA2B0 7F0B78C0 022B8821 */ addu $s1, $s1, $t3 -force_visible: -/* 0EA2B4 7F0B78C4 5240000C */ beql $s2, $zero, .L7F0B78F8 -/* 0EA2B8 7F0B78C8 922C0001 */ lbu $t4, 1($s1) -/* 0EA2BC 7F0B78CC 8FC20000 */ lw $v0, ($fp) -/* 0EA2C0 7F0B78D0 C4441110 */ lwc1 $f4, 0x1110($v0) -/* 0EA2C4 7F0B78D4 E6C40000 */ swc1 $f4, ($s6) -/* 0EA2C8 7F0B78D8 C4461114 */ lwc1 $f6, 0x1114($v0) -/* 0EA2CC 7F0B78DC E6C60004 */ swc1 $f6, 4($s6) -/* 0EA2D0 7F0B78E0 C4481118 */ lwc1 $f8, 0x1118($v0) -/* 0EA2D4 7F0B78E4 E6C80008 */ swc1 $f8, 8($s6) -/* 0EA2D8 7F0B78E8 C44A111C */ lwc1 $f10, 0x111c($v0) -/* 0EA2DC 7F0B78EC AE800000 */ sw $zero, ($s4) -/* 0EA2E0 7F0B78F0 E6CA000C */ swc1 $f10, 0xc($s6) -/* 0EA2E4 7F0B78F4 922C0001 */ lbu $t4, 1($s1) -.L7F0B78F8: -/* 0EA2E8 7F0B78F8 000C68C0 */ sll $t5, $t4, 3 -/* 0EA2EC 7F0B78FC 1000FF8C */ b .L7F0B7730 -/* 0EA2F0 7F0B7900 022D8821 */ addu $s1, $s1, $t5 -match_portal_vis: -/* 0EA2F4 7F0B7904 12400010 */ beqz $s2, .L7F0B7948 -/* 0EA2F8 7F0B7908 02C02825 */ move $a1, $s6 -/* 0EA2FC 7F0B790C 0FC2D2E8 */ jal sub_GAME_7F0B5864 -/* 0EA300 7F0B7910 8E24000C */ lw $a0, 0xc($s1) -/* 0EA304 7F0B7914 54400004 */ bnezl $v0, .L7F0B7928 -/* 0EA308 7F0B7918 8FC50000 */ lw $a1, ($fp) -/* 0EA30C 7F0B791C 1000000A */ b .L7F0B7948 -/* 0EA310 7F0B7920 AE970000 */ sw $s7, ($s4) -/* 0EA314 7F0B7924 8FC50000 */ lw $a1, ($fp) -.L7F0B7928: -/* 0EA318 7F0B7928 02C02025 */ move $a0, $s6 -/* 0EA31C 7F0B792C 0FC2D3C6 */ jal bgRectIntersect -/* 0EA320 7F0B7930 24A51110 */ addiu $a1, $a1, 0x1110 -/* 0EA324 7F0B7934 54400004 */ bnezl $v0, .L7F0B7948 -/* 0EA328 7F0B7938 AE800000 */ sw $zero, ($s4) -/* 0EA32C 7F0B793C 10000002 */ b .L7F0B7948 -/* 0EA330 7F0B7940 AE970000 */ sw $s7, ($s4) -/* 0EA334 7F0B7944 AE800000 */ sw $zero, ($s4) -.L7F0B7948: -/* 0EA338 7F0B7948 922E0001 */ lbu $t6, 1($s1) -/* 0EA33C 7F0B794C 000E78C0 */ sll $t7, $t6, 3 -/* 0EA340 7F0B7950 1000FF77 */ b .L7F0B7730 -/* 0EA344 7F0B7954 022F8821 */ addu $s1, $s1, $t7 -visible_if_seen_through_portal: -/* 0EA348 7F0B7958 12400016 */ beqz $s2, .L7F0B79B4 -/* 0EA34C 7F0B795C 27A50068 */ addiu $a1, $sp, 0x68 -/* 0EA350 7F0B7960 0FC2D2E8 */ jal sub_GAME_7F0B5864 -/* 0EA354 7F0B7964 8E24000C */ lw $a0, 0xc($s1) -/* 0EA358 7F0B7968 50400013 */ beql $v0, $zero, .L7F0B79B8 -/* 0EA35C 7F0B796C 92390001 */ lbu $t9, 1($s1) -/* 0EA360 7F0B7970 8FC50000 */ lw $a1, ($fp) -/* 0EA364 7F0B7974 27A40068 */ addiu $a0, $sp, 0x68 -/* 0EA368 7F0B7978 0FC2D3C6 */ jal bgRectIntersect -/* 0EA36C 7F0B797C 24A51110 */ addiu $a1, $a1, 0x1110 -/* 0EA370 7F0B7980 5040000D */ beql $v0, $zero, .L7F0B79B8 -/* 0EA374 7F0B7984 92390001 */ lbu $t9, 1($s1) -/* 0EA378 7F0B7988 8E980000 */ lw $t8, ($s4) -/* 0EA37C 7F0B798C 27A50068 */ addiu $a1, $sp, 0x68 -/* 0EA380 7F0B7990 02C02025 */ move $a0, $s6 -/* 0EA384 7F0B7994 13000005 */ beqz $t8, .L7F0B79AC -/* 0EA388 7F0B7998 00000000 */ nop -/* 0EA38C 7F0B799C 0FC2D425 */ jal bbox2dCopy -/* 0EA390 7F0B79A0 02C02025 */ move $a0, $s6 -/* 0EA394 7F0B79A4 10000003 */ b .L7F0B79B4 -/* 0EA398 7F0B79A8 AE800000 */ sw $zero, ($s4) -.L7F0B79AC: -/* 0EA39C 7F0B79AC 0FC2D3FF */ jal sub_GAME_7F0B5CC0 -/* 0EA3A0 7F0B79B0 27A50068 */ addiu $a1, $sp, 0x68 -.L7F0B79B4: -/* 0EA3A4 7F0B79B4 92390001 */ lbu $t9, 1($s1) -.L7F0B79B8: -/* 0EA3A8 7F0B79B8 001940C0 */ sll $t0, $t9, 3 -/* 0EA3AC 7F0B79BC 1000FF5C */ b .L7F0B7730 -/* 0EA3B0 7F0B79C0 02288821 */ addu $s1, $s1, $t0 -not_visible_if_seen_through_portal: -/* 0EA3B4 7F0B79C4 52400019 */ beql $s2, $zero, .Leu7F0B7A2C -/* 0EA3B8 7F0B79C8 922A0001 */ lbu $t2, 1($s1) -/* 0EA3BC 7F0B79CC 8E890000 */ lw $t1, ($s4) -/* 0EA3C0 7F0B79D0 27A50058 */ addiu $a1, $sp, 0x58 -/* 0EA3C4 7F0B79D4 55200015 */ bnezl $t1, .Leu7F0B7A2C -/* 0EA3C8 7F0B79D8 922A0001 */ lbu $t2, 1($s1) -/* 0EA3CC 7F0B79DC 0FC2D2E8 */ jal sub_GAME_7F0B5864 -/* 0EA3D0 7F0B79E0 8E24000C */ lw $a0, 0xc($s1) -/* 0EA3D4 7F0B79E4 54400004 */ bnezl $v0, .L7F0B79F8 -/* 0EA3D8 7F0B79E8 8FC50000 */ lw $a1, ($fp) -/* 0EA3DC 7F0B79EC 1000000E */ b .Leu7F0B7A28 -/* 0EA3E0 7F0B79F0 AE970000 */ sw $s7, ($s4) -/* 0EA3E4 7F0B79F4 8FC50000 */ lw $a1, ($fp) -.L7F0B79F8: -/* 0EA3E8 7F0B79F8 27A40058 */ addiu $a0, $sp, 0x58 -/* 0EA3EC 7F0B79FC 0FC2D3C6 */ jal bgRectIntersect -/* 0EA3F0 7F0B7A00 24A51110 */ addiu $a1, $a1, 0x1110 -/* 0EA3F4 7F0B7A04 14400003 */ bnez $v0, .L7F0B7A14 -/* 0EA3F8 7F0B7A08 02C02025 */ move $a0, $s6 -/* 0EA3FC 7F0B7A0C 10000006 */ b .Leu7F0B7A28 -/* 0EA400 7F0B7A10 AE970000 */ sw $s7, ($s4) -.L7F0B7A14: -/* 0EA404 7F0B7A14 0FC2D3C6 */ jal bgRectIntersect -/* 0EA408 7F0B7A18 27A50058 */ addiu $a1, $sp, 0x58 -/* 0EA40C 7F0B7A1C 54400003 */ bnezl $v0, .Leu7F0B7A2C -/* 0EA410 7F0B7A20 922A0001 */ lbu $t2, 1($s1) -/* 0EA414 7F0B7A24 AE970000 */ sw $s7, ($s4) -.Leu7F0B7A28: -/* 0EA418 7F0B7A28 922A0001 */ lbu $t2, 1($s1) -.Leu7F0B7A2C: -/* 0EA41C 7F0B7A2C 000A58C0 */ sll $t3, $t2, 3 -/* 0EA420 7F0B7A30 1000FF3F */ b .L7F0B7730 -/* 0EA424 7F0B7A34 022B8821 */ addu $s1, $s1, $t3 -add_visible_room: -/* 0EA428 7F0B7A38 52400017 */ beql $s2, $zero, .L7F0B7A98 -/* 0EA42C 7F0B7A3C 922F0001 */ lbu $t7, 1($s1) -/* 0EA430 7F0B7A40 8E8C0000 */ lw $t4, ($s4) -/* 0EA434 7F0B7A44 02C02825 */ move $a1, $s6 -/* 0EA438 7F0B7A48 55800013 */ bnezl $t4, .L7F0B7A98 -/* 0EA43C 7F0B7A4C 922F0001 */ lbu $t7, 1($s1) -/* 0EA440 7F0B7A50 0FC2D151 */ jal sub_GAME_7F0B5208 -/* 0EA444 7F0B7A54 8E24000C */ lw $a0, 0xc($s1) -/* 0EA448 7F0B7A58 1040000E */ beqz $v0, .L7F0B7A94 -/* 0EA44C 7F0B7A5C 00002825 */ move $a1, $zero -/* 0EA450 7F0B7A60 8E24000C */ lw $a0, 0xc($s1) -/* 0EA454 7F0B7A64 02C03025 */ move $a2, $s6 -/* 0EA458 7F0B7A68 0FC2CB1F */ jal sub_GAME_7F0B39BC -/* 0EA45C 7F0B7A6C 00003825 */ move $a3, $zero -/* 0EA460 7F0B7A70 3C038007 */ lui $v1, %hi(num_visible_rooms_in_cur_global_vis_packet) # $v1, 0x8007 -/* 0EA464 7F0B7A74 8C639F7C */ lw $v1, %lo(num_visible_rooms_in_cur_global_vis_packet)($v1) -/* 0EA468 7F0B7A78 8E2D000C */ lw $t5, 0xc($s1) -/* 0EA46C 7F0B7A7C 3C018007 */ lui $at, %hi(list_visible_rooms_in_cur_global_vis_packet) -/* 0EA470 7F0B7A80 00230821 */ addu $at, $at, $v1 -/* 0EA474 7F0B7A84 A02D9EF0 */ sb $t5, %lo(list_visible_rooms_in_cur_global_vis_packet)($at) -/* 0EA478 7F0B7A88 3C018007 */ lui $at, %hi(num_visible_rooms_in_cur_global_vis_packet) # $at, 0x8007 -/* 0EA47C 7F0B7A8C 246E0001 */ addiu $t6, $v1, 1 -/* 0EA480 7F0B7A90 AC2E9F7C */ sw $t6, %lo(num_visible_rooms_in_cur_global_vis_packet)($at) -.L7F0B7A94: -/* 0EA484 7F0B7A94 922F0001 */ lbu $t7, 1($s1) -.L7F0B7A98: -/* 0EA488 7F0B7A98 000FC0C0 */ sll $t8, $t7, 3 -/* 0EA48C 7F0B7A9C 1000FF24 */ b .L7F0B7730 -/* 0EA490 7F0B7AA0 02388821 */ addu $s1, $s1, $t8 -disable_room: -/* 0EA494 7F0B7AA4 52400009 */ beql $s2, $zero, .L7F0B7ACC -/* 0EA498 7F0B7AA8 92290001 */ lbu $t1, 1($s1) -/* 0EA49C 7F0B7AAC 8E39000C */ lw $t9, 0xc($s1) -/* 0EA4A0 7F0B7AB0 3C018004 */ lui $at, %hi(g_BgRoomInfo + 0x10 +0x24) -/* 0EA4A4 7F0B7AB4 00194080 */ sll $t0, $t9, 2 -/* 0EA4A8 7F0B7AB8 01194021 */ addu $t0, $t0, $t9 -/* 0EA4AC 7F0B7ABC 00084100 */ sll $t0, $t0, 4 -/* 0EA4B0 7F0B7AC0 00280821 */ addu $at, $at, $t0 -/* 0EA4B4 7F0B7AC4 A035AC98 */ sb $s5, %lo(g_BgRoomInfo + 0x10 +0x24)($at) -/* 0EA4B8 7F0B7AC8 92290001 */ lbu $t1, 1($s1) -.L7F0B7ACC: -/* 0EA4BC 7F0B7ACC 000950C0 */ sll $t2, $t1, 3 -/* 0EA4C0 7F0B7AD0 1000FF17 */ b .L7F0B7730 -/* 0EA4C4 7F0B7AD4 022A8821 */ addu $s1, $s1, $t2 -disable_room_range: -/* 0EA4C8 7F0B7AD8 52400013 */ beql $s2, $zero, .L7F0B7B28 -/* 0EA4CC 7F0B7ADC 922F0001 */ lbu $t7, 1($s1) -/* 0EA4D0 7F0B7AE0 8E22000C */ lw $v0, 0xc($s1) -/* 0EA4D4 7F0B7AE4 8E2B0014 */ lw $t3, 0x14($s1) -/* 0EA4D8 7F0B7AE8 3C0D8004 */ lui $t5, %hi(g_BgRoomInfo) # $t5, 0x8004 -/* 0EA4DC 7F0B7AEC 00026080 */ sll $t4, $v0, 2 -/* 0EA4E0 7F0B7AF0 0162082A */ slt $at, $t3, $v0 -/* 0EA4E4 7F0B7AF4 1420000B */ bnez $at, .L7F0B7B24 -/* 0EA4E8 7F0B7AF8 01826021 */ addu $t4, $t4, $v0 -/* 0EA4EC 7F0B7AFC 000C6100 */ sll $t4, $t4, 4 -/* 0EA4F0 7F0B7B00 25ADAC64 */ addiu $t5, %lo(g_BgRoomInfo) # addiu $t5, $t5, -0x539c -/* 0EA4F4 7F0B7B04 018D1821 */ addu $v1, $t4, $t5 -/* 0EA4F8 7F0B7B08 A0750034 */ sb $s5, 0x34($v1) -.L7F0B7B0C: -/* 0EA4FC 7F0B7B0C 8E2E0014 */ lw $t6, 0x14($s1) -/* 0EA500 7F0B7B10 24420001 */ addiu $v0, $v0, 1 -/* 0EA504 7F0B7B14 24630050 */ addiu $v1, $v1, 0x50 -/* 0EA508 7F0B7B18 01C2082A */ slt $at, $t6, $v0 -/* 0EA50C 7F0B7B1C 5020FFFB */ beql $at, $zero, .L7F0B7B0C -/* 0EA510 7F0B7B20 A0750034 */ sb $s5, 0x34($v1) -.L7F0B7B24: -/* 0EA514 7F0B7B24 922F0001 */ lbu $t7, 1($s1) -.L7F0B7B28: -/* 0EA518 7F0B7B28 000FC0C0 */ sll $t8, $t7, 3 -/* 0EA51C 7F0B7B2C 1000FF00 */ b .L7F0B7730 -/* 0EA520 7F0B7B30 02388821 */ addu $s1, $s1, $t8 -preload_room: -/* 0EA524 7F0B7B34 52400009 */ beql $s2, $zero, .L7F0B7B5C -/* 0EA528 7F0B7B38 92280001 */ lbu $t0, 1($s1) -/* 0EA52C 7F0B7B3C 52600007 */ beql $s3, $zero, .L7F0B7B5C -/* 0EA530 7F0B7B40 92280001 */ lbu $t0, 1($s1) -/* 0EA534 7F0B7B44 0FC2D594 */ jal bgCheckIfRoomModelNeedsLoad -/* 0EA538 7F0B7B48 8E24000C */ lw $a0, 0xc($s1) -/* 0EA53C 7F0B7B4C 2C530001 */ sltiu $s3, $v0, 1 -/* 0EA540 7F0B7B50 327900FF */ andi $t9, $s3, 0xff -/* 0EA544 7F0B7B54 03209825 */ move $s3, $t9 -/* 0EA548 7F0B7B58 92280001 */ lbu $t0, 1($s1) -.L7F0B7B5C: -/* 0EA54C 7F0B7B5C 000848C0 */ sll $t1, $t0, 3 -/* 0EA550 7F0B7B60 1000FEF3 */ b .L7F0B7730 -/* 0EA554 7F0B7B64 02298821 */ addu $s1, $s1, $t1 -preload_room_range: -/* 0EA558 7F0B7B68 52400013 */ beql $s2, $zero, .L7F0B7BB8 -/* 0EA55C 7F0B7B6C 922B0001 */ lbu $t3, 1($s1) -/* 0EA560 7F0B7B70 8E30000C */ lw $s0, 0xc($s1) -/* 0EA564 7F0B7B74 8E230014 */ lw $v1, 0x14($s1) -/* 0EA568 7F0B7B78 0070082A */ slt $at, $v1, $s0 -/* 0EA56C 7F0B7B7C 5420000E */ bnezl $at, .L7F0B7BB8 -/* 0EA570 7F0B7B80 922B0001 */ lbu $t3, 1($s1) -.L7F0B7B84: -/* 0EA574 7F0B7B84 52600008 */ beql $s3, $zero, .L7F0B7BA8 -/* 0EA578 7F0B7B88 26100001 */ addiu $s0, $s0, 1 -/* 0EA57C 7F0B7B8C 0FC2D594 */ jal bgCheckIfRoomModelNeedsLoad -/* 0EA580 7F0B7B90 02002025 */ move $a0, $s0 -/* 0EA584 7F0B7B94 2C530001 */ sltiu $s3, $v0, 1 -/* 0EA588 7F0B7B98 326A00FF */ andi $t2, $s3, 0xff -/* 0EA58C 7F0B7B9C 01409825 */ move $s3, $t2 -/* 0EA590 7F0B7BA0 8E230014 */ lw $v1, 0x14($s1) -/* 0EA594 7F0B7BA4 26100001 */ addiu $s0, $s0, 1 -.L7F0B7BA8: -/* 0EA598 7F0B7BA8 0070082A */ slt $at, $v1, $s0 -/* 0EA59C 7F0B7BAC 1020FFF5 */ beqz $at, .L7F0B7B84 -/* 0EA5A0 7F0B7BB0 00000000 */ nop -/* 0EA5A4 7F0B7BB4 922B0001 */ lbu $t3, 1($s1) -.L7F0B7BB8: -/* 0EA5A8 7F0B7BB8 000B60C0 */ sll $t4, $t3, 3 -/* 0EA5AC 7F0B7BBC 1000FEDC */ b .L7F0B7730 -/* 0EA5B0 7F0B7BC0 022C8821 */ addu $s1, $s1, $t4 -remove_vis: -/* 0EA5B4 7F0B7BC4 52400003 */ beql $s2, $zero, .L7F0B7BD4 -/* 0EA5B8 7F0B7BC8 922D0001 */ lbu $t5, 1($s1) -/* 0EA5BC 7F0B7BCC AE970000 */ sw $s7, ($s4) -/* 0EA5C0 7F0B7BD0 922D0001 */ lbu $t5, 1($s1) -.L7F0B7BD4: -/* 0EA5C4 7F0B7BD4 000D70C0 */ sll $t6, $t5, 3 -/* 0EA5C8 7F0B7BD8 1000FED5 */ b .L7F0B7730 -/* 0EA5CC 7F0B7BDC 022E8821 */ addu $s1, $s1, $t6 -if_statement: -/* 0EA5D0 7F0B7BE0 922F0001 */ lbu $t7, 1($s1) -/* 0EA5D4 7F0B7BE4 02402825 */ move $a1, $s2 -/* 0EA5D8 7F0B7BE8 000FC0C0 */ sll $t8, $t7, 3 -/* 0EA5DC 7F0B7BEC 0FC2DDB1 */ jal parse_global_vis_command_list -/* 0EA5E0 7F0B7BF0 03112021 */ addu $a0, $t8, $s1 -/* 0EA5E4 7F0B7BF4 90590001 */ lbu $t9, 1($v0) -/* 0EA5E8 7F0B7BF8 001940C0 */ sll $t0, $t9, 3 -/* 0EA5EC 7F0B7BFC 1000FECC */ b .L7F0B7730 -/* 0EA5F0 7F0B7C00 00488821 */ addu $s1, $v0, $t0 -endif_continue_exec: -/* 0EA5F4 7F0B7C04 92290001 */ lbu $t1, 1($s1) -/* 0EA5F8 7F0B7C08 3C018007 */ lui $at, %hi(dword_CODE_bss_80081600 + 0x10) # $at, 0x8007 -/* 0EA5FC 7F0B7C0C AC20BFB8 */ sw $zero, %lo(dword_CODE_bss_80081600 + 0x10)($at) -/* 0EA600 7F0B7C10 000950C0 */ sll $t2, $t1, 3 -/* 0EA604 7F0B7C14 10000023 */ b .L7F0B7CA4 -/* 0EA608 7F0B7C18 022A1021 */ addu $v0, $s1, $t2 -dont_exec_commands_even_on_return: -/* 0EA60C 7F0B7C1C 922B0001 */ lbu $t3, 1($s1) -/* 0EA610 7F0B7C20 0012102B */ sltu $v0, $zero, $s2 -/* 0EA614 7F0B7C24 00009025 */ move $s2, $zero -/* 0EA618 7F0B7C28 000B60C0 */ sll $t4, $t3, 3 -/* 0EA61C 7F0B7C2C 1040FEC0 */ beqz $v0, .L7F0B7730 -/* 0EA620 7F0B7C30 022C8821 */ addu $s1, $s1, $t4 -/* 0EA624 7F0B7C34 3C018007 */ lui $at, %hi(dword_CODE_bss_80081600 + 0x10) # $at, 0x8007 -/* 0EA628 7F0B7C38 1000FEBD */ b .L7F0B7730 -/* 0EA62C 7F0B7C3C AC37BFB8 */ sw $s7, %lo(dword_CODE_bss_80081600 + 0x10)($at) -if_statement_pull_from_stack: -/* 0EA630 7F0B7C40 0FC2DD98 */ jal bgStackPop -/* 0EA634 7F0B7C44 00000000 */ nop -/* 0EA638 7F0B7C48 922D0001 */ lbu $t5, 1($s1) -/* 0EA63C 7F0B7C4C 00522824 */ and $a1, $v0, $s2 -/* 0EA640 7F0B7C50 000D70C0 */ sll $t6, $t5, 3 -/* 0EA644 7F0B7C54 0FC2DDB1 */ jal parse_global_vis_command_list -/* 0EA648 7F0B7C58 01D12021 */ addu $a0, $t6, $s1 -/* 0EA64C 7F0B7C5C 3C0F8007 */ lui $t7, %hi(dword_CODE_bss_80081600 + 0x10) # $t7, 0x8007 -/* 0EA650 7F0B7C60 8DEFBFB8 */ lw $t7, %lo(dword_CODE_bss_80081600 + 0x10)($t7) -/* 0EA654 7F0B7C64 00408825 */ move $s1, $v0 -/* 0EA658 7F0B7C68 51E0FEB2 */ beql $t7, $zero, .L7F0B7734 -/* 0EA65C 7F0B7C6C 92240000 */ lbu $a0, ($s1) -/* 0EA660 7F0B7C70 1000FEAF */ b .L7F0B7730 -/* 0EA664 7F0B7C74 00009025 */ move $s2, $zero -toggle_exec_vs_ro: -/* 0EA668 7F0B7C78 92390001 */ lbu $t9, 1($s1) -/* 0EA66C 7F0B7C7C 3A580001 */ xori $t8, $s2, 1 -/* 0EA670 7F0B7C80 03009025 */ move $s2, $t8 -/* 0EA674 7F0B7C84 001940C0 */ sll $t0, $t9, 3 -/* 0EA678 7F0B7C88 1000FEA9 */ b .L7F0B7730 -/* 0EA67C 7F0B7C8C 02288821 */ addu $s1, $s1, $t0 -endif: -/* 0EA680 7F0B7C90 92290001 */ lbu $t1, 1($s1) -/* 0EA684 7F0B7C94 000950C0 */ sll $t2, $t1, 3 -/* 0EA688 7F0B7C98 10000002 */ b .L7F0B7CA4 -/* 0EA68C 7F0B7C9C 022A1021 */ addu $v0, $s1, $t2 -invalid_type_terminate: -.L7F0B7CA0: -/* 0EA690 7F0B7CA0 02201025 */ move $v0, $s1 -.L7F0B7CA4: -/* 0EA694 7F0B7CA4 8FBF003C */ lw $ra, 0x3c($sp) -/* 0EA698 7F0B7CA8 8FB00018 */ lw $s0, 0x18($sp) -/* 0EA69C 7F0B7CAC 8FB1001C */ lw $s1, 0x1c($sp) -/* 0EA6A0 7F0B7CB0 8FB20020 */ lw $s2, 0x20($sp) -/* 0EA6A4 7F0B7CB4 8FB30024 */ lw $s3, 0x24($sp) -/* 0EA6A8 7F0B7CB8 8FB40028 */ lw $s4, 0x28($sp) -/* 0EA6AC 7F0B7CBC 8FB5002C */ lw $s5, 0x2c($sp) -/* 0EA6B0 7F0B7CC0 8FB60030 */ lw $s6, 0x30($sp) -/* 0EA6B4 7F0B7CC4 8FB70034 */ lw $s7, 0x34($sp) -/* 0EA6B8 7F0B7CC8 8FBE0038 */ lw $fp, 0x38($sp) -/* 0EA6BC 7F0B7CCC 03E00008 */ jr $ra -/* 0EA6C0 7F0B7CD0 27BD0080 */ addiu $sp, $sp, 0x80 -) -#endif -#endif #define RS_STOP 0 // Something about portals. Void* are structs. -void *sub_GAME_7F0B8A24(s32 *pc) { +void *sub_GAME_7F0B8A24(s32 *pc) +{ current_visibility = 0; if (!pc) @@ -9838,459 +4310,129 @@ void *sub_GAME_7F0B8A24(s32 *pc) { } +/** + * Address: 7F0B8A6C + */ +void bgDetermineVisibleRooms(void) +{ + f32 screenbounds[4]; + s32 var_s0; + s32 temp_a0; +#if defined(LEFTOVERDEBUG) + s32 sp44; +#endif + s32 temp_v1; + s32 i; + bgUpdateCurrentPlayerScreenMinMax(); + screenbounds[0] = g_CurrentPlayer->screensize.min.x; + screenbounds[1] = g_CurrentPlayer->screensize.min.y; + screenbounds[2] = g_CurrentPlayer->screensize.max.x; + screenbounds[3] = g_CurrentPlayer->screensize.max.y; -#ifdef NONMATCHING -void sub_GAME_7F0B8A6C(void) { + bgResetPortalVisitCounts(); -} -#else + for (i = 0; i < MAXROOMCOUNT; i++) + { + g_BgRoomInfo[i].room_rendered = 0; + g_BgRoomInfo[i].room_neighbor_to_rendered = 0; + g_BgRoomInfo[i].room_loaded_mask = 0; + } + + for (i = 0; i < PORTMAX; i++) + { + D_800442FC[i] = 0; + } + + D_80044858 = (s32) (D_80044858 + 1) % 10; #if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B8A6C -/* 0ED59C 7F0B8A6C 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0ED5A0 7F0B8A70 AFBF0024 */ sw $ra, 0x24($sp) -/* 0ED5A4 7F0B8A74 AFB10020 */ sw $s1, 0x20($sp) -/* 0ED5A8 7F0B8A78 0FC2E423 */ jal bgUpdateCurrentPlayerScreenMinMax -/* 0ED5AC 7F0B8A7C AFB0001C */ sw $s0, 0x1c($sp) -/* 0ED5B0 7F0B8A80 3C118008 */ lui $s1, %hi(g_CurrentPlayer) -/* 0ED5B4 7F0B8A84 2631A0B0 */ addiu $s1, %lo(g_CurrentPlayer) # addiu $s1, $s1, -0x5f50 -/* 0ED5B8 7F0B8A88 8E220000 */ lw $v0, ($s1) -/* 0ED5BC 7F0B8A8C C4441118 */ lwc1 $f4, 0x1118($v0) -/* 0ED5C0 7F0B8A90 E7A40050 */ swc1 $f4, 0x50($sp) -/* 0ED5C4 7F0B8A94 C446111C */ lwc1 $f6, 0x111c($v0) -/* 0ED5C8 7F0B8A98 E7A60054 */ swc1 $f6, 0x54($sp) -/* 0ED5CC 7F0B8A9C C4481120 */ lwc1 $f8, 0x1120($v0) -/* 0ED5D0 7F0B8AA0 E7A80058 */ swc1 $f8, 0x58($sp) -/* 0ED5D4 7F0B8AA4 C44A1124 */ lwc1 $f10, 0x1124($v0) -/* 0ED5D8 7F0B8AA8 0FC2CEF1 */ jal sub_GAME_7F0B3BC4 -/* 0ED5DC 7F0B8AAC E7AA005C */ swc1 $f10, 0x5c($sp) -/* 0ED5E0 7F0B8AB0 3C028004 */ lui $v0, %hi(g_BgRoomInfo) -/* 0ED5E4 7F0B8AB4 3C038004 */ lui $v1, %hi(g_MaxNumRooms) -/* 0ED5E8 7F0B8AB8 246342F4 */ addiu $v1, %lo(g_MaxNumRooms) # addiu $v1, $v1, 0x42f4 -/* 0ED5EC 7F0B8ABC 24421414 */ addiu $v0, %lo(g_BgRoomInfo) # addiu $v0, $v0, 0x1414 -.L7F0B8AC0: -/* 0ED5F0 7F0B8AC0 24420050 */ addiu $v0, $v0, 0x50 -/* 0ED5F4 7F0B8AC4 0043082B */ sltu $at, $v0, $v1 -/* 0ED5F8 7F0B8AC8 A040FFB0 */ sb $zero, -0x50($v0) -/* 0ED5FC 7F0B8ACC A040FFB1 */ sb $zero, -0x4f($v0) -/* 0ED600 7F0B8AD0 1420FFFB */ bnez $at, .L7F0B8AC0 -/* 0ED604 7F0B8AD4 A040FFE4 */ sb $zero, -0x1c($v0) -/* 0ED608 7F0B8AD8 3C028004 */ lui $v0, %hi(D_800442FC) -/* 0ED60C 7F0B8ADC 3C038004 */ lui $v1, %hi(D_800443C4) -/* 0ED610 7F0B8AE0 246343C4 */ addiu $v1, %lo(D_800443C4) # addiu $v1, $v1, 0x43c4 -/* 0ED614 7F0B8AE4 244242FC */ addiu $v0, %lo(D_800442FC) # addiu $v0, $v0, 0x42fc -.L7F0B8AE8: -/* 0ED618 7F0B8AE8 24420004 */ addiu $v0, $v0, 4 -/* 0ED61C 7F0B8AEC A040FFFD */ sb $zero, -3($v0) -/* 0ED620 7F0B8AF0 A040FFFE */ sb $zero, -2($v0) -/* 0ED624 7F0B8AF4 A040FFFF */ sb $zero, -1($v0) -/* 0ED628 7F0B8AF8 1443FFFB */ bne $v0, $v1, .L7F0B8AE8 -/* 0ED62C 7F0B8AFC A040FFFC */ sb $zero, -4($v0) -/* 0ED630 7F0B8B00 3C028004 */ lui $v0, %hi(D_80044858) -/* 0ED634 7F0B8B04 24424858 */ addiu $v0, %lo(D_80044858) # addiu $v0, $v0, 0x4858 -/* 0ED638 7F0B8B08 8C4E0000 */ lw $t6, ($v0) -/* 0ED63C 7F0B8B0C 2401000A */ li $at, 10 -/* 0ED640 7F0B8B10 25CF0001 */ addiu $t7, $t6, 1 -/* 0ED644 7F0B8B14 01E1001A */ div $zero, $t7, $at -/* 0ED648 7F0B8B18 0000C010 */ mfhi $t8 -/* 0ED64C 7F0B8B1C AC580000 */ sw $t8, ($v0) -/* 0ED650 7F0B8B20 3C018008 */ lui $at, %hi(dword_CODE_bss_8007FF98) -/* 0ED654 7F0B8B24 AC20FF98 */ sw $zero, %lo(dword_CODE_bss_8007FF98)($at) -/* 0ED658 7F0B8B28 3C018004 */ lui $at, %hi(D_80044898) -/* 0ED65C 7F0B8B2C 0FC2DF65 */ jal sub_GAME_7F0B7D94 -/* 0ED660 7F0B8B30 AC204898 */ sw $zero, %lo(D_80044898)($at) -/* 0ED664 7F0B8B34 0FC2D45A */ jal sub_GAME_7F0B5168 -/* 0ED668 7F0B8B38 00000000 */ nop -/* 0ED66C 7F0B8B3C 3C048008 */ lui $a0, %hi(dword_CODE_bss_8007FF90) -/* 0ED670 7F0B8B40 0FC2E289 */ jal sub_GAME_7F0B8A24 -/* 0ED674 7F0B8B44 8C84FF90 */ lw $a0, %lo(dword_CODE_bss_8007FF90)($a0) -/* 0ED678 7F0B8B48 3C028004 */ lui $v0, %hi(levelentry_index) -/* 0ED67C 7F0B8B4C 8C421400 */ lw $v0, %lo(levelentry_index)($v0) -/* 0ED680 7F0B8B50 24030015 */ li $v1, 21 -/* 0ED684 7F0B8B54 3C198008 */ lui $t9, %hi(g_BgPortals) -/* 0ED688 7F0B8B58 10620005 */ beq $v1, $v0, .L7F0B8B70 -/* 0ED68C 7F0B8B5C 00000000 */ nop -/* 0ED690 7F0B8B60 8F39FF80 */ lw $t9, %lo(g_BgPortals)($t9) -/* 0ED694 7F0B8B64 8F2A0000 */ lw $t2, ($t9) -/* 0ED698 7F0B8B68 15400023 */ bnez $t2, .L7F0B8BF8 -/* 0ED69C 7F0B8B6C 00000000 */ nop -.L7F0B8B70: -/* 0ED6A0 7F0B8B70 14620006 */ bne $v1, $v0, .L7F0B8B8C -/* 0ED6A4 7F0B8B74 24040009 */ li $a0, 9 -/* 0ED6A8 7F0B8B78 8E260000 */ lw $a2, ($s1) -/* 0ED6AC 7F0B8B7C 00002825 */ move $a1, $zero -/* 0ED6B0 7F0B8B80 24070001 */ li $a3, 1 -/* 0ED6B4 7F0B8B84 0FC2CE6F */ jal sub_GAME_7F0B39BC -/* 0ED6B8 7F0B8B88 24C61118 */ addiu $a2, $a2, 0x1118 -.L7F0B8B8C: -/* 0ED6BC 7F0B8B8C 3C0B8004 */ lui $t3, %hi(g_MaxNumRooms) -/* 0ED6C0 7F0B8B90 8D6B42F4 */ lw $t3, %lo(g_MaxNumRooms)($t3) -/* 0ED6C4 7F0B8B94 24100001 */ li $s0, 1 -/* 0ED6C8 7F0B8B98 29610002 */ slti $at, $t3, 2 -/* 0ED6CC 7F0B8B9C 14200012 */ bnez $at, .L7F0B8BE8 -/* 0ED6D0 7F0B8BA0 00000000 */ nop -/* 0ED6D4 7F0B8BA4 8E250000 */ lw $a1, ($s1) -.L7F0B8BA8: -/* 0ED6D8 7F0B8BA8 02002025 */ move $a0, $s0 -/* 0ED6DC 7F0B8BAC 0FC2D482 */ jal sub_GAME_7F0B5208 -/* 0ED6E0 7F0B8BB0 24A51118 */ addiu $a1, $a1, 0x1118 -/* 0ED6E4 7F0B8BB4 10400006 */ beqz $v0, .L7F0B8BD0 -/* 0ED6E8 7F0B8BB8 02002025 */ move $a0, $s0 -/* 0ED6EC 7F0B8BBC 8E260000 */ lw $a2, ($s1) -/* 0ED6F0 7F0B8BC0 00002825 */ move $a1, $zero -/* 0ED6F4 7F0B8BC4 24070001 */ li $a3, 1 -/* 0ED6F8 7F0B8BC8 0FC2CE6F */ jal sub_GAME_7F0B39BC -/* 0ED6FC 7F0B8BCC 24C61118 */ addiu $a2, $a2, 0x1118 -.L7F0B8BD0: -/* 0ED700 7F0B8BD0 3C0C8004 */ lui $t4, %hi(g_MaxNumRooms) -/* 0ED704 7F0B8BD4 8D8C42F4 */ lw $t4, %lo(g_MaxNumRooms)($t4) -/* 0ED708 7F0B8BD8 26100001 */ addiu $s0, $s0, 1 -/* 0ED70C 7F0B8BDC 020C082A */ slt $at, $s0, $t4 -/* 0ED710 7F0B8BE0 5420FFF1 */ bnezl $at, .L7F0B8BA8 -/* 0ED714 7F0B8BE4 8E250000 */ lw $a1, ($s1) -.L7F0B8BE8: -/* 0ED718 7F0B8BE8 3C048008 */ lui $a0, %hi(g_BgPortals) -/* 0ED71C 7F0B8BEC 8C84FF80 */ lw $a0, %lo(g_BgPortals)($a0) -/* 0ED720 7F0B8BF0 10000039 */ b .L7F0B8CD8 -/* 0ED724 7F0B8BF4 8C820000 */ lw $v0, ($a0) -.L7F0B8BF8: -/* 0ED728 7F0B8BF8 14620006 */ bne $v1, $v0, .L7F0B8C14 -/* 0ED72C 7F0B8BFC 24040009 */ li $a0, 9 -/* 0ED730 7F0B8C00 8E260000 */ lw $a2, ($s1) -/* 0ED734 7F0B8C04 00002825 */ move $a1, $zero -/* 0ED738 7F0B8C08 24070001 */ li $a3, 1 -/* 0ED73C 7F0B8C0C 0FC2CE6F */ jal sub_GAME_7F0B39BC -/* 0ED740 7F0B8C10 24C61118 */ addiu $a2, $a2, 0x1118 -.L7F0B8C14: -/* 0ED744 7F0B8C14 8E260000 */ lw $a2, ($s1) -/* 0ED748 7F0B8C18 3C048004 */ lui $a0, %hi(g_BgCurrentRoom) -/* 0ED74C 7F0B8C1C 8C844838 */ lw $a0, %lo(g_BgCurrentRoom)($a0) -/* 0ED750 7F0B8C20 00002825 */ move $a1, $zero -/* 0ED754 7F0B8C24 24070001 */ li $a3, 1 -/* 0ED758 7F0B8C28 0FC2CE6F */ jal sub_GAME_7F0B39BC -/* 0ED75C 7F0B8C2C 24C61118 */ addiu $a2, $a2, 0x1118 -/* 0ED760 7F0B8C30 3C048008 */ lui $a0, %hi(g_BgPortals) -/* 0ED764 7F0B8C34 8C84FF80 */ lw $a0, %lo(g_BgPortals)($a0) -/* 0ED768 7F0B8C38 00008025 */ move $s0, $zero -/* 0ED76C 7F0B8C3C 00001825 */ move $v1, $zero -/* 0ED770 7F0B8C40 8C8D0000 */ lw $t5, ($a0) -/* 0ED774 7F0B8C44 00801025 */ move $v0, $a0 -/* 0ED778 7F0B8C48 11A00016 */ beqz $t5, .L7F0B8CA4 -.L7F0B8C4C: -/* 0ED77C 7F0B8C4C 3C058004 */ lui $a1, %hi(g_BgCurrentRoom) -/* 0ED780 7F0B8C50 8CA54838 */ lw $a1, %lo(g_BgCurrentRoom)($a1) -/* 0ED784 7F0B8C54 904E0004 */ lbu $t6, 4($v0) -/* 0ED788 7F0B8C58 00002025 */ move $a0, $zero -/* 0ED78C 7F0B8C5C 02003025 */ move $a2, $s0 -/* 0ED790 7F0B8C60 10AE0003 */ beq $a1, $t6, .L7F0B8C70 -/* 0ED794 7F0B8C64 24070001 */ li $a3, 1 -/* 0ED798 7F0B8C68 904F0005 */ lbu $t7, 5($v0) -/* 0ED79C 7F0B8C6C 14AF0008 */ bne $a1, $t7, .L7F0B8C90 -.L7F0B8C70: -/* 0ED7A0 7F0B8C70 27B80050 */ addiu $t8, $sp, 0x50 -/* 0ED7A4 7F0B8C74 AFB80010 */ sw $t8, 0x10($sp) -/* 0ED7A8 7F0B8C78 0FC2DF79 */ jal sub_GAME_7F0B7DE4 -/* 0ED7AC 7F0B8C7C AFA30034 */ sw $v1, 0x34($sp) -/* 0ED7B0 7F0B8C80 3C198008 */ lui $t9, %hi(g_BgPortals) -/* 0ED7B4 7F0B8C84 8F39FF80 */ lw $t9, %lo(g_BgPortals)($t9) -/* 0ED7B8 7F0B8C88 8FA30034 */ lw $v1, 0x34($sp) -/* 0ED7BC 7F0B8C8C 03231021 */ addu $v0, $t9, $v1 -.L7F0B8C90: -/* 0ED7C0 7F0B8C90 8C4A0008 */ lw $t2, 8($v0) -/* 0ED7C4 7F0B8C94 26100001 */ addiu $s0, $s0, 1 -/* 0ED7C8 7F0B8C98 24630008 */ addiu $v1, $v1, 8 -/* 0ED7CC 7F0B8C9C 1540FFEB */ bnez $t2, .L7F0B8C4C -/* 0ED7D0 7F0B8CA0 24420008 */ addiu $v0, $v0, 8 -.L7F0B8CA4: -/* 0ED7D4 7F0B8CA4 27B00044 */ addiu $s0, $sp, 0x44 -/* 0ED7D8 7F0B8CA8 AFA00044 */ sw $zero, 0x44($sp) -/* 0ED7DC 7F0B8CAC 0FC2DFB9 */ jal sub_GAME_7F0B7EE4 -/* 0ED7E0 7F0B8CB0 02002025 */ move $a0, $s0 -/* 0ED7E4 7F0B8CB4 10400005 */ beqz $v0, .L7F0B8CCC -/* 0ED7E8 7F0B8CB8 00000000 */ nop -.L7F0B8CBC: -/* 0ED7EC 7F0B8CBC 0FC2DFB9 */ jal sub_GAME_7F0B7EE4 -/* 0ED7F0 7F0B8CC0 02002025 */ move $a0, $s0 -/* 0ED7F4 7F0B8CC4 1440FFFD */ bnez $v0, .L7F0B8CBC -/* 0ED7F8 7F0B8CC8 00000000 */ nop -.L7F0B8CCC: -/* 0ED7FC 7F0B8CCC 3C048008 */ lui $a0, %hi(g_BgPortals) -/* 0ED800 7F0B8CD0 8C84FF80 */ lw $a0, %lo(g_BgPortals)($a0) -/* 0ED804 7F0B8CD4 8C820000 */ lw $v0, ($a0) -.L7F0B8CD8: -/* 0ED808 7F0B8CD8 10400022 */ beqz $v0, .L7F0B8D64 -/* 0ED80C 7F0B8CDC 24090001 */ li $t1, 1 -/* 0ED810 7F0B8CE0 3C078004 */ lui $a3, %hi(g_BgRoomInfo) -/* 0ED814 7F0B8CE4 24E71414 */ addiu $a3, %lo(g_BgRoomInfo) # addiu $a3, $a3, 0x1414 -/* 0ED818 7F0B8CE8 00801025 */ move $v0, $a0 -/* 0ED81C 7F0B8CEC 24080050 */ li $t0, 80 -/* 0ED820 7F0B8CF0 90430004 */ lbu $v1, 4($v0) -.L7F0B8CF4: -/* 0ED824 7F0B8CF4 90440005 */ lbu $a0, 5($v0) -/* 0ED828 7F0B8CF8 00680019 */ multu $v1, $t0 -/* 0ED82C 7F0B8CFC 00005812 */ mflo $t3 -/* 0ED830 7F0B8D00 00EB2821 */ addu $a1, $a3, $t3 -/* 0ED834 7F0B8D04 90A60000 */ lbu $a2, ($a1) -/* 0ED838 7F0B8D08 10C00009 */ beqz $a2, .L7F0B8D30 -/* 0ED83C 7F0B8D0C 00000000 */ nop -/* 0ED840 7F0B8D10 00880019 */ multu $a0, $t0 -/* 0ED844 7F0B8D14 00006012 */ mflo $t4 -/* 0ED848 7F0B8D18 00EC1821 */ addu $v1, $a3, $t4 -/* 0ED84C 7F0B8D1C 906D0000 */ lbu $t5, ($v1) -/* 0ED850 7F0B8D20 15A00003 */ bnez $t5, .L7F0B8D30 -/* 0ED854 7F0B8D24 00000000 */ nop -/* 0ED858 7F0B8D28 1000000A */ b .L7F0B8D54 -/* 0ED85C 7F0B8D2C A0690001 */ sb $t1, 1($v1) -.L7F0B8D30: -/* 0ED860 7F0B8D30 00880019 */ multu $a0, $t0 -/* 0ED864 7F0B8D34 00007012 */ mflo $t6 -/* 0ED868 7F0B8D38 00EE7821 */ addu $t7, $a3, $t6 -/* 0ED86C 7F0B8D3C 91F80000 */ lbu $t8, ($t7) -/* 0ED870 7F0B8D40 53000005 */ beql $t8, $zero, .L7F0B8D58 -/* 0ED874 7F0B8D44 8C590008 */ lw $t9, 8($v0) -/* 0ED878 7F0B8D48 54C00003 */ bnezl $a2, .L7F0B8D58 -/* 0ED87C 7F0B8D4C 8C590008 */ lw $t9, 8($v0) -/* 0ED880 7F0B8D50 A0A90001 */ sb $t1, 1($a1) -.L7F0B8D54: -/* 0ED884 7F0B8D54 8C590008 */ lw $t9, 8($v0) -.L7F0B8D58: -/* 0ED888 7F0B8D58 24420008 */ addiu $v0, $v0, 8 -/* 0ED88C 7F0B8D5C 5720FFE5 */ bnezl $t9, .L7F0B8CF4 -/* 0ED890 7F0B8D60 90430004 */ lbu $v1, 4($v0) -.L7F0B8D64: -/* 0ED894 7F0B8D64 8FBF0024 */ lw $ra, 0x24($sp) -/* 0ED898 7F0B8D68 8FB0001C */ lw $s0, 0x1c($sp) -/* 0ED89C 7F0B8D6C 8FB10020 */ lw $s1, 0x20($sp) -/* 0ED8A0 7F0B8D70 03E00008 */ jr $ra -/* 0ED8A4 7F0B8D74 27BD0060 */ addiu $sp, $sp, 0x60 -) + dword_CODE_bss_8007FF98 = 0; +#else + *(s32 *) &dword_CODE_bss_8007FFA0[120] = 0; #endif + D_80044898 = 0; -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B8A6C -/* 0EA70C 7F0B7D1C 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 0EA710 7F0B7D20 AFBF001C */ sw $ra, 0x1c($sp) -/* 0EA714 7F0B7D24 AFB10018 */ sw $s1, 0x18($sp) -/* 0EA718 7F0B7D28 0FC2E0CA */ jal bgUpdateCurrentPlayerScreenMinMax -/* 0EA71C 7F0B7D2C AFB00014 */ sw $s0, 0x14($sp) -/* 0EA720 7F0B7D30 3C118007 */ lui $s1, %hi(g_CurrentPlayer) # $s1, 0x8007 -/* 0EA724 7F0B7D34 26318BC0 */ addiu $s1, %lo(g_CurrentPlayer) # addiu $s1, $s1, -0x7440 -/* 0EA728 7F0B7D38 8E220000 */ lw $v0, ($s1) -/* 0EA72C 7F0B7D3C C4441110 */ lwc1 $f4, 0x1110($v0) -/* 0EA730 7F0B7D40 E7A40040 */ swc1 $f4, 0x40($sp) -/* 0EA734 7F0B7D44 C4461114 */ lwc1 $f6, 0x1114($v0) -/* 0EA738 7F0B7D48 E7A60044 */ swc1 $f6, 0x44($sp) -/* 0EA73C 7F0B7D4C C4481118 */ lwc1 $f8, 0x1118($v0) -/* 0EA740 7F0B7D50 E7A80048 */ swc1 $f8, 0x48($sp) -/* 0EA744 7F0B7D54 C44A111C */ lwc1 $f10, 0x111c($v0) -/* 0EA748 7F0B7D58 0FC2CBB3 */ jal sub_GAME_7F0B3BC4 -/* 0EA74C 7F0B7D5C E7AA004C */ swc1 $f10, 0x4c($sp) -/* 0EA750 7F0B7D60 3C028004 */ lui $v0, %hi(g_BgRoomInfo) # $v0, 0x8004 -/* 0EA754 7F0B7D64 3C038004 */ lui $v1, %hi(g_MaxNumRooms) # $v1, 0x8004 -/* 0EA758 7F0B7D68 2463D7D4 */ addiu $v1, %lo(g_MaxNumRooms) # addiu $v1, $v1, -0x282c -/* 0EA75C 7F0B7D6C 2442AC64 */ addiu $v0, %lo(g_BgRoomInfo) # addiu $v0, $v0, -0x539c -.L7F0B7D70: -/* 0EA760 7F0B7D70 24420050 */ addiu $v0, $v0, 0x50 -/* 0EA764 7F0B7D74 0043082B */ sltu $at, $v0, $v1 -/* 0EA768 7F0B7D78 A040FFB0 */ sb $zero, -0x50($v0) -/* 0EA76C 7F0B7D7C A040FFB1 */ sb $zero, -0x4f($v0) -/* 0EA770 7F0B7D80 1420FFFB */ bnez $at, .L7F0B7D70 -/* 0EA774 7F0B7D84 A040FFE4 */ sb $zero, -0x1c($v0) -/* 0EA778 7F0B7D88 3C028004 */ lui $v0, %hi(D_800442FC) # $v0, 0x8004 -/* 0EA77C 7F0B7D8C 3C038004 */ lui $v1, %hi(D_800443C4) # $v1, 0x8004 -/* 0EA780 7F0B7D90 2463D8A4 */ addiu $v1, %lo(D_800443C4) # addiu $v1, $v1, -0x275c -/* 0EA784 7F0B7D94 2442D7DC */ addiu $v0, %lo(D_800442FC) # addiu $v0, $v0, -0x2824 -.L7F0B7D98: -/* 0EA788 7F0B7D98 24420004 */ addiu $v0, $v0, 4 -/* 0EA78C 7F0B7D9C A040FFFD */ sb $zero, -3($v0) -/* 0EA790 7F0B7DA0 A040FFFE */ sb $zero, -2($v0) -/* 0EA794 7F0B7DA4 A040FFFF */ sb $zero, -1($v0) -/* 0EA798 7F0B7DA8 1443FFFB */ bne $v0, $v1, .L7F0B7D98 -/* 0EA79C 7F0B7DAC A040FFFC */ sb $zero, -4($v0) -/* 0EA7A0 7F0B7DB0 3C028004 */ lui $v0, %hi(D_80044858) # $v0, 0x8004 -/* 0EA7A4 7F0B7DB4 2442DD40 */ addiu $v0, %lo(D_80044858) # addiu $v0, $v0, -0x22c0 -/* 0EA7A8 7F0B7DB8 8C4E0000 */ lw $t6, ($v0) -/* 0EA7AC 7F0B7DBC 2401000A */ li $at, 10 -/* 0EA7B0 7F0B7DC0 25CF0001 */ addiu $t7, $t6, 1 -/* 0EA7B4 7F0B7DC4 01E1001A */ div $zero, $t7, $at -/* 0EA7B8 7F0B7DC8 0000C010 */ mfhi $t8 -/* 0EA7BC 7F0B7DCC AC580000 */ sw $t8, ($v0) -/* 0EA7C0 7F0B7DD0 3C018007 */ lui $at, %hi(dword_CODE_bss_8007FFA0 + 0xb40) # $at, 0x8007 -/* 0EA7C4 7F0B7DD4 AC20BF20 */ sw $zero, %lo(dword_CODE_bss_8007FFA0 + 0xb40)($at) -/* 0EA7C8 7F0B7DD8 3C018004 */ lui $at, %hi(D_80044898) # $at, 0x8004 -/* 0EA7CC 7F0B7DDC 0FC2DC34 */ jal sub_GAME_7F0B7D94 -/* 0EA7D0 7F0B7DE0 AC20DD80 */ sw $zero, %lo(D_80044898)($at) -/* 0EA7D4 7F0B7DE4 0FC2D129 */ jal sub_GAME_7F0B5168 -/* 0EA7D8 7F0B7DE8 00000000 */ nop -/* 0EA7DC 7F0B7DEC 3C048007 */ lui $a0, %hi(dword_CODE_bss_8007FF90) # $a0, 0x8007 -/* 0EA7E0 7F0B7DF0 0FC2DF35 */ jal sub_GAME_7F0B8A24 -/* 0EA7E4 7F0B7DF4 8C84B3D8 */ lw $a0, %lo(dword_CODE_bss_8007FF90)($a0) -/* 0EA7E8 7F0B7DF8 3C028004 */ lui $v0, %hi(levelentry_index) # $v0, 0x8004 -/* 0EA7EC 7F0B7DFC 8C42AC50 */ lw $v0, %lo(levelentry_index)($v0) -/* 0EA7F0 7F0B7E00 24030015 */ li $v1, 21 -/* 0EA7F4 7F0B7E04 3C198007 */ lui $t9, %hi(g_BgPortals) # $t9, 0x8007 -/* 0EA7F8 7F0B7E08 10620005 */ beq $v1, $v0, .L7F0B7E20 -/* 0EA7FC 7F0B7E0C 00000000 */ nop -/* 0EA800 7F0B7E10 8F39B3C8 */ lw $t9, %lo(g_BgPortals)($t9) -/* 0EA804 7F0B7E14 8F2A0000 */ lw $t2, ($t9) -/* 0EA808 7F0B7E18 15400021 */ bnez $t2, .L7F0B7EA0 -/* 0EA80C 7F0B7E1C 00000000 */ nop -.L7F0B7E20: -/* 0EA810 7F0B7E20 14620006 */ bne $v1, $v0, .L7F0B7E3C -/* 0EA814 7F0B7E24 24040009 */ li $a0, 9 -/* 0EA818 7F0B7E28 8E260000 */ lw $a2, ($s1) -/* 0EA81C 7F0B7E2C 00002825 */ move $a1, $zero -/* 0EA820 7F0B7E30 24070001 */ li $a3, 1 -/* 0EA824 7F0B7E34 0FC2CB1F */ jal sub_GAME_7F0B39BC -/* 0EA828 7F0B7E38 24C61110 */ addiu $a2, $a2, 0x1110 -.L7F0B7E3C: -/* 0EA82C 7F0B7E3C 3C0B8004 */ lui $t3, %hi(g_MaxNumRooms) # $t3, 0x8004 -/* 0EA830 7F0B7E40 8D6BD7D4 */ lw $t3, %lo(g_MaxNumRooms)($t3) -/* 0EA834 7F0B7E44 24100001 */ li $s0, 1 -/* 0EA838 7F0B7E48 29610002 */ slti $at, $t3, 2 -/* 0EA83C 7F0B7E4C 14200012 */ bnez $at, .L7F0B7E98 -/* 0EA840 7F0B7E50 00000000 */ nop -/* 0EA844 7F0B7E54 8E250000 */ lw $a1, ($s1) -.L7F0B7E58: -/* 0EA848 7F0B7E58 02002025 */ move $a0, $s0 -/* 0EA84C 7F0B7E5C 0FC2D151 */ jal sub_GAME_7F0B5208 -/* 0EA850 7F0B7E60 24A51110 */ addiu $a1, $a1, 0x1110 -/* 0EA854 7F0B7E64 10400006 */ beqz $v0, .L7F0B7E80 -/* 0EA858 7F0B7E68 02002025 */ move $a0, $s0 -/* 0EA85C 7F0B7E6C 8E260000 */ lw $a2, ($s1) -/* 0EA860 7F0B7E70 00002825 */ move $a1, $zero -/* 0EA864 7F0B7E74 24070001 */ li $a3, 1 -/* 0EA868 7F0B7E78 0FC2CB1F */ jal sub_GAME_7F0B39BC -/* 0EA86C 7F0B7E7C 24C61110 */ addiu $a2, $a2, 0x1110 -.L7F0B7E80: -/* 0EA870 7F0B7E80 3C0C8004 */ lui $t4, %hi(g_MaxNumRooms) # $t4, 0x8004 -/* 0EA874 7F0B7E84 8D8CD7D4 */ lw $t4, %lo(g_MaxNumRooms)($t4) -/* 0EA878 7F0B7E88 26100001 */ addiu $s0, $s0, 1 -/* 0EA87C 7F0B7E8C 020C082A */ slt $at, $s0, $t4 -/* 0EA880 7F0B7E90 5420FFF1 */ bnezl $at, .L7F0B7E58 -/* 0EA884 7F0B7E94 8E250000 */ lw $a1, ($s1) -.L7F0B7E98: -/* 0EA888 7F0B7E98 10000033 */ b .L7F0B7F68 -/* 0EA88C 7F0B7E9C 00000000 */ nop -.L7F0B7EA0: -/* 0EA890 7F0B7EA0 14620006 */ bne $v1, $v0, .L7F0B7EBC -/* 0EA894 7F0B7EA4 24040009 */ li $a0, 9 -/* 0EA898 7F0B7EA8 8E260000 */ lw $a2, ($s1) -/* 0EA89C 7F0B7EAC 00002825 */ move $a1, $zero -/* 0EA8A0 7F0B7EB0 24070001 */ li $a3, 1 -/* 0EA8A4 7F0B7EB4 0FC2CB1F */ jal sub_GAME_7F0B39BC -/* 0EA8A8 7F0B7EB8 24C61110 */ addiu $a2, $a2, 0x1110 -.L7F0B7EBC: -/* 0EA8AC 7F0B7EBC 8E260000 */ lw $a2, ($s1) -/* 0EA8B0 7F0B7EC0 3C048004 */ lui $a0, %hi(g_BgCurrentRoom) # $a0, 0x8004 -/* 0EA8B4 7F0B7EC4 8C84DD18 */ lw $a0, %lo(g_BgCurrentRoom)($a0) -/* 0EA8B8 7F0B7EC8 00002825 */ move $a1, $zero -/* 0EA8BC 7F0B7ECC 24070001 */ li $a3, 1 -/* 0EA8C0 7F0B7ED0 0FC2CB1F */ jal sub_GAME_7F0B39BC -/* 0EA8C4 7F0B7ED4 24C61110 */ addiu $a2, $a2, 0x1110 -/* 0EA8C8 7F0B7ED8 3C048007 */ lui $a0, %hi(g_BgPortals) # $a0, 0x8007 -/* 0EA8CC 7F0B7EDC 8C84B3C8 */ lw $a0, %lo(g_BgPortals)($a0) -/* 0EA8D0 7F0B7EE0 00008025 */ move $s0, $zero -/* 0EA8D4 7F0B7EE4 00001825 */ move $v1, $zero -/* 0EA8D8 7F0B7EE8 8C8D0000 */ lw $t5, ($a0) -/* 0EA8DC 7F0B7EEC 00801025 */ move $v0, $a0 -/* 0EA8E0 7F0B7EF0 11A00015 */ beqz $t5, .L7F0B7F48 -.L7F0B7EF4: -/* 0EA8E4 7F0B7EF4 3C048004 */ lui $a0, %hi(g_BgCurrentRoom) # $a0, 0x8004 -/* 0EA8E8 7F0B7EF8 8C84DD18 */ lw $a0, %lo(g_BgCurrentRoom)($a0) -/* 0EA8EC 7F0B7EFC 904E0004 */ lbu $t6, 4($v0) -/* 0EA8F0 7F0B7F00 02002825 */ move $a1, $s0 -/* 0EA8F4 7F0B7F04 24060001 */ li $a2, 1 -/* 0EA8F8 7F0B7F08 108E0004 */ beq $a0, $t6, .L7F0B7F1C -/* 0EA8FC 7F0B7F0C 27A70040 */ addiu $a3, $sp, 0x40 -/* 0EA900 7F0B7F10 904F0005 */ lbu $t7, 5($v0) -/* 0EA904 7F0B7F14 548F0008 */ bnel $a0, $t7, .L7F0B7F38 -/* 0EA908 7F0B7F18 8C590008 */ lw $t9, 8($v0) -.L7F0B7F1C: -/* 0EA90C 7F0B7F1C 0FC2DC48 */ jal sub_GAME_7F0B7DE4 -/* 0EA910 7F0B7F20 AFA30028 */ sw $v1, 0x28($sp) -/* 0EA914 7F0B7F24 3C188007 */ lui $t8, %hi(g_BgPortals) # $t8, 0x8007 -/* 0EA918 7F0B7F28 8F18B3C8 */ lw $t8, %lo(g_BgPortals)($t8) -/* 0EA91C 7F0B7F2C 8FA30028 */ lw $v1, 0x28($sp) -/* 0EA920 7F0B7F30 03031021 */ addu $v0, $t8, $v1 -/* 0EA924 7F0B7F34 8C590008 */ lw $t9, 8($v0) -.L7F0B7F38: -/* 0EA928 7F0B7F38 26100001 */ addiu $s0, $s0, 1 -/* 0EA92C 7F0B7F3C 24630008 */ addiu $v1, $v1, 8 -/* 0EA930 7F0B7F40 1720FFEC */ bnez $t9, .L7F0B7EF4 -/* 0EA934 7F0B7F44 24420008 */ addiu $v0, $v0, 8 -.L7F0B7F48: -/* 0EA938 7F0B7F48 0FC2DC88 */ jal sub_GAME_7F0B7EE4 -/* 0EA93C 7F0B7F4C 00000000 */ nop -/* 0EA940 7F0B7F50 10400005 */ beqz $v0, .L7F0B7F68 -/* 0EA944 7F0B7F54 00000000 */ nop -.L7F0B7F58: -/* 0EA948 7F0B7F58 0FC2DC88 */ jal sub_GAME_7F0B7EE4 -/* 0EA94C 7F0B7F5C 00000000 */ nop -/* 0EA950 7F0B7F60 1440FFFD */ bnez $v0, .L7F0B7F58 -/* 0EA954 7F0B7F64 00000000 */ nop -.L7F0B7F68: -/* 0EA958 7F0B7F68 3C048007 */ lui $a0, %hi(g_BgPortals) # $a0, 0x8007 -/* 0EA95C 7F0B7F6C 8C84B3C8 */ lw $a0, %lo(g_BgPortals)($a0) -/* 0EA960 7F0B7F70 3C078004 */ lui $a3, %hi(g_BgRoomInfo) # $a3, 0x8004 -/* 0EA964 7F0B7F74 24E7AC64 */ addiu $a3, %lo(g_BgRoomInfo) # addiu $a3, $a3, -0x539c -/* 0EA968 7F0B7F78 8C8A0000 */ lw $t2, ($a0) -/* 0EA96C 7F0B7F7C 24090001 */ li $t1, 1 -/* 0EA970 7F0B7F80 24080050 */ li $t0, 80 -/* 0EA974 7F0B7F84 1140001E */ beqz $t2, .L7F0B8000 -/* 0EA978 7F0B7F88 00801025 */ move $v0, $a0 -/* 0EA97C 7F0B7F8C 90430004 */ lbu $v1, 4($v0) -.L7F0B7F90: -/* 0EA980 7F0B7F90 90440005 */ lbu $a0, 5($v0) -/* 0EA984 7F0B7F94 00680019 */ multu $v1, $t0 -/* 0EA988 7F0B7F98 00005812 */ mflo $t3 -/* 0EA98C 7F0B7F9C 00EB2821 */ addu $a1, $a3, $t3 -/* 0EA990 7F0B7FA0 90A60000 */ lbu $a2, ($a1) -/* 0EA994 7F0B7FA4 10C00009 */ beqz $a2, .L7F0B7FCC -/* 0EA998 7F0B7FA8 00000000 */ nop -/* 0EA99C 7F0B7FAC 00880019 */ multu $a0, $t0 -/* 0EA9A0 7F0B7FB0 00006012 */ mflo $t4 -/* 0EA9A4 7F0B7FB4 00EC1821 */ addu $v1, $a3, $t4 -/* 0EA9A8 7F0B7FB8 906D0000 */ lbu $t5, ($v1) -/* 0EA9AC 7F0B7FBC 15A00003 */ bnez $t5, .L7F0B7FCC -/* 0EA9B0 7F0B7FC0 00000000 */ nop -/* 0EA9B4 7F0B7FC4 1000000A */ b .L7F0B7FF0 -/* 0EA9B8 7F0B7FC8 A0690001 */ sb $t1, 1($v1) -.L7F0B7FCC: -/* 0EA9BC 7F0B7FCC 00880019 */ multu $a0, $t0 -/* 0EA9C0 7F0B7FD0 00007012 */ mflo $t6 -/* 0EA9C4 7F0B7FD4 00EE7821 */ addu $t7, $a3, $t6 -/* 0EA9C8 7F0B7FD8 91F80000 */ lbu $t8, ($t7) -/* 0EA9CC 7F0B7FDC 53000005 */ beql $t8, $zero, .L7F0B7FF4 -/* 0EA9D0 7F0B7FE0 8C590008 */ lw $t9, 8($v0) -/* 0EA9D4 7F0B7FE4 54C00003 */ bnezl $a2, .L7F0B7FF4 -/* 0EA9D8 7F0B7FE8 8C590008 */ lw $t9, 8($v0) -/* 0EA9DC 7F0B7FEC A0A90001 */ sb $t1, 1($a1) -.L7F0B7FF0: -/* 0EA9E0 7F0B7FF0 8C590008 */ lw $t9, 8($v0) -.L7F0B7FF4: -/* 0EA9E4 7F0B7FF4 24420008 */ addiu $v0, $v0, 8 -/* 0EA9E8 7F0B7FF8 5720FFE5 */ bnezl $t9, .L7F0B7F90 -/* 0EA9EC 7F0B7FFC 90430004 */ lbu $v1, 4($v0) -.L7F0B8000: -/* 0EA9F0 7F0B8000 8FBF001C */ lw $ra, 0x1c($sp) -/* 0EA9F4 7F0B8004 8FB00014 */ lw $s0, 0x14($sp) -/* 0EA9F8 7F0B8008 8FB10018 */ lw $s1, 0x18($sp) -/* 0EA9FC 7F0B800C 03E00008 */ jr $ra -/* 0EAA00 7F0B8010 27BD0050 */ addiu $sp, $sp, 0x50 -) + bgResetPortalQueue(); + sub_GAME_7F0B5168(); + sub_GAME_7F0B8A24(dword_CODE_bss_8007FF90); + + if (1); + + /** + * If the level is Cradle, or has no portals, skip the portal occlusion culling algorithm. Just add every room in the player's + * screen bounds to the list of rooms to draw. + */ + if ((levelentry_index == LEVEL_INDEX_CRAD) || (g_BgPortals->offset_portal == NULL)) + { + if (levelentry_index == LEVEL_INDEX_CRAD) + { + sub_GAME_7F0B39BC(9, 0, &g_CurrentPlayer->screensize, 1); + } + + for (var_s0 = 1; var_s0 < g_MaxNumRooms; var_s0++) + { + if (bgIsRoomOnScreen(var_s0, &g_CurrentPlayer->screensize) != 0) + { + sub_GAME_7F0B39BC(var_s0, 0, &g_CurrentPlayer->screensize, 1); + } + } + } + else + { + // This can never execute since the above branch is taken if the level is Cradle. + if (levelentry_index == LEVEL_INDEX_CRAD) + { + sub_GAME_7F0B39BC(9, 0, &g_CurrentPlayer->screensize, 1); + } + + sub_GAME_7F0B39BC(g_BgCurrentRoom, 0, &g_CurrentPlayer->screensize, 1); + + for (var_s0 = 0; g_BgPortals[var_s0].offset_portal != NULL; var_s0++) + { + if ((g_BgCurrentRoom == g_BgPortals[var_s0].connectedRoom1) || (g_BgCurrentRoom == g_BgPortals[var_s0].connectedRoom2)) + { +#if defined(LEFTOVERDEBUG) + bgQueuePortalTraversal(0, g_BgCurrentRoom, var_s0, 1, screenbounds); +#else + bgQueuePortalTraversal(g_BgCurrentRoom, var_s0, 1, screenbounds); #endif + } + } +#if defined(LEFTOVERDEBUG) + sp44 = 0; + + while (bgProcessNextQueuedPortal(&sp44) != 0) + { + // empty + } + + if (1); +#else + while (bgProcessNextQueuedPortal() != 0) + { + // empty + } #endif + } + for (var_s0 = 0; g_BgPortals[var_s0].offset_portal != NULL; var_s0++) + { + temp_v1 = g_BgPortals[var_s0].connectedRoom1; + temp_a0 = g_BgPortals[var_s0].connectedRoom2; - + if ((g_BgRoomInfo[temp_v1].room_rendered != 0) && (g_BgRoomInfo[temp_a0].room_rendered == 0)) + { + g_BgRoomInfo[temp_a0].room_neighbor_to_rendered = 1; + } + else if ((g_BgRoomInfo[temp_a0].room_rendered != 0) && (g_BgRoomInfo[temp_v1].room_rendered == 0)) + { + g_BgRoomInfo[temp_v1].room_neighbor_to_rendered = 1; + } + } +} /** @@ -10318,72 +4460,56 @@ Gfx *sub_GAME_7F0B8D78(Gfx *arg0) } +/** + * Unreferenced. + */ +s32 sub_GAME_7F0B8DF4(s32 room, s32 *portalnums, s32 max) +{ + bg_portal_data_entry *base; + bg_portal_data_entry *portal; + s32 count; + s32 i; + s32 offset; -// Unused/unreferenced function -#ifdef NONMATCHING -void sub_GAME_7F0B8DF4(void) { + count = 0; + i = 0; + base = g_BgPortals; + if (room); + + if (base->offset_portal != NULL) + { + offset = 0; + portal = base; + + do + { + if ((room == portal->connectedRoom1) || (room == portal->connectedRoom2)) + { + portalnums[count] = i; + count++; + } + + if (count >= max) + { + return count; + } + + offset += 8; + i++; + portal = (bg_portal_data_entry *) (((u8 *) g_BgPortals) + offset); + } + while (portal->offset_portal != NULL); + } + + return count; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B8DF4 -/* 0ED924 7F0B8DF4 3C088008 */ lui $t0, %hi(g_BgPortals) -/* 0ED928 7F0B8DF8 2508FF80 */ addiu $t0, %lo(g_BgPortals) # addiu $t0, $t0, -0x80 -/* 0ED92C 7F0B8DFC 8D070000 */ lw $a3, ($t0) -/* 0ED930 7F0B8E00 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0ED934 7F0B8E04 AFB1000C */ sw $s1, 0xc($sp) -/* 0ED938 7F0B8E08 AFB00008 */ sw $s0, 8($sp) -/* 0ED93C 7F0B8E0C 8CEE0000 */ lw $t6, ($a3) -/* 0ED940 7F0B8E10 00A08025 */ move $s0, $a1 -/* 0ED944 7F0B8E14 00C08825 */ move $s1, $a2 -/* 0ED948 7F0B8E18 00001825 */ move $v1, $zero -/* 0ED94C 7F0B8E1C 11C00019 */ beqz $t6, .L7F0B8E84 -/* 0ED950 7F0B8E20 00001025 */ move $v0, $zero -/* 0ED954 7F0B8E24 00002825 */ move $a1, $zero -/* 0ED958 7F0B8E28 00E03025 */ move $a2, $a3 -/* 0ED95C 7F0B8E2C 90CF0004 */ lbu $t7, 4($a2) -.L7F0B8E30: -/* 0ED960 7F0B8E30 0003C880 */ sll $t9, $v1, 2 -/* 0ED964 7F0B8E34 02194821 */ addu $t1, $s0, $t9 -/* 0ED968 7F0B8E38 508F0005 */ beql $a0, $t7, .L7F0B8E50 -/* 0ED96C 7F0B8E3C AD220000 */ sw $v0, ($t1) -/* 0ED970 7F0B8E40 90D80005 */ lbu $t8, 5($a2) -/* 0ED974 7F0B8E44 54980004 */ bnel $a0, $t8, .L7F0B8E58 -/* 0ED978 7F0B8E48 0071082A */ slt $at, $v1, $s1 -/* 0ED97C 7F0B8E4C AD220000 */ sw $v0, ($t1) -.L7F0B8E50: -/* 0ED980 7F0B8E50 24630001 */ addiu $v1, $v1, 1 -/* 0ED984 7F0B8E54 0071082A */ slt $at, $v1, $s1 -.L7F0B8E58: -/* 0ED988 7F0B8E58 54200004 */ bnezl $at, .L7F0B8E6C -/* 0ED98C 7F0B8E5C 8D0A0000 */ lw $t2, ($t0) -/* 0ED990 7F0B8E60 10000009 */ b .L7F0B8E88 -/* 0ED994 7F0B8E64 00601025 */ move $v0, $v1 -/* 0ED998 7F0B8E68 8D0A0000 */ lw $t2, ($t0) -.L7F0B8E6C: -/* 0ED99C 7F0B8E6C 24A50008 */ addiu $a1, $a1, 8 -/* 0ED9A0 7F0B8E70 24420001 */ addiu $v0, $v0, 1 -/* 0ED9A4 7F0B8E74 01453021 */ addu $a2, $t2, $a1 -/* 0ED9A8 7F0B8E78 8CCB0000 */ lw $t3, ($a2) -/* 0ED9AC 7F0B8E7C 5560FFEC */ bnezl $t3, .L7F0B8E30 -/* 0ED9B0 7F0B8E80 90CF0004 */ lbu $t7, 4($a2) -.L7F0B8E84: -/* 0ED9B4 7F0B8E84 00601025 */ move $v0, $v1 -.L7F0B8E88: -/* 0ED9B8 7F0B8E88 8FB00008 */ lw $s0, 8($sp) -/* 0ED9BC 7F0B8E8C 8FB1000C */ lw $s1, 0xc($sp) -/* 0ED9C0 7F0B8E90 03E00008 */ jr $ra -/* 0ED9C4 7F0B8E94 27BD0010 */ addiu $sp, $sp, 0x10 -) -#endif - - // Copies visible rooms to a list // Address: 0x7F0B8E98 -s32 bgCopyVisibleRoomsToList(s32 *rooms, s32 max) { +s32 bgCopyVisibleRoomsToList(s32 *rooms, s32 max) +{ s32 i; for (i = 0; (i < num_visible_rooms_in_cur_global_vis_packet) && (i < max); i++) { @@ -10394,11 +4520,14 @@ s32 bgCopyVisibleRoomsToList(s32 *rooms, s32 max) { } - - -// Seems like this function might be used to find all the neighbors to a room -// Address: 0x7F0B8EFC -s32 sub_GAME_7F0B8EFC(s32 roomIndex, s32* list, s32 max) +/** + * Create a list of rooms connected to roomIndex. + * @param roomIndex Room to query. + * @param list Output buffer for connected room indices. + * @param max Max number of entries to write. + * @return Number of rooms written to the list. + */ +s32 bgGetConnectedRooms(s32 roomIndex, s32* list, s32 max) { s32 len = 0; s32 i; @@ -10437,16 +4566,14 @@ end: } - - - // Scan all portals to see if these rooms are connected // // Room data doesn't contain a list of its portals, so it goes through // the whole list of portals which seems naive and inefficient. // // Address: 0x7F0B8FD0 -s32 sub_GAME_7F0B8FD0(s32 room1, s32 room2) { +bool bgRoomsSharePortal(s32 room1, s32 room2) +{ s32 i; for (i = 0; g_BgPortals[i].offset_portal != NULL; i++) @@ -10456,20 +4583,18 @@ s32 sub_GAME_7F0B8FD0(s32 room1, s32 room2) { if (v0 == room1 && v1 == room2) { - return 1; + return TRUE; } if (v1 == room1 && v0 == room2) { - return 1; + return TRUE; } } - return 0; + return FALSE; } - - /** * Unreferenced. * @@ -10556,659 +4681,196 @@ void bgUpdateCurrentPlayerScreenMinMax(void) } - - - -#ifdef NONMATCHING -s32 sub_GAME_7F0B92B4(s32 arg0, void *arg1) +/** + * Address: 7F0B92B4 + */ +void bgGetRoomCenter(s32 roomnum, coord3d *dst) { - void *temp_a2; - s32 temp_v0; - f32 temp_f18; - void *temp_a2_2; - s32 temp_v0_2; - void *temp_v1; - f32 temp_f18_2; - f32 phi_f18; - void *phi_v1; - s32 phi_v0; - f32 phi_f18_2; - void *phi_v1_2; - void *phi_a2; + s32 i; + s_room_info *room = &g_BgRoomInfo[roomnum]; - //try this, its just a guess but its only a loop of 3 and I think its unrolled - for (i = 0; i < 3; i++) - { - arg1[i]->room_id = arg0[i]->roomid + arg0[i]->next->roomid/2; + for (i = 0; i < 3; i++) { + dst->f[i] = (room->minbounds.f[i] + room->maxbounds.f[i]) * 0.5f; } - // Node 0 +} - temp_a2 = ((arg0 * 0x50) + &g_BgRoomInfo); - temp_v0 = (0 + 1); - temp_f18 = ((temp_a2->unk44 + temp_a2->unk38) * 0.5f); - phi_f18 = temp_f18; - phi_v1 = arg1; - phi_v0 = temp_v0; - phi_f18_2 = temp_f18; - phi_v1_2 = arg1; - phi_a2 = temp_a2; - if (temp_v0 != 3) + +/** + * Address: 7F0B9338 + */ +void bgRoomCalcBB(s32 room) // canonical name +{ + bg_room_data *roomdata; + Vtx *vertices = (Vtx *) &g_StanRoomBounds[0]; + s32 j = 0; + StanRoomBounds limits; + u8 wasloaded; + + roomdata = (bg_room_data *) ((s32) ptr_bgdata_room_fileposition_list + room * 24); + + if (roomdata->pPointTableBin == NULL) { -loop_1: - // Node 1 - *phi_v1 = (f32) phi_f18; - temp_a2_2 = (phi_a2 + 4); - temp_v0_2 = (phi_v0 + 1); - temp_v1 = (phi_v1 + 4); - temp_f18_2 = ((phi_a2->unk48 + temp_a2_2->unk38) * 0.5f); - phi_f18 = temp_f18_2; - phi_v1 = temp_v1; - phi_v0 = temp_v0_2; - phi_f18_2 = temp_f18_2; - phi_v1_2 = temp_v1; - phi_a2 = temp_a2_2; - if (temp_v0_2 != 3) + if ((room < dword_CODE_bss_8007B9DC) && ((s32) firststaninroom[room] != ((StanRoomBounds *) vertices)->min[j] % 1)) { - goto loop_1; + for (j = 0; j < 3; j++) + { + g_BgRoomInfo[room].minbounds.f[j] = g_StanRoomBounds[room].min[j]; + + g_BgRoomInfo[room].maxbounds.f[j] = g_StanRoomBounds[room].max[j]; + + ptr_bgdata_room_fileposition_list[room].pos.f[j] = (g_StanRoomBounds[room].min[j] + g_StanRoomBounds[room].max[j]) / 2; + } + } +#ifdef DEBUG + else + { + osSyncPrintf("bg: bgRoomCalcBB: ROOM%d has no gfx, and no stans! Can\'t make bb & roomoffset ", room); + } +#endif + + return; + } + + wasloaded = g_BgRoomInfo[room].model_bin_loaded; + + if (!wasloaded) + { + bgLoadRoomModelData(room); + } + + vertices = g_BgRoomInfo[room].vertices; + roomdata = (bg_room_data *) ((s32) ptr_bgdata_room_fileposition_list + room * 24); + + limits.minX = 0x7fff; + limits.minY = 0x7fff; + limits.minZ = 0x7fff; + limits.maxX = -0x7fff; + limits.maxY = -0x7fff; + limits.maxZ = -0x7fff; + + for (; vertices < (Vtx *) ((s32) g_BgRoomInfo[room].vertices + g_BgRoomInfo[room].usize_point_index_binary); vertices++) + { + for (j = 0; j < 3; j++) + { + if (((s16 *) vertices)[j] < limits.min[j]) + { + limits.min[j] = ((s16 *) vertices)[j]; + } + + if (limits.max[j] < ((s16 *) vertices)[j]) + { + limits.max[j] = ((s16 *) vertices)[j]; + } } } - // Node 2 - (phi_v1_2 + 4)->unk-4 = (f32) phi_f18_2; - return temp_v0; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B92B4 -/* 0EDDE4 7F0B92B4 00047080 */ sll $t6, $a0, 2 -/* 0EDDE8 7F0B92B8 01C47021 */ addu $t6, $t6, $a0 -/* 0EDDEC 7F0B92BC 3C0F8004 */ lui $t7, %hi(g_BgRoomInfo) -/* 0EDDF0 7F0B92C0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0EDDF4 7F0B92C4 25EF1414 */ addiu $t7, %lo(g_BgRoomInfo) # addiu $t7, $t7, 0x1414 -/* 0EDDF8 7F0B92C8 000E7100 */ sll $t6, $t6, 4 -/* 0EDDFC 7F0B92CC 44810000 */ mtc1 $at, $f0 -/* 0EDE00 7F0B92D0 01CF3021 */ addu $a2, $t6, $t7 -/* 0EDE04 7F0B92D4 24040003 */ li $a0, 3 -/* 0EDE08 7F0B92D8 00001025 */ move $v0, $zero -/* 0EDE0C 7F0B92DC 00A01825 */ move $v1, $a1 -/* 0EDE10 7F0B92E0 C4D00044 */ lwc1 $f16, 0x44($a2) -/* 0EDE14 7F0B92E4 C4CE0038 */ lwc1 $f14, 0x38($a2) -/* 0EDE18 7F0B92E8 24420001 */ addiu $v0, $v0, 1 -/* 0EDE1C 7F0B92EC 460E8380 */ add.s $f14, $f16, $f14 -/* 0EDE20 7F0B92F0 46007482 */ mul.s $f18, $f14, $f0 -/* 0EDE24 7F0B92F4 5044000C */ beql $v0, $a0, .L7F0B9328 -/* 0EDE28 7F0B92F8 24C60004 */ addiu $a2, $a2, 4 -/* 0EDE2C 7F0B92FC E4720000 */ swc1 $f18, ($v1) -.L7F0B9300: -/* 0EDE30 7F0B9300 C4D00048 */ lwc1 $f16, 0x48($a2) -/* 0EDE34 7F0B9304 24C60004 */ addiu $a2, $a2, 4 -/* 0EDE38 7F0B9308 C4CE0038 */ lwc1 $f14, 0x38($a2) -/* 0EDE3C 7F0B930C 24420001 */ addiu $v0, $v0, 1 -/* 0EDE40 7F0B9310 24630004 */ addiu $v1, $v1, 4 -/* 0EDE44 7F0B9314 460E8380 */ add.s $f14, $f16, $f14 -/* 0EDE48 7F0B9318 46007482 */ mul.s $f18, $f14, $f0 -/* 0EDE4C 7F0B931C 5444FFF8 */ bnel $v0, $a0, .L7F0B9300 -/* 0EDE50 7F0B9320 E4720000 */ swc1 $f18, ($v1) -/* 0EDE54 7F0B9324 24C60004 */ addiu $a2, $a2, 4 -.L7F0B9328: -/* 0EDE58 7F0B9328 24630004 */ addiu $v1, $v1, 4 -/* 0EDE5C 7F0B932C E472FFFC */ swc1 $f18, -4($v1) -/* 0EDE60 7F0B9330 03E00008 */ jr $ra -/* 0EDE64 7F0B9334 00000000 */ nop -) -#endif + g_BgRoomInfo[room].minbounds.x = roomdata->pos.x + limits.minX; + g_BgRoomInfo[room].minbounds.y = roomdata->pos.y + limits.minY; + g_BgRoomInfo[room].minbounds.z = roomdata->pos.z + limits.minZ; + g_BgRoomInfo[room].maxbounds.x = roomdata->pos.x + limits.maxX; + g_BgRoomInfo[room].maxbounds.y = roomdata->pos.y + limits.maxY; + g_BgRoomInfo[room].maxbounds.z = roomdata->pos.z + limits.maxZ; - - - -#ifdef NONMATCHING -//bgRoomCalcBB -void sub_GAME_7F0B9338(int room) { - if ((room < dword_CODE_bss_8007B9DC) && (firststaninroom[room] != NULL)) - #ifdef DEBUG - else + if (wasloaded == 0) { - osSyncPrintf("bg: bgRoomCalcBB: ROOM%d has no gfx, and no stans! Can\'t make bb & roomoffset ", room); - } - #endif + delete_room_data(room); + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B9338 -/* 0EDE68 7F0B9338 3C088008 */ lui $t0, %hi(ptr_bgdata_room_fileposition_list) -/* 0EDE6C 7F0B933C 2508FF8C */ addiu $t0, %lo(ptr_bgdata_room_fileposition_list) # addiu $t0, $t0, -0x74 -/* 0EDE70 7F0B9340 8D0E0000 */ lw $t6, ($t0) -/* 0EDE74 7F0B9344 00041080 */ sll $v0, $a0, 2 -/* 0EDE78 7F0B9348 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 0EDE7C 7F0B934C 00441023 */ subu $v0, $v0, $a0 -/* 0EDE80 7F0B9350 000210C0 */ sll $v0, $v0, 3 -/* 0EDE84 7F0B9354 AFBF001C */ sw $ra, 0x1c($sp) -/* 0EDE88 7F0B9358 AFB00018 */ sw $s0, 0x18($sp) -/* 0EDE8C 7F0B935C 01C24821 */ addu $t1, $t6, $v0 -/* 0EDE90 7F0B9360 8D2F0000 */ lw $t7, ($t1) -/* 0EDE94 7F0B9364 3C188004 */ lui $t8, %hi(g_BgRoomInfo) -/* 0EDE98 7F0B9368 00808025 */ move $s0, $a0 -/* 0EDE9C 7F0B936C 15E00035 */ bnez $t7, .L7F0B9444 -/* 0EDEA0 7F0B9370 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 -/* 0EDEA4 7F0B9374 3C188008 */ lui $t8, %hi(dword_CODE_bss_8007B9DC) -/* 0EDEA8 7F0B9378 8F18B9DC */ lw $t8, %lo(dword_CODE_bss_8007B9DC)($t8) -/* 0EDEAC 7F0B937C 0004C880 */ sll $t9, $a0, 2 -/* 0EDEB0 7F0B9380 3C0B8008 */ lui $t3, %hi(firststaninroom) -/* 0EDEB4 7F0B9384 0098082A */ slt $at, $a0, $t8 -/* 0EDEB8 7F0B9388 1020008E */ beqz $at, .L7F0B95C4 -/* 0EDEBC 7F0B938C 01795821 */ addu $t3, $t3, $t9 -/* 0EDEC0 7F0B9390 8D6BB128 */ lw $t3, %lo(firststaninroom)($t3) -/* 0EDEC4 7F0B9394 00106080 */ sll $t4, $s0, 2 -/* 0EDEC8 7F0B9398 01906021 */ addu $t4, $t4, $s0 -/* 0EDECC 7F0B939C 11600089 */ beqz $t3, .L7F0B95C4 -/* 0EDED0 7F0B93A0 00002025 */ move $a0, $zero -/* 0EDED4 7F0B93A4 00107080 */ sll $t6, $s0, 2 -/* 0EDED8 7F0B93A8 01D07023 */ subu $t6, $t6, $s0 -/* 0EDEDC 7F0B93AC 3C0D8004 */ lui $t5, %hi(g_BgRoomInfo) -/* 0EDEE0 7F0B93B0 3C0F8008 */ lui $t7, %hi(dword_CODE_bss_8007B358) -/* 0EDEE4 7F0B93B4 25EFB358 */ addiu $t7, %lo(dword_CODE_bss_8007B358) # addiu $t7, $t7, -0x4ca8 -/* 0EDEE8 7F0B93B8 25AD1414 */ addiu $t5, %lo(g_BgRoomInfo) # addiu $t5, $t5, 0x1414 -/* 0EDEEC 7F0B93BC 000E7080 */ sll $t6, $t6, 2 -/* 0EDEF0 7F0B93C0 000C6100 */ sll $t4, $t4, 4 -/* 0EDEF4 7F0B93C4 018D2821 */ addu $a1, $t4, $t5 -/* 0EDEF8 7F0B93C8 01CF3021 */ addu $a2, $t6, $t7 -/* 0EDEFC 7F0B93CC 2407000C */ li $a3, 12 -.L7F0B93D0: -/* 0EDF00 7F0B93D0 84C20000 */ lh $v0, ($a2) -/* 0EDF04 7F0B93D4 84C30006 */ lh $v1, 6($a2) -/* 0EDF08 7F0B93D8 8D0B0000 */ lw $t3, ($t0) -/* 0EDF0C 7F0B93DC 44822000 */ mtc1 $v0, $f4 -/* 0EDF10 7F0B93E0 44834000 */ mtc1 $v1, $f8 -/* 0EDF14 7F0B93E4 0062C021 */ addu $t8, $v1, $v0 -/* 0EDF18 7F0B93E8 468021A0 */ cvt.s.w $f6, $f4 -/* 0EDF1C 7F0B93EC 00106080 */ sll $t4, $s0, 2 -/* 0EDF20 7F0B93F0 01906023 */ subu $t4, $t4, $s0 -/* 0EDF24 7F0B93F4 000C60C0 */ sll $t4, $t4, 3 -/* 0EDF28 7F0B93F8 016C6821 */ addu $t5, $t3, $t4 -/* 0EDF2C 7F0B93FC 468042A0 */ cvt.s.w $f10, $f8 -/* 0EDF30 7F0B9400 01A47021 */ addu $t6, $t5, $a0 -/* 0EDF34 7F0B9404 24840004 */ addiu $a0, $a0, 4 -/* 0EDF38 7F0B9408 E4A60038 */ swc1 $f6, 0x38($a1) -/* 0EDF3C 7F0B940C 24A50004 */ addiu $a1, $a1, 4 -/* 0EDF40 7F0B9410 24C60002 */ addiu $a2, $a2, 2 -/* 0EDF44 7F0B9414 E4AA0040 */ swc1 $f10, 0x40($a1) -/* 0EDF48 7F0B9418 07010003 */ bgez $t8, .L7F0B9428 -/* 0EDF4C 7F0B941C 0018C843 */ sra $t9, $t8, 1 -/* 0EDF50 7F0B9420 27010001 */ addiu $at, $t8, 1 -/* 0EDF54 7F0B9424 0001C843 */ sra $t9, $at, 1 -.L7F0B9428: -/* 0EDF58 7F0B9428 44998000 */ mtc1 $t9, $f16 -/* 0EDF5C 7F0B942C 00000000 */ nop -/* 0EDF60 7F0B9430 468084A0 */ cvt.s.w $f18, $f16 -/* 0EDF64 7F0B9434 1487FFE6 */ bne $a0, $a3, .L7F0B93D0 -/* 0EDF68 7F0B9438 E5D2000C */ swc1 $f18, 0xc($t6) -/* 0EDF6C 7F0B943C 10000062 */ b .L7F0B95C8 -/* 0EDF70 7F0B9440 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0B9444: -/* 0EDF74 7F0B9444 00107880 */ sll $t7, $s0, 2 -/* 0EDF78 7F0B9448 01F07821 */ addu $t7, $t7, $s0 -/* 0EDF7C 7F0B944C 000F7900 */ sll $t7, $t7, 4 -/* 0EDF80 7F0B9450 01F84021 */ addu $t0, $t7, $t8 -/* 0EDF84 7F0B9454 910A0002 */ lbu $t2, 2($t0) -/* 0EDF88 7F0B9458 02002025 */ move $a0, $s0 -/* 0EDF8C 7F0B945C 5540000C */ bnezl $t2, .L7F0B9490 -/* 0EDF90 7F0B9460 8D060004 */ lw $a2, 4($t0) -/* 0EDF94 7F0B9464 AFA20030 */ sw $v0, 0x30($sp) -/* 0EDF98 7F0B9468 AFA80028 */ sw $t0, 0x28($sp) -/* 0EDF9C 7F0B946C 0FC2D8DA */ jal sub_GAME_7F0B6368 -/* 0EDFA0 7F0B9470 A3AA0037 */ sb $t2, 0x37($sp) -/* 0EDFA4 7F0B9474 3C198008 */ lui $t9, %hi(ptr_bgdata_room_fileposition_list) -/* 0EDFA8 7F0B9478 8F39FF8C */ lw $t9, %lo(ptr_bgdata_room_fileposition_list)($t9) -/* 0EDFAC 7F0B947C 8FA20030 */ lw $v0, 0x30($sp) -/* 0EDFB0 7F0B9480 8FA80028 */ lw $t0, 0x28($sp) -/* 0EDFB4 7F0B9484 93AA0037 */ lbu $t2, 0x37($sp) -/* 0EDFB8 7F0B9488 03224821 */ addu $t1, $t9, $v0 -/* 0EDFBC 7F0B948C 8D060004 */ lw $a2, 4($t0) -.L7F0B9490: -/* 0EDFC0 7F0B9490 8D19001C */ lw $t9, 0x1c($t0) -/* 0EDFC4 7F0B9494 240B7FFF */ li $t3, 32767 -/* 0EDFC8 7F0B9498 240C7FFF */ li $t4, 32767 -/* 0EDFCC 7F0B949C 03263821 */ addu $a3, $t9, $a2 -/* 0EDFD0 7F0B94A0 240D7FFF */ li $t5, 32767 -/* 0EDFD4 7F0B94A4 240E8001 */ li $t6, -32767 -/* 0EDFD8 7F0B94A8 240F8001 */ li $t7, -32767 -/* 0EDFDC 7F0B94AC 24188001 */ li $t8, -32767 -/* 0EDFE0 7F0B94B0 00C7082B */ sltu $at, $a2, $a3 -/* 0EDFE4 7F0B94B4 A7AB0038 */ sh $t3, 0x38($sp) -/* 0EDFE8 7F0B94B8 A7AC003A */ sh $t4, 0x3a($sp) -/* 0EDFEC 7F0B94BC A7AD003C */ sh $t5, 0x3c($sp) -/* 0EDFF0 7F0B94C0 A7AE003E */ sh $t6, 0x3e($sp) -/* 0EDFF4 7F0B94C4 A7AF0040 */ sh $t7, 0x40($sp) -/* 0EDFF8 7F0B94C8 10200017 */ beqz $at, .L7F0B9528 -/* 0EDFFC 7F0B94CC A7B80042 */ sh $t8, 0x42($sp) -/* 0EE000 7F0B94D0 27A5003E */ addiu $a1, $sp, 0x3e -/* 0EE004 7F0B94D4 00C02025 */ move $a0, $a2 -.L7F0B94D8: -/* 0EE008 7F0B94D8 27A30038 */ addiu $v1, $sp, 0x38 -.L7F0B94DC: -/* 0EE00C 7F0B94DC 84820000 */ lh $v0, ($a0) -/* 0EE010 7F0B94E0 846B0000 */ lh $t3, ($v1) -/* 0EE014 7F0B94E4 004B082A */ slt $at, $v0, $t3 -/* 0EE018 7F0B94E8 50200004 */ beql $at, $zero, .L7F0B94FC -/* 0EE01C 7F0B94EC 846C0006 */ lh $t4, 6($v1) -/* 0EE020 7F0B94F0 A4620000 */ sh $v0, ($v1) -/* 0EE024 7F0B94F4 84820000 */ lh $v0, ($a0) -/* 0EE028 7F0B94F8 846C0006 */ lh $t4, 6($v1) -.L7F0B94FC: -/* 0EE02C 7F0B94FC 0182082A */ slt $at, $t4, $v0 -/* 0EE030 7F0B9500 50200003 */ beql $at, $zero, .L7F0B9510 -/* 0EE034 7F0B9504 24630002 */ addiu $v1, $v1, 2 -/* 0EE038 7F0B9508 A4620006 */ sh $v0, 6($v1) -/* 0EE03C 7F0B950C 24630002 */ addiu $v1, $v1, 2 -.L7F0B9510: -/* 0EE040 7F0B9510 1465FFF2 */ bne $v1, $a1, .L7F0B94DC -/* 0EE044 7F0B9514 24840002 */ addiu $a0, $a0, 2 -/* 0EE048 7F0B9518 24C60010 */ addiu $a2, $a2, 0x10 -/* 0EE04C 7F0B951C 00C7082B */ sltu $at, $a2, $a3 -/* 0EE050 7F0B9520 5420FFED */ bnezl $at, .L7F0B94D8 -/* 0EE054 7F0B9524 00C02025 */ move $a0, $a2 -.L7F0B9528: -/* 0EE058 7F0B9528 87AD0038 */ lh $t5, 0x38($sp) -/* 0EE05C 7F0B952C 87AE003A */ lh $t6, 0x3a($sp) -/* 0EE060 7F0B9530 C524000C */ lwc1 $f4, 0xc($t1) -/* 0EE064 7F0B9534 448D3000 */ mtc1 $t5, $f6 -/* 0EE068 7F0B9538 448E9000 */ mtc1 $t6, $f18 -/* 0EE06C 7F0B953C 87AF003C */ lh $t7, 0x3c($sp) -/* 0EE070 7F0B9540 46803220 */ cvt.s.w $f8, $f6 -/* 0EE074 7F0B9544 87B8003E */ lh $t8, 0x3e($sp) -/* 0EE078 7F0B9548 87B90040 */ lh $t9, 0x40($sp) -/* 0EE07C 7F0B954C 87AB0042 */ lh $t3, 0x42($sp) -/* 0EE080 7F0B9550 468091A0 */ cvt.s.w $f6, $f18 -/* 0EE084 7F0B9554 46082280 */ add.s $f10, $f4, $f8 -/* 0EE088 7F0B9558 E50A0038 */ swc1 $f10, 0x38($t0) -/* 0EE08C 7F0B955C C5300010 */ lwc1 $f16, 0x10($t1) -/* 0EE090 7F0B9560 448F5000 */ mtc1 $t7, $f10 -/* 0EE094 7F0B9564 46068100 */ add.s $f4, $f16, $f6 -/* 0EE098 7F0B9568 468054A0 */ cvt.s.w $f18, $f10 -/* 0EE09C 7F0B956C E504003C */ swc1 $f4, 0x3c($t0) -/* 0EE0A0 7F0B9570 C5280014 */ lwc1 $f8, 0x14($t1) -/* 0EE0A4 7F0B9574 44982000 */ mtc1 $t8, $f4 -/* 0EE0A8 7F0B9578 46124400 */ add.s $f16, $f8, $f18 -/* 0EE0AC 7F0B957C 468022A0 */ cvt.s.w $f10, $f4 -/* 0EE0B0 7F0B9580 E5100040 */ swc1 $f16, 0x40($t0) -/* 0EE0B4 7F0B9584 C526000C */ lwc1 $f6, 0xc($t1) -/* 0EE0B8 7F0B9588 44998000 */ mtc1 $t9, $f16 -/* 0EE0BC 7F0B958C 460A3200 */ add.s $f8, $f6, $f10 -/* 0EE0C0 7F0B9590 46808120 */ cvt.s.w $f4, $f16 -/* 0EE0C4 7F0B9594 E5080044 */ swc1 $f8, 0x44($t0) -/* 0EE0C8 7F0B9598 C5320010 */ lwc1 $f18, 0x10($t1) -/* 0EE0CC 7F0B959C 448B4000 */ mtc1 $t3, $f8 -/* 0EE0D0 7F0B95A0 46049180 */ add.s $f6, $f18, $f4 -/* 0EE0D4 7F0B95A4 46804420 */ cvt.s.w $f16, $f8 -/* 0EE0D8 7F0B95A8 E5060048 */ swc1 $f6, 0x48($t0) -/* 0EE0DC 7F0B95AC C52A0014 */ lwc1 $f10, 0x14($t1) -/* 0EE0E0 7F0B95B0 46105480 */ add.s $f18, $f10, $f16 -/* 0EE0E4 7F0B95B4 15400003 */ bnez $t2, .L7F0B95C4 -/* 0EE0E8 7F0B95B8 E512004C */ swc1 $f18, 0x4c($t0) -/* 0EE0EC 7F0B95BC 0FC2D971 */ jal delete_room_data -/* 0EE0F0 7F0B95C0 02002025 */ move $a0, $s0 -.L7F0B95C4: -/* 0EE0F4 7F0B95C4 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0B95C8: -/* 0EE0F8 7F0B95C8 8FB00018 */ lw $s0, 0x18($sp) -/* 0EE0FC 7F0B95CC 27BD0050 */ addiu $sp, $sp, 0x50 -/* 0EE100 7F0B95D0 03E00008 */ jr $ra -/* 0EE104 7F0B95D4 00000000 */ nop -) -#endif +void sub_GAME_7F0B95D8(s32 roomID) +{ + s32 numupdated = 0; + s32 i; + s32 j; + s32 k; + f32 value; - - -#ifdef NONMATCHING -void sub_GAME_7F0B95D8(s32 arg0) { - void *temp_a2; - void *temp_t8; - s32 temp_t0; - void *temp_a2_2; - s32 temp_a1; - void *phi_v1; - void *phi_a2; - s32 phi_a1; - s32 phi_t0; - void *phi_t2; - - // Node 0 - phi_v1 = g_BgPortals; - if (*g_BgPortals != 0) + for (i = 0; g_BgPortals[i].offset_portal != NULL; i++) { -loop_1: - // Node 1 - if ((arg0 == phi_v1->unk4) || (arg0 == phi_v1->unk5)) + if ((roomID == g_BgPortals[i].connectedRoom1) || (roomID == g_BgPortals[i].connectedRoom2)) { - // Node 3 - temp_a2 = *phi_v1; - if (*temp_a2 > 0) + for (j = 0; j < g_BgPortals[i].offset_portal->numPoints; j++) { - // Node 4 - phi_a1 = 0; - phi_a2 = temp_a2; -loop_5: - // Node 5 - phi_t0 = 0; - phi_t2 = ((arg0 * 0x50) + &g_BgRoomInfo); -loop_6: - // Node 6 - temp_t8 = ((phi_a2 + (((phi_a1 * 4) - phi_a1) * 4)) + phi_t0); - temp_t0 = (phi_t0 + 4); - if (temp_t8->unk4 < phi_t2->unk38) + for (k = 0; k < 3; k++) { - // Node 7 - phi_t2->unk38 = (f32) temp_t8->unk4; - } - // Node 8 - if (phi_t2->unk44 < temp_t8->unk4) - { - // Node 9 - phi_t2->unk44 = (f32) temp_t8->unk4; - } - // Node 10 - temp_a2_2 = *phi_v1; - phi_a2 = temp_a2_2; - phi_t0 = temp_t0; - phi_t2 = (phi_t2 + 4); - if (temp_t0 != 0xc) - { - goto loop_6; - } - // Node 11 - temp_a1 = (phi_a1 + 1); - phi_a1 = temp_a1; - phi_a2 = temp_a2_2; - if (temp_a1 < *temp_a2_2) - { - goto loop_5; + value = (&g_BgPortals[i].offset_portal->point)[j].f[k]; + + if (value < g_BgRoomInfo[roomID].minbounds.f[k]) + { + g_BgRoomInfo[roomID].minbounds.f[k] = value; + numupdated++; + } + + if (g_BgRoomInfo[roomID].maxbounds.f[k] < value) + { + g_BgRoomInfo[roomID].maxbounds.f[k] = value; + numupdated++; + } } } } - else - { - - } - // Node 12 - phi_v1 = (phi_v1 + 8); - if (phi_v1->unk8 != 0) - { - goto loop_1; - } } - // Node 13 - return 0; + + if (numupdated); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B95D8 -/* 0EE108 7F0B95D8 3C058008 */ lui $a1, %hi(g_BgPortals) -/* 0EE10C 7F0B95DC 8CA5FF80 */ lw $a1, %lo(g_BgPortals)($a1) -/* 0EE110 7F0B95E0 00001025 */ move $v0, $zero -/* 0EE114 7F0B95E4 240B000C */ li $t3, 12 -/* 0EE118 7F0B95E8 8CAE0000 */ lw $t6, ($a1) -/* 0EE11C 7F0B95EC 00A01825 */ move $v1, $a1 -/* 0EE120 7F0B95F0 11C00034 */ beqz $t6, .L7F0B96C4 -/* 0EE124 7F0B95F4 00000000 */ nop -/* 0EE128 7F0B95F8 906F0004 */ lbu $t7, 4($v1) -.L7F0B95FC: -/* 0EE12C 7F0B95FC 508F0005 */ beql $a0, $t7, .L7F0B9614 -/* 0EE130 7F0B9600 8C660000 */ lw $a2, ($v1) -/* 0EE134 7F0B9604 90780005 */ lbu $t8, 5($v1) -/* 0EE138 7F0B9608 5498002B */ bnel $a0, $t8, .L7F0B96B8 -/* 0EE13C 7F0B960C 8C790008 */ lw $t9, 8($v1) -/* 0EE140 7F0B9610 8C660000 */ lw $a2, ($v1) -.L7F0B9614: -/* 0EE144 7F0B9614 00046080 */ sll $t4, $a0, 2 -/* 0EE148 7F0B9618 01846021 */ addu $t4, $t4, $a0 -/* 0EE14C 7F0B961C 90D90000 */ lbu $t9, ($a2) -/* 0EE150 7F0B9620 000C6100 */ sll $t4, $t4, 4 -/* 0EE154 7F0B9624 00002825 */ move $a1, $zero -/* 0EE158 7F0B9628 1B200022 */ blez $t9, .L7F0B96B4 -/* 0EE15C 7F0B962C 3C0D8004 */ lui $t5, %hi(g_BgRoomInfo) -/* 0EE160 7F0B9630 25AD1414 */ addiu $t5, %lo(g_BgRoomInfo) # addiu $t5, $t5, 0x1414 -/* 0EE164 7F0B9634 018D4821 */ addu $t1, $t4, $t5 -/* 0EE168 7F0B9638 00004025 */ move $t0, $zero -.L7F0B963C: -/* 0EE16C 7F0B963C 01205025 */ move $t2, $t1 -.L7F0B9640: -/* 0EE170 7F0B9640 00057080 */ sll $t6, $a1, 2 -/* 0EE174 7F0B9644 01C57023 */ subu $t6, $t6, $a1 -/* 0EE178 7F0B9648 000E7080 */ sll $t6, $t6, 2 -/* 0EE17C 7F0B964C 00CE7821 */ addu $t7, $a2, $t6 -/* 0EE180 7F0B9650 01E8C021 */ addu $t8, $t7, $t0 -/* 0EE184 7F0B9654 C7000004 */ lwc1 $f0, 4($t8) -/* 0EE188 7F0B9658 C5440038 */ lwc1 $f4, 0x38($t2) -/* 0EE18C 7F0B965C 25080004 */ addiu $t0, $t0, 4 -/* 0EE190 7F0B9660 4604003C */ c.lt.s $f0, $f4 -/* 0EE194 7F0B9664 00000000 */ nop -/* 0EE198 7F0B9668 45020004 */ bc1fl .L7F0B967C -/* 0EE19C 7F0B966C C5460044 */ lwc1 $f6, 0x44($t2) -/* 0EE1A0 7F0B9670 E5400038 */ swc1 $f0, 0x38($t2) -/* 0EE1A4 7F0B9674 24420001 */ addiu $v0, $v0, 1 -/* 0EE1A8 7F0B9678 C5460044 */ lwc1 $f6, 0x44($t2) -.L7F0B967C: -/* 0EE1AC 7F0B967C 4600303C */ c.lt.s $f6, $f0 -/* 0EE1B0 7F0B9680 00000000 */ nop -/* 0EE1B4 7F0B9684 45020004 */ bc1fl .L7F0B9698 -/* 0EE1B8 7F0B9688 254A0004 */ addiu $t2, $t2, 4 -/* 0EE1BC 7F0B968C E5400044 */ swc1 $f0, 0x44($t2) -/* 0EE1C0 7F0B9690 24420001 */ addiu $v0, $v0, 1 -/* 0EE1C4 7F0B9694 254A0004 */ addiu $t2, $t2, 4 -.L7F0B9698: -/* 0EE1C8 7F0B9698 150BFFE9 */ bne $t0, $t3, .L7F0B9640 -/* 0EE1CC 7F0B969C 8C660000 */ lw $a2, ($v1) -/* 0EE1D0 7F0B96A0 90C70000 */ lbu $a3, ($a2) -/* 0EE1D4 7F0B96A4 24A50001 */ addiu $a1, $a1, 1 -/* 0EE1D8 7F0B96A8 00A7082A */ slt $at, $a1, $a3 -/* 0EE1DC 7F0B96AC 5420FFE3 */ bnezl $at, .L7F0B963C -/* 0EE1E0 7F0B96B0 00004025 */ move $t0, $zero -.L7F0B96B4: -/* 0EE1E4 7F0B96B4 8C790008 */ lw $t9, 8($v1) -.L7F0B96B8: -/* 0EE1E8 7F0B96B8 24630008 */ addiu $v1, $v1, 8 -/* 0EE1EC 7F0B96BC 5720FFCF */ bnezl $t9, .L7F0B95FC -/* 0EE1F0 7F0B96C0 906F0004 */ lbu $t7, 4($v1) -.L7F0B96C4: -/* 0EE1F4 7F0B96C4 03E00008 */ jr $ra -/* 0EE1F8 7F0B96C8 00000000 */ nop -) -#endif +// This assert belongs somewhere in the function +//#ifdef +//assert(levelportals[p].p->n>=3) +//#endif +void sub_GAME_7F0B96CC(s32 portalnum, f32 *out) +{ + f32 sp6c[3]; + f32 sp60[3]; + bg_portal_entry *portal; + f32 min; + f32 max; + f32 dot; + s32 i; + for (i = 0; i < 3; i++) + { + sp6c[i] = (&g_BgPortals[portalnum].offset_portal->point)[0].f[i] - (&g_BgPortals[portalnum].offset_portal->point)[1].f[i]; + } + for (i = 0; i < 3; i++) + { + sp60[i] = (&g_BgPortals[portalnum].offset_portal->point)[2].f[i] - (&g_BgPortals[portalnum].offset_portal->point)[1].f[i]; + } -#ifdef NONMATCHING -void sub_GAME_7F0B96CC(int p) { - #ifdef - assert(levelportals[p].p->n>=3) - #endif + out[0] = (sp6c[1] * sp60[2]) - (sp6c[2] * sp60[1]); + out[1] = (sp6c[2] * sp60[0]) - (sp6c[0] * sp60[2]); + out[2] = (sp6c[0] * sp60[1]) - (sp6c[1] * sp60[0]); + + dot = sqrtf(((out[0] * out[0]) + (out[1] * out[1])) + (out[2] * out[2])); + + if (dot != 0.0f) + { + dot = 1.0f / dot; + } + + out[0] *= dot; + out[1] *= dot; + out[2] *= dot; + + portal = g_BgPortals[portalnum].offset_portal; + + min = 3.4028235e38f; + max = -3.4028235e38f; + + for (i = 0; i < portal->numPoints; i++) + { + min = (((((&portal->point)[i].f[0] * out[0]) + ((&portal->point)[i].f[1] * out[1])) + ((&portal->point)[i].f[2] * out[2])) < min) ? ((((&portal->point)[i].f[0] * out[0]) + ((&portal->point)[i].f[1] * out[1])) + ((&portal->point)[i].f[2] * out[2])) : (min); + max = (((((&portal->point)[i].f[0] * out[0]) + ((&portal->point)[i].f[1] * out[1])) + ((&portal->point)[i].f[2] * out[2])) > max) ? ((((&portal->point)[i].f[0] * out[0]) + ((&portal->point)[i].f[1] * out[1])) + ((&portal->point)[i].f[2] * out[2])) : (max); + } + + out[3] = min; + out[4] = max; + + if (dot); } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80058D54 -.word 0x7f7fffff /*3.4028235e38*/ -glabel D_80058D58 -.word 0xff7fffff /*-3.4028235e38*/ -.text -glabel sub_GAME_7F0B96CC -/* 0EE1FC 7F0B96CC 27BDFF88 */ addiu $sp, $sp, -0x78 -/* 0EE200 7F0B96D0 3C0E8008 */ lui $t6, %hi(g_BgPortals) -/* 0EE204 7F0B96D4 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) -/* 0EE208 7F0B96D8 000440C0 */ sll $t0, $a0, 3 -/* 0EE20C 7F0B96DC AFB00020 */ sw $s0, 0x20($sp) -/* 0EE210 7F0B96E0 00A08025 */ move $s0, $a1 -/* 0EE214 7F0B96E4 AFBF0024 */ sw $ra, 0x24($sp) -/* 0EE218 7F0B96E8 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0EE21C 7F0B96EC 27A40078 */ addiu $a0, $sp, 0x78 -/* 0EE220 7F0B96F0 27A6006C */ addiu $a2, $sp, 0x6c -/* 0EE224 7F0B96F4 00001025 */ move $v0, $zero -/* 0EE228 7F0B96F8 01C83821 */ addu $a3, $t6, $t0 -/* 0EE22C 7F0B96FC 24C60004 */ addiu $a2, $a2, 4 -/* 0EE230 7F0B9700 00C4082B */ sltu $at, $a2, $a0 -/* 0EE234 7F0B9704 1020000B */ beqz $at, .L7F0B9734 -/* 0EE238 7F0B9708 8CEF0000 */ lw $t7, ($a3) -.L7F0B970C: -/* 0EE23C 7F0B970C 01E21821 */ addu $v1, $t7, $v0 -/* 0EE240 7F0B9710 C4740004 */ lwc1 $f20, 4($v1) -/* 0EE244 7F0B9714 C4720010 */ lwc1 $f18, 0x10($v1) -/* 0EE248 7F0B9718 24C60004 */ addiu $a2, $a2, 4 -/* 0EE24C 7F0B971C 00C4082B */ sltu $at, $a2, $a0 -/* 0EE250 7F0B9720 4612A481 */ sub.s $f18, $f20, $f18 -/* 0EE254 7F0B9724 24420004 */ addiu $v0, $v0, 4 -/* 0EE258 7F0B9728 E4D2FFF8 */ swc1 $f18, -8($a2) -/* 0EE25C 7F0B972C 1420FFF7 */ bnez $at, .L7F0B970C -/* 0EE260 7F0B9730 8CEF0000 */ lw $t7, ($a3) -.L7F0B9734: -/* 0EE264 7F0B9734 01E21821 */ addu $v1, $t7, $v0 -/* 0EE268 7F0B9738 C4740004 */ lwc1 $f20, 4($v1) -/* 0EE26C 7F0B973C C4720010 */ lwc1 $f18, 0x10($v1) -/* 0EE270 7F0B9740 24420004 */ addiu $v0, $v0, 4 -/* 0EE274 7F0B9744 4612A481 */ sub.s $f18, $f20, $f18 -/* 0EE278 7F0B9748 E4D2FFFC */ swc1 $f18, -4($a2) -/* 0EE27C 7F0B974C 00001025 */ move $v0, $zero -/* 0EE280 7F0B9750 27A40060 */ addiu $a0, $sp, 0x60 -/* 0EE284 7F0B9754 27A5006C */ addiu $a1, $sp, 0x6c -/* 0EE288 7F0B9758 24840004 */ addiu $a0, $a0, 4 -/* 0EE28C 7F0B975C 0085082B */ sltu $at, $a0, $a1 -/* 0EE290 7F0B9760 1020000B */ beqz $at, .L7F0B9790 -/* 0EE294 7F0B9764 8CF80000 */ lw $t8, ($a3) -.L7F0B9768: -/* 0EE298 7F0B9768 03021821 */ addu $v1, $t8, $v0 -/* 0EE29C 7F0B976C C474001C */ lwc1 $f20, 0x1c($v1) -/* 0EE2A0 7F0B9770 C4720010 */ lwc1 $f18, 0x10($v1) -/* 0EE2A4 7F0B9774 24840004 */ addiu $a0, $a0, 4 -/* 0EE2A8 7F0B9778 0085082B */ sltu $at, $a0, $a1 -/* 0EE2AC 7F0B977C 4612A481 */ sub.s $f18, $f20, $f18 -/* 0EE2B0 7F0B9780 24420004 */ addiu $v0, $v0, 4 -/* 0EE2B4 7F0B9784 E492FFF8 */ swc1 $f18, -8($a0) -/* 0EE2B8 7F0B9788 1420FFF7 */ bnez $at, .L7F0B9768 -/* 0EE2BC 7F0B978C 8CF80000 */ lw $t8, ($a3) -.L7F0B9790: -/* 0EE2C0 7F0B9790 03021821 */ addu $v1, $t8, $v0 -/* 0EE2C4 7F0B9794 C474001C */ lwc1 $f20, 0x1c($v1) -/* 0EE2C8 7F0B9798 C4720010 */ lwc1 $f18, 0x10($v1) -/* 0EE2CC 7F0B979C 24420004 */ addiu $v0, $v0, 4 -/* 0EE2D0 7F0B97A0 4612A481 */ sub.s $f18, $f20, $f18 -/* 0EE2D4 7F0B97A4 E492FFFC */ swc1 $f18, -4($a0) -/* 0EE2D8 7F0B97A8 C7A80070 */ lwc1 $f8, 0x70($sp) -/* 0EE2DC 7F0B97AC C7AA0068 */ lwc1 $f10, 0x68($sp) -/* 0EE2E0 7F0B97B0 C7A60064 */ lwc1 $f6, 0x64($sp) -/* 0EE2E4 7F0B97B4 460A4102 */ mul.s $f4, $f8, $f10 -/* 0EE2E8 7F0B97B8 C7A80074 */ lwc1 $f8, 0x74($sp) -/* 0EE2EC 7F0B97BC 46083282 */ mul.s $f10, $f6, $f8 -/* 0EE2F0 7F0B97C0 460A2181 */ sub.s $f6, $f4, $f10 -/* 0EE2F4 7F0B97C4 E6060000 */ swc1 $f6, ($s0) -/* 0EE2F8 7F0B97C8 C7A40060 */ lwc1 $f4, 0x60($sp) -/* 0EE2FC 7F0B97CC C7A80074 */ lwc1 $f8, 0x74($sp) -/* 0EE300 7F0B97D0 C7A60068 */ lwc1 $f6, 0x68($sp) -/* 0EE304 7F0B97D4 C6100000 */ lwc1 $f16, ($s0) -/* 0EE308 7F0B97D8 46044282 */ mul.s $f10, $f8, $f4 -/* 0EE30C 7F0B97DC C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 0EE310 7F0B97E0 46083102 */ mul.s $f4, $f6, $f8 -/* 0EE314 7F0B97E4 46045181 */ sub.s $f6, $f10, $f4 -/* 0EE318 7F0B97E8 E6060004 */ swc1 $f6, 4($s0) -/* 0EE31C 7F0B97EC C7AA0064 */ lwc1 $f10, 0x64($sp) -/* 0EE320 7F0B97F0 C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 0EE324 7F0B97F4 C7A60060 */ lwc1 $f6, 0x60($sp) -/* 0EE328 7F0B97F8 C6120004 */ lwc1 $f18, 4($s0) -/* 0EE32C 7F0B97FC 460A4102 */ mul.s $f4, $f8, $f10 -/* 0EE330 7F0B9800 C7A80070 */ lwc1 $f8, 0x70($sp) -/* 0EE334 7F0B9804 46083282 */ mul.s $f10, $f6, $f8 -/* 0EE338 7F0B9808 460A2181 */ sub.s $f6, $f4, $f10 -/* 0EE33C 7F0B980C 46108202 */ mul.s $f8, $f16, $f16 -/* 0EE340 7F0B9810 00000000 */ nop -/* 0EE344 7F0B9814 46129102 */ mul.s $f4, $f18, $f18 -/* 0EE348 7F0B9818 E6060008 */ swc1 $f6, 8($s0) -/* 0EE34C 7F0B981C C60E0008 */ lwc1 $f14, 8($s0) -/* 0EE350 7F0B9820 AFA80040 */ sw $t0, 0x40($sp) -/* 0EE354 7F0B9824 460E7182 */ mul.s $f6, $f14, $f14 -/* 0EE358 7F0B9828 46044280 */ add.s $f10, $f8, $f4 -/* 0EE35C 7F0B982C 0C007DF8 */ jal sqrtf -/* 0EE360 7F0B9830 460A3300 */ add.s $f12, $f6, $f10 -/* 0EE364 7F0B9834 44804000 */ mtc1 $zero, $f8 -/* 0EE368 7F0B9838 8FA80040 */ lw $t0, 0x40($sp) -/* 0EE36C 7F0B983C 46000506 */ mov.s $f20, $f0 -/* 0EE370 7F0B9840 46080032 */ c.eq.s $f0, $f8 -/* 0EE374 7F0B9844 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0EE378 7F0B9848 00001825 */ move $v1, $zero -/* 0EE37C 7F0B984C 45030005 */ bc1tl .L7F0B9864 -/* 0EE380 7F0B9850 C6060000 */ lwc1 $f6, ($s0) -/* 0EE384 7F0B9854 44812000 */ mtc1 $at, $f4 -/* 0EE388 7F0B9858 00000000 */ nop -/* 0EE38C 7F0B985C 46002503 */ div.s $f20, $f4, $f0 -/* 0EE390 7F0B9860 C6060000 */ lwc1 $f6, ($s0) -.L7F0B9864: -/* 0EE394 7F0B9864 C6080004 */ lwc1 $f8, 4($s0) -/* 0EE398 7F0B9868 3C198008 */ lui $t9, %hi(g_BgPortals) -/* 0EE39C 7F0B986C 46143282 */ mul.s $f10, $f6, $f20 -/* 0EE3A0 7F0B9870 C6060008 */ lwc1 $f6, 8($s0) -/* 0EE3A4 7F0B9874 3C018006 */ lui $at, %hi(D_80058D54) -/* 0EE3A8 7F0B9878 46144102 */ mul.s $f4, $f8, $f20 -/* 0EE3AC 7F0B987C E60A0000 */ swc1 $f10, ($s0) -/* 0EE3B0 7F0B9880 46143282 */ mul.s $f10, $f6, $f20 -/* 0EE3B4 7F0B9884 E6040004 */ swc1 $f4, 4($s0) -/* 0EE3B8 7F0B9888 E60A0008 */ swc1 $f10, 8($s0) -/* 0EE3BC 7F0B988C 8F39FF80 */ lw $t9, %lo(g_BgPortals)($t9) -/* 0EE3C0 7F0B9890 C4228D54 */ lwc1 $f2, %lo(D_80058D54)($at) -/* 0EE3C4 7F0B9894 3C018006 */ lui $at, %hi(D_80058D58) -/* 0EE3C8 7F0B9898 03284821 */ addu $t1, $t9, $t0 -/* 0EE3CC 7F0B989C 8D250000 */ lw $a1, ($t1) -/* 0EE3D0 7F0B98A0 C42C8D58 */ lwc1 $f12, %lo(D_80058D58)($at) -/* 0EE3D4 7F0B98A4 90A60000 */ lbu $a2, ($a1) -/* 0EE3D8 7F0B98A8 00A01025 */ move $v0, $a1 -/* 0EE3DC 7F0B98AC 18C0001C */ blez $a2, .L7F0B9920 -/* 0EE3E0 7F0B98B0 00062080 */ sll $a0, $a2, 2 -/* 0EE3E4 7F0B98B4 00862023 */ subu $a0, $a0, $a2 -/* 0EE3E8 7F0B98B8 00042080 */ sll $a0, $a0, 2 -/* 0EE3EC 7F0B98BC C60E0008 */ lwc1 $f14, 8($s0) -/* 0EE3F0 7F0B98C0 C6100000 */ lwc1 $f16, ($s0) -/* 0EE3F4 7F0B98C4 C6120004 */ lwc1 $f18, 4($s0) -.L7F0B98C8: -/* 0EE3F8 7F0B98C8 C4480004 */ lwc1 $f8, 4($v0) -/* 0EE3FC 7F0B98CC C4460008 */ lwc1 $f6, 8($v0) -/* 0EE400 7F0B98D0 2463000C */ addiu $v1, $v1, 0xc -/* 0EE404 7F0B98D4 46104102 */ mul.s $f4, $f8, $f16 -/* 0EE408 7F0B98D8 0064082A */ slt $at, $v1, $a0 -/* 0EE40C 7F0B98DC 46123282 */ mul.s $f10, $f6, $f18 -/* 0EE410 7F0B98E0 C446000C */ lwc1 $f6, 0xc($v0) -/* 0EE414 7F0B98E4 460A2200 */ add.s $f8, $f4, $f10 -/* 0EE418 7F0B98E8 46067102 */ mul.s $f4, $f14, $f6 -/* 0EE41C 7F0B98EC 46082000 */ add.s $f0, $f4, $f8 -/* 0EE420 7F0B98F0 4602003C */ c.lt.s $f0, $f2 -/* 0EE424 7F0B98F4 00000000 */ nop -/* 0EE428 7F0B98F8 45020003 */ bc1fl .L7F0B9908 -/* 0EE42C 7F0B98FC 4600603C */ c.lt.s $f12, $f0 -/* 0EE430 7F0B9900 46000086 */ mov.s $f2, $f0 -/* 0EE434 7F0B9904 4600603C */ c.lt.s $f12, $f0 -.L7F0B9908: -/* 0EE438 7F0B9908 00000000 */ nop -/* 0EE43C 7F0B990C 45000002 */ bc1f .L7F0B9918 -/* 0EE440 7F0B9910 00000000 */ nop -/* 0EE444 7F0B9914 46000306 */ mov.s $f12, $f0 -.L7F0B9918: -/* 0EE448 7F0B9918 1420FFEB */ bnez $at, .L7F0B98C8 -/* 0EE44C 7F0B991C 2442000C */ addiu $v0, $v0, 0xc -.L7F0B9920: -/* 0EE450 7F0B9920 E602000C */ swc1 $f2, 0xc($s0) -/* 0EE454 7F0B9924 E60C0010 */ swc1 $f12, 0x10($s0) -/* 0EE458 7F0B9928 8FBF0024 */ lw $ra, 0x24($sp) -/* 0EE45C 7F0B992C 8FB00020 */ lw $s0, 0x20($sp) -/* 0EE460 7F0B9930 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0EE464 7F0B9934 03E00008 */ jr $ra -/* 0EE468 7F0B9938 27BD0078 */ addiu $sp, $sp, 0x78 -) -#endif - - - /** @@ -11232,111 +4894,23 @@ s32 sub_GAME_7F0B993C(s32 arg0) } +f32 sub_GAME_7F0B9990(s32 portalnum) +{ + s32 value; + s32 shift; + f32 result; + value = g_BgPortals[portalnum].controlbytes2; + shift = (value >> 4) & 0xf; + result = (value & 0xf) * 0.25f; - - -#ifdef NONMATCHING -f32 sub_GAME_7F0B9990(s32 arg0) { - void *temp_t8; - s32 temp_t9; - s32 temp_a0; - f32 temp_f2; - s32 temp_v1; - f32 temp_f2_6; - f32 temp_f2_2; - s32 temp_v1_2; - f32 temp_f2_3; - f32 temp_f2_4; - f32 temp_f2_5; - s32 phi_v1; - s32 phi_v1_2; - f32 phi_f2; - f32 phi_f2_2; - f32 phi_f2_3; - - // Node 0 - temp_t8 = (g_BgPortals + (arg0 * 8)); - temp_t9 = (((s32) temp_t8->unk7 >> 4) & 0xf); - temp_a0 = -(s32) (temp_t9 & 3); - temp_f2 = ((f32) (temp_t8->unk7 & 0xf) * 0.25f); - phi_f2 = temp_f2; - if (temp_t9 != 0) - { - // Node 1 - phi_v1 = temp_t9; - phi_v1_2 = temp_t9; - phi_f2_2 = temp_f2; - phi_f2_3 = temp_f2; - if (((temp_a0 == 0) || ((temp_a0 + temp_t9) != temp_v1)) || (temp_v1 != 0)) - { -loop_4: - // Node 4 - temp_f2_2 = (phi_f2_2 + phi_f2_2); - temp_v1_2 = (phi_v1_2 + -4); - temp_f2_3 = (temp_f2_2 + temp_f2_2); - temp_f2_4 = (temp_f2_3 + temp_f2_3); - temp_f2_5 = (temp_f2_4 + temp_f2_4); - phi_v1_2 = temp_v1_2; - phi_f2 = temp_f2_5; - phi_f2_2 = temp_f2_5; - if (temp_v1_2 != 0) - { - goto loop_4; - } - } - else - { - - } + while (shift != 0) { + result += result; + shift--; } - // Node 5 - return phi_f2; + + return result; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B9990 -/* 0EE4C0 7F0B9990 3C0E8008 */ lui $t6, %hi(g_BgPortals) -/* 0EE4C4 7F0B9994 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) -/* 0EE4C8 7F0B9998 000478C0 */ sll $t7, $a0, 3 -/* 0EE4CC 7F0B999C 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 0EE4D0 7F0B99A0 01CFC021 */ addu $t8, $t6, $t7 -/* 0EE4D4 7F0B99A4 93020007 */ lbu $v0, 7($t8) -/* 0EE4D8 7F0B99A8 44814000 */ mtc1 $at, $f8 -/* 0EE4DC 7F0B99AC 3048000F */ andi $t0, $v0, 0xf -/* 0EE4E0 7F0B99B0 44882000 */ mtc1 $t0, $f4 -/* 0EE4E4 7F0B99B4 00022903 */ sra $a1, $v0, 4 -/* 0EE4E8 7F0B99B8 30B9000F */ andi $t9, $a1, 0xf -/* 0EE4EC 7F0B99BC 468021A0 */ cvt.s.w $f6, $f4 -/* 0EE4F0 7F0B99C0 33240003 */ andi $a0, $t9, 3 -/* 0EE4F4 7F0B99C4 03201825 */ move $v1, $t9 -/* 0EE4F8 7F0B99C8 00042023 */ negu $a0, $a0 -/* 0EE4FC 7F0B99CC 46083082 */ mul.s $f2, $f6, $f8 -/* 0EE500 7F0B99D0 1320000E */ beqz $t9, .L7F0B9A0C -/* 0EE504 7F0B99D4 00000000 */ nop -/* 0EE508 7F0B99D8 10800006 */ beqz $a0, .L7F0B99F4 -/* 0EE50C 7F0B99DC 00991021 */ addu $v0, $a0, $t9 -.L7F0B99E0: -/* 0EE510 7F0B99E0 2463FFFF */ addiu $v1, $v1, -1 -/* 0EE514 7F0B99E4 1443FFFE */ bne $v0, $v1, .L7F0B99E0 -/* 0EE518 7F0B99E8 46021080 */ add.s $f2, $f2, $f2 -/* 0EE51C 7F0B99EC 10600007 */ beqz $v1, .L7F0B9A0C -/* 0EE520 7F0B99F0 00000000 */ nop -.L7F0B99F4: -/* 0EE524 7F0B99F4 46021080 */ add.s $f2, $f2, $f2 -/* 0EE528 7F0B99F8 2463FFFC */ addiu $v1, $v1, -4 -/* 0EE52C 7F0B99FC 46021080 */ add.s $f2, $f2, $f2 -/* 0EE530 7F0B9A00 46021080 */ add.s $f2, $f2, $f2 -/* 0EE534 7F0B9A04 1460FFFB */ bnez $v1, .L7F0B99F4 -/* 0EE538 7F0B9A08 46021080 */ add.s $f2, $f2, $f2 -.L7F0B9A0C: -/* 0EE53C 7F0B9A0C 03E00008 */ jr $ra -/* 0EE540 7F0B9A10 46001006 */ mov.s $f0, $f2 -) -#endif - - /** @@ -11350,119 +4924,59 @@ u8 bgGetDataPortalsControlBytes2(s32 p) } - - - -#ifdef NONMATCHING -s32 sub_GAME_7F0B9A2C(s32 p) +void sub_GAME_7F0B9A2C(s32 portalnum) { - byte byte2; + u8 value; + s32 upper; - if (g_BgPortals[p].controlbytes2 == -1) + value = g_BgPortals[portalnum].controlbytes2; + + if (value >= 0xff) { - byte2 = 0xff; + value = 0xff; } else { - byte2 = g_BgPortals[p].controlbytes2 + 1; - if (byte2 >> 4 != 0) + value++; + upper = (value >> 4) & 0xf; + + if (upper > 0) { - byte2 |= 8; + value |= 8; } } - g_BgPortals[p].controlbytes2 = byte2; - return; + + g_BgPortals[portalnum].controlbytes2 = value; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B9A2C -/* 0EE55C 7F0B9A2C 3C0E8008 */ lui $t6, %hi(g_BgPortals) -/* 0EE560 7F0B9A30 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) -/* 0EE564 7F0B9A34 000478C0 */ sll $t7, $a0, 3 -/* 0EE568 7F0B9A38 01CF1821 */ addu $v1, $t6, $t7 -/* 0EE56C 7F0B9A3C 90620007 */ lbu $v0, 7($v1) -/* 0EE570 7F0B9A40 284100FF */ slti $at, $v0, 0xff -/* 0EE574 7F0B9A44 14200003 */ bnez $at, .L7F0B9A54 -/* 0EE578 7F0B9A48 24420001 */ addiu $v0, $v0, 1 -/* 0EE57C 7F0B9A4C 10000009 */ b .L7F0B9A74 -/* 0EE580 7F0B9A50 240200FF */ li $v0, 255 -.L7F0B9A54: -/* 0EE584 7F0B9A54 305800FF */ andi $t8, $v0, 0xff -/* 0EE588 7F0B9A58 0018C903 */ sra $t9, $t8, 4 -/* 0EE58C 7F0B9A5C 3328000F */ andi $t0, $t9, 0xf -/* 0EE590 7F0B9A60 19000004 */ blez $t0, .L7F0B9A74 -/* 0EE594 7F0B9A64 03001025 */ move $v0, $t8 -/* 0EE598 7F0B9A68 37020008 */ ori $v0, $t8, 8 -/* 0EE59C 7F0B9A6C 304900FF */ andi $t1, $v0, 0xff -/* 0EE5A0 7F0B9A70 01201025 */ move $v0, $t1 -.L7F0B9A74: -/* 0EE5A4 7F0B9A74 03E00008 */ jr $ra -/* 0EE5A8 7F0B9A78 A0620007 */ sb $v0, 7($v1) -) -#endif - - - -#ifdef NONMATCHING -s32 sub_GAME_7F0B9A7C(s32 p) +void sub_GAME_7F0B9A7C(s32 portalnum) { - if (g_BgPortals[p].controlbytes2 >> 4 == 0) + u8 value; + s32 temp; + + value = g_BgPortals[portalnum].controlbytes2; + temp = value; + + if (((value >> 4) & 0xf) == 0) { - byte22 = g_BgPortals[p].controlbytes2; - if (byte2 != 0) + if (temp > 0) { - byte22 = g_BgPortals[p].controlbytes2 - 1; + value--; } } else { - byte22 = g_BgPortals[p].controlbytes2 - 1; - if ((g_BgPortals[p].controlbytes2 - 1 & 0xf) < 8) + value--; + + if ((value & 0xf) < 8) { - byte22 = g_BgPortals[p].controlbytes2 - 9; + value -= 8; } } - g_BgPortals[p].controlbytes2] = byte22; - return; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B9A7C -/* 0EE5AC 7F0B9A7C 3C0E8008 */ lui $t6, %hi(g_BgPortals) -/* 0EE5B0 7F0B9A80 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) -/* 0EE5B4 7F0B9A84 000478C0 */ sll $t7, $a0, 3 -/* 0EE5B8 7F0B9A88 01CF1821 */ addu $v1, $t6, $t7 -/* 0EE5BC 7F0B9A8C 90620007 */ lbu $v0, 7($v1) -/* 0EE5C0 7F0B9A90 0002C103 */ sra $t8, $v0, 4 -/* 0EE5C4 7F0B9A94 3319000F */ andi $t9, $t8, 0xf -/* 0EE5C8 7F0B9A98 17200007 */ bnez $t9, .L7F0B9AB8 -/* 0EE5CC 7F0B9A9C 00402825 */ move $a1, $v0 -/* 0EE5D0 7F0B9AA0 18A0000E */ blez $a1, .L7F0B9ADC -/* 0EE5D4 7F0B9AA4 00000000 */ nop -/* 0EE5D8 7F0B9AA8 2442FFFF */ addiu $v0, $v0, -1 -/* 0EE5DC 7F0B9AAC 304800FF */ andi $t0, $v0, 0xff -/* 0EE5E0 7F0B9AB0 1000000A */ b .L7F0B9ADC -/* 0EE5E4 7F0B9AB4 01001025 */ move $v0, $t0 -.L7F0B9AB8: -/* 0EE5E8 7F0B9AB8 2442FFFF */ addiu $v0, $v0, -1 -/* 0EE5EC 7F0B9ABC 304900FF */ andi $t1, $v0, 0xff -/* 0EE5F0 7F0B9AC0 312A000F */ andi $t2, $t1, 0xf -/* 0EE5F4 7F0B9AC4 29410008 */ slti $at, $t2, 8 -/* 0EE5F8 7F0B9AC8 10200004 */ beqz $at, .L7F0B9ADC -/* 0EE5FC 7F0B9ACC 01201025 */ move $v0, $t1 -/* 0EE600 7F0B9AD0 2522FFF8 */ addiu $v0, $t1, -8 -/* 0EE604 7F0B9AD4 304B00FF */ andi $t3, $v0, 0xff -/* 0EE608 7F0B9AD8 01601025 */ move $v0, $t3 -.L7F0B9ADC: -/* 0EE60C 7F0B9ADC 03E00008 */ jr $ra -/* 0EE610 7F0B9AE0 A0620007 */ sb $v0, 7($v1) -) -#endif + g_BgPortals[portalnum].controlbytes2 = value; +} /** @@ -11512,7 +5026,6 @@ void bgClearDataPortalsControlBytes1Low2Bits(s32 index) } - /** * Swaps connected rooms. * @@ -11530,173 +5043,75 @@ s8 bgSwapConnectedRooms(s32 index) } +/** + * Address: 7F0B9B94 + */ +void bgOrderPortal(s32 portalnum) // canonical name +{ + coord3d room1centre; + coord3d room2centre; + struct PortalMetric metric; + f32 tmp; + f32 tmp2; + s32 roomnum2; + s32 swapped; + s32 roomnum1; + f32 tmp1; + roomnum1 = g_BgPortals[portalnum].connectedRoom1; + roomnum2 = g_BgPortals[portalnum].connectedRoom2; + bgGetRoomCenter(roomnum1, &room1centre); + bgGetRoomCenter(roomnum2, &room2centre); -#ifdef NONMATCHING -//bgorderPortal -f32 sub_GAME_7F0B9B94(s32 arg0) { - s32 sp24; - ?32 sp28; - f32 sp34; - f32 sp38; - f32 sp3C; - f32 sp48; - f32 sp54; - void *temp_v0; - f32 temp_f0; - f32 phi_f16; - f32 phi_f18; - f32 phi_f14; - s32 phi_v0; - f32 phi_f12; - f32 phi_return; + sub_GAME_7F0B96CC(portalnum, &metric); - // Node 0 - temp_v0 = (g_BgPortals + (arg0 * 8)); - sp28 = (?32) temp_v0->unk5; - sub_GAME_7F0B92B4(temp_v0->unk4, &sp54); - sub_GAME_7F0B92B4(sp28, &sp48); - sub_GAME_7F0B96CC(arg0, &sp34); //possible float return - #ifdef DEBUG - if (0.1 < local_50 - local_54) - { - iVar4 = osSyncPrintf("bg: bgOrderPortal: Portal \'%s\' not planar by %5.2f\n", bgDebPrintPORTALID(param_1), local_50 - local_54); + if (metric.max - metric.min < 0.1f) { +#ifdef DEBUG + osSyncPrintf("bg: bgOrderPortal: Portal '%s' not planar by %5.2f\n", bgDebPrintPORTALID(portalnum), metric.max - metric.min); +#endif } - #endif - phi_f16 = sp3C; - phi_f18 = sp34; - phi_f14 = sp40; - phi_v0 = 0; - phi_f12 = sp44; - if (sp44 < ((sp5C * sp3C) + ((sp34 * sp54) + (sp38 * sp58)))) - { - // Node 1 - sp24 = 1; - bgSwapConnectedRooms(sp44, sp40, arg0); - sp38 = (f32) -sp38; - phi_f16 = -sp3C; - phi_f18 = -sp34; - phi_f14 = -sp44; - phi_v0 = 1; - phi_f12 = -sp40; + tmp2 = metric.normal.f[2]; + tmp1 = metric.normal.f[0] * room1centre.f[0] + metric.normal.f[1] * room1centre.f[1] + tmp2 * room1centre.f[2]; + + swapped = 0; + + if (tmp1 > metric.max) { + swapped = 1; + + bgSwapConnectedRooms(portalnum); + + metric.normal.x = -metric.normal.x; + metric.normal.y = -metric.normal.y; + metric.normal.z = -metric.normal.z; + + tmp = metric.min; + metric.min = -metric.max; + metric.max = -tmp; } - // Node 2 - sp3C = (f32) phi_f16; - sp34 = (f32) phi_f18; - temp_f0 = ((sp50 * phi_f16) + ((phi_f18 * sp48) + (sp38 * sp4C))); - phi_return = temp_f0; - if (temp_f0 <= phi_f14) - { - // Node 3 - phi_return = temp_f0; - if (phi_v0 != 0) - { - // Node 4 - sp24 = (s32) phi_v0; - phi_return = bgSwapConnectedRooms(phi_f12, phi_f14, arg0); + + tmp2 = metric.normal.f[0] * room2centre.f[0] + metric.normal.f[1] * room2centre.f[1] + metric.normal.f[2] * room2centre.f[2]; + + if (tmp2 <= metric.min) { + if (swapped) { + bgSwapConnectedRooms(portalnum); } } - // Node 5 - return phi_return; + + if (swapped); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B9B94 -/* 0EE6C4 7F0B9B94 3C0E8008 */ lui $t6, %hi(g_BgPortals) -/* 0EE6C8 7F0B9B98 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) -/* 0EE6CC 7F0B9B9C 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0EE6D0 7F0B9BA0 0004C0C0 */ sll $t8, $a0, 3 -/* 0EE6D4 7F0B9BA4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0EE6D8 7F0B9BA8 AFA40060 */ sw $a0, 0x60($sp) -/* 0EE6DC 7F0B9BAC 01D81021 */ addu $v0, $t6, $t8 -/* 0EE6E0 7F0B9BB0 90590005 */ lbu $t9, 5($v0) -/* 0EE6E4 7F0B9BB4 90440004 */ lbu $a0, 4($v0) -/* 0EE6E8 7F0B9BB8 27A50054 */ addiu $a1, $sp, 0x54 -/* 0EE6EC 7F0B9BBC 0FC2E4AD */ jal sub_GAME_7F0B92B4 -/* 0EE6F0 7F0B9BC0 AFB90028 */ sw $t9, 0x28($sp) -/* 0EE6F4 7F0B9BC4 8FA40028 */ lw $a0, 0x28($sp) -/* 0EE6F8 7F0B9BC8 0FC2E4AD */ jal sub_GAME_7F0B92B4 -/* 0EE6FC 7F0B9BCC 27A50048 */ addiu $a1, $sp, 0x48 -/* 0EE700 7F0B9BD0 8FA40060 */ lw $a0, 0x60($sp) -/* 0EE704 7F0B9BD4 0FC2E5B3 */ jal sub_GAME_7F0B96CC -/* 0EE708 7F0B9BD8 27A50034 */ addiu $a1, $sp, 0x34 -/* 0EE70C 7F0B9BDC C7A40038 */ lwc1 $f4, 0x38($sp) -/* 0EE710 7F0B9BE0 C7A60058 */ lwc1 $f6, 0x58($sp) -/* 0EE714 7F0B9BE4 C7B20034 */ lwc1 $f18, 0x34($sp) -/* 0EE718 7F0B9BE8 C7AA0054 */ lwc1 $f10, 0x54($sp) -/* 0EE71C 7F0B9BEC 46062202 */ mul.s $f8, $f4, $f6 -/* 0EE720 7F0B9BF0 C7B0003C */ lwc1 $f16, 0x3c($sp) -/* 0EE724 7F0B9BF4 C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 0EE728 7F0B9BF8 460A9102 */ mul.s $f4, $f18, $f10 -/* 0EE72C 7F0B9BFC C7AA005C */ lwc1 $f10, 0x5c($sp) -/* 0EE730 7F0B9C00 C7AE0040 */ lwc1 $f14, 0x40($sp) -/* 0EE734 7F0B9C04 00001025 */ move $v0, $zero -/* 0EE738 7F0B9C08 8FA40060 */ lw $a0, 0x60($sp) -/* 0EE73C 7F0B9C0C 46082180 */ add.s $f6, $f4, $f8 -/* 0EE740 7F0B9C10 46105102 */ mul.s $f4, $f10, $f16 -/* 0EE744 7F0B9C14 46062080 */ add.s $f2, $f4, $f6 -/* 0EE748 7F0B9C18 4602603C */ c.lt.s $f12, $f2 -/* 0EE74C 7F0B9C1C 00000000 */ nop -/* 0EE750 7F0B9C20 45020012 */ bc1fl .L7F0B9C6C -/* 0EE754 7F0B9C24 C7A40038 */ lwc1 $f4, 0x38($sp) -/* 0EE758 7F0B9C28 24020001 */ li $v0, 1 -/* 0EE75C 7F0B9C2C 0FC2E6D9 */ jal bgSwapConnectedRooms -/* 0EE760 7F0B9C30 AFA20024 */ sw $v0, 0x24($sp) -/* 0EE764 7F0B9C34 C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 0EE768 7F0B9C38 C7A00040 */ lwc1 $f0, 0x40($sp) -/* 0EE76C 7F0B9C3C C7A80038 */ lwc1 $f8, 0x38($sp) -/* 0EE770 7F0B9C40 C7B0003C */ lwc1 $f16, 0x3c($sp) -/* 0EE774 7F0B9C44 C7B20034 */ lwc1 $f18, 0x34($sp) -/* 0EE778 7F0B9C48 46006387 */ neg.s $f14, $f12 -/* 0EE77C 7F0B9C4C 46000307 */ neg.s $f12, $f0 -/* 0EE780 7F0B9C50 46004287 */ neg.s $f10, $f8 -/* 0EE784 7F0B9C54 8FA20024 */ lw $v0, 0x24($sp) -/* 0EE788 7F0B9C58 E7AA0038 */ swc1 $f10, 0x38($sp) -/* 0EE78C 7F0B9C5C E7AC0044 */ swc1 $f12, 0x44($sp) -/* 0EE790 7F0B9C60 46008407 */ neg.s $f16, $f16 -/* 0EE794 7F0B9C64 46009487 */ neg.s $f18, $f18 -/* 0EE798 7F0B9C68 C7A40038 */ lwc1 $f4, 0x38($sp) -.L7F0B9C6C: -/* 0EE79C 7F0B9C6C C7A6004C */ lwc1 $f6, 0x4c($sp) -/* 0EE7A0 7F0B9C70 C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0EE7A4 7F0B9C74 E7AE0040 */ swc1 $f14, 0x40($sp) -/* 0EE7A8 7F0B9C78 46062202 */ mul.s $f8, $f4, $f6 -/* 0EE7AC 7F0B9C7C E7B0003C */ swc1 $f16, 0x3c($sp) -/* 0EE7B0 7F0B9C80 E7B20034 */ swc1 $f18, 0x34($sp) -/* 0EE7B4 7F0B9C84 460A9102 */ mul.s $f4, $f18, $f10 -/* 0EE7B8 7F0B9C88 C7AA0050 */ lwc1 $f10, 0x50($sp) -/* 0EE7BC 7F0B9C8C 46082180 */ add.s $f6, $f4, $f8 -/* 0EE7C0 7F0B9C90 46105102 */ mul.s $f4, $f10, $f16 -/* 0EE7C4 7F0B9C94 46062000 */ add.s $f0, $f4, $f6 -/* 0EE7C8 7F0B9C98 460E003E */ c.le.s $f0, $f14 -/* 0EE7CC 7F0B9C9C 00000000 */ nop -/* 0EE7D0 7F0B9CA0 45020006 */ bc1fl .L7F0B9CBC -/* 0EE7D4 7F0B9CA4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0EE7D8 7F0B9CA8 10400003 */ beqz $v0, .L7F0B9CB8 -/* 0EE7DC 7F0B9CAC 8FA40060 */ lw $a0, 0x60($sp) -/* 0EE7E0 7F0B9CB0 0FC2E6D9 */ jal bgSwapConnectedRooms -/* 0EE7E4 7F0B9CB4 AFA20024 */ sw $v0, 0x24($sp) -.L7F0B9CB8: -/* 0EE7E8 7F0B9CB8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0B9CBC: -/* 0EE7EC 7F0B9CBC 27BD0060 */ addiu $sp, $sp, 0x60 -/* 0EE7F0 7F0B9CC0 03E00008 */ jr $ra -/* 0EE7F4 7F0B9CC4 00000000 */ nop -) -#endif - - - -#ifdef NONMATCHING -void sub_GAME_7F0B9CC8(void) { +/** + * Address: 7F0B9CC8 + * + */ +s32 bgGetPortalBetweenRooms(s32 room1, s32 room2, coord3d *arg2, coord3d *arg3) +{ s32 bFoundPortal = FALSE; s32 i; - s32 portCount = -1; + s32 portalIndex = -1; #ifndef DEBUG #define osSyncPrintf(x) @@ -11710,90 +5125,18 @@ void sub_GAME_7F0B9CC8(void) { bFoundPortal = TRUE; if (sub_GAME_7F0B9F14(i, arg2, arg3) != 0) { - if (portCount >= 0) osSyncPrintf("bg: bgGetPortalBetweenRooms(): Multiple portals join room \'%s\' and \'%s\'\ n", bgDebPrintROOMID(room1), bgDebPrintROOMID(room2)); - portCount = i; + if (portalIndex >= 0) osSyncPrintf("bg: bgGetPortalBetweenRooms(): Multiple portals join room \'%s\' and \'%s\'\ n", bgDebPrintROOMID(room1), bgDebPrintROOMID(room2)); + portalIndex = i; } } } - // if (portCount == -1 && !bFoundPortal) osSyncPrintf("bg: bgGetPortalBetweenRooms(): No portal joins room \'%s\' and \'%s\'\n", bgDebPrintROOMID(room1), bgDebPrintROOMID(room2)); + if (portalIndex == -1 && !bFoundPortal) osSyncPrintf("bg: bgGetPortalBetweenRooms(): No portal joins room \'%s\' and \'%s\'\n", bgDebPrintROOMID(room1), bgDebPrintROOMID(room2)); - // return portCount; + return portalIndex; + #undef osSyncPrintf +} - // #undef osSyncPrintf } - #else - GLOBAL_ASM( -.text -glabel sub_GAME_7F0B9CC8 -/* 0EE7F8 7F0B9CC8 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0EE7FC 7F0B9CCC AFBE0038 */ sw $fp, 0x38($sp) -/* 0EE800 7F0B9CD0 3C1E8008 */ lui $fp, %hi(g_BgPortals) -/* 0EE804 7F0B9CD4 27DEFF80 */ addiu $fp, %lo(g_BgPortals) # addiu $fp, $fp, -0x80 -/* 0EE808 7F0B9CD8 8FC30000 */ lw $v1, ($fp) -/* 0EE80C 7F0B9CDC AFBF003C */ sw $ra, 0x3c($sp) -/* 0EE810 7F0B9CE0 AFB70034 */ sw $s7, 0x34($sp) -/* 0EE814 7F0B9CE4 AFB60030 */ sw $s6, 0x30($sp) -/* 0EE818 7F0B9CE8 AFB5002C */ sw $s5, 0x2c($sp) -/* 0EE81C 7F0B9CEC AFB40028 */ sw $s4, 0x28($sp) -/* 0EE820 7F0B9CF0 AFB30024 */ sw $s3, 0x24($sp) -/* 0EE824 7F0B9CF4 AFB20020 */ sw $s2, 0x20($sp) -/* 0EE828 7F0B9CF8 AFB1001C */ sw $s1, 0x1c($sp) -/* 0EE82C 7F0B9CFC AFB00018 */ sw $s0, 0x18($sp) -/* 0EE830 7F0B9D00 8C6E0000 */ lw $t6, ($v1) -/* 0EE834 7F0B9D04 00809025 */ move $s2, $a0 -/* 0EE838 7F0B9D08 00A09825 */ move $s3, $a1 -/* 0EE83C 7F0B9D0C 00C0B025 */ move $s6, $a2 -/* 0EE840 7F0B9D10 00E0B825 */ move $s7, $a3 -/* 0EE844 7F0B9D14 2414FFFF */ li $s4, -1 -/* 0EE848 7F0B9D18 11C0001B */ beqz $t6, .L7F0B9D88 -/* 0EE84C 7F0B9D1C 00008025 */ move $s0, $zero -/* 0EE850 7F0B9D20 00008825 */ move $s1, $zero -/* 0EE854 7F0B9D24 00601025 */ move $v0, $v1 -/* 0EE858 7F0B9D28 90430004 */ lbu $v1, 4($v0) -.L7F0B9D2C: -/* 0EE85C 7F0B9D2C 16430004 */ bne $s2, $v1, .L7F0B9D40 -/* 0EE860 7F0B9D30 00000000 */ nop -/* 0EE864 7F0B9D34 904F0005 */ lbu $t7, 5($v0) -/* 0EE868 7F0B9D38 526F0006 */ beql $s3, $t7, .L7F0B9D54 -/* 0EE86C 7F0B9D3C 02002025 */ move $a0, $s0 -.L7F0B9D40: -/* 0EE870 7F0B9D40 5663000B */ bnel $s3, $v1, .L7F0B9D70 -/* 0EE874 7F0B9D44 8FD90000 */ lw $t9, ($fp) -/* 0EE878 7F0B9D48 90580005 */ lbu $t8, 5($v0) -/* 0EE87C 7F0B9D4C 16580007 */ bne $s2, $t8, .L7F0B9D6C -/* 0EE880 7F0B9D50 02002025 */ move $a0, $s0 -.L7F0B9D54: -/* 0EE884 7F0B9D54 02C02825 */ move $a1, $s6 -/* 0EE888 7F0B9D58 0FC2E7C5 */ jal sub_GAME_7F0B9F14 -/* 0EE88C 7F0B9D5C 02E03025 */ move $a2, $s7 -/* 0EE890 7F0B9D60 50400003 */ beql $v0, $zero, .L7F0B9D70 -/* 0EE894 7F0B9D64 8FD90000 */ lw $t9, ($fp) -/* 0EE898 7F0B9D68 0200A025 */ move $s4, $s0 -.L7F0B9D6C: -/* 0EE89C 7F0B9D6C 8FD90000 */ lw $t9, ($fp) -.L7F0B9D70: -/* 0EE8A0 7F0B9D70 26310008 */ addiu $s1, $s1, 8 -/* 0EE8A4 7F0B9D74 26100001 */ addiu $s0, $s0, 1 -/* 0EE8A8 7F0B9D78 03311021 */ addu $v0, $t9, $s1 -/* 0EE8AC 7F0B9D7C 8C480000 */ lw $t0, ($v0) -/* 0EE8B0 7F0B9D80 5500FFEA */ bnezl $t0, .L7F0B9D2C -/* 0EE8B4 7F0B9D84 90430004 */ lbu $v1, 4($v0) -.L7F0B9D88: -/* 0EE8B8 7F0B9D88 8FBF003C */ lw $ra, 0x3c($sp) -/* 0EE8BC 7F0B9D8C 02801025 */ move $v0, $s4 -/* 0EE8C0 7F0B9D90 8FB40028 */ lw $s4, 0x28($sp) -/* 0EE8C4 7F0B9D94 8FB00018 */ lw $s0, 0x18($sp) -/* 0EE8C8 7F0B9D98 8FB1001C */ lw $s1, 0x1c($sp) -/* 0EE8CC 7F0B9D9C 8FB20020 */ lw $s2, 0x20($sp) -/* 0EE8D0 7F0B9DA0 8FB30024 */ lw $s3, 0x24($sp) -/* 0EE8D4 7F0B9DA4 8FB5002C */ lw $s5, 0x2c($sp) -/* 0EE8D8 7F0B9DA8 8FB60030 */ lw $s6, 0x30($sp) -/* 0EE8DC 7F0B9DAC 8FB70034 */ lw $s7, 0x34($sp) -/* 0EE8E0 7F0B9DB0 8FBE0038 */ lw $fp, 0x38($sp) -/* 0EE8E4 7F0B9DB4 03E00008 */ jr $ra -/* 0EE8E8 7F0B9DB8 27BD0040 */ addiu $sp, $sp, 0x40 -) -#endif @@ -11882,6 +5225,8 @@ void bgRemoved7F0B9DFC(s32 p) return; } + + //bg_consider_window82397B18 s32 sub_GAME_7F0B9E04(coord3d *arg0, coord3d *arg1) { @@ -11925,244 +5270,89 @@ s32 sub_GAME_7F0B9E04(coord3d *arg0, coord3d *arg1) } -#ifdef NONMATCHING -s32 sub_GAME_7F0B9F14(s32 portalnum, struct coord *arg1, struct coord *arg2) { +s32 sub_GAME_7F0B9F14(s32 portalnum, coord3d *pos1, coord3d *pos2) +{ + f32 value1; + f32 value2; + coord3d diff; + s32 padding; + s32 next; + f32 tmp; + coord3d edge; + struct PortalMetric metric; + f32 plane_d[1]; + coord3d cross; + s32 i; + u8 seenA; + u8 seenB; + seenA = 0; + seenB = 0; + + sub_GAME_7F0B96CC(portalnum, &metric); + + diff.f[0] = pos2->f[0] - pos1->f[0]; + diff.f[1] = pos2->f[1] - pos1->f[1]; + diff.f[2] = pos2->f[2] - pos1->f[2]; + + value1 = (pos1->f[0] * metric.normal.f[0] + pos1->f[1] * metric.normal.f[1] + pos1->f[2] * metric.normal.f[2]) * room_data_float1; + value2 = (pos2->f[0] * metric.normal.f[0] + pos2->f[1] * metric.normal.f[1] + pos2->f[2] * metric.normal.f[2]) * room_data_float1; + + // @bug? Using min everywhere. In PD, the second half of this statement uses max. + if ((value1 < metric.min && value2 < metric.min) || (value1 > metric.min && value2 > metric.min)) + { + return 0; + } + + D_80044900 = (value1 + value2) * 0.5f - metric.min; + + for (i = 0; i < g_BgPortals[portalnum].offset_portal->numPoints; i++) + { + next = (i + 1) % g_BgPortals[portalnum].offset_portal->numPoints; + + edge.f[0] = (&g_BgPortals[portalnum].offset_portal->point)[next].f[0] - (&g_BgPortals[portalnum].offset_portal->point)[i].f[0]; + edge.f[1] = (&g_BgPortals[portalnum].offset_portal->point)[next].f[1] - (&g_BgPortals[portalnum].offset_portal->point)[i].f[1]; + edge.f[2] = (&g_BgPortals[portalnum].offset_portal->point)[next].f[2] - (&g_BgPortals[portalnum].offset_portal->point)[i].f[2]; + + cross.f[0] = edge.f[1] * diff.f[2] - edge.f[2] * diff.f[1]; + cross.f[1] = edge.f[2] * diff.f[0] - edge.f[0] * diff.f[2]; + cross.f[2] = edge.f[0] * diff.f[1] - edge.f[1] * diff.f[0]; + + tmp = cross.f[0] * cross.f[0] + cross.f[1] * cross.f[1] + cross.f[2] * cross.f[2]; + + if (tmp == 0.0f) + { + return 0; + } + + plane_d[0] = cross.f[0] * (&g_BgPortals[portalnum].offset_portal->point)[i].f[0] + + cross.f[1] * (&g_BgPortals[portalnum].offset_portal->point)[i].f[1] + + cross.f[2] * (&g_BgPortals[portalnum].offset_portal->point)[i].f[2]; + + tmp = (cross.f[0] * pos1->f[0] + cross.f[1] * pos1->f[1] + cross.f[2] * pos1->f[2]) * room_data_float1; + + if (tmp < plane_d[0]) + { + if (seenB) + { + return 0; + } + + seenA = 1; + } + else + { + if (seenA) + { + return 0; + } + + seenB = 1; + } + } + + return value1 < metric.min ? 1 : 2; } -#else -s32 sub_GAME_7F0B9F14(s32 portalnum, struct coord *arg1, struct coord *arg2); -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B9F14 -/* 0EEA44 7F0B9F14 27BDFF60 */ addiu $sp, $sp, -0xa0 -/* 0EEA48 7F0B9F18 AFB00018 */ sw $s0, 0x18($sp) -/* 0EEA4C 7F0B9F1C 00A08025 */ move $s0, $a1 -/* 0EEA50 7F0B9F20 AFBF001C */ sw $ra, 0x1c($sp) -/* 0EEA54 7F0B9F24 AFA400A0 */ sw $a0, 0xa0($sp) -/* 0EEA58 7F0B9F28 27A50060 */ addiu $a1, $sp, 0x60 -/* 0EEA5C 7F0B9F2C AFA600A8 */ sw $a2, 0xa8($sp) -/* 0EEA60 7F0B9F30 A3A0004B */ sb $zero, 0x4b($sp) -/* 0EEA64 7F0B9F34 0FC2E5B3 */ jal sub_GAME_7F0B96CC -/* 0EEA68 7F0B9F38 A3A0004A */ sb $zero, 0x4a($sp) -/* 0EEA6C 7F0B9F3C 8FA600A8 */ lw $a2, 0xa8($sp) -/* 0EEA70 7F0B9F40 C6100000 */ lwc1 $f16, ($s0) -/* 0EEA74 7F0B9F44 3C018004 */ lui $at, %hi(room_data_float1) -/* 0EEA78 7F0B9F48 C4CA0000 */ lwc1 $f10, ($a2) -/* 0EEA7C 7F0B9F4C C42C13F4 */ lwc1 $f12, %lo(room_data_float1)($at) -/* 0EEA80 7F0B9F50 93AA004B */ lbu $t2, 0x4b($sp) -/* 0EEA84 7F0B9F54 46105181 */ sub.s $f6, $f10, $f16 -/* 0EEA88 7F0B9F58 93AB004A */ lbu $t3, 0x4a($sp) -/* 0EEA8C 7F0B9F5C E7A6008C */ swc1 $f6, 0x8c($sp) -/* 0EEA90 7F0B9F60 C6080004 */ lwc1 $f8, 4($s0) -/* 0EEA94 7F0B9F64 C4C40004 */ lwc1 $f4, 4($a2) -/* 0EEA98 7F0B9F68 46082481 */ sub.s $f18, $f4, $f8 -/* 0EEA9C 7F0B9F6C C7A80060 */ lwc1 $f8, 0x60($sp) -/* 0EEAA0 7F0B9F70 E7B20090 */ swc1 $f18, 0x90($sp) -/* 0EEAA4 7F0B9F74 C6100008 */ lwc1 $f16, 8($s0) -/* 0EEAA8 7F0B9F78 C4CA0008 */ lwc1 $f10, 8($a2) -/* 0EEAAC 7F0B9F7C 46105181 */ sub.s $f6, $f10, $f16 -/* 0EEAB0 7F0B9F80 C7B00064 */ lwc1 $f16, 0x64($sp) -/* 0EEAB4 7F0B9F84 E7A60094 */ swc1 $f6, 0x94($sp) -/* 0EEAB8 7F0B9F88 C6040000 */ lwc1 $f4, ($s0) -/* 0EEABC 7F0B9F8C C60A0004 */ lwc1 $f10, 4($s0) -/* 0EEAC0 7F0B9F90 46082482 */ mul.s $f18, $f4, $f8 -/* 0EEAC4 7F0B9F94 00000000 */ nop -/* 0EEAC8 7F0B9F98 46105182 */ mul.s $f6, $f10, $f16 -/* 0EEACC 7F0B9F9C C7AA0068 */ lwc1 $f10, 0x68($sp) -/* 0EEAD0 7F0B9FA0 46069100 */ add.s $f4, $f18, $f6 -/* 0EEAD4 7F0B9FA4 C6120008 */ lwc1 $f18, 8($s0) -/* 0EEAD8 7F0B9FA8 46125182 */ mul.s $f6, $f10, $f18 -/* 0EEADC 7F0B9FAC 46043480 */ add.s $f18, $f6, $f4 -/* 0EEAE0 7F0B9FB0 C4C60000 */ lwc1 $f6, ($a2) -/* 0EEAE4 7F0B9FB4 460C9382 */ mul.s $f14, $f18, $f12 -/* 0EEAE8 7F0B9FB8 C4D20004 */ lwc1 $f18, 4($a2) -/* 0EEAEC 7F0B9FBC 46083102 */ mul.s $f4, $f6, $f8 -/* 0EEAF0 7F0B9FC0 00000000 */ nop -/* 0EEAF4 7F0B9FC4 46109182 */ mul.s $f6, $f18, $f16 -/* 0EEAF8 7F0B9FC8 C4D20008 */ lwc1 $f18, 8($a2) -/* 0EEAFC 7F0B9FCC 46125402 */ mul.s $f16, $f10, $f18 -/* 0EEB00 7F0B9FD0 C7AA006C */ lwc1 $f10, 0x6c($sp) -/* 0EEB04 7F0B9FD4 46062200 */ add.s $f8, $f4, $f6 -/* 0EEB08 7F0B9FD8 C7A6006C */ lwc1 $f6, 0x6c($sp) -/* 0EEB0C 7F0B9FDC 46088100 */ add.s $f4, $f16, $f8 -/* 0EEB10 7F0B9FE0 4606703C */ c.lt.s $f14, $f6 -/* 0EEB14 7F0B9FE4 460C2002 */ mul.s $f0, $f4, $f12 -/* 0EEB18 7F0B9FE8 45000005 */ bc1f .L7F0BA000 -/* 0EEB1C 7F0B9FEC 00000000 */ nop -/* 0EEB20 7F0B9FF0 4606003C */ c.lt.s $f0, $f6 -/* 0EEB24 7F0B9FF4 00000000 */ nop -/* 0EEB28 7F0B9FF8 45010009 */ bc1t .L7F0BA020 -/* 0EEB2C 7F0B9FFC 00000000 */ nop -.L7F0BA000: -/* 0EEB30 7F0BA000 460E503C */ c.lt.s $f10, $f14 -/* 0EEB34 7F0BA004 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0EEB38 7F0BA008 45020008 */ bc1fl .L7F0BA02C -/* 0EEB3C 7F0BA00C 46007480 */ add.s $f18, $f14, $f0 -/* 0EEB40 7F0BA010 4600503C */ c.lt.s $f10, $f0 -/* 0EEB44 7F0BA014 00000000 */ nop -/* 0EEB48 7F0BA018 45020004 */ bc1fl .L7F0BA02C -/* 0EEB4C 7F0BA01C 46007480 */ add.s $f18, $f14, $f0 -.L7F0BA020: -/* 0EEB50 7F0BA020 1000008D */ b .L7F0BA258 -/* 0EEB54 7F0BA024 00001025 */ move $v0, $zero -/* 0EEB58 7F0BA028 46007480 */ add.s $f18, $f14, $f0 -.L7F0BA02C: -/* 0EEB5C 7F0BA02C 44818000 */ mtc1 $at, $f16 -/* 0EEB60 7F0BA030 C7A4006C */ lwc1 $f4, 0x6c($sp) -/* 0EEB64 7F0BA034 8FAE00A0 */ lw $t6, 0xa0($sp) -/* 0EEB68 7F0BA038 46109202 */ mul.s $f8, $f18, $f16 -/* 0EEB6C 7F0BA03C 3C0F8008 */ lui $t7, %hi(g_BgPortals) -/* 0EEB70 7F0BA040 8DEFFF80 */ lw $t7, %lo(g_BgPortals)($t7) -/* 0EEB74 7F0BA044 3C018004 */ lui $at, %hi(D_80044900) -/* 0EEB78 7F0BA048 000EC0C0 */ sll $t8, $t6, 3 -/* 0EEB7C 7F0BA04C 01F84021 */ addu $t0, $t7, $t8 -/* 0EEB80 7F0BA050 00003825 */ move $a3, $zero -/* 0EEB84 7F0BA054 46044181 */ sub.s $f6, $f8, $f4 -/* 0EEB88 7F0BA058 00002025 */ move $a0, $zero -/* 0EEB8C 7F0BA05C E4264900 */ swc1 $f6, %lo(D_80044900)($at) -/* 0EEB90 7F0BA060 8D020000 */ lw $v0, ($t0) -/* 0EEB94 7F0BA064 90460000 */ lbu $a2, ($v0) -/* 0EEB98 7F0BA068 58C00073 */ blezl $a2, .L7F0BA238 -/* 0EEB9C 7F0BA06C C7B2006C */ lwc1 $f18, 0x6c($sp) -/* 0EEBA0 7F0BA070 44801000 */ mtc1 $zero, $f2 -/* 0EEBA4 7F0BA074 240C000C */ li $t4, 12 -/* 0EEBA8 7F0BA078 24E90001 */ addiu $t1, $a3, 1 -.L7F0BA07C: -/* 0EEBAC 7F0BA07C 0126001A */ div $zero, $t1, $a2 -/* 0EEBB0 7F0BA080 00002810 */ mfhi $a1 -/* 0EEBB4 7F0BA084 00446821 */ addu $t5, $v0, $a0 -/* 0EEBB8 7F0BA088 C5B20004 */ lwc1 $f18, 4($t5) -/* 0EEBBC 7F0BA08C 00AC0019 */ multu $a1, $t4 -/* 0EEBC0 7F0BA090 14C00002 */ bnez $a2, .L7F0BA09C -/* 0EEBC4 7F0BA094 00000000 */ nop -/* 0EEBC8 7F0BA098 0007000D */ break 7 -.L7F0BA09C: -/* 0EEBCC 7F0BA09C 2401FFFF */ li $at, -1 -/* 0EEBD0 7F0BA0A0 14C10004 */ bne $a2, $at, .L7F0BA0B4 -/* 0EEBD4 7F0BA0A4 3C018000 */ lui $at, 0x8000 -/* 0EEBD8 7F0BA0A8 15210002 */ bne $t1, $at, .L7F0BA0B4 -/* 0EEBDC 7F0BA0AC 00000000 */ nop -/* 0EEBE0 7F0BA0B0 0006000D */ break 6 -.L7F0BA0B4: -/* 0EEBE4 7F0BA0B4 00001812 */ mflo $v1 -/* 0EEBE8 7F0BA0B8 0043C821 */ addu $t9, $v0, $v1 -/* 0EEBEC 7F0BA0BC C72A0004 */ lwc1 $f10, 4($t9) -/* 0EEBF0 7F0BA0C0 46125401 */ sub.s $f16, $f10, $f18 -/* 0EEBF4 7F0BA0C4 E7B00074 */ swc1 $f16, 0x74($sp) -/* 0EEBF8 7F0BA0C8 8D020000 */ lw $v0, ($t0) -/* 0EEBFC 7F0BA0CC 00437021 */ addu $t6, $v0, $v1 -/* 0EEC00 7F0BA0D0 00447821 */ addu $t7, $v0, $a0 -/* 0EEC04 7F0BA0D4 C5E40008 */ lwc1 $f4, 8($t7) -/* 0EEC08 7F0BA0D8 C5C80008 */ lwc1 $f8, 8($t6) -/* 0EEC0C 7F0BA0DC 46044181 */ sub.s $f6, $f8, $f4 -/* 0EEC10 7F0BA0E0 C7A40094 */ lwc1 $f4, 0x94($sp) -/* 0EEC14 7F0BA0E4 E7A60078 */ swc1 $f6, 0x78($sp) -/* 0EEC18 7F0BA0E8 8D020000 */ lw $v0, ($t0) -/* 0EEC1C 7F0BA0EC C7A80078 */ lwc1 $f8, 0x78($sp) -/* 0EEC20 7F0BA0F0 0043C021 */ addu $t8, $v0, $v1 -/* 0EEC24 7F0BA0F4 0044C821 */ addu $t9, $v0, $a0 -/* 0EEC28 7F0BA0F8 C732000C */ lwc1 $f18, 0xc($t9) -/* 0EEC2C 7F0BA0FC C70A000C */ lwc1 $f10, 0xc($t8) -/* 0EEC30 7F0BA100 46044182 */ mul.s $f6, $f8, $f4 -/* 0EEC34 7F0BA104 E7A80020 */ swc1 $f8, 0x20($sp) -/* 0EEC38 7F0BA108 46125401 */ sub.s $f16, $f10, $f18 -/* 0EEC3C 7F0BA10C C7AA0090 */ lwc1 $f10, 0x90($sp) -/* 0EEC40 7F0BA110 C7A80074 */ lwc1 $f8, 0x74($sp) -/* 0EEC44 7F0BA114 E7B0007C */ swc1 $f16, 0x7c($sp) -/* 0EEC48 7F0BA118 C7B2007C */ lwc1 $f18, 0x7c($sp) -/* 0EEC4C 7F0BA11C 46125402 */ mul.s $f16, $f10, $f18 -/* 0EEC50 7F0BA120 46103181 */ sub.s $f6, $f6, $f16 -/* 0EEC54 7F0BA124 C7B0008C */ lwc1 $f16, 0x8c($sp) -/* 0EEC58 7F0BA128 46109482 */ mul.s $f18, $f18, $f16 -/* 0EEC5C 7F0BA12C E7A60050 */ swc1 $f6, 0x50($sp) -/* 0EEC60 7F0BA130 46082102 */ mul.s $f4, $f4, $f8 -/* 0EEC64 7F0BA134 46049481 */ sub.s $f18, $f18, $f4 -/* 0EEC68 7F0BA138 460A4102 */ mul.s $f4, $f8, $f10 -/* 0EEC6C 7F0BA13C C7A80020 */ lwc1 $f8, 0x20($sp) -/* 0EEC70 7F0BA140 E7B20054 */ swc1 $f18, 0x54($sp) -/* 0EEC74 7F0BA144 46088282 */ mul.s $f10, $f16, $f8 -/* 0EEC78 7F0BA148 460A2401 */ sub.s $f16, $f4, $f10 -/* 0EEC7C 7F0BA14C 46063202 */ mul.s $f8, $f6, $f6 -/* 0EEC80 7F0BA150 00000000 */ nop -/* 0EEC84 7F0BA154 46129102 */ mul.s $f4, $f18, $f18 -/* 0EEC88 7F0BA158 E7B00058 */ swc1 $f16, 0x58($sp) -/* 0EEC8C 7F0BA15C 46108182 */ mul.s $f6, $f16, $f16 -/* 0EEC90 7F0BA160 46044280 */ add.s $f10, $f8, $f4 -/* 0EEC94 7F0BA164 460A3000 */ add.s $f0, $f6, $f10 -/* 0EEC98 7F0BA168 46020032 */ c.eq.s $f0, $f2 -/* 0EEC9C 7F0BA16C 00000000 */ nop -/* 0EECA0 7F0BA170 45000003 */ bc1f .L7F0BA180 -/* 0EECA4 7F0BA174 00000000 */ nop -/* 0EECA8 7F0BA178 10000037 */ b .L7F0BA258 -/* 0EECAC 7F0BA17C 00001025 */ move $v0, $zero -.L7F0BA180: -/* 0EECB0 7F0BA180 8D0D0000 */ lw $t5, ($t0) -/* 0EECB4 7F0BA184 C7B20050 */ lwc1 $f18, 0x50($sp) -/* 0EECB8 7F0BA188 C7B00054 */ lwc1 $f16, 0x54($sp) -/* 0EECBC 7F0BA18C 01A41021 */ addu $v0, $t5, $a0 -/* 0EECC0 7F0BA190 C4480004 */ lwc1 $f8, 4($v0) -/* 0EECC4 7F0BA194 C4460008 */ lwc1 $f6, 8($v0) -/* 0EECC8 7F0BA198 46089102 */ mul.s $f4, $f18, $f8 -/* 0EECCC 7F0BA19C 00000000 */ nop -/* 0EECD0 7F0BA1A0 46068282 */ mul.s $f10, $f16, $f6 -/* 0EECD4 7F0BA1A4 C446000C */ lwc1 $f6, 0xc($v0) -/* 0EECD8 7F0BA1A8 460A2200 */ add.s $f8, $f4, $f10 -/* 0EECDC 7F0BA1AC C7A40058 */ lwc1 $f4, 0x58($sp) -/* 0EECE0 7F0BA1B0 46043282 */ mul.s $f10, $f6, $f4 -/* 0EECE4 7F0BA1B4 46085180 */ add.s $f6, $f10, $f8 -/* 0EECE8 7F0BA1B8 E7A6005C */ swc1 $f6, 0x5c($sp) -/* 0EECEC 7F0BA1BC C60A0000 */ lwc1 $f10, ($s0) -/* 0EECF0 7F0BA1C0 460A9202 */ mul.s $f8, $f18, $f10 -/* 0EECF4 7F0BA1C4 C6120004 */ lwc1 $f18, 4($s0) -/* 0EECF8 7F0BA1C8 46128282 */ mul.s $f10, $f16, $f18 -/* 0EECFC 7F0BA1CC C6120008 */ lwc1 $f18, 8($s0) -/* 0EED00 7F0BA1D0 460A4400 */ add.s $f16, $f8, $f10 -/* 0EED04 7F0BA1D4 46049202 */ mul.s $f8, $f18, $f4 -/* 0EED08 7F0BA1D8 46104280 */ add.s $f10, $f8, $f16 -/* 0EED0C 7F0BA1DC 460C5002 */ mul.s $f0, $f10, $f12 -/* 0EED10 7F0BA1E0 4606003C */ c.lt.s $f0, $f6 -/* 0EED14 7F0BA1E4 00000000 */ nop -/* 0EED18 7F0BA1E8 45000007 */ bc1f .L7F0BA208 -/* 0EED1C 7F0BA1EC 00000000 */ nop -/* 0EED20 7F0BA1F0 11600003 */ beqz $t3, .L7F0BA200 -/* 0EED24 7F0BA1F4 00000000 */ nop -/* 0EED28 7F0BA1F8 10000017 */ b .L7F0BA258 -/* 0EED2C 7F0BA1FC 00001025 */ move $v0, $zero -.L7F0BA200: -/* 0EED30 7F0BA200 10000005 */ b .L7F0BA218 -/* 0EED34 7F0BA204 240A0001 */ li $t2, 1 -.L7F0BA208: -/* 0EED38 7F0BA208 11400003 */ beqz $t2, .L7F0BA218 -/* 0EED3C 7F0BA20C 240B0001 */ li $t3, 1 -/* 0EED40 7F0BA210 10000011 */ b .L7F0BA258 -/* 0EED44 7F0BA214 00001025 */ move $v0, $zero -.L7F0BA218: -/* 0EED48 7F0BA218 8D020000 */ lw $v0, ($t0) -/* 0EED4C 7F0BA21C 01203825 */ move $a3, $t1 -/* 0EED50 7F0BA220 2484000C */ addiu $a0, $a0, 0xc -/* 0EED54 7F0BA224 90460000 */ lbu $a2, ($v0) -/* 0EED58 7F0BA228 0126082A */ slt $at, $t1, $a2 -/* 0EED5C 7F0BA22C 5420FF93 */ bnezl $at, .L7F0BA07C -/* 0EED60 7F0BA230 24E90001 */ addiu $t1, $a3, 1 -/* 0EED64 7F0BA234 C7B2006C */ lwc1 $f18, 0x6c($sp) -.L7F0BA238: -/* 0EED68 7F0BA238 24030002 */ li $v1, 2 -/* 0EED6C 7F0BA23C 4612703C */ c.lt.s $f14, $f18 -/* 0EED70 7F0BA240 00000000 */ nop -/* 0EED74 7F0BA244 45000003 */ bc1f .L7F0BA254 -/* 0EED78 7F0BA248 00000000 */ nop -/* 0EED7C 7F0BA24C 10000001 */ b .L7F0BA254 -/* 0EED80 7F0BA250 24030001 */ li $v1, 1 -.L7F0BA254: -/* 0EED84 7F0BA254 00601025 */ move $v0, $v1 -.L7F0BA258: -/* 0EED88 7F0BA258 8FBF001C */ lw $ra, 0x1c($sp) -/* 0EED8C 7F0BA25C 8FB00018 */ lw $s0, 0x18($sp) -/* 0EED90 7F0BA260 27BD00A0 */ addiu $sp, $sp, 0xa0 -/* 0EED94 7F0BA264 03E00008 */ jr $ra -/* 0EED98 7F0BA268 00000000 */ nop -) -#endif bool bgIsBboxOverlapping(coord3d *portalbbmin, coord3d *portalbbmax, coord3d *propbbmin, coord3d *propbbmax) @@ -12181,384 +5371,131 @@ bool bgIsBboxOverlapping(coord3d *portalbbmin, coord3d *portalbbmax, coord3d *pr } -#ifdef NONMATCHING -void sub_GAME_7F0BA2D4(void *arg0, void *arg1, s32 *arg2, s32 *arg3, s32 arg4) +void sub_GAME_7F0BA2D4(coord3d *bbmin, coord3d *bbmax, s32 *room_list, s32 *count, s32 max_count) { - f32 spA8; - f32 spA4; - f32 spA0; - f32 sp9C; - f32 sp98; - f32 sp94; - s32 sp8C; - s32 sp7C; - f32 sp70; - f32 sp64; - s32 *sp5C; - f32 *var_v0; - f32 *var_v1; - f32 temp_f0; - s32 *var_v0_2; - s32 temp_s3; - s32 temp_t2; - s32 var_a0; - s32 var_a2; - s32 var_s1; - s32 var_s2; - s32 var_t0; - s32 var_t0_2; - u8 **temp_v0; - u8 **var_a3; - u8 temp_v0_2; - u8 var_v1_2; - void *temp_a3; - - var_s1 = *arg3; - var_t0 = 0; - spA0 = arg0->unk0 * room_data_float1; - spA4 = arg0->unk4 * room_data_float1; - spA8 = arg0->unk8 * room_data_float1; - sp94 = arg1->unk0 * room_data_float1; - sp98 = arg1->unk4 * room_data_float1; - sp7C = var_s1; - sp9C = arg1->unk8 * room_data_float1; -loop_1: - if (var_t0 < var_s1) + bg_portal_entry *portal_pts; + f32 v; + s32 cur_room; + coord3d scaled_bbmin; + coord3d scaled_bbmax; + s32 cur_count; + s32 i; + s32 j; + s32 k; + s32 pad; + s32 saved_count; + coord3d portal_min; + coord3d portal_max; + s32 portal_idx; + s32 *p; + s32 other_room; + + cur_count = *count; + i = 0; + scaled_bbmin.x = bbmin->x * room_data_float1; + scaled_bbmin.y = bbmin->y * room_data_float1; + scaled_bbmin.z = bbmin->z * room_data_float1; + scaled_bbmax.x = bbmax->x * room_data_float1; + scaled_bbmax.y = bbmax->y * room_data_float1; + scaled_bbmax.z = bbmax->z * room_data_float1; + saved_count = cur_count; + + while (1) { - temp_v0 = g_BgPortals; - sp5C = arg2 + (var_t0 * 4); -loop_3: - var_s2 = 0; - temp_s3 = *sp5C; - if (*temp_v0 != NULL) + if (i < cur_count) { - sp8C = var_t0; - var_a3 = temp_v0; -loop_5: - if (!(var_a3->unk6 & 1) && ((temp_s3 == var_a3->unk4) || (temp_s3 == var_a3->unk5))) + p = (s32 *)((u8 *)room_list + (i << 2)); do { + cur_room = *p; + portal_idx = 0; + + if (g_BgPortals[0].offset_portal != ((void *) 0)) { - sp70.unk0 = D_80044904.unk0; - sp70.unk4 = D_80044904.unk4; - sp70.unk8 = D_80044904.unk8; - var_a2 = 0; - sp64.unk0 = D_80044910.unk0; - sp64.unk4 = D_80044910.unk4; - sp64.unk8 = D_80044910.unk8; - if (*var_a3->unk0 > 0) //g_BgRoomInfo->numportals 0x47 in debug, 0x0 in retail... maybesomething comes before ? + do { - do + if ((g_BgPortals[portal_idx].controlbytes1 & 1) || ((cur_room != g_BgPortals[portal_idx].connectedRoom1) && (cur_room != g_BgPortals[portal_idx].connectedRoom2))) { - var_a0 = 0; - var_v1 = &sp70; - var_v0 = &sp64; -loop_10: - temp_f0 = (var_a3->unk0 + (var_a2 * 0xC) + var_a0)->unk4; - var_a0 += 4; - if (temp_f0 < *var_v1) - { - *var_v1 = temp_f0; - } - var_v1 += 4; - if (*var_v0 < temp_f0) - { - *var_v0 = temp_f0; - } - var_v0 += 4; - if (var_v0 != &sp70) - { - goto loop_10; - } - var_a2 += 1; - } while (var_a2 < *var_a3->unk0); - } - if (bgIsBboxOverlapping(&sp70, &sp64, &spA0, &sp94) != 0) - { - var_t0_2 = 0; - temp_a3 = g_BgPortals + var_s2; - temp_v0_2 = temp_a3->unk4; - var_v1_2 = temp_v0_2; - if (temp_s3 == temp_v0_2) - { - var_v1_2 = temp_a3->unk5; + goto next_portal; } - var_v0_2 = arg2; - if (var_s1 > 0) + + portal_min = *(coord3d *) &D_80044904; + portal_max = *(coord3d *) &D_80044910; + portal_pts = g_BgPortals[portal_idx].offset_portal; + + for (j = 0; j < portal_pts->numPoints; j++) { -loop_20: - if (var_v1_2 != *var_v0_2) + for (k = 0; k < 3; k++) { - var_t0_2 += 1; - var_v0_2 += 4; - if (var_t0_2 != var_s1) + v = (&portal_pts->point)[j].f[k]; + + if (v < portal_min.f[k]) { - goto loop_20; + portal_min.f[k] = v; } + + if (portal_max.f[k] < v) + { + portal_max.f[k] = v; + } + + portal_pts = g_BgPortals[portal_idx].offset_portal; + } + + if (portal_pts->numPoints); + } + + if (bgIsBboxOverlapping(&portal_min, &portal_max, &scaled_bbmin, &scaled_bbmax)) + { + if (cur_room == g_BgPortals[portal_idx].connectedRoom1) + { + other_room = g_BgPortals[portal_idx].connectedRoom2; + } + else + { + other_room = g_BgPortals[portal_idx].connectedRoom1; + } + + for (k = 0; k < cur_count; k++) + { + if (room_list[k] == other_room) + { + break; } } - if (var_t0_2 == var_s1) + + if (k == cur_count) { - if (var_s1 < arg4) + if (cur_count < max_count) { - *(arg2 + (var_s1 * 4)) = var_v1_2; - var_s1 += 1; + room_list[cur_count] = other_room; + cur_count++; } - if (var_s1 >= arg4) + + if (cur_count >= max_count) { - *arg3 = var_s1; + *count = cur_count; return; } - goto block_27; } - goto block_27; } -block_27: - var_a3 = g_BgPortals + var_s2; - goto block_28; + +next_portal: + portal_idx++; + } + while (g_BgPortals[portal_idx].offset_portal != NULL); } -block_28: - temp_t2 = var_a3->unk8; - var_s2 += 8; - var_a3 += 8; - if (temp_t2 == 0) - { - var_t0 = sp8C; - goto block_30; - } - goto loop_5; - } -block_30: - var_t0 += 1; - sp5C += 4; - if (var_t0 >= sp7C) + + i++; + p++; + + } while (i < saved_count); + } + + if (cur_count == saved_count) { - goto block_31; + break; } - goto loop_3; + + saved_count = cur_count; } -block_31: - if (var_s1 != sp7C) - { - sp7C = var_s1; - goto loop_1; - } - *arg3 = var_s1; + *count = cur_count; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0BA2D4 -/* 0EEE04 7F0BA2D4 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 0EEE08 7F0BA2D8 AFBF003C */ sw $ra, 0x3c($sp) -/* 0EEE0C 7F0BA2DC AFBE0038 */ sw $fp, 0x38($sp) -/* 0EEE10 7F0BA2E0 AFB70034 */ sw $s7, 0x34($sp) -/* 0EEE14 7F0BA2E4 AFB60030 */ sw $s6, 0x30($sp) -/* 0EEE18 7F0BA2E8 AFB5002C */ sw $s5, 0x2c($sp) -/* 0EEE1C 7F0BA2EC AFB40028 */ sw $s4, 0x28($sp) -/* 0EEE20 7F0BA2F0 AFB30024 */ sw $s3, 0x24($sp) -/* 0EEE24 7F0BA2F4 AFB20020 */ sw $s2, 0x20($sp) -/* 0EEE28 7F0BA2F8 AFB1001C */ sw $s1, 0x1c($sp) -/* 0EEE2C 7F0BA2FC AFB00018 */ sw $s0, 0x18($sp) -/* 0EEE30 7F0BA300 AFA700C4 */ sw $a3, 0xc4($sp) -/* 0EEE34 7F0BA304 3C018004 */ lui $at, %hi(room_data_float1) -/* 0EEE38 7F0BA308 C42013F4 */ lwc1 $f0, %lo(room_data_float1)($at) -/* 0EEE3C 7F0BA30C C4840000 */ lwc1 $f4, ($a0) -/* 0EEE40 7F0BA310 8CF10000 */ lw $s1, ($a3) -/* 0EEE44 7F0BA314 3C1E8004 */ lui $fp, %hi(D_80044904) -/* 0EEE48 7F0BA318 46002182 */ mul.s $f6, $f4, $f0 -/* 0EEE4C 7F0BA31C 00C0A025 */ move $s4, $a2 -/* 0EEE50 7F0BA320 00004025 */ move $t0, $zero -/* 0EEE54 7F0BA324 27DE4904 */ addiu $fp, %lo(D_80044904) # addiu $fp, $fp, 0x4904 -/* 0EEE58 7F0BA328 27B00070 */ addiu $s0, $sp, 0x70 -/* 0EEE5C 7F0BA32C 8FB500C8 */ lw $s5, 0xc8($sp) -/* 0EEE60 7F0BA330 27B60070 */ addiu $s6, $sp, 0x70 -/* 0EEE64 7F0BA334 E7A600A0 */ swc1 $f6, 0xa0($sp) -/* 0EEE68 7F0BA338 C4880004 */ lwc1 $f8, 4($a0) -/* 0EEE6C 7F0BA33C 27B70064 */ addiu $s7, $sp, 0x64 -/* 0EEE70 7F0BA340 46004282 */ mul.s $f10, $f8, $f0 -/* 0EEE74 7F0BA344 E7AA00A4 */ swc1 $f10, 0xa4($sp) -/* 0EEE78 7F0BA348 C4900008 */ lwc1 $f16, 8($a0) -/* 0EEE7C 7F0BA34C 46008482 */ mul.s $f18, $f16, $f0 -/* 0EEE80 7F0BA350 E7B200A8 */ swc1 $f18, 0xa8($sp) -/* 0EEE84 7F0BA354 C4A40000 */ lwc1 $f4, ($a1) -/* 0EEE88 7F0BA358 46002182 */ mul.s $f6, $f4, $f0 -/* 0EEE8C 7F0BA35C E7A60094 */ swc1 $f6, 0x94($sp) -/* 0EEE90 7F0BA360 C4A80004 */ lwc1 $f8, 4($a1) -/* 0EEE94 7F0BA364 46004282 */ mul.s $f10, $f8, $f0 -/* 0EEE98 7F0BA368 E7AA0098 */ swc1 $f10, 0x98($sp) -/* 0EEE9C 7F0BA36C C4B00008 */ lwc1 $f16, 8($a1) -/* 0EEEA0 7F0BA370 AFB1007C */ sw $s1, 0x7c($sp) -/* 0EEEA4 7F0BA374 46008482 */ mul.s $f18, $f16, $f0 -/* 0EEEA8 7F0BA378 E7B2009C */ swc1 $f18, 0x9c($sp) -.L7F0BA37C: -/* 0EEEAC 7F0BA37C 0111082A */ slt $at, $t0, $s1 -/* 0EEEB0 7F0BA380 1020007C */ beqz $at, .L7F0BA574 -/* 0EEEB4 7F0BA384 00087880 */ sll $t7, $t0, 2 -/* 0EEEB8 7F0BA388 028FC021 */ addu $t8, $s4, $t7 -/* 0EEEBC 7F0BA38C 3C028008 */ lui $v0, %hi(g_BgPortals) -/* 0EEEC0 7F0BA390 8C42FF80 */ lw $v0, %lo(g_BgPortals)($v0) -/* 0EEEC4 7F0BA394 AFB8005C */ sw $t8, 0x5c($sp) -.L7F0BA398: -/* 0EEEC8 7F0BA398 8C490000 */ lw $t1, ($v0) -/* 0EEECC 7F0BA39C 8FB9005C */ lw $t9, 0x5c($sp) -/* 0EEED0 7F0BA3A0 00009025 */ move $s2, $zero -/* 0EEED4 7F0BA3A4 1120006C */ beqz $t1, .L7F0BA558 -/* 0EEED8 7F0BA3A8 8F330000 */ lw $s3, ($t9) -/* 0EEEDC 7F0BA3AC AFA8008C */ sw $t0, 0x8c($sp) -/* 0EEEE0 7F0BA3B0 00403825 */ move $a3, $v0 -/* 0EEEE4 7F0BA3B4 90EA0006 */ lbu $t2, 6($a3) -.L7F0BA3B8: -/* 0EEEE8 7F0BA3B8 314B0001 */ andi $t3, $t2, 1 -/* 0EEEEC 7F0BA3BC 55600061 */ bnezl $t3, .L7F0BA544 -/* 0EEEF0 7F0BA3C0 8CEA0008 */ lw $t2, 8($a3) -/* 0EEEF4 7F0BA3C4 90EC0004 */ lbu $t4, 4($a3) -/* 0EEEF8 7F0BA3C8 526C0005 */ beql $s3, $t4, .L7F0BA3E0 -/* 0EEEFC 7F0BA3CC 8FC10000 */ lw $at, ($fp) -/* 0EEF00 7F0BA3D0 90ED0005 */ lbu $t5, 5($a3) -/* 0EEF04 7F0BA3D4 566D005B */ bnel $s3, $t5, .L7F0BA544 -/* 0EEF08 7F0BA3D8 8CEA0008 */ lw $t2, 8($a3) -/* 0EEF0C 7F0BA3DC 8FC10000 */ lw $at, ($fp) -.L7F0BA3E0: -/* 0EEF10 7F0BA3E0 8FCF0004 */ lw $t7, 4($fp) -/* 0EEF14 7F0BA3E4 3C188004 */ lui $t8, %hi(D_80044910) -/* 0EEF18 7F0BA3E8 AEC10000 */ sw $at, ($s6) -/* 0EEF1C 7F0BA3EC 8FC10008 */ lw $at, 8($fp) -/* 0EEF20 7F0BA3F0 27184910 */ addiu $t8, %lo(D_80044910) # addiu $t8, $t8, 0x4910 -/* 0EEF24 7F0BA3F4 AECF0004 */ sw $t7, 4($s6) -/* 0EEF28 7F0BA3F8 AEC10008 */ sw $at, 8($s6) -/* 0EEF2C 7F0BA3FC 8F010000 */ lw $at, ($t8) -/* 0EEF30 7F0BA400 00003025 */ move $a2, $zero -/* 0EEF34 7F0BA404 AEE10000 */ sw $at, ($s7) -/* 0EEF38 7F0BA408 8F090004 */ lw $t1, 4($t8) -/* 0EEF3C 7F0BA40C AEE90004 */ sw $t1, 4($s7) -/* 0EEF40 7F0BA410 8F010008 */ lw $at, 8($t8) -/* 0EEF44 7F0BA414 AEE10008 */ sw $at, 8($s7) -/* 0EEF48 7F0BA418 8CE50000 */ lw $a1, ($a3) -/* 0EEF4C 7F0BA41C 90AA0000 */ lbu $t2, ($a1) -/* 0EEF50 7F0BA420 1940001F */ blez $t2, .L7F0BA4A0 -/* 0EEF54 7F0BA424 00002025 */ move $a0, $zero -.L7F0BA428: -/* 0EEF58 7F0BA428 27A30070 */ addiu $v1, $sp, 0x70 -/* 0EEF5C 7F0BA42C 27A20064 */ addiu $v0, $sp, 0x64 -.L7F0BA430: -/* 0EEF60 7F0BA430 00065880 */ sll $t3, $a2, 2 -/* 0EEF64 7F0BA434 01665823 */ subu $t3, $t3, $a2 -/* 0EEF68 7F0BA438 000B5880 */ sll $t3, $t3, 2 -/* 0EEF6C 7F0BA43C 00AB6021 */ addu $t4, $a1, $t3 -/* 0EEF70 7F0BA440 01846821 */ addu $t5, $t4, $a0 -/* 0EEF74 7F0BA444 C5A00004 */ lwc1 $f0, 4($t5) -/* 0EEF78 7F0BA448 C4640000 */ lwc1 $f4, ($v1) -/* 0EEF7C 7F0BA44C 24840004 */ addiu $a0, $a0, 4 -/* 0EEF80 7F0BA450 4604003C */ c.lt.s $f0, $f4 -/* 0EEF84 7F0BA454 00000000 */ nop -/* 0EEF88 7F0BA458 45020003 */ bc1fl .L7F0BA468 -/* 0EEF8C 7F0BA45C C4460000 */ lwc1 $f6, ($v0) -/* 0EEF90 7F0BA460 E4600000 */ swc1 $f0, ($v1) -/* 0EEF94 7F0BA464 C4460000 */ lwc1 $f6, ($v0) -.L7F0BA468: -/* 0EEF98 7F0BA468 24630004 */ addiu $v1, $v1, 4 -/* 0EEF9C 7F0BA46C 4600303C */ c.lt.s $f6, $f0 -/* 0EEFA0 7F0BA470 00000000 */ nop -/* 0EEFA4 7F0BA474 45020003 */ bc1fl .L7F0BA484 -/* 0EEFA8 7F0BA478 24420004 */ addiu $v0, $v0, 4 -/* 0EEFAC 7F0BA47C E4400000 */ swc1 $f0, ($v0) -/* 0EEFB0 7F0BA480 24420004 */ addiu $v0, $v0, 4 -.L7F0BA484: -/* 0EEFB4 7F0BA484 1450FFEA */ bne $v0, $s0, .L7F0BA430 -/* 0EEFB8 7F0BA488 8CE50000 */ lw $a1, ($a3) -/* 0EEFBC 7F0BA48C 90A20000 */ lbu $v0, ($a1) -/* 0EEFC0 7F0BA490 24C60001 */ addiu $a2, $a2, 1 -/* 0EEFC4 7F0BA494 00C2082A */ slt $at, $a2, $v0 -/* 0EEFC8 7F0BA498 5420FFE3 */ bnezl $at, .L7F0BA428 -/* 0EEFCC 7F0BA49C 00002025 */ move $a0, $zero -.L7F0BA4A0: -/* 0EEFD0 7F0BA4A0 02C02025 */ move $a0, $s6 -/* 0EEFD4 7F0BA4A4 02E02825 */ move $a1, $s7 -/* 0EEFD8 7F0BA4A8 27A600A0 */ addiu $a2, $sp, 0xa0 -/* 0EEFDC 7F0BA4AC 0FC2E89B */ jal bgIsBboxOverlapping -/* 0EEFE0 7F0BA4B0 27A70094 */ addiu $a3, $sp, 0x94 -/* 0EEFE4 7F0BA4B4 1040001F */ beqz $v0, .L7F0BA534 -/* 0EEFE8 7F0BA4B8 3C0E8008 */ lui $t6, %hi(g_BgPortals) -/* 0EEFEC 7F0BA4BC 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) -/* 0EEFF0 7F0BA4C0 00004025 */ move $t0, $zero -/* 0EEFF4 7F0BA4C4 0235082A */ slt $at, $s1, $s5 -/* 0EEFF8 7F0BA4C8 01D23821 */ addu $a3, $t6, $s2 -/* 0EEFFC 7F0BA4CC 90E20004 */ lbu $v0, 4($a3) -/* 0EF000 7F0BA4D0 16620003 */ bne $s3, $v0, .L7F0BA4E0 -/* 0EF004 7F0BA4D4 00401825 */ move $v1, $v0 -/* 0EF008 7F0BA4D8 10000001 */ b .L7F0BA4E0 -/* 0EF00C 7F0BA4DC 90E30005 */ lbu $v1, 5($a3) -.L7F0BA4E0: -/* 0EF010 7F0BA4E0 1A200007 */ blez $s1, .L7F0BA500 -/* 0EF014 7F0BA4E4 02801025 */ move $v0, $s4 -.L7F0BA4E8: -/* 0EF018 7F0BA4E8 8C4F0000 */ lw $t7, ($v0) -/* 0EF01C 7F0BA4EC 106F0004 */ beq $v1, $t7, .L7F0BA500 -/* 0EF020 7F0BA4F0 00000000 */ nop -/* 0EF024 7F0BA4F4 25080001 */ addiu $t0, $t0, 1 -/* 0EF028 7F0BA4F8 1511FFFB */ bne $t0, $s1, .L7F0BA4E8 -/* 0EF02C 7F0BA4FC 24420004 */ addiu $v0, $v0, 4 -.L7F0BA500: -/* 0EF030 7F0BA500 1511000C */ bne $t0, $s1, .L7F0BA534 -/* 0EF034 7F0BA504 00000000 */ nop -/* 0EF038 7F0BA508 10200004 */ beqz $at, .L7F0BA51C -/* 0EF03C 7F0BA50C 0011C880 */ sll $t9, $s1, 2 -/* 0EF040 7F0BA510 0299C021 */ addu $t8, $s4, $t9 -/* 0EF044 7F0BA514 AF030000 */ sw $v1, ($t8) -/* 0EF048 7F0BA518 26310001 */ addiu $s1, $s1, 1 -.L7F0BA51C: -/* 0EF04C 7F0BA51C 0235082A */ slt $at, $s1, $s5 -/* 0EF050 7F0BA520 14200004 */ bnez $at, .L7F0BA534 -/* 0EF054 7F0BA524 00000000 */ nop -/* 0EF058 7F0BA528 8FA900C4 */ lw $t1, 0xc4($sp) -/* 0EF05C 7F0BA52C 10000018 */ b .L7F0BA590 -/* 0EF060 7F0BA530 AD310000 */ sw $s1, ($t1) -.L7F0BA534: -/* 0EF064 7F0BA534 3C028008 */ lui $v0, %hi(g_BgPortals) -/* 0EF068 7F0BA538 8C42FF80 */ lw $v0, %lo(g_BgPortals)($v0) -/* 0EF06C 7F0BA53C 00523821 */ addu $a3, $v0, $s2 -/* 0EF070 7F0BA540 8CEA0008 */ lw $t2, 8($a3) -.L7F0BA544: -/* 0EF074 7F0BA544 26520008 */ addiu $s2, $s2, 8 -/* 0EF078 7F0BA548 24E70008 */ addiu $a3, $a3, 8 -/* 0EF07C 7F0BA54C 5540FF9A */ bnezl $t2, .L7F0BA3B8 -/* 0EF080 7F0BA550 90EA0006 */ lbu $t2, 6($a3) -/* 0EF084 7F0BA554 8FA8008C */ lw $t0, 0x8c($sp) -.L7F0BA558: -/* 0EF088 7F0BA558 8FAB005C */ lw $t3, 0x5c($sp) -/* 0EF08C 7F0BA55C 8FAD007C */ lw $t5, 0x7c($sp) -/* 0EF090 7F0BA560 25080001 */ addiu $t0, $t0, 1 -/* 0EF094 7F0BA564 256C0004 */ addiu $t4, $t3, 4 -/* 0EF098 7F0BA568 010D082A */ slt $at, $t0, $t5 -/* 0EF09C 7F0BA56C 1420FF8A */ bnez $at, .L7F0BA398 -/* 0EF0A0 7F0BA570 AFAC005C */ sw $t4, 0x5c($sp) -.L7F0BA574: -/* 0EF0A4 7F0BA574 8FAE007C */ lw $t6, 0x7c($sp) -/* 0EF0A8 7F0BA578 522E0004 */ beql $s1, $t6, .L7F0BA58C -/* 0EF0AC 7F0BA57C 8FAF00C4 */ lw $t7, 0xc4($sp) -/* 0EF0B0 7F0BA580 1000FF7E */ b .L7F0BA37C -/* 0EF0B4 7F0BA584 AFB1007C */ sw $s1, 0x7c($sp) -/* 0EF0B8 7F0BA588 8FAF00C4 */ lw $t7, 0xc4($sp) -.L7F0BA58C: -/* 0EF0BC 7F0BA58C ADF10000 */ sw $s1, ($t7) -.L7F0BA590: -/* 0EF0C0 7F0BA590 8FBF003C */ lw $ra, 0x3c($sp) -/* 0EF0C4 7F0BA594 8FB00018 */ lw $s0, 0x18($sp) -/* 0EF0C8 7F0BA598 8FB1001C */ lw $s1, 0x1c($sp) -/* 0EF0CC 7F0BA59C 8FB20020 */ lw $s2, 0x20($sp) -/* 0EF0D0 7F0BA5A0 8FB30024 */ lw $s3, 0x24($sp) -/* 0EF0D4 7F0BA5A4 8FB40028 */ lw $s4, 0x28($sp) -/* 0EF0D8 7F0BA5A8 8FB5002C */ lw $s5, 0x2c($sp) -/* 0EF0DC 7F0BA5AC 8FB60030 */ lw $s6, 0x30($sp) -/* 0EF0E0 7F0BA5B0 8FB70034 */ lw $s7, 0x34($sp) -/* 0EF0E4 7F0BA5B4 8FBE0038 */ lw $fp, 0x38($sp) -/* 0EF0E8 7F0BA5B8 03E00008 */ jr $ra -/* 0EF0EC 7F0BA5BC 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif - - - - - - - diff --git a/src/game/bg.h b/src/game/bg.h index 79bdb129..567cefe5 100644 --- a/src/game/bg.h +++ b/src/game/bg.h @@ -17,37 +17,83 @@ struct levelentry // cannon definition #define MAXPORTALSPERROOM 20 +// cannonical name +#define PORTMAX 200 + +#define BG_SEG_TO_PTR(base, off) ((void *) (((u32) (base)) + (((u32) (off)) + 0xF1000000))) + +typedef struct RoomVtxBatchBounds { + s16 gdlindex; // 0x00 + s16 pad02; // 0x02 + + union { + struct { + s32 xmin; // 0x04 + s32 ymin; // 0x08 + s32 zmin; // 0x0c + s32 xmax; // 0x10 + s32 ymax; // 0x14 + s32 zmax; // 0x18 + }; + + struct { + s32 min[3]; // 0x04 + s32 max[3]; // 0x10 + }; + }; +} RoomVtxBatchBounds; // size = 0x1c + +typedef struct BoundVec { + s32 x, y, z; +} BoundVec; + typedef struct s_room_info { // is room being rendered? boolean - u8 room_rendered; + u8 room_rendered; // 0x00 // is the room a neighbor to a room being rendered? boolean - u8 room_neighbor_to_rendered; + u8 room_neighbor_to_rendered; // 0x01 - u8 model_bin_loaded; + /** + * Acts like a small room age counter. + * 0 = unloaded + * 1 = loaded/used recently + * 2-3 = loaded but aging towards unload + * 4 = unload on tick + */ + u8 model_bin_loaded; // 0x02 - // number of portals in between the player's room and this room. - // is 0 if the room is not visible or if the player is standing in this room. - u8 portals_to_room_count; + /** + * Counts how often this room has been reached during the current portal + * visibility traversal. + */ + u8 portal_visit_count; // 0x03 - Vtx * ptr_point_index; - void * ptr_expanded_mapping_info; - void * ptr_secondary_expanded_mapping_info; - s32 csize_point_index_binary; - s32 csize_primary_DL_binary; - s32 csize_secondary_DL_binary; - s32 usize_point_index_binary; - s32 usize_primary_DL_binary; - s32 usize_secondary_DL_binary; - s32 cur_room_totalsize; - void * ptr_unique_collision_points; - s32 bitflags3; - u8 room_loaded_mask; - u8 field_35; - s16 field_36; - coord3d minbounds; - coord3d maxbounds; -} s_room_info; + Vtx *vertices; // 0x04 + void *ptr_expanded_mapping_info; // 0x08 + void *ptr_secondary_expanded_mapping_info; // 0x0c + + s32 csize_point_index_binary; // 0x10 + s32 csize_primary_DL_binary; // 0x14 + s32 csize_secondary_DL_binary; // 0x18 + + s32 usize_point_index_binary; // 0x1c + s32 usize_primary_DL_binary; // 0x20 + s32 usize_secondary_DL_binary; // 0x24 + + s32 cur_room_totalsize; // 0x28 + RoomVtxBatchBounds *vtx_batch_bounds; // 0x2c + + s16 num_vtx_batch_bounds; // 0x30 + s16 field_32; // 0x32 + + u8 room_loaded_mask; // 0x34 + u8 field_35; // 0x35 + s16 field_36; // 0x36 + + coord3d minbounds; // 0x38 + coord3d maxbounds; // 0x44 +} s_room_info; typedef struct s_bound_info { @@ -112,7 +158,29 @@ typedef struct unk_portalstruct s32 unk10; } unk_portalstruct; -extern struct unk_portalstruct table_for_portals[200]; +typedef struct PortalCache { + s32 count; + bbox2d bbox; +} PortalCache; + +typedef struct bg_queued_portal_entry { + + #if defined(VERSION_EU) + u8 arg0; // 0x00 + u8 roomnum; // 0x01 + s16 portalnum; // 0x02 + f32 sp4[4]; // 0x04 + #else + s32 arg0; // 0x00 + s32 roomnum; // 0x04 + s32 portalnum; // 0x08 + s32 arg3; // 0x0c + f32 sp10[4]; // 0x10 + #endif +} bg_queued_portal_entry; + +extern bg_portal_data_entry *g_BgPortals; +extern struct unk_portalstruct table_for_portals[PORTMAX]; extern s32 g_MaxNumRooms; extern f32 room_data_float2; @@ -125,10 +193,12 @@ extern Gfx DL_LUT_PRIMARY_ADDFOG[]; void bgInit(void); // sub_GAME_7F033B38 requres arg be s32 -s32 sub_GAME_7F0B8FD0(s32 roomA, s32 roomB); +bool bgRoomsSharePortal(s32 roomA, s32 roomB); //f32 sub_GAME_7F0B4F9C(s32 room); // u8 not s32 for sub_GAME_7F0B2FE0 +s32 bgCopyVisibleRoomsToList(s32 *rooms, s32 max); u32 bgDecompress(u8* source, u8 *target); +bool bgTestBulletHitBackground(coord3d *from, coord3d *to, s32 roomnum, struct HitThing *hit); void delete_room_data(s32 roomID); void load_bg_file(LEVEL_INDEX stagenum); @@ -140,8 +210,8 @@ void bgToggleDataPortalsContrlBytes1Bit1(s32 index, s32 toggle); s32 bgGetDataPortalsControlBytes1Bit2(s32 arg0); void bgClearDataPortalsControlBytes1Low2Bits(s32 index); void bgSetDataPortalsControlBytes1Bit2(s32 index); -s32 sub_GAME_7F0B9A7C(s32 arg0); -s32 sub_GAME_7F0B9A2C(s32 arg0); +void sub_GAME_7F0B9A7C(s32 portalnum); +void sub_GAME_7F0B9A2C(s32 portalnum); void bgRoomVisibilityRelated(void); Gfx* bgLevelRender(Gfx *arg0); Gfx *bgScissorCurrentPlayerView(Gfx *arg0, s32 left, s32 top, s32 width, s32 height); @@ -151,10 +221,14 @@ f32 get_room_data_float1(void); u8 getROOMID_isRendered(int roomID); s32 bgGet2dBboxByRoomId(s32 room_id, struct bbox2d *result); f32 bgGetLevelVisibilityScale(void); -void sub_GAME_7F0B5CC0(struct bbox2d *a, struct bbox2d *b); +void bgRectOutersect(struct bbox2d *a, struct bbox2d *b); f32 get_room_data_float2(void); -s32 sub_GAME_7F0B9CC8(s32 arg0, s32 arg1, struct coord3d *arg2, struct coord3d *arg3); -void sub_GAME_7F0B96CC(s32 arg0, struct PortalMetric *arg1); +s32 bgGetPortalBetweenRooms(s32 arg0, s32 arg1, struct coord3d *arg2, struct coord3d *arg3); +void sub_GAME_7F0B96CC(s32 portalnum, f32 *out); void bgApplyDynamicCCRMLUT(Gfx *arg0, Gfx *arg1, enum CCRMLUT arg2); +void sub_GAME_7F0BA2D4(coord3d *, coord3d *, s32 *, s32 *, s32); +void bgFindRoomsAlongSegment(coord3d *pos1, coord3d *pos2, u8 *initialRooms, u8 *outRoomSet, s32 *outRoomNums, s32 *outRoomNumsCount, s32 outRoomNumsMax); +s32 sub_GAME_7F0B9E04(coord3d *arg0, coord3d *arg1); +void bgRoomCalcBB(s32 room); #endif diff --git a/src/game/bgroomtrans.c b/src/game/bgroomtrans.c index f9528dbf..b536b88f 100644 --- a/src/game/bgroomtrans.c +++ b/src/game/bgroomtrans.c @@ -223,7 +223,6 @@ s32 setupRoomTransformationMatrix(s32 room) } - /** * Updates the display list with the room matrix for a specific room roomID. * @@ -249,6 +248,7 @@ struct coord3d* getRoomPositionByIndex(s32 roomID) return &ptr_bgdata_room_fileposition_list[roomID].pos; } + /** * Retrieves and scales the position of a room by its roomID. * diff --git a/src/game/bgroomtrans.h b/src/game/bgroomtrans.h index 2551852f..a2c7f16e 100644 --- a/src/game/bgroomtrans.h +++ b/src/game/bgroomtrans.h @@ -4,8 +4,8 @@ void setPlayerRoomField(s32 param_1); void updateRoomStatusFlags(void); -void getRoomPositionScaledByIndex(s32 index, coord3d *param_2); -Gfx * applyRoomMatrixToDisplayList(Gfx *DL,int index); -struct coord3d* getRoomPositionByIndex(s32 index); +void getRoomPositionScaledByIndex(s32 index, struct coord3d *param_2); +Gfx * applyRoomMatrixToDisplayList(Gfx *DL, s32 index); +struct coord3d* getRoomPositionByIndex(s32 roomID); #endif diff --git a/src/game/blood_animation.c b/src/game/blood_animation.c index 0b726aa5..3fc956aa 100644 --- a/src/game/blood_animation.c +++ b/src/game/blood_animation.c @@ -6,6 +6,8 @@ #include "player.h" #include +#define BLOOD_IMG_WIDTH 80 +#define BLOOD_IMG_HEIGHT 96 u8 die_blood_image_1[] = { 0x00, 0x20, 0x03, 0x05, 0x04, 0x02, 0x60, 0x21, 0x22, 0x01, 0xE0, 0xE0, 0xE0, 0xE0, @@ -193,7 +195,8 @@ u8 die_blood_image_1[] = { u8 die_blood_image_end = 0; -Gfx *insert_imageDL(Gfx *gdl) { +Gfx *clear_framebuffer_black(Gfx *gdl) +{ gDPSetCycleType(gdl++, G_CYC_FILL); gDPSetColorImage(gdl++, G_IM_FMT_RGBA, G_IM_SIZ_16b, viGetX(), osVirtualToPhysical(viGetFrameBuf2())); gDPSetFillColor(gdl++, ((GPACK_RGBA5551(0, 0, 0, 1) << 16) | GPACK_RGBA5551(0, 0, 0, 1))); @@ -226,13 +229,13 @@ s32 die_blood_image_routine(s32 arg0) { } g_CurrentPlayer->bloodImgIdx = (1 - g_CurrentPlayer->bloodImgIdx); - g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx] = dynAllocate(0x1E00); - temp_v0_2 = dynAllocate(0x1E00); - g_CurrentPlayer->bloodImgNxt = decrypt_bleeding_animation_data(g_CurrentPlayer->bloodImgCur, 0x50, 0x60, temp_v0_2, &sp37); - sub_GAME_7F01D16C(temp_v0_2, 0x50, 0x60, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]); - sub_GAME_7F01D02C(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], 0x50, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]); - sub_GAME_7F01CEEC(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], 0x50, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]); - sub_GAME_7F01CC94(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], 0x1E00, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]); + g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx] = dynAllocate(BLOOD_IMG_WIDTH * BLOOD_IMG_HEIGHT); + temp_v0_2 = dynAllocate(BLOOD_IMG_WIDTH * BLOOD_IMG_HEIGHT); + g_CurrentPlayer->bloodImgNxt = decrypt_bleeding_animation_data(g_CurrentPlayer->bloodImgCur, BLOOD_IMG_WIDTH, BLOOD_IMG_HEIGHT, temp_v0_2, &sp37); + bloodImgTranspose(temp_v0_2, BLOOD_IMG_WIDTH, BLOOD_IMG_HEIGHT, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]); + sub_GAME_7F01D02C(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], BLOOD_IMG_WIDTH, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]); + sub_GAME_7F01CEEC(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], BLOOD_IMG_WIDTH, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]); + sub_GAME_7F01CC94(g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx], BLOOD_IMG_WIDTH * BLOOD_IMG_HEIGHT, g_CurrentPlayer->bloodImgBufPtrArray[g_CurrentPlayer->bloodImgIdx]); return (g_CurrentPlayer->bloodImgNxt >= &die_blood_image_end); } diff --git a/src/game/blood_animation.h b/src/game/blood_animation.h index d80c5acc..3949e7ed 100644 --- a/src/game/blood_animation.h +++ b/src/game/blood_animation.h @@ -3,11 +3,12 @@ #include -Gfx *insert_imageDL(Gfx *gdl); +Gfx *clear_framebuffer_black(Gfx *gdl); Gfx *sub_GAME_7F01C1A4(Gfx *gdl); s32 die_blood_image_routine(s32 arg0); Gfx *gunbarrelBloodOverlayDL(Gfx *gdl); Gfx *sub_GAME_7F01CA18(Gfx *gdl); +Gfx *gameplayBloodOverlayDL(Gfx *gdl); #endif diff --git a/src/game/blood_decrypt.c b/src/game/blood_decrypt.c index 42fd4cc4..436be62a 100644 --- a/src/game/blood_decrypt.c +++ b/src/game/blood_decrypt.c @@ -67,8 +67,6 @@ u8 *decrypt_bleeding_animation_data(u8 *arg0, u8 arg1, u8 arg2, u8 *arg3, u8 *ar } - - void sub_GAME_7F01CC94(u8* arg0, u16 arg1, u8* arg2) { while (arg1-- > 0) @@ -78,6 +76,7 @@ void sub_GAME_7F01CC94(u8* arg0, u16 arg1, u8* arg2) } } + // Address 0x7F01CCEC NTSC void sub_GAME_7F01CCEC(u8 *arg0, u8 arg1, u8 arg2, u8 *arg3, u8 arg4) { @@ -124,7 +123,6 @@ void sub_GAME_7F01CCEC(u8 *arg0, u8 arg1, u8 arg2, u8 *arg3, u8 arg4) } - // Averages 4 pixel data, ending on "second" row. // Address 0x7F01CEEC NTSC void sub_GAME_7F01CEEC(u8 *arg0, s32 arg1, u8 *arg2) @@ -143,7 +141,6 @@ void sub_GAME_7F01CEEC(u8 *arg0, s32 arg1, u8 *arg2) } - // Averages 4 pixel data, ending on "first" row. // Address 0x7F01D02C NTSC void sub_GAME_7F01D02C(u8 *arg0, s32 arg1, u8 *arg2) @@ -161,131 +158,45 @@ void sub_GAME_7F01D02C(u8 *arg0, s32 arg1, u8 *arg2) } } -// Address 0x7F01D16C NTSC -void sub_GAME_7F01D16C(u8 *arg0, s32 arg1, s32 arg2, u8 *arg3) + +/** + * Address: 7F01D16C + * + * Converts the decoded blood frame from column-major to row-major order. + */ +void bloodImgTranspose(u8 *src, s32 srcwidth, s32 srcheight, u8 *dst) { - s32 temp_lo; - u32 temp_a0; + s32 pixelcount; + u32 rowend; u32 var_t2; u8 *var_t0; u8 *var_v1; u32 t1; - temp_lo = arg1 * arg2; - var_v1 = arg0; - var_t0 = arg3; - t1 = arg0 + temp_lo; - var_t2 = arg0 + arg1; + pixelcount = srcwidth * srcheight; + var_v1 = src; + var_t0 = dst; + t1 = src + pixelcount; + var_t2 = src + srcwidth; do { - temp_a0 = var_t2; + rowend = var_t2; do { *var_t0 = *var_v1++; var_t2 += 1; - var_t0 += arg2; + var_t0 += srcheight; - } while ((u32) var_v1 < temp_a0); + } while ((u32) var_v1 < rowend); - var_t0 = (var_t0 - (temp_lo)) + 1; + var_t0 = (var_t0 - (pixelcount)) + 1; } while ((u32) var_v1 < (u32) t1); } - -#ifdef NONMATCHING -// Unreferenced. -// Address 0x7F01D1C0 NTSC. -u8 *sub_GAME_7F01D1C0(u8 *arg0, s32 arg1, s32 arg2, u8 *arg3) -{ - // mips2c output makes this look like `decrypt_bleeding_animation_data`, but without - // u8 variables, and without arg4. But I can't get it to generate anything - // close to matching. - - // https://decomp.me/scratch/ptG72 0% -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F01D1C0 -/* 051CF0 7F01D1C0 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 051CF4 7F01D1C4 240C00FF */ li $t4, 255 -/* 051CF8 7F01D1C8 90880000 */ lbu $t0, ($a0) -/* 051CFC 7F01D1CC 24840001 */ addiu $a0, $a0, 1 -.L7F01D1D0: -/* 051D00 7F01D1D0 90890000 */ lbu $t1, ($a0) -/* 051D04 7F01D1D4 24840001 */ addiu $a0, $a0, 1 -/* 051D08 7F01D1D8 152C001A */ bne $t1, $t4, .L7F01D244 -/* 051D0C 7F01D1DC 240B00FF */ li $t3, 255 -/* 051D10 7F01D1E0 90890000 */ lbu $t1, ($a0) -/* 051D14 7F01D1E4 240A0000 */ li $t2, 0 -/* 051D18 7F01D1E8 112C000C */ beq $t1, $t4, .L7F01D21C -/* 051D1C 7F01D1EC 24840001 */ addiu $a0, $a0, 1 -.L7F01D1F0: -/* 051D20 7F01D1F0 01495021 */ addu $t2, $t2, $t1 -/* 051D24 7F01D1F4 19200005 */ blez $t1, .L7F01D20C -/* 051D28 7F01D1F8 2529FFFF */ addiu $t1, $t1, -1 -.L7F01D1FC: -/* 051D2C 7F01D1FC A0EB0000 */ sb $t3, ($a3) -/* 051D30 7F01D200 24E70001 */ addiu $a3, $a3, 1 -/* 051D34 7F01D204 1D20FFFD */ bgtz $t1, .L7F01D1FC -/* 051D38 7F01D208 2529FFFF */ addiu $t1, $t1, -1 -.L7F01D20C: -/* 051D3C 7F01D20C 90890000 */ lbu $t1, ($a0) -/* 051D40 7F01D210 396B00FF */ xori $t3, $t3, 0xff -/* 051D44 7F01D214 152CFFF6 */ bne $t1, $t4, .L7F01D1F0 -/* 051D48 7F01D218 24840001 */ addiu $a0, $a0, 1 -.L7F01D21C: -/* 051D4C 7F01D21C 0145082A */ slt $at, $t2, $a1 -/* 051D50 7F01D220 10200006 */ beqz $at, .L7F01D23C -/* 051D54 7F01D224 254A0001 */ addiu $t2, $t2, 1 -.L7F01D228: -/* 051D58 7F01D228 A0EB0000 */ sb $t3, ($a3) -/* 051D5C 7F01D22C 24E70001 */ addiu $a3, $a3, 1 -/* 051D60 7F01D230 0145082A */ slt $at, $t2, $a1 -/* 051D64 7F01D234 1420FFFC */ bnez $at, .L7F01D228 -/* 051D68 7F01D238 254A0001 */ addiu $t2, $t2, 1 -.L7F01D23C: -/* 051D6C 7F01D23C 0BC074A7 */ j .L7F01D29C -/* 051D70 7F01D240 24C6FFFF */ addiu $a2, $a2, -1 - -.L7F01D244: -/* 051D74 7F01D244 312A001F */ andi $t2, $t1, 0x1f -/* 051D78 7F01D248 01485021 */ addu $t2, $t2, $t0 -/* 051D7C 7F01D24C 00094942 */ srl $t1, $t1, 5 -/* 051D80 7F01D250 25290001 */ addiu $t1, $t1, 1 -/* 051D84 7F01D254 00C93023 */ subu $a2, $a2, $t1 -.L7F01D258: -/* 051D88 7F01D258 01405825 */ move $t3, $t2 -/* 051D8C 7F01D25C 19600005 */ blez $t3, .L7F01D274 -/* 051D90 7F01D260 256BFFFF */ addiu $t3, $t3, -1 -.L7F01D264: -/* 051D94 7F01D264 A0EC0000 */ sb $t4, ($a3) -/* 051D98 7F01D268 24E70001 */ addiu $a3, $a3, 1 -/* 051D9C 7F01D26C 1D60FFFD */ bgtz $t3, .L7F01D264 -/* 051DA0 7F01D270 256BFFFF */ addiu $t3, $t3, -1 -.L7F01D274: -/* 051DA4 7F01D274 00AA5823 */ subu $t3, $a1, $t2 -/* 051DA8 7F01D278 19600005 */ blez $t3, .L7F01D290 -/* 051DAC 7F01D27C 256BFFFF */ addiu $t3, $t3, -1 -.L7F01D280: -/* 051DB0 7F01D280 A0E00000 */ sb $zero, ($a3) -/* 051DB4 7F01D284 24E70001 */ addiu $a3, $a3, 1 -/* 051DB8 7F01D288 1D60FFFD */ bgtz $t3, .L7F01D280 -/* 051DBC 7F01D28C 256BFFFF */ addiu $t3, $t3, -1 -.L7F01D290: -/* 051DC0 7F01D290 2529FFFF */ addiu $t1, $t1, -1 -/* 051DC4 7F01D294 1D20FFF0 */ bgtz $t1, .L7F01D258 -/* 051DC8 7F01D298 00000000 */ nop -.L7F01D29C: -/* 051DCC 7F01D29C 1CC0FFCC */ bgtz $a2, .L7F01D1D0 -/* 051DD0 7F01D2A0 00801025 */ move $v0, $a0 -/* 051DD4 7F01D2A4 03E00008 */ jr $ra -/* 051DD8 7F01D2A8 27BD0010 */ addiu $sp, $sp, 0x10 -) -#endif +u8 *sub_GAME_7F01D1C0(u8 *arg0, s32 arg1, s32 arg2, u8 *arg3); diff --git a/src/game/blood_decrypt.h b/src/game/blood_decrypt.h index 8322fcfe..64de54d3 100644 --- a/src/game/blood_decrypt.h +++ b/src/game/blood_decrypt.h @@ -5,10 +5,11 @@ u8 *decrypt_bleeding_animation_data(u8 *arg0, u8 arg1, u8 arg2, u8 *arg3, u8 *arg4); -void sub_GAME_7F01D16C(u8*, s32, s32, u8*); +void bloodImgTranspose(u8 *src, s32 srcwidth, s32 srcheight, u8 *dst); void sub_GAME_7F01D02C(u8*, s32, u8*); void sub_GAME_7F01CEEC(u8*, s32, u8*); void sub_GAME_7F01CC94(u8*, u16, u8*); +u8 *sub_GAME_7F01D1C0(u8 *arg0, s32 arg1, s32 arg2, u8 *arg3); #endif diff --git a/src/game/bondhead.c b/src/game/bondhead.c index 8ebeffcf..e86e4ffe 100644 --- a/src/game/bondhead.c +++ b/src/game/bondhead.c @@ -252,13 +252,13 @@ void bheadUpdate(f32 percent_speed, f32 speedsideways) g_CurrentPlayer->resetheadtick = FALSE; modelSetAnimMergingEnabled(0); - modelTickAnimQuarterSpeed(&g_CurrentPlayer->model, g_ClockTimer, 1); + modelTickAnim(&g_CurrentPlayer->model, g_ClockTimer, 1); modelSetAnimMergingEnabled((s32) isMergable); subcalcpos(&g_CurrentPlayer->model); matrix_4x4_set_identity(&sp40); - renderData.unk_matrix = &sp40; + renderData.basemtx = &sp40; renderData.mtxlist = &g_CurrentPlayer->bondheadmatrices[0]; subcalcmatrices(&renderData, &g_CurrentPlayer->model); @@ -360,7 +360,7 @@ void bheadUpdate(f32 percent_speed, f32 speedsideways) // result = x vector plus ((y - x vector) * scaler) // lookvel = ... - sub_GAME_7F05AE00( + vec3Lerp( &g_CurrentPlayer->standlook[g_CurrentPlayer->standcnt].f[0], &g_CurrentPlayer->standlook[1 - g_CurrentPlayer->standcnt].f[0], g_CurrentPlayer->standfrac, @@ -371,7 +371,7 @@ void bheadUpdate(f32 percent_speed, f32 speedsideways) // result = x vector plus ((y - x vector) * scaler) // upvel = ... - sub_GAME_7F05AE00( + vec3Lerp( &g_CurrentPlayer->standup[g_CurrentPlayer->standcnt].f[0], &g_CurrentPlayer->standup[1 - g_CurrentPlayer->standcnt].f[0], g_CurrentPlayer->standfrac, diff --git a/src/game/bondhead.h b/src/game/bondhead.h index 4a619b39..387e97fc 100644 --- a/src/game/bondhead.h +++ b/src/game/bondhead.h @@ -17,7 +17,7 @@ struct init_bond_anim_unk { extern struct init_bond_anim_unk g_BondMoveAnimationSetup[]; s32 waypointFindRoute(waypoint *, waypoint *, waypoint ** arr, s32 arr_len); -waypoint * sub_GAME_7F08FB90(waypoint *, waypoint *); +waypoint * waypointFindNextStepToward(waypoint *, waypoint *); void bheadFlipAnimation(void); void bheadUpdateIdleRoll(void); void bheadUpdate(f32 percent_speed, f32 speedsideways); diff --git a/src/game/bondinv.c b/src/game/bondinv.c index b4cd1fbf..e24af90a 100644 --- a/src/game/bondinv.c +++ b/src/game/bondinv.c @@ -250,7 +250,7 @@ InvItem *bondinvGetDualWeapon(ITEM_IDS right, ITEM_IDS left) * @param left: enum Item ID eg: ITEM_KNIFE * @return TRUE/FALSE */ -int bondinvHasDualWeapon(ITEM_IDS right, ITEM_IDS left) +bool bondinvHasDualWeapon(ITEM_IDS right, ITEM_IDS left) { return bondinvGetDualWeapon(right, left) != NULL; } diff --git a/src/game/bondinv.h b/src/game/bondinv.h index ef75b88c..82300b49 100644 --- a/src/game/bondinv.h +++ b/src/game/bondinv.h @@ -15,7 +15,7 @@ textoverride *bondinvGetTextbyWeaponID(ITEM_IDS weaponnum); void bondinvCycleBackward(s32 *nextright, s32 *nextleft, s32 requireammo); void bondinvCycleForward(s32 *nextright, s32 *nextleft, s32 requireammo); -int bondinvHasGoldenGun(void); +bool bondinvHasGoldenGun(void); int bondinvAddInvItem(ITEM_IDS item); int bondinvAddDoublesInvItem(ITEM_IDS right, ITEM_IDS left); s32 bondinvGetAllGunsFlag(void); @@ -26,5 +26,6 @@ void bondinvRemoveItemByID(ITEM_IDS weaponnum); s32 bondinvGetWeaponOfChoice(s32 *weapon1, s32 *weapon2); s32 bondinvItemAvailableForHand(ITEM_IDS right, ITEM_IDS left); s32 bondinvItemAvailable(ITEM_IDS weaponid); +void bondinvAddTextOverride(textoverride *override); #endif diff --git a/src/game/bondview.c b/src/game/bondview.c index da786a47..c2502fc6 100644 --- a/src/game/bondview.c +++ b/src/game/bondview.c @@ -9,39 +9,41 @@ #include #include #include "bg.h" -#include "bondview.h" -#include "bondinv.h" +#include "bgroomtrans.h" +#include "blood_animation.h" #include "bondhead.h" +#include "bondinv.h" +#include "bondview.h" #include "chr.h" -#include "chrai.h" #include "chr_b.h" #include "chraction.h" -#include "propobj.h" +#include "chrai.h" #include "debugmenu_handler.h" +#include "explosion.h" #include "file.h" +#include "frametiming.h" #include "front.h" +#include "glass.h" #include "gun.h" #include "initanitable.h" +#include "language.h" #include "loadobjectmodel.h" #include "lv.h" -#include "language.h" #include "math_atan2f.h" #include "matrixmath.h" +#include "model.h" #include "mp_music.h" #include "mpmenu.h" #include "objecthandler.h" +#include "objective_status.h" +#include "os_extension.h" #include "player.h" +#include "propobj.h" #include "quaternion.h" #include "random.h" #include "stan.h" -#include "textrelated.h" -#include "frametiming.h" -#include "bgroomtrans.h" -#include "glass.h" -#include "explosion.h" -#include "os_extension.h" #include "stanintersection.h" -#include "model.h" +#include "textrelated.h" #ifdef VERSION_EU @@ -156,36 +158,28 @@ // bss -coord3d flt_CODE_bss_80079940; -f32 flt_CODE_bss_8007994C; -coord3d flt_CODE_bss_80079950; -f32 flt_CODE_bss_8007995C; -coord3d flt_CODE_bss_80079960; -f32 flt_CODE_bss_8007996C; -coord3d flt_CODE_bss_80079970; -f32 flt_CODE_bss_8007997C; -//CODE.bss:80079980 -f32 flt_CODE_bss_80079980; -//CODE.bss:80079984 -f32 flt_CODE_bss_80079984; -//CODE.bss:80079988 -f32 flt_CODE_bss_80079988; -//CODE.bss:8007998C -f32 flt_CODE_bss_8007998C; +coord3d g_CamFrustumTopNormal; +f32 g_CamFrustumTopOffset; +coord3d g_CamFrustumBottomNormal; +f32 g_CamFrustumBottomOffset; +coord3d g_CamFrustumLeftNormal; +f32 g_CamFrustumLeftOffset; +coord3d g_CamFrustumRightNormal; +f32 g_CamFrustumRightOffset; +f32 g_CamFrustumNearOffset; + +f32 flt_CODE_bss_80079984; // unused +f32 flt_CODE_bss_80079988; // unused +f32 flt_CODE_bss_8007998C; // unused -//CODE.bss:80079990 vec3d g_ForceBondMoveOffset; -// //CODE.bss:80079994 -// f32 flt_CODE_bss_80079994; -// //CODE.bss:80079998 -// f32 flt_CODE_bss_80079998; //CODE.bss:8007999C s32 g_SurroundBondWithExplosionsTicks; //CODE.bss:800799A0 s32 g_PlayerTickExplodeCreatePosition; //CODE.bss:800799A4 -s32 dword_CODE_bss_800799A4; +s32 dword_CODE_bss_800799A4; // unused //CODE.bss:800799A8 struct coord3d g_TankModelPositionOffset; @@ -222,17 +216,15 @@ f32 g_TankEnterBondHorizAngleDeg; f32 g_TankEnterBondVertAngleDeg; //CODE.bss:800799CC -f32 flt_CODE_bss_800799CC; +f32 flt_CODE_bss_800799CC; // unused/padding //CODE.bss:800799D0 struct coord3d g_EnterTankCoord; //CODE.bss:800799DC -f32 flt_CODE_bss_800799DC; +f32 flt_CODE_bss_800799DC; // unused/padding //CODE.bss:800799E0 -//s32 starting_right_weapon; -//s32 starting_left_weapon; ITEM_IDS starting_weapon[2]; //CODE.bss:800799E8 @@ -242,7 +234,7 @@ struct coord3d flt_CODE_bss_800799E8; struct PropRecord* dword_CODE_bss_800799F4; //CODE.bss:800799F8 -PadRecord * dword_CODE_bss_800799F8; +PadRecord * g_CameraLookAtBondPad; //CODE.bss:800799FC CutsceneRecord *gBondViewCutscene; //CODE.bss:80079A00 @@ -361,7 +353,7 @@ CreditsEntry *credits_pointer = NULL; s32 g_SurroundBondWithExplosionsFlag = 0; //D:80036448 -s32 in_tank_flag = 0; +s32 g_PlayerIsInTank = 0; //D:8003644C struct PropRecord *g_WorldTankProp = NULL; @@ -454,7 +446,7 @@ struct SetupIntroSwirl *g_IntroSwirl = NULL; //D:800364B0 s32 is_timer_active = 1; //D:800364B4 -s32 g_PlayerInvincible = 0; +bool g_PlayerInvincible = FALSE; //D:800364B8 struct SetupIntroCamera* g_CurrentSetupIntroCamera = NULL; //D:800364BC @@ -562,27 +554,31 @@ WeaponObjRecord dummy_08_pp7_obj[] = { //D:80036634 struct DamageType g_DamageTypes[] = { - { 0, 10.0, 60.0, 0.6, 0, 5.0, 40.0, 1.0, 0xFF, 0xFF, 0xFF}, + { 0, 10.0, 60.0, 0.6, 0, 5.0, 40.0, 1.0, 0xFF, 0xFF, 0xFF}, // 1 bars { 0, 10.0, 60.0, 0.6, 0, 5.0, 40.0, 1.0, 0xFF, 0xFF, 0xFF}, { 0, 10.0, 50.0, 0.6, 0, 5.0, 30.0, 0.800000011921, 0xFF, 0xFF, 0xFF}, { 0, 10.0, 40.0, 0.6, 0, 5.0, 25.0, 0.600000023842, 0xFF, 0xFF, 0xFF}, { 0, 10.0, 35.0, 0.6, 0, 5.0, 22.0, 0.550000011921, 0xFF, 0xFF, 0xFF}, { 0, 10.0, 30.0, 0.6, 0, 5.0, 19.0, 0.5, 0xFF, 0xFF, 0xFF}, { 0, 10.0, 30.0, 0.6, 0, 5.0, 17.0, 0.449999988079, 0xFF, 0xFF, 0xFF}, - { 0, 10.0, 30.0, 0.6, 0, 5.0, 15.0, 0.40000000596, 0xFF, 0xFF, 0xFF} + { 0, 10.0, 30.0, 0.6, 0, 5.0, 15.0, 0.40000000596, 0xFF, 0xFF, 0xFF} // 8 bars }; //D:80036794 -struct HealthDamageType g_HealthDamageTypes[8] = { - { 0, 40, 100 }, +/** + * The second column is how many frames before the gauge switches from showing the old health to the new health. + * The third column is how many frames before the health display is hidden. + */ +struct HealthDisplayDuration g_HealthDisplayDurations[8] = { + { 0, 40, 100 }, // 1 bar of health { 0, 30, 80 }, { 0, 20, 60 }, { 0, 20, 60 }, { 0, 20, 60 }, { 0, 20, 50 }, { 0, 20, 50 }, - { 0, 20, 50 } + { 0, 20, 50 } // 8 bars of health }; /** @@ -590,7 +586,6 @@ struct HealthDamageType g_HealthDamageTypes[8] = { */ struct coord3d g_DefaultMoveBondOffset = { 0 }; - /** * struct player property `pos` . * US address 80036800. @@ -616,12 +611,8 @@ struct coord3d g_DefaultFrozenPlayerOffset = { 0, 1.0f, 0 }; struct coord3d g_DefaultFrozenMoveOffset = { 0 }; //D:80036830 -s32 D_80036830 = 0; -//D:80036834 -s32 D_80036834 = 0; -//D:80036838 -s32 D_80036838 = 0; -//D:8003683C +struct coord3d ZeroCoordShake = { 0 }; + ModelRenderData D_8003683C = {NULL, TRUE, 0x00000003, @@ -640,21 +631,11 @@ ModelRenderData D_8003683C = {NULL, CULLMODE_BOTH}; //D:8003687C -s32 D_8003687C = 0; - -//D:80036880 -s32 D_80036880 = 0; -//D:80036884 -s32 D_80036884 = 0; +coord3d ZeroCoordWatchPos = {0}; //D:80036888 -s32 D_80036888 = 0; - +s32 D_80036888 = 0; // unused/padding //D:8003688C -s32 D_8003688C = 0; -//D:80036890 -s32 D_80036890 = 0; -//D:80036894 -s32 D_80036894 = 0; +coord3d ZeroCoordSpawnPos = {0}; //D:80036898 s32 status_bar_text_buffer_index = 0; //D:8003689C @@ -673,35 +654,36 @@ s32 display_upper_text_window = 0; s32 upper_text_window_timer = 0xFFFFFFFF; s32 g_UpperTextDisplayFlag = 0; //D:800368B8 -u8 D_800368B8[10][3] = {"n", "ne", "e", "se", "s", "sw", "w", "nw", "n", "" }; +DirectionLabels g_DebugCompassLabels = {{"n", "ne", "e", "se", "s", "sw", "w", "nw", "n"}}; +s32 g_PlayerTickCount = 0; //D:800368D8 -struct firing_anim_struct firing_animation_groups[] = { - {pistol_firing_animation_group1, 0, 0.1, 79.0, 87.0}, - {&D_80030660[2], 0, 0.5, 0.0, -1.0}, - {&D_80030660[3], 0, 0.5, 0.0, -1.0}, - {&D_80030660[8], 0, 0.5, 0.0, -1.0}, - {&D_80030660[9], 0, 0.5, 0.0, -1.0}, - {crouched_pistol_firing_animation_group1, 0, 0.1, 56.0, 68.0}, - {rifle_firing_animation_group1, 0, 0.050000001, 35.0, 40.0}, - {&D_80030660[0], 0, 0.5, 0.0, -1.0}, - {&D_80030660[1], 0, 0.5, 0.0, -1.0}, - {&D_80030660[8], 0, 0.5, 0.0, -1.0}, - {&D_80030660[9], 0, 0.5, 0.0, -1.0}, - {crouched_rifle_firing_animation_groupA, 0, 0.1, 45.0, 55.0}, - {NULL, 0x8194, 0.25, 0.0, -1.0}, - {NULL, 0x8204, 0.5, 0.0, -1.0}, - {NULL, 0x777C, 0.5, 0.0, -1.0}, - {&D_80030660[8], 0, 0.5, 0.0, -1.0}, - {&D_80030660[9], 0, 0.5, 0.0, -1.0}, - {NULL, 0x6C18, 0.050000001, 28.0, 29.0}, - {doubles_firing_animation_group1, 0, 0.1, 32.0, 42.0}, - {&D_80030660[4], 0, 0.5, 0.0, -1.0}, - {&D_80030660[5], 0, 0.5, 0.0, -1.0}, - {&D_80030660[8], 0, 0.5, 0.0, -1.0}, - {&D_80030660[8], 0, 0.5, 0.0, -1.0}, - {crouched_doubles_firing_animation_group1, 0, 0.1, 37.0, 47.0} -}; +struct firing_anim_struct firing_animation_groups[][6] = { + {{pistol_firing_animation_group1, 0, 0.1, 79.0, 87.0}, + {&D_80030660[2], 0, 0.5, 0.0, -1.0}, + {&D_80030660[3], 0, 0.5, 0.0, -1.0}, + {&D_80030660[8], 0, 0.5, 0.0, -1.0}, + {&D_80030660[9], 0, 0.5, 0.0, -1.0}, + {crouched_pistol_firing_animation_group1, 0, 0.1, 56.0, 68.0}}, + {{rifle_firing_animation_group1, 0, 0.050000001, 35.0, 40.0}, + {&D_80030660[0], 0, 0.5, 0.0, -1.0}, + {&D_80030660[1], 0, 0.5, 0.0, -1.0}, + {&D_80030660[8], 0, 0.5, 0.0, -1.0}, + {&D_80030660[9], 0, 0.5, 0.0, -1.0}, + {crouched_rifle_firing_animation_groupA, 0, 0.1, 45.0, 55.0}}, + {{NULL, 0x8194, 0.25, 0.0, -1.0}, + {NULL, 0x8204, 0.5, 0.0, -1.0}, + {NULL, 0x777C, 0.5, 0.0, -1.0}, + {&D_80030660[8], 0, 0.5, 0.0, -1.0}, + {&D_80030660[9], 0, 0.5, 0.0, -1.0}, + {NULL, 0x6C18, 0.050000001, 28.0, 29.0}}, + {{doubles_firing_animation_group1, 0, 0.1, 32.0, 42.0}, + {&D_80030660[4], 0, 0.5, 0.0, -1.0}, + {&D_80030660[5], 0, 0.5, 0.0, -1.0}, + {&D_80030660[8], 0, 0.5, 0.0, -1.0}, + {&D_80030660[8], 0, 0.5, 0.0, -1.0}, + {crouched_doubles_firing_animation_group1, 0, 0.1, 37.0, 47.0}} + }; //D:80036AB8 s32 D_80036AB8 = 2; @@ -714,8 +696,9 @@ f32 D_80036AC4 = 0.1; // forward declarations -void sub_GAME_7F07DE9C(struct player *player); -void sub_GAME_7F07DE64(struct player *player); +void bondviewUpdatePlayerRoom(struct player *player); +s32 chrTick(PropRecord *prop); +void bondviewDeregisterPlayerRoom(struct player *player); void bondviewUpdateWatchZoomIn(void); void bondviewSetPauseWatchRelated(f32 arg0); void bondviewSetPauseWatchRelatedAlt(f32 arg0); @@ -730,7 +713,7 @@ void currentPlayerTickChrFade(void); void currentPlayerUpdateColourScreenProperties(void); s16 getWidth320or440(void); s16 getHeight330or240(void); -void sub_GAME_7F07B1A4(void); +void bondviewAdvanceCameraMode(void); bool currentPlayerIsFadeComplete(void); s16 get_curplayer_viewport_ulx(void); void bondviewFrozenMoveBond(s8, s8, u16, u16); @@ -741,7 +724,6 @@ void bondviewUpdatePlayerCollisionBounds(void); void bondviewGetTankCollisionBounds(struct rect4f *, coord3d *, f32); void bondviewIntroCameraTextTick(void); void bondviewUpperTextWindowTimerTick(void); -void sub_GAME_7F07DEFC(void); void MoveBond(s8 arg0, s8 arg1, u16 arg2, u16 arg3); void bondviewProcessInput(s8 arg0, s8 arg1, u16 arg2, u16 arg3); void bondviewPlayerTickDamageAndHealth(void); @@ -764,18 +746,23 @@ void bondviewApplyVertaTheta(void); f32 bheadGetBreathingValue(void); void bondviewMoveAnimationTick(f32 speed, f32 speedforwards, f32 speedsideways); void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot); -f32 bondviewPauseAngleRelated(s32 arg0); -void sub_GAME_7F07E010(f32 arg0); -void sub_GAME_7F07E03C(f32 arg0); -s32 sub_GAME_7F07E068(void); +f32 bondviewSetupPauseTransition(bool topause); +void bondviewStartPauseTransition(f32 duration); +void bondviewStartUnpauseTransition(f32 duration); +bool bondViewIsPauseTransitioning(void); f32 sub_GAME_7F080228(f32 arg0); void currentPlayerSetSwayTarget(s32 value); void currentPlayerAdjustCrouchPos(s32 value); void bondviewUpdateSpeedSideways(s32 arg0); void bondviewUpdateSpeedForwards(s32 arg0); void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, struct coord3d *pos2, struct coord3d *offset, struct StandTile **stan, struct coord3d *arg6); -void sub_GAME_7F07B2A0(s32, f32, struct coord3d *, struct coord3d *); -s32 pickDeathCameraAngles(struct PropRecord *, struct coord3d *, struct PropRecord *, struct coord3d *, struct StandTile *, f32); +void bondviewCalcIntroSwirlCamera(s32, f32, struct coord3d *, struct coord3d *); +s32 pickDeathCameraAngles(PropRecord *prop1, coord3d *pos, PropRecord *prop2, coord3d *collision_pos, StandTile *tile, f32 camera_dist); +Gfx* hudmsgBottomRender(Gfx* arg0); +Gfx *sub_GAME_7F08AAE8(Gfx *gdl); +Gfx *bondviewRenderCredits(Gfx *gdl); +Gfx *bondviewRenderWatch(Gfx *gdl); +Gfx *bondviewRenderGaugeBars(Gfx *gdl); // end forward declarations @@ -784,6 +771,7 @@ void nullsub_75(void) return; } + void currentPlayerSetScreenSize(f32 width, f32 height) { g_CurrentPlayer->c_screenwidth = width; @@ -792,12 +780,14 @@ void currentPlayerSetScreenSize(f32 width, f32 height) g_CurrentPlayer->c_halfheight = height * 0.5f; } + void currentPlayerSetScreenPosition(f32 left, f32 top) { g_CurrentPlayer->c_screenleft = left; g_CurrentPlayer->c_screentop = top; } + void currentPlayerSetPerspective(f32 near, f32 fovy, f32 aspect) { g_CurrentPlayer->c_perspnear = near; @@ -805,6 +795,7 @@ void currentPlayerSetPerspective(f32 near, f32 fovy, f32 aspect) g_CurrentPlayer->c_perspaspect = aspect; } + void currentPlayerSetCameraScale(void) { f32 fVar4; @@ -823,9 +814,12 @@ void currentPlayerSetCameraScale(void) g_CurrentPlayer->c_lodscalez = g_CurrentPlayer->c_scalelod / g_CurrentPlayer->c_scalelod60; tmp = (g_CurrentPlayer->c_lodscalez * M_U16_MAX_VALUE_F); - if (tmp > M_U32_MAX_VALUE_F) { + if (tmp > M_U32_MAX_VALUE_F) + { g_CurrentPlayer->c_lodscalezu32 = -1; - } else { + } + else + { g_CurrentPlayer->c_lodscalezu32 = tmp; } @@ -842,19 +836,22 @@ void currentPlayerSetCameraScale(void) g_CurrentPlayer->c_cameraleftnorm.z = -fVar5 * fVar4; } + /** + * Address: 7F077EEC. + * * Transforms a 2D screen coordinate to a 3D world coordinate * * 'out' looks to be a vector which probably has the length 'length' - * It starts from the middle of the screen. - * - * Address 0x7F077EEC. + * It starts from the middle of the screenn. */ -void transformAndNormalizeByLength2Dto3D(coord2d *in, coord3d *out, f32 length) { +void transformAndNormalizeByLength2Dto3D(coord2d *in, coord3d *out, f32 length) +{ f32 norm; f32 x; f32 y; f32 z; + y = (g_CurrentPlayer->c_halfheight - (in->y - g_CurrentPlayer->c_screentop)) * g_CurrentPlayer->c_scaley; x = ((in->x - g_CurrentPlayer->c_screenleft) - g_CurrentPlayer->c_halfwidth) * g_CurrentPlayer->c_scalex; z = -1.0f; @@ -864,24 +861,32 @@ void transformAndNormalizeByLength2Dto3D(coord2d *in, coord3d *out, f32 length) out->z = (-1.0f * norm); } -void scale3DCoordinates(coord3d *in, f32 value, coord3d *out) { + +void scale3DCoordinates(coord3d *in, f32 value, coord3d *out) +{ out->y = ((in->y * value) * g_CurrentPlayer->c_scaley); out->x = ((in->x * value) * g_CurrentPlayer->c_scalex); } -void transform3Dto2DCoords(coord3d *in, coord2d *out) { + +void transform3Dto2DCoords(coord3d *in, coord2d *out) +{ f32 inv_z = (1.0f / in->z); out->y = (in->y * inv_z * g_CurrentPlayer->c_recipscaley) + (g_CurrentPlayer->c_screentop + g_CurrentPlayer->c_halfheight); out->x = (g_CurrentPlayer->c_screenleft + g_CurrentPlayer->c_halfwidth) - (in->x * inv_z * g_CurrentPlayer->c_recipscalex); } + void transform3Dto2DWithZScaling(coord3d *in, coord3d *out) { f32 inv_z; - if (in->z == 0.0f) { + if (in->z == 0.0f) + { inv_z = -100000000000000000000.0f; - } else { + } + else + { inv_z = 1.0f / in->z; } @@ -889,13 +894,16 @@ void transform3Dto2DWithZScaling(coord3d *in, coord3d *out) out->x = (g_CurrentPlayer->c_screenleft + g_CurrentPlayer->c_halfwidth) - in->x * inv_z * g_CurrentPlayer->c_recipscalex; } + void divide3DCoordinates(coord3d *in, f32 divisor, coord3d *out) { out->y = in->y * (1.0f / divisor) * g_CurrentPlayer->c_recipscaley; out->x = in->x * (1.0f / divisor) * g_CurrentPlayer->c_recipscalex; } -void transform3DCoordinatesWithAngle(coord3d *in, coord3d *out, f32 value1, f32 angle, f32 value2) { + +void transform3DCoordinatesWithAngle(coord3d *in, coord3d *out, f32 value1, f32 angle, f32 value2) +{ f32 var1; f32 x; f32 y; @@ -911,6 +919,7 @@ void transform3DCoordinatesWithAngle(coord3d *in, coord3d *out, f32 value1, f32 out->z = (-1.0f * var1); } + /** * Unreferenced. * @@ -925,6 +934,29 @@ void transform3DCoordinatesWithAngleAndValue(coord3d *in, coord3d *out, f32 angl out->f[0] = (g_CurrentPlayer->c_screenleft + g_CurrentPlayer->c_halfwidth) - (in->f[0] * var2); } +GLOBAL_ASM( +.late_rodata +.late_rodata_alignment 8 +glabel D_80054FB8 +.word 0 +glabel D_80054FBC +.word 0 +glabel a8s +.word 0x25387300 +glabel aX4_0f +.word 0x78202534 +.word 0x2e306600 +glabel aY4_0f +.word 0x79202534 +.word 0x2e306600 +glabel aZ4_0f +.word 0x7a202534 +.word 0x2e306600 +glabel aS3d +.word 0x25732025 +.word 0x33640000 +) + void currentPlayerSetMatrix10C4(Mtx *matrix) { g_CurrentPlayer->field_10C4 = matrix; } @@ -986,13 +1018,13 @@ s32 sub_GAME_7F078414(void) { return g_CurrentPlayer->field_10D0; } -void currentPlayerSetMatrix10D4(Mtxf *matrix) { - g_CurrentPlayer->field_10EC = g_CurrentPlayer->field_10D4; - g_CurrentPlayer->field_10D4 = matrix; +void currentPlayerSetViewToWorldMtxf(Mtxf *matrix) { + g_CurrentPlayer->field_10EC = g_CurrentPlayer->viewtoworldmtxf; + g_CurrentPlayer->viewtoworldmtxf = matrix; } -Mtxf *currentPlayerGetMatrix10D4(void) { - return g_CurrentPlayer->field_10D4; +Mtxf *currentPlayerGetViewToWorldMtxf(void) { + return g_CurrentPlayer->viewtoworldmtxf; } Mtxf *currentPlayerGetMatrix10EC(void) { @@ -1081,7 +1113,13 @@ f32 getPlayer_c_perspnear(void) return g_CurrentPlayer->c_perspnear; } -void sub_GAME_7F0785DC() + +/** + * Address: 7F0785DC + * + * Update the world space frustum planes used for object visibility tests. + */ +void bondviewUpdateFrustumPlanes() { f32 h_div; f32 h2; @@ -1095,215 +1133,156 @@ void sub_GAME_7F0785DC() h *= h_div; nh_div = -h_div; - flt_CODE_bss_80079940.x = (-nh_div * g_CurrentPlayer->field_10D4->m[1][0]) + (h * g_CurrentPlayer->field_10D4->m[2][0]); - flt_CODE_bss_80079940.y = (-nh_div * g_CurrentPlayer->field_10D4->m[1][1]) + (h * g_CurrentPlayer->field_10D4->m[2][1]); - flt_CODE_bss_80079940.z = (-nh_div * g_CurrentPlayer->field_10D4->m[1][2]) + (h * g_CurrentPlayer->field_10D4->m[2][2]); + g_CamFrustumTopNormal.x = (-nh_div * g_CurrentPlayer->viewtoworldmtxf->m[1][0]) + (h * g_CurrentPlayer->viewtoworldmtxf->m[2][0]); + g_CamFrustumTopNormal.y = (-nh_div * g_CurrentPlayer->viewtoworldmtxf->m[1][1]) + (h * g_CurrentPlayer->viewtoworldmtxf->m[2][1]); + g_CamFrustumTopNormal.z = (-nh_div * g_CurrentPlayer->viewtoworldmtxf->m[1][2]) + (h * g_CurrentPlayer->viewtoworldmtxf->m[2][2]); - flt_CODE_bss_8007994C = (flt_CODE_bss_80079940.x * g_CurrentPlayer->field_10D4->m[3][0]) - + (flt_CODE_bss_80079940.y * g_CurrentPlayer->field_10D4->m[3][1]) - + (flt_CODE_bss_80079940.z * g_CurrentPlayer->field_10D4->m[3][2]); + g_CamFrustumTopOffset = (g_CamFrustumTopNormal.x * g_CurrentPlayer->viewtoworldmtxf->m[3][0]) + + (g_CamFrustumTopNormal.y * g_CurrentPlayer->viewtoworldmtxf->m[3][1]) + + (g_CamFrustumTopNormal.z * g_CurrentPlayer->viewtoworldmtxf->m[3][2]); - flt_CODE_bss_80079950.x = (nh_div * g_CurrentPlayer->field_10D4->m[1][0]) + (h * g_CurrentPlayer->field_10D4->m[2][0]); - flt_CODE_bss_80079950.y = (nh_div * g_CurrentPlayer->field_10D4->m[1][1]) + (h * g_CurrentPlayer->field_10D4->m[2][1]); - flt_CODE_bss_80079950.z = (nh_div * g_CurrentPlayer->field_10D4->m[1][2]) + (h * g_CurrentPlayer->field_10D4->m[2][2]); + g_CamFrustumBottomNormal.x = (nh_div * g_CurrentPlayer->viewtoworldmtxf->m[1][0]) + (h * g_CurrentPlayer->viewtoworldmtxf->m[2][0]); + g_CamFrustumBottomNormal.y = (nh_div * g_CurrentPlayer->viewtoworldmtxf->m[1][1]) + (h * g_CurrentPlayer->viewtoworldmtxf->m[2][1]); + g_CamFrustumBottomNormal.z = (nh_div * g_CurrentPlayer->viewtoworldmtxf->m[1][2]) + (h * g_CurrentPlayer->viewtoworldmtxf->m[2][2]); - flt_CODE_bss_8007995C = (flt_CODE_bss_80079950.x * g_CurrentPlayer->field_10D4->m[3][0]) - + (flt_CODE_bss_80079950.y * g_CurrentPlayer->field_10D4->m[3][1]) - + (flt_CODE_bss_80079950.z * g_CurrentPlayer->field_10D4->m[3][2]); + g_CamFrustumBottomOffset = (g_CamFrustumBottomNormal.x * g_CurrentPlayer->viewtoworldmtxf->m[3][0]) + + (g_CamFrustumBottomNormal.y * g_CurrentPlayer->viewtoworldmtxf->m[3][1]) + + (g_CamFrustumBottomNormal.z * g_CurrentPlayer->viewtoworldmtxf->m[3][2]); h2 = (-g_CurrentPlayer->c_halfwidth) * g_CurrentPlayer->c_scalex; h2_div = 1.0f / sqrtf((h2 * h2) + 1.0f); h2 *= h2_div; nh2_div = -h2_div; - flt_CODE_bss_80079960.x = (nh2_div * g_CurrentPlayer->field_10D4->m[0][0]) - (h2 * g_CurrentPlayer->field_10D4->m[2][0]); - flt_CODE_bss_80079960.y = (nh2_div * g_CurrentPlayer->field_10D4->m[0][1]) - (h2 * g_CurrentPlayer->field_10D4->m[2][1]); - flt_CODE_bss_80079960.z = (nh2_div * g_CurrentPlayer->field_10D4->m[0][2]) - (h2 * g_CurrentPlayer->field_10D4->m[2][2]); + g_CamFrustumLeftNormal.x = (nh2_div * g_CurrentPlayer->viewtoworldmtxf->m[0][0]) - (h2 * g_CurrentPlayer->viewtoworldmtxf->m[2][0]); + g_CamFrustumLeftNormal.y = (nh2_div * g_CurrentPlayer->viewtoworldmtxf->m[0][1]) - (h2 * g_CurrentPlayer->viewtoworldmtxf->m[2][1]); + g_CamFrustumLeftNormal.z = (nh2_div * g_CurrentPlayer->viewtoworldmtxf->m[0][2]) - (h2 * g_CurrentPlayer->viewtoworldmtxf->m[2][2]); - flt_CODE_bss_8007996C = (flt_CODE_bss_80079960.x * g_CurrentPlayer->field_10D4->m[3][0]) - + (flt_CODE_bss_80079960.y * g_CurrentPlayer->field_10D4->m[3][1]) - + (flt_CODE_bss_80079960.z * g_CurrentPlayer->field_10D4->m[3][2]); + g_CamFrustumLeftOffset = (g_CamFrustumLeftNormal.x * g_CurrentPlayer->viewtoworldmtxf->m[3][0]) + + (g_CamFrustumLeftNormal.y * g_CurrentPlayer->viewtoworldmtxf->m[3][1]) + + (g_CamFrustumLeftNormal.z * g_CurrentPlayer->viewtoworldmtxf->m[3][2]); - flt_CODE_bss_80079970.x = (-nh2_div * g_CurrentPlayer->field_10D4->m[0][0]) - (h2 * g_CurrentPlayer->field_10D4->m[2][0]); - flt_CODE_bss_80079970.y = (-nh2_div * g_CurrentPlayer->field_10D4->m[0][1]) - (h2 * g_CurrentPlayer->field_10D4->m[2][1]); - flt_CODE_bss_80079970.z = (-nh2_div * g_CurrentPlayer->field_10D4->m[0][2]) - (h2 * g_CurrentPlayer->field_10D4->m[2][2]); + g_CamFrustumRightNormal.x = (-nh2_div * g_CurrentPlayer->viewtoworldmtxf->m[0][0]) - (h2 * g_CurrentPlayer->viewtoworldmtxf->m[2][0]); + g_CamFrustumRightNormal.y = (-nh2_div * g_CurrentPlayer->viewtoworldmtxf->m[0][1]) - (h2 * g_CurrentPlayer->viewtoworldmtxf->m[2][1]); + g_CamFrustumRightNormal.z = (-nh2_div * g_CurrentPlayer->viewtoworldmtxf->m[0][2]) - (h2 * g_CurrentPlayer->viewtoworldmtxf->m[2][2]); - flt_CODE_bss_8007997C = (flt_CODE_bss_80079970.x * g_CurrentPlayer->field_10D4->m[3][0]) - + (flt_CODE_bss_80079970.y * g_CurrentPlayer->field_10D4->m[3][1]) - + (flt_CODE_bss_80079970.z * g_CurrentPlayer->field_10D4->m[3][2]); + g_CamFrustumRightOffset = (g_CamFrustumRightNormal.x * g_CurrentPlayer->viewtoworldmtxf->m[3][0]) + + (g_CamFrustumRightNormal.y * g_CurrentPlayer->viewtoworldmtxf->m[3][1]) + + (g_CamFrustumRightNormal.z * g_CurrentPlayer->viewtoworldmtxf->m[3][2]); - flt_CODE_bss_80079980 = (g_CurrentPlayer->field_10D4->m[2][0] * g_CurrentPlayer->field_10D4->m[3][0]) - + (g_CurrentPlayer->field_10D4->m[2][1] * g_CurrentPlayer->field_10D4->m[3][1]) - + (g_CurrentPlayer->field_10D4->m[2][2] * g_CurrentPlayer->field_10D4->m[3][2]); + g_CamFrustumNearOffset = (g_CurrentPlayer->viewtoworldmtxf->m[2][0] * g_CurrentPlayer->viewtoworldmtxf->m[3][0]) + + (g_CurrentPlayer->viewtoworldmtxf->m[2][1] * g_CurrentPlayer->viewtoworldmtxf->m[3][1]) + + (g_CurrentPlayer->viewtoworldmtxf->m[2][2] * g_CurrentPlayer->viewtoworldmtxf->m[3][2]); } -void sub_GAME_7F078950(coord3d *arg0, f32 *arg1) { - arg0->x = flt_CODE_bss_80079940.x; - arg0->y = flt_CODE_bss_80079940.y; - arg0->z = flt_CODE_bss_80079940.z; - *arg1 = flt_CODE_bss_8007994C; + +/** + * Address: 7F078950 + * + * Unreferenced. + */ +void bondviewGetFrustumTopPlane(coord3d *normal, f32 *offset) +{ + normal->x = g_CamFrustumTopNormal.x; + normal->y = g_CamFrustumTopNormal.y; + normal->z = g_CamFrustumTopNormal.z; + *offset = g_CamFrustumTopOffset; } -void sub_GAME_7F078980(coord3d *arg0, f32 *arg1) { - arg0->x = flt_CODE_bss_80079950.x; - arg0->y = flt_CODE_bss_80079950.y; - arg0->z = flt_CODE_bss_80079950.z; - *arg1 = flt_CODE_bss_8007995C; + +/** + * Address: 7F078980 + * + * Unreferenced. + */ +void bondviewGetFrustumBottomPlane(coord3d *normal, f32 *offset) +{ + normal->x = g_CamFrustumBottomNormal.x; + normal->y = g_CamFrustumBottomNormal.y; + normal->z = g_CamFrustumBottomNormal.z; + *offset = g_CamFrustumBottomOffset; } -void sub_GAME_7F0789B0(coord3d *arg0, f32 *arg1) { - arg0->x = flt_CODE_bss_80079960.x; - arg0->y = flt_CODE_bss_80079960.y; - arg0->z = flt_CODE_bss_80079960.z; - *arg1 = flt_CODE_bss_8007996C; + +/** + * Address: 7F0789B0 + * + * Unreferenced. + */ +void bondviewGetFrustumLeftPlane(coord3d *normal, f32 *offset) +{ + normal->x = g_CamFrustumLeftNormal.x; + normal->y = g_CamFrustumLeftNormal.y; + normal->z = g_CamFrustumLeftNormal.z; + *offset = g_CamFrustumLeftOffset; } -void sub_GAME_7F0789E0(coord3d *arg0, f32 *arg1) { - arg0->x = flt_CODE_bss_80079970.x; - arg0->y = flt_CODE_bss_80079970.y; - arg0->z = flt_CODE_bss_80079970.z; - *arg1 = flt_CODE_bss_8007997C; + +/** + * Address: 7F0789E0 + * + * Unreferenced. + */ +void bondviewGetFrustumRightPlane(coord3d *normal, f32 *offset) +{ + normal->x = g_CamFrustumRightNormal.x; + normal->y = g_CamFrustumRightNormal.y; + normal->z = g_CamFrustumRightNormal.z; + *offset = g_CamFrustumRightOffset; } -void sub_GAME_7F078A10(coord3d *arg0, f32 *arg1) { - arg0->x = g_CurrentPlayer->field_10D4->m[2][0]; - arg0->y = g_CurrentPlayer->field_10D4->m[2][1]; - arg0->z = g_CurrentPlayer->field_10D4->m[2][2]; - *arg1 = flt_CODE_bss_80079980; + +/** + * Address: 7F078A10 + * + * Unreferenced. + */ +void bondviewGetFrustumNearPlane(coord3d *normal, f32 *offset) +{ + normal->x = g_CurrentPlayer->viewtoworldmtxf->m[2][0]; + normal->y = g_CurrentPlayer->viewtoworldmtxf->m[2][1]; + normal->z = g_CurrentPlayer->viewtoworldmtxf->m[2][2]; + *offset = g_CamFrustumNearOffset; } + /** * Check if the 3D coordinate is within the screen * * Takes dot product of some position and compares each to an associated scalar value. * Returns 0 if the dot product exceeds the scalar amount, 1 otherwise. * - * @param pos: Applies dot product of this position against g_CurrentPlayer->field_10D4 - * and four coords starting at flt_CODE_bss_80079960. + * @param pos: Applies dot product of this position against g_CurrentPlayer->viewtoworldmtxf + * and four coords starting at g_CamFrustumLeftNormal. * - * @param margin: Value added to flt_CODE_bss_80079980 to compare g_CurrentPlayer->field_10D4, - * and the four values starting at flt_CODE_bss_8007996C. + * @param margin: Value added to g_CamFrustumNearOffset to compare g_CurrentPlayer->viewtoworldmtxf, + * and the four values starting at g_CamFrustumLeftOffset. * * Address 0x7F078A58. */ -s32 camIsPosInScreen(coord3d *pos, f32 margin) +bool camIsPosInScreen(coord3d *pos, f32 margin) { - if (flt_CODE_bss_80079980 + margin < (g_CurrentPlayer->field_10D4->m[2][0] * pos->f[0]) + (g_CurrentPlayer->field_10D4->m[2][1] * pos->f[1]) + (g_CurrentPlayer->field_10D4->m[2][2] * pos->f[2])) - { - return 0; - } - - if (flt_CODE_bss_8007996C + margin < (flt_CODE_bss_80079960.f[0] * pos->f[0]) + (flt_CODE_bss_80079960.f[1] * pos->f[1]) + (flt_CODE_bss_80079960.f[2] * pos->f[2])) - { - return 0; - } - - if (flt_CODE_bss_8007997C + margin < (flt_CODE_bss_80079970.f[0] * pos->f[0]) + (flt_CODE_bss_80079970.f[1] * pos->f[1]) + (flt_CODE_bss_80079970.f[2] * pos->f[2])) - { - return 0; - } - - if (flt_CODE_bss_8007994C + margin < (flt_CODE_bss_80079940.f[0] * pos->f[0]) + (flt_CODE_bss_80079940.f[1] * pos->f[1]) + (flt_CODE_bss_80079940.f[2] * pos->f[2])) - { - return 0; - } - - if (flt_CODE_bss_8007995C + margin < (flt_CODE_bss_80079950.f[0] * pos->f[0]) + (flt_CODE_bss_80079950.f[1] * pos->f[1]) + (flt_CODE_bss_80079950.f[2] * pos->f[2])) - { - return 0; - } - - return 1; -} - - -bool camIsPosInScreenBox(coord3d *pos, f32 margin, bbox2d *box) -{ - coord3d sp74; - f32 sp70; - coord3d sp64; - f32 sp60; - coord3d sp54; - f32 sp50; - coord3d sp44; - f32 sp40; - f32 sp3c; - f32 sp38; - f32 sp34; - f32 sp30; - f32 sp2c; - f32 sp28; - f32 sp24; - f32 sp20; - f32 sp1c; - f32 sp18; - - if (flt_CODE_bss_80079980 + margin < g_CurrentPlayer->field_10D4->m[2][0] * pos->f[0] + g_CurrentPlayer->field_10D4->m[2][1] * pos->f[1] + g_CurrentPlayer->field_10D4->m[2][2] * pos->f[2]) + if (g_CamFrustumNearOffset + margin < (g_CurrentPlayer->viewtoworldmtxf->m[2][0] * pos->f[0]) + (g_CurrentPlayer->viewtoworldmtxf->m[2][1] * pos->f[1]) + (g_CurrentPlayer->viewtoworldmtxf->m[2][2] * pos->f[2])) { return FALSE; } - sp38 = (box->min.x - g_CurrentPlayer->c_screenleft - g_CurrentPlayer->c_halfwidth) * g_CurrentPlayer->c_scalex; - - sp3c = 1.0f / sqrtf(sp38 * sp38 + 1.0f); - sp38 *= sp3c; - sp24 = -sp3c; - - sp54.f[0] = sp24 * g_CurrentPlayer->field_10D4->m[0][0] - sp38 * g_CurrentPlayer->field_10D4->m[2][0]; - sp54.f[1] = sp24 * g_CurrentPlayer->field_10D4->m[0][1] - sp38 * g_CurrentPlayer->field_10D4->m[2][1]; - sp54.f[2] = sp24 * g_CurrentPlayer->field_10D4->m[0][2] - sp38 * g_CurrentPlayer->field_10D4->m[2][2]; - - sp50 = sp54.f[0] * g_CurrentPlayer->field_10D4->m[3][0] + sp54.f[1] * g_CurrentPlayer->field_10D4->m[3][1] + sp54.f[2] * g_CurrentPlayer->field_10D4->m[3][2]; - - if (sp50 + margin < sp54.f[0] * pos->f[0] + sp54.f[1] * pos->f[1] + sp54.f[2] * pos->f[2]) + if (g_CamFrustumLeftOffset + margin < (g_CamFrustumLeftNormal.f[0] * pos->f[0]) + (g_CamFrustumLeftNormal.f[1] * pos->f[1]) + (g_CamFrustumLeftNormal.f[2] * pos->f[2])) { return FALSE; } - sp38 = -(box->max.x - g_CurrentPlayer->c_screenleft - g_CurrentPlayer->c_halfwidth) * g_CurrentPlayer->c_scalex; - sp30 = 1.0f / sqrtf(sp38 * sp38 + 1.0f); - sp38 *= sp30; - sp20 = -sp30; - - sp44.f[0] = -sp20 * g_CurrentPlayer->field_10D4->m[0][0] - sp38 * g_CurrentPlayer->field_10D4->m[2][0]; - sp44.f[1] = -sp20 * g_CurrentPlayer->field_10D4->m[0][1] - sp38 * g_CurrentPlayer->field_10D4->m[2][1]; - sp44.f[2] = -sp20 * g_CurrentPlayer->field_10D4->m[0][2] - sp38 * g_CurrentPlayer->field_10D4->m[2][2]; - - sp40 = sp44.f[0] * g_CurrentPlayer->field_10D4->m[3][0] + sp44.f[1] * g_CurrentPlayer->field_10D4->m[3][1] + sp44.f[2] * g_CurrentPlayer->field_10D4->m[3][2]; - - if (sp40 + margin < sp44.f[0] * pos->f[0] + sp44.f[1] * pos->f[1] + sp44.f[2] * pos->f[2]) + if (g_CamFrustumRightOffset + margin < (g_CamFrustumRightNormal.f[0] * pos->f[0]) + (g_CamFrustumRightNormal.f[1] * pos->f[1]) + (g_CamFrustumRightNormal.f[2] * pos->f[2])) { return FALSE; } - sp34 = (g_CurrentPlayer->c_halfheight - (box->min.y - g_CurrentPlayer->c_screentop)) * g_CurrentPlayer->c_scaley; - sp2c = 1.0f / sqrtf(sp34 * sp34 + 1.0f); - sp34 *= sp2c; - sp1c = -sp2c; - - sp74.f[0] = -sp1c * g_CurrentPlayer->field_10D4->m[1][0] + sp34 * g_CurrentPlayer->field_10D4->m[2][0]; - sp74.f[1] = -sp1c * g_CurrentPlayer->field_10D4->m[1][1] + sp34 * g_CurrentPlayer->field_10D4->m[2][1]; - sp74.f[2] = -sp1c * g_CurrentPlayer->field_10D4->m[1][2] + sp34 * g_CurrentPlayer->field_10D4->m[2][2]; - - sp70 = sp74.f[0] * g_CurrentPlayer->field_10D4->m[3][0] + sp74.f[1] * g_CurrentPlayer->field_10D4->m[3][1] + sp74.f[2] * g_CurrentPlayer->field_10D4->m[3][2]; - - if (sp70 + margin < sp74.f[0] * pos->f[0] + sp74.f[1] * pos->f[1] + sp74.f[2] * pos->f[2]) + if (g_CamFrustumTopOffset + margin < (g_CamFrustumTopNormal.f[0] * pos->f[0]) + (g_CamFrustumTopNormal.f[1] * pos->f[1]) + (g_CamFrustumTopNormal.f[2] * pos->f[2])) { return FALSE; } - sp34 = -(g_CurrentPlayer->c_halfheight - (box->max.y - g_CurrentPlayer->c_screentop)) * g_CurrentPlayer->c_scaley; - sp28 = 1.0f / sqrtf(sp34 * sp34 + 1.0f); - sp34 *= sp28; - sp18 = -sp28; - - sp64.f[0] = sp18 * g_CurrentPlayer->field_10D4->m[1][0] + sp34 * g_CurrentPlayer->field_10D4->m[2][0]; - sp64.f[1] = sp18 * g_CurrentPlayer->field_10D4->m[1][1] + sp34 * g_CurrentPlayer->field_10D4->m[2][1]; - sp64.f[2] = sp18 * g_CurrentPlayer->field_10D4->m[1][2] + sp34 * g_CurrentPlayer->field_10D4->m[2][2]; - - sp60 = sp64.f[0] * g_CurrentPlayer->field_10D4->m[3][0] + sp64.f[1] * g_CurrentPlayer->field_10D4->m[3][1] + sp64.f[2] * g_CurrentPlayer->field_10D4->m[3][2]; - - if (sp60 + margin < sp64.f[0] * pos->f[0] + sp64.f[1] * pos->f[1] + sp64.f[2] * pos->f[2]) + if (g_CamFrustumBottomOffset + margin < (g_CamFrustumBottomNormal.f[0] * pos->f[0]) + (g_CamFrustumBottomNormal.f[1] * pos->f[1]) + (g_CamFrustumBottomNormal.f[2] * pos->f[2])) { return FALSE; } @@ -1311,6 +1290,112 @@ bool camIsPosInScreenBox(coord3d *pos, f32 margin, bbox2d *box) return TRUE; } + +/** + * Similar to the above function but checks if the 3D point is within an arbitrary box instead of the whole screen. + * + * @param pos: 3D coordinate in absolute world space. + * + * @param margin: is a slack in world units applied as a sphere around the point. The point is rejected only + * if it is more than 'margin' outside a box plane. + * + * @param box: screen space rectangle with 'min' being the top-left corner and 'max' the bottom-right corner. + */ +bool camIsPosInScreenBox(coord3d *pos, f32 margin, bbox2d *box) +{ + coord3d topnormal; + f32 topoffset; + coord3d bottomnormal; + f32 bottomoffset; + coord3d leftnormal; + f32 leftoffset; + coord3d rightnormal; + f32 rightoffset; + f32 leftinvlen; + f32 xslope; + f32 yslope; + f32 rightinvlen; + f32 topinvlen; + f32 bottominvlen; + f32 leftneginvlen; + f32 rightneginvlen; + f32 topneginvlen; + f32 bottomneginvlen; + + if (g_CamFrustumNearOffset + margin < g_CurrentPlayer->viewtoworldmtxf->m[2][0] * pos->f[0] + g_CurrentPlayer->viewtoworldmtxf->m[2][1] * pos->f[1] + g_CurrentPlayer->viewtoworldmtxf->m[2][2] * pos->f[2]) + { + return FALSE; + } + + xslope = (box->min.x - g_CurrentPlayer->c_screenleft - g_CurrentPlayer->c_halfwidth) * g_CurrentPlayer->c_scalex; + + leftinvlen = 1.0f / sqrtf(xslope * xslope + 1.0f); + xslope *= leftinvlen; + leftneginvlen = -leftinvlen; + + leftnormal.f[0] = leftneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[0][0] - xslope * g_CurrentPlayer->viewtoworldmtxf->m[2][0]; + leftnormal.f[1] = leftneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[0][1] - xslope * g_CurrentPlayer->viewtoworldmtxf->m[2][1]; + leftnormal.f[2] = leftneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[0][2] - xslope * g_CurrentPlayer->viewtoworldmtxf->m[2][2]; + + leftoffset = leftnormal.f[0] * g_CurrentPlayer->viewtoworldmtxf->m[3][0] + leftnormal.f[1] * g_CurrentPlayer->viewtoworldmtxf->m[3][1] + leftnormal.f[2] * g_CurrentPlayer->viewtoworldmtxf->m[3][2]; + + if (leftoffset + margin < leftnormal.f[0] * pos->f[0] + leftnormal.f[1] * pos->f[1] + leftnormal.f[2] * pos->f[2]) + { + return FALSE; + } + + xslope = -(box->max.x - g_CurrentPlayer->c_screenleft - g_CurrentPlayer->c_halfwidth) * g_CurrentPlayer->c_scalex; + rightinvlen = 1.0f / sqrtf(xslope * xslope + 1.0f); + xslope *= rightinvlen; + rightneginvlen = -rightinvlen; + + rightnormal.f[0] = -rightneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[0][0] - xslope * g_CurrentPlayer->viewtoworldmtxf->m[2][0]; + rightnormal.f[1] = -rightneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[0][1] - xslope * g_CurrentPlayer->viewtoworldmtxf->m[2][1]; + rightnormal.f[2] = -rightneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[0][2] - xslope * g_CurrentPlayer->viewtoworldmtxf->m[2][2]; + + rightoffset = rightnormal.f[0] * g_CurrentPlayer->viewtoworldmtxf->m[3][0] + rightnormal.f[1] * g_CurrentPlayer->viewtoworldmtxf->m[3][1] + rightnormal.f[2] * g_CurrentPlayer->viewtoworldmtxf->m[3][2]; + + if (rightoffset + margin < rightnormal.f[0] * pos->f[0] + rightnormal.f[1] * pos->f[1] + rightnormal.f[2] * pos->f[2]) + { + return FALSE; + } + + yslope = (g_CurrentPlayer->c_halfheight - (box->min.y - g_CurrentPlayer->c_screentop)) * g_CurrentPlayer->c_scaley; + topinvlen = 1.0f / sqrtf(yslope * yslope + 1.0f); + yslope *= topinvlen; + topneginvlen = -topinvlen; + + topnormal.f[0] = -topneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[1][0] + yslope * g_CurrentPlayer->viewtoworldmtxf->m[2][0]; + topnormal.f[1] = -topneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[1][1] + yslope * g_CurrentPlayer->viewtoworldmtxf->m[2][1]; + topnormal.f[2] = -topneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[1][2] + yslope * g_CurrentPlayer->viewtoworldmtxf->m[2][2]; + + topoffset = topnormal.f[0] * g_CurrentPlayer->viewtoworldmtxf->m[3][0] + topnormal.f[1] * g_CurrentPlayer->viewtoworldmtxf->m[3][1] + topnormal.f[2] * g_CurrentPlayer->viewtoworldmtxf->m[3][2]; + + if (topoffset + margin < topnormal.f[0] * pos->f[0] + topnormal.f[1] * pos->f[1] + topnormal.f[2] * pos->f[2]) + { + return FALSE; + } + + yslope = -(g_CurrentPlayer->c_halfheight - (box->max.y - g_CurrentPlayer->c_screentop)) * g_CurrentPlayer->c_scaley; + bottominvlen = 1.0f / sqrtf(yslope * yslope + 1.0f); + yslope *= bottominvlen; + bottomneginvlen = -bottominvlen; + + bottomnormal.f[0] = bottomneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[1][0] + yslope * g_CurrentPlayer->viewtoworldmtxf->m[2][0]; + bottomnormal.f[1] = bottomneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[1][1] + yslope * g_CurrentPlayer->viewtoworldmtxf->m[2][1]; + bottomnormal.f[2] = bottomneginvlen * g_CurrentPlayer->viewtoworldmtxf->m[1][2] + yslope * g_CurrentPlayer->viewtoworldmtxf->m[2][2]; + + bottomoffset = bottomnormal.f[0] * g_CurrentPlayer->viewtoworldmtxf->m[3][0] + bottomnormal.f[1] * g_CurrentPlayer->viewtoworldmtxf->m[3][1] + bottomnormal.f[2] * g_CurrentPlayer->viewtoworldmtxf->m[3][2]; + + if (bottomoffset + margin < bottomnormal.f[0] * pos->f[0] + bottomnormal.f[1] * pos->f[1] + bottomnormal.f[2] * pos->f[2]) + { + return FALSE; + } + + return TRUE; +} + + //split here makes sense to have the pd split make sense s32 bondviewGetRandomSpawnPadIndex(void) { @@ -1441,7 +1526,12 @@ s32 bondviewGetRandomSpawnPadIndex(void) } -//file split per pd +/** + * Resets the current player's per-life state to defaults. Position, + * health/armour, movement speed, etc... + * + * Called when a stage is loaded, then called again for each time a player respawns in MP. + */ void init_player_BONDdata(void) { if (getPlayerCount() >= 2) @@ -1449,6 +1539,7 @@ void init_player_BONDdata(void) g_CurrentPlayer->controldef = get_player_control_style(get_cur_playernum()); cur_player_set_control_type(get_player_control_style(get_cur_playernum())); } + g_CurrentPlayer->current_model_pos.f[0] = 0.0f; g_CurrentPlayer->current_model_pos.f[1] = 0.0f; g_CurrentPlayer->current_model_pos.f[2] = 0.0f; @@ -1458,7 +1549,7 @@ void init_player_BONDdata(void) g_CurrentPlayer->current_room_pos.f[0] = 0.0f; g_CurrentPlayer->current_room_pos.f[1] = 0.0f; g_CurrentPlayer->current_room_pos.f[2] = 0.0f; - g_CurrentPlayer->unknown = 0; + g_CurrentPlayer->cameramode = 0; g_CurrentPlayer->pos.f[0] = 0.0f; g_CurrentPlayer->pos.f[1] = 0.0f; g_CurrentPlayer->pos.f[2] = 0.0f; @@ -1471,7 +1562,7 @@ void init_player_BONDdata(void) g_CurrentPlayer->pos3.f[0] = 0.0f; g_CurrentPlayer->pos3.f[1] = 0.0f; g_CurrentPlayer->pos3.f[2] = 0.0f; - g_CurrentPlayer->room_pointer = 0; + g_CurrentPlayer->cameratile = 0; g_CurrentPlayer->field_3C4 = 0.0f; g_CurrentPlayer->field_3C8 = 0.0f; g_CurrentPlayer->field_3CC = 1.0f; @@ -1527,9 +1618,9 @@ void init_player_BONDdata(void) g_CurrentPlayer->bondshotspeed.x = 0.0f; g_CurrentPlayer->bondshotspeed.y = 0.0f; g_CurrentPlayer->bondshotspeed.z = 0.0f; - g_CurrentPlayer->field_104 = 0; - g_CurrentPlayer->field_108 = 0; - g_CurrentPlayer->field_10C = 0; + g_CurrentPlayer->docentreupdown = FALSE; + g_CurrentPlayer->lastupdown60 = 0; + g_CurrentPlayer->prevupdown = FALSE; g_CurrentPlayer->movecentrerelease = FALSE; g_CurrentPlayer->lookaheadcentreenabled = TRUE; g_CurrentPlayer->automovecentreenabled = TRUE; @@ -1565,32 +1656,32 @@ void init_player_BONDdata(void) g_CurrentPlayer->field_42c = 2; g_CurrentPlayer->controldef = CONTROLLER_CONFIG_HONEY; g_CurrentPlayer->pause_starting_angle = 0.0f; - g_CurrentPlayer->pause_related = 0.0f; - g_CurrentPlayer->pause_target_angle = 0.0f; - g_CurrentPlayer->field_210 = 0.0f; - g_CurrentPlayer->field_214 = 0.0f; - g_CurrentPlayer->field_218 = 0; + g_CurrentPlayer->pause_saved_verta = 0.0f; + g_CurrentPlayer->pause_target_verta = 0.0f; + g_CurrentPlayer->pause_transition_time = 0.0f; + g_CurrentPlayer->pause_transition_duration = 0.0f; + g_CurrentPlayer->pause_state = 0; g_CurrentPlayer->step_in_view_watch_animation = 0; g_CurrentPlayer->pause_animation_counter = 0.0f; g_CurrentPlayer->pausing_flag = FALSE; g_CurrentPlayer->buttons_pressed = (u16)0; g_CurrentPlayer->prev_buttons_pressed = (u16)0; g_CurrentPlayer->field_29C0 = 15.0f; - g_CurrentPlayer->field_2A04 = -1; + g_CurrentPlayer->registeredroom = -1; g_CurrentPlayer->field_2A08 = 0.0f; g_CurrentPlayer->field_2A0C = 0.0f; g_CurrentPlayer->field_2A6C = 0; g_CurrentPlayer->field_2A70 = 0; } -//split per pd -void bondviewPlayerSpawnRelated(void) +void bondviewPlayerBeginLife(void) { - g_CurrentPlayer->field_29BC = ((g_playerPerm->player_perspective_height * 185.0f * (s32)1) - 10.0f); + g_CurrentPlayer->eyeheight = ((g_playerPerm->player_perspective_height * 185.0f * (s32)1) - 10.0f); - g_CurrentPlayer->field_29F8 = 0; - g_CurrentPlayer->field_29F4 = getMissiontimer(); + // Reset per-life counters + g_CurrentPlayer->kills_this_life = 0; + g_CurrentPlayer->lifestarttime60 = getMissiontimer(); g_CurrentPlayer->healthdisplaytime = 0; bondinvAddInvItem(ITEM_FIST); @@ -1600,7 +1691,7 @@ void bondviewPlayerSpawnRelated(void) currentPlayerEquipWeaponWrapper(GUNLEFT, starting_weapon[GUNLEFT]); currentPlayerEquipWeaponWrapper(GUNRIGHT, starting_weapon[GUNRIGHT]); - if (g_CurrentPlayer->ptr_char_objectinstance == NULL) + if (g_CurrentPlayer->bodyModel == NULL) { solo_char_load(); } @@ -1608,34 +1699,55 @@ void bondviewPlayerSpawnRelated(void) } -void currentPlayerSetSwayTarget(s32 value) { +/** + * Here sway refers to what we commonly call lean. + * + * This function is called with the following values: + * -1 to lean left + * 0 for no lean + * 1 to lean right + */ +void currentPlayerSetSwayTarget(s32 value) +{ g_CurrentPlayer->swaytarget = (value * 75.0f); } -void currentPlayerAdjustCrouchPos(s32 value) { + +void currentPlayerAdjustCrouchPos(s32 value) +{ g_CurrentPlayer->crouchpos = g_CurrentPlayer->crouchpos + value; - if (g_CurrentPlayer->crouchpos < CROUCH_SQUAT) { + if (g_CurrentPlayer->crouchpos < CROUCH_SQUAT) + { g_CurrentPlayer->crouchpos = CROUCH_SQUAT; - } else if (g_CurrentPlayer->crouchpos > CROUCH_STAND) { + } + else if (g_CurrentPlayer->crouchpos > CROUCH_STAND) + { g_CurrentPlayer->crouchpos = CROUCH_STAND; } } -s32 currentPlayerGetCrouchPos(void) { + +s32 currentPlayerGetCrouchPos(void) +{ return ((g_CurrentPlayer->crouchpos < g_CurrentPlayer->autocrouchpos) ? g_CurrentPlayer->crouchpos : g_CurrentPlayer->autocrouchpos); } -s32 playerGetCrouchPos(s32 playernum) { + +s32 playerGetCrouchPos(s32 playernum) +{ return (g_playerPointers[playernum]->crouchpos < g_playerPointers[playernum]->autocrouchpos) ? g_playerPointers[playernum]->crouchpos : g_playerPointers[playernum]->autocrouchpos; } -void currentPlayerSetField00(s32 value) { - g_CurrentPlayer->unknown = value; + +void currentPlayerSetCameraMode(s32 mode) +{ + g_CurrentPlayer->cameramode = mode; } + /** * Compares current player position to parameters. If different, sets current * player position values to parameter values. @@ -1645,8 +1757,8 @@ void currentPlayerSetField00(s32 value) { */ void bondviewSetCurrentPlayerPosition(coord3d *pos, coord3d *pos2, coord3d *offset, StandTile *tile, coord3d *stan_walk_start) { - StandTile *sp34; - StandTile *sp30; + StandTile *tilefromstart; + StandTile *tilefromprev; if ( (pos->f[0] != g_CurrentPlayer->pos.f[0]) @@ -1658,33 +1770,34 @@ void bondviewSetCurrentPlayerPosition(coord3d *pos, coord3d *pos2, coord3d *offs || (offset->f[0] != g_CurrentPlayer->offset.f[0]) || (offset->f[1] != g_CurrentPlayer->offset.f[1]) || (offset->f[2] != g_CurrentPlayer->offset.f[2]) - || (g_CurrentPlayer->room_pointer == NULL)) + || (g_CurrentPlayer->cameratile == NULL)) { - sp34 = tile; - if (walkTilesBetweenPoints_NoCallback((StandTile **) &sp34, stan_walk_start->f[0], stan_walk_start->f[2], pos->f[0], pos->f[2])) + tilefromstart = tile; + + if (walkTilesBetweenPoints_NoCallback(&tilefromstart, stan_walk_start->f[0], stan_walk_start->f[2], pos->f[0], pos->f[2])) { // @bug ...? This is either a bug or removed code, this function has no side effects. // Return value should used to check if point is safe for stan. - stanTestPointWithinTileBoundsMaybe(sp34, pos->f[0], pos->f[2]); - g_CurrentPlayer->room_pointer = sp34; + stanTestPointWithinTileBoundsMaybe(tilefromstart, pos->f[0], pos->f[2]); + g_CurrentPlayer->cameratile = tilefromstart; } else { - if (g_CurrentPlayer->room_pointer != NULL) + if (g_CurrentPlayer->cameratile != NULL) { - sp30 = g_CurrentPlayer->room_pointer; - if (walkTilesBetweenPoints_NoCallback((StandTile **) &sp30, g_CurrentPlayer->pos.f[0], g_CurrentPlayer->pos.f[2], pos->f[0], pos->f[2])) + tilefromprev = g_CurrentPlayer->cameratile; + if (walkTilesBetweenPoints_NoCallback(&tilefromprev, g_CurrentPlayer->pos.f[0], g_CurrentPlayer->pos.f[2], pos->f[0], pos->f[2])) { - g_CurrentPlayer->room_pointer = sp30; + g_CurrentPlayer->cameratile = tilefromprev; } else { - g_CurrentPlayer->room_pointer = sp34; + g_CurrentPlayer->cameratile = tilefromstart; } } else { - g_CurrentPlayer->room_pointer = sp34; + g_CurrentPlayer->cameratile = tilefromstart; } } @@ -1699,141 +1812,161 @@ void bondviewSetCurrentPlayerPosition(coord3d *pos, coord3d *pos2, coord3d *offs g_CurrentPlayer->offset.f[2] = offset->f[2]; g_CurrentPlayer->pos3.f[0] = g_CurrentPlayer->pos.f[0]; g_CurrentPlayer->pos3.f[2] = g_CurrentPlayer->pos.f[2]; - g_CurrentPlayer->pos3.f[1] = stanGetPositionYValue(g_CurrentPlayer->room_pointer, g_CurrentPlayer->pos.f[0], g_CurrentPlayer->pos.f[2]); + g_CurrentPlayer->pos3.f[1] = stanGetPositionYValue(g_CurrentPlayer->cameratile, g_CurrentPlayer->pos.f[0], g_CurrentPlayer->pos.f[2]); } } - - - - -#ifdef NONMATCHING -/* - if ((g_CurrentPlayer->gunmemused[0] != 0) && (g_CurrentPlayer->gunmemtype[0] != 0)) { - assertPrint_8291E690 - (".\\ported\\bondview.cpp",0x342, - "Assertion failed: g_CurrentPlayer->gunmemused[GUNRIGHT]==0 || g_CurrentPlayer->gunmemtype[GUNRIGHT]==0" - ); - } - if ((g_CurrentPlayer->gunmemused[1] != 0) && (g_CurrentPlayer->gunmemtype[1] != 0)) { - assertPrint_8291E690 - (".\\ported\\bondview.cpp",0x343, - "Assertion failed: g_CurrentPlayer->gunmemused[GUNLEFT]==0 || g_CurrentPlayer->gunmemtype[GUNLEFT]==0" - ); - } -//*/ #define ALIGN64_V3(val) (((val) | 0x3f) ^ 0x3f) + void solo_char_load(void) { - f32 hRot; - ModelFileHeader *pBody; - ModelFileHeader *pHead; - ModelFileHeader *p_leftHeader; - ModelFileHeader *bodyBuffer; - ModelFileHeader *headBuffer; - s32 totalsize; //canonically sizer - s32 bodyBufSize; - s32 headBufSize; - WeaponObjRecord *p_rightHeader; - //? sp54; - s32 rhandweapID; - s32 body; - s32 head; - Model *model; - s32 numRecords; - ChrModelFileRecord *p_modelEntry; /* compiler-managed */ - ChrModelFileRecord *p_bodyEntry; - ChrModelFileRecord *p_headEntry; - ChrRecord *curChr; - ModelFileHeader *p_headHeader; - ModelFileHeader *p_headEntryHeader; - ModelFileHeader *p_rhandItemHeader; - ModelFileHeader *p_bodyEntryHeader; - ModelFileHeader *p_bodyHeader; - ModelFileHeader *p_lhandItemHeader; - s32 rhandPropID; - s32 bodyalignedSizeRemainPlus0x5F; - s32 bufferSizeRemain; - s32 folderBond; - //s32 numRecords; - s32 cuffId; - hRot = get_curplay_horizontal_rotation_in_degrees(); - curChr = g_CurrentPlayer->prop->chr; - if (curChr == NULL) + f32 yaw; + ChrRecord *self; + struct texpool pool; + ModelFileHeader *bodyheader; + ModelFileHeader *headheader; + ModelFileHeader *pitemheader; + u8 *weaponbuf0; + u8 *weaponbuf1; + s32 cursor; + s32 size0; + s32 size1; + s32 helddst; + WeaponObjRecord weapon; + struct player **pp; + s32 prop; + ITEM_IDS item; + s32 body; + s32 head; + struct ItemModelFileRecord *unusedpitem; + Model *model; + + yaw = bondviewGetPlayerYawRadians(); + if (g_CurrentPlayer->prop->chr == NULL) { - bodyBuffer = getPlayerWeaponBufferForHand(GUNRIGHT); - headBuffer = getPlayerWeaponBufferForHand(GUNLEFT); - totalsize = 0; - bodyBufSize = getSizeBufferWeaponInHand(GUNRIGHT); - headBufSize = getSizeBufferWeaponInHand(GUNLEFT); - //M2C_MEMCPY_ALIGNED(&sp54, &dummy_08_pp7_obj, 0x84); - //*(&sp54 + 0x84) = *(&dummy_08_pp7_obj + 0x84); - rhandweapID = get_item_in_hand_or_watch_menu(GUNRIGHT); - body = BODY_Formal_Wear; - head = HEAD_Male_Brosnan_Default; - model = NULL; - sub_GAME_7F07DE64(g_CurrentPlayer); + weaponbuf0 = getPlayerWeaponBufferForHand(GUNRIGHT); + weaponbuf1 = getPlayerWeaponBufferForHand(GUNLEFT); + cursor = 0; + size0 = getSizeBufferWeaponInHand(GUNRIGHT); + size1 = getSizeBufferWeaponInHand(GUNLEFT); + weapon = dummy_08_pp7_obj[0]; + item = get_item_in_hand_or_watch_menu(GUNRIGHT); + body = BODY_Formal_Wear; + head = HEAD_Male_Brosnan_Default; + model = NULL; + bodyheader = NULL; + + bondviewDeregisterPlayerRoom(g_CurrentPlayer); + if (getPlayerCount() == 1) { - folderBond = fileGetBondForCurrentFolder(); - cuffId = g_CurrentPlayer->bondtype; - switch (cuffId) /* switch 1 */ + helddst = fileGetBondForCurrentFolder(); + switch (g_CurrentPlayer->bondtype) { - case CUFF_BOILER: /* switch 1 */ - body = BODY_Special_Operations_Uniform; break; - case CUFF_JUNGLE: /* switch 1 */ - body = BODY_Jungle_Fatigues; break; - case CUFF_SNOW: /* switch 1 */ - body = BODY_Parka; break; - case CUFF_BROSNAN: /* switch 1 */ - body = BODY_Brosnan_Tuxedo; break; - case CUFF_CONNERY: /* switch 1 */ - body = BODY_Brosnan_Tuxedo; break; - case CUFF_DALTON: /* switch 1 */ - body = BODY_Brosnan_Tuxedo; break; - case CUFF_MOORE: /* switch 1 */ - body = BODY_Brosnan_Tuxedo; break; - case CUFF_FOLDER: /* switch 1 */ - switch (folderBond) /* switch 3; irregular */ - { - case BOND_BROSNAN: /* switch 3 */ - body = BODY_Brosnan_Tuxedo; break; - case BOND_CONNERY: /* switch 3 */ - body = BODY_Brosnan_Tuxedo; break; - case BOND_DALTON: /* switch 3 */ - body = BODY_Brosnan_Tuxedo; break; - case BOND_MOORE: - body = BODY_Brosnan_Tuxedo; break; - } - break; + case CUFF_BLUE: + break; + + case CUFF_BOILER: + body = BODY_Special_Operations_Uniform; + break; + + case CUFF_JUNGLE: + body = BODY_Jungle_Fatigues; + break; + + case CUFF_SNOW: + body = BODY_Parka; + break; + + case CUFF_BROSNAN: + body = BODY_Brosnan_Tuxedo; + break; + + case CUFF_CONNERY: + body = BODY_Brosnan_Tuxedo; + break; + + case CUFF_DALTON: + body = BODY_Brosnan_Tuxedo; + break; + + case CUFF_MOORE: + body = BODY_Brosnan_Tuxedo; + break; + + case CUFF_FOLDER: + switch (helddst) + { + case BOND_BROSNAN: + body = BODY_Brosnan_Tuxedo; + break; + + case BOND_CONNERY: + body = BODY_Brosnan_Tuxedo; + break; + + case BOND_DALTON: + body = BODY_Brosnan_Tuxedo; + break; + + case BOND_MOORE: + body = BODY_Brosnan_Tuxedo; + break; + } + + break; } - switch (folderBond) /* switch 4; irregular */ + + switch (helddst) { - case BOND_BROSNAN: /* switch 4 */ - switch (cuffId) /* switch 2 */ - { - case CUFF_BOILER: /* switch 2 */ - head = HEAD_Male_Brosnan_Boiler; break; - case CUFF_JUNGLE: /* switch 2 */ - head = HEAD_Male_Brosnan_Jungle; break; - case CUFF_BROSNAN: /* switch 2 */ - head = HEAD_Male_Brosnan_Tuxedo; break; - case CUFF_CONNERY: /* switch 2 */ - head = HEAD_Male_Brosnan_Tuxedo; break; - case CUFF_DALTON: /* switch 2 */ - head = HEAD_Male_Brosnan_Tuxedo; break; - case CUFF_MOORE: /* switch 2 */ - head = HEAD_Male_Brosnan_Tuxedo; break; - case CUFF_FOLDER: /* switch 2 */ - head = HEAD_Male_Brosnan_Tuxedo; break; - } - break; - case BOND_CONNERY: /* switch 4 */ - head = HEAD_Male_Brosnan_Tuxedo; break; - case BOND_DALTON: /* switch 4 */ - head = HEAD_Male_Brosnan_Tuxedo; break; - case BOND_MOORE: /* switch 4 */ - head = HEAD_Male_Brosnan_Tuxedo; break; + case BOND_BROSNAN: + switch (g_CurrentPlayer->bondtype) + { + case CUFF_BLUE: + break; + + case CUFF_BOILER: + head = HEAD_Male_Brosnan_Boiler; + break; + + case CUFF_JUNGLE: + head = HEAD_Male_Brosnan_Jungle; + break; + + case CUFF_BROSNAN: + head = HEAD_Male_Brosnan_Tuxedo; + break; + + case CUFF_CONNERY: + head = HEAD_Male_Brosnan_Tuxedo; + break; + + case CUFF_DALTON: + head = HEAD_Male_Brosnan_Tuxedo; + break; + + case CUFF_MOORE: + head = HEAD_Male_Brosnan_Tuxedo; + break; + + case CUFF_FOLDER: + head = HEAD_Male_Brosnan_Tuxedo; + break; + } + + break; + + case BOND_CONNERY: + head = HEAD_Male_Brosnan_Tuxedo; + break; + + case BOND_DALTON: + head = HEAD_Male_Brosnan_Tuxedo; + break; + + case BOND_MOORE: + head = HEAD_Male_Brosnan_Tuxedo; + break; } } else @@ -1841,2316 +1974,291 @@ void solo_char_load(void) head = get_player_mp_char_head(get_cur_playernum()); body = get_player_mp_char_body(get_cur_playernum()); } + if (g_CameraMode == CAMERAMODE_SWIRL) { - rhandweapID = starting_right_weapon; + item = starting_weapon[GUNRIGHT]; } + if (getPlayerCount() == 1) { -#ifdef DEBUG - assert(currentplayer->gunmemused[GUNRIGHT]==0 || currentplayer->gunmemtype[GUNRIGHT]==0); - assert(currentplayer->gunmemused[GUNLEFT]==0 || currentplayer->gunmemtype[GUNLEFT]==0); //j -#endif - remove_item_in_hand(GUNLEFT); remove_item_in_hand(GUNRIGHT); - texInitPool(&texPool, headBuffer, headBufSize); - p_bodyHeader = get_ptr_itemheader_in_hand(GUNRIGHT); + texInitPool(&pool, weaponbuf1, size1); + bodyheader = get_ptr_itemheader_in_hand(GUNRIGHT); + *bodyheader = *c_item_entries[body].header; + load_object_fill_header(bodyheader, (u8 *)c_item_entries[body].filename, weaponbuf0, size0, &pool); + cursor = get_pc_buffer_remaining_value((u8 *)c_item_entries[body].filename); - p_bodyEntry = &c_item_entries[body]; - p_bodyEntryHeader = p_bodyEntry->header; + do + { + cursor = ALIGN64_V3(cursor + 0x3f); + headheader = (ModelFileHeader *)(weaponbuf0 + cursor); + cursor = ALIGN64_V3(cursor + sizeof(ModelFileHeader) + 0x3f); + *headheader = *c_item_entries[head].header; - pBody = p_bodyHeader; + if(1); - p_bodyHeader->RootNode = p_bodyEntryHeader->RootNode; - p_bodyHeader->Skeleton = p_bodyEntryHeader->Skeleton; - p_bodyHeader->Switches = p_bodyEntryHeader->Switches; - p_bodyHeader->unkC = p_bodyEntryHeader->unkC; - p_bodyHeader->BoundingVolumeRadius = p_bodyEntryHeader->BoundingVolumeRadius; - p_bodyHeader->unk14 = p_bodyEntryHeader->unk14; - p_bodyHeader->Textures = p_bodyEntryHeader->Textures; - p_bodyHeader->isLoaded = p_bodyEntryHeader->isLoaded; + load_object_fill_header(headheader, (u8 *)c_item_entries[head].filename, weaponbuf0 + cursor, size0 - cursor, &pool); + cursor = ALIGN64_V3(get_pc_buffer_remaining_value((u8 *)c_item_entries[head].filename) + cursor + 0x3f); + model = (Model *)(weaponbuf0 + cursor); + cursor = ALIGN64_V3(cursor + 0xfb); + modelCalculateRwDataLen(bodyheader); + modelCalculateRwDataLen(headheader); - p_modelEntry = p_bodyEntry; - load_object_fill_header(p_bodyHeader, p_bodyEntry->filename, bodyBuffer, bodyBufSize, &texPool); - #ifdef DEBUG - assert(sizer <= bondmemsizer); - #endif + { + u32 *animdata; + s32 nrec; + animdata = (u32 *)(weaponbuf0 + cursor); + nrec = (bodyheader->numRecords + headheader->numRecords) + 0xa; + cursor = ALIGN64_V3(cursor + (nrec << 2) + 0x3f); + animInit(model, bodyheader, animdata); + model->rwdatalen = nrec; + } - p_headEntry = &c_item_entries[head]; - p_headEntryHeader = p_headEntry->header; + } while (FALSE); + } + else + { + bodyheader = c_item_entries[body].header; - bufferSizeRemain = ALIGN64_V3(get_pc_buffer_remaining_value(p_modelEntry->filename) + 0x3F); -#ifdef DEBUG - assert(sizer<=bondmemsizer); + if (bodyheader->RootNode == NULL) + { + fileLoad(bodyheader, c_item_entries[body].filename); + } +#ifndef VERSION_US + if (c_item_entries[body].hasHead) + { + head = -1; + headheader = NULL; + } + else #endif - p_headHeader = bodyBuffer + bufferSizeRemain; - bodyalignedSizeRemainPlus0x5F = ALIGN64_V3(bufferSizeRemain + 0x5F); + { + headheader = c_item_entries[head].header; - p_headHeader->RootNode = p_headEntryHeader->RootNode; - p_headHeader->Skeleton = p_headEntryHeader->Skeleton; - p_headHeader->Switches = p_headEntryHeader->Switches; - p_headHeader->unkC = p_headEntryHeader->unkC; - p_headHeader->BoundingVolumeRadius = p_headEntryHeader->BoundingVolumeRadius; - p_headHeader->unk14 = p_headEntryHeader->unk14; - p_headHeader->Textures = p_headEntryHeader->Textures; - p_headHeader->isLoaded = p_headEntryHeader->isLoaded; - - totalsize = bodyalignedSizeRemainPlus0x5F; - pHead = p_headHeader; - p_modelEntry = p_headEntry; - load_object_fill_header(p_headHeader, p_headEntry->filename, bodyBuffer + bodyalignedSizeRemainPlus0x5F, bodyBufSize - bodyalignedSizeRemainPlus0x5F, &texPool); - - bufferSizeRemain = ALIGN64_V3(get_pc_buffer_remaining_value(p_modelEntry->filename) + totalsize + 0x3F); - model = bodyBuffer + bufferSizeRemain; - totalsize = ALIGN64_V3(bufferSizeRemain + 0xFB); - #ifdef DEBUG - assert(sizer <= bondmemsizer); // canonically total is sizer and bodybuff is bond - #endif - - modelCalculateRwDataLen(pBody); - modelCalculateRwDataLen(pHead); - numRecords = pBody->numRecords + pHead->numRecords + 0xA; - - totalsize = ALIGN64_V3((numRecords * 4) + totalsize + 0x3F); - #ifdef DEBUG - assert(sizer<=bondmemsizer); - #endif - - animInit(model, pBody, bodyBuffer + totalsize); - model->Type = numRecords; //??? - //goto block_46; - //&c_item_entries[head]->header = pHead; + if (headheader->RootNode == NULL) + { + fileLoad(headheader, c_item_entries[head].filename); + } + } } - pBody = &c_item_entries[body]->header; - if (&c_item_entries[body]->header->RootNode == NULL) - { - fileLoad(&c_item_entries[body]->header, &c_item_entries[body]->filename); - } + g_CurrentPlayer->bodyModel = makeonebody(body, head, bodyheader, headheader, 0, model); + modelSetScale(g_CurrentPlayer->bodyModel, g_CurrentPlayer->bodyModel->scale * 0.97f); + init_GUARDdata_with_set_values(g_CurrentPlayer->prop, g_CurrentPlayer->bodyModel, &g_CurrentPlayer->prop->pos, yaw, g_CurrentPlayer->prop->stan, NULL); + pp = &g_CurrentPlayer; + (*pp)->prop->type = PROP_TYPE_VIEWER; + self = (*pp)->prop->chr; + self->chrflags |= CHRFLAG_INIT; + setsuboffset((*pp)->bodyModel, &(*pp)->prop->pos); + setsubroty(g_CurrentPlayer->bodyModel, yaw); +#ifndef VERSION_US + self->headnum = head; + self->bodynum = body; +#endif + prop = getPropForHeldItem(item); - if (&c_item_entries[head]->header->RootNode == NULL) - { - pHead = &c_item_entries[head]->header; - fileLoad(&c_item_entries[head]->header, &c_item_entries[head]->filename); -//block_46: -// &c_item_entries[head]->header = pHead; - } - g_CurrentPlayer->ptr_char_objectinstance = makeonebody(body, head, pBody, &c_item_entries[head]->header/*pHead maybe?*/, 0, model); - #ifdef DEBUG - assert(currentplayer->bondsub); - #endif - - modelSetScale((Model *) g_CurrentPlayer->ptr_char_objectinstance, g_CurrentPlayer->ptr_char_objectinstance->unk14 * 0.97f); - init_GUARDdata_with_set_values(g_CurrentPlayer->prop, g_CurrentPlayer->ptr_char_objectinstance, &g_CurrentPlayer->prop->pos, hRot, g_CurrentPlayer->prop->stan, 0); - g_CurrentPlayer->prop->type = VIEWER; - g_CurrentPlayer->prop->chr->chrflags |= CHRFLAG_INIT; - setsuboffset(g_CurrentPlayer->ptr_char_objectinstance, &g_CurrentPlayer->prop->pos); - setsubroty(g_CurrentPlayer->ptr_char_objectinstance, hRot); - rhandPropID = getPropForHeldItem(rhandweapID); - if (rhandPropID >= 0) + if (prop >= 0) { if (getPlayerCount() == 1) { - p_rightHeader = bodyBuffer + totalsize; - totalsize = ALIGN64_V3(totalsize + 0xC7); - #ifdef DEBUG - assert(sizer<=bondmemsizer); - #endif - p_lhandItemHeader = get_ptr_itemheader_in_hand(GUNLEFT); - p_rhandItemHeader = &PitemZ_entries[rhandPropID]->header; - p_leftHeader = p_lhandItemHeader; - p_lhandItemHeader->RootNode = p_rhandItemHeader->RootNode; - p_lhandItemHeader->Skeleton = p_rhandItemHeader->Skeleton; - p_lhandItemHeader->Switches = p_rhandItemHeader->Switches; - p_lhandItemHeader->unkC = p_rhandItemHeader->unkC; - p_lhandItemHeader->BoundingVolumeRadius = p_rhandItemHeader->BoundingVolumeRadius; - p_lhandItemHeader->unk14 = p_rhandItemHeader->unk14; - p_lhandItemHeader->Textures = p_rhandItemHeader->Textures; - p_lhandItemHeader->isLoaded = p_rhandItemHeader->isLoaded; - p_modelEntry = &PitemZ_entries[rhandPropID]; - load_object_fill_header(p_lhandItemHeader, &PitemZ_entries[rhandPropID]->filename, bodyBuffer + totalsize, bodyBufSize - totalsize, &texPool); - get_pc_buffer_remaining_value(p_modelEntry->filename); - modelCalculateRwDataLen(p_leftHeader); + helddst = cursor; + helddst = ((s32)weaponbuf0) + helddst; + cursor = ALIGN64_V3(cursor + 0xc7); + pitemheader = get_ptr_itemheader_in_hand(GUNLEFT); + *pitemheader = *PitemZ_entries[prop].header; + load_object_fill_header(pitemheader, (u8 *)PitemZ_entries[prop].filename, weaponbuf0 + cursor, size0 - cursor, &pool); + get_pc_buffer_remaining_value((u8 *)PitemZ_entries[prop].filename); + modelCalculateRwDataLen(pitemheader); } else { - p_rightHeader = NULL; - p_leftHeader = NULL; + helddst = 0; + pitemheader = NULL; } - something_with_generating_object(g_CurrentPlayer->prop->chr, rhandPropID, rhandweapID, 0, p_rightHeader, p_leftHeader); + + something_with_generating_object(self, prop, item, 0, (WeaponObjRecord *)helddst, (ItemModelFileRecord *)pitemheader); } - chrlvIdleAnimationRelated7F023A94(g_CurrentPlayer->prop->chr, 0.0f); - return; + + chrlvIdleAnimationRelated7F023A94(self, 0.0f); } - if (curChr->model->anim == NULL) + else { - curChr->chrflags |= CHRFLAG_INIT; - chrlvIdleAnimationRelated7F023A94(curChr, 0.0f); - setsuboffset(g_CurrentPlayer->ptr_char_objectinstance, &g_CurrentPlayer->prop->pos); - setsubroty(g_CurrentPlayer->ptr_char_objectinstance, hRot); + self = g_CurrentPlayer->prop->chr; + + if (self->model->anim != NULL) + { + return; + } + + self->chrflags |= CHRFLAG_INIT; + chrlvIdleAnimationRelated7F023A94(self, 0.0f); + setsuboffset(g_CurrentPlayer->bodyModel, &g_CurrentPlayer->prop->pos); + setsubroty(g_CurrentPlayer->bodyModel, yaw); } } -#else -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel D_80054FB8 -.word 0 -glabel D_80054FBC -.word 0 - -/*D:80054FC0*/ -glabel a8s -/*"%8s"*/ -.word 0x25387300 - -glabel aX4_0f -/*"x %4.0f"*/ -.word 0x78202534 -.word 0x2E306600 - -glabel aY4_0f -/*"y %4.0f"*/ -.word 0x79202534 -.word 0x2E306600 - -glabel aZ4_0f -/*"z %4.0f"*/ -.word 0x7A202534 -.word 0x2E306600 - -glabel aS3d -/*"%s %3d"*/ -.word 0x25732025 -.word 0x33640000 -/*D:80054FE4*/ -glabel jpt_bondcuff -.word .L7F079EA4 -.word cuff_1_brosnan -.word cuff_2_jungle -.word cuff_3_boiler -.word cuff_4_snowsuit -.word cuff_5_connery -.word cuff_6_moore -.word cuff_7_dalton -.word cuff_8_variable_bond_head -.size jpt_bondcuff, . - jpt_bondcuff - -/*D:80055008*/ -glabel jpt_bondhead -.word .L7F079F84 -.word brosnan_tux_head_set -.word jungle_head_set -.word boiler_bond_head_set -.word .L7F079F84 -.word connery_head_set -.word moore_head_set -.word dalton_head_set -.word variable_body_head - -glabel D_8005502C -.word 0x3f7851ec /*0.97000003*/ -.text -glabel solo_char_load -/* 0AE820 7F079CF0 27BDFEE8 */ addiu $sp, $sp, -0x118 -/* 0AE824 7F079CF4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0AE828 7F079CF8 0FC227B9 */ jal get_curplay_horizontal_rotation_in_degrees -/* 0AE82C 7F079CFC 00000000 */ nop -/* 0AE830 7F079D00 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 0AE834 7F079D04 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0AE838 7F079D08 E7A00114 */ swc1 $f0, 0x114($sp) -/* 0AE83C 7F079D0C 8DCF00A8 */ lw $t7, 0xa8($t6) -/* 0AE840 7F079D10 8DE20004 */ lw $v0, 4($t7) -/* 0AE844 7F079D14 544001CA */ bnezl $v0, .L7F07A440 -/* 0AE848 7F079D18 8C4F001C */ lw $t7, 0x1c($v0) -/* 0AE84C 7F079D1C 0FC173CC */ jal getPlayerWeaponBufferForHand -/* 0AE850 7F079D20 00002025 */ move $a0, $zero -/* 0AE854 7F079D24 AFA200F0 */ sw $v0, 0xf0($sp) -/* 0AE858 7F079D28 0FC173CC */ jal getPlayerWeaponBufferForHand -/* 0AE85C 7F079D2C 24040001 */ li $a0, 1 -/* 0AE860 7F079D30 AFA200EC */ sw $v0, 0xec($sp) -/* 0AE864 7F079D34 AFA000E8 */ sw $zero, 0xe8($sp) -/* 0AE868 7F079D38 0FC173D2 */ jal getSizeBufferWeaponInHand -/* 0AE86C 7F079D3C 00002025 */ move $a0, $zero -/* 0AE870 7F079D40 AFA200E4 */ sw $v0, 0xe4($sp) -/* 0AE874 7F079D44 0FC173D2 */ jal getSizeBufferWeaponInHand -/* 0AE878 7F079D48 24040001 */ li $a0, 1 -/* 0AE87C 7F079D4C 3C198003 */ lui $t9, %hi(dummy_08_pp7_obj) -/* 0AE880 7F079D50 273965AC */ addiu $t9, %lo(dummy_08_pp7_obj) # addiu $t9, $t9, 0x65ac -/* 0AE884 7F079D54 AFA200E0 */ sw $v0, 0xe0($sp) -/* 0AE888 7F079D58 272C0084 */ addiu $t4, $t9, 0x84 -/* 0AE88C 7F079D5C 27B80054 */ addiu $t8, $sp, 0x54 -.L7F079D60: -/* 0AE890 7F079D60 8F210000 */ lw $at, ($t9) -/* 0AE894 7F079D64 2739000C */ addiu $t9, $t9, 0xc -/* 0AE898 7F079D68 2718000C */ addiu $t8, $t8, 0xc -/* 0AE89C 7F079D6C AF01FFF4 */ sw $at, -0xc($t8) -/* 0AE8A0 7F079D70 8F21FFF8 */ lw $at, -8($t9) -/* 0AE8A4 7F079D74 AF01FFF8 */ sw $at, -8($t8) -/* 0AE8A8 7F079D78 8F21FFFC */ lw $at, -4($t9) -/* 0AE8AC 7F079D7C 172CFFF8 */ bne $t9, $t4, .L7F079D60 -/* 0AE8B0 7F079D80 AF01FFFC */ sw $at, -4($t8) -/* 0AE8B4 7F079D84 8F210000 */ lw $at, ($t9) -/* 0AE8B8 7F079D88 00002025 */ move $a0, $zero -/* 0AE8BC 7F079D8C 0FC17691 */ jal get_item_in_hand_or_watch_menu -/* 0AE8C0 7F079D90 AF010000 */ sw $at, ($t8) -/* 0AE8C4 7F079D94 240D0017 */ li $t5, 23 -/* 0AE8C8 7F079D98 240E004B */ li $t6, 75 -/* 0AE8CC 7F079D9C 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 0AE8D0 7F079DA0 AFA20048 */ sw $v0, 0x48($sp) -/* 0AE8D4 7F079DA4 AFAD0044 */ sw $t5, 0x44($sp) -/* 0AE8D8 7F079DA8 AFAE0040 */ sw $t6, 0x40($sp) -/* 0AE8DC 7F079DAC AFA00038 */ sw $zero, 0x38($sp) -/* 0AE8E0 7F079DB0 0FC1F799 */ jal sub_GAME_7F07DE64 -/* 0AE8E4 7F079DB4 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0AE8E8 7F079DB8 0FC26919 */ jal getPlayerCount -/* 0AE8EC 7F079DBC 00000000 */ nop -/* 0AE8F0 7F079DC0 24010001 */ li $at, 1 -/* 0AE8F4 7F079DC4 14410066 */ bne $v0, $at, .L7F079F60 -/* 0AE8F8 7F079DC8 00000000 */ nop -/* 0AE8FC 7F079DCC 0FC0755B */ jal fileGetBondForCurrentFolder -/* 0AE900 7F079DD0 00000000 */ nop -/* 0AE904 7F079DD4 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) -/* 0AE908 7F079DD8 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0AE90C 7F079DDC 8DE3041C */ lw $v1, 0x41c($t7) -/* 0AE910 7F079DE0 2C610009 */ sltiu $at, $v1, 9 -/* 0AE914 7F079DE4 1020002F */ beqz $at, .L7F079EA4 -/* 0AE918 7F079DE8 00035880 */ sll $t3, $v1, 2 -/* 0AE91C 7F079DEC 3C018005 */ lui $at, %hi(jpt_bondcuff) -/* 0AE920 7F079DF0 002B0821 */ addu $at, $at, $t3 -/* 0AE924 7F079DF4 8C2B4FE4 */ lw $t3, %lo(jpt_bondcuff)($at) -/* 0AE928 7F079DF8 01600008 */ jr $t3 -/* 0AE92C 7F079DFC 00000000 */ nop -cuff_3_boiler: -/* 0AE930 7F079E00 240A0016 */ li $t2, 22 -/* 0AE934 7F079E04 10000027 */ b .L7F079EA4 -/* 0AE938 7F079E08 AFAA0044 */ sw $t2, 0x44($sp) -cuff_2_jungle: -/* 0AE93C 7F079E0C 240C0018 */ li $t4, 24 -/* 0AE940 7F079E10 10000024 */ b .L7F079EA4 -/* 0AE944 7F079E14 AFAC0044 */ sw $t4, 0x44($sp) -cuff_4_snowsuit: -/* 0AE948 7F079E18 24190019 */ li $t9, 25 -/* 0AE94C 7F079E1C 10000021 */ b .L7F079EA4 -/* 0AE950 7F079E20 AFB90044 */ sw $t9, 0x44($sp) -cuff_1_brosnan: -/* 0AE954 7F079E24 24180005 */ li $t8, 5 -/* 0AE958 7F079E28 1000001E */ b .L7F079EA4 -/* 0AE95C 7F079E2C AFB80044 */ sw $t8, 0x44($sp) -cuff_5_connery: -/* 0AE960 7F079E30 240D0005 */ li $t5, 5 -/* 0AE964 7F079E34 1000001B */ b .L7F079EA4 -/* 0AE968 7F079E38 AFAD0044 */ sw $t5, 0x44($sp) -cuff_6_moore: -/* 0AE96C 7F079E3C 240E0005 */ li $t6, 5 -/* 0AE970 7F079E40 10000018 */ b .L7F079EA4 -/* 0AE974 7F079E44 AFAE0044 */ sw $t6, 0x44($sp) -cuff_7_dalton: -/* 0AE978 7F079E48 240F0005 */ li $t7, 5 -/* 0AE97C 7F079E4C 10000015 */ b .L7F079EA4 -/* 0AE980 7F079E50 AFAF0044 */ sw $t7, 0x44($sp) -cuff_8_variable_bond_head: -/* 0AE984 7F079E54 1040000C */ beqz $v0, .L7F079E88 -/* 0AE988 7F079E58 240B0005 */ li $t3, 5 -/* 0AE98C 7F079E5C 24010001 */ li $at, 1 -/* 0AE990 7F079E60 1041000B */ beq $v0, $at, .L7F079E90 -/* 0AE994 7F079E64 240A0005 */ li $t2, 5 -/* 0AE998 7F079E68 24010002 */ li $at, 2 -/* 0AE99C 7F079E6C 1041000A */ beq $v0, $at, .L7F079E98 -/* 0AE9A0 7F079E70 240C0005 */ li $t4, 5 -/* 0AE9A4 7F079E74 24010003 */ li $at, 3 -/* 0AE9A8 7F079E78 10410009 */ beq $v0, $at, .L7F079EA0 -/* 0AE9AC 7F079E7C 24190005 */ li $t9, 5 -/* 0AE9B0 7F079E80 10000008 */ b .L7F079EA4 -/* 0AE9B4 7F079E84 00000000 */ nop -.L7F079E88: -/* 0AE9B8 7F079E88 10000006 */ b .L7F079EA4 -/* 0AE9BC 7F079E8C AFAB0044 */ sw $t3, 0x44($sp) -.L7F079E90: -/* 0AE9C0 7F079E90 10000004 */ b .L7F079EA4 -/* 0AE9C4 7F079E94 AFAA0044 */ sw $t2, 0x44($sp) -.L7F079E98: -/* 0AE9C8 7F079E98 10000002 */ b .L7F079EA4 -/* 0AE9CC 7F079E9C AFAC0044 */ sw $t4, 0x44($sp) -.L7F079EA0: -/* 0AE9D0 7F079EA0 AFB90044 */ sw $t9, 0x44($sp) -.L7F079EA4: -/* 0AE9D4 7F079EA4 1040000C */ beqz $v0, .L7F079ED8 -/* 0AE9D8 7F079EA8 2C610009 */ sltiu $at, $v1, 9 -/* 0AE9DC 7F079EAC 24010001 */ li $at, 1 -/* 0AE9E0 7F079EB0 10410025 */ beq $v0, $at, .L7F079F48 -/* 0AE9E4 7F079EB4 2418004E */ li $t8, 78 -/* 0AE9E8 7F079EB8 24010002 */ li $at, 2 -/* 0AE9EC 7F079EBC 10410024 */ beq $v0, $at, .L7F079F50 -/* 0AE9F0 7F079EC0 240D004E */ li $t5, 78 -/* 0AE9F4 7F079EC4 24010003 */ li $at, 3 -/* 0AE9F8 7F079EC8 10410023 */ beq $v0, $at, .L7F079F58 -/* 0AE9FC 7F079ECC 240E004E */ li $t6, 78 -/* 0AEA00 7F079ED0 1000002C */ b .L7F079F84 -/* 0AEA04 7F079ED4 00000000 */ nop -.L7F079ED8: -/* 0AEA08 7F079ED8 1020002A */ beqz $at, .L7F079F84 -/* 0AEA0C 7F079EDC 0003C080 */ sll $t8, $v1, 2 -/* 0AEA10 7F079EE0 3C018005 */ lui $at, %hi(jpt_bondhead) -/* 0AEA14 7F079EE4 00380821 */ addu $at, $at, $t8 -/* 0AEA18 7F079EE8 8C385008 */ lw $t8, %lo(jpt_bondhead)($at) -/* 0AEA1C 7F079EEC 03000008 */ jr $t8 -/* 0AEA20 7F079EF0 00000000 */ nop -boiler_bond_head_set: -/* 0AEA24 7F079EF4 240D004A */ li $t5, 74 -/* 0AEA28 7F079EF8 10000022 */ b .L7F079F84 -/* 0AEA2C 7F079EFC AFAD0040 */ sw $t5, 0x40($sp) -jungle_head_set: -/* 0AEA30 7F079F00 240E004C */ li $t6, 76 -/* 0AEA34 7F079F04 1000001F */ b .L7F079F84 -/* 0AEA38 7F079F08 AFAE0040 */ sw $t6, 0x40($sp) -brosnan_tux_head_set: -/* 0AEA3C 7F079F0C 240F004E */ li $t7, 78 -/* 0AEA40 7F079F10 1000001C */ b .L7F079F84 -/* 0AEA44 7F079F14 AFAF0040 */ sw $t7, 0x40($sp) -connery_head_set: -/* 0AEA48 7F079F18 240B004E */ li $t3, 78 -/* 0AEA4C 7F079F1C 10000019 */ b .L7F079F84 -/* 0AEA50 7F079F20 AFAB0040 */ sw $t3, 0x40($sp) -moore_head_set: -/* 0AEA54 7F079F24 240A004E */ li $t2, 78 -/* 0AEA58 7F079F28 10000016 */ b .L7F079F84 -/* 0AEA5C 7F079F2C AFAA0040 */ sw $t2, 0x40($sp) -dalton_head_set: -/* 0AEA60 7F079F30 240C004E */ li $t4, 78 -/* 0AEA64 7F079F34 10000013 */ b .L7F079F84 -/* 0AEA68 7F079F38 AFAC0040 */ sw $t4, 0x40($sp) -variable_body_head: -/* 0AEA6C 7F079F3C 2419004E */ li $t9, 78 -/* 0AEA70 7F079F40 10000010 */ b .L7F079F84 -/* 0AEA74 7F079F44 AFB90040 */ sw $t9, 0x40($sp) -.L7F079F48: -/* 0AEA78 7F079F48 1000000E */ b .L7F079F84 -/* 0AEA7C 7F079F4C AFB80040 */ sw $t8, 0x40($sp) -.L7F079F50: -/* 0AEA80 7F079F50 1000000C */ b .L7F079F84 -/* 0AEA84 7F079F54 AFAD0040 */ sw $t5, 0x40($sp) -.L7F079F58: -/* 0AEA88 7F079F58 1000000A */ b .L7F079F84 -/* 0AEA8C 7F079F5C AFAE0040 */ sw $t6, 0x40($sp) -.L7F079F60: -/* 0AEA90 7F079F60 0FC26C54 */ jal get_cur_playernum -/* 0AEA94 7F079F64 00000000 */ nop -/* 0AEA98 7F079F68 0FC040AF */ jal get_player_mp_char_head -/* 0AEA9C 7F079F6C 00402025 */ move $a0, $v0 -/* 0AEAA0 7F079F70 0FC26C54 */ jal get_cur_playernum -/* 0AEAA4 7F079F74 AFA20040 */ sw $v0, 0x40($sp) -/* 0AEAA8 7F079F78 0FC040D7 */ jal get_player_mp_char_body -/* 0AEAAC 7F079F7C 00402025 */ move $a0, $v0 -/* 0AEAB0 7F079F80 AFA20044 */ sw $v0, 0x44($sp) -.L7F079F84: -/* 0AEAB4 7F079F84 3C0F8003 */ lui $t7, %hi(g_CameraMode) -/* 0AEAB8 7F079F88 8DEF6494 */ lw $t7, %lo(g_CameraMode)($t7) -/* 0AEABC 7F079F8C 24010003 */ li $at, 3 -/* 0AEAC0 7F079F90 15E10003 */ bne $t7, $at, .L7F079FA0 -/* 0AEAC4 7F079F94 3C0B8008 */ lui $t3, %hi(starting_weapon) -/* 0AEAC8 7F079F98 8D6B99E0 */ lw $t3, %lo(starting_weapon)($t3) -/* 0AEACC 7F079F9C AFAB0048 */ sw $t3, 0x48($sp) -.L7F079FA0: -/* 0AEAD0 7F079FA0 0FC26919 */ jal getPlayerCount -/* 0AEAD4 7F079FA4 00000000 */ nop -/* 0AEAD8 7F079FA8 24010001 */ li $at, 1 -/* 0AEADC 7F079FAC 14410083 */ bne $v0, $at, .L7F07A1BC -/* 0AEAE0 7F079FB0 8FAF0044 */ lw $t7, 0x44($sp) -/* 0AEAE4 7F079FB4 0FC173D7 */ jal remove_item_in_hand -/* 0AEAE8 7F079FB8 24040001 */ li $a0, 1 -/* 0AEAEC 7F079FBC 0FC173D7 */ jal remove_item_in_hand -/* 0AEAF0 7F079FC0 00002025 */ move $a0, $zero -/* 0AEAF4 7F079FC4 27A40100 */ addiu $a0, $sp, 0x100 -/* 0AEAF8 7F079FC8 8FA500EC */ lw $a1, 0xec($sp) -/* 0AEAFC 7F079FCC 0FC32EBD */ jal texInitPool -/* 0AEB00 7F079FD0 8FA600E0 */ lw $a2, 0xe0($sp) -/* 0AEB04 7F079FD4 0FC173C6 */ jal get_ptr_itemheader_in_hand -/* 0AEB08 7F079FD8 00002025 */ move $a0, $zero -/* 0AEB0C 7F079FDC 8FAA0044 */ lw $t2, 0x44($sp) -/* 0AEB10 7F079FE0 3C198004 */ lui $t9, %hi(c_item_entries) -/* 0AEB14 7F079FE4 2739DE10 */ addiu $t9, %lo(c_item_entries) # addiu $t9, $t9, -0x21f0 -/* 0AEB18 7F079FE8 000A6080 */ sll $t4, $t2, 2 -/* 0AEB1C 7F079FEC 018A6021 */ addu $t4, $t4, $t2 -/* 0AEB20 7F079FF0 000C6080 */ sll $t4, $t4, 2 -/* 0AEB24 7F079FF4 01991821 */ addu $v1, $t4, $t9 -/* 0AEB28 7F079FF8 8C780000 */ lw $t8, ($v1) -/* 0AEB2C 7F079FFC AFA200FC */ sw $v0, 0xfc($sp) -/* 0AEB30 7F07A000 27AB0100 */ addiu $t3, $sp, 0x100 -/* 0AEB34 7F07A004 8F010000 */ lw $at, ($t8) -/* 0AEB38 7F07A008 00402025 */ move $a0, $v0 -/* 0AEB3C 7F07A00C AC410000 */ sw $at, ($v0) -/* 0AEB40 7F07A010 8F0F0004 */ lw $t7, 4($t8) -/* 0AEB44 7F07A014 AC4F0004 */ sw $t7, 4($v0) -/* 0AEB48 7F07A018 8F010008 */ lw $at, 8($t8) -/* 0AEB4C 7F07A01C AC410008 */ sw $at, 8($v0) -/* 0AEB50 7F07A020 8F0F000C */ lw $t7, 0xc($t8) -/* 0AEB54 7F07A024 AC4F000C */ sw $t7, 0xc($v0) -/* 0AEB58 7F07A028 8F010010 */ lw $at, 0x10($t8) -/* 0AEB5C 7F07A02C AC410010 */ sw $at, 0x10($v0) -/* 0AEB60 7F07A030 8F0F0014 */ lw $t7, 0x14($t8) -/* 0AEB64 7F07A034 AC4F0014 */ sw $t7, 0x14($v0) -/* 0AEB68 7F07A038 8F010018 */ lw $at, 0x18($t8) -/* 0AEB6C 7F07A03C AC410018 */ sw $at, 0x18($v0) -/* 0AEB70 7F07A040 8F0F001C */ lw $t7, 0x1c($t8) -/* 0AEB74 7F07A044 AC4F001C */ sw $t7, 0x1c($v0) -/* 0AEB78 7F07A048 AFA30028 */ sw $v1, 0x28($sp) -/* 0AEB7C 7F07A04C AFAB0010 */ sw $t3, 0x10($sp) -/* 0AEB80 7F07A050 8FA700E4 */ lw $a3, 0xe4($sp) -/* 0AEB84 7F07A054 8FA600F0 */ lw $a2, 0xf0($sp) -/* 0AEB88 7F07A058 0FC1D929 */ jal load_object_fill_header -/* 0AEB8C 7F07A05C 8C650004 */ lw $a1, 4($v1) -/* 0AEB90 7F07A060 8FA30028 */ lw $v1, 0x28($sp) -/* 0AEB94 7F07A064 0FC2F462 */ jal get_pc_buffer_remaining_value -/* 0AEB98 7F07A068 8C640004 */ lw $a0, 4($v1) -/* 0AEB9C 7F07A06C 8FAD0040 */ lw $t5, 0x40($sp) -/* 0AEBA0 7F07A070 3C0F8004 */ lui $t7, %hi(c_item_entries) -/* 0AEBA4 7F07A074 25EFDE10 */ addiu $t7, %lo(c_item_entries) # addiu $t7, $t7, -0x21f0 -/* 0AEBA8 7F07A078 000DC080 */ sll $t8, $t5, 2 -/* 0AEBAC 7F07A07C 030DC021 */ addu $t8, $t8, $t5 -/* 0AEBB0 7F07A080 0018C080 */ sll $t8, $t8, 2 -/* 0AEBB4 7F07A084 030F1821 */ addu $v1, $t8, $t7 -/* 0AEBB8 7F07A088 8C6B0000 */ lw $t3, ($v1) -/* 0AEBBC 7F07A08C 2448003F */ addiu $t0, $v0, 0x3f -/* 0AEBC0 7F07A090 8FA900F0 */ lw $t1, 0xf0($sp) -/* 0AEBC4 7F07A094 350A003F */ ori $t2, $t0, 0x3f -/* 0AEBC8 7F07A098 8D610000 */ lw $at, ($t3) -/* 0AEBCC 7F07A09C 394C003F */ xori $t4, $t2, 0x3f -/* 0AEBD0 7F07A0A0 2588005F */ addiu $t0, $t4, 0x5f -/* 0AEBD4 7F07A0A4 3519003F */ ori $t9, $t0, 0x3f -/* 0AEBD8 7F07A0A8 012C2021 */ addu $a0, $t1, $t4 -/* 0AEBDC 7F07A0AC 3B28003F */ xori $t0, $t9, 0x3f -/* 0AEBE0 7F07A0B0 AC810000 */ sw $at, ($a0) -/* 0AEBE4 7F07A0B4 8D790004 */ lw $t9, 4($t3) -/* 0AEBE8 7F07A0B8 27AD0100 */ addiu $t5, $sp, 0x100 -/* 0AEBEC 7F07A0BC 01283021 */ addu $a2, $t1, $t0 -/* 0AEBF0 7F07A0C0 AC990004 */ sw $t9, 4($a0) -/* 0AEBF4 7F07A0C4 8D610008 */ lw $at, 8($t3) -/* 0AEBF8 7F07A0C8 AC810008 */ sw $at, 8($a0) -/* 0AEBFC 7F07A0CC 8D79000C */ lw $t9, 0xc($t3) -/* 0AEC00 7F07A0D0 AC99000C */ sw $t9, 0xc($a0) -/* 0AEC04 7F07A0D4 8D610010 */ lw $at, 0x10($t3) -/* 0AEC08 7F07A0D8 AC810010 */ sw $at, 0x10($a0) -/* 0AEC0C 7F07A0DC 8D790014 */ lw $t9, 0x14($t3) -/* 0AEC10 7F07A0E0 AC990014 */ sw $t9, 0x14($a0) -/* 0AEC14 7F07A0E4 8D610018 */ lw $at, 0x18($t3) -/* 0AEC18 7F07A0E8 AC810018 */ sw $at, 0x18($a0) -/* 0AEC1C 7F07A0EC 8D79001C */ lw $t9, 0x1c($t3) -/* 0AEC20 7F07A0F0 AC99001C */ sw $t9, 0x1c($a0) -/* 0AEC24 7F07A0F4 8FAE00E4 */ lw $t6, 0xe4($sp) -/* 0AEC28 7F07A0F8 AFA800E8 */ sw $t0, 0xe8($sp) -/* 0AEC2C 7F07A0FC AFA400F8 */ sw $a0, 0xf8($sp) -/* 0AEC30 7F07A100 AFA30028 */ sw $v1, 0x28($sp) -/* 0AEC34 7F07A104 AFAD0010 */ sw $t5, 0x10($sp) -/* 0AEC38 7F07A108 8C650004 */ lw $a1, 4($v1) -/* 0AEC3C 7F07A10C 0FC1D929 */ jal load_object_fill_header -/* 0AEC40 7F07A110 01C83823 */ subu $a3, $t6, $t0 -/* 0AEC44 7F07A114 8FA30028 */ lw $v1, 0x28($sp) -/* 0AEC48 7F07A118 0FC2F462 */ jal get_pc_buffer_remaining_value -/* 0AEC4C 7F07A11C 8C640004 */ lw $a0, 4($v1) -/* 0AEC50 7F07A120 8FA300E8 */ lw $v1, 0xe8($sp) -/* 0AEC54 7F07A124 8FAC00F0 */ lw $t4, 0xf0($sp) -/* 0AEC58 7F07A128 8FA400FC */ lw $a0, 0xfc($sp) -/* 0AEC5C 7F07A12C 00431821 */ addu $v1, $v0, $v1 -/* 0AEC60 7F07A130 2463003F */ addiu $v1, $v1, 0x3f -/* 0AEC64 7F07A134 3478003F */ ori $t8, $v1, 0x3f -/* 0AEC68 7F07A138 3B0F003F */ xori $t7, $t8, 0x3f -/* 0AEC6C 7F07A13C 25E300FB */ addiu $v1, $t7, 0xfb -/* 0AEC70 7F07A140 346B003F */ ori $t3, $v1, 0x3f -/* 0AEC74 7F07A144 3979003F */ xori $t9, $t3, 0x3f -/* 0AEC78 7F07A148 018F5021 */ addu $t2, $t4, $t7 -/* 0AEC7C 7F07A14C AFAA0038 */ sw $t2, 0x38($sp) -/* 0AEC80 7F07A150 0FC1D73D */ jal modelCalculateRwDataLen -/* 0AEC84 7F07A154 AFB900E8 */ sw $t9, 0xe8($sp) -/* 0AEC88 7F07A158 0FC1D73D */ jal modelCalculateRwDataLen -/* 0AEC8C 7F07A15C 8FA400F8 */ lw $a0, 0xf8($sp) -/* 0AEC90 7F07A160 8FA500FC */ lw $a1, 0xfc($sp) -/* 0AEC94 7F07A164 8FAF00F8 */ lw $t7, 0xf8($sp) -/* 0AEC98 7F07A168 8FA300E8 */ lw $v1, 0xe8($sp) -/* 0AEC9C 7F07A16C 84B80014 */ lh $t8, 0x14($a1) -/* 0AECA0 7F07A170 85EC0014 */ lh $t4, 0x14($t7) -/* 0AECA4 7F07A174 8FAE00F0 */ lw $t6, 0xf0($sp) -/* 0AECA8 7F07A178 8FA40038 */ lw $a0, 0x38($sp) -/* 0AECAC 7F07A17C 030C1021 */ addu $v0, $t8, $t4 -/* 0AECB0 7F07A180 2442000A */ addiu $v0, $v0, 0xa -/* 0AECB4 7F07A184 00025080 */ sll $t2, $v0, 2 -/* 0AECB8 7F07A188 01C33021 */ addu $a2, $t6, $v1 -/* 0AECBC 7F07A18C 01431821 */ addu $v1, $t2, $v1 -/* 0AECC0 7F07A190 2463003F */ addiu $v1, $v1, 0x3f -/* 0AECC4 7F07A194 346B003F */ ori $t3, $v1, 0x3f -/* 0AECC8 7F07A198 3979003F */ xori $t9, $t3, 0x3f -/* 0AECCC 7F07A19C AFB900E8 */ sw $t9, 0xe8($sp) -/* 0AECD0 7F07A1A0 0FC1D7EB */ jal animInit -/* 0AECD4 7F07A1A4 AFA20030 */ sw $v0, 0x30($sp) -/* 0AECD8 7F07A1A8 8FA20030 */ lw $v0, 0x30($sp) -/* 0AECDC 7F07A1AC 8FAE0038 */ lw $t6, 0x38($sp) -/* 0AECE0 7F07A1B0 A5C20002 */ sh $v0, 2($t6) -/* 0AECE4 7F07A1B4 1000001F */ b .L7F07A234 -/* 0AECE8 7F07A1B8 8FA700F8 */ lw $a3, 0xf8($sp) -.L7F07A1BC: -/* 0AECEC 7F07A1BC 000FC080 */ sll $t8, $t7, 2 -/* 0AECF0 7F07A1C0 030FC021 */ addu $t8, $t8, $t7 -/* 0AECF4 7F07A1C4 3C0C8004 */ lui $t4, %hi(c_item_entries) -/* 0AECF8 7F07A1C8 258CDE10 */ addiu $t4, %lo(c_item_entries) # addiu $t4, $t4, -0x21f0 -/* 0AECFC 7F07A1CC 0018C080 */ sll $t8, $t8, 2 -/* 0AED00 7F07A1D0 030C1821 */ addu $v1, $t8, $t4 -/* 0AED04 7F07A1D4 8C6A0000 */ lw $t2, ($v1) -/* 0AED08 7F07A1D8 AFAA00FC */ sw $t2, 0xfc($sp) -/* 0AED0C 7F07A1DC 8D590000 */ lw $t9, ($t2) -/* 0AED10 7F07A1E0 01402025 */ move $a0, $t2 -/* 0AED14 7F07A1E4 57200004 */ bnezl $t9, .L7F07A1F8 -/* 0AED18 7F07A1E8 8FAD0040 */ lw $t5, 0x40($sp) -/* 0AED1C 7F07A1EC 0FC1D953 */ jal fileLoad -/* 0AED20 7F07A1F0 8C650004 */ lw $a1, 4($v1) -/* 0AED24 7F07A1F4 8FAD0040 */ lw $t5, 0x40($sp) -.L7F07A1F8: -/* 0AED28 7F07A1F8 3C0F8004 */ lui $t7, %hi(c_item_entries) -/* 0AED2C 7F07A1FC 25EFDE10 */ addiu $t7, %lo(c_item_entries) # addiu $t7, $t7, -0x21f0 -/* 0AED30 7F07A200 000D7080 */ sll $t6, $t5, 2 -/* 0AED34 7F07A204 01CD7021 */ addu $t6, $t6, $t5 -/* 0AED38 7F07A208 000E7080 */ sll $t6, $t6, 2 -/* 0AED3C 7F07A20C 01CF1821 */ addu $v1, $t6, $t7 -/* 0AED40 7F07A210 8C670000 */ lw $a3, ($v1) -/* 0AED44 7F07A214 8CF80000 */ lw $t8, ($a3) -/* 0AED48 7F07A218 00E02025 */ move $a0, $a3 -/* 0AED4C 7F07A21C 57000006 */ bnezl $t8, .L7F07A238 -/* 0AED50 7F07A220 8FAC0038 */ lw $t4, 0x38($sp) -/* 0AED54 7F07A224 8C650004 */ lw $a1, 4($v1) -/* 0AED58 7F07A228 0FC1D953 */ jal fileLoad -/* 0AED5C 7F07A22C AFA700F8 */ sw $a3, 0xf8($sp) -/* 0AED60 7F07A230 8FA700F8 */ lw $a3, 0xf8($sp) -.L7F07A234: -/* 0AED64 7F07A234 8FAC0038 */ lw $t4, 0x38($sp) -.L7F07A238: -/* 0AED68 7F07A238 8FA40044 */ lw $a0, 0x44($sp) -/* 0AED6C 7F07A23C 8FA50040 */ lw $a1, 0x40($sp) -/* 0AED70 7F07A240 8FA600FC */ lw $a2, 0xfc($sp) -/* 0AED74 7F07A244 AFA00010 */ sw $zero, 0x10($sp) -/* 0AED78 7F07A248 0FC08CBA */ jal makeonebody -/* 0AED7C 7F07A24C AFAC0014 */ sw $t4, 0x14($sp) -/* 0AED80 7F07A250 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0AED84 7F07A254 2463A0B0 */ addiu $v1, %lo(g_CurrentPlayer) # addiu $v1, $v1, -0x5f50 -/* 0AED88 7F07A258 8C6A0000 */ lw $t2, ($v1) -/* 0AED8C 7F07A25C 3C018005 */ lui $at, %hi(D_8005502C) -/* 0AED90 7F07A260 AD4200D4 */ sw $v0, 0xd4($t2) -/* 0AED94 7F07A264 8C790000 */ lw $t9, ($v1) -/* 0AED98 7F07A268 C426502C */ lwc1 $f6, %lo(D_8005502C)($at) -/* 0AED9C 7F07A26C 8F2400D4 */ lw $a0, 0xd4($t9) -/* 0AEDA0 7F07A270 C4840014 */ lwc1 $f4, 0x14($a0) -/* 0AEDA4 7F07A274 46062202 */ mul.s $f8, $f4, $f6 -/* 0AEDA8 7F07A278 44054000 */ mfc1 $a1, $f8 -/* 0AEDAC 7F07A27C 0FC1B39E */ jal modelSetScale -/* 0AEDB0 7F07A280 00000000 */ nop -/* 0AEDB4 7F07A284 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0AEDB8 7F07A288 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0AEDBC 7F07A28C 8FA70114 */ lw $a3, 0x114($sp) -/* 0AEDC0 7F07A290 8C6400A8 */ lw $a0, 0xa8($v1) -/* 0AEDC4 7F07A294 8C6500D4 */ lw $a1, 0xd4($v1) -/* 0AEDC8 7F07A298 8C8B0014 */ lw $t3, 0x14($a0) -/* 0AEDCC 7F07A29C AFA00014 */ sw $zero, 0x14($sp) -/* 0AEDD0 7F07A2A0 24860008 */ addiu $a2, $a0, 8 -/* 0AEDD4 7F07A2A4 0FC0802F */ jal init_GUARDdata_with_set_values -/* 0AEDD8 7F07A2A8 AFAB0010 */ sw $t3, 0x10($sp) -/* 0AEDDC 7F07A2AC 3C078008 */ lui $a3, %hi(g_CurrentPlayer) -/* 0AEDE0 7F07A2B0 24E7A0B0 */ addiu $a3, %lo(g_CurrentPlayer) # addiu $a3, $a3, -0x5f50 -/* 0AEDE4 7F07A2B4 8CEE0000 */ lw $t6, ($a3) -/* 0AEDE8 7F07A2B8 240D0006 */ li $t5, 6 -/* 0AEDEC 7F07A2BC 8DCF00A8 */ lw $t7, 0xa8($t6) -/* 0AEDF0 7F07A2C0 A1ED0000 */ sb $t5, ($t7) -/* 0AEDF4 7F07A2C4 8CF80000 */ lw $t8, ($a3) -/* 0AEDF8 7F07A2C8 8F0C00A8 */ lw $t4, 0xa8($t8) -/* 0AEDFC 7F07A2CC 8D860004 */ lw $a2, 4($t4) -/* 0AEE00 7F07A2D0 8CCA0014 */ lw $t2, 0x14($a2) -/* 0AEE04 7F07A2D4 35590001 */ ori $t9, $t2, 1 -/* 0AEE08 7F07A2D8 ACD90014 */ sw $t9, 0x14($a2) -/* 0AEE0C 7F07A2DC 8CE30000 */ lw $v1, ($a3) -/* 0AEE10 7F07A2E0 8C6500A8 */ lw $a1, 0xa8($v1) -/* 0AEE14 7F07A2E4 8C6400D4 */ lw $a0, 0xd4($v1) -/* 0AEE18 7F07A2E8 AFA60110 */ sw $a2, 0x110($sp) -/* 0AEE1C 7F07A2EC 0FC1B303 */ jal setsuboffset -/* 0AEE20 7F07A2F0 24A50008 */ addiu $a1, $a1, 8 -/* 0AEE24 7F07A2F4 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) -/* 0AEE28 7F07A2F8 8D6BA0B0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0AEE2C 7F07A2FC 8FA50114 */ lw $a1, 0x114($sp) -/* 0AEE30 7F07A300 0FC1B34F */ jal setsubroty -/* 0AEE34 7F07A304 8D6400D4 */ lw $a0, 0xd4($t3) -/* 0AEE38 7F07A308 0FC26C91 */ jal getPropForHeldItem -/* 0AEE3C 7F07A30C 8FA40048 */ lw $a0, 0x48($sp) -/* 0AEE40 7F07A310 04400045 */ bltz $v0, .L7F07A428 -/* 0AEE44 7F07A314 AFA2004C */ sw $v0, 0x4c($sp) -/* 0AEE48 7F07A318 0FC26919 */ jal getPlayerCount -/* 0AEE4C 7F07A31C 00000000 */ nop -/* 0AEE50 7F07A320 24010001 */ li $at, 1 -/* 0AEE54 7F07A324 14410035 */ bne $v0, $at, .L7F07A3FC -/* 0AEE58 7F07A328 8FAE00F0 */ lw $t6, 0xf0($sp) -/* 0AEE5C 7F07A32C 8FA200E8 */ lw $v0, 0xe8($sp) -/* 0AEE60 7F07A330 24040001 */ li $a0, 1 -/* 0AEE64 7F07A334 01C26821 */ addu $t5, $t6, $v0 -/* 0AEE68 7F07A338 244200C7 */ addiu $v0, $v0, 0xc7 -/* 0AEE6C 7F07A33C 344F003F */ ori $t7, $v0, 0x3f -/* 0AEE70 7F07A340 39F8003F */ xori $t8, $t7, 0x3f -/* 0AEE74 7F07A344 AFAD00DC */ sw $t5, 0xdc($sp) -/* 0AEE78 7F07A348 0FC173C6 */ jal get_ptr_itemheader_in_hand -/* 0AEE7C 7F07A34C AFB800E8 */ sw $t8, 0xe8($sp) -/* 0AEE80 7F07A350 8FAC004C */ lw $t4, 0x4c($sp) -/* 0AEE84 7F07A354 3C198004 */ lui $t9, %hi(PitemZ_entries) -/* 0AEE88 7F07A358 2739A228 */ addiu $t9, %lo(PitemZ_entries) # addiu $t9, $t9, -0x5dd8 -/* 0AEE8C 7F07A35C 000C5080 */ sll $t2, $t4, 2 -/* 0AEE90 7F07A360 014C5023 */ subu $t2, $t2, $t4 -/* 0AEE94 7F07A364 000A5080 */ sll $t2, $t2, 2 -/* 0AEE98 7F07A368 01591821 */ addu $v1, $t2, $t9 -/* 0AEE9C 7F07A36C 8C6B0000 */ lw $t3, ($v1) -/* 0AEEA0 7F07A370 AFA200F4 */ sw $v0, 0xf4($sp) -/* 0AEEA4 7F07A374 27AD0100 */ addiu $t5, $sp, 0x100 -/* 0AEEA8 7F07A378 8D610000 */ lw $at, ($t3) -/* 0AEEAC 7F07A37C 00402025 */ move $a0, $v0 -/* 0AEEB0 7F07A380 AC410000 */ sw $at, ($v0) -/* 0AEEB4 7F07A384 8D6F0004 */ lw $t7, 4($t3) -/* 0AEEB8 7F07A388 AC4F0004 */ sw $t7, 4($v0) -/* 0AEEBC 7F07A38C 8D610008 */ lw $at, 8($t3) -/* 0AEEC0 7F07A390 AC410008 */ sw $at, 8($v0) -/* 0AEEC4 7F07A394 8D6F000C */ lw $t7, 0xc($t3) -/* 0AEEC8 7F07A398 AC4F000C */ sw $t7, 0xc($v0) -/* 0AEECC 7F07A39C 8D610010 */ lw $at, 0x10($t3) -/* 0AEED0 7F07A3A0 AC410010 */ sw $at, 0x10($v0) -/* 0AEED4 7F07A3A4 8D6F0014 */ lw $t7, 0x14($t3) -/* 0AEED8 7F07A3A8 AC4F0014 */ sw $t7, 0x14($v0) -/* 0AEEDC 7F07A3AC 8D610018 */ lw $at, 0x18($t3) -/* 0AEEE0 7F07A3B0 AC410018 */ sw $at, 0x18($v0) -/* 0AEEE4 7F07A3B4 8D6F001C */ lw $t7, 0x1c($t3) -/* 0AEEE8 7F07A3B8 AC4F001C */ sw $t7, 0x1c($v0) -/* 0AEEEC 7F07A3BC 8FAC00E8 */ lw $t4, 0xe8($sp) -/* 0AEEF0 7F07A3C0 8FAA00E4 */ lw $t2, 0xe4($sp) -/* 0AEEF4 7F07A3C4 8FB800F0 */ lw $t8, 0xf0($sp) -/* 0AEEF8 7F07A3C8 AFA30028 */ sw $v1, 0x28($sp) -/* 0AEEFC 7F07A3CC AFAD0010 */ sw $t5, 0x10($sp) -/* 0AEF00 7F07A3D0 8C650004 */ lw $a1, 4($v1) -/* 0AEF04 7F07A3D4 014C3823 */ subu $a3, $t2, $t4 -/* 0AEF08 7F07A3D8 0FC1D929 */ jal load_object_fill_header -/* 0AEF0C 7F07A3DC 030C3021 */ addu $a2, $t8, $t4 -/* 0AEF10 7F07A3E0 8FA30028 */ lw $v1, 0x28($sp) -/* 0AEF14 7F07A3E4 0FC2F462 */ jal get_pc_buffer_remaining_value -/* 0AEF18 7F07A3E8 8C640004 */ lw $a0, 4($v1) -/* 0AEF1C 7F07A3EC 0FC1D73D */ jal modelCalculateRwDataLen -/* 0AEF20 7F07A3F0 8FA400F4 */ lw $a0, 0xf4($sp) -/* 0AEF24 7F07A3F4 10000004 */ b .L7F07A408 -/* 0AEF28 7F07A3F8 8FAE00DC */ lw $t6, 0xdc($sp) -.L7F07A3FC: -/* 0AEF2C 7F07A3FC AFA000DC */ sw $zero, 0xdc($sp) -/* 0AEF30 7F07A400 AFA000F4 */ sw $zero, 0xf4($sp) -/* 0AEF34 7F07A404 8FAE00DC */ lw $t6, 0xdc($sp) -.L7F07A408: -/* 0AEF38 7F07A408 8FAB00F4 */ lw $t3, 0xf4($sp) -/* 0AEF3C 7F07A40C 8FA40110 */ lw $a0, 0x110($sp) -/* 0AEF40 7F07A410 8FA5004C */ lw $a1, 0x4c($sp) -/* 0AEF44 7F07A414 8FA60048 */ lw $a2, 0x48($sp) -/* 0AEF48 7F07A418 00003825 */ move $a3, $zero -/* 0AEF4C 7F07A41C AFAE0010 */ sw $t6, 0x10($sp) -/* 0AEF50 7F07A420 0FC14885 */ jal something_with_generating_object -/* 0AEF54 7F07A424 AFAB0014 */ sw $t3, 0x14($sp) -.L7F07A428: -/* 0AEF58 7F07A428 8FA40110 */ lw $a0, 0x110($sp) -/* 0AEF5C 7F07A42C 0FC08EA5 */ jal chrlvIdleAnimationRelated7F023A94 -/* 0AEF60 7F07A430 24050000 */ li $a1, 0 -/* 0AEF64 7F07A434 10000017 */ b .L7F07A494 -/* 0AEF68 7F07A438 8FBF001C */ lw $ra, 0x1c($sp) -/* 0AEF6C 7F07A43C 8C4F001C */ lw $t7, 0x1c($v0) -.L7F07A440: -/* 0AEF70 7F07A440 00402025 */ move $a0, $v0 -/* 0AEF74 7F07A444 8DF80020 */ lw $t8, 0x20($t7) -/* 0AEF78 7F07A448 57000012 */ bnezl $t8, .L7F07A494 -/* 0AEF7C 7F07A44C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0AEF80 7F07A450 8C4C0014 */ lw $t4, 0x14($v0) -/* 0AEF84 7F07A454 24050000 */ li $a1, 0 -/* 0AEF88 7F07A458 358A0001 */ ori $t2, $t4, 1 -/* 0AEF8C 7F07A45C 0FC08EA5 */ jal chrlvIdleAnimationRelated7F023A94 -/* 0AEF90 7F07A460 AC4A0014 */ sw $t2, 0x14($v0) -/* 0AEF94 7F07A464 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0AEF98 7F07A468 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0AEF9C 7F07A46C 8C6500A8 */ lw $a1, 0xa8($v1) -/* 0AEFA0 7F07A470 8C6400D4 */ lw $a0, 0xd4($v1) -/* 0AEFA4 7F07A474 0FC1B303 */ jal setsuboffset -/* 0AEFA8 7F07A478 24A50008 */ addiu $a1, $a1, 8 -/* 0AEFAC 7F07A47C 3C198008 */ lui $t9, %hi(g_CurrentPlayer) -/* 0AEFB0 7F07A480 8F39A0B0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0AEFB4 7F07A484 8FA50114 */ lw $a1, 0x114($sp) -/* 0AEFB8 7F07A488 0FC1B34F */ jal setsubroty -/* 0AEFBC 7F07A48C 8F2400D4 */ lw $a0, 0xd4($t9) -/* 0AEFC0 7F07A490 8FBF001C */ lw $ra, 0x1c($sp) -.L7F07A494: -/* 0AEFC4 7F07A494 27BD0118 */ addiu $sp, $sp, 0x118 -/* 0AEFC8 7F07A498 03E00008 */ jr $ra -/* 0AEFCC 7F07A49C 00000000 */ nop -) -#endif - -#ifdef VERSION_JP -GLOBAL_ASM( -.late_rodata -glabel D_80054FB8 -.word 0 -glabel D_80054FBC -.word 0 - -/*D:80054FC0*/ -glabel a8s -/*"%8s"*/ -.word 0x25387300 - -glabel aX4_0f -/*"x %4.0f"*/ -.word 0x78202534 -.word 0x2E306600 - -glabel aY4_0f -/*"y %4.0f"*/ -.word 0x79202534 -.word 0x2E306600 - -glabel aZ4_0f -/*"z %4.0f"*/ -.word 0x7A202534 -.word 0x2E306600 - -glabel aS3d -/*"%s %3d"*/ -.word 0x25732025 -.word 0x33640000 -/*D:80054FE4*/ -glabel jpt_bondcuff -.word .Ljp7F07A494 -.word cuff_1_brosnan -.word cuff_2_jungle -.word cuff_3_boiler -.word cuff_4_snowsuit -.word cuff_5_connery -.word cuff_6_moore -.word cuff_7_dalton -.word cuff_8_variable_bond_head -.size jpt_bondcuff, . - jpt_bondcuff - -/*D:80055008*/ -glabel jpt_bondhead -.word .Ljp7F07A574 -.word brosnan_tux_head_set -.word jungle_head_set -.word boiler_bond_head_set -.word .Ljp7F07A574 -.word connery_head_set -.word moore_head_set -.word dalton_head_set -.word variable_body_head - -glabel D_8005502C -.word 0x3f7851ec /*0.97000003*/ -.text -glabel solo_char_load -/* 0AEE50 7F07A2E0 27BDFEE8 */ addiu $sp, $sp, -0x118 -/* 0AEE54 7F07A2E4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0AEE58 7F07A2E8 0FC22987 */ jal get_curplay_horizontal_rotation_in_degrees -/* 0AEE5C 7F07A2EC 00000000 */ nop -/* 0AEE60 7F07A2F0 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8008 -/* 0AEE64 7F07A2F4 8DCEA120 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0AEE68 7F07A2F8 E7A00114 */ swc1 $f0, 0x114($sp) -/* 0AEE6C 7F07A2FC 8DCF00A8 */ lw $t7, 0xa8($t6) -/* 0AEE70 7F07A300 8DE20004 */ lw $v0, 4($t7) -/* 0AEE74 7F07A304 544001D6 */ bnezl $v0, .Ljp7F07AA60 -/* 0AEE78 7F07A308 8C59001C */ lw $t9, 0x1c($v0) -/* 0AEE7C 7F07A30C 0FC17514 */ jal getPlayerWeaponBufferForHand -/* 0AEE80 7F07A310 00002025 */ move $a0, $zero -/* 0AEE84 7F07A314 AFA200F0 */ sw $v0, 0xf0($sp) -/* 0AEE88 7F07A318 0FC17514 */ jal getPlayerWeaponBufferForHand -/* 0AEE8C 7F07A31C 24040001 */ li $a0, 1 -/* 0AEE90 7F07A320 AFA200EC */ sw $v0, 0xec($sp) -/* 0AEE94 7F07A324 AFA000E8 */ sw $zero, 0xe8($sp) -/* 0AEE98 7F07A328 0FC1751A */ jal getSizeBufferWeaponInHand -/* 0AEE9C 7F07A32C 00002025 */ move $a0, $zero -/* 0AEEA0 7F07A330 AFA200E4 */ sw $v0, 0xe4($sp) -/* 0AEEA4 7F07A334 0FC1751A */ jal getSizeBufferWeaponInHand -/* 0AEEA8 7F07A338 24040001 */ li $a0, 1 -/* 0AEEAC 7F07A33C 3C198003 */ lui $t9, %hi(dummy_08_pp7_obj) # $t9, 0x8003 -/* 0AEEB0 7F07A340 273965EC */ addiu $t9, %lo(dummy_08_pp7_obj) # addiu $t9, $t9, 0x65ec -/* 0AEEB4 7F07A344 AFA200E0 */ sw $v0, 0xe0($sp) -/* 0AEEB8 7F07A348 272C0084 */ addiu $t4, $t9, 0x84 -/* 0AEEBC 7F07A34C 27B80054 */ addiu $t8, $sp, 0x54 -.Ljp7F07A350: -/* 0AEEC0 7F07A350 8F210000 */ lw $at, ($t9) -/* 0AEEC4 7F07A354 2739000C */ addiu $t9, $t9, 0xc -/* 0AEEC8 7F07A358 2718000C */ addiu $t8, $t8, 0xc -/* 0AEECC 7F07A35C AF01FFF4 */ sw $at, -0xc($t8) -/* 0AEED0 7F07A360 8F21FFF8 */ lw $at, -8($t9) -/* 0AEED4 7F07A364 AF01FFF8 */ sw $at, -8($t8) -/* 0AEED8 7F07A368 8F21FFFC */ lw $at, -4($t9) -/* 0AEEDC 7F07A36C 172CFFF8 */ bne $t9, $t4, .Ljp7F07A350 -/* 0AEEE0 7F07A370 AF01FFFC */ sw $at, -4($t8) -/* 0AEEE4 7F07A374 8F210000 */ lw $at, ($t9) -/* 0AEEE8 7F07A378 00002025 */ move $a0, $zero -/* 0AEEEC 7F07A37C 0FC177D9 */ jal get_item_in_hand_or_watch_menu -/* 0AEEF0 7F07A380 AF010000 */ sw $at, ($t8) -/* 0AEEF4 7F07A384 240D0017 */ li $t5, 23 -/* 0AEEF8 7F07A388 240E004B */ li $t6, 75 -/* 0AEEFC 7F07A38C 3C048008 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8008 -/* 0AEF00 7F07A390 AFA20048 */ sw $v0, 0x48($sp) -/* 0AEF04 7F07A394 AFAD0044 */ sw $t5, 0x44($sp) -/* 0AEF08 7F07A398 AFAE0040 */ sw $t6, 0x40($sp) -/* 0AEF0C 7F07A39C AFA00038 */ sw $zero, 0x38($sp) -/* 0AEF10 7F07A3A0 0FC1F922 */ jal sub_GAME_7F07DE64 -/* 0AEF14 7F07A3A4 8C84A120 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0AEF18 7F07A3A8 0FC26C01 */ jal getPlayerCount -/* 0AEF1C 7F07A3AC 00000000 */ nop -/* 0AEF20 7F07A3B0 24010001 */ li $at, 1 -/* 0AEF24 7F07A3B4 14410066 */ bne $v0, $at, .Ljp7F07A550 -/* 0AEF28 7F07A3B8 00000000 */ nop -/* 0AEF2C 7F07A3BC 0FC075C4 */ jal fileGetBondForCurrentFolder -/* 0AEF30 7F07A3C0 00000000 */ nop -/* 0AEF34 7F07A3C4 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8008 -/* 0AEF38 7F07A3C8 8DEFA120 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0AEF3C 7F07A3CC 8DE3041C */ lw $v1, 0x41c($t7) -/* 0AEF40 7F07A3D0 2C610009 */ sltiu $at, $v1, 9 -/* 0AEF44 7F07A3D4 1020002F */ beqz $at, .Ljp7F07A494 -/* 0AEF48 7F07A3D8 00035880 */ sll $t3, $v1, 2 -/* 0AEF4C 7F07A3DC 3C018005 */ lui $at, %hi(jpt_bondcuff) -/* 0AEF50 7F07A3E0 002B0821 */ addu $at, $at, $t3 -/* 0AEF54 7F07A3E4 8C2B5014 */ lw $t3, %lo(jpt_bondcuff)($at) -/* 0AEF58 7F07A3E8 01600008 */ jr $t3 -/* 0AEF5C 7F07A3EC 00000000 */ nop -cuff_3_boiler: -/* 0AEF60 7F07A3F0 240A0016 */ li $t2, 22 -/* 0AEF64 7F07A3F4 10000027 */ b .Ljp7F07A494 -/* 0AEF68 7F07A3F8 AFAA0044 */ sw $t2, 0x44($sp) -cuff_2_jungle: -/* 0AEF6C 7F07A3FC 240C0018 */ li $t4, 24 -/* 0AEF70 7F07A400 10000024 */ b .Ljp7F07A494 -/* 0AEF74 7F07A404 AFAC0044 */ sw $t4, 0x44($sp) -cuff_4_snowsuit: -/* 0AEF78 7F07A408 24190019 */ li $t9, 25 -/* 0AEF7C 7F07A40C 10000021 */ b .Ljp7F07A494 -/* 0AEF80 7F07A410 AFB90044 */ sw $t9, 0x44($sp) -cuff_1_brosnan: -/* 0AEF84 7F07A414 24180005 */ li $t8, 5 -/* 0AEF88 7F07A418 1000001E */ b .Ljp7F07A494 -/* 0AEF8C 7F07A41C AFB80044 */ sw $t8, 0x44($sp) -cuff_5_connery: -/* 0AEF90 7F07A420 240D0005 */ li $t5, 5 -/* 0AEF94 7F07A424 1000001B */ b .Ljp7F07A494 -/* 0AEF98 7F07A428 AFAD0044 */ sw $t5, 0x44($sp) -cuff_6_moore: -/* 0AEF9C 7F07A42C 240E0005 */ li $t6, 5 -/* 0AEFA0 7F07A430 10000018 */ b .Ljp7F07A494 -/* 0AEFA4 7F07A434 AFAE0044 */ sw $t6, 0x44($sp) -cuff_7_dalton: -/* 0AEFA8 7F07A438 240F0005 */ li $t7, 5 -/* 0AEFAC 7F07A43C 10000015 */ b .Ljp7F07A494 -/* 0AEFB0 7F07A440 AFAF0044 */ sw $t7, 0x44($sp) -cuff_8_variable_bond_head: -/* 0AEFB4 7F07A444 1040000C */ beqz $v0, .Ljp7F07A478 -/* 0AEFB8 7F07A448 240B0005 */ li $t3, 5 -/* 0AEFBC 7F07A44C 24010001 */ li $at, 1 -/* 0AEFC0 7F07A450 1041000B */ beq $v0, $at, .Ljp7F07A480 -/* 0AEFC4 7F07A454 240A0005 */ li $t2, 5 -/* 0AEFC8 7F07A458 24010002 */ li $at, 2 -/* 0AEFCC 7F07A45C 1041000A */ beq $v0, $at, .Ljp7F07A488 -/* 0AEFD0 7F07A460 240C0005 */ li $t4, 5 -/* 0AEFD4 7F07A464 24010003 */ li $at, 3 -/* 0AEFD8 7F07A468 10410009 */ beq $v0, $at, .Ljp7F07A490 -/* 0AEFDC 7F07A46C 24190005 */ li $t9, 5 -/* 0AEFE0 7F07A470 10000008 */ b .Ljp7F07A494 -/* 0AEFE4 7F07A474 00000000 */ nop -.Ljp7F07A478: -/* 0AEFE8 7F07A478 10000006 */ b .Ljp7F07A494 -/* 0AEFEC 7F07A47C AFAB0044 */ sw $t3, 0x44($sp) -.Ljp7F07A480: -/* 0AEFF0 7F07A480 10000004 */ b .Ljp7F07A494 -/* 0AEFF4 7F07A484 AFAA0044 */ sw $t2, 0x44($sp) -.Ljp7F07A488: -/* 0AEFF8 7F07A488 10000002 */ b .Ljp7F07A494 -/* 0AEFFC 7F07A48C AFAC0044 */ sw $t4, 0x44($sp) -.Ljp7F07A490: -/* 0AF000 7F07A490 AFB90044 */ sw $t9, 0x44($sp) -.Ljp7F07A494: -/* 0AF004 7F07A494 1040000C */ beqz $v0, .Ljp7F07A4C8 -/* 0AF008 7F07A498 2C610009 */ sltiu $at, $v1, 9 -/* 0AF00C 7F07A49C 24010001 */ li $at, 1 -/* 0AF010 7F07A4A0 10410025 */ beq $v0, $at, .Ljp7F07A538 -/* 0AF014 7F07A4A4 2418004E */ li $t8, 78 -/* 0AF018 7F07A4A8 24010002 */ li $at, 2 -/* 0AF01C 7F07A4AC 10410024 */ beq $v0, $at, .Ljp7F07A540 -/* 0AF020 7F07A4B0 240D004E */ li $t5, 78 -/* 0AF024 7F07A4B4 24010003 */ li $at, 3 -/* 0AF028 7F07A4B8 10410023 */ beq $v0, $at, .Ljp7F07A548 -/* 0AF02C 7F07A4BC 240E004E */ li $t6, 78 -/* 0AF030 7F07A4C0 1000002C */ b .Ljp7F07A574 -/* 0AF034 7F07A4C4 00000000 */ nop -.Ljp7F07A4C8: -/* 0AF038 7F07A4C8 1020002A */ beqz $at, .Ljp7F07A574 -/* 0AF03C 7F07A4CC 0003C080 */ sll $t8, $v1, 2 -/* 0AF040 7F07A4D0 3C018005 */ lui $at, %hi(jpt_bondhead) -/* 0AF044 7F07A4D4 00380821 */ addu $at, $at, $t8 -/* 0AF048 7F07A4D8 8C385038 */ lw $t8, %lo(jpt_bondhead)($at) -/* 0AF04C 7F07A4DC 03000008 */ jr $t8 -/* 0AF050 7F07A4E0 00000000 */ nop -boiler_bond_head_set: -/* 0AF054 7F07A4E4 240D004A */ li $t5, 74 -/* 0AF058 7F07A4E8 10000022 */ b .Ljp7F07A574 -/* 0AF05C 7F07A4EC AFAD0040 */ sw $t5, 0x40($sp) -jungle_head_set: -/* 0AF060 7F07A4F0 240E004C */ li $t6, 76 -/* 0AF064 7F07A4F4 1000001F */ b .Ljp7F07A574 -/* 0AF068 7F07A4F8 AFAE0040 */ sw $t6, 0x40($sp) -brosnan_tux_head_set: -/* 0AF06C 7F07A4FC 240F004E */ li $t7, 78 -/* 0AF070 7F07A500 1000001C */ b .Ljp7F07A574 -/* 0AF074 7F07A504 AFAF0040 */ sw $t7, 0x40($sp) -connery_head_set: -/* 0AF078 7F07A508 240B004E */ li $t3, 78 -/* 0AF07C 7F07A50C 10000019 */ b .Ljp7F07A574 -/* 0AF080 7F07A510 AFAB0040 */ sw $t3, 0x40($sp) -moore_head_set: -/* 0AF084 7F07A514 240A004E */ li $t2, 78 -/* 0AF088 7F07A518 10000016 */ b .Ljp7F07A574 -/* 0AF08C 7F07A51C AFAA0040 */ sw $t2, 0x40($sp) -dalton_head_set: -/* 0AF090 7F07A520 240C004E */ li $t4, 78 -/* 0AF094 7F07A524 10000013 */ b .Ljp7F07A574 -/* 0AF098 7F07A528 AFAC0040 */ sw $t4, 0x40($sp) -variable_body_head: -/* 0AF09C 7F07A52C 2419004E */ li $t9, 78 -/* 0AF0A0 7F07A530 10000010 */ b .Ljp7F07A574 -/* 0AF0A4 7F07A534 AFB90040 */ sw $t9, 0x40($sp) -.Ljp7F07A538: -/* 0AF0A8 7F07A538 1000000E */ b .Ljp7F07A574 -/* 0AF0AC 7F07A53C AFB80040 */ sw $t8, 0x40($sp) -.Ljp7F07A540: -/* 0AF0B0 7F07A540 1000000C */ b .Ljp7F07A574 -/* 0AF0B4 7F07A544 AFAD0040 */ sw $t5, 0x40($sp) -.Ljp7F07A548: -/* 0AF0B8 7F07A548 1000000A */ b .Ljp7F07A574 -/* 0AF0BC 7F07A54C AFAE0040 */ sw $t6, 0x40($sp) -.Ljp7F07A550: -/* 0AF0C0 7F07A550 0FC26F3C */ jal get_cur_playernum -/* 0AF0C4 7F07A554 00000000 */ nop -/* 0AF0C8 7F07A558 0FC040BF */ jal get_player_mp_char_head -/* 0AF0CC 7F07A55C 00402025 */ move $a0, $v0 -/* 0AF0D0 7F07A560 0FC26F3C */ jal get_cur_playernum -/* 0AF0D4 7F07A564 AFA20040 */ sw $v0, 0x40($sp) -/* 0AF0D8 7F07A568 0FC040E7 */ jal get_player_mp_char_body -/* 0AF0DC 7F07A56C 00402025 */ move $a0, $v0 -/* 0AF0E0 7F07A570 AFA20044 */ sw $v0, 0x44($sp) -.Ljp7F07A574: -/* 0AF0E4 7F07A574 3C0F8003 */ lui $t7, %hi(g_CameraMode) # $t7, 0x8003 -/* 0AF0E8 7F07A578 8DEF64D4 */ lw $t7, %lo(g_CameraMode)($t7) -/* 0AF0EC 7F07A57C 24010003 */ li $at, 3 -/* 0AF0F0 7F07A580 15E10003 */ bne $t7, $at, .Ljp7F07A590 -/* 0AF0F4 7F07A584 3C0B8008 */ lui $t3, %hi(starting_weapon) # $t3, 0x8008 -/* 0AF0F8 7F07A588 8D6B9A20 */ lw $t3, %lo(starting_weapon)($t3) -/* 0AF0FC 7F07A58C AFAB0048 */ sw $t3, 0x48($sp) -.Ljp7F07A590: -/* 0AF100 7F07A590 0FC26C01 */ jal getPlayerCount -/* 0AF104 7F07A594 00000000 */ nop -/* 0AF108 7F07A598 24010001 */ li $at, 1 -/* 0AF10C 7F07A59C 14410082 */ bne $v0, $at, .Ljp7F07A7A8 -/* 0AF110 7F07A5A0 8FAF0044 */ lw $t7, 0x44($sp) -/* 0AF114 7F07A5A4 0FC1751F */ jal remove_item_in_hand -/* 0AF118 7F07A5A8 24040001 */ li $a0, 1 -/* 0AF11C 7F07A5AC 0FC1751F */ jal remove_item_in_hand -/* 0AF120 7F07A5B0 00002025 */ move $a0, $zero -/* 0AF124 7F07A5B4 27A40100 */ addiu $a0, $sp, 0x100 -/* 0AF128 7F07A5B8 8FA500EC */ lw $a1, 0xec($sp) -/* 0AF12C 7F07A5BC 0FC331F5 */ jal texInitPool -/* 0AF130 7F07A5C0 8FA600E0 */ lw $a2, 0xe0($sp) -/* 0AF134 7F07A5C4 0FC1750E */ jal get_ptr_itemheader_in_hand -/* 0AF138 7F07A5C8 00002025 */ move $a0, $zero -/* 0AF13C 7F07A5CC 8FAA0044 */ lw $t2, 0x44($sp) -/* 0AF140 7F07A5D0 3C198004 */ lui $t9, %hi(c_item_entries) # $t9, 0x8004 -/* 0AF144 7F07A5D4 2739DE40 */ addiu $t9, %lo(c_item_entries) # addiu $t9, $t9, -0x21c0 -/* 0AF148 7F07A5D8 000A6080 */ sll $t4, $t2, 2 -/* 0AF14C 7F07A5DC 018A6021 */ addu $t4, $t4, $t2 -/* 0AF150 7F07A5E0 000C6080 */ sll $t4, $t4, 2 -/* 0AF154 7F07A5E4 01991821 */ addu $v1, $t4, $t9 -/* 0AF158 7F07A5E8 8C780000 */ lw $t8, ($v1) -/* 0AF15C 7F07A5EC AFA200FC */ sw $v0, 0xfc($sp) -/* 0AF160 7F07A5F0 27AB0100 */ addiu $t3, $sp, 0x100 -/* 0AF164 7F07A5F4 8F010000 */ lw $at, ($t8) -/* 0AF168 7F07A5F8 00402025 */ move $a0, $v0 -/* 0AF16C 7F07A5FC AC410000 */ sw $at, ($v0) -/* 0AF170 7F07A600 8F0F0004 */ lw $t7, 4($t8) -/* 0AF174 7F07A604 AC4F0004 */ sw $t7, 4($v0) -/* 0AF178 7F07A608 8F010008 */ lw $at, 8($t8) -/* 0AF17C 7F07A60C AC410008 */ sw $at, 8($v0) -/* 0AF180 7F07A610 8F0F000C */ lw $t7, 0xc($t8) -/* 0AF184 7F07A614 AC4F000C */ sw $t7, 0xc($v0) -/* 0AF188 7F07A618 8F010010 */ lw $at, 0x10($t8) -/* 0AF18C 7F07A61C AC410010 */ sw $at, 0x10($v0) -/* 0AF190 7F07A620 8F0F0014 */ lw $t7, 0x14($t8) -/* 0AF194 7F07A624 AC4F0014 */ sw $t7, 0x14($v0) -/* 0AF198 7F07A628 8F010018 */ lw $at, 0x18($t8) -/* 0AF19C 7F07A62C AC410018 */ sw $at, 0x18($v0) -/* 0AF1A0 7F07A630 8F0F001C */ lw $t7, 0x1c($t8) -/* 0AF1A4 7F07A634 AC4F001C */ sw $t7, 0x1c($v0) -/* 0AF1A8 7F07A638 AFA30028 */ sw $v1, 0x28($sp) -/* 0AF1AC 7F07A63C AFAB0010 */ sw $t3, 0x10($sp) -/* 0AF1B0 7F07A640 8FA700E4 */ lw $a3, 0xe4($sp) -/* 0AF1B4 7F07A644 8FA600F0 */ lw $a2, 0xf0($sp) -/* 0AF1B8 7F07A648 0FC1DAA5 */ jal load_object_fill_header -/* 0AF1BC 7F07A64C 8C650004 */ lw $a1, 4($v1) -/* 0AF1C0 7F07A650 8FA30028 */ lw $v1, 0x28($sp) -/* 0AF1C4 7F07A654 0FC2F74E */ jal get_pc_buffer_remaining_value -/* 0AF1C8 7F07A658 8C640004 */ lw $a0, 4($v1) -/* 0AF1CC 7F07A65C 8FAD0040 */ lw $t5, 0x40($sp) -/* 0AF1D0 7F07A660 3C0F8004 */ lui $t7, %hi(c_item_entries) # $t7, 0x8004 -/* 0AF1D4 7F07A664 25EFDE40 */ addiu $t7, %lo(c_item_entries) # addiu $t7, $t7, -0x21c0 -/* 0AF1D8 7F07A668 000DC080 */ sll $t8, $t5, 2 -/* 0AF1DC 7F07A66C 030DC021 */ addu $t8, $t8, $t5 -/* 0AF1E0 7F07A670 0018C080 */ sll $t8, $t8, 2 -/* 0AF1E4 7F07A674 030F1821 */ addu $v1, $t8, $t7 -/* 0AF1E8 7F07A678 8C6B0000 */ lw $t3, ($v1) -/* 0AF1EC 7F07A67C 2448003F */ addiu $t0, $v0, 0x3f -/* 0AF1F0 7F07A680 8FA900F0 */ lw $t1, 0xf0($sp) -/* 0AF1F4 7F07A684 350A003F */ ori $t2, $t0, 0x3f -/* 0AF1F8 7F07A688 8D610000 */ lw $at, ($t3) -/* 0AF1FC 7F07A68C 394C003F */ xori $t4, $t2, 0x3f -/* 0AF200 7F07A690 2588005F */ addiu $t0, $t4, 0x5f -/* 0AF204 7F07A694 3519003F */ ori $t9, $t0, 0x3f -/* 0AF208 7F07A698 012C2021 */ addu $a0, $t1, $t4 -/* 0AF20C 7F07A69C 3B28003F */ xori $t0, $t9, 0x3f -/* 0AF210 7F07A6A0 AC810000 */ sw $at, ($a0) -/* 0AF214 7F07A6A4 8D790004 */ lw $t9, 4($t3) -/* 0AF218 7F07A6A8 27AD0100 */ addiu $t5, $sp, 0x100 -/* 0AF21C 7F07A6AC 01283021 */ addu $a2, $t1, $t0 -/* 0AF220 7F07A6B0 AC990004 */ sw $t9, 4($a0) -/* 0AF224 7F07A6B4 8D610008 */ lw $at, 8($t3) -/* 0AF228 7F07A6B8 AC810008 */ sw $at, 8($a0) -/* 0AF22C 7F07A6BC 8D79000C */ lw $t9, 0xc($t3) -/* 0AF230 7F07A6C0 AC99000C */ sw $t9, 0xc($a0) -/* 0AF234 7F07A6C4 8D610010 */ lw $at, 0x10($t3) -/* 0AF238 7F07A6C8 AC810010 */ sw $at, 0x10($a0) -/* 0AF23C 7F07A6CC 8D790014 */ lw $t9, 0x14($t3) -/* 0AF240 7F07A6D0 AC990014 */ sw $t9, 0x14($a0) -/* 0AF244 7F07A6D4 8D610018 */ lw $at, 0x18($t3) -/* 0AF248 7F07A6D8 AC810018 */ sw $at, 0x18($a0) -/* 0AF24C 7F07A6DC 8D79001C */ lw $t9, 0x1c($t3) -/* 0AF250 7F07A6E0 AC99001C */ sw $t9, 0x1c($a0) -/* 0AF254 7F07A6E4 8FAE00E4 */ lw $t6, 0xe4($sp) -/* 0AF258 7F07A6E8 AFA800E8 */ sw $t0, 0xe8($sp) -/* 0AF25C 7F07A6EC AFA400F8 */ sw $a0, 0xf8($sp) -/* 0AF260 7F07A6F0 AFA30028 */ sw $v1, 0x28($sp) -/* 0AF264 7F07A6F4 AFAD0010 */ sw $t5, 0x10($sp) -/* 0AF268 7F07A6F8 8C650004 */ lw $a1, 4($v1) -/* 0AF26C 7F07A6FC 0FC1DAA5 */ jal load_object_fill_header -/* 0AF270 7F07A700 01C83823 */ subu $a3, $t6, $t0 -/* 0AF274 7F07A704 8FA30028 */ lw $v1, 0x28($sp) -/* 0AF278 7F07A708 0FC2F74E */ jal get_pc_buffer_remaining_value -/* 0AF27C 7F07A70C 8C640004 */ lw $a0, 4($v1) -/* 0AF280 7F07A710 8FA300E8 */ lw $v1, 0xe8($sp) -/* 0AF284 7F07A714 8FAC00F0 */ lw $t4, 0xf0($sp) -/* 0AF288 7F07A718 8FA400FC */ lw $a0, 0xfc($sp) -/* 0AF28C 7F07A71C 00431821 */ addu $v1, $v0, $v1 -/* 0AF290 7F07A720 2463003F */ addiu $v1, $v1, 0x3f -/* 0AF294 7F07A724 3478003F */ ori $t8, $v1, 0x3f -/* 0AF298 7F07A728 3B0F003F */ xori $t7, $t8, 0x3f -/* 0AF29C 7F07A72C 25E300FB */ addiu $v1, $t7, 0xfb -/* 0AF2A0 7F07A730 346B003F */ ori $t3, $v1, 0x3f -/* 0AF2A4 7F07A734 3979003F */ xori $t9, $t3, 0x3f -/* 0AF2A8 7F07A738 018F5021 */ addu $t2, $t4, $t7 -/* 0AF2AC 7F07A73C AFAA0038 */ sw $t2, 0x38($sp) -/* 0AF2B0 7F07A740 0FC1D8B9 */ jal modelCalculateRwDataLen -/* 0AF2B4 7F07A744 AFB900E8 */ sw $t9, 0xe8($sp) -/* 0AF2B8 7F07A748 0FC1D8B9 */ jal modelCalculateRwDataLen -/* 0AF2BC 7F07A74C 8FA400F8 */ lw $a0, 0xf8($sp) -/* 0AF2C0 7F07A750 8FA500FC */ lw $a1, 0xfc($sp) -/* 0AF2C4 7F07A754 8FAF00F8 */ lw $t7, 0xf8($sp) -/* 0AF2C8 7F07A758 8FA300E8 */ lw $v1, 0xe8($sp) -/* 0AF2CC 7F07A75C 84B80014 */ lh $t8, 0x14($a1) -/* 0AF2D0 7F07A760 85EC0014 */ lh $t4, 0x14($t7) -/* 0AF2D4 7F07A764 8FAE00F0 */ lw $t6, 0xf0($sp) -/* 0AF2D8 7F07A768 8FA40038 */ lw $a0, 0x38($sp) -/* 0AF2DC 7F07A76C 030C1021 */ addu $v0, $t8, $t4 -/* 0AF2E0 7F07A770 2442000A */ addiu $v0, $v0, 0xa -/* 0AF2E4 7F07A774 00025080 */ sll $t2, $v0, 2 -/* 0AF2E8 7F07A778 01C33021 */ addu $a2, $t6, $v1 -/* 0AF2EC 7F07A77C 01431821 */ addu $v1, $t2, $v1 -/* 0AF2F0 7F07A780 2463003F */ addiu $v1, $v1, 0x3f -/* 0AF2F4 7F07A784 346B003F */ ori $t3, $v1, 0x3f -/* 0AF2F8 7F07A788 3979003F */ xori $t9, $t3, 0x3f -/* 0AF2FC 7F07A78C AFB900E8 */ sw $t9, 0xe8($sp) -/* 0AF300 7F07A790 0FC1D967 */ jal animInit -/* 0AF304 7F07A794 AFA20030 */ sw $v0, 0x30($sp) -/* 0AF308 7F07A798 8FA20030 */ lw $v0, 0x30($sp) -/* 0AF30C 7F07A79C 8FAE0038 */ lw $t6, 0x38($sp) -/* 0AF310 7F07A7A0 10000026 */ b .Ljp7F07A83C -/* 0AF314 7F07A7A4 A5C20002 */ sh $v0, 2($t6) -.Ljp7F07A7A8: -/* 0AF318 7F07A7A8 000FC080 */ sll $t8, $t7, 2 -/* 0AF31C 7F07A7AC 030FC021 */ addu $t8, $t8, $t7 -/* 0AF320 7F07A7B0 3C0C8004 */ lui $t4, %hi(c_item_entries) # $t4, 0x8004 -/* 0AF324 7F07A7B4 258CDE40 */ addiu $t4, %lo(c_item_entries) # addiu $t4, $t4, -0x21c0 -/* 0AF328 7F07A7B8 0018C080 */ sll $t8, $t8, 2 -/* 0AF32C 7F07A7BC 030C1821 */ addu $v1, $t8, $t4 -/* 0AF330 7F07A7C0 8C6A0000 */ lw $t2, ($v1) -/* 0AF334 7F07A7C4 AFAA00FC */ sw $t2, 0xfc($sp) -/* 0AF338 7F07A7C8 8D590000 */ lw $t9, ($t2) -/* 0AF33C 7F07A7CC 01402025 */ move $a0, $t2 -/* 0AF340 7F07A7D0 57200006 */ bnezl $t9, .Ljp7F07A7EC -/* 0AF344 7F07A7D4 906D0011 */ lbu $t5, 0x11($v1) -/* 0AF348 7F07A7D8 8C650004 */ lw $a1, 4($v1) -/* 0AF34C 7F07A7DC 0FC1DACF */ jal fileLoad -/* 0AF350 7F07A7E0 AFA30028 */ sw $v1, 0x28($sp) -/* 0AF354 7F07A7E4 8FA30028 */ lw $v1, 0x28($sp) -/* 0AF358 7F07A7E8 906D0011 */ lbu $t5, 0x11($v1) -.Ljp7F07A7EC: -/* 0AF35C 7F07A7EC 8FAF0040 */ lw $t7, 0x40($sp) -/* 0AF360 7F07A7F0 3C0C8004 */ lui $t4, %hi(c_item_entries) # $t4, 0x8004 -/* 0AF364 7F07A7F4 11A00005 */ beqz $t5, .Ljp7F07A80C -/* 0AF368 7F07A7F8 000FC080 */ sll $t8, $t7, 2 -/* 0AF36C 7F07A7FC 240EFFFF */ li $t6, -1 -/* 0AF370 7F07A800 AFAE0040 */ sw $t6, 0x40($sp) -/* 0AF374 7F07A804 1000000D */ b .Ljp7F07A83C -/* 0AF378 7F07A808 AFA000F8 */ sw $zero, 0xf8($sp) -.Ljp7F07A80C: -/* 0AF37C 7F07A80C 030FC021 */ addu $t8, $t8, $t7 -/* 0AF380 7F07A810 0018C080 */ sll $t8, $t8, 2 -/* 0AF384 7F07A814 258CDE40 */ addiu $t4, %lo(c_item_entries) # addiu $t4, $t4, -0x21c0 -/* 0AF388 7F07A818 030C1821 */ addu $v1, $t8, $t4 -/* 0AF38C 7F07A81C 8C640000 */ lw $a0, ($v1) -/* 0AF390 7F07A820 AFA400F8 */ sw $a0, 0xf8($sp) -/* 0AF394 7F07A824 8C8A0000 */ lw $t2, ($a0) -/* 0AF398 7F07A828 55400005 */ bnezl $t2, .Ljp7F07A840 -/* 0AF39C 7F07A82C 8FB90038 */ lw $t9, 0x38($sp) -/* 0AF3A0 7F07A830 8C650004 */ lw $a1, 4($v1) -/* 0AF3A4 7F07A834 0FC1DACF */ jal fileLoad -/* 0AF3A8 7F07A838 AFA400F8 */ sw $a0, 0xf8($sp) -.Ljp7F07A83C: -/* 0AF3AC 7F07A83C 8FB90038 */ lw $t9, 0x38($sp) -.Ljp7F07A840: -/* 0AF3B0 7F07A840 8FA40044 */ lw $a0, 0x44($sp) -/* 0AF3B4 7F07A844 8FA50040 */ lw $a1, 0x40($sp) -/* 0AF3B8 7F07A848 8FA600FC */ lw $a2, 0xfc($sp) -/* 0AF3BC 7F07A84C 8FA700F8 */ lw $a3, 0xf8($sp) -/* 0AF3C0 7F07A850 AFA00010 */ sw $zero, 0x10($sp) -/* 0AF3C4 7F07A854 0FC08D76 */ jal makeonebody -/* 0AF3C8 7F07A858 AFB90014 */ sw $t9, 0x14($sp) -/* 0AF3CC 7F07A85C 3C038008 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8008 -/* 0AF3D0 7F07A860 2463A120 */ addiu $v1, %lo(g_CurrentPlayer) # addiu $v1, $v1, -0x5ee0 -/* 0AF3D4 7F07A864 8C6B0000 */ lw $t3, ($v1) -/* 0AF3D8 7F07A868 3C018005 */ lui $at, %hi(D_8005502C) # $at, 0x8005 -/* 0AF3DC 7F07A86C AD6200D4 */ sw $v0, 0xd4($t3) -/* 0AF3E0 7F07A870 8C6D0000 */ lw $t5, ($v1) -/* 0AF3E4 7F07A874 C426505C */ lwc1 $f6, %lo(D_8005502C)($at) -/* 0AF3E8 7F07A878 8DA400D4 */ lw $a0, 0xd4($t5) -/* 0AF3EC 7F07A87C C4840014 */ lwc1 $f4, 0x14($a0) -/* 0AF3F0 7F07A880 46062202 */ mul.s $f8, $f4, $f6 -/* 0AF3F4 7F07A884 44054000 */ mfc1 $a1, $f8 -/* 0AF3F8 7F07A888 0FC1B51A */ jal modelSetScale -/* 0AF3FC 7F07A88C 00000000 */ nop -/* 0AF400 7F07A890 3C038008 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8008 -/* 0AF404 7F07A894 8C63A120 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0AF408 7F07A898 8FA70114 */ lw $a3, 0x114($sp) -/* 0AF40C 7F07A89C 8C6400A8 */ lw $a0, 0xa8($v1) -/* 0AF410 7F07A8A0 8C6500D4 */ lw $a1, 0xd4($v1) -/* 0AF414 7F07A8A4 8C8E0014 */ lw $t6, 0x14($a0) -/* 0AF418 7F07A8A8 AFA00014 */ sw $zero, 0x14($sp) -/* 0AF41C 7F07A8AC 24860008 */ addiu $a2, $a0, 8 -/* 0AF420 7F07A8B0 0FC0809B */ jal init_GUARDdata_with_set_values -/* 0AF424 7F07A8B4 AFAE0010 */ sw $t6, 0x10($sp) -/* 0AF428 7F07A8B8 3C078008 */ lui $a3, %hi(g_CurrentPlayer) # $a3, 0x8008 -/* 0AF42C 7F07A8BC 24E7A120 */ addiu $a3, %lo(g_CurrentPlayer) # addiu $a3, $a3, -0x5ee0 -/* 0AF430 7F07A8C0 8CF80000 */ lw $t8, ($a3) -/* 0AF434 7F07A8C4 240F0006 */ li $t7, 6 -/* 0AF438 7F07A8C8 8F0C00A8 */ lw $t4, 0xa8($t8) -/* 0AF43C 7F07A8CC A18F0000 */ sb $t7, ($t4) -/* 0AF440 7F07A8D0 8CEA0000 */ lw $t2, ($a3) -/* 0AF444 7F07A8D4 8D5900A8 */ lw $t9, 0xa8($t2) -/* 0AF448 7F07A8D8 8F260004 */ lw $a2, 4($t9) -/* 0AF44C 7F07A8DC 8CCB0014 */ lw $t3, 0x14($a2) -/* 0AF450 7F07A8E0 356D0001 */ ori $t5, $t3, 1 -/* 0AF454 7F07A8E4 ACCD0014 */ sw $t5, 0x14($a2) -/* 0AF458 7F07A8E8 8CE30000 */ lw $v1, ($a3) -/* 0AF45C 7F07A8EC 8C6500A8 */ lw $a1, 0xa8($v1) -/* 0AF460 7F07A8F0 8C6400D4 */ lw $a0, 0xd4($v1) -/* 0AF464 7F07A8F4 AFA60110 */ sw $a2, 0x110($sp) -/* 0AF468 7F07A8F8 0FC1B47F */ jal setsuboffset -/* 0AF46C 7F07A8FC 24A50008 */ addiu $a1, $a1, 8 -/* 0AF470 7F07A900 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8008 -/* 0AF474 7F07A904 8DCEA120 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0AF478 7F07A908 8FA50114 */ lw $a1, 0x114($sp) -/* 0AF47C 7F07A90C 0FC1B4CB */ jal setsubroty -/* 0AF480 7F07A910 8DC400D4 */ lw $a0, 0xd4($t6) -/* 0AF484 7F07A914 8FA20110 */ lw $v0, 0x110($sp) -/* 0AF488 7F07A918 8FB80040 */ lw $t8, 0x40($sp) -/* 0AF48C 7F07A91C A0580006 */ sb $t8, 6($v0) -/* 0AF490 7F07A920 8FAF0044 */ lw $t7, 0x44($sp) -/* 0AF494 7F07A924 A04F000F */ sb $t7, 0xf($v0) -/* 0AF498 7F07A928 0FC26F79 */ jal getPropForHeldItem -/* 0AF49C 7F07A92C 8FA40048 */ lw $a0, 0x48($sp) -/* 0AF4A0 7F07A930 04400045 */ bltz $v0, .Ljp7F07AA48 -/* 0AF4A4 7F07A934 AFA2004C */ sw $v0, 0x4c($sp) -/* 0AF4A8 7F07A938 0FC26C01 */ jal getPlayerCount -/* 0AF4AC 7F07A93C 00000000 */ nop -/* 0AF4B0 7F07A940 24010001 */ li $at, 1 -/* 0AF4B4 7F07A944 14410035 */ bne $v0, $at, .Ljp7F07AA1C -/* 0AF4B8 7F07A948 8FAC00F0 */ lw $t4, 0xf0($sp) -/* 0AF4BC 7F07A94C 8FA200E8 */ lw $v0, 0xe8($sp) -/* 0AF4C0 7F07A950 24040001 */ li $a0, 1 -/* 0AF4C4 7F07A954 01825021 */ addu $t2, $t4, $v0 -/* 0AF4C8 7F07A958 244200C7 */ addiu $v0, $v0, 0xc7 -/* 0AF4CC 7F07A95C 3459003F */ ori $t9, $v0, 0x3f -/* 0AF4D0 7F07A960 3B2B003F */ xori $t3, $t9, 0x3f -/* 0AF4D4 7F07A964 AFAA00DC */ sw $t2, 0xdc($sp) -/* 0AF4D8 7F07A968 0FC1750E */ jal get_ptr_itemheader_in_hand -/* 0AF4DC 7F07A96C AFAB00E8 */ sw $t3, 0xe8($sp) -/* 0AF4E0 7F07A970 8FAD004C */ lw $t5, 0x4c($sp) -/* 0AF4E4 7F07A974 3C188004 */ lui $t8, %hi(PitemZ_entries) # $t8, 0x8004 -/* 0AF4E8 7F07A978 2718A258 */ addiu $t8, %lo(PitemZ_entries) # addiu $t8, $t8, -0x5da8 -/* 0AF4EC 7F07A97C 000D7080 */ sll $t6, $t5, 2 -/* 0AF4F0 7F07A980 01CD7023 */ subu $t6, $t6, $t5 -/* 0AF4F4 7F07A984 000E7080 */ sll $t6, $t6, 2 -/* 0AF4F8 7F07A988 01D81821 */ addu $v1, $t6, $t8 -/* 0AF4FC 7F07A98C 8C6F0000 */ lw $t7, ($v1) -/* 0AF500 7F07A990 AFA200F4 */ sw $v0, 0xf4($sp) -/* 0AF504 7F07A994 27AA0100 */ addiu $t2, $sp, 0x100 -/* 0AF508 7F07A998 8DE10000 */ lw $at, ($t7) -/* 0AF50C 7F07A99C 00402025 */ move $a0, $v0 -/* 0AF510 7F07A9A0 AC410000 */ sw $at, ($v0) -/* 0AF514 7F07A9A4 8DF90004 */ lw $t9, 4($t7) -/* 0AF518 7F07A9A8 AC590004 */ sw $t9, 4($v0) -/* 0AF51C 7F07A9AC 8DE10008 */ lw $at, 8($t7) -/* 0AF520 7F07A9B0 AC410008 */ sw $at, 8($v0) -/* 0AF524 7F07A9B4 8DF9000C */ lw $t9, 0xc($t7) -/* 0AF528 7F07A9B8 AC59000C */ sw $t9, 0xc($v0) -/* 0AF52C 7F07A9BC 8DE10010 */ lw $at, 0x10($t7) -/* 0AF530 7F07A9C0 AC410010 */ sw $at, 0x10($v0) -/* 0AF534 7F07A9C4 8DF90014 */ lw $t9, 0x14($t7) -/* 0AF538 7F07A9C8 AC590014 */ sw $t9, 0x14($v0) -/* 0AF53C 7F07A9CC 8DE10018 */ lw $at, 0x18($t7) -/* 0AF540 7F07A9D0 AC410018 */ sw $at, 0x18($v0) -/* 0AF544 7F07A9D4 8DF9001C */ lw $t9, 0x1c($t7) -/* 0AF548 7F07A9D8 AC59001C */ sw $t9, 0x1c($v0) -/* 0AF54C 7F07A9DC 8FAD00E8 */ lw $t5, 0xe8($sp) -/* 0AF550 7F07A9E0 8FAE00E4 */ lw $t6, 0xe4($sp) -/* 0AF554 7F07A9E4 8FAB00F0 */ lw $t3, 0xf0($sp) -/* 0AF558 7F07A9E8 AFA30028 */ sw $v1, 0x28($sp) -/* 0AF55C 7F07A9EC AFAA0010 */ sw $t2, 0x10($sp) -/* 0AF560 7F07A9F0 8C650004 */ lw $a1, 4($v1) -/* 0AF564 7F07A9F4 01CD3823 */ subu $a3, $t6, $t5 -/* 0AF568 7F07A9F8 0FC1DAA5 */ jal load_object_fill_header -/* 0AF56C 7F07A9FC 016D3021 */ addu $a2, $t3, $t5 -/* 0AF570 7F07AA00 8FA30028 */ lw $v1, 0x28($sp) -/* 0AF574 7F07AA04 0FC2F74E */ jal get_pc_buffer_remaining_value -/* 0AF578 7F07AA08 8C640004 */ lw $a0, 4($v1) -/* 0AF57C 7F07AA0C 0FC1D8B9 */ jal modelCalculateRwDataLen -/* 0AF580 7F07AA10 8FA400F4 */ lw $a0, 0xf4($sp) -/* 0AF584 7F07AA14 10000004 */ b .Ljp7F07AA28 -/* 0AF588 7F07AA18 8FAC00DC */ lw $t4, 0xdc($sp) -.Ljp7F07AA1C: -/* 0AF58C 7F07AA1C AFA000DC */ sw $zero, 0xdc($sp) -/* 0AF590 7F07AA20 AFA000F4 */ sw $zero, 0xf4($sp) -/* 0AF594 7F07AA24 8FAC00DC */ lw $t4, 0xdc($sp) -.Ljp7F07AA28: -/* 0AF598 7F07AA28 8FAF00F4 */ lw $t7, 0xf4($sp) -/* 0AF59C 7F07AA2C 8FA40110 */ lw $a0, 0x110($sp) -/* 0AF5A0 7F07AA30 8FA5004C */ lw $a1, 0x4c($sp) -/* 0AF5A4 7F07AA34 8FA60048 */ lw $a2, 0x48($sp) -/* 0AF5A8 7F07AA38 00003825 */ move $a3, $zero -/* 0AF5AC 7F07AA3C AFAC0010 */ sw $t4, 0x10($sp) -/* 0AF5B0 7F07AA40 0FC149C4 */ jal something_with_generating_object -/* 0AF5B4 7F07AA44 AFAF0014 */ sw $t7, 0x14($sp) -.Ljp7F07AA48: -/* 0AF5B8 7F07AA48 8FA40110 */ lw $a0, 0x110($sp) -/* 0AF5BC 7F07AA4C 0FC08F65 */ jal chrlvIdleAnimationRelated7F023A94 -/* 0AF5C0 7F07AA50 24050000 */ li $a1, 0 -/* 0AF5C4 7F07AA54 10000017 */ b .Ljp7F07AAB4 -/* 0AF5C8 7F07AA58 8FBF001C */ lw $ra, 0x1c($sp) -/* 0AF5CC 7F07AA5C 8C59001C */ lw $t9, 0x1c($v0) -.Ljp7F07AA60: -/* 0AF5D0 7F07AA60 00402025 */ move $a0, $v0 -/* 0AF5D4 7F07AA64 8F2B0020 */ lw $t3, 0x20($t9) -/* 0AF5D8 7F07AA68 55600012 */ bnezl $t3, .Ljp7F07AAB4 -/* 0AF5DC 7F07AA6C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0AF5E0 7F07AA70 8C4D0014 */ lw $t5, 0x14($v0) -/* 0AF5E4 7F07AA74 24050000 */ li $a1, 0 -/* 0AF5E8 7F07AA78 35AE0001 */ ori $t6, $t5, 1 -/* 0AF5EC 7F07AA7C 0FC08F65 */ jal chrlvIdleAnimationRelated7F023A94 -/* 0AF5F0 7F07AA80 AC4E0014 */ sw $t6, 0x14($v0) -/* 0AF5F4 7F07AA84 3C038008 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8008 -/* 0AF5F8 7F07AA88 8C63A120 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0AF5FC 7F07AA8C 8C6500A8 */ lw $a1, 0xa8($v1) -/* 0AF600 7F07AA90 8C6400D4 */ lw $a0, 0xd4($v1) -/* 0AF604 7F07AA94 0FC1B47F */ jal setsuboffset -/* 0AF608 7F07AA98 24A50008 */ addiu $a1, $a1, 8 -/* 0AF60C 7F07AA9C 3C188008 */ lui $t8, %hi(g_CurrentPlayer) # $t8, 0x8008 -/* 0AF610 7F07AAA0 8F18A120 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0AF614 7F07AAA4 8FA50114 */ lw $a1, 0x114($sp) -/* 0AF618 7F07AAA8 0FC1B4CB */ jal setsubroty -/* 0AF61C 7F07AAAC 8F0400D4 */ lw $a0, 0xd4($t8) -/* 0AF620 7F07AAB0 8FBF001C */ lw $ra, 0x1c($sp) -.Ljp7F07AAB4: -/* 0AF624 7F07AAB4 27BD0118 */ addiu $sp, $sp, 0x118 -/* 0AF628 7F07AAB8 03E00008 */ jr $ra -/* 0AF62C 7F07AABC 00000000 */ nop -) -#endif - -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80054FB8 -.word 0 -glabel D_80054FBC -.word 0 - -/*D:80054FC0*/ -glabel a8s -/*"%8s"*/ -.word 0x25387300 - -glabel aX4_0f -/*"x %4.0f"*/ -.word 0x78202534 -.word 0x2E306600 - -glabel aY4_0f -/*"y %4.0f"*/ -.word 0x79202534 -.word 0x2E306600 - -glabel aZ4_0f -/*"z %4.0f"*/ -.word 0x7A202534 -.word 0x2E306600 - -glabel aS3d -/*"%s %3d"*/ -.word 0x25732025 -.word 0x33640000 -/*D:80054FE4*/ -glabel jpt_bondcuff -.word .L7F079EA4 -.word cuff_1_brosnan -.word cuff_2_jungle -.word cuff_3_boiler -.word cuff_4_snowsuit -.word cuff_5_connery -.word cuff_6_moore -.word cuff_7_dalton -.word cuff_8_variable_bond_head -.size jpt_bondcuff, . - jpt_bondcuff - -/*D:80055008*/ -glabel jpt_bondhead -.word .L7F079F84 -.word brosnan_tux_head_set -.word jungle_head_set -.word boiler_bond_head_set -.word .L7F079F84 -.word connery_head_set -.word moore_head_set -.word dalton_head_set -.word variable_body_head - -glabel D_8005502C -.word 0x3f7851ec /*0.97000003*/ -.text -glabel solo_char_load -/* 0AC760 7F079D70 27BDFEE8 */ addiu $sp, $sp, -0x118 -/* 0AC764 7F079D74 AFBF001C */ sw $ra, 0x1c($sp) -/* 0AC768 7F079D78 0FC2282C */ jal get_curplay_horizontal_rotation_in_degrees -/* 0AC76C 7F079D7C 00000000 */ nop -/* 0AC770 7F079D80 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 0AC774 7F079D84 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0AC778 7F079D88 E7A00114 */ swc1 $f0, 0x114($sp) -/* 0AC77C 7F079D8C 8DCF00A8 */ lw $t7, 0xa8($t6) -/* 0AC780 7F079D90 8DE20004 */ lw $v0, 4($t7) -/* 0AC784 7F079D94 544001D0 */ bnezl $v0, .L7F07A4D8 -/* 0AC788 7F079D98 8C59001C */ lw $t9, 0x1c($v0) -/* 0AC78C 7F079D9C 0FC174FA */ jal getPlayerWeaponBufferForHand -/* 0AC790 7F079DA0 00002025 */ move $a0, $zero -/* 0AC794 7F079DA4 AFA200F0 */ sw $v0, 0xf0($sp) -/* 0AC798 7F079DA8 0FC174FA */ jal getPlayerWeaponBufferForHand -/* 0AC79C 7F079DAC 24040001 */ li $a0, 1 -/* 0AC7A0 7F079DB0 AFA200EC */ sw $v0, 0xec($sp) -/* 0AC7A4 7F079DB4 AFA000E8 */ sw $zero, 0xe8($sp) -/* 0AC7A8 7F079DB8 0FC17500 */ jal getSizeBufferWeaponInHand -/* 0AC7AC 7F079DBC 00002025 */ move $a0, $zero -/* 0AC7B0 7F079DC0 AFA200E4 */ sw $v0, 0xe4($sp) -/* 0AC7B4 7F079DC4 0FC17500 */ jal getSizeBufferWeaponInHand -/* 0AC7B8 7F079DC8 24040001 */ li $a0, 1 -/* 0AC7BC 7F079DCC 3C198003 */ lui $t9, %hi(dummy_08_pp7_obj) # $t9, 0x8003 -/* 0AC7C0 7F079DD0 27391AFC */ addiu $t9, %lo(dummy_08_pp7_obj) # addiu $t9, $t9, 0x1afc -/* 0AC7C4 7F079DD4 AFA200E0 */ sw $v0, 0xe0($sp) -/* 0AC7C8 7F079DD8 272C0084 */ addiu $t4, $t9, 0x84 -/* 0AC7CC 7F079DDC 27B80054 */ addiu $t8, $sp, 0x54 -.L7F079DE0: -/* 0AC7D0 7F079DE0 8F210000 */ lw $at, ($t9) -/* 0AC7D4 7F079DE4 2739000C */ addiu $t9, $t9, 0xc -/* 0AC7D8 7F079DE8 2718000C */ addiu $t8, $t8, 0xc -/* 0AC7DC 7F079DEC AF01FFF4 */ sw $at, -0xc($t8) -/* 0AC7E0 7F079DF0 8F21FFF8 */ lw $at, -8($t9) -/* 0AC7E4 7F079DF4 AF01FFF8 */ sw $at, -8($t8) -/* 0AC7E8 7F079DF8 8F21FFFC */ lw $at, -4($t9) -/* 0AC7EC 7F079DFC 172CFFF8 */ bne $t9, $t4, .L7F079DE0 -/* 0AC7F0 7F079E00 AF01FFFC */ sw $at, -4($t8) -/* 0AC7F4 7F079E04 8F210000 */ lw $at, ($t9) -/* 0AC7F8 7F079E08 00002025 */ move $a0, $zero -/* 0AC7FC 7F079E0C 0FC177BF */ jal get_item_in_hand_or_watch_menu -/* 0AC800 7F079E10 AF010000 */ sw $at, ($t8) -/* 0AC804 7F079E14 240D0017 */ li $t5, 23 -/* 0AC808 7F079E18 240E004B */ li $t6, 75 -/* 0AC80C 7F079E1C 3C048007 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8007 -/* 0AC810 7F079E20 AFA20048 */ sw $v0, 0x48($sp) -/* 0AC814 7F079E24 AFAD0044 */ sw $t5, 0x44($sp) -/* 0AC818 7F079E28 AFAE0040 */ sw $t6, 0x40($sp) -/* 0AC81C 7F079E2C AFA00038 */ sw $zero, 0x38($sp) -/* 0AC820 7F079E30 0FC1F7CE */ jal sub_GAME_7F07DE64 -/* 0AC824 7F079E34 8C848BC0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0AC828 7F079E38 0FC26669 */ jal getPlayerCount -/* 0AC82C 7F079E3C 00000000 */ nop -/* 0AC830 7F079E40 24010001 */ li $at, 1 -/* 0AC834 7F079E44 14410066 */ bne $v0, $at, .L7F079FE0 -/* 0AC838 7F079E48 00000000 */ nop -/* 0AC83C 7F079E4C 0FC074F0 */ jal fileGetBondForCurrentFolder -/* 0AC840 7F079E50 00000000 */ nop -/* 0AC844 7F079E54 3C0F8007 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8007 -/* 0AC848 7F079E58 8DEF8BC0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0AC84C 7F079E5C 8DE3041C */ lw $v1, 0x41c($t7) -/* 0AC850 7F079E60 2C610009 */ sltiu $at, $v1, 9 -/* 0AC854 7F079E64 1020002F */ beqz $at, .L7F079F24 -/* 0AC858 7F079E68 00035880 */ sll $t3, $v1, 2 -/* 0AC85C 7F079E6C 3C018005 */ lui $at, %hi(jpt_bondcuff) -/* 0AC860 7F079E70 002B0821 */ addu $at, $at, $t3 -/* 0AC864 7F079E74 8C2BABB4 */ lw $t3, %lo(jpt_bondcuff)($at) -/* 0AC868 7F079E78 01600008 */ jr $t3 -/* 0AC86C 7F079E7C 00000000 */ nop -cuff_3_boiler: -/* 0AC870 7F079E80 240A0016 */ li $t2, 22 -/* 0AC874 7F079E84 10000027 */ b .L7F079F24 -/* 0AC878 7F079E88 AFAA0044 */ sw $t2, 0x44($sp) -cuff_2_jungle: -/* 0AC87C 7F079E8C 240C0018 */ li $t4, 24 -/* 0AC880 7F079E90 10000024 */ b .L7F079F24 -/* 0AC884 7F079E94 AFAC0044 */ sw $t4, 0x44($sp) -cuff_4_snowsuit: -/* 0AC888 7F079E98 24190019 */ li $t9, 25 -/* 0AC88C 7F079E9C 10000021 */ b .L7F079F24 -/* 0AC890 7F079EA0 AFB90044 */ sw $t9, 0x44($sp) -cuff_1_brosnan: -/* 0AC894 7F079EA4 24180005 */ li $t8, 5 -/* 0AC898 7F079EA8 1000001E */ b .L7F079F24 -/* 0AC89C 7F079EAC AFB80044 */ sw $t8, 0x44($sp) -cuff_5_connery: -/* 0AC8A0 7F079EB0 240D0005 */ li $t5, 5 -/* 0AC8A4 7F079EB4 1000001B */ b .L7F079F24 -/* 0AC8A8 7F079EB8 AFAD0044 */ sw $t5, 0x44($sp) -cuff_6_moore: -/* 0AC8AC 7F079EBC 240E0005 */ li $t6, 5 -/* 0AC8B0 7F079EC0 10000018 */ b .L7F079F24 -/* 0AC8B4 7F079EC4 AFAE0044 */ sw $t6, 0x44($sp) -cuff_7_dalton: -/* 0AC8B8 7F079EC8 240F0005 */ li $t7, 5 -/* 0AC8BC 7F079ECC 10000015 */ b .L7F079F24 -/* 0AC8C0 7F079ED0 AFAF0044 */ sw $t7, 0x44($sp) -cuff_8_variable_bond_head: -/* 0AC8C4 7F079ED4 1040000C */ beqz $v0, .L7F079F08 -/* 0AC8C8 7F079ED8 240B0005 */ li $t3, 5 -/* 0AC8CC 7F079EDC 24010001 */ li $at, 1 -/* 0AC8D0 7F079EE0 1041000B */ beq $v0, $at, .L7F079F10 -/* 0AC8D4 7F079EE4 240A0005 */ li $t2, 5 -/* 0AC8D8 7F079EE8 24010002 */ li $at, 2 -/* 0AC8DC 7F079EEC 1041000A */ beq $v0, $at, .L7F079F18 -/* 0AC8E0 7F079EF0 240C0005 */ li $t4, 5 -/* 0AC8E4 7F079EF4 24010003 */ li $at, 3 -/* 0AC8E8 7F079EF8 10410009 */ beq $v0, $at, .L7F079F20 -/* 0AC8EC 7F079EFC 24190005 */ li $t9, 5 -/* 0AC8F0 7F079F00 10000008 */ b .L7F079F24 -/* 0AC8F4 7F079F04 00000000 */ nop -.L7F079F08: -/* 0AC8F8 7F079F08 10000006 */ b .L7F079F24 -/* 0AC8FC 7F079F0C AFAB0044 */ sw $t3, 0x44($sp) -.L7F079F10: -/* 0AC900 7F079F10 10000004 */ b .L7F079F24 -/* 0AC904 7F079F14 AFAA0044 */ sw $t2, 0x44($sp) -.L7F079F18: -/* 0AC908 7F079F18 10000002 */ b .L7F079F24 -/* 0AC90C 7F079F1C AFAC0044 */ sw $t4, 0x44($sp) -.L7F079F20: -/* 0AC910 7F079F20 AFB90044 */ sw $t9, 0x44($sp) -.L7F079EA4: -.L7F079F24: -/* 0AC914 7F079F24 1040000C */ beqz $v0, .L7F079F58 -/* 0AC918 7F079F28 2C610009 */ sltiu $at, $v1, 9 -/* 0AC91C 7F079F2C 24010001 */ li $at, 1 -/* 0AC920 7F079F30 10410025 */ beq $v0, $at, .L7F079FC8 -/* 0AC924 7F079F34 2418004E */ li $t8, 78 -/* 0AC928 7F079F38 24010002 */ li $at, 2 -/* 0AC92C 7F079F3C 10410024 */ beq $v0, $at, .L7F079FD0 -/* 0AC930 7F079F40 240D004E */ li $t5, 78 -/* 0AC934 7F079F44 24010003 */ li $at, 3 -/* 0AC938 7F079F48 10410023 */ beq $v0, $at, .L7F079FD8 -/* 0AC93C 7F079F4C 240E004E */ li $t6, 78 -/* 0AC940 7F079F50 1000002C */ b .L7F07A004 -/* 0AC944 7F079F54 00000000 */ nop -.L7F079F58: -/* 0AC948 7F079F58 1020002A */ beqz $at, .L7F07A004 -/* 0AC94C 7F079F5C 0003C080 */ sll $t8, $v1, 2 -/* 0AC950 7F079F60 3C018005 */ lui $at, %hi(jpt_bondhead) -/* 0AC954 7F079F64 00380821 */ addu $at, $at, $t8 -/* 0AC958 7F079F68 8C38ABD8 */ lw $t8, %lo(jpt_bondhead)($at) -/* 0AC95C 7F079F6C 03000008 */ jr $t8 -/* 0AC960 7F079F70 00000000 */ nop -boiler_bond_head_set: -/* 0AC964 7F079F74 240D004A */ li $t5, 74 -/* 0AC968 7F079F78 10000022 */ b .L7F07A004 -/* 0AC96C 7F079F7C AFAD0040 */ sw $t5, 0x40($sp) -jungle_head_set: -/* 0AC970 7F079F80 240E004C */ li $t6, 76 -/* 0AC974 7F079F84 1000001F */ b .L7F07A004 -/* 0AC978 7F079F88 AFAE0040 */ sw $t6, 0x40($sp) -brosnan_tux_head_set: -/* 0AC97C 7F079F8C 240F004E */ li $t7, 78 -/* 0AC980 7F079F90 1000001C */ b .L7F07A004 -/* 0AC984 7F079F94 AFAF0040 */ sw $t7, 0x40($sp) -connery_head_set: -/* 0AC988 7F079F98 240B004E */ li $t3, 78 -/* 0AC98C 7F079F9C 10000019 */ b .L7F07A004 -/* 0AC990 7F079FA0 AFAB0040 */ sw $t3, 0x40($sp) -moore_head_set: -/* 0AC994 7F079FA4 240A004E */ li $t2, 78 -/* 0AC998 7F079FA8 10000016 */ b .L7F07A004 -/* 0AC99C 7F079FAC AFAA0040 */ sw $t2, 0x40($sp) -dalton_head_set: -/* 0AC9A0 7F079FB0 240C004E */ li $t4, 78 -/* 0AC9A4 7F079FB4 10000013 */ b .L7F07A004 -/* 0AC9A8 7F079FB8 AFAC0040 */ sw $t4, 0x40($sp) -variable_body_head: -/* 0AC9AC 7F079FBC 2419004E */ li $t9, 78 -/* 0AC9B0 7F079FC0 10000010 */ b .L7F07A004 -/* 0AC9B4 7F079FC4 AFB90040 */ sw $t9, 0x40($sp) -.L7F079FC8: -/* 0AC9B8 7F079FC8 1000000E */ b .L7F07A004 -/* 0AC9BC 7F079FCC AFB80040 */ sw $t8, 0x40($sp) -.L7F079FD0: -/* 0AC9C0 7F079FD0 1000000C */ b .L7F07A004 -/* 0AC9C4 7F079FD4 AFAD0040 */ sw $t5, 0x40($sp) -.L7F079FD8: -/* 0AC9C8 7F079FD8 1000000A */ b .L7F07A004 -/* 0AC9CC 7F079FDC AFAE0040 */ sw $t6, 0x40($sp) -.L7F079FE0: -/* 0AC9D0 7F079FE0 0FC269A4 */ jal get_cur_playernum -/* 0AC9D4 7F079FE4 00000000 */ nop -/* 0AC9D8 7F079FE8 0FC0406B */ jal get_player_mp_char_head -/* 0AC9DC 7F079FEC 00402025 */ move $a0, $v0 -/* 0AC9E0 7F079FF0 0FC269A4 */ jal get_cur_playernum -/* 0AC9E4 7F079FF4 AFA20040 */ sw $v0, 0x40($sp) -/* 0AC9E8 7F079FF8 0FC04093 */ jal get_player_mp_char_body -/* 0AC9EC 7F079FFC 00402025 */ move $a0, $v0 -/* 0AC9F0 7F07A000 AFA20044 */ sw $v0, 0x44($sp) -.L7F079F84: -.L7F07A004: -/* 0AC9F4 7F07A004 3C0F8003 */ lui $t7, %hi(g_CameraMode) # $t7, 0x8003 -/* 0AC9F8 7F07A008 8DEF19E4 */ lw $t7, %lo(g_CameraMode)($t7) -/* 0AC9FC 7F07A00C 24010003 */ li $at, 3 -/* 0ACA00 7F07A010 15E10003 */ bne $t7, $at, .L7F07A020 -/* 0ACA04 7F07A014 3C0B8007 */ lui $t3, %hi(starting_weapon) # $t3, 0x8007 -/* 0ACA08 7F07A018 8D6B84C0 */ lw $t3, %lo(starting_weapon)($t3) -/* 0ACA0C 7F07A01C AFAB0048 */ sw $t3, 0x48($sp) -.L7F07A020: -/* 0ACA10 7F07A020 0FC26669 */ jal getPlayerCount -/* 0ACA14 7F07A024 00000000 */ nop -/* 0ACA18 7F07A028 24010001 */ li $at, 1 -/* 0ACA1C 7F07A02C 1441007E */ bne $v0, $at, .L7F07A228 -/* 0ACA20 7F07A030 8FAF0044 */ lw $t7, 0x44($sp) -/* 0ACA24 7F07A034 0FC17505 */ jal remove_item_in_hand -/* 0ACA28 7F07A038 24040001 */ li $a0, 1 -/* 0ACA2C 7F07A03C 0FC17505 */ jal remove_item_in_hand -/* 0ACA30 7F07A040 00002025 */ move $a0, $zero -/* 0ACA34 7F07A044 27A40100 */ addiu $a0, $sp, 0x100 -/* 0ACA38 7F07A048 8FA500EC */ lw $a1, 0xec($sp) -/* 0ACA3C 7F07A04C 0FC32C05 */ jal texInitPool -/* 0ACA40 7F07A050 8FA600E0 */ lw $a2, 0xe0($sp) -/* 0ACA44 7F07A054 0FC174F2 */ jal get_ptr_itemheader_in_hand -/* 0ACA48 7F07A058 00002025 */ move $a0, $zero -/* 0ACA4C 7F07A05C 8FAA0044 */ lw $t2, 0x44($sp) -/* 0ACA50 7F07A060 3C198003 */ lui $t9, %hi(c_item_entries) # $t9, 0x8003 -/* 0ACA54 7F07A064 27397A60 */ addiu $t9, %lo(c_item_entries) # addiu $t9, $t9, 0x7a60 -/* 0ACA58 7F07A068 000A6080 */ sll $t4, $t2, 2 -/* 0ACA5C 7F07A06C 018A6021 */ addu $t4, $t4, $t2 -/* 0ACA60 7F07A070 000C6080 */ sll $t4, $t4, 2 -/* 0ACA64 7F07A074 01991821 */ addu $v1, $t4, $t9 -/* 0ACA68 7F07A078 8C780000 */ lw $t8, ($v1) -/* 0ACA6C 7F07A07C AFA200FC */ sw $v0, 0xfc($sp) -/* 0ACA70 7F07A080 27AB0100 */ addiu $t3, $sp, 0x100 -/* 0ACA74 7F07A084 8F010000 */ lw $at, ($t8) -/* 0ACA78 7F07A088 00402025 */ move $a0, $v0 -/* 0ACA7C 7F07A08C AC410000 */ sw $at, ($v0) -/* 0ACA80 7F07A090 8F0F0004 */ lw $t7, 4($t8) -/* 0ACA84 7F07A094 AC4F0004 */ sw $t7, 4($v0) -/* 0ACA88 7F07A098 8F010008 */ lw $at, 8($t8) -/* 0ACA8C 7F07A09C AC410008 */ sw $at, 8($v0) -/* 0ACA90 7F07A0A0 8F0F000C */ lw $t7, 0xc($t8) -/* 0ACA94 7F07A0A4 AC4F000C */ sw $t7, 0xc($v0) -/* 0ACA98 7F07A0A8 8F010010 */ lw $at, 0x10($t8) -/* 0ACA9C 7F07A0AC AC410010 */ sw $at, 0x10($v0) -/* 0ACAA0 7F07A0B0 8F0F0014 */ lw $t7, 0x14($t8) -/* 0ACAA4 7F07A0B4 AC4F0014 */ sw $t7, 0x14($v0) -/* 0ACAA8 7F07A0B8 8F010018 */ lw $at, 0x18($t8) -/* 0ACAAC 7F07A0BC AC410018 */ sw $at, 0x18($v0) -/* 0ACAB0 7F07A0C0 AFA30028 */ sw $v1, 0x28($sp) -/* 0ACAB4 7F07A0C4 AFAB0010 */ sw $t3, 0x10($sp) -/* 0ACAB8 7F07A0C8 8FA700E4 */ lw $a3, 0xe4($sp) -/* 0ACABC 7F07A0CC 8FA600F0 */ lw $a2, 0xf0($sp) -/* 0ACAC0 7F07A0D0 0FC1D949 */ jal load_object_fill_header -/* 0ACAC4 7F07A0D4 8C650004 */ lw $a1, 4($v1) -/* 0ACAC8 7F07A0D8 8FA30028 */ lw $v1, 0x28($sp) -/* 0ACACC 7F07A0DC 0FC2F150 */ jal get_pc_buffer_remaining_value -/* 0ACAD0 7F07A0E0 8C640004 */ lw $a0, 4($v1) -/* 0ACAD4 7F07A0E4 8FAD0040 */ lw $t5, 0x40($sp) -/* 0ACAD8 7F07A0E8 3C0F8003 */ lui $t7, %hi(c_item_entries) # $t7, 0x8003 -/* 0ACADC 7F07A0EC 25EF7A60 */ addiu $t7, %lo(c_item_entries) # addiu $t7, $t7, 0x7a60 -/* 0ACAE0 7F07A0F0 000DC080 */ sll $t8, $t5, 2 -/* 0ACAE4 7F07A0F4 030DC021 */ addu $t8, $t8, $t5 -/* 0ACAE8 7F07A0F8 0018C080 */ sll $t8, $t8, 2 -/* 0ACAEC 7F07A0FC 030F1821 */ addu $v1, $t8, $t7 -/* 0ACAF0 7F07A100 8C6B0000 */ lw $t3, ($v1) -/* 0ACAF4 7F07A104 2448003F */ addiu $t0, $v0, 0x3f -/* 0ACAF8 7F07A108 8FA900F0 */ lw $t1, 0xf0($sp) -/* 0ACAFC 7F07A10C 350A003F */ ori $t2, $t0, 0x3f -/* 0ACB00 7F07A110 8D610000 */ lw $at, ($t3) -/* 0ACB04 7F07A114 394C003F */ xori $t4, $t2, 0x3f -/* 0ACB08 7F07A118 2588005B */ addiu $t0, $t4, 0x5b -/* 0ACB0C 7F07A11C 3519003F */ ori $t9, $t0, 0x3f -/* 0ACB10 7F07A120 012C2021 */ addu $a0, $t1, $t4 -/* 0ACB14 7F07A124 3B28003F */ xori $t0, $t9, 0x3f -/* 0ACB18 7F07A128 AC810000 */ sw $at, ($a0) -/* 0ACB1C 7F07A12C 8D790004 */ lw $t9, 4($t3) -/* 0ACB20 7F07A130 27AD0100 */ addiu $t5, $sp, 0x100 -/* 0ACB24 7F07A134 01283021 */ addu $a2, $t1, $t0 -/* 0ACB28 7F07A138 AC990004 */ sw $t9, 4($a0) -/* 0ACB2C 7F07A13C 8D610008 */ lw $at, 8($t3) -/* 0ACB30 7F07A140 AC810008 */ sw $at, 8($a0) -/* 0ACB34 7F07A144 8D79000C */ lw $t9, 0xc($t3) -/* 0ACB38 7F07A148 AC99000C */ sw $t9, 0xc($a0) -/* 0ACB3C 7F07A14C 8D610010 */ lw $at, 0x10($t3) -/* 0ACB40 7F07A150 AC810010 */ sw $at, 0x10($a0) -/* 0ACB44 7F07A154 8D790014 */ lw $t9, 0x14($t3) -/* 0ACB48 7F07A158 AC990014 */ sw $t9, 0x14($a0) -/* 0ACB4C 7F07A15C 8D610018 */ lw $at, 0x18($t3) -/* 0ACB50 7F07A160 AC810018 */ sw $at, 0x18($a0) -/* 0ACB54 7F07A164 8FAE00E4 */ lw $t6, 0xe4($sp) -/* 0ACB58 7F07A168 AFA800E8 */ sw $t0, 0xe8($sp) -/* 0ACB5C 7F07A16C AFA400F8 */ sw $a0, 0xf8($sp) -/* 0ACB60 7F07A170 AFA30028 */ sw $v1, 0x28($sp) -/* 0ACB64 7F07A174 AFAD0010 */ sw $t5, 0x10($sp) -/* 0ACB68 7F07A178 8C650004 */ lw $a1, 4($v1) -/* 0ACB6C 7F07A17C 0FC1D949 */ jal load_object_fill_header -/* 0ACB70 7F07A180 01C83823 */ subu $a3, $t6, $t0 -/* 0ACB74 7F07A184 8FA30028 */ lw $v1, 0x28($sp) -/* 0ACB78 7F07A188 0FC2F150 */ jal get_pc_buffer_remaining_value -/* 0ACB7C 7F07A18C 8C640004 */ lw $a0, 4($v1) -/* 0ACB80 7F07A190 8FA300E8 */ lw $v1, 0xe8($sp) -/* 0ACB84 7F07A194 8FAC00F0 */ lw $t4, 0xf0($sp) -/* 0ACB88 7F07A198 8FA400FC */ lw $a0, 0xfc($sp) -/* 0ACB8C 7F07A19C 00431821 */ addu $v1, $v0, $v1 -/* 0ACB90 7F07A1A0 2463003F */ addiu $v1, $v1, 0x3f -/* 0ACB94 7F07A1A4 3478003F */ ori $t8, $v1, 0x3f -/* 0ACB98 7F07A1A8 3B0F003F */ xori $t7, $t8, 0x3f -/* 0ACB9C 7F07A1AC 25E300FB */ addiu $v1, $t7, 0xfb -/* 0ACBA0 7F07A1B0 346B003F */ ori $t3, $v1, 0x3f -/* 0ACBA4 7F07A1B4 3979003F */ xori $t9, $t3, 0x3f -/* 0ACBA8 7F07A1B8 018F5021 */ addu $t2, $t4, $t7 -/* 0ACBAC 7F07A1BC AFAA0038 */ sw $t2, 0x38($sp) -/* 0ACBB0 7F07A1C0 0FC1D75F */ jal modelCalculateRwDataLen -/* 0ACBB4 7F07A1C4 AFB900E8 */ sw $t9, 0xe8($sp) -/* 0ACBB8 7F07A1C8 0FC1D75F */ jal modelCalculateRwDataLen -/* 0ACBBC 7F07A1CC 8FA400F8 */ lw $a0, 0xf8($sp) -/* 0ACBC0 7F07A1D0 8FA500FC */ lw $a1, 0xfc($sp) -/* 0ACBC4 7F07A1D4 8FAF00F8 */ lw $t7, 0xf8($sp) -/* 0ACBC8 7F07A1D8 8FA300E8 */ lw $v1, 0xe8($sp) -/* 0ACBCC 7F07A1DC 84B80014 */ lh $t8, 0x14($a1) -/* 0ACBD0 7F07A1E0 85EC0014 */ lh $t4, 0x14($t7) -/* 0ACBD4 7F07A1E4 8FAE00F0 */ lw $t6, 0xf0($sp) -/* 0ACBD8 7F07A1E8 8FA40038 */ lw $a0, 0x38($sp) -/* 0ACBDC 7F07A1EC 030C1021 */ addu $v0, $t8, $t4 -/* 0ACBE0 7F07A1F0 2442000A */ addiu $v0, $v0, 0xa -/* 0ACBE4 7F07A1F4 00025080 */ sll $t2, $v0, 2 -/* 0ACBE8 7F07A1F8 01C33021 */ addu $a2, $t6, $v1 -/* 0ACBEC 7F07A1FC 01431821 */ addu $v1, $t2, $v1 -/* 0ACBF0 7F07A200 2463003F */ addiu $v1, $v1, 0x3f -/* 0ACBF4 7F07A204 346B003F */ ori $t3, $v1, 0x3f -/* 0ACBF8 7F07A208 3979003F */ xori $t9, $t3, 0x3f -/* 0ACBFC 7F07A20C AFB900E8 */ sw $t9, 0xe8($sp) -/* 0ACC00 7F07A210 0FC1D80A */ jal animInit -/* 0ACC04 7F07A214 AFA20030 */ sw $v0, 0x30($sp) -/* 0ACC08 7F07A218 8FA20030 */ lw $v0, 0x30($sp) -/* 0ACC0C 7F07A21C 8FAE0038 */ lw $t6, 0x38($sp) -/* 0ACC10 7F07A220 10000026 */ b .L7F07A2BC -/* 0ACC14 7F07A224 A5C20002 */ sh $v0, 2($t6) -.L7F07A228: -/* 0ACC18 7F07A228 000FC080 */ sll $t8, $t7, 2 -/* 0ACC1C 7F07A22C 030FC021 */ addu $t8, $t8, $t7 -/* 0ACC20 7F07A230 3C0C8003 */ lui $t4, %hi(c_item_entries) # $t4, 0x8003 -/* 0ACC24 7F07A234 258C7A60 */ addiu $t4, %lo(c_item_entries) # addiu $t4, $t4, 0x7a60 -/* 0ACC28 7F07A238 0018C080 */ sll $t8, $t8, 2 -/* 0ACC2C 7F07A23C 030C1821 */ addu $v1, $t8, $t4 -/* 0ACC30 7F07A240 8C6A0000 */ lw $t2, ($v1) -/* 0ACC34 7F07A244 AFAA00FC */ sw $t2, 0xfc($sp) -/* 0ACC38 7F07A248 8D590000 */ lw $t9, ($t2) -/* 0ACC3C 7F07A24C 01402025 */ move $a0, $t2 -/* 0ACC40 7F07A250 57200006 */ bnezl $t9, .L7F07A26C -/* 0ACC44 7F07A254 906D0011 */ lbu $t5, 0x11($v1) -/* 0ACC48 7F07A258 8C650004 */ lw $a1, 4($v1) -/* 0ACC4C 7F07A25C 0FC1D973 */ jal fileLoad -/* 0ACC50 7F07A260 AFA30028 */ sw $v1, 0x28($sp) -/* 0ACC54 7F07A264 8FA30028 */ lw $v1, 0x28($sp) -/* 0ACC58 7F07A268 906D0011 */ lbu $t5, 0x11($v1) -.L7F07A26C: -/* 0ACC5C 7F07A26C 8FAF0040 */ lw $t7, 0x40($sp) -/* 0ACC60 7F07A270 3C0C8003 */ lui $t4, %hi(c_item_entries) # $t4, 0x8003 -/* 0ACC64 7F07A274 11A00005 */ beqz $t5, .L7F07A28C -/* 0ACC68 7F07A278 000FC080 */ sll $t8, $t7, 2 -/* 0ACC6C 7F07A27C 240EFFFF */ li $t6, -1 -/* 0ACC70 7F07A280 AFAE0040 */ sw $t6, 0x40($sp) -/* 0ACC74 7F07A284 1000000D */ b .L7F07A2BC -/* 0ACC78 7F07A288 AFA000F8 */ sw $zero, 0xf8($sp) -.L7F07A28C: -/* 0ACC7C 7F07A28C 030FC021 */ addu $t8, $t8, $t7 -/* 0ACC80 7F07A290 0018C080 */ sll $t8, $t8, 2 -/* 0ACC84 7F07A294 258C7A60 */ addiu $t4, %lo(c_item_entries) # addiu $t4, $t4, 0x7a60 -/* 0ACC88 7F07A298 030C1821 */ addu $v1, $t8, $t4 -/* 0ACC8C 7F07A29C 8C640000 */ lw $a0, ($v1) -/* 0ACC90 7F07A2A0 AFA400F8 */ sw $a0, 0xf8($sp) -/* 0ACC94 7F07A2A4 8C8A0000 */ lw $t2, ($a0) -/* 0ACC98 7F07A2A8 55400005 */ bnezl $t2, .L7F07A2C0 -/* 0ACC9C 7F07A2AC 8FB90038 */ lw $t9, 0x38($sp) -/* 0ACCA0 7F07A2B0 8C650004 */ lw $a1, 4($v1) -/* 0ACCA4 7F07A2B4 0FC1D973 */ jal fileLoad -/* 0ACCA8 7F07A2B8 AFA400F8 */ sw $a0, 0xf8($sp) -.L7F07A2BC: -/* 0ACCAC 7F07A2BC 8FB90038 */ lw $t9, 0x38($sp) -.L7F07A2C0: -/* 0ACCB0 7F07A2C0 8FA40044 */ lw $a0, 0x44($sp) -/* 0ACCB4 7F07A2C4 8FA50040 */ lw $a1, 0x40($sp) -/* 0ACCB8 7F07A2C8 8FA600FC */ lw $a2, 0xfc($sp) -/* 0ACCBC 7F07A2CC 8FA700F8 */ lw $a3, 0xf8($sp) -/* 0ACCC0 7F07A2D0 AFA00010 */ sw $zero, 0x10($sp) -/* 0ACCC4 7F07A2D4 0FC08CAE */ jal makeonebody -/* 0ACCC8 7F07A2D8 AFB90014 */ sw $t9, 0x14($sp) -/* 0ACCCC 7F07A2DC 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0ACCD0 7F07A2E0 24638BC0 */ addiu $v1, %lo(g_CurrentPlayer) # addiu $v1, $v1, -0x7440 -/* 0ACCD4 7F07A2E4 8C6B0000 */ lw $t3, ($v1) -/* 0ACCD8 7F07A2E8 3C018005 */ lui $at, %hi(D_8005502C) # $at, 0x8005 -/* 0ACCDC 7F07A2EC AD6200D4 */ sw $v0, 0xd4($t3) -/* 0ACCE0 7F07A2F0 8C6D0000 */ lw $t5, ($v1) -/* 0ACCE4 7F07A2F4 C426ABFC */ lwc1 $f6, %lo(D_8005502C)($at) -/* 0ACCE8 7F07A2F8 8DA400D4 */ lw $a0, 0xd4($t5) -/* 0ACCEC 7F07A2FC C4840014 */ lwc1 $f4, 0x14($a0) -/* 0ACCF0 7F07A300 46062202 */ mul.s $f8, $f4, $f6 -/* 0ACCF4 7F07A304 44054000 */ mfc1 $a1, $f8 -/* 0ACCF8 7F07A308 0FC1B4CF */ jal modelSetScale -/* 0ACCFC 7F07A30C 00000000 */ nop -/* 0ACD00 7F07A310 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0ACD04 7F07A314 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0ACD08 7F07A318 8FA70114 */ lw $a3, 0x114($sp) -/* 0ACD0C 7F07A31C 8C6400A8 */ lw $a0, 0xa8($v1) -/* 0ACD10 7F07A320 8C6500D4 */ lw $a1, 0xd4($v1) -/* 0ACD14 7F07A324 8C8E0014 */ lw $t6, 0x14($a0) -/* 0ACD18 7F07A328 AFA00014 */ sw $zero, 0x14($sp) -/* 0ACD1C 7F07A32C 24860008 */ addiu $a2, $a0, 8 -/* 0ACD20 7F07A330 0FC07FC7 */ jal init_GUARDdata_with_set_values -/* 0ACD24 7F07A334 AFAE0010 */ sw $t6, 0x10($sp) -/* 0ACD28 7F07A338 3C078007 */ lui $a3, %hi(g_CurrentPlayer) # $a3, 0x8007 -/* 0ACD2C 7F07A33C 24E78BC0 */ addiu $a3, %lo(g_CurrentPlayer) # addiu $a3, $a3, -0x7440 -/* 0ACD30 7F07A340 8CF80000 */ lw $t8, ($a3) -/* 0ACD34 7F07A344 240F0006 */ li $t7, 6 -/* 0ACD38 7F07A348 8F0C00A8 */ lw $t4, 0xa8($t8) -/* 0ACD3C 7F07A34C A18F0000 */ sb $t7, ($t4) -/* 0ACD40 7F07A350 8CEA0000 */ lw $t2, ($a3) -/* 0ACD44 7F07A354 8D5900A8 */ lw $t9, 0xa8($t2) -/* 0ACD48 7F07A358 8F260004 */ lw $a2, 4($t9) -/* 0ACD4C 7F07A35C 8CCB0014 */ lw $t3, 0x14($a2) -/* 0ACD50 7F07A360 356D0001 */ ori $t5, $t3, 1 -/* 0ACD54 7F07A364 ACCD0014 */ sw $t5, 0x14($a2) -/* 0ACD58 7F07A368 8CE30000 */ lw $v1, ($a3) -/* 0ACD5C 7F07A36C 8C6500A8 */ lw $a1, 0xa8($v1) -/* 0ACD60 7F07A370 8C6400D4 */ lw $a0, 0xd4($v1) -/* 0ACD64 7F07A374 AFA60110 */ sw $a2, 0x110($sp) -/* 0ACD68 7F07A378 0FC1B480 */ jal setsuboffset -/* 0ACD6C 7F07A37C 24A50008 */ addiu $a1, $a1, 8 -/* 0ACD70 7F07A380 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 0ACD74 7F07A384 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0ACD78 7F07A388 8FA50114 */ lw $a1, 0x114($sp) -/* 0ACD7C 7F07A38C 0FC1B49D */ jal setsubroty -/* 0ACD80 7F07A390 8DC400D4 */ lw $a0, 0xd4($t6) -/* 0ACD84 7F07A394 8FA20110 */ lw $v0, 0x110($sp) -/* 0ACD88 7F07A398 8FB80040 */ lw $t8, 0x40($sp) -/* 0ACD8C 7F07A39C A0580006 */ sb $t8, 6($v0) -/* 0ACD90 7F07A3A0 8FAF0044 */ lw $t7, 0x44($sp) -/* 0ACD94 7F07A3A4 A04F000F */ sb $t7, 0xf($v0) -/* 0ACD98 7F07A3A8 0FC269E1 */ jal getPropForHeldItem -/* 0ACD9C 7F07A3AC 8FA40048 */ lw $a0, 0x48($sp) -/* 0ACDA0 7F07A3B0 04400043 */ bltz $v0, .L7F07A4C0 -/* 0ACDA4 7F07A3B4 AFA2004C */ sw $v0, 0x4c($sp) -/* 0ACDA8 7F07A3B8 0FC26669 */ jal getPlayerCount -/* 0ACDAC 7F07A3BC 00000000 */ nop -/* 0ACDB0 7F07A3C0 24010001 */ li $at, 1 -/* 0ACDB4 7F07A3C4 14410033 */ bne $v0, $at, .L7F07A494 -/* 0ACDB8 7F07A3C8 8FAC00F0 */ lw $t4, 0xf0($sp) -/* 0ACDBC 7F07A3CC 8FA200E8 */ lw $v0, 0xe8($sp) -/* 0ACDC0 7F07A3D0 24040001 */ li $a0, 1 -/* 0ACDC4 7F07A3D4 01825021 */ addu $t2, $t4, $v0 -/* 0ACDC8 7F07A3D8 244200C7 */ addiu $v0, $v0, 0xc7 -/* 0ACDCC 7F07A3DC 3459003F */ ori $t9, $v0, 0x3f -/* 0ACDD0 7F07A3E0 3B2B003F */ xori $t3, $t9, 0x3f -/* 0ACDD4 7F07A3E4 AFAA00DC */ sw $t2, 0xdc($sp) -/* 0ACDD8 7F07A3E8 0FC174F2 */ jal get_ptr_itemheader_in_hand -/* 0ACDDC 7F07A3EC AFAB00E8 */ sw $t3, 0xe8($sp) -/* 0ACDE0 7F07A3F0 8FAD004C */ lw $t5, 0x4c($sp) -/* 0ACDE4 7F07A3F4 3C188003 */ lui $t8, %hi(PitemZ_entries) # $t8, 0x8003 -/* 0ACDE8 7F07A3F8 27184D88 */ addiu $t8, %lo(PitemZ_entries) # addiu $t8, $t8, 0x4d88 -/* 0ACDEC 7F07A3FC 000D7080 */ sll $t6, $t5, 2 -/* 0ACDF0 7F07A400 01CD7023 */ subu $t6, $t6, $t5 -/* 0ACDF4 7F07A404 000E7080 */ sll $t6, $t6, 2 -/* 0ACDF8 7F07A408 01D81821 */ addu $v1, $t6, $t8 -/* 0ACDFC 7F07A40C 8C6F0000 */ lw $t7, ($v1) -/* 0ACE00 7F07A410 AFA200F4 */ sw $v0, 0xf4($sp) -/* 0ACE04 7F07A414 27AA0100 */ addiu $t2, $sp, 0x100 -/* 0ACE08 7F07A418 8DE10000 */ lw $at, ($t7) -/* 0ACE0C 7F07A41C 00402025 */ move $a0, $v0 -/* 0ACE10 7F07A420 AC410000 */ sw $at, ($v0) -/* 0ACE14 7F07A424 8DF90004 */ lw $t9, 4($t7) -/* 0ACE18 7F07A428 AC590004 */ sw $t9, 4($v0) -/* 0ACE1C 7F07A42C 8DE10008 */ lw $at, 8($t7) -/* 0ACE20 7F07A430 AC410008 */ sw $at, 8($v0) -/* 0ACE24 7F07A434 8DF9000C */ lw $t9, 0xc($t7) -/* 0ACE28 7F07A438 AC59000C */ sw $t9, 0xc($v0) -/* 0ACE2C 7F07A43C 8DE10010 */ lw $at, 0x10($t7) -/* 0ACE30 7F07A440 AC410010 */ sw $at, 0x10($v0) -/* 0ACE34 7F07A444 8DF90014 */ lw $t9, 0x14($t7) -/* 0ACE38 7F07A448 AC590014 */ sw $t9, 0x14($v0) -/* 0ACE3C 7F07A44C 8DE10018 */ lw $at, 0x18($t7) -/* 0ACE40 7F07A450 AC410018 */ sw $at, 0x18($v0) -/* 0ACE44 7F07A454 8FAD00E8 */ lw $t5, 0xe8($sp) -/* 0ACE48 7F07A458 8FAE00E4 */ lw $t6, 0xe4($sp) -/* 0ACE4C 7F07A45C 8FAB00F0 */ lw $t3, 0xf0($sp) -/* 0ACE50 7F07A460 AFA30028 */ sw $v1, 0x28($sp) -/* 0ACE54 7F07A464 AFAA0010 */ sw $t2, 0x10($sp) -/* 0ACE58 7F07A468 8C650004 */ lw $a1, 4($v1) -/* 0ACE5C 7F07A46C 01CD3823 */ subu $a3, $t6, $t5 -/* 0ACE60 7F07A470 0FC1D949 */ jal load_object_fill_header -/* 0ACE64 7F07A474 016D3021 */ addu $a2, $t3, $t5 -/* 0ACE68 7F07A478 8FA30028 */ lw $v1, 0x28($sp) -/* 0ACE6C 7F07A47C 0FC2F150 */ jal get_pc_buffer_remaining_value -/* 0ACE70 7F07A480 8C640004 */ lw $a0, 4($v1) -/* 0ACE74 7F07A484 0FC1D75F */ jal modelCalculateRwDataLen -/* 0ACE78 7F07A488 8FA400F4 */ lw $a0, 0xf4($sp) -/* 0ACE7C 7F07A48C 10000004 */ b .L7F07A4A0 -/* 0ACE80 7F07A490 8FAC00DC */ lw $t4, 0xdc($sp) -.L7F07A494: -/* 0ACE84 7F07A494 AFA000DC */ sw $zero, 0xdc($sp) -/* 0ACE88 7F07A498 AFA000F4 */ sw $zero, 0xf4($sp) -/* 0ACE8C 7F07A49C 8FAC00DC */ lw $t4, 0xdc($sp) -.L7F07A4A0: -/* 0ACE90 7F07A4A0 8FAF00F4 */ lw $t7, 0xf4($sp) -/* 0ACE94 7F07A4A4 8FA40110 */ lw $a0, 0x110($sp) -/* 0ACE98 7F07A4A8 8FA5004C */ lw $a1, 0x4c($sp) -/* 0ACE9C 7F07A4AC 8FA60048 */ lw $a2, 0x48($sp) -/* 0ACEA0 7F07A4B0 00003825 */ move $a3, $zero -/* 0ACEA4 7F07A4B4 AFAC0010 */ sw $t4, 0x10($sp) -/* 0ACEA8 7F07A4B8 0FC1493D */ jal something_with_generating_object -/* 0ACEAC 7F07A4BC AFAF0014 */ sw $t7, 0x14($sp) -.L7F07A4C0: -/* 0ACEB0 7F07A4C0 8FA40110 */ lw $a0, 0x110($sp) -/* 0ACEB4 7F07A4C4 0FC08E9D */ jal chrlvIdleAnimationRelated7F023A94 -/* 0ACEB8 7F07A4C8 24050000 */ li $a1, 0 -/* 0ACEBC 7F07A4CC 10000017 */ b .L7F07A52C -/* 0ACEC0 7F07A4D0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0ACEC4 7F07A4D4 8C59001C */ lw $t9, 0x1c($v0) -.L7F07A4D8: -/* 0ACEC8 7F07A4D8 00402025 */ move $a0, $v0 -/* 0ACECC 7F07A4DC 8F2B0020 */ lw $t3, 0x20($t9) -/* 0ACED0 7F07A4E0 55600012 */ bnezl $t3, .L7F07A52C -/* 0ACED4 7F07A4E4 8FBF001C */ lw $ra, 0x1c($sp) -/* 0ACED8 7F07A4E8 8C4D0014 */ lw $t5, 0x14($v0) -/* 0ACEDC 7F07A4EC 24050000 */ li $a1, 0 -/* 0ACEE0 7F07A4F0 35AE0001 */ ori $t6, $t5, 1 -/* 0ACEE4 7F07A4F4 0FC08E9D */ jal chrlvIdleAnimationRelated7F023A94 -/* 0ACEE8 7F07A4F8 AC4E0014 */ sw $t6, 0x14($v0) -/* 0ACEEC 7F07A4FC 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0ACEF0 7F07A500 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0ACEF4 7F07A504 8C6500A8 */ lw $a1, 0xa8($v1) -/* 0ACEF8 7F07A508 8C6400D4 */ lw $a0, 0xd4($v1) -/* 0ACEFC 7F07A50C 0FC1B480 */ jal setsuboffset -/* 0ACF00 7F07A510 24A50008 */ addiu $a1, $a1, 8 -/* 0ACF04 7F07A514 3C188007 */ lui $t8, %hi(g_CurrentPlayer) # $t8, 0x8007 -/* 0ACF08 7F07A518 8F188BC0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0ACF0C 7F07A51C 8FA50114 */ lw $a1, 0x114($sp) -/* 0ACF10 7F07A520 0FC1B49D */ jal setsubroty -/* 0ACF14 7F07A524 8F0400D4 */ lw $a0, 0xd4($t8) -/* 0ACF18 7F07A528 8FBF001C */ lw $ra, 0x1c($sp) -.L7F07A52C: -/* 0ACF1C 7F07A52C 27BD0118 */ addiu $sp, $sp, 0x118 -/* 0ACF20 7F07A530 03E00008 */ jr $ra -/* 0ACF24 7F07A534 00000000 */ nop -) -#endif - - -#endif /** * Address 0x7F07A4A0. */ -void maybe_solo_intro_camera_handler(void) +void bondviewRemovePlayerBody(void) { - if ((g_CurrentPlayer->prop->chr != 0) && (getPlayerCount() == 1)) + if ((g_CurrentPlayer->prop->chr) && (getPlayerCount() == 1)) { - disable_sounds_attached_to_player_then_something(g_CurrentPlayer->prop); + chrpropCleanupForRemoval(g_CurrentPlayer->prop); g_CurrentPlayer->prop->chr = NULL; - g_CurrentPlayer->ptr_char_objectinstance = 0; + g_CurrentPlayer->bodyModel = 0; g_bondviewForceDisarm = 1; - sub_GAME_7F07DE9C(g_CurrentPlayer); + bondviewUpdatePlayerRoom(g_CurrentPlayer); } } - - u32 bondviewGetCameraMode(void) { - // Node 0 return g_CameraMode; } +s32 pickDeathCameraAngles(PropRecord *prop1, coord3d *pos, PropRecord *prop2, coord3d *collision_pos, StandTile *tile, f32 camera_dist) +{ + s32 found; + s32 outertries; + f32 camclearance; + f32 spD0; + f32 angle; + StandTile *spC8; + coord3d spBC; + coord3d spB0; + f32 angleRange; + f32 frac; + f32 floorY; + s32 lineok; + s32 angletries; + dword_CODE_bss_800799F4 = prop1; + found = 0; + outertries = 0; + angleRange = M_TAU_F; + while ((outertries <= 0x80) && (!found)) + { + camclearance = g_CurrentPlayer->field_488.collision_radius; + spD0 = 1500.0f + camclearance; -#ifdef NONMATCHING -void pickDeathCameraAngles(void) { + angle = ((f32) randomGetNext()) * 2.3283064e-10f; + angle = angle * angleRange; + angletries = 0; + + while ((angletries < 0x10) && (!found)) + { + angleRange = M_TAU_F; + + angle += 0.39269909f; + + if (angleRange <= angle) + { + angle -= angleRange; + } + + spBC.x = sinf(angle); + spBC.y = 0.0f; + spBC.z = cosf(angle); + + spB0.x = (((f32 *) (&spBC))[0] * spD0) + pos->x; + spB0.y = pos->y; + spB0.z = (((f32 *) (&spBC))[2] * spD0) + pos->z; + + stanResetHits(); + + spC8 = tile; + + sub_GAME_7F03D058(prop2, 0); + + lineok = stanTestLineUnobstructed(&spC8, collision_pos->x, collision_pos->z, spB0.x, spB0.z, 0x13, 0.0f, 1.0f, 0.0f, 1.0f); + + sub_GAME_7F03D058(prop2, 1); + + if (!lineok) + { + chrlvStanPointPointIntersection(collision_pos, &spBC, &spB0); + + { + f32 dx = spB0.x - collision_pos->x; + f32 dz = spB0.z - collision_pos->z; + + spD0 = sqrtf((dx * dx) + (dz * dz)); + } + } + + spD0 -= camclearance; + + if (camera_dist <= spD0) + { + frac = 1.0f; + + while ((0.0f < frac) && (!found)) + { + f32 sp90; + f32 candidateDist; + + sp90 = spD0 - camera_dist; + + candidateDist = ((f32) randomGetNext()) * 2.3283064e-10f; + candidateDist *= sp90; + candidateDist *= frac; + candidateDist += camera_dist; + + flt_CODE_bss_800799E8.x = (spBC.x * candidateDist) + pos->x; + flt_CODE_bss_800799E8.y = pos->y; + flt_CODE_bss_800799E8.z = (spBC.z * candidateDist) + pos->z; + + spC8 = tile; + + sub_GAME_7F03D058(prop2, 0); + + lineok = stanTestLineUnobstructed(&spC8, collision_pos->x, collision_pos->z, flt_CODE_bss_800799E8.x, flt_CODE_bss_800799E8.z, 0x13, 0.0f, 1.0f, 0.0f, 1.0f); + + sub_GAME_7F03D058(prop2, 1); + + if (lineok) + { + lineok = stanTestVolume(&spC8, flt_CODE_bss_800799E8.x, flt_CODE_bss_800799E8.z, camclearance, 0x1f, 0.0f, 1.0f); + + if (lineok < 0) + { + floorY = stanGetPositionYValue(spC8, flt_CODE_bss_800799E8.x, flt_CODE_bss_800799E8.z); + + flt_CODE_bss_800799E8.y = (floorY + camclearance) + ((((f32) randomGetNext()) * 2.3283064e-10f) * (185.0f - camclearance)); + + candidateDist = flt_CODE_bss_800799E8.y - pos->y; + + if (((-1000.0f) < candidateDist) && (candidateDist < 1000.0f)) + { + found = 1; + } + } + } + + frac -= 0.25f; + + if (pos); + } + } + + angletries++; + } + + angleRange = M_TAU_F; + + outertries++; + } + + return found; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80055030 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80055034 -.word 0x44bb8000 /*1500.0*/ -glabel D_80055038 -.word 0x40c90fdb /*6.2831855*/ -glabel D_8005503C -.word 0x3ec90fdb /*0.39269909*/ -glabel D_80055040 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel pickDeathCameraAngles -/* 0AF064 7F07A534 27BDFF20 */ addiu $sp, $sp, -0xe0 -/* 0AF068 7F07A538 3C018008 */ lui $at, %hi(dword_CODE_bss_800799F4) -/* 0AF06C 7F07A53C AC2499F4 */ sw $a0, %lo(dword_CODE_bss_800799F4)($at) -/* 0AF070 7F07A540 F7BE0058 */ sdc1 $f30, 0x58($sp) -/* 0AF074 7F07A544 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0AF078 7F07A548 AFB10064 */ sw $s1, 0x64($sp) -/* 0AF07C 7F07A54C F7BA0048 */ sdc1 $f26, 0x48($sp) -/* 0AF080 7F07A550 4481F000 */ mtc1 $at, $f30 -/* 0AF084 7F07A554 AFB7007C */ sw $s7, 0x7c($sp) -/* 0AF088 7F07A558 AFB60078 */ sw $s6, 0x78($sp) -/* 0AF08C 7F07A55C AFB50074 */ sw $s5, 0x74($sp) -/* 0AF090 7F07A560 AFB40070 */ sw $s4, 0x70($sp) -/* 0AF094 7F07A564 AFB3006C */ sw $s3, 0x6c($sp) -/* 0AF098 7F07A568 AFB20068 */ sw $s2, 0x68($sp) -/* 0AF09C 7F07A56C F7B40030 */ sdc1 $f20, 0x30($sp) -/* 0AF0A0 7F07A570 3C018005 */ lui $at, %hi(D_80055030) -/* 0AF0A4 7F07A574 3C118008 */ lui $s1, %hi(flt_CODE_bss_800799E8) -/* 0AF0A8 7F07A578 4480D000 */ mtc1 $zero, $f26 -/* 0AF0AC 7F07A57C 00A09025 */ move $s2, $a1 -/* 0AF0B0 7F07A580 00E09825 */ move $s3, $a3 -/* 0AF0B4 7F07A584 00C0A025 */ move $s4, $a2 -/* 0AF0B8 7F07A588 AFBF0084 */ sw $ra, 0x84($sp) -/* 0AF0BC 7F07A58C AFBE0080 */ sw $fp, 0x80($sp) -/* 0AF0C0 7F07A590 AFB00060 */ sw $s0, 0x60($sp) -/* 0AF0C4 7F07A594 F7BC0050 */ sdc1 $f28, 0x50($sp) -/* 0AF0C8 7F07A598 F7B80040 */ sdc1 $f24, 0x40($sp) -/* 0AF0CC 7F07A59C F7B60038 */ sdc1 $f22, 0x38($sp) -/* 0AF0D0 7F07A5A0 0000B025 */ move $s6, $zero -/* 0AF0D4 7F07A5A4 AFA000D8 */ sw $zero, 0xd8($sp) -/* 0AF0D8 7F07A5A8 263199E8 */ addiu $s1, %lo(flt_CODE_bss_800799E8) # addiu $s1, $s1, -0x6618 -/* 0AF0DC 7F07A5AC C4345030 */ lwc1 $f20, %lo(D_80055030)($at) -/* 0AF0E0 7F07A5B0 27B500C8 */ addiu $s5, $sp, 0xc8 -/* 0AF0E4 7F07A5B4 8FB700F0 */ lw $s7, 0xf0($sp) -.L7F07A5B8: -/* 0AF0E8 7F07A5B8 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 0AF0EC 7F07A5BC 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0AF0F0 7F07A5C0 3C018005 */ lui $at, %hi(D_80055034) -/* 0AF0F4 7F07A5C4 C4245034 */ lwc1 $f4, %lo(D_80055034)($at) -/* 0AF0F8 7F07A5C8 C5DC04B0 */ lwc1 $f28, 0x4b0($t6) -/* 0AF0FC 7F07A5CC 0000F025 */ move $fp, $zero -/* 0AF100 7F07A5D0 461C2180 */ add.s $f6, $f4, $f28 -/* 0AF104 7F07A5D4 0C002914 */ jal randomGetNext -/* 0AF108 7F07A5D8 E7A600D0 */ swc1 $f6, 0xd0($sp) -/* 0AF10C 7F07A5DC 44824000 */ mtc1 $v0, $f8 -/* 0AF110 7F07A5E0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0AF114 7F07A5E4 04410004 */ bgez $v0, .L7F07A5F8 -/* 0AF118 7F07A5E8 468042A0 */ cvt.s.w $f10, $f8 -/* 0AF11C 7F07A5EC 44818000 */ mtc1 $at, $f16 -/* 0AF120 7F07A5F0 00000000 */ nop -/* 0AF124 7F07A5F4 46105280 */ add.s $f10, $f10, $f16 -.L7F07A5F8: -/* 0AF128 7F07A5F8 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0AF12C 7F07A5FC 44819000 */ mtc1 $at, $f18 -/* 0AF130 7F07A600 00000000 */ nop -/* 0AF134 7F07A604 46125102 */ mul.s $f4, $f10, $f18 -/* 0AF138 7F07A608 00000000 */ nop -/* 0AF13C 7F07A60C 46142302 */ mul.s $f12, $f4, $f20 -/* 0AF140 7F07A610 16C000CD */ bnez $s6, .L7F07A948 -/* 0AF144 7F07A614 00000000 */ nop -/* 0AF148 7F07A618 E7AC00CC */ swc1 $f12, 0xcc($sp) -.L7F07A61C: -/* 0AF14C 7F07A61C 3C018005 */ lui $at, %hi(D_80055038) -/* 0AF150 7F07A620 C4345038 */ lwc1 $f20, %lo(D_80055038)($at) -/* 0AF154 7F07A624 3C018005 */ lui $at, %hi(D_8005503C) -/* 0AF158 7F07A628 C7AC00CC */ lwc1 $f12, 0xcc($sp) -/* 0AF15C 7F07A62C C426503C */ lwc1 $f6, %lo(D_8005503C)($at) -/* 0AF160 7F07A630 46066300 */ add.s $f12, $f12, $f6 -/* 0AF164 7F07A634 460CA03E */ c.le.s $f20, $f12 -/* 0AF168 7F07A638 00000000 */ nop -/* 0AF16C 7F07A63C 45000002 */ bc1f .L7F07A648 -/* 0AF170 7F07A640 00000000 */ nop -/* 0AF174 7F07A644 46146301 */ sub.s $f12, $f12, $f20 -.L7F07A648: -/* 0AF178 7F07A648 0FC15FAB */ jal sinf -/* 0AF17C 7F07A64C E7AC00CC */ swc1 $f12, 0xcc($sp) -/* 0AF180 7F07A650 E7A000BC */ swc1 $f0, 0xbc($sp) -/* 0AF184 7F07A654 E7BA00C0 */ swc1 $f26, 0xc0($sp) -/* 0AF188 7F07A658 0FC15FA8 */ jal cosf -/* 0AF18C 7F07A65C C7AC00CC */ lwc1 $f12, 0xcc($sp) -/* 0AF190 7F07A660 C7A800BC */ lwc1 $f8, 0xbc($sp) -/* 0AF194 7F07A664 C7B000D0 */ lwc1 $f16, 0xd0($sp) -/* 0AF198 7F07A668 E7A000C4 */ swc1 $f0, 0xc4($sp) -/* 0AF19C 7F07A66C C6520000 */ lwc1 $f18, ($s2) -/* 0AF1A0 7F07A670 46104282 */ mul.s $f10, $f8, $f16 -/* 0AF1A4 7F07A674 C7A800C4 */ lwc1 $f8, 0xc4($sp) -/* 0AF1A8 7F07A678 46125100 */ add.s $f4, $f10, $f18 -/* 0AF1AC 7F07A67C 46104282 */ mul.s $f10, $f8, $f16 -/* 0AF1B0 7F07A680 E7A400B0 */ swc1 $f4, 0xb0($sp) -/* 0AF1B4 7F07A684 C6460004 */ lwc1 $f6, 4($s2) -/* 0AF1B8 7F07A688 E7A600B4 */ swc1 $f6, 0xb4($sp) -/* 0AF1BC 7F07A68C C6520008 */ lwc1 $f18, 8($s2) -/* 0AF1C0 7F07A690 46125100 */ add.s $f4, $f10, $f18 -/* 0AF1C4 7F07A694 0FC2C731 */ jal sub_GAME_7F0B1CC4 -/* 0AF1C8 7F07A698 E7A400B8 */ swc1 $f4, 0xb8($sp) -/* 0AF1CC 7F07A69C AFB700C8 */ sw $s7, 0xc8($sp) -/* 0AF1D0 7F07A6A0 02802025 */ move $a0, $s4 -/* 0AF1D4 7F07A6A4 0FC0F416 */ jal sub_GAME_7F03D058 -/* 0AF1D8 7F07A6A8 00002825 */ move $a1, $zero -/* 0AF1DC 7F07A6AC 8E650000 */ lw $a1, ($s3) -/* 0AF1E0 7F07A6B0 8E660008 */ lw $a2, 8($s3) -/* 0AF1E4 7F07A6B4 C7A600B8 */ lwc1 $f6, 0xb8($sp) -/* 0AF1E8 7F07A6B8 240F0013 */ li $t7, 19 -/* 0AF1EC 7F07A6BC AFAF0014 */ sw $t7, 0x14($sp) -/* 0AF1F0 7F07A6C0 E7BE0024 */ swc1 $f30, 0x24($sp) -/* 0AF1F4 7F07A6C4 E7BA0020 */ swc1 $f26, 0x20($sp) -/* 0AF1F8 7F07A6C8 E7BE001C */ swc1 $f30, 0x1c($sp) -/* 0AF1FC 7F07A6CC E7BA0018 */ swc1 $f26, 0x18($sp) -/* 0AF200 7F07A6D0 02A02025 */ move $a0, $s5 -/* 0AF204 7F07A6D4 8FA700B0 */ lw $a3, 0xb0($sp) -/* 0AF208 7F07A6D8 0FC2C389 */ jal stanTestLineUnobstructed -/* 0AF20C 7F07A6DC E7A60010 */ swc1 $f6, 0x10($sp) -/* 0AF210 7F07A6E0 00408025 */ move $s0, $v0 -/* 0AF214 7F07A6E4 02802025 */ move $a0, $s4 -/* 0AF218 7F07A6E8 0FC0F416 */ jal sub_GAME_7F03D058 -/* 0AF21C 7F07A6EC 24050001 */ li $a1, 1 -/* 0AF220 7F07A6F0 16000010 */ bnez $s0, .L7F07A734 -/* 0AF224 7F07A6F4 02602025 */ move $a0, $s3 -/* 0AF228 7F07A6F8 27A500BC */ addiu $a1, $sp, 0xbc -/* 0AF22C 7F07A6FC 0FC098A6 */ jal chrlvStanPointPointIntersection -/* 0AF230 7F07A700 27A600B0 */ addiu $a2, $sp, 0xb0 -/* 0AF234 7F07A704 C7A800B0 */ lwc1 $f8, 0xb0($sp) -/* 0AF238 7F07A708 C6700000 */ lwc1 $f16, ($s3) -/* 0AF23C 7F07A70C C7AA00B8 */ lwc1 $f10, 0xb8($sp) -/* 0AF240 7F07A710 C6720008 */ lwc1 $f18, 8($s3) -/* 0AF244 7F07A714 46104001 */ sub.s $f0, $f8, $f16 -/* 0AF248 7F07A718 46125081 */ sub.s $f2, $f10, $f18 -/* 0AF24C 7F07A71C 46000102 */ mul.s $f4, $f0, $f0 -/* 0AF250 7F07A720 00000000 */ nop -/* 0AF254 7F07A724 46021182 */ mul.s $f6, $f2, $f2 -/* 0AF258 7F07A728 0C007DF8 */ jal sqrtf -/* 0AF25C 7F07A72C 46062300 */ add.s $f12, $f4, $f6 -/* 0AF260 7F07A730 E7A000D0 */ swc1 $f0, 0xd0($sp) -.L7F07A734: -/* 0AF264 7F07A734 C7A800D0 */ lwc1 $f8, 0xd0($sp) -/* 0AF268 7F07A738 C7AA00F4 */ lwc1 $f10, 0xf4($sp) -/* 0AF26C 7F07A73C 461C4401 */ sub.s $f16, $f8, $f28 -/* 0AF270 7F07A740 4610503E */ c.le.s $f10, $f16 -/* 0AF274 7F07A744 E7B000D0 */ swc1 $f16, 0xd0($sp) -/* 0AF278 7F07A748 4502007A */ bc1fl .L7F07A934 -/* 0AF27C 7F07A74C 27DE0001 */ addiu $fp, $fp, 1 -/* 0AF280 7F07A750 461ED03C */ c.lt.s $f26, $f30 -/* 0AF284 7F07A754 4600F606 */ mov.s $f24, $f30 -/* 0AF288 7F07A758 45020076 */ bc1fl .L7F07A934 -/* 0AF28C 7F07A75C 27DE0001 */ addiu $fp, $fp, 1 -/* 0AF290 7F07A760 56C00074 */ bnezl $s6, .L7F07A934 -/* 0AF294 7F07A764 27DE0001 */ addiu $fp, $fp, 1 -/* 0AF298 7F07A768 460A8481 */ sub.s $f18, $f16, $f10 -/* 0AF29C 7F07A76C E7B20090 */ swc1 $f18, 0x90($sp) -.L7F07A770: -/* 0AF2A0 7F07A770 0C002914 */ jal randomGetNext -/* 0AF2A4 7F07A774 00000000 */ nop -/* 0AF2A8 7F07A778 44822000 */ mtc1 $v0, $f4 -/* 0AF2AC 7F07A77C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0AF2B0 7F07A780 04410004 */ bgez $v0, .L7F07A794 -/* 0AF2B4 7F07A784 468021A0 */ cvt.s.w $f6, $f4 -/* 0AF2B8 7F07A788 44814000 */ mtc1 $at, $f8 -/* 0AF2BC 7F07A78C 00000000 */ nop -/* 0AF2C0 7F07A790 46083180 */ add.s $f6, $f6, $f8 -.L7F07A794: -/* 0AF2C4 7F07A794 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0AF2C8 7F07A798 44818000 */ mtc1 $at, $f16 -/* 0AF2CC 7F07A79C C7B20090 */ lwc1 $f18, 0x90($sp) -/* 0AF2D0 7F07A7A0 02802025 */ move $a0, $s4 -/* 0AF2D4 7F07A7A4 46103282 */ mul.s $f10, $f6, $f16 -/* 0AF2D8 7F07A7A8 C7A600F4 */ lwc1 $f6, 0xf4($sp) -/* 0AF2DC 7F07A7AC C7B000BC */ lwc1 $f16, 0xbc($sp) -/* 0AF2E0 7F07A7B0 00002825 */ move $a1, $zero -/* 0AF2E4 7F07A7B4 46125102 */ mul.s $f4, $f10, $f18 -/* 0AF2E8 7F07A7B8 C6520000 */ lwc1 $f18, ($s2) -/* 0AF2EC 7F07A7BC 46182202 */ mul.s $f8, $f4, $f24 -/* 0AF2F0 7F07A7C0 46064000 */ add.s $f0, $f8, $f6 -/* 0AF2F4 7F07A7C4 C7A600C4 */ lwc1 $f6, 0xc4($sp) -/* 0AF2F8 7F07A7C8 46008282 */ mul.s $f10, $f16, $f0 -/* 0AF2FC 7F07A7CC 46125100 */ add.s $f4, $f10, $f18 -/* 0AF300 7F07A7D0 46003402 */ mul.s $f16, $f6, $f0 -/* 0AF304 7F07A7D4 E6240000 */ swc1 $f4, ($s1) -/* 0AF308 7F07A7D8 C6480004 */ lwc1 $f8, 4($s2) -/* 0AF30C 7F07A7DC E6280004 */ swc1 $f8, 4($s1) -/* 0AF310 7F07A7E0 C64A0008 */ lwc1 $f10, 8($s2) -/* 0AF314 7F07A7E4 AFB700C8 */ sw $s7, 0xc8($sp) -/* 0AF318 7F07A7E8 460A8480 */ add.s $f18, $f16, $f10 -/* 0AF31C 7F07A7EC 0FC0F416 */ jal sub_GAME_7F03D058 -/* 0AF320 7F07A7F0 E6320008 */ swc1 $f18, 8($s1) -/* 0AF324 7F07A7F4 8E650000 */ lw $a1, ($s3) -/* 0AF328 7F07A7F8 8E660008 */ lw $a2, 8($s3) -/* 0AF32C 7F07A7FC C6240008 */ lwc1 $f4, 8($s1) -/* 0AF330 7F07A800 24180013 */ li $t8, 19 -/* 0AF334 7F07A804 AFB80014 */ sw $t8, 0x14($sp) -/* 0AF338 7F07A808 E7BE0024 */ swc1 $f30, 0x24($sp) -/* 0AF33C 7F07A80C E7BA0020 */ swc1 $f26, 0x20($sp) -/* 0AF340 7F07A810 E7BE001C */ swc1 $f30, 0x1c($sp) -/* 0AF344 7F07A814 E7BA0018 */ swc1 $f26, 0x18($sp) -/* 0AF348 7F07A818 02A02025 */ move $a0, $s5 -/* 0AF34C 7F07A81C 8E270000 */ lw $a3, ($s1) -/* 0AF350 7F07A820 0FC2C389 */ jal stanTestLineUnobstructed -/* 0AF354 7F07A824 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0AF358 7F07A828 00408025 */ move $s0, $v0 -/* 0AF35C 7F07A82C 02802025 */ move $a0, $s4 -/* 0AF360 7F07A830 0FC0F416 */ jal sub_GAME_7F03D058 -/* 0AF364 7F07A834 24050001 */ li $a1, 1 -/* 0AF368 7F07A838 12000033 */ beqz $s0, .L7F07A908 -/* 0AF36C 7F07A83C 02A02025 */ move $a0, $s5 -/* 0AF370 7F07A840 4407E000 */ mfc1 $a3, $f28 -/* 0AF374 7F07A844 2419001F */ li $t9, 31 -/* 0AF378 7F07A848 AFB90010 */ sw $t9, 0x10($sp) -/* 0AF37C 7F07A84C 8E250000 */ lw $a1, ($s1) -/* 0AF380 7F07A850 8E260008 */ lw $a2, 8($s1) -/* 0AF384 7F07A854 E7BA0014 */ swc1 $f26, 0x14($sp) -/* 0AF388 7F07A858 0FC2C62E */ jal stanTestVolume -/* 0AF38C 7F07A85C E7BE0018 */ swc1 $f30, 0x18($sp) -/* 0AF390 7F07A860 04410029 */ bgez $v0, .L7F07A908 -/* 0AF394 7F07A864 8FA400C8 */ lw $a0, 0xc8($sp) -/* 0AF398 7F07A868 3C014339 */ li $at, 0x43390000 # 185.000000 -/* 0AF39C 7F07A86C 44814000 */ mtc1 $at, $f8 -/* 0AF3A0 7F07A870 8E250000 */ lw $a1, ($s1) -/* 0AF3A4 7F07A874 8E260008 */ lw $a2, 8($s1) -/* 0AF3A8 7F07A878 0FC2CA5C */ jal stanGetPositionYValue -/* 0AF3AC 7F07A87C 461C4581 */ sub.s $f22, $f8, $f28 -/* 0AF3B0 7F07A880 0C002914 */ jal randomGetNext -/* 0AF3B4 7F07A884 46000506 */ mov.s $f20, $f0 -/* 0AF3B8 7F07A888 44823000 */ mtc1 $v0, $f6 -/* 0AF3BC 7F07A88C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0AF3C0 7F07A890 04410004 */ bgez $v0, .L7F07A8A4 -/* 0AF3C4 7F07A894 46803420 */ cvt.s.w $f16, $f6 -/* 0AF3C8 7F07A898 44815000 */ mtc1 $at, $f10 -/* 0AF3CC 7F07A89C 00000000 */ nop -/* 0AF3D0 7F07A8A0 460A8400 */ add.s $f16, $f16, $f10 -.L7F07A8A4: -/* 0AF3D4 7F07A8A4 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0AF3D8 7F07A8A8 44819000 */ mtc1 $at, $f18 -/* 0AF3DC 7F07A8AC 461CA180 */ add.s $f6, $f20, $f28 -/* 0AF3E0 7F07A8B0 3C01C47A */ li $at, 0xC47A0000 # -1000.000000 -/* 0AF3E4 7F07A8B4 46128102 */ mul.s $f4, $f16, $f18 -/* 0AF3E8 7F07A8B8 00000000 */ nop -/* 0AF3EC 7F07A8BC 46162202 */ mul.s $f8, $f4, $f22 -/* 0AF3F0 7F07A8C0 44812000 */ mtc1 $at, $f4 -/* 0AF3F4 7F07A8C4 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0AF3F8 7F07A8C8 46064280 */ add.s $f10, $f8, $f6 -/* 0AF3FC 7F07A8CC E62A0004 */ swc1 $f10, 4($s1) -/* 0AF400 7F07A8D0 C6520004 */ lwc1 $f18, 4($s2) -/* 0AF404 7F07A8D4 C6300004 */ lwc1 $f16, 4($s1) -/* 0AF408 7F07A8D8 46128001 */ sub.s $f0, $f16, $f18 -/* 0AF40C 7F07A8DC 4600203C */ c.lt.s $f4, $f0 -/* 0AF410 7F07A8E0 00000000 */ nop -/* 0AF414 7F07A8E4 45000008 */ bc1f .L7F07A908 -/* 0AF418 7F07A8E8 00000000 */ nop -/* 0AF41C 7F07A8EC 44814000 */ mtc1 $at, $f8 -/* 0AF420 7F07A8F0 00000000 */ nop -/* 0AF424 7F07A8F4 4608003C */ c.lt.s $f0, $f8 -/* 0AF428 7F07A8F8 00000000 */ nop -/* 0AF42C 7F07A8FC 45020003 */ bc1fl .L7F07A90C -/* 0AF430 7F07A900 3C013E80 */ lui $at, 0x3e80 -/* 0AF434 7F07A904 24160001 */ li $s6, 1 -.L7F07A908: -/* 0AF438 7F07A908 3C013E80 */ li $at, 0x3E800000 # 0.250000 -.L7F07A90C: -/* 0AF43C 7F07A90C 44813000 */ mtc1 $at, $f6 -/* 0AF440 7F07A910 00000000 */ nop -/* 0AF444 7F07A914 4606C601 */ sub.s $f24, $f24, $f6 -/* 0AF448 7F07A918 4618D03C */ c.lt.s $f26, $f24 -/* 0AF44C 7F07A91C 00000000 */ nop -/* 0AF450 7F07A920 45020004 */ bc1fl .L7F07A934 -/* 0AF454 7F07A924 27DE0001 */ addiu $fp, $fp, 1 -/* 0AF458 7F07A928 12C0FF91 */ beqz $s6, .L7F07A770 -/* 0AF45C 7F07A92C 00000000 */ nop -/* 0AF460 7F07A930 27DE0001 */ addiu $fp, $fp, 1 -.L7F07A934: -/* 0AF464 7F07A934 2BC10010 */ slti $at, $fp, 0x10 -/* 0AF468 7F07A938 50200004 */ beql $at, $zero, .L7F07A94C -/* 0AF46C 7F07A93C 8FA200D8 */ lw $v0, 0xd8($sp) -/* 0AF470 7F07A940 12C0FF36 */ beqz $s6, .L7F07A61C -/* 0AF474 7F07A944 00000000 */ nop -.L7F07A948: -/* 0AF478 7F07A948 8FA200D8 */ lw $v0, 0xd8($sp) -.L7F07A94C: -/* 0AF47C 7F07A94C 3C018005 */ lui $at, %hi(D_80055040) -/* 0AF480 7F07A950 C4345040 */ lwc1 $f20, %lo(D_80055040)($at) -/* 0AF484 7F07A954 24420001 */ addiu $v0, $v0, 1 -/* 0AF488 7F07A958 28410081 */ slti $at, $v0, 0x81 -/* 0AF48C 7F07A95C 50200004 */ beql $at, $zero, .L7F07A970 -/* 0AF490 7F07A960 8FBF0084 */ lw $ra, 0x84($sp) -/* 0AF494 7F07A964 12C0FF14 */ beqz $s6, .L7F07A5B8 -/* 0AF498 7F07A968 AFA200D8 */ sw $v0, 0xd8($sp) -/* 0AF49C 7F07A96C 8FBF0084 */ lw $ra, 0x84($sp) -.L7F07A970: -/* 0AF4A0 7F07A970 02C01025 */ move $v0, $s6 -/* 0AF4A4 7F07A974 8FB60078 */ lw $s6, 0x78($sp) -/* 0AF4A8 7F07A978 D7B40030 */ ldc1 $f20, 0x30($sp) -/* 0AF4AC 7F07A97C D7B60038 */ ldc1 $f22, 0x38($sp) -/* 0AF4B0 7F07A980 D7B80040 */ ldc1 $f24, 0x40($sp) -/* 0AF4B4 7F07A984 D7BA0048 */ ldc1 $f26, 0x48($sp) -/* 0AF4B8 7F07A988 D7BC0050 */ ldc1 $f28, 0x50($sp) -/* 0AF4BC 7F07A98C D7BE0058 */ ldc1 $f30, 0x58($sp) -/* 0AF4C0 7F07A990 8FB00060 */ lw $s0, 0x60($sp) -/* 0AF4C4 7F07A994 8FB10064 */ lw $s1, 0x64($sp) -/* 0AF4C8 7F07A998 8FB20068 */ lw $s2, 0x68($sp) -/* 0AF4CC 7F07A99C 8FB3006C */ lw $s3, 0x6c($sp) -/* 0AF4D0 7F07A9A0 8FB40070 */ lw $s4, 0x70($sp) -/* 0AF4D4 7F07A9A4 8FB50074 */ lw $s5, 0x74($sp) -/* 0AF4D8 7F07A9A8 8FB7007C */ lw $s7, 0x7c($sp) -/* 0AF4DC 7F07A9AC 8FBE0080 */ lw $fp, 0x80($sp) -/* 0AF4E0 7F07A9B0 03E00008 */ jr $ra -/* 0AF4E4 7F07A9B4 27BD00E0 */ addiu $sp, $sp, 0xe0 -) -#endif - - // Address 0x7F07A9B8 NTSC. @@ -4170,7 +2278,7 @@ void bondviewSetCameraMode(s32 arg0) currentPlayerSetFadeColour(0, 0, 0, 1.0f); currentPlayerSetFadeFrac(60.0f, 0.0f); fogLoadLevelEnvironment(bossGetStageNum(), 1); - g_CurrentPlayer->room_pointer = NULL; + g_CurrentPlayer->cameratile = NULL; } else { @@ -4217,7 +2325,7 @@ void bondviewSetCameraMode(s32 arg0) ftemp_3 = stage_intro_anim_table[g_IntroAnimationIndex].anonymous_3; modelSetAnimation( - g_CurrentPlayer->ptr_char_objectinstance, + g_CurrentPlayer->bodyModel, sp38, 0, ftemp_1, @@ -4226,13 +2334,13 @@ void bondviewSetCameraMode(s32 arg0) if (sp78 > 0.0f) { - modelSetAnimEndFrame(g_CurrentPlayer->ptr_char_objectinstance, sp78); + modelSetAnimEndFrame(g_CurrentPlayer->bodyModel, sp78); } temp_v1 = g_CurrentPlayer->prop->chr; temp_v1->actiontype = ACT_BONDINTRO; temp_v1->sleep = 0; - g_CurrentPlayer->room_pointer = NULL; + g_CurrentPlayer->cameratile = NULL; } else { @@ -4287,7 +2395,7 @@ void bondviewSetCameraMode(s32 arg0) else { // This branch restarts Bond's death animation for his death replay - in_tank_flag = 0; + g_PlayerIsInTank = 0; // struct copy g_CurrentPlayer->field_488 = g_CurrentPlayer->previous_collision_info; @@ -4306,7 +2414,7 @@ void bondviewSetCameraMode(s32 arg0) solo_char_load(); modelSetAnimation( - g_CurrentPlayer->ptr_char_objectinstance, + g_CurrentPlayer->bodyModel, objecthandlerGetModelAnim((Model *) &g_CurrentPlayer->model), objecthandlerGetModelGunhand(&g_CurrentPlayer->model), 0.0f, @@ -4318,9 +2426,9 @@ void bondviewSetCameraMode(s32 arg0) temp_v1_2->sleep = 0; temp_v1_2->chrflags |= CHRFLAG_INIT; - setsuboffset(g_CurrentPlayer->ptr_char_objectinstance, &g_CurrentPlayer->prop->pos); - var_f0 = get_curplay_horizontal_rotation_in_degrees(); - setsubroty(g_CurrentPlayer->ptr_char_objectinstance, var_f0); + setsuboffset(g_CurrentPlayer->bodyModel, &g_CurrentPlayer->prop->pos); + var_f0 = bondviewGetPlayerYawRadians(); + setsubroty(g_CurrentPlayer->bodyModel, var_f0); } if (g_ExplodeTankOnDeathFlag && (g_PlayerTankProp != NULL)) @@ -4382,11 +2490,11 @@ void bondviewSetCameraMode(s32 arg0) else if (g_CameraMode == CAMERAMODE_POSEND) { solo_char_load(); - g_CurrentPlayer->room_pointer = NULL; + g_CurrentPlayer->cameratile = NULL; } else if (g_CameraMode == CAMERAMODE_FP_NOINPUT) { - maybe_solo_intro_camera_handler(); + bondviewRemovePlayerBody(); g_CameraMode = CAMERAMODE_FP; } else if (g_CameraMode == CAMERAMODE_FADE_TO_TITLE) @@ -4405,436 +2513,175 @@ void bondviewSetCameraMode(s32 arg0) } - -#ifdef NONMATCHING -void sub_GAME_7F07B1A4(void) { - int iVar1; - - iVar1 = cameramode; - cameramode = 0; - enable_move_after_cinema = 0; - if (iVar1 == 1) - { - Function_822B5150(2); - } - else if (iVar1 == 2) - { - Function_822CFF00(); - Function_822B5150(3); - } - else if (iVar1 != 9) - { - if (iVar1 == 3) - { - maybe_solo_intro_camera_handler(); - set_curplayer_fade(0.0, 1.0); - Function_822B5150(4); - } - else if (iVar1 != 4) - { - if (iVar1 == 5) - { - Function_822B5150(6); - } - else if ((iVar1 == 6) && (camera_mode = camera_mode + 1, camera_mode < 3)) - { - Function_822B5150(5); - } - } - } - return; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F07B1A4 -/* 0AFCD4 7F07B1A4 3C038003 */ lui $v1, %hi(g_CameraMode) -/* 0AFCD8 7F07B1A8 24636494 */ addiu $v1, %lo(g_CameraMode) # addiu $v1, $v1, 0x6494 -/* 0AFCDC 7F07B1AC 8C620000 */ lw $v0, ($v1) -/* 0AFCE0 7F07B1B0 AC600000 */ sw $zero, ($v1) -/* 0AFCE4 7F07B1B4 3C018003 */ lui $at, %hi(g_CameraAfterCinema) -/* 0AFCE8 7F07B1B8 AC206498 */ sw $zero, %lo(g_CameraAfterCinema)($at) -/* 0AFCEC 7F07B1BC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0AFCF0 7F07B1C0 24010001 */ li $at, 1 -/* 0AFCF4 7F07B1C4 14410005 */ bne $v0, $at, .L7F07B1DC -/* 0AFCF8 7F07B1C8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0AFCFC 7F07B1CC 0FC1EA6E */ jal bondviewSetCameraMode -/* 0AFD00 7F07B1D0 24040002 */ li $a0, 2 -/* 0AFD04 7F07B1D4 1000002F */ b .L7F07B294 -/* 0AFD08 7F07B1D8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F07B1DC: -/* 0AFD0C 7F07B1DC 24010002 */ li $at, 2 -/* 0AFD10 7F07B1E0 54410008 */ bnel $v0, $at, .L7F07B204 -/* 0AFD14 7F07B1E4 24010009 */ li $at, 9 -/* 0AFD18 7F07B1E8 0FC228CC */ jal bondviewResetIntroCameraMessageDialogs -/* 0AFD1C 7F07B1EC 00000000 */ nop -/* 0AFD20 7F07B1F0 0FC1EA6E */ jal bondviewSetCameraMode -/* 0AFD24 7F07B1F4 24040003 */ li $a0, 3 -/* 0AFD28 7F07B1F8 10000026 */ b .L7F07B294 -/* 0AFD2C 7F07B1FC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0AFD30 7F07B200 24010009 */ li $at, 9 -.L7F07B204: -/* 0AFD34 7F07B204 10410022 */ beq $v0, $at, .L7F07B290 -/* 0AFD38 7F07B208 24010003 */ li $at, 3 -/* 0AFD3C 7F07B20C 5441000D */ bnel $v0, $at, .L7F07B244 -/* 0AFD40 7F07B210 24010004 */ li $at, 4 -/* 0AFD44 7F07B214 0FC1E928 */ jal maybe_solo_intro_camera_handler -/* 0AFD48 7F07B218 00000000 */ nop -/* 0AFD4C 7F07B21C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0AFD50 7F07B220 44817000 */ mtc1 $at, $f14 -/* 0AFD54 7F07B224 44806000 */ mtc1 $zero, $f12 -/* 0AFD58 7F07B228 0FC20284 */ jal currentPlayerStartChrFade -/* 0AFD5C 7F07B22C 00000000 */ nop -/* 0AFD60 7F07B230 0FC1EA6E */ jal bondviewSetCameraMode -/* 0AFD64 7F07B234 24040004 */ li $a0, 4 -/* 0AFD68 7F07B238 10000016 */ b .L7F07B294 -/* 0AFD6C 7F07B23C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0AFD70 7F07B240 24010004 */ li $at, 4 -.L7F07B244: -/* 0AFD74 7F07B244 10410012 */ beq $v0, $at, .L7F07B290 -/* 0AFD78 7F07B248 24010005 */ li $at, 5 -/* 0AFD7C 7F07B24C 54410006 */ bnel $v0, $at, .L7F07B268 -/* 0AFD80 7F07B250 24010006 */ li $at, 6 -/* 0AFD84 7F07B254 0FC1EA6E */ jal bondviewSetCameraMode -/* 0AFD88 7F07B258 24040006 */ li $a0, 6 -/* 0AFD8C 7F07B25C 1000000D */ b .L7F07B294 -/* 0AFD90 7F07B260 8FBF0014 */ lw $ra, 0x14($sp) -/* 0AFD94 7F07B264 24010006 */ li $at, 6 -.L7F07B268: -/* 0AFD98 7F07B268 14410009 */ bne $v0, $at, .L7F07B290 -/* 0AFD9C 7F07B26C 3C028003 */ lui $v0, %hi(camera_mode) -/* 0AFDA0 7F07B270 24426510 */ addiu $v0, %lo(camera_mode) # addiu $v0, $v0, 0x6510 -/* 0AFDA4 7F07B274 8C4E0000 */ lw $t6, ($v0) -/* 0AFDA8 7F07B278 25CF0001 */ addiu $t7, $t6, 1 -/* 0AFDAC 7F07B27C 29E10003 */ slti $at, $t7, 3 -/* 0AFDB0 7F07B280 10200003 */ beqz $at, .L7F07B290 -/* 0AFDB4 7F07B284 AC4F0000 */ sw $t7, ($v0) -/* 0AFDB8 7F07B288 0FC1EA6E */ jal bondviewSetCameraMode -/* 0AFDBC 7F07B28C 24040005 */ li $a0, 5 -.L7F07B290: -/* 0AFDC0 7F07B290 8FBF0014 */ lw $ra, 0x14($sp) -.L7F07B294: -/* 0AFDC4 7F07B294 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0AFDC8 7F07B298 03E00008 */ jr $ra -/* 0AFDCC 7F07B29C 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F07B2A0(void) +void bondviewAdvanceCameraMode(void) { - ? sp84; - ? sp78; - ? sp6C; - ? sp60; - f32 sp58; - ? sp54; - s32 sp40; - ? *var_a1; - f32 temp_f0; - f32 var_f0; - f32 var_f2; - s32 temp_t4; - s32 var_a2; - u32 temp_a0; - u32 temp_a3; - u32 var_v0; - void *temp_t3; - void *temp_t3_2; + enum CAMERAMODE mode = g_CameraMode; - temp_t4 = arg0 << 5; - temp_t3 = g_IntroSwirl + temp_t4; - var_f2 = 0.0f; - temp_f0 = temp_t3->unk18; - var_a1 = &sp54; - var_a2 = -1; - temp_a3 = (arg0 << 5) + g_IntroSwirl; - if (temp_f0 > 0.0f) + g_CameraMode = CAMERAMODE_NONE; + g_CameraAfterCinema = CAMERAMODE_NONE; + + if (mode == CAMERAMODE_INTRO) { - var_f2 = arg1 / temp_f0; + bondviewSetCameraMode(CAMERAMODE_FADESWIRL); } - do + else if (mode == CAMERAMODE_FADESWIRL) { - temp_a0 = (var_a2 << 5) + temp_a3; - var_v0 = temp_a3; - if (var_a2 < 0) + bondviewResetIntroCameraMessageDialogs(); + bondviewSetCameraMode(CAMERAMODE_SWIRL); + } + else if (mode != CAMERAMODE_MP) + { + if (mode == CAMERAMODE_SWIRL) { - if (temp_a0 < g_IntroSwirl) - { - var_v0 = g_IntroSwirl; - } - else - { - var_v0 = temp_a0; - } + bondviewRemovePlayerBody(); + currentPlayerStartChrFade(0.0f, 1.0f); // What's the point of this call? + bondviewSetCameraMode(CAMERAMODE_FP); } - else if (var_v0 < temp_a0) + else if (mode != CAMERAMODE_FP) { -loop_8: - if (!(var_v0->unk24 & 1)) + if (mode == CAMERAMODE_DEATH_CAM_SP) { - var_v0 += 0x20; - if (var_v0 < temp_a0) + bondviewSetCameraMode(CAMERAMODE_DEATH_CAM_MP); + } + else if (mode == CAMERAMODE_DEATH_CAM_MP) + { + camera_mode++; + + if (camera_mode < CAMERAMODE_SWIRL) { - goto loop_8; + bondviewSetCameraMode(CAMERAMODE_DEATH_CAM_SP); } } } - var_a2 += 1; - if (var_v0->unk4 & 2) - { - // pre-scaled offset eg 2812 = 646 RCP units - var_a1->unkC = (g_CurrentPlayer->field_488.theta_transform.f[1] * var_v0->unk8) + (var_v0->unk10 * g_CurrentPlayer->unk498); - var_a1->unk10 = var_v0->unkC; - var_a1->unk14 = (var_v0->unk10 * g_CurrentPlayer->unk4A0) - (g_CurrentPlayer->unk498 * var_v0->unk8); - } - else - { - var_a1->unkC = var_v0->unk8; - var_a1->unk10 = var_v0->unkC; - var_a1->unk14 = var_v0->unk10; - } - var_a1 += 0xC; - } while (var_a2 != 3); - sp58 = var_f2; - sp40 = temp_t4; - sub_GAME_7F05B024(arg1, &sp60, &sp6C, &sp78, &sp84, var_f2, temp_t3->unk14, arg2); - arg2->unk0 = arg2->unk0 + g_CurrentPlayer->unk3C4; - arg2->unk4 = arg2->unk4 + g_CurrentPlayer->unk3C8; - arg2->unk8 = arg2->unk8 + g_CurrentPlayer->unk3CC; - arg3->unk0 = g_CurrentPlayer->unk3C4; - arg3->unk4 = g_CurrentPlayer->unk3C8; - arg3->unk8 = g_CurrentPlayer->unk3CC; - temp_t3_2 = g_IntroSwirl + sp40; - if (!(temp_t3_2->unk4 & 4)) - { - if (!(temp_t3_2->unk24 & 4)) - { - var_f0 = 1.0f; - } - else - { - var_f0 = 1.0f - sp58; - } } - else if (temp_t3_2->unk24 & 4) - { - var_f0 = 0.0f; - } - else - { - var_f0 = sp58; - } - arg3->unk0 = arg3->unk0 + (g_CurrentPlayer->unk4C0 * 40.0f * var_f0); - arg3->unk4 = arg3->unk4 + (g_CurrentPlayer->unk4C4 * 40.0f * var_f0); - arg3->unk8 = arg3->unk8 + (g_CurrentPlayer->unk4C8 * 40.0f * var_f0); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F07B2A0 -/* 0AFDD0 7F07B2A0 3C088003 */ lui $t0, %hi(g_IntroSwirl) -/* 0AFDD4 7F07B2A4 8D0864AC */ lw $t0, %lo(g_IntroSwirl)($t0) -/* 0AFDD8 7F07B2A8 27BDFF70 */ addiu $sp, $sp, -0x90 -/* 0AFDDC 7F07B2AC 00046140 */ sll $t4, $a0, 5 -/* 0AFDE0 7F07B2B0 AFBF002C */ sw $ra, 0x2c($sp) -/* 0AFDE4 7F07B2B4 AFB00028 */ sw $s0, 0x28($sp) -/* 0AFDE8 7F07B2B8 AFA60098 */ sw $a2, 0x98($sp) -/* 0AFDEC 7F07B2BC 010C5821 */ addu $t3, $t0, $t4 -/* 0AFDF0 7F07B2C0 44801000 */ mtc1 $zero, $f2 -/* 0AFDF4 7F07B2C4 C5600018 */ lwc1 $f0, 0x18($t3) -/* 0AFDF8 7F07B2C8 00E08025 */ move $s0, $a3 -/* 0AFDFC 7F07B2CC 44856000 */ mtc1 $a1, $f12 -/* 0AFE00 7F07B2D0 4600103C */ c.lt.s $f2, $f0 -/* 0AFE04 7F07B2D4 00047140 */ sll $t6, $a0, 5 -/* 0AFE08 7F07B2D8 27A50054 */ addiu $a1, $sp, 0x54 -/* 0AFE0C 7F07B2DC 2406FFFF */ li $a2, -1 -/* 0AFE10 7F07B2E0 45000002 */ bc1f .L7F07B2EC -/* 0AFE14 7F07B2E4 01C83821 */ addu $a3, $t6, $t0 -/* 0AFE18 7F07B2E8 46006083 */ div.s $f2, $f12, $f0 -.L7F07B2EC: -/* 0AFE1C 7F07B2EC 3C098008 */ lui $t1, %hi(g_CurrentPlayer) -/* 0AFE20 7F07B2F0 2529A0B0 */ addiu $t1, %lo(g_CurrentPlayer) # addiu $t1, $t1, -0x5f50 -/* 0AFE24 7F07B2F4 240A0003 */ li $t2, 3 -.L7F07B2F8: -/* 0AFE28 7F07B2F8 00067940 */ sll $t7, $a2, 5 -/* 0AFE2C 7F07B2FC 01E72021 */ addu $a0, $t7, $a3 -/* 0AFE30 7F07B300 00E01025 */ move $v0, $a3 -/* 0AFE34 7F07B304 04C10008 */ bgez $a2, .L7F07B328 -/* 0AFE38 7F07B308 00801825 */ move $v1, $a0 -/* 0AFE3C 7F07B30C 0088082B */ sltu $at, $a0, $t0 -/* 0AFE40 7F07B310 10200003 */ beqz $at, .L7F07B320 -/* 0AFE44 7F07B314 00000000 */ nop -/* 0AFE48 7F07B318 1000000E */ b .L7F07B354 -/* 0AFE4C 7F07B31C 01001025 */ move $v0, $t0 -.L7F07B320: -/* 0AFE50 7F07B320 1000000C */ b .L7F07B354 -/* 0AFE54 7F07B324 00601025 */ move $v0, $v1 -.L7F07B328: -/* 0AFE58 7F07B328 0044082B */ sltu $at, $v0, $a0 -/* 0AFE5C 7F07B32C 5020000A */ beql $at, $zero, .L7F07B358 -/* 0AFE60 7F07B330 8C4D0004 */ lw $t5, 4($v0) -/* 0AFE64 7F07B334 8C580024 */ lw $t8, 0x24($v0) -.L7F07B338: -/* 0AFE68 7F07B338 33190001 */ andi $t9, $t8, 1 -/* 0AFE6C 7F07B33C 57200006 */ bnezl $t9, .L7F07B358 -/* 0AFE70 7F07B340 8C4D0004 */ lw $t5, 4($v0) -/* 0AFE74 7F07B344 24420020 */ addiu $v0, $v0, 0x20 -/* 0AFE78 7F07B348 0043082B */ sltu $at, $v0, $v1 -/* 0AFE7C 7F07B34C 5420FFFA */ bnezl $at, .L7F07B338 -/* 0AFE80 7F07B350 8C580024 */ lw $t8, 0x24($v0) -.L7F07B354: -/* 0AFE84 7F07B354 8C4D0004 */ lw $t5, 4($v0) -.L7F07B358: -/* 0AFE88 7F07B358 24C60001 */ addiu $a2, $a2, 1 -/* 0AFE8C 7F07B35C 31AE0002 */ andi $t6, $t5, 2 -/* 0AFE90 7F07B360 51C00018 */ beql $t6, $zero, .L7F07B3C4 -/* 0AFE94 7F07B364 C4500008 */ lwc1 $f16, 8($v0) -/* 0AFE98 7F07B368 8D230000 */ lw $v1, ($t1) -/* 0AFE9C 7F07B36C C4460008 */ lwc1 $f6, 8($v0) -/* 0AFEA0 7F07B370 C44A0010 */ lwc1 $f10, 0x10($v0) -/* 0AFEA4 7F07B374 C46404A0 */ lwc1 $f4, 0x4a0($v1) -/* 0AFEA8 7F07B378 C4700498 */ lwc1 $f16, 0x498($v1) -/* 0AFEAC 7F07B37C 46062202 */ mul.s $f8, $f4, $f6 -/* 0AFEB0 7F07B380 00000000 */ nop -/* 0AFEB4 7F07B384 46105482 */ mul.s $f18, $f10, $f16 -/* 0AFEB8 7F07B388 46124100 */ add.s $f4, $f8, $f18 -/* 0AFEBC 7F07B38C E4A4000C */ swc1 $f4, 0xc($a1) -/* 0AFEC0 7F07B390 C446000C */ lwc1 $f6, 0xc($v0) -/* 0AFEC4 7F07B394 E4A60010 */ swc1 $f6, 0x10($a1) -/* 0AFEC8 7F07B398 C44A0010 */ lwc1 $f10, 0x10($v0) -/* 0AFECC 7F07B39C C47004A0 */ lwc1 $f16, 0x4a0($v1) -/* 0AFED0 7F07B3A0 C4440008 */ lwc1 $f4, 8($v0) -/* 0AFED4 7F07B3A4 C4720498 */ lwc1 $f18, 0x498($v1) -/* 0AFED8 7F07B3A8 46105202 */ mul.s $f8, $f10, $f16 -/* 0AFEDC 7F07B3AC 00000000 */ nop -/* 0AFEE0 7F07B3B0 46049182 */ mul.s $f6, $f18, $f4 -/* 0AFEE4 7F07B3B4 46064281 */ sub.s $f10, $f8, $f6 -/* 0AFEE8 7F07B3B8 10000007 */ b .L7F07B3D8 -/* 0AFEEC 7F07B3BC E4AA0014 */ swc1 $f10, 0x14($a1) -/* 0AFEF0 7F07B3C0 C4500008 */ lwc1 $f16, 8($v0) -.L7F07B3C4: -/* 0AFEF4 7F07B3C4 E4B0000C */ swc1 $f16, 0xc($a1) -/* 0AFEF8 7F07B3C8 C452000C */ lwc1 $f18, 0xc($v0) -/* 0AFEFC 7F07B3CC E4B20010 */ swc1 $f18, 0x10($a1) -/* 0AFF00 7F07B3D0 C4440010 */ lwc1 $f4, 0x10($v0) -/* 0AFF04 7F07B3D4 E4A40014 */ swc1 $f4, 0x14($a1) -.L7F07B3D8: -/* 0AFF08 7F07B3D8 14CAFFC7 */ bne $a2, $t2, .L7F07B2F8 -/* 0AFF0C 7F07B3DC 24A5000C */ addiu $a1, $a1, 0xc -/* 0AFF10 7F07B3E0 C5600014 */ lwc1 $f0, 0x14($t3) -/* 0AFF14 7F07B3E4 8FAF0098 */ lw $t7, 0x98($sp) -/* 0AFF18 7F07B3E8 E7A20058 */ swc1 $f2, 0x58($sp) -/* 0AFF1C 7F07B3EC AFAC0040 */ sw $t4, 0x40($sp) -/* 0AFF20 7F07B3F0 E7A20010 */ swc1 $f2, 0x10($sp) -/* 0AFF24 7F07B3F4 27A40060 */ addiu $a0, $sp, 0x60 -/* 0AFF28 7F07B3F8 27A5006C */ addiu $a1, $sp, 0x6c -/* 0AFF2C 7F07B3FC 27A60078 */ addiu $a2, $sp, 0x78 -/* 0AFF30 7F07B400 27A70084 */ addiu $a3, $sp, 0x84 -/* 0AFF34 7F07B404 E7A00014 */ swc1 $f0, 0x14($sp) -/* 0AFF38 7F07B408 0FC16C09 */ jal sub_GAME_7F05B024 -/* 0AFF3C 7F07B40C AFAF0018 */ sw $t7, 0x18($sp) -/* 0AFF40 7F07B410 3C098008 */ lui $t1, %hi(g_CurrentPlayer) -/* 0AFF44 7F07B414 2529A0B0 */ addiu $t1, %lo(g_CurrentPlayer) # addiu $t1, $t1, -0x5f50 -/* 0AFF48 7F07B418 8FA20098 */ lw $v0, 0x98($sp) -/* 0AFF4C 7F07B41C 8D380000 */ lw $t8, ($t1) -/* 0AFF50 7F07B420 8FAC0040 */ lw $t4, 0x40($sp) -/* 0AFF54 7F07B424 C4480000 */ lwc1 $f8, ($v0) -/* 0AFF58 7F07B428 C70603C4 */ lwc1 $f6, 0x3c4($t8) -/* 0AFF5C 7F07B42C C7A20058 */ lwc1 $f2, 0x58($sp) -/* 0AFF60 7F07B430 C4500004 */ lwc1 $f16, 4($v0) -/* 0AFF64 7F07B434 46064280 */ add.s $f10, $f8, $f6 -/* 0AFF68 7F07B438 C4480008 */ lwc1 $f8, 8($v0) -/* 0AFF6C 7F07B43C 44807000 */ mtc1 $zero, $f14 -/* 0AFF70 7F07B440 E44A0000 */ swc1 $f10, ($v0) -/* 0AFF74 7F07B444 8D390000 */ lw $t9, ($t1) -/* 0AFF78 7F07B448 C73203C8 */ lwc1 $f18, 0x3c8($t9) -/* 0AFF7C 7F07B44C 3C198003 */ lui $t9, %hi(g_IntroSwirl) -/* 0AFF80 7F07B450 46128100 */ add.s $f4, $f16, $f18 -/* 0AFF84 7F07B454 E4440004 */ swc1 $f4, 4($v0) -/* 0AFF88 7F07B458 8D2D0000 */ lw $t5, ($t1) -/* 0AFF8C 7F07B45C C5A603CC */ lwc1 $f6, 0x3cc($t5) -/* 0AFF90 7F07B460 46064280 */ add.s $f10, $f8, $f6 -/* 0AFF94 7F07B464 E44A0008 */ swc1 $f10, 8($v0) -/* 0AFF98 7F07B468 8D2E0000 */ lw $t6, ($t1) -/* 0AFF9C 7F07B46C C5D003C4 */ lwc1 $f16, 0x3c4($t6) -/* 0AFFA0 7F07B470 E6100000 */ swc1 $f16, ($s0) -/* 0AFFA4 7F07B474 8D2F0000 */ lw $t7, ($t1) -/* 0AFFA8 7F07B478 C5F203C8 */ lwc1 $f18, 0x3c8($t7) -/* 0AFFAC 7F07B47C E6120004 */ swc1 $f18, 4($s0) -/* 0AFFB0 7F07B480 8D380000 */ lw $t8, ($t1) -/* 0AFFB4 7F07B484 C70403CC */ lwc1 $f4, 0x3cc($t8) -/* 0AFFB8 7F07B488 E6040008 */ swc1 $f4, 8($s0) -/* 0AFFBC 7F07B48C 8F3964AC */ lw $t9, %lo(g_IntroSwirl)($t9) -/* 0AFFC0 7F07B490 032C5821 */ addu $t3, $t9, $t4 -/* 0AFFC4 7F07B494 8D6D0004 */ lw $t5, 4($t3) -/* 0AFFC8 7F07B498 31AE0004 */ andi $t6, $t5, 4 -/* 0AFFCC 7F07B49C 55C0000E */ bnezl $t6, .L7F07B4D8 -/* 0AFFD0 7F07B4A0 8D790024 */ lw $t9, 0x24($t3) -/* 0AFFD4 7F07B4A4 8D6F0024 */ lw $t7, 0x24($t3) -/* 0AFFD8 7F07B4A8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0AFFDC 7F07B4AC 31F80004 */ andi $t8, $t7, 4 -/* 0AFFE0 7F07B4B0 57000006 */ bnezl $t8, .L7F07B4CC -/* 0AFFE4 7F07B4B4 44814000 */ mtc1 $at, $f8 -/* 0AFFE8 7F07B4B8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0AFFEC 7F07B4BC 44810000 */ mtc1 $at, $f0 -/* 0AFFF0 7F07B4C0 1000000C */ b .L7F07B4F4 -/* 0AFFF4 7F07B4C4 8D2E0000 */ lw $t6, ($t1) -/* 0AFFF8 7F07B4C8 44814000 */ mtc1 $at, $f8 -.L7F07B4CC: -/* 0AFFFC 7F07B4CC 10000008 */ b .L7F07B4F0 -/* 0B0000 7F07B4D0 46024001 */ sub.s $f0, $f8, $f2 -/* 0B0004 7F07B4D4 8D790024 */ lw $t9, 0x24($t3) -.L7F07B4D8: -/* 0B0008 7F07B4D8 332D0004 */ andi $t5, $t9, 4 -/* 0B000C 7F07B4DC 51A00004 */ beql $t5, $zero, .L7F07B4F0 -/* 0B0010 7F07B4E0 46001006 */ mov.s $f0, $f2 -/* 0B0014 7F07B4E4 10000002 */ b .L7F07B4F0 -/* 0B0018 7F07B4E8 46007006 */ mov.s $f0, $f14 -/* 0B001C 7F07B4EC 46001006 */ mov.s $f0, $f2 -.L7F07B4F0: -/* 0B0020 7F07B4F0 8D2E0000 */ lw $t6, ($t1) -.L7F07B4F4: -/* 0B0024 7F07B4F4 3C014220 */ li $at, 0x42200000 # 40.000000 -/* 0B0028 7F07B4F8 44811000 */ mtc1 $at, $f2 -/* 0B002C 7F07B4FC C5CA04C0 */ lwc1 $f10, 0x4c0($t6) -/* 0B0030 7F07B500 C6060000 */ lwc1 $f6, ($s0) -/* 0B0034 7F07B504 C6080004 */ lwc1 $f8, 4($s0) -/* 0B0038 7F07B508 46025402 */ mul.s $f16, $f10, $f2 -/* 0B003C 7F07B50C 00000000 */ nop -/* 0B0040 7F07B510 46008482 */ mul.s $f18, $f16, $f0 -/* 0B0044 7F07B514 46123100 */ add.s $f4, $f6, $f18 -/* 0B0048 7F07B518 E6040000 */ swc1 $f4, ($s0) -/* 0B004C 7F07B51C 8D2F0000 */ lw $t7, ($t1) -/* 0B0050 7F07B520 C6040008 */ lwc1 $f4, 8($s0) -/* 0B0054 7F07B524 C5EA04C4 */ lwc1 $f10, 0x4c4($t7) -/* 0B0058 7F07B528 46025402 */ mul.s $f16, $f10, $f2 -/* 0B005C 7F07B52C 00000000 */ nop -/* 0B0060 7F07B530 46008182 */ mul.s $f6, $f16, $f0 -/* 0B0064 7F07B534 46064480 */ add.s $f18, $f8, $f6 -/* 0B0068 7F07B538 E6120004 */ swc1 $f18, 4($s0) -/* 0B006C 7F07B53C 8D380000 */ lw $t8, ($t1) -/* 0B0070 7F07B540 C70A04C8 */ lwc1 $f10, 0x4c8($t8) -/* 0B0074 7F07B544 46025402 */ mul.s $f16, $f10, $f2 -/* 0B0078 7F07B548 00000000 */ nop -/* 0B007C 7F07B54C 46008202 */ mul.s $f8, $f16, $f0 -/* 0B0080 7F07B550 46082180 */ add.s $f6, $f4, $f8 -/* 0B0084 7F07B554 E6060008 */ swc1 $f6, 8($s0) -/* 0B0088 7F07B558 8FBF002C */ lw $ra, 0x2c($sp) -/* 0B008C 7F07B55C 8FB00028 */ lw $s0, 0x28($sp) -/* 0B0090 7F07B560 27BD0090 */ addiu $sp, $sp, 0x90 -/* 0B0094 7F07B564 03E00008 */ jr $ra -/* 0B0098 7F07B568 00000000 */ nop -) -#endif +/** + * Smoothly interpolate the camera between the points on the intro swirl path. + */ +void bondviewCalcIntroSwirlCamera(s32 index, f32 time, coord3d *pos, coord3d *lookat) +{ + struct SetupIntroSwirl *base; + struct SetupIntroSwirl *loopbase; + f32 pointbuf[10]; + struct SetupIntroSwirl *swirl; + f32 frac; + f32 *dst; + base = g_IntroSwirl; + swirl = base; + swirl += index; + frac = 0.0f; + if (swirl->duration.fval > 0.0f) + { + frac = time / swirl->duration.fval; + } + + { + struct SetupIntroSwirl *entry; + union { + struct SetupIntroSwirl *swirl; + struct player *player; + } target; + s32 i; + + loopbase = base + (u32) index; + + for (i = -1; i < 3; i++) + { + entry = loopbase; + loopbase = base + (u32) index; + target.swirl = entry + i; + dst = &pointbuf[i * 3]; + + if (i < 0) + { + if (target.swirl < base) + { + entry = base; + } + else + { + entry = target.swirl; + } + } + else + { + while (entry < target.swirl) + { + if (entry[1].bitflags & 1) + { + break; + } + + entry++; + } + } + + if (entry->bitflags & 2) + { + target.player = g_CurrentPlayer; + dst[3] = (entry->offsetfromBond[2].fval * target.player->field_488.theta_transform.f[0]) + + (entry->offsetfromBond[0].fval * target.player->field_488.theta_transform.f[2]); + dst[4] = entry->offsetfromBond[1].fval; + dst[5] = (entry->offsetfromBond[2].fval * target.player->field_488.theta_transform.f[2]) + - (entry->offsetfromBond[0].fval * target.player->field_488.theta_transform.f[0]); + } + else + { + dst[3] = entry->offsetfromBond[0].fval; + dst[4] = entry->offsetfromBond[1].fval; + dst[5] = entry->offsetfromBond[2].fval; + } + } + } + + { + f32 scale; + + base = swirl; + scale = base->scale.fval; + base = (void *)(index << 5); + + coord3dCubicSplineInterp((coord3d *) &pointbuf[0], (coord3d *) &pointbuf[3], (coord3d *) &pointbuf[6], (coord3d *) &pointbuf[9], frac, scale, pos); + + pos->x += g_CurrentPlayer->field_3C4; + pos->y += g_CurrentPlayer->field_3C8; + pos->z += g_CurrentPlayer->field_3CC; + + lookat->x = g_CurrentPlayer->field_3C4; + lookat->y = g_CurrentPlayer->field_3C8; + lookat->z = g_CurrentPlayer->field_3CC; + + swirl = (void *)(((u32) g_IntroSwirl) + (u32) base); + + if (!(swirl->bitflags & 4)) + { + if (!(swirl[1].bitflags & 4)) + { + scale = 1.0f; + } + else + { + scale = 1.0f - frac; + } + } + else if (swirl[1].bitflags & 4) + { + scale = 0.0f; + } + else + { + scale = frac; + } + + lookat->x += (g_CurrentPlayer->field_488.applied_view.x * 40.0f) * scale; + lookat->y += (g_CurrentPlayer->field_488.applied_view.y * 40.0f) * scale; + lookat->z += (g_CurrentPlayer->field_488.applied_view.z * 40.0f) * scale; + } +} /** @@ -5024,6 +2871,7 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, sp30 += g_IntroSwirl[i].unk18.fval; } + // Fade player body from opaque to transparent just before the player takes control. if ((sp30 < 30.0f) && ((sp30 + g_GlobalTimerDelta) >= 30.0f)) { currentPlayerStartChrFade(30.0f, 0.0f); @@ -5056,7 +2904,7 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, } } - sub_GAME_7F07B2A0(intro_camera_index, camera_transition_timer, pos, pos2); + bondviewCalcIntroSwirlCamera(intro_camera_index, camera_transition_timer, pos, pos2); if (g_IntroSwirl[intro_camera_index].unk1C >= 0) { @@ -5082,10 +2930,10 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, { camera_transition_timer += g_GlobalTimerDelta; - if (g_CurrentPlayer->ptr_char_objectinstance != NULL) + if (g_CurrentPlayer->bodyModel != NULL) { - if (objecthandlerGetModelField28((Model *) g_CurrentPlayer->ptr_char_objectinstance) - >= sub_GAME_7F06F5C4((Model *) g_CurrentPlayer->ptr_char_objectinstance)) + if (modelGetAnimFrame((Model *) g_CurrentPlayer->bodyModel) + >= modelGetAnimEndFrame((Model *) g_CurrentPlayer->bodyModel)) { g_CameraAfterCinema = CAMERAMODE_INTRO; } @@ -5147,21 +2995,21 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, } else if (g_CameraMode == CAMERAMODE_POSEND) { - if (dword_CODE_bss_800799F8 != NULL) + if (g_CameraLookAtBondPad != NULL) { - pos->f[0] = dword_CODE_bss_800799F8->pos.f[0]; - pos->f[1] = dword_CODE_bss_800799F8->pos.f[1]; - pos->f[2] = dword_CODE_bss_800799F8->pos.f[2]; + pos->f[0] = g_CameraLookAtBondPad->pos.f[0]; + pos->f[1] = g_CameraLookAtBondPad->pos.f[1]; + pos->f[2] = g_CameraLookAtBondPad->pos.f[2]; pos2->f[0] = g_CurrentPlayer->field_3C4; pos2->f[1] = g_CurrentPlayer->field_3C8; pos2->f[2] = g_CurrentPlayer->field_3CC; - *stan = dword_CODE_bss_800799F8->stan; + *stan = g_CameraLookAtBondPad->stan; - arg6->f[0] = dword_CODE_bss_800799F8->pos.f[0]; - arg6->f[1] = dword_CODE_bss_800799F8->pos.f[1]; - arg6->f[2] = dword_CODE_bss_800799F8->pos.f[2]; + arg6->f[0] = g_CameraLookAtBondPad->pos.f[0]; + arg6->f[1] = g_CameraLookAtBondPad->pos.f[1]; + arg6->f[2] = g_CameraLookAtBondPad->pos.f[2]; return; } @@ -5242,7 +3090,6 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, } - //begin bondmove.c per pd void sub_GAME_7F07C540(s32 arg0) @@ -5250,55 +3097,54 @@ void sub_GAME_7F07C540(s32 arg0) g_CurrentPlayer->field_42c = arg0; } -void set_BONDdata_lookahead_setting(s32 arg0) + +void currentPlayerSetLookAheadSetting(bool enabled) { - g_CurrentPlayer->automovecentreenabled = arg0; + g_CurrentPlayer->automovecentreenabled = enabled; } -s32 get_BONDdata_lookahead_setting(void) + +/** + * Unreferenced + */ +bool currentPlayerGetLookAheadSetting(void) { return g_CurrentPlayer->automovecentreenabled; } -void set_BONDdata_autoaim_y(s32 param_1) + +void currentPlayerSetYAutoAimEnabled(bool enabled) { - g_CurrentPlayer->autoyaimenabled = param_1; + g_CurrentPlayer->autoyaimenabled = enabled; } - - - - /** * Address 0x7F07C580. */ -s32 get_BONDdata_autoaim_y(void) +bool currentPlayerGetYAutoAimEnabled(void) { if (getPlayerCount() == 1) { return g_CurrentPlayer->autoyaimenabled; } - return (s32) g_playerPerm->autoaim; + + return (bool) g_playerPerm->autoaim; } - - - -int redirect_get_BONDdata_autoaim_y(void) { - // Node 0 - return get_BONDdata_autoaim_y(); +bool currentPlayerGetYAutoAimEnabledRedirect(void) +{ + return currentPlayerGetYAutoAimEnabled(); } -s32 get_BONDdata_is_aiming(void) { + +bool currentPlayerGetIsAiming(void) +{ return g_CurrentPlayer->insightaimmode; } - - - /** * Updates autoyaimtime60 by g_ClockTimer. * Will update player->autoaimy if new autoyaimtime60 < 0 or autoaim_target != g_CurrentPlayer->autoaim_target_y. @@ -5329,44 +3175,34 @@ void bondviewUpdateYAutoAimTime(struct PropRecord *autoaim_target, f32 auto_aim_ } +void currentPlayerSetXAutoAimEnabled(bool enabled) +{ + g_CurrentPlayer->autoxaimenabled = enabled; - - -void set_BONDdata_autoaim_x(s32 param_1) { - g_CurrentPlayer->autoxaimenabled = param_1; return; } - - - /** * Address 0x7F07C668. */ -s32 get_BONDdata_autoaim_x(void) +bool currentPlayerGetXAutoAimEnabled(void) { if (getPlayerCount() == 1) { return g_CurrentPlayer->autoxaimenabled; } - return (s32) g_playerPerm->autoaim; + + return (bool) g_playerPerm->autoaim; } - - - - -int redirect_get_BONDdata_autoaim_x(void) { - return get_BONDdata_autoaim_x(); +bool currentPlayerGetXAutoAimEnabledRedirect(void) +{ + return currentPlayerGetXAutoAimEnabled(); } - - - - /** * Updates autoxaimtime60 by g_ClockTimer. * Will update player->autoaimx if new autoxaimtime60 < 0 or autoaim_target_x != g_CurrentPlayer->autoaim_target_x. @@ -5462,7 +3298,6 @@ void bondviewTankModelRotationRelated(void) { } - /** * Address 0x7F07C888. */ @@ -5508,7 +3343,6 @@ void bondviewGetTankCollisionBounds(struct rect4f *tank_collision_bounds, struct } - /** * Address 0x7F07CA2C. */ @@ -5531,9 +3365,6 @@ s32 bondviewTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x } - - - /** * Address 0x7F07CAC8. */ @@ -5677,7 +3508,7 @@ s32 sub_GAME_7F07CDD4(struct coord3d *arg0, f32 arg1, StandTile **arg2) bool isBondInTank(void) { - return in_tank_flag; + return g_PlayerIsInTank; } @@ -5687,7 +3518,7 @@ bool isBondInTank(void) struct PropRecord *get_ptr_for_players_tank(void) { - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { return g_PlayerTankProp; } @@ -5762,7 +3593,7 @@ s32 bondviewTryMoveToStan(struct coord3d *arg0, StandTile **stan) sp94 = 0; - if ((in_tank_flag == 1) && (g_EnterTankAudioState != TANK_RUN_STATE_NOT_RUNNING)) + if ((g_PlayerIsInTank == 1) && (g_EnterTankAudioState != TANK_RUN_STATE_NOT_RUNNING)) { sp94 = sub_GAME_7F07CDD4(arg0, g_TankOrientationAngle, stan); } @@ -5809,7 +3640,7 @@ s32 bondviewTryMoveToStan(struct coord3d *arg0, StandTile **stan) { if (g_CurrentPlayer->ducking_height_offset == FULL_CROUCH_OFFSET || sp7C < 0) { - if (stanGetLocusCount(&sp3C) == 0 && sub_GAME_7F0B26B8(&sp90, arg0->f[0], arg0->f[2], collision_radius, g_CurrentPlayer->field_488.collision_position.f[1] + 175.0f) >= 0) + if (stanGetLocusCount(&sp3C) == 0 && stanTestLocusEdgeAboveY(&sp90, arg0->f[0], arg0->f[2], collision_radius, g_CurrentPlayer->field_488.collision_position.f[1] + 175.0f) >= 0) { goto block_20; } @@ -5869,7 +3700,7 @@ s32 bondviewTrySimpleMovePlayerCollision(coord3d *next_pos, coord3d *collision_p struct StandTile *stan; // resets stan global collision variables - sub_GAME_7F0B1CC4(); + stanResetHits(); if (bondviewTryMoveToStan(next_pos, &stan) != 0) { @@ -6202,7 +4033,7 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) { chraiGetCollisionBoundsWithoutY(g_WorldTankProp, &polygon, &edges); - if ((in_tank_flag == 1) + if ((g_PlayerIsInTank == 1) || (chrpropTestPointInPolygon(&g_CurrentPlayer->field_488.collision_position, polygon, edges) != 0) || ((chrobjTestPointPolygonCollision(&g_CurrentPlayer->field_488.collision_position, g_CurrentPlayer->field_488.collision_radius, polygon, edges) != 0))) { @@ -6217,14 +4048,14 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) temp_f2 = (farr5[4] - farr5[3]) * obj->model->scale; - if (in_tank_flag == 1 + if (g_PlayerIsInTank == 1 || (chrpropTestPointInPolygon(&g_CurrentPlayer->field_488.collision_position, &tank_objrecord->rect, (s32)tank_objrecord->collision) != 0)) { temp_f2 += (farr6[4] - farr6[3]) * obj->model->scale; g_BondCanEnterTank = 1; } - if ((in_tank_flag == 0) && (g_PlayerTankYOffset < temp_f2)) + if ((g_PlayerIsInTank == 0) && (g_PlayerTankYOffset < temp_f2)) { g_PlayerTankYOffset += (20.0f * g_GlobalTimerDelta); if ((temp_f2 < g_PlayerTankYOffset)) @@ -6243,7 +4074,7 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) g_PlayerTankYOffset = temp_f2; } - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { if (g_EnterTankAudioState == TANK_RUN_STATE_NOT_RUNNING) { @@ -6357,7 +4188,7 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) } } - sub_GAME_7F07DE9C(g_CurrentPlayer); + bondviewUpdatePlayerRoom(g_CurrentPlayer); if (g_CurrentPlayer->field_488.current_tile_ptr != NULL) { @@ -6366,346 +4197,217 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) } - -void sub_GAME_7F07DE64(struct player *player) { - chrpropDeregisterRoom(player->prop, player->field_2A04, player); - player->field_2A04 = -1; +/** + * Address: 7F07DE64 + */ +void bondviewDeregisterPlayerRoom(struct player *player) +{ + chrpropDeregisterRoom(player->prop, player->registeredroom); + player->registeredroom = -1; } - /* extern */ - /** * Address 0x7F07DE9C. */ -void sub_GAME_7F07DE9C(struct player *player) +void bondviewUpdatePlayerRoom(struct player *player) { - sub_GAME_7F07DE64(player); + bondviewDeregisterPlayerRoom(player); if (player->prop->chr) { - chrPositionRelated7F020D94(player->prop->chr); + chrDetectRooms(player->prop->chr); return; } if (player->field_488.current_tile_ptr) { - player->field_2A04 = (s16) player->field_488.current_tile_ptr->room; + player->registeredroom = (s16) player->field_488.current_tile_ptr->room; - chrpropRegisterRoom(player->prop, player->field_2A04); + chrpropRegisterRoom(player->prop, player->registeredroom); } } -void sub_GAME_7F07DEFC(void) +/** + * Address: 7F07DEFC + */ +void bondviewInitPauseTransition(void) { g_CurrentPlayer->pause_starting_angle = g_CurrentPlayer->vv_verta; - g_CurrentPlayer->field_210 = 0.0f; - g_CurrentPlayer->field_218 = 0; + g_CurrentPlayer->pause_transition_time = 0.0f; + g_CurrentPlayer->pause_state = 0; } + /** - * Pause angle related. + * Set the pause tilt's start and end pitch. Also calculates how long the transition should take. + * The greater the angular distance between the player's camera pitch and the pause pitch of -40 degrees, + * the longer it takes to pause. * - * @param arg0: When set, pause_target_angle will be -40.0f, otherwise g_CurrentPlayer->vv_verta. + * @param topause: When set, pause_target_verta will be -40.0f, otherwise g_CurrentPlayer->vv_verta. + * @return: How long the tilt should take. * * Address 0x7F07DF28. */ -f32 bondviewPauseAngleRelated(s32 arg0) +f32 bondviewSetupPauseTransition(bool topause) { - f32 f; - f32 ret; + f32 anglediff; + f32 duration; - if (arg0) + if (topause) { - g_CurrentPlayer->pause_related = g_CurrentPlayer->vv_verta; - g_CurrentPlayer->pause_target_angle = -40.0f; + g_CurrentPlayer->pause_saved_verta = g_CurrentPlayer->vv_verta; + g_CurrentPlayer->pause_target_verta = -40.0f; } else { - g_CurrentPlayer->pause_related = g_CurrentPlayer->pause_starting_angle; - g_CurrentPlayer->pause_target_angle = g_CurrentPlayer->vv_verta; + g_CurrentPlayer->pause_saved_verta = g_CurrentPlayer->pause_starting_angle; + g_CurrentPlayer->pause_target_verta = g_CurrentPlayer->vv_verta; } - f = g_CurrentPlayer->pause_related - g_CurrentPlayer->pause_target_angle; + anglediff = g_CurrentPlayer->pause_saved_verta - g_CurrentPlayer->pause_target_verta; - if (f < 0.0f) + if (anglediff < 0.0f) { - f = -f; + anglediff = -anglediff; } - if (f >= 60.0f) + /** + * If the delta between pause_saved_verta and pause_target_verta is large, + * the time penalty per degree above 60 is cut in half. + */ + if (anglediff >= 60.0f) { - ret = (((f - 60.0f) * 60.0f * 0.5f) / 60.0f) + 60.0f; + duration = (((anglediff - 60.0f) * 60.0f * 0.5f) / 60.0f) + 60.0f; } - else if (f <= 0.0f) + else if (anglediff <= 0.0f) { - ret = 0.0f; + duration = 0.0f; } else { // this is a different `60` than the other values above! - ret = (f * 60.f) / 60.f; + duration = (anglediff * 60.f) / 60.f; } - return ret; + return duration; } - -void sub_GAME_7F07E010(f32 arg0) { - g_CurrentPlayer->field_210 = 0.0f; - g_CurrentPlayer->field_214 = arg0; - g_CurrentPlayer->field_218 = 1; -} - -void sub_GAME_7F07E03C(f32 arg0) { - g_CurrentPlayer->field_210 = 0.0f; - g_CurrentPlayer->field_214 = arg0; - g_CurrentPlayer->field_218 = 2; +void bondviewStartPauseTransition(f32 duration) { + g_CurrentPlayer->pause_transition_time = 0.0f; + g_CurrentPlayer->pause_transition_duration = duration; + g_CurrentPlayer->pause_state = 1; } -s32 sub_GAME_7F07E068(void) { - return (g_CurrentPlayer->field_218 != 0 && g_CurrentPlayer->field_218 != 3); +void bondviewStartUnpauseTransition(f32 duration) { + g_CurrentPlayer->pause_transition_time = 0.0f; + g_CurrentPlayer->pause_transition_duration = duration; + g_CurrentPlayer->pause_state = 2; } - -#ifdef NONMATCHING -void sub_GAME_7F07E090(void) { - +bool bondViewIsPauseTransitioning(void) { + return (g_CurrentPlayer->pause_state != 0 && g_CurrentPlayer->pause_state != 3); } -#else -GLOBAL_ASM( -.late_rodata -glabel D_8005506C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80055070 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80055074 -.word 0xbf333333 /*-0.69999999*/ -glabel D_80055078 -.word 0x3f333333 /*0.69999999*/ -.text -glabel sub_GAME_7F07E090 -/* 0B2BC0 7F07E090 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 0B2BC4 7F07E094 2484A0B0 */ addiu $a0, %lo(g_CurrentPlayer) # addiu $a0, $a0, -0x5f50 -/* 0B2BC8 7F07E098 8C820000 */ lw $v0, ($a0) -/* 0B2BCC 7F07E09C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0B2BD0 7F07E0A0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0B2BD4 7F07E0A4 C4420158 */ lwc1 $f2, 0x158($v0) -/* 0B2BD8 7F07E0A8 24010001 */ li $at, 1 -/* 0B2BDC 7F07E0AC E7A2001C */ swc1 $f2, 0x1c($sp) -/* 0B2BE0 7F07E0B0 8C430218 */ lw $v1, 0x218($v0) -/* 0B2BE4 7F07E0B4 14610031 */ bne $v1, $at, .L7F07E17C -/* 0B2BE8 7F07E0B8 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 0B2BEC 7F07E0BC C4248378 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 0B2BF0 7F07E0C0 3C018003 */ lui $at, %hi(watch_transition_time) -/* 0B2BF4 7F07E0C4 C42665A8 */ lwc1 $f6, %lo(watch_transition_time)($at) -/* 0B2BF8 7F07E0C8 C44A0210 */ lwc1 $f10, 0x210($v0) -/* 0B2BFC 7F07E0CC 46062202 */ mul.s $f8, $f4, $f6 -/* 0B2C00 7F07E0D0 46085400 */ add.s $f16, $f10, $f8 -/* 0B2C04 7F07E0D4 E4500210 */ swc1 $f16, 0x210($v0) -/* 0B2C08 7F07E0D8 8C820000 */ lw $v0, ($a0) -/* 0B2C0C 7F07E0DC C4400210 */ lwc1 $f0, 0x210($v0) -/* 0B2C10 7F07E0E0 C4420214 */ lwc1 $f2, 0x214($v0) -/* 0B2C14 7F07E0E4 4602003C */ c.lt.s $f0, $f2 -/* 0B2C18 7F07E0E8 00000000 */ nop -/* 0B2C1C 7F07E0EC 4502001C */ bc1fl .L7F07E160 -/* 0B2C20 7F07E0F0 C450020C */ lwc1 $f16, 0x20c($v0) -/* 0B2C24 7F07E0F4 46020383 */ div.s $f14, $f0, $f2 -/* 0B2C28 7F07E0F8 3C018005 */ lui $at, %hi(D_8005506C) -/* 0B2C2C 7F07E0FC C432506C */ lwc1 $f18, %lo(D_8005506C)($at) -/* 0B2C30 7F07E100 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0B2C34 7F07E104 44813000 */ mtc1 $at, $f6 -/* 0B2C38 7F07E108 46127102 */ mul.s $f4, $f14, $f18 -/* 0B2C3C 7F07E10C 00000000 */ nop -/* 0B2C40 7F07E110 46062302 */ mul.s $f12, $f4, $f6 -/* 0B2C44 7F07E114 0FC15FA8 */ jal cosf -/* 0B2C48 7F07E118 00000000 */ nop -/* 0B2C4C 7F07E11C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0B2C50 7F07E120 44815000 */ mtc1 $at, $f10 -/* 0B2C54 7F07E124 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 0B2C58 7F07E128 2484A0B0 */ addiu $a0, %lo(g_CurrentPlayer) # addiu $a0, $a0, -0x5f50 -/* 0B2C5C 7F07E12C 46005201 */ sub.s $f8, $f10, $f0 -/* 0B2C60 7F07E130 8C820000 */ lw $v0, ($a0) -/* 0B2C64 7F07E134 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0B2C68 7F07E138 44818000 */ mtc1 $at, $f16 -/* 0B2C6C 7F07E13C C4420208 */ lwc1 $f2, 0x208($v0) -/* 0B2C70 7F07E140 C444020C */ lwc1 $f4, 0x20c($v0) -/* 0B2C74 7F07E144 46104482 */ mul.s $f18, $f8, $f16 -/* 0B2C78 7F07E148 46022181 */ sub.s $f6, $f4, $f2 -/* 0B2C7C 7F07E14C 46123282 */ mul.s $f10, $f6, $f18 -/* 0B2C80 7F07E150 460A1200 */ add.s $f8, $f2, $f10 -/* 0B2C84 7F07E154 10000006 */ b .L7F07E170 -/* 0B2C88 7F07E158 E4480158 */ swc1 $f8, 0x158($v0) -/* 0B2C8C 7F07E15C C450020C */ lwc1 $f16, 0x20c($v0) -.L7F07E160: -/* 0B2C90 7F07E160 240E0003 */ li $t6, 3 -/* 0B2C94 7F07E164 E4500158 */ swc1 $f16, 0x158($v0) -/* 0B2C98 7F07E168 8C8F0000 */ lw $t7, ($a0) -/* 0B2C9C 7F07E16C ADEE0218 */ sw $t6, 0x218($t7) -.L7F07E170: -/* 0B2CA0 7F07E170 8C820000 */ lw $v0, ($a0) -/* 0B2CA4 7F07E174 10000034 */ b .L7F07E248 -/* 0B2CA8 7F07E178 C4420158 */ lwc1 $f2, 0x158($v0) -.L7F07E17C: -/* 0B2CAC 7F07E17C 24010002 */ li $at, 2 -/* 0B2CB0 7F07E180 14610031 */ bne $v1, $at, .L7F07E248 -/* 0B2CB4 7F07E184 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 0B2CB8 7F07E188 C4248378 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 0B2CBC 7F07E18C 3C018003 */ lui $at, %hi(watch_transition_time) -/* 0B2CC0 7F07E190 C42665A8 */ lwc1 $f6, %lo(watch_transition_time)($at) -/* 0B2CC4 7F07E194 C44A0210 */ lwc1 $f10, 0x210($v0) -/* 0B2CC8 7F07E198 46062482 */ mul.s $f18, $f4, $f6 -/* 0B2CCC 7F07E19C 46125200 */ add.s $f8, $f10, $f18 -/* 0B2CD0 7F07E1A0 E4480210 */ swc1 $f8, 0x210($v0) -/* 0B2CD4 7F07E1A4 8C820000 */ lw $v0, ($a0) -/* 0B2CD8 7F07E1A8 C4400210 */ lwc1 $f0, 0x210($v0) -/* 0B2CDC 7F07E1AC C4420214 */ lwc1 $f2, 0x214($v0) -/* 0B2CE0 7F07E1B0 4602003C */ c.lt.s $f0, $f2 -/* 0B2CE4 7F07E1B4 00000000 */ nop -/* 0B2CE8 7F07E1B8 4502001E */ bc1fl .L7F07E234 -/* 0B2CEC 7F07E1BC C4480208 */ lwc1 $f8, 0x208($v0) -/* 0B2CF0 7F07E1C0 46020383 */ div.s $f14, $f0, $f2 -/* 0B2CF4 7F07E1C4 3C018005 */ lui $at, %hi(D_80055070) -/* 0B2CF8 7F07E1C8 C4305070 */ lwc1 $f16, %lo(D_80055070)($at) -/* 0B2CFC 7F07E1CC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0B2D00 7F07E1D0 44813000 */ mtc1 $at, $f6 -/* 0B2D04 7F07E1D4 46107102 */ mul.s $f4, $f14, $f16 -/* 0B2D08 7F07E1D8 00000000 */ nop -/* 0B2D0C 7F07E1DC 46062302 */ mul.s $f12, $f4, $f6 -/* 0B2D10 7F07E1E0 0FC15FA8 */ jal cosf -/* 0B2D14 7F07E1E4 00000000 */ nop -/* 0B2D18 7F07E1E8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0B2D1C 7F07E1EC 44815000 */ mtc1 $at, $f10 -/* 0B2D20 7F07E1F0 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 0B2D24 7F07E1F4 2484A0B0 */ addiu $a0, %lo(g_CurrentPlayer) # addiu $a0, $a0, -0x5f50 -/* 0B2D28 7F07E1F8 46005481 */ sub.s $f18, $f10, $f0 -/* 0B2D2C 7F07E1FC 8C820000 */ lw $v0, ($a0) -/* 0B2D30 7F07E200 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0B2D34 7F07E204 44814000 */ mtc1 $at, $f8 -/* 0B2D38 7F07E208 C44C020C */ lwc1 $f12, 0x20c($v0) -/* 0B2D3C 7F07E20C C4440208 */ lwc1 $f4, 0x208($v0) -/* 0B2D40 7F07E210 46089402 */ mul.s $f16, $f18, $f8 -/* 0B2D44 7F07E214 460C2181 */ sub.s $f6, $f4, $f12 -/* 0B2D48 7F07E218 46103282 */ mul.s $f10, $f6, $f16 -/* 0B2D4C 7F07E21C 460A6480 */ add.s $f18, $f12, $f10 -/* 0B2D50 7F07E220 E4520158 */ swc1 $f18, 0x158($v0) -/* 0B2D54 7F07E224 8C820000 */ lw $v0, ($a0) -/* 0B2D58 7F07E228 10000007 */ b .L7F07E248 -/* 0B2D5C 7F07E22C C4420158 */ lwc1 $f2, 0x158($v0) -/* 0B2D60 7F07E230 C4480208 */ lwc1 $f8, 0x208($v0) -.L7F07E234: -/* 0B2D64 7F07E234 E4480158 */ swc1 $f8, 0x158($v0) -/* 0B2D68 7F07E238 8C980000 */ lw $t8, ($a0) -/* 0B2D6C 7F07E23C AF000218 */ sw $zero, 0x218($t8) -/* 0B2D70 7F07E240 8C820000 */ lw $v0, ($a0) -/* 0B2D74 7F07E244 C4420158 */ lwc1 $f2, 0x158($v0) -.L7F07E248: -/* 0B2D78 7F07E248 3C01C334 */ li $at, 0xC3340000 # -180.000000 -/* 0B2D7C 7F07E24C 44812000 */ mtc1 $at, $f4 -/* 0B2D80 7F07E250 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 0B2D84 7F07E254 3C198005 */ lui $t9, %hi(g_ClockTimer) -/* 0B2D88 7F07E258 4604103C */ c.lt.s $f2, $f4 -/* 0B2D8C 7F07E25C 00000000 */ nop -/* 0B2D90 7F07E260 45020008 */ bc1fl .L7F07E284 -/* 0B2D94 7F07E264 44818000 */ mtc1 $at, $f16 -/* 0B2D98 7F07E268 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0B2D9C 7F07E26C 44816000 */ mtc1 $at, $f12 -/* 0B2DA0 7F07E270 00000000 */ nop -/* 0B2DA4 7F07E274 460C1180 */ add.s $f6, $f2, $f12 -/* 0B2DA8 7F07E278 1000000B */ b .L7F07E2A8 -/* 0B2DAC 7F07E27C E4460158 */ swc1 $f6, 0x158($v0) -/* 0B2DB0 7F07E280 44818000 */ mtc1 $at, $f16 -.L7F07E284: -/* 0B2DB4 7F07E284 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0B2DB8 7F07E288 4602803E */ c.le.s $f16, $f2 -/* 0B2DBC 7F07E28C 00000000 */ nop -/* 0B2DC0 7F07E290 45000005 */ bc1f .L7F07E2A8 -/* 0B2DC4 7F07E294 00000000 */ nop -/* 0B2DC8 7F07E298 44816000 */ mtc1 $at, $f12 -/* 0B2DCC 7F07E29C 00000000 */ nop -/* 0B2DD0 7F07E2A0 460C1281 */ sub.s $f10, $f2, $f12 -/* 0B2DD4 7F07E2A4 E44A0158 */ swc1 $f10, 0x158($v0) -.L7F07E2A8: -/* 0B2DD8 7F07E2A8 8F398374 */ lw $t9, %lo(g_ClockTimer)($t9) -/* 0B2DDC 7F07E2AC 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0B2DE0 7F07E2B0 44816000 */ mtc1 $at, $f12 -/* 0B2DE4 7F07E2B4 1B200030 */ blez $t9, .L7F07E378 -/* 0B2DE8 7F07E2B8 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 0B2DEC 7F07E2BC 8C820000 */ lw $v0, ($a0) -/* 0B2DF0 7F07E2C0 C7A8001C */ lwc1 $f8, 0x1c($sp) -/* 0B2DF4 7F07E2C4 44803000 */ mtc1 $zero, $f6 -/* 0B2DF8 7F07E2C8 C4520158 */ lwc1 $f18, 0x158($v0) -/* 0B2DFC 7F07E2CC 44815000 */ mtc1 $at, $f10 -/* 0B2E00 7F07E2D0 3C018005 */ lui $at, %hi(D_80055074) -/* 0B2E04 7F07E2D4 46089101 */ sub.s $f4, $f18, $f8 -/* 0B2E08 7F07E2D8 E4440160 */ swc1 $f4, 0x160($v0) -/* 0B2E0C 7F07E2DC 8C820000 */ lw $v0, ($a0) -/* 0B2E10 7F07E2E0 C4400160 */ lwc1 $f0, 0x160($v0) -/* 0B2E14 7F07E2E4 4606003C */ c.lt.s $f0, $f6 -/* 0B2E18 7F07E2E8 00000000 */ nop -/* 0B2E1C 7F07E2EC 45020006 */ bc1fl .L7F07E308 -/* 0B2E20 7F07E2F0 4600503C */ c.lt.s $f10, $f0 -/* 0B2E24 7F07E2F4 460C0400 */ add.s $f16, $f0, $f12 -/* 0B2E28 7F07E2F8 E4500160 */ swc1 $f16, 0x160($v0) -/* 0B2E2C 7F07E2FC 8C820000 */ lw $v0, ($a0) -/* 0B2E30 7F07E300 C4400160 */ lwc1 $f0, 0x160($v0) -/* 0B2E34 7F07E304 4600503C */ c.lt.s $f10, $f0 -.L7F07E308: -/* 0B2E38 7F07E308 00000000 */ nop -/* 0B2E3C 7F07E30C 45000005 */ bc1f .L7F07E324 -/* 0B2E40 7F07E310 00000000 */ nop -/* 0B2E44 7F07E314 460C0481 */ sub.s $f18, $f0, $f12 -/* 0B2E48 7F07E318 E4520160 */ swc1 $f18, 0x160($v0) -/* 0B2E4C 7F07E31C 8C820000 */ lw $v0, ($a0) -/* 0B2E50 7F07E320 C4400160 */ lwc1 $f0, 0x160($v0) -.L7F07E324: -/* 0B2E54 7F07E324 C42C5074 */ lwc1 $f12, %lo(D_80055074)($at) -/* 0B2E58 7F07E328 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 0B2E5C 7F07E32C C4228378 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 0B2E60 7F07E330 3C018005 */ lui $at, %hi(D_80055078) -/* 0B2E64 7F07E334 46021200 */ add.s $f8, $f2, $f2 -/* 0B2E68 7F07E338 46080103 */ div.s $f4, $f0, $f8 -/* 0B2E6C 7F07E33C E4440160 */ swc1 $f4, 0x160($v0) -/* 0B2E70 7F07E340 8C820000 */ lw $v0, ($a0) -/* 0B2E74 7F07E344 C4400160 */ lwc1 $f0, 0x160($v0) -/* 0B2E78 7F07E348 460C003C */ c.lt.s $f0, $f12 -/* 0B2E7C 7F07E34C 00000000 */ nop -/* 0B2E80 7F07E350 45000003 */ bc1f .L7F07E360 -/* 0B2E84 7F07E354 00000000 */ nop -/* 0B2E88 7F07E358 10000007 */ b .L7F07E378 -/* 0B2E8C 7F07E35C E44C0160 */ swc1 $f12, 0x160($v0) -.L7F07E360: -/* 0B2E90 7F07E360 C4225078 */ lwc1 $f2, %lo(D_80055078)($at) -/* 0B2E94 7F07E364 4600103C */ c.lt.s $f2, $f0 -/* 0B2E98 7F07E368 00000000 */ nop -/* 0B2E9C 7F07E36C 45020003 */ bc1fl .L7F07E37C -/* 0B2EA0 7F07E370 8FBF0014 */ lw $ra, 0x14($sp) -/* 0B2EA4 7F07E374 E4420160 */ swc1 $f2, 0x160($v0) -.L7F07E378: -/* 0B2EA8 7F07E378 8FBF0014 */ lw $ra, 0x14($sp) -.L7F07E37C: -/* 0B2EAC 7F07E37C 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0B2EB0 7F07E380 03E00008 */ jr $ra -/* 0B2EB4 7F07E384 00000000 */ nop -) -#endif -f32 sub_GAME_7F07E388(void) { +/** + * Transition camera pitch from playing to watch menu (-40.0f degrees). + * Then when the game is unpaused, transition the camera pitch back to its pitch before pausing began. + */ +void bondviewUpdatePauseTransition(void) { + f32 prevverta; + f32 frac; + f32 weight; - if (g_CurrentPlayer->field_218 == 1) { - return g_CurrentPlayer->field_210 / g_CurrentPlayer->field_214; + prevverta = g_CurrentPlayer->vv_verta; + + // Entering pause. + if (g_CurrentPlayer->pause_state == 1) { + g_CurrentPlayer->pause_transition_time += g_GlobalTimerDelta * watch_transition_time; + + if (g_CurrentPlayer->pause_transition_time < g_CurrentPlayer->pause_transition_duration) { + // Cosine ease-in-out + frac = g_CurrentPlayer->pause_transition_time / g_CurrentPlayer->pause_transition_duration; + weight = (1.0f - cosf((frac * M_TAU_F) * 0.5f)) * 0.5f; + + g_CurrentPlayer->vv_verta = g_CurrentPlayer->pause_saved_verta + + ((g_CurrentPlayer->pause_target_verta - g_CurrentPlayer->pause_saved_verta) * weight); + } else { + g_CurrentPlayer->vv_verta = g_CurrentPlayer->pause_target_verta; + // Set pause state to paused. + g_CurrentPlayer->pause_state = 3; + } + // Leaving pause. + } else if (g_CurrentPlayer->pause_state == 2) { + g_CurrentPlayer->pause_transition_time += g_GlobalTimerDelta * watch_transition_time; + + if (g_CurrentPlayer->pause_transition_time < g_CurrentPlayer->pause_transition_duration) { + // Cosine ease-in-out + frac = g_CurrentPlayer->pause_transition_time / g_CurrentPlayer->pause_transition_duration; + weight = (1.0f - cosf((frac * M_TAU_F) * 0.5f)) * 0.5f; + + g_CurrentPlayer->vv_verta = g_CurrentPlayer->pause_target_verta + + ((g_CurrentPlayer->pause_saved_verta - g_CurrentPlayer->pause_target_verta) * weight); + } else { + g_CurrentPlayer->vv_verta = g_CurrentPlayer->pause_saved_verta; + // Set pause state to unpaused. + g_CurrentPlayer->pause_state = 0; + } } - if (g_CurrentPlayer->field_218 == 2) { - return 1.0f - (g_CurrentPlayer->field_210 / g_CurrentPlayer->field_214); + + // Wrap vv_verta into [-180, 180) + if (g_CurrentPlayer->vv_verta < -180.0f) { + g_CurrentPlayer->vv_verta += 360.0f; + } else if (g_CurrentPlayer->vv_verta >= 180.0f) { + g_CurrentPlayer->vv_verta -= 360.0f; } - if (g_CurrentPlayer->field_218 == 3) { + + /** + * Calculate shortest angular velocity from previous frame, + * scale it by g_GlobalTimerDelta, + * clamp it to [-0.7, 0.7] so the pitch change is never too fast. + */ + if (g_ClockTimer > 0) { + g_CurrentPlayer->speedverta = g_CurrentPlayer->vv_verta - prevverta; + + if (g_CurrentPlayer->speedverta < 0.0f) { + g_CurrentPlayer->speedverta += 360.0f; + } + + if (g_CurrentPlayer->speedverta > 180.0f) { + g_CurrentPlayer->speedverta -= 360.0f; + } + + g_CurrentPlayer->speedverta /= g_GlobalTimerDelta + g_GlobalTimerDelta; + + if (g_CurrentPlayer->speedverta < -0.7f) { + g_CurrentPlayer->speedverta = -0.7f; + } else if (g_CurrentPlayer->speedverta > 0.7f) { + g_CurrentPlayer->speedverta = 0.7f; + } + } +} + + +f32 bondViewGetPauseTransitionFrac(void) { + + // Entering pause + if (g_CurrentPlayer->pause_state == 1) { + return g_CurrentPlayer->pause_transition_time / g_CurrentPlayer->pause_transition_duration; + } + // Leaving pause + if (g_CurrentPlayer->pause_state == 2) { + return 1.0f - (g_CurrentPlayer->pause_transition_time / g_CurrentPlayer->pause_transition_duration); + } + // Fully paused + if (g_CurrentPlayer->pause_state == 3) { return 1.0f; } + // Unpaused return 0.0f; } @@ -6897,154 +4599,22 @@ f32 bondviewWatchAnimationRelated(void) -#ifdef NONMATCHING -void sub_GAME_7F07E7CC(void) -{ - ModelFileHeader *objheader; +void sub_GAME_7F07E7CC(void) { + ModelFileHeader *itemheader; - objheader = get_ptr_itemheader_in_hand(HAND_LEFT); - modelCalculateRwDataLen(objheader); - #ifndef VERSION_EU - if (0x32 < objheader->numRecords) { + itemheader = get_ptr_itemheader_in_hand(1); + modelCalculateRwDataLen(itemheader); +#ifndef VERSION_EU + if (0x32 < itemheader->numRecords) { return_null(); } - #endif - _sub_GAME_7F075FAC(&g_CurrentPlayer->something_with_watch_object_instance, objheader, &g_CurrentPlayer->field_2EC); - modelSetScale(&g_CurrentPlayer->something_with_watch_object_instance, c_item_entries[41].scale * 0.1f); - _ modelSetAnimation(&g_CurrentPlayer->something_with_watch_object_instance, ptr_animation_table + PTR_ANIM_bond_watch, 0, 0.0, watch_transition_time * 0.5, 0.0); - g_CurrentPlayer->step_in_view_watch_animation = 0; - return; +#endif + animInit((Model *)((u8 *)g_CurrentPlayer + 0x230), itemheader, (u32 *)((u8 *)g_CurrentPlayer + 0x2ec)); + modelSetScale((Model *)((u8 *)g_CurrentPlayer + 0x230), c_item_entries[41].scale * 0.10000001f); + modelSetAnimation((Model *)((u8 *)g_CurrentPlayer + 0x230), (ModelAnimation *)&ptr_animation_table->data[(s32)&ANIM_DATA_bond_watch], 0, 0.0f, 0.5f * watch_transition_time, 0.0f); + *(s32 *)((u8 *)g_CurrentPlayer + 0x220) = 0; } -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80055088 -.word 0x3dccccce /*0.10000001*/ -.text -glabel sub_GAME_7F07E7CC -/* 0B32FC 7F07E7CC 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0B3300 7F07E7D0 AFBF001C */ sw $ra, 0x1c($sp) -/* 0B3304 7F07E7D4 0FC173C6 */ jal get_ptr_itemheader_in_hand -/* 0B3308 7F07E7D8 24040001 */ li $a0, 1 -/* 0B330C 7F07E7DC AFA20024 */ sw $v0, 0x24($sp) -/* 0B3310 7F07E7E0 0FC1D73D */ jal modelCalculateRwDataLen -/* 0B3314 7F07E7E4 00402025 */ move $a0, $v0 -/* 0B3318 7F07E7E8 8FAE0024 */ lw $t6, 0x24($sp) -/* 0B331C 7F07E7EC 85CF0014 */ lh $t7, 0x14($t6) -/* 0B3320 7F07E7F0 29E10033 */ slti $at, $t7, 0x33 -/* 0B3324 7F07E7F4 14200003 */ bnez $at, .L7F07E804 -/* 0B3328 7F07E7F8 00000000 */ nop -/* 0B332C 7F07E7FC 0FC1B11B */ jal return_null -/* 0B3330 7F07E800 00000000 */ nop -.L7F07E804: -/* 0B3334 7F07E804 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0B3338 7F07E808 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0B333C 7F07E80C 8FA50024 */ lw $a1, 0x24($sp) -/* 0B3340 7F07E810 24440230 */ addiu $a0, $v0, 0x230 -/* 0B3344 7F07E814 0FC1D7EB */ jal animInit -/* 0B3348 7F07E818 244602EC */ addiu $a2, $v0, 0x2ec -/* 0B334C 7F07E81C 3C018004 */ lui $at, %hi(c_item_entries+0x33C) -/* 0B3350 7F07E820 C424E14C */ lwc1 $f4, %lo(c_item_entries+0x33C)($at) -/* 0B3354 7F07E824 3C018005 */ lui $at, %hi(D_80055088) -/* 0B3358 7F07E828 C4265088 */ lwc1 $f6, %lo(D_80055088)($at) -/* 0B335C 7F07E82C 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 0B3360 7F07E830 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0B3364 7F07E834 46062202 */ mul.s $f8, $f4, $f6 -/* 0B3368 7F07E838 24840230 */ addiu $a0, $a0, 0x230 -/* 0B336C 7F07E83C 44054000 */ mfc1 $a1, $f8 -/* 0B3370 7F07E840 0FC1B39E */ jal modelSetScale -/* 0B3374 7F07E844 00000000 */ nop -/* 0B3378 7F07E848 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0B337C 7F07E84C 44815000 */ mtc1 $at, $f10 -/* 0B3380 7F07E850 3C018003 */ lui $at, %hi(watch_transition_time) -/* 0B3384 7F07E854 C43065A8 */ lwc1 $f16, %lo(watch_transition_time)($at) -/* 0B3388 7F07E858 44800000 */ mtc1 $zero, $f0 -/* 0B338C 7F07E85C 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 0B3390 7F07E860 46105482 */ mul.s $f18, $f10, $f16 -/* 0B3394 7F07E864 3C188007 */ lui $t8, %hi(ptr_animation_table) -/* 0B3398 7F07E868 8F189538 */ lw $t8, %lo(ptr_animation_table)($t8) -/* 0B339C 7F07E86C 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0B33A0 7F07E870 3C190000 */ lui $t9, %hi(0x000042C8) # $t9, 0 -/* 0B33A4 7F07E874 273942C8 */ addiu $t9, %lo(0x000042C8) # addiu $t9, $t9, 0x42c8 -/* 0B33A8 7F07E878 44070000 */ mfc1 $a3, $f0 -/* 0B33AC 7F07E87C E7B20010 */ swc1 $f18, 0x10($sp) -/* 0B33B0 7F07E880 00003025 */ move $a2, $zero -/* 0B33B4 7F07E884 E7A00014 */ swc1 $f0, 0x14($sp) -/* 0B33B8 7F07E888 03192821 */ addu $a1, $t8, $t9 -/* 0B33BC 7F07E88C 0FC1BF2A */ jal modelSetAnimation -/* 0B33C0 7F07E890 24840230 */ addiu $a0, $a0, 0x230 -/* 0B33C4 7F07E894 3C088008 */ lui $t0, %hi(g_CurrentPlayer) -/* 0B33C8 7F07E898 8D08A0B0 */ lw $t0, %lo(g_CurrentPlayer)($t0) -/* 0B33CC 7F07E89C AD000220 */ sw $zero, 0x220($t0) -/* 0B33D0 7F07E8A0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0B33D4 7F07E8A4 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0B33D8 7F07E8A8 03E00008 */ jr $ra -/* 0B33DC 7F07E8AC 00000000 */ nop -) -#endif -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80055088 -.word 0x3dccccce /*0.10000001*/ -.text -glabel sub_GAME_7F07E7CC -/* 0B1278 7F07E888 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0B127C 7F07E88C AFBF001C */ sw $ra, 0x1c($sp) -/* 0B1280 7F07E890 0FC174F2 */ jal get_ptr_itemheader_in_hand -/* 0B1284 7F07E894 24040001 */ li $a0, 1 -/* 0B1288 7F07E898 AFA20024 */ sw $v0, 0x24($sp) -/* 0B128C 7F07E89C 0FC1D75F */ jal modelCalculateRwDataLen -/* 0B1290 7F07E8A0 00402025 */ move $a0, $v0 -/* 0B1294 7F07E8A4 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0B1298 7F07E8A8 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0B129C 7F07E8AC 8FA50024 */ lw $a1, 0x24($sp) -/* 0B12A0 7F07E8B0 24440230 */ addiu $a0, $v0, 0x230 -/* 0B12A4 7F07E8B4 0FC1D80A */ jal animInit -/* 0B12A8 7F07E8B8 244602EC */ addiu $a2, $v0, 0x2ec -/* 0B12AC 7F07E8BC 3C018003 */ lui $at, %hi(c_item_entries+0x33C) # $at, 0x8003 -/* 0B12B0 7F07E8C0 C4247D9C */ lwc1 $f4, %lo(c_item_entries+0x33C)($at) -/* 0B12B4 7F07E8C4 3C018005 */ lui $at, %hi(D_80055088) # $at, 0x8005 -/* 0B12B8 7F07E8C8 C426AC58 */ lwc1 $f6, %lo(D_80055088)($at) -/* 0B12BC 7F07E8CC 3C048007 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8007 -/* 0B12C0 7F07E8D0 8C848BC0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0B12C4 7F07E8D4 46062202 */ mul.s $f8, $f4, $f6 -/* 0B12C8 7F07E8D8 24840230 */ addiu $a0, $a0, 0x230 -/* 0B12CC 7F07E8DC 44054000 */ mfc1 $a1, $f8 -/* 0B12D0 7F07E8E0 0FC1B4CF */ jal modelSetScale -/* 0B12D4 7F07E8E4 00000000 */ nop -/* 0B12D8 7F07E8E8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0B12DC 7F07E8EC 44815000 */ mtc1 $at, $f10 -/* 0B12E0 7F07E8F0 3C018003 */ lui $at, %hi(watch_transition_time) # $at, 0x8003 -/* 0B12E4 7F07E8F4 C4301AF8 */ lwc1 $f16, %lo(watch_transition_time)($at) -/* 0B12E8 7F07E8F8 44800000 */ mtc1 $zero, $f0 -/* 0B12EC 7F07E8FC 3C048007 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8007 -/* 0B12F0 7F07E900 46105482 */ mul.s $f18, $f10, $f16 -/* 0B12F4 7F07E904 3C0E8006 */ lui $t6, %hi(ptr_animation_table) # $t6, 0x8006 -/* 0B12F8 7F07E908 8DCE8478 */ lw $t6, %lo(ptr_animation_table)($t6) -/* 0B12FC 7F07E90C 8C848BC0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0B1300 7F07E910 3C0F0000 */ lui $t7, %hi(0x000042C8) # $t7, 0 -/* 0B1304 7F07E914 25EF42C8 */ addiu $t7, %lo(0x000042C8) # addiu $t7, $t7, 0x42c8 -/* 0B1308 7F07E918 44070000 */ mfc1 $a3, $f0 -/* 0B130C 7F07E91C E7B20010 */ swc1 $f18, 0x10($sp) -/* 0B1310 7F07E920 00003025 */ move $a2, $zero -/* 0B1314 7F07E924 E7A00014 */ swc1 $f0, 0x14($sp) -/* 0B1318 7F07E928 01CF2821 */ addu $a1, $t6, $t7 -/* 0B131C 7F07E92C 0FC1BF92 */ jal modelSetAnimation -/* 0B1320 7F07E930 24840230 */ addiu $a0, $a0, 0x230 -/* 0B1324 7F07E934 3C188007 */ lui $t8, %hi(g_CurrentPlayer) # $t8, 0x8007 -/* 0B1328 7F07E938 8F188BC0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0B132C 7F07E93C AF000220 */ sw $zero, 0x220($t8) -/* 0B1330 7F07E940 8FBF001C */ lw $ra, 0x1c($sp) -/* 0B1334 7F07E944 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0B1338 7F07E948 03E00008 */ jr $ra -/* 0B133C 7F07E94C 00000000 */ nop -) -#endif -#endif - @@ -7188,7 +4758,7 @@ void bondviewPlayerStopAudioForPause(void) } } - for (prop = get_ptr_obj_pos_list_current_entry(); prop; prop = prop->prev) + for (prop = chrpropGetActiveTail(); prop; prop = prop->prev) { if (prop->type != PROP_TYPE_DOOR && prop->type == PROP_TYPE_OBJ) { @@ -7308,20 +4878,20 @@ void bondviewWatchAnimationTick(void) bondviewSetUpperTextDisplayFlag(PLAYERFLAG_LOCKCONTROLS); countdownTimerSetVisible(4, 0); - if ((g_CurrentPlayer->field_218 == 0) || (g_CurrentPlayer->field_218 == 2) || (g_CurrentPlayer->field_218 == 3)) + if ((g_CurrentPlayer->pause_state == 0) || (g_CurrentPlayer->pause_state == 2) || (g_CurrentPlayer->pause_state == 3)) { - sp20 = bondviewPauseAngleRelated(1); + sp20 = bondviewSetupPauseTransition(TRUE); if (sp20 < 30.0f) { sp20 = 30.0f; } - sub_GAME_7F07E010(sp20); + bondviewStartPauseTransition(sp20); } } - if ((g_CurrentPlayer->field_214 - g_CurrentPlayer->field_210) < 30.0f) + if ((g_CurrentPlayer->pause_transition_duration - g_CurrentPlayer->pause_transition_time) < 30.0f) { g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x3; g_CurrentPlayer->watch_pause_time = 1; @@ -7342,9 +4912,9 @@ void bondviewWatchAnimationTick(void) sp30 = ((20.0f - g_CurrentPlayer->pause_watch_related_adjust) * 40.0f) / 20.0f; } - if ((g_CurrentPlayer->field_218 == 0) || (g_CurrentPlayer->field_218 == 2) || (g_CurrentPlayer->field_218 == 3)) + if ((g_CurrentPlayer->pause_state == 0) || (g_CurrentPlayer->pause_state == 2) || (g_CurrentPlayer->pause_state == 3)) { - sp2c = bondviewPauseAngleRelated(1); + sp2c = bondviewSetupPauseTransition(TRUE); sp20 = sp30 - 10.0f; if (sp2c < sp20) @@ -7352,7 +4922,7 @@ void bondviewWatchAnimationTick(void) sp2c = sp20; } - sub_GAME_7F07E010(sp2c); + bondviewStartPauseTransition(sp2c); sp20 = sp2c + 10.0f; @@ -7368,7 +4938,7 @@ void bondviewWatchAnimationTick(void) if ( ((g_CurrentPlayer->step_in_view_watch_animation != 0) && (g_CurrentPlayer->step_in_view_watch_animation != 3)) || - sub_GAME_7F07E068() != 0 + bondViewIsPauseTransitioning() ) { g_CurrentPlayer->pausing_flag = TRUE; @@ -7459,7 +5029,7 @@ void bondviewWatchAnimationTick(void) if (g_CurrentPlayer->watch_pause_time == 1) { sp28 = 40.0f; - sp24 = bondviewPauseAngleRelated(0); + sp24 = bondviewSetupPauseTransition(FALSE); if ((g_CurrentPlayer->step_in_view_watch_animation != 0) && (g_CurrentPlayer->step_in_view_watch_animation != 3)) { @@ -7473,7 +5043,7 @@ void bondviewWatchAnimationTick(void) sp24 = sp20; } - sub_GAME_7F07E03C(sp24); + bondviewStartUnpauseTransition(sp24); bondviewSetPauseWatchRelatedAlt(sp28); } @@ -7509,7 +5079,7 @@ void bondviewWatchAnimationTick(void) } } } - else if (sub_GAME_7F07E068() == 0) + else if (!bondViewIsPauseTransitioning()) { if ( (get_item_in_hand_or_watch_menu(GUNLEFT) == getCurrentPlayerWeaponId(GUNLEFT)) @@ -7561,7 +5131,7 @@ void bondviewWatchAnimationTick(void) if (g_CurrentPlayer->watch_pause_time == 1) { - sub_GAME_7F07E03C(bondviewPauseAngleRelated(0)); + bondviewStartUnpauseTransition(bondviewSetupPauseTransition(FALSE)); } if ( @@ -7603,10 +5173,10 @@ void bondviewWatchAnimationTick(void) if (Gun_hand_without_item(GUNLEFT) && Gun_hand_without_item(GUNRIGHT)) { - if ((g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 5) - && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 6) - && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 7) - && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 8)) + if ((g_CurrentPlayer->hands[GUNLEFT].weapon_action_state != GUN_ANIM_STATE_SWITCH_LOWER) + && (g_CurrentPlayer->hands[GUNLEFT].weapon_action_state != GUN_ANIM_STATE_SWITCH_SWAP) + && (g_CurrentPlayer->hands[GUNLEFT].weapon_action_state != GUN_ANIM_STATE_SWITCH_HOLD) + && (g_CurrentPlayer->hands[GUNLEFT].weapon_action_state != GUN_ANIM_STATE_SWITCH_RAISE)) { g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x1; g_CurrentPlayer->watch_pause_time = 0; @@ -7615,7 +5185,7 @@ void bondviewWatchAnimationTick(void) } } - sub_GAME_7F07E090(); + bondviewUpdatePauseTransition(); bondviewStepWatchAnimation(); bondviewUpdateWatchZoomIn(); } @@ -7639,15 +5209,12 @@ void bondviewWatchAnimationTick(void) } - -void set_open_close_solo_watch_menu_to1(void) { +void set_open_close_solo_watch_menu_to1(void) +{ g_CurrentPlayer->open_close_solo_watch_menu = TRUE; } - - - /** * US address 7F07F874. * EU address 7F07F918. @@ -7658,7 +5225,7 @@ void trigger_solo_watch_menu(s32 arg0) Gfx *ptr_b; struct WatchVertex *next; struct WatchVertex *ptr_copy; - int i; + s32 i; if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x0) { @@ -7672,10 +5239,10 @@ void trigger_solo_watch_menu(s32 arg0) if ((Gun_hand_without_item(GUNLEFT) != ITEM_UNARMED) && (Gun_hand_without_item(GUNRIGHT) != ITEM_UNARMED) - && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 5) - && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 6) - && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 7) - && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 8)) + && (g_CurrentPlayer->hands[GUNLEFT].weapon_action_state != GUN_ANIM_STATE_SWITCH_LOWER) + && (g_CurrentPlayer->hands[GUNLEFT].weapon_action_state != GUN_ANIM_STATE_SWITCH_SWAP) + && (g_CurrentPlayer->hands[GUNLEFT].weapon_action_state != GUN_ANIM_STATE_SWITCH_HOLD) + && (g_CurrentPlayer->hands[GUNLEFT].weapon_action_state != GUN_ANIM_STATE_SWITCH_RAISE)) { g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x1; } @@ -7687,14 +5254,14 @@ void trigger_solo_watch_menu(s32 arg0) g_CurrentPlayer->watch_pause_time = 0; g_CurrentPlayer->timer_1C4 = 0; - sub_GAME_7F07DEFC(); + bondviewInitPauseTransition(); bondviewTriggerWatchZoomDefault(); - sub_GAME_7F0A2F30(&g_CurrentPlayer->armor_display_values, 0x2E, 1, get_BONDdata_watch_armor()); - sub_GAME_7F0A3330(&g_CurrentPlayer->watch_body_armor_bar_gdl, OS_K0_TO_PHYSICAL(&g_CurrentPlayer->armor_display_values), 0x2E); + hudMakeDamageSegments(&g_CurrentPlayer->armor_display_values, 23*2, 1, currentPlayerGetArmor()); + buildGaugeBarDL(&g_CurrentPlayer->watch_body_armor_bar_gdl, OS_K0_TO_PHYSICAL(&g_CurrentPlayer->armor_display_values), 0x2E); - sub_GAME_7F0A2F30(&g_CurrentPlayer->health_display_values, 0x2E, -1, bondviewGetCurrentPlayerHealth()); - sub_GAME_7F0A3330(&g_CurrentPlayer->watch_health_bar_gdl, OS_K0_TO_PHYSICAL(&g_CurrentPlayer->health_display_values), 0x2E); + hudMakeDamageSegments(&g_CurrentPlayer->health_display_values, 23*2, -1, currentPlayerGetHealth()); + buildGaugeBarDL(&g_CurrentPlayer->watch_health_bar_gdl, OS_K0_TO_PHYSICAL(&g_CurrentPlayer->health_display_values), 0x2E); sub_GAME_7F0A69A8(); @@ -8060,7 +5627,8 @@ void bondviewCurrentPlayerUpdateSpeedTheta(f32 value) } -Gfx *currentPlayerDrawFade(Gfx *gdl) { +Gfx *currentPlayerDrawFade(Gfx *gdl) +{ f32 frac = g_CurrentPlayer->colourscreenfrac; s32 r = g_CurrentPlayer->colourscreenred; s32 g = g_CurrentPlayer->colourscreengreen; @@ -8303,7 +5871,7 @@ void bondviewUpdatePlayerY(s32 use_stanHeight, f32 stanHeight_offset) if (1); - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { g_CurrentPlayer->stanHeight = bondviewYPositionRelated( g_CurrentPlayer->field_488.current_tile_ptr, @@ -8347,7 +5915,7 @@ void bondviewUpdatePlayerY(s32 use_stanHeight, f32 stanHeight_offset) g_CurrentPlayer->field_488.collision_position.f[2]); // Another error checking block, it seems this condition is almost never triggered in the game. - if (sub_GAME_7F0B26B8( + if (stanTestLocusEdgeAboveY( &stan, g_CurrentPlayer->field_488.collision_position.f[0], g_CurrentPlayer->field_488.collision_position.f[2], @@ -8493,9 +6061,9 @@ void bondviewUpdatePlayerCollisionPositionFields(void) StandTile *sp2C; s32 sp28; - g_CurrentPlayer->field_29BC = (g_CurrentPlayer->headpos.f[1] * g_playerPerm->player_perspective_height) + 7.0f; + g_CurrentPlayer->eyeheight = (g_CurrentPlayer->headpos.f[1] * g_playerPerm->player_perspective_height) + 7.0f; - phi_f0 = g_CurrentPlayer->field_29BC + + phi_f0 = g_CurrentPlayer->eyeheight + ((g_CurrentPlayer->field_88 + g_CurrentPlayer->ducking_height_offset) * g_playerPerm->player_perspective_height); if (phi_f0 < 30.0f) @@ -8506,7 +6074,7 @@ void bondviewUpdatePlayerCollisionPositionFields(void) g_CurrentPlayer->field_488.collision_position.f[1] = g_CurrentPlayer->field_70 + phi_f0; if (((g_CameraMode != CAMERAMODE_DEATH_CAM_SP) && (g_CameraMode != CAMERAMODE_DEATH_CAM_MP) && (g_CameraMode != CAMERAMODE_POSEND)) - || (g_CurrentPlayer->ptr_char_objectinstance == 0)) + || (g_CurrentPlayer->bodyModel == 0)) { g_CurrentPlayer->field_488.pos.f[0] = g_CurrentPlayer->field_488.collision_position.f[0]; g_CurrentPlayer->field_488.pos.f[1] = g_CurrentPlayer->field_488.collision_position.f[1]; @@ -8632,10 +6200,6 @@ void bondviewApplyVertaTheta(void) } - - - - /** * US address 7F081974. * EU address 7F081A18. @@ -8671,7 +6235,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) f32 ftemp_nostack_spD0; f32 ftemp_nostack_spCC; f32 ftemp_nostack_spC8; - f32 spC4; + f32 targetPitch; StandTile *spC0; f32 spBC; f32 ftemp_nostack_spB8; @@ -8817,7 +6381,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } else { - if (in_tank_flag == 1 && !g_CurrentPlayer->insightaimmode) + if (g_PlayerIsInTank == 1 && !g_CurrentPlayer->insightaimmode) { moveData.analogTurn = adjustedStickX; } @@ -8990,7 +6554,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.btap = 0; } - if (in_tank_flag == 1 && g_CurrentPlayer->insightaimmode) + if (g_PlayerIsInTank == 1 && g_CurrentPlayer->insightaimmode) { if (getCurrentPlayerWeaponId(GUNRIGHT) == ITEM_TANKSHELLS) { @@ -9070,7 +6634,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { if (!g_CurrentPlayer->insightaimmode) { - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { moveData.aimTurnLeftSpeed = 1.0f; } @@ -9089,7 +6653,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { if (!g_CurrentPlayer->insightaimmode) { - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { moveData.aimTurnRightSpeed = 1.0f; } @@ -9112,7 +6676,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.canNaturalPitch = !g_CurrentPlayer->insightaimmode; - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { moveData.canTurnTank = !g_CurrentPlayer->insightaimmode; } @@ -9255,7 +6819,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.btap = 0; } - if ((in_tank_flag == 1) && (g_CurrentPlayer->insightaimmode)) + if ((g_PlayerIsInTank == 1) && (g_CurrentPlayer->insightaimmode)) { if (getCurrentPlayerWeaponId(GUNRIGHT) == ITEM_TANKSHELLS) { @@ -9298,7 +6862,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if (moveData.btap) { /* If Bond is in the tank and pressed B, then exit. */ - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { spF4 = (struct TankRecord *)g_PlayerTankProp->obj; spF4->unkD8 = get_ammo_count_for_weapon(ITEM_TANKSHELLS); @@ -9313,7 +6877,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } spF4->is_firing_tank = 0; - in_tank_flag = 0; + g_PlayerIsInTank = 0; g_CurrentPlayer->speedsideways = 0; g_CurrentPlayer->speedforwards = 0; g_CurrentPlayer->speedtheta = 0; @@ -9344,7 +6908,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) tank_turret_turn_speed = 0; g_TankOrientationAngle = spEC->tank_orientation_angle; g_TankTurnSpeed = 0; - in_tank_flag = 1; + g_PlayerIsInTank = 1; g_EnterTankAudioState = TANK_RUN_STATE_NOT_RUNNING; g_CurrentPlayer->speedsideways = 0; g_CurrentPlayer->speedforwards = 0; @@ -9434,7 +6998,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) bondviewUpdateWatchZoomIn(); } - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { g_TankTurretTurn = 0; @@ -9657,8 +7221,10 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x0) { - spC4 = -4.0f; + // By default the camera is pitched slightly below the horizon + targetPitch = -4.0f; + // lookaheadcentreenabled is always true, so this block always executes. if (g_CurrentPlayer->lookaheadcentreenabled) { spC0 = g_CurrentPlayer->field_488.current_tile_ptr; @@ -9671,7 +7237,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) spAC.f[1] = g_CurrentPlayer->field_488.collision_position.f[1]; spAC.f[2] = g_CurrentPlayer->field_488.collision_position.f[2] + (g_CurrentPlayer->field_488.theta_transform.f[2] * 300.0f); - sub_GAME_7F0B1CC4(); + stanResetHits(); if (stanTestLineUnobstructed(&spC0, g_CurrentPlayer->field_488.collision_position.f[0], g_CurrentPlayer->field_488.collision_position.f[2], spAC.f[0], spAC.f[2], CDTYPE_CLOSEDDOORS, spA0.f[2], spA0.f[1], 0, 1.0f)) { @@ -9692,16 +7258,16 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if ((ftemp_nostack_spC8 > -300.0f) && (ftemp_nostack_spC8 < 500.0f)) { - spC4 = ((atan2f(ftemp_nostack_spC8, spBC) * 360.0f) / M_TAU_F) + -4.0f; + targetPitch = ((atan2f(ftemp_nostack_spC8, spBC) * 360.0f) / M_TAU_F) + -4.0f; - if (spC4 >= 180.0f) + if (targetPitch >= 180.0f) { - spC4 -= 360.0f; + targetPitch -= 360.0f; } - if (spC4 > 0) + if (targetPitch > 0) { - spC4 *= 0.8666667f; + targetPitch *= 0.8666667f; } } } @@ -9712,12 +7278,16 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_CurrentPlayer->movecentrerelease = FALSE; } - if (in_tank_flag == 0) + + if (g_PlayerIsInTank == 0) { + /** + * If the player is giving manual pitch inputs, stop the automatic look ahead pitch adjust. + */ if ((moveData.speedVertaDown > 0) || (moveData.speedVertaUp > 0)) { - g_CurrentPlayer->field_104 = 0; - g_CurrentPlayer->field_10C = 1; + g_CurrentPlayer->docentreupdown = FALSE; + g_CurrentPlayer->prevupdown = TRUE; g_CurrentPlayer->automovecentre = FALSE; } else @@ -9733,42 +7303,47 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_CurrentPlayer->automovecentre = TRUE; } - if (( - g_CurrentPlayer->automovecentre) - && (( ((spC4 + 5.0f) < g_CurrentPlayer->vv_verta)) || (g_CurrentPlayer->vv_verta < (spC4 + -FLOAT_TEN_A))) + /** + * If the player's camera pitch is 5 degrees above the target pitch or 10 degrees below the target pitch, + * and move centre is allowed, look ahead (docentreupdown) can be activated. + */ + if ((g_CurrentPlayer->automovecentre) + && (( ((targetPitch + 5.0f) < g_CurrentPlayer->vv_verta)) || (g_CurrentPlayer->vv_verta < (targetPitch + -FLOAT_TEN_A))) && (g_CurrentPlayer->movecentrerelease == FALSE)) { - g_CurrentPlayer->field_104 = 1; + g_CurrentPlayer->docentreupdown = TRUE; } } - else if ( - (g_CurrentPlayer->fastmovecentreenabled) + /** + * fastmovecentreenabled is never set to true, so this block can never execute. Cut option? + */ + else if ((g_CurrentPlayer->fastmovecentreenabled) && (moveData.canLookAhead) - && ( - (moveData.analogWalk > 60) - || (moveData.analogWalk < -60) - ) && ( - ( ((spC4 + 5.0f) < g_CurrentPlayer->vv_verta)) || (g_CurrentPlayer->vv_verta < (spC4 + -FLOAT_TEN_A)) - ) && (g_CurrentPlayer->movecentrerelease == FALSE)) + && ((moveData.analogWalk > 60) || (moveData.analogWalk < -60)) + && (( ((targetPitch + 5.0f) < g_CurrentPlayer->vv_verta)) || (g_CurrentPlayer->vv_verta < (targetPitch + -FLOAT_TEN_A))) + && (g_CurrentPlayer->movecentrerelease == FALSE)) { - g_CurrentPlayer->field_104 = 1; + g_CurrentPlayer->docentreupdown = TRUE; } - g_CurrentPlayer->field_10C = 0; + g_CurrentPlayer->prevupdown = FALSE; } } - if (g_CurrentPlayer->field_104) + /** + * If look ahead (docentreupdown) is active, adjust the player's camera pitch to the target pitch. + */ + if (g_CurrentPlayer->docentreupdown) { - if (in_tank_flag == 0) + if (g_PlayerIsInTank == 0) { ftemp_nostack_spB8 = (g_CurrentPlayer->speedverta * g_CurrentPlayer->speedverta * 0.5f) / 0.05f; - if ((spC4 + ftemp_nostack_spB8) < g_CurrentPlayer->vv_verta) + if ((targetPitch + ftemp_nostack_spB8) < g_CurrentPlayer->vv_verta) { bondviewCurrentPlayerUpdateSpeedVerta(1.0f); } - else if (g_CurrentPlayer->vv_verta < (spC4 - ftemp_nostack_spB8)) + else if (g_CurrentPlayer->vv_verta < (targetPitch - ftemp_nostack_spB8)) { bondviewCurrentPlayerUpdateSpeedVerta(-1.0f); } @@ -9779,22 +7354,22 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) ftemp_nostack_spB8 = g_CurrentPlayer->vv_verta + (2.0f * (g_CurrentPlayer->speedverta * g_GlobalTimerDelta)); - if ((spC4 < g_CurrentPlayer->vv_verta) && (spC4 < ftemp_nostack_spB8)) + if ((targetPitch < g_CurrentPlayer->vv_verta) && (targetPitch < ftemp_nostack_spB8)) { g_CurrentPlayer->vv_verta = ftemp_nostack_spB8; } - else if ((g_CurrentPlayer->vv_verta < spC4) && (ftemp_nostack_spB8 < spC4)) + else if ((g_CurrentPlayer->vv_verta < targetPitch) && (ftemp_nostack_spB8 < targetPitch)) { g_CurrentPlayer->vv_verta = ftemp_nostack_spB8; } else { - g_CurrentPlayer->vv_verta = spC4; + g_CurrentPlayer->vv_verta = targetPitch; g_CurrentPlayer->speedverta = 0; - if (g_CurrentPlayer->field_10C == 0) + if (g_CurrentPlayer->prevupdown == FALSE) { - g_CurrentPlayer->field_104 = 0; + g_CurrentPlayer->docentreupdown = FALSE; } } } @@ -9830,6 +7405,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { bondviewCurrentPlayerUpdateSpeedVerta(moveData.speedVertaDown); + // Bug? This is true for every value except exactly 60. if ((moveData.canLookAhead) && ((moveData.analogWalk > 60) || (moveData.analogWalk < 60))) { g_CurrentPlayer->movecentrerelease = TRUE; @@ -9851,7 +7427,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_CurrentPlayer->vv_verta += g_CurrentPlayer->speedverta * g_GlobalTimerDelta * 3.5f; - if ((in_tank_flag == 1) && (g_EnterTankAudioState == TANK_RUN_STATE_RUNNING) && (g_CurrentPlayer->vv_verta < -20.0f)) + if ((g_PlayerIsInTank == 1) && (g_EnterTankAudioState == TANK_RUN_STATE_RUNNING) && (g_CurrentPlayer->vv_verta < -20.0f)) { g_CurrentPlayer->vv_verta = -20.0f; } @@ -9897,7 +7473,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) bondviewCurrentPlayerUpdateSpeedTheta(0); } - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { if (g_EnterTankAudioState == TANK_RUN_STATE_RUNNING) { @@ -9931,7 +7507,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if (moveData.detonating) { - g_CurrentPlayer->hands[GUNRIGHT].when_detonating_mines_is_0 = 0; + g_CurrentPlayer->hands[GUNRIGHT].weapon_action_state = GUN_ANIM_STATE_IDLE; g_CurrentPlayer->hands[GUNRIGHT].weapon_current_animation = 0; trigger_remote_mine_detonation(); } @@ -9970,7 +7546,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) gunSetAimType(0); if (moveData.canAutoAim - && redirect_get_BONDdata_autoaim_x() + && currentPlayerGetXAutoAimEnabledRedirect() && g_CurrentPlayer->autoaim_target_x && bondwalkItemCheckBitflags(getCurrentPlayerWeaponId(GUNRIGHT), WEAPONSTATBITFLAG_HAS_AUTO_AIM)) { @@ -9982,7 +7558,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } if (moveData.canAutoAim - && redirect_get_BONDdata_autoaim_y() + && currentPlayerGetYAutoAimEnabledRedirect() && g_CurrentPlayer->autoaim_target_y && bondwalkItemCheckBitflags(getCurrentPlayerWeaponId(GUNRIGHT), WEAPONSTATBITFLAG_HAS_AUTO_AIM)) { @@ -10003,8 +7579,6 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } - - /** * Perfect Dark playerTickDamageAndHealth * @@ -10026,13 +7600,14 @@ void bondviewPlayerTickDamageAndHealth(void) bondviewSetUpperTextDisplayFlag(PLAYERFLAG_NOTIMER); countdownTimerSetVisible(8, 0); - g_CurrentPlayer->damagetype = (s32)(bondviewGetCurrentPlayerHealth() * 8.0f); + g_CurrentPlayer->damagetype = (s32)(currentPlayerGetHealth() * 8.0f); if (g_CurrentPlayer->damagetype >= 8) { g_CurrentPlayer->damagetype = 7; } +// Ensure we don't read out of bounds of the g_DamageTypes array. #if defined(VERSION_EU) || defined(VERSION_JP) if (g_CurrentPlayer->damagetype < 0) { @@ -10131,25 +7706,25 @@ void bondviewPlayerTickDamageAndHealth(void) // 0: This is the first frame of damage if (g_CurrentPlayer->healthshowtime == 0) { - g_CurrentPlayer->healthDamageType = (s32)(bondviewGetCurrentPlayerHealth() * 8.0f); + g_CurrentPlayer->healthdamagetype = (s32)(currentPlayerGetHealth() * 8.0f); - if (g_CurrentPlayer->healthDamageType >= 8) + if (g_CurrentPlayer->healthdamagetype >= 8) { - g_CurrentPlayer->healthDamageType = 7; + g_CurrentPlayer->healthdamagetype = 7; } #if defined(VERSION_EU) || defined(VERSION_JP) - if (g_CurrentPlayer->healthDamageType < 0) + if (g_CurrentPlayer->healthdamagetype < 0) { - g_CurrentPlayer->healthDamageType = 0; + g_CurrentPlayer->healthdamagetype = 0; } #endif } if (!g_CurrentPlayer->bonddead) { - if ((g_CurrentPlayer->healthshowtime >= g_HealthDamageTypes[g_CurrentPlayer->healthDamageType].updateStartFrame) - && (g_HealthDamageTypes[g_CurrentPlayer->healthDamageType].updateEndFrame >= g_CurrentPlayer->healthshowtime)) + if ((g_CurrentPlayer->healthshowtime >= g_HealthDisplayDurations[g_CurrentPlayer->healthdamagetype].validStartFrame) + && (g_HealthDisplayDurations[g_CurrentPlayer->healthdamagetype].updateToRealHealthFrame >= g_CurrentPlayer->healthshowtime)) { g_CurrentPlayer->apparenthealth = g_CurrentPlayer->oldhealth; g_CurrentPlayer->apparentarmour = g_CurrentPlayer->oldarmour; @@ -10159,8 +7734,8 @@ void bondviewPlayerTickDamageAndHealth(void) g_CurrentPlayer->healthshowtime += g_GlobalTimerDelta; #endif } - else if ((g_CurrentPlayer->healthshowtime >= g_HealthDamageTypes[g_CurrentPlayer->healthDamageType].updateStartFrame) - && (g_HealthDamageTypes[g_CurrentPlayer->healthDamageType].otherEndFrame >= g_CurrentPlayer->healthshowtime)) + else if ((g_CurrentPlayer->healthshowtime >= g_HealthDisplayDurations[g_CurrentPlayer->healthdamagetype].validStartFrame) + && (g_HealthDisplayDurations[g_CurrentPlayer->healthdamagetype].hideHealthFrame >= g_CurrentPlayer->healthshowtime)) { g_CurrentPlayer->apparenthealth = g_CurrentPlayer->bondhealth; g_CurrentPlayer->apparentarmour = g_CurrentPlayer->bondarmour; @@ -10194,7 +7769,7 @@ void bondviewPlayerTickExplode(void) g_PlayerTickExplodeCreatePosition++; if (g_SurroundBondWithExplosionsFlag - && g_PlayerInvincible == 0 + && (g_PlayerInvincible == FALSE) && g_SurroundBondWithExplosionsTicks < g_GlobalTimer) { struct coord3d pos; @@ -10279,7 +7854,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } } - currentPlayerSetField00(0); + currentPlayerSetCameraMode(0); bondviewPlayerTickDamageAndHealth(); bondviewPlayerTickExplode(); bondviewProcessInput(stick_x, stick_y, buttons, oldbuttons); @@ -10299,7 +7874,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) Crouching applies a 50% base speed reduction before applying boost. Bond can't be boosted while in the tank. */ - if (in_tank_flag == 0) + if (g_PlayerIsInTank == 0) { // This `if` block is Perfect Dark bwalkApplyCrouchSpeed. if (currentPlayerGetCrouchPos() == CROUCH_SQUAT) @@ -10365,7 +7940,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) * This section updates the tank turret horizontal position (turning left and right), * as well as turning the tank left and right. */ - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { f32 ftemp2; struct coord3d check_collision_p1; @@ -10712,7 +8287,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) /** * Update forwards/backwards movement. */ - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { /** * This section handles the forward/backwards movement of the tank. @@ -11000,7 +8575,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_CurrentPlayer->speedforwards = calc_speedforwards; } } - else // not in tank: in_tank_flag != 1 + else // not in tank: g_PlayerIsInTank != 1 { f32 sp220; f32 sp21C; @@ -11381,7 +8956,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) * with the tank. If colliding with character, play the "arrrhghhg" sound effect, or if * colliding with prop then set tank movement penalty and create an explosion. */ - if ((g_PlayerTankProp != NULL) && (in_tank_flag == 1) && (g_EnterTankAudioState == TANK_RUN_STATE_RUNNING)) + if ((g_PlayerTankProp != NULL) && (g_PlayerIsInTank == 1) && (g_EnterTankAudioState == TANK_RUN_STATE_RUNNING)) { struct PropRecord *prop; struct TankRecord *sp140_tank_as_TankRecord; @@ -11463,7 +9038,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) for (lookup_index=ptr_list_object_lookup_indices; *lookup_index>=0; lookup_index++) { - prop = &pos_data_entry[*lookup_index]; + prop = &g_Props[*lookup_index]; if (prop != sp138_tank_as_ObjectRecord->prop) { if (prop->type == PROP_TYPE_CHR) @@ -11554,8 +9129,6 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } - - /** * US address 7F086990. * EU address 7F086AB0. @@ -11595,17 +9168,16 @@ void bondviewFrozenMoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if ((g_CameraMode == CAMERAMODE_FP_NOINPUT) || (g_CameraMode == CAMERAMODE_FP) || (g_CameraMode == CAMERAMODE_FADE_TO_TITLE)) { - currentPlayerSetField00(0); + currentPlayerSetCameraMode(0); return; } bondviewFrozenCameraTick(buttons, oldbuttons, &property_pos, &property_pos2, &property_offset, &room_pointer_tile, &stan_walk_start); - currentPlayerSetField00(1); + currentPlayerSetCameraMode(1); bondviewSetCurrentPlayerPosition(&property_pos, &property_pos2, &property_offset, room_pointer_tile, &stan_walk_start); } - s16 getWidth320or440(void) { if (cameraBufferToggle != 0) @@ -11616,6 +9188,7 @@ s16 getWidth320or440(void) return SCREEN_WIDTH_320; } + s16 getHeight330or240(void) { if (cameraBufferToggle != 0) @@ -11882,9 +9455,9 @@ void bondviewMovePlayerUpdateViewport(s8 stick_x, s8 stick_y, u16 buttons) viSetViewPosition(get_curplayer_viewport_ulx(), bondviewGetCurrentPlayerViewportUly()); currentPlayerUpdateColourScreenProperties(); currentPlayerTickChrFade(); - set_BONDdata_autoaim_y(cur_player_get_autoaim()); - set_BONDdata_autoaim_x(cur_player_get_autoaim()); - set_BONDdata_lookahead_setting(cur_player_get_lookahead()); + currentPlayerSetYAutoAimEnabled(cur_player_get_autoaim()); + currentPlayerSetXAutoAimEnabled(cur_player_get_autoaim()); + currentPlayerSetLookAheadSetting(cur_player_get_lookahead()); gunSetGunAmmoVisible(GUNAMMOREASON_OPTION, cur_player_get_ammo_onscreen_setting()); gunSetSightVisible( @@ -11949,7 +9522,7 @@ void bondviewMovePlayerUpdateViewport(s8 stick_x, s8 stick_y, u16 buttons) if (g_CameraAfterCinema) { - sub_GAME_7F07B1A4(); + bondviewAdvanceCameraMode(); } if (g_CurrentPlayer->bonddead) @@ -12000,7 +9573,11 @@ void store_BONDdata_curpos_to_previous(void) { mtx4RotateVecInPlace(camGetWorldToScreenMtxf(), &g_CurrentPlayer->previous_model_pos); } -void sub_GAME_7F0876C4(coord3d* cam_pos, coord3d* cam_look, coord3d* cam_up) + +/** + * Address: 7F0876C4 + */ +void bondviewUpdateCameraMatrices(coord3d* cam_pos, coord3d* cam_look_dir, coord3d* cam_up) { Mtx sp108; LookAt *lookat; @@ -12022,7 +9599,7 @@ void sub_GAME_7F0876C4(coord3d* cam_pos, coord3d* cam_look, coord3d* cam_up) g_CurrentPlayer->field_64 = dynAllocateMatrix(); g_CurrentPlayer->field_68 = dynAllocateMatrix(); - lookat = dynAllocate7F0BD6F8(2); + lookat = dynAllocateLights(2); scale = D_800364CC; @@ -12030,13 +9607,13 @@ void sub_GAME_7F0876C4(coord3d* cam_pos, coord3d* cam_look, coord3d* cam_up) scaledpos.y = (cam_pos->y - g_CurrentPlayer->current_model_pos.y) * scale; scaledpos.z = (cam_pos->z - g_CurrentPlayer->current_model_pos.z) * scale; - clpos.f[0] = scaledpos.f[0] + cam_look->f[0]; - clpos.f[1] = scaledpos.f[1] + cam_look->f[1]; - clpos.f[2] = scaledpos.f[2] + cam_look->f[2]; + clpos.f[0] = scaledpos.f[0] + cam_look_dir->f[0]; + clpos.f[1] = scaledpos.f[1] + cam_look_dir->f[1]; + clpos.f[2] = scaledpos.f[2] + cam_look_dir->f[2]; matrix_4x4_set_lookat(&spC4, scaledpos.x, scaledpos.y, scaledpos.z, - cam_look->x, cam_look->y, cam_look->z, + cam_look_dir->x, cam_look_dir->y, cam_look_dir->z, cam_up->x, cam_up->y, cam_up->z); guLookAtReflect(&sp108, lookat, @@ -12046,12 +9623,12 @@ void sub_GAME_7F0876C4(coord3d* cam_pos, coord3d* cam_look, coord3d* cam_up) matrix_4x4_set_lookat((Mtxf*) g_CurrentPlayer->field_64, cam_pos->x, cam_pos->y, cam_pos->z, - cam_look->x, cam_look->y, cam_look->z, + cam_look_dir->x, cam_look_dir->y, cam_look_dir->z, cam_up->x, cam_up->y, cam_up->z); matrix_4x4_set_basis_and_position((Mtxf*) g_CurrentPlayer->field_68, cam_pos->x, cam_pos->y, cam_pos->z, - cam_look->x, cam_look->y, cam_look->z, + cam_look_dir->x, cam_look_dir->y, cam_look_dir->z, cam_up->x, cam_up->y, cam_up->z); temp_s0 = dynAllocateMatrix(); @@ -12059,11 +9636,16 @@ void sub_GAME_7F0876C4(coord3d* cam_pos, coord3d* cam_look, coord3d* cam_up) projmtx = currentPlayerGetProjectionMatrixF(); matrix_4x4_multiply(projmtx, &spC4, &sp60); - for (i = 0; i < 4; i++) { - for (j = 0; j < 4; j++) { - if (sp60.m[i][j] > 32000.0f) { + for (i = 0; i < 4; i++) + { + for (j = 0; j < 4; j++) + { + if (sp60.m[i][j] > 32000.0f) + { sp60.m[i][j] = 32000.0f; - } else if (sp60.m[i][j] < -32000.0f) { + } + else if (sp60.m[i][j] < -32000.0f) + { sp60.m[i][j] = -32000.0f; } } @@ -12071,2832 +9653,463 @@ void sub_GAME_7F0876C4(coord3d* cam_pos, coord3d* cam_look, coord3d* cam_up) guMtxF2L((f32 (*)[4]) &sp60, temp_s0); set_BONDdata_field_10E0((s32) temp_s0); + scale = bgGetLevelVisibilityScale(); + matrix_scalar_multiply(scale, spC4.m[0]); guMtxF2L((f32 (*)[4]) &spC4, (Mtx* ) g_CurrentPlayer->field_5C); sub_GAME_7F059334((s32* ) g_CurrentPlayer->field_5C, (s32* ) g_CurrentPlayer->field_60); + currentPlayerSetMatrix10C8((Mtx* ) g_CurrentPlayer->field_5C); currentPlayerSetMatrix10C4((Mtx* ) g_CurrentPlayer->field_60); currentPlayerSetMatrix10CC((Mtxf* ) g_CurrentPlayer->field_64); - currentPlayerSetMatrix10D4((Mtxf* ) g_CurrentPlayer->field_68); + currentPlayerSetViewToWorldMtxf((Mtxf* ) g_CurrentPlayer->field_68); + sub_GAME_7F078464((s32) lookat); - sub_GAME_7F0785DC(); + bondviewUpdateFrustumPlanes(); store_BONDdata_curpos_to_previous(); } +/** + * Address: 7F087A08 + */ +Gfx *bondviewRenderDebugBondView(Gfx *gdl) +{ + coord3d cam_pos; + coord3d cam_look; + coord3d cam_up; + struct collision434 *collision; + coord3d shake; + coord3d vec; + coord3d zeropos; + f32 vec_y; + f32 horizontal_len; + struct player *player; + f32 angle; + f32 vertical_rot; + f32 ft4; - - -#ifdef NONMATCHING -s32 sub_GAME_7F087A08(s32 arg0) { - f32 sp20; - f32 sp2C; - f32 sp30; - ? sp34; - f32 sp40; - ? sp4C; - void *sp58; - f32 sp5C; - f32 sp60; - f32 sp64; - f32 sp68; - f32 sp6C; - f32 sp70; - f32 sp74; - f32 sp78; - f32 sp7C; - void *temp_v1; - s32 temp_a0; - s32 temp_a1; - f32 temp_f2; - ? temp_ret; - f32 phi_f16; - f32 phi_f2; - - // Node 0 - if (*g_CurrentPlayer == 1) +#if defined(VERSION_EU) + if (bossGetStageNum() == LEVELID_CUBA) { - // Node 1 - sp74 = (f32) g_CurrentPlayer->xpos; - sp78 = (f32) g_CurrentPlayer->ypos; - sp7C = (f32) g_CurrentPlayer->zpos; - sp68 = (f32) (g_CurrentPlayer->xpos2 - g_CurrentPlayer->xpos); - sp6C = (f32) (g_CurrentPlayer->ypos2 - g_CurrentPlayer->ypos); - sp70 = (f32) (g_CurrentPlayer->zpos2 - g_CurrentPlayer->zpos); - sp5C = (f32) g_CurrentPlayer->xoffset; - sp60 = (f32) g_CurrentPlayer->yoffset; - sp64 = (f32) g_CurrentPlayer->zoffset; - } - else - { - // Node 2 - temp_v1 = (g_CurrentPlayer + 0x488); - sp4C = (?32) D_80036830; - temp_a0 = (temp_v1 + 0x2c); - temp_a1 = (temp_v1 + 0x38); - sp4C.unk4 = (?32) D_80036830.unk4; - sp4C.unk8 = (?32) D_80036830.unk8; - if (g_CurrentPlayer->bonddead == FALSE) + if (cur_player_get_screen_setting() == SCREEN_SIZE_CINEMA) { - // Node 3 - sp58 = temp_v1; - explosionScreenShake(temp_a0, temp_a1, &sp4C); + gdl = clear_framebuffer_black(gdl); + gdl = clear_framebuffer_black(gdl); + gdl = clear_framebuffer_black(gdl); + gdl = clear_framebuffer_black(gdl); + } + else if (cur_player_get_screen_setting() == SCREEN_SIZE_WIDESCREEN) + { + gdl = clear_framebuffer_black(gdl); + gdl = clear_framebuffer_black(gdl); + gdl = clear_framebuffer_black(gdl); } else { - // Node 4 - sp58 = temp_v1; - viShake(0, temp_a0, temp_a1, &sp4C); + gdl = clear_framebuffer_black(gdl); + gdl = clear_framebuffer_black(gdl); } - // Node 5 - sp74 = (f32) temp_v1->unk2C; - sp78 = (f32) temp_v1->unk30; - sp7C = (f32) temp_v1->unk34; - sp68 = (f32) temp_v1->unk38; - sp6C = (f32) temp_v1->unk3C; - sp70 = (f32) temp_v1->unk40; - sp5C = (f32) temp_v1->unk44; - sp60 = (f32) temp_v1->unk48; - sp64 = (f32) temp_v1->unk4C; } - // Node 6 - sub_GAME_7F0876C4(&sp74, &sp68, &sp5C); - sub_GAME_7F068190(&sp34, &sp40); - sp30 = sp44; - sp2C = sqrtf(((sp48 * sp48) + (sp40 * sp40))); - sp20 = get_curplay_vertical_rotation_in_degrees(); - temp_f2 = (atan2f(sp30, sp2C) + sp20); - phi_f16 = temp_f2; - if (D_8005526C <= temp_f2) - { - // Node 7 - phi_f16 = (temp_f2 - D_80055270); +#endif + + if (g_CurrentPlayer->cameramode == 1) { + cam_pos.x = g_CurrentPlayer->pos.x; + cam_pos.y = g_CurrentPlayer->pos.y; + cam_pos.z = g_CurrentPlayer->pos.z; + + cam_look.x = g_CurrentPlayer->pos2.x - g_CurrentPlayer->pos.x; + cam_look.y = g_CurrentPlayer->pos2.y - g_CurrentPlayer->pos.y; + cam_look.z = g_CurrentPlayer->pos2.z - g_CurrentPlayer->pos.z; + + cam_up.x = g_CurrentPlayer->offset.x; + cam_up.y = g_CurrentPlayer->offset.y; + cam_up.z = g_CurrentPlayer->offset.z; + } else { + collision = &g_CurrentPlayer->field_488; + + shake = ZeroCoordShake; + + if (!g_CurrentPlayer->bonddead) { + explosionScreenShake( + &collision->pos, + &collision->applied_view, + &shake + ); + } else { + viShake(0.0f); + } + + cam_pos.x = collision->pos.x; + cam_pos.y = collision->pos.y; + cam_pos.z = collision->pos.z; + + cam_look.x = collision->applied_view.x; + cam_look.y = collision->applied_view.y; + cam_look.z = collision->applied_view.z; + + cam_up.x = collision->applied_view2.x; + cam_up.y = collision->applied_view2.y; + cam_up.z = collision->applied_view2.z; } - // Node 8 - g_CurrentPlayer->field_2A08 = (f32) phi_f16; - temp_ret = atan2f(-sp40, -sp48); - phi_f2 = temp_ret; - if (D_80055274 <= temp_ret) - { - // Node 9 - phi_f2 = (temp_ret - D_80055278); + + bondviewUpdateCameraMatrices(&cam_pos, &cam_look, &cam_up); + sub_GAME_7F068190(&zeropos, &vec); + + + vec_y = vec.y; + horizontal_len = sqrtf((vec.z * vec.z) + (vec.x * vec.x)); + vertical_rot = bondviewGetPlayerPitchRadians(); + ft4 = atan2f(vec_y, horizontal_len) + vertical_rot; + + if (ft4 >= M_PI_F) { + ft4 -= M_TAU_F; } - // Node 10 - g_CurrentPlayer->field_2A0C = (f32) phi_f2; - return arg0; + g_CurrentPlayer->field_2A08 = ft4; + + angle = atan2f(-vec.x, -vec.z); + if (angle >= M_PI_F) { + angle -= M_TAU_F; + } + g_CurrentPlayer->field_2A0C = angle; + + return gdl; } -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_8005526C -.word 0x40490fdb /*3.1415927*/ -glabel D_80055270 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80055274 -.word 0x40490fdb /*3.1415927*/ -glabel D_80055278 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F087A08 -/* 0BC538 7F087A08 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BC53C 7F087A0C 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC540 7F087A10 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0BC544 7F087A14 AFBF0014 */ sw $ra, 0x14($sp) -/* 0BC548 7F087A18 AFA40080 */ sw $a0, 0x80($sp) -/* 0BC54C 7F087A1C 8C4E0000 */ lw $t6, ($v0) -/* 0BC550 7F087A20 24010001 */ li $at, 1 -/* 0BC554 7F087A24 3C0F8003 */ lui $t7, %hi(D_80036830) -/* 0BC558 7F087A28 15C1001A */ bne $t6, $at, .L7F087A94 -/* 0BC55C 7F087A2C 25EF6830 */ addiu $t7, %lo(D_80036830) # addiu $t7, $t7, 0x6830 -/* 0BC560 7F087A30 C4440004 */ lwc1 $f4, 4($v0) -/* 0BC564 7F087A34 E7A40074 */ swc1 $f4, 0x74($sp) -/* 0BC568 7F087A38 C4460008 */ lwc1 $f6, 8($v0) -/* 0BC56C 7F087A3C E7A60078 */ swc1 $f6, 0x78($sp) -/* 0BC570 7F087A40 C448000C */ lwc1 $f8, 0xc($v0) -/* 0BC574 7F087A44 E7A8007C */ swc1 $f8, 0x7c($sp) -/* 0BC578 7F087A48 C4520004 */ lwc1 $f18, 4($v0) -/* 0BC57C 7F087A4C C44A0010 */ lwc1 $f10, 0x10($v0) -/* 0BC580 7F087A50 46125101 */ sub.s $f4, $f10, $f18 -/* 0BC584 7F087A54 E7A40068 */ swc1 $f4, 0x68($sp) -/* 0BC588 7F087A58 C4480008 */ lwc1 $f8, 8($v0) -/* 0BC58C 7F087A5C C4460014 */ lwc1 $f6, 0x14($v0) -/* 0BC590 7F087A60 46083281 */ sub.s $f10, $f6, $f8 -/* 0BC594 7F087A64 E7AA006C */ swc1 $f10, 0x6c($sp) -/* 0BC598 7F087A68 C444000C */ lwc1 $f4, 0xc($v0) -/* 0BC59C 7F087A6C C4520018 */ lwc1 $f18, 0x18($v0) -/* 0BC5A0 7F087A70 46049181 */ sub.s $f6, $f18, $f4 -/* 0BC5A4 7F087A74 E7A60070 */ swc1 $f6, 0x70($sp) -/* 0BC5A8 7F087A78 C448001C */ lwc1 $f8, 0x1c($v0) -/* 0BC5AC 7F087A7C E7A8005C */ swc1 $f8, 0x5c($sp) -/* 0BC5B0 7F087A80 C44A0020 */ lwc1 $f10, 0x20($v0) -/* 0BC5B4 7F087A84 E7AA0060 */ swc1 $f10, 0x60($sp) -/* 0BC5B8 7F087A88 C4520024 */ lwc1 $f18, 0x24($v0) -/* 0BC5BC 7F087A8C 10000028 */ b .L7F087B30 -/* 0BC5C0 7F087A90 E7B20064 */ swc1 $f18, 0x64($sp) -.L7F087A94: -/* 0BC5C4 7F087A94 8DE10000 */ lw $at, ($t7) -/* 0BC5C8 7F087A98 27A6004C */ addiu $a2, $sp, 0x4c -/* 0BC5CC 7F087A9C 24430488 */ addiu $v1, $v0, 0x488 -/* 0BC5D0 7F087AA0 ACC10000 */ sw $at, ($a2) -/* 0BC5D4 7F087AA4 8DE80004 */ lw $t0, 4($t7) -/* 0BC5D8 7F087AA8 2464002C */ addiu $a0, $v1, 0x2c -/* 0BC5DC 7F087AAC 24650038 */ addiu $a1, $v1, 0x38 -/* 0BC5E0 7F087AB0 ACC80004 */ sw $t0, 4($a2) -/* 0BC5E4 7F087AB4 8DE10008 */ lw $at, 8($t7) -/* 0BC5E8 7F087AB8 ACC10008 */ sw $at, 8($a2) -/* 0BC5EC 7F087ABC 8C4900D8 */ lw $t1, 0xd8($v0) -/* 0BC5F0 7F087AC0 55200006 */ bnezl $t1, .L7F087ADC -/* 0BC5F4 7F087AC4 44806000 */ mtc1 $zero, $f12 -/* 0BC5F8 7F087AC8 0FC271F1 */ jal explosionScreenShake -/* 0BC5FC 7F087ACC AFA30058 */ sw $v1, 0x58($sp) -/* 0BC600 7F087AD0 10000005 */ b .L7F087AE8 -/* 0BC604 7F087AD4 8FA30058 */ lw $v1, 0x58($sp) -/* 0BC608 7F087AD8 44806000 */ mtc1 $zero, $f12 -.L7F087ADC: -/* 0BC60C 7F087ADC 0C000EC1 */ jal viShake -/* 0BC610 7F087AE0 AFA30058 */ sw $v1, 0x58($sp) -/* 0BC614 7F087AE4 8FA30058 */ lw $v1, 0x58($sp) -.L7F087AE8: -/* 0BC618 7F087AE8 C464002C */ lwc1 $f4, 0x2c($v1) -/* 0BC61C 7F087AEC E7A40074 */ swc1 $f4, 0x74($sp) -/* 0BC620 7F087AF0 C4660030 */ lwc1 $f6, 0x30($v1) -/* 0BC624 7F087AF4 E7A60078 */ swc1 $f6, 0x78($sp) -/* 0BC628 7F087AF8 C4680034 */ lwc1 $f8, 0x34($v1) -/* 0BC62C 7F087AFC E7A8007C */ swc1 $f8, 0x7c($sp) -/* 0BC630 7F087B00 C46A0038 */ lwc1 $f10, 0x38($v1) -/* 0BC634 7F087B04 E7AA0068 */ swc1 $f10, 0x68($sp) -/* 0BC638 7F087B08 C472003C */ lwc1 $f18, 0x3c($v1) -/* 0BC63C 7F087B0C E7B2006C */ swc1 $f18, 0x6c($sp) -/* 0BC640 7F087B10 C4640040 */ lwc1 $f4, 0x40($v1) -/* 0BC644 7F087B14 E7A40070 */ swc1 $f4, 0x70($sp) -/* 0BC648 7F087B18 C4660044 */ lwc1 $f6, 0x44($v1) -/* 0BC64C 7F087B1C E7A6005C */ swc1 $f6, 0x5c($sp) -/* 0BC650 7F087B20 C4680048 */ lwc1 $f8, 0x48($v1) -/* 0BC654 7F087B24 E7A80060 */ swc1 $f8, 0x60($sp) -/* 0BC658 7F087B28 C46A004C */ lwc1 $f10, 0x4c($v1) -/* 0BC65C 7F087B2C E7AA0064 */ swc1 $f10, 0x64($sp) -.L7F087B30: -/* 0BC660 7F087B30 27A40074 */ addiu $a0, $sp, 0x74 -/* 0BC664 7F087B34 27A50068 */ addiu $a1, $sp, 0x68 -/* 0BC668 7F087B38 0FC21DB1 */ jal sub_GAME_7F0876C4 -/* 0BC66C 7F087B3C 27A6005C */ addiu $a2, $sp, 0x5c -/* 0BC670 7F087B40 27A40034 */ addiu $a0, $sp, 0x34 -/* 0BC674 7F087B44 0FC1A064 */ jal sub_GAME_7F068190 -/* 0BC678 7F087B48 27A50040 */ addiu $a1, $sp, 0x40 -/* 0BC67C 7F087B4C C7A00048 */ lwc1 $f0, 0x48($sp) -/* 0BC680 7F087B50 C7A20040 */ lwc1 $f2, 0x40($sp) -/* 0BC684 7F087B54 C7B20044 */ lwc1 $f18, 0x44($sp) -/* 0BC688 7F087B58 46000102 */ mul.s $f4, $f0, $f0 -/* 0BC68C 7F087B5C E7B20030 */ swc1 $f18, 0x30($sp) -/* 0BC690 7F087B60 46021182 */ mul.s $f6, $f2, $f2 -/* 0BC694 7F087B64 0C007DF8 */ jal sqrtf -/* 0BC698 7F087B68 46062300 */ add.s $f12, $f4, $f6 -/* 0BC69C 7F087B6C 0FC227C4 */ jal get_curplay_vertical_rotation_in_degrees -/* 0BC6A0 7F087B70 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 0BC6A4 7F087B74 E7A00020 */ swc1 $f0, 0x20($sp) -/* 0BC6A8 7F087B78 C7AC0030 */ lwc1 $f12, 0x30($sp) -/* 0BC6AC 7F087B7C 0FC16A8C */ jal atan2f -/* 0BC6B0 7F087B80 C7AE002C */ lwc1 $f14, 0x2c($sp) -/* 0BC6B4 7F087B84 C7A80020 */ lwc1 $f8, 0x20($sp) -/* 0BC6B8 7F087B88 3C018005 */ lui $at, %hi(D_8005526C) -/* 0BC6BC 7F087B8C C42A526C */ lwc1 $f10, %lo(D_8005526C)($at) -/* 0BC6C0 7F087B90 46080080 */ add.s $f2, $f0, $f8 -/* 0BC6C4 7F087B94 3C018005 */ lui $at, %hi(D_80055270) -/* 0BC6C8 7F087B98 3C0A8008 */ lui $t2, %hi(g_CurrentPlayer) -/* 0BC6CC 7F087B9C 4602503E */ c.le.s $f10, $f2 -/* 0BC6D0 7F087BA0 46001406 */ mov.s $f16, $f2 -/* 0BC6D4 7F087BA4 45000003 */ bc1f .L7F087BB4 -/* 0BC6D8 7F087BA8 00000000 */ nop -/* 0BC6DC 7F087BAC C4325270 */ lwc1 $f18, %lo(D_80055270)($at) -/* 0BC6E0 7F087BB0 46121401 */ sub.s $f16, $f2, $f18 -.L7F087BB4: -/* 0BC6E4 7F087BB4 8D4AA0B0 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 0BC6E8 7F087BB8 E5502A08 */ swc1 $f16, 0x2a08($t2) -/* 0BC6EC 7F087BBC C7AE0048 */ lwc1 $f14, 0x48($sp) -/* 0BC6F0 7F087BC0 C7AC0040 */ lwc1 $f12, 0x40($sp) -/* 0BC6F4 7F087BC4 46007387 */ neg.s $f14, $f14 -/* 0BC6F8 7F087BC8 0FC16A8C */ jal atan2f -/* 0BC6FC 7F087BCC 46006307 */ neg.s $f12, $f12 -/* 0BC700 7F087BD0 3C018005 */ lui $at, %hi(D_80055274) -/* 0BC704 7F087BD4 C4245274 */ lwc1 $f4, %lo(D_80055274)($at) -/* 0BC708 7F087BD8 46000086 */ mov.s $f2, $f0 -/* 0BC70C 7F087BDC 3C018005 */ lui $at, %hi(D_80055278) -/* 0BC710 7F087BE0 4600203E */ c.le.s $f4, $f0 -/* 0BC714 7F087BE4 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) -/* 0BC718 7F087BE8 45000003 */ bc1f .L7F087BF8 -/* 0BC71C 7F087BEC 00000000 */ nop -/* 0BC720 7F087BF0 C4265278 */ lwc1 $f6, %lo(D_80055278)($at) -/* 0BC724 7F087BF4 46060081 */ sub.s $f2, $f0, $f6 -.L7F087BF8: -/* 0BC728 7F087BF8 8D6BA0B0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0BC72C 7F087BFC E5622A0C */ swc1 $f2, 0x2a0c($t3) -/* 0BC730 7F087C00 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BC734 7F087C04 8FA20080 */ lw $v0, 0x80($sp) -/* 0BC738 7F087C08 27BD0080 */ addiu $sp, $sp, 0x80 -/* 0BC73C 7F087C0C 03E00008 */ jr $ra -/* 0BC740 7F087C10 00000000 */ nop -) -#endif -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_8005526C -.word 0x40490fdb /*3.1415927*/ -glabel D_80055270 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80055274 -.word 0x40490fdb /*3.1415927*/ -glabel D_80055278 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F087A08 -/* 0BA4C0 7F087AD0 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0BA4C4 7F087AD4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0BA4C8 7F087AD8 0C001769 */ jal bossGetStageNum -/* 0BA4CC 7F087ADC AFA40080 */ sw $a0, 0x80($sp) -/* 0BA4D0 7F087AE0 24010036 */ li $at, 54 -/* 0BA4D4 7F087AE4 14410022 */ bne $v0, $at, .L7F087B70 -/* 0BA4D8 7F087AE8 00000000 */ nop -/* 0BA4DC 7F087AEC 0FC2907A */ jal cur_player_get_screen_setting -/* 0BA4E0 7F087AF0 00000000 */ nop -/* 0BA4E4 7F087AF4 24010002 */ li $at, 2 -/* 0BA4E8 7F087AF8 1441000B */ bne $v0, $at, .L7F087B28 -/* 0BA4EC 7F087AFC 00000000 */ nop -/* 0BA4F0 7F087B00 0FC06FCC */ jal insert_imageDL -/* 0BA4F4 7F087B04 8FA40080 */ lw $a0, 0x80($sp) -/* 0BA4F8 7F087B08 0FC06FCC */ jal insert_imageDL -/* 0BA4FC 7F087B0C 00402025 */ move $a0, $v0 -/* 0BA500 7F087B10 0FC06FCC */ jal insert_imageDL -/* 0BA504 7F087B14 00402025 */ move $a0, $v0 -/* 0BA508 7F087B18 0FC06FCC */ jal insert_imageDL -/* 0BA50C 7F087B1C 00402025 */ move $a0, $v0 -/* 0BA510 7F087B20 10000013 */ b .L7F087B70 -/* 0BA514 7F087B24 AFA20080 */ sw $v0, 0x80($sp) -.L7F087B28: -/* 0BA518 7F087B28 0FC2907A */ jal cur_player_get_screen_setting -/* 0BA51C 7F087B2C 00000000 */ nop -/* 0BA520 7F087B30 24010001 */ li $at, 1 -/* 0BA524 7F087B34 14410009 */ bne $v0, $at, .L7F087B5C -/* 0BA528 7F087B38 00000000 */ nop -/* 0BA52C 7F087B3C 0FC06FCC */ jal insert_imageDL -/* 0BA530 7F087B40 8FA40080 */ lw $a0, 0x80($sp) -/* 0BA534 7F087B44 0FC06FCC */ jal insert_imageDL -/* 0BA538 7F087B48 00402025 */ move $a0, $v0 -/* 0BA53C 7F087B4C 0FC06FCC */ jal insert_imageDL -/* 0BA540 7F087B50 00402025 */ move $a0, $v0 -/* 0BA544 7F087B54 10000006 */ b .L7F087B70 -/* 0BA548 7F087B58 AFA20080 */ sw $v0, 0x80($sp) -.L7F087B5C: -/* 0BA54C 7F087B5C 0FC06FCC */ jal insert_imageDL -/* 0BA550 7F087B60 8FA40080 */ lw $a0, 0x80($sp) -/* 0BA554 7F087B64 0FC06FCC */ jal insert_imageDL -/* 0BA558 7F087B68 00402025 */ move $a0, $v0 -/* 0BA55C 7F087B6C AFA20080 */ sw $v0, 0x80($sp) -.L7F087B70: -/* 0BA560 7F087B70 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BA564 7F087B74 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BA568 7F087B78 24010001 */ li $at, 1 -/* 0BA56C 7F087B7C 3C0F8003 */ lui $t7, %hi(D_80036830) # $t7, 0x8003 -/* 0BA570 7F087B80 8C4E0000 */ lw $t6, ($v0) -/* 0BA574 7F087B84 25EF1D80 */ addiu $t7, %lo(D_80036830) # addiu $t7, $t7, 0x1d80 -/* 0BA578 7F087B88 55C1001B */ bnel $t6, $at, .L7F087BF8 -/* 0BA57C 7F087B8C 8DE10000 */ lw $at, ($t7) -/* 0BA580 7F087B90 C4440004 */ lwc1 $f4, 4($v0) -/* 0BA584 7F087B94 E7A40074 */ swc1 $f4, 0x74($sp) -/* 0BA588 7F087B98 C4460008 */ lwc1 $f6, 8($v0) -/* 0BA58C 7F087B9C E7A60078 */ swc1 $f6, 0x78($sp) -/* 0BA590 7F087BA0 C448000C */ lwc1 $f8, 0xc($v0) -/* 0BA594 7F087BA4 E7A8007C */ swc1 $f8, 0x7c($sp) -/* 0BA598 7F087BA8 C4520004 */ lwc1 $f18, 4($v0) -/* 0BA59C 7F087BAC C44A0010 */ lwc1 $f10, 0x10($v0) -/* 0BA5A0 7F087BB0 46125101 */ sub.s $f4, $f10, $f18 -/* 0BA5A4 7F087BB4 E7A40068 */ swc1 $f4, 0x68($sp) -/* 0BA5A8 7F087BB8 C4480008 */ lwc1 $f8, 8($v0) -/* 0BA5AC 7F087BBC C4460014 */ lwc1 $f6, 0x14($v0) -/* 0BA5B0 7F087BC0 46083281 */ sub.s $f10, $f6, $f8 -/* 0BA5B4 7F087BC4 E7AA006C */ swc1 $f10, 0x6c($sp) -/* 0BA5B8 7F087BC8 C444000C */ lwc1 $f4, 0xc($v0) -/* 0BA5BC 7F087BCC C4520018 */ lwc1 $f18, 0x18($v0) -/* 0BA5C0 7F087BD0 46049181 */ sub.s $f6, $f18, $f4 -/* 0BA5C4 7F087BD4 E7A60070 */ swc1 $f6, 0x70($sp) -/* 0BA5C8 7F087BD8 C448001C */ lwc1 $f8, 0x1c($v0) -/* 0BA5CC 7F087BDC E7A8005C */ swc1 $f8, 0x5c($sp) -/* 0BA5D0 7F087BE0 C44A0020 */ lwc1 $f10, 0x20($v0) -/* 0BA5D4 7F087BE4 E7AA0060 */ swc1 $f10, 0x60($sp) -/* 0BA5D8 7F087BE8 C4520024 */ lwc1 $f18, 0x24($v0) -/* 0BA5DC 7F087BEC 10000028 */ b .L7F087C90 -/* 0BA5E0 7F087BF0 E7B20064 */ swc1 $f18, 0x64($sp) -/* 0BA5E4 7F087BF4 8DE10000 */ lw $at, ($t7) -.L7F087BF8: -/* 0BA5E8 7F087BF8 27A6004C */ addiu $a2, $sp, 0x4c -/* 0BA5EC 7F087BFC 24430488 */ addiu $v1, $v0, 0x488 -/* 0BA5F0 7F087C00 ACC10000 */ sw $at, ($a2) -/* 0BA5F4 7F087C04 8DE80004 */ lw $t0, 4($t7) -/* 0BA5F8 7F087C08 2464002C */ addiu $a0, $v1, 0x2c -/* 0BA5FC 7F087C0C 24650038 */ addiu $a1, $v1, 0x38 -/* 0BA600 7F087C10 ACC80004 */ sw $t0, 4($a2) -/* 0BA604 7F087C14 8DE10008 */ lw $at, 8($t7) -/* 0BA608 7F087C18 ACC10008 */ sw $at, 8($a2) -/* 0BA60C 7F087C1C 8C4900D8 */ lw $t1, 0xd8($v0) -/* 0BA610 7F087C20 55200006 */ bnezl $t1, .L7F087C3C -/* 0BA614 7F087C24 44806000 */ mtc1 $zero, $f12 -/* 0BA618 7F087C28 0FC26F36 */ jal explosionScreenShake -/* 0BA61C 7F087C2C AFA30058 */ sw $v1, 0x58($sp) -/* 0BA620 7F087C30 10000005 */ b .L7F087C48 -/* 0BA624 7F087C34 8FA30058 */ lw $v1, 0x58($sp) -/* 0BA628 7F087C38 44806000 */ mtc1 $zero, $f12 -.L7F087C3C: -/* 0BA62C 7F087C3C 0C000D55 */ jal viShake -/* 0BA630 7F087C40 AFA30058 */ sw $v1, 0x58($sp) -/* 0BA634 7F087C44 8FA30058 */ lw $v1, 0x58($sp) -.L7F087C48: -/* 0BA638 7F087C48 C464002C */ lwc1 $f4, 0x2c($v1) -/* 0BA63C 7F087C4C E7A40074 */ swc1 $f4, 0x74($sp) -/* 0BA640 7F087C50 C4660030 */ lwc1 $f6, 0x30($v1) -/* 0BA644 7F087C54 E7A60078 */ swc1 $f6, 0x78($sp) -/* 0BA648 7F087C58 C4680034 */ lwc1 $f8, 0x34($v1) -/* 0BA64C 7F087C5C E7A8007C */ swc1 $f8, 0x7c($sp) -/* 0BA650 7F087C60 C46A0038 */ lwc1 $f10, 0x38($v1) -/* 0BA654 7F087C64 E7AA0068 */ swc1 $f10, 0x68($sp) -/* 0BA658 7F087C68 C472003C */ lwc1 $f18, 0x3c($v1) -/* 0BA65C 7F087C6C E7B2006C */ swc1 $f18, 0x6c($sp) -/* 0BA660 7F087C70 C4640040 */ lwc1 $f4, 0x40($v1) -/* 0BA664 7F087C74 E7A40070 */ swc1 $f4, 0x70($sp) -/* 0BA668 7F087C78 C4660044 */ lwc1 $f6, 0x44($v1) -/* 0BA66C 7F087C7C E7A6005C */ swc1 $f6, 0x5c($sp) -/* 0BA670 7F087C80 C4680048 */ lwc1 $f8, 0x48($v1) -/* 0BA674 7F087C84 E7A80060 */ swc1 $f8, 0x60($sp) -/* 0BA678 7F087C88 C46A004C */ lwc1 $f10, 0x4c($v1) -/* 0BA67C 7F087C8C E7AA0064 */ swc1 $f10, 0x64($sp) -.L7F087C90: -/* 0BA680 7F087C90 27A40074 */ addiu $a0, $sp, 0x74 -/* 0BA684 7F087C94 27A50068 */ addiu $a1, $sp, 0x68 -/* 0BA688 7F087C98 0FC21DE3 */ jal sub_GAME_7F0876C4 -/* 0BA68C 7F087C9C 27A6005C */ addiu $a2, $sp, 0x5c -/* 0BA690 7F087CA0 27A40034 */ addiu $a0, $sp, 0x34 -/* 0BA694 7F087CA4 0FC1A24E */ jal sub_GAME_7F068190 -/* 0BA698 7F087CA8 27A50040 */ addiu $a1, $sp, 0x40 -/* 0BA69C 7F087CAC C7A00048 */ lwc1 $f0, 0x48($sp) -/* 0BA6A0 7F087CB0 C7A20040 */ lwc1 $f2, 0x40($sp) -/* 0BA6A4 7F087CB4 C7B20044 */ lwc1 $f18, 0x44($sp) -/* 0BA6A8 7F087CB8 46000102 */ mul.s $f4, $f0, $f0 -/* 0BA6AC 7F087CBC E7B20030 */ swc1 $f18, 0x30($sp) -/* 0BA6B0 7F087CC0 46021182 */ mul.s $f6, $f2, $f2 -/* 0BA6B4 7F087CC4 0C007614 */ jal sqrtf -/* 0BA6B8 7F087CC8 46062300 */ add.s $f12, $f4, $f6 -/* 0BA6BC 7F087CCC 0FC22837 */ jal get_curplay_vertical_rotation_in_degrees -/* 0BA6C0 7F087CD0 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 0BA6C4 7F087CD4 E7A00020 */ swc1 $f0, 0x20($sp) -/* 0BA6C8 7F087CD8 C7AC0030 */ lwc1 $f12, 0x30($sp) -/* 0BA6CC 7F087CDC 0FC16BB8 */ jal atan2f -/* 0BA6D0 7F087CE0 C7AE002C */ lwc1 $f14, 0x2c($sp) -/* 0BA6D4 7F087CE4 C7A80020 */ lwc1 $f8, 0x20($sp) -/* 0BA6D8 7F087CE8 3C018005 */ lui $at, %hi(D_8005526C) # $at, 0x8005 -/* 0BA6DC 7F087CEC C42AAE40 */ lwc1 $f10, %lo(D_8005526C)($at) -/* 0BA6E0 7F087CF0 46080080 */ add.s $f2, $f0, $f8 -/* 0BA6E4 7F087CF4 3C018005 */ lui $at, %hi(D_80055270) # $at, 0x8005 -/* 0BA6E8 7F087CF8 3C0A8007 */ lui $t2, %hi(g_CurrentPlayer) # $t2, 0x8007 -/* 0BA6EC 7F087CFC 4602503E */ c.le.s $f10, $f2 -/* 0BA6F0 7F087D00 46001406 */ mov.s $f16, $f2 -/* 0BA6F4 7F087D04 45000003 */ bc1f .L7F087D14 -/* 0BA6F8 7F087D08 00000000 */ nop -/* 0BA6FC 7F087D0C C432AE44 */ lwc1 $f18, %lo(D_80055270)($at) -/* 0BA700 7F087D10 46121401 */ sub.s $f16, $f2, $f18 -.L7F087D14: -/* 0BA704 7F087D14 8D4A8BC0 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 0BA708 7F087D18 E5502A00 */ swc1 $f16, 0x2a00($t2) -/* 0BA70C 7F087D1C C7AE0048 */ lwc1 $f14, 0x48($sp) -/* 0BA710 7F087D20 C7AC0040 */ lwc1 $f12, 0x40($sp) -/* 0BA714 7F087D24 46007387 */ neg.s $f14, $f14 -/* 0BA718 7F087D28 0FC16BB8 */ jal atan2f -/* 0BA71C 7F087D2C 46006307 */ neg.s $f12, $f12 -/* 0BA720 7F087D30 3C018005 */ lui $at, %hi(D_80055274) # $at, 0x8005 -/* 0BA724 7F087D34 C424AE48 */ lwc1 $f4, %lo(D_80055274)($at) -/* 0BA728 7F087D38 46000086 */ mov.s $f2, $f0 -/* 0BA72C 7F087D3C 3C018005 */ lui $at, %hi(D_80055278) # $at, 0x8005 -/* 0BA730 7F087D40 4600203E */ c.le.s $f4, $f0 -/* 0BA734 7F087D44 3C0B8007 */ lui $t3, %hi(g_CurrentPlayer) # $t3, 0x8007 -/* 0BA738 7F087D48 45000003 */ bc1f .L7F087D58 -/* 0BA73C 7F087D4C 00000000 */ nop -/* 0BA740 7F087D50 C426AE4C */ lwc1 $f6, %lo(D_80055278)($at) -/* 0BA744 7F087D54 46060081 */ sub.s $f2, $f0, $f6 -.L7F087D58: -/* 0BA748 7F087D58 8D6B8BC0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0BA74C 7F087D5C E5622A04 */ swc1 $f2, 0x2a04($t3) -/* 0BA750 7F087D60 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BA754 7F087D64 8FA20080 */ lw $v0, 0x80($sp) -/* 0BA758 7F087D68 27BD0080 */ addiu $sp, $sp, 0x80 -/* 0BA75C 7F087D6C 03E00008 */ jr $ra -/* 0BA760 7F087D70 00000000 */ nop -) -#endif -#endif +void bondviewSelectCuff(Model *model, ModelFileHeader *header, s32 switchindex) +{ + s32 pad; + s32 local; + ModelNode **switches; + ModelNode **base; + ModelNode *node; + s32 offset; + s32 *rwdata; + s32 index; + s32 visible; + s32 pad2; + local = fileGetBondForCurrentFolder(); + switches = header->Switches; + offset = switchindex << 2; -#ifdef NONMATCHING -s32 seems_to_load_cuff_microcode(s32 arg0, void *arg1, s32 arg2) { - s32 sp40; - s32 temp_a3; - void *temp_a0; - s32 temp_v1; - s32 temp_v1_2; - s32 temp_v1_3; - s32 temp_v1_4; - s32 temp_v1_5; - s32 temp_v1_6; - s32 temp_v0; - s32 temp_ret; - void *phi_a0; - s32 phi_a3; - s32 phi_v1; - void *phi_a0_2; - s32 phi_a2; - s32 phi_v1_2; - s32 phi_a3_2; - s32 phi_v1_3; - void *phi_a0_3; - s32 phi_a2_2; - s32 phi_v1_4; - s32 phi_a3_3; - void *phi_a0_4; - s32 phi_a2_3; - s32 phi_v1_5; - s32 phi_a3_4; - void *phi_a0_5; - s32 phi_a2_4; - s32 phi_v1_6; - s32 phi_a3_5; - s32 phi_return; + if (1); - // Node 0 - sp40 = fileGetBondForCurrentFolder(); - temp_a3 = (arg2 * 4); - temp_a0 = (arg1->unk8 + temp_a3); - phi_a0 = temp_a0; - phi_a3 = temp_a3; - if (*temp_a0 != 0) + // byte-indexed on purpose: offset = switchindex * 4. &switches[i] won't match. + base = (ModelNode **) (((u8 *) switches) + offset); + + if (base[0] != NULL) { - // Node 1 - *modelGetNodeRwData(arg0, *temp_a0, arg1->unk8, temp_a3) = (s32) ((u32) (g_CurrentPlayer->field_41C ^ 3) < 1U); - phi_a0 = (arg1->unk8 + sp1C); - phi_a3 = sp1C; + rwdata = (s32 *) modelGetNodeRwData(model, base[0]); + *rwdata = g_CurrentPlayer->bondtype == CUFF_BOILER; + switches = header->Switches; + base = (ModelNode **) (((u8 *) switches) + offset); } - // Node 2 - phi_a0_2 = phi_a0; - phi_a2 = arg1->unk8; - phi_v1_2 = arg2; - phi_a3_2 = phi_a3; - if (phi_a0->unk4 != 0) + + index = switchindex + 1; + + if (((void *) (index * 0)) != base[1]) { - // Node 3 - temp_v1 = ((u32) (g_CurrentPlayer->field_41C ^ 1) < 1U); - phi_v1 = temp_v1; - if (temp_v1 == 0) + node = switches[index]; + rwdata = (s32 *) modelGetNodeRwData(model, node); + visible = g_CurrentPlayer->bondtype == CUFF_BROSNAN; + if (visible == 0) { - // Node 4 - temp_v1_2 = ((u32) (g_CurrentPlayer->field_41C ^ 6) < 1U); - phi_v1 = temp_v1_2; - if (temp_v1_2 == 0) + visible = g_CurrentPlayer->bondtype == CUFF_DALTON; + if (visible == 0) { - // Node 5 - temp_v1_3 = ((u32) (g_CurrentPlayer->field_41C ^ 7) < 1U); - phi_v1 = temp_v1_3; - if (temp_v1_3 == 0) + visible = g_CurrentPlayer->bondtype == CUFF_MOORE; + if (visible == 0) { - // Node 6 - temp_v1_4 = ((u32) (g_CurrentPlayer->field_41C ^ 8) < 1U); - phi_v1 = temp_v1_4; - if (temp_v1_4 != 0) + visible = g_CurrentPlayer->bondtype == CUFF_FOLDER; + if (visible != 0) { - // Node 7 - phi_v1 = (0U < (u32) (sp40 ^ 1)); + visible = local != 1; } } } } - // Node 8 - *modelGetNodeRwData(arg0, *(arg1->unk8 + ((arg2 + 1) * 4)), arg1->unk8, phi_a3) = (s32) phi_v1; - phi_a0_2 = (arg1->unk8 + sp1C); - phi_a2 = arg1->unk8; - phi_v1_2 = arg2; - phi_a3_2 = sp1C; + *rwdata = visible; + switches = header->Switches; + base = (ModelNode **) (((u8 *) switches) + offset); } - // Node 9 - phi_a0_3 = phi_a0_2; - phi_a2_2 = phi_a2; - phi_v1_4 = phi_v1_2; - phi_a3_3 = phi_a3_2; - if (phi_a0_2->unk8 != 0) + + index = switchindex + 2; + + if (base[2] != NULL) { - // Node 10 - temp_v1_5 = ((u32) (g_CurrentPlayer->field_41C ^ 5) < 1U); - phi_v1_3 = temp_v1_5; - if (temp_v1_5 == 0) + rwdata = (s32 *) modelGetNodeRwData(model, switches[index]); + visible = g_CurrentPlayer->bondtype == CUFF_CONNERY; + + if (visible == 0) { - // Node 11 - temp_v1_6 = ((u32) (g_CurrentPlayer->field_41C ^ 8) < 1U); - phi_v1_3 = temp_v1_6; - if (temp_v1_6 != 0) + visible = g_CurrentPlayer->bondtype == CUFF_FOLDER; + if (visible != 0) { - // Node 12 - phi_v1_3 = ((u32) (sp40 ^ 1) < 1U); + visible = local == 1; } } - // Node 13 - *modelGetNodeRwData(arg0, *(phi_a2 + ((phi_v1_2 + 2) * 4)), phi_a2, phi_a3_2) = (s32) phi_v1_3; - phi_a0_3 = (arg1->unk8 + sp1C); - phi_a2_2 = arg1->unk8; - phi_v1_4 = arg2; - phi_a3_3 = sp1C; + + *rwdata = visible; + switches = header->Switches; + base = (ModelNode **) (((u8 *) switches) + offset); } - // Node 14 - phi_a0_4 = phi_a0_3; - phi_a2_3 = phi_a2_2; - phi_v1_5 = phi_v1_4; - phi_a3_4 = phi_a3_3; - if (phi_a0_3->unkC != 0) + + index = switchindex + 3; + + if (base[3] != NULL) { - // Node 15 - *modelGetNodeRwData(arg0, *(phi_a2_2 + ((phi_v1_4 + 3) * 4)), phi_a2_2, phi_a3_3) = (s32) ((u32) g_CurrentPlayer->field_41C < 1U); - phi_a0_4 = (arg1->unk8 + sp1C); - phi_a2_3 = arg1->unk8; - phi_v1_5 = arg2; - phi_a3_4 = sp1C; + rwdata = (s32 *) modelGetNodeRwData(model, switches[index]); + *rwdata = g_CurrentPlayer->bondtype == CUFF_BLUE; + switches = header->Switches; + base = (ModelNode **) (((u8 *) switches) + offset); } - // Node 16 - phi_a0_5 = phi_a0_4; - phi_a2_4 = phi_a2_3; - phi_v1_6 = phi_v1_5; - phi_a3_5 = phi_a3_4; - if (phi_a0_4->unk10 != 0) + + index = (switchindex + 4) ^ (((switchindex + 4) ^ 0) * 0); + + if (base[4]) { - // Node 17 - *modelGetNodeRwData(arg0, *(phi_a2_3 + ((phi_v1_5 + 4) * 4)), phi_a2_3, phi_a3_4) = (s32) ((u32) (g_CurrentPlayer->field_41C ^ 2) < 1U); - phi_a0_5 = (arg1->unk8 + sp1C); - phi_a2_4 = arg1->unk8; - phi_v1_6 = arg2; - phi_a3_5 = sp1C; + rwdata = (s32 *) modelGetNodeRwData(model, switches[index]); + *rwdata = g_CurrentPlayer->bondtype == CUFF_JUNGLE; + switches = header->Switches; + base = (ModelNode **) (((u8 *) switches) + offset); } - // Node 18 - temp_v0 = (phi_v1_6 + 5); - phi_return = temp_v0; - if (phi_a0_5->unk14 != 0) + + index = switchindex + 5; + + if (base[5] != NULL) { - // Node 19 - temp_ret = modelGetNodeRwData(arg0, *(phi_a2_4 + (temp_v0 * 4)), phi_a2_4, phi_a3_5); - *temp_ret = (s32) ((u32) (g_CurrentPlayer->field_41C ^ 4) < 1U); - phi_return = temp_ret; + rwdata = (s32 *) modelGetNodeRwData(model, switches[index]); + *rwdata = g_CurrentPlayer->bondtype == CUFF_SNOW; } - // Node 20 - return phi_return; } -#else -GLOBAL_ASM( -.text -glabel seems_to_load_cuff_microcode -/* 0BC744 7F087C14 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0BC748 7F087C18 AFBF0014 */ sw $ra, 0x14($sp) -/* 0BC74C 7F087C1C AFA40048 */ sw $a0, 0x48($sp) -/* 0BC750 7F087C20 AFA5004C */ sw $a1, 0x4c($sp) -/* 0BC754 7F087C24 0FC0755B */ jal fileGetBondForCurrentFolder -/* 0BC758 7F087C28 AFA60050 */ sw $a2, 0x50($sp) -/* 0BC75C 7F087C2C 8FAE004C */ lw $t6, 0x4c($sp) -/* 0BC760 7F087C30 8FA30050 */ lw $v1, 0x50($sp) -/* 0BC764 7F087C34 AFA20040 */ sw $v0, 0x40($sp) -/* 0BC768 7F087C38 8DC60008 */ lw $a2, 8($t6) -/* 0BC76C 7F087C3C 00033880 */ sll $a3, $v1, 2 -/* 0BC770 7F087C40 00C72021 */ addu $a0, $a2, $a3 -/* 0BC774 7F087C44 8C850000 */ lw $a1, ($a0) -/* 0BC778 7F087C48 50A00010 */ beql $a1, $zero, .L7F087C8C -/* 0BC77C 7F087C4C 8C890004 */ lw $t1, 4($a0) -/* 0BC780 7F087C50 8FA40048 */ lw $a0, 0x48($sp) -/* 0BC784 7F087C54 0FC1B1E7 */ jal modelGetNodeRwData -/* 0BC788 7F087C58 AFA7001C */ sw $a3, 0x1c($sp) -/* 0BC78C 7F087C5C 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) -/* 0BC790 7F087C60 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0BC794 7F087C64 8FA7001C */ lw $a3, 0x1c($sp) -/* 0BC798 7F087C68 8DF8041C */ lw $t8, 0x41c($t7) -/* 0BC79C 7F087C6C 3B190003 */ xori $t9, $t8, 3 -/* 0BC7A0 7F087C70 2F390001 */ sltiu $t9, $t9, 1 -/* 0BC7A4 7F087C74 AC590000 */ sw $t9, ($v0) -/* 0BC7A8 7F087C78 8FA8004C */ lw $t0, 0x4c($sp) -/* 0BC7AC 7F087C7C 8FA30050 */ lw $v1, 0x50($sp) -/* 0BC7B0 7F087C80 8D060008 */ lw $a2, 8($t0) -/* 0BC7B4 7F087C84 00C72021 */ addu $a0, $a2, $a3 -/* 0BC7B8 7F087C88 8C890004 */ lw $t1, 4($a0) -.L7F087C8C: -/* 0BC7BC 7F087C8C 24620001 */ addiu $v0, $v1, 1 -/* 0BC7C0 7F087C90 00025080 */ sll $t2, $v0, 2 -/* 0BC7C4 7F087C94 11200021 */ beqz $t1, .L7F087D1C -/* 0BC7C8 7F087C98 00CA5821 */ addu $t3, $a2, $t2 -/* 0BC7CC 7F087C9C 8D650000 */ lw $a1, ($t3) -/* 0BC7D0 7F087CA0 AFA7001C */ sw $a3, 0x1c($sp) -/* 0BC7D4 7F087CA4 0FC1B1E7 */ jal modelGetNodeRwData -/* 0BC7D8 7F087CA8 8FA40048 */ lw $a0, 0x48($sp) -/* 0BC7DC 7F087CAC 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) -/* 0BC7E0 7F087CB0 8D8CA0B0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0BC7E4 7F087CB4 8FA7001C */ lw $a3, 0x1c($sp) -/* 0BC7E8 7F087CB8 8D84041C */ lw $a0, 0x41c($t4) -/* 0BC7EC 7F087CBC 38830001 */ xori $v1, $a0, 1 -/* 0BC7F0 7F087CC0 2C630001 */ sltiu $v1, $v1, 1 -/* 0BC7F4 7F087CC4 54600011 */ bnezl $v1, .L7F087D0C -/* 0BC7F8 7F087CC8 AC430000 */ sw $v1, ($v0) -/* 0BC7FC 7F087CCC 38830006 */ xori $v1, $a0, 6 -/* 0BC800 7F087CD0 2C630001 */ sltiu $v1, $v1, 1 -/* 0BC804 7F087CD4 5460000D */ bnezl $v1, .L7F087D0C -/* 0BC808 7F087CD8 AC430000 */ sw $v1, ($v0) -/* 0BC80C 7F087CDC 38830007 */ xori $v1, $a0, 7 -/* 0BC810 7F087CE0 2C630001 */ sltiu $v1, $v1, 1 -/* 0BC814 7F087CE4 54600009 */ bnezl $v1, .L7F087D0C -/* 0BC818 7F087CE8 AC430000 */ sw $v1, ($v0) -/* 0BC81C 7F087CEC 38830008 */ xori $v1, $a0, 8 -/* 0BC820 7F087CF0 2C630001 */ sltiu $v1, $v1, 1 -/* 0BC824 7F087CF4 50600005 */ beql $v1, $zero, .L7F087D0C -/* 0BC828 7F087CF8 AC430000 */ sw $v1, ($v0) -/* 0BC82C 7F087CFC 8FA30040 */ lw $v1, 0x40($sp) -/* 0BC830 7F087D00 386D0001 */ xori $t5, $v1, 1 -/* 0BC834 7F087D04 000D182B */ sltu $v1, $zero, $t5 -/* 0BC838 7F087D08 AC430000 */ sw $v1, ($v0) -.L7F087D0C: -/* 0BC83C 7F087D0C 8FAE004C */ lw $t6, 0x4c($sp) -/* 0BC840 7F087D10 8FA30050 */ lw $v1, 0x50($sp) -/* 0BC844 7F087D14 8DC60008 */ lw $a2, 8($t6) -/* 0BC848 7F087D18 00C72021 */ addu $a0, $a2, $a3 -.L7F087D1C: -/* 0BC84C 7F087D1C 8C8F0008 */ lw $t7, 8($a0) -/* 0BC850 7F087D20 24620002 */ addiu $v0, $v1, 2 -/* 0BC854 7F087D24 0002C080 */ sll $t8, $v0, 2 -/* 0BC858 7F087D28 11E00019 */ beqz $t7, .L7F087D90 -/* 0BC85C 7F087D2C 00D8C821 */ addu $t9, $a2, $t8 -/* 0BC860 7F087D30 8F250000 */ lw $a1, ($t9) -/* 0BC864 7F087D34 AFA7001C */ sw $a3, 0x1c($sp) -/* 0BC868 7F087D38 0FC1B1E7 */ jal modelGetNodeRwData -/* 0BC86C 7F087D3C 8FA40048 */ lw $a0, 0x48($sp) -/* 0BC870 7F087D40 3C088008 */ lui $t0, %hi(g_CurrentPlayer) -/* 0BC874 7F087D44 8D08A0B0 */ lw $t0, %lo(g_CurrentPlayer)($t0) -/* 0BC878 7F087D48 8FA7001C */ lw $a3, 0x1c($sp) -/* 0BC87C 7F087D4C 8D04041C */ lw $a0, 0x41c($t0) -/* 0BC880 7F087D50 38830005 */ xori $v1, $a0, 5 -/* 0BC884 7F087D54 2C630001 */ sltiu $v1, $v1, 1 -/* 0BC888 7F087D58 54600009 */ bnezl $v1, .L7F087D80 -/* 0BC88C 7F087D5C AC430000 */ sw $v1, ($v0) -/* 0BC890 7F087D60 38830008 */ xori $v1, $a0, 8 -/* 0BC894 7F087D64 2C630001 */ sltiu $v1, $v1, 1 -/* 0BC898 7F087D68 50600005 */ beql $v1, $zero, .L7F087D80 -/* 0BC89C 7F087D6C AC430000 */ sw $v1, ($v0) -/* 0BC8A0 7F087D70 8FA30040 */ lw $v1, 0x40($sp) -/* 0BC8A4 7F087D74 38690001 */ xori $t1, $v1, 1 -/* 0BC8A8 7F087D78 2D230001 */ sltiu $v1, $t1, 1 -/* 0BC8AC 7F087D7C AC430000 */ sw $v1, ($v0) -.L7F087D80: -/* 0BC8B0 7F087D80 8FAA004C */ lw $t2, 0x4c($sp) -/* 0BC8B4 7F087D84 8FA30050 */ lw $v1, 0x50($sp) -/* 0BC8B8 7F087D88 8D460008 */ lw $a2, 8($t2) -/* 0BC8BC 7F087D8C 00C72021 */ addu $a0, $a2, $a3 -.L7F087D90: -/* 0BC8C0 7F087D90 8C8B000C */ lw $t3, 0xc($a0) -/* 0BC8C4 7F087D94 24620003 */ addiu $v0, $v1, 3 -/* 0BC8C8 7F087D98 00026080 */ sll $t4, $v0, 2 -/* 0BC8CC 7F087D9C 1160000F */ beqz $t3, .L7F087DDC -/* 0BC8D0 7F087DA0 00CC6821 */ addu $t5, $a2, $t4 -/* 0BC8D4 7F087DA4 8DA50000 */ lw $a1, ($t5) -/* 0BC8D8 7F087DA8 AFA7001C */ sw $a3, 0x1c($sp) -/* 0BC8DC 7F087DAC 0FC1B1E7 */ jal modelGetNodeRwData -/* 0BC8E0 7F087DB0 8FA40048 */ lw $a0, 0x48($sp) -/* 0BC8E4 7F087DB4 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 0BC8E8 7F087DB8 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0BC8EC 7F087DBC 8FA7001C */ lw $a3, 0x1c($sp) -/* 0BC8F0 7F087DC0 8DCF041C */ lw $t7, 0x41c($t6) -/* 0BC8F4 7F087DC4 2DF80001 */ sltiu $t8, $t7, 1 -/* 0BC8F8 7F087DC8 AC580000 */ sw $t8, ($v0) -/* 0BC8FC 7F087DCC 8FB9004C */ lw $t9, 0x4c($sp) -/* 0BC900 7F087DD0 8FA30050 */ lw $v1, 0x50($sp) -/* 0BC904 7F087DD4 8F260008 */ lw $a2, 8($t9) -/* 0BC908 7F087DD8 00C72021 */ addu $a0, $a2, $a3 -.L7F087DDC: -/* 0BC90C 7F087DDC 8C880010 */ lw $t0, 0x10($a0) -/* 0BC910 7F087DE0 24620004 */ addiu $v0, $v1, 4 -/* 0BC914 7F087DE4 00024880 */ sll $t1, $v0, 2 -/* 0BC918 7F087DE8 11000010 */ beqz $t0, .L7F087E2C -/* 0BC91C 7F087DEC 00C95021 */ addu $t2, $a2, $t1 -/* 0BC920 7F087DF0 8D450000 */ lw $a1, ($t2) -/* 0BC924 7F087DF4 AFA7001C */ sw $a3, 0x1c($sp) -/* 0BC928 7F087DF8 0FC1B1E7 */ jal modelGetNodeRwData -/* 0BC92C 7F087DFC 8FA40048 */ lw $a0, 0x48($sp) -/* 0BC930 7F087E00 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) -/* 0BC934 7F087E04 8D6BA0B0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0BC938 7F087E08 8FA7001C */ lw $a3, 0x1c($sp) -/* 0BC93C 7F087E0C 8D6C041C */ lw $t4, 0x41c($t3) -/* 0BC940 7F087E10 398D0002 */ xori $t5, $t4, 2 -/* 0BC944 7F087E14 2DAD0001 */ sltiu $t5, $t5, 1 -/* 0BC948 7F087E18 AC4D0000 */ sw $t5, ($v0) -/* 0BC94C 7F087E1C 8FAE004C */ lw $t6, 0x4c($sp) -/* 0BC950 7F087E20 8FA30050 */ lw $v1, 0x50($sp) -/* 0BC954 7F087E24 8DC60008 */ lw $a2, 8($t6) -/* 0BC958 7F087E28 00C72021 */ addu $a0, $a2, $a3 -.L7F087E2C: -/* 0BC95C 7F087E2C 8C8F0014 */ lw $t7, 0x14($a0) -/* 0BC960 7F087E30 24620005 */ addiu $v0, $v1, 5 -/* 0BC964 7F087E34 0002C080 */ sll $t8, $v0, 2 -/* 0BC968 7F087E38 11E0000A */ beqz $t7, .L7F087E64 -/* 0BC96C 7F087E3C 8FA40048 */ lw $a0, 0x48($sp) -/* 0BC970 7F087E40 00D8C821 */ addu $t9, $a2, $t8 -/* 0BC974 7F087E44 0FC1B1E7 */ jal modelGetNodeRwData -/* 0BC978 7F087E48 8F250000 */ lw $a1, ($t9) -/* 0BC97C 7F087E4C 3C088008 */ lui $t0, %hi(g_CurrentPlayer) -/* 0BC980 7F087E50 8D08A0B0 */ lw $t0, %lo(g_CurrentPlayer)($t0) -/* 0BC984 7F087E54 8D09041C */ lw $t1, 0x41c($t0) -/* 0BC988 7F087E58 392A0004 */ xori $t2, $t1, 4 -/* 0BC98C 7F087E5C 2D4A0001 */ sltiu $t2, $t2, 1 -/* 0BC990 7F087E60 AC4A0000 */ sw $t2, ($v0) -.L7F087E64: -/* 0BC994 7F087E64 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BC998 7F087E68 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0BC99C 7F087E6C 03E00008 */ jr $ra -/* 0BC9A0 7F087E70 00000000 */ nop -) -#endif - - - -#ifdef NONMATCHING -void sub_GAME_7F087E74(void) { - -} -#else -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel D_8005527C -.word 0x3c8efa35 /*0.017453292*/ -glabel D_80055280 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F087E74 -/* 0BC9A4 7F087E74 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BC9A8 7F087E78 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC9AC 7F087E7C 27BDFE08 */ addiu $sp, $sp, -0x1f8 -/* 0BC9B0 7F087E80 AFBF002C */ sw $ra, 0x2c($sp) -/* 0BC9B4 7F087E84 AFA401F8 */ sw $a0, 0x1f8($sp) -/* 0BC9B8 7F087E88 8C4E01C8 */ lw $t6, 0x1c8($v0) -/* 0BC9BC 7F087E8C 51C001DE */ beql $t6, $zero, .L7F088608 -/* 0BC9C0 7F087E90 8FBF002C */ lw $ra, 0x2c($sp) -/* 0BC9C4 7F087E94 8C4F0200 */ lw $t7, 0x200($v0) -/* 0BC9C8 7F087E98 3C198003 */ lui $t9, %hi(D_8003683C) -/* 0BC9CC 7F087E9C 2739683C */ addiu $t9, %lo(D_8003683C) # addiu $t9, $t9, 0x683c -/* 0BC9D0 7F087EA0 11E001D8 */ beqz $t7, .L7F088604 -/* 0BC9D4 7F087EA4 27B801B8 */ addiu $t8, $sp, 0x1b8 -/* 0BC9D8 7F087EA8 272B003C */ addiu $t3, $t9, 0x3c -.L7F087EAC: -/* 0BC9DC 7F087EAC 8F210000 */ lw $at, ($t9) -/* 0BC9E0 7F087EB0 2739000C */ addiu $t9, $t9, 0xc -/* 0BC9E4 7F087EB4 2718000C */ addiu $t8, $t8, 0xc -/* 0BC9E8 7F087EB8 AF01FFF4 */ sw $at, -0xc($t8) -/* 0BC9EC 7F087EBC 8F21FFF8 */ lw $at, -8($t9) -/* 0BC9F0 7F087EC0 AF01FFF8 */ sw $at, -8($t8) -/* 0BC9F4 7F087EC4 8F21FFFC */ lw $at, -4($t9) -/* 0BC9F8 7F087EC8 172BFFF8 */ bne $t9, $t3, .L7F087EAC -/* 0BC9FC 7F087ECC AF01FFFC */ sw $at, -4($t8) -/* 0BCA00 7F087ED0 8F210000 */ lw $at, ($t9) -/* 0BCA04 7F087ED4 3C0D8003 */ lui $t5, %hi(D_8003687C) -/* 0BCA08 7F087ED8 25AD687C */ addiu $t5, %lo(D_8003687C) # addiu $t5, $t5, 0x687c -/* 0BCA0C 7F087EDC AF010000 */ sw $at, ($t8) -/* 0BCA10 7F087EE0 8DA10000 */ lw $at, ($t5) -/* 0BCA14 7F087EE4 27AC016C */ addiu $t4, $sp, 0x16c -/* 0BCA18 7F087EE8 8DAF0004 */ lw $t7, 4($t5) -/* 0BCA1C 7F087EEC AD810000 */ sw $at, ($t4) -/* 0BCA20 7F087EF0 8DA10008 */ lw $at, 8($t5) -/* 0BCA24 7F087EF4 24040001 */ li $a0, 1 -/* 0BCA28 7F087EF8 AD8F0004 */ sw $t7, 4($t4) -/* 0BCA2C 7F087EFC 0FC173C6 */ jal get_ptr_itemheader_in_hand -/* 0BCA30 7F087F00 AD810008 */ sw $at, 8($t4) -/* 0BCA34 7F087F04 AFA20160 */ sw $v0, 0x160($sp) -/* 0BCA38 7F087F08 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 0BCA3C 7F087F0C 8C4A0008 */ lw $t2, 8($v0) -/* 0BCA40 7F087F10 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BCA44 7F087F14 8D45000C */ lw $a1, 0xc($t2) -/* 0BCA48 7F087F18 0FC1B1E7 */ jal modelGetNodeRwData -/* 0BCA4C 7F087F1C 24840230 */ addiu $a0, $a0, 0x230 -/* 0BCA50 7F087F20 0FC2F5B8 */ jal dynAllocateMatrix -/* 0BCA54 7F087F24 AFA20158 */ sw $v0, 0x158($sp) -/* 0BCA58 7F087F28 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 0BCA5C 7F087F2C 44812000 */ mtc1 $at, $f4 -/* 0BCA60 7F087F30 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) -/* 0BCA64 7F087F34 8D6BA0B0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0BCA68 7F087F38 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0BCA6C 7F087F3C 44813000 */ mtc1 $at, $f6 -/* 0BCA70 7F087F40 AFA20154 */ sw $v0, 0x154($sp) -/* 0BCA74 7F087F44 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BCA78 7F087F48 44814000 */ mtc1 $at, $f8 -/* 0BCA7C 7F087F4C 8D6611C4 */ lw $a2, 0x11c4($t3) -/* 0BCA80 7F087F50 3C073FBA */ lui $a3, (0x3FBA2E8C >> 16) # lui $a3, 0x3fba -/* 0BCA84 7F087F54 34E72E8C */ ori $a3, (0x3FBA2E8C & 0xFFFF) # ori $a3, $a3, 0x2e8c -/* 0BCA88 7F087F58 00402025 */ move $a0, $v0 -/* 0BCA8C 7F087F5C 27A50152 */ addiu $a1, $sp, 0x152 -/* 0BCA90 7F087F60 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0BCA94 7F087F64 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0BCA98 7F087F68 0C003FAC */ jal guPerspective -/* 0BCA9C 7F087F6C E7A80018 */ swc1 $f8, 0x18($sp) -/* 0BCAA0 7F087F70 8FA301F8 */ lw $v1, 0x1f8($sp) -/* 0BCAA4 7F087F74 3C190103 */ lui $t9, (0x01030040 >> 16) # lui $t9, 0x103 -/* 0BCAA8 7F087F78 37390040 */ ori $t9, (0x01030040 & 0xFFFF) # ori $t9, $t9, 0x40 -/* 0BCAAC 7F087F7C AC790000 */ sw $t9, ($v1) -/* 0BCAB0 7F087F80 8FB80154 */ lw $t8, 0x154($sp) -/* 0BCAB4 7F087F84 3C01C140 */ li $at, 0xC1400000 # -12.000000 -/* 0BCAB8 7F087F88 44810000 */ mtc1 $at, $f0 -/* 0BCABC 7F087F8C 3C018000 */ lui $at, 0x8000 -/* 0BCAC0 7F087F90 3C0CBC00 */ lui $t4, (0xBC00000E >> 16) # lui $t4, 0xbc00 -/* 0BCAC4 7F087F94 03017021 */ addu $t6, $t8, $at -/* 0BCAC8 7F087F98 358C000E */ ori $t4, (0xBC00000E & 0xFFFF) # ori $t4, $t4, 0xe -/* 0BCACC 7F087F9C AC6E0004 */ sw $t6, 4($v1) -/* 0BCAD0 7F087FA0 24670008 */ addiu $a3, $v1, 8 -/* 0BCAD4 7F087FA4 ACEC0000 */ sw $t4, ($a3) -/* 0BCAD8 7F087FA8 97AD0152 */ lhu $t5, 0x152($sp) -/* 0BCADC 7F087FAC 3C088008 */ lui $t0, %hi(g_CurrentPlayer) -/* 0BCAE0 7F087FB0 2508A0B0 */ addiu $t0, %lo(g_CurrentPlayer) # addiu $t0, $t0, -0x5f50 -/* 0BCAE4 7F087FB4 ACED0004 */ sw $t5, 4($a3) -/* 0BCAE8 7F087FB8 8D0F0000 */ lw $t7, ($t0) -/* 0BCAEC 7F087FBC 8FAB0158 */ lw $t3, 0x158($sp) -/* 0BCAF0 7F087FC0 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0BCAF4 7F087FC4 8DEA01CC */ lw $t2, 0x1cc($t7) -/* 0BCAF8 7F087FC8 24E90008 */ addiu $t1, $a3, 8 -/* 0BCAFC 7F087FCC 27A4016C */ addiu $a0, $sp, 0x16c -/* 0BCB00 7F087FD0 AD6A0000 */ sw $t2, ($t3) -/* 0BCB04 7F087FD4 8D020000 */ lw $v0, ($t0) -/* 0BCB08 7F087FD8 27A60178 */ addiu $a2, $sp, 0x178 -/* 0BCB0C 7F087FDC C444054C */ lwc1 $f4, 0x54c($v0) -/* 0BCB10 7F087FE0 C44A0498 */ lwc1 $f10, 0x498($v0) -/* 0BCB14 7F087FE4 46002180 */ add.s $f6, $f4, $f0 -/* 0BCB18 7F087FE8 C4440544 */ lwc1 $f4, 0x544($v0) -/* 0BCB1C 7F087FEC 46065202 */ mul.s $f8, $f10, $f6 -/* 0BCB20 7F087FF0 C44A04A0 */ lwc1 $f10, 0x4a0($v0) -/* 0BCB24 7F087FF4 46005187 */ neg.s $f6, $f10 -/* 0BCB28 7F087FF8 46062282 */ mul.s $f10, $f4, $f6 -/* 0BCB2C 7F087FFC C444048C */ lwc1 $f4, 0x48c($v0) -/* 0BCB30 7F088000 460A2180 */ add.s $f6, $f4, $f10 -/* 0BCB34 7F088004 46064100 */ add.s $f4, $f8, $f6 -/* 0BCB38 7F088008 E7A4016C */ swc1 $f4, 0x16c($sp) -/* 0BCB3C 7F08800C C4480490 */ lwc1 $f8, 0x490($v0) -/* 0BCB40 7F088010 C44A0548 */ lwc1 $f10, 0x548($v0) -/* 0BCB44 7F088014 46085180 */ add.s $f6, $f10, $f8 -/* 0BCB48 7F088018 E7A60170 */ swc1 $f6, 0x170($sp) -/* 0BCB4C 7F08801C C44A054C */ lwc1 $f10, 0x54c($v0) -/* 0BCB50 7F088020 C44404A0 */ lwc1 $f4, 0x4a0($v0) -/* 0BCB54 7F088024 46005200 */ add.s $f8, $f10, $f0 -/* 0BCB58 7F088028 C44A0544 */ lwc1 $f10, 0x544($v0) -/* 0BCB5C 7F08802C 46082182 */ mul.s $f6, $f4, $f8 -/* 0BCB60 7F088030 C4440498 */ lwc1 $f4, 0x498($v0) -/* 0BCB64 7F088034 46045202 */ mul.s $f8, $f10, $f4 -/* 0BCB68 7F088038 C44A0494 */ lwc1 $f10, 0x494($v0) -/* 0BCB6C 7F08803C 46085100 */ add.s $f4, $f10, $f8 -/* 0BCB70 7F088040 44814000 */ mtc1 $at, $f8 -/* 0BCB74 7F088044 3C018005 */ lui $at, %hi(D_8005527C) -/* 0BCB78 7F088048 46043280 */ add.s $f10, $f6, $f4 -/* 0BCB7C 7F08804C E7AA0174 */ swc1 $f10, 0x174($sp) -/* 0BCB80 7F088050 C4460148 */ lwc1 $f6, 0x148($v0) -/* 0BCB84 7F088054 C42A527C */ lwc1 $f10, %lo(D_8005527C)($at) -/* 0BCB88 7F088058 AFA901F8 */ sw $t1, 0x1f8($sp) -/* 0BCB8C 7F08805C 46064101 */ sub.s $f4, $f8, $f6 -/* 0BCB90 7F088060 460A2202 */ mul.s $f8, $f4, $f10 -/* 0BCB94 7F088064 44054000 */ mfc1 $a1, $f8 -/* 0BCB98 7F088068 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BCB9C 7F08806C 00000000 */ nop -/* 0BCBA0 7F088070 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 0BCBA4 7F088074 00000000 */ nop -/* 0BCBA8 7F088078 00402025 */ move $a0, $v0 -/* 0BCBAC 7F08807C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 0BCBB0 7F088080 27A50178 */ addiu $a1, $sp, 0x178 -/* 0BCBB4 7F088084 8FB90160 */ lw $t9, 0x160($sp) -/* 0BCBB8 7F088088 8724000E */ lh $a0, 0xe($t9) -/* 0BCBBC 7F08808C 0004C180 */ sll $t8, $a0, 6 -/* 0BCBC0 7F088090 0FC2F5C5 */ jal dynAllocate -/* 0BCBC4 7F088094 03002025 */ move $a0, $t8 -/* 0BCBC8 7F088098 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 0BCBCC 7F08809C 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BCBD0 7F0880A0 AFA20164 */ sw $v0, 0x164($sp) -/* 0BCBD4 7F0880A4 8FA50160 */ lw $a1, 0x160($sp) -/* 0BCBD8 7F0880A8 24060004 */ li $a2, 4 -/* 0BCBDC 7F0880AC 0FC21F05 */ jal seems_to_load_cuff_microcode -/* 0BCBE0 7F0880B0 24840230 */ addiu $a0, $a0, 0x230 -/* 0BCBE4 7F0880B4 3C058008 */ lui $a1, %hi(g_CurrentPlayer) -/* 0BCBE8 7F0880B8 8FAC0164 */ lw $t4, 0x164($sp) -/* 0BCBEC 7F0880BC 8CA5A0B0 */ lw $a1, %lo(g_CurrentPlayer)($a1) -/* 0BCBF0 7F0880C0 27AE0178 */ addiu $t6, $sp, 0x178 -/* 0BCBF4 7F0880C4 AFAE01B8 */ sw $t6, 0x1b8($sp) -/* 0BCBF8 7F0880C8 27A401B8 */ addiu $a0, $sp, 0x1b8 -/* 0BCBFC 7F0880CC AFAC01C8 */ sw $t4, 0x1c8($sp) -/* 0BCC00 7F0880D0 0FC1BCBE */ jal subcalcmatrices -/* 0BCC04 7F0880D4 24A50230 */ addiu $a1, $a1, 0x230 -/* 0BCC08 7F0880D8 8FAD0160 */ lw $t5, 0x160($sp) -/* 0BCC0C 7F0880DC 3C0B8008 */ lui $t3, %hi(watch_time_0) -/* 0BCC10 7F0880E0 8D6B9A24 */ lw $t3, %lo(watch_time_0)($t3) -/* 0BCC14 7F0880E4 8DAF0008 */ lw $t7, 8($t5) -/* 0BCC18 7F0880E8 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BCC1C 7F0880EC 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BCC20 7F0880F0 8DEA0000 */ lw $t2, ($t7) -/* 0BCC24 7F0880F4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BCC28 7F0880F8 44810000 */ mtc1 $at, $f0 -/* 0BCC2C 7F0880FC 8D430004 */ lw $v1, 4($t2) -/* 0BCC30 7F088100 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 0BCC34 7F088104 AFAB0090 */ sw $t3, 0x90($sp) -/* 0BCC38 7F088108 44812000 */ mtc1 $at, $f4 -/* 0BCC3C 7F08810C C4460258 */ lwc1 $f6, 0x258($v0) -/* 0BCC40 7F088110 46043383 */ div.s $f14, $f6, $f4 -/* 0BCC44 7F088114 460E003C */ c.lt.s $f0, $f14 -/* 0BCC48 7F088118 00000000 */ nop -/* 0BCC4C 7F08811C 45020003 */ bc1fl .L7F08812C -/* 0BCC50 7F088120 C46A0000 */ lwc1 $f10, ($v1) -/* 0BCC54 7F088124 46000386 */ mov.s $f14, $f0 -/* 0BCC58 7F088128 C46A0000 */ lwc1 $f10, ($v1) -.L7F08812C: -/* 0BCC5C 7F08812C C4480244 */ lwc1 $f8, 0x244($v0) -/* 0BCC60 7F088130 C44401D4 */ lwc1 $f4, 0x1d4($v0) -/* 0BCC64 7F088134 8FA80164 */ lw $t0, 0x164($sp) -/* 0BCC68 7F088138 46085182 */ mul.s $f6, $f10, $f8 -/* 0BCC6C 7F08813C 44808000 */ mtc1 $zero, $f16 -/* 0BCC70 7F088140 C5000030 */ lwc1 $f0, 0x30($t0) -/* 0BCC74 7F088144 27A40108 */ addiu $a0, $sp, 0x108 -/* 0BCC78 7F088148 44058000 */ mfc1 $a1, $f16 -/* 0BCC7C 7F08814C 44068000 */ mfc1 $a2, $f16 -/* 0BCC80 7F088150 44078000 */ mfc1 $a3, $f16 -/* 0BCC84 7F088154 46062281 */ sub.s $f10, $f4, $f6 -/* 0BCC88 7F088158 46005201 */ sub.s $f8, $f10, $f0 -/* 0BCC8C 7F08815C 460E4102 */ mul.s $f4, $f8, $f14 -/* 0BCC90 7F088160 46002180 */ add.s $f6, $f4, $f0 -/* 0BCC94 7F088164 E7A600B4 */ swc1 $f6, 0xb4($sp) -/* 0BCC98 7F088168 C4480244 */ lwc1 $f8, 0x244($v0) -/* 0BCC9C 7F08816C C46A0008 */ lwc1 $f10, 8($v1) -/* 0BCCA0 7F088170 C44601D8 */ lwc1 $f6, 0x1d8($v0) -/* 0BCCA4 7F088174 C5020034 */ lwc1 $f2, 0x34($t0) -/* 0BCCA8 7F088178 46085102 */ mul.s $f4, $f10, $f8 -/* 0BCCAC 7F08817C 46043280 */ add.s $f10, $f6, $f4 -/* 0BCCB0 7F088180 46025201 */ sub.s $f8, $f10, $f2 -/* 0BCCB4 7F088184 460E4182 */ mul.s $f6, $f8, $f14 -/* 0BCCB8 7F088188 46023100 */ add.s $f4, $f6, $f2 -/* 0BCCBC 7F08818C E7A400B8 */ swc1 $f4, 0xb8($sp) -/* 0BCCC0 7F088190 C4480244 */ lwc1 $f8, 0x244($v0) -/* 0BCCC4 7F088194 C46A0004 */ lwc1 $f10, 4($v1) -/* 0BCCC8 7F088198 C44401DC */ lwc1 $f4, 0x1dc($v0) -/* 0BCCCC 7F08819C C50C0038 */ lwc1 $f12, 0x38($t0) -/* 0BCCD0 7F0881A0 46085182 */ mul.s $f6, $f10, $f8 -/* 0BCCD4 7F0881A4 46062281 */ sub.s $f10, $f4, $f6 -/* 0BCCD8 7F0881A8 460C5201 */ sub.s $f8, $f10, $f12 -/* 0BCCDC 7F0881AC 460E4102 */ mul.s $f4, $f8, $f14 -/* 0BCCE0 7F0881B0 460C2180 */ add.s $f6, $f4, $f12 -/* 0BCCE4 7F0881B4 E7A600BC */ swc1 $f6, 0xbc($sp) -/* 0BCCE8 7F0881B8 C44A01E0 */ lwc1 $f10, 0x1e0($v0) -/* 0BCCEC 7F0881BC E7AA0010 */ swc1 $f10, 0x10($sp) -/* 0BCCF0 7F0881C0 C44801E4 */ lwc1 $f8, 0x1e4($v0) -/* 0BCCF4 7F0881C4 E7A80014 */ swc1 $f8, 0x14($sp) -/* 0BCCF8 7F0881C8 C44401E8 */ lwc1 $f4, 0x1e8($v0) -/* 0BCCFC 7F0881CC E7A40018 */ swc1 $f4, 0x18($sp) -/* 0BCD00 7F0881D0 C44601EC */ lwc1 $f6, 0x1ec($v0) -/* 0BCD04 7F0881D4 E7A6001C */ swc1 $f6, 0x1c($sp) -/* 0BCD08 7F0881D8 C44A01F0 */ lwc1 $f10, 0x1f0($v0) -/* 0BCD0C 7F0881DC E7AA0020 */ swc1 $f10, 0x20($sp) -/* 0BCD10 7F0881E0 C44801F4 */ lwc1 $f8, 0x1f4($v0) -/* 0BCD14 7F0881E4 E7AE0168 */ swc1 $f14, 0x168($sp) -/* 0BCD18 7F0881E8 0FC16642 */ jal matrix_4x4_set_basis_and_position_target -/* 0BCD1C 7F0881EC E7A80024 */ swc1 $f8, 0x24($sp) -/* 0BCD20 7F0881F0 8FA40164 */ lw $a0, 0x164($sp) -/* 0BCD24 7F0881F4 0FC16218 */ jal matrix_4x4_get_rotation_around_xyz -/* 0BCD28 7F0881F8 27A500FC */ addiu $a1, $sp, 0xfc -/* 0BCD2C 7F0881FC 27A40108 */ addiu $a0, $sp, 0x108 -/* 0BCD30 7F088200 0FC16218 */ jal matrix_4x4_get_rotation_around_xyz -/* 0BCD34 7F088204 27A500F0 */ addiu $a1, $sp, 0xf0 -/* 0BCD38 7F088208 27A400FC */ addiu $a0, $sp, 0xfc -/* 0BCD3C 7F08820C 0FC16CFD */ jal quaternion_set_rotation_around_xyzf -/* 0BCD40 7F088210 27A500E0 */ addiu $a1, $sp, 0xe0 -/* 0BCD44 7F088214 27A400F0 */ addiu $a0, $sp, 0xf0 -/* 0BCD48 7F088218 0FC16CFD */ jal quaternion_set_rotation_around_xyzf -/* 0BCD4C 7F08821C 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0BCD50 7F088220 27A400E0 */ addiu $a0, $sp, 0xe0 -/* 0BCD54 7F088224 0FC16F84 */ jal quaternion_ensure_shortest_path -/* 0BCD58 7F088228 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0BCD5C 7F08822C 27A400E0 */ addiu $a0, $sp, 0xe0 -/* 0BCD60 7F088230 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0BCD64 7F088234 8FA60168 */ lw $a2, 0x168($sp) -/* 0BCD68 7F088238 0FC16E82 */ jal quaternion_slerp -/* 0BCD6C 7F08823C 27A700C0 */ addiu $a3, $sp, 0xc0 -/* 0BCD70 7F088240 27A400C0 */ addiu $a0, $sp, 0xc0 -/* 0BCD74 7F088244 0FC16D8A */ jal quaternion_to_matrix -/* 0BCD78 7F088248 8FA50164 */ lw $a1, 0x164($sp) -/* 0BCD7C 7F08824C 27A400B4 */ addiu $a0, $sp, 0xb4 -/* 0BCD80 7F088250 0FC16266 */ jal matrix_4x4_set_position -/* 0BCD84 7F088254 8FA50164 */ lw $a1, 0x164($sp) -/* 0BCD88 7F088258 3C198008 */ lui $t9, %hi(g_CurrentPlayer) -/* 0BCD8C 7F08825C 8F39A0B0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0BCD90 7F088260 8FA50164 */ lw $a1, 0x164($sp) -/* 0BCD94 7F088264 0FC1629F */ jal matrix_scalar_multiply -/* 0BCD98 7F088268 C72C0244 */ lwc1 $f12, 0x244($t9) -/* 0BCD9C 7F08826C 2403003C */ li $v1, 60 -/* 0BCDA0 7F088270 8FA40090 */ lw $a0, 0x90($sp) -/* 0BCDA4 7F088274 3C018005 */ lui $at, %hi(D_80055280) -/* 0BCDA8 7F088278 C4225280 */ lwc1 $f2, %lo(D_80055280)($at) -/* 0BCDAC 7F08827C 0083001A */ div $zero, $a0, $v1 -/* 0BCDB0 7F088280 0000C010 */ mfhi $t8 -/* 0BCDB4 7F088284 00001012 */ mflo $v0 -/* 0BCDB8 7F088288 44982000 */ mtc1 $t8, $f4 -/* 0BCDBC 7F08828C 44808000 */ mtc1 $zero, $f16 -/* 0BCDC0 7F088290 0043001A */ div $zero, $v0, $v1 -/* 0BCDC4 7F088294 00007010 */ mfhi $t6 -/* 0BCDC8 7F088298 00006012 */ mflo $t4 -/* 0BCDCC 7F08829C 468021A0 */ cvt.s.w $f6, $f4 -/* 0BCDD0 7F0882A0 14600002 */ bnez $v1, .L7F0882AC -/* 0BCDD4 7F0882A4 00000000 */ nop -/* 0BCDD8 7F0882A8 0007000D */ break 7 -.L7F0882AC: -/* 0BCDDC 7F0882AC 2401FFFF */ li $at, -1 -/* 0BCDE0 7F0882B0 14610004 */ bne $v1, $at, .L7F0882C4 -/* 0BCDE4 7F0882B4 3C018000 */ lui $at, 0x8000 -/* 0BCDE8 7F0882B8 14810002 */ bne $a0, $at, .L7F0882C4 -/* 0BCDEC 7F0882BC 00000000 */ nop -/* 0BCDF0 7F0882C0 0006000D */ break 6 -.L7F0882C4: -/* 0BCDF4 7F0882C4 0183001A */ div $zero, $t4, $v1 -/* 0BCDF8 7F0882C8 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0BCDFC 7F0882CC 44815000 */ mtc1 $at, $f10 -/* 0BCE00 7F0882D0 448E2000 */ mtc1 $t6, $f4 -/* 0BCE04 7F0882D4 00006810 */ mfhi $t5 -/* 0BCE08 7F0882D8 460A3203 */ div.s $f8, $f6, $f10 -/* 0BCE0C 7F0882DC 14600002 */ bnez $v1, .L7F0882E8 -/* 0BCE10 7F0882E0 00000000 */ nop -/* 0BCE14 7F0882E4 0007000D */ break 7 -.L7F0882E8: -/* 0BCE18 7F0882E8 2401FFFF */ li $at, -1 -/* 0BCE1C 7F0882EC 14610004 */ bne $v1, $at, .L7F088300 -/* 0BCE20 7F0882F0 3C018000 */ li $at, 0x80000000 # -0.000000 -/* 0BCE24 7F0882F4 14410002 */ bne $v0, $at, .L7F088300 -/* 0BCE28 7F0882F8 00000000 */ nop -/* 0BCE2C 7F0882FC 0006000D */ break 6 -.L7F088300: -/* 0BCE30 7F088300 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0BCE34 7F088304 8FAB0160 */ lw $t3, 0x160($sp) -/* 0BCE38 7F088308 468021A0 */ cvt.s.w $f6, $f4 -/* 0BCE3C 7F08830C 46083280 */ add.s $f10, $f6, $f8 -/* 0BCE40 7F088310 44814000 */ mtc1 $at, $f8 -/* 0BCE44 7F088314 46005107 */ neg.s $f4, $f10 -/* 0BCE48 7F088318 448D5000 */ mtc1 $t5, $f10 -/* 0BCE4C 7F08831C 46022182 */ mul.s $f6, $f4, $f2 -/* 0BCE50 7F088320 46805120 */ cvt.s.w $f4, $f10 -/* 0BCE54 7F088324 46083483 */ div.s $f18, $f6, $f8 -/* 0BCE58 7F088328 46002187 */ neg.s $f6, $f4 -/* 0BCE5C 7F08832C 46023202 */ mul.s $f8, $f6, $f2 -/* 0BCE60 7F088330 4610903C */ c.lt.s $f18, $f16 -/* 0BCE64 7F088334 46009306 */ mov.s $f12, $f18 -/* 0BCE68 7F088338 14600002 */ bnez $v1, .L7F088344 -/* 0BCE6C 7F08833C 00000000 */ nop -/* 0BCE70 7F088340 0007000D */ break 7 -.L7F088344: -/* 0BCE74 7F088344 2401FFFF */ li $at, -1 -/* 0BCE78 7F088348 14610004 */ bne $v1, $at, .L7F08835C -/* 0BCE7C 7F08834C 3C018000 */ li $at, 0x80000000 # -0.000000 -/* 0BCE80 7F088350 15810002 */ bne $t4, $at, .L7F08835C -/* 0BCE84 7F088354 00000000 */ nop -/* 0BCE88 7F088358 0006000D */ break 6 -.L7F08835C: -/* 0BCE8C 7F08835C 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0BCE90 7F088360 44815000 */ mtc1 $at, $f10 -/* 0BCE94 7F088364 44813000 */ mtc1 $at, $f6 -/* 0BCE98 7F088368 24010E10 */ li $at, 3600 -/* 0BCE9C 7F08836C 0041001A */ div $zero, $v0, $at -/* 0BCEA0 7F088370 00007812 */ mflo $t7 -/* 0BCEA4 7F088374 2401000C */ li $at, 12 -/* 0BCEA8 7F088378 460A4103 */ div.s $f4, $f8, $f10 -/* 0BCEAC 7F08837C 01E1001A */ div $zero, $t7, $at -/* 0BCEB0 7F088380 46069203 */ div.s $f8, $f18, $f6 -/* 0BCEB4 7F088384 00005010 */ mfhi $t2 -/* 0BCEB8 7F088388 448A3000 */ mtc1 $t2, $f6 -/* 0BCEBC 7F08838C 3C014140 */ li $at, 0x41400000 # 12.000000 -/* 0BCEC0 7F088390 46082280 */ add.s $f10, $f4, $f8 -/* 0BCEC4 7F088394 46803120 */ cvt.s.w $f4, $f6 -/* 0BCEC8 7F088398 E7AA0040 */ swc1 $f10, 0x40($sp) -/* 0BCECC 7F08839C 46005386 */ mov.s $f14, $f10 -/* 0BCED0 7F0883A0 46002207 */ neg.s $f8, $f4 -/* 0BCED4 7F0883A4 44812000 */ mtc1 $at, $f4 -/* 0BCED8 7F0883A8 46024182 */ mul.s $f6, $f8, $f2 -/* 0BCEDC 7F0883AC 46043203 */ div.s $f8, $f6, $f4 -/* 0BCEE0 7F0883B0 44813000 */ mtc1 $at, $f6 -/* 0BCEE4 7F0883B4 3C014434 */ li $at, 0x44340000 # 720.000000 -/* 0BCEE8 7F0883B8 46065103 */ div.s $f4, $f10, $f6 -/* 0BCEEC 7F0883BC 44813000 */ mtc1 $at, $f6 -/* 0BCEF0 7F0883C0 46044280 */ add.s $f10, $f8, $f4 -/* 0BCEF4 7F0883C4 46069203 */ div.s $f8, $f18, $f6 -/* 0BCEF8 7F0883C8 C7A60040 */ lwc1 $f6, 0x40($sp) -/* 0BCEFC 7F0883CC 46085100 */ add.s $f4, $f10, $f8 -/* 0BCF00 7F0883D0 E7A4003C */ swc1 $f4, 0x3c($sp) -/* 0BCF04 7F0883D4 46002006 */ mov.s $f0, $f4 -/* 0BCF08 7F0883D8 45000006 */ bc1f .L7F0883F4 -/* 0BCF0C 7F0883DC C7AA003C */ lwc1 $f10, 0x3c($sp) -/* 0BCF10 7F0883E0 46026300 */ add.s $f12, $f12, $f2 -.L7F0883E4: -/* 0BCF14 7F0883E4 4610603C */ c.lt.s $f12, $f16 -/* 0BCF18 7F0883E8 00000000 */ nop -/* 0BCF1C 7F0883EC 4503FFFD */ bc1tl .L7F0883E4 -/* 0BCF20 7F0883F0 46026300 */ add.s $f12, $f12, $f2 -.L7F0883F4: -/* 0BCF24 7F0883F4 4610303C */ c.lt.s $f6, $f16 -/* 0BCF28 7F0883F8 00000000 */ nop -/* 0BCF2C 7F0883FC 45020007 */ bc1fl .L7F08841C -/* 0BCF30 7F088400 4610503C */ c.lt.s $f10, $f16 -/* 0BCF34 7F088404 46027380 */ add.s $f14, $f14, $f2 -.L7F088408: -/* 0BCF38 7F088408 4610703C */ c.lt.s $f14, $f16 -/* 0BCF3C 7F08840C 00000000 */ nop -/* 0BCF40 7F088410 4503FFFD */ bc1tl .L7F088408 -/* 0BCF44 7F088414 46027380 */ add.s $f14, $f14, $f2 -/* 0BCF48 7F088418 4610503C */ c.lt.s $f10, $f16 -.L7F08841C: -/* 0BCF4C 7F08841C 00000000 */ nop -/* 0BCF50 7F088420 45020007 */ bc1fl .L7F088440 -/* 0BCF54 7F088424 8D790008 */ lw $t9, 8($t3) -/* 0BCF58 7F088428 46020000 */ add.s $f0, $f0, $f2 -.L7F08842C: -/* 0BCF5C 7F08842C 4610003C */ c.lt.s $f0, $f16 -/* 0BCF60 7F088430 00000000 */ nop -/* 0BCF64 7F088434 4503FFFD */ bc1tl .L7F08842C -/* 0BCF68 7F088438 46020000 */ add.s $f0, $f0, $f2 -/* 0BCF6C 7F08843C 8D790008 */ lw $t9, 8($t3) -.L7F088440: -/* 0BCF70 7F088440 8FA60164 */ lw $a2, 0x164($sp) -/* 0BCF74 7F088444 44050000 */ mfc1 $a1, $f0 -/* 0BCF78 7F088448 8F380000 */ lw $t8, ($t9) -/* 0BCF7C 7F08844C 24C60040 */ addiu $a2, $a2, 0x40 -/* 0BCF80 7F088450 8F040004 */ lw $a0, 4($t8) -/* 0BCF84 7F088454 E7AE0098 */ swc1 $f14, 0x98($sp) -/* 0BCF88 7F088458 E7AC009C */ swc1 $f12, 0x9c($sp) -/* 0BCF8C 7F08845C 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BCF90 7F088460 AFA60040 */ sw $a2, 0x40($sp) -/* 0BCF94 7F088464 8FA50040 */ lw $a1, 0x40($sp) -/* 0BCF98 7F088468 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 0BCF9C 7F08846C 8FA40164 */ lw $a0, 0x164($sp) -/* 0BCFA0 7F088470 8FAE0160 */ lw $t6, 0x160($sp) -/* 0BCFA4 7F088474 C7AE0098 */ lwc1 $f14, 0x98($sp) -/* 0BCFA8 7F088478 8FA60164 */ lw $a2, 0x164($sp) -/* 0BCFAC 7F08847C 8DCC0008 */ lw $t4, 8($t6) -/* 0BCFB0 7F088480 44057000 */ mfc1 $a1, $f14 -/* 0BCFB4 7F088484 24C60080 */ addiu $a2, $a2, 0x80 -/* 0BCFB8 7F088488 8D8D0004 */ lw $t5, 4($t4) -/* 0BCFBC 7F08848C 8DA40004 */ lw $a0, 4($t5) -/* 0BCFC0 7F088490 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BCFC4 7F088494 AFA60040 */ sw $a2, 0x40($sp) -/* 0BCFC8 7F088498 8FA50040 */ lw $a1, 0x40($sp) -/* 0BCFCC 7F08849C 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 0BCFD0 7F0884A0 8FA40164 */ lw $a0, 0x164($sp) -/* 0BCFD4 7F0884A4 8FAF0160 */ lw $t7, 0x160($sp) -/* 0BCFD8 7F0884A8 C7AC009C */ lwc1 $f12, 0x9c($sp) -/* 0BCFDC 7F0884AC 8FA60164 */ lw $a2, 0x164($sp) -/* 0BCFE0 7F0884B0 8DEA0008 */ lw $t2, 8($t7) -/* 0BCFE4 7F0884B4 44056000 */ mfc1 $a1, $f12 -/* 0BCFE8 7F0884B8 24C600C0 */ addiu $a2, $a2, 0xc0 -/* 0BCFEC 7F0884BC 8D4B0008 */ lw $t3, 8($t2) -/* 0BCFF0 7F0884C0 8D640004 */ lw $a0, 4($t3) -/* 0BCFF4 7F0884C4 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BCFF8 7F0884C8 AFA60040 */ sw $a2, 0x40($sp) -/* 0BCFFC 7F0884CC 8FA50040 */ lw $a1, 0x40($sp) -/* 0BD000 7F0884D0 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 0BD004 7F0884D4 8FA40164 */ lw $a0, 0x164($sp) -/* 0BD008 7F0884D8 8FB801F8 */ lw $t8, 0x1f8($sp) -/* 0BD00C 7F0884DC 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BD010 7F0884E0 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BD014 7F0884E4 24190003 */ li $t9, 3 -/* 0BD018 7F0884E8 240E0004 */ li $t6, 4 -/* 0BD01C 7F0884EC AFB901C0 */ sw $t9, 0x1c0($sp) -/* 0BD020 7F0884F0 AFA001BC */ sw $zero, 0x1bc($sp) -/* 0BD024 7F0884F4 AFAE01E8 */ sw $t6, 0x1e8($sp) -/* 0BD028 7F0884F8 AFB801C4 */ sw $t8, 0x1c4($sp) -/* 0BD02C 7F0884FC 8C4301C8 */ lw $v1, 0x1c8($v0) -/* 0BD030 7F088500 24010005 */ li $at, 5 -/* 0BD034 7F088504 27A401B8 */ addiu $a0, $sp, 0x1b8 -/* 0BD038 7F088508 10610002 */ beq $v1, $at, .L7F088514 -/* 0BD03C 7F08850C 2401000C */ li $at, 12 -/* 0BD040 7F088510 14610003 */ bne $v1, $at, .L7F088520 -.L7F088514: -/* 0BD044 7F088514 240C00CD */ li $t4, 205 -/* 0BD048 7F088518 1000000C */ b .L7F08854C -/* 0BD04C 7F08851C AFAC01EC */ sw $t4, 0x1ec($sp) -.L7F088520: -/* 0BD050 7F088520 904F0FDC */ lbu $t7, 0xfdc($v0) -/* 0BD054 7F088524 904D0FDF */ lbu $t5, 0xfdf($v0) -/* 0BD058 7F088528 90590FDD */ lbu $t9, 0xfdd($v0) -/* 0BD05C 7F08852C 904C0FDE */ lbu $t4, 0xfde($v0) -/* 0BD060 7F088530 000F5600 */ sll $t2, $t7, 0x18 -/* 0BD064 7F088534 01AA5825 */ or $t3, $t5, $t2 -/* 0BD068 7F088538 0019C400 */ sll $t8, $t9, 0x10 -/* 0BD06C 7F08853C 01787025 */ or $t6, $t3, $t8 -/* 0BD070 7F088540 000C7A00 */ sll $t7, $t4, 8 -/* 0BD074 7F088544 01CF6825 */ or $t5, $t6, $t7 -/* 0BD078 7F088548 AFAD01EC */ sw $t5, 0x1ec($sp) -.L7F08854C: -/* 0BD07C 7F08854C 0FC1D1A1 */ jal subdraw -/* 0BD080 7F088550 24450230 */ addiu $a1, $v0, 0x230 -/* 0BD084 7F088554 8FAA01C4 */ lw $t2, 0x1c4($sp) -/* 0BD088 7F088558 8FB90160 */ lw $t9, 0x160($sp) -/* 0BD08C 7F08855C AFAA01F8 */ sw $t2, 0x1f8($sp) -/* 0BD090 7F088560 8F2B0008 */ lw $t3, 8($t9) -/* 0BD094 7F088564 8D780008 */ lw $t8, 8($t3) -/* 0BD098 7F088568 8F0C0004 */ lw $t4, 4($t8) -/* 0BD09C 7F08856C 0FC2F5B8 */ jal dynAllocateMatrix -/* 0BD0A0 7F088570 AFAC008C */ sw $t4, 0x8c($sp) -/* 0BD0A4 7F088574 AFA20048 */ sw $v0, 0x48($sp) -/* 0BD0A8 7F088578 8FA4008C */ lw $a0, 0x8c($sp) -/* 0BD0AC 7F08857C 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 0BD0B0 7F088580 27A5004C */ addiu $a1, $sp, 0x4c -/* 0BD0B4 7F088584 8FA40164 */ lw $a0, 0x164($sp) -/* 0BD0B8 7F088588 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 0BD0BC 7F08858C 27A5004C */ addiu $a1, $sp, 0x4c -/* 0BD0C0 7F088590 0FC16319 */ jal matrix_4x4_7F058C64 -/* 0BD0C4 7F088594 00000000 */ nop -/* 0BD0C8 7F088598 27A4004C */ addiu $a0, $sp, 0x4c -/* 0BD0CC 7F08859C 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 0BD0D0 7F0885A0 8FA50048 */ lw $a1, 0x48($sp) -/* 0BD0D4 7F0885A4 0FC16322 */ jal matrix_4x4_7F058C88 -/* 0BD0D8 7F0885A8 00000000 */ nop -/* 0BD0DC 7F0885AC 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 0BD0E0 7F0885B0 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0BD0E4 7F0885B4 8FA401F8 */ lw $a0, 0x1f8($sp) -/* 0BD0E8 7F0885B8 8DC301C8 */ lw $v1, 0x1c8($t6) -/* 0BD0EC 7F0885BC 38660005 */ xori $a2, $v1, 5 -/* 0BD0F0 7F0885C0 2CC60001 */ sltiu $a2, $a2, 1 -/* 0BD0F4 7F0885C4 14C00003 */ bnez $a2, .L7F0885D4 -/* 0BD0F8 7F0885C8 00000000 */ nop -/* 0BD0FC 7F0885CC 3866000C */ xori $a2, $v1, 0xc -/* 0BD100 7F0885D0 2CC60001 */ sltiu $a2, $a2, 1 -.L7F0885D4: -/* 0BD104 7F0885D4 0FC2B28A */ jal sub_GAME_7F0ACA28 -/* 0BD108 7F0885D8 8FA50048 */ lw $a1, 0x48($sp) -/* 0BD10C 7F0885DC 0FC16319 */ jal matrix_4x4_7F058C64 -/* 0BD110 7F0885E0 AFA201F8 */ sw $v0, 0x1f8($sp) -/* 0BD114 7F0885E4 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) -/* 0BD118 7F0885E8 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0BD11C 7F0885EC 8FAD0160 */ lw $t5, 0x160($sp) -/* 0BD120 7F0885F0 8DE4023C */ lw $a0, 0x23c($t7) -/* 0BD124 7F0885F4 0FC22F52 */ jal bondviewTransformManyPosToViewMatrix -/* 0BD128 7F0885F8 85A5000E */ lh $a1, 0xe($t5) -/* 0BD12C 7F0885FC 0FC16322 */ jal matrix_4x4_7F058C88 -/* 0BD130 7F088600 00000000 */ nop -.L7F088604: -/* 0BD134 7F088604 8FBF002C */ lw $ra, 0x2c($sp) -.L7F088608: -/* 0BD138 7F088608 8FA201F8 */ lw $v0, 0x1f8($sp) -/* 0BD13C 7F08860C 27BD01F8 */ addiu $sp, $sp, 0x1f8 -/* 0BD140 7F088610 03E00008 */ jr $ra -/* 0BD144 7F088614 00000000 */ nop -) -#endif - -#ifdef VERSION_JP -GLOBAL_ASM( -.late_rodata -glabel D_8005527C -.word 0x3c8efa35 /*0.017453292*/ -glabel D_80055280 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F087E74 -/* 0BD0B0 7F088540 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BD0B4 7F088544 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BD0B8 7F088548 27BDFE08 */ addiu $sp, $sp, -0x1f8 -/* 0BD0BC 7F08854C AFBF002C */ sw $ra, 0x2c($sp) -/* 0BD0C0 7F088550 AFA401F8 */ sw $a0, 0x1f8($sp) -/* 0BD0C4 7F088554 8C4E01C8 */ lw $t6, 0x1c8($v0) -/* 0BD0C8 7F088558 51C001E0 */ beql $t6, $zero, .Ljp7F088CDC -/* 0BD0CC 7F08855C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0BD0D0 7F088560 8C4F0200 */ lw $t7, 0x200($v0) -/* 0BD0D4 7F088564 3C198003 */ lui $t9, %hi(D_8003683C) # $t9, 0x8003 -/* 0BD0D8 7F088568 2739687C */ addiu $t9, %lo(D_8003683C) # addiu $t9, $t9, 0x687c -/* 0BD0DC 7F08856C 11E001DA */ beqz $t7, .Ljp7F088CD8 -/* 0BD0E0 7F088570 27B801B8 */ addiu $t8, $sp, 0x1b8 -/* 0BD0E4 7F088574 272B003C */ addiu $t3, $t9, 0x3c -.Ljp7F088578: -/* 0BD0E8 7F088578 8F210000 */ lw $at, ($t9) -/* 0BD0EC 7F08857C 2739000C */ addiu $t9, $t9, 0xc -/* 0BD0F0 7F088580 2718000C */ addiu $t8, $t8, 0xc -/* 0BD0F4 7F088584 AF01FFF4 */ sw $at, -0xc($t8) -/* 0BD0F8 7F088588 8F21FFF8 */ lw $at, -8($t9) -/* 0BD0FC 7F08858C AF01FFF8 */ sw $at, -8($t8) -/* 0BD100 7F088590 8F21FFFC */ lw $at, -4($t9) -/* 0BD104 7F088594 172BFFF8 */ bne $t9, $t3, .Ljp7F088578 -/* 0BD108 7F088598 AF01FFFC */ sw $at, -4($t8) -/* 0BD10C 7F08859C 8F210000 */ lw $at, ($t9) -/* 0BD110 7F0885A0 3C0D8003 */ lui $t5, %hi(D_8003687C) # $t5, 0x8003 -/* 0BD114 7F0885A4 25AD68BC */ addiu $t5, %lo(D_8003687C) # addiu $t5, $t5, 0x68bc -/* 0BD118 7F0885A8 AF010000 */ sw $at, ($t8) -/* 0BD11C 7F0885AC 8DA10000 */ lw $at, ($t5) -/* 0BD120 7F0885B0 27AC016C */ addiu $t4, $sp, 0x16c -/* 0BD124 7F0885B4 8DAF0004 */ lw $t7, 4($t5) -/* 0BD128 7F0885B8 AD810000 */ sw $at, ($t4) -/* 0BD12C 7F0885BC 8DA10008 */ lw $at, 8($t5) -/* 0BD130 7F0885C0 24040001 */ li $a0, 1 -/* 0BD134 7F0885C4 AD8F0004 */ sw $t7, 4($t4) -/* 0BD138 7F0885C8 0FC1750E */ jal get_ptr_itemheader_in_hand -/* 0BD13C 7F0885CC AD810008 */ sw $at, 8($t4) -/* 0BD140 7F0885D0 AFA20160 */ sw $v0, 0x160($sp) -/* 0BD144 7F0885D4 3C048008 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8008 -/* 0BD148 7F0885D8 8C4A0008 */ lw $t2, 8($v0) -/* 0BD14C 7F0885DC 8C84A120 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BD150 7F0885E0 8D45000C */ lw $a1, 0xc($t2) -/* 0BD154 7F0885E4 0FC1B363 */ jal modelGetNodeRwData -/* 0BD158 7F0885E8 24840230 */ addiu $a0, $a0, 0x230 -/* 0BD15C 7F0885EC 0FC2F8A4 */ jal dynAllocateMatrix -/* 0BD160 7F0885F0 AFA20158 */ sw $v0, 0x158($sp) -/* 0BD164 7F0885F4 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 0BD168 7F0885F8 44812000 */ mtc1 $at, $f4 -/* 0BD16C 7F0885FC 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) # $t3, 0x8008 -/* 0BD170 7F088600 8D6BA120 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0BD174 7F088604 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0BD178 7F088608 44813000 */ mtc1 $at, $f6 -/* 0BD17C 7F08860C AFA20154 */ sw $v0, 0x154($sp) -/* 0BD180 7F088610 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BD184 7F088614 44814000 */ mtc1 $at, $f8 -/* 0BD188 7F088618 8D6611C4 */ lw $a2, 0x11c4($t3) -/* 0BD18C 7F08861C 3C073FBA */ lui $a3, (0x3FBA2E8C >> 16) # lui $a3, 0x3fba -/* 0BD190 7F088620 34E72E8C */ ori $a3, (0x3FBA2E8C & 0xFFFF) # ori $a3, $a3, 0x2e8c -/* 0BD194 7F088624 00402025 */ move $a0, $v0 -/* 0BD198 7F088628 27A50152 */ addiu $a1, $sp, 0x152 -/* 0BD19C 7F08862C E7A40010 */ swc1 $f4, 0x10($sp) -/* 0BD1A0 7F088630 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0BD1A4 7F088634 0C003FBC */ jal guPerspective -/* 0BD1A8 7F088638 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0BD1AC 7F08863C 8FA301F8 */ lw $v1, 0x1f8($sp) -/* 0BD1B0 7F088640 3C190103 */ lui $t9, (0x01030040 >> 16) # lui $t9, 0x103 -/* 0BD1B4 7F088644 37390040 */ ori $t9, (0x01030040 & 0xFFFF) # ori $t9, $t9, 0x40 -/* 0BD1B8 7F088648 AC790000 */ sw $t9, ($v1) -/* 0BD1BC 7F08864C 8FB80154 */ lw $t8, 0x154($sp) -/* 0BD1C0 7F088650 3C01C140 */ li $at, 0xC1400000 # -12.000000 -/* 0BD1C4 7F088654 44810000 */ mtc1 $at, $f0 -/* 0BD1C8 7F088658 3C018000 */ lui $at, 0x8000 -/* 0BD1CC 7F08865C 3C0CBC00 */ lui $t4, (0xBC00000E >> 16) # lui $t4, 0xbc00 -/* 0BD1D0 7F088660 03017021 */ addu $t6, $t8, $at -/* 0BD1D4 7F088664 358C000E */ ori $t4, (0xBC00000E & 0xFFFF) # ori $t4, $t4, 0xe -/* 0BD1D8 7F088668 AC6E0004 */ sw $t6, 4($v1) -/* 0BD1DC 7F08866C 24670008 */ addiu $a3, $v1, 8 -/* 0BD1E0 7F088670 ACEC0000 */ sw $t4, ($a3) -/* 0BD1E4 7F088674 97AD0152 */ lhu $t5, 0x152($sp) -/* 0BD1E8 7F088678 3C088008 */ lui $t0, %hi(g_CurrentPlayer) # $t0, 0x8008 -/* 0BD1EC 7F08867C 2508A120 */ addiu $t0, %lo(g_CurrentPlayer) # addiu $t0, $t0, -0x5ee0 -/* 0BD1F0 7F088680 ACED0004 */ sw $t5, 4($a3) -/* 0BD1F4 7F088684 8D0F0000 */ lw $t7, ($t0) -/* 0BD1F8 7F088688 8FAB0158 */ lw $t3, 0x158($sp) -/* 0BD1FC 7F08868C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0BD200 7F088690 8DEA01CC */ lw $t2, 0x1cc($t7) -/* 0BD204 7F088694 24E90008 */ addiu $t1, $a3, 8 -/* 0BD208 7F088698 27A4016C */ addiu $a0, $sp, 0x16c -/* 0BD20C 7F08869C AD6A0000 */ sw $t2, ($t3) -/* 0BD210 7F0886A0 8D020000 */ lw $v0, ($t0) -/* 0BD214 7F0886A4 27A60178 */ addiu $a2, $sp, 0x178 -/* 0BD218 7F0886A8 C444054C */ lwc1 $f4, 0x54c($v0) -/* 0BD21C 7F0886AC C44A0498 */ lwc1 $f10, 0x498($v0) -/* 0BD220 7F0886B0 46002180 */ add.s $f6, $f4, $f0 -/* 0BD224 7F0886B4 C4440544 */ lwc1 $f4, 0x544($v0) -/* 0BD228 7F0886B8 46065202 */ mul.s $f8, $f10, $f6 -/* 0BD22C 7F0886BC C44A04A0 */ lwc1 $f10, 0x4a0($v0) -/* 0BD230 7F0886C0 46005187 */ neg.s $f6, $f10 -/* 0BD234 7F0886C4 46062282 */ mul.s $f10, $f4, $f6 -/* 0BD238 7F0886C8 C444048C */ lwc1 $f4, 0x48c($v0) -/* 0BD23C 7F0886CC 460A2180 */ add.s $f6, $f4, $f10 -/* 0BD240 7F0886D0 46064100 */ add.s $f4, $f8, $f6 -/* 0BD244 7F0886D4 E7A4016C */ swc1 $f4, 0x16c($sp) -/* 0BD248 7F0886D8 C4480490 */ lwc1 $f8, 0x490($v0) -/* 0BD24C 7F0886DC C44A0548 */ lwc1 $f10, 0x548($v0) -/* 0BD250 7F0886E0 46085180 */ add.s $f6, $f10, $f8 -/* 0BD254 7F0886E4 E7A60170 */ swc1 $f6, 0x170($sp) -/* 0BD258 7F0886E8 C44A054C */ lwc1 $f10, 0x54c($v0) -/* 0BD25C 7F0886EC C44404A0 */ lwc1 $f4, 0x4a0($v0) -/* 0BD260 7F0886F0 46005200 */ add.s $f8, $f10, $f0 -/* 0BD264 7F0886F4 C44A0544 */ lwc1 $f10, 0x544($v0) -/* 0BD268 7F0886F8 46082182 */ mul.s $f6, $f4, $f8 -/* 0BD26C 7F0886FC C4440498 */ lwc1 $f4, 0x498($v0) -/* 0BD270 7F088700 46045202 */ mul.s $f8, $f10, $f4 -/* 0BD274 7F088704 C44A0494 */ lwc1 $f10, 0x494($v0) -/* 0BD278 7F088708 46085100 */ add.s $f4, $f10, $f8 -/* 0BD27C 7F08870C 44814000 */ mtc1 $at, $f8 -/* 0BD280 7F088710 3C018005 */ lui $at, %hi(D_8005527C) # $at, 0x8005 -/* 0BD284 7F088714 46043280 */ add.s $f10, $f6, $f4 -/* 0BD288 7F088718 E7AA0174 */ swc1 $f10, 0x174($sp) -/* 0BD28C 7F08871C C4460148 */ lwc1 $f6, 0x148($v0) -/* 0BD290 7F088720 C42A52AC */ lwc1 $f10, %lo(D_8005527C)($at) -/* 0BD294 7F088724 AFA901F8 */ sw $t1, 0x1f8($sp) -/* 0BD298 7F088728 46064101 */ sub.s $f4, $f8, $f6 -/* 0BD29C 7F08872C 460A2202 */ mul.s $f8, $f4, $f10 -/* 0BD2A0 7F088730 44054000 */ mfc1 $a1, $f8 -/* 0BD2A4 7F088734 0FC1627C */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BD2A8 7F088738 00000000 */ nop -/* 0BD2AC 7F08873C 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 0BD2B0 7F088740 00000000 */ nop -/* 0BD2B4 7F088744 00402025 */ move $a0, $v0 -/* 0BD2B8 7F088748 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 0BD2BC 7F08874C 27A50178 */ addiu $a1, $sp, 0x178 -/* 0BD2C0 7F088750 8FB90160 */ lw $t9, 0x160($sp) -/* 0BD2C4 7F088754 8724000E */ lh $a0, 0xe($t9) -/* 0BD2C8 7F088758 0004C180 */ sll $t8, $a0, 6 -/* 0BD2CC 7F08875C 0FC2F8B1 */ jal dynAllocate -/* 0BD2D0 7F088760 03002025 */ move $a0, $t8 -/* 0BD2D4 7F088764 3C048008 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8008 -/* 0BD2D8 7F088768 8C84A120 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BD2DC 7F08876C AFA20164 */ sw $v0, 0x164($sp) -/* 0BD2E0 7F088770 8FA50160 */ lw $a1, 0x160($sp) -/* 0BD2E4 7F088774 24060004 */ li $a2, 4 -/* 0BD2E8 7F088778 0FC220B8 */ jal seems_to_load_cuff_microcode -/* 0BD2EC 7F08877C 24840230 */ addiu $a0, $a0, 0x230 -/* 0BD2F0 7F088780 3C058008 */ lui $a1, %hi(g_CurrentPlayer) # $a1, 0x8008 -/* 0BD2F4 7F088784 8FAC0164 */ lw $t4, 0x164($sp) -/* 0BD2F8 7F088788 8CA5A120 */ lw $a1, %lo(g_CurrentPlayer)($a1) -/* 0BD2FC 7F08878C 27AE0178 */ addiu $t6, $sp, 0x178 -/* 0BD300 7F088790 AFAE01B8 */ sw $t6, 0x1b8($sp) -/* 0BD304 7F088794 27A401B8 */ addiu $a0, $sp, 0x1b8 -/* 0BD308 7F088798 AFAC01C8 */ sw $t4, 0x1c8($sp) -/* 0BD30C 7F08879C 0FC1BE3A */ jal subcalcmatrices -/* 0BD310 7F0887A0 24A50230 */ addiu $a1, $a1, 0x230 -/* 0BD314 7F0887A4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BD318 7F0887A8 44810000 */ mtc1 $at, $f0 -/* 0BD31C 7F0887AC 3C018008 */ lui $at, %hi(watch_time_0) # $at, 0x8008 -/* 0BD320 7F0887B0 8FAD0160 */ lw $t5, 0x160($sp) -/* 0BD324 7F0887B4 C4269A64 */ lwc1 $f6, %lo(watch_time_0)($at) -/* 0BD328 7F0887B8 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BD32C 7F0887BC 8DAF0008 */ lw $t7, 8($t5) -/* 0BD330 7F0887C0 4600310D */ trunc.w.s $f4, $f6 -/* 0BD334 7F0887C4 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BD338 7F0887C8 8DEA0000 */ lw $t2, ($t7) -/* 0BD33C 7F0887CC 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 0BD340 7F0887D0 44192000 */ mfc1 $t9, $f4 -/* 0BD344 7F0887D4 8D430004 */ lw $v1, 4($t2) -/* 0BD348 7F0887D8 44814000 */ mtc1 $at, $f8 -/* 0BD34C 7F0887DC AFB90090 */ sw $t9, 0x90($sp) -/* 0BD350 7F0887E0 C44A0258 */ lwc1 $f10, 0x258($v0) -/* 0BD354 7F0887E4 46085383 */ div.s $f14, $f10, $f8 -/* 0BD358 7F0887E8 460E003C */ c.lt.s $f0, $f14 -/* 0BD35C 7F0887EC 00000000 */ nop -/* 0BD360 7F0887F0 45020003 */ bc1fl .Ljp7F088800 -/* 0BD364 7F0887F4 C4660000 */ lwc1 $f6, ($v1) -/* 0BD368 7F0887F8 46000386 */ mov.s $f14, $f0 -/* 0BD36C 7F0887FC C4660000 */ lwc1 $f6, ($v1) -.Ljp7F088800: -/* 0BD370 7F088800 C4440244 */ lwc1 $f4, 0x244($v0) -/* 0BD374 7F088804 C44801D4 */ lwc1 $f8, 0x1d4($v0) -/* 0BD378 7F088808 8FA80164 */ lw $t0, 0x164($sp) -/* 0BD37C 7F08880C 46043282 */ mul.s $f10, $f6, $f4 -/* 0BD380 7F088810 44808000 */ mtc1 $zero, $f16 -/* 0BD384 7F088814 C5000030 */ lwc1 $f0, 0x30($t0) -/* 0BD388 7F088818 27A40108 */ addiu $a0, $sp, 0x108 -/* 0BD38C 7F08881C 44058000 */ mfc1 $a1, $f16 -/* 0BD390 7F088820 44068000 */ mfc1 $a2, $f16 -/* 0BD394 7F088824 44078000 */ mfc1 $a3, $f16 -/* 0BD398 7F088828 460A4181 */ sub.s $f6, $f8, $f10 -/* 0BD39C 7F08882C 46003101 */ sub.s $f4, $f6, $f0 -/* 0BD3A0 7F088830 460E2202 */ mul.s $f8, $f4, $f14 -/* 0BD3A4 7F088834 46004280 */ add.s $f10, $f8, $f0 -/* 0BD3A8 7F088838 E7AA00B4 */ swc1 $f10, 0xb4($sp) -/* 0BD3AC 7F08883C C4440244 */ lwc1 $f4, 0x244($v0) -/* 0BD3B0 7F088840 C4660008 */ lwc1 $f6, 8($v1) -/* 0BD3B4 7F088844 C44A01D8 */ lwc1 $f10, 0x1d8($v0) -/* 0BD3B8 7F088848 C5020034 */ lwc1 $f2, 0x34($t0) -/* 0BD3BC 7F08884C 46043202 */ mul.s $f8, $f6, $f4 -/* 0BD3C0 7F088850 46085180 */ add.s $f6, $f10, $f8 -/* 0BD3C4 7F088854 46023101 */ sub.s $f4, $f6, $f2 -/* 0BD3C8 7F088858 460E2282 */ mul.s $f10, $f4, $f14 -/* 0BD3CC 7F08885C 46025200 */ add.s $f8, $f10, $f2 -/* 0BD3D0 7F088860 E7A800B8 */ swc1 $f8, 0xb8($sp) -/* 0BD3D4 7F088864 C4440244 */ lwc1 $f4, 0x244($v0) -/* 0BD3D8 7F088868 C4660004 */ lwc1 $f6, 4($v1) -/* 0BD3DC 7F08886C C44801DC */ lwc1 $f8, 0x1dc($v0) -/* 0BD3E0 7F088870 C50C0038 */ lwc1 $f12, 0x38($t0) -/* 0BD3E4 7F088874 46043282 */ mul.s $f10, $f6, $f4 -/* 0BD3E8 7F088878 460A4181 */ sub.s $f6, $f8, $f10 -/* 0BD3EC 7F08887C 460C3101 */ sub.s $f4, $f6, $f12 -/* 0BD3F0 7F088880 460E2202 */ mul.s $f8, $f4, $f14 -/* 0BD3F4 7F088884 460C4280 */ add.s $f10, $f8, $f12 -/* 0BD3F8 7F088888 E7AA00BC */ swc1 $f10, 0xbc($sp) -/* 0BD3FC 7F08888C C44601E0 */ lwc1 $f6, 0x1e0($v0) -/* 0BD400 7F088890 E7A60010 */ swc1 $f6, 0x10($sp) -/* 0BD404 7F088894 C44401E4 */ lwc1 $f4, 0x1e4($v0) -/* 0BD408 7F088898 E7A40014 */ swc1 $f4, 0x14($sp) -/* 0BD40C 7F08889C C44801E8 */ lwc1 $f8, 0x1e8($v0) -/* 0BD410 7F0888A0 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0BD414 7F0888A4 C44A01EC */ lwc1 $f10, 0x1ec($v0) -/* 0BD418 7F0888A8 E7AA001C */ swc1 $f10, 0x1c($sp) -/* 0BD41C 7F0888AC C44601F0 */ lwc1 $f6, 0x1f0($v0) -/* 0BD420 7F0888B0 E7A60020 */ swc1 $f6, 0x20($sp) -/* 0BD424 7F0888B4 C44401F4 */ lwc1 $f4, 0x1f4($v0) -/* 0BD428 7F0888B8 E7AE0168 */ swc1 $f14, 0x168($sp) -/* 0BD42C 7F0888BC 0FC1678A */ jal matrix_4x4_set_basis_and_position_target -/* 0BD430 7F0888C0 E7A40024 */ swc1 $f4, 0x24($sp) -/* 0BD434 7F0888C4 8FA40164 */ lw $a0, 0x164($sp) -/* 0BD438 7F0888C8 0FC16360 */ jal matrix_4x4_get_rotation_around_xyz -/* 0BD43C 7F0888CC 27A500FC */ addiu $a1, $sp, 0xfc -/* 0BD440 7F0888D0 27A40108 */ addiu $a0, $sp, 0x108 -/* 0BD444 7F0888D4 0FC16360 */ jal matrix_4x4_get_rotation_around_xyz -/* 0BD448 7F0888D8 27A500F0 */ addiu $a1, $sp, 0xf0 -/* 0BD44C 7F0888DC 27A400FC */ addiu $a0, $sp, 0xfc -/* 0BD450 7F0888E0 0FC16E45 */ jal quaternion_set_rotation_around_xyzf -/* 0BD454 7F0888E4 27A500E0 */ addiu $a1, $sp, 0xe0 -/* 0BD458 7F0888E8 27A400F0 */ addiu $a0, $sp, 0xf0 -/* 0BD45C 7F0888EC 0FC16E45 */ jal quaternion_set_rotation_around_xyzf -/* 0BD460 7F0888F0 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0BD464 7F0888F4 27A400E0 */ addiu $a0, $sp, 0xe0 -/* 0BD468 7F0888F8 0FC170CC */ jal quaternion_ensure_shortest_path -/* 0BD46C 7F0888FC 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0BD470 7F088900 27A400E0 */ addiu $a0, $sp, 0xe0 -/* 0BD474 7F088904 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0BD478 7F088908 8FA60168 */ lw $a2, 0x168($sp) -/* 0BD47C 7F08890C 0FC16FCA */ jal quaternion_slerp -/* 0BD480 7F088910 27A700C0 */ addiu $a3, $sp, 0xc0 -/* 0BD484 7F088914 27A400C0 */ addiu $a0, $sp, 0xc0 -/* 0BD488 7F088918 0FC16ED2 */ jal quaternion_to_matrix -/* 0BD48C 7F08891C 8FA50164 */ lw $a1, 0x164($sp) -/* 0BD490 7F088920 27A400B4 */ addiu $a0, $sp, 0xb4 -/* 0BD494 7F088924 0FC163AE */ jal matrix_4x4_set_position -/* 0BD498 7F088928 8FA50164 */ lw $a1, 0x164($sp) -/* 0BD49C 7F08892C 3C188008 */ lui $t8, %hi(g_CurrentPlayer) # $t8, 0x8008 -/* 0BD4A0 7F088930 8F18A120 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0BD4A4 7F088934 8FA50164 */ lw $a1, 0x164($sp) -/* 0BD4A8 7F088938 0FC163E7 */ jal matrix_scalar_multiply -/* 0BD4AC 7F08893C C70C0244 */ lwc1 $f12, 0x244($t8) -/* 0BD4B0 7F088940 2403003C */ li $v1, 60 -/* 0BD4B4 7F088944 8FA40090 */ lw $a0, 0x90($sp) -/* 0BD4B8 7F088948 3C018005 */ lui $at, %hi(D_80055280) # $at, 0x8005 -/* 0BD4BC 7F08894C C42252B0 */ lwc1 $f2, %lo(D_80055280)($at) -/* 0BD4C0 7F088950 0083001A */ div $zero, $a0, $v1 -/* 0BD4C4 7F088954 00007010 */ mfhi $t6 -/* 0BD4C8 7F088958 00001012 */ mflo $v0 -/* 0BD4CC 7F08895C 448E4000 */ mtc1 $t6, $f8 -/* 0BD4D0 7F088960 44808000 */ mtc1 $zero, $f16 -/* 0BD4D4 7F088964 0043001A */ div $zero, $v0, $v1 -/* 0BD4D8 7F088968 00006010 */ mfhi $t4 -/* 0BD4DC 7F08896C 00006812 */ mflo $t5 -/* 0BD4E0 7F088970 468042A0 */ cvt.s.w $f10, $f8 -/* 0BD4E4 7F088974 14600002 */ bnez $v1, .Ljp7F088980 -/* 0BD4E8 7F088978 00000000 */ nop -/* 0BD4EC 7F08897C 0007000D */ break 7 -.Ljp7F088980: -/* 0BD4F0 7F088980 2401FFFF */ li $at, -1 -/* 0BD4F4 7F088984 14610004 */ bne $v1, $at, .Ljp7F088998 -/* 0BD4F8 7F088988 3C018000 */ lui $at, 0x8000 -/* 0BD4FC 7F08898C 14810002 */ bne $a0, $at, .Ljp7F088998 -/* 0BD500 7F088990 00000000 */ nop -/* 0BD504 7F088994 0006000D */ break 6 -.Ljp7F088998: -/* 0BD508 7F088998 01A3001A */ div $zero, $t5, $v1 -/* 0BD50C 7F08899C 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0BD510 7F0889A0 44813000 */ mtc1 $at, $f6 -/* 0BD514 7F0889A4 448C4000 */ mtc1 $t4, $f8 -/* 0BD518 7F0889A8 00007810 */ mfhi $t7 -/* 0BD51C 7F0889AC 46065103 */ div.s $f4, $f10, $f6 -/* 0BD520 7F0889B0 14600002 */ bnez $v1, .Ljp7F0889BC -/* 0BD524 7F0889B4 00000000 */ nop -/* 0BD528 7F0889B8 0007000D */ break 7 -.Ljp7F0889BC: -/* 0BD52C 7F0889BC 2401FFFF */ li $at, -1 -/* 0BD530 7F0889C0 14610004 */ bne $v1, $at, .Ljp7F0889D4 -/* 0BD534 7F0889C4 3C018000 */ li $at, 0x80000000 # -0.000000 -/* 0BD538 7F0889C8 14410002 */ bne $v0, $at, .Ljp7F0889D4 -/* 0BD53C 7F0889CC 00000000 */ nop -/* 0BD540 7F0889D0 0006000D */ break 6 -.Ljp7F0889D4: -/* 0BD544 7F0889D4 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0BD548 7F0889D8 8FB90160 */ lw $t9, 0x160($sp) -/* 0BD54C 7F0889DC 468042A0 */ cvt.s.w $f10, $f8 -/* 0BD550 7F0889E0 46045180 */ add.s $f6, $f10, $f4 -/* 0BD554 7F0889E4 44812000 */ mtc1 $at, $f4 -/* 0BD558 7F0889E8 46003207 */ neg.s $f8, $f6 -/* 0BD55C 7F0889EC 448F3000 */ mtc1 $t7, $f6 -/* 0BD560 7F0889F0 46024282 */ mul.s $f10, $f8, $f2 -/* 0BD564 7F0889F4 46803220 */ cvt.s.w $f8, $f6 -/* 0BD568 7F0889F8 46045483 */ div.s $f18, $f10, $f4 -/* 0BD56C 7F0889FC 46004287 */ neg.s $f10, $f8 -/* 0BD570 7F088A00 46025102 */ mul.s $f4, $f10, $f2 -/* 0BD574 7F088A04 4610903C */ c.lt.s $f18, $f16 -/* 0BD578 7F088A08 46009306 */ mov.s $f12, $f18 -/* 0BD57C 7F088A0C 14600002 */ bnez $v1, .Ljp7F088A18 -/* 0BD580 7F088A10 00000000 */ nop -/* 0BD584 7F088A14 0007000D */ break 7 -.Ljp7F088A18: -/* 0BD588 7F088A18 2401FFFF */ li $at, -1 -/* 0BD58C 7F088A1C 14610004 */ bne $v1, $at, .Ljp7F088A30 -/* 0BD590 7F088A20 3C018000 */ li $at, 0x80000000 # -0.000000 -/* 0BD594 7F088A24 15A10002 */ bne $t5, $at, .Ljp7F088A30 -/* 0BD598 7F088A28 00000000 */ nop -/* 0BD59C 7F088A2C 0006000D */ break 6 -.Ljp7F088A30: -/* 0BD5A0 7F088A30 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0BD5A4 7F088A34 44813000 */ mtc1 $at, $f6 -/* 0BD5A8 7F088A38 44815000 */ mtc1 $at, $f10 -/* 0BD5AC 7F088A3C 24010E10 */ li $at, 3600 -/* 0BD5B0 7F088A40 0041001A */ div $zero, $v0, $at -/* 0BD5B4 7F088A44 00005012 */ mflo $t2 -/* 0BD5B8 7F088A48 2401000C */ li $at, 12 -/* 0BD5BC 7F088A4C 46062203 */ div.s $f8, $f4, $f6 -/* 0BD5C0 7F088A50 0141001A */ div $zero, $t2, $at -/* 0BD5C4 7F088A54 460A9103 */ div.s $f4, $f18, $f10 -/* 0BD5C8 7F088A58 00005810 */ mfhi $t3 -/* 0BD5CC 7F088A5C 448B5000 */ mtc1 $t3, $f10 -/* 0BD5D0 7F088A60 3C014140 */ li $at, 0x41400000 # 12.000000 -/* 0BD5D4 7F088A64 46044180 */ add.s $f6, $f8, $f4 -/* 0BD5D8 7F088A68 46805220 */ cvt.s.w $f8, $f10 -/* 0BD5DC 7F088A6C E7A60040 */ swc1 $f6, 0x40($sp) -/* 0BD5E0 7F088A70 46003386 */ mov.s $f14, $f6 -/* 0BD5E4 7F088A74 46004107 */ neg.s $f4, $f8 -/* 0BD5E8 7F088A78 44814000 */ mtc1 $at, $f8 -/* 0BD5EC 7F088A7C 46022282 */ mul.s $f10, $f4, $f2 -/* 0BD5F0 7F088A80 46085103 */ div.s $f4, $f10, $f8 -/* 0BD5F4 7F088A84 44815000 */ mtc1 $at, $f10 -/* 0BD5F8 7F088A88 3C014434 */ li $at, 0x44340000 # 720.000000 -/* 0BD5FC 7F088A8C 460A3203 */ div.s $f8, $f6, $f10 -/* 0BD600 7F088A90 44815000 */ mtc1 $at, $f10 -/* 0BD604 7F088A94 46082180 */ add.s $f6, $f4, $f8 -/* 0BD608 7F088A98 460A9103 */ div.s $f4, $f18, $f10 -/* 0BD60C 7F088A9C C7AA0040 */ lwc1 $f10, 0x40($sp) -/* 0BD610 7F088AA0 46043200 */ add.s $f8, $f6, $f4 -/* 0BD614 7F088AA4 E7A8003C */ swc1 $f8, 0x3c($sp) -/* 0BD618 7F088AA8 46004006 */ mov.s $f0, $f8 -/* 0BD61C 7F088AAC 45000006 */ bc1f .Ljp7F088AC8 -/* 0BD620 7F088AB0 C7A6003C */ lwc1 $f6, 0x3c($sp) -/* 0BD624 7F088AB4 46026300 */ add.s $f12, $f12, $f2 -.Ljp7F088AB8: -/* 0BD628 7F088AB8 4610603C */ c.lt.s $f12, $f16 -/* 0BD62C 7F088ABC 00000000 */ nop -/* 0BD630 7F088AC0 4503FFFD */ bc1tl .Ljp7F088AB8 -/* 0BD634 7F088AC4 46026300 */ add.s $f12, $f12, $f2 -.Ljp7F088AC8: -/* 0BD638 7F088AC8 4610503C */ c.lt.s $f10, $f16 -/* 0BD63C 7F088ACC 00000000 */ nop -/* 0BD640 7F088AD0 45020007 */ bc1fl .Ljp7F088AF0 -/* 0BD644 7F088AD4 4610303C */ c.lt.s $f6, $f16 -/* 0BD648 7F088AD8 46027380 */ add.s $f14, $f14, $f2 -.Ljp7F088ADC: -/* 0BD64C 7F088ADC 4610703C */ c.lt.s $f14, $f16 -/* 0BD650 7F088AE0 00000000 */ nop -/* 0BD654 7F088AE4 4503FFFD */ bc1tl .Ljp7F088ADC -/* 0BD658 7F088AE8 46027380 */ add.s $f14, $f14, $f2 -/* 0BD65C 7F088AEC 4610303C */ c.lt.s $f6, $f16 -.Ljp7F088AF0: -/* 0BD660 7F088AF0 00000000 */ nop -/* 0BD664 7F088AF4 45020007 */ bc1fl .Ljp7F088B14 -/* 0BD668 7F088AF8 8F380008 */ lw $t8, 8($t9) -/* 0BD66C 7F088AFC 46020000 */ add.s $f0, $f0, $f2 -.Ljp7F088B00: -/* 0BD670 7F088B00 4610003C */ c.lt.s $f0, $f16 -/* 0BD674 7F088B04 00000000 */ nop -/* 0BD678 7F088B08 4503FFFD */ bc1tl .Ljp7F088B00 -/* 0BD67C 7F088B0C 46020000 */ add.s $f0, $f0, $f2 -/* 0BD680 7F088B10 8F380008 */ lw $t8, 8($t9) -.Ljp7F088B14: -/* 0BD684 7F088B14 8FA60164 */ lw $a2, 0x164($sp) -/* 0BD688 7F088B18 44050000 */ mfc1 $a1, $f0 -/* 0BD68C 7F088B1C 8F0E0000 */ lw $t6, ($t8) -/* 0BD690 7F088B20 24C60040 */ addiu $a2, $a2, 0x40 -/* 0BD694 7F088B24 8DC40004 */ lw $a0, 4($t6) -/* 0BD698 7F088B28 E7AE0098 */ swc1 $f14, 0x98($sp) -/* 0BD69C 7F088B2C E7AC009C */ swc1 $f12, 0x9c($sp) -/* 0BD6A0 7F088B30 0FC1627C */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BD6A4 7F088B34 AFA60040 */ sw $a2, 0x40($sp) -/* 0BD6A8 7F088B38 8FA50040 */ lw $a1, 0x40($sp) -/* 0BD6AC 7F088B3C 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 0BD6B0 7F088B40 8FA40164 */ lw $a0, 0x164($sp) -/* 0BD6B4 7F088B44 8FAC0160 */ lw $t4, 0x160($sp) -/* 0BD6B8 7F088B48 C7AE0098 */ lwc1 $f14, 0x98($sp) -/* 0BD6BC 7F088B4C 8FA60164 */ lw $a2, 0x164($sp) -/* 0BD6C0 7F088B50 8D8D0008 */ lw $t5, 8($t4) -/* 0BD6C4 7F088B54 44057000 */ mfc1 $a1, $f14 -/* 0BD6C8 7F088B58 24C60080 */ addiu $a2, $a2, 0x80 -/* 0BD6CC 7F088B5C 8DAF0004 */ lw $t7, 4($t5) -/* 0BD6D0 7F088B60 8DE40004 */ lw $a0, 4($t7) -/* 0BD6D4 7F088B64 0FC1627C */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BD6D8 7F088B68 AFA60040 */ sw $a2, 0x40($sp) -/* 0BD6DC 7F088B6C 8FA50040 */ lw $a1, 0x40($sp) -/* 0BD6E0 7F088B70 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 0BD6E4 7F088B74 8FA40164 */ lw $a0, 0x164($sp) -/* 0BD6E8 7F088B78 8FAA0160 */ lw $t2, 0x160($sp) -/* 0BD6EC 7F088B7C C7AC009C */ lwc1 $f12, 0x9c($sp) -/* 0BD6F0 7F088B80 8FA60164 */ lw $a2, 0x164($sp) -/* 0BD6F4 7F088B84 8D4B0008 */ lw $t3, 8($t2) -/* 0BD6F8 7F088B88 44056000 */ mfc1 $a1, $f12 -/* 0BD6FC 7F088B8C 24C600C0 */ addiu $a2, $a2, 0xc0 -/* 0BD700 7F088B90 8D790008 */ lw $t9, 8($t3) -/* 0BD704 7F088B94 8F240004 */ lw $a0, 4($t9) -/* 0BD708 7F088B98 0FC1627C */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BD70C 7F088B9C AFA60040 */ sw $a2, 0x40($sp) -/* 0BD710 7F088BA0 8FA50040 */ lw $a1, 0x40($sp) -/* 0BD714 7F088BA4 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 0BD718 7F088BA8 8FA40164 */ lw $a0, 0x164($sp) -/* 0BD71C 7F088BAC 8FAE01F8 */ lw $t6, 0x1f8($sp) -/* 0BD720 7F088BB0 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BD724 7F088BB4 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BD728 7F088BB8 24180003 */ li $t8, 3 -/* 0BD72C 7F088BBC 240C0004 */ li $t4, 4 -/* 0BD730 7F088BC0 AFB801C0 */ sw $t8, 0x1c0($sp) -/* 0BD734 7F088BC4 AFA001BC */ sw $zero, 0x1bc($sp) -/* 0BD738 7F088BC8 AFAC01E8 */ sw $t4, 0x1e8($sp) -/* 0BD73C 7F088BCC AFAE01C4 */ sw $t6, 0x1c4($sp) -/* 0BD740 7F088BD0 8C4301C8 */ lw $v1, 0x1c8($v0) -/* 0BD744 7F088BD4 24010005 */ li $at, 5 -/* 0BD748 7F088BD8 27A401B8 */ addiu $a0, $sp, 0x1b8 -/* 0BD74C 7F088BDC 10610002 */ beq $v1, $at, .Ljp7F088BE8 -/* 0BD750 7F088BE0 2401000C */ li $at, 12 -/* 0BD754 7F088BE4 14610003 */ bne $v1, $at, .Ljp7F088BF4 -.Ljp7F088BE8: -/* 0BD758 7F088BE8 240D00CD */ li $t5, 205 -/* 0BD75C 7F088BEC 1000000C */ b .Ljp7F088C20 -/* 0BD760 7F088BF0 AFAD01EC */ sw $t5, 0x1ec($sp) -.Ljp7F088BF4: -/* 0BD764 7F088BF4 904A0FDC */ lbu $t2, 0xfdc($v0) -/* 0BD768 7F088BF8 904F0FDF */ lbu $t7, 0xfdf($v0) -/* 0BD76C 7F088BFC 90580FDD */ lbu $t8, 0xfdd($v0) -/* 0BD770 7F088C00 904D0FDE */ lbu $t5, 0xfde($v0) -/* 0BD774 7F088C04 000A5E00 */ sll $t3, $t2, 0x18 -/* 0BD778 7F088C08 01EBC825 */ or $t9, $t7, $t3 -/* 0BD77C 7F088C0C 00187400 */ sll $t6, $t8, 0x10 -/* 0BD780 7F088C10 032E6025 */ or $t4, $t9, $t6 -/* 0BD784 7F088C14 000D5200 */ sll $t2, $t5, 8 -/* 0BD788 7F088C18 018A7825 */ or $t7, $t4, $t2 -/* 0BD78C 7F088C1C AFAF01EC */ sw $t7, 0x1ec($sp) -.Ljp7F088C20: -/* 0BD790 7F088C20 0FC1D31D */ jal subdraw -/* 0BD794 7F088C24 24450230 */ addiu $a1, $v0, 0x230 -/* 0BD798 7F088C28 8FAB01C4 */ lw $t3, 0x1c4($sp) -/* 0BD79C 7F088C2C 8FB80160 */ lw $t8, 0x160($sp) -/* 0BD7A0 7F088C30 AFAB01F8 */ sw $t3, 0x1f8($sp) -/* 0BD7A4 7F088C34 8F190008 */ lw $t9, 8($t8) -/* 0BD7A8 7F088C38 8F2E0008 */ lw $t6, 8($t9) -/* 0BD7AC 7F088C3C 8DCD0004 */ lw $t5, 4($t6) -/* 0BD7B0 7F088C40 0FC2F8A4 */ jal dynAllocateMatrix -/* 0BD7B4 7F088C44 AFAD008C */ sw $t5, 0x8c($sp) -/* 0BD7B8 7F088C48 AFA20048 */ sw $v0, 0x48($sp) -/* 0BD7BC 7F088C4C 8FA4008C */ lw $a0, 0x8c($sp) -/* 0BD7C0 7F088C50 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 0BD7C4 7F088C54 27A5004C */ addiu $a1, $sp, 0x4c -/* 0BD7C8 7F088C58 8FA40164 */ lw $a0, 0x164($sp) -/* 0BD7CC 7F088C5C 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 0BD7D0 7F088C60 27A5004C */ addiu $a1, $sp, 0x4c -/* 0BD7D4 7F088C64 0FC16461 */ jal matrix_4x4_7F058C64 -/* 0BD7D8 7F088C68 00000000 */ nop -/* 0BD7DC 7F088C6C 27A4004C */ addiu $a0, $sp, 0x4c -/* 0BD7E0 7F088C70 0FC1646F */ jal matrix_4x4_f32_to_s32 -/* 0BD7E4 7F088C74 8FA50048 */ lw $a1, 0x48($sp) -/* 0BD7E8 7F088C78 0FC1646A */ jal matrix_4x4_7F058C88 -/* 0BD7EC 7F088C7C 00000000 */ nop -/* 0BD7F0 7F088C80 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) # $t4, 0x8008 -/* 0BD7F4 7F088C84 8D8CA120 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0BD7F8 7F088C88 8FA401F8 */ lw $a0, 0x1f8($sp) -/* 0BD7FC 7F088C8C 8D8301C8 */ lw $v1, 0x1c8($t4) -/* 0BD800 7F088C90 38660005 */ xori $a2, $v1, 5 -/* 0BD804 7F088C94 2CC60001 */ sltiu $a2, $a2, 1 -/* 0BD808 7F088C98 14C00003 */ bnez $a2, .Ljp7F088CA8 -/* 0BD80C 7F088C9C 00000000 */ nop -/* 0BD810 7F088CA0 3866000C */ xori $a2, $v1, 0xc -/* 0BD814 7F088CA4 2CC60001 */ sltiu $a2, $a2, 1 -.Ljp7F088CA8: -/* 0BD818 7F088CA8 0FC2B574 */ jal sub_GAME_7F0ACA28 -/* 0BD81C 7F088CAC 8FA50048 */ lw $a1, 0x48($sp) -/* 0BD820 7F088CB0 0FC16461 */ jal matrix_4x4_7F058C64 -/* 0BD824 7F088CB4 AFA201F8 */ sw $v0, 0x1f8($sp) -/* 0BD828 7F088CB8 3C0A8008 */ lui $t2, %hi(g_CurrentPlayer) # $t2, 0x8008 -/* 0BD82C 7F088CBC 8D4AA120 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 0BD830 7F088CC0 8FAF0160 */ lw $t7, 0x160($sp) -/* 0BD834 7F088CC4 8D44023C */ lw $a0, 0x23c($t2) -/* 0BD838 7F088CC8 0FC23174 */ jal bondviewTransformManyPosToViewMatrix -/* 0BD83C 7F088CCC 85E5000E */ lh $a1, 0xe($t7) -/* 0BD840 7F088CD0 0FC1646A */ jal matrix_4x4_7F058C88 -/* 0BD844 7F088CD4 00000000 */ nop -.Ljp7F088CD8: -/* 0BD848 7F088CD8 8FBF002C */ lw $ra, 0x2c($sp) -.Ljp7F088CDC: -/* 0BD84C 7F088CDC 8FA201F8 */ lw $v0, 0x1f8($sp) -/* 0BD850 7F088CE0 27BD01F8 */ addiu $sp, $sp, 0x1f8 -/* 0BD854 7F088CE4 03E00008 */ jr $ra -/* 0BD858 7F088CE8 00000000 */ nop -) -#endif - +/** + * Address: 7F087E74 + */ +Gfx *bondviewRenderWatch(Gfx *gdl) +{ + ModelRenderData renderdata; + Mtxf watchmtx; + coord3d watchpos; + f32 t; + Mtxf *matrices; + ModelFileHeader *objheader; + f32 *nodepos; + union ModelRwData *rwdata; + Mtx *perspmtx; + u16 perspNorm; + + if (g_CurrentPlayer->watch_animation_state == 0) + { + goto end; + } + + if (g_CurrentPlayer->pausing_flag == FALSE) + { + goto end; + } + + renderdata = D_8003683C; + watchpos = ZeroCoordWatchPos; + objheader = get_ptr_itemheader_in_hand(GUNLEFT); + nodepos = (f32 *) objheader->Switches[3]; + rwdata = modelGetNodeRwData((Model *) (&g_CurrentPlayer->something_with_watch_object_instance), (ModelNode *) nodepos); + perspmtx = dynAllocateMatrix(); #if defined(VERSION_EU) -GLOBAL_ASM( -.late_rodata -glabel D_8005527C -.word 0x3c8efa35 /*0.017453292*/ -glabel D_80055280 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F087E74 -/* 0BA9C4 7F087FD4 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BA9C8 7F087FD8 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BA9CC 7F087FDC 27BDFE08 */ addiu $sp, $sp, -0x1f8 -/* 0BA9D0 7F087FE0 AFBF002C */ sw $ra, 0x2c($sp) -/* 0BA9D4 7F087FE4 AFA401F8 */ sw $a0, 0x1f8($sp) -/* 0BA9D8 7F087FE8 8C4E01C8 */ lw $t6, 0x1c8($v0) -/* 0BA9DC 7F087FEC 51C001E0 */ beql $t6, $zero, .L7F088770 -/* 0BA9E0 7F087FF0 8FBF002C */ lw $ra, 0x2c($sp) -/* 0BA9E4 7F087FF4 8C4F0200 */ lw $t7, 0x200($v0) -/* 0BA9E8 7F087FF8 3C198003 */ lui $t9, %hi(D_8003683C) # $t9, 0x8003 -/* 0BA9EC 7F087FFC 27391D8C */ addiu $t9, %lo(D_8003683C) # addiu $t9, $t9, 0x1d8c -/* 0BA9F0 7F088000 11E001DA */ beqz $t7, .L7F08876C -/* 0BA9F4 7F088004 27B801B8 */ addiu $t8, $sp, 0x1b8 -/* 0BA9F8 7F088008 272B003C */ addiu $t3, $t9, 0x3c -.L7F08800C: -/* 0BA9FC 7F08800C 8F210000 */ lw $at, ($t9) -/* 0BAA00 7F088010 2739000C */ addiu $t9, $t9, 0xc -/* 0BAA04 7F088014 2718000C */ addiu $t8, $t8, 0xc -/* 0BAA08 7F088018 AF01FFF4 */ sw $at, -0xc($t8) -/* 0BAA0C 7F08801C 8F21FFF8 */ lw $at, -8($t9) -/* 0BAA10 7F088020 AF01FFF8 */ sw $at, -8($t8) -/* 0BAA14 7F088024 8F21FFFC */ lw $at, -4($t9) -/* 0BAA18 7F088028 172BFFF8 */ bne $t9, $t3, .L7F08800C -/* 0BAA1C 7F08802C AF01FFFC */ sw $at, -4($t8) -/* 0BAA20 7F088030 8F210000 */ lw $at, ($t9) -/* 0BAA24 7F088034 3C0D8003 */ lui $t5, %hi(D_8003687C) # $t5, 0x8003 -/* 0BAA28 7F088038 25AD1DCC */ addiu $t5, %lo(D_8003687C) # addiu $t5, $t5, 0x1dcc -/* 0BAA2C 7F08803C AF010000 */ sw $at, ($t8) -/* 0BAA30 7F088040 8DA10000 */ lw $at, ($t5) -/* 0BAA34 7F088044 27AC016C */ addiu $t4, $sp, 0x16c -/* 0BAA38 7F088048 8DAF0004 */ lw $t7, 4($t5) -/* 0BAA3C 7F08804C AD810000 */ sw $at, ($t4) -/* 0BAA40 7F088050 8DA10008 */ lw $at, 8($t5) -/* 0BAA44 7F088054 24040001 */ li $a0, 1 -/* 0BAA48 7F088058 AD8F0004 */ sw $t7, 4($t4) -/* 0BAA4C 7F08805C 0FC174F2 */ jal get_ptr_itemheader_in_hand -/* 0BAA50 7F088060 AD810008 */ sw $at, 8($t4) -/* 0BAA54 7F088064 AFA20160 */ sw $v0, 0x160($sp) -/* 0BAA58 7F088068 3C048007 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8007 -/* 0BAA5C 7F08806C 8C4A0008 */ lw $t2, 8($v0) -/* 0BAA60 7F088070 8C848BC0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BAA64 7F088074 8D45000C */ lw $a1, 0xc($t2) -/* 0BAA68 7F088078 0FC1B3A3 */ jal modelGetNodeRwData -/* 0BAA6C 7F08807C 24840230 */ addiu $a0, $a0, 0x230 -/* 0BAA70 7F088080 0FC2F2A4 */ jal dynAllocateMatrix -/* 0BAA74 7F088084 AFA20158 */ sw $v0, 0x158($sp) -/* 0BAA78 7F088088 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 0BAA7C 7F08808C 44812000 */ mtc1 $at, $f4 -/* 0BAA80 7F088090 3C0B8007 */ lui $t3, %hi(g_CurrentPlayer) # $t3, 0x8007 -/* 0BAA84 7F088094 8D6B8BC0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0BAA88 7F088098 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0BAA8C 7F08809C 44813000 */ mtc1 $at, $f6 -/* 0BAA90 7F0880A0 AFA20154 */ sw $v0, 0x154($sp) -/* 0BAA94 7F0880A4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BAA98 7F0880A8 44814000 */ mtc1 $at, $f8 -/* 0BAA9C 7F0880AC 8D6611BC */ lw $a2, 0x11bc($t3) -/* 0BAAA0 7F0880B0 3C073FB3 */ lui $a3, (0x3FB3458F >> 16) # lui $a3, 0x3fb3 -/* 0BAAA4 7F0880B4 34E7458F */ ori $a3, (0x3FB3458F & 0xFFFF) # ori $a3, $a3, 0x458f -/* 0BAAA8 7F0880B8 00402025 */ move $a0, $v0 -/* 0BAAAC 7F0880BC 27A50152 */ addiu $a1, $sp, 0x152 -/* 0BAAB0 7F0880C0 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0BAAB4 7F0880C4 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0BAAB8 7F0880C8 0C003DB8 */ jal guPerspective -/* 0BAABC 7F0880CC E7A80018 */ swc1 $f8, 0x18($sp) -/* 0BAAC0 7F0880D0 8FA301F8 */ lw $v1, 0x1f8($sp) -/* 0BAAC4 7F0880D4 3C190103 */ lui $t9, (0x01030040 >> 16) # lui $t9, 0x103 -/* 0BAAC8 7F0880D8 37390040 */ ori $t9, (0x01030040 & 0xFFFF) # ori $t9, $t9, 0x40 -/* 0BAACC 7F0880DC AC790000 */ sw $t9, ($v1) -/* 0BAAD0 7F0880E0 8FB80154 */ lw $t8, 0x154($sp) -/* 0BAAD4 7F0880E4 3C01C140 */ li $at, 0xC1400000 # -12.000000 -/* 0BAAD8 7F0880E8 44810000 */ mtc1 $at, $f0 -/* 0BAADC 7F0880EC 3C018000 */ lui $at, 0x8000 -/* 0BAAE0 7F0880F0 3C0CBC00 */ lui $t4, (0xBC00000E >> 16) # lui $t4, 0xbc00 -/* 0BAAE4 7F0880F4 03017021 */ addu $t6, $t8, $at -/* 0BAAE8 7F0880F8 358C000E */ ori $t4, (0xBC00000E & 0xFFFF) # ori $t4, $t4, 0xe -/* 0BAAEC 7F0880FC AC6E0004 */ sw $t6, 4($v1) -/* 0BAAF0 7F088100 24670008 */ addiu $a3, $v1, 8 -/* 0BAAF4 7F088104 ACEC0000 */ sw $t4, ($a3) -/* 0BAAF8 7F088108 97AD0152 */ lhu $t5, 0x152($sp) -/* 0BAAFC 7F08810C 3C088007 */ lui $t0, %hi(g_CurrentPlayer) # $t0, 0x8007 -/* 0BAB00 7F088110 25088BC0 */ addiu $t0, %lo(g_CurrentPlayer) # addiu $t0, $t0, -0x7440 -/* 0BAB04 7F088114 ACED0004 */ sw $t5, 4($a3) -/* 0BAB08 7F088118 8D0F0000 */ lw $t7, ($t0) -/* 0BAB0C 7F08811C 8FAB0158 */ lw $t3, 0x158($sp) -/* 0BAB10 7F088120 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0BAB14 7F088124 8DEA01CC */ lw $t2, 0x1cc($t7) -/* 0BAB18 7F088128 24E90008 */ addiu $t1, $a3, 8 -/* 0BAB1C 7F08812C 27A4016C */ addiu $a0, $sp, 0x16c -/* 0BAB20 7F088130 AD6A0000 */ sw $t2, ($t3) -/* 0BAB24 7F088134 8D020000 */ lw $v0, ($t0) -/* 0BAB28 7F088138 27A60178 */ addiu $a2, $sp, 0x178 -/* 0BAB2C 7F08813C C444054C */ lwc1 $f4, 0x54c($v0) -/* 0BAB30 7F088140 C44A0498 */ lwc1 $f10, 0x498($v0) -/* 0BAB34 7F088144 46002180 */ add.s $f6, $f4, $f0 -/* 0BAB38 7F088148 C4440544 */ lwc1 $f4, 0x544($v0) -/* 0BAB3C 7F08814C 46065202 */ mul.s $f8, $f10, $f6 -/* 0BAB40 7F088150 C44A04A0 */ lwc1 $f10, 0x4a0($v0) -/* 0BAB44 7F088154 46005187 */ neg.s $f6, $f10 -/* 0BAB48 7F088158 46062282 */ mul.s $f10, $f4, $f6 -/* 0BAB4C 7F08815C C444048C */ lwc1 $f4, 0x48c($v0) -/* 0BAB50 7F088160 460A2180 */ add.s $f6, $f4, $f10 -/* 0BAB54 7F088164 46064100 */ add.s $f4, $f8, $f6 -/* 0BAB58 7F088168 E7A4016C */ swc1 $f4, 0x16c($sp) -/* 0BAB5C 7F08816C C4480490 */ lwc1 $f8, 0x490($v0) -/* 0BAB60 7F088170 C44A0548 */ lwc1 $f10, 0x548($v0) -/* 0BAB64 7F088174 46085180 */ add.s $f6, $f10, $f8 -/* 0BAB68 7F088178 E7A60170 */ swc1 $f6, 0x170($sp) -/* 0BAB6C 7F08817C C44A054C */ lwc1 $f10, 0x54c($v0) -/* 0BAB70 7F088180 C44404A0 */ lwc1 $f4, 0x4a0($v0) -/* 0BAB74 7F088184 46005200 */ add.s $f8, $f10, $f0 -/* 0BAB78 7F088188 C44A0544 */ lwc1 $f10, 0x544($v0) -/* 0BAB7C 7F08818C 46082182 */ mul.s $f6, $f4, $f8 -/* 0BAB80 7F088190 C4440498 */ lwc1 $f4, 0x498($v0) -/* 0BAB84 7F088194 46045202 */ mul.s $f8, $f10, $f4 -/* 0BAB88 7F088198 C44A0494 */ lwc1 $f10, 0x494($v0) -/* 0BAB8C 7F08819C 46085100 */ add.s $f4, $f10, $f8 -/* 0BAB90 7F0881A0 44814000 */ mtc1 $at, $f8 -/* 0BAB94 7F0881A4 3C018005 */ lui $at, %hi(D_8005527C) # $at, 0x8005 -/* 0BAB98 7F0881A8 46043280 */ add.s $f10, $f6, $f4 -/* 0BAB9C 7F0881AC E7AA0174 */ swc1 $f10, 0x174($sp) -/* 0BABA0 7F0881B0 C4460148 */ lwc1 $f6, 0x148($v0) -/* 0BABA4 7F0881B4 C42AAE50 */ lwc1 $f10, %lo(D_8005527C)($at) -/* 0BABA8 7F0881B8 AFA901F8 */ sw $t1, 0x1f8($sp) -/* 0BABAC 7F0881BC 46064101 */ sub.s $f4, $f8, $f6 -/* 0BABB0 7F0881C0 460A2202 */ mul.s $f8, $f4, $f10 -/* 0BABB4 7F0881C4 44054000 */ mfc1 $a1, $f8 -/* 0BABB8 7F0881C8 0FC1625E */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BABBC 7F0881CC 00000000 */ nop -/* 0BABC0 7F0881D0 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 0BABC4 7F0881D4 00000000 */ nop -/* 0BABC8 7F0881D8 00402025 */ move $a0, $v0 -/* 0BABCC 7F0881DC 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 0BABD0 7F0881E0 27A50178 */ addiu $a1, $sp, 0x178 -/* 0BABD4 7F0881E4 8FB90160 */ lw $t9, 0x160($sp) -/* 0BABD8 7F0881E8 8724000E */ lh $a0, 0xe($t9) -/* 0BABDC 7F0881EC 0004C180 */ sll $t8, $a0, 6 -/* 0BABE0 7F0881F0 0FC2F2B1 */ jal dynAllocate -/* 0BABE4 7F0881F4 03002025 */ move $a0, $t8 -/* 0BABE8 7F0881F8 3C048007 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8007 -/* 0BABEC 7F0881FC 8C848BC0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BABF0 7F088200 AFA20164 */ sw $v0, 0x164($sp) -/* 0BABF4 7F088204 8FA50160 */ lw $a1, 0x160($sp) -/* 0BABF8 7F088208 24060004 */ li $a2, 4 -/* 0BABFC 7F08820C 0FC21F5D */ jal seems_to_load_cuff_microcode -/* 0BAC00 7F088210 24840230 */ addiu $a0, $a0, 0x230 -/* 0BAC04 7F088214 3C058007 */ lui $a1, %hi(g_CurrentPlayer) # $a1, 0x8007 -/* 0BAC08 7F088218 8FAC0164 */ lw $t4, 0x164($sp) -/* 0BAC0C 7F08821C 8CA58BC0 */ lw $a1, %lo(g_CurrentPlayer)($a1) -/* 0BAC10 7F088220 27AE0178 */ addiu $t6, $sp, 0x178 -/* 0BAC14 7F088224 AFAE01B8 */ sw $t6, 0x1b8($sp) -/* 0BAC18 7F088228 27A401B8 */ addiu $a0, $sp, 0x1b8 -/* 0BAC1C 7F08822C AFAC01C8 */ sw $t4, 0x1c8($sp) -/* 0BAC20 7F088230 0FC1BD9C */ jal subcalcmatrices -/* 0BAC24 7F088234 24A50230 */ addiu $a1, $a1, 0x230 -/* 0BAC28 7F088238 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BAC2C 7F08823C 44810000 */ mtc1 $at, $f0 -/* 0BAC30 7F088240 3C018007 */ lui $at, %hi(watch_time_0) # $at, 0x8007 -/* 0BAC34 7F088244 8FAD0160 */ lw $t5, 0x160($sp) -/* 0BAC38 7F088248 C4268504 */ lwc1 $f6, %lo(watch_time_0)($at) -/* 0BAC3C 7F08824C 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BAC40 7F088250 8DAF0008 */ lw $t7, 8($t5) -/* 0BAC44 7F088254 4600310D */ trunc.w.s $f4, $f6 -/* 0BAC48 7F088258 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BAC4C 7F08825C 8DEA0000 */ lw $t2, ($t7) -/* 0BAC50 7F088260 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 0BAC54 7F088264 44192000 */ mfc1 $t9, $f4 -/* 0BAC58 7F088268 8D430004 */ lw $v1, 4($t2) -/* 0BAC5C 7F08826C 44814000 */ mtc1 $at, $f8 -/* 0BAC60 7F088270 AFB90090 */ sw $t9, 0x90($sp) -/* 0BAC64 7F088274 C44A0258 */ lwc1 $f10, 0x258($v0) -/* 0BAC68 7F088278 46085383 */ div.s $f14, $f10, $f8 -/* 0BAC6C 7F08827C 460E003C */ c.lt.s $f0, $f14 -/* 0BAC70 7F088280 00000000 */ nop -/* 0BAC74 7F088284 45020003 */ bc1fl .L7F088294 -/* 0BAC78 7F088288 C4660000 */ lwc1 $f6, ($v1) -/* 0BAC7C 7F08828C 46000386 */ mov.s $f14, $f0 -/* 0BAC80 7F088290 C4660000 */ lwc1 $f6, ($v1) -.L7F088294: -/* 0BAC84 7F088294 C4440244 */ lwc1 $f4, 0x244($v0) -/* 0BAC88 7F088298 C44801D4 */ lwc1 $f8, 0x1d4($v0) -/* 0BAC8C 7F08829C 8FA80164 */ lw $t0, 0x164($sp) -/* 0BAC90 7F0882A0 46043282 */ mul.s $f10, $f6, $f4 -/* 0BAC94 7F0882A4 44808000 */ mtc1 $zero, $f16 -/* 0BAC98 7F0882A8 C5000030 */ lwc1 $f0, 0x30($t0) -/* 0BAC9C 7F0882AC 27A40108 */ addiu $a0, $sp, 0x108 -/* 0BACA0 7F0882B0 44058000 */ mfc1 $a1, $f16 -/* 0BACA4 7F0882B4 44068000 */ mfc1 $a2, $f16 -/* 0BACA8 7F0882B8 44078000 */ mfc1 $a3, $f16 -/* 0BACAC 7F0882BC 460A4181 */ sub.s $f6, $f8, $f10 -/* 0BACB0 7F0882C0 46003101 */ sub.s $f4, $f6, $f0 -/* 0BACB4 7F0882C4 460E2202 */ mul.s $f8, $f4, $f14 -/* 0BACB8 7F0882C8 46004280 */ add.s $f10, $f8, $f0 -/* 0BACBC 7F0882CC E7AA00B4 */ swc1 $f10, 0xb4($sp) -/* 0BACC0 7F0882D0 C4440244 */ lwc1 $f4, 0x244($v0) -/* 0BACC4 7F0882D4 C4660008 */ lwc1 $f6, 8($v1) -/* 0BACC8 7F0882D8 C44A01D8 */ lwc1 $f10, 0x1d8($v0) -/* 0BACCC 7F0882DC C5020034 */ lwc1 $f2, 0x34($t0) -/* 0BACD0 7F0882E0 46043202 */ mul.s $f8, $f6, $f4 -/* 0BACD4 7F0882E4 46085180 */ add.s $f6, $f10, $f8 -/* 0BACD8 7F0882E8 46023101 */ sub.s $f4, $f6, $f2 -/* 0BACDC 7F0882EC 460E2282 */ mul.s $f10, $f4, $f14 -/* 0BACE0 7F0882F0 46025200 */ add.s $f8, $f10, $f2 -/* 0BACE4 7F0882F4 E7A800B8 */ swc1 $f8, 0xb8($sp) -/* 0BACE8 7F0882F8 C4440244 */ lwc1 $f4, 0x244($v0) -/* 0BACEC 7F0882FC C4660004 */ lwc1 $f6, 4($v1) -/* 0BACF0 7F088300 C44801DC */ lwc1 $f8, 0x1dc($v0) -/* 0BACF4 7F088304 C50C0038 */ lwc1 $f12, 0x38($t0) -/* 0BACF8 7F088308 46043282 */ mul.s $f10, $f6, $f4 -/* 0BACFC 7F08830C 460A4181 */ sub.s $f6, $f8, $f10 -/* 0BAD00 7F088310 460C3101 */ sub.s $f4, $f6, $f12 -/* 0BAD04 7F088314 460E2202 */ mul.s $f8, $f4, $f14 -/* 0BAD08 7F088318 460C4280 */ add.s $f10, $f8, $f12 -/* 0BAD0C 7F08831C E7AA00BC */ swc1 $f10, 0xbc($sp) -/* 0BAD10 7F088320 C44601E0 */ lwc1 $f6, 0x1e0($v0) -/* 0BAD14 7F088324 E7A60010 */ swc1 $f6, 0x10($sp) -/* 0BAD18 7F088328 C44401E4 */ lwc1 $f4, 0x1e4($v0) -/* 0BAD1C 7F08832C E7A40014 */ swc1 $f4, 0x14($sp) -/* 0BAD20 7F088330 C44801E8 */ lwc1 $f8, 0x1e8($v0) -/* 0BAD24 7F088334 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0BAD28 7F088338 C44A01EC */ lwc1 $f10, 0x1ec($v0) -/* 0BAD2C 7F08833C E7AA001C */ swc1 $f10, 0x1c($sp) -/* 0BAD30 7F088340 C44601F0 */ lwc1 $f6, 0x1f0($v0) -/* 0BAD34 7F088344 E7A60020 */ swc1 $f6, 0x20($sp) -/* 0BAD38 7F088348 C44401F4 */ lwc1 $f4, 0x1f4($v0) -/* 0BAD3C 7F08834C E7AE0168 */ swc1 $f14, 0x168($sp) -/* 0BAD40 7F088350 0FC1676C */ jal matrix_4x4_set_basis_and_position_target -/* 0BAD44 7F088354 E7A40024 */ swc1 $f4, 0x24($sp) -/* 0BAD48 7F088358 8FA40164 */ lw $a0, 0x164($sp) -/* 0BAD4C 7F08835C 0FC16342 */ jal matrix_4x4_get_rotation_around_xyz -/* 0BAD50 7F088360 27A500FC */ addiu $a1, $sp, 0xfc -/* 0BAD54 7F088364 27A40108 */ addiu $a0, $sp, 0x108 -/* 0BAD58 7F088368 0FC16342 */ jal matrix_4x4_get_rotation_around_xyz -/* 0BAD5C 7F08836C 27A500F0 */ addiu $a1, $sp, 0xf0 -/* 0BAD60 7F088370 27A400FC */ addiu $a0, $sp, 0xfc -/* 0BAD64 7F088374 0FC16E29 */ jal quaternion_set_rotation_around_xyzf -/* 0BAD68 7F088378 27A500E0 */ addiu $a1, $sp, 0xe0 -/* 0BAD6C 7F08837C 27A400F0 */ addiu $a0, $sp, 0xf0 -/* 0BAD70 7F088380 0FC16E29 */ jal quaternion_set_rotation_around_xyzf -/* 0BAD74 7F088384 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0BAD78 7F088388 27A400E0 */ addiu $a0, $sp, 0xe0 -/* 0BAD7C 7F08838C 0FC170B0 */ jal quaternion_ensure_shortest_path -/* 0BAD80 7F088390 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0BAD84 7F088394 27A400E0 */ addiu $a0, $sp, 0xe0 -/* 0BAD88 7F088398 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0BAD8C 7F08839C 8FA60168 */ lw $a2, 0x168($sp) -/* 0BAD90 7F0883A0 0FC16FAE */ jal quaternion_slerp -/* 0BAD94 7F0883A4 27A700C0 */ addiu $a3, $sp, 0xc0 -/* 0BAD98 7F0883A8 27A400C0 */ addiu $a0, $sp, 0xc0 -/* 0BAD9C 7F0883AC 0FC16EB6 */ jal quaternion_to_matrix -/* 0BADA0 7F0883B0 8FA50164 */ lw $a1, 0x164($sp) -/* 0BADA4 7F0883B4 27A400B4 */ addiu $a0, $sp, 0xb4 -/* 0BADA8 7F0883B8 0FC16390 */ jal matrix_4x4_set_position -/* 0BADAC 7F0883BC 8FA50164 */ lw $a1, 0x164($sp) -/* 0BADB0 7F0883C0 3C188007 */ lui $t8, %hi(g_CurrentPlayer) # $t8, 0x8007 -/* 0BADB4 7F0883C4 8F188BC0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0BADB8 7F0883C8 8FA50164 */ lw $a1, 0x164($sp) -/* 0BADBC 7F0883CC 0FC163C9 */ jal matrix_scalar_multiply -/* 0BADC0 7F0883D0 C70C0244 */ lwc1 $f12, 0x244($t8) -/* 0BADC4 7F0883D4 2403003C */ li $v1, 60 -/* 0BADC8 7F0883D8 8FA40090 */ lw $a0, 0x90($sp) -/* 0BADCC 7F0883DC 3C018005 */ lui $at, %hi(D_80055280) # $at, 0x8005 -/* 0BADD0 7F0883E0 C422AE54 */ lwc1 $f2, %lo(D_80055280)($at) -/* 0BADD4 7F0883E4 0083001A */ div $zero, $a0, $v1 -/* 0BADD8 7F0883E8 00007010 */ mfhi $t6 -/* 0BADDC 7F0883EC 00001012 */ mflo $v0 -/* 0BADE0 7F0883F0 448E4000 */ mtc1 $t6, $f8 -/* 0BADE4 7F0883F4 44808000 */ mtc1 $zero, $f16 -/* 0BADE8 7F0883F8 0043001A */ div $zero, $v0, $v1 -/* 0BADEC 7F0883FC 00006010 */ mfhi $t4 -/* 0BADF0 7F088400 00006812 */ mflo $t5 -/* 0BADF4 7F088404 468042A0 */ cvt.s.w $f10, $f8 -/* 0BADF8 7F088408 14600002 */ bnez $v1, .L7F088414 -/* 0BADFC 7F08840C 00000000 */ nop -/* 0BAE00 7F088410 0007000D */ break 7 -.L7F088414: -/* 0BAE04 7F088414 2401FFFF */ li $at, -1 -/* 0BAE08 7F088418 14610004 */ bne $v1, $at, .L7F08842C -/* 0BAE0C 7F08841C 3C018000 */ lui $at, 0x8000 -/* 0BAE10 7F088420 14810002 */ bne $a0, $at, .L7F08842C -/* 0BAE14 7F088424 00000000 */ nop -/* 0BAE18 7F088428 0006000D */ break 6 -.L7F08842C: -/* 0BAE1C 7F08842C 01A3001A */ div $zero, $t5, $v1 -/* 0BAE20 7F088430 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0BAE24 7F088434 44813000 */ mtc1 $at, $f6 -/* 0BAE28 7F088438 448C4000 */ mtc1 $t4, $f8 -/* 0BAE2C 7F08843C 00007810 */ mfhi $t7 -/* 0BAE30 7F088440 46065103 */ div.s $f4, $f10, $f6 -/* 0BAE34 7F088444 14600002 */ bnez $v1, .L7F088450 -/* 0BAE38 7F088448 00000000 */ nop -/* 0BAE3C 7F08844C 0007000D */ break 7 -.L7F088450: -/* 0BAE40 7F088450 2401FFFF */ li $at, -1 -/* 0BAE44 7F088454 14610004 */ bne $v1, $at, .L7F088468 -/* 0BAE48 7F088458 3C018000 */ li $at, 0x80000000 # -0.000000 -/* 0BAE4C 7F08845C 14410002 */ bne $v0, $at, .L7F088468 -/* 0BAE50 7F088460 00000000 */ nop -/* 0BAE54 7F088464 0006000D */ break 6 -.L7F088468: -/* 0BAE58 7F088468 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0BAE5C 7F08846C 8FB90160 */ lw $t9, 0x160($sp) -/* 0BAE60 7F088470 468042A0 */ cvt.s.w $f10, $f8 -/* 0BAE64 7F088474 46045180 */ add.s $f6, $f10, $f4 -/* 0BAE68 7F088478 44812000 */ mtc1 $at, $f4 -/* 0BAE6C 7F08847C 46003207 */ neg.s $f8, $f6 -/* 0BAE70 7F088480 448F3000 */ mtc1 $t7, $f6 -/* 0BAE74 7F088484 46024282 */ mul.s $f10, $f8, $f2 -/* 0BAE78 7F088488 46803220 */ cvt.s.w $f8, $f6 -/* 0BAE7C 7F08848C 46045483 */ div.s $f18, $f10, $f4 -/* 0BAE80 7F088490 46004287 */ neg.s $f10, $f8 -/* 0BAE84 7F088494 46025102 */ mul.s $f4, $f10, $f2 -/* 0BAE88 7F088498 4610903C */ c.lt.s $f18, $f16 -/* 0BAE8C 7F08849C 46009306 */ mov.s $f12, $f18 -/* 0BAE90 7F0884A0 14600002 */ bnez $v1, .L7F0884AC -/* 0BAE94 7F0884A4 00000000 */ nop -/* 0BAE98 7F0884A8 0007000D */ break 7 -.L7F0884AC: -/* 0BAE9C 7F0884AC 2401FFFF */ li $at, -1 -/* 0BAEA0 7F0884B0 14610004 */ bne $v1, $at, .L7F0884C4 -/* 0BAEA4 7F0884B4 3C018000 */ li $at, 0x80000000 # -0.000000 -/* 0BAEA8 7F0884B8 15A10002 */ bne $t5, $at, .L7F0884C4 -/* 0BAEAC 7F0884BC 00000000 */ nop -/* 0BAEB0 7F0884C0 0006000D */ break 6 -.L7F0884C4: -/* 0BAEB4 7F0884C4 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0BAEB8 7F0884C8 44813000 */ mtc1 $at, $f6 -/* 0BAEBC 7F0884CC 44815000 */ mtc1 $at, $f10 -/* 0BAEC0 7F0884D0 24010E10 */ li $at, 3600 -/* 0BAEC4 7F0884D4 0041001A */ div $zero, $v0, $at -/* 0BAEC8 7F0884D8 00005012 */ mflo $t2 -/* 0BAECC 7F0884DC 2401000C */ li $at, 12 -/* 0BAED0 7F0884E0 46062203 */ div.s $f8, $f4, $f6 -/* 0BAED4 7F0884E4 0141001A */ div $zero, $t2, $at -/* 0BAED8 7F0884E8 460A9103 */ div.s $f4, $f18, $f10 -/* 0BAEDC 7F0884EC 00005810 */ mfhi $t3 -/* 0BAEE0 7F0884F0 448B5000 */ mtc1 $t3, $f10 -/* 0BAEE4 7F0884F4 3C014140 */ li $at, 0x41400000 # 12.000000 -/* 0BAEE8 7F0884F8 46044180 */ add.s $f6, $f8, $f4 -/* 0BAEEC 7F0884FC 46805220 */ cvt.s.w $f8, $f10 -/* 0BAEF0 7F088500 E7A60040 */ swc1 $f6, 0x40($sp) -/* 0BAEF4 7F088504 46003386 */ mov.s $f14, $f6 -/* 0BAEF8 7F088508 46004107 */ neg.s $f4, $f8 -/* 0BAEFC 7F08850C 44814000 */ mtc1 $at, $f8 -/* 0BAF00 7F088510 46022282 */ mul.s $f10, $f4, $f2 -/* 0BAF04 7F088514 46085103 */ div.s $f4, $f10, $f8 -/* 0BAF08 7F088518 44815000 */ mtc1 $at, $f10 -/* 0BAF0C 7F08851C 3C014434 */ li $at, 0x44340000 # 720.000000 -/* 0BAF10 7F088520 460A3203 */ div.s $f8, $f6, $f10 -/* 0BAF14 7F088524 44815000 */ mtc1 $at, $f10 -/* 0BAF18 7F088528 46082180 */ add.s $f6, $f4, $f8 -/* 0BAF1C 7F08852C 460A9103 */ div.s $f4, $f18, $f10 -/* 0BAF20 7F088530 C7AA0040 */ lwc1 $f10, 0x40($sp) -/* 0BAF24 7F088534 46043200 */ add.s $f8, $f6, $f4 -/* 0BAF28 7F088538 E7A8003C */ swc1 $f8, 0x3c($sp) -/* 0BAF2C 7F08853C 46004006 */ mov.s $f0, $f8 -/* 0BAF30 7F088540 45000006 */ bc1f .L7F08855C -/* 0BAF34 7F088544 C7A6003C */ lwc1 $f6, 0x3c($sp) -/* 0BAF38 7F088548 46026300 */ add.s $f12, $f12, $f2 -.L7F08854C: -/* 0BAF3C 7F08854C 4610603C */ c.lt.s $f12, $f16 -/* 0BAF40 7F088550 00000000 */ nop -/* 0BAF44 7F088554 4503FFFD */ bc1tl .L7F08854C -/* 0BAF48 7F088558 46026300 */ add.s $f12, $f12, $f2 -.L7F08855C: -/* 0BAF4C 7F08855C 4610503C */ c.lt.s $f10, $f16 -/* 0BAF50 7F088560 00000000 */ nop -/* 0BAF54 7F088564 45020007 */ bc1fl .L7F088584 -/* 0BAF58 7F088568 4610303C */ c.lt.s $f6, $f16 -/* 0BAF5C 7F08856C 46027380 */ add.s $f14, $f14, $f2 -.L7F088570: -/* 0BAF60 7F088570 4610703C */ c.lt.s $f14, $f16 -/* 0BAF64 7F088574 00000000 */ nop -/* 0BAF68 7F088578 4503FFFD */ bc1tl .L7F088570 -/* 0BAF6C 7F08857C 46027380 */ add.s $f14, $f14, $f2 -/* 0BAF70 7F088580 4610303C */ c.lt.s $f6, $f16 -.L7F088584: -/* 0BAF74 7F088584 00000000 */ nop -/* 0BAF78 7F088588 45020007 */ bc1fl .L7F0885A8 -/* 0BAF7C 7F08858C 8F380008 */ lw $t8, 8($t9) -/* 0BAF80 7F088590 46020000 */ add.s $f0, $f0, $f2 -.L7F088594: -/* 0BAF84 7F088594 4610003C */ c.lt.s $f0, $f16 -/* 0BAF88 7F088598 00000000 */ nop -/* 0BAF8C 7F08859C 4503FFFD */ bc1tl .L7F088594 -/* 0BAF90 7F0885A0 46020000 */ add.s $f0, $f0, $f2 -/* 0BAF94 7F0885A4 8F380008 */ lw $t8, 8($t9) -.L7F0885A8: -/* 0BAF98 7F0885A8 8FA60164 */ lw $a2, 0x164($sp) -/* 0BAF9C 7F0885AC 44050000 */ mfc1 $a1, $f0 -/* 0BAFA0 7F0885B0 8F0E0000 */ lw $t6, ($t8) -/* 0BAFA4 7F0885B4 24C60040 */ addiu $a2, $a2, 0x40 -/* 0BAFA8 7F0885B8 8DC40004 */ lw $a0, 4($t6) -/* 0BAFAC 7F0885BC E7AE0098 */ swc1 $f14, 0x98($sp) -/* 0BAFB0 7F0885C0 E7AC009C */ swc1 $f12, 0x9c($sp) -/* 0BAFB4 7F0885C4 0FC1625E */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BAFB8 7F0885C8 AFA60040 */ sw $a2, 0x40($sp) -/* 0BAFBC 7F0885CC 8FA50040 */ lw $a1, 0x40($sp) -/* 0BAFC0 7F0885D0 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 0BAFC4 7F0885D4 8FA40164 */ lw $a0, 0x164($sp) -/* 0BAFC8 7F0885D8 8FAC0160 */ lw $t4, 0x160($sp) -/* 0BAFCC 7F0885DC C7AE0098 */ lwc1 $f14, 0x98($sp) -/* 0BAFD0 7F0885E0 8FA60164 */ lw $a2, 0x164($sp) -/* 0BAFD4 7F0885E4 8D8D0008 */ lw $t5, 8($t4) -/* 0BAFD8 7F0885E8 44057000 */ mfc1 $a1, $f14 -/* 0BAFDC 7F0885EC 24C60080 */ addiu $a2, $a2, 0x80 -/* 0BAFE0 7F0885F0 8DAF0004 */ lw $t7, 4($t5) -/* 0BAFE4 7F0885F4 8DE40004 */ lw $a0, 4($t7) -/* 0BAFE8 7F0885F8 0FC1625E */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BAFEC 7F0885FC AFA60040 */ sw $a2, 0x40($sp) -/* 0BAFF0 7F088600 8FA50040 */ lw $a1, 0x40($sp) -/* 0BAFF4 7F088604 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 0BAFF8 7F088608 8FA40164 */ lw $a0, 0x164($sp) -/* 0BAFFC 7F08860C 8FAA0160 */ lw $t2, 0x160($sp) -/* 0BB000 7F088610 C7AC009C */ lwc1 $f12, 0x9c($sp) -/* 0BB004 7F088614 8FA60164 */ lw $a2, 0x164($sp) -/* 0BB008 7F088618 8D4B0008 */ lw $t3, 8($t2) -/* 0BB00C 7F08861C 44056000 */ mfc1 $a1, $f12 -/* 0BB010 7F088620 24C600C0 */ addiu $a2, $a2, 0xc0 -/* 0BB014 7F088624 8D790008 */ lw $t9, 8($t3) -/* 0BB018 7F088628 8F240004 */ lw $a0, 4($t9) -/* 0BB01C 7F08862C 0FC1625E */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BB020 7F088630 AFA60040 */ sw $a2, 0x40($sp) -/* 0BB024 7F088634 8FA50040 */ lw $a1, 0x40($sp) -/* 0BB028 7F088638 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 0BB02C 7F08863C 8FA40164 */ lw $a0, 0x164($sp) -/* 0BB030 7F088640 8FAE01F8 */ lw $t6, 0x1f8($sp) -/* 0BB034 7F088644 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BB038 7F088648 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BB03C 7F08864C 24180003 */ li $t8, 3 -/* 0BB040 7F088650 240C0004 */ li $t4, 4 -/* 0BB044 7F088654 AFB801C0 */ sw $t8, 0x1c0($sp) -/* 0BB048 7F088658 AFA001BC */ sw $zero, 0x1bc($sp) -/* 0BB04C 7F08865C AFAC01E8 */ sw $t4, 0x1e8($sp) -/* 0BB050 7F088660 AFAE01C4 */ sw $t6, 0x1c4($sp) -/* 0BB054 7F088664 8C4301C8 */ lw $v1, 0x1c8($v0) -/* 0BB058 7F088668 24010005 */ li $at, 5 -/* 0BB05C 7F08866C 27A401B8 */ addiu $a0, $sp, 0x1b8 -/* 0BB060 7F088670 10610002 */ beq $v1, $at, .L7F08867C -/* 0BB064 7F088674 2401000C */ li $at, 12 -/* 0BB068 7F088678 14610003 */ bne $v1, $at, .L7F088688 -.L7F08867C: -/* 0BB06C 7F08867C 240D00CD */ li $t5, 205 -/* 0BB070 7F088680 1000000C */ b .L7F0886B4 -/* 0BB074 7F088684 AFAD01EC */ sw $t5, 0x1ec($sp) -.L7F088688: -/* 0BB078 7F088688 904A0FD4 */ lbu $t2, 0xfd4($v0) -/* 0BB07C 7F08868C 904F0FD7 */ lbu $t7, 0xfd7($v0) -/* 0BB080 7F088690 90580FD5 */ lbu $t8, 0xfd5($v0) -/* 0BB084 7F088694 904D0FD6 */ lbu $t5, 0xfd6($v0) -/* 0BB088 7F088698 000A5E00 */ sll $t3, $t2, 0x18 -/* 0BB08C 7F08869C 01EBC825 */ or $t9, $t7, $t3 -/* 0BB090 7F0886A0 00187400 */ sll $t6, $t8, 0x10 -/* 0BB094 7F0886A4 032E6025 */ or $t4, $t9, $t6 -/* 0BB098 7F0886A8 000D5200 */ sll $t2, $t5, 8 -/* 0BB09C 7F0886AC 018A7825 */ or $t7, $t4, $t2 -/* 0BB0A0 7F0886B0 AFAF01EC */ sw $t7, 0x1ec($sp) -.L7F0886B4: -/* 0BB0A4 7F0886B4 0FC1D1D6 */ jal subdraw -/* 0BB0A8 7F0886B8 24450230 */ addiu $a1, $v0, 0x230 -/* 0BB0AC 7F0886BC 8FAB01C4 */ lw $t3, 0x1c4($sp) -/* 0BB0B0 7F0886C0 8FB80160 */ lw $t8, 0x160($sp) -/* 0BB0B4 7F0886C4 AFAB01F8 */ sw $t3, 0x1f8($sp) -/* 0BB0B8 7F0886C8 8F190008 */ lw $t9, 8($t8) -/* 0BB0BC 7F0886CC 8F2E0008 */ lw $t6, 8($t9) -/* 0BB0C0 7F0886D0 8DCD0004 */ lw $t5, 4($t6) -/* 0BB0C4 7F0886D4 0FC2F2A4 */ jal dynAllocateMatrix -/* 0BB0C8 7F0886D8 AFAD008C */ sw $t5, 0x8c($sp) -/* 0BB0CC 7F0886DC AFA20048 */ sw $v0, 0x48($sp) -/* 0BB0D0 7F0886E0 8FA4008C */ lw $a0, 0x8c($sp) -/* 0BB0D4 7F0886E4 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 0BB0D8 7F0886E8 27A5004C */ addiu $a1, $sp, 0x4c -/* 0BB0DC 7F0886EC 8FA40164 */ lw $a0, 0x164($sp) -/* 0BB0E0 7F0886F0 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 0BB0E4 7F0886F4 27A5004C */ addiu $a1, $sp, 0x4c -/* 0BB0E8 7F0886F8 0FC16443 */ jal matrix_4x4_7F058C64 -/* 0BB0EC 7F0886FC 00000000 */ nop -/* 0BB0F0 7F088700 27A4004C */ addiu $a0, $sp, 0x4c -/* 0BB0F4 7F088704 0FC16451 */ jal matrix_4x4_f32_to_s32 -/* 0BB0F8 7F088708 8FA50048 */ lw $a1, 0x48($sp) -/* 0BB0FC 7F08870C 0FC1644C */ jal matrix_4x4_7F058C88 -/* 0BB100 7F088710 00000000 */ nop -/* 0BB104 7F088714 3C0C8007 */ lui $t4, %hi(g_CurrentPlayer) # $t4, 0x8007 -/* 0BB108 7F088718 8D8C8BC0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0BB10C 7F08871C 8FA401F8 */ lw $a0, 0x1f8($sp) -/* 0BB110 7F088720 8D8301C8 */ lw $v1, 0x1c8($t4) -/* 0BB114 7F088724 38660005 */ xori $a2, $v1, 5 -/* 0BB118 7F088728 2CC60001 */ sltiu $a2, $a2, 1 -/* 0BB11C 7F08872C 14C00003 */ bnez $a2, .L7F08873C -/* 0BB120 7F088730 00000000 */ nop -/* 0BB124 7F088734 3866000C */ xori $a2, $v1, 0xc -/* 0BB128 7F088738 2CC60001 */ sltiu $a2, $a2, 1 -.L7F08873C: -/* 0BB12C 7F08873C 0FC2AF3A */ jal sub_GAME_7F0ACA28 -/* 0BB130 7F088740 8FA50048 */ lw $a1, 0x48($sp) -/* 0BB134 7F088744 0FC16443 */ jal matrix_4x4_7F058C64 -/* 0BB138 7F088748 AFA201F8 */ sw $v0, 0x1f8($sp) -/* 0BB13C 7F08874C 3C0A8007 */ lui $t2, %hi(g_CurrentPlayer) # $t2, 0x8007 -/* 0BB140 7F088750 8D4A8BC0 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 0BB144 7F088754 8FAF0160 */ lw $t7, 0x160($sp) -/* 0BB148 7F088758 8D44023C */ lw $a0, 0x23c($t2) -/* 0BB14C 7F08875C 0FC2300F */ jal bondviewTransformManyPosToViewMatrix -/* 0BB150 7F088760 85E5000E */ lh $a1, 0xe($t7) -/* 0BB154 7F088764 0FC1644C */ jal matrix_4x4_7F058C88 -/* 0BB158 7F088768 00000000 */ nop -.L7F08876C: -/* 0BB15C 7F08876C 8FBF002C */ lw $ra, 0x2c($sp) -.L7F088770: -/* 0BB160 7F088770 8FA201F8 */ lw $v0, 0x1f8($sp) -/* 0BB164 7F088774 27BD01F8 */ addiu $sp, $sp, 0x1f8 -/* 0BB168 7F088778 03E00008 */ jr $ra -/* 0BB16C 7F08877C 00000000 */ nop -) -#endif - - - -#endif - - -#ifdef NONMATCHING -s32 sub_GAME_7F088618(void *arg0) { - ? sp78; - s32 spB8; - s32 spBC; - ? temp_ret; - void *temp_s0; - void *temp_s0_2; - void *temp_s0_3; - void *temp_s0_4; - void *temp_s0_5; - void *temp_s0_6; - void *temp_s0_7; - void *temp_s0_8; - void *temp_s0_9; - void *temp_s0_10; - void *temp_s0_11; - - // Node 0 - sub_GAME_7F0A2F30((g_CurrentPlayer + 0x12b8), 0x2e, 1, g_CurrentPlayer->apparentarmour); - sub_GAME_7F0A3330((g_CurrentPlayer + 0x19f8), (g_CurrentPlayer + 0x800012b8), 0x2e); - sub_GAME_7F0A2F30((g_CurrentPlayer + 0x1598), 0x2e, -1, g_CurrentPlayer->apparenthealth); - sub_GAME_7F0A3330((g_CurrentPlayer + 0x2128), (g_CurrentPlayer + 0x80001598), 0x2e); - spBC = dynAllocateMatrix(); - temp_ret = dynAllocateMatrix(); - spB8 = temp_ret; - guOrtho(temp_ret, (-800.0f * D_800364CC), (800.0f * D_800364CC), (-600.0f * D_800364CC), (f32) (600.0f * D_800364CC), -100.0f, 1000.0f, 1.0f); - *arg0 = 0x1030040; - temp_s0 = (arg0 + 8); - arg0->unk4 = osVirtualToPhysical(spB8); - matrix_4x4_set_lookat_target(&sp78, 0.0f, &0x43FA0004, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f); - matrix_4x4_f32_to_s32(&sp78, spBC); - *temp_s0 = 0x1020040; - temp_s0_2 = (temp_s0 + 8); - temp_s0->unk4 = osVirtualToPhysical(spBC); - temp_s0_3 = (temp_s0_2 + 8); - *temp_s0_2 = 0xe7000000;//gDPPipeSync(glistp++); - temp_s0_2->unk4 = 0; - temp_s0_4 = (temp_s0_3 + 8); - *temp_s0_3 = 0xba001402; //gDPSetCyceType(glistp++, G_CYC_1CYCLE); - temp_s0_3->unk4 = 0; - temp_s0_5 = (temp_s0_4 + 8); - *temp_s0_4 = 0xb900031d; //gDPSetRenderMode(G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2); - temp_s0_4->unk4 = 0x5041c8; - temp_s0_6 = (temp_s0_5 + 8); - *temp_s0_5 = 0xb9000002; - *temp_s0_5 = 0; - temp_s0_7 = (temp_s0_6 + 8); - *temp_s0_6 = 0xfcffffff;//gDPSetCombineMode(glistp++,SHADE, SHADE2); - temp_s0_6->unk4 = 0xfffe793c; - temp_s0_8 = (temp_s0_7 + 8); - *temp_s0_7 = 0xfa000000;//gDPSetPrimColor(glistp++, 0, 0, 230, 230, 230, 0); - temp_s0_7->unk4 = 0xe6e6e600; - temp_s0_9 = (temp_s0_8 + 8); - *temp_s0_8 = 0xb6000000;//gDPClearGeometryMode(glistp++, G_CULL_FRONT | G_CULL_BACK ); - temp_s0_8->unk4 = 0x3000; - *temp_s0_9 = 0x6000000; - temp_s0_10 = (temp_s0_9 + 8); - temp_s0_9->unk4 = (s32) (g_CurrentPlayer + 0x800019f8); - *temp_s0_10 = 0x6000000; - temp_s0_11 = (temp_s0_10 + 8); - temp_s0_10->unk4 = (s32) (g_CurrentPlayer + 0x80002128); - *temp_s0_11 = 0x1030040; - temp_s0_11->unk4 = osVirtualToPhysical(currentPlayerGetProjectionMatrix(temp_s0_9, temp_s0_10, 0x6000000, temp_s0_6)); - return (temp_s0_11 + 8); -} + guPerspective(perspmtx, &perspNorm, g_CurrentPlayer->zoominfovy, 1.4005603f, 10.0f, 300.0f, 1.0f); #else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F088618 -/* 0BD148 7F088618 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 0BD14C 7F08861C AFB20038 */ sw $s2, 0x38($sp) -/* 0BD150 7F088620 3C128008 */ lui $s2, %hi(g_CurrentPlayer) -/* 0BD154 7F088624 2652A0B0 */ addiu $s2, %lo(g_CurrentPlayer) # addiu $s2, $s2, -0x5f50 -/* 0BD158 7F088628 AFB10034 */ sw $s1, 0x34($sp) -/* 0BD15C 7F08862C 8E510000 */ lw $s1, ($s2) -/* 0BD160 7F088630 AFB00030 */ sw $s0, 0x30($sp) -/* 0BD164 7F088634 00808025 */ move $s0, $a0 -/* 0BD168 7F088638 AFBF003C */ sw $ra, 0x3c($sp) -/* 0BD16C 7F08863C 2405002E */ li $a1, 46 -/* 0BD170 7F088640 24060001 */ li $a2, 1 -/* 0BD174 7F088644 8E2700F0 */ lw $a3, 0xf0($s1) -/* 0BD178 7F088648 0FC28BCC */ jal sub_GAME_7F0A2F30 -/* 0BD17C 7F08864C 262412B8 */ addiu $a0, $s1, 0x12b8 -/* 0BD180 7F088650 8E510000 */ lw $s1, ($s2) -/* 0BD184 7F088654 3C018000 */ lui $at, (0x800012B8 >> 16) -/* 0BD188 7F088658 342112B8 */ ori $at, (0x800012B8 & 0xFFFF) # ori $at, $at, 0x12b8 -/* 0BD18C 7F08865C 2406002E */ li $a2, 46 -/* 0BD190 7F088660 02212821 */ addu $a1, $s1, $at -/* 0BD194 7F088664 0FC28CCC */ jal sub_GAME_7F0A3330 -/* 0BD198 7F088668 262419F8 */ addiu $a0, $s1, 0x19f8 -/* 0BD19C 7F08866C 8E510000 */ lw $s1, ($s2) -/* 0BD1A0 7F088670 2405002E */ li $a1, 46 -/* 0BD1A4 7F088674 2406FFFF */ li $a2, -1 -/* 0BD1A8 7F088678 26241598 */ addiu $a0, $s1, 0x1598 -/* 0BD1AC 7F08867C 0FC28BCC */ jal sub_GAME_7F0A2F30 -/* 0BD1B0 7F088680 8E2700EC */ lw $a3, 0xec($s1) -/* 0BD1B4 7F088684 8E510000 */ lw $s1, ($s2) -/* 0BD1B8 7F088688 3C018000 */ lui $at, (0x80001598 >> 16) -/* 0BD1BC 7F08868C 34211598 */ ori $at, (0x80001598 & 0xFFFF) # ori $at, $at, 0x1598 -/* 0BD1C0 7F088690 2406002E */ li $a2, 46 -/* 0BD1C4 7F088694 02212821 */ addu $a1, $s1, $at -/* 0BD1C8 7F088698 0FC28CCC */ jal sub_GAME_7F0A3330 -/* 0BD1CC 7F08869C 26242128 */ addiu $a0, $s1, 0x2128 -/* 0BD1D0 7F0886A0 0FC2F5B8 */ jal dynAllocateMatrix -/* 0BD1D4 7F0886A4 00000000 */ nop -/* 0BD1D8 7F0886A8 0FC2F5B8 */ jal dynAllocateMatrix -/* 0BD1DC 7F0886AC AFA200BC */ sw $v0, 0xbc($sp) -/* 0BD1E0 7F0886B0 3C018003 */ lui $at, %hi(D_800364CC) -/* 0BD1E4 7F0886B4 C42064CC */ lwc1 $f0, %lo(D_800364CC)($at) -/* 0BD1E8 7F0886B8 3C01C448 */ li $at, 0xC4480000 # -800.000000 -/* 0BD1EC 7F0886BC 44812000 */ mtc1 $at, $f4 -/* 0BD1F0 7F0886C0 3C014448 */ li $at, 0x44480000 # 800.000000 -/* 0BD1F4 7F0886C4 44814000 */ mtc1 $at, $f8 -/* 0BD1F8 7F0886C8 46002182 */ mul.s $f6, $f4, $f0 -/* 0BD1FC 7F0886CC 3C01C416 */ li $at, 0xC4160000 # -600.000000 -/* 0BD200 7F0886D0 44818000 */ mtc1 $at, $f16 -/* 0BD204 7F0886D4 46004282 */ mul.s $f10, $f8, $f0 -/* 0BD208 7F0886D8 3C014416 */ li $at, 0x44160000 # 600.000000 -/* 0BD20C 7F0886DC 44812000 */ mtc1 $at, $f4 -/* 0BD210 7F0886E0 46008482 */ mul.s $f18, $f16, $f0 -/* 0BD214 7F0886E4 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 0BD218 7F0886E8 44053000 */ mfc1 $a1, $f6 -/* 0BD21C 7F0886EC 46002182 */ mul.s $f6, $f4, $f0 -/* 0BD220 7F0886F0 44814000 */ mtc1 $at, $f8 -/* 0BD224 7F0886F4 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0BD228 7F0886F8 44065000 */ mfc1 $a2, $f10 -/* 0BD22C 7F0886FC 44815000 */ mtc1 $at, $f10 -/* 0BD230 7F088700 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BD234 7F088704 44818000 */ mtc1 $at, $f16 -/* 0BD238 7F088708 44079000 */ mfc1 $a3, $f18 -/* 0BD23C 7F08870C AFA200B8 */ sw $v0, 0xb8($sp) -/* 0BD240 7F088710 E7A60010 */ swc1 $f6, 0x10($sp) -/* 0BD244 7F088714 00402025 */ move $a0, $v0 -/* 0BD248 7F088718 E7A80014 */ swc1 $f8, 0x14($sp) -/* 0BD24C 7F08871C E7AA0018 */ swc1 $f10, 0x18($sp) -/* 0BD250 7F088720 0C005AF1 */ jal guOrtho -/* 0BD254 7F088724 E7B0001C */ swc1 $f16, 0x1c($sp) -/* 0BD258 7F088728 3C0E0103 */ lui $t6, (0x01030040 >> 16) # lui $t6, 0x103 -/* 0BD25C 7F08872C 35CE0040 */ ori $t6, (0x01030040 & 0xFFFF) # ori $t6, $t6, 0x40 -/* 0BD260 7F088730 02008825 */ move $s1, $s0 -/* 0BD264 7F088734 AE2E0000 */ sw $t6, ($s1) -/* 0BD268 7F088738 8FA400B8 */ lw $a0, 0xb8($sp) -/* 0BD26C 7F08873C 0C003A2C */ jal osVirtualToPhysical -/* 0BD270 7F088740 26100008 */ addiu $s0, $s0, 8 -/* 0BD274 7F088744 44800000 */ mtc1 $zero, $f0 -/* 0BD278 7F088748 AE220004 */ sw $v0, 4($s1) -/* 0BD27C 7F08874C 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0BD280 7F088750 44819000 */ mtc1 $at, $f18 -/* 0BD284 7F088754 44050000 */ mfc1 $a1, $f0 -/* 0BD288 7F088758 44070000 */ mfc1 $a3, $f0 -/* 0BD28C 7F08875C 27A40078 */ addiu $a0, $sp, 0x78 -/* 0BD290 7F088760 3C0643FA */ lui $a2, %hi(0x43FA0004) # $a2, 0x43fa -/* 0BD294 7F088764 E7A00020 */ swc1 $f0, 0x20($sp) -/* 0BD298 7F088768 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 0BD29C 7F08876C E7A00018 */ swc1 $f0, 0x18($sp) -/* 0BD2A0 7F088770 E7A00014 */ swc1 $f0, 0x14($sp) -/* 0BD2A4 7F088774 E7A00010 */ swc1 $f0, 0x10($sp) -/* 0BD2A8 7F088778 0FC165A5 */ jal matrix_4x4_set_lookat_target -/* 0BD2AC 7F08877C E7B20024 */ swc1 $f18, 0x24($sp) -/* 0BD2B0 7F088780 27A40078 */ addiu $a0, $sp, 0x78 -/* 0BD2B4 7F088784 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 0BD2B8 7F088788 8FA500BC */ lw $a1, 0xbc($sp) -/* 0BD2BC 7F08878C 3C0F0102 */ lui $t7, (0x01020040 >> 16) # lui $t7, 0x102 -/* 0BD2C0 7F088790 35EF0040 */ ori $t7, (0x01020040 & 0xFFFF) # ori $t7, $t7, 0x40 -/* 0BD2C4 7F088794 02008825 */ move $s1, $s0 -/* 0BD2C8 7F088798 AE2F0000 */ sw $t7, ($s1) -/* 0BD2CC 7F08879C 8FA400BC */ lw $a0, 0xbc($sp) -/* 0BD2D0 7F0887A0 0C003A2C */ jal osVirtualToPhysical -/* 0BD2D4 7F0887A4 26100008 */ addiu $s0, $s0, 8 -/* 0BD2D8 7F0887A8 02001825 */ move $v1, $s0 -/* 0BD2DC 7F0887AC AE220004 */ sw $v0, 4($s1) -/* 0BD2E0 7F0887B0 26100008 */ addiu $s0, $s0, 8 -/* 0BD2E4 7F0887B4 3C18E700 */ lui $t8, 0xe700 -/* 0BD2E8 7F0887B8 02002025 */ move $a0, $s0 -/* 0BD2EC 7F0887BC AC780000 */ sw $t8, ($v1) -/* 0BD2F0 7F0887C0 AC600004 */ sw $zero, 4($v1) -/* 0BD2F4 7F0887C4 26100008 */ addiu $s0, $s0, 8 -/* 0BD2F8 7F0887C8 3C19BA00 */ lui $t9, (0xBA001402 >> 16) # lui $t9, 0xba00 -/* 0BD2FC 7F0887CC 37391402 */ ori $t9, (0xBA001402 & 0xFFFF) # ori $t9, $t9, 0x1402 -/* 0BD300 7F0887D0 02002825 */ move $a1, $s0 -/* 0BD304 7F0887D4 AC990000 */ sw $t9, ($a0) -/* 0BD308 7F0887D8 AC800004 */ sw $zero, 4($a0) -/* 0BD30C 7F0887DC 26100008 */ addiu $s0, $s0, 8 -/* 0BD310 7F0887E0 3C08B900 */ lui $t0, (0xB900031D >> 16) # lui $t0, 0xb900 -/* 0BD314 7F0887E4 3C090050 */ lui $t1, (0x005041C8 >> 16) # lui $t1, 0x50 -/* 0BD318 7F0887E8 352941C8 */ ori $t1, (0x005041C8 & 0xFFFF) # ori $t1, $t1, 0x41c8 -/* 0BD31C 7F0887EC 3508031D */ ori $t0, (0xB900031D & 0xFFFF) # ori $t0, $t0, 0x31d -/* 0BD320 7F0887F0 02003025 */ move $a2, $s0 -/* 0BD324 7F0887F4 ACA80000 */ sw $t0, ($a1) -/* 0BD328 7F0887F8 ACA90004 */ sw $t1, 4($a1) -/* 0BD32C 7F0887FC 3C0AB900 */ lui $t2, (0xB9000002 >> 16) # lui $t2, 0xb900 -/* 0BD330 7F088800 354A0002 */ ori $t2, (0xB9000002 & 0xFFFF) # ori $t2, $t2, 2 -/* 0BD334 7F088804 26100008 */ addiu $s0, $s0, 8 -/* 0BD338 7F088808 ACCA0000 */ sw $t2, ($a2) -/* 0BD33C 7F08880C ACC00004 */ sw $zero, %lo(0x43FA0004)($a2) -/* 0BD340 7F088810 02003825 */ move $a3, $s0 -/* 0BD344 7F088814 26100008 */ addiu $s0, $s0, 8 -/* 0BD348 7F088818 3C0BFCFF */ lui $t3, (0xFCFFFFFF >> 16) # lui $t3, 0xfcff -/* 0BD34C 7F08881C 3C0CFFFE */ lui $t4, (0xFFFE793C >> 16) # lui $t4, 0xfffe -/* 0BD350 7F088820 358C793C */ ori $t4, (0xFFFE793C & 0xFFFF) # ori $t4, $t4, 0x793c -/* 0BD354 7F088824 356BFFFF */ ori $t3, (0xFCFFFFFF & 0xFFFF) # ori $t3, $t3, 0xffff -/* 0BD358 7F088828 02001025 */ move $v0, $s0 -/* 0BD35C 7F08882C ACEB0000 */ sw $t3, ($a3) -/* 0BD360 7F088830 ACEC0004 */ sw $t4, 4($a3) -/* 0BD364 7F088834 26100008 */ addiu $s0, $s0, 8 -/* 0BD368 7F088838 3C0EE6E6 */ lui $t6, (0xE6E6E600 >> 16) # lui $t6, 0xe6e6 -/* 0BD36C 7F08883C 35CEE600 */ ori $t6, (0xE6E6E600 & 0xFFFF) # ori $t6, $t6, 0xe600 -/* 0BD370 7F088840 3C0DFA00 */ lui $t5, 0xfa00 -/* 0BD374 7F088844 02001825 */ move $v1, $s0 -/* 0BD378 7F088848 AC4D0000 */ sw $t5, ($v0) -/* 0BD37C 7F08884C AC4E0004 */ sw $t6, 4($v0) -/* 0BD380 7F088850 26100008 */ addiu $s0, $s0, 8 -/* 0BD384 7F088854 24183000 */ li $t8, 12288 -/* 0BD388 7F088858 3C0FB600 */ lui $t7, 0xb600 -/* 0BD38C 7F08885C 3C060600 */ lui $a2, 0x600 -/* 0BD390 7F088860 AC6F0000 */ sw $t7, ($v1) -/* 0BD394 7F088864 AC780004 */ sw $t8, 4($v1) -/* 0BD398 7F088868 02002025 */ move $a0, $s0 -/* 0BD39C 7F08886C AC860000 */ sw $a2, ($a0) -/* 0BD3A0 7F088870 8E590000 */ lw $t9, ($s2) -/* 0BD3A4 7F088874 3C018000 */ lui $at, (0x800019F8 >> 16) -/* 0BD3A8 7F088878 342119F8 */ ori $at, (0x800019F8 & 0xFFFF) # ori $at, $at, 0x19f8 -/* 0BD3AC 7F08887C 26100008 */ addiu $s0, $s0, 8 -/* 0BD3B0 7F088880 03214021 */ addu $t0, $t9, $at -/* 0BD3B4 7F088884 AC880004 */ sw $t0, 4($a0) -/* 0BD3B8 7F088888 02002825 */ move $a1, $s0 -/* 0BD3BC 7F08888C ACA60000 */ sw $a2, ($a1) -/* 0BD3C0 7F088890 8E490000 */ lw $t1, ($s2) -/* 0BD3C4 7F088894 3C018000 */ lui $at, (0x80002128 >> 16) -/* 0BD3C8 7F088898 34212128 */ ori $at, (0x80002128 & 0xFFFF) # ori $at, $at, 0x2128 -/* 0BD3CC 7F08889C 26100008 */ addiu $s0, $s0, 8 -/* 0BD3D0 7F0888A0 3C0B0103 */ lui $t3, (0x01030040 >> 16) # lui $t3, 0x103 -/* 0BD3D4 7F0888A4 01215021 */ addu $t2, $t1, $at -/* 0BD3D8 7F0888A8 ACAA0004 */ sw $t2, 4($a1) -/* 0BD3DC 7F0888AC 356B0040 */ ori $t3, (0x01030040 & 0xFFFF) # ori $t3, $t3, 0x40 -/* 0BD3E0 7F0888B0 02008825 */ move $s1, $s0 -/* 0BD3E4 7F0888B4 AE2B0000 */ sw $t3, ($s1) -/* 0BD3E8 7F0888B8 0FC1E0DD */ jal currentPlayerGetProjectionMatrix -/* 0BD3EC 7F0888BC 26100008 */ addiu $s0, $s0, 8 -/* 0BD3F0 7F0888C0 0C003A2C */ jal osVirtualToPhysical -/* 0BD3F4 7F0888C4 00402025 */ move $a0, $v0 -/* 0BD3F8 7F0888C8 AE220004 */ sw $v0, 4($s1) -/* 0BD3FC 7F0888CC 8FBF003C */ lw $ra, 0x3c($sp) -/* 0BD400 7F0888D0 02001025 */ move $v0, $s0 -/* 0BD404 7F0888D4 8FB00030 */ lw $s0, 0x30($sp) -/* 0BD408 7F0888D8 8FB20038 */ lw $s2, 0x38($sp) -/* 0BD40C 7F0888DC 8FB10034 */ lw $s1, 0x34($sp) -/* 0BD410 7F0888E0 03E00008 */ jr $ra -/* 0BD414 7F0888E4 27BD00C0 */ addiu $sp, $sp, 0xc0 -) + guPerspective(perspmtx, &perspNorm, g_CurrentPlayer->zoominfovy, 1.4545455f, 10.0f, 300.0f, 1.0f); #endif + + gSPMatrix(gdl++, OS_PHYSICAL_TO_K0((u32) perspmtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + gSPPerspNormalize(gdl++, perspNorm); -#if !defined(LEFTOVERDEBUG) - -GLOBAL_ASM( -.text -glabel sub_GAME_7F088618 -/* 0BB170 7F088780 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 0BB174 7F088784 AFB20038 */ sw $s2, 0x38($sp) -/* 0BB178 7F088788 3C128007 */ lui $s2, %hi(g_CurrentPlayer) # $s2, 0x8007 -/* 0BB17C 7F08878C 26528BC0 */ addiu $s2, %lo(g_CurrentPlayer) # addiu $s2, $s2, -0x7440 -/* 0BB180 7F088790 AFB10034 */ sw $s1, 0x34($sp) -/* 0BB184 7F088794 8E510000 */ lw $s1, ($s2) -/* 0BB188 7F088798 AFB00030 */ sw $s0, 0x30($sp) -/* 0BB18C 7F08879C 00808025 */ move $s0, $a0 -/* 0BB190 7F0887A0 AFBF003C */ sw $ra, 0x3c($sp) -/* 0BB194 7F0887A4 2405002E */ li $a1, 46 -/* 0BB198 7F0887A8 24060001 */ li $a2, 1 -/* 0BB19C 7F0887AC 8E2700F0 */ lw $a3, 0xf0($s1) -/* 0BB1A0 7F0887B0 0FC2891C */ jal sub_GAME_7F0A2F30 -/* 0BB1A4 7F0887B4 262412B0 */ addiu $a0, $s1, 0x12b0 -/* 0BB1A8 7F0887B8 8E510000 */ lw $s1, ($s2) -/* 0BB1AC 7F0887BC 3C018000 */ lui $at, (0x800012B0 >> 16) # lui $at, 0x8000 -/* 0BB1B0 7F0887C0 342112B0 */ ori $at, (0x800012B0 & 0xFFFF) # ori $at, $at, 0x12b0 -/* 0BB1B4 7F0887C4 2406002E */ li $a2, 46 -/* 0BB1B8 7F0887C8 02212821 */ addu $a1, $s1, $at -/* 0BB1BC 7F0887CC 0FC28A1C */ jal sub_GAME_7F0A3330 -/* 0BB1C0 7F0887D0 262419F0 */ addiu $a0, $s1, 0x19f0 -/* 0BB1C4 7F0887D4 8E510000 */ lw $s1, ($s2) -/* 0BB1C8 7F0887D8 2405002E */ li $a1, 46 -/* 0BB1CC 7F0887DC 2406FFFF */ li $a2, -1 -/* 0BB1D0 7F0887E0 26241590 */ addiu $a0, $s1, 0x1590 -/* 0BB1D4 7F0887E4 0FC2891C */ jal sub_GAME_7F0A2F30 -/* 0BB1D8 7F0887E8 8E2700EC */ lw $a3, 0xec($s1) -/* 0BB1DC 7F0887EC 8E510000 */ lw $s1, ($s2) -/* 0BB1E0 7F0887F0 3C018000 */ lui $at, (0x80001590 >> 16) # lui $at, 0x8000 -/* 0BB1E4 7F0887F4 34211590 */ ori $at, (0x80001590 & 0xFFFF) # ori $at, $at, 0x1590 -/* 0BB1E8 7F0887F8 2406002E */ li $a2, 46 -/* 0BB1EC 7F0887FC 02212821 */ addu $a1, $s1, $at -/* 0BB1F0 7F088800 0FC28A1C */ jal sub_GAME_7F0A3330 -/* 0BB1F4 7F088804 26242120 */ addiu $a0, $s1, 0x2120 -/* 0BB1F8 7F088808 0FC2F2A4 */ jal dynAllocateMatrix -/* 0BB1FC 7F08880C 00000000 */ nop -/* 0BB200 7F088810 0FC2F2A4 */ jal dynAllocateMatrix -/* 0BB204 7F088814 AFA200BC */ sw $v0, 0xbc($sp) -/* 0BB208 7F088818 3C018003 */ lui $at, %hi(D_800364CC) # $at, 0x8003 -/* 0BB20C 7F08881C C4201A1C */ lwc1 $f0, %lo(D_800364CC)($at) -/* 0BB210 7F088820 3C01C448 */ li $at, 0xC4480000 # -800.000000 -/* 0BB214 7F088824 44812000 */ mtc1 $at, $f4 -/* 0BB218 7F088828 3C014448 */ li $at, 0x44480000 # 800.000000 -/* 0BB21C 7F08882C 44814000 */ mtc1 $at, $f8 -/* 0BB220 7F088830 46002182 */ mul.s $f6, $f4, $f0 -/* 0BB224 7F088834 3C01C416 */ li $at, 0xC4160000 # -600.000000 -/* 0BB228 7F088838 44818000 */ mtc1 $at, $f16 -/* 0BB22C 7F08883C 46004282 */ mul.s $f10, $f8, $f0 -/* 0BB230 7F088840 3C014416 */ li $at, 0x44160000 # 600.000000 -/* 0BB234 7F088844 44812000 */ mtc1 $at, $f4 -/* 0BB238 7F088848 46008482 */ mul.s $f18, $f16, $f0 -/* 0BB23C 7F08884C 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 0BB240 7F088850 44053000 */ mfc1 $a1, $f6 -/* 0BB244 7F088854 46002182 */ mul.s $f6, $f4, $f0 -/* 0BB248 7F088858 44814000 */ mtc1 $at, $f8 -/* 0BB24C 7F08885C 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0BB250 7F088860 44065000 */ mfc1 $a2, $f10 -/* 0BB254 7F088864 44815000 */ mtc1 $at, $f10 -/* 0BB258 7F088868 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BB25C 7F08886C 44818000 */ mtc1 $at, $f16 -/* 0BB260 7F088870 44079000 */ mfc1 $a3, $f18 -/* 0BB264 7F088874 AFA200B8 */ sw $v0, 0xb8($sp) -/* 0BB268 7F088878 E7A60010 */ swc1 $f6, 0x10($sp) -/* 0BB26C 7F08887C 00402025 */ move $a0, $v0 -/* 0BB270 7F088880 E7A80014 */ swc1 $f8, 0x14($sp) -/* 0BB274 7F088884 E7AA0018 */ swc1 $f10, 0x18($sp) -/* 0BB278 7F088888 0C005899 */ jal guOrtho -/* 0BB27C 7F08888C E7B0001C */ swc1 $f16, 0x1c($sp) -/* 0BB280 7F088890 3C0E0103 */ lui $t6, (0x01030040 >> 16) # lui $t6, 0x103 -/* 0BB284 7F088894 35CE0040 */ ori $t6, (0x01030040 & 0xFFFF) # ori $t6, $t6, 0x40 -/* 0BB288 7F088898 02008825 */ move $s1, $s0 -/* 0BB28C 7F08889C AE2E0000 */ sw $t6, ($s1) -/* 0BB290 7F0888A0 8FA400B8 */ lw $a0, 0xb8($sp) -/* 0BB294 7F0888A4 0C003838 */ jal osVirtualToPhysical -/* 0BB298 7F0888A8 26100008 */ addiu $s0, $s0, 8 -/* 0BB29C 7F0888AC 44800000 */ mtc1 $zero, $f0 -/* 0BB2A0 7F0888B0 AE220004 */ sw $v0, 4($s1) -/* 0BB2A4 7F0888B4 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0BB2A8 7F0888B8 44819000 */ mtc1 $at, $f18 -/* 0BB2AC 7F0888BC 44050000 */ mfc1 $a1, $f0 -/* 0BB2B0 7F0888C0 44070000 */ mfc1 $a3, $f0 -/* 0BB2B4 7F0888C4 27A40078 */ addiu $a0, $sp, 0x78 -/* 0BB2B8 7F0888C8 3C0643FA */ lui $a2, %hi(0x43FA0004) # $a2, 0x43fa -/* 0BB2BC 7F0888CC E7A00020 */ swc1 $f0, 0x20($sp) -/* 0BB2C0 7F0888D0 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 0BB2C4 7F0888D4 E7A00018 */ swc1 $f0, 0x18($sp) -/* 0BB2C8 7F0888D8 E7A00014 */ swc1 $f0, 0x14($sp) -/* 0BB2CC 7F0888DC E7A00010 */ swc1 $f0, 0x10($sp) -/* 0BB2D0 7F0888E0 0FC166CF */ jal matrix_4x4_set_lookat_target -/* 0BB2D4 7F0888E4 E7B20024 */ swc1 $f18, 0x24($sp) -/* 0BB2D8 7F0888E8 27A40078 */ addiu $a0, $sp, 0x78 -/* 0BB2DC 7F0888EC 0FC16451 */ jal matrix_4x4_f32_to_s32 -/* 0BB2E0 7F0888F0 8FA500BC */ lw $a1, 0xbc($sp) -/* 0BB2E4 7F0888F4 3C0F0102 */ lui $t7, (0x01020040 >> 16) # lui $t7, 0x102 -/* 0BB2E8 7F0888F8 35EF0040 */ ori $t7, (0x01020040 & 0xFFFF) # ori $t7, $t7, 0x40 -/* 0BB2EC 7F0888FC 02008825 */ move $s1, $s0 -/* 0BB2F0 7F088900 AE2F0000 */ sw $t7, ($s1) -/* 0BB2F4 7F088904 8FA400BC */ lw $a0, 0xbc($sp) -/* 0BB2F8 7F088908 0C003838 */ jal osVirtualToPhysical -/* 0BB2FC 7F08890C 26100008 */ addiu $s0, $s0, 8 -/* 0BB300 7F088910 02001825 */ move $v1, $s0 -/* 0BB304 7F088914 AE220004 */ sw $v0, 4($s1) -/* 0BB308 7F088918 26100008 */ addiu $s0, $s0, 8 -/* 0BB30C 7F08891C 3C18E700 */ lui $t8, 0xe700 -/* 0BB310 7F088920 02002025 */ move $a0, $s0 -/* 0BB314 7F088924 AC780000 */ sw $t8, ($v1) -/* 0BB318 7F088928 AC600004 */ sw $zero, 4($v1) -/* 0BB31C 7F08892C 26100008 */ addiu $s0, $s0, 8 -/* 0BB320 7F088930 3C19BA00 */ lui $t9, (0xBA001402 >> 16) # lui $t9, 0xba00 -/* 0BB324 7F088934 37391402 */ ori $t9, (0xBA001402 & 0xFFFF) # ori $t9, $t9, 0x1402 -/* 0BB328 7F088938 02002825 */ move $a1, $s0 -/* 0BB32C 7F08893C AC990000 */ sw $t9, ($a0) -/* 0BB330 7F088940 AC800004 */ sw $zero, 4($a0) -/* 0BB334 7F088944 26100008 */ addiu $s0, $s0, 8 -/* 0BB338 7F088948 3C08B900 */ lui $t0, (0xB900031D >> 16) # lui $t0, 0xb900 -/* 0BB33C 7F08894C 3C090050 */ lui $t1, (0x005041C8 >> 16) # lui $t1, 0x50 -/* 0BB340 7F088950 352941C8 */ ori $t1, (0x005041C8 & 0xFFFF) # ori $t1, $t1, 0x41c8 -/* 0BB344 7F088954 3508031D */ ori $t0, (0xB900031D & 0xFFFF) # ori $t0, $t0, 0x31d -/* 0BB348 7F088958 02003025 */ move $a2, $s0 -/* 0BB34C 7F08895C ACA80000 */ sw $t0, ($a1) -/* 0BB350 7F088960 ACA90004 */ sw $t1, 4($a1) -/* 0BB354 7F088964 3C0AB900 */ lui $t2, (0xB9000002 >> 16) # lui $t2, 0xb900 -/* 0BB358 7F088968 354A0002 */ ori $t2, (0xB9000002 & 0xFFFF) # ori $t2, $t2, 2 -/* 0BB35C 7F08896C 26100008 */ addiu $s0, $s0, 8 -/* 0BB360 7F088970 ACCA0000 */ sw $t2, ($a2) -/* 0BB364 7F088974 ACC00004 */ sw $zero, %lo(0x43FA0004)($a2) -/* 0BB368 7F088978 02003825 */ move $a3, $s0 -/* 0BB36C 7F08897C 26100008 */ addiu $s0, $s0, 8 -/* 0BB370 7F088980 3C0BFCFF */ lui $t3, (0xFCFFFFFF >> 16) # lui $t3, 0xfcff -/* 0BB374 7F088984 3C0CFFFE */ lui $t4, (0xFFFE793C >> 16) # lui $t4, 0xfffe -/* 0BB378 7F088988 358C793C */ ori $t4, (0xFFFE793C & 0xFFFF) # ori $t4, $t4, 0x793c -/* 0BB37C 7F08898C 356BFFFF */ ori $t3, (0xFCFFFFFF & 0xFFFF) # ori $t3, $t3, 0xffff -/* 0BB380 7F088990 02001025 */ move $v0, $s0 -/* 0BB384 7F088994 ACEB0000 */ sw $t3, ($a3) -/* 0BB388 7F088998 ACEC0004 */ sw $t4, 4($a3) -/* 0BB38C 7F08899C 26100008 */ addiu $s0, $s0, 8 -/* 0BB390 7F0889A0 3C0EE6E6 */ lui $t6, (0xE6E6E600 >> 16) # lui $t6, 0xe6e6 -/* 0BB394 7F0889A4 35CEE600 */ ori $t6, (0xE6E6E600 & 0xFFFF) # ori $t6, $t6, 0xe600 -/* 0BB398 7F0889A8 3C0DFA00 */ lui $t5, 0xfa00 -/* 0BB39C 7F0889AC 02001825 */ move $v1, $s0 -/* 0BB3A0 7F0889B0 AC4D0000 */ sw $t5, ($v0) -/* 0BB3A4 7F0889B4 AC4E0004 */ sw $t6, 4($v0) -/* 0BB3A8 7F0889B8 26100008 */ addiu $s0, $s0, 8 -/* 0BB3AC 7F0889BC 24183000 */ li $t8, 12288 -/* 0BB3B0 7F0889C0 3C0FB600 */ lui $t7, 0xb600 -/* 0BB3B4 7F0889C4 3C060600 */ lui $a2, 0x600 -/* 0BB3B8 7F0889C8 AC6F0000 */ sw $t7, ($v1) -/* 0BB3BC 7F0889CC AC780004 */ sw $t8, 4($v1) -/* 0BB3C0 7F0889D0 02002025 */ move $a0, $s0 -/* 0BB3C4 7F0889D4 AC860000 */ sw $a2, ($a0) -/* 0BB3C8 7F0889D8 8E590000 */ lw $t9, ($s2) -/* 0BB3CC 7F0889DC 3C018000 */ lui $at, (0x800019F0 >> 16) # lui $at, 0x8000 -/* 0BB3D0 7F0889E0 342119F0 */ ori $at, (0x800019F0 & 0xFFFF) # ori $at, $at, 0x19f0 -/* 0BB3D4 7F0889E4 26100008 */ addiu $s0, $s0, 8 -/* 0BB3D8 7F0889E8 03214021 */ addu $t0, $t9, $at -/* 0BB3DC 7F0889EC AC880004 */ sw $t0, 4($a0) -/* 0BB3E0 7F0889F0 02002825 */ move $a1, $s0 -/* 0BB3E4 7F0889F4 ACA60000 */ sw $a2, ($a1) -/* 0BB3E8 7F0889F8 8E490000 */ lw $t1, ($s2) -/* 0BB3EC 7F0889FC 3C018000 */ lui $at, (0x80002120 >> 16) # lui $at, 0x8000 -/* 0BB3F0 7F088A00 34212120 */ ori $at, (0x80002120 & 0xFFFF) # ori $at, $at, 0x2120 -/* 0BB3F4 7F088A04 26100008 */ addiu $s0, $s0, 8 -/* 0BB3F8 7F088A08 3C0B0103 */ lui $t3, (0x01030040 >> 16) # lui $t3, 0x103 -/* 0BB3FC 7F088A0C 01215021 */ addu $t2, $t1, $at -/* 0BB400 7F088A10 ACAA0004 */ sw $t2, 4($a1) -/* 0BB404 7F088A14 356B0040 */ ori $t3, (0x01030040 & 0xFFFF) # ori $t3, $t3, 0x40 -/* 0BB408 7F088A18 02008825 */ move $s1, $s0 -/* 0BB40C 7F088A1C AE2B0000 */ sw $t3, ($s1) -/* 0BB410 7F088A20 0FC1E0FD */ jal currentPlayerGetProjectionMatrix -/* 0BB414 7F088A24 26100008 */ addiu $s0, $s0, 8 -/* 0BB418 7F088A28 0C003838 */ jal osVirtualToPhysical -/* 0BB41C 7F088A2C 00402025 */ move $a0, $v0 -/* 0BB420 7F088A30 AE220004 */ sw $v0, 4($s1) -/* 0BB424 7F088A34 8FBF003C */ lw $ra, 0x3c($sp) -/* 0BB428 7F088A38 02001025 */ move $v0, $s0 -/* 0BB42C 7F088A3C 8FB00030 */ lw $s0, 0x30($sp) -/* 0BB430 7F088A40 8FB20038 */ lw $s2, 0x38($sp) -/* 0BB434 7F088A44 8FB10034 */ lw $s1, 0x34($sp) -/* 0BB438 7F088A48 03E00008 */ jr $ra -/* 0BB43C 7F088A4C 27BD00C0 */ addiu $sp, $sp, 0xc0 -) -#endif -#endif + // Keep this nested block for matching. + { + Mtxf targetmtx; + coord3d currot; + coord3d targetrot; + quatf quat1; + quatf quat2; + quatf quat3; + coord3d targetpos; + s32 total_seconds; + s32 seconds; + s32 total_minutes; + s32 minutes; + f32 framesfrac; + f32 secondsAngle; + f32 minutesAngle; + f32 hoursAngle; + s32 time; + f32 *nodepos2; + Mtxf handmtx; + Mtx *finalmtx; + + rwdata->Switch.visible = g_CurrentPlayer->outside_watch_menu; + + watchpos.x = (g_CurrentPlayer->field_488.theta_transform.x * (g_CurrentPlayer->headbodyoffset.z + (-12.0f))) + (g_CurrentPlayer->field_488.collision_position.x + (g_CurrentPlayer->headbodyoffset.x * (-g_CurrentPlayer->field_488.theta_transform.z))); + watchpos.y = g_CurrentPlayer->headbodyoffset.y + g_CurrentPlayer->field_488.collision_position.y; + watchpos.z = (g_CurrentPlayer->field_488.theta_transform.z * (g_CurrentPlayer->headbodyoffset.z + (-12.0f))) + (g_CurrentPlayer->field_488.collision_position.z + (g_CurrentPlayer->headbodyoffset.x * g_CurrentPlayer->field_488.theta_transform.x)); + + matrix_4x4_set_position_and_rotation_around_y(watchpos.f, (360.0f - g_CurrentPlayer->vv_theta) * 0.017453292f, &watchmtx); + matrix_4x4_multiply_homogeneous_in_place(camGetWorldToScreenMtxf(), &watchmtx); + matrices = dynAllocate(objheader->numMatrices << 6); + bondviewSelectCuff((Model *) (&g_CurrentPlayer->something_with_watch_object_instance), objheader, 4); + renderdata.basemtx = &watchmtx; + renderdata.mtxlist = matrices; + subcalcmatrices(&renderdata, (Model *) (&g_CurrentPlayer->something_with_watch_object_instance)); + nodepos = (f32 *) objheader->Switches[0]->Data; + time = watch_time_0; + t = g_CurrentPlayer->pause_watch_related_adjust / 20.0f; + + if (t > 1.0f) + { + t = 1.0f; + } + + targetpos.x = matrices->m[3][0] + (((g_CurrentPlayer->field_1D4 - (nodepos[0] * g_CurrentPlayer->watch_scale_destination)) - matrices->m[3][0]) * t); + targetpos.y = matrices->m[3][1] + (((g_CurrentPlayer->field_1D8 + (nodepos[2] * g_CurrentPlayer->watch_scale_destination)) - matrices->m[3][1]) * t); + targetpos.z = matrices->m[3][2] + (((g_CurrentPlayer->pause_watch_position - (nodepos[1] * g_CurrentPlayer->watch_scale_destination)) - matrices->m[3][2]) * t); + + matrix_4x4_set_basis_and_position_target(&targetmtx, 0.0f, 0.0f, 0.0f, g_CurrentPlayer->field_1E0, g_CurrentPlayer->field_1E4, g_CurrentPlayer->field_1E8, g_CurrentPlayer->field_1EC, g_CurrentPlayer->field_1F0, g_CurrentPlayer->field_1F4); + matrix_4x4_get_rotation_around_xyz(matrices, &currot); + matrix_4x4_get_rotation_around_xyz(&targetmtx, &targetrot); + quaternion_set_rotation_around_xyzf(currot.f, quat1); + quaternion_set_rotation_around_xyzf(targetrot.f, quat2); + quaternion_ensure_shortest_path(quat1, quat2); + quaternion_slerp(quat1, quat2, t, quat3); + quaternion_to_matrix(quat3, matrices->m); + matrix_4x4_set_position(&targetpos, matrices); + matrix_scalar_multiply(g_CurrentPlayer->watch_scale_destination, (f32 *) matrices); + total_seconds = time / 60; + seconds = total_seconds % 60; + total_minutes = total_seconds / 60; + minutes = total_minutes % 60; + framesfrac = ((f32) (time % 60)) / 60.0f; + secondsAngle = ((-(((f32) seconds) + framesfrac)) * M_TAU_F) / 60.0f; + minutesAngle = ((((-((f32) minutes)) * M_TAU_F) / 60.0f) * 1.0f) + (secondsAngle / 60.0f); + hoursAngle = ((((-((f32) ((total_seconds / 3600) % 12))) * M_TAU_F) / 12.0f) + (minutesAngle / 12.0f)) + (secondsAngle / 720.0f); + + while (secondsAngle < 0.0f) + { + secondsAngle += M_TAU_F; + } + + while (minutesAngle < 0.0f) + { + minutesAngle += M_TAU_F; + } + + while (hoursAngle < 0.0f) + { + hoursAngle += M_TAU_F; + } + + matrix_4x4_set_position_and_rotation_around_y((f32 *) objheader->Switches[0]->Data, hoursAngle, &matrices[1]); + matrix_4x4_multiply_in_place(matrices, &matrices[1]); + matrix_4x4_set_position_and_rotation_around_y((f32 *) objheader->Switches[1]->Data, minutesAngle, &matrices[2]); + matrix_4x4_multiply_in_place(matrices, &matrices[2]); + matrix_4x4_set_position_and_rotation_around_y((f32 *) objheader->Switches[2]->Data, secondsAngle, &matrices[3]); + matrix_4x4_multiply_in_place(matrices, &matrices[3]); + + renderdata.flags = 3; + renderdata.zbufferenabled = 0; + renderdata.gdl = gdl; + renderdata.PropType = PROP_TYPE_WEAPON; + + if ((g_CurrentPlayer->watch_animation_state == 5) || (g_CurrentPlayer->watch_animation_state == 12)) + { + renderdata.envcolour.word = 0xcd; + } + else + { + renderdata.envcolour.word = g_CurrentPlayer->tileColor.a | (((g_CurrentPlayer->tileColor.r << 24) | (g_CurrentPlayer->tileColor.g << 16)) | (g_CurrentPlayer->tileColor.b << 8)); + } + + subdraw(&renderdata, (Model *) (&g_CurrentPlayer->something_with_watch_object_instance)); + gdl = renderdata.gdl; + nodepos2 = (f32 *) objheader->Switches[2]->Data; + finalmtx = dynAllocateMatrix(); + matrix_4x4_set_identity_and_position((coord3d *) nodepos2, &handmtx); + matrix_4x4_multiply_in_place(matrices, &handmtx); + matrix_4x4_7F058C64(); + matrix_4x4_f32_to_s32(&handmtx, finalmtx); + matrix_4x4_7F058C88(); + gdl = draw_watch_current_page(gdl, finalmtx, (g_CurrentPlayer->watch_animation_state == 5) || (g_CurrentPlayer->watch_animation_state == 12)); + matrix_4x4_7F058C64(); + bondviewTransformManyPosToViewMatrix(g_CurrentPlayer->field_23C, objheader->numMatrices); + matrix_4x4_7F058C88(); + } + + end: + return gdl; +} +/** + * Address: 7F088618 + * + * Renders the in-game health and armor gauges. + * The watch menu gauges are handled by trigger_solo_watch_menu(). + */ +Gfx *bondviewRenderGaugeBars(Gfx *gdl) +{ + Mtx *lookatmtx; + Mtx *orthomtx; + Mtxf lookatmtxf; + + //Set up armor bars. + hudMakeDamageSegments(&g_CurrentPlayer->armor_display_values[0].items[0], 0x2e, 1, g_CurrentPlayer->apparentarmour); + buildGaugeBarDL((Gfx *)&g_CurrentPlayer->watch_body_armor_bar_gdl, OS_PHYSICAL_TO_K0(&g_CurrentPlayer->armor_display_values[0].items[0]), 0x2e); + + // Set up health bars. + hudMakeDamageSegments(&g_CurrentPlayer->health_display_values[0].items[0], 0x2e, -1, g_CurrentPlayer->apparenthealth); + buildGaugeBarDL((Gfx *)&g_CurrentPlayer->watch_health_bar_gdl, OS_PHYSICAL_TO_K0(&g_CurrentPlayer->health_display_values[0].items[0]), 0x2e); + + // Create an orthographic render state for the gauge. + lookatmtx = dynAllocateMatrix(); + orthomtx = dynAllocateMatrix(); + + guOrtho(orthomtx, -800.0f * D_800364CC, 800.0f * D_800364CC, -600.0f * D_800364CC, 600.0f * D_800364CC, -100.0f, 1000.0f, 1.0f); + + gSPMatrix(gdl++, osVirtualToPhysical(orthomtx), G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH); + + matrix_4x4_set_lookat_target( + &lookatmtxf, + 0.0f, 500.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, -1.0f + ); + + matrix_4x4_f32_to_s32(&lookatmtxf, (Mtxf *)lookatmtx); + + gSPMatrix(gdl++, osVirtualToPhysical(lookatmtx), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH); + + gDPPipeSync(gdl++); + gDPSetCycleType(gdl++, G_CYC_1CYCLE); + gDPSetRenderMode(gdl++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2); + gDPSetAlphaCompare(gdl++, G_AC_NONE); + gDPSetCombineMode(gdl++, G_CC_SHADE, G_CC_SHADE); + gDPSetPrimColor(gdl++, 0, 0, 0xe6, 0xe6, 0xe6, 0x00); + gSPClearGeometryMode(gdl++, G_CULL_BOTH); + + gSPDisplayList(gdl++, OS_PHYSICAL_TO_K0(&g_CurrentPlayer->watch_body_armor_bar_gdl)); + gSPDisplayList(gdl++, OS_PHYSICAL_TO_K0(&g_CurrentPlayer->watch_health_bar_gdl)); + + gSPMatrix(gdl++, osVirtualToPhysical(currentPlayerGetProjectionMatrix()), G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH); + + return gdl; +} - -#ifdef NONMATCHING -/* -* Address: 7F0888E8 -* Everything matches except the rodata addresses -*/ -void mp_respawn_handler(void) { - coord3d start_pos = {0, 0, 0}; +void mp_respawn_handler(void) +{ + coord3d start_pos = ZeroCoordSpawnPos; f32 start_look_angle; s32 start_stan; s32 pad; @@ -14909,13 +10122,13 @@ void mp_respawn_handler(void) { intro_record = g_CurrentSetup.intro; init_player_BONDdata(); - bondviewPlayerSpawnRelated(); + bondviewPlayerBeginLife(); g_CurrentPlayer->bonddead = 0; g_CurrentPlayer->deathanimfinished = 0; g_CurrentPlayer->redbloodfinished = 0; g_CurrentPlayer->startnewbonddie = 1; - g_CurrentPlayer->healthDamageType = 7; + g_CurrentPlayer->healthdamagetype = 7; g_CurrentPlayer->damagetype = 7; g_CurrentPlayer->gunammooff = 0; g_CurrentPlayer->gunsightmode = 2; @@ -14932,6 +10145,7 @@ void mp_respawn_handler(void) { { var_v1 = 0; } + #ifdef DEBUG assert(g_Startpad[var_v1]->stan); #endif @@ -14942,14 +10156,18 @@ void mp_respawn_handler(void) { stan_height = bondviewYPositionRelated(start_stan, start_pos.x, start_pos.z); - start_pos.y = g_CurrentPlayer->field_29BC + stan_height; + start_pos.y = g_CurrentPlayer->eyeheight + stan_height; g_CurrentPlayer->field_70 = stan_height; start_look_angle = randomGetNext() * 2.3283064e-10f * 6.2831855f; g_CurrentPlayer->vv_theta = (f32) ((start_look_angle * 360.0f) / 6.2831855f); g_CurrentPlayer->stanHeight = stan_height; +#if defined(VERSION_EU) + g_CurrentPlayer->field_6C = (f32) (stan_height / 0.2004f); +#else g_CurrentPlayer->field_6C = (f32) (stan_height / 0.17000002f); +#endif change_player_pos_to_target(&g_CurrentPlayer->field_488, &start_pos, start_stan); @@ -14960,9 +10178,15 @@ void mp_respawn_handler(void) { g_CurrentPlayer->prop->pos.y = g_CurrentPlayer->bondprevpos.y = start_pos.f[1]; g_CurrentPlayer->prop->pos.z = g_CurrentPlayer->bondprevpos.z = start_pos.f[2]; g_CurrentPlayer->prop->stan = start_stan; +#if defined(VERSION_EU) + g_CurrentPlayer->field_3B8.x = (f32) (g_CurrentPlayer->field_488.pos.x / 0.118799984f); + g_CurrentPlayer->field_3B8.y = (f32) (g_CurrentPlayer->field_488.pos.y / 0.118799984f); + g_CurrentPlayer->field_3B8.z = (f32) (g_CurrentPlayer->field_488.pos.z / 0.118799984f); +#else g_CurrentPlayer->field_3B8.x = (f32) (g_CurrentPlayer->field_488.pos.x / 0.100000024f); g_CurrentPlayer->field_3B8.y = (f32) (g_CurrentPlayer->field_488.pos.y / 0.100000024f); g_CurrentPlayer->field_3B8.z = (f32) (g_CurrentPlayer->field_488.pos.z / 0.100000024f); +#endif bondinvReinitInv(); var_v0 = 0; @@ -14972,1704 +10196,399 @@ void mp_respawn_handler(void) { g_CurrentPlayer->ammoheldarr[var_v0++] = 0; } - if (intro_record != NULL) { - while (intro_record->type != 9) { // INTROTYPE_END - switch (intro_record->type) { - case 0: // INTROTYPE_SPAWN - intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroSpawn)); - break; - case 1: // INTROTYPE_ITEM - if (check_ramrom_flags() == ((struct SetupIntroAmmo*)intro_record)->is_demo_playback) { - if ( ((struct SetupIntroItem*)intro_record)->item_left >= 0) { - bondinvAddDoublesInvItem(((struct SetupIntroItem*)intro_record)->item_right, ((struct SetupIntroItem*)intro_record)->item_left); - } else { - bondinvAddInvItem(((struct SetupIntroItem*)intro_record)->item_right); + if (intro_record != NULL) + { + while (intro_record->type != 9) // INTROTYPE_END + { + switch (intro_record->type) + { + case 0: // INTROTYPE_SPAWN + intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroSpawn)); + break; + case 1: // INTROTYPE_ITEM + if (check_ramrom_flags() == ((struct SetupIntroAmmo*)intro_record)->is_demo_playback) { + if ( ((struct SetupIntroItem*)intro_record)->item_left >= 0) { + bondinvAddDoublesInvItem(((struct SetupIntroItem*)intro_record)->item_right, ((struct SetupIntroItem*)intro_record)->item_left); + } else { + bondinvAddInvItem(((struct SetupIntroItem*)intro_record)->item_right); + } } - } - intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroItem)); - - break; - case 2: // INTROTYPE_AMMO - if (check_ramrom_flags() == ((struct SetupIntroAmmo*)intro_record)->is_demo_playback) { - give_cur_player_ammo(((struct SetupIntroAmmo*)intro_record)->ammo_type, ((struct SetupIntroAmmo*)intro_record)->ammo_amount); - } - intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroAmmo)); - break; - case 3: // INTROTYPE_SWIRL - intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroSwirl)); - break; - case 4: // INTROTYPE_ANIM - intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroAnim)); - break; - case 5: // INTROTYPE_CUFF - intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroCuff)); - break; - case 6: // INTROTYPE_CAMERA - intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroCamera)); - break; - default: // INTROTYPE_WATCH, INTROTYPE_CREDITS - intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroEmpty)); - break; + intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroItem)); + break; + case 2: // INTROTYPE_AMMO + if (check_ramrom_flags() == ((struct SetupIntroAmmo*)intro_record)->is_demo_playback) { + give_cur_player_ammo(((struct SetupIntroAmmo*)intro_record)->ammo_type, ((struct SetupIntroAmmo*)intro_record)->ammo_amount); + } + intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroAmmo)); + break; + case 3: // INTROTYPE_SWIRL + intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroSwirl)); + break; + case 4: // INTROTYPE_ANIM + intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroAnim)); + break; + case 5: // INTROTYPE_CUFF + intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroCuff)); + break; + case 6: // INTROTYPE_CAMERA + intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroCamera)); + break; + default: // INTROTYPE_WATCH, INTROTYPE_CREDITS + intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroEmpty)); + break; } #ifdef DEBUG ossyncprintf("unknown bondstart type %d!\n", var_v0_2); #endif - - } } + g_CurrentPlayer->field_78 = 0.0f; g_CurrentPlayer->field_7C = -0.0001f; g_CurrentPlayer->field_80 = 0.0f; currentPlayerStartChrFade(120.0f, 1.0f); } -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_80055284 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80055288 -.word 0x3e2e147c /*0.17000002*/ -glabel D_8005528C -.word 0x3dccccd0 /*0.10000002*/ - -/*D:80055290*/ -glabel jpt_mpspawntype -.word mp_spawntype_spawn -.word mp_spawntype_weapon -.word mp_spawntype_ammo -.word mp_spawntype_intro_swirly -.word mp_spawntype_intro_anim -.word mp_spawntype_handcuff -.word mp_spawntype_intro_camera -.size jpt_mpspawntype, . - jpt_mpspawntype - -glabel D_800552AC -.word 0xb8d1b717 /*-0.000099999997*/ -.text -glabel mp_respawn_handler -/* 0BD418 7F0888E8 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0BD41C 7F0888EC 3C0F8003 */ lui $t7, %hi(D_8003688C) -/* 0BD420 7F0888F0 AFBF001C */ sw $ra, 0x1c($sp) -/* 0BD424 7F0888F4 AFB10018 */ sw $s1, 0x18($sp) -/* 0BD428 7F0888F8 AFB00014 */ sw $s0, 0x14($sp) -/* 0BD42C 7F0888FC 25EF688C */ addiu $t7, %lo(D_8003688C) # addiu $t7, $t7, 0x688c -/* 0BD430 7F088900 8DE10000 */ lw $at, ($t7) -/* 0BD434 7F088904 27AE004C */ addiu $t6, $sp, 0x4c -/* 0BD438 7F088908 8DE80004 */ lw $t0, 4($t7) -/* 0BD43C 7F08890C ADC10000 */ sw $at, ($t6) -/* 0BD440 7F088910 8DE10008 */ lw $at, 8($t7) -/* 0BD444 7F088914 3C108007 */ lui $s0, %hi(g_CurrentSetup+8) -/* 0BD448 7F088918 ADC80004 */ sw $t0, 4($t6) -/* 0BD44C 7F08891C ADC10008 */ sw $at, 8($t6) -/* 0BD450 7F088920 0FC1E4FB */ jal init_player_BONDdata -/* 0BD454 7F088924 8E105D08 */ lw $s0, %lo(g_CurrentSetup+8)($s0) -/* 0BD458 7F088928 0FC1E62E */ jal bondviewPlayerSpawnRelated -/* 0BD45C 7F08892C 00000000 */ nop -/* 0BD460 7F088930 3C118008 */ lui $s1, %hi(g_CurrentPlayer) -/* 0BD464 7F088934 2631A0B0 */ addiu $s1, %lo(g_CurrentPlayer) # addiu $s1, $s1, -0x5f50 -/* 0BD468 7F088938 8E290000 */ lw $t1, ($s1) -/* 0BD46C 7F08893C 240C0001 */ li $t4, 1 -/* 0BD470 7F088940 24020007 */ li $v0, 7 -/* 0BD474 7F088944 AD2000D8 */ sw $zero, 0xd8($t1) -/* 0BD478 7F088948 8E2A0000 */ lw $t2, ($s1) -/* 0BD47C 7F08894C 240F0002 */ li $t7, 2 -/* 0BD480 7F088950 2404FFFF */ li $a0, -1 -/* 0BD484 7F088954 AD400428 */ sw $zero, 0x428($t2) -/* 0BD488 7F088958 8E2B0000 */ lw $t3, ($s1) -/* 0BD48C 7F08895C AD600424 */ sw $zero, 0x424($t3) -/* 0BD490 7F088960 8E2D0000 */ lw $t5, ($s1) -/* 0BD494 7F088964 ADAC0420 */ sw $t4, 0x420($t5) -/* 0BD498 7F088968 8E390000 */ lw $t9, ($s1) -/* 0BD49C 7F08896C AF2229B8 */ sw $v0, 0x29b8($t9) -/* 0BD4A0 7F088970 8E380000 */ lw $t8, ($s1) -/* 0BD4A4 7F088974 AF0229D4 */ sw $v0, 0x29d4($t8) -/* 0BD4A8 7F088978 8E2E0000 */ lw $t6, ($s1) -/* 0BD4AC 7F08897C ADC01064 */ sw $zero, 0x1064($t6) -/* 0BD4B0 7F088980 8E280000 */ lw $t0, ($s1) -/* 0BD4B4 7F088984 0FC228E0 */ jal hudmsgsSetOn -/* 0BD4B8 7F088988 AD0F1128 */ sw $t7, 0x1128($t0) -/* 0BD4BC 7F08898C 0FC22A4A */ jal bondviewClearUpperTextDisplayFlag -/* 0BD4C0 7F088990 2404FFFF */ li $a0, -1 -/* 0BD4C4 7F088994 0FC26919 */ jal getPlayerCount -/* 0BD4C8 7F088998 00000000 */ nop -/* 0BD4CC 7F08899C 28410002 */ slti $at, $v0, 2 -/* 0BD4D0 7F0889A0 14200008 */ bnez $at, .L7F0889C4 -/* 0BD4D4 7F0889A4 3C098008 */ lui $t1, %hi(startpadcount) -/* 0BD4D8 7F0889A8 8D299C68 */ lw $t1, %lo(startpadcount)($t1) -/* 0BD4DC 7F0889AC 59200006 */ blezl $t1, .L7F0889C8 -/* 0BD4E0 7F0889B0 00001825 */ move $v1, $zero -/* 0BD4E4 7F0889B4 0FC1E43C */ jal bondviewGetRandomSpawnPadIndex -/* 0BD4E8 7F0889B8 00000000 */ nop -/* 0BD4EC 7F0889BC 10000002 */ b .L7F0889C8 -/* 0BD4F0 7F0889C0 00401825 */ move $v1, $v0 -.L7F0889C4: -/* 0BD4F4 7F0889C4 00001825 */ move $v1, $zero -.L7F0889C8: -/* 0BD4F8 7F0889C8 00035080 */ sll $t2, $v1, 2 -/* 0BD4FC 7F0889CC 3C028008 */ lui $v0, %hi(g_Startpad) -/* 0BD500 7F0889D0 004A1021 */ addu $v0, $v0, $t2 -/* 0BD504 7F0889D4 8C429C28 */ lw $v0, %lo(g_Startpad)($v0) -/* 0BD508 7F0889D8 C4440000 */ lwc1 $f4, ($v0) -/* 0BD50C 7F0889DC E7A4004C */ swc1 $f4, 0x4c($sp) -/* 0BD510 7F0889E0 C4460008 */ lwc1 $f6, 8($v0) -/* 0BD514 7F0889E4 8FA5004C */ lw $a1, 0x4c($sp) -/* 0BD518 7F0889E8 E7A60054 */ swc1 $f6, 0x54($sp) -/* 0BD51C 7F0889EC 8C440028 */ lw $a0, 0x28($v0) -/* 0BD520 7F0889F0 8FA60054 */ lw $a2, 0x54($sp) -/* 0BD524 7F0889F4 0FC20358 */ jal bondviewYPositionRelated -/* 0BD528 7F0889F8 AFA40044 */ sw $a0, 0x44($sp) -/* 0BD52C 7F0889FC 8E220000 */ lw $v0, ($s1) -/* 0BD530 7F088A00 C44829BC */ lwc1 $f8, 0x29bc($v0) -/* 0BD534 7F088A04 46004280 */ add.s $f10, $f8, $f0 -/* 0BD538 7F088A08 E7AA0050 */ swc1 $f10, 0x50($sp) -/* 0BD53C 7F088A0C E4400070 */ swc1 $f0, 0x70($v0) -/* 0BD540 7F088A10 0C002914 */ jal randomGetNext -/* 0BD544 7F088A14 E7A0003C */ swc1 $f0, 0x3c($sp) -/* 0BD548 7F088A18 44828000 */ mtc1 $v0, $f16 -/* 0BD54C 7F088A1C 3C018005 */ lui $at, %hi(D_80055284) -/* 0BD550 7F088A20 C42C5284 */ lwc1 $f12, %lo(D_80055284)($at) -/* 0BD554 7F088A24 C7A2003C */ lwc1 $f2, 0x3c($sp) -/* 0BD558 7F088A28 04410005 */ bgez $v0, .L7F088A40 -/* 0BD55C 7F088A2C 468084A0 */ cvt.s.w $f18, $f16 -/* 0BD560 7F088A30 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0BD564 7F088A34 44812000 */ mtc1 $at, $f4 -/* 0BD568 7F088A38 00000000 */ nop -/* 0BD56C 7F088A3C 46049480 */ add.s $f18, $f18, $f4 -.L7F088A40: -/* 0BD570 7F088A40 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0BD574 7F088A44 44813000 */ mtc1 $at, $f6 -/* 0BD578 7F088A48 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0BD57C 7F088A4C 44815000 */ mtc1 $at, $f10 -/* 0BD580 7F088A50 46069202 */ mul.s $f8, $f18, $f6 -/* 0BD584 7F088A54 8E2B0000 */ lw $t3, ($s1) -/* 0BD588 7F088A58 3C018005 */ lui $at, %hi(D_80055288) -/* 0BD58C 7F088A5C 27A5004C */ addiu $a1, $sp, 0x4c -/* 0BD590 7F088A60 460C4002 */ mul.s $f0, $f8, $f12 -/* 0BD594 7F088A64 00000000 */ nop -/* 0BD598 7F088A68 460A0402 */ mul.s $f16, $f0, $f10 -/* 0BD59C 7F088A6C E7A00048 */ swc1 $f0, 0x48($sp) -/* 0BD5A0 7F088A70 460C8103 */ div.s $f4, $f16, $f12 -/* 0BD5A4 7F088A74 E5640148 */ swc1 $f4, 0x148($t3) -/* 0BD5A8 7F088A78 8E2C0000 */ lw $t4, ($s1) -/* 0BD5AC 7F088A7C E5820074 */ swc1 $f2, 0x74($t4) -/* 0BD5B0 7F088A80 C4325288 */ lwc1 $f18, %lo(D_80055288)($at) -/* 0BD5B4 7F088A84 8E2D0000 */ lw $t5, ($s1) -/* 0BD5B8 7F088A88 46121183 */ div.s $f6, $f2, $f18 -/* 0BD5BC 7F088A8C E5A6006C */ swc1 $f6, 0x6c($t5) -/* 0BD5C0 7F088A90 8E240000 */ lw $a0, ($s1) -/* 0BD5C4 7F088A94 8FA60044 */ lw $a2, 0x44($sp) -/* 0BD5C8 7F088A98 0FC1F1CC */ jal change_player_pos_to_target -/* 0BD5CC 7F088A9C 24840488 */ addiu $a0, $a0, 0x488 -/* 0BD5D0 7F088AA0 0FC15FAB */ jal sinf -/* 0BD5D4 7F088AA4 C7AC0048 */ lwc1 $f12, 0x48($sp) -/* 0BD5D8 7F088AA8 8E390000 */ lw $t9, ($s1) -/* 0BD5DC 7F088AAC 46000207 */ neg.s $f8, $f0 -/* 0BD5E0 7F088AB0 44805000 */ mtc1 $zero, $f10 -/* 0BD5E4 7F088AB4 E7280498 */ swc1 $f8, 0x498($t9) -/* 0BD5E8 7F088AB8 8E380000 */ lw $t8, ($s1) -/* 0BD5EC 7F088ABC E70A049C */ swc1 $f10, 0x49c($t8) -/* 0BD5F0 7F088AC0 0FC15FA8 */ jal cosf -/* 0BD5F4 7F088AC4 C7AC0048 */ lwc1 $f12, 0x48($sp) -/* 0BD5F8 7F088AC8 8E2E0000 */ lw $t6, ($s1) -/* 0BD5FC 7F088ACC 3C018005 */ lui $at, %hi(D_8005528C) -/* 0BD600 7F088AD0 C42C528C */ lwc1 $f12, %lo(D_8005528C)($at) -/* 0BD604 7F088AD4 E5C004A0 */ swc1 $f0, 0x4a0($t6) -/* 0BD608 7F088AD8 8E2F0000 */ lw $t7, ($s1) -/* 0BD60C 7F088ADC C7A2004C */ lwc1 $f2, 0x4c($sp) -/* 0BD610 7F088AE0 E5E20408 */ swc1 $f2, 0x408($t7) -/* 0BD614 7F088AE4 8E280000 */ lw $t0, ($s1) -/* 0BD618 7F088AE8 8D0900A8 */ lw $t1, 0xa8($t0) -/* 0BD61C 7F088AEC E5220008 */ swc1 $f2, 8($t1) -/* 0BD620 7F088AF0 8E2A0000 */ lw $t2, ($s1) -/* 0BD624 7F088AF4 C7A20050 */ lwc1 $f2, 0x50($sp) -/* 0BD628 7F088AF8 E542040C */ swc1 $f2, 0x40c($t2) -/* 0BD62C 7F088AFC 8E2B0000 */ lw $t3, ($s1) -/* 0BD630 7F088B00 8D6C00A8 */ lw $t4, 0xa8($t3) -/* 0BD634 7F088B04 E582000C */ swc1 $f2, 0xc($t4) -/* 0BD638 7F088B08 8E2D0000 */ lw $t5, ($s1) -/* 0BD63C 7F088B0C C7A20054 */ lwc1 $f2, 0x54($sp) -/* 0BD640 7F088B10 E5A20410 */ swc1 $f2, 0x410($t5) -/* 0BD644 7F088B14 8E390000 */ lw $t9, ($s1) -/* 0BD648 7F088B18 8F3800A8 */ lw $t8, 0xa8($t9) -/* 0BD64C 7F088B1C E7020010 */ swc1 $f2, 0x10($t8) -/* 0BD650 7F088B20 8E2F0000 */ lw $t7, ($s1) -/* 0BD654 7F088B24 8FAE0044 */ lw $t6, 0x44($sp) -/* 0BD658 7F088B28 8DE800A8 */ lw $t0, 0xa8($t7) -/* 0BD65C 7F088B2C AD0E0014 */ sw $t6, 0x14($t0) -/* 0BD660 7F088B30 8E220000 */ lw $v0, ($s1) -/* 0BD664 7F088B34 C45004B4 */ lwc1 $f16, 0x4b4($v0) -/* 0BD668 7F088B38 460C8103 */ div.s $f4, $f16, $f12 -/* 0BD66C 7F088B3C E44403B8 */ swc1 $f4, 0x3b8($v0) -/* 0BD670 7F088B40 8E220000 */ lw $v0, ($s1) -/* 0BD674 7F088B44 C45204B8 */ lwc1 $f18, 0x4b8($v0) -/* 0BD678 7F088B48 460C9183 */ div.s $f6, $f18, $f12 -/* 0BD67C 7F088B4C E44603BC */ swc1 $f6, 0x3bc($v0) -/* 0BD680 7F088B50 8E220000 */ lw $v0, ($s1) -/* 0BD684 7F088B54 C44804BC */ lwc1 $f8, 0x4bc($v0) -/* 0BD688 7F088B58 460C4283 */ div.s $f10, $f8, $f12 -/* 0BD68C 7F088B5C 0FC22FFC */ jal bondinvReinitInv -/* 0BD690 7F088B60 E44A03C0 */ swc1 $f10, 0x3c0($v0) -/* 0BD694 7F088B64 8E290000 */ lw $t1, ($s1) -/* 0BD698 7F088B68 24020008 */ li $v0, 8 -/* 0BD69C 7F088B6C 24030078 */ li $v1, 120 -/* 0BD6A0 7F088B70 AD201130 */ sw $zero, 0x1130($t1) -/* 0BD6A4 7F088B74 8E2A0000 */ lw $t2, ($s1) -/* 0BD6A8 7F088B78 AD401134 */ sw $zero, 0x1134($t2) -.L7F088B7C: -/* 0BD6AC 7F088B7C 8E2B0000 */ lw $t3, ($s1) -/* 0BD6B0 7F088B80 01626021 */ addu $t4, $t3, $v0 -/* 0BD6B4 7F088B84 AD801130 */ sw $zero, 0x1130($t4) -/* 0BD6B8 7F088B88 8E2D0000 */ lw $t5, ($s1) -/* 0BD6BC 7F088B8C 01A2C821 */ addu $t9, $t5, $v0 -/* 0BD6C0 7F088B90 AF201134 */ sw $zero, 0x1134($t9) -/* 0BD6C4 7F088B94 8E380000 */ lw $t8, ($s1) -/* 0BD6C8 7F088B98 03027821 */ addu $t7, $t8, $v0 -/* 0BD6CC 7F088B9C ADE01138 */ sw $zero, 0x1138($t7) -/* 0BD6D0 7F088BA0 8E2E0000 */ lw $t6, ($s1) -/* 0BD6D4 7F088BA4 01C24021 */ addu $t0, $t6, $v0 -/* 0BD6D8 7F088BA8 24420010 */ addiu $v0, $v0, 0x10 -/* 0BD6DC 7F088BAC 1443FFF3 */ bne $v0, $v1, .L7F088B7C -/* 0BD6E0 7F088BB0 AD00113C */ sw $zero, 0x113c($t0) -/* 0BD6E4 7F088BB4 52000036 */ beql $s0, $zero, .L7F088C90 -/* 0BD6E8 7F088BB8 44800000 */ mtc1 $zero, $f0 -/* 0BD6EC 7F088BBC 8E020000 */ lw $v0, ($s0) -/* 0BD6F0 7F088BC0 24010009 */ li $at, 9 -/* 0BD6F4 7F088BC4 10410031 */ beq $v0, $at, .L7F088C8C -/* 0BD6F8 7F088BC8 2C410007 */ sltiu $at, $v0, 7 -.L7F088BCC: -/* 0BD6FC 7F088BCC 1020002A */ beqz $at, .L7F088C78 -/* 0BD700 7F088BD0 00024880 */ sll $t1, $v0, 2 -/* 0BD704 7F088BD4 3C018005 */ lui $at, %hi(jpt_mpspawntype) -/* 0BD708 7F088BD8 00290821 */ addu $at, $at, $t1 -/* 0BD70C 7F088BDC 8C295290 */ lw $t1, %lo(jpt_mpspawntype)($at) -/* 0BD710 7F088BE0 01200008 */ jr $t1 -/* 0BD714 7F088BE4 00000000 */ nop -mp_spawntype_spawn: -/* 0BD718 7F088BE8 10000024 */ b .L7F088C7C -/* 0BD71C 7F088BEC 2610000C */ addiu $s0, $s0, 0xc -mp_spawntype_weapon: -/* 0BD720 7F088BF0 0FC30288 */ jal check_ramrom_flags -/* 0BD724 7F088BF4 00000000 */ nop -/* 0BD728 7F088BF8 8E0A000C */ lw $t2, 0xc($s0) -/* 0BD72C 7F088BFC 144A000A */ bne $v0, $t2, .L7F088C28 -/* 0BD730 7F088C00 00000000 */ nop -/* 0BD734 7F088C04 8E050008 */ lw $a1, 8($s0) -/* 0BD738 7F088C08 04A00005 */ bltz $a1, .L7F088C20 -/* 0BD73C 7F088C0C 00000000 */ nop -/* 0BD740 7F088C10 0FC23143 */ jal bondinvAddDoublesInvItem -/* 0BD744 7F088C14 8E040004 */ lw $a0, 4($s0) -/* 0BD748 7F088C18 10000018 */ b .L7F088C7C -/* 0BD74C 7F088C1C 26100010 */ addiu $s0, $s0, 0x10 -.L7F088C20: -/* 0BD750 7F088C20 0FC23122 */ jal bondinvAddInvItem -/* 0BD754 7F088C24 8E040004 */ lw $a0, 4($s0) -.L7F088C28: -/* 0BD758 7F088C28 10000014 */ b .L7F088C7C -/* 0BD75C 7F088C2C 26100010 */ addiu $s0, $s0, 0x10 -mp_spawntype_ammo: -/* 0BD760 7F088C30 0FC30288 */ jal check_ramrom_flags -/* 0BD764 7F088C34 00000000 */ nop -/* 0BD768 7F088C38 8E0B000C */ lw $t3, 0xc($s0) -/* 0BD76C 7F088C3C 144B0004 */ bne $v0, $t3, .L7F088C50 -/* 0BD770 7F088C40 00000000 */ nop -/* 0BD774 7F088C44 8E040004 */ lw $a0, 4($s0) -/* 0BD778 7F088C48 0FC1A44C */ jal give_cur_player_ammo -/* 0BD77C 7F088C4C 8E050008 */ lw $a1, 8($s0) -.L7F088C50: -/* 0BD780 7F088C50 1000000A */ b .L7F088C7C -/* 0BD784 7F088C54 26100010 */ addiu $s0, $s0, 0x10 -mp_spawntype_intro_swirly: -/* 0BD788 7F088C58 10000008 */ b .L7F088C7C -/* 0BD78C 7F088C5C 26100020 */ addiu $s0, $s0, 0x20 -mp_spawntype_intro_anim: -/* 0BD790 7F088C60 10000006 */ b .L7F088C7C -/* 0BD794 7F088C64 26100008 */ addiu $s0, $s0, 8 -mp_spawntype_handcuff: -/* 0BD798 7F088C68 10000004 */ b .L7F088C7C -/* 0BD79C 7F088C6C 26100008 */ addiu $s0, $s0, 8 -mp_spawntype_intro_camera: -/* 0BD7A0 7F088C70 10000002 */ b .L7F088C7C -/* 0BD7A4 7F088C74 26100028 */ addiu $s0, $s0, 0x28 -mp_spawntype_default: -.L7F088C78: -/* 0BD7A8 7F088C78 26100004 */ addiu $s0, $s0, 4 -.L7F088C7C: -/* 0BD7AC 7F088C7C 8E020000 */ lw $v0, ($s0) -/* 0BD7B0 7F088C80 24010009 */ li $at, 9 -/* 0BD7B4 7F088C84 5441FFD1 */ bnel $v0, $at, .L7F088BCC -/* 0BD7B8 7F088C88 2C410007 */ sltiu $at, $v0, 7 -.L7F088C8C: -/* 0BD7BC 7F088C8C 44800000 */ mtc1 $zero, $f0 -.L7F088C90: -/* 0BD7C0 7F088C90 8E2C0000 */ lw $t4, ($s1) -/* 0BD7C4 7F088C94 3C018005 */ lui $at, %hi(D_800552AC) -/* 0BD7C8 7F088C98 E5800078 */ swc1 $f0, 0x78($t4) -/* 0BD7CC 7F088C9C 8E2D0000 */ lw $t5, ($s1) -/* 0BD7D0 7F088CA0 C43052AC */ lwc1 $f16, %lo(D_800552AC)($at) -/* 0BD7D4 7F088CA4 3C0142F0 */ li $at, 0x42F00000 # 120.000000 -/* 0BD7D8 7F088CA8 44816000 */ mtc1 $at, $f12 -/* 0BD7DC 7F088CAC E5B0007C */ swc1 $f16, 0x7c($t5) -/* 0BD7E0 7F088CB0 8E390000 */ lw $t9, ($s1) -/* 0BD7E4 7F088CB4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BD7E8 7F088CB8 44817000 */ mtc1 $at, $f14 -/* 0BD7EC 7F088CBC 0FC20284 */ jal currentPlayerStartChrFade -/* 0BD7F0 7F088CC0 E7200080 */ swc1 $f0, 0x80($t9) -/* 0BD7F4 7F088CC4 8FBF001C */ lw $ra, 0x1c($sp) -/* 0BD7F8 7F088CC8 8FB00014 */ lw $s0, 0x14($sp) -/* 0BD7FC 7F088CCC 8FB10018 */ lw $s1, 0x18($sp) -/* 0BD800 7F088CD0 03E00008 */ jr $ra -/* 0BD804 7F088CD4 27BD0058 */ addiu $sp, $sp, 0x58 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_80055284 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80055288 -.word 0x3e4d35a8 /* 0.2004 */ -glabel D_8005528C -.word 0x3df34d68 /* 0.118799984 */ - -/*D:80055290*/ -glabel jpt_mpspawntype -.word mp_spawntype_spawn -.word mp_spawntype_weapon -.word mp_spawntype_ammo -.word mp_spawntype_intro_swirly -.word mp_spawntype_intro_anim -.word mp_spawntype_handcuff -.word mp_spawntype_intro_camera -.size jpt_mpspawntype, . - jpt_mpspawntype - -glabel D_800552AC -.word 0xb8d1b717 /*-0.000099999997*/ -.text -glabel mp_respawn_handler -/* 0BB440 7F088A50 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0BB444 7F088A54 3C0F8003 */ lui $t7, %hi(D_8003688C) # $t7, 0x8003 -/* 0BB448 7F088A58 AFBF001C */ sw $ra, 0x1c($sp) -/* 0BB44C 7F088A5C AFB10018 */ sw $s1, 0x18($sp) -/* 0BB450 7F088A60 AFB00014 */ sw $s0, 0x14($sp) -/* 0BB454 7F088A64 25EF1DDC */ addiu $t7, %lo(D_8003688C) # addiu $t7, $t7, 0x1ddc -/* 0BB458 7F088A68 8DE10000 */ lw $at, ($t7) -/* 0BB45C 7F088A6C 27AE004C */ addiu $t6, $sp, 0x4c -/* 0BB460 7F088A70 8DE80004 */ lw $t0, 4($t7) -/* 0BB464 7F088A74 ADC10000 */ sw $at, ($t6) -/* 0BB468 7F088A78 8DE10008 */ lw $at, 8($t7) -/* 0BB46C 7F088A7C 3C108006 */ lui $s0, %hi(g_CurrentSetup+8) # $s0, 0x8006 -/* 0BB470 7F088A80 ADC80004 */ sw $t0, 4($t6) -/* 0BB474 7F088A84 ADC10008 */ sw $at, 8($t6) -/* 0BB478 7F088A88 0FC1E51B */ jal init_player_BONDdata -/* 0BB47C 7F088A8C 8E104C48 */ lw $s0, %lo(g_CurrentSetup+8)($s0) -/* 0BB480 7F088A90 0FC1E64E */ jal bondviewPlayerSpawnRelated -/* 0BB484 7F088A94 00000000 */ nop -/* 0BB488 7F088A98 3C118007 */ lui $s1, %hi(g_CurrentPlayer) # $s1, 0x8007 -/* 0BB48C 7F088A9C 26318BC0 */ addiu $s1, %lo(g_CurrentPlayer) # addiu $s1, $s1, -0x7440 -/* 0BB490 7F088AA0 8E290000 */ lw $t1, ($s1) -/* 0BB494 7F088AA4 240C0001 */ li $t4, 1 -/* 0BB498 7F088AA8 24020007 */ li $v0, 7 -/* 0BB49C 7F088AAC AD2000D8 */ sw $zero, 0xd8($t1) -/* 0BB4A0 7F088AB0 8E2A0000 */ lw $t2, ($s1) -/* 0BB4A4 7F088AB4 240F0002 */ li $t7, 2 -/* 0BB4A8 7F088AB8 2404FFFF */ li $a0, -1 -/* 0BB4AC 7F088ABC AD400428 */ sw $zero, 0x428($t2) -/* 0BB4B0 7F088AC0 8E2B0000 */ lw $t3, ($s1) -/* 0BB4B4 7F088AC4 AD600424 */ sw $zero, 0x424($t3) -/* 0BB4B8 7F088AC8 8E2D0000 */ lw $t5, ($s1) -/* 0BB4BC 7F088ACC ADAC0420 */ sw $t4, 0x420($t5) -/* 0BB4C0 7F088AD0 8E390000 */ lw $t9, ($s1) -/* 0BB4C4 7F088AD4 AF2229B0 */ sw $v0, 0x29b0($t9) -/* 0BB4C8 7F088AD8 8E380000 */ lw $t8, ($s1) -/* 0BB4CC 7F088ADC AF0229CC */ sw $v0, 0x29cc($t8) -/* 0BB4D0 7F088AE0 8E2E0000 */ lw $t6, ($s1) -/* 0BB4D4 7F088AE4 ADC0105C */ sw $zero, 0x105c($t6) -/* 0BB4D8 7F088AE8 8E280000 */ lw $t0, ($s1) -/* 0BB4DC 7F088AEC 0FC2294B */ jal hudmsgsSetOn -/* 0BB4E0 7F088AF0 AD0F1120 */ sw $t7, 0x1120($t0) -/* 0BB4E4 7F088AF4 0FC22ADC */ jal bondviewClearUpperTextDisplayFlag -/* 0BB4E8 7F088AF8 2404FFFF */ li $a0, -1 -/* 0BB4EC 7F088AFC 0FC26669 */ jal getPlayerCount -/* 0BB4F0 7F088B00 00000000 */ nop -/* 0BB4F4 7F088B04 28410002 */ slti $at, $v0, 2 -/* 0BB4F8 7F088B08 14200008 */ bnez $at, .L7F088B2C -/* 0BB4FC 7F088B0C 3C098007 */ lui $t1, %hi(startpadcount) # $t1, 0x8007 -/* 0BB500 7F088B10 8D298778 */ lw $t1, %lo(startpadcount)($t1) -/* 0BB504 7F088B14 59200006 */ blezl $t1, .L7F088B30 -/* 0BB508 7F088B18 00001825 */ move $v1, $zero -/* 0BB50C 7F088B1C 0FC1E45C */ jal bondviewGetRandomSpawnPadIndex -/* 0BB510 7F088B20 00000000 */ nop -/* 0BB514 7F088B24 10000002 */ b .L7F088B30 -/* 0BB518 7F088B28 00401825 */ move $v1, $v0 -.L7F088B2C: -/* 0BB51C 7F088B2C 00001825 */ move $v1, $zero -.L7F088B30: -/* 0BB520 7F088B30 00035080 */ sll $t2, $v1, 2 -/* 0BB524 7F088B34 3C028007 */ lui $v0, %hi(g_Startpad) -/* 0BB528 7F088B38 004A1021 */ addu $v0, $v0, $t2 -/* 0BB52C 7F088B3C 8C428738 */ lw $v0, %lo(g_Startpad)($v0) -/* 0BB530 7F088B40 C4440000 */ lwc1 $f4, ($v0) -/* 0BB534 7F088B44 E7A4004C */ swc1 $f4, 0x4c($sp) -/* 0BB538 7F088B48 C4460008 */ lwc1 $f6, 8($v0) -/* 0BB53C 7F088B4C 8FA5004C */ lw $a1, 0x4c($sp) -/* 0BB540 7F088B50 E7A60054 */ swc1 $f6, 0x54($sp) -/* 0BB544 7F088B54 8C440028 */ lw $a0, 0x28($v0) -/* 0BB548 7F088B58 8FA60054 */ lw $a2, 0x54($sp) -/* 0BB54C 7F088B5C 0FC20381 */ jal bondviewYPositionRelated -/* 0BB550 7F088B60 AFA40044 */ sw $a0, 0x44($sp) -/* 0BB554 7F088B64 8E220000 */ lw $v0, ($s1) -/* 0BB558 7F088B68 C44829B4 */ lwc1 $f8, 0x29b4($v0) -/* 0BB55C 7F088B6C 46004280 */ add.s $f10, $f8, $f0 -/* 0BB560 7F088B70 E7AA0050 */ swc1 $f10, 0x50($sp) -/* 0BB564 7F088B74 E4400070 */ swc1 $f0, 0x70($v0) -/* 0BB568 7F088B78 0C00262C */ jal randomGetNext -/* 0BB56C 7F088B7C E7A0003C */ swc1 $f0, 0x3c($sp) -/* 0BB570 7F088B80 44828000 */ mtc1 $v0, $f16 -/* 0BB574 7F088B84 3C018005 */ lui $at, %hi(D_80055284) # $at, 0x8005 -/* 0BB578 7F088B88 C42CAE58 */ lwc1 $f12, %lo(D_80055284)($at) -/* 0BB57C 7F088B8C C7A2003C */ lwc1 $f2, 0x3c($sp) -/* 0BB580 7F088B90 04410005 */ bgez $v0, .L7F088BA8 -/* 0BB584 7F088B94 468084A0 */ cvt.s.w $f18, $f16 -/* 0BB588 7F088B98 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0BB58C 7F088B9C 44812000 */ mtc1 $at, $f4 -/* 0BB590 7F088BA0 00000000 */ nop -/* 0BB594 7F088BA4 46049480 */ add.s $f18, $f18, $f4 -.L7F088BA8: -/* 0BB598 7F088BA8 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0BB59C 7F088BAC 44813000 */ mtc1 $at, $f6 -/* 0BB5A0 7F088BB0 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0BB5A4 7F088BB4 44815000 */ mtc1 $at, $f10 -/* 0BB5A8 7F088BB8 46069202 */ mul.s $f8, $f18, $f6 -/* 0BB5AC 7F088BBC 8E2B0000 */ lw $t3, ($s1) -/* 0BB5B0 7F088BC0 3C018005 */ lui $at, %hi(D_80055288) # $at, 0x8005 -/* 0BB5B4 7F088BC4 27A5004C */ addiu $a1, $sp, 0x4c -/* 0BB5B8 7F088BC8 460C4002 */ mul.s $f0, $f8, $f12 -/* 0BB5BC 7F088BCC 00000000 */ nop -/* 0BB5C0 7F088BD0 460A0402 */ mul.s $f16, $f0, $f10 -/* 0BB5C4 7F088BD4 E7A00048 */ swc1 $f0, 0x48($sp) -/* 0BB5C8 7F088BD8 460C8103 */ div.s $f4, $f16, $f12 -/* 0BB5CC 7F088BDC E5640148 */ swc1 $f4, 0x148($t3) -/* 0BB5D0 7F088BE0 8E2C0000 */ lw $t4, ($s1) -/* 0BB5D4 7F088BE4 E5820074 */ swc1 $f2, 0x74($t4) -/* 0BB5D8 7F088BE8 C432AE5C */ lwc1 $f18, %lo(D_80055288)($at) -/* 0BB5DC 7F088BEC 8E2D0000 */ lw $t5, ($s1) -/* 0BB5E0 7F088BF0 46121183 */ div.s $f6, $f2, $f18 -/* 0BB5E4 7F088BF4 E5A6006C */ swc1 $f6, 0x6c($t5) -/* 0BB5E8 7F088BF8 8E240000 */ lw $a0, ($s1) -/* 0BB5EC 7F088BFC 8FA60044 */ lw $a2, 0x44($sp) -/* 0BB5F0 7F088C00 0FC1F201 */ jal change_player_pos_to_target -/* 0BB5F4 7F088C04 24840488 */ addiu $a0, $a0, 0x488 -/* 0BB5F8 7F088C08 0FC1606B */ jal sinf -/* 0BB5FC 7F088C0C C7AC0048 */ lwc1 $f12, 0x48($sp) -/* 0BB600 7F088C10 8E390000 */ lw $t9, ($s1) -/* 0BB604 7F088C14 46000207 */ neg.s $f8, $f0 -/* 0BB608 7F088C18 44805000 */ mtc1 $zero, $f10 -/* 0BB60C 7F088C1C E7280498 */ swc1 $f8, 0x498($t9) -/* 0BB610 7F088C20 8E380000 */ lw $t8, ($s1) -/* 0BB614 7F088C24 E70A049C */ swc1 $f10, 0x49c($t8) -/* 0BB618 7F088C28 0FC16068 */ jal cosf -/* 0BB61C 7F088C2C C7AC0048 */ lwc1 $f12, 0x48($sp) -/* 0BB620 7F088C30 8E2E0000 */ lw $t6, ($s1) -/* 0BB624 7F088C34 3C018005 */ lui $at, %hi(D_8005528C) # $at, 0x8005 -/* 0BB628 7F088C38 C42CAE60 */ lwc1 $f12, %lo(D_8005528C)($at) -/* 0BB62C 7F088C3C E5C004A0 */ swc1 $f0, 0x4a0($t6) -/* 0BB630 7F088C40 8E2F0000 */ lw $t7, ($s1) -/* 0BB634 7F088C44 C7A2004C */ lwc1 $f2, 0x4c($sp) -/* 0BB638 7F088C48 E5E20408 */ swc1 $f2, 0x408($t7) -/* 0BB63C 7F088C4C 8E280000 */ lw $t0, ($s1) -/* 0BB640 7F088C50 8D0900A8 */ lw $t1, 0xa8($t0) -/* 0BB644 7F088C54 E5220008 */ swc1 $f2, 8($t1) -/* 0BB648 7F088C58 8E2A0000 */ lw $t2, ($s1) -/* 0BB64C 7F088C5C C7A20050 */ lwc1 $f2, 0x50($sp) -/* 0BB650 7F088C60 E542040C */ swc1 $f2, 0x40c($t2) -/* 0BB654 7F088C64 8E2B0000 */ lw $t3, ($s1) -/* 0BB658 7F088C68 8D6C00A8 */ lw $t4, 0xa8($t3) -/* 0BB65C 7F088C6C E582000C */ swc1 $f2, 0xc($t4) -/* 0BB660 7F088C70 8E2D0000 */ lw $t5, ($s1) -/* 0BB664 7F088C74 C7A20054 */ lwc1 $f2, 0x54($sp) -/* 0BB668 7F088C78 E5A20410 */ swc1 $f2, 0x410($t5) -/* 0BB66C 7F088C7C 8E390000 */ lw $t9, ($s1) -/* 0BB670 7F088C80 8F3800A8 */ lw $t8, 0xa8($t9) -/* 0BB674 7F088C84 E7020010 */ swc1 $f2, 0x10($t8) -/* 0BB678 7F088C88 8E2F0000 */ lw $t7, ($s1) -/* 0BB67C 7F088C8C 8FAE0044 */ lw $t6, 0x44($sp) -/* 0BB680 7F088C90 8DE800A8 */ lw $t0, 0xa8($t7) -/* 0BB684 7F088C94 AD0E0014 */ sw $t6, 0x14($t0) -/* 0BB688 7F088C98 8E220000 */ lw $v0, ($s1) -/* 0BB68C 7F088C9C C45004B4 */ lwc1 $f16, 0x4b4($v0) -/* 0BB690 7F088CA0 460C8103 */ div.s $f4, $f16, $f12 -/* 0BB694 7F088CA4 E44403B8 */ swc1 $f4, 0x3b8($v0) -/* 0BB698 7F088CA8 8E220000 */ lw $v0, ($s1) -/* 0BB69C 7F088CAC C45204B8 */ lwc1 $f18, 0x4b8($v0) -/* 0BB6A0 7F088CB0 460C9183 */ div.s $f6, $f18, $f12 -/* 0BB6A4 7F088CB4 E44603BC */ swc1 $f6, 0x3bc($v0) -/* 0BB6A8 7F088CB8 8E220000 */ lw $v0, ($s1) -/* 0BB6AC 7F088CBC C44804BC */ lwc1 $f8, 0x4bc($v0) -/* 0BB6B0 7F088CC0 460C4283 */ div.s $f10, $f8, $f12 -/* 0BB6B4 7F088CC4 0FC230C0 */ jal bondinvReinitInv -/* 0BB6B8 7F088CC8 E44A03C0 */ swc1 $f10, 0x3c0($v0) -/* 0BB6BC 7F088CCC 8E290000 */ lw $t1, ($s1) -/* 0BB6C0 7F088CD0 24020008 */ li $v0, 8 -/* 0BB6C4 7F088CD4 24030078 */ li $v1, 120 -/* 0BB6C8 7F088CD8 AD201128 */ sw $zero, 0x1128($t1) -/* 0BB6CC 7F088CDC 8E2A0000 */ lw $t2, ($s1) -/* 0BB6D0 7F088CE0 AD40112C */ sw $zero, 0x112c($t2) -.L7F088CE4: -/* 0BB6D4 7F088CE4 8E2B0000 */ lw $t3, ($s1) -/* 0BB6D8 7F088CE8 01626021 */ addu $t4, $t3, $v0 -/* 0BB6DC 7F088CEC AD801128 */ sw $zero, 0x1128($t4) -/* 0BB6E0 7F088CF0 8E2D0000 */ lw $t5, ($s1) -/* 0BB6E4 7F088CF4 01A2C821 */ addu $t9, $t5, $v0 -/* 0BB6E8 7F088CF8 AF20112C */ sw $zero, 0x112c($t9) -/* 0BB6EC 7F088CFC 8E380000 */ lw $t8, ($s1) -/* 0BB6F0 7F088D00 03027821 */ addu $t7, $t8, $v0 -/* 0BB6F4 7F088D04 ADE01130 */ sw $zero, 0x1130($t7) -/* 0BB6F8 7F088D08 8E2E0000 */ lw $t6, ($s1) -/* 0BB6FC 7F088D0C 01C24021 */ addu $t0, $t6, $v0 -/* 0BB700 7F088D10 24420010 */ addiu $v0, $v0, 0x10 -/* 0BB704 7F088D14 1443FFF3 */ bne $v0, $v1, .L7F088CE4 -/* 0BB708 7F088D18 AD001134 */ sw $zero, 0x1134($t0) -/* 0BB70C 7F088D1C 52000036 */ beql $s0, $zero, .L7F088DF8 -/* 0BB710 7F088D20 44800000 */ mtc1 $zero, $f0 -/* 0BB714 7F088D24 8E020000 */ lw $v0, ($s0) -/* 0BB718 7F088D28 24010009 */ li $at, 9 -/* 0BB71C 7F088D2C 10410031 */ beq $v0, $at, .L7F088DF4 -/* 0BB720 7F088D30 2C410007 */ sltiu $at, $v0, 7 -.L7F088D34: -/* 0BB724 7F088D34 1020002A */ beqz $at, .L7F088DE0 -/* 0BB728 7F088D38 00024880 */ sll $t1, $v0, 2 -/* 0BB72C 7F088D3C 3C018005 */ lui $at, %hi(jpt_mpspawntype) -/* 0BB730 7F088D40 00290821 */ addu $at, $at, $t1 -/* 0BB734 7F088D44 8C29AE64 */ lw $t1, %lo(jpt_mpspawntype)($at) -/* 0BB738 7F088D48 01200008 */ jr $t1 -/* 0BB73C 7F088D4C 00000000 */ nop -mp_spawntype_spawn: -/* 0BB740 7F088D50 10000024 */ b .L7F088DE4 -/* 0BB744 7F088D54 2610000C */ addiu $s0, $s0, 0xc -mp_spawntype_weapon: -/* 0BB748 7F088D58 0FC2FFA8 */ jal check_ramrom_flags -/* 0BB74C 7F088D5C 00000000 */ nop -/* 0BB750 7F088D60 8E0A000C */ lw $t2, 0xc($s0) -/* 0BB754 7F088D64 144A000A */ bne $v0, $t2, .L7F088D90 -/* 0BB758 7F088D68 00000000 */ nop -/* 0BB75C 7F088D6C 8E050008 */ lw $a1, 8($s0) -/* 0BB760 7F088D70 04A00005 */ bltz $a1, .L7F088D88 -/* 0BB764 7F088D74 00000000 */ nop -/* 0BB768 7F088D78 0FC23221 */ jal bondinvAddDoublesInvItem -/* 0BB76C 7F088D7C 8E040004 */ lw $a0, 4($s0) -/* 0BB770 7F088D80 10000018 */ b .L7F088DE4 -/* 0BB774 7F088D84 26100010 */ addiu $s0, $s0, 0x10 -.L7F088D88: -/* 0BB778 7F088D88 0FC231FA */ jal bondinvAddInvItem -/* 0BB77C 7F088D8C 8E040004 */ lw $a0, 4($s0) -.L7F088D90: -/* 0BB780 7F088D90 10000014 */ b .L7F088DE4 -/* 0BB784 7F088D94 26100010 */ addiu $s0, $s0, 0x10 -mp_spawntype_ammo: -/* 0BB788 7F088D98 0FC2FFA8 */ jal check_ramrom_flags -/* 0BB78C 7F088D9C 00000000 */ nop -/* 0BB790 7F088DA0 8E0B000C */ lw $t3, 0xc($s0) -/* 0BB794 7F088DA4 144B0004 */ bne $v0, $t3, .L7F088DB8 -/* 0BB798 7F088DA8 00000000 */ nop -/* 0BB79C 7F088DAC 8E040004 */ lw $a0, 4($s0) -/* 0BB7A0 7F088DB0 0FC1A631 */ jal give_cur_player_ammo -/* 0BB7A4 7F088DB4 8E050008 */ lw $a1, 8($s0) -.L7F088DB8: -/* 0BB7A8 7F088DB8 1000000A */ b .L7F088DE4 -/* 0BB7AC 7F088DBC 26100010 */ addiu $s0, $s0, 0x10 -mp_spawntype_intro_swirly: -/* 0BB7B0 7F088DC0 10000008 */ b .L7F088DE4 -/* 0BB7B4 7F088DC4 26100020 */ addiu $s0, $s0, 0x20 -mp_spawntype_intro_anim: -/* 0BB7B8 7F088DC8 10000006 */ b .L7F088DE4 -/* 0BB7BC 7F088DCC 26100008 */ addiu $s0, $s0, 8 -mp_spawntype_handcuff: -/* 0BB7C0 7F088DD0 10000004 */ b .L7F088DE4 -/* 0BB7C4 7F088DD4 26100008 */ addiu $s0, $s0, 8 -mp_spawntype_intro_camera: -/* 0BB7C8 7F088DD8 10000002 */ b .L7F088DE4 -/* 0BB7CC 7F088DDC 26100028 */ addiu $s0, $s0, 0x28 -mp_spawntype_default: -.L7F088DE0: -/* 0BB7D0 7F088DE0 26100004 */ addiu $s0, $s0, 4 -.L7F088DE4: -/* 0BB7D4 7F088DE4 8E020000 */ lw $v0, ($s0) -/* 0BB7D8 7F088DE8 24010009 */ li $at, 9 -/* 0BB7DC 7F088DEC 5441FFD1 */ bnel $v0, $at, .L7F088D34 -/* 0BB7E0 7F088DF0 2C410007 */ sltiu $at, $v0, 7 -.L7F088DF4: -/* 0BB7E4 7F088DF4 44800000 */ mtc1 $zero, $f0 -.L7F088DF8: -/* 0BB7E8 7F088DF8 8E2C0000 */ lw $t4, ($s1) -/* 0BB7EC 7F088DFC 3C018005 */ lui $at, %hi(D_800552AC) # $at, 0x8005 -/* 0BB7F0 7F088E00 E5800078 */ swc1 $f0, 0x78($t4) -/* 0BB7F4 7F088E04 8E2D0000 */ lw $t5, ($s1) -/* 0BB7F8 7F088E08 C430AE80 */ lwc1 $f16, %lo(D_800552AC)($at) -/* 0BB7FC 7F088E0C 3C0142F0 */ li $at, 0x42F00000 # 120.000000 -/* 0BB800 7F088E10 44816000 */ mtc1 $at, $f12 -/* 0BB804 7F088E14 E5B0007C */ swc1 $f16, 0x7c($t5) -/* 0BB808 7F088E18 8E390000 */ lw $t9, ($s1) -/* 0BB80C 7F088E1C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BB810 7F088E20 44817000 */ mtc1 $at, $f14 -/* 0BB814 7F088E24 0FC202AD */ jal currentPlayerStartChrFade -/* 0BB818 7F088E28 E7200080 */ swc1 $f0, 0x80($t9) -/* 0BB81C 7F088E2C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0BB820 7F088E30 8FB00014 */ lw $s0, 0x14($sp) -/* 0BB824 7F088E34 8FB10018 */ lw $s1, 0x18($sp) -/* 0BB828 7F088E38 03E00008 */ jr $ra -/* 0BB82C 7F088E3C 27BD0058 */ addiu $sp, $sp, 0x58 -) -#endif - -#endif +/** + * Address: 7F088CD8 + */ +Gfx *bondviewRenderCredits(Gfx *gdl) +{ + s32 frame; + s32 start; + s32 x; + s32 y; + s32 xpos1; + s32 xpos2; + s32 textheight; + s32 textwidth; + s32 i; + s32 end; + s32 x2; + s32 entrysize; + s32 align1; + s32 align2; + s16 viewheight; + char *text; + if (bossGetStageNum() == LEVELID_CUBA && credits_state == 1 && credits_pointer != NULL) + { + xpos1 = 0xdc; + xpos2 = 0xdc; + align1 = CREDITS_ALIGN_RIGHT; + align2 = CREDITS_ALIGN_RIGHT; + camera_80036438++; + frame = camera_80036438; + gdl = microcode_constructor(gdl); + start = (frame - viGetViewHeight()) / 16; + end = (frame / 16) + 1; + if (start < 0) + { + start = 0; + } -#ifdef NONMATCHING -void sub_GAME_7F088CD8(void) { + for (i = 0; i < start; i++) + { + if (credits_pointer[i].TextId1 == 0 && credits_pointer[i].TextId2 == 0) + { + end = i; + start = i; + credits_state = 2; + break; + } + if (credits_pointer[i].TextId1 != 0x5011) + { + if (credits_pointer[i].Position1 >= 0) + { + xpos1 = credits_pointer[i].Position1; + } + + if ((s16) credits_pointer[i].Alignment1 >= CREDITS_ALIGN_RIGHT) + { + align1 = (s16) credits_pointer[i].Alignment1; + } + } + + if (credits_pointer[i].TextId2 != 0x5011) + { + if (credits_pointer[i].Position2 >= 0) + { + xpos2 = credits_pointer[i].Position2; + } + + if ((s16) credits_pointer[i].Alignment2 + >= CREDITS_ALIGN_RIGHT) + { + align2 = (s16) credits_pointer[i].Alignment2; + } + } + } + + for (i = start; i < end && (credits_pointer[i].TextId1 || credits_pointer[i].TextId2); i++) + { + if ((u32) credits_pointer[i].TextId1 != 0x5011) + { + text = langGet(credits_pointer[i].TextId1); + + if (credits_pointer[i].Position1 >= 0) + { + xpos1 = credits_pointer[i].Position1; + } + + if ((s16) credits_pointer[i].Alignment1 >= CREDITS_ALIGN_RIGHT) + { + align1 = (s16) credits_pointer[i].Alignment1; + } + + viewheight = viGetViewHeight(); + y = ((viGetViewTop() + (i * 16)) - frame) + viewheight; + textheight = 0; + textwidth = 0; + + textMeasure(&textheight, &textwidth, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + + entrysize = y + textheight; + + if (align1 == CREDITS_ALIGN_LEFT) + { + x = xpos1 - textwidth; + x2 = xpos1; + } + else if (align1 == CREDITS_ALIGN_CENTER) + { + x = xpos1 - (textwidth >> 1); + x2 = x + textwidth; + } + else + { + x = xpos1; + x2 = xpos1 + textwidth; + } + + gdl = microcode_constructor_related_to_menus(gdl, x, y - 1, x2 + 1, entrysize + 1, 0); + + gdl = textRender(gdl, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); + } + + if (credits_pointer[i].TextId2 != 0x5011) + { + text = langGet(credits_pointer[i].TextId2); + + if (credits_pointer[i].Position2 >= 0) + { + xpos2 = credits_pointer[i].Position2; + } + + if ((s16) credits_pointer[i].Alignment2 >= CREDITS_ALIGN_RIGHT) + { + align2 = (s16) credits_pointer[i].Alignment2; + } + + viewheight = viGetViewHeight(); + y = ((viGetViewTop() + (i * 16)) - frame) + viewheight; + textheight = 0; + textwidth = 0; + + textMeasure(&textheight, &textwidth, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + + entrysize = y + textheight; + + if (align2 == CREDITS_ALIGN_LEFT) + { + x = xpos2 - textwidth; + x2 = xpos2; + } + else if (align2 == CREDITS_ALIGN_CENTER) + { + x = xpos2 - (textwidth >> 1); + x2 = x + textwidth; + } + else + { + x = xpos2; + x2 = xpos2 + textwidth; + } + + gdl = microcode_constructor_related_to_menus(gdl, x, y - 1, x2 + 1, entrysize + 1, 0); + + gdl = textRender(gdl, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); + } + } + + gdl = combiner_bayer_lod_perspective(gdl); + } + + return gdl; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F088CD8 -/* 0BD808 7F088CD8 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 0BD80C 7F088CDC AFBF005C */ sw $ra, 0x5c($sp) -/* 0BD810 7F088CE0 AFB5004C */ sw $s5, 0x4c($sp) -/* 0BD814 7F088CE4 0080A825 */ move $s5, $a0 -/* 0BD818 7F088CE8 AFBE0058 */ sw $fp, 0x58($sp) -/* 0BD81C 7F088CEC AFB70054 */ sw $s7, 0x54($sp) -/* 0BD820 7F088CF0 AFB60050 */ sw $s6, 0x50($sp) -/* 0BD824 7F088CF4 AFB40048 */ sw $s4, 0x48($sp) -/* 0BD828 7F088CF8 AFB30044 */ sw $s3, 0x44($sp) -/* 0BD82C 7F088CFC AFB20040 */ sw $s2, 0x40($sp) -/* 0BD830 7F088D00 AFB1003C */ sw $s1, 0x3c($sp) -/* 0BD834 7F088D04 0C001A57 */ jal bossGetStageNum -/* 0BD838 7F088D08 AFB00038 */ sw $s0, 0x38($sp) -/* 0BD83C 7F088D0C 24010036 */ li $at, 54 -/* 0BD840 7F088D10 14410130 */ bne $v0, $at, .L7F0891D4 -/* 0BD844 7F088D14 3C108003 */ lui $s0, %hi(credits_state) -/* 0BD848 7F088D18 2610643C */ addiu $s0, %lo(credits_state) # addiu $s0, $s0, 0x643c -/* 0BD84C 7F088D1C 8E0E0000 */ lw $t6, ($s0) -/* 0BD850 7F088D20 24010001 */ li $at, 1 -/* 0BD854 7F088D24 3C0F8003 */ lui $t7, %hi(credits_pointer) -/* 0BD858 7F088D28 55C1012B */ bnel $t6, $at, .L7F0891D8 -/* 0BD85C 7F088D2C 8FBF005C */ lw $ra, 0x5c($sp) -/* 0BD860 7F088D30 8DEF6440 */ lw $t7, %lo(credits_pointer)($t7) -/* 0BD864 7F088D34 3C028003 */ lui $v0, %hi(camera_80036438) -/* 0BD868 7F088D38 24426438 */ addiu $v0, %lo(camera_80036438) # addiu $v0, $v0, 0x6438 -/* 0BD86C 7F088D3C 11E00125 */ beqz $t7, .L7F0891D4 -/* 0BD870 7F088D40 241600DC */ li $s6, 220 -/* 0BD874 7F088D44 8C580000 */ lw $t8, ($v0) -/* 0BD878 7F088D48 241700DC */ li $s7, 220 -/* 0BD87C 7F088D4C AFA00084 */ sw $zero, 0x84($sp) -/* 0BD880 7F088D50 27190001 */ addiu $t9, $t8, 1 -/* 0BD884 7F088D54 AFA00080 */ sw $zero, 0x80($sp) -/* 0BD888 7F088D58 AC590000 */ sw $t9, ($v0) -/* 0BD88C 7F088D5C AFB900B4 */ sw $t9, 0xb4($sp) -/* 0BD890 7F088D60 0FC2B366 */ jal microcode_constructor -/* 0BD894 7F088D64 02A02025 */ move $a0, $s5 -/* 0BD898 7F088D68 0C00112B */ jal viGetViewHeight -/* 0BD89C 7F088D6C 0040A825 */ move $s5, $v0 -/* 0BD8A0 7F088D70 8FAA00B4 */ lw $t2, 0xb4($sp) -/* 0BD8A4 7F088D74 3C048003 */ lui $a0, %hi(credits_pointer) -/* 0BD8A8 7F088D78 01421823 */ subu $v1, $t2, $v0 -/* 0BD8AC 7F088D7C 04610003 */ bgez $v1, .L7F088D8C -/* 0BD8B0 7F088D80 00035903 */ sra $t3, $v1, 4 -/* 0BD8B4 7F088D84 2461000F */ addiu $at, $v1, 0xf -/* 0BD8B8 7F088D88 00015903 */ sra $t3, $at, 4 -.L7F088D8C: -/* 0BD8BC 7F088D8C 01601825 */ move $v1, $t3 -/* 0BD8C0 7F088D90 01603025 */ move $a2, $t3 -/* 0BD8C4 7F088D94 05410003 */ bgez $t2, .L7F088DA4 -/* 0BD8C8 7F088D98 000A6103 */ sra $t4, $t2, 4 -/* 0BD8CC 7F088D9C 2541000F */ addiu $at, $t2, 0xf -/* 0BD8D0 7F088DA0 00016103 */ sra $t4, $at, 4 -.L7F088DA4: -/* 0BD8D4 7F088DA4 258D0001 */ addiu $t5, $t4, 1 -/* 0BD8D8 7F088DA8 04610002 */ bgez $v1, .L7F088DB4 -/* 0BD8DC 7F088DAC AFAD0090 */ sw $t5, 0x90($sp) -/* 0BD8E0 7F088DB0 00003025 */ move $a2, $zero -.L7F088DB4: -/* 0BD8E4 7F088DB4 18C00024 */ blez $a2, .L7F088E48 -/* 0BD8E8 7F088DB8 00009825 */ move $s3, $zero -/* 0BD8EC 7F088DBC 8C846440 */ lw $a0, %lo(credits_pointer)($a0) -.L7F088DC0: -/* 0BD8F0 7F088DC0 94820000 */ lhu $v0, ($a0) -/* 0BD8F4 7F088DC4 24015011 */ li $at, 20497 -/* 0BD8F8 7F088DC8 14400008 */ bnez $v0, .L7F088DEC -/* 0BD8FC 7F088DCC 00000000 */ nop -/* 0BD900 7F088DD0 948E0002 */ lhu $t6, 2($a0) -/* 0BD904 7F088DD4 15C00005 */ bnez $t6, .L7F088DEC -/* 0BD908 7F088DD8 240F0002 */ li $t7, 2 -/* 0BD90C 7F088DDC AFB30090 */ sw $s3, 0x90($sp) -/* 0BD910 7F088DE0 02603025 */ move $a2, $s3 -/* 0BD914 7F088DE4 10000018 */ b .L7F088E48 -/* 0BD918 7F088DE8 AE0F0000 */ sw $t7, ($s0) -.L7F088DEC: -/* 0BD91C 7F088DEC 10410009 */ beq $v0, $at, .L7F088E14 -/* 0BD920 7F088DF0 94850002 */ lhu $a1, 2($a0) -/* 0BD924 7F088DF4 84830004 */ lh $v1, 4($a0) -/* 0BD928 7F088DF8 04620003 */ bltzl $v1, .L7F088E08 -/* 0BD92C 7F088DFC 84820006 */ lh $v0, 6($a0) -/* 0BD930 7F088E00 0060B025 */ move $s6, $v1 -/* 0BD934 7F088E04 84820006 */ lh $v0, 6($a0) -.L7F088E08: -/* 0BD938 7F088E08 04420003 */ bltzl $v0, .L7F088E18 -/* 0BD93C 7F088E0C 24015011 */ li $at, 20497 -/* 0BD940 7F088E10 AFA20084 */ sw $v0, 0x84($sp) -.L7F088E14: -/* 0BD944 7F088E14 24015011 */ li $at, 20497 -.L7F088E18: -/* 0BD948 7F088E18 10A10009 */ beq $a1, $at, .L7F088E40 -/* 0BD94C 7F088E1C 26730001 */ addiu $s3, $s3, 1 -/* 0BD950 7F088E20 84830008 */ lh $v1, 8($a0) -/* 0BD954 7F088E24 04620003 */ bltzl $v1, .L7F088E34 -/* 0BD958 7F088E28 8482000A */ lh $v0, 0xa($a0) -/* 0BD95C 7F088E2C 0060B825 */ move $s7, $v1 -/* 0BD960 7F088E30 8482000A */ lh $v0, 0xa($a0) -.L7F088E34: -/* 0BD964 7F088E34 04400002 */ bltz $v0, .L7F088E40 -/* 0BD968 7F088E38 00000000 */ nop -/* 0BD96C 7F088E3C AFA20080 */ sw $v0, 0x80($sp) -.L7F088E40: -/* 0BD970 7F088E40 1666FFDF */ bne $s3, $a2, .L7F088DC0 -/* 0BD974 7F088E44 2484000C */ addiu $a0, $a0, 0xc -.L7F088E48: -/* 0BD978 7F088E48 8FB80090 */ lw $t8, 0x90($sp) -/* 0BD97C 7F088E4C 00C09825 */ move $s3, $a2 -/* 0BD980 7F088E50 2405000C */ li $a1, 12 -/* 0BD984 7F088E54 00D8082A */ slt $at, $a2, $t8 -/* 0BD988 7F088E58 102000DB */ beqz $at, .L7F0891C8 -/* 0BD98C 7F088E5C 00000000 */ nop -/* 0BD990 7F088E60 00C50019 */ multu $a2, $a1 -/* 0BD994 7F088E64 3C038003 */ lui $v1, %hi(credits_pointer) -/* 0BD998 7F088E68 8C636440 */ lw $v1, %lo(credits_pointer)($v1) -/* 0BD99C 7F088E6C 0000A012 */ mflo $s4 -/* 0BD9A0 7F088E70 00742021 */ addu $a0, $v1, $s4 -/* 0BD9A4 7F088E74 94820000 */ lhu $v0, ($a0) -/* 0BD9A8 7F088E78 14400007 */ bnez $v0, .L7F088E98 -/* 0BD9AC 7F088E7C 00000000 */ nop -/* 0BD9B0 7F088E80 00C50019 */ multu $a2, $a1 -/* 0BD9B4 7F088E84 0000C812 */ mflo $t9 -/* 0BD9B8 7F088E88 00794821 */ addu $t1, $v1, $t9 -/* 0BD9BC 7F088E8C 952B0002 */ lhu $t3, 2($t1) -/* 0BD9C0 7F088E90 116000CD */ beqz $t3, .L7F0891C8 -/* 0BD9C4 7F088E94 00000000 */ nop -.L7F088E98: -/* 0BD9C8 7F088E98 3C1E8004 */ lui $fp, %hi(ptrFontZurichBoldChars) -/* 0BD9CC 7F088E9C 24015011 */ li $at, 20497 -/* 0BD9D0 7F088EA0 1041005E */ beq $v0, $at, .L7F08901C -/* 0BD9D4 7F088EA4 27DE0EB8 */ addiu $fp, %lo(ptrFontZurichBoldChars) # addiu $fp, $fp, 0xeb8 -/* 0BD9D8 7F088EA8 00402025 */ move $a0, $v0 -/* 0BD9DC 7F088EAC 0FC30776 */ jal langGet -/* 0BD9E0 7F088EB0 00138900 */ sll $s1, $s3, 4 -/* 0BD9E4 7F088EB4 3C0A8003 */ lui $t2, %hi(credits_pointer) -/* 0BD9E8 7F088EB8 8D4A6440 */ lw $t2, %lo(credits_pointer)($t2) -/* 0BD9EC 7F088EBC 00409025 */ move $s2, $v0 -/* 0BD9F0 7F088EC0 01542021 */ addu $a0, $t2, $s4 -/* 0BD9F4 7F088EC4 84830004 */ lh $v1, 4($a0) -/* 0BD9F8 7F088EC8 04620003 */ bltzl $v1, .L7F088ED8 -/* 0BD9FC 7F088ECC 84820006 */ lh $v0, 6($a0) -/* 0BDA00 7F088ED0 0060B025 */ move $s6, $v1 -/* 0BDA04 7F088ED4 84820006 */ lh $v0, 6($a0) -.L7F088ED8: -/* 0BDA08 7F088ED8 04400002 */ bltz $v0, .L7F088EE4 -/* 0BDA0C 7F088EDC 00000000 */ nop -/* 0BDA10 7F088EE0 AFA20084 */ sw $v0, 0x84($sp) -.L7F088EE4: -/* 0BDA14 7F088EE4 0C00112B */ jal viGetViewHeight -/* 0BDA18 7F088EE8 00000000 */ nop -/* 0BDA1C 7F088EEC 00028400 */ sll $s0, $v0, 0x10 -/* 0BDA20 7F088EF0 00106403 */ sra $t4, $s0, 0x10 -/* 0BDA24 7F088EF4 0C001149 */ jal viGetViewTop -/* 0BDA28 7F088EF8 01808025 */ move $s0, $t4 -/* 0BDA2C 7F088EFC 8FAE00B4 */ lw $t6, 0xb4($sp) -/* 0BDA30 7F088F00 00516821 */ addu $t5, $v0, $s1 -/* 0BDA34 7F088F04 3C198004 */ lui $t9, %hi(ptrFontZurichBold) -/* 0BDA38 7F088F08 8F390EB4 */ lw $t9, %lo(ptrFontZurichBold)($t9) -/* 0BDA3C 7F088F0C 01AE7823 */ subu $t7, $t5, $t6 -/* 0BDA40 7F088F10 01F0C021 */ addu $t8, $t7, $s0 -/* 0BDA44 7F088F14 AFB800A8 */ sw $t8, 0xa8($sp) -/* 0BDA48 7F088F18 AFA0009C */ sw $zero, 0x9c($sp) -/* 0BDA4C 7F088F1C 27A4009C */ addiu $a0, $sp, 0x9c -/* 0BDA50 7F088F20 27A50098 */ addiu $a1, $sp, 0x98 -/* 0BDA54 7F088F24 02403025 */ move $a2, $s2 -/* 0BDA58 7F088F28 8FC70000 */ lw $a3, ($fp) -/* 0BDA5C 7F088F2C AFA00014 */ sw $zero, 0x14($sp) -/* 0BDA60 7F088F30 AFA00098 */ sw $zero, 0x98($sp) -/* 0BDA64 7F088F34 0FC2BA63 */ jal textMeasure -/* 0BDA68 7F088F38 AFB90010 */ sw $t9, 0x10($sp) -/* 0BDA6C 7F088F3C 8FAA0084 */ lw $t2, 0x84($sp) -/* 0BDA70 7F088F40 8FA900A8 */ lw $t1, 0xa8($sp) -/* 0BDA74 7F088F44 8FAB009C */ lw $t3, 0x9c($sp) -/* 0BDA78 7F088F48 24010001 */ li $at, 1 -/* 0BDA7C 7F088F4C 15410005 */ bne $t2, $at, .L7F088F64 -/* 0BDA80 7F088F50 012B1821 */ addu $v1, $t1, $t3 -/* 0BDA84 7F088F54 8FA80098 */ lw $t0, 0x98($sp) -/* 0BDA88 7F088F58 02C01025 */ move $v0, $s6 -/* 0BDA8C 7F088F5C 1000000C */ b .L7F088F90 -/* 0BDA90 7F088F60 02C82823 */ subu $a1, $s6, $t0 -.L7F088F64: -/* 0BDA94 7F088F64 8FAC0084 */ lw $t4, 0x84($sp) -/* 0BDA98 7F088F68 24010002 */ li $at, 2 -/* 0BDA9C 7F088F6C 8FA80098 */ lw $t0, 0x98($sp) -/* 0BDAA0 7F088F70 15810006 */ bne $t4, $at, .L7F088F8C -/* 0BDAA4 7F088F74 02C02825 */ move $a1, $s6 -/* 0BDAA8 7F088F78 8FA80098 */ lw $t0, 0x98($sp) -/* 0BDAAC 7F088F7C 00086843 */ sra $t5, $t0, 1 -/* 0BDAB0 7F088F80 02CD2823 */ subu $a1, $s6, $t5 -/* 0BDAB4 7F088F84 10000002 */ b .L7F088F90 -/* 0BDAB8 7F088F88 00A81021 */ addu $v0, $a1, $t0 -.L7F088F8C: -/* 0BDABC 7F088F8C 02C81021 */ addu $v0, $s6, $t0 -.L7F088F90: -/* 0BDAC0 7F088F90 8FA600A8 */ lw $a2, 0xa8($sp) -/* 0BDAC4 7F088F94 246E0001 */ addiu $t6, $v1, 1 -/* 0BDAC8 7F088F98 AFAE0010 */ sw $t6, 0x10($sp) -/* 0BDACC 7F088F9C 02A02025 */ move $a0, $s5 -/* 0BDAD0 7F088FA0 24470001 */ addiu $a3, $v0, 1 -/* 0BDAD4 7F088FA4 AFA00014 */ sw $zero, 0x14($sp) -/* 0BDAD8 7F088FA8 AFA500AC */ sw $a1, 0xac($sp) -/* 0BDADC 7F088FAC 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0BDAE0 7F088FB0 24C6FFFF */ addiu $a2, $a2, -1 -/* 0BDAE4 7F088FB4 0C001107 */ jal viGetX -/* 0BDAE8 7F088FB8 0040A825 */ move $s5, $v0 -/* 0BDAEC 7F088FBC 00028400 */ sll $s0, $v0, 0x10 -/* 0BDAF0 7F088FC0 00107C03 */ sra $t7, $s0, 0x10 -/* 0BDAF4 7F088FC4 0C00110B */ jal viGetY -/* 0BDAF8 7F088FC8 01E08025 */ move $s0, $t7 -/* 0BDAFC 7F088FCC 3C198004 */ lui $t9, %hi(ptrFontZurichBold) -/* 0BDB00 7F088FD0 8F390EB4 */ lw $t9, %lo(ptrFontZurichBold)($t9) -/* 0BDB04 7F088FD4 8FD80000 */ lw $t8, ($fp) -/* 0BDB08 7F088FD8 2409FFFF */ li $t1, -1 -/* 0BDB0C 7F088FDC AFA90018 */ sw $t1, 0x18($sp) -/* 0BDB10 7F088FE0 02A02025 */ move $a0, $s5 -/* 0BDB14 7F088FE4 27A500AC */ addiu $a1, $sp, 0xac -/* 0BDB18 7F088FE8 27A600A8 */ addiu $a2, $sp, 0xa8 -/* 0BDB1C 7F088FEC 02403825 */ move $a3, $s2 -/* 0BDB20 7F088FF0 AFB0001C */ sw $s0, 0x1c($sp) -/* 0BDB24 7F088FF4 AFA20020 */ sw $v0, 0x20($sp) -/* 0BDB28 7F088FF8 AFA00024 */ sw $zero, 0x24($sp) -/* 0BDB2C 7F088FFC AFA00028 */ sw $zero, 0x28($sp) -/* 0BDB30 7F089000 AFB90014 */ sw $t9, 0x14($sp) -/* 0BDB34 7F089004 0FC2B6AF */ jal textRender -/* 0BDB38 7F089008 AFB80010 */ sw $t8, 0x10($sp) -/* 0BDB3C 7F08900C 3C0B8003 */ lui $t3, %hi(credits_pointer) -/* 0BDB40 7F089010 8D6B6440 */ lw $t3, %lo(credits_pointer)($t3) -/* 0BDB44 7F089014 0040A825 */ move $s5, $v0 -/* 0BDB48 7F089018 01742021 */ addu $a0, $t3, $s4 -.L7F08901C: -/* 0BDB4C 7F08901C 94850002 */ lhu $a1, 2($a0) -/* 0BDB50 7F089020 24015011 */ li $at, 20497 -/* 0BDB54 7F089024 10A1005A */ beq $a1, $at, .L7F089190 -/* 0BDB58 7F089028 00A02025 */ move $a0, $a1 -/* 0BDB5C 7F08902C 0FC30776 */ jal langGet -/* 0BDB60 7F089030 00138900 */ sll $s1, $s3, 4 -/* 0BDB64 7F089034 3C0A8003 */ lui $t2, %hi(credits_pointer) -/* 0BDB68 7F089038 8D4A6440 */ lw $t2, %lo(credits_pointer)($t2) -/* 0BDB6C 7F08903C 00409025 */ move $s2, $v0 -/* 0BDB70 7F089040 01542021 */ addu $a0, $t2, $s4 -/* 0BDB74 7F089044 84830008 */ lh $v1, 8($a0) -/* 0BDB78 7F089048 04620003 */ bltzl $v1, .L7F089058 -/* 0BDB7C 7F08904C 8482000A */ lh $v0, 0xa($a0) -/* 0BDB80 7F089050 0060B825 */ move $s7, $v1 -/* 0BDB84 7F089054 8482000A */ lh $v0, 0xa($a0) -.L7F089058: -/* 0BDB88 7F089058 04400002 */ bltz $v0, .L7F089064 -/* 0BDB8C 7F08905C 00000000 */ nop -/* 0BDB90 7F089060 AFA20080 */ sw $v0, 0x80($sp) -.L7F089064: -/* 0BDB94 7F089064 0C00112B */ jal viGetViewHeight -/* 0BDB98 7F089068 00000000 */ nop -/* 0BDB9C 7F08906C 00028400 */ sll $s0, $v0, 0x10 -/* 0BDBA0 7F089070 00106403 */ sra $t4, $s0, 0x10 -/* 0BDBA4 7F089074 0C001149 */ jal viGetViewTop -/* 0BDBA8 7F089078 01808025 */ move $s0, $t4 -/* 0BDBAC 7F08907C 8FAE00B4 */ lw $t6, 0xb4($sp) -/* 0BDBB0 7F089080 00516821 */ addu $t5, $v0, $s1 -/* 0BDBB4 7F089084 3C198004 */ lui $t9, %hi(ptrFontZurichBold) -/* 0BDBB8 7F089088 8F390EB4 */ lw $t9, %lo(ptrFontZurichBold)($t9) -/* 0BDBBC 7F08908C 01AE7823 */ subu $t7, $t5, $t6 -/* 0BDBC0 7F089090 01F0C021 */ addu $t8, $t7, $s0 -/* 0BDBC4 7F089094 AFB800A8 */ sw $t8, 0xa8($sp) -/* 0BDBC8 7F089098 AFA0009C */ sw $zero, 0x9c($sp) -/* 0BDBCC 7F08909C 27A4009C */ addiu $a0, $sp, 0x9c -/* 0BDBD0 7F0890A0 27A50098 */ addiu $a1, $sp, 0x98 -/* 0BDBD4 7F0890A4 02403025 */ move $a2, $s2 -/* 0BDBD8 7F0890A8 8FC70000 */ lw $a3, ($fp) -/* 0BDBDC 7F0890AC AFA00014 */ sw $zero, 0x14($sp) -/* 0BDBE0 7F0890B0 AFA00098 */ sw $zero, 0x98($sp) -/* 0BDBE4 7F0890B4 0FC2BA63 */ jal textMeasure -/* 0BDBE8 7F0890B8 AFB90010 */ sw $t9, 0x10($sp) -/* 0BDBEC 7F0890BC 8FAA0080 */ lw $t2, 0x80($sp) -/* 0BDBF0 7F0890C0 8FA900A8 */ lw $t1, 0xa8($sp) -/* 0BDBF4 7F0890C4 8FAB009C */ lw $t3, 0x9c($sp) -/* 0BDBF8 7F0890C8 24010001 */ li $at, 1 -/* 0BDBFC 7F0890CC 15410005 */ bne $t2, $at, .L7F0890E4 -/* 0BDC00 7F0890D0 012B1821 */ addu $v1, $t1, $t3 -/* 0BDC04 7F0890D4 8FA80098 */ lw $t0, 0x98($sp) -/* 0BDC08 7F0890D8 02E01025 */ move $v0, $s7 -/* 0BDC0C 7F0890DC 1000000C */ b .L7F089110 -/* 0BDC10 7F0890E0 02E82823 */ subu $a1, $s7, $t0 -.L7F0890E4: -/* 0BDC14 7F0890E4 8FAC0080 */ lw $t4, 0x80($sp) -/* 0BDC18 7F0890E8 24010002 */ li $at, 2 -/* 0BDC1C 7F0890EC 8FA80098 */ lw $t0, 0x98($sp) -/* 0BDC20 7F0890F0 15810006 */ bne $t4, $at, .L7F08910C -/* 0BDC24 7F0890F4 02E02825 */ move $a1, $s7 -/* 0BDC28 7F0890F8 8FA80098 */ lw $t0, 0x98($sp) -/* 0BDC2C 7F0890FC 00086843 */ sra $t5, $t0, 1 -/* 0BDC30 7F089100 02ED2823 */ subu $a1, $s7, $t5 -/* 0BDC34 7F089104 10000002 */ b .L7F089110 -/* 0BDC38 7F089108 00A81021 */ addu $v0, $a1, $t0 -.L7F08910C: -/* 0BDC3C 7F08910C 02E81021 */ addu $v0, $s7, $t0 -.L7F089110: -/* 0BDC40 7F089110 8FA600A8 */ lw $a2, 0xa8($sp) -/* 0BDC44 7F089114 246E0001 */ addiu $t6, $v1, 1 -/* 0BDC48 7F089118 AFAE0010 */ sw $t6, 0x10($sp) -/* 0BDC4C 7F08911C 02A02025 */ move $a0, $s5 -/* 0BDC50 7F089120 24470001 */ addiu $a3, $v0, 1 -/* 0BDC54 7F089124 AFA00014 */ sw $zero, 0x14($sp) -/* 0BDC58 7F089128 AFA500AC */ sw $a1, 0xac($sp) -/* 0BDC5C 7F08912C 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0BDC60 7F089130 24C6FFFF */ addiu $a2, $a2, -1 -/* 0BDC64 7F089134 0C001107 */ jal viGetX -/* 0BDC68 7F089138 0040A825 */ move $s5, $v0 -/* 0BDC6C 7F08913C 00028400 */ sll $s0, $v0, 0x10 -/* 0BDC70 7F089140 00107C03 */ sra $t7, $s0, 0x10 -/* 0BDC74 7F089144 0C00110B */ jal viGetY -/* 0BDC78 7F089148 01E08025 */ move $s0, $t7 -/* 0BDC7C 7F08914C 3C198004 */ lui $t9, %hi(ptrFontZurichBold) -/* 0BDC80 7F089150 8F390EB4 */ lw $t9, %lo(ptrFontZurichBold)($t9) -/* 0BDC84 7F089154 8FD80000 */ lw $t8, ($fp) -/* 0BDC88 7F089158 2409FFFF */ li $t1, -1 -/* 0BDC8C 7F08915C AFA90018 */ sw $t1, 0x18($sp) -/* 0BDC90 7F089160 02A02025 */ move $a0, $s5 -/* 0BDC94 7F089164 27A500AC */ addiu $a1, $sp, 0xac -/* 0BDC98 7F089168 27A600A8 */ addiu $a2, $sp, 0xa8 -/* 0BDC9C 7F08916C 02403825 */ move $a3, $s2 -/* 0BDCA0 7F089170 AFB0001C */ sw $s0, 0x1c($sp) -/* 0BDCA4 7F089174 AFA20020 */ sw $v0, 0x20($sp) -/* 0BDCA8 7F089178 AFA00024 */ sw $zero, 0x24($sp) -/* 0BDCAC 7F08917C AFA00028 */ sw $zero, 0x28($sp) -/* 0BDCB0 7F089180 AFB90014 */ sw $t9, 0x14($sp) -/* 0BDCB4 7F089184 0FC2B6AF */ jal textRender -/* 0BDCB8 7F089188 AFB80010 */ sw $t8, 0x10($sp) -/* 0BDCBC 7F08918C 0040A825 */ move $s5, $v0 -.L7F089190: -/* 0BDCC0 7F089190 8FAB0090 */ lw $t3, 0x90($sp) -/* 0BDCC4 7F089194 26730001 */ addiu $s3, $s3, 1 -/* 0BDCC8 7F089198 2694000C */ addiu $s4, $s4, 0xc -/* 0BDCCC 7F08919C 026B082A */ slt $at, $s3, $t3 -/* 0BDCD0 7F0891A0 10200009 */ beqz $at, .L7F0891C8 -/* 0BDCD4 7F0891A4 3C0A8003 */ lui $t2, %hi(credits_pointer) -/* 0BDCD8 7F0891A8 8D4A6440 */ lw $t2, %lo(credits_pointer)($t2) -/* 0BDCDC 7F0891AC 01542021 */ addu $a0, $t2, $s4 -/* 0BDCE0 7F0891B0 94820000 */ lhu $v0, ($a0) -/* 0BDCE4 7F0891B4 1440FF38 */ bnez $v0, .L7F088E98 -/* 0BDCE8 7F0891B8 00000000 */ nop -/* 0BDCEC 7F0891BC 948C0002 */ lhu $t4, 2($a0) -/* 0BDCF0 7F0891C0 1580FF35 */ bnez $t4, .L7F088E98 -/* 0BDCF4 7F0891C4 00000000 */ nop -.L7F0891C8: -/* 0BDCF8 7F0891C8 0FC2B3BC */ jal combiner_bayer_lod_perspective -/* 0BDCFC 7F0891CC 02A02025 */ move $a0, $s5 -/* 0BDD00 7F0891D0 0040A825 */ move $s5, $v0 -.L7F0891D4: -/* 0BDD04 7F0891D4 8FBF005C */ lw $ra, 0x5c($sp) -.L7F0891D8: -/* 0BDD08 7F0891D8 02A01025 */ move $v0, $s5 -/* 0BDD0C 7F0891DC 8FB5004C */ lw $s5, 0x4c($sp) -/* 0BDD10 7F0891E0 8FB00038 */ lw $s0, 0x38($sp) -/* 0BDD14 7F0891E4 8FB1003C */ lw $s1, 0x3c($sp) -/* 0BDD18 7F0891E8 8FB20040 */ lw $s2, 0x40($sp) -/* 0BDD1C 7F0891EC 8FB30044 */ lw $s3, 0x44($sp) -/* 0BDD20 7F0891F0 8FB40048 */ lw $s4, 0x48($sp) -/* 0BDD24 7F0891F4 8FB60050 */ lw $s6, 0x50($sp) -/* 0BDD28 7F0891F8 8FB70054 */ lw $s7, 0x54($sp) -/* 0BDD2C 7F0891FC 8FBE0058 */ lw $fp, 0x58($sp) -/* 0BDD30 7F089200 03E00008 */ jr $ra -/* 0BDD34 7F089204 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif +Gfx *maybe_mp_interface(Gfx *gdl) +{ + s32 ulx; + s32 uly; + s32 lrx; + s32 lry; + s32 doblood; + s32 scenario; + s32 cur; + s32 count; + s32 i; + s32 total; + if (g_CurrentPlayer->cameramode == 1) + { + bondviewIntroCameraTextTick(); + gdl = hudmsgBottomRender(gdl); + bondviewUpperTextWindowTimerTick(); + gdl = sub_GAME_7F08AAE8(gdl); + gdl = countdownTimerRender(gdl); + gdl = currentPlayerDrawFade(gdl); + return bondviewRenderCredits(gdl); + } + gunUpdateAndFireBothHands(); + gunRenderCasings(&gdl); + gunRenderFirstPersonGunModels(&gdl); + gdl = bondviewRenderWatch(gdl); -#ifdef NONMATCHING -Gfx * maybe_mp_interface(Gfx *arg0) { + if (g_CurrentPlayer->mpmenuon != 0) + { + ulx = viGetViewLeft(); + uly = viGetViewTop(); + lrx = viGetViewLeft() + viGetViewWidth(); + lry = viGetViewTop() + viGetViewHeight(); + gdl = microcode_constructor(gdl); + gdl = microcode_constructor_related_to_menus(gdl, ulx, uly, lrx, lry, 160); + } + if (bondviewGetIfCurrentPlayerHealthShowTime() && + (g_CurrentPlayer->watch_animation_state == 0)) + { + gdl = bondviewRenderGaugeBars(gdl); + } + else if (mpwatchShouldDisplayGauges()) + { + gdl = bondviewRenderGaugeBars(gdl); + if (g_CurrentPlayer->healthdisplaytime > 0) + { + g_CurrentPlayer->healthdisplaytime -= g_ClockTimer; + } + if (g_CurrentPlayer->healthdisplaytime < 0) + { + g_CurrentPlayer->healthdisplaytime = 0; + } + } + + if (getPlayerCount() == 1) + { + display_objective_status_text_on_status_change(); + } + + if (g_CurrentPlayer->bonddead != 0) + { + if (g_CurrentPlayer->deathanimfinished == 0) + { + doblood = 0; + if (g_CurrentPlayer->bonddead == 1) + { + doblood = 1; + g_CurrentPlayer->bonddead = 2; + } + if (doblood) + { + die_blood_image_routine(0); + if (getPlayerCount() == 1) + { + // This unusual comma-expression syntax is required for a byte match. + set_missionstate((musicStopSlot(-1), 0)); + musicTrack1ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack1Fade = 0; + musicTrack2ApplySeqpVol(0); + g_musicXTrack2Fade = 0; + musicTrack1Play(27); + } + else + { + set_missionstate(6); + } + } + else + { + if (g_CurrentPlayer->redbloodfinished) + { + currentPlayerSetFadeColour(150, 0, 0, 0.7058824f); + } + else + { + if (g_ClockTimer > 0) + { + doblood = 1; + } + else + { + doblood = 2; + } + if (die_blood_image_routine(doblood)) + { + g_CurrentPlayer->redbloodfinished = TRUE; + } + gdl = gameplayBloodOverlayDL(gdl); + } + } + } + if (modelGetAnimFrame(&g_CurrentPlayer->model) >= + modelGetAnimEndFrame(&g_CurrentPlayer->model)) + { + if (g_CurrentPlayer->redbloodfinished) + { + if (!g_CurrentPlayer->deathanimfinished) + { + g_CurrentPlayer->deathanimfinished = TRUE; + currentPlayerAdjustFade(60.0f, 0, 0, 0, 1.0f); + currentPlayerStartChrFade(120.0f, 0.0f); + } + if (currentPlayerIsFadeComplete()) + { + if (getPlayerCount() == 1) + { + bondviewSetCameraMode(CAMERAMODE_DEATH_CAM_SP); + } + else + { + scenario = get_scenario(); + cur = get_cur_playernum(); + count = getPlayerCount(); + total = 0; + for (i = 0; i < count; i++) + { + total += g_playerPlayerData[i].kill_counts[cur]; + } + if ((scenario != SCENARIO_YOLT) || (total < 2)) + { + if (joyGetButtons(get_cur_playernum(), 0xB000)) + { + mp_respawn_handler(); + } + } + } + } + } + } + } + + bondviewIntroCameraTextTick(); + gdl = hudmsgBottomRender(gdl); + bondviewUpperTextWindowTimerTick(); + gdl = sub_GAME_7F08AAE8(gdl); + gunDrawSight(&gdl); + gdl = generate_ammo_total_microcode(gdl); + gdl = countdownTimerRender(gdl); + gdl = display_red_blue_on_radar(gdl); + return currentPlayerDrawFade(gdl); } -#else -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel maybe_mp_interface -/* 0BDD38 7F089208 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 0BDD3C 7F08920C 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0BDD40 7F089210 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0BDD44 7F089214 AFBF001C */ sw $ra, 0x1c($sp) -/* 0BDD48 7F089218 AFA40058 */ sw $a0, 0x58($sp) -/* 0BDD4C 7F08921C 8DCF0000 */ lw $t7, ($t6) -/* 0BDD50 7F089220 24010001 */ li $at, 1 -/* 0BDD54 7F089224 15E10014 */ bne $t7, $at, .L7F089278 -/* 0BDD58 7F089228 00000000 */ nop -/* 0BDD5C 7F08922C 0FC22939 */ jal bondviewIntroCameraTextTick -/* 0BDD60 7F089230 00000000 */ nop -/* 0BDD64 7F089234 0FC2297F */ jal sub_GAME_7F08A5FC -/* 0BDD68 7F089238 8FA40058 */ lw $a0, 0x58($sp) -/* 0BDD6C 7F08923C 0FC22A7E */ jal bondviewUpperTextWindowTimerTick -/* 0BDD70 7F089240 AFA20058 */ sw $v0, 0x58($sp) -/* 0BDD74 7F089244 0FC22ABA */ jal sub_GAME_7F08AAE8 -/* 0BDD78 7F089248 8FA40058 */ lw $a0, 0x58($sp) -/* 0BDD7C 7F08924C AFA20058 */ sw $v0, 0x58($sp) -/* 0BDD80 7F089250 0FC15884 */ jal countdownTimerRender -/* 0BDD84 7F089254 00402025 */ move $a0, $v0 -/* 0BDD88 7F089258 AFA20058 */ sw $v0, 0x58($sp) -/* 0BDD8C 7F08925C 0FC20138 */ jal currentPlayerDrawFade -/* 0BDD90 7F089260 00402025 */ move $a0, $v0 -/* 0BDD94 7F089264 AFA20058 */ sw $v0, 0x58($sp) -/* 0BDD98 7F089268 0FC22336 */ jal sub_GAME_7F088CD8 -/* 0BDD9C 7F08926C 00402025 */ move $a0, $v0 -/* 0BDDA0 7F089270 10000110 */ b .L7F0896B4 -/* 0BDDA4 7F089274 8FBF001C */ lw $ra, 0x1c($sp) -.L7F089278: -/* 0BDDA8 7F089278 0FC18648 */ jal bondwalkFireBothHands -/* 0BDDAC 7F08927C 00000000 */ nop -/* 0BDDB0 7F089280 0FC1A423 */ jal sub_GAME_7F06908C -/* 0BDDB4 7F089284 27A40058 */ addiu $a0, $sp, 0x58 -/* 0BDDB8 7F089288 0FC18AF9 */ jal sub_GAME_7F062BE4 -/* 0BDDBC 7F08928C 27A40058 */ addiu $a0, $sp, 0x58 -/* 0BDDC0 7F089290 0FC21F9D */ jal sub_GAME_7F087E74 -/* 0BDDC4 7F089294 8FA40058 */ lw $a0, 0x58($sp) -/* 0BDDC8 7F089298 3C188008 */ lui $t8, %hi(g_CurrentPlayer) -/* 0BDDCC 7F08929C 8F18A0B0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0BDDD0 7F0892A0 AFA20058 */ sw $v0, 0x58($sp) -/* 0BDDD4 7F0892A4 8F1929C4 */ lw $t9, 0x29c4($t8) -/* 0BDDD8 7F0892A8 1320001F */ beqz $t9, .L7F089328 -/* 0BDDDC 7F0892AC 00000000 */ nop -/* 0BDDE0 7F0892B0 0C001145 */ jal viGetViewLeft -/* 0BDDE4 7F0892B4 00000000 */ nop -/* 0BDDE8 7F0892B8 0C001149 */ jal viGetViewTop -/* 0BDDEC 7F0892BC AFA20054 */ sw $v0, 0x54($sp) -/* 0BDDF0 7F0892C0 0C001145 */ jal viGetViewLeft -/* 0BDDF4 7F0892C4 AFA20050 */ sw $v0, 0x50($sp) -/* 0BDDF8 7F0892C8 0C001127 */ jal viGetViewWidth -/* 0BDDFC 7F0892CC A7A2002E */ sh $v0, 0x2e($sp) -/* 0BDE00 7F0892D0 87A8002E */ lh $t0, 0x2e($sp) -/* 0BDE04 7F0892D4 00484821 */ addu $t1, $v0, $t0 -/* 0BDE08 7F0892D8 0C001149 */ jal viGetViewTop -/* 0BDE0C 7F0892DC AFA9004C */ sw $t1, 0x4c($sp) -/* 0BDE10 7F0892E0 0C00112B */ jal viGetViewHeight -/* 0BDE14 7F0892E4 A7A2002E */ sh $v0, 0x2e($sp) -/* 0BDE18 7F0892E8 87AA002E */ lh $t2, 0x2e($sp) -/* 0BDE1C 7F0892EC 8FA40058 */ lw $a0, 0x58($sp) -/* 0BDE20 7F0892F0 004A5821 */ addu $t3, $v0, $t2 -/* 0BDE24 7F0892F4 0FC2B366 */ jal microcode_constructor -/* 0BDE28 7F0892F8 AFAB0048 */ sw $t3, 0x48($sp) -/* 0BDE2C 7F0892FC 8FAC0048 */ lw $t4, 0x48($sp) -/* 0BDE30 7F089300 240D00A0 */ li $t5, 160 -/* 0BDE34 7F089304 AFA20058 */ sw $v0, 0x58($sp) -/* 0BDE38 7F089308 AFAD0014 */ sw $t5, 0x14($sp) -/* 0BDE3C 7F08930C 00402025 */ move $a0, $v0 -/* 0BDE40 7F089310 8FA50054 */ lw $a1, 0x54($sp) -/* 0BDE44 7F089314 8FA60050 */ lw $a2, 0x50($sp) -/* 0BDE48 7F089318 8FA7004C */ lw $a3, 0x4c($sp) -/* 0BDE4C 7F08931C 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0BDE50 7F089320 AFAC0010 */ sw $t4, 0x10($sp) -/* 0BDE54 7F089324 AFA20058 */ sw $v0, 0x58($sp) -.L7F089328: -/* 0BDE58 7F089328 0FC227AF */ jal bondviewGetIfCurrentPlayerHealthShowTime -/* 0BDE5C 7F08932C 00000000 */ nop -/* 0BDE60 7F089330 10400009 */ beqz $v0, .L7F089358 -/* 0BDE64 7F089334 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 0BDE68 7F089338 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0BDE6C 7F08933C 8DCF01C8 */ lw $t7, 0x1c8($t6) -/* 0BDE70 7F089340 15E00005 */ bnez $t7, .L7F089358 -/* 0BDE74 7F089344 00000000 */ nop -/* 0BDE78 7F089348 0FC22186 */ jal sub_GAME_7F088618 -/* 0BDE7C 7F08934C 8FA40058 */ lw $a0, 0x58($sp) -/* 0BDE80 7F089350 10000017 */ b .L7F0893B0 -/* 0BDE84 7F089354 AFA20058 */ sw $v0, 0x58($sp) -.L7F089358: -/* 0BDE88 7F089358 0FC31812 */ jal sub_GAME_7F0C6048 -/* 0BDE8C 7F08935C 00000000 */ nop -/* 0BDE90 7F089360 10400013 */ beqz $v0, .L7F0893B0 -/* 0BDE94 7F089364 00000000 */ nop -/* 0BDE98 7F089368 0FC22186 */ jal sub_GAME_7F088618 -/* 0BDE9C 7F08936C 8FA40058 */ lw $a0, 0x58($sp) -/* 0BDEA0 7F089370 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0BDEA4 7F089374 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0BDEA8 7F089378 AFA20058 */ sw $v0, 0x58($sp) -/* 0BDEAC 7F08937C 3C188005 */ lui $t8, %hi(g_ClockTimer) -/* 0BDEB0 7F089380 8C642A00 */ lw $a0, 0x2a00($v1) -/* 0BDEB4 7F089384 18800007 */ blez $a0, .L7F0893A4 -/* 0BDEB8 7F089388 00000000 */ nop -/* 0BDEBC 7F08938C 8F188374 */ lw $t8, %lo(g_ClockTimer)($t8) -/* 0BDEC0 7F089390 0098C823 */ subu $t9, $a0, $t8 -/* 0BDEC4 7F089394 AC792A00 */ sw $t9, 0x2a00($v1) -/* 0BDEC8 7F089398 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0BDECC 7F08939C 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0BDED0 7F0893A0 8C642A00 */ lw $a0, 0x2a00($v1) -.L7F0893A4: -/* 0BDED4 7F0893A4 04810002 */ bgez $a0, .L7F0893B0 -/* 0BDED8 7F0893A8 00000000 */ nop -/* 0BDEDC 7F0893AC AC602A00 */ sw $zero, 0x2a00($v1) -.L7F0893B0: -/* 0BDEE0 7F0893B0 0FC26919 */ jal getPlayerCount -/* 0BDEE4 7F0893B4 00000000 */ nop -/* 0BDEE8 7F0893B8 24010001 */ li $at, 1 -/* 0BDEEC 7F0893BC 14410003 */ bne $v0, $at, .L7F0893CC -/* 0BDEF0 7F0893C0 00000000 */ nop -/* 0BDEF4 7F0893C4 0FC15D50 */ jal display_objective_status_text_on_status_change -/* 0BDEF8 7F0893C8 00000000 */ nop -.L7F0893CC: -/* 0BDEFC 7F0893CC 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0BDF00 7F0893D0 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0BDF04 7F0893D4 8C6200D8 */ lw $v0, 0xd8($v1) -/* 0BDF08 7F0893D8 1040009F */ beqz $v0, .L7F089658 -/* 0BDF0C 7F0893DC 00000000 */ nop -/* 0BDF10 7F0893E0 8C680428 */ lw $t0, 0x428($v1) -/* 0BDF14 7F0893E4 24010001 */ li $at, 1 -/* 0BDF18 7F0893E8 15000045 */ bnez $t0, .L7F089500 -/* 0BDF1C 7F0893EC 00000000 */ nop -/* 0BDF20 7F0893F0 14410004 */ bne $v0, $at, .L7F089404 -/* 0BDF24 7F0893F4 00002025 */ move $a0, $zero -/* 0BDF28 7F0893F8 24090002 */ li $t1, 2 -/* 0BDF2C 7F0893FC 24040001 */ li $a0, 1 -/* 0BDF30 7F089400 AC6900D8 */ sw $t1, 0xd8($v1) -.L7F089404: -/* 0BDF34 7F089404 1080001F */ beqz $a0, .L7F089484 -/* 0BDF38 7F089408 3C0A8008 */ lui $t2, %hi(g_CurrentPlayer) -/* 0BDF3C 7F08940C 0FC070A1 */ jal die_blood_image_routine -/* 0BDF40 7F089410 00002025 */ move $a0, $zero -/* 0BDF44 7F089414 0FC26919 */ jal getPlayerCount -/* 0BDF48 7F089418 00000000 */ nop -/* 0BDF4C 7F08941C 24010001 */ li $at, 1 -/* 0BDF50 7F089420 14410013 */ bne $v0, $at, .L7F089470 -/* 0BDF54 7F089424 00000000 */ nop -/* 0BDF58 7F089428 0FC30556 */ jal musicStopSlot -/* 0BDF5C 7F08942C 2404FFFF */ li $a0, -1 -/* 0BDF60 7F089430 0FC3030F */ jal set_missionstate -/* 0BDF64 7F089434 00002025 */ move $a0, $zero -/* 0BDF68 7F089438 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0BDF6C 7F08943C 00000000 */ nop -/* 0BDF70 7F089440 0C001C0F */ jal musicTrack1ApplySeqpVol -/* 0BDF74 7F089444 3044FFFF */ andi $a0, $v0, 0xffff -/* 0BDF78 7F089448 3C018002 */ lui $at, %hi(g_musicXTrack1Fade) -/* 0BDF7C 7F08944C AC20434C */ sw $zero, %lo(g_musicXTrack1Fade)($at) -/* 0BDF80 7F089450 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0BDF84 7F089454 00002025 */ move $a0, $zero -/* 0BDF88 7F089458 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0BDF8C 7F08945C AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0BDF90 7F089460 0C001B9F */ jal musicTrack1Play -/* 0BDF94 7F089464 2404001B */ li $a0, 27 -/* 0BDF98 7F089468 10000003 */ b .L7F089478 -/* 0BDF9C 7F08946C 00000000 */ nop -.L7F089470: -/* 0BDFA0 7F089470 0FC3030F */ jal set_missionstate -/* 0BDFA4 7F089474 24040006 */ li $a0, 6 -.L7F089478: -/* 0BDFA8 7F089478 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0BDFAC 7F08947C 10000020 */ b .L7F089500 -/* 0BDFB0 7F089480 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -.L7F089484: -/* 0BDFB4 7F089484 8D4AA0B0 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 0BDFB8 7F089488 24040096 */ li $a0, 150 -/* 0BDFBC 7F08948C 00002825 */ move $a1, $zero -/* 0BDFC0 7F089490 8D4B0424 */ lw $t3, 0x424($t2) -/* 0BDFC4 7F089494 00003025 */ move $a2, $zero -/* 0BDFC8 7F089498 3C073F34 */ lui $a3, (0x3F34B4B5 >> 16) # lui $a3, 0x3f34 -/* 0BDFCC 7F08949C 11600006 */ beqz $t3, .L7F0894B8 -/* 0BDFD0 7F0894A0 3C0C8005 */ lui $t4, %hi(g_ClockTimer) -/* 0BDFD4 7F0894A4 0FC201EC */ jal currentPlayerSetFadeColour -/* 0BDFD8 7F0894A8 34E7B4B5 */ ori $a3, (0x3F34B4B5 & 0xFFFF) # ori $a3, $a3, 0xb4b5 -/* 0BDFDC 7F0894AC 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0BDFE0 7F0894B0 10000013 */ b .L7F089500 -/* 0BDFE4 7F0894B4 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -.L7F0894B8: -/* 0BDFE8 7F0894B8 8D8C8374 */ lw $t4, %lo(g_ClockTimer)($t4) -/* 0BDFEC 7F0894BC 24040002 */ li $a0, 2 -/* 0BDFF0 7F0894C0 19800003 */ blez $t4, .L7F0894D0 -/* 0BDFF4 7F0894C4 00000000 */ nop -/* 0BDFF8 7F0894C8 10000001 */ b .L7F0894D0 -/* 0BDFFC 7F0894CC 24040001 */ li $a0, 1 -.L7F0894D0: -/* 0BE000 7F0894D0 0FC070A1 */ jal die_blood_image_routine -/* 0BE004 7F0894D4 00000000 */ nop -/* 0BE008 7F0894D8 10400004 */ beqz $v0, .L7F0894EC -/* 0BE00C 7F0894DC 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 0BE010 7F0894E0 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0BE014 7F0894E4 240D0001 */ li $t5, 1 -/* 0BE018 7F0894E8 ADCD0424 */ sw $t5, 0x424($t6) -.L7F0894EC: -/* 0BE01C 7F0894EC 0FC0719C */ jal gameplayBloodOverlayDL -/* 0BE020 7F0894F0 8FA40058 */ lw $a0, 0x58($sp) -/* 0BE024 7F0894F4 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0BE028 7F0894F8 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0BE02C 7F0894FC AFA20058 */ sw $v0, 0x58($sp) -.L7F089500: -/* 0BE030 7F089500 0FC1BD6F */ jal objecthandlerGetModelField28 -/* 0BE034 7F089504 24640598 */ addiu $a0, $v1, 0x598 -/* 0BE038 7F089508 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 0BE03C 7F08950C 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BE040 7F089510 E7A00024 */ swc1 $f0, 0x24($sp) -/* 0BE044 7F089514 0FC1BD71 */ jal sub_GAME_7F06F5C4 -/* 0BE048 7F089518 24840598 */ addiu $a0, $a0, 0x598 -/* 0BE04C 7F08951C C7A40024 */ lwc1 $f4, 0x24($sp) -/* 0BE050 7F089520 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0BE054 7F089524 4604003E */ c.le.s $f0, $f4 -/* 0BE058 7F089528 00000000 */ nop -/* 0BE05C 7F08952C 4500004A */ bc1f .L7F089658 -/* 0BE060 7F089530 00000000 */ nop -/* 0BE064 7F089534 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0BE068 7F089538 8C6F0424 */ lw $t7, 0x424($v1) -/* 0BE06C 7F08953C 11E00046 */ beqz $t7, .L7F089658 -/* 0BE070 7F089540 00000000 */ nop -/* 0BE074 7F089544 8C780428 */ lw $t8, 0x428($v1) -/* 0BE078 7F089548 24190001 */ li $t9, 1 -/* 0BE07C 7F08954C 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0BE080 7F089550 1700000E */ bnez $t8, .L7F08958C -/* 0BE084 7F089554 00002825 */ move $a1, $zero -/* 0BE088 7F089558 44816000 */ mtc1 $at, $f12 -/* 0BE08C 7F08955C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BE090 7F089560 44813000 */ mtc1 $at, $f6 -/* 0BE094 7F089564 AC790428 */ sw $t9, 0x428($v1) -/* 0BE098 7F089568 00003025 */ move $a2, $zero -/* 0BE09C 7F08956C 00003825 */ move $a3, $zero -/* 0BE0A0 7F089570 0FC201F8 */ jal currentPlayerAdjustFade -/* 0BE0A4 7F089574 E7A60010 */ swc1 $f6, 0x10($sp) -/* 0BE0A8 7F089578 3C0142F0 */ li $at, 0x42F00000 # 120.000000 -/* 0BE0AC 7F08957C 44816000 */ mtc1 $at, $f12 -/* 0BE0B0 7F089580 44807000 */ mtc1 $zero, $f14 -/* 0BE0B4 7F089584 0FC20284 */ jal currentPlayerStartChrFade -/* 0BE0B8 7F089588 00000000 */ nop -.L7F08958C: -/* 0BE0BC 7F08958C 0FC20223 */ jal currentPlayerIsFadeComplete -/* 0BE0C0 7F089590 00000000 */ nop -/* 0BE0C4 7F089594 10400030 */ beqz $v0, .L7F089658 -/* 0BE0C8 7F089598 00000000 */ nop -/* 0BE0CC 7F08959C 0FC26919 */ jal getPlayerCount -/* 0BE0D0 7F0895A0 00000000 */ nop -/* 0BE0D4 7F0895A4 24010001 */ li $at, 1 -/* 0BE0D8 7F0895A8 14410005 */ bne $v0, $at, .L7F0895C0 -/* 0BE0DC 7F0895AC 00000000 */ nop -/* 0BE0E0 7F0895B0 0FC1EA6E */ jal bondviewSetCameraMode -/* 0BE0E4 7F0895B4 24040005 */ li $a0, 5 -/* 0BE0E8 7F0895B8 10000027 */ b .L7F089658 -/* 0BE0EC 7F0895BC 00000000 */ nop -.L7F0895C0: -/* 0BE0F0 7F0895C0 0FC051D6 */ jal get_scenario -/* 0BE0F4 7F0895C4 00000000 */ nop -/* 0BE0F8 7F0895C8 0FC26C54 */ jal get_cur_playernum -/* 0BE0FC 7F0895CC AFA20040 */ sw $v0, 0x40($sp) -/* 0BE100 7F0895D0 0FC26919 */ jal getPlayerCount -/* 0BE104 7F0895D4 AFA2003C */ sw $v0, 0x3c($sp) -/* 0BE108 7F0895D8 00402825 */ move $a1, $v0 -/* 0BE10C 7F0895DC 00002025 */ move $a0, $zero -/* 0BE110 7F0895E0 1840000C */ blez $v0, .L7F089614 -/* 0BE114 7F0895E4 00001825 */ move $v1, $zero -/* 0BE118 7F0895E8 8FA8003C */ lw $t0, 0x3c($sp) -/* 0BE11C 7F0895EC 3C0A8008 */ lui $t2, %hi(g_playerPlayerData) -/* 0BE120 7F0895F0 254A9EF0 */ addiu $t2, %lo(g_playerPlayerData) # addiu $t2, $t2, -0x6110 -/* 0BE124 7F0895F4 00084880 */ sll $t1, $t0, 2 -/* 0BE128 7F0895F8 012A1021 */ addu $v0, $t1, $t2 -.L7F0895FC: -/* 0BE12C 7F0895FC 8C4B0024 */ lw $t3, 0x24($v0) -/* 0BE130 7F089600 24630001 */ addiu $v1, $v1, 1 -/* 0BE134 7F089604 0065082A */ slt $at, $v1, $a1 -/* 0BE138 7F089608 24420070 */ addiu $v0, $v0, 0x70 -/* 0BE13C 7F08960C 1420FFFB */ bnez $at, .L7F0895FC -/* 0BE140 7F089610 008B2021 */ addu $a0, $a0, $t3 -.L7F089614: -/* 0BE144 7F089614 8FAC0040 */ lw $t4, 0x40($sp) -/* 0BE148 7F089618 24010001 */ li $at, 1 -/* 0BE14C 7F08961C 15810003 */ bne $t4, $at, .L7F08962C -/* 0BE150 7F089620 28810002 */ slti $at, $a0, 2 -/* 0BE154 7F089624 1020000C */ beqz $at, .L7F089658 -/* 0BE158 7F089628 00000000 */ nop -.L7F08962C: -/* 0BE15C 7F08962C 0FC26C54 */ jal get_cur_playernum -/* 0BE160 7F089630 00000000 */ nop -/* 0BE164 7F089634 00022600 */ sll $a0, $v0, 0x18 -/* 0BE168 7F089638 00046E03 */ sra $t5, $a0, 0x18 -/* 0BE16C 7F08963C 01A02025 */ move $a0, $t5 -/* 0BE170 7F089640 0C0030C3 */ jal joyGetButtons -/* 0BE174 7F089644 3405B000 */ li $a1, 45056 -/* 0BE178 7F089648 10400003 */ beqz $v0, .L7F089658 -/* 0BE17C 7F08964C 00000000 */ nop -/* 0BE180 7F089650 0FC2223A */ jal mp_respawn_handler -/* 0BE184 7F089654 00000000 */ nop -.L7F089658: -/* 0BE188 7F089658 0FC22939 */ jal bondviewIntroCameraTextTick -/* 0BE18C 7F08965C 00000000 */ nop -/* 0BE190 7F089660 0FC2297F */ jal sub_GAME_7F08A5FC -/* 0BE194 7F089664 8FA40058 */ lw $a0, 0x58($sp) -/* 0BE198 7F089668 0FC22A7E */ jal bondviewUpperTextWindowTimerTick -/* 0BE19C 7F08966C AFA20058 */ sw $v0, 0x58($sp) -/* 0BE1A0 7F089670 0FC22ABA */ jal sub_GAME_7F08AAE8 -/* 0BE1A4 7F089674 8FA40058 */ lw $a0, 0x58($sp) -/* 0BE1A8 7F089678 AFA20058 */ sw $v0, 0x58($sp) -/* 0BE1AC 7F08967C 0FC1A979 */ jal gunDrawSight -/* 0BE1B0 7F089680 27A40058 */ addiu $a0, $sp, 0x58 -/* 0BE1B4 7F089684 0FC1A73D */ jal generate_ammo_total_microcode -/* 0BE1B8 7F089688 8FA40058 */ lw $a0, 0x58($sp) -/* 0BE1BC 7F08968C AFA20058 */ sw $v0, 0x58($sp) -/* 0BE1C0 7F089690 0FC15884 */ jal countdownTimerRender -/* 0BE1C4 7F089694 00402025 */ move $a0, $v0 -/* 0BE1C8 7F089698 AFA20058 */ sw $v0, 0x58($sp) -/* 0BE1CC 7F08969C 0FC31824 */ jal display_red_blue_on_radar -/* 0BE1D0 7F0896A0 00402025 */ move $a0, $v0 -/* 0BE1D4 7F0896A4 AFA20058 */ sw $v0, 0x58($sp) -/* 0BE1D8 7F0896A8 0FC20138 */ jal currentPlayerDrawFade -/* 0BE1DC 7F0896AC 00402025 */ move $a0, $v0 -/* 0BE1E0 7F0896B0 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0896B4: -/* 0BE1E4 7F0896B4 27BD0058 */ addiu $sp, $sp, 0x58 -/* 0BE1E8 7F0896B8 03E00008 */ jr $ra -/* 0BE1EC 7F0896BC 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel maybe_mp_interface -/* 0BBD60 7F089370 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 0BBD64 7F089374 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0BBD68 7F089378 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0BBD6C 7F08937C AFBF001C */ sw $ra, 0x1c($sp) -/* 0BBD70 7F089380 AFA40058 */ sw $a0, 0x58($sp) -/* 0BBD74 7F089384 8DCF0000 */ lw $t7, ($t6) -/* 0BBD78 7F089388 24010001 */ li $at, 1 -/* 0BBD7C 7F08938C 15E10014 */ bne $t7, $at, .L7F0893E0 -/* 0BBD80 7F089390 00000000 */ nop -/* 0BBD84 7F089394 0FC229C0 */ jal bondviewIntroCameraTextTick -/* 0BBD88 7F089398 00000000 */ nop -/* 0BBD8C 7F08939C 0FC22A06 */ jal sub_GAME_7F08A5FC -/* 0BBD90 7F0893A0 8FA40058 */ lw $a0, 0x58($sp) -/* 0BBD94 7F0893A4 0FC22B10 */ jal bondviewUpperTextWindowTimerTick -/* 0BBD98 7F0893A8 AFA20058 */ sw $v0, 0x58($sp) -/* 0BBD9C 7F0893AC 0FC22B4C */ jal sub_GAME_7F08AAE8 -/* 0BBDA0 7F0893B0 8FA40058 */ lw $a0, 0x58($sp) -/* 0BBDA4 7F0893B4 AFA20058 */ sw $v0, 0x58($sp) -/* 0BBDA8 7F0893B8 0FC1593C */ jal countdownTimerRender -/* 0BBDAC 7F0893BC 00402025 */ move $a0, $v0 -/* 0BBDB0 7F0893C0 AFA20058 */ sw $v0, 0x58($sp) -/* 0BBDB4 7F0893C4 0FC20161 */ jal currentPlayerDrawFade -/* 0BBDB8 7F0893C8 00402025 */ move $a0, $v0 -/* 0BBDBC 7F0893CC AFA20058 */ sw $v0, 0x58($sp) -/* 0BBDC0 7F0893D0 0FC22390 */ jal sub_GAME_7F088CD8 -/* 0BBDC4 7F0893D4 00402025 */ move $a0, $v0 -/* 0BBDC8 7F0893D8 10000110 */ b .L7F08981C -/* 0BBDCC 7F0893DC 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0893E0: -/* 0BBDD0 7F0893E0 0FC18779 */ jal bondwalkFireBothHands -/* 0BBDD4 7F0893E4 00000000 */ nop -/* 0BBDD8 7F0893E8 0FC1A608 */ jal sub_GAME_7F06908C -/* 0BBDDC 7F0893EC 27A40058 */ addiu $a0, $sp, 0x58 -/* 0BBDE0 7F0893F0 0FC18C2A */ jal sub_GAME_7F062BE4 -/* 0BBDE4 7F0893F4 27A40058 */ addiu $a0, $sp, 0x58 -/* 0BBDE8 7F0893F8 0FC21FF5 */ jal sub_GAME_7F087E74 -/* 0BBDEC 7F0893FC 8FA40058 */ lw $a0, 0x58($sp) -/* 0BBDF0 7F089400 3C188007 */ lui $t8, %hi(g_CurrentPlayer) # $t8, 0x8007 -/* 0BBDF4 7F089404 8F188BC0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0BBDF8 7F089408 AFA20058 */ sw $v0, 0x58($sp) -/* 0BBDFC 7F08940C 8F1929BC */ lw $t9, 0x29bc($t8) -/* 0BBE00 7F089410 1320001F */ beqz $t9, .L7F089490 -/* 0BBE04 7F089414 00000000 */ nop -/* 0BBE08 7F089418 0C000FD9 */ jal viGetViewLeft -/* 0BBE0C 7F08941C 00000000 */ nop -/* 0BBE10 7F089420 0C000FDD */ jal viGetViewTop -/* 0BBE14 7F089424 AFA20054 */ sw $v0, 0x54($sp) -/* 0BBE18 7F089428 0C000FD9 */ jal viGetViewLeft -/* 0BBE1C 7F08942C AFA20050 */ sw $v0, 0x50($sp) -/* 0BBE20 7F089430 0C000FBB */ jal viGetViewWidth -/* 0BBE24 7F089434 A7A2002E */ sh $v0, 0x2e($sp) -/* 0BBE28 7F089438 87A8002E */ lh $t0, 0x2e($sp) -/* 0BBE2C 7F08943C 00484821 */ addu $t1, $v0, $t0 -/* 0BBE30 7F089440 0C000FDD */ jal viGetViewTop -/* 0BBE34 7F089444 AFA9004C */ sw $t1, 0x4c($sp) -/* 0BBE38 7F089448 0C000FBF */ jal viGetViewHeight -/* 0BBE3C 7F08944C A7A2002E */ sh $v0, 0x2e($sp) -/* 0BBE40 7F089450 87AA002E */ lh $t2, 0x2e($sp) -/* 0BBE44 7F089454 8FA40058 */ lw $a0, 0x58($sp) -/* 0BBE48 7F089458 004A5821 */ addu $t3, $v0, $t2 -/* 0BBE4C 7F08945C 0FC2B016 */ jal microcode_constructor -/* 0BBE50 7F089460 AFAB0048 */ sw $t3, 0x48($sp) -/* 0BBE54 7F089464 8FAC0048 */ lw $t4, 0x48($sp) -/* 0BBE58 7F089468 240D00A0 */ li $t5, 160 -/* 0BBE5C 7F08946C AFA20058 */ sw $v0, 0x58($sp) -/* 0BBE60 7F089470 AFAD0014 */ sw $t5, 0x14($sp) -/* 0BBE64 7F089474 00402025 */ move $a0, $v0 -/* 0BBE68 7F089478 8FA50054 */ lw $a1, 0x54($sp) -/* 0BBE6C 7F08947C 8FA60050 */ lw $a2, 0x50($sp) -/* 0BBE70 7F089480 8FA7004C */ lw $a3, 0x4c($sp) -/* 0BBE74 7F089484 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 0BBE78 7F089488 AFAC0010 */ sw $t4, 0x10($sp) -/* 0BBE7C 7F08948C AFA20058 */ sw $v0, 0x58($sp) -.L7F089490: -/* 0BBE80 7F089490 0FC2281C */ jal bondviewGetIfCurrentPlayerHealthShowTime -/* 0BBE84 7F089494 00000000 */ nop -/* 0BBE88 7F089498 10400009 */ beqz $v0, .L7F0894C0 -/* 0BBE8C 7F08949C 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 0BBE90 7F0894A0 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0BBE94 7F0894A4 8DCF01C8 */ lw $t7, 0x1c8($t6) -/* 0BBE98 7F0894A8 15E00005 */ bnez $t7, .L7F0894C0 -/* 0BBE9C 7F0894AC 00000000 */ nop -/* 0BBEA0 7F0894B0 0FC221E0 */ jal sub_GAME_7F088618 -/* 0BBEA4 7F0894B4 8FA40058 */ lw $a0, 0x58($sp) -/* 0BBEA8 7F0894B8 10000017 */ b .L7F089518 -/* 0BBEAC 7F0894BC AFA20058 */ sw $v0, 0x58($sp) -.L7F0894C0: -/* 0BBEB0 7F0894C0 0FC31557 */ jal sub_GAME_7F0C6048 -/* 0BBEB4 7F0894C4 00000000 */ nop -/* 0BBEB8 7F0894C8 10400013 */ beqz $v0, .L7F089518 -/* 0BBEBC 7F0894CC 00000000 */ nop -/* 0BBEC0 7F0894D0 0FC221E0 */ jal sub_GAME_7F088618 -/* 0BBEC4 7F0894D4 8FA40058 */ lw $a0, 0x58($sp) -/* 0BBEC8 7F0894D8 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0BBECC 7F0894DC 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0BBED0 7F0894E0 AFA20058 */ sw $v0, 0x58($sp) -/* 0BBED4 7F0894E4 3C188004 */ lui $t8, %hi(g_ClockTimer) # $t8, 0x8004 -/* 0BBED8 7F0894E8 8C6429F8 */ lw $a0, 0x29f8($v1) -/* 0BBEDC 7F0894EC 18800007 */ blez $a0, .L7F08950C -/* 0BBEE0 7F0894F0 00000000 */ nop -/* 0BBEE4 7F0894F4 8F180FF4 */ lw $t8, %lo(g_ClockTimer)($t8) -/* 0BBEE8 7F0894F8 0098C823 */ subu $t9, $a0, $t8 -/* 0BBEEC 7F0894FC AC7929F8 */ sw $t9, 0x29f8($v1) -/* 0BBEF0 7F089500 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0BBEF4 7F089504 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0BBEF8 7F089508 8C6429F8 */ lw $a0, 0x29f8($v1) -.L7F08950C: -/* 0BBEFC 7F08950C 04810002 */ bgez $a0, .L7F089518 -/* 0BBF00 7F089510 00000000 */ nop -/* 0BBF04 7F089514 AC6029F8 */ sw $zero, 0x29f8($v1) -.L7F089518: -/* 0BBF08 7F089518 0FC26669 */ jal getPlayerCount -/* 0BBF0C 7F08951C 00000000 */ nop -/* 0BBF10 7F089520 24010001 */ li $at, 1 -/* 0BBF14 7F089524 14410003 */ bne $v0, $at, .L7F089534 -/* 0BBF18 7F089528 00000000 */ nop -/* 0BBF1C 7F08952C 0FC15E0C */ jal display_objective_status_text_on_status_change -/* 0BBF20 7F089530 00000000 */ nop -.L7F089534: -/* 0BBF24 7F089534 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0BBF28 7F089538 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0BBF2C 7F08953C 8C6200D8 */ lw $v0, 0xd8($v1) -/* 0BBF30 7F089540 1040009F */ beqz $v0, .L7F0897C0 -/* 0BBF34 7F089544 00000000 */ nop -/* 0BBF38 7F089548 8C680428 */ lw $t0, 0x428($v1) -/* 0BBF3C 7F08954C 24010001 */ li $at, 1 -/* 0BBF40 7F089550 15000045 */ bnez $t0, .L7F089668 -/* 0BBF44 7F089554 00000000 */ nop -/* 0BBF48 7F089558 14410004 */ bne $v0, $at, .L7F08956C -/* 0BBF4C 7F08955C 00002025 */ move $a0, $zero -/* 0BBF50 7F089560 24090002 */ li $t1, 2 -/* 0BBF54 7F089564 24040001 */ li $a0, 1 -/* 0BBF58 7F089568 AC6900D8 */ sw $t1, 0xd8($v1) -.L7F08956C: -/* 0BBF5C 7F08956C 1080001F */ beqz $a0, .L7F0895EC -/* 0BBF60 7F089570 3C0A8007 */ lui $t2, %hi(g_CurrentPlayer) # $t2, 0x8007 -/* 0BBF64 7F089574 0FC07039 */ jal die_blood_image_routine -/* 0BBF68 7F089578 00002025 */ move $a0, $zero -/* 0BBF6C 7F08957C 0FC26669 */ jal getPlayerCount -/* 0BBF70 7F089580 00000000 */ nop -/* 0BBF74 7F089584 24010001 */ li $at, 1 -/* 0BBF78 7F089588 14410013 */ bne $v0, $at, .L7F0895D8 -/* 0BBF7C 7F08958C 00000000 */ nop -/* 0BBF80 7F089590 0FC3028E */ jal musicStopSlot -/* 0BBF84 7F089594 2404FFFF */ li $a0, -1 -/* 0BBF88 7F089598 0FC3003F */ jal set_missionstate -/* 0BBF8C 7F08959C 00002025 */ move $a0, $zero -/* 0BBF90 7F0895A0 0FC3002C */ jal sub_GAME_7F0C0BF0 -/* 0BBF94 7F0895A4 00000000 */ nop -/* 0BBF98 7F0895A8 0C001927 */ jal musicTrack1ApplySeqpVol -/* 0BBF9C 7F0895AC 3044FFFF */ andi $a0, $v0, 0xffff -/* 0BBFA0 7F0895B0 3C018002 */ lui $at, %hi(g_musicXTrack1Fade) # $at, 0x8002 -/* 0BBFA4 7F0895B4 AC2021DC */ sw $zero, %lo(g_musicXTrack1Fade)($at) -/* 0BBFA8 7F0895B8 0C001A09 */ jal musicTrack2ApplySeqpVol -/* 0BBFAC 7F0895BC 00002025 */ move $a0, $zero -/* 0BBFB0 7F0895C0 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) # $at, 0x8002 -/* 0BBFB4 7F0895C4 AC2021E0 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0BBFB8 7F0895C8 0C0018B7 */ jal musicTrack1Play -/* 0BBFBC 7F0895CC 2404001B */ li $a0, 27 -/* 0BBFC0 7F0895D0 10000003 */ b .L7F0895E0 -/* 0BBFC4 7F0895D4 00000000 */ nop -.L7F0895D8: -/* 0BBFC8 7F0895D8 0FC3003F */ jal set_missionstate -/* 0BBFCC 7F0895DC 24040006 */ li $a0, 6 -.L7F0895E0: -/* 0BBFD0 7F0895E0 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0BBFD4 7F0895E4 10000020 */ b .L7F089668 -/* 0BBFD8 7F0895E8 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -.L7F0895EC: -/* 0BBFDC 7F0895EC 8D4A8BC0 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 0BBFE0 7F0895F0 24040096 */ li $a0, 150 -/* 0BBFE4 7F0895F4 00002825 */ move $a1, $zero -/* 0BBFE8 7F0895F8 8D4B0424 */ lw $t3, 0x424($t2) -/* 0BBFEC 7F0895FC 00003025 */ move $a2, $zero -/* 0BBFF0 7F089600 3C073F34 */ lui $a3, (0x3F34B4B5 >> 16) # lui $a3, 0x3f34 -/* 0BBFF4 7F089604 11600006 */ beqz $t3, .L7F089620 -/* 0BBFF8 7F089608 3C0C8004 */ lui $t4, %hi(g_ClockTimer) # $t4, 0x8004 -/* 0BBFFC 7F08960C 0FC20215 */ jal currentPlayerSetFadeColour -/* 0BC000 7F089610 34E7B4B5 */ ori $a3, (0x3F34B4B5 & 0xFFFF) # ori $a3, $a3, 0xb4b5 -/* 0BC004 7F089614 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0BC008 7F089618 10000013 */ b .L7F089668 -/* 0BC00C 7F08961C 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -.L7F089620: -/* 0BC010 7F089620 8D8C0FF4 */ lw $t4, %lo(g_ClockTimer)($t4) -/* 0BC014 7F089624 24040002 */ li $a0, 2 -/* 0BC018 7F089628 19800003 */ blez $t4, .L7F089638 -/* 0BC01C 7F08962C 00000000 */ nop -/* 0BC020 7F089630 10000001 */ b .L7F089638 -/* 0BC024 7F089634 24040001 */ li $a0, 1 -.L7F089638: -/* 0BC028 7F089638 0FC07039 */ jal die_blood_image_routine -/* 0BC02C 7F08963C 00000000 */ nop -/* 0BC030 7F089640 10400004 */ beqz $v0, .L7F089654 -/* 0BC034 7F089644 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 0BC038 7F089648 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0BC03C 7F08964C 240D0001 */ li $t5, 1 -/* 0BC040 7F089650 ADCD0424 */ sw $t5, 0x424($t6) -.L7F089654: -/* 0BC044 7F089654 0FC07134 */ jal gameplayBloodOverlayDL -/* 0BC048 7F089658 8FA40058 */ lw $a0, 0x58($sp) -/* 0BC04C 7F08965C 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0BC050 7F089660 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0BC054 7F089664 AFA20058 */ sw $v0, 0x58($sp) -.L7F089668: -/* 0BC058 7F089668 0FC1BDD7 */ jal objecthandlerGetModelField28 -/* 0BC05C 7F08966C 24640598 */ addiu $a0, $v1, 0x598 -/* 0BC060 7F089670 3C048007 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8007 -/* 0BC064 7F089674 8C848BC0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BC068 7F089678 E7A00024 */ swc1 $f0, 0x24($sp) -/* 0BC06C 7F08967C 0FC1BDD9 */ jal sub_GAME_7F06F5C4 -/* 0BC070 7F089680 24840598 */ addiu $a0, $a0, 0x598 -/* 0BC074 7F089684 C7A40024 */ lwc1 $f4, 0x24($sp) -/* 0BC078 7F089688 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0BC07C 7F08968C 4604003E */ c.le.s $f0, $f4 -/* 0BC080 7F089690 00000000 */ nop -/* 0BC084 7F089694 4500004A */ bc1f .L7F0897C0 -/* 0BC088 7F089698 00000000 */ nop -/* 0BC08C 7F08969C 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0BC090 7F0896A0 8C6F0424 */ lw $t7, 0x424($v1) -/* 0BC094 7F0896A4 11E00046 */ beqz $t7, .L7F0897C0 -/* 0BC098 7F0896A8 00000000 */ nop -/* 0BC09C 7F0896AC 8C780428 */ lw $t8, 0x428($v1) -/* 0BC0A0 7F0896B0 24190001 */ li $t9, 1 -/* 0BC0A4 7F0896B4 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0BC0A8 7F0896B8 1700000E */ bnez $t8, .L7F0896F4 -/* 0BC0AC 7F0896BC 00002825 */ move $a1, $zero -/* 0BC0B0 7F0896C0 44816000 */ mtc1 $at, $f12 -/* 0BC0B4 7F0896C4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BC0B8 7F0896C8 44813000 */ mtc1 $at, $f6 -/* 0BC0BC 7F0896CC AC790428 */ sw $t9, 0x428($v1) -/* 0BC0C0 7F0896D0 00003025 */ move $a2, $zero -/* 0BC0C4 7F0896D4 00003825 */ move $a3, $zero -/* 0BC0C8 7F0896D8 0FC20221 */ jal currentPlayerAdjustFade -/* 0BC0CC 7F0896DC E7A60010 */ swc1 $f6, 0x10($sp) -/* 0BC0D0 7F0896E0 3C0142F0 */ li $at, 0x42F00000 # 120.000000 -/* 0BC0D4 7F0896E4 44816000 */ mtc1 $at, $f12 -/* 0BC0D8 7F0896E8 44807000 */ mtc1 $zero, $f14 -/* 0BC0DC 7F0896EC 0FC202AD */ jal currentPlayerStartChrFade -/* 0BC0E0 7F0896F0 00000000 */ nop -.L7F0896F4: -/* 0BC0E4 7F0896F4 0FC2024C */ jal currentPlayerIsFadeComplete -/* 0BC0E8 7F0896F8 00000000 */ nop -/* 0BC0EC 7F0896FC 10400030 */ beqz $v0, .L7F0897C0 -/* 0BC0F0 7F089700 00000000 */ nop -/* 0BC0F4 7F089704 0FC26669 */ jal getPlayerCount -/* 0BC0F8 7F089708 00000000 */ nop -/* 0BC0FC 7F08970C 24010001 */ li $at, 1 -/* 0BC100 7F089710 14410005 */ bne $v0, $at, .L7F089728 -/* 0BC104 7F089714 00000000 */ nop -/* 0BC108 7F089718 0FC1EA94 */ jal bondviewSetCameraMode -/* 0BC10C 7F08971C 24040005 */ li $a0, 5 -/* 0BC110 7F089720 10000027 */ b .L7F0897C0 -/* 0BC114 7F089724 00000000 */ nop -.L7F089728: -/* 0BC118 7F089728 0FC051B2 */ jal get_scenario -/* 0BC11C 7F08972C 00000000 */ nop -/* 0BC120 7F089730 0FC269A4 */ jal get_cur_playernum -/* 0BC124 7F089734 AFA20040 */ sw $v0, 0x40($sp) -/* 0BC128 7F089738 0FC26669 */ jal getPlayerCount -/* 0BC12C 7F08973C AFA2003C */ sw $v0, 0x3c($sp) -/* 0BC130 7F089740 00402825 */ move $a1, $v0 -/* 0BC134 7F089744 00002025 */ move $a0, $zero -/* 0BC138 7F089748 1840000C */ blez $v0, .L7F08977C -/* 0BC13C 7F08974C 00001825 */ move $v1, $zero -/* 0BC140 7F089750 8FA8003C */ lw $t0, 0x3c($sp) -/* 0BC144 7F089754 3C0A8007 */ lui $t2, %hi(g_playerPlayerData) # $t2, 0x8007 -/* 0BC148 7F089758 254A8A00 */ addiu $t2, %lo(g_playerPlayerData) # addiu $t2, $t2, -0x7600 -/* 0BC14C 7F08975C 00084880 */ sll $t1, $t0, 2 -/* 0BC150 7F089760 012A1021 */ addu $v0, $t1, $t2 -.L7F089764: -/* 0BC154 7F089764 8C4B0024 */ lw $t3, 0x24($v0) -/* 0BC158 7F089768 24630001 */ addiu $v1, $v1, 1 -/* 0BC15C 7F08976C 0065082A */ slt $at, $v1, $a1 -/* 0BC160 7F089770 24420070 */ addiu $v0, $v0, 0x70 -/* 0BC164 7F089774 1420FFFB */ bnez $at, .L7F089764 -/* 0BC168 7F089778 008B2021 */ addu $a0, $a0, $t3 -.L7F08977C: -/* 0BC16C 7F08977C 8FAC0040 */ lw $t4, 0x40($sp) -/* 0BC170 7F089780 24010001 */ li $at, 1 -/* 0BC174 7F089784 15810003 */ bne $t4, $at, .L7F089794 -/* 0BC178 7F089788 28810002 */ slti $at, $a0, 2 -/* 0BC17C 7F08978C 1020000C */ beqz $at, .L7F0897C0 -/* 0BC180 7F089790 00000000 */ nop -.L7F089794: -/* 0BC184 7F089794 0FC269A4 */ jal get_cur_playernum -/* 0BC188 7F089798 00000000 */ nop -/* 0BC18C 7F08979C 00022600 */ sll $a0, $v0, 0x18 -/* 0BC190 7F0897A0 00046E03 */ sra $t5, $a0, 0x18 -/* 0BC194 7F0897A4 01A02025 */ move $a0, $t5 -/* 0BC198 7F0897A8 0C002C20 */ jal joyGetButtons -/* 0BC19C 7F0897AC 3405B000 */ li $a1, 45056 -/* 0BC1A0 7F0897B0 10400003 */ beqz $v0, .L7F0897C0 -/* 0BC1A4 7F0897B4 00000000 */ nop -/* 0BC1A8 7F0897B8 0FC22294 */ jal mp_respawn_handler -/* 0BC1AC 7F0897BC 00000000 */ nop -.L7F0897C0: -/* 0BC1B0 7F0897C0 0FC229C0 */ jal bondviewIntroCameraTextTick -/* 0BC1B4 7F0897C4 00000000 */ nop -/* 0BC1B8 7F0897C8 0FC22A06 */ jal sub_GAME_7F08A5FC -/* 0BC1BC 7F0897CC 8FA40058 */ lw $a0, 0x58($sp) -/* 0BC1C0 7F0897D0 0FC22B10 */ jal bondviewUpperTextWindowTimerTick -/* 0BC1C4 7F0897D4 AFA20058 */ sw $v0, 0x58($sp) -/* 0BC1C8 7F0897D8 0FC22B4C */ jal sub_GAME_7F08AAE8 -/* 0BC1CC 7F0897DC 8FA40058 */ lw $a0, 0x58($sp) -/* 0BC1D0 7F0897E0 AFA20058 */ sw $v0, 0x58($sp) -/* 0BC1D4 7F0897E4 0FC1AB5E */ jal gunDrawSight -/* 0BC1D8 7F0897E8 27A40058 */ addiu $a0, $sp, 0x58 -/* 0BC1DC 7F0897EC 0FC1A922 */ jal generate_ammo_total_microcode -/* 0BC1E0 7F0897F0 8FA40058 */ lw $a0, 0x58($sp) -/* 0BC1E4 7F0897F4 AFA20058 */ sw $v0, 0x58($sp) -/* 0BC1E8 7F0897F8 0FC1593C */ jal countdownTimerRender -/* 0BC1EC 7F0897FC 00402025 */ move $a0, $v0 -/* 0BC1F0 7F089800 AFA20058 */ sw $v0, 0x58($sp) -/* 0BC1F4 7F089804 0FC31568 */ jal display_red_blue_on_radar -/* 0BC1F8 7F089808 00402025 */ move $a0, $v0 -/* 0BC1FC 7F08980C AFA20058 */ sw $v0, 0x58($sp) -/* 0BC200 7F089810 0FC20161 */ jal currentPlayerDrawFade -/* 0BC204 7F089814 00402025 */ move $a0, $v0 -/* 0BC208 7F089818 8FBF001C */ lw $ra, 0x1c($sp) -.L7F08981C: -/* 0BC20C 7F08981C 27BD0058 */ addiu $sp, $sp, 0x58 -/* 0BC210 7F089820 03E00008 */ jr $ra -/* 0BC214 7F089824 00000000 */ nop -) -#endif -#endif @@ -16710,15 +10629,12 @@ void sub_GAME_7F089718(f32 arg0) } -void sub_GAME_7F08976C(f32 param_1) { +void sub_GAME_7F08976C(f32 param_1) +{ D_800364CC = param_1; } - - - - /** * Address 0x7F089778. */ @@ -16728,35 +10644,26 @@ f32 bondviewGetPlayerStanHeight(struct player *player) } - - - /** * Address 0x7F089780. */ f32 bondviewGetPlayerDuckingHeightRelated(struct player *player) { - return player->field_29BC + player->field_88 + player->ducking_height_offset; + return player->eyeheight + player->field_88 + player->ducking_height_offset; } - - - -PropRecord* get_curplayer_positiondata(void) { +PropRecord* getCurrentPlayerProp(void) { return g_CurrentPlayer->prop; } - - - /** * Address 0x7F0897A8. */ void bondviewKillCurrentPlayer(void) { - if ((g_CurrentPlayer->bondinvincible == 0) && (g_CurrentPlayer->bonddead == FALSE)) + if ((g_CurrentPlayer->cheatBondInvincible == 0) && (g_CurrentPlayer->bonddead == FALSE)) { if (g_CurrentPlayer->watch_animation_state != WATCH_ANIMATION_0x0) { @@ -16779,18 +10686,16 @@ void bondviewKillCurrentPlayer(void) currentPlayerEquipWeaponWrapper(GUNLEFT, 0); currentPlayerEquipWeaponWrapper(GUNRIGHT, 0); - if ((getMissiontimer() - g_CurrentPlayer->field_29F4) < g_playerPerm->shortest_inning) + if ((getMissiontimer() - g_CurrentPlayer->lifestarttime60) < g_playerPerm->shortest_inning) { - g_playerPerm->shortest_inning = getMissiontimer() - g_CurrentPlayer->field_29F4; + g_playerPerm->shortest_inning = getMissiontimer() - g_CurrentPlayer->lifestarttime60; } - g_CurrentPlayer->field_29F4 = getMissiontimer(); + g_CurrentPlayer->lifestarttime60 = getMissiontimer(); } } - - /** * Unreferenced. * @@ -16802,8 +10707,6 @@ s32 sub_GAME_7F0898E8(void) } - - /** * @param damage_amount: damage amount * @param vectorx: damage source x coordinate @@ -16825,18 +10728,18 @@ void record_damage_kills(f32 damage_amount, f32 vectorx, f32 vectorz, s32 player if (g_CurrentPlayer->watch_animation_state != WATCH_ANIMATION_0x0) { - sub_GAME_7F0A2F30(g_CurrentPlayer->armor_display_values, 0x2E, 1, get_BONDdata_watch_armor()); - sub_GAME_7F0A2F30(g_CurrentPlayer->health_display_values, 0x2E, -1, bondviewGetCurrentPlayerHealth()); + hudMakeDamageSegments(g_CurrentPlayer->armor_display_values, 0x2E, 1, currentPlayerGetArmor()); + hudMakeDamageSegments(g_CurrentPlayer->health_display_values, 0x2E, -1, currentPlayerGetHealth()); } if (getPlayerCount() < 2 || (g_stopPlayFlag == 0 && g_gameOverFlag == 0)) { - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { damage_dealt *= 0.25f; } - if (g_CurrentPlayer->bonddead == FALSE && g_CurrentPlayer->bondinvincible == FALSE) + if (g_CurrentPlayer->bonddead == FALSE && g_CurrentPlayer->cheatBondInvincible == FALSE) { joyRumblePakStart(get_cur_playernum(), 0.25); if (cur_player_get_control_type() >= 4) @@ -16853,7 +10756,7 @@ void record_damage_kills(f32 damage_amount, f32 vectorx, f32 vectorz, s32 player damage_dealt = (g_CurrentPlayer->bondhealth * g_CurrentPlayer->actual_health) + (g_CurrentPlayer->bondarmour * g_CurrentPlayer->actual_armor); } - if (g_CurrentPlayer->bondinvincible == FALSE && g_CurrentPlayer->bonddead == FALSE && g_PlayerInvincible == FALSE && + if (g_CurrentPlayer->cheatBondInvincible == FALSE && g_CurrentPlayer->bonddead == FALSE && g_PlayerInvincible == FALSE && (g_CurrentPlayer->damageshowtime < 0 || (getPlayerCount() >= 2 && g_CurrentPlayer->damageshowtime == 0))) { if (g_CurrentPlayer->watch_animation_state != WATCH_ANIMATION_0x5 && g_CurrentPlayer->watch_animation_state != WATCH_ANIMATION_0xc) @@ -16988,73 +10891,56 @@ void bondviewCallRecordDamageKills(f32 damage_amount, f32 angle, s32 playerid, s } - - - int bondviewGetIfCurrentPlayerDamageShowTime(void) { return (g_CurrentPlayer->damageshowtime >= (s32)0); } + int bondviewGetIfCurrentPlayerHealthShowTime(void) { return (g_CurrentPlayer->healthshowtime > (s32)0); } - - - - f32 bondviewGetBondBreathing(void) { return g_CurrentPlayer->bondbreathing; } - - /** - * Get the Current Heading of Current Player in Radians - * @return f32 Heading in Radians + * Gets the current player's heading angle, converted from degrees to radians. + * @return Heading (Yaw) in Radians */ -f32 get_curplay_horizontal_rotation_in_degrees(void) +f32 bondviewGetPlayerYawRadians(void) { return DegToRad(360.0f - g_CurrentPlayer->vv_theta); } - /** - * Get the Current Pitch of Current Player in Radians - * @return f32 Pitch in Radians -*/ -f32 get_curplay_vertical_rotation_in_degrees(void) + * Gets the current player's vertical look angle, converted from degrees to radians. + * @return Pitch in radians. + */ +f32 bondviewGetPlayerPitchRadians(void) { return DegToRad(g_CurrentPlayer->vv_verta); } - s32 bond_pressed_reload_activate(void) { return g_CurrentPlayer->field_D0; } - - - - void set_bondata_invincible_flag(u32 arg0) { - g_CurrentPlayer->bondinvincible = arg0; + g_CurrentPlayer->cheatBondInvincible = arg0; } - - - u8 get_bondata_invincible_flag(void) { - return g_CurrentPlayer->bondinvincible; + return g_CurrentPlayer->cheatBondInvincible; } @@ -17094,9 +10980,9 @@ s32 get_obj_collision_flag(void) { */ u8 bondviewGetCurrentPlayersRoom(void) { - if ((g_CurrentPlayer->unknown == 1) && (g_CurrentPlayer->room_pointer != 0)) + if ((g_CurrentPlayer->cameramode == 1) && (g_CurrentPlayer->cameratile != 0)) { - return g_CurrentPlayer->room_pointer->room; + return g_CurrentPlayer->cameratile->room; } return g_CurrentPlayer->field_488.current_tile_ptr_for_portals->room; @@ -17110,7 +10996,7 @@ u8 bondviewGetCurrentPlayersRoom(void) */ coord3d *bondviewGetCurrentPlayersPosition(void) { - if (g_CurrentPlayer->unknown == 1) + if (g_CurrentPlayer->cameramode == 1) { return &g_CurrentPlayer->pos; } @@ -17123,7 +11009,7 @@ coord3d *bondviewGetCurrentPlayersPosition(void) coord3d * bondviewGetCurrentPlayersPosition3(void) { - if (g_CurrentPlayer->unknown == 1) + if (g_CurrentPlayer->cameramode == 1) { return &g_CurrentPlayer->pos3; } @@ -17131,7 +11017,7 @@ coord3d * bondviewGetCurrentPlayersPosition3(void) return &g_CurrentPlayer->field_488.pos3; } -struct coord3d *get_BONDdata_field408(void) +struct coord3d *getCurrentPlayerPrevPos(void) { return &g_CurrentPlayer->bondprevpos; } @@ -17140,23 +11026,24 @@ struct coord3d *get_BONDdata_field408(void) /** * Address 0x7F08A03C. */ -void bondviewUpdateGuardTankFlagsRelated(PropRecord *arg0, s32 flags) +void bondviewUpdateGuardTankFlagsRelated(PropRecord *prop, s32 flag) { - s32 sp1C; + s32 playerIndex; - sp1C = getPlayerPointerIndex(arg0); + playerIndex = getPlayerPointerIndex(prop); - if (arg0->chr != NULL) + if (prop->chr != NULL) { - chrSetMoving(arg0->chr, flags); + chrSetMoving(prop->chr, flag); } if (g_PlayerTankProp != NULL) { - sub_GAME_7F04F218(g_PlayerTankProp, flags); + // When commented out tank shells fired from the tank detonate immediately. + sub_GAME_7F04F218(g_PlayerTankProp, flag); } - g_playerPointers[sp1C]->field_AC = flags; + g_playerPointers[playerIndex]->field_AC = flag; } @@ -17176,7 +11063,7 @@ void bondviewGetPropHeightRelatedValues(PropRecord *arg0, struct rect4f **field_ // What is this doing and why is it 1 player only? if (getPlayerCount() == 1 || g_playerPointers[temp_v0]->bonddead == FALSE) { - if (g_playerPointers[temp_v0]->unknown != 1) + if (g_playerPointers[temp_v0]->cameramode != 1) { *arg2 = 4; *field_B0 = &g_playerPointers[temp_v0]->collision_bounds; @@ -17200,7 +11087,7 @@ void bondviewGetPropHeightRelatedValues(PropRecord *arg0, struct rect4f **field_ void bondviewUpdatePlayerCollisionBounds(void) { - if (in_tank_flag == 1) + if (g_PlayerIsInTank == 1) { bondviewGetTankCollisionBounds(&g_CurrentPlayer->collision_bounds, &g_CurrentPlayer->field_488.collision_position, g_TankOrientationAngle); @@ -17246,13 +11133,13 @@ void bondviewGetCollisionRadius(PropRecord* arg0, f32 *collision_radius, f32 *he /** * Address 0x7F08A2EC. */ -f32 bondviewGetCurrentPlayerHealth(void) +f32 currentPlayerGetHealth(void) { return g_CurrentPlayer->bondhealth; } -f32 get_BONDdata_watch_armor(void) +f32 currentPlayerGetArmor(void) { return g_CurrentPlayer->bondarmour; } @@ -17320,7 +11207,7 @@ void setFontTables(s32 arg0, s32 arg1) #ifdef BUGFIX_R1 -void hudmsgBottomShow(char *string, s32 arg1, s32 arg2) +void hudmsgBottomShow(char *string, s32 font, s32 arg2) { s32 abs_index; s32 index; @@ -17333,7 +11220,7 @@ void hudmsgBottomShow(char *string, s32 arg1, s32 arg2) abs_index = index; strncpy(stringbuffer_lowerleft[abs_index], string, (BONDVIEW_HUD_MSG_BOTTOM_BUFFER_LENGTH-1)); stringbuffer_lowerleft[abs_index][(BONDVIEW_HUD_MSG_BOTTOM_BUFFER_LENGTH-1)] = 0; - dword_CODE_bss_jp80079CEC[abs_index] = arg1; + dword_CODE_bss_jp80079CEC[abs_index] = font; dword_CODE_bss_jp80079Cd8[abs_index] = arg2; display_statusbar++; } @@ -17343,7 +11230,7 @@ void hudmsgBottomShow(char *string, s32 arg1, s32 arg2) index = get_cur_playernum(); strncpy(stringbuffer_lowerleft[index], string, (BONDVIEW_HUD_MSG_BOTTOM_BUFFER_LENGTH-1)); stringbuffer_lowerleft[index][(BONDVIEW_HUD_MSG_BOTTOM_BUFFER_LENGTH-1)] = 0; - dword_CODE_bss_jp80079CEC[index] = arg1; + dword_CODE_bss_jp80079CEC[index] = font; dword_CODE_bss_jp80079Cd8[index] = arg2; #if defined(VERSION_EU) g_CurrentPlayer->bondmesscnt = 0x64; @@ -17354,14 +11241,17 @@ void hudmsgBottomShow(char *string, s32 arg1, s32 arg2) } #else - -void hudmsgBottomShow(char *string) +#ifdef DEBUG +void hudmsgBottomShow(char *mess, void *font) +#else +void hudmsgBottomShow(char *mess) +#endif { s32 abs_index; s32 index; #ifdef DEBUG assert(font); - assert(wcslen(mess)<=MAXMESSAGELEN); + assert(strlen(mess)<=MAXMESSAGELEN); #endif if (getPlayerCount() == 1) { @@ -17369,7 +11259,7 @@ void hudmsgBottomShow(char *string) { abs_index = status_bar_text_buffer_index + display_statusbar; index = abs_index % 5; - strncpy(stringbuffer_lowerleft[index], string, MAXMESSAGELEN); + strncpy(stringbuffer_lowerleft[index], mess, MAXMESSAGELEN); display_statusbar++; stringbuffer_lowerleft[index][MAXMESSAGELEN] = 0; } @@ -17377,7 +11267,7 @@ void hudmsgBottomShow(char *string) else { index = get_cur_playernum(); - strncpy(stringbuffer_lowerleft[index], string, MAXMESSAGELEN); + strncpy(stringbuffer_lowerleft[index], mess, MAXMESSAGELEN); stringbuffer_lowerleft[index][MAXMESSAGELEN] = 0; g_CurrentPlayer->bondmesscnt = 0x78; } @@ -17433,7 +11323,11 @@ void bondviewIntroCameraTextTick(void) } } -Gfx* sub_GAME_7F08A5FC(Gfx* arg0) + +/** + * Address: 7F08A5FC + */ +Gfx* hudmsgBottomRender(Gfx* arg0) { s32 var_v1; s32 view_left; @@ -17540,21 +11434,21 @@ void bondviewSetUpperTextDisplayFlag(PLAYERFLAG flag) } -void hudmsgTopShow(char* string) +void hudmsgTopShow(char* mess) { s32 index; #ifdef DEBUG - assert(wcslen(mess)<=MAXTALKMESSLEN); + assert(strlen(mess)<=MAXTALKMESSLEN); #endif if (display_upper_text_window >= 2) { return; } index = (upper_text_buffer_index + display_upper_text_window) % 2; #if defined(LEFTOVERDEBUG) - strncpy(stringbuffer_top[index], string, (BONDVIEW_HUD_MSG_TOP_BUFFER_LENGTH-1)); + strncpy(stringbuffer_top[index], mess, (BONDVIEW_HUD_MSG_TOP_BUFFER_LENGTH-1)); display_upper_text_window += 1; stringbuffer_top[index][(BONDVIEW_HUD_MSG_TOP_BUFFER_LENGTH-1)] = 0; #else - strncpy(dword_CODE_bss_80079DC8[index], string, (BONDVIEW_HUD_MSG_TOP_BUFFER_LENGTH-1)); + strncpy(dword_CODE_bss_80079DC8[index], mess, (BONDVIEW_HUD_MSG_TOP_BUFFER_LENGTH-1)); display_upper_text_window += 1; dword_CODE_bss_80079DC8[index][(BONDVIEW_HUD_MSG_TOP_BUFFER_LENGTH-1)] = 0; #endif @@ -17599,3007 +11493,613 @@ void bondviewUpperTextWindowTimerTick(void) } +extern char a8s[]; /* "%8s" */ +extern char aX4_0f[]; /* "x %4.0f" */ +extern char aY4_0f[]; /* "y %4.0f" */ +extern char aZ4_0f[]; /* "z %4.0f" */ +extern char aS3d[]; /* "%s %3d" */ +Gfx *sub_GAME_7F08AAE8(Gfx *gdl) +{ + TopMessageLocals msg; + DebugTextBuffers debugtext; + s32 debug_x; + s32 debug_y; + f32 theta_x; + s32 debug_boxbottom; + s32 pad; + s32 *roomid; + s32 debug_angle; + DirectionLabels directions; + struct + { + s16 screenwidth; + s16 pad; + } sw; -#ifdef NONMATCHING -void sub_GAME_7F08AAE8(void) { - -} -#else -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel D_800552BC -.word 0x40490fdb /*3.1415927*/ -.text -glabel sub_GAME_7F08AAE8 -/* 0BF618 7F08AAE8 3C0E8003 */ lui $t6, %hi(g_UpperTextDisplayFlag) -/* 0BF61C 7F08AAEC 8DCE68B4 */ lw $t6, %lo(g_UpperTextDisplayFlag)($t6) -/* 0BF620 7F08AAF0 27BDFF18 */ addiu $sp, $sp, -0xe8 -/* 0BF624 7F08AAF4 AFB00038 */ sw $s0, 0x38($sp) -/* 0BF628 7F08AAF8 00808025 */ move $s0, $a0 -/* 0BF62C 7F08AAFC 15C00087 */ bnez $t6, .L7F08AD1C -/* 0BF630 7F08AB00 AFBF003C */ sw $ra, 0x3c($sp) -/* 0BF634 7F08AB04 3C0F8003 */ lui $t7, %hi(upper_text_window_timer) -/* 0BF638 7F08AB08 8DEF68B0 */ lw $t7, %lo(upper_text_window_timer)($t7) -/* 0BF63C 7F08AB0C 3C188003 */ lui $t8, %hi(upper_text_buffer_index) -/* 0BF640 7F08AB10 05E00082 */ bltz $t7, .L7F08AD1C -/* 0BF644 7F08AB14 00000000 */ nop -/* 0BF648 7F08AB18 8F1868A8 */ lw $t8, %lo(upper_text_buffer_index)($t8) -/* 0BF64C 7F08AB1C 3C088008 */ lui $t0, %hi(stringbuffer_top) -/* 0BF650 7F08AB20 3C098008 */ lui $t1, %hi(g_CurrentPlayer) -/* 0BF654 7F08AB24 0018C880 */ sll $t9, $t8, 2 -/* 0BF658 7F08AB28 0338C821 */ addu $t9, $t9, $t8 -/* 0BF65C 7F08AB2C 0019C880 */ sll $t9, $t9, 2 -/* 0BF660 7F08AB30 0338C823 */ subu $t9, $t9, $t8 -/* 0BF664 7F08AB34 0019C8C0 */ sll $t9, $t9, 3 -/* 0BF668 7F08AB38 0338C823 */ subu $t9, $t9, $t8 -/* 0BF66C 7F08AB3C 01194021 */ addu $t0, $t0, $t9 -/* 0BF670 7F08AB40 91089C70 */ lbu $t0, %lo(stringbuffer_top)($t0) -/* 0BF674 7F08AB44 11000075 */ beqz $t0, .L7F08AD1C -/* 0BF678 7F08AB48 00000000 */ nop -/* 0BF67C 7F08AB4C 8D29A0B0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0BF680 7F08AB50 8D2A29C4 */ lw $t2, 0x29c4($t1) -/* 0BF684 7F08AB54 15400071 */ bnez $t2, .L7F08AD1C -/* 0BF688 7F08AB58 00000000 */ nop -/* 0BF68C 7F08AB5C 0FC2B366 */ jal microcode_constructor -/* 0BF690 7F08AB60 00000000 */ nop -/* 0BF694 7F08AB64 3C0B8003 */ lui $t3, %hi(upper_text_buffer_index) -/* 0BF698 7F08AB68 8D6B68A8 */ lw $t3, %lo(upper_text_buffer_index)($t3) -/* 0BF69C 7F08AB6C 3C0E8004 */ lui $t6, %hi(ptrFontZurichBold) -/* 0BF6A0 7F08AB70 8DCE0EB4 */ lw $t6, %lo(ptrFontZurichBold)($t6) -/* 0BF6A4 7F08AB74 000B6080 */ sll $t4, $t3, 2 -/* 0BF6A8 7F08AB78 018B6021 */ addu $t4, $t4, $t3 -/* 0BF6AC 7F08AB7C 000C6080 */ sll $t4, $t4, 2 -/* 0BF6B0 7F08AB80 018B6023 */ subu $t4, $t4, $t3 -/* 0BF6B4 7F08AB84 000C60C0 */ sll $t4, $t4, 3 -/* 0BF6B8 7F08AB88 3C0D8008 */ lui $t5, %hi(stringbuffer_top) -/* 0BF6BC 7F08AB8C 25AD9C70 */ addiu $t5, %lo(stringbuffer_top) # addiu $t5, $t5, -0x6390 -/* 0BF6C0 7F08AB90 3C078004 */ lui $a3, %hi(ptrFontZurichBoldChars) -/* 0BF6C4 7F08AB94 018B6023 */ subu $t4, $t4, $t3 -/* 0BF6C8 7F08AB98 00408025 */ move $s0, $v0 -/* 0BF6CC 7F08AB9C AFA000D4 */ sw $zero, 0xd4($sp) -/* 0BF6D0 7F08ABA0 AFA000D8 */ sw $zero, 0xd8($sp) -/* 0BF6D4 7F08ABA4 018D3021 */ addu $a2, $t4, $t5 -/* 0BF6D8 7F08ABA8 8CE70EB8 */ lw $a3, %lo(ptrFontZurichBoldChars)($a3) -/* 0BF6DC 7F08ABAC 27A400D8 */ addiu $a0, $sp, 0xd8 -/* 0BF6E0 7F08ABB0 27A500D4 */ addiu $a1, $sp, 0xd4 -/* 0BF6E4 7F08ABB4 AFA00014 */ sw $zero, 0x14($sp) -/* 0BF6E8 7F08ABB8 0FC2BA63 */ jal textMeasure -/* 0BF6EC 7F08ABBC AFAE0010 */ sw $t6, 0x10($sp) -/* 0BF6F0 7F08ABC0 3C0F8003 */ lui $t7, %hi(cameraBufferToggle) -/* 0BF6F4 7F08ABC4 8DEF642C */ lw $t7, %lo(cameraBufferToggle)($t7) -/* 0BF6F8 7F08ABC8 11E0001B */ beqz $t7, .L7F08AC38 -/* 0BF6FC 7F08ABCC 00000000 */ nop -/* 0BF700 7F08ABD0 0C001145 */ jal viGetViewLeft -/* 0BF704 7F08ABD4 00000000 */ nop -/* 0BF708 7F08ABD8 24580046 */ addiu $t8, $v0, 0x46 -/* 0BF70C 7F08ABDC 0C001149 */ jal viGetViewTop -/* 0BF710 7F08ABE0 AFB800E4 */ sw $t8, 0xe4($sp) -/* 0BF714 7F08ABE4 00401825 */ move $v1, $v0 -/* 0BF718 7F08ABE8 24630020 */ addiu $v1, $v1, 0x20 -/* 0BF71C 7F08ABEC 2404000B */ li $a0, 11 -/* 0BF720 7F08ABF0 0064001A */ div $zero, $v1, $a0 -/* 0BF724 7F08ABF4 14800002 */ bnez $a0, .L7F08AC00 -/* 0BF728 7F08ABF8 00000000 */ nop -/* 0BF72C 7F08ABFC 0007000D */ break 7 -.L7F08AC00: -/* 0BF730 7F08AC00 2401FFFF */ li $at, -1 -/* 0BF734 7F08AC04 14810004 */ bne $a0, $at, .L7F08AC18 -/* 0BF738 7F08AC08 3C018000 */ lui $at, 0x8000 -/* 0BF73C 7F08AC0C 14610002 */ bne $v1, $at, .L7F08AC18 -/* 0BF740 7F08AC10 00000000 */ nop -/* 0BF744 7F08AC14 0006000D */ break 6 -.L7F08AC18: -/* 0BF748 7F08AC18 00001812 */ mflo $v1 -/* 0BF74C 7F08AC1C 00000000 */ nop -/* 0BF750 7F08AC20 00000000 */ nop -/* 0BF754 7F08AC24 00640019 */ multu $v1, $a0 -/* 0BF758 7F08AC28 00001812 */ mflo $v1 -/* 0BF75C 7F08AC2C 2463FFFE */ addiu $v1, $v1, -2 -/* 0BF760 7F08AC30 10000008 */ b .L7F08AC54 -/* 0BF764 7F08AC34 8FA800D8 */ lw $t0, 0xd8($sp) -.L7F08AC38: -/* 0BF768 7F08AC38 0C001145 */ jal viGetViewLeft -/* 0BF76C 7F08AC3C 00000000 */ nop -/* 0BF770 7F08AC40 2459001E */ addiu $t9, $v0, 0x1e -/* 0BF774 7F08AC44 0C001149 */ jal viGetViewTop -/* 0BF778 7F08AC48 AFB900E4 */ sw $t9, 0xe4($sp) -/* 0BF77C 7F08AC4C 2443000D */ addiu $v1, $v0, 0xd -/* 0BF780 7F08AC50 8FA800D8 */ lw $t0, 0xd8($sp) -.L7F08AC54: -/* 0BF784 7F08AC54 AFA300E0 */ sw $v1, 0xe0($sp) -/* 0BF788 7F08AC58 00684821 */ addu $t1, $v1, $t0 -/* 0BF78C 7F08AC5C 0C001107 */ jal viGetX -/* 0BF790 7F08AC60 AFA900DC */ sw $t1, 0xdc($sp) -/* 0BF794 7F08AC64 8FA300E0 */ lw $v1, 0xe0($sp) -/* 0BF798 7F08AC68 8FAA00DC */ lw $t2, 0xdc($sp) -/* 0BF79C 7F08AC6C 240B0064 */ li $t3, 100 -/* 0BF7A0 7F08AC70 AFAB0014 */ sw $t3, 0x14($sp) -/* 0BF7A4 7F08AC74 02002025 */ move $a0, $s0 -/* 0BF7A8 7F08AC78 00002825 */ move $a1, $zero -/* 0BF7AC 7F08AC7C 00403825 */ move $a3, $v0 -/* 0BF7B0 7F08AC80 2466FFFE */ addiu $a2, $v1, -2 -/* 0BF7B4 7F08AC84 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0BF7B8 7F08AC88 AFAA0010 */ sw $t2, 0x10($sp) -/* 0BF7BC 7F08AC8C 0C001107 */ jal viGetX -/* 0BF7C0 7F08AC90 00408025 */ move $s0, $v0 -/* 0BF7C4 7F08AC94 0C00110B */ jal viGetY -/* 0BF7C8 7F08AC98 A7A20048 */ sh $v0, 0x48($sp) -/* 0BF7CC 7F08AC9C 3C0C8003 */ lui $t4, %hi(upper_text_buffer_index) -/* 0BF7D0 7F08ACA0 8D8C68A8 */ lw $t4, %lo(upper_text_buffer_index)($t4) -/* 0BF7D4 7F08ACA4 3C0F8004 */ lui $t7, %hi(ptrFontZurichBoldChars) -/* 0BF7D8 7F08ACA8 3C188004 */ lui $t8, %hi(ptrFontZurichBold) -/* 0BF7DC 7F08ACAC 000C6880 */ sll $t5, $t4, 2 -/* 0BF7E0 7F08ACB0 01AC6821 */ addu $t5, $t5, $t4 -/* 0BF7E4 7F08ACB4 000D6880 */ sll $t5, $t5, 2 -/* 0BF7E8 7F08ACB8 01AC6823 */ subu $t5, $t5, $t4 -/* 0BF7EC 7F08ACBC 8F180EB4 */ lw $t8, %lo(ptrFontZurichBold)($t8) -/* 0BF7F0 7F08ACC0 8DEF0EB8 */ lw $t7, %lo(ptrFontZurichBoldChars)($t7) -/* 0BF7F4 7F08ACC4 87A80048 */ lh $t0, 0x48($sp) -/* 0BF7F8 7F08ACC8 000D68C0 */ sll $t5, $t5, 3 -/* 0BF7FC 7F08ACCC 3C0E8008 */ lui $t6, %hi(stringbuffer_top) -/* 0BF800 7F08ACD0 25CE9C70 */ addiu $t6, %lo(stringbuffer_top) # addiu $t6, $t6, -0x6390 -/* 0BF804 7F08ACD4 2419FFFF */ li $t9, -1 -/* 0BF808 7F08ACD8 01AC6823 */ subu $t5, $t5, $t4 -/* 0BF80C 7F08ACDC 01AE3821 */ addu $a3, $t5, $t6 -/* 0BF810 7F08ACE0 AFB90018 */ sw $t9, 0x18($sp) -/* 0BF814 7F08ACE4 02002025 */ move $a0, $s0 -/* 0BF818 7F08ACE8 27A500E4 */ addiu $a1, $sp, 0xe4 -/* 0BF81C 7F08ACEC 27A600E0 */ addiu $a2, $sp, 0xe0 -/* 0BF820 7F08ACF0 AFA20020 */ sw $v0, 0x20($sp) -/* 0BF824 7F08ACF4 AFA00024 */ sw $zero, 0x24($sp) -/* 0BF828 7F08ACF8 AFA00028 */ sw $zero, 0x28($sp) -/* 0BF82C 7F08ACFC AFB80014 */ sw $t8, 0x14($sp) -/* 0BF830 7F08AD00 AFAF0010 */ sw $t7, 0x10($sp) -/* 0BF834 7F08AD04 0FC2B6AF */ jal textRender -/* 0BF838 7F08AD08 AFA8001C */ sw $t0, 0x1c($sp) -/* 0BF83C 7F08AD0C 0FC2B3BC */ jal combiner_bayer_lod_perspective -/* 0BF840 7F08AD10 00402025 */ move $a0, $v0 -/* 0BF844 7F08AD14 100000F1 */ b .L7F08B0DC -/* 0BF848 7F08AD18 00408025 */ move $s0, $v0 -.L7F08AD1C: -/* 0BF84C 7F08AD1C 0FC243E2 */ jal get_debug_testingmanpos_flag -/* 0BF850 7F08AD20 00000000 */ nop -/* 0BF854 7F08AD24 104000ED */ beqz $v0, .L7F08B0DC -/* 0BF858 7F08AD28 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BF85C 7F08AD2C 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BF860 7F08AD30 C4400498 */ lwc1 $f0, 0x498($v0) -/* 0BF864 7F08AD34 C44E04A0 */ lwc1 $f14, 0x4a0($v0) -/* 0BF868 7F08AD38 0FC16A8C */ jal atan2f -/* 0BF86C 7F08AD3C 46000307 */ neg.s $f12, $f0 -/* 0BF870 7F08AD40 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 0BF874 7F08AD44 44812000 */ mtc1 $at, $f4 -/* 0BF878 7F08AD48 3C018005 */ lui $at, %hi(D_800552BC) -/* 0BF87C 7F08AD4C C42852BC */ lwc1 $f8, %lo(D_800552BC)($at) -/* 0BF880 7F08AD50 46040182 */ mul.s $f6, $f0, $f4 -/* 0BF884 7F08AD54 3C0C8003 */ lui $t4, %hi(D_800368B8) -/* 0BF888 7F08AD58 258C68B8 */ addiu $t4, %lo(D_800368B8) # addiu $t4, $t4, 0x68b8 -/* 0BF88C 7F08AD5C 27AB004C */ addiu $t3, $sp, 0x4c -/* 0BF890 7F08AD60 3C188008 */ lui $t8, %hi(g_CurrentPlayer) -/* 0BF894 7F08AD64 46083283 */ div.s $f10, $f6, $f8 -/* 0BF898 7F08AD68 4600540D */ trunc.w.s $f16, $f10 -/* 0BF89C 7F08AD6C 440A8000 */ mfc1 $t2, $f16 -/* 0BF8A0 7F08AD70 00000000 */ nop -/* 0BF8A4 7F08AD74 AFAA0068 */ sw $t2, 0x68($sp) -/* 0BF8A8 7F08AD78 8D810000 */ lw $at, ($t4) -/* 0BF8AC 7F08AD7C 8D8F0004 */ lw $t7, 4($t4) -/* 0BF8B0 7F08AD80 AD610000 */ sw $at, ($t3) -/* 0BF8B4 7F08AD84 8D810008 */ lw $at, 8($t4) -/* 0BF8B8 7F08AD88 AD6F0004 */ sw $t7, 4($t3) -/* 0BF8BC 7F08AD8C 8D8F000C */ lw $t7, 0xc($t4) -/* 0BF8C0 7F08AD90 AD610008 */ sw $at, 8($t3) -/* 0BF8C4 7F08AD94 8D810010 */ lw $at, 0x10($t4) -/* 0BF8C8 7F08AD98 AD6F000C */ sw $t7, 0xc($t3) -/* 0BF8CC 7F08AD9C 8D8F0014 */ lw $t7, 0x14($t4) -/* 0BF8D0 7F08ADA0 AD610010 */ sw $at, 0x10($t3) -/* 0BF8D4 7F08ADA4 9981001A */ lwr $at, 0x1a($t4) -/* 0BF8D8 7F08ADA8 AD6F0014 */ sw $t7, 0x14($t3) -/* 0BF8DC 7F08ADAC B961001A */ swr $at, 0x1a($t3) -/* 0BF8E0 7F08ADB0 8F18A0B0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0BF8E4 7F08ADB4 8F190488 */ lw $t9, 0x488($t8) -/* 0BF8E8 7F08ADB8 0FC2D778 */ jal bgDebPrintROOMID -/* 0BF8EC 7F08ADBC 93240003 */ lbu $a0, 3($t9) -/* 0BF8F0 7F08ADC0 3C058005 */ lui $a1, %hi(a8s) -/* 0BF8F4 7F08ADC4 24A54FC0 */ addiu $a1, %lo(a8s) # addiu $a1, $a1, 0x4fc0 -/* 0BF8F8 7F08ADC8 27A400C4 */ addiu $a0, $sp, 0xc4 -/* 0BF8FC 7F08ADCC 0C002B25 */ jal sprintf -/* 0BF900 7F08ADD0 00403025 */ move $a2, $v0 -/* 0BF904 7F08ADD4 3C088008 */ lui $t0, %hi(g_CurrentPlayer) -/* 0BF908 7F08ADD8 8D08A0B0 */ lw $t0, %lo(g_CurrentPlayer)($t0) -/* 0BF90C 7F08ADDC 3C058005 */ lui $a1, %hi(aX4_0f) -/* 0BF910 7F08ADE0 24A54FC4 */ addiu $a1, %lo(aX4_0f) # addiu $a1, $a1, 0x4fc4 -/* 0BF914 7F08ADE4 C512048C */ lwc1 $f18, 0x48c($t0) -/* 0BF918 7F08ADE8 27A400B4 */ addiu $a0, $sp, 0xb4 -/* 0BF91C 7F08ADEC 46009121 */ cvt.d.s $f4, $f18 -/* 0BF920 7F08ADF0 44072000 */ mfc1 $a3, $f4 -/* 0BF924 7F08ADF4 44062800 */ mfc1 $a2, $f5 -/* 0BF928 7F08ADF8 0C002B25 */ jal sprintf -/* 0BF92C 7F08ADFC 00000000 */ nop -/* 0BF930 7F08AE00 3C098008 */ lui $t1, %hi(g_CurrentPlayer) -/* 0BF934 7F08AE04 8D29A0B0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0BF938 7F08AE08 3C058005 */ lui $a1, %hi(aY4_0f) -/* 0BF93C 7F08AE0C 24A54FCC */ addiu $a1, %lo(aY4_0f) # addiu $a1, $a1, 0x4fcc -/* 0BF940 7F08AE10 C5260490 */ lwc1 $f6, 0x490($t1) -/* 0BF944 7F08AE14 27A400A4 */ addiu $a0, $sp, 0xa4 -/* 0BF948 7F08AE18 46003221 */ cvt.d.s $f8, $f6 -/* 0BF94C 7F08AE1C 44074000 */ mfc1 $a3, $f8 -/* 0BF950 7F08AE20 44064800 */ mfc1 $a2, $f9 -/* 0BF954 7F08AE24 0C002B25 */ jal sprintf -/* 0BF958 7F08AE28 00000000 */ nop -/* 0BF95C 7F08AE2C 3C0A8008 */ lui $t2, %hi(g_CurrentPlayer) -/* 0BF960 7F08AE30 8D4AA0B0 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 0BF964 7F08AE34 3C058005 */ lui $a1, %hi(aZ4_0f) -/* 0BF968 7F08AE38 24A54FD4 */ addiu $a1, %lo(aZ4_0f) # addiu $a1, $a1, 0x4fd4 -/* 0BF96C 7F08AE3C C54A0494 */ lwc1 $f10, 0x494($t2) -/* 0BF970 7F08AE40 27A40094 */ addiu $a0, $sp, 0x94 -/* 0BF974 7F08AE44 46005421 */ cvt.d.s $f16, $f10 -/* 0BF978 7F08AE48 44078000 */ mfc1 $a3, $f16 -/* 0BF97C 7F08AE4C 44068800 */ mfc1 $a2, $f17 -/* 0BF980 7F08AE50 0C002B25 */ jal sprintf -/* 0BF984 7F08AE54 00000000 */ nop -/* 0BF988 7F08AE58 8FA70068 */ lw $a3, 0x68($sp) -/* 0BF98C 7F08AE5C 2401002D */ li $at, 45 -/* 0BF990 7F08AE60 3C058005 */ lui $a1, %hi(aS3d) -/* 0BF994 7F08AE64 24EE0016 */ addiu $t6, $a3, 0x16 -/* 0BF998 7F08AE68 01C1001A */ div $zero, $t6, $at -/* 0BF99C 7F08AE6C 00006812 */ mflo $t5 -/* 0BF9A0 7F08AE70 000D5880 */ sll $t3, $t5, 2 -/* 0BF9A4 7F08AE74 016D5823 */ subu $t3, $t3, $t5 -/* 0BF9A8 7F08AE78 27AC004C */ addiu $t4, $sp, 0x4c -/* 0BF9AC 7F08AE7C 016C3021 */ addu $a2, $t3, $t4 -/* 0BF9B0 7F08AE80 24A54FDC */ addiu $a1, %lo(aS3d) # addiu $a1, $a1, 0x4fdc -/* 0BF9B4 7F08AE84 0C002B25 */ jal sprintf -/* 0BF9B8 7F08AE88 27A40084 */ addiu $a0, $sp, 0x84 -/* 0BF9BC 7F08AE8C 0C001145 */ jal viGetViewLeft -/* 0BF9C0 7F08AE90 00000000 */ nop -/* 0BF9C4 7F08AE94 244F0011 */ addiu $t7, $v0, 0x11 -/* 0BF9C8 7F08AE98 0C001149 */ jal viGetViewTop -/* 0BF9CC 7F08AE9C AFAF0080 */ sw $t7, 0x80($sp) -/* 0BF9D0 7F08AEA0 24460011 */ addiu $a2, $v0, 0x11 -/* 0BF9D4 7F08AEA4 24D8000A */ addiu $t8, $a2, 0xa -/* 0BF9D8 7F08AEA8 AFB80074 */ sw $t8, 0x74($sp) -/* 0BF9DC 7F08AEAC AFA6007C */ sw $a2, 0x7c($sp) -/* 0BF9E0 7F08AEB0 0FC2B366 */ jal microcode_constructor -/* 0BF9E4 7F08AEB4 02002025 */ move $a0, $s0 -/* 0BF9E8 7F08AEB8 0C001107 */ jal viGetX -/* 0BF9EC 7F08AEBC 00408025 */ move $s0, $v0 -/* 0BF9F0 7F08AEC0 8FB90074 */ lw $t9, 0x74($sp) -/* 0BF9F4 7F08AEC4 24090064 */ li $t1, 100 -/* 0BF9F8 7F08AEC8 AFA90014 */ sw $t1, 0x14($sp) -/* 0BF9FC 7F08AECC 27280001 */ addiu $t0, $t9, 1 -/* 0BFA00 7F08AED0 AFA80010 */ sw $t0, 0x10($sp) -/* 0BFA04 7F08AED4 8FA6007C */ lw $a2, 0x7c($sp) -/* 0BFA08 7F08AED8 02002025 */ move $a0, $s0 -/* 0BFA0C 7F08AEDC 00002825 */ move $a1, $zero -/* 0BFA10 7F08AEE0 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0BFA14 7F08AEE4 00403825 */ move $a3, $v0 -/* 0BFA18 7F08AEE8 0C001107 */ jal viGetX -/* 0BFA1C 7F08AEEC 00408025 */ move $s0, $v0 -/* 0BFA20 7F08AEF0 0C00110B */ jal viGetY -/* 0BFA24 7F08AEF4 A7A20048 */ sh $v0, 0x48($sp) -/* 0BFA28 7F08AEF8 3C0A8004 */ lui $t2, %hi(ptrFontBankGothicChars) -/* 0BFA2C 7F08AEFC 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) -/* 0BFA30 7F08AF00 8DCE0EAC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0BFA34 7F08AF04 8D4A0EB0 */ lw $t2, %lo(ptrFontBankGothicChars)($t2) -/* 0BFA38 7F08AF08 87AB0048 */ lh $t3, 0x48($sp) -/* 0BFA3C 7F08AF0C 240DFFFF */ li $t5, -1 -/* 0BFA40 7F08AF10 AFAD0018 */ sw $t5, 0x18($sp) -/* 0BFA44 7F08AF14 02002025 */ move $a0, $s0 -/* 0BFA48 7F08AF18 27A50080 */ addiu $a1, $sp, 0x80 -/* 0BFA4C 7F08AF1C 27A6007C */ addiu $a2, $sp, 0x7c -/* 0BFA50 7F08AF20 27A700C4 */ addiu $a3, $sp, 0xc4 -/* 0BFA54 7F08AF24 AFA20020 */ sw $v0, 0x20($sp) -/* 0BFA58 7F08AF28 AFA00024 */ sw $zero, 0x24($sp) -/* 0BFA5C 7F08AF2C AFA00028 */ sw $zero, 0x28($sp) -/* 0BFA60 7F08AF30 AFAE0014 */ sw $t6, 0x14($sp) -/* 0BFA64 7F08AF34 AFAA0010 */ sw $t2, 0x10($sp) -/* 0BFA68 7F08AF38 0FC2B6AF */ jal textRender -/* 0BFA6C 7F08AF3C AFAB001C */ sw $t3, 0x1c($sp) -/* 0BFA70 7F08AF40 0C001145 */ jal viGetViewLeft -/* 0BFA74 7F08AF44 00408025 */ move $s0, $v0 -/* 0BFA78 7F08AF48 244C0057 */ addiu $t4, $v0, 0x57 -/* 0BFA7C 7F08AF4C 0C001107 */ jal viGetX -/* 0BFA80 7F08AF50 AFAC0080 */ sw $t4, 0x80($sp) -/* 0BFA84 7F08AF54 0C00110B */ jal viGetY -/* 0BFA88 7F08AF58 A7A20048 */ sh $v0, 0x48($sp) -/* 0BFA8C 7F08AF5C 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) -/* 0BFA90 7F08AF60 3C188004 */ lui $t8, %hi(ptrFontBankGothic) -/* 0BFA94 7F08AF64 8F180EAC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0BFA98 7F08AF68 8DEF0EB0 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0BFA9C 7F08AF6C 87A80048 */ lh $t0, 0x48($sp) -/* 0BFAA0 7F08AF70 2419FFFF */ li $t9, -1 -/* 0BFAA4 7F08AF74 AFB90018 */ sw $t9, 0x18($sp) -/* 0BFAA8 7F08AF78 02002025 */ move $a0, $s0 -/* 0BFAAC 7F08AF7C 27A50080 */ addiu $a1, $sp, 0x80 -/* 0BFAB0 7F08AF80 27A6007C */ addiu $a2, $sp, 0x7c -/* 0BFAB4 7F08AF84 27A700B4 */ addiu $a3, $sp, 0xb4 -/* 0BFAB8 7F08AF88 AFA20020 */ sw $v0, 0x20($sp) -/* 0BFABC 7F08AF8C AFA00024 */ sw $zero, 0x24($sp) -/* 0BFAC0 7F08AF90 AFA00028 */ sw $zero, 0x28($sp) -/* 0BFAC4 7F08AF94 AFB80014 */ sw $t8, 0x14($sp) -/* 0BFAC8 7F08AF98 AFAF0010 */ sw $t7, 0x10($sp) -/* 0BFACC 7F08AF9C 0FC2B6AF */ jal textRender -/* 0BFAD0 7F08AFA0 AFA8001C */ sw $t0, 0x1c($sp) -/* 0BFAD4 7F08AFA4 0C001145 */ jal viGetViewLeft -/* 0BFAD8 7F08AFA8 00408025 */ move $s0, $v0 -/* 0BFADC 7F08AFAC 2449008D */ addiu $t1, $v0, 0x8d -/* 0BFAE0 7F08AFB0 0C001107 */ jal viGetX -/* 0BFAE4 7F08AFB4 AFA90080 */ sw $t1, 0x80($sp) -/* 0BFAE8 7F08AFB8 0C00110B */ jal viGetY -/* 0BFAEC 7F08AFBC A7A20048 */ sh $v0, 0x48($sp) -/* 0BFAF0 7F08AFC0 3C0A8004 */ lui $t2, %hi(ptrFontBankGothicChars) -/* 0BFAF4 7F08AFC4 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) -/* 0BFAF8 7F08AFC8 8DCE0EAC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0BFAFC 7F08AFCC 8D4A0EB0 */ lw $t2, %lo(ptrFontBankGothicChars)($t2) -/* 0BFB00 7F08AFD0 87AB0048 */ lh $t3, 0x48($sp) -/* 0BFB04 7F08AFD4 240DFFFF */ li $t5, -1 -/* 0BFB08 7F08AFD8 AFAD0018 */ sw $t5, 0x18($sp) -/* 0BFB0C 7F08AFDC 02002025 */ move $a0, $s0 -/* 0BFB10 7F08AFE0 27A50080 */ addiu $a1, $sp, 0x80 -/* 0BFB14 7F08AFE4 27A6007C */ addiu $a2, $sp, 0x7c -/* 0BFB18 7F08AFE8 27A700A4 */ addiu $a3, $sp, 0xa4 -/* 0BFB1C 7F08AFEC AFA20020 */ sw $v0, 0x20($sp) -/* 0BFB20 7F08AFF0 AFA00024 */ sw $zero, 0x24($sp) -/* 0BFB24 7F08AFF4 AFA00028 */ sw $zero, 0x28($sp) -/* 0BFB28 7F08AFF8 AFAE0014 */ sw $t6, 0x14($sp) -/* 0BFB2C 7F08AFFC AFAA0010 */ sw $t2, 0x10($sp) -/* 0BFB30 7F08B000 0FC2B6AF */ jal textRender -/* 0BFB34 7F08B004 AFAB001C */ sw $t3, 0x1c($sp) -/* 0BFB38 7F08B008 0C001145 */ jal viGetViewLeft -/* 0BFB3C 7F08B00C 00408025 */ move $s0, $v0 -/* 0BFB40 7F08B010 244C00C3 */ addiu $t4, $v0, 0xc3 -/* 0BFB44 7F08B014 0C001107 */ jal viGetX -/* 0BFB48 7F08B018 AFAC0080 */ sw $t4, 0x80($sp) -/* 0BFB4C 7F08B01C 0C00110B */ jal viGetY -/* 0BFB50 7F08B020 A7A20048 */ sh $v0, 0x48($sp) -/* 0BFB54 7F08B024 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) -/* 0BFB58 7F08B028 3C188004 */ lui $t8, %hi(ptrFontBankGothic) -/* 0BFB5C 7F08B02C 8F180EAC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0BFB60 7F08B030 8DEF0EB0 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0BFB64 7F08B034 87A80048 */ lh $t0, 0x48($sp) -/* 0BFB68 7F08B038 2419FFFF */ li $t9, -1 -/* 0BFB6C 7F08B03C AFB90018 */ sw $t9, 0x18($sp) -/* 0BFB70 7F08B040 02002025 */ move $a0, $s0 -/* 0BFB74 7F08B044 27A50080 */ addiu $a1, $sp, 0x80 -/* 0BFB78 7F08B048 27A6007C */ addiu $a2, $sp, 0x7c -/* 0BFB7C 7F08B04C 27A70094 */ addiu $a3, $sp, 0x94 -/* 0BFB80 7F08B050 AFA20020 */ sw $v0, 0x20($sp) -/* 0BFB84 7F08B054 AFA00024 */ sw $zero, 0x24($sp) -/* 0BFB88 7F08B058 AFA00028 */ sw $zero, 0x28($sp) -/* 0BFB8C 7F08B05C AFB80014 */ sw $t8, 0x14($sp) -/* 0BFB90 7F08B060 AFAF0010 */ sw $t7, 0x10($sp) -/* 0BFB94 7F08B064 0FC2B6AF */ jal textRender -/* 0BFB98 7F08B068 AFA8001C */ sw $t0, 0x1c($sp) -/* 0BFB9C 7F08B06C 0C001145 */ jal viGetViewLeft -/* 0BFBA0 7F08B070 00408025 */ move $s0, $v0 -/* 0BFBA4 7F08B074 244900F9 */ addiu $t1, $v0, 0xf9 -/* 0BFBA8 7F08B078 0C001107 */ jal viGetX -/* 0BFBAC 7F08B07C AFA90080 */ sw $t1, 0x80($sp) -/* 0BFBB0 7F08B080 0C00110B */ jal viGetY -/* 0BFBB4 7F08B084 A7A20048 */ sh $v0, 0x48($sp) -/* 0BFBB8 7F08B088 3C0A8004 */ lui $t2, %hi(ptrFontBankGothicChars) -/* 0BFBBC 7F08B08C 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) -/* 0BFBC0 7F08B090 8DCE0EAC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0BFBC4 7F08B094 8D4A0EB0 */ lw $t2, %lo(ptrFontBankGothicChars)($t2) -/* 0BFBC8 7F08B098 87AB0048 */ lh $t3, 0x48($sp) -/* 0BFBCC 7F08B09C 240DFFFF */ li $t5, -1 -/* 0BFBD0 7F08B0A0 AFAD0018 */ sw $t5, 0x18($sp) -/* 0BFBD4 7F08B0A4 02002025 */ move $a0, $s0 -/* 0BFBD8 7F08B0A8 27A50080 */ addiu $a1, $sp, 0x80 -/* 0BFBDC 7F08B0AC 27A6007C */ addiu $a2, $sp, 0x7c -/* 0BFBE0 7F08B0B0 27A70084 */ addiu $a3, $sp, 0x84 -/* 0BFBE4 7F08B0B4 AFA20020 */ sw $v0, 0x20($sp) -/* 0BFBE8 7F08B0B8 AFA00024 */ sw $zero, 0x24($sp) -/* 0BFBEC 7F08B0BC AFA00028 */ sw $zero, 0x28($sp) -/* 0BFBF0 7F08B0C0 AFAE0014 */ sw $t6, 0x14($sp) -/* 0BFBF4 7F08B0C4 AFAA0010 */ sw $t2, 0x10($sp) -/* 0BFBF8 7F08B0C8 0FC2B6AF */ jal textRender -/* 0BFBFC 7F08B0CC AFAB001C */ sw $t3, 0x1c($sp) -/* 0BFC00 7F08B0D0 0FC2B3BC */ jal combiner_bayer_lod_perspective -/* 0BFC04 7F08B0D4 00402025 */ move $a0, $v0 -/* 0BFC08 7F08B0D8 00408025 */ move $s0, $v0 -.L7F08B0DC: -/* 0BFC0C 7F08B0DC 8FBF003C */ lw $ra, 0x3c($sp) -/* 0BFC10 7F08B0E0 02001025 */ move $v0, $s0 -/* 0BFC14 7F08B0E4 8FB00038 */ lw $s0, 0x38($sp) -/* 0BFC18 7F08B0E8 03E00008 */ jr $ra -/* 0BFC1C 7F08B0EC 27BD00E8 */ addiu $sp, $sp, 0xe8 -) -#endif - -#ifdef VERSION_JP -GLOBAL_ASM( -.late_rodata -glabel D_800552BC -.word 0x40490fdb /*3.1415927*/ -.text -glabel sub_GAME_7F08AAE8 -/* 0BFE34 7F08B2C4 3C0E8003 */ lui $t6, %hi(g_UpperTextDisplayFlag) # $t6, 0x8003 -/* 0BFE38 7F08B2C8 8DCE68EC */ lw $t6, %lo(g_UpperTextDisplayFlag)($t6) -/* 0BFE3C 7F08B2CC 27BDFF18 */ addiu $sp, $sp, -0xe8 -/* 0BFE40 7F08B2D0 AFB00038 */ sw $s0, 0x38($sp) -/* 0BFE44 7F08B2D4 00808025 */ move $s0, $a0 -/* 0BFE48 7F08B2D8 15C000B2 */ bnez $t6, .Ljp7F08B5A4 -/* 0BFE4C 7F08B2DC AFBF003C */ sw $ra, 0x3c($sp) -/* 0BFE50 7F08B2E0 3C0F8003 */ lui $t7, %hi(upper_text_window_timer) # $t7, 0x8003 -/* 0BFE54 7F08B2E4 8DEF68E8 */ lw $t7, %lo(upper_text_window_timer)($t7) -/* 0BFE58 7F08B2E8 3C188003 */ lui $t8, %hi(upper_text_buffer_index) # $t8, 0x8003 -/* 0BFE5C 7F08B2EC 05E000AD */ bltz $t7, .Ljp7F08B5A4 -/* 0BFE60 7F08B2F0 00000000 */ nop -/* 0BFE64 7F08B2F4 8F1868E0 */ lw $t8, %lo(upper_text_buffer_index)($t8) -/* 0BFE68 7F08B2F8 3C088008 */ lui $t0, %hi(stringbuffer_top) -/* 0BFE6C 7F08B2FC 3C098008 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8008 -/* 0BFE70 7F08B300 0018C880 */ sll $t9, $t8, 2 -/* 0BFE74 7F08B304 0338C821 */ addu $t9, $t9, $t8 -/* 0BFE78 7F08B308 0019C880 */ sll $t9, $t9, 2 -/* 0BFE7C 7F08B30C 0338C823 */ subu $t9, $t9, $t8 -/* 0BFE80 7F08B310 0019C8C0 */ sll $t9, $t9, 3 -/* 0BFE84 7F08B314 0338C823 */ subu $t9, $t9, $t8 -/* 0BFE88 7F08B318 01194021 */ addu $t0, $t0, $t9 -/* 0BFE8C 7F08B31C 91089CE0 */ lbu $t0, %lo(stringbuffer_top)($t0) -/* 0BFE90 7F08B320 110000A0 */ beqz $t0, .Ljp7F08B5A4 -/* 0BFE94 7F08B324 00000000 */ nop -/* 0BFE98 7F08B328 8D29A120 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0BFE9C 7F08B32C 8D2A29C4 */ lw $t2, 0x29c4($t1) -/* 0BFEA0 7F08B330 1540009C */ bnez $t2, .Ljp7F08B5A4 -/* 0BFEA4 7F08B334 00000000 */ nop -/* 0BFEA8 7F08B338 0FC2B652 */ jal microcode_constructor -/* 0BFEAC 7F08B33C 00000000 */ nop -/* 0BFEB0 7F08B340 3C0B8003 */ lui $t3, %hi(upper_text_buffer_index) # $t3, 0x8003 -/* 0BFEB4 7F08B344 8D6B68E0 */ lw $t3, %lo(upper_text_buffer_index)($t3) -/* 0BFEB8 7F08B348 3C0E8004 */ lui $t6, %hi(ptrFontZurichBold) # $t6, 0x8004 -/* 0BFEBC 7F08B34C 8DCE0EE4 */ lw $t6, %lo(ptrFontZurichBold)($t6) -/* 0BFEC0 7F08B350 000B6080 */ sll $t4, $t3, 2 -/* 0BFEC4 7F08B354 018B6021 */ addu $t4, $t4, $t3 -/* 0BFEC8 7F08B358 000C6080 */ sll $t4, $t4, 2 -/* 0BFECC 7F08B35C 018B6023 */ subu $t4, $t4, $t3 -/* 0BFED0 7F08B360 000C60C0 */ sll $t4, $t4, 3 -/* 0BFED4 7F08B364 3C0D8008 */ lui $t5, %hi(stringbuffer_top) # $t5, 0x8008 -/* 0BFED8 7F08B368 25AD9CE0 */ addiu $t5, %lo(stringbuffer_top) # addiu $t5, $t5, -0x6320 -/* 0BFEDC 7F08B36C 3C078004 */ lui $a3, %hi(ptrFontZurichBoldChars) # $a3, 0x8004 -/* 0BFEE0 7F08B370 018B6023 */ subu $t4, $t4, $t3 -/* 0BFEE4 7F08B374 00408025 */ move $s0, $v0 -/* 0BFEE8 7F08B378 AFA000D4 */ sw $zero, 0xd4($sp) -/* 0BFEEC 7F08B37C AFA000D8 */ sw $zero, 0xd8($sp) -/* 0BFEF0 7F08B380 018D3021 */ addu $a2, $t4, $t5 -/* 0BFEF4 7F08B384 8CE70EE8 */ lw $a3, %lo(ptrFontZurichBoldChars)($a3) -/* 0BFEF8 7F08B388 27A400D8 */ addiu $a0, $sp, 0xd8 -/* 0BFEFC 7F08B38C 27A500D4 */ addiu $a1, $sp, 0xd4 -/* 0BFF00 7F08B390 AFA00014 */ sw $zero, 0x14($sp) -/* 0BFF04 7F08B394 0FC2BD4F */ jal textMeasure -/* 0BFF08 7F08B398 AFAE0010 */ sw $t6, 0x10($sp) -/* 0BFF0C 7F08B39C 3C0F8003 */ lui $t7, %hi(cameraBufferToggle) # $t7, 0x8003 -/* 0BFF10 7F08B3A0 8DEF646C */ lw $t7, %lo(cameraBufferToggle)($t7) -/* 0BFF14 7F08B3A4 11E0001B */ beqz $t7, .Ljp7F08B414 -/* 0BFF18 7F08B3A8 00000000 */ nop -/* 0BFF1C 7F08B3AC 0C001145 */ jal viGetViewLeft -/* 0BFF20 7F08B3B0 00000000 */ nop -/* 0BFF24 7F08B3B4 24580046 */ addiu $t8, $v0, 0x46 -/* 0BFF28 7F08B3B8 0C001149 */ jal viGetViewTop -/* 0BFF2C 7F08B3BC AFB800E4 */ sw $t8, 0xe4($sp) -/* 0BFF30 7F08B3C0 00401825 */ move $v1, $v0 -/* 0BFF34 7F08B3C4 24630020 */ addiu $v1, $v1, 0x20 -/* 0BFF38 7F08B3C8 2404000B */ li $a0, 11 -/* 0BFF3C 7F08B3CC 0064001A */ div $zero, $v1, $a0 -/* 0BFF40 7F08B3D0 14800002 */ bnez $a0, .Ljp7F08B3DC -/* 0BFF44 7F08B3D4 00000000 */ nop -/* 0BFF48 7F08B3D8 0007000D */ break 7 -.Ljp7F08B3DC: -/* 0BFF4C 7F08B3DC 2401FFFF */ li $at, -1 -/* 0BFF50 7F08B3E0 14810004 */ bne $a0, $at, .Ljp7F08B3F4 -/* 0BFF54 7F08B3E4 3C018000 */ lui $at, 0x8000 -/* 0BFF58 7F08B3E8 14610002 */ bne $v1, $at, .Ljp7F08B3F4 -/* 0BFF5C 7F08B3EC 00000000 */ nop -/* 0BFF60 7F08B3F0 0006000D */ break 6 -.Ljp7F08B3F4: -/* 0BFF64 7F08B3F4 00001812 */ mflo $v1 -/* 0BFF68 7F08B3F8 00000000 */ nop -/* 0BFF6C 7F08B3FC 00000000 */ nop -/* 0BFF70 7F08B400 00640019 */ multu $v1, $a0 -/* 0BFF74 7F08B404 00001812 */ mflo $v1 -/* 0BFF78 7F08B408 2463FFFE */ addiu $v1, $v1, -2 -/* 0BFF7C 7F08B40C 10000008 */ b .Ljp7F08B430 -/* 0BFF80 7F08B410 8FA800D8 */ lw $t0, 0xd8($sp) -.Ljp7F08B414: -/* 0BFF84 7F08B414 0C001145 */ jal viGetViewLeft -/* 0BFF88 7F08B418 00000000 */ nop -/* 0BFF8C 7F08B41C 2459001E */ addiu $t9, $v0, 0x1e -/* 0BFF90 7F08B420 0C001149 */ jal viGetViewTop -/* 0BFF94 7F08B424 AFB900E4 */ sw $t9, 0xe4($sp) -/* 0BFF98 7F08B428 2443000D */ addiu $v1, $v0, 0xd -/* 0BFF9C 7F08B42C 8FA800D8 */ lw $t0, 0xd8($sp) -.Ljp7F08B430: -/* 0BFFA0 7F08B430 AFA300E0 */ sw $v1, 0xe0($sp) -/* 0BFFA4 7F08B434 00684821 */ addu $t1, $v1, $t0 -/* 0BFFA8 7F08B438 0C001107 */ jal viGetX -/* 0BFFAC 7F08B43C AFA900DC */ sw $t1, 0xdc($sp) -/* 0BFFB0 7F08B440 8FA300E0 */ lw $v1, 0xe0($sp) -/* 0BFFB4 7F08B444 8FAA00DC */ lw $t2, 0xdc($sp) -/* 0BFFB8 7F08B448 240B0064 */ li $t3, 100 -/* 0BFFBC 7F08B44C AFAB0014 */ sw $t3, 0x14($sp) -/* 0BFFC0 7F08B450 02002025 */ move $a0, $s0 -/* 0BFFC4 7F08B454 00002825 */ move $a1, $zero -/* 0BFFC8 7F08B458 00403825 */ move $a3, $v0 -/* 0BFFCC 7F08B45C 2466FFFE */ addiu $a2, $v1, -2 -/* 0BFFD0 7F08B460 0FC2B6F1 */ jal microcode_constructor_related_to_menus -/* 0BFFD4 7F08B464 AFAA0010 */ sw $t2, 0x10($sp) -/* 0BFFD8 7F08B468 3C0C8005 */ lui $t4, %hi(j_text_trigger) # $t4, 0x8005 -/* 0BFFDC 7F08B46C 8D8C8500 */ lw $t4, %lo(j_text_trigger)($t4) -/* 0BFFE0 7F08B470 00408025 */ move $s0, $v0 -/* 0BFFE4 7F08B474 11800026 */ beqz $t4, .Ljp7F08B510 -/* 0BFFE8 7F08B478 00000000 */ nop -/* 0BFFEC 7F08B47C 0C001107 */ jal viGetX -/* 0BFFF0 7F08B480 00000000 */ nop -/* 0BFFF4 7F08B484 0C00110B */ jal viGetY -/* 0BFFF8 7F08B488 A7A20048 */ sh $v0, 0x48($sp) -/* 0BFFFC 7F08B48C 3C0D8003 */ lui $t5, %hi(upper_text_buffer_index) # $t5, 0x8003 -/* 0C0000 7F08B490 8DAD68E0 */ lw $t5, %lo(upper_text_buffer_index)($t5) -/* 0C0004 7F08B494 3C188004 */ lui $t8, %hi(ptrFontZurichBoldChars) # $t8, 0x8004 -/* 0C0008 7F08B498 3C198004 */ lui $t9, %hi(ptrFontZurichBold) # $t9, 0x8004 -/* 0C000C 7F08B49C 000D7080 */ sll $t6, $t5, 2 -/* 0C0010 7F08B4A0 01CD7021 */ addu $t6, $t6, $t5 -/* 0C0014 7F08B4A4 000E7080 */ sll $t6, $t6, 2 -/* 0C0018 7F08B4A8 01CD7023 */ subu $t6, $t6, $t5 -/* 0C001C 7F08B4AC 8F390EE4 */ lw $t9, %lo(ptrFontZurichBold)($t9) -/* 0C0020 7F08B4B0 8F180EE8 */ lw $t8, %lo(ptrFontZurichBoldChars)($t8) -/* 0C0024 7F08B4B4 87AA0048 */ lh $t2, 0x48($sp) -/* 0C0028 7F08B4B8 000E70C0 */ sll $t6, $t6, 3 -/* 0C002C 7F08B4BC 3C0F8008 */ lui $t7, %hi(stringbuffer_top) # $t7, 0x8008 -/* 0C0030 7F08B4C0 3C096464 */ lui $t1, (0x646464FF >> 16) # lui $t1, 0x6464 -/* 0C0034 7F08B4C4 352964FF */ ori $t1, (0x646464FF & 0xFFFF) # ori $t1, $t1, 0x64ff -/* 0C0038 7F08B4C8 25EF9CE0 */ addiu $t7, %lo(stringbuffer_top) # addiu $t7, $t7, -0x6320 -/* 0C003C 7F08B4CC 2408FFFF */ li $t0, -1 -/* 0C0040 7F08B4D0 01CD7023 */ subu $t6, $t6, $t5 -/* 0C0044 7F08B4D4 01CF3821 */ addu $a3, $t6, $t7 -/* 0C0048 7F08B4D8 AFA80018 */ sw $t0, 0x18($sp) -/* 0C004C 7F08B4DC AFA9001C */ sw $t1, 0x1c($sp) -/* 0C0050 7F08B4E0 02002025 */ move $a0, $s0 -/* 0C0054 7F08B4E4 27A500E4 */ addiu $a1, $sp, 0xe4 -/* 0C0058 7F08B4E8 27A600E0 */ addiu $a2, $sp, 0xe0 -/* 0C005C 7F08B4EC AFA20024 */ sw $v0, 0x24($sp) -/* 0C0060 7F08B4F0 AFA00028 */ sw $zero, 0x28($sp) -/* 0C0064 7F08B4F4 AFA0002C */ sw $zero, 0x2c($sp) -/* 0C0068 7F08B4F8 AFB90014 */ sw $t9, 0x14($sp) -/* 0C006C 7F08B4FC AFB80010 */ sw $t8, 0x10($sp) -/* 0C0070 7F08B500 0FC2BCA7 */ jal textRenderOutlined -/* 0C0074 7F08B504 AFAA0020 */ sw $t2, 0x20($sp) -/* 0C0078 7F08B508 10000022 */ b .Ljp7F08B594 -/* 0C007C 7F08B50C 00408025 */ move $s0, $v0 -.Ljp7F08B510: -/* 0C0080 7F08B510 0C001107 */ jal viGetX -/* 0C0084 7F08B514 00000000 */ nop -/* 0C0088 7F08B518 0C00110B */ jal viGetY -/* 0C008C 7F08B51C A7A20048 */ sh $v0, 0x48($sp) -/* 0C0090 7F08B520 3C0B8003 */ lui $t3, %hi(upper_text_buffer_index) # $t3, 0x8003 -/* 0C0094 7F08B524 8D6B68E0 */ lw $t3, %lo(upper_text_buffer_index)($t3) -/* 0C0098 7F08B528 3C0E8004 */ lui $t6, %hi(ptrFontZurichBoldChars) # $t6, 0x8004 -/* 0C009C 7F08B52C 3C0F8004 */ lui $t7, %hi(ptrFontZurichBold) # $t7, 0x8004 -/* 0C00A0 7F08B530 000B6080 */ sll $t4, $t3, 2 -/* 0C00A4 7F08B534 018B6021 */ addu $t4, $t4, $t3 -/* 0C00A8 7F08B538 000C6080 */ sll $t4, $t4, 2 -/* 0C00AC 7F08B53C 018B6023 */ subu $t4, $t4, $t3 -/* 0C00B0 7F08B540 8DEF0EE4 */ lw $t7, %lo(ptrFontZurichBold)($t7) -/* 0C00B4 7F08B544 8DCE0EE8 */ lw $t6, %lo(ptrFontZurichBoldChars)($t6) -/* 0C00B8 7F08B548 87B90048 */ lh $t9, 0x48($sp) -/* 0C00BC 7F08B54C 000C60C0 */ sll $t4, $t4, 3 -/* 0C00C0 7F08B550 3C0D8008 */ lui $t5, %hi(stringbuffer_top) # $t5, 0x8008 -/* 0C00C4 7F08B554 25AD9CE0 */ addiu $t5, %lo(stringbuffer_top) # addiu $t5, $t5, -0x6320 -/* 0C00C8 7F08B558 2418FFFF */ li $t8, -1 -/* 0C00CC 7F08B55C 018B6023 */ subu $t4, $t4, $t3 -/* 0C00D0 7F08B560 018D3821 */ addu $a3, $t4, $t5 -/* 0C00D4 7F08B564 AFB80018 */ sw $t8, 0x18($sp) -/* 0C00D8 7F08B568 02002025 */ move $a0, $s0 -/* 0C00DC 7F08B56C 27A500E4 */ addiu $a1, $sp, 0xe4 -/* 0C00E0 7F08B570 27A600E0 */ addiu $a2, $sp, 0xe0 -/* 0C00E4 7F08B574 AFA20020 */ sw $v0, 0x20($sp) -/* 0C00E8 7F08B578 AFA00024 */ sw $zero, 0x24($sp) -/* 0C00EC 7F08B57C AFA00028 */ sw $zero, 0x28($sp) -/* 0C00F0 7F08B580 AFAF0014 */ sw $t7, 0x14($sp) -/* 0C00F4 7F08B584 AFAE0010 */ sw $t6, 0x10($sp) -/* 0C00F8 7F08B588 0FC2B99B */ jal textRender -/* 0C00FC 7F08B58C AFB9001C */ sw $t9, 0x1c($sp) -/* 0C0100 7F08B590 00408025 */ move $s0, $v0 -.Ljp7F08B594: -/* 0C0104 7F08B594 0FC2B6A8 */ jal combiner_bayer_lod_perspective -/* 0C0108 7F08B598 02002025 */ move $a0, $s0 -/* 0C010C 7F08B59C 100000F1 */ b .Ljp7F08B964 -/* 0C0110 7F08B5A0 00408025 */ move $s0, $v0 -.Ljp7F08B5A4: -/* 0C0114 7F08B5A4 0FC2469A */ jal get_debug_testingmanpos_flag -/* 0C0118 7F08B5A8 00000000 */ nop -/* 0C011C 7F08B5AC 104000ED */ beqz $v0, .Ljp7F08B964 -/* 0C0120 7F08B5B0 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0C0124 7F08B5B4 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0C0128 7F08B5B8 C4400498 */ lwc1 $f0, 0x498($v0) -/* 0C012C 7F08B5BC C44E04A0 */ lwc1 $f14, 0x4a0($v0) -/* 0C0130 7F08B5C0 0FC16BD4 */ jal atan2f -/* 0C0134 7F08B5C4 46000307 */ neg.s $f12, $f0 -/* 0C0138 7F08B5C8 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 0C013C 7F08B5CC 44812000 */ mtc1 $at, $f4 -/* 0C0140 7F08B5D0 3C018005 */ lui $at, %hi(D_800552BC) # $at, 0x8005 -/* 0C0144 7F08B5D4 C42852EC */ lwc1 $f8, %lo(D_800552BC)($at) -/* 0C0148 7F08B5D8 46040182 */ mul.s $f6, $f0, $f4 -/* 0C014C 7F08B5DC 3C0B8003 */ lui $t3, %hi(D_800368B8) # $t3, 0x8003 -/* 0C0150 7F08B5E0 256B68F0 */ addiu $t3, %lo(D_800368B8) # addiu $t3, $t3, 0x68f0 -/* 0C0154 7F08B5E4 27AA004C */ addiu $t2, $sp, 0x4c -/* 0C0158 7F08B5E8 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8008 -/* 0C015C 7F08B5EC 46083283 */ div.s $f10, $f6, $f8 -/* 0C0160 7F08B5F0 4600540D */ trunc.w.s $f16, $f10 -/* 0C0164 7F08B5F4 44098000 */ mfc1 $t1, $f16 -/* 0C0168 7F08B5F8 00000000 */ nop -/* 0C016C 7F08B5FC AFA90068 */ sw $t1, 0x68($sp) -/* 0C0170 7F08B600 8D610000 */ lw $at, ($t3) -/* 0C0174 7F08B604 8D6E0004 */ lw $t6, 4($t3) -/* 0C0178 7F08B608 AD410000 */ sw $at, ($t2) -/* 0C017C 7F08B60C 8D610008 */ lw $at, 8($t3) -/* 0C0180 7F08B610 AD4E0004 */ sw $t6, 4($t2) -/* 0C0184 7F08B614 8D6E000C */ lw $t6, 0xc($t3) -/* 0C0188 7F08B618 AD410008 */ sw $at, 8($t2) -/* 0C018C 7F08B61C 8D610010 */ lw $at, 0x10($t3) -/* 0C0190 7F08B620 AD4E000C */ sw $t6, 0xc($t2) -/* 0C0194 7F08B624 8D6E0014 */ lw $t6, 0x14($t3) -/* 0C0198 7F08B628 AD410010 */ sw $at, 0x10($t2) -/* 0C019C 7F08B62C 9961001A */ lwr $at, 0x1a($t3) -/* 0C01A0 7F08B630 AD4E0014 */ sw $t6, 0x14($t2) -/* 0C01A4 7F08B634 B941001A */ swr $at, 0x1a($t2) -/* 0C01A8 7F08B638 8DEFA120 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0C01AC 7F08B63C 8DF80488 */ lw $t8, 0x488($t7) -/* 0C01B0 7F08B640 0FC2DA64 */ jal bgDebPrintROOMID -/* 0C01B4 7F08B644 93040003 */ lbu $a0, 3($t8) -/* 0C01B8 7F08B648 3C058005 */ lui $a1, %hi(a8s) # $a1, 0x8005 -/* 0C01BC 7F08B64C 24A54FF0 */ addiu $a1, %lo(a8s) # addiu $a1, $a1, 0x4ff0 -/* 0C01C0 7F08B650 27A400C4 */ addiu $a0, $sp, 0xc4 -/* 0C01C4 7F08B654 0C002B29 */ jal sprintf -/* 0C01C8 7F08B658 00403025 */ move $a2, $v0 -/* 0C01CC 7F08B65C 3C198008 */ lui $t9, %hi(g_CurrentPlayer) # $t9, 0x8008 -/* 0C01D0 7F08B660 8F39A120 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0C01D4 7F08B664 3C058005 */ lui $a1, %hi(aX4_0f) # $a1, 0x8005 -/* 0C01D8 7F08B668 24A54FF4 */ addiu $a1, %lo(aX4_0f) # addiu $a1, $a1, 0x4ff4 -/* 0C01DC 7F08B66C C732048C */ lwc1 $f18, 0x48c($t9) -/* 0C01E0 7F08B670 27A400B4 */ addiu $a0, $sp, 0xb4 -/* 0C01E4 7F08B674 46009121 */ cvt.d.s $f4, $f18 -/* 0C01E8 7F08B678 44072000 */ mfc1 $a3, $f4 -/* 0C01EC 7F08B67C 44062800 */ mfc1 $a2, $f5 -/* 0C01F0 7F08B680 0C002B29 */ jal sprintf -/* 0C01F4 7F08B684 00000000 */ nop -/* 0C01F8 7F08B688 3C088008 */ lui $t0, %hi(g_CurrentPlayer) # $t0, 0x8008 -/* 0C01FC 7F08B68C 8D08A120 */ lw $t0, %lo(g_CurrentPlayer)($t0) -/* 0C0200 7F08B690 3C058005 */ lui $a1, %hi(aY4_0f) # $a1, 0x8005 -/* 0C0204 7F08B694 24A54FFC */ addiu $a1, %lo(aY4_0f) # addiu $a1, $a1, 0x4ffc -/* 0C0208 7F08B698 C5060490 */ lwc1 $f6, 0x490($t0) -/* 0C020C 7F08B69C 27A400A4 */ addiu $a0, $sp, 0xa4 -/* 0C0210 7F08B6A0 46003221 */ cvt.d.s $f8, $f6 -/* 0C0214 7F08B6A4 44074000 */ mfc1 $a3, $f8 -/* 0C0218 7F08B6A8 44064800 */ mfc1 $a2, $f9 -/* 0C021C 7F08B6AC 0C002B29 */ jal sprintf -/* 0C0220 7F08B6B0 00000000 */ nop -/* 0C0224 7F08B6B4 3C098008 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8008 -/* 0C0228 7F08B6B8 8D29A120 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0C022C 7F08B6BC 3C058005 */ lui $a1, %hi(aZ4_0f) # $a1, 0x8005 -/* 0C0230 7F08B6C0 24A55004 */ addiu $a1, %lo(aZ4_0f) # addiu $a1, $a1, 0x5004 -/* 0C0234 7F08B6C4 C52A0494 */ lwc1 $f10, 0x494($t1) -/* 0C0238 7F08B6C8 27A40094 */ addiu $a0, $sp, 0x94 -/* 0C023C 7F08B6CC 46005421 */ cvt.d.s $f16, $f10 -/* 0C0240 7F08B6D0 44078000 */ mfc1 $a3, $f16 -/* 0C0244 7F08B6D4 44068800 */ mfc1 $a2, $f17 -/* 0C0248 7F08B6D8 0C002B29 */ jal sprintf -/* 0C024C 7F08B6DC 00000000 */ nop -/* 0C0250 7F08B6E0 8FA70068 */ lw $a3, 0x68($sp) -/* 0C0254 7F08B6E4 2401002D */ li $at, 45 -/* 0C0258 7F08B6E8 3C058005 */ lui $a1, %hi(aS3d) # $a1, 0x8005 -/* 0C025C 7F08B6EC 24ED0016 */ addiu $t5, $a3, 0x16 -/* 0C0260 7F08B6F0 01A1001A */ div $zero, $t5, $at -/* 0C0264 7F08B6F4 00006012 */ mflo $t4 -/* 0C0268 7F08B6F8 000C5080 */ sll $t2, $t4, 2 -/* 0C026C 7F08B6FC 014C5023 */ subu $t2, $t2, $t4 -/* 0C0270 7F08B700 27AB004C */ addiu $t3, $sp, 0x4c -/* 0C0274 7F08B704 014B3021 */ addu $a2, $t2, $t3 -/* 0C0278 7F08B708 24A5500C */ addiu $a1, %lo(aS3d) # addiu $a1, $a1, 0x500c -/* 0C027C 7F08B70C 0C002B29 */ jal sprintf -/* 0C0280 7F08B710 27A40084 */ addiu $a0, $sp, 0x84 -/* 0C0284 7F08B714 0C001145 */ jal viGetViewLeft -/* 0C0288 7F08B718 00000000 */ nop -/* 0C028C 7F08B71C 244E0011 */ addiu $t6, $v0, 0x11 -/* 0C0290 7F08B720 0C001149 */ jal viGetViewTop -/* 0C0294 7F08B724 AFAE0080 */ sw $t6, 0x80($sp) -/* 0C0298 7F08B728 24460011 */ addiu $a2, $v0, 0x11 -/* 0C029C 7F08B72C 24CF000A */ addiu $t7, $a2, 0xa -/* 0C02A0 7F08B730 AFAF0074 */ sw $t7, 0x74($sp) -/* 0C02A4 7F08B734 AFA6007C */ sw $a2, 0x7c($sp) -/* 0C02A8 7F08B738 0FC2B652 */ jal microcode_constructor -/* 0C02AC 7F08B73C 02002025 */ move $a0, $s0 -/* 0C02B0 7F08B740 0C001107 */ jal viGetX -/* 0C02B4 7F08B744 00408025 */ move $s0, $v0 -/* 0C02B8 7F08B748 8FB80074 */ lw $t8, 0x74($sp) -/* 0C02BC 7F08B74C 24080064 */ li $t0, 100 -/* 0C02C0 7F08B750 AFA80014 */ sw $t0, 0x14($sp) -/* 0C02C4 7F08B754 27190001 */ addiu $t9, $t8, 1 -/* 0C02C8 7F08B758 AFB90010 */ sw $t9, 0x10($sp) -/* 0C02CC 7F08B75C 8FA6007C */ lw $a2, 0x7c($sp) -/* 0C02D0 7F08B760 02002025 */ move $a0, $s0 -/* 0C02D4 7F08B764 00002825 */ move $a1, $zero -/* 0C02D8 7F08B768 0FC2B6F1 */ jal microcode_constructor_related_to_menus -/* 0C02DC 7F08B76C 00403825 */ move $a3, $v0 -/* 0C02E0 7F08B770 0C001107 */ jal viGetX -/* 0C02E4 7F08B774 00408025 */ move $s0, $v0 -/* 0C02E8 7F08B778 0C00110B */ jal viGetY -/* 0C02EC 7F08B77C A7A20048 */ sh $v0, 0x48($sp) -/* 0C02F0 7F08B780 3C098004 */ lui $t1, %hi(ptrFontBankGothicChars) # $t1, 0x8004 -/* 0C02F4 7F08B784 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0C02F8 7F08B788 8DAD0EDC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0C02FC 7F08B78C 8D290EE0 */ lw $t1, %lo(ptrFontBankGothicChars)($t1) -/* 0C0300 7F08B790 87AA0048 */ lh $t2, 0x48($sp) -/* 0C0304 7F08B794 240CFFFF */ li $t4, -1 -/* 0C0308 7F08B798 AFAC0018 */ sw $t4, 0x18($sp) -/* 0C030C 7F08B79C 02002025 */ move $a0, $s0 -/* 0C0310 7F08B7A0 27A50080 */ addiu $a1, $sp, 0x80 -/* 0C0314 7F08B7A4 27A6007C */ addiu $a2, $sp, 0x7c -/* 0C0318 7F08B7A8 27A700C4 */ addiu $a3, $sp, 0xc4 -/* 0C031C 7F08B7AC AFA20020 */ sw $v0, 0x20($sp) -/* 0C0320 7F08B7B0 AFA00024 */ sw $zero, 0x24($sp) -/* 0C0324 7F08B7B4 AFA00028 */ sw $zero, 0x28($sp) -/* 0C0328 7F08B7B8 AFAD0014 */ sw $t5, 0x14($sp) -/* 0C032C 7F08B7BC AFA90010 */ sw $t1, 0x10($sp) -/* 0C0330 7F08B7C0 0FC2B99B */ jal textRender -/* 0C0334 7F08B7C4 AFAA001C */ sw $t2, 0x1c($sp) -/* 0C0338 7F08B7C8 0C001145 */ jal viGetViewLeft -/* 0C033C 7F08B7CC 00408025 */ move $s0, $v0 -/* 0C0340 7F08B7D0 244B0057 */ addiu $t3, $v0, 0x57 -/* 0C0344 7F08B7D4 0C001107 */ jal viGetX -/* 0C0348 7F08B7D8 AFAB0080 */ sw $t3, 0x80($sp) -/* 0C034C 7F08B7DC 0C00110B */ jal viGetY -/* 0C0350 7F08B7E0 A7A20048 */ sh $v0, 0x48($sp) -/* 0C0354 7F08B7E4 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) # $t6, 0x8004 -/* 0C0358 7F08B7E8 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0C035C 7F08B7EC 8DEF0EDC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0C0360 7F08B7F0 8DCE0EE0 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0C0364 7F08B7F4 87B90048 */ lh $t9, 0x48($sp) -/* 0C0368 7F08B7F8 2418FFFF */ li $t8, -1 -/* 0C036C 7F08B7FC AFB80018 */ sw $t8, 0x18($sp) -/* 0C0370 7F08B800 02002025 */ move $a0, $s0 -/* 0C0374 7F08B804 27A50080 */ addiu $a1, $sp, 0x80 -/* 0C0378 7F08B808 27A6007C */ addiu $a2, $sp, 0x7c -/* 0C037C 7F08B80C 27A700B4 */ addiu $a3, $sp, 0xb4 -/* 0C0380 7F08B810 AFA20020 */ sw $v0, 0x20($sp) -/* 0C0384 7F08B814 AFA00024 */ sw $zero, 0x24($sp) -/* 0C0388 7F08B818 AFA00028 */ sw $zero, 0x28($sp) -/* 0C038C 7F08B81C AFAF0014 */ sw $t7, 0x14($sp) -/* 0C0390 7F08B820 AFAE0010 */ sw $t6, 0x10($sp) -/* 0C0394 7F08B824 0FC2B99B */ jal textRender -/* 0C0398 7F08B828 AFB9001C */ sw $t9, 0x1c($sp) -/* 0C039C 7F08B82C 0C001145 */ jal viGetViewLeft -/* 0C03A0 7F08B830 00408025 */ move $s0, $v0 -/* 0C03A4 7F08B834 2448008D */ addiu $t0, $v0, 0x8d -/* 0C03A8 7F08B838 0C001107 */ jal viGetX -/* 0C03AC 7F08B83C AFA80080 */ sw $t0, 0x80($sp) -/* 0C03B0 7F08B840 0C00110B */ jal viGetY -/* 0C03B4 7F08B844 A7A20048 */ sh $v0, 0x48($sp) -/* 0C03B8 7F08B848 3C098004 */ lui $t1, %hi(ptrFontBankGothicChars) # $t1, 0x8004 -/* 0C03BC 7F08B84C 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0C03C0 7F08B850 8DAD0EDC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0C03C4 7F08B854 8D290EE0 */ lw $t1, %lo(ptrFontBankGothicChars)($t1) -/* 0C03C8 7F08B858 87AA0048 */ lh $t2, 0x48($sp) -/* 0C03CC 7F08B85C 240CFFFF */ li $t4, -1 -/* 0C03D0 7F08B860 AFAC0018 */ sw $t4, 0x18($sp) -/* 0C03D4 7F08B864 02002025 */ move $a0, $s0 -/* 0C03D8 7F08B868 27A50080 */ addiu $a1, $sp, 0x80 -/* 0C03DC 7F08B86C 27A6007C */ addiu $a2, $sp, 0x7c -/* 0C03E0 7F08B870 27A700A4 */ addiu $a3, $sp, 0xa4 -/* 0C03E4 7F08B874 AFA20020 */ sw $v0, 0x20($sp) -/* 0C03E8 7F08B878 AFA00024 */ sw $zero, 0x24($sp) -/* 0C03EC 7F08B87C AFA00028 */ sw $zero, 0x28($sp) -/* 0C03F0 7F08B880 AFAD0014 */ sw $t5, 0x14($sp) -/* 0C03F4 7F08B884 AFA90010 */ sw $t1, 0x10($sp) -/* 0C03F8 7F08B888 0FC2B99B */ jal textRender -/* 0C03FC 7F08B88C AFAA001C */ sw $t2, 0x1c($sp) -/* 0C0400 7F08B890 0C001145 */ jal viGetViewLeft -/* 0C0404 7F08B894 00408025 */ move $s0, $v0 -/* 0C0408 7F08B898 244B00C3 */ addiu $t3, $v0, 0xc3 -/* 0C040C 7F08B89C 0C001107 */ jal viGetX -/* 0C0410 7F08B8A0 AFAB0080 */ sw $t3, 0x80($sp) -/* 0C0414 7F08B8A4 0C00110B */ jal viGetY -/* 0C0418 7F08B8A8 A7A20048 */ sh $v0, 0x48($sp) -/* 0C041C 7F08B8AC 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) # $t6, 0x8004 -/* 0C0420 7F08B8B0 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0C0424 7F08B8B4 8DEF0EDC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0C0428 7F08B8B8 8DCE0EE0 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0C042C 7F08B8BC 87B90048 */ lh $t9, 0x48($sp) -/* 0C0430 7F08B8C0 2418FFFF */ li $t8, -1 -/* 0C0434 7F08B8C4 AFB80018 */ sw $t8, 0x18($sp) -/* 0C0438 7F08B8C8 02002025 */ move $a0, $s0 -/* 0C043C 7F08B8CC 27A50080 */ addiu $a1, $sp, 0x80 -/* 0C0440 7F08B8D0 27A6007C */ addiu $a2, $sp, 0x7c -/* 0C0444 7F08B8D4 27A70094 */ addiu $a3, $sp, 0x94 -/* 0C0448 7F08B8D8 AFA20020 */ sw $v0, 0x20($sp) -/* 0C044C 7F08B8DC AFA00024 */ sw $zero, 0x24($sp) -/* 0C0450 7F08B8E0 AFA00028 */ sw $zero, 0x28($sp) -/* 0C0454 7F08B8E4 AFAF0014 */ sw $t7, 0x14($sp) -/* 0C0458 7F08B8E8 AFAE0010 */ sw $t6, 0x10($sp) -/* 0C045C 7F08B8EC 0FC2B99B */ jal textRender -/* 0C0460 7F08B8F0 AFB9001C */ sw $t9, 0x1c($sp) -/* 0C0464 7F08B8F4 0C001145 */ jal viGetViewLeft -/* 0C0468 7F08B8F8 00408025 */ move $s0, $v0 -/* 0C046C 7F08B8FC 244800F9 */ addiu $t0, $v0, 0xf9 -/* 0C0470 7F08B900 0C001107 */ jal viGetX -/* 0C0474 7F08B904 AFA80080 */ sw $t0, 0x80($sp) -/* 0C0478 7F08B908 0C00110B */ jal viGetY -/* 0C047C 7F08B90C A7A20048 */ sh $v0, 0x48($sp) -/* 0C0480 7F08B910 3C098004 */ lui $t1, %hi(ptrFontBankGothicChars) # $t1, 0x8004 -/* 0C0484 7F08B914 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0C0488 7F08B918 8DAD0EDC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0C048C 7F08B91C 8D290EE0 */ lw $t1, %lo(ptrFontBankGothicChars)($t1) -/* 0C0490 7F08B920 87AA0048 */ lh $t2, 0x48($sp) -/* 0C0494 7F08B924 240CFFFF */ li $t4, -1 -/* 0C0498 7F08B928 AFAC0018 */ sw $t4, 0x18($sp) -/* 0C049C 7F08B92C 02002025 */ move $a0, $s0 -/* 0C04A0 7F08B930 27A50080 */ addiu $a1, $sp, 0x80 -/* 0C04A4 7F08B934 27A6007C */ addiu $a2, $sp, 0x7c -/* 0C04A8 7F08B938 27A70084 */ addiu $a3, $sp, 0x84 -/* 0C04AC 7F08B93C AFA20020 */ sw $v0, 0x20($sp) -/* 0C04B0 7F08B940 AFA00024 */ sw $zero, 0x24($sp) -/* 0C04B4 7F08B944 AFA00028 */ sw $zero, 0x28($sp) -/* 0C04B8 7F08B948 AFAD0014 */ sw $t5, 0x14($sp) -/* 0C04BC 7F08B94C AFA90010 */ sw $t1, 0x10($sp) -/* 0C04C0 7F08B950 0FC2B99B */ jal textRender -/* 0C04C4 7F08B954 AFAA001C */ sw $t2, 0x1c($sp) -/* 0C04C8 7F08B958 0FC2B6A8 */ jal combiner_bayer_lod_perspective -/* 0C04CC 7F08B95C 00402025 */ move $a0, $v0 -/* 0C04D0 7F08B960 00408025 */ move $s0, $v0 -.Ljp7F08B964: -/* 0C04D4 7F08B964 8FBF003C */ lw $ra, 0x3c($sp) -/* 0C04D8 7F08B968 02001025 */ move $v0, $s0 -/* 0C04DC 7F08B96C 8FB00038 */ lw $s0, 0x38($sp) -/* 0C04E0 7F08B970 03E00008 */ jr $ra -/* 0C04E4 7F08B974 27BD00E8 */ addiu $sp, $sp, 0xe8 -) -#endif - -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_8004AE90 -.word 0x40490fdb /*3.1415927*/ - -.text -glabel sub_GAME_7F08AAE8 -/* 0BD720 7F08AD30 3C0E8003 */ lui $t6, %hi(g_UpperTextDisplayFlag) # $t6, 0x8003 -/* 0BD724 7F08AD34 8DCE1DFC */ lw $t6, %lo(g_UpperTextDisplayFlag)($t6) -/* 0BD728 7F08AD38 27BDFF18 */ addiu $sp, $sp, -0xe8 -/* 0BD72C 7F08AD3C AFB00038 */ sw $s0, 0x38($sp) -/* 0BD730 7F08AD40 00808025 */ move $s0, $a0 -/* 0BD734 7F08AD44 15C000B2 */ bnez $t6, .L7F08B010 -/* 0BD738 7F08AD48 AFBF003C */ sw $ra, 0x3c($sp) -/* 0BD73C 7F08AD4C 3C0F8003 */ lui $t7, %hi(upper_text_window_timer) # $t7, 0x8003 -/* 0BD740 7F08AD50 8DEF1DF8 */ lw $t7, %lo(upper_text_window_timer)($t7) -/* 0BD744 7F08AD54 3C188003 */ lui $t8, %hi(upper_text_buffer_index) # $t8, 0x8003 -/* 0BD748 7F08AD58 05E000AD */ bltz $t7, .L7F08B010 -/* 0BD74C 7F08AD5C 00000000 */ nop -/* 0BD750 7F08AD60 8F181DF0 */ lw $t8, %lo(upper_text_buffer_index)($t8) -/* 0BD754 7F08AD64 3C088007 */ lui $t0, %hi(dword_CODE_bss_80079DC8) -/* 0BD758 7F08AD68 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 -/* 0BD75C 7F08AD6C 0018C880 */ sll $t9, $t8, 2 -/* 0BD760 7F08AD70 0338C821 */ addu $t9, $t9, $t8 -/* 0BD764 7F08AD74 0019C880 */ sll $t9, $t9, 2 -/* 0BD768 7F08AD78 0338C823 */ subu $t9, $t9, $t8 -/* 0BD76C 7F08AD7C 0019C8C0 */ sll $t9, $t9, 3 -/* 0BD770 7F08AD80 0338C823 */ subu $t9, $t9, $t8 -/* 0BD774 7F08AD84 01194021 */ addu $t0, $t0, $t9 -/* 0BD778 7F08AD88 910887A8 */ lbu $t0, %lo(dword_CODE_bss_80079DC8)($t0) -/* 0BD77C 7F08AD8C 110000A0 */ beqz $t0, .L7F08B010 -/* 0BD780 7F08AD90 00000000 */ nop -/* 0BD784 7F08AD94 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0BD788 7F08AD98 8D2A29BC */ lw $t2, 0x29bc($t1) -/* 0BD78C 7F08AD9C 1540009C */ bnez $t2, .L7F08B010 -/* 0BD790 7F08ADA0 00000000 */ nop -/* 0BD794 7F08ADA4 0FC2B016 */ jal microcode_constructor -/* 0BD798 7F08ADA8 00000000 */ nop -/* 0BD79C 7F08ADAC 3C0B8003 */ lui $t3, %hi(upper_text_buffer_index) # $t3, 0x8003 -/* 0BD7A0 7F08ADB0 8D6B1DF0 */ lw $t3, %lo(upper_text_buffer_index)($t3) -/* 0BD7A4 7F08ADB4 3C0E8004 */ lui $t6, %hi(ptrFontZurichBold) # $t6, 0x8004 -/* 0BD7A8 7F08ADB8 8DCEAB04 */ lw $t6, %lo(ptrFontZurichBold)($t6) -/* 0BD7AC 7F08ADBC 000B6080 */ sll $t4, $t3, 2 -/* 0BD7B0 7F08ADC0 018B6021 */ addu $t4, $t4, $t3 -/* 0BD7B4 7F08ADC4 000C6080 */ sll $t4, $t4, 2 -/* 0BD7B8 7F08ADC8 018B6023 */ subu $t4, $t4, $t3 -/* 0BD7BC 7F08ADCC 000C60C0 */ sll $t4, $t4, 3 -/* 0BD7C0 7F08ADD0 3C0D8007 */ lui $t5, %hi(dword_CODE_bss_80079DC8) # $t5, 0x8007 -/* 0BD7C4 7F08ADD4 25AD87A8 */ addiu $t5, %lo(dword_CODE_bss_80079DC8) # addiu $t5, $t5, -0x7858 -/* 0BD7C8 7F08ADD8 3C078004 */ lui $a3, %hi(ptrFontZurichBoldChars) # $a3, 0x8004 -/* 0BD7CC 7F08ADDC 018B6023 */ subu $t4, $t4, $t3 -/* 0BD7D0 7F08ADE0 00408025 */ move $s0, $v0 -/* 0BD7D4 7F08ADE4 AFA000D4 */ sw $zero, 0xd4($sp) -/* 0BD7D8 7F08ADE8 AFA000D8 */ sw $zero, 0xd8($sp) -/* 0BD7DC 7F08ADEC 018D3021 */ addu $a2, $t4, $t5 -/* 0BD7E0 7F08ADF0 8CE7AB08 */ lw $a3, %lo(ptrFontZurichBoldChars)($a3) -/* 0BD7E4 7F08ADF4 27A400D8 */ addiu $a0, $sp, 0xd8 -/* 0BD7E8 7F08ADF8 27A500D4 */ addiu $a1, $sp, 0xd4 -/* 0BD7EC 7F08ADFC AFA00014 */ sw $zero, 0x14($sp) -/* 0BD7F0 7F08AE00 0FC2B713 */ jal textMeasure -/* 0BD7F4 7F08AE04 AFAE0010 */ sw $t6, 0x10($sp) -/* 0BD7F8 7F08AE08 3C0F8003 */ lui $t7, %hi(cameraBufferToggle) # $t7, 0x8003 -/* 0BD7FC 7F08AE0C 8DEF197C */ lw $t7, %lo(cameraBufferToggle)($t7) -/* 0BD800 7F08AE10 11E0001B */ beqz $t7, .L7F08AE80 -/* 0BD804 7F08AE14 00000000 */ nop -/* 0BD808 7F08AE18 0C000FD9 */ jal viGetViewLeft -/* 0BD80C 7F08AE1C 00000000 */ nop -/* 0BD810 7F08AE20 24580046 */ addiu $t8, $v0, 0x46 -/* 0BD814 7F08AE24 0C000FDD */ jal viGetViewTop -/* 0BD818 7F08AE28 AFB800E4 */ sw $t8, 0xe4($sp) -/* 0BD81C 7F08AE2C 00401825 */ move $v1, $v0 -/* 0BD820 7F08AE30 24630020 */ addiu $v1, $v1, 0x20 -/* 0BD824 7F08AE34 2404000B */ li $a0, 11 -/* 0BD828 7F08AE38 0064001A */ div $zero, $v1, $a0 -/* 0BD82C 7F08AE3C 14800002 */ bnez $a0, .L7F08AE48 -/* 0BD830 7F08AE40 00000000 */ nop -/* 0BD834 7F08AE44 0007000D */ break 7 -.L7F08AE48: -/* 0BD838 7F08AE48 2401FFFF */ li $at, -1 -/* 0BD83C 7F08AE4C 14810004 */ bne $a0, $at, .L7F08AE60 -/* 0BD840 7F08AE50 3C018000 */ lui $at, 0x8000 -/* 0BD844 7F08AE54 14610002 */ bne $v1, $at, .L7F08AE60 -/* 0BD848 7F08AE58 00000000 */ nop -/* 0BD84C 7F08AE5C 0006000D */ break 6 -.L7F08AE60: -/* 0BD850 7F08AE60 00001812 */ mflo $v1 -/* 0BD854 7F08AE64 00000000 */ nop -/* 0BD858 7F08AE68 00000000 */ nop -/* 0BD85C 7F08AE6C 00640019 */ multu $v1, $a0 -/* 0BD860 7F08AE70 00001812 */ mflo $v1 -/* 0BD864 7F08AE74 2463FFFE */ addiu $v1, $v1, -2 -/* 0BD868 7F08AE78 10000008 */ b .L7F08AE9C -/* 0BD86C 7F08AE7C 8FA800D8 */ lw $t0, 0xd8($sp) -.L7F08AE80: -/* 0BD870 7F08AE80 0C000FD9 */ jal viGetViewLeft -/* 0BD874 7F08AE84 00000000 */ nop -/* 0BD878 7F08AE88 2459001E */ addiu $t9, $v0, 0x1e -/* 0BD87C 7F08AE8C 0C000FDD */ jal viGetViewTop -/* 0BD880 7F08AE90 AFB900E4 */ sw $t9, 0xe4($sp) -/* 0BD884 7F08AE94 24430010 */ addiu $v1, $v0, 0x10 -/* 0BD888 7F08AE98 8FA800D8 */ lw $t0, 0xd8($sp) -.L7F08AE9C: -/* 0BD88C 7F08AE9C AFA300E0 */ sw $v1, 0xe0($sp) -/* 0BD890 7F08AEA0 00684821 */ addu $t1, $v1, $t0 -/* 0BD894 7F08AEA4 0C000F9B */ jal viGetX -/* 0BD898 7F08AEA8 AFA900DC */ sw $t1, 0xdc($sp) -/* 0BD89C 7F08AEAC 8FA300E0 */ lw $v1, 0xe0($sp) -/* 0BD8A0 7F08AEB0 8FAA00DC */ lw $t2, 0xdc($sp) -/* 0BD8A4 7F08AEB4 240B0064 */ li $t3, 100 -/* 0BD8A8 7F08AEB8 AFAB0014 */ sw $t3, 0x14($sp) -/* 0BD8AC 7F08AEBC 02002025 */ move $a0, $s0 -/* 0BD8B0 7F08AEC0 00002825 */ move $a1, $zero -/* 0BD8B4 7F08AEC4 00403825 */ move $a3, $v0 -/* 0BD8B8 7F08AEC8 2466FFFE */ addiu $a2, $v1, -2 -/* 0BD8BC 7F08AECC 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 0BD8C0 7F08AED0 AFAA0010 */ sw $t2, 0x10($sp) -/* 0BD8C4 7F08AED4 3C0C8004 */ lui $t4, %hi(j_text_trigger) # $t4, 0x8004 -/* 0BD8C8 7F08AED8 8D8C1150 */ lw $t4, %lo(j_text_trigger)($t4) -/* 0BD8CC 7F08AEDC 00408025 */ move $s0, $v0 -/* 0BD8D0 7F08AEE0 11800026 */ beqz $t4, .L7F08AF7C -/* 0BD8D4 7F08AEE4 00000000 */ nop -/* 0BD8D8 7F08AEE8 0C000F9B */ jal viGetX -/* 0BD8DC 7F08AEEC 00000000 */ nop -/* 0BD8E0 7F08AEF0 0C000F9F */ jal viGetY -/* 0BD8E4 7F08AEF4 A7A20048 */ sh $v0, 0x48($sp) -/* 0BD8E8 7F08AEF8 3C0D8003 */ lui $t5, %hi(upper_text_buffer_index) # $t5, 0x8003 -/* 0BD8EC 7F08AEFC 8DAD1DF0 */ lw $t5, %lo(upper_text_buffer_index)($t5) -/* 0BD8F0 7F08AF00 3C188004 */ lui $t8, %hi(ptrFontZurichBoldChars) # $t8, 0x8004 -/* 0BD8F4 7F08AF04 3C198004 */ lui $t9, %hi(ptrFontZurichBold) # $t9, 0x8004 -/* 0BD8F8 7F08AF08 000D7080 */ sll $t6, $t5, 2 -/* 0BD8FC 7F08AF0C 01CD7021 */ addu $t6, $t6, $t5 -/* 0BD900 7F08AF10 000E7080 */ sll $t6, $t6, 2 -/* 0BD904 7F08AF14 01CD7023 */ subu $t6, $t6, $t5 -/* 0BD908 7F08AF18 8F39AB04 */ lw $t9, %lo(ptrFontZurichBold)($t9) -/* 0BD90C 7F08AF1C 8F18AB08 */ lw $t8, %lo(ptrFontZurichBoldChars)($t8) -/* 0BD910 7F08AF20 87AA0048 */ lh $t2, 0x48($sp) -/* 0BD914 7F08AF24 000E70C0 */ sll $t6, $t6, 3 -/* 0BD918 7F08AF28 3C0F8007 */ lui $t7, %hi(dword_CODE_bss_80079DC8) # $t7, 0x8007 -/* 0BD91C 7F08AF2C 3C096464 */ lui $t1, (0x646464FF >> 16) # lui $t1, 0x6464 -/* 0BD920 7F08AF30 352964FF */ ori $t1, (0x646464FF & 0xFFFF) # ori $t1, $t1, 0x64ff -/* 0BD924 7F08AF34 25EF87A8 */ addiu $t7, %lo(dword_CODE_bss_80079DC8) # addiu $t7, $t7, -0x7858 -/* 0BD928 7F08AF38 2408FFFF */ li $t0, -1 -/* 0BD92C 7F08AF3C 01CD7023 */ subu $t6, $t6, $t5 -/* 0BD930 7F08AF40 01CF3821 */ addu $a3, $t6, $t7 -/* 0BD934 7F08AF44 AFA80018 */ sw $t0, 0x18($sp) -/* 0BD938 7F08AF48 AFA9001C */ sw $t1, 0x1c($sp) -/* 0BD93C 7F08AF4C 02002025 */ move $a0, $s0 -/* 0BD940 7F08AF50 27A500E4 */ addiu $a1, $sp, 0xe4 -/* 0BD944 7F08AF54 27A600E0 */ addiu $a2, $sp, 0xe0 -/* 0BD948 7F08AF58 AFA20024 */ sw $v0, 0x24($sp) -/* 0BD94C 7F08AF5C AFA00028 */ sw $zero, 0x28($sp) -/* 0BD950 7F08AF60 AFA0002C */ sw $zero, 0x2c($sp) -/* 0BD954 7F08AF64 AFB90014 */ sw $t9, 0x14($sp) -/* 0BD958 7F08AF68 AFB80010 */ sw $t8, 0x10($sp) -/* 0BD95C 7F08AF6C 0FC2B66B */ jal textRenderOutlined -/* 0BD960 7F08AF70 AFAA0020 */ sw $t2, 0x20($sp) -/* 0BD964 7F08AF74 10000022 */ b .L7F08B000 -/* 0BD968 7F08AF78 00408025 */ move $s0, $v0 -.L7F08AF7C: -/* 0BD96C 7F08AF7C 0C000F9B */ jal viGetX -/* 0BD970 7F08AF80 00000000 */ nop -/* 0BD974 7F08AF84 0C000F9F */ jal viGetY -/* 0BD978 7F08AF88 A7A20048 */ sh $v0, 0x48($sp) -/* 0BD97C 7F08AF8C 3C0B8003 */ lui $t3, %hi(upper_text_buffer_index) # $t3, 0x8003 -/* 0BD980 7F08AF90 8D6B1DF0 */ lw $t3, %lo(upper_text_buffer_index)($t3) -/* 0BD984 7F08AF94 3C0E8004 */ lui $t6, %hi(ptrFontZurichBoldChars) # $t6, 0x8004 -/* 0BD988 7F08AF98 3C0F8004 */ lui $t7, %hi(ptrFontZurichBold) # $t7, 0x8004 -/* 0BD98C 7F08AF9C 000B6080 */ sll $t4, $t3, 2 -/* 0BD990 7F08AFA0 018B6021 */ addu $t4, $t4, $t3 -/* 0BD994 7F08AFA4 000C6080 */ sll $t4, $t4, 2 -/* 0BD998 7F08AFA8 018B6023 */ subu $t4, $t4, $t3 -/* 0BD99C 7F08AFAC 8DEFAB04 */ lw $t7, %lo(ptrFontZurichBold)($t7) -/* 0BD9A0 7F08AFB0 8DCEAB08 */ lw $t6, %lo(ptrFontZurichBoldChars)($t6) -/* 0BD9A4 7F08AFB4 87B90048 */ lh $t9, 0x48($sp) -/* 0BD9A8 7F08AFB8 000C60C0 */ sll $t4, $t4, 3 -/* 0BD9AC 7F08AFBC 3C0D8007 */ lui $t5, %hi(dword_CODE_bss_80079DC8) # $t5, 0x8007 -/* 0BD9B0 7F08AFC0 25AD87A8 */ addiu $t5, %lo(dword_CODE_bss_80079DC8) # addiu $t5, $t5, -0x7858 -/* 0BD9B4 7F08AFC4 2418FFFF */ li $t8, -1 -/* 0BD9B8 7F08AFC8 018B6023 */ subu $t4, $t4, $t3 -/* 0BD9BC 7F08AFCC 018D3821 */ addu $a3, $t4, $t5 -/* 0BD9C0 7F08AFD0 AFB80018 */ sw $t8, 0x18($sp) -/* 0BD9C4 7F08AFD4 02002025 */ move $a0, $s0 -/* 0BD9C8 7F08AFD8 27A500E4 */ addiu $a1, $sp, 0xe4 -/* 0BD9CC 7F08AFDC 27A600E0 */ addiu $a2, $sp, 0xe0 -/* 0BD9D0 7F08AFE0 AFA20020 */ sw $v0, 0x20($sp) -/* 0BD9D4 7F08AFE4 AFA00024 */ sw $zero, 0x24($sp) -/* 0BD9D8 7F08AFE8 AFA00028 */ sw $zero, 0x28($sp) -/* 0BD9DC 7F08AFEC AFAF0014 */ sw $t7, 0x14($sp) -/* 0BD9E0 7F08AFF0 AFAE0010 */ sw $t6, 0x10($sp) -/* 0BD9E4 7F08AFF4 0FC2B35F */ jal textRender -/* 0BD9E8 7F08AFF8 AFB9001C */ sw $t9, 0x1c($sp) -/* 0BD9EC 7F08AFFC 00408025 */ move $s0, $v0 -.L7F08B000: -/* 0BD9F0 7F08B000 0FC2B06C */ jal combiner_bayer_lod_perspective -/* 0BD9F4 7F08B004 02002025 */ move $a0, $s0 -/* 0BD9F8 7F08B008 100000F1 */ b .L7F08B3D0 -/* 0BD9FC 7F08B00C 00408025 */ move $s0, $v0 -.L7F08B010: -/* 0BDA00 7F08B010 0FC2410E */ jal get_debug_testingmanpos_flag -/* 0BDA04 7F08B014 00000000 */ nop -/* 0BDA08 7F08B018 104000ED */ beqz $v0, .L7F08B3D0 -/* 0BDA0C 7F08B01C 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BDA10 7F08B020 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BDA14 7F08B024 C4400498 */ lwc1 $f0, 0x498($v0) -/* 0BDA18 7F08B028 C44E04A0 */ lwc1 $f14, 0x4a0($v0) -/* 0BDA1C 7F08B02C 0FC16BB8 */ jal atan2f -/* 0BDA20 7F08B030 46000307 */ neg.s $f12, $f0 -/* 0BDA24 7F08B034 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 0BDA28 7F08B038 44812000 */ mtc1 $at, $f4 -/* 0BDA2C 7F08B03C 3C018005 */ lui $at, %hi(D_8004AE90) # $at, 0x8005 -/* 0BDA30 7F08B040 C428AE90 */ lwc1 $f8, %lo(D_8004AE90)($at) -/* 0BDA34 7F08B044 46040182 */ mul.s $f6, $f0, $f4 -/* 0BDA38 7F08B048 3C0B8003 */ lui $t3, %hi(D_800368B8) # $t3, 0x8003 -/* 0BDA3C 7F08B04C 256B1E00 */ addiu $t3, %lo(D_800368B8) # addiu $t3, $t3, 0x1e00 -/* 0BDA40 7F08B050 27AA004C */ addiu $t2, $sp, 0x4c -/* 0BDA44 7F08B054 3C0F8007 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8007 -/* 0BDA48 7F08B058 46083283 */ div.s $f10, $f6, $f8 -/* 0BDA4C 7F08B05C 4600540D */ trunc.w.s $f16, $f10 -/* 0BDA50 7F08B060 44098000 */ mfc1 $t1, $f16 -/* 0BDA54 7F08B064 00000000 */ nop -/* 0BDA58 7F08B068 AFA90068 */ sw $t1, 0x68($sp) -/* 0BDA5C 7F08B06C 8D610000 */ lw $at, ($t3) -/* 0BDA60 7F08B070 8D6E0004 */ lw $t6, 4($t3) -/* 0BDA64 7F08B074 AD410000 */ sw $at, ($t2) -/* 0BDA68 7F08B078 8D610008 */ lw $at, 8($t3) -/* 0BDA6C 7F08B07C AD4E0004 */ sw $t6, 4($t2) -/* 0BDA70 7F08B080 8D6E000C */ lw $t6, 0xc($t3) -/* 0BDA74 7F08B084 AD410008 */ sw $at, 8($t2) -/* 0BDA78 7F08B088 8D610010 */ lw $at, 0x10($t3) -/* 0BDA7C 7F08B08C AD4E000C */ sw $t6, 0xc($t2) -/* 0BDA80 7F08B090 8D6E0014 */ lw $t6, 0x14($t3) -/* 0BDA84 7F08B094 AD410010 */ sw $at, 0x10($t2) -/* 0BDA88 7F08B098 9961001A */ lwr $at, 0x1a($t3) -/* 0BDA8C 7F08B09C AD4E0014 */ sw $t6, 0x14($t2) -/* 0BDA90 7F08B0A0 B941001A */ swr $at, 0x1a($t2) -/* 0BDA94 7F08B0A4 8DEF8BC0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0BDA98 7F08B0A8 8DF80488 */ lw $t8, 0x488($t7) -/* 0BDA9C 7F08B0AC 0FC2D447 */ jal bgDebPrintROOMID -/* 0BDAA0 7F08B0B0 93040003 */ lbu $a0, 3($t8) -/* 0BDAA4 7F08B0B4 3C058005 */ lui $a1, %hi(a8s) # $a1, 0x8005 -/* 0BDAA8 7F08B0B8 24A5AB90 */ addiu $a1, %lo(a8s) # addiu $a1, $a1, -0x5470 -/* 0BDAAC 7F08B0BC 27A400C4 */ addiu $a0, $sp, 0xc4 -/* 0BDAB0 7F08B0C0 0C00283D */ jal sprintf -/* 0BDAB4 7F08B0C4 00403025 */ move $a2, $v0 -/* 0BDAB8 7F08B0C8 3C198007 */ lui $t9, %hi(g_CurrentPlayer) # $t9, 0x8007 -/* 0BDABC 7F08B0CC 8F398BC0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0BDAC0 7F08B0D0 3C058005 */ lui $a1, %hi(aX4_0f) # $a1, 0x8005 -/* 0BDAC4 7F08B0D4 24A5AB94 */ addiu $a1, %lo(aX4_0f) # addiu $a1, $a1, -0x546c -/* 0BDAC8 7F08B0D8 C732048C */ lwc1 $f18, 0x48c($t9) -/* 0BDACC 7F08B0DC 27A400B4 */ addiu $a0, $sp, 0xb4 -/* 0BDAD0 7F08B0E0 46009121 */ cvt.d.s $f4, $f18 -/* 0BDAD4 7F08B0E4 44072000 */ mfc1 $a3, $f4 -/* 0BDAD8 7F08B0E8 44062800 */ mfc1 $a2, $f5 -/* 0BDADC 7F08B0EC 0C00283D */ jal sprintf -/* 0BDAE0 7F08B0F0 00000000 */ nop -/* 0BDAE4 7F08B0F4 3C088007 */ lui $t0, %hi(g_CurrentPlayer) # $t0, 0x8007 -/* 0BDAE8 7F08B0F8 8D088BC0 */ lw $t0, %lo(g_CurrentPlayer)($t0) -/* 0BDAEC 7F08B0FC 3C058005 */ lui $a1, %hi(aY4_0f) # $a1, 0x8005 -/* 0BDAF0 7F08B100 24A5AB9C */ addiu $a1, %lo(aY4_0f) # addiu $a1, $a1, -0x5464 -/* 0BDAF4 7F08B104 C5060490 */ lwc1 $f6, 0x490($t0) -/* 0BDAF8 7F08B108 27A400A4 */ addiu $a0, $sp, 0xa4 -/* 0BDAFC 7F08B10C 46003221 */ cvt.d.s $f8, $f6 -/* 0BDB00 7F08B110 44074000 */ mfc1 $a3, $f8 -/* 0BDB04 7F08B114 44064800 */ mfc1 $a2, $f9 -/* 0BDB08 7F08B118 0C00283D */ jal sprintf -/* 0BDB0C 7F08B11C 00000000 */ nop -/* 0BDB10 7F08B120 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 -/* 0BDB14 7F08B124 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0BDB18 7F08B128 3C058005 */ lui $a1, %hi(aZ4_0f) # $a1, 0x8005 -/* 0BDB1C 7F08B12C 24A5ABA4 */ addiu $a1, %lo(aZ4_0f) # addiu $a1, $a1, -0x545c -/* 0BDB20 7F08B130 C52A0494 */ lwc1 $f10, 0x494($t1) -/* 0BDB24 7F08B134 27A40094 */ addiu $a0, $sp, 0x94 -/* 0BDB28 7F08B138 46005421 */ cvt.d.s $f16, $f10 -/* 0BDB2C 7F08B13C 44078000 */ mfc1 $a3, $f16 -/* 0BDB30 7F08B140 44068800 */ mfc1 $a2, $f17 -/* 0BDB34 7F08B144 0C00283D */ jal sprintf -/* 0BDB38 7F08B148 00000000 */ nop -/* 0BDB3C 7F08B14C 8FA70068 */ lw $a3, 0x68($sp) -/* 0BDB40 7F08B150 2401002D */ li $at, 45 -/* 0BDB44 7F08B154 3C058005 */ lui $a1, %hi(aS3d) # $a1, 0x8005 -/* 0BDB48 7F08B158 24ED0016 */ addiu $t5, $a3, 0x16 -/* 0BDB4C 7F08B15C 01A1001A */ div $zero, $t5, $at -/* 0BDB50 7F08B160 00006012 */ mflo $t4 -/* 0BDB54 7F08B164 000C5080 */ sll $t2, $t4, 2 -/* 0BDB58 7F08B168 014C5023 */ subu $t2, $t2, $t4 -/* 0BDB5C 7F08B16C 27AB004C */ addiu $t3, $sp, 0x4c -/* 0BDB60 7F08B170 014B3021 */ addu $a2, $t2, $t3 -/* 0BDB64 7F08B174 24A5ABAC */ addiu $a1, %lo(aS3d) # addiu $a1, $a1, -0x5454 -/* 0BDB68 7F08B178 0C00283D */ jal sprintf -/* 0BDB6C 7F08B17C 27A40084 */ addiu $a0, $sp, 0x84 -/* 0BDB70 7F08B180 0C000FD9 */ jal viGetViewLeft -/* 0BDB74 7F08B184 00000000 */ nop -/* 0BDB78 7F08B188 244E0011 */ addiu $t6, $v0, 0x11 -/* 0BDB7C 7F08B18C 0C000FDD */ jal viGetViewTop -/* 0BDB80 7F08B190 AFAE0080 */ sw $t6, 0x80($sp) -/* 0BDB84 7F08B194 24460011 */ addiu $a2, $v0, 0x11 -/* 0BDB88 7F08B198 24CF000A */ addiu $t7, $a2, 0xa -/* 0BDB8C 7F08B19C AFAF0074 */ sw $t7, 0x74($sp) -/* 0BDB90 7F08B1A0 AFA6007C */ sw $a2, 0x7c($sp) -/* 0BDB94 7F08B1A4 0FC2B016 */ jal microcode_constructor -/* 0BDB98 7F08B1A8 02002025 */ move $a0, $s0 -/* 0BDB9C 7F08B1AC 0C000F9B */ jal viGetX -/* 0BDBA0 7F08B1B0 00408025 */ move $s0, $v0 -/* 0BDBA4 7F08B1B4 8FB80074 */ lw $t8, 0x74($sp) -/* 0BDBA8 7F08B1B8 24080064 */ li $t0, 100 -/* 0BDBAC 7F08B1BC AFA80014 */ sw $t0, 0x14($sp) -/* 0BDBB0 7F08B1C0 27190001 */ addiu $t9, $t8, 1 -/* 0BDBB4 7F08B1C4 AFB90010 */ sw $t9, 0x10($sp) -/* 0BDBB8 7F08B1C8 8FA6007C */ lw $a2, 0x7c($sp) -/* 0BDBBC 7F08B1CC 02002025 */ move $a0, $s0 -/* 0BDBC0 7F08B1D0 00002825 */ move $a1, $zero -/* 0BDBC4 7F08B1D4 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 0BDBC8 7F08B1D8 00403825 */ move $a3, $v0 -/* 0BDBCC 7F08B1DC 0C000F9B */ jal viGetX -/* 0BDBD0 7F08B1E0 00408025 */ move $s0, $v0 -/* 0BDBD4 7F08B1E4 0C000F9F */ jal viGetY -/* 0BDBD8 7F08B1E8 A7A20048 */ sh $v0, 0x48($sp) -/* 0BDBDC 7F08B1EC 3C098004 */ lui $t1, %hi(ptrFontBankGothicChars) # $t1, 0x8004 -/* 0BDBE0 7F08B1F0 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0BDBE4 7F08B1F4 8DADAAFC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0BDBE8 7F08B1F8 8D29AB00 */ lw $t1, %lo(ptrFontBankGothicChars)($t1) -/* 0BDBEC 7F08B1FC 87AA0048 */ lh $t2, 0x48($sp) -/* 0BDBF0 7F08B200 240CFFFF */ li $t4, -1 -/* 0BDBF4 7F08B204 AFAC0018 */ sw $t4, 0x18($sp) -/* 0BDBF8 7F08B208 02002025 */ move $a0, $s0 -/* 0BDBFC 7F08B20C 27A50080 */ addiu $a1, $sp, 0x80 -/* 0BDC00 7F08B210 27A6007C */ addiu $a2, $sp, 0x7c -/* 0BDC04 7F08B214 27A700C4 */ addiu $a3, $sp, 0xc4 -/* 0BDC08 7F08B218 AFA20020 */ sw $v0, 0x20($sp) -/* 0BDC0C 7F08B21C AFA00024 */ sw $zero, 0x24($sp) -/* 0BDC10 7F08B220 AFA00028 */ sw $zero, 0x28($sp) -/* 0BDC14 7F08B224 AFAD0014 */ sw $t5, 0x14($sp) -/* 0BDC18 7F08B228 AFA90010 */ sw $t1, 0x10($sp) -/* 0BDC1C 7F08B22C 0FC2B35F */ jal textRender -/* 0BDC20 7F08B230 AFAA001C */ sw $t2, 0x1c($sp) -/* 0BDC24 7F08B234 0C000FD9 */ jal viGetViewLeft -/* 0BDC28 7F08B238 00408025 */ move $s0, $v0 -/* 0BDC2C 7F08B23C 244B0057 */ addiu $t3, $v0, 0x57 -/* 0BDC30 7F08B240 0C000F9B */ jal viGetX -/* 0BDC34 7F08B244 AFAB0080 */ sw $t3, 0x80($sp) -/* 0BDC38 7F08B248 0C000F9F */ jal viGetY -/* 0BDC3C 7F08B24C A7A20048 */ sh $v0, 0x48($sp) -/* 0BDC40 7F08B250 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) # $t6, 0x8004 -/* 0BDC44 7F08B254 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0BDC48 7F08B258 8DEFAAFC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0BDC4C 7F08B25C 8DCEAB00 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0BDC50 7F08B260 87B90048 */ lh $t9, 0x48($sp) -/* 0BDC54 7F08B264 2418FFFF */ li $t8, -1 -/* 0BDC58 7F08B268 AFB80018 */ sw $t8, 0x18($sp) -/* 0BDC5C 7F08B26C 02002025 */ move $a0, $s0 -/* 0BDC60 7F08B270 27A50080 */ addiu $a1, $sp, 0x80 -/* 0BDC64 7F08B274 27A6007C */ addiu $a2, $sp, 0x7c -/* 0BDC68 7F08B278 27A700B4 */ addiu $a3, $sp, 0xb4 -/* 0BDC6C 7F08B27C AFA20020 */ sw $v0, 0x20($sp) -/* 0BDC70 7F08B280 AFA00024 */ sw $zero, 0x24($sp) -/* 0BDC74 7F08B284 AFA00028 */ sw $zero, 0x28($sp) -/* 0BDC78 7F08B288 AFAF0014 */ sw $t7, 0x14($sp) -/* 0BDC7C 7F08B28C AFAE0010 */ sw $t6, 0x10($sp) -/* 0BDC80 7F08B290 0FC2B35F */ jal textRender -/* 0BDC84 7F08B294 AFB9001C */ sw $t9, 0x1c($sp) -/* 0BDC88 7F08B298 0C000FD9 */ jal viGetViewLeft -/* 0BDC8C 7F08B29C 00408025 */ move $s0, $v0 -/* 0BDC90 7F08B2A0 2448008D */ addiu $t0, $v0, 0x8d -/* 0BDC94 7F08B2A4 0C000F9B */ jal viGetX -/* 0BDC98 7F08B2A8 AFA80080 */ sw $t0, 0x80($sp) -/* 0BDC9C 7F08B2AC 0C000F9F */ jal viGetY -/* 0BDCA0 7F08B2B0 A7A20048 */ sh $v0, 0x48($sp) -/* 0BDCA4 7F08B2B4 3C098004 */ lui $t1, %hi(ptrFontBankGothicChars) # $t1, 0x8004 -/* 0BDCA8 7F08B2B8 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0BDCAC 7F08B2BC 8DADAAFC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0BDCB0 7F08B2C0 8D29AB00 */ lw $t1, %lo(ptrFontBankGothicChars)($t1) -/* 0BDCB4 7F08B2C4 87AA0048 */ lh $t2, 0x48($sp) -/* 0BDCB8 7F08B2C8 240CFFFF */ li $t4, -1 -/* 0BDCBC 7F08B2CC AFAC0018 */ sw $t4, 0x18($sp) -/* 0BDCC0 7F08B2D0 02002025 */ move $a0, $s0 -/* 0BDCC4 7F08B2D4 27A50080 */ addiu $a1, $sp, 0x80 -/* 0BDCC8 7F08B2D8 27A6007C */ addiu $a2, $sp, 0x7c -/* 0BDCCC 7F08B2DC 27A700A4 */ addiu $a3, $sp, 0xa4 -/* 0BDCD0 7F08B2E0 AFA20020 */ sw $v0, 0x20($sp) -/* 0BDCD4 7F08B2E4 AFA00024 */ sw $zero, 0x24($sp) -/* 0BDCD8 7F08B2E8 AFA00028 */ sw $zero, 0x28($sp) -/* 0BDCDC 7F08B2EC AFAD0014 */ sw $t5, 0x14($sp) -/* 0BDCE0 7F08B2F0 AFA90010 */ sw $t1, 0x10($sp) -/* 0BDCE4 7F08B2F4 0FC2B35F */ jal textRender -/* 0BDCE8 7F08B2F8 AFAA001C */ sw $t2, 0x1c($sp) -/* 0BDCEC 7F08B2FC 0C000FD9 */ jal viGetViewLeft -/* 0BDCF0 7F08B300 00408025 */ move $s0, $v0 -/* 0BDCF4 7F08B304 244B00C3 */ addiu $t3, $v0, 0xc3 -/* 0BDCF8 7F08B308 0C000F9B */ jal viGetX -/* 0BDCFC 7F08B30C AFAB0080 */ sw $t3, 0x80($sp) -/* 0BDD00 7F08B310 0C000F9F */ jal viGetY -/* 0BDD04 7F08B314 A7A20048 */ sh $v0, 0x48($sp) -/* 0BDD08 7F08B318 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) # $t6, 0x8004 -/* 0BDD0C 7F08B31C 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0BDD10 7F08B320 8DEFAAFC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0BDD14 7F08B324 8DCEAB00 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0BDD18 7F08B328 87B90048 */ lh $t9, 0x48($sp) -/* 0BDD1C 7F08B32C 2418FFFF */ li $t8, -1 -/* 0BDD20 7F08B330 AFB80018 */ sw $t8, 0x18($sp) -/* 0BDD24 7F08B334 02002025 */ move $a0, $s0 -/* 0BDD28 7F08B338 27A50080 */ addiu $a1, $sp, 0x80 -/* 0BDD2C 7F08B33C 27A6007C */ addiu $a2, $sp, 0x7c -/* 0BDD30 7F08B340 27A70094 */ addiu $a3, $sp, 0x94 -/* 0BDD34 7F08B344 AFA20020 */ sw $v0, 0x20($sp) -/* 0BDD38 7F08B348 AFA00024 */ sw $zero, 0x24($sp) -/* 0BDD3C 7F08B34C AFA00028 */ sw $zero, 0x28($sp) -/* 0BDD40 7F08B350 AFAF0014 */ sw $t7, 0x14($sp) -/* 0BDD44 7F08B354 AFAE0010 */ sw $t6, 0x10($sp) -/* 0BDD48 7F08B358 0FC2B35F */ jal textRender -/* 0BDD4C 7F08B35C AFB9001C */ sw $t9, 0x1c($sp) -/* 0BDD50 7F08B360 0C000FD9 */ jal viGetViewLeft -/* 0BDD54 7F08B364 00408025 */ move $s0, $v0 -/* 0BDD58 7F08B368 244800F9 */ addiu $t0, $v0, 0xf9 -/* 0BDD5C 7F08B36C 0C000F9B */ jal viGetX -/* 0BDD60 7F08B370 AFA80080 */ sw $t0, 0x80($sp) -/* 0BDD64 7F08B374 0C000F9F */ jal viGetY -/* 0BDD68 7F08B378 A7A20048 */ sh $v0, 0x48($sp) -/* 0BDD6C 7F08B37C 3C098004 */ lui $t1, %hi(ptrFontBankGothicChars) # $t1, 0x8004 -/* 0BDD70 7F08B380 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0BDD74 7F08B384 8DADAAFC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0BDD78 7F08B388 8D29AB00 */ lw $t1, %lo(ptrFontBankGothicChars)($t1) -/* 0BDD7C 7F08B38C 87AA0048 */ lh $t2, 0x48($sp) -/* 0BDD80 7F08B390 240CFFFF */ li $t4, -1 -/* 0BDD84 7F08B394 AFAC0018 */ sw $t4, 0x18($sp) -/* 0BDD88 7F08B398 02002025 */ move $a0, $s0 -/* 0BDD8C 7F08B39C 27A50080 */ addiu $a1, $sp, 0x80 -/* 0BDD90 7F08B3A0 27A6007C */ addiu $a2, $sp, 0x7c -/* 0BDD94 7F08B3A4 27A70084 */ addiu $a3, $sp, 0x84 -/* 0BDD98 7F08B3A8 AFA20020 */ sw $v0, 0x20($sp) -/* 0BDD9C 7F08B3AC AFA00024 */ sw $zero, 0x24($sp) -/* 0BDDA0 7F08B3B0 AFA00028 */ sw $zero, 0x28($sp) -/* 0BDDA4 7F08B3B4 AFAD0014 */ sw $t5, 0x14($sp) -/* 0BDDA8 7F08B3B8 AFA90010 */ sw $t1, 0x10($sp) -/* 0BDDAC 7F08B3BC 0FC2B35F */ jal textRender -/* 0BDDB0 7F08B3C0 AFAA001C */ sw $t2, 0x1c($sp) -/* 0BDDB4 7F08B3C4 0FC2B06C */ jal combiner_bayer_lod_perspective -/* 0BDDB8 7F08B3C8 00402025 */ move $a0, $v0 -/* 0BDDBC 7F08B3CC 00408025 */ move $s0, $v0 -.L7F08B3D0: -/* 0BDDC0 7F08B3D0 8FBF003C */ lw $ra, 0x3c($sp) -/* 0BDDC4 7F08B3D4 02001025 */ move $v0, $s0 -/* 0BDDC8 7F08B3D8 8FB00038 */ lw $s0, 0x38($sp) -/* 0BDDCC 7F08B3DC 03E00008 */ jr $ra -/* 0BDDD0 7F08B3E0 27BD00E8 */ addiu $sp, $sp, 0xe8 -) -#endif - - -#endif - - - - -#ifdef NONMATCHING -/* -* Address: 0x7F08B0F0 -*/ -void playerTickBeams(void) { - -} -#else - + if (g_UpperTextDisplayFlag == 0) + { + if (upper_text_window_timer >= 0) + { #if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_800552C0 -.word 0xbd4ccccd /*-0.050000001*/ -glabel D_800552C4 -.word 0xbecccccd /*-0.40000001*/ -glabel D_800552C8 -.word 0x3d4ccccd /*0.050000001*/ -glabel D_800552CC -.word 0x3ecccccd /*0.40000001*/ -glabel D_800552D0 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel playerTickBeams -/* 0BFC20 7F08B0F0 27BDFF08 */ addiu $sp, $sp, -0xf8 -/* 0BFC24 7F08B0F4 AFBF0024 */ sw $ra, 0x24($sp) -/* 0BFC28 7F08B0F8 AFB10020 */ sw $s1, 0x20($sp) -/* 0BFC2C 7F08B0FC AFB0001C */ sw $s0, 0x1c($sp) -/* 0BFC30 7F08B100 0FC26C57 */ jal getPlayerPointerIndex -/* 0BFC34 7F08B104 AFA400F8 */ sw $a0, 0xf8($sp) -/* 0BFC38 7F08B108 8FAE00F8 */ lw $t6, 0xf8($sp) -/* 0BFC3C 7F08B10C AFA200F4 */ sw $v0, 0xf4($sp) -/* 0BFC40 7F08B110 8DCF0004 */ lw $t7, 4($t6) -/* 0BFC44 7F08B114 11E0000B */ beqz $t7, .L7F08B144 -/* 0BFC48 7F08B118 AFAF00F0 */ sw $t7, 0xf0($sp) -/* 0BFC4C 7F08B11C 0FC26C54 */ jal get_cur_playernum -/* 0BFC50 7F08B120 00000000 */ nop -/* 0BFC54 7F08B124 0FC26D36 */ jal get_player_position_in_shuffled -/* 0BFC58 7F08B128 00402025 */ move $a0, $v0 -/* 0BFC5C 7F08B12C 54400006 */ bnezl $v0, .L7F08B148 -/* 0BFC60 7F08B130 8FA900F0 */ lw $t1, 0xf0($sp) -/* 0BFC64 7F08B134 8FA200F0 */ lw $v0, 0xf0($sp) -/* 0BFC68 7F08B138 94580012 */ lhu $t8, 0x12($v0) -/* 0BFC6C 7F08B13C 3319F7FF */ andi $t9, $t8, 0xf7ff -/* 0BFC70 7F08B140 A4590012 */ sh $t9, 0x12($v0) -.L7F08B144: -/* 0BFC74 7F08B144 8FA900F0 */ lw $t1, 0xf0($sp) -.L7F08B148: -/* 0BFC78 7F08B148 8FAA00F4 */ lw $t2, 0xf4($sp) -/* 0BFC7C 7F08B14C 3C0C8008 */ lui $t4, %hi(g_playerPointers) -/* 0BFC80 7F08B150 1120004D */ beqz $t1, .L7F08B288 -/* 0BFC84 7F08B154 000A5880 */ sll $t3, $t2, 2 -/* 0BFC88 7F08B158 258C9EE0 */ addiu $t4, %lo(g_playerPointers) # addiu $t4, $t4, -0x6120 -/* 0BFC8C 7F08B15C 016C8821 */ addu $s1, $t3, $t4 -/* 0BFC90 7F08B160 8E2D0000 */ lw $t5, ($s1) -/* 0BFC94 7F08B164 8DAE00D4 */ lw $t6, 0xd4($t5) -/* 0BFC98 7F08B168 51C00048 */ beql $t6, $zero, .L7F08B28C -/* 0BFC9C 7F08B16C 8FAF00F0 */ lw $t7, 0xf0($sp) -/* 0BFCA0 7F08B170 0FC243BF */ jal get_debug_render_raster -/* 0BFCA4 7F08B174 00000000 */ nop -/* 0BFCA8 7F08B178 50400007 */ beql $v0, $zero, .L7F08B198 -/* 0BFCAC 7F08B17C 8E390000 */ lw $t9, ($s1) -/* 0BFCB0 7F08B180 8E2F0000 */ lw $t7, ($s1) -/* 0BFCB4 7F08B184 24010001 */ li $at, 1 -/* 0BFCB8 7F08B188 8DF80000 */ lw $t8, ($t7) -/* 0BFCBC 7F08B18C 5701003F */ bnel $t8, $at, .L7F08B28C -/* 0BFCC0 7F08B190 8FAF00F0 */ lw $t7, 0xf0($sp) -/* 0BFCC4 7F08B194 8E390000 */ lw $t9, ($s1) -.L7F08B198: -/* 0BFCC8 7F08B198 AF2000AC */ sw $zero, 0xac($t9) -/* 0BFCCC 7F08B19C 0FC083BC */ jal chrTickBeams -/* 0BFCD0 7F08B1A0 8FA400F8 */ lw $a0, 0xf8($sp) -/* 0BFCD4 7F08B1A4 8E2A0000 */ lw $t2, ($s1) -/* 0BFCD8 7F08B1A8 AFA200E8 */ sw $v0, 0xe8($sp) -/* 0BFCDC 7F08B1AC 24090001 */ li $t1, 1 -/* 0BFCE0 7F08B1B0 AD4900AC */ sw $t1, 0xac($t2) -/* 0BFCE4 7F08B1B4 8E280000 */ lw $t0, ($s1) -/* 0BFCE8 7F08B1B8 8D0B00A8 */ lw $t3, 0xa8($t0) -/* 0BFCEC 7F08B1BC C5640008 */ lwc1 $f4, 8($t3) -/* 0BFCF0 7F08B1C0 E504048C */ swc1 $f4, 0x48c($t0) -/* 0BFCF4 7F08B1C4 8E280000 */ lw $t0, ($s1) -/* 0BFCF8 7F08B1C8 8D0C00A8 */ lw $t4, 0xa8($t0) -/* 0BFCFC 7F08B1CC C586000C */ lwc1 $f6, 0xc($t4) -/* 0BFD00 7F08B1D0 E5060490 */ swc1 $f6, 0x490($t0) -/* 0BFD04 7F08B1D4 8E280000 */ lw $t0, ($s1) -/* 0BFD08 7F08B1D8 8D0D00A8 */ lw $t5, 0xa8($t0) -/* 0BFD0C 7F08B1DC C5A80010 */ lwc1 $f8, 0x10($t5) -/* 0BFD10 7F08B1E0 E5080494 */ swc1 $f8, 0x494($t0) -/* 0BFD14 7F08B1E4 8E280000 */ lw $t0, ($s1) -/* 0BFD18 7F08B1E8 8D0E00A8 */ lw $t6, 0xa8($t0) -/* 0BFD1C 7F08B1EC 8DCF0014 */ lw $t7, 0x14($t6) -/* 0BFD20 7F08B1F0 AD0F0488 */ sw $t7, 0x488($t0) -/* 0BFD24 7F08B1F4 0FC1F7A7 */ jal sub_GAME_7F07DE9C -/* 0BFD28 7F08B1F8 8E240000 */ lw $a0, ($s1) -/* 0BFD2C 7F08B1FC 8FB800F8 */ lw $t8, 0xf8($sp) -/* 0BFD30 7F08B200 93190001 */ lbu $t9, 1($t8) -/* 0BFD34 7F08B204 33290002 */ andi $t1, $t9, 2 -/* 0BFD38 7F08B208 1120001D */ beqz $t1, .L7F08B280 -/* 0BFD3C 7F08B20C 00000000 */ nop -/* 0BFD40 7F08B210 8E2A0000 */ lw $t2, ($s1) -/* 0BFD44 7F08B214 8D4B00D4 */ lw $t3, 0xd4($t2) -/* 0BFD48 7F08B218 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 0BFD4C 7F08B21C 8D70000C */ lw $s0, 0xc($t3) -/* 0BFD50 7F08B220 00402025 */ move $a0, $v0 -/* 0BFD54 7F08B224 02002825 */ move $a1, $s0 -/* 0BFD58 7F08B228 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0BFD5C 7F08B22C 27A600A4 */ addiu $a2, $sp, 0xa4 -/* 0BFD60 7F08B230 3C0140E0 */ li $at, 0x40E00000 # 7.000000 -/* 0BFD64 7F08B234 44810000 */ mtc1 $at, $f0 -/* 0BFD68 7F08B238 C7AA00B4 */ lwc1 $f10, 0xb4($sp) -/* 0BFD6C 7F08B23C C7A400D4 */ lwc1 $f4, 0xd4($sp) -/* 0BFD70 7F08B240 8E2C0000 */ lw $t4, ($s1) -/* 0BFD74 7F08B244 46005482 */ mul.s $f18, $f10, $f0 -/* 0BFD78 7F08B248 46049180 */ add.s $f6, $f18, $f4 -/* 0BFD7C 7F08B24C E58604B4 */ swc1 $f6, 0x4b4($t4) -/* 0BFD80 7F08B250 C7A800B8 */ lwc1 $f8, 0xb8($sp) -/* 0BFD84 7F08B254 C7B200D8 */ lwc1 $f18, 0xd8($sp) -/* 0BFD88 7F08B258 8E2D0000 */ lw $t5, ($s1) -/* 0BFD8C 7F08B25C 46004282 */ mul.s $f10, $f8, $f0 -/* 0BFD90 7F08B260 46125100 */ add.s $f4, $f10, $f18 -/* 0BFD94 7F08B264 E5A404B8 */ swc1 $f4, 0x4b8($t5) -/* 0BFD98 7F08B268 C7A600BC */ lwc1 $f6, 0xbc($sp) -/* 0BFD9C 7F08B26C C7AA00DC */ lwc1 $f10, 0xdc($sp) -/* 0BFDA0 7F08B270 8E2E0000 */ lw $t6, ($s1) -/* 0BFDA4 7F08B274 46003202 */ mul.s $f8, $f6, $f0 -/* 0BFDA8 7F08B278 460A4480 */ add.s $f18, $f8, $f10 -/* 0BFDAC 7F08B27C E5D204BC */ swc1 $f18, 0x4bc($t6) -.L7F08B280: -/* 0BFDB0 7F08B280 10000288 */ b .L7F08BCA4 -/* 0BFDB4 7F08B284 8FA200E8 */ lw $v0, 0xe8($sp) -.L7F08B288: -/* 0BFDB8 7F08B288 8FAF00F0 */ lw $t7, 0xf0($sp) -.L7F08B28C: -/* 0BFDBC 7F08B28C 8FB800F4 */ lw $t8, 0xf4($sp) -/* 0BFDC0 7F08B290 3C098008 */ lui $t1, %hi(g_playerPointers) -/* 0BFDC4 7F08B294 11E0027E */ beqz $t7, .L7F08BC90 -/* 0BFDC8 7F08B298 0018C880 */ sll $t9, $t8, 2 -/* 0BFDCC 7F08B29C 25299EE0 */ addiu $t1, %lo(g_playerPointers) # addiu $t1, $t1, -0x6120 -/* 0BFDD0 7F08B2A0 03298821 */ addu $s1, $t9, $t1 -/* 0BFDD4 7F08B2A4 8E2A0000 */ lw $t2, ($s1) -/* 0BFDD8 7F08B2A8 8D4B00D4 */ lw $t3, 0xd4($t2) -/* 0BFDDC 7F08B2AC 51600279 */ beql $t3, $zero, .L7F08BC94 -/* 0BFDE0 7F08B2B0 8FAA00F8 */ lw $t2, 0xf8($sp) -/* 0BFDE4 7F08B2B4 0FC26919 */ jal getPlayerCount -/* 0BFDE8 7F08B2B8 00000000 */ nop -/* 0BFDEC 7F08B2BC 28410002 */ slti $at, $v0, 2 -/* 0BFDF0 7F08B2C0 54200274 */ bnezl $at, .L7F08BC94 -/* 0BFDF4 7F08B2C4 8FAA00F8 */ lw $t2, 0xf8($sp) -/* 0BFDF8 7F08B2C8 0FC26C54 */ jal get_cur_playernum -/* 0BFDFC 7F08B2CC 00000000 */ nop -/* 0BFE00 7F08B2D0 8FAC00F4 */ lw $t4, 0xf4($sp) -/* 0BFE04 7F08B2D4 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0BFE08 7F08B2D8 24050001 */ li $a1, 1 -/* 0BFE0C 7F08B2DC 504C026D */ beql $v0, $t4, .L7F08BC94 -/* 0BFE10 7F08B2E0 8FAA00F8 */ lw $t2, 0xf8($sp) -/* 0BFE14 7F08B2E4 44811000 */ mtc1 $at, $f2 -/* 0BFE18 7F08B2E8 AFA0009C */ sw $zero, 0x9c($sp) -/* 0BFE1C 7F08B2EC AFA0007C */ sw $zero, 0x7c($sp) -/* 0BFE20 7F08B2F0 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0BFE24 7F08B2F4 E7A20090 */ swc1 $f2, 0x90($sp) -/* 0BFE28 7F08B2F8 0FC08C0B */ jal chrGetEquippedWeaponProp -/* 0BFE2C 7F08B2FC E7A20094 */ swc1 $f2, 0x94($sp) -/* 0BFE30 7F08B300 00408025 */ move $s0, $v0 -/* 0BFE34 7F08B304 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0BFE38 7F08B308 0FC08C0B */ jal chrGetEquippedWeaponProp -/* 0BFE3C 7F08B30C 00002825 */ move $a1, $zero -/* 0BFE40 7F08B310 C7A20094 */ lwc1 $f2, 0x94($sp) -/* 0BFE44 7F08B314 00402825 */ move $a1, $v0 -/* 0BFE48 7F08B318 00001825 */ move $v1, $zero -/* 0BFE4C 7F08B31C 00002025 */ move $a0, $zero -/* 0BFE50 7F08B320 12000002 */ beqz $s0, .L7F08B32C -/* 0BFE54 7F08B324 AFA00054 */ sw $zero, 0x54($sp) -/* 0BFE58 7F08B328 8E030004 */ lw $v1, 4($s0) -.L7F08B32C: -/* 0BFE5C 7F08B32C 50400003 */ beql $v0, $zero, .L7F08B33C -/* 0BFE60 7F08B330 AFA3005C */ sw $v1, 0x5c($sp) -/* 0BFE64 7F08B334 8C440004 */ lw $a0, 4($v0) -/* 0BFE68 7F08B338 AFA3005C */ sw $v1, 0x5c($sp) -.L7F08B33C: -/* 0BFE6C 7F08B33C AFA40058 */ sw $a0, 0x58($sp) -/* 0BFE70 7F08B340 AFA50060 */ sw $a1, 0x60($sp) -/* 0BFE74 7F08B344 0FC26C54 */ jal get_cur_playernum -/* 0BFE78 7F08B348 E7A20094 */ swc1 $f2, 0x94($sp) -/* 0BFE7C 7F08B34C 0FC26D36 */ jal get_player_position_in_shuffled -/* 0BFE80 7F08B350 00402025 */ move $a0, $v0 -/* 0BFE84 7F08B354 8FA3005C */ lw $v1, 0x5c($sp) -/* 0BFE88 7F08B358 8FA50060 */ lw $a1, 0x60($sp) -/* 0BFE8C 7F08B35C 14400006 */ bnez $v0, .L7F08B378 -/* 0BFE90 7F08B360 C7A20094 */ lwc1 $f2, 0x94($sp) -/* 0BFE94 7F08B364 3C028003 */ lui $v0, %hi(D_800368B8+0x1C) -/* 0BFE98 7F08B368 244268D4 */ addiu $v0, %lo(D_800368B8+0x1C) # addiu $v0, $v0, 0x68d4 -/* 0BFE9C 7F08B36C 8C4D0000 */ lw $t5, ($v0) -/* 0BFEA0 7F08B370 25AE0001 */ addiu $t6, $t5, 1 -/* 0BFEA4 7F08B374 AC4E0000 */ sw $t6, ($v0) -.L7F08B378: -/* 0BFEA8 7F08B378 3C028003 */ lui $v0, %hi(D_800368B8+0x1C) -/* 0BFEAC 7F08B37C 244268D4 */ addiu $v0, %lo(D_800368B8+0x1C) # addiu $v0, $v0, 0x68d4 -/* 0BFEB0 7F08B380 8C4F0000 */ lw $t7, ($v0) -/* 0BFEB4 7F08B384 29E10002 */ slti $at, $t7, 2 -/* 0BFEB8 7F08B388 542001BB */ bnezl $at, .L7F08BA78 -/* 0BFEBC 7F08B38C 8E2A0000 */ lw $t2, ($s1) -/* 0BFEC0 7F08B390 8E280000 */ lw $t0, ($s1) -/* 0BFEC4 7F08B394 C5042A08 */ lwc1 $f4, 0x2a08($t0) -/* 0BFEC8 7F08B398 E7A4008C */ swc1 $f4, 0x8c($sp) -/* 0BFECC 7F08B39C C5062A0C */ lwc1 $f6, 0x2a0c($t0) -/* 0BFED0 7F08B3A0 E7A60088 */ swc1 $f6, 0x88($sp) -/* 0BFED4 7F08B3A4 8D1800D8 */ lw $t8, 0xd8($t0) -/* 0BFED8 7F08B3A8 13000036 */ beqz $t8, .L7F08B484 -/* 0BFEDC 7F08B3AC 3C078003 */ lui $a3, %hi(g_bondviewBondDeathAnimationsCount) -/* 0BFEE0 7F08B3B0 8CE7650C */ lw $a3, %lo(g_bondviewBondDeathAnimationsCount)($a3) -/* 0BFEE4 7F08B3B4 00002825 */ move $a1, $zero -/* 0BFEE8 7F08B3B8 00008025 */ move $s0, $zero -/* 0BFEEC 7F08B3BC 18E00010 */ blez $a3, .L7F08B400 -/* 0BFEF0 7F08B3C0 3C198003 */ lui $t9, %hi(g_bondviewBondDeathAnimations) -/* 0BFEF4 7F08B3C4 272264D8 */ addiu $v0, $t9, %lo(g_bondviewBondDeathAnimations) -/* 0BFEF8 7F08B3C8 3C038007 */ lui $v1, %hi(ptr_animation_table) -/* 0BFEFC 7F08B3CC 00074880 */ sll $t1, $a3, 2 -/* 0BFF00 7F08B3D0 01222021 */ addu $a0, $t1, $v0 -/* 0BFF04 7F08B3D4 8C639538 */ lw $v1, %lo(ptr_animation_table)($v1) -/* 0BFF08 7F08B3D8 8D061284 */ lw $a2, 0x1284($t0) -/* 0BFF0C 7F08B3DC 8C4A0000 */ lw $t2, ($v0) -.L7F08B3E0: -/* 0BFF10 7F08B3E0 24420004 */ addiu $v0, $v0, 4 -/* 0BFF14 7F08B3E4 0044082B */ sltu $at, $v0, $a0 -/* 0BFF18 7F08B3E8 01435821 */ addu $t3, $t2, $v1 -/* 0BFF1C 7F08B3EC 14CB0002 */ bne $a2, $t3, .L7F08B3F8 -/* 0BFF20 7F08B3F0 00000000 */ nop -/* 0BFF24 7F08B3F4 24050001 */ li $a1, 1 -.L7F08B3F8: -/* 0BFF28 7F08B3F8 5420FFF9 */ bnezl $at, .L7F08B3E0 -/* 0BFF2C 7F08B3FC 8C4A0000 */ lw $t2, ($v0) -.L7F08B400: -/* 0BFF30 7F08B400 10A00005 */ beqz $a1, .L7F08B418 -/* 0BFF34 7F08B404 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0BFF38 7F08B408 8D061284 */ lw $a2, 0x1284($t0) -/* 0BFF3C 7F08B40C 44816000 */ mtc1 $at, $f12 -/* 0BFF40 7F08B410 10000017 */ b .L7F08B470 -/* 0BFF44 7F08B414 AFA6009C */ sw $a2, 0x9c($sp) -.L7F08B418: -/* 0BFF48 7F08B418 0C002914 */ jal randomGetNext -/* 0BFF4C 7F08B41C E7A20094 */ swc1 $f2, 0x94($sp) -/* 0BFF50 7F08B420 3C0C8003 */ lui $t4, %hi(g_bondviewBondDeathAnimationsCount) -/* 0BFF54 7F08B424 8D8C650C */ lw $t4, %lo(g_bondviewBondDeathAnimationsCount)($t4) -/* 0BFF58 7F08B428 3C0F8003 */ lui $t7, %hi(g_bondviewBondDeathAnimations) -/* 0BFF5C 7F08B42C 3C188007 */ lui $t8, %hi(ptr_animation_table) -/* 0BFF60 7F08B430 004C001B */ divu $zero, $v0, $t4 -/* 0BFF64 7F08B434 00006810 */ mfhi $t5 -/* 0BFF68 7F08B438 000D7080 */ sll $t6, $t5, 2 -/* 0BFF6C 7F08B43C 01EE7821 */ addu $t7, $t7, $t6 -/* 0BFF70 7F08B440 8DEF64D8 */ lw $t7, %lo(g_bondviewBondDeathAnimations)($t7) -/* 0BFF74 7F08B444 8F189538 */ lw $t8, %lo(ptr_animation_table)($t8) -/* 0BFF78 7F08B448 8E280000 */ lw $t0, ($s1) -/* 0BFF7C 7F08B44C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0BFF80 7F08B450 01F84821 */ addu $t1, $t7, $t8 -/* 0BFF84 7F08B454 AFA9009C */ sw $t1, 0x9c($sp) -/* 0BFF88 7F08B458 44816000 */ mtc1 $at, $f12 -/* 0BFF8C 7F08B45C C7A20094 */ lwc1 $f2, 0x94($sp) -/* 0BFF90 7F08B460 15800002 */ bnez $t4, .L7F08B46C -/* 0BFF94 7F08B464 00000000 */ nop -/* 0BFF98 7F08B468 0007000D */ break 7 -.L7F08B46C: -/* 0BFF9C 7F08B46C 8D061284 */ lw $a2, 0x1284($t0) -.L7F08B470: -/* 0BFFA0 7F08B470 44807000 */ mtc1 $zero, $f14 -/* 0BFFA4 7F08B474 00000000 */ nop -/* 0BFFA8 7F08B478 E7AE008C */ swc1 $f14, 0x8c($sp) -/* 0BFFAC 7F08B47C 100000F6 */ b .L7F08B858 -/* 0BFFB0 7F08B480 E7AE0088 */ swc1 $f14, 0x88($sp) -.L7F08B484: -/* 0BFFB4 7F08B484 12000005 */ beqz $s0, .L7F08B49C -/* 0BFFB8 7F08B488 00000000 */ nop -/* 0BFFBC 7F08B48C 10A00003 */ beqz $a1, .L7F08B49C -/* 0BFFC0 7F08B490 00000000 */ nop -/* 0BFFC4 7F08B494 1000002E */ b .L7F08B550 -/* 0BFFC8 7F08B498 24100003 */ li $s0, 3 -.L7F08B49C: -/* 0BFFCC 7F08B49C 16000005 */ bnez $s0, .L7F08B4B4 -/* 0BFFD0 7F08B4A0 00000000 */ nop -/* 0BFFD4 7F08B4A4 14A00003 */ bnez $a1, .L7F08B4B4 -/* 0BFFD8 7F08B4A8 00000000 */ nop -/* 0BFFDC 7F08B4AC 10000028 */ b .L7F08B550 -/* 0BFFE0 7F08B4B0 24100002 */ li $s0, 2 -.L7F08B4B4: -/* 0BFFE4 7F08B4B4 10600008 */ beqz $v1, .L7F08B4D8 -/* 0BFFE8 7F08B4B8 24050200 */ li $a1, 512 -/* 0BFFEC 7F08B4BC 80640080 */ lb $a0, 0x80($v1) -/* 0BFFF0 7F08B4C0 0FC1782D */ jal bondwalkItemCheckBitflags -/* 0BFFF4 7F08B4C4 AFA3005C */ sw $v1, 0x5c($sp) -/* 0BFFF8 7F08B4C8 14400003 */ bnez $v0, .L7F08B4D8 -/* 0BFFFC 7F08B4CC 8FA3005C */ lw $v1, 0x5c($sp) -/* 0C0000 7F08B4D0 1000001F */ b .L7F08B550 -/* 0C0004 7F08B4D4 24100002 */ li $s0, 2 -.L7F08B4D8: -/* 0C0008 7F08B4D8 8FA20058 */ lw $v0, 0x58($sp) -/* 0C000C 7F08B4DC 24050200 */ li $a1, 512 -/* 0C0010 7F08B4E0 10400008 */ beqz $v0, .L7F08B504 -/* 0C0014 7F08B4E4 00000000 */ nop -/* 0C0018 7F08B4E8 80440080 */ lb $a0, 0x80($v0) -/* 0C001C 7F08B4EC 0FC1782D */ jal bondwalkItemCheckBitflags -/* 0C0020 7F08B4F0 AFA3005C */ sw $v1, 0x5c($sp) -/* 0C0024 7F08B4F4 14400003 */ bnez $v0, .L7F08B504 -/* 0C0028 7F08B4F8 8FA3005C */ lw $v1, 0x5c($sp) -/* 0C002C 7F08B4FC 10000014 */ b .L7F08B550 -/* 0C0030 7F08B500 24100002 */ li $s0, 2 -.L7F08B504: -/* 0C0034 7F08B504 10600007 */ beqz $v1, .L7F08B524 -/* 0C0038 7F08B508 24050100 */ li $a1, 256 -/* 0C003C 7F08B50C 0FC1782D */ jal bondwalkItemCheckBitflags -/* 0C0040 7F08B510 80640080 */ lb $a0, 0x80($v1) -/* 0C0044 7F08B514 50400004 */ beql $v0, $zero, .L7F08B528 -/* 0C0048 7F08B518 8FA20058 */ lw $v0, 0x58($sp) -/* 0C004C 7F08B51C 1000000C */ b .L7F08B550 -/* 0C0050 7F08B520 00008025 */ move $s0, $zero -.L7F08B524: -/* 0C0054 7F08B524 8FA20058 */ lw $v0, 0x58($sp) -.L7F08B528: -/* 0C0058 7F08B528 24050100 */ li $a1, 256 -/* 0C005C 7F08B52C 50400008 */ beql $v0, $zero, .L7F08B550 -/* 0C0060 7F08B530 24100001 */ li $s0, 1 -/* 0C0064 7F08B534 0FC1782D */ jal bondwalkItemCheckBitflags -/* 0C0068 7F08B538 80440080 */ lb $a0, 0x80($v0) -/* 0C006C 7F08B53C 50400004 */ beql $v0, $zero, .L7F08B550 -/* 0C0070 7F08B540 24100001 */ li $s0, 1 -/* 0C0074 7F08B544 10000002 */ b .L7F08B550 -/* 0C0078 7F08B548 00008025 */ move $s0, $zero -/* 0C007C 7F08B54C 24100001 */ li $s0, 1 -.L7F08B550: -/* 0C0080 7F08B550 0FC1E687 */ jal playerGetCrouchPos -/* 0C0084 7F08B554 8FA400F4 */ lw $a0, 0xf4($sp) -/* 0C0088 7F08B558 24010001 */ li $at, 1 -/* 0C008C 7F08B55C 50410005 */ beql $v0, $at, .L7F08B574 -/* 0C0090 7F08B560 3C013F80 */ lui $at, 0x3f80 -/* 0C0094 7F08B564 0FC1E687 */ jal playerGetCrouchPos -/* 0C0098 7F08B568 8FA400F4 */ lw $a0, 0xf4($sp) -/* 0C009C 7F08B56C 14400006 */ bnez $v0, .L7F08B588 -/* 0C00A0 7F08B570 3C013F80 */ li $at, 0x3F800000 # 1.000000 -.L7F08B574: -/* 0C00A4 7F08B574 44816000 */ mtc1 $at, $f12 -/* 0C00A8 7F08B578 44807000 */ mtc1 $zero, $f14 -/* 0C00AC 7F08B57C 24040005 */ li $a0, 5 -/* 0C00B0 7F08B580 1000009D */ b .L7F08B7F8 -/* 0C00B4 7F08B584 8E280000 */ lw $t0, ($s1) -.L7F08B588: -/* 0C00B8 7F08B588 8E280000 */ lw $t0, ($s1) -/* 0C00BC 7F08B58C 44807000 */ mtc1 $zero, $f14 -/* 0C00C0 7F08B590 0010C900 */ sll $t9, $s0, 4 -/* 0C00C4 7F08B594 C502016C */ lwc1 $f2, 0x16c($t0) -/* 0C00C8 7F08B598 0330C823 */ subu $t9, $t9, $s0 -/* 0C00CC 7F08B59C 0019C8C0 */ sll $t9, $t9, 3 -/* 0C00D0 7F08B5A0 460E103C */ c.lt.s $f2, $f14 -/* 0C00D4 7F08B5A4 3C0A8003 */ lui $t2, %hi(firing_animation_groups+0x50) #firing_animation_groups[440] -/* 0C00D8 7F08B5A8 01595021 */ addu $t2, $t2, $t9 -/* 0C00DC 7F08B5AC 45020014 */ bc1fl .L7F08B600 -/* 0C00E0 7F08B5B0 4602703C */ c.lt.s $f14, $f2 -/* 0C00E4 7F08B5B4 8D4A6928 */ lw $t2, %lo(firing_animation_groups+0x50)($t2) #firing_animation_groups[440] -/* 0C00E8 7F08B5B8 3C0142B4 */ li $at, 0x42B40000 # 90.000000 -/* 0C00EC 7F08B5BC 51400010 */ beql $t2, $zero, .L7F08B600 -/* 0C00F0 7F08B5C0 4602703C */ c.lt.s $f14, $f2 -/* 0C00F4 7F08B5C4 C5001280 */ lwc1 $f0, 0x1280($t0) -/* 0C00F8 7F08B5C8 44814000 */ mtc1 $at, $f8 -/* 0C00FC 7F08B5CC 24040004 */ li $a0, 4 -/* 0C0100 7F08B5D0 46001307 */ neg.s $f12, $f2 -/* 0C0104 7F08B5D4 4608003C */ c.lt.s $f0, $f8 -/* 0C0108 7F08B5D8 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0C010C 7F08B5DC 45020087 */ bc1fl .L7F08B7FC -/* 0C0110 7F08B5E0 00107900 */ sll $t7, $s0, 4 -/* 0C0114 7F08B5E4 44815000 */ mtc1 $at, $f10 -/* 0C0118 7F08B5E8 00000000 */ nop -/* 0C011C 7F08B5EC 460A0480 */ add.s $f18, $f0, $f10 -/* 0C0120 7F08B5F0 E5121280 */ swc1 $f18, 0x1280($t0) -/* 0C0124 7F08B5F4 10000080 */ b .L7F08B7F8 -/* 0C0128 7F08B5F8 8E280000 */ lw $t0, ($s1) -/* 0C012C 7F08B5FC 4602703C */ c.lt.s $f14, $f2 -.L7F08B600: -/* 0C0130 7F08B600 00105900 */ sll $t3, $s0, 4 -/* 0C0134 7F08B604 01705823 */ subu $t3, $t3, $s0 -/* 0C0138 7F08B608 000B58C0 */ sll $t3, $t3, 3 -/* 0C013C 7F08B60C 45000014 */ bc1f .L7F08B660 -/* 0C0140 7F08B610 3C0C8003 */ lui $t4, %hi(firing_animation_groups+0x3C) -/* 0C0144 7F08B614 018B6021 */ addu $t4, $t4, $t3 -/* 0C0148 7F08B618 8D8C6914 */ lw $t4, %lo(firing_animation_groups+0x3C)($t4) -/* 0C014C 7F08B61C 3C01C2B4 */ li $at, 0xC2B40000 # -90.000000 -/* 0C0150 7F08B620 51800010 */ beql $t4, $zero, .L7F08B664 -/* 0C0154 7F08B624 C502014C */ lwc1 $f2, 0x14c($t0) -/* 0C0158 7F08B628 C5001280 */ lwc1 $f0, 0x1280($t0) -/* 0C015C 7F08B62C 44812000 */ mtc1 $at, $f4 -/* 0C0160 7F08B630 24040003 */ li $a0, 3 -/* 0C0164 7F08B634 46001306 */ mov.s $f12, $f2 -/* 0C0168 7F08B638 4600203C */ c.lt.s $f4, $f0 -/* 0C016C 7F08B63C 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0C0170 7F08B640 4502006E */ bc1fl .L7F08B7FC -/* 0C0174 7F08B644 00107900 */ sll $t7, $s0, 4 -/* 0C0178 7F08B648 44813000 */ mtc1 $at, $f6 -/* 0C017C 7F08B64C 00000000 */ nop -/* 0C0180 7F08B650 46060201 */ sub.s $f8, $f0, $f6 -/* 0C0184 7F08B654 E5081280 */ swc1 $f8, 0x1280($t0) -/* 0C0188 7F08B658 10000067 */ b .L7F08B7F8 -/* 0C018C 7F08B65C 8E280000 */ lw $t0, ($s1) -.L7F08B660: -/* 0C0190 7F08B660 C502014C */ lwc1 $f2, 0x14c($t0) -.L7F08B664: -/* 0C0194 7F08B664 3C018005 */ lui $at, %hi(D_800552C0) -/* 0C0198 7F08B668 460E103C */ c.lt.s $f2, $f14 -/* 0C019C 7F08B66C 00000000 */ nop -/* 0C01A0 7F08B670 45020003 */ bc1fl .L7F08B680 -/* 0C01A4 7F08B674 C5000174 */ lwc1 $f0, 0x174($t0) -/* 0C01A8 7F08B678 46001087 */ neg.s $f2, $f2 -/* 0C01AC 7F08B67C C5000174 */ lwc1 $f0, 0x174($t0) -.L7F08B680: -/* 0C01B0 7F08B680 C42A52C0 */ lwc1 $f10, %lo(D_800552C0)($at) -/* 0C01B4 7F08B684 3C018005 */ lui $at, %hi(D_800552C8) -/* 0C01B8 7F08B688 460A003C */ c.lt.s $f0, $f10 -/* 0C01BC 7F08B68C 00000000 */ nop -/* 0C01C0 7F08B690 4500001D */ bc1f .L7F08B708 -/* 0C01C4 7F08B694 00000000 */ nop -/* 0C01C8 7F08B698 46001087 */ neg.s $f2, $f2 -/* 0C01CC 7F08B69C 3C018005 */ lui $at, %hi(D_800552C4) -/* 0C01D0 7F08B6A0 4602003C */ c.lt.s $f0, $f2 -/* 0C01D4 7F08B6A4 00000000 */ nop -/* 0C01D8 7F08B6A8 45020003 */ bc1fl .L7F08B6B8 -/* 0C01DC 7F08B6AC 8D0D04E8 */ lw $t5, 0x4e8($t0) -/* 0C01E0 7F08B6B0 46000086 */ mov.s $f2, $f0 -/* 0C01E4 7F08B6B4 8D0D04E8 */ lw $t5, 0x4e8($t0) -.L7F08B6B8: -/* 0C01E8 7F08B6B8 51A00008 */ beql $t5, $zero, .L7F08B6DC -/* 0C01EC 7F08B6BC 46021300 */ add.s $f12, $f2, $f2 -/* 0C01F0 7F08B6C0 C43252C4 */ lwc1 $f18, %lo(D_800552C4)($at) -/* 0C01F4 7F08B6C4 24040002 */ li $a0, 2 -/* 0C01F8 7F08B6C8 4600903C */ c.lt.s $f18, $f0 -/* 0C01FC 7F08B6CC 00000000 */ nop -/* 0C0200 7F08B6D0 4500000B */ bc1f .L7F08B700 -/* 0C0204 7F08B6D4 00000000 */ nop -/* 0C0208 7F08B6D8 46021300 */ add.s $f12, $f2, $f2 -.L7F08B6DC: -/* 0C020C 7F08B6DC 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0C0210 7F08B6E0 44818000 */ mtc1 $at, $f16 -/* 0C0214 7F08B6E4 24040001 */ li $a0, 1 -/* 0C0218 7F08B6E8 4610603C */ c.lt.s $f12, $f16 -/* 0C021C 7F08B6EC 00000000 */ nop -/* 0C0220 7F08B6F0 4502002D */ bc1fl .L7F08B7A8 -/* 0C0224 7F08B6F4 C5001280 */ lwc1 $f0, 0x1280($t0) -/* 0C0228 7F08B6F8 1000002A */ b .L7F08B7A4 -/* 0C022C 7F08B6FC 46008306 */ mov.s $f12, $f16 -.L7F08B700: -/* 0C0230 7F08B700 10000028 */ b .L7F08B7A4 -/* 0C0234 7F08B704 46001306 */ mov.s $f12, $f2 -.L7F08B708: -/* 0C0238 7F08B708 C42C52C8 */ lwc1 $f12, %lo(D_800552C8)($at) -/* 0C023C 7F08B70C 4600603C */ c.lt.s $f12, $f0 -/* 0C0240 7F08B710 00000000 */ nop -/* 0C0244 7F08B714 45030006 */ bc1tl .L7F08B730 -/* 0C0248 7F08B718 4600103C */ c.lt.s $f2, $f0 -/* 0C024C 7F08B71C 4602603C */ c.lt.s $f12, $f2 -/* 0C0250 7F08B720 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0C0254 7F08B724 4502001E */ bc1fl .L7F08B7A0 -/* 0C0258 7F08B728 44816000 */ mtc1 $at, $f12 -/* 0C025C 7F08B72C 4600103C */ c.lt.s $f2, $f0 -.L7F08B730: -/* 0C0260 7F08B730 3C018005 */ lui $at, %hi(D_800552CC) -/* 0C0264 7F08B734 45020003 */ bc1fl .L7F08B744 -/* 0C0268 7F08B738 8D0E04E8 */ lw $t6, 0x4e8($t0) -/* 0C026C 7F08B73C 46000086 */ mov.s $f2, $f0 -/* 0C0270 7F08B740 8D0E04E8 */ lw $t6, 0x4e8($t0) -.L7F08B744: -/* 0C0274 7F08B744 51C00008 */ beql $t6, $zero, .L7F08B768 -/* 0C0278 7F08B748 46021300 */ add.s $f12, $f2, $f2 -/* 0C027C 7F08B74C C42452CC */ lwc1 $f4, %lo(D_800552CC)($at) -/* 0C0280 7F08B750 24040002 */ li $a0, 2 -/* 0C0284 7F08B754 4604003C */ c.lt.s $f0, $f4 -/* 0C0288 7F08B758 00000000 */ nop -/* 0C028C 7F08B75C 4500000D */ bc1f .L7F08B794 -/* 0C0290 7F08B760 00000000 */ nop -/* 0C0294 7F08B764 46021300 */ add.s $f12, $f2, $f2 -.L7F08B768: -/* 0C0298 7F08B768 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0C029C 7F08B76C 44813000 */ mtc1 $at, $f6 -/* 0C02A0 7F08B770 24040001 */ li $a0, 1 -/* 0C02A4 7F08B774 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0C02A8 7F08B778 460C303C */ c.lt.s $f6, $f12 -/* 0C02AC 7F08B77C 00000000 */ nop -/* 0C02B0 7F08B780 45020009 */ bc1fl .L7F08B7A8 -/* 0C02B4 7F08B784 C5001280 */ lwc1 $f0, 0x1280($t0) -/* 0C02B8 7F08B788 44816000 */ mtc1 $at, $f12 -/* 0C02BC 7F08B78C 10000006 */ b .L7F08B7A8 -/* 0C02C0 7F08B790 C5001280 */ lwc1 $f0, 0x1280($t0) -.L7F08B794: -/* 0C02C4 7F08B794 10000003 */ b .L7F08B7A4 -/* 0C02C8 7F08B798 46001306 */ mov.s $f12, $f2 -/* 0C02CC 7F08B79C 44816000 */ mtc1 $at, $f12 -.L7F08B7A0: -/* 0C02D0 7F08B7A0 00002025 */ move $a0, $zero -.L7F08B7A4: -/* 0C02D4 7F08B7A4 C5001280 */ lwc1 $f0, 0x1280($t0) -.L7F08B7A8: -/* 0C02D8 7F08B7A8 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0C02DC 7F08B7AC 4600703C */ c.lt.s $f14, $f0 -/* 0C02E0 7F08B7B0 00000000 */ nop -/* 0C02E4 7F08B7B4 45020008 */ bc1fl .L7F08B7D8 -/* 0C02E8 7F08B7B8 460E003C */ c.lt.s $f0, $f14 -/* 0C02EC 7F08B7BC 44814000 */ mtc1 $at, $f8 -/* 0C02F0 7F08B7C0 00000000 */ nop -/* 0C02F4 7F08B7C4 46080281 */ sub.s $f10, $f0, $f8 -/* 0C02F8 7F08B7C8 E50A1280 */ swc1 $f10, 0x1280($t0) -/* 0C02FC 7F08B7CC 8E280000 */ lw $t0, ($s1) -/* 0C0300 7F08B7D0 C5001280 */ lwc1 $f0, 0x1280($t0) -/* 0C0304 7F08B7D4 460E003C */ c.lt.s $f0, $f14 -.L7F08B7D8: -/* 0C0308 7F08B7D8 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0C030C 7F08B7DC 45020007 */ bc1fl .L7F08B7FC -/* 0C0310 7F08B7E0 00107900 */ sll $t7, $s0, 4 -/* 0C0314 7F08B7E4 44819000 */ mtc1 $at, $f18 -/* 0C0318 7F08B7E8 00000000 */ nop -/* 0C031C 7F08B7EC 46120100 */ add.s $f4, $f0, $f18 -/* 0C0320 7F08B7F0 E5041280 */ swc1 $f4, 0x1280($t0) -/* 0C0324 7F08B7F4 8E280000 */ lw $t0, ($s1) -.L7F08B7F8: -/* 0C0328 7F08B7F8 00107900 */ sll $t7, $s0, 4 -.L7F08B7FC: -/* 0C032C 7F08B7FC 0004C080 */ sll $t8, $a0, 2 -/* 0C0330 7F08B800 0304C021 */ addu $t8, $t8, $a0 -/* 0C0334 7F08B804 01F07823 */ subu $t7, $t7, $s0 -/* 0C0338 7F08B808 000F78C0 */ sll $t7, $t7, 3 -/* 0C033C 7F08B80C 0018C080 */ sll $t8, $t8, 2 -/* 0C0340 7F08B810 3C198003 */ lui $t9, %hi(firing_animation_groups) -/* 0C0344 7F08B814 273968D8 */ addiu $t9, %lo(firing_animation_groups) # addiu $t9, $t9, 0x68d8 -/* 0C0348 7F08B818 01F84821 */ addu $t1, $t7, $t8 -/* 0C034C 7F08B81C 01391021 */ addu $v0, $t1, $t9 -/* 0C0350 7F08B820 8C430004 */ lw $v1, 4($v0) -/* 0C0354 7F08B824 8C4A0000 */ lw $t2, ($v0) -/* 0C0358 7F08B828 3C0B8007 */ lui $t3, %hi(ptr_animation_table) -/* 0C035C 7F08B82C 10600004 */ beqz $v1, .L7F08B840 -/* 0C0360 7F08B830 AFAA007C */ sw $t2, 0x7c($sp) -/* 0C0364 7F08B834 8D6B9538 */ lw $t3, %lo(ptr_animation_table)($t3) -/* 0C0368 7F08B838 006B6021 */ addu $t4, $v1, $t3 -/* 0C036C 7F08B83C AFAC009C */ sw $t4, 0x9c($sp) -.L7F08B840: -/* 0C0370 7F08B840 C4460008 */ lwc1 $f6, 8($v0) -/* 0C0374 7F08B844 C4480010 */ lwc1 $f8, 0x10($v0) -/* 0C0378 7F08B848 C442000C */ lwc1 $f2, 0xc($v0) -/* 0C037C 7F08B84C 46066302 */ mul.s $f12, $f12, $f6 -/* 0C0380 7F08B850 E7A80090 */ swc1 $f8, 0x90($sp) -/* 0C0384 7F08B854 8D061284 */ lw $a2, 0x1284($t0) -.L7F08B858: -/* 0C0388 7F08B858 8FAD007C */ lw $t5, 0x7c($sp) -/* 0C038C 7F08B85C 8FAE009C */ lw $t6, 0x9c($sp) -/* 0C0390 7F08B860 24020001 */ li $v0, 1 -/* 0C0394 7F08B864 51A00006 */ beql $t5, $zero, .L7F08B880 -/* 0C0398 7F08B868 8FB8009C */ lw $t8, 0x9c($sp) -/* 0C039C 7F08B86C 55C00004 */ bnezl $t6, .L7F08B880 -/* 0C03A0 7F08B870 8FB8009C */ lw $t8, 0x9c($sp) -/* 0C03A4 7F08B874 8DAF0000 */ lw $t7, ($t5) -/* 0C03A8 7F08B878 AFAF009C */ sw $t7, 0x9c($sp) -/* 0C03AC 7F08B87C 8FB8009C */ lw $t8, 0x9c($sp) -.L7F08B880: -/* 0C03B0 7F08B880 53060003 */ beql $t8, $a2, .L7F08B890 -/* 0C03B4 7F08B884 4602703E */ c.le.s $f14, $f2 -/* 0C03B8 7F08B888 AFA20054 */ sw $v0, 0x54($sp) -/* 0C03BC 7F08B88C 4602703E */ c.le.s $f14, $f2 -.L7F08B890: -/* 0C03C0 7F08B890 8FA20054 */ lw $v0, 0x54($sp) -/* 0C03C4 7F08B894 4502000C */ bc1fl .L7F08B8C8 -/* 0C03C8 7F08B898 460E103C */ c.lt.s $f2, $f14 -/* 0C03CC 7F08B89C 8D0400D4 */ lw $a0, 0xd4($t0) -/* 0C03D0 7F08B8A0 80890026 */ lb $t1, 0x26($a0) -/* 0C03D4 7F08B8A4 51200007 */ beql $t1, $zero, .L7F08B8C4 -/* 0C03D8 7F08B8A8 24020001 */ li $v0, 1 -/* 0C03DC 7F08B8AC C48A0090 */ lwc1 $f10, 0x90($a0) -/* 0C03E0 7F08B8B0 460A1032 */ c.eq.s $f2, $f10 -/* 0C03E4 7F08B8B4 00000000 */ nop -/* 0C03E8 7F08B8B8 45030003 */ bc1tl .L7F08B8C8 -/* 0C03EC 7F08B8BC 460E103C */ c.lt.s $f2, $f14 -/* 0C03F0 7F08B8C0 24020001 */ li $v0, 1 -.L7F08B8C4: -/* 0C03F4 7F08B8C4 460E103C */ c.lt.s $f2, $f14 -.L7F08B8C8: -/* 0C03F8 7F08B8C8 00000000 */ nop -/* 0C03FC 7F08B8CC 45000006 */ bc1f .L7F08B8E8 -/* 0C0400 7F08B8D0 00000000 */ nop -/* 0C0404 7F08B8D4 8D1900D4 */ lw $t9, 0xd4($t0) -/* 0C0408 7F08B8D8 832A0026 */ lb $t2, 0x26($t9) -/* 0C040C 7F08B8DC 11400002 */ beqz $t2, .L7F08B8E8 -/* 0C0410 7F08B8E0 00000000 */ nop -/* 0C0414 7F08B8E4 24020001 */ li $v0, 1 -.L7F08B8E8: -/* 0C0418 7F08B8E8 50400035 */ beql $v0, $zero, .L7F08B9C0 -/* 0C041C 7F08B8EC C5061288 */ lwc1 $f6, 0x1288($t0) -/* 0C0420 7F08B8F0 8D0400D4 */ lw $a0, 0xd4($t0) -/* 0C0424 7F08B8F4 8FA5009C */ lw $a1, 0x9c($sp) -/* 0C0428 7F08B8F8 00003025 */ move $a2, $zero -/* 0C042C 7F08B8FC 8C8B0054 */ lw $t3, 0x54($a0) -/* 0C0430 7F08B900 3C014180 */ li $at, 0x41800000 # 16.000000 -/* 0C0434 7F08B904 5560002B */ bnezl $t3, .L7F08B9B4 -/* 0C0438 7F08B908 8E290000 */ lw $t1, ($s1) -/* 0C043C 7F08B90C 4602703E */ c.le.s $f14, $f2 -/* 0C0440 7F08B910 44819000 */ mtc1 $at, $f18 -/* 0C0444 7F08B914 45020004 */ bc1fl .L7F08B928 -/* 0C0448 7F08B918 46007006 */ mov.s $f0, $f14 -/* 0C044C 7F08B91C 10000002 */ b .L7F08B928 -/* 0C0450 7F08B920 46001006 */ mov.s $f0, $f2 -/* 0C0454 7F08B924 46007006 */ mov.s $f0, $f14 -.L7F08B928: -/* 0C0458 7F08B928 44070000 */ mfc1 $a3, $f0 -/* 0C045C 7F08B92C E7AC0010 */ swc1 $f12, 0x10($sp) -/* 0C0460 7F08B930 E7B20014 */ swc1 $f18, 0x14($sp) -/* 0C0464 7F08B934 E7A20094 */ swc1 $f2, 0x94($sp) -/* 0C0468 7F08B938 0FC1BF2A */ jal modelSetAnimation -/* 0C046C 7F08B93C E7AC0098 */ swc1 $f12, 0x98($sp) -/* 0C0470 7F08B940 C7A20094 */ lwc1 $f2, 0x94($sp) -/* 0C0474 7F08B944 44807000 */ mtc1 $zero, $f14 -/* 0C0478 7F08B948 8FAC009C */ lw $t4, 0x9c($sp) -/* 0C047C 7F08B94C 8E2E0000 */ lw $t6, ($s1) -/* 0C0480 7F08B950 4602703E */ c.le.s $f14, $f2 -/* 0C0484 7F08B954 C7AC0098 */ lwc1 $f12, 0x98($sp) -/* 0C0488 7F08B958 ADCC1284 */ sw $t4, 0x1284($t6) -/* 0C048C 7F08B95C 8E2D0000 */ lw $t5, ($s1) -/* 0C0490 7F08B960 3C064180 */ lui $a2, 0x4180 -/* 0C0494 7F08B964 45000007 */ bc1f .L7F08B984 -/* 0C0498 7F08B968 E5AC1288 */ swc1 $f12, 0x1288($t5) -/* 0C049C 7F08B96C 8E2F0000 */ lw $t7, ($s1) -/* 0C04A0 7F08B970 44051000 */ mfc1 $a1, $f2 -/* 0C04A4 7F08B974 0FC1BF73 */ jal modelSetAnimLooping -/* 0C04A8 7F08B978 8DE400D4 */ lw $a0, 0xd4($t7) -/* 0C04AC 7F08B97C 44807000 */ mtc1 $zero, $f14 -/* 0C04B0 7F08B980 00000000 */ nop -.L7F08B984: -/* 0C04B4 7F08B984 C7A40090 */ lwc1 $f4, 0x90($sp) -/* 0C04B8 7F08B988 4604703E */ c.le.s $f14, $f4 -/* 0C04BC 7F08B98C 00000000 */ nop -/* 0C04C0 7F08B990 45020008 */ bc1fl .L7F08B9B4 -/* 0C04C4 7F08B994 8E290000 */ lw $t1, ($s1) -/* 0C04C8 7F08B998 8E380000 */ lw $t8, ($s1) -/* 0C04CC 7F08B99C 44052000 */ mfc1 $a1, $f4 -/* 0C04D0 7F08B9A0 0FC1BF7A */ jal modelSetAnimEndFrame -/* 0C04D4 7F08B9A4 8F0400D4 */ lw $a0, 0xd4($t8) -/* 0C04D8 7F08B9A8 44807000 */ mtc1 $zero, $f14 -/* 0C04DC 7F08B9AC 00000000 */ nop -/* 0C04E0 7F08B9B0 8E290000 */ lw $t1, ($s1) -.L7F08B9B4: -/* 0C04E4 7F08B9B4 10000011 */ b .L7F08B9FC -/* 0C04E8 7F08B9B8 8D261284 */ lw $a2, 0x1284($t1) -/* 0C04EC 7F08B9BC C5061288 */ lwc1 $f6, 0x1288($t0) -.L7F08B9C0: -/* 0C04F0 7F08B9C0 46066032 */ c.eq.s $f12, $f6 -/* 0C04F4 7F08B9C4 00000000 */ nop -/* 0C04F8 7F08B9C8 4503000D */ bc1tl .L7F08BA00 -/* 0C04FC 7F08B9CC 8FAB009C */ lw $t3, 0x9c($sp) -/* 0C0500 7F08B9D0 8D0400D4 */ lw $a0, 0xd4($t0) -/* 0C0504 7F08B9D4 44056000 */ mfc1 $a1, $f12 -/* 0C0508 7F08B9D8 E7AC0098 */ swc1 $f12, 0x98($sp) -/* 0C050C 7F08B9DC 0FC1BF93 */ jal modelSetAnimSpeed -/* 0C0510 7F08B9E0 3C063F80 */ lui $a2, 0x3f80 -/* 0C0514 7F08B9E4 C7AC0098 */ lwc1 $f12, 0x98($sp) -/* 0C0518 7F08B9E8 8E390000 */ lw $t9, ($s1) -/* 0C051C 7F08B9EC 44807000 */ mtc1 $zero, $f14 -/* 0C0520 7F08B9F0 E72C1288 */ swc1 $f12, 0x1288($t9) -/* 0C0524 7F08B9F4 8E2A0000 */ lw $t2, ($s1) -/* 0C0528 7F08B9F8 8D461284 */ lw $a2, 0x1284($t2) -.L7F08B9FC: -/* 0C052C 7F08B9FC 8FAB009C */ lw $t3, 0x9c($sp) -.L7F08BA00: -/* 0C0530 7F08BA00 8FAC007C */ lw $t4, 0x7c($sp) -/* 0C0534 7F08BA04 55660017 */ bnel $t3, $a2, .L7F08BA64 -/* 0C0538 7F08BA08 8FA200F0 */ lw $v0, 0xf0($sp) -/* 0C053C 7F08BA0C 1180000D */ beqz $t4, .L7F08BA44 -/* 0C0540 7F08BA10 8FAF00F0 */ lw $t7, 0xf0($sp) -/* 0C0544 7F08BA14 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0C0548 7F08BA18 00003025 */ move $a2, $zero -/* 0C054C 7F08BA1C 24070001 */ li $a3, 1 -/* 0C0550 7F08BA20 948E0012 */ lhu $t6, 0x12($a0) -/* 0C0554 7F08BA24 31CDFBFF */ andi $t5, $t6, 0xfbff -/* 0C0558 7F08BA28 A48D0012 */ sh $t5, 0x12($a0) -/* 0C055C 7F08BA2C C7A8008C */ lwc1 $f8, 0x8c($sp) -/* 0C0560 7F08BA30 8FA5007C */ lw $a1, 0x7c($sp) -/* 0C0564 7F08BA34 0FC0B412 */ jal chrlvUpdateAimendbackShoulders -/* 0C0568 7F08BA38 E7A80010 */ swc1 $f8, 0x10($sp) -/* 0C056C 7F08BA3C 10000009 */ b .L7F08BA64 -/* 0C0570 7F08BA40 8FA200F0 */ lw $v0, 0xf0($sp) -.L7F08BA44: -/* 0C0574 7F08BA44 95F80012 */ lhu $t8, 0x12($t7) -/* 0C0578 7F08BA48 E5EE0154 */ swc1 $f14, 0x154($t7) -/* 0C057C 7F08BA4C E5EE0150 */ swc1 $f14, 0x150($t7) -/* 0C0580 7F08BA50 37090400 */ ori $t1, $t8, 0x400 -/* 0C0584 7F08BA54 A5E90012 */ sh $t1, 0x12($t7) -/* 0C0588 7F08BA58 C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 0C058C 7F08BA5C E5EA0158 */ swc1 $f10, 0x158($t7) -/* 0C0590 7F08BA60 8FA200F0 */ lw $v0, 0xf0($sp) -.L7F08BA64: -/* 0C0594 7F08BA64 C7B20088 */ lwc1 $f18, 0x88($sp) -/* 0C0598 7F08BA68 2419000A */ li $t9, 10 -/* 0C059C 7F08BA6C A059000E */ sb $t9, 0xe($v0) -/* 0C05A0 7F08BA70 E452015C */ swc1 $f18, 0x15c($v0) -/* 0C05A4 7F08BA74 8E2A0000 */ lw $t2, ($s1) -.L7F08BA78: -/* 0C05A8 7F08BA78 8FA300F8 */ lw $v1, 0xf8($sp) -/* 0C05AC 7F08BA7C 8FA200F0 */ lw $v0, 0xf0($sp) -/* 0C05B0 7F08BA80 C544048C */ lwc1 $f4, 0x48c($t2) -/* 0C05B4 7F08BA84 27A50070 */ addiu $a1, $sp, 0x70 -/* 0C05B8 7F08BA88 00008025 */ move $s0, $zero -/* 0C05BC 7F08BA8C E4640008 */ swc1 $f4, 8($v1) -/* 0C05C0 7F08BA90 8E2B0000 */ lw $t3, ($s1) -/* 0C05C4 7F08BA94 C5660490 */ lwc1 $f6, 0x490($t3) -/* 0C05C8 7F08BA98 E466000C */ swc1 $f6, 0xc($v1) -/* 0C05CC 7F08BA9C 8E2C0000 */ lw $t4, ($s1) -/* 0C05D0 7F08BAA0 C5880494 */ lwc1 $f8, 0x494($t4) -/* 0C05D4 7F08BAA4 E4680010 */ swc1 $f8, 0x10($v1) -/* 0C05D8 7F08BAA8 8E2E0000 */ lw $t6, ($s1) -/* 0C05DC 7F08BAAC 8DCD0488 */ lw $t5, 0x488($t6) -/* 0C05E0 7F08BAB0 AC6D0014 */ sw $t5, 0x14($v1) -/* 0C05E4 7F08BAB4 0FC1B2E6 */ jal getsuboffset -/* 0C05E8 7F08BAB8 8C44001C */ lw $a0, 0x1c($v0) -/* 0C05EC 7F08BABC 8FA200F8 */ lw $v0, 0xf8($sp) -/* 0C05F0 7F08BAC0 8FB800F0 */ lw $t8, 0xf0($sp) -/* 0C05F4 7F08BAC4 27A50070 */ addiu $a1, $sp, 0x70 -/* 0C05F8 7F08BAC8 C44A0008 */ lwc1 $f10, 8($v0) -/* 0C05FC 7F08BACC E7AA0070 */ swc1 $f10, 0x70($sp) -/* 0C0600 7F08BAD0 C4520010 */ lwc1 $f18, 0x10($v0) -/* 0C0604 7F08BAD4 E7B20078 */ swc1 $f18, 0x78($sp) -/* 0C0608 7F08BAD8 0FC1B303 */ jal setsuboffset -/* 0C060C 7F08BADC 8F04001C */ lw $a0, 0x1c($t8) -/* 0C0610 7F08BAE0 8E280000 */ lw $t0, ($s1) -/* 0C0614 7F08BAE4 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0C0618 7F08BAE8 44810000 */ mtc1 $at, $f0 -/* 0C061C 7F08BAEC C5060148 */ lwc1 $f6, 0x148($t0) -/* 0C0620 7F08BAF0 C5041280 */ lwc1 $f4, 0x1280($t0) -/* 0C0624 7F08BAF4 3C018005 */ lui $at, %hi(D_800552D0) -/* 0C0628 7F08BAF8 46060201 */ sub.s $f8, $f0, $f6 -/* 0C062C 7F08BAFC C43252D0 */ lwc1 $f18, %lo(D_800552D0)($at) -/* 0C0630 7F08BB00 8FA900F0 */ lw $t1, 0xf0($sp) -/* 0C0634 7F08BB04 46082280 */ add.s $f10, $f4, $f8 -/* 0C0638 7F08BB08 8D24001C */ lw $a0, 0x1c($t1) -/* 0C063C 7F08BB0C 46125182 */ mul.s $f6, $f10, $f18 -/* 0C0640 7F08BB10 46003103 */ div.s $f4, $f6, $f0 -/* 0C0644 7F08BB14 44052000 */ mfc1 $a1, $f4 -/* 0C0648 7F08BB18 0FC1B34F */ jal setsubroty -/* 0C064C 7F08BB1C 00000000 */ nop -/* 0C0650 7F08BB20 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0C0654 7F08BB24 240A0019 */ li $t2, 25 -/* 0C0658 7F08BB28 00002825 */ move $a1, $zero -/* 0C065C 7F08BB2C 8C8F0014 */ lw $t7, 0x14($a0) -/* 0C0660 7F08BB30 A08A0007 */ sb $t2, 7($a0) -/* 0C0664 7F08BB34 35F90001 */ ori $t9, $t7, 1 -/* 0C0668 7F08BB38 AC990014 */ sw $t9, 0x14($a0) -/* 0C066C 7F08BB3C 8FAB007C */ lw $t3, 0x7c($sp) -/* 0C0670 7F08BB40 AC8B002C */ sw $t3, 0x2c($a0) -/* 0C0674 7F08BB44 8E2C0000 */ lw $t4, ($s1) -/* 0C0678 7F08BB48 0FC0B446 */ jal chrSetFiring -/* 0C067C 7F08BB4C 8186087D */ lb $a2, 0x87d($t4) -/* 0C0680 7F08BB50 8E2E0000 */ lw $t6, ($s1) -/* 0C0684 7F08BB54 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0C0688 7F08BB58 24050001 */ li $a1, 1 -/* 0C068C 7F08BB5C 0FC0B446 */ jal chrSetFiring -/* 0C0690 7F08BB60 81C60C25 */ lb $a2, 0xc25($t6) -/* 0C0694 7F08BB64 0FC083BC */ jal chrTickBeams -/* 0C0698 7F08BB68 8FA400F8 */ lw $a0, 0xf8($sp) -/* 0C069C 7F08BB6C AFA200A0 */ sw $v0, 0xa0($sp) -/* 0C06A0 7F08BB70 00003825 */ move $a3, $zero -/* 0C06A4 7F08BB74 00001825 */ move $v1, $zero -.L7F08BB78: -/* 0C06A8 7F08BB78 8E2D0000 */ lw $t5, ($s1) -/* 0C06AC 7F08BB7C 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0C06B0 7F08BB80 02002825 */ move $a1, $s0 -/* 0C06B4 7F08BB84 01A33021 */ addu $a2, $t5, $v1 -/* 0C06B8 7F08BB88 24C62A18 */ addiu $a2, $a2, 0x2a18 -/* 0C06BC 7F08BB8C AFA30034 */ sw $v1, 0x34($sp) -/* 0C06C0 7F08BB90 0FC0B58C */ jal sub_GAME_7F02D630 -/* 0C06C4 7F08BB94 AFA70038 */ sw $a3, 0x38($sp) -/* 0C06C8 7F08BB98 8FA30034 */ lw $v1, 0x34($sp) -/* 0C06CC 7F08BB9C 10400007 */ beqz $v0, .L7F08BBBC -/* 0C06D0 7F08BBA0 8FA70038 */ lw $a3, 0x38($sp) -/* 0C06D4 7F08BBA4 8E290000 */ lw $t1, ($s1) -/* 0C06D8 7F08BBA8 3C188005 */ lui $t8, %hi(D_80048380) -/* 0C06DC 7F08BBAC 8F188380 */ lw $t8, %lo(D_80048380)($t8) -/* 0C06E0 7F08BBB0 01277821 */ addu $t7, $t1, $a3 -/* 0C06E4 7F08BBB4 1000001E */ b .L7F08BC30 -/* 0C06E8 7F08BBB8 ADF82A30 */ sw $t8, 0x2a30($t7) -.L7F08BBBC: -/* 0C06EC 7F08BBBC 8E280000 */ lw $t0, ($s1) -/* 0C06F0 7F08BBC0 3C0B8005 */ lui $t3, %hi(D_80048380) -/* 0C06F4 7F08BBC4 8D6B8380 */ lw $t3, %lo(D_80048380)($t3) -/* 0C06F8 7F08BBC8 0107C821 */ addu $t9, $t0, $a3 -/* 0C06FC 7F08BBCC 8F2A2A30 */ lw $t2, 0x2a30($t9) -/* 0C0700 7F08BBD0 256CFFFF */ addiu $t4, $t3, -1 -/* 0C0704 7F08BBD4 001010C0 */ sll $v0, $s0, 3 -/* 0C0708 7F08BBD8 014C082A */ slt $at, $t2, $t4 -/* 0C070C 7F08BBDC 10200014 */ beqz $at, .L7F08BC30 -/* 0C0710 7F08BBE0 00501023 */ subu $v0, $v0, $s0 -/* 0C0714 7F08BBE4 00021080 */ sll $v0, $v0, 2 -/* 0C0718 7F08BBE8 00501021 */ addu $v0, $v0, $s0 -/* 0C071C 7F08BBEC 00021080 */ sll $v0, $v0, 2 -/* 0C0720 7F08BBF0 00501021 */ addu $v0, $v0, $s0 -/* 0C0724 7F08BBF4 000210C0 */ sll $v0, $v0, 3 -/* 0C0728 7F08BBF8 01027021 */ addu $t6, $t0, $v0 -/* 0C072C 7F08BBFC C5C80B58 */ lwc1 $f8, 0xb58($t6) -/* 0C0730 7F08BC00 01036821 */ addu $t5, $t0, $v1 -/* 0C0734 7F08BC04 E5A82A18 */ swc1 $f8, 0x2a18($t5) -/* 0C0738 7F08BC08 8E280000 */ lw $t0, ($s1) -/* 0C073C 7F08BC0C 01024821 */ addu $t1, $t0, $v0 -/* 0C0740 7F08BC10 C52A0B5C */ lwc1 $f10, 0xb5c($t1) -/* 0C0744 7F08BC14 0103C021 */ addu $t8, $t0, $v1 -/* 0C0748 7F08BC18 E70A2A1C */ swc1 $f10, 0x2a1c($t8) -/* 0C074C 7F08BC1C 8E280000 */ lw $t0, ($s1) -/* 0C0750 7F08BC20 01027821 */ addu $t7, $t0, $v0 -/* 0C0754 7F08BC24 C5F20B60 */ lwc1 $f18, 0xb60($t7) -/* 0C0758 7F08BC28 0103C821 */ addu $t9, $t0, $v1 -/* 0C075C 7F08BC2C E7322A20 */ swc1 $f18, 0x2a20($t9) -.L7F08BC30: -/* 0C0760 7F08BC30 26100001 */ addiu $s0, $s0, 1 -/* 0C0764 7F08BC34 24010002 */ li $at, 2 -/* 0C0768 7F08BC38 24E70004 */ addiu $a3, $a3, 4 -/* 0C076C 7F08BC3C 1601FFCE */ bne $s0, $at, .L7F08BB78 -/* 0C0770 7F08BC40 2463000C */ addiu $v1, $v1, 0xc -/* 0C0774 7F08BC44 8FAB00F0 */ lw $t3, 0xf0($sp) -/* 0C0778 7F08BC48 956A0012 */ lhu $t2, 0x12($t3) -/* 0C077C 7F08BC4C 354C0800 */ ori $t4, $t2, 0x800 -/* 0C0780 7F08BC50 A56C0012 */ sh $t4, 0x12($t3) -/* 0C0784 7F08BC54 8E2E0000 */ lw $t6, ($s1) -/* 0C0788 7F08BC58 8FAD00F8 */ lw $t5, 0xf8($sp) -/* 0C078C 7F08BC5C C5C6048C */ lwc1 $f6, 0x48c($t6) -/* 0C0790 7F08BC60 E5A60008 */ swc1 $f6, 8($t5) -/* 0C0794 7F08BC64 8E290000 */ lw $t1, ($s1) -/* 0C0798 7F08BC68 C5240490 */ lwc1 $f4, 0x490($t1) -/* 0C079C 7F08BC6C E5A4000C */ swc1 $f4, 0xc($t5) -/* 0C07A0 7F08BC70 8E380000 */ lw $t8, ($s1) -/* 0C07A4 7F08BC74 C7080494 */ lwc1 $f8, 0x494($t8) -/* 0C07A8 7F08BC78 E5A80010 */ swc1 $f8, 0x10($t5) -/* 0C07AC 7F08BC7C 8E2F0000 */ lw $t7, ($s1) -/* 0C07B0 7F08BC80 8DF90488 */ lw $t9, 0x488($t7) -/* 0C07B4 7F08BC84 ADB90014 */ sw $t9, 0x14($t5) -/* 0C07B8 7F08BC88 10000006 */ b .L7F08BCA4 -/* 0C07BC 7F08BC8C 8FA200A0 */ lw $v0, 0xa0($sp) -.L7F08BC90: -/* 0C07C0 7F08BC90 8FAA00F8 */ lw $t2, 0xf8($sp) -.L7F08BC94: -/* 0C07C4 7F08BC94 00001025 */ move $v0, $zero -/* 0C07C8 7F08BC98 914C0001 */ lbu $t4, 1($t2) -/* 0C07CC 7F08BC9C 318BFFFD */ andi $t3, $t4, 0xfffd -/* 0C07D0 7F08BCA0 A14B0001 */ sb $t3, 1($t2) -.L7F08BCA4: -/* 0C07D4 7F08BCA4 8FBF0024 */ lw $ra, 0x24($sp) -/* 0C07D8 7F08BCA8 8FB0001C */ lw $s0, 0x1c($sp) -/* 0C07DC 7F08BCAC 8FB10020 */ lw $s1, 0x20($sp) -/* 0C07E0 7F08BCB0 03E00008 */ jr $ra -/* 0C07E4 7F08BCB4 27BD00F8 */ addiu $sp, $sp, 0xf8 -) + if (stringbuffer_top[upper_text_buffer_index][0] != '\0') +#else + if (dword_CODE_bss_80079DC8[upper_text_buffer_index][0] != '\0') #endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_8004AE94 -.word 0xbd4ccccd -glabel D_8004AE98 -.word 0xbecccccd -glabel D_8004AE9C -.word 0x3d4ccccd -glabel D_8004AEA0 -.word 0x3ecccccd -glabel D_8004AEA4 -.word 0x40c90fdb - -.text -glabel playerTickBeams -/* 0BDDD4 7F08B3E4 27BDFF08 */ addiu $sp, $sp, -0xf8 -/* 0BDDD8 7F08B3E8 AFBF0024 */ sw $ra, 0x24($sp) -/* 0BDDDC 7F08B3EC AFB10020 */ sw $s1, 0x20($sp) -/* 0BDDE0 7F08B3F0 AFB0001C */ sw $s0, 0x1c($sp) -/* 0BDDE4 7F08B3F4 0FC269A7 */ jal getPlayerPointerIndex -/* 0BDDE8 7F08B3F8 AFA400F8 */ sw $a0, 0xf8($sp) -/* 0BDDEC 7F08B3FC 8FAE00F8 */ lw $t6, 0xf8($sp) -/* 0BDDF0 7F08B400 AFA200F4 */ sw $v0, 0xf4($sp) -/* 0BDDF4 7F08B404 8DCF0004 */ lw $t7, 4($t6) -/* 0BDDF8 7F08B408 11E0000B */ beqz $t7, .L7F08B438 -/* 0BDDFC 7F08B40C AFAF00F0 */ sw $t7, 0xf0($sp) -/* 0BDE00 7F08B410 0FC269A4 */ jal get_cur_playernum -/* 0BDE04 7F08B414 00000000 */ nop -/* 0BDE08 7F08B418 0FC26A86 */ jal get_player_position_in_shuffled -/* 0BDE0C 7F08B41C 00402025 */ move $a0, $v0 -/* 0BDE10 7F08B420 54400006 */ bnezl $v0, .L7F08B43C -/* 0BDE14 7F08B424 8FA900F0 */ lw $t1, 0xf0($sp) -/* 0BDE18 7F08B428 8FA200F0 */ lw $v0, 0xf0($sp) -/* 0BDE1C 7F08B42C 94580012 */ lhu $t8, 0x12($v0) -/* 0BDE20 7F08B430 3319F7FF */ andi $t9, $t8, 0xf7ff -/* 0BDE24 7F08B434 A4590012 */ sh $t9, 0x12($v0) -.L7F08B438: -/* 0BDE28 7F08B438 8FA900F0 */ lw $t1, 0xf0($sp) -.L7F08B43C: -/* 0BDE2C 7F08B43C 8FAA00F4 */ lw $t2, 0xf4($sp) -/* 0BDE30 7F08B440 3C0C8007 */ lui $t4, %hi(g_playerPointers) # $t4, 0x8007 -/* 0BDE34 7F08B444 1120004D */ beqz $t1, .L7F08B57C -/* 0BDE38 7F08B448 000A5880 */ sll $t3, $t2, 2 -/* 0BDE3C 7F08B44C 258C89F0 */ addiu $t4, %lo(g_playerPointers) # addiu $t4, $t4, -0x7610 -/* 0BDE40 7F08B450 016C8821 */ addu $s1, $t3, $t4 -/* 0BDE44 7F08B454 8E2D0000 */ lw $t5, ($s1) -/* 0BDE48 7F08B458 8DAE00D4 */ lw $t6, 0xd4($t5) -/* 0BDE4C 7F08B45C 51C00048 */ beql $t6, $zero, .L7F08B580 -/* 0BDE50 7F08B460 8FAF00F0 */ lw $t7, 0xf0($sp) -/* 0BDE54 7F08B464 0FC240F8 */ jal get_debug_render_raster -/* 0BDE58 7F08B468 00000000 */ nop -/* 0BDE5C 7F08B46C 50400007 */ beql $v0, $zero, .L7F08B48C -/* 0BDE60 7F08B470 8E390000 */ lw $t9, ($s1) -/* 0BDE64 7F08B474 8E2F0000 */ lw $t7, ($s1) -/* 0BDE68 7F08B478 24010001 */ li $at, 1 -/* 0BDE6C 7F08B47C 8DF80000 */ lw $t8, ($t7) -/* 0BDE70 7F08B480 5701003F */ bnel $t8, $at, .L7F08B580 -/* 0BDE74 7F08B484 8FAF00F0 */ lw $t7, 0xf0($sp) -/* 0BDE78 7F08B488 8E390000 */ lw $t9, ($s1) -.L7F08B48C: -/* 0BDE7C 7F08B48C AF2000AC */ sw $zero, 0xac($t9) -/* 0BDE80 7F08B490 0FC0839A */ jal chrTickBeams -/* 0BDE84 7F08B494 8FA400F8 */ lw $a0, 0xf8($sp) -/* 0BDE88 7F08B498 8E2A0000 */ lw $t2, ($s1) -/* 0BDE8C 7F08B49C AFA200E8 */ sw $v0, 0xe8($sp) -/* 0BDE90 7F08B4A0 24090001 */ li $t1, 1 -/* 0BDE94 7F08B4A4 AD4900AC */ sw $t1, 0xac($t2) -/* 0BDE98 7F08B4A8 8E280000 */ lw $t0, ($s1) -/* 0BDE9C 7F08B4AC 8D0B00A8 */ lw $t3, 0xa8($t0) -/* 0BDEA0 7F08B4B0 C5640008 */ lwc1 $f4, 8($t3) -/* 0BDEA4 7F08B4B4 E504048C */ swc1 $f4, 0x48c($t0) -/* 0BDEA8 7F08B4B8 8E280000 */ lw $t0, ($s1) -/* 0BDEAC 7F08B4BC 8D0C00A8 */ lw $t4, 0xa8($t0) -/* 0BDEB0 7F08B4C0 C586000C */ lwc1 $f6, 0xc($t4) -/* 0BDEB4 7F08B4C4 E5060490 */ swc1 $f6, 0x490($t0) -/* 0BDEB8 7F08B4C8 8E280000 */ lw $t0, ($s1) -/* 0BDEBC 7F08B4CC 8D0D00A8 */ lw $t5, 0xa8($t0) -/* 0BDEC0 7F08B4D0 C5A80010 */ lwc1 $f8, 0x10($t5) -/* 0BDEC4 7F08B4D4 E5080494 */ swc1 $f8, 0x494($t0) -/* 0BDEC8 7F08B4D8 8E280000 */ lw $t0, ($s1) -/* 0BDECC 7F08B4DC 8D0E00A8 */ lw $t6, 0xa8($t0) -/* 0BDED0 7F08B4E0 8DCF0014 */ lw $t7, 0x14($t6) -/* 0BDED4 7F08B4E4 AD0F0488 */ sw $t7, 0x488($t0) -/* 0BDED8 7F08B4E8 0FC1F7DC */ jal sub_GAME_7F07DE9C -/* 0BDEDC 7F08B4EC 8E240000 */ lw $a0, ($s1) -/* 0BDEE0 7F08B4F0 8FB800F8 */ lw $t8, 0xf8($sp) -/* 0BDEE4 7F08B4F4 93190001 */ lbu $t9, 1($t8) -/* 0BDEE8 7F08B4F8 33290002 */ andi $t1, $t9, 2 -/* 0BDEEC 7F08B4FC 1120001D */ beqz $t1, .L7F08B574 -/* 0BDEF0 7F08B500 00000000 */ nop -/* 0BDEF4 7F08B504 8E2A0000 */ lw $t2, ($s1) -/* 0BDEF8 7F08B508 8D4B00D4 */ lw $t3, 0xd4($t2) -/* 0BDEFC 7F08B50C 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 0BDF00 7F08B510 8D70000C */ lw $s0, 0xc($t3) -/* 0BDF04 7F08B514 00402025 */ move $a0, $v0 -/* 0BDF08 7F08B518 02002825 */ move $a1, $s0 -/* 0BDF0C 7F08B51C 0FC1618D */ jal matrix_4x4_multiply_homogeneous -/* 0BDF10 7F08B520 27A600A4 */ addiu $a2, $sp, 0xa4 -/* 0BDF14 7F08B524 3C0140E0 */ li $at, 0x40E00000 # 7.000000 -/* 0BDF18 7F08B528 44810000 */ mtc1 $at, $f0 -/* 0BDF1C 7F08B52C C7AA00B4 */ lwc1 $f10, 0xb4($sp) -/* 0BDF20 7F08B530 C7A400D4 */ lwc1 $f4, 0xd4($sp) -/* 0BDF24 7F08B534 8E2C0000 */ lw $t4, ($s1) -/* 0BDF28 7F08B538 46005482 */ mul.s $f18, $f10, $f0 -/* 0BDF2C 7F08B53C 46049180 */ add.s $f6, $f18, $f4 -/* 0BDF30 7F08B540 E58604B4 */ swc1 $f6, 0x4b4($t4) -/* 0BDF34 7F08B544 C7A800B8 */ lwc1 $f8, 0xb8($sp) -/* 0BDF38 7F08B548 C7B200D8 */ lwc1 $f18, 0xd8($sp) -/* 0BDF3C 7F08B54C 8E2D0000 */ lw $t5, ($s1) -/* 0BDF40 7F08B550 46004282 */ mul.s $f10, $f8, $f0 -/* 0BDF44 7F08B554 46125100 */ add.s $f4, $f10, $f18 -/* 0BDF48 7F08B558 E5A404B8 */ swc1 $f4, 0x4b8($t5) -/* 0BDF4C 7F08B55C C7A600BC */ lwc1 $f6, 0xbc($sp) -/* 0BDF50 7F08B560 C7AA00DC */ lwc1 $f10, 0xdc($sp) -/* 0BDF54 7F08B564 8E2E0000 */ lw $t6, ($s1) -/* 0BDF58 7F08B568 46003202 */ mul.s $f8, $f6, $f0 -/* 0BDF5C 7F08B56C 460A4480 */ add.s $f18, $f8, $f10 -/* 0BDF60 7F08B570 E5D204BC */ swc1 $f18, 0x4bc($t6) -.L7F08B574: -/* 0BDF64 7F08B574 10000288 */ b .L7F08BF98 -/* 0BDF68 7F08B578 8FA200E8 */ lw $v0, 0xe8($sp) -.L7F08B57C: -/* 0BDF6C 7F08B57C 8FAF00F0 */ lw $t7, 0xf0($sp) -.L7F08B580: -/* 0BDF70 7F08B580 8FB800F4 */ lw $t8, 0xf4($sp) -/* 0BDF74 7F08B584 3C098007 */ lui $t1, %hi(g_playerPointers) # $t1, 0x8007 -/* 0BDF78 7F08B588 11E0027E */ beqz $t7, .L7F08BF84 -/* 0BDF7C 7F08B58C 0018C880 */ sll $t9, $t8, 2 -/* 0BDF80 7F08B590 252989F0 */ addiu $t1, %lo(g_playerPointers) # addiu $t1, $t1, -0x7610 -/* 0BDF84 7F08B594 03298821 */ addu $s1, $t9, $t1 -/* 0BDF88 7F08B598 8E2A0000 */ lw $t2, ($s1) -/* 0BDF8C 7F08B59C 8D4B00D4 */ lw $t3, 0xd4($t2) -/* 0BDF90 7F08B5A0 51600279 */ beql $t3, $zero, .L7F08BF88 -/* 0BDF94 7F08B5A4 8FAA00F8 */ lw $t2, 0xf8($sp) -/* 0BDF98 7F08B5A8 0FC26669 */ jal getPlayerCount -/* 0BDF9C 7F08B5AC 00000000 */ nop -/* 0BDFA0 7F08B5B0 28410002 */ slti $at, $v0, 2 -/* 0BDFA4 7F08B5B4 54200274 */ bnezl $at, .L7F08BF88 -/* 0BDFA8 7F08B5B8 8FAA00F8 */ lw $t2, 0xf8($sp) -/* 0BDFAC 7F08B5BC 0FC269A4 */ jal get_cur_playernum -/* 0BDFB0 7F08B5C0 00000000 */ nop -/* 0BDFB4 7F08B5C4 8FAC00F4 */ lw $t4, 0xf4($sp) -/* 0BDFB8 7F08B5C8 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0BDFBC 7F08B5CC 24050001 */ li $a1, 1 -/* 0BDFC0 7F08B5D0 504C026D */ beql $v0, $t4, .L7F08BF88 -/* 0BDFC4 7F08B5D4 8FAA00F8 */ lw $t2, 0xf8($sp) -/* 0BDFC8 7F08B5D8 44811000 */ mtc1 $at, $f2 -/* 0BDFCC 7F08B5DC AFA0009C */ sw $zero, 0x9c($sp) -/* 0BDFD0 7F08B5E0 AFA0007C */ sw $zero, 0x7c($sp) -/* 0BDFD4 7F08B5E4 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0BDFD8 7F08B5E8 E7A20090 */ swc1 $f2, 0x90($sp) -/* 0BDFDC 7F08B5EC 0FC08BFD */ jal chrGetEquippedWeaponProp -/* 0BDFE0 7F08B5F0 E7A20094 */ swc1 $f2, 0x94($sp) -/* 0BDFE4 7F08B5F4 00408025 */ move $s0, $v0 -/* 0BDFE8 7F08B5F8 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0BDFEC 7F08B5FC 0FC08BFD */ jal chrGetEquippedWeaponProp -/* 0BDFF0 7F08B600 00002825 */ move $a1, $zero -/* 0BDFF4 7F08B604 C7A20094 */ lwc1 $f2, 0x94($sp) -/* 0BDFF8 7F08B608 00402825 */ move $a1, $v0 -/* 0BDFFC 7F08B60C 00001825 */ move $v1, $zero -/* 0BE000 7F08B610 00002025 */ move $a0, $zero -/* 0BE004 7F08B614 12000002 */ beqz $s0, .L7F08B620 -/* 0BE008 7F08B618 AFA00054 */ sw $zero, 0x54($sp) -/* 0BE00C 7F08B61C 8E030004 */ lw $v1, 4($s0) -.L7F08B620: -/* 0BE010 7F08B620 50400003 */ beql $v0, $zero, .L7F08B630 -/* 0BE014 7F08B624 AFA3005C */ sw $v1, 0x5c($sp) -/* 0BE018 7F08B628 8C440004 */ lw $a0, 4($v0) -/* 0BE01C 7F08B62C AFA3005C */ sw $v1, 0x5c($sp) -.L7F08B630: -/* 0BE020 7F08B630 AFA40058 */ sw $a0, 0x58($sp) -/* 0BE024 7F08B634 AFA50060 */ sw $a1, 0x60($sp) -/* 0BE028 7F08B638 0FC269A4 */ jal get_cur_playernum -/* 0BE02C 7F08B63C E7A20094 */ swc1 $f2, 0x94($sp) -/* 0BE030 7F08B640 0FC26A86 */ jal get_player_position_in_shuffled -/* 0BE034 7F08B644 00402025 */ move $a0, $v0 -/* 0BE038 7F08B648 8FA3005C */ lw $v1, 0x5c($sp) -/* 0BE03C 7F08B64C 8FA50060 */ lw $a1, 0x60($sp) -/* 0BE040 7F08B650 14400006 */ bnez $v0, .L7F08B66C -/* 0BE044 7F08B654 C7A20094 */ lwc1 $f2, 0x94($sp) -/* 0BE048 7F08B658 3C028003 */ lui $v0, %hi(D_800368B8+0x1C) # $v0, 0x8003 -/* 0BE04C 7F08B65C 24421E1C */ addiu $v0, %lo(D_800368B8+0x1C) # addiu $v0, $v0, 0x1e1c -/* 0BE050 7F08B660 8C4D0000 */ lw $t5, ($v0) -/* 0BE054 7F08B664 25AE0001 */ addiu $t6, $t5, 1 -/* 0BE058 7F08B668 AC4E0000 */ sw $t6, ($v0) -.L7F08B66C: -/* 0BE05C 7F08B66C 3C028003 */ lui $v0, %hi(D_800368B8+0x1C) # $v0, 0x8003 -/* 0BE060 7F08B670 24421E1C */ addiu $v0, %lo(D_800368B8+0x1C) # addiu $v0, $v0, 0x1e1c -/* 0BE064 7F08B674 8C4F0000 */ lw $t7, ($v0) -/* 0BE068 7F08B678 29E10002 */ slti $at, $t7, 2 -/* 0BE06C 7F08B67C 542001BB */ bnezl $at, .L7F08BD6C -/* 0BE070 7F08B680 8E2A0000 */ lw $t2, ($s1) -/* 0BE074 7F08B684 8E280000 */ lw $t0, ($s1) -/* 0BE078 7F08B688 C5042A00 */ lwc1 $f4, 0x2a00($t0) -/* 0BE07C 7F08B68C E7A4008C */ swc1 $f4, 0x8c($sp) -/* 0BE080 7F08B690 C5062A04 */ lwc1 $f6, 0x2a04($t0) -/* 0BE084 7F08B694 E7A60088 */ swc1 $f6, 0x88($sp) -/* 0BE088 7F08B698 8D1800D8 */ lw $t8, 0xd8($t0) -/* 0BE08C 7F08B69C 13000036 */ beqz $t8, .L7F08B778 -/* 0BE090 7F08B6A0 3C078003 */ lui $a3, %hi(g_bondviewBondDeathAnimationsCount) # $a3, 0x8003 -/* 0BE094 7F08B6A4 8CE71A5C */ lw $a3, %lo(g_bondviewBondDeathAnimationsCount)($a3) -/* 0BE098 7F08B6A8 00002825 */ move $a1, $zero -/* 0BE09C 7F08B6AC 00008025 */ move $s0, $zero -/* 0BE0A0 7F08B6B0 18E00010 */ blez $a3, .L7F08B6F4 -/* 0BE0A4 7F08B6B4 3C198003 */ lui $t9, %hi(g_bondviewBondDeathAnimations) -/* 0BE0A8 7F08B6B8 27221A28 */ addiu $v0, $t9, %lo(g_bondviewBondDeathAnimations) -/* 0BE0AC 7F08B6BC 3C038006 */ lui $v1, %hi(ptr_animation_table) # $v1, 0x8006 -/* 0BE0B0 7F08B6C0 00074880 */ sll $t1, $a3, 2 -/* 0BE0B4 7F08B6C4 01222021 */ addu $a0, $t1, $v0 -/* 0BE0B8 7F08B6C8 8C638478 */ lw $v1, %lo(ptr_animation_table)($v1) -/* 0BE0BC 7F08B6CC 8D06127C */ lw $a2, 0x127c($t0) -/* 0BE0C0 7F08B6D0 8C4A0000 */ lw $t2, ($v0) -.L7F08B6D4: -/* 0BE0C4 7F08B6D4 24420004 */ addiu $v0, $v0, 4 -/* 0BE0C8 7F08B6D8 0044082B */ sltu $at, $v0, $a0 -/* 0BE0CC 7F08B6DC 01435821 */ addu $t3, $t2, $v1 -/* 0BE0D0 7F08B6E0 14CB0002 */ bne $a2, $t3, .L7F08B6EC -/* 0BE0D4 7F08B6E4 00000000 */ nop -/* 0BE0D8 7F08B6E8 24050001 */ li $a1, 1 -.L7F08B6EC: -/* 0BE0DC 7F08B6EC 5420FFF9 */ bnezl $at, .L7F08B6D4 -/* 0BE0E0 7F08B6F0 8C4A0000 */ lw $t2, ($v0) -.L7F08B6F4: -/* 0BE0E4 7F08B6F4 10A00005 */ beqz $a1, .L7F08B70C -/* 0BE0E8 7F08B6F8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0BE0EC 7F08B6FC 8D06127C */ lw $a2, 0x127c($t0) -/* 0BE0F0 7F08B700 44816000 */ mtc1 $at, $f12 -/* 0BE0F4 7F08B704 10000017 */ b .L7F08B764 -/* 0BE0F8 7F08B708 AFA6009C */ sw $a2, 0x9c($sp) -.L7F08B70C: -/* 0BE0FC 7F08B70C 0C00262C */ jal randomGetNext -/* 0BE100 7F08B710 E7A20094 */ swc1 $f2, 0x94($sp) -/* 0BE104 7F08B714 3C0C8003 */ lui $t4, %hi(g_bondviewBondDeathAnimationsCount) # $t4, 0x8003 -/* 0BE108 7F08B718 8D8C1A5C */ lw $t4, %lo(g_bondviewBondDeathAnimationsCount)($t4) -/* 0BE10C 7F08B71C 3C0F8003 */ lui $t7, %hi(g_bondviewBondDeathAnimations) -/* 0BE110 7F08B720 3C188006 */ lui $t8, %hi(ptr_animation_table) # $t8, 0x8006 -/* 0BE114 7F08B724 004C001B */ divu $zero, $v0, $t4 -/* 0BE118 7F08B728 00006810 */ mfhi $t5 -/* 0BE11C 7F08B72C 000D7080 */ sll $t6, $t5, 2 -/* 0BE120 7F08B730 01EE7821 */ addu $t7, $t7, $t6 -/* 0BE124 7F08B734 8DEF1A28 */ lw $t7, %lo(g_bondviewBondDeathAnimations)($t7) -/* 0BE128 7F08B738 8F188478 */ lw $t8, %lo(ptr_animation_table)($t8) -/* 0BE12C 7F08B73C 8E280000 */ lw $t0, ($s1) -/* 0BE130 7F08B740 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0BE134 7F08B744 01F84821 */ addu $t1, $t7, $t8 -/* 0BE138 7F08B748 AFA9009C */ sw $t1, 0x9c($sp) -/* 0BE13C 7F08B74C 44816000 */ mtc1 $at, $f12 -/* 0BE140 7F08B750 C7A20094 */ lwc1 $f2, 0x94($sp) -/* 0BE144 7F08B754 15800002 */ bnez $t4, .L7F08B760 -/* 0BE148 7F08B758 00000000 */ nop -/* 0BE14C 7F08B75C 0007000D */ break 7 -.L7F08B760: -/* 0BE150 7F08B760 8D06127C */ lw $a2, 0x127c($t0) -.L7F08B764: -/* 0BE154 7F08B764 44807000 */ mtc1 $zero, $f14 -/* 0BE158 7F08B768 00000000 */ nop -/* 0BE15C 7F08B76C E7AE008C */ swc1 $f14, 0x8c($sp) -/* 0BE160 7F08B770 100000F6 */ b .L7F08BB4C -/* 0BE164 7F08B774 E7AE0088 */ swc1 $f14, 0x88($sp) -.L7F08B778: -/* 0BE168 7F08B778 12000005 */ beqz $s0, .L7F08B790 -/* 0BE16C 7F08B77C 00000000 */ nop -/* 0BE170 7F08B780 10A00003 */ beqz $a1, .L7F08B790 -/* 0BE174 7F08B784 00000000 */ nop -/* 0BE178 7F08B788 1000002E */ b .L7F08B844 -/* 0BE17C 7F08B78C 24100003 */ li $s0, 3 -.L7F08B790: -/* 0BE180 7F08B790 16000005 */ bnez $s0, .L7F08B7A8 -/* 0BE184 7F08B794 00000000 */ nop -/* 0BE188 7F08B798 14A00003 */ bnez $a1, .L7F08B7A8 -/* 0BE18C 7F08B79C 00000000 */ nop -/* 0BE190 7F08B7A0 10000028 */ b .L7F08B844 -/* 0BE194 7F08B7A4 24100002 */ li $s0, 2 -.L7F08B7A8: -/* 0BE198 7F08B7A8 10600008 */ beqz $v1, .L7F08B7CC -/* 0BE19C 7F08B7AC 24050200 */ li $a1, 512 -/* 0BE1A0 7F08B7B0 80640080 */ lb $a0, 0x80($v1) -/* 0BE1A4 7F08B7B4 0FC1795B */ jal bondwalkItemCheckBitflags -/* 0BE1A8 7F08B7B8 AFA3005C */ sw $v1, 0x5c($sp) -/* 0BE1AC 7F08B7BC 14400003 */ bnez $v0, .L7F08B7CC -/* 0BE1B0 7F08B7C0 8FA3005C */ lw $v1, 0x5c($sp) -/* 0BE1B4 7F08B7C4 1000001F */ b .L7F08B844 -/* 0BE1B8 7F08B7C8 24100002 */ li $s0, 2 -.L7F08B7CC: -/* 0BE1BC 7F08B7CC 8FA20058 */ lw $v0, 0x58($sp) -/* 0BE1C0 7F08B7D0 24050200 */ li $a1, 512 -/* 0BE1C4 7F08B7D4 10400008 */ beqz $v0, .L7F08B7F8 -/* 0BE1C8 7F08B7D8 00000000 */ nop -/* 0BE1CC 7F08B7DC 80440080 */ lb $a0, 0x80($v0) -/* 0BE1D0 7F08B7E0 0FC1795B */ jal bondwalkItemCheckBitflags -/* 0BE1D4 7F08B7E4 AFA3005C */ sw $v1, 0x5c($sp) -/* 0BE1D8 7F08B7E8 14400003 */ bnez $v0, .L7F08B7F8 -/* 0BE1DC 7F08B7EC 8FA3005C */ lw $v1, 0x5c($sp) -/* 0BE1E0 7F08B7F0 10000014 */ b .L7F08B844 -/* 0BE1E4 7F08B7F4 24100002 */ li $s0, 2 -.L7F08B7F8: -/* 0BE1E8 7F08B7F8 10600007 */ beqz $v1, .L7F08B818 -/* 0BE1EC 7F08B7FC 24050100 */ li $a1, 256 -/* 0BE1F0 7F08B800 0FC1795B */ jal bondwalkItemCheckBitflags -/* 0BE1F4 7F08B804 80640080 */ lb $a0, 0x80($v1) -/* 0BE1F8 7F08B808 50400004 */ beql $v0, $zero, .L7F08B81C -/* 0BE1FC 7F08B80C 8FA20058 */ lw $v0, 0x58($sp) -/* 0BE200 7F08B810 1000000C */ b .L7F08B844 -/* 0BE204 7F08B814 00008025 */ move $s0, $zero -.L7F08B818: -/* 0BE208 7F08B818 8FA20058 */ lw $v0, 0x58($sp) -.L7F08B81C: -/* 0BE20C 7F08B81C 24050100 */ li $a1, 256 -/* 0BE210 7F08B820 50400008 */ beql $v0, $zero, .L7F08B844 -/* 0BE214 7F08B824 24100001 */ li $s0, 1 -/* 0BE218 7F08B828 0FC1795B */ jal bondwalkItemCheckBitflags -/* 0BE21C 7F08B82C 80440080 */ lb $a0, 0x80($v0) -/* 0BE220 7F08B830 50400004 */ beql $v0, $zero, .L7F08B844 -/* 0BE224 7F08B834 24100001 */ li $s0, 1 -/* 0BE228 7F08B838 10000002 */ b .L7F08B844 -/* 0BE22C 7F08B83C 00008025 */ move $s0, $zero -/* 0BE230 7F08B840 24100001 */ li $s0, 1 -.L7F08B844: -/* 0BE234 7F08B844 0FC1E6A7 */ jal playerGetCrouchPos -/* 0BE238 7F08B848 8FA400F4 */ lw $a0, 0xf4($sp) -/* 0BE23C 7F08B84C 24010001 */ li $at, 1 -/* 0BE240 7F08B850 50410005 */ beql $v0, $at, .L7F08B868 -/* 0BE244 7F08B854 3C013F80 */ lui $at, 0x3f80 -/* 0BE248 7F08B858 0FC1E6A7 */ jal playerGetCrouchPos -/* 0BE24C 7F08B85C 8FA400F4 */ lw $a0, 0xf4($sp) -/* 0BE250 7F08B860 14400006 */ bnez $v0, .L7F08B87C -/* 0BE254 7F08B864 3C013F80 */ li $at, 0x3F800000 # 1.000000 -.L7F08B868: -/* 0BE258 7F08B868 44816000 */ mtc1 $at, $f12 -/* 0BE25C 7F08B86C 44807000 */ mtc1 $zero, $f14 -/* 0BE260 7F08B870 24040005 */ li $a0, 5 -/* 0BE264 7F08B874 1000009D */ b .L7F08BAEC -/* 0BE268 7F08B878 8E280000 */ lw $t0, ($s1) -.L7F08B87C: -/* 0BE26C 7F08B87C 8E280000 */ lw $t0, ($s1) -/* 0BE270 7F08B880 44807000 */ mtc1 $zero, $f14 -/* 0BE274 7F08B884 0010C900 */ sll $t9, $s0, 4 -/* 0BE278 7F08B888 C502016C */ lwc1 $f2, 0x16c($t0) -/* 0BE27C 7F08B88C 0330C823 */ subu $t9, $t9, $s0 -/* 0BE280 7F08B890 0019C8C0 */ sll $t9, $t9, 3 -/* 0BE284 7F08B894 460E103C */ c.lt.s $f2, $f14 -/* 0BE288 7F08B898 3C0A8003 */ lui $t2, %hi(firing_animation_groups+0x50) -/* 0BE28C 7F08B89C 01595021 */ addu $t2, $t2, $t9 -/* 0BE290 7F08B8A0 45020014 */ bc1fl .L7F08B8F4 -/* 0BE294 7F08B8A4 4602703C */ c.lt.s $f14, $f2 -/* 0BE298 7F08B8A8 8D4A1E70 */ lw $t2, %lo(firing_animation_groups+0x50)($t2) #firing_animation_groups[440] -/* 0BE29C 7F08B8AC 3C0142B4 */ li $at, 0x42B40000 # 90.000000 -/* 0BE2A0 7F08B8B0 51400010 */ beql $t2, $zero, .L7F08B8F4 -/* 0BE2A4 7F08B8B4 4602703C */ c.lt.s $f14, $f2 -/* 0BE2A8 7F08B8B8 C5001278 */ lwc1 $f0, 0x1278($t0) -/* 0BE2AC 7F08B8BC 44814000 */ mtc1 $at, $f8 -/* 0BE2B0 7F08B8C0 24040004 */ li $a0, 4 -/* 0BE2B4 7F08B8C4 46001307 */ neg.s $f12, $f2 -/* 0BE2B8 7F08B8C8 4608003C */ c.lt.s $f0, $f8 -/* 0BE2BC 7F08B8CC 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0BE2C0 7F08B8D0 45020087 */ bc1fl .L7F08BAF0 -/* 0BE2C4 7F08B8D4 00107900 */ sll $t7, $s0, 4 -/* 0BE2C8 7F08B8D8 44815000 */ mtc1 $at, $f10 -/* 0BE2CC 7F08B8DC 00000000 */ nop -/* 0BE2D0 7F08B8E0 460A0480 */ add.s $f18, $f0, $f10 -/* 0BE2D4 7F08B8E4 E5121278 */ swc1 $f18, 0x1278($t0) -/* 0BE2D8 7F08B8E8 10000080 */ b .L7F08BAEC -/* 0BE2DC 7F08B8EC 8E280000 */ lw $t0, ($s1) -/* 0BE2E0 7F08B8F0 4602703C */ c.lt.s $f14, $f2 -.L7F08B8F4: -/* 0BE2E4 7F08B8F4 00105900 */ sll $t3, $s0, 4 -/* 0BE2E8 7F08B8F8 01705823 */ subu $t3, $t3, $s0 -/* 0BE2EC 7F08B8FC 000B58C0 */ sll $t3, $t3, 3 -/* 0BE2F0 7F08B900 45000014 */ bc1f .L7F08B954 -/* 0BE2F4 7F08B904 3C0C8003 */ lui $t4, %hi(firing_animation_groups+0x3C) -/* 0BE2F8 7F08B908 018B6021 */ addu $t4, $t4, $t3 -/* 0BE2FC 7F08B90C 8D8C1E5C */ lw $t4, %lo(firing_animation_groups+0x3C)($t4) -/* 0BE300 7F08B910 3C01C2B4 */ li $at, 0xC2B40000 # -90.000000 -/* 0BE304 7F08B914 51800010 */ beql $t4, $zero, .L7F08B958 -/* 0BE308 7F08B918 C502014C */ lwc1 $f2, 0x14c($t0) -/* 0BE30C 7F08B91C C5001278 */ lwc1 $f0, 0x1278($t0) -/* 0BE310 7F08B920 44812000 */ mtc1 $at, $f4 -/* 0BE314 7F08B924 24040003 */ li $a0, 3 -/* 0BE318 7F08B928 46001306 */ mov.s $f12, $f2 -/* 0BE31C 7F08B92C 4600203C */ c.lt.s $f4, $f0 -/* 0BE320 7F08B930 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0BE324 7F08B934 4502006E */ bc1fl .L7F08BAF0 -/* 0BE328 7F08B938 00107900 */ sll $t7, $s0, 4 -/* 0BE32C 7F08B93C 44813000 */ mtc1 $at, $f6 -/* 0BE330 7F08B940 00000000 */ nop -/* 0BE334 7F08B944 46060201 */ sub.s $f8, $f0, $f6 -/* 0BE338 7F08B948 E5081278 */ swc1 $f8, 0x1278($t0) -/* 0BE33C 7F08B94C 10000067 */ b .L7F08BAEC -/* 0BE340 7F08B950 8E280000 */ lw $t0, ($s1) -.L7F08B954: -/* 0BE344 7F08B954 C502014C */ lwc1 $f2, 0x14c($t0) -.L7F08B958: -/* 0BE348 7F08B958 3C018005 */ lui $at, %hi(D_8004AE94) # $at, 0x8005 -/* 0BE34C 7F08B95C 460E103C */ c.lt.s $f2, $f14 -/* 0BE350 7F08B960 00000000 */ nop -/* 0BE354 7F08B964 45020003 */ bc1fl .L7F08B974 -/* 0BE358 7F08B968 C5000174 */ lwc1 $f0, 0x174($t0) -/* 0BE35C 7F08B96C 46001087 */ neg.s $f2, $f2 -/* 0BE360 7F08B970 C5000174 */ lwc1 $f0, 0x174($t0) -.L7F08B974: -/* 0BE364 7F08B974 C42AAE94 */ lwc1 $f10, %lo(D_8004AE94)($at) -/* 0BE368 7F08B978 3C018005 */ lui $at, %hi(D_8004AE9C) -/* 0BE36C 7F08B97C 460A003C */ c.lt.s $f0, $f10 -/* 0BE370 7F08B980 00000000 */ nop -/* 0BE374 7F08B984 4500001D */ bc1f .L7F08B9FC -/* 0BE378 7F08B988 00000000 */ nop -/* 0BE37C 7F08B98C 46001087 */ neg.s $f2, $f2 -/* 0BE380 7F08B990 3C018005 */ lui $at, %hi(D_8004AE9C) # $at, 0x8005 -/* 0BE384 7F08B994 4602003C */ c.lt.s $f0, $f2 -/* 0BE388 7F08B998 00000000 */ nop -/* 0BE38C 7F08B99C 45020003 */ bc1fl .L7F08B9AC -/* 0BE390 7F08B9A0 8D0D04E8 */ lw $t5, 0x4e8($t0) -/* 0BE394 7F08B9A4 46000086 */ mov.s $f2, $f0 -/* 0BE398 7F08B9A8 8D0D04E8 */ lw $t5, 0x4e8($t0) -.L7F08B9AC: -/* 0BE39C 7F08B9AC 51A00008 */ beql $t5, $zero, .L7F08B9D0 -/* 0BE3A0 7F08B9B0 46021300 */ add.s $f12, $f2, $f2 -/* 0BE3A4 7F08B9B4 C432AE98 */ lwc1 $f18, %lo(D_8004AE98)($at) -/* 0BE3A8 7F08B9B8 24040002 */ li $a0, 2 -/* 0BE3AC 7F08B9BC 4600903C */ c.lt.s $f18, $f0 -/* 0BE3B0 7F08B9C0 00000000 */ nop -/* 0BE3B4 7F08B9C4 4500000B */ bc1f .L7F08B9F4 -/* 0BE3B8 7F08B9C8 00000000 */ nop -/* 0BE3BC 7F08B9CC 46021300 */ add.s $f12, $f2, $f2 -.L7F08B9D0: -/* 0BE3C0 7F08B9D0 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0BE3C4 7F08B9D4 44818000 */ mtc1 $at, $f16 -/* 0BE3C8 7F08B9D8 24040001 */ li $a0, 1 -/* 0BE3CC 7F08B9DC 4610603C */ c.lt.s $f12, $f16 -/* 0BE3D0 7F08B9E0 00000000 */ nop -/* 0BE3D4 7F08B9E4 4502002D */ bc1fl .L7F08BA9C -/* 0BE3D8 7F08B9E8 C5001278 */ lwc1 $f0, 0x1278($t0) -/* 0BE3DC 7F08B9EC 1000002A */ b .L7F08BA98 -/* 0BE3E0 7F08B9F0 46008306 */ mov.s $f12, $f16 -.L7F08B9F4: -/* 0BE3E4 7F08B9F4 10000028 */ b .L7F08BA98 -/* 0BE3E8 7F08B9F8 46001306 */ mov.s $f12, $f2 -.L7F08B9FC: -/* 0BE3EC 7F08B9FC C42CAE9C */ lwc1 $f12, %lo(D_8004AE9C)($at) -/* 0BE3F0 7F08BA00 4600603C */ c.lt.s $f12, $f0 -/* 0BE3F4 7F08BA04 00000000 */ nop -/* 0BE3F8 7F08BA08 45030006 */ bc1tl .L7F08BA24 -/* 0BE3FC 7F08BA0C 4600103C */ c.lt.s $f2, $f0 -/* 0BE400 7F08BA10 4602603C */ c.lt.s $f12, $f2 -/* 0BE404 7F08BA14 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BE408 7F08BA18 4502001E */ bc1fl .L7F08BA94 -/* 0BE40C 7F08BA1C 44816000 */ mtc1 $at, $f12 -/* 0BE410 7F08BA20 4600103C */ c.lt.s $f2, $f0 -.L7F08BA24: -/* 0BE414 7F08BA24 3C018005 */ li $at, 0x80050000 # -0.000000 -/* 0BE418 7F08BA28 45020003 */ bc1fl .L7F08BA38 -/* 0BE41C 7F08BA2C 8D0E04E8 */ lw $t6, 0x4e8($t0) -/* 0BE420 7F08BA30 46000086 */ mov.s $f2, $f0 -/* 0BE424 7F08BA34 8D0E04E8 */ lw $t6, 0x4e8($t0) -.L7F08BA38: -/* 0BE428 7F08BA38 51C00008 */ beql $t6, $zero, .L7F08BA5C -/* 0BE42C 7F08BA3C 46021300 */ add.s $f12, $f2, $f2 -/* 0BE430 7F08BA40 C424AEA0 */ lwc1 $f4, %lo(D_8004AEA0)($at) -/* 0BE434 7F08BA44 24040002 */ li $a0, 2 -/* 0BE438 7F08BA48 4604003C */ c.lt.s $f0, $f4 -/* 0BE43C 7F08BA4C 00000000 */ nop -/* 0BE440 7F08BA50 4500000D */ bc1f .L7F08BA88 -/* 0BE444 7F08BA54 00000000 */ nop -/* 0BE448 7F08BA58 46021300 */ add.s $f12, $f2, $f2 -.L7F08BA5C: -/* 0BE44C 7F08BA5C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BE450 7F08BA60 44813000 */ mtc1 $at, $f6 -/* 0BE454 7F08BA64 24040001 */ li $a0, 1 -/* 0BE458 7F08BA68 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BE45C 7F08BA6C 460C303C */ c.lt.s $f6, $f12 -/* 0BE460 7F08BA70 00000000 */ nop -/* 0BE464 7F08BA74 45020009 */ bc1fl .L7F08BA9C -/* 0BE468 7F08BA78 C5001278 */ lwc1 $f0, 0x1278($t0) -/* 0BE46C 7F08BA7C 44816000 */ mtc1 $at, $f12 -/* 0BE470 7F08BA80 10000006 */ b .L7F08BA9C -/* 0BE474 7F08BA84 C5001278 */ lwc1 $f0, 0x1278($t0) -.L7F08BA88: -/* 0BE478 7F08BA88 10000003 */ b .L7F08BA98 -/* 0BE47C 7F08BA8C 46001306 */ mov.s $f12, $f2 -/* 0BE480 7F08BA90 44816000 */ mtc1 $at, $f12 -.L7F08BA94: -/* 0BE484 7F08BA94 00002025 */ move $a0, $zero -.L7F08BA98: -/* 0BE488 7F08BA98 C5001278 */ lwc1 $f0, 0x1278($t0) -.L7F08BA9C: -/* 0BE48C 7F08BA9C 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0BE490 7F08BAA0 4600703C */ c.lt.s $f14, $f0 -/* 0BE494 7F08BAA4 00000000 */ nop -/* 0BE498 7F08BAA8 45020008 */ bc1fl .L7F08BACC -/* 0BE49C 7F08BAAC 460E003C */ c.lt.s $f0, $f14 -/* 0BE4A0 7F08BAB0 44814000 */ mtc1 $at, $f8 -/* 0BE4A4 7F08BAB4 00000000 */ nop -/* 0BE4A8 7F08BAB8 46080281 */ sub.s $f10, $f0, $f8 -/* 0BE4AC 7F08BABC E50A1278 */ swc1 $f10, 0x1278($t0) -/* 0BE4B0 7F08BAC0 8E280000 */ lw $t0, ($s1) -/* 0BE4B4 7F08BAC4 C5001278 */ lwc1 $f0, 0x1278($t0) -/* 0BE4B8 7F08BAC8 460E003C */ c.lt.s $f0, $f14 -.L7F08BACC: -/* 0BE4BC 7F08BACC 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0BE4C0 7F08BAD0 45020007 */ bc1fl .L7F08BAF0 -/* 0BE4C4 7F08BAD4 00107900 */ sll $t7, $s0, 4 -/* 0BE4C8 7F08BAD8 44819000 */ mtc1 $at, $f18 -/* 0BE4CC 7F08BADC 00000000 */ nop -/* 0BE4D0 7F08BAE0 46120100 */ add.s $f4, $f0, $f18 -/* 0BE4D4 7F08BAE4 E5041278 */ swc1 $f4, 0x1278($t0) -/* 0BE4D8 7F08BAE8 8E280000 */ lw $t0, ($s1) -.L7F08BAEC: -/* 0BE4DC 7F08BAEC 00107900 */ sll $t7, $s0, 4 -.L7F08BAF0: -/* 0BE4E0 7F08BAF0 0004C080 */ sll $t8, $a0, 2 -/* 0BE4E4 7F08BAF4 0304C021 */ addu $t8, $t8, $a0 -/* 0BE4E8 7F08BAF8 01F07823 */ subu $t7, $t7, $s0 -/* 0BE4EC 7F08BAFC 000F78C0 */ sll $t7, $t7, 3 -/* 0BE4F0 7F08BB00 0018C080 */ sll $t8, $t8, 2 -/* 0BE4F4 7F08BB04 3C198003 */ lui $t9, %hi(firing_animation_groups) # $t9, 0x8003 -/* 0BE4F8 7F08BB08 27391E20 */ addiu $t9, %lo(firing_animation_groups) # addiu $t9, $t9, 0x1e20 -/* 0BE4FC 7F08BB0C 01F84821 */ addu $t1, $t7, $t8 -/* 0BE500 7F08BB10 01391021 */ addu $v0, $t1, $t9 -/* 0BE504 7F08BB14 8C430004 */ lw $v1, 4($v0) -/* 0BE508 7F08BB18 8C4A0000 */ lw $t2, ($v0) -/* 0BE50C 7F08BB1C 3C0B8006 */ lui $t3, %hi(ptr_animation_table) # $t3, 0x8006 -/* 0BE510 7F08BB20 10600004 */ beqz $v1, .L7F08BB34 -/* 0BE514 7F08BB24 AFAA007C */ sw $t2, 0x7c($sp) -/* 0BE518 7F08BB28 8D6B8478 */ lw $t3, %lo(ptr_animation_table)($t3) -/* 0BE51C 7F08BB2C 006B6021 */ addu $t4, $v1, $t3 -/* 0BE520 7F08BB30 AFAC009C */ sw $t4, 0x9c($sp) -.L7F08BB34: -/* 0BE524 7F08BB34 C4460008 */ lwc1 $f6, 8($v0) -/* 0BE528 7F08BB38 C4480010 */ lwc1 $f8, 0x10($v0) -/* 0BE52C 7F08BB3C C442000C */ lwc1 $f2, 0xc($v0) -/* 0BE530 7F08BB40 46066302 */ mul.s $f12, $f12, $f6 -/* 0BE534 7F08BB44 E7A80090 */ swc1 $f8, 0x90($sp) -/* 0BE538 7F08BB48 8D06127C */ lw $a2, 0x127c($t0) -.L7F08BB4C: -/* 0BE53C 7F08BB4C 8FAD007C */ lw $t5, 0x7c($sp) -/* 0BE540 7F08BB50 8FAE009C */ lw $t6, 0x9c($sp) -/* 0BE544 7F08BB54 24020001 */ li $v0, 1 -/* 0BE548 7F08BB58 51A00006 */ beql $t5, $zero, .L7F08BB74 -/* 0BE54C 7F08BB5C 8FB8009C */ lw $t8, 0x9c($sp) -/* 0BE550 7F08BB60 55C00004 */ bnezl $t6, .L7F08BB74 -/* 0BE554 7F08BB64 8FB8009C */ lw $t8, 0x9c($sp) -/* 0BE558 7F08BB68 8DAF0000 */ lw $t7, ($t5) -/* 0BE55C 7F08BB6C AFAF009C */ sw $t7, 0x9c($sp) -/* 0BE560 7F08BB70 8FB8009C */ lw $t8, 0x9c($sp) -.L7F08BB74: -/* 0BE564 7F08BB74 53060003 */ beql $t8, $a2, .L7F08BB84 -/* 0BE568 7F08BB78 4602703E */ c.le.s $f14, $f2 -/* 0BE56C 7F08BB7C AFA20054 */ sw $v0, 0x54($sp) -/* 0BE570 7F08BB80 4602703E */ c.le.s $f14, $f2 -.L7F08BB84: -/* 0BE574 7F08BB84 8FA20054 */ lw $v0, 0x54($sp) -/* 0BE578 7F08BB88 4502000C */ bc1fl .L7F08BBBC -/* 0BE57C 7F08BB8C 460E103C */ c.lt.s $f2, $f14 -/* 0BE580 7F08BB90 8D0400D4 */ lw $a0, 0xd4($t0) -/* 0BE584 7F08BB94 80890026 */ lb $t1, 0x26($a0) -/* 0BE588 7F08BB98 51200007 */ beql $t1, $zero, .L7F08BBB8 -/* 0BE58C 7F08BB9C 24020001 */ li $v0, 1 -/* 0BE590 7F08BBA0 C48A0090 */ lwc1 $f10, 0x90($a0) -/* 0BE594 7F08BBA4 460A1032 */ c.eq.s $f2, $f10 -/* 0BE598 7F08BBA8 00000000 */ nop -/* 0BE59C 7F08BBAC 45030003 */ bc1tl .L7F08BBBC -/* 0BE5A0 7F08BBB0 460E103C */ c.lt.s $f2, $f14 -/* 0BE5A4 7F08BBB4 24020001 */ li $v0, 1 -.L7F08BBB8: -/* 0BE5A8 7F08BBB8 460E103C */ c.lt.s $f2, $f14 -.L7F08BBBC: -/* 0BE5AC 7F08BBBC 00000000 */ nop -/* 0BE5B0 7F08BBC0 45000006 */ bc1f .L7F08BBDC -/* 0BE5B4 7F08BBC4 00000000 */ nop -/* 0BE5B8 7F08BBC8 8D1900D4 */ lw $t9, 0xd4($t0) -/* 0BE5BC 7F08BBCC 832A0026 */ lb $t2, 0x26($t9) -/* 0BE5C0 7F08BBD0 11400002 */ beqz $t2, .L7F08BBDC -/* 0BE5C4 7F08BBD4 00000000 */ nop -/* 0BE5C8 7F08BBD8 24020001 */ li $v0, 1 -.L7F08BBDC: -/* 0BE5CC 7F08BBDC 50400035 */ beql $v0, $zero, .L7F08BCB4 -/* 0BE5D0 7F08BBE0 C5061280 */ lwc1 $f6, 0x1280($t0) -/* 0BE5D4 7F08BBE4 8D0400D4 */ lw $a0, 0xd4($t0) -/* 0BE5D8 7F08BBE8 8FA5009C */ lw $a1, 0x9c($sp) -/* 0BE5DC 7F08BBEC 00003025 */ move $a2, $zero -/* 0BE5E0 7F08BBF0 8C8B0054 */ lw $t3, 0x54($a0) -/* 0BE5E4 7F08BBF4 3C014180 */ li $at, 0x41800000 # 16.000000 -/* 0BE5E8 7F08BBF8 5560002B */ bnezl $t3, .L7F08BCA8 -/* 0BE5EC 7F08BBFC 8E290000 */ lw $t1, ($s1) -/* 0BE5F0 7F08BC00 4602703E */ c.le.s $f14, $f2 -/* 0BE5F4 7F08BC04 44819000 */ mtc1 $at, $f18 -/* 0BE5F8 7F08BC08 45020004 */ bc1fl .L7F08BC1C -/* 0BE5FC 7F08BC0C 46007006 */ mov.s $f0, $f14 -/* 0BE600 7F08BC10 10000002 */ b .L7F08BC1C -/* 0BE604 7F08BC14 46001006 */ mov.s $f0, $f2 -/* 0BE608 7F08BC18 46007006 */ mov.s $f0, $f14 -.L7F08BC1C: -/* 0BE60C 7F08BC1C 44070000 */ mfc1 $a3, $f0 -/* 0BE610 7F08BC20 E7AC0010 */ swc1 $f12, 0x10($sp) -/* 0BE614 7F08BC24 E7B20014 */ swc1 $f18, 0x14($sp) -/* 0BE618 7F08BC28 E7A20094 */ swc1 $f2, 0x94($sp) -/* 0BE61C 7F08BC2C 0FC1BF92 */ jal modelSetAnimation -/* 0BE620 7F08BC30 E7AC0098 */ swc1 $f12, 0x98($sp) -/* 0BE624 7F08BC34 C7A20094 */ lwc1 $f2, 0x94($sp) -/* 0BE628 7F08BC38 44807000 */ mtc1 $zero, $f14 -/* 0BE62C 7F08BC3C 8FAC009C */ lw $t4, 0x9c($sp) -/* 0BE630 7F08BC40 8E2E0000 */ lw $t6, ($s1) -/* 0BE634 7F08BC44 4602703E */ c.le.s $f14, $f2 -/* 0BE638 7F08BC48 C7AC0098 */ lwc1 $f12, 0x98($sp) -/* 0BE63C 7F08BC4C ADCC127C */ sw $t4, 0x127c($t6) -/* 0BE640 7F08BC50 8E2D0000 */ lw $t5, ($s1) -/* 0BE644 7F08BC54 3C064180 */ lui $a2, 0x4180 -/* 0BE648 7F08BC58 45000007 */ bc1f .L7F08BC78 -/* 0BE64C 7F08BC5C E5AC1280 */ swc1 $f12, 0x1280($t5) -/* 0BE650 7F08BC60 8E2F0000 */ lw $t7, ($s1) -/* 0BE654 7F08BC64 44051000 */ mfc1 $a1, $f2 -/* 0BE658 7F08BC68 0FC1BFDB */ jal modelSetAnimLooping -/* 0BE65C 7F08BC6C 8DE400D4 */ lw $a0, 0xd4($t7) -/* 0BE660 7F08BC70 44807000 */ mtc1 $zero, $f14 -/* 0BE664 7F08BC74 00000000 */ nop -.L7F08BC78: -/* 0BE668 7F08BC78 C7A40090 */ lwc1 $f4, 0x90($sp) -/* 0BE66C 7F08BC7C 4604703E */ c.le.s $f14, $f4 -/* 0BE670 7F08BC80 00000000 */ nop -/* 0BE674 7F08BC84 45020008 */ bc1fl .L7F08BCA8 -/* 0BE678 7F08BC88 8E290000 */ lw $t1, ($s1) -/* 0BE67C 7F08BC8C 8E380000 */ lw $t8, ($s1) -/* 0BE680 7F08BC90 44052000 */ mfc1 $a1, $f4 -/* 0BE684 7F08BC94 0FC1BFE2 */ jal modelSetAnimEndFrame -/* 0BE688 7F08BC98 8F0400D4 */ lw $a0, 0xd4($t8) -/* 0BE68C 7F08BC9C 44807000 */ mtc1 $zero, $f14 -/* 0BE690 7F08BCA0 00000000 */ nop -/* 0BE694 7F08BCA4 8E290000 */ lw $t1, ($s1) -.L7F08BCA8: -/* 0BE698 7F08BCA8 10000011 */ b .L7F08BCF0 -/* 0BE69C 7F08BCAC 8D26127C */ lw $a2, 0x127c($t1) -/* 0BE6A0 7F08BCB0 C5061280 */ lwc1 $f6, 0x1280($t0) -.L7F08BCB4: -/* 0BE6A4 7F08BCB4 46066032 */ c.eq.s $f12, $f6 -/* 0BE6A8 7F08BCB8 00000000 */ nop -/* 0BE6AC 7F08BCBC 4503000D */ bc1tl .L7F08BCF4 -/* 0BE6B0 7F08BCC0 8FAB009C */ lw $t3, 0x9c($sp) -/* 0BE6B4 7F08BCC4 8D0400D4 */ lw $a0, 0xd4($t0) -/* 0BE6B8 7F08BCC8 44056000 */ mfc1 $a1, $f12 -/* 0BE6BC 7F08BCCC E7AC0098 */ swc1 $f12, 0x98($sp) -/* 0BE6C0 7F08BCD0 0FC1BFFB */ jal modelSetAnimSpeed -/* 0BE6C4 7F08BCD4 3C063F80 */ lui $a2, 0x3f80 -/* 0BE6C8 7F08BCD8 C7AC0098 */ lwc1 $f12, 0x98($sp) -/* 0BE6CC 7F08BCDC 8E390000 */ lw $t9, ($s1) -/* 0BE6D0 7F08BCE0 44807000 */ mtc1 $zero, $f14 -/* 0BE6D4 7F08BCE4 E72C1280 */ swc1 $f12, 0x1280($t9) -/* 0BE6D8 7F08BCE8 8E2A0000 */ lw $t2, ($s1) -/* 0BE6DC 7F08BCEC 8D46127C */ lw $a2, 0x127c($t2) -.L7F08BCF0: -/* 0BE6E0 7F08BCF0 8FAB009C */ lw $t3, 0x9c($sp) -.L7F08BCF4: -/* 0BE6E4 7F08BCF4 8FAC007C */ lw $t4, 0x7c($sp) -/* 0BE6E8 7F08BCF8 55660017 */ bnel $t3, $a2, .L7F08BD58 -/* 0BE6EC 7F08BCFC 8FA200F0 */ lw $v0, 0xf0($sp) -/* 0BE6F0 7F08BD00 1180000D */ beqz $t4, .L7F08BD38 -/* 0BE6F4 7F08BD04 8FAF00F0 */ lw $t7, 0xf0($sp) -/* 0BE6F8 7F08BD08 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0BE6FC 7F08BD0C 00003025 */ move $a2, $zero -/* 0BE700 7F08BD10 24070001 */ li $a3, 1 -/* 0BE704 7F08BD14 948E0012 */ lhu $t6, 0x12($a0) -/* 0BE708 7F08BD18 31CDFBFF */ andi $t5, $t6, 0xfbff -/* 0BE70C 7F08BD1C A48D0012 */ sh $t5, 0x12($a0) -/* 0BE710 7F08BD20 C7A8008C */ lwc1 $f8, 0x8c($sp) -/* 0BE714 7F08BD24 8FA5007C */ lw $a1, 0x7c($sp) -/* 0BE718 7F08BD28 0FC0B41F */ jal chrlvUpdateAimendbackShoulders -/* 0BE71C 7F08BD2C E7A80010 */ swc1 $f8, 0x10($sp) -/* 0BE720 7F08BD30 10000009 */ b .L7F08BD58 -/* 0BE724 7F08BD34 8FA200F0 */ lw $v0, 0xf0($sp) -.L7F08BD38: -/* 0BE728 7F08BD38 95F80012 */ lhu $t8, 0x12($t7) -/* 0BE72C 7F08BD3C E5EE0154 */ swc1 $f14, 0x154($t7) -/* 0BE730 7F08BD40 E5EE0150 */ swc1 $f14, 0x150($t7) -/* 0BE734 7F08BD44 37090400 */ ori $t1, $t8, 0x400 -/* 0BE738 7F08BD48 A5E90012 */ sh $t1, 0x12($t7) -/* 0BE73C 7F08BD4C C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 0BE740 7F08BD50 E5EA0158 */ swc1 $f10, 0x158($t7) -/* 0BE744 7F08BD54 8FA200F0 */ lw $v0, 0xf0($sp) -.L7F08BD58: -/* 0BE748 7F08BD58 C7B20088 */ lwc1 $f18, 0x88($sp) -/* 0BE74C 7F08BD5C 2419000A */ li $t9, 10 -/* 0BE750 7F08BD60 A059000E */ sb $t9, 0xe($v0) -/* 0BE754 7F08BD64 E452015C */ swc1 $f18, 0x15c($v0) -/* 0BE758 7F08BD68 8E2A0000 */ lw $t2, ($s1) -.L7F08BD6C: -/* 0BE75C 7F08BD6C 8FA300F8 */ lw $v1, 0xf8($sp) -/* 0BE760 7F08BD70 8FA200F0 */ lw $v0, 0xf0($sp) -/* 0BE764 7F08BD74 C544048C */ lwc1 $f4, 0x48c($t2) -/* 0BE768 7F08BD78 27A50070 */ addiu $a1, $sp, 0x70 -/* 0BE76C 7F08BD7C 00008025 */ move $s0, $zero -/* 0BE770 7F08BD80 E4640008 */ swc1 $f4, 8($v1) -/* 0BE774 7F08BD84 8E2B0000 */ lw $t3, ($s1) -/* 0BE778 7F08BD88 C5660490 */ lwc1 $f6, 0x490($t3) -/* 0BE77C 7F08BD8C E466000C */ swc1 $f6, 0xc($v1) -/* 0BE780 7F08BD90 8E2C0000 */ lw $t4, ($s1) -/* 0BE784 7F08BD94 C5880494 */ lwc1 $f8, 0x494($t4) -/* 0BE788 7F08BD98 E4680010 */ swc1 $f8, 0x10($v1) -/* 0BE78C 7F08BD9C 8E2E0000 */ lw $t6, ($s1) -/* 0BE790 7F08BDA0 8DCD0488 */ lw $t5, 0x488($t6) -/* 0BE794 7F08BDA4 AC6D0014 */ sw $t5, 0x14($v1) -/* 0BE798 7F08BDA8 0FC1B476 */ jal getsuboffset -/* 0BE79C 7F08BDAC 8C44001C */ lw $a0, 0x1c($v0) -/* 0BE7A0 7F08BDB0 8FA200F8 */ lw $v0, 0xf8($sp) -/* 0BE7A4 7F08BDB4 8FB800F0 */ lw $t8, 0xf0($sp) -/* 0BE7A8 7F08BDB8 27A50070 */ addiu $a1, $sp, 0x70 -/* 0BE7AC 7F08BDBC C44A0008 */ lwc1 $f10, 8($v0) -/* 0BE7B0 7F08BDC0 E7AA0070 */ swc1 $f10, 0x70($sp) -/* 0BE7B4 7F08BDC4 C4520010 */ lwc1 $f18, 0x10($v0) -/* 0BE7B8 7F08BDC8 E7B20078 */ swc1 $f18, 0x78($sp) -/* 0BE7BC 7F08BDCC 0FC1B480 */ jal setsuboffset -/* 0BE7C0 7F08BDD0 8F04001C */ lw $a0, 0x1c($t8) -/* 0BE7C4 7F08BDD4 8E280000 */ lw $t0, ($s1) -/* 0BE7C8 7F08BDD8 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0BE7CC 7F08BDDC 44810000 */ mtc1 $at, $f0 -/* 0BE7D0 7F08BDE0 C5060148 */ lwc1 $f6, 0x148($t0) -/* 0BE7D4 7F08BDE4 C5041278 */ lwc1 $f4, 0x1278($t0) -/* 0BE7D8 7F08BDE8 3C018005 */ lui $at, %hi(D_8004AEA4) # $at, 0x8005 -/* 0BE7DC 7F08BDEC 46060201 */ sub.s $f8, $f0, $f6 -/* 0BE7E0 7F08BDF0 C432AEA4 */ lwc1 $f18, %lo(D_8004AEA4)($at) -/* 0BE7E4 7F08BDF4 8FA900F0 */ lw $t1, 0xf0($sp) -/* 0BE7E8 7F08BDF8 46082280 */ add.s $f10, $f4, $f8 -/* 0BE7EC 7F08BDFC 8D24001C */ lw $a0, 0x1c($t1) -/* 0BE7F0 7F08BE00 46125182 */ mul.s $f6, $f10, $f18 -/* 0BE7F4 7F08BE04 46003103 */ div.s $f4, $f6, $f0 -/* 0BE7F8 7F08BE08 44052000 */ mfc1 $a1, $f4 -/* 0BE7FC 7F08BE0C 0FC1B49D */ jal setsubroty -/* 0BE800 7F08BE10 00000000 */ nop -/* 0BE804 7F08BE14 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0BE808 7F08BE18 240A0019 */ li $t2, 25 -/* 0BE80C 7F08BE1C 00002825 */ move $a1, $zero -/* 0BE810 7F08BE20 8C8F0014 */ lw $t7, 0x14($a0) -/* 0BE814 7F08BE24 A08A0007 */ sb $t2, 7($a0) -/* 0BE818 7F08BE28 35F90001 */ ori $t9, $t7, 1 -/* 0BE81C 7F08BE2C AC990014 */ sw $t9, 0x14($a0) -/* 0BE820 7F08BE30 8FAB007C */ lw $t3, 0x7c($sp) -/* 0BE824 7F08BE34 AC8B002C */ sw $t3, 0x2c($a0) -/* 0BE828 7F08BE38 8E2C0000 */ lw $t4, ($s1) -/* 0BE82C 7F08BE3C 0FC0B453 */ jal chrSetFiring -/* 0BE830 7F08BE40 81860875 */ lb $a2, 0x875($t4) -/* 0BE834 7F08BE44 8E2E0000 */ lw $t6, ($s1) -/* 0BE838 7F08BE48 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0BE83C 7F08BE4C 24050001 */ li $a1, 1 -/* 0BE840 7F08BE50 0FC0B453 */ jal chrSetFiring -/* 0BE844 7F08BE54 81C60C1D */ lb $a2, 0xc1d($t6) -/* 0BE848 7F08BE58 0FC0839A */ jal chrTickBeams -/* 0BE84C 7F08BE5C 8FA400F8 */ lw $a0, 0xf8($sp) -/* 0BE850 7F08BE60 AFA200A0 */ sw $v0, 0xa0($sp) -/* 0BE854 7F08BE64 00003825 */ move $a3, $zero -/* 0BE858 7F08BE68 00001825 */ move $v1, $zero -.Leu7F08BE6C: -/* 0BE85C 7F08BE6C 8E2D0000 */ lw $t5, ($s1) -/* 0BE860 7F08BE70 8FA400F0 */ lw $a0, 0xf0($sp) -/* 0BE864 7F08BE74 02002825 */ move $a1, $s0 -/* 0BE868 7F08BE78 01A33021 */ addu $a2, $t5, $v1 -/* 0BE86C 7F08BE7C 24C62A10 */ addiu $a2, $a2, 0x2a10 -/* 0BE870 7F08BE80 AFA30034 */ sw $v1, 0x34($sp) -/* 0BE874 7F08BE84 0FC0B599 */ jal sub_GAME_7F02D630 -/* 0BE878 7F08BE88 AFA70038 */ sw $a3, 0x38($sp) -/* 0BE87C 7F08BE8C 8FA30034 */ lw $v1, 0x34($sp) -/* 0BE880 7F08BE90 10400007 */ beqz $v0, .L7F08BEB0 -/* 0BE884 7F08BE94 8FA70038 */ lw $a3, 0x38($sp) -/* 0BE888 7F08BE98 8E290000 */ lw $t1, ($s1) -/* 0BE88C 7F08BE9C 3C188004 */ lui $t8, %hi(D_80048380) # $t8, 0x8004 -/* 0BE890 7F08BEA0 8F181000 */ lw $t8, %lo(D_80048380)($t8) -/* 0BE894 7F08BEA4 01277821 */ addu $t7, $t1, $a3 -/* 0BE898 7F08BEA8 1000001E */ b .L7F08BF24 -/* 0BE89C 7F08BEAC ADF82A28 */ sw $t8, 0x2a28($t7) -.L7F08BEB0: -/* 0BE8A0 7F08BEB0 8E280000 */ lw $t0, ($s1) -/* 0BE8A4 7F08BEB4 3C0B8004 */ lui $t3, %hi(D_80048380) # $t3, 0x8004 -/* 0BE8A8 7F08BEB8 8D6B1000 */ lw $t3, %lo(D_80048380)($t3) -/* 0BE8AC 7F08BEBC 0107C821 */ addu $t9, $t0, $a3 -/* 0BE8B0 7F08BEC0 8F2A2A28 */ lw $t2, 0x2a28($t9) -/* 0BE8B4 7F08BEC4 256CFFFF */ addiu $t4, $t3, -1 -/* 0BE8B8 7F08BEC8 001010C0 */ sll $v0, $s0, 3 -/* 0BE8BC 7F08BECC 014C082A */ slt $at, $t2, $t4 -/* 0BE8C0 7F08BED0 10200014 */ beqz $at, .L7F08BF24 -/* 0BE8C4 7F08BED4 00501023 */ subu $v0, $v0, $s0 -/* 0BE8C8 7F08BED8 00021080 */ sll $v0, $v0, 2 -/* 0BE8CC 7F08BEDC 00501021 */ addu $v0, $v0, $s0 -/* 0BE8D0 7F08BEE0 00021080 */ sll $v0, $v0, 2 -/* 0BE8D4 7F08BEE4 00501021 */ addu $v0, $v0, $s0 -/* 0BE8D8 7F08BEE8 000210C0 */ sll $v0, $v0, 3 -/* 0BE8DC 7F08BEEC 01027021 */ addu $t6, $t0, $v0 -/* 0BE8E0 7F08BEF0 C5C80B50 */ lwc1 $f8, 0xb50($t6) -/* 0BE8E4 7F08BEF4 01036821 */ addu $t5, $t0, $v1 -/* 0BE8E8 7F08BEF8 E5A82A10 */ swc1 $f8, 0x2a10($t5) -/* 0BE8EC 7F08BEFC 8E280000 */ lw $t0, ($s1) -/* 0BE8F0 7F08BF00 01024821 */ addu $t1, $t0, $v0 -/* 0BE8F4 7F08BF04 C52A0B54 */ lwc1 $f10, 0xb54($t1) -/* 0BE8F8 7F08BF08 0103C021 */ addu $t8, $t0, $v1 -/* 0BE8FC 7F08BF0C E70A2A14 */ swc1 $f10, 0x2a14($t8) -/* 0BE900 7F08BF10 8E280000 */ lw $t0, ($s1) -/* 0BE904 7F08BF14 01027821 */ addu $t7, $t0, $v0 -/* 0BE908 7F08BF18 C5F20B58 */ lwc1 $f18, 0xb58($t7) -/* 0BE90C 7F08BF1C 0103C821 */ addu $t9, $t0, $v1 -/* 0BE910 7F08BF20 E7322A18 */ swc1 $f18, 0x2a18($t9) -.L7F08BF24: -/* 0BE914 7F08BF24 26100001 */ addiu $s0, $s0, 1 -/* 0BE918 7F08BF28 24010002 */ li $at, 2 -/* 0BE91C 7F08BF2C 24E70004 */ addiu $a3, $a3, 4 -/* 0BE920 7F08BF30 1601FFCE */ bne $s0, $at, .Leu7F08BE6C -/* 0BE924 7F08BF34 2463000C */ addiu $v1, $v1, 0xc -/* 0BE928 7F08BF38 8FAB00F0 */ lw $t3, 0xf0($sp) -/* 0BE92C 7F08BF3C 956A0012 */ lhu $t2, 0x12($t3) -/* 0BE930 7F08BF40 354C0800 */ ori $t4, $t2, 0x800 -/* 0BE934 7F08BF44 A56C0012 */ sh $t4, 0x12($t3) -/* 0BE938 7F08BF48 8E2E0000 */ lw $t6, ($s1) -/* 0BE93C 7F08BF4C 8FAD00F8 */ lw $t5, 0xf8($sp) -/* 0BE940 7F08BF50 C5C6048C */ lwc1 $f6, 0x48c($t6) -/* 0BE944 7F08BF54 E5A60008 */ swc1 $f6, 8($t5) -/* 0BE948 7F08BF58 8E290000 */ lw $t1, ($s1) -/* 0BE94C 7F08BF5C C5240490 */ lwc1 $f4, 0x490($t1) -/* 0BE950 7F08BF60 E5A4000C */ swc1 $f4, 0xc($t5) -/* 0BE954 7F08BF64 8E380000 */ lw $t8, ($s1) -/* 0BE958 7F08BF68 C7080494 */ lwc1 $f8, 0x494($t8) -/* 0BE95C 7F08BF6C E5A80010 */ swc1 $f8, 0x10($t5) -/* 0BE960 7F08BF70 8E2F0000 */ lw $t7, ($s1) -/* 0BE964 7F08BF74 8DF90488 */ lw $t9, 0x488($t7) -/* 0BE968 7F08BF78 ADB90014 */ sw $t9, 0x14($t5) -/* 0BE96C 7F08BF7C 10000006 */ b .L7F08BF98 -/* 0BE970 7F08BF80 8FA200A0 */ lw $v0, 0xa0($sp) -.L7F08BF84: -/* 0BE974 7F08BF84 8FAA00F8 */ lw $t2, 0xf8($sp) -.L7F08BF88: -/* 0BE978 7F08BF88 00001025 */ move $v0, $zero -/* 0BE97C 7F08BF8C 914C0001 */ lbu $t4, 1($t2) -/* 0BE980 7F08BF90 318BFFFD */ andi $t3, $t4, 0xfffd -/* 0BE984 7F08BF94 A14B0001 */ sb $t3, 1($t2) -.L7F08BF98: -/* 0BE988 7F08BF98 8FBF0024 */ lw $ra, 0x24($sp) -/* 0BE98C 7F08BF9C 8FB0001C */ lw $s0, 0x1c($sp) -/* 0BE990 7F08BFA0 8FB10020 */ lw $s1, 0x20($sp) -/* 0BE994 7F08BFA4 03E00008 */ jr $ra -/* 0BE998 7F08BFA8 27BD00F8 */ addiu $sp, $sp, 0xf8 -) + { + if (g_CurrentPlayer->mpmenuon == 0) + { + gdl = microcode_constructor(gdl); + msg.textwidth = 0; + msg.textheight = 0; +#if defined(LEFTOVERDEBUG) + textMeasure(&msg.textheight, &msg.textwidth, stringbuffer_top[upper_text_buffer_index], ptrFontZurichBoldChars, ptrFontZurichBold, 0); +#else + textMeasure(&msg.textheight, &msg.textwidth, dword_CODE_bss_80079DC8[upper_text_buffer_index], ptrFontZurichBoldChars, ptrFontZurichBold, 0); #endif - - + if (cameraBufferToggle != 0) + { + msg.x = viGetViewLeft() + 0x46; + msg.y = viGetViewTop() + 0x10; + msg.y += 0x10; + msg.y = msg.y / 11; + msg.y *= 11; + msg.y -= 2; + } + else + { + msg.x = viGetViewLeft() + 0x1e; +#ifdef VERSION_EU + msg.y = viGetViewTop() + 0x10; +#else + msg.y = viGetViewTop() + 0xd; #endif + } + + msg.bottom = msg.y + msg.textheight; + gdl = microcode_constructor_related_to_menus(gdl, 0, msg.y - 2, viGetX(), msg.bottom, 0x64); +#ifdef VERSION_US + sw.screenwidth = viGetX(); + gdl = textRender(gdl, &msg.x, &msg.y, stringbuffer_top[upper_text_buffer_index], ptrFontZurichBoldChars, ptrFontZurichBold, -1, sw.screenwidth, viGetY(), 0, 0); +#else + if (j_text_trigger != 0) + { + sw.screenwidth = viGetX(); +#if defined(LEFTOVERDEBUG) + gdl = textRenderOutlined(gdl, &msg.x, &msg.y, stringbuffer_top[upper_text_buffer_index], ptrFontZurichBoldChars, ptrFontZurichBold, -1, 0x646464FF, sw.screenwidth, viGetY(), 0, 0); +#else + gdl = textRenderOutlined(gdl, &msg.x, &msg.y, dword_CODE_bss_80079DC8[upper_text_buffer_index], ptrFontZurichBoldChars, ptrFontZurichBold, -1, 0x646464FF, sw.screenwidth, viGetY(), 0, 0); +#endif + } + else + { + sw.screenwidth = viGetX(); +#if defined(LEFTOVERDEBUG) + gdl = textRender(gdl, &msg.x, &msg.y, stringbuffer_top[upper_text_buffer_index], ptrFontZurichBoldChars, ptrFontZurichBold, -1, sw.screenwidth, viGetY(), 0, 0); +#else + gdl = textRender(gdl, &msg.x, &msg.y, dword_CODE_bss_80079DC8[upper_text_buffer_index], ptrFontZurichBoldChars, ptrFontZurichBold, -1, sw.screenwidth, viGetY(), 0, 0); +#endif + } +#endif + gdl = combiner_bayer_lod_perspective(gdl); + goto end; + } + } + } + } + + if (get_debug_testingmanpos_flag()) + { + theta_x = g_CurrentPlayer->field_488.theta_transform.x; + debug_angle = (s32) ((atan2f(-theta_x, g_CurrentPlayer->field_488.theta_transform.z) * 180.0f) / M_PI_F); + directions = g_DebugCompassLabels; + roomid = bgDebPrintROOMID(g_CurrentPlayer->field_488.current_tile_ptr->room); + + sprintf(debugtext.room, a8s, roomid); + sprintf(debugtext.x, aX4_0f, g_CurrentPlayer->field_488.collision_position.x); + sprintf(debugtext.y, aY4_0f, g_CurrentPlayer->field_488.collision_position.y); + sprintf(debugtext.z, aZ4_0f, g_CurrentPlayer->field_488.collision_position.z); + sprintf(debugtext.angle, aS3d, ((char *) (&directions)) + (((debug_angle + 0x16) / 0x2d) * 3), debug_angle); + + debug_x = viGetViewLeft() + 0x11; + debug_y = viGetViewTop() + 0x11; + debug_boxbottom = debug_y + 0xa; + gdl = microcode_constructor(gdl); + gdl = microcode_constructor_related_to_menus(gdl, 0, debug_y, viGetX(), debug_boxbottom + 1, 0x64); + sw.screenwidth = viGetX(); + gdl = textRender(gdl, &debug_x, &debug_y, debugtext.room, ptrFontBankGothicChars, ptrFontBankGothic, -1, sw.screenwidth, viGetY(), 0, 0); + debug_x = viGetViewLeft() + 0x57; + sw.screenwidth = viGetX(); + gdl = textRender(gdl, &debug_x, &debug_y, debugtext.x, ptrFontBankGothicChars, ptrFontBankGothic, -1, sw.screenwidth, viGetY(), 0, 0); + debug_x = viGetViewLeft() + 0x8d; + sw.screenwidth = viGetX(); + gdl = textRender(gdl, &debug_x, &debug_y, debugtext.y, ptrFontBankGothicChars, ptrFontBankGothic, -1, sw.screenwidth, viGetY(), 0, 0); + debug_x = viGetViewLeft() + 0xc3; + sw.screenwidth = viGetX(); + gdl = textRender(gdl, &debug_x, &debug_y, debugtext.z, ptrFontBankGothicChars, ptrFontBankGothic, -1, sw.screenwidth, viGetY(), 0, 0); + debug_x = viGetViewLeft() + 0xf9; + sw.screenwidth = viGetX(); + gdl = textRender(gdl, &debug_x, &debug_y, debugtext.angle, ptrFontBankGothicChars, ptrFontBankGothic, -1, sw.screenwidth, viGetY(), 0, 0); + gdl = combiner_bayer_lod_perspective(gdl); + } + + end: + return gdl; +} +/** + * Address: 0x7F08B0F0 + */ +s32 playerTick(PropRecord *prop) +{ + s32 index; + ChrRecord *chr; + s32 group; + s32 ret; + s32 sub; + PropRecord *leftprop; + f32 mtx[15]; + s32 tailret; + s32 anim; + f32 angle; + f32 frame; + f32 local90; + f32 local8c; + f32 local88; + f32 fwd; + f32 startframe; + struct weapon_firing_animation_table *firingtable; + coord3d off; + s32 i; + s32 found; + s32 cur; + PropRecord *rightprop; + struct WeaponObjRecord *leftobj; + struct WeaponObjRecord *rightobj; + s32 setanim; + struct player **ppointers; + + index = getPlayerPointerIndex(prop); + chr = prop->chr; + + if (chr != NULL) + { + if (get_player_position_in_shuffled(get_cur_playernum()) == 0) + { + chr->hidden &= ~CHRHIDDEN_FREEZE; + } + } + + if (chr != NULL) + { + if ((g_playerPointers[index]->bodyModel != NULL) && (!(get_debug_render_raster() && (g_playerPointers[index]->cameramode != 1)))) + { + g_playerPointers[index]->field_AC = 0; + ret = chrTick(prop); + g_playerPointers[index]->field_AC = 1; + + g_playerPointers[index]->field_488.collision_position.x = g_playerPointers[index]->prop->pos.x; + g_playerPointers[index]->field_488.collision_position.y = g_playerPointers[index]->prop->pos.y; + g_playerPointers[index]->field_488.collision_position.z = g_playerPointers[index]->prop->pos.z; + g_playerPointers[index]->field_488.current_tile_ptr = g_playerPointers[index]->prop->stan; + bondviewUpdatePlayerRoom(g_playerPointers[index]); + + if (prop->flags & PROPFLAG_ONSCREEN) + { + RenderPosView *rp = g_playerPointers[index]->bodyModel->render_pos; + matrix_4x4_multiply_homogeneous(currentPlayerGetViewToWorldMtxf(), (Mtxf *) rp, (Mtxf *) mtx); + g_playerPointers[index]->field_488.pos.x = mtx[12] + (mtx[4] * 7.0f); + g_playerPointers[index]->field_488.pos.y = mtx[13] + (mtx[5] * 7.0f); + g_playerPointers[index]->field_488.pos.z = mtx[14] + (mtx[6] * 7.0f); + } + + return ret; + } + } + + if (chr == NULL) + { + goto clear_and_return; + } + if (g_playerPointers[index]->bodyModel == NULL) + { + goto clear_and_return; + } + + if (getPlayerCount() < 2) + { + goto clear_and_return; + } + + if (get_cur_playernum() == index) + { + goto clear_and_return; + } + + anim = 0; + firingtable = NULL; + local90 = -1.0f; + frame = -1; + leftprop = chrGetEquippedWeaponProp(chr, GUNLEFT); + rightprop = chrGetEquippedWeaponProp(chr, GUNRIGHT); + leftobj = NULL; + rightobj = NULL; + setanim = 0; + + if (leftprop != NULL) + { + leftobj = leftprop->weapon; + } + + if (rightprop != NULL) + { + rightobj = rightprop->weapon; + } + + ppointers = g_playerPointers; + + if (get_player_position_in_shuffled(get_cur_playernum()) == 0) + { + g_PlayerTickCount = g_PlayerTickCount + 1; + } + + /** + * If the player count is 1 we jump to the bottom of the function with goto clear_and_return, so this block only applies to MP. + * g_PlayerTickCount advances once for each remote player's prop ticked during the pass of the viewport whose player is first in the shuffle order. + * That means g_PlayerTickCount reaches 2 after one frame of a 2 player game, and part way through the first frame of a 3 or 4 player game. + * Nothing *ever* resets g_PlayerTickCount, so we're skipping this whole block only once per boot. The reason for doing this though + * isn't quite clear so do chime in if you have any theories. + */ + if (g_PlayerTickCount >= 2) + { + local8c = ((0, ppointers[index]))->field_2A08; + local88 = ppointers[index]->field_2A0C; + + if (ppointers[index]->bonddead != FALSE) + { + found = 0; + + for (i = 0; i < g_bondviewBondDeathAnimationsCount; i++) + { + cur = ppointers[index]->players_cur_animation; + + if (cur == (g_bondviewBondDeathAnimations[i] + ((s32) ptr_animation_table))) + { + found = 1; + } + } + + if (found) + { + anim = ppointers[index]->players_cur_animation; + angle = 0.5f; + } + else + { + anim = g_bondviewBondDeathAnimations[randomGetNext() % g_bondviewBondDeathAnimationsCount] + ((s32) ptr_animation_table); + angle = 0.5f; + } + + cur = ppointers[index]->players_cur_animation; + local8c = 0.0f; + local88 = 0.0f; + goto join_768; + } + + if ((leftprop != NULL) && (rightprop != NULL)) + { + group = 3; + } + else if ((leftprop == NULL) && (rightprop == NULL)) + { + group = 2; + } + else if ((leftobj != NULL) && (bondwalkItemCheckBitflags(leftobj->weaponnum, WEAPONSTATBITFLAG_HOLD_AS_GUN) == 0)) + { + group = 2; + } + else if ((rightobj != NULL) && (bondwalkItemCheckBitflags(rightobj->weaponnum, WEAPONSTATBITFLAG_HOLD_AS_GUN) == 0)) + { + group = 2; + } + else if ((leftobj != NULL) && (bondwalkItemCheckBitflags(leftobj->weaponnum, WEAPONSTATBITFLAG_ONLY_1_HANDED) != 0)) + { + group = 0; + } + else if ((rightobj != NULL) && (bondwalkItemCheckBitflags(rightobj->weaponnum, WEAPONSTATBITFLAG_ONLY_1_HANDED) != 0)) + { + group = 0; + } + else + { + group = 1; + } + + if (playerGetCrouchPos(index) == 1) + { + goto set_crouch_lean; + } + else if (playerGetCrouchPos(index) == 0) + { +set_crouch_lean: + angle = 1.0f; + sub = 5; + } + else if ((ppointers[index]->speedsideways < 0.0f) && (firing_animation_groups[group][4].pointer != NULL)) + { + sub = 4; + angle = -ppointers[index]->speedsideways; + + if (ppointers[index]->field_1280 < 90.0f) + { + ppointers[index]->field_1280 = ppointers[index]->field_1280 + 15.0f; + } + } + else if ((ppointers[index]->speedsideways > 0.0f) && (firing_animation_groups[group][3].pointer != NULL)) + { + sub = 3; + angle = ppointers[index]->speedsideways; + + if (ppointers[index]->field_1280 > (-90.0f)) + { + ppointers[index]->field_1280 = ppointers[index]->field_1280 - 15.0f; + } + } + else + { + frame = ppointers[index]->speedtheta; + + if (frame < 0.0f) + { + frame = -frame; + } + + fwd = ppointers[index]->speedforwards; + + if (fwd < -0.050000001f) + { + frame = -frame; + + if (fwd < frame) + { + frame = fwd; + } + + if (ppointers[index]->headanim == 0) + { + goto shared_double_neg; + } + + sub = 2; + + if (-0.40000001f < fwd) + { +shared_double_neg: + angle = frame + frame; + sub = 1; + + if (angle < (-1.0f)) + { + angle = -1.0f; + } + } + else + { + angle = frame; + goto lean_return_to_centre; + } + } + else + { + if (0.050000001f < fwd) + { + goto shared_framefwd; + } + else if (0.050000001f < frame) + { +shared_framefwd: + if (frame < fwd) + { + frame = fwd; + } + } + else + { + goto set_full_lean; + } + + if (ppointers[index]->headanim == 0) + { + goto shared_double_pos; + } + + sub = 2; + + if (fwd < 0.40000001f) + { +shared_double_pos: + angle = frame + frame; + sub = 1; + + if (1.0f < angle) + { + angle = 1.0f; + } + } + else + { + angle = frame; + goto lean_return_to_centre; + } + } + + goto lean_return_to_centre; + +set_full_lean: + angle = 1.0f; + sub = 0; + +lean_return_to_centre: + if (0.0f < ppointers[index]->field_1280) + { + ppointers[index]->field_1280 = ppointers[index]->field_1280 - 15.0f; + } + + if (ppointers[index]->field_1280 < 0.0f) + { + ppointers[index]->field_1280 = ppointers[index]->field_1280 + 15.0f; + } + } + + { + struct firing_anim_struct *fa = &firing_animation_groups[group][sub]; + + firingtable = fa->pointer; + + if (fa->anim != 0) + { + anim = fa->anim + (s32) ptr_animation_table; + } + + angle *= fa->x; + local90 = fa->z; + frame = fa->y; + } + + cur = ppointers[index]->players_cur_animation; + +join_768: + if ((firingtable != NULL) && (anim == 0)) + { + anim = *((s32 *) firingtable); + } + + if (anim != cur) + { + setanim = 1; + } + + if (0.0f <= frame) + { + if ((ppointers[index]->bodyModel->animlooping == 0) || (frame != ppointers[index]->bodyModel->animloopframe)) + { + setanim = 1; + } + } + + if (frame < 0.0f) + { + if (ppointers[index]->bodyModel->animlooping) + { + setanim = 1; + } + } + + if (setanim != 0) + { + if (ppointers[index]->bodyModel->anim2 == NULL) + { + startframe = (0.0f <= frame) ? (frame) : (0.0f); + modelSetAnimation(ppointers[index]->bodyModel, (ModelAnimation *) anim, 0, startframe, angle, 16.0f); + ppointers[index]->players_cur_animation = anim; + ppointers[index]->field_1288 = angle; + + if (0.0f <= frame) + { + modelSetAnimLooping(ppointers[index]->bodyModel, frame, 16.0f); + } + + if (0.0f <= local90) + { + modelSetAnimEndFrame(ppointers[index]->bodyModel, local90); + } + } + + cur = ppointers[index]->players_cur_animation; + } + else + { + if (angle != ppointers[index]->field_1288) + { + modelSetAnimSpeed(ppointers[index]->bodyModel, angle, 1.0f); + ppointers[index]->field_1288 = angle; + } + + cur = ppointers[index]->players_cur_animation; + } + + if (anim == cur) + { + if (firingtable != NULL) + { + chr->hidden &= ~CHRHIDDEN_0400; + chrlvUpdateAimendbackShoulders(chr, firingtable, 0, 1, local8c); + } + else + { + chr->aimendrshoulder = 0.0f; + chr->aimendlshoulder = 0.0f; + chr->hidden |= CHRHIDDEN_0400; + chr->aimendback = local8c; + } + } + + chr->aimendsideback = local88; + chr->aimendcount = 10; + } + + prop->pos.x = ppointers[index]->field_488.collision_position.x; + prop->pos.y = ppointers[index]->field_488.collision_position.y; + prop->pos.z = ppointers[index]->field_488.collision_position.z; + prop->stan = ppointers[index]->field_488.current_tile_ptr; + + getsuboffset(chr->model, &off); + off.x = prop->pos.x; + off.z = prop->pos.z; + setsuboffset(chr->model, &off); + setsubroty(chr->model, (((360.0f - ppointers[index]->vv_theta) + ppointers[index]->field_1280) * M_TAU_F) / 360.0f); + + chr->chrflags |= CHRFLAG_INIT; + chr->actiontype = ACT_BONDMULTI; + chr->act_bondmulti.unk2c = (f32 *) firingtable; + + chrSetFiring(chr, GUNRIGHT, ppointers[index]->hands[GUNRIGHT].field_87D); + chrSetFiring(chr, GUNLEFT, ppointers[index]->hands[GUNLEFT].field_87D); + + tailret = chrTick(prop); + + for (i = 0; i != 2; i++) + { + if (sub_GAME_7F02D630(chr, i, &ppointers[index]->field_2A18[i]) != 0) + { + (&ppointers[index]->field_2A30)[i] = D_80048380; + } + else if ((&ppointers[index]->field_2A30)[i] < (D_80048380 - 1)) + { + ppointers[index]->field_2A18[i].x = ppointers[index]->hands[i].field_B58.x; + ppointers[index]->field_2A18[i].y = ppointers[index]->hands[i].field_B58.y; + ppointers[index]->field_2A18[i].z = ppointers[index]->hands[i].field_B58.z; + } + } + + chr->hidden |= CHRHIDDEN_FREEZE; + + prop->pos.x = ppointers[index]->field_488.collision_position.x; + prop->pos.y = ppointers[index]->field_488.collision_position.y; + prop->pos.z = ppointers[index]->field_488.collision_position.z; + prop->stan = ppointers[index]->field_488.current_tile_ptr; + + return tailret; + +clear_and_return: + prop->flags &= ~PROPFLAG_ONSCREEN; + + return TICKOP_NONE; +} /** @@ -20615,9 +12115,6 @@ Gfx * bondviewRemoved7F08BCB8(Gfx *arg0) } - - - /** * Address 0x7F08BCC0. */ @@ -20739,7 +12236,7 @@ void sub_GAME_7F08BEEC(Mtxf *matrices, s32 count) for (i = 0, j = 0; i < count; i++, j += sizeof(Mtxf)) { - matrix_4x4_multiply_homogeneous(currentPlayerGetMatrix10D4(), (Mtxf *)((u32)matrices + j), &sp40); + matrix_4x4_multiply_homogeneous(currentPlayerGetViewToWorldMtxf(), (Mtxf *)((u32)matrices + j), &sp40); sp40.m[3][0] -= g_CurrentPlayer->current_model_pos.f[0]; sp40.m[3][1] -= g_CurrentPlayer->current_model_pos.f[1]; @@ -20766,6 +12263,3 @@ void SurroundWithExplosions(int delay) g_PlayerTickExplodeCreatePosition = 0; } - - - diff --git a/src/game/bondview.h b/src/game/bondview.h index 5a842f65..3539224d 100644 --- a/src/game/bondview.h +++ b/src/game/bondview.h @@ -24,7 +24,7 @@ typedef struct invitem_dual s32 weapon_left; } invitem_dual; -/** unknown struct, used in `strut player`. +/** * We know this is a struct from the compiler auto-generated * code to copy structs in bondview.c bondviewKillCurrentPlayer. * @@ -55,18 +55,18 @@ struct collision434 { /** * Some kind of alternative to pos3 (in player struct). - * Offset 0x20. + * Offset 0x1c. */ coord3d pos3; /** - * Offset 0x2c. + * Offset 0x28. */ f32 collision_radius; /** * Some kind of alternative to pos (in player struct). - * Offset 0x30. + * Offset 0x2c. */ coord3d pos; @@ -75,21 +75,44 @@ struct collision434 { * to this property and applied_view2. Removing the update to this property will fix * Bond's camera orientation such that Bond can still turn, but the camera is always * locked facing the starting position. - * Offset 0x3c. + * Offset 0x38. */ struct coord3d applied_view; /** - * Offset 0x48. + * Offset 0x44. */ struct coord3d applied_view2; /** - * Offset 0x54. + * Offset 0x50. */ StandTile *current_tile_ptr_for_portals; }; +typedef struct +{ + u8 labels[9][3]; +} DirectionLabels; + +typedef struct TopMessageLocals +{ + s32 textwidth; + s32 textheight; + s32 bottom; + s32 y; + s32 x; +} TopMessageLocals; + +typedef struct DebugTextBuffers +{ + char angle[0x10]; + char z[0x10]; + char y[0x10]; + char x[0x10]; + char room[0x10]; +} DebugTextBuffers; + /** * first hand: 0x800c6fd0 */ @@ -113,11 +136,11 @@ struct hand s32 field_888; s32 field_88C; s32 field_890; - s32 when_detonating_mines_is_0; + s32 weapon_action_state; s32 weapon_current_animation; s32 weapon_ammo_in_magazine; s32 field_8A0; - s32 field_8A4; + s32 numvisibleshells; s32 field_8A8; s32 weapon_next_weapon; s32 field_8B0; @@ -137,24 +160,24 @@ struct hand f32 field_8E8; Mtxf field_8EC; s32 field_92C; - s32 field_930; - s32 field_934; - s32 field_938; - s32 field_93C; - s32 field_940; - f32 field_944; - s32 field_948; - f32 field_94C; - s32 field_950; - s32 field_954; - s32 field_958; - s32 field_95C; - s32 field_960; - s32 field_964; - f32 field_968; - s32 field_96C; - f32 field_970; - s32 field_974; + f32 sway_pos_x; + f32 sway_pos_y; + f32 sway_pos_z; + f32 sway_look_x; + f32 sway_look_y; + f32 sway_look_z; + f32 sway_up_x; + f32 sway_up_y; + f32 sway_up_z; + f32 spring_pos_x; + f32 spring_pos_y; + f32 spring_pos_z; + f32 spring_look_x; + f32 spring_look_y; + f32 spring_look_z; + f32 spring_up_x; + f32 spring_up_y; + f32 spring_up_z; coord3d blendpos[4]; coord3d blendlook[4]; coord3d blendup[4]; @@ -166,9 +189,9 @@ struct hand f32 weapon_theta_displacement; f32 weapon_verta_displacement; s32 field_A24; - s32 field_A28; - s32 field_A2C; - f32 field_A30; + f32 gunofs2_x; + f32 gunofs2_y; + f32 gunofs2_z; f32 field_A34; f32 field_A38; f32 field_A3C; @@ -177,60 +200,29 @@ struct hand s32 field_A48; s32 field_A4C; s32 field_A50; - ChrRecord_f180 field_A54; + BeamRecord weapon_beam; f32 noise; f32 field_A84; f32 field_A88; s32 field_A8C; - ObjectRecord* rocket; + AttachedObj* rocket; s32 firedrocket; - s32 field_A98; - s32 field_A9C; - s32 field_AA0; - s32 field_AA4; - s32 field_AA8; - s32 field_AAC; - s32 field_AB0; - s32 field_AB4; - s32 field_AB8; - s32 field_ABC; - s32 field_AC0; - s32 field_AC4; - s32 field_AC8; - s32 field_ACC; - s32 field_AD0; - s32 field_AD4; - + Mtxf gunmtx_camspace; // offset 0xad8 Mtxf throw_item_pos_related; - - s32 field_B18; - s32 field_B1C; - s32 field_B20; - s32 field_B24; - s32 field_B28; - s32 field_B2C; - s32 field_B30; - s32 field_B34; - s32 field_B38; - s32 field_B3C; - s32 field_B40; - s32 field_B44; - s32 field_B48; - s32 field_B4C; - s32 field_B50; - s32 field_B54; + // offset 0xb18 + Mtxf throw_item_pos_related_prev; coord3d field_B58; f32 field_B64; s32 field_B68; s32 field_B6C; s32 field_B70; - s32 field_B74; + Mtxf *mtxlist; s32 field_B78; s32 field_B7C; s32 field_B80; s32 field_B84; - s32 field_B88; + s32 modeldatas; s32 field_B8C; s32 field_B90; s32 field_B94; @@ -305,12 +297,12 @@ typedef struct gunheld { struct player { - /* 0x0000 */ s32 unknown; + s32 cameramode; // canonical name /** * Offset 0x0004. */ - coord3d pos; + coord3d pos; // canonical "memcampos" ? /** * Offset 0x0010. @@ -330,7 +322,7 @@ struct player /** * Offset 0x0034. */ - StandTile *room_pointer; + StandTile *cameratile; /** * Offset 0x0038. @@ -416,12 +408,12 @@ struct player /** * Flag: 0, 1, 2 */ - /* 0x009c */ s32 crouchpos; + /* 0x009c */ s32 crouchpos; // canonical name /** * Varies from 0.0f to -100.0f * / - /* 0x00a0 */ f32 ducking_height_offset; + /* 0x00a0 */ f32 ducking_height_offset; // canonical "crouchoffset" ? /** * Crouch related, only used while moving up or down into or @@ -437,14 +429,20 @@ struct player struct rect4f collision_bounds; /* 0x00d0 */ s32 field_D0; - /* 0x00d4 */ struct Model *ptr_char_objectinstance; //canonically bondsub - /* 0x00d8 */ s32 bonddead; - /* 0x00dc */ f32 bondhealth; + + /** + * bodyModel is the third person model - it's seen by the other players in MP, and + * during intro/outros/death scenes in SP. + */ + /* 0x00d4 */ struct Model *bodyModel; //canonically bondsub + + /* 0x00d8 */ s32 bonddead; // canonical name + /* 0x00dc */ f32 bondhealth; // canonical name /* 0x00e0 */ f32 bondarmour; - /* 0x00e4 */ f32 oldhealth; - /* 0x00e8 */ f32 oldarmour; - /* 0x00ec */ f32 apparenthealth; - /* 0x00f0 */ f32 apparentarmour; + /* 0x00e4 */ f32 oldhealth; // canonical name + /* 0x00e8 */ f32 oldarmour; // canonical name + /* 0x00ec */ f32 apparenthealth; // canonical name + /* 0x00f0 */ f32 apparentarmour; // canonical name #if defined(VERSION_JP) || defined (VERSION_EU) @@ -468,21 +466,67 @@ struct player **/ f32 healthshowtime; #else - /* See comments above. 0x00f4 */ s32 damageshowtime; - /* See comments above. 0x00f8 */ s32 healthshowtime; + /* See comments above. 0x00f4 */ s32 damageshowtime; // canonical name + /* See comments above. 0x00f8 */ s32 healthshowtime; // canonical name #endif - /* 0x00fc */ s32 healthshowmode; - /* 0x0100 */ s32 field_100; - /* 0x0104 */ s32 field_104; - /* 0x0108 */ s32 field_108; - /* 0x010c */ s32 field_10C; - /* 0x0120 */ s32 movecentrerelease; - /* 0x0124 */ s32 lookaheadcentreenabled; - /* 0x0128 */ s32 automovecentreenabled; - /* 0x012c */ s32 fastmovecentreenabled; - /* 0x0120 */ s32 automovecentre; + /* 0x00fc */ s32 healthshowmode; // canonical name + /* 0x0100 */ s32 field_100; // unused + + /** + * The field names from this point up to bondbreathing are canonical names + * with the exceptions of autoaim_target_y and autoaim_target_x. + */ + + /* 0x0104 */ bool docentreupdown; + + /** + * Assigned to 0 but never read. + * Probably "lastupdown60" based on this list: https://gist.github.com/kholdfuzion/ec713f2c0a36fbfbd4f71568073f47bc + * 0x0108 + */ + s32 lastupdown60; + + /** + * When the player is doing manual pitch inputs, this is set to true so + * the automatic look ahead pitch adjust is interrupted. + * 0x010c + */ + bool prevupdown; + + /** + * If the player is moving forward quickly, and has made a manual pitch adjustment, suppress + * the automatic look ahead pitch adjusting until the player has slowed down. + * 0x0110 + */ + bool movecentrerelease; + + /** + * If enabled, test the tiles ahead of the player for the look ahead functionality. + * This is always enabled. + * 0x0114 + */ + bool lookaheadcentreenabled; + + /** + * Look Ahead Setting in the watch menu. + * 0x0118 + */ + bool automovecentreenabled; + + /** + * Always false. + * 0x011c + */ + bool fastmovecentreenabled; + + /** + * True when Look Ahead is enabled and the player is giving strong + * forwards or backwards input. + * 0x0120 + */ + bool automovecentre; /** * 0: crosshair shown on screen @@ -499,6 +543,7 @@ struct player /* 0x013c */ f32 autoaimx; /* 0x0140 */ struct PropRecord *autoaim_target_x; /* 0x0144 */ s32 autoxaimtime60; + /* 0x0148 */ f32 vv_theta; /* 0x014c */ f32 speedtheta; @@ -617,13 +662,21 @@ struct player * 1 = begin pause animation. Set as soon as moving arm begins, cleared when moving arm ends. * 0x800C6960 */ - s32 pausing_flag; - f32 pause_starting_angle; - f32 pause_related; - f32 pause_target_angle; - f32 field_210; - f32 field_214; - s32 field_218; + s32 pausing_flag; // 0x200 + f32 pause_starting_angle; // 0x204 + f32 pause_saved_verta; // 0x208, camera pitch to restore after pause + f32 pause_target_verta; // 0x20c + f32 pause_transition_time; // 0x210, elapsed time + f32 pause_transition_duration; // 0x214, max/duration + + /** + * Pausing states. + * 0 = Unpaused + * 1 = Entering pause. + * 2 = Leaving pause. + * 3 = Paused. + */ + s32 pause_state; // 0x218 s32 field_21C; s32 step_in_view_watch_animation; f32 pause_animation_counter; @@ -645,7 +698,7 @@ struct player s32 field_238; s32 field_23C; s32 field_240; - s32 watch_scale_destination; + f32 watch_scale_destination; s32 field_248; s32 field_24C; s32 field_250; @@ -755,6 +808,10 @@ struct player f32 field_3C4; f32 field_3C8; f32 field_3CC; + + /** + * Canonical names from here up through deathanimfinished. + */ s32 colourscreenred; s32 colourscreengreen; s32 colourscreenblue; @@ -778,11 +835,11 @@ struct player * Something with position, like previous x position. * Offset 0x408. */ - coord3d bondprevpos; //0x408 + coord3d bondprevpos; f32 thetadie; //0x414 f32 vertadie; //0x418 - s32 bondtype; + s32 bondtype; //0x41c s32 startnewbonddie; //0x420 /** @@ -797,11 +854,15 @@ struct player */ s32 deathanimfinished; s32 field_42c; - s32 controldef; //0x430 + s32 controldef; //0x430 canonical name - struct collision434 previous_collision_info; + struct collision434 previous_collision_info; // canonical "periminfo" ? struct collision434 field_488; + /** + * Canonical names from here up to standcnt. + */ + s32 resetheadpos; // bool s32 resetheadrot; // bool s32 resetheadtick; // bool 0x4e4 @@ -962,8 +1023,8 @@ struct player * Offset 0x870. */ struct hand hands[2]; - f32 gunposamplitude; - f32 gunxamplitude; + f32 gunposamplitude; // canonical name + f32 gunxamplitude; // canonical name // Whether the trigger was released this frame. s32 trigger_released; @@ -983,7 +1044,8 @@ struct player s32 current_trigger_hand; struct rgba_u8 tileColor; - s32 resetshadecol; + + s32 resetshadecol; // canonical name // unused. Name comes from XBLA debug. s32 aimtype; @@ -995,27 +1057,31 @@ struct player coord2d crosshair_angle; f32 crosshair_x_pos; f32 crosshair_y_pos; - f32 guncrossdamp; + f32 guncrossdamp; // canonical name coord2d field_FFC; f32 gun_azimuth_angle; f32 gun_azimuth_turning; - f32 gunaimdamp; + f32 gunaimdamp; // canonical name coord3d field_1010; Mtxf field_101C; s32 last_z_trigger_timer; - s32 copiedgoldeneye; - s32 gunammooff; + s32 copiedgoldeneye; // canonical name + s32 gunammooff; // canonical name s32 field_1068; - f32 gunsync; - f32 syncchange; - f32 synccount; - s32 syncoffset; + f32 gunsync; // canonical name + f32 syncchange; // canonical name + f32 synccount; // canonical name + s32 syncoffset; // canonical name f32 field_107C; f32 field_1080; f32 sniper_zoom; f32 camera_zoom; s32 curRoomIndex; + /** + * Canonical names from here up through c_recipscaley. + */ + /** * Offset 0x1090. */ @@ -1076,6 +1142,7 @@ struct player */ f32 c_recipscalex; f32 c_recipscaley; + Mtx* field_10C4; Mtx* field_10C8; Mtxf* field_10CC; @@ -1084,19 +1151,19 @@ struct player /** * Offset 0x10d4. */ - Mtxf* field_10D4; + Mtxf* viewtoworldmtxf; Mtx* projmatrix; Mtxf* projmatrixf; s32 field_10E0; // ptr s32 field_10E4; // ptr Mtxf* field_10E8; Mtxf* field_10EC; - f32 c_scalelod60; - f32 c_scalelod; - f32 c_lodscalez; - u32 c_lodscalezu32; - coord3d c_cameratopnorm; - coord3d c_cameraleftnorm; + f32 c_scalelod60; // canonical name + f32 c_scalelod; // canonical name + f32 c_lodscalez; // canonical name + u32 c_lodscalezu32; // canonical name + coord3d c_cameratopnorm; // canonical name + coord3d c_cameraleftnorm; // canonical name /** * Offset 0x1118. @@ -1112,11 +1179,16 @@ struct player */ s32 gunsightmode; s32 field_112C; - s32 ammoheldarr[30]; + s32 ammoheldarr[30]; // canonical name u8 *bloodImgCur; u8 *bloodImgNxt; u8 *bloodImgBufPtrArray[2]; s32 bloodImgIdx; + + /** + * Canonical names from here up through bondmesscnt. + */ + f32 zoomintime; f32 zoomintimemax; f32 zoominfovy; @@ -1126,16 +1198,17 @@ struct player f32 aspect; s32 hudmessoff; s32 bondmesscnt; + InvItem *ptr_inventory_first_in_cycle; InvItem *p_itemcur; - s32 equipmaxitems; - s32 equipallguns; - s32 equipcuritem; + s32 equipmaxitems; // canonical name + s32 equipallguns; // canonical name + s32 equipcuritem; // canonical name textoverride *textoverrides; - gunheld gunheldarr[10]; + gunheld gunheldarr[10]; // canonical name // -1 for inactive, 0 or greater for active. - s32 magnetattracttime; + s32 magnetattracttime; // canonical name f32 swaytarget; f32 swayoffset0; @@ -1150,14 +1223,14 @@ struct player * Entry seems to be added only on other button presses. * Offset 0x128c. */ - u16 cheatInputBuffer[20]; + u16 cheatInputBuffer[20]; // canonically "buthist" /** * Offset 0x12b4. */ - /* 0x12B4 */ u8 cheatInputBufferIndex; - /* 0x12B5 */ u8 cheatInputCount; - /* 0x12B6 */ u8 bondinvincible; + /* 0x12B4 */ u8 cheatInputBufferIndex; // canonically "buthistindex" + /* 0x12B5 */ u8 cheatInputCount; // canonically "buthistlen" + /* 0x12B6 */ u8 cheatBondInvincible; // canonically "bondinvincible" /* 0x12B7 */ u8 field_12B7; /* 0x12B8 */ struct damage_display_parent armor_display_values[23]; /* 0x1598 */ struct damage_display_parent health_display_values[23]; @@ -2193,41 +2266,41 @@ struct player s32 field_29B4; // Alt field_29C0 ?? Used in EU. - s32 healthDamageType; + s32 healthdamagetype; // canonical name /** * Related to player perspective. * Offset 0x29bc. */ - f32 field_29BC; + f32 eyeheight; f32 field_29C0; - s32 mpmenuon; - s32 mpmenumode; - s32 mpquitconfirm; - s32 mpjoywascentre; - s32 damagetype; - s32 deathcount; - s32 num_suicides; - s32 field_29E0; - s32 last_kill_time[4]; + s32 mpmenuon; // 29C4 canonincal name + s32 mpmenumode; // 29C8 canonincal name + s32 mpquitconfirm; // 29CC canonincal name + s32 mpjoywascentre; // 29D0 canonincal name + s32 damagetype; // 29D4 canonincal name + s32 deathcount; // 29D8 canonincal name + s32 num_suicides; // 29DC + s32 field_29E0; // 29E0 + s32 last_kill_time[4]; // 29E4 /** * Holds mission offset timer value. * Offset 0x29f4. */ - s32 field_29F4; + s32 lifestarttime60; // canonical name - s32 field_29F8; + s32 kills_this_life; // 29F8 canonically "killsthislife" s32 autocrouchpos; - s32 healthdisplaytime; + s32 healthdisplaytime; // canonically "healthdisplaytime60" /** * Current tile pointer -> room. * * Offset 0x2a04. */ - s16 field_2A04; + s16 registeredroom; f32 field_2A08; f32 field_2A0C; s32 ptr_text_first_mp_award; @@ -2242,10 +2315,10 @@ struct player f32 speedgo; s32 lock_hand_model[2]; s32 cur_player_control_type_0; - s32 cur_player_control_type_1; - f32 cur_player_control_type_2; - s32 neg_vspacing_for_control_type_entry; - u32 has_set_control_type_data; + s32 cur_player_control_type_1; //0x2a5c + f32 cur_player_control_type_2; //0x2a60 + s32 neg_vspacing_for_control_type_entry; //0x2a64 + u32 has_set_control_type_data; //0x2a68 /** * Collision / clipping related. * Related to 0ffset 0x2a70. @@ -2311,11 +2384,12 @@ typedef struct DamageType } DamageType; #endif -typedef struct HealthDamageType { // time related idk - s32 updateStartFrame; - s32 updateEndFrame; - s32 otherEndFrame; -} HealthDamageType; +typedef struct HealthDisplayDuration +{ + s32 validStartFrame; // When positive the health display does not show up at all. + s32 updateToRealHealthFrame; // Frame to switch from showing the health before taking damage, to showing the new health value. + s32 hideHealthFrame; // Frame to remove the health/armor gauge from the screen. +} HealthDisplayDuration; /** * First person weapon animation keyframe. Used for special weapons like the Throwing Knife and Taser. @@ -2353,7 +2427,7 @@ extern CreditsEntry *credits_pointer; //D:80036444 extern s32 g_SurroundBondWithExplosionsFlag; //D:80036448 -extern s32 in_tank_flag; +extern s32 g_PlayerIsInTank; //D:8003644C extern struct PropRecord *g_WorldTankProp; @@ -2412,7 +2486,11 @@ extern struct SetupIntroSwirl *g_IntroSwirl; //D:800364B0 extern s32 is_timer_active; //D:800364B4 -extern s32 g_PlayerInvincible; +/** + * Used to make the player invincible upon level completion. + * This is separate from the invincibility cheat, stored in cheatBondInvincible. + */ +extern bool g_PlayerInvincible; //D:800364B8 extern struct SetupIntroCamera* g_CurrentSetupIntroCamera; //D:800364BC @@ -2513,7 +2591,7 @@ D:8003676C .byte 0 D:8003676D .byte 0, 0, 0xA D:80036770 .word 0x1E, 0x3F19999A, 0 D:8003677C .word 5, 0xF, 0x3ECCCCCD, 0xFF, 0xFF, 0xFF -D:80036794 g_HealthDamageTypes:.word 0 +D:80036794 g_HealthDisplayDurations:.word 0 D:80036798 .byte 0 D:80036799 .byte 0, 0, 0x28 D:8003679C .word 0x64, 0 @@ -2544,28 +2622,13 @@ extern struct coord3d g_DefaultFrozenPlayerOffset; extern struct coord3d g_DefaultFrozenMoveOffset; //D:80036830 -extern s32 D_80036830; -//D:80036834 -extern s32 D_80036834; -//D:80036838 -extern s32 D_80036838; +extern coord3d ZeroCoord; //D:8003683C extern ModelRenderData D_8003683C; - //D:8003687C -extern s32 D_8003687C; -//D:80036880 -extern s32 D_80036880; -//D:80036884 -extern s32 D_80036884; -//D:80036888 -extern s32 D_80036888; +extern coord3d ZeroCoordWatchPos; //D:8003688C -extern s32 D_8003688C; -//D:80036890 -extern s32 D_80036890; -//D:80036894 -extern s32 D_80036894; +extern coord3d ZeroCoordSpawnPos; //D:80036898 extern s32 status_bar_text_buffer_index; //D:8003689C @@ -2639,13 +2702,14 @@ extern StandTilePoint *dword_CODE_bss_80079DA4; extern s32 dword_CODE_bss_80079DA8[]; -u32 bondviewGetCameraMode(void); -void bondviewTriggerWatchZoom(f32 zoominfovy); -void trigger_watch_zoom(f32 final, f32 time); +PropRecord* getCurrentPlayerProp(void); -PropRecord* get_curplayer_positiondata(void); +f32 currentPlayerGetHealth(void); +f32 currentPlayerGetArmor(void); + +bool currentPlayerGetIsAiming(void); void currentPlayerSetScreenSize(f32 width, f32 height); void currentPlayerSetCameraScale(void); @@ -2653,23 +2717,32 @@ void currentPlayerSetScreenPosition(f32 left, f32 top); void currentPlayerSetPerspective(f32 near, f32 fovy, f32 aspect); f32 getPlayer_c_screenwidth(void); - f32 getPlayer_c_screenheight(void); - f32 getPlayer_c_screenleft(void); - f32 getPlayer_c_screentop(void); - f32 getPlayer_c_perspfovy(void); - f32 getPlayer_c_perspaspect(void); +void currentPlayerSetXAutoAimEnabled(bool enabled); +bool currentPlayerGetXAutoAimEnabled(void); +bool currentPlayerGetXAutoAimEnabledRedirect(void); +void currentPlayerSetYAutoAimEnabled(s32 enabled); +bool currentPlayerGetYAutoAimEnabled(void); +bool currentPlayerGetYAutoAimEnabledRedirect(void); +void currentPlayerSetLookAheadSetting(bool enabled); + +u32 bondviewGetCameraMode(void); + +void bondviewTriggerWatchZoom(f32 zoominfovy); + +void trigger_watch_zoom(f32 final, f32 time); + void set_open_close_solo_watch_menu_to1(void); void init_player_BONDdata(void); -void bondviewPlayerSpawnRelated(void); -f32 bondviewGetCurrentPlayerHealth(void); -f32 get_BONDdata_watch_armor(void); +void bondviewPlayerBeginLife(void); + + void bondviewMovePlayerUpdateViewport(s8 arg0, s8 arg1, u16 arg2); #if defined(BUGFIX_R1) @@ -2683,12 +2756,13 @@ void hudmsgBottomShow(char *string); void setFontTables(s32 arg0, s32 arg1); #endif -Gfx * sub_GAME_7F087A08(Gfx *arg0); +Gfx * bondviewRenderDebugBondView(Gfx *arg0); s32 bond_pressed_reload_activate(void); Gfx* write_stan_tiles_in_yellow(Gfx *arg0); Gfx * maybe_mp_interface(Gfx *arg0); Gfx * bondviewRemoved7F08BCB8(Gfx *arg0); -s32 camIsPosInScreen(coord3d *vec_scale, f32 norm_scale); +bool camIsPosInScreen(coord3d *vec_scale, f32 norm_scale); +bool camIsPosInScreenBox(coord3d *, f32, struct bbox2d *); s32 getMissiontimer(void); void solo_char_load(void); void bondviewUpdateYAutoAimTime(struct PropRecord *autoaim_target, f32 auto_aim_y); @@ -2700,10 +2774,6 @@ void bondviewGetCollisionRadius(PropRecord* arg0, f32 *collision_radius, f32 *he void bondviewUpdatePlayerY(s32 use_stanHeight, f32 stanHeight_offset); void currentPlayerSetFadeColour(s32 r, s32 g, s32 b, f32 frac); void currentPlayerSetFadeFrac(f32 maxfadetime, f32 frac); -void set_BONDdata_autoaim_x(s32 param_1); -s32 get_BONDdata_autoaim_x(void); -void set_BONDdata_autoaim_y(s32 param_1); -void set_BONDdata_lookahead_setting(s32 arg0); f32 bondviewGetPlayerStanHeight(struct player *player); void record_damage_kills(f32, f32, f32, s32, s32); void bondviewCallRecordDamageKills(f32 arg0, f32 rad, s32 arg2, s32 arg3); @@ -2711,14 +2781,14 @@ int bondviewGetIfCurrentPlayerDamageShowTime(void); int bondviewGetIfCurrentPlayerHealthShowTime(void); u8 bondviewGetCurrentPlayersRoom(void); coord3d *bondviewGetCurrentPlayersPosition(void); -void bondviewUpdateGuardTankFlagsRelated(PropRecord *arg0, s32 flags); +void bondviewUpdateGuardTankFlagsRelated(PropRecord *prop, s32 flag); void bondviewGetPropHeightRelatedValues(PropRecord *arg0, struct rect4f **field_B0, s32 *arg2, f32 *height_related, f32 *collision); void bondviewAddCurrentPlayerArmor(f32 arg0); void bondviewResetIntroCameraMessageDialogs(void); void hudmsgsSetOn(s32 flag); void hudmsgsSetOff(s32 flags); Gfx* bondviewGfxPlayerField5cMatrix(Gfx* gdl); -Mtxf *currentPlayerGetMatrix10D4(void); +Mtxf *currentPlayerGetViewToWorldMtxf(void); void sub_GAME_7F08BEEC(Mtxf *arg0, s32 arg1); void currentPlayerStartChrFade(f32 duration60, f32 targetfrac); s32 bondviewGetVisibleToGuardsFlag(void); @@ -2726,11 +2796,9 @@ u8 get_bondata_invincible_flag(void); void set_bondata_invincible_flag(u32 arg0); void bondviewSetVisibleToGuardsFlag(s32 param_1); Mtxf *currentPlayerGetMatrix10EC(void); -f32 get_curplay_horizontal_rotation_in_degrees(void); +f32 bondviewGetPlayerYawRadians(void); Mtxf *camGetWorldToScreenMtxf(void); void transformAndNormalizeByLength2Dto3D(struct coord2d *in, coord3d *out, f32 value); -s32 camIsPosInScreenBox(coord3d *, f32, struct bbox2d *); - void bondviewTransformManyPosToViewMatrix(RenderPosView *arg0, s32 arg1); s32 sub_GAME_7F078474(void); s32 get_BONDdata_field_10E0(void); @@ -2747,18 +2815,17 @@ void hudmsgTopShow(char* string); void SurroundWithExplosions(int delay); s32 check_watch_page_transistion_running(void); f32 bondviewWatchAnimationRelated(void); -struct coord3d *get_BONDdata_field408(void); +struct coord3d *getCurrentPlayerPrevPos(void); struct PropRecord *get_ptr_for_players_tank(void); s32 bondviewGetRandomSpawnPadIndex(void); void change_player_pos_to_target(struct collision434* arg0, struct coord3d *arg1, struct StandTile *arg2); void sub_GAME_7F089718(f32); void bondviewResetUpperTextDisplay(void); Mtxf *currentPlayerGetProjectionMatrixF(void); -int redirect_get_BONDdata_autoaim_x(void); -int redirect_get_BONDdata_autoaim_y(void); void transform3Dto2DCoords(coord3d *in, coord2d *out); -void maybe_solo_intro_camera_handler(void); -s32 get_BONDdata_is_aiming(void); +void bondviewRemovePlayerBody(void); void currentPlayerAdjustFade(f32 maxfadetime, s32 r, s32 g, s32 b, f32 frac); +void bondviewSelectCuff(Model *model, ModelFileHeader *header, s32 switchindex); +void sub_GAME_7F08976C(f32 param_1); #endif diff --git a/src/game/bondview_r.c b/src/game/bondview_r.c index 0c86fbb5..48cd0243 100644 --- a/src/game/bondview_r.c +++ b/src/game/bondview_r.c @@ -133,7 +133,7 @@ void bondviewLoadSetupIntroSection(void) g_ForceBondMoveOffset.f[2] = FLOAT_INIT; g_SurroundBondWithExplosionsFlag = 0; startpadcount = 0; - in_tank_flag = 0; + g_PlayerIsInTank = 0; g_WorldTankProp = 0; g_PlayerTankProp = NULL; g_PlayerTankYOffset = FLOAT_INIT; @@ -152,7 +152,7 @@ void bondviewLoadSetupIntroSection(void) g_TankTurretTurn = FLOAT_INIT; g_ExplodeTankOnDeathFlag = 0; is_timer_active = 1; - g_PlayerInvincible = 0; + g_PlayerInvincible = FALSE; g_CameraMode = 0; g_CameraAfterCinema = 0; camera_fade_active = 0; @@ -395,7 +395,7 @@ void bondviewLoadSetupIntroSection(void) start_stan = g_Startpad[rand_pad_index]->stan; stan_height = bondviewYPositionRelated(start_stan, start_pos.f[0], start_pos.f[2]); - start_pos.f[1] = g_CurrentPlayer->field_29BC + stan_height; + start_pos.f[1] = g_CurrentPlayer->eyeheight + stan_height; g_CurrentPlayer->field_70 = stan_height; start_look_angle = M_TAU_F - atan2f(g_Startpad[rand_pad_index]->look.f[0], g_Startpad[rand_pad_index]->look.f[2]); } @@ -403,7 +403,7 @@ void bondviewLoadSetupIntroSection(void) { start_stan = sub_GAME_7F0AFB78(&start_pos.f[0], &start_pos.f[1], &start_pos.f[2], 30.0f); stan_height = bondviewYPositionRelated(start_stan, start_pos.f[0], start_pos.f[2]); - start_pos.f[1] = g_CurrentPlayer->field_29BC + stan_height; + start_pos.f[1] = g_CurrentPlayer->eyeheight + stan_height; g_CurrentPlayer->field_70 = stan_height; } diff --git a/src/game/cheat.c b/src/game/cheat.c index 3694a558..6b14d675 100644 --- a/src/game/cheat.c +++ b/src/game/cheat.c @@ -1157,9 +1157,9 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_19_TINYBONDON_LF))); g_playerPerm->player_perspective_height = 0.5f; - if (g_CurrentPlayer->ptr_char_objectinstance != NULL) + if (g_CurrentPlayer->bodyModel != NULL) { - modelSetScale((struct Model *)g_CurrentPlayer->ptr_char_objectinstance, ((struct Model *)g_CurrentPlayer->ptr_char_objectinstance)->scale * 0.5f); + modelSetScale((struct Model *)g_CurrentPlayer->bodyModel, ((struct Model *)g_CurrentPlayer->bodyModel)->scale * 0.5f); } return; } @@ -1509,9 +1509,9 @@ void cheatButtonHandleCheatsTurnedOff(CHEAT_ID cheat_id) { HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_24_TINYBONDOFF_LF))); g_playerPerm->player_perspective_height = 1.0f; - if (g_CurrentPlayer->ptr_char_objectinstance) + if (g_CurrentPlayer->bodyModel) { - modelSetScale(g_CurrentPlayer->ptr_char_objectinstance, 2.0f * ((struct Model *)g_CurrentPlayer->ptr_char_objectinstance)->scale); + modelSetScale(g_CurrentPlayer->bodyModel, 2.0f * ((struct Model *)g_CurrentPlayer->bodyModel)->scale); } return; } @@ -1714,7 +1714,7 @@ void cheatButtonSetDkMode(CHEAT_ID cheat_id) modelSetScale(model, model->scale * scale); } #else - if (guard->model && not_in_us_7F0209EC(guard->bodynum, guard->headnum)) + if (guard->model && chrCanUseDKModeScaling(guard->bodynum, guard->headnum)) { model = (Model*)guard->model; modelSetScale(model, model->scale * scale); diff --git a/src/game/chr.c b/src/game/chr.c index 7e174d85..50544ece 100644 --- a/src/game/chr.c +++ b/src/game/chr.c @@ -6,28 +6,47 @@ #include #include #include +#include "bondaicommands.h" #include "bg.h" #include "cheat.h" #include "chr.h" #include "chrai.h" #include "chraction.h" #include "chrobjdata.h" +#include "debugmenu_handler.h" +#include "dyn.h" +#include "glass.h" +#include "file2.h" #include "propobj.h" #include "explosion.h" #include "file.h" #include "gun.h" #include "initanitable.h" +#include "joy.h" #include "lv.h" #include "language.h" +#include "matrixmath.h" #include "objecthandler.h" #include "player.h" +#include "propobj.h" #include "stan.h" #include "model.h" +#include "tex.h" + +#ifdef VERSION_EU +#define GROUND_SMOOTH_FACTOR 0.118799984f /* 0x3DF34D68 (PAL-scaled 0.1) */ +#define FALLSPEED_DECAY 0.8812f /* 0x3F619653 (PAL-scaled 0.9) */ +#else +#define GROUND_SMOOTH_FACTOR 0.100000024f /* 0x3DCCCCD0 */ +#define FALLSPEED_DECAY 0.9f /* 0x3F666666 */ +#endif // forward declarations void chrUpdateAimProperties( ChrRecord *arg0); -void chrPositionRelated7F020E40( ChrRecord *chr, s32 arg1); +void chrUpdateAnim( ChrRecord *chr, s32 tickamount); +void sub_GAME_7F057D44(f32 *arg0, f32 *arg1, f32 arg2); +f32 get_007_health_mod(void); // end forward declarations @@ -42,38 +61,42 @@ s32 g_AnimationTablePointerCountRelated = 0; s32 D_8002C90C = 0; s32 D_8002C910 = 0; -//D:8002C914 -struct animation_something D_8002C914[] = { - {0 , 0, 0, 0, 0, 0, 0, NULL, 0, NULL, 0}, - {1 , 1, 0, 17.0, 3, 0, 34.0, D_8002CE54, 0, D_8002DF10, 0}, - {2 , 1, 0, 17.0, 3, 0, 39.0, D_8002CEE0, 0, D_8002DF64, 0}, - {3 , 1, 0, 21.0, 3, 0, 43.0, D_8002CF6C, 0, D_8002DFB8, 0}, - {4 , 1, 0, 17.0, 3, 0, 34.0, D_8002D014, 0, D_8002E028, 0}, - {5 , 1, 0, 17.0, 3, 0, 39.0, D_8002D0A0, 0, D_8002E07C, 0}, - {6 , 1, 0, 21.0, 3, 0, 43.0, D_8002D12C, 0, D_8002E0D0, 0}, - {7 , 1, 0, 21.0, 3, 0, 52.0, D_8002D1D4, 0, D_8002E140, 0}, - {8 , 1, 0, 21.0, 3, 0, 43.0, D_8002D3B0, 0, D_8002E23C, 0}, - {9 , 1, 0, 17.0, 3, 0, 34.0, D_8002D6DC, 0, D_8002E300, 0}, // previously D_8002CAA0 = &D_8002C914 + (0x2c * 9) - {0xA , 1, 0, 17.0, 3, 0, 43.0, D_8002D768, 0, D_8002E354, 0}, // previously D_8002CACC - {0xB , 1, 0, 21.0, 3, 0, 52.0, D_8002D7F4, 0, D_8002E3A8, 0}, - {0xC , 1, 0, 17.0, 3, 0, 34.0, D_8002D880, 0, D_8002E418, 0}, // previously D_8002CB24 - {0xD , 1, 0, 17.0, 3, 0, 43.0, D_8002D90C, 0, D_8002E46C, 0}, // previously D_8002CB50 - {0xE , 1, 0, 21.0, 3, 0, 52.0, D_8002D998, 0, D_8002E4C0, 0}, - {0xF , 1, 0, 26.0, 3, 0, 60.0, D_8002DA24, 0, D_8002E530, 0}, - {0x64 , 1, 0, 26.0, 0, 0, 0.0, D_8002DCE0, 0, D_8002E5BC, 0}, - {0x6E , 1, 0, 21.0, 0, 0, 0.0, NULL, 0, NULL, 0}, - {0xFFFFFFFF, 0, 0, 0.0, 0, 0, 0.0, NULL, 0, NULL, 0}, +/* + * D:8002C914 + * Per-body-part hit reaction table, indexed by HITTARGET. + * Legend: iN/iSz = impact puff count/size, bN/bSz = back puff count/size, + * u8/u14 = unused, dN/fN = death/flinch anim counts (filled at init by initWeaponAnimGroups). + */ +/* part, iN, u8, iSz, bN, u14, bSz, deathAnims, dN, flinchAnims, fN */ +struct ChrHitReaction g_HitReactionTable[] = { +/* HIT_NULL_PART */ {0 , 0, 0, 0, 0, 0, 0, NULL, 0, NULL, 0}, +/* HIT_LEFT_FOOT */ {1 , 1, 0, 17.0, 3, 0, 34.0, death_left_foot, 0, flinch_left_foot, 0}, +/* HIT_LEFT_LEG */ {2 , 1, 0, 17.0, 3, 0, 39.0, death_left_leg, 0, flinch_left_leg, 0}, +/* HIT_LEFT_THIGH */ {3 , 1, 0, 21.0, 3, 0, 43.0, death_left_thigh, 0, flinch_left_thigh, 0}, +/* HIT_RIGHT_FOOT */ {4 , 1, 0, 17.0, 3, 0, 34.0, death_right_foot, 0, flinch_right_foot, 0}, +/* HIT_RIGHT_LEG */ {5 , 1, 0, 17.0, 3, 0, 39.0, death_right_leg, 0, flinch_right_leg, 0}, +/* HIT_RIGHT_THIGH */ {6 , 1, 0, 21.0, 3, 0, 43.0, death_right_thigh, 0, flinch_right_thigh, 0}, +/* HIT_PELVIS */ {7 , 1, 0, 21.0, 3, 0, 52.0, death_pelvis, 0, flinch_pelvis, 0}, +/* HIT_HEAD */ {8 , 1, 0, 21.0, 3, 0, 43.0, death_head, 0, flinch_head, 0}, +/* HIT_LEFT_HAND */ {9 , 1, 0, 17.0, 3, 0, 34.0, death_left_hand, 0, flinch_left_hand, 0}, +/* HIT_LEFT_ARM */ {0xA , 1, 0, 17.0, 3, 0, 43.0, death_left_arm, 0, flinch_left_arm, 0}, +/* HIT_LEFT_SHOULDER */ {0xB , 1, 0, 21.0, 3, 0, 52.0, death_left_shoulder, 0, flinch_left_shoulder, 0}, +/* HIT_RIGHT_HAND */ {0xC , 1, 0, 17.0, 3, 0, 34.0, death_right_hand, 0, flinch_right_hand, 0}, +/* HIT_RIGHT_ARM */ {0xD , 1, 0, 17.0, 3, 0, 43.0, death_right_arm, 0, flinch_right_arm, 0}, +/* HIT_RIGHT_SHOULDER */ {0xE , 1, 0, 21.0, 3, 0, 52.0, death_right_shoulder, 0, flinch_right_shoulder, 0}, +/* HIT_CHEST */ {0xF , 1, 0, 26.0, 3, 0, 60.0, death_chest, 0, flinch_chest, 0}, +/* HIT_GUN */ {0x64 , 1, 0, 26.0, 0, 0, 0.0, death_gun, 0, flinch_gun, 0}, +/* HIT_HAT */ {0x6E , 1, 0, 21.0, 0, 0, 0.0, NULL, 0, NULL, 0}, +/* terminator */ {0xFFFFFFFF , 0, 0, 0.0, 0, 0, 0.0, NULL, 0, NULL, 0}, }; - - - -s32 D_8002CC58 = 0; +s32 D_8002CC58 = 0; // Set to 0 but otherwise never used. s32 show_patrols_flag = FALSE; s32 player1_guardID = 5000; - ChrRecord *g_ChrSlots = 0; +ChrRecord *g_ChrSlots = 0; s32 g_NumChrSlots = 0; - ModelRenderData D_8002CC6C = {NULL, + +ModelRenderData D_8002CC6C = {NULL, TRUE, 0x00000003, NULL, @@ -89,17 +112,16 @@ s32 g_NumChrSlots = 0; {0, 0, 0, 0}, {0, 0, 0, 0}, CULLMODE_BOTH}; -s32 D_8002CCAC = 0; -s32 D_8002CCB0 = 0; -s32 D_8002CCB4 = 0; - rgba_u8 gBloodColour = { 0x5a, 0, 0, 0}; +coord3d D_8002CCAC = {0, 0, 0}; + +rgba_u8 gBloodColour = { 0x5a, 0, 0, 0}; /** * Address 0x8002CCBC. */ -ModelRenderData D_8002CCBC = {NULL, +ModelRenderData D_8002CCBC = {NULL, TRUE, 0x00000003, NULL, @@ -115,8 +137,8 @@ ModelRenderData D_8002CCBC = {NULL, {0, 0, 0, 0}, {0, 0, 0, 0}, CULLMODE_BOTH}; -//s32 D_8002CCF8 = 0; -s32 D_8002CCFC = 0; + +s32 D_8002CCFC = 0; // Unused. u32 num_bodies = 0; u32 num_male_heads = 0; u32 num_female_heads = 0; @@ -183,7 +205,7 @@ f32 g_AiReactionSpeed = 1.0f; */ s32 g_SeenBondRecentlyGuardCount = 0; -struct struck_animation_table D_8002CE54[] = { +struct StruckAnim death_left_foot[] = { { PTR_ANIM_death_backward_spin_face_down_left, 0, -1.0, 0.5, 0, 27.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_left, 0, -1.0, 0.5, 0, 26.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_right, 1, -1.0, 0.5, 0, 25.0, -1.0 }, @@ -191,7 +213,7 @@ struct struck_animation_table D_8002CE54[] = { {0, 0, 0.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002CEE0[] = { +struct StruckAnim death_left_leg[] = { { PTR_ANIM_death_backward_spin_face_down_left, 0, -1.0, 0.5, 0, 27.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_left, 0, -1.0, 0.5, 0, 26.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_right, 1, -1.0, 0.5, 0, 25.0, -1.0 }, @@ -199,7 +221,7 @@ struct struck_animation_table D_8002CEE0[] = { {0, 0, 0.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002CF6C[] = { +struct StruckAnim death_left_thigh[] = { { PTR_ANIM_death_backward_spin_face_down_left, 0, -1.0, 0.5, 1, 27.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_left, 0, -1.0, 0.5, 1, 26.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_right, 1, -1.0, 0.5, 1, 25.0, -1.0 }, @@ -208,7 +230,7 @@ struct struck_animation_table D_8002CF6C[] = { {0, 0, 0.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002D014[] = { +struct StruckAnim death_right_foot[] = { { PTR_ANIM_death_backward_spin_face_down_right, 0, -1.0, 0.5, 0, 25.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_right, 0, -1.0, 0.5, 0, 23.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_left, 1, -1.0, 0.5, 0, 27.0, -1.0 }, @@ -216,7 +238,7 @@ struct struck_animation_table D_8002D014[] = { {0, 0, 0.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002D0A0[] = { +struct StruckAnim death_right_leg[] = { { PTR_ANIM_death_backward_spin_face_down_right, 0, -1.0, 0.5, 0, 25.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_right, 0, -1.0, 0.5, 0, 23.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_left, 1, -1.0, 0.5, 0, 27.0, -1.0 }, @@ -224,7 +246,7 @@ struct struck_animation_table D_8002D0A0[] = { {0, 0, 0.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002D12C[] = { +struct StruckAnim death_right_thigh[] = { { PTR_ANIM_death_backward_spin_face_down_right, 0, -1.0, 0.5, 1, 25.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_right, 0, -1.0, 0.5, 1, 23.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_left, 1, -1.0, 0.5, 1, 27.0, -1.0 }, @@ -233,7 +255,7 @@ struct struck_animation_table D_8002D12C[] = { {0, 0, 0.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002D1D4[] = { +struct StruckAnim death_pelvis[] = { { PTR_ANIM_death_forward_face_down, 0, -1.0, 0.5, 0, 55.0, 39.0 }, { PTR_ANIM_death_forward_face_down, 1, -1.0, 0.5, 0, 55.0, 39.0 }, { PTR_ANIM_death_forward_spin_face_up, 0, -1.0, 0.5, 0, 36.0, -1.0 }, @@ -253,7 +275,7 @@ struct struck_animation_table D_8002D1D4[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002D3B0[] = { +struct StruckAnim death_head[] = { { PTR_ANIM_death_forward_face_down, 0, -1.0, 0.5, 0, 55.0, 39.0 }, { PTR_ANIM_death_forward_face_down, 1, -1.0, 0.5, 0, 55.0, 39.0 }, { PTR_ANIM_death_forward_spin_face_up, 0, -1.0, 0.5, 0, 36.0, -1.0 }, @@ -285,7 +307,7 @@ struct struck_animation_table D_8002D3B0[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002D6DC[] = { +struct StruckAnim death_left_hand[] = { { PTR_ANIM_death_backward_spin_face_down_left, 0, -1.0, 0.5, 0, 27.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_left, 0, -1.0, 0.5, 0, 26.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_right, 1, -1.0, 0.5, 0, 25.0, -1.0 }, @@ -293,7 +315,7 @@ struct struck_animation_table D_8002D6DC[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002D768[] = { +struct StruckAnim death_left_arm[] = { { PTR_ANIM_death_backward_spin_face_down_left, 0, -1.0, 0.5, 0, 27.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_left, 0, -1.0, 0.5, 0, 26.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_right, 1, -1.0, 0.5, 0, 25.0, -1.0 }, @@ -301,7 +323,7 @@ struct struck_animation_table D_8002D768[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002D7F4[] = { +struct StruckAnim death_left_shoulder[] = { { PTR_ANIM_death_backward_spin_face_down_left, 0, -1.0, 0.5, 1, 27.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_left, 0, -1.0, 0.5, 1, 26.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_right, 1, -1.0, 0.5, 1, 25.0, -1.0 }, @@ -309,7 +331,7 @@ struct struck_animation_table D_8002D7F4[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002D880[] = { +struct StruckAnim death_right_hand[] = { { PTR_ANIM_death_backward_spin_face_down_right, 0, -1.0, 0.5, 0, 25.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_right, 0, -1.0, 0.5, 0, 23.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_left, 1, -1.0, 0.5, 0, 27.0, -1.0 }, @@ -317,7 +339,7 @@ struct struck_animation_table D_8002D880[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002D90C[] = { +struct StruckAnim death_right_arm[] = { { PTR_ANIM_death_backward_spin_face_down_right, 0, -1.0, 0.5, 0, 25.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_right, 0, -1.0, 0.5, 0, 23.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_left, 1, -1.0, 0.5, 0, 27.0, -1.0 }, @@ -325,7 +347,7 @@ struct struck_animation_table D_8002D90C[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002D998[] = { +struct StruckAnim death_right_shoulder[] = { { PTR_ANIM_death_backward_spin_face_down_right, 0, -1.0, 0.5, 1, 25.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_up_right, 0, -1.0, 0.5, 1, 23.0, -1.0 }, { PTR_ANIM_death_backward_spin_face_down_left, 1, -1.0, 0.5, 1, 27.0, -1.0 }, @@ -333,7 +355,7 @@ struct struck_animation_table D_8002D998[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002DA24[] = { +struct StruckAnim death_chest[] = { { PTR_ANIM_death_forward_face_down, 0, -1.0, 0.5, 0, 55.0, 39.0 }, { PTR_ANIM_death_forward_face_down, 1, -1.0, 0.5, 0, 55.0, 39.0 }, { PTR_ANIM_death_forward_spin_face_up, 0, -1.0, 0.5, 0, 36.0, -1.0 }, @@ -361,7 +383,7 @@ struct struck_animation_table D_8002DA24[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002DCE0[] = { +struct StruckAnim death_gun[] = { { PTR_ANIM_death_forward_face_down, 0, -1.0, 0.5, 0, 55.0, 39.0 }, { PTR_ANIM_death_forward_face_down, 1, -1.0, 0.5, 0, 55.0, 39.0 }, { PTR_ANIM_death_forward_spin_face_up, 0, -1.0, 0.5, 0, 36.0, -1.0 }, @@ -381,51 +403,51 @@ struct struck_animation_table D_8002DCE0[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002DEBC[] = { +struct StruckAnim death_stagger[] = { { PTR_ANIM_death_stagger_back_to_wall, 0, -1.0, 0.5, 0, 67.0, 54.0 }, { PTR_ANIM_death_stagger_back_to_wall, 1, -1.0, 0.5, 0, 67.0, 54.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002DF10[] = { +struct StruckAnim flinch_left_foot[] = { { PTR_ANIM_hit_left_leg, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_right_leg, 1, -1.0, 0.5, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002DF64[] = { +struct StruckAnim flinch_left_leg[] = { { PTR_ANIM_hit_left_leg, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_right_leg, 1, -1.0, 0.5, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002DFB8[] = { +struct StruckAnim flinch_left_thigh[] = { { PTR_ANIM_hit_left_leg, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_right_leg, 1, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_death_left_leg, 1, 20.0, 0.40000001, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E028[] = { +struct StruckAnim flinch_right_foot[] = { { PTR_ANIM_hit_right_leg, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_left_leg, 1, -1.0, 0.5, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E07C[] = { +struct StruckAnim flinch_right_leg[] = { { PTR_ANIM_hit_right_leg, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_left_leg, 1, -1.0, 0.5, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E0D0[] = { +struct StruckAnim flinch_right_thigh[] = { { PTR_ANIM_hit_right_leg, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_left_leg, 1, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_death_left_leg, 0, 20.0, 0.40000001, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E140[] = { +struct StruckAnim flinch_pelvis[] = { { PTR_ANIM_death_genitalia, 0, 20.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_death_genitalia, 1, 30.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_death_forward_face_down_soft, 0, 20.0, 0.5, 0, -1.0, -1.0 }, @@ -437,7 +459,7 @@ struct struck_animation_table D_8002E140[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E23C[] = { +struct StruckAnim flinch_head[] = { { PTR_ANIM_death_neck, 0, 15.0, 0.5, 0, 87.0, 203.0 }, { PTR_ANIM_death_neck, 1, 15.0, 0.5, 0, 87.0, 203.0 }, { PTR_ANIM_death_forward_face_down_soft, 0, 20.0, 0.5, 0, -1.0, -1.0 }, @@ -447,45 +469,45 @@ struct struck_animation_table D_8002E23C[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E300[] = { +struct StruckAnim flinch_left_hand[] = { { PTR_ANIM_hit_left_hand, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_right_hand, 1, -1.0, 0.5, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E354[] = { +struct StruckAnim flinch_left_arm[] = { { PTR_ANIM_hit_left_arm, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_right_arm, 1, -1.0, 0.5, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E3A8[] = { +struct StruckAnim flinch_left_shoulder[] = { { PTR_ANIM_hit_left_shoulder, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_right_shoulder, 1, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_death_forward_face_down_soft, 0, 20.0, 0.5, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E418[] = { +struct StruckAnim flinch_right_hand[] = { { PTR_ANIM_hit_right_hand, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_left_hand, 1, -1.0, 0.5, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E46C[] = { +struct StruckAnim flinch_right_arm[] = { { PTR_ANIM_hit_right_arm, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_left_arm, 1, -1.0, 0.5, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E4C0[] = { +struct StruckAnim flinch_right_shoulder[] = { { PTR_ANIM_hit_right_shoulder, 0, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_hit_left_shoulder, 1, -1.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_death_forward_face_down_soft, 1, 20.0, 0.5, 0, -1.0, -1.0 }, {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E530[] = { +struct StruckAnim flinch_chest[] = { { PTR_ANIM_death_forward_face_down_soft, 0, 20.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_death_forward_face_down_soft, 1, 20.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_death_forward_face_down, 0, 15.0, 0.5, 0, -1.0, -1.0 }, @@ -493,7 +515,7 @@ struct struck_animation_table D_8002E530[] = { {0, 0, -1.0, 0.5, 0, -1.0, -1.0} }; -struct struck_animation_table D_8002E5BC[] = { +struct StruckAnim flinch_gun[] = { { PTR_ANIM_death_forward_face_down_soft, 0, 20.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_death_forward_face_down_soft, 1, 20.0, 0.5, 0, -1.0, -1.0 }, { PTR_ANIM_death_forward_face_down, 0, 15.0, 0.5, 0, -1.0, -1.0 }, @@ -1120,54 +1142,30 @@ f32 D_800309A0 = 0; */ f32 D_800309A4 = 0; - point2d D_800309A8 = {0, 0}; +point2d D_800309A8 = {0, 0}; //s32 D_800309AC = 0; - point2d D_800309B0 = {0, 0}; +point2d D_800309B0 = {0, 0}; //s32 D_800309B4 = 0; /** * Default firing state, left and right hand. * Address 0x800309B8. */ - point2d D_800309B8 = {0, 0}; +point2d D_800309B8 = {0, 0}; /** * Default firing state when crouched, left and right hand. * Address 0x800309C0. */ - point2d D_800309C0 = {0, 0}; - - point2d D_800309C8 = {0, 0}; - point2d D_800309D0 = {0, 0}; - point2d D_800309D8 = {0, 0}; - - point2d D_800309E0 = {0, 0}; - - point2d D_800309E8 = {0, 0}; - - point2d D_800309F0 = {0, 0}; - -s16 male_guard_yelps[] = { - 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, - 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0 -}; - -s16 female_guard_yelps[] = { - 0xD, 0xE, 0xF, 0 -}; - -s32 male_guard_yelp_counter = 0; -s32 female_guard_yelp_counter = 0; - -s16 metal_ricochet_SFX[3] = {0xEF, 0x48, 0x49}; - - -// // probably better described as vec3d than coordinates. -coord3d D_80030A44 = {0,0,0}; +point2d D_800309C0 = {0, 0}; +point2d D_800309C8 = {0, 0}; +point2d D_800309D0 = {0, 0}; +point2d D_800309D8 = {0, 0}; +point2d D_800309E0 = {0, 0}; +point2d D_800309E8 = {0, 0}; s32 get_numguards(void) @@ -1175,24 +1173,25 @@ s32 get_numguards(void) return g_NumChrSlots; } + void get_ptr_allocated_block_for_vertices(int param_1) { dynAllocate(param_1 << 4); } + void set_show_patrols_flag(s32 flag) { show_patrols_flag = flag; } + s32 get_show_patrols_flag(void) { return show_patrols_flag; } - - /** * Unreferenced. * @@ -1214,7 +1213,6 @@ f32 chrUnusedYPositionRelated(PropRecord *arg0) } - void chrSetMoving(ChrRecord *self, bool unset) { if (unset) @@ -1229,1331 +1227,323 @@ void chrSetMoving(ChrRecord *self, bool unset) } -#ifdef NONMATCHING -void sub_GAME_7F01F614(void) { +StandTile *sub_GAME_7F01F614(ChrRecord *guard, StandTile *stan, coord3d *src, coord3d *dst, s32 updateLastMoveOk) +{ + StandTile *ret; + StandTile *tile; + f32 height; + f32 always_20; + f32 width; + coord3d edgeA; + coord3d edgeB; + coord3d delta; + coord3d dir; + f32 tmp; + s32 hasprojection; + coord3d newpos; + ret = NULL; + tile = stan; + + chrGetChrWidthHeight(guard->prop, &width, &height, &always_20); + chrSetMoving(guard, 0); + stanResetHits(); + + if (stanTestLineUnobstructed(&tile, src->x, src->z, dst->x, dst->z, 0x1f, height, always_20, 0.0f, 1.0f)) + { + if (stanTestVolume(&tile, dst->x, dst->z, width, 0x1f, height, always_20) < 0) + { + if (updateLastMoveOk) + { + if (&newpos); + guard->invalidmove = 0; + guard->lastmoveok60 = g_GlobalTimer; + } + + ret = tile; + goto done; + } + } + + hasprojection = 0; + + if (getCollisionEdge_maybe(&edgeA, &edgeB)) + { + delta.x = dst->x - src->x; + delta.z = dst->z - src->z; + + if ((edgeA.x != edgeB.x) || (edgeA.z != edgeB.z)) + { + hasprojection = 1; + + dir.x = edgeB.x - edgeA.x; + dir.z = edgeB.z - edgeA.z; + + tmp = 1.0f / sqrtf((dir.z * dir.z) + (dir.x * dir.x)); + + dir.x *= tmp; + dir.z *= tmp; + + tmp = (dir.z * delta.z) + (delta.x * dir.x); + + newpos.x = (dir.x * tmp) + src->x; + newpos.z = (dir.z * tmp) + src->z; + + if (&dir); + + tile = stan; + } + + if (hasprojection) + { + if (stanTestLineUnobstructed(&tile, src->x, src->z, newpos.x, newpos.z, 0x1f, height, always_20, 0.0f, 1.0f)) + { + if (stanTestVolume(&tile, newpos.x, newpos.z, width, 0x1f, height, always_20) < 0) + { + dst->x = newpos.x; + dst->z = newpos.z; + guard->invalidmove = 2; + ret = tile; + goto done; + } + } + } + + tmp = width * width; + + dir.x = edgeA.x - dst->x; + dir.z = edgeA.z - dst->z; + + if (((dir.z * dir.z) + (dir.x * dir.x)) <= tmp) + { + if ((edgeA.x == src->x) && (edgeA.z == src->z)) + { + goto done; + } + + dir.x = -(edgeA.z - src->z); + dir.z = edgeA.x - src->x; + + tmp = 1.0f / sqrtf((dir.z * dir.z) + (dir.x * dir.x)); + + dir.x *= tmp; + dir.z *= tmp; + + tmp = (dir.z * delta.z) + (delta.x * dir.x); + + newpos.x = (dir.x * tmp) + src->x; + newpos.z = (dir.z * tmp) + src->z; + + tile = stan; + + if (stanTestLineUnobstructed(&tile, src->x, src->z, newpos.x, newpos.z, 0x1f, height, always_20, 0.0f, 1.0f)) + { + if (stanTestVolume(&tile, newpos.x, newpos.z, width, 0x1f, height, always_20) < 0) + { + dst->x = newpos.x; + dst->z = newpos.z; + guard->invalidmove = 2; + ret = tile; + goto done; + } + } + } + else + { + dir.x = edgeB.x - dst->x; + dir.z = edgeB.z - dst->z; + + if (((dir.z * dir.z) + (dir.x * dir.x)) <= tmp) + { + if ((edgeB.x == src->x) && (edgeB.z == src->z)) + { + goto done; + } + + dir.x = -(edgeB.z - src->z); + dir.z = edgeB.x - src->x; + + tmp = 1.0f / sqrtf((dir.z * dir.z) + (dir.x * dir.x)); + + dir.x *= tmp; + dir.z *= tmp; + + tmp = (dir.z * delta.z) + (delta.x * dir.x); + + newpos.x = (dir.x * tmp) + src->x; + newpos.z = (dir.z * tmp) + src->z; + + tile = stan; + + if (stanTestLineUnobstructed(&tile, src->x, src->z, newpos.x, newpos.z, 0x1f, height, always_20, 0.0f, 1.0f)) + { + if (stanTestVolume(&tile, newpos.x, newpos.z, width, 0x1f, height, always_20) < 0) + { + dst->x = newpos.x; + dst->z = newpos.z; + guard->invalidmove = 2; + ret = tile; + } + } + } + } + } + +done: + chrSetMoving(guard, 1); + + if (ret == NULL) + { + guard->invalidmove = 1; + } + + return ret; } + + +s32 sub_GAME_7F01FC10(Model *model, coord3d *src, coord3d *dst, f32 *ground_y) +{ + ChrRecord *chr; + s32 moved; + f32 ground; + coord3d *groundpos; + f32 tmp; + s32 i; + StandTile *tile; + union ModelRwData *rwdata; + + chr = model->chr; + moved = 0; + ground = 0.0f; + groundpos = src; + + if (chr->prop->stan != NULL) + { + if ((chr->actiontype == ACT_DIE) && (chr->act_die.timeextra > ground)) + { +#ifdef BUGFIX_R1 + tmp = ((model->playspeed * g_JP_GlobalTimerDelta) * (chr->act_die.timeextra - chr->act_die.elapseextra)) / chr->act_die.timeextra; #else -GLOBAL_ASM( -.text -glabel sub_GAME_7F01F614 -/* 054144 7F01F614 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 054148 7F01F618 AFB10030 */ sw $s1, 0x30($sp) -/* 05414C 7F01F61C AFB0002C */ sw $s0, 0x2c($sp) -/* 054150 7F01F620 00C08025 */ move $s0, $a2 -/* 054154 7F01F624 00E08825 */ move $s1, $a3 -/* 054158 7F01F628 AFBF0034 */ sw $ra, 0x34($sp) -/* 05415C 7F01F62C AFA40098 */ sw $a0, 0x98($sp) -/* 054160 7F01F630 AFA5009C */ sw $a1, 0x9c($sp) -/* 054164 7F01F634 AFA00094 */ sw $zero, 0x94($sp) -/* 054168 7F01F638 AFA50090 */ sw $a1, 0x90($sp) -/* 05416C 7F01F63C 8C840018 */ lw $a0, 0x18($a0) -/* 054170 7F01F640 27A50084 */ addiu $a1, $sp, 0x84 -/* 054174 7F01F644 27A70088 */ addiu $a3, $sp, 0x88 -/* 054178 7F01F648 0FC08C58 */ jal chrGetChrWidthHeight -/* 05417C 7F01F64C 27A6008C */ addiu $a2, $sp, 0x8c -/* 054180 7F01F650 8FA40098 */ lw $a0, 0x98($sp) -/* 054184 7F01F654 0FC07D7A */ jal chrSetMoving -/* 054188 7F01F658 00002825 */ move $a1, $zero -/* 05418C 7F01F65C 0FC2C731 */ jal sub_GAME_7F0B1CC4 -/* 054190 7F01F660 00000000 */ nop -/* 054194 7F01F664 C6240008 */ lwc1 $f4, 8($s1) -/* 054198 7F01F668 8E050000 */ lw $a1, ($s0) -/* 05419C 7F01F66C 8E060008 */ lw $a2, 8($s0) -/* 0541A0 7F01F670 8E270000 */ lw $a3, ($s1) -/* 0541A4 7F01F674 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0541A8 7F01F678 44818000 */ mtc1 $at, $f16 -/* 0541AC 7F01F67C C7A6008C */ lwc1 $f6, 0x8c($sp) -/* 0541B0 7F01F680 C7A80088 */ lwc1 $f8, 0x88($sp) -/* 0541B4 7F01F684 44805000 */ mtc1 $zero, $f10 -/* 0541B8 7F01F688 2418001F */ li $t8, 31 -/* 0541BC 7F01F68C AFB80014 */ sw $t8, 0x14($sp) -/* 0541C0 7F01F690 27A40090 */ addiu $a0, $sp, 0x90 -/* 0541C4 7F01F694 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0541C8 7F01F698 E7A60018 */ swc1 $f6, 0x18($sp) -/* 0541CC 7F01F69C E7B00024 */ swc1 $f16, 0x24($sp) -/* 0541D0 7F01F6A0 E7A8001C */ swc1 $f8, 0x1c($sp) -/* 0541D4 7F01F6A4 0FC2C389 */ jal stanTestLineUnobstructed -/* 0541D8 7F01F6A8 E7AA0020 */ swc1 $f10, 0x20($sp) -/* 0541DC 7F01F6AC 10400016 */ beqz $v0, .L7F01F708 -/* 0541E0 7F01F6B0 27A40090 */ addiu $a0, $sp, 0x90 -/* 0541E4 7F01F6B4 C7B2008C */ lwc1 $f18, 0x8c($sp) -/* 0541E8 7F01F6B8 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 0541EC 7F01F6BC 8E250000 */ lw $a1, ($s1) -/* 0541F0 7F01F6C0 8E260008 */ lw $a2, 8($s1) -/* 0541F4 7F01F6C4 2419001F */ li $t9, 31 -/* 0541F8 7F01F6C8 AFB90010 */ sw $t9, 0x10($sp) -/* 0541FC 7F01F6CC 8FA70084 */ lw $a3, 0x84($sp) -/* 054200 7F01F6D0 E7B20014 */ swc1 $f18, 0x14($sp) -/* 054204 7F01F6D4 0FC2C62E */ jal stanTestVolume -/* 054208 7F01F6D8 E7A40018 */ swc1 $f4, 0x18($sp) -/* 05420C 7F01F6DC 0441000A */ bgez $v0, .L7F01F708 -/* 054210 7F01F6E0 8FA800A8 */ lw $t0, 0xa8($sp) -/* 054214 7F01F6E4 11000005 */ beqz $t0, .L7F01F6FC -/* 054218 7F01F6E8 8FA90098 */ lw $t1, 0x98($sp) -/* 05421C 7F01F6EC A1200009 */ sb $zero, 9($t1) -/* 054220 7F01F6F0 3C0A8005 */ lui $t2, %hi(g_GlobalTimer) -/* 054224 7F01F6F4 8D4A837C */ lw $t2, %lo(g_GlobalTimer)($t2) -/* 054228 7F01F6F8 AD2A00CC */ sw $t2, 0xcc($t1) -.L7F01F6FC: -/* 05422C 7F01F6FC 8FAB0090 */ lw $t3, 0x90($sp) -/* 054230 7F01F700 10000135 */ b .L7F01FBD8 -/* 054234 7F01F704 AFAB0094 */ sw $t3, 0x94($sp) -.L7F01F708: -/* 054238 7F01F708 AFA0004C */ sw $zero, 0x4c($sp) -/* 05423C 7F01F70C 27A40078 */ addiu $a0, $sp, 0x78 -/* 054240 7F01F710 0FC2CA2C */ jal getCollisionEdge_maybe -/* 054244 7F01F714 27A5006C */ addiu $a1, $sp, 0x6c -/* 054248 7F01F718 50400130 */ beql $v0, $zero, .L7F01FBDC -/* 05424C 7F01F71C 8FA40098 */ lw $a0, 0x98($sp) -/* 054250 7F01F720 C6260000 */ lwc1 $f6, ($s1) -/* 054254 7F01F724 C6080000 */ lwc1 $f8, ($s0) -/* 054258 7F01F728 46083281 */ sub.s $f10, $f6, $f8 -/* 05425C 7F01F72C C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 054260 7F01F730 C7A60078 */ lwc1 $f6, 0x78($sp) -/* 054264 7F01F734 E7AA0060 */ swc1 $f10, 0x60($sp) -/* 054268 7F01F738 C6120008 */ lwc1 $f18, 8($s0) -/* 05426C 7F01F73C C6300008 */ lwc1 $f16, 8($s1) -/* 054270 7F01F740 46083032 */ c.eq.s $f6, $f8 -/* 054274 7F01F744 C7AA0080 */ lwc1 $f10, 0x80($sp) -/* 054278 7F01F748 46128101 */ sub.s $f4, $f16, $f18 -/* 05427C 7F01F74C C7B00074 */ lwc1 $f16, 0x74($sp) -/* 054280 7F01F750 45000005 */ bc1f .L7F01F768 -/* 054284 7F01F754 E7A40068 */ swc1 $f4, 0x68($sp) -/* 054288 7F01F758 46105032 */ c.eq.s $f10, $f16 -/* 05428C 7F01F75C 00000000 */ nop -/* 054290 7F01F760 45030028 */ bc1tl .L7F01F804 -/* 054294 7F01F764 8FAE004C */ lw $t6, 0x4c($sp) -.L7F01F768: -/* 054298 7F01F768 C7A60074 */ lwc1 $f6, 0x74($sp) -/* 05429C 7F01F76C C7A80080 */ lwc1 $f8, 0x80($sp) -/* 0542A0 7F01F770 C7B2006C */ lwc1 $f18, 0x6c($sp) -/* 0542A4 7F01F774 C7A40078 */ lwc1 $f4, 0x78($sp) -/* 0542A8 7F01F778 46083081 */ sub.s $f2, $f6, $f8 -/* 0542AC 7F01F77C 240C0001 */ li $t4, 1 -/* 0542B0 7F01F780 AFAC004C */ sw $t4, 0x4c($sp) -/* 0542B4 7F01F784 46049001 */ sub.s $f0, $f18, $f4 -/* 0542B8 7F01F788 46021282 */ mul.s $f10, $f2, $f2 -/* 0542BC 7F01F78C E7A2005C */ swc1 $f2, 0x5c($sp) -/* 0542C0 7F01F790 46000402 */ mul.s $f16, $f0, $f0 -/* 0542C4 7F01F794 E7A00054 */ swc1 $f0, 0x54($sp) -/* 0542C8 7F01F798 0C007DF8 */ jal sqrtf -/* 0542CC 7F01F79C 46105300 */ add.s $f12, $f10, $f16 -/* 0542D0 7F01F7A0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0542D4 7F01F7A4 44819000 */ mtc1 $at, $f18 -/* 0542D8 7F01F7A8 C7A40054 */ lwc1 $f4, 0x54($sp) -/* 0542DC 7F01F7AC C7A8005C */ lwc1 $f8, 0x5c($sp) -/* 0542E0 7F01F7B0 46009083 */ div.s $f2, $f18, $f0 -/* 0542E4 7F01F7B4 C7B00068 */ lwc1 $f16, 0x68($sp) -/* 0542E8 7F01F7B8 8FAD009C */ lw $t5, 0x9c($sp) -/* 0542EC 7F01F7BC 46022182 */ mul.s $f6, $f4, $f2 -/* 0542F0 7F01F7C0 C7A40060 */ lwc1 $f4, 0x60($sp) -/* 0542F4 7F01F7C4 46024282 */ mul.s $f10, $f8, $f2 -/* 0542F8 7F01F7C8 E7A60054 */ swc1 $f6, 0x54($sp) -/* 0542FC 7F01F7CC 46105482 */ mul.s $f18, $f10, $f16 -/* 054300 7F01F7D0 E7AA005C */ swc1 $f10, 0x5c($sp) -/* 054304 7F01F7D4 46062202 */ mul.s $f8, $f4, $f6 -/* 054308 7F01F7D8 C6040000 */ lwc1 $f4, ($s0) -/* 05430C 7F01F7DC 46089300 */ add.s $f12, $f18, $f8 -/* 054310 7F01F7E0 460C3402 */ mul.s $f16, $f6, $f12 -/* 054314 7F01F7E4 46048480 */ add.s $f18, $f16, $f4 -/* 054318 7F01F7E8 460C5202 */ mul.s $f8, $f10, $f12 -/* 05431C 7F01F7EC E7B20040 */ swc1 $f18, 0x40($sp) -/* 054320 7F01F7F0 C6060008 */ lwc1 $f6, 8($s0) -/* 054324 7F01F7F4 AFAD0090 */ sw $t5, 0x90($sp) -/* 054328 7F01F7F8 46064400 */ add.s $f16, $f8, $f6 -/* 05432C 7F01F7FC E7B00048 */ swc1 $f16, 0x48($sp) -/* 054330 7F01F800 8FAE004C */ lw $t6, 0x4c($sp) -.L7F01F804: -/* 054334 7F01F804 27A40090 */ addiu $a0, $sp, 0x90 -/* 054338 7F01F808 8FA70040 */ lw $a3, 0x40($sp) -/* 05433C 7F01F80C 11C00027 */ beqz $t6, .L7F01F8AC -/* 054340 7F01F810 C7A40048 */ lwc1 $f4, 0x48($sp) -/* 054344 7F01F814 8E050000 */ lw $a1, ($s0) -/* 054348 7F01F818 8E060008 */ lw $a2, 8($s0) -/* 05434C 7F01F81C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 054350 7F01F820 44813000 */ mtc1 $at, $f6 -/* 054354 7F01F824 C7B2008C */ lwc1 $f18, 0x8c($sp) -/* 054358 7F01F828 C7AA0088 */ lwc1 $f10, 0x88($sp) -/* 05435C 7F01F82C 44804000 */ mtc1 $zero, $f8 -/* 054360 7F01F830 240F001F */ li $t7, 31 -/* 054364 7F01F834 AFAF0014 */ sw $t7, 0x14($sp) -/* 054368 7F01F838 E7A40010 */ swc1 $f4, 0x10($sp) -/* 05436C 7F01F83C E7B20018 */ swc1 $f18, 0x18($sp) -/* 054370 7F01F840 E7A60024 */ swc1 $f6, 0x24($sp) -/* 054374 7F01F844 E7AA001C */ swc1 $f10, 0x1c($sp) -/* 054378 7F01F848 0FC2C389 */ jal stanTestLineUnobstructed -/* 05437C 7F01F84C E7A80020 */ swc1 $f8, 0x20($sp) -/* 054380 7F01F850 10400016 */ beqz $v0, .L7F01F8AC -/* 054384 7F01F854 27A40090 */ addiu $a0, $sp, 0x90 -/* 054388 7F01F858 C7B0008C */ lwc1 $f16, 0x8c($sp) -/* 05438C 7F01F85C C7A40088 */ lwc1 $f4, 0x88($sp) -/* 054390 7F01F860 2418001F */ li $t8, 31 -/* 054394 7F01F864 AFB80010 */ sw $t8, 0x10($sp) -/* 054398 7F01F868 8FA50040 */ lw $a1, 0x40($sp) -/* 05439C 7F01F86C 8FA60048 */ lw $a2, 0x48($sp) -/* 0543A0 7F01F870 8FA70084 */ lw $a3, 0x84($sp) -/* 0543A4 7F01F874 E7B00014 */ swc1 $f16, 0x14($sp) -/* 0543A8 7F01F878 0FC2C62E */ jal stanTestVolume -/* 0543AC 7F01F87C E7A40018 */ swc1 $f4, 0x18($sp) -/* 0543B0 7F01F880 0441000A */ bgez $v0, .L7F01F8AC -/* 0543B4 7F01F884 C7B20040 */ lwc1 $f18, 0x40($sp) -/* 0543B8 7F01F888 E6320000 */ swc1 $f18, ($s1) -/* 0543BC 7F01F88C C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0543C0 7F01F890 24190002 */ li $t9, 2 -/* 0543C4 7F01F894 E62A0008 */ swc1 $f10, 8($s1) -/* 0543C8 7F01F898 8FA80098 */ lw $t0, 0x98($sp) -/* 0543CC 7F01F89C A1190009 */ sb $t9, 9($t0) -/* 0543D0 7F01F8A0 8FAA0090 */ lw $t2, 0x90($sp) -/* 0543D4 7F01F8A4 100000CC */ b .L7F01FBD8 -/* 0543D8 7F01F8A8 AFAA0094 */ sw $t2, 0x94($sp) -.L7F01F8AC: -/* 0543DC 7F01F8AC C7A80078 */ lwc1 $f8, 0x78($sp) -/* 0543E0 7F01F8B0 C6260000 */ lwc1 $f6, ($s1) -/* 0543E4 7F01F8B4 C7A40080 */ lwc1 $f4, 0x80($sp) -/* 0543E8 7F01F8B8 46064401 */ sub.s $f16, $f8, $f6 -/* 0543EC 7F01F8BC C7A60084 */ lwc1 $f6, 0x84($sp) -/* 0543F0 7F01F8C0 E7B00054 */ swc1 $f16, 0x54($sp) -/* 0543F4 7F01F8C4 C6320008 */ lwc1 $f18, 8($s1) -/* 0543F8 7F01F8C8 46063002 */ mul.s $f0, $f6, $f6 -/* 0543FC 7F01F8CC 46122281 */ sub.s $f10, $f4, $f18 -/* 054400 7F01F8D0 460A5482 */ mul.s $f18, $f10, $f10 -/* 054404 7F01F8D4 E7AA005C */ swc1 $f10, 0x5c($sp) -/* 054408 7F01F8D8 46108182 */ mul.s $f6, $f16, $f16 -/* 05440C 7F01F8DC C7B0006C */ lwc1 $f16, 0x6c($sp) -/* 054410 7F01F8E0 46069280 */ add.s $f10, $f18, $f6 -/* 054414 7F01F8E4 4600503E */ c.le.s $f10, $f0 -/* 054418 7F01F8E8 00000000 */ nop -/* 05441C 7F01F8EC 45020058 */ bc1fl .L7F01FA50 -/* 054420 7F01F8F0 C6260000 */ lwc1 $f6, ($s1) -/* 054424 7F01F8F4 C6100000 */ lwc1 $f16, ($s0) -/* 054428 7F01F8F8 C7A60080 */ lwc1 $f6, 0x80($sp) -/* 05442C 7F01F8FC 46104032 */ c.eq.s $f8, $f16 -/* 054430 7F01F900 00000000 */ nop -/* 054434 7F01F904 45020007 */ bc1fl .L7F01F924 -/* 054438 7F01F908 C60A0008 */ lwc1 $f10, 8($s0) -/* 05443C 7F01F90C C6120008 */ lwc1 $f18, 8($s0) -/* 054440 7F01F910 46122032 */ c.eq.s $f4, $f18 -/* 054444 7F01F914 00000000 */ nop -/* 054448 7F01F918 450300B0 */ bc1tl .L7F01FBDC -/* 05444C 7F01F91C 8FA40098 */ lw $a0, 0x98($sp) -/* 054450 7F01F920 C60A0008 */ lwc1 $f10, 8($s0) -.L7F01F924: -/* 054454 7F01F924 C7A40078 */ lwc1 $f4, 0x78($sp) -/* 054458 7F01F928 460A3201 */ sub.s $f8, $f6, $f10 -/* 05445C 7F01F92C 46004407 */ neg.s $f16, $f8 -/* 054460 7F01F930 E7B00054 */ swc1 $f16, 0x54($sp) -/* 054464 7F01F934 C6120000 */ lwc1 $f18, ($s0) -/* 054468 7F01F938 46122181 */ sub.s $f6, $f4, $f18 -/* 05446C 7F01F93C 46063282 */ mul.s $f10, $f6, $f6 -/* 054470 7F01F940 E7A6005C */ swc1 $f6, 0x5c($sp) -/* 054474 7F01F944 46108202 */ mul.s $f8, $f16, $f16 -/* 054478 7F01F948 0C007DF8 */ jal sqrtf -/* 05447C 7F01F94C 46085300 */ add.s $f12, $f10, $f8 -/* 054480 7F01F950 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 054484 7F01F954 44812000 */ mtc1 $at, $f4 -/* 054488 7F01F958 C7B20054 */ lwc1 $f18, 0x54($sp) -/* 05448C 7F01F95C C7B0005C */ lwc1 $f16, 0x5c($sp) -/* 054490 7F01F960 46002083 */ div.s $f2, $f4, $f0 -/* 054494 7F01F964 C7A80068 */ lwc1 $f8, 0x68($sp) -/* 054498 7F01F968 8FA9009C */ lw $t1, 0x9c($sp) -/* 05449C 7F01F96C 240B001F */ li $t3, 31 -/* 0544A0 7F01F970 27A40090 */ addiu $a0, $sp, 0x90 -/* 0544A4 7F01F974 46029182 */ mul.s $f6, $f18, $f2 -/* 0544A8 7F01F978 C7B20060 */ lwc1 $f18, 0x60($sp) -/* 0544AC 7F01F97C 46028282 */ mul.s $f10, $f16, $f2 -/* 0544B0 7F01F980 E7A60054 */ swc1 $f6, 0x54($sp) -/* 0544B4 7F01F984 46085102 */ mul.s $f4, $f10, $f8 -/* 0544B8 7F01F988 E7AA005C */ swc1 $f10, 0x5c($sp) -/* 0544BC 7F01F98C 46069402 */ mul.s $f16, $f18, $f6 -/* 0544C0 7F01F990 C6120000 */ lwc1 $f18, ($s0) -/* 0544C4 7F01F994 46102300 */ add.s $f12, $f4, $f16 -/* 0544C8 7F01F998 460C3202 */ mul.s $f8, $f6, $f12 -/* 0544CC 7F01F99C 46124100 */ add.s $f4, $f8, $f18 -/* 0544D0 7F01F9A0 460C5402 */ mul.s $f16, $f10, $f12 -/* 0544D4 7F01F9A4 C7AA0088 */ lwc1 $f10, 0x88($sp) -/* 0544D8 7F01F9A8 C7B2008C */ lwc1 $f18, 0x8c($sp) -/* 0544DC 7F01F9AC E7A40040 */ swc1 $f4, 0x40($sp) -/* 0544E0 7F01F9B0 C6060008 */ lwc1 $f6, 8($s0) -/* 0544E4 7F01F9B4 AFA90090 */ sw $t1, 0x90($sp) -/* 0544E8 7F01F9B8 44072000 */ mfc1 $a3, $f4 -/* 0544EC 7F01F9BC 46068200 */ add.s $f8, $f16, $f6 -/* 0544F0 7F01F9C0 44813000 */ mtc1 $at, $f6 -/* 0544F4 7F01F9C4 44808000 */ mtc1 $zero, $f16 -/* 0544F8 7F01F9C8 E7A80048 */ swc1 $f8, 0x48($sp) -/* 0544FC 7F01F9CC 8E060008 */ lw $a2, 8($s0) -/* 054500 7F01F9D0 8E050000 */ lw $a1, ($s0) -/* 054504 7F01F9D4 AFAB0014 */ sw $t3, 0x14($sp) -/* 054508 7F01F9D8 E7A80010 */ swc1 $f8, 0x10($sp) -/* 05450C 7F01F9DC E7AA001C */ swc1 $f10, 0x1c($sp) -/* 054510 7F01F9E0 E7B20018 */ swc1 $f18, 0x18($sp) -/* 054514 7F01F9E4 E7A60024 */ swc1 $f6, 0x24($sp) -/* 054518 7F01F9E8 0FC2C389 */ jal stanTestLineUnobstructed -/* 05451C 7F01F9EC E7B00020 */ swc1 $f16, 0x20($sp) -/* 054520 7F01F9F0 10400079 */ beqz $v0, .L7F01FBD8 -/* 054524 7F01F9F4 27A40090 */ addiu $a0, $sp, 0x90 -/* 054528 7F01F9F8 C7A4008C */ lwc1 $f4, 0x8c($sp) -/* 05452C 7F01F9FC C7A80088 */ lwc1 $f8, 0x88($sp) -/* 054530 7F01FA00 240C001F */ li $t4, 31 -/* 054534 7F01FA04 AFAC0010 */ sw $t4, 0x10($sp) -/* 054538 7F01FA08 8FA50040 */ lw $a1, 0x40($sp) -/* 05453C 7F01FA0C 8FA60048 */ lw $a2, 0x48($sp) -/* 054540 7F01FA10 8FA70084 */ lw $a3, 0x84($sp) -/* 054544 7F01FA14 E7A40014 */ swc1 $f4, 0x14($sp) -/* 054548 7F01FA18 0FC2C62E */ jal stanTestVolume -/* 05454C 7F01FA1C E7A80018 */ swc1 $f8, 0x18($sp) -/* 054550 7F01FA20 0441006D */ bgez $v0, .L7F01FBD8 -/* 054554 7F01FA24 C7B20040 */ lwc1 $f18, 0x40($sp) -/* 054558 7F01FA28 E6320000 */ swc1 $f18, ($s1) -/* 05455C 7F01FA2C C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 054560 7F01FA30 240D0002 */ li $t5, 2 -/* 054564 7F01FA34 E62A0008 */ swc1 $f10, 8($s1) -/* 054568 7F01FA38 8FAE0098 */ lw $t6, 0x98($sp) -/* 05456C 7F01FA3C A1CD0009 */ sb $t5, 9($t6) -/* 054570 7F01FA40 8FAF0090 */ lw $t7, 0x90($sp) -/* 054574 7F01FA44 10000064 */ b .L7F01FBD8 -/* 054578 7F01FA48 AFAF0094 */ sw $t7, 0x94($sp) -/* 05457C 7F01FA4C C6260000 */ lwc1 $f6, ($s1) -.L7F01FA50: -/* 054580 7F01FA50 C7A80074 */ lwc1 $f8, 0x74($sp) -/* 054584 7F01FA54 46068101 */ sub.s $f4, $f16, $f6 -/* 054588 7F01FA58 E7A40054 */ swc1 $f4, 0x54($sp) -/* 05458C 7F01FA5C C6320008 */ lwc1 $f18, 8($s1) -/* 054590 7F01FA60 46124281 */ sub.s $f10, $f8, $f18 -/* 054594 7F01FA64 460A5182 */ mul.s $f6, $f10, $f10 -/* 054598 7F01FA68 E7AA005C */ swc1 $f10, 0x5c($sp) -/* 05459C 7F01FA6C 46042482 */ mul.s $f18, $f4, $f4 -/* 0545A0 7F01FA70 46123280 */ add.s $f10, $f6, $f18 -/* 0545A4 7F01FA74 4600503E */ c.le.s $f10, $f0 -/* 0545A8 7F01FA78 00000000 */ nop -/* 0545AC 7F01FA7C 45020057 */ bc1fl .L7F01FBDC -/* 0545B0 7F01FA80 8FA40098 */ lw $a0, 0x98($sp) -/* 0545B4 7F01FA84 C6040000 */ lwc1 $f4, ($s0) -/* 0545B8 7F01FA88 C7B20074 */ lwc1 $f18, 0x74($sp) -/* 0545BC 7F01FA8C 46048032 */ c.eq.s $f16, $f4 -/* 0545C0 7F01FA90 00000000 */ nop -/* 0545C4 7F01FA94 45020007 */ bc1fl .L7F01FAB4 -/* 0545C8 7F01FA98 C60A0008 */ lwc1 $f10, 8($s0) -/* 0545CC 7F01FA9C C6060008 */ lwc1 $f6, 8($s0) -/* 0545D0 7F01FAA0 46064032 */ c.eq.s $f8, $f6 -/* 0545D4 7F01FAA4 00000000 */ nop -/* 0545D8 7F01FAA8 4503004C */ bc1tl .L7F01FBDC -/* 0545DC 7F01FAAC 8FA40098 */ lw $a0, 0x98($sp) -/* 0545E0 7F01FAB0 C60A0008 */ lwc1 $f10, 8($s0) -.L7F01FAB4: -/* 0545E4 7F01FAB4 C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 0545E8 7F01FAB8 460A9401 */ sub.s $f16, $f18, $f10 -/* 0545EC 7F01FABC 46008107 */ neg.s $f4, $f16 -/* 0545F0 7F01FAC0 E7A40054 */ swc1 $f4, 0x54($sp) -/* 0545F4 7F01FAC4 C6060000 */ lwc1 $f6, ($s0) -/* 0545F8 7F01FAC8 46064481 */ sub.s $f18, $f8, $f6 -/* 0545FC 7F01FACC 46129282 */ mul.s $f10, $f18, $f18 -/* 054600 7F01FAD0 E7B2005C */ swc1 $f18, 0x5c($sp) -/* 054604 7F01FAD4 46042402 */ mul.s $f16, $f4, $f4 -/* 054608 7F01FAD8 0C007DF8 */ jal sqrtf -/* 05460C 7F01FADC 46105300 */ add.s $f12, $f10, $f16 -/* 054610 7F01FAE0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 054614 7F01FAE4 44814000 */ mtc1 $at, $f8 -/* 054618 7F01FAE8 C7A60054 */ lwc1 $f6, 0x54($sp) -/* 05461C 7F01FAEC C7A4005C */ lwc1 $f4, 0x5c($sp) -/* 054620 7F01FAF0 46004083 */ div.s $f2, $f8, $f0 -/* 054624 7F01FAF4 C7B00068 */ lwc1 $f16, 0x68($sp) -/* 054628 7F01FAF8 8FB8009C */ lw $t8, 0x9c($sp) -/* 05462C 7F01FAFC 2419001F */ li $t9, 31 -/* 054630 7F01FB00 27A40090 */ addiu $a0, $sp, 0x90 -/* 054634 7F01FB04 46023482 */ mul.s $f18, $f6, $f2 -/* 054638 7F01FB08 C7A60060 */ lwc1 $f6, 0x60($sp) -/* 05463C 7F01FB0C 46022282 */ mul.s $f10, $f4, $f2 -/* 054640 7F01FB10 E7B20054 */ swc1 $f18, 0x54($sp) -/* 054644 7F01FB14 46105202 */ mul.s $f8, $f10, $f16 -/* 054648 7F01FB18 E7AA005C */ swc1 $f10, 0x5c($sp) -/* 05464C 7F01FB1C 46123102 */ mul.s $f4, $f6, $f18 -/* 054650 7F01FB20 C6060000 */ lwc1 $f6, ($s0) -/* 054654 7F01FB24 46044300 */ add.s $f12, $f8, $f4 -/* 054658 7F01FB28 460C9402 */ mul.s $f16, $f18, $f12 -/* 05465C 7F01FB2C 46068200 */ add.s $f8, $f16, $f6 -/* 054660 7F01FB30 460C5102 */ mul.s $f4, $f10, $f12 -/* 054664 7F01FB34 C7AA0088 */ lwc1 $f10, 0x88($sp) -/* 054668 7F01FB38 C7A6008C */ lwc1 $f6, 0x8c($sp) -/* 05466C 7F01FB3C E7A80040 */ swc1 $f8, 0x40($sp) -/* 054670 7F01FB40 C6120008 */ lwc1 $f18, 8($s0) -/* 054674 7F01FB44 AFB80090 */ sw $t8, 0x90($sp) -/* 054678 7F01FB48 44074000 */ mfc1 $a3, $f8 -/* 05467C 7F01FB4C 46122400 */ add.s $f16, $f4, $f18 -/* 054680 7F01FB50 44819000 */ mtc1 $at, $f18 -/* 054684 7F01FB54 44802000 */ mtc1 $zero, $f4 -/* 054688 7F01FB58 E7B00048 */ swc1 $f16, 0x48($sp) -/* 05468C 7F01FB5C 8E060008 */ lw $a2, 8($s0) -/* 054690 7F01FB60 8E050000 */ lw $a1, ($s0) -/* 054694 7F01FB64 AFB90014 */ sw $t9, 0x14($sp) -/* 054698 7F01FB68 E7B00010 */ swc1 $f16, 0x10($sp) -/* 05469C 7F01FB6C E7AA001C */ swc1 $f10, 0x1c($sp) -/* 0546A0 7F01FB70 E7A60018 */ swc1 $f6, 0x18($sp) -/* 0546A4 7F01FB74 E7B20024 */ swc1 $f18, 0x24($sp) -/* 0546A8 7F01FB78 0FC2C389 */ jal stanTestLineUnobstructed -/* 0546AC 7F01FB7C E7A40020 */ swc1 $f4, 0x20($sp) -/* 0546B0 7F01FB80 10400015 */ beqz $v0, .L7F01FBD8 -/* 0546B4 7F01FB84 27A40090 */ addiu $a0, $sp, 0x90 -/* 0546B8 7F01FB88 C7A8008C */ lwc1 $f8, 0x8c($sp) -/* 0546BC 7F01FB8C C7B00088 */ lwc1 $f16, 0x88($sp) -/* 0546C0 7F01FB90 2408001F */ li $t0, 31 -/* 0546C4 7F01FB94 AFA80010 */ sw $t0, 0x10($sp) -/* 0546C8 7F01FB98 8FA50040 */ lw $a1, 0x40($sp) -/* 0546CC 7F01FB9C 8FA60048 */ lw $a2, 0x48($sp) -/* 0546D0 7F01FBA0 8FA70084 */ lw $a3, 0x84($sp) -/* 0546D4 7F01FBA4 E7A80014 */ swc1 $f8, 0x14($sp) -/* 0546D8 7F01FBA8 0FC2C62E */ jal stanTestVolume -/* 0546DC 7F01FBAC E7B00018 */ swc1 $f16, 0x18($sp) -/* 0546E0 7F01FBB0 04410009 */ bgez $v0, .L7F01FBD8 -/* 0546E4 7F01FBB4 C7A60040 */ lwc1 $f6, 0x40($sp) -/* 0546E8 7F01FBB8 E6260000 */ swc1 $f6, ($s1) -/* 0546EC 7F01FBBC C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0546F0 7F01FBC0 240A0002 */ li $t2, 2 -/* 0546F4 7F01FBC4 E62A0008 */ swc1 $f10, 8($s1) -/* 0546F8 7F01FBC8 8FA90098 */ lw $t1, 0x98($sp) -/* 0546FC 7F01FBCC A12A0009 */ sb $t2, 9($t1) -/* 054700 7F01FBD0 8FAB0090 */ lw $t3, 0x90($sp) -/* 054704 7F01FBD4 AFAB0094 */ sw $t3, 0x94($sp) -.L7F01FBD8: -/* 054708 7F01FBD8 8FA40098 */ lw $a0, 0x98($sp) -.L7F01FBDC: -/* 05470C 7F01FBDC 0FC07D7A */ jal chrSetMoving -/* 054710 7F01FBE0 24050001 */ li $a1, 1 -/* 054714 7F01FBE4 8FAC0094 */ lw $t4, 0x94($sp) -/* 054718 7F01FBE8 8FAE0098 */ lw $t6, 0x98($sp) -/* 05471C 7F01FBEC 15800002 */ bnez $t4, .L7F01FBF8 -/* 054720 7F01FBF0 240D0001 */ li $t5, 1 -/* 054724 7F01FBF4 A1CD0009 */ sb $t5, 9($t6) -.L7F01FBF8: -/* 054728 7F01FBF8 8FBF0034 */ lw $ra, 0x34($sp) -/* 05472C 7F01FBFC 8FA20094 */ lw $v0, 0x94($sp) -/* 054730 7F01FC00 8FB0002C */ lw $s0, 0x2c($sp) -/* 054734 7F01FC04 8FB10030 */ lw $s1, 0x30($sp) -/* 054738 7F01FC08 03E00008 */ jr $ra -/* 05473C 7F01FC0C 27BD0098 */ addiu $sp, $sp, 0x98 -) + tmp = ((model->playspeed * g_GlobalTimerDelta) * (chr->act_die.timeextra - chr->act_die.elapseextra)) / chr->act_die.timeextra; #endif + dst->x += chr->act_die.extraspeed.x * tmp; + dst->y += chr->act_die.extraspeed.y * tmp; + dst->z += chr->act_die.extraspeed.z * tmp; +#ifdef BUGFIX_R1 + chr->act_die.elapseextra += g_JP_GlobalTimerDelta * model->playspeed; +#else + chr->act_die.elapseextra += g_GlobalTimerDelta * model->playspeed; +#endif -#ifdef NONMATCHING -void sub_GAME_7F01FC10(void) { + if (chr->act_die.timeextra < chr->act_die.elapseextra) + { + chr->act_die.timeextra = 0.0f; + } + } + dst->x += chr->fallspeed.x * g_GlobalTimerDelta; + dst->z += chr->fallspeed.z * g_GlobalTimerDelta; + + tile = sub_GAME_7F01F614(chr, chr->prop->stan, src, dst, 1); + + if (tile != NULL) + { + chr->prop->stan = tile; + groundpos = dst; + moved = 1; + } + + if (!(chr->chrflags & CHRFLAG_LOCK_Y_POS)) + { + ground = stanGetPositionYValue(chr->prop->stan, groundpos->x, groundpos->z); + chr->ground = ground; + + if (chr->chrflags & CHRFLAG_INIT) + { + rwdata = modelGetNodeRwData(model, model->obj->RootNode); + + chr->chrflags &= ~1; + chr->manground = chr->ground; + chr->sumground = chr->ground / GROUND_SMOOTH_FACTOR; + + rwdata->Header.unk34.y = rwdata->Header.unk24.y; + } + else + { + if ((chr->fallspeed.y != 0.0f) || (chr->manground > chr->ground)) + { + sub_GAME_7F057D44(&chr->manground, &chr->fallspeed.y, g_GlobalTimerDelta); + + if (chr->manground <= chr->ground) + { + chr->manground = chr->ground; + chr->sumground = chr->ground / GROUND_SMOOTH_FACTOR; + chr->fallspeed.y = 0.0f; + } + } + + if (chr->manground <= chr->ground) + { + i = 0; + + if (g_ClockTimer > 0) + { + tmp = FALLSPEED_DECAY; + + do + { + chr->sumground = (chr->sumground * tmp) + chr->ground; + chr->fallspeed.x *= tmp; + chr->fallspeed.z *= tmp; + i++; + } + while (i < g_ClockTimer); + } + + tmp = 0.1f; + chr->manground = chr->sumground * GROUND_SMOOTH_FACTOR; + + if (chr->fallspeed.x < tmp) + { + if (-0.1f < chr->fallspeed.x) + { + if (chr->fallspeed.z < tmp) + { + if (-0.1f < chr->fallspeed.z) + { + chr->fallspeed.z = 0.0f; + chr->fallspeed.x = 0.0f; + } + } + } + } + } + } + + dst->y += chr->manground - ground; + } + else + { + ground = chr->ground; + } + } + + *ground_y = ground; + + if (!moved) + { + dst->x = src->x; + dst->z = src->z; + } + + return 1; } -#else -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel D_80051D10 -.word 0x3dccccd0 /*0.10000002*/ -glabel D_80051D14 -.word 0x3dccccd0 /*0.10000002*/ -glabel D_80051D18 -.word 0x3f666666 /*0.89999998*/ -glabel D_80051D1C -.word 0x3dcccccd /*0.1*/ -glabel D_80051D20 -.word 0x3dccccd0 /*0.10000002*/ -glabel D_80051D24 -.word 0xbdcccccd /*-0.1*/ -glabel D_80051D28 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D2C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D30 -.word 0x3f860a92 /*1.0471976*/ -glabel D_80051D34 -.word 0xbf5f66f3 /*-0.87266463*/ -glabel D_80051D38 -.word 0x3f5f66f3 /*0.87266463*/ -glabel D_80051D3C -.word 0x3f860a92 /*1.0471976*/ -glabel D_80051D40 -.word 0xbf5f66f3 /*-0.87266463*/ -glabel D_80051D44 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D48 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D4C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D50 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D54 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D58 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D5C -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D60 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D64 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D68 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D6C -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D70 -.word 0x3f7eb852 /*0.995*/ -glabel D_80051D74 -.word 0x3f80a3d7 /*1.005*/ -glabel D_80051D78 -.word 0x3f7eb852 /*0.995*/ -glabel D_80051D7C -.word 0x3f80a3d7 /*1.005*/ -glabel D_80051D80 -.word 0x3f7eb852 /*0.995*/ -glabel D_80051D84 -.word 0x3f80a3d7 /*1.005*/ -glabel D_80051D88 -.word 0x41aa6666 /*21.299999*/ +#undef GROUND_SMOOTH_FACTOR +#undef FALLSPEED_DECAY -.text -glabel sub_GAME_7F01FC10 -/* 054740 7F01FC10 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 054744 7F01FC14 AFBF0024 */ sw $ra, 0x24($sp) -/* 054748 7F01FC18 AFB10020 */ sw $s1, 0x20($sp) -/* 05474C 7F01FC1C AFB0001C */ sw $s0, 0x1c($sp) -/* 054750 7F01FC20 AFA40038 */ sw $a0, 0x38($sp) -/* 054754 7F01FC24 AFA5003C */ sw $a1, 0x3c($sp) -/* 054758 7F01FC28 AFA70044 */ sw $a3, 0x44($sp) -/* 05475C 7F01FC2C 8C900004 */ lw $s0, 4($a0) -/* 054760 7F01FC30 AFA00030 */ sw $zero, 0x30($sp) -/* 054764 7F01FC34 44806000 */ mtc1 $zero, $f12 -/* 054768 7F01FC38 8E0F0018 */ lw $t7, 0x18($s0) -/* 05476C 7F01FC3C 00C08825 */ move $s1, $a2 -/* 054770 7F01FC40 00A01825 */ move $v1, $a1 -/* 054774 7F01FC44 8DF80014 */ lw $t8, 0x14($t7) -/* 054778 7F01FC48 46006386 */ mov.s $f14, $f12 -/* 05477C 7F01FC4C 530000CC */ beql $t8, $zero, .L7F01FF80 -/* 054780 7F01FC50 8FAD0044 */ lw $t5, 0x44($sp) -/* 054784 7F01FC54 82190007 */ lb $t9, 7($s0) -/* 054788 7F01FC58 24010004 */ li $at, 4 -/* 05478C 7F01FC5C 1721002C */ bne $t9, $at, .L7F01FD10 -/* 054790 7F01FC60 00000000 */ nop -/* 054794 7F01FC64 C6020038 */ lwc1 $f2, 0x38($s0) -/* 054798 7F01FC68 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) -/* 05479C 7F01FC6C 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 0547A0 7F01FC70 4602603C */ c.lt.s $f12, $f2 -/* 0547A4 7F01FC74 00000000 */ nop -/* 0547A8 7F01FC78 45000025 */ bc1f .L7F01FD10 -/* 0547AC 7F01FC7C 00000000 */ nop -/* 0547B0 7F01FC80 C48400A4 */ lwc1 $f4, 0xa4($a0) -/* 0547B4 7F01FC84 C4460000 */ lwc1 $f6, ($v0) -/* 0547B8 7F01FC88 C60A003C */ lwc1 $f10, 0x3c($s0) -/* 0547BC 7F01FC8C 46062202 */ mul.s $f8, $f4, $f6 -/* 0547C0 7F01FC90 460A1481 */ sub.s $f18, $f2, $f10 -/* 0547C4 7F01FC94 C60A0040 */ lwc1 $f10, 0x40($s0) -/* 0547C8 7F01FC98 C4C60000 */ lwc1 $f6, ($a2) -/* 0547CC 7F01FC9C 46124102 */ mul.s $f4, $f8, $f18 -/* 0547D0 7F01FCA0 46022003 */ div.s $f0, $f4, $f2 -/* 0547D4 7F01FCA4 C4C40004 */ lwc1 $f4, 4($a2) -/* 0547D8 7F01FCA8 46005202 */ mul.s $f8, $f10, $f0 -/* 0547DC 7F01FCAC 46083480 */ add.s $f18, $f6, $f8 -/* 0547E0 7F01FCB0 E4D20000 */ swc1 $f18, ($a2) -/* 0547E4 7F01FCB4 C60A0044 */ lwc1 $f10, 0x44($s0) -/* 0547E8 7F01FCB8 C4D20008 */ lwc1 $f18, 8($a2) -/* 0547EC 7F01FCBC 46005182 */ mul.s $f6, $f10, $f0 -/* 0547F0 7F01FCC0 46062200 */ add.s $f8, $f4, $f6 -/* 0547F4 7F01FCC4 E4C80004 */ swc1 $f8, 4($a2) -/* 0547F8 7F01FCC8 C60A0048 */ lwc1 $f10, 0x48($s0) -/* 0547FC 7F01FCCC 46005102 */ mul.s $f4, $f10, $f0 -/* 054800 7F01FCD0 46049180 */ add.s $f6, $f18, $f4 -/* 054804 7F01FCD4 E4C60008 */ swc1 $f6, 8($a2) -/* 054808 7F01FCD8 8FA80038 */ lw $t0, 0x38($sp) -/* 05480C 7F01FCDC C4480000 */ lwc1 $f8, ($v0) -/* 054810 7F01FCE0 C604003C */ lwc1 $f4, 0x3c($s0) -/* 054814 7F01FCE4 C50A00A4 */ lwc1 $f10, 0xa4($t0) -/* 054818 7F01FCE8 460A4482 */ mul.s $f18, $f8, $f10 -/* 05481C 7F01FCEC C6080038 */ lwc1 $f8, 0x38($s0) -/* 054820 7F01FCF0 46122180 */ add.s $f6, $f4, $f18 -/* 054824 7F01FCF4 E606003C */ swc1 $f6, 0x3c($s0) -/* 054828 7F01FCF8 C60A003C */ lwc1 $f10, 0x3c($s0) -/* 05482C 7F01FCFC 460A403C */ c.lt.s $f8, $f10 -/* 054830 7F01FD00 00000000 */ nop -/* 054834 7F01FD04 45000002 */ bc1f .L7F01FD10 -/* 054838 7F01FD08 00000000 */ nop -/* 05483C 7F01FD0C E60C0038 */ swc1 $f12, 0x38($s0) -.L7F01FD10: -/* 054840 7F01FD10 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) -/* 054844 7F01FD14 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 054848 7F01FD18 C4520000 */ lwc1 $f18, ($v0) -/* 05484C 7F01FD1C C60400B0 */ lwc1 $f4, 0xb0($s0) -/* 054850 7F01FD20 C6280000 */ lwc1 $f8, ($s1) -/* 054854 7F01FD24 240A0001 */ li $t2, 1 -/* 054858 7F01FD28 46122182 */ mul.s $f6, $f4, $f18 -/* 05485C 7F01FD2C 02002025 */ move $a0, $s0 -/* 054860 7F01FD30 02203825 */ move $a3, $s1 -/* 054864 7F01FD34 46064280 */ add.s $f10, $f8, $f6 -/* 054868 7F01FD38 C6260008 */ lwc1 $f6, 8($s1) -/* 05486C 7F01FD3C E62A0000 */ swc1 $f10, ($s1) -/* 054870 7F01FD40 C4520000 */ lwc1 $f18, ($v0) -/* 054874 7F01FD44 C60400B8 */ lwc1 $f4, 0xb8($s0) -/* 054878 7F01FD48 46122202 */ mul.s $f8, $f4, $f18 -/* 05487C 7F01FD4C 46083280 */ add.s $f10, $f6, $f8 -/* 054880 7F01FD50 E62A0008 */ swc1 $f10, 8($s1) -/* 054884 7F01FD54 8E090018 */ lw $t1, 0x18($s0) -/* 054888 7F01FD58 8FA6003C */ lw $a2, 0x3c($sp) -/* 05488C 7F01FD5C 8D250014 */ lw $a1, 0x14($t1) -/* 054890 7F01FD60 AFA30028 */ sw $v1, 0x28($sp) -/* 054894 7F01FD64 0FC07D85 */ jal sub_GAME_7F01F614 -/* 054898 7F01FD68 AFAA0010 */ sw $t2, 0x10($sp) -/* 05489C 7F01FD6C 10400006 */ beqz $v0, .L7F01FD88 -/* 0548A0 7F01FD70 8FA30028 */ lw $v1, 0x28($sp) -/* 0548A4 7F01FD74 8E0B0018 */ lw $t3, 0x18($s0) -/* 0548A8 7F01FD78 240C0001 */ li $t4, 1 -/* 0548AC 7F01FD7C 02201825 */ move $v1, $s1 -/* 0548B0 7F01FD80 AD620014 */ sw $v0, 0x14($t3) -/* 0548B4 7F01FD84 AFAC0030 */ sw $t4, 0x30($sp) -.L7F01FD88: -/* 0548B8 7F01FD88 8E0D0014 */ lw $t5, 0x14($s0) -/* 0548BC 7F01FD8C 31AF1000 */ andi $t7, $t5, 0x1000 -/* 0548C0 7F01FD90 55E0007A */ bnezl $t7, .L7F01FF7C -/* 0548C4 7F01FD94 C60E00AC */ lwc1 $f14, 0xac($s0) -/* 0548C8 7F01FD98 8E180018 */ lw $t8, 0x18($s0) -/* 0548CC 7F01FD9C 8C650000 */ lw $a1, ($v1) -/* 0548D0 7F01FDA0 8C660008 */ lw $a2, 8($v1) -/* 0548D4 7F01FDA4 0FC2CA5C */ jal stanGetPositionYValue -/* 0548D8 7F01FDA8 8F040014 */ lw $a0, 0x14($t8) -/* 0548DC 7F01FDAC 8E190014 */ lw $t9, 0x14($s0) -/* 0548E0 7F01FDB0 44806000 */ mtc1 $zero, $f12 -/* 0548E4 7F01FDB4 46000386 */ mov.s $f14, $f0 -/* 0548E8 7F01FDB8 332E0001 */ andi $t6, $t9, 1 -/* 0548EC 7F01FDBC 11C00014 */ beqz $t6, .L7F01FE10 -/* 0548F0 7F01FDC0 E60000AC */ swc1 $f0, 0xac($s0) -/* 0548F4 7F01FDC4 8FA40038 */ lw $a0, 0x38($sp) -/* 0548F8 7F01FDC8 8C880008 */ lw $t0, 8($a0) -/* 0548FC 7F01FDCC 8D050000 */ lw $a1, ($t0) -/* 054900 7F01FDD0 0FC1B1E7 */ jal modelGetNodeRwData -/* 054904 7F01FDD4 E7AE002C */ swc1 $f14, 0x2c($sp) -/* 054908 7F01FDD8 8E090014 */ lw $t1, 0x14($s0) -/* 05490C 7F01FDDC C60200AC */ lwc1 $f2, 0xac($s0) -/* 054910 7F01FDE0 2401FFFE */ li $at, -2 -/* 054914 7F01FDE4 C7AE002C */ lwc1 $f14, 0x2c($sp) -/* 054918 7F01FDE8 01215024 */ and $t2, $t1, $at -/* 05491C 7F01FDEC AE0A0014 */ sw $t2, 0x14($s0) -/* 054920 7F01FDF0 3C018005 */ lui $at, %hi(D_80051D10) -/* 054924 7F01FDF4 E60200A8 */ swc1 $f2, 0xa8($s0) -/* 054928 7F01FDF8 C4241D10 */ lwc1 $f4, %lo(D_80051D10)($at) -/* 05492C 7F01FDFC 46041483 */ div.s $f18, $f2, $f4 -/* 054930 7F01FE00 E61200A4 */ swc1 $f18, 0xa4($s0) -/* 054934 7F01FE04 C4460028 */ lwc1 $f6, 0x28($v0) -/* 054938 7F01FE08 10000055 */ b .L7F01FF60 -/* 05493C 7F01FE0C E4460038 */ swc1 $f6, 0x38($v0) -.L7F01FE10: -/* 054940 7F01FE10 C60800B4 */ lwc1 $f8, 0xb4($s0) -/* 054944 7F01FE14 260400A8 */ addiu $a0, $s0, 0xa8 -/* 054948 7F01FE18 260500B4 */ addiu $a1, $s0, 0xb4 -/* 05494C 7F01FE1C 46086032 */ c.eq.s $f12, $f8 -/* 054950 7F01FE20 3C068005 */ lui $a2, %hi(g_GlobalTimerDelta) -/* 054954 7F01FE24 45000007 */ bc1f .L7F01FE44 -/* 054958 7F01FE28 00000000 */ nop -/* 05495C 7F01FE2C C60200AC */ lwc1 $f2, 0xac($s0) -/* 054960 7F01FE30 C60000A8 */ lwc1 $f0, 0xa8($s0) -/* 054964 7F01FE34 4600103C */ c.lt.s $f2, $f0 -/* 054968 7F01FE38 00000000 */ nop -/* 05496C 7F01FE3C 45020013 */ bc1fl .L7F01FE8C -/* 054970 7F01FE40 4602003E */ c.le.s $f0, $f2 -.L7F01FE44: -/* 054974 7F01FE44 8CC68378 */ lw $a2, %lo(g_GlobalTimerDelta)($a2) -/* 054978 7F01FE48 0FC15F51 */ jal sub_GAME_7F057D44 -/* 05497C 7F01FE4C E7AE002C */ swc1 $f14, 0x2c($sp) -/* 054980 7F01FE50 C60200AC */ lwc1 $f2, 0xac($s0) -/* 054984 7F01FE54 C60000A8 */ lwc1 $f0, 0xa8($s0) -/* 054988 7F01FE58 44806000 */ mtc1 $zero, $f12 -/* 05498C 7F01FE5C C7AE002C */ lwc1 $f14, 0x2c($sp) -/* 054990 7F01FE60 4602003E */ c.le.s $f0, $f2 -/* 054994 7F01FE64 3C018005 */ lui $at, %hi(D_80051D14) -/* 054998 7F01FE68 45020008 */ bc1fl .L7F01FE8C -/* 05499C 7F01FE6C 4602003E */ c.le.s $f0, $f2 -/* 0549A0 7F01FE70 E60200A8 */ swc1 $f2, 0xa8($s0) -/* 0549A4 7F01FE74 C42A1D14 */ lwc1 $f10, %lo(D_80051D14)($at) -/* 0549A8 7F01FE78 E60C00B4 */ swc1 $f12, 0xb4($s0) -/* 0549AC 7F01FE7C C60000A8 */ lwc1 $f0, 0xa8($s0) -/* 0549B0 7F01FE80 460A1103 */ div.s $f4, $f2, $f10 -/* 0549B4 7F01FE84 E60400A4 */ swc1 $f4, 0xa4($s0) -/* 0549B8 7F01FE88 4602003E */ c.le.s $f0, $f2 -.L7F01FE8C: -/* 0549BC 7F01FE8C 3C038005 */ lui $v1, %hi(g_ClockTimer) -/* 0549C0 7F01FE90 24638374 */ addiu $v1, %lo(g_ClockTimer) # addiu $v1, $v1, -0x7c8c -/* 0549C4 7F01FE94 45020033 */ bc1fl .L7F01FF64 -/* 0549C8 7F01FE98 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 0549CC 7F01FE9C 8C6B0000 */ lw $t3, ($v1) -/* 0549D0 7F01FEA0 00001025 */ move $v0, $zero -/* 0549D4 7F01FEA4 3C018005 */ lui $at, %hi(D_80051D18) -/* 0549D8 7F01FEA8 19600011 */ blez $t3, .L7F01FEF0 -/* 0549DC 7F01FEAC 00000000 */ nop -/* 0549E0 7F01FEB0 C4201D18 */ lwc1 $f0, %lo(D_80051D18)($at) -/* 0549E4 7F01FEB4 C61200A4 */ lwc1 $f18, 0xa4($s0) -.L7F01FEB8: -/* 0549E8 7F01FEB8 C60A00B0 */ lwc1 $f10, 0xb0($s0) -/* 0549EC 7F01FEBC 24420001 */ addiu $v0, $v0, 1 -/* 0549F0 7F01FEC0 46009182 */ mul.s $f6, $f18, $f0 -/* 0549F4 7F01FEC4 C61200B8 */ lwc1 $f18, 0xb8($s0) -/* 0549F8 7F01FEC8 46005102 */ mul.s $f4, $f10, $f0 -/* 0549FC 7F01FECC 46023200 */ add.s $f8, $f6, $f2 -/* 054A00 7F01FED0 46009182 */ mul.s $f6, $f18, $f0 -/* 054A04 7F01FED4 E60400B0 */ swc1 $f4, 0xb0($s0) -/* 054A08 7F01FED8 E60800A4 */ swc1 $f8, 0xa4($s0) -/* 054A0C 7F01FEDC E60600B8 */ swc1 $f6, 0xb8($s0) -/* 054A10 7F01FEE0 8C6C0000 */ lw $t4, ($v1) -/* 054A14 7F01FEE4 004C082A */ slt $at, $v0, $t4 -/* 054A18 7F01FEE8 5420FFF3 */ bnezl $at, .L7F01FEB8 -/* 054A1C 7F01FEEC C61200A4 */ lwc1 $f18, 0xa4($s0) -.L7F01FEF0: -/* 054A20 7F01FEF0 3C018005 */ lui $at, %hi(D_80051D1C) -/* 054A24 7F01FEF4 C4221D1C */ lwc1 $f2, %lo(D_80051D1C)($at) -/* 054A28 7F01FEF8 3C018005 */ lui $at, %hi(D_80051D20) -/* 054A2C 7F01FEFC C42A1D20 */ lwc1 $f10, %lo(D_80051D20)($at) -/* 054A30 7F01FF00 C60800A4 */ lwc1 $f8, 0xa4($s0) -/* 054A34 7F01FF04 C60000B0 */ lwc1 $f0, 0xb0($s0) -/* 054A38 7F01FF08 3C018005 */ lui $at, %hi(D_80051D24) -/* 054A3C 7F01FF0C 460A4102 */ mul.s $f4, $f8, $f10 -/* 054A40 7F01FF10 4602003C */ c.lt.s $f0, $f2 -/* 054A44 7F01FF14 00000000 */ nop -/* 054A48 7F01FF18 45000011 */ bc1f .L7F01FF60 -/* 054A4C 7F01FF1C E60400A8 */ swc1 $f4, 0xa8($s0) -/* 054A50 7F01FF20 C4301D24 */ lwc1 $f16, %lo(D_80051D24)($at) -/* 054A54 7F01FF24 4600803C */ c.lt.s $f16, $f0 -/* 054A58 7F01FF28 00000000 */ nop -/* 054A5C 7F01FF2C 4502000D */ bc1fl .L7F01FF64 -/* 054A60 7F01FF30 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 054A64 7F01FF34 C60000B8 */ lwc1 $f0, 0xb8($s0) -/* 054A68 7F01FF38 4602003C */ c.lt.s $f0, $f2 -/* 054A6C 7F01FF3C 00000000 */ nop -/* 054A70 7F01FF40 45020008 */ bc1fl .L7F01FF64 -/* 054A74 7F01FF44 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 054A78 7F01FF48 4600803C */ c.lt.s $f16, $f0 -/* 054A7C 7F01FF4C 00000000 */ nop -/* 054A80 7F01FF50 45020004 */ bc1fl .L7F01FF64 -/* 054A84 7F01FF54 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 054A88 7F01FF58 E60C00B8 */ swc1 $f12, 0xb8($s0) -/* 054A8C 7F01FF5C E60C00B0 */ swc1 $f12, 0xb0($s0) -.L7F01FF60: -/* 054A90 7F01FF60 C60600A8 */ lwc1 $f6, 0xa8($s0) -.L7F01FF64: -/* 054A94 7F01FF64 C6320004 */ lwc1 $f18, 4($s1) -/* 054A98 7F01FF68 460E3201 */ sub.s $f8, $f6, $f14 -/* 054A9C 7F01FF6C 46089280 */ add.s $f10, $f18, $f8 -/* 054AA0 7F01FF70 10000002 */ b .L7F01FF7C -/* 054AA4 7F01FF74 E62A0004 */ swc1 $f10, 4($s1) -/* 054AA8 7F01FF78 C60E00AC */ lwc1 $f14, 0xac($s0) -.L7F01FF7C: -/* 054AAC 7F01FF7C 8FAD0044 */ lw $t5, 0x44($sp) -.L7F01FF80: -/* 054AB0 7F01FF80 24020001 */ li $v0, 1 -/* 054AB4 7F01FF84 E5AE0000 */ swc1 $f14, ($t5) -/* 054AB8 7F01FF88 8FAF0030 */ lw $t7, 0x30($sp) -/* 054ABC 7F01FF8C 8FB8003C */ lw $t8, 0x3c($sp) -/* 054AC0 7F01FF90 55E00007 */ bnezl $t7, .L7F01FFB0 -/* 054AC4 7F01FF94 8FBF0024 */ lw $ra, 0x24($sp) -/* 054AC8 7F01FF98 C7040000 */ lwc1 $f4, ($t8) -/* 054ACC 7F01FF9C E6240000 */ swc1 $f4, ($s1) -/* 054AD0 7F01FFA0 8FB9003C */ lw $t9, 0x3c($sp) -/* 054AD4 7F01FFA4 C7260008 */ lwc1 $f6, 8($t9) -/* 054AD8 7F01FFA8 E6260008 */ swc1 $f6, 8($s1) -/* 054ADC 7F01FFAC 8FBF0024 */ lw $ra, 0x24($sp) -.L7F01FFB0: -/* 054AE0 7F01FFB0 8FB0001C */ lw $s0, 0x1c($sp) -/* 054AE4 7F01FFB4 8FB10020 */ lw $s1, 0x20($sp) -/* 054AE8 7F01FFB8 03E00008 */ jr $ra -/* 054AEC 7F01FFBC 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif -#ifdef VERSION_JP -GLOBAL_ASM( -.late_rodata -glabel D_80051D10 -.word 0x3dccccd0 /*0.10000002*/ -glabel D_80051D14 -.word 0x3dccccd0 /*0.10000002*/ -glabel D_80051D18 -.word 0x3f666666 /*0.89999998*/ -glabel D_80051D1C -.word 0x3dcccccd /*0.1*/ -glabel D_80051D20 -.word 0x3dccccd0 /*0.10000002*/ -glabel D_80051D24 -.word 0xbdcccccd /*-0.1*/ -glabel D_80051D28 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D2C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D30 -.word 0x3f860a92 /*1.0471976*/ -glabel D_80051D34 -.word 0xbf5f66f3 /*-0.87266463*/ -glabel D_80051D38 -.word 0x3f5f66f3 /*0.87266463*/ -glabel D_80051D3C -.word 0x3f860a92 /*1.0471976*/ -glabel D_80051D40 -.word 0xbf5f66f3 /*-0.87266463*/ -glabel D_80051D44 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D48 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D4C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D50 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D54 -.word 0x40c90fdb /*6.2831855*/ - -glabel D_jp80051D88 -.word 0x3f4ccccd - -glabel D_80051D58 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D5C -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D60 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D64 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D68 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D6C -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D70 -.word 0x3f7eb852 /*0.995*/ -glabel D_80051D74 -.word 0x3f80a3d7 /*1.005*/ -glabel D_80051D78 -.word 0x3f7eb852 /*0.995*/ -glabel D_80051D7C -.word 0x3f80a3d7 /*1.005*/ -glabel D_80051D80 -.word 0x3f7eb852 /*0.995*/ -glabel D_80051D84 -.word 0x3f80a3d7 /*1.005*/ -glabel D_80051D88 -.word 0x41aa6666 /*21.299999*/ - -/*.word 0x0*/ -.text -glabel sub_GAME_7F01FC10 -/* 054740 7F01FC10 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 054744 7F01FC14 AFBF0024 */ sw $ra, 0x24($sp) -/* 054748 7F01FC18 AFB10020 */ sw $s1, 0x20($sp) -/* 05474C 7F01FC1C AFB0001C */ sw $s0, 0x1c($sp) -/* 054750 7F01FC20 AFA40038 */ sw $a0, 0x38($sp) -/* 054754 7F01FC24 AFA5003C */ sw $a1, 0x3c($sp) -/* 054758 7F01FC28 AFA70044 */ sw $a3, 0x44($sp) -/* 05475C 7F01FC2C 8C900004 */ lw $s0, 4($a0) -/* 054760 7F01FC30 AFA00030 */ sw $zero, 0x30($sp) -/* 054764 7F01FC34 44806000 */ mtc1 $zero, $f12 -/* 054768 7F01FC38 8E0F0018 */ lw $t7, 0x18($s0) -/* 05476C 7F01FC3C 00C08825 */ move $s1, $a2 -/* 054770 7F01FC40 00A01825 */ move $v1, $a1 -/* 054774 7F01FC44 8DF80014 */ lw $t8, 0x14($t7) -/* 054778 7F01FC48 46006386 */ mov.s $f14, $f12 -/* 05477C 7F01FC4C 530000CC */ beql $t8, $zero, .L7F01FF80 -/* 054780 7F01FC50 8FAD0044 */ lw $t5, 0x44($sp) -/* 054784 7F01FC54 82190007 */ lb $t9, 7($s0) -/* 054788 7F01FC58 24010004 */ li $at, 4 -/* 05478C 7F01FC5C 1721002C */ bne $t9, $at, .L7F01FD10 -/* 054790 7F01FC60 00000000 */ nop -/* 054794 7F01FC64 C6020038 */ lwc1 $f2, 0x38($s0) -/* 054798 7F01FC68 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) -/* 05479C 7F01FC6C 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 0547A0 7F01FC70 4602603C */ c.lt.s $f12, $f2 -/* 0547A4 7F01FC74 00000000 */ nop -/* 0547A8 7F01FC78 45000025 */ bc1f .L7F01FD10 -/* 0547AC 7F01FC7C 00000000 */ nop -/* 0547B0 7F01FC80 C48400A4 */ lwc1 $f4, 0xa4($a0) -/* 0547B4 7F01FC84 C4460000 */ lwc1 $f6, ($v0) -/* 0547B8 7F01FC88 C60A003C */ lwc1 $f10, 0x3c($s0) -/* 0547BC 7F01FC8C 46062202 */ mul.s $f8, $f4, $f6 -/* 0547C0 7F01FC90 460A1481 */ sub.s $f18, $f2, $f10 -/* 0547C4 7F01FC94 C60A0040 */ lwc1 $f10, 0x40($s0) -/* 0547C8 7F01FC98 C4C60000 */ lwc1 $f6, ($a2) -/* 0547CC 7F01FC9C 46124102 */ mul.s $f4, $f8, $f18 -/* 0547D0 7F01FCA0 46022003 */ div.s $f0, $f4, $f2 -/* 0547D4 7F01FCA4 C4C40004 */ lwc1 $f4, 4($a2) -/* 0547D8 7F01FCA8 46005202 */ mul.s $f8, $f10, $f0 -/* 0547DC 7F01FCAC 46083480 */ add.s $f18, $f6, $f8 -/* 0547E0 7F01FCB0 E4D20000 */ swc1 $f18, ($a2) -/* 0547E4 7F01FCB4 C60A0044 */ lwc1 $f10, 0x44($s0) -/* 0547E8 7F01FCB8 C4D20008 */ lwc1 $f18, 8($a2) -/* 0547EC 7F01FCBC 46005182 */ mul.s $f6, $f10, $f0 -/* 0547F0 7F01FCC0 46062200 */ add.s $f8, $f4, $f6 -/* 0547F4 7F01FCC4 E4C80004 */ swc1 $f8, 4($a2) -/* 0547F8 7F01FCC8 C60A0048 */ lwc1 $f10, 0x48($s0) -/* 0547FC 7F01FCCC 46005102 */ mul.s $f4, $f10, $f0 -/* 054800 7F01FCD0 46049180 */ add.s $f6, $f18, $f4 -/* 054804 7F01FCD4 E4C60008 */ swc1 $f6, 8($a2) -/* 054808 7F01FCD8 8FA80038 */ lw $t0, 0x38($sp) -/* 05480C 7F01FCDC C4480000 */ lwc1 $f8, ($v0) -/* 054810 7F01FCE0 C604003C */ lwc1 $f4, 0x3c($s0) -/* 054814 7F01FCE4 C50A00A4 */ lwc1 $f10, 0xa4($t0) -/* 054818 7F01FCE8 460A4482 */ mul.s $f18, $f8, $f10 -/* 05481C 7F01FCEC C6080038 */ lwc1 $f8, 0x38($s0) -/* 054820 7F01FCF0 46122180 */ add.s $f6, $f4, $f18 -/* 054824 7F01FCF4 E606003C */ swc1 $f6, 0x3c($s0) -/* 054828 7F01FCF8 C60A003C */ lwc1 $f10, 0x3c($s0) -/* 05482C 7F01FCFC 460A403C */ c.lt.s $f8, $f10 -/* 054830 7F01FD00 00000000 */ nop -/* 054834 7F01FD04 45000002 */ bc1f .L7F01FD10 -/* 054838 7F01FD08 00000000 */ nop -/* 05483C 7F01FD0C E60C0038 */ swc1 $f12, 0x38($s0) -.L7F01FD10: -/* 054840 7F01FD10 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) -/* 054844 7F01FD14 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 054848 7F01FD18 C4520000 */ lwc1 $f18, ($v0) -/* 05484C 7F01FD1C C60400B0 */ lwc1 $f4, 0xb0($s0) -/* 054850 7F01FD20 C6280000 */ lwc1 $f8, ($s1) -/* 054854 7F01FD24 240A0001 */ li $t2, 1 -/* 054858 7F01FD28 46122182 */ mul.s $f6, $f4, $f18 -/* 05485C 7F01FD2C 02002025 */ move $a0, $s0 -/* 054860 7F01FD30 02203825 */ move $a3, $s1 -/* 054864 7F01FD34 46064280 */ add.s $f10, $f8, $f6 -/* 054868 7F01FD38 C6260008 */ lwc1 $f6, 8($s1) -/* 05486C 7F01FD3C E62A0000 */ swc1 $f10, ($s1) -/* 054870 7F01FD40 C4520000 */ lwc1 $f18, ($v0) -/* 054874 7F01FD44 C60400B8 */ lwc1 $f4, 0xb8($s0) -/* 054878 7F01FD48 46122202 */ mul.s $f8, $f4, $f18 -/* 05487C 7F01FD4C 46083280 */ add.s $f10, $f6, $f8 -/* 054880 7F01FD50 E62A0008 */ swc1 $f10, 8($s1) -/* 054884 7F01FD54 8E090018 */ lw $t1, 0x18($s0) -/* 054888 7F01FD58 8FA6003C */ lw $a2, 0x3c($sp) -/* 05488C 7F01FD5C 8D250014 */ lw $a1, 0x14($t1) -/* 054890 7F01FD60 AFA30028 */ sw $v1, 0x28($sp) -/* 054894 7F01FD64 0FC07D85 */ jal sub_GAME_7F01F614 -/* 054898 7F01FD68 AFAA0010 */ sw $t2, 0x10($sp) -/* 05489C 7F01FD6C 10400006 */ beqz $v0, .L7F01FD88 -/* 0548A0 7F01FD70 8FA30028 */ lw $v1, 0x28($sp) -/* 0548A4 7F01FD74 8E0B0018 */ lw $t3, 0x18($s0) -/* 0548A8 7F01FD78 240C0001 */ li $t4, 1 -/* 0548AC 7F01FD7C 02201825 */ move $v1, $s1 -/* 0548B0 7F01FD80 AD620014 */ sw $v0, 0x14($t3) -/* 0548B4 7F01FD84 AFAC0030 */ sw $t4, 0x30($sp) -.L7F01FD88: -/* 0548B8 7F01FD88 8E0D0014 */ lw $t5, 0x14($s0) -/* 0548BC 7F01FD8C 31AF1000 */ andi $t7, $t5, 0x1000 -/* 0548C0 7F01FD90 55E0007A */ bnezl $t7, .L7F01FF7C -/* 0548C4 7F01FD94 C60E00AC */ lwc1 $f14, 0xac($s0) -/* 0548C8 7F01FD98 8E180018 */ lw $t8, 0x18($s0) -/* 0548CC 7F01FD9C 8C650000 */ lw $a1, ($v1) -/* 0548D0 7F01FDA0 8C660008 */ lw $a2, 8($v1) -/* 0548D4 7F01FDA4 0FC2CA5C */ jal stanGetPositionYValue -/* 0548D8 7F01FDA8 8F040014 */ lw $a0, 0x14($t8) -/* 0548DC 7F01FDAC 8E190014 */ lw $t9, 0x14($s0) -/* 0548E0 7F01FDB0 44806000 */ mtc1 $zero, $f12 -/* 0548E4 7F01FDB4 46000386 */ mov.s $f14, $f0 -/* 0548E8 7F01FDB8 332E0001 */ andi $t6, $t9, 1 -/* 0548EC 7F01FDBC 11C00014 */ beqz $t6, .L7F01FE10 -/* 0548F0 7F01FDC0 E60000AC */ swc1 $f0, 0xac($s0) -/* 0548F4 7F01FDC4 8FA40038 */ lw $a0, 0x38($sp) -/* 0548F8 7F01FDC8 8C880008 */ lw $t0, 8($a0) -/* 0548FC 7F01FDCC 8D050000 */ lw $a1, ($t0) -/* 054900 7F01FDD0 0FC1B1E7 */ jal modelGetNodeRwData -/* 054904 7F01FDD4 E7AE002C */ swc1 $f14, 0x2c($sp) -/* 054908 7F01FDD8 8E090014 */ lw $t1, 0x14($s0) -/* 05490C 7F01FDDC C60200AC */ lwc1 $f2, 0xac($s0) -/* 054910 7F01FDE0 2401FFFE */ li $at, -2 -/* 054914 7F01FDE4 C7AE002C */ lwc1 $f14, 0x2c($sp) -/* 054918 7F01FDE8 01215024 */ and $t2, $t1, $at -/* 05491C 7F01FDEC AE0A0014 */ sw $t2, 0x14($s0) -/* 054920 7F01FDF0 3C018005 */ lui $at, %hi(D_80051D10) -/* 054924 7F01FDF4 E60200A8 */ swc1 $f2, 0xa8($s0) -/* 054928 7F01FDF8 C4241D10 */ lwc1 $f4, %lo(D_80051D10)($at) -/* 05492C 7F01FDFC 46041483 */ div.s $f18, $f2, $f4 -/* 054930 7F01FE00 E61200A4 */ swc1 $f18, 0xa4($s0) -/* 054934 7F01FE04 C4460028 */ lwc1 $f6, 0x28($v0) -/* 054938 7F01FE08 10000055 */ b .L7F01FF60 -/* 05493C 7F01FE0C E4460038 */ swc1 $f6, 0x38($v0) -.L7F01FE10: -/* 054940 7F01FE10 C60800B4 */ lwc1 $f8, 0xb4($s0) -/* 054944 7F01FE14 260400A8 */ addiu $a0, $s0, 0xa8 -/* 054948 7F01FE18 260500B4 */ addiu $a1, $s0, 0xb4 -/* 05494C 7F01FE1C 46086032 */ c.eq.s $f12, $f8 -/* 054950 7F01FE20 3C068005 */ lui $a2, %hi(g_GlobalTimerDelta) -/* 054954 7F01FE24 45000007 */ bc1f .L7F01FE44 -/* 054958 7F01FE28 00000000 */ nop -/* 05495C 7F01FE2C C60200AC */ lwc1 $f2, 0xac($s0) -/* 054960 7F01FE30 C60000A8 */ lwc1 $f0, 0xa8($s0) -/* 054964 7F01FE34 4600103C */ c.lt.s $f2, $f0 -/* 054968 7F01FE38 00000000 */ nop -/* 05496C 7F01FE3C 45020013 */ bc1fl .L7F01FE8C -/* 054970 7F01FE40 4602003E */ c.le.s $f0, $f2 -.L7F01FE44: -/* 054974 7F01FE44 8CC68378 */ lw $a2, %lo(g_GlobalTimerDelta)($a2) -/* 054978 7F01FE48 0FC15F51 */ jal sub_GAME_7F057D44 -/* 05497C 7F01FE4C E7AE002C */ swc1 $f14, 0x2c($sp) -/* 054980 7F01FE50 C60200AC */ lwc1 $f2, 0xac($s0) -/* 054984 7F01FE54 C60000A8 */ lwc1 $f0, 0xa8($s0) -/* 054988 7F01FE58 44806000 */ mtc1 $zero, $f12 -/* 05498C 7F01FE5C C7AE002C */ lwc1 $f14, 0x2c($sp) -/* 054990 7F01FE60 4602003E */ c.le.s $f0, $f2 -/* 054994 7F01FE64 3C018005 */ lui $at, %hi(D_80051D14) -/* 054998 7F01FE68 45020008 */ bc1fl .L7F01FE8C -/* 05499C 7F01FE6C 4602003E */ c.le.s $f0, $f2 -/* 0549A0 7F01FE70 E60200A8 */ swc1 $f2, 0xa8($s0) -/* 0549A4 7F01FE74 C42A1D14 */ lwc1 $f10, %lo(D_80051D14)($at) -/* 0549A8 7F01FE78 E60C00B4 */ swc1 $f12, 0xb4($s0) -/* 0549AC 7F01FE7C C60000A8 */ lwc1 $f0, 0xa8($s0) -/* 0549B0 7F01FE80 460A1103 */ div.s $f4, $f2, $f10 -/* 0549B4 7F01FE84 E60400A4 */ swc1 $f4, 0xa4($s0) -/* 0549B8 7F01FE88 4602003E */ c.le.s $f0, $f2 -.L7F01FE8C: -/* 0549BC 7F01FE8C 3C038005 */ lui $v1, %hi(g_ClockTimer) -/* 0549C0 7F01FE90 24638374 */ addiu $v1, %lo(g_ClockTimer) # addiu $v1, $v1, -0x7c8c -/* 0549C4 7F01FE94 45020033 */ bc1fl .L7F01FF64 -/* 0549C8 7F01FE98 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 0549CC 7F01FE9C 8C6B0000 */ lw $t3, ($v1) -/* 0549D0 7F01FEA0 00001025 */ move $v0, $zero -/* 0549D4 7F01FEA4 3C018005 */ lui $at, %hi(D_80051D18) -/* 0549D8 7F01FEA8 19600011 */ blez $t3, .L7F01FEF0 -/* 0549DC 7F01FEAC 00000000 */ nop -/* 0549E0 7F01FEB0 C4201D18 */ lwc1 $f0, %lo(D_80051D18)($at) -/* 0549E4 7F01FEB4 C61200A4 */ lwc1 $f18, 0xa4($s0) -.L7F01FEB8: -/* 0549E8 7F01FEB8 C60A00B0 */ lwc1 $f10, 0xb0($s0) -/* 0549EC 7F01FEBC 24420001 */ addiu $v0, $v0, 1 -/* 0549F0 7F01FEC0 46009182 */ mul.s $f6, $f18, $f0 -/* 0549F4 7F01FEC4 C61200B8 */ lwc1 $f18, 0xb8($s0) -/* 0549F8 7F01FEC8 46005102 */ mul.s $f4, $f10, $f0 -/* 0549FC 7F01FECC 46023200 */ add.s $f8, $f6, $f2 -/* 054A00 7F01FED0 46009182 */ mul.s $f6, $f18, $f0 -/* 054A04 7F01FED4 E60400B0 */ swc1 $f4, 0xb0($s0) -/* 054A08 7F01FED8 E60800A4 */ swc1 $f8, 0xa4($s0) -/* 054A0C 7F01FEDC E60600B8 */ swc1 $f6, 0xb8($s0) -/* 054A10 7F01FEE0 8C6C0000 */ lw $t4, ($v1) -/* 054A14 7F01FEE4 004C082A */ slt $at, $v0, $t4 -/* 054A18 7F01FEE8 5420FFF3 */ bnezl $at, .L7F01FEB8 -/* 054A1C 7F01FEEC C61200A4 */ lwc1 $f18, 0xa4($s0) -.L7F01FEF0: -/* 054A20 7F01FEF0 3C018005 */ lui $at, %hi(D_80051D1C) -/* 054A24 7F01FEF4 C4221D1C */ lwc1 $f2, %lo(D_80051D1C)($at) -/* 054A28 7F01FEF8 3C018005 */ lui $at, %hi(D_80051D20) -/* 054A2C 7F01FEFC C42A1D20 */ lwc1 $f10, %lo(D_80051D20)($at) -/* 054A30 7F01FF00 C60800A4 */ lwc1 $f8, 0xa4($s0) -/* 054A34 7F01FF04 C60000B0 */ lwc1 $f0, 0xb0($s0) -/* 054A38 7F01FF08 3C018005 */ lui $at, %hi(D_80051D24) -/* 054A3C 7F01FF0C 460A4102 */ mul.s $f4, $f8, $f10 -/* 054A40 7F01FF10 4602003C */ c.lt.s $f0, $f2 -/* 054A44 7F01FF14 00000000 */ nop -/* 054A48 7F01FF18 45000011 */ bc1f .L7F01FF60 -/* 054A4C 7F01FF1C E60400A8 */ swc1 $f4, 0xa8($s0) -/* 054A50 7F01FF20 C4301D24 */ lwc1 $f16, %lo(D_80051D24)($at) -/* 054A54 7F01FF24 4600803C */ c.lt.s $f16, $f0 -/* 054A58 7F01FF28 00000000 */ nop -/* 054A5C 7F01FF2C 4502000D */ bc1fl .L7F01FF64 -/* 054A60 7F01FF30 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 054A64 7F01FF34 C60000B8 */ lwc1 $f0, 0xb8($s0) -/* 054A68 7F01FF38 4602003C */ c.lt.s $f0, $f2 -/* 054A6C 7F01FF3C 00000000 */ nop -/* 054A70 7F01FF40 45020008 */ bc1fl .L7F01FF64 -/* 054A74 7F01FF44 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 054A78 7F01FF48 4600803C */ c.lt.s $f16, $f0 -/* 054A7C 7F01FF4C 00000000 */ nop -/* 054A80 7F01FF50 45020004 */ bc1fl .L7F01FF64 -/* 054A84 7F01FF54 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 054A88 7F01FF58 E60C00B8 */ swc1 $f12, 0xb8($s0) -/* 054A8C 7F01FF5C E60C00B0 */ swc1 $f12, 0xb0($s0) -.L7F01FF60: -/* 054A90 7F01FF60 C60600A8 */ lwc1 $f6, 0xa8($s0) -.L7F01FF64: -/* 054A94 7F01FF64 C6320004 */ lwc1 $f18, 4($s1) -/* 054A98 7F01FF68 460E3201 */ sub.s $f8, $f6, $f14 -/* 054A9C 7F01FF6C 46089280 */ add.s $f10, $f18, $f8 -/* 054AA0 7F01FF70 10000002 */ b .L7F01FF7C -/* 054AA4 7F01FF74 E62A0004 */ swc1 $f10, 4($s1) -/* 054AA8 7F01FF78 C60E00AC */ lwc1 $f14, 0xac($s0) -.L7F01FF7C: -/* 054AAC 7F01FF7C 8FAD0044 */ lw $t5, 0x44($sp) -.L7F01FF80: -/* 054AB0 7F01FF80 24020001 */ li $v0, 1 -/* 054AB4 7F01FF84 E5AE0000 */ swc1 $f14, ($t5) -/* 054AB8 7F01FF88 8FAF0030 */ lw $t7, 0x30($sp) -/* 054ABC 7F01FF8C 8FB8003C */ lw $t8, 0x3c($sp) -/* 054AC0 7F01FF90 55E00007 */ bnezl $t7, .L7F01FFB0 -/* 054AC4 7F01FF94 8FBF0024 */ lw $ra, 0x24($sp) -/* 054AC8 7F01FF98 C7040000 */ lwc1 $f4, ($t8) -/* 054ACC 7F01FF9C E6240000 */ swc1 $f4, ($s1) -/* 054AD0 7F01FFA0 8FB9003C */ lw $t9, 0x3c($sp) -/* 054AD4 7F01FFA4 C7260008 */ lwc1 $f6, 8($t9) -/* 054AD8 7F01FFA8 E6260008 */ swc1 $f6, 8($s1) -/* 054ADC 7F01FFAC 8FBF0024 */ lw $ra, 0x24($sp) -.L7F01FFB0: -/* 054AE0 7F01FFB0 8FB0001C */ lw $s0, 0x1c($sp) -/* 054AE4 7F01FFB4 8FB10020 */ lw $s1, 0x20($sp) -/* 054AE8 7F01FFB8 03E00008 */ jr $ra -/* 054AEC 7F01FFBC 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80051D10 -.word 0x3DF34D68 /* 0.118799984455109 */ -glabel D_80051D14 -.word 0x3DF34D68 /* 0.118799984455109 */ -glabel D_80051D18 -.word 0x3F619653 /* 0.881200015544891 */ -glabel D_80051D1C -.word 0x3dcccccd /*0.1*/ -glabel D_80051D20 -.word 0x3DF34D68 /* 0.118799984455109 */ -glabel D_80051D24 -.word 0xbdcccccd /*-0.1*/ - -.text -glabel sub_GAME_7F01FC10 -/* 054740 7F01FC10 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 054744 7F01FC14 AFBF0024 */ sw $ra, 0x24($sp) -/* 054748 7F01FC18 AFB10020 */ sw $s1, 0x20($sp) -/* 05474C 7F01FC1C AFB0001C */ sw $s0, 0x1c($sp) -/* 054750 7F01FC20 AFA40038 */ sw $a0, 0x38($sp) -/* 054754 7F01FC24 AFA5003C */ sw $a1, 0x3c($sp) -/* 054758 7F01FC28 AFA70044 */ sw $a3, 0x44($sp) -/* 05475C 7F01FC2C 8C900004 */ lw $s0, 4($a0) -/* 054760 7F01FC30 AFA00030 */ sw $zero, 0x30($sp) -/* 054764 7F01FC34 44806000 */ mtc1 $zero, $f12 -/* 054768 7F01FC38 8E0F0018 */ lw $t7, 0x18($s0) -/* 05476C 7F01FC3C 00C08825 */ move $s1, $a2 -/* 054770 7F01FC40 00A01825 */ move $v1, $a1 -/* 054774 7F01FC44 8DF80014 */ lw $t8, 0x14($t7) -/* 054778 7F01FC48 46006386 */ mov.s $f14, $f12 -/* 05477C 7F01FC4C 530000CC */ beql $t8, $zero, .L7F01FF80 -/* 054780 7F01FC50 8FAD0044 */ lw $t5, 0x44($sp) -/* 054784 7F01FC54 82190007 */ lb $t9, 7($s0) -/* 054788 7F01FC58 24010004 */ li $at, 4 -/* 05478C 7F01FC5C 1721002C */ bne $t9, $at, .L7F01FD10 -/* 054790 7F01FC60 00000000 */ nop -/* 054794 7F01FC64 C6020038 */ lwc1 $f2, 0x38($s0) -/* 054798 7F01FC68 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) -/* 05479C 7F01FC6C 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 0547A0 7F01FC70 4602603C */ c.lt.s $f12, $f2 -/* 0547A4 7F01FC74 00000000 */ nop -/* 0547A8 7F01FC78 45000025 */ bc1f .L7F01FD10 -/* 0547AC 7F01FC7C 00000000 */ nop -/* 0547B0 7F01FC80 C48400A4 */ lwc1 $f4, 0xa4($a0) -/* 0547B4 7F01FC84 C4460000 */ lwc1 $f6, ($v0) -/* 0547B8 7F01FC88 C60A003C */ lwc1 $f10, 0x3c($s0) -/* 0547BC 7F01FC8C 46062202 */ mul.s $f8, $f4, $f6 -/* 0547C0 7F01FC90 460A1481 */ sub.s $f18, $f2, $f10 -/* 0547C4 7F01FC94 C60A0040 */ lwc1 $f10, 0x40($s0) -/* 0547C8 7F01FC98 C4C60000 */ lwc1 $f6, ($a2) -/* 0547CC 7F01FC9C 46124102 */ mul.s $f4, $f8, $f18 -/* 0547D0 7F01FCA0 46022003 */ div.s $f0, $f4, $f2 -/* 0547D4 7F01FCA4 C4C40004 */ lwc1 $f4, 4($a2) -/* 0547D8 7F01FCA8 46005202 */ mul.s $f8, $f10, $f0 -/* 0547DC 7F01FCAC 46083480 */ add.s $f18, $f6, $f8 -/* 0547E0 7F01FCB0 E4D20000 */ swc1 $f18, ($a2) -/* 0547E4 7F01FCB4 C60A0044 */ lwc1 $f10, 0x44($s0) -/* 0547E8 7F01FCB8 C4D20008 */ lwc1 $f18, 8($a2) -/* 0547EC 7F01FCBC 46005182 */ mul.s $f6, $f10, $f0 -/* 0547F0 7F01FCC0 46062200 */ add.s $f8, $f4, $f6 -/* 0547F4 7F01FCC4 E4C80004 */ swc1 $f8, 4($a2) -/* 0547F8 7F01FCC8 C60A0048 */ lwc1 $f10, 0x48($s0) -/* 0547FC 7F01FCCC 46005102 */ mul.s $f4, $f10, $f0 -/* 054800 7F01FCD0 46049180 */ add.s $f6, $f18, $f4 -/* 054804 7F01FCD4 E4C60008 */ swc1 $f6, 8($a2) -/* 054808 7F01FCD8 8FA80038 */ lw $t0, 0x38($sp) -/* 05480C 7F01FCDC C4480000 */ lwc1 $f8, ($v0) -/* 054810 7F01FCE0 C604003C */ lwc1 $f4, 0x3c($s0) -/* 054814 7F01FCE4 C50A00A4 */ lwc1 $f10, 0xa4($t0) -/* 054818 7F01FCE8 460A4482 */ mul.s $f18, $f8, $f10 -/* 05481C 7F01FCEC C6080038 */ lwc1 $f8, 0x38($s0) -/* 054820 7F01FCF0 46122180 */ add.s $f6, $f4, $f18 -/* 054824 7F01FCF4 E606003C */ swc1 $f6, 0x3c($s0) -/* 054828 7F01FCF8 C60A003C */ lwc1 $f10, 0x3c($s0) -/* 05482C 7F01FCFC 460A403C */ c.lt.s $f8, $f10 -/* 054830 7F01FD00 00000000 */ nop -/* 054834 7F01FD04 45000002 */ bc1f .L7F01FD10 -/* 054838 7F01FD08 00000000 */ nop -/* 05483C 7F01FD0C E60C0038 */ swc1 $f12, 0x38($s0) -.L7F01FD10: -/* 054840 7F01FD10 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) -/* 054844 7F01FD14 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 054848 7F01FD18 C4520000 */ lwc1 $f18, ($v0) -/* 05484C 7F01FD1C C60400B0 */ lwc1 $f4, 0xb0($s0) -/* 054850 7F01FD20 C6280000 */ lwc1 $f8, ($s1) -/* 054854 7F01FD24 240A0001 */ li $t2, 1 -/* 054858 7F01FD28 46122182 */ mul.s $f6, $f4, $f18 -/* 05485C 7F01FD2C 02002025 */ move $a0, $s0 -/* 054860 7F01FD30 02203825 */ move $a3, $s1 -/* 054864 7F01FD34 46064280 */ add.s $f10, $f8, $f6 -/* 054868 7F01FD38 C6260008 */ lwc1 $f6, 8($s1) -/* 05486C 7F01FD3C E62A0000 */ swc1 $f10, ($s1) -/* 054870 7F01FD40 C4520000 */ lwc1 $f18, ($v0) -/* 054874 7F01FD44 C60400B8 */ lwc1 $f4, 0xb8($s0) -/* 054878 7F01FD48 46122202 */ mul.s $f8, $f4, $f18 -/* 05487C 7F01FD4C 46083280 */ add.s $f10, $f6, $f8 -/* 054880 7F01FD50 E62A0008 */ swc1 $f10, 8($s1) -/* 054884 7F01FD54 8E090018 */ lw $t1, 0x18($s0) -/* 054888 7F01FD58 8FA6003C */ lw $a2, 0x3c($sp) -/* 05488C 7F01FD5C 8D250014 */ lw $a1, 0x14($t1) -/* 054890 7F01FD60 AFA30028 */ sw $v1, 0x28($sp) -/* 054894 7F01FD64 0FC07D85 */ jal sub_GAME_7F01F614 -/* 054898 7F01FD68 AFAA0010 */ sw $t2, 0x10($sp) -/* 05489C 7F01FD6C 10400006 */ beqz $v0, .L7F01FD88 -/* 0548A0 7F01FD70 8FA30028 */ lw $v1, 0x28($sp) -/* 0548A4 7F01FD74 8E0B0018 */ lw $t3, 0x18($s0) -/* 0548A8 7F01FD78 240C0001 */ li $t4, 1 -/* 0548AC 7F01FD7C 02201825 */ move $v1, $s1 -/* 0548B0 7F01FD80 AD620014 */ sw $v0, 0x14($t3) -/* 0548B4 7F01FD84 AFAC0030 */ sw $t4, 0x30($sp) -.L7F01FD88: -/* 0548B8 7F01FD88 8E0D0014 */ lw $t5, 0x14($s0) -/* 0548BC 7F01FD8C 31AF1000 */ andi $t7, $t5, 0x1000 -/* 0548C0 7F01FD90 55E0007A */ bnezl $t7, .L7F01FF7C -/* 0548C4 7F01FD94 C60E00AC */ lwc1 $f14, 0xac($s0) -/* 0548C8 7F01FD98 8E180018 */ lw $t8, 0x18($s0) -/* 0548CC 7F01FD9C 8C650000 */ lw $a1, ($v1) -/* 0548D0 7F01FDA0 8C660008 */ lw $a2, 8($v1) -/* 0548D4 7F01FDA4 0FC2CA5C */ jal stanGetPositionYValue -/* 0548D8 7F01FDA8 8F040014 */ lw $a0, 0x14($t8) -/* 0548DC 7F01FDAC 8E190014 */ lw $t9, 0x14($s0) -/* 0548E0 7F01FDB0 44806000 */ mtc1 $zero, $f12 -/* 0548E4 7F01FDB4 46000386 */ mov.s $f14, $f0 -/* 0548E8 7F01FDB8 332E0001 */ andi $t6, $t9, 1 -/* 0548EC 7F01FDBC 11C00014 */ beqz $t6, .L7F01FE10 -/* 0548F0 7F01FDC0 E60000AC */ swc1 $f0, 0xac($s0) -/* 0548F4 7F01FDC4 8FA40038 */ lw $a0, 0x38($sp) -/* 0548F8 7F01FDC8 8C880008 */ lw $t0, 8($a0) -/* 0548FC 7F01FDCC 8D050000 */ lw $a1, ($t0) -/* 054900 7F01FDD0 0FC1B1E7 */ jal modelGetNodeRwData -/* 054904 7F01FDD4 E7AE002C */ swc1 $f14, 0x2c($sp) -/* 054908 7F01FDD8 8E090014 */ lw $t1, 0x14($s0) -/* 05490C 7F01FDDC C60200AC */ lwc1 $f2, 0xac($s0) -/* 054910 7F01FDE0 2401FFFE */ li $at, -2 -/* 054914 7F01FDE4 C7AE002C */ lwc1 $f14, 0x2c($sp) -/* 054918 7F01FDE8 01215024 */ and $t2, $t1, $at -/* 05491C 7F01FDEC AE0A0014 */ sw $t2, 0x14($s0) -/* 054920 7F01FDF0 3C018005 */ lui $at, %hi(D_80051D10) -/* 054924 7F01FDF4 E60200A8 */ swc1 $f2, 0xa8($s0) -/* 054928 7F01FDF8 C4241D10 */ lwc1 $f4, %lo(D_80051D10)($at) -/* 05492C 7F01FDFC 46041483 */ div.s $f18, $f2, $f4 -/* 054930 7F01FE00 E61200A4 */ swc1 $f18, 0xa4($s0) -/* 054934 7F01FE04 C4460028 */ lwc1 $f6, 0x28($v0) -/* 054938 7F01FE08 10000055 */ b .L7F01FF60 -/* 05493C 7F01FE0C E4460038 */ swc1 $f6, 0x38($v0) -.L7F01FE10: -/* 054940 7F01FE10 C60800B4 */ lwc1 $f8, 0xb4($s0) -/* 054944 7F01FE14 260400A8 */ addiu $a0, $s0, 0xa8 -/* 054948 7F01FE18 260500B4 */ addiu $a1, $s0, 0xb4 -/* 05494C 7F01FE1C 46086032 */ c.eq.s $f12, $f8 -/* 054950 7F01FE20 3C068005 */ lui $a2, %hi(g_GlobalTimerDelta) -/* 054954 7F01FE24 45000007 */ bc1f .L7F01FE44 -/* 054958 7F01FE28 00000000 */ nop -/* 05495C 7F01FE2C C60200AC */ lwc1 $f2, 0xac($s0) -/* 054960 7F01FE30 C60000A8 */ lwc1 $f0, 0xa8($s0) -/* 054964 7F01FE34 4600103C */ c.lt.s $f2, $f0 -/* 054968 7F01FE38 00000000 */ nop -/* 05496C 7F01FE3C 45020013 */ bc1fl .L7F01FE8C -/* 054970 7F01FE40 4602003E */ c.le.s $f0, $f2 -.L7F01FE44: -/* 054974 7F01FE44 8CC68378 */ lw $a2, %lo(g_GlobalTimerDelta)($a2) -/* 054978 7F01FE48 0FC15F51 */ jal sub_GAME_7F057D44 -/* 05497C 7F01FE4C E7AE002C */ swc1 $f14, 0x2c($sp) -/* 054980 7F01FE50 C60200AC */ lwc1 $f2, 0xac($s0) -/* 054984 7F01FE54 C60000A8 */ lwc1 $f0, 0xa8($s0) -/* 054988 7F01FE58 44806000 */ mtc1 $zero, $f12 -/* 05498C 7F01FE5C C7AE002C */ lwc1 $f14, 0x2c($sp) -/* 054990 7F01FE60 4602003E */ c.le.s $f0, $f2 -/* 054994 7F01FE64 3C018005 */ lui $at, %hi(D_80051D14) -/* 054998 7F01FE68 45020008 */ bc1fl .L7F01FE8C -/* 05499C 7F01FE6C 4602003E */ c.le.s $f0, $f2 -/* 0549A0 7F01FE70 E60200A8 */ swc1 $f2, 0xa8($s0) -/* 0549A4 7F01FE74 C42A1D14 */ lwc1 $f10, %lo(D_80051D14)($at) -/* 0549A8 7F01FE78 E60C00B4 */ swc1 $f12, 0xb4($s0) -/* 0549AC 7F01FE7C C60000A8 */ lwc1 $f0, 0xa8($s0) -/* 0549B0 7F01FE80 460A1103 */ div.s $f4, $f2, $f10 -/* 0549B4 7F01FE84 E60400A4 */ swc1 $f4, 0xa4($s0) -/* 0549B8 7F01FE88 4602003E */ c.le.s $f0, $f2 -.L7F01FE8C: -/* 0549BC 7F01FE8C 3C038005 */ lui $v1, %hi(g_ClockTimer) -/* 0549C0 7F01FE90 24638374 */ addiu $v1, %lo(g_ClockTimer) # addiu $v1, $v1, -0x7c8c -/* 0549C4 7F01FE94 45020033 */ bc1fl .L7F01FF64 -/* 0549C8 7F01FE98 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 0549CC 7F01FE9C 8C6B0000 */ lw $t3, ($v1) -/* 0549D0 7F01FEA0 00001025 */ move $v0, $zero -/* 0549D4 7F01FEA4 3C018005 */ lui $at, %hi(D_80051D18) -/* 0549D8 7F01FEA8 19600011 */ blez $t3, .L7F01FEF0 -/* 0549DC 7F01FEAC 00000000 */ nop -/* 0549E0 7F01FEB0 C4201D18 */ lwc1 $f0, %lo(D_80051D18)($at) -/* 0549E4 7F01FEB4 C61200A4 */ lwc1 $f18, 0xa4($s0) -.L7F01FEB8: -/* 0549E8 7F01FEB8 C60A00B0 */ lwc1 $f10, 0xb0($s0) -/* 0549EC 7F01FEBC 24420001 */ addiu $v0, $v0, 1 -/* 0549F0 7F01FEC0 46009182 */ mul.s $f6, $f18, $f0 -/* 0549F4 7F01FEC4 C61200B8 */ lwc1 $f18, 0xb8($s0) -/* 0549F8 7F01FEC8 46005102 */ mul.s $f4, $f10, $f0 -/* 0549FC 7F01FECC 46023200 */ add.s $f8, $f6, $f2 -/* 054A00 7F01FED0 46009182 */ mul.s $f6, $f18, $f0 -/* 054A04 7F01FED4 E60400B0 */ swc1 $f4, 0xb0($s0) -/* 054A08 7F01FED8 E60800A4 */ swc1 $f8, 0xa4($s0) -/* 054A0C 7F01FEDC E60600B8 */ swc1 $f6, 0xb8($s0) -/* 054A10 7F01FEE0 8C6C0000 */ lw $t4, ($v1) -/* 054A14 7F01FEE4 004C082A */ slt $at, $v0, $t4 -/* 054A18 7F01FEE8 5420FFF3 */ bnezl $at, .L7F01FEB8 -/* 054A1C 7F01FEEC C61200A4 */ lwc1 $f18, 0xa4($s0) -.L7F01FEF0: -/* 054A20 7F01FEF0 3C018005 */ lui $at, %hi(D_80051D1C) -/* 054A24 7F01FEF4 C4221D1C */ lwc1 $f2, %lo(D_80051D1C)($at) -/* 054A28 7F01FEF8 3C018005 */ lui $at, %hi(D_80051D20) -/* 054A2C 7F01FEFC C42A1D20 */ lwc1 $f10, %lo(D_80051D20)($at) -/* 054A30 7F01FF00 C60800A4 */ lwc1 $f8, 0xa4($s0) -/* 054A34 7F01FF04 C60000B0 */ lwc1 $f0, 0xb0($s0) -/* 054A38 7F01FF08 3C018005 */ lui $at, %hi(D_80051D24) -/* 054A3C 7F01FF0C 460A4102 */ mul.s $f4, $f8, $f10 -/* 054A40 7F01FF10 4602003C */ c.lt.s $f0, $f2 -/* 054A44 7F01FF14 00000000 */ nop -/* 054A48 7F01FF18 45000011 */ bc1f .L7F01FF60 -/* 054A4C 7F01FF1C E60400A8 */ swc1 $f4, 0xa8($s0) -/* 054A50 7F01FF20 C4301D24 */ lwc1 $f16, %lo(D_80051D24)($at) -/* 054A54 7F01FF24 4600803C */ c.lt.s $f16, $f0 -/* 054A58 7F01FF28 00000000 */ nop -/* 054A5C 7F01FF2C 4502000D */ bc1fl .L7F01FF64 -/* 054A60 7F01FF30 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 054A64 7F01FF34 C60000B8 */ lwc1 $f0, 0xb8($s0) -/* 054A68 7F01FF38 4602003C */ c.lt.s $f0, $f2 -/* 054A6C 7F01FF3C 00000000 */ nop -/* 054A70 7F01FF40 45020008 */ bc1fl .L7F01FF64 -/* 054A74 7F01FF44 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 054A78 7F01FF48 4600803C */ c.lt.s $f16, $f0 -/* 054A7C 7F01FF4C 00000000 */ nop -/* 054A80 7F01FF50 45020004 */ bc1fl .L7F01FF64 -/* 054A84 7F01FF54 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 054A88 7F01FF58 E60C00B8 */ swc1 $f12, 0xb8($s0) -/* 054A8C 7F01FF5C E60C00B0 */ swc1 $f12, 0xb0($s0) -.L7F01FF60: -/* 054A90 7F01FF60 C60600A8 */ lwc1 $f6, 0xa8($s0) -.L7F01FF64: -/* 054A94 7F01FF64 C6320004 */ lwc1 $f18, 4($s1) -/* 054A98 7F01FF68 460E3201 */ sub.s $f8, $f6, $f14 -/* 054A9C 7F01FF6C 46089280 */ add.s $f10, $f18, $f8 -/* 054AA0 7F01FF70 10000002 */ b .L7F01FF7C -/* 054AA4 7F01FF74 E62A0004 */ swc1 $f10, 4($s1) -/* 054AA8 7F01FF78 C60E00AC */ lwc1 $f14, 0xac($s0) -.L7F01FF7C: -/* 054AAC 7F01FF7C 8FAD0044 */ lw $t5, 0x44($sp) -.L7F01FF80: -/* 054AB0 7F01FF80 24020001 */ li $v0, 1 -/* 054AB4 7F01FF84 E5AE0000 */ swc1 $f14, ($t5) -/* 054AB8 7F01FF88 8FAF0030 */ lw $t7, 0x30($sp) -/* 054ABC 7F01FF8C 8FB8003C */ lw $t8, 0x3c($sp) -/* 054AC0 7F01FF90 55E00007 */ bnezl $t7, .L7F01FFB0 -/* 054AC4 7F01FF94 8FBF0024 */ lw $ra, 0x24($sp) -/* 054AC8 7F01FF98 C7040000 */ lwc1 $f4, ($t8) -/* 054ACC 7F01FF9C E6240000 */ swc1 $f4, ($s1) -/* 054AD0 7F01FFA0 8FB9003C */ lw $t9, 0x3c($sp) -/* 054AD4 7F01FFA4 C7260008 */ lwc1 $f6, 8($t9) -/* 054AD8 7F01FFA8 E6260008 */ swc1 $f6, 8($s1) -/* 054ADC 7F01FFAC 8FBF0024 */ lw $ra, 0x24($sp) -.L7F01FFB0: -/* 054AE0 7F01FFB0 8FB0001C */ lw $s0, 0x1c($sp) -/* 054AE4 7F01FFB4 8FB10020 */ lw $s1, 0x20($sp) -/* 054AE8 7F01FFB8 03E00008 */ jr $ra -/* 054AEC 7F01FFBC 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif - - -#endif s32 chrGetNumFree(void) { @@ -2571,23 +1561,25 @@ s32 chrGetNumFree(void) return count; } -f32 get_007_health_mod(void); void chrSetMaxDamage(ChrRecord *chr, f32 maxdamage) { chr->maxdamage = (get_007_health_mod() * maxdamage); } + f32 chrGetMaxDamage(ChrRecord *chr) { return chr->maxdamage; } + void chrAddHealth(ChrRecord *chr, f32 health) { chr->damage -= (health * get_007_health_mod()); } + f32 chrGetArmor(ChrRecord *chr) { if (chr->damage < 0) @@ -2598,6 +1590,7 @@ f32 chrGetArmor(ChrRecord *chr) return 0; } + PropRecord *init_GUARDdata_with_set_values(PropRecord *arg0, Model *arg1, struct coord3d *arg2, f32 arg3, StandTile *arg4, struct AIListRecord *arg5) { ChrRecord *var_s0; @@ -2614,19 +1607,19 @@ PropRecord *init_GUARDdata_with_set_values(PropRecord *arg0, Model *arg1, struct break; } } - + arg0->type = PROP_TYPE_CHR; arg0->chr = var_s0; arg0->pos.f[0] = arg2->f[0]; arg0->pos.f[1] = arg2->f[1]; arg0->pos.f[2] = arg2->f[2]; arg0->stan = arg4; - + sub_GAME_7F06FF5C(arg1, (s32) sub_GAME_7F01FC10); - + arg1->unk00 = 0xA; arg1->chr = var_s0; - + setsuboffset(arg1, arg2); setsubroty(arg1, arg3); @@ -2635,7 +1628,7 @@ PropRecord *init_GUARDdata_with_set_values(PropRecord *arg0, Model *arg1, struct #else modelSetAnimPlaySpeed(arg1, animation_rate, 0.0f); #endif - + var_s0->chrnum = (s16) player1_guardID; player1_guardID += 1; var_s0->headnum = 0; @@ -2659,19 +1652,19 @@ PropRecord *init_GUARDdata_with_set_values(PropRecord *arg0, Model *arg1, struct var_s0->damage = 0.0f; var_s0->visionrange = 250.0f; var_s0->hearingscale = 1.0f; - + var_s0->maxdamage = get_007_health_mod() * 4.0f; set_color_shading_from_tile(arg0, &var_s0->nextcol); - + var_s0->shadecol.rgba[0] = var_s0->nextcol.rgba[0]; var_s0->shadecol.rgba[1] = var_s0->nextcol.rgba[1]; var_s0->shadecol.rgba[2] = var_s0->nextcol.rgba[2]; var_s0->shadecol.rgba[3] = var_s0->nextcol.rgba[3]; var_s0->fadealpha = 0xFF; - var_s0->weapons_held[2] = NULL; - var_s0->fireslot_word = 0; - var_s0->ptr_SEbuffer3 = NULL; - var_s0->ptr_SEbuffer4 = NULL; + var_s0->field_160[0].ptr_SEbuffer1 = NULL; + var_s0->field_160[0].ptr_SEbuffer2 = NULL; + var_s0->field_160[1].ptr_SEbuffer1 = NULL; + var_s0->field_160[1].ptr_SEbuffer2 = NULL; var_s0->field_178[0] = 0; var_s0->field_178[1] = 0; var_s0->chrflags = CHRFLAG_INIT; @@ -2699,8 +1692,8 @@ PropRecord *init_GUARDdata_with_set_values(PropRecord *arg0, Model *arg1, struct var_s0->chrseeshot = -1; var_s0->chrseedie = -1; var_s0->chrpreset1 = -1; - var_s0->unk180[0].unk00 = -1; - var_s0->unk180[1].unk00 = -1; + var_s0->beams[0].unk00 = -1; + var_s0->beams[1].unk00 = -1; var_s0->firecount[0] = 0; var_s0->firecount[1] = 0; var_s0->grenadeprob = 0; @@ -2722,16 +1715,14 @@ PropRecord *init_GUARDdata_with_set_values(PropRecord *arg0, Model *arg1, struct var_s0->handle_positiondata_hat = NULL; var_s0->chrwidth = 20.0f; var_s0->chrheight = 185.0f; - + sub_GAME_7F01FC10(arg1, &arg0->pos, &arg0->pos, &var_s0->ground); - chrPositionRelated7F020D94(var_s0); - + chrDetectRooms(var_s0); + return arg0; } - - /** * Address 0x7F0203B8. */ @@ -2751,158 +1742,57 @@ PropRecord * chrAllocate( Model * arg0, coord3d * arg1, f32 arg2, StandTile * a } - - -#ifdef NONMATCHING /** - * Address 0x7F020414. - * - * decomp status: - * - compiles: yes - * - stack resize: ok - * - identical instructions: fail - * - identical registers: fail - * - * notes: something isn't right around the area the nextSibling pointer is iterated. + * Address: 7F020414. */ -void disable_sounds_attached_to_player_then_something(PropRecord *prop) +void chrpropCleanupForRemoval(PropRecord *prop) { - PropRecord *p; ChrRecord *chr; - struct object_standard *model; + Model *model; + PropRecord *child; + PropRecord *prev; + ObjectRecord *obj; chr = prop->chr; model = chr->model; - if ((chr->ptr_SEbuffer1 != NULL) && (sndGetPlayingState(chr->ptr_SEbuffer1) != 0)) - { - sndDeactivate(chr->ptr_SEbuffer1); + if (chr->field_160[0].ptr_SEbuffer1 != NULL && sndGetPlayingState(chr->field_160[0].ptr_SEbuffer1) != 0) { + sndDeactivate(chr->field_160[0].ptr_SEbuffer1); } - - if ((chr->ptr_SEbuffer2 != NULL) && (sndGetPlayingState(chr->ptr_SEbuffer2) != 0)) - { - sndDeactivate(chr->ptr_SEbuffer2); + if (chr->field_160[0].ptr_SEbuffer2 != NULL && sndGetPlayingState(chr->field_160[0].ptr_SEbuffer2) != 0) { + sndDeactivate(chr->field_160[0].ptr_SEbuffer2); } - - if ((chr->ptr_SEbuffer3 != NULL) && (sndGetPlayingState(chr->ptr_SEbuffer3) != 0)) - { - sndDeactivate(chr->ptr_SEbuffer3); + if (chr->field_160[1].ptr_SEbuffer1 != NULL && sndGetPlayingState(chr->field_160[1].ptr_SEbuffer1) != 0) { + sndDeactivate(chr->field_160[1].ptr_SEbuffer1); } - - if ((chr->ptr_SEbuffer4 != NULL) && (sndGetPlayingState(chr->ptr_SEbuffer4) != 0)) - { - sndDeactivate(chr->ptr_SEbuffer4); + if (chr->field_160[1].ptr_SEbuffer2 != NULL && sndGetPlayingState(chr->field_160[1].ptr_SEbuffer2) != 0) { + sndDeactivate(chr->field_160[1].ptr_SEbuffer2); } sub_GAME_7F050DE8(model); chrpropDeregisterRooms(prop); - p = prop->child; - while (p != NULL) - { - objDetach(p); - objFreePermanently(p->chr, 1); - p = p->nextSibling; + child = prop->child; + + if (child != NULL) { + do { + obj = (ObjectRecord *)child->obj; + prev = child->prev; + objDetach(child); + objFreePermanently(obj, TRUE); + child = prev; + } while (child != NULL); } clear_aircraft_model_obj(model); chr->model = NULL; chr->chrnum = -1; - if (chr->field_20 != NULL) - { + + if (chr->field_20 != NULL) { sub_GAME_7F06B248(chr->field_20); } } -#else -GLOBAL_ASM( -.text -glabel disable_sounds_attached_to_player_then_something -/* 054F44 7F020414 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 054F48 7F020418 AFBF0024 */ sw $ra, 0x24($sp) -/* 054F4C 7F02041C AFB20020 */ sw $s2, 0x20($sp) -/* 054F50 7F020420 AFB1001C */ sw $s1, 0x1c($sp) -/* 054F54 7F020424 AFB00018 */ sw $s0, 0x18($sp) -/* 054F58 7F020428 8C920004 */ lw $s2, 4($a0) -/* 054F5C 7F02042C 00808025 */ move $s0, $a0 -/* 054F60 7F020430 8E4E001C */ lw $t6, 0x1c($s2) -/* 054F64 7F020434 AFAE0028 */ sw $t6, 0x28($sp) -/* 054F68 7F020438 8E450168 */ lw $a1, 0x168($s2) -/* 054F6C 7F02043C 50A00008 */ beql $a1, $zero, .L7F020460 -/* 054F70 7F020440 8E44016C */ lw $a0, 0x16c($s2) -/* 054F74 7F020444 0C00237C */ jal sndGetPlayingState -/* 054F78 7F020448 00A02025 */ move $a0, $a1 -/* 054F7C 7F02044C 50400004 */ beql $v0, $zero, .L7F020460 -/* 054F80 7F020450 8E44016C */ lw $a0, 0x16c($s2) -/* 054F84 7F020454 0C002408 */ jal sndDeactivate -/* 054F88 7F020458 8E440168 */ lw $a0, 0x168($s2) -/* 054F8C 7F02045C 8E44016C */ lw $a0, 0x16c($s2) -.L7F020460: -/* 054F90 7F020460 50800008 */ beql $a0, $zero, .L7F020484 -/* 054F94 7F020464 8E440170 */ lw $a0, 0x170($s2) -/* 054F98 7F020468 0C00237C */ jal sndGetPlayingState -/* 054F9C 7F02046C 00000000 */ nop -/* 054FA0 7F020470 50400004 */ beql $v0, $zero, .L7F020484 -/* 054FA4 7F020474 8E440170 */ lw $a0, 0x170($s2) -/* 054FA8 7F020478 0C002408 */ jal sndDeactivate -/* 054FAC 7F02047C 8E44016C */ lw $a0, 0x16c($s2) -/* 054FB0 7F020480 8E440170 */ lw $a0, 0x170($s2) -.L7F020484: -/* 054FB4 7F020484 50800008 */ beql $a0, $zero, .L7F0204A8 -/* 054FB8 7F020488 8E440174 */ lw $a0, 0x174($s2) -/* 054FBC 7F02048C 0C00237C */ jal sndGetPlayingState -/* 054FC0 7F020490 00000000 */ nop -/* 054FC4 7F020494 50400004 */ beql $v0, $zero, .L7F0204A8 -/* 054FC8 7F020498 8E440174 */ lw $a0, 0x174($s2) -/* 054FCC 7F02049C 0C002408 */ jal sndDeactivate -/* 054FD0 7F0204A0 8E440170 */ lw $a0, 0x170($s2) -/* 054FD4 7F0204A4 8E440174 */ lw $a0, 0x174($s2) -.L7F0204A8: -/* 054FD8 7F0204A8 10800007 */ beqz $a0, .L7F0204C8 -/* 054FDC 7F0204AC 00000000 */ nop -/* 054FE0 7F0204B0 0C00237C */ jal sndGetPlayingState -/* 054FE4 7F0204B4 00000000 */ nop -/* 054FE8 7F0204B8 10400003 */ beqz $v0, .L7F0204C8 -/* 054FEC 7F0204BC 00000000 */ nop -/* 054FF0 7F0204C0 0C002408 */ jal sndDeactivate -/* 054FF4 7F0204C4 8E440174 */ lw $a0, 0x174($s2) -.L7F0204C8: -/* 054FF8 7F0204C8 0FC1437A */ jal sub_GAME_7F050DE8 -/* 054FFC 7F0204CC 8FA40028 */ lw $a0, 0x28($sp) -/* 055000 7F0204D0 0FC0F863 */ jal chrpropDeregisterRooms -/* 055004 7F0204D4 02002025 */ move $a0, $s0 -/* 055008 7F0204D8 8E040020 */ lw $a0, 0x20($s0) -/* 05500C 7F0204DC 10800009 */ beqz $a0, .L7F020504 -/* 055010 7F0204E0 00000000 */ nop -.L7F0204E4: -/* 055014 7F0204E4 8C910004 */ lw $s1, 4($a0) -/* 055018 7F0204E8 0FC13011 */ jal objDetach -/* 05501C 7F0204EC 8C900024 */ lw $s0, 0x24($a0) -/* 055020 7F0204F0 02202025 */ move $a0, $s1 -/* 055024 7F0204F4 0FC10409 */ jal objFreePermanently -/* 055028 7F0204F8 24050001 */ li $a1, 1 -/* 05502C 7F0204FC 1600FFF9 */ bnez $s0, .L7F0204E4 -/* 055030 7F020500 02002025 */ move $a0, $s0 -.L7F020504: -/* 055034 7F020504 0FC1B0FE */ jal clear_aircraft_model_obj -/* 055038 7F020508 8FA40028 */ lw $a0, 0x28($sp) -/* 05503C 7F02050C 8E440020 */ lw $a0, 0x20($s2) -/* 055040 7F020510 240FFFFF */ li $t7, -1 -/* 055044 7F020514 AE40001C */ sw $zero, 0x1c($s2) -/* 055048 7F020518 10800003 */ beqz $a0, .L7F020528 -/* 05504C 7F02051C A64F0000 */ sh $t7, ($s2) -/* 055050 7F020520 0FC1AC92 */ jal sub_GAME_7F06B248 -/* 055054 7F020524 00000000 */ nop -.L7F020528: -/* 055058 7F020528 8FBF0024 */ lw $ra, 0x24($sp) -/* 05505C 7F02052C 8FB00018 */ lw $s0, 0x18($sp) -/* 055060 7F020530 8FB1001C */ lw $s1, 0x1c($sp) -/* 055064 7F020534 8FB20020 */ lw $s2, 0x20($sp) -/* 055068 7F020538 03E00008 */ jr $ra -/* 05506C 7F02053C 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif - /** @@ -2930,15 +1820,12 @@ void setAnimationRate(f32 arg0) } - - f32 getAnimationRate(void) { return animation_rate; } - /** * Address 0x7F0205F0 (all versions). */ @@ -2975,7 +1862,6 @@ void chrUpdateAimProperties( ChrRecord *self) } - /** * Address 0x7F0206D4. */ @@ -3024,150 +1910,51 @@ void chrSetHiddenToRandom(ChrRecord *self) } - - -#ifdef NONMATCHING /** - * Address 0x7F020794. + * Address: 7F020794 + * + * Flinch animation envelope. Maps a character's flinchcnt timer to a normalized + * intensity that goes 0->1 then falls 1->0, used to drive the flinch animation. + * + * Flinches happen when a character has body armor or has the CHRFLAG_INVINCIBLE flag and is shot in the arm or torso. + * + * Rise and fall are measured in VI retraces: 1/60 s on NTSC and 1/50 s on PAL. + * */ -f32 sub_GAME_7F020794(ChrRecord *arg0) +f32 chrGetFlinchAmount(ChrRecord *chr) { - // this method matches, but references D_80051D28,D_80051D2C - // for the M_TAU_F variable. - f32 temp_f2; f32 phi_f2; +#if defined(LEFTOVERDEBUG) + f32 rise = 10.0f; + f32 fall = 20.0f; +#else + f32 rise = 8.0f; + f32 fall = 16.0f; +#endif - temp_f2 = (f32) arg0->flinchcnt; + phi_f2 = chr->flinchcnt; + temp_f2 = (f32) phi_f2; - if (temp_f2 < 10.0f) + if (temp_f2 < rise) { - phi_f2 = sinf((temp_f2 * M_TAU_F * 0.25f) / 10.0f); + phi_f2 = sinf(((temp_f2 * M_TAU_F) * 0.25f) / rise); } else { - phi_f2 = 1.0f - sinf(((temp_f2 - 10.0f) * M_TAU_F * 0.25f) / 20.0f); + phi_f2 = 1.0f - sinf((((temp_f2 - rise) * M_TAU_F) * 0.25f) / fall); } return phi_f2; } -#else -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F020794 -/* 0552C4 7F020794 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0552C8 7F020798 AFBF0014 */ sw $ra, 0x14($sp) -/* 0552CC 7F02079C 808E0011 */ lb $t6, 0x11($a0) -/* 0552D0 7F0207A0 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 0552D4 7F0207A4 44810000 */ mtc1 $at, $f0 -/* 0552D8 7F0207A8 448E2000 */ mtc1 $t6, $f4 -/* 0552DC 7F0207AC 3C018005 */ lui $at, %hi(D_80051D2C) -/* 0552E0 7F0207B0 468020A0 */ cvt.s.w $f2, $f4 -/* 0552E4 7F0207B4 4600103C */ c.lt.s $f2, $f0 -/* 0552E8 7F0207B8 00000000 */ nop -/* 0552EC 7F0207BC 4502000D */ bc1fl .L7F0207F4 -/* 0552F0 7F0207C0 46001481 */ sub.s $f18, $f2, $f0 -/* 0552F4 7F0207C4 3C018005 */ lui $at, %hi(D_80051D28) -/* 0552F8 7F0207C8 C4261D28 */ lwc1 $f6, %lo(D_80051D28)($at) -/* 0552FC 7F0207CC 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 055300 7F0207D0 44815000 */ mtc1 $at, $f10 -/* 055304 7F0207D4 46061202 */ mul.s $f8, $f2, $f6 -/* 055308 7F0207D8 00000000 */ nop -/* 05530C 7F0207DC 460A4402 */ mul.s $f16, $f8, $f10 -/* 055310 7F0207E0 0FC15FAB */ jal sinf -/* 055314 7F0207E4 46008303 */ div.s $f12, $f16, $f0 -/* 055318 7F0207E8 1000000F */ b .L7F020828 -/* 05531C 7F0207EC 46000086 */ mov.s $f2, $f0 -/* 055320 7F0207F0 46001481 */ sub.s $f18, $f2, $f0 -.L7F0207F4: -/* 055324 7F0207F4 C4241D2C */ lwc1 $f4, %lo(D_80051D2C)($at) -/* 055328 7F0207F8 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 05532C 7F0207FC 44814000 */ mtc1 $at, $f8 -/* 055330 7F020800 46049182 */ mul.s $f6, $f18, $f4 -/* 055334 7F020804 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 055338 7F020808 44818000 */ mtc1 $at, $f16 -/* 05533C 7F02080C 46083282 */ mul.s $f10, $f6, $f8 -/* 055340 7F020810 0FC15FAB */ jal sinf -/* 055344 7F020814 46105303 */ div.s $f12, $f10, $f16 -/* 055348 7F020818 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 05534C 7F02081C 44819000 */ mtc1 $at, $f18 -/* 055350 7F020820 00000000 */ nop -/* 055354 7F020824 46009081 */ sub.s $f2, $f18, $f0 -.L7F020828: -/* 055358 7F020828 8FBF0014 */ lw $ra, 0x14($sp) -/* 05535C 7F02082C 27BD0018 */ addiu $sp, $sp, 0x18 -/* 055360 7F020830 46001006 */ mov.s $f0, $f2 -/* 055364 7F020834 03E00008 */ jr $ra -/* 055368 7F020838 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_80051D28 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D2C -.word 0x40c90fdb /*6.2831855*/ - -.text -glabel sub_GAME_7F020794 -/* 053014 7F020624 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 053018 7F020628 AFBF0014 */ sw $ra, 0x14($sp) -/* 05301C 7F02062C 808E0011 */ lb $t6, 0x11($a0) -/* 053020 7F020630 3C014100 */ li $at, 0x41000000 # 8.000000 -/* 053024 7F020634 44810000 */ mtc1 $at, $f0 -/* 053028 7F020638 448E2000 */ mtc1 $t6, $f4 -/* 05302C 7F02063C 3C018004 */ lui $at, %hi(D_80051D2C) -/* 053030 7F020640 468020A0 */ cvt.s.w $f2, $f4 -/* 053034 7F020644 4600103C */ c.lt.s $f2, $f0 -/* 053038 7F020648 00000000 */ nop -/* 05303C 7F02064C 4502000D */ bc1fl .L7F020684 -/* 053040 7F020650 46001481 */ sub.s $f18, $f2, $f0 -/* 053044 7F020654 3C018004 */ lui $at, %hi(D_80051D28) # $at, 0x8004 -/* 053048 7F020658 C4267E50 */ lwc1 $f6, %lo(D_80051D28)($at) -/* 05304C 7F02065C 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 053050 7F020660 44815000 */ mtc1 $at, $f10 -/* 053054 7F020664 46061202 */ mul.s $f8, $f2, $f6 -/* 053058 7F020668 00000000 */ nop -/* 05305C 7F02066C 460A4402 */ mul.s $f16, $f8, $f10 -/* 053060 7F020670 0FC1606B */ jal sinf -/* 053064 7F020674 46008303 */ div.s $f12, $f16, $f0 -/* 053068 7F020678 1000000F */ b .L7F0206B8 -/* 05306C 7F02067C 46000086 */ mov.s $f2, $f0 -/* 053070 7F020680 46001481 */ sub.s $f18, $f2, $f0 -.L7F020684: -/* 053074 7F020684 C4247E54 */ lwc1 $f4, %lo(D_80051D2C)($at) -/* 053078 7F020688 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 05307C 7F02068C 44814000 */ mtc1 $at, $f8 -/* 053080 7F020690 46049182 */ mul.s $f6, $f18, $f4 -/* 053084 7F020694 3C014180 */ li $at, 0x41800000 # 16.000000 -/* 053088 7F020698 44818000 */ mtc1 $at, $f16 -/* 05308C 7F02069C 46083282 */ mul.s $f10, $f6, $f8 -/* 053090 7F0206A0 0FC1606B */ jal sinf -/* 053094 7F0206A4 46105303 */ div.s $f12, $f10, $f16 -/* 053098 7F0206A8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 05309C 7F0206AC 44819000 */ mtc1 $at, $f18 -/* 0530A0 7F0206B0 00000000 */ nop -/* 0530A4 7F0206B4 46009081 */ sub.s $f2, $f18, $f0 -.L7F0206B8: -/* 0530A8 7F0206B8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0530AC 7F0206BC 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0530B0 7F0206C0 46001006 */ mov.s $f0, $f2 -/* 0530B4 7F0206C4 03E00008 */ jr $ra -/* 0530B8 7F0206C8 00000000 */ nop -) -#endif -#endif #ifdef BUGFIX_R1 -s32 not_in_us_7F0209EC(s32 bodynum, s32 headnum) +bool chrCanUseDKModeScaling(s32 bodynum, s32 headnum) { - if (j_text_trigger == 0) + if (j_text_trigger == FALSE) { - return 1; + return TRUE; } if ((bodynum != BODY_Boris) && @@ -3190,812 +1977,301 @@ s32 not_in_us_7F0209EC(s32 bodynum, s32 headnum) (headnum != BODY_Male_Pierce_Bond_Tuxedo) && (headnum != BODY_Male_Mishkin)) { - return 1; + return TRUE; } - return 0; + return FALSE; } #endif +#define PI_OVER_3 1.0471976f +#define FIVEPI_OVER_18 0.87266463f +/** + * Address: 7F02083C + */ +void chrHandleJointPositioned(enum CHR_RENDER_PART bodypart, Mtxf *matrix) +{ + f32 scale; + f32 xrot; + f32 yrot; + f32 zrot; + f32 tmp; + f32 amount; + f32 savedposz; + f32 savedposy; + f32 savedposx; + f32 sideback; + Mtxf rotmtx; + u16 hidden; + ChrRecord *chr; -#ifdef NONMATCHING -void sub_GAME_7F02083C(void) { + scale = 1.0f; -} +#ifdef BUGFIX_R1 + if (cheatIsActive(CHEAT_DK_MODE)) + { + chr = g_CurModelChr; + + if (chrCanUseDKModeScaling(chr->bodynum, chr->headnum)) + { + if (bodypart == CHR_RENDERPART_HEAD) + { + scale = 4.0f; + } + else if ((bodypart == CHR_RENDERPART_LEFT_ARM) || (bodypart == CHR_RENDERPART_RIGHT_ARM)) + { + if (!(g_CurModelChr->chrflags & CHRFLAG_08000000)) + { + scale = 2.5f; + } + } + } + } #else - -#ifdef VERSION_US -GLOBAL_ASM( -.text -glabel sub_GAME_7F02083C -/* 05536C 7F02083C 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 055370 7F020840 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 055374 7F020844 44812000 */ mtc1 $at, $f4 -/* 055378 7F020848 AFBF0014 */ sw $ra, 0x14($sp) -/* 05537C 7F02084C 00803025 */ move $a2, $a0 -/* 055380 7F020850 AFA5009C */ sw $a1, 0x9c($sp) -/* 055384 7F020854 AFA60098 */ sw $a2, 0x98($sp) -/* 055388 7F020858 2404000C */ li $a0, 12 -/* 05538C 7F02085C 0FC249EF */ jal cheatIsActive -/* 055390 7F020860 E7A40094 */ swc1 $f4, 0x94($sp) -/* 055394 7F020864 1040000E */ beqz $v0, .L7F0208A0 -/* 055398 7F020868 8FA60098 */ lw $a2, 0x98($sp) -/* 05539C 7F02086C 14C00005 */ bnez $a2, .L7F020884 -/* 0553A0 7F020870 24030002 */ li $v1, 2 -/* 0553A4 7F020874 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0553A8 7F020878 44813000 */ mtc1 $at, $f6 -/* 0553AC 7F02087C 10000008 */ b .L7F0208A0 -/* 0553B0 7F020880 E7A60094 */ swc1 $f6, 0x94($sp) -.L7F020884: -/* 0553B4 7F020884 10C30002 */ beq $a2, $v1, .L7F020890 -/* 0553B8 7F020888 24050003 */ li $a1, 3 -/* 0553BC 7F02088C 14C50004 */ bne $a2, $a1, .L7F0208A0 -.L7F020890: -/* 0553C0 7F020890 3C014020 */ li $at, 0x40200000 # 2.500000 -/* 0553C4 7F020894 44814000 */ mtc1 $at, $f8 -/* 0553C8 7F020898 00000000 */ nop -/* 0553CC 7F02089C E7A80094 */ swc1 $f8, 0x94($sp) -.L7F0208A0: -/* 0553D0 7F0208A0 24030002 */ li $v1, 2 -/* 0553D4 7F0208A4 10C30007 */ beq $a2, $v1, .L7F0208C4 -/* 0553D8 7F0208A8 24050003 */ li $a1, 3 -/* 0553DC 7F0208AC 10C50005 */ beq $a2, $a1, .L7F0208C4 -/* 0553E0 7F0208B0 24070001 */ li $a3, 1 -/* 0553E4 7F0208B4 50C70004 */ beql $a2, $a3, .L7F0208C8 -/* 0553E8 7F0208B8 44809000 */ mtc1 $zero, $f18 -/* 0553EC 7F0208BC 54C00132 */ bnezl $a2, .L7F020D88 -/* 0553F0 7F0208C0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0208C4: -/* 0553F4 7F0208C4 44809000 */ mtc1 $zero, $f18 -.L7F0208C8: -/* 0553F8 7F0208C8 24070001 */ li $a3, 1 -/* 0553FC 7F0208CC 3C0E8007 */ lui $t6, %hi(dword_CODE_bss_80069B60) -/* 055400 7F0208D0 46009386 */ mov.s $f14, $f18 -/* 055404 7F0208D4 46009306 */ mov.s $f12, $f18 -/* 055408 7F0208D8 14C50004 */ bne $a2, $a1, .L7F0208EC -/* 05540C 7F0208DC E7B20088 */ swc1 $f18, 0x88($sp) -/* 055410 7F0208E0 8DCE9B60 */ lw $t6, %lo(dword_CODE_bss_80069B60)($t6) -/* 055414 7F0208E4 10000043 */ b .L7F0209F4 -/* 055418 7F0208E8 C5CE0144 */ lwc1 $f14, 0x144($t6) -.L7F0208EC: -/* 05541C 7F0208EC 14C30004 */ bne $a2, $v1, .L7F020900 -/* 055420 7F0208F0 3C0F8007 */ lui $t7, %hi(dword_CODE_bss_80069B60) -/* 055424 7F0208F4 8DEF9B60 */ lw $t7, %lo(dword_CODE_bss_80069B60)($t7) -/* 055428 7F0208F8 1000003E */ b .L7F0209F4 -/* 05542C 7F0208FC C5EE0140 */ lwc1 $f14, 0x140($t7) -.L7F020900: -/* 055430 7F020900 14C7001C */ bne $a2, $a3, .L7F020974 -/* 055434 7F020904 3C048007 */ lui $a0, %hi(dword_CODE_bss_80069B60) -/* 055438 7F020908 8C849B60 */ lw $a0, %lo(dword_CODE_bss_80069B60)($a0) -/* 05543C 7F02090C 3C018005 */ lui $at, %hi(D_80051D30) -/* 055440 7F020910 94980012 */ lhu $t8, 0x12($a0) -/* 055444 7F020914 C48E0148 */ lwc1 $f14, 0x148($a0) -/* 055448 7F020918 33190400 */ andi $t9, $t8, 0x400 -/* 05544C 7F02091C 13200013 */ beqz $t9, .L7F02096C -/* 055450 7F020920 00000000 */ nop -/* 055454 7F020924 C4201D30 */ lwc1 $f0, %lo(D_80051D30)($at) -/* 055458 7F020928 3C018005 */ lui $at, %hi(D_80051D34) -/* 05545C 7F02092C 460E003C */ c.lt.s $f0, $f14 -/* 055460 7F020930 00000000 */ nop -/* 055464 7F020934 45000003 */ bc1f .L7F020944 -/* 055468 7F020938 00000000 */ nop -/* 05546C 7F02093C 1000000B */ b .L7F02096C -/* 055470 7F020940 46007381 */ sub.s $f14, $f14, $f0 -.L7F020944: -/* 055474 7F020944 C4201D34 */ lwc1 $f0, %lo(D_80051D34)($at) -/* 055478 7F020948 3C018005 */ lui $at, %hi(D_80051D38) -/* 05547C 7F02094C 4600703C */ c.lt.s $f14, $f0 -/* 055480 7F020950 00000000 */ nop -/* 055484 7F020954 45020005 */ bc1fl .L7F02096C -/* 055488 7F020958 46009386 */ mov.s $f14, $f18 -/* 05548C 7F02095C C42A1D38 */ lwc1 $f10, %lo(D_80051D38)($at) -/* 055490 7F020960 10000002 */ b .L7F02096C -/* 055494 7F020964 460A7380 */ add.s $f14, $f14, $f10 -/* 055498 7F020968 46009386 */ mov.s $f14, $f18 -.L7F02096C: -/* 05549C 7F02096C 10000021 */ b .L7F0209F4 -/* 0554A0 7F020970 C48C014C */ lwc1 $f12, 0x14c($a0) -.L7F020974: -/* 0554A4 7F020974 14C0001F */ bnez $a2, .L7F0209F4 -/* 0554A8 7F020978 3C048007 */ lui $a0, %hi(dword_CODE_bss_80069B60) -/* 0554AC 7F02097C 8C849B60 */ lw $a0, %lo(dword_CODE_bss_80069B60)($a0) -/* 0554B0 7F020980 94820012 */ lhu $v0, 0x12($a0) -/* 0554B4 7F020984 30480400 */ andi $t0, $v0, 0x400 -/* 0554B8 7F020988 51000014 */ beql $t0, $zero, .L7F0209DC -/* 0554BC 7F02098C 8C89001C */ lw $t1, 0x1c($a0) -/* 0554C0 7F020990 11000018 */ beqz $t0, .L7F0209F4 -/* 0554C4 7F020994 C48E0148 */ lwc1 $f14, 0x148($a0) -/* 0554C8 7F020998 3C018005 */ lui $at, %hi(D_80051D3C) -/* 0554CC 7F02099C C4201D3C */ lwc1 $f0, %lo(D_80051D3C)($at) -/* 0554D0 7F0209A0 3C018005 */ lui $at, %hi(D_80051D40) -/* 0554D4 7F0209A4 460E003C */ c.lt.s $f0, $f14 -/* 0554D8 7F0209A8 00000000 */ nop -/* 0554DC 7F0209AC 45000003 */ bc1f .L7F0209BC -/* 0554E0 7F0209B0 00000000 */ nop -/* 0554E4 7F0209B4 1000000F */ b .L7F0209F4 -/* 0554E8 7F0209B8 46000386 */ mov.s $f14, $f0 -.L7F0209BC: -/* 0554EC 7F0209BC C4201D40 */ lwc1 $f0, %lo(D_80051D40)($at) -/* 0554F0 7F0209C0 4600703C */ c.lt.s $f14, $f0 -/* 0554F4 7F0209C4 00000000 */ nop -/* 0554F8 7F0209C8 4500000A */ bc1f .L7F0209F4 -/* 0554FC 7F0209CC 00000000 */ nop -/* 055500 7F0209D0 10000008 */ b .L7F0209F4 -/* 055504 7F0209D4 46000386 */ mov.s $f14, $f0 -/* 055508 7F0209D8 8C89001C */ lw $t1, 0x1c($a0) -.L7F0209DC: -/* 05550C 7F0209DC 812A0024 */ lb $t2, 0x24($t1) -/* 055510 7F0209E0 51400004 */ beql $t2, $zero, .L7F0209F4 -/* 055514 7F0209E4 C48E0144 */ lwc1 $f14, 0x144($a0) -/* 055518 7F0209E8 10000002 */ b .L7F0209F4 -/* 05551C 7F0209EC C48E0140 */ lwc1 $f14, 0x140($a0) -/* 055520 7F0209F0 C48E0144 */ lwc1 $f14, 0x144($a0) -.L7F0209F4: -/* 055524 7F0209F4 3C048007 */ lui $a0, %hi(dword_CODE_bss_80069B60) -/* 055528 7F0209F8 8C849B60 */ lw $a0, %lo(dword_CODE_bss_80069B60)($a0) -/* 05552C 7F0209FC 808B0011 */ lb $t3, 0x11($a0) -/* 055530 7F020A00 05620055 */ bltzl $t3, .L7F020B58 -/* 055534 7F020A04 46127032 */ c.eq.s $f14, $f18 -/* 055538 7F020A08 50C50004 */ beql $a2, $a1, .L7F020A1C -/* 05553C 7F020A0C E7AC008C */ swc1 $f12, 0x8c($sp) -/* 055540 7F020A10 14C3001D */ bne $a2, $v1, .L7F020A88 -/* 055544 7F020A14 00000000 */ nop -/* 055548 7F020A18 E7AC008C */ swc1 $f12, 0x8c($sp) -.L7F020A1C: -/* 05554C 7F020A1C 0FC081E5 */ jal sub_GAME_7F020794 -/* 055550 7F020A20 E7AE0090 */ swc1 $f14, 0x90($sp) -/* 055554 7F020A24 3C018005 */ lui $at, %hi(D_80051D44) -/* 055558 7F020A28 C4241D44 */ lwc1 $f4, %lo(D_80051D44)($at) -/* 05555C 7F020A2C 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 055560 7F020A30 44814000 */ mtc1 $at, $f8 -/* 055564 7F020A34 46040182 */ mul.s $f6, $f0, $f4 -/* 055568 7F020A38 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 05556C 7F020A3C 44812000 */ mtc1 $at, $f4 -/* 055570 7F020A40 3C048007 */ lui $a0, %hi(dword_CODE_bss_80069B60) -/* 055574 7F020A44 8C849B60 */ lw $a0, %lo(dword_CODE_bss_80069B60)($a0) -/* 055578 7F020A48 C7AE0090 */ lwc1 $f14, 0x90($sp) -/* 05557C 7F020A4C 44809000 */ mtc1 $zero, $f18 -/* 055580 7F020A50 46083282 */ mul.s $f10, $f6, $f8 -/* 055584 7F020A54 94820012 */ lhu $v0, 0x12($a0) -/* 055588 7F020A58 C7AC008C */ lwc1 $f12, 0x8c($sp) -/* 05558C 7F020A5C 304C1000 */ andi $t4, $v0, 0x1000 -/* 055590 7F020A60 304D2000 */ andi $t5, $v0, 0x2000 -/* 055594 7F020A64 46045083 */ div.s $f2, $f10, $f4 -/* 055598 7F020A68 11800003 */ beqz $t4, .L7F020A78 -/* 05559C 7F020A6C 46027381 */ sub.s $f14, $f14, $f2 -/* 0555A0 7F020A70 10000038 */ b .L7F020B54 -/* 0555A4 7F020A74 46026301 */ sub.s $f12, $f12, $f2 -.L7F020A78: -/* 0555A8 7F020A78 51A00037 */ beql $t5, $zero, .L7F020B58 -/* 0555AC 7F020A7C 46127032 */ c.eq.s $f14, $f18 -/* 0555B0 7F020A80 10000034 */ b .L7F020B54 -/* 0555B4 7F020A84 46026300 */ add.s $f12, $f12, $f2 -.L7F020A88: -/* 0555B8 7F020A88 54C70033 */ bnel $a2, $a3, .L7F020B58 -/* 0555BC 7F020A8C 46127032 */ c.eq.s $f14, $f18 -/* 0555C0 7F020A90 E7AC008C */ swc1 $f12, 0x8c($sp) -/* 0555C4 7F020A94 0FC081E5 */ jal sub_GAME_7F020794 -/* 0555C8 7F020A98 E7AE0090 */ swc1 $f14, 0x90($sp) -/* 0555CC 7F020A9C 3C018005 */ lui $at, %hi(D_80051D48) -/* 0555D0 7F020AA0 C4261D48 */ lwc1 $f6, %lo(D_80051D48)($at) -/* 0555D4 7F020AA4 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0555D8 7F020AA8 44814000 */ mtc1 $at, $f8 -/* 0555DC 7F020AAC 46060402 */ mul.s $f16, $f0, $f6 -/* 0555E0 7F020AB0 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0555E4 7F020AB4 44812000 */ mtc1 $at, $f4 -/* 0555E8 7F020AB8 3C048007 */ lui $a0, %hi(dword_CODE_bss_80069B60) -/* 0555EC 7F020ABC 8C849B60 */ lw $a0, %lo(dword_CODE_bss_80069B60)($a0) -/* 0555F0 7F020AC0 C7AE0090 */ lwc1 $f14, 0x90($sp) -/* 0555F4 7F020AC4 44809000 */ mtc1 $zero, $f18 -/* 0555F8 7F020AC8 46088282 */ mul.s $f10, $f16, $f8 -/* 0555FC 7F020ACC 94820012 */ lhu $v0, 0x12($a0) -/* 055600 7F020AD0 C7AC008C */ lwc1 $f12, 0x8c($sp) -/* 055604 7F020AD4 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 055608 7F020AD8 304E1000 */ andi $t6, $v0, 0x1000 -/* 05560C 7F020ADC 304F2000 */ andi $t7, $v0, 0x2000 -/* 055610 7F020AE0 30584000 */ andi $t8, $v0, 0x4000 -/* 055614 7F020AE4 46045083 */ div.s $f2, $f10, $f4 -/* 055618 7F020AE8 30598000 */ andi $t9, $v0, 0x8000 -/* 05561C 7F020AEC 11C00003 */ beqz $t6, .L7F020AFC -/* 055620 7F020AF0 46027380 */ add.s $f14, $f14, $f2 -/* 055624 7F020AF4 10000004 */ b .L7F020B08 -/* 055628 7F020AF8 46026300 */ add.s $f12, $f12, $f2 -.L7F020AFC: -/* 05562C 7F020AFC 11E00002 */ beqz $t7, .L7F020B08 -/* 055630 7F020B00 00000000 */ nop -/* 055634 7F020B04 46026301 */ sub.s $f12, $f12, $f2 -.L7F020B08: -/* 055638 7F020B08 13000009 */ beqz $t8, .L7F020B30 -/* 05563C 7F020B0C 00000000 */ nop -/* 055640 7F020B10 44813000 */ mtc1 $at, $f6 -/* 055644 7F020B14 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 055648 7F020B18 44815000 */ mtc1 $at, $f10 -/* 05564C 7F020B1C 46068202 */ mul.s $f8, $f16, $f6 -/* 055650 7F020B20 460A4103 */ div.s $f4, $f8, $f10 -/* 055654 7F020B24 46049180 */ add.s $f6, $f18, $f4 -/* 055658 7F020B28 1000000A */ b .L7F020B54 -/* 05565C 7F020B2C E7A60088 */ swc1 $f6, 0x88($sp) -.L7F020B30: -/* 055660 7F020B30 13200008 */ beqz $t9, .L7F020B54 -/* 055664 7F020B34 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 055668 7F020B38 44814000 */ mtc1 $at, $f8 -/* 05566C 7F020B3C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 055670 7F020B40 44812000 */ mtc1 $at, $f4 -/* 055674 7F020B44 46088282 */ mul.s $f10, $f16, $f8 -/* 055678 7F020B48 46045183 */ div.s $f6, $f10, $f4 -/* 05567C 7F020B4C 46069201 */ sub.s $f8, $f18, $f6 -/* 055680 7F020B50 E7A80088 */ swc1 $f8, 0x88($sp) -.L7F020B54: -/* 055684 7F020B54 46127032 */ c.eq.s $f14, $f18 -.L7F020B58: -/* 055688 7F020B58 00000000 */ nop -/* 05568C 7F020B5C 45020011 */ bc1fl .L7F020BA4 -/* 055690 7F020B60 E7AC008C */ swc1 $f12, 0x8c($sp) -/* 055694 7F020B64 46126032 */ c.eq.s $f12, $f18 -/* 055698 7F020B68 C7AA0088 */ lwc1 $f10, 0x88($sp) -/* 05569C 7F020B6C 4502000D */ bc1fl .L7F020BA4 -/* 0556A0 7F020B70 E7AC008C */ swc1 $f12, 0x8c($sp) -/* 0556A4 7F020B74 46125032 */ c.eq.s $f10, $f18 -/* 0556A8 7F020B78 C7A40094 */ lwc1 $f4, 0x94($sp) -/* 0556AC 7F020B7C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0556B0 7F020B80 45020008 */ bc1fl .L7F020BA4 -/* 0556B4 7F020B84 E7AC008C */ swc1 $f12, 0x8c($sp) -/* 0556B8 7F020B88 44813000 */ mtc1 $at, $f6 -/* 0556BC 7F020B8C 00000000 */ nop -/* 0556C0 7F020B90 46062032 */ c.eq.s $f4, $f6 -/* 0556C4 7F020B94 00000000 */ nop -/* 0556C8 7F020B98 4503007B */ bc1tl .L7F020D88 -/* 0556CC 7F020B9C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0556D0 7F020BA0 E7AC008C */ swc1 $f12, 0x8c($sp) -.L7F020BA4: -/* 0556D4 7F020BA4 0FC0B064 */ jal chrlvGetSubrotySideback -/* 0556D8 7F020BA8 E7AE0090 */ swc1 $f14, 0x90($sp) -/* 0556DC 7F020BAC C7AE0090 */ lwc1 $f14, 0x90($sp) -/* 0556E0 7F020BB0 44809000 */ mtc1 $zero, $f18 -/* 0556E4 7F020BB4 C7AC008C */ lwc1 $f12, 0x8c($sp) -/* 0556E8 7F020BB8 E7A00070 */ swc1 $f0, 0x70($sp) -/* 0556EC 7F020BBC 4612703C */ c.lt.s $f14, $f18 -/* 0556F0 7F020BC0 3C018005 */ lui $at, %hi(D_80051D4C) -/* 0556F4 7F020BC4 45000003 */ bc1f .L7F020BD4 -/* 0556F8 7F020BC8 00000000 */ nop -/* 0556FC 7F020BCC 10000003 */ b .L7F020BDC -/* 055700 7F020BD0 46007387 */ neg.s $f14, $f14 -.L7F020BD4: -/* 055704 7F020BD4 C4281D4C */ lwc1 $f8, %lo(D_80051D4C)($at) -/* 055708 7F020BD8 460E4381 */ sub.s $f14, $f8, $f14 -.L7F020BDC: -/* 05570C 7F020BDC 4612603C */ c.lt.s $f12, $f18 -/* 055710 7F020BE0 3C018005 */ lui $at, %hi(D_80051D50) -/* 055714 7F020BE4 45020004 */ bc1fl .L7F020BF8 -/* 055718 7F020BE8 E7AC008C */ swc1 $f12, 0x8c($sp) -/* 05571C 7F020BEC C42A1D50 */ lwc1 $f10, %lo(D_80051D50)($at) -/* 055720 7F020BF0 460A6300 */ add.s $f12, $f12, $f10 -/* 055724 7F020BF4 E7AC008C */ swc1 $f12, 0x8c($sp) -.L7F020BF8: -/* 055728 7F020BF8 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 05572C 7F020BFC E7AE0090 */ swc1 $f14, 0x90($sp) -/* 055730 7F020C00 00402025 */ move $a0, $v0 -/* 055734 7F020C04 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 055738 7F020C08 8FA5009C */ lw $a1, 0x9c($sp) -/* 05573C 7F020C0C 8FA2009C */ lw $v0, 0x9c($sp) -/* 055740 7F020C10 C7AE0090 */ lwc1 $f14, 0x90($sp) -/* 055744 7F020C14 44809000 */ mtc1 $zero, $f18 -/* 055748 7F020C18 C4440030 */ lwc1 $f4, 0x30($v0) -/* 05574C 7F020C1C C7AC008C */ lwc1 $f12, 0x8c($sp) -/* 055750 7F020C20 46127032 */ c.eq.s $f14, $f18 -/* 055754 7F020C24 E7A40074 */ swc1 $f4, 0x74($sp) -/* 055758 7F020C28 C4460034 */ lwc1 $f6, 0x34($v0) -/* 05575C 7F020C2C 27A50030 */ addiu $a1, $sp, 0x30 -/* 055760 7F020C30 E7A60078 */ swc1 $f6, 0x78($sp) -/* 055764 7F020C34 C4480038 */ lwc1 $f8, 0x38($v0) -/* 055768 7F020C38 E7A8007C */ swc1 $f8, 0x7c($sp) -/* 05576C 7F020C3C E4520030 */ swc1 $f18, 0x30($v0) -/* 055770 7F020C40 E4520034 */ swc1 $f18, 0x34($v0) -/* 055774 7F020C44 45000006 */ bc1f .L7F020C60 -/* 055778 7F020C48 E4520038 */ swc1 $f18, 0x38($v0) -/* 05577C 7F020C4C C7AA0088 */ lwc1 $f10, 0x88($sp) -/* 055780 7F020C50 46125032 */ c.eq.s $f10, $f18 -/* 055784 7F020C54 00000000 */ nop -/* 055788 7F020C58 45010030 */ bc1t .L7F020D1C -/* 05578C 7F020C5C 00000000 */ nop -.L7F020C60: -/* 055790 7F020C60 C7A40070 */ lwc1 $f4, 0x70($sp) -/* 055794 7F020C64 3C018005 */ lui $at, %hi(D_80051D54) -/* 055798 7F020C68 46046301 */ sub.s $f12, $f12, $f4 -/* 05579C 7F020C6C 4612603C */ c.lt.s $f12, $f18 -/* 0557A0 7F020C70 00000000 */ nop -/* 0557A4 7F020C74 45000003 */ bc1f .L7F020C84 -/* 0557A8 7F020C78 00000000 */ nop -/* 0557AC 7F020C7C C4261D54 */ lwc1 $f6, %lo(D_80051D54)($at) -/* 0557B0 7F020C80 46066300 */ add.s $f12, $f12, $f6 -.L7F020C84: -/* 0557B4 7F020C84 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 0557B8 7F020C88 E7AE0090 */ swc1 $f14, 0x90($sp) -/* 0557BC 7F020C8C 27A40030 */ addiu $a0, $sp, 0x30 -/* 0557C0 7F020C90 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 0557C4 7F020C94 8FA5009C */ lw $a1, 0x9c($sp) -/* 0557C8 7F020C98 C7AE0090 */ lwc1 $f14, 0x90($sp) -/* 0557CC 7F020C9C 44809000 */ mtc1 $zero, $f18 -/* 0557D0 7F020CA0 27A50030 */ addiu $a1, $sp, 0x30 -/* 0557D4 7F020CA4 46127032 */ c.eq.s $f14, $f18 -/* 0557D8 7F020CA8 00000000 */ nop -/* 0557DC 7F020CAC 45030009 */ bc1tl .L7F020CD4 -/* 0557E0 7F020CB0 C7A80088 */ lwc1 $f8, 0x88($sp) -/* 0557E4 7F020CB4 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 0557E8 7F020CB8 46007306 */ mov.s $f12, $f14 -/* 0557EC 7F020CBC 27A40030 */ addiu $a0, $sp, 0x30 -/* 0557F0 7F020CC0 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 0557F4 7F020CC4 8FA5009C */ lw $a1, 0x9c($sp) -/* 0557F8 7F020CC8 44809000 */ mtc1 $zero, $f18 -/* 0557FC 7F020CCC 00000000 */ nop -/* 055800 7F020CD0 C7A80088 */ lwc1 $f8, 0x88($sp) -.L7F020CD4: -/* 055804 7F020CD4 27A50030 */ addiu $a1, $sp, 0x30 -/* 055808 7F020CD8 46124032 */ c.eq.s $f8, $f18 -/* 05580C 7F020CDC 00000000 */ nop -/* 055810 7F020CE0 45030007 */ bc1tl .L7F020D00 -/* 055814 7F020CE4 C7AC0070 */ lwc1 $f12, 0x70($sp) -/* 055818 7F020CE8 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 05581C 7F020CEC 46004306 */ mov.s $f12, $f8 -/* 055820 7F020CF0 27A40030 */ addiu $a0, $sp, 0x30 -/* 055824 7F020CF4 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 055828 7F020CF8 8FA5009C */ lw $a1, 0x9c($sp) -/* 05582C 7F020CFC C7AC0070 */ lwc1 $f12, 0x70($sp) -.L7F020D00: -/* 055830 7F020D00 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 055834 7F020D04 27A50030 */ addiu $a1, $sp, 0x30 -/* 055838 7F020D08 27A40030 */ addiu $a0, $sp, 0x30 -/* 05583C 7F020D0C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 055840 7F020D10 8FA5009C */ lw $a1, 0x9c($sp) -/* 055844 7F020D14 10000007 */ b .L7F020D34 -/* 055848 7F020D18 3C013F80 */ lui $at, 0x3f80 -.L7F020D1C: -/* 05584C 7F020D1C 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 055850 7F020D20 27A50030 */ addiu $a1, $sp, 0x30 -/* 055854 7F020D24 27A40030 */ addiu $a0, $sp, 0x30 -/* 055858 7F020D28 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 05585C 7F020D2C 8FA5009C */ lw $a1, 0x9c($sp) -/* 055860 7F020D30 3C013F80 */ li $at, 0x3F800000 # 1.000000 -.L7F020D34: -/* 055864 7F020D34 44812000 */ mtc1 $at, $f4 -/* 055868 7F020D38 C7AA0094 */ lwc1 $f10, 0x94($sp) -/* 05586C 7F020D3C 8FA5009C */ lw $a1, 0x9c($sp) -/* 055870 7F020D40 46045032 */ c.eq.s $f10, $f4 -/* 055874 7F020D44 00000000 */ nop -/* 055878 7F020D48 45030004 */ bc1tl .L7F020D5C -/* 05587C 7F020D4C C7A60074 */ lwc1 $f6, 0x74($sp) -/* 055880 7F020D50 0FC1629F */ jal matrix_scalar_multiply -/* 055884 7F020D54 46005306 */ mov.s $f12, $f10 -/* 055888 7F020D58 C7A60074 */ lwc1 $f6, 0x74($sp) -.L7F020D5C: -/* 05588C 7F020D5C 8FA8009C */ lw $t0, 0x9c($sp) -/* 055890 7F020D60 E5060030 */ swc1 $f6, 0x30($t0) -/* 055894 7F020D64 C7A80078 */ lwc1 $f8, 0x78($sp) -/* 055898 7F020D68 E5080034 */ swc1 $f8, 0x34($t0) -/* 05589C 7F020D6C C7A4007C */ lwc1 $f4, 0x7c($sp) -/* 0558A0 7F020D70 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 0558A4 7F020D74 E5040038 */ swc1 $f4, 0x38($t0) -/* 0558A8 7F020D78 00402025 */ move $a0, $v0 -/* 0558AC 7F020D7C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 0558B0 7F020D80 8FA5009C */ lw $a1, 0x9c($sp) -/* 0558B4 7F020D84 8FBF0014 */ lw $ra, 0x14($sp) -.L7F020D88: -/* 0558B8 7F020D88 27BD0098 */ addiu $sp, $sp, 0x98 -/* 0558BC 7F020D8C 03E00008 */ jr $ra -/* 0558C0 7F020D90 00000000 */ nop -) + if (cheatIsActive(CHEAT_DK_MODE)) + { + if (bodypart == CHR_RENDERPART_HEAD) + { + scale = 4.0f; + } + else if ((bodypart == CHR_RENDERPART_LEFT_ARM) || (bodypart == CHR_RENDERPART_RIGHT_ARM)) + { + scale = 2.5f; + } + } #endif + if ((((bodypart != CHR_RENDERPART_LEFT_ARM) && (bodypart != CHR_RENDERPART_RIGHT_ARM)) && (bodypart != CHR_RENDERPART_TORSO)) && (bodypart != CHR_RENDERPART_HEAD)) + { + return; + } -#ifndef VERSION_US -GLOBAL_ASM( -.text -glabel sub_GAME_7F02083C -/* 05561C 7F020AAC 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 055620 7F020AB0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 055624 7F020AB4 44812000 */ mtc1 $at, $f4 -/* 055628 7F020AB8 AFBF0014 */ sw $ra, 0x14($sp) -/* 05562C 7F020ABC 00803825 */ move $a3, $a0 -/* 055630 7F020AC0 AFA5009C */ sw $a1, 0x9c($sp) -/* 055634 7F020AC4 AFA70098 */ sw $a3, 0x98($sp) -/* 055638 7F020AC8 2404000C */ li $a0, 12 -/* 05563C 7F020ACC 0FC24CCF */ jal cheatIsActive -/* 055640 7F020AD0 E7A40094 */ swc1 $f4, 0x94($sp) -/* 055644 7F020AD4 1040001C */ beqz $v0, .L7F020B48 -/* 055648 7F020AD8 8FA70098 */ lw $a3, 0x98($sp) -/* 05564C 7F020ADC 3C068007 */ lui $a2, %hi(dword_CODE_bss_80069B60) # $a2, 0x8007 -/* 055650 7F020AE0 8CC69BA0 */ lw $a2, %lo(dword_CODE_bss_80069B60)($a2) -/* 055654 7F020AE4 80C4000F */ lb $a0, 0xf($a2) -/* 055658 7F020AE8 80C50006 */ lb $a1, 6($a2) -/* 05565C 7F020AEC 0FC0827B */ jal not_in_us_7F0209EC -/* 055660 7F020AF0 AFA70098 */ sw $a3, 0x98($sp) -/* 055664 7F020AF4 10400014 */ beqz $v0, .L7F020B48 -/* 055668 7F020AF8 8FA70098 */ lw $a3, 0x98($sp) -/* 05566C 7F020AFC 14E00005 */ bnez $a3, .L7F020B14 -/* 055670 7F020B00 24030002 */ li $v1, 2 -/* 055674 7F020B04 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 055678 7F020B08 44813000 */ mtc1 $at, $f6 -/* 05567C 7F020B0C 1000000E */ b .L7F020B48 -/* 055680 7F020B10 E7A60094 */ swc1 $f6, 0x94($sp) -.L7F020B14: -/* 055684 7F020B14 10E30002 */ beq $a3, $v1, .L7F020B20 -/* 055688 7F020B18 24050003 */ li $a1, 3 -/* 05568C 7F020B1C 14E5000A */ bne $a3, $a1, .L7F020B48 -.L7F020B20: -/* 055690 7F020B20 3C0E8007 */ lui $t6, %hi(dword_CODE_bss_80069B60) # $t6, 0x8007 -/* 055694 7F020B24 8DCE9BA0 */ lw $t6, %lo(dword_CODE_bss_80069B60)($t6) -/* 055698 7F020B28 3C014020 */ li $at, 0x40200000 # 2.500000 -/* 05569C 7F020B2C 8DCF0014 */ lw $t7, 0x14($t6) -/* 0556A0 7F020B30 000FC100 */ sll $t8, $t7, 4 -/* 0556A4 7F020B34 07020005 */ bltzl $t8, .L7F020B4C -/* 0556A8 7F020B38 24030002 */ li $v1, 2 -/* 0556AC 7F020B3C 44814000 */ mtc1 $at, $f8 -/* 0556B0 7F020B40 00000000 */ nop -/* 0556B4 7F020B44 E7A80094 */ swc1 $f8, 0x94($sp) -.L7F020B48: -/* 0556B8 7F020B48 24030002 */ li $v1, 2 -.L7F020B4C: -/* 0556BC 7F020B4C 10E30007 */ beq $a3, $v1, .L7F020B6C -/* 0556C0 7F020B50 24050003 */ li $a1, 3 -/* 0556C4 7F020B54 10E50005 */ beq $a3, $a1, .L7F020B6C -/* 0556C8 7F020B58 24040001 */ li $a0, 1 -/* 0556CC 7F020B5C 50E40004 */ beql $a3, $a0, .L7F020B70 -/* 0556D0 7F020B60 44809000 */ mtc1 $zero, $f18 -/* 0556D4 7F020B64 54E0012E */ bnezl $a3, .L7F021020 -/* 0556D8 7F020B68 8FBF0014 */ lw $ra, 0x14($sp) -.L7F020B6C: -/* 0556DC 7F020B6C 44809000 */ mtc1 $zero, $f18 -.L7F020B70: -/* 0556E0 7F020B70 3C068007 */ lui $a2, %hi(dword_CODE_bss_80069B60) # $a2, 0x8007 -/* 0556E4 7F020B74 24040001 */ li $a0, 1 -/* 0556E8 7F020B78 8CC69BA0 */ lw $a2, %lo(dword_CODE_bss_80069B60)($a2) -/* 0556EC 7F020B7C 46009386 */ mov.s $f14, $f18 -/* 0556F0 7F020B80 46009306 */ mov.s $f12, $f18 -/* 0556F4 7F020B84 14E50003 */ bne $a3, $a1, .L7F020B94 -/* 0556F8 7F020B88 E7B20088 */ swc1 $f18, 0x88($sp) -/* 0556FC 7F020B8C 10000040 */ b .L7F020C90 -/* 055700 7F020B90 C4CE0144 */ lwc1 $f14, 0x144($a2) -.L7F020B94: -/* 055704 7F020B94 14E30003 */ bne $a3, $v1, .L7F020BA4 -/* 055708 7F020B98 00000000 */ nop -/* 05570C 7F020B9C 1000003C */ b .L7F020C90 -/* 055710 7F020BA0 C4CE0140 */ lwc1 $f14, 0x140($a2) -.L7F020BA4: -/* 055714 7F020BA4 14E4001B */ bne $a3, $a0, .L7F020C14 -/* 055718 7F020BA8 00000000 */ nop -/* 05571C 7F020BAC 94D90012 */ lhu $t9, 0x12($a2) -/* 055720 7F020BB0 C4CE0148 */ lwc1 $f14, 0x148($a2) -/* 055724 7F020BB4 3C018005 */ lui $at, %hi(D_80051D30) # $at, 0x8005 -/* 055728 7F020BB8 33280400 */ andi $t0, $t9, 0x400 -/* 05572C 7F020BBC 11000013 */ beqz $t0, .L7F020C0C -/* 055730 7F020BC0 00000000 */ nop -/* 055734 7F020BC4 C4201D60 */ lwc1 $f0, %lo(D_80051D30)($at) -/* 055738 7F020BC8 3C018005 */ lui $at, %hi(D_80051D34) # $at, 0x8005 -/* 05573C 7F020BCC 460E003C */ c.lt.s $f0, $f14 -/* 055740 7F020BD0 00000000 */ nop -/* 055744 7F020BD4 45000003 */ bc1f .L7F020BE4 -/* 055748 7F020BD8 00000000 */ nop -/* 05574C 7F020BDC 1000000B */ b .L7F020C0C -/* 055750 7F020BE0 46007381 */ sub.s $f14, $f14, $f0 -.L7F020BE4: -/* 055754 7F020BE4 C4201D64 */ lwc1 $f0, %lo(D_80051D34)($at) -/* 055758 7F020BE8 3C018005 */ lui $at, %hi(D_80051D38) # $at, 0x8005 -/* 05575C 7F020BEC 4600703C */ c.lt.s $f14, $f0 -/* 055760 7F020BF0 00000000 */ nop -/* 055764 7F020BF4 45020005 */ bc1fl .L7F020C0C -/* 055768 7F020BF8 46009386 */ mov.s $f14, $f18 -/* 05576C 7F020BFC C42A1D68 */ lwc1 $f10, %lo(D_80051D38)($at) -/* 055770 7F020C00 10000002 */ b .L7F020C0C -/* 055774 7F020C04 460A7380 */ add.s $f14, $f14, $f10 -/* 055778 7F020C08 46009386 */ mov.s $f14, $f18 -.L7F020C0C: -/* 05577C 7F020C0C 10000020 */ b .L7F020C90 -/* 055780 7F020C10 C4CC014C */ lwc1 $f12, 0x14c($a2) -.L7F020C14: -/* 055784 7F020C14 54E0001F */ bnezl $a3, .L7F020C94 -/* 055788 7F020C18 80CC0011 */ lb $t4, 0x11($a2) -/* 05578C 7F020C1C 94C20012 */ lhu $v0, 0x12($a2) -/* 055790 7F020C20 30490400 */ andi $t1, $v0, 0x400 -/* 055794 7F020C24 51200014 */ beql $t1, $zero, .L7F020C78 -/* 055798 7F020C28 8CCA001C */ lw $t2, 0x1c($a2) -/* 05579C 7F020C2C 11200018 */ beqz $t1, .L7F020C90 -/* 0557A0 7F020C30 C4CE0148 */ lwc1 $f14, 0x148($a2) -/* 0557A4 7F020C34 3C018005 */ lui $at, %hi(D_80051D3C) # $at, 0x8005 -/* 0557A8 7F020C38 C4201D6C */ lwc1 $f0, %lo(D_80051D3C)($at) -/* 0557AC 7F020C3C 3C018005 */ lui $at, %hi(D_80051D40) # $at, 0x8005 -/* 0557B0 7F020C40 460E003C */ c.lt.s $f0, $f14 -/* 0557B4 7F020C44 00000000 */ nop -/* 0557B8 7F020C48 45000003 */ bc1f .L7F020C58 -/* 0557BC 7F020C4C 00000000 */ nop -/* 0557C0 7F020C50 1000000F */ b .L7F020C90 -/* 0557C4 7F020C54 46000386 */ mov.s $f14, $f0 -.L7F020C58: -/* 0557C8 7F020C58 C4201D70 */ lwc1 $f0, %lo(D_80051D40)($at) -/* 0557CC 7F020C5C 4600703C */ c.lt.s $f14, $f0 -/* 0557D0 7F020C60 00000000 */ nop -/* 0557D4 7F020C64 4502000B */ bc1fl .L7F020C94 -/* 0557D8 7F020C68 80CC0011 */ lb $t4, 0x11($a2) -/* 0557DC 7F020C6C 10000008 */ b .L7F020C90 -/* 0557E0 7F020C70 46000386 */ mov.s $f14, $f0 -/* 0557E4 7F020C74 8CCA001C */ lw $t2, 0x1c($a2) -.L7F020C78: -/* 0557E8 7F020C78 814B0024 */ lb $t3, 0x24($t2) -/* 0557EC 7F020C7C 51600004 */ beql $t3, $zero, .L7F020C90 -/* 0557F0 7F020C80 C4CE0144 */ lwc1 $f14, 0x144($a2) -/* 0557F4 7F020C84 10000002 */ b .L7F020C90 -/* 0557F8 7F020C88 C4CE0140 */ lwc1 $f14, 0x140($a2) -/* 0557FC 7F020C8C C4CE0144 */ lwc1 $f14, 0x144($a2) -.L7F020C90: -/* 055800 7F020C90 80CC0011 */ lb $t4, 0x11($a2) -.L7F020C94: -/* 055804 7F020C94 05820056 */ bltzl $t4, .L7F020DF0 -/* 055808 7F020C98 46127032 */ c.eq.s $f14, $f18 -/* 05580C 7F020C9C 50E50004 */ beql $a3, $a1, .L7F020CB0 -/* 055810 7F020CA0 00C02025 */ move $a0, $a2 -/* 055814 7F020CA4 14E3001E */ bne $a3, $v1, .L7F020D20 -/* 055818 7F020CA8 00000000 */ nop -/* 05581C 7F020CAC 00C02025 */ move $a0, $a2 -.L7F020CB0: -/* 055820 7F020CB0 E7AC008C */ swc1 $f12, 0x8c($sp) -/* 055824 7F020CB4 0FC08251 */ jal sub_GAME_7F020794 -/* 055828 7F020CB8 E7AE0090 */ swc1 $f14, 0x90($sp) -/* 05582C 7F020CBC 3C018005 */ lui $at, %hi(D_80051D44) # $at, 0x8005 -/* 055830 7F020CC0 C4241D74 */ lwc1 $f4, %lo(D_80051D44)($at) -/* 055834 7F020CC4 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 055838 7F020CC8 44814000 */ mtc1 $at, $f8 -/* 05583C 7F020CCC 46040182 */ mul.s $f6, $f0, $f4 -/* 055840 7F020CD0 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 055844 7F020CD4 44812000 */ mtc1 $at, $f4 -/* 055848 7F020CD8 3C068007 */ lui $a2, %hi(dword_CODE_bss_80069B60) # $a2, 0x8007 -/* 05584C 7F020CDC 8CC69BA0 */ lw $a2, %lo(dword_CODE_bss_80069B60)($a2) -/* 055850 7F020CE0 C7AE0090 */ lwc1 $f14, 0x90($sp) -/* 055854 7F020CE4 44809000 */ mtc1 $zero, $f18 -/* 055858 7F020CE8 46083282 */ mul.s $f10, $f6, $f8 -/* 05585C 7F020CEC 94C20012 */ lhu $v0, 0x12($a2) -/* 055860 7F020CF0 C7AC008C */ lwc1 $f12, 0x8c($sp) -/* 055864 7F020CF4 304D1000 */ andi $t5, $v0, 0x1000 -/* 055868 7F020CF8 304E2000 */ andi $t6, $v0, 0x2000 -/* 05586C 7F020CFC 46045083 */ div.s $f2, $f10, $f4 -/* 055870 7F020D00 11A00003 */ beqz $t5, .L7F020D10 -/* 055874 7F020D04 46027381 */ sub.s $f14, $f14, $f2 -/* 055878 7F020D08 10000038 */ b .L7F020DEC -/* 05587C 7F020D0C 46026301 */ sub.s $f12, $f12, $f2 -.L7F020D10: -/* 055880 7F020D10 51C00037 */ beql $t6, $zero, .L7F020DF0 -/* 055884 7F020D14 46127032 */ c.eq.s $f14, $f18 -/* 055888 7F020D18 10000034 */ b .L7F020DEC -/* 05588C 7F020D1C 46026300 */ add.s $f12, $f12, $f2 -.L7F020D20: -/* 055890 7F020D20 14E40032 */ bne $a3, $a0, .L7F020DEC -/* 055894 7F020D24 00C02025 */ move $a0, $a2 -/* 055898 7F020D28 E7AC008C */ swc1 $f12, 0x8c($sp) -/* 05589C 7F020D2C 0FC08251 */ jal sub_GAME_7F020794 -/* 0558A0 7F020D30 E7AE0090 */ swc1 $f14, 0x90($sp) -/* 0558A4 7F020D34 3C018005 */ lui $at, %hi(D_80051D48) # $at, 0x8005 -/* 0558A8 7F020D38 C4261D78 */ lwc1 $f6, %lo(D_80051D48)($at) -/* 0558AC 7F020D3C 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0558B0 7F020D40 44814000 */ mtc1 $at, $f8 -/* 0558B4 7F020D44 46060402 */ mul.s $f16, $f0, $f6 -/* 0558B8 7F020D48 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0558BC 7F020D4C 44812000 */ mtc1 $at, $f4 -/* 0558C0 7F020D50 3C068007 */ lui $a2, %hi(dword_CODE_bss_80069B60) # $a2, 0x8007 -/* 0558C4 7F020D54 8CC69BA0 */ lw $a2, %lo(dword_CODE_bss_80069B60)($a2) -/* 0558C8 7F020D58 C7AE0090 */ lwc1 $f14, 0x90($sp) -/* 0558CC 7F020D5C 44809000 */ mtc1 $zero, $f18 -/* 0558D0 7F020D60 46088282 */ mul.s $f10, $f16, $f8 -/* 0558D4 7F020D64 94C20012 */ lhu $v0, 0x12($a2) -/* 0558D8 7F020D68 C7AC008C */ lwc1 $f12, 0x8c($sp) -/* 0558DC 7F020D6C 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 0558E0 7F020D70 304F1000 */ andi $t7, $v0, 0x1000 -/* 0558E4 7F020D74 30582000 */ andi $t8, $v0, 0x2000 -/* 0558E8 7F020D78 30594000 */ andi $t9, $v0, 0x4000 -/* 0558EC 7F020D7C 46045083 */ div.s $f2, $f10, $f4 -/* 0558F0 7F020D80 30488000 */ andi $t0, $v0, 0x8000 -/* 0558F4 7F020D84 11E00003 */ beqz $t7, .L7F020D94 -/* 0558F8 7F020D88 46027380 */ add.s $f14, $f14, $f2 -/* 0558FC 7F020D8C 10000004 */ b .L7F020DA0 -/* 055900 7F020D90 46026300 */ add.s $f12, $f12, $f2 -.L7F020D94: -/* 055904 7F020D94 13000002 */ beqz $t8, .L7F020DA0 -/* 055908 7F020D98 00000000 */ nop -/* 05590C 7F020D9C 46026301 */ sub.s $f12, $f12, $f2 -.L7F020DA0: -/* 055910 7F020DA0 13200009 */ beqz $t9, .L7F020DC8 -/* 055914 7F020DA4 00000000 */ nop -/* 055918 7F020DA8 44813000 */ mtc1 $at, $f6 -/* 05591C 7F020DAC 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 055920 7F020DB0 44815000 */ mtc1 $at, $f10 -/* 055924 7F020DB4 46068202 */ mul.s $f8, $f16, $f6 -/* 055928 7F020DB8 460A4103 */ div.s $f4, $f8, $f10 -/* 05592C 7F020DBC 46049180 */ add.s $f6, $f18, $f4 -/* 055930 7F020DC0 1000000A */ b .L7F020DEC -/* 055934 7F020DC4 E7A60088 */ swc1 $f6, 0x88($sp) -.L7F020DC8: -/* 055938 7F020DC8 11000008 */ beqz $t0, .L7F020DEC -/* 05593C 7F020DCC 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 055940 7F020DD0 44814000 */ mtc1 $at, $f8 -/* 055944 7F020DD4 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 055948 7F020DD8 44812000 */ mtc1 $at, $f4 -/* 05594C 7F020DDC 46088282 */ mul.s $f10, $f16, $f8 -/* 055950 7F020DE0 46045183 */ div.s $f6, $f10, $f4 -/* 055954 7F020DE4 46069201 */ sub.s $f8, $f18, $f6 -/* 055958 7F020DE8 E7A80088 */ swc1 $f8, 0x88($sp) -.L7F020DEC: -/* 05595C 7F020DEC 46127032 */ c.eq.s $f14, $f18 -.L7F020DF0: -/* 055960 7F020DF0 00C02025 */ move $a0, $a2 -/* 055964 7F020DF4 45020011 */ bc1fl .L7F020E3C -/* 055968 7F020DF8 E7AC008C */ swc1 $f12, 0x8c($sp) -/* 05596C 7F020DFC 46126032 */ c.eq.s $f12, $f18 -/* 055970 7F020E00 C7AA0088 */ lwc1 $f10, 0x88($sp) -/* 055974 7F020E04 4502000D */ bc1fl .L7F020E3C -/* 055978 7F020E08 E7AC008C */ swc1 $f12, 0x8c($sp) -/* 05597C 7F020E0C 46125032 */ c.eq.s $f10, $f18 -/* 055980 7F020E10 C7A40094 */ lwc1 $f4, 0x94($sp) -/* 055984 7F020E14 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 055988 7F020E18 45020008 */ bc1fl .L7F020E3C -/* 05598C 7F020E1C E7AC008C */ swc1 $f12, 0x8c($sp) -/* 055990 7F020E20 44813000 */ mtc1 $at, $f6 -/* 055994 7F020E24 00000000 */ nop -/* 055998 7F020E28 46062032 */ c.eq.s $f4, $f6 -/* 05599C 7F020E2C 00000000 */ nop -/* 0559A0 7F020E30 4503007B */ bc1tl .L7F021020 -/* 0559A4 7F020E34 8FBF0014 */ lw $ra, 0x14($sp) -/* 0559A8 7F020E38 E7AC008C */ swc1 $f12, 0x8c($sp) -.L7F020E3C: -/* 0559AC 7F020E3C 0FC0B126 */ jal chrlvGetSubrotySideback -/* 0559B0 7F020E40 E7AE0090 */ swc1 $f14, 0x90($sp) -/* 0559B4 7F020E44 C7AE0090 */ lwc1 $f14, 0x90($sp) -/* 0559B8 7F020E48 44809000 */ mtc1 $zero, $f18 -/* 0559BC 7F020E4C C7AC008C */ lwc1 $f12, 0x8c($sp) -/* 0559C0 7F020E50 E7A00070 */ swc1 $f0, 0x70($sp) -/* 0559C4 7F020E54 4612703C */ c.lt.s $f14, $f18 -/* 0559C8 7F020E58 3C018005 */ lui $at, %hi(D_80051D4C) # $at, 0x8005 -/* 0559CC 7F020E5C 45000003 */ bc1f .L7F020E6C -/* 0559D0 7F020E60 00000000 */ nop -/* 0559D4 7F020E64 10000003 */ b .L7F020E74 -/* 0559D8 7F020E68 46007387 */ neg.s $f14, $f14 -.L7F020E6C: -/* 0559DC 7F020E6C C4281D7C */ lwc1 $f8, %lo(D_80051D4C)($at) -/* 0559E0 7F020E70 460E4381 */ sub.s $f14, $f8, $f14 -.L7F020E74: -/* 0559E4 7F020E74 4612603C */ c.lt.s $f12, $f18 -/* 0559E8 7F020E78 3C018005 */ lui $at, %hi(D_80051D50) # $at, 0x8005 -/* 0559EC 7F020E7C 45020004 */ bc1fl .L7F020E90 -/* 0559F0 7F020E80 E7AC008C */ swc1 $f12, 0x8c($sp) -/* 0559F4 7F020E84 C42A1D80 */ lwc1 $f10, %lo(D_80051D50)($at) -/* 0559F8 7F020E88 460A6300 */ add.s $f12, $f12, $f10 -/* 0559FC 7F020E8C E7AC008C */ swc1 $f12, 0x8c($sp) -.L7F020E90: -/* 055A00 7F020E90 0FC1E28D */ jal currentPlayerGetMatrix10D4 -/* 055A04 7F020E94 E7AE0090 */ swc1 $f14, 0x90($sp) -/* 055A08 7F020E98 00402025 */ move $a0, $v0 -/* 055A0C 7F020E9C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 055A10 7F020EA0 8FA5009C */ lw $a1, 0x9c($sp) -/* 055A14 7F020EA4 8FA2009C */ lw $v0, 0x9c($sp) -/* 055A18 7F020EA8 C7AE0090 */ lwc1 $f14, 0x90($sp) -/* 055A1C 7F020EAC 44809000 */ mtc1 $zero, $f18 -/* 055A20 7F020EB0 C4440030 */ lwc1 $f4, 0x30($v0) -/* 055A24 7F020EB4 C7AC008C */ lwc1 $f12, 0x8c($sp) -/* 055A28 7F020EB8 46127032 */ c.eq.s $f14, $f18 -/* 055A2C 7F020EBC E7A40074 */ swc1 $f4, 0x74($sp) -/* 055A30 7F020EC0 C4460034 */ lwc1 $f6, 0x34($v0) -/* 055A34 7F020EC4 27A50030 */ addiu $a1, $sp, 0x30 -/* 055A38 7F020EC8 E7A60078 */ swc1 $f6, 0x78($sp) -/* 055A3C 7F020ECC C4480038 */ lwc1 $f8, 0x38($v0) -/* 055A40 7F020ED0 E7A8007C */ swc1 $f8, 0x7c($sp) -/* 055A44 7F020ED4 E4520030 */ swc1 $f18, 0x30($v0) -/* 055A48 7F020ED8 E4520034 */ swc1 $f18, 0x34($v0) -/* 055A4C 7F020EDC 45000006 */ bc1f .L7F020EF8 -/* 055A50 7F020EE0 E4520038 */ swc1 $f18, 0x38($v0) -/* 055A54 7F020EE4 C7AA0088 */ lwc1 $f10, 0x88($sp) -/* 055A58 7F020EE8 46125032 */ c.eq.s $f10, $f18 -/* 055A5C 7F020EEC 00000000 */ nop -/* 055A60 7F020EF0 45010030 */ bc1t .L7F020FB4 -/* 055A64 7F020EF4 00000000 */ nop -.L7F020EF8: -/* 055A68 7F020EF8 C7A40070 */ lwc1 $f4, 0x70($sp) -/* 055A6C 7F020EFC 3C018005 */ lui $at, %hi(D_80051D54) # $at, 0x8005 -/* 055A70 7F020F00 46046301 */ sub.s $f12, $f12, $f4 -/* 055A74 7F020F04 4612603C */ c.lt.s $f12, $f18 -/* 055A78 7F020F08 00000000 */ nop -/* 055A7C 7F020F0C 45000003 */ bc1f .L7F020F1C -/* 055A80 7F020F10 00000000 */ nop -/* 055A84 7F020F14 C4261D84 */ lwc1 $f6, %lo(D_80051D54)($at) -/* 055A88 7F020F18 46066300 */ add.s $f12, $f12, $f6 -.L7F020F1C: -/* 055A8C 7F020F1C 0FC162C7 */ jal matrix_4x4_set_rotation_around_y -/* 055A90 7F020F20 E7AE0090 */ swc1 $f14, 0x90($sp) -/* 055A94 7F020F24 27A40030 */ addiu $a0, $sp, 0x30 -/* 055A98 7F020F28 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 055A9C 7F020F2C 8FA5009C */ lw $a1, 0x9c($sp) -/* 055AA0 7F020F30 C7AE0090 */ lwc1 $f14, 0x90($sp) -/* 055AA4 7F020F34 44809000 */ mtc1 $zero, $f18 -/* 055AA8 7F020F38 27A50030 */ addiu $a1, $sp, 0x30 -/* 055AAC 7F020F3C 46127032 */ c.eq.s $f14, $f18 -/* 055AB0 7F020F40 00000000 */ nop -/* 055AB4 7F020F44 45030009 */ bc1tl .L7F020F6C -/* 055AB8 7F020F48 C7A80088 */ lwc1 $f8, 0x88($sp) -/* 055ABC 7F020F4C 0FC162A4 */ jal matrix_4x4_set_rotation_around_x -/* 055AC0 7F020F50 46007306 */ mov.s $f12, $f14 -/* 055AC4 7F020F54 27A40030 */ addiu $a0, $sp, 0x30 -/* 055AC8 7F020F58 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 055ACC 7F020F5C 8FA5009C */ lw $a1, 0x9c($sp) -/* 055AD0 7F020F60 44809000 */ mtc1 $zero, $f18 -/* 055AD4 7F020F64 00000000 */ nop -/* 055AD8 7F020F68 C7A80088 */ lwc1 $f8, 0x88($sp) -.L7F020F6C: -/* 055ADC 7F020F6C 27A50030 */ addiu $a1, $sp, 0x30 -/* 055AE0 7F020F70 46124032 */ c.eq.s $f8, $f18 -/* 055AE4 7F020F74 00000000 */ nop -/* 055AE8 7F020F78 45030007 */ bc1tl .L7F020F98 -/* 055AEC 7F020F7C C7AC0070 */ lwc1 $f12, 0x70($sp) -/* 055AF0 7F020F80 0FC162EA */ jal matrix_4x4_set_rotation_around_z -/* 055AF4 7F020F84 46004306 */ mov.s $f12, $f8 -/* 055AF8 7F020F88 27A40030 */ addiu $a0, $sp, 0x30 -/* 055AFC 7F020F8C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 055B00 7F020F90 8FA5009C */ lw $a1, 0x9c($sp) -/* 055B04 7F020F94 C7AC0070 */ lwc1 $f12, 0x70($sp) -.L7F020F98: -/* 055B08 7F020F98 0FC162C7 */ jal matrix_4x4_set_rotation_around_y -/* 055B0C 7F020F9C 27A50030 */ addiu $a1, $sp, 0x30 -/* 055B10 7F020FA0 27A40030 */ addiu $a0, $sp, 0x30 -/* 055B14 7F020FA4 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 055B18 7F020FA8 8FA5009C */ lw $a1, 0x9c($sp) -/* 055B1C 7F020FAC 10000007 */ b .L7F020FCC -/* 055B20 7F020FB0 3C013F80 */ lui $at, 0x3f80 -.L7F020FB4: -/* 055B24 7F020FB4 0FC162C7 */ jal matrix_4x4_set_rotation_around_y -/* 055B28 7F020FB8 27A50030 */ addiu $a1, $sp, 0x30 -/* 055B2C 7F020FBC 27A40030 */ addiu $a0, $sp, 0x30 -/* 055B30 7F020FC0 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 055B34 7F020FC4 8FA5009C */ lw $a1, 0x9c($sp) -/* 055B38 7F020FC8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -.L7F020FCC: -/* 055B3C 7F020FCC 44812000 */ mtc1 $at, $f4 -/* 055B40 7F020FD0 C7AA0094 */ lwc1 $f10, 0x94($sp) -/* 055B44 7F020FD4 8FA5009C */ lw $a1, 0x9c($sp) -/* 055B48 7F020FD8 46045032 */ c.eq.s $f10, $f4 -/* 055B4C 7F020FDC 00000000 */ nop -/* 055B50 7F020FE0 45030004 */ bc1tl .L7F020FF4 -/* 055B54 7F020FE4 C7A60074 */ lwc1 $f6, 0x74($sp) -/* 055B58 7F020FE8 0FC163E7 */ jal matrix_scalar_multiply -/* 055B5C 7F020FEC 46005306 */ mov.s $f12, $f10 -/* 055B60 7F020FF0 C7A60074 */ lwc1 $f6, 0x74($sp) -.L7F020FF4: -/* 055B64 7F020FF4 8FA9009C */ lw $t1, 0x9c($sp) -/* 055B68 7F020FF8 E5260030 */ swc1 $f6, 0x30($t1) -/* 055B6C 7F020FFC C7A80078 */ lwc1 $f8, 0x78($sp) -/* 055B70 7F021000 E5280034 */ swc1 $f8, 0x34($t1) -/* 055B74 7F021004 C7A4007C */ lwc1 $f4, 0x7c($sp) -/* 055B78 7F021008 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 055B7C 7F02100C E5240038 */ swc1 $f4, 0x38($t1) -/* 055B80 7F021010 00402025 */ move $a0, $v0 -/* 055B84 7F021014 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 055B88 7F021018 8FA5009C */ lw $a1, 0x9c($sp) -/* 055B8C 7F02101C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F021020: -/* 055B90 7F021020 27BD0098 */ addiu $sp, $sp, 0x98 -/* 055B94 7F021024 03E00008 */ jr $ra -/* 055B98 7F021028 00000000 */ nop + zrot = (yrot = (xrot = 0.0f)); -) +#ifdef BUGFIX_R1 + chr = g_CurModelChr; #endif - + if (bodypart == CHR_RENDERPART_RIGHT_ARM) + { +#ifdef BUGFIX_R1 + xrot = chr->aimuprshoulder; +#else + xrot = g_CurModelChr->aimuprshoulder; #endif + } + else if (bodypart == CHR_RENDERPART_LEFT_ARM) + { +#ifdef BUGFIX_R1 + xrot = chr->aimuplshoulder; +#else + xrot = g_CurModelChr->aimuplshoulder; +#endif + } + else if (bodypart == CHR_RENDERPART_TORSO) + { +#ifndef BUGFIX_R1 + chr = g_CurModelChr; +#endif + xrot = chr->aimupback; + if (chr->hidden & CHRHIDDEN_0400) + { + if (PI_OVER_3 < xrot) + { + xrot -= PI_OVER_3; + } + else if (-FIVEPI_OVER_18 > xrot) + { + xrot += FIVEPI_OVER_18; + } + else + { + xrot = 0.0f; + } + } + + yrot = chr->aimsideback; + + } + else if (bodypart == CHR_RENDERPART_HEAD) + { +#ifndef BUGFIX_R1 + chr = g_CurModelChr; +#endif + if (chr->hidden & CHRHIDDEN_0400) + { + xrot = chr->aimupback; + + if (chr->hidden & CHRHIDDEN_0400) + { + if (PI_OVER_3 < xrot) + { + xrot = PI_OVER_3; + } + else if (xrot < -FIVEPI_OVER_18) + { + xrot = -FIVEPI_OVER_18; + } + } + } + else if (chr->model->gunhand != GUNRIGHT) + { + xrot = chr->aimuplshoulder; + } + else + { + xrot = chr->aimuprshoulder; + } + } + + chr = g_CurModelChr; + + if (chr->flinchcnt >= 0) + { + if (0); + + if ((bodypart == CHR_RENDERPART_RIGHT_ARM) || (bodypart == CHR_RENDERPART_LEFT_ARM)) + { + amount = chrGetFlinchAmount(chr) * M_TAU_F * 15.0f / 360.0f; + chr = g_CurModelChr; + hidden = chr->hidden; + xrot -= amount; + + if (hidden & CHRHIDDEN_RAND_FLINCH_1) + { + yrot -= amount; + } + else if (hidden & CHRHIDDEN_RAND_FLINCH_2) + { + yrot += amount; + } + } + else if (bodypart == CHR_RENDERPART_TORSO) + { + tmp = chrGetFlinchAmount(chr); + tmp *= M_TAU_F; + amount = tmp * 15.0f; + chr = g_CurModelChr; + hidden = chr->hidden; + amount /= 360.0f; + xrot += amount; + + if (hidden & CHRHIDDEN_RAND_FLINCH_1) + { + yrot += amount; + } + else if (hidden & CHRHIDDEN_RAND_FLINCH_2) + { + yrot -= amount; + } + + if (hidden & CHRHIDDEN_RAND_FLINCH_4) + { + zrot += (tmp * 10.0f) / 360.0f; + } + else if (hidden & CHRHIDDEN_RAND_FLINCH_8) + { + zrot -= (tmp * 10.0f) / 360.0f; + } + } + } + + if ((((xrot == 0.0f) && (yrot == 0.0f)) && (zrot == 0.0f)) && (scale == 1.0f)) + { + return; + } + + sideback = chrlvGetSubrotySideback(chr); + + if (xrot < 0.0f) + { + xrot = -xrot; + } + else + { + xrot = M_TAU_F - xrot; + } + + if (yrot < 0.0f) + { + yrot += M_TAU_F; + } + + matrix_4x4_multiply_homogeneous_in_place(currentPlayerGetViewToWorldMtxf(), matrix); + + savedposx = matrix->m[3][0]; + savedposy = matrix->m[3][1]; + savedposz = matrix->m[3][2]; + + matrix->m[3][0] = 0.0f; + matrix->m[3][1] = 0.0f; + matrix->m[3][2] = 0.0f; + + if ((xrot != 0.0f) || (zrot != 0.0f)) + { + yrot -= sideback; + + if (yrot < 0.0f) + { + yrot += M_TAU_F; + } + + matrix_4x4_set_rotation_around_y(yrot, &rotmtx); + matrix_4x4_multiply_homogeneous_in_place(&rotmtx, matrix); + + if (xrot != 0.0f) + { + matrix_4x4_set_rotation_around_x(xrot, &rotmtx); + matrix_4x4_multiply_homogeneous_in_place(&rotmtx, matrix); + } + + if (zrot != 0.0f) + { + matrix_4x4_set_rotation_around_z(zrot, &rotmtx); + matrix_4x4_multiply_homogeneous_in_place(&rotmtx, matrix); + } + + matrix_4x4_set_rotation_around_y(sideback, &rotmtx); + matrix_4x4_multiply_homogeneous_in_place(&rotmtx, matrix); + } + else + { + matrix_4x4_set_rotation_around_y(yrot, &rotmtx); + matrix_4x4_multiply_homogeneous_in_place(&rotmtx, matrix); + } + + if (scale != 1.0f) + { + matrix_scalar_multiply(scale, (f32 *) matrix); + } + + matrix->m[3][0] = savedposx; + matrix->m[3][1] = savedposy; + matrix->m[3][2] = savedposz; + + matrix_4x4_multiply_homogeneous_in_place(camGetWorldToScreenMtxf(), matrix); +} + + +#undef PI_OVER_3 +#undef FIVEPI_OVER_18 /** * Address 0x7F020D94. + * + * For visibility, player collision, tank collision, bullet collision, and explosion damage + * tests the game needs to know which room(s) a character is in. This allows the game to perform + * tests on only characters in loaded rooms, not the entire stage. */ -void chrPositionRelated7F020D94(ChrRecord *self) +void chrDetectRooms(ChrRecord *self) { PropRecord *myprop; coord3d lowerbounds; coord3d upperbounds; + // Create a roughly character sized bounding box. myprop = self->prop; lowerbounds.x = myprop->pos.x - 50.0f; lowerbounds.y = self->ground - 1.0f; @@ -4003,18 +2279,22 @@ void chrPositionRelated7F020D94(ChrRecord *self) upperbounds.x = myprop->pos.x + 50.0f; upperbounds.y = myprop->pos.y + 100.0f; upperbounds.z = myprop->pos.z + 50.0f; + + // Delist the character prop from its previous room(s) chrpropDeregisterRooms(myprop); - sub_GAME_7F03E27C(myprop, &lowerbounds, &upperbounds, 50.0f); + + // Detect rooms overlapped by the bounding box + chrpropUpdateRoomList(myprop, &lowerbounds, &upperbounds, 50.0f); + + // Re-register the character prop in those rooms chrpropRegisterRooms(myprop); } - - /** * Address 0x7F020E40. */ -void chrPositionRelated7F020E40(ChrRecord *chr, s32 arg1) +void chrUpdateAnim(ChrRecord *chr, s32 tickamount) { Model *model; PropRecord* prop; @@ -4025,11 +2305,11 @@ void chrPositionRelated7F020E40(ChrRecord *chr, s32 arg1) if (!(chr->hidden & CHRHIDDEN_FREEZE)) { getsuboffset(model, &chr->prevpos); - modelTickAnimQuarterSpeed(model, arg1, 1); + modelTickAnim(model, tickamount, 1); subcalcpos(model); set_color_shading_from_tile(prop, &chr->nextcol); getsuboffset(model, &prop->pos); - chrPositionRelated7F020D94(chr); + chrDetectRooms(chr); return; } @@ -4039,2676 +2319,489 @@ void chrPositionRelated7F020E40(ChrRecord *chr, s32 arg1) } +/** + * Address: + * US: 0x7F020EF0 + * JP: 0x7F021188 + * EU: 0x7F020E68 + * + * This function does the following: + * - Drive character animations + * - Remove characters if needed + * - Held weapon garbage collection + * - Character visibility tests + * - Render characters/hats/held weapons + * - Drop held items + * - Fire held weapons + */ +s32 chrTick(PropRecord *prop) +{ + ModelRenderData renderdata; + ChrRecord *chr; + Model *model; + s32 headSwitchVisible; + s32 headVisible; + s32 tickamount; -#ifdef NONMATCHING -/* -* Address: -* US: 0x7F020EF0 -* JP: 0x7F021188 -* EU: 0x7F020E68 -*/ -void chrTickBeams(void) { - #ifdef DEBUG - osSyncPrintf("anim=%d frame=%f backy=%f\n", DAT_83bcf9d8, *(local_e8 + 0x28), (*(psVar2 + 0xa6) * 360.0) / 6.283185); - #endif - #ifdef DEBUG - osSyncPrintf("\nVISIBLE MAGIC MODE!!!!\n\n"); - #endif -} + renderdata = D_8002CC6C; + chr = prop->chr; + model = chr->model; + headVisible = 1; + tickamount = g_ClockTimer; + + if ((!(chr->chrflags & CHRFLAG_HIDDEN)) || (chr->chrflags & CHRFLAG_00040000)) + { + if (D_8002C904) + { + if (((ModelAnimation *)animation_table_ptrs1[g_AnimationTablePointerCountRelated]) != ((ModelAnimation *)1)) + { + if (objecthandlerGetModelAnim(model) != ((ModelAnimation *)animation_table_ptrs1[g_AnimationTablePointerCountRelated])) + { + modelSetAnimation(model, (ModelAnimation *)animation_table_ptrs1[g_AnimationTablePointerCountRelated], 0, 0.0f, 0.5f, 0.0f); + } + } + } + else + { + chrlvActionTick(chr); + + if (chr->model == NULL) + { + return TICKOP_FREE; + } + } + + if (D_8002C90C) + { + tickamount = 0; + + if (D_8002C910) + { + tickamount = 1; + } +#ifdef DEBUG + osSyncPrintf("anim=%d frame=%f backy=%f\n", g_AnimationTablePointerCountRelated, chr->model->animframe1, (chr->aimendlshoulder * 360.0) / 6.283185); +#endif + } + } + + if (chr->hidden & CHRHIDDEN_REMOVE) + { + chrpropCleanupForRemoval(prop); + return TICKOP_FREE; + } + + if (chr->weapons_held[GUNRIGHT] != NULL) + { + if (chr->weapons_held[GUNRIGHT]->obj->runtime_bitflags & RUNTIMEBITFLAG_REMOVE) + { + objFreePermanently(chr->weapons_held[GUNRIGHT]->obj, 1); + } + } + + if (chr->weapons_held[GUNLEFT] != NULL) + { + if (chr->weapons_held[GUNLEFT]->obj->runtime_bitflags & RUNTIMEBITFLAG_REMOVE) + { + objFreePermanently(chr->weapons_held[GUNLEFT]->obj, 1); + } + } + + if (chr->chrflags & CHRFLAG_HIDDEN) + { + headSwitchVisible = 0; + } + else + { + if (((prop->type == PROP_TYPE_VIEWER) && (g_playerPointers[getPlayerPointerIndex(prop)]->cameramode == 1)) || (chr->chrflags & CHRFLAG_CULL_USING_HITBOX)) + { + headSwitchVisible = 1; + + if (((chr->actiontype == ACT_ANIM) && (chr->act_anim.unk02c == 0)) && (chr->act_anim.noTranslate != 0)) + { + modelTickAnim(model, tickamount, 0); + } + else + { + chrUpdateAnim(chr, tickamount); + } + + goto after_position_update; + } + + if ((chr->actiontype == ACT_PATROL) || (chr->actiontype == ACT_GOPOS)) + { + if (((chr->actiontype == ACT_PATROL) && (chr->act_patrol.waydata.mode == WAYMODE_MAGIC)) || ((chr->actiontype == ACT_GOPOS) && (chr->act_gopos.waydata.mode == WAYMODE_MAGIC))) + { + headSwitchVisible = posIsOnScreen(prop, &prop->pos, getinstsize(model), 1); + + if (headSwitchVisible) + { +#ifdef DEBUG + osSyncPrintf("\nVISIBLE MAGIC MODE!!!!\n\n"); +#endif + + getsuboffset(model, &chr->prevpos); + subcalcpos(model); + set_color_shading_from_tile(prop, &chr->nextcol); + getsuboffset(model, &prop->pos); + chrDetectRooms(chr); + } + } + else + { + chrUpdateAnim(chr, tickamount); + headSwitchVisible = posIsOnScreen(prop, &prop->pos, getinstsize(model), 1); + + if (headSwitchVisible) + { + if (chr->actiontype == ACT_PATROL) + { + chr->act_patrol.lastvisible60 = g_GlobalTimer; + } + else if (chr->actiontype == ACT_GOPOS) + { + chr->act_gopos.unk9c = g_GlobalTimer; + } + } + } + } + else if ((chr->actiontype == ACT_ANIM) && (chr->act_anim.unk02c == 0)) + { + headSwitchVisible = posIsOnScreen(prop, &prop->pos, getinstsize(model), 1); + + if (headSwitchVisible && (chr->act_anim.noTranslate == 0)) + { + chrUpdateAnim(chr, tickamount); + } + else + { + modelTickAnim(model, tickamount, 0); + } + } + else if (chr->actiontype == ACT_STAND) + { + headSwitchVisible = posIsOnScreen(prop, &prop->pos, getinstsize(model), 1); + + if (headSwitchVisible || (chr->chrflags & CHRFLAG_INIT)) + { + chrUpdateAnim(chr, tickamount); + } + else if (model->anim2 != NULL) + { + modelTickAnim(model, tickamount, 0); + } + } + else + { + if (chr->chrflags & CHRFLAG_IGNORE_ANIM_TRANSLATION) + { + modelTickAnim(model, tickamount, 0); + } + else + { + chrUpdateAnim(chr, tickamount); + } + + headSwitchVisible = posIsOnScreen(prop, &prop->pos, getinstsize(model), 1); + } + } + +after_position_update: + if (((chr->actiontype != ACT_STAND) || (model->anim2 != NULL)) || (prop->type == PROP_TYPE_VIEWER)) + { + chr->hidden |= CHRHIDDEN_BACKGROUND_AI; + } + + chrUpdateAimProperties(chr); + + if (chr->field_20 != NULL) + { + sub_GAME_7F06B248(chr->field_20); + chr->field_20 = NULL; + } + + if (headSwitchVisible) + { + if (get_debug_chrnum_flag()) {} + + prop->flags |= PROPFLAG_ONSCREEN; + chr->chrflags |= CHRFLAG_HAS_BEEN_ON_SCREEN; + +#ifdef BUGFIX_R1 + if (cheatIsActive(12)) + { + if (chrCanUseDKModeScaling(chr->bodynum, chr->headnum)) + { + modelSetDistanceScale(0.3125f); + + if (chr->chrflags & CHRFLAG_10000000) + { + chr->chrflags &= ~CHRFLAG_10000000; + modelSetScale(chr->model, chr->model->scale / 0.8f); + } + } + } #else - -#ifdef VERSION_US -GLOBAL_ASM( -.text -glabel chrTickBeams -/* 055A20 7F020EF0 27BDFEA8 */ addiu $sp, $sp, -0x158 -/* 055A24 7F020EF4 3C0F8003 */ lui $t7, %hi(D_8002CC6C) -/* 055A28 7F020EF8 25EFCC6C */ addiu $t7, %lo(D_8002CC6C) # addiu $t7, $t7, -0x3394 -/* 055A2C 7F020EFC AFBF0024 */ sw $ra, 0x24($sp) -/* 055A30 7F020F00 AFB00020 */ sw $s0, 0x20($sp) -/* 055A34 7F020F04 AFA40158 */ sw $a0, 0x158($sp) -/* 055A38 7F020F08 25E8003C */ addiu $t0, $t7, 0x3c -/* 055A3C 7F020F0C 27AE0118 */ addiu $t6, $sp, 0x118 -.L7F020F10: -/* 055A40 7F020F10 8DE10000 */ lw $at, ($t7) -/* 055A44 7F020F14 25EF000C */ addiu $t7, $t7, 0xc -/* 055A48 7F020F18 25CE000C */ addiu $t6, $t6, 0xc -/* 055A4C 7F020F1C ADC1FFF4 */ sw $at, -0xc($t6) -/* 055A50 7F020F20 8DE1FFF8 */ lw $at, -8($t7) -/* 055A54 7F020F24 ADC1FFF8 */ sw $at, -8($t6) -/* 055A58 7F020F28 8DE1FFFC */ lw $at, -4($t7) -/* 055A5C 7F020F2C 15E8FFF8 */ bne $t7, $t0, .L7F020F10 -/* 055A60 7F020F30 ADC1FFFC */ sw $at, -4($t6) -/* 055A64 7F020F34 8DE10000 */ lw $at, ($t7) -/* 055A68 7F020F38 3C0C8005 */ lui $t4, %hi(g_ClockTimer) -/* 055A6C 7F020F3C 240B0001 */ li $t3, 1 -/* 055A70 7F020F40 ADC10000 */ sw $at, ($t6) -/* 055A74 7F020F44 8FA90158 */ lw $t1, 0x158($sp) -/* 055A78 7F020F48 8D8C8374 */ lw $t4, %lo(g_ClockTimer)($t4) -/* 055A7C 7F020F4C 3C188003 */ lui $t8, %hi(D_8002C904) -/* 055A80 7F020F50 8D300004 */ lw $s0, 4($t1) -/* 055A84 7F020F54 8E0A001C */ lw $t2, 0x1c($s0) -/* 055A88 7F020F58 AFAB0108 */ sw $t3, 0x108($sp) -/* 055A8C 7F020F5C AFAC0104 */ sw $t4, 0x104($sp) -/* 055A90 7F020F60 AFAA0110 */ sw $t2, 0x110($sp) -/* 055A94 7F020F64 8E020014 */ lw $v0, 0x14($s0) -/* 055A98 7F020F68 304D0400 */ andi $t5, $v0, 0x400 -/* 055A9C 7F020F6C 11A00003 */ beqz $t5, .L7F020F7C -/* 055AA0 7F020F70 0002CB40 */ sll $t9, $v0, 0xd -/* 055AA4 7F020F74 07230035 */ bgezl $t9, .L7F02104C -/* 055AA8 7F020F78 96180012 */ lhu $t8, 0x12($s0) -.L7F020F7C: -/* 055AAC 7F020F7C 8F18C904 */ lw $t8, %lo(D_8002C904)($t8) -/* 055AB0 7F020F80 3C088003 */ lui $t0, %hi(g_AnimationTablePointerCountRelated) -/* 055AB4 7F020F84 1300001E */ beqz $t8, .L7F021000 -/* 055AB8 7F020F88 00000000 */ nop -/* 055ABC 7F020F8C 8D08C908 */ lw $t0, %lo(g_AnimationTablePointerCountRelated)($t0) -/* 055AC0 7F020F90 3C0E8003 */ lui $t6, %hi(animation_table_ptrs1) -/* 055AC4 7F020F94 24010001 */ li $at, 1 -/* 055AC8 7F020F98 00087880 */ sll $t7, $t0, 2 -/* 055ACC 7F020F9C 01CF7021 */ addu $t6, $t6, $t7 -/* 055AD0 7F020FA0 8DCE9D6C */ lw $t6, %lo(animation_table_ptrs1)($t6) -/* 055AD4 7F020FA4 11C1001D */ beq $t6, $at, .L7F02101C -/* 055AD8 7F020FA8 00000000 */ nop -/* 055ADC 7F020FAC 0FC1BD6B */ jal objecthandlerGetModelAnim -/* 055AE0 7F020FB0 8FA40110 */ lw $a0, 0x110($sp) -/* 055AE4 7F020FB4 3C098003 */ lui $t1, %hi(g_AnimationTablePointerCountRelated) -/* 055AE8 7F020FB8 8D29C908 */ lw $t1, %lo(g_AnimationTablePointerCountRelated)($t1) -/* 055AEC 7F020FBC 3C058003 */ lui $a1, %hi(animation_table_ptrs1) -/* 055AF0 7F020FC0 8FA40110 */ lw $a0, 0x110($sp) -/* 055AF4 7F020FC4 00095080 */ sll $t2, $t1, 2 -/* 055AF8 7F020FC8 00AA2821 */ addu $a1, $a1, $t2 -/* 055AFC 7F020FCC 8CA59D6C */ lw $a1, %lo(animation_table_ptrs1)($a1) -/* 055B00 7F020FD0 00003025 */ move $a2, $zero -/* 055B04 7F020FD4 10450011 */ beq $v0, $a1, .L7F02101C -/* 055B08 7F020FD8 00000000 */ nop -/* 055B0C 7F020FDC 44800000 */ mtc1 $zero, $f0 -/* 055B10 7F020FE0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 055B14 7F020FE4 44812000 */ mtc1 $at, $f4 -/* 055B18 7F020FE8 44070000 */ mfc1 $a3, $f0 -/* 055B1C 7F020FEC E7A00014 */ swc1 $f0, 0x14($sp) -/* 055B20 7F020FF0 0FC1BF2A */ jal modelSetAnimation -/* 055B24 7F020FF4 E7A40010 */ swc1 $f4, 0x10($sp) -/* 055B28 7F020FF8 10000008 */ b .L7F02101C -/* 055B2C 7F020FFC 00000000 */ nop -.L7F021000: -/* 055B30 7F021000 0FC0C9AF */ jal chrlvActionTick -/* 055B34 7F021004 02002025 */ move $a0, $s0 -/* 055B38 7F021008 8E0B001C */ lw $t3, 0x1c($s0) -/* 055B3C 7F02100C 15600003 */ bnez $t3, .L7F02101C -/* 055B40 7F021010 00000000 */ nop -/* 055B44 7F021014 100002BD */ b .L7F021B0C -/* 055B48 7F021018 24020001 */ li $v0, 1 -.L7F02101C: -/* 055B4C 7F02101C 3C0C8003 */ lui $t4, %hi(D_8002C90C) -/* 055B50 7F021020 8D8CC90C */ lw $t4, %lo(D_8002C90C)($t4) -/* 055B54 7F021024 3C0D8003 */ lui $t5, %hi(D_8002C910) -/* 055B58 7F021028 51800008 */ beql $t4, $zero, .L7F02104C -/* 055B5C 7F02102C 96180012 */ lhu $t8, 0x12($s0) -/* 055B60 7F021030 8DADC910 */ lw $t5, %lo(D_8002C910)($t5) -/* 055B64 7F021034 AFA00104 */ sw $zero, 0x104($sp) -/* 055B68 7F021038 24190001 */ li $t9, 1 -/* 055B6C 7F02103C 51A00003 */ beql $t5, $zero, .L7F02104C -/* 055B70 7F021040 96180012 */ lhu $t8, 0x12($s0) -/* 055B74 7F021044 AFB90104 */ sw $t9, 0x104($sp) -/* 055B78 7F021048 96180012 */ lhu $t8, 0x12($s0) -.L7F02104C: -/* 055B7C 7F02104C 33080020 */ andi $t0, $t8, 0x20 -/* 055B80 7F021050 51000006 */ beql $t0, $zero, .L7F02106C -/* 055B84 7F021054 8E020160 */ lw $v0, 0x160($s0) -/* 055B88 7F021058 0FC08105 */ jal disable_sounds_attached_to_player_then_something -/* 055B8C 7F02105C 8FA40158 */ lw $a0, 0x158($sp) -/* 055B90 7F021060 100002AA */ b .L7F021B0C -/* 055B94 7F021064 24020001 */ li $v0, 1 -/* 055B98 7F021068 8E020160 */ lw $v0, 0x160($s0) -.L7F02106C: -/* 055B9C 7F02106C 50400009 */ beql $v0, $zero, .L7F021094 -/* 055BA0 7F021070 8E020164 */ lw $v0, 0x164($s0) -/* 055BA4 7F021074 8C440004 */ lw $a0, 4($v0) -/* 055BA8 7F021078 8C8F0064 */ lw $t7, 0x64($a0) -/* 055BAC 7F02107C 31EE0004 */ andi $t6, $t7, 4 -/* 055BB0 7F021080 51C00004 */ beql $t6, $zero, .L7F021094 -/* 055BB4 7F021084 8E020164 */ lw $v0, 0x164($s0) -/* 055BB8 7F021088 0FC10409 */ jal objFreePermanently -/* 055BBC 7F02108C 24050001 */ li $a1, 1 -/* 055BC0 7F021090 8E020164 */ lw $v0, 0x164($s0) -.L7F021094: -/* 055BC4 7F021094 50400009 */ beql $v0, $zero, .L7F0210BC -/* 055BC8 7F021098 8E020014 */ lw $v0, 0x14($s0) -/* 055BCC 7F02109C 8C440004 */ lw $a0, 4($v0) -/* 055BD0 7F0210A0 8C890064 */ lw $t1, 0x64($a0) -/* 055BD4 7F0210A4 312A0004 */ andi $t2, $t1, 4 -/* 055BD8 7F0210A8 51400004 */ beql $t2, $zero, .L7F0210BC -/* 055BDC 7F0210AC 8E020014 */ lw $v0, 0x14($s0) -/* 055BE0 7F0210B0 0FC10409 */ jal objFreePermanently -/* 055BE4 7F0210B4 24050001 */ li $a1, 1 -/* 055BE8 7F0210B8 8E020014 */ lw $v0, 0x14($s0) -.L7F0210BC: -/* 055BEC 7F0210BC 8FAC0158 */ lw $t4, 0x158($sp) -/* 055BF0 7F0210C0 304B0400 */ andi $t3, $v0, 0x400 -/* 055BF4 7F0210C4 51600005 */ beql $t3, $zero, .L7F0210DC -/* 055BF8 7F0210C8 918D0000 */ lbu $t5, ($t4) -/* 055BFC 7F0210CC AFA0010C */ sw $zero, 0x10c($sp) -/* 055C00 7F0210D0 100000BD */ b .L7F0213C8 -/* 055C04 7F0210D4 82030007 */ lb $v1, 7($s0) -/* 055C08 7F0210D8 918D0000 */ lbu $t5, ($t4) -.L7F0210DC: -/* 055C0C 7F0210DC 24010006 */ li $at, 6 -/* 055C10 7F0210E0 55A1000D */ bnel $t5, $at, .L7F021118 -/* 055C14 7F0210E4 00027A00 */ sll $t7, $v0, 8 -/* 055C18 7F0210E8 0FC26C57 */ jal getPlayerPointerIndex -/* 055C1C 7F0210EC 01802025 */ move $a0, $t4 -/* 055C20 7F0210F0 0002C880 */ sll $t9, $v0, 2 -/* 055C24 7F0210F4 3C188008 */ lui $t8, %hi(g_playerPointers) -/* 055C28 7F0210F8 0319C021 */ addu $t8, $t8, $t9 -/* 055C2C 7F0210FC 8F189EE0 */ lw $t8, %lo(g_playerPointers)($t8) -/* 055C30 7F021100 24010001 */ li $at, 1 -/* 055C34 7F021104 8F080000 */ lw $t0, ($t8) -/* 055C38 7F021108 51010005 */ beql $t0, $at, .L7F021120 -/* 055C3C 7F02110C 240E0001 */ li $t6, 1 -/* 055C40 7F021110 8E020014 */ lw $v0, 0x14($s0) -/* 055C44 7F021114 00027A00 */ sll $t7, $v0, 8 -.L7F021118: -/* 055C48 7F021118 05E10017 */ bgez $t7, .L7F021178 -/* 055C4C 7F02111C 240E0001 */ li $t6, 1 -.L7F021120: -/* 055C50 7F021120 AFAE010C */ sw $t6, 0x10c($sp) -/* 055C54 7F021124 82090007 */ lb $t1, 7($s0) -/* 055C58 7F021128 24010003 */ li $at, 3 -/* 055C5C 7F02112C 02002025 */ move $a0, $s0 -/* 055C60 7F021130 1521000D */ bne $t1, $at, .L7F021168 -/* 055C64 7F021134 00000000 */ nop -/* 055C68 7F021138 8E0A002C */ lw $t2, 0x2c($s0) -/* 055C6C 7F02113C 1540000A */ bnez $t2, .L7F021168 -/* 055C70 7F021140 00000000 */ nop -/* 055C74 7F021144 8E0B003C */ lw $t3, 0x3c($s0) -/* 055C78 7F021148 8FA50104 */ lw $a1, 0x104($sp) -/* 055C7C 7F02114C 00003025 */ move $a2, $zero -/* 055C80 7F021150 11600005 */ beqz $t3, .L7F021168 -/* 055C84 7F021154 00000000 */ nop -/* 055C88 7F021158 0FC1C2BB */ jal modelTickAnimQuarterSpeed -/* 055C8C 7F02115C 8FA40110 */ lw $a0, 0x110($sp) -/* 055C90 7F021160 10000003 */ b .L7F021170 -/* 055C94 7F021164 00000000 */ nop -.L7F021168: -/* 055C98 7F021168 0FC08390 */ jal chrPositionRelated7F020E40 -/* 055C9C 7F02116C 8FA50104 */ lw $a1, 0x104($sp) -.L7F021170: -/* 055CA0 7F021170 10000095 */ b .L7F0213C8 -/* 055CA4 7F021174 82030007 */ lb $v1, 7($s0) -.L7F021178: -/* 055CA8 7F021178 82030007 */ lb $v1, 7($s0) -/* 055CAC 7F02117C 2406000E */ li $a2, 14 -/* 055CB0 7F021180 2401000F */ li $at, 15 -/* 055CB4 7F021184 10C30003 */ beq $a2, $v1, .L7F021194 -/* 055CB8 7F021188 00000000 */ nop -/* 055CBC 7F02118C 54610041 */ bnel $v1, $at, .L7F021294 -/* 055CC0 7F021190 24010003 */ li $at, 3 -.L7F021194: -/* 055CC4 7F021194 54C30005 */ bnel $a2, $v1, .L7F0211AC -/* 055CC8 7F021198 2401000F */ li $at, 15 -/* 055CCC 7F02119C 820D0038 */ lb $t5, 0x38($s0) -/* 055CD0 7F0211A0 24010006 */ li $at, 6 -/* 055CD4 7F0211A4 11A10007 */ beq $t5, $at, .L7F0211C4 -/* 055CD8 7F0211A8 2401000F */ li $at, 15 -.L7F0211AC: -/* 055CDC 7F0211AC 1461001E */ bne $v1, $at, .L7F021228 -/* 055CE0 7F0211B0 02002025 */ move $a0, $s0 -/* 055CE4 7F0211B4 820C005C */ lb $t4, 0x5c($s0) -/* 055CE8 7F0211B8 24010006 */ li $at, 6 -/* 055CEC 7F0211BC 1581001A */ bne $t4, $at, .L7F021228 -/* 055CF0 7F0211C0 00000000 */ nop -.L7F0211C4: -/* 055CF4 7F0211C4 0FC1B403 */ jal getinstsize -/* 055CF8 7F0211C8 8FA40110 */ lw $a0, 0x110($sp) -/* 055CFC 7F0211CC 8FA40158 */ lw $a0, 0x158($sp) -/* 055D00 7F0211D0 44060000 */ mfc1 $a2, $f0 -/* 055D04 7F0211D4 24070001 */ li $a3, 1 -/* 055D08 7F0211D8 24850008 */ addiu $a1, $a0, 8 -/* 055D0C 7F0211DC 0FC1535B */ jal sub_GAME_7F054D6C -/* 055D10 7F0211E0 AFA50030 */ sw $a1, 0x30($sp) -/* 055D14 7F0211E4 10400028 */ beqz $v0, .L7F021288 -/* 055D18 7F0211E8 AFA2010C */ sw $v0, 0x10c($sp) -/* 055D1C 7F0211EC 8FA40110 */ lw $a0, 0x110($sp) -/* 055D20 7F0211F0 0FC1B2E6 */ jal getsuboffset -/* 055D24 7F0211F4 260500BC */ addiu $a1, $s0, 0xbc -/* 055D28 7F0211F8 0FC1B5AC */ jal subcalcpos -/* 055D2C 7F0211FC 8FA40110 */ lw $a0, 0x110($sp) -/* 055D30 7F021200 8FA40158 */ lw $a0, 0x158($sp) -/* 055D34 7F021204 0FC10027 */ jal set_color_shading_from_tile -/* 055D38 7F021208 260500F8 */ addiu $a1, $s0, 0xf8 -/* 055D3C 7F02120C 8FA40110 */ lw $a0, 0x110($sp) -/* 055D40 7F021210 0FC1B2E6 */ jal getsuboffset -/* 055D44 7F021214 8FA50030 */ lw $a1, 0x30($sp) -/* 055D48 7F021218 0FC08365 */ jal chrPositionRelated7F020D94 -/* 055D4C 7F02121C 02002025 */ move $a0, $s0 -/* 055D50 7F021220 10000019 */ b .L7F021288 -/* 055D54 7F021224 00000000 */ nop -.L7F021228: -/* 055D58 7F021228 0FC08390 */ jal chrPositionRelated7F020E40 -/* 055D5C 7F02122C 8FA50104 */ lw $a1, 0x104($sp) -/* 055D60 7F021230 0FC1B403 */ jal getinstsize -/* 055D64 7F021234 8FA40110 */ lw $a0, 0x110($sp) -/* 055D68 7F021238 8FA40158 */ lw $a0, 0x158($sp) -/* 055D6C 7F02123C 44060000 */ mfc1 $a2, $f0 -/* 055D70 7F021240 24070001 */ li $a3, 1 -/* 055D74 7F021244 0FC1535B */ jal sub_GAME_7F054D6C -/* 055D78 7F021248 24850008 */ addiu $a1, $a0, 8 -/* 055D7C 7F02124C 1040000E */ beqz $v0, .L7F021288 -/* 055D80 7F021250 AFA2010C */ sw $v0, 0x10c($sp) -/* 055D84 7F021254 82030007 */ lb $v1, 7($s0) -/* 055D88 7F021258 2401000E */ li $at, 14 -/* 055D8C 7F02125C 3C088005 */ lui $t0, %hi(g_GlobalTimer) -/* 055D90 7F021260 54610005 */ bnel $v1, $at, .L7F021278 -/* 055D94 7F021264 2401000F */ li $at, 15 -/* 055D98 7F021268 8D08837C */ lw $t0, %lo(g_GlobalTimer)($t0) -/* 055D9C 7F02126C 10000006 */ b .L7F021288 -/* 055DA0 7F021270 AE080078 */ sw $t0, 0x78($s0) -/* 055DA4 7F021274 2401000F */ li $at, 15 -.L7F021278: -/* 055DA8 7F021278 14610003 */ bne $v1, $at, .L7F021288 -/* 055DAC 7F02127C 3C0F8005 */ lui $t7, %hi(g_GlobalTimer) -/* 055DB0 7F021280 8DEF837C */ lw $t7, %lo(g_GlobalTimer)($t7) -/* 055DB4 7F021284 AE0F009C */ sw $t7, 0x9c($s0) -.L7F021288: -/* 055DB8 7F021288 1000004F */ b .L7F0213C8 -/* 055DBC 7F02128C 82030007 */ lb $v1, 7($s0) -/* 055DC0 7F021290 24010003 */ li $at, 3 -.L7F021294: -/* 055DC4 7F021294 5461001C */ bnel $v1, $at, .L7F021308 -/* 055DC8 7F021298 24010001 */ li $at, 1 -/* 055DCC 7F02129C 8E0E002C */ lw $t6, 0x2c($s0) -/* 055DD0 7F0212A0 55C00019 */ bnezl $t6, .L7F021308 -/* 055DD4 7F0212A4 24010001 */ li $at, 1 -/* 055DD8 7F0212A8 0FC1B403 */ jal getinstsize -/* 055DDC 7F0212AC 8FA40110 */ lw $a0, 0x110($sp) -/* 055DE0 7F0212B0 8FA40158 */ lw $a0, 0x158($sp) -/* 055DE4 7F0212B4 44060000 */ mfc1 $a2, $f0 -/* 055DE8 7F0212B8 24070001 */ li $a3, 1 -/* 055DEC 7F0212BC 0FC1535B */ jal sub_GAME_7F054D6C -/* 055DF0 7F0212C0 24850008 */ addiu $a1, $a0, 8 -/* 055DF4 7F0212C4 10400009 */ beqz $v0, .L7F0212EC -/* 055DF8 7F0212C8 AFA2010C */ sw $v0, 0x10c($sp) -/* 055DFC 7F0212CC 8E0A003C */ lw $t2, 0x3c($s0) -/* 055E00 7F0212D0 02002025 */ move $a0, $s0 -/* 055E04 7F0212D4 55400006 */ bnezl $t2, .L7F0212F0 -/* 055E08 7F0212D8 8FA40110 */ lw $a0, 0x110($sp) -/* 055E0C 7F0212DC 0FC08390 */ jal chrPositionRelated7F020E40 -/* 055E10 7F0212E0 8FA50104 */ lw $a1, 0x104($sp) -/* 055E14 7F0212E4 10000005 */ b .L7F0212FC -/* 055E18 7F0212E8 00000000 */ nop -.L7F0212EC: -/* 055E1C 7F0212EC 8FA40110 */ lw $a0, 0x110($sp) -.L7F0212F0: -/* 055E20 7F0212F0 8FA50104 */ lw $a1, 0x104($sp) -/* 055E24 7F0212F4 0FC1C2BB */ jal modelTickAnimQuarterSpeed -/* 055E28 7F0212F8 00003025 */ move $a2, $zero -.L7F0212FC: -/* 055E2C 7F0212FC 10000032 */ b .L7F0213C8 -/* 055E30 7F021300 82030007 */ lb $v1, 7($s0) -/* 055E34 7F021304 24010001 */ li $at, 1 -.L7F021308: -/* 055E38 7F021308 1461001C */ bne $v1, $at, .L7F02137C -/* 055E3C 7F02130C 30484000 */ andi $t0, $v0, 0x4000 -/* 055E40 7F021310 0FC1B403 */ jal getinstsize -/* 055E44 7F021314 8FA40110 */ lw $a0, 0x110($sp) -/* 055E48 7F021318 8FA40158 */ lw $a0, 0x158($sp) -/* 055E4C 7F02131C 44060000 */ mfc1 $a2, $f0 -/* 055E50 7F021320 24070001 */ li $a3, 1 -/* 055E54 7F021324 0FC1535B */ jal sub_GAME_7F054D6C -/* 055E58 7F021328 24850008 */ addiu $a1, $a0, 8 -/* 055E5C 7F02132C 14400005 */ bnez $v0, .L7F021344 -/* 055E60 7F021330 AFA2010C */ sw $v0, 0x10c($sp) -/* 055E64 7F021334 8E0D0014 */ lw $t5, 0x14($s0) -/* 055E68 7F021338 8FB90110 */ lw $t9, 0x110($sp) -/* 055E6C 7F02133C 31AC0001 */ andi $t4, $t5, 1 -/* 055E70 7F021340 11800005 */ beqz $t4, .L7F021358 -.L7F021344: -/* 055E74 7F021344 02002025 */ move $a0, $s0 -/* 055E78 7F021348 0FC08390 */ jal chrPositionRelated7F020E40 -/* 055E7C 7F02134C 8FA50104 */ lw $a1, 0x104($sp) -/* 055E80 7F021350 10000008 */ b .L7F021374 -/* 055E84 7F021354 00000000 */ nop -.L7F021358: -/* 055E88 7F021358 8F380054 */ lw $t8, 0x54($t9) -/* 055E8C 7F02135C 03202025 */ move $a0, $t9 -/* 055E90 7F021360 8FA50104 */ lw $a1, 0x104($sp) -/* 055E94 7F021364 13000003 */ beqz $t8, .L7F021374 -/* 055E98 7F021368 00000000 */ nop -/* 055E9C 7F02136C 0FC1C2BB */ jal modelTickAnimQuarterSpeed -/* 055EA0 7F021370 00003025 */ move $a2, $zero -.L7F021374: -/* 055EA4 7F021374 10000014 */ b .L7F0213C8 -/* 055EA8 7F021378 82030007 */ lb $v1, 7($s0) -.L7F02137C: -/* 055EAC 7F02137C 11000007 */ beqz $t0, .L7F02139C -/* 055EB0 7F021380 02002025 */ move $a0, $s0 -/* 055EB4 7F021384 8FA40110 */ lw $a0, 0x110($sp) -/* 055EB8 7F021388 8FA50104 */ lw $a1, 0x104($sp) -/* 055EBC 7F02138C 0FC1C2BB */ jal modelTickAnimQuarterSpeed -/* 055EC0 7F021390 00003025 */ move $a2, $zero -/* 055EC4 7F021394 10000003 */ b .L7F0213A4 -/* 055EC8 7F021398 00000000 */ nop -.L7F02139C: -/* 055ECC 7F02139C 0FC08390 */ jal chrPositionRelated7F020E40 -/* 055ED0 7F0213A0 8FA50104 */ lw $a1, 0x104($sp) -.L7F0213A4: -/* 055ED4 7F0213A4 0FC1B403 */ jal getinstsize -/* 055ED8 7F0213A8 8FA40110 */ lw $a0, 0x110($sp) -/* 055EDC 7F0213AC 8FA40158 */ lw $a0, 0x158($sp) -/* 055EE0 7F0213B0 44060000 */ mfc1 $a2, $f0 -/* 055EE4 7F0213B4 24070001 */ li $a3, 1 -/* 055EE8 7F0213B8 0FC1535B */ jal sub_GAME_7F054D6C -/* 055EEC 7F0213BC 24850008 */ addiu $a1, $a0, 8 -/* 055EF0 7F0213C0 AFA2010C */ sw $v0, 0x10c($sp) -/* 055EF4 7F0213C4 82030007 */ lb $v1, 7($s0) -.L7F0213C8: -/* 055EF8 7F0213C8 24010001 */ li $at, 1 -/* 055EFC 7F0213CC 14610009 */ bne $v1, $at, .L7F0213F4 -/* 055F00 7F0213D0 8FAE0110 */ lw $t6, 0x110($sp) -/* 055F04 7F0213D4 8DC90054 */ lw $t1, 0x54($t6) -/* 055F08 7F0213D8 8FAA0158 */ lw $t2, 0x158($sp) -/* 055F0C 7F0213DC 55200006 */ bnezl $t1, .L7F0213F8 -/* 055F10 7F0213E0 960D0012 */ lhu $t5, 0x12($s0) -/* 055F14 7F0213E4 914B0000 */ lbu $t3, ($t2) -/* 055F18 7F0213E8 24010006 */ li $at, 6 -/* 055F1C 7F0213EC 15610004 */ bne $t3, $at, .L7F021400 -/* 055F20 7F0213F0 00000000 */ nop -.L7F0213F4: -/* 055F24 7F0213F4 960D0012 */ lhu $t5, 0x12($s0) -.L7F0213F8: -/* 055F28 7F0213F8 35AC0200 */ ori $t4, $t5, 0x200 -/* 055F2C 7F0213FC A60C0012 */ sh $t4, 0x12($s0) -.L7F021400: -/* 055F30 7F021400 0FC0817C */ jal chrUpdateAimProperties -/* 055F34 7F021404 02002025 */ move $a0, $s0 -/* 055F38 7F021408 8E040020 */ lw $a0, 0x20($s0) -/* 055F3C 7F02140C 50800005 */ beql $a0, $zero, .L7F021424 -/* 055F40 7F021410 8FB8010C */ lw $t8, 0x10c($sp) -/* 055F44 7F021414 0FC1AC92 */ jal sub_GAME_7F06B248 -/* 055F48 7F021418 00000000 */ nop -/* 055F4C 7F02141C AE000020 */ sw $zero, 0x20($s0) -/* 055F50 7F021420 8FB8010C */ lw $t8, 0x10c($sp) -.L7F021424: -/* 055F54 7F021424 261900F8 */ addiu $t9, $s0, 0xf8 -/* 055F58 7F021428 53000182 */ beql $t8, $zero, .L7F021A34 -/* 055F5C 7F02142C 8E020160 */ lw $v0, 0x160($s0) -/* 055F60 7F021430 0FC24412 */ jal get_debug_chrnum_flag -/* 055F64 7F021434 AFB90030 */ sw $t9, 0x30($sp) -/* 055F68 7F021438 8FA20158 */ lw $v0, 0x158($sp) -/* 055F6C 7F02143C 2404000C */ li $a0, 12 -/* 055F70 7F021440 90480001 */ lbu $t0, 1($v0) -/* 055F74 7F021444 350F0002 */ ori $t7, $t0, 2 -/* 055F78 7F021448 A04F0001 */ sb $t7, 1($v0) -/* 055F7C 7F02144C 8E0E0014 */ lw $t6, 0x14($s0) -/* 055F80 7F021450 35C90008 */ ori $t1, $t6, 8 -/* 055F84 7F021454 0FC249EF */ jal cheatIsActive -/* 055F88 7F021458 AE090014 */ sw $t1, 0x14($s0) -/* 055F8C 7F02145C 10400004 */ beqz $v0, .L7F021470 -/* 055F90 7F021460 3C013EA0 */ li $at, 0x3EA00000 # 0.312500 -/* 055F94 7F021464 44816000 */ mtc1 $at, $f12 -/* 055F98 7F021468 0FC1B103 */ jal modelSetDistanceScale -/* 055F9C 7F02146C 00000000 */ nop -.L7F021470: -/* 055FA0 7F021470 3C0A7F02 */ lui $t2, %hi(sub_GAME_7F02083C) # $t2, 0x7f02 -/* 055FA4 7F021474 254A083C */ addiu $t2, %lo(sub_GAME_7F02083C) # addiu $t2, $t2, 0x83c -/* 055FA8 7F021478 3C018003 */ lui $at, %hi(D_80036090) -/* 055FAC 7F02147C AC2A6090 */ sw $t2, %lo(D_80036090)($at) -/* 055FB0 7F021480 3C018007 */ lui $at, %hi(dword_CODE_bss_80069B60) -/* 055FB4 7F021484 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 055FB8 7F021488 AC309B60 */ sw $s0, %lo(dword_CODE_bss_80069B60)($at) -/* 055FBC 7F02148C 8FAB0110 */ lw $t3, 0x110($sp) -/* 055FC0 7F021490 AFA20118 */ sw $v0, 0x118($sp) -/* 055FC4 7F021494 8D6D0008 */ lw $t5, 8($t3) -/* 055FC8 7F021498 85A4000E */ lh $a0, 0xe($t5) -/* 055FCC 7F02149C 00046180 */ sll $t4, $a0, 6 -/* 055FD0 7F0214A0 0FC2F5C5 */ jal dynAllocate -/* 055FD4 7F0214A4 01802025 */ move $a0, $t4 -/* 055FD8 7F0214A8 3C058007 */ lui $a1, %hi(dword_CODE_bss_80069B60) -/* 055FDC 7F0214AC 24A59B60 */ addiu $a1, %lo(dword_CODE_bss_80069B60) # addiu $a1, $a1, -0x64a0 -/* 055FE0 7F0214B0 8CA30000 */ lw $v1, ($a1) -/* 055FE4 7F0214B4 AFA20128 */ sw $v0, 0x128($sp) -/* 055FE8 7F0214B8 80640011 */ lb $a0, 0x11($v1) -/* 055FEC 7F0214BC 0480000B */ bltz $a0, .L7F0214EC -/* 055FF0 7F0214C0 3C188005 */ lui $t8, %hi(g_ClockTimer) -/* 055FF4 7F0214C4 8F188374 */ lw $t8, %lo(g_ClockTimer)($t8) -/* 055FF8 7F0214C8 240FFFFF */ li $t7, -1 -/* 055FFC 7F0214CC 0098C821 */ addu $t9, $a0, $t8 -/* 056000 7F0214D0 A0790011 */ sb $t9, 0x11($v1) -/* 056004 7F0214D4 8CA30000 */ lw $v1, ($a1) -/* 056008 7F0214D8 80680011 */ lb $t0, 0x11($v1) -/* 05600C 7F0214DC 2901001E */ slti $at, $t0, 0x1e -/* 056010 7F0214E0 54200003 */ bnezl $at, .L7F0214F0 -/* 056014 7F0214E4 27A40118 */ addiu $a0, $sp, 0x118 -/* 056018 7F0214E8 A06F0011 */ sb $t7, 0x11($v1) -.L7F0214EC: -/* 05601C 7F0214EC 27A40118 */ addiu $a0, $sp, 0x118 -.L7F0214F0: -/* 056020 7F0214F0 0FC1BCBE */ jal subcalcmatrices -/* 056024 7F0214F4 8FA50110 */ lw $a1, 0x110($sp) -/* 056028 7F0214F8 3C018003 */ lui $at, %hi(D_80036090) -/* 05602C 7F0214FC AC206090 */ sw $zero, %lo(D_80036090)($at) -/* 056030 7F021500 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 056034 7F021504 44816000 */ mtc1 $at, $f12 -/* 056038 7F021508 0FC1B103 */ jal modelSetDistanceScale -/* 05603C 7F02150C 00000000 */ nop -/* 056040 7F021510 260400F4 */ addiu $a0, $s0, 0xf4 -/* 056044 7F021514 0FC100C4 */ jal update_color_shading -/* 056048 7F021518 8FA50030 */ lw $a1, 0x30($sp) -/* 05604C 7F02151C 0FC1B1DA */ jal sub_GAME_7F06C768 -/* 056050 7F021520 8FA40110 */ lw $a0, 0x110($sp) -/* 056054 7F021524 8FAE0158 */ lw $t6, 0x158($sp) -/* 056058 7F021528 00002025 */ move $a0, $zero -/* 05605C 7F02152C E5C00018 */ swc1 $f0, 0x18($t6) -/* 056060 7F021530 0FC1AC48 */ jal sub_GAME_7F06B120 -/* 056064 7F021534 8FA50110 */ lw $a1, 0x110($sp) -/* 056068 7F021538 AE020020 */ sw $v0, 0x20($s0) -/* 05606C 7F02153C 26060020 */ addiu $a2, $s0, 0x20 -/* 056070 7F021540 AFA60030 */ sw $a2, 0x30($sp) -/* 056074 7F021544 8FA40158 */ lw $a0, 0x158($sp) -/* 056078 7F021548 0FC148FE */ jal sub_GAME_7F0523F8 -/* 05607C 7F02154C 00002825 */ move $a1, $zero -/* 056080 7F021550 8FA60030 */ lw $a2, 0x30($sp) -/* 056084 7F021554 8FA40158 */ lw $a0, 0x158($sp) -/* 056088 7F021558 0FC148FE */ jal sub_GAME_7F0523F8 -/* 05608C 7F02155C 24050001 */ li $a1, 1 -/* 056090 7F021560 8E0201D8 */ lw $v0, 0x1d8($s0) -/* 056094 7F021564 5040011A */ beql $v0, $zero, .L7F0219D0 -/* 056098 7F021568 8FAD0110 */ lw $t5, 0x110($sp) -/* 05609C 7F02156C 8C470004 */ lw $a3, 4($v0) -/* 0560A0 7F021570 90490001 */ lbu $t1, 1($v0) -/* 0560A4 7F021574 00003025 */ move $a2, $zero -/* 0560A8 7F021578 8CE30014 */ lw $v1, 0x14($a3) -/* 0560AC 7F02157C 352A0002 */ ori $t2, $t1, 2 -/* 0560B0 7F021580 A04A0001 */ sb $t2, 1($v0) -/* 0560B4 7F021584 8C65001C */ lw $a1, 0x1c($v1) -/* 0560B8 7F021588 8FA40110 */ lw $a0, 0x110($sp) -/* 0560BC 7F02158C AFA70100 */ sw $a3, 0x100($sp) -/* 0560C0 7F021590 0FC1B198 */ jal modelFindNodeMtx -/* 0560C4 7F021594 AFA300FC */ sw $v1, 0xfc($sp) -/* 0560C8 7F021598 8FAB00FC */ lw $t3, 0xfc($sp) -/* 0560CC 7F02159C AFA20118 */ sw $v0, 0x118($sp) -/* 0560D0 7F0215A0 8D6D0008 */ lw $t5, 8($t3) -/* 0560D4 7F0215A4 85A4000E */ lh $a0, 0xe($t5) -/* 0560D8 7F0215A8 00046180 */ sll $t4, $a0, 6 -/* 0560DC 7F0215AC 0FC2F5C5 */ jal dynAllocate -/* 0560E0 7F0215B0 01802025 */ move $a0, $t4 -/* 0560E4 7F0215B4 AFA20128 */ sw $v0, 0x128($sp) -/* 0560E8 7F0215B8 27A40118 */ addiu $a0, $sp, 0x118 -/* 0560EC 7F0215BC 0FC1BC92 */ jal instcalcmatrices -/* 0560F0 7F0215C0 8FA500FC */ lw $a1, 0xfc($sp) -/* 0560F4 7F0215C4 82020006 */ lb $v0, 6($s0) -/* 0560F8 7F0215C8 2841002A */ slti $at, $v0, 0x2a -/* 0560FC 7F0215CC 142000F2 */ bnez $at, .L7F021998 -/* 056100 7F0215D0 28410046 */ slti $at, $v0, 0x46 -/* 056104 7F0215D4 102000F0 */ beqz $at, .L7F021998 -/* 056108 7F0215D8 3C198003 */ lui $t9, %hi(D_8002CCAC) -/* 05610C 7F0215DC 2739CCAC */ addiu $t9, %lo(D_8002CCAC) # addiu $t9, $t9, -0x3354 -/* 056110 7F0215E0 8F210000 */ lw $at, ($t9) -/* 056114 7F0215E4 27B800F0 */ addiu $t8, $sp, 0xf0 -/* 056118 7F0215E8 8F2F0004 */ lw $t7, 4($t9) -/* 05611C 7F0215EC AF010000 */ sw $at, ($t8) -/* 056120 7F0215F0 8F210008 */ lw $at, 8($t9) -/* 056124 7F0215F4 AF0F0004 */ sw $t7, 4($t8) -/* 056128 7F0215F8 AF010008 */ sw $at, 8($t8) -/* 05612C 7F0215FC 0FC149A1 */ jal get_hat_model -/* 056130 7F021600 8E0401D8 */ lw $a0, 0x1d8($s0) -/* 056134 7F021604 AFA20060 */ sw $v0, 0x60($sp) -/* 056138 7F021608 82040006 */ lb $a0, 6($s0) -/* 05613C 7F02160C 00024880 */ sll $t1, $v0, 2 -/* 056140 7F021610 01224823 */ subu $t1, $t1, $v0 -/* 056144 7F021614 2484FFD6 */ addiu $a0, $a0, -0x2a -/* 056148 7F021618 000470C0 */ sll $t6, $a0, 3 -/* 05614C 7F02161C 01C47021 */ addu $t6, $t6, $a0 -/* 056150 7F021620 000E7100 */ sll $t6, $t6, 4 -/* 056154 7F021624 000948C0 */ sll $t1, $t1, 3 -/* 056158 7F021628 3C0B8004 */ lui $t3, %hi(headHat_array_8003E464) -/* 05615C 7F02162C 256BE464 */ addiu $t3, %lo(headHat_array_8003E464) # addiu $t3, $t3, -0x1b9c -/* 056160 7F021630 01C95021 */ addu $t2, $t6, $t1 -/* 056164 7F021634 014B1821 */ addu $v1, $t2, $t3 -/* 056168 7F021638 0FC243BF */ jal get_debug_render_raster -/* 05616C 7F02163C AFA30058 */ sw $v1, 0x58($sp) -/* 056170 7F021640 144000AA */ bnez $v0, .L7F0218EC -/* 056174 7F021644 8FA30058 */ lw $v1, 0x58($sp) -/* 056178 7F021648 AFA00054 */ sw $zero, 0x54($sp) -/* 05617C 7F02164C 00002025 */ move $a0, $zero -/* 056180 7F021650 24050020 */ li $a1, 32 -/* 056184 7F021654 0C0030C3 */ jal joyGetButtons -/* 056188 7F021658 AFA30058 */ sw $v1, 0x58($sp) -/* 05618C 7F02165C 1040004F */ beqz $v0, .L7F02179C -/* 056190 7F021660 8FA30058 */ lw $v1, 0x58($sp) -/* 056194 7F021664 00002025 */ move $a0, $zero -/* 056198 7F021668 34058000 */ li $a1, 32768 -/* 05619C 7F02166C 0C0030C3 */ jal joyGetButtons -/* 0561A0 7F021670 AFA30058 */ sw $v1, 0x58($sp) -/* 0561A4 7F021674 10400008 */ beqz $v0, .L7F021698 -/* 0561A8 7F021678 8FA30058 */ lw $v1, 0x58($sp) -/* 0561AC 7F02167C 3C018005 */ lui $at, %hi(D_80051D58) -/* 0561B0 7F021680 C4281D58 */ lwc1 $f8, %lo(D_80051D58)($at) -/* 0561B4 7F021684 C4660008 */ lwc1 $f6, 8($v1) -/* 0561B8 7F021688 240D0001 */ li $t5, 1 -/* 0561BC 7F02168C 46083281 */ sub.s $f10, $f6, $f8 -/* 0561C0 7F021690 E46A0008 */ swc1 $f10, 8($v1) -/* 0561C4 7F021694 AFAD0054 */ sw $t5, 0x54($sp) -.L7F021698: -/* 0561C8 7F021698 00002025 */ move $a0, $zero -/* 0561CC 7F02169C 24054000 */ li $a1, 16384 -/* 0561D0 7F0216A0 0C0030C3 */ jal joyGetButtons -/* 0561D4 7F0216A4 AFA30058 */ sw $v1, 0x58($sp) -/* 0561D8 7F0216A8 10400008 */ beqz $v0, .L7F0216CC -/* 0561DC 7F0216AC 8FA30058 */ lw $v1, 0x58($sp) -/* 0561E0 7F0216B0 3C018005 */ lui $at, %hi(D_80051D5C) -/* 0561E4 7F0216B4 C4321D5C */ lwc1 $f18, %lo(D_80051D5C)($at) -/* 0561E8 7F0216B8 C4700008 */ lwc1 $f16, 8($v1) -/* 0561EC 7F0216BC 240C0001 */ li $t4, 1 -/* 0561F0 7F0216C0 46128100 */ add.s $f4, $f16, $f18 -/* 0561F4 7F0216C4 E4640008 */ swc1 $f4, 8($v1) -/* 0561F8 7F0216C8 AFAC0054 */ sw $t4, 0x54($sp) -.L7F0216CC: -/* 0561FC 7F0216CC 00002025 */ move $a0, $zero -/* 056200 7F0216D0 24050004 */ li $a1, 4 -/* 056204 7F0216D4 0C0030C3 */ jal joyGetButtons -/* 056208 7F0216D8 AFA30058 */ sw $v1, 0x58($sp) -/* 05620C 7F0216DC 10400008 */ beqz $v0, .L7F021700 -/* 056210 7F0216E0 8FA30058 */ lw $v1, 0x58($sp) -/* 056214 7F0216E4 3C018005 */ lui $at, %hi(D_80051D60) -/* 056218 7F0216E8 C4281D60 */ lwc1 $f8, %lo(D_80051D60)($at) -/* 05621C 7F0216EC C4660004 */ lwc1 $f6, 4($v1) -/* 056220 7F0216F0 24080001 */ li $t0, 1 -/* 056224 7F0216F4 46083281 */ sub.s $f10, $f6, $f8 -/* 056228 7F0216F8 E46A0004 */ swc1 $f10, 4($v1) -/* 05622C 7F0216FC AFA80054 */ sw $t0, 0x54($sp) -.L7F021700: -/* 056230 7F021700 00002025 */ move $a0, $zero -/* 056234 7F021704 24050008 */ li $a1, 8 -/* 056238 7F021708 0C0030C3 */ jal joyGetButtons -/* 05623C 7F02170C AFA30058 */ sw $v1, 0x58($sp) -/* 056240 7F021710 10400008 */ beqz $v0, .L7F021734 -/* 056244 7F021714 8FA30058 */ lw $v1, 0x58($sp) -/* 056248 7F021718 3C018005 */ lui $at, %hi(D_80051D64) -/* 05624C 7F02171C C4321D64 */ lwc1 $f18, %lo(D_80051D64)($at) -/* 056250 7F021720 C4700004 */ lwc1 $f16, 4($v1) -/* 056254 7F021724 24180001 */ li $t8, 1 -/* 056258 7F021728 46128100 */ add.s $f4, $f16, $f18 -/* 05625C 7F02172C E4640004 */ swc1 $f4, 4($v1) -/* 056260 7F021730 AFB80054 */ sw $t8, 0x54($sp) -.L7F021734: -/* 056264 7F021734 00002025 */ move $a0, $zero -/* 056268 7F021738 24050002 */ li $a1, 2 -/* 05626C 7F02173C 0C0030C3 */ jal joyGetButtons -/* 056270 7F021740 AFA30058 */ sw $v1, 0x58($sp) -/* 056274 7F021744 10400008 */ beqz $v0, .L7F021768 -/* 056278 7F021748 8FA30058 */ lw $v1, 0x58($sp) -/* 05627C 7F02174C 3C018005 */ lui $at, %hi(D_80051D68) -/* 056280 7F021750 C4281D68 */ lwc1 $f8, %lo(D_80051D68)($at) -/* 056284 7F021754 C4660000 */ lwc1 $f6, ($v1) -/* 056288 7F021758 24190001 */ li $t9, 1 -/* 05628C 7F02175C 46083281 */ sub.s $f10, $f6, $f8 -/* 056290 7F021760 E46A0000 */ swc1 $f10, ($v1) -/* 056294 7F021764 AFB90054 */ sw $t9, 0x54($sp) -.L7F021768: -/* 056298 7F021768 00002025 */ move $a0, $zero -/* 05629C 7F02176C 24050001 */ li $a1, 1 -/* 0562A0 7F021770 0C0030C3 */ jal joyGetButtons -/* 0562A4 7F021774 AFA30058 */ sw $v1, 0x58($sp) -/* 0562A8 7F021778 10400008 */ beqz $v0, .L7F02179C -/* 0562AC 7F02177C 8FA30058 */ lw $v1, 0x58($sp) -/* 0562B0 7F021780 3C018005 */ lui $at, %hi(D_80051D6C) -/* 0562B4 7F021784 C4321D6C */ lwc1 $f18, %lo(D_80051D6C)($at) -/* 0562B8 7F021788 C4700000 */ lwc1 $f16, ($v1) -/* 0562BC 7F02178C 240F0001 */ li $t7, 1 -/* 0562C0 7F021790 46128100 */ add.s $f4, $f16, $f18 -/* 0562C4 7F021794 E4640000 */ swc1 $f4, ($v1) -/* 0562C8 7F021798 AFAF0054 */ sw $t7, 0x54($sp) -.L7F02179C: -/* 0562CC 7F02179C 00002025 */ move $a0, $zero -/* 0562D0 7F0217A0 24050010 */ li $a1, 16 -/* 0562D4 7F0217A4 0C0030C3 */ jal joyGetButtons -/* 0562D8 7F0217A8 AFA30058 */ sw $v1, 0x58($sp) -/* 0562DC 7F0217AC 1040004F */ beqz $v0, .L7F0218EC -/* 0562E0 7F0217B0 8FA30058 */ lw $v1, 0x58($sp) -/* 0562E4 7F0217B4 00002025 */ move $a0, $zero -/* 0562E8 7F0217B8 34058000 */ li $a1, 32768 -/* 0562EC 7F0217BC 0C0030C3 */ jal joyGetButtons -/* 0562F0 7F0217C0 AFA30058 */ sw $v1, 0x58($sp) -/* 0562F4 7F0217C4 10400008 */ beqz $v0, .L7F0217E8 -/* 0562F8 7F0217C8 8FA30058 */ lw $v1, 0x58($sp) -/* 0562FC 7F0217CC 3C018005 */ lui $at, %hi(D_80051D70) -/* 056300 7F0217D0 C4281D70 */ lwc1 $f8, %lo(D_80051D70)($at) -/* 056304 7F0217D4 C4660014 */ lwc1 $f6, 0x14($v1) -/* 056308 7F0217D8 240E0001 */ li $t6, 1 -/* 05630C 7F0217DC 46083282 */ mul.s $f10, $f6, $f8 -/* 056310 7F0217E0 E46A0014 */ swc1 $f10, 0x14($v1) -/* 056314 7F0217E4 AFAE0054 */ sw $t6, 0x54($sp) -.L7F0217E8: -/* 056318 7F0217E8 00002025 */ move $a0, $zero -/* 05631C 7F0217EC 24054000 */ li $a1, 16384 -/* 056320 7F0217F0 0C0030C3 */ jal joyGetButtons -/* 056324 7F0217F4 AFA30058 */ sw $v1, 0x58($sp) -/* 056328 7F0217F8 10400008 */ beqz $v0, .L7F02181C -/* 05632C 7F0217FC 8FA30058 */ lw $v1, 0x58($sp) -/* 056330 7F021800 3C018005 */ lui $at, %hi(D_80051D74) -/* 056334 7F021804 C4321D74 */ lwc1 $f18, %lo(D_80051D74)($at) -/* 056338 7F021808 C4700014 */ lwc1 $f16, 0x14($v1) -/* 05633C 7F02180C 24090001 */ li $t1, 1 -/* 056340 7F021810 46128102 */ mul.s $f4, $f16, $f18 -/* 056344 7F021814 E4640014 */ swc1 $f4, 0x14($v1) -/* 056348 7F021818 AFA90054 */ sw $t1, 0x54($sp) -.L7F02181C: -/* 05634C 7F02181C 00002025 */ move $a0, $zero -/* 056350 7F021820 24050004 */ li $a1, 4 -/* 056354 7F021824 0C0030C3 */ jal joyGetButtons -/* 056358 7F021828 AFA30058 */ sw $v1, 0x58($sp) -/* 05635C 7F02182C 10400008 */ beqz $v0, .L7F021850 -/* 056360 7F021830 8FA30058 */ lw $v1, 0x58($sp) -/* 056364 7F021834 3C018005 */ lui $at, %hi(D_80051D78) -/* 056368 7F021838 C4281D78 */ lwc1 $f8, %lo(D_80051D78)($at) -/* 05636C 7F02183C C4660010 */ lwc1 $f6, 0x10($v1) -/* 056370 7F021840 240A0001 */ li $t2, 1 -/* 056374 7F021844 46083282 */ mul.s $f10, $f6, $f8 -/* 056378 7F021848 E46A0010 */ swc1 $f10, 0x10($v1) -/* 05637C 7F02184C AFAA0054 */ sw $t2, 0x54($sp) -.L7F021850: -/* 056380 7F021850 00002025 */ move $a0, $zero -/* 056384 7F021854 24050008 */ li $a1, 8 -/* 056388 7F021858 0C0030C3 */ jal joyGetButtons -/* 05638C 7F02185C AFA30058 */ sw $v1, 0x58($sp) -/* 056390 7F021860 10400008 */ beqz $v0, .L7F021884 -/* 056394 7F021864 8FA30058 */ lw $v1, 0x58($sp) -/* 056398 7F021868 3C018005 */ lui $at, %hi(D_80051D7C) -/* 05639C 7F02186C C4321D7C */ lwc1 $f18, %lo(D_80051D7C)($at) -/* 0563A0 7F021870 C4700010 */ lwc1 $f16, 0x10($v1) -/* 0563A4 7F021874 240B0001 */ li $t3, 1 -/* 0563A8 7F021878 46128102 */ mul.s $f4, $f16, $f18 -/* 0563AC 7F02187C E4640010 */ swc1 $f4, 0x10($v1) -/* 0563B0 7F021880 AFAB0054 */ sw $t3, 0x54($sp) -.L7F021884: -/* 0563B4 7F021884 00002025 */ move $a0, $zero -/* 0563B8 7F021888 24050002 */ li $a1, 2 -/* 0563BC 7F02188C 0C0030C3 */ jal joyGetButtons -/* 0563C0 7F021890 AFA30058 */ sw $v1, 0x58($sp) -/* 0563C4 7F021894 10400008 */ beqz $v0, .L7F0218B8 -/* 0563C8 7F021898 8FA30058 */ lw $v1, 0x58($sp) -/* 0563CC 7F02189C 3C018005 */ lui $at, %hi(D_80051D80) -/* 0563D0 7F0218A0 C4281D80 */ lwc1 $f8, %lo(D_80051D80)($at) -/* 0563D4 7F0218A4 C466000C */ lwc1 $f6, 0xc($v1) -/* 0563D8 7F0218A8 240D0001 */ li $t5, 1 -/* 0563DC 7F0218AC 46083282 */ mul.s $f10, $f6, $f8 -/* 0563E0 7F0218B0 E46A000C */ swc1 $f10, 0xc($v1) -/* 0563E4 7F0218B4 AFAD0054 */ sw $t5, 0x54($sp) -.L7F0218B8: -/* 0563E8 7F0218B8 00002025 */ move $a0, $zero -/* 0563EC 7F0218BC 24050001 */ li $a1, 1 -/* 0563F0 7F0218C0 0C0030C3 */ jal joyGetButtons -/* 0563F4 7F0218C4 AFA30058 */ sw $v1, 0x58($sp) -/* 0563F8 7F0218C8 10400008 */ beqz $v0, .L7F0218EC -/* 0563FC 7F0218CC 8FA30058 */ lw $v1, 0x58($sp) -/* 056400 7F0218D0 3C018005 */ lui $at, %hi(D_80051D84) -/* 056404 7F0218D4 C4321D84 */ lwc1 $f18, %lo(D_80051D84)($at) -/* 056408 7F0218D8 C470000C */ lwc1 $f16, 0xc($v1) -/* 05640C 7F0218DC 240C0001 */ li $t4, 1 -/* 056410 7F0218E0 46128102 */ mul.s $f4, $f16, $f18 -/* 056414 7F0218E4 E464000C */ swc1 $f4, 0xc($v1) -/* 056418 7F0218E8 AFAC0054 */ sw $t4, 0x54($sp) -.L7F0218EC: -/* 05641C 7F0218EC 3C018005 */ lui $at, %hi(D_80051D88) -/* 056420 7F0218F0 C4201D88 */ lwc1 $f0, %lo(D_80051D88)($at) -/* 056424 7F0218F4 C4660000 */ lwc1 $f6, ($v1) -/* 056428 7F0218F8 27A400F0 */ addiu $a0, $sp, 0xf0 -/* 05642C 7F0218FC 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 056430 7F021900 46003202 */ mul.s $f8, $f6, $f0 -/* 056434 7F021904 E7A800F0 */ swc1 $f8, 0xf0($sp) -/* 056438 7F021908 C46A0004 */ lwc1 $f10, 4($v1) -/* 05643C 7F02190C 46005402 */ mul.s $f16, $f10, $f0 -/* 056440 7F021910 E7B000F4 */ swc1 $f16, 0xf4($sp) -/* 056444 7F021914 C4720008 */ lwc1 $f18, 8($v1) -/* 056448 7F021918 46009102 */ mul.s $f4, $f18, $f0 -/* 05644C 7F02191C E7A400F8 */ swc1 $f4, 0xf8($sp) -/* 056450 7F021920 C466000C */ lwc1 $f6, 0xc($v1) -/* 056454 7F021924 E7A600EC */ swc1 $f6, 0xec($sp) -/* 056458 7F021928 C4680010 */ lwc1 $f8, 0x10($v1) -/* 05645C 7F02192C E7A800E8 */ swc1 $f8, 0xe8($sp) -/* 056460 7F021930 C46A0014 */ lwc1 $f10, 0x14($v1) -/* 056464 7F021934 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 056468 7F021938 E7AA00E4 */ swc1 $f10, 0xe4($sp) -/* 05646C 7F02193C C7AC00EC */ lwc1 $f12, 0xec($sp) -/* 056470 7F021940 0FC1626D */ jal matrix_column_1_scalar_multiply -/* 056474 7F021944 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 056478 7F021948 C7AC00E8 */ lwc1 $f12, 0xe8($sp) -/* 05647C 7F02194C 0FC16279 */ jal matrix_column_2_scalar_multiply -/* 056480 7F021950 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 056484 7F021954 C7AC00E4 */ lwc1 $f12, 0xe4($sp) -/* 056488 7F021958 0FC16293 */ jal matrix_column_3_scalar_multiply_2 -/* 05648C 7F02195C 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 056490 7F021960 8FA800FC */ lw $t0, 0xfc($sp) -/* 056494 7F021964 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 056498 7F021968 27A60064 */ addiu $a2, $sp, 0x64 -/* 05649C 7F02196C 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0564A0 7F021970 8D04000C */ lw $a0, 0xc($t0) -/* 0564A4 7F021974 8FB800FC */ lw $t8, 0xfc($sp) -/* 0564A8 7F021978 27A40064 */ addiu $a0, $sp, 0x64 -/* 0564AC 7F02197C 0FC16008 */ jal matrix_4x4_copy -/* 0564B0 7F021980 8F05000C */ lw $a1, 0xc($t8) -/* 0564B4 7F021984 8FB90060 */ lw $t9, 0x60($sp) -/* 0564B8 7F021988 24010002 */ li $at, 2 -/* 0564BC 7F02198C 57210003 */ bnel $t9, $at, .L7F02199C -/* 0564C0 7F021990 960F0012 */ lhu $t7, 0x12($s0) -/* 0564C4 7F021994 AFA00108 */ sw $zero, 0x108($sp) -.L7F021998: -/* 0564C8 7F021998 960F0012 */ lhu $t7, 0x12($s0) -.L7F02199C: -/* 0564CC 7F02199C 8FA90100 */ lw $t1, 0x100($sp) -/* 0564D0 7F0219A0 8FA500FC */ lw $a1, 0xfc($sp) -/* 0564D4 7F0219A4 31EE0001 */ andi $t6, $t7, 1 -/* 0564D8 7F0219A8 11C00005 */ beqz $t6, .L7F0219C0 -/* 0564DC 7F0219AC 00000000 */ nop -/* 0564E0 7F0219B0 8D2A0064 */ lw $t2, 0x64($t1) -/* 0564E4 7F0219B4 314B0080 */ andi $t3, $t2, 0x80 -/* 0564E8 7F0219B8 55600005 */ bnezl $t3, .L7F0219D0 -/* 0564EC 7F0219BC 8FAD0110 */ lw $t5, 0x110($sp) -.L7F0219C0: -/* 0564F0 7F0219C0 0FC1AC48 */ jal sub_GAME_7F06B120 -/* 0564F4 7F0219C4 8E040020 */ lw $a0, 0x20($s0) -/* 0564F8 7F0219C8 AE020020 */ sw $v0, 0x20($s0) -/* 0564FC 7F0219CC 8FAD0110 */ lw $t5, 0x110($sp) -.L7F0219D0: -/* 056500 7F0219D0 8DAC0008 */ lw $t4, 8($t5) -/* 056504 7F0219D4 8D880008 */ lw $t0, 8($t4) -/* 056508 7F0219D8 8D050010 */ lw $a1, 0x10($t0) -/* 05650C 7F0219DC 10A0000E */ beqz $a1, .L7F021A18 -/* 056510 7F0219E0 00000000 */ nop -/* 056514 7F0219E4 0FC1B1E7 */ jal modelGetNodeRwData -/* 056518 7F0219E8 01A02025 */ move $a0, $t5 -/* 05651C 7F0219EC 8C430000 */ lw $v1, ($v0) -/* 056520 7F0219F0 10600009 */ beqz $v1, .L7F021A18 -/* 056524 7F0219F4 00000000 */ nop -/* 056528 7F0219F8 8C780008 */ lw $t8, 8($v1) -/* 05652C 7F0219FC 8F050004 */ lw $a1, 4($t8) -/* 056530 7F021A00 10A00005 */ beqz $a1, .L7F021A18 -/* 056534 7F021A04 00000000 */ nop -/* 056538 7F021A08 0FC1B1E7 */ jal modelGetNodeRwData -/* 05653C 7F021A0C 8FA40110 */ lw $a0, 0x110($sp) -/* 056540 7F021A10 8FB90108 */ lw $t9, 0x108($sp) -/* 056544 7F021A14 AC590000 */ sw $t9, ($v0) -.L7F021A18: -/* 056548 7F021A18 0FC1ACA7 */ jal sub_GAME_7F06B29C -/* 05654C 7F021A1C 8E040020 */ lw $a0, 0x20($s0) -/* 056550 7F021A20 0FC1AECA */ jal sub_GAME_7F06BB28 -/* 056554 7F021A24 8E040020 */ lw $a0, 0x20($s0) -/* 056558 7F021A28 10000020 */ b .L7F021AAC -/* 05655C 7F021A2C AE020020 */ sw $v0, 0x20($s0) -/* 056560 7F021A30 8E020160 */ lw $v0, 0x160($s0) -.L7F021A34: -/* 056564 7F021A34 50400005 */ beql $v0, $zero, .L7F021A4C -/* 056568 7F021A38 8E020164 */ lw $v0, 0x164($s0) -/* 05656C 7F021A3C 904F0001 */ lbu $t7, 1($v0) -/* 056570 7F021A40 31EEFFFD */ andi $t6, $t7, 0xfffd -/* 056574 7F021A44 A04E0001 */ sb $t6, 1($v0) -/* 056578 7F021A48 8E020164 */ lw $v0, 0x164($s0) -.L7F021A4C: -/* 05657C 7F021A4C 2403FFFD */ li $v1, -3 -/* 056580 7F021A50 50400005 */ beql $v0, $zero, .L7F021A68 -/* 056584 7F021A54 8E0201D8 */ lw $v0, 0x1d8($s0) -/* 056588 7F021A58 90490001 */ lbu $t1, 1($v0) -/* 05658C 7F021A5C 01235024 */ and $t2, $t1, $v1 -/* 056590 7F021A60 A04A0001 */ sb $t2, 1($v0) -/* 056594 7F021A64 8E0201D8 */ lw $v0, 0x1d8($s0) -.L7F021A68: -/* 056598 7F021A68 50400005 */ beql $v0, $zero, .L7F021A80 -/* 05659C 7F021A6C 8FA80158 */ lw $t0, 0x158($sp) -/* 0565A0 7F021A70 904B0001 */ lbu $t3, 1($v0) -/* 0565A4 7F021A74 01636024 */ and $t4, $t3, $v1 -/* 0565A8 7F021A78 A04C0001 */ sb $t4, 1($v0) -/* 0565AC 7F021A7C 8FA80158 */ lw $t0, 0x158($sp) -.L7F021A80: -/* 0565B0 7F021A80 910D0001 */ lbu $t5, 1($t0) -/* 0565B4 7F021A84 01A3C024 */ and $t8, $t5, $v1 -/* 0565B8 7F021A88 A1180001 */ sb $t8, 1($t0) -/* 0565BC 7F021A8C 921900F8 */ lbu $t9, 0xf8($s0) -/* 0565C0 7F021A90 920F00F9 */ lbu $t7, 0xf9($s0) -/* 0565C4 7F021A94 920E00FA */ lbu $t6, 0xfa($s0) -/* 0565C8 7F021A98 920900FB */ lbu $t1, 0xfb($s0) -/* 0565CC 7F021A9C A21900F4 */ sb $t9, 0xf4($s0) -/* 0565D0 7F021AA0 A20F00F5 */ sb $t7, 0xf5($s0) -/* 0565D4 7F021AA4 A20E00F6 */ sb $t6, 0xf6($s0) -/* 0565D8 7F021AA8 A20900F7 */ sb $t1, 0xf7($s0) -.L7F021AAC: -/* 0565DC 7F021AAC 8E0A0014 */ lw $t2, 0x14($s0) -/* 0565E0 7F021AB0 314B0400 */ andi $t3, $t2, 0x400 -/* 0565E4 7F021AB4 55600015 */ bnezl $t3, .L7F021B0C -/* 0565E8 7F021AB8 00001025 */ move $v0, $zero -/* 0565EC 7F021ABC 96020012 */ lhu $v0, 0x12($s0) -/* 0565F0 7F021AC0 8FAD0158 */ lw $t5, 0x158($sp) -/* 0565F4 7F021AC4 304C0001 */ andi $t4, $v0, 1 -/* 0565F8 7F021AC8 1180000D */ beqz $t4, .L7F021B00 -/* 0565FC 7F021ACC 00000000 */ nop -/* 056600 7F021AD0 8DA40020 */ lw $a0, 0x20($t5) -/* 056604 7F021AD4 50800009 */ beql $a0, $zero, .L7F021AFC -/* 056608 7F021AD8 3058FFFE */ andi $t8, $v0, 0xfffe -/* 05660C 7F021ADC 8C830024 */ lw $v1, 0x24($a0) -.L7F021AE0: -/* 056610 7F021AE0 0FC1304C */ jal objDrop -/* 056614 7F021AE4 AFA3003C */ sw $v1, 0x3c($sp) -/* 056618 7F021AE8 8FA4003C */ lw $a0, 0x3c($sp) -/* 05661C 7F021AEC 5480FFFC */ bnezl $a0, .L7F021AE0 -/* 056620 7F021AF0 8C830024 */ lw $v1, 0x24($a0) -/* 056624 7F021AF4 96020012 */ lhu $v0, 0x12($s0) -/* 056628 7F021AF8 3058FFFE */ andi $t8, $v0, 0xfffe -.L7F021AFC: -/* 05662C 7F021AFC A6180012 */ sh $t8, 0x12($s0) -.L7F021B00: -/* 056630 7F021B00 0FC0B89B */ jal chrlvTriggerFireWeapon -/* 056634 7F021B04 02002025 */ move $a0, $s0 -/* 056638 7F021B08 00001025 */ move $v0, $zero -.L7F021B0C: -/* 05663C 7F021B0C 8FBF0024 */ lw $ra, 0x24($sp) -/* 056640 7F021B10 8FB00020 */ lw $s0, 0x20($sp) -/* 056644 7F021B14 27BD0158 */ addiu $sp, $sp, 0x158 -/* 056648 7F021B18 03E00008 */ jr $ra -/* 05664C 7F021B1C 00000000 */ nop -) + if (cheatIsActive(CHEAT_DK_MODE)) + { + modelSetDistanceScale(0.3125f); + } #endif -#ifdef VERSION_JP -GLOBAL_ASM( -.text -glabel chrTickBeams -/* 055CF8 7F021188 27BDFEA8 */ addiu $sp, $sp, -0x158 -/* 055CFC 7F02118C 3C0F8003 */ lui $t7, %hi(D_8002CC6C) # $t7, 0x8003 -/* 055D00 7F021190 25EFCCAC */ addiu $t7, %lo(D_8002CC6C) # addiu $t7, $t7, -0x3354 -/* 055D04 7F021194 AFBF0024 */ sw $ra, 0x24($sp) -/* 055D08 7F021198 AFB00020 */ sw $s0, 0x20($sp) -/* 055D0C 7F02119C AFA40158 */ sw $a0, 0x158($sp) -/* 055D10 7F0211A0 25E8003C */ addiu $t0, $t7, 0x3c -/* 055D14 7F0211A4 27AE0118 */ addiu $t6, $sp, 0x118 -.Ljp7F0211A8: -/* 055D18 7F0211A8 8DE10000 */ lw $at, ($t7) -/* 055D1C 7F0211AC 25EF000C */ addiu $t7, $t7, 0xc -/* 055D20 7F0211B0 25CE000C */ addiu $t6, $t6, 0xc -/* 055D24 7F0211B4 ADC1FFF4 */ sw $at, -0xc($t6) -/* 055D28 7F0211B8 8DE1FFF8 */ lw $at, -8($t7) -/* 055D2C 7F0211BC ADC1FFF8 */ sw $at, -8($t6) -/* 055D30 7F0211C0 8DE1FFFC */ lw $at, -4($t7) -/* 055D34 7F0211C4 15E8FFF8 */ bne $t7, $t0, .Ljp7F0211A8 -/* 055D38 7F0211C8 ADC1FFFC */ sw $at, -4($t6) -/* 055D3C 7F0211CC 8DE10000 */ lw $at, ($t7) -/* 055D40 7F0211D0 3C0C8005 */ lui $t4, %hi(g_ClockTimer) # $t4, 0x8005 -/* 055D44 7F0211D4 240B0001 */ li $t3, 1 -/* 055D48 7F0211D8 ADC10000 */ sw $at, ($t6) -/* 055D4C 7F0211DC 8FA90158 */ lw $t1, 0x158($sp) -/* 055D50 7F0211E0 8D8C83A4 */ lw $t4, %lo(g_ClockTimer)($t4) -/* 055D54 7F0211E4 3C188003 */ lui $t8, %hi(D_8002C904) # $t8, 0x8003 -/* 055D58 7F0211E8 8D300004 */ lw $s0, 4($t1) -/* 055D5C 7F0211EC 8E0A001C */ lw $t2, 0x1c($s0) -/* 055D60 7F0211F0 AFAB0108 */ sw $t3, 0x108($sp) -/* 055D64 7F0211F4 AFAC0104 */ sw $t4, 0x104($sp) -/* 055D68 7F0211F8 AFAA0110 */ sw $t2, 0x110($sp) -/* 055D6C 7F0211FC 8E020014 */ lw $v0, 0x14($s0) -/* 055D70 7F021200 304D0400 */ andi $t5, $v0, 0x400 -/* 055D74 7F021204 11A00003 */ beqz $t5, .Ljp7F021214 -/* 055D78 7F021208 0002CB40 */ sll $t9, $v0, 0xd -/* 055D7C 7F02120C 07230035 */ bgezl $t9, .Ljp7F0212E4 -/* 055D80 7F021210 96180012 */ lhu $t8, 0x12($s0) -.Ljp7F021214: -/* 055D84 7F021214 8F18C944 */ lw $t8, %lo(D_8002C904)($t8) -/* 055D88 7F021218 3C088003 */ lui $t0, %hi(g_AnimationTablePointerCountRelated) # $t0, 0x8003 -/* 055D8C 7F02121C 1300001E */ beqz $t8, .Ljp7F021298 -/* 055D90 7F021220 00000000 */ nop -/* 055D94 7F021224 8D08C948 */ lw $t0, %lo(g_AnimationTablePointerCountRelated)($t0) -/* 055D98 7F021228 3C0E8003 */ lui $t6, %hi(animation_table_ptrs1) -/* 055D9C 7F02122C 24010001 */ li $at, 1 -/* 055DA0 7F021230 00087880 */ sll $t7, $t0, 2 -/* 055DA4 7F021234 01CF7021 */ addu $t6, $t6, $t7 -/* 055DA8 7F021238 8DCE9DAC */ lw $t6, %lo(animation_table_ptrs1)($t6) -/* 055DAC 7F02123C 11C1001D */ beq $t6, $at, .Ljp7F0212B4 -/* 055DB0 7F021240 00000000 */ nop -/* 055DB4 7F021244 0FC1BEE7 */ jal objecthandlerGetModelAnim -/* 055DB8 7F021248 8FA40110 */ lw $a0, 0x110($sp) -/* 055DBC 7F02124C 3C098003 */ lui $t1, %hi(g_AnimationTablePointerCountRelated) # $t1, 0x8003 -/* 055DC0 7F021250 8D29C948 */ lw $t1, %lo(g_AnimationTablePointerCountRelated)($t1) -/* 055DC4 7F021254 3C058003 */ lui $a1, %hi(animation_table_ptrs1) -/* 055DC8 7F021258 8FA40110 */ lw $a0, 0x110($sp) -/* 055DCC 7F02125C 00095080 */ sll $t2, $t1, 2 -/* 055DD0 7F021260 00AA2821 */ addu $a1, $a1, $t2 -/* 055DD4 7F021264 8CA59DAC */ lw $a1, %lo(animation_table_ptrs1)($a1) -/* 055DD8 7F021268 00003025 */ move $a2, $zero -/* 055DDC 7F02126C 10450011 */ beq $v0, $a1, .Ljp7F0212B4 -/* 055DE0 7F021270 00000000 */ nop -/* 055DE4 7F021274 44800000 */ mtc1 $zero, $f0 -/* 055DE8 7F021278 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 055DEC 7F02127C 44812000 */ mtc1 $at, $f4 -/* 055DF0 7F021280 44070000 */ mfc1 $a3, $f0 -/* 055DF4 7F021284 E7A00014 */ swc1 $f0, 0x14($sp) -/* 055DF8 7F021288 0FC1C0A6 */ jal modelSetAnimation -/* 055DFC 7F02128C E7A40010 */ swc1 $f4, 0x10($sp) -/* 055E00 7F021290 10000008 */ b .Ljp7F0212B4 -/* 055E04 7F021294 00000000 */ nop -.Ljp7F021298: -/* 055E08 7F021298 0FC0CA6F */ jal chrlvActionTick -/* 055E0C 7F02129C 02002025 */ move $a0, $s0 -/* 055E10 7F0212A0 8E0B001C */ lw $t3, 0x1c($s0) -/* 055E14 7F0212A4 15600003 */ bnez $t3, .Ljp7F0212B4 -/* 055E18 7F0212A8 00000000 */ nop -/* 055E1C 7F0212AC 100002D1 */ b .Ljp7F021DF4 -/* 055E20 7F0212B0 24020001 */ li $v0, 1 -.Ljp7F0212B4: -/* 055E24 7F0212B4 3C0C8003 */ lui $t4, %hi(D_8002C90C) # $t4, 0x8003 -/* 055E28 7F0212B8 8D8CC94C */ lw $t4, %lo(D_8002C90C)($t4) -/* 055E2C 7F0212BC 3C0D8003 */ lui $t5, %hi(D_8002C910) # $t5, 0x8003 -/* 055E30 7F0212C0 51800008 */ beql $t4, $zero, .Ljp7F0212E4 -/* 055E34 7F0212C4 96180012 */ lhu $t8, 0x12($s0) -/* 055E38 7F0212C8 8DADC950 */ lw $t5, %lo(D_8002C910)($t5) -/* 055E3C 7F0212CC AFA00104 */ sw $zero, 0x104($sp) -/* 055E40 7F0212D0 24190001 */ li $t9, 1 -/* 055E44 7F0212D4 51A00003 */ beql $t5, $zero, .Ljp7F0212E4 -/* 055E48 7F0212D8 96180012 */ lhu $t8, 0x12($s0) -/* 055E4C 7F0212DC AFB90104 */ sw $t9, 0x104($sp) -/* 055E50 7F0212E0 96180012 */ lhu $t8, 0x12($s0) -.Ljp7F0212E4: -/* 055E54 7F0212E4 33080020 */ andi $t0, $t8, 0x20 -/* 055E58 7F0212E8 51000006 */ beql $t0, $zero, .Ljp7F021304 -/* 055E5C 7F0212EC 8E020160 */ lw $v0, 0x160($s0) -/* 055E60 7F0212F0 0FC08171 */ jal disable_sounds_attached_to_player_then_something -/* 055E64 7F0212F4 8FA40158 */ lw $a0, 0x158($sp) -/* 055E68 7F0212F8 100002BE */ b .Ljp7F021DF4 -/* 055E6C 7F0212FC 24020001 */ li $v0, 1 -/* 055E70 7F021300 8E020160 */ lw $v0, 0x160($s0) -.Ljp7F021304: -/* 055E74 7F021304 50400009 */ beql $v0, $zero, .Ljp7F02132C -/* 055E78 7F021308 8E020164 */ lw $v0, 0x164($s0) -/* 055E7C 7F02130C 8C440004 */ lw $a0, 4($v0) -/* 055E80 7F021310 8C8F0064 */ lw $t7, 0x64($a0) -/* 055E84 7F021314 31EE0004 */ andi $t6, $t7, 4 -/* 055E88 7F021318 51C00004 */ beql $t6, $zero, .Ljp7F02132C -/* 055E8C 7F02131C 8E020164 */ lw $v0, 0x164($s0) -/* 055E90 7F021320 0FC104C9 */ jal objFreePermanently -/* 055E94 7F021324 24050001 */ li $a1, 1 -/* 055E98 7F021328 8E020164 */ lw $v0, 0x164($s0) -.Ljp7F02132C: -/* 055E9C 7F02132C 50400009 */ beql $v0, $zero, .Ljp7F021354 -/* 055EA0 7F021330 8E020014 */ lw $v0, 0x14($s0) -/* 055EA4 7F021334 8C440004 */ lw $a0, 4($v0) -/* 055EA8 7F021338 8C890064 */ lw $t1, 0x64($a0) -/* 055EAC 7F02133C 312A0004 */ andi $t2, $t1, 4 -/* 055EB0 7F021340 51400004 */ beql $t2, $zero, .Ljp7F021354 -/* 055EB4 7F021344 8E020014 */ lw $v0, 0x14($s0) -/* 055EB8 7F021348 0FC104C9 */ jal objFreePermanently -/* 055EBC 7F02134C 24050001 */ li $a1, 1 -/* 055EC0 7F021350 8E020014 */ lw $v0, 0x14($s0) -.Ljp7F021354: -/* 055EC4 7F021354 8FAC0158 */ lw $t4, 0x158($sp) -/* 055EC8 7F021358 304B0400 */ andi $t3, $v0, 0x400 -/* 055ECC 7F02135C 51600005 */ beql $t3, $zero, .Ljp7F021374 -/* 055ED0 7F021360 918D0000 */ lbu $t5, ($t4) -/* 055ED4 7F021364 AFA0010C */ sw $zero, 0x10c($sp) -/* 055ED8 7F021368 100000BD */ b .Ljp7F021660 -/* 055EDC 7F02136C 82030007 */ lb $v1, 7($s0) -/* 055EE0 7F021370 918D0000 */ lbu $t5, ($t4) -.Ljp7F021374: -/* 055EE4 7F021374 24010006 */ li $at, 6 -/* 055EE8 7F021378 55A1000D */ bnel $t5, $at, .Ljp7F0213B0 -/* 055EEC 7F02137C 00027A00 */ sll $t7, $v0, 8 -/* 055EF0 7F021380 0FC26F3F */ jal getPlayerPointerIndex -/* 055EF4 7F021384 01802025 */ move $a0, $t4 -/* 055EF8 7F021388 0002C880 */ sll $t9, $v0, 2 -/* 055EFC 7F02138C 3C188008 */ lui $t8, %hi(g_playerPointers) -/* 055F00 7F021390 0319C021 */ addu $t8, $t8, $t9 -/* 055F04 7F021394 8F189F50 */ lw $t8, %lo(g_playerPointers)($t8) -/* 055F08 7F021398 24010001 */ li $at, 1 -/* 055F0C 7F02139C 8F080000 */ lw $t0, ($t8) -/* 055F10 7F0213A0 51010005 */ beql $t0, $at, .Ljp7F0213B8 -/* 055F14 7F0213A4 240E0001 */ li $t6, 1 -/* 055F18 7F0213A8 8E020014 */ lw $v0, 0x14($s0) -/* 055F1C 7F0213AC 00027A00 */ sll $t7, $v0, 8 -.Ljp7F0213B0: -/* 055F20 7F0213B0 05E10017 */ bgez $t7, .Ljp7F021410 -/* 055F24 7F0213B4 240E0001 */ li $t6, 1 -.Ljp7F0213B8: -/* 055F28 7F0213B8 AFAE010C */ sw $t6, 0x10c($sp) -/* 055F2C 7F0213BC 82090007 */ lb $t1, 7($s0) -/* 055F30 7F0213C0 24010003 */ li $at, 3 -/* 055F34 7F0213C4 02002025 */ move $a0, $s0 -/* 055F38 7F0213C8 1521000D */ bne $t1, $at, .Ljp7F021400 -/* 055F3C 7F0213CC 00000000 */ nop -/* 055F40 7F0213D0 8E0A002C */ lw $t2, 0x2c($s0) -/* 055F44 7F0213D4 1540000A */ bnez $t2, .Ljp7F021400 -/* 055F48 7F0213D8 00000000 */ nop -/* 055F4C 7F0213DC 8E0B003C */ lw $t3, 0x3c($s0) -/* 055F50 7F0213E0 8FA50104 */ lw $a1, 0x104($sp) -/* 055F54 7F0213E4 00003025 */ move $a2, $zero -/* 055F58 7F0213E8 11600005 */ beqz $t3, .Ljp7F021400 -/* 055F5C 7F0213EC 00000000 */ nop -/* 055F60 7F0213F0 0FC1C437 */ jal modelTickAnimQuarterSpeed -/* 055F64 7F0213F4 8FA40110 */ lw $a0, 0x110($sp) -/* 055F68 7F0213F8 10000003 */ b .Ljp7F021408 -/* 055F6C 7F0213FC 00000000 */ nop -.Ljp7F021400: -/* 055F70 7F021400 0FC08436 */ jal chrPositionRelated7F020E40 -/* 055F74 7F021404 8FA50104 */ lw $a1, 0x104($sp) -.Ljp7F021408: -/* 055F78 7F021408 10000095 */ b .Ljp7F021660 -/* 055F7C 7F02140C 82030007 */ lb $v1, 7($s0) -.Ljp7F021410: -/* 055F80 7F021410 82030007 */ lb $v1, 7($s0) -/* 055F84 7F021414 2406000E */ li $a2, 14 -/* 055F88 7F021418 2401000F */ li $at, 15 -/* 055F8C 7F02141C 10C30003 */ beq $a2, $v1, .Ljp7F02142C -/* 055F90 7F021420 00000000 */ nop -/* 055F94 7F021424 54610041 */ bnel $v1, $at, .Ljp7F02152C -/* 055F98 7F021428 24010003 */ li $at, 3 -.Ljp7F02142C: -/* 055F9C 7F02142C 54C30005 */ bnel $a2, $v1, .Ljp7F021444 -/* 055FA0 7F021430 2401000F */ li $at, 15 -/* 055FA4 7F021434 820D0038 */ lb $t5, 0x38($s0) -/* 055FA8 7F021438 24010006 */ li $at, 6 -/* 055FAC 7F02143C 11A10007 */ beq $t5, $at, .Ljp7F02145C -/* 055FB0 7F021440 2401000F */ li $at, 15 -.Ljp7F021444: -/* 055FB4 7F021444 1461001E */ bne $v1, $at, .Ljp7F0214C0 -/* 055FB8 7F021448 02002025 */ move $a0, $s0 -/* 055FBC 7F02144C 820C005C */ lb $t4, 0x5c($s0) -/* 055FC0 7F021450 24010006 */ li $at, 6 -/* 055FC4 7F021454 1581001A */ bne $t4, $at, .Ljp7F0214C0 -/* 055FC8 7F021458 00000000 */ nop -.Ljp7F02145C: -/* 055FCC 7F02145C 0FC1B57F */ jal getinstsize -/* 055FD0 7F021460 8FA40110 */ lw $a0, 0x110($sp) -/* 055FD4 7F021464 8FA40158 */ lw $a0, 0x158($sp) -/* 055FD8 7F021468 44060000 */ mfc1 $a2, $f0 -/* 055FDC 7F02146C 24070001 */ li $a3, 1 -/* 055FE0 7F021470 24850008 */ addiu $a1, $a0, 8 -/* 055FE4 7F021474 0FC1549A */ jal sub_GAME_7F054D6C -/* 055FE8 7F021478 AFA50030 */ sw $a1, 0x30($sp) -/* 055FEC 7F02147C 10400028 */ beqz $v0, .Ljp7F021520 -/* 055FF0 7F021480 AFA2010C */ sw $v0, 0x10c($sp) -/* 055FF4 7F021484 8FA40110 */ lw $a0, 0x110($sp) -/* 055FF8 7F021488 0FC1B462 */ jal getsuboffset -/* 055FFC 7F02148C 260500BC */ addiu $a1, $s0, 0xbc -/* 056000 7F021490 0FC1B728 */ jal subcalcpos -/* 056004 7F021494 8FA40110 */ lw $a0, 0x110($sp) -/* 056008 7F021498 8FA40158 */ lw $a0, 0x158($sp) -/* 05600C 7F02149C 0FC100E7 */ jal set_color_shading_from_tile -/* 056010 7F0214A0 260500F8 */ addiu $a1, $s0, 0xf8 -/* 056014 7F0214A4 8FA40110 */ lw $a0, 0x110($sp) -/* 056018 7F0214A8 0FC1B462 */ jal getsuboffset -/* 05601C 7F0214AC 8FA50030 */ lw $a1, 0x30($sp) -/* 056020 7F0214B0 0FC0840B */ jal chrPositionRelated7F020D94 -/* 056024 7F0214B4 02002025 */ move $a0, $s0 -/* 056028 7F0214B8 10000019 */ b .Ljp7F021520 -/* 05602C 7F0214BC 00000000 */ nop -.Ljp7F0214C0: -/* 056030 7F0214C0 0FC08436 */ jal chrPositionRelated7F020E40 -/* 056034 7F0214C4 8FA50104 */ lw $a1, 0x104($sp) -/* 056038 7F0214C8 0FC1B57F */ jal getinstsize -/* 05603C 7F0214CC 8FA40110 */ lw $a0, 0x110($sp) -/* 056040 7F0214D0 8FA40158 */ lw $a0, 0x158($sp) -/* 056044 7F0214D4 44060000 */ mfc1 $a2, $f0 -/* 056048 7F0214D8 24070001 */ li $a3, 1 -/* 05604C 7F0214DC 0FC1549A */ jal sub_GAME_7F054D6C -/* 056050 7F0214E0 24850008 */ addiu $a1, $a0, 8 -/* 056054 7F0214E4 1040000E */ beqz $v0, .Ljp7F021520 -/* 056058 7F0214E8 AFA2010C */ sw $v0, 0x10c($sp) -/* 05605C 7F0214EC 82030007 */ lb $v1, 7($s0) -/* 056060 7F0214F0 2401000E */ li $at, 14 -/* 056064 7F0214F4 3C088005 */ lui $t0, %hi(g_GlobalTimer) # $t0, 0x8005 -/* 056068 7F0214F8 54610005 */ bnel $v1, $at, .Ljp7F021510 -/* 05606C 7F0214FC 2401000F */ li $at, 15 -/* 056070 7F021500 8D0883AC */ lw $t0, %lo(g_GlobalTimer)($t0) -/* 056074 7F021504 10000006 */ b .Ljp7F021520 -/* 056078 7F021508 AE080078 */ sw $t0, 0x78($s0) -/* 05607C 7F02150C 2401000F */ li $at, 15 -.Ljp7F021510: -/* 056080 7F021510 14610003 */ bne $v1, $at, .Ljp7F021520 -/* 056084 7F021514 3C0F8005 */ lui $t7, %hi(g_GlobalTimer) # $t7, 0x8005 -/* 056088 7F021518 8DEF83AC */ lw $t7, %lo(g_GlobalTimer)($t7) -/* 05608C 7F02151C AE0F009C */ sw $t7, 0x9c($s0) -.Ljp7F021520: -/* 056090 7F021520 1000004F */ b .Ljp7F021660 -/* 056094 7F021524 82030007 */ lb $v1, 7($s0) -/* 056098 7F021528 24010003 */ li $at, 3 -.Ljp7F02152C: -/* 05609C 7F02152C 5461001C */ bnel $v1, $at, .Ljp7F0215A0 -/* 0560A0 7F021530 24010001 */ li $at, 1 -/* 0560A4 7F021534 8E0E002C */ lw $t6, 0x2c($s0) -/* 0560A8 7F021538 55C00019 */ bnezl $t6, .Ljp7F0215A0 -/* 0560AC 7F02153C 24010001 */ li $at, 1 -/* 0560B0 7F021540 0FC1B57F */ jal getinstsize -/* 0560B4 7F021544 8FA40110 */ lw $a0, 0x110($sp) -/* 0560B8 7F021548 8FA40158 */ lw $a0, 0x158($sp) -/* 0560BC 7F02154C 44060000 */ mfc1 $a2, $f0 -/* 0560C0 7F021550 24070001 */ li $a3, 1 -/* 0560C4 7F021554 0FC1549A */ jal sub_GAME_7F054D6C -/* 0560C8 7F021558 24850008 */ addiu $a1, $a0, 8 -/* 0560CC 7F02155C 10400009 */ beqz $v0, .Ljp7F021584 -/* 0560D0 7F021560 AFA2010C */ sw $v0, 0x10c($sp) -/* 0560D4 7F021564 8E0A003C */ lw $t2, 0x3c($s0) -/* 0560D8 7F021568 02002025 */ move $a0, $s0 -/* 0560DC 7F02156C 55400006 */ bnezl $t2, .Ljp7F021588 -/* 0560E0 7F021570 8FA40110 */ lw $a0, 0x110($sp) -/* 0560E4 7F021574 0FC08436 */ jal chrPositionRelated7F020E40 -/* 0560E8 7F021578 8FA50104 */ lw $a1, 0x104($sp) -/* 0560EC 7F02157C 10000005 */ b .Ljp7F021594 -/* 0560F0 7F021580 00000000 */ nop -.Ljp7F021584: -/* 0560F4 7F021584 8FA40110 */ lw $a0, 0x110($sp) -.Ljp7F021588: -/* 0560F8 7F021588 8FA50104 */ lw $a1, 0x104($sp) -/* 0560FC 7F02158C 0FC1C437 */ jal modelTickAnimQuarterSpeed -/* 056100 7F021590 00003025 */ move $a2, $zero -.Ljp7F021594: -/* 056104 7F021594 10000032 */ b .Ljp7F021660 -/* 056108 7F021598 82030007 */ lb $v1, 7($s0) -/* 05610C 7F02159C 24010001 */ li $at, 1 -.Ljp7F0215A0: -/* 056110 7F0215A0 1461001C */ bne $v1, $at, .Ljp7F021614 -/* 056114 7F0215A4 30484000 */ andi $t0, $v0, 0x4000 -/* 056118 7F0215A8 0FC1B57F */ jal getinstsize -/* 05611C 7F0215AC 8FA40110 */ lw $a0, 0x110($sp) -/* 056120 7F0215B0 8FA40158 */ lw $a0, 0x158($sp) -/* 056124 7F0215B4 44060000 */ mfc1 $a2, $f0 -/* 056128 7F0215B8 24070001 */ li $a3, 1 -/* 05612C 7F0215BC 0FC1549A */ jal sub_GAME_7F054D6C -/* 056130 7F0215C0 24850008 */ addiu $a1, $a0, 8 -/* 056134 7F0215C4 14400005 */ bnez $v0, .Ljp7F0215DC -/* 056138 7F0215C8 AFA2010C */ sw $v0, 0x10c($sp) -/* 05613C 7F0215CC 8E0D0014 */ lw $t5, 0x14($s0) -/* 056140 7F0215D0 8FB90110 */ lw $t9, 0x110($sp) -/* 056144 7F0215D4 31AC0001 */ andi $t4, $t5, 1 -/* 056148 7F0215D8 11800005 */ beqz $t4, .Ljp7F0215F0 -.Ljp7F0215DC: -/* 05614C 7F0215DC 02002025 */ move $a0, $s0 -/* 056150 7F0215E0 0FC08436 */ jal chrPositionRelated7F020E40 -/* 056154 7F0215E4 8FA50104 */ lw $a1, 0x104($sp) -/* 056158 7F0215E8 10000008 */ b .Ljp7F02160C -/* 05615C 7F0215EC 00000000 */ nop -.Ljp7F0215F0: -/* 056160 7F0215F0 8F380054 */ lw $t8, 0x54($t9) -/* 056164 7F0215F4 03202025 */ move $a0, $t9 -/* 056168 7F0215F8 8FA50104 */ lw $a1, 0x104($sp) -/* 05616C 7F0215FC 13000003 */ beqz $t8, .Ljp7F02160C -/* 056170 7F021600 00000000 */ nop -/* 056174 7F021604 0FC1C437 */ jal modelTickAnimQuarterSpeed -/* 056178 7F021608 00003025 */ move $a2, $zero -.Ljp7F02160C: -/* 05617C 7F02160C 10000014 */ b .Ljp7F021660 -/* 056180 7F021610 82030007 */ lb $v1, 7($s0) -.Ljp7F021614: -/* 056184 7F021614 11000007 */ beqz $t0, .Ljp7F021634 -/* 056188 7F021618 02002025 */ move $a0, $s0 -/* 05618C 7F02161C 8FA40110 */ lw $a0, 0x110($sp) -/* 056190 7F021620 8FA50104 */ lw $a1, 0x104($sp) -/* 056194 7F021624 0FC1C437 */ jal modelTickAnimQuarterSpeed -/* 056198 7F021628 00003025 */ move $a2, $zero -/* 05619C 7F02162C 10000003 */ b .Ljp7F02163C -/* 0561A0 7F021630 00000000 */ nop -.Ljp7F021634: -/* 0561A4 7F021634 0FC08436 */ jal chrPositionRelated7F020E40 -/* 0561A8 7F021638 8FA50104 */ lw $a1, 0x104($sp) -.Ljp7F02163C: -/* 0561AC 7F02163C 0FC1B57F */ jal getinstsize -/* 0561B0 7F021640 8FA40110 */ lw $a0, 0x110($sp) -/* 0561B4 7F021644 8FA40158 */ lw $a0, 0x158($sp) -/* 0561B8 7F021648 44060000 */ mfc1 $a2, $f0 -/* 0561BC 7F02164C 24070001 */ li $a3, 1 -/* 0561C0 7F021650 0FC1549A */ jal sub_GAME_7F054D6C -/* 0561C4 7F021654 24850008 */ addiu $a1, $a0, 8 -/* 0561C8 7F021658 AFA2010C */ sw $v0, 0x10c($sp) -/* 0561CC 7F02165C 82030007 */ lb $v1, 7($s0) -.Ljp7F021660: -/* 0561D0 7F021660 24010001 */ li $at, 1 -/* 0561D4 7F021664 14610009 */ bne $v1, $at, .Ljp7F02168C -/* 0561D8 7F021668 8FAE0110 */ lw $t6, 0x110($sp) -/* 0561DC 7F02166C 8DC90054 */ lw $t1, 0x54($t6) -/* 0561E0 7F021670 8FAA0158 */ lw $t2, 0x158($sp) -/* 0561E4 7F021674 55200006 */ bnezl $t1, .Ljp7F021690 -/* 0561E8 7F021678 960D0012 */ lhu $t5, 0x12($s0) -/* 0561EC 7F02167C 914B0000 */ lbu $t3, ($t2) -/* 0561F0 7F021680 24010006 */ li $at, 6 -/* 0561F4 7F021684 15610004 */ bne $t3, $at, .Ljp7F021698 -/* 0561F8 7F021688 00000000 */ nop -.Ljp7F02168C: -/* 0561FC 7F02168C 960D0012 */ lhu $t5, 0x12($s0) -.Ljp7F021690: -/* 056200 7F021690 35AC0200 */ ori $t4, $t5, 0x200 -/* 056204 7F021694 A60C0012 */ sh $t4, 0x12($s0) -.Ljp7F021698: -/* 056208 7F021698 0FC081E8 */ jal chrUpdateAimProperties -/* 05620C 7F02169C 02002025 */ move $a0, $s0 -/* 056210 7F0216A0 8E040020 */ lw $a0, 0x20($s0) -/* 056214 7F0216A4 50800005 */ beql $a0, $zero, .Ljp7F0216BC -/* 056218 7F0216A8 8FB8010C */ lw $t8, 0x10c($sp) -/* 05621C 7F0216AC 0FC1AE0E */ jal sub_GAME_7F06B248 -/* 056220 7F0216B0 00000000 */ nop -/* 056224 7F0216B4 AE000020 */ sw $zero, 0x20($s0) -/* 056228 7F0216B8 8FB8010C */ lw $t8, 0x10c($sp) -.Ljp7F0216BC: -/* 05622C 7F0216BC 261900F8 */ addiu $t9, $s0, 0xf8 -/* 056230 7F0216C0 53000196 */ beql $t8, $zero, .Ljp7F021D1C -/* 056234 7F0216C4 8E020160 */ lw $v0, 0x160($s0) -/* 056238 7F0216C8 0FC246CA */ jal get_debug_chrnum_flag -/* 05623C 7F0216CC AFB9002C */ sw $t9, 0x2c($sp) -/* 056240 7F0216D0 8FA20158 */ lw $v0, 0x158($sp) -/* 056244 7F0216D4 2404000C */ li $a0, 12 -/* 056248 7F0216D8 90480001 */ lbu $t0, 1($v0) -/* 05624C 7F0216DC 350F0002 */ ori $t7, $t0, 2 -/* 056250 7F0216E0 A04F0001 */ sb $t7, 1($v0) -/* 056254 7F0216E4 8E0E0014 */ lw $t6, 0x14($s0) -/* 056258 7F0216E8 35C90008 */ ori $t1, $t6, 8 -/* 05625C 7F0216EC 0FC24CCF */ jal cheatIsActive -/* 056260 7F0216F0 AE090014 */ sw $t1, 0x14($s0) -/* 056264 7F0216F4 10400018 */ beqz $v0, .Ljp7F021758 -/* 056268 7F0216F8 00000000 */ nop -/* 05626C 7F0216FC 8204000F */ lb $a0, 0xf($s0) -/* 056270 7F021700 0FC0827B */ jal not_in_us_7F0209EC -/* 056274 7F021704 82050006 */ lb $a1, 6($s0) -/* 056278 7F021708 10400013 */ beqz $v0, .Ljp7F021758 -/* 05627C 7F02170C 3C013EA0 */ li $at, 0x3EA00000 # 0.312500 -/* 056280 7F021710 44816000 */ mtc1 $at, $f12 -/* 056284 7F021714 0FC1B27F */ jal modelSetDistanceScale -/* 056288 7F021718 00000000 */ nop -/* 05628C 7F02171C 8E020014 */ lw $v0, 0x14($s0) -/* 056290 7F021720 3C01EFFF */ lui $at, (0xEFFFFFFF >> 16) # lui $at, 0xefff -/* 056294 7F021724 3421FFFF */ ori $at, (0xEFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 056298 7F021728 000250C0 */ sll $t2, $v0, 3 -/* 05629C 7F02172C 0541000A */ bgez $t2, .Ljp7F021758 -/* 0562A0 7F021730 00415824 */ and $t3, $v0, $at -/* 0562A4 7F021734 8E04001C */ lw $a0, 0x1c($s0) -/* 0562A8 7F021738 AE0B0014 */ sw $t3, 0x14($s0) -/* 0562AC 7F02173C 3C018005 */ lui $at, %hi(D_jp80051D88) # $at, 0x8005 -/* 0562B0 7F021740 C4281D88 */ lwc1 $f8, %lo(D_jp80051D88)($at) -/* 0562B4 7F021744 C4860014 */ lwc1 $f6, 0x14($a0) -/* 0562B8 7F021748 46083283 */ div.s $f10, $f6, $f8 -/* 0562BC 7F02174C 44055000 */ mfc1 $a1, $f10 -/* 0562C0 7F021750 0FC1B51A */ jal modelSetScale -/* 0562C4 7F021754 00000000 */ nop -.Ljp7F021758: -/* 0562C8 7F021758 3C0D7F02 */ lui $t5, %hi(sub_GAME_7F02083C) # $t5, 0x7f02 -/* 0562CC 7F02175C 25AD0AAC */ addiu $t5, %lo(sub_GAME_7F02083C) # addiu $t5, $t5, 0xaac -/* 0562D0 7F021760 3C018003 */ lui $at, %hi(D_80036090) # $at, 0x8003 -/* 0562D4 7F021764 AC2D60D0 */ sw $t5, %lo(D_80036090)($at) -/* 0562D8 7F021768 3C018007 */ lui $at, %hi(dword_CODE_bss_80069B60) # $at, 0x8007 -/* 0562DC 7F02176C 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 0562E0 7F021770 AC309BA0 */ sw $s0, %lo(dword_CODE_bss_80069B60)($at) -/* 0562E4 7F021774 8FAC0110 */ lw $t4, 0x110($sp) -/* 0562E8 7F021778 AFA20118 */ sw $v0, 0x118($sp) -/* 0562EC 7F02177C 8D980008 */ lw $t8, 8($t4) -/* 0562F0 7F021780 8704000E */ lh $a0, 0xe($t8) -/* 0562F4 7F021784 0004C980 */ sll $t9, $a0, 6 -/* 0562F8 7F021788 0FC2F8B1 */ jal dynAllocate -/* 0562FC 7F02178C 03202025 */ move $a0, $t9 -/* 056300 7F021790 3C058007 */ lui $a1, %hi(dword_CODE_bss_80069B60) # $a1, 0x8007 -/* 056304 7F021794 24A59BA0 */ addiu $a1, %lo(dword_CODE_bss_80069B60) # addiu $a1, $a1, -0x6460 -/* 056308 7F021798 8CA30000 */ lw $v1, ($a1) -/* 05630C 7F02179C AFA20128 */ sw $v0, 0x128($sp) -/* 056310 7F0217A0 80640011 */ lb $a0, 0x11($v1) -/* 056314 7F0217A4 0480000B */ bltz $a0, .Ljp7F0217D4 -/* 056318 7F0217A8 3C088005 */ lui $t0, %hi(g_ClockTimer) # $t0, 0x8005 -/* 05631C 7F0217AC 8D0883A4 */ lw $t0, %lo(g_ClockTimer)($t0) -/* 056320 7F0217B0 2409FFFF */ li $t1, -1 -/* 056324 7F0217B4 00887821 */ addu $t7, $a0, $t0 -/* 056328 7F0217B8 A06F0011 */ sb $t7, 0x11($v1) -/* 05632C 7F0217BC 8CA30000 */ lw $v1, ($a1) -/* 056330 7F0217C0 806E0011 */ lb $t6, 0x11($v1) -/* 056334 7F0217C4 29C1001E */ slti $at, $t6, 0x1e -/* 056338 7F0217C8 54200003 */ bnezl $at, .Ljp7F0217D8 -/* 05633C 7F0217CC 27A40118 */ addiu $a0, $sp, 0x118 -/* 056340 7F0217D0 A0690011 */ sb $t1, 0x11($v1) -.Ljp7F0217D4: -/* 056344 7F0217D4 27A40118 */ addiu $a0, $sp, 0x118 -.Ljp7F0217D8: -/* 056348 7F0217D8 0FC1BE3A */ jal subcalcmatrices -/* 05634C 7F0217DC 8FA50110 */ lw $a1, 0x110($sp) -/* 056350 7F0217E0 3C018003 */ lui $at, %hi(D_80036090) # $at, 0x8003 -/* 056354 7F0217E4 AC2060D0 */ sw $zero, %lo(D_80036090)($at) -/* 056358 7F0217E8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 05635C 7F0217EC 44816000 */ mtc1 $at, $f12 -/* 056360 7F0217F0 0FC1B27F */ jal modelSetDistanceScale -/* 056364 7F0217F4 00000000 */ nop -/* 056368 7F0217F8 260400F4 */ addiu $a0, $s0, 0xf4 -/* 05636C 7F0217FC 0FC10184 */ jal update_color_shading -/* 056370 7F021800 8FA5002C */ lw $a1, 0x2c($sp) -/* 056374 7F021804 0FC1B356 */ jal sub_GAME_7F06C768 -/* 056378 7F021808 8FA40110 */ lw $a0, 0x110($sp) -/* 05637C 7F02180C 8FAA0158 */ lw $t2, 0x158($sp) -/* 056380 7F021810 00002025 */ move $a0, $zero -/* 056384 7F021814 E5400018 */ swc1 $f0, 0x18($t2) -/* 056388 7F021818 0FC1ADC4 */ jal sub_GAME_7F06B120 -/* 05638C 7F02181C 8FA50110 */ lw $a1, 0x110($sp) -/* 056390 7F021820 AE020020 */ sw $v0, 0x20($s0) -/* 056394 7F021824 26060020 */ addiu $a2, $s0, 0x20 -/* 056398 7F021828 AFA60030 */ sw $a2, 0x30($sp) -/* 05639C 7F02182C 8FA40158 */ lw $a0, 0x158($sp) -/* 0563A0 7F021830 0FC14A3D */ jal sub_GAME_7F0523F8 -/* 0563A4 7F021834 00002825 */ move $a1, $zero -/* 0563A8 7F021838 8FA60030 */ lw $a2, 0x30($sp) -/* 0563AC 7F02183C 8FA40158 */ lw $a0, 0x158($sp) -/* 0563B0 7F021840 0FC14A3D */ jal sub_GAME_7F0523F8 -/* 0563B4 7F021844 24050001 */ li $a1, 1 -/* 0563B8 7F021848 8E0201D8 */ lw $v0, 0x1d8($s0) -/* 0563BC 7F02184C 5040011A */ beql $v0, $zero, .Ljp7F021CB8 -/* 0563C0 7F021850 8FB80110 */ lw $t8, 0x110($sp) -/* 0563C4 7F021854 8C470004 */ lw $a3, 4($v0) -/* 0563C8 7F021858 904B0001 */ lbu $t3, 1($v0) -/* 0563CC 7F02185C 00003025 */ move $a2, $zero -/* 0563D0 7F021860 8CE30014 */ lw $v1, 0x14($a3) -/* 0563D4 7F021864 356D0002 */ ori $t5, $t3, 2 -/* 0563D8 7F021868 A04D0001 */ sb $t5, 1($v0) -/* 0563DC 7F02186C 8C65001C */ lw $a1, 0x1c($v1) -/* 0563E0 7F021870 8FA40110 */ lw $a0, 0x110($sp) -/* 0563E4 7F021874 AFA70100 */ sw $a3, 0x100($sp) -/* 0563E8 7F021878 0FC1B314 */ jal modelFindNodeMtx -/* 0563EC 7F02187C AFA300FC */ sw $v1, 0xfc($sp) -/* 0563F0 7F021880 8FAC00FC */ lw $t4, 0xfc($sp) -/* 0563F4 7F021884 AFA20118 */ sw $v0, 0x118($sp) -/* 0563F8 7F021888 8D980008 */ lw $t8, 8($t4) -/* 0563FC 7F02188C 8704000E */ lh $a0, 0xe($t8) -/* 056400 7F021890 0004C980 */ sll $t9, $a0, 6 -/* 056404 7F021894 0FC2F8B1 */ jal dynAllocate -/* 056408 7F021898 03202025 */ move $a0, $t9 -/* 05640C 7F02189C AFA20128 */ sw $v0, 0x128($sp) -/* 056410 7F0218A0 27A40118 */ addiu $a0, $sp, 0x118 -/* 056414 7F0218A4 0FC1BE0E */ jal instcalcmatrices -/* 056418 7F0218A8 8FA500FC */ lw $a1, 0xfc($sp) -/* 05641C 7F0218AC 82020006 */ lb $v0, 6($s0) -/* 056420 7F0218B0 2841002A */ slti $at, $v0, 0x2a -/* 056424 7F0218B4 142000F2 */ bnez $at, .Ljp7F021C80 -/* 056428 7F0218B8 28410046 */ slti $at, $v0, 0x46 -/* 05642C 7F0218BC 102000F0 */ beqz $at, .Ljp7F021C80 -/* 056430 7F0218C0 3C0F8003 */ lui $t7, %hi(D_8002CCAC) # $t7, 0x8003 -/* 056434 7F0218C4 25EFCCEC */ addiu $t7, %lo(D_8002CCAC) # addiu $t7, $t7, -0x3314 -/* 056438 7F0218C8 8DE10000 */ lw $at, ($t7) -/* 05643C 7F0218CC 27A800F0 */ addiu $t0, $sp, 0xf0 -/* 056440 7F0218D0 8DE90004 */ lw $t1, 4($t7) -/* 056444 7F0218D4 AD010000 */ sw $at, ($t0) -/* 056448 7F0218D8 8DE10008 */ lw $at, 8($t7) -/* 05644C 7F0218DC AD090004 */ sw $t1, 4($t0) -/* 056450 7F0218E0 AD010008 */ sw $at, 8($t0) -/* 056454 7F0218E4 0FC14AE0 */ jal get_hat_model -/* 056458 7F0218E8 8E0401D8 */ lw $a0, 0x1d8($s0) -/* 05645C 7F0218EC AFA20060 */ sw $v0, 0x60($sp) -/* 056460 7F0218F0 82040006 */ lb $a0, 6($s0) -/* 056464 7F0218F4 00025880 */ sll $t3, $v0, 2 -/* 056468 7F0218F8 01625823 */ subu $t3, $t3, $v0 -/* 05646C 7F0218FC 2484FFD6 */ addiu $a0, $a0, -0x2a -/* 056470 7F021900 000450C0 */ sll $t2, $a0, 3 -/* 056474 7F021904 01445021 */ addu $t2, $t2, $a0 -/* 056478 7F021908 000A5100 */ sll $t2, $t2, 4 -/* 05647C 7F02190C 000B58C0 */ sll $t3, $t3, 3 -/* 056480 7F021910 3C0C8004 */ lui $t4, %hi(headHat_array_8003E464) # $t4, 0x8004 -/* 056484 7F021914 258CE494 */ addiu $t4, %lo(headHat_array_8003E464) # addiu $t4, $t4, -0x1b6c -/* 056488 7F021918 014B6821 */ addu $t5, $t2, $t3 -/* 05648C 7F02191C 01AC1821 */ addu $v1, $t5, $t4 -/* 056490 7F021920 0FC24677 */ jal get_debug_render_raster -/* 056494 7F021924 AFA30058 */ sw $v1, 0x58($sp) -/* 056498 7F021928 144000AA */ bnez $v0, .Ljp7F021BD4 -/* 05649C 7F02192C 8FA30058 */ lw $v1, 0x58($sp) -/* 0564A0 7F021930 AFA00054 */ sw $zero, 0x54($sp) -/* 0564A4 7F021934 00002025 */ move $a0, $zero -/* 0564A8 7F021938 24050020 */ li $a1, 32 -/* 0564AC 7F02193C 0C0030DC */ jal joyGetButtons -/* 0564B0 7F021940 AFA30058 */ sw $v1, 0x58($sp) -/* 0564B4 7F021944 1040004F */ beqz $v0, .Ljp7F021A84 -/* 0564B8 7F021948 8FA30058 */ lw $v1, 0x58($sp) -/* 0564BC 7F02194C 00002025 */ move $a0, $zero -/* 0564C0 7F021950 34058000 */ li $a1, 32768 -/* 0564C4 7F021954 0C0030DC */ jal joyGetButtons -/* 0564C8 7F021958 AFA30058 */ sw $v1, 0x58($sp) -/* 0564CC 7F02195C 10400008 */ beqz $v0, .Ljp7F021980 -/* 0564D0 7F021960 8FA30058 */ lw $v1, 0x58($sp) -/* 0564D4 7F021964 3C018005 */ lui $at, %hi(D_80051D58) # $at, 0x8005 -/* 0564D8 7F021968 C4321D8C */ lwc1 $f18, %lo(D_80051D58)($at) -/* 0564DC 7F02196C C4700008 */ lwc1 $f16, 8($v1) -/* 0564E0 7F021970 24180001 */ li $t8, 1 -/* 0564E4 7F021974 46128101 */ sub.s $f4, $f16, $f18 -/* 0564E8 7F021978 E4640008 */ swc1 $f4, 8($v1) -/* 0564EC 7F02197C AFB80054 */ sw $t8, 0x54($sp) -.Ljp7F021980: -/* 0564F0 7F021980 00002025 */ move $a0, $zero -/* 0564F4 7F021984 24054000 */ li $a1, 16384 -/* 0564F8 7F021988 0C0030DC */ jal joyGetButtons -/* 0564FC 7F02198C AFA30058 */ sw $v1, 0x58($sp) -/* 056500 7F021990 10400008 */ beqz $v0, .Ljp7F0219B4 -/* 056504 7F021994 8FA30058 */ lw $v1, 0x58($sp) -/* 056508 7F021998 3C018005 */ lui $at, %hi(D_80051D5C) # $at, 0x8005 -/* 05650C 7F02199C C4281D90 */ lwc1 $f8, %lo(D_80051D5C)($at) -/* 056510 7F0219A0 C4660008 */ lwc1 $f6, 8($v1) -/* 056514 7F0219A4 24190001 */ li $t9, 1 -/* 056518 7F0219A8 46083280 */ add.s $f10, $f6, $f8 -/* 05651C 7F0219AC E46A0008 */ swc1 $f10, 8($v1) -/* 056520 7F0219B0 AFB90054 */ sw $t9, 0x54($sp) -.Ljp7F0219B4: -/* 056524 7F0219B4 00002025 */ move $a0, $zero -/* 056528 7F0219B8 24050004 */ li $a1, 4 -/* 05652C 7F0219BC 0C0030DC */ jal joyGetButtons -/* 056530 7F0219C0 AFA30058 */ sw $v1, 0x58($sp) -/* 056534 7F0219C4 10400008 */ beqz $v0, .Ljp7F0219E8 -/* 056538 7F0219C8 8FA30058 */ lw $v1, 0x58($sp) -/* 05653C 7F0219CC 3C018005 */ lui $at, %hi(D_80051D60) # $at, 0x8005 -/* 056540 7F0219D0 C4321D94 */ lwc1 $f18, %lo(D_80051D60)($at) -/* 056544 7F0219D4 C4700004 */ lwc1 $f16, 4($v1) -/* 056548 7F0219D8 240E0001 */ li $t6, 1 -/* 05654C 7F0219DC 46128101 */ sub.s $f4, $f16, $f18 -/* 056550 7F0219E0 E4640004 */ swc1 $f4, 4($v1) -/* 056554 7F0219E4 AFAE0054 */ sw $t6, 0x54($sp) -.Ljp7F0219E8: -/* 056558 7F0219E8 00002025 */ move $a0, $zero -/* 05655C 7F0219EC 24050008 */ li $a1, 8 -/* 056560 7F0219F0 0C0030DC */ jal joyGetButtons -/* 056564 7F0219F4 AFA30058 */ sw $v1, 0x58($sp) -/* 056568 7F0219F8 10400008 */ beqz $v0, .Ljp7F021A1C -/* 05656C 7F0219FC 8FA30058 */ lw $v1, 0x58($sp) -/* 056570 7F021A00 3C018005 */ lui $at, %hi(D_80051D64) # $at, 0x8005 -/* 056574 7F021A04 C4281D98 */ lwc1 $f8, %lo(D_80051D64)($at) -/* 056578 7F021A08 C4660004 */ lwc1 $f6, 4($v1) -/* 05657C 7F021A0C 24080001 */ li $t0, 1 -/* 056580 7F021A10 46083280 */ add.s $f10, $f6, $f8 -/* 056584 7F021A14 E46A0004 */ swc1 $f10, 4($v1) -/* 056588 7F021A18 AFA80054 */ sw $t0, 0x54($sp) -.Ljp7F021A1C: -/* 05658C 7F021A1C 00002025 */ move $a0, $zero -/* 056590 7F021A20 24050002 */ li $a1, 2 -/* 056594 7F021A24 0C0030DC */ jal joyGetButtons -/* 056598 7F021A28 AFA30058 */ sw $v1, 0x58($sp) -/* 05659C 7F021A2C 10400008 */ beqz $v0, .Ljp7F021A50 -/* 0565A0 7F021A30 8FA30058 */ lw $v1, 0x58($sp) -/* 0565A4 7F021A34 3C018005 */ lui $at, %hi(D_80051D68) # $at, 0x8005 -/* 0565A8 7F021A38 C4321D9C */ lwc1 $f18, %lo(D_80051D68)($at) -/* 0565AC 7F021A3C C4700000 */ lwc1 $f16, ($v1) -/* 0565B0 7F021A40 240F0001 */ li $t7, 1 -/* 0565B4 7F021A44 46128101 */ sub.s $f4, $f16, $f18 -/* 0565B8 7F021A48 E4640000 */ swc1 $f4, ($v1) -/* 0565BC 7F021A4C AFAF0054 */ sw $t7, 0x54($sp) -.Ljp7F021A50: -/* 0565C0 7F021A50 00002025 */ move $a0, $zero -/* 0565C4 7F021A54 24050001 */ li $a1, 1 -/* 0565C8 7F021A58 0C0030DC */ jal joyGetButtons -/* 0565CC 7F021A5C AFA30058 */ sw $v1, 0x58($sp) -/* 0565D0 7F021A60 10400008 */ beqz $v0, .Ljp7F021A84 -/* 0565D4 7F021A64 8FA30058 */ lw $v1, 0x58($sp) -/* 0565D8 7F021A68 3C018005 */ lui $at, %hi(D_80051D6C) # $at, 0x8005 -/* 0565DC 7F021A6C C4281DA0 */ lwc1 $f8, %lo(D_80051D6C)($at) -/* 0565E0 7F021A70 C4660000 */ lwc1 $f6, ($v1) -/* 0565E4 7F021A74 24090001 */ li $t1, 1 -/* 0565E8 7F021A78 46083280 */ add.s $f10, $f6, $f8 -/* 0565EC 7F021A7C E46A0000 */ swc1 $f10, ($v1) -/* 0565F0 7F021A80 AFA90054 */ sw $t1, 0x54($sp) -.Ljp7F021A84: -/* 0565F4 7F021A84 00002025 */ move $a0, $zero -/* 0565F8 7F021A88 24050010 */ li $a1, 16 -/* 0565FC 7F021A8C 0C0030DC */ jal joyGetButtons -/* 056600 7F021A90 AFA30058 */ sw $v1, 0x58($sp) -/* 056604 7F021A94 1040004F */ beqz $v0, .Ljp7F021BD4 -/* 056608 7F021A98 8FA30058 */ lw $v1, 0x58($sp) -/* 05660C 7F021A9C 00002025 */ move $a0, $zero -/* 056610 7F021AA0 34058000 */ li $a1, 32768 -/* 056614 7F021AA4 0C0030DC */ jal joyGetButtons -/* 056618 7F021AA8 AFA30058 */ sw $v1, 0x58($sp) -/* 05661C 7F021AAC 10400008 */ beqz $v0, .Ljp7F021AD0 -/* 056620 7F021AB0 8FA30058 */ lw $v1, 0x58($sp) -/* 056624 7F021AB4 3C018005 */ lui $at, %hi(D_80051D70) # $at, 0x8005 -/* 056628 7F021AB8 C4321DA4 */ lwc1 $f18, %lo(D_80051D70)($at) -/* 05662C 7F021ABC C4700014 */ lwc1 $f16, 0x14($v1) -/* 056630 7F021AC0 240A0001 */ li $t2, 1 -/* 056634 7F021AC4 46128102 */ mul.s $f4, $f16, $f18 -/* 056638 7F021AC8 E4640014 */ swc1 $f4, 0x14($v1) -/* 05663C 7F021ACC AFAA0054 */ sw $t2, 0x54($sp) -.Ljp7F021AD0: -/* 056640 7F021AD0 00002025 */ move $a0, $zero -/* 056644 7F021AD4 24054000 */ li $a1, 16384 -/* 056648 7F021AD8 0C0030DC */ jal joyGetButtons -/* 05664C 7F021ADC AFA30058 */ sw $v1, 0x58($sp) -/* 056650 7F021AE0 10400008 */ beqz $v0, .Ljp7F021B04 -/* 056654 7F021AE4 8FA30058 */ lw $v1, 0x58($sp) -/* 056658 7F021AE8 3C018005 */ lui $at, %hi(D_80051D74) # $at, 0x8005 -/* 05665C 7F021AEC C4281DA8 */ lwc1 $f8, %lo(D_80051D74)($at) -/* 056660 7F021AF0 C4660014 */ lwc1 $f6, 0x14($v1) -/* 056664 7F021AF4 240B0001 */ li $t3, 1 -/* 056668 7F021AF8 46083282 */ mul.s $f10, $f6, $f8 -/* 05666C 7F021AFC E46A0014 */ swc1 $f10, 0x14($v1) -/* 056670 7F021B00 AFAB0054 */ sw $t3, 0x54($sp) -.Ljp7F021B04: -/* 056674 7F021B04 00002025 */ move $a0, $zero -/* 056678 7F021B08 24050004 */ li $a1, 4 -/* 05667C 7F021B0C 0C0030DC */ jal joyGetButtons -/* 056680 7F021B10 AFA30058 */ sw $v1, 0x58($sp) -/* 056684 7F021B14 10400008 */ beqz $v0, .Ljp7F021B38 -/* 056688 7F021B18 8FA30058 */ lw $v1, 0x58($sp) -/* 05668C 7F021B1C 3C018005 */ lui $at, %hi(D_80051D78) # $at, 0x8005 -/* 056690 7F021B20 C4321DAC */ lwc1 $f18, %lo(D_80051D78)($at) -/* 056694 7F021B24 C4700010 */ lwc1 $f16, 0x10($v1) -/* 056698 7F021B28 240D0001 */ li $t5, 1 -/* 05669C 7F021B2C 46128102 */ mul.s $f4, $f16, $f18 -/* 0566A0 7F021B30 E4640010 */ swc1 $f4, 0x10($v1) -/* 0566A4 7F021B34 AFAD0054 */ sw $t5, 0x54($sp) -.Ljp7F021B38: -/* 0566A8 7F021B38 00002025 */ move $a0, $zero -/* 0566AC 7F021B3C 24050008 */ li $a1, 8 -/* 0566B0 7F021B40 0C0030DC */ jal joyGetButtons -/* 0566B4 7F021B44 AFA30058 */ sw $v1, 0x58($sp) -/* 0566B8 7F021B48 10400008 */ beqz $v0, .Ljp7F021B6C -/* 0566BC 7F021B4C 8FA30058 */ lw $v1, 0x58($sp) -/* 0566C0 7F021B50 3C018005 */ lui $at, %hi(D_80051D7C) # $at, 0x8005 -/* 0566C4 7F021B54 C4281DB0 */ lwc1 $f8, %lo(D_80051D7C)($at) -/* 0566C8 7F021B58 C4660010 */ lwc1 $f6, 0x10($v1) -/* 0566CC 7F021B5C 240C0001 */ li $t4, 1 -/* 0566D0 7F021B60 46083282 */ mul.s $f10, $f6, $f8 -/* 0566D4 7F021B64 E46A0010 */ swc1 $f10, 0x10($v1) -/* 0566D8 7F021B68 AFAC0054 */ sw $t4, 0x54($sp) -.Ljp7F021B6C: -/* 0566DC 7F021B6C 00002025 */ move $a0, $zero -/* 0566E0 7F021B70 24050002 */ li $a1, 2 -/* 0566E4 7F021B74 0C0030DC */ jal joyGetButtons -/* 0566E8 7F021B78 AFA30058 */ sw $v1, 0x58($sp) -/* 0566EC 7F021B7C 10400008 */ beqz $v0, .Ljp7F021BA0 -/* 0566F0 7F021B80 8FA30058 */ lw $v1, 0x58($sp) -/* 0566F4 7F021B84 3C018005 */ lui $at, %hi(D_80051D80) # $at, 0x8005 -/* 0566F8 7F021B88 C4321DB4 */ lwc1 $f18, %lo(D_80051D80)($at) -/* 0566FC 7F021B8C C470000C */ lwc1 $f16, 0xc($v1) -/* 056700 7F021B90 24180001 */ li $t8, 1 -/* 056704 7F021B94 46128102 */ mul.s $f4, $f16, $f18 -/* 056708 7F021B98 E464000C */ swc1 $f4, 0xc($v1) -/* 05670C 7F021B9C AFB80054 */ sw $t8, 0x54($sp) -.Ljp7F021BA0: -/* 056710 7F021BA0 00002025 */ move $a0, $zero -/* 056714 7F021BA4 24050001 */ li $a1, 1 -/* 056718 7F021BA8 0C0030DC */ jal joyGetButtons -/* 05671C 7F021BAC AFA30058 */ sw $v1, 0x58($sp) -/* 056720 7F021BB0 10400008 */ beqz $v0, .Ljp7F021BD4 -/* 056724 7F021BB4 8FA30058 */ lw $v1, 0x58($sp) -/* 056728 7F021BB8 3C018005 */ lui $at, %hi(D_80051D84) # $at, 0x8005 -/* 05672C 7F021BBC C4281DB8 */ lwc1 $f8, %lo(D_80051D84)($at) -/* 056730 7F021BC0 C466000C */ lwc1 $f6, 0xc($v1) -/* 056734 7F021BC4 24190001 */ li $t9, 1 -/* 056738 7F021BC8 46083282 */ mul.s $f10, $f6, $f8 -/* 05673C 7F021BCC E46A000C */ swc1 $f10, 0xc($v1) -/* 056740 7F021BD0 AFB90054 */ sw $t9, 0x54($sp) -.Ljp7F021BD4: -/* 056744 7F021BD4 3C018005 */ lui $at, %hi(D_80051D88) # $at, 0x8005 -/* 056748 7F021BD8 C4201DBC */ lwc1 $f0, %lo(D_80051D88)($at) -/* 05674C 7F021BDC C4700000 */ lwc1 $f16, ($v1) -/* 056750 7F021BE0 27A400F0 */ addiu $a0, $sp, 0xf0 -/* 056754 7F021BE4 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 056758 7F021BE8 46008482 */ mul.s $f18, $f16, $f0 -/* 05675C 7F021BEC E7B200F0 */ swc1 $f18, 0xf0($sp) -/* 056760 7F021BF0 C4640004 */ lwc1 $f4, 4($v1) -/* 056764 7F021BF4 46002182 */ mul.s $f6, $f4, $f0 -/* 056768 7F021BF8 E7A600F4 */ swc1 $f6, 0xf4($sp) -/* 05676C 7F021BFC C4680008 */ lwc1 $f8, 8($v1) -/* 056770 7F021C00 46004282 */ mul.s $f10, $f8, $f0 -/* 056774 7F021C04 E7AA00F8 */ swc1 $f10, 0xf8($sp) -/* 056778 7F021C08 C470000C */ lwc1 $f16, 0xc($v1) -/* 05677C 7F021C0C E7B000EC */ swc1 $f16, 0xec($sp) -/* 056780 7F021C10 C4720010 */ lwc1 $f18, 0x10($v1) -/* 056784 7F021C14 E7B200E8 */ swc1 $f18, 0xe8($sp) -/* 056788 7F021C18 C4640014 */ lwc1 $f4, 0x14($v1) -/* 05678C 7F021C1C 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 056790 7F021C20 E7A400E4 */ swc1 $f4, 0xe4($sp) -/* 056794 7F021C24 C7AC00EC */ lwc1 $f12, 0xec($sp) -/* 056798 7F021C28 0FC163B5 */ jal matrix_column_1_scalar_multiply -/* 05679C 7F021C2C 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 0567A0 7F021C30 C7AC00E8 */ lwc1 $f12, 0xe8($sp) -/* 0567A4 7F021C34 0FC163C1 */ jal matrix_column_2_scalar_multiply -/* 0567A8 7F021C38 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 0567AC 7F021C3C C7AC00E4 */ lwc1 $f12, 0xe4($sp) -/* 0567B0 7F021C40 0FC163DB */ jal matrix_column_3_scalar_multiply_2 -/* 0567B4 7F021C44 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 0567B8 7F021C48 8FAE00FC */ lw $t6, 0xfc($sp) -/* 0567BC 7F021C4C 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 0567C0 7F021C50 27A60064 */ addiu $a2, $sp, 0x64 -/* 0567C4 7F021C54 0FC161AB */ jal matrix_4x4_multiply_homogeneous -/* 0567C8 7F021C58 8DC4000C */ lw $a0, 0xc($t6) -/* 0567CC 7F021C5C 8FA800FC */ lw $t0, 0xfc($sp) -/* 0567D0 7F021C60 27A40064 */ addiu $a0, $sp, 0x64 -/* 0567D4 7F021C64 0FC16150 */ jal matrix_4x4_copy -/* 0567D8 7F021C68 8D05000C */ lw $a1, 0xc($t0) -/* 0567DC 7F021C6C 8FAF0060 */ lw $t7, 0x60($sp) -/* 0567E0 7F021C70 24010002 */ li $at, 2 -/* 0567E4 7F021C74 55E10003 */ bnel $t7, $at, .Ljp7F021C84 -/* 0567E8 7F021C78 96090012 */ lhu $t1, 0x12($s0) -/* 0567EC 7F021C7C AFA00108 */ sw $zero, 0x108($sp) -.Ljp7F021C80: -/* 0567F0 7F021C80 96090012 */ lhu $t1, 0x12($s0) -.Ljp7F021C84: -/* 0567F4 7F021C84 8FAB0100 */ lw $t3, 0x100($sp) -/* 0567F8 7F021C88 8FA500FC */ lw $a1, 0xfc($sp) -/* 0567FC 7F021C8C 312A0001 */ andi $t2, $t1, 1 -/* 056800 7F021C90 11400005 */ beqz $t2, .Ljp7F021CA8 -/* 056804 7F021C94 00000000 */ nop -/* 056808 7F021C98 8D6D0064 */ lw $t5, 0x64($t3) -/* 05680C 7F021C9C 31AC0080 */ andi $t4, $t5, 0x80 -/* 056810 7F021CA0 55800005 */ bnezl $t4, .Ljp7F021CB8 -/* 056814 7F021CA4 8FB80110 */ lw $t8, 0x110($sp) -.Ljp7F021CA8: -/* 056818 7F021CA8 0FC1ADC4 */ jal sub_GAME_7F06B120 -/* 05681C 7F021CAC 8E040020 */ lw $a0, 0x20($s0) -/* 056820 7F021CB0 AE020020 */ sw $v0, 0x20($s0) -/* 056824 7F021CB4 8FB80110 */ lw $t8, 0x110($sp) -.Ljp7F021CB8: -/* 056828 7F021CB8 8F190008 */ lw $t9, 8($t8) -/* 05682C 7F021CBC 8F2E0008 */ lw $t6, 8($t9) -/* 056830 7F021CC0 8DC50010 */ lw $a1, 0x10($t6) -/* 056834 7F021CC4 10A0000E */ beqz $a1, .Ljp7F021D00 -/* 056838 7F021CC8 00000000 */ nop -/* 05683C 7F021CCC 0FC1B363 */ jal modelGetNodeRwData -/* 056840 7F021CD0 03002025 */ move $a0, $t8 -/* 056844 7F021CD4 8C430000 */ lw $v1, ($v0) -/* 056848 7F021CD8 10600009 */ beqz $v1, .Ljp7F021D00 -/* 05684C 7F021CDC 00000000 */ nop -/* 056850 7F021CE0 8C680008 */ lw $t0, 8($v1) -/* 056854 7F021CE4 8D050004 */ lw $a1, 4($t0) -/* 056858 7F021CE8 10A00005 */ beqz $a1, .Ljp7F021D00 -/* 05685C 7F021CEC 00000000 */ nop -/* 056860 7F021CF0 0FC1B363 */ jal modelGetNodeRwData -/* 056864 7F021CF4 8FA40110 */ lw $a0, 0x110($sp) -/* 056868 7F021CF8 8FAF0108 */ lw $t7, 0x108($sp) -/* 05686C 7F021CFC AC4F0000 */ sw $t7, ($v0) -.Ljp7F021D00: -/* 056870 7F021D00 0FC1AE23 */ jal sub_GAME_7F06B29C -/* 056874 7F021D04 8E040020 */ lw $a0, 0x20($s0) -/* 056878 7F021D08 0FC1B046 */ jal sub_GAME_7F06BB28 -/* 05687C 7F021D0C 8E040020 */ lw $a0, 0x20($s0) -/* 056880 7F021D10 10000020 */ b .Ljp7F021D94 -/* 056884 7F021D14 AE020020 */ sw $v0, 0x20($s0) -/* 056888 7F021D18 8E020160 */ lw $v0, 0x160($s0) -.Ljp7F021D1C: -/* 05688C 7F021D1C 50400005 */ beql $v0, $zero, .Ljp7F021D34 -/* 056890 7F021D20 8E020164 */ lw $v0, 0x164($s0) -/* 056894 7F021D24 90490001 */ lbu $t1, 1($v0) -/* 056898 7F021D28 312AFFFD */ andi $t2, $t1, 0xfffd -/* 05689C 7F021D2C A04A0001 */ sb $t2, 1($v0) -/* 0568A0 7F021D30 8E020164 */ lw $v0, 0x164($s0) -.Ljp7F021D34: -/* 0568A4 7F021D34 2403FFFD */ li $v1, -3 -/* 0568A8 7F021D38 50400005 */ beql $v0, $zero, .Ljp7F021D50 -/* 0568AC 7F021D3C 8E0201D8 */ lw $v0, 0x1d8($s0) -/* 0568B0 7F021D40 904B0001 */ lbu $t3, 1($v0) -/* 0568B4 7F021D44 01636824 */ and $t5, $t3, $v1 -/* 0568B8 7F021D48 A04D0001 */ sb $t5, 1($v0) -/* 0568BC 7F021D4C 8E0201D8 */ lw $v0, 0x1d8($s0) -.Ljp7F021D50: -/* 0568C0 7F021D50 50400005 */ beql $v0, $zero, .Ljp7F021D68 -/* 0568C4 7F021D54 8FAE0158 */ lw $t6, 0x158($sp) -/* 0568C8 7F021D58 904C0001 */ lbu $t4, 1($v0) -/* 0568CC 7F021D5C 0183C824 */ and $t9, $t4, $v1 -/* 0568D0 7F021D60 A0590001 */ sb $t9, 1($v0) -/* 0568D4 7F021D64 8FAE0158 */ lw $t6, 0x158($sp) -.Ljp7F021D68: -/* 0568D8 7F021D68 91D80001 */ lbu $t8, 1($t6) -/* 0568DC 7F021D6C 03034024 */ and $t0, $t8, $v1 -/* 0568E0 7F021D70 A1C80001 */ sb $t0, 1($t6) -/* 0568E4 7F021D74 920F00F8 */ lbu $t7, 0xf8($s0) -/* 0568E8 7F021D78 920900F9 */ lbu $t1, 0xf9($s0) -/* 0568EC 7F021D7C 920A00FA */ lbu $t2, 0xfa($s0) -/* 0568F0 7F021D80 920B00FB */ lbu $t3, 0xfb($s0) -/* 0568F4 7F021D84 A20F00F4 */ sb $t7, 0xf4($s0) -/* 0568F8 7F021D88 A20900F5 */ sb $t1, 0xf5($s0) -/* 0568FC 7F021D8C A20A00F6 */ sb $t2, 0xf6($s0) -/* 056900 7F021D90 A20B00F7 */ sb $t3, 0xf7($s0) -.Ljp7F021D94: -/* 056904 7F021D94 8E0D0014 */ lw $t5, 0x14($s0) -/* 056908 7F021D98 31AC0400 */ andi $t4, $t5, 0x400 -/* 05690C 7F021D9C 55800015 */ bnezl $t4, .Ljp7F021DF4 -/* 056910 7F021DA0 00001025 */ move $v0, $zero -/* 056914 7F021DA4 96020012 */ lhu $v0, 0x12($s0) -/* 056918 7F021DA8 8FB80158 */ lw $t8, 0x158($sp) -/* 05691C 7F021DAC 30590001 */ andi $t9, $v0, 1 -/* 056920 7F021DB0 1320000D */ beqz $t9, .Ljp7F021DE8 -/* 056924 7F021DB4 00000000 */ nop -/* 056928 7F021DB8 8F040020 */ lw $a0, 0x20($t8) -/* 05692C 7F021DBC 50800009 */ beql $a0, $zero, .Ljp7F021DE4 -/* 056930 7F021DC0 3048FFFE */ andi $t0, $v0, 0xfffe -/* 056934 7F021DC4 8C830024 */ lw $v1, 0x24($a0) -.Ljp7F021DC8: -/* 056938 7F021DC8 0FC1314D */ jal objDrop -/* 05693C 7F021DCC AFA3003C */ sw $v1, 0x3c($sp) -/* 056940 7F021DD0 8FA4003C */ lw $a0, 0x3c($sp) -/* 056944 7F021DD4 5480FFFC */ bnezl $a0, .Ljp7F021DC8 -/* 056948 7F021DD8 8C830024 */ lw $v1, 0x24($a0) -/* 05694C 7F021DDC 96020012 */ lhu $v0, 0x12($s0) -/* 056950 7F021DE0 3048FFFE */ andi $t0, $v0, 0xfffe -.Ljp7F021DE4: -/* 056954 7F021DE4 A6080012 */ sh $t0, 0x12($s0) -.Ljp7F021DE8: -/* 056958 7F021DE8 0FC0B95D */ jal chrlvTriggerFireWeapon -/* 05695C 7F021DEC 02002025 */ move $a0, $s0 -/* 056960 7F021DF0 00001025 */ move $v0, $zero -.Ljp7F021DF4: -/* 056964 7F021DF4 8FBF0024 */ lw $ra, 0x24($sp) -/* 056968 7F021DF8 8FB00020 */ lw $s0, 0x20($sp) -/* 05696C 7F021DFC 27BD0158 */ addiu $sp, $sp, 0x158 -/* 056970 7F021E00 03E00008 */ jr $ra -/* 056974 7F021E04 00000000 */ nop + g_ModelJointPositionedFunc = chrHandleJointPositioned; + g_CurModelChr = chr; -) -#endif + renderdata.basemtx = camGetWorldToScreenMtxf(); + renderdata.mtxlist = dynAllocate(model->obj->numMatrices * (sizeof(Mtxf))); + + if (g_CurModelChr->flinchcnt >= 0) + { + g_CurModelChr->flinchcnt += g_ClockTimer; #ifdef VERSION_EU -GLOBAL_ASM( -/* i belong to sub_GAME_7F02083C*/ -.late_rodata -glabel D_80051D30 -.word 0x3f860a92 /*1.0471976*/ -glabel D_80051D34 -.word 0xbf5f66f3 /*-0.87266463*/ -glabel D_80051D38 -.word 0x3f5f66f3 /*0.87266463*/ -glabel D_80051D3C -.word 0x3f860a92 /*1.0471976*/ -glabel D_80051D40 -.word 0xbf5f66f3 /*-0.87266463*/ -glabel D_80051D44 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D48 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D4C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D50 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80051D54 -.word 0x40c90fdb /*6.2831855*/ - -/* i belong to this function*/ -.late_rodata -glabel D_jp80051D88 -.word 0x3f4ccccd -glabel D_80051D58 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D5C -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D60 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D64 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D68 -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D6C -.word 0x3ca3d70a /*0.02*/ -glabel D_80051D70 -.word 0x3f7eb852 /*0.995*/ -glabel D_80051D74 -.word 0x3f80a3d7 /*1.005*/ -glabel D_80051D78 -.word 0x3f7eb852 /*0.995*/ -glabel D_80051D7C -.word 0x3f80a3d7 /*1.005*/ -glabel D_80051D80 -.word 0x3f7eb852 /*0.995*/ -glabel D_80051D84 -.word 0x3f80a3d7 /*1.005*/ -glabel D_80051D88 -.word 0x41aa6666 /*21.299999*/ -.text -glabel chrTickBeams -/* 053858 7F020E68 27BDFEA8 */ addiu $sp, $sp, -0x158 -/* 05385C 7F020E6C 3C0F8003 */ lui $t7, %hi(D_8002CC6C) # $t7, 0x8003 -/* 053860 7F020E70 25EF81BC */ addiu $t7, %lo(D_8002CC6C) # addiu $t7, $t7, -0x7e44 -/* 053864 7F020E74 AFBF0024 */ sw $ra, 0x24($sp) -/* 053868 7F020E78 AFB00020 */ sw $s0, 0x20($sp) -/* 05386C 7F020E7C AFA40158 */ sw $a0, 0x158($sp) -/* 053870 7F020E80 25E8003C */ addiu $t0, $t7, 0x3c -/* 053874 7F020E84 27AE0118 */ addiu $t6, $sp, 0x118 -.L7F020E88: -/* 053878 7F020E88 8DE10000 */ lw $at, ($t7) -/* 05387C 7F020E8C 25EF000C */ addiu $t7, $t7, 0xc -/* 053880 7F020E90 25CE000C */ addiu $t6, $t6, 0xc -/* 053884 7F020E94 ADC1FFF4 */ sw $at, -0xc($t6) -/* 053888 7F020E98 8DE1FFF8 */ lw $at, -8($t7) -/* 05388C 7F020E9C ADC1FFF8 */ sw $at, -8($t6) -/* 053890 7F020EA0 8DE1FFFC */ lw $at, -4($t7) -/* 053894 7F020EA4 15E8FFF8 */ bne $t7, $t0, .L7F020E88 -/* 053898 7F020EA8 ADC1FFFC */ sw $at, -4($t6) -/* 05389C 7F020EAC 8DE10000 */ lw $at, ($t7) -/* 0538A0 7F020EB0 3C0C8004 */ lui $t4, %hi(g_ClockTimer) # $t4, 0x8004 -/* 0538A4 7F020EB4 240B0001 */ li $t3, 1 -/* 0538A8 7F020EB8 ADC10000 */ sw $at, ($t6) -/* 0538AC 7F020EBC 8FA90158 */ lw $t1, 0x158($sp) -/* 0538B0 7F020EC0 8D8C0FF4 */ lw $t4, %lo(g_ClockTimer)($t4) -/* 0538B4 7F020EC4 3C188002 */ lui $t8, %hi(D_8002C904) # $t8, 0x8002 -/* 0538B8 7F020EC8 8D300004 */ lw $s0, 4($t1) -/* 0538BC 7F020ECC 8E0A001C */ lw $t2, 0x1c($s0) -/* 0538C0 7F020ED0 AFAB0108 */ sw $t3, 0x108($sp) -/* 0538C4 7F020ED4 AFAC0104 */ sw $t4, 0x104($sp) -/* 0538C8 7F020ED8 AFAA0110 */ sw $t2, 0x110($sp) -/* 0538CC 7F020EDC 8E020014 */ lw $v0, 0x14($s0) -/* 0538D0 7F020EE0 304D0400 */ andi $t5, $v0, 0x400 -/* 0538D4 7F020EE4 11A00003 */ beqz $t5, .L7F020EF4 -/* 0538D8 7F020EE8 0002CB40 */ sll $t9, $v0, 0xd -/* 0538DC 7F020EEC 07230035 */ bgezl $t9, .L7F020FC4 -/* 0538E0 7F020EF0 96180012 */ lhu $t8, 0x12($s0) -.L7F020EF4: -/* 0538E4 7F020EF4 8F187E54 */ lw $t8, %lo(D_8002C904)($t8) -/* 0538E8 7F020EF8 3C088002 */ lui $t0, %hi(g_AnimationTablePointerCountRelated) # $t0, 0x8002 -/* 0538EC 7F020EFC 1300001E */ beqz $t8, .L7F020F78 -/* 0538F0 7F020F00 00000000 */ nop -/* 0538F4 7F020F04 8D087E58 */ lw $t0, %lo(g_AnimationTablePointerCountRelated)($t0) -/* 0538F8 7F020F08 3C0E8002 */ lui $t6, %hi(animation_table_ptrs1) -/* 0538FC 7F020F0C 24010001 */ li $at, 1 -/* 053900 7F020F10 00087880 */ sll $t7, $t0, 2 -/* 053904 7F020F14 01CF7021 */ addu $t6, $t6, $t7 -/* 053908 7F020F18 8DCE52BC */ lw $t6, %lo(animation_table_ptrs1)($t6) -/* 05390C 7F020F1C 11C1001D */ beq $t6, $at, .L7F020F94 -/* 053910 7F020F20 00000000 */ nop -/* 053914 7F020F24 0FC1BDD3 */ jal objecthandlerGetModelAnim -/* 053918 7F020F28 8FA40110 */ lw $a0, 0x110($sp) -/* 05391C 7F020F2C 3C098002 */ lui $t1, %hi(g_AnimationTablePointerCountRelated) # $t1, 0x8002 -/* 053920 7F020F30 8D297E58 */ lw $t1, %lo(g_AnimationTablePointerCountRelated)($t1) -/* 053924 7F020F34 3C058002 */ lui $a1, %hi(animation_table_ptrs1) -/* 053928 7F020F38 8FA40110 */ lw $a0, 0x110($sp) -/* 05392C 7F020F3C 00095080 */ sll $t2, $t1, 2 -/* 053930 7F020F40 00AA2821 */ addu $a1, $a1, $t2 -/* 053934 7F020F44 8CA552BC */ lw $a1, %lo(animation_table_ptrs1)($a1) -/* 053938 7F020F48 00003025 */ move $a2, $zero -/* 05393C 7F020F4C 10450011 */ beq $v0, $a1, .L7F020F94 -/* 053940 7F020F50 00000000 */ nop -/* 053944 7F020F54 44800000 */ mtc1 $zero, $f0 -/* 053948 7F020F58 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 05394C 7F020F5C 44812000 */ mtc1 $at, $f4 -/* 053950 7F020F60 44070000 */ mfc1 $a3, $f0 -/* 053954 7F020F64 E7A00014 */ swc1 $f0, 0x14($sp) -/* 053958 7F020F68 0FC1BF92 */ jal modelSetAnimation -/* 05395C 7F020F6C E7A40010 */ swc1 $f4, 0x10($sp) -/* 053960 7F020F70 10000008 */ b .L7F020F94 -/* 053964 7F020F74 00000000 */ nop -.L7F020F78: -/* 053968 7F020F78 0FC0C9C0 */ jal chrlvActionTick -/* 05396C 7F020F7C 02002025 */ move $a0, $s0 -/* 053970 7F020F80 8E0B001C */ lw $t3, 0x1c($s0) -/* 053974 7F020F84 15600003 */ bnez $t3, .L7F020F94 -/* 053978 7F020F88 00000000 */ nop -/* 05397C 7F020F8C 100002D1 */ b .L7F021AD4 -/* 053980 7F020F90 24020001 */ li $v0, 1 -.L7F020F94: -/* 053984 7F020F94 3C0C8002 */ lui $t4, %hi(D_8002C90C) # $t4, 0x8002 -/* 053988 7F020F98 8D8C7E5C */ lw $t4, %lo(D_8002C90C)($t4) -/* 05398C 7F020F9C 3C0D8002 */ lui $t5, %hi(D_8002C910) # $t5, 0x8002 -/* 053990 7F020FA0 51800008 */ beql $t4, $zero, .L7F020FC4 -/* 053994 7F020FA4 96180012 */ lhu $t8, 0x12($s0) -/* 053998 7F020FA8 8DAD7E60 */ lw $t5, %lo(D_8002C910)($t5) -/* 05399C 7F020FAC AFA00104 */ sw $zero, 0x104($sp) -/* 0539A0 7F020FB0 24190001 */ li $t9, 1 -/* 0539A4 7F020FB4 51A00003 */ beql $t5, $zero, .L7F020FC4 -/* 0539A8 7F020FB8 96180012 */ lhu $t8, 0x12($s0) -/* 0539AC 7F020FBC AFB90104 */ sw $t9, 0x104($sp) -/* 0539B0 7F020FC0 96180012 */ lhu $t8, 0x12($s0) -.L7F020FC4: -/* 0539B4 7F020FC4 33080020 */ andi $t0, $t8, 0x20 -/* 0539B8 7F020FC8 51000006 */ beql $t0, $zero, .L7F020FE4 -/* 0539BC 7F020FCC 8E020160 */ lw $v0, 0x160($s0) -/* 0539C0 7F020FD0 0FC080A2 */ jal disable_sounds_attached_to_player_then_something -/* 0539C4 7F020FD4 8FA40158 */ lw $a0, 0x158($sp) -/* 0539C8 7F020FD8 100002BE */ b .L7F021AD4 -/* 0539CC 7F020FDC 24020001 */ li $v0, 1 -/* 0539D0 7F020FE0 8E020160 */ lw $v0, 0x160($s0) -.L7F020FE4: -/* 0539D4 7F020FE4 50400009 */ beql $v0, $zero, .L7F02100C -/* 0539D8 7F020FE8 8E020164 */ lw $v0, 0x164($s0) -/* 0539DC 7F020FEC 8C440004 */ lw $a0, 4($v0) -/* 0539E0 7F020FF0 8C8F0064 */ lw $t7, 0x64($a0) -/* 0539E4 7F020FF4 31EE0004 */ andi $t6, $t7, 4 -/* 0539E8 7F020FF8 51C00004 */ beql $t6, $zero, .L7F02100C -/* 0539EC 7F020FFC 8E020164 */ lw $v0, 0x164($s0) -/* 0539F0 7F021000 0FC10439 */ jal objFreePermanently -/* 0539F4 7F021004 24050001 */ li $a1, 1 -/* 0539F8 7F021008 8E020164 */ lw $v0, 0x164($s0) -.L7F02100C: -/* 0539FC 7F02100C 50400009 */ beql $v0, $zero, .L7F021034 -/* 053A00 7F021010 8E020014 */ lw $v0, 0x14($s0) -/* 053A04 7F021014 8C440004 */ lw $a0, 4($v0) -/* 053A08 7F021018 8C890064 */ lw $t1, 0x64($a0) -/* 053A0C 7F02101C 312A0004 */ andi $t2, $t1, 4 -/* 053A10 7F021020 51400004 */ beql $t2, $zero, .L7F021034 -/* 053A14 7F021024 8E020014 */ lw $v0, 0x14($s0) -/* 053A18 7F021028 0FC10439 */ jal objFreePermanently -/* 053A1C 7F02102C 24050001 */ li $a1, 1 -/* 053A20 7F021030 8E020014 */ lw $v0, 0x14($s0) -.L7F021034: -/* 053A24 7F021034 8FAC0158 */ lw $t4, 0x158($sp) -/* 053A28 7F021038 304B0400 */ andi $t3, $v0, 0x400 -/* 053A2C 7F02103C 51600005 */ beql $t3, $zero, .L7F021054 -/* 053A30 7F021040 918D0000 */ lbu $t5, ($t4) -/* 053A34 7F021044 AFA0010C */ sw $zero, 0x10c($sp) -/* 053A38 7F021048 100000BD */ b .L7F021340 -/* 053A3C 7F02104C 82030007 */ lb $v1, 7($s0) -/* 053A40 7F021050 918D0000 */ lbu $t5, ($t4) -.L7F021054: -/* 053A44 7F021054 24010006 */ li $at, 6 -/* 053A48 7F021058 55A1000D */ bnel $t5, $at, .L7F021090 -/* 053A4C 7F02105C 00027A00 */ sll $t7, $v0, 8 -/* 053A50 7F021060 0FC269A7 */ jal getPlayerPointerIndex -/* 053A54 7F021064 01802025 */ move $a0, $t4 -/* 053A58 7F021068 0002C880 */ sll $t9, $v0, 2 -/* 053A5C 7F02106C 3C188007 */ lui $t8, %hi(g_playerPointers) -/* 053A60 7F021070 0319C021 */ addu $t8, $t8, $t9 -/* 053A64 7F021074 8F1889F0 */ lw $t8, %lo(g_playerPointers)($t8) -/* 053A68 7F021078 24010001 */ li $at, 1 -/* 053A6C 7F02107C 8F080000 */ lw $t0, ($t8) -/* 053A70 7F021080 51010005 */ beql $t0, $at, .L7F021098 -/* 053A74 7F021084 240E0001 */ li $t6, 1 -/* 053A78 7F021088 8E020014 */ lw $v0, 0x14($s0) -/* 053A7C 7F02108C 00027A00 */ sll $t7, $v0, 8 -.L7F021090: -/* 053A80 7F021090 05E10017 */ bgez $t7, .L7F0210F0 -/* 053A84 7F021094 240E0001 */ li $t6, 1 -.L7F021098: -/* 053A88 7F021098 AFAE010C */ sw $t6, 0x10c($sp) -/* 053A8C 7F02109C 82090007 */ lb $t1, 7($s0) -/* 053A90 7F0210A0 24010003 */ li $at, 3 -/* 053A94 7F0210A4 02002025 */ move $a0, $s0 -/* 053A98 7F0210A8 1521000D */ bne $t1, $at, .L7F0210E0 -/* 053A9C 7F0210AC 00000000 */ nop -/* 053AA0 7F0210B0 8E0A002C */ lw $t2, 0x2c($s0) -/* 053AA4 7F0210B4 1540000A */ bnez $t2, .L7F0210E0 -/* 053AA8 7F0210B8 00000000 */ nop -/* 053AAC 7F0210BC 8E0B003C */ lw $t3, 0x3c($s0) -/* 053AB0 7F0210C0 8FA50104 */ lw $a1, 0x104($sp) -/* 053AB4 7F0210C4 00003025 */ move $a2, $zero -/* 053AB8 7F0210C8 11600005 */ beqz $t3, .L7F0210E0 -/* 053ABC 7F0210CC 00000000 */ nop -/* 053AC0 7F0210D0 0FC1C323 */ jal modelTickAnimQuarterSpeed -/* 053AC4 7F0210D4 8FA40110 */ lw $a0, 0x110($sp) -/* 053AC8 7F0210D8 10000003 */ b .L7F0210E8 -/* 053ACC 7F0210DC 00000000 */ nop -.L7F0210E0: -/* 053AD0 7F0210E0 0FC0836E */ jal chrPositionRelated7F020E40 -/* 053AD4 7F0210E4 8FA50104 */ lw $a1, 0x104($sp) -.L7F0210E8: -/* 053AD8 7F0210E8 10000095 */ b .L7F021340 -/* 053ADC 7F0210EC 82030007 */ lb $v1, 7($s0) -.L7F0210F0: -/* 053AE0 7F0210F0 82030007 */ lb $v1, 7($s0) -/* 053AE4 7F0210F4 2406000E */ li $a2, 14 -/* 053AE8 7F0210F8 2401000F */ li $at, 15 -/* 053AEC 7F0210FC 10C30003 */ beq $a2, $v1, .L7F02110C -/* 053AF0 7F021100 00000000 */ nop -/* 053AF4 7F021104 54610041 */ bnel $v1, $at, .L7F02120C -/* 053AF8 7F021108 24010003 */ li $at, 3 -.L7F02110C: -/* 053AFC 7F02110C 54C30005 */ bnel $a2, $v1, .L7F021124 -/* 053B00 7F021110 2401000F */ li $at, 15 -/* 053B04 7F021114 820D0038 */ lb $t5, 0x38($s0) -/* 053B08 7F021118 24010006 */ li $at, 6 -/* 053B0C 7F02111C 11A10007 */ beq $t5, $at, .L7F02113C -/* 053B10 7F021120 2401000F */ li $at, 15 -.L7F021124: -/* 053B14 7F021124 1461001E */ bne $v1, $at, .L7F0211A0 -/* 053B18 7F021128 02002025 */ move $a0, $s0 -/* 053B1C 7F02112C 820C005C */ lb $t4, 0x5c($s0) -/* 053B20 7F021130 24010006 */ li $at, 6 -/* 053B24 7F021134 1581001A */ bne $t4, $at, .L7F0211A0 -/* 053B28 7F021138 00000000 */ nop -.L7F02113C: -/* 053B2C 7F02113C 0FC1B525 */ jal getinstsize -/* 053B30 7F021140 8FA40110 */ lw $a0, 0x110($sp) -/* 053B34 7F021144 8FA40158 */ lw $a0, 0x158($sp) -/* 053B38 7F021148 44060000 */ mfc1 $a2, $f0 -/* 053B3C 7F02114C 24070001 */ li $a3, 1 -/* 053B40 7F021150 24850008 */ addiu $a1, $a0, 8 -/* 053B44 7F021154 0FC15413 */ jal sub_GAME_7F054D6C -/* 053B48 7F021158 AFA50030 */ sw $a1, 0x30($sp) -/* 053B4C 7F02115C 10400028 */ beqz $v0, .L7F021200 -/* 053B50 7F021160 AFA2010C */ sw $v0, 0x10c($sp) -/* 053B54 7F021164 8FA40110 */ lw $a0, 0x110($sp) -/* 053B58 7F021168 0FC1B476 */ jal getsuboffset -/* 053B5C 7F02116C 260500BC */ addiu $a1, $s0, 0xbc -/* 053B60 7F021170 0FC1B6B8 */ jal subcalcpos -/* 053B64 7F021174 8FA40110 */ lw $a0, 0x110($sp) -/* 053B68 7F021178 8FA40158 */ lw $a0, 0x158($sp) -/* 053B6C 7F02117C 0FC10057 */ jal set_color_shading_from_tile -/* 053B70 7F021180 260500F8 */ addiu $a1, $s0, 0xf8 -/* 053B74 7F021184 8FA40110 */ lw $a0, 0x110($sp) -/* 053B78 7F021188 0FC1B476 */ jal getsuboffset -/* 053B7C 7F02118C 8FA50030 */ lw $a1, 0x30($sp) -/* 053B80 7F021190 0FC08343 */ jal chrPositionRelated7F020D94 -/* 053B84 7F021194 02002025 */ move $a0, $s0 -/* 053B88 7F021198 10000019 */ b .L7F021200 -/* 053B8C 7F02119C 00000000 */ nop -.L7F0211A0: -/* 053B90 7F0211A0 0FC0836E */ jal chrPositionRelated7F020E40 -/* 053B94 7F0211A4 8FA50104 */ lw $a1, 0x104($sp) -/* 053B98 7F0211A8 0FC1B525 */ jal getinstsize -/* 053B9C 7F0211AC 8FA40110 */ lw $a0, 0x110($sp) -/* 053BA0 7F0211B0 8FA40158 */ lw $a0, 0x158($sp) -/* 053BA4 7F0211B4 44060000 */ mfc1 $a2, $f0 -/* 053BA8 7F0211B8 24070001 */ li $a3, 1 -/* 053BAC 7F0211BC 0FC15413 */ jal sub_GAME_7F054D6C -/* 053BB0 7F0211C0 24850008 */ addiu $a1, $a0, 8 -/* 053BB4 7F0211C4 1040000E */ beqz $v0, .L7F021200 -/* 053BB8 7F0211C8 AFA2010C */ sw $v0, 0x10c($sp) -/* 053BBC 7F0211CC 82030007 */ lb $v1, 7($s0) -/* 053BC0 7F0211D0 2401000E */ li $at, 14 -/* 053BC4 7F0211D4 3C088004 */ lui $t0, %hi(g_GlobalTimer) # $t0, 0x8004 -/* 053BC8 7F0211D8 54610005 */ bnel $v1, $at, .L7F0211F0 -/* 053BCC 7F0211DC 2401000F */ li $at, 15 -/* 053BD0 7F0211E0 8D080FFC */ lw $t0, %lo(g_GlobalTimer)($t0) -/* 053BD4 7F0211E4 10000006 */ b .L7F021200 -/* 053BD8 7F0211E8 AE080078 */ sw $t0, 0x78($s0) -/* 053BDC 7F0211EC 2401000F */ li $at, 15 -.L7F0211F0: -/* 053BE0 7F0211F0 14610003 */ bne $v1, $at, .L7F021200 -/* 053BE4 7F0211F4 3C0F8004 */ lui $t7, %hi(g_GlobalTimer) # $t7, 0x8004 -/* 053BE8 7F0211F8 8DEF0FFC */ lw $t7, %lo(g_GlobalTimer)($t7) -/* 053BEC 7F0211FC AE0F009C */ sw $t7, 0x9c($s0) -.L7F021200: -/* 053BF0 7F021200 1000004F */ b .L7F021340 -/* 053BF4 7F021204 82030007 */ lb $v1, 7($s0) -/* 053BF8 7F021208 24010003 */ li $at, 3 -.L7F02120C: -/* 053BFC 7F02120C 5461001C */ bnel $v1, $at, .L7F021280 -/* 053C00 7F021210 24010001 */ li $at, 1 -/* 053C04 7F021214 8E0E002C */ lw $t6, 0x2c($s0) -/* 053C08 7F021218 55C00019 */ bnezl $t6, .L7F021280 -/* 053C0C 7F02121C 24010001 */ li $at, 1 -/* 053C10 7F021220 0FC1B525 */ jal getinstsize -/* 053C14 7F021224 8FA40110 */ lw $a0, 0x110($sp) -/* 053C18 7F021228 8FA40158 */ lw $a0, 0x158($sp) -/* 053C1C 7F02122C 44060000 */ mfc1 $a2, $f0 -/* 053C20 7F021230 24070001 */ li $a3, 1 -/* 053C24 7F021234 0FC15413 */ jal sub_GAME_7F054D6C -/* 053C28 7F021238 24850008 */ addiu $a1, $a0, 8 -/* 053C2C 7F02123C 10400009 */ beqz $v0, .L7F021264 -/* 053C30 7F021240 AFA2010C */ sw $v0, 0x10c($sp) -/* 053C34 7F021244 8E0A003C */ lw $t2, 0x3c($s0) -/* 053C38 7F021248 02002025 */ move $a0, $s0 -/* 053C3C 7F02124C 55400006 */ bnezl $t2, .L7F021268 -/* 053C40 7F021250 8FA40110 */ lw $a0, 0x110($sp) -/* 053C44 7F021254 0FC0836E */ jal chrPositionRelated7F020E40 -/* 053C48 7F021258 8FA50104 */ lw $a1, 0x104($sp) -/* 053C4C 7F02125C 10000005 */ b .L7F021274 -/* 053C50 7F021260 00000000 */ nop -.L7F021264: -/* 053C54 7F021264 8FA40110 */ lw $a0, 0x110($sp) -.L7F021268: -/* 053C58 7F021268 8FA50104 */ lw $a1, 0x104($sp) -/* 053C5C 7F02126C 0FC1C323 */ jal modelTickAnimQuarterSpeed -/* 053C60 7F021270 00003025 */ move $a2, $zero -.L7F021274: -/* 053C64 7F021274 10000032 */ b .L7F021340 -/* 053C68 7F021278 82030007 */ lb $v1, 7($s0) -/* 053C6C 7F02127C 24010001 */ li $at, 1 -.L7F021280: -/* 053C70 7F021280 1461001C */ bne $v1, $at, .L7F0212F4 -/* 053C74 7F021284 30484000 */ andi $t0, $v0, 0x4000 -/* 053C78 7F021288 0FC1B525 */ jal getinstsize -/* 053C7C 7F02128C 8FA40110 */ lw $a0, 0x110($sp) -/* 053C80 7F021290 8FA40158 */ lw $a0, 0x158($sp) -/* 053C84 7F021294 44060000 */ mfc1 $a2, $f0 -/* 053C88 7F021298 24070001 */ li $a3, 1 -/* 053C8C 7F02129C 0FC15413 */ jal sub_GAME_7F054D6C -/* 053C90 7F0212A0 24850008 */ addiu $a1, $a0, 8 -/* 053C94 7F0212A4 14400005 */ bnez $v0, .L7F0212BC -/* 053C98 7F0212A8 AFA2010C */ sw $v0, 0x10c($sp) -/* 053C9C 7F0212AC 8E0D0014 */ lw $t5, 0x14($s0) -/* 053CA0 7F0212B0 8FB90110 */ lw $t9, 0x110($sp) -/* 053CA4 7F0212B4 31AC0001 */ andi $t4, $t5, 1 -/* 053CA8 7F0212B8 11800005 */ beqz $t4, .L7F0212D0 -.L7F0212BC: -/* 053CAC 7F0212BC 02002025 */ move $a0, $s0 -/* 053CB0 7F0212C0 0FC0836E */ jal chrPositionRelated7F020E40 -/* 053CB4 7F0212C4 8FA50104 */ lw $a1, 0x104($sp) -/* 053CB8 7F0212C8 10000008 */ b .L7F0212EC -/* 053CBC 7F0212CC 00000000 */ nop -.L7F0212D0: -/* 053CC0 7F0212D0 8F380054 */ lw $t8, 0x54($t9) -/* 053CC4 7F0212D4 03202025 */ move $a0, $t9 -/* 053CC8 7F0212D8 8FA50104 */ lw $a1, 0x104($sp) -/* 053CCC 7F0212DC 13000003 */ beqz $t8, .L7F0212EC -/* 053CD0 7F0212E0 00000000 */ nop -/* 053CD4 7F0212E4 0FC1C323 */ jal modelTickAnimQuarterSpeed -/* 053CD8 7F0212E8 00003025 */ move $a2, $zero -.L7F0212EC: -/* 053CDC 7F0212EC 10000014 */ b .L7F021340 -/* 053CE0 7F0212F0 82030007 */ lb $v1, 7($s0) -.L7F0212F4: -/* 053CE4 7F0212F4 11000007 */ beqz $t0, .L7F021314 -/* 053CE8 7F0212F8 02002025 */ move $a0, $s0 -/* 053CEC 7F0212FC 8FA40110 */ lw $a0, 0x110($sp) -/* 053CF0 7F021300 8FA50104 */ lw $a1, 0x104($sp) -/* 053CF4 7F021304 0FC1C323 */ jal modelTickAnimQuarterSpeed -/* 053CF8 7F021308 00003025 */ move $a2, $zero -/* 053CFC 7F02130C 10000003 */ b .L7F02131C -/* 053D00 7F021310 00000000 */ nop -.L7F021314: -/* 053D04 7F021314 0FC0836E */ jal chrPositionRelated7F020E40 -/* 053D08 7F021318 8FA50104 */ lw $a1, 0x104($sp) -.L7F02131C: -/* 053D0C 7F02131C 0FC1B525 */ jal getinstsize -/* 053D10 7F021320 8FA40110 */ lw $a0, 0x110($sp) -/* 053D14 7F021324 8FA40158 */ lw $a0, 0x158($sp) -/* 053D18 7F021328 44060000 */ mfc1 $a2, $f0 -/* 053D1C 7F02132C 24070001 */ li $a3, 1 -/* 053D20 7F021330 0FC15413 */ jal sub_GAME_7F054D6C -/* 053D24 7F021334 24850008 */ addiu $a1, $a0, 8 -/* 053D28 7F021338 AFA2010C */ sw $v0, 0x10c($sp) -/* 053D2C 7F02133C 82030007 */ lb $v1, 7($s0) -.L7F021340: -/* 053D30 7F021340 24010001 */ li $at, 1 -/* 053D34 7F021344 14610009 */ bne $v1, $at, .L7F02136C -/* 053D38 7F021348 8FAE0110 */ lw $t6, 0x110($sp) -/* 053D3C 7F02134C 8DC90054 */ lw $t1, 0x54($t6) -/* 053D40 7F021350 8FAA0158 */ lw $t2, 0x158($sp) -/* 053D44 7F021354 55200006 */ bnezl $t1, .L7F021370 -/* 053D48 7F021358 960D0012 */ lhu $t5, 0x12($s0) -/* 053D4C 7F02135C 914B0000 */ lbu $t3, ($t2) -/* 053D50 7F021360 24010006 */ li $at, 6 -/* 053D54 7F021364 15610004 */ bne $t3, $at, .L7F021378 -/* 053D58 7F021368 00000000 */ nop -.L7F02136C: -/* 053D5C 7F02136C 960D0012 */ lhu $t5, 0x12($s0) -.L7F021370: -/* 053D60 7F021370 35AC0200 */ ori $t4, $t5, 0x200 -/* 053D64 7F021374 A60C0012 */ sh $t4, 0x12($s0) -.L7F021378: -/* 053D68 7F021378 0FC08120 */ jal chrUpdateAimProperties -/* 053D6C 7F02137C 02002025 */ move $a0, $s0 -/* 053D70 7F021380 8E040020 */ lw $a0, 0x20($s0) -/* 053D74 7F021384 50800005 */ beql $a0, $zero, .L7F02139C -/* 053D78 7F021388 8FB8010C */ lw $t8, 0x10c($sp) -/* 053D7C 7F02138C 0FC1AE7E */ jal sub_GAME_7F06B248 -/* 053D80 7F021390 00000000 */ nop -/* 053D84 7F021394 AE000020 */ sw $zero, 0x20($s0) -/* 053D88 7F021398 8FB8010C */ lw $t8, 0x10c($sp) -.L7F02139C: -/* 053D8C 7F02139C 261900F8 */ addiu $t9, $s0, 0xf8 -/* 053D90 7F0213A0 53000196 */ beql $t8, $zero, .L7F0219FC -/* 053D94 7F0213A4 8E020160 */ lw $v0, 0x160($s0) -/* 053D98 7F0213A8 0FC24128 */ jal get_debug_chrnum_flag -/* 053D9C 7F0213AC AFB9002C */ sw $t9, 0x2c($sp) -/* 053DA0 7F0213B0 8FA20158 */ lw $v0, 0x158($sp) -/* 053DA4 7F0213B4 2404000C */ li $a0, 12 -/* 053DA8 7F0213B8 90480001 */ lbu $t0, 1($v0) -/* 053DAC 7F0213BC 350F0002 */ ori $t7, $t0, 2 -/* 053DB0 7F0213C0 A04F0001 */ sb $t7, 1($v0) -/* 053DB4 7F0213C4 8E0E0014 */ lw $t6, 0x14($s0) -/* 053DB8 7F0213C8 35C90008 */ ori $t1, $t6, 8 -/* 053DBC 7F0213CC 0FC24737 */ jal cheatIsActive -/* 053DC0 7F0213D0 AE090014 */ sw $t1, 0x14($s0) -/* 053DC4 7F0213D4 10400018 */ beqz $v0, .L7F021438 -/* 053DC8 7F0213D8 00000000 */ nop -/* 053DCC 7F0213DC 8204000F */ lb $a0, 0xf($s0) -/* 053DD0 7F0213E0 0FC081B3 */ jal not_in_us_7F0209EC -/* 053DD4 7F0213E4 82050006 */ lb $a1, 6($s0) -/* 053DD8 7F0213E8 10400013 */ beqz $v0, .L7F021438 -/* 053DDC 7F0213EC 3C013EA0 */ li $at, 0x3EA00000 # 0.312500 -/* 053DE0 7F0213F0 44816000 */ mtc1 $at, $f12 -/* 053DE4 7F0213F4 0FC1B2D3 */ jal modelSetDistanceScale -/* 053DE8 7F0213F8 00000000 */ nop -/* 053DEC 7F0213FC 8E020014 */ lw $v0, 0x14($s0) -/* 053DF0 7F021400 3C01EFFF */ lui $at, (0xEFFFFFFF >> 16) # lui $at, 0xefff -/* 053DF4 7F021404 3421FFFF */ ori $at, (0xEFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 053DF8 7F021408 000250C0 */ sll $t2, $v0, 3 -/* 053DFC 7F02140C 0541000A */ bgez $t2, .L7F021438 -/* 053E00 7F021410 00415824 */ and $t3, $v0, $at -/* 053E04 7F021414 8E04001C */ lw $a0, 0x1c($s0) -/* 053E08 7F021418 AE0B0014 */ sw $t3, 0x14($s0) -/* 053E0C 7F02141C 3C018004 */ lui $at, %hi(D_jp80051D88) # $at, 0x8004 -/* 053E10 7F021420 C4287E80 */ lwc1 $f8, %lo(D_jp80051D88)($at) -/* 053E14 7F021424 C4860014 */ lwc1 $f6, 0x14($a0) -/* 053E18 7F021428 46083283 */ div.s $f10, $f6, $f8 -/* 053E1C 7F02142C 44055000 */ mfc1 $a1, $f10 -/* 053E20 7F021430 0FC1B4CF */ jal modelSetScale -/* 053E24 7F021434 00000000 */ nop -.L7F021438: -/* 053E28 7F021438 3C0D7F02 */ lui $t5, %hi(sub_GAME_7F02083C) # $t5, 0x7f02 -/* 053E2C 7F02143C 25AD078C */ addiu $t5, %lo(sub_GAME_7F02083C) # addiu $t5, $t5, 0x78c -/* 053E30 7F021440 3C018003 */ lui $at, %hi(D_80036090) # $at, 0x8003 -/* 053E34 7F021444 AC2D15E0 */ sw $t5, %lo(D_80036090)($at) -/* 053E38 7F021448 3C018006 */ lui $at, %hi(dword_CODE_bss_80069B60) # $at, 0x8006 -/* 053E3C 7F02144C 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 053E40 7F021450 AC308AA0 */ sw $s0, %lo(dword_CODE_bss_80069B60)($at) -/* 053E44 7F021454 8FAC0110 */ lw $t4, 0x110($sp) -/* 053E48 7F021458 AFA20118 */ sw $v0, 0x118($sp) -/* 053E4C 7F02145C 8D980008 */ lw $t8, 8($t4) -/* 053E50 7F021460 8704000E */ lh $a0, 0xe($t8) -/* 053E54 7F021464 0004C980 */ sll $t9, $a0, 6 -/* 053E58 7F021468 0FC2F2B1 */ jal dynAllocate -/* 053E5C 7F02146C 03202025 */ move $a0, $t9 -/* 053E60 7F021470 3C058006 */ lui $a1, %hi(dword_CODE_bss_80069B60) # $a1, 0x8006 -/* 053E64 7F021474 24A58AA0 */ addiu $a1, %lo(dword_CODE_bss_80069B60) # addiu $a1, $a1, -0x7560 -/* 053E68 7F021478 8CA30000 */ lw $v1, ($a1) -/* 053E6C 7F02147C AFA20128 */ sw $v0, 0x128($sp) -/* 053E70 7F021480 80640011 */ lb $a0, 0x11($v1) -/* 053E74 7F021484 0480000B */ bltz $a0, .L7F0214B4 -/* 053E78 7F021488 3C088004 */ lui $t0, %hi(g_ClockTimer) # $t0, 0x8004 -/* 053E7C 7F02148C 8D080FF4 */ lw $t0, %lo(g_ClockTimer)($t0) -/* 053E80 7F021490 2409FFFF */ li $t1, -1 -/* 053E84 7F021494 00887821 */ addu $t7, $a0, $t0 -/* 053E88 7F021498 A06F0011 */ sb $t7, 0x11($v1) -/* 053E8C 7F02149C 8CA30000 */ lw $v1, ($a1) -/* 053E90 7F0214A0 806E0011 */ lb $t6, 0x11($v1) -/* 053E94 7F0214A4 29C10018 */ slti $at, $t6, 0x18 -/* 053E98 7F0214A8 54200003 */ bnezl $at, .L7F0214B8 -/* 053E9C 7F0214AC 27A40118 */ addiu $a0, $sp, 0x118 -/* 053EA0 7F0214B0 A0690011 */ sb $t1, 0x11($v1) -.L7F0214B4: -/* 053EA4 7F0214B4 27A40118 */ addiu $a0, $sp, 0x118 -.L7F0214B8: -/* 053EA8 7F0214B8 0FC1BD9C */ jal subcalcmatrices -/* 053EAC 7F0214BC 8FA50110 */ lw $a1, 0x110($sp) -/* 053EB0 7F0214C0 3C018003 */ lui $at, %hi(D_80036090) # $at, 0x8003 -/* 053EB4 7F0214C4 AC2015E0 */ sw $zero, %lo(D_80036090)($at) -/* 053EB8 7F0214C8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 053EBC 7F0214CC 44816000 */ mtc1 $at, $f12 -/* 053EC0 7F0214D0 0FC1B2D3 */ jal modelSetDistanceScale -/* 053EC4 7F0214D4 00000000 */ nop -/* 053EC8 7F0214D8 260400F4 */ addiu $a0, $s0, 0xf4 -/* 053ECC 7F0214DC 0FC100F4 */ jal update_color_shading -/* 053ED0 7F0214E0 8FA5002C */ lw $a1, 0x2c($sp) -/* 053ED4 7F0214E4 0FC1B396 */ jal sub_GAME_7F06C768 -/* 053ED8 7F0214E8 8FA40110 */ lw $a0, 0x110($sp) -/* 053EDC 7F0214EC 8FAA0158 */ lw $t2, 0x158($sp) -/* 053EE0 7F0214F0 00002025 */ move $a0, $zero -/* 053EE4 7F0214F4 E5400018 */ swc1 $f0, 0x18($t2) -/* 053EE8 7F0214F8 0FC1AE34 */ jal sub_GAME_7F06B120 -/* 053EEC 7F0214FC 8FA50110 */ lw $a1, 0x110($sp) -/* 053EF0 7F021500 AE020020 */ sw $v0, 0x20($s0) -/* 053EF4 7F021504 26060020 */ addiu $a2, $s0, 0x20 -/* 053EF8 7F021508 AFA60030 */ sw $a2, 0x30($sp) -/* 053EFC 7F02150C 8FA40158 */ lw $a0, 0x158($sp) -/* 053F00 7F021510 0FC149B6 */ jal sub_GAME_7F0523F8 -/* 053F04 7F021514 00002825 */ move $a1, $zero -/* 053F08 7F021518 8FA60030 */ lw $a2, 0x30($sp) -/* 053F0C 7F02151C 8FA40158 */ lw $a0, 0x158($sp) -/* 053F10 7F021520 0FC149B6 */ jal sub_GAME_7F0523F8 -/* 053F14 7F021524 24050001 */ li $a1, 1 -/* 053F18 7F021528 8E0201D8 */ lw $v0, 0x1d8($s0) -/* 053F1C 7F02152C 5040011A */ beql $v0, $zero, .L7F021998 -/* 053F20 7F021530 8FB80110 */ lw $t8, 0x110($sp) -/* 053F24 7F021534 8C470004 */ lw $a3, 4($v0) -/* 053F28 7F021538 904B0001 */ lbu $t3, 1($v0) -/* 053F2C 7F02153C 00003025 */ move $a2, $zero -/* 053F30 7F021540 8CE30014 */ lw $v1, 0x14($a3) -/* 053F34 7F021544 356D0002 */ ori $t5, $t3, 2 -/* 053F38 7F021548 A04D0001 */ sb $t5, 1($v0) -/* 053F3C 7F02154C 8C65001C */ lw $a1, 0x1c($v1) -/* 053F40 7F021550 8FA40110 */ lw $a0, 0x110($sp) -/* 053F44 7F021554 AFA70100 */ sw $a3, 0x100($sp) -/* 053F48 7F021558 0FC1B366 */ jal modelFindNodeMtx -/* 053F4C 7F02155C AFA300FC */ sw $v1, 0xfc($sp) -/* 053F50 7F021560 8FAC00FC */ lw $t4, 0xfc($sp) -/* 053F54 7F021564 AFA20118 */ sw $v0, 0x118($sp) -/* 053F58 7F021568 8D980008 */ lw $t8, 8($t4) -/* 053F5C 7F02156C 8704000E */ lh $a0, 0xe($t8) -/* 053F60 7F021570 0004C980 */ sll $t9, $a0, 6 -/* 053F64 7F021574 0FC2F2B1 */ jal dynAllocate -/* 053F68 7F021578 03202025 */ move $a0, $t9 -/* 053F6C 7F02157C AFA20128 */ sw $v0, 0x128($sp) -/* 053F70 7F021580 27A40118 */ addiu $a0, $sp, 0x118 -/* 053F74 7F021584 0FC1BD8D */ jal instcalcmatrices -/* 053F78 7F021588 8FA500FC */ lw $a1, 0xfc($sp) -/* 053F7C 7F02158C 82020006 */ lb $v0, 6($s0) -/* 053F80 7F021590 2841002A */ slti $at, $v0, 0x2a -/* 053F84 7F021594 142000F2 */ bnez $at, .L7F021960 -/* 053F88 7F021598 28410046 */ slti $at, $v0, 0x46 -/* 053F8C 7F02159C 102000F0 */ beqz $at, .L7F021960 -/* 053F90 7F0215A0 3C0F8003 */ lui $t7, %hi(D_8002CCAC) # $t7, 0x8003 -/* 053F94 7F0215A4 25EF81FC */ addiu $t7, %lo(D_8002CCAC) # addiu $t7, $t7, -0x7e04 -/* 053F98 7F0215A8 8DE10000 */ lw $at, ($t7) -/* 053F9C 7F0215AC 27A800F0 */ addiu $t0, $sp, 0xf0 -/* 053FA0 7F0215B0 8DE90004 */ lw $t1, 4($t7) -/* 053FA4 7F0215B4 AD010000 */ sw $at, ($t0) -/* 053FA8 7F0215B8 8DE10008 */ lw $at, 8($t7) -/* 053FAC 7F0215BC AD090004 */ sw $t1, 4($t0) -/* 053FB0 7F0215C0 AD010008 */ sw $at, 8($t0) -/* 053FB4 7F0215C4 0FC14A59 */ jal get_hat_model -/* 053FB8 7F0215C8 8E0401D8 */ lw $a0, 0x1d8($s0) -/* 053FBC 7F0215CC AFA20060 */ sw $v0, 0x60($sp) -/* 053FC0 7F0215D0 82040006 */ lb $a0, 6($s0) -/* 053FC4 7F0215D4 00025880 */ sll $t3, $v0, 2 -/* 053FC8 7F0215D8 01625823 */ subu $t3, $t3, $v0 -/* 053FCC 7F0215DC 2484FFD6 */ addiu $a0, $a0, -0x2a -/* 053FD0 7F0215E0 000450C0 */ sll $t2, $a0, 3 -/* 053FD4 7F0215E4 01445021 */ addu $t2, $t2, $a0 -/* 053FD8 7F0215E8 000A5100 */ sll $t2, $t2, 4 -/* 053FDC 7F0215EC 000B58C0 */ sll $t3, $t3, 3 -/* 053FE0 7F0215F0 3C0C8004 */ lui $t4, %hi(headHat_array_8003E464) # $t4, 0x8004 -/* 053FE4 7F0215F4 258C80B4 */ addiu $t4, %lo(headHat_array_8003E464) # addiu $t4, $t4, -0x7f4c -/* 053FE8 7F0215F8 014B6821 */ addu $t5, $t2, $t3 -/* 053FEC 7F0215FC 01AC1821 */ addu $v1, $t5, $t4 -/* 053FF0 7F021600 0FC240F8 */ jal get_debug_render_raster -/* 053FF4 7F021604 AFA30058 */ sw $v1, 0x58($sp) -/* 053FF8 7F021608 144000AA */ bnez $v0, .L7F0218B4 -/* 053FFC 7F02160C 8FA30058 */ lw $v1, 0x58($sp) -/* 054000 7F021610 AFA00054 */ sw $zero, 0x54($sp) -/* 054004 7F021614 00002025 */ move $a0, $zero -/* 054008 7F021618 24050020 */ li $a1, 32 -/* 05400C 7F02161C 0C002C20 */ jal joyGetButtons -/* 054010 7F021620 AFA30058 */ sw $v1, 0x58($sp) -/* 054014 7F021624 1040004F */ beqz $v0, .L7F021764 -/* 054018 7F021628 8FA30058 */ lw $v1, 0x58($sp) -/* 05401C 7F02162C 00002025 */ move $a0, $zero -/* 054020 7F021630 34058000 */ li $a1, 32768 -/* 054024 7F021634 0C002C20 */ jal joyGetButtons -/* 054028 7F021638 AFA30058 */ sw $v1, 0x58($sp) -/* 05402C 7F02163C 10400008 */ beqz $v0, .L7F021660 -/* 054030 7F021640 8FA30058 */ lw $v1, 0x58($sp) -/* 054034 7F021644 3C018004 */ lui $at, %hi(D_80051D58) # $at, 0x8004 -/* 054038 7F021648 C4327E84 */ lwc1 $f18, %lo(D_80051D58)($at) -/* 05403C 7F02164C C4700008 */ lwc1 $f16, 8($v1) -/* 054040 7F021650 24180001 */ li $t8, 1 -/* 054044 7F021654 46128101 */ sub.s $f4, $f16, $f18 -/* 054048 7F021658 E4640008 */ swc1 $f4, 8($v1) -/* 05404C 7F02165C AFB80054 */ sw $t8, 0x54($sp) -.L7F021660: -/* 054050 7F021660 00002025 */ move $a0, $zero -/* 054054 7F021664 24054000 */ li $a1, 16384 -/* 054058 7F021668 0C002C20 */ jal joyGetButtons -/* 05405C 7F02166C AFA30058 */ sw $v1, 0x58($sp) -/* 054060 7F021670 10400008 */ beqz $v0, .L7F021694 -/* 054064 7F021674 8FA30058 */ lw $v1, 0x58($sp) -/* 054068 7F021678 3C018004 */ lui $at, %hi(D_80051D5C) # $at, 0x8004 -/* 05406C 7F02167C C4287E88 */ lwc1 $f8, %lo(D_80051D5C)($at) -/* 054070 7F021680 C4660008 */ lwc1 $f6, 8($v1) -/* 054074 7F021684 24190001 */ li $t9, 1 -/* 054078 7F021688 46083280 */ add.s $f10, $f6, $f8 -/* 05407C 7F02168C E46A0008 */ swc1 $f10, 8($v1) -/* 054080 7F021690 AFB90054 */ sw $t9, 0x54($sp) -.L7F021694: -/* 054084 7F021694 00002025 */ move $a0, $zero -/* 054088 7F021698 24050004 */ li $a1, 4 -/* 05408C 7F02169C 0C002C20 */ jal joyGetButtons -/* 054090 7F0216A0 AFA30058 */ sw $v1, 0x58($sp) -/* 054094 7F0216A4 10400008 */ beqz $v0, .L7F0216C8 -/* 054098 7F0216A8 8FA30058 */ lw $v1, 0x58($sp) -/* 05409C 7F0216AC 3C018004 */ lui $at, %hi(D_80051D60) # $at, 0x8004 -/* 0540A0 7F0216B0 C4327E8C */ lwc1 $f18, %lo(D_80051D60)($at) -/* 0540A4 7F0216B4 C4700004 */ lwc1 $f16, 4($v1) -/* 0540A8 7F0216B8 240E0001 */ li $t6, 1 -/* 0540AC 7F0216BC 46128101 */ sub.s $f4, $f16, $f18 -/* 0540B0 7F0216C0 E4640004 */ swc1 $f4, 4($v1) -/* 0540B4 7F0216C4 AFAE0054 */ sw $t6, 0x54($sp) -.L7F0216C8: -/* 0540B8 7F0216C8 00002025 */ move $a0, $zero -/* 0540BC 7F0216CC 24050008 */ li $a1, 8 -/* 0540C0 7F0216D0 0C002C20 */ jal joyGetButtons -/* 0540C4 7F0216D4 AFA30058 */ sw $v1, 0x58($sp) -/* 0540C8 7F0216D8 10400008 */ beqz $v0, .L7F0216FC -/* 0540CC 7F0216DC 8FA30058 */ lw $v1, 0x58($sp) -/* 0540D0 7F0216E0 3C018004 */ lui $at, %hi(D_80051D64) # $at, 0x8004 -/* 0540D4 7F0216E4 C4287E90 */ lwc1 $f8, %lo(D_80051D64)($at) -/* 0540D8 7F0216E8 C4660004 */ lwc1 $f6, 4($v1) -/* 0540DC 7F0216EC 24080001 */ li $t0, 1 -/* 0540E0 7F0216F0 46083280 */ add.s $f10, $f6, $f8 -/* 0540E4 7F0216F4 E46A0004 */ swc1 $f10, 4($v1) -/* 0540E8 7F0216F8 AFA80054 */ sw $t0, 0x54($sp) -.L7F0216FC: -/* 0540EC 7F0216FC 00002025 */ move $a0, $zero -/* 0540F0 7F021700 24050002 */ li $a1, 2 -/* 0540F4 7F021704 0C002C20 */ jal joyGetButtons -/* 0540F8 7F021708 AFA30058 */ sw $v1, 0x58($sp) -/* 0540FC 7F02170C 10400008 */ beqz $v0, .L7F021730 -/* 054100 7F021710 8FA30058 */ lw $v1, 0x58($sp) -/* 054104 7F021714 3C018004 */ lui $at, %hi(D_80051D68) # $at, 0x8004 -/* 054108 7F021718 C4327E94 */ lwc1 $f18, %lo(D_80051D68)($at) -/* 05410C 7F02171C C4700000 */ lwc1 $f16, ($v1) -/* 054110 7F021720 240F0001 */ li $t7, 1 -/* 054114 7F021724 46128101 */ sub.s $f4, $f16, $f18 -/* 054118 7F021728 E4640000 */ swc1 $f4, ($v1) -/* 05411C 7F02172C AFAF0054 */ sw $t7, 0x54($sp) -.L7F021730: -/* 054120 7F021730 00002025 */ move $a0, $zero -/* 054124 7F021734 24050001 */ li $a1, 1 -/* 054128 7F021738 0C002C20 */ jal joyGetButtons -/* 05412C 7F02173C AFA30058 */ sw $v1, 0x58($sp) -/* 054130 7F021740 10400008 */ beqz $v0, .L7F021764 -/* 054134 7F021744 8FA30058 */ lw $v1, 0x58($sp) -/* 054138 7F021748 3C018004 */ lui $at, %hi(D_80051D6C) # $at, 0x8004 -/* 05413C 7F02174C C4287E98 */ lwc1 $f8, %lo(D_80051D6C)($at) -/* 054140 7F021750 C4660000 */ lwc1 $f6, ($v1) -/* 054144 7F021754 24090001 */ li $t1, 1 -/* 054148 7F021758 46083280 */ add.s $f10, $f6, $f8 -/* 05414C 7F02175C E46A0000 */ swc1 $f10, ($v1) -/* 054150 7F021760 AFA90054 */ sw $t1, 0x54($sp) -.L7F021764: -/* 054154 7F021764 00002025 */ move $a0, $zero -/* 054158 7F021768 24050010 */ li $a1, 16 -/* 05415C 7F02176C 0C002C20 */ jal joyGetButtons -/* 054160 7F021770 AFA30058 */ sw $v1, 0x58($sp) -/* 054164 7F021774 1040004F */ beqz $v0, .L7F0218B4 -/* 054168 7F021778 8FA30058 */ lw $v1, 0x58($sp) -/* 05416C 7F02177C 00002025 */ move $a0, $zero -/* 054170 7F021780 34058000 */ li $a1, 32768 -/* 054174 7F021784 0C002C20 */ jal joyGetButtons -/* 054178 7F021788 AFA30058 */ sw $v1, 0x58($sp) -/* 05417C 7F02178C 10400008 */ beqz $v0, .L7F0217B0 -/* 054180 7F021790 8FA30058 */ lw $v1, 0x58($sp) -/* 054184 7F021794 3C018004 */ lui $at, %hi(D_80051D70) # $at, 0x8004 -/* 054188 7F021798 C4327E9C */ lwc1 $f18, %lo(D_80051D70)($at) -/* 05418C 7F02179C C4700014 */ lwc1 $f16, 0x14($v1) -/* 054190 7F0217A0 240A0001 */ li $t2, 1 -/* 054194 7F0217A4 46128102 */ mul.s $f4, $f16, $f18 -/* 054198 7F0217A8 E4640014 */ swc1 $f4, 0x14($v1) -/* 05419C 7F0217AC AFAA0054 */ sw $t2, 0x54($sp) -.L7F0217B0: -/* 0541A0 7F0217B0 00002025 */ move $a0, $zero -/* 0541A4 7F0217B4 24054000 */ li $a1, 16384 -/* 0541A8 7F0217B8 0C002C20 */ jal joyGetButtons -/* 0541AC 7F0217BC AFA30058 */ sw $v1, 0x58($sp) -/* 0541B0 7F0217C0 10400008 */ beqz $v0, .L7F0217E4 -/* 0541B4 7F0217C4 8FA30058 */ lw $v1, 0x58($sp) -/* 0541B8 7F0217C8 3C018004 */ lui $at, %hi(D_80051D74) # $at, 0x8004 -/* 0541BC 7F0217CC C4287EA0 */ lwc1 $f8, %lo(D_80051D74)($at) -/* 0541C0 7F0217D0 C4660014 */ lwc1 $f6, 0x14($v1) -/* 0541C4 7F0217D4 240B0001 */ li $t3, 1 -/* 0541C8 7F0217D8 46083282 */ mul.s $f10, $f6, $f8 -/* 0541CC 7F0217DC E46A0014 */ swc1 $f10, 0x14($v1) -/* 0541D0 7F0217E0 AFAB0054 */ sw $t3, 0x54($sp) -.L7F0217E4: -/* 0541D4 7F0217E4 00002025 */ move $a0, $zero -/* 0541D8 7F0217E8 24050004 */ li $a1, 4 -/* 0541DC 7F0217EC 0C002C20 */ jal joyGetButtons -/* 0541E0 7F0217F0 AFA30058 */ sw $v1, 0x58($sp) -/* 0541E4 7F0217F4 10400008 */ beqz $v0, .L7F021818 -/* 0541E8 7F0217F8 8FA30058 */ lw $v1, 0x58($sp) -/* 0541EC 7F0217FC 3C018004 */ lui $at, %hi(D_80051D78) # $at, 0x8004 -/* 0541F0 7F021800 C4327EA4 */ lwc1 $f18, %lo(D_80051D78)($at) -/* 0541F4 7F021804 C4700010 */ lwc1 $f16, 0x10($v1) -/* 0541F8 7F021808 240D0001 */ li $t5, 1 -/* 0541FC 7F02180C 46128102 */ mul.s $f4, $f16, $f18 -/* 054200 7F021810 E4640010 */ swc1 $f4, 0x10($v1) -/* 054204 7F021814 AFAD0054 */ sw $t5, 0x54($sp) -.L7F021818: -/* 054208 7F021818 00002025 */ move $a0, $zero -/* 05420C 7F02181C 24050008 */ li $a1, 8 -/* 054210 7F021820 0C002C20 */ jal joyGetButtons -/* 054214 7F021824 AFA30058 */ sw $v1, 0x58($sp) -/* 054218 7F021828 10400008 */ beqz $v0, .L7F02184C -/* 05421C 7F02182C 8FA30058 */ lw $v1, 0x58($sp) -/* 054220 7F021830 3C018004 */ lui $at, %hi(D_80051D7C) # $at, 0x8004 -/* 054224 7F021834 C4287EA8 */ lwc1 $f8, %lo(D_80051D7C)($at) -/* 054228 7F021838 C4660010 */ lwc1 $f6, 0x10($v1) -/* 05422C 7F02183C 240C0001 */ li $t4, 1 -/* 054230 7F021840 46083282 */ mul.s $f10, $f6, $f8 -/* 054234 7F021844 E46A0010 */ swc1 $f10, 0x10($v1) -/* 054238 7F021848 AFAC0054 */ sw $t4, 0x54($sp) -.L7F02184C: -/* 05423C 7F02184C 00002025 */ move $a0, $zero -/* 054240 7F021850 24050002 */ li $a1, 2 -/* 054244 7F021854 0C002C20 */ jal joyGetButtons -/* 054248 7F021858 AFA30058 */ sw $v1, 0x58($sp) -/* 05424C 7F02185C 10400008 */ beqz $v0, .L7F021880 -/* 054250 7F021860 8FA30058 */ lw $v1, 0x58($sp) -/* 054254 7F021864 3C018004 */ lui $at, %hi(D_80051D80) # $at, 0x8004 -/* 054258 7F021868 C4327EAC */ lwc1 $f18, %lo(D_80051D80)($at) -/* 05425C 7F02186C C470000C */ lwc1 $f16, 0xc($v1) -/* 054260 7F021870 24180001 */ li $t8, 1 -/* 054264 7F021874 46128102 */ mul.s $f4, $f16, $f18 -/* 054268 7F021878 E464000C */ swc1 $f4, 0xc($v1) -/* 05426C 7F02187C AFB80054 */ sw $t8, 0x54($sp) -.L7F021880: -/* 054270 7F021880 00002025 */ move $a0, $zero -/* 054274 7F021884 24050001 */ li $a1, 1 -/* 054278 7F021888 0C002C20 */ jal joyGetButtons -/* 05427C 7F02188C AFA30058 */ sw $v1, 0x58($sp) -/* 054280 7F021890 10400008 */ beqz $v0, .L7F0218B4 -/* 054284 7F021894 8FA30058 */ lw $v1, 0x58($sp) -/* 054288 7F021898 3C018004 */ lui $at, %hi(D_80051D84) # $at, 0x8004 -/* 05428C 7F02189C C4287EB0 */ lwc1 $f8, %lo(D_80051D84)($at) -/* 054290 7F0218A0 C466000C */ lwc1 $f6, 0xc($v1) -/* 054294 7F0218A4 24190001 */ li $t9, 1 -/* 054298 7F0218A8 46083282 */ mul.s $f10, $f6, $f8 -/* 05429C 7F0218AC E46A000C */ swc1 $f10, 0xc($v1) -/* 0542A0 7F0218B0 AFB90054 */ sw $t9, 0x54($sp) -.L7F0218B4: -/* 0542A4 7F0218B4 3C018004 */ lui $at, %hi(D_80051D88) # $at, 0x8004 -/* 0542A8 7F0218B8 C4207EB4 */ lwc1 $f0, %lo(D_80051D88)($at) -/* 0542AC 7F0218BC C4700000 */ lwc1 $f16, ($v1) -/* 0542B0 7F0218C0 27A400F0 */ addiu $a0, $sp, 0xf0 -/* 0542B4 7F0218C4 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 0542B8 7F0218C8 46008482 */ mul.s $f18, $f16, $f0 -/* 0542BC 7F0218CC E7B200F0 */ swc1 $f18, 0xf0($sp) -/* 0542C0 7F0218D0 C4640004 */ lwc1 $f4, 4($v1) -/* 0542C4 7F0218D4 46002182 */ mul.s $f6, $f4, $f0 -/* 0542C8 7F0218D8 E7A600F4 */ swc1 $f6, 0xf4($sp) -/* 0542CC 7F0218DC C4680008 */ lwc1 $f8, 8($v1) -/* 0542D0 7F0218E0 46004282 */ mul.s $f10, $f8, $f0 -/* 0542D4 7F0218E4 E7AA00F8 */ swc1 $f10, 0xf8($sp) -/* 0542D8 7F0218E8 C470000C */ lwc1 $f16, 0xc($v1) -/* 0542DC 7F0218EC E7B000EC */ swc1 $f16, 0xec($sp) -/* 0542E0 7F0218F0 C4720010 */ lwc1 $f18, 0x10($v1) -/* 0542E4 7F0218F4 E7B200E8 */ swc1 $f18, 0xe8($sp) -/* 0542E8 7F0218F8 C4640014 */ lwc1 $f4, 0x14($v1) -/* 0542EC 7F0218FC 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 0542F0 7F021900 E7A400E4 */ swc1 $f4, 0xe4($sp) -/* 0542F4 7F021904 C7AC00EC */ lwc1 $f12, 0xec($sp) -/* 0542F8 7F021908 0FC16397 */ jal matrix_column_1_scalar_multiply -/* 0542FC 7F02190C 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 054300 7F021910 C7AC00E8 */ lwc1 $f12, 0xe8($sp) -/* 054304 7F021914 0FC163A3 */ jal matrix_column_2_scalar_multiply -/* 054308 7F021918 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 05430C 7F02191C C7AC00E4 */ lwc1 $f12, 0xe4($sp) -/* 054310 7F021920 0FC163BD */ jal matrix_column_3_scalar_multiply_2 -/* 054314 7F021924 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 054318 7F021928 8FAE00FC */ lw $t6, 0xfc($sp) -/* 05431C 7F02192C 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 054320 7F021930 27A60064 */ addiu $a2, $sp, 0x64 -/* 054324 7F021934 0FC1618D */ jal matrix_4x4_multiply_homogeneous -/* 054328 7F021938 8DC4000C */ lw $a0, 0xc($t6) -/* 05432C 7F02193C 8FA800FC */ lw $t0, 0xfc($sp) -/* 054330 7F021940 27A40064 */ addiu $a0, $sp, 0x64 -/* 054334 7F021944 0FC16132 */ jal matrix_4x4_copy -/* 054338 7F021948 8D05000C */ lw $a1, 0xc($t0) -/* 05433C 7F02194C 8FAF0060 */ lw $t7, 0x60($sp) -/* 054340 7F021950 24010002 */ li $at, 2 -/* 054344 7F021954 55E10003 */ bnel $t7, $at, .L7F021964 -/* 054348 7F021958 96090012 */ lhu $t1, 0x12($s0) -/* 05434C 7F02195C AFA00108 */ sw $zero, 0x108($sp) -.L7F021960: -/* 054350 7F021960 96090012 */ lhu $t1, 0x12($s0) -.L7F021964: -/* 054354 7F021964 8FAB0100 */ lw $t3, 0x100($sp) -/* 054358 7F021968 8FA500FC */ lw $a1, 0xfc($sp) -/* 05435C 7F02196C 312A0001 */ andi $t2, $t1, 1 -/* 054360 7F021970 11400005 */ beqz $t2, .L7F021988 -/* 054364 7F021974 00000000 */ nop -/* 054368 7F021978 8D6D0064 */ lw $t5, 0x64($t3) -/* 05436C 7F02197C 31AC0080 */ andi $t4, $t5, 0x80 -/* 054370 7F021980 55800005 */ bnezl $t4, .L7F021998 -/* 054374 7F021984 8FB80110 */ lw $t8, 0x110($sp) -.L7F021988: -/* 054378 7F021988 0FC1AE34 */ jal sub_GAME_7F06B120 -/* 05437C 7F02198C 8E040020 */ lw $a0, 0x20($s0) -/* 054380 7F021990 AE020020 */ sw $v0, 0x20($s0) -/* 054384 7F021994 8FB80110 */ lw $t8, 0x110($sp) -.L7F021998: -/* 054388 7F021998 8F190008 */ lw $t9, 8($t8) -/* 05438C 7F02199C 8F2E0008 */ lw $t6, 8($t9) -/* 054390 7F0219A0 8DC50010 */ lw $a1, 0x10($t6) -/* 054394 7F0219A4 10A0000E */ beqz $a1, .L7F0219E0 -/* 054398 7F0219A8 00000000 */ nop -/* 05439C 7F0219AC 0FC1B3A3 */ jal modelGetNodeRwData -/* 0543A0 7F0219B0 03002025 */ move $a0, $t8 -/* 0543A4 7F0219B4 8C430000 */ lw $v1, ($v0) -/* 0543A8 7F0219B8 10600009 */ beqz $v1, .L7F0219E0 -/* 0543AC 7F0219BC 00000000 */ nop -/* 0543B0 7F0219C0 8C680008 */ lw $t0, 8($v1) -/* 0543B4 7F0219C4 8D050004 */ lw $a1, 4($t0) -/* 0543B8 7F0219C8 10A00005 */ beqz $a1, .L7F0219E0 -/* 0543BC 7F0219CC 00000000 */ nop -/* 0543C0 7F0219D0 0FC1B3A3 */ jal modelGetNodeRwData -/* 0543C4 7F0219D4 8FA40110 */ lw $a0, 0x110($sp) -/* 0543C8 7F0219D8 8FAF0108 */ lw $t7, 0x108($sp) -/* 0543CC 7F0219DC AC4F0000 */ sw $t7, ($v0) -.L7F0219E0: -/* 0543D0 7F0219E0 0FC1AE93 */ jal sub_GAME_7F06B29C -/* 0543D4 7F0219E4 8E040020 */ lw $a0, 0x20($s0) -/* 0543D8 7F0219E8 0FC1B0B6 */ jal sub_GAME_7F06BB28 -/* 0543DC 7F0219EC 8E040020 */ lw $a0, 0x20($s0) -/* 0543E0 7F0219F0 10000020 */ b .L7F021A74 -/* 0543E4 7F0219F4 AE020020 */ sw $v0, 0x20($s0) -/* 0543E8 7F0219F8 8E020160 */ lw $v0, 0x160($s0) -.L7F0219FC: -/* 0543EC 7F0219FC 50400005 */ beql $v0, $zero, .L7F021A14 -/* 0543F0 7F021A00 8E020164 */ lw $v0, 0x164($s0) -/* 0543F4 7F021A04 90490001 */ lbu $t1, 1($v0) -/* 0543F8 7F021A08 312AFFFD */ andi $t2, $t1, 0xfffd -/* 0543FC 7F021A0C A04A0001 */ sb $t2, 1($v0) -/* 054400 7F021A10 8E020164 */ lw $v0, 0x164($s0) -.L7F021A14: -/* 054404 7F021A14 2403FFFD */ li $v1, -3 -/* 054408 7F021A18 50400005 */ beql $v0, $zero, .L7F021A30 -/* 05440C 7F021A1C 8E0201D8 */ lw $v0, 0x1d8($s0) -/* 054410 7F021A20 904B0001 */ lbu $t3, 1($v0) -/* 054414 7F021A24 01636824 */ and $t5, $t3, $v1 -/* 054418 7F021A28 A04D0001 */ sb $t5, 1($v0) -/* 05441C 7F021A2C 8E0201D8 */ lw $v0, 0x1d8($s0) -.L7F021A30: -/* 054420 7F021A30 50400005 */ beql $v0, $zero, .L7F021A48 -/* 054424 7F021A34 8FAE0158 */ lw $t6, 0x158($sp) -/* 054428 7F021A38 904C0001 */ lbu $t4, 1($v0) -/* 05442C 7F021A3C 0183C824 */ and $t9, $t4, $v1 -/* 054430 7F021A40 A0590001 */ sb $t9, 1($v0) -/* 054434 7F021A44 8FAE0158 */ lw $t6, 0x158($sp) -.L7F021A48: -/* 054438 7F021A48 91D80001 */ lbu $t8, 1($t6) -/* 05443C 7F021A4C 03034024 */ and $t0, $t8, $v1 -/* 054440 7F021A50 A1C80001 */ sb $t0, 1($t6) -/* 054444 7F021A54 920F00F8 */ lbu $t7, 0xf8($s0) -/* 054448 7F021A58 920900F9 */ lbu $t1, 0xf9($s0) -/* 05444C 7F021A5C 920A00FA */ lbu $t2, 0xfa($s0) -/* 054450 7F021A60 920B00FB */ lbu $t3, 0xfb($s0) -/* 054454 7F021A64 A20F00F4 */ sb $t7, 0xf4($s0) -/* 054458 7F021A68 A20900F5 */ sb $t1, 0xf5($s0) -/* 05445C 7F021A6C A20A00F6 */ sb $t2, 0xf6($s0) -/* 054460 7F021A70 A20B00F7 */ sb $t3, 0xf7($s0) -.L7F021A74: -/* 054464 7F021A74 8E0D0014 */ lw $t5, 0x14($s0) -/* 054468 7F021A78 31AC0400 */ andi $t4, $t5, 0x400 -/* 05446C 7F021A7C 55800015 */ bnezl $t4, .L7F021AD4 -/* 054470 7F021A80 00001025 */ move $v0, $zero -/* 054474 7F021A84 96020012 */ lhu $v0, 0x12($s0) -/* 054478 7F021A88 8FB80158 */ lw $t8, 0x158($sp) -/* 05447C 7F021A8C 30590001 */ andi $t9, $v0, 1 -/* 054480 7F021A90 1320000D */ beqz $t9, .L7F021AC8 -/* 054484 7F021A94 00000000 */ nop -/* 054488 7F021A98 8F040020 */ lw $a0, 0x20($t8) -/* 05448C 7F021A9C 50800009 */ beql $a0, $zero, .L7F021AC4 -/* 054490 7F021AA0 3048FFFE */ andi $t0, $v0, 0xfffe -/* 054494 7F021AA4 8C830024 */ lw $v1, 0x24($a0) -.L7F021AA8: -/* 054498 7F021AA8 0FC130C9 */ jal objDrop -/* 05449C 7F021AAC AFA3003C */ sw $v1, 0x3c($sp) -/* 0544A0 7F021AB0 8FA4003C */ lw $a0, 0x3c($sp) -/* 0544A4 7F021AB4 5480FFFC */ bnezl $a0, .L7F021AA8 -/* 0544A8 7F021AB8 8C830024 */ lw $v1, 0x24($a0) -/* 0544AC 7F021ABC 96020012 */ lhu $v0, 0x12($s0) -/* 0544B0 7F021AC0 3048FFFE */ andi $t0, $v0, 0xfffe -.L7F021AC4: -/* 0544B4 7F021AC4 A6080012 */ sh $t0, 0x12($s0) -.L7F021AC8: -/* 0544B8 7F021AC8 0FC0B8A8 */ jal chrlvTriggerFireWeapon -/* 0544BC 7F021ACC 02002025 */ move $a0, $s0 -/* 0544C0 7F021AD0 00001025 */ move $v0, $zero -.L7F021AD4: -/* 0544C4 7F021AD4 8FBF0024 */ lw $ra, 0x24($sp) -/* 0544C8 7F021AD8 8FB00020 */ lw $s0, 0x20($sp) -/* 0544CC 7F021ADC 27BD0158 */ addiu $sp, $sp, 0x158 -/* 0544D0 7F021AE0 03E00008 */ jr $ra -/* 0544D4 7F021AE4 00000000 */ nop - -) + if (g_CurModelChr->flinchcnt >= 24) +#else + if (g_CurModelChr->flinchcnt >= 30) #endif + { + g_CurModelChr->flinchcnt = -1; + } + } -#endif + subcalcmatrices(&renderdata, model); + + g_ModelJointPositionedFunc = NULL; + modelSetDistanceScale(1.0f); + + update_color_shading(&chr->shadecol, &chr->nextcol); + + prop->zDepth = sub_GAME_7F06C768(model); + + chr->field_20 = sub_GAME_7F06B120(NULL, model); + + chrRenderHeldWeapon(prop, GUNRIGHT, (Gfx **)(&chr->field_20)); + chrRenderHeldWeapon(prop, GUNLEFT, (Gfx **)(&chr->field_20)); + + if (chr->handle_positiondata_hat != NULL) + { + ObjectRecord *hatobj; + Model *hatmodel; + + hatobj = chr->handle_positiondata_hat->obj; + hatmodel = hatobj->model; + + chr->handle_positiondata_hat->flags |= PROPFLAG_ONSCREEN; + + renderdata.basemtx = modelFindNodeMtx(model, hatmodel->attachedto_objinst, 0); + renderdata.mtxlist = dynAllocate(hatmodel->obj->numMatrices * (sizeof(Mtxf))); + + instcalcmatrices(&renderdata, hatmodel); + + if ((chr->headnum >= HEAD_START) && (chr->headnum < BODY_Female_Sally)) + { + coord3d pos; + f32 xscale; + f32 yscale; + f32 zscale; + Mtxf mtx; + Mtxf tmp; + HATTYPE hat; + s32 unusedv; + struct headHat *entry; + volatile s32 changed; + s32 headindex; + + pos = D_8002CCAC; + + hat = get_hat_model(chr->handle_positiondata_hat); + + headindex = chr->headnum - HEAD_START; + entry = &((struct headHat (*)[6]) headHat_array_8003E464)[headindex][hat]; + + if (!get_debug_render_raster()) + { + changed = 0; + + if (joyGetButtons(PLAYER_1, L_TRIG)) + { + if (joyGetButtons(PLAYER_1, A_BUTTON)) + { + /* The differing spellings of 0.02 (and 0.995/1.005 + below) are intentional and load-bearing: IDO interns + float literals by lexical spelling, and the ROM's + rodata pool contains six separate 0.02 words + (formerly hosted as D_80051D58..D_80051D6C). */ + entry->zoffset -= 0.02f; + changed = 1; + } + + if (joyGetButtons(PLAYER_1, B_BUTTON)) + { + entry->zoffset += 0.020f; + changed = 1; + } + + if (joyGetButtons(PLAYER_1, D_CBUTTONS)) + { + entry->yoffset -= 0.0200f; + changed = 1; + } + + if (joyGetButtons(PLAYER_1, U_CBUTTONS)) + { + entry->yoffset += 0.02000f; + changed = 1; + } + + if (joyGetButtons(PLAYER_1, L_CBUTTONS)) + { + entry->xoffset -= 0.020000f; + changed = 1; + } + + if (joyGetButtons(PLAYER_1, R_CBUTTONS)) + { + entry->xoffset += 0.0200000f; + changed = 1; + } + } + + if (joyGetButtons(PLAYER_1, R_TRIG)) + { + if (joyGetButtons(PLAYER_1, A_BUTTON)) + { + entry->zsize *= 0.995f; + changed = 1; + } + + if (joyGetButtons(PLAYER_1, B_BUTTON)) + { + entry->zsize *= 1.005f; + changed = 1; + } + + if (joyGetButtons(PLAYER_1, D_CBUTTONS)) + { + entry->ysize *= 0.9950f; + changed = 1; + } + + if (joyGetButtons(PLAYER_1, U_CBUTTONS)) + { + entry->ysize *= 1.0050f; + changed = 1; + } + + if (joyGetButtons(PLAYER_1, L_CBUTTONS)) + { + entry->xsize *= 0.99500f; + changed = 1; + } + + if (joyGetButtons(PLAYER_1, R_CBUTTONS)) + { + entry->xsize *= 1.00500f; + changed = 1; + } + } + } + + pos.x = entry->xoffset * 21.3f; + pos.y = entry->yoffset * 21.3f; + pos.z = entry->zoffset * 21.3f; + + xscale = entry->xsize; + yscale = entry->ysize; + zscale = entry->zsize; + + matrix_4x4_set_identity_and_position(&pos, &mtx); + + matrix_column_1_scalar_multiply(xscale, (f32 *)(&mtx)); + matrix_column_2_scalar_multiply(yscale, (f32 *)(&mtx)); + matrix_column_3_scalar_multiply_2(zscale, (f32 *)(&mtx)); + + matrix_4x4_multiply_homogeneous((Mtxf *)hatmodel->render_pos, &mtx, &tmp); + matrix_4x4_copy(&tmp, (Mtxf *)hatmodel->render_pos); + + if (hat == HATTYPE_PEAKED) + { + headVisible = 0; + } + } + + if ((!(chr->hidden & CHRHIDDEN_DROP_HELD_ITEMS)) || (!(hatobj->runtime_bitflags & RUNTIMEBITFLAG_00000080))) + { + chr->field_20 = sub_GAME_7F06B120(chr->field_20, hatmodel); + } + } + + if (model->obj->Switches[4] != NULL) + { + union ModelRwData *rwdata; + ModelFileHeader *headfile; + + rwdata = modelGetNodeRwData(model, model->obj->Switches[4]); + headfile = rwdata->HeadPlaceholder.ModelFileHeader; + + if ((headfile != NULL) && (headfile->Switches[1] != NULL)) + { + modelGetNodeRwData(model, headfile->Switches[1])->Switch.visible = headVisible; + } + } + + sub_GAME_7F06B29C(chr->field_20); + chr->field_20 = sub_GAME_7F06BB28(chr->field_20); + } + else + { + if (chr->weapons_held[GUNRIGHT] != NULL) + { + chr->weapons_held[GUNRIGHT]->flags &= ~PROPFLAG_ONSCREEN; + } + + if (chr->weapons_held[GUNLEFT] != NULL) + { + chr->weapons_held[GUNLEFT]->flags &= ~PROPFLAG_ONSCREEN; + } + + if (chr->handle_positiondata_hat != NULL) + { + chr->handle_positiondata_hat->flags &= ~PROPFLAG_ONSCREEN; + } + + prop->flags &= ~PROPFLAG_ONSCREEN; + + chr->shadecol.r = chr->nextcol.r; + chr->shadecol.g = chr->nextcol.g; + chr->shadecol.b = chr->nextcol.b; + chr->shadecol.a = chr->nextcol.a; + } + + if (!(chr->chrflags & CHRFLAG_HIDDEN)) + { + if (chr->hidden & CHRHIDDEN_DROP_HELD_ITEMS) + { + PropRecord *dropprop = prop->child; + PropRecord *unusedprop; + + while (dropprop != NULL) + { + PropRecord *nextprop = dropprop->prev; + + objDrop(dropprop); + + dropprop = nextprop; + } + + chr->hidden &= ~CHRHIDDEN_DROP_HELD_ITEMS; + } + + chrlvTriggerFireWeapon(chr); + } + + return TICKOP_NONE; +} /** @@ -6863,7 +2956,7 @@ Gfx *chrRenderProp(PropRecord *prop, Gfx *gdl, s32 withalpha) held_hat_obj = prop_held_hat->obj; } - if ((sub_GAME_7F054A64(prop, &sp60) > 0) && !(chr->chrflags & CHRFLAG_CULL_USING_HITBOX)) + if ((getPropCombinedRoomsBBox2D(prop, &sp60) > 0) && !(chr->chrflags & CHRFLAG_CULL_USING_HITBOX)) { gdl = bgScissorCurrentPlayerViewF(gdl, sp60.left, sp60.top, sp60.width, sp60.height); } @@ -6959,987 +3052,559 @@ Gfx *chrRenderProp(PropRecord *prop, Gfx *gdl, s32 withalpha) } -#ifdef NONMATCHING -void sub_GAME_7F022078(void) { +/** + * Creates a smoke puff at the front of the character when the character is shot, + * and also has a ~50% chance of creating a second smoke puff just behind the character. + */ +void chrCreateHitPuffs(PropRecord *prop, s32 anim_id, coord3d *vec, coord3d *pos) +{ + s32 i; + f32 scale; + coord3d sp3c; + s32 index; + struct ChrHitReaction *entry; + index = 0; + i = 0; + + if (g_HitReactionTable[0].hitpart != -1) + { + do + { + if (anim_id == g_HitReactionTable[i].hitpart) + { + index = i; + break; + } + + i++; + } + while (g_HitReactionTable[i].hitpart != -1); + } + + entry = &g_HitReactionTable[index]; + + if (entry->backImpactPuffCount) { + // True when randomGetNext() bit 2 is 0, so roughly 50% chance. + if ((randomGetNext() & 4) == 0) + { + scale = (42.0f / sqrtf(vec->z * vec->z + (vec->x * vec->x + vec->y * vec->y))) + 1.0f; + + sp3c.x = vec->x * scale; + sp3c.y = vec->y * scale; + sp3c.z = vec->z * scale; + + mtx4TransformVecInPlace(currentPlayerGetViewToWorldMtxf(), &sp3c); + + bullet_spark_create(&sp3c, entry->backImpactPuffCount, entry->backImpactPuffSize, prop->stan->room); + } + } + + if (entry->impactPuffCount) + { + bullet_spark_create(pos, entry->impactPuffCount, entry->impactPuffSize, prop->stan->room); + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F022078 -/* 056BA8 7F022078 3C0B8003 */ lui $t3, %hi(D_8002C914) -/* 056BAC 7F02207C 256BC914 */ addiu $t3, %lo(D_8002C914) # addiu $t3, $t3, -0x36ec -/* 056BB0 7F022080 8D6E0000 */ lw $t6, ($t3) -/* 056BB4 7F022084 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 056BB8 7F022088 2409FFFF */ li $t1, -1 -/* 056BBC 7F02208C AFBF001C */ sw $ra, 0x1c($sp) -/* 056BC0 7F022090 AFB00018 */ sw $s0, 0x18($sp) -/* 056BC4 7F022094 AFA40050 */ sw $a0, 0x50($sp) -/* 056BC8 7F022098 AFA7005C */ sw $a3, 0x5c($sp) -/* 056BCC 7F02209C 00005025 */ move $t2, $zero -/* 056BD0 7F0220A0 112E000D */ beq $t1, $t6, .L7F0220D8 -/* 056BD4 7F0220A4 00004025 */ move $t0, $zero -/* 056BD8 7F0220A8 3C0F8003 */ lui $t7, %hi(D_8002C914) -/* 056BDC 7F0220AC 25E2C914 */ addiu $v0, $t7, %lo(D_8002C914) -/* 056BE0 7F0220B0 8C430000 */ lw $v1, ($v0) -.L7F0220B4: -/* 056BE4 7F0220B4 54A30004 */ bnel $a1, $v1, .L7F0220C8 -/* 056BE8 7F0220B8 8C43002C */ lw $v1, 0x2c($v0) -/* 056BEC 7F0220BC 10000006 */ b .L7F0220D8 -/* 056BF0 7F0220C0 01005025 */ move $t2, $t0 -/* 056BF4 7F0220C4 8C43002C */ lw $v1, 0x2c($v0) -.L7F0220C8: -/* 056BF8 7F0220C8 25080001 */ addiu $t0, $t0, 1 -/* 056BFC 7F0220CC 2442002C */ addiu $v0, $v0, 0x2c -/* 056C00 7F0220D0 1523FFF8 */ bne $t1, $v1, .L7F0220B4 -/* 056C04 7F0220D4 00000000 */ nop -.L7F0220D8: -/* 056C08 7F0220D8 000AC080 */ sll $t8, $t2, 2 -/* 056C0C 7F0220DC 030AC023 */ subu $t8, $t8, $t2 -/* 056C10 7F0220E0 0018C080 */ sll $t8, $t8, 2 -/* 056C14 7F0220E4 030AC023 */ subu $t8, $t8, $t2 -/* 056C18 7F0220E8 0018C080 */ sll $t8, $t8, 2 -/* 056C1C 7F0220EC 01788021 */ addu $s0, $t3, $t8 -/* 056C20 7F0220F0 8E190010 */ lw $t9, 0x10($s0) -/* 056C24 7F0220F4 5320002C */ beql $t9, $zero, .L7F0221A8 -/* 056C28 7F0220F8 8E050004 */ lw $a1, 4($s0) -/* 056C2C 7F0220FC 0C002914 */ jal randomGetNext -/* 056C30 7F022100 AFA60058 */ sw $a2, 0x58($sp) -/* 056C34 7F022104 304C0004 */ andi $t4, $v0, 4 -/* 056C38 7F022108 15800026 */ bnez $t4, .L7F0221A4 -/* 056C3C 7F02210C 8FA60058 */ lw $a2, 0x58($sp) -/* 056C40 7F022110 C4C20000 */ lwc1 $f2, ($a2) -/* 056C44 7F022114 C4CE0004 */ lwc1 $f14, 4($a2) -/* 056C48 7F022118 C4C00008 */ lwc1 $f0, 8($a2) -/* 056C4C 7F02211C 46021102 */ mul.s $f4, $f2, $f2 -/* 056C50 7F022120 AFA60058 */ sw $a2, 0x58($sp) -/* 056C54 7F022124 460E7182 */ mul.s $f6, $f14, $f14 -/* 056C58 7F022128 46062200 */ add.s $f8, $f4, $f6 -/* 056C5C 7F02212C 46000282 */ mul.s $f10, $f0, $f0 -/* 056C60 7F022130 0C007DF8 */ jal sqrtf -/* 056C64 7F022134 46085300 */ add.s $f12, $f10, $f8 -/* 056C68 7F022138 3C014228 */ li $at, 0x42280000 # 42.000000 -/* 056C6C 7F02213C 44818000 */ mtc1 $at, $f16 -/* 056C70 7F022140 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 056C74 7F022144 44812000 */ mtc1 $at, $f4 -/* 056C78 7F022148 46008483 */ div.s $f18, $f16, $f0 -/* 056C7C 7F02214C 8FA60058 */ lw $a2, 0x58($sp) -/* 056C80 7F022150 C4C60000 */ lwc1 $f6, ($a2) -/* 056C84 7F022154 46049080 */ add.s $f2, $f18, $f4 -/* 056C88 7F022158 46023282 */ mul.s $f10, $f6, $f2 -/* 056C8C 7F02215C E7AA003C */ swc1 $f10, 0x3c($sp) -/* 056C90 7F022160 C4C80004 */ lwc1 $f8, 4($a2) -/* 056C94 7F022164 46024402 */ mul.s $f16, $f8, $f2 -/* 056C98 7F022168 E7B00040 */ swc1 $f16, 0x40($sp) -/* 056C9C 7F02216C C4D20008 */ lwc1 $f18, 8($a2) -/* 056CA0 7F022170 46029102 */ mul.s $f4, $f18, $f2 -/* 056CA4 7F022174 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 056CA8 7F022178 E7A40044 */ swc1 $f4, 0x44($sp) -/* 056CAC 7F02217C 00402025 */ move $a0, $v0 -/* 056CB0 7F022180 0FC1611D */ jal mtx4TransformVecInPlace -/* 056CB4 7F022184 27A5003C */ addiu $a1, $sp, 0x3c -/* 056CB8 7F022188 8FAD0050 */ lw $t5, 0x50($sp) -/* 056CBC 7F02218C 27A4003C */ addiu $a0, $sp, 0x3c -/* 056CC0 7F022190 8E050010 */ lw $a1, 0x10($s0) -/* 056CC4 7F022194 8DAE0014 */ lw $t6, 0x14($t5) -/* 056CC8 7F022198 8E060018 */ lw $a2, 0x18($s0) -/* 056CCC 7F02219C 0FC28F87 */ jal sub_GAME_7F0A3E1C -/* 056CD0 7F0221A0 91C70003 */ lbu $a3, 3($t6) -.L7F0221A4: -/* 056CD4 7F0221A4 8E050004 */ lw $a1, 4($s0) -.L7F0221A8: -/* 056CD8 7F0221A8 8FAF0050 */ lw $t7, 0x50($sp) -/* 056CDC 7F0221AC 50A00007 */ beql $a1, $zero, .L7F0221CC -/* 056CE0 7F0221B0 8FBF001C */ lw $ra, 0x1c($sp) -/* 056CE4 7F0221B4 8DF80014 */ lw $t8, 0x14($t7) -/* 056CE8 7F0221B8 8FA4005C */ lw $a0, 0x5c($sp) -/* 056CEC 7F0221BC 8E06000C */ lw $a2, 0xc($s0) -/* 056CF0 7F0221C0 0FC28F87 */ jal sub_GAME_7F0A3E1C -/* 056CF4 7F0221C4 93070003 */ lbu $a3, 3($t8) -/* 056CF8 7F0221C8 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0221CC: -/* 056CFC 7F0221CC 8FB00018 */ lw $s0, 0x18($sp) -/* 056D00 7F0221D0 27BD0050 */ addiu $sp, $sp, 0x50 -/* 056D04 7F0221D4 03E00008 */ jr $ra -/* 056D08 7F0221D8 00000000 */ nop -) -#endif +void chrCreateBloodStain(Model *model, s32 arg1, ModelNode *root, struct coord3d *pos) +{ + s32 sp_pos[3]; + s32 unused_stack_pad[1]; + s32 bestdist; + ModelNode *bestnode; + s32 bestindex; + ModelNode *node; + s32 opcode; + ModelRoData_DisplayList_CollisionRecord *rodata; + ModelRoData_DisplayList_CollisionRecord *relatedrodata; + ModelRwData_DisplayList_CollisionRecord *relatedrwdata; + ModelNode *relatednode; + ModelNode *rwdata; + Vertex *vtx; + Vertex *newvertices; + s32 i; + s32 n; + s32 paintval; + s32 relatedindex; -#ifdef NONMATCHING -void sub_GAME_7F0221DC(void) { + sp_pos[0] = pos->x; + sp_pos[1] = pos->y; + sp_pos[2] = pos->z; + bestnode = NULL; + bestindex = 0; + bestdist = 0x7fffffff; + node = root; + + while (node != NULL) + { + opcode = node->Opcode & 0xff; + + if (opcode == MODELNODE_OPCODE_LOD) + { + goto apply_distance; + } + + if (opcode == MODELNODE_OPCODE_SWITCH) + { + goto apply_toggle; + } + + if (opcode == MODELNODE_OPCODE_HEAD) + { + goto apply_head; + } + + if (opcode != MODELNODE_OPCODE_DLCOLLISION) + { + goto after_opcode; + } + + rodata = &node->Data->DisplayListCollisions; + n = 0; + + if (rodata->numCollisionVertices > 0) + { + vtx = rodata->CollisionVertices; + + do + { + s32 dx; + s32 dy; + s32 dz; + s32 dist; + + dx = sp_pos[0] - vtx->coord.x; + dy = sp_pos[1] - vtx->coord.y; + dz = sp_pos[2] - vtx->coord.z; + dist = ((((u32) dx) * ((u32) dx)) + (((u32) dy) * ((u32) dy))) + (((u32) dz) * ((u32) dz)); + + if (dist < bestdist) + { + bestdist = dist; + bestnode = node; + bestindex = n; + } + + n++; + vtx++; + } + while (n < rodata->numCollisionVertices); + } + + goto after_opcode; + +apply_distance: + modelApplyDistanceRelations(model, node); + goto after_opcode; + +apply_toggle: + modelApplyToggleRelations(model, node); + goto after_opcode; + +apply_head: + modelApplyHeadRelations(model, node); + +after_opcode: + if ((node->Child != NULL) && ((node == root) || ((opcode != MODELNODE_OPCODE_BBOX) && (opcode != MODELNODE_OPCODE_OP17)))) + { + node = node->Child; + } + else + { + while (node != NULL) + { + if (node == root) + { + node = NULL; + break; + } + + if (node->Next != NULL) + { + node = node->Next; + break; + } + + node = node->Parent; + } + } + } + + if (bestnode == NULL) + { + return; + } + + node = (ModelNode *) bestnode->Data; + rwdata = (ModelNode *) modelGetNodeRwData(model, bestnode); + relatedrodata = NULL; + relatedrwdata = NULL; + relatedindex = 0; + paintval = (randomGetNext() % 50) + 20; + + if (arg1 == 8) + { + paintval += 100; + } + + if (arg1 == 0x0f) + { + paintval += 50; + } + + relatednode = (ModelNode *) ((ModelRoData_DisplayList_CollisionRecord *) node)->CollisionVertices[bestindex].CollisionRelatedNode; + + if (((ModelRoData_DisplayList_CollisionRecord *) node)->CollisionVertices[bestindex].CollisionRelatedNode != NULL) + { + relatedrodata = &relatednode->Data->DisplayListCollisions; + relatedrwdata = (ModelRwData_DisplayList_CollisionRecord *) modelGetNodeRwData(model, relatednode); + relatedindex = ((ModelRoData_DisplayList_CollisionRecord *) node)->CollisionVertices[bestindex].CollisionRelatedIndex; + } + + if (((ModelRwData_DisplayList_CollisionRecord *) rwdata)->Vertices == ((ModelRoData_DisplayList_CollisionRecord *) node)->Vertices) + { + newvertices = (Vertex *) vtxstore_allocate(((ModelRoData_DisplayList_CollisionRecord *) node)->numVertices, 0xcccc, 0, 0); + + if (newvertices != NULL) + { + s32 j; + + ((ModelRwData_DisplayList_CollisionRecord *) rwdata)->Vertices = newvertices; + + for (j = 0; j < ((ModelRoData_DisplayList_CollisionRecord *) node)->numVertices; j++) + { + newvertices[j] = ((ModelRoData_DisplayList_CollisionRecord *) node)->Vertices[j]; + } + } + } + + if ((relatedrwdata != NULL) && (relatedrwdata->Vertices == relatedrodata->Vertices)) + { + newvertices = (Vertex *) vtxstore_allocate(relatedrodata->numVertices, 0xcccc, 0, 0); + + if (newvertices != NULL) + { + s32 j; + + relatedrwdata->Vertices = newvertices; + + for (j = 0; j < relatedrodata->numVertices; j++) + { + newvertices[j] = relatedrodata->Vertices[j]; + } + } + } + + if (((ModelRwData_DisplayList_CollisionRecord *) rwdata)->Vertices != ((ModelRoData_DisplayList_CollisionRecord *) node)->Vertices) + { + s32 index; + + index = ((ModelRoData_DisplayList_CollisionRecord *) node)->CollisionVertices[bestindex].index; + + while (index >= 0) + { + ((ModelRwData_DisplayList_CollisionRecord *) rwdata)->Vertices[index].a = paintval; + index = ((ModelRoData_DisplayList_CollisionRecord *) node)->PointUsage[index]; + } + } + + if ((relatedrwdata != NULL) && (relatedrwdata->Vertices != relatedrodata->Vertices)) + { + s32 index; + + index = relatedrodata->CollisionVertices[relatedindex].index; + + while (index >= 0) + { + relatedrwdata->Vertices[index].a = paintval; + index = relatedrodata->PointUsage[index]; + } + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0221DC -/* 056D0C 7F0221DC 27BDFF50 */ addiu $sp, $sp, -0xb0 -/* 056D10 7F0221E0 AFBF0034 */ sw $ra, 0x34($sp) -/* 056D14 7F0221E4 AFB60030 */ sw $s6, 0x30($sp) -/* 056D18 7F0221E8 AFB5002C */ sw $s5, 0x2c($sp) -/* 056D1C 7F0221EC AFB40028 */ sw $s4, 0x28($sp) -/* 056D20 7F0221F0 AFB30024 */ sw $s3, 0x24($sp) -/* 056D24 7F0221F4 AFB20020 */ sw $s2, 0x20($sp) -/* 056D28 7F0221F8 AFB1001C */ sw $s1, 0x1c($sp) -/* 056D2C 7F0221FC AFB00018 */ sw $s0, 0x18($sp) -/* 056D30 7F022200 AFA500B4 */ sw $a1, 0xb4($sp) -/* 056D34 7F022204 C4E40000 */ lwc1 $f4, ($a3) -/* 056D38 7F022208 3C117FFF */ lui $s1, (0x7FFFFFFF >> 16) # lui $s1, 0x7fff -/* 056D3C 7F02220C 00C09025 */ move $s2, $a2 -/* 056D40 7F022210 4600218D */ trunc.w.s $f6, $f4 -/* 056D44 7F022214 0080B025 */ move $s6, $a0 -/* 056D48 7F022218 0000A025 */ move $s4, $zero -/* 056D4C 7F02221C 0000A825 */ move $s5, $zero -/* 056D50 7F022220 440F3000 */ mfc1 $t7, $f6 -/* 056D54 7F022224 3631FFFF */ ori $s1, (0x7FFFFFFF & 0xFFFF) # ori $s1, $s1, 0xffff -/* 056D58 7F022228 00C08025 */ move $s0, $a2 -/* 056D5C 7F02222C AFAF00A4 */ sw $t7, 0xa4($sp) -/* 056D60 7F022230 C4E80004 */ lwc1 $f8, 4($a3) -/* 056D64 7F022234 4600428D */ trunc.w.s $f10, $f8 -/* 056D68 7F022238 44195000 */ mfc1 $t9, $f10 -/* 056D6C 7F02223C 00000000 */ nop -/* 056D70 7F022240 AFB900A8 */ sw $t9, 0xa8($sp) -/* 056D74 7F022244 C4F00008 */ lwc1 $f16, 8($a3) -/* 056D78 7F022248 4600848D */ trunc.w.s $f18, $f16 -/* 056D7C 7F02224C 440B9000 */ mfc1 $t3, $f18 -/* 056D80 7F022250 10C0005B */ beqz $a2, .L7F0223C0 -/* 056D84 7F022254 AFAB00AC */ sw $t3, 0xac($sp) -/* 056D88 7F022258 96130000 */ lhu $s3, ($s0) -.L7F02225C: -/* 056D8C 7F02225C 24010008 */ li $at, 8 -/* 056D90 7F022260 02C02025 */ move $a0, $s6 -/* 056D94 7F022264 326C00FF */ andi $t4, $s3, 0xff -/* 056D98 7F022268 11810030 */ beq $t4, $at, .L7F02232C -/* 056D9C 7F02226C 01809825 */ move $s3, $t4 -/* 056DA0 7F022270 24010012 */ li $at, 18 -/* 056DA4 7F022274 11810031 */ beq $t4, $at, .L7F02233C -/* 056DA8 7F022278 02C02025 */ move $a0, $s6 -/* 056DAC 7F02227C 24010017 */ li $at, 23 -/* 056DB0 7F022280 11810032 */ beq $t4, $at, .L7F02234C -/* 056DB4 7F022284 02C02025 */ move $a0, $s6 -/* 056DB8 7F022288 24010018 */ li $at, 24 -/* 056DBC 7F02228C 15810032 */ bne $t4, $at, .L7F022358 -/* 056DC0 7F022290 8E090014 */ lw $t1, 0x14($s0) -/* 056DC4 7F022294 8E020004 */ lw $v0, 4($s0) -/* 056DC8 7F022298 00003025 */ move $a2, $zero -/* 056DCC 7F02229C 8448000E */ lh $t0, 0xe($v0) -/* 056DD0 7F0222A0 1900002D */ blez $t0, .L7F022358 -/* 056DD4 7F0222A4 00000000 */ nop -/* 056DD8 7F0222A8 8C450010 */ lw $a1, 0x10($v0) -.L7F0222AC: -/* 056DDC 7F0222AC 8FAD00A4 */ lw $t5, 0xa4($sp) -/* 056DE0 7F0222B0 84AE0000 */ lh $t6, ($a1) -/* 056DE4 7F0222B4 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 056DE8 7F0222B8 84B80002 */ lh $t8, 2($a1) -/* 056DEC 7F0222BC 01AE1023 */ subu $v0, $t5, $t6 -/* 056DF0 7F0222C0 00420019 */ multu $v0, $v0 -/* 056DF4 7F0222C4 01F81823 */ subu $v1, $t7, $t8 -/* 056DF8 7F0222C8 8FB900AC */ lw $t9, 0xac($sp) -/* 056DFC 7F0222CC 84AA0004 */ lh $t2, 4($a1) -/* 056E00 7F0222D0 032A2023 */ subu $a0, $t9, $t2 -/* 056E04 7F0222D4 00005812 */ mflo $t3 -/* 056E08 7F0222D8 00000000 */ nop -/* 056E0C 7F0222DC 00000000 */ nop -/* 056E10 7F0222E0 00630019 */ multu $v1, $v1 -/* 056E14 7F0222E4 00006012 */ mflo $t4 -/* 056E18 7F0222E8 016C6821 */ addu $t5, $t3, $t4 -/* 056E1C 7F0222EC 00000000 */ nop -/* 056E20 7F0222F0 00840019 */ multu $a0, $a0 -/* 056E24 7F0222F4 00007012 */ mflo $t6 -/* 056E28 7F0222F8 01AE3821 */ addu $a3, $t5, $t6 -/* 056E2C 7F0222FC 00F1082A */ slt $at, $a3, $s1 -/* 056E30 7F022300 50200005 */ beql $at, $zero, .L7F022318 -/* 056E34 7F022304 24C60001 */ addiu $a2, $a2, 1 -/* 056E38 7F022308 00E08825 */ move $s1, $a3 -/* 056E3C 7F02230C 0200A025 */ move $s4, $s0 -/* 056E40 7F022310 00C0A825 */ move $s5, $a2 -/* 056E44 7F022314 24C60001 */ addiu $a2, $a2, 1 -.L7F022318: -/* 056E48 7F022318 00C8082A */ slt $at, $a2, $t0 -/* 056E4C 7F02231C 1420FFE3 */ bnez $at, .L7F0222AC -/* 056E50 7F022320 24A50010 */ addiu $a1, $a1, 0x10 -/* 056E54 7F022324 1000000C */ b .L7F022358 -/* 056E58 7F022328 00000000 */ nop -.L7F02232C: -/* 056E5C 7F02232C 0FC1BA5C */ jal modelApplyDistanceRelations -/* 056E60 7F022330 02002825 */ move $a1, $s0 -/* 056E64 7F022334 10000008 */ b .L7F022358 -/* 056E68 7F022338 8E090014 */ lw $t1, 0x14($s0) -.L7F02233C: -/* 056E6C 7F02233C 0FC1BA6F */ jal modelApplyToggleRelations -/* 056E70 7F022340 02002825 */ move $a1, $s0 -/* 056E74 7F022344 10000004 */ b .L7F022358 -/* 056E78 7F022348 8E090014 */ lw $t1, 0x14($s0) -.L7F02234C: -/* 056E7C 7F02234C 0FC1BA82 */ jal modelApplyHeadRelations -/* 056E80 7F022350 02002825 */ move $a1, $s0 -/* 056E84 7F022354 8E090014 */ lw $t1, 0x14($s0) -.L7F022358: -/* 056E88 7F022358 11200009 */ beqz $t1, .L7F022380 -/* 056E8C 7F02235C 00000000 */ nop -/* 056E90 7F022360 12120005 */ beq $s0, $s2, .L7F022378 -/* 056E94 7F022364 2401000A */ li $at, 10 -/* 056E98 7F022368 12610005 */ beq $s3, $at, .L7F022380 -/* 056E9C 7F02236C 24010011 */ li $at, 17 -/* 056EA0 7F022370 12610003 */ beq $s3, $at, .L7F022380 -/* 056EA4 7F022374 00000000 */ nop -.L7F022378: -/* 056EA8 7F022378 1000000F */ b .L7F0223B8 -/* 056EAC 7F02237C 01208025 */ move $s0, $t1 -.L7F022380: -/* 056EB0 7F022380 1200000D */ beqz $s0, .L7F0223B8 -/* 056EB4 7F022384 00000000 */ nop -.L7F022388: -/* 056EB8 7F022388 56120004 */ bnel $s0, $s2, .L7F02239C -/* 056EBC 7F02238C 8E02000C */ lw $v0, 0xc($s0) -/* 056EC0 7F022390 10000009 */ b .L7F0223B8 -/* 056EC4 7F022394 00008025 */ move $s0, $zero -/* 056EC8 7F022398 8E02000C */ lw $v0, 0xc($s0) -.L7F02239C: -/* 056ECC 7F02239C 50400004 */ beql $v0, $zero, .L7F0223B0 -/* 056ED0 7F0223A0 8E100008 */ lw $s0, 8($s0) -/* 056ED4 7F0223A4 10000004 */ b .L7F0223B8 -/* 056ED8 7F0223A8 00408025 */ move $s0, $v0 -/* 056EDC 7F0223AC 8E100008 */ lw $s0, 8($s0) -.L7F0223B0: -/* 056EE0 7F0223B0 1600FFF5 */ bnez $s0, .L7F022388 -/* 056EE4 7F0223B4 00000000 */ nop -.L7F0223B8: -/* 056EE8 7F0223B8 5600FFA8 */ bnezl $s0, .L7F02225C -/* 056EEC 7F0223BC 96130000 */ lhu $s3, ($s0) -.L7F0223C0: -/* 056EF0 7F0223C0 12800097 */ beqz $s4, .L7F022620 -/* 056EF4 7F0223C4 02C02025 */ move $a0, $s6 -/* 056EF8 7F0223C8 8E900004 */ lw $s0, 4($s4) -/* 056EFC 7F0223CC 0FC1B1E7 */ jal modelGetNodeRwData -/* 056F00 7F0223D0 02802825 */ move $a1, $s4 -/* 056F04 7F0223D4 0040A025 */ move $s4, $v0 -/* 056F08 7F0223D8 00008825 */ move $s1, $zero -/* 056F0C 7F0223DC 00009825 */ move $s3, $zero -/* 056F10 7F0223E0 0C002914 */ jal randomGetNext -/* 056F14 7F0223E4 AFA00060 */ sw $zero, 0x60($sp) -/* 056F18 7F0223E8 24010032 */ li $at, 50 -/* 056F1C 7F0223EC 0041001B */ divu $zero, $v0, $at -/* 056F20 7F0223F0 8FAF00B4 */ lw $t7, 0xb4($sp) -/* 056F24 7F0223F4 00001810 */ mfhi $v1 -/* 056F28 7F0223F8 24630014 */ addiu $v1, $v1, 0x14 -/* 056F2C 7F0223FC 24010008 */ li $at, 8 -/* 056F30 7F022400 15E10002 */ bne $t7, $at, .L7F02240C -/* 056F34 7F022404 00609025 */ move $s2, $v1 -/* 056F38 7F022408 24720064 */ addiu $s2, $v1, 0x64 -.L7F02240C: -/* 056F3C 7F02240C 8FB800B4 */ lw $t8, 0xb4($sp) -/* 056F40 7F022410 2401000F */ li $at, 15 -/* 056F44 7F022414 02C02025 */ move $a0, $s6 -/* 056F48 7F022418 57010003 */ bnel $t8, $at, .L7F022428 -/* 056F4C 7F02241C 8E190010 */ lw $t9, 0x10($s0) -/* 056F50 7F022420 26520032 */ addiu $s2, $s2, 0x32 -/* 056F54 7F022424 8E190010 */ lw $t9, 0x10($s0) -.L7F022428: -/* 056F58 7F022428 00154100 */ sll $t0, $s5, 4 -/* 056F5C 7F02242C 03285021 */ addu $t2, $t9, $t0 -/* 056F60 7F022430 8D420008 */ lw $v0, 8($t2) -/* 056F64 7F022434 1040000A */ beqz $v0, .L7F022460 -/* 056F68 7F022438 00402825 */ move $a1, $v0 -/* 056F6C 7F02243C 8C510004 */ lw $s1, 4($v0) -/* 056F70 7F022440 0FC1B1E7 */ jal modelGetNodeRwData -/* 056F74 7F022444 AFA8003C */ sw $t0, 0x3c($sp) -/* 056F78 7F022448 8FA8003C */ lw $t0, 0x3c($sp) -/* 056F7C 7F02244C 8E0B0010 */ lw $t3, 0x10($s0) -/* 056F80 7F022450 00409825 */ move $s3, $v0 -/* 056F84 7F022454 01686021 */ addu $t4, $t3, $t0 -/* 056F88 7F022458 858D000C */ lh $t5, 0xc($t4) -/* 056F8C 7F02245C AFAD0060 */ sw $t5, 0x60($sp) -.L7F022460: -/* 056F90 7F022460 8E0E0008 */ lw $t6, 8($s0) -/* 056F94 7F022464 8E8F0000 */ lw $t7, ($s4) -/* 056F98 7F022468 3405CCCC */ li $a1, 52428 -/* 056F9C 7F02246C 00003025 */ move $a2, $zero -/* 056FA0 7F022470 15CF001D */ bne $t6, $t7, .L7F0224E8 -/* 056FA4 7F022474 00003825 */ move $a3, $zero -/* 056FA8 7F022478 8604000C */ lh $a0, 0xc($s0) -/* 056FAC 7F02247C 0FC26F93 */ jal sub_GAME_7F09BE4C -/* 056FB0 7F022480 AFA8003C */ sw $t0, 0x3c($sp) -/* 056FB4 7F022484 10400018 */ beqz $v0, .L7F0224E8 -/* 056FB8 7F022488 8FA8003C */ lw $t0, 0x3c($sp) -/* 056FBC 7F02248C AE820000 */ sw $v0, ($s4) -/* 056FC0 7F022490 8618000C */ lh $t8, 0xc($s0) -/* 056FC4 7F022494 00001825 */ move $v1, $zero -/* 056FC8 7F022498 00002025 */ move $a0, $zero -/* 056FCC 7F02249C 1B000012 */ blez $t8, .L7F0224E8 -/* 056FD0 7F0224A0 00402825 */ move $a1, $v0 -/* 056FD4 7F0224A4 8E190008 */ lw $t9, 8($s0) -.L7F0224A8: -/* 056FD8 7F0224A8 24630001 */ addiu $v1, $v1, 1 -/* 056FDC 7F0224AC 24A50010 */ addiu $a1, $a1, 0x10 -/* 056FE0 7F0224B0 03245021 */ addu $t2, $t9, $a0 -/* 056FE4 7F0224B4 8D410000 */ lw $at, ($t2) -/* 056FE8 7F0224B8 24840010 */ addiu $a0, $a0, 0x10 -/* 056FEC 7F0224BC ACA1FFF0 */ sw $at, -0x10($a1) -/* 056FF0 7F0224C0 8D4C0004 */ lw $t4, 4($t2) -/* 056FF4 7F0224C4 ACACFFF4 */ sw $t4, -0xc($a1) -/* 056FF8 7F0224C8 8D410008 */ lw $at, 8($t2) -/* 056FFC 7F0224CC ACA1FFF8 */ sw $at, -8($a1) -/* 057000 7F0224D0 8D4C000C */ lw $t4, 0xc($t2) -/* 057004 7F0224D4 ACACFFFC */ sw $t4, -4($a1) -/* 057008 7F0224D8 860D000C */ lh $t5, 0xc($s0) -/* 05700C 7F0224DC 006D082A */ slt $at, $v1, $t5 -/* 057010 7F0224E0 5420FFF1 */ bnezl $at, .L7F0224A8 -/* 057014 7F0224E4 8E190008 */ lw $t9, 8($s0) -.L7F0224E8: -/* 057018 7F0224E8 52600024 */ beql $s3, $zero, .L7F02257C -/* 05701C 7F0224EC 8E0E0008 */ lw $t6, 8($s0) -/* 057020 7F0224F0 8E2E0008 */ lw $t6, 8($s1) -/* 057024 7F0224F4 8E6F0000 */ lw $t7, ($s3) -/* 057028 7F0224F8 3405CCCC */ li $a1, 52428 -/* 05702C 7F0224FC 00003025 */ move $a2, $zero -/* 057030 7F022500 15CF001D */ bne $t6, $t7, .L7F022578 -/* 057034 7F022504 00003825 */ move $a3, $zero -/* 057038 7F022508 8624000C */ lh $a0, 0xc($s1) -/* 05703C 7F02250C 0FC26F93 */ jal sub_GAME_7F09BE4C -/* 057040 7F022510 AFA8003C */ sw $t0, 0x3c($sp) -/* 057044 7F022514 10400018 */ beqz $v0, .L7F022578 -/* 057048 7F022518 8FA8003C */ lw $t0, 0x3c($sp) -/* 05704C 7F02251C AE620000 */ sw $v0, ($s3) -/* 057050 7F022520 8638000C */ lh $t8, 0xc($s1) -/* 057054 7F022524 00001825 */ move $v1, $zero -/* 057058 7F022528 00002025 */ move $a0, $zero -/* 05705C 7F02252C 1B000012 */ blez $t8, .L7F022578 -/* 057060 7F022530 00402825 */ move $a1, $v0 -/* 057064 7F022534 8E390008 */ lw $t9, 8($s1) -.L7F022538: -/* 057068 7F022538 24630001 */ addiu $v1, $v1, 1 -/* 05706C 7F02253C 24A50010 */ addiu $a1, $a1, 0x10 -/* 057070 7F022540 03245821 */ addu $t3, $t9, $a0 -/* 057074 7F022544 8D610000 */ lw $at, ($t3) -/* 057078 7F022548 24840010 */ addiu $a0, $a0, 0x10 -/* 05707C 7F02254C ACA1FFF0 */ sw $at, -0x10($a1) -/* 057080 7F022550 8D6C0004 */ lw $t4, 4($t3) -/* 057084 7F022554 ACACFFF4 */ sw $t4, -0xc($a1) -/* 057088 7F022558 8D610008 */ lw $at, 8($t3) -/* 05708C 7F02255C ACA1FFF8 */ sw $at, -8($a1) -/* 057090 7F022560 8D6C000C */ lw $t4, 0xc($t3) -/* 057094 7F022564 ACACFFFC */ sw $t4, -4($a1) -/* 057098 7F022568 862D000C */ lh $t5, 0xc($s1) -/* 05709C 7F02256C 006D082A */ slt $at, $v1, $t5 -/* 0570A0 7F022570 5420FFF1 */ bnezl $at, .L7F022538 -/* 0570A4 7F022574 8E390008 */ lw $t9, 8($s1) -.L7F022578: -/* 0570A8 7F022578 8E0E0008 */ lw $t6, 8($s0) -.L7F02257C: -/* 0570AC 7F02257C 8E8F0000 */ lw $t7, ($s4) -/* 0570B0 7F022580 11CF0010 */ beq $t6, $t7, .L7F0225C4 -/* 0570B4 7F022584 00000000 */ nop -/* 0570B8 7F022588 8E180010 */ lw $t8, 0x10($s0) -/* 0570BC 7F02258C 0308C821 */ addu $t9, $t8, $t0 -/* 0570C0 7F022590 87220006 */ lh $v0, 6($t9) -/* 0570C4 7F022594 0440000B */ bltz $v0, .L7F0225C4 -/* 0570C8 7F022598 00000000 */ nop -/* 0570CC 7F02259C 8E8A0000 */ lw $t2, ($s4) -.L7F0225A0: -/* 0570D0 7F0225A0 00025900 */ sll $t3, $v0, 4 -/* 0570D4 7F0225A4 00027040 */ sll $t6, $v0, 1 -/* 0570D8 7F0225A8 014B6021 */ addu $t4, $t2, $t3 -/* 0570DC 7F0225AC A192000F */ sb $s2, 0xf($t4) -/* 0570E0 7F0225B0 8E0D0014 */ lw $t5, 0x14($s0) -/* 0570E4 7F0225B4 01AE7821 */ addu $t7, $t5, $t6 -/* 0570E8 7F0225B8 85E20000 */ lh $v0, ($t7) -/* 0570EC 7F0225BC 0443FFF8 */ bgezl $v0, .L7F0225A0 -/* 0570F0 7F0225C0 8E8A0000 */ lw $t2, ($s4) -.L7F0225C4: -/* 0570F4 7F0225C4 52600017 */ beql $s3, $zero, .L7F022624 -/* 0570F8 7F0225C8 8FBF0034 */ lw $ra, 0x34($sp) -/* 0570FC 7F0225CC 8E380008 */ lw $t8, 8($s1) -/* 057100 7F0225D0 8E790000 */ lw $t9, ($s3) -/* 057104 7F0225D4 8FAB0060 */ lw $t3, 0x60($sp) -/* 057108 7F0225D8 53190012 */ beql $t8, $t9, .L7F022624 -/* 05710C 7F0225DC 8FBF0034 */ lw $ra, 0x34($sp) -/* 057110 7F0225E0 8E2A0010 */ lw $t2, 0x10($s1) -/* 057114 7F0225E4 000B6100 */ sll $t4, $t3, 4 -/* 057118 7F0225E8 014C6821 */ addu $t5, $t2, $t4 -/* 05711C 7F0225EC 85A20006 */ lh $v0, 6($t5) -/* 057120 7F0225F0 0442000C */ bltzl $v0, .L7F022624 -/* 057124 7F0225F4 8FBF0034 */ lw $ra, 0x34($sp) -/* 057128 7F0225F8 8E6E0000 */ lw $t6, ($s3) -.L7F0225FC: -/* 05712C 7F0225FC 00027900 */ sll $t7, $v0, 4 -/* 057130 7F022600 00025840 */ sll $t3, $v0, 1 -/* 057134 7F022604 01CFC021 */ addu $t8, $t6, $t7 -/* 057138 7F022608 A312000F */ sb $s2, 0xf($t8) -/* 05713C 7F02260C 8E390014 */ lw $t9, 0x14($s1) -/* 057140 7F022610 032B5021 */ addu $t2, $t9, $t3 -/* 057144 7F022614 85420000 */ lh $v0, ($t2) -/* 057148 7F022618 0443FFF8 */ bgezl $v0, .L7F0225FC -/* 05714C 7F02261C 8E6E0000 */ lw $t6, ($s3) -.L7F022620: -/* 057150 7F022620 8FBF0034 */ lw $ra, 0x34($sp) -.L7F022624: -/* 057154 7F022624 8FB00018 */ lw $s0, 0x18($sp) -/* 057158 7F022628 8FB1001C */ lw $s1, 0x1c($sp) -/* 05715C 7F02262C 8FB20020 */ lw $s2, 0x20($sp) -/* 057160 7F022630 8FB30024 */ lw $s3, 0x24($sp) -/* 057164 7F022634 8FB40028 */ lw $s4, 0x28($sp) -/* 057168 7F022638 8FB5002C */ lw $s5, 0x2c($sp) -/* 05716C 7F02263C 8FB60030 */ lw $s6, 0x30($sp) -/* 057170 7F022640 03E00008 */ jr $ra -/* 057174 7F022644 27BD00B0 */ addiu $sp, $sp, 0xb0 -) -#endif -// PD: chr_test_hit -#ifdef NONMATCHING -void sub_GAME_7F022648(void) { - //somewhere - #ifdef DEBUG - assert(hits && hits->HasHits()); - #endif +/** + * + * Address: 7F022648 + * + * Tests a shot's ray against a character. + * + * First tests the shot against the chr's bounding sphere expanded by the + * largest held weapon's model size. On a bounds hit, the model hit list is + * walked for a body part. A confirmed body hit is registered via chrpropAddBulletHit; + * a near miss inside max range flags CHRFLAG_NEAR_MISS and bumps numclosearghs. + * + * PD: chr_test_hit + */ + +/** + * This assert is from the former NONMATCHING block and belongs somewhere in chrTestHit. + * + * #ifdef DEBUG + * assert(hits && hits->HasHits()); + * #endif + */ +void chrTestHit(PropRecord *prop, ShotData *shotdata) +{ + ChrRecord *chr; + Model *model; + f32 modelsize; + s32 hitpart; + Model *hitmodel; + ModelNode *hitnode; + s32 hitbounds; + struct HitThing hitthing; + s32 mtxindex; + ModelNode *dlnode; + Mtxf *submatrix; + f32 heldmodelsize; + Mtxf *nodemtx; + f32 len; + struct WeaponObjRecord *weapon; + f32 dist; + ModelHitEntry *entry; + coord3d viewdir; + f32 size; + s32 i; + coord3d diff; + f64 pad; + + chr = prop->chr; + + if (chr->actiontype == ACT_DEAD) + { + return; + } + + model = chr->model; + modelsize = getinstsize(model); + + if ((prop->flags & PROPFLAG_ONSCREEN) == FALSE) + { + return; + } + + hitpart = HIT_NULL_PART; + + if (!((prop->zDepth - modelsize) < shotdata->maxdist)) + { + return; + } + + hitmodel = NULL; + hitnode = NULL; + hitbounds = FALSE; + dlnode = NULL; + submatrix = getsubmatrix(model); + heldmodelsize = 0.0f; + + for (i = 0; i < 2; i++) + { + if (chr->weapons_held[i] != NULL) + { + weapon = chr->weapons_held[i]->weapon; + size = model->scale * getinstsize(weapon->model); + + if (heldmodelsize < size) + { + heldmodelsize = size; + } + } + } + + modelsize += heldmodelsize; + + if (projectileTestPropBoundingSphere(&shotdata->viewOrigin, &shotdata->viewDir, (coord3d *) &submatrix->m[3][0], modelsize)) + { + hitbounds = TRUE; + hitpart = HIT_LEFT_FOOT; + } + + if (hitpart != HIT_NULL_PART) + { + entry = chr->field_20; + hitpart = sub_GAME_7F06C010(&entry, &shotdata->viewOrigin, &shotdata->viewDir, &hitmodel, &hitnode); + + while ((hitpart == HIT_GUN) || (hitpart == HIT_HAT)) + { + if (propobjFindHit(hitmodel, hitnode, &shotdata->viewOrigin, &shotdata->viewDir, &hitthing, &mtxindex, &dlnode)) + { + break; + } + + // Leave if (1) for matching. + if (1) + { + hitpart = probably_damage_detail_blood_effect_related(&entry, &shotdata->viewOrigin, &shotdata->viewDir, &hitmodel, &hitnode); + } + } + } + + if (hitpart > HIT_NULL_PART) + { + viewdir.x = shotdata->viewDir.x; + viewdir.y = shotdata->viewDir.y; + viewdir.z = shotdata->viewDir.z; + + submatrix = currentPlayerGetViewToWorldMtxf(); + mtx4RotateVecInPlace(submatrix, &viewdir); + nodemtx = modelFindNodeMtx(hitmodel, hitnode, 0); + + // Leave for matching + if (&diff); + + diff.x = nodemtx->m[3][0] - shotdata->viewOrigin.x; + diff.y = nodemtx->m[3][1] - shotdata->viewOrigin.y; + diff.z = nodemtx->m[3][2] - shotdata->viewOrigin.z; + + len = sqrtf((diff.z * diff.z) + ((diff.x * diff.x) + (diff.y * diff.y))); + dist = -((shotdata->viewDir.z * len) + shotdata->viewOrigin.z); + + if (dist < shotdata->maxdist) + { + chrpropAddBulletHit(shotdata, prop, dist, hitpart, hitnode, &hitthing, mtxindex, dlnode, hitmodel, TRUE, FALSE); + } + } + + if (hitbounds && (prop->zDepth <= shotdata->maxdist)) + { + chr->chrflags |= CHRFLAG_NEAR_MISS; + chr->numclosearghs++; + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F022648 -/* 057178 7F022648 27BDFF10 */ addiu $sp, $sp, -0xf0 -/* 05717C 7F02264C AFBF0044 */ sw $ra, 0x44($sp) -/* 057180 7F022650 AFB20040 */ sw $s2, 0x40($sp) -/* 057184 7F022654 AFB1003C */ sw $s1, 0x3c($sp) -/* 057188 7F022658 AFB00038 */ sw $s0, 0x38($sp) -/* 05718C 7F02265C AFA400F0 */ sw $a0, 0xf0($sp) -/* 057190 7F022660 8C820004 */ lw $v0, 4($a0) -/* 057194 7F022664 24010005 */ li $at, 5 -/* 057198 7F022668 00A09025 */ move $s2, $a1 -/* 05719C 7F02266C 804F0007 */ lb $t7, 7($v0) -/* 0571A0 7F022670 51E100BE */ beql $t7, $at, .L7F02296C -/* 0571A4 7F022674 8FBF0044 */ lw $ra, 0x44($sp) -/* 0571A8 7F022678 8C50001C */ lw $s0, 0x1c($v0) -/* 0571AC 7F02267C AFA200EC */ sw $v0, 0xec($sp) -/* 0571B0 7F022680 0FC1B403 */ jal getinstsize -/* 0571B4 7F022684 02002025 */ move $a0, $s0 -/* 0571B8 7F022688 8FA200F0 */ lw $v0, 0xf0($sp) -/* 0571BC 7F02268C E7A000E4 */ swc1 $f0, 0xe4($sp) -/* 0571C0 7F022690 90580001 */ lbu $t8, 1($v0) -/* 0571C4 7F022694 33190002 */ andi $t9, $t8, 2 -/* 0571C8 7F022698 532000B4 */ beql $t9, $zero, .L7F02296C -/* 0571CC 7F02269C 8FBF0044 */ lw $ra, 0x44($sp) -/* 0571D0 7F0226A0 C4440018 */ lwc1 $f4, 0x18($v0) -/* 0571D4 7F0226A4 C6480034 */ lwc1 $f8, 0x34($s2) -/* 0571D8 7F0226A8 00008825 */ move $s1, $zero -/* 0571DC 7F0226AC 46002181 */ sub.s $f6, $f4, $f0 -/* 0571E0 7F0226B0 02002025 */ move $a0, $s0 -/* 0571E4 7F0226B4 4608303C */ c.lt.s $f6, $f8 -/* 0571E8 7F0226B8 00000000 */ nop -/* 0571EC 7F0226BC 450200AB */ bc1fl .L7F02296C -/* 0571F0 7F0226C0 8FBF0044 */ lw $ra, 0x44($sp) -/* 0571F4 7F0226C4 AFA000DC */ sw $zero, 0xdc($sp) -/* 0571F8 7F0226C8 AFA000D8 */ sw $zero, 0xd8($sp) -/* 0571FC 7F0226CC AFA000D4 */ sw $zero, 0xd4($sp) -/* 057200 7F0226D0 0FC1B1A8 */ jal getsubmatrix -/* 057204 7F0226D4 AFA0009C */ sw $zero, 0x9c($sp) -/* 057208 7F0226D8 44806000 */ mtc1 $zero, $f12 -/* 05720C 7F0226DC AFA20098 */ sw $v0, 0x98($sp) -/* 057210 7F0226E0 00002825 */ move $a1, $zero -/* 057214 7F0226E4 8FA600EC */ lw $a2, 0xec($sp) -.L7F0226E8: -/* 057218 7F0226E8 8CC30160 */ lw $v1, 0x160($a2) -/* 05721C 7F0226EC 50600012 */ beql $v1, $zero, .L7F022738 -/* 057220 7F0226F0 24A50004 */ addiu $a1, $a1, 4 -/* 057224 7F0226F4 8C620004 */ lw $v0, 4($v1) -/* 057228 7F0226F8 8C440014 */ lw $a0, 0x14($v0) -/* 05722C 7F0226FC E7AC0094 */ swc1 $f12, 0x94($sp) -/* 057230 7F022700 AFA60050 */ sw $a2, 0x50($sp) -/* 057234 7F022704 0FC1B403 */ jal getinstsize -/* 057238 7F022708 AFA50054 */ sw $a1, 0x54($sp) -/* 05723C 7F02270C C60A0014 */ lwc1 $f10, 0x14($s0) -/* 057240 7F022710 C7AC0094 */ lwc1 $f12, 0x94($sp) -/* 057244 7F022714 8FA50054 */ lw $a1, 0x54($sp) -/* 057248 7F022718 460A0082 */ mul.s $f2, $f0, $f10 -/* 05724C 7F02271C 8FA60050 */ lw $a2, 0x50($sp) -/* 057250 7F022720 4602603C */ c.lt.s $f12, $f2 -/* 057254 7F022724 00000000 */ nop -/* 057258 7F022728 45020003 */ bc1fl .L7F022738 -/* 05725C 7F02272C 24A50004 */ addiu $a1, $a1, 4 -/* 057260 7F022730 46001306 */ mov.s $f12, $f2 -/* 057264 7F022734 24A50004 */ addiu $a1, $a1, 4 -.L7F022738: -/* 057268 7F022738 24010008 */ li $at, 8 -/* 05726C 7F02273C 14A1FFEA */ bne $a1, $at, .L7F0226E8 -/* 057270 7F022740 24C60004 */ addiu $a2, $a2, 4 -/* 057274 7F022744 C7A000E4 */ lwc1 $f0, 0xe4($sp) -/* 057278 7F022748 8FA60098 */ lw $a2, 0x98($sp) -/* 05727C 7F02274C 2650000C */ addiu $s0, $s2, 0xc -/* 057280 7F022750 460C0000 */ add.s $f0, $f0, $f12 -/* 057284 7F022754 02002825 */ move $a1, $s0 -/* 057288 7F022758 02402025 */ move $a0, $s2 -/* 05728C 7F02275C 24C60030 */ addiu $a2, $a2, 0x30 -/* 057290 7F022760 44070000 */ mfc1 $a3, $f0 -/* 057294 7F022764 0FC1041D */ jal sub_GAME_7F041074 -/* 057298 7F022768 00000000 */ nop -/* 05729C 7F02276C 10400003 */ beqz $v0, .L7F02277C -/* 0572A0 7F022770 24080001 */ li $t0, 1 -/* 0572A4 7F022774 AFA800D4 */ sw $t0, 0xd4($sp) -/* 0572A8 7F022778 24110001 */ li $s1, 1 -.L7F02277C: -/* 0572AC 7F02277C 12200028 */ beqz $s1, .L7F022820 -/* 0572B0 7F022780 8FA900EC */ lw $t1, 0xec($sp) -/* 0572B4 7F022784 8D2A0020 */ lw $t2, 0x20($t1) -/* 0572B8 7F022788 27AB00D8 */ addiu $t3, $sp, 0xd8 -/* 0572BC 7F02278C AFAB0010 */ sw $t3, 0x10($sp) -/* 0572C0 7F022790 27A40080 */ addiu $a0, $sp, 0x80 -/* 0572C4 7F022794 02402825 */ move $a1, $s2 -/* 0572C8 7F022798 02003025 */ move $a2, $s0 -/* 0572CC 7F02279C 27A700DC */ addiu $a3, $sp, 0xdc -/* 0572D0 7F0227A0 0FC1B004 */ jal sub_GAME_7F06C010 -/* 0572D4 7F0227A4 AFAA0080 */ sw $t2, 0x80($sp) -/* 0572D8 7F0227A8 24010064 */ li $at, 100 /* HITPART_GUN */ -/* 0572DC 7F0227AC 10410003 */ beq $v0, $at, .L7F0227BC -/* 0572E0 7F0227B0 00408825 */ move $s1, $v0 -/* 0572E4 7F0227B4 2401006E */ li $at, 110 /* HITPART_HAT */ -/* 0572E8 7F0227B8 14410019 */ bne $v0, $at, .L7F022820 -.L7F0227BC: -/* 0572EC 7F0227BC 27AC00A4 */ addiu $t4, $sp, 0xa4 -.L7F0227C0: -/* 0572F0 7F0227C0 27AD00A0 */ addiu $t5, $sp, 0xa0 -/* 0572F4 7F0227C4 27AE009C */ addiu $t6, $sp, 0x9c -/* 0572F8 7F0227C8 AFAE0018 */ sw $t6, 0x18($sp) -/* 0572FC 7F0227CC AFAD0014 */ sw $t5, 0x14($sp) -/* 057300 7F0227D0 AFAC0010 */ sw $t4, 0x10($sp) -/* 057304 7F0227D4 8FA400DC */ lw $a0, 0xdc($sp) -/* 057308 7F0227D8 8FA500D8 */ lw $a1, 0xd8($sp) -/* 05730C 7F0227DC 02403025 */ move $a2, $s2 -/* 057310 7F0227E0 0FC1366C */ jal sub_GAME_7F04D9B0 -/* 057314 7F0227E4 02003825 */ move $a3, $s0 -/* 057318 7F0227E8 1440000D */ bnez $v0, .L7F022820 -/* 05731C 7F0227EC 27A40080 */ addiu $a0, $sp, 0x80 -/* 057320 7F0227F0 27AF00D8 */ addiu $t7, $sp, 0xd8 -/* 057324 7F0227F4 AFAF0010 */ sw $t7, 0x10($sp) -/* 057328 7F0227F8 02402825 */ move $a1, $s2 -/* 05732C 7F0227FC 02003025 */ move $a2, $s0 -/* 057330 7F022800 0FC1AF80 */ jal probably_damage_detail_blood_effect_related -/* 057334 7F022804 27A700DC */ addiu $a3, $sp, 0xdc -/* 057338 7F022808 24010064 */ li $at, 100 /* HITPART_GUN */ -/* 05733C 7F02280C 1041FFEB */ beq $v0, $at, .L7F0227BC -/* 057340 7F022810 00408825 */ move $s1, $v0 -/* 057344 7F022814 2401006E */ li $at, 110 /* HITPART_HAT */ -/* 057348 7F022818 5041FFE9 */ beql $v0, $at, .L7F0227C0 -/* 05734C 7F02281C 27AC00A4 */ addiu $t4, $sp, 0xa4 -.L7F022820: -/* 057350 7F022820 5A200041 */ blezl $s1, .L7F022928 -/* 057354 7F022824 8FAC00D4 */ lw $t4, 0xd4($sp) -/* 057358 7F022828 C650000C */ lwc1 $f16, 0xc($s2) -/* 05735C 7F02282C E7B00074 */ swc1 $f16, 0x74($sp) -/* 057360 7F022830 C6520010 */ lwc1 $f18, 0x10($s2) -/* 057364 7F022834 E7B20078 */ swc1 $f18, 0x78($sp) -/* 057368 7F022838 C6440014 */ lwc1 $f4, 0x14($s2) -/* 05736C 7F02283C 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 057370 7F022840 E7A4007C */ swc1 $f4, 0x7c($sp) -/* 057374 7F022844 00402025 */ move $a0, $v0 -/* 057378 7F022848 0FC160F6 */ jal mtx4RotateVecInPlace -/* 05737C 7F02284C 27A50074 */ addiu $a1, $sp, 0x74 -/* 057380 7F022850 8FA400DC */ lw $a0, 0xdc($sp) -/* 057384 7F022854 8FA500D8 */ lw $a1, 0xd8($sp) -/* 057388 7F022858 0FC1B198 */ jal modelFindNodeMtx -/* 05738C 7F02285C 00003025 */ move $a2, $zero -/* 057390 7F022860 C4460030 */ lwc1 $f6, 0x30($v0) -/* 057394 7F022864 C6480000 */ lwc1 $f8, ($s2) -/* 057398 7F022868 46083281 */ sub.s $f10, $f6, $f8 -/* 05739C 7F02286C E7AA0060 */ swc1 $f10, 0x60($sp) -/* 0573A0 7F022870 C6520004 */ lwc1 $f18, 4($s2) -/* 0573A4 7F022874 C4500034 */ lwc1 $f16, 0x34($v0) -/* 0573A8 7F022878 46128101 */ sub.s $f4, $f16, $f18 -/* 0573AC 7F02287C C7B00060 */ lwc1 $f16, 0x60($sp) -/* 0573B0 7F022880 E7A40064 */ swc1 $f4, 0x64($sp) -/* 0573B4 7F022884 C6480008 */ lwc1 $f8, 8($s2) -/* 0573B8 7F022888 C4460038 */ lwc1 $f6, 0x38($v0) -/* 0573BC 7F02288C 46108482 */ mul.s $f18, $f16, $f16 -/* 0573C0 7F022890 C7A40064 */ lwc1 $f4, 0x64($sp) -/* 0573C4 7F022894 46083281 */ sub.s $f10, $f6, $f8 -/* 0573C8 7F022898 46042182 */ mul.s $f6, $f4, $f4 -/* 0573CC 7F02289C E7AA0068 */ swc1 $f10, 0x68($sp) -/* 0573D0 7F0228A0 C7AA0068 */ lwc1 $f10, 0x68($sp) -/* 0573D4 7F0228A4 460A5402 */ mul.s $f16, $f10, $f10 -/* 0573D8 7F0228A8 46069200 */ add.s $f8, $f18, $f6 -/* 0573DC 7F0228AC 0C007DF8 */ jal sqrtf -/* 0573E0 7F0228B0 46088300 */ add.s $f12, $f16, $f8 -/* 0573E4 7F0228B4 C6440014 */ lwc1 $f4, 0x14($s2) -/* 0573E8 7F0228B8 C6460008 */ lwc1 $f6, 8($s2) -/* 0573EC 7F0228BC C64A0034 */ lwc1 $f10, 0x34($s2) -/* 0573F0 7F0228C0 46002482 */ mul.s $f18, $f4, $f0 -/* 0573F4 7F0228C4 02402025 */ move $a0, $s2 -/* 0573F8 7F0228C8 8FA500F0 */ lw $a1, 0xf0($sp) -/* 0573FC 7F0228CC 02203825 */ move $a3, $s1 -/* 057400 7F0228D0 8FB800D8 */ lw $t8, 0xd8($sp) -/* 057404 7F0228D4 27B900A4 */ addiu $t9, $sp, 0xa4 -/* 057408 7F0228D8 240B0001 */ li $t3, 1 -/* 05740C 7F0228DC 46069080 */ add.s $f2, $f18, $f6 -/* 057410 7F0228E0 46001087 */ neg.s $f2, $f2 -/* 057414 7F0228E4 460A103C */ c.lt.s $f2, $f10 -/* 057418 7F0228E8 00000000 */ nop -/* 05741C 7F0228EC 4502000E */ bc1fl .L7F022928 -/* 057420 7F0228F0 8FAC00D4 */ lw $t4, 0xd4($sp) -/* 057424 7F0228F4 8FA800A0 */ lw $t0, 0xa0($sp) -/* 057428 7F0228F8 8FA9009C */ lw $t1, 0x9c($sp) -/* 05742C 7F0228FC 8FAA00DC */ lw $t2, 0xdc($sp) -/* 057430 7F022900 44061000 */ mfc1 $a2, $f2 -/* 057434 7F022904 AFB80010 */ sw $t8, 0x10($sp) -/* 057438 7F022908 AFB90014 */ sw $t9, 0x14($sp) -/* 05743C 7F02290C AFAB0024 */ sw $t3, 0x24($sp) -/* 057440 7F022910 AFA00028 */ sw $zero, 0x28($sp) -/* 057444 7F022914 AFA80018 */ sw $t0, 0x18($sp) -/* 057448 7F022918 AFA9001C */ sw $t1, 0x1c($sp) -/* 05744C 7F02291C 0FC0EE70 */ jal sub_GAME_7F03B9C0 -/* 057450 7F022920 AFAA0020 */ sw $t2, 0x20($sp) -/* 057454 7F022924 8FAC00D4 */ lw $t4, 0xd4($sp) -.L7F022928: -/* 057458 7F022928 8FAD00F0 */ lw $t5, 0xf0($sp) -/* 05745C 7F02292C 5180000F */ beql $t4, $zero, .L7F02296C -/* 057460 7F022930 8FBF0044 */ lw $ra, 0x44($sp) -/* 057464 7F022934 C6500034 */ lwc1 $f16, 0x34($s2) -/* 057468 7F022938 C5A80018 */ lwc1 $f8, 0x18($t5) -/* 05746C 7F02293C 8FAE00EC */ lw $t6, 0xec($sp) -/* 057470 7F022940 4610403E */ c.le.s $f8, $f16 -/* 057474 7F022944 00000000 */ nop -/* 057478 7F022948 45020008 */ bc1fl .L7F02296C -/* 05747C 7F02294C 8FBF0044 */ lw $ra, 0x44($sp) -/* 057480 7F022950 8DCF0014 */ lw $t7, 0x14($t6) -/* 057484 7F022954 81D9000A */ lb $t9, 0xa($t6) -/* 057488 7F022958 35F80004 */ ori $t8, $t7, 4 -/* 05748C 7F02295C 27280001 */ addiu $t0, $t9, 1 -/* 057490 7F022960 ADD80014 */ sw $t8, 0x14($t6) -/* 057494 7F022964 A1C8000A */ sb $t0, 0xa($t6) -/* 057498 7F022968 8FBF0044 */ lw $ra, 0x44($sp) -.L7F02296C: -/* 05749C 7F02296C 8FB00038 */ lw $s0, 0x38($sp) -/* 0574A0 7F022970 8FB1003C */ lw $s1, 0x3c($sp) -/* 0574A4 7F022974 8FB20040 */ lw $s2, 0x40($sp) -/* 0574A8 7F022978 03E00008 */ jr $ra -/* 0574AC 7F02297C 27BD00F0 */ addiu $sp, $sp, 0xf0 -) -#endif +/** + * Address: 7F022980 + * + * Resolves a known hit against a character. + */ +void chrHandleBulletHit(struct ShotData *shot, struct BulletHit *bhit) +{ + f32 scale; + Mtxf invmtx; + coord3d nearhitpos; + s32 temp; + coord3d hitpos; + Mtxf *mtx; + ChrRecord *chr; + PropRecord *prop; + struct image_sound *sound; + WeaponObjRecord *weaponobj; + s32 i; + s32 temp2; + coord3d jointpos; + struct image_sound *sound2; -#ifdef NONMATCHING -void sub_GAME_7F022980(void) { + chr = bhit->prop->chr; + // Calculate the view space hit position for impact effects. + hitpos.f[0] = shot->viewOrigin.x - ((bhit->dist * shot->viewDir.x) / shot->viewDir.z); + hitpos.f[1] = shot->viewOrigin.y - ((bhit->dist * shot->viewDir.y) / shot->viewDir.z); + hitpos.f[2] = shot->viewOrigin.z - bhit->dist; + + scale = 1.0f - (42.0f / sqrtf(SQ(hitpos.f[0]) + SQ(hitpos.f[1]) + SQ(hitpos.f[2]))); + + /** Use scale to create a near hit position closer to the camera. + * Probably to prevent the tracer effect and smoke puffs from landing inside the character model. + */ + nearhitpos.x = hitpos.f[0] * scale; + nearhitpos.y = hitpos.f[1] * scale; + nearhitpos.z = hitpos.f[2] * scale; + + mtx4TransformVecInPlace(currentPlayerGetViewToWorldMtxf(), &nearhitpos); + + // Point the tracer effect towards the impact position. + gunSetTracerTarget(&nearhitpos); + + // Make a fleshy impact sound. + recall_joy2_hits_edit_detail_edit_flag(shot->weapon, bhit->prop, -1); + + chrCreateHitPuffs(bhit->prop, bhit->hitpart, &hitpos, &nearhitpos); + + // Apply damage to the character. + if (!handles_shot_actors(chr, bhit->hitpart, &shot->dir, shot->weapon, TRUE)) { + return; + } + + if (bhit->hitpart == HIT_GUN) { + for (i = 0; i != 2; i++) { + prop = chr->weapons_held[i]; + + if (prop != NULL) { + weaponobj = (WeaponObjRecord *)prop->obj; + /** + * If a character is holding an explosive such as a grenade, and the explosive is shot, detonate it. + */ + if (weaponobj->model == bhit->model) { + if ( + ((WeaponObjRecord *)weaponobj)->weaponnum == ITEM_GRENADE || + ((WeaponObjRecord *)weaponobj)->weaponnum == ITEM_GRENADEROUND || + ((WeaponObjRecord *)weaponobj)->weaponnum == ITEM_ROCKETROUND || + ((WeaponObjRecord *)weaponobj)->weaponnum == ITEM_TIMEDMINE || + ((WeaponObjRecord *)weaponobj)->weaponnum == ITEM_BOMBCASE || + ((WeaponObjRecord *)weaponobj)->weaponnum == ITEM_REMOTEMINE || + ((WeaponObjRecord *)weaponobj)->weaponnum == ITEM_PROXIMITYMINE + ) + { + propobjSetDropped(prop, 1); + chr->hidden |= 1; + + objApplyDamage(prop->obj, gunItemGetDestructionAmount(shot->weapon), &hitpos, shot->weapon, get_cur_playernum()); + // Create a bullet hole on the character's held weapon. + } else { + if (bhit->hit.texturenum < 0) { + sound = g_HitTypeSounds[0]; + } else { + sound = g_HitTypeSounds[g_Textures[bhit->hit.texturenum].hitTexture]; + } + + temp = randomGetNext() % (s16)sound->thing2_len; + explosionCreateBulletImpact(&bhit->hit.hitpos, &bhit->hit.normal, sound->thing2[temp], 1, prop, bhit->room, 0); + } + } + } + } + + return; + } + + // Create a bullet on hole on a hat or helmet attached to a character's head. + if (bhit->hitpart == HIT_HAT) { + if (bhit->hit.texturenum < 0) { + sound2 = g_HitTypeSounds[0]; + } else { + sound2 = g_HitTypeSounds[g_Textures[bhit->hit.texturenum].hitTexture]; + } + + temp2 = randomGetNext() % (s16)sound2->thing2_len; + explosionCreateBulletImpact(&bhit->hit.hitpos, &bhit->hit.normal, sound2->thing2[temp2], 1, chr->handle_positiondata_hat, bhit->room, 0); + + return; + } + + mtx = modelFindNodeMtx(bhit->model, bhit->node, 0); + + jointpos.x = hitpos.f[0]; + jointpos.y = hitpos.f[1]; + jointpos.z = hitpos.f[2]; + + jointpos.x += (jointpos.x - mtx->m[3][0]) * 0.5f; + jointpos.y += (jointpos.y - mtx->m[3][1]) * 0.5f; + jointpos.z += (jointpos.z - mtx->m[3][2]) * 0.5f; + + jointpos.x -= getjointsize(bhit->model, bhit->node) * 0.5f * shot->viewDir.x; + jointpos.y -= getjointsize(bhit->model, bhit->node) * 0.5f * shot->viewDir.y; + jointpos.z -= getjointsize(bhit->model, bhit->node) * 0.5f * shot->viewDir.z; + + matrix_4x4_set_inverse_rotation_and_translation(mtx, &invmtx); + mtx4TransformVecInPlace(&invmtx, &jointpos); + + // Create a blood stain at the impact point. + chrCreateBloodStain(bhit->model, bhit->hitpart, bhit->node, &jointpos); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F022980 -/* 0574B0 7F022980 27BDFF08 */ addiu $sp, $sp, -0xf8 -/* 0574B4 7F022984 AFBF004C */ sw $ra, 0x4c($sp) -/* 0574B8 7F022988 AFB60048 */ sw $s6, 0x48($sp) -/* 0574BC 7F02298C AFB50044 */ sw $s5, 0x44($sp) -/* 0574C0 7F022990 AFB40040 */ sw $s4, 0x40($sp) -/* 0574C4 7F022994 AFB3003C */ sw $s3, 0x3c($sp) -/* 0574C8 7F022998 AFB20038 */ sw $s2, 0x38($sp) -/* 0574CC 7F02299C AFB10034 */ sw $s1, 0x34($sp) -/* 0574D0 7F0229A0 AFB00030 */ sw $s0, 0x30($sp) -/* 0574D4 7F0229A4 F7B40028 */ sdc1 $f20, 0x28($sp) -/* 0574D8 7F0229A8 C4A40000 */ lwc1 $f4, ($a1) -/* 0574DC 7F0229AC C486000C */ lwc1 $f6, 0xc($a0) -/* 0574E0 7F0229B0 C48A0014 */ lwc1 $f10, 0x14($a0) -/* 0574E4 7F0229B4 C4920000 */ lwc1 $f18, ($a0) -/* 0574E8 7F0229B8 46062202 */ mul.s $f8, $f4, $f6 -/* 0574EC 7F0229BC 8CAE0004 */ lw $t6, 4($a1) -/* 0574F0 7F0229C0 00A08825 */ move $s1, $a1 -/* 0574F4 7F0229C4 0080A025 */ move $s4, $a0 -/* 0574F8 7F0229C8 8DD60004 */ lw $s6, 4($t6) -/* 0574FC 7F0229CC 460A4403 */ div.s $f16, $f8, $f10 -/* 057500 7F0229D0 46109101 */ sub.s $f4, $f18, $f16 -/* 057504 7F0229D4 E7A40098 */ swc1 $f4, 0x98($sp) -/* 057508 7F0229D8 C4A60000 */ lwc1 $f6, ($a1) -/* 05750C 7F0229DC C4880010 */ lwc1 $f8, 0x10($a0) -/* 057510 7F0229E0 C4920014 */ lwc1 $f18, 0x14($a0) -/* 057514 7F0229E4 C4840004 */ lwc1 $f4, 4($a0) -/* 057518 7F0229E8 46083282 */ mul.s $f10, $f6, $f8 -/* 05751C 7F0229EC 46125403 */ div.s $f16, $f10, $f18 -/* 057520 7F0229F0 46102181 */ sub.s $f6, $f4, $f16 -/* 057524 7F0229F4 C7A40098 */ lwc1 $f4, 0x98($sp) -/* 057528 7F0229F8 E7A6009C */ swc1 $f6, 0x9c($sp) -/* 05752C 7F0229FC C4AA0000 */ lwc1 $f10, ($a1) -/* 057530 7F022A00 C4880008 */ lwc1 $f8, 8($a0) -/* 057534 7F022A04 46042402 */ mul.s $f16, $f4, $f4 -/* 057538 7F022A08 C7A6009C */ lwc1 $f6, 0x9c($sp) -/* 05753C 7F022A0C 460A4481 */ sub.s $f18, $f8, $f10 -/* 057540 7F022A10 46063202 */ mul.s $f8, $f6, $f6 -/* 057544 7F022A14 E7B200A0 */ swc1 $f18, 0xa0($sp) -/* 057548 7F022A18 C7B200A0 */ lwc1 $f18, 0xa0($sp) -/* 05754C 7F022A1C 46129102 */ mul.s $f4, $f18, $f18 -/* 057550 7F022A20 46088280 */ add.s $f10, $f16, $f8 -/* 057554 7F022A24 0C007DF8 */ jal sqrtf -/* 057558 7F022A28 460A2300 */ add.s $f12, $f4, $f10 -/* 05755C 7F022A2C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 057560 7F022A30 44813000 */ mtc1 $at, $f6 -/* 057564 7F022A34 3C014228 */ li $at, 0x42280000 # 42.000000 -/* 057568 7F022A38 44818000 */ mtc1 $at, $f16 -/* 05756C 7F022A3C C7B20098 */ lwc1 $f18, 0x98($sp) -/* 057570 7F022A40 C7AA009C */ lwc1 $f10, 0x9c($sp) -/* 057574 7F022A44 46008203 */ div.s $f8, $f16, $f0 -/* 057578 7F022A48 46083081 */ sub.s $f2, $f6, $f8 -/* 05757C 7F022A4C C7A600A0 */ lwc1 $f6, 0xa0($sp) -/* 057580 7F022A50 46029102 */ mul.s $f4, $f18, $f2 -/* 057584 7F022A54 00000000 */ nop -/* 057588 7F022A58 46025402 */ mul.s $f16, $f10, $f2 -/* 05758C 7F022A5C 00000000 */ nop -/* 057590 7F022A60 46023202 */ mul.s $f8, $f6, $f2 -/* 057594 7F022A64 E7A400A8 */ swc1 $f4, 0xa8($sp) -/* 057598 7F022A68 E7B000AC */ swc1 $f16, 0xac($sp) -/* 05759C 7F022A6C 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 0575A0 7F022A70 E7A800B0 */ swc1 $f8, 0xb0($sp) -/* 0575A4 7F022A74 27B000A8 */ addiu $s0, $sp, 0xa8 -/* 0575A8 7F022A78 02002825 */ move $a1, $s0 -/* 0575AC 7F022A7C 0FC1611D */ jal mtx4TransformVecInPlace -/* 0575B0 7F022A80 00402025 */ move $a0, $v0 -/* 0575B4 7F022A84 0FC19ED3 */ jal sub_GAME_7F067B4C -/* 0575B8 7F022A88 02002025 */ move $a0, $s0 -/* 0575BC 7F022A8C 8E840018 */ lw $a0, 0x18($s4) -/* 0575C0 7F022A90 8E250004 */ lw $a1, 4($s1) -/* 0575C4 7F022A94 0FC19107 */ jal recall_joy2_hits_edit_detail_edit_flag -/* 0575C8 7F022A98 2406FFFF */ li $a2, -1 -/* 0575CC 7F022A9C 8E240004 */ lw $a0, 4($s1) -/* 0575D0 7F022AA0 8E250008 */ lw $a1, 8($s1) -/* 0575D4 7F022AA4 27A60098 */ addiu $a2, $sp, 0x98 -/* 0575D8 7F022AA8 0FC0881E */ jal sub_GAME_7F022078 -/* 0575DC 7F022AAC 02003825 */ move $a3, $s0 -/* 0575E0 7F022AB0 8E250008 */ lw $a1, 8($s1) -/* 0575E4 7F022AB4 8E870018 */ lw $a3, 0x18($s4) -/* 0575E8 7F022AB8 240F0001 */ li $t7, 1 -/* 0575EC 7F022ABC AFAF0010 */ sw $t7, 0x10($sp) -/* 0575F0 7F022AC0 02C02025 */ move $a0, $s6 -/* 0575F4 7F022AC4 0FC09C9F */ jal handles_shot_actors -/* 0575F8 7F022AC8 26860028 */ addiu $a2, $s4, 0x28 -/* 0575FC 7F022ACC 504000C9 */ beql $v0, $zero, .L7F022DF4 -/* 057600 7F022AD0 8FBF004C */ lw $ra, 0x4c($sp) -/* 057604 7F022AD4 8E220008 */ lw $v0, 8($s1) -/* 057608 7F022AD8 24010064 */ li $at, 100 -/* 05760C 7F022ADC 3C158005 */ lui $s5, %hi(D_8004E86C) -/* 057610 7F022AE0 14410057 */ bne $v0, $at, .L7F022C40 -/* 057614 7F022AE4 26B5E86C */ addiu $s5, %lo(D_8004E86C) # addiu $s5, $s5, -0x1794 -/* 057618 7F022AE8 00009025 */ move $s2, $zero -/* 05761C 7F022AEC 02C09825 */ move $s3, $s6 -.L7F022AF0: -/* 057620 7F022AF0 8E700160 */ lw $s0, 0x160($s3) -/* 057624 7F022AF4 5200004D */ beql $s0, $zero, .L7F022C2C -/* 057628 7F022AF8 26520004 */ addiu $s2, $s2, 4 -/* 05762C 7F022AFC 8E030004 */ lw $v1, 4($s0) -/* 057630 7F022B00 8E380048 */ lw $t8, 0x48($s1) -/* 057634 7F022B04 8C790014 */ lw $t9, 0x14($v1) -/* 057638 7F022B08 57190048 */ bnel $t8, $t9, .L7F022C2C -/* 05763C 7F022B0C 26520004 */ addiu $s2, $s2, 4 -/* 057640 7F022B10 80620080 */ lb $v0, 0x80($v1) -/* 057644 7F022B14 2401001A */ li $at, 26 -/* 057648 7F022B18 02002025 */ move $a0, $s0 -/* 05764C 7F022B1C 1041000D */ beq $v0, $at, .L7F022B54 -/* 057650 7F022B20 24010057 */ li $at, 87 -/* 057654 7F022B24 1041000B */ beq $v0, $at, .L7F022B54 -/* 057658 7F022B28 24010056 */ li $at, 86 -/* 05765C 7F022B2C 10410009 */ beq $v0, $at, .L7F022B54 -/* 057660 7F022B30 2401001B */ li $at, 27 -/* 057664 7F022B34 10410007 */ beq $v0, $at, .L7F022B54 -/* 057668 7F022B38 24010021 */ li $at, 33 -/* 05766C 7F022B3C 10410005 */ beq $v0, $at, .L7F022B54 -/* 057670 7F022B40 2401001D */ li $at, 29 -/* 057674 7F022B44 10410003 */ beq $v0, $at, .L7F022B54 -/* 057678 7F022B48 2401001C */ li $at, 28 -/* 05767C 7F022B4C 54410013 */ bnel $v0, $at, .L7F022B9C -/* 057680 7F022B50 8622003A */ lh $v0, 0x3a($s1) -.L7F022B54: -/* 057684 7F022B54 0FC12FF4 */ jal propobjSetDropped -/* 057688 7F022B58 24050001 */ li $a1, 1 -/* 05768C 7F022B5C 96C90012 */ lhu $t1, 0x12($s6) -/* 057690 7F022B60 352A0001 */ ori $t2, $t1, 1 -/* 057694 7F022B64 A6CA0012 */ sh $t2, 0x12($s6) -/* 057698 7F022B68 0FC177E1 */ jal bondwalkItemGetDestructionAmount -/* 05769C 7F022B6C 8E840018 */ lw $a0, 0x18($s4) -/* 0576A0 7F022B70 0FC26C54 */ jal get_cur_playernum -/* 0576A4 7F022B74 46000506 */ mov.s $f20, $f0 -/* 0576A8 7F022B78 8E040004 */ lw $a0, 4($s0) -/* 0576AC 7F022B7C 4405A000 */ mfc1 $a1, $f20 -/* 0576B0 7F022B80 8E870018 */ lw $a3, 0x18($s4) -/* 0576B4 7F022B84 AFA20010 */ sw $v0, 0x10($sp) -/* 0576B8 7F022B88 0FC13842 */ jal maybe_detonate_object -/* 0576BC 7F022B8C 27A60098 */ addiu $a2, $sp, 0x98 -/* 0576C0 7F022B90 10000026 */ b .L7F022C2C -/* 0576C4 7F022B94 26520004 */ addiu $s2, $s2, 4 -/* 0576C8 7F022B98 8622003A */ lh $v0, 0x3a($s1) -.L7F022B9C: -/* 0576CC 7F022B9C 26240010 */ addiu $a0, $s1, 0x10 -/* 0576D0 7F022BA0 2625001C */ addiu $a1, $s1, 0x1c -/* 0576D4 7F022BA4 04410003 */ bgez $v0, .L7F022BB4 -/* 0576D8 7F022BA8 000258C0 */ sll $t3, $v0, 3 -/* 0576DC 7F022BAC 10000008 */ b .L7F022BD0 -/* 0576E0 7F022BB0 8EA30000 */ lw $v1, ($s5) -.L7F022BB4: -/* 0576E4 7F022BB4 3C0C8005 */ lui $t4, %hi(g_Textures) -/* 0576E8 7F022BB8 018B6021 */ addu $t4, $t4, $t3 -/* 0576EC 7F022BBC 918C9300 */ lbu $t4, %lo(g_Textures)($t4) -/* 0576F0 7F022BC0 318D000F */ andi $t5, $t4, 0xf -/* 0576F4 7F022BC4 000D7080 */ sll $t6, $t5, 2 -/* 0576F8 7F022BC8 02AE7821 */ addu $t7, $s5, $t6 -/* 0576FC 7F022BCC 8DE30000 */ lw $v1, ($t7) -.L7F022BD0: -/* 057700 7F022BD0 AFA30088 */ sw $v1, 0x88($sp) -/* 057704 7F022BD4 AFA40054 */ sw $a0, 0x54($sp) -/* 057708 7F022BD8 0C002914 */ jal randomGetNext -/* 05770C 7F022BDC AFA50050 */ sw $a1, 0x50($sp) -/* 057710 7F022BE0 8FA30088 */ lw $v1, 0x88($sp) -/* 057714 7F022BE4 8FA40054 */ lw $a0, 0x54($sp) -/* 057718 7F022BE8 8FA50050 */ lw $a1, 0x50($sp) -/* 05771C 7F022BEC 8478000A */ lh $t8, 0xa($v1) -/* 057720 7F022BF0 8C790004 */ lw $t9, 4($v1) -/* 057724 7F022BF4 24070001 */ li $a3, 1 -/* 057728 7F022BF8 0058001B */ divu $zero, $v0, $t8 -/* 05772C 7F022BFC 00004010 */ mfhi $t0 -/* 057730 7F022C00 03284821 */ addu $t1, $t9, $t0 -/* 057734 7F022C04 91260000 */ lbu $a2, ($t1) -/* 057738 7F022C08 AFB00010 */ sw $s0, 0x10($sp) -/* 05773C 7F022C0C 8E2A0040 */ lw $t2, 0x40($s1) -/* 057740 7F022C10 17000002 */ bnez $t8, .L7F022C1C -/* 057744 7F022C14 00000000 */ nop -/* 057748 7F022C18 0007000D */ break 7 -.L7F022C1C: -/* 05774C 7F022C1C AFA00018 */ sw $zero, 0x18($sp) -/* 057750 7F022C20 0FC28423 */ jal explosionCreateBulletImpact -/* 057754 7F022C24 AFAA0014 */ sw $t2, 0x14($sp) -/* 057758 7F022C28 26520004 */ addiu $s2, $s2, 4 -.L7F022C2C: -/* 05775C 7F022C2C 24010008 */ li $at, 8 -/* 057760 7F022C30 1641FFAF */ bne $s2, $at, .L7F022AF0 -/* 057764 7F022C34 26730004 */ addiu $s3, $s3, 4 -/* 057768 7F022C38 1000006E */ b .L7F022DF4 -/* 05776C 7F022C3C 8FBF004C */ lw $ra, 0x4c($sp) -.L7F022C40: -/* 057770 7F022C40 2401006E */ li $at, 110 -/* 057774 7F022C44 14410027 */ bne $v0, $at, .L7F022CE4 -/* 057778 7F022C48 00003025 */ move $a2, $zero -/* 05777C 7F022C4C 8622003A */ lh $v0, 0x3a($s1) -/* 057780 7F022C50 3C158005 */ lui $s5, %hi(D_8004E86C) -/* 057784 7F022C54 3C0C8005 */ lui $t4, %hi(g_Textures) -/* 057788 7F022C58 04410004 */ bgez $v0, .L7F022C6C -/* 05778C 7F022C5C 000258C0 */ sll $t3, $v0, 3 -/* 057790 7F022C60 26B5E86C */ addiu $s5, %lo(D_8004E86C) # addiu $s5, $s5, -0x1794 -/* 057794 7F022C64 10000009 */ b .L7F022C8C -/* 057798 7F022C68 8EB00000 */ lw $s0, ($s5) -.L7F022C6C: -/* 05779C 7F022C6C 018B6021 */ addu $t4, $t4, $t3 -/* 0577A0 7F022C70 918C9300 */ lbu $t4, %lo(g_Textures)($t4) -/* 0577A4 7F022C74 3C158005 */ lui $s5, %hi(D_8004E86C) -/* 0577A8 7F022C78 26B5E86C */ addiu $s5, %lo(D_8004E86C) # addiu $s5, $s5, -0x1794 -/* 0577AC 7F022C7C 318D000F */ andi $t5, $t4, 0xf -/* 0577B0 7F022C80 000D7080 */ sll $t6, $t5, 2 -/* 0577B4 7F022C84 02AE7821 */ addu $t7, $s5, $t6 -/* 0577B8 7F022C88 8DF00000 */ lw $s0, ($t7) -.L7F022C8C: -/* 0577BC 7F022C8C 0C002914 */ jal randomGetNext -/* 0577C0 7F022C90 00000000 */ nop -/* 0577C4 7F022C94 8618000A */ lh $t8, 0xa($s0) -/* 0577C8 7F022C98 8E190004 */ lw $t9, 4($s0) -/* 0577CC 7F022C9C 8ECA01D8 */ lw $t2, 0x1d8($s6) -/* 0577D0 7F022CA0 0058001B */ divu $zero, $v0, $t8 -/* 0577D4 7F022CA4 00001810 */ mfhi $v1 -/* 0577D8 7F022CA8 03234821 */ addu $t1, $t9, $v1 -/* 0577DC 7F022CAC 91260000 */ lbu $a2, ($t1) -/* 0577E0 7F022CB0 AFAA0010 */ sw $t2, 0x10($sp) -/* 0577E4 7F022CB4 8E2B0040 */ lw $t3, 0x40($s1) -/* 0577E8 7F022CB8 17000002 */ bnez $t8, .L7F022CC4 -/* 0577EC 7F022CBC 00000000 */ nop -/* 0577F0 7F022CC0 0007000D */ break 7 -.L7F022CC4: -/* 0577F4 7F022CC4 AFA00018 */ sw $zero, 0x18($sp) -/* 0577F8 7F022CC8 26240010 */ addiu $a0, $s1, 0x10 -/* 0577FC 7F022CCC 2625001C */ addiu $a1, $s1, 0x1c -/* 057800 7F022CD0 24070001 */ li $a3, 1 -/* 057804 7F022CD4 0FC28423 */ jal explosionCreateBulletImpact -/* 057808 7F022CD8 AFAB0014 */ sw $t3, 0x14($sp) -/* 05780C 7F022CDC 10000045 */ b .L7F022DF4 -/* 057810 7F022CE0 8FBF004C */ lw $ra, 0x4c($sp) -.L7F022CE4: -/* 057814 7F022CE4 8E240048 */ lw $a0, 0x48($s1) -/* 057818 7F022CE8 0FC1B198 */ jal modelFindNodeMtx -/* 05781C 7F022CEC 8E25000C */ lw $a1, 0xc($s1) -/* 057820 7F022CF0 C7B20098 */ lwc1 $f18, 0x98($sp) -/* 057824 7F022CF4 C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 057828 7F022CF8 C7AA00A0 */ lwc1 $f10, 0xa0($sp) -/* 05782C 7F022CFC E7B20070 */ swc1 $f18, 0x70($sp) -/* 057830 7F022D00 E7A40074 */ swc1 $f4, 0x74($sp) -/* 057834 7F022D04 E7AA0078 */ swc1 $f10, 0x78($sp) -/* 057838 7F022D08 C4500030 */ lwc1 $f16, 0x30($v0) -/* 05783C 7F022D0C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 057840 7F022D10 4481A000 */ mtc1 $at, $f20 -/* 057844 7F022D14 46109181 */ sub.s $f6, $f18, $f16 -/* 057848 7F022D18 00408025 */ move $s0, $v0 -/* 05784C 7F022D1C 46143202 */ mul.s $f8, $f6, $f20 -/* 057850 7F022D20 46089400 */ add.s $f16, $f18, $f8 -/* 057854 7F022D24 E7B00070 */ swc1 $f16, 0x70($sp) -/* 057858 7F022D28 C4460034 */ lwc1 $f6, 0x34($v0) -/* 05785C 7F022D2C 46062481 */ sub.s $f18, $f4, $f6 -/* 057860 7F022D30 46149202 */ mul.s $f8, $f18, $f20 -/* 057864 7F022D34 46082400 */ add.s $f16, $f4, $f8 -/* 057868 7F022D38 E7B00074 */ swc1 $f16, 0x74($sp) -/* 05786C 7F022D3C C4460038 */ lwc1 $f6, 0x38($v0) -/* 057870 7F022D40 46065481 */ sub.s $f18, $f10, $f6 -/* 057874 7F022D44 46149102 */ mul.s $f4, $f18, $f20 -/* 057878 7F022D48 46045200 */ add.s $f8, $f10, $f4 -/* 05787C 7F022D4C E7A80078 */ swc1 $f8, 0x78($sp) -/* 057880 7F022D50 8E25000C */ lw $a1, 0xc($s1) -/* 057884 7F022D54 0FC1B3A4 */ jal getjointsize -/* 057888 7F022D58 8E240048 */ lw $a0, 0x48($s1) -/* 05788C 7F022D5C 46140402 */ mul.s $f16, $f0, $f20 -/* 057890 7F022D60 C686000C */ lwc1 $f6, 0xc($s4) -/* 057894 7F022D64 C7AA0070 */ lwc1 $f10, 0x70($sp) -/* 057898 7F022D68 46068482 */ mul.s $f18, $f16, $f6 -/* 05789C 7F022D6C 46125101 */ sub.s $f4, $f10, $f18 -/* 0578A0 7F022D70 E7A40070 */ swc1 $f4, 0x70($sp) -/* 0578A4 7F022D74 8E25000C */ lw $a1, 0xc($s1) -/* 0578A8 7F022D78 0FC1B3A4 */ jal getjointsize -/* 0578AC 7F022D7C 8E240048 */ lw $a0, 0x48($s1) -/* 0578B0 7F022D80 46140202 */ mul.s $f8, $f0, $f20 -/* 0578B4 7F022D84 C6900010 */ lwc1 $f16, 0x10($s4) -/* 0578B8 7F022D88 C7AA0074 */ lwc1 $f10, 0x74($sp) -/* 0578BC 7F022D8C 46104182 */ mul.s $f6, $f8, $f16 -/* 0578C0 7F022D90 46065481 */ sub.s $f18, $f10, $f6 -/* 0578C4 7F022D94 E7B20074 */ swc1 $f18, 0x74($sp) -/* 0578C8 7F022D98 8E25000C */ lw $a1, 0xc($s1) -/* 0578CC 7F022D9C 0FC1B3A4 */ jal getjointsize -/* 0578D0 7F022DA0 8E240048 */ lw $a0, 0x48($s1) -/* 0578D4 7F022DA4 46140102 */ mul.s $f4, $f0, $f20 -/* 0578D8 7F022DA8 C6880014 */ lwc1 $f8, 0x14($s4) -/* 0578DC 7F022DAC C7AA0078 */ lwc1 $f10, 0x78($sp) -/* 0578E0 7F022DB0 27B200B4 */ addiu $s2, $sp, 0xb4 -/* 0578E4 7F022DB4 02402825 */ move $a1, $s2 -/* 0578E8 7F022DB8 02002025 */ move $a0, $s0 -/* 0578EC 7F022DBC 46082402 */ mul.s $f16, $f4, $f8 -/* 0578F0 7F022DC0 46105181 */ sub.s $f6, $f10, $f16 -/* 0578F4 7F022DC4 0FC16799 */ jal matrix_4x4_set_inverse_rotation_and_translation -/* 0578F8 7F022DC8 E7A60078 */ swc1 $f6, 0x78($sp) -/* 0578FC 7F022DCC 27B00070 */ addiu $s0, $sp, 0x70 -/* 057900 7F022DD0 02002825 */ move $a1, $s0 -/* 057904 7F022DD4 0FC1611D */ jal mtx4TransformVecInPlace -/* 057908 7F022DD8 02402025 */ move $a0, $s2 -/* 05790C 7F022DDC 8E240048 */ lw $a0, 0x48($s1) -/* 057910 7F022DE0 8E250008 */ lw $a1, 8($s1) -/* 057914 7F022DE4 8E26000C */ lw $a2, 0xc($s1) -/* 057918 7F022DE8 0FC08877 */ jal sub_GAME_7F0221DC -/* 05791C 7F022DEC 02003825 */ move $a3, $s0 -/* 057920 7F022DF0 8FBF004C */ lw $ra, 0x4c($sp) -.L7F022DF4: -/* 057924 7F022DF4 D7B40028 */ ldc1 $f20, 0x28($sp) -/* 057928 7F022DF8 8FB00030 */ lw $s0, 0x30($sp) -/* 05792C 7F022DFC 8FB10034 */ lw $s1, 0x34($sp) -/* 057930 7F022E00 8FB20038 */ lw $s2, 0x38($sp) -/* 057934 7F022E04 8FB3003C */ lw $s3, 0x3c($sp) -/* 057938 7F022E08 8FB40040 */ lw $s4, 0x40($sp) -/* 05793C 7F022E0C 8FB50044 */ lw $s5, 0x44($sp) -/* 057940 7F022E10 8FB60048 */ lw $s6, 0x48($sp) -/* 057944 7F022E14 03E00008 */ jr $ra -/* 057948 7F022E18 27BD00F8 */ addiu $sp, $sp, 0xf8 -) -#endif - - /** @@ -7953,7 +3618,6 @@ void chrRemoved7F022E1C(f32 arg0) } - void setanimationdebugflag(s32 param_1) { D_8002C904 = param_1; @@ -7961,7 +3625,6 @@ void setanimationdebugflag(s32 param_1) } - /** * Decrements g_AnimationTablePointerCountRelated. * If less than zero, the variable will then be set to the @@ -7986,7 +3649,6 @@ void chrDecrementAnimationTablePointerCount(void) } - /** * Decrements g_AnimationTablePointerCountRelated. * If the entry in animation_table_ptrs1 at that index is zero @@ -8005,7 +3667,6 @@ void chrIncrementAnimationTablePointerCount(void) } - /** * Address 0x7F022EC8. */ @@ -8015,15 +3676,11 @@ void chrToggleD_8002C90C(void) } - void sub_GAME_7F022EE0(s32 param_1){ D_8002C910 = param_1; } - - - /** * Iterates all guards and checks if the noise is within the hearing scale distance. * @@ -8048,7 +3705,6 @@ void chrCheckGuardsHeardSound(f32 noise) } - /** * Iterates g_ChrSlots. Returns the first object that (1) model * is not null and (2) chrnum matches index. @@ -8072,7 +3728,6 @@ ChrRecord* chrFindByLiteralId(s32 index) } - /** * Address 0x7F02302C. */ @@ -8082,8 +3737,6 @@ PropRecord *chrGetEquippedWeaponProp(ChrRecord *self, GUNHAND hand) } - - /** * Address 0x7F02303C. */ @@ -8103,7 +3756,6 @@ PropRecord *chrGetEquippedWeaponPropWithCheck(ChrRecord *self, GUNHAND hand) } - /** * Updates character collision bounds based on chracter width. * @@ -8155,8 +3807,6 @@ void chrUpdateCollisionBounds(PropRecord *prop, rect4f **polygon, s32 *edges, f3 } - - /** * @param arg0: prop * @param width: out parameter, will be set to character width @@ -8177,7 +3827,6 @@ void chrGetChrWidthHeight(PropRecord *arg0, f32 *width, f32 *height, f32 *always } - /** * Address 0x7F023188. */ @@ -8188,13 +3837,12 @@ f32 chrGetChrGround(PropRecord *arg0) } - /** * Calculate auto aim position coordinates. * * US address 7F023194. */ -s32 sub_GAME_7F023194(PropRecord *arg0, struct coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3) +s32 chrGetOnscreenRenderBounds(PropRecord *arg0, struct coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3) { struct ChrRecord *temp_v1; @@ -8225,7 +3873,7 @@ s32 sub_GAME_7F023194(PropRecord *arg0, struct coord3d *arg1, struct coord2d *ar arg2->x = 0.0f; arg2->y = 0.0f; - sub_GAME_7F03F90C(model, &arg2->y, &arg2->x, &arg3->y, &arg3->x); + modelGetXYExtents(model, &arg2->y, &arg2->x, &arg3->y, &arg3->x); return 1; } @@ -8234,7 +3882,3 @@ s32 sub_GAME_7F023194(PropRecord *arg0, struct coord3d *arg1, struct coord2d *ar return 0; } - - - -//filesplit diff --git a/src/game/chr.h b/src/game/chr.h index 845a1ade..7cbb50b4 100644 --- a/src/game/chr.h +++ b/src/game/chr.h @@ -7,38 +7,36 @@ #define EXPLOSION_ANIMATION_TABLE_LEN 8 -struct struck_animation_table; +struct StruckAnim; -struct animation_something +// Per-body-part hits and deaths reaction descriptor. +struct ChrHitReaction { - s32 id; - s32 field_4; - s32 field_8; - f32 field_C; - s32 field_10; - s32 field_14; - f32 field_18; + s32 hitpart; // HITTARGET key + s32 impactPuffCount; + s32 unused_8; + f32 impactPuffSize; + s32 backImpactPuffCount; // Count for the impact puff(s) that appears behind the hit point + s32 unused_14; + f32 backImpactPuffSize; - struct struck_animation_table *field_1C; + struct StruckAnim *deathAnims; + s32 deathAnimCount; - // maybe count of field_1C - s32 field_20; - - struct struck_animation_table *field_24; - - // maybe count of field_24 - s32 field_28; + struct StruckAnim *flinchAnims; + s32 flinchAnimCount; }; -struct struck_animation_table +// Animations for when characters are wounded or killed. +struct StruckAnim { - void *anonymous_0; // This might be pointer to struct of ANIM_DATA_x - s32 anonymous_1; - f32 anonymous_2; - f32 anonymous_3; - s32 anonymous_4; - f32 sfx1_timer_60; - f32 sfx2_timer_60; + ModelAnimation *struck_anim; + s32 flip; // Mirror flag selecting left/right variant + f32 endframe; + f32 speed; + s32 knockback; // Enables characters to be pushed back when the gun's impact force > 0 + f32 thudframe1; + f32 thudframe2; }; struct explosion_death_animation @@ -60,7 +58,12 @@ struct explosion_anim_group_info struct weapon_firing_animation_table { - s32 anim_num; + union + { + s32 offset; + struct ModelAnimation *anim; + } anim; + f32 unk04; f32 turn_angle_per_frame; f32 angle_offset; @@ -112,28 +115,6 @@ struct anim_group_info s32 len; }; -struct unk_joint_list { - Mtxf * unk_matrix; - s32 unk04; - s32 unk08; - Gfx *gdl; - - Mtxf * mtxlist; - u32 unk14; - u32 unk18; - u32 unk1C; - - u32 unk20; - u32 unk24; - u32 unk28; - u32 unk2C; - - s32 PropType; - s32 unk34; - rgba_u8 unk38; - s32 unk3C; -}; - extern s32 objectiveregisters1; extern ChrRecord* g_ActiveChrs; extern s32 g_ActiveChrsCount; @@ -144,46 +125,46 @@ extern f32 g_AiHealthModifier; extern f32 g_AiReactionSpeed; extern s32 g_SeenBondRecentlyGuardCount; -extern struct animation_something D_8002C914[]; +extern struct ChrHitReaction g_HitReactionTable[]; -extern struct struck_animation_table D_8002CE54[]; -extern struct struck_animation_table D_8002DF10[]; -extern struct struck_animation_table D_8002CEE0[]; -extern struct struck_animation_table D_8002DF64[]; -extern struct struck_animation_table D_8002CF6C[]; -extern struct struck_animation_table D_8002DFB8[]; -extern struct struck_animation_table D_8002D014[]; -extern struct struck_animation_table D_8002E028[]; -extern struct struck_animation_table D_8002D0A0[]; -extern struct struck_animation_table D_8002E07C[]; -extern struct struck_animation_table D_8002D12C[]; -extern struct struck_animation_table D_8002E0D0[]; -extern struct struck_animation_table D_8002D1D4[]; -extern struct struck_animation_table D_8002E140[]; -extern struct struck_animation_table D_8002D3B0[]; -extern struct struck_animation_table D_8002E23C[]; -extern struct struck_animation_table D_8002D6DC[]; -extern struct struck_animation_table D_8002E300[]; -extern struct struck_animation_table D_8002D768[]; -extern struct struck_animation_table D_8002E354[]; -extern struct struck_animation_table D_8002D7F4[]; -extern struct struck_animation_table D_8002E3A8[]; -extern struct struck_animation_table D_8002D880[]; -extern struct struck_animation_table D_8002E418[]; -extern struct struck_animation_table D_8002D90C[]; -extern struct struck_animation_table D_8002E46C[]; -extern struct struck_animation_table D_8002D998[]; -extern struct struck_animation_table D_8002E4C0[]; -extern struct struck_animation_table D_8002DA24[]; -extern struct struck_animation_table D_8002E530[]; -extern struct struck_animation_table D_8002DCE0[]; -extern struct struck_animation_table D_8002E5BC[]; +extern struct StruckAnim death_left_foot[]; +extern struct StruckAnim flinch_left_foot[]; +extern struct StruckAnim death_left_leg[]; +extern struct StruckAnim flinch_left_leg[]; +extern struct StruckAnim death_left_thigh[]; +extern struct StruckAnim flinch_left_thigh[]; +extern struct StruckAnim death_right_foot[]; +extern struct StruckAnim flinch_right_foot[]; +extern struct StruckAnim death_right_leg[]; +extern struct StruckAnim flinch_right_leg[]; +extern struct StruckAnim death_right_thigh[]; +extern struct StruckAnim flinch_right_thigh[]; +extern struct StruckAnim death_pelvis[]; +extern struct StruckAnim flinch_pelvis[]; +extern struct StruckAnim death_head[]; +extern struct StruckAnim flinch_head[]; +extern struct StruckAnim death_left_hand[]; +extern struct StruckAnim flinch_left_hand[]; +extern struct StruckAnim death_left_arm[]; +extern struct StruckAnim flinch_left_arm[]; +extern struct StruckAnim death_left_shoulder[]; +extern struct StruckAnim flinch_left_shoulder[]; +extern struct StruckAnim death_right_hand[]; +extern struct StruckAnim flinch_right_hand[]; +extern struct StruckAnim death_right_arm[]; +extern struct StruckAnim flinch_right_arm[]; +extern struct StruckAnim death_right_shoulder[]; +extern struct StruckAnim flinch_right_shoulder[]; +extern struct StruckAnim death_chest[]; +extern struct StruckAnim flinch_chest[]; +extern struct StruckAnim death_gun[]; +extern struct StruckAnim flinch_gun[]; +extern struct StruckAnim death_stagger[]; -extern struct struck_animation_table D_8002DEBC[]; -extern struct animation_something D_8002CAA0; -extern struct animation_something D_8002CACC; -extern struct animation_something D_8002CB24; -extern struct animation_something D_8002CB50; +extern struct ChrHitReaction D_8002CAA0; +extern struct ChrHitReaction D_8002CACC; +extern struct ChrHitReaction D_8002CB24; +extern struct ChrHitReaction D_8002CB50; extern struct weapon_firing_animation_table rifle_firing_animation_group1[]; extern struct weapon_firing_animation_table rifle_firing_animation_group2[]; @@ -233,9 +214,7 @@ extern s32 player1_guardID; extern ChrRecord *g_ChrSlots; extern s32 g_NumChrSlots; extern ModelRenderData D_8002CC6C; -extern s32 D_8002CCAC; -extern s32 D_8002CCB0; -extern s32 D_8002CCB4; +extern coord3d D_8002CCAC; extern rgba_u8 gBloodColour; extern f32 D_80030984; @@ -283,8 +262,8 @@ extern struct explosion_death_animation D_8002E648[]; void sub_GAME_7F022EE0(s32 param_1); void setanimationdebugflag(s32 param_1); -void disable_sounds_attached_to_player_then_something(PropRecord* prop); -void chrPositionRelated7F020D94(ChrRecord *); +void chrpropCleanupForRemoval(PropRecord* prop); +void chrDetectRooms(ChrRecord *); void chrSetMoving(ChrRecord *guard,s32 param_2); f32 getAnimationRate(void); void setAnimationRate(f32); @@ -305,17 +284,23 @@ f32 chrGetChrGround(PropRecord *arg0); void chrDropItems(struct ChrRecord *arg0); s32 get_numguards(void); Gfx *chrRenderProp(PropRecord *arg0, Gfx *arg1, s32 arg2); + void chrAddHealth(ChrRecord *chr, f32 health); void chrSetMaxDamage(ChrRecord *chr, f32 maxdamage); s32 propIsOfCdType(PropRecord* prop, s32 cdtypes); -s32 sub_GAME_7F023194(PropRecord *arg0, struct coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3); +s32 chrGetOnscreenRenderBounds(PropRecord *arg0, struct coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3); +void chrHandleBulletHit(struct ShotData *shot, struct BulletHit *bhit); +void propExecuteTickOperation(PropRecord *prop, TICKOP op); //tentative signature s32 sub_GAME_7F01FC10(Model *, coord3d *, coord3d *, f32 *); -void sub_GAME_7F0221DC(Model *arg0, s32 arg1, ModelNode *arg2, struct coord3d *arg3); +void chrCreateBloodStain(Model *arg0, s32 arg1, ModelNode *arg2, struct coord3d *arg3); +void chrpropAddBulletHit(struct ShotData *shotdata, PropRecord *prop, f32 dist, s32 hitpart, ModelNode *node, struct HitThing *hitthing, s32 room, s32 unk44, Model *model, bool countsAsPenetration, s32 blocksFurtherHits); +void chrTestHit(PropRecord *prop, ShotData *shotdata); +void sub_GAME_7F03E134(PropRecord* p); #ifdef BUGFIX_R1 -s32 not_in_us_7F0209EC(s32 bodynum, s32 headnum); +bool chrCanUseDKModeScaling(s32 bodynum, s32 headnum); #endif #endif diff --git a/src/game/chrObjRandom.c b/src/game/chrObjRandom.c deleted file mode 100644 index 4cc671d0..00000000 --- a/src/game/chrObjRandom.c +++ /dev/null @@ -1,80 +0,0 @@ -#include - -/** - * @file chrObjRandom.c - * This file contains code to get a random tlb value. - * The methods here are the same as in random and tlb_random (but different globals). - */ - -// data -//D:80040160 -u64 g_chrObjRandomSeed = 0xAB8D9F7781280783; - -#ifdef NONMATCHING -/** - * Iterates the current random seed and returns a 32 bit value. - * Same assembly instructions as randomGetNext and tlbRandomGetNext, but different globals. - */ -u32 chrObjRandomGetNext(void) { - // best guess comments copied from random.c - - // best -O1 guess - // g_randomSeed ^= (((((g_randomSeed << 0x3f) >> 0x1f) | ((g_randomSeed << 0x1f) >> 0x20)) ^ ((g_randomSeed << 0x2c) >> 0x20)) >> 0x14) & 0xfff; - // return (s32)(g_randomSeed); - - // best -O2 guess - // u64 t = ((g_randomSeed << 0x3f) >> 0x1f); - // t |= ((g_randomSeed << 0x1f) >> 0x20); - // t ^= ((g_randomSeed << 0x2c) >> 0x20); - // t = g_randomSeed ^ ((t >> 0x14) & 0xfff); - // g_randomSeed = t; - // return (s32)(t); -} -#else -GLOBAL_ASM( -.text -glabel chrObjRandomGetNext -/* 0D0270 7F09B740 3C048004 */ lui $a0, %hi(g_chrObjRandomSeed) -/* 0D0274 7F09B744 DC840160 */ ld $a0, %lo(g_chrObjRandomSeed)($a0) -/* 0D0278 7F09B748 3C018004 */ lui $at, %hi(g_chrObjRandomSeed) -/* 0D027C 7F09B74C 000437FC */ dsll32 $a2, $a0, 0x1f -/* 0D0280 7F09B750 00042FF8 */ dsll $a1, $a0, 0x1f -/* 0D0284 7F09B754 000637FA */ dsrl $a2, $a2, 0x1f -/* 0D0288 7F09B758 0005283E */ dsrl32 $a1, $a1, 0 -/* 0D028C 7F09B75C 0004233C */ dsll32 $a0, $a0, 0xc -/* 0D0290 7F09B760 00C53025 */ or $a2, $a2, $a1 -/* 0D0294 7F09B764 0004203E */ dsrl32 $a0, $a0, 0 -/* 0D0298 7F09B768 00C43026 */ xor $a2, $a2, $a0 -/* 0D029C 7F09B76C 0006253A */ dsrl $a0, $a2, 0x14 -/* 0D02A0 7F09B770 30840FFF */ andi $a0, $a0, 0xfff -/* 0D02A4 7F09B774 00862026 */ xor $a0, $a0, $a2 -/* 0D02A8 7F09B778 0004103C */ dsll32 $v0, $a0, 0 -/* 0D02AC 7F09B77C FC240160 */ sd $a0, %lo(g_chrObjRandomSeed)($at) -/* 0D02B0 7F09B780 03E00008 */ jr $ra -/* 0D02B4 7F09B784 0002103F */ dsra32 $v0, $v0, 0 -) -#endif - -#ifdef NONMATCHING -/** - * This sets the global random seed. - * - * Assembly assigns zero to $a0 at the end of the function, which seems odd. - * - * Same assembly instructions as randomSetSeed. - */ -void chrObjRandomSetSeed(u64 param_1) -{ - g_chrObjRandomSeed = param_1 + 1; -} -#else -GLOBAL_ASM( -.text -glabel chrObjRandomSetSeed -/* 0D02B8 7F09B788 64840001 */ daddiu $a0, $a0, 1 -/* 0D02BC 7F09B78C 3C018004 */ lui $at, %hi(g_chrObjRandomSeed) -/* 0D02C0 7F09B790 FC240160 */ sd $a0, %lo(g_chrObjRandomSeed)($at) -/* 0D02C4 7F09B794 03E00008 */ jr $ra -/* 0D02C8 7F09B798 24040000 */ li $a0, 0 -) -#endif diff --git a/src/game/chrObjRandom.h b/src/game/chrObjRandom.h new file mode 100644 index 00000000..b373c5f0 --- /dev/null +++ b/src/game/chrObjRandom.h @@ -0,0 +1,11 @@ +#ifndef _CHROBJRANDOM_H_ +#define _CHROBJRANDOM_H_ + +#include + +extern u64 g_chrObjRandomSeed; + +u32 chrObjRandomGetNext(void); +void chrObjRandomSetSeed(u32 param_1); + +#endif \ No newline at end of file diff --git a/src/game/chrObjRandom.s b/src/game/chrObjRandom.s new file mode 100644 index 00000000..3b5b0335 --- /dev/null +++ b/src/game/chrObjRandom.s @@ -0,0 +1,40 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .data +.balign 8 +glabel g_chrObjRandomSeed +.word 0xAB8D9F77 +.word 0x81280783 + +.section .text, "ax" +glabel chrObjRandomGetNext +/* 0D0270 7F09B740 3C048004 */ lui $a0, %hi(g_chrObjRandomSeed) +/* 0D0274 7F09B744 DC840160 */ ld $a0, %lo(g_chrObjRandomSeed)($a0) +/* 0D0278 7F09B748 3C018004 */ lui $at, %hi(g_chrObjRandomSeed) +/* 0D027C 7F09B74C 000437FC */ dsll32 $a2, $a0, 0x1f +/* 0D0280 7F09B750 00042FF8 */ dsll $a1, $a0, 0x1f +/* 0D0284 7F09B754 000637FA */ dsrl $a2, $a2, 0x1f +/* 0D0288 7F09B758 0005283E */ dsrl32 $a1, $a1, 0 +/* 0D028C 7F09B75C 0004233C */ dsll32 $a0, $a0, 0xc +/* 0D0290 7F09B760 00C53025 */ or $a2, $a2, $a1 +/* 0D0294 7F09B764 0004203E */ dsrl32 $a0, $a0, 0 +/* 0D0298 7F09B768 00C43026 */ xor $a2, $a2, $a0 +/* 0D029C 7F09B76C 0006253A */ dsrl $a0, $a2, 0x14 +/* 0D02A0 7F09B770 30840FFF */ andi $a0, $a0, 0xfff +/* 0D02A4 7F09B774 00862026 */ xor $a0, $a0, $a2 +/* 0D02A8 7F09B778 0004103C */ dsll32 $v0, $a0, 0 +/* 0D02AC 7F09B77C FC240160 */ sd $a0, %lo(g_chrObjRandomSeed)($at) +/* 0D02B0 7F09B780 03E00008 */ jr $ra +/* 0D02B4 7F09B784 0002103F */ dsra32 $v0, $v0, 0 + +glabel chrObjRandomSetSeed +/* 0D02B8 7F09B788 64840001 */ daddiu $a0, $a0, 1 +/* 0D02BC 7F09B78C 3C018004 */ lui $at, %hi(g_chrObjRandomSeed) +/* 0D02C0 7F09B790 FC240160 */ sd $a0, %lo(g_chrObjRandomSeed)($at) +/* 0D02C4 7F09B794 03E00008 */ jr $ra +/* 0D02C8 7F09B798 24040000 */ li $a0, 0 \ No newline at end of file diff --git a/src/game/chr_b.c b/src/game/chr_b.c index 6a461d8a..f8fe0ebd 100644 --- a/src/game/chr_b.c +++ b/src/game/chr_b.c @@ -30,7 +30,7 @@ struct Model *makeonebody(s32 body, s32 head, struct ModelFileHeader *bodyHeader f32 scale; f32 pov; s32 opcode; - struct ModelRoData_HeaderRecord *node; + ModelRwData_SwitchRecord *rwdata; scale = c_item_entries[body].scale * 0.10000001f; opcode = 0; @@ -38,7 +38,7 @@ struct Model *makeonebody(s32 body, s32 head, struct ModelFileHeader *bodyHeader if ( #ifdef BUGFIX_R1 - cheatIsActive(CHEAT_DK_MODE) && not_in_us_7F0209EC(body, head) + cheatIsActive(CHEAT_DK_MODE) && chrCanUseDKModeScaling(body, head) #else cheatIsActive(CHEAT_DK_MODE) #endif @@ -76,7 +76,7 @@ struct Model *makeonebody(s32 body, s32 head, struct ModelFileHeader *bodyHeader if (model == 0) { - model = get_aircraft_obj_instance_controller(bodyHeader); + model = modelmgrInstantiateModelWithAnim(bodyHeader); } #ifdef DEBUG assert(chrsub->inst.savesize>=bodyobj->savesize); //bodyHeader = chrsub, model = bodyobj @@ -95,7 +95,7 @@ struct Model *makeonebody(s32 body, s32 head, struct ModelFileHeader *bodyHeader if (model != 0) { modelSetScale(model, scale); - sub_GAME_7F06CE84(model, pov); + modelSetAnimTranslationScale(model, pov); if ((headHeader != 0) && (c_item_entries[body].hasHead == 0)) { @@ -106,8 +106,8 @@ struct Model *makeonebody(s32 body, s32 head, struct ModelFileHeader *bodyHeader { if (headHeader->Switches[0] != 0) { - node = modelGetNodeRwData(model, headHeader->Switches[0]); - node->ModelType = 0; + rwdata = &modelGetNodeRwData(model, headHeader->Switches[0])->Switch; + rwdata->visible = 0; } } } diff --git a/src/game/chr_b.h b/src/game/chr_b.h index 402164c7..4bb59471 100644 --- a/src/game/chr_b.h +++ b/src/game/chr_b.h @@ -5,7 +5,7 @@ #include s32 load_body_head_if_not_loaded(s32 model); -Model *makeonebody(int body, int head, ModelFileHeader *bodyheader, ModelFileHeader *headheader, int sunglasses, Model *model); -Model *setup_chr_instance(int body, int head, ModelFileHeader *body_header, ModelFileHeader *head_header, int sunglasses); +Model *makeonebody(s32 body, s32 head, ModelFileHeader *bodyheader, ModelFileHeader *headheader, s32 sunglasses, Model *model); +Model *setup_chr_instance(s32 body, s32 head, ModelFileHeader *body_header, ModelFileHeader *head_header, s32 sunglasses); #endif diff --git a/src/game/chraction.c b/src/game/chraction.c index 5908bff4..9da891b2 100644 --- a/src/game/chraction.c +++ b/src/game/chraction.c @@ -9,14 +9,15 @@ #include #include #include "bg.h" +#include "bgfog.h" +#include "bondhead.h" #include "bondview.h" #include "chr.h" #include "chr_b.h" #include "chrai.h" -#include "propobj.h" #include "file.h" -#include "bgfog.h" #include "front.h" +#include "glass.h" #include "gun.h" #include "initanitable.h" #include "loadobjectmodel.h" @@ -24,15 +25,14 @@ #include "math_asinfacosf.h" #include "math_atan2f.h" #include "matrixmath.h" +#include "model.h" #include "objecthandler.h" #include "player.h" +#include "propobj.h" #include "stan.h" -#include "bondhead.h" -#include "glass.h" -#include "model.h" - +point2d D_800309F0 = {0, 0}; // forward declarations @@ -66,15 +66,14 @@ s32 chrlvStanRoomRelated (ChrRecord *self, coord3d *arg1, S f32 chrlvModelScaleAnimationRelated (ChrRecord *self); void chrlvActGoposRelated (ChrRecord *self, coord3d *arg1, StandTile **arg2); s32 chrlvMovementTargetRelated (ChrRecord *self); -waypoint *get_ptrpreset_in_table_matching_tile(StandTile* arg0); -s32 check_if_any_path_preset_lies_on_tile (StandTile* arg0); +waypoint *get_ptrpreset_in_table_matching_tile (StandTile* tile); +s32 check_if_any_path_preset_lies_on_tile (StandTile* tile); f32 chrlvPadPresetRelated (coord3d *arg0, waypoint *arg1); waypoint *chrlvStanPathRelated (coord3d *arg0, StandTile *arg1); s32 chrlvStanRoomRelatedPad (ChrRecord *self, PadRecord *arg1); -void play_sound_for_shot_actor (ChrRecord *); void sub_GAME_7F025560 (ChrRecord *self, s32 attack_type, s32 arg2); coord3d *chrlvGetChrOrPresetLocation (ChrRecord *self, s32 flags, s32 lookup_id, StandTile **stan); -void chrStopFiring (ChrRecord *self); +void chrStopFiring (ChrRecord *self); void sub_GAME_7F0281F4 (ChrRecord *self); s32 plot_course_for_actor (ChrRecord *self, coord3d *arg1, StandTile *stan, SPEED speed); void chrlvPlotCourseRelated (ChrRecord *self); @@ -137,7 +136,7 @@ void chrlvTravelTickMagic (ChrRecord *self, struct waydata * void chrlvTravelTick (ChrRecord *, coord3d *, StandTile *, struct waydata *); void chrlvTickGoPos (ChrRecord *self); void chrlvSetNextActPatrolStepPadPos (ChrRecord *self); -void sub_GAME_7F0284DC (ChrRecord *self); +void chrlvAdvancePatrolStep (ChrRecord *self); void chrlvTickPatrol (ChrRecord *self); f32 get_distance_actor_to_position (ChrRecord *self, coord3d *pos); s32 chrResolveId (ChrRecord *self, s32 id); @@ -147,10 +146,10 @@ s32 chrIsPosOffScreen (coord3d *arg0, StandTile *arg1); PropRecord *chrSpawnAtCoord(s32 bodynum, s32 headnum, coord3d *pos, StandTile *stan, f32 angle, AIListRecord *ailist, s32 spawnflags); void chrlvInitActAttack (ChrRecord *self, struct anim_group_info ** arg1, s32 arg2, point2d *arg3, s32 attack_type, s32 arg5, s32 arg6); s32 chrlvPatrolCalculateStep (ChrRecord *self, bool *forward, s32 numsteps); -s32 sub_GAME_7F028510 (coord3d *arg0, StandTile *arg1); +bool chrlvIsPosClearOfObjectBounds (coord3d *pos, StandTile *stan); s32 sub_GAME_7F03130C (ChrRecord *self,coord3d *arg1,s32 arg2,coord3d *arg3,f32 arg4,s32 arg5,coord3d *arg6,struct waydata *arg7,f32 arg8,s32 arg9,s32 set_copy); void chrlvTickStand (ChrRecord *self); -PadRecord * chrlvGetPatrolStepPad (ChrRecord *self, s32 arg1); +PadRecord * chrlvGetPatrolStepPad (ChrRecord *self, s32 numsteps); // unknown type for arg1, reads offsets 0x30,0x34,0x40,0x44 // arg2 is only used to compare to zero, either flag or pointer @@ -160,18 +159,6 @@ void chrlvUpdateAimendbackShoulders (ChrRecord *, void *, s32, s32, f3 // end forward declarations - - - - - - - - - - - - /** * Address 0x7F0234D0. */ @@ -204,15 +191,12 @@ Model * retrieve_header_for_body_and_head(s32 body, s32 head, u32 bitflags) } - s32 get_current_random_body(void) { return list_of_bodies[current_random_body]; } - - /** * Address 0x7F0235AC. * Get a Random Male Head Only @@ -249,7 +233,6 @@ s32 get_random_head(s32 id) } - /** * Address 0x7F02370C. */ @@ -268,7 +251,7 @@ void expand_09_characters(s32 stageid, GuardRecord *arg1, s32 arg2) pad = &g_CurrentSetup.pads[arg1->PadID]; - if (sub_GAME_7F056850(&pad->pos, pad->stan, 20.0f, &sp48, &sp54) != 0) + if (getposstan(&pad->pos, pad->stan, 20.0f, &sp48, &sp54) != 0) { headid = -1; bodyid = (arg1->BodyID == 0xFFFF) @@ -348,7 +331,6 @@ u32 weaponIsOneHanded(PropRecord *arg0) } - /** * Address 0x7F023948. */ @@ -380,8 +362,6 @@ void chrlvIdleAnimationRelated(ChrRecord *self, f32 duration) } - - /** * Address 0x7F023A94 (VERSION_US). * Address 0x7F023D94 (other) @@ -605,9 +585,9 @@ void chrlvPerformAnimationForActor(ChrRecord *self, s32 animID, s32 startframe, modelSetAnimEndFrame(self->model, (f32)endframe); } - if ((bitfield & 0x20) != 0) + if ((bitfield & ANIM_TRANSLATION_SCALE_4X) != 0) { - sub_GAME_7F06CE84(self->model, self->model->unkb8 * 4.0f); + modelSetAnimTranslationScale(self->model, self->model->anim_translation_scale * 4.0f); } self->chrflags &= ~CHRFLAG_02000000; @@ -1236,7 +1216,7 @@ void chrlvInitActAttack(ChrRecord *self, struct anim_group_info **arg1, s32 arg2 ); if ((self->chrflags & CHRSTART_FORCENOBLOOD) - && ((s32)panim_float->anim_num == (s32)&ptr_animation_table->data[(s32)&ANIM_DATA_fire_hip])) + && ((s32)panim_float->anim.anim == (s32)&ptr_animation_table->data[(s32)&ANIM_DATA_fire_hip])) { // should be: // panim_float = &arg1[anim_index]->table[(next_anim + 1) % len] @@ -1326,7 +1306,7 @@ void chrlvInitActAttack(ChrRecord *self, struct anim_group_info **arg1, s32 arg2 modelSetAnimation( self_model, - (struct ModelAnimation *) panim_float->anim_num, + (struct ModelAnimation *) panim_float->anim.anim, arg2, panim_float->start_frame, chrlvGetGuard007SpeedRating(self, 0.5f, 0.8f), @@ -1656,7 +1636,7 @@ void chrlvInitActAttackWalk(ChrRecord *chr, s32 arg1) chr->sleep = 0; chr->act_attackwalk.speed = 0.0f; - modelSetAnimation(chr->model, (struct ModelAnimation *) panim_float->anim_num, sp78, panim_float->start_frame, 0.5f, 16.0f); + modelSetAnimation(chr->model, (struct ModelAnimation *) panim_float->anim.anim, sp78, panim_float->start_frame, 0.5f, 16.0f); } @@ -1837,7 +1817,7 @@ void chrlvInitActAttackRoll(ChrRecord *chr, GUNHAND side) modelSetAnimation( self_model, - (struct ModelAnimation *) panim_float->anim_num, + (struct ModelAnimation *) panim_float->anim.anim, sp7C, panim_float->start_frame, chrlvGetGuard007SpeedRating(chr, 0.5f, 0.8f), @@ -1956,7 +1936,6 @@ void chrlvStanLineDirIntersection(coord3d *line2_p3, coord3d *dir, coord3d *resu } - /** * @param arg0: * @param arg1: @@ -1983,8 +1962,6 @@ void chrlvStanPointPointIntersection(coord3d *arg0, coord3d *arg1, coord3d *resu } - - /** * Address 0x7F026364. */ @@ -2008,7 +1985,7 @@ f32 chrlvPathingCollisionRelated(PropRecord *arg0, f32 arg1, f32 arg2, s32 cdtyp dest_z = arg0->pos.f[2] + (sp5C.f[2] * arg2); chrSetMoving(chr, 0); - sub_GAME_7F0B1CC4(); + stanResetHits(); if (stanTestLineUnobstructed(&stan, arg0->pos.f[0], arg0->pos.f[2], dest_x, dest_z, cdtypes, unkHeight, unkA, 0.0f, 1.0f) != 0) { @@ -2028,8 +2005,6 @@ f32 chrlvPathingCollisionRelated(PropRecord *arg0, f32 arg1, f32 arg2, s32 cdtyp } - - /** * Address 0x7F0264B0. */ @@ -2044,13 +2019,11 @@ f32 chrlvPathingCollisionRelated7F0264B0(PropRecord *arg0, f32 arg1, f32 arg2) } - - /** * @param arg0: * @param arg1: * @param arg2: - * @param req_animation_id: Lookup by id property in D_8002C914 + * @param req_animation_id: Lookup by id property in g_HitReactionTable * @param item: argument to bondwalkItemGetForceOfImpact * * Address 0x7F026508. @@ -2067,13 +2040,13 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani s32 animation_something_index; // 136 s32 flag1; // 132 u8 *sp80 = NULL; // ? - struct animation_something *something_ani = NULL; // ? + struct ChrHitReaction *something_ani = NULL; // ? f32 fa; f32 fb; f32 f_under; // 112(sp) f32 f_over; // 108(sp) f32 ft; - struct struck_animation_table *struck_ani; // 100 + struct StruckAnim *struck_ani; // 100 s32 i; flag9c = 1; @@ -2086,9 +2059,9 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani { flag1 = (self->actiontype == ACT_ARGH) && (g_GlobalTimer == self->act_argh.unk30); - for (i=0; D_8002C914[i].id != -1; i++) + for (i=0; g_HitReactionTable[i].hitpart != -1; i++) { - if (req_animation_id == D_8002C914[i].id) + if (req_animation_id == g_HitReactionTable[i].hitpart) { animation_something_index = i; @@ -2123,21 +2096,21 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani ft = f_over - f_under; if ((ft < 10.0f) && (ft > -10.0f)) { - struck_ani = &D_8002DEBC[randomGetNext() & 1]; + struck_ani = &death_stagger[randomGetNext() & 1]; chrStopFiring(self); self->actiontype = ACT_DIE; self->act_die.notifychrindex = 0; - self->act_die.thudframe1 = struck_ani->sfx1_timer_60; - self->act_die.thudframe2 = struck_ani->sfx2_timer_60; + self->act_die.thudframe1 = struck_ani->thudframe1; + self->act_die.thudframe2 = struck_ani->thudframe2; self->sleep = 0; self->act_die.timeextra = 0.0f; - modelSetAnimationWithMerge(model, (void*)struck_ani->anonymous_0, struck_ani->anonymous_1, 0.0f, struck_ani->anonymous_3, 16.0f, flag1 == 0); + modelSetAnimationWithMerge(model, struck_ani->struck_anim, struck_ani->flip, 0.0f, struck_ani->speed, 16.0f, flag1 == 0); - if (struck_ani->anonymous_2 >= 0.0f) + if (struck_ani->endframe >= 0.0f) { - modelSetAnimEndFrame(model, struck_ani->anonymous_2); + modelSetAnimEndFrame(model, struck_ani->endframe); } // Note: PD sets the chrwidth to 10 when a guard dies slumped against an object or wall @@ -2150,9 +2123,9 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani if (another_flag == 0) { - if ((D_8002C914[animation_something_index].field_1C != NULL) && (D_8002C914[animation_something_index].field_20 > 0)) + if ((g_HitReactionTable[animation_something_index].deathAnims != NULL) && (g_HitReactionTable[animation_something_index].deathAnimCount > 0)) { - struct struck_animation_table *struck_anib; // sp(92) + struct StruckAnim *struck_anib; // sp(92) s32 tr; if (0) @@ -2162,26 +2135,26 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani another_flag = 1; - tr = (randomGetNext() % (u32)D_8002C914[animation_something_index].field_20); - struck_anib = &D_8002C914[animation_something_index].field_1C[tr]; + tr = (randomGetNext() % (u32)g_HitReactionTable[animation_something_index].deathAnimCount); + struck_anib = &g_HitReactionTable[animation_something_index].deathAnims[tr]; chrStopFiring(self); self->actiontype = ACT_DIE; self->act_die.notifychrindex = 0; - self->act_die.thudframe1 = struck_anib->sfx1_timer_60; - self->act_die.thudframe2 = struck_anib->sfx2_timer_60; + self->act_die.thudframe1 = struck_anib->thudframe1; + self->act_die.thudframe2 = struck_anib->thudframe2; self->sleep = 0; self->act_die.timeextra = 0.0f; - modelSetAnimationWithMerge(model, (void*)struck_anib->anonymous_0, struck_anib->anonymous_1, 0.0f, struck_anib->anonymous_3, 16.0f, flag1 == 0); + modelSetAnimationWithMerge(model, struck_anib->struck_anim, struck_anib->flip, 0.0f, struck_anib->speed, 16.0f, flag1 == 0); - if ((s32)struck_anib->anonymous_0 == ((s32)&ptr_animation_table->data[(s32)&ANIM_DATA_death_neck]) && ((randomGetNext() % (u32)0x64) != 0)) + if ((s32)struck_anib->struck_anim == ((s32)&ptr_animation_table->data[(s32)&ANIM_DATA_death_neck]) && ((randomGetNext() % (u32)0x64) != 0)) { modelSetAnimEndFrame(model, 241.0f); } - else if (struck_anib->anonymous_2 >= 0.0f) + else if (struck_anib->endframe >= 0.0f) { - modelSetAnimEndFrame(model, struck_anib->anonymous_2); + modelSetAnimEndFrame(model, struck_anib->endframe); } impact_force = bondwalkItemGetForceOfImpact(item); @@ -2191,7 +2164,7 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani impact_force = 6.0f; } - if ((struck_anib->anonymous_4 != 0) && (impact_force > 0.0f)) + if ((struck_anib->knockback != 0) && (impact_force > 0.0f)) { self->act_die.elapseextra = 0.0f; self->act_die.timeextra = ((impact_force * 90.0f) / 6.0f); @@ -2263,29 +2236,29 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani if (another_flag == 0) { - if ((D_8002C914[animation_something_index].field_24 != NULL) && (D_8002C914[animation_something_index].field_28 > 0)) + if ((g_HitReactionTable[animation_something_index].flinchAnims != NULL) && (g_HitReactionTable[animation_something_index].flinchAnimCount > 0)) { - PropRecord *temp_left = chrGetEquippedWeaponProp(self, GUNLEFT); // 80(sp) + PropRecord *temp_left = chrGetEquippedWeaponProp(self, GUNLEFT); PropRecord *temp_right = chrGetEquippedWeaponProp(self, GUNRIGHT); s32 tr; - struct struck_animation_table *struck_ani; // 68(sp) - s32 ff = flag1 == 0; // 52(sp) ?? + struct StruckAnim *struck_ani; + s32 ff = flag1 == 0; another_flag = 1; - something_ani = &D_8002C914[animation_something_index]; + something_ani = &g_HitReactionTable[animation_something_index]; - if (((s32)&D_8002C914[9] == (s32)something_ani) && (temp_left != NULL)) + if (((s32)&g_HitReactionTable[9] == (s32)something_ani) && (temp_left != NULL)) { animation_something_index = 10; } - else if (((s32)&D_8002C914[12] == (s32)something_ani) && (temp_right != NULL)) + else if (((s32)&g_HitReactionTable[12] == (s32)something_ani) && (temp_right != NULL)) { animation_something_index = 13; } - something_ani = &D_8002C914[animation_something_index]; - tr = (randomGetNext() % (u32) something_ani->field_28); - struck_ani = &something_ani->field_24[tr]; + something_ani = &g_HitReactionTable[animation_something_index]; + tr = (randomGetNext() % (u32) something_ani->flinchAnimCount); + struck_ani = &something_ani->flinchAnims[tr]; chrStopFiring(self); @@ -2294,15 +2267,15 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani self->act_argh.unk30 = g_GlobalTimer; self->sleep = 0; - modelSetAnimationWithMerge(model, (void*)struck_ani->anonymous_0, struck_ani->anonymous_1, 0.0f, struck_ani->anonymous_3, 16.0f, ff); + modelSetAnimationWithMerge(model, struck_ani->struck_anim, struck_ani->flip, 0.0f, struck_ani->speed, 16.0f, ff); - if (struck_ani->anonymous_2 >= 0.0f) + if (struck_ani->endframe >= 0.0f) { - modelSetAnimEndFrame(model, chrlvGetGuard007ArghRating(self, struck_ani->anonymous_2, 8.0f)); + modelSetAnimEndFrame(model, chrlvGetGuard007ArghRating(self, struck_ani->endframe, 8.0f)); } else { - modelSetAnimEndFrame(model, chrlvGetGuard007ArghRating(self, (f32)((s32)((u16*)struck_ani->anonymous_0)[2] - (s32)1), 8.0f)); + modelSetAnimEndFrame(model, chrlvGetGuard007ArghRating(self, (f32)((s32)((u16*)struck_ani->struck_anim)[2] - (s32)1), 8.0f)); } } } @@ -2312,13 +2285,13 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani if (flag9c && another_flag) { - if ((self->weapons_held[GUNRIGHT] != NULL) && ((self->weapons_held[GUNRIGHT]->obj->flags & 0x2000) == 0)) + if ((self->weapons_held[GUNRIGHT] != NULL) && ((self->weapons_held[GUNRIGHT]->obj->flags & PROPFLAG_AIUNDROPPABLE) == FALSE)) { propobjSetDropped(self->weapons_held[GUNRIGHT], 1); self->hidden |= CHRHIDDEN_DROP_HELD_ITEMS; } - if ((self->weapons_held[GUNLEFT] != NULL) && ((self->weapons_held[GUNLEFT]->obj->flags & 0x2000) == 0)) + if ((self->weapons_held[GUNLEFT] != NULL) && ((self->weapons_held[GUNLEFT]->obj->flags & PROPFLAG_AIUNDROPPABLE) == FALSE)) { propobjSetDropped(self->weapons_held[GUNLEFT], 1); self->hidden |= CHRHIDDEN_DROP_HELD_ITEMS; @@ -2359,7 +2332,7 @@ s32 chrlvAttackAnimationRelated7F026F30(ChrRecord *self, f32 *result) out_val = self->act_attackroll.animfloats->end_frame; } - if (objecthandlerGetModelField28(self->model) < out_val) + if (modelGetAnimFrame(self->model) < out_val) { *result = out_val; flag = 1; @@ -2369,7 +2342,7 @@ s32 chrlvAttackAnimationRelated7F026F30(ChrRecord *self, f32 *result) else { out_val = self->act_attackroll.animfloats->unk04 - 8.0f; - if (objecthandlerGetModelField28(self->model) < out_val) + if (modelGetAnimFrame(self->model) < out_val) { *result = out_val; flag = 1; @@ -2386,250 +2359,96 @@ s32 chrlvAttackAnimationRelated7F026F30(ChrRecord *self, f32 *result) } - -// # This point forward is definatly chraction.c - -#ifdef NONMATCHING - /** * Address 0x7F027060. - * - * decomp status: - * - compiles: yes - * - stack resize: ok - * - identical instructions: fail - * - identical registers: fail - * - * this file should be chraction.c and with at this point about 2000 lines above - * - * notes: mystery section, seems to be missing something mips_to_c can't see. - * male_guard_yelp_counter, female_guard_yelp_counter are static, need to be moved from chr.c - * Also need to remove female_guard_yelps, male_guard_yelps from chr.c once this matches. -*/ + */ void play_sound_for_shot_actor(ChrRecord *self) { - ALSoundState * sndstate = NULL; - s32 male = 0; - + PropRecord *prop; + bool male; + ALSoundState *sndstate; + static s32 male_guard_yelp_counter = 0; static s32 female_guard_yelp_counter = 0; + + prop = self->prop; + male = 0; - if ((self->prop->type != PROP_TYPE_VIEWER) || (g_playerPointers[getPlayerPointerIndex(self->prop)]->bonddead == FALSE)) + if (prop->type == PROP_TYPE_VIEWER) { - /* - * decomp issue: mystery section. - * what is going on right here? - * self = 104(sp), why is it only loaded six times instead of seven? - */ - if (self->prop->type == PROP_TYPE_VIEWER) + if (g_playerPointers[getPlayerPointerIndex(prop)]->bonddead != FALSE) { - if (getPlayerCount() == 1) - { - if (c_item_entries[self->bodynum].isMale != 0) - { - male = 1; - } - } - else - { - if (get_player_mp_char_gender(getPlayerPointerIndex(self->prop)) != 0) - { - male = 1; - } - } + return; } - else if (c_item_entries[self->bodynum].isMale != 0) + } + + if (self->prop->type == PROP_TYPE_VIEWER) + { + if (getPlayerCount() == 1) { - male = 1; - } - - if (male != 0) - { - //s16 sounds[26] = male_guard_yelps; - s16 sounds[] = { - GET_HIT_MALE0_SFX, GET_HIT_MALE1_SFX, GET_HIT_MALE2_SFX, GET_HIT_MALE3_SFX, GET_HIT_MALE4_SFX, GET_HIT_MALE5_SFX, GET_HIT_MALE6_SFX, GET_HIT_MALE7_SFX, GET_HIT_MALE8_SFX, GET_HIT_MALE9_SFX, - GET_HIT_MALE10_SFX, GET_HIT_MALE11_SFX, GET_HIT_MALE12_SFX, GET_HIT_MALE13_SFX, GET_HIT_MALE14_SFX, GET_HIT_MALE15_SFX, GET_HIT_MALE16_SFX, GET_HIT_MALE17_SFX, GET_HIT_MALE18_SFX, GET_HIT_MALE19_SFX, - GET_HIT_MALE20_SFX, GET_HIT_MALE21_SFX, GET_HIT_MALE22_SFX, GET_HIT_MALE23_SFX, GET_HIT_MALE24_SFX - }; - - sndstate = sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, sounds[male_guard_yelp_counter], NULL); - - male_guard_yelp_counter++; - if (male_guard_yelp_counter >= 25) + if (c_item_entries[self->bodynum].isMale != FALSE) { - male_guard_yelp_counter = 0; + male = TRUE; } } else { - //s16 sounds[4] = female_guard_yelps; - s16 sounds[] = { - GET_HIT_GIRL1_SFX, GET_HIT_GIRL2_SFX, GET_HIT_GIRL3_SFX - }; - - sndstate = sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, sounds[female_guard_yelp_counter], NULL); - - female_guard_yelp_counter++; - if (female_guard_yelp_counter >= 3) + if (get_player_mp_char_gender(getPlayerPointerIndex(self->prop)) != FEMALE) { - female_guard_yelp_counter = 0; + male = TRUE; } } - - chrobjSndCreatePostEventDefault(sndstate, &self->prop->pos); } + else + { + if (c_item_entries[self->bodynum].isMale != FALSE) + { + male = TRUE; + } + } + + if (male) + { + s16 male_yelps[] = { + GET_HIT_MALE0_SFX, GET_HIT_MALE1_SFX, GET_HIT_MALE2_SFX, GET_HIT_MALE3_SFX, GET_HIT_MALE4_SFX, + GET_HIT_MALE5_SFX, GET_HIT_MALE6_SFX, GET_HIT_MALE7_SFX, GET_HIT_MALE8_SFX, GET_HIT_MALE9_SFX, + GET_HIT_MALE10_SFX, GET_HIT_MALE11_SFX, GET_HIT_MALE12_SFX, GET_HIT_MALE13_SFX, GET_HIT_MALE14_SFX, + GET_HIT_MALE15_SFX, GET_HIT_MALE16_SFX, GET_HIT_MALE17_SFX, GET_HIT_MALE18_SFX, GET_HIT_MALE19_SFX, + GET_HIT_MALE20_SFX, GET_HIT_MALE21_SFX, GET_HIT_MALE22_SFX, GET_HIT_MALE23_SFX, GET_HIT_MALE24_SFX + }; + + sndstate = sndPlaySfx(g_musicSfxBufferPtr, male_yelps[male_guard_yelp_counter], NULL); + male_guard_yelp_counter++; + + if (male_guard_yelp_counter >= 25) + { + male_guard_yelp_counter = 0; + } + } + else + { + s16 female_yelps[] = { + GET_HIT_GIRL1_SFX, + GET_HIT_GIRL2_SFX, + GET_HIT_GIRL3_SFX + }; + + sndstate = sndPlaySfx(g_musicSfxBufferPtr, female_yelps[female_guard_yelp_counter], NULL); + female_guard_yelp_counter++; + + if (female_guard_yelp_counter >= 3) + { + female_guard_yelp_counter = 0; + } + } + + chrobjSndCreatePostEventDefault(sndstate, &self->prop->pos); } -#else -GLOBAL_ASM( -.text -glabel play_sound_for_shot_actor -/* 05BB90 7F027060 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 05BB94 7F027064 AFBF0014 */ sw $ra, 0x14($sp) -/* 05BB98 7F027068 AFA40068 */ sw $a0, 0x68($sp) -/* 05BB9C 7F02706C 8C850018 */ lw $a1, 0x18($a0) -/* 05BBA0 7F027070 24010006 */ li $at, 6 -/* 05BBA4 7F027074 00001825 */ move $v1, $zero -/* 05BBA8 7F027078 90AF0000 */ lbu $t7, ($a1) -/* 05BBAC 7F02707C 00A02025 */ move $a0, $a1 -/* 05BBB0 7F027080 55E1000C */ bnel $t7, $at, .L7F0270B4 -/* 05BBB4 7F027084 8FA90068 */ lw $t1, 0x68($sp) -/* 05BBB8 7F027088 0FC26C57 */ jal getPlayerPointerIndex -/* 05BBBC 7F02708C AFA00060 */ sw $zero, 0x60($sp) -/* 05BBC0 7F027090 0002C080 */ sll $t8, $v0, 2 -/* 05BBC4 7F027094 3C198008 */ lui $t9, %hi(g_playerPointers) -/* 05BBC8 7F027098 0338C821 */ addu $t9, $t9, $t8 -/* 05BBCC 7F02709C 8F399EE0 */ lw $t9, %lo(g_playerPointers)($t9) -/* 05BBD0 7F0270A0 8FA30060 */ lw $v1, 0x60($sp) -/* 05BBD4 7F0270A4 8F2800D8 */ lw $t0, 0xd8($t9) -/* 05BBD8 7F0270A8 55000071 */ bnezl $t0, .L7F027270 -/* 05BBDC 7F0270AC 8FBF0014 */ lw $ra, 0x14($sp) -/* 05BBE0 7F0270B0 8FA90068 */ lw $t1, 0x68($sp) -.L7F0270B4: -/* 05BBE4 7F0270B4 24010006 */ li $at, 6 -/* 05BBE8 7F0270B8 8FB90068 */ lw $t9, 0x68($sp) -/* 05BBEC 7F0270BC 8D2A0018 */ lw $t2, 0x18($t1) -/* 05BBF0 7F0270C0 914B0000 */ lbu $t3, ($t2) -/* 05BBF4 7F0270C4 5561001D */ bnel $t3, $at, .L7F02713C -/* 05BBF8 7F0270C8 8328000F */ lb $t0, 0xf($t9) -/* 05BBFC 7F0270CC 0FC26919 */ jal getPlayerCount -/* 05BC00 7F0270D0 AFA30060 */ sw $v1, 0x60($sp) -/* 05BC04 7F0270D4 24010001 */ li $at, 1 -/* 05BC08 7F0270D8 1441000D */ bne $v0, $at, .L7F027110 -/* 05BC0C 7F0270DC 8FA30060 */ lw $v1, 0x60($sp) -/* 05BC10 7F0270E0 8FAC0068 */ lw $t4, 0x68($sp) -/* 05BC14 7F0270E4 3C0F8004 */ lui $t7, %hi(c_item_entries+16) -/* 05BC18 7F0270E8 818D000F */ lb $t5, 0xf($t4) -/* 05BC1C 7F0270EC 000D7080 */ sll $t6, $t5, 2 -/* 05BC20 7F0270F0 01CD7021 */ addu $t6, $t6, $t5 -/* 05BC24 7F0270F4 000E7080 */ sll $t6, $t6, 2 -/* 05BC28 7F0270F8 01EE7821 */ addu $t7, $t7, $t6 -/* 05BC2C 7F0270FC 91EFDE20 */ lbu $t7, %lo(c_item_entries+16)($t7) -/* 05BC30 7F027100 11E00017 */ beqz $t7, .L7F027160 -/* 05BC34 7F027104 00000000 */ nop -/* 05BC38 7F027108 10000015 */ b .L7F027160 -/* 05BC3C 7F02710C 24030001 */ li $v1, 1 -.L7F027110: -/* 05BC40 7F027110 8FB80068 */ lw $t8, 0x68($sp) -/* 05BC44 7F027114 8F040018 */ lw $a0, 0x18($t8) -/* 05BC48 7F027118 0FC26C57 */ jal getPlayerPointerIndex -/* 05BC4C 7F02711C AFA30060 */ sw $v1, 0x60($sp) -/* 05BC50 7F027120 0FC040C3 */ jal get_player_mp_char_gender -/* 05BC54 7F027124 00402025 */ move $a0, $v0 -/* 05BC58 7F027128 1040000D */ beqz $v0, .L7F027160 -/* 05BC5C 7F02712C 8FA30060 */ lw $v1, 0x60($sp) -/* 05BC60 7F027130 1000000B */ b .L7F027160 -/* 05BC64 7F027134 24030001 */ li $v1, 1 -/* 05BC68 7F027138 8328000F */ lb $t0, 0xf($t9) -.L7F02713C: -/* 05BC6C 7F02713C 3C0A8004 */ lui $t2, %hi(c_item_entries+16) -/* 05BC70 7F027140 00084880 */ sll $t1, $t0, 2 -/* 05BC74 7F027144 01284821 */ addu $t1, $t1, $t0 -/* 05BC78 7F027148 00094880 */ sll $t1, $t1, 2 -/* 05BC7C 7F02714C 01495021 */ addu $t2, $t2, $t1 -/* 05BC80 7F027150 914ADE20 */ lbu $t2, %lo(c_item_entries+16)($t2) -/* 05BC84 7F027154 11400002 */ beqz $t2, .L7F027160 -/* 05BC88 7F027158 00000000 */ nop -/* 05BC8C 7F02715C 24030001 */ li $v1, 1 -.L7F027160: -/* 05BC90 7F027160 10600025 */ beqz $v1, .L7F0271F8 -/* 05BC94 7F027164 3C088003 */ lui $t0, %hi(female_guard_yelps) -/* 05BC98 7F027168 3C0B8003 */ lui $t3, %hi(male_guard_yelps) -/* 05BC9C 7F02716C 27A20028 */ addiu $v0, $sp, 0x28 -/* 05BCA0 7F027170 256B09F8 */ addiu $t3, %lo(male_guard_yelps) # addiu $t3, $t3, 0x9f8 -/* 05BCA4 7F027174 256D0030 */ addiu $t5, $t3, 0x30 -/* 05BCA8 7F027178 00407025 */ move $t6, $v0 -.L7F02717C: -/* 05BCAC 7F02717C 8D610000 */ lw $at, ($t3) -/* 05BCB0 7F027180 256B000C */ addiu $t3, $t3, 0xc -/* 05BCB4 7F027184 25CE000C */ addiu $t6, $t6, 0xc -/* 05BCB8 7F027188 ADC1FFF4 */ sw $at, -0xc($t6) -/* 05BCBC 7F02718C 8D61FFF8 */ lw $at, -8($t3) -/* 05BCC0 7F027190 ADC1FFF8 */ sw $at, -8($t6) -/* 05BCC4 7F027194 8D61FFFC */ lw $at, -4($t3) -/* 05BCC8 7F027198 156DFFF8 */ bne $t3, $t5, .L7F02717C -/* 05BCCC 7F02719C ADC1FFFC */ sw $at, -4($t6) -/* 05BCD0 7F0271A0 95610000 */ lhu $at, ($t3) -/* 05BCD4 7F0271A4 3C0F8003 */ lui $t7, %hi(male_guard_yelp_counter) -/* 05BCD8 7F0271A8 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 05BCDC 7F0271AC A5C10000 */ sh $at, ($t6) -/* 05BCE0 7F0271B0 8DEF0A34 */ lw $t7, %lo(male_guard_yelp_counter)($t7) -/* 05BCE4 7F0271B4 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 05BCE8 7F0271B8 00003025 */ move $a2, $zero -/* 05BCEC 7F0271BC 000FC040 */ sll $t8, $t7, 1 -/* 05BCF0 7F0271C0 0058C821 */ addu $t9, $v0, $t8 -/* 05BCF4 7F0271C4 0C002382 */ jal sndPlaySfx -/* 05BCF8 7F0271C8 87250000 */ lh $a1, ($t9) -/* 05BCFC 7F0271CC 3C038003 */ lui $v1, %hi(male_guard_yelp_counter) -/* 05BD00 7F0271D0 8C630A34 */ lw $v1, %lo(male_guard_yelp_counter)($v1) -/* 05BD04 7F0271D4 3C018003 */ lui $at, %hi(male_guard_yelp_counter) -/* 05BD08 7F0271D8 00402025 */ move $a0, $v0 -/* 05BD0C 7F0271DC 24630001 */ addiu $v1, $v1, 1 -/* 05BD10 7F0271E0 AC230A34 */ sw $v1, %lo(male_guard_yelp_counter)($at) -/* 05BD14 7F0271E4 28610019 */ slti $at, $v1, 0x19 -/* 05BD18 7F0271E8 1420001C */ bnez $at, .L7F02725C -/* 05BD1C 7F0271EC 3C018003 */ lui $at, %hi(male_guard_yelp_counter) -/* 05BD20 7F0271F0 1000001A */ b .L7F02725C -/* 05BD24 7F0271F4 AC200A34 */ sw $zero, %lo(male_guard_yelp_counter)($at) -.L7F0271F8: -/* 05BD28 7F0271F8 25080A2C */ addiu $t0, %lo(female_guard_yelps) # addiu $t0, $t0, 0xa2c -/* 05BD2C 7F0271FC 8D010000 */ lw $at, ($t0) -/* 05BD30 7F027200 27A20020 */ addiu $v0, $sp, 0x20 -/* 05BD34 7F027204 3C0D8003 */ lui $t5, %hi(female_guard_yelp_counter) -/* 05BD38 7F027208 AC410000 */ sw $at, ($v0) -/* 05BD3C 7F02720C 95010004 */ lhu $at, 4($t0) -/* 05BD40 7F027210 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 05BD44 7F027214 00003025 */ move $a2, $zero -/* 05BD48 7F027218 A4410004 */ sh $at, 4($v0) -/* 05BD4C 7F02721C 8DAD0A38 */ lw $t5, %lo(female_guard_yelp_counter)($t5) -/* 05BD50 7F027220 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 05BD54 7F027224 000D5840 */ sll $t3, $t5, 1 -/* 05BD58 7F027228 004B7021 */ addu $t6, $v0, $t3 -/* 05BD5C 7F02722C 0C002382 */ jal sndPlaySfx -/* 05BD60 7F027230 85C50000 */ lh $a1, ($t6) -/* 05BD64 7F027234 3C038003 */ lui $v1, %hi(female_guard_yelp_counter) -/* 05BD68 7F027238 8C630A38 */ lw $v1, %lo(female_guard_yelp_counter)($v1) -/* 05BD6C 7F02723C 3C018003 */ lui $at, %hi(female_guard_yelp_counter) -/* 05BD70 7F027240 00402025 */ move $a0, $v0 -/* 05BD74 7F027244 24630001 */ addiu $v1, $v1, 1 -/* 05BD78 7F027248 AC230A38 */ sw $v1, %lo(female_guard_yelp_counter)($at) -/* 05BD7C 7F02724C 28610003 */ slti $at, $v1, 3 -/* 05BD80 7F027250 14200002 */ bnez $at, .L7F02725C -/* 05BD84 7F027254 3C018003 */ lui $at, %hi(female_guard_yelp_counter) -/* 05BD88 7F027258 AC200A38 */ sw $zero, %lo(female_guard_yelp_counter)($at) -.L7F02725C: -/* 05BD8C 7F02725C 8FAF0068 */ lw $t7, 0x68($sp) -/* 05BD90 7F027260 8DE50018 */ lw $a1, 0x18($t7) -/* 05BD94 7F027264 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 05BD98 7F027268 24A50008 */ addiu $a1, $a1, 8 -/* 05BD9C 7F02726C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F027270: -/* 05BDA0 7F027270 27BD0068 */ addiu $sp, $sp, 0x68 -/* 05BDA4 7F027274 03E00008 */ jr $ra -/* 05BDA8 7F027278 00000000 */ nop -) -#endif +//metal_ricochet_SFX and D_80030A44 must be placed here for matching. +s16 metal_ricochet_SFX[3] = {HIT_BULLET_METAL_A3_SFX, HIT_BULLET_METAL_A_SFX, HIT_BULLET_METAL_B_SFX}; +coord3d D_80030A44 = {0, 0, 0}; /** * Address 0x7F02727C. @@ -2714,7 +2533,7 @@ bool handles_shot_actors(ChrRecord *self, s32 hitpart, coord3d *vector, s32 weap f32 damageToCause; s32 playerNum; - damageToCause = bondwalkItemGetDestructionAmount(weaponid); + damageToCause = gunItemGetDestructionAmount(weaponid); if (isPlayer && (getPlayerCount() == 1)) { @@ -2977,78 +2796,39 @@ s32 chrlvExplosionDamage(ChrRecord *self, coord3d *arg1, f32 damage, s32 arg3) } - -#ifdef NONMATCHING /** * Address 0x7F027BF4. -*/ -waypoint *get_ptrpreset_in_table_matching_tile(StandTile* stan) + * + * Given a stan tile, find the first waypoint on that tile. + */ +waypoint *get_ptrpreset_in_table_matching_tile(StandTile *tile) { - waypoint *waypoint; - PadRecord *pad; + waypoint *head; + waypoint *wp; - if (g_CurrentSetup.pathwaypoints != NULL) - { - for (waypoint = g_CurrentSetup.pathwaypoints; waypoint->padID >= 0; waypoint++) - { - pad = &((PadRecord *)g_CurrentSetup.pads)[waypoint->padID]; + head = g_CurrentSetup.pathwaypoints; - if (pad->stan == stan) - { - return waypoint; + if (head != NULL) { + wp = head; + while (wp->padID >= 0) { + PadRecord* var_v0 = &g_CurrentSetup.pads[wp->padID]; + if (tile == var_v0->stan) { + return wp; } + wp++; } } return NULL; } -#else -GLOBAL_ASM( -.text -glabel get_ptrpreset_in_table_matching_tile -/* 05C724 7F027BF4 3C028007 */ lui $v0, %hi(g_CurrentSetup+0) -/* 05C728 7F027BF8 8C425D00 */ lw $v0, %lo(g_CurrentSetup+0)($v0) -/* 05C72C 7F027BFC 00803025 */ move $a2, $a0 -/* 05C730 7F027C00 50400015 */ beql $v0, $zero, .L7F027C58 -/* 05C734 7F027C04 00001025 */ move $v0, $zero -/* 05C738 7F027C08 8C4E0000 */ lw $t6, ($v0) -/* 05C73C 7F027C0C 00401825 */ move $v1, $v0 -/* 05C740 7F027C10 3C058007 */ lui $a1, %hi(g_CurrentSetup+0x18) -/* 05C744 7F027C14 05C0000F */ bltz $t6, .L7F027C54 -/* 05C748 7F027C18 2407002C */ li $a3, 44 -/* 05C74C 7F027C1C 8C440000 */ lw $a0, ($v0) -/* 05C750 7F027C20 8CA55D18 */ lw $a1, %lo(g_CurrentSetup+0x18)($a1) -.L7F027C24: -/* 05C754 7F027C24 00870019 */ multu $a0, $a3 -/* 05C758 7F027C28 00007812 */ mflo $t7 -/* 05C75C 7F027C2C 01E51021 */ addu $v0, $t7, $a1 -/* 05C760 7F027C30 8C580028 */ lw $t8, 0x28($v0) -/* 05C764 7F027C34 54D80004 */ bnel $a2, $t8, .L7F027C48 -/* 05C768 7F027C38 8C640010 */ lw $a0, 0x10($v1) -/* 05C76C 7F027C3C 03E00008 */ jr $ra -/* 05C770 7F027C40 00601025 */ move $v0, $v1 - -/* 05C774 7F027C44 8C640010 */ lw $a0, 0x10($v1) -.L7F027C48: -/* 05C778 7F027C48 24630010 */ addiu $v1, $v1, 0x10 -/* 05C77C 7F027C4C 0481FFF5 */ bgez $a0, .L7F027C24 -/* 05C780 7F027C50 00000000 */ nop -.L7F027C54: -/* 05C784 7F027C54 00001025 */ move $v0, $zero -.L7F027C58: -/* 05C788 7F027C58 03E00008 */ jr $ra -/* 05C78C 7F027C5C 00000000 */ nop -) -#endif - /** * Address 0x7F027C60. */ -s32 check_if_any_path_preset_lies_on_tile(StandTile* arg0) +s32 check_if_any_path_preset_lies_on_tile(StandTile* tile) { - return get_ptrpreset_in_table_matching_tile(arg0) != NULL; + return get_ptrpreset_in_table_matching_tile(tile) != NULL; } @@ -3081,7 +2861,7 @@ waypoint *chrlvStanPathRelated(coord3d *arg0, StandTile *arg1) waypoint *wayp = NULL; s32 *n = NULL; - tile = sub_GAME_7F0B2718(arg1, check_if_any_path_preset_lies_on_tile); + tile = stanFillSearch(arg1, check_if_any_path_preset_lies_on_tile); if (tile != NULL) { ret = get_ptrpreset_in_table_matching_tile(tile); @@ -3216,7 +2996,6 @@ void chrlvActGoposRelated(ChrRecord *self, coord3d *target_point, StandTile **ta } - /** * Address 0x7F027FA8. * PD: func0f0370a8 (but GE has much more cases) @@ -3480,70 +3259,30 @@ s32 chrlvPatrolCalculateStep(ChrRecord *self, bool *forward, s32 numsteps) } - - -#ifdef NONMATCHING - /** * Address 0x7F0283FC. + * * PD: chrPatrolCalculatePadNum (had some nice finds when searching for "patrol" in "chraction.c" in PD) */ -// notes: 99.33% match, only failing regalloc on a single line PadRecord *chrlvGetPatrolStepPad(ChrRecord *self, s32 numsteps) { - s32 data; + waypoint *wp; s32 forward; s32 step; - s32 * padnumptr; + s32 *data; forward = self->act_patrol.forward; step = chrlvPatrolCalculateStep(self, &forward, numsteps); - data = self->act_patrol.path->data[step]; // <---- this line fails regalloc, swapping t0 and v1 - padnumptr = &g_CurrentSetup.pathwaypoints[data].padID; - return &g_CurrentSetup.pads[*padnumptr]; -} -#else -GLOBAL_ASM( -.text -glabel chrlvGetPatrolStepPad -/* 05CF2C 7F0283FC 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 05CF30 7F028400 AFBF0014 */ sw $ra, 0x14($sp) -/* 05CF34 7F028404 8C8E0034 */ lw $t6, 0x34($a0) -/* 05CF38 7F028408 00A03025 */ move $a2, $a1 -/* 05CF3C 7F02840C 27A50020 */ addiu $a1, $sp, 0x20 -/* 05CF40 7F028410 AFA40028 */ sw $a0, 0x28($sp) -/* 05CF44 7F028414 0FC0A0D2 */ jal chrlvPatrolCalculateStep -/* 05CF48 7F028418 AFAE0020 */ sw $t6, 0x20($sp) -/* 05CF4C 7F02841C 8FA70028 */ lw $a3, 0x28($sp) -/* 05CF50 7F028420 0002C880 */ sll $t9, $v0, 2 -/* 05CF54 7F028424 3C058007 */ lui $a1, %hi(g_CurrentSetup+0) -/* 05CF58 7F028428 8CEF002C */ lw $t7, 0x2c($a3) -/* 05CF5C 7F02842C 24A55D00 */ addiu $a1, %lo(g_CurrentSetup+0) # addiu $a1, $a1, 0x5d00 -/* 05CF60 7F028430 8CAA0000 */ lw $t2, ($a1) -/* 05CF64 7F028434 8DF80000 */ lw $t8, ($t7) -/* 05CF68 7F028438 8FBF0014 */ lw $ra, 0x14($sp) -/* 05CF6C 7F02843C 8CAD0018 */ lw $t5, 0x18($a1) -/* 05CF70 7F028440 03191821 */ addu $v1, $t8, $t9 -/* 05CF74 7F028444 8C680000 */ lw $t0, ($v1) -/* 05CF78 7F028448 00084900 */ sll $t1, $t0, 4 -/* 05CF7C 7F02844C 012A2021 */ addu $a0, $t1, $t2 -/* 05CF80 7F028450 8C8B0000 */ lw $t3, ($a0) -/* 05CF84 7F028454 27BD0028 */ addiu $sp, $sp, 0x28 -/* 05CF88 7F028458 000B6080 */ sll $t4, $t3, 2 -/* 05CF8C 7F02845C 018B6023 */ subu $t4, $t4, $t3 -/* 05CF90 7F028460 000C6080 */ sll $t4, $t4, 2 -/* 05CF94 7F028464 018B6023 */ subu $t4, $t4, $t3 -/* 05CF98 7F028468 000C6080 */ sll $t4, $t4, 2 -/* 05CF9C 7F02846C 03E00008 */ jr $ra -/* 05CFA0 7F028470 018D1021 */ addu $v0, $t4, $t5 -) -#endif + data = &self->act_patrol.path->data[step]; + + wp = &g_CurrentSetup.pathwaypoints[*data]; + + return &g_CurrentSetup.pads[wp->padID]; +} /** - * Unknown return type. - * * Address 0x7F028474. */ PadRecord * chrlvGetNextPatrolStepPad(ChrRecord *self) @@ -3569,58 +3308,54 @@ void chrlvSetNextActPatrolStepPadPos(ChrRecord *self) } - - /** * Address 0x7F0284DC. */ -void sub_GAME_7F0284DC(ChrRecord *self) +void chrlvAdvancePatrolStep(ChrRecord *self) { self->act_patrol.nextstep = chrlvPatrolCalculateStep(self, &self->act_patrol.forward, 1); chrlvSetNextActPatrolStepPadPos(self); } - /** * Address 0x7F028510. + * + * Returns true if pos is not inside the 2D collision footprint of + * any normal object (PROP_TYPE_OBJ) in the stan's room. */ -s32 sub_GAME_7F028510(coord3d *point, StandTile *stan) +bool chrlvIsPosClearOfObjectBounds(coord3d *pos, StandTile *stan) { s32 roomids[8]; - s16 *temp_s0; - PropRecord *propss = (PropRecord *)&pos_data_entry; - struct rect4f *polygon; // 68 - s32 edges; + s16 *propnum; + PropRecord *props = (PropRecord *)&g_Props; + struct rect4f *polygon; + s32 numedges; roomids[0] = stan->room; roomids[1] = -1; - roomGetProps((s32*)&roomids); - for (temp_s0 = ptr_list_object_lookup_indices; *temp_s0 >= 0; temp_s0++) + roomGetProps(roomids); + + for (propnum = ptr_list_object_lookup_indices; *propnum >= 0; propnum++) { - PropRecord *prop = &propss[*temp_s0]; + PropRecord *prop = &props[*propnum]; if (prop->type == PROP_TYPE_OBJ) { - chraiGetCollisionBoundsWithoutY(prop, &polygon, &edges); + chraiGetCollisionBoundsWithoutY(prop, &polygon, &numedges); - if ((edges > 0) && chrpropTestPointInPolygon(point, polygon, edges)) + if (numedges > 0 && chrpropTestPointInPolygon(pos, polygon, numedges)) { - return 0; + return FALSE; } } } - return 1; + return TRUE; } - - - - - /** * contrast with @see chrlvTravelTick * Address 0x7F028600. @@ -3630,7 +3365,6 @@ void chrlvTravelTickMagic(ChrRecord *self, struct waydata *arg1, f32 arg2, coord /** * Three unused stack variables. */ - // PropRecord *self_prop; s32 unused1; s32 unused2; @@ -3651,7 +3385,7 @@ void chrlvTravelTickMagic(ChrRecord *self, struct waydata *arg1, f32 arg2, coord if ( (stanTestVolume(&arg4, arg3->f[0], arg3->f[2], self->chrwidth, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, 0.0f, 1.0f) < 0) - && sub_GAME_7F028510(arg3, arg4)) + && chrlvIsPosClearOfObjectBounds(arg3, arg4)) { self_prop = self->prop; self_prop->stan = arg4; @@ -3662,11 +3396,11 @@ void chrlvTravelTickMagic(ChrRecord *self, struct waydata *arg1, f32 arg2, coord setsuboffset(self->model, arg3); sub_GAME_7F01FC10(self->model, &self_prop->pos, &self_prop->pos, &self->ground); - chrPositionRelated7F020D94(self); + chrDetectRooms(self); if (self->actiontype == ACT_PATROL) { - sub_GAME_7F0284DC(self); + chrlvAdvancePatrolStep(self); chrlvSetGoposSegDistTotal(self, arg1, chrlvGetNextPatrolStepPad(self)); } else if (self->actiontype == ACT_GOPOS) @@ -4010,44 +3744,49 @@ void chrlvWalkingAnimationRelated(ChrRecord *self) } - - -#ifdef NONMATCHING - -/* -* 7F0290F8 -*/ +/** + * Address: 7F0290F8 + */ void set_actor_on_path(ChrRecord *self, struct patrol_path *path) { - PadRecord * pad; + PadRecord *pad; s32 next_step = -1; PropRecord *prop = self->prop; s32 count = 0; - s32 index; + PadRecord *new_var; + waypoint *pta; + StandTile *stan; + s32 *dataptr; + f32 dx; + f32 dz; - // decomp problem area: can't seem to get arr[count] to dereference the correct number of times. - for (index = path->data[count] ; index >= 0; count++, index = path->data[count]) + if (path->data[0] >= 0) { - //s32 aa; - - //aa = g_CurrentSetup.pathwaypoints[index].id; - //pad = &g_CurrentSetup.pads[aa]; - waypoint *pta = &g_CurrentSetup.pathwaypoints[index]; - pad = &g_CurrentSetup.pads[pta->padID]; - - if ((pad->stan != NULL) && (prop->stan == pad->stan)) + do { - f32 dx = pad->pos.f[0] - prop->pos.f[0]; - f32 dz = pad->pos.f[2] - prop->pos.f[2]; + dataptr = &path->data[count]; + pta = &g_CurrentSetup.pathwaypoints[*dataptr]; + new_var = &g_CurrentSetup.pads[pta->padID]; + pad = new_var; - if (((((dx * dx) + (dz * dz)) < 10000.0f))) + if ((pad->stan != NULL) && (pad->stan == prop->stan)) { - next_step = count; - break; + dx = pad->pos.f[0] - prop->pos.f[0]; + dz = pad->pos.f[2] - prop->pos.f[2]; + + if (((dx * dx) + (dz * dz)) < 10000.0f) + { + if (((pad->pos.f) && (pad->pos.f)) && (pad->pos.f)); + + next_step = count; + break; + } } + + count++; } + while (path->data[count] >= 0); } - // end problem area. if (next_step < 0) { @@ -4058,23 +3797,25 @@ void set_actor_on_path(ChrRecord *self, struct patrol_path *path) } chrStopFiring(self); + self->actiontype = ACT_PATROL; self->act_patrol.path = path; - self->act_patrol.nextstep = next_step; - self->act_patrol.forward = TRUE; - + self->act_patrol.forward = 1; self->act_patrol.waydata.age = randomGetNext() % 0x64U; self->act_patrol.waydata.unk03 = 0; self->act_init.padding[0x13] = -1; + self->act_patrol.speed = 0.0f; - self->act_patrol.unk7c = 0.0f; chrlvSetNextActPatrolStepPadPos(self); + self->sleep = 0; + chrlvWalkingAnimationRelated(self); + pad = chrlvGetNextPatrolStepPad(self); - if ((self->prop->flags & 2) == 0) + if ((self->prop->flags & PROPFLAG_ONSCREEN) == FALSE) { if (chrlvStanRoomRelatedPad(self, pad) != 0) { @@ -4083,128 +3824,6 @@ void set_actor_on_path(ChrRecord *self, struct patrol_path *path) } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80051DF8 -.word 0x461c4000 /*10000.0*/ -.text -glabel set_actor_on_path -/* 05DC28 7F0290F8 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 05DC2C 7F0290FC AFBF001C */ sw $ra, 0x1c($sp) -/* 05DC30 7F029100 AFB00018 */ sw $s0, 0x18($sp) -/* 05DC34 7F029104 AFA5002C */ sw $a1, 0x2c($sp) -/* 05DC38 7F029108 8CA80000 */ lw $t0, ($a1) -/* 05DC3C 7F02910C 00808025 */ move $s0, $a0 -/* 05DC40 7F029110 240CFFFF */ li $t4, -1 -/* 05DC44 7F029114 8D0F0000 */ lw $t7, ($t0) -/* 05DC48 7F029118 8C870018 */ lw $a3, 0x18($a0) -/* 05DC4C 7F02911C 00003025 */ move $a2, $zero -/* 05DC50 7F029120 05E0002C */ bltz $t7, .L7F0291D4 -/* 05DC54 7F029124 3C098007 */ lui $t1, %hi(g_CurrentSetup+0) -/* 05DC58 7F029128 3C0A8007 */ lui $t2, %hi(g_CurrentSetup+0x18) -/* 05DC5C 7F02912C 3C018005 */ lui $at, %hi(D_80051DF8) -/* 05DC60 7F029130 C42C1DF8 */ lwc1 $f12, %lo(D_80051DF8)($at) -/* 05DC64 7F029134 8D4A5D18 */ lw $t2, %lo(g_CurrentSetup+0x18)($t2) -/* 05DC68 7F029138 8D295D00 */ lw $t1, %lo(g_CurrentSetup+0)($t1) -/* 05DC6C 7F02913C 240B002C */ li $t3, 44 -/* 05DC70 7F029140 0006C080 */ sll $t8, $a2, 2 -.L7F029144: -/* 05DC74 7F029144 01181021 */ addu $v0, $t0, $t8 -/* 05DC78 7F029148 8C590000 */ lw $t9, ($v0) -/* 05DC7C 7F02914C 00196900 */ sll $t5, $t9, 4 -/* 05DC80 7F029150 01A91821 */ addu $v1, $t5, $t1 -/* 05DC84 7F029154 8C6E0000 */ lw $t6, ($v1) -/* 05DC88 7F029158 01CB0019 */ multu $t6, $t3 -/* 05DC8C 7F02915C 00007812 */ mflo $t7 -/* 05DC90 7F029160 01EA2021 */ addu $a0, $t7, $t2 -/* 05DC94 7F029164 8C850028 */ lw $a1, 0x28($a0) -/* 05DC98 7F029168 50A00015 */ beql $a1, $zero, .L7F0291C0 -/* 05DC9C 7F02916C 24C60001 */ addiu $a2, $a2, 1 -/* 05DCA0 7F029170 8CF80014 */ lw $t8, 0x14($a3) -/* 05DCA4 7F029174 57050012 */ bnel $t8, $a1, .L7F0291C0 -/* 05DCA8 7F029178 24C60001 */ addiu $a2, $a2, 1 -/* 05DCAC 7F02917C C4840000 */ lwc1 $f4, ($a0) -/* 05DCB0 7F029180 C4E60008 */ lwc1 $f6, 8($a3) -/* 05DCB4 7F029184 C4880008 */ lwc1 $f8, 8($a0) -/* 05DCB8 7F029188 C4EA0010 */ lwc1 $f10, 0x10($a3) -/* 05DCBC 7F02918C 46062001 */ sub.s $f0, $f4, $f6 -/* 05DCC0 7F029190 460A4081 */ sub.s $f2, $f8, $f10 -/* 05DCC4 7F029194 46000402 */ mul.s $f16, $f0, $f0 -/* 05DCC8 7F029198 00000000 */ nop -/* 05DCCC 7F02919C 46021482 */ mul.s $f18, $f2, $f2 -/* 05DCD0 7F0291A0 46128100 */ add.s $f4, $f16, $f18 -/* 05DCD4 7F0291A4 460C203C */ c.lt.s $f4, $f12 -/* 05DCD8 7F0291A8 00000000 */ nop -/* 05DCDC 7F0291AC 45000003 */ bc1f .L7F0291BC -/* 05DCE0 7F0291B0 00000000 */ nop -/* 05DCE4 7F0291B4 10000007 */ b .L7F0291D4 -/* 05DCE8 7F0291B8 00C06025 */ move $t4, $a2 -.L7F0291BC: -/* 05DCEC 7F0291BC 24C60001 */ addiu $a2, $a2, 1 -.L7F0291C0: -/* 05DCF0 7F0291C0 0006C880 */ sll $t9, $a2, 2 -/* 05DCF4 7F0291C4 01196821 */ addu $t5, $t0, $t9 -/* 05DCF8 7F0291C8 8DAE0000 */ lw $t6, ($t5) -/* 05DCFC 7F0291CC 05C3FFDD */ bgezl $t6, .L7F029144 -/* 05DD00 7F0291D0 0006C080 */ sll $t8, $a2, 2 -.L7F0291D4: -/* 05DD04 7F0291D4 05810002 */ bgez $t4, .L7F0291E0 -/* 05DD08 7F0291D8 02002025 */ move $a0, $s0 -/* 05DD0C 7F0291DC 00006025 */ move $t4, $zero -.L7F0291E0: -/* 05DD10 7F0291E0 0FC0B461 */ jal chrStopFiring -/* 05DD14 7F0291E4 AFAC0020 */ sw $t4, 0x20($sp) -/* 05DD18 7F0291E8 8FAC0020 */ lw $t4, 0x20($sp) -/* 05DD1C 7F0291EC 240F000E */ li $t7, 14 -/* 05DD20 7F0291F0 A20F0007 */ sb $t7, 7($s0) -/* 05DD24 7F0291F4 8FB8002C */ lw $t8, 0x2c($sp) -/* 05DD28 7F0291F8 24190001 */ li $t9, 1 -/* 05DD2C 7F0291FC AE190034 */ sw $t9, 0x34($s0) -/* 05DD30 7F029200 AE0C0030 */ sw $t4, 0x30($s0) -/* 05DD34 7F029204 0C002914 */ jal randomGetNext -/* 05DD38 7F029208 AE18002C */ sw $t8, 0x2c($s0) -/* 05DD3C 7F02920C 24010064 */ li $at, 100 -/* 05DD40 7F029210 0041001B */ divu $zero, $v0, $at -/* 05DD44 7F029214 44803000 */ mtc1 $zero, $f6 -/* 05DD48 7F029218 00006810 */ mfhi $t5 -/* 05DD4C 7F02921C 240EFFFF */ li $t6, -1 -/* 05DD50 7F029220 AE0D0060 */ sw $t5, 0x60($s0) -/* 05DD54 7F029224 A200003B */ sb $zero, 0x3b($s0) -/* 05DD58 7F029228 AE0E0078 */ sw $t6, 0x78($s0) -/* 05DD5C 7F02922C 02002025 */ move $a0, $s0 -/* 05DD60 7F029230 0FC0A125 */ jal chrlvSetNextActPatrolStepPadPos -/* 05DD64 7F029234 E606007C */ swc1 $f6, 0x7c($s0) -/* 05DD68 7F029238 A2000008 */ sb $zero, 8($s0) -/* 05DD6C 7F02923C 0FC0A3EB */ jal chrlvWalkingAnimationRelated -/* 05DD70 7F029240 02002025 */ move $a0, $s0 -/* 05DD74 7F029244 0FC0A11D */ jal chrlvGetNextPatrolStepPad -/* 05DD78 7F029248 02002025 */ move $a0, $s0 -/* 05DD7C 7F02924C 8E0F0018 */ lw $t7, 0x18($s0) -/* 05DD80 7F029250 02002025 */ move $a0, $s0 -/* 05DD84 7F029254 00402825 */ move $a1, $v0 -/* 05DD88 7F029258 91F80001 */ lbu $t8, 1($t7) -/* 05DD8C 7F02925C 33190002 */ andi $t9, $t8, 2 -/* 05DD90 7F029260 57200009 */ bnezl $t9, .L7F029288 -/* 05DD94 7F029264 8FBF001C */ lw $ra, 0x1c($sp) -/* 05DD98 7F029268 0FC09F9C */ jal chrlvStanRoomRelatedPad -/* 05DD9C 7F02926C AFA20024 */ sw $v0, 0x24($sp) -/* 05DDA0 7F029270 10400004 */ beqz $v0, .L7F029284 -/* 05DDA4 7F029274 8FA60024 */ lw $a2, 0x24($sp) -/* 05DDA8 7F029278 02002025 */ move $a0, $s0 -/* 05DDAC 7F02927C 0FC09FA4 */ jal chrlvSetGoposSegDistTotal -/* 05DDB0 7F029280 26050038 */ addiu $a1, $s0, 0x38 -.L7F029284: -/* 05DDB4 7F029284 8FBF001C */ lw $ra, 0x1c($sp) -.L7F029288: -/* 05DDB8 7F029288 8FB00018 */ lw $s0, 0x18($sp) -/* 05DDBC 7F02928C 27BD0028 */ addiu $sp, $sp, 0x28 -/* 05DDC0 7F029290 03E00008 */ jr $ra -/* 05DDC4 7F029294 00000000 */ nop -) -#endif - - void setSeenBondTimeToNow(ChrRecord *self) { @@ -4296,7 +3915,7 @@ bool chrCanSeeBond(ChrRecord *self) if (bondviewGetVisibleToGuardsFlag()) { myprop = self->prop; - bondprop = get_curplayer_positiondata(); + bondprop = getCurrentPlayerProp(); myheight = self->chrheight - 20.0f; chrSetMoving(self, FALSE); @@ -4386,7 +4005,7 @@ s32 chrlvCurrentPlayerCall7F0B0E24(ChrRecord *self) s32 ret; sp3C = self->prop; - bond_prop = get_curplayer_positiondata(); + bond_prop = getCurrentPlayerProp(); ret = 0; bondviewUpdateGuardTankFlagsRelated(g_CurrentPlayer->prop, 0); @@ -4535,7 +4154,7 @@ void chrlvSetTargetToPlayer(ChrRecord *self) { PropRecord *temp_v0; - temp_v0 = get_curplayer_positiondata(); + temp_v0 = getCurrentPlayerProp(); self->lastseetarget60 = g_GlobalTimer; self->lastknowntargetpos.f[0] = temp_v0->pos.f[0]; self->lastknowntargetpos.f[1] = temp_v0->pos.f[1]; @@ -4555,7 +4174,7 @@ void chrlvAlertGuardToPlayerPosition(ChrRecord *self) { PropRecord *temp_v0; - temp_v0 = get_curplayer_positiondata(); + temp_v0 = getCurrentPlayerProp(); self->hidden |= CHRHIDDEN_ALERT_GUARD_RELATED; self->lastheartarget60 = g_GlobalTimer; self->lastknowntargetpos.f[0] = temp_v0->pos.x; @@ -4577,8 +4196,8 @@ bool chrHasStoppedOrPatroling(ChrRecord *self) //chrHasStoppedOrPatroling else if (self->actiontype == ACT_ANIM) { if (self->act_anim.playSfx || - ((modelGetAnimSpeed(self->model) >= 0.0f) && objecthandlerGetModelField28(self->model) >= sub_GAME_7F06F5C4(self->model)) || - ((modelGetAnimSpeed(self->model) < 0.0f) && objecthandlerGetModelField28(self->model) <= 0.0f) + ((modelGetAnimSpeed(self->model) >= 0.0f) && modelGetAnimFrame(self->model) >= modelGetAnimEndFrame(self->model)) || + ((modelGetAnimSpeed(self->model) < 0.0f) && modelGetAnimFrame(self->model) <= 0.0f) ) { return TRUE; @@ -4613,7 +4232,7 @@ bool chrCheckTargetInSight(ChrRecord *self) s32 distance; myprop = self->prop; - bondprop = get_curplayer_positiondata(); + bondprop = getCurrentPlayerProp(); myRadDirection = getsubroty(self->model); //Note: x and z get swapped vec.z = bondprop->pos.x - myprop->pos.x; @@ -4710,7 +4329,7 @@ void chrlvNormDistanceToPlayer(ChrRecord *self, GUNHAND side, vec3d *vec) PropRecord *player_prop; prop = self->prop; - player_prop = get_curplayer_positiondata(); + player_prop = getCurrentPlayerProp(); dx = player_prop->pos.f[0] - prop->pos.f[0]; dz = player_prop->pos.f[2] - prop->pos.f[2]; @@ -4858,7 +4477,7 @@ bool actor_steps_sideways(ChrRecord *self) if (chrIsNotDeadOrShot(self)) { myprop = self->prop; - bondprop = get_curplayer_positiondata(); + bondprop = getCurrentPlayerProp(); myRadDirection = getsubroty(self->model); myRadDirectionToBond = atan2f(bondprop->pos.x - myprop->pos.x, bondprop->pos.z - myprop->pos.z); radChangeToFaceBond = myRadDirectionToBond - myRadDirection; @@ -4914,7 +4533,7 @@ bool actor_hops_sideways(ChrRecord *self) if (chrIsNotDeadOrShot(self)) { myprop = self->prop; - bondprop = get_curplayer_positiondata(); + bondprop = getCurrentPlayerProp(); myRadDirection = getsubroty(self->model); myRadDirectionToBond = atan2f(bondprop->pos.x - myprop->pos.x, bondprop->pos.z - myprop->pos.z); radChangeToFaceBond = myRadDirectionToBond - myRadDirection; @@ -5008,7 +4627,7 @@ bool actor_walks_and_fires(ChrRecord *self) if (chrIsNotDeadOrShot(self)) { myprop = self->prop; - bondprop = get_curplayer_positiondata(); + bondprop = getCurrentPlayerProp(); if ( (chrGetEquippedWeaponPropWithCheck(self, GUNRIGHT) || chrGetEquippedWeaponPropWithCheck(self, GUNLEFT)) @@ -5044,7 +4663,7 @@ bool actor_runs_and_fires(ChrRecord *self) if (chrIsNotDeadOrShot(self)) { myprop = self->prop; - bondprop = get_curplayer_positiondata(); + bondprop = getCurrentPlayerProp(); if ( (chrGetEquippedWeaponPropWithCheck(self, GUNRIGHT) || chrGetEquippedWeaponPropWithCheck(self, GUNLEFT)) @@ -5086,7 +4705,7 @@ bool actor_rolls_fires_crouched(ChrRecord *self) if (chrIsNotDeadOrShot(self)) { myprop = self->prop; - bondprop = get_curplayer_positiondata(); + bondprop = getCurrentPlayerProp(); if (chrGetEquippedWeaponPropWithCheck(self, GUNRIGHT) || chrGetEquippedWeaponPropWithCheck(self, GUNLEFT)) { @@ -5304,7 +4923,7 @@ void chrlvTickStand(ChrRecord *self) if (self->act_stand.prestand != 0) { // needs to save $f0 into sp(0x3c) - if (objecthandlerGetModelField28(self->model) >= sub_GAME_7F06F5C4(self->model)) + if (modelGetAnimFrame(self->model) >= modelGetAnimEndFrame(self->model)) { chrlvIdleAnimationRelated(self, 8.0f); self->act_stand.prestand = 0; @@ -5514,9 +5133,9 @@ void chrlvTickAnim(ChrRecord *self) if (self->act_init.padding[1] == 0) { - f32 sp20 = objecthandlerGetModelField28(self->model); + f32 sp20 = modelGetAnimFrame(self->model); - if (sub_GAME_7F06F5C4(self->model) <= sp20) + if (modelGetAnimEndFrame(self->model) <= sp20) { chrlvKneelingAnimationRelated(self); } @@ -5524,7 +5143,7 @@ void chrlvTickAnim(ChrRecord *self) if ( ((s32)objecthandlerGetModelAnim(self->model) == (s32)&ptr_animation_table->data[(s32)&ANIM_DATA_sneeze]) - && (objecthandlerGetModelField28(self->model) >= 42.0f) + && (modelGetAnimFrame(self->model) >= 42.0f) && !(self->chrflags & CHRFLAG_02000000) ) { @@ -5557,7 +5176,7 @@ void chrlvTickSurrender(ChrRecord *self) self->sleep = 0x10; if (((s32)objecthandlerGetModelAnim(model) == (s32)&ptr_animation_table->data[(s32)&ANIM_DATA_surrendering_armed_drop_weapon]) - && (objecthandlerGetModelField28(model) >= 80.0f)) + && (modelGetAnimFrame(model) >= 80.0f)) { coord3d sp30 = D_80030A44; @@ -5694,7 +5313,7 @@ void chrlvTickDie(ChrRecord *self) static s32 thud_index = 0; - if ((self->act_die.thudframe1 >= 0.0f) && (self->act_die.thudframe1 <= objecthandlerGetModelField28(model))) + if ((self->act_die.thudframe1 >= 0.0f) && (self->act_die.thudframe1 <= modelGetAnimFrame(model))) { p = sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, body_hit_SFX[thud_index], NULL); @@ -5709,7 +5328,7 @@ void chrlvTickDie(ChrRecord *self) self->act_die.thudframe1 = -1.0f; } - if ((self->act_die.thudframe2 >= 0.0f) && (self->act_die.thudframe2 <= objecthandlerGetModelField28(model))) + if ((self->act_die.thudframe2 >= 0.0f) && (self->act_die.thudframe2 <= modelGetAnimFrame(model))) { p = sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, body_hit_SFX[thud_index], NULL); @@ -5724,7 +5343,7 @@ void chrlvTickDie(ChrRecord *self) self->act_die.thudframe2 = -1.0f; } - if (objecthandlerGetModelField28(model) >= sub_GAME_7F06F5C4(model)) + if (modelGetAnimFrame(model) >= modelGetAnimEndFrame(model)) { if ((s32)objecthandlerGetModelAnim(model) == (s32)&ptr_animation_table->data[(s32)&ANIM_DATA_death_left_leg]) { @@ -5757,7 +5376,7 @@ void chrlvTickArgh(ChrRecord *self) { Model *model = self->model; - if (objecthandlerGetModelField28(model) >= sub_GAME_7F06F5C4(model)) + if (modelGetAnimFrame(model) >= modelGetAnimEndFrame(model)) { chrlvSetTargetToPlayer(self); @@ -5786,7 +5405,7 @@ void chrlvTickPreArgh(ChrRecord *self) model = self->model; - if (objecthandlerGetModelField28(model) >= sub_GAME_7F06F5C4(model)) + if (modelGetAnimFrame(model) >= modelGetAnimEndFrame(model)) { sp30.f[0] = self->act_preargh.pos.f[0]; sp30.f[1] = self->act_preargh.pos.f[1]; @@ -5809,7 +5428,7 @@ void chrlvTickSidestep(ChrRecord *self) { Model *model = self->model; - if (objecthandlerGetModelField28(model) >= sub_GAME_7F06F5C4(model)) + if (modelGetAnimFrame(model) >= modelGetAnimEndFrame(model)) { chrlvSetTargetToPlayer(self); chrlvIdleAnimationRelated7F023E14(self, 10.0f); @@ -5828,7 +5447,7 @@ void chrlvTickJumpout(ChrRecord *self) { Model *model = self->model; - if (objecthandlerGetModelField28(model) >= sub_GAME_7F06F5C4(model)) + if (modelGetAnimFrame(model) >= modelGetAnimEndFrame(model)) { chrlvSetTargetToPlayer(self); chrlvKneelingAnimationRelated7F023E48(self); @@ -5849,7 +5468,7 @@ void chrlvTickTest(ChrRecord *self) { Model *model = self->model; - if (objecthandlerGetModelField28(model) >= sub_GAME_7F06F5C4(model)) + if (modelGetAnimFrame(model) >= modelGetAnimEndFrame(model)) { chrlvKneelingAnimationRelated(self); } @@ -5869,12 +5488,12 @@ void chrlvTickStartAlarm(ChrRecord *self) Model *model = self->model; // bug/typo, should be 50.0f on VERSION_EU - if (objecthandlerGetModelField28(model) >= 60.0f) + if (modelGetAnimFrame(model) >= 60.0f) { alarmActivate(); } - if (objecthandlerGetModelField28(model) >= sub_GAME_7F06F5C4(model)) + if (modelGetAnimFrame(model) >= modelGetAnimEndFrame(model)) { chrlvKneelingAnimationRelated7F023E48(self); } @@ -5889,7 +5508,7 @@ void chrlvTickSurprised(ChrRecord *self) { Model *model = self->model; - if (objecthandlerGetModelField28(model) >= sub_GAME_7F06F5C4(model)) + if (modelGetAnimFrame(model) >= modelGetAnimEndFrame(model)) { if ((s32)objecthandlerGetModelAnim(model) == (s32)&ptr_animation_table->data[(s32)&ANIM_DATA_surrendering_armed]) { @@ -5908,28 +5527,14 @@ void chrlvTickSurprised(ChrRecord *self) -#ifdef NONMATCHING -/** - * Address 0x7F02BFE4. - * - * decomp status: - * - compiles: yes - * - stack resize: no - * - identical instructions: fail - * - identical registers: fail - * - * notes: ChrRecord needs some changes, but not sure what to figure out the weird section below. -*/ void sub_GAME_7F02BFE4(ChrRecord *self, s32 arg1, s32 arg2) { PropRecord *prop; - u8 sp33; - u16 sp30; - s32 phi_a1; ChrRecord *temp_v1; - s32 unused[1]; - s32 sp28; - ALSoundState *phi_a2; + s32 phi_a1; + u8 sp33; + s16 sp30; + ALSoundState **phi_a2; prop = chrGetEquippedWeaponProp(self, arg1); temp_v1 = prop->chr; @@ -5940,9 +5545,9 @@ void sub_GAME_7F02BFE4(ChrRecord *self, s32 arg1, s32 arg2) if (arg2 != 0) { - if ((s32) sp33 > 0) + if (sp33 > 0) { - if (((self->hidden & CHRHIDDEN_FIRE_TRACER) == 0) && self->field_178[arg1] < g_GlobalTimer) + if (((self->hidden & 0x80) == 0) && (self->field_178[arg1] < g_GlobalTimer)) { phi_a1 = 1; } @@ -5955,173 +5560,46 @@ void sub_GAME_7F02BFE4(ChrRecord *self, s32 arg1, s32 arg2) if (phi_a1 != 0) { - // begin decomp problem area. - // I can't make sense of this with the current ChrRecord definition. + if (self->field_160[arg1].ptr_SEbuffer1 != NULL) + { + if (sndGetPlayingState(self->field_160[arg1].ptr_SEbuffer1) != 0) + { + sndDeactivate(self->field_160[arg1].ptr_SEbuffer1); + } + } - // if (self->unk160 != NULL) - // { - // if (sndGetPlayingState(self->unk160[arg1]) != AL_STOPPED) - // { - // sndDeactivate(self->unk160[arg1]); - // } - // } + if (self->field_160[arg1].ptr_SEbuffer2 != NULL) + { + if (sndGetPlayingState(self->field_160[arg1].ptr_SEbuffer2) != 0) + { + sndDeactivate(self->field_160[arg1].ptr_SEbuffer2); + } + } - // if (self->unk164[arg1] != NULL) - // { - // if (sndGetPlayingState(self->unk164[arg1]) != AL_STOPPED) - // { - // sndDeactivate(self->unk164[arg1]); - // } - // } + if (((u16) sp30) != 0) + { + phi_a2 = NULL; - // if (sp30 != 0) - // { - // phi_a2 = NULL; - // if (self->unk160[arg1] == NULL) - // { - // phi_a2 = self->unk160[arg1]; - // } - // else if (self->unk164[arg1] == NULL) - // { - // phi_a2 = self->unk164[arg1]; - // } + if (self->field_160[arg1].ptr_SEbuffer1 == NULL) + { + phi_a2 = (ALSoundState **) (&self->field_160[arg1].ptr_SEbuffer1); + } + else if (self->field_160[arg1].ptr_SEbuffer2 == NULL) + { + phi_a2 = (ALSoundState **) (&self->field_160[arg1].ptr_SEbuffer2); + } - // if (phi_a2 != NULL) - // { - // sndPlaySfx(g_musicSfxBufferPtr, (s16) sp30, phi_a2); - // chrobjSndCreatePostEventDefault(phi_a2, &self->prop->pos); - - // self->field_178[arg1] = g_GlobalTimer + sp33; - // self->hidden |= 0x80; - // } - // } - // end decomp problem area. + if (phi_a2 != NULL) + { + sndPlaySfx(g_musicSfxBufferPtr, sp30, (ALSoundState *) phi_a2); + chrobjSndCreatePostEventDefault(*phi_a2, &self->prop->pos); + self->field_178[arg1] = ((0, g_GlobalTimer)) + ((s32) sp33); + self->hidden |= 0x80; + } + } } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F02BFE4 -/* 060B14 7F02BFE4 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 060B18 7F02BFE8 AFBF001C */ sw $ra, 0x1c($sp) -/* 060B1C 7F02BFEC AFB00018 */ sw $s0, 0x18($sp) -/* 060B20 7F02BFF0 00808025 */ move $s0, $a0 -/* 060B24 7F02BFF4 AFA50044 */ sw $a1, 0x44($sp) -/* 060B28 7F02BFF8 0FC08C0B */ jal chrGetEquippedWeaponProp -/* 060B2C 7F02BFFC AFA60048 */ sw $a2, 0x48($sp) -/* 060B30 7F02C000 8C430004 */ lw $v1, 4($v0) -/* 060B34 7F02C004 80640080 */ lb $a0, 0x80($v1) -/* 060B38 7F02C008 AFA00034 */ sw $zero, 0x34($sp) -/* 060B3C 7F02C00C 0FC177FC */ jal bondwalkItemGetSoundTriggerRate -/* 060B40 7F02C010 AFA30038 */ sw $v1, 0x38($sp) -/* 060B44 7F02C014 8FA30038 */ lw $v1, 0x38($sp) -/* 060B48 7F02C018 A3A20033 */ sb $v0, 0x33($sp) -/* 060B4C 7F02C01C 0FC17805 */ jal bondwalkItemGetSound -/* 060B50 7F02C020 80640080 */ lb $a0, 0x80($v1) -/* 060B54 7F02C024 8FAE0048 */ lw $t6, 0x48($sp) -/* 060B58 7F02C028 8FA50034 */ lw $a1, 0x34($sp) -/* 060B5C 7F02C02C A7A20030 */ sh $v0, 0x30($sp) -/* 060B60 7F02C030 11C00012 */ beqz $t6, .L7F02C07C -/* 060B64 7F02C034 93AF0033 */ lbu $t7, 0x33($sp) -/* 060B68 7F02C038 59E00010 */ blezl $t7, .L7F02C07C -/* 060B6C 7F02C03C 24050001 */ li $a1, 1 -/* 060B70 7F02C040 96180012 */ lhu $t8, 0x12($s0) -/* 060B74 7F02C044 8FA80044 */ lw $t0, 0x44($sp) -/* 060B78 7F02C048 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) -/* 060B7C 7F02C04C 33190080 */ andi $t9, $t8, 0x80 -/* 060B80 7F02C050 1720000A */ bnez $t9, .L7F02C07C -/* 060B84 7F02C054 00084880 */ sll $t1, $t0, 2 -/* 060B88 7F02C058 02095021 */ addu $t2, $s0, $t1 -/* 060B8C 7F02C05C 8D4B0178 */ lw $t3, 0x178($t2) -/* 060B90 7F02C060 8D8C837C */ lw $t4, %lo(g_GlobalTimer)($t4) -/* 060B94 7F02C064 016C082A */ slt $at, $t3, $t4 -/* 060B98 7F02C068 10200004 */ beqz $at, .L7F02C07C -/* 060B9C 7F02C06C 00000000 */ nop -/* 060BA0 7F02C070 10000002 */ b .L7F02C07C -/* 060BA4 7F02C074 24050001 */ li $a1, 1 -/* 060BA8 7F02C078 24050001 */ li $a1, 1 -.L7F02C07C: -/* 060BAC 7F02C07C 10A0003F */ beqz $a1, .L7F02C17C -/* 060BB0 7F02C080 8FAD0044 */ lw $t5, 0x44($sp) -/* 060BB4 7F02C084 000D70C0 */ sll $t6, $t5, 3 -/* 060BB8 7F02C088 020E1821 */ addu $v1, $s0, $t6 -/* 060BBC 7F02C08C 8C640168 */ lw $a0, 0x168($v1) -/* 060BC0 7F02C090 5080000A */ beql $a0, $zero, .L7F02C0BC -/* 060BC4 7F02C094 8C64016C */ lw $a0, 0x16c($v1) -/* 060BC8 7F02C098 0C00237C */ jal sndGetPlayingState -/* 060BCC 7F02C09C AFA30028 */ sw $v1, 0x28($sp) -/* 060BD0 7F02C0A0 10400005 */ beqz $v0, .L7F02C0B8 -/* 060BD4 7F02C0A4 8FA30028 */ lw $v1, 0x28($sp) -/* 060BD8 7F02C0A8 8C640168 */ lw $a0, 0x168($v1) -/* 060BDC 7F02C0AC 0C002408 */ jal sndDeactivate -/* 060BE0 7F02C0B0 AFA30028 */ sw $v1, 0x28($sp) -/* 060BE4 7F02C0B4 8FA30028 */ lw $v1, 0x28($sp) -.L7F02C0B8: -/* 060BE8 7F02C0B8 8C64016C */ lw $a0, 0x16c($v1) -.L7F02C0BC: -/* 060BEC 7F02C0BC 5080000A */ beql $a0, $zero, .L7F02C0E8 -/* 060BF0 7F02C0C0 97AF0030 */ lhu $t7, 0x30($sp) -/* 060BF4 7F02C0C4 0C00237C */ jal sndGetPlayingState -/* 060BF8 7F02C0C8 AFA30028 */ sw $v1, 0x28($sp) -/* 060BFC 7F02C0CC 10400005 */ beqz $v0, .L7F02C0E4 -/* 060C00 7F02C0D0 8FA30028 */ lw $v1, 0x28($sp) -/* 060C04 7F02C0D4 8C64016C */ lw $a0, 0x16c($v1) -/* 060C08 7F02C0D8 0C002408 */ jal sndDeactivate -/* 060C0C 7F02C0DC AFA30028 */ sw $v1, 0x28($sp) -/* 060C10 7F02C0E0 8FA30028 */ lw $v1, 0x28($sp) -.L7F02C0E4: -/* 060C14 7F02C0E4 97AF0030 */ lhu $t7, 0x30($sp) -.L7F02C0E8: -/* 060C18 7F02C0E8 51E00025 */ beql $t7, $zero, .L7F02C180 -/* 060C1C 7F02C0EC 8FBF001C */ lw $ra, 0x1c($sp) -/* 060C20 7F02C0F0 8C780168 */ lw $t8, 0x168($v1) -/* 060C24 7F02C0F4 00003025 */ move $a2, $zero -/* 060C28 7F02C0F8 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 060C2C 7F02C0FC 17000003 */ bnez $t8, .L7F02C10C -/* 060C30 7F02C100 87A50030 */ lh $a1, 0x30($sp) -/* 060C34 7F02C104 10000005 */ b .L7F02C11C -/* 060C38 7F02C108 24660168 */ addiu $a2, $v1, 0x168 -.L7F02C10C: -/* 060C3C 7F02C10C 8C79016C */ lw $t9, 0x16c($v1) -/* 060C40 7F02C110 17200002 */ bnez $t9, .L7F02C11C -/* 060C44 7F02C114 00000000 */ nop -/* 060C48 7F02C118 2466016C */ addiu $a2, $v1, 0x16c -.L7F02C11C: -/* 060C4C 7F02C11C 10C00017 */ beqz $a2, .L7F02C17C -/* 060C50 7F02C120 93A80033 */ lbu $t0, 0x33($sp) -/* 060C54 7F02C124 8FA90044 */ lw $t1, 0x44($sp) -/* 060C58 7F02C128 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 060C5C 7F02C12C AFA80028 */ sw $t0, 0x28($sp) -/* 060C60 7F02C130 00095080 */ sll $t2, $t1, 2 -/* 060C64 7F02C134 020A5821 */ addu $t3, $s0, $t2 -/* 060C68 7F02C138 AFAB0024 */ sw $t3, 0x24($sp) -/* 060C6C 7F02C13C 0C002382 */ jal sndPlaySfx -/* 060C70 7F02C140 AFA6002C */ sw $a2, 0x2c($sp) -/* 060C74 7F02C144 8FA6002C */ lw $a2, 0x2c($sp) -/* 060C78 7F02C148 8E050018 */ lw $a1, 0x18($s0) -/* 060C7C 7F02C14C 8CC40000 */ lw $a0, ($a2) -/* 060C80 7F02C150 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 060C84 7F02C154 24A50008 */ addiu $a1, $a1, 8 -/* 060C88 7F02C158 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) -/* 060C8C 7F02C15C 8D8C837C */ lw $t4, %lo(g_GlobalTimer)($t4) -/* 060C90 7F02C160 8FAD0028 */ lw $t5, 0x28($sp) -/* 060C94 7F02C164 8FAF0024 */ lw $t7, 0x24($sp) -/* 060C98 7F02C168 018D7021 */ addu $t6, $t4, $t5 -/* 060C9C 7F02C16C ADEE0178 */ sw $t6, 0x178($t7) -/* 060CA0 7F02C170 96180012 */ lhu $t8, 0x12($s0) -/* 060CA4 7F02C174 37190080 */ ori $t9, $t8, 0x80 -/* 060CA8 7F02C178 A6190012 */ sh $t9, 0x12($s0) -.L7F02C17C: -/* 060CAC 7F02C17C 8FBF001C */ lw $ra, 0x1c($sp) -.L7F02C180: -/* 060CB0 7F02C180 8FB00018 */ lw $s0, 0x18($sp) -/* 060CB4 7F02C184 27BD0040 */ addiu $sp, $sp, 0x40 -/* 060CB8 7F02C188 03E00008 */ jr $ra -/* 060CBC 7F02C18C 00000000 */ nop -) -#endif - /** * Address 0x7F02C190. @@ -6211,7 +5689,7 @@ s32 chrlvSetSubroty(ChrRecord *self, s32 arg1, f32 arg2, f32 arg3, f32 arg4) if (arg1 != 2) { model = self->model; - sp28 = objecthandlerGetModelField28(model); + sp28 = modelGetAnimFrame(model); roty = getsubroty(model); #if defined(BUGFIX_R1) @@ -6231,7 +5709,7 @@ s32 chrlvSetSubroty(ChrRecord *self, s32 arg1, f32 arg2, f32 arg3, f32 arg4) else { PropRecord* p; - p = get_curplayer_positiondata(); + p = getCurrentPlayerProp(); dist = get_distance_actor_to_position(self, &p->pos); } @@ -6338,7 +5816,7 @@ s32 chrlvUpdateAimendsideback(ChrRecord *self, struct weapon_firing_animation_ta if ((attack_type & TARGET_FRONT_OF_CHR) == 0) { - player_prop = get_curplayer_positiondata(); + player_prop = getCurrentPlayerProp(); self_prop = self->prop; current_player_pos = &player_prop->pos; @@ -6837,7 +6315,7 @@ void chrlvUpdateShotbondsum(ChrRecord *self, s32 *arg1, s32 *arg2, ITEM_IDS item s32 padding; // unused s32 phi_v1; - player_prop = get_curplayer_positiondata(); + player_prop = getCurrentPlayerProp(); self_prop = self->prop; dx = player_prop->pos.f[0] - self_prop->pos.f[0]; @@ -6922,7 +6400,7 @@ void chrlvUpdateShotbondsum(ChrRecord *self, s32 *arg1, s32 *arg2, ITEM_IDS item if (self->shotbondsum >= 1.0f) { - t2 = (0.125f * bondwalkItemGetDestructionAmount(item) * g_AiDamageModifier) * get_007_damage_mod(); + t2 = (0.125f * gunItemGetDestructionAmount(item) * g_AiDamageModifier) * get_007_damage_mod(); if ((item == ITEM_SHOTGUN) || (item == ITEM_AUTOSHOT)) { @@ -6978,7 +6456,7 @@ s32 sub_GAME_7F02D630(ChrRecord *self, GUNHAND hand, coord3d *arg2) arg2->f[1] = spB8[1]; arg2->f[2] = spB8[2]; - matrix_4x4_multiply_homogeneous(currentPlayerGetMatrix10D4(), temp_a0, &sp74); + matrix_4x4_multiply_homogeneous(currentPlayerGetViewToWorldMtxf(), temp_a0, &sp74); mtx4TransformVecInPlace(&sp74, arg2); ret = 1; @@ -6986,7 +6464,7 @@ s32 sub_GAME_7F02D630(ChrRecord *self, GUNHAND hand, coord3d *arg2) else if (weapon_prop_model->obj->Switches[1]) { temp_a0_2 = modelFindNodeMtx(weapon_prop_model, weapon_prop_model->obj->Switches[1], 0); - matrix_4x4_multiply_homogeneous(currentPlayerGetMatrix10D4(), temp_a0_2, &sp68); + matrix_4x4_multiply_homogeneous(currentPlayerGetViewToWorldMtxf(), temp_a0_2, &sp68); arg2->f[0] = sp68.m[3][0]; arg2->f[1] = sp68.m[3][1]; @@ -7056,7 +6534,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) sp27C = 0; sp278 = 0; prop_selfchr = weapon_prop->chr; - player_prop = get_curplayer_positiondata(); + player_prop = getCurrentPlayerProp(); phi_v1 = 1; if (self->actiontype == ACT_ATTACK) @@ -7149,7 +6627,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) sp258.f[2] = sp240.f[2] + (sp220.f[2] * M_U16_MAX_VALUE_F); chrSetMoving(self, 0); - sub_GAME_7F0B1CC4(); + stanResetHits(); self_stan = sp238; if (stanTestLineUnobstructed(&self_stan, sp240.f[0], sp240.f[2], sp258.f[0], sp258.f[2], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, sp240.f[1], sp240.f[1], sp258.f[1], sp258.f[1]) == 0) @@ -7189,9 +6667,9 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) sp1BC.f[1] = sp1AC.f[1] * g_GlobalTimerDelta; sp1BC.f[2] = sp1AC.f[2] * g_GlobalTimerDelta; - sub_GAME_7F05EB0C((ObjectRecord *)sp208, &sp240, sp238, &sp16C, &sp1BC, &sp1C8, self_prop); + gunInitProjectileObject((ObjectRecord *)sp208, &sp240, sp238, &sp16C, &sp1BC, &sp1C8, self_prop); - if (sp208->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) + if (sp208->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) { sp208->projectile->flags |= 0x80; sp208->timer = -1; @@ -7207,13 +6685,13 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) sp208->projectile->unk10.y = sp1AC.f[1]; sp208->projectile->unk10.z = sp1AC.f[2]; - if (sp208->projectile->sound1 == NULL) + if (sp208->projectile->sounds[0] == NULL) { - sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, ROCKET_LAUNCH_SFX, (ALSoundState *)&sp208->projectile->sound1); + sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, ROCKET_LAUNCH_SFX, (ALSoundState *)&sp208->projectile->sounds[0]); } - else if (sp208->projectile->sound2 == NULL) + else if (sp208->projectile->sounds[1] == NULL) { - sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, ROCKET_LAUNCH_SFX, (ALSoundState *)&sp208->projectile->sound2); + sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, ROCKET_LAUNCH_SFX, (ALSoundState *)&sp208->projectile->sounds[1]); } } } @@ -7238,9 +6716,9 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) matrix_4x4_set_rotation_around_y(subroty, &sp5C); matrix_4x4_multiply_homogeneous_in_place(&sp5C, &sp9C); sp128->timer = CHRLV_DEFAULT_TIMER; - sub_GAME_7F05EB0C((ObjectRecord *) sp128, &sp240, sp238, &sp9C, &spDC, &spE8, self_prop); + gunInitProjectileObject((ObjectRecord *) sp128, &sp240, sp238, &sp9C, &spDC, &spE8, self_prop); - if (sp128->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) + if (sp128->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) { sp128->projectile->unk8C = 0.3f; sp128->projectile->unk94 = 0.13333333f; @@ -7308,7 +6786,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) { if (sp254 != 0) { - sub_GAME_7F0A3E1C(&sp258, 1, 26.0f, (s16) sp254->room); + bullet_spark_create(&sp258, 1, 26.0f, (s16) sp254->room); } if (stanSavedColl_posData != NULL) @@ -7326,7 +6804,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) { chrobjMaybeDetonateObjectIfFlags( stanSavedColl_posData->obj, - bondwalkItemGetDestructionAmount(prop_selfchr->act_attack.attack_item), + gunItemGetDestructionAmount(prop_selfchr->act_attack.attack_item), &sp258, prop_selfchr->act_attack.attack_item, get_cur_playernum()); @@ -7369,7 +6847,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) if (sp264 != 0) { - CapBeamLengthAndDecideIfRendered(&self->unk180[hand], prop_selfchr->act_attack.attack_item, &sp240, &sp258); + CapBeamLengthAndDecideIfRendered(&self->beams[hand], prop_selfchr->act_attack.attack_item, &sp240, &sp258); } } } @@ -7385,7 +6863,6 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) } - /** * Address 0x7F02E26C. */ @@ -7409,7 +6886,6 @@ void chrlvTriggerFireWeapon(ChrRecord *self) } - /** * Address 0x7F02E2E0. */ @@ -7431,7 +6907,7 @@ s32 chrlvAttackrollAnimationRelated7F02E2E0(ChrRecord *self) modelSetAnimation( model, - (void *) p->anim_num, + (void *) p->anim.anim, sp24, p->shoot_end_frame, chrlvGetGuard007SpeedRating(self, 0.7f, 1.12f), @@ -7449,9 +6925,6 @@ s32 chrlvAttackrollAnimationRelated7F02E2E0(ChrRecord *self) } - - - /** * Address 0x7F02E3B8. */ @@ -7489,7 +6962,6 @@ void chrlvAttackrollAnimationRelated7F02E3B8(ChrRecord *self) } - /** * Address 0x7F02E4C0. * Address 0x7F02E4F4 (VERSION_EU). @@ -7507,7 +6979,7 @@ void chrlvTickAttackCommon(ChrRecord *self) f32 fanon1; // 76 self_model = self->model; - phi_f20 = objecthandlerGetModelField28(self_model); + phi_f20 = modelGetAnimFrame(self_model); if ( #ifdef REFRESH_PAL @@ -7546,12 +7018,12 @@ void chrlvTickAttackCommon(ChrRecord *self) } self->act_attack.unk33 = (s8) (self->act_attack.unk34 + 1); - phi_f20 = objecthandlerGetModelField28(self_model); + phi_f20 = modelGetAnimFrame(self_model); } } } - if (sub_GAME_7F06F5C4(self_model) <= phi_f20) + if (modelGetAnimEndFrame(self_model) <= phi_f20) { if ((self->act_attack.unk37 != 0) || (self->act_attack.unk34 < self->act_attack.unk33)) { @@ -7631,7 +7103,7 @@ void chrlvTickAttackCommon(ChrRecord *self) modelSetAnimEndFrame(self_model, fp2); } - phi_f20 = objecthandlerGetModelField28(self_model); + phi_f20 = modelGetAnimFrame(self_model); } if ((self->act_attack.attacktype & TARGET_DONTTURN) == 0) @@ -7641,9 +7113,9 @@ void chrlvTickAttackCommon(ChrRecord *self) if ((self->act_attack.attacktype & TARGET_AIM_ONLY) != 0) { - if (sub_GAME_7F06F5C4(self_model) < fanon1) + if (modelGetAnimEndFrame(self_model) < fanon1) { - fanon1 = sub_GAME_7F06F5C4(self_model); + fanon1 = modelGetAnimEndFrame(self_model); } } @@ -7773,7 +7245,7 @@ void chrlvTickAttack(ChrRecord *self) f32 phi_f2; self_model = self->model; - temp_f0 = objecthandlerGetModelField28(self_model); + temp_f0 = modelGetAnimFrame(self_model); if (self->act_attack.type_of_motion) { @@ -7809,7 +7281,7 @@ void chrlvTickAttack(ChrRecord *self) if (self->act_attack.type_of_motion == 2) { - if (sub_GAME_7F06F5C4(self_model) <= temp_f0) + if (modelGetAnimEndFrame(self_model) <= temp_f0) { #if defined(VERSION_US) self->act_attack.attacktype |= TARGET_AIM_ONLY; @@ -7846,7 +7318,7 @@ void chrlvTickAttack(ChrRecord *self) return; } - if (sub_GAME_7F06F5C4(self_model) <= temp_f0) + if (modelGetAnimEndFrame(self_model) <= temp_f0) { self->act_attack.attacktype |= TARGET_DONTTURN; self->act_attack.unk30 = 2; @@ -7859,7 +7331,7 @@ void chrlvTickAttack(ChrRecord *self) { if ((self->act_attack.animfloats->recoil_end_frame > 0.0f) && (temp_f0 <= self->act_attack.animfloats->recoil_end_frame)) { - if (sub_GAME_7F06F5C4(self_model) <= temp_f0) + if (modelGetAnimEndFrame(self_model) <= temp_f0) { modelSetAnimation( self_model, @@ -7888,9 +7360,6 @@ void chrlvTickAttack(ChrRecord *self) } - - - /** * Address 0x7F02EEE0. */ @@ -7907,7 +7376,7 @@ void chrlvTickAttackRoll(ChrRecord *self) if (self->act_attackroll.unk35 != 0) { temp_a0 = self->model; - temp_f0 = objecthandlerGetModelField28(temp_a0); + temp_f0 = modelGetAnimFrame(temp_a0); if ( (self->act_attackroll.animfloats == &D_80030078[4]) @@ -7988,7 +7457,7 @@ void chrlvTickAttackRoll(ChrRecord *self) self->act_attackroll.animfloats = phi_v1; self->sleep = 0; - modelSetAnimation(temp_a0, (void *) phi_v1->anim_num, sp38, phi_v1->start_frame, chrlvGetGuard007SpeedRating(self, 0.5f, 0.8f), phi_f2_2); + modelSetAnimation(temp_a0, (void *) phi_v1->anim.anim, sp38, phi_v1->start_frame, chrlvGetGuard007SpeedRating(self, 0.5f, 0.8f), phi_f2_2); if (self->act_attackroll.unk36 != 0) { @@ -8042,7 +7511,7 @@ void chrlvTickAttackRoll(ChrRecord *self) { if ((self->act_attackroll.animfloats->recoil_end_frame > 0.0f) && (temp_f0 <= self->act_attackroll.animfloats->recoil_end_frame)) { - if (sub_GAME_7F06F5C4(temp_a0) <= temp_f0) + if (modelGetAnimEndFrame(temp_a0) <= temp_f0) { modelSetAnimation(temp_a0, objecthandlerGetModelAnim(temp_a0), (s32) temp_a0->gunhand, self->act_attackroll.animfloats->recoil_end_frame, chrlvGetGuard007SpeedRating(self, 0.5f, 0.8f), 16.0f); @@ -8065,8 +7534,6 @@ void chrlvTickAttackRoll(ChrRecord *self) } - - /** * Address 0x7F02F3F8. */ @@ -8078,7 +7545,7 @@ void chrlvTickThrowGrenade(ChrRecord *self) PropRecord *held_prop; self_model = self->model; - temp_f2 = objecthandlerGetModelField28(self_model); + temp_f2 = modelGetAnimFrame(self_model); gunhand = (self_model->gunhand != GUNRIGHT) ? GUNLEFT : GUNRIGHT; held_prop = chrGetEquippedWeaponProp(self, gunhand); @@ -8100,7 +7567,7 @@ void chrlvTickThrowGrenade(ChrRecord *self) self->hidden |= CHRHIDDEN_DROP_HELD_ITEMS; } - if (objecthandlerGetModelField28(self_model) >= sub_GAME_7F06F5C4(self_model)) + if (modelGetAnimFrame(self_model) >= modelGetAnimEndFrame(self_model)) { chrlvKneelingAnimationRelated7F023E48(self); @@ -8114,8 +7581,6 @@ void chrlvTickThrowGrenade(ChrRecord *self) } - - /** * Address 0x7F02F5A4. */ @@ -8125,9 +7590,9 @@ void chrlvTickBondIntro(ChrRecord *self) f32 sp28; self_model = self->model; - sp28 = objecthandlerGetModelField28(self_model); + sp28 = modelGetAnimFrame(self_model); - if ((sp28 < 86.0f) && (sub_GAME_7F06F5C4(self_model) <= sp28)) + if ((sp28 < 86.0f) && (modelGetAnimEndFrame(self_model) <= sp28)) { modelSetAnimation( self_model, @@ -8142,14 +7607,13 @@ void chrlvTickBondIntro(ChrRecord *self) return; } - if (sub_GAME_7F06F5C4(self_model) <= sp28) + if (modelGetAnimEndFrame(self_model) <= sp28) { chrlvKneelingAnimationRelated(self); } } - /** * Address 0x7F02F688. */ @@ -8296,7 +7760,6 @@ s32 chrlvApplySpeed(ChrRecord *self, coord3d *arg1, s32 arg2, f32 *speedPtr) } - /** * Address 0x7F02F888. */ @@ -8311,7 +7774,7 @@ void chrlvTickAttackWalk(ChrRecord *self) self_model = self->model; self_prop = self->prop; - player_prop = get_curplayer_positiondata(); + player_prop = getCurrentPlayerProp(); self->act_attackwalk.clock_timer30 += g_ClockTimer; self->lastwalk60 = g_GlobalTimer; @@ -8320,7 +7783,7 @@ void chrlvTickAttackWalk(ChrRecord *self) || (self->lastmoveok60 < (g_GlobalTimer - CHRLV_LASTMOVEOK60_CHECK)) || (self->act_attackwalk.clock_timer34 < self->act_attackwalk.clock_timer30)) { - if (objecthandlerGetModelField28(self_model) > ((f32)objecthandlerGetModelAnim(self_model)->unk04 * 0.5f)) + if (modelGetAnimFrame(self_model) > ((f32)objecthandlerGetModelAnim(self_model)->unk04 * 0.5f)) { sub_GAME_7F06FE90(self_model, 0.0f, 16.0f); } @@ -8420,8 +7883,6 @@ void chrlvTickAttackWalk(ChrRecord *self) } - - /** * @param arg0: point in 3d * @param arg1: 3 vec @@ -8463,7 +7924,6 @@ s32 chrlvGeometryRelated7F02FC34(coord3d *arg0, coord3d *arg1, coord3d *arg2, f3 } - /** * @param prevpos: point in 3d * @param curpos: 3 vec @@ -8506,7 +7966,6 @@ s32 chrlvIsArrivingLaterallyAtPos(coord3d *prevpos, coord3d *curpos, coord3d *ta } - /** * Address 0x7F02FE78. * PD chrTickRunPos @@ -8535,7 +7994,7 @@ void chrlvTickRunPos(ChrRecord *self) // Maybe had debug side effects, otherwise this doesn't do anything. objecthandlerGetModelAnim(self_model); - phi_f2 = objecthandlerGetModelField28(self_model) - offset; + phi_f2 = modelGetAnimFrame(self_model) - offset; if (phi_f2 < 0.0f) { @@ -8586,7 +8045,6 @@ void chrlvTickRunPos(ChrRecord *self) } - /** * Address 0x7F030128. */ @@ -8618,7 +8076,6 @@ s32 sub_GAME_7F030128(ChrRecord *self, coord3d *point, StandTile *arg2, coord3d } - /** * Address 0x7F0301FC. */ @@ -8680,7 +8137,6 @@ s32 sub_GAME_7F0301FC(ChrRecord *self, coord3d *point, StandTile *arg2, coord3d } - /** * Address 0x7F0304AC. */ @@ -8716,7 +8172,6 @@ s32 sub_GAME_7F0304AC(ChrRecord *self, coord3d *mypos, StandTile *mystan, coord3 } - /** * Unreferenced. * @@ -8791,7 +8246,6 @@ void chrlvSwapIfDiffArg2Determinate(coord3d *arg0, coord3d *arg1, coord3d *arg2) } - /** * Very similar to @see sub_GAME_7F030D70 . * Address 0x7F03081C. @@ -8844,7 +8298,7 @@ s32 sub_GAME_7F03081C(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * sp90 = 1.2f * (arg7 * spA0.f[2]); chrSetMoving(self, 0); - sub_GAME_7F0B1CC4(); + stanResetHits(); spAC = arg2; @@ -9018,7 +8472,7 @@ s32 sub_GAME_7F030D70(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * sp90 = 1.2f * (arg7 * spA0.f[2]); chrSetMoving(self, 0); - sub_GAME_7F0B1CC4(); + stanResetHits(); spAC = arg2; @@ -9151,7 +8605,6 @@ s32 sub_GAME_7F030D70(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * } - /** * Address 0x7F03130C. */ @@ -9248,7 +8701,6 @@ s32 sub_GAME_7F03130C( } - /** * Iterates travel mode. Used by both ACT_GOPOS and ACT_PATROL. * 10% chance to open door. @@ -9637,10 +9089,6 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way } - - - - /** * Address 0x7F032088. */ @@ -9814,7 +9262,6 @@ void chrlvTickGoPos(ChrRecord *self) } - /** * Address 0x7F032548. */ @@ -9861,7 +9308,7 @@ void chrlvTickPatrol(ChrRecord *self) if (chrlvIsArrivingLaterallyAtPos(&self->prevpos, &self_prop->pos, &temp_v0->pos, 30.0f)) { - sub_GAME_7F0284DC(self); + chrlvAdvancePatrolStep(self); temp_v0 = (PadRecord *)chrlvGetNextPatrolStepPad(self); } @@ -9870,7 +9317,6 @@ void chrlvTickPatrol(ChrRecord *self) } - /** * Address 0x7F0326BC. */ @@ -10024,8 +9470,6 @@ s32 chrSawTargetRecently(ChrRecord *self) } - - /** * Address 0x7F032BA0. */ @@ -10039,7 +9483,6 @@ s32 chrHeardTargetRecently(ChrRecord *self) } - /** * Address 0x7F032BD8. * get angle to pos in Radians @@ -10070,11 +9513,10 @@ f32 get_distance_actor_to_position(ChrRecord *self, coord3d *pos) */ f32 chrGetAngleToBond(ChrRecord *self) { - return get_distance_actor_to_position(self, &get_curplayer_positiondata()->pos); + return get_distance_actor_to_position(self, &getCurrentPlayerProp()->pos); } - /** * @param self: * @param flags: Lookup mode. 4 == lookup guard. 8 == lookup pad preset. Else, use current player. @@ -10123,7 +9565,7 @@ coord3d *chrlvGetChrOrPresetLocation(ChrRecord *self, s32 flags, s32 lookup_id, return &preset_pad->pos; } - player_prop = get_curplayer_positiondata(); + player_prop = getCurrentPlayerProp(); *stan = (StandTile *) player_prop->stan; return &player_prop->pos; @@ -10135,9 +9577,9 @@ coord3d *chrlvGetChrOrPresetLocation(ChrRecord *self, s32 flags, s32 lookup_id, */ f32 chrGetAngleFromBond(ChrRecord *self) { - f32 radBondHeading = get_curplay_horizontal_rotation_in_degrees(); + f32 radBondHeading = bondviewGetPlayerYawRadians(); PropRecord *myprop = self->prop; - PropRecord *bondprop = get_curplayer_positiondata(); + PropRecord *bondprop = getCurrentPlayerProp(); f32 anglebetween = atan2f(myprop->pos.x - bondprop->pos.x, myprop->pos.z - bondprop->pos.z); f32 radFromBond = anglebetween - radBondHeading; @@ -10162,7 +9604,7 @@ f32 chrGetDistanceToBond(ChrRecord *guardData) float zDiff; guardPosData = guardData->prop; - playerPosData = get_curplayer_positiondata(); + playerPosData = getCurrentPlayerProp(); xDiff = playerPosData->pos.x - guardPosData->pos.x; yDiff = playerPosData->pos.y - guardPosData->pos.y; zDiff = playerPosData->pos.z - guardPosData->pos.z; @@ -10198,7 +9640,6 @@ f32 chrGetDistanceToPad(ChrRecord *self, s32 padID) } - /** * Address 0x7F032EFC. */ @@ -10284,7 +9725,6 @@ s32 chrResolveId(ChrRecord *self, s32 id) } - /** * Address 0x7F033040. * chrFindById @@ -10313,7 +9753,6 @@ ChrRecord *chrFindById(ChrRecord *self, s32 guard_id) } - /** * Address 0x7F0330C4. */ @@ -10339,7 +9778,6 @@ f32 chrGetDistanceToChr(ChrRecord *self, s32 chrID) } - /** * Address 0x7F033154. */ @@ -10348,7 +9786,7 @@ f32 chrGetDistanceFromBondToPad(ChrRecord *self, s32 padid) PropRecord *bondprop; PadRecord *pad; - bondprop = get_curplayer_positiondata(); + bondprop = getCurrentPlayerProp(); padid = chrResolvePadId(self, padid); if (isNotBoundPad(padid)) @@ -10377,7 +9815,6 @@ void chrSetFlags2(ChrRecord *self, u8 flags2) } - /** * The property is named "flags2". * Address 0x7F03322C. @@ -10388,7 +9825,6 @@ void chrUnsetFlags2(ChrRecord *self, u8 flags2) } - /** * The property is named "flags2". * Address 0x7F033244. @@ -10399,7 +9835,6 @@ s32 chrHasFlags2(ChrRecord *self, u8 flags2) } - /** * The property is named "flags2". * Address 0x7F033260. @@ -10417,7 +9852,6 @@ void chrSetFlags2ById(ChrRecord *self, s32 chrNum, u8 flags2) } - /** * The property is named "flags2". * Address 0x7F033290. @@ -10435,7 +9869,6 @@ void chrUnsetFlags2ById(ChrRecord *self, s32 chrNum, u8 flags2) } - /** * The property is named "flags2". * Address 0x7F0332C0. @@ -10455,7 +9888,6 @@ bool chrHasFlags2ById(ChrRecord *self, s32 chrNum, u8 flags2) } - /** * Address 0x7F0332FC. */ @@ -10465,7 +9897,6 @@ void chrSetStageFlags(ChrRecord *self, s32 arg1) } - /** * Address 0x7F033318. */ @@ -10484,7 +9915,6 @@ bool chrHasStageFlag(ChrRecord *self, s32 flags) } - /** * Address 0x7F033354. */ @@ -10494,7 +9924,6 @@ bool chrIsHearingBond(ChrRecord *self) } - /** * Address 0x7F033364. */ @@ -10511,7 +9940,6 @@ bool chrTrySurrender(ChrRecord *self) } - /** * Address 0x7F0333A0. */ @@ -10523,7 +9951,6 @@ bool chrFadeOut(ChrRecord *self) } - /** * Address 0x7F0333C4. */ @@ -10534,7 +9961,6 @@ void chrRestartTimer(ChrRecord *self) } - /** * Address 0x7F0333D8. */ @@ -10544,7 +9970,6 @@ f32 chrGetTimer(ChrRecord *self) } - /** * Address 0x7F0333F8. */ @@ -10564,7 +9989,7 @@ bool sub_GAME_7F0333F8(ChrRecord *self) getsuboffset(mymodel, &vec); mtx4TransformVecInPlace(camGetWorldToScreenMtxf(), &vec); - if (sub_GAME_7F041074(&zeropos, &pos, &vec, scale)) + if (projectileTestPropBoundingSphere(&zeropos, &pos, &vec, scale)) { return TRUE; } @@ -10574,7 +9999,6 @@ bool sub_GAME_7F0333F8(ChrRecord *self) } - /** * Address 0x7F033490. */ @@ -10584,7 +10008,6 @@ bool chrIfNearMiss(ChrRecord *self) } - /** * Address 0x7F0334A0. */ @@ -10594,7 +10017,7 @@ bool chrGoToBond(ChrRecord *self, SPEED speed) if (chrIsNotDeadOrShot(self) && (g_SeenBondRecentlyGuardCount < 10)) { - bondprop = get_curplayer_positiondata(); + bondprop = getCurrentPlayerProp(); if (plot_course_for_actor(self, &bondprop->pos, bondprop->stan, speed)) { @@ -10632,7 +10055,6 @@ bool chrGoToChr(ChrRecord *self, s32 chrid, SPEED speed) } - /** * Return number of hits. * @@ -10645,7 +10067,6 @@ s8 chrGetNumArghs(ChrRecord *self) } - /** * Return number of near misses * @@ -10680,7 +10101,6 @@ bool chrSawDeath(ChrRecord *self) } - /** * Address 0x7F0335D4. */ @@ -10697,7 +10117,6 @@ bool chraiStopAnimation(ChrRecord *self) } - /** * Address 0x7F033610. */ @@ -10714,7 +10133,6 @@ bool chrTrySurprisedOneHand(ChrRecord *self) } - /** * Address 0x7F03364C. */ @@ -10747,7 +10165,6 @@ bool chrTrySurprisedLookAround(ChrRecord *self) } - /** * Address 0x7F0336C4. */ @@ -10780,7 +10197,6 @@ s32 check_if_able_to_then_perform_animation(ChrRecord *self, s32 animID, s32 sta } - /** * Address 0x7F033760. * PD: chrCanHearAlarm @@ -10797,7 +10213,6 @@ bool chrCanHearAlarm(ChrRecord *self) } - /** * Address 0x7F033780. * PD: waypointIsWithin90DegreesOfPosAngle @@ -10831,8 +10246,6 @@ s32 sub_GAME_7F033780(waypoint *arg0, coord3d *arg1, f32 angle) } - - /** * Attempt to find a waypoint near pos which is in a particular quadrant to pos, * then return its padnum. @@ -10907,7 +10320,6 @@ s32 chrlvFindPathNeighborRelated(coord3d *bondpos, StandTile *stan, f32 rot, u8 } - /** * Address 0x7F033998. */ @@ -10924,7 +10336,7 @@ bool check_2328_preset_set_with_method(ChrRecord *self, u8 quadrant) if ((quadrant == QUADRANT_2NDWPTOTARGET) || (quadrant == QUADRANT_20)) { myprop = self->prop; - bondprop = get_curplayer_positiondata(); + bondprop = getCurrentPlayerProp(); myclosestwaypoint = chrlvStanPathRelated(&myprop->pos, myprop->stan); bondsclosestwaypoint = chrlvStanPathRelated(&bondprop->pos, bondprop->stan); @@ -10941,7 +10353,7 @@ bool check_2328_preset_set_with_method(ChrRecord *self, u8 quadrant) } else { - myclosestwaypoint = sub_GAME_7F08FB90(myclosestwaypoint, bondsclosestwaypoint); + myclosestwaypoint = waypointFindNextStepToward(myclosestwaypoint, bondsclosestwaypoint); if (myclosestwaypoint != NULL) { self->padpreset1 = myclosestwaypoint->padID; @@ -10967,8 +10379,6 @@ bool check_2328_preset_set_with_method(ChrRecord *self, u8 quadrant) } - - /** * Address 0x7F033AAC. */ @@ -10983,8 +10393,8 @@ bool sub_GAME_7F033AAC(ChrRecord *self, u8 padnum) return check_2328_preset_set_with_method(self, padnum); } - sp1C = get_curplay_horizontal_rotation_in_degrees(); - bondprop = get_curplayer_positiondata(); + sp1C = bondviewGetPlayerYawRadians(); + bondprop = getCurrentPlayerProp(); bondnearestpad = chrlvFindPathNeighborRelated(&bondprop->pos, bondprop->stan, sp1C, padnum); if (bondnearestpad >= 0) @@ -10998,7 +10408,6 @@ bool sub_GAME_7F033AAC(ChrRecord *self, u8 padnum) } - /** * Address 0x7F033B38. * PD: chrSetChrPresetToChrNearPos @@ -11039,7 +10448,7 @@ bool sub_GAME_7F033B38(ChrRecord *self, f32 distance) (pos->y <= distplus.y) && (pos->z >= distneg.z) && (pos->z <= distplus.z) && - ((chr->prop->stan->room == myroom) || sub_GAME_7F0B8FD0(myroom, chr->prop->stan->room))) + ((chr->prop->stan->room == myroom) || bgRoomsSharePortal(myroom, chr->prop->stan->room))) { self->chrpreset1 = chr->chrnum; @@ -11051,7 +10460,6 @@ bool sub_GAME_7F033B38(ChrRecord *self, f32 distance) } - /** * Address 0x7F033CF4. */ @@ -11077,7 +10485,6 @@ void chrSetChrPreset2(ChrRecord *self, s32 id, s32 id2) } - /** * Address 0x7F033D5C. */ @@ -11101,7 +10508,6 @@ void chrSetPadPresetByChrnum(ChrRecord *self, s32 chrid, s32 padid) } - /** * Address 0x7F033DC4. */ @@ -11113,11 +10519,11 @@ s32 chrIsTargetNearlyInSight(ChrRecord *self) coord3d sp48; coord3d sp3C; - player_prop = get_curplayer_positiondata(); + player_prop = getCurrentPlayerProp(); self_prop = self->prop; stan = self_prop->stan; - sub_GAME_7F0B1CC4(); + stanResetHits(); if (walkTilesBetweenPoints_NoCallback(&stan, self_prop->pos.x, self_prop->pos.z, player_prop->pos.x, player_prop->pos.z)) { @@ -11139,9 +10545,6 @@ s32 chrIsTargetNearlyInSight(ChrRecord *self) } - - - /** * Address 0x7F033EAC. * PD: chrIsPosOffScreen @@ -11221,7 +10624,6 @@ bool chrAdjustPosForSpawn(coord3d *pos, StandTile **arg1, f32 facing, bool allow } - /** * Address 0x7F03415C. * PD: chrSpawnAtCoord @@ -11272,7 +10674,6 @@ PropRecord *chrSpawnAtCoord(s32 bodynum, s32 headnum, coord3d *pos, StandTile *s } - /** * Address 0x7F034258. */ @@ -11297,7 +10698,6 @@ PropRecord *chrSpawnAtPad(ChrRecord *self, s32 bodynum, s32 headnum, s32 padid, } - /** * Address 0x7F034308. */ @@ -11318,7 +10718,6 @@ PropRecord *chrSpawnAtChr(ChrRecord *self, s32 bodynum, s32 headnum, s32 chrnum, } - /** * Address 0x7F034388. */ @@ -11359,7 +10758,7 @@ bool check_if_actor_is_at_preset(ChrRecord *self, s32 padnum) PropRecord *bondprop; PadRecord *pad; - bondprop = get_curplayer_positiondata(); + bondprop = getCurrentPlayerProp(); padnum = chrResolvePadId(self, padnum); if (isNotBoundPad(padnum)) @@ -11380,7 +10779,6 @@ bool check_if_actor_is_at_preset(ChrRecord *self, s32 padnum) } - /** * Address 0x7F0344FC. */ @@ -11389,6 +10787,7 @@ bool removed_animation_routine_27(ChrRecord *self) return FALSE; } + /** * Address 0x7F034508. */ @@ -11398,7 +10797,6 @@ bool removed_animation_routine_2B(ChrRecord *self) } - /** * Address 0x7F034514. */ @@ -11424,7 +10822,6 @@ bool chrTryStartAlarm(ChrRecord *self, s32 PadId) } - /** * Address 0x7F03457C. */ diff --git a/src/game/chrai.c b/src/game/chrai.c index 60a2ee23..e7ee9d2b 100644 --- a/src/game/chrai.c +++ b/src/game/chrai.c @@ -816,8 +816,7 @@ PathRecord *pathFindById(s32 ID) } // forward -extern void chrpropDelist(PropRecord *prop); -extern PadRecord *dword_CODE_bss_800799F8; +extern PadRecord *g_CameraLookAtBondPad; extern CutsceneRecord *gBondViewCutscene; extern enum CAMERAMODE dword_CODE_bss_80079A18; extern s32 dword_CODE_bss_80079A1C; @@ -2280,7 +2279,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) osSyncPrintf("ai_destroyobj 3 : adddamageobj\n"); #endif - maybe_detonate_object(obj, damage, &obj->runtime_pos, 0x1D, -1); + objApplyDamage(obj, damage, &obj->runtime_pos, 0x1D, -1); } } Offset += sizeof(AiDestroyObjectRecord); @@ -2336,8 +2335,8 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) ObjectRecord *obj = objFindByTagId(ai->OBJECT_TAG); if (obj && obj->prop) { - INV_ITEM_TYPE iType = collect_or_interact_object(obj->prop, FALSE); - propExecuteTickOperation(obj->prop, iType); + TICKOP op = propPickupByPlayer(obj->prop, FALSE); + propExecuteTickOperation(obj->prop, op); } Offset += sizeof(AiBondCollectObjectRecord); break; @@ -2672,7 +2671,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { AiIFBondHealthLessThanRecord *ai = AiListp + Offset; float val = (ai->HEALTH) / 255.0f; - if (val > bondviewGetCurrentPlayerHealth()) + if (val > currentPlayerGetHealth()) { Offset = chraiGoToLabel(AiListp, Offset, ai->GOTOLABEL); } @@ -2686,7 +2685,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { AiIFBondHealthGreaterThanRecord *ai = AiListp + Offset; float val = (ai->HEALTH) / 255.0f; - if (val < bondviewGetCurrentPlayerHealth()) + if (val < currentPlayerGetHealth()) { Offset = chraiGoToLabel(AiListp, Offset, ai->GOTOLABEL); } @@ -3974,11 +3973,11 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) u16 padnum = ntohs(ai->PAD); if (isNotBoundPad(padnum)) { - dword_CODE_bss_800799F8 = &g_CurrentSetup.pads[padnum]; + g_CameraLookAtBondPad = &g_CurrentSetup.pads[padnum]; } else { - dword_CODE_bss_800799F8 = (PadRecord *)&g_CurrentSetup.boundpads[getBoundPadNum(padnum)]; + g_CameraLookAtBondPad = (PadRecord *)&g_CurrentSetup.boundpads[getBoundPadNum(padnum)]; } bondviewSetCameraMode(CAMERAMODE_POSEND); Offset += sizeof(AiCameraLookAtBondFromPadRecord); @@ -3999,7 +3998,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) /*".\\ported\\chrai.c", 0xc2b, "Assertion failed: cdef->type==PROPDEF_CAMERAPOS") */ assert(cdef->type == PROPDEF_CAMERAPOS); #endif - dword_CODE_bss_800799F8 = NULL; + g_CameraLookAtBondPad = NULL; gBondViewCutscene = cdef; dword_CODE_bss_80079A18 = ntohs(ai->LOOK_AT_BOND_FLAG); dword_CODE_bss_80079A1C = ntohs(ai->UNUSED_FLAG); @@ -4013,7 +4012,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { AiIFBondYPosLessThanRecord *ai = AiListp + Offset; f32 bondpos = (s16)ntohs(ai->Y_POS); - if (get_curplayer_positiondata()->pos.y < bondpos) + if (getCurrentPlayerProp()->pos.y < bondpos) { Offset = chraiGoToLabel(AiListp, Offset, ai->GOTOLABEL); } @@ -4101,7 +4100,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) chr->chrflags = chr->chrflags | CHRFLAG_INIT; setsubroty(chr->model, FacingDirection); setsuboffset(chr->model, &pos); - chrPositionRelated7F020D94(chr); + chrDetectRooms(chr); if (chr->prop == g_CurrentPlayer->prop) { g_CurrentPlayer->field_488.collision_position.x = pos.x; @@ -4193,7 +4192,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) door->openPosition = door->maxFrac; door->openedTime = g_GlobalTimer; door->openstate = DOORSTATE_STATIONARY; - door7F052B00(door); + doorUpdateBbox(door); doorActivatePortal(door); // doorActivatePortal door7F053B10(door); } @@ -4350,7 +4349,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) padnum = ntohs(ai->PAD); targetHeight = (s16)ntohs(ai->Y_POS_OFFSET); start = ntohs(ai->INITIAL_ROTATION); - dword_CODE_bss_800799F8 = NULL; + g_CameraLookAtBondPad = NULL; gBondViewCutscene = NULL; flt_CODE_bss_80079A00 = (start * M_TAU_F) / M_U16_MAX_VALUE_F; /*unit direction 0 - 1 (increments are 0.000001) */ flt_CODE_bss_80079A04 = (speed60 * M_TAU_F) / M_U16_MAX_VALUE_F; /*how many increments per frame */ @@ -4503,7 +4502,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { sub_GAME_7F03FDA8(obj->prop); - if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) + if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) { obj->projectile->flags |= 0x601; projectileSetSticky(obj->prop); diff --git a/src/game/chrai.h b/src/game/chrai.h index dcf0ba8a..a3a65c18 100644 --- a/src/game/chrai.h +++ b/src/game/chrai.h @@ -111,7 +111,7 @@ primarily used to reset rotation to 0 /* Rotate Image: 0000000F rrrr.rrrr -[r]otate image incrementally rrrr.rrrr%; +[r]otate image incrementally rrrr.rrrr%; 0x2000 rotates approximately 45 degrees, 0x1555 to mimic a clock */ #define MONROTATEIMAGE(r) 0xF, r @@ -161,7 +161,7 @@ Rotate Image: #define HUNDRED_PERCENT_CHANCE 0xFFFF #define SFX_RELATED_LEN 8 -#define POS_DATA_ENTRY_LEN 600 +#define MAX_PROPS 600 #define PTR_LIST_OBJECT_LOOKUP_INDICES_LEN 512 #define BSS_8007161C_LEN 256 #define BSS_8007161C_DATA_LEN 16 @@ -169,6 +169,7 @@ Rotate Image: #define MAX_HAT_SLOTS 10 #define MAX_AMMO_CRATES 20 #define PROJECTILES_ARR_MAX 20 +#define PROXIMITYARRMAX 30 /*canonical name for max mines*/ #define EMBEDMENT_ARR_MAX 40 #define ONSCREEN_PROP_LIST_LEN 500 @@ -178,7 +179,7 @@ Rotate Image: * Getting a match on alloc_lookup_buffers makes it seem * the struct is just one continuous array. (or maybe there's no struct....) */ -struct roomproplistchunk +struct roomproplistblock { s16 propnums[16]; }; @@ -217,24 +218,24 @@ extern u32 monAnim2DRandEffectFlash[]; extern u32 monAnim00Bond[]; extern u32 monAnim34[]; extern u32 monAnim35Taser[]; -extern WeaponObjRecord* temp_mine_table[30]; +extern WeaponObjRecord* proxy_mine_table[30]; extern f32 gasTimeToFullOpacity; extern u32 gasDoesDamageFlag; extern f32 difficulty ; extern stagesetup g_CurrentSetup; extern s16 * ptr_list_object_lookup_indices; -extern PropRecord pos_data_entry[]; +extern PropRecord g_Props[]; -extern PropRecord *ptr_obj_pos_list_current_entry; -extern PropRecord *ptr_obj_pos_list_first_entry; -extern PropRecord *ptr_obj_pos_list_final_entry; +extern PropRecord *g_ActivePropsTail; +extern PropRecord *g_ActivePropsHead; +extern PropRecord *g_FreeProps; extern s32 g_OnScreenPropCount; extern PropRecord ** g_LastOnScreenProp; extern PropRecord * g_OnScreenPropList[]; extern PropRecord * g_InteractProp; -extern s16 * RoomPropListChunkIndexes; -extern struct roomproplistchunk * RoomPropListChunks; +extern s16 * RoomPropListBlockIndices; +extern struct roomproplistblock * RoomPropListBlocks; extern sfxRecord sfx_related[]; extern struct WeaponObjRecord g_WeaponSlots[]; extern struct HatRecord g_HatSlots[]; @@ -252,54 +253,54 @@ extern struct object_animation_controller g_TaserAnimController; extern stagesetup *g_ptrStageSetupFile; extern char *setup_text_pointers[]; -void alarmDeactivate(void); -s32 chraiitemsize(u8 *AIList, s32 offset); -void check_deactivate_gas_sound(void); -void handle_mp_respawn_and_some_things(void); -void determing_type_of_object_and_detection(void); -void chraiUpdateOnscreenPropCount(void); -void chrpropUpdateAutoaimTarget(void); -void chraiCheckUseHeldItems(void); -bool bond_interact_object(void); -void sub_GAME_7F03D0D4(void); -void chrpropRegisterRoom(PropRecord *, s16); -PropRecord* chrpropAllocate(void); -void chrpropReparent(PropRecord *newChild, PropRecord *host); -void chrpropDeregisterRooms(PropRecord *); -void sub_GAME_7F03E27C(PropRecord *, coord3d *, coord3d *, f32); -void chrpropRegisterRooms(PropRecord *posData); -void chrpropActivate(PropRecord *); -void chrpropEnable(PropRecord *); -void chrpropActivateThisFrame(PropRecord *); -void chrpropReparent(PropRecord *newChild, PropRecord *host); -AIRecord *ailistFindById(s32 ID); -void chraiGetCollisionBounds(PropRecord *prop, struct rect4f **polygon, s32 *edges, f32 *arg3, f32 *arg4); -void sub_GAME_7F03D058(PropRecord *prop, bool unset); -void chraiGetCollisionBoundsWithoutY(PropRecord *prop, struct rect4f **polygon, s32 *edges); -s32 chrpropTestPointInPolygon(coord3d *point, struct rect4f *polygon, s32 edges); -void roomGetProps(s32 *roomids); -ObjectRecord *scan_position_data_table_for_normal_object_at_preset(s32 arg0); -Gfx *chrpropsRenderPass(Gfx *arg0, s32 roomid, s32 arg2); -PropRecord *get_ptr_obj_pos_list_current_entry(void); -void propsDefragRoomProps(void); -void chraiGetPropRoomIds(PropRecord *self, s32 *roomids); -void chrpropFree(PropRecord *prop); -void chrpropDisable(PropRecord *prop); -f32 chrpropBBOXGetXmin(ModelRoData_BoundingBoxRecord *modelBoundingBox); -f32 chrpropBBOXGetYmin(ModelRoData_BoundingBoxRecord *modelBoundingBox); -f32 chrpropBBOXGetYmax(ModelRoData_BoundingBoxRecord *modelBoundingBox); -f32 chrpropBBOXGetZmin(ModelRoData_BoundingBoxRecord *modelBoundingBox); -ObjectRecord *sub_GAME_7F03FAB0(struct coord3d *pos, s32 RoomID); -void chrpropGetCollisionBounds(PropRecord *arg0, f32 *arg1, f32 *arg2, f32 *arg3); -f32 sub_GAME_7F03CFE8(PropRecord *arg0); -f32 chrpropSumMatrixPosX(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); -f32 chrpropSumMatrixNegX(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); -f32 chrpropSumMatrixPosY(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); -f32 chrpropSumMatrixNegY(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); -f32 chrpropSumMatrixPosZ(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); -f32 chrpropSumMatrixNegZ(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); -void sub_GAME_7F03F540(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1, struct rect4f* arg2, struct collision_data *arg3); -void sub_GAME_7F03F948(struct coord3d *arg0, struct coord2d *arg1, struct coord2d *arg2, struct coord2d *arg3, struct coord2d *arg4); -void sub_GAME_7F03E6A0(PropRecord *prop); +void alarmDeactivate(void); +s32 chraiitemsize(u8 *AIList, s32 offset); +void check_deactivate_gas_sound(void); +void chrpropTick(void); +void propsTick(void); +void chraiUpdateOnscreenPropCount(void); +void chrpropUpdateAutoaimTarget(void); +void chraiCheckUseHeldItems(void); +bool bond_interact_object(void); +void propsTickPlayer(void); +void chrpropRegisterRoom(PropRecord *, s16); +PropRecord* chrpropAllocate(void); +void chrpropReparent(PropRecord *newChild, PropRecord *host); +void chrpropDelist(PropRecord *prop); +void chrpropDeregisterRooms(PropRecord *); +void chrpropUpdateRoomList(PropRecord *prop, coord3d *bbmin, coord3d *bbmax, f32 radius); +void chrpropRegisterRooms(PropRecord *posData); +void chrpropActivate(PropRecord *); +void chrpropEnable(PropRecord *); +void chrpropActivateThisFrame(PropRecord *); +AIRecord *ailistFindById(s32 ID); +void chraiGetCollisionBounds(PropRecord *prop, struct rect4f **polygon, s32 *edges, f32 *arg3, f32 *arg4); +void sub_GAME_7F03D058(PropRecord *prop, bool unset); +void chraiGetCollisionBoundsWithoutY(PropRecord *prop, struct rect4f **polygon, s32 *edges); +s32 chrpropTestPointInPolygon(coord3d *point, struct rect4f *polygon, s32 edges); +void roomGetProps(s32 *roomids); +ObjectRecord *scan_position_data_table_for_normal_object_at_preset(s32 arg0); +Gfx *chrpropsRenderPass(Gfx *arg0, s32 roomid, s32 arg2); +PropRecord *chrpropGetActiveTail(void); +void propsDefragRoomProps(void); +void chraiGetPropRoomIds(PropRecord *self, s32 *roomids); +void chrpropFree(PropRecord *prop); +void chrpropDisable(PropRecord *prop); +f32 chrpropBBOXGetXmin(ModelRoData_BoundingBoxRecord *modelBoundingBox); +f32 chrpropBBOXGetYmin(ModelRoData_BoundingBoxRecord *modelBoundingBox); +f32 chrpropBBOXGetYmax(ModelRoData_BoundingBoxRecord *modelBoundingBox); +f32 chrpropBBOXGetZmin(ModelRoData_BoundingBoxRecord *modelBoundingBox); +ObjectRecord *sub_GAME_7F03FAB0(struct coord3d *pos, s32 RoomID); +void chrpropGetCollisionBounds(PropRecord *arg0, f32 *arg1, f32 *arg2, f32 *arg3); +f32 sub_GAME_7F03CFE8(PropRecord *arg0); +f32 chrpropSumMatrixPosX(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); +f32 chrpropSumMatrixNegX(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); +f32 chrpropSumMatrixPosY(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); +f32 chrpropSumMatrixNegY(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); +f32 chrpropSumMatrixPosZ(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); +f32 chrpropSumMatrixNegZ(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); +void sub_GAME_7F03F540(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1, struct rect4f* arg2, struct collision_data *arg3); +void projectRectCornersTo2D(struct coord3d *arg0, struct coord2d *arg1, struct coord2d *arg2, struct coord2d *arg3, struct coord2d *arg4); +void sub_GAME_7F03E6A0(PropRecord *prop); struct PropRecord *propFindForInteract(void); #endif diff --git a/src/game/chrobjdata.h b/src/game/chrobjdata.h index c044ab60..04da0877 100644 --- a/src/game/chrobjdata.h +++ b/src/game/chrobjdata.h @@ -5,10 +5,6 @@ #include #include - - - - struct headHat { float xoffset; @@ -19,6 +15,8 @@ struct headHat float zsize; }; +extern struct headHat headHat_array_8003E464[168]; + extern struct ItemModelFileRecord PitemZ_entries[]; extern struct ModelSkeleton SKELETON(cctv); /* macro declaration for skeleton_cctv */ @@ -37,6 +35,7 @@ extern struct ModelSkeleton SKELETON(hat); /* macro declaration for skeleton_ha extern struct ModelSkeleton SKELETON(standard_object); /* macro declaration for skeleton_standard_object */ extern struct ModelSkeleton SKELETON(prop_weapon); /* macro declaration for skeleton_prop_weapon */ extern struct ModelSkeleton SKELETON(guard); /* macro declaration for skeleton_guard */ +extern struct ModelSkeleton SKELETON(gun_revolver); /* macro declaration for skeleton_gun_revolver */ extern struct ModelNode player_gait_hdr; extern struct ModelNode player_gait_pos_hdr_1; extern struct ModelNode player_gait_pos_hdr_2; diff --git a/src/game/chrprop.c b/src/game/chrprop.c index 4ad7effc..67c901c6 100644 --- a/src/game/chrprop.c +++ b/src/game/chrprop.c @@ -9,31 +9,34 @@ #include #include #include "bg.h" +#include "bgfog.h" #include "bondview.h" #include "cheat.h" #include "chr.h" #include "chrai.h" #include "chraidata.h" #include "chraction.h" -#include "propobj.h" #include "explosion.h" #include "file.h" -#include "bgfog.h" +#include "glass.h" #include "gun.h" #include "initanitable.h" +#include "language.h" #include "loadobjectmodel.h" #include "lv.h" -#include "language.h" +#include "math.h" #include "math_atan2f.h" #include "math_ceil.h" #include "math_floor.h" +#include "model.h" #include "mp_music.h" #include "player.h" +#include "propobj.h" #include "objecthandler.h" #include "objective_status.h" -#include "player.h" #include "stan.h" -#include "model.h" +#include "tex.h" + // bss @@ -41,19 +44,25 @@ //CODE.bss:80069C30 s16 * ptr_list_object_lookup_indices; -//CODE.bss:80069C34 +//CODE.bss:80069C34 canonically roompropsnum u32 num_obj_position_data_entries; /** * Address 0x80069C38. + * + * This 600 length prop pool provides storage for every PropRecord in the game. + * Props are never allocated anywhere else. init_load_objpos_table threads + * all 600 slots onto the free list, and chrpropAllocate/chrpropFree pop and push to that list. + * + * This is g_Vars.props in PD. */ -PropRecord pos_data_entry[POS_DATA_ENTRY_LEN]; +PropRecord g_Props[MAX_PROPS]; //CODE.bss:80071618 -s16 *RoomPropListChunkIndexes; +s16 *RoomPropListBlockIndices; //CODE.bss:8007161C -struct roomproplistchunk *RoomPropListChunks; +struct roomproplistblock *RoomPropListBlocks; /** * Array of pointers, containing onscreen props. @@ -80,7 +89,7 @@ PropRecord *g_InteractProp; //CODE.bss:80071DFC u32 dword_CODE_bss_80071DFC; //CODE.bss:80071E00 -WeaponObjRecord* temp_mine_table[30]; +WeaponObjRecord* proxy_mine_table[30]; //CODE.bss:80071E78 f32 gasTimeToFullOpacity; @@ -166,21 +175,20 @@ stagesetup g_CurrentSetup; //Public Working Setup //CODE.bss:80075D28 stagesetup *g_ptrStageSetupFile; -PropRecord *ptr_obj_pos_list_current_entry = 0; -PropRecord *ptr_obj_pos_list_first_entry = 0; -PropRecord *ptr_obj_pos_list_final_entry = 0; +PropRecord *g_ActivePropsTail = 0; +PropRecord *g_ActivePropsHead = 0; +PropRecord *g_FreeProps = 0; + f32 difficulty = 1.0; struct coord2d g_DefaultAutoAimCoord = { 0 }; - - // forward declarations Gfx *chrpropRender(Gfx *arg0, PropRecord *arg1, s32 withalpha); void chraiCheckUseHeldItem(s32 hand); void chraiDefaultWeaponFireHandler(s32); -void chraiFistAttackHandler(s32, s32); -void propExecuteTickOperation(PropRecord *prop, INV_ITEM_TYPE op); +void chraiFistAttackHandler(s32 hand, s32 item_id); +void modelGetAxisExtents(Model* model, f32* max, f32* min, s32 axis); // end forward declarations @@ -201,7 +209,7 @@ void chraiUpdateOnscreenPropCount(void) i = 0; count = 0; - prop = get_ptr_obj_pos_list_current_entry(); + prop = chrpropGetActiveTail(); for (; prop != NULL; prop = prop->prev) { @@ -264,26 +272,20 @@ void chrpropDisable(PropRecord *prop) } - - - - - -PropRecord *get_ptr_obj_pos_list_current_entry(void) +PropRecord *chrpropGetActiveTail(void) { - return ptr_obj_pos_list_current_entry; + return g_ActivePropsTail; } - PropRecord* chrpropAllocate(void) { PropRecord* prop; - if (ptr_obj_pos_list_final_entry) + if (g_FreeProps) { - prop = ptr_obj_pos_list_final_entry; - ptr_obj_pos_list_final_entry = prop->prev; + prop = g_FreeProps; + g_FreeProps = prop->prev; prop->prev = NULL; prop->next = NULL; @@ -303,10 +305,10 @@ PropRecord* chrpropAllocate(void) void chrpropFree(PropRecord *prop) { - prop->prev = ptr_obj_pos_list_final_entry; + prop->prev = g_FreeProps; prop->next = 0x0; prop->stan = 0x0; - ptr_obj_pos_list_final_entry = prop; + g_FreeProps = prop; } @@ -314,39 +316,39 @@ void chrpropActivate(PropRecord* prop) { PropRecord* cur; - cur = ptr_obj_pos_list_current_entry; + cur = g_ActivePropsTail; if (cur != NULL) { cur->next = prop; - prop->prev = ptr_obj_pos_list_current_entry; + prop->prev = g_ActivePropsTail; prop->next = NULL; - ptr_obj_pos_list_current_entry = prop; + g_ActivePropsTail = prop; return; } prop->prev = NULL; prop->next = NULL; - ptr_obj_pos_list_current_entry = ptr_obj_pos_list_first_entry = prop; + g_ActivePropsTail = g_ActivePropsHead = prop; } void chrpropActivateThisFrame(PropRecord* prop) { PropRecord* first; - first = ptr_obj_pos_list_first_entry; + first = g_ActivePropsHead; if (first != NULL) { first->prev = prop; - prop->next = ptr_obj_pos_list_first_entry; + prop->next = g_ActivePropsHead; prop->prev = NULL; - ptr_obj_pos_list_first_entry = prop; + g_ActivePropsHead = prop; return; } prop->prev = NULL; prop->next = NULL; - ptr_obj_pos_list_first_entry = prop; - ptr_obj_pos_list_current_entry = prop; + g_ActivePropsHead = prop; + g_ActivePropsTail = prop; } @@ -355,13 +357,13 @@ void chrpropDelist(PropRecord *prop) PropRecord *temp_v0; PropRecord *temp_v0_2; - if (prop == ptr_obj_pos_list_current_entry) + if (prop == g_ActivePropsTail) { - ptr_obj_pos_list_current_entry = prop->prev; + g_ActivePropsTail = prop->prev; } - if (prop == ptr_obj_pos_list_first_entry) + if (prop == g_ActivePropsHead) { - ptr_obj_pos_list_first_entry = prop->next; + g_ActivePropsHead = prop->next; } temp_v0 = prop->prev; if (temp_v0 != 0) @@ -378,9 +380,6 @@ void chrpropDelist(PropRecord *prop) } - - - void chrpropReparent(PropRecord *newChild, PropRecord *host) { newChild->parent = host; @@ -398,7 +397,6 @@ void chrpropReparent(PropRecord *newChild, PropRecord *host) } - void chrpropDetach(PropRecord* prop) { PropRecord* parent; PropRecord* prev; @@ -424,12 +422,8 @@ void chrpropDetach(PropRecord* prop) { } - - - - /** - * Address 0x7F03A62C. + * Address: 7F03A62C */ Gfx *chrpropRender(Gfx * gdl, PropRecord *prop, s32 withalpha) { @@ -462,10 +456,8 @@ Gfx *chrpropRender(Gfx * gdl, PropRecord *prop, s32 withalpha) } - - /** - * Address 0x7F03A6F4. + * Address: 7F03A6F4 */ Gfx *chrpropsRenderPass(Gfx *gdl, s32 roomid, s32 renderpass) { @@ -501,20 +493,20 @@ Gfx *chrpropsRenderPass(Gfx *gdl, s32 roomid, s32 renderpass) { flag = 0; - if ((renderpass == 0) && ((prop->flags & 0x21) == 0)) + if ((renderpass == 0) && ((prop->flags & (PROPFLAG_00000020 | PROPFLAG_RENDERPOSTBG)) == 0)) { flag = 1; } - else if ((renderpass == 2) && ((prop->flags & 0x21) == 1)) + else if ((renderpass == 2) && ((prop->flags & (PROPFLAG_00000020 | PROPFLAG_RENDERPOSTBG)) == PROPFLAG_RENDERPOSTBG)) { flag = 1; } - + if (flag != 0) { flag = 0; chraiGetPropRoomIds(prop, sp48); - + for (rp = sp48; *rp >= 0; rp++) { if (getROOMID_isRendered(*rp)) @@ -562,7 +554,7 @@ Gfx *chrpropsRenderPass(Gfx *gdl, s32 roomid, s32 renderpass) if (flag) { - if (prop->flags & 0x20) + if (prop->flags & PROPFLAG_00000020) { gdl = chrpropRender(gdl, prop, 0); } @@ -577,1692 +569,872 @@ Gfx *chrpropsRenderPass(Gfx *gdl, s32 roomid, s32 renderpass) } +/** + * Address: 7F03A97C + * + * Tests if a ray intersects the bounding box of the given room. + * @return TRUE if the ray intersects, otherwise FALSE. +*/ +s32 chrpropRayIntersectsRoomBbox(s32 room, coord3d* start, coord3d* dir) +{ + s32 max[3]; + s32 min[3]; + s_room_info* roominfo; + + roominfo = &g_BgRoomInfo[room]; + + // Skip check if room has no collision data + if (roominfo->vtx_batch_bounds != NULL) + { + min[0] = roominfo->minbounds.f[0]; + min[1] = roominfo->minbounds.f[1]; + min[2] = roominfo->minbounds.f[2]; + max[0] = roominfo->maxbounds.f[0]; + max[1] = roominfo->maxbounds.f[1]; + max[2] = roominfo->maxbounds.f[2]; + if (bgTestRayIntersectsBbox(start, dir, min, max)) { + return TRUE; + } + } + return FALSE; +} /** - * Address 0x7F03A97C. -*/ -s32 sub_GAME_7F03A97C(s32 index, coord3d* arg1, coord3d* arg2) { - s32 sp2C[3]; - s32 sp20[3]; - s_room_info* temp_v0; + * Address: 7F03AA44 + * + * Unreferenced + * + * This takes a list of rooms and flags the ones that do *not* intersect a ray. + */ +void chrpropFlagRoomsFromRayTest(s32 arg0, coord3d *from, coord3d *to, u8 *rooms) +{ + coord3d start; + coord3d dir; + f32 scale; + s32 i; - temp_v0 = &g_BgRoomInfo[index]; - if (temp_v0->ptr_unique_collision_points != NULL) { - sp20[0] = temp_v0->minbounds.f[0]; - sp20[1] = temp_v0->minbounds.f[1]; - sp20[2] = temp_v0->minbounds.f[2]; - sp2C[0] = temp_v0->maxbounds.f[0]; - sp2C[1] = temp_v0->maxbounds.f[1]; - sp2C[2] = temp_v0->maxbounds.f[2]; - if (bgTestLineIntersectsBbox(arg1, arg2, sp20, sp2C) != 0) { - return 1; + scale = get_room_data_float1() * bgGetLevelVisibilityScale(); + + dir.x = to->x - from->x; + dir.y = to->y - from->y; + dir.z = to->z - from->z; + + start.x = from->x * scale; + start.y = from->y * scale; + start.z = from->z * scale; + + for (i = 1; i < getMaxNumRooms(); i++) { + if (!rooms[i] && chrpropRayIntersectsRoomBbox(i, &start, &dir) == 0) { + rooms[i] = 1; } } +} + + +/** + * Address: 7F03AB58 + * + * Refines an existing background bullet hit by checking currently visible rooms + * that have not already been tested. + * + * The function scans the visible room list, marks each tested room in visited, + * performs a room bbox test first, then tests the room geometry. If no previous hit exists, + * the first visible room hit is accepted. + * Otherwise, a hit is accepted only if it lies between from and the current + * best hit on all three axes, making it closer along the shot ray. + * + * @return Returns the room number of the accepted hit, or the bestroom if no + * closer visible room hit is found. + */ +s32 chrpropFindCloserBgHitInVisibleRooms(coord3d *from, coord3d *to, coord3d *dir, coord3d *scaledDir, u8 *visited, struct HitThing *besthit, s32 bestroom) +{ + s32 rooms[100]; + s32 *roomptr; + s32 *end; + s32 numrooms; + struct HitThing hit; + f32 scale; + s32 room; + + scale = get_room_data_float2(); + + // Get up to 100 currently visible rooms. + numrooms = bgCopyVisibleRoomsToList(&rooms[0], 100); + + if (numrooms > 0) + { + roomptr = rooms; + // The bitwise AND is just a matching trick and effectively does nothing. + end = roomptr + (numrooms & 0xFFFFFFFF); + + do + { + // Only check rooms that have not been visited. + if (visited[*roomptr] == 0) + { + visited[*roomptr] = 1; + + if (chrpropRayIntersectsRoomBbox(*roomptr, scaledDir, dir)) + { + if (bgTestBulletHitBackground(from, to, *roomptr, &hit)) + { + room = *roomptr; + hit.hitpos.x *= scale; + hit.hitpos.y *= scale; + hit.hitpos.z *= scale; + + /** + * The (numrooms * 0) is weird but harmless and needed for matching. + */ + if ((bestroom <= (numrooms * 0)) + || (((((from->x <= besthit->hitpos.x) + && (from->x <= hit.hitpos.x)) + && (hit.hitpos.x < besthit->hitpos.x)) + || (((besthit->hitpos.x <= from->x) + && (hit.hitpos.x <= from->x)) + && (besthit->hitpos.x < hit.hitpos.x))) + && ((((from->y <= besthit->hitpos.y) + && (from->y <= hit.hitpos.y)) + && (hit.hitpos.y < besthit->hitpos.y)) + || (((besthit->hitpos.y <= from->y) + && (hit.hitpos.y <= from->y)) + && (besthit->hitpos.y < hit.hitpos.y))) + && ((((from->z <= besthit->hitpos.z) + && (from->z <= hit.hitpos.z)) + && (hit.hitpos.z < besthit->hitpos.z)) + || (((besthit->hitpos.z <= from->z) + && (hit.hitpos.z <= from->z)) + && (besthit->hitpos.z < hit.hitpos.z))))) + { + bestroom = room; + *besthit = hit; + } + } + } + } + + roomptr++; + } + while (roomptr < end); + + if (rooms); + } + + return bestroom; +} + + +/** + * Address: 7F03ADF4 + * + * Beginning at startroom, walk connected rooms looking for a background + * bullet hit. + * + * Rooms are skipped if already marked in visited, and newly processed rooms are + * marked visited. + * @return Return 0 if no hit is found, otherwise the room number of the first room whose bbox and + * background geometry intersect the bullet ray. + */ +s32 chrpropFindFirstBgHitInConnectedRooms(s32 startroom, coord3d *from, coord3d *to, coord3d *dir, coord3d *scaledDir, u8 *visited, struct HitThing *hit) +{ + u8 rooms[256]; + s32 pad; + s32 neighbours[100]; + s32 numneighbours; + s32 i; + s32 j; + s32 count; + s32 curindex; + s32 room; + + rooms[0] = startroom; + count = 1; + + for (curindex = 0; curindex < count; curindex++) + { + room = rooms[curindex]; + + if (visited[room] == 0) + { + visited[room] = 1; + + if (chrpropRayIntersectsRoomBbox(room, scaledDir, dir)) + { + if (bgTestBulletHitBackground(from, to, room, hit)) + { + return room; + } + } + } + + numneighbours = bgGetConnectedRooms(room, neighbours, 100); + + for (i = 0; i < numneighbours; i++) + { + for (j = 0; j < count; j++) + { + if (rooms[j] == neighbours[i]) + { + break; + } + } + + if (j == count) + { + rooms[count] = neighbours[i]; + count++; + } + } + } + return 0; } +/** + * Address: 7F03AF5C + * + * Finds the closest bg bullet collision among rooms not already visited by the shot traversal. + * It first does a cheap bounding box test, then a precise test for rooms whose bounding boxes are intersected. + * This seems to be a brute force/fallback version of the function above, chrpropFindFirstBgHitInConnectedRooms. + * @return 0 if no bg hit in any unvisited room, otherwise the room number containing the closest bg hit. + */ +s32 chrpropFindClosestBgHitRoom(s32 unused, coord3d *from, coord3d *to, coord3d *dir, coord3d *scaledDir, u8 *visited, struct HitThing *besthit) +{ + f32 dx; + f32 dy; + struct HitThing hit; + f32 scale; + f32 dist; + f32 adjusteddist; + f32 bestdist; + s32 bestroom; + f32 tmp; + s32 room; + bestdist = M_U32_MAX_VALUE_F; + bestroom = 0; -#ifdef NONMATCHING -void sub_GAME_7F03AA44(void) { + scale = get_room_data_float2(); + room = 1; + + if (getMaxNumRooms() >= 2) + { + do + { + if (visited[room] == 0) + { + visited[room] = 1; + + if (chrpropRayIntersectsRoomBbox(room, scaledDir, dir)) + { + if (bgTestBulletHitBackground(from, to, room, &hit)) + { + dx = (hit.hitpos.x * scale) - from->x; + dy = ((hit.hitpos.y * scale) - from->y) * 1.0f; + dist = (hit.hitpos.z * scale) - from->z; + dist = (tmp = ((dx * dx) + (dy * dy)) + (dist * dist)); + adjusteddist = tmp; + + if (check_if_imageID_is_light(hit.texturenum)) + { + adjusteddist = tmp - 4.0f; + } + + if (adjusteddist < bestdist) + { + besthit->hitpos.x = hit.hitpos.x; + besthit->hitpos.y = hit.hitpos.y; + besthit->hitpos.z = hit.hitpos.z; + + bestdist = adjusteddist; + bestroom = room; + + besthit->normal.x = hit.normal.x; + besthit->normal.y = hit.normal.y; + besthit->normal.z = hit.normal.z; + + besthit->vtx0 = hit.vtx0; + besthit->vtx1 = hit.vtx1; + besthit->vtx2 = hit.vtx2; + + besthit->texturenum = hit.texturenum; + besthit->tricmd = hit.tricmd; + besthit->unk28 = hit.unk28; + } + } + } + } + + room++; + } + while (room < getMaxNumRooms()); + } + + return bestroom; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03AA44 -/* 06F574 7F03AA44 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 06F578 7F03AA48 AFBF002C */ sw $ra, 0x2c($sp) -/* 06F57C 7F03AA4C AFB30024 */ sw $s3, 0x24($sp) -/* 06F580 7F03AA50 AFB20020 */ sw $s2, 0x20($sp) -/* 06F584 7F03AA54 AFB1001C */ sw $s1, 0x1c($sp) -/* 06F588 7F03AA58 00A08825 */ move $s1, $a1 -/* 06F58C 7F03AA5C 00C09025 */ move $s2, $a2 -/* 06F590 7F03AA60 00E09825 */ move $s3, $a3 -/* 06F594 7F03AA64 AFB40028 */ sw $s4, 0x28($sp) -/* 06F598 7F03AA68 AFB00018 */ sw $s0, 0x18($sp) -/* 06F59C 7F03AA6C 0FC2D20F */ jal get_room_data_float1 -/* 06F5A0 7F03AA70 AFA40058 */ sw $a0, 0x58($sp) -/* 06F5A4 7F03AA74 0FC2D21E */ jal bgGetLevelVisibilityScale -/* 06F5A8 7F03AA78 E7A00034 */ swc1 $f0, 0x34($sp) -/* 06F5AC 7F03AA7C C6440000 */ lwc1 $f4, ($s2) -/* 06F5B0 7F03AA80 C6260000 */ lwc1 $f6, ($s1) -/* 06F5B4 7F03AA84 24100001 */ li $s0, 1 -/* 06F5B8 7F03AA88 46062201 */ sub.s $f8, $f4, $f6 -/* 06F5BC 7F03AA8C E7A80040 */ swc1 $f8, 0x40($sp) -/* 06F5C0 7F03AA90 C6300004 */ lwc1 $f16, 4($s1) -/* 06F5C4 7F03AA94 C64A0004 */ lwc1 $f10, 4($s2) -/* 06F5C8 7F03AA98 46105481 */ sub.s $f18, $f10, $f16 -/* 06F5CC 7F03AA9C C7AA0034 */ lwc1 $f10, 0x34($sp) -/* 06F5D0 7F03AAA0 E7B20044 */ swc1 $f18, 0x44($sp) -/* 06F5D4 7F03AAA4 C6260008 */ lwc1 $f6, 8($s1) -/* 06F5D8 7F03AAA8 C6440008 */ lwc1 $f4, 8($s2) -/* 06F5DC 7F03AAAC 460A0082 */ mul.s $f2, $f0, $f10 -/* 06F5E0 7F03AAB0 46062201 */ sub.s $f8, $f4, $f6 -/* 06F5E4 7F03AAB4 E7A80048 */ swc1 $f8, 0x48($sp) -/* 06F5E8 7F03AAB8 C6300000 */ lwc1 $f16, ($s1) -/* 06F5EC 7F03AABC 46028482 */ mul.s $f18, $f16, $f2 -/* 06F5F0 7F03AAC0 E7B2004C */ swc1 $f18, 0x4c($sp) -/* 06F5F4 7F03AAC4 C6240004 */ lwc1 $f4, 4($s1) -/* 06F5F8 7F03AAC8 46022182 */ mul.s $f6, $f4, $f2 -/* 06F5FC 7F03AACC E7A60050 */ swc1 $f6, 0x50($sp) -/* 06F600 7F03AAD0 C6280008 */ lwc1 $f8, 8($s1) -/* 06F604 7F03AAD4 46024282 */ mul.s $f10, $f8, $f2 -/* 06F608 7F03AAD8 0FC2D791 */ jal getMaxNumRooms -/* 06F60C 7F03AADC E7AA0054 */ swc1 $f10, 0x54($sp) -/* 06F610 7F03AAE0 28410002 */ slti $at, $v0, 2 -/* 06F614 7F03AAE4 14200014 */ bnez $at, .L7F03AB38 -/* 06F618 7F03AAE8 02708821 */ addu $s1, $s3, $s0 -/* 06F61C 7F03AAEC 24140001 */ li $s4, 1 -/* 06F620 7F03AAF0 27B30040 */ addiu $s3, $sp, 0x40 -/* 06F624 7F03AAF4 27B2004C */ addiu $s2, $sp, 0x4c -/* 06F628 7F03AAF8 922E0000 */ lbu $t6, ($s1) -.L7F03AAFC: -/* 06F62C 7F03AAFC 02002025 */ move $a0, $s0 -/* 06F630 7F03AB00 02402825 */ move $a1, $s2 -/* 06F634 7F03AB04 55C00007 */ bnezl $t6, .L7F03AB24 -/* 06F638 7F03AB08 26100001 */ addiu $s0, $s0, 1 -/* 06F63C 7F03AB0C 0FC0EA5F */ jal sub_GAME_7F03A97C -/* 06F640 7F03AB10 02603025 */ move $a2, $s3 -/* 06F644 7F03AB14 54400003 */ bnezl $v0, .L7F03AB24 -/* 06F648 7F03AB18 26100001 */ addiu $s0, $s0, 1 -/* 06F64C 7F03AB1C A2340000 */ sb $s4, ($s1) -/* 06F650 7F03AB20 26100001 */ addiu $s0, $s0, 1 -.L7F03AB24: -/* 06F654 7F03AB24 0FC2D791 */ jal getMaxNumRooms -/* 06F658 7F03AB28 26310001 */ addiu $s1, $s1, 1 -/* 06F65C 7F03AB2C 0202082A */ slt $at, $s0, $v0 -/* 06F660 7F03AB30 5420FFF2 */ bnezl $at, .L7F03AAFC -/* 06F664 7F03AB34 922E0000 */ lbu $t6, ($s1) -.L7F03AB38: -/* 06F668 7F03AB38 8FBF002C */ lw $ra, 0x2c($sp) -/* 06F66C 7F03AB3C 8FB00018 */ lw $s0, 0x18($sp) -/* 06F670 7F03AB40 8FB1001C */ lw $s1, 0x1c($sp) -/* 06F674 7F03AB44 8FB20020 */ lw $s2, 0x20($sp) -/* 06F678 7F03AB48 8FB30024 */ lw $s3, 0x24($sp) -/* 06F67C 7F03AB4C 8FB40028 */ lw $s4, 0x28($sp) -/* 06F680 7F03AB50 03E00008 */ jr $ra -/* 06F684 7F03AB54 27BD0058 */ addiu $sp, $sp, 0x58 -) + +/* +* Address: 0x7F03B15C +* +* This function has a bunch of issues. It allows the player to shoot through walls +* and even creates sparks in the distance when they shoot at the sky. Some of these +* issues arise because it traces over the stan tiles to find the first room to test. +* This leads to the player being able to shoot through floors if they have a portal +* in front of them (because it's a room boundary which leads to another room) as +* the code tracing over stan tiles only cares about the furthest stan's room. Luckily, +* none of those bugs affect props, so prop hits are always the best candidate. +*/ +void chraiDefaultWeaponFireHandler(s32 hand) +{ + f32 new_var; + coord3d *playerpos; + s32 hitbgstan; + coord3d stanhit; + StandTile *hittile; + s32 createSpark; + s32 gotbghit; + coord3d visiblehitpos; + s32 bestroom; + s32 besttexture; + HitThing bghit; + f32 negz; + coord3d besthitpos; + s32 pad; + StandTile *fromtile; + coord3d dest; + ShotData shotdata; + coord3d *finalpos; + s32 numhits; + u8 visited[256]; + struct image_sound *impact_sounds; + coord3d scaleddir; + coord3d hitdir; + f32 distscale; + PropRecord *playerprop; + PropRecord *prop; + PropRecord **pp; + s32 startroom; + s32 k; + s32 i; + u8 rooms[2]; + + hitbgstan = 0; + hittile = 0; + gotbghit = 0; + bestroom = 0; + playerprop = getCurrentPlayerProp(); + fromtile = playerprop->stan; + numhits = 0; + bullet_path_from_screen_center(&shotdata.viewOrigin, &shotdata.viewDir, hand); + shotdata.weapon = getCurrentPlayerWeaponId(hand); + shotdata.maxdist = M_U32_MAX_VALUE_F; + + for (k = 0; k < 10; k++) + { + shotdata.hits[k].prop = 0; + shotdata.hits[k].hitpart = 0; + shotdata.hits[k].node = 0; + } + + shotdata.gunpos.x = shotdata.viewOrigin.x; + shotdata.gunpos.y = shotdata.viewOrigin.y; + shotdata.gunpos.z = shotdata.viewOrigin.z; + + mtx4TransformVecInPlace(currentPlayerGetViewToWorldMtxf(), &shotdata.gunpos); + + shotdata.dir.x = shotdata.viewDir.x; + shotdata.dir.y = shotdata.viewDir.y; + shotdata.dir.z = shotdata.viewDir.z; + + mtx4RotateVecInPlace(currentPlayerGetViewToWorldMtxf(), &shotdata.dir); + + dest.x = (shotdata.dir.x * M_U16_MAX_VALUE_F) + shotdata.gunpos.x; + dest.y = (shotdata.dir.y * M_U16_MAX_VALUE_F) + shotdata.gunpos.y; + dest.z = (shotdata.dir.z * M_U16_MAX_VALUE_F) + shotdata.gunpos.z; + + if (walkTilesBetweenPoints_NoCallback(&fromtile, playerprop->pos.x, playerprop->pos.z, shotdata.gunpos.x, shotdata.gunpos.z)) + { + distscale = get_room_data_float1() * bgGetLevelVisibilityScale(); + playerpos = bondviewGetCurrentPlayersPosition(); + + new_var++; + new_var--; + + if (new_var == new_var); + + stanResetHits(); + + if (!walkTilesBetweenPoints_NoCallback(&fromtile, shotdata.gunpos.x, shotdata.gunpos.z, dest.x, dest.z)) + { + chrlvStanLineDirIntersection(&shotdata.gunpos, &shotdata.dir, &stanhit); + hitbgstan = 1; + } + else + { + stanhit.x = dest.x; + stanhit.y = dest.y; + stanhit.z = dest.z; + } + + hitdir.x = stanhit.x - playerpos->x; + hitdir.y = stanhit.y - playerpos->y; + hitdir.z = stanhit.z - playerpos->z; + scaleddir.x = playerpos->x * distscale; + scaleddir.y = playerpos->y * distscale; + scaleddir.z = playerpos->z * distscale; + hittile = fromtile; + startroom = getTileRoom(fromtile); + + for (i = 0; i < 256; i++) + { + visited[i] = 0; + } + + if (bgTestBulletHitBackground(playerpos, &stanhit, startroom, &bghit)) + { + bestroom = startroom; + } + + visited[startroom] = 1; + + if (bestroom <= 0) + { + if (g_BgPortals[0].offset_portal != 0) + { + bestroom = chrpropFindFirstBgHitInConnectedRooms(getTileRoom(getCurrentPlayerProp()->stan), playerpos, &stanhit, &hitdir, &scaleddir, visited, &bghit); + } + else + { + bestroom = chrpropFindClosestBgHitRoom(getTileRoom(getCurrentPlayerProp()->stan), playerpos, &stanhit, &hitdir, &scaleddir, visited, &bghit); + } + } + + if (bestroom > 0) + { + distscale = get_room_data_float2(); + bghit.hitpos.x *= distscale; + bghit.hitpos.y *= distscale; + bghit.hitpos.z *= distscale; + } + + bestroom = chrpropFindCloserBgHitInVisibleRooms(playerpos, &stanhit, &hitdir, &scaleddir, visited, &bghit, bestroom); + + if (bestroom > 0) + { + gotbghit = 1; + besttexture = bghit.texturenum; + besthitpos.f[0] = (visiblehitpos.f[0] = bghit.hitpos.f[0]); + besthitpos.f[1] = (visiblehitpos.f[1] = bghit.hitpos.f[1]); + besthitpos.f[2] = (visiblehitpos.f[2] = bghit.hitpos.f[2]); + } + else + { + bestroom = startroom; + besttexture = -1; + besthitpos.x = dest.x; + besthitpos.y = dest.y; + besthitpos.z = dest.z; + } + + if (hitbgstan || gotbghit) + { + mtx4TransformVecInPlace(camGetWorldToScreenMtxf(), &besthitpos); + negz = -besthitpos.f[2]; + shotdata.maxdist = negz; + } + } + + new_var = 300.0f; + + if ((shotdata.weapon == 23) && (shotdata.maxdist > new_var)) + { + shotdata.maxdist = new_var; + } + + for (pp = g_LastOnScreenProp; (--pp) >= g_OnScreenPropList;) + { + prop = *pp; + + if (prop != 0) + { + if ((prop->type == PROP_TYPE_CHR) || (((prop->type == PROP_TYPE_VIEWER) && (prop->chr != 0)) && (getPlayerPointerIndex(prop) != get_cur_playernum()))) + { + chrTestHit(prop, &shotdata); + } + else if (((prop->type == PROP_TYPE_OBJ) || (prop->type == PROP_TYPE_WEAPON)) || (prop->type == PROP_TYPE_DOOR)) + { + sub_GAME_7F04E9BC(prop, &shotdata); + } + } + } + + for (k = 0; k < 10; k++) + { + if (shotdata.hits[k].prop != 0) + { +#ifdef DEBUG + assert(!IsBadVec3d((vec3d *)&shotdata.hits[k].hit.hitpos)); #endif + if ((shotdata.hits[k].prop->type == PROP_TYPE_CHR) || (shotdata.hits[k].prop->type == PROP_TYPE_VIEWER)) + { + chrHandleBulletHit(&shotdata, &shotdata.hits[k]); + } + else if (((shotdata.hits[k].prop->type == PROP_TYPE_OBJ) || (shotdata.hits[k].prop->type == PROP_TYPE_WEAPON)) || (shotdata.hits[k].prop->type == PROP_TYPE_DOOR)) + { + objHit(&shotdata, &shotdata.hits[k]); + } + if (shotdata.hits[k].countsAsPenetration) + { + numhits++; + if (numhits >= bondwalkItemGetObjectsShootThrough(shotdata.weapon)) + { + gotbghit = 0; + hitbgstan = 0; + } + } + } + } + if (gotbghit || hitbgstan) + { + finalpos = 0; + createSpark = 1; + if ((shotdata.weapon == 23) && (negz > new_var)) + { + createSpark = 0; + } -#ifdef NONMATCHING -void sub_GAME_7F03AB58(void) { + if (gotbghit) + { + if (bghit.texturenum < 0) + { + impact_sounds = g_HitTypeSounds[0]; + } + else + { + impact_sounds = g_HitTypeSounds[((u8 *) (&g_Textures[bghit.texturenum]))[0] & 0xf]; + } + if (createSpark) + { + if ((impact_sounds->thing2_len > 0) && (shotdata.weapon != 23)) + { + pad = randomGetNext() % impact_sounds->thing2_len; + explosionCreateBulletImpact(&visiblehitpos, &bghit.normal, impact_sounds->thing2[pad], bestroom, 0, -1, 0); + } + + if (check_if_imageID_is_light(bghit.texturenum)) + { + lightFixtureBreak(bghit.tricmd, bghit.unk28, bestroom); + } + } + + finalpos = &visiblehitpos; + } + else if (hitbgstan) + { + stanhit.x = (shotdata.dir.x * M_U16_MAX_VALUE_F) + shotdata.gunpos.x; + stanhit.y = (shotdata.dir.y * M_U16_MAX_VALUE_F) + shotdata.gunpos.y; + stanhit.z = (shotdata.dir.z * M_U16_MAX_VALUE_F) + shotdata.gunpos.z; + finalpos = &stanhit; + } + + if (finalpos != 0) + { + if (createSpark) + { + recall_joy2_hits_edit_flag(shotdata.weapon, finalpos, besttexture); + + if (((0xf & ((u8 *) g_Textures)[besttexture * 8]) != 5) && ((((u8 *) g_Textures)[besttexture * 8] & 0xf) != 6)) + { + rooms[0] = bestroom; + rooms[1] = 255; + explosionCreate(0, finalpos, hittile, 1, 0, get_cur_playernum(), rooms, 0); + } + } + + finalpos->x -= 26.0f * shotdata.dir.x; + finalpos->y -= 26.0f * shotdata.dir.y; + finalpos->z -= 26.0f * shotdata.dir.z; + + gunSetTracerTarget(finalpos); + + if (createSpark) + { + bullet_spark_create(finalpos, 1, 26.0f, bestroom); + } + } + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03AB58 -/* 06F688 7F03AB58 27BDFDE0 */ addiu $sp, $sp, -0x220 -/* 06F68C 7F03AB5C AFBF003C */ sw $ra, 0x3c($sp) -/* 06F690 7F03AB60 AFB20024 */ sw $s2, 0x24($sp) -/* 06F694 7F03AB64 00809025 */ move $s2, $a0 -/* 06F698 7F03AB68 AFB70038 */ sw $s7, 0x38($sp) -/* 06F69C 7F03AB6C AFB60034 */ sw $s6, 0x34($sp) -/* 06F6A0 7F03AB70 AFB50030 */ sw $s5, 0x30($sp) -/* 06F6A4 7F03AB74 AFB4002C */ sw $s4, 0x2c($sp) -/* 06F6A8 7F03AB78 AFB30028 */ sw $s3, 0x28($sp) -/* 06F6AC 7F03AB7C AFB10020 */ sw $s1, 0x20($sp) -/* 06F6B0 7F03AB80 AFB0001C */ sw $s0, 0x1c($sp) -/* 06F6B4 7F03AB84 F7B40010 */ sdc1 $f20, 0x10($sp) -/* 06F6B8 7F03AB88 AFA50224 */ sw $a1, 0x224($sp) -/* 06F6BC 7F03AB8C AFA60228 */ sw $a2, 0x228($sp) -/* 06F6C0 7F03AB90 0FC2D20C */ jal get_room_data_float2 -/* 06F6C4 7F03AB94 AFA7022C */ sw $a3, 0x22c($sp) -/* 06F6C8 7F03AB98 46000506 */ mov.s $f20, $f0 -/* 06F6CC 7F03AB9C 27A40090 */ addiu $a0, $sp, 0x90 -/* 06F6D0 7F03ABA0 0FC2E3A6 */ jal bgCopyVisibleRoomsToList -/* 06F6D4 7F03ABA4 24050064 */ li $a1, 100 -/* 06F6D8 7F03ABA8 18400085 */ blez $v0, .L7F03ADC0 -/* 06F6DC 7F03ABAC 27B00090 */ addiu $s0, $sp, 0x90 -/* 06F6E0 7F03ABB0 00027880 */ sll $t7, $v0, 2 -/* 06F6E4 7F03ABB4 01F0A021 */ addu $s4, $t7, $s0 -/* 06F6E8 7F03ABB8 24170001 */ li $s7, 1 -/* 06F6EC 7F03ABBC 8FB60230 */ lw $s6, 0x230($sp) -/* 06F6F0 7F03ABC0 27B30054 */ addiu $s3, $sp, 0x54 -/* 06F6F4 7F03ABC4 8FB10234 */ lw $s1, 0x234($sp) -/* 06F6F8 7F03ABC8 8E180000 */ lw $t8, ($s0) -.L7F03ABCC: -/* 06F6FC 7F03ABCC 03161021 */ addu $v0, $t8, $s6 -/* 06F700 7F03ABD0 90590000 */ lbu $t9, ($v0) -/* 06F704 7F03ABD4 57200077 */ bnezl $t9, .L7F03ADB4 -/* 06F708 7F03ABD8 26100004 */ addiu $s0, $s0, 4 -/* 06F70C 7F03ABDC A0570000 */ sb $s7, ($v0) -/* 06F710 7F03ABE0 8FA60228 */ lw $a2, 0x228($sp) -/* 06F714 7F03ABE4 8FA5022C */ lw $a1, 0x22c($sp) -/* 06F718 7F03ABE8 0FC0EA5F */ jal sub_GAME_7F03A97C -/* 06F71C 7F03ABEC 8E040000 */ lw $a0, ($s0) -/* 06F720 7F03ABF0 1040006F */ beqz $v0, .L7F03ADB0 -/* 06F724 7F03ABF4 02402025 */ move $a0, $s2 -/* 06F728 7F03ABF8 8FA50224 */ lw $a1, 0x224($sp) -/* 06F72C 7F03ABFC 8E060000 */ lw $a2, ($s0) -/* 06F730 7F03AC00 0FC2DE9E */ jal bgTestBulletHitBackground -/* 06F734 7F03AC04 02603825 */ move $a3, $s3 -/* 06F738 7F03AC08 10400069 */ beqz $v0, .L7F03ADB0 -/* 06F73C 7F03AC0C C7A40054 */ lwc1 $f4, 0x54($sp) -/* 06F740 7F03AC10 46142182 */ mul.s $f6, $f4, $f20 -/* 06F744 7F03AC14 C7A80058 */ lwc1 $f8, 0x58($sp) -/* 06F748 7F03AC18 C7B0005C */ lwc1 $f16, 0x5c($sp) -/* 06F74C 7F03AC1C 8FA80238 */ lw $t0, 0x238($sp) -/* 06F750 7F03AC20 46144282 */ mul.s $f10, $f8, $f20 -/* 06F754 7F03AC24 8E020000 */ lw $v0, ($s0) -/* 06F758 7F03AC28 02606025 */ move $t4, $s3 -/* 06F75C 7F03AC2C 46148482 */ mul.s $f18, $f16, $f20 -/* 06F760 7F03AC30 E7A60054 */ swc1 $f6, 0x54($sp) -/* 06F764 7F03AC34 02206825 */ move $t5, $s1 -/* 06F768 7F03AC38 266B0030 */ addiu $t3, $s3, 0x30 -/* 06F76C 7F03AC3C E7AA0058 */ swc1 $f10, 0x58($sp) -/* 06F770 7F03AC40 19000051 */ blez $t0, .L7F03AD88 -/* 06F774 7F03AC44 E7B2005C */ swc1 $f18, 0x5c($sp) -/* 06F778 7F03AC48 C6200000 */ lwc1 $f0, ($s1) -/* 06F77C 7F03AC4C C6420000 */ lwc1 $f2, ($s2) -/* 06F780 7F03AC50 4600103E */ c.le.s $f2, $f0 -/* 06F784 7F03AC54 00000000 */ nop -/* 06F788 7F03AC58 4502000A */ bc1fl .L7F03AC84 -/* 06F78C 7F03AC5C 4602003E */ c.le.s $f0, $f2 -/* 06F790 7F03AC60 4606103E */ c.le.s $f2, $f6 -/* 06F794 7F03AC64 00000000 */ nop -/* 06F798 7F03AC68 45020006 */ bc1fl .L7F03AC84 -/* 06F79C 7F03AC6C 4602003E */ c.le.s $f0, $f2 -/* 06F7A0 7F03AC70 4600303C */ c.lt.s $f6, $f0 -/* 06F7A4 7F03AC74 00000000 */ nop -/* 06F7A8 7F03AC78 4503000E */ bc1tl .L7F03ACB4 -/* 06F7AC 7F03AC7C C6200004 */ lwc1 $f0, 4($s1) -/* 06F7B0 7F03AC80 4602003E */ c.le.s $f0, $f2 -.L7F03AC84: -/* 06F7B4 7F03AC84 C7A40054 */ lwc1 $f4, 0x54($sp) -/* 06F7B8 7F03AC88 4502004A */ bc1fl .L7F03ADB4 -/* 06F7BC 7F03AC8C 26100004 */ addiu $s0, $s0, 4 -/* 06F7C0 7F03AC90 4602203E */ c.le.s $f4, $f2 -/* 06F7C4 7F03AC94 00000000 */ nop -/* 06F7C8 7F03AC98 45020046 */ bc1fl .L7F03ADB4 -/* 06F7CC 7F03AC9C 26100004 */ addiu $s0, $s0, 4 -/* 06F7D0 7F03ACA0 4604003C */ c.lt.s $f0, $f4 -/* 06F7D4 7F03ACA4 00000000 */ nop -/* 06F7D8 7F03ACA8 45020042 */ bc1fl .L7F03ADB4 -/* 06F7DC 7F03ACAC 26100004 */ addiu $s0, $s0, 4 -/* 06F7E0 7F03ACB0 C6200004 */ lwc1 $f0, 4($s1) -.L7F03ACB4: -/* 06F7E4 7F03ACB4 C6420004 */ lwc1 $f2, 4($s2) -/* 06F7E8 7F03ACB8 C7A80058 */ lwc1 $f8, 0x58($sp) -/* 06F7EC 7F03ACBC 4600103E */ c.le.s $f2, $f0 -/* 06F7F0 7F03ACC0 00000000 */ nop -/* 06F7F4 7F03ACC4 4502000A */ bc1fl .L7F03ACF0 -/* 06F7F8 7F03ACC8 4602003E */ c.le.s $f0, $f2 -/* 06F7FC 7F03ACCC 4608103E */ c.le.s $f2, $f8 -/* 06F800 7F03ACD0 00000000 */ nop -/* 06F804 7F03ACD4 45020006 */ bc1fl .L7F03ACF0 -/* 06F808 7F03ACD8 4602003E */ c.le.s $f0, $f2 -/* 06F80C 7F03ACDC 4600403C */ c.lt.s $f8, $f0 -/* 06F810 7F03ACE0 00000000 */ nop -/* 06F814 7F03ACE4 4503000E */ bc1tl .L7F03AD20 -/* 06F818 7F03ACE8 C6200008 */ lwc1 $f0, 8($s1) -/* 06F81C 7F03ACEC 4602003E */ c.le.s $f0, $f2 -.L7F03ACF0: -/* 06F820 7F03ACF0 C7AA0058 */ lwc1 $f10, 0x58($sp) -/* 06F824 7F03ACF4 4502002F */ bc1fl .L7F03ADB4 -/* 06F828 7F03ACF8 26100004 */ addiu $s0, $s0, 4 -/* 06F82C 7F03ACFC 4602503E */ c.le.s $f10, $f2 -/* 06F830 7F03AD00 00000000 */ nop -/* 06F834 7F03AD04 4502002B */ bc1fl .L7F03ADB4 -/* 06F838 7F03AD08 26100004 */ addiu $s0, $s0, 4 -/* 06F83C 7F03AD0C 460A003C */ c.lt.s $f0, $f10 -/* 06F840 7F03AD10 00000000 */ nop -/* 06F844 7F03AD14 45020027 */ bc1fl .L7F03ADB4 -/* 06F848 7F03AD18 26100004 */ addiu $s0, $s0, 4 -/* 06F84C 7F03AD1C C6200008 */ lwc1 $f0, 8($s1) -.L7F03AD20: -/* 06F850 7F03AD20 C6420008 */ lwc1 $f2, 8($s2) -/* 06F854 7F03AD24 C7B0005C */ lwc1 $f16, 0x5c($sp) -/* 06F858 7F03AD28 4600103E */ c.le.s $f2, $f0 -/* 06F85C 7F03AD2C 00000000 */ nop -/* 06F860 7F03AD30 4502000A */ bc1fl .L7F03AD5C -/* 06F864 7F03AD34 4602003E */ c.le.s $f0, $f2 -/* 06F868 7F03AD38 4610103E */ c.le.s $f2, $f16 -/* 06F86C 7F03AD3C 00000000 */ nop -/* 06F870 7F03AD40 45020006 */ bc1fl .L7F03AD5C -/* 06F874 7F03AD44 4602003E */ c.le.s $f0, $f2 -/* 06F878 7F03AD48 4600803C */ c.lt.s $f16, $f0 -/* 06F87C 7F03AD4C 00000000 */ nop -/* 06F880 7F03AD50 4503000E */ bc1tl .L7F03AD8C -/* 06F884 7F03AD54 AFA20238 */ sw $v0, 0x238($sp) -/* 06F888 7F03AD58 4602003E */ c.le.s $f0, $f2 -.L7F03AD5C: -/* 06F88C 7F03AD5C C7B2005C */ lwc1 $f18, 0x5c($sp) -/* 06F890 7F03AD60 45020014 */ bc1fl .L7F03ADB4 -/* 06F894 7F03AD64 26100004 */ addiu $s0, $s0, 4 -/* 06F898 7F03AD68 4602903E */ c.le.s $f18, $f2 -/* 06F89C 7F03AD6C 00000000 */ nop -/* 06F8A0 7F03AD70 45020010 */ bc1fl .L7F03ADB4 -/* 06F8A4 7F03AD74 26100004 */ addiu $s0, $s0, 4 -/* 06F8A8 7F03AD78 4612003C */ c.lt.s $f0, $f18 -/* 06F8AC 7F03AD7C 00000000 */ nop -/* 06F8B0 7F03AD80 4502000C */ bc1fl .L7F03ADB4 -/* 06F8B4 7F03AD84 26100004 */ addiu $s0, $s0, 4 -.L7F03AD88: -/* 06F8B8 7F03AD88 AFA20238 */ sw $v0, 0x238($sp) -.L7F03AD8C: -/* 06F8BC 7F03AD8C 8D810000 */ lw $at, ($t4) -/* 06F8C0 7F03AD90 258C000C */ addiu $t4, $t4, 0xc -/* 06F8C4 7F03AD94 25AD000C */ addiu $t5, $t5, 0xc -/* 06F8C8 7F03AD98 ADA1FFF4 */ sw $at, -0xc($t5) -/* 06F8CC 7F03AD9C 8D81FFF8 */ lw $at, -8($t4) -/* 06F8D0 7F03ADA0 ADA1FFF8 */ sw $at, -8($t5) -/* 06F8D4 7F03ADA4 8D81FFFC */ lw $at, -4($t4) -/* 06F8D8 7F03ADA8 158BFFF8 */ bne $t4, $t3, .L7F03AD8C -/* 06F8DC 7F03ADAC ADA1FFFC */ sw $at, -4($t5) -.L7F03ADB0: -/* 06F8E0 7F03ADB0 26100004 */ addiu $s0, $s0, 4 -.L7F03ADB4: -/* 06F8E4 7F03ADB4 0214082B */ sltu $at, $s0, $s4 -/* 06F8E8 7F03ADB8 5420FF84 */ bnezl $at, .L7F03ABCC -/* 06F8EC 7F03ADBC 8E180000 */ lw $t8, ($s0) -.L7F03ADC0: -/* 06F8F0 7F03ADC0 8FBF003C */ lw $ra, 0x3c($sp) -/* 06F8F4 7F03ADC4 8FA20238 */ lw $v0, 0x238($sp) -/* 06F8F8 7F03ADC8 D7B40010 */ ldc1 $f20, 0x10($sp) -/* 06F8FC 7F03ADCC 8FB0001C */ lw $s0, 0x1c($sp) -/* 06F900 7F03ADD0 8FB10020 */ lw $s1, 0x20($sp) -/* 06F904 7F03ADD4 8FB20024 */ lw $s2, 0x24($sp) -/* 06F908 7F03ADD8 8FB30028 */ lw $s3, 0x28($sp) -/* 06F90C 7F03ADDC 8FB4002C */ lw $s4, 0x2c($sp) -/* 06F910 7F03ADE0 8FB50030 */ lw $s5, 0x30($sp) -/* 06F914 7F03ADE4 8FB60034 */ lw $s6, 0x34($sp) -/* 06F918 7F03ADE8 8FB70038 */ lw $s7, 0x38($sp) -/* 06F91C 7F03ADEC 03E00008 */ jr $ra -/* 06F920 7F03ADF0 27BD0220 */ addiu $sp, $sp, 0x220 -) -#endif +/** + * Address: 7F03B9C0 + * + * Hitscans gather candidate hits along the bullet path. This function records each candidate hit into shotdata + * and enforces pentration limits and removes hits that should be blocked by closer objects. + */ +void chrpropAddBulletHit(struct ShotData *shotdata, PropRecord *prop, f32 dist, s32 hitpart, ModelNode *node, struct HitThing *hitthing, s32 room, s32 unk44, Model *model, bool countsAsPenetration, s32 blocksFurtherHits) +{ + s32 pad; + s32 i; + s32 furthestindex; + f32 prevfurthest; + s32 numPenetratedObjects; + f32 furthest; + struct ShotData *localshot; // Assigned but never used, required for matching. + /** + * If countsAsPenetration is true, then this hit is on an object that bullets may pass through, + * and it counts against the weapon's shoot-through object limit. + */ + if (countsAsPenetration) + { + furthest = 0.0f; + prevfurthest = furthest; + furthestindex = 0; + numPenetratedObjects = 0; + localshot = shotdata; + for (i = 0; i < ARRAYCOUNT(shotdata->hits); i++) + { + if (shotdata->hits[i].prop != NULL && shotdata->hits[i].countsAsPenetration) + { + numPenetratedObjects++; -#ifdef NONMATCHING -void sub_GAME_7F03ADF4(void) { + if (furthest < shotdata->hits[i].dist) + { + prevfurthest = furthest; + furthest = shotdata->hits[i].dist; + furthestindex = i; + } + } + } + /** + * The bullet has reached the max number of objects it can penetrate. + */ + if (numPenetratedObjects >= bondwalkItemGetObjectsShootThrough(shotdata->weapon)) + { + // Make room for this new hit. + shotdata->hits[furthestindex].prop = NULL; + shotdata->maxdist = prevfurthest; + + // Update the shot's useful distance. + if (prevfurthest < dist) + { + shotdata->maxdist = dist; + } + + // Remove hits that are beyond the penetration limit. + for (i = 0; i < ARRAYCOUNT(shotdata->hits); i++) + { + if (shotdata->hits[i].prop != NULL && (!shotdata->hits[i].countsAsPenetration) && prevfurthest < shotdata->hits[i].dist) + { + shotdata->hits[i].prop = NULL; + } + } + } + else + { + /** + * This hit is the final allowed penetrable object. + */ + if (numPenetratedObjects + 1 == bondwalkItemGetObjectsShootThrough(shotdata->weapon)) + { + if (dist < shotdata->maxdist) + { + shotdata->maxdist = dist; + } + } + } + } + + /** + * If true, this stops the bullets for all weapons except the Cougar Magnum and Silver PP7. + * Any already recorded hits farther than this one are removed, + * and the shot's max distance is clamped to this hit distance. + * Used by bulletproof glass. + */ + if (blocksFurtherHits) + { + if (shotdata->weapon != ITEM_RUGER && shotdata->weapon != ITEM_SILVERWPPK) + { + for (i = 0; i < ARRAYCOUNT(shotdata->hits); i++) + { + if (shotdata->hits[i].prop != NULL && dist < shotdata->hits[i].dist) + { + shotdata->hits[i].prop = NULL; + } + } + + shotdata->maxdist = dist; + } + } + + for (i = 0; i < ARRAYCOUNT(shotdata->hits); i++) + { + if (shotdata->hits[i].prop == NULL) + { + shotdata->hits[i].dist = dist; + shotdata->hits[i].prop = prop; + shotdata->hits[i].hitpart = hitpart; + shotdata->hits[i].node = node; + shotdata->hits[i].hit = *hitthing; + shotdata->hits[i].room = room; + shotdata->hits[i].unk44 = unk44; + shotdata->hits[i].model = model; + shotdata->hits[i].countsAsPenetration = countsAsPenetration; + break; + } + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03ADF4 -/* 06F924 7F03ADF4 27BDFD08 */ addiu $sp, $sp, -0x2f8 -/* 06F928 7F03ADF8 AFBE0038 */ sw $fp, 0x38($sp) -/* 06F92C 7F03ADFC AFB70034 */ sw $s7, 0x34($sp) -/* 06F930 7F03AE00 AFB60030 */ sw $s6, 0x30($sp) -/* 06F934 7F03AE04 AFB5002C */ sw $s5, 0x2c($sp) -/* 06F938 7F03AE08 AFB40028 */ sw $s4, 0x28($sp) -/* 06F93C 7F03AE0C AFB20020 */ sw $s2, 0x20($sp) -/* 06F940 7F03AE10 AFB00018 */ sw $s0, 0x18($sp) -/* 06F944 7F03AE14 AFBF003C */ sw $ra, 0x3c($sp) -/* 06F948 7F03AE18 AFB30024 */ sw $s3, 0x24($sp) -/* 06F94C 7F03AE1C AFB1001C */ sw $s1, 0x1c($sp) -/* 06F950 7F03AE20 AFA502FC */ sw $a1, 0x2fc($sp) -/* 06F954 7F03AE24 AFA60300 */ sw $a2, 0x300($sp) -/* 06F958 7F03AE28 AFA70304 */ sw $a3, 0x304($sp) -/* 06F95C 7F03AE2C A3A401F8 */ sb $a0, 0x1f8($sp) -/* 06F960 7F03AE30 24100001 */ li $s0, 1 -/* 06F964 7F03AE34 27B20064 */ addiu $s2, $sp, 0x64 -/* 06F968 7F03AE38 27B401F8 */ addiu $s4, $sp, 0x1f8 -/* 06F96C 7F03AE3C 0000A825 */ move $s5, $zero -/* 06F970 7F03AE40 27B601F8 */ addiu $s6, $sp, 0x1f8 -/* 06F974 7F03AE44 8FB7030C */ lw $s7, 0x30c($sp) -/* 06F978 7F03AE48 8FBE0308 */ lw $fp, 0x308($sp) -.L7F03AE4C: -/* 06F97C 7F03AE4C 92D30000 */ lbu $s3, ($s6) -/* 06F980 7F03AE50 240F0001 */ li $t7, 1 -/* 06F984 7F03AE54 03C02825 */ move $a1, $fp -/* 06F988 7F03AE58 02F31021 */ addu $v0, $s7, $s3 -/* 06F98C 7F03AE5C 904E0000 */ lbu $t6, ($v0) -/* 06F990 7F03AE60 02602025 */ move $a0, $s3 -/* 06F994 7F03AE64 55C0000F */ bnezl $t6, .L7F03AEA4 -/* 06F998 7F03AE68 02602025 */ move $a0, $s3 -/* 06F99C 7F03AE6C A04F0000 */ sb $t7, ($v0) -/* 06F9A0 7F03AE70 0FC0EA5F */ jal sub_GAME_7F03A97C -/* 06F9A4 7F03AE74 8FA60304 */ lw $a2, 0x304($sp) -/* 06F9A8 7F03AE78 10400009 */ beqz $v0, .L7F03AEA0 -/* 06F9AC 7F03AE7C 8FA402FC */ lw $a0, 0x2fc($sp) -/* 06F9B0 7F03AE80 8FA50300 */ lw $a1, 0x300($sp) -/* 06F9B4 7F03AE84 02603025 */ move $a2, $s3 -/* 06F9B8 7F03AE88 0FC2DE9E */ jal bgTestBulletHitBackground -/* 06F9BC 7F03AE8C 8FA70310 */ lw $a3, 0x310($sp) -/* 06F9C0 7F03AE90 50400004 */ beql $v0, $zero, .L7F03AEA4 -/* 06F9C4 7F03AE94 02602025 */ move $a0, $s3 -/* 06F9C8 7F03AE98 10000024 */ b .L7F03AF2C -/* 06F9CC 7F03AE9C 02601025 */ move $v0, $s3 -.L7F03AEA0: -/* 06F9D0 7F03AEA0 02602025 */ move $a0, $s3 -.L7F03AEA4: -/* 06F9D4 7F03AEA4 02402825 */ move $a1, $s2 -/* 06F9D8 7F03AEA8 24060064 */ li $a2, 100 -/* 06F9DC 7F03AEAC 0FC2E3BF */ jal sub_GAME_7F0B8EFC -/* 06F9E0 7F03AEB0 00008825 */ move $s1, $zero -/* 06F9E4 7F03AEB4 18400018 */ blez $v0, .L7F03AF18 -/* 06F9E8 7F03AEB8 00402825 */ move $a1, $v0 -.L7F03AEBC: -/* 06F9EC 7F03AEBC 1A00000B */ blez $s0, .L7F03AEEC -/* 06F9F0 7F03AEC0 00001825 */ move $v1, $zero -/* 06F9F4 7F03AEC4 0011C080 */ sll $t8, $s1, 2 -/* 06F9F8 7F03AEC8 0258C821 */ addu $t9, $s2, $t8 -/* 06F9FC 7F03AECC 8F240000 */ lw $a0, ($t9) -/* 06FA00 7F03AED0 27A201F8 */ addiu $v0, $sp, 0x1f8 -.L7F03AED4: -/* 06FA04 7F03AED4 90480000 */ lbu $t0, ($v0) -/* 06FA08 7F03AED8 11040004 */ beq $t0, $a0, .L7F03AEEC -/* 06FA0C 7F03AEDC 00000000 */ nop -/* 06FA10 7F03AEE0 24630001 */ addiu $v1, $v1, 1 -/* 06FA14 7F03AEE4 1470FFFB */ bne $v1, $s0, .L7F03AED4 -/* 06FA18 7F03AEE8 24420001 */ addiu $v0, $v0, 1 -.L7F03AEEC: -/* 06FA1C 7F03AEEC 14700006 */ bne $v1, $s0, .L7F03AF08 -/* 06FA20 7F03AEF0 00114880 */ sll $t1, $s1, 2 -/* 06FA24 7F03AEF4 02495021 */ addu $t2, $s2, $t1 -/* 06FA28 7F03AEF8 8D4B0000 */ lw $t3, ($t2) -/* 06FA2C 7F03AEFC 02906021 */ addu $t4, $s4, $s0 -/* 06FA30 7F03AF00 26100001 */ addiu $s0, $s0, 1 -/* 06FA34 7F03AF04 A18B0000 */ sb $t3, ($t4) -.L7F03AF08: -/* 06FA38 7F03AF08 26310001 */ addiu $s1, $s1, 1 -/* 06FA3C 7F03AF0C 0225082A */ slt $at, $s1, $a1 -/* 06FA40 7F03AF10 1420FFEA */ bnez $at, .L7F03AEBC -/* 06FA44 7F03AF14 00000000 */ nop -.L7F03AF18: -/* 06FA48 7F03AF18 26B50001 */ addiu $s5, $s5, 1 -/* 06FA4C 7F03AF1C 02B0082A */ slt $at, $s5, $s0 -/* 06FA50 7F03AF20 1420FFCA */ bnez $at, .L7F03AE4C -/* 06FA54 7F03AF24 26D60001 */ addiu $s6, $s6, 1 -/* 06FA58 7F03AF28 00001025 */ move $v0, $zero -.L7F03AF2C: -/* 06FA5C 7F03AF2C 8FBF003C */ lw $ra, 0x3c($sp) -/* 06FA60 7F03AF30 8FB00018 */ lw $s0, 0x18($sp) -/* 06FA64 7F03AF34 8FB1001C */ lw $s1, 0x1c($sp) -/* 06FA68 7F03AF38 8FB20020 */ lw $s2, 0x20($sp) -/* 06FA6C 7F03AF3C 8FB30024 */ lw $s3, 0x24($sp) -/* 06FA70 7F03AF40 8FB40028 */ lw $s4, 0x28($sp) -/* 06FA74 7F03AF44 8FB5002C */ lw $s5, 0x2c($sp) -/* 06FA78 7F03AF48 8FB60030 */ lw $s6, 0x30($sp) -/* 06FA7C 7F03AF4C 8FB70034 */ lw $s7, 0x34($sp) -/* 06FA80 7F03AF50 8FBE0038 */ lw $fp, 0x38($sp) -/* 06FA84 7F03AF54 03E00008 */ jr $ra -/* 06FA88 7F03AF58 27BD02F8 */ addiu $sp, $sp, 0x2f8 -) -#endif +void chraiFistAttackHandler(s32 hand, s32 item_id) +{ + PropRecord *playerprop; + f32 ducking; + s32 hit; + PropRecord *prop; + PropRecord **propptr; + ChrRecord *chr; + f32 max0; + f32 min0; + f32 max1; + f32 min1; + f32 max2; + f32 min2; + s32 hitpart; + StandTile *tile; + coord3d from; + coord3d vector; + f32 reach; + hit = 0; + playerprop = getCurrentPlayerProp(); + ducking = bondviewGetPlayerDuckingHeightRelated(g_CurrentPlayer); + for (propptr = g_LastOnScreenProp - 1; propptr >= g_OnScreenPropList; propptr--) + { + prop = *propptr; -#ifdef NONMATCHING -void sub_GAME_7F03AF5C(void) { + if (prop == NULL) + { + continue; + } + if (!(prop->zDepth < 500.0f)) + { + continue; + } + + if (prop->type != PROP_TYPE_CHR) + { + if (prop->type != PROP_TYPE_VIEWER) + { + continue; + } + + if (prop->chr == NULL) + { + continue; + } + + if (getPlayerPointerIndex(prop) == get_cur_playernum()) + { + continue; + } + } + + reach = 50.0f; + chr = prop->chr; + + if (getCurrentWeaponOrItem() == ITEM_SNIPERRIFLE) + { + reach = 100.0f; + } + + modelGetAxisExtents(chr->model, &max0, &min0, 0); + + if (!(0.0f <= max0)) + { + continue; + } + + if (!(min0 <= 0.0f)) + { + continue; + } + + modelGetAxisExtents(chr->model, &max1, &min1, 1); + + if (!(0.0f <= max1)) + { + continue; + } + + if (!(min1 <= 0.0f)) + { + continue; + } + + modelGetAxisExtents(chr->model, &max2, &min2, 2); + + if (!(min2 <= 0.0f)) + { + continue; + } + + if (!((-reach) <= max2)) + { + continue; + } + + tile = playerprop->stan; + + if (!stanTestLineUnobstructed(&tile, playerprop->pos.x, playerprop->pos.z, prop->pos.x, prop->pos.z, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER, ducking, ducking, 0.0f, 1.0f)) + { + continue; + } + + if (tile != prop->stan) { + continue; + } + + hitpart = HIT_CHEST; + + if (currentPlayerGetCrouchPos() == CROUCH_HALF) { + hitpart = HIT_GENERAL; + } + else if (currentPlayerGetCrouchPos() == CROUCH_SQUAT) + { + hitpart = HIT_GENERALHALF; + } + + if (g_musicSfxBufferPtr && g_musicSfxBufferPtr); + + bullet_path_from_screen_center(&from, &vector, hand); + mtx4RotateVecInPlace(currentPlayerGetViewToWorldMtxf(), &vector); + + if (handles_shot_actors(chr, hitpart, &vector, item_id, 1)) + { + recall_joy2_hits_edit_detail_edit_flag(item_id, prop, -1); + hit = 1; + } + } + + if ((!hit) && (item_id == ITEM_FIST)) + { + sndPlaySfx(g_musicSfxBufferPtr, PUNCHING_AIR_SFX, 0); + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03AF5C -/* 06FA8C 7F03AF5C 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 06FA90 7F03AF60 F7BA0030 */ sdc1 $f26, 0x30($sp) -/* 06FA94 7F03AF64 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 06FA98 7F03AF68 AFBF0064 */ sw $ra, 0x64($sp) -/* 06FA9C 7F03AF6C AFBE0060 */ sw $fp, 0x60($sp) -/* 06FAA0 7F03AF70 AFB7005C */ sw $s7, 0x5c($sp) -/* 06FAA4 7F03AF74 AFB3004C */ sw $s3, 0x4c($sp) -/* 06FAA8 7F03AF78 4481D000 */ mtc1 $at, $f26 -/* 06FAAC 7F03AF7C 00A09825 */ move $s3, $a1 -/* 06FAB0 7F03AF80 00E0F025 */ move $fp, $a3 -/* 06FAB4 7F03AF84 AFB60058 */ sw $s6, 0x58($sp) -/* 06FAB8 7F03AF88 AFB50054 */ sw $s5, 0x54($sp) -/* 06FABC 7F03AF8C AFB40050 */ sw $s4, 0x50($sp) -/* 06FAC0 7F03AF90 AFB20048 */ sw $s2, 0x48($sp) -/* 06FAC4 7F03AF94 AFB10044 */ sw $s1, 0x44($sp) -/* 06FAC8 7F03AF98 AFB00040 */ sw $s0, 0x40($sp) -/* 06FACC 7F03AF9C F7BC0038 */ sdc1 $f28, 0x38($sp) -/* 06FAD0 7F03AFA0 F7B80028 */ sdc1 $f24, 0x28($sp) -/* 06FAD4 7F03AFA4 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 06FAD8 7F03AFA8 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 06FADC 7F03AFAC AFA400C0 */ sw $a0, 0xc0($sp) -/* 06FAE0 7F03AFB0 AFA600C8 */ sw $a2, 0xc8($sp) -/* 06FAE4 7F03AFB4 0FC2D20C */ jal get_room_data_float2 -/* 06FAE8 7F03AFB8 0000B825 */ move $s7, $zero -/* 06FAEC 7F03AFBC 46000606 */ mov.s $f24, $f0 -/* 06FAF0 7F03AFC0 0FC2D791 */ jal getMaxNumRooms -/* 06FAF4 7F03AFC4 24110001 */ li $s1, 1 -/* 06FAF8 7F03AFC8 28410002 */ slti $at, $v0, 2 -/* 06FAFC 7F03AFCC 14200051 */ bnez $at, .L7F03B114 -/* 06FB00 7F03AFD0 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 06FB04 7F03AFD4 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 06FB08 7F03AFD8 4481E000 */ mtc1 $at, $f28 -/* 06FB0C 7F03AFDC 01D19021 */ addu $s2, $t6, $s1 -/* 06FB10 7F03AFE0 27B60088 */ addiu $s6, $sp, 0x88 -/* 06FB14 7F03AFE4 24150001 */ li $s5, 1 -/* 06FB18 7F03AFE8 8FB400D0 */ lw $s4, 0xd0($sp) -/* 06FB1C 7F03AFEC 8FB000D8 */ lw $s0, 0xd8($sp) -/* 06FB20 7F03AFF0 924F0000 */ lbu $t7, ($s2) -.L7F03AFF4: -/* 06FB24 7F03AFF4 02202025 */ move $a0, $s1 -/* 06FB28 7F03AFF8 02802825 */ move $a1, $s4 -/* 06FB2C 7F03AFFC 15E0003F */ bnez $t7, .L7F03B0FC -/* 06FB30 7F03B000 03C03025 */ move $a2, $fp -/* 06FB34 7F03B004 0FC0EA5F */ jal sub_GAME_7F03A97C -/* 06FB38 7F03B008 A2550000 */ sb $s5, ($s2) -/* 06FB3C 7F03B00C 1040003B */ beqz $v0, .L7F03B0FC -/* 06FB40 7F03B010 02602025 */ move $a0, $s3 -/* 06FB44 7F03B014 8FA500C8 */ lw $a1, 0xc8($sp) -/* 06FB48 7F03B018 02203025 */ move $a2, $s1 -/* 06FB4C 7F03B01C 0FC2DE9E */ jal bgTestBulletHitBackground -/* 06FB50 7F03B020 02C03825 */ move $a3, $s6 -/* 06FB54 7F03B024 10400035 */ beqz $v0, .L7F03B0FC -/* 06FB58 7F03B028 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 06FB5C 7F03B02C 46182182 */ mul.s $f6, $f4, $f24 -/* 06FB60 7F03B030 C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 06FB64 7F03B034 C6680000 */ lwc1 $f8, ($s3) -/* 06FB68 7F03B038 C7A40090 */ lwc1 $f4, 0x90($sp) -/* 06FB6C 7F03B03C 46185402 */ mul.s $f16, $f10, $f24 -/* 06FB70 7F03B040 C6720004 */ lwc1 $f18, 4($s3) -/* 06FB74 7F03B044 87A400B2 */ lh $a0, 0xb2($sp) -/* 06FB78 7F03B048 46083001 */ sub.s $f0, $f6, $f8 -/* 06FB7C 7F03B04C 46182182 */ mul.s $f6, $f4, $f24 -/* 06FB80 7F03B050 C6680008 */ lwc1 $f8, 8($s3) -/* 06FB84 7F03B054 46128081 */ sub.s $f2, $f16, $f18 -/* 06FB88 7F03B058 46000282 */ mul.s $f10, $f0, $f0 -/* 06FB8C 7F03B05C 00000000 */ nop -/* 06FB90 7F03B060 46021402 */ mul.s $f16, $f2, $f2 -/* 06FB94 7F03B064 46083301 */ sub.s $f12, $f6, $f8 -/* 06FB98 7F03B068 460C6102 */ mul.s $f4, $f12, $f12 -/* 06FB9C 7F03B06C 46105480 */ add.s $f18, $f10, $f16 -/* 06FBA0 7F03B070 46049580 */ add.s $f22, $f18, $f4 -/* 06FBA4 7F03B074 0FC2ED8C */ jal check_if_imageID_is_light -/* 06FBA8 7F03B078 4600B506 */ mov.s $f20, $f22 -/* 06FBAC 7F03B07C 10400002 */ beqz $v0, .L7F03B088 -/* 06FBB0 7F03B080 C7A60088 */ lwc1 $f6, 0x88($sp) -/* 06FBB4 7F03B084 461CB501 */ sub.s $f20, $f22, $f28 -.L7F03B088: -/* 06FBB8 7F03B088 461AA03C */ c.lt.s $f20, $f26 -/* 06FBBC 7F03B08C 00000000 */ nop -/* 06FBC0 7F03B090 4502001B */ bc1fl .L7F03B100 -/* 06FBC4 7F03B094 26310001 */ addiu $s1, $s1, 1 -/* 06FBC8 7F03B098 E6060000 */ swc1 $f6, ($s0) -/* 06FBCC 7F03B09C C7A8008C */ lwc1 $f8, 0x8c($sp) -/* 06FBD0 7F03B0A0 4600A686 */ mov.s $f26, $f20 -/* 06FBD4 7F03B0A4 0220B825 */ move $s7, $s1 -/* 06FBD8 7F03B0A8 E6080004 */ swc1 $f8, 4($s0) -/* 06FBDC 7F03B0AC C7AA0090 */ lwc1 $f10, 0x90($sp) -/* 06FBE0 7F03B0B0 E60A0008 */ swc1 $f10, 8($s0) -/* 06FBE4 7F03B0B4 C7B00094 */ lwc1 $f16, 0x94($sp) -/* 06FBE8 7F03B0B8 E610000C */ swc1 $f16, 0xc($s0) -/* 06FBEC 7F03B0BC C7B20098 */ lwc1 $f18, 0x98($sp) -/* 06FBF0 7F03B0C0 E6120010 */ swc1 $f18, 0x10($s0) -/* 06FBF4 7F03B0C4 C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 06FBF8 7F03B0C8 E6040014 */ swc1 $f4, 0x14($s0) -/* 06FBFC 7F03B0CC 8FB800A0 */ lw $t8, 0xa0($sp) -/* 06FC00 7F03B0D0 AE180018 */ sw $t8, 0x18($s0) -/* 06FC04 7F03B0D4 8FB900A4 */ lw $t9, 0xa4($sp) -/* 06FC08 7F03B0D8 AE19001C */ sw $t9, 0x1c($s0) -/* 06FC0C 7F03B0DC 8FA800A8 */ lw $t0, 0xa8($sp) -/* 06FC10 7F03B0E0 AE080020 */ sw $t0, 0x20($s0) -/* 06FC14 7F03B0E4 87A900B2 */ lh $t1, 0xb2($sp) -/* 06FC18 7F03B0E8 A609002A */ sh $t1, 0x2a($s0) -/* 06FC1C 7F03B0EC 8FAA00AC */ lw $t2, 0xac($sp) -/* 06FC20 7F03B0F0 AE0A0024 */ sw $t2, 0x24($s0) -/* 06FC24 7F03B0F4 87AB00B0 */ lh $t3, 0xb0($sp) -/* 06FC28 7F03B0F8 A60B0028 */ sh $t3, 0x28($s0) -.L7F03B0FC: -/* 06FC2C 7F03B0FC 26310001 */ addiu $s1, $s1, 1 -.L7F03B100: -/* 06FC30 7F03B100 0FC2D791 */ jal getMaxNumRooms -/* 06FC34 7F03B104 26520001 */ addiu $s2, $s2, 1 -/* 06FC38 7F03B108 0222082A */ slt $at, $s1, $v0 -/* 06FC3C 7F03B10C 5420FFB9 */ bnezl $at, .L7F03AFF4 -/* 06FC40 7F03B110 924F0000 */ lbu $t7, ($s2) -.L7F03B114: -/* 06FC44 7F03B114 8FBF0064 */ lw $ra, 0x64($sp) -/* 06FC48 7F03B118 02E01025 */ move $v0, $s7 -/* 06FC4C 7F03B11C 8FB7005C */ lw $s7, 0x5c($sp) -/* 06FC50 7F03B120 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 06FC54 7F03B124 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 06FC58 7F03B128 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 06FC5C 7F03B12C D7BA0030 */ ldc1 $f26, 0x30($sp) -/* 06FC60 7F03B130 D7BC0038 */ ldc1 $f28, 0x38($sp) -/* 06FC64 7F03B134 8FB00040 */ lw $s0, 0x40($sp) -/* 06FC68 7F03B138 8FB10044 */ lw $s1, 0x44($sp) -/* 06FC6C 7F03B13C 8FB20048 */ lw $s2, 0x48($sp) -/* 06FC70 7F03B140 8FB3004C */ lw $s3, 0x4c($sp) -/* 06FC74 7F03B144 8FB40050 */ lw $s4, 0x50($sp) -/* 06FC78 7F03B148 8FB50054 */ lw $s5, 0x54($sp) -/* 06FC7C 7F03B14C 8FB60058 */ lw $s6, 0x58($sp) -/* 06FC80 7F03B150 8FBE0060 */ lw $fp, 0x60($sp) -/* 06FC84 7F03B154 03E00008 */ jr $ra -/* 06FC88 7F03B158 27BD00C0 */ addiu $sp, $sp, 0xc0 -) -#endif - - - - - -#ifdef NONMATCHING -void chraiDefaultWeaponFireHandler(void) { - -} -#else -GLOBAL_ASM( -.text -glabel chraiDefaultWeaponFireHandler -/* 06FC8C 7F03B15C 27BDFA88 */ addiu $sp, $sp, -0x578 -/* 06FC90 7F03B160 AFBF0034 */ sw $ra, 0x34($sp) -/* 06FC94 7F03B164 AFB00028 */ sw $s0, 0x28($sp) -/* 06FC98 7F03B168 00808025 */ move $s0, $a0 -/* 06FC9C 7F03B16C AFB20030 */ sw $s2, 0x30($sp) -/* 06FCA0 7F03B170 AFB1002C */ sw $s1, 0x2c($sp) -/* 06FCA4 7F03B174 AFA0056C */ sw $zero, 0x56c($sp) -/* 06FCA8 7F03B178 AFA0055C */ sw $zero, 0x55c($sp) -/* 06FCAC 7F03B17C AFA00554 */ sw $zero, 0x554($sp) -/* 06FCB0 7F03B180 0FC225E6 */ jal get_curplayer_positiondata -/* 06FCB4 7F03B184 AFA00544 */ sw $zero, 0x544($sp) -/* 06FCB8 7F03B188 8C4E0014 */ lw $t6, 0x14($v0) -/* 06FCBC 7F03B18C 27B20194 */ addiu $s2, $sp, 0x194 -/* 06FCC0 7F03B190 00408825 */ move $s1, $v0 -/* 06FCC4 7F03B194 AFA0018C */ sw $zero, 0x18c($sp) -/* 06FCC8 7F03B198 02402025 */ move $a0, $s2 -/* 06FCCC 7F03B19C 27A501A0 */ addiu $a1, $sp, 0x1a0 -/* 06FCD0 7F03B1A0 02003025 */ move $a2, $s0 -/* 06FCD4 7F03B1A4 0FC1A073 */ jal bullet_path_from_screen_center -/* 06FCD8 7F03B1A8 AFAE04F8 */ sw $t6, 0x4f8($sp) -/* 06FCDC 7F03B1AC 0FC17674 */ jal getCurrentPlayerWeaponId -/* 06FCE0 7F03B1B0 02002025 */ move $a0, $s0 -/* 06FCE4 7F03B1B4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 06FCE8 7F03B1B8 44812000 */ mtc1 $at, $f4 -/* 06FCEC 7F03B1BC AFA201AC */ sw $v0, 0x1ac($sp) -/* 06FCF0 7F03B1C0 27A204B4 */ addiu $v0, $sp, 0x4b4 -/* 06FCF4 7F03B1C4 AFA001D0 */ sw $zero, 0x1d0($sp) -/* 06FCF8 7F03B1C8 AFA001D4 */ sw $zero, 0x1d4($sp) -/* 06FCFC 7F03B1CC AFA001D8 */ sw $zero, 0x1d8($sp) -/* 06FD00 7F03B1D0 AFA00220 */ sw $zero, 0x220($sp) -/* 06FD04 7F03B1D4 AFA00224 */ sw $zero, 0x224($sp) -/* 06FD08 7F03B1D8 AFA00228 */ sw $zero, 0x228($sp) -/* 06FD0C 7F03B1DC 27B00234 */ addiu $s0, $sp, 0x234 -/* 06FD10 7F03B1E0 E7A401C8 */ swc1 $f4, 0x1c8($sp) -.L7F03B1E4: -/* 06FD14 7F03B1E4 26100140 */ addiu $s0, $s0, 0x140 -/* 06FD18 7F03B1E8 AE00FF4C */ sw $zero, -0xb4($s0) -/* 06FD1C 7F03B1EC AE00FF50 */ sw $zero, -0xb0($s0) -/* 06FD20 7F03B1F0 AE00FF54 */ sw $zero, -0xac($s0) -/* 06FD24 7F03B1F4 AE00FF9C */ sw $zero, -0x64($s0) -/* 06FD28 7F03B1F8 AE00FFA0 */ sw $zero, -0x60($s0) -/* 06FD2C 7F03B1FC AE00FFA4 */ sw $zero, -0x5c($s0) -/* 06FD30 7F03B200 AE00FFEC */ sw $zero, -0x14($s0) -/* 06FD34 7F03B204 AE00FFF0 */ sw $zero, -0x10($s0) -/* 06FD38 7F03B208 AE00FFF4 */ sw $zero, -0xc($s0) -/* 06FD3C 7F03B20C AE00FEFC */ sw $zero, -0x104($s0) -/* 06FD40 7F03B210 AE00FF00 */ sw $zero, -0x100($s0) -/* 06FD44 7F03B214 1602FFF3 */ bne $s0, $v0, .L7F03B1E4 -/* 06FD48 7F03B218 AE00FF04 */ sw $zero, -0xfc($s0) -/* 06FD4C 7F03B21C C7A60194 */ lwc1 $f6, 0x194($sp) -/* 06FD50 7F03B220 C7A80198 */ lwc1 $f8, 0x198($sp) -/* 06FD54 7F03B224 C7AA019C */ lwc1 $f10, 0x19c($sp) -/* 06FD58 7F03B228 E7A601B0 */ swc1 $f6, 0x1b0($sp) -/* 06FD5C 7F03B22C E7A801B4 */ swc1 $f8, 0x1b4($sp) -/* 06FD60 7F03B230 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 06FD64 7F03B234 E7AA01B8 */ swc1 $f10, 0x1b8($sp) -/* 06FD68 7F03B238 00402025 */ move $a0, $v0 -/* 06FD6C 7F03B23C 0FC1611D */ jal mtx4TransformVecInPlace -/* 06FD70 7F03B240 27A501B0 */ addiu $a1, $sp, 0x1b0 -/* 06FD74 7F03B244 C7B001A0 */ lwc1 $f16, 0x1a0($sp) -/* 06FD78 7F03B248 C7B201A4 */ lwc1 $f18, 0x1a4($sp) -/* 06FD7C 7F03B24C C7A401A8 */ lwc1 $f4, 0x1a8($sp) -/* 06FD80 7F03B250 E7B001BC */ swc1 $f16, 0x1bc($sp) -/* 06FD84 7F03B254 E7B201C0 */ swc1 $f18, 0x1c0($sp) -/* 06FD88 7F03B258 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 06FD8C 7F03B25C E7A401C4 */ swc1 $f4, 0x1c4($sp) -/* 06FD90 7F03B260 00402025 */ move $a0, $v0 -/* 06FD94 7F03B264 0FC160F6 */ jal mtx4RotateVecInPlace -/* 06FD98 7F03B268 27A501BC */ addiu $a1, $sp, 0x1bc -/* 06FD9C 7F03B26C 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 06FDA0 7F03B270 44810000 */ mtc1 $at, $f0 -/* 06FDA4 7F03B274 C7A601BC */ lwc1 $f6, 0x1bc($sp) -/* 06FDA8 7F03B278 C7AA01B0 */ lwc1 $f10, 0x1b0($sp) -/* 06FDAC 7F03B27C C7B201C0 */ lwc1 $f18, 0x1c0($sp) -/* 06FDB0 7F03B280 46003202 */ mul.s $f8, $f6, $f0 -/* 06FDB4 7F03B284 C7A601B4 */ lwc1 $f6, 0x1b4($sp) -/* 06FDB8 7F03B288 44075000 */ mfc1 $a3, $f10 -/* 06FDBC 7F03B28C 46009102 */ mul.s $f4, $f18, $f0 -/* 06FDC0 7F03B290 27A404F8 */ addiu $a0, $sp, 0x4f8 -/* 06FDC4 7F03B294 460A4400 */ add.s $f16, $f8, $f10 -/* 06FDC8 7F03B298 46062200 */ add.s $f8, $f4, $f6 -/* 06FDCC 7F03B29C E7B004EC */ swc1 $f16, 0x4ec($sp) -/* 06FDD0 7F03B2A0 C7B001C4 */ lwc1 $f16, 0x1c4($sp) -/* 06FDD4 7F03B2A4 C7A401B8 */ lwc1 $f4, 0x1b8($sp) -/* 06FDD8 7F03B2A8 E7A804F0 */ swc1 $f8, 0x4f0($sp) -/* 06FDDC 7F03B2AC 46008482 */ mul.s $f18, $f16, $f0 -/* 06FDE0 7F03B2B0 46049180 */ add.s $f6, $f18, $f4 -/* 06FDE4 7F03B2B4 E7A604F4 */ swc1 $f6, 0x4f4($sp) -/* 06FDE8 7F03B2B8 8E260010 */ lw $a2, 0x10($s1) -/* 06FDEC 7F03B2BC 8E250008 */ lw $a1, 8($s1) -/* 06FDF0 7F03B2C0 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 06FDF4 7F03B2C4 E7A40010 */ swc1 $f4, 0x10($sp) -/* 06FDF8 7F03B2C8 504000B9 */ beql $v0, $zero, .L7F03B5B0 -/* 06FDFC 7F03B2CC 8FB901AC */ lw $t9, 0x1ac($sp) -/* 06FE00 7F03B2D0 0FC2D20F */ jal get_room_data_float1 -/* 06FE04 7F03B2D4 00000000 */ nop -/* 06FE08 7F03B2D8 0FC2D21E */ jal bgGetLevelVisibilityScale -/* 06FE0C 7F03B2DC E7A00048 */ swc1 $f0, 0x48($sp) -/* 06FE10 7F03B2E0 C7A20048 */ lwc1 $f2, 0x48($sp) -/* 06FE14 7F03B2E4 46020202 */ mul.s $f8, $f0, $f2 -/* 06FE18 7F03B2E8 0FC227F5 */ jal bondviewGetCurrentPlayersPosition -/* 06FE1C 7F03B2EC E7A8006C */ swc1 $f8, 0x6c($sp) -/* 06FE20 7F03B2F0 0FC2C731 */ jal sub_GAME_7F0B1CC4 -/* 06FE24 7F03B2F4 00408025 */ move $s0, $v0 -/* 06FE28 7F03B2F8 C7B004F4 */ lwc1 $f16, 0x4f4($sp) -/* 06FE2C 7F03B2FC 27A404F8 */ addiu $a0, $sp, 0x4f8 -/* 06FE30 7F03B300 8FA501B0 */ lw $a1, 0x1b0($sp) -/* 06FE34 7F03B304 8FA601B8 */ lw $a2, 0x1b8($sp) -/* 06FE38 7F03B308 8FA704EC */ lw $a3, 0x4ec($sp) -/* 06FE3C 7F03B30C 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 06FE40 7F03B310 E7B00010 */ swc1 $f16, 0x10($sp) -/* 06FE44 7F03B314 14400008 */ bnez $v0, .L7F03B338 -/* 06FE48 7F03B318 C7B204EC */ lwc1 $f18, 0x4ec($sp) -/* 06FE4C 7F03B31C 27A401B0 */ addiu $a0, $sp, 0x1b0 -/* 06FE50 7F03B320 27A501BC */ addiu $a1, $sp, 0x1bc -/* 06FE54 7F03B324 0FC09893 */ jal chrlvStanLineDirIntersection -/* 06FE58 7F03B328 27A60560 */ addiu $a2, $sp, 0x560 -/* 06FE5C 7F03B32C 240F0001 */ li $t7, 1 -/* 06FE60 7F03B330 10000006 */ b .L7F03B34C -/* 06FE64 7F03B334 AFAF056C */ sw $t7, 0x56c($sp) -.L7F03B338: -/* 06FE68 7F03B338 C7A604F0 */ lwc1 $f6, 0x4f0($sp) -/* 06FE6C 7F03B33C C7AA04F4 */ lwc1 $f10, 0x4f4($sp) -/* 06FE70 7F03B340 E7B20560 */ swc1 $f18, 0x560($sp) -/* 06FE74 7F03B344 E7A60564 */ swc1 $f6, 0x564($sp) -/* 06FE78 7F03B348 E7AA0568 */ swc1 $f10, 0x568($sp) -.L7F03B34C: -/* 06FE7C 7F03B34C C7A40560 */ lwc1 $f4, 0x560($sp) -/* 06FE80 7F03B350 C6080000 */ lwc1 $f8, ($s0) -/* 06FE84 7F03B354 C7B20564 */ lwc1 $f18, 0x564($sp) -/* 06FE88 7F03B358 C7A0006C */ lwc1 $f0, 0x6c($sp) -/* 06FE8C 7F03B35C 46082401 */ sub.s $f16, $f4, $f8 -/* 06FE90 7F03B360 C7A40568 */ lwc1 $f4, 0x568($sp) -/* 06FE94 7F03B364 8FA404F8 */ lw $a0, 0x4f8($sp) -/* 06FE98 7F03B368 E7B00070 */ swc1 $f16, 0x70($sp) -/* 06FE9C 7F03B36C C6060004 */ lwc1 $f6, 4($s0) -/* 06FEA0 7F03B370 46069281 */ sub.s $f10, $f18, $f6 -/* 06FEA4 7F03B374 E7AA0074 */ swc1 $f10, 0x74($sp) -/* 06FEA8 7F03B378 C6080008 */ lwc1 $f8, 8($s0) -/* 06FEAC 7F03B37C 46082401 */ sub.s $f16, $f4, $f8 -/* 06FEB0 7F03B380 E7B00078 */ swc1 $f16, 0x78($sp) -/* 06FEB4 7F03B384 C6120000 */ lwc1 $f18, ($s0) -/* 06FEB8 7F03B388 46009182 */ mul.s $f6, $f18, $f0 -/* 06FEBC 7F03B38C E7A6007C */ swc1 $f6, 0x7c($sp) -/* 06FEC0 7F03B390 C60A0004 */ lwc1 $f10, 4($s0) -/* 06FEC4 7F03B394 46005102 */ mul.s $f4, $f10, $f0 -/* 06FEC8 7F03B398 E7A40080 */ swc1 $f4, 0x80($sp) -/* 06FECC 7F03B39C C6080008 */ lwc1 $f8, 8($s0) -/* 06FED0 7F03B3A0 AFA4055C */ sw $a0, 0x55c($sp) -/* 06FED4 7F03B3A4 46004402 */ mul.s $f16, $f8, $f0 -/* 06FED8 7F03B3A8 0FC2CBF6 */ jal getTileRoom -/* 06FEDC 7F03B3AC E7B00084 */ swc1 $f16, 0x84($sp) -/* 06FEE0 7F03B3B0 00408825 */ move $s1, $v0 -/* 06FEE4 7F03B3B4 27A2018C */ addiu $v0, $sp, 0x18c -/* 06FEE8 7F03B3B8 27A3008C */ addiu $v1, $sp, 0x8c -.L7F03B3BC: -/* 06FEEC 7F03B3BC 24630004 */ addiu $v1, $v1, 4 -/* 06FEF0 7F03B3C0 A060FFFD */ sb $zero, -3($v1) -/* 06FEF4 7F03B3C4 A060FFFE */ sb $zero, -2($v1) -/* 06FEF8 7F03B3C8 A060FFFF */ sb $zero, -1($v1) -/* 06FEFC 7F03B3CC 1462FFFB */ bne $v1, $v0, .L7F03B3BC -/* 06FF00 7F03B3D0 A060FFFC */ sb $zero, -4($v1) -/* 06FF04 7F03B3D4 02002025 */ move $a0, $s0 -/* 06FF08 7F03B3D8 27A50560 */ addiu $a1, $sp, 0x560 -/* 06FF0C 7F03B3DC 02203025 */ move $a2, $s1 -/* 06FF10 7F03B3E0 0FC2DE9E */ jal bgTestBulletHitBackground -/* 06FF14 7F03B3E4 27A70510 */ addiu $a3, $sp, 0x510 -/* 06FF18 7F03B3E8 10400002 */ beqz $v0, .L7F03B3F4 -/* 06FF1C 7F03B3EC 24190001 */ li $t9, 1 -/* 06FF20 7F03B3F0 AFB10544 */ sw $s1, 0x544($sp) -.L7F03B3F4: -/* 06FF24 7F03B3F4 03B14021 */ addu $t0, $sp, $s1 -/* 06FF28 7F03B3F8 A119008C */ sb $t9, 0x8c($t0) -/* 06FF2C 7F03B3FC 8FA90544 */ lw $t1, 0x544($sp) -/* 06FF30 7F03B400 3C0A8008 */ lui $t2, %hi(g_BgPortals) -/* 06FF34 7F03B404 5D200027 */ bgtzl $t1, .L7F03B4A4 -/* 06FF38 7F03B408 8FA80544 */ lw $t0, 0x544($sp) -/* 06FF3C 7F03B40C 8D4AFF80 */ lw $t2, %lo(g_BgPortals)($t2) -/* 06FF40 7F03B410 8D4B0000 */ lw $t3, ($t2) -/* 06FF44 7F03B414 11600012 */ beqz $t3, .L7F03B460 -/* 06FF48 7F03B418 00000000 */ nop -/* 06FF4C 7F03B41C 0FC225E6 */ jal get_curplayer_positiondata -/* 06FF50 7F03B420 00000000 */ nop -/* 06FF54 7F03B424 0FC2CBF6 */ jal getTileRoom -/* 06FF58 7F03B428 8C440014 */ lw $a0, 0x14($v0) -/* 06FF5C 7F03B42C 27AC007C */ addiu $t4, $sp, 0x7c -/* 06FF60 7F03B430 27AD008C */ addiu $t5, $sp, 0x8c -/* 06FF64 7F03B434 27AE0510 */ addiu $t6, $sp, 0x510 -/* 06FF68 7F03B438 AFAE0018 */ sw $t6, 0x18($sp) -/* 06FF6C 7F03B43C AFAD0014 */ sw $t5, 0x14($sp) -/* 06FF70 7F03B440 AFAC0010 */ sw $t4, 0x10($sp) -/* 06FF74 7F03B444 00402025 */ move $a0, $v0 -/* 06FF78 7F03B448 02002825 */ move $a1, $s0 -/* 06FF7C 7F03B44C 27A60560 */ addiu $a2, $sp, 0x560 -/* 06FF80 7F03B450 0FC0EB7D */ jal sub_GAME_7F03ADF4 -/* 06FF84 7F03B454 27A70070 */ addiu $a3, $sp, 0x70 -/* 06FF88 7F03B458 10000011 */ b .L7F03B4A0 -/* 06FF8C 7F03B45C AFA20544 */ sw $v0, 0x544($sp) -.L7F03B460: -/* 06FF90 7F03B460 0FC225E6 */ jal get_curplayer_positiondata -/* 06FF94 7F03B464 00000000 */ nop -/* 06FF98 7F03B468 0FC2CBF6 */ jal getTileRoom -/* 06FF9C 7F03B46C 8C440014 */ lw $a0, 0x14($v0) -/* 06FFA0 7F03B470 27AF007C */ addiu $t7, $sp, 0x7c -/* 06FFA4 7F03B474 27B8008C */ addiu $t8, $sp, 0x8c -/* 06FFA8 7F03B478 27B90510 */ addiu $t9, $sp, 0x510 -/* 06FFAC 7F03B47C AFB90018 */ sw $t9, 0x18($sp) -/* 06FFB0 7F03B480 AFB80014 */ sw $t8, 0x14($sp) -/* 06FFB4 7F03B484 AFAF0010 */ sw $t7, 0x10($sp) -/* 06FFB8 7F03B488 00402025 */ move $a0, $v0 -/* 06FFBC 7F03B48C 02002825 */ move $a1, $s0 -/* 06FFC0 7F03B490 27A60560 */ addiu $a2, $sp, 0x560 -/* 06FFC4 7F03B494 0FC0EBD7 */ jal sub_GAME_7F03AF5C -/* 06FFC8 7F03B498 27A70070 */ addiu $a3, $sp, 0x70 -/* 06FFCC 7F03B49C AFA20544 */ sw $v0, 0x544($sp) -.L7F03B4A0: -/* 06FFD0 7F03B4A0 8FA80544 */ lw $t0, 0x544($sp) -.L7F03B4A4: -/* 06FFD4 7F03B4A4 5900000F */ blezl $t0, .L7F03B4E4 -/* 06FFD8 7F03B4A8 8FAB0544 */ lw $t3, 0x544($sp) -/* 06FFDC 7F03B4AC 0FC2D20C */ jal get_room_data_float2 -/* 06FFE0 7F03B4B0 00000000 */ nop -/* 06FFE4 7F03B4B4 C7B20510 */ lwc1 $f18, 0x510($sp) -/* 06FFE8 7F03B4B8 C7AA0514 */ lwc1 $f10, 0x514($sp) -/* 06FFEC 7F03B4BC C7A80518 */ lwc1 $f8, 0x518($sp) -/* 06FFF0 7F03B4C0 46009182 */ mul.s $f6, $f18, $f0 -/* 06FFF4 7F03B4C4 00000000 */ nop -/* 06FFF8 7F03B4C8 46005102 */ mul.s $f4, $f10, $f0 -/* 06FFFC 7F03B4CC 00000000 */ nop -/* 070000 7F03B4D0 46004402 */ mul.s $f16, $f8, $f0 -/* 070004 7F03B4D4 E7A60510 */ swc1 $f6, 0x510($sp) -/* 070008 7F03B4D8 E7A40514 */ swc1 $f4, 0x514($sp) -/* 07000C 7F03B4DC E7B00518 */ swc1 $f16, 0x518($sp) -/* 070010 7F03B4E0 8FAB0544 */ lw $t3, 0x544($sp) -.L7F03B4E4: -/* 070014 7F03B4E4 27A9008C */ addiu $t1, $sp, 0x8c -/* 070018 7F03B4E8 27AA0510 */ addiu $t2, $sp, 0x510 -/* 07001C 7F03B4EC AFAA0014 */ sw $t2, 0x14($sp) -/* 070020 7F03B4F0 AFA90010 */ sw $t1, 0x10($sp) -/* 070024 7F03B4F4 02002025 */ move $a0, $s0 -/* 070028 7F03B4F8 27A50560 */ addiu $a1, $sp, 0x560 -/* 07002C 7F03B4FC 27A60070 */ addiu $a2, $sp, 0x70 -/* 070030 7F03B500 27A7007C */ addiu $a3, $sp, 0x7c -/* 070034 7F03B504 0FC0EAD6 */ jal sub_GAME_7F03AB58 -/* 070038 7F03B508 AFAB0018 */ sw $t3, 0x18($sp) -/* 07003C 7F03B50C 1840000F */ blez $v0, .L7F03B54C -/* 070040 7F03B510 AFA20544 */ sw $v0, 0x544($sp) -/* 070044 7F03B514 C7B20510 */ lwc1 $f18, 0x510($sp) -/* 070048 7F03B518 87AD053A */ lh $t5, 0x53a($sp) -/* 07004C 7F03B51C C7B00514 */ lwc1 $f16, 0x514($sp) -/* 070050 7F03B520 C7AE0518 */ lwc1 $f14, 0x518($sp) -/* 070054 7F03B524 240C0001 */ li $t4, 1 -/* 070058 7F03B528 AFAC0554 */ sw $t4, 0x554($sp) -/* 07005C 7F03B52C AFAD0540 */ sw $t5, 0x540($sp) -/* 070060 7F03B530 E7B20548 */ swc1 $f18, 0x548($sp) -/* 070064 7F03B534 E7B20500 */ swc1 $f18, 0x500($sp) -/* 070068 7F03B538 E7B0054C */ swc1 $f16, 0x54c($sp) -/* 07006C 7F03B53C E7B00504 */ swc1 $f16, 0x504($sp) -/* 070070 7F03B540 E7AE0550 */ swc1 $f14, 0x550($sp) -/* 070074 7F03B544 1000000A */ b .L7F03B570 -/* 070078 7F03B548 E7AE0508 */ swc1 $f14, 0x508($sp) -.L7F03B54C: -/* 07007C 7F03B54C C7B204EC */ lwc1 $f18, 0x4ec($sp) -/* 070080 7F03B550 C7A604F0 */ lwc1 $f6, 0x4f0($sp) -/* 070084 7F03B554 C7AA04F4 */ lwc1 $f10, 0x4f4($sp) -/* 070088 7F03B558 240EFFFF */ li $t6, -1 -/* 07008C 7F03B55C AFB10544 */ sw $s1, 0x544($sp) -/* 070090 7F03B560 AFAE0540 */ sw $t6, 0x540($sp) -/* 070094 7F03B564 E7B20500 */ swc1 $f18, 0x500($sp) -/* 070098 7F03B568 E7A60504 */ swc1 $f6, 0x504($sp) -/* 07009C 7F03B56C E7AA0508 */ swc1 $f10, 0x508($sp) -.L7F03B570: -/* 0700A0 7F03B570 8FAF056C */ lw $t7, 0x56c($sp) -/* 0700A4 7F03B574 8FB80554 */ lw $t8, 0x554($sp) -/* 0700A8 7F03B578 15E00003 */ bnez $t7, .L7F03B588 -/* 0700AC 7F03B57C 00000000 */ nop -/* 0700B0 7F03B580 5300000B */ beql $t8, $zero, .L7F03B5B0 -/* 0700B4 7F03B584 8FB901AC */ lw $t9, 0x1ac($sp) -.L7F03B588: -/* 0700B8 7F03B588 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 0700BC 7F03B58C 00000000 */ nop -/* 0700C0 7F03B590 00402025 */ move $a0, $v0 -/* 0700C4 7F03B594 0FC1611D */ jal mtx4TransformVecInPlace -/* 0700C8 7F03B598 27A50500 */ addiu $a1, $sp, 0x500 -/* 0700CC 7F03B59C C7A40508 */ lwc1 $f4, 0x508($sp) -/* 0700D0 7F03B5A0 46002207 */ neg.s $f8, $f4 -/* 0700D4 7F03B5A4 E7A8050C */ swc1 $f8, 0x50c($sp) -/* 0700D8 7F03B5A8 E7A801C8 */ swc1 $f8, 0x1c8($sp) -/* 0700DC 7F03B5AC 8FB901AC */ lw $t9, 0x1ac($sp) -.L7F03B5B0: -/* 0700E0 7F03B5B0 24010017 */ li $at, 23 -/* 0700E4 7F03B5B4 C7B201C8 */ lwc1 $f18, 0x1c8($sp) -/* 0700E8 7F03B5B8 1721000B */ bne $t9, $at, .L7F03B5E8 -/* 0700EC 7F03B5BC 3C118007 */ lui $s1, %hi(g_LastOnScreenProp) -/* 0700F0 7F03B5C0 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0700F4 7F03B5C4 44818000 */ mtc1 $at, $f16 -/* 0700F8 7F03B5C8 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0700FC 7F03B5CC 4612803C */ c.lt.s $f16, $f18 -/* 070100 7F03B5D0 00000000 */ nop -/* 070104 7F03B5D4 45000004 */ bc1f .L7F03B5E8 -/* 070108 7F03B5D8 00000000 */ nop -/* 07010C 7F03B5DC 44813000 */ mtc1 $at, $f6 -/* 070110 7F03B5E0 00000000 */ nop -/* 070114 7F03B5E4 E7A601C8 */ swc1 $f6, 0x1c8($sp) -.L7F03B5E8: -/* 070118 7F03B5E8 8E311DF0 */ lw $s1, %lo(g_LastOnScreenProp)($s1) -/* 07011C 7F03B5EC 3C088007 */ lui $t0, %hi(g_OnScreenPropList) -/* 070120 7F03B5F0 25081620 */ addiu $t0, %lo(g_OnScreenPropList) # addiu $t0, $t0, 0x1620 -/* 070124 7F03B5F4 2631FFFC */ addiu $s1, $s1, -4 -/* 070128 7F03B5F8 0228082B */ sltu $at, $s1, $t0 -/* 07012C 7F03B5FC 5420002A */ bnezl $at, .L7F03B6A8 -/* 070130 7F03B600 27B00194 */ addiu $s0, $sp, 0x194 -/* 070134 7F03B604 8E300000 */ lw $s0, ($s1) -.L7F03B608: -/* 070138 7F03B608 12000020 */ beqz $s0, .L7F03B68C -/* 07013C 7F03B60C 00000000 */ nop -/* 070140 7F03B610 92020000 */ lbu $v0, ($s0) -/* 070144 7F03B614 24010003 */ li $at, 3 -/* 070148 7F03B618 1041000C */ beq $v0, $at, .L7F03B64C -/* 07014C 7F03B61C 24010006 */ li $at, 6 -/* 070150 7F03B620 54410010 */ bnel $v0, $at, .L7F03B664 -/* 070154 7F03B624 92020000 */ lbu $v0, ($s0) -/* 070158 7F03B628 8E090004 */ lw $t1, 4($s0) -/* 07015C 7F03B62C 5120000D */ beql $t1, $zero, .L7F03B664 -/* 070160 7F03B630 92020000 */ lbu $v0, ($s0) -/* 070164 7F03B634 0FC26C57 */ jal getPlayerPointerIndex -/* 070168 7F03B638 02002025 */ move $a0, $s0 -/* 07016C 7F03B63C 0FC26C54 */ jal get_cur_playernum -/* 070170 7F03B640 AFA2004C */ sw $v0, 0x4c($sp) -/* 070174 7F03B644 8FAA004C */ lw $t2, 0x4c($sp) -/* 070178 7F03B648 104A0005 */ beq $v0, $t2, .L7F03B660 -.L7F03B64C: -/* 07017C 7F03B64C 02002025 */ move $a0, $s0 -/* 070180 7F03B650 0FC08992 */ jal sub_GAME_7F022648 -/* 070184 7F03B654 02402825 */ move $a1, $s2 -/* 070188 7F03B658 1000000C */ b .L7F03B68C -/* 07018C 7F03B65C 00000000 */ nop -.L7F03B660: -/* 070190 7F03B660 92020000 */ lbu $v0, ($s0) -.L7F03B664: -/* 070194 7F03B664 24010001 */ li $at, 1 -/* 070198 7F03B668 02002025 */ move $a0, $s0 -/* 07019C 7F03B66C 10410005 */ beq $v0, $at, .L7F03B684 -/* 0701A0 7F03B670 24010004 */ li $at, 4 -/* 0701A4 7F03B674 10410003 */ beq $v0, $at, .L7F03B684 -/* 0701A8 7F03B678 24010002 */ li $at, 2 -/* 0701AC 7F03B67C 14410003 */ bne $v0, $at, .L7F03B68C -/* 0701B0 7F03B680 00000000 */ nop -.L7F03B684: -/* 0701B4 7F03B684 0FC13A6F */ jal sub_GAME_7F04E9BC -/* 0701B8 7F03B688 02402825 */ move $a1, $s2 -.L7F03B68C: -/* 0701BC 7F03B68C 3C0B8007 */ lui $t3, %hi(g_OnScreenPropList) -/* 0701C0 7F03B690 256B1620 */ addiu $t3, %lo(g_OnScreenPropList) # addiu $t3, $t3, 0x1620 -/* 0701C4 7F03B694 2631FFFC */ addiu $s1, $s1, -4 -/* 0701C8 7F03B698 022B082B */ sltu $at, $s1, $t3 -/* 0701CC 7F03B69C 5020FFDA */ beql $at, $zero, .L7F03B608 -/* 0701D0 7F03B6A0 8E300000 */ lw $s0, ($s1) -/* 0701D4 7F03B6A4 27B00194 */ addiu $s0, $sp, 0x194 -.L7F03B6A8: -/* 0701D8 7F03B6A8 27B104B4 */ addiu $s1, $sp, 0x4b4 -/* 0701DC 7F03B6AC 8E03003C */ lw $v1, 0x3c($s0) -.L7F03B6B0: -/* 0701E0 7F03B6B0 50600024 */ beql $v1, $zero, .L7F03B744 -/* 0701E4 7F03B6B4 26100050 */ addiu $s0, $s0, 0x50 -/* 0701E8 7F03B6B8 90620000 */ lbu $v0, ($v1) -/* 0701EC 7F03B6BC 24010003 */ li $at, 3 -/* 0701F0 7F03B6C0 02402025 */ move $a0, $s2 -/* 0701F4 7F03B6C4 10410003 */ beq $v0, $at, .L7F03B6D4 -/* 0701F8 7F03B6C8 24010006 */ li $at, 6 -/* 0701FC 7F03B6CC 54410006 */ bnel $v0, $at, .L7F03B6E8 -/* 070200 7F03B6D0 24010001 */ li $at, 1 -.L7F03B6D4: -/* 070204 7F03B6D4 0FC08A60 */ jal sub_GAME_7F022980 -/* 070208 7F03B6D8 26050038 */ addiu $a1, $s0, 0x38 -/* 07020C 7F03B6DC 1000000C */ b .L7F03B710 -/* 070210 7F03B6E0 8E0C0084 */ lw $t4, 0x84($s0) -/* 070214 7F03B6E4 24010001 */ li $at, 1 -.L7F03B6E8: -/* 070218 7F03B6E8 10410006 */ beq $v0, $at, .L7F03B704 -/* 07021C 7F03B6EC 02402025 */ move $a0, $s2 -/* 070220 7F03B6F0 24010004 */ li $at, 4 -/* 070224 7F03B6F4 10410003 */ beq $v0, $at, .L7F03B704 -/* 070228 7F03B6F8 24010002 */ li $at, 2 -/* 07022C 7F03B6FC 54410004 */ bnel $v0, $at, .L7F03B710 -/* 070230 7F03B700 8E0C0084 */ lw $t4, 0x84($s0) -.L7F03B704: -/* 070234 7F03B704 0FC13A9A */ jal sub_GAME_7F04EA68 -/* 070238 7F03B708 26050038 */ addiu $a1, $s0, 0x38 -/* 07023C 7F03B70C 8E0C0084 */ lw $t4, 0x84($s0) -.L7F03B710: -/* 070240 7F03B710 8FAD018C */ lw $t5, 0x18c($sp) -/* 070244 7F03B714 1180000A */ beqz $t4, .L7F03B740 -/* 070248 7F03B718 25AE0001 */ addiu $t6, $t5, 1 -/* 07024C 7F03B71C AFAE018C */ sw $t6, 0x18c($sp) -/* 070250 7F03B720 0FC1780E */ jal bondwalkItemGetObjectsShootThrough -/* 070254 7F03B724 8FA401AC */ lw $a0, 0x1ac($sp) -/* 070258 7F03B728 8FAF018C */ lw $t7, 0x18c($sp) -/* 07025C 7F03B72C 01E2082A */ slt $at, $t7, $v0 -/* 070260 7F03B730 54200004 */ bnezl $at, .L7F03B744 -/* 070264 7F03B734 26100050 */ addiu $s0, $s0, 0x50 -/* 070268 7F03B738 AFA00554 */ sw $zero, 0x554($sp) -/* 07026C 7F03B73C AFA0056C */ sw $zero, 0x56c($sp) -.L7F03B740: -/* 070270 7F03B740 26100050 */ addiu $s0, $s0, 0x50 -.L7F03B744: -/* 070274 7F03B744 5611FFDA */ bnel $s0, $s1, .L7F03B6B0 -/* 070278 7F03B748 8E03003C */ lw $v1, 0x3c($s0) -/* 07027C 7F03B74C 8FB80554 */ lw $t8, 0x554($sp) -/* 070280 7F03B750 8FB9056C */ lw $t9, 0x56c($sp) -/* 070284 7F03B754 8FA801AC */ lw $t0, 0x1ac($sp) -/* 070288 7F03B758 17000002 */ bnez $t8, .L7F03B764 -/* 07028C 7F03B75C 24010017 */ li $at, 23 -/* 070290 7F03B760 13200091 */ beqz $t9, .L7F03B9A8 -.L7F03B764: -/* 070294 7F03B764 00008025 */ move $s0, $zero -/* 070298 7F03B768 15010009 */ bne $t0, $at, .L7F03B790 -/* 07029C 7F03B76C 24110001 */ li $s1, 1 -/* 0702A0 7F03B770 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0702A4 7F03B774 44815000 */ mtc1 $at, $f10 -/* 0702A8 7F03B778 C7A4050C */ lwc1 $f4, 0x50c($sp) -/* 0702AC 7F03B77C 4604503C */ c.lt.s $f10, $f4 -/* 0702B0 7F03B780 00000000 */ nop -/* 0702B4 7F03B784 45020003 */ bc1fl .L7F03B794 -/* 0702B8 7F03B788 8FA90554 */ lw $t1, 0x554($sp) -/* 0702BC 7F03B78C 00008825 */ move $s1, $zero -.L7F03B790: -/* 0702C0 7F03B790 8FA90554 */ lw $t1, 0x554($sp) -.L7F03B794: -/* 0702C4 7F03B794 87AA053A */ lh $t2, 0x53a($sp) -/* 0702C8 7F03B798 8FAC056C */ lw $t4, 0x56c($sp) -/* 0702CC 7F03B79C 11200034 */ beqz $t1, .L7F03B870 -/* 0702D0 7F03B7A0 00000000 */ nop -/* 0702D4 7F03B7A4 05410004 */ bgez $t2, .L7F03B7B8 -/* 0702D8 7F03B7A8 87AB053A */ lh $t3, 0x53a($sp) -/* 0702DC 7F03B7AC 3C108005 */ lui $s0, %hi(D_8004E86C) -/* 0702E0 7F03B7B0 1000000A */ b .L7F03B7DC -/* 0702E4 7F03B7B4 8E10E86C */ lw $s0, %lo(D_8004E86C)($s0) -.L7F03B7B8: -/* 0702E8 7F03B7B8 000B60C0 */ sll $t4, $t3, 3 -/* 0702EC 7F03B7BC 3C0D8005 */ lui $t5, %hi(g_Textures) -/* 0702F0 7F03B7C0 01AC6821 */ addu $t5, $t5, $t4 -/* 0702F4 7F03B7C4 91AD9300 */ lbu $t5, %lo(g_Textures)($t5) -/* 0702F8 7F03B7C8 3C108005 */ lui $s0, %hi(D_8004E86C) -/* 0702FC 7F03B7CC 31AE000F */ andi $t6, $t5, 0xf -/* 070300 7F03B7D0 000E7880 */ sll $t7, $t6, 2 -/* 070304 7F03B7D4 020F8021 */ addu $s0, $s0, $t7 -/* 070308 7F03B7D8 8E10E86C */ lw $s0, %lo(D_8004E86C)($s0) -.L7F03B7DC: -/* 07030C 7F03B7DC 12200022 */ beqz $s1, .L7F03B868 -/* 070310 7F03B7E0 00000000 */ nop -/* 070314 7F03B7E4 8618000A */ lh $t8, 0xa($s0) -/* 070318 7F03B7E8 8FB901AC */ lw $t9, 0x1ac($sp) -/* 07031C 7F03B7EC 24010017 */ li $at, 23 -/* 070320 7F03B7F0 1B000016 */ blez $t8, .L7F03B84C -/* 070324 7F03B7F4 00000000 */ nop -/* 070328 7F03B7F8 13210014 */ beq $t9, $at, .L7F03B84C -/* 07032C 7F03B7FC 00000000 */ nop -/* 070330 7F03B800 0C002914 */ jal randomGetNext -/* 070334 7F03B804 00000000 */ nop -/* 070338 7F03B808 8608000A */ lh $t0, 0xa($s0) -/* 07033C 7F03B80C 8E090004 */ lw $t1, 4($s0) -/* 070340 7F03B810 240BFFFF */ li $t3, -1 -/* 070344 7F03B814 0048001B */ divu $zero, $v0, $t0 -/* 070348 7F03B818 00001810 */ mfhi $v1 -/* 07034C 7F03B81C 01235021 */ addu $t2, $t1, $v1 -/* 070350 7F03B820 91460000 */ lbu $a2, ($t2) -/* 070354 7F03B824 15000002 */ bnez $t0, .L7F03B830 -/* 070358 7F03B828 00000000 */ nop -/* 07035C 7F03B82C 0007000D */ break 7 -.L7F03B830: -/* 070360 7F03B830 AFA00018 */ sw $zero, 0x18($sp) -/* 070364 7F03B834 AFAB0014 */ sw $t3, 0x14($sp) -/* 070368 7F03B838 AFA00010 */ sw $zero, 0x10($sp) -/* 07036C 7F03B83C 27A40548 */ addiu $a0, $sp, 0x548 -/* 070370 7F03B840 27A5051C */ addiu $a1, $sp, 0x51c -/* 070374 7F03B844 0FC28423 */ jal explosionCreateBulletImpact -/* 070378 7F03B848 87A70546 */ lh $a3, 0x546($sp) -.L7F03B84C: -/* 07037C 7F03B84C 0FC2ED8C */ jal check_if_imageID_is_light -/* 070380 7F03B850 87A4053A */ lh $a0, 0x53a($sp) -/* 070384 7F03B854 10400004 */ beqz $v0, .L7F03B868 -/* 070388 7F03B858 8FA40534 */ lw $a0, 0x534($sp) -/* 07038C 7F03B85C 87A50538 */ lh $a1, 0x538($sp) -/* 070390 7F03B860 0FC2EF83 */ jal lightFixtureBreak -/* 070394 7F03B864 8FA60544 */ lw $a2, 0x544($sp) -.L7F03B868: -/* 070398 7F03B868 10000014 */ b .L7F03B8BC -/* 07039C 7F03B86C 27B00548 */ addiu $s0, $sp, 0x548 -.L7F03B870: -/* 0703A0 7F03B870 11800012 */ beqz $t4, .L7F03B8BC -/* 0703A4 7F03B874 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0703A8 7F03B878 44810000 */ mtc1 $at, $f0 -/* 0703AC 7F03B87C C7A801BC */ lwc1 $f8, 0x1bc($sp) -/* 0703B0 7F03B880 C7B201B0 */ lwc1 $f18, 0x1b0($sp) -/* 0703B4 7F03B884 C7AA01C0 */ lwc1 $f10, 0x1c0($sp) -/* 0703B8 7F03B888 46004402 */ mul.s $f16, $f8, $f0 -/* 0703BC 7F03B88C C7A801B4 */ lwc1 $f8, 0x1b4($sp) -/* 0703C0 7F03B890 27B00560 */ addiu $s0, $sp, 0x560 -/* 0703C4 7F03B894 46005102 */ mul.s $f4, $f10, $f0 -/* 0703C8 7F03B898 C7AA01B8 */ lwc1 $f10, 0x1b8($sp) -/* 0703CC 7F03B89C 46128180 */ add.s $f6, $f16, $f18 -/* 0703D0 7F03B8A0 C7B201C4 */ lwc1 $f18, 0x1c4($sp) -/* 0703D4 7F03B8A4 46082400 */ add.s $f16, $f4, $f8 -/* 0703D8 7F03B8A8 E7A60560 */ swc1 $f6, 0x560($sp) -/* 0703DC 7F03B8AC 46009182 */ mul.s $f6, $f18, $f0 -/* 0703E0 7F03B8B0 E7B00564 */ swc1 $f16, 0x564($sp) -/* 0703E4 7F03B8B4 460A3100 */ add.s $f4, $f6, $f10 -/* 0703E8 7F03B8B8 E7A40568 */ swc1 $f4, 0x568($sp) -.L7F03B8BC: -/* 0703EC 7F03B8BC 5200003B */ beql $s0, $zero, .L7F03B9AC -/* 0703F0 7F03B8C0 8FBF0034 */ lw $ra, 0x34($sp) -/* 0703F4 7F03B8C4 1220001D */ beqz $s1, .L7F03B93C -/* 0703F8 7F03B8C8 8FA401AC */ lw $a0, 0x1ac($sp) -/* 0703FC 7F03B8CC 02002825 */ move $a1, $s0 -/* 070400 7F03B8D0 0FC191DD */ jal recall_joy2_hits_edit_flag -/* 070404 7F03B8D4 8FA60540 */ lw $a2, 0x540($sp) -/* 070408 7F03B8D8 8FAD0540 */ lw $t5, 0x540($sp) -/* 07040C 7F03B8DC 3C028005 */ lui $v0, %hi(g_Textures) -/* 070410 7F03B8E0 24010005 */ li $at, 5 -/* 070414 7F03B8E4 000D70C0 */ sll $t6, $t5, 3 -/* 070418 7F03B8E8 004E1021 */ addu $v0, $v0, $t6 -/* 07041C 7F03B8EC 90429300 */ lbu $v0, %lo(g_Textures)($v0) -/* 070420 7F03B8F0 304F000F */ andi $t7, $v0, 0xf -/* 070424 7F03B8F4 11E10011 */ beq $t7, $at, .L7F03B93C -/* 070428 7F03B8F8 24010006 */ li $at, 6 -/* 07042C 7F03B8FC 11E1000F */ beq $t7, $at, .L7F03B93C -/* 070430 7F03B900 8FB80544 */ lw $t8, 0x544($sp) -/* 070434 7F03B904 241900FF */ li $t9, 255 -/* 070438 7F03B908 A3B80050 */ sb $t8, 0x50($sp) -/* 07043C 7F03B90C 0FC26C54 */ jal get_cur_playernum -/* 070440 7F03B910 A3B90051 */ sb $t9, 0x51($sp) -/* 070444 7F03B914 27A80050 */ addiu $t0, $sp, 0x50 -/* 070448 7F03B918 AFA80018 */ sw $t0, 0x18($sp) -/* 07044C 7F03B91C 00002025 */ move $a0, $zero -/* 070450 7F03B920 02002825 */ move $a1, $s0 -/* 070454 7F03B924 8FA6055C */ lw $a2, 0x55c($sp) -/* 070458 7F03B928 24070001 */ li $a3, 1 -/* 07045C 7F03B92C AFA00010 */ sw $zero, 0x10($sp) -/* 070460 7F03B930 AFA20014 */ sw $v0, 0x14($sp) -/* 070464 7F03B934 0FC27094 */ jal explosionCreate -/* 070468 7F03B938 AFA0001C */ sw $zero, 0x1c($sp) -.L7F03B93C: -/* 07046C 7F03B93C 3C0141D0 */ li $at, 0x41D00000 # 26.000000 -/* 070470 7F03B940 44810000 */ mtc1 $at, $f0 -/* 070474 7F03B944 C7B001BC */ lwc1 $f16, 0x1bc($sp) -/* 070478 7F03B948 C6080000 */ lwc1 $f8, ($s0) -/* 07047C 7F03B94C C60A0004 */ lwc1 $f10, 4($s0) -/* 070480 7F03B950 46100482 */ mul.s $f18, $f0, $f16 -/* 070484 7F03B954 02002025 */ move $a0, $s0 -/* 070488 7F03B958 46124181 */ sub.s $f6, $f8, $f18 -/* 07048C 7F03B95C C6120008 */ lwc1 $f18, 8($s0) -/* 070490 7F03B960 E6060000 */ swc1 $f6, ($s0) -/* 070494 7F03B964 C7A401C0 */ lwc1 $f4, 0x1c0($sp) -/* 070498 7F03B968 46040402 */ mul.s $f16, $f0, $f4 -/* 07049C 7F03B96C 46105201 */ sub.s $f8, $f10, $f16 -/* 0704A0 7F03B970 E6080004 */ swc1 $f8, 4($s0) -/* 0704A4 7F03B974 C7A601C4 */ lwc1 $f6, 0x1c4($sp) -/* 0704A8 7F03B978 46060102 */ mul.s $f4, $f0, $f6 -/* 0704AC 7F03B97C 46049281 */ sub.s $f10, $f18, $f4 -/* 0704B0 7F03B980 0FC19ED3 */ jal sub_GAME_7F067B4C -/* 0704B4 7F03B984 E60A0008 */ swc1 $f10, 8($s0) -/* 0704B8 7F03B988 3C0141D0 */ li $at, 0x41D00000 # 26.000000 -/* 0704BC 7F03B98C 44810000 */ mtc1 $at, $f0 -/* 0704C0 7F03B990 12200005 */ beqz $s1, .L7F03B9A8 -/* 0704C4 7F03B994 02002025 */ move $a0, $s0 -/* 0704C8 7F03B998 44060000 */ mfc1 $a2, $f0 -/* 0704CC 7F03B99C 24050001 */ li $a1, 1 -/* 0704D0 7F03B9A0 0FC28F87 */ jal sub_GAME_7F0A3E1C -/* 0704D4 7F03B9A4 87A70546 */ lh $a3, 0x546($sp) -.L7F03B9A8: -/* 0704D8 7F03B9A8 8FBF0034 */ lw $ra, 0x34($sp) -.L7F03B9AC: -/* 0704DC 7F03B9AC 8FB00028 */ lw $s0, 0x28($sp) -/* 0704E0 7F03B9B0 8FB1002C */ lw $s1, 0x2c($sp) -/* 0704E4 7F03B9B4 8FB20030 */ lw $s2, 0x30($sp) -/* 0704E8 7F03B9B8 03E00008 */ jr $ra -/* 0704EC 7F03B9BC 27BD0578 */ addiu $sp, $sp, 0x578 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F03B9C0(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03B9C0 -/* 0704F0 7F03B9C0 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0704F4 7F03B9C4 8FAE0054 */ lw $t6, 0x54($sp) -/* 0704F8 7F03B9C8 44867000 */ mtc1 $a2, $f14 -/* 0704FC 7F03B9CC AFBF0014 */ sw $ra, 0x14($sp) -/* 070500 7F03B9D0 AFA40030 */ sw $a0, 0x30($sp) -/* 070504 7F03B9D4 AFA50034 */ sw $a1, 0x34($sp) -/* 070508 7F03B9D8 11C00091 */ beqz $t6, .L7F03BC20 -/* 07050C 7F03B9DC AFA7003C */ sw $a3, 0x3c($sp) -/* 070510 7F03B9E0 44806000 */ mtc1 $zero, $f12 -/* 070514 7F03B9E4 00003025 */ move $a2, $zero -/* 070518 7F03B9E8 00002825 */ move $a1, $zero -/* 07051C 7F03B9EC 00001825 */ move $v1, $zero -/* 070520 7F03B9F0 00801025 */ move $v0, $a0 -/* 070524 7F03B9F4 46006086 */ mov.s $f2, $f12 -.L7F03B9F8: -/* 070528 7F03B9F8 8C4F003C */ lw $t7, 0x3c($v0) -/* 07052C 7F03B9FC 51E0000E */ beql $t7, $zero, .L7F03BA38 -/* 070530 7F03BA00 24630001 */ addiu $v1, $v1, 1 -/* 070534 7F03BA04 8C580084 */ lw $t8, 0x84($v0) -/* 070538 7F03BA08 5300000B */ beql $t8, $zero, .L7F03BA38 -/* 07053C 7F03BA0C 24630001 */ addiu $v1, $v1, 1 -/* 070540 7F03BA10 C4400038 */ lwc1 $f0, 0x38($v0) -/* 070544 7F03BA14 24A50001 */ addiu $a1, $a1, 1 -/* 070548 7F03BA18 4600103C */ c.lt.s $f2, $f0 -/* 07054C 7F03BA1C 00000000 */ nop -/* 070550 7F03BA20 45020005 */ bc1fl .L7F03BA38 -/* 070554 7F03BA24 24630001 */ addiu $v1, $v1, 1 -/* 070558 7F03BA28 46001306 */ mov.s $f12, $f2 -/* 07055C 7F03BA2C 46000086 */ mov.s $f2, $f0 -/* 070560 7F03BA30 00603025 */ move $a2, $v1 -/* 070564 7F03BA34 24630001 */ addiu $v1, $v1, 1 -.L7F03BA38: -/* 070568 7F03BA38 2861000A */ slti $at, $v1, 0xa -/* 07056C 7F03BA3C 1420FFEE */ bnez $at, .L7F03B9F8 -/* 070570 7F03BA40 24420050 */ addiu $v0, $v0, 0x50 -/* 070574 7F03BA44 8FB90030 */ lw $t9, 0x30($sp) -/* 070578 7F03BA48 8F240018 */ lw $a0, 0x18($t9) -/* 07057C 7F03BA4C E7AE0038 */ swc1 $f14, 0x38($sp) -/* 070580 7F03BA50 E7AC0020 */ swc1 $f12, 0x20($sp) -/* 070584 7F03BA54 AFA60024 */ sw $a2, 0x24($sp) -/* 070588 7F03BA58 0FC1780E */ jal bondwalkItemGetObjectsShootThrough -/* 07058C 7F03BA5C AFA5001C */ sw $a1, 0x1c($sp) -/* 070590 7F03BA60 8FA5001C */ lw $a1, 0x1c($sp) -/* 070594 7F03BA64 8FA60024 */ lw $a2, 0x24($sp) -/* 070598 7F03BA68 8FA70030 */ lw $a3, 0x30($sp) -/* 07059C 7F03BA6C 00A2082A */ slt $at, $a1, $v0 -/* 0705A0 7F03BA70 C7AC0020 */ lwc1 $f12, 0x20($sp) -/* 0705A4 7F03BA74 1420005A */ bnez $at, .L7F03BBE0 -/* 0705A8 7F03BA78 C7AE0038 */ lwc1 $f14, 0x38($sp) -/* 0705AC 7F03BA7C 00064080 */ sll $t0, $a2, 2 -/* 0705B0 7F03BA80 460E603C */ c.lt.s $f12, $f14 -/* 0705B4 7F03BA84 01064021 */ addu $t0, $t0, $a2 -/* 0705B8 7F03BA88 00084100 */ sll $t0, $t0, 4 -/* 0705BC 7F03BA8C 00E84821 */ addu $t1, $a3, $t0 -/* 0705C0 7F03BA90 AD20003C */ sw $zero, 0x3c($t1) -/* 0705C4 7F03BA94 45000002 */ bc1f .L7F03BAA0 -/* 0705C8 7F03BA98 E4EC0034 */ swc1 $f12, 0x34($a3) -/* 0705CC 7F03BA9C E4EE0034 */ swc1 $f14, 0x34($a3) -.L7F03BAA0: -/* 0705D0 7F03BAA0 8CEA003C */ lw $t2, 0x3c($a3) -/* 0705D4 7F03BAA4 00E01025 */ move $v0, $a3 -/* 0705D8 7F03BAA8 240400A0 */ li $a0, 160 -/* 0705DC 7F03BAAC 1140000A */ beqz $t2, .L7F03BAD8 -/* 0705E0 7F03BAB0 24030320 */ li $v1, 800 -/* 0705E4 7F03BAB4 8C4B0084 */ lw $t3, 0x84($v0) -/* 0705E8 7F03BAB8 55600008 */ bnezl $t3, .L7F03BADC -/* 0705EC 7F03BABC 8C4C008C */ lw $t4, 0x8c($v0) -/* 0705F0 7F03BAC0 C4440038 */ lwc1 $f4, 0x38($v0) -/* 0705F4 7F03BAC4 4604603C */ c.lt.s $f12, $f4 -/* 0705F8 7F03BAC8 00000000 */ nop -/* 0705FC 7F03BACC 45020003 */ bc1fl .L7F03BADC -/* 070600 7F03BAD0 8C4C008C */ lw $t4, 0x8c($v0) -/* 070604 7F03BAD4 AC40003C */ sw $zero, 0x3c($v0) -.L7F03BAD8: -/* 070608 7F03BAD8 8C4C008C */ lw $t4, 0x8c($v0) -.L7F03BADC: -/* 07060C 7F03BADC 5180000B */ beql $t4, $zero, .L7F03BB0C -/* 070610 7F03BAE0 24E200A0 */ addiu $v0, $a3, 0xa0 -/* 070614 7F03BAE4 8C4D00D4 */ lw $t5, 0xd4($v0) -/* 070618 7F03BAE8 55A00008 */ bnezl $t5, .L7F03BB0C -/* 07061C 7F03BAEC 24E200A0 */ addiu $v0, $a3, 0xa0 -/* 070620 7F03BAF0 C4460088 */ lwc1 $f6, 0x88($v0) -/* 070624 7F03BAF4 4606603C */ c.lt.s $f12, $f6 -/* 070628 7F03BAF8 00000000 */ nop -/* 07062C 7F03BAFC 45020003 */ bc1fl .L7F03BB0C -/* 070630 7F03BB00 24E200A0 */ addiu $v0, $a3, 0xa0 -/* 070634 7F03BB04 AC40008C */ sw $zero, 0x8c($v0) -/* 070638 7F03BB08 24E200A0 */ addiu $v0, $a3, 0xa0 -.L7F03BB0C: -/* 07063C 7F03BB0C 8C4E003C */ lw $t6, 0x3c($v0) -/* 070640 7F03BB10 24840140 */ addiu $a0, $a0, 0x140 -/* 070644 7F03BB14 51C0000B */ beql $t6, $zero, .L7F03BB44 -/* 070648 7F03BB18 8C58008C */ lw $t8, 0x8c($v0) -/* 07064C 7F03BB1C 8C4F0084 */ lw $t7, 0x84($v0) -/* 070650 7F03BB20 55E00008 */ bnezl $t7, .L7F03BB44 -/* 070654 7F03BB24 8C58008C */ lw $t8, 0x8c($v0) -/* 070658 7F03BB28 C4480038 */ lwc1 $f8, 0x38($v0) -/* 07065C 7F03BB2C 4608603C */ c.lt.s $f12, $f8 -/* 070660 7F03BB30 00000000 */ nop -/* 070664 7F03BB34 45020003 */ bc1fl .L7F03BB44 -/* 070668 7F03BB38 8C58008C */ lw $t8, 0x8c($v0) -/* 07066C 7F03BB3C AC40003C */ sw $zero, 0x3c($v0) -/* 070670 7F03BB40 8C58008C */ lw $t8, 0x8c($v0) -.L7F03BB44: -/* 070674 7F03BB44 5300000B */ beql $t8, $zero, .L7F03BB74 -/* 070678 7F03BB48 8C4800DC */ lw $t0, 0xdc($v0) -/* 07067C 7F03BB4C 8C5900D4 */ lw $t9, 0xd4($v0) -/* 070680 7F03BB50 57200008 */ bnezl $t9, .L7F03BB74 -/* 070684 7F03BB54 8C4800DC */ lw $t0, 0xdc($v0) -/* 070688 7F03BB58 C44A0088 */ lwc1 $f10, 0x88($v0) -/* 07068C 7F03BB5C 460A603C */ c.lt.s $f12, $f10 -/* 070690 7F03BB60 00000000 */ nop -/* 070694 7F03BB64 45020003 */ bc1fl .L7F03BB74 -/* 070698 7F03BB68 8C4800DC */ lw $t0, 0xdc($v0) -/* 07069C 7F03BB6C AC40008C */ sw $zero, 0x8c($v0) -/* 0706A0 7F03BB70 8C4800DC */ lw $t0, 0xdc($v0) -.L7F03BB74: -/* 0706A4 7F03BB74 5100000B */ beql $t0, $zero, .L7F03BBA4 -/* 0706A8 7F03BB78 8C4A012C */ lw $t2, 0x12c($v0) -/* 0706AC 7F03BB7C 8C490124 */ lw $t1, 0x124($v0) -/* 0706B0 7F03BB80 55200008 */ bnezl $t1, .L7F03BBA4 -/* 0706B4 7F03BB84 8C4A012C */ lw $t2, 0x12c($v0) -/* 0706B8 7F03BB88 C45000D8 */ lwc1 $f16, 0xd8($v0) -/* 0706BC 7F03BB8C 4610603C */ c.lt.s $f12, $f16 -/* 0706C0 7F03BB90 00000000 */ nop -/* 0706C4 7F03BB94 45020003 */ bc1fl .L7F03BBA4 -/* 0706C8 7F03BB98 8C4A012C */ lw $t2, 0x12c($v0) -/* 0706CC 7F03BB9C AC4000DC */ sw $zero, 0xdc($v0) -/* 0706D0 7F03BBA0 8C4A012C */ lw $t2, 0x12c($v0) -.L7F03BBA4: -/* 0706D4 7F03BBA4 1140000A */ beqz $t2, .L7F03BBD0 -/* 0706D8 7F03BBA8 00000000 */ nop -/* 0706DC 7F03BBAC 8C4B0174 */ lw $t3, 0x174($v0) -/* 0706E0 7F03BBB0 15600007 */ bnez $t3, .L7F03BBD0 -/* 0706E4 7F03BBB4 00000000 */ nop -/* 0706E8 7F03BBB8 C4520128 */ lwc1 $f18, 0x128($v0) -/* 0706EC 7F03BBBC 4612603C */ c.lt.s $f12, $f18 -/* 0706F0 7F03BBC0 00000000 */ nop -/* 0706F4 7F03BBC4 45000002 */ bc1f .L7F03BBD0 -/* 0706F8 7F03BBC8 00000000 */ nop -/* 0706FC 7F03BBCC AC40012C */ sw $zero, 0x12c($v0) -.L7F03BBD0: -/* 070700 7F03BBD0 1483FFCE */ bne $a0, $v1, .L7F03BB0C -/* 070704 7F03BBD4 24420140 */ addiu $v0, $v0, 0x140 -/* 070708 7F03BBD8 10000012 */ b .L7F03BC24 -/* 07070C 7F03BBDC 8FAD0058 */ lw $t5, 0x58($sp) -.L7F03BBE0: -/* 070710 7F03BBE0 8CE40018 */ lw $a0, 0x18($a3) -/* 070714 7F03BBE4 E7AE0038 */ swc1 $f14, 0x38($sp) -/* 070718 7F03BBE8 0FC1780E */ jal bondwalkItemGetObjectsShootThrough -/* 07071C 7F03BBEC AFA5001C */ sw $a1, 0x1c($sp) -/* 070720 7F03BBF0 8FA5001C */ lw $a1, 0x1c($sp) -/* 070724 7F03BBF4 8FA70030 */ lw $a3, 0x30($sp) -/* 070728 7F03BBF8 C7AE0038 */ lwc1 $f14, 0x38($sp) -/* 07072C 7F03BBFC 24AC0001 */ addiu $t4, $a1, 1 -/* 070730 7F03BC00 55820008 */ bnel $t4, $v0, .L7F03BC24 -/* 070734 7F03BC04 8FAD0058 */ lw $t5, 0x58($sp) -/* 070738 7F03BC08 C4E40034 */ lwc1 $f4, 0x34($a3) -/* 07073C 7F03BC0C 4604703C */ c.lt.s $f14, $f4 -/* 070740 7F03BC10 00000000 */ nop -/* 070744 7F03BC14 45020003 */ bc1fl .L7F03BC24 -/* 070748 7F03BC18 8FAD0058 */ lw $t5, 0x58($sp) -/* 07074C 7F03BC1C E4EE0034 */ swc1 $f14, 0x34($a3) -.L7F03BC20: -/* 070750 7F03BC20 8FAD0058 */ lw $t5, 0x58($sp) -.L7F03BC24: -/* 070754 7F03BC24 8FAE0030 */ lw $t6, 0x30($sp) -/* 070758 7F03BC28 51A00048 */ beql $t5, $zero, .L7F03BD4C -/* 07075C 7F03BC2C 00002025 */ move $a0, $zero -/* 070760 7F03BC30 8DC20018 */ lw $v0, 0x18($t6) -/* 070764 7F03BC34 24010012 */ li $at, 18 -/* 070768 7F03BC38 10410043 */ beq $v0, $at, .L7F03BD48 -/* 07076C 7F03BC3C 24010014 */ li $at, 20 -/* 070770 7F03BC40 50410042 */ beql $v0, $at, .L7F03BD4C -/* 070774 7F03BC44 00002025 */ move $a0, $zero -/* 070778 7F03BC48 8DC3003C */ lw $v1, 0x3c($t6) -/* 07077C 7F03BC4C 01C01025 */ move $v0, $t6 -/* 070780 7F03BC50 50600008 */ beql $v1, $zero, .L7F03BC74 -/* 070784 7F03BC54 8C4F008C */ lw $t7, 0x8c($v0) -/* 070788 7F03BC58 C5C60038 */ lwc1 $f6, 0x38($t6) -/* 07078C 7F03BC5C 4606703C */ c.lt.s $f14, $f6 -/* 070790 7F03BC60 00000000 */ nop -/* 070794 7F03BC64 45020003 */ bc1fl .L7F03BC74 -/* 070798 7F03BC68 8C4F008C */ lw $t7, 0x8c($v0) -/* 07079C 7F03BC6C ADC0003C */ sw $zero, 0x3c($t6) -/* 0707A0 7F03BC70 8C4F008C */ lw $t7, 0x8c($v0) -.L7F03BC74: -/* 0707A4 7F03BC74 51E00008 */ beql $t7, $zero, .L7F03BC98 -/* 0707A8 7F03BC78 8FA20030 */ lw $v0, 0x30($sp) -/* 0707AC 7F03BC7C C4480088 */ lwc1 $f8, 0x88($v0) -/* 0707B0 7F03BC80 4608703C */ c.lt.s $f14, $f8 -/* 0707B4 7F03BC84 00000000 */ nop -/* 0707B8 7F03BC88 45020003 */ bc1fl .L7F03BC98 -/* 0707BC 7F03BC8C 8FA20030 */ lw $v0, 0x30($sp) -/* 0707C0 7F03BC90 AC40008C */ sw $zero, 0x8c($v0) -/* 0707C4 7F03BC94 8FA20030 */ lw $v0, 0x30($sp) -.L7F03BC98: -/* 0707C8 7F03BC98 240400A0 */ li $a0, 160 -/* 0707CC 7F03BC9C 24030320 */ li $v1, 800 -/* 0707D0 7F03BCA0 244200A0 */ addiu $v0, $v0, 0xa0 -.L7F03BCA4: -/* 0707D4 7F03BCA4 8C58003C */ lw $t8, 0x3c($v0) -/* 0707D8 7F03BCA8 24840140 */ addiu $a0, $a0, 0x140 -/* 0707DC 7F03BCAC 53000008 */ beql $t8, $zero, .L7F03BCD0 -/* 0707E0 7F03BCB0 8C59008C */ lw $t9, 0x8c($v0) -/* 0707E4 7F03BCB4 C44A0038 */ lwc1 $f10, 0x38($v0) -/* 0707E8 7F03BCB8 460A703C */ c.lt.s $f14, $f10 -/* 0707EC 7F03BCBC 00000000 */ nop -/* 0707F0 7F03BCC0 45020003 */ bc1fl .L7F03BCD0 -/* 0707F4 7F03BCC4 8C59008C */ lw $t9, 0x8c($v0) -/* 0707F8 7F03BCC8 AC40003C */ sw $zero, 0x3c($v0) -/* 0707FC 7F03BCCC 8C59008C */ lw $t9, 0x8c($v0) -.L7F03BCD0: -/* 070800 7F03BCD0 53200008 */ beql $t9, $zero, .L7F03BCF4 -/* 070804 7F03BCD4 8C4800DC */ lw $t0, 0xdc($v0) -/* 070808 7F03BCD8 C4500088 */ lwc1 $f16, 0x88($v0) -/* 07080C 7F03BCDC 4610703C */ c.lt.s $f14, $f16 -/* 070810 7F03BCE0 00000000 */ nop -/* 070814 7F03BCE4 45020003 */ bc1fl .L7F03BCF4 -/* 070818 7F03BCE8 8C4800DC */ lw $t0, 0xdc($v0) -/* 07081C 7F03BCEC AC40008C */ sw $zero, 0x8c($v0) -/* 070820 7F03BCF0 8C4800DC */ lw $t0, 0xdc($v0) -.L7F03BCF4: -/* 070824 7F03BCF4 51000008 */ beql $t0, $zero, .L7F03BD18 -/* 070828 7F03BCF8 8C49012C */ lw $t1, 0x12c($v0) -/* 07082C 7F03BCFC C45200D8 */ lwc1 $f18, 0xd8($v0) -/* 070830 7F03BD00 4612703C */ c.lt.s $f14, $f18 -/* 070834 7F03BD04 00000000 */ nop -/* 070838 7F03BD08 45020003 */ bc1fl .L7F03BD18 -/* 07083C 7F03BD0C 8C49012C */ lw $t1, 0x12c($v0) -/* 070840 7F03BD10 AC4000DC */ sw $zero, 0xdc($v0) -/* 070844 7F03BD14 8C49012C */ lw $t1, 0x12c($v0) -.L7F03BD18: -/* 070848 7F03BD18 11200007 */ beqz $t1, .L7F03BD38 -/* 07084C 7F03BD1C 00000000 */ nop -/* 070850 7F03BD20 C4440128 */ lwc1 $f4, 0x128($v0) -/* 070854 7F03BD24 4604703C */ c.lt.s $f14, $f4 -/* 070858 7F03BD28 00000000 */ nop -/* 07085C 7F03BD2C 45000002 */ bc1f .L7F03BD38 -/* 070860 7F03BD30 00000000 */ nop -/* 070864 7F03BD34 AC40012C */ sw $zero, 0x12c($v0) -.L7F03BD38: -/* 070868 7F03BD38 1483FFDA */ bne $a0, $v1, .L7F03BCA4 -/* 07086C 7F03BD3C 24420140 */ addiu $v0, $v0, 0x140 -/* 070870 7F03BD40 8FAA0030 */ lw $t2, 0x30($sp) -/* 070874 7F03BD44 E54E0034 */ swc1 $f14, 0x34($t2) -.L7F03BD48: -/* 070878 7F03BD48 00002025 */ move $a0, $zero -.L7F03BD4C: -/* 07087C 7F03BD4C 8FA20030 */ lw $v0, 0x30($sp) -/* 070880 7F03BD50 24030320 */ li $v1, 800 -.L7F03BD54: -/* 070884 7F03BD54 8C4B003C */ lw $t3, 0x3c($v0) -/* 070888 7F03BD58 24840050 */ addiu $a0, $a0, 0x50 -/* 07088C 7F03BD5C 1560001D */ bnez $t3, .L7F03BDD4 -/* 070890 7F03BD60 00000000 */ nop -/* 070894 7F03BD64 E44E0038 */ swc1 $f14, 0x38($v0) -/* 070898 7F03BD68 8FAC0034 */ lw $t4, 0x34($sp) -/* 07089C 7F03BD6C 00404025 */ move $t0, $v0 -/* 0708A0 7F03BD70 AC4C003C */ sw $t4, 0x3c($v0) -/* 0708A4 7F03BD74 8FAD003C */ lw $t5, 0x3c($sp) -/* 0708A8 7F03BD78 AC4D0040 */ sw $t5, 0x40($v0) -/* 0708AC 7F03BD7C 8FAE0040 */ lw $t6, 0x40($sp) -/* 0708B0 7F03BD80 AC4E0044 */ sw $t6, 0x44($v0) -/* 0708B4 7F03BD84 8FAF0044 */ lw $t7, 0x44($sp) -/* 0708B8 7F03BD88 25F90030 */ addiu $t9, $t7, 0x30 -.L7F03BD8C: -/* 0708BC 7F03BD8C 8DE10000 */ lw $at, ($t7) -/* 0708C0 7F03BD90 25EF000C */ addiu $t7, $t7, 0xc -/* 0708C4 7F03BD94 2508000C */ addiu $t0, $t0, 0xc -/* 0708C8 7F03BD98 AD01003C */ sw $at, 0x3c($t0) -/* 0708CC 7F03BD9C 8DE1FFF8 */ lw $at, -8($t7) -/* 0708D0 7F03BDA0 AD010040 */ sw $at, 0x40($t0) -/* 0708D4 7F03BDA4 8DE1FFFC */ lw $at, -4($t7) -/* 0708D8 7F03BDA8 15F9FFF8 */ bne $t7, $t9, .L7F03BD8C -/* 0708DC 7F03BDAC AD010044 */ sw $at, 0x44($t0) -/* 0708E0 7F03BDB0 8FA90048 */ lw $t1, 0x48($sp) -/* 0708E4 7F03BDB4 AC490078 */ sw $t1, 0x78($v0) -/* 0708E8 7F03BDB8 8FAA004C */ lw $t2, 0x4c($sp) -/* 0708EC 7F03BDBC AC4A007C */ sw $t2, 0x7c($v0) -/* 0708F0 7F03BDC0 8FAB0050 */ lw $t3, 0x50($sp) -/* 0708F4 7F03BDC4 AC4B0080 */ sw $t3, 0x80($v0) -/* 0708F8 7F03BDC8 8FAC0054 */ lw $t4, 0x54($sp) -/* 0708FC 7F03BDCC 10000003 */ b .L7F03BDDC -/* 070900 7F03BDD0 AC4C0084 */ sw $t4, 0x84($v0) -.L7F03BDD4: -/* 070904 7F03BDD4 1483FFDF */ bne $a0, $v1, .L7F03BD54 -/* 070908 7F03BDD8 24420050 */ addiu $v0, $v0, 0x50 -.L7F03BDDC: -/* 07090C 7F03BDDC 8FBF0014 */ lw $ra, 0x14($sp) -/* 070910 7F03BDE0 27BD0030 */ addiu $sp, $sp, 0x30 -/* 070914 7F03BDE4 03E00008 */ jr $ra -/* 070918 7F03BDE8 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void chraiFistAttackHandler(void) { - -} -#else -GLOBAL_ASM( -.text -glabel chraiFistAttackHandler -/* 07091C 7F03BDEC 27BDFF38 */ addiu $sp, $sp, -0xc8 -/* 070920 7F03BDF0 AFBF0064 */ sw $ra, 0x64($sp) -/* 070924 7F03BDF4 AFB60060 */ sw $s6, 0x60($sp) -/* 070928 7F03BDF8 00A0B025 */ move $s6, $a1 -/* 07092C 7F03BDFC AFB5005C */ sw $s5, 0x5c($sp) -/* 070930 7F03BE00 AFB40058 */ sw $s4, 0x58($sp) -/* 070934 7F03BE04 AFB30054 */ sw $s3, 0x54($sp) -/* 070938 7F03BE08 AFB20050 */ sw $s2, 0x50($sp) -/* 07093C 7F03BE0C AFB1004C */ sw $s1, 0x4c($sp) -/* 070940 7F03BE10 AFB00048 */ sw $s0, 0x48($sp) -/* 070944 7F03BE14 F7B80040 */ sdc1 $f24, 0x40($sp) -/* 070948 7F03BE18 F7B60038 */ sdc1 $f22, 0x38($sp) -/* 07094C 7F03BE1C F7B40030 */ sdc1 $f20, 0x30($sp) -/* 070950 7F03BE20 AFA400C8 */ sw $a0, 0xc8($sp) -/* 070954 7F03BE24 0FC225E6 */ jal get_curplayer_positiondata -/* 070958 7F03BE28 AFA000BC */ sw $zero, 0xbc($sp) -/* 07095C 7F03BE2C 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 070960 7F03BE30 0040A025 */ move $s4, $v0 -/* 070964 7F03BE34 0FC225E0 */ jal bondviewGetPlayerDuckingHeightRelated -/* 070968 7F03BE38 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 07096C 7F03BE3C 3C138007 */ lui $s3, %hi(g_LastOnScreenProp) -/* 070970 7F03BE40 8E731DF0 */ lw $s3, %lo(g_LastOnScreenProp)($s3) -/* 070974 7F03BE44 3C0E8007 */ lui $t6, %hi(g_OnScreenPropList) -/* 070978 7F03BE48 25CE1620 */ addiu $t6, %lo(g_OnScreenPropList) # addiu $t6, $t6, 0x1620 -/* 07097C 7F03BE4C 2673FFFC */ addiu $s3, $s3, -4 -/* 070980 7F03BE50 026E082B */ sltu $at, $s3, $t6 -/* 070984 7F03BE54 1420008F */ bnez $at, .L7F03C094 -/* 070988 7F03BE58 46000606 */ mov.s $f24, $f0 -/* 07098C 7F03BE5C 4480B000 */ mtc1 $zero, $f22 -/* 070990 7F03BE60 27B50078 */ addiu $s5, $sp, 0x78 -/* 070994 7F03BE64 8E700000 */ lw $s0, ($s3) -.L7F03BE68: -/* 070998 7F03BE68 3C0143FA */ li $at, 0x43FA0000 # 500.000000 -/* 07099C 7F03BE6C 12000083 */ beqz $s0, .L7F03C07C -/* 0709A0 7F03BE70 00000000 */ nop -/* 0709A4 7F03BE74 C6040018 */ lwc1 $f4, 0x18($s0) -/* 0709A8 7F03BE78 44813000 */ mtc1 $at, $f6 -/* 0709AC 7F03BE7C 00000000 */ nop -/* 0709B0 7F03BE80 4606203C */ c.lt.s $f4, $f6 -/* 0709B4 7F03BE84 00000000 */ nop -/* 0709B8 7F03BE88 4500007C */ bc1f .L7F03C07C -/* 0709BC 7F03BE8C 00000000 */ nop -/* 0709C0 7F03BE90 92020000 */ lbu $v0, ($s0) -/* 0709C4 7F03BE94 24010003 */ li $at, 3 -/* 0709C8 7F03BE98 1041000B */ beq $v0, $at, .L7F03BEC8 -/* 0709CC 7F03BE9C 24010006 */ li $at, 6 -/* 0709D0 7F03BEA0 14410076 */ bne $v0, $at, .L7F03C07C -/* 0709D4 7F03BEA4 00000000 */ nop -/* 0709D8 7F03BEA8 8E0F0004 */ lw $t7, 4($s0) -/* 0709DC 7F03BEAC 11E00073 */ beqz $t7, .L7F03C07C -/* 0709E0 7F03BEB0 00000000 */ nop -/* 0709E4 7F03BEB4 0FC26C57 */ jal getPlayerPointerIndex -/* 0709E8 7F03BEB8 02002025 */ move $a0, $s0 -/* 0709EC 7F03BEBC 0FC26C54 */ jal get_cur_playernum -/* 0709F0 7F03BEC0 00408825 */ move $s1, $v0 -/* 0709F4 7F03BEC4 1051006D */ beq $v0, $s1, .L7F03C07C -.L7F03BEC8: -/* 0709F8 7F03BEC8 3C014248 */ li $at, 0x42480000 # 50.000000 -/* 0709FC 7F03BECC 4481A000 */ mtc1 $at, $f20 -/* 070A00 7F03BED0 0FC1741E */ jal getCurrentWeaponOrItem -/* 070A04 7F03BED4 8E120004 */ lw $s2, 4($s0) -/* 070A08 7F03BED8 24010011 */ li $at, 17 -/* 070A0C 7F03BEDC 14410004 */ bne $v0, $at, .L7F03BEF0 -/* 070A10 7F03BEE0 27A500AC */ addiu $a1, $sp, 0xac -/* 070A14 7F03BEE4 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 070A18 7F03BEE8 4481A000 */ mtc1 $at, $f20 -/* 070A1C 7F03BEEC 00000000 */ nop -.L7F03BEF0: -/* 070A20 7F03BEF0 8E44001C */ lw $a0, 0x1c($s2) -/* 070A24 7F03BEF4 27A600A8 */ addiu $a2, $sp, 0xa8 -/* 070A28 7F03BEF8 0FC0FDD2 */ jal sub_GAME_7F03F748 -/* 070A2C 7F03BEFC 00003825 */ move $a3, $zero -/* 070A30 7F03BF00 C7A800AC */ lwc1 $f8, 0xac($sp) -/* 070A34 7F03BF04 C7AA00A8 */ lwc1 $f10, 0xa8($sp) -/* 070A38 7F03BF08 4608B03E */ c.le.s $f22, $f8 -/* 070A3C 7F03BF0C 00000000 */ nop -/* 070A40 7F03BF10 4500005A */ bc1f .L7F03C07C -/* 070A44 7F03BF14 00000000 */ nop -/* 070A48 7F03BF18 4616503E */ c.le.s $f10, $f22 -/* 070A4C 7F03BF1C 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 070A50 7F03BF20 27A600A0 */ addiu $a2, $sp, 0xa0 -/* 070A54 7F03BF24 24070001 */ li $a3, 1 -/* 070A58 7F03BF28 45000054 */ bc1f .L7F03C07C -/* 070A5C 7F03BF2C 00000000 */ nop -/* 070A60 7F03BF30 0FC0FDD2 */ jal sub_GAME_7F03F748 -/* 070A64 7F03BF34 8E44001C */ lw $a0, 0x1c($s2) -/* 070A68 7F03BF38 C7B000A4 */ lwc1 $f16, 0xa4($sp) -/* 070A6C 7F03BF3C C7B200A0 */ lwc1 $f18, 0xa0($sp) -/* 070A70 7F03BF40 4610B03E */ c.le.s $f22, $f16 -/* 070A74 7F03BF44 00000000 */ nop -/* 070A78 7F03BF48 4500004C */ bc1f .L7F03C07C -/* 070A7C 7F03BF4C 00000000 */ nop -/* 070A80 7F03BF50 4616903E */ c.le.s $f18, $f22 -/* 070A84 7F03BF54 27A5009C */ addiu $a1, $sp, 0x9c -/* 070A88 7F03BF58 27A60098 */ addiu $a2, $sp, 0x98 -/* 070A8C 7F03BF5C 24070002 */ li $a3, 2 -/* 070A90 7F03BF60 45000046 */ bc1f .L7F03C07C -/* 070A94 7F03BF64 00000000 */ nop -/* 070A98 7F03BF68 0FC0FDD2 */ jal sub_GAME_7F03F748 -/* 070A9C 7F03BF6C 8E44001C */ lw $a0, 0x1c($s2) -/* 070AA0 7F03BF70 C7A40098 */ lwc1 $f4, 0x98($sp) -/* 070AA4 7F03BF74 C7A6009C */ lwc1 $f6, 0x9c($sp) -/* 070AA8 7F03BF78 4616203E */ c.le.s $f4, $f22 -/* 070AAC 7F03BF7C 00000000 */ nop -/* 070AB0 7F03BF80 4500003E */ bc1f .L7F03C07C -/* 070AB4 7F03BF84 00000000 */ nop -/* 070AB8 7F03BF88 4600A207 */ neg.s $f8, $f20 -/* 070ABC 7F03BF8C 27A40090 */ addiu $a0, $sp, 0x90 -/* 070AC0 7F03BF90 4606403E */ c.le.s $f8, $f6 -/* 070AC4 7F03BF94 24190013 */ li $t9, 19 -/* 070AC8 7F03BF98 45000038 */ bc1f .L7F03C07C -/* 070ACC 7F03BF9C 00000000 */ nop -/* 070AD0 7F03BFA0 8E980014 */ lw $t8, 0x14($s4) -/* 070AD4 7F03BFA4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 070AD8 7F03BFA8 44818000 */ mtc1 $at, $f16 -/* 070ADC 7F03BFAC AFB80090 */ sw $t8, 0x90($sp) -/* 070AE0 7F03BFB0 C60A0010 */ lwc1 $f10, 0x10($s0) -/* 070AE4 7F03BFB4 8E070008 */ lw $a3, 8($s0) -/* 070AE8 7F03BFB8 8E860010 */ lw $a2, 0x10($s4) -/* 070AEC 7F03BFBC 8E850008 */ lw $a1, 8($s4) -/* 070AF0 7F03BFC0 E7B60020 */ swc1 $f22, 0x20($sp) -/* 070AF4 7F03BFC4 E7B8001C */ swc1 $f24, 0x1c($sp) -/* 070AF8 7F03BFC8 E7B80018 */ swc1 $f24, 0x18($sp) -/* 070AFC 7F03BFCC AFB90014 */ sw $t9, 0x14($sp) -/* 070B00 7F03BFD0 E7B00024 */ swc1 $f16, 0x24($sp) -/* 070B04 7F03BFD4 0FC2C389 */ jal stanTestLineUnobstructed -/* 070B08 7F03BFD8 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 070B0C 7F03BFDC 10400027 */ beqz $v0, .L7F03C07C -/* 070B10 7F03BFE0 8FA80090 */ lw $t0, 0x90($sp) -/* 070B14 7F03BFE4 8E090014 */ lw $t1, 0x14($s0) -/* 070B18 7F03BFE8 15090024 */ bne $t0, $t1, .L7F03C07C -/* 070B1C 7F03BFEC 00000000 */ nop -/* 070B20 7F03BFF0 0FC1E67C */ jal currentPlayerGetCrouchPos -/* 070B24 7F03BFF4 2411000F */ li $s1, 15 -/* 070B28 7F03BFF8 24010001 */ li $at, 1 -/* 070B2C 7F03BFFC 14410003 */ bne $v0, $at, .L7F03C00C -/* 070B30 7F03C000 00000000 */ nop -/* 070B34 7F03C004 10000006 */ b .L7F03C020 -/* 070B38 7F03C008 241100C8 */ li $s1, 200 -.L7F03C00C: -/* 070B3C 7F03C00C 0FC1E67C */ jal currentPlayerGetCrouchPos -/* 070B40 7F03C010 00000000 */ nop -/* 070B44 7F03C014 54400003 */ bnezl $v0, .L7F03C024 -/* 070B48 7F03C018 27A40084 */ addiu $a0, $sp, 0x84 -/* 070B4C 7F03C01C 241100C9 */ li $s1, 201 -.L7F03C020: -/* 070B50 7F03C020 27A40084 */ addiu $a0, $sp, 0x84 -.L7F03C024: -/* 070B54 7F03C024 02A02825 */ move $a1, $s5 -/* 070B58 7F03C028 0FC1A073 */ jal bullet_path_from_screen_center -/* 070B5C 7F03C02C 8FA600C8 */ lw $a2, 0xc8($sp) -/* 070B60 7F03C030 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 070B64 7F03C034 00000000 */ nop -/* 070B68 7F03C038 00402025 */ move $a0, $v0 -/* 070B6C 7F03C03C 0FC160F6 */ jal mtx4RotateVecInPlace -/* 070B70 7F03C040 02A02825 */ move $a1, $s5 -/* 070B74 7F03C044 240A0001 */ li $t2, 1 -/* 070B78 7F03C048 AFAA0010 */ sw $t2, 0x10($sp) -/* 070B7C 7F03C04C 02402025 */ move $a0, $s2 -/* 070B80 7F03C050 02202825 */ move $a1, $s1 -/* 070B84 7F03C054 02A03025 */ move $a2, $s5 -/* 070B88 7F03C058 0FC09C9F */ jal handles_shot_actors -/* 070B8C 7F03C05C 02C03825 */ move $a3, $s6 -/* 070B90 7F03C060 10400006 */ beqz $v0, .L7F03C07C -/* 070B94 7F03C064 02C02025 */ move $a0, $s6 -/* 070B98 7F03C068 240B0001 */ li $t3, 1 -/* 070B9C 7F03C06C AFAB00BC */ sw $t3, 0xbc($sp) -/* 070BA0 7F03C070 02002825 */ move $a1, $s0 -/* 070BA4 7F03C074 0FC19107 */ jal recall_joy2_hits_edit_detail_edit_flag -/* 070BA8 7F03C078 2406FFFF */ li $a2, -1 -.L7F03C07C: -/* 070BAC 7F03C07C 3C0C8007 */ lui $t4, %hi(g_OnScreenPropList) -/* 070BB0 7F03C080 258C1620 */ addiu $t4, %lo(g_OnScreenPropList) # addiu $t4, $t4, 0x1620 -/* 070BB4 7F03C084 2673FFFC */ addiu $s3, $s3, -4 -/* 070BB8 7F03C088 026C082B */ sltu $at, $s3, $t4 -/* 070BBC 7F03C08C 5020FF76 */ beql $at, $zero, .L7F03BE68 -/* 070BC0 7F03C090 8E700000 */ lw $s0, ($s3) -.L7F03C094: -/* 070BC4 7F03C094 8FAD00BC */ lw $t5, 0xbc($sp) -/* 070BC8 7F03C098 24010001 */ li $at, 1 -/* 070BCC 7F03C09C 55A00008 */ bnezl $t5, .L7F03C0C0 -/* 070BD0 7F03C0A0 8FBF0064 */ lw $ra, 0x64($sp) -/* 070BD4 7F03C0A4 16C10005 */ bne $s6, $at, .L7F03C0BC -/* 070BD8 7F03C0A8 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 070BDC 7F03C0AC 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 070BE0 7F03C0B0 24050069 */ li $a1, 105 -/* 070BE4 7F03C0B4 0C002382 */ jal sndPlaySfx -/* 070BE8 7F03C0B8 00003025 */ move $a2, $zero -.L7F03C0BC: -/* 070BEC 7F03C0BC 8FBF0064 */ lw $ra, 0x64($sp) -.L7F03C0C0: -/* 070BF0 7F03C0C0 D7B40030 */ ldc1 $f20, 0x30($sp) -/* 070BF4 7F03C0C4 D7B60038 */ ldc1 $f22, 0x38($sp) -/* 070BF8 7F03C0C8 D7B80040 */ ldc1 $f24, 0x40($sp) -/* 070BFC 7F03C0CC 8FB00048 */ lw $s0, 0x48($sp) -/* 070C00 7F03C0D0 8FB1004C */ lw $s1, 0x4c($sp) -/* 070C04 7F03C0D4 8FB20050 */ lw $s2, 0x50($sp) -/* 070C08 7F03C0D8 8FB30054 */ lw $s3, 0x54($sp) -/* 070C0C 7F03C0DC 8FB40058 */ lw $s4, 0x58($sp) -/* 070C10 7F03C0E0 8FB5005C */ lw $s5, 0x5c($sp) -/* 070C14 7F03C0E4 8FB60060 */ lw $s6, 0x60($sp) -/* 070C18 7F03C0E8 03E00008 */ jr $ra -/* 070C1C 7F03C0EC 27BD00C8 */ addiu $sp, $sp, 0xc8 -) -#endif - - void chraiDefaultWeaponFireHandler(s32); @@ -2336,9 +1508,6 @@ void chraiCheckUseHeldItem(s32 hand) } - - - /** * Address 0x7F03C294. */ @@ -2349,27 +1518,24 @@ void chraiCheckUseHeldItems(void) } - - - -void propExecuteTickOperation(PropRecord *prop, INV_ITEM_TYPE type) //#MATCH +void propExecuteTickOperation(PropRecord *prop, TICKOP op) { ObjectRecord *propobj; - if (type == INV_ITEM_WEAPON) + if (op == TICKOP_FREE) { if ((prop->type == PROP_TYPE_WEAPON) || (prop->type == PROP_TYPE_OBJ)) { propobj = prop->obj; - if (prop->obj->state & 4) //matches only is called directly (not propobj) + if (prop->obj->state & PROPSTATE_RESPAWN) //matches only if called directly (not propobj) { #ifndef VERSION_EU prop->timetoregen = 0x4B0; #else prop->timetoregen = 0x3E8; #endif - propobj->runtime_bitflags |= 0x800; - propobj->runtime_bitflags &= ~4; + propobj->runtime_bitflags |= RUNTIMEBITFLAG_00000800; + propobj->runtime_bitflags &= ~RUNTIMEBITFLAG_REMOVE; propobj->state &= ~0x80; propobj->maxdamage = 0.0f; chrpropDeregisterRooms(prop); @@ -2382,20 +1548,20 @@ void propExecuteTickOperation(PropRecord *prop, INV_ITEM_TYPE type) //#MATCH chrpropDisable(prop); chrpropFree(prop); } - else if (type == INV_ITEM_PROP) + else if (op == TICKOP_DISABLE) { chrpropDeregisterRooms(prop); chrpropDelist(prop); chrpropDisable(prop); } - else if (type == INV_ITEM_PICKUP) + else if (op == TICKOP_GIVETOPLAYER) { chrpropDeregisterRooms(prop); chrpropDelist(prop); chrpropDisable(prop); objDetach(prop); objFreeEmbedmentOrProjectile(prop); - chrpropReparent(prop, get_curplayer_positiondata()); + chrpropReparent(prop, getCurrentPlayerProp()); } } @@ -2450,10 +1616,10 @@ PropRecord *propFindForInteract(void) bool bond_interact_object(void) { PropRecord *prop; - bool op; + TICKOP tickop; prop = propFindForInteract(); - op = INV_ITEM_NONE; + tickop = TICKOP_NONE; if (prop) { @@ -2461,10 +1627,10 @@ bool bond_interact_object(void) { case PROP_TYPE_OBJ: case PROP_TYPE_WEAPON: - op = propobjInteract(prop); + tickop = propobjInteract(prop); break; case PROP_TYPE_DOOR: - op = propdoorInteract(prop); + tickop = propdoorInteract(prop); break; case PROP_TYPE_CHR: case PROP_TYPE_PLAYER: @@ -2473,7 +1639,7 @@ bool bond_interact_object(void) break; } - propExecuteTickOperation(prop, op); + propExecuteTickOperation(prop, tickop); return FALSE; } @@ -2482,8 +1648,10 @@ bool bond_interact_object(void) } -/* Not quite sure what to name this, it returns true when the given prop isn't within 400 units of any player prop */ -s32 sub_GAME_7F03C574(PropRecord* prop) +/** +* Returns true when the given prop isn't within 400 units of any player prop. +*/ +s32 chrpropIsFarFromPlayers(PropRecord* prop) { PropRecord* player_prop; coord3d pos_diff; @@ -2512,738 +1680,244 @@ s32 sub_GAME_7F03C574(PropRecord* prop) } +/** + * Per-frame tick for chrprop-managed props. + * + * 1) Advance all AI act states. + * 2) Update NPC bullet tracers. + * 3) Handle MP pickup respawns. + * 4) Update autogun bullet tracers. + * 5) Tick explosions and smoke. + * 6) Update MP character bullet tracers. + * 7) Handle prop delisting or activation. + */ +void chrpropTick(void) +{ + PropRecord *prop; + ObjectRecord *obj; + PropRecord *prev; + PropRecord *next; + ChrRecord *chr; + bool skip_regen_sfx; + TICKOP tickop; + bool is_under_60; + struct ObjectRecord *autogun; + s32 cmdindex; + s32 pad; + ObjectRecord *setupobj; - -#ifdef NONMATCHING -void handle_mp_respawn_and_some_things(void) { - void *prev_prop;//sp4C - s32 sp38; - s32 sp30; - s32 pad; // sp2C is pad - void *sp28; - s16 prop_time_to_regen; //temp_v0_3 - s16 prop_time_to_regen_2; //temp_v0_4 - s32 var_s2; - s32 var_s3; - s32 var_v1; - u8 prop_type; //temp_v0_2 - void *temp_a0; - void *temp_s0; - ObjectRecord *temp_s0_2; - void *temp_s0_3; - PropRecord *prop; //temp_v0 - void *temp_v0_5; - void *prop_s0; // var_s0 - PropRecord *prop_s1; //var_s1 - + // Advance AI states e.g. attacking, walking, dying, etc... chrlvAllChrTick(); - prop = get_ptr_obj_pos_list_current_entry(); - prop_s1 = prop; - if (prop != NULL) { - do { - var_s2 = 0; - prev_prop = prop_s1->prev; //unk24 - prop_type = prop_s1->type; - if (prop_type == 3) { - temp_s0 = prop_s1->obj; //unk4 - sub_GAME_7F062B00(temp_s0 + 0x180); // function receives ChrRecord_f180 - sub_GAME_7F062B00(temp_s0 + 0x1AC); // function receives ChrRecord_f180 - } else if ((prop_type == PROP_TYPE_OBJ) || (prop_type == PROP_TYPE_WEAPON) || (prop_type == PROP_TYPE_DOOR)) { - prop_time_to_regen = prop_s1->timetoregen; //unk2 - temp_s0_2 = prop_s1->obj; //unk4 - var_s3 = 0; - if (prop_time_to_regen > 0) { - var_v1 = 1; - if (prop_time_to_regen >= 0x3C) { - var_v1 = 0; - } - prop_s1->timetoregen = (s16) (prop_time_to_regen - g_ClockTimer); - if ((prop_s1->timetoregen < 0x3C) && (var_v1 == 0)) { - sp38 = var_v1; - if (sub_GAME_7F03C574(prop_s1) == 0) { - prop_s1->timetoregen = (s16) (prop_s1->timetoregen + 0x3C); - } - } - prop_time_to_regen_2 = prop_s1->timetoregen; - if (prop_time_to_regen_2 <= 0) { - prop_s1->timetoregen = 0; - if (temp_s0_2->state & 0x10) { - temp_s0_2->runtime_bitflags = (s32) (temp_s0_2->runtime_bitflags | 0x1000); - } else { - temp_s0_2->runtime_bitflags = (s32) (temp_s0_2->runtime_bitflags & ~0x1000); - } - } else if ((prop_time_to_regen_2 < 0x3C) && (var_v1 == 0)) { - if ((temp_s0_2->maxdamage == 0.0f) && !(temp_s0_2->state & 0x80)) { - if (temp_s0_2->flags & 0x8000) { - chrpropDeregisterRooms(prop_s1); - chrpropDelist(prop_s1); - temp_s0_2->runtime_bitflags = (s32) (temp_s0_2->runtime_bitflags & ~0x800); - sp30 = setupGetCommandIndexByProp(prop_s1); - pad = (s32) temp_s0_2->pad; - temp_v0_5 = setupCommandGetObject(lvlGetCurrentStageToLoad(), sp30 + pad); - if ((temp_v0_5 != NULL) && (temp_v0_5->prop != 0)) { //unk10 is prop - temp_a0 = temp_s0_2->model; //unk14 - sp28 = temp_v0_5; - modelSetScale(temp_a0, temp_a0->unk14); - chrpropReparent(temp_s0_2->unk10, sp28->unk10); - var_s3 = 1; - } - } else { - chrpropEnable(prop_s1); - sub_GAME_7F03E134(prop_s1); - temp_s0_2->runtime_bitflags = (s32) (temp_s0_2->runtime_bitflags & ~0x800); - } - } else { - if (temp_s0_2->state & 8) { - temp_s0_2->flags = (s32) (temp_s0_2->flags | 0x100); - } else { - temp_s0_2->flags = (s32) (temp_s0_2->flags & ~0x100); - } - temp_s0_2->maxdamage = 0.0f; - temp_s0_2->state = (u8) (temp_s0_2->state & 0xFF7F); - sub_GAME_7F050DE8(temp_s0_2->model); - } - if (temp_s0_2->type == 0x15) { - temp_s0_2->unk84 = (f32) temp_s0_2->unk80; // unk80 and unk84 invalid?? - } - if (var_s3 == 0) { - chrobjSndCreatePostEventDefault(sndPlaySfx(g_musicSfxBufferPtr, OBJ_REGEN_SFX, 0), prop_s1->pos); + + prop = chrpropGetActiveTail(); + + while (prop != NULL) + { + prev = prop->prev; + tickop = TICKOP_NONE; + + if (prop->type == PROP_TYPE_CHR) + { + chr = prop->chr; + + // Update NPC bullet tracers. + gunAdvanceBeamTimer(&chr->beams[0]); + gunAdvanceBeamTimer(&chr->beams[1]); + } + else if (((prop->type == PROP_TYPE_OBJ) || (prop->type == PROP_TYPE_WEAPON)) || (prop->type == PROP_TYPE_DOOR)) + { + obj = prop->obj; + skip_regen_sfx = FALSE; + + if (prop->timetoregen > 0) + { + is_under_60 = TRUE; + + if (prop->timetoregen >= CHROBJ_TIMETOREGEN) + { + is_under_60 = FALSE; + } + + prop->timetoregen -= g_ClockTimer; + + if (prop->timetoregen < CHROBJ_TIMETOREGEN) + { + if (!is_under_60) + { + if (!chrpropIsFarFromPlayers(prop)) + { + prop->timetoregen += CHROBJ_TIMETOREGEN; } } } - if (temp_s0_2->unk3 == 0xD) { // type == unk3 == 0xD ??? invald?? - sub_GAME_7F062B00(prop_s1->unk4->unkCC); // unkCC invalid??, function receives ChrRecord_f180 - // 0x04 is chr, obj, door, weapon + + if (prop->timetoregen <= 0) + { + prop->timetoregen = 0; + if (obj->state & PROPSTATE_10) + { + obj->runtime_bitflags |= RUNTIMEBITFLAG_00001000; + } + else + { + obj->runtime_bitflags &= ~RUNTIMEBITFLAG_00001000; + } } - } else if (prop_type == PROP_TYPE_EXPLOSION) { - var_s2 = explosionTick(prop_s1); // explosions related - } else if (prop_type == PROP_TYPE_SMOKE) { - var_s2 = explosionSmokeTick(prop_s1); // smoke related - } else if (prop_type == PROP_TYPE_VIEWER) { - sub_GAME_7F062B00(*(&g_playerPointers + (getPlayerPointerIndex(prop_s1) * 4)) + 0xA54); // function receives ChrRecord_f180 - sub_GAME_7F062B00(*(&g_playerPointers + (getPlayerPointerIndex(prop_s1) * 4)) + 0xDFC); // function receives ChrRecord_f180 - if ((prop_s1->unk4 != NULL) && (getPlayerCount() >= 2)) { - temp_s0_3 = prop_s1->unk4; - sub_GAME_7F062B00(temp_s0_3 + 0x180); // function receives ChrRecord_f180 - sub_GAME_7F062B00(temp_s0_3 + 0x1AC); // function receives ChrRecord_f180 + else if ((prop->timetoregen < CHROBJ_TIMETOREGEN) && (!is_under_60)) + { + if ((obj->maxdamage == 0.0f) && (!(obj->state & PROPSTATE_DESTROYED))) + { + if (obj->flags & PROPFLAG_INSIDEANOTHEROBJ) + { + chrpropDeregisterRooms(prop); + chrpropDelist(prop); + + obj->runtime_bitflags &= ~RUNTIMEBITFLAG_00000800; + cmdindex = setupGetCommandIndexByProp(prop); + pad = obj->pad; + setupobj = setupCommandGetObject(lvlGetCurrentStageToLoad(), cmdindex + pad); + + if ((setupobj != NULL) && (setupobj->prop != NULL)) + { + modelSetScale(obj->model, obj->model->scale); + chrpropReparent(obj->prop, setupobj->prop); + skip_regen_sfx = TRUE; + } +#ifdef DEBUG + else + { + osSyncPrintf("inobj link not found for object number %d\n", cmdindex + 1); + } +#endif + } + else + { + chrpropEnable(prop); + sub_GAME_7F03E134(prop); + obj->runtime_bitflags &= ~RUNTIMEBITFLAG_00000800; + } + } + else + { + if (obj->state & PROPSTATE_EXT_COLISION_BLOCK) + { + obj->flags |= PROPFLAG_00000100; + } + else + { + obj->flags &= ~PROPFLAG_00000100; + } + + obj->maxdamage = 0.0f; + obj->state &= ~PROPSTATE_DESTROYED; + sub_GAME_7F050DE8(obj->model); + } + + if (obj->type == PROPDEF_ARMOUR) + { + ((BodyArmourRecord *) obj)->amount = ((BodyArmourRecord *) obj)->initialamount; + } + + if (!skip_regen_sfx) + { + chrobjSndCreatePostEventDefault(sndPlaySfx(g_musicSfxBufferPtr, OBJ_REGEN_SFX, NULL), &prop->pos); + } + } } - if (var_s2 == 5) { - prop_s0 = prev_prop; - } else { - prop_s0 = prop_s1->prev; - if (var_s2 == 3) { - chrpropDelist(prop_s1); - chrpropActivateThisFrame(prop_s1); - if (prop_s0 == NULL) { - prop_s0 = prop_s1; + + // Update autogun bullet tracers. + if (obj->type == PROPDEF_AUTOGUN) + { + autogun = prop->obj; + gunAdvanceBeamTimer((BeamRecord *) ((AutogunRecord *) autogun)->beam); + } + } + else if (prop->type == PROP_TYPE_EXPLOSION) + { + tickop = explosionTick(prop); + } + else if (prop->type == PROP_TYPE_SMOKE) + { + tickop = explosionSmokeTick(prop); + } + else + { + if (prop->type == PROP_TYPE_VIEWER) + { + s32 playernum; + playernum = getPlayerPointerIndex(prop); + gunAdvanceBeamTimer(&g_playerPointers[playernum]->hands[0].weapon_beam); + playernum = getPlayerPointerIndex(prop); + gunAdvanceBeamTimer(&g_playerPointers[playernum]->hands[1].weapon_beam); + + // Update MP character bullet tracers. + if (prop->chr != NULL) + { + if (getPlayerCount() >= 2) + { + chr = prop->chr; + gunAdvanceBeamTimer(&chr->beams[0]); + gunAdvanceBeamTimer(&chr->beams[1]); } - } else { - propExecuteTickOperation(prop_s1, var_s2); } } - prop_s1 = prop_s0; // next prop in list - } while (prop_s0 != NULL); + } + + // The tick restructured the prop list which made prop->prev stale. Resume from the prev captured before the tick. + if (tickop == TICKOP_CHANGEDLIST) + { + next = prev; + } + else + { + next = prop->prev; + if (tickop == TICKOP_RETICK) + { + chrpropDelist(prop); + chrpropActivateThisFrame(prop); + + if (next == NULL) + { + next = prop; + } + } + else + { + propExecuteTickOperation(prop, tickop); + } + } + + prop = next; } } -#else - -#if defined(VERSION_US) || defined(VERSION_JP) -GLOBAL_ASM( -.text -glabel handle_mp_respawn_and_some_things -/* 071178 7F03C648 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 07117C 7F03C64C AFBF0024 */ sw $ra, 0x24($sp) -/* 071180 7F03C650 AFB30020 */ sw $s3, 0x20($sp) -/* 071184 7F03C654 AFB2001C */ sw $s2, 0x1c($sp) -/* 071188 7F03C658 AFB10018 */ sw $s1, 0x18($sp) -/* 07118C 7F03C65C 0FC0CA47 */ jal chrlvAllChrTick -/* 071190 7F03C660 AFB00014 */ sw $s0, 0x14($sp) -/* 071194 7F03C664 0FC0E909 */ jal get_ptr_obj_pos_list_current_entry -/* 071198 7F03C668 00000000 */ nop -/* 07119C 7F03C66C 104000E9 */ beqz $v0, .L7F03CA14 -/* 0711A0 7F03C670 00408825 */ move $s1, $v0 -.L7F03C674: -/* 0711A4 7F03C674 8E2E0024 */ lw $t6, 0x24($s1) -/* 0711A8 7F03C678 24010003 */ li $at, 3 -/* 0711AC 7F03C67C 00009025 */ move $s2, $zero -/* 0711B0 7F03C680 AFAE004C */ sw $t6, 0x4c($sp) -/* 0711B4 7F03C684 92220000 */ lbu $v0, ($s1) -/* 0711B8 7F03C688 54410009 */ bnel $v0, $at, .L7F03C6B0 -/* 0711BC 7F03C68C 24010001 */ li $at, 1 -/* 0711C0 7F03C690 8E300004 */ lw $s0, 4($s1) -/* 0711C4 7F03C694 0FC18AC0 */ jal sub_GAME_7F062B00 -/* 0711C8 7F03C698 26040180 */ addiu $a0, $s0, 0x180 -/* 0711CC 7F03C69C 0FC18AC0 */ jal sub_GAME_7F062B00 -/* 0711D0 7F03C6A0 260401AC */ addiu $a0, $s0, 0x1ac -/* 0711D4 7F03C6A4 100000C7 */ b .L7F03C9C4 -/* 0711D8 7F03C6A8 24010005 */ li $at, 5 -/* 0711DC 7F03C6AC 24010001 */ li $at, 1 -.L7F03C6B0: -/* 0711E0 7F03C6B0 10410005 */ beq $v0, $at, .L7F03C6C8 -/* 0711E4 7F03C6B4 24010004 */ li $at, 4 -/* 0711E8 7F03C6B8 10410003 */ beq $v0, $at, .L7F03C6C8 -/* 0711EC 7F03C6BC 24010002 */ li $at, 2 -/* 0711F0 7F03C6C0 54410092 */ bnel $v0, $at, .L7F03C90C -/* 0711F4 7F03C6C4 24010007 */ li $at, 7 -.L7F03C6C8: -/* 0711F8 7F03C6C8 86220002 */ lh $v0, 2($s1) -/* 0711FC 7F03C6CC 8E300004 */ lw $s0, 4($s1) -/* 071200 7F03C6D0 00009825 */ move $s3, $zero -/* 071204 7F03C6D4 18400083 */ blez $v0, .L7F03C8E4 -/* 071208 7F03C6D8 2841003C */ slti $at, $v0, 0x3c -/* 07120C 7F03C6DC 14200002 */ bnez $at, .L7F03C6E8 -/* 071210 7F03C6E0 24030001 */ li $v1, 1 -/* 071214 7F03C6E4 00001825 */ move $v1, $zero -.L7F03C6E8: -/* 071218 7F03C6E8 3C0F8005 */ lui $t7, %hi(g_ClockTimer) -/* 07121C 7F03C6EC 8DEF8374 */ lw $t7, %lo(g_ClockTimer)($t7) -/* 071220 7F03C6F0 004FC023 */ subu $t8, $v0, $t7 -/* 071224 7F03C6F4 A6380002 */ sh $t8, 2($s1) -/* 071228 7F03C6F8 86390002 */ lh $t9, 2($s1) -/* 07122C 7F03C6FC 2B21003C */ slti $at, $t9, 0x3c -/* 071230 7F03C700 5020000B */ beql $at, $zero, .L7F03C730 -/* 071234 7F03C704 86220002 */ lh $v0, 2($s1) -/* 071238 7F03C708 14600008 */ bnez $v1, .L7F03C72C -/* 07123C 7F03C70C 02202025 */ move $a0, $s1 -/* 071240 7F03C710 0FC0F15D */ jal sub_GAME_7F03C574 -/* 071244 7F03C714 AFA30038 */ sw $v1, 0x38($sp) -/* 071248 7F03C718 14400004 */ bnez $v0, .L7F03C72C -/* 07124C 7F03C71C 8FA30038 */ lw $v1, 0x38($sp) -/* 071250 7F03C720 86280002 */ lh $t0, 2($s1) -/* 071254 7F03C724 2509003C */ addiu $t1, $t0, 0x3c -/* 071258 7F03C728 A6290002 */ sh $t1, 2($s1) -.L7F03C72C: -/* 07125C 7F03C72C 86220002 */ lh $v0, 2($s1) -.L7F03C730: -/* 071260 7F03C730 1C40000F */ bgtz $v0, .L7F03C770 -/* 071264 7F03C734 2841003C */ slti $at, $v0, 0x3c -/* 071268 7F03C738 A6200002 */ sh $zero, 2($s1) -/* 07126C 7F03C73C 920A0002 */ lbu $t2, 2($s0) -/* 071270 7F03C740 314B0010 */ andi $t3, $t2, 0x10 -/* 071274 7F03C744 51600006 */ beql $t3, $zero, .L7F03C760 -/* 071278 7F03C748 8E0E0064 */ lw $t6, 0x64($s0) -/* 07127C 7F03C74C 8E0C0064 */ lw $t4, 0x64($s0) -/* 071280 7F03C750 358D1000 */ ori $t5, $t4, 0x1000 -/* 071284 7F03C754 10000063 */ b .L7F03C8E4 -/* 071288 7F03C758 AE0D0064 */ sw $t5, 0x64($s0) -/* 07128C 7F03C75C 8E0E0064 */ lw $t6, 0x64($s0) -.L7F03C760: -/* 071290 7F03C760 2401EFFF */ li $at, -4097 -/* 071294 7F03C764 01C17824 */ and $t7, $t6, $at -/* 071298 7F03C768 1000005E */ b .L7F03C8E4 -/* 07129C 7F03C76C AE0F0064 */ sw $t7, 0x64($s0) -.L7F03C770: -/* 0712A0 7F03C770 5020005D */ beql $at, $zero, .L7F03C8E8 -/* 0712A4 7F03C774 92190003 */ lbu $t9, 3($s0) -/* 0712A8 7F03C778 5460005B */ bnezl $v1, .L7F03C8E8 -/* 0712AC 7F03C77C 92190003 */ lbu $t9, 3($s0) -/* 0712B0 7F03C780 44800000 */ mtc1 $zero, $f0 -/* 0712B4 7F03C784 C6040070 */ lwc1 $f4, 0x70($s0) -/* 0712B8 7F03C788 46040032 */ c.eq.s $f0, $f4 -/* 0712BC 7F03C78C 00000000 */ nop -/* 0712C0 7F03C790 45020035 */ bc1fl .L7F03C868 -/* 0712C4 7F03C794 92080002 */ lbu $t0, 2($s0) -/* 0712C8 7F03C798 92180002 */ lbu $t8, 2($s0) -/* 0712CC 7F03C79C 33190080 */ andi $t9, $t8, 0x80 -/* 0712D0 7F03C7A0 57200031 */ bnezl $t9, .L7F03C868 -/* 0712D4 7F03C7A4 92080002 */ lbu $t0, 2($s0) -/* 0712D8 7F03C7A8 8E080008 */ lw $t0, 8($s0) -/* 0712DC 7F03C7AC 31098000 */ andi $t1, $t0, 0x8000 -/* 0712E0 7F03C7B0 11200023 */ beqz $t1, .L7F03C840 -/* 0712E4 7F03C7B4 00000000 */ nop -/* 0712E8 7F03C7B8 0FC0F863 */ jal chrpropDeregisterRooms -/* 0712EC 7F03C7BC 02202025 */ move $a0, $s1 -/* 0712F0 7F03C7C0 0FC0E94E */ jal chrpropDelist -/* 0712F4 7F03C7C4 02202025 */ move $a0, $s1 -/* 0712F8 7F03C7C8 8E0A0064 */ lw $t2, 0x64($s0) -/* 0712FC 7F03C7CC 2401F7FF */ li $at, -2049 -/* 071300 7F03C7D0 02202025 */ move $a0, $s1 -/* 071304 7F03C7D4 01415824 */ and $t3, $t2, $at -/* 071308 7F03C7D8 0FC15AEA */ jal setupGetCommandIndexByProp -/* 07130C 7F03C7DC AE0B0064 */ sw $t3, 0x64($s0) -/* 071310 7F03C7E0 AFA20030 */ sw $v0, 0x30($sp) -/* 071314 7F03C7E4 860C0006 */ lh $t4, 6($s0) -/* 071318 7F03C7E8 0FC2F7C1 */ jal lvlGetCurrentStageToLoad -/* 07131C 7F03C7EC AFAC002C */ sw $t4, 0x2c($sp) -/* 071320 7F03C7F0 8FAD0030 */ lw $t5, 0x30($sp) -/* 071324 7F03C7F4 8FAE002C */ lw $t6, 0x2c($sp) -/* 071328 7F03C7F8 00402025 */ move $a0, $v0 -/* 07132C 7F03C7FC 0FC15BA8 */ jal setupCommandGetObject -/* 071330 7F03C800 01AE2821 */ addu $a1, $t5, $t6 -/* 071334 7F03C804 5040002A */ beql $v0, $zero, .L7F03C8B0 -/* 071338 7F03C808 92180003 */ lbu $t8, 3($s0) -/* 07133C 7F03C80C 8C4F0010 */ lw $t7, 0x10($v0) -/* 071340 7F03C810 51E00027 */ beql $t7, $zero, .L7F03C8B0 -/* 071344 7F03C814 92180003 */ lbu $t8, 3($s0) -/* 071348 7F03C818 8E040014 */ lw $a0, 0x14($s0) -/* 07134C 7F03C81C 8C850014 */ lw $a1, 0x14($a0) -/* 071350 7F03C820 0FC1B39E */ jal modelSetScale -/* 071354 7F03C824 AFA20028 */ sw $v0, 0x28($sp) -/* 071358 7F03C828 8FA30028 */ lw $v1, 0x28($sp) -/* 07135C 7F03C82C 8E040010 */ lw $a0, 0x10($s0) -/* 071360 7F03C830 0FC0E969 */ jal chrpropReparent -/* 071364 7F03C834 8C650010 */ lw $a1, 0x10($v1) -/* 071368 7F03C838 1000001C */ b .L7F03C8AC -/* 07136C 7F03C83C 24130001 */ li $s3, 1 -.L7F03C840: -/* 071370 7F03C840 0FC0E901 */ jal chrpropEnable -/* 071374 7F03C844 02202025 */ move $a0, $s1 -/* 071378 7F03C848 0FC0F84D */ jal sub_GAME_7F03E134 -/* 07137C 7F03C84C 02202025 */ move $a0, $s1 -/* 071380 7F03C850 8E180064 */ lw $t8, 0x64($s0) -/* 071384 7F03C854 2401F7FF */ li $at, -2049 -/* 071388 7F03C858 0301C824 */ and $t9, $t8, $at -/* 07138C 7F03C85C 10000013 */ b .L7F03C8AC -/* 071390 7F03C860 AE190064 */ sw $t9, 0x64($s0) -/* 071394 7F03C864 92080002 */ lbu $t0, 2($s0) -.L7F03C868: -/* 071398 7F03C868 31090008 */ andi $t1, $t0, 8 -/* 07139C 7F03C86C 51200006 */ beql $t1, $zero, .L7F03C888 -/* 0713A0 7F03C870 8E0C0008 */ lw $t4, 8($s0) -/* 0713A4 7F03C874 8E0A0008 */ lw $t2, 8($s0) -/* 0713A8 7F03C878 354B0100 */ ori $t3, $t2, 0x100 -/* 0713AC 7F03C87C 10000005 */ b .L7F03C894 -/* 0713B0 7F03C880 AE0B0008 */ sw $t3, 8($s0) -/* 0713B4 7F03C884 8E0C0008 */ lw $t4, 8($s0) -.L7F03C888: -/* 0713B8 7F03C888 2401FEFF */ li $at, -257 -/* 0713BC 7F03C88C 01816824 */ and $t5, $t4, $at -/* 0713C0 7F03C890 AE0D0008 */ sw $t5, 8($s0) -.L7F03C894: -/* 0713C4 7F03C894 920E0002 */ lbu $t6, 2($s0) -/* 0713C8 7F03C898 E6000070 */ swc1 $f0, 0x70($s0) -/* 0713CC 7F03C89C 8E040014 */ lw $a0, 0x14($s0) -/* 0713D0 7F03C8A0 31CFFF7F */ andi $t7, $t6, 0xff7f -/* 0713D4 7F03C8A4 0FC1437A */ jal sub_GAME_7F050DE8 -/* 0713D8 7F03C8A8 A20F0002 */ sb $t7, 2($s0) -.L7F03C8AC: -/* 0713DC 7F03C8AC 92180003 */ lbu $t8, 3($s0) -.L7F03C8B0: -/* 0713E0 7F03C8B0 24010015 */ li $at, 21 -/* 0713E4 7F03C8B4 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 0713E8 7F03C8B8 17010003 */ bne $t8, $at, .L7F03C8C8 -/* 0713EC 7F03C8BC 24050052 */ li $a1, 82 -/* 0713F0 7F03C8C0 C6060080 */ lwc1 $f6, 0x80($s0) -/* 0713F4 7F03C8C4 E6060084 */ swc1 $f6, 0x84($s0) -.L7F03C8C8: -/* 0713F8 7F03C8C8 16600006 */ bnez $s3, .L7F03C8E4 -/* 0713FC 7F03C8CC 00003025 */ move $a2, $zero -/* 071400 7F03C8D0 0C002382 */ jal sndPlaySfx -/* 071404 7F03C8D4 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 071408 7F03C8D8 00402025 */ move $a0, $v0 -/* 07140C 7F03C8DC 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 071410 7F03C8E0 26250008 */ addiu $a1, $s1, 8 -.L7F03C8E4: -/* 071414 7F03C8E4 92190003 */ lbu $t9, 3($s0) -.L7F03C8E8: -/* 071418 7F03C8E8 2401000D */ li $at, 13 -/* 07141C 7F03C8EC 57210035 */ bnel $t9, $at, .L7F03C9C4 -/* 071420 7F03C8F0 24010005 */ li $at, 5 -/* 071424 7F03C8F4 8E220004 */ lw $v0, 4($s1) -/* 071428 7F03C8F8 0FC18AC0 */ jal sub_GAME_7F062B00 -/* 07142C 7F03C8FC 8C4400CC */ lw $a0, 0xcc($v0) -/* 071430 7F03C900 10000030 */ b .L7F03C9C4 -/* 071434 7F03C904 24010005 */ li $at, 5 -/* 071438 7F03C908 24010007 */ li $at, 7 -.L7F03C90C: -/* 07143C 7F03C90C 54410006 */ bnel $v0, $at, .L7F03C928 -/* 071440 7F03C910 24010008 */ li $at, 8 -/* 071444 7F03C914 0FC273BA */ jal explosionTick -/* 071448 7F03C918 02202025 */ move $a0, $s1 -/* 07144C 7F03C91C 10000028 */ b .L7F03C9C0 -/* 071450 7F03C920 00409025 */ move $s2, $v0 -/* 071454 7F03C924 24010008 */ li $at, 8 -.L7F03C928: -/* 071458 7F03C928 54410006 */ bnel $v0, $at, .L7F03C944 -/* 07145C 7F03C92C 24010006 */ li $at, 6 -/* 071460 7F03C930 0FC27A2B */ jal explosionSmokeTick -/* 071464 7F03C934 02202025 */ move $a0, $s1 -/* 071468 7F03C938 10000021 */ b .L7F03C9C0 -/* 07146C 7F03C93C 00409025 */ move $s2, $v0 -/* 071470 7F03C940 24010006 */ li $at, 6 -.L7F03C944: -/* 071474 7F03C944 5441001F */ bnel $v0, $at, .L7F03C9C4 -/* 071478 7F03C948 24010005 */ li $at, 5 -/* 07147C 7F03C94C 0FC26C57 */ jal getPlayerPointerIndex -/* 071480 7F03C950 02202025 */ move $a0, $s1 -/* 071484 7F03C954 00024080 */ sll $t0, $v0, 2 -/* 071488 7F03C958 3C048008 */ lui $a0, %hi(g_playerPointers) -/* 07148C 7F03C95C 00882021 */ addu $a0, $a0, $t0 -/* 071490 7F03C960 8C849EE0 */ lw $a0, %lo(g_playerPointers)($a0) -/* 071494 7F03C964 0FC18AC0 */ jal sub_GAME_7F062B00 -/* 071498 7F03C968 24840A54 */ addiu $a0, $a0, 0xa54 -/* 07149C 7F03C96C 0FC26C57 */ jal getPlayerPointerIndex -/* 0714A0 7F03C970 02202025 */ move $a0, $s1 -/* 0714A4 7F03C974 00024880 */ sll $t1, $v0, 2 -/* 0714A8 7F03C978 3C048008 */ lui $a0, %hi(g_playerPointers) -/* 0714AC 7F03C97C 00892021 */ addu $a0, $a0, $t1 -/* 0714B0 7F03C980 8C849EE0 */ lw $a0, %lo(g_playerPointers)($a0) -/* 0714B4 7F03C984 0FC18AC0 */ jal sub_GAME_7F062B00 -/* 0714B8 7F03C988 24840DFC */ addiu $a0, $a0, 0xdfc -/* 0714BC 7F03C98C 8E2A0004 */ lw $t2, 4($s1) -/* 0714C0 7F03C990 5140000C */ beql $t2, $zero, .L7F03C9C4 -/* 0714C4 7F03C994 24010005 */ li $at, 5 -/* 0714C8 7F03C998 0FC26919 */ jal getPlayerCount -/* 0714CC 7F03C99C 00000000 */ nop -/* 0714D0 7F03C9A0 28410002 */ slti $at, $v0, 2 -/* 0714D4 7F03C9A4 54200007 */ bnezl $at, .L7F03C9C4 -/* 0714D8 7F03C9A8 24010005 */ li $at, 5 -/* 0714DC 7F03C9AC 8E300004 */ lw $s0, 4($s1) -/* 0714E0 7F03C9B0 0FC18AC0 */ jal sub_GAME_7F062B00 -/* 0714E4 7F03C9B4 26040180 */ addiu $a0, $s0, 0x180 -/* 0714E8 7F03C9B8 0FC18AC0 */ jal sub_GAME_7F062B00 -/* 0714EC 7F03C9BC 260401AC */ addiu $a0, $s0, 0x1ac -.L7F03C9C0: -/* 0714F0 7F03C9C0 24010005 */ li $at, 5 -.L7F03C9C4: -/* 0714F4 7F03C9C4 56410004 */ bnel $s2, $at, .L7F03C9D8 -/* 0714F8 7F03C9C8 24010003 */ li $at, 3 -/* 0714FC 7F03C9CC 1000000F */ b .L7F03CA0C -/* 071500 7F03C9D0 8FB0004C */ lw $s0, 0x4c($sp) -/* 071504 7F03C9D4 24010003 */ li $at, 3 -.L7F03C9D8: -/* 071508 7F03C9D8 16410009 */ bne $s2, $at, .L7F03CA00 -/* 07150C 7F03C9DC 8E300024 */ lw $s0, 0x24($s1) -/* 071510 7F03C9E0 0FC0E94E */ jal chrpropDelist -/* 071514 7F03C9E4 02202025 */ move $a0, $s1 -/* 071518 7F03C9E8 0FC0E93C */ jal chrpropActivateThisFrame -/* 07151C 7F03C9EC 02202025 */ move $a0, $s1 -/* 071520 7F03C9F0 16000006 */ bnez $s0, .L7F03CA0C -/* 071524 7F03C9F4 00000000 */ nop -/* 071528 7F03C9F8 10000004 */ b .L7F03CA0C -/* 07152C 7F03C9FC 02208025 */ move $s0, $s1 -.L7F03CA00: -/* 071530 7F03CA00 02202025 */ move $a0, $s1 -/* 071534 7F03CA04 0FC0F0AF */ jal propExecuteTickOperation -/* 071538 7F03CA08 02402825 */ move $a1, $s2 -.L7F03CA0C: -/* 07153C 7F03CA0C 1600FF19 */ bnez $s0, .L7F03C674 -/* 071540 7F03CA10 02008825 */ move $s1, $s0 -.L7F03CA14: -/* 071544 7F03CA14 8FBF0024 */ lw $ra, 0x24($sp) -/* 071548 7F03CA18 8FB00014 */ lw $s0, 0x14($sp) -/* 07154C 7F03CA1C 8FB10018 */ lw $s1, 0x18($sp) -/* 071550 7F03CA20 8FB2001C */ lw $s2, 0x1c($sp) -/* 071554 7F03CA24 8FB30020 */ lw $s3, 0x20($sp) -/* 071558 7F03CA28 03E00008 */ jr $ra -/* 07155C 7F03CA2C 27BD0058 */ addiu $sp, $sp, 0x58 -) -#endif - -#if defined(VERSION_EU) -GLOBAL_ASM( -.text -glabel handle_mp_respawn_and_some_things -/* 06F0F8 7F03C708 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 06F0FC 7F03C70C AFBF0024 */ sw $ra, 0x24($sp) -/* 06F100 7F03C710 AFB30020 */ sw $s3, 0x20($sp) -/* 06F104 7F03C714 AFB2001C */ sw $s2, 0x1c($sp) -/* 06F108 7F03C718 AFB10018 */ sw $s1, 0x18($sp) -/* 06F10C 7F03C71C 0FC0CA58 */ jal chrlvAllChrTick -/* 06F110 7F03C720 AFB00014 */ sw $s0, 0x14($sp) -/* 06F114 7F03C724 0FC0E939 */ jal get_ptr_obj_pos_list_current_entry -/* 06F118 7F03C728 00000000 */ nop -/* 06F11C 7F03C72C 104000E9 */ beqz $v0, .L7F03CAD4 -/* 06F120 7F03C730 00408825 */ move $s1, $v0 -.L7F03C734: -/* 06F124 7F03C734 8E2E0024 */ lw $t6, 0x24($s1) -/* 06F128 7F03C738 24010003 */ li $at, 3 -/* 06F12C 7F03C73C 00009025 */ move $s2, $zero -/* 06F130 7F03C740 AFAE004C */ sw $t6, 0x4c($sp) -/* 06F134 7F03C744 92220000 */ lbu $v0, ($s1) -/* 06F138 7F03C748 54410009 */ bnel $v0, $at, .L7F03C770 -/* 06F13C 7F03C74C 24010001 */ li $at, 1 -/* 06F140 7F03C750 8E300004 */ lw $s0, 4($s1) -/* 06F144 7F03C754 0FC18BF1 */ jal sub_GAME_7F062B00 -/* 06F148 7F03C758 26040180 */ addiu $a0, $s0, 0x180 -/* 06F14C 7F03C75C 0FC18BF1 */ jal sub_GAME_7F062B00 -/* 06F150 7F03C760 260401AC */ addiu $a0, $s0, 0x1ac -/* 06F154 7F03C764 100000C7 */ b .L7F03CA84 -/* 06F158 7F03C768 24010005 */ li $at, 5 -/* 06F15C 7F03C76C 24010001 */ li $at, 1 -.L7F03C770: -/* 06F160 7F03C770 10410005 */ beq $v0, $at, .L7F03C788 -/* 06F164 7F03C774 24010004 */ li $at, 4 -/* 06F168 7F03C778 10410003 */ beq $v0, $at, .L7F03C788 -/* 06F16C 7F03C77C 24010002 */ li $at, 2 -/* 06F170 7F03C780 54410092 */ bnel $v0, $at, .L7F03C9CC -/* 06F174 7F03C784 24010007 */ li $at, 7 -.L7F03C788: -/* 06F178 7F03C788 86220002 */ lh $v0, 2($s1) -/* 06F17C 7F03C78C 8E300004 */ lw $s0, 4($s1) -/* 06F180 7F03C790 00009825 */ move $s3, $zero -/* 06F184 7F03C794 18400083 */ blez $v0, .L7F03C9A4 -/* 06F188 7F03C798 28410032 */ slti $at, $v0, 0x32 -/* 06F18C 7F03C79C 14200002 */ bnez $at, .L7F03C7A8 -/* 06F190 7F03C7A0 24030001 */ li $v1, 1 -/* 06F194 7F03C7A4 00001825 */ move $v1, $zero -.L7F03C7A8: -/* 06F198 7F03C7A8 3C0F8004 */ lui $t7, %hi(g_ClockTimer) # $t7, 0x8004 -/* 06F19C 7F03C7AC 8DEF0FF4 */ lw $t7, %lo(g_ClockTimer)($t7) -/* 06F1A0 7F03C7B0 004FC023 */ subu $t8, $v0, $t7 -/* 06F1A4 7F03C7B4 A6380002 */ sh $t8, 2($s1) -/* 06F1A8 7F03C7B8 86390002 */ lh $t9, 2($s1) -/* 06F1AC 7F03C7BC 2B210032 */ slti $at, $t9, 0x32 -/* 06F1B0 7F03C7C0 5020000B */ beql $at, $zero, .L7F03C7F0 -/* 06F1B4 7F03C7C4 86220002 */ lh $v0, 2($s1) -/* 06F1B8 7F03C7C8 14600008 */ bnez $v1, .L7F03C7EC -/* 06F1BC 7F03C7CC 02202025 */ move $a0, $s1 -/* 06F1C0 7F03C7D0 0FC0F18D */ jal sub_GAME_7F03C574 -/* 06F1C4 7F03C7D4 AFA30038 */ sw $v1, 0x38($sp) -/* 06F1C8 7F03C7D8 14400004 */ bnez $v0, .L7F03C7EC -/* 06F1CC 7F03C7DC 8FA30038 */ lw $v1, 0x38($sp) -/* 06F1D0 7F03C7E0 86280002 */ lh $t0, 2($s1) -/* 06F1D4 7F03C7E4 25090032 */ addiu $t1, $t0, 0x32 -/* 06F1D8 7F03C7E8 A6290002 */ sh $t1, 2($s1) -.L7F03C7EC: -/* 06F1DC 7F03C7EC 86220002 */ lh $v0, 2($s1) -.L7F03C7F0: -/* 06F1E0 7F03C7F0 1C40000F */ bgtz $v0, .L7F03C830 -/* 06F1E4 7F03C7F4 28410032 */ slti $at, $v0, 0x32 -/* 06F1E8 7F03C7F8 A6200002 */ sh $zero, 2($s1) -/* 06F1EC 7F03C7FC 920A0002 */ lbu $t2, 2($s0) -/* 06F1F0 7F03C800 314B0010 */ andi $t3, $t2, 0x10 -/* 06F1F4 7F03C804 51600006 */ beql $t3, $zero, .L7F03C820 -/* 06F1F8 7F03C808 8E0E0064 */ lw $t6, 0x64($s0) -/* 06F1FC 7F03C80C 8E0C0064 */ lw $t4, 0x64($s0) -/* 06F200 7F03C810 358D1000 */ ori $t5, $t4, 0x1000 -/* 06F204 7F03C814 10000063 */ b .L7F03C9A4 -/* 06F208 7F03C818 AE0D0064 */ sw $t5, 0x64($s0) -/* 06F20C 7F03C81C 8E0E0064 */ lw $t6, 0x64($s0) -.L7F03C820: -/* 06F210 7F03C820 2401EFFF */ li $at, -4097 -/* 06F214 7F03C824 01C17824 */ and $t7, $t6, $at -/* 06F218 7F03C828 1000005E */ b .L7F03C9A4 -/* 06F21C 7F03C82C AE0F0064 */ sw $t7, 0x64($s0) -.L7F03C830: -/* 06F220 7F03C830 5020005D */ beql $at, $zero, .L7F03C9A8 -/* 06F224 7F03C834 92190003 */ lbu $t9, 3($s0) -/* 06F228 7F03C838 5460005B */ bnezl $v1, .L7F03C9A8 -/* 06F22C 7F03C83C 92190003 */ lbu $t9, 3($s0) -/* 06F230 7F03C840 44800000 */ mtc1 $zero, $f0 -/* 06F234 7F03C844 C6040070 */ lwc1 $f4, 0x70($s0) -/* 06F238 7F03C848 46040032 */ c.eq.s $f0, $f4 -/* 06F23C 7F03C84C 00000000 */ nop -/* 06F240 7F03C850 45020035 */ bc1fl .L7F03C928 -/* 06F244 7F03C854 92080002 */ lbu $t0, 2($s0) -/* 06F248 7F03C858 92180002 */ lbu $t8, 2($s0) -/* 06F24C 7F03C85C 33190080 */ andi $t9, $t8, 0x80 -/* 06F250 7F03C860 57200031 */ bnezl $t9, .L7F03C928 -/* 06F254 7F03C864 92080002 */ lbu $t0, 2($s0) -/* 06F258 7F03C868 8E080008 */ lw $t0, 8($s0) -/* 06F25C 7F03C86C 31098000 */ andi $t1, $t0, 0x8000 -/* 06F260 7F03C870 11200023 */ beqz $t1, .L7F03C900 -/* 06F264 7F03C874 00000000 */ nop -/* 06F268 7F03C878 0FC0F893 */ jal chrpropDeregisterRooms -/* 06F26C 7F03C87C 02202025 */ move $a0, $s1 -/* 06F270 7F03C880 0FC0E97E */ jal chrpropDelist -/* 06F274 7F03C884 02202025 */ move $a0, $s1 -/* 06F278 7F03C888 8E0A0064 */ lw $t2, 0x64($s0) -/* 06F27C 7F03C88C 2401F7FF */ li $at, -2049 -/* 06F280 7F03C890 02202025 */ move $a0, $s1 -/* 06F284 7F03C894 01415824 */ and $t3, $t2, $at -/* 06F288 7F03C898 0FC15BA2 */ jal setupGetCommandIndexByProp -/* 06F28C 7F03C89C AE0B0064 */ sw $t3, 0x64($s0) -/* 06F290 7F03C8A0 AFA20030 */ sw $v0, 0x30($sp) -/* 06F294 7F03C8A4 860C0006 */ lh $t4, 6($s0) -/* 06F298 7F03C8A8 0FC2F4B1 */ jal lvlGetCurrentStageToLoad -/* 06F29C 7F03C8AC AFAC002C */ sw $t4, 0x2c($sp) -/* 06F2A0 7F03C8B0 8FAD0030 */ lw $t5, 0x30($sp) -/* 06F2A4 7F03C8B4 8FAE002C */ lw $t6, 0x2c($sp) -/* 06F2A8 7F03C8B8 00402025 */ move $a0, $v0 -/* 06F2AC 7F03C8BC 0FC15C60 */ jal setupCommandGetObject -/* 06F2B0 7F03C8C0 01AE2821 */ addu $a1, $t5, $t6 -/* 06F2B4 7F03C8C4 5040002A */ beql $v0, $zero, .L7F03C970 -/* 06F2B8 7F03C8C8 92180003 */ lbu $t8, 3($s0) -/* 06F2BC 7F03C8CC 8C4F0010 */ lw $t7, 0x10($v0) -/* 06F2C0 7F03C8D0 51E00027 */ beql $t7, $zero, .L7F03C970 -/* 06F2C4 7F03C8D4 92180003 */ lbu $t8, 3($s0) -/* 06F2C8 7F03C8D8 8E040014 */ lw $a0, 0x14($s0) -/* 06F2CC 7F03C8DC 8C850014 */ lw $a1, 0x14($a0) -/* 06F2D0 7F03C8E0 0FC1B4CF */ jal modelSetScale -/* 06F2D4 7F03C8E4 AFA20028 */ sw $v0, 0x28($sp) -/* 06F2D8 7F03C8E8 8FA30028 */ lw $v1, 0x28($sp) -/* 06F2DC 7F03C8EC 8E040010 */ lw $a0, 0x10($s0) -/* 06F2E0 7F03C8F0 0FC0E999 */ jal chrpropReparent -/* 06F2E4 7F03C8F4 8C650010 */ lw $a1, 0x10($v1) -/* 06F2E8 7F03C8F8 1000001C */ b .L7F03C96C -/* 06F2EC 7F03C8FC 24130001 */ li $s3, 1 -.L7F03C900: -/* 06F2F0 7F03C900 0FC0E931 */ jal chrpropEnable -/* 06F2F4 7F03C904 02202025 */ move $a0, $s1 -/* 06F2F8 7F03C908 0FC0F87D */ jal sub_GAME_7F03E134 -/* 06F2FC 7F03C90C 02202025 */ move $a0, $s1 -/* 06F300 7F03C910 8E180064 */ lw $t8, 0x64($s0) -/* 06F304 7F03C914 2401F7FF */ li $at, -2049 -/* 06F308 7F03C918 0301C824 */ and $t9, $t8, $at -/* 06F30C 7F03C91C 10000013 */ b .L7F03C96C -/* 06F310 7F03C920 AE190064 */ sw $t9, 0x64($s0) -/* 06F314 7F03C924 92080002 */ lbu $t0, 2($s0) -.L7F03C928: -/* 06F318 7F03C928 31090008 */ andi $t1, $t0, 8 -/* 06F31C 7F03C92C 51200006 */ beql $t1, $zero, .L7F03C948 -/* 06F320 7F03C930 8E0C0008 */ lw $t4, 8($s0) -/* 06F324 7F03C934 8E0A0008 */ lw $t2, 8($s0) -/* 06F328 7F03C938 354B0100 */ ori $t3, $t2, 0x100 -/* 06F32C 7F03C93C 10000005 */ b .L7F03C954 -/* 06F330 7F03C940 AE0B0008 */ sw $t3, 8($s0) -/* 06F334 7F03C944 8E0C0008 */ lw $t4, 8($s0) -.L7F03C948: -/* 06F338 7F03C948 2401FEFF */ li $at, -257 -/* 06F33C 7F03C94C 01816824 */ and $t5, $t4, $at -/* 06F340 7F03C950 AE0D0008 */ sw $t5, 8($s0) -.L7F03C954: -/* 06F344 7F03C954 920E0002 */ lbu $t6, 2($s0) -/* 06F348 7F03C958 E6000070 */ swc1 $f0, 0x70($s0) -/* 06F34C 7F03C95C 8E040014 */ lw $a0, 0x14($s0) -/* 06F350 7F03C960 31CFFF7F */ andi $t7, $t6, 0xff7f -/* 06F354 7F03C964 0FC14432 */ jal sub_GAME_7F050DE8 -/* 06F358 7F03C968 A20F0002 */ sb $t7, 2($s0) -.L7F03C96C: -/* 06F35C 7F03C96C 92180003 */ lbu $t8, 3($s0) -.L7F03C970: -/* 06F360 7F03C970 24010015 */ li $at, 21 -/* 06F364 7F03C974 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 06F368 7F03C978 17010003 */ bne $t8, $at, .L7F03C988 -/* 06F36C 7F03C97C 24050052 */ li $a1, 82 -/* 06F370 7F03C980 C6060080 */ lwc1 $f6, 0x80($s0) -/* 06F374 7F03C984 E6060084 */ swc1 $f6, 0x84($s0) -.L7F03C988: -/* 06F378 7F03C988 16600006 */ bnez $s3, .L7F03C9A4 -/* 06F37C 7F03C98C 00003025 */ move $a2, $zero -/* 06F380 7F03C990 0C00209A */ jal sndPlaySfx -/* 06F384 7F03C994 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 06F388 7F03C998 00402025 */ move $a0, $v0 -/* 06F38C 7F03C99C 0FC14F3C */ jal chrobjSndCreatePostEventDefault -/* 06F390 7F03C9A0 26250008 */ addiu $a1, $s1, 8 -.L7F03C9A4: -/* 06F394 7F03C9A4 92190003 */ lbu $t9, 3($s0) -.L7F03C9A8: -/* 06F398 7F03C9A8 2401000D */ li $at, 13 -/* 06F39C 7F03C9AC 57210035 */ bnel $t9, $at, .L7F03CA84 -/* 06F3A0 7F03C9B0 24010005 */ li $at, 5 -/* 06F3A4 7F03C9B4 8E220004 */ lw $v0, 4($s1) -/* 06F3A8 7F03C9B8 0FC18BF1 */ jal sub_GAME_7F062B00 -/* 06F3AC 7F03C9BC 8C4400CC */ lw $a0, 0xcc($v0) -/* 06F3B0 7F03C9C0 10000030 */ b .L7F03CA84 -/* 06F3B4 7F03C9C4 24010005 */ li $at, 5 -/* 06F3B8 7F03C9C8 24010007 */ li $at, 7 -.L7F03C9CC: -/* 06F3BC 7F03C9CC 54410006 */ bnel $v0, $at, .L7F03C9E8 -/* 06F3C0 7F03C9D0 24010008 */ li $at, 8 -/* 06F3C4 7F03C9D4 0FC2710B */ jal explosionTick -/* 06F3C8 7F03C9D8 02202025 */ move $a0, $s1 -/* 06F3CC 7F03C9DC 10000028 */ b .L7F03CA80 -/* 06F3D0 7F03C9E0 00409025 */ move $s2, $v0 -/* 06F3D4 7F03C9E4 24010008 */ li $at, 8 -.L7F03C9E8: -/* 06F3D8 7F03C9E8 54410006 */ bnel $v0, $at, .L7F03CA04 -/* 06F3DC 7F03C9EC 24010006 */ li $at, 6 -/* 06F3E0 7F03C9F0 0FC2777C */ jal explosionSmokeTick -/* 06F3E4 7F03C9F4 02202025 */ move $a0, $s1 -/* 06F3E8 7F03C9F8 10000021 */ b .L7F03CA80 -/* 06F3EC 7F03C9FC 00409025 */ move $s2, $v0 -/* 06F3F0 7F03CA00 24010006 */ li $at, 6 -.L7F03CA04: -/* 06F3F4 7F03CA04 5441001F */ bnel $v0, $at, .L7F03CA84 -/* 06F3F8 7F03CA08 24010005 */ li $at, 5 -/* 06F3FC 7F03CA0C 0FC269A7 */ jal getPlayerPointerIndex -/* 06F400 7F03CA10 02202025 */ move $a0, $s1 -/* 06F404 7F03CA14 00024080 */ sll $t0, $v0, 2 -/* 06F408 7F03CA18 3C048007 */ lui $a0, %hi(g_playerPointers) -/* 06F40C 7F03CA1C 00882021 */ addu $a0, $a0, $t0 -/* 06F410 7F03CA20 8C8489F0 */ lw $a0, %lo(g_playerPointers)($a0) -/* 06F414 7F03CA24 0FC18BF1 */ jal sub_GAME_7F062B00 -/* 06F418 7F03CA28 24840A4C */ addiu $a0, $a0, 0xa4c -/* 06F41C 7F03CA2C 0FC269A7 */ jal getPlayerPointerIndex -/* 06F420 7F03CA30 02202025 */ move $a0, $s1 -/* 06F424 7F03CA34 00024880 */ sll $t1, $v0, 2 -/* 06F428 7F03CA38 3C048007 */ lui $a0, %hi(g_playerPointers) -/* 06F42C 7F03CA3C 00892021 */ addu $a0, $a0, $t1 -/* 06F430 7F03CA40 8C8489F0 */ lw $a0, %lo(g_playerPointers)($a0) -/* 06F434 7F03CA44 0FC18BF1 */ jal sub_GAME_7F062B00 -/* 06F438 7F03CA48 24840DF4 */ addiu $a0, $a0, 0xdf4 -/* 06F43C 7F03CA4C 8E2A0004 */ lw $t2, 4($s1) -/* 06F440 7F03CA50 5140000C */ beql $t2, $zero, .L7F03CA84 -/* 06F444 7F03CA54 24010005 */ li $at, 5 -/* 06F448 7F03CA58 0FC26669 */ jal getPlayerCount -/* 06F44C 7F03CA5C 00000000 */ nop -/* 06F450 7F03CA60 28410002 */ slti $at, $v0, 2 -/* 06F454 7F03CA64 54200007 */ bnezl $at, .L7F03CA84 -/* 06F458 7F03CA68 24010005 */ li $at, 5 -/* 06F45C 7F03CA6C 8E300004 */ lw $s0, 4($s1) -/* 06F460 7F03CA70 0FC18BF1 */ jal sub_GAME_7F062B00 -/* 06F464 7F03CA74 26040180 */ addiu $a0, $s0, 0x180 -/* 06F468 7F03CA78 0FC18BF1 */ jal sub_GAME_7F062B00 -/* 06F46C 7F03CA7C 260401AC */ addiu $a0, $s0, 0x1ac -.L7F03CA80: -/* 06F470 7F03CA80 24010005 */ li $at, 5 -.L7F03CA84: -/* 06F474 7F03CA84 56410004 */ bnel $s2, $at, .L7F03CA98 -/* 06F478 7F03CA88 24010003 */ li $at, 3 -/* 06F47C 7F03CA8C 1000000F */ b .L7F03CACC -/* 06F480 7F03CA90 8FB0004C */ lw $s0, 0x4c($sp) -/* 06F484 7F03CA94 24010003 */ li $at, 3 -.L7F03CA98: -/* 06F488 7F03CA98 16410009 */ bne $s2, $at, .L7F03CAC0 -/* 06F48C 7F03CA9C 8E300024 */ lw $s0, 0x24($s1) -/* 06F490 7F03CAA0 0FC0E97E */ jal chrpropDelist -/* 06F494 7F03CAA4 02202025 */ move $a0, $s1 -/* 06F498 7F03CAA8 0FC0E96C */ jal chrpropActivateThisFrame -/* 06F49C 7F03CAAC 02202025 */ move $a0, $s1 -/* 06F4A0 7F03CAB0 16000006 */ bnez $s0, .L7F03CACC -/* 06F4A4 7F03CAB4 00000000 */ nop -/* 06F4A8 7F03CAB8 10000004 */ b .L7F03CACC -/* 06F4AC 7F03CABC 02208025 */ move $s0, $s1 -.L7F03CAC0: -/* 06F4B0 7F03CAC0 02202025 */ move $a0, $s1 -/* 06F4B4 7F03CAC4 0FC0F0DF */ jal propExecuteTickOperation -/* 06F4B8 7F03CAC8 02402825 */ move $a1, $s2 -.L7F03CACC: -/* 06F4BC 7F03CACC 1600FF19 */ bnez $s0, .L7F03C734 -/* 06F4C0 7F03CAD0 02008825 */ move $s1, $s0 -.L7F03CAD4: -/* 06F4C4 7F03CAD4 8FBF0024 */ lw $ra, 0x24($sp) -/* 06F4C8 7F03CAD8 8FB00014 */ lw $s0, 0x14($sp) -/* 06F4CC 7F03CADC 8FB10018 */ lw $s1, 0x18($sp) -/* 06F4D0 7F03CAE0 8FB2001C */ lw $s2, 0x1c($sp) -/* 06F4D4 7F03CAE4 8FB30020 */ lw $s3, 0x20($sp) -/* 06F4D8 7F03CAE8 03E00008 */ jr $ra -/* 06F4DC 7F03CAEC 27BD0058 */ addiu $sp, $sp, 0x58 -) -#endif -#endif - - - /* * Address: 0x7F03CA30 * PD: propsTick (src/game/proptick.c) */ -void determing_type_of_object_and_detection(void) +void propsTick(void) { - s32 tickop; + TICKOP tickop; PropRecord *prop; PropRecord *prev; PropRecord *propprev; - prop = get_ptr_obj_pos_list_current_entry(); + prop = chrpropGetActiveTail(); while (prop != NULL) { - tickop = 0; + tickop = TICKOP_NONE; prev = prop->prev; if (prop->type == PROP_TYPE_CHR) { - tickop = chrTickBeams(prop); + tickop = chrTick(prop); } else if ((prop->type == PROP_TYPE_OBJ) || (prop->type == PROP_TYPE_WEAPON) || (prop->type == PROP_TYPE_DOOR)) { - tickop = object_interaction(prop); + tickop = objTick(prop); } else if (prop->type == PROP_TYPE_EXPLOSION) { @@ -3255,10 +1929,10 @@ void determing_type_of_object_and_detection(void) } else if (prop->type == PROP_TYPE_VIEWER) { - tickop = playerTickBeams(prop); + tickop = playerTick(prop); } - if (tickop == 5) + if (tickop == TICKOP_CHANGEDLIST) { propprev = prev; } @@ -3266,7 +1940,7 @@ void determing_type_of_object_and_detection(void) { propprev = prop->prev; - if (tickop == 3) + if (tickop == TICKOP_RETICK) { chrpropDelist(prop); chrpropActivateThisFrame(prop); @@ -3294,10 +1968,6 @@ void determing_type_of_object_and_detection(void) } - - - - /** * Copies stan roomids from prop to array. The list is terminated * with an entry of -1. @@ -3335,8 +2005,6 @@ void chraiGetPropRoomIds(PropRecord *self, s32 *roomids) } - - /** * @param arg0: * @param arg1: out parameter. Bounding coords (x,z) by (x,z). @@ -3550,7 +2218,7 @@ void sub_GAME_7F03D058(PropRecord *prop, bool unset) //#MATCH /** * NTSC address: 0x7F03D0D4. */ -void sub_GAME_7F03D0D4(void) +void propsTickPlayer(void) { PropRecord *prop; PropRecord *propprev; @@ -3559,10 +2227,9 @@ void sub_GAME_7F03D0D4(void) if (!isBondInTank() && !g_PlayerInvincible) { //for each prop in setup - - for (prop = get_ptr_obj_pos_list_current_entry(); prop != NULL; prop = propprev) + for (prop = chrpropGetActiveTail(); prop != NULL; prop = propprev) { - isCollected = 0; + isCollected = FALSE; if (prop->timetoregen <= 0) { @@ -3577,11 +2244,11 @@ void sub_GAME_7F03D0D4(void) break; case PROP_TYPE_OBJ: - isCollected = object_collectability_routines(prop); + isCollected = objTickPlayer(prop); break; case PROP_TYPE_WEAPON: - isCollected = redirect_object_collectability_routines(prop); + isCollected = weaponTickPlayer(prop); break; } } @@ -3593,133 +2260,148 @@ void sub_GAME_7F03D0D4(void) } -f32 sub_GAME_7F03D188(PropRecord *prop, coord3d *arg1, f32 *arg2, f32 *arg3, f32 *arg4) +/** + * Address: 7F03D188 + * + * Calculates an auto-aim score for a given prop based roughly on how close it is to the center of the screen. + * Higher scores are better, with 1.0 being the best possible score. + */ +f32 chrpropScoreAutoAimTarget(PropRecord *targetprop, coord3d *aimpos, f32 *world_xbounds, f32 *world_ybounds, coord2d *out_screen) { - f32 spa0[2]; - coord3d sp94; - f32 sp8c[2]; - f32 sp84[2]; - f32 sp7c[2]; - f32 sp74[2]; - f32 sp70; - f32 sp6c; - f32 top; - f32 bottom; - f32 left; - f32 right; - f32 result; - bool sp4c; - f32 sp48; + f32 aim_screen[2]; + coord3d testpos; + f32 screen_left_edge[2]; + f32 screen_right_edge[2]; + f32 screen_top_edge[2]; + f32 screen_bottom_edge[2]; + f32 crosshair_x; + f32 crosshair_y; + f32 autoaim_top; + f32 autoaim_bottom; + f32 autoaim_left; + f32 autoaim_right; + f32 score; + bool passes_horizontal_check; + f32 horizontal_tolerance; PropRecord *playerprop; - StandTile* stan; - f32 ducking_height_related; + StandTile* line_stan; + f32 player_los_height; - top = getPlayer_c_screentop() + getPlayer_c_screenheight() * 0.175f; - bottom = getPlayer_c_screentop() + getPlayer_c_screenheight() * 0.825f; - left = getPlayer_c_screenleft() + getPlayer_c_screenwidth() * 0.25f; - right = getPlayer_c_screenleft() + getPlayer_c_screenwidth() * 0.75f; + /** + * Define a central auto-aim acceptance region. + * The sweet spot is 65% vertically in favor of the top of the screen and 50% horizontally. + */ + autoaim_top = getPlayer_c_screentop() + getPlayer_c_screenheight() * 0.175f; + autoaim_bottom = getPlayer_c_screentop() + getPlayer_c_screenheight() * 0.825f; + autoaim_left = getPlayer_c_screenleft() + getPlayer_c_screenwidth() * 0.25f; + autoaim_right = getPlayer_c_screenleft() + getPlayer_c_screenwidth() * 0.75f; - result = -2; + score = -2.0f; - transform3Dto2DCoords(arg1, (coord3d*)spa0); - sp94.x = arg2[0]; - sp94.y = arg1->y; - sp94.z = arg1->z; - transform3Dto2DCoords(&sp94, (coord3d*)sp8c); - sp94.x = arg2[1]; - sp94.y = arg1->y; - sp94.z = arg1->z; - transform3Dto2DCoords(&sp94, (coord3d*)sp84); - sp94.x = arg1->x; - sp94.y = arg3[1]; - sp94.z = arg1->z; - transform3Dto2DCoords(&sp94, (coord3d*)sp7c); - sp94.x = arg1->x; - sp94.y = arg3[0]; - sp94.z = arg1->z; - transform3Dto2DCoords(&sp94, (coord3d*)sp74); + transform3Dto2DCoords(aimpos, (coord3d*)aim_screen); + testpos.x = world_xbounds[0]; + testpos.y = aimpos->y; + testpos.z = aimpos->z; + transform3Dto2DCoords(&testpos, (coord3d*)screen_left_edge); + testpos.x = world_xbounds[1]; + testpos.y = aimpos->y; + testpos.z = aimpos->z; + transform3Dto2DCoords(&testpos, (coord3d*)screen_right_edge); + testpos.x = aimpos->x; + testpos.y = world_ybounds[1]; + testpos.z = aimpos->z; + transform3Dto2DCoords(&testpos, (coord3d*)screen_top_edge); + testpos.x = aimpos->x; + testpos.y = world_ybounds[0]; + testpos.z = aimpos->z; + transform3Dto2DCoords(&testpos, (coord3d*)screen_bottom_edge); - if (sp74[1] >= top && bottom >= sp7c[1]) + if (screen_bottom_edge[1] >= autoaim_top && autoaim_bottom >= screen_top_edge[1]) { - sp4c = FALSE; - get_bullet_angle(&sp70, &sp6c); - sp8c[0] = floorFloat(sp8c[0]); - sp84[0] = ceilFloat(sp84[0]); + passes_horizontal_check = FALSE; + get_bullet_angle(&crosshair_x, &crosshair_y); + screen_left_edge[0] = floorFloat(screen_left_edge[0]); + screen_right_edge[0] = ceilFloat(screen_right_edge[0]); - if (redirect_get_BONDdata_autoaim_x()) + if (currentPlayerGetXAutoAimEnabledRedirect()) { - if (sp8c[0] <= right && left <= sp84[0]) + if (screen_left_edge[0] <= autoaim_right && autoaim_left <= screen_right_edge[0]) { - sp48 = (sp84[0] - sp8c[0]) * 1.5f; + horizontal_tolerance = (screen_right_edge[0] - screen_left_edge[0]) * 1.5f; if (getPlayerCount() == 1) { - sp48 = sp48 * difficulty; + horizontal_tolerance = horizontal_tolerance * difficulty; } - sp4c = getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth() >= (sp8c[0] + sp84[0]) * 0.5f - sp48 - && getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth() <= (sp8c[0] + sp84[0]) * 0.5f + sp48 - && left <= spa0[0] - && right >= spa0[0]; + passes_horizontal_check = getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth() >= (screen_left_edge[0] + screen_right_edge[0]) * 0.5f - horizontal_tolerance + && getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth() <= (screen_left_edge[0] + screen_right_edge[0]) * 0.5f + horizontal_tolerance + && autoaim_left <= aim_screen[0] + && autoaim_right >= aim_screen[0]; } } else { - sp4c = sp8c[0] <= sp70 && sp70 <= sp84[0]; + passes_horizontal_check = screen_left_edge[0] <= crosshair_x && crosshair_x <= screen_right_edge[0]; } - if (sp4c) + if (passes_horizontal_check) { - playerprop = get_curplayer_positiondata(); - stan = playerprop->stan; - ducking_height_related = bondviewGetPlayerDuckingHeightRelated(g_CurrentPlayer); + playerprop = getCurrentPlayerProp(); + line_stan = playerprop->stan; + player_los_height = bondviewGetPlayerDuckingHeightRelated(g_CurrentPlayer); bondviewUpdateGuardTankFlagsRelated(playerprop, FALSE); - if ((stanTestLineUnobstructed(&stan, playerprop->pos.f[0], playerprop->pos.f[2], prop->pos.f[0], prop->pos.f[2], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER, ducking_height_related, ducking_height_related, 0.0f, 1.0f) != 0)) + // Can auto-aim see the target? + if ((stanTestLineUnobstructed(&line_stan, playerprop->pos.f[0], playerprop->pos.f[2], targetprop->pos.f[0], targetprop->pos.f[2], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER, player_los_height, player_los_height, 0.0f, 1.0f) != 0)) { - if (stan == prop->stan) + if (line_stan == targetprop->stan) { - f32 value = spa0[1]; + f32 clamped_screen_y = aim_screen[1]; - if (value < top) + if (clamped_screen_y < autoaim_top) { - value = top; + clamped_screen_y = autoaim_top; } - else if (value > bottom) + else if (clamped_screen_y > autoaim_bottom) { - value = bottom; + clamped_screen_y = autoaim_bottom; } - arg4[1] = value; + out_screen->y = clamped_screen_y; - if (redirect_get_BONDdata_autoaim_x()) + if (currentPlayerGetXAutoAimEnabledRedirect()) { - f32 value = spa0[0]; + f32 clamped_screen_x = aim_screen[0]; - if (value < left) + if (clamped_screen_x < autoaim_left) { - value = left; + clamped_screen_x = autoaim_left; } - else if (value > right) + else if (clamped_screen_x > autoaim_right) { - value = right; + clamped_screen_x = autoaim_right; } - arg4[0] = value; + out_screen->x = clamped_screen_x; } - if (getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth() >= sp8c[0] - && getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth() <= sp84[0]) + /** If the screen's center x-coord overlaps the target's horizontal span, give it the best possible score of 1.0. + * If this happens, this function's caller, chrpropUpdateAutoaimTarget, treats this as the winning prop and stops searching. + */ + if (getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth() >= screen_left_edge[0] && getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth() <= screen_right_edge[0]) { - result = 1; + score = 1.0f; } - else if (getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth() >= sp8c[0]) + // If the target is towards the left side of the screen, penalize it based on how far towards the left. + else if (getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth() >= screen_left_edge[0]) { - result = 1 - ((getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth()) - sp84[0]) / sp48; + score = 1.0f - ((getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth()) - screen_right_edge[0]) / horizontal_tolerance; } + // If the target is towards the right side of the screen, penalize it based on how far towards the right. else { - result = 1 - (sp8c[0] - (getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth())) / sp48; + score = 1.0f - (screen_left_edge[0] - (getPlayer_c_screenleft() + 0.5f * getPlayer_c_screenwidth())) / horizontal_tolerance; } } } @@ -3728,7 +2410,7 @@ f32 sub_GAME_7F03D188(PropRecord *prop, coord3d *arg1, f32 *arg2, f32 *arg3, f32 } } - return result; + return score; } @@ -3739,65 +2421,69 @@ f32 sub_GAME_7F03D188(PropRecord *prop, coord3d *arg1, f32 *arg2, f32 *arg3, f32 */ void chrpropUpdateAutoaimTarget(void) { - f32 var_f20; - struct coord2d sp9C; - f32 var_f0; - struct PropRecord **pprop_iter; - struct coord3d sp88; - struct coord2d sp80; - struct coord2d sp78; - struct PropRecord *prop; - struct coord2d sp6C; - struct PropRecord *winning_prop; - struct ChrRecord *chr; + f32 best_score; + struct coord2d best_screen_aim; // Winning target's screen space aim point. + f32 candidate_score; + struct PropRecord **onscreen_prop_iter; + struct coord3d target_aimpos; + struct coord2d target_world_xbounds; + struct coord2d target_world_ybounds; + struct PropRecord *candidate_prop; + struct coord2d candidate_screen_aim; + struct PropRecord *best_prop; + struct ChrRecord *candidate_chr; - winning_prop = NULL; - sp9C = g_DefaultAutoAimCoord; + best_prop = NULL; + best_screen_aim = g_DefaultAutoAimCoord; - if (redirect_get_BONDdata_autoaim_y() != 0) + if (currentPlayerGetYAutoAimEnabledRedirect() != FALSE) { - var_f20 = -1.0f; + best_score = -1.0f; - for (pprop_iter = g_LastOnScreenProp - 1; pprop_iter >= &g_OnScreenPropList[0]; pprop_iter--) + // Search all on screen props and record the best target. + for (onscreen_prop_iter = g_LastOnScreenProp - 1; onscreen_prop_iter >= &g_OnScreenPropList[0]; onscreen_prop_iter--) { - prop = *pprop_iter; + candidate_prop = *onscreen_prop_iter; - if (prop == NULL) + if (candidate_prop == NULL) { continue; } - if ((prop->type != PROP_TYPE_CHR) - && ((prop->type != PROP_TYPE_VIEWER) - || (prop->obj == NULL) - || (getPlayerPointerIndex(prop) == get_cur_playernum()))) + if ((candidate_prop->type != PROP_TYPE_CHR) + && ((candidate_prop->type != PROP_TYPE_VIEWER) + || (candidate_prop->obj == NULL) + || (getPlayerPointerIndex(candidate_prop) == get_cur_playernum()))) { continue; } - chr = prop->chr; + candidate_chr = candidate_prop->chr; - if (((chrGetEquippedWeaponProp(chr, GUNRIGHT) == 0) && (chrGetEquippedWeaponProp(chr, GUNLEFT) == 0))) + // Characters not holding a weapon are exempt from being a target. + if (((chrGetEquippedWeaponProp(candidate_chr, GUNRIGHT) == 0) && (chrGetEquippedWeaponProp(candidate_chr, GUNLEFT) == 0))) { continue; } - if ((sub_GAME_7F023194(prop, &sp88, &sp80, &sp78) == 0)) + if ((chrGetOnscreenRenderBounds(candidate_prop, &target_aimpos, &target_world_xbounds, &target_world_ybounds) == 0)) { continue; } - var_f0 = sub_GAME_7F03D188(prop, &sp88, &sp80.x, &sp78.x, &sp6C.x); + // Score the candidate based on how close it is to the center of the screen. + candidate_score = chrpropScoreAutoAimTarget(candidate_prop, &target_aimpos, &target_world_xbounds.x, &target_world_ybounds.x, &candidate_screen_aim.x); - if (var_f20 < var_f0) + if (best_score < candidate_score) { - var_f20 = var_f0; + best_score = candidate_score; - winning_prop = prop; - sp9C.x = sp6C.x; - sp9C.y = sp6C.y; + best_prop = candidate_prop; + best_screen_aim.x = candidate_screen_aim.x; + best_screen_aim.y = candidate_screen_aim.y; - if (1.0f <= var_f0) + // If we find a score of 1.0, we can't do any better, so break out of this search. + if (1.0f <= candidate_score) { break; } @@ -3805,15 +2491,16 @@ void chrpropUpdateAutoaimTarget(void) } } - if (winning_prop != NULL) + if (best_prop != NULL) { - if (sp9C.x > 1.0f); + // Fake but needed for matching. + if (best_screen_aim.x > 1.0f); - bondviewUpdateYAutoAimTime(winning_prop, ((sp9C.y - getPlayer_c_screentop()) / (getPlayer_c_screenheight() * 0.5f)) - 1.0f); + bondviewUpdateYAutoAimTime(best_prop, ((best_screen_aim.y - getPlayer_c_screentop()) / (getPlayer_c_screenheight() * 0.5f)) - 1.0f); - if (redirect_get_BONDdata_autoaim_x() != 0) + if (currentPlayerGetXAutoAimEnabledRedirect() != FALSE) { - bondviewUpdateXAutoAimTime(winning_prop, ((sp9C.x - getPlayer_c_screenleft()) / (getPlayer_c_screenwidth() * 0.5f)) - 1.0f); + bondviewUpdateXAutoAimTime(best_prop, ((best_screen_aim.x - getPlayer_c_screenleft()) / (getPlayer_c_screenwidth() * 0.5f)) - 1.0f); } } else @@ -3823,6 +2510,7 @@ void chrpropUpdateAutoaimTarget(void) } } + /* * Address: 7F03D9EC */ @@ -3934,21 +2622,26 @@ s32 sub_GAME_7F03DB70(s32* roomids1, s32* roomids2) } - +#define MAXBLOCKS 256 +#define ROOMLISTMAX 256 /* * Address: 0x7F03DBCC * PD: prop_try_add_to_chunk +* block: canonical name */ -s32 chrpropInsertPropnum(s16 propnum, s32 chunkindex) { +s32 chrpropInsertPropnum(s16 propnum, s32 block) +{ s32 i; - + #ifdef DEBUG + assert(block= 0) + if (prevblock >= 0) { - RoomPropListChunks[chunkindex].propnums[0xF] = i; + RoomPropListBlocks[prevblock].propnums[0xF] = i; } else { - RoomPropListChunkIndexes[roomindex] = i; + RoomPropListBlockIndices[room] = i; } - + return i; } } - +#ifdef DEBUG + osSyncPrintf("newblockforroom: no free blocks!\n"); +#endif return -1; } @@ -4004,7 +2706,9 @@ s32 chrpropInitializeNewChunkForRoom(s32 roomindex, s32 chunkindex) void chrpropRegisterRoom(PropRecord *prop, s16 room) { s32 prevchunk = -1; - +#ifdef DEBUG + assert(room < g_MaxNumRooms); // roomnumber +#endif if (room < 0) { return; @@ -4012,26 +2716,32 @@ void chrpropRegisterRoom(PropRecord *prop, s16 room) else { // Find which chunk to start at - s32 chunkindex = RoomPropListChunkIndexes[room]; - s16 propnum = (prop - pos_data_entry); - - while (chunkindex >= 0) + s32 block = RoomPropListBlockIndices[room]; + s16 propnum = (prop - g_Props); +#ifdef DEBUG + assert(block= 0) { - if (chrpropInsertPropnum(propnum, chunkindex)) + if (chrpropInsertPropnum(propnum, block)) { return; } - prevchunk = chunkindex; - chunkindex = RoomPropListChunks[chunkindex].propnums[0xF]; + prevchunk = block; + block = RoomPropListBlocks[block].propnums[0xF]; +#ifdef DEBUG + assert(block= 0) + if (block >= 0) { - chrpropInsertPropnum(propnum, chunkindex); + chrpropInsertPropnum(propnum, block); } } } @@ -4047,26 +2757,32 @@ void chrpropRegisterRoom(PropRecord *prop, s16 room) void chrpropDeregisterRoom(PropRecord* prop, s16 room) { bool removed = 0; s32 prev = -1; - +#ifdef DEBUG + assert(room < g_MaxNumRooms); // roomnumber +#endif + if (room >= 0) { - s16 chunkindex = RoomPropListChunkIndexes[room]; - s16 propIndex = (prop - pos_data_entry); - - while (chunkindex >= 0) + s16 block = RoomPropListBlockIndices[room]; + s16 propIndex = (prop - g_Props); +#ifdef DEBUG + assert(block= 0) { - bool populated = 0; + bool populated = 0; s32 var_s0_2; // Check each prop entry in the chunk for (var_s0_2 = 0; var_s0_2 < 15; var_s0_2++) { - if (propIndex == RoomPropListChunks[chunkindex].propnums[var_s0_2]) + if (propIndex == RoomPropListBlocks[block].propnums[var_s0_2]) { - RoomPropListChunks[chunkindex].propnums[var_s0_2] = -1; // Mark entry as empty + RoomPropListBlocks[block].propnums[var_s0_2] = -1; // Mark entry as empty removed = 1; - } - else if (!populated && RoomPropListChunks[chunkindex].propnums[var_s0_2] >= 0) + } + else if (!populated && RoomPropListBlocks[block].propnums[var_s0_2] >= 0) { populated = 1; } @@ -4075,20 +2791,20 @@ void chrpropDeregisterRoom(PropRecord* prop, s16 room) { if (!populated) // not matching { // This chunk is empty, so it can be marked as available - RoomPropListChunks[chunkindex].propnums[0] = -2; - + RoomPropListBlocks[block].propnums[0] = -2; + if (prev >= 0) { - RoomPropListChunks[prev].propnums[0xF] = RoomPropListChunks[chunkindex].propnums[0xF]; + RoomPropListBlocks[prev].propnums[0xF] = RoomPropListBlocks[block].propnums[0xF]; } else { - RoomPropListChunkIndexes[room] = RoomPropListChunks[chunkindex].propnums[0xF]; + RoomPropListBlockIndices[room] = RoomPropListBlocks[block].propnums[0xF]; } } else { - prev = chunkindex; // not matching + prev = block; // not matching } if (removed) @@ -4096,18 +2812,25 @@ void chrpropDeregisterRoom(PropRecord* prop, s16 room) { return; } - chunkindex = RoomPropListChunks[chunkindex].propnums[0xF]; + block = RoomPropListBlocks[block].propnums[0xF]; +#ifdef DEBUG + assert(blocktype == 3) { - chrPositionRelated7F020D94(arg0->chr); - } else if ((arg0->type == 1) || (arg0->type == 4)) { - setupUpdateObjectRoomPosition((ObjectRecord* ) arg0->chr); +void sub_GAME_7F03E134(PropRecord* p) +{ + if (p->type == PROP_TYPE_CHR) + { + chrDetectRooms(p->chr); + } else if ((p->type == PROP_TYPE_OBJ) || (p->type == PROP_TYPE_WEAPON)) + { + setupUpdateObjectRoomPosition((ObjectRecord* ) p->obj); } } @@ -4128,9 +2851,9 @@ void chrpropDeregisterRooms(PropRecord *prop) roomIter += 1; room = *roomIter; } - if (!(prop->flags & 0x10)) + if (!(prop->flags & PROPFLAG_00000010)) { - prop->rooms[0] = -1; + prop->rooms[0] = -1; //hide room } } @@ -4154,133 +2877,59 @@ void chrpropRegisterRooms(PropRecord *prop) } - - - -#ifdef NONMATCHING /* * Address: 0x7F03E27C -* PD: Could be one of the following -* - los_find_intersecting_rooms_properly, -* - los_find_final_room_properly -* - los_find_intersecting_rooms_exhaustive -* - los_find_final_room_exhaustive -* - los_find_final_room_fast +* +* Recalculate the prop's room list with rooms it is found to be overlapping. */ -void sub_GAME_7F03E27C(void) { +void chrpropUpdateRoomList(PropRecord *prop, coord3d *bbmin, coord3d *bbmax, f32 radius) +{ + ObjectRecord *obj; + s32 rooms[7]; // Room payload only, no terminator. + StandTile *tile; + s32 count; + s32 i; + u8 *src; + count = 0; + obj = NULL; + + if (prop->flags & PROPFLAG_00000008) { + // Seed from the prop's existing room list. + if (prop->type == PROP_TYPE_OBJ || prop->type == PROP_TYPE_WEAPON || prop->type == PROP_TYPE_DOOR) { + obj = prop->obj; + } + + if (obj != NULL + && obj->runtime_bitflags & 0x80 + && obj->projectile->flags & PROJECTILEFLAG_00000008) { + src = obj->projectile->unkCC; + } else { + src = prop->rooms; + } + + for (i = 0; src[i] != 0xff; i++) { + rooms[i] = src[i]; + } + + count = i; + } else { + // Seed from the stan tile locus around the prop's X/Z position. + tile = prop->stan; + count = 0; + sub_GAME_7F0B21B0(&tile, prop->pos.x, prop->pos.z, radius, rooms, &count, 7); + } + + // Update the room list with neighboring rooms reachable through portals and overlapped by the bounding box. + sub_GAME_7F0BA2D4(bbmin, bbmax, rooms, &count, 7); + + for (i = 0; i < count; i++) { + prop->rooms[i] = rooms[i]; + } + + // Commit the rebuilt room list to the prop, terminated by -1. + prop->rooms[i] = -1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03E27C -/* 072DAC 7F03E27C 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 072DB0 7F03E280 AFBF002C */ sw $ra, 0x2c($sp) -/* 072DB4 7F03E284 AFB00028 */ sw $s0, 0x28($sp) -/* 072DB8 7F03E288 AFA50074 */ sw $a1, 0x74($sp) -/* 072DBC 7F03E28C AFA60078 */ sw $a2, 0x78($sp) -/* 072DC0 7F03E290 AFA00048 */ sw $zero, 0x48($sp) -/* 072DC4 7F03E294 908E0001 */ lbu $t6, 1($a0) -/* 072DC8 7F03E298 44876000 */ mtc1 $a3, $f12 -/* 072DCC 7F03E29C 00808025 */ move $s0, $a0 -/* 072DD0 7F03E2A0 31CF0008 */ andi $t7, $t6, 8 -/* 072DD4 7F03E2A4 11E00028 */ beqz $t7, .L7F03E348 -/* 072DD8 7F03E2A8 00001825 */ move $v1, $zero -/* 072DDC 7F03E2AC 90820000 */ lbu $v0, ($a0) -/* 072DE0 7F03E2B0 24010001 */ li $at, 1 -/* 072DE4 7F03E2B4 2606002C */ addiu $a2, $s0, 0x2c -/* 072DE8 7F03E2B8 10410005 */ beq $v0, $at, .L7F03E2D0 -/* 072DEC 7F03E2BC 24010004 */ li $at, 4 -/* 072DF0 7F03E2C0 10410003 */ beq $v0, $at, .L7F03E2D0 -/* 072DF4 7F03E2C4 24010002 */ li $at, 2 -/* 072DF8 7F03E2C8 14410002 */ bne $v0, $at, .L7F03E2D4 -/* 072DFC 7F03E2CC 00000000 */ nop -.L7F03E2D0: -/* 072E00 7F03E2D0 8E030004 */ lw $v1, 4($s0) -.L7F03E2D4: -/* 072E04 7F03E2D4 1060000C */ beqz $v1, .L7F03E308 -/* 072E08 7F03E2D8 00000000 */ nop -/* 072E0C 7F03E2DC 8C780064 */ lw $t8, 0x64($v1) -/* 072E10 7F03E2E0 33190080 */ andi $t9, $t8, 0x80 -/* 072E14 7F03E2E4 13200008 */ beqz $t9, .L7F03E308 -/* 072E18 7F03E2E8 00000000 */ nop -/* 072E1C 7F03E2EC 8C62006C */ lw $v0, 0x6c($v1) -/* 072E20 7F03E2F0 8C490000 */ lw $t1, ($v0) -/* 072E24 7F03E2F4 312A0008 */ andi $t2, $t1, 8 -/* 072E28 7F03E2F8 11400003 */ beqz $t2, .L7F03E308 -/* 072E2C 7F03E2FC 00000000 */ nop -/* 072E30 7F03E300 10000001 */ b .L7F03E308 -/* 072E34 7F03E304 244600CC */ addiu $a2, $v0, 0xcc -.L7F03E308: -/* 072E38 7F03E308 90CB0000 */ lbu $t3, ($a2) -/* 072E3C 7F03E30C 240500FF */ li $a1, 255 -/* 072E40 7F03E310 00004025 */ move $t0, $zero -/* 072E44 7F03E314 10AB0009 */ beq $a1, $t3, .L7F03E33C -/* 072E48 7F03E318 27A20050 */ addiu $v0, $sp, 0x50 -/* 072E4C 7F03E31C 00C01825 */ move $v1, $a2 -/* 072E50 7F03E320 90C40000 */ lbu $a0, ($a2) -.L7F03E324: -/* 072E54 7F03E324 AC440000 */ sw $a0, ($v0) -/* 072E58 7F03E328 90640001 */ lbu $a0, 1($v1) -/* 072E5C 7F03E32C 25080001 */ addiu $t0, $t0, 1 -/* 072E60 7F03E330 24420004 */ addiu $v0, $v0, 4 -/* 072E64 7F03E334 14A4FFFB */ bne $a1, $a0, .L7F03E324 -/* 072E68 7F03E338 24630001 */ addiu $v1, $v1, 1 -.L7F03E33C: -/* 072E6C 7F03E33C AFA80048 */ sw $t0, 0x48($sp) -/* 072E70 7F03E340 10000010 */ b .L7F03E384 -/* 072E74 7F03E344 00004025 */ move $t0, $zero -.L7F03E348: -/* 072E78 7F03E348 8E0C0014 */ lw $t4, 0x14($s0) -/* 072E7C 7F03E34C AFA00048 */ sw $zero, 0x48($sp) -/* 072E80 7F03E350 44076000 */ mfc1 $a3, $f12 -/* 072E84 7F03E354 AFAC004C */ sw $t4, 0x4c($sp) -/* 072E88 7F03E358 8E060010 */ lw $a2, 0x10($s0) -/* 072E8C 7F03E35C 8E050008 */ lw $a1, 8($s0) -/* 072E90 7F03E360 27AD0050 */ addiu $t5, $sp, 0x50 -/* 072E94 7F03E364 27AE0048 */ addiu $t6, $sp, 0x48 -/* 072E98 7F03E368 240F0007 */ li $t7, 7 -/* 072E9C 7F03E36C AFAF0018 */ sw $t7, 0x18($sp) -/* 072EA0 7F03E370 AFAE0014 */ sw $t6, 0x14($sp) -/* 072EA4 7F03E374 AFAD0010 */ sw $t5, 0x10($sp) -/* 072EA8 7F03E378 0FC2C86C */ jal sub_GAME_7F0B21B0 -/* 072EAC 7F03E37C 27A4004C */ addiu $a0, $sp, 0x4c -/* 072EB0 7F03E380 00004025 */ move $t0, $zero -.L7F03E384: -/* 072EB4 7F03E384 24180007 */ li $t8, 7 -/* 072EB8 7F03E388 AFB80010 */ sw $t8, 0x10($sp) -/* 072EBC 7F03E38C 8FA40074 */ lw $a0, 0x74($sp) -/* 072EC0 7F03E390 8FA50078 */ lw $a1, 0x78($sp) -/* 072EC4 7F03E394 27A60050 */ addiu $a2, $sp, 0x50 -/* 072EC8 7F03E398 27A70048 */ addiu $a3, $sp, 0x48 -/* 072ECC 7F03E39C 0FC2E8B5 */ jal sub_GAME_7F0BA2D4 -/* 072ED0 7F03E3A0 AFA80044 */ sw $t0, 0x44($sp) -/* 072ED4 7F03E3A4 8FB90048 */ lw $t9, 0x48($sp) -/* 072ED8 7F03E3A8 8FA80044 */ lw $t0, 0x44($sp) -/* 072EDC 7F03E3AC 27A20050 */ addiu $v0, $sp, 0x50 -/* 072EE0 7F03E3B0 1B20000B */ blez $t9, .L7F03E3E0 -/* 072EE4 7F03E3B4 240B00FF */ li $t3, 255 -/* 072EE8 7F03E3B8 02001825 */ move $v1, $s0 -/* 072EEC 7F03E3BC 8C490000 */ lw $t1, ($v0) -.L7F03E3C0: -/* 072EF0 7F03E3C0 25080001 */ addiu $t0, $t0, 1 -/* 072EF4 7F03E3C4 24420004 */ addiu $v0, $v0, 4 -/* 072EF8 7F03E3C8 A069002C */ sb $t1, 0x2c($v1) -/* 072EFC 7F03E3CC 8FAA0048 */ lw $t2, 0x48($sp) -/* 072F00 7F03E3D0 24630001 */ addiu $v1, $v1, 1 -/* 072F04 7F03E3D4 010A082A */ slt $at, $t0, $t2 -/* 072F08 7F03E3D8 5420FFF9 */ bnezl $at, .L7F03E3C0 -/* 072F0C 7F03E3DC 8C490000 */ lw $t1, ($v0) -.L7F03E3E0: -/* 072F10 7F03E3E0 02086021 */ addu $t4, $s0, $t0 -/* 072F14 7F03E3E4 A18B002C */ sb $t3, 0x2c($t4) -/* 072F18 7F03E3E8 8FBF002C */ lw $ra, 0x2c($sp) -/* 072F1C 7F03E3EC 8FB00028 */ lw $s0, 0x28($sp) -/* 072F20 7F03E3F0 27BD0070 */ addiu $sp, $sp, 0x70 -/* 072F24 7F03E3F4 03E00008 */ jr $ra -/* 072F28 7F03E3F8 00000000 */ nop -) -#endif /** @@ -4301,7 +2950,7 @@ void roomGetProps(s32 *rooms) while (room >= 0) { // Find the chunk to start at - s32 chunkindex = RoomPropListChunkIndexes[room]; + s32 chunkindex = RoomPropListBlockIndices[room]; // Iterate the chunks while (chunkindex >= 0) @@ -4309,7 +2958,7 @@ void roomGetProps(s32 *rooms) // Iterate the propnums within each chunk for (i = 0; i < 15; i++) { - s32 propnum = RoomPropListChunks[chunkindex].propnums[i]; + s32 propnum = RoomPropListBlocks[chunkindex].propnums[i]; if (propnum >= 0) { @@ -4331,7 +2980,7 @@ void roomGetProps(s32 *rooms) } } - chunkindex = RoomPropListChunks[chunkindex].propnums[15]; + chunkindex = RoomPropListBlocks[chunkindex].propnums[15]; } rooms++; @@ -4341,6 +2990,9 @@ void roomGetProps(s32 *rooms) *writeptr = -1; writeptr++; num_obj_position_data_entries = writeptr - ptr_list_object_lookup_indices; + #ifdef DEBUG + assert(roomspropnum= 0) { - s32 nextindex = RoomPropListChunks[previndex].propnums[0xF]; + s32 nextindex = RoomPropListBlocks[previndex].propnums[0xF]; // Iterate this room's chunks but skip the first while (nextindex >= 0) @@ -4366,16 +3018,16 @@ void propsDefragRoomProps(void) for (j = 0; j < 15; j++) { // If this propnum is unallocated - if (RoomPropListChunks[previndex].propnums[j] < 0) + if (RoomPropListBlocks[previndex].propnums[j] < 0) { // Iterate forward through the chunk list and find a // propnum to move back to the prev chunk for (k = 0; k < 15; k++) { - if (RoomPropListChunks[nextindex].propnums[k] >= 0) + if (RoomPropListBlocks[nextindex].propnums[k] >= 0) { - RoomPropListChunks[previndex].propnums[j] = RoomPropListChunks[nextindex].propnums[k]; - RoomPropListChunks[nextindex].propnums[k] = -1; + RoomPropListBlocks[previndex].propnums[j] = RoomPropListBlocks[nextindex].propnums[k]; + RoomPropListBlocks[nextindex].propnums[k] = -1; break; } } @@ -4383,7 +3035,7 @@ void propsDefragRoomProps(void) // Check if there are more propnums in the future chunk for (; k < 15; k++) { - if (RoomPropListChunks[nextindex].propnums[k] >= 0) + if (RoomPropListBlocks[nextindex].propnums[k] >= 0) { break; } @@ -4392,10 +3044,10 @@ void propsDefragRoomProps(void) if (k == 15) { // There's no more propnums, so this chunk can be removed - RoomPropListChunks[nextindex].propnums[0] = -2; - RoomPropListChunks[previndex].propnums[15] = RoomPropListChunks[nextindex].propnums[15]; + RoomPropListBlocks[nextindex].propnums[0] = -2; + RoomPropListBlocks[previndex].propnums[15] = RoomPropListBlocks[nextindex].propnums[15]; - nextindex = RoomPropListChunks[previndex].propnums[15]; + nextindex = RoomPropListBlocks[previndex].propnums[15]; if (nextindex < 0) { @@ -4408,7 +3060,7 @@ void propsDefragRoomProps(void) if (nextindex >= 0) { previndex = nextindex; - nextindex = RoomPropListChunks[nextindex].propnums[15]; + nextindex = RoomPropListBlocks[nextindex].propnums[15]; } } } @@ -4418,34 +3070,9 @@ void propsDefragRoomProps(void) void removed_debug_roomblocks_feature(void) { - /* gleened from debug - - fVar1 = 1.0f / sqrtf(((param_2 * param_2) + (param_3*param_3)) + (param_4*param_4)); - param_2 *= fvar1; - param_3 *= fvar1; - param_4 *= fvar1; - param_1 *= 0.017453292; //Deg2Rad? - - fVar1 = 1.0 - cosf(param_1); - fVar2 = param_2 * param_3 * fVar1; - fVar3 = param_3 * param_4 * fVar1; - fVar1 = param_4 * param_2 * fVar1; - - matrix_4x4_set_identity(param_5); - - *param_5 = param_2 * param_2 + cosf(param_1) * (1.0 - param_2 * param_2); - param_5[9] = fVar3 - param_2 * sinf(param_1); - param_5[6] = fVar3 + param_2 * sinf(param_1); - param_5[5] = param_3 * param_3 + cosf(param_1) * (1.0 - param_3 * param_3); - param_5[8] = fVar1 + param_3 * sinf(param_1); - param_5[2] = fVar1 - param_3 * sinf(param_1); - param_5[10] = param_4 * param_4 + cosf(param_1) * (1.0 - param_4 * param_4); - param_5[4] = fVar2 - param_4 * sinf(param_1); - param_5[1] = fVar2 + param_4 * sinf(param_1); - */ } - +//end of prop.c, now chrprop.c /** * NTSC address 0x7F03E6A0. @@ -4838,599 +3465,175 @@ void sub_GAME_7F03EC3C(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1, s } +void sub_GAME_7F03ECC0(f32 x1, f32 x2, f32 y1, f32 y2, f32 z1, f32 z2, Mtxf *m, struct rect4f *poly, struct collision_data *collision) +{ + f64 pts[8][2]; + f64 pad[1]; + s32 i; + s32 lim; + s32 minxi = 0; + s32 maxxi = 0; + s32 minzi; + s32 maxzi = 0; + s32 rem[4]; + s32 cnt; + f64 x1d = x1; + f64 x2d = x2; + f64 y1d = y1; + f64 y2d = y2; + f64 z1d = z1; + f64 z2d = z2; + f64 m00 = m->m[0][0]; + f64 m02 = m->m[0][2]; + f64 m10 = m->m[1][0]; + f64 m12 = m->m[1][2]; + f64 m20 = m->m[2][0]; + f64 m22 = m->m[2][2]; + minzi = 0; + pts[0][0] = ((m00 * x1d) + (m10 * y1d)) + (m20 * z1d); + pts[0][1] = ((m02 * x1d) + (m12 * y1d)) + (m22 * z1d); + pts[1][0] = ((m00 * x1d) + (m10 * y1d)) + (m20 * z2d); + pts[1][1] = ((m02 * x1d) + (m12 * y1d)) + (m22 * z2d); + pts[2][0] = ((m00 * x1d) + (m10 * y2d)) + (m20 * z1d); + pts[2][1] = ((m02 * x1d) + (m12 * y2d)) + (m22 * z1d); + pts[3][0] = ((m00 * x1d) + (m10 * y2d)) + (m20 * z2d); + pts[3][1] = ((m02 * x1d) + (m12 * y2d)) + (m22 * z2d); + pts[4][0] = ((m00 * x2d) + (m10 * y1d)) + (m20 * z1d); + pts[4][1] = ((m02 * x2d) + (m12 * y1d)) + (m22 * z1d); + pts[5][0] = ((m00 * x2d) + (m10 * y1d)) + (m20 * z2d); + pts[5][1] = ((m02 * x2d) + (m12 * y1d)) + (m22 * z2d); + pts[6][0] = ((m00 * x2d) + (m10 * y2d)) + (m20 * z1d); + pts[6][1] = ((m02 * x2d) + (m12 * y2d)) + (m22 * z1d); + pts[7][0] = ((m00 * x2d) + (m10 * y2d)) + (m20 * z2d); + pts[7][1] = ((m02 * x2d) + (m12 * y2d)) + (m22 * z2d); + for (i = 1; i < 8; i++) + { + if ((pts[i][0] < pts[minxi][0]) || ((pts[i][0] == pts[minxi][0]) && (pts[i][1] < pts[minxi][1]))) + { + minxi = i; + } + } + for (i = 1; i < 8; i++) + { + if ((pts[maxzi][1] < pts[i][1]) || ((pts[i][1] == pts[maxzi][1]) && (pts[i][0] < pts[maxzi][0]))) + { + maxzi = i; + } + } -#ifdef NONMATCHING -void sub_GAME_7F03ECC0(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, void* arg6, void* arg7, s32* arg8) { + for (i = 1; i < 8; i++) + { + if ((pts[maxxi][0] < pts[i][0]) || ((pts[i][0] == pts[maxxi][0]) && (pts[maxxi][1] < pts[i][1]))) + { + maxxi = i; + } + } + for (i = 1; i < 8; i++) + { + if ((pts[i][1] < pts[minzi][1]) || ((pts[i][1] == pts[minzi][1]) && (pts[minzi][0] < pts[i][0]))) + { + minzi = i; + } + } + + lim = 8; + cnt = 0; + i = 0; + +filterloop: + if ((((i != minxi) && (i != maxxi)) && (i != maxzi)) && (i != minzi)) + { + rem[cnt] = i; + cnt++; + } + + i++; + + if (i < lim) + { + goto filterloop; + } + + cnt = 0; + poly->points[cnt].x = pts[minxi][0]; + poly->points[cnt].y = pts[minxi][1]; + cnt++; + + for (i = 0; i < 4; i++) + { + s32 index = rem[i]; + + if (((pts[index][0] - pts[minzi][0]) * (pts[minxi][1] - pts[minzi][1])) < ((pts[minxi][0] - pts[minzi][0]) * (pts[index][1] - pts[minzi][1]))) + { + poly->points[cnt].x = pts[index][0]; + poly->points[cnt].y = pts[index][1]; + cnt++; + break; + } + } + + poly->points[cnt].x = pts[minzi][0]; + poly->points[cnt].y = pts[minzi][1]; + cnt++; + + for (i = 0; i < 4; i++) + { + s32 index = rem[i]; + + if (((pts[index][0] - pts[maxxi][0]) * (pts[minzi][1] - pts[maxxi][1])) < ((pts[minzi][0] - pts[maxxi][0]) * (pts[index][1] - pts[maxxi][1]))) + { + poly->points[cnt].x = pts[index][0]; + poly->points[cnt].y = pts[index][1]; + cnt++; + break; + } + } + + poly->points[cnt].x = pts[maxxi][0]; + poly->points[cnt].y = pts[maxxi][1]; + cnt++; + + for (i = 0; i < 4; i++) + { + s32 index = rem[i]; + + if (((pts[index][0] - pts[maxzi][0]) * (pts[maxxi][1] - pts[maxzi][1])) < ((pts[maxxi][0] - pts[maxzi][0]) * (pts[index][1] - pts[maxzi][1]))) + { + poly->points[cnt].x = pts[index][0]; + poly->points[cnt].y = pts[index][1]; + cnt++; + break; + } + } + + poly->points[cnt].x = pts[maxzi][0]; + poly->points[cnt].y = pts[maxzi][1]; + cnt++; + + for (i = 0; i < 4; i++) + { + s32 index = rem[i]; + + if (((pts[index][0] - pts[minxi][0]) * (pts[maxzi][1] - pts[minxi][1])) < ((pts[maxzi][0] - pts[minxi][0]) * (pts[index][1] - pts[minxi][1]))) + { + poly->points[cnt].x = pts[index][0]; + poly->points[cnt].y = pts[index][1]; + cnt++; + break; + } + } + + collision->edges = cnt; + + for (i = 0; i < cnt; i++) + { + poly->points[i].x += m->m[3][0]; + poly->points[i].y += m->m[3][2]; + } } -#else -/* This forward declaration is required for sub_GAME_7F03F540() to link until sub_GAME_7F03ECC0() is properly decompiled */ -void sub_GAME_7F03ECC0(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, Mtxf* arg6, struct rect4f* arg7, struct collision_data* arg8); -GLOBAL_ASM( -.text -glabel sub_GAME_7F03ECC0 -/* 0737F0 7F03ECC0 27BDFE20 */ addiu $sp, $sp, -0x1e0 -/* 0737F4 7F03ECC4 AFA601E8 */ sw $a2, 0x1e8($sp) -/* 0737F8 7F03ECC8 8FA601F8 */ lw $a2, 0x1f8($sp) -/* 0737FC 7F03ECCC E7AE01E4 */ swc1 $f14, 0x1e4($sp) -/* 073800 7F03ECD0 AFA701EC */ sw $a3, 0x1ec($sp) -/* 073804 7F03ECD4 C4C40000 */ lwc1 $f4, ($a2) -/* 073808 7F03ECD8 46006021 */ cvt.d.s $f0, $f12 -/* 07380C 7F03ECDC 27AE0160 */ addiu $t6, $sp, 0x160 -/* 073810 7F03ECE0 460021A1 */ cvt.d.s $f6, $f4 -/* 073814 7F03ECE4 0000C900 */ sll $t9, $zero, 4 -/* 073818 7F03ECE8 F7A600F0 */ sdc1 $f6, 0xf0($sp) -/* 07381C 7F03ECEC C4CA0008 */ lwc1 $f10, 8($a2) -/* 073820 7F03ECF0 032E4821 */ addu $t1, $t9, $t6 -/* 073824 7F03ECF4 00005025 */ move $t2, $zero -/* 073828 7F03ECF8 46005221 */ cvt.d.s $f8, $f10 -/* 07382C 7F03ECFC 000AC900 */ sll $t9, $t2, 4 -/* 073830 7F03ED00 F7A800E8 */ sdc1 $f8, 0xe8($sp) -/* 073834 7F03ED04 C4C40010 */ lwc1 $f4, 0x10($a2) -/* 073838 7F03ED08 27AE0160 */ addiu $t6, $sp, 0x160 -/* 07383C 7F03ED0C 032E4021 */ addu $t0, $t9, $t6 -/* 073840 7F03ED10 460021A1 */ cvt.d.s $f6, $f4 -/* 073844 7F03ED14 00002025 */ move $a0, $zero -/* 073848 7F03ED18 F7A600E0 */ sdc1 $f6, 0xe0($sp) -/* 07384C 7F03ED1C C4CA0018 */ lwc1 $f10, 0x18($a2) -/* 073850 7F03ED20 0004C900 */ sll $t9, $a0, 4 -/* 073854 7F03ED24 27AE0160 */ addiu $t6, $sp, 0x160 -/* 073858 7F03ED28 46005221 */ cvt.d.s $f8, $f10 -/* 07385C 7F03ED2C 032E3821 */ addu $a3, $t9, $t6 -/* 073860 7F03ED30 F7A800D8 */ sdc1 $f8, 0xd8($sp) -/* 073864 7F03ED34 C4C60028 */ lwc1 $f6, 0x28($a2) -/* 073868 7F03ED38 C4C40020 */ lwc1 $f4, 0x20($a2) -/* 07386C 7F03ED3C D7A800F0 */ ldc1 $f8, 0xf0($sp) -/* 073870 7F03ED40 460032A1 */ cvt.d.s $f10, $f6 -/* 073874 7F03ED44 C7A601E8 */ lwc1 $f6, 0x1e8($sp) -/* 073878 7F03ED48 F7AA00C8 */ sdc1 $f10, 0xc8($sp) -/* 07387C 7F03ED4C D7AA00E0 */ ldc1 $f10, 0xe0($sp) -/* 073880 7F03ED50 460024A1 */ cvt.d.s $f18, $f4 -/* 073884 7F03ED54 46204102 */ mul.d $f4, $f8, $f0 -/* 073888 7F03ED58 460030A1 */ cvt.d.s $f2, $f6 -/* 07388C 7F03ED5C F7AA0008 */ sdc1 $f10, 8($sp) -/* 073890 7F03ED60 F7A80000 */ sdc1 $f8, ($sp) -/* 073894 7F03ED64 46225182 */ mul.d $f6, $f10, $f2 -/* 073898 7F03ED68 C7AA01F0 */ lwc1 $f10, 0x1f0($sp) -/* 07389C 7F03ED6C 00005825 */ move $t3, $zero -/* 0738A0 7F03ED70 000BC900 */ sll $t9, $t3, 4 -/* 0738A4 7F03ED74 46005421 */ cvt.d.s $f16, $f10 -/* 0738A8 7F03ED78 F7A400A0 */ sdc1 $f4, 0xa0($sp) -/* 0738AC 7F03ED7C 46309282 */ mul.d $f10, $f18, $f16 -/* 0738B0 7F03ED80 F7A40010 */ sdc1 $f4, 0x10($sp) -/* 0738B4 7F03ED84 46262200 */ add.d $f8, $f4, $f6 -/* 0738B8 7F03ED88 F7A60098 */ sdc1 $f6, 0x98($sp) -/* 0738BC 7F03ED8C F7A60018 */ sdc1 $f6, 0x18($sp) -/* 0738C0 7F03ED90 27AE0160 */ addiu $t6, $sp, 0x160 -/* 0738C4 7F03ED94 F7A80038 */ sdc1 $f8, 0x38($sp) -/* 0738C8 7F03ED98 00001025 */ move $v0, $zero -/* 0738CC 7F03ED9C 462A4100 */ add.d $f4, $f8, $f10 -/* 0738D0 7F03EDA0 F7AA0090 */ sdc1 $f10, 0x90($sp) -/* 0738D4 7F03EDA4 27A50170 */ addiu $a1, $sp, 0x170 -/* 0738D8 7F03EDA8 24030001 */ li $v1, 1 -/* 0738DC 7F03EDAC F7A40160 */ sdc1 $f4, 0x160($sp) -/* 0738E0 7F03EDB0 D7A400E8 */ ldc1 $f4, 0xe8($sp) -/* 0738E4 7F03EDB4 032E6021 */ addu $t4, $t9, $t6 -/* 0738E8 7F03EDB8 27AD0130 */ addiu $t5, $sp, 0x130 -/* 0738EC 7F03EDBC 46202102 */ mul.d $f4, $f4, $f0 -/* 0738F0 7F03EDC0 F7A40088 */ sdc1 $f4, 0x88($sp) -/* 0738F4 7F03EDC4 D7A400D8 */ ldc1 $f4, 0xd8($sp) -/* 0738F8 7F03EDC8 46222102 */ mul.d $f4, $f4, $f2 -/* 0738FC 7F03EDCC F7A40080 */ sdc1 $f4, 0x80($sp) -/* 073900 7F03EDD0 D7A60080 */ ldc1 $f6, 0x80($sp) -/* 073904 7F03EDD4 D7A40088 */ ldc1 $f4, 0x88($sp) -/* 073908 7F03EDD8 46262100 */ add.d $f4, $f4, $f6 -/* 07390C 7F03EDDC D7A600C8 */ ldc1 $f6, 0xc8($sp) -/* 073910 7F03EDE0 F7A40078 */ sdc1 $f4, 0x78($sp) -/* 073914 7F03EDE4 46303102 */ mul.d $f4, $f6, $f16 -/* 073918 7F03EDE8 D7A60078 */ ldc1 $f6, 0x78($sp) -/* 07391C 7F03EDEC 46243180 */ add.d $f6, $f6, $f4 -/* 073920 7F03EDF0 F7A40070 */ sdc1 $f4, 0x70($sp) -/* 073924 7F03EDF4 C7A401F4 */ lwc1 $f4, 0x1f4($sp) -/* 073928 7F03EDF8 F7A60168 */ sdc1 $f6, 0x168($sp) -/* 07392C 7F03EDFC 460021A1 */ cvt.d.s $f6, $f4 -/* 073930 7F03EE00 F7A600A8 */ sdc1 $f6, 0xa8($sp) -/* 073934 7F03EE04 46269182 */ mul.d $f6, $f18, $f6 -/* 073938 7F03EE08 D7A400A8 */ ldc1 $f4, 0xa8($sp) -/* 07393C 7F03EE0C F7A60068 */ sdc1 $f6, 0x68($sp) -/* 073940 7F03EE10 46264180 */ add.d $f6, $f8, $f6 -/* 073944 7F03EE14 D7A800C8 */ ldc1 $f8, 0xc8($sp) -/* 073948 7F03EE18 46244302 */ mul.d $f12, $f8, $f4 -/* 07394C 7F03EE1C F7A60170 */ sdc1 $f6, 0x170($sp) -/* 073950 7F03EE20 D7A60078 */ ldc1 $f6, 0x78($sp) -/* 073954 7F03EE24 C7A401EC */ lwc1 $f4, 0x1ec($sp) -/* 073958 7F03EE28 46002021 */ cvt.d.s $f0, $f4 -/* 07395C 7F03EE2C 462C3200 */ add.d $f8, $f6, $f12 -/* 073960 7F03EE30 D7A60008 */ ldc1 $f6, 8($sp) -/* 073964 7F03EE34 46203382 */ mul.d $f14, $f6, $f0 -/* 073968 7F03EE38 F7A80178 */ sdc1 $f8, 0x178($sp) -/* 07396C 7F03EE3C D7A80010 */ ldc1 $f8, 0x10($sp) -/* 073970 7F03EE40 D7A600D8 */ ldc1 $f6, 0xd8($sp) -/* 073974 7F03EE44 46203402 */ mul.d $f16, $f6, $f0 -/* 073978 7F03EE48 462E4080 */ add.d $f2, $f8, $f14 -/* 07397C 7F03EE4C D7A80088 */ ldc1 $f8, 0x88($sp) -/* 073980 7F03EE50 F7AE0038 */ sdc1 $f14, 0x38($sp) -/* 073984 7F03EE54 462A1100 */ add.d $f4, $f2, $f10 -/* 073988 7F03EE58 46304480 */ add.d $f18, $f8, $f16 -/* 07398C 7F03EE5C F7A40180 */ sdc1 $f4, 0x180($sp) -/* 073990 7F03EE60 D7A40070 */ ldc1 $f4, 0x70($sp) -/* 073994 7F03EE64 D7A80068 */ ldc1 $f8, 0x68($sp) -/* 073998 7F03EE68 F7B20030 */ sdc1 $f18, 0x30($sp) -/* 07399C 7F03EE6C 46249180 */ add.d $f6, $f18, $f4 -/* 0739A0 7F03EE70 46281100 */ add.d $f4, $f2, $f8 -/* 0739A4 7F03EE74 F7A60188 */ sdc1 $f6, 0x188($sp) -/* 0739A8 7F03EE78 D7A60000 */ ldc1 $f6, ($sp) -/* 0739AC 7F03EE7C 462C9200 */ add.d $f8, $f18, $f12 -/* 0739B0 7F03EE80 F7A40190 */ sdc1 $f4, 0x190($sp) -/* 0739B4 7F03EE84 C7A401E4 */ lwc1 $f4, 0x1e4($sp) -/* 0739B8 7F03EE88 F7A80198 */ sdc1 $f8, 0x198($sp) -/* 0739BC 7F03EE8C 46002021 */ cvt.d.s $f0, $f4 -/* 0739C0 7F03EE90 D7A400E8 */ ldc1 $f4, 0xe8($sp) -/* 0739C4 7F03EE94 46203202 */ mul.d $f8, $f6, $f0 -/* 0739C8 7F03EE98 D7A60018 */ ldc1 $f6, 0x18($sp) -/* 0739CC 7F03EE9C 46202382 */ mul.d $f14, $f4, $f0 -/* 0739D0 7F03EEA0 F7A80088 */ sdc1 $f8, 0x88($sp) -/* 0739D4 7F03EEA4 46264080 */ add.d $f2, $f8, $f6 -/* 0739D8 7F03EEA8 D7A60080 */ ldc1 $f6, 0x80($sp) -/* 0739DC 7F03EEAC 462A1200 */ add.d $f8, $f2, $f10 -/* 0739E0 7F03EEB0 46267480 */ add.d $f18, $f14, $f6 -/* 0739E4 7F03EEB4 F7A801A0 */ sdc1 $f8, 0x1a0($sp) -/* 0739E8 7F03EEB8 D7A80070 */ ldc1 $f8, 0x70($sp) -/* 0739EC 7F03EEBC D7A60068 */ ldc1 $f6, 0x68($sp) -/* 0739F0 7F03EEC0 46289100 */ add.d $f4, $f18, $f8 -/* 0739F4 7F03EEC4 46261200 */ add.d $f8, $f2, $f6 -/* 0739F8 7F03EEC8 D7A60088 */ ldc1 $f6, 0x88($sp) -/* 0739FC 7F03EECC F7A401A8 */ sdc1 $f4, 0x1a8($sp) -/* 073A00 7F03EED0 462C9100 */ add.d $f4, $f18, $f12 -/* 073A04 7F03EED4 F7A801B0 */ sdc1 $f8, 0x1b0($sp) -/* 073A08 7F03EED8 D7A80038 */ ldc1 $f8, 0x38($sp) -/* 073A0C 7F03EEDC 46307080 */ add.d $f2, $f14, $f16 -/* 073A10 7F03EEE0 F7A401B8 */ sdc1 $f4, 0x1b8($sp) -/* 073A14 7F03EEE4 46283000 */ add.d $f0, $f6, $f8 -/* 073A18 7F03EEE8 D7A60070 */ ldc1 $f6, 0x70($sp) -/* 073A1C 7F03EEEC 462A0100 */ add.d $f4, $f0, $f10 -/* 073A20 7F03EEF0 D7AA0068 */ ldc1 $f10, 0x68($sp) -/* 073A24 7F03EEF4 46261200 */ add.d $f8, $f2, $f6 -/* 073A28 7F03EEF8 F7A401C0 */ sdc1 $f4, 0x1c0($sp) -/* 073A2C 7F03EEFC 462C1180 */ add.d $f6, $f2, $f12 -/* 073A30 7F03EF00 F7A801C8 */ sdc1 $f8, 0x1c8($sp) -/* 073A34 7F03EF04 462A0100 */ add.d $f4, $f0, $f10 -/* 073A38 7F03EF08 F7A601D8 */ sdc1 $f6, 0x1d8($sp) -/* 073A3C 7F03EF0C F7A401D0 */ sdc1 $f4, 0x1d0($sp) -/* 073A40 7F03EF10 D5200000 */ ldc1 $f0, ($t1) -.L7F03EF14: -/* 073A44 7F03EF14 D4A20000 */ ldc1 $f2, ($a1) -/* 073A48 7F03EF18 00037900 */ sll $t7, $v1, 4 -/* 073A4C 7F03EF1C 27B80160 */ addiu $t8, $sp, 0x160 -/* 073A50 7F03EF20 4620103C */ c.lt.d $f2, $f0 -/* 073A54 7F03EF24 00000000 */ nop -/* 073A58 7F03EF28 4503000C */ bc1tl .L7F03EF5C -/* 073A5C 7F03EF2C 01F84821 */ addu $t1, $t7, $t8 -/* 073A60 7F03EF30 46201032 */ c.eq.d $f2, $f0 -/* 073A64 7F03EF34 00000000 */ nop -/* 073A68 7F03EF38 4502000B */ bc1fl .L7F03EF68 -/* 073A6C 7F03EF3C 24630001 */ addiu $v1, $v1, 1 -/* 073A70 7F03EF40 D4A80008 */ ldc1 $f8, 8($a1) -/* 073A74 7F03EF44 D52A0008 */ ldc1 $f10, 8($t1) -/* 073A78 7F03EF48 462A403C */ c.lt.d $f8, $f10 -/* 073A7C 7F03EF4C 00000000 */ nop -/* 073A80 7F03EF50 45020005 */ bc1fl .L7F03EF68 -/* 073A84 7F03EF54 24630001 */ addiu $v1, $v1, 1 -/* 073A88 7F03EF58 01F84821 */ addu $t1, $t7, $t8 -.L7F03EF5C: -/* 073A8C 7F03EF5C D5200000 */ ldc1 $f0, ($t1) -/* 073A90 7F03EF60 00601025 */ move $v0, $v1 -/* 073A94 7F03EF64 24630001 */ addiu $v1, $v1, 1 -.L7F03EF68: -/* 073A98 7F03EF68 28610008 */ slti $at, $v1, 8 -/* 073A9C 7F03EF6C 1420FFE9 */ bnez $at, .L7F03EF14 -/* 073AA0 7F03EF70 24A50010 */ addiu $a1, $a1, 0x10 -/* 073AA4 7F03EF74 24030001 */ li $v1, 1 -/* 073AA8 7F03EF78 27A50170 */ addiu $a1, $sp, 0x170 -.L7F03EF7C: -/* 073AAC 7F03EF7C D50C0008 */ ldc1 $f12, 8($t0) -/* 073AB0 7F03EF80 D4A20008 */ ldc1 $f2, 8($a1) -/* 073AB4 7F03EF84 00037900 */ sll $t7, $v1, 4 -/* 073AB8 7F03EF88 27B80160 */ addiu $t8, $sp, 0x160 -/* 073ABC 7F03EF8C 4622603C */ c.lt.d $f12, $f2 -/* 073AC0 7F03EF90 00000000 */ nop -/* 073AC4 7F03EF94 4503000C */ bc1tl .L7F03EFC8 -/* 073AC8 7F03EF98 00605025 */ move $t2, $v1 -/* 073ACC 7F03EF9C 462C1032 */ c.eq.d $f2, $f12 -/* 073AD0 7F03EFA0 00000000 */ nop -/* 073AD4 7F03EFA4 4502000A */ bc1fl .L7F03EFD0 -/* 073AD8 7F03EFA8 24630001 */ addiu $v1, $v1, 1 -/* 073ADC 7F03EFAC D4A40000 */ ldc1 $f4, ($a1) -/* 073AE0 7F03EFB0 D5060000 */ ldc1 $f6, ($t0) -/* 073AE4 7F03EFB4 4626203C */ c.lt.d $f4, $f6 -/* 073AE8 7F03EFB8 00000000 */ nop -/* 073AEC 7F03EFBC 45020004 */ bc1fl .L7F03EFD0 -/* 073AF0 7F03EFC0 24630001 */ addiu $v1, $v1, 1 -/* 073AF4 7F03EFC4 00605025 */ move $t2, $v1 -.L7F03EFC8: -/* 073AF8 7F03EFC8 01F84021 */ addu $t0, $t7, $t8 -/* 073AFC 7F03EFCC 24630001 */ addiu $v1, $v1, 1 -.L7F03EFD0: -/* 073B00 7F03EFD0 28610008 */ slti $at, $v1, 8 -/* 073B04 7F03EFD4 1420FFE9 */ bnez $at, .L7F03EF7C -/* 073B08 7F03EFD8 24A50010 */ addiu $a1, $a1, 0x10 -/* 073B0C 7F03EFDC 24030001 */ li $v1, 1 -/* 073B10 7F03EFE0 27A50170 */ addiu $a1, $sp, 0x170 -.L7F03EFE4: -/* 073B14 7F03EFE4 D4F00000 */ ldc1 $f16, ($a3) -/* 073B18 7F03EFE8 D4A20000 */ ldc1 $f2, ($a1) -/* 073B1C 7F03EFEC 00037900 */ sll $t7, $v1, 4 -/* 073B20 7F03EFF0 27B80160 */ addiu $t8, $sp, 0x160 -/* 073B24 7F03EFF4 4622803C */ c.lt.d $f16, $f2 -/* 073B28 7F03EFF8 00000000 */ nop -/* 073B2C 7F03EFFC 4503000C */ bc1tl .L7F03F030 -/* 073B30 7F03F000 00602025 */ move $a0, $v1 -/* 073B34 7F03F004 46301032 */ c.eq.d $f2, $f16 -/* 073B38 7F03F008 00000000 */ nop -/* 073B3C 7F03F00C 4502000A */ bc1fl .L7F03F038 -/* 073B40 7F03F010 24630001 */ addiu $v1, $v1, 1 -/* 073B44 7F03F014 D4E80008 */ ldc1 $f8, 8($a3) -/* 073B48 7F03F018 D4AA0008 */ ldc1 $f10, 8($a1) -/* 073B4C 7F03F01C 462A403C */ c.lt.d $f8, $f10 -/* 073B50 7F03F020 00000000 */ nop -/* 073B54 7F03F024 45020004 */ bc1fl .L7F03F038 -/* 073B58 7F03F028 24630001 */ addiu $v1, $v1, 1 -/* 073B5C 7F03F02C 00602025 */ move $a0, $v1 -.L7F03F030: -/* 073B60 7F03F030 01F83821 */ addu $a3, $t7, $t8 -/* 073B64 7F03F034 24630001 */ addiu $v1, $v1, 1 -.L7F03F038: -/* 073B68 7F03F038 28610008 */ slti $at, $v1, 8 -/* 073B6C 7F03F03C 1420FFE9 */ bnez $at, .L7F03EFE4 -/* 073B70 7F03F040 24A50010 */ addiu $a1, $a1, 0x10 -/* 073B74 7F03F044 24030001 */ li $v1, 1 -/* 073B78 7F03F048 27A50170 */ addiu $a1, $sp, 0x170 -.L7F03F04C: -/* 073B7C 7F03F04C D4A20008 */ ldc1 $f2, 8($a1) -/* 073B80 7F03F050 D58C0008 */ ldc1 $f12, 8($t4) -/* 073B84 7F03F054 00037900 */ sll $t7, $v1, 4 -/* 073B88 7F03F058 27B80160 */ addiu $t8, $sp, 0x160 -/* 073B8C 7F03F05C 462C103C */ c.lt.d $f2, $f12 -/* 073B90 7F03F060 00000000 */ nop -/* 073B94 7F03F064 4503000C */ bc1tl .L7F03F098 -/* 073B98 7F03F068 00605825 */ move $t3, $v1 -/* 073B9C 7F03F06C 462C1032 */ c.eq.d $f2, $f12 -/* 073BA0 7F03F070 00000000 */ nop -/* 073BA4 7F03F074 4502000A */ bc1fl .L7F03F0A0 -/* 073BA8 7F03F078 24630001 */ addiu $v1, $v1, 1 -/* 073BAC 7F03F07C D5840000 */ ldc1 $f4, ($t4) -/* 073BB0 7F03F080 D4A60000 */ ldc1 $f6, ($a1) -/* 073BB4 7F03F084 4626203C */ c.lt.d $f4, $f6 -/* 073BB8 7F03F088 00000000 */ nop -/* 073BBC 7F03F08C 45020004 */ bc1fl .L7F03F0A0 -/* 073BC0 7F03F090 24630001 */ addiu $v1, $v1, 1 -/* 073BC4 7F03F094 00605825 */ move $t3, $v1 -.L7F03F098: -/* 073BC8 7F03F098 01F86021 */ addu $t4, $t7, $t8 -/* 073BCC 7F03F09C 24630001 */ addiu $v1, $v1, 1 -.L7F03F0A0: -/* 073BD0 7F03F0A0 28610008 */ slti $at, $v1, 8 -/* 073BD4 7F03F0A4 1420FFE9 */ bnez $at, .L7F03F04C -/* 073BD8 7F03F0A8 24A50010 */ addiu $a1, $a1, 0x10 -/* 073BDC 7F03F0AC 00002825 */ move $a1, $zero -/* 073BE0 7F03F0B0 00001825 */ move $v1, $zero -.L7F03F0B4: -/* 073BE4 7F03F0B4 5062000B */ beql $v1, $v0, .L7F03F0E4 -/* 073BE8 7F03F0B8 24630001 */ addiu $v1, $v1, 1 -/* 073BEC 7F03F0BC 50640009 */ beql $v1, $a0, .L7F03F0E4 -/* 073BF0 7F03F0C0 24630001 */ addiu $v1, $v1, 1 -/* 073BF4 7F03F0C4 506A0007 */ beql $v1, $t2, .L7F03F0E4 -/* 073BF8 7F03F0C8 24630001 */ addiu $v1, $v1, 1 -/* 073BFC 7F03F0CC 106B0004 */ beq $v1, $t3, .L7F03F0E0 -/* 073C00 7F03F0D0 0005C880 */ sll $t9, $a1, 2 -/* 073C04 7F03F0D4 01B97021 */ addu $t6, $t5, $t9 -/* 073C08 7F03F0D8 ADC30000 */ sw $v1, ($t6) -/* 073C0C 7F03F0DC 24A50001 */ addiu $a1, $a1, 1 -.L7F03F0E0: -/* 073C10 7F03F0E0 24630001 */ addiu $v1, $v1, 1 -.L7F03F0E4: -/* 073C14 7F03F0E4 28610008 */ slti $at, $v1, 8 -/* 073C18 7F03F0E8 1420FFF2 */ bnez $at, .L7F03F0B4 -/* 073C1C 7F03F0EC 00000000 */ nop -/* 073C20 7F03F0F0 46200220 */ cvt.s.d $f8, $f0 -/* 073C24 7F03F0F4 8FAA01FC */ lw $t2, 0x1fc($sp) -/* 073C28 7F03F0F8 24050001 */ li $a1, 1 -/* 073C2C 7F03F0FC 27A20130 */ addiu $v0, $sp, 0x130 -/* 073C30 7F03F100 E5480000 */ swc1 $f8, ($t2) -/* 073C34 7F03F104 D52A0008 */ ldc1 $f10, 8($t1) -/* 073C38 7F03F108 27AD0140 */ addiu $t5, $sp, 0x140 -/* 073C3C 7F03F10C 27A40160 */ addiu $a0, $sp, 0x160 -/* 073C40 7F03F110 46205120 */ cvt.s.d $f4, $f10 -/* 073C44 7F03F114 E5440004 */ swc1 $f4, 4($t2) -/* 073C48 7F03F118 D5280000 */ ldc1 $f8, ($t1) -/* 073C4C 7F03F11C D5260008 */ ldc1 $f6, 8($t1) -/* 073C50 7F03F120 D5820000 */ ldc1 $f2, ($t4) -/* 073C54 7F03F124 D58C0008 */ ldc1 $f12, 8($t4) -/* 073C58 7F03F128 46224401 */ sub.d $f16, $f8, $f2 -/* 073C5C 7F03F12C 462C3381 */ sub.d $f14, $f6, $f12 -/* 073C60 7F03F130 8C430000 */ lw $v1, ($v0) -.L7F03F134: -/* 073C64 7F03F134 00037900 */ sll $t7, $v1, 4 -/* 073C68 7F03F138 008F5821 */ addu $t3, $a0, $t7 -/* 073C6C 7F03F13C D5600000 */ ldc1 $f0, ($t3) -/* 073C70 7F03F140 D5660008 */ ldc1 $f6, 8($t3) -/* 073C74 7F03F144 46220281 */ sub.d $f10, $f0, $f2 -/* 073C78 7F03F148 462C3201 */ sub.d $f8, $f6, $f12 -/* 073C7C 7F03F14C 462E5102 */ mul.d $f4, $f10, $f14 -/* 073C80 7F03F150 00000000 */ nop -/* 073C84 7F03F154 46304282 */ mul.d $f10, $f8, $f16 -/* 073C88 7F03F158 462A203C */ c.lt.d $f4, $f10 -/* 073C8C 7F03F15C 00000000 */ nop -/* 073C90 7F03F160 4500000A */ bc1f .L7F03F18C -/* 073C94 7F03F164 00000000 */ nop -/* 073C98 7F03F168 462001A0 */ cvt.s.d $f6, $f0 -/* 073C9C 7F03F16C 25420008 */ addiu $v0, $t2, 8 -/* 073CA0 7F03F170 24050002 */ li $a1, 2 -/* 073CA4 7F03F174 E4460000 */ swc1 $f6, ($v0) -/* 073CA8 7F03F178 D5680008 */ ldc1 $f8, 8($t3) -/* 073CAC 7F03F17C 46204120 */ cvt.s.d $f4, $f8 -/* 073CB0 7F03F180 E4440004 */ swc1 $f4, 4($v0) -/* 073CB4 7F03F184 10000005 */ b .L7F03F19C -/* 073CB8 7F03F188 D5820000 */ ldc1 $f2, ($t4) -.L7F03F18C: -/* 073CBC 7F03F18C 24420004 */ addiu $v0, $v0, 4 -/* 073CC0 7F03F190 004D082B */ sltu $at, $v0, $t5 -/* 073CC4 7F03F194 5420FFE7 */ bnezl $at, .L7F03F134 -/* 073CC8 7F03F198 8C430000 */ lw $v1, ($v0) -.L7F03F19C: -/* 073CCC 7F03F19C 462012A0 */ cvt.s.d $f10, $f2 -/* 073CD0 7F03F1A0 0005C0C0 */ sll $t8, $a1, 3 -/* 073CD4 7F03F1A4 01585821 */ addu $t3, $t2, $t8 -/* 073CD8 7F03F1A8 256B0008 */ addiu $t3, $t3, 8 -/* 073CDC 7F03F1AC E56AFFF8 */ swc1 $f10, -8($t3) -/* 073CE0 7F03F1B0 D5860008 */ ldc1 $f6, 8($t4) -/* 073CE4 7F03F1B4 24A50001 */ addiu $a1, $a1, 1 -/* 073CE8 7F03F1B8 27A20130 */ addiu $v0, $sp, 0x130 -/* 073CEC 7F03F1BC 46203220 */ cvt.s.d $f8, $f6 -/* 073CF0 7F03F1C0 27AD0140 */ addiu $t5, $sp, 0x140 -/* 073CF4 7F03F1C4 E568FFFC */ swc1 $f8, -4($t3) -/* 073CF8 7F03F1C8 D58A0000 */ ldc1 $f10, ($t4) -/* 073CFC 7F03F1CC D5840008 */ ldc1 $f4, 8($t4) -/* 073D00 7F03F1D0 D4E00008 */ ldc1 $f0, 8($a3) -/* 073D04 7F03F1D4 D4F00000 */ ldc1 $f16, ($a3) -/* 073D08 7F03F1D8 46202301 */ sub.d $f12, $f4, $f0 -/* 073D0C 7F03F1DC 46305381 */ sub.d $f14, $f10, $f16 -/* 073D10 7F03F1E0 8C430000 */ lw $v1, ($v0) -.L7F03F1E4: -/* 073D14 7F03F1E4 0003C900 */ sll $t9, $v1, 4 -/* 073D18 7F03F1E8 00996021 */ addu $t4, $a0, $t9 -/* 073D1C 7F03F1EC D5820000 */ ldc1 $f2, ($t4) -/* 073D20 7F03F1F0 D5840008 */ ldc1 $f4, 8($t4) -/* 073D24 7F03F1F4 46301181 */ sub.d $f6, $f2, $f16 -/* 073D28 7F03F1F8 46202281 */ sub.d $f10, $f4, $f0 -/* 073D2C 7F03F1FC 462C3202 */ mul.d $f8, $f6, $f12 -/* 073D30 7F03F200 00000000 */ nop -/* 073D34 7F03F204 462E5182 */ mul.d $f6, $f10, $f14 -/* 073D38 7F03F208 4626403C */ c.lt.d $f8, $f6 -/* 073D3C 7F03F20C 00000000 */ nop -/* 073D40 7F03F210 4500000A */ bc1f .L7F03F23C -/* 073D44 7F03F214 00000000 */ nop -/* 073D48 7F03F218 46201120 */ cvt.s.d $f4, $f2 -/* 073D4C 7F03F21C 24A50001 */ addiu $a1, $a1, 1 -/* 073D50 7F03F220 256B0008 */ addiu $t3, $t3, 8 -/* 073D54 7F03F224 E564FFF8 */ swc1 $f4, -8($t3) -/* 073D58 7F03F228 D58A0008 */ ldc1 $f10, 8($t4) -/* 073D5C 7F03F22C 46205220 */ cvt.s.d $f8, $f10 -/* 073D60 7F03F230 E568FFFC */ swc1 $f8, -4($t3) -/* 073D64 7F03F234 10000005 */ b .L7F03F24C -/* 073D68 7F03F238 D4F00000 */ ldc1 $f16, ($a3) -.L7F03F23C: -/* 073D6C 7F03F23C 24420004 */ addiu $v0, $v0, 4 -/* 073D70 7F03F240 004D082B */ sltu $at, $v0, $t5 -/* 073D74 7F03F244 5420FFE7 */ bnezl $at, .L7F03F1E4 -/* 073D78 7F03F248 8C430000 */ lw $v1, ($v0) -.L7F03F24C: -/* 073D7C 7F03F24C 462081A0 */ cvt.s.d $f6, $f16 -/* 073D80 7F03F250 24A50001 */ addiu $a1, $a1, 1 -/* 073D84 7F03F254 256B0008 */ addiu $t3, $t3, 8 -/* 073D88 7F03F258 27A20130 */ addiu $v0, $sp, 0x130 -/* 073D8C 7F03F25C E566FFF8 */ swc1 $f6, -8($t3) -/* 073D90 7F03F260 D4E40008 */ ldc1 $f4, 8($a3) -/* 073D94 7F03F264 27AC0140 */ addiu $t4, $sp, 0x140 -/* 073D98 7F03F268 462022A0 */ cvt.s.d $f10, $f4 -/* 073D9C 7F03F26C E56AFFFC */ swc1 $f10, -4($t3) -/* 073DA0 7F03F270 D4E60000 */ ldc1 $f6, ($a3) -/* 073DA4 7F03F274 D4E80008 */ ldc1 $f8, 8($a3) -/* 073DA8 7F03F278 D50E0000 */ ldc1 $f14, ($t0) -/* 073DAC 7F03F27C D50C0008 */ ldc1 $f12, 8($t0) -/* 073DB0 7F03F280 462E3481 */ sub.d $f18, $f6, $f14 -/* 073DB4 7F03F284 462C4081 */ sub.d $f2, $f8, $f12 -/* 073DB8 7F03F288 8C430000 */ lw $v1, ($v0) -.L7F03F28C: -/* 073DBC 7F03F28C 00037100 */ sll $t6, $v1, 4 -/* 073DC0 7F03F290 008E3821 */ addu $a3, $a0, $t6 -/* 073DC4 7F03F294 D4E00000 */ ldc1 $f0, ($a3) -/* 073DC8 7F03F298 D4E80008 */ ldc1 $f8, 8($a3) -/* 073DCC 7F03F29C 462E0101 */ sub.d $f4, $f0, $f14 -/* 073DD0 7F03F2A0 462C4181 */ sub.d $f6, $f8, $f12 -/* 073DD4 7F03F2A4 46222282 */ mul.d $f10, $f4, $f2 -/* 073DD8 7F03F2A8 00000000 */ nop -/* 073DDC 7F03F2AC 46323102 */ mul.d $f4, $f6, $f18 -/* 073DE0 7F03F2B0 4624503C */ c.lt.d $f10, $f4 -/* 073DE4 7F03F2B4 00000000 */ nop -/* 073DE8 7F03F2B8 4500000A */ bc1f .L7F03F2E4 -/* 073DEC 7F03F2BC 00000000 */ nop -/* 073DF0 7F03F2C0 46200220 */ cvt.s.d $f8, $f0 -/* 073DF4 7F03F2C4 24A50001 */ addiu $a1, $a1, 1 -/* 073DF8 7F03F2C8 256B0008 */ addiu $t3, $t3, 8 -/* 073DFC 7F03F2CC E568FFF8 */ swc1 $f8, -8($t3) -/* 073E00 7F03F2D0 D4E60008 */ ldc1 $f6, 8($a3) -/* 073E04 7F03F2D4 462032A0 */ cvt.s.d $f10, $f6 -/* 073E08 7F03F2D8 E56AFFFC */ swc1 $f10, -4($t3) -/* 073E0C 7F03F2DC 10000005 */ b .L7F03F2F4 -/* 073E10 7F03F2E0 D50E0000 */ ldc1 $f14, ($t0) -.L7F03F2E4: -/* 073E14 7F03F2E4 24420004 */ addiu $v0, $v0, 4 -/* 073E18 7F03F2E8 004C082B */ sltu $at, $v0, $t4 -/* 073E1C 7F03F2EC 5420FFE7 */ bnezl $at, .L7F03F28C -/* 073E20 7F03F2F0 8C430000 */ lw $v1, ($v0) -.L7F03F2F4: -/* 073E24 7F03F2F4 46207120 */ cvt.s.d $f4, $f14 -/* 073E28 7F03F2F8 24A50001 */ addiu $a1, $a1, 1 -/* 073E2C 7F03F2FC 256B0008 */ addiu $t3, $t3, 8 -/* 073E30 7F03F300 27A20130 */ addiu $v0, $sp, 0x130 -/* 073E34 7F03F304 E564FFF8 */ swc1 $f4, -8($t3) -/* 073E38 7F03F308 D5080008 */ ldc1 $f8, 8($t0) -/* 073E3C 7F03F30C 462041A0 */ cvt.s.d $f6, $f8 -/* 073E40 7F03F310 E566FFFC */ swc1 $f6, -4($t3) -/* 073E44 7F03F314 D5040000 */ ldc1 $f4, ($t0) -/* 073E48 7F03F318 D50A0008 */ ldc1 $f10, 8($t0) -/* 073E4C 7F03F31C D5220008 */ ldc1 $f2, 8($t1) -/* 073E50 7F03F320 D5200000 */ ldc1 $f0, ($t1) -/* 073E54 7F03F324 27A80140 */ addiu $t0, $sp, 0x140 -/* 073E58 7F03F328 46225401 */ sub.d $f16, $f10, $f2 -/* 073E5C 7F03F32C 46202481 */ sub.d $f18, $f4, $f0 -/* 073E60 7F03F330 8C430000 */ lw $v1, ($v0) -.L7F03F334: -/* 073E64 7F03F334 00037900 */ sll $t7, $v1, 4 -/* 073E68 7F03F338 008F3821 */ addu $a3, $a0, $t7 -/* 073E6C 7F03F33C D4EC0000 */ ldc1 $f12, ($a3) -/* 073E70 7F03F340 D4EA0008 */ ldc1 $f10, 8($a3) -/* 073E74 7F03F344 46206201 */ sub.d $f8, $f12, $f0 -/* 073E78 7F03F348 46225101 */ sub.d $f4, $f10, $f2 -/* 073E7C 7F03F34C 46304182 */ mul.d $f6, $f8, $f16 -/* 073E80 7F03F350 00000000 */ nop -/* 073E84 7F03F354 46322202 */ mul.d $f8, $f4, $f18 -/* 073E88 7F03F358 4628303C */ c.lt.d $f6, $f8 -/* 073E8C 7F03F35C 00000000 */ nop -/* 073E90 7F03F360 45000009 */ bc1f .L7F03F388 -/* 073E94 7F03F364 00000000 */ nop -/* 073E98 7F03F368 462062A0 */ cvt.s.d $f10, $f12 -/* 073E9C 7F03F36C 24A50001 */ addiu $a1, $a1, 1 -/* 073EA0 7F03F370 00001825 */ move $v1, $zero -/* 073EA4 7F03F374 E56A0000 */ swc1 $f10, ($t3) -/* 073EA8 7F03F378 D4E40008 */ ldc1 $f4, 8($a3) -/* 073EAC 7F03F37C 462021A0 */ cvt.s.d $f6, $f4 -/* 073EB0 7F03F380 10000006 */ b .L7F03F39C -/* 073EB4 7F03F384 E5660004 */ swc1 $f6, 4($t3) -.L7F03F388: -/* 073EB8 7F03F388 24420004 */ addiu $v0, $v0, 4 -/* 073EBC 7F03F38C 0048082B */ sltu $at, $v0, $t0 -/* 073EC0 7F03F390 5420FFE8 */ bnezl $at, .L7F03F334 -/* 073EC4 7F03F394 8C430000 */ lw $v1, ($v0) -/* 073EC8 7F03F398 00001825 */ move $v1, $zero -.L7F03F39C: -/* 073ECC 7F03F39C 8FB80200 */ lw $t8, 0x200($sp) -/* 073ED0 7F03F3A0 18A00065 */ blez $a1, .L7F03F538 -/* 073ED4 7F03F3A4 AF050000 */ sw $a1, ($t8) -/* 073ED8 7F03F3A8 30A70003 */ andi $a3, $a1, 3 -/* 073EDC 7F03F3AC 10E0001A */ beqz $a3, .L7F03F418 -/* 073EE0 7F03F3B0 00E02025 */ move $a0, $a3 -/* 073EE4 7F03F3B4 0003C8C0 */ sll $t9, $v1, 3 -/* 073EE8 7F03F3B8 01591021 */ addu $v0, $t2, $t9 -/* 073EEC 7F03F3BC 24630001 */ addiu $v1, $v1, 1 -/* 073EF0 7F03F3C0 1083000C */ beq $a0, $v1, .L7F03F3F4 -/* 073EF4 7F03F3C4 C4520000 */ lwc1 $f18, ($v0) -.L7F03F3C8: -/* 073EF8 7F03F3C8 C4D00030 */ lwc1 $f16, 0x30($a2) -/* 073EFC 7F03F3CC C44E0004 */ lwc1 $f14, 4($v0) -/* 073F00 7F03F3D0 24630001 */ addiu $v1, $v1, 1 -/* 073F04 7F03F3D4 46109400 */ add.s $f16, $f18, $f16 -/* 073F08 7F03F3D8 C4520008 */ lwc1 $f18, 8($v0) -/* 073F0C 7F03F3DC 24420008 */ addiu $v0, $v0, 8 -/* 073F10 7F03F3E0 E450FFF8 */ swc1 $f16, -8($v0) -/* 073F14 7F03F3E4 C4D00038 */ lwc1 $f16, 0x38($a2) -/* 073F18 7F03F3E8 46107400 */ add.s $f16, $f14, $f16 -/* 073F1C 7F03F3EC 1483FFF6 */ bne $a0, $v1, .L7F03F3C8 -/* 073F20 7F03F3F0 E450FFFC */ swc1 $f16, -4($v0) -.L7F03F3F4: -/* 073F24 7F03F3F4 C4D00030 */ lwc1 $f16, 0x30($a2) -/* 073F28 7F03F3F8 C44E0004 */ lwc1 $f14, 4($v0) -/* 073F2C 7F03F3FC 24420008 */ addiu $v0, $v0, 8 -/* 073F30 7F03F400 46109400 */ add.s $f16, $f18, $f16 -/* 073F34 7F03F404 E450FFF8 */ swc1 $f16, -8($v0) -/* 073F38 7F03F408 C4D00038 */ lwc1 $f16, 0x38($a2) -/* 073F3C 7F03F40C 46107400 */ add.s $f16, $f14, $f16 -/* 073F40 7F03F410 E450FFFC */ swc1 $f16, -4($v0) -/* 073F44 7F03F414 10650048 */ beq $v1, $a1, .L7F03F538 -.L7F03F418: -/* 073F48 7F03F418 000370C0 */ sll $t6, $v1, 3 -/* 073F4C 7F03F41C 000578C0 */ sll $t7, $a1, 3 -/* 073F50 7F03F420 01EA2021 */ addu $a0, $t7, $t2 -/* 073F54 7F03F424 014E1021 */ addu $v0, $t2, $t6 -/* 073F58 7F03F428 24420020 */ addiu $v0, $v0, 0x20 -/* 073F5C 7F03F42C 10440023 */ beq $v0, $a0, .L7F03F4BC -/* 073F60 7F03F430 C452FFE0 */ lwc1 $f18, -0x20($v0) -.L7F03F434: -/* 073F64 7F03F434 C4D00030 */ lwc1 $f16, 0x30($a2) -/* 073F68 7F03F438 C44EFFE4 */ lwc1 $f14, -0x1c($v0) -/* 073F6C 7F03F43C C44CFFE8 */ lwc1 $f12, -0x18($v0) -/* 073F70 7F03F440 46109400 */ add.s $f16, $f18, $f16 -/* 073F74 7F03F444 C44AFFEC */ lwc1 $f10, -0x14($v0) -/* 073F78 7F03F448 C448FFF0 */ lwc1 $f8, -0x10($v0) -/* 073F7C 7F03F44C C446FFF4 */ lwc1 $f6, -0xc($v0) -/* 073F80 7F03F450 E450FFE0 */ swc1 $f16, -0x20($v0) -/* 073F84 7F03F454 C4D00038 */ lwc1 $f16, 0x38($a2) -/* 073F88 7F03F458 C444FFF8 */ lwc1 $f4, -8($v0) -/* 073F8C 7F03F45C C442FFFC */ lwc1 $f2, -4($v0) -/* 073F90 7F03F460 46107400 */ add.s $f16, $f14, $f16 -/* 073F94 7F03F464 C4520000 */ lwc1 $f18, ($v0) -/* 073F98 7F03F468 24420020 */ addiu $v0, $v0, 0x20 -/* 073F9C 7F03F46C E450FFC4 */ swc1 $f16, -0x3c($v0) -/* 073FA0 7F03F470 C4D00030 */ lwc1 $f16, 0x30($a2) -/* 073FA4 7F03F474 46106400 */ add.s $f16, $f12, $f16 -/* 073FA8 7F03F478 E450FFC8 */ swc1 $f16, -0x38($v0) -/* 073FAC 7F03F47C C4D00038 */ lwc1 $f16, 0x38($a2) -/* 073FB0 7F03F480 46105400 */ add.s $f16, $f10, $f16 -/* 073FB4 7F03F484 E450FFCC */ swc1 $f16, -0x34($v0) -/* 073FB8 7F03F488 C4D00030 */ lwc1 $f16, 0x30($a2) -/* 073FBC 7F03F48C 46104400 */ add.s $f16, $f8, $f16 -/* 073FC0 7F03F490 E450FFD0 */ swc1 $f16, -0x30($v0) -/* 073FC4 7F03F494 C4D00038 */ lwc1 $f16, 0x38($a2) -/* 073FC8 7F03F498 46103400 */ add.s $f16, $f6, $f16 -/* 073FCC 7F03F49C E450FFD4 */ swc1 $f16, -0x2c($v0) -/* 073FD0 7F03F4A0 C4D00030 */ lwc1 $f16, 0x30($a2) -/* 073FD4 7F03F4A4 46102400 */ add.s $f16, $f4, $f16 -/* 073FD8 7F03F4A8 E450FFD8 */ swc1 $f16, -0x28($v0) -/* 073FDC 7F03F4AC C4D00038 */ lwc1 $f16, 0x38($a2) -/* 073FE0 7F03F4B0 46101400 */ add.s $f16, $f2, $f16 -/* 073FE4 7F03F4B4 1444FFDF */ bne $v0, $a0, .L7F03F434 -/* 073FE8 7F03F4B8 E450FFDC */ swc1 $f16, -0x24($v0) -.L7F03F4BC: -/* 073FEC 7F03F4BC C4D00030 */ lwc1 $f16, 0x30($a2) -/* 073FF0 7F03F4C0 C44EFFE4 */ lwc1 $f14, -0x1c($v0) -/* 073FF4 7F03F4C4 C44CFFE8 */ lwc1 $f12, -0x18($v0) -/* 073FF8 7F03F4C8 46109400 */ add.s $f16, $f18, $f16 -/* 073FFC 7F03F4CC C44AFFEC */ lwc1 $f10, -0x14($v0) -/* 074000 7F03F4D0 C448FFF0 */ lwc1 $f8, -0x10($v0) -/* 074004 7F03F4D4 C446FFF4 */ lwc1 $f6, -0xc($v0) -/* 074008 7F03F4D8 E450FFE0 */ swc1 $f16, -0x20($v0) -/* 07400C 7F03F4DC C4D00038 */ lwc1 $f16, 0x38($a2) -/* 074010 7F03F4E0 C444FFF8 */ lwc1 $f4, -8($v0) -/* 074014 7F03F4E4 C442FFFC */ lwc1 $f2, -4($v0) -/* 074018 7F03F4E8 46107400 */ add.s $f16, $f14, $f16 -/* 07401C 7F03F4EC E450FFE4 */ swc1 $f16, -0x1c($v0) -/* 074020 7F03F4F0 C4D00030 */ lwc1 $f16, 0x30($a2) -/* 074024 7F03F4F4 46106400 */ add.s $f16, $f12, $f16 -/* 074028 7F03F4F8 E450FFE8 */ swc1 $f16, -0x18($v0) -/* 07402C 7F03F4FC C4D00038 */ lwc1 $f16, 0x38($a2) -/* 074030 7F03F500 46105400 */ add.s $f16, $f10, $f16 -/* 074034 7F03F504 E450FFEC */ swc1 $f16, -0x14($v0) -/* 074038 7F03F508 C4D00030 */ lwc1 $f16, 0x30($a2) -/* 07403C 7F03F50C 46104400 */ add.s $f16, $f8, $f16 -/* 074040 7F03F510 E450FFF0 */ swc1 $f16, -0x10($v0) -/* 074044 7F03F514 C4D00038 */ lwc1 $f16, 0x38($a2) -/* 074048 7F03F518 46103400 */ add.s $f16, $f6, $f16 -/* 07404C 7F03F51C E450FFF4 */ swc1 $f16, -0xc($v0) -/* 074050 7F03F520 C4D00030 */ lwc1 $f16, 0x30($a2) -/* 074054 7F03F524 46102400 */ add.s $f16, $f4, $f16 -/* 074058 7F03F528 E450FFF8 */ swc1 $f16, -8($v0) -/* 07405C 7F03F52C C4D00038 */ lwc1 $f16, 0x38($a2) -/* 074060 7F03F530 46101400 */ add.s $f16, $f2, $f16 -/* 074064 7F03F534 E450FFFC */ swc1 $f16, -4($v0) -.L7F03F538: -/* 074068 7F03F538 03E00008 */ jr $ra -/* 07406C 7F03F53C 27BD01E0 */ addiu $sp, $sp, 0x1e0 -) -#endif - void sub_GAME_7F03F540(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf* arg1, struct rect4f* arg2, struct collision_data* arg3) @@ -5439,161 +3642,54 @@ void sub_GAME_7F03F540(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf* arg1, s } -#ifdef NONMATCHING -s32 sub_GAME_7F03F598(coord3d* pos, f32 arg1, BoundPadRecord *boundpads) { - dword local_70; - ushort *local_20; - dword local_1c; - dword local_18; - dword local_14; - dword local_8; +/** + * Address: 7F03F598 + * + * Tests whether a world-space point is inside a bound pad's local bbox plus + * a padding on all axes defined by the radius parameter. + */ +bool chrpropTestPointInPaddedBoundPad(coord3d *pos, f32 radius, BoundPadRecord *pad) +{ + f32 dx; + f32 dy; + f32 dz; + f32 side[3]; + f32 d; - local_20 = **(param_1 + 8); - do { - while( true ) { - if (local_20 == NULL) { - return NULL; - } - if (((*local_20 & 0xff) == 10) && (**(local_20 + 2) == param_2)) { - return local_20; - } - if (*(local_20 + 10) == 0) break; - local_20 = *(local_20 + 10); + dx = pos->x - pad->pos.x; + dy = pos->y - pad->pos.y; + dz = pos->z - pad->pos.z; + + side[0] = (pad->up.y * pad->look.z) - (pad->look.y * pad->up.z); + side[1] = (pad->up.z * pad->look.x) - (pad->look.z * pad->up.x); + side[2] = (pad->up.x * pad->look.y) - (pad->look.x * pad->up.y); + + d = (pad->look.z * dz) + ((dx * pad->look.x) + (dy * pad->look.y)); + if ((pad->bbox.zmax + radius < d) || (d < pad->bbox.zmin - radius)) + { + return FALSE; } - for (; local_20 != NULL; local_20 = *(local_20 + 4)) { - if (*(local_20 + 6) != 0) { - local_20 = *(local_20 + 6); - break; - } + + d = (pad->up.z * dz) + ((dx * pad->up.x) + (dy * pad->up.y)); + if ((pad->bbox.ymax + radius < d) || (d < pad->bbox.ymin - radius)) + { + return FALSE; } - } while( true ); + d = (dx * side[0]) + (dy * side[1]) + (side[2] * dz); + if ((pad->bbox.xmax + radius < d) || (d < pad->bbox.xmin - radius)) + { + return FALSE; + } + return TRUE; } -#else -s32 sub_GAME_7F03F598(coord3d* pos, f32 arg1, BoundPadRecord *boundpads); -GLOBAL_ASM( -.text -glabel sub_GAME_7F03F598 -/* 0740C8 7F03F598 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0740CC 7F03F59C F7B40008 */ sdc1 $f20, 8($sp) -/* 0740D0 7F03F5A0 C4C60000 */ lwc1 $f6, ($a2) -/* 0740D4 7F03F5A4 C4840000 */ lwc1 $f4, ($a0) -/* 0740D8 7F03F5A8 C4CA0004 */ lwc1 $f10, 4($a2) -/* 0740DC 7F03F5AC C4880004 */ lwc1 $f8, 4($a0) -/* 0740E0 7F03F5B0 46062001 */ sub.s $f0, $f4, $f6 -/* 0740E4 7F03F5B4 C4C40008 */ lwc1 $f4, 8($a2) -/* 0740E8 7F03F5B8 C4920008 */ lwc1 $f18, 8($a0) -/* 0740EC 7F03F5BC 460A4081 */ sub.s $f2, $f8, $f10 -/* 0740F0 7F03F5C0 C4C80020 */ lwc1 $f8, 0x20($a2) -/* 0740F4 7F03F5C4 C4C60010 */ lwc1 $f6, 0x10($a2) -/* 0740F8 7F03F5C8 46049301 */ sub.s $f12, $f18, $f4 -/* 0740FC 7F03F5CC C4C40014 */ lwc1 $f4, 0x14($a2) -/* 074100 7F03F5D0 46083282 */ mul.s $f10, $f6, $f8 -/* 074104 7F03F5D4 C4D2001C */ lwc1 $f18, 0x1c($a2) -/* 074108 7F03F5D8 4485A000 */ mtc1 $a1, $f20 -/* 07410C 7F03F5DC 46049182 */ mul.s $f6, $f18, $f4 -/* 074110 7F03F5E0 46065201 */ sub.s $f8, $f10, $f6 -/* 074114 7F03F5E4 E7A80010 */ swc1 $f8, 0x10($sp) -/* 074118 7F03F5E8 C4C40018 */ lwc1 $f4, 0x18($a2) -/* 07411C 7F03F5EC C4D20014 */ lwc1 $f18, 0x14($a2) -/* 074120 7F03F5F0 C4C60020 */ lwc1 $f6, 0x20($a2) -/* 074124 7F03F5F4 C4C8000C */ lwc1 $f8, 0xc($a2) -/* 074128 7F03F5F8 46049282 */ mul.s $f10, $f18, $f4 -/* 07412C 7F03F5FC 00000000 */ nop -/* 074130 7F03F600 46083482 */ mul.s $f18, $f6, $f8 -/* 074134 7F03F604 46125101 */ sub.s $f4, $f10, $f18 -/* 074138 7F03F608 E7A40014 */ swc1 $f4, 0x14($sp) -/* 07413C 7F03F60C C4C8001C */ lwc1 $f8, 0x1c($a2) -/* 074140 7F03F610 C4C6000C */ lwc1 $f6, 0xc($a2) -/* 074144 7F03F614 C4D20018 */ lwc1 $f18, 0x18($a2) -/* 074148 7F03F618 C4C40010 */ lwc1 $f4, 0x10($a2) -/* 07414C 7F03F61C 46083282 */ mul.s $f10, $f6, $f8 -/* 074150 7F03F620 00000000 */ nop -/* 074154 7F03F624 46049182 */ mul.s $f6, $f18, $f4 -/* 074158 7F03F628 46065201 */ sub.s $f8, $f10, $f6 -/* 07415C 7F03F62C E7A80018 */ swc1 $f8, 0x18($sp) -/* 074160 7F03F630 C4D20018 */ lwc1 $f18, 0x18($a2) -/* 074164 7F03F634 C4CA001C */ lwc1 $f10, 0x1c($a2) -/* 074168 7F03F638 46120102 */ mul.s $f4, $f0, $f18 -/* 07416C 7F03F63C C4D20020 */ lwc1 $f18, 0x20($a2) -/* 074170 7F03F640 460A1182 */ mul.s $f6, $f2, $f10 -/* 074174 7F03F644 46062200 */ add.s $f8, $f4, $f6 -/* 074178 7F03F648 460C9282 */ mul.s $f10, $f18, $f12 -/* 07417C 7F03F64C C4C40040 */ lwc1 $f4, 0x40($a2) -/* 074180 7F03F650 46142180 */ add.s $f6, $f4, $f20 -/* 074184 7F03F654 46085380 */ add.s $f14, $f10, $f8 -/* 074188 7F03F658 460E303C */ c.lt.s $f6, $f14 -/* 07418C 7F03F65C 00000000 */ nop -/* 074190 7F03F660 45010007 */ bc1t .L7F03F680 -/* 074194 7F03F664 00000000 */ nop -/* 074198 7F03F668 C4D2003C */ lwc1 $f18, 0x3c($a2) -/* 07419C 7F03F66C 46149281 */ sub.s $f10, $f18, $f20 -/* 0741A0 7F03F670 460A703C */ c.lt.s $f14, $f10 -/* 0741A4 7F03F674 00000000 */ nop -/* 0741A8 7F03F678 45020004 */ bc1fl .L7F03F68C -/* 0741AC 7F03F67C C4C8000C */ lwc1 $f8, 0xc($a2) -.L7F03F680: -/* 0741B0 7F03F680 1000002E */ b .L7F03F73C -/* 0741B4 7F03F684 00001025 */ move $v0, $zero -/* 0741B8 7F03F688 C4C8000C */ lwc1 $f8, 0xc($a2) -.L7F03F68C: -/* 0741BC 7F03F68C C4C60010 */ lwc1 $f6, 0x10($a2) -/* 0741C0 7F03F690 46080102 */ mul.s $f4, $f0, $f8 -/* 0741C4 7F03F694 C4C80014 */ lwc1 $f8, 0x14($a2) -/* 0741C8 7F03F698 46061482 */ mul.s $f18, $f2, $f6 -/* 0741CC 7F03F69C 46122280 */ add.s $f10, $f4, $f18 -/* 0741D0 7F03F6A0 460C4182 */ mul.s $f6, $f8, $f12 -/* 0741D4 7F03F6A4 C4C40038 */ lwc1 $f4, 0x38($a2) -/* 0741D8 7F03F6A8 46142480 */ add.s $f18, $f4, $f20 -/* 0741DC 7F03F6AC 460A3380 */ add.s $f14, $f6, $f10 -/* 0741E0 7F03F6B0 460E903C */ c.lt.s $f18, $f14 -/* 0741E4 7F03F6B4 00000000 */ nop -/* 0741E8 7F03F6B8 45010009 */ bc1t .L7F03F6E0 -/* 0741EC 7F03F6BC 00000000 */ nop -/* 0741F0 7F03F6C0 C4C80034 */ lwc1 $f8, 0x34($a2) -/* 0741F4 7F03F6C4 C7AA0010 */ lwc1 $f10, 0x10($sp) -/* 0741F8 7F03F6C8 C7B20014 */ lwc1 $f18, 0x14($sp) -/* 0741FC 7F03F6CC 46144181 */ sub.s $f6, $f8, $f20 -/* 074200 7F03F6D0 4606703C */ c.lt.s $f14, $f6 -/* 074204 7F03F6D4 00000000 */ nop -/* 074208 7F03F6D8 45000003 */ bc1f .L7F03F6E8 -/* 07420C 7F03F6DC 00000000 */ nop -.L7F03F6E0: -/* 074210 7F03F6E0 10000016 */ b .L7F03F73C -/* 074214 7F03F6E4 00001025 */ move $v0, $zero -.L7F03F6E8: -/* 074218 7F03F6E8 460A0102 */ mul.s $f4, $f0, $f10 -/* 07421C 7F03F6EC C7AA0018 */ lwc1 $f10, 0x18($sp) -/* 074220 7F03F6F0 46121202 */ mul.s $f8, $f2, $f18 -/* 074224 7F03F6F4 46082180 */ add.s $f6, $f4, $f8 -/* 074228 7F03F6F8 460C5482 */ mul.s $f18, $f10, $f12 -/* 07422C 7F03F6FC C4C40030 */ lwc1 $f4, 0x30($a2) -/* 074230 7F03F700 46142200 */ add.s $f8, $f4, $f20 -/* 074234 7F03F704 46069400 */ add.s $f16, $f18, $f6 -/* 074238 7F03F708 4610403C */ c.lt.s $f8, $f16 -/* 07423C 7F03F70C 00000000 */ nop -/* 074240 7F03F710 45010008 */ bc1t .L7F03F734 -/* 074244 7F03F714 00000000 */ nop -/* 074248 7F03F718 C4CA002C */ lwc1 $f10, 0x2c($a2) -/* 07424C 7F03F71C 24020001 */ li $v0, 1 -/* 074250 7F03F720 46145481 */ sub.s $f18, $f10, $f20 -/* 074254 7F03F724 4612803C */ c.lt.s $f16, $f18 -/* 074258 7F03F728 00000000 */ nop -/* 07425C 7F03F72C 45000003 */ bc1f .L7F03F73C -/* 074260 7F03F730 00000000 */ nop -.L7F03F734: -/* 074264 7F03F734 10000001 */ b .L7F03F73C -/* 074268 7F03F738 00001025 */ move $v0, $zero -.L7F03F73C: -/* 07426C 7F03F73C D7B40008 */ ldc1 $f20, 8($sp) -/* 074270 7F03F740 03E00008 */ jr $ra -/* 074274 7F03F744 27BD0028 */ addiu $sp, $sp, 0x28 -) -#endif -void sub_GAME_7F03F748(Model* model, f32* max, f32* min, s32 axis) +/* +* Address: 7F03F748 +*/ +void modelGetAxisExtents(Model* model, f32* max, f32* min, s32 axis) { ModelNode *node = model->obj->RootNode; bool first = TRUE; @@ -5663,42 +3759,43 @@ void sub_GAME_7F03F748(Model* model, f32* max, f32* min, s32 axis) } -void sub_GAME_7F03F90C(Model *model, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4) +void modelGetXYExtents(Model *model, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4) { - sub_GAME_7F03F748(model, arg1, arg2, 0); - sub_GAME_7F03F748(model, arg3, arg4, 1); + modelGetAxisExtents(model, arg1, arg2, 0); + modelGetAxisExtents(model, arg3, arg4, 1); } /** * NTSC address 0x7F03F948. + * Project rectangle corners to screen */ -void sub_GAME_7F03F948(struct coord3d *arg0, struct coord2d *arg1, struct coord2d *arg2, struct coord2d *arg3, struct coord2d *arg4) +void projectRectCornersTo2D(struct coord3d *center, struct coord2d *arg1, struct coord2d *arg2, struct coord2d *arg3, struct coord2d *arg4) { struct coord3d sp24; struct coord2d tout; sp24.f[0] = arg1->f[0]; - sp24.f[1] = arg0->f[1]; - sp24.f[2] = arg0->f[2]; + sp24.f[1] = center->f[1]; + sp24.f[2] = center->f[2]; transform3Dto2DCoords(&sp24, &tout); arg3->f[0] = tout.f[0]; sp24.f[0] = arg1->f[1]; - sp24.f[1] = arg0->f[1]; - sp24.f[2] = arg0->f[2]; + sp24.f[1] = center->f[1]; + sp24.f[2] = center->f[2]; transform3Dto2DCoords(&sp24, &tout); arg4->f[0] = tout.f[0]; - sp24.f[0] = arg0->f[0]; + sp24.f[0] = center->f[0]; sp24.f[1] = arg2->f[1]; - sp24.f[2] = arg0->f[2]; + sp24.f[2] = center->f[2]; transform3Dto2DCoords(&sp24, &tout); arg3->f[1] = tout.f[1]; - sp24.f[0] = arg0->f[0]; + sp24.f[0] = center->f[0]; sp24.f[1] = arg2->f[0]; - sp24.f[2] = arg0->f[2]; + sp24.f[2] = center->f[2]; transform3Dto2DCoords(&sp24, &tout); arg4->f[1] = tout.f[1]; } @@ -5713,7 +3810,7 @@ ObjectRecord *scan_position_data_table_for_normal_object_at_preset(s32 PadId) { PropRecord *prop; s16 tempPadId = PadId; - prop = get_ptr_obj_pos_list_current_entry(); + prop = chrpropGetActiveTail(); while (prop != NULL) { if (prop->type == PROP_TYPE_OBJ) @@ -5740,7 +3837,7 @@ ObjectRecord * sub_GAME_7F03FAB0(struct coord3d *pos, s32 RoomID) s32 edges; PropRecord * prop; - prop = get_ptr_obj_pos_list_current_entry(); + prop = chrpropGetActiveTail(); while (prop != NULL) { if ((prop->type == PROP_TYPE_OBJ) && (RoomID == prop->stan->room)) diff --git a/src/game/cleanup_guard_data.c b/src/game/cleanup_guard_data.c index 5fe4364f..ab169db9 100644 --- a/src/game/cleanup_guard_data.c +++ b/src/game/cleanup_guard_data.c @@ -8,7 +8,7 @@ void cleanupGuardData(void) for (i = 0; i < g_NumChrSlots; i++) { if (g_ChrSlots[i].model != 0) { - disable_sounds_attached_to_player_then_something(g_ChrSlots[i].prop); + chrpropCleanupForRemoval(g_ChrSlots[i].prop); chrpropDelist(g_ChrSlots[i].prop); chrpropDisable(g_ChrSlots[i].prop); chrpropFree(g_ChrSlots[i].prop); diff --git a/src/game/cobjdata.c b/src/game/cobjdata.c index 52607b3f..982b6e28 100644 --- a/src/game/cobjdata.c +++ b/src/game/cobjdata.c @@ -9,5 +9,4 @@ #include //D:8003E464 -//struct headHat headHat_array_8003E464[] = #include diff --git a/src/game/deb_loadallmodels.h b/src/game/deb_loadallmodels.h index 9671c690..1c392ead 100644 --- a/src/game/deb_loadallmodels.h +++ b/src/game/deb_loadallmodels.h @@ -19,5 +19,6 @@ typedef struct WeaponProjectileModels { } WeaponProjectileModels; void init_obj_register_difficulty_vals(void); +void alloc_false_GUARDdata_to_exec_global_action(void); #endif diff --git a/src/game/debug_camera.c b/src/game/debug_camera.c index 74cf4fb8..0379498e 100644 --- a/src/game/debug_camera.c +++ b/src/game/debug_camera.c @@ -202,7 +202,7 @@ coord3d debugCameraPreviousPosition = {0.0f,0.0f,0.0f}; * Address: 0x7F091580 */ Gfx * sub_GAME_7F091580(Gfx * arg0) { - sub_GAME_7F0876C4(&debugCameraPosition, &debugCameraForward, &debugCameraUp); + bondviewUpdateCameraMatrices(&debugCameraPosition, &debugCameraForward, &debugCameraUp); return arg0; } @@ -229,7 +229,7 @@ void setDebugCameraScale(float scale) void initializeDebugCameraPosition(void) { coord3d *pos = bondviewGetCurrentPlayersPosition(); - f32 r = M_TAU_F - get_curplay_horizontal_rotation_in_degrees(); + f32 r = M_TAU_F - bondviewGetPlayerYawRadians(); f32 x = ((debugCameraPosition.x - pos->x) * cosf(r)) + ((debugCameraPosition.x - pos->x) * sinf(r)); f32 y = debugCameraPosition.y - pos->y; f32 z = (debugCameraPosition.z - pos->z) * cosf(r) - (debugCameraPosition.x - pos->x) * sinf(r); diff --git a/src/game/debug_camera.h b/src/game/debug_camera.h index da6e1e32..5609d9c3 100644 --- a/src/game/debug_camera.h +++ b/src/game/debug_camera.h @@ -3,6 +3,7 @@ #include void debugFreeCamera(s8 joyX, s8 joyY, u16 joyBtns); +void setDebugCameraScale(f32 scale); Gfx * sub_GAME_7F091580(Gfx *arg0); #endif diff --git a/src/game/debugmenu_handler.c b/src/game/debugmenu_handler.c index 6634d6bb..0d0150c7 100644 --- a/src/game/debugmenu_handler.c +++ b/src/game/debugmenu_handler.c @@ -335,7 +335,7 @@ void debmenuHandleMoveView(void) */ void debmenuHandleStanView(void) { - maybe_solo_intro_camera_handler(); + bondviewRemovePlayerBody(); g_DebugHighlightedOption = get_highlighted_debug_option(); debug_render_raster = debug_freeze_processing = g_DebugHighlightedOption; } @@ -347,7 +347,7 @@ void debmenuHandleStanView(void) */ void debmenuHandleBondView(void) { - maybe_solo_intro_camera_handler(); + bondviewRemovePlayerBody(); g_DebugHighlightedOption = get_highlighted_debug_option(); debug_render_raster = debug_freeze_processing = g_DebugHighlightedOption; } @@ -534,49 +534,6 @@ s32 debug_menu_processor(s8 stick_h, s8 stick_v, u16 button_held, u16 button_pre g_DebugHighlightedOption = get_highlighted_debug_option(); break; -#ifdef XBLADEBUG - case DEB_MARGTOP: //marg top - /* - printf("Margins: %5.2f.0F %5.2f.0F %5.2f.0F %5.2f.0F\n", - bgTimesAddViewRelatedMaybe(1.0,0.0,0), - bgTimesAddViewRelatedMaybe(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,1), - bgTimesAddViewRelatedMaybe(1.0,0.0,2), - bgTimesAddViewRelatedMaybe(1.0,0.0,3)); - //*/ - case DEB_MARGBOT: //marg bot - /* - printf("Margins: %5.2f.0F %5.2f.0F %5.2f.0F %5.2f.0F\n", - bgTimesAddViewRelatedMaybe(1.0,0.0,0), - bgTimesAddViewRelatedMaybe(1.0,0.0,1), - bgTimesAddViewRelatedMaybe(1.0,0.0,2), - bgTimesAddViewRelatedMaybe(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,3)); - //*/ - case DEB_MARGLEFT: //marg left - /* - printf("Margins: %5.2f.0F %5.2f.0F %5.2f.0F %5.2f.0F\n", - bgTimesAddViewRelatedMaybe(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,0), - bgTimesAddViewRelatedMaybe(1.0,0.0,1), - bgTimesAddViewRelatedMaybe(1.0,0.0,2), - bgTimesAddViewRelatedMaybe(1.0,0.0,3)); - //*/ - case DEB_MARGRIGHT: //marg right - /* - printf("Margins: %5.2f.0F %5.2f.0F %5.2f.0F %5.2f.0F\n", - bgTimesAddViewRelatedMaybe(1.0,0.0,0), - bgTimesAddViewRelatedMaybe(1.0,0.0,1), - bgTimesAddViewRelatedMaybe(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,2), - bgTimesAddViewRelatedMaybe(1.0,0.0,3)); - //*/ - case DEB_MARGRESET: //marg reset - /* - printf("Margins: %5.2f.0F %5.2f.0F %5.2f.0F %5.2f.0F\n", - bgTimesAddViewRelatedMaybe(1.0,0.0,0), - bgTimesAddViewRelatedMaybe(1.0,0.0,1), - bgTimesAddViewRelatedMaybe(1.0,0.0,2), - bgTimesAddViewRelatedMaybe(1.0,0.0,3)); - //*/ - break; -#endif case DEB_SCREENSIZE: // screen size g_DebugHighlightedOption = get_highlighted_debug_option(); break; @@ -737,11 +694,11 @@ s32 debug_menu_processor(s8 stick_h, s8 stick_v, u16 button_held, u16 button_pre break; case DEB_AUTOAIMY: // auto y aim - set_BONDdata_autoaim_y(get_BONDdata_autoaim_y() == 0); + currentPlayerSetYAutoAimEnabled(currentPlayerGetYAutoAimEnabled() == 0); break; case DEB_AUTOAIMX: // auto x aim - set_BONDdata_autoaim_x(get_BONDdata_autoaim_x() == 0); + currentPlayerSetXAutoAimEnabled(currentPlayerGetXAutoAimEnabled() == 0); break; case DEB_007: // 007 @@ -786,7 +743,7 @@ s32 debug_menu_processor(s8 stick_h, s8 stick_v, u16 button_held, u16 button_pre } else { - playerprop = get_curplayer_positiondata(); + playerprop = getCurrentPlayerProp(); if (playerprop) { diff --git a/src/game/decompress.c b/src/game/decompress.c index 549a851f..2924c75f 100644 --- a/src/game/decompress.c +++ b/src/game/decompress.c @@ -9,12 +9,6 @@ const u8 rz_header_bytes[40] = { 0x11, 0x72, 0x00, 0x00, 0x11, 0x72, 0x00, 0x00, 0x11, 0x72, 0x00, 0x00, 0x11, 0x72, 0x00, 0x00, 0x11, 0x72, 0x00, 0x00 }; - - - -#ifdef NONMATCHING -// https://decomp.me/scratch/IRSKp 96% - struct aaa { u8 unk00; u8 unk01; @@ -34,106 +28,45 @@ struct aaa { u8 unk18; }; -u32 decompressdata(u8 *arg0, u8 *arg1, struct huft *arg2) -{ - s32 unused = 0; - struct aaa *p = &rz_header_bytes; - - rz_inbuf = arg0; - rz_outbuf = arg1; - rz_hlist = arg2; - //if(1); +u32 decompressdata(u8 *src, u8 *dst, struct huft *huffman_table) +{ + s32 header_check; + struct aaa *p = &rz_header_bytes; + struct aaa *header_alias; - //if ((arg0[0] != rz_header_bytes[0]) || (arg0[1] != rz_header_bytes[5])) - if ((arg0[0] != p->unk00) || (arg0[1] != p->unk05)) + header_check = 0; + rz_inbuf = src; + header_alias = &(*p); + rz_outbuf = dst; + rz_hlist = huffman_table; + + if (((header_check = src[0]) != (*header_alias).unk00) || (src[1] != (*p).unk05)) + { + header_check = src[-1]; + if ((header_check == p->unk08) != 0) { - u8 a0m1;// = arg0[-1]; - u8 a0m2;// = arg0[-2]; - - //if(arg0[-1]); - a0m1 = arg0[-1]; - - //if (arg0[-1] == rz_header_bytes[8]) - if (a0m1 == p->unk08) - { - unused = 2; - } - - //if(arg0[-2]); - a0m2 = arg0[-2]; - - //if (arg0[-2] == rz_header_bytes[24]) - if (a0m2 == p->unk18) - { - unused = 1; - } + header_check = 2; } + if (src[-2] == ((*header_alias).unk18 & 0xFF)) + { + header_check = 1; - if (unused); + // Weird but needed for matching. + if (((*header_alias).unk18) && ((*header_alias).unk18)); + } + } - rz_inbuf += 2; - rz_wp = 0; - rz_inptr = 0; + if (header_check); - zlib_inflate(); + rz_inbuf = rz_inbuf + 2; + rz_wp = 0; + rz_inptr = 0; + + zlib_inflate(); - return rz_wp; + return rz_wp; } -#else -GLOBAL_ASM( -.text -glabel decompressdata -/* 103320 7F0CE7F0 3C078009 */ lui $a3, %hi(rz_inbuf) -/* 103324 7F0CE7F4 24E7D350 */ addiu $a3, %lo(rz_inbuf) # addiu $a3, $a3, -0x2cb0 -/* 103328 7F0CE7F8 ACE40000 */ sw $a0, ($a3) -/* 10332C 7F0CE7FC 3C018009 */ lui $at, %hi(rz_outbuf) -/* 103330 7F0CE800 AC25D354 */ sw $a1, %lo(rz_outbuf)($at) -/* 103334 7F0CE804 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 103338 7F0CE808 3C018009 */ lui $at, %hi(rz_hlist) -/* 10333C 7F0CE80C AFBF0014 */ sw $ra, 0x14($sp) -/* 103340 7F0CE810 AC26D360 */ sw $a2, %lo(rz_hlist)($at) -/* 103344 7F0CE814 3C0E8006 */ lui $t6, %hi(rz_header_bytes) -/* 103348 7F0CE818 91CEBF80 */ lbu $t6, %lo(rz_header_bytes)($t6) -/* 10334C 7F0CE81C 90820000 */ lbu $v0, ($a0) -/* 103350 7F0CE820 3C188006 */ lui $t8, %hi(rz_header_bytes+0x5) -/* 103354 7F0CE824 3C198006 */ lui $t9, %hi(rz_header_bytes+0x8) -/* 103358 7F0CE828 144E0005 */ bne $v0, $t6, .L7F0CE840 -/* 10335C 7F0CE82C 3C0A8006 */ lui $t2, %hi(rz_header_bytes+0x18) -/* 103360 7F0CE830 908F0001 */ lbu $t7, 1($a0) -/* 103364 7F0CE834 9318BF85 */ lbu $t8, %lo(rz_header_bytes+0x5)($t8) -/* 103368 7F0CE838 51F8000A */ beql $t7, $t8, .L7F0CE864 -/* 10336C 7F0CE83C 8CEC0000 */ lw $t4, ($a3) -.L7F0CE840: -/* 103370 7F0CE840 9083FFFF */ lbu $v1, -1($a0) -/* 103374 7F0CE844 9339BF88 */ lbu $t9, %lo(rz_header_bytes+0x8)($t9) -/* 103378 7F0CE848 54790002 */ bnel $v1, $t9, .L7F0CE854 -/* 10337C 7F0CE84C 9089FFFE */ lbu $t1, -2($a0) -/* 103380 7F0CE850 9089FFFE */ lbu $t1, -2($a0) -.L7F0CE854: -/* 103384 7F0CE854 914ABF98 */ lbu $t2, %lo(rz_header_bytes+0x18)($t2) -/* 103388 7F0CE858 552A0002 */ bnel $t1, $t2, .L7F0CE864 -/* 10338C 7F0CE85C 8CEC0000 */ lw $t4, ($a3) -/* 103390 7F0CE860 8CEC0000 */ lw $t4, ($a3) -.L7F0CE864: -/* 103394 7F0CE864 3C018009 */ lui $at, %hi(rz_wp) -/* 103398 7F0CE868 258D0002 */ addiu $t5, $t4, 2 -/* 10339C 7F0CE86C ACED0000 */ sw $t5, ($a3) -/* 1033A0 7F0CE870 AC20D35C */ sw $zero, %lo(rz_wp)($at) -/* 1033A4 7F0CE874 3C018009 */ lui $at, %hi(rz_inptr) -/* 1033A8 7F0CE878 0FC33F35 */ jal zlib_inflate -/* 1033AC 7F0CE87C AC20D358 */ sw $zero, %lo(rz_inptr)($at) -/* 1033B0 7F0CE880 8FBF0014 */ lw $ra, 0x14($sp) -/* 1033B4 7F0CE884 3C028009 */ lui $v0, %hi(rz_wp) -/* 1033B8 7F0CE888 8C42D35C */ lw $v0, %lo(rz_wp)($v0) -/* 1033BC 7F0CE88C 03E00008 */ jr $ra -/* 1033C0 7F0CE890 27BD0018 */ addiu $sp, $sp, 0x18 -) -#endif - - - - s32 rzipGetSomething(void) { diff --git a/src/game/dyn.c b/src/game/dyn.c index 62608f77..ec59cc8c 100644 --- a/src/game/dyn.c +++ b/src/game/dyn.c @@ -76,9 +76,13 @@ s32 dynGetFreeGfx2(Gfx *gdl) { return (Gfx*)g_GfxBuffers[g_GfxActiveBufferIndex + 1] - gdl; } -void/*Vtx?*/ *dynAllocate7F0BD6C4(s32 count) { +/** + * Address: 7F0BD6C4 + */ +Vtx *dynAllocateVertices(s32 count) +{ void *ptr = g_GfxMemPos; - g_GfxMemPos += count * 0x10/*sizeof(Vtx)?*/; + g_GfxMemPos += count * sizeof(Vtx); return ptr; } @@ -89,10 +93,14 @@ Mtx *dynAllocateMatrix(void) return ptr; } -void/*Light?*/ *dynAllocate7F0BD6F8(s32 count) { +/** + * Address: 7F0BD6F8 + */ +Light *dynAllocateLights(s32 count) +{ void *ptr = g_GfxMemPos; - g_GfxMemPos += count * 0x10/*sizeof(Light)?*/; - return ptr; + g_GfxMemPos += count * sizeof(Light); + return ptr; } void *dynAllocate(s32 size) { diff --git a/src/game/dyn.h b/src/game/dyn.h index eaac570f..1cdcd370 100644 --- a/src/game/dyn.h +++ b/src/game/dyn.h @@ -7,9 +7,9 @@ void dynInit(void); void dynInitMemory(void); Gfx *dynGetMasterDisplayList(void); s32 dynGetFreeGfx2(Gfx *gdl); -void *dynAllocate7F0BD6C4(s32 count); +Vtx *dynAllocateVertices(s32 count); Mtx *dynAllocateMatrix(void); -void *dynAllocate7F0BD6F8(s32 count); +Light *dynAllocateLights(s32 count); void *dynAllocate(s32 size); void dynSwapBuffers(void); void dynRemovedFunc(Gfx *gdl); diff --git a/src/game/ejectedcartridges.c b/src/game/ejectedcartridges.c index ae3dfe6b..76cdd4c3 100644 --- a/src/game/ejectedcartridges.c +++ b/src/game/ejectedcartridges.c @@ -4,30 +4,33 @@ #include "gun.h" // Copied from another file. Might need code reorganization to prevent the use of extra externs. -extern s32 dword_CODE_bss_80075DB0; -extern s32 dword_CODE_bss_80075DB4; -extern ALSoundState* dword_CODE_bss_80075DB8[4]; +extern ALSoundState* g_CasingSfxState; +extern ALSoundState* g_UnusedSfxState; +extern ALSoundState* g_ImpactSfxStates[NUM_IMPACT_SFX_STATES]; extern u32 cartridges_eject; -extern u32 D_80034CA0; +extern u32 g_gunDebKeyframeIndex; extern CartridgeModelFileRecord ejected_cartridge[] ; -void init_ejected_cartridges(void) { - int i = 0; - dword_CODE_bss_80075DB0 = 0; +void init_ejected_cartridges(void) +{ + s32 i = 0; - while (i < 4) + g_CasingSfxState = NULL; + + while (i < NUM_IMPACT_SFX_STATES) { - dword_CODE_bss_80075DB8[i] = NULL; + g_ImpactSfxStates[i] = NULL; i++; } i = 0; cartridges_eject = 0; - D_80034CA0 = 0; + g_gunDebKeyframeIndex = 0; - while (ejected_cartridge[i].header != 0) { + while (ejected_cartridge[i].header != 0) + { fileLoad(ejected_cartridge[i].header, ejected_cartridge[i].text); i++; } diff --git a/src/game/explosion.c b/src/game/explosion.c index b1e7661f..d80769b1 100644 --- a/src/game/explosion.c +++ b/src/game/explosion.c @@ -479,7 +479,7 @@ void explosionInflictDamage(PropRecord *arg0, f32 horiz_range, f32 vert_range) for (var_s3 = ptr_list_object_lookup_indices; *var_s3 >= 0; var_s3++) { - temp_s0 = &pos_data_entry[*var_s3]; + temp_s0 = &g_Props[*var_s3]; if ((temp_s0 != temp_s2->source) && (temp_s0->timetoregen == 0)) { @@ -690,7 +690,7 @@ s32 explosionTick(PropRecord* arg0) if (g_ClockTimer == 0) { - return 0; + return TICKOP_NONE; } lvupdate = (g_ClockTimer < 15) ? (f32) g_ClockTimer : 15.0f; @@ -759,7 +759,7 @@ s32 explosionTick(PropRecord* arg0) // end explosionGetBboxAtFrame. - sub_GAME_7F03E27C(arg0, &sp90, &sp84, hrange); + chrpropUpdateRoomList(arg0, &sp90, &sp84, hrange); vrange = explosiontype->explosion_range + (((explosiontype->dmg_range - explosiontype->explosion_range) * (f32) exp->age) / (f32) explosiontype->duration); explosionInflictDamage(arg0, vrange, vrange); @@ -807,14 +807,14 @@ s32 explosionTick(PropRecord* arg0) if (exp->age >= explosiontype->duration + (s32) (16.0f * explosiontype->flareanimspeed)) { exp->prop = NULL; - return 1; + + return TICKOP_FREE; } - return 0; + return TICKOP_NONE; } - /* * Address: 0x7F09D4EC */ @@ -836,10 +836,10 @@ u8 explosionChrpropExplosionTick(PropRecord* prop) if (g_ClockTimer == 0) { - return 0; + return TICKOP_NONE; } - return 0; + return TICKOP_NONE; } @@ -871,7 +871,7 @@ Gfx *explosionRenderPropExplosion(PropRecord *prop, Gfx *gdl, s32 withalpha) } else { - if (sub_GAME_7F054A64(prop, &sp70) > 0) + if (getPropCombinedRoomsBBox2D(prop, &sp70) > 0) { gdl = bgScissorCurrentPlayerViewF(gdl, sp70.min.f[0], sp70.min.f[1], sp70.max.f[0], sp70.max.f[1]); } @@ -957,7 +957,7 @@ Gfx *explosionRenderPart(struct ExplosionPart *arg0, Gfx *gdl, struct coord3d *c spA0 = g_ExplosionRenderPartDefaultVertex; - sp9C = currentPlayerGetMatrix10D4(); + sp9C = currentPlayerGetViewToWorldMtxf(); sp98 = bondviewGetCurrentPlayersPosition(); sp64 = arg0->pos.f[0] - sp98->f[0]; @@ -987,7 +987,7 @@ Gfx *explosionRenderPart(struct ExplosionPart *arg0, Gfx *gdl, struct coord3d *c sp48 = sp98->f[1] + (sp60 * f2); sp44 = sp98->f[2] + (sp5C * f2); - vertices = dynAllocate7F0BD6C4(4); + vertices = dynAllocateVertices(4); vertices[0] = spA0; vertices[1] = spA0; @@ -1077,7 +1077,7 @@ Gfx *explosionSmokeRenderPart(struct Smoke *smoke, struct SmokePart *smoke_part, spC0 = g_SmokeRenderPartDefaultVertex; - mtx = currentPlayerGetMatrix10D4(); + mtx = currentPlayerGetViewToWorldMtxf(); sp70 = bondviewGetCurrentPlayersPosition(); if (g_SmokeTypes[smoke->smoke_type].rateappear >= smoke_part->count) @@ -1089,7 +1089,7 @@ Gfx *explosionSmokeRenderPart(struct Smoke *smoke, struct SmokePart *smoke_part, sp77 = smoke_part->alpha; } - vertices = dynAllocate7F0BD6C4(4); + vertices = dynAllocateVertices(4); vertices[0] = spC0; vertices[1] = spC0; @@ -1291,7 +1291,7 @@ s32 explosionSmokeTick(PropRecord *arg0) if (g_ClockTimer == 0) { - return 0; + return TICKOP_NONE; } lvupdate = (g_ClockTimer < 15) ? (f32) g_ClockTimer : 15.0f; @@ -1407,7 +1407,7 @@ s32 explosionSmokeTick(PropRecord *arg0) var_f14 = bbmax.f[2] - arg0->pos.f[2]; } - sub_GAME_7F03E27C(arg0, &bbmin, &bbmax, var_f14); + chrpropUpdateRoomList(arg0, &bbmin, &bbmax, var_f14); if (smoke->duration > g_SmokeTypes[smoke->smoke_type].ratedissolve) { @@ -1430,10 +1430,10 @@ s32 explosionSmokeTick(PropRecord *arg0) if (var_v1 != 0) { smoke->prop = NULL; - return 1; + return TICKOP_FREE; } - return 0; + return TICKOP_NONE; } @@ -1456,7 +1456,7 @@ u8 explosionChrpropSmokeTick(PropRecord* prop) prop->zDepth -= 100.0f; } - return 0; + return TICKOP_NONE; } @@ -1483,7 +1483,7 @@ Gfx *explosionRenderPropSmoke(PropRecord *arg0, Gfx *gdl, s32 withalpha) return gdl; } - if (sub_GAME_7F054A64(arg0, &sp78) > 0) + if (getPropCombinedRoomsBBox2D(arg0, &sp78) > 0) { gdl = bgScissorCurrentPlayerViewF(gdl, sp78.min.f[0], sp78.min.f[1], sp78.max.f[0], sp78.max.f[1]); } diff --git a/src/game/explosion.h b/src/game/explosion.h index 2a0fe19c..a839e2ad 100644 --- a/src/game/explosion.h +++ b/src/game/explosion.h @@ -176,7 +176,7 @@ u8 explosionChrpropSmokeTick(PropRecord* prop); u8 explosionChrpropExplosionTick(PropRecord* prop); void explosionScreenShake(coord3d* source_pos, coord3d* source_mag, coord3d* result); void explosionCreateBulletImpact(struct coord3d *pos, struct coord3d *arg1, s16 impact_type, s16 room, PropRecord *prop, s8 model_render_pos_index, s8 room_clear_flag); - +s32 explosionTick(PropRecord* arg0); #if defined(VERSION_JP) || defined(VERSION_EU) s32 explosionCreate(PropRecord *arg0, struct coord3d *target_pos, StandTile *target_stan, s16 /* enum EXPLOSION_DEF */ explosion_type, s32 arg4, s32 player, u8 *rooms, s32 arg7); s32 sub_GAME_7F09C250(s32 arg0, struct coord3d *pos, struct StandTile *stan, s16 arg3, s32 flag4, s32 playernum, u8 *rooms, s32 flag7); diff --git a/src/game/file2.c b/src/game/file2.c index 1a3e442e..004247dc 100644 --- a/src/game/file2.c +++ b/src/game/file2.c @@ -20,7 +20,10 @@ save_data saves[SAVESLOTMAX]; //CODE.bss:80069B60 -u32 dword_CODE_bss_80069B60; +/** + * The chr whose model is currently being built. Has to stay here to preserve ROM layout. + */ +ChrRecord *g_CurModelChr; //data //D:8002C510 @@ -31,8 +34,6 @@ s32 save_selected_bond[] = {BOND_BROSNAN,BOND_BROSNAN,BOND_BROSNAN,BOND_BROSNAN} #endif - - /** * * @@ -963,7 +964,7 @@ bool fileIsEgyptCompletedOn00ForFolder(int foldernum) */ bool fileIsCradleCompletedAnyFolder(void) { - int folder; + s32 folder; for (folder = FOLDER1; folder < MAX_FOLDER_COUNT; folder++) { @@ -983,7 +984,7 @@ bool fileIsCradleCompletedAnyFolder(void) */ bool check_aztec_completed_any_folder_secret_00(void) { - int folder; + s32 folder; for (folder = FOLDER1; folder < MAX_FOLDER_COUNT; folder++) { @@ -1003,7 +1004,7 @@ bool check_aztec_completed_any_folder_secret_00(void) */ bool fileIsEgyptCompletedOn00AnyFolder(void) { - int folder; + s32 folder; for (folder = FOLDER1; folder < MAX_FOLDER_COUNT; folder++) { diff --git a/src/game/file2.h b/src/game/file2.h index 3bba55e0..4be8d4d9 100644 --- a/src/game/file2.h +++ b/src/game/file2.h @@ -22,6 +22,7 @@ #define DEFAULT_OPTIONS (OPTION_AUTOAIM | OPTION_SIGHTONSCREEN | OPTION_LOOKAHEAD | OPTION_DISPLAYAMMO) +extern ChrRecord *g_CurModelChr; u8 fileGetBondForFolder(u32 folder); void fileValidateSaves(void); diff --git a/src/game/front.c b/src/game/front.c index 1722c60d..0ac962f2 100644 --- a/src/game/front.c +++ b/src/game/front.c @@ -11,6 +11,7 @@ #include #include #include +#include #include "bondview.h" #include "chr.h" #include "chr_b.h" @@ -21,6 +22,7 @@ #include "front.h" #include "image_bank.h" #include "lv.h" +#include "initanitable.h" #include "mp_weapon.h" #include "math_floor.h" #include "objective_status.h" @@ -45,6 +47,25 @@ #include "model.h" +/** + * Each character showing in the display cast screen lasts 3 seconds with a half second cross-fade + * and the camera velocity is tuned per refresh rate so its decay per second is the + * same on PAL (0.95 ^ (60/50) = 0.9403). + */ +#ifdef REFRESH_PAL +#define CAST_INTRO_LEN (50 * 3) +#define CAST_INTRO_FADE (50 / 2) +#define CAST_DAMP 0.940299988f +#define CAST_DAMP_COMP 0.0597000122f +#else +#define CAST_INTRO_LEN (60 * 3) +#define CAST_INTRO_FADE (60 / 2) +#define CAST_DAMP 0.94999999f +#define CAST_DAMP_COMP 0.050000012f +#endif +#define CAST_INTRO_FADEOUT (CAST_INTRO_LEN - CAST_INTRO_FADE + 1) +#define CAST_INTRO_LEN_F ((f32)CAST_INTRO_LEN) +#define CAST_INTRO_FADE_F ((f32)CAST_INTRO_FADE) struct BriefingDataSomething { @@ -52,57 +73,55 @@ struct BriefingDataSomething u16 enabled_difficulty; }; - struct BriefingData { u16 brief[4]; struct BriefingDataSomething objective[OBJECTIVES_MAX]; }; - // bss //CODE.bss:800695A0 -f32 flt_CODE_bss_800695A0; +f32 cast_camera_dist; //CODE.bss:800695A4 -f32 flt_CODE_bss_800695A4; +f32 cast_camera_dist_start; //CODE.bss:800695A8 -f32 flt_CODE_bss_800695A8; +f32 cast_camera_dist_end; //CODE.bss:800695AC -f32 flt_CODE_bss_800695AC; +f32 cast_camera_angle; //CODE.bss:800695B0 -f32 flt_CODE_bss_800695B0; +f32 cast_camera_angle_start; //CODE.bss:800695B4 -f32 flt_CODE_bss_800695B4; +f32 cast_camera_angle_end; //CODE.bss:800695B8 -f32 flt_CODE_bss_800695B8; +f32 cast_camera_height; //CODE.bss:800695BC -f32 flt_CODE_bss_800695BC; +f32 cast_camera_height_start; //CODE.bss:800695C0 -f32 flt_CODE_bss_800695C0; +f32 cast_camera_height_end; //CODE.bss:800695C4 -f32 flt_CODE_bss_800695C4; +f32 flt_CODE_bss_800695C4; // unused //CODE.bss:800695C8 -struct coord3d flt_CODE_bss_800695C8; +struct coord3d cast_target_smoothed; //CODE.bss:800695D4 -f32 flt_CODE_bss_800695D4; +f32 flt_CODE_bss_800695D4; // unused //CODE.bss:800695D8 -struct coord3d flt_CODE_bss_800695D8; +struct coord3d cast_target_accumulator; //CODE.bss:800695E4 -s32 bss_800695E4; +bool cast_camera_reset; //CODE.bss:800695E8 -struct coord3d flt_CODE_bss_800695E8; +struct coord3d cast_rootpos_smoothed; //CODE.bss:800695F4 f32 flt_CODE_bss_800695F4; //CODE.bss:800695F8 -struct coord3d flt_CODE_bss_800695F8; +struct coord3d cast_rootvel_smoothed; //CODE.bss:80069604 f32 flt_CODE_bss_80069604; //CODE.bss:80069608 -struct coord3d flt_CODE_bss_80069608; +struct coord3d cast_rootvel_accumulator; //CODE.bss:80069614 @@ -117,7 +136,7 @@ f32 ninLogoScale; //CODE.bss:8006961C f32 flt_CODE_bss_8006961C; //CODE.bss:80069620 -coord3d dword_CODE_bss_80069620[MAX_FOLDER_COUNT]; +coord3d folderpositions_camspace[MAX_FOLDER_COUNT]; //CODE.bss:80069650 u8 cheat_available[CHEAT_MAX]; @@ -166,7 +185,7 @@ s32 mp_char_prev_select_player[MAX_PLAYER_COUNT]; * Address 80069730 * EU .bss 80068690 */ -s32 dword_CODE_bss_80069730[MAX_PLAYER_COUNT]; +s32 mp_char_select_scroll_offset[MAX_PLAYER_COUNT]; //CODE.bss:80069740 bool player_has_selected_char[MAX_PLAYER_COUNT]; @@ -198,9 +217,9 @@ s32 highlight_enemy_reaction; //CODE.bss:80069798 s32 highlight_enemy_health; //CODE.bss:8006979C -s32 highlight_enemy_accuracy; -//CODE.bss:800697A0 s32 highlight_enemy_damage; +//CODE.bss:800697A0 +s32 highlight_enemy_accuracy; //CODE.bss:800697A4 s32 dword_CODE_bss_800697A4; @@ -413,40 +432,41 @@ struct rectbbox folder_option_COPY_bound = { 0 }; struct rectbbox folder_option_ERASE_bound = { 0 }; struct mission_folder_setup mission_folder_setup_entries[] = { - {"1", getStringID(LTITLE, TITLE_STR_120_ARK), 0, LEVELID_NONE, 0, MISSION_HEADER, -1, 0}, - {"i", getStringID(LTITLE, TITLE_STR_121_DAM), 0, LEVELID_DAM, 0, MISSION_PART, 0, "UbriefdamZ"}, - {"ii", getStringID(LTITLE, TITLE_STR_122_FAC), 0, LEVELID_FACILITY, 0, MISSION_PART, 1, "UbriefarkZ"}, - {"iii", getStringID(LTITLE, TITLE_STR_123_RUN), 0, LEVELID_RUNWAY, 0, MISSION_PART, 2, "UbriefrunZ"}, - {"2", getStringID(LTITLE, TITLE_STR_124_SEV), 0, LEVELID_NONE, 0, MISSION_HEADER, -1, 0}, - {"i", getStringID(LTITLE, TITLE_STR_125_SURF), 0, LEVELID_SURFACE, 0, MISSION_PART, 3, "UbriefsevxZ"}, - {"ii", getStringID(LTITLE, TITLE_STR_126_BUNK), 0, LEVELID_BUNKER1, 0, MISSION_PART, 4, "UbriefsevbunkerZ"}, - {"3", getStringID(LTITLE, TITLE_STR_127_KIRG), 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, - {"i", getStringID(LTITLE, TITLE_STR_128_SILO4), getStringID(LTITLE, TITLE_STR_129_SILO), LEVELID_SILO, 1, MISSION_PART, 5, "UbriefsiloZ"}, - {"4", getStringID(LTITLE, TITLE_STR_130_MONTE), 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, - {"i", getStringID(LTITLE, TITLE_STR_131_FRIG), 0, LEVELID_FRIGATE, 1, MISSION_PART, 6, "UbriefdestZ"}, - {"5", getStringID(LTITLE, TITLE_STR_124_SEV), 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, - {"i", getStringID(LTITLE, TITLE_STR_125_SURF), 0, LEVELID_SURFACE2, 1, MISSION_PART, 7, "UbriefsevxbZ"}, - {"ii", getStringID(LTITLE, TITLE_STR_126_BUNK), 0, LEVELID_BUNKER2, 1, MISSION_PART, 8, "UbriefsevbZ"}, - {"6", getStringID(LTITLE, TITLE_STR_132_STPETER), 0, LEVELID_NONE, 2, MISSION_HEADER, -1, 0}, - {"i", getStringID(LTITLE, TITLE_STR_133_STATPARK), getStringID(LTITLE, TITLE_STR_134_STAT), LEVELID_STATUE, 2, MISSION_PART, 9, "UbriefstatueZ"}, - {"ii", getStringID(LTITLE, TITLE_STR_135_MILARCH), getStringID(LTITLE, TITLE_STR_136_ARCH), LEVELID_ARCHIVES, 2, MISSION_PART, 0xA, "UbriefarchZ"}, - {"iii", getStringID(LTITLE, TITLE_STR_137_STREETS), 0, LEVELID_STREETS, 2, MISSION_PART, 0xB, "UbriefpeteZ"}, - {"iv", getStringID(LTITLE, TITLE_STR_138_DEPOT), 0, LEVELID_DEPOT, 2, MISSION_PART, 0xC, "UbriefdepoZ"}, - {"v", getStringID(LTITLE, TITLE_STR_139_TRAIN), 0, LEVELID_TRAIN, 2, MISSION_PART, 0xD, "UbrieftraZ"}, - {"7", getStringID(LTITLE, TITLE_STR_140_CUBA), 0, LEVELID_NONE, 3, MISSION_HEADER, -1, 0}, - {"i", getStringID(LTITLE, TITLE_STR_141_JUN), 0, LEVELID_JUNGLE, 3, MISSION_PART, 0xE, "UbriefjunZ"}, - {"ii", getStringID(LTITLE, TITLE_STR_142_CONCENTER), getStringID(LTITLE, TITLE_STR_143_CON), LEVELID_CONTROL, 3, MISSION_PART, 0xF, "UbriefcontrolZ"}, - {"iii", getStringID(LTITLE, TITLE_STR_144_WATERCAV), getStringID(LTITLE, TITLE_STR_145_CAV), LEVELID_CAVERNS, 3, MISSION_PART, 0x10, "UbriefcaveZ"}, - {"iv", getStringID(LTITLE, TITLE_STR_146_ANTENNA), getStringID(LTITLE, TITLE_STR_147_CRADLE), LEVELID_CRADLE, 3, MISSION_PART, 0x11, "UbriefcradZ"}, - {"8", getStringID(LTITLE, TITLE_STR_148_TEOTIHUACA), 0, LEVELID_NONE, 4, MISSION_HEADER, -1, 0}, - {"i", getStringID(LTITLE, TITLE_STR_149_AZTECCOMPLEX), getStringID(LTITLE, TITLE_STR_150_AZTEC), LEVELID_AZTEC, 4, MISSION_PART, 0x12, "UbriefaztZ"}, - {"9", getStringID(LTITLE, TITLE_STR_151_ELSAGHIRA), 0, LEVELID_NONE, 4, MISSION_HEADER, -1, 0}, - {"i", getStringID(LTITLE, TITLE_STR_152_EGYPTIANTEMPLE), getStringID(LTITLE, TITLE_STR_153_EGYPTIAN), LEVELID_EGYPT, 4, MISSION_PART, 0x13, "UbriefcrypZ"}, - {NULL, 0, 0, LEVELID_NONE, -1, MISSION_PART, -1, 0} + /* string_ptr folder_text_preset icon_text_preset stage_id unknown type mission_num briefing_name_ptr */ + {"1", getStringID(LTITLE, TITLE_STR_120_ARK) /* Arkangelsk */, 0, LEVELID_NONE, 0, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_121_DAM) /* Dam */, 0, LEVELID_DAM, 0, MISSION_PART, 0, "UbriefdamZ"}, + {"ii", getStringID(LTITLE, TITLE_STR_122_FAC) /* Facility */, 0, LEVELID_FACILITY, 0, MISSION_PART, 1, "UbriefarkZ"}, + {"iii", getStringID(LTITLE, TITLE_STR_123_RUN) /* Runway */, 0, LEVELID_RUNWAY, 0, MISSION_PART, 2, "UbriefrunZ"}, + {"2", getStringID(LTITLE, TITLE_STR_124_SEV) /* Severnaya */, 0, LEVELID_NONE, 0, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_125_SURF) /* Surface */, 0, LEVELID_SURFACE, 0, MISSION_PART, 3, "UbriefsevxZ"}, + {"ii", getStringID(LTITLE, TITLE_STR_126_BUNK) /* Bunker */, 0, LEVELID_BUNKER1, 0, MISSION_PART, 4, "UbriefsevbunkerZ"}, + {"3", getStringID(LTITLE, TITLE_STR_127_KIRG) /* Kirghizstan */, 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_128_SILO4) /* Launch Silo #4 */, getStringID(LTITLE, TITLE_STR_129_SILO) /* Silo */, LEVELID_SILO, 1, MISSION_PART, 5, "UbriefsiloZ"}, + {"4", getStringID(LTITLE, TITLE_STR_130_MONTE) /* Monte Carlo */, 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_131_FRIG) /* Frigate */, 0, LEVELID_FRIGATE, 1, MISSION_PART, 6, "UbriefdestZ"}, + {"5", getStringID(LTITLE, TITLE_STR_124_SEV) /* Severnaya */, 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_125_SURF) /* Surface */, 0, LEVELID_SURFACE2, 1, MISSION_PART, 7, "UbriefsevxbZ"}, + {"ii", getStringID(LTITLE, TITLE_STR_126_BUNK) /* Bunker */, 0, LEVELID_BUNKER2, 1, MISSION_PART, 8, "UbriefsevbZ"}, + {"6", getStringID(LTITLE, TITLE_STR_132_STPETER) /* St. Petersburg */, 0, LEVELID_NONE, 2, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_133_STATPARK) /* Statue Park */, getStringID(LTITLE, TITLE_STR_134_STAT) /* Statue */, LEVELID_STATUE, 2, MISSION_PART, 9, "UbriefstatueZ"}, + {"ii", getStringID(LTITLE, TITLE_STR_135_MILARCH) /* Military Archives */, getStringID(LTITLE, TITLE_STR_136_ARCH) /* Archives */, LEVELID_ARCHIVES, 2, MISSION_PART, 10, "UbriefarchZ"}, + {"iii", getStringID(LTITLE, TITLE_STR_137_STREETS) /* Streets */, 0, LEVELID_STREETS, 2, MISSION_PART, 11, "UbriefpeteZ"}, + {"iv", getStringID(LTITLE, TITLE_STR_138_DEPOT) /* Depot */, 0, LEVELID_DEPOT, 2, MISSION_PART, 12, "UbriefdepoZ"}, + {"v", getStringID(LTITLE, TITLE_STR_139_TRAIN) /* Train */, 0, LEVELID_TRAIN, 2, MISSION_PART, 13, "UbrieftraZ"}, + {"7", getStringID(LTITLE, TITLE_STR_140_CUBA) /* Cuba */, 0, LEVELID_NONE, 3, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_141_JUN) /* Jungle */, 0, LEVELID_JUNGLE, 3, MISSION_PART, 14, "UbriefjunZ"}, + {"ii", getStringID(LTITLE, TITLE_STR_142_CONCENTER) /* Control Center */, getStringID(LTITLE, TITLE_STR_143_CON) /* Control */, LEVELID_CONTROL, 3, MISSION_PART, 15, "UbriefcontrolZ"}, + {"iii", getStringID(LTITLE, TITLE_STR_144_WATERCAV) /* Water Caverns */, getStringID(LTITLE, TITLE_STR_145_CAV) /* Caverns */, LEVELID_CAVERNS, 3, MISSION_PART, 16, "UbriefcaveZ"}, + {"iv", getStringID(LTITLE, TITLE_STR_146_ANTENNA) /* Antenna Cradle */, getStringID(LTITLE, TITLE_STR_147_CRADLE) /* Cradle */, LEVELID_CRADLE, 3, MISSION_PART, 17, "UbriefcradZ"}, + {"8", getStringID(LTITLE, TITLE_STR_148_TEOTIHUACA) /* Teotihuaca'n */, 0, LEVELID_NONE, 4, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_149_AZTECCOMPLEX) /* Aztec Complex */, getStringID(LTITLE, TITLE_STR_150_AZTEC) /* Aztec */, LEVELID_AZTEC, 4, MISSION_PART, 18, "UbriefaztZ"}, + {"9", getStringID(LTITLE, TITLE_STR_151_ELSAGHIRA) /* el-Saghira */, 0, LEVELID_NONE, 4, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_152_EGYPTIANTEMPLE) /* Egyptian Temple */, getStringID(LTITLE, TITLE_STR_153_EGYPTIAN) /* Egyptian */, LEVELID_EGYPT, 4, MISSION_PART, 19, "UbriefcrypZ"}, + {NULL, 0, 0, LEVELID_NONE, -1, MISSION_PART, -1, 0} }; -struct FolderSelect unknown_folderselect_constructor = { 0x14, 0x14, 0x14 }; -struct FolderSelect unknown_folderselect_constructor_0 = { 0x32, 0x32, 0x32 }; +struct FolderSelectColour unknown_folderselect_constructor = { 0x14, 0x14, 0x14 }; +struct FolderSelectColour unknown_folderselect_constructor_0 = { 0x32, 0x32, 0x32 }; ModelRenderData unknown_folderselect = {NULL, @@ -737,26 +757,26 @@ s32 unlock_aim_sight = TRUE; u32 D_8002B560 = 0; s16 solo_target_time_array[20][3] = { - {0, 160, 0}, - {0, 0, 125}, - {300, 0, 0}, - {0, 210, 0}, - {0, 0, 240}, - {180, 0, 0}, - {0, 270, 0}, - {0, 0, 255}, - {90, 0, 0}, - {0, 195, 0}, - {0, 0, 80}, - {105, 0, 0}, - {0, 100, 0}, - {0, 0, 325}, - {225, 0, 0}, - {0, 600, 0}, - {0, 0, 570}, - {135, 0, 0}, - {0, 540, 0}, - {0, 0, 360} + {0, 160, 0}, // Dam + {0, 0, 125}, // Facility + {300, 0, 0}, // Runway + {0, 210, 0}, // Surface 1 + {0, 0, 240}, // Bunker 1 + {180, 0, 0}, // Silo + {0, 270, 0}, // Frigate + {0, 0, 255}, // Surface 2 + {90, 0, 0}, // Bunker 2 + {0, 195, 0}, // Statue + {0, 0, 80}, // Archives + {105, 0, 0}, // Streets + {0, 100, 0}, // Depot + {0, 0, 325}, // Train + {225, 0, 0}, // Jungle + {0, 600, 0}, // Control + {0, 0, 570}, // Caverns + {135, 0, 0}, // Cradle + {0, 540, 0}, // Aztec + {0, 0, 360} // Egyptian }; s32 totalunlockedcheats = 0; @@ -835,13 +855,14 @@ struct intro_animation intro_animation_table[] = { {0xFFFFFFFF, 0.0, 0.0, 0} }; -struct coord3d D_8002BA2C = { 0 }; +struct coord3d zeroCoord = { 0 }; #define INTRO_RANDOM_RIFLE_LEN 6 struct intro_random_rifles { PROP props[INTRO_RANDOM_RIFLE_LEN]; }; + struct intro_random_rifles random_rifles_in_intro = { PROP_CHRKALASH, PROP_CHRM16, @@ -856,6 +877,7 @@ struct intro_random_pistols { PROP props[INTRO_RANDOM_PISTO_LEN]; }; + struct intro_random_pistols random_pistols_in_intro = { PROP_CHRWPPK, PROP_CHRWPPKSIL, @@ -869,36 +891,35 @@ struct intro_random_pistols random_pistols_in_intro = { PROP_CHRGOLDEN }; +struct coord3d cast_camera_pos = { 0.0f, 0.0f, 1.0f }; // campos in constructor_menu18_displaycast is set to this, but is then immediately overwritten, so the values here have no effect. +struct coord3d cast_camera_target = { 0.0f, 0.0f, 0.0f }; +struct coord3d cast_camera_up = { 0.0f, 1.0f, 0.0f }; // Display cast character up vector -struct coord3d D_8002BA78 = { 0.0f, 0.0f, 1.0f }; -struct coord3d D_8002BA84 = { 0.0f, 0.0f, 0.0f }; -struct coord3d D_8002BA90 = { 0.0f, 1.0f, 0.0f }; +ModelRenderData cast_renderdata_default = { NULL, + TRUE, + 0x00000003, + NULL, -ModelRenderData D_8002BA9C = {NULL, - TRUE, - 0x00000003, - NULL, + NULL, + 0, + 0, + 0, - NULL, - 0, - 0, - 0, + 0, + 0, + 0, + 0, - 0, - 0, - 0, - 0, - - 0, - {0, 0, 0, 0}, - {0, 0, 0, 0}, - CULLMODE_BOTH}; + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; -struct coord3d D_8002BADC = { 0.0f, 40.0f, 25.0f }; +struct coord3d cast_camera_offset = { 0.0f, 40.0f, 25.0f }; // vec in constructor_menu18_displaycast is initialized to this, but then gets overwritten before it's read, so these values don't have any effect. -u32 D_8002BAE8 = 0; -u32 D_8002BAEC = 1; +u32 D_8002BAE8 = 0; // unused +u32 D_8002BAEC = 1; // unused u16 color_palette_entries_50_percent[] = {1, 0x1F, 0x3C1, 0x3DF, 0x7801, 0x781F, 0x7BC1, 0x7BDF}; @@ -943,8 +964,6 @@ void set_cursor_pos_difficulty(int difficulty); // end forward declarations. - - Gfx *frontPrintText(Gfx *gdl, s32 *x, s32 *y, s8 *text, s32 second_font_table, s32 first_font_table, s32 arg6, s32 view_x, s32 view_y, s32 arg9, s32 arga) { if (j_text_trigger != 0) @@ -983,9 +1002,6 @@ Gfx *frontPrintText(Gfx *gdl, s32 *x, s32 *y, s8 *text, s32 second_font_table, s } - - - s32 frontCheckIfCheatIsUnlocked(s32 cheat) { switch(cheat) @@ -1398,7 +1414,7 @@ void init_menu00_legalscreen(void) load_object_fill_header(PitemZ_entries[PROP_LEGALPAGE].header, PitemZ_entries[PROP_LEGALPAGE].filename, ptr_logo_and_walletbond_DL, 0x3c000, 0); modelCalculateRwDataLen(PitemZ_entries[PROP_LEGALPAGE].header); - logoinst = get_obj_instance_controller_for_header(PitemZ_entries[PROP_LEGALPAGE].header); + logoinst = modelmgrInstantiateModel(PitemZ_entries[PROP_LEGALPAGE].header); #ifdef DEBUG assert(logoinst); #endif @@ -1461,8 +1477,9 @@ void interface_menu00_legalscreen(void) } - - +/** + * Render a string of standard text on the legal screen e.g. "TWYCROSS BOARD OF GAME CLASSIFICATION" + */ Gfx *display_aligned_white_text_to_screen(Gfx *dl, s32 arg1, s32 arg2, s32 halign, s32 valign, u8 *text, s32 arg6, s32 arg7) { s32 sp4C; @@ -1475,220 +1492,65 @@ Gfx *display_aligned_white_text_to_screen(Gfx *dl, s32 arg1, s32 arg2, s32 halig textMeasure(&sp4C, &sp48, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); x = arg1 - ((s32) (halign * sp48) / 2); y = arg2 - ((s32) (valign * sp4C) / 2); + return textRender(dl, &x, &y, text, arg6, arg7, -1, viGetX(), viGetY(), 0, 0); } - - - -#ifdef NONMATCHING -/** - * https://decomp.me/scratch/hx7ye 99.27% - * - * decomp notes: - * compiles: yes - * stack resize: match - * instructions match: yes - * resgisters match: false - * - * decomp notes: match down to regalloc in final loop. - */ Gfx *constructor_menu00_legalscreen(Gfx *DL) { - s32 padding; - ModelRenderData spE4; + struct legal_screen_text *legal_text_end; + struct ModelRenderData renderdata; Mtxf *temp; - Mtxf spA0; + Mtxf lookatmtx; s32 i; u8 *txt; - Mtxf sp58; + Mtxf tmpmtx; struct legal_screen_text *legal_text_ptr; - spE4 = legalscreen_MRD; - - DL = insert_imageDL(DL); - matrix_4x4_set_lookat_target(&spA0, 0.0f, 0.0f, 4000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); - spE4.unk_matrix = &spA0; - spE4.mtxlist = (Mtxf*)dynAllocate(logoinst->obj->numMatrices << 6); - matrix_4x4_copy(&spA0, spE4.mtxlist); - logoinst->render_pos = spE4.mtxlist; + renderdata = legalscreen_MRD; + + DL = clear_framebuffer_black(DL); + + matrix_4x4_set_lookat_target(&lookatmtx, 0.0f, 0.0f, 4000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, legal_text_ptr->v_pos * 0.0f); + + renderdata.basemtx = &lookatmtx; + renderdata.mtxlist = (Mtxf *) dynAllocate(logoinst->obj->numMatrices << 6); + + matrix_4x4_copy(&lookatmtx, renderdata.mtxlist); + + logoinst->render_pos = (union RenderPosView *) renderdata.mtxlist; + modelUpdateNodeRelations(logoinst); - spE4.unk08 = 3; - spE4.unk04 = 0; - spE4.gdl = DL; - subdraw(&spE4, logoinst); - DL = spE4.gdl; - - for (i=0; iobj->numMatrices; i++) + + renderdata.flags = 3; + renderdata.zbufferenabled = 0; + renderdata.gdl = DL; + + subdraw(&renderdata, logoinst); + + DL = renderdata.gdl; + + for (i = 0; i < logoinst->obj->numMatrices; i++) { - // hack: source address steps by sizeof(Mtxf), but can't get that to match - matrix_4x4_copy(&((s8*)logoinst->render_pos)[i*0x40], &sp58); - matrix_4x4_f32_to_s32(&sp58, &((Mtxf*)logoinst->render_pos)[i]); + matrix_4x4_copy((Mtxf *)&((s8 *)logoinst->render_pos)[i * 0x40], &tmpmtx); + matrix_4x4_f32_to_s32(&tmpmtx, &((Mtxf *) logoinst->render_pos)[i]); } - + DL = microcode_constructor(DL); - - for (legal_text_ptr = &legalpage_text_array[0]; legal_text_ptr < &legalpage_text_array[12]; legal_text_ptr++) + + legal_text_ptr = legalpage_text_array; + legal_text_end = (struct legal_screen_text *)&legalscreen_MRD; + + do { - txt = langGet(legal_text_ptr->txtID); - - DL = display_aligned_white_text_to_screen( - DL, - legal_text_ptr->h_pos, - legal_text_ptr->v_pos, - legal_text_ptr->halign, - legal_text_ptr->valign, - txt, - ptrFontZurichBoldChars, - ptrFontZurichBold); - + DL = display_aligned_white_text_to_screen(DL, legal_text_ptr->h_pos, legal_text_ptr->v_pos, legal_text_ptr->halign, legal_text_ptr->valign, langGet(legal_text_ptr->txtID), ptrFontZurichBoldChars, ptrFontZurichBold); + legal_text_ptr++; } - + while (legal_text_ptr < legal_text_end); + return DL; } -#else -GLOBAL_ASM( -.text -glabel constructor_menu00_legalscreen -/* 03F410 7F00A8E0 27BDFED8 */ addiu $sp, $sp, -0x128 -/* 03F414 7F00A8E4 AFB10034 */ sw $s1, 0x34($sp) -/* 03F418 7F00A8E8 3C0E8003 */ lui $t6, %hi(legalscreen_MRD) -/* 03F41C 7F00A8EC 27B100E4 */ addiu $s1, $sp, 0xe4 -/* 03F420 7F00A8F0 AFB40040 */ sw $s4, 0x40($sp) -/* 03F424 7F00A8F4 25CEAABC */ addiu $t6, %lo(legalscreen_MRD) # addiu $t6, $t6, -0x5544 -/* 03F428 7F00A8F8 0080A025 */ move $s4, $a0 -/* 03F42C 7F00A8FC AFBF0044 */ sw $ra, 0x44($sp) -/* 03F430 7F00A900 AFB3003C */ sw $s3, 0x3c($sp) -/* 03F434 7F00A904 AFB20038 */ sw $s2, 0x38($sp) -/* 03F438 7F00A908 AFB00030 */ sw $s0, 0x30($sp) -/* 03F43C 7F00A90C 25D9003C */ addiu $t9, $t6, 0x3c -/* 03F440 7F00A910 02204025 */ move $t0, $s1 -.L7F00A914: -/* 03F444 7F00A914 8DC10000 */ lw $at, ($t6) -/* 03F448 7F00A918 25CE000C */ addiu $t6, $t6, 0xc -/* 03F44C 7F00A91C 2508000C */ addiu $t0, $t0, 0xc -/* 03F450 7F00A920 AD01FFF4 */ sw $at, -0xc($t0) -/* 03F454 7F00A924 8DC1FFF8 */ lw $at, -8($t6) -/* 03F458 7F00A928 AD01FFF8 */ sw $at, -8($t0) -/* 03F45C 7F00A92C 8DC1FFFC */ lw $at, -4($t6) -/* 03F460 7F00A930 15D9FFF8 */ bne $t6, $t9, .L7F00A914 -/* 03F464 7F00A934 AD01FFFC */ sw $at, -4($t0) -/* 03F468 7F00A938 8DC10000 */ lw $at, ($t6) -/* 03F46C 7F00A93C 02802025 */ move $a0, $s4 -/* 03F470 7F00A940 0FC07034 */ jal insert_imageDL -/* 03F474 7F00A944 AD010000 */ sw $at, ($t0) -/* 03F478 7F00A948 44800000 */ mtc1 $zero, $f0 -/* 03F47C 7F00A94C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 03F480 7F00A950 44812000 */ mtc1 $at, $f4 -/* 03F484 7F00A954 27B000A0 */ addiu $s0, $sp, 0xa0 -/* 03F488 7F00A958 44050000 */ mfc1 $a1, $f0 -/* 03F48C 7F00A95C 44060000 */ mfc1 $a2, $f0 -/* 03F490 7F00A960 0040A025 */ move $s4, $v0 -/* 03F494 7F00A964 02002025 */ move $a0, $s0 -/* 03F498 7F00A968 3C07457A */ lui $a3, 0x457a -/* 03F49C 7F00A96C E7A00010 */ swc1 $f0, 0x10($sp) -/* 03F4A0 7F00A970 E7A00014 */ swc1 $f0, 0x14($sp) -/* 03F4A4 7F00A974 E7A00018 */ swc1 $f0, 0x18($sp) -/* 03F4A8 7F00A978 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 03F4AC 7F00A97C E7A00024 */ swc1 $f0, 0x24($sp) -/* 03F4B0 7F00A980 0FC165A5 */ jal matrix_4x4_set_lookat_target -/* 03F4B4 7F00A984 E7A40020 */ swc1 $f4, 0x20($sp) -/* 03F4B8 7F00A988 3C138003 */ lui $s3, %hi(logoinst) -/* 03F4BC 7F00A98C 2673A958 */ addiu $s3, %lo(logoinst) # addiu $s3, $s3, -0x56a8 -/* 03F4C0 7F00A990 8E690000 */ lw $t1, ($s3) -/* 03F4C4 7F00A994 AFB000E4 */ sw $s0, 0xe4($sp) -/* 03F4C8 7F00A998 8D2A0008 */ lw $t2, 8($t1) -/* 03F4CC 7F00A99C 8544000E */ lh $a0, 0xe($t2) -/* 03F4D0 7F00A9A0 00045980 */ sll $t3, $a0, 6 -/* 03F4D4 7F00A9A4 0FC2F5C5 */ jal dynAllocate -/* 03F4D8 7F00A9A8 01602025 */ move $a0, $t3 -/* 03F4DC 7F00A9AC AFA200F4 */ sw $v0, 0xf4($sp) -/* 03F4E0 7F00A9B0 02002025 */ move $a0, $s0 -/* 03F4E4 7F00A9B4 0FC16008 */ jal matrix_4x4_copy -/* 03F4E8 7F00A9B8 00402825 */ move $a1, $v0 -/* 03F4EC 7F00A9BC 8FAC00F4 */ lw $t4, 0xf4($sp) -/* 03F4F0 7F00A9C0 8E6D0000 */ lw $t5, ($s3) -/* 03F4F4 7F00A9C4 ADAC000C */ sw $t4, 0xc($t5) -/* 03F4F8 7F00A9C8 0FC1BBF1 */ jal modelUpdateNodeRelations -/* 03F4FC 7F00A9CC 8E640000 */ lw $a0, ($s3) -/* 03F500 7F00A9D0 24180003 */ li $t8, 3 -/* 03F504 7F00A9D4 AFB800EC */ sw $t8, 0xec($sp) -/* 03F508 7F00A9D8 AFA000E8 */ sw $zero, 0xe8($sp) -/* 03F50C 7F00A9DC AFB400F0 */ sw $s4, 0xf0($sp) -/* 03F510 7F00A9E0 02202025 */ move $a0, $s1 -/* 03F514 7F00A9E4 0FC1D1A1 */ jal subdraw -/* 03F518 7F00A9E8 8E650000 */ lw $a1, ($s3) -/* 03F51C 7F00A9EC 8E620000 */ lw $v0, ($s3) -/* 03F520 7F00A9F0 8FB400F0 */ lw $s4, 0xf0($sp) -/* 03F524 7F00A9F4 00008025 */ move $s0, $zero -/* 03F528 7F00A9F8 8C4F0008 */ lw $t7, 8($v0) -/* 03F52C 7F00A9FC 00008825 */ move $s1, $zero -/* 03F530 7F00AA00 27B20058 */ addiu $s2, $sp, 0x58 -/* 03F534 7F00AA04 85F9000E */ lh $t9, 0xe($t7) -/* 03F538 7F00AA08 1B200013 */ blez $t9, .L7F00AA58 -/* 03F53C 7F00AA0C 00000000 */ nop -/* 03F540 7F00AA10 8C4E000C */ lw $t6, 0xc($v0) -.L7F00AA14: -/* 03F544 7F00AA14 02402825 */ move $a1, $s2 -/* 03F548 7F00AA18 0FC16008 */ jal matrix_4x4_copy -/* 03F54C 7F00AA1C 01D12021 */ addu $a0, $t6, $s1 -/* 03F550 7F00AA20 8E680000 */ lw $t0, ($s3) -/* 03F554 7F00AA24 00105180 */ sll $t2, $s0, 6 -/* 03F558 7F00AA28 02402025 */ move $a0, $s2 -/* 03F55C 7F00AA2C 8D09000C */ lw $t1, 0xc($t0) -/* 03F560 7F00AA30 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 03F564 7F00AA34 012A2821 */ addu $a1, $t1, $t2 -/* 03F568 7F00AA38 8E620000 */ lw $v0, ($s3) -/* 03F56C 7F00AA3C 26100001 */ addiu $s0, $s0, 1 -/* 03F570 7F00AA40 26310040 */ addiu $s1, $s1, 0x40 -/* 03F574 7F00AA44 8C4B0008 */ lw $t3, 8($v0) -/* 03F578 7F00AA48 856C000E */ lh $t4, 0xe($t3) -/* 03F57C 7F00AA4C 020C082A */ slt $at, $s0, $t4 -/* 03F580 7F00AA50 5420FFF0 */ bnezl $at, .L7F00AA14 -/* 03F584 7F00AA54 8C4E000C */ lw $t6, 0xc($v0) -.L7F00AA58: -/* 03F588 7F00AA58 0FC2B366 */ jal microcode_constructor -/* 03F58C 7F00AA5C 02802025 */ move $a0, $s4 -/* 03F590 7F00AA60 3C108003 */ lui $s0, %hi(legalpage_text_array) -/* 03F594 7F00AA64 3C118003 */ lui $s1, %hi(legalscreen_MRD) -/* 03F598 7F00AA68 3C138004 */ lui $s3, %hi(ptrFontZurichBold) -/* 03F59C 7F00AA6C 3C128004 */ lui $s2, %hi(ptrFontZurichBoldChars) -/* 03F5A0 7F00AA70 0040A025 */ move $s4, $v0 -/* 03F5A4 7F00AA74 2610A9CC */ addiu $s0, %lo(legalpage_text_array) # addiu $s0, $s0, -0x5634 -/* 03F5A8 7F00AA78 2631AABC */ addiu $s1, %lo(legalscreen_MRD) # addiu $s1, $s1, -0x5544 -/* 03F5AC 7F00AA7C 26520EB8 */ addiu $s2, %lo(ptrFontZurichBoldChars) # addiu $s2, $s2, 0xeb8 -/* 03F5B0 7F00AA80 26730EB4 */ addiu $s3, %lo(ptrFontZurichBold) # addiu $s3, $s3, 0xeb4 -.L7F00AA84: -/* 03F5B4 7F00AA84 0FC30776 */ jal langGet -/* 03F5B8 7F00AA88 96040010 */ lhu $a0, 0x10($s0) -/* 03F5BC 7F00AA8C 8E0D000C */ lw $t5, 0xc($s0) -/* 03F5C0 7F00AA90 8E050000 */ lw $a1, ($s0) -/* 03F5C4 7F00AA94 8E060004 */ lw $a2, 4($s0) -/* 03F5C8 7F00AA98 8E070008 */ lw $a3, 8($s0) -/* 03F5CC 7F00AA9C 8E580000 */ lw $t8, ($s2) -/* 03F5D0 7F00AAA0 8E6F0000 */ lw $t7, ($s3) -/* 03F5D4 7F00AAA4 AFA20014 */ sw $v0, 0x14($sp) -/* 03F5D8 7F00AAA8 02802025 */ move $a0, $s4 -/* 03F5DC 7F00AAAC AFAD0010 */ sw $t5, 0x10($sp) -/* 03F5E0 7F00AAB0 AFB80018 */ sw $t8, 0x18($sp) -/* 03F5E4 7F00AAB4 0FC029F9 */ jal display_aligned_white_text_to_screen -/* 03F5E8 7F00AAB8 AFAF001C */ sw $t7, 0x1c($sp) -/* 03F5EC 7F00AABC 26100014 */ addiu $s0, $s0, 0x14 -/* 03F5F0 7F00AAC0 0211082B */ sltu $at, $s0, $s1 -/* 03F5F4 7F00AAC4 1420FFEF */ bnez $at, .L7F00AA84 -/* 03F5F8 7F00AAC8 0040A025 */ move $s4, $v0 -/* 03F5FC 7F00AACC 8FBF0044 */ lw $ra, 0x44($sp) -/* 03F600 7F00AAD0 8FB00030 */ lw $s0, 0x30($sp) -/* 03F604 7F00AAD4 8FB10034 */ lw $s1, 0x34($sp) -/* 03F608 7F00AAD8 8FB20038 */ lw $s2, 0x38($sp) -/* 03F60C 7F00AADC 8FB3003C */ lw $s3, 0x3c($sp) -/* 03F610 7F00AAE0 8FB40040 */ lw $s4, 0x40($sp) -/* 03F614 7F00AAE4 03E00008 */ jr $ra -/* 03F618 7F00AAE8 27BD0128 */ addiu $sp, $sp, 0x128 -) -#endif - void reset_menutimer(void) { @@ -1723,7 +1585,7 @@ void interface_menu17_switchscreens(void) Gfx * constructor_menu17_switchscreens(Gfx * DL) { - return insert_imageDL(DL); + return clear_framebuffer_black(DL); } @@ -1741,7 +1603,7 @@ void init_menu01_nintendo(void) pos = nintendologo_pos; load_object_fill_header(PitemZ_entries[PROP_NINTENDOLOGO].header, PitemZ_entries[PROP_NINTENDOLOGO].filename, ptr_logo_and_walletbond_DL, 0x3c000, 0); modelCalculateRwDataLen(PitemZ_entries[PROP_NINTENDOLOGO].header); - logoinst = get_obj_instance_controller_for_header(PitemZ_entries[PROP_NINTENDOLOGO].header); + logoinst = modelmgrInstantiateModel(PitemZ_entries[PROP_NINTENDOLOGO].header); modelSetScale(logoinst, 1.0f); setsuboffset(logoinst, &pos); musicTrack1Play(M_INTROSWOOSH); @@ -1807,7 +1669,7 @@ Gfx *constructor_menu01_nintendo(Gfx *DL) ninlogo = nintendologo_MRD; - DL = insert_imageDL(DL); + DL = clear_framebuffer_black(DL); // Lights macro? These need to be on one line. gSPNumLights(DL++, 1); \ @@ -1867,7 +1729,7 @@ Gfx *constructor_menu01_nintendo(Gfx *DL) matrix_4x4_copy(&tmpMtx, &ninlogoMtxf); } - ninlogo.unk_matrix = &ninlogoMtxf; + ninlogo.basemtx = &ninlogoMtxf; ninlogo.mtxlist = dynAllocate(logoinst->obj->numMatrices << 6); @@ -2012,7 +1874,7 @@ void init_menu04_goldeneyelogo(void) pos = goldeneyelogo_pos; load_object_fill_header(PitemZ_entries[PROP_GOLDENEYELOGO].header, PitemZ_entries[PROP_GOLDENEYELOGO].filename, ptr_logo_and_walletbond_DL, 0x3c000, 0); modelCalculateRwDataLen(PitemZ_entries[PROP_GOLDENEYELOGO].header); - logoinst = get_obj_instance_controller_for_header(PitemZ_entries[PROP_GOLDENEYELOGO].header); + logoinst = modelmgrInstantiateModel(PitemZ_entries[PROP_GOLDENEYELOGO].header); #ifdef DEBUG assert(logoinst); #endif @@ -2085,7 +1947,7 @@ Gfx *constructor_menu04_goldeneyelogo(Gfx *DL) DL = viSetFillColor(DL, 0, 0, 0); DL = viFillScreen(DL); - logoLookAt = (LookAt *)dynAllocate7F0BD6F8(2); + logoLookAt = (LookAt *)dynAllocateLights(2); guLookAtReflect(&logoReflectMtx, logoLookAt, 0.0f, 0.0f, 4000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); // Lights macro? These need to be on one line. @@ -2097,7 +1959,7 @@ Gfx *constructor_menu04_goldeneyelogo(Gfx *DL) gSPLookAt(DL++, logoLookAt); matrix_4x4_set_lookat_target(&logoMatrix, 0.0f, 0.0f, 3000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); - gelogo.unk_matrix = &logoMatrix; + gelogo.basemtx = &logoMatrix; gelogo.mtxlist = dynAllocate(logoinst->obj->numMatrices << 6); matrix_scalar_multiply(1.2f, logoMatrix.m[0]); @@ -2157,8 +2019,9 @@ void set_item_visibility_in_objinstance(Model* objinstance, s32 item, s32 mode) { if (objinstance->obj->Switches[item] != NULL) { - struct ModelRoData_HeaderRecord *node = modelGetNodeRwData(objinstance, objinstance->obj->Switches[item]); - node->ModelType = mode; + ModelRwData_SwitchRecord *rwdata = &modelGetNodeRwData(objinstance, objinstance->obj->Switches[item])->Switch; + + rwdata->visible = mode; } } @@ -2215,7 +2078,7 @@ void load_walletbond(void) for (i = FOLDER1; i < MAX_FOLDER_COUNT; i++) { - walletinst[i] = get_aircraft_obj_instance_controller(PitemZ_entries[PROP_WALLETBOND].header); + walletinst[i] = modelmgrInstantiateModelWithAnim(PitemZ_entries[PROP_WALLETBOND].header); #ifdef DEBUG assert(walletinst[i]); #endif @@ -2323,25 +2186,30 @@ void toggle_deletion_menu_for_folder(int index) { struct coord2d local_8; - transform3Dto2DCoords(&dword_CODE_bss_80069620[index],&local_8); + transform3Dto2DCoords(&folderpositions_camspace[index],&local_8); cursor_h_pos = local_8.x + -1.0f; cursor_v_pos = local_8.y + 20.0f; } - - - - -// address 0x7F00BBCC NTSC +/** + * Address: 7F00BBCC + * + * Tick function for the file folder select screen. Rebuild's each folder model's render matrix + * then handles input. Also keeps track of the 30 second idle timeout for going back to the legal screen. + */ s32 interface_menu05_fileselect(void) { - s32 i1; - s32 i2; - Mtxf spC8; - Mtxf sp88; - struct coord3d *sp54; + s32 walletnum; + s32 foldernum; + Mtxf lookatmtx; + Mtxf walletmtx; + struct coord3d *folderpos; + /** + * Accumulate the menu timer if there's been no button inputs and no more than marginal stick input. + * The menu timer is checked at the end of this function to determine if we should switch to the legal screen. + */ if (((((joyGetButtonsPressedThisFrame(PLAYER_1, ANY_BUTTON) != 0) || (joyGetStickX(0) < -5)) || (joyGetStickX(0) >= 6)) || (joyGetStickY(0) < -5)) || (joyGetStickY(0) >= 6)) { g_MenuTimer = 0; @@ -2351,32 +2219,32 @@ s32 interface_menu05_fileselect(void) g_MenuTimer += g_ClockTimer; } - viSetFovY(60.0f); - viSetAspect(1.3333334f); + viSetFovY(FOV_Y_F); + viSetAspect(ASPECT_RATIO_SD); viSetZRange(100.0f, 10000.0f); viSetUseZBuf(0); - for (i1 = 0; i1 < 4; i1++) + for (walletnum = 0; walletnum < MAX_FOLDER_COUNT; walletnum++) { - sp54 = &folderpositions[i1]; + folderpos = &folderpositions[walletnum]; - matrix_4x4_set_lookat_target(&spC8, 0.0f, 0.0f, 4000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); - matrix_4x4_set_identity_and_position(sp54, &sp88); - matrix_scalar_multiply(0.37f, (f32*)&sp88); - matrix_4x4_multiply_in_place(&spC8, &sp88); + matrix_4x4_set_lookat_target(&lookatmtx, 0.0f, 0.0f, 4000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); + matrix_4x4_set_identity_and_position(folderpos, &walletmtx); + matrix_scalar_multiply(0.37f, (f32*)&walletmtx); + matrix_4x4_multiply_in_place(&lookatmtx, &walletmtx); - walletinst[i1]->render_pos = dynAllocate(walletinst[i1]->obj->numMatrices << 6); - matrix_4x4_copy(&sp88, &walletinst[i1]->render_pos->pos); + walletinst[walletnum]->render_pos = dynAllocate(walletinst[walletnum]->obj->numMatrices << 6); + matrix_4x4_copy(&walletmtx, &walletinst[walletnum]->render_pos->pos); - dword_CODE_bss_80069620[i1].f[0] = walletinst[i1]->render_pos->pos.m[3][0]; - dword_CODE_bss_80069620[i1].f[1] = walletinst[i1]->render_pos->pos.m[3][1]; - dword_CODE_bss_80069620[i1].f[2] = walletinst[i1]->render_pos->pos.m[3][2]; + folderpositions_camspace[walletnum].f[0] = walletinst[walletnum]->render_pos->pos.m[3][0]; + folderpositions_camspace[walletnum].f[1] = walletinst[walletnum]->render_pos->pos.m[3][1]; + folderpositions_camspace[walletnum].f[2] = walletinst[walletnum]->render_pos->pos.m[3][2]; - disable_all_switches(walletinst[i1]); + disable_all_switches(walletinst[walletnum]); - select_load_bond_picture(walletinst[i1], fileGetBondForFolder(i1)); - set_item_visibility_in_objinstance(walletinst[i1], 0xE, 1); - set_item_visibility_in_objinstance(walletinst[i1], 0xD, 1); + select_load_bond_picture(walletinst[walletnum], fileGetBondForFolder(walletnum)); + set_item_visibility_in_objinstance(walletinst[walletnum], 0xE, 1); + set_item_visibility_in_objinstance(walletinst[walletnum], 0xD, 1); } if (selected_folder_num >= FOLDER1) @@ -2397,12 +2265,12 @@ s32 interface_menu05_fileselect(void) if (folder_selected_for_deletion >= 0) { - if ((joyGetButtonsPressedThisFrame(0, 0x222U) != 0) && (folder_selected_for_deletion_choice == 0)) + if ((joyGetButtonsPressedThisFrame(PLAYER_1, L_JPAD | L_TRIG | L_CBUTTONS) != 0) && (folder_selected_for_deletion_choice == 0)) { folder_selected_for_deletion_choice = 1; sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, OPTION_CLICK2_SFX, NULL); } - else if ((joyGetButtonsPressedThisFrame(0, 0x111U) != 0) && (folder_selected_for_deletion_choice != 0)) + else if ((joyGetButtonsPressedThisFrame(PLAYER_1, R_JPAD | R_TRIG | R_CBUTTONS) != 0) && (folder_selected_for_deletion_choice != 0)) { folder_selected_for_deletion_choice = 0; sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, OPTION_CLICK2_SFX, NULL); @@ -2417,7 +2285,7 @@ s32 interface_menu05_fileselect(void) folder_selected_for_deletion_choice = 0; sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, OPTION_CLICK2_SFX, NULL); } - if (joyGetButtonsPressedThisFrame(0, A_BUTTON | Z_TRIG | START_BUTTON) != 0) + if (joyGetButtonsPressedThisFrame(PLAYER_1, A_BUTTON | Z_TRIG | START_BUTTON) != 0) { if (folder_selected_for_deletion_choice == 0) { @@ -2431,7 +2299,7 @@ s32 interface_menu05_fileselect(void) toggle_deletion_menu_for_folder(folder_selected_for_deletion); folder_selected_for_deletion = -1; } - else if (joyGetButtonsPressedThisFrame(0, B_BUTTON) != 0) + else if (joyGetButtonsPressedThisFrame(PLAYER_1, B_BUTTON) != 0) { toggle_deletion_menu_for_folder(folder_selected_for_deletion); folder_selected_for_deletion = -1; @@ -2440,49 +2308,49 @@ s32 interface_menu05_fileselect(void) } else { - for (i2 = FOLDER1; i2 < MAX_FOLDER_COUNT; i2++) + for (foldernum = FOLDER1; foldernum < MAX_FOLDER_COUNT; foldernum++) { - f32 sp80; - f32 sp7C; - f32 sp78; - f32 sp74; + f32 xmax; + f32 xmin; + f32 ymax; + f32 ymin; - struct rectbbox sp64; + struct rectbbox folderbbox; - LEVEL_SOLO_SEQUENCE sp60; - DIFFICULTY sp5C; + LEVEL_SOLO_SEQUENCE higheststage; + DIFFICULTY highestdifficulty; - sub_GAME_7F03F90C(walletinst[i2], &sp80, &sp7C, &sp78, &sp74); - sub_GAME_7F03F948(&dword_CODE_bss_80069620[i2], &sp7C, &sp74, &sp64.right, &sp64.left); + modelGetXYExtents(walletinst[foldernum], &xmax, &xmin, &ymax, &ymin); + projectRectCornersTo2D(&folderpositions_camspace[foldernum], &xmin, &ymin, &folderbbox.right, &folderbbox.left); - if ((sp64.right <= cursor_h_pos) - && (cursor_h_pos <= sp64.left) - && (sp64.down <= cursor_v_pos) - && (cursor_v_pos <= sp64.up)) + if ((folderbbox.right <= cursor_h_pos) + && (cursor_h_pos <= folderbbox.left) + && (folderbbox.down <= cursor_v_pos) + && (cursor_v_pos <= folderbbox.up)) { - fileGetHighestStageDifficultyCompletedForFolder(i2, &sp60, &sp5C); + fileGetHighestStageDifficultyCompletedForFolder(foldernum, &higheststage, &highestdifficulty); #ifdef DEBUG - osSyncPrintf("selected file %d\n", i2); + osSyncPrintf("selected file %d\n", foldernum); #endif - if (joyGetButtonsPressedThisFrame(0, A_BUTTON | Z_TRIG | START_BUTTON) != 0) + if (joyGetButtonsPressedThisFrame(PLAYER_1, A_BUTTON | Z_TRIG | START_BUTTON) != 0) { if (folder_selection_screen_option_icon == 0) { - selected_folder_num = i2; + selected_folder_num = foldernum; sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, PAPER_TURN_SFX, NULL); } else if (folder_selection_screen_option_icon == 1) { - fileCopyFolderToFirstFree(i2); + fileCopyFolderToFirstFree(foldernum); folder_selection_screen_option_icon = 0; sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, COPY_FILE_SFX, NULL); } else if (folder_selection_screen_option_icon == 2) { - if ((sp60 >= SP_LEVEL_DAM) && (sp5C >= DIFFICULTY_AGENT)) + if ((higheststage >= SP_LEVEL_DAM) && (highestdifficulty >= DIFFICULTY_AGENT)) { - folder_selected_for_deletion = i2; + folder_selected_for_deletion = foldernum; folder_selected_for_deletion_choice = 1; } @@ -2495,7 +2363,7 @@ s32 interface_menu05_fileselect(void) } } - if (joyGetButtonsPressedThisFrame(0, A_BUTTON | Z_TRIG | START_BUTTON) != 0) + if (joyGetButtonsPressedThisFrame(PLAYER_1, A_BUTTON | Z_TRIG | START_BUTTON) != 0) { if ((folder_option_COPY_bound.left <= cursor_h_pos) && (cursor_h_pos <= folder_option_COPY_bound.right) @@ -2519,7 +2387,7 @@ s32 interface_menu05_fileselect(void) sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, GUN_M60AMMGUN_3_SFX, NULL); } } - else if ((joyGetButtonsPressedThisFrame(0, B_BUTTON) != 0) + else if ((joyGetButtonsPressedThisFrame(PLAYER_1, B_BUTTON) != 0) && (folder_selection_screen_option_icon != 0)) { folder_selection_screen_option_icon = 0; @@ -2537,6 +2405,7 @@ s32 interface_menu05_fileselect(void) return; } + // Change to the legal screen if 30 seconds of no input have elapsed #if defined(VERSION_EU) if (g_MenuTimer >= 1501) // PAL (50fps): 30 seconds + 1 frame #else @@ -2548,7 +2417,6 @@ s32 interface_menu05_fileselect(void) } - char* get_ptr_difficulty_name(s32 difficulty) { char* text = NULL; @@ -2571,38 +2439,48 @@ char* get_ptr_difficulty_name(s32 difficulty) } - - -// Warning: The declaration of spD0 is likely incorrect, if this if this function is modified -// make sure to extend spD0 to avoid overflow. +/** + * Address: 7F00C408 + * + * Render the file folder select screen. That includes the background texture, four 3D wallet models, the progress text written on them, + * the crosshair cursor, and the "SELECT FILE", "Copy", and "Erase" text and icons. + * + * The declaration of difficultytext (spD0) is likely incorrect, if this function is modified + * make sure to extend difficultytext to avoid overflow. + */ Gfx *constructor_menu05_fileselect(Gfx *DL) { - s32 sp1B4; - struct FolderSelect sp1A8; - struct FolderSelect sp19C; + s32 foldernum; + struct FolderSelectColour topcolour; + struct FolderSelectColour bottomcolour; s32 j; s32 i; u8 *langp; - s32 var_s2_2; - ModelRenderData sp14C; - s32 var_s1_2; - Mtxf sp108; - f32 temp_f4; - struct point2d spFC; - struct point2d spF4; - LEVEL_SOLO_SEQUENCE spF0; - DIFFICULTY spEC; - struct coord2d spE4; + s32 chapterindex; // index of the chapter (MISSION_HEADER) row in mission_folder_setup_entries + ModelRenderData renderdata; + s32 missionindex; // index of the mission (MISSION_PART) row in mission_folder_setup_entries + Mtxf mtx; + f32 folderx; + struct point2d textpos; + struct point2d textsize; + LEVEL_SOLO_SEQUENCE higheststage; + DIFFICULTY highestdifficulty; + struct coord2d folderpos2d; // folder position projected to screen space - sp1A8 = unknown_folderselect_constructor; - sp19C = unknown_folderselect_constructor_0; + topcolour = unknown_folderselect_constructor; + bottomcolour = unknown_folderselect_constructor_0; - DL = insert_imageDL(DL); + /** + * The background image doesn't fully cover the screen so it's necessary to clear the back framebuffer to opaque black. + * This creates the impression of the folder menu having a black border. + */ + DL = clear_framebuffer_black(DL); gDPSetCombineLERP(DL++, TEXEL0, PRIMITIVE, ENV_ALPHA, PRIMITIVE, 0, 0, 0, PRIMITIVE, TEXEL0, PRIMITIVE, ENV_ALPHA, PRIMITIVE, 0, 0, 0, PRIMITIVE); gDPSetEnvColor(DL++, 0xFF, 0xFF, 0xFF, 0x14); - DL = sub_GAME_7F007CC8(DL, (s32) floorFloat(((f32) viGetX() * -80.0f) / 1280.0f), &sp1A8, &sp19C); + // Render the gun barrel background image. + DL = titleRenderFolderMenuBackground(DL, (s32) floorFloat(((f32) viGetX() * -80.0f) / 1280.0f), &topcolour, &bottomcolour); gSPDisplayList(DL++, &dlBasicGeometry); gSPDisplayList(DL++, &dlFastPipelineSetup); @@ -2610,24 +2488,21 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) for (j = 3; j >= 0; j--) { // struct copy - sp14C = unknown_folderselect; + renderdata = unknown_folderselect; - sp14C.flags = 3; - sp14C.zbufferenabled = FALSE; - sp14C.gdl = DL; + renderdata.flags = 3; + renderdata.zbufferenabled = FALSE; + renderdata.gdl = DL; - subdraw(&sp14C, walletinst[j]); + // Render the folder wall model. + subdraw(&renderdata, walletinst[j]); - DL = sp14C.gdl; + DL = renderdata.gdl; for (i=0; i < walletinst[j]->obj->numMatrices; i++) { - // hack: source address steps by sizeof(Mtxf), but can't get that to match - matrix_4x4_copy( - (Mtxf*)&((s8*)walletinst[j]->render_pos)[i*0x40], - &sp108); - - matrix_4x4_f32_to_s32(&sp108, &((Mtxf*)walletinst[j]->render_pos)[i]); + matrix_4x4_copy((Mtxf*)&((s8*)walletinst[j]->render_pos)[i * sizeof(Mtxf)], &mtx); + matrix_4x4_f32_to_s32(&mtx, &((Mtxf*)walletinst[j]->render_pos)[i]); } } @@ -2635,202 +2510,198 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) DL = microcode_constructor(DL); setTextSpacingInverted(0); - for (sp1B4 = FOLDER1; sp1B4 < MAX_FOLDER_COUNT; sp1B4++) + for (foldernum = FOLDER1; foldernum < MAX_FOLDER_COUNT; foldernum++) { - // HACK: - char spD0[4]; // this needs to be at least 14 characters. - char spBC[18]; + char difficultytext[4]; // spD0 + char missiontext[18]; // spBC: "Mission .\n" s32 padding3; - struct coord3d * sp74; + struct coord3d * folderworldpos; - sp74 = &dword_CODE_bss_80069620[sp1B4]; + folderworldpos = &folderpositions_camspace[foldernum]; - transform3Dto2DCoords(sp74, &spE4); + transform3Dto2DCoords(folderworldpos, &folderpos2d); - if (sp1B4 == folder_selected_for_deletion) + if (foldernum == folder_selected_for_deletion) { - spFC.p[1] = (s32) floorFloat(spE4.f[0]) - 0x31; - spFC.p[0] = (s32) floorFloat(spE4.f[1]) + 0x19; + textpos.p[1] = (s32) floorFloat(folderpos2d.f[0]) - 0x31; + textpos.p[0] = (s32) floorFloat(folderpos2d.f[1]) + 0x19; - DL = microcode_constructor_related_to_menus(DL, spFC.p[1], spFC.p[0], spFC.p[1] + 0x63, spFC.p[0] + 0x2A, 0x32); + DL = microcode_constructor_related_to_menus(DL, textpos.p[1], textpos.p[0], textpos.p[1] + 0x63, textpos.p[0] + 0x2A, 0x32); - langp = langGet(getStringID(LTITLE, TITLE_STR_23_ERASEFILE)); - spFC.p[1] = (s32) floorFloat(spE4.f[0]) - 0x2F; - spFC.p[0] = (s32) floorFloat(spE4.f[1]) + 0x1E; + langp = langGet(getStringID(LTITLE, TITLE_STR_23_ERASEFILE)); /* Erase file? */ + textpos.p[1] = (s32) floorFloat(folderpos2d.f[0]) - 0x2F; + textpos.p[0] = (s32) floorFloat(folderpos2d.f[1]) + 0x1E; - // 0xEBD879FF - DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); + DL = textRender(DL, &textpos.p[1], &textpos.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); - langp = langGet(getStringID(LTITLE, TITLE_STR_24_CANCEL)); - spFC.p[1] = (s32) floorFloat(spE4.f[0]) - 0x2F; - spFC.p[0] = (s32) floorFloat(spE4.f[1]) + 0x32; + langp = langGet(getStringID(LTITLE, TITLE_STR_24_CANCEL)); /* cancel */ + textpos.p[1] = (s32) floorFloat(folderpos2d.f[0]) - 0x2F; + textpos.p[0] = (s32) floorFloat(folderpos2d.f[1]) + 0x32; if (folder_selected_for_deletion_choice != 0) { - spF4.p[0] = 0; - spF4.p[1] = 0; - textMeasure(&spF4.p[1], &spF4.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - DL = microcode_constructor_related_to_menus(DL, spFC.p[1] - 1, spFC.p[0] - 1, spF4.p[0] + spFC.p[1] + 3, spF4.p[1] + spFC.p[0], 0x32); - DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); + textsize.p[0] = 0; + textsize.p[1] = 0; + textMeasure(&textsize.p[1], &textsize.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + DL = microcode_constructor_related_to_menus(DL, textpos.p[1] - 1, textpos.p[0] - 1, textsize.p[0] + textpos.p[1] + 3, textsize.p[1] + textpos.p[0], 0x32); + DL = textRender(DL, &textpos.p[1], &textpos.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); } else { - DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); + DL = textRender(DL, &textpos.p[1], &textpos.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); } - langp = langGet(getStringID(LTITLE, TITLE_STR_25_CONFIRM)); + langp = langGet(getStringID(LTITLE, TITLE_STR_25_CONFIRM)); /* confirm */ - temp_f4 = floorFloat(spE4.f[0]); - spFC.p[1] = (((j_text_trigger != 0) ? 0x17 : -1) + (s32) temp_f4) - 1; - spFC.p[0] = (s32) floorFloat(spE4.f[1]) + 0x32; + folderx = floorFloat(folderpos2d.f[0]); + textpos.p[1] = (((j_text_trigger != 0) ? 0x17 : -1) + (s32) folderx) - 1; + textpos.p[0] = (s32) floorFloat(folderpos2d.f[1]) + 0x32; if (folder_selected_for_deletion_choice != 0) { - DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); + DL = textRender(DL, &textpos.p[1], &textpos.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); } else { - spF4.p[0] = 0; - spF4.p[1] = 0; - textMeasure(&spF4.p[1], &spF4.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - DL = microcode_constructor_related_to_menus(DL, spFC.p[1] - 1, spFC.p[0] - 1, spF4.p[0] + spFC.p[1] + 3, spF4.p[1] + spFC.p[0], 0x32); - DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); + textsize.p[0] = 0; + textsize.p[1] = 0; + textMeasure(&textsize.p[1], &textsize.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + DL = microcode_constructor_related_to_menus(DL, textpos.p[1] - 1, textpos.p[0] - 1, textsize.p[0] + textpos.p[1] + 3, textsize.p[1] + textpos.p[0], 0x32); + DL = textRender(DL, &textpos.p[1], &textpos.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); } } else { + fileGetHighestStageDifficultyCompletedForFolder(foldernum, &higheststage, &highestdifficulty); - fileGetHighestStageDifficultyCompletedForFolder(sp1B4, &spF0, &spEC); - - if ((spF0 >= SP_LEVEL_DAM) && (spEC >= DIFFICULTY_AGENT)) + if ((higheststage >= SP_LEVEL_DAM) && (highestdifficulty >= DIFFICULTY_AGENT)) { - langp = get_ptr_difficulty_name(spEC); + langp = get_ptr_difficulty_name(highestdifficulty); if (langp != NULL) { - strcpy((char *)&spD0, langp); - strcat((char *)&spD0, "\n"); + strcpy((char *)&difficultytext, langp); + strcat((char *)&difficultytext, "\n"); - spF4.p[0] = 0; - spF4.p[1] = 0; + textsize.p[0] = 0; + textsize.p[1] = 0; - textMeasure(&spF4.p[1], &spF4.p[0], (char *)&spD0, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - spFC.p[1] = ((s32) floorFloat(spE4.f[0]) - (spF4.p[0] / 2)) - 1; - spFC.p[0] = (s32) floorFloat(spE4.f[1]) + 0x15; - DL = textRender(DL, &spFC.p[1], &spFC.p[0], (char *)&spD0, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); + textMeasure(&textsize.p[1], &textsize.p[0], (char *)&difficultytext, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + textpos.p[1] = ((s32) floorFloat(folderpos2d.f[0]) - (textsize.p[0] / 2)) - 1; + textpos.p[0] = (s32) floorFloat(folderpos2d.f[1]) + 0x15; + DL = textRender(DL, &textpos.p[1], &textpos.p[0], (char *)&difficultytext, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); } - if (spEC != DIFFICULTY_007) + if (highestdifficulty != DIFFICULTY_007) { - var_s2_2 = -1; + chapterindex = -1; - strcpy(spBC, langGet(getStringID(LTITLE, TITLE_STR_26_MISSION))); + strcpy(missiontext, langGet(getStringID(LTITLE, TITLE_STR_26_MISSION))); /* Mission */ - for (var_s1_2 = 0; mission_folder_setup_entries[var_s1_2].folder_text_preset != 0; var_s1_2++) + for (missionindex = 0; mission_folder_setup_entries[missionindex].folder_text_preset != 0; missionindex++) { - if (spF0 == mission_folder_setup_entries[var_s1_2].mission_num) + if (higheststage == mission_folder_setup_entries[missionindex].mission_num) { - var_s2_2 = get_chapter_briefing_entry(var_s1_2); + chapterindex = get_chapter_briefing_entry(missionindex); break; } } - if (var_s2_2 >= 0) + if (chapterindex >= 0) { - strcat((char *)spBC, (char *)mission_folder_setup_entries[var_s2_2].string_ptr); - strcat((char *)spBC, "."); + strcat((char *)missiontext, (char *)mission_folder_setup_entries[chapterindex].string_ptr); + strcat((char *)missiontext, "."); } - strcat((char *)spBC, (char *)mission_folder_setup_entries[var_s1_2].string_ptr); - strcat((char *)spBC, "\n"); - spF4.p[0] = 0; - spF4.p[1] = 0; + strcat((char *)missiontext, (char *)mission_folder_setup_entries[missionindex].string_ptr); + strcat((char *)missiontext, "\n"); + textsize.p[0] = 0; + textsize.p[1] = 0; - textMeasure(&spF4.p[1], &spF4.p[0], (char *)spBC, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - spFC.p[1] = ((s32) floorFloat(spE4.f[0]) - (spF4.p[0] / 2)) - 1; - spFC.p[0] = (s32) floorFloat(spE4.f[1]) + 0x2D; + textMeasure(&textsize.p[1], &textsize.p[0], (char *)missiontext, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + textpos.p[1] = ((s32) floorFloat(folderpos2d.f[0]) - (textsize.p[0] / 2)) - 1; + textpos.p[0] = (s32) floorFloat(folderpos2d.f[1]) + 0x2D; - DL = textRender(DL, &spFC.p[1], &spFC.p[0], (char *)spBC, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); + DL = textRender(DL, &textpos.p[1], &textpos.p[0], (char *)missiontext, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); } } } } - if(1) { // The above for loops makes a lot of compiler temp variables on the stack, // These need to be declared sometime after the above for loop. - struct coord2d spAC; - struct coord2d spA4; - struct coord2d sp9C; - struct coord2d sp94; - struct coord2d sp8C; - struct coord2d sp84; + struct coord2d copypos; + struct coord2d copyhalfsize; + struct coord2d erasepos; + struct coord2d erasehalfsize; + struct coord2d selectpos; + struct coord2d selecthalfsize; setTextSpacingInverted(0); - langp = langGet(getStringID(LTITLE, TITLE_STR_27_COPY)); + langp = langGet(getStringID(LTITLE, TITLE_STR_27_COPY)); /* Copy */ - spF4.p[0] = 0; - spF4.p[1] = 0; + textsize.p[0] = 0; + textsize.p[1] = 0; - textMeasure(&spF4.p[1], &spF4.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + textMeasure(&textsize.p[1], &textsize.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - spFC.p[0] = 0x11D - (spF4.p[1] / 2); - spFC.p[1] = 0xF7; + textpos.p[0] = 285 - (textsize.p[1] / 2); + textpos.p[1] = 247; - DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); - folder_option_COPY_bound.right = (f32) (spF4.p[0] + spFC.p[1]); + DL = textRender(DL, &textpos.p[1], &textpos.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); + folder_option_COPY_bound.right = (f32) (textsize.p[0] + textpos.p[1]); - langp = langGet(getStringID(LTITLE, TITLE_STR_28_ERASE)); + langp = langGet(getStringID(LTITLE, TITLE_STR_28_ERASE)); /* Erase */ - spF4.p[0] = 0; - spF4.p[1] = 0; + textsize.p[0] = 0; + textsize.p[1] = 0; - textMeasure(&spF4.p[1], &spF4.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + textMeasure(&textsize.p[1], &textsize.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - spFC.p[1] = 0x165; - spFC.p[0] = 0x11D - (spF4.p[1] / 2); + textpos.p[1] = 357; + textpos.p[0] = 285 - (textsize.p[1] / 2); - DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); + DL = textRender(DL, &textpos.p[1], &textpos.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); - folder_option_ERASE_bound.right = (f32) (spF4.p[0] + spFC.p[1]); + folder_option_ERASE_bound.right = (f32) (textsize.p[0] + textpos.p[1]); - spAC.f[0] = 225.0f; - spAC.f[1] = 285.0f; + copypos.f[0] = 225.0f; + copypos.f[1] = 285.0f; - spA4.f[0] = (f32) (mainfolderimages + IMG_COPY)->width * 0.5f; - spA4.f[1] = (f32) (mainfolderimages + IMG_COPY)->height * 0.5f; + copyhalfsize.f[0] = (f32) (mainfolderimages + IMG_COPY)->width * 0.5f; + copyhalfsize.f[1] = (f32) (mainfolderimages + IMG_COPY)->height * 0.5f; texSelect(&DL, mainfolderimages, 4, 0, 0); - display_image_at_position(&DL, &spAC.f[0], &spA4.f[0], mainfolderimages->width, mainfolderimages->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) mainfolderimages->level > 0, 0); + display_image_at_position(&DL, ©pos.f[0], ©halfsize.f[0], mainfolderimages->width, mainfolderimages->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) mainfolderimages->level > 0, 0); - folder_option_COPY_bound.left = spAC.f[0] - spA4.f[0]; - folder_option_COPY_bound.up = spAC.f[1] - spA4.f[1]; - folder_option_COPY_bound.down = spAC.f[1] + spA4.f[1]; + folder_option_COPY_bound.left = copypos.f[0] - copyhalfsize.f[0]; + folder_option_COPY_bound.up = copypos.f[1] - copyhalfsize.f[1]; + folder_option_COPY_bound.down = copypos.f[1] + copyhalfsize.f[1]; - sp9C.f[0] = 335.0f; - sp9C.f[1] = 285.0f; + erasepos.f[0] = 335.0f; + erasepos.f[1] = 285.0f; - sp94.f[0] = (mainfolderimages + IMG_DEL)->width * 0.5f; - sp94.f[1] = (mainfolderimages + IMG_DEL)->height * 0.5f; + erasehalfsize.f[0] = (mainfolderimages + IMG_DEL)->width * 0.5f; + erasehalfsize.f[1] = (mainfolderimages + IMG_DEL)->height * 0.5f; texSelect(&DL, mainfolderimages + IMG_DEL, 4, 0, 0); - display_image_at_position(&DL, &sp9C.f[0], &sp94.f[0], (mainfolderimages + IMG_DEL)->width, (mainfolderimages + IMG_DEL)->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) (mainfolderimages + IMG_DEL)->level > 0, 0); + display_image_at_position(&DL, &erasepos.f[0], &erasehalfsize.f[0], (mainfolderimages + IMG_DEL)->width, (mainfolderimages + IMG_DEL)->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) (mainfolderimages + IMG_DEL)->level > 0, 0); - folder_option_ERASE_bound.left = (f32) (sp9C.f[0] - sp94.f[0]); - folder_option_ERASE_bound.up = (f32) (sp9C.f[1] - sp94.f[1]); - folder_option_ERASE_bound.down = (f32) (sp9C.f[1] + sp94.f[1]); + folder_option_ERASE_bound.left = (f32) (erasepos.f[0] - erasehalfsize.f[0]); + folder_option_ERASE_bound.up = (f32) (erasepos.f[1] - erasehalfsize.f[1]); + folder_option_ERASE_bound.down = (f32) (erasepos.f[1] + erasehalfsize.f[1]); - sp8C.f[0] = 110.0f; - sp8C.f[1] = 285.0f; + selectpos.f[0] = 110.0f; + selectpos.f[1] = 285.0f; - sp84.f[0] = (mainfolderimages + IMG_SEL)->width * 0.5f; - sp84.f[1] = (mainfolderimages + IMG_SEL)->height * 0.5f; + selecthalfsize.f[0] = (mainfolderimages + IMG_SEL)->width * 0.5f; + selecthalfsize.f[1] = (mainfolderimages + IMG_SEL)->height * 0.5f; texSelect(&DL, mainfolderimages + IMG_SEL, 4, 0, 0); - display_image_at_position(&DL, &sp8C.f[0], &sp84.f[0], (mainfolderimages + IMG_SEL)->width, (mainfolderimages + IMG_SEL)->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) (mainfolderimages + IMG_SEL)->level > 0, 0); + display_image_at_position(&DL, &selectpos.f[0], &selecthalfsize.f[0], (mainfolderimages + IMG_SEL)->width, (mainfolderimages + IMG_SEL)->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) (mainfolderimages + IMG_SEL)->level > 0, 0); } if (folder_selected_for_deletion < 0) @@ -2842,7 +2713,6 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) } - //******************************************************************************************************** //MODE SELECT //******************************************************************************************************** @@ -2855,7 +2725,9 @@ void init_menu06_modeselect(void) fileUpdateBondInCurrentFolder(); } -void update_menu06_modesel(void) { + +void update_menu06_modesel(void) +{ return; } @@ -2982,7 +2854,7 @@ Gfx *frontSetupMenuBackground(Gfx *DL) matrix_scalar_multiply(0.25f, sp88.m[0]); matrix_4x4_multiply_in_place(&spC8, &sp88); - sp10C.unk_matrix = &sp88; + sp10C.basemtx = &sp88; sp10C.mtxlist = dynAllocate(walletinst[0]->obj->numMatrices << 6); @@ -3187,15 +3059,13 @@ void init_menu07_missionselect(void) load_walletbond(); } -void update_menu07_missionsel(void) { + +void update_menu07_missionsel(void) +{ return; } - - - - // Address 0x7F00DEB8 NTSC void interface_menu07_missionsel(void) { @@ -3209,8 +3079,8 @@ void interface_menu07_missionsel(void) ModelNode *mnode; s32 padding; - viSetFovY(60.0f); - viSetAspect(1.3333334f); + viSetFovY(FOV_Y_F); + viSetAspect(ASPECT_RATIO_SD); viSetZRange(100.0f, 10000.0f); viSetUseZBuf(0); disable_all_switches(walletinst[0]); @@ -3301,7 +3171,7 @@ void interface_menu07_missionsel(void) temp_s4 = (struct ModelRoData_DisplayList_CollisionRecord *)mnode->Data; temp_s1 = (struct ModelRwData_DisplayList_CollisionRecord *)modelGetNodeRwData(walletinst[0], mnode); - temp_s1->Vertices = dynAllocate7F0BD6C4(temp_s4->numVertices); + temp_s1->Vertices = dynAllocateVertices(temp_s4->numVertices); for (i = 0; i < temp_s4->numVertices; i++) { @@ -3808,6 +3678,7 @@ Gfx *constructor_menu08_difficulty(Gfx *DL) //******************************************************************************************************** //007 DIFFICULTY SELECT //******************************************************************************************************** + void init_menu09_007difficultyselect(void) { tab_start_selected = 0; @@ -3818,12 +3689,14 @@ void init_menu09_007difficultyselect(void) tab_start_highlight = 0; highlight_enemy_reaction = 0; highlight_enemy_health = 0; - highlight_enemy_accuracy = 0; highlight_enemy_damage = 0; + highlight_enemy_accuracy = 0; load_walletbond(); } -void update_menu09_007options(void) { + +void update_menu09_007options(void) +{ return; } @@ -3844,8 +3717,9 @@ void interface_menu09_007options(void) tab_start_highlight = FALSE; highlight_enemy_reaction = FALSE; highlight_enemy_health = FALSE; - highlight_enemy_accuracy = FALSE; highlight_enemy_damage = FALSE; + highlight_enemy_accuracy = FALSE; + if (frontCheckCursorOnPreviousTab()) { tab_prev_highlight = TRUE; @@ -3868,11 +3742,11 @@ void interface_menu09_007options(void) } else if (temp_y >= 0xE6) { - highlight_enemy_damage = TRUE; + highlight_enemy_accuracy = TRUE; } else if (temp_y >= 0xC5) { - highlight_enemy_accuracy = TRUE; + highlight_enemy_damage = TRUE; } else if (temp_y >= 0xA4) { @@ -3884,6 +3758,7 @@ void interface_menu09_007options(void) } } } + if (joyGetButtonsPressedThisFrame(PLAYER_1, START_BUTTON)) { tab_start_selected = TRUE; @@ -3910,17 +3785,21 @@ void interface_menu09_007options(void) tab_prev_selected = TRUE; sndPlaySfx(g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } + if (joyGetButtons(PLAYER_1, Z_TRIG|A_BUTTON)) { temp_x = (cursor_h_pos - 55.0f) / 300.0f; + if (temp_x > 1.0f) { temp_x = 1.0f; } + if (temp_x < 0.0f) { temp_x = 0.0f; } + if (highlight_enemy_reaction) { slider_007_mode_reaction = temp_x; @@ -3929,31 +3808,35 @@ void interface_menu09_007options(void) { slider_007_mode_health = (f32) (temp_x * temp_x * 10.0f); } - else if (highlight_enemy_accuracy) + else if (highlight_enemy_damage) { slider_007_mode_damage = (f32) (temp_x * temp_x * 10.0f); } - else if (highlight_enemy_damage) + else if (highlight_enemy_accuracy) { slider_007_mode_accuracy = (f32) (temp_x * temp_x * 10.0f); } } + disable_all_switches(walletinst[0]); set_item_visibility_in_objinstance(walletinst[0], SW_TABS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_PAPER, 1); set_item_visibility_in_objinstance(walletinst[0], SW_OHMSS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_CLASSIFIED, 1); frontUpdateControlStickPosition(); + if (tab_start_selected) { frontChangeMenu(MENU_RUN_STAGE, TRUE); return; } + if (tab_next_selected) { frontChangeMenu(MENU_BRIEFING, FALSE); return; } + if (tab_prev_selected) { frontChangeMenu(MENU_DIFFICULTY, FALSE); @@ -3962,21 +3845,23 @@ void interface_menu09_007options(void) } - - #if !defined(VERSION_EU) const struct MatchHack_front_rodata_3000 asc_D_80050074 = { "\n" }; #endif +/** + * Render the 007 Mode options. The slider bars are 300 pixels wide and + * sit 33 pixels apart vertically. + */ Gfx *constructor_menu09_007options(Gfx *DL) { - u8 *spC14; - s32 spC10; - s32 spC0C; - struct MatchHack_front_rodata_3000 sp54; - s32 sp50; - s32 sp4C; - s32 val; + u8 *labeltext; + s32 textx; + s32 texty; + struct MatchHack_front_rodata_3000 textbuffer; + s32 textheight; + s32 textwidth; + s32 barwidth; DL = viSetFillColor(DL, 0, 0, 0); DL = viFillScreen(DL); @@ -3987,129 +3872,155 @@ Gfx *constructor_menu09_007options(Gfx *DL) DL = frontSetupMenuBackground(DL); #if !defined(VERSION_EU) - sp54 = asc_D_80050074; + textbuffer = asc_D_80050074; #endif DL = microcode_constructor(DL); - DL = print_current_solo_briefing_stage_name(DL, (char*)&sp54); + DL = print_current_solo_briefing_stage_name(DL, (char*)&textbuffer); - spC14 = langGet(getStringID(LTITLE, TITLE_STR_40_SPECOPS)); + labeltext = langGet(getStringID(LTITLE, TITLE_STR_40_SPECOPS)); /* SPECIAL OPTIONS */ - spC10 = 0x37; - spC0C = 0x8f; + textx = 55; + texty = 143; - DL = frontPrintText(DL, &spC10, &spC0C, (s8 *)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &textx, &texty, (s8 *)labeltext, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - spC14 = langGet(getStringID(LTITLE, TITLE_STR_42_HEALTH)); - spC10 = 0x39; - spC0C = 0xA4; + /** + * ENEMY HEALTH + */ + labeltext = langGet(getStringID(LTITLE, TITLE_STR_42_HEALTH)); /* Enemy health */ - DL = microcode_constructor_related_to_menus(DL, 0x37, 0xB5, 0x163, 0xC0, 0x32); - val = (sqrtf(slider_007_mode_health / 10.0f)) * 300.0f; - DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C + 0x11, val + 0x37, spC0C + 0x1c, 0x64); + textx = 57; + texty = 164; + + // Render the bar background with a black color and an opacity of 50/255. + DL = microcode_constructor_related_to_menus(DL, 55, 181, 355, 192, 0x00000032); + + barwidth = (sqrtf(slider_007_mode_health / 10.0f)) * 300.0f; + + // Render the filled portion of the bar with a black color and an opacity of 100/255. + DL = microcode_constructor_related_to_menus(DL, 55, texty + 17, barwidth + 55, texty + 28, 0x00000064); if (highlight_enemy_health != 0) { - DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C - 1, 0xC7, spC0C + 0xE, 0x32); + // Render a black rectangle over the "Enemy health" text to indicate it's highlighted. + DL = microcode_constructor_related_to_menus(DL, 55, texty - 1, 199, texty + 14, 0x00000032); } - DL = frontPrintText(DL, &spC10, &spC0C, (s8 *)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + // Render "Enemy health" text. + DL = frontPrintText(DL, &textx, &texty, (s8 *)labeltext, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - sprintf((char*)&sp54, "%d%%\n", (s32) (slider_007_mode_health * 100.0f)); + sprintf((char*)&textbuffer, "%d%%\n", (s32) (slider_007_mode_health * 100.0f)); - sp4C = 0; - sp50 = 0; + textwidth = 0; + textheight = 0; - textMeasure(&sp50, &sp4C, (char*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + textMeasure(&textheight, &textwidth, (char*)&textbuffer, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - spC10 = 0x11D - sp4C; - spC0C = 0xA4; + textx = 285 - textwidth; + texty = 164; - DL = frontPrintText(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + // Render enemy health percentage text. + DL = frontPrintText(DL, &textx, &texty, (s8*)&textbuffer, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - spC14 = langGet(getStringID(LTITLE, TITLE_STR_43_DAMAGE)); - spC10 = 0x39; - spC0C = 0xC5; + /** + * ENEMY DAMAGE + */ + labeltext = langGet(getStringID(LTITLE, TITLE_STR_43_DAMAGE)); /* Enemy damage */ - DL = microcode_constructor_related_to_menus(DL, 0x37, 0xD6, 0x163, 0xE1, 0x32); - val = (sqrtf(slider_007_mode_damage / 10.0f)) * 300.0f; - DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C + 0x11, val + 0x37, spC0C + 0x1c, 0x64); + textx = 57; + texty = 197; - if (highlight_enemy_accuracy != 0) - { - DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C - 1, 0xC7, spC0C + 0xE, 0x32); - } - - DL = frontPrintText(DL, &spC10, &spC0C, (s8*)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - - sprintf((char*)&sp54, "%d%%\n", (s32) (slider_007_mode_damage * 100.0f)); - - sp4C = 0; - sp50 = 0; - - textMeasure(&sp50, &sp4C, (char*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - - spC10 = 0x11D - sp4C; - spC0C = 0xC5; - - DL = frontPrintText(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - - spC14 = langGet(getStringID(LTITLE, TITLE_STR_44_ACCURACY)); - - spC10 = 0x39; - spC0C = 0xE6; - - DL = microcode_constructor_related_to_menus(DL, 0x37, 0xF7, 0x163, 0x102, 0x32); - val = (sqrtf(slider_007_mode_accuracy / 10.0f)) * 300.0f; - DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C + 0x11, val + 0x37, spC0C + 0x1c, 0x64); + DL = microcode_constructor_related_to_menus(DL, 55, 214, 355, 225, 0x00000032); + barwidth = (sqrtf(slider_007_mode_damage / 10.0f)) * 300.0f; + DL = microcode_constructor_related_to_menus(DL, 55, texty + 17, barwidth + 55, texty + 28, 0x00000064); if (highlight_enemy_damage != 0) { - DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C - 1, 0xC7, spC0C + 0xE, 0x32); + DL = microcode_constructor_related_to_menus(DL, 55, texty - 1, 199, texty + 14, 0x00000032); } - DL = frontPrintText(DL, &spC10, &spC0C, (s8*)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &textx, &texty, (s8*)labeltext, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - sprintf((char*)&sp54, "%d%%\n", (s32) (slider_007_mode_accuracy * 10.0f)); + sprintf((char*)&textbuffer, "%d%%\n", (s32) (slider_007_mode_damage * 100.0f)); - sp4C = 0; - sp50 = 0; + textwidth = 0; + textheight = 0; - textMeasure(&sp50, &sp4C, (char*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + textMeasure(&textheight, &textwidth, (char*)&textbuffer, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - spC10 = 0x11D - sp4C; - spC0C = 0xE6; + textx = 285 - textwidth; + texty = 197; - DL = frontPrintText(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + // Render enemy damage percentage text. + DL = frontPrintText(DL, &textx, &texty, (s8*)&textbuffer, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - spC14 = langGet(getStringID(LTITLE, TITLE_STR_41_REACTION)); - spC10 = 0x39; - spC0C = 0x107; + /** + * ENEMY ACCURACY + */ + labeltext = langGet(getStringID(LTITLE, TITLE_STR_44_ACCURACY)); /* Enemy accuracy */ - DL = microcode_constructor_related_to_menus(DL, 0x37, 0x118, 0x163, 0x123, 0x32); - DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C + 0x11, (s32) (slider_007_mode_reaction * 300.0f * 1) + 0x37, spC0C + 0x1c, 0x64); + textx = 57; + texty = 230; + + DL = microcode_constructor_related_to_menus(DL, 55, 247, 355, 258, 0x00000032); + barwidth = (sqrtf(slider_007_mode_accuracy / 10.0f)) * 300.0f; + DL = microcode_constructor_related_to_menus(DL, 55, texty + 17, barwidth + 55, texty + 28, 0x00000064); + + if (highlight_enemy_accuracy != 0) + { + DL = microcode_constructor_related_to_menus(DL, 55, texty - 1, 199, texty + 14, 0x00000032); + } + + DL = frontPrintText(DL, &textx, &texty, (s8*)labeltext, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + + sprintf((char*)&textbuffer, "%d%%\n", (s32) (slider_007_mode_accuracy * 10.0f)); + + textwidth = 0; + textheight = 0; + + textMeasure(&textheight, &textwidth, (char*)&textbuffer, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + + textx = 285 - textwidth; + texty = 230; + + // Render enemy accuracy percentage text. + DL = frontPrintText(DL, &textx, &texty, (s8*)&textbuffer, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + + + /** + * ENEMY REACTION + */ + labeltext = langGet(getStringID(LTITLE, TITLE_STR_41_REACTION)); /* Enemy reaction speed */ + + textx = 57; + texty = 263; + + DL = microcode_constructor_related_to_menus(DL, 55, 280, 355, 291, 0x00000032); + DL = microcode_constructor_related_to_menus(DL, 55, texty + 17, (s32) (slider_007_mode_reaction * 300.0f * 1) + 55, texty + 28, 0x00000064); if (highlight_enemy_reaction != 0) { - DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C - 1, 0xC7, spC0C + 0xE, 0x32); + DL = microcode_constructor_related_to_menus(DL, 55, texty - 1, 199, texty + 14, 0x00000032); } - DL = frontPrintText(DL, &spC10, &spC0C, (s8*)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &textx, &texty, (s8*)labeltext, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - sprintf((char*)&sp54, "%d%%\n", (s32) (slider_007_mode_reaction * 100.0f)); + sprintf((char*)&textbuffer, "%d%%\n", (s32) (slider_007_mode_reaction * 100.0f)); - sp4C = 0; - sp50 = 0; + textwidth = 0; + textheight = 0; - textMeasure(&sp50, &sp4C, (char*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + textMeasure(&textheight, &textwidth, (char*)&textbuffer, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - spC10 = 0x11D - sp4C; - spC0C = 0x107; + textx = 285 - textwidth; + texty = 263; - DL = frontPrintText(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + // Render enemy reaction speed percentage text. + DL = frontPrintText(DL, &textx, &texty, (s8*)&textbuffer, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); DL = frontAddStartTabText(DL); DL = frontAddPreviousTabText(DL); @@ -4120,7 +4031,6 @@ Gfx *constructor_menu09_007options(Gfx *DL) } - u32 get_player_control_style(s32 playernum) { return controlstyle_player[playernum]; @@ -4206,7 +4116,7 @@ u16 get_player_mp_char_head(s32 player) return mp_chr_setup[player_char[player]].head; } -u8 get_player_mp_char_gender(int player) +u8 get_player_mp_char_gender(s32 player) { if (player_char[player] < 0) { @@ -4215,7 +4125,7 @@ u8 get_player_mp_char_gender(int player) return mp_chr_setup[player_char[player]].gender; } -u16 get_player_mp_char_body(int player) +u16 get_player_mp_char_body(s32 player) { if (player_char[player] < 0) { @@ -4224,12 +4134,12 @@ u16 get_player_mp_char_body(int player) return mp_chr_setup[player_char[player]].body; } -f32 get_player_mp_handicap(int player) +f32 get_player_mp_handicap(s32 player) { return MP_handicap_table[player_handicap[player]].damage_modifier; } -f32 get_player_mp_char_height(int player) +f32 get_player_mp_char_height(s32 player) { if (player_char[player] < 0) { return mp_chr_setup[player].pov; @@ -4237,11 +4147,11 @@ f32 get_player_mp_char_height(int player) return mp_chr_setup[player_char[player]].pov; } -int get_mp_timelimit(void) { +s32 get_mp_timelimit(void) { return multi_game_lengths[game_length].time; } -int get_mp_pointlimit(void) { +s32 get_mp_pointlimit(void) { return multi_game_lengths[game_length].points; } @@ -4967,7 +4877,7 @@ void init_menu0f_mpcharsel(void) { mp_char_cur_select_player[i] = player_char[i]; mp_char_prev_select_player[i] = player_char[i]; - dword_CODE_bss_80069730[i] = 0; + mp_char_select_scroll_offset[i] = 0; player_has_selected_char[i] = 0; size_mp_select_image_player[i] = 0; } @@ -4980,12 +4890,13 @@ void init_menu0f_mpcharsel(void) //******************************************************************************************************** //MULTIPLAYER CHARACTER SELECT //******************************************************************************************************** -void update_menu0F_mpcharsel(void) { + +void update_menu0F_mpcharsel(void) +{ return; } - // Address 0x7F011ED4 NTSC void interface_menu0F_mpcharsel(void) { @@ -4998,8 +4909,8 @@ void interface_menu0F_mpcharsel(void) numplayers = get_selected_num_players(); ready_players = 0; - viSetFovY(60.0f); - viSetAspect(1.3333334f); + viSetFovY(FOV_Y_F); + viSetAspect(ASPECT_RATIO_SD); viSetZRange(100.0f, 10000.0f); viSetUseZBuf(0); @@ -5052,7 +4963,7 @@ void interface_menu0F_mpcharsel(void) } else if (joyGetStickXInRange(i, -2, 1) > 0) { - if (dword_CODE_bss_80069730[i] == 0) + if (mp_char_select_scroll_offset[i] == 0) { if (mp_char_cur_select_player[i] < (num_chars_selectable_mp - 1)) { @@ -5060,7 +4971,7 @@ void interface_menu0F_mpcharsel(void) } } } - else if ((joyGetStickXInRange(i, -2, 1) < -1) && (dword_CODE_bss_80069730[i] == 0)) + else if ((joyGetStickXInRange(i, -2, 1) < -1) && (mp_char_select_scroll_offset[i] == 0)) { if (mp_char_cur_select_player[i] > 0) { @@ -5069,23 +4980,23 @@ void interface_menu0F_mpcharsel(void) } } - temp_v1_3 = (mp_char_prev_select_player[i] * 0x54) + dword_CODE_bss_80069730[i]; + temp_v1_3 = (mp_char_prev_select_player[i] * 0x54) + mp_char_select_scroll_offset[i]; if (mp_char_cur_select_player[i] * 0x54 < temp_v1_3) { - dword_CODE_bss_80069730[i] -= 0xc; - if (dword_CODE_bss_80069730[i] < 0) + mp_char_select_scroll_offset[i] -= 0xc; + if (mp_char_select_scroll_offset[i] < 0) { - dword_CODE_bss_80069730[i] += 0x54; + mp_char_select_scroll_offset[i] += 0x54; mp_char_prev_select_player[i]--; } } else if (temp_v1_3 < mp_char_cur_select_player[i] * 0x54) { - dword_CODE_bss_80069730[i] += 0xC; - if (dword_CODE_bss_80069730[i] >= 0x54) + mp_char_select_scroll_offset[i] += 0xC; + if (mp_char_select_scroll_offset[i] >= 0x54) { - dword_CODE_bss_80069730[i] -= 0x54; + mp_char_select_scroll_offset[i] -= 0x54; mp_char_prev_select_player[i]++; } } @@ -5152,7 +5063,7 @@ Gfx *frontRenderCharacterPortrait(Gfx *DL, s32 arg1, s32 arg2, s32 arg3, s32 arg spD4 = dynAllocateMatrix(); spD0 = dynAllocateMatrix(); - spCC = dynAllocate7F0BD6C4(16); + spCC = dynAllocateVertices(16); DL = microcode_constructor(DL); guOrtho(spD4, 0.0f, 440.0f, 0.0f, 330.0f, 1.0f, 10.0f, 1.0f); @@ -5253,143 +5164,114 @@ Gfx *frontRenderCharacterPortrait(Gfx *DL, s32 arg1, s32 arg2, s32 arg3, s32 arg } - -#ifdef NONMATCHING -// https://decomp.me/scratch/VJHe2 99.89% (0x6c(sp) -> 0x70(sp) - -// Address 0x7F012794 NTSC -Gfx * constructor_menu0F_mpcharsel(Gfx *DL) +Gfx *constructor_menu0F_mpcharsel(Gfx *DL) { - s32 spE4; - s32 i; // spE0 + s32 numplayers; + s32 playernum; u8 *text; - s32 var_s2; - s32 var_s7; - s32 var_s4; - s32 var_v1; - s32 padding3; - s32 padding4; - s32 padding1; - s32 spBC; - s32 spB8; - s32 spB4; - s32 spB0; - s32 padding2; - s32 spA8; - s32 spA4; - s32 spA0; - s32 sp9C; - - spE4 = get_selected_num_players(); + s32 panel_left; // X position where the portraits completely fade out on the left. + s32 panel_top; + s32 panel_width; // Width of the character portrait panel (1 panel per player) + s32 grid_offset; // Distance between the portrait panels + s32 stackpad; + s32 stackpad2; + s32 portrait_y_base; + s32 select_char_height; + s32 select_char_width; + s32 select_char_x; + s32 select_char_y; + s32 panel_center_x; + s32 name_height; + s32 name_width; + s32 name_x; + s32 name_y; + numplayers = get_selected_num_players(); + DL = viSetFillColor(DL, 0, 0, 0); DL = viFillScreen(DL); DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); DL = microcode_constructor_related_to_menus(DL, 0x26, 0xA9, 0x184, 0xAB, 0x90); - if (spE4 >= 3) + if (numplayers >= 3) { DL = microcode_constructor_related_to_menus(DL, 0xD4, 0x1E, 0xD6, 0x136, 0x80); } - for (i = 0; i < spE4; i++) + for (playernum = 0; playernum < numplayers; playernum++) { - if (spE4 == 2) - { - var_s2 = 0x26; - var_s4 = 0x15E; + panel_top = 0; - if (i > 0) - { - var_v1 = 0x8c; - } - else - { - var_v1 = 0; - } - var_s7 = var_v1 + 0x1E; + if (numplayers == 2) + { + panel_left = 0x26; + panel_width = 0x15E; + grid_offset = (playernum > 0) ? (0x8C) : (0); + panel_top = grid_offset + 0x1E; } else { - var_s4 = 0xAF; - - if (i >= 2) - { - var_v1 = 0x8C; - } - else - { - var_v1 = 0; - } - var_s7 = var_v1 + 0x1E; - - if (i & 1) - { - var_v1 = 0xAF; - } - else - { - var_v1 = 0; - } - var_s2 = var_v1 + 0x26; + panel_width = 0xAF; + grid_offset = (playernum >= 2) ? (0x8C) : (0); + panel_top = grid_offset + 0x1E; + grid_offset = (playernum & 1) ? (0xAF) : (0); + panel_left = grid_offset + 0x26; } + + gDPSetScissor(DL++, G_SC_NON_INTERLACE, (panel_left + 6), panel_top + 5, (panel_left + panel_width - 6), (panel_top + 0x8C - 5)); - gDPSetScissor(DL++, G_SC_NON_INTERLACE, (var_s2 + 6), var_s7 + 5, (var_s2 + var_s4 - 6), (var_s7 + 0x87)); + panel_center_x = (panel_width >> 1) + panel_left; - if ((player_has_selected_char[i] == 0) && (size_mp_select_image_player[i] == 0)) + if ((player_has_selected_char[playernum] == 0) && (size_mp_select_image_player[playernum] == 0)) { - - text = langGet(0x9C55U); - textMeasure(&spBC, &spB8, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - - spB4 = ((var_s4 >> 1) + var_s2) - (spB8 >> 1); - spB0 = var_s7 + 5; - + text = langGet(getStringID(LTITLE, TITLE_STR_85_SELECTCHARACTER)); + textMeasure(&select_char_height, &select_char_width, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + select_char_x = panel_center_x - (select_char_width >> 1); + select_char_y = panel_top + 5; DL = microcode_constructor(DL); - DL = frontPrintText(DL, &spB4, &spB0, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &select_char_x, &select_char_y, (s8 *) text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } - - text = langGet(mp_chr_setup[mp_char_cur_select_player[i]].text_preset); - textMeasure(&spA8, &spA4, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - - spA0 = (var_s4 >> 1) + var_s2 - (spA4 >> 1); - sp9C = var_s7 + 0x78; - + + text = langGet(mp_chr_setup[mp_char_cur_select_player[playernum]].text_preset); + textMeasure(&name_height, &name_width, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + portrait_y_base = panel_top; + name_x = panel_center_x - (name_width >> 1); + name_y = (portrait_y_base + 0x46) + 0x32; DL = microcode_constructor(DL); - DL = frontPrintText(DL, &spA0, &sp9C, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, (var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i], var_s7 + 0x46, mp_char_prev_select_player[i], size_mp_select_image_player[i]); + DL = frontPrintText(DL, &name_x, &name_y, (s8 *) text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontRenderCharacterPortrait(DL, panel_left + 0xD, (panel_left + panel_width) - 0xE, panel_center_x - mp_char_select_scroll_offset[playernum], portrait_y_base + 0x46, mp_char_prev_select_player[playernum], size_mp_select_image_player[playernum]); - if ((player_has_selected_char[i] == 0 && size_mp_select_image_player[i] == 0) || (mp_char_prev_select_player[i] != mp_char_cur_select_player[i])) + if (((player_has_selected_char[playernum] == 0) && (size_mp_select_image_player[playernum] == 0)) || (mp_char_prev_select_player[playernum] != mp_char_cur_select_player[playernum])) { - if (mp_char_prev_select_player[i] >= 3) + if (mp_char_prev_select_player[playernum] >= 3) { - DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) - 0xFC, var_s7 + 0x46, mp_char_prev_select_player[i] - 3, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, panel_left + 0xD, (panel_left + panel_width) - 0xE, (panel_center_x - mp_char_select_scroll_offset[playernum]) - 0xFC, portrait_y_base + 0x46, mp_char_prev_select_player[playernum] - 3, size_mp_select_image_player[playernum]); } - if (mp_char_prev_select_player[i] >= 2) + if (mp_char_prev_select_player[playernum] >= 2) { - DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) - 0xA8, var_s7 + 0x46, mp_char_prev_select_player[i] - 2, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, panel_left + 0xD, (panel_left + panel_width) - 0xE, (panel_center_x - mp_char_select_scroll_offset[playernum]) - 0xA8, portrait_y_base + 0x46, mp_char_prev_select_player[playernum] - 2, size_mp_select_image_player[playernum]); } - if (mp_char_prev_select_player[i] >= 1) + if (mp_char_prev_select_player[playernum] >= 1) { - DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) - 0x54, var_s7 + 0x46, mp_char_prev_select_player[i] - 1, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, panel_left + 0xD, (panel_left + panel_width) - 0xE, (panel_center_x - mp_char_select_scroll_offset[playernum]) - 0x54, portrait_y_base + 0x46, mp_char_prev_select_player[playernum] - 1, size_mp_select_image_player[playernum]); } - if (mp_char_prev_select_player[i] < num_chars_selectable_mp - 1) + if (mp_char_prev_select_player[playernum] < (num_chars_selectable_mp - 1)) { - DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) + 0x54, var_s7 + 0x46, mp_char_prev_select_player[i] + 1, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, panel_left + 0xD, (panel_left + panel_width) - 0xE, (panel_center_x - mp_char_select_scroll_offset[playernum]) + 0x54, portrait_y_base + 0x46, mp_char_prev_select_player[playernum] + 1, size_mp_select_image_player[playernum]); } - if (mp_char_prev_select_player[i] < num_chars_selectable_mp - 2) + if (mp_char_prev_select_player[playernum] < (num_chars_selectable_mp - 2)) { - DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) + 0xA8, var_s7 + 0x46, mp_char_prev_select_player[i] + 2, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, panel_left + 0xD, (panel_left + panel_width) - 0xE, (panel_center_x - mp_char_select_scroll_offset[playernum]) + 0xA8, portrait_y_base + 0x46, mp_char_prev_select_player[playernum] + 2, size_mp_select_image_player[playernum]); } - if (mp_char_prev_select_player[i] < num_chars_selectable_mp - 3) + if (mp_char_prev_select_player[playernum] < (num_chars_selectable_mp - 3)) { - DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) + 0xFC, var_s7 + 0x46, mp_char_prev_select_player[i] + 3, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, panel_left + 0xD, (panel_left + panel_width) - 0xE, (panel_center_x - mp_char_select_scroll_offset[playernum]) + 0xFC, portrait_y_base + 0x46, mp_char_prev_select_player[playernum] + 3, size_mp_select_image_player[playernum]); } } } @@ -5398,455 +5280,6 @@ Gfx * constructor_menu0F_mpcharsel(Gfx *DL) return DL; } -#else -GLOBAL_ASM( -.text -glabel constructor_menu0F_mpcharsel -/* 0472C4 7F012794 27BDFF18 */ addiu $sp, $sp, -0xe8 -/* 0472C8 7F012798 AFBF0064 */ sw $ra, 0x64($sp) -/* 0472CC 7F01279C AFB10044 */ sw $s1, 0x44($sp) -/* 0472D0 7F0127A0 00808825 */ move $s1, $a0 -/* 0472D4 7F0127A4 AFBE0060 */ sw $fp, 0x60($sp) -/* 0472D8 7F0127A8 AFB7005C */ sw $s7, 0x5c($sp) -/* 0472DC 7F0127AC AFB60058 */ sw $s6, 0x58($sp) -/* 0472E0 7F0127B0 AFB50054 */ sw $s5, 0x54($sp) -/* 0472E4 7F0127B4 AFB40050 */ sw $s4, 0x50($sp) -/* 0472E8 7F0127B8 AFB3004C */ sw $s3, 0x4c($sp) -/* 0472EC 7F0127BC AFB20048 */ sw $s2, 0x48($sp) -/* 0472F0 7F0127C0 AFB00040 */ sw $s0, 0x40($sp) -/* 0472F4 7F0127C4 0FC040A4 */ jal get_selected_num_players -/* 0472F8 7F0127C8 F7B40038 */ sdc1 $f20, 0x38($sp) -/* 0472FC 7F0127CC AFA200E4 */ sw $v0, 0xe4($sp) -/* 047300 7F0127D0 02202025 */ move $a0, $s1 -/* 047304 7F0127D4 00002825 */ move $a1, $zero -/* 047308 7F0127D8 00003025 */ move $a2, $zero -/* 04730C 7F0127DC 0C0011B4 */ jal viSetFillColor -/* 047310 7F0127E0 00003825 */ move $a3, $zero -/* 047314 7F0127E4 0C000FBE */ jal viFillScreen -/* 047318 7F0127E8 00402025 */ move $a0, $v0 -/* 04731C 7F0127EC 0FC0357A */ jal frontSetupMenuBackground -/* 047320 7F0127F0 00402025 */ move $a0, $v0 -/* 047324 7F0127F4 0FC2B366 */ jal microcode_constructor -/* 047328 7F0127F8 00402025 */ move $a0, $v0 -/* 04732C 7F0127FC 240E00AB */ li $t6, 171 -/* 047330 7F012800 240F0090 */ li $t7, 144 -/* 047334 7F012804 AFAF0014 */ sw $t7, 0x14($sp) -/* 047338 7F012808 AFAE0010 */ sw $t6, 0x10($sp) -/* 04733C 7F01280C 00402025 */ move $a0, $v0 -/* 047340 7F012810 24050026 */ li $a1, 38 -/* 047344 7F012814 240600A9 */ li $a2, 169 -/* 047348 7F012818 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 04734C 7F01281C 24070184 */ li $a3, 388 -/* 047350 7F012820 8FA800E4 */ lw $t0, 0xe4($sp) -/* 047354 7F012824 00408825 */ move $s1, $v0 -/* 047358 7F012828 02202025 */ move $a0, $s1 -/* 04735C 7F01282C 29010003 */ slti $at, $t0, 3 -/* 047360 7F012830 1420000A */ bnez $at, .L7F01285C -/* 047364 7F012834 240500D4 */ li $a1, 212 -/* 047368 7F012838 24180136 */ li $t8, 310 -/* 04736C 7F01283C 24190080 */ li $t9, 128 -/* 047370 7F012840 AFB90014 */ sw $t9, 0x14($sp) -/* 047374 7F012844 AFB80010 */ sw $t8, 0x10($sp) -/* 047378 7F012848 2406001E */ li $a2, 30 -/* 04737C 7F01284C 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 047380 7F012850 240700D6 */ li $a3, 214 -/* 047384 7F012854 00408825 */ move $s1, $v0 -/* 047388 7F012858 8FA800E4 */ lw $t0, 0xe4($sp) -.L7F01285C: -/* 04738C 7F01285C 19000165 */ blez $t0, .L7F012DF4 -/* 047390 7F012860 3C098007 */ lui $t1, %hi(player_has_selected_char) -/* 047394 7F012864 3C0A8007 */ lui $t2, %hi(mp_char_cur_select_player) -/* 047398 7F012868 3C0B8007 */ lui $t3, %hi(dword_CODE_bss_80069730) -/* 04739C 7F01286C 3C0C8007 */ lui $t4, %hi(mp_char_prev_select_player) -/* 0473A0 7F012870 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0473A4 7F012874 258C9720 */ addiu $t4, %lo(mp_char_prev_select_player) # addiu $t4, $t4, -0x68e0 -/* 0473A8 7F012878 256B9730 */ addiu $t3, %lo(dword_CODE_bss_80069730) # addiu $t3, $t3, -0x68d0 -/* 0473AC 7F01287C 254A9710 */ addiu $t2, %lo(mp_char_cur_select_player) # addiu $t2, $t2, -0x68f0 -/* 0473B0 7F012880 25299740 */ addiu $t1, %lo(player_has_selected_char) # addiu $t1, $t1, -0x68c0 -/* 0473B4 7F012884 3C1E8007 */ lui $fp, %hi(size_mp_select_image_player) -/* 0473B8 7F012888 4481A000 */ mtc1 $at, $f20 -/* 0473BC 7F01288C 27DE9750 */ addiu $fp, %lo(size_mp_select_image_player) # addiu $fp, $fp, -0x68b0 -/* 0473C0 7F012890 AFA90088 */ sw $t1, 0x88($sp) -/* 0473C4 7F012894 AFAA0080 */ sw $t2, 0x80($sp) -/* 0473C8 7F012898 AFAB0074 */ sw $t3, 0x74($sp) -/* 0473CC 7F01289C AFAC0070 */ sw $t4, 0x70($sp) -/* 0473D0 7F0128A0 AFA000E0 */ sw $zero, 0xe0($sp) -.L7F0128A4: -/* 0473D4 7F0128A4 8FA800E4 */ lw $t0, 0xe4($sp) -/* 0473D8 7F0128A8 8FA400E0 */ lw $a0, 0xe0($sp) -/* 0473DC 7F0128AC 24010002 */ li $at, 2 -/* 0473E0 7F0128B0 15010009 */ bne $t0, $at, .L7F0128D8 -/* 0473E4 7F0128B4 308D0001 */ andi $t5, $a0, 1 -/* 0473E8 7F0128B8 24120026 */ li $s2, 38 -/* 0473EC 7F0128BC 18800003 */ blez $a0, .L7F0128CC -/* 0473F0 7F0128C0 2414015E */ li $s4, 350 -/* 0473F4 7F0128C4 10000010 */ b .L7F012908 -/* 0473F8 7F0128C8 241700AA */ li $s7, 170 -.L7F0128CC: -/* 0473FC 7F0128CC 00001825 */ move $v1, $zero -/* 047400 7F0128D0 1000000D */ b .L7F012908 -/* 047404 7F0128D4 2477001E */ addiu $s7, $v1, 0x1e -.L7F0128D8: -/* 047408 7F0128D8 28810002 */ slti $at, $a0, 2 -/* 04740C 7F0128DC 14200003 */ bnez $at, .L7F0128EC -/* 047410 7F0128E0 241400AF */ li $s4, 175 -/* 047414 7F0128E4 10000002 */ b .L7F0128F0 -/* 047418 7F0128E8 2403008C */ li $v1, 140 -.L7F0128EC: -/* 04741C 7F0128EC 00001825 */ move $v1, $zero -.L7F0128F0: -/* 047420 7F0128F0 11A00003 */ beqz $t5, .L7F012900 -/* 047424 7F0128F4 2477001E */ addiu $s7, $v1, 0x1e -/* 047428 7F0128F8 10000002 */ b .L7F012904 -/* 04742C 7F0128FC 240300AF */ li $v1, 175 -.L7F012900: -/* 047430 7F012900 00001825 */ move $v1, $zero -.L7F012904: -/* 047434 7F012904 24720026 */ addiu $s2, $v1, 0x26 -.L7F012908: -/* 047438 7F012908 264E0006 */ addiu $t6, $s2, 6 -/* 04743C 7F01290C 448E2000 */ mtc1 $t6, $f4 -/* 047440 7F012910 26F00005 */ addiu $s0, $s7, 5 -/* 047444 7F012914 44908000 */ mtc1 $s0, $f16 -/* 047448 7F012918 468021A0 */ cvt.s.w $f6, $f4 -/* 04744C 7F01291C 02547821 */ addu $t7, $s2, $s4 -/* 047450 7F012920 3C01ED00 */ lui $at, 0xed00 -/* 047454 7F012924 24510008 */ addiu $s1, $v0, 8 -/* 047458 7F012928 468084A0 */ cvt.s.w $f18, $f16 -/* 04745C 7F01292C 46143202 */ mul.s $f8, $f6, $f20 -/* 047460 7F012930 4600428D */ trunc.w.s $f10, $f8 -/* 047464 7F012934 46149102 */ mul.s $f4, $f18, $f20 -/* 047468 7F012938 44185000 */ mfc1 $t8, $f10 -/* 04746C 7F01293C 00000000 */ nop -/* 047470 7F012940 33190FFF */ andi $t9, $t8, 0xfff -/* 047474 7F012944 4600218D */ trunc.w.s $f6, $f4 -/* 047478 7F012948 00194B00 */ sll $t1, $t9, 0xc -/* 04747C 7F01294C 25F9FFFA */ addiu $t9, $t7, -6 -/* 047480 7F012950 44994000 */ mtc1 $t9, $f8 -/* 047484 7F012954 440C3000 */ mfc1 $t4, $f6 -/* 047488 7F012958 01215025 */ or $t2, $t1, $at -/* 04748C 7F01295C 468042A0 */ cvt.s.w $f10, $f8 -/* 047490 7F012960 318D0FFF */ andi $t5, $t4, 0xfff -/* 047494 7F012964 014D7025 */ or $t6, $t2, $t5 -/* 047498 7F012968 26ED0087 */ addiu $t5, $s7, 0x87 -/* 04749C 7F01296C 448D2000 */ mtc1 $t5, $f4 -/* 0474A0 7F012970 AC4E0000 */ sw $t6, ($v0) -/* 0474A4 7F012974 46145402 */ mul.s $f16, $f10, $f20 -/* 0474A8 7F012978 AFAF008C */ sw $t7, 0x8c($sp) -/* 0474AC 7F01297C 468021A0 */ cvt.s.w $f6, $f4 -/* 0474B0 7F012980 4600848D */ trunc.w.s $f18, $f16 -/* 0474B4 7F012984 46143202 */ mul.s $f8, $f6, $f20 -/* 0474B8 7F012988 440B9000 */ mfc1 $t3, $f18 -/* 0474BC 7F01298C 00000000 */ nop -/* 0474C0 7F012990 316C0FFF */ andi $t4, $t3, 0xfff -/* 0474C4 7F012994 4600428D */ trunc.w.s $f10, $f8 -/* 0474C8 7F012998 000C5300 */ sll $t2, $t4, 0xc -/* 0474CC 7F01299C 440F5000 */ mfc1 $t7, $f10 -/* 0474D0 7F0129A0 00000000 */ nop -/* 0474D4 7F0129A4 31F80FFF */ andi $t8, $t7, 0xfff -/* 0474D8 7F0129A8 0158C825 */ or $t9, $t2, $t8 -/* 0474DC 7F0129AC AC590004 */ sw $t9, 4($v0) -/* 0474E0 7F0129B0 8FA90088 */ lw $t1, 0x88($sp) -/* 0474E4 7F0129B4 AFA400E0 */ sw $a0, 0xe0($sp) -/* 0474E8 7F0129B8 8D2B0000 */ lw $t3, ($t1) -/* 0474EC 7F0129BC 55600034 */ bnezl $t3, .L7F012A90 -/* 0474F0 7F0129C0 8FAE0080 */ lw $t6, 0x80($sp) -/* 0474F4 7F0129C4 8FCC0000 */ lw $t4, ($fp) -/* 0474F8 7F0129C8 AFA400E0 */ sw $a0, 0xe0($sp) -/* 0474FC 7F0129CC 55800030 */ bnezl $t4, .L7F012A90 -/* 047500 7F0129D0 8FAE0080 */ lw $t6, 0x80($sp) -/* 047504 7F0129D4 0FC30776 */ jal langGet -/* 047508 7F0129D8 34049C55 */ li $a0, 40021 -/* 04750C 7F0129DC 3C0D8004 */ lui $t5, %hi(ptrFontZurichBold) -/* 047510 7F0129E0 8DAD0EB4 */ lw $t5, %lo(ptrFontZurichBold)($t5) -/* 047514 7F0129E4 3C078004 */ lui $a3, %hi(ptrFontZurichBoldChars) -/* 047518 7F0129E8 00409825 */ move $s3, $v0 -/* 04751C 7F0129EC 8CE70EB8 */ lw $a3, %lo(ptrFontZurichBoldChars)($a3) -/* 047520 7F0129F0 27A400BC */ addiu $a0, $sp, 0xbc -/* 047524 7F0129F4 27A500B8 */ addiu $a1, $sp, 0xb8 -/* 047528 7F0129F8 00403025 */ move $a2, $v0 -/* 04752C 7F0129FC AFA00014 */ sw $zero, 0x14($sp) -/* 047530 7F012A00 0FC2BA63 */ jal textMeasure -/* 047534 7F012A04 AFAD0010 */ sw $t5, 0x10($sp) -/* 047538 7F012A08 8FAA00B8 */ lw $t2, 0xb8($sp) -/* 04753C 7F012A0C 00147043 */ sra $t6, $s4, 1 -/* 047540 7F012A10 01D27821 */ addu $t7, $t6, $s2 -/* 047544 7F012A14 000AC043 */ sra $t8, $t2, 1 -/* 047548 7F012A18 01F8C823 */ subu $t9, $t7, $t8 -/* 04754C 7F012A1C AFB900B4 */ sw $t9, 0xb4($sp) -/* 047550 7F012A20 AFB000B0 */ sw $s0, 0xb0($sp) -/* 047554 7F012A24 0FC2B366 */ jal microcode_constructor -/* 047558 7F012A28 02202025 */ move $a0, $s1 -/* 04755C 7F012A2C 0C001107 */ jal viGetX -/* 047560 7F012A30 00408825 */ move $s1, $v0 -/* 047564 7F012A34 00028400 */ sll $s0, $v0, 0x10 -/* 047568 7F012A38 00104C03 */ sra $t1, $s0, 0x10 -/* 04756C 7F012A3C 0C00110B */ jal viGetY -/* 047570 7F012A40 01208025 */ move $s0, $t1 -/* 047574 7F012A44 3C0B8004 */ lui $t3, %hi(ptrFontZurichBoldChars) -/* 047578 7F012A48 3C0C8004 */ lui $t4, %hi(ptrFontZurichBold) -/* 04757C 7F012A4C 8D8C0EB4 */ lw $t4, %lo(ptrFontZurichBold)($t4) -/* 047580 7F012A50 8D6B0EB8 */ lw $t3, %lo(ptrFontZurichBoldChars)($t3) -/* 047584 7F012A54 240D00FF */ li $t5, 255 -/* 047588 7F012A58 AFAD0018 */ sw $t5, 0x18($sp) -/* 04758C 7F012A5C 02202025 */ move $a0, $s1 -/* 047590 7F012A60 27A500B4 */ addiu $a1, $sp, 0xb4 -/* 047594 7F012A64 27A600B0 */ addiu $a2, $sp, 0xb0 -/* 047598 7F012A68 02603825 */ move $a3, $s3 -/* 04759C 7F012A6C AFB0001C */ sw $s0, 0x1c($sp) -/* 0475A0 7F012A70 AFA20020 */ sw $v0, 0x20($sp) -/* 0475A4 7F012A74 AFA00024 */ sw $zero, 0x24($sp) -/* 0475A8 7F012A78 AFA00028 */ sw $zero, 0x28($sp) -/* 0475AC 7F012A7C AFAC0014 */ sw $t4, 0x14($sp) -/* 0475B0 7F012A80 0FC025D8 */ jal frontPrintText -/* 0475B4 7F012A84 AFAB0010 */ sw $t3, 0x10($sp) -/* 0475B8 7F012A88 00408825 */ move $s1, $v0 -/* 0475BC 7F012A8C 8FAE0080 */ lw $t6, 0x80($sp) -.L7F012A90: -/* 0475C0 7F012A90 3C048003 */ lui $a0, %hi(mp_chr_setup) -/* 0475C4 7F012A94 0014C043 */ sra $t8, $s4, 1 -/* 0475C8 7F012A98 8DCA0000 */ lw $t2, ($t6) -/* 0475CC 7F012A9C 0312B021 */ addu $s6, $t8, $s2 -/* 0475D0 7F012AA0 000A7880 */ sll $t7, $t2, 2 -/* 0475D4 7F012AA4 01EA7823 */ subu $t7, $t7, $t2 -/* 0475D8 7F012AA8 000F7880 */ sll $t7, $t7, 2 -/* 0475DC 7F012AAC 008F2021 */ addu $a0, $a0, $t7 -/* 0475E0 7F012AB0 0FC30776 */ jal langGet -/* 0475E4 7F012AB4 9484B198 */ lhu $a0, %lo(mp_chr_setup)($a0) -/* 0475E8 7F012AB8 3C198004 */ lui $t9, %hi(ptrFontZurichBold) -/* 0475EC 7F012ABC 8F390EB4 */ lw $t9, %lo(ptrFontZurichBold)($t9) -/* 0475F0 7F012AC0 3C078004 */ lui $a3, %hi(ptrFontZurichBoldChars) -/* 0475F4 7F012AC4 00409825 */ move $s3, $v0 -/* 0475F8 7F012AC8 8CE70EB8 */ lw $a3, %lo(ptrFontZurichBoldChars)($a3) -/* 0475FC 7F012ACC 27A400A8 */ addiu $a0, $sp, 0xa8 -/* 047600 7F012AD0 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 047604 7F012AD4 00403025 */ move $a2, $v0 -/* 047608 7F012AD8 AFA00014 */ sw $zero, 0x14($sp) -/* 04760C 7F012ADC 0FC2BA63 */ jal textMeasure -/* 047610 7F012AE0 AFB90010 */ sw $t9, 0x10($sp) -/* 047614 7F012AE4 8FA900A4 */ lw $t1, 0xa4($sp) -/* 047618 7F012AE8 26ED0078 */ addiu $t5, $s7, 0x78 -/* 04761C 7F012AEC AFAD009C */ sw $t5, 0x9c($sp) -/* 047620 7F012AF0 00095843 */ sra $t3, $t1, 1 -/* 047624 7F012AF4 02CB6023 */ subu $t4, $s6, $t3 -/* 047628 7F012AF8 AFAC00A0 */ sw $t4, 0xa0($sp) -/* 04762C 7F012AFC 0FC2B366 */ jal microcode_constructor -/* 047630 7F012B00 02202025 */ move $a0, $s1 -/* 047634 7F012B04 0C001107 */ jal viGetX -/* 047638 7F012B08 00408825 */ move $s1, $v0 -/* 04763C 7F012B0C 00028400 */ sll $s0, $v0, 0x10 -/* 047640 7F012B10 00107403 */ sra $t6, $s0, 0x10 -/* 047644 7F012B14 0C00110B */ jal viGetY -/* 047648 7F012B18 01C08025 */ move $s0, $t6 -/* 04764C 7F012B1C 3C0A8004 */ lui $t2, %hi(ptrFontZurichBoldChars) -/* 047650 7F012B20 3C0F8004 */ lui $t7, %hi(ptrFontZurichBold) -/* 047654 7F012B24 8DEF0EB4 */ lw $t7, %lo(ptrFontZurichBold)($t7) -/* 047658 7F012B28 8D4A0EB8 */ lw $t2, %lo(ptrFontZurichBoldChars)($t2) -/* 04765C 7F012B2C 241800FF */ li $t8, 255 -/* 047660 7F012B30 AFB80018 */ sw $t8, 0x18($sp) -/* 047664 7F012B34 02202025 */ move $a0, $s1 -/* 047668 7F012B38 27A500A0 */ addiu $a1, $sp, 0xa0 -/* 04766C 7F012B3C 27A6009C */ addiu $a2, $sp, 0x9c -/* 047670 7F012B40 02603825 */ move $a3, $s3 -/* 047674 7F012B44 AFB0001C */ sw $s0, 0x1c($sp) -/* 047678 7F012B48 AFA20020 */ sw $v0, 0x20($sp) -/* 04767C 7F012B4C AFA00024 */ sw $zero, 0x24($sp) -/* 047680 7F012B50 AFA00028 */ sw $zero, 0x28($sp) -/* 047684 7F012B54 AFAF0014 */ sw $t7, 0x14($sp) -/* 047688 7F012B58 0FC025D8 */ jal frontPrintText -/* 04768C 7F012B5C AFAA0010 */ sw $t2, 0x10($sp) -/* 047690 7F012B60 8FB90074 */ lw $t9, 0x74($sp) -/* 047694 7F012B64 8FAB0070 */ lw $t3, 0x70($sp) -/* 047698 7F012B68 8FB4008C */ lw $s4, 0x8c($sp) -/* 04769C 7F012B6C 8F290000 */ lw $t1, ($t9) -/* 0476A0 7F012B70 26F50046 */ addiu $s5, $s7, 0x46 -/* 0476A4 7F012B74 AFB50010 */ sw $s5, 0x10($sp) -/* 0476A8 7F012B78 8FCD0000 */ lw $t5, ($fp) -/* 0476AC 7F012B7C 8D6C0000 */ lw $t4, ($t3) -/* 0476B0 7F012B80 2653000D */ addiu $s3, $s2, 0xd -/* 0476B4 7F012B84 2694FFF2 */ addiu $s4, $s4, -0xe -/* 0476B8 7F012B88 02803025 */ move $a2, $s4 -/* 0476BC 7F012B8C 02602825 */ move $a1, $s3 -/* 0476C0 7F012B90 00402025 */ move $a0, $v0 -/* 0476C4 7F012B94 02C93823 */ subu $a3, $s6, $t1 -/* 0476C8 7F012B98 AFAD0018 */ sw $t5, 0x18($sp) -/* 0476CC 7F012B9C 0FC048C7 */ jal frontRenderCharacterPortrait -/* 0476D0 7F012BA0 AFAC0014 */ sw $t4, 0x14($sp) -/* 0476D4 7F012BA4 8FAE0088 */ lw $t6, 0x88($sp) -/* 0476D8 7F012BA8 00408825 */ move $s1, $v0 -/* 0476DC 7F012BAC 8FB80070 */ lw $t8, 0x70($sp) -/* 0476E0 7F012BB0 8DCA0000 */ lw $t2, ($t6) -/* 0476E4 7F012BB4 8FA90080 */ lw $t1, 0x80($sp) -/* 0476E8 7F012BB8 55400005 */ bnezl $t2, .L7F012BD0 -/* 0476EC 7F012BBC 8F190000 */ lw $t9, ($t8) -/* 0476F0 7F012BC0 8FCF0000 */ lw $t7, ($fp) -/* 0476F4 7F012BC4 51E00006 */ beql $t7, $zero, .L7F012BE0 -/* 0476F8 7F012BC8 8FAC0070 */ lw $t4, 0x70($sp) -/* 0476FC 7F012BCC 8F190000 */ lw $t9, ($t8) -.L7F012BD0: -/* 047700 7F012BD0 8D2B0000 */ lw $t3, ($t1) -/* 047704 7F012BD4 532B0076 */ beql $t9, $t3, .L7F012DB0 -/* 047708 7F012BD8 8FAB0088 */ lw $t3, 0x88($sp) -/* 04770C 7F012BDC 8FAC0070 */ lw $t4, 0x70($sp) -.L7F012BE0: -/* 047710 7F012BE0 02202025 */ move $a0, $s1 -/* 047714 7F012BE4 02602825 */ move $a1, $s3 -/* 047718 7F012BE8 8D900000 */ lw $s0, ($t4) -/* 04771C 7F012BEC 02803025 */ move $a2, $s4 -/* 047720 7F012BF0 8FAD0074 */ lw $t5, 0x74($sp) -/* 047724 7F012BF4 2A010003 */ slti $at, $s0, 3 -/* 047728 7F012BF8 1420000C */ bnez $at, .L7F012C2C -/* 04772C 7F012BFC 260AFFFD */ addiu $t2, $s0, -3 -/* 047730 7F012C00 8DAE0000 */ lw $t6, ($t5) -/* 047734 7F012C04 8FCF0000 */ lw $t7, ($fp) -/* 047738 7F012C08 AFAA0014 */ sw $t2, 0x14($sp) -/* 04773C 7F012C0C 02CE3823 */ subu $a3, $s6, $t6 -/* 047740 7F012C10 24E7FF04 */ addiu $a3, $a3, -0xfc -/* 047744 7F012C14 AFB50010 */ sw $s5, 0x10($sp) -/* 047748 7F012C18 0FC048C7 */ jal frontRenderCharacterPortrait -/* 04774C 7F012C1C AFAF0018 */ sw $t7, 0x18($sp) -/* 047750 7F012C20 8FB80070 */ lw $t8, 0x70($sp) -/* 047754 7F012C24 00408825 */ move $s1, $v0 -/* 047758 7F012C28 8F100000 */ lw $s0, ($t8) -.L7F012C2C: -/* 04775C 7F012C2C 2A010002 */ slti $at, $s0, 2 -/* 047760 7F012C30 14200010 */ bnez $at, .L7F012C74 -/* 047764 7F012C34 02202025 */ move $a0, $s1 -/* 047768 7F012C38 8FA90074 */ lw $t1, 0x74($sp) -/* 04776C 7F012C3C 8FCC0000 */ lw $t4, ($fp) -/* 047770 7F012C40 260BFFFE */ addiu $t3, $s0, -2 -/* 047774 7F012C44 8D390000 */ lw $t9, ($t1) -/* 047778 7F012C48 AFAB0014 */ sw $t3, 0x14($sp) -/* 04777C 7F012C4C AFB50010 */ sw $s5, 0x10($sp) -/* 047780 7F012C50 02D93823 */ subu $a3, $s6, $t9 -/* 047784 7F012C54 24E7FF58 */ addiu $a3, $a3, -0xa8 -/* 047788 7F012C58 02602825 */ move $a1, $s3 -/* 04778C 7F012C5C 02803025 */ move $a2, $s4 -/* 047790 7F012C60 0FC048C7 */ jal frontRenderCharacterPortrait -/* 047794 7F012C64 AFAC0018 */ sw $t4, 0x18($sp) -/* 047798 7F012C68 8FAD0070 */ lw $t5, 0x70($sp) -/* 04779C 7F012C6C 00408825 */ move $s1, $v0 -/* 0477A0 7F012C70 8DB00000 */ lw $s0, ($t5) -.L7F012C74: -/* 0477A4 7F012C74 1A000010 */ blez $s0, .L7F012CB8 -/* 0477A8 7F012C78 02202025 */ move $a0, $s1 -/* 0477AC 7F012C7C 8FAE0074 */ lw $t6, 0x74($sp) -/* 0477B0 7F012C80 8FD80000 */ lw $t8, ($fp) -/* 0477B4 7F012C84 260FFFFF */ addiu $t7, $s0, -1 -/* 0477B8 7F012C88 8DCA0000 */ lw $t2, ($t6) -/* 0477BC 7F012C8C AFAF0014 */ sw $t7, 0x14($sp) -/* 0477C0 7F012C90 AFB50010 */ sw $s5, 0x10($sp) -/* 0477C4 7F012C94 02CA3823 */ subu $a3, $s6, $t2 -/* 0477C8 7F012C98 24E7FFAC */ addiu $a3, $a3, -0x54 -/* 0477CC 7F012C9C 02602825 */ move $a1, $s3 -/* 0477D0 7F012CA0 02803025 */ move $a2, $s4 -/* 0477D4 7F012CA4 0FC048C7 */ jal frontRenderCharacterPortrait -/* 0477D8 7F012CA8 AFB80018 */ sw $t8, 0x18($sp) -/* 0477DC 7F012CAC 8FA90070 */ lw $t1, 0x70($sp) -/* 0477E0 7F012CB0 00408825 */ move $s1, $v0 -/* 0477E4 7F012CB4 8D300000 */ lw $s0, ($t1) -.L7F012CB8: -/* 0477E8 7F012CB8 3C038003 */ lui $v1, %hi(num_chars_selectable_mp) -/* 0477EC 7F012CBC 8C63B194 */ lw $v1, %lo(num_chars_selectable_mp)($v1) -/* 0477F0 7F012CC0 02202025 */ move $a0, $s1 -/* 0477F4 7F012CC4 02602825 */ move $a1, $s3 -/* 0477F8 7F012CC8 2479FFFF */ addiu $t9, $v1, -1 -/* 0477FC 7F012CCC 0219082A */ slt $at, $s0, $t9 -/* 047800 7F012CD0 10200010 */ beqz $at, .L7F012D14 -/* 047804 7F012CD4 02803025 */ move $a2, $s4 -/* 047808 7F012CD8 8FAB0074 */ lw $t3, 0x74($sp) -/* 04780C 7F012CDC 8FCE0000 */ lw $t6, ($fp) -/* 047810 7F012CE0 260D0001 */ addiu $t5, $s0, 1 -/* 047814 7F012CE4 8D6C0000 */ lw $t4, ($t3) -/* 047818 7F012CE8 AFAD0014 */ sw $t5, 0x14($sp) -/* 04781C 7F012CEC AFB50010 */ sw $s5, 0x10($sp) -/* 047820 7F012CF0 02CC3823 */ subu $a3, $s6, $t4 -/* 047824 7F012CF4 24E70054 */ addiu $a3, $a3, 0x54 -/* 047828 7F012CF8 0FC048C7 */ jal frontRenderCharacterPortrait -/* 04782C 7F012CFC AFAE0018 */ sw $t6, 0x18($sp) -/* 047830 7F012D00 8FAA0070 */ lw $t2, 0x70($sp) -/* 047834 7F012D04 3C038003 */ lui $v1, %hi(num_chars_selectable_mp) -/* 047838 7F012D08 8C63B194 */ lw $v1, %lo(num_chars_selectable_mp)($v1) -/* 04783C 7F012D0C 00408825 */ move $s1, $v0 -/* 047840 7F012D10 8D500000 */ lw $s0, ($t2) -.L7F012D14: -/* 047844 7F012D14 246FFFFE */ addiu $t7, $v1, -2 -/* 047848 7F012D18 020F082A */ slt $at, $s0, $t7 -/* 04784C 7F012D1C 10200012 */ beqz $at, .L7F012D68 -/* 047850 7F012D20 02202025 */ move $a0, $s1 -/* 047854 7F012D24 8FB80074 */ lw $t8, 0x74($sp) -/* 047858 7F012D28 8FCB0000 */ lw $t3, ($fp) -/* 04785C 7F012D2C 26190002 */ addiu $t9, $s0, 2 -/* 047860 7F012D30 8F090000 */ lw $t1, ($t8) -/* 047864 7F012D34 AFB90014 */ sw $t9, 0x14($sp) -/* 047868 7F012D38 AFB50010 */ sw $s5, 0x10($sp) -/* 04786C 7F012D3C 02C93823 */ subu $a3, $s6, $t1 -/* 047870 7F012D40 24E700A8 */ addiu $a3, $a3, 0xa8 -/* 047874 7F012D44 02602825 */ move $a1, $s3 -/* 047878 7F012D48 02803025 */ move $a2, $s4 -/* 04787C 7F012D4C 0FC048C7 */ jal frontRenderCharacterPortrait -/* 047880 7F012D50 AFAB0018 */ sw $t3, 0x18($sp) -/* 047884 7F012D54 8FAC0070 */ lw $t4, 0x70($sp) -/* 047888 7F012D58 3C038003 */ lui $v1, %hi(num_chars_selectable_mp) -/* 04788C 7F012D5C 8C63B194 */ lw $v1, %lo(num_chars_selectable_mp)($v1) -/* 047890 7F012D60 00408825 */ move $s1, $v0 -/* 047894 7F012D64 8D900000 */ lw $s0, ($t4) -.L7F012D68: -/* 047898 7F012D68 246DFFFD */ addiu $t5, $v1, -3 -/* 04789C 7F012D6C 020D082A */ slt $at, $s0, $t5 -/* 0478A0 7F012D70 1020000E */ beqz $at, .L7F012DAC -/* 0478A4 7F012D74 02202025 */ move $a0, $s1 -/* 0478A8 7F012D78 8FAE0074 */ lw $t6, 0x74($sp) -/* 0478AC 7F012D7C 8FD80000 */ lw $t8, ($fp) -/* 0478B0 7F012D80 260F0003 */ addiu $t7, $s0, 3 -/* 0478B4 7F012D84 8DCA0000 */ lw $t2, ($t6) -/* 0478B8 7F012D88 AFAF0014 */ sw $t7, 0x14($sp) -/* 0478BC 7F012D8C AFB50010 */ sw $s5, 0x10($sp) -/* 0478C0 7F012D90 02CA3823 */ subu $a3, $s6, $t2 -/* 0478C4 7F012D94 24E700FC */ addiu $a3, $a3, 0xfc -/* 0478C8 7F012D98 02602825 */ move $a1, $s3 -/* 0478CC 7F012D9C 02803025 */ move $a2, $s4 -/* 0478D0 7F012DA0 0FC048C7 */ jal frontRenderCharacterPortrait -/* 0478D4 7F012DA4 AFB80018 */ sw $t8, 0x18($sp) -/* 0478D8 7F012DA8 00408825 */ move $s1, $v0 -.L7F012DAC: -/* 0478DC 7F012DAC 8FAB0088 */ lw $t3, 0x88($sp) -.L7F012DB0: -/* 0478E0 7F012DB0 8FA900E0 */ lw $t1, 0xe0($sp) -/* 0478E4 7F012DB4 8FAD0080 */ lw $t5, 0x80($sp) -/* 0478E8 7F012DB8 8FAA0074 */ lw $t2, 0x74($sp) -/* 0478EC 7F012DBC 8FB80070 */ lw $t8, 0x70($sp) -/* 0478F0 7F012DC0 256C0004 */ addiu $t4, $t3, 4 -/* 0478F4 7F012DC4 8FAB00E4 */ lw $t3, 0xe4($sp) -/* 0478F8 7F012DC8 25390001 */ addiu $t9, $t1, 1 -/* 0478FC 7F012DCC 25AE0004 */ addiu $t6, $t5, 4 -/* 047900 7F012DD0 254F0004 */ addiu $t7, $t2, 4 -/* 047904 7F012DD4 27090004 */ addiu $t1, $t8, 4 -/* 047908 7F012DD8 AFA90070 */ sw $t1, 0x70($sp) -/* 04790C 7F012DDC AFAF0074 */ sw $t7, 0x74($sp) -/* 047910 7F012DE0 AFAE0080 */ sw $t6, 0x80($sp) -/* 047914 7F012DE4 AFB900E0 */ sw $t9, 0xe0($sp) -/* 047918 7F012DE8 AFAC0088 */ sw $t4, 0x88($sp) -/* 04791C 7F012DEC 172BFEAD */ bne $t9, $t3, .L7F0128A4 -/* 047920 7F012DF0 27DE0004 */ addiu $fp, $fp, 4 -.L7F012DF4: -/* 047924 7F012DF4 0FC2B3BC */ jal combiner_bayer_lod_perspective -/* 047928 7F012DF8 02202025 */ move $a0, $s1 -/* 04792C 7F012DFC 8FBF0064 */ lw $ra, 0x64($sp) -/* 047930 7F012E00 D7B40038 */ ldc1 $f20, 0x38($sp) -/* 047934 7F012E04 8FB00040 */ lw $s0, 0x40($sp) -/* 047938 7F012E08 8FB10044 */ lw $s1, 0x44($sp) -/* 04793C 7F012E0C 8FB20048 */ lw $s2, 0x48($sp) -/* 047940 7F012E10 8FB3004C */ lw $s3, 0x4c($sp) -/* 047944 7F012E14 8FB40050 */ lw $s4, 0x50($sp) -/* 047948 7F012E18 8FB50054 */ lw $s5, 0x54($sp) -/* 04794C 7F012E1C 8FB60058 */ lw $s6, 0x58($sp) -/* 047950 7F012E20 8FB7005C */ lw $s7, 0x5c($sp) -/* 047954 7F012E24 8FBE0060 */ lw $fp, 0x60($sp) -/* 047958 7F012E28 03E00008 */ jr $ra -/* 04795C 7F012E2C 27BD00E8 */ addiu $sp, $sp, 0xe8 -) -#endif //******************************************************************************************************** @@ -5868,14 +5301,12 @@ void init_menu10_mphandicap(void) load_walletbond(); } -void update_menu10_mphandicap(void) { +void update_menu10_mphandicap(void) +{ return; } - - - // Address 0x7F012EC4 NTSC void interface_menu10_mphandicap(void) { @@ -5885,8 +5316,8 @@ void interface_menu10_mphandicap(void) sp44 = get_selected_num_players(); var_fp = 0; - viSetFovY(60.0f); - viSetAspect(1.3333334f); + viSetFovY(FOV_Y_F); + viSetAspect(ASPECT_RATIO_SD); viSetZRange(100.0f, 10000.0f); viSetUseZBuf(0); @@ -6086,8 +5517,8 @@ void interface_menu11_mpcontrols(void) sp44 = get_selected_num_players(); var_fp = 0; - viSetFovY(60.0f); - viSetAspect(1.3333334f); + viSetFovY(FOV_Y_F); + viSetAspect(ASPECT_RATIO_SD); viSetZRange(100.0f, 10000.0f); viSetUseZBuf(0); @@ -6780,40 +6211,41 @@ void set_players_team_or_scenario_item_flag(int player,s32 flag) //******************************************************************************************************** //MULTIPLAYER TEAM SELECT //******************************************************************************************************** + void init_menu14_mpteamsel(void) { - tab_start_selected = FALSE; - tab_next_selected = FALSE; - tab_prev_selected = FALSE; - tab_prev_highlight = FALSE; - tab_next_highlight = FALSE; - tab_start_highlight = FALSE; - if (scenario == SCENARIO_2v1) { - teamsize = 2; - } - else { - teamsize = 3; - } - D_8002B560 = 0; - load_walletbond(); + tab_start_selected = FALSE; + tab_next_selected = FALSE; + tab_prev_selected = FALSE; + tab_prev_highlight = FALSE; + tab_next_highlight = FALSE; + tab_start_highlight = FALSE; + + if (scenario == SCENARIO_2v1) { + teamsize = 2; + } + else { + teamsize = 3; + } + + D_8002B560 = 0; + load_walletbond(); } -void update_menu14_mpteams(void) { -return; +void update_menu14_mpteams(void) +{ + return; } - - - // Address 0x7F014D48 NTSC void interface_menu14_mpteams(void) { s32 i; s32 var_a1; - viSetFovY(60.0f); - viSetAspect(1.3333334f); + viSetFovY(FOV_Y_F); + viSetAspect(ASPECT_RATIO_SD); viSetZRange(100.0f, 10000.0f); viSetUseZBuf(0); @@ -6932,95 +6364,103 @@ void interface_menu14_mpteams(void) } -// Address 0x7F015138 NTSC -#ifdef NONMATCHING -// https://decomp.me/scratch/N4sd9 99.55% -// Just down to regalloc. Need a break from this one, not sure how much is fake match improvement. -Gfx * constructor_menu14_mpteams(Gfx *DL) +/** + * Address: 7F015138 + */ +Gfx *constructor_menu14_mpteams(Gfx *DL) { - s32 spCC; - s32 i; - s32 var_v0; - s32 temp_s0; - s32 temp_s2; - s32 var_s0; - s32 spB4; - s32 temp_s6; - u8 *text; - s32 var_s2; - s32 spA4; - s32 spA0; - s32 sp9C; - s32 sp98; + s32 numPlayers; + s32 playerIndex; + s32 layoutOffset; + s32 titleY; + s32 rectRightScaled; + s32 useFirstTeam; + s32 centerX; + s32 rowTop; + char *text; + s32 textColour; + s32 titleHeight; + s32 titleWidth; + s32 titleX; + s32 titleYPos; s32 padding1; - s32 sp90; - s32 sp8C; - s32 sp88; - s32 sp84; - s32 padding2; + s32 textHeight; + s32 textWidth; + s32 textX; + s32 textY; + char *titleText; - spCC = get_selected_num_players(); + numPlayers = get_selected_num_players(); - DL = viSetFillColor(DL,0,0,0); + DL = viSetFillColor(DL, 0, 0, 0); DL = viFillScreen(DL); DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); - DL = microcode_constructor_related_to_menus(DL, 0x26, 0xA9, 0x184, 0xAB, 0x90); - if (spCC >= 3) + if (numPlayers >= 3) { DL = microcode_constructor_related_to_menus(DL, 0xD4, 0x1E, 0xD6, 0x136, 0x80); } - for (i = 0; i < spCC; i++) + for (playerIndex = 0; playerIndex < numPlayers; playerIndex++) { - var_v0 = (i >= 2) ? 0x8C : 0; - temp_s6 = (var_v0) + 0x1E; + layoutOffset = (0, (playerIndex >= 2) ? 0x8C : 0); + rowTop = layoutOffset + 0x1E; + layoutOffset = ((playerIndex & 1) ? 0xAF : 0) + 0; - // nonmatching: Problem line. - var_v0 = ((i & 1) ? 0xAF : 0) + 0; + gDPSetScissor(DL++, G_SC_NON_INTERLACE, layoutOffset + 0x2c, rowTop + 5, layoutOffset + 0xcf, rowTop + 0x87); - gDPSetScissor(DL++, G_SC_NON_INTERLACE, (var_v0 + 0x2c), temp_s6 + 5, var_v0 + 0xcf, temp_s6 + 0x87); + centerX = layoutOffset + 0x7d; - // nonmatching: Problem line ?? - spB4 = var_v0 + 0x7d; - - if (i == 0) + if (playerIndex == 0) { - text = langGet(0x9C58); - textMeasure(&spA4, &spA0, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + text = langGet(getStringID(LTITLE, TITLE_STR_88_SELECTTEAMS)); // "Select Teams" + titleText = text; - sp98 = temp_s6 + 5; - sp9C = spB4 - (spA0 >> 1); + textMeasure(&titleHeight, &titleWidth, titleText, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - DL = frontPrintText(DL, &sp9C, &sp98, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + titleYPos = rowTop + 5; + titleX = centerX - (titleWidth >> 1); + + DL = frontPrintText(DL, &titleX, &titleYPos, titleText, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } - if (scenario == 5) + if (scenario == SCENARIO_2v2) { - var_s0 = i == 0 || i == teamsize; + useFirstTeam = (playerIndex == 0) || (playerIndex == teamsize); } else { - var_s0 = i != teamsize; + useFirstTeam = playerIndex != teamsize; } - text = var_s0 ? langGet(0x9C59) : langGet(0x9C5A); - var_s2 = var_s0 ? -0xFFFF01 : 0xFFFF; - - // nonmatching: Basic block, yes or no ?? - if (1) + if (useFirstTeam) { - textMeasure(&sp90, &sp8C, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + text = langGet(getStringID(LTITLE, TITLE_STR_89_RED)); // "Red Team" + } + else + { + text = langGet(getStringID(LTITLE, TITLE_STR_90_BLUE)); // "Blue Team" + } - sp88 = spB4 - (sp8C >> 1); - sp84 = (temp_s6 - (sp90 >> 1)) + 0x46; + if (useFirstTeam) + { + textColour = 0xFF0000FF; + } + else + { + textColour = 0x0000FFFF; + } - if ((i != teamsize) || ((i == teamsize) && (D_8002B560 < 0xA))) - { - DL = frontPrintText(DL, &sp88, &sp84, text, ptrFontZurichBoldChars, ptrFontZurichBold, var_s2, viGetX(), viGetY(), 0, 0); - } + textMeasure(&textHeight, &textWidth, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + + textX = centerX - (textWidth >> 1); + textY = (rowTop - (textHeight >> 1)) + 0x46; + + if ((playerIndex != teamsize) || ((playerIndex == teamsize) && (((s32) D_8002B560) < 0xA))) + { + DL = frontPrintText(DL, &textX, &textY, text, ptrFontZurichBoldChars, ptrFontZurichBold, textColour, viGetX(), viGetY(), 0, 0); } } @@ -7029,278 +6469,6 @@ Gfx * constructor_menu14_mpteams(Gfx *DL) return DL; } -#else -GLOBAL_ASM( -.text -glabel constructor_menu14_mpteams -/* 049C68 7F015138 27BDFF30 */ addiu $sp, $sp, -0xd0 -/* 049C6C 7F01513C AFBF0064 */ sw $ra, 0x64($sp) -/* 049C70 7F015140 AFB50054 */ sw $s5, 0x54($sp) -/* 049C74 7F015144 0080A825 */ move $s5, $a0 -/* 049C78 7F015148 AFBE0060 */ sw $fp, 0x60($sp) -/* 049C7C 7F01514C AFB7005C */ sw $s7, 0x5c($sp) -/* 049C80 7F015150 AFB60058 */ sw $s6, 0x58($sp) -/* 049C84 7F015154 AFB40050 */ sw $s4, 0x50($sp) -/* 049C88 7F015158 AFB3004C */ sw $s3, 0x4c($sp) -/* 049C8C 7F01515C AFB20048 */ sw $s2, 0x48($sp) -/* 049C90 7F015160 AFB10044 */ sw $s1, 0x44($sp) -/* 049C94 7F015164 AFB00040 */ sw $s0, 0x40($sp) -/* 049C98 7F015168 0FC040A4 */ jal get_selected_num_players -/* 049C9C 7F01516C F7B40038 */ sdc1 $f20, 0x38($sp) -/* 049CA0 7F015170 AFA200CC */ sw $v0, 0xcc($sp) -/* 049CA4 7F015174 02A02025 */ move $a0, $s5 -/* 049CA8 7F015178 00002825 */ move $a1, $zero -/* 049CAC 7F01517C 00003025 */ move $a2, $zero -/* 049CB0 7F015180 0C0011B4 */ jal viSetFillColor -/* 049CB4 7F015184 00003825 */ move $a3, $zero -/* 049CB8 7F015188 0C000FBE */ jal viFillScreen -/* 049CBC 7F01518C 00402025 */ move $a0, $v0 -/* 049CC0 7F015190 0FC0357A */ jal frontSetupMenuBackground -/* 049CC4 7F015194 00402025 */ move $a0, $v0 -/* 049CC8 7F015198 0FC2B366 */ jal microcode_constructor -/* 049CCC 7F01519C 00402025 */ move $a0, $v0 -/* 049CD0 7F0151A0 240E00AB */ li $t6, 171 -/* 049CD4 7F0151A4 240F0090 */ li $t7, 144 -/* 049CD8 7F0151A8 AFAF0014 */ sw $t7, 0x14($sp) -/* 049CDC 7F0151AC AFAE0010 */ sw $t6, 0x10($sp) -/* 049CE0 7F0151B0 00402025 */ move $a0, $v0 -/* 049CE4 7F0151B4 24050026 */ li $a1, 38 -/* 049CE8 7F0151B8 240600A9 */ li $a2, 169 -/* 049CEC 7F0151BC 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 049CF0 7F0151C0 24070184 */ li $a3, 388 -/* 049CF4 7F0151C4 8FB800CC */ lw $t8, 0xcc($sp) -/* 049CF8 7F0151C8 0040A825 */ move $s5, $v0 -/* 049CFC 7F0151CC 00402025 */ move $a0, $v0 -/* 049D00 7F0151D0 2B010003 */ slti $at, $t8, 3 -/* 049D04 7F0151D4 14200009 */ bnez $at, .L7F0151FC -/* 049D08 7F0151D8 240500D4 */ li $a1, 212 -/* 049D0C 7F0151DC 24190136 */ li $t9, 310 -/* 049D10 7F0151E0 24080080 */ li $t0, 128 -/* 049D14 7F0151E4 AFA80014 */ sw $t0, 0x14($sp) -/* 049D18 7F0151E8 AFB90010 */ sw $t9, 0x10($sp) -/* 049D1C 7F0151EC 2406001E */ li $a2, 30 -/* 049D20 7F0151F0 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 049D24 7F0151F4 240700D6 */ li $a3, 214 -/* 049D28 7F0151F8 0040A825 */ move $s5, $v0 -.L7F0151FC: -/* 049D2C 7F0151FC 8FA900CC */ lw $t1, 0xcc($sp) -/* 049D30 7F015200 0000A025 */ move $s4, $zero -/* 049D34 7F015204 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 049D38 7F015208 192000B2 */ blez $t1, .L7F0154D4 -/* 049D3C 7F01520C 3C178004 */ lui $s7, %hi(ptrFontZurichBoldChars) -/* 049D40 7F015210 3C1E8004 */ lui $fp, %hi(ptrFontZurichBold) -/* 049D44 7F015214 4481A000 */ mtc1 $at, $f20 -/* 049D48 7F015218 27DE0EB4 */ addiu $fp, %lo(ptrFontZurichBold) # addiu $fp, $fp, 0xeb4 -/* 049D4C 7F01521C 26F70EB8 */ addiu $s7, %lo(ptrFontZurichBoldChars) # addiu $s7, $s7, 0xeb8 -/* 049D50 7F015220 2A810002 */ slti $at, $s4, 2 -.L7F015224: -/* 049D54 7F015224 14200003 */ bnez $at, .L7F015234 -/* 049D58 7F015228 328A0001 */ andi $t2, $s4, 1 -/* 049D5C 7F01522C 10000002 */ b .L7F015238 -/* 049D60 7F015230 2402008C */ li $v0, 140 -.L7F015234: -/* 049D64 7F015234 00001025 */ move $v0, $zero -.L7F015238: -/* 049D68 7F015238 11400003 */ beqz $t2, .L7F015248 -/* 049D6C 7F01523C 2456001E */ addiu $s6, $v0, 0x1e -/* 049D70 7F015240 10000002 */ b .L7F01524C -/* 049D74 7F015244 240200AF */ li $v0, 175 -.L7F015248: -/* 049D78 7F015248 00001025 */ move $v0, $zero -.L7F01524C: -/* 049D7C 7F01524C 244B002C */ addiu $t3, $v0, 0x2c -/* 049D80 7F015250 448B2000 */ mtc1 $t3, $f4 -/* 049D84 7F015254 26D00005 */ addiu $s0, $s6, 5 -/* 049D88 7F015258 44908000 */ mtc1 $s0, $f16 -/* 049D8C 7F01525C 468021A0 */ cvt.s.w $f6, $f4 -/* 049D90 7F015260 244B00CF */ addiu $t3, $v0, 0xcf -/* 049D94 7F015264 26D90087 */ addiu $t9, $s6, 0x87 -/* 049D98 7F015268 3C01ED00 */ lui $at, 0xed00 -/* 049D9C 7F01526C 02A01825 */ move $v1, $s5 -/* 049DA0 7F015270 468084A0 */ cvt.s.w $f18, $f16 -/* 049DA4 7F015274 46143202 */ mul.s $f8, $f6, $f20 -/* 049DA8 7F015278 2451007D */ addiu $s1, $v0, 0x7d -/* 049DAC 7F01527C 2E920001 */ sltiu $s2, $s4, 1 -/* 049DB0 7F015280 26B50008 */ addiu $s5, $s5, 8 -/* 049DB4 7F015284 46149102 */ mul.s $f4, $f18, $f20 -/* 049DB8 7F015288 4600428D */ trunc.w.s $f10, $f8 -/* 049DBC 7F01528C 448B4000 */ mtc1 $t3, $f8 -/* 049DC0 7F015290 4600218D */ trunc.w.s $f6, $f4 -/* 049DC4 7F015294 440D5000 */ mfc1 $t5, $f10 -/* 049DC8 7F015298 44992000 */ mtc1 $t9, $f4 -/* 049DCC 7F01529C 468042A0 */ cvt.s.w $f10, $f8 -/* 049DD0 7F0152A0 44083000 */ mfc1 $t0, $f6 -/* 049DD4 7F0152A4 31AE0FFF */ andi $t6, $t5, 0xfff -/* 049DD8 7F0152A8 000E7B00 */ sll $t7, $t6, 0xc -/* 049DDC 7F0152AC 01E1C025 */ or $t8, $t7, $at -/* 049DE0 7F0152B0 468021A0 */ cvt.s.w $f6, $f4 -/* 049DE4 7F0152B4 46145402 */ mul.s $f16, $f10, $f20 -/* 049DE8 7F0152B8 31090FFF */ andi $t1, $t0, 0xfff -/* 049DEC 7F0152BC 03095025 */ or $t2, $t8, $t1 -/* 049DF0 7F0152C0 AC6A0000 */ sw $t2, ($v1) -/* 049DF4 7F0152C4 46143202 */ mul.s $f8, $f6, $f20 -/* 049DF8 7F0152C8 4600848D */ trunc.w.s $f18, $f16 -/* 049DFC 7F0152CC 4600428D */ trunc.w.s $f10, $f8 -/* 049E00 7F0152D0 440D9000 */ mfc1 $t5, $f18 -/* 049E04 7F0152D4 44185000 */ mfc1 $t8, $f10 -/* 049E08 7F0152D8 31AE0FFF */ andi $t6, $t5, 0xfff -/* 049E0C 7F0152DC 000E7B00 */ sll $t7, $t6, 0xc -/* 049E10 7F0152E0 33090FFF */ andi $t1, $t8, 0xfff -/* 049E14 7F0152E4 01E95025 */ or $t2, $t7, $t1 -/* 049E18 7F0152E8 AC6A0004 */ sw $t2, 4($v1) -/* 049E1C 7F0152EC 12400026 */ beqz $s2, .L7F015388 -/* 049E20 7F0152F0 AFB100B4 */ sw $s1, 0xb4($sp) -/* 049E24 7F0152F4 0FC30776 */ jal langGet -/* 049E28 7F0152F8 34049C58 */ li $a0, 40024 -/* 049E2C 7F0152FC 8FCB0000 */ lw $t3, ($fp) -/* 049E30 7F015300 00409825 */ move $s3, $v0 -/* 049E34 7F015304 27A400A4 */ addiu $a0, $sp, 0xa4 -/* 049E38 7F015308 27A500A0 */ addiu $a1, $sp, 0xa0 -/* 049E3C 7F01530C 00403025 */ move $a2, $v0 -/* 049E40 7F015310 8EE70000 */ lw $a3, ($s7) -/* 049E44 7F015314 AFA00014 */ sw $zero, 0x14($sp) -/* 049E48 7F015318 0FC2BA63 */ jal textMeasure -/* 049E4C 7F01531C AFAB0010 */ sw $t3, 0x10($sp) -/* 049E50 7F015320 8FAC00A0 */ lw $t4, 0xa0($sp) -/* 049E54 7F015324 AFB00098 */ sw $s0, 0x98($sp) -/* 049E58 7F015328 000C6843 */ sra $t5, $t4, 1 -/* 049E5C 7F01532C 022D7023 */ subu $t6, $s1, $t5 -/* 049E60 7F015330 0C001107 */ jal viGetX -/* 049E64 7F015334 AFAE009C */ sw $t6, 0x9c($sp) -/* 049E68 7F015338 00028400 */ sll $s0, $v0, 0x10 -/* 049E6C 7F01533C 0010CC03 */ sra $t9, $s0, 0x10 -/* 049E70 7F015340 0C00110B */ jal viGetY -/* 049E74 7F015344 03208025 */ move $s0, $t9 -/* 049E78 7F015348 8EE80000 */ lw $t0, ($s7) -/* 049E7C 7F01534C 8FD80000 */ lw $t8, ($fp) -/* 049E80 7F015350 240F00FF */ li $t7, 255 -/* 049E84 7F015354 AFAF0018 */ sw $t7, 0x18($sp) -/* 049E88 7F015358 02A02025 */ move $a0, $s5 -/* 049E8C 7F01535C 27A5009C */ addiu $a1, $sp, 0x9c -/* 049E90 7F015360 27A60098 */ addiu $a2, $sp, 0x98 -/* 049E94 7F015364 02603825 */ move $a3, $s3 -/* 049E98 7F015368 AFB0001C */ sw $s0, 0x1c($sp) -/* 049E9C 7F01536C AFA20020 */ sw $v0, 0x20($sp) -/* 049EA0 7F015370 AFA00024 */ sw $zero, 0x24($sp) -/* 049EA4 7F015374 AFA00028 */ sw $zero, 0x28($sp) -/* 049EA8 7F015378 AFA80010 */ sw $t0, 0x10($sp) -/* 049EAC 7F01537C 0FC025D8 */ jal frontPrintText -/* 049EB0 7F015380 AFB80014 */ sw $t8, 0x14($sp) -/* 049EB4 7F015384 0040A825 */ move $s5, $v0 -.L7F015388: -/* 049EB8 7F015388 3C098003 */ lui $t1, %hi(scenario) -/* 049EBC 7F01538C 8D29B540 */ lw $t1, %lo(scenario)($t1) -/* 049EC0 7F015390 24010005 */ li $at, 5 -/* 049EC4 7F015394 3C0B8007 */ lui $t3, %hi(teamsize) -/* 049EC8 7F015398 15210009 */ bne $t1, $at, .L7F0153C0 -/* 049ECC 7F01539C 00000000 */ nop -/* 049ED0 7F0153A0 16400005 */ bnez $s2, .L7F0153B8 -/* 049ED4 7F0153A4 02401025 */ move $v0, $s2 -/* 049ED8 7F0153A8 3C0A8007 */ lui $t2, %hi(teamsize) -/* 049EDC 7F0153AC 8D4A9788 */ lw $t2, %lo(teamsize)($t2) -/* 049EE0 7F0153B0 028A1026 */ xor $v0, $s4, $t2 -/* 049EE4 7F0153B4 2C420001 */ sltiu $v0, $v0, 1 -.L7F0153B8: -/* 049EE8 7F0153B8 10000004 */ b .L7F0153CC -/* 049EEC 7F0153BC 00408025 */ move $s0, $v0 -.L7F0153C0: -/* 049EF0 7F0153C0 8D6B9788 */ lw $t3, %lo(teamsize)($t3) -/* 049EF4 7F0153C4 028B8026 */ xor $s0, $s4, $t3 -/* 049EF8 7F0153C8 0010802B */ sltu $s0, $zero, $s0 -.L7F0153CC: -/* 049EFC 7F0153CC 12000005 */ beqz $s0, .L7F0153E4 -/* 049F00 7F0153D0 00000000 */ nop -/* 049F04 7F0153D4 0FC30776 */ jal langGet -/* 049F08 7F0153D8 34049C59 */ li $a0, 40025 -/* 049F0C 7F0153DC 10000004 */ b .L7F0153F0 -/* 049F10 7F0153E0 00408825 */ move $s1, $v0 -.L7F0153E4: -/* 049F14 7F0153E4 0FC30776 */ jal langGet -/* 049F18 7F0153E8 34049C5A */ li $a0, 40026 -/* 049F1C 7F0153EC 00408825 */ move $s1, $v0 -.L7F0153F0: -/* 049F20 7F0153F0 12000004 */ beqz $s0, .L7F015404 -/* 049F24 7F0153F4 27A40090 */ addiu $a0, $sp, 0x90 -/* 049F28 7F0153F8 3C12FF00 */ lui $s2, (0xFF0000FF >> 16) # lui $s2, 0xff00 -/* 049F2C 7F0153FC 10000002 */ b .L7F015408 -/* 049F30 7F015400 365200FF */ ori $s2, (0xFF0000FF & 0xFFFF) # ori $s2, $s2, 0xff -.L7F015404: -/* 049F34 7F015404 3412FFFF */ li $s2, 65535 -.L7F015408: -/* 049F38 7F015408 8FCC0000 */ lw $t4, ($fp) -/* 049F3C 7F01540C 27A5008C */ addiu $a1, $sp, 0x8c -/* 049F40 7F015410 02203025 */ move $a2, $s1 -/* 049F44 7F015414 8EE70000 */ lw $a3, ($s7) -/* 049F48 7F015418 AFA00014 */ sw $zero, 0x14($sp) -/* 049F4C 7F01541C 0FC2BA63 */ jal textMeasure -/* 049F50 7F015420 AFAC0010 */ sw $t4, 0x10($sp) -/* 049F54 7F015424 8FB80090 */ lw $t8, 0x90($sp) -/* 049F58 7F015428 8FAE008C */ lw $t6, 0x8c($sp) -/* 049F5C 7F01542C 8FAD00B4 */ lw $t5, 0xb4($sp) -/* 049F60 7F015430 3C028007 */ lui $v0, %hi(teamsize) -/* 049F64 7F015434 8C429788 */ lw $v0, %lo(teamsize)($v0) -/* 049F68 7F015438 00187843 */ sra $t7, $t8, 1 -/* 049F6C 7F01543C 02CF4823 */ subu $t1, $s6, $t7 -/* 049F70 7F015440 000EC843 */ sra $t9, $t6, 1 -/* 049F74 7F015444 252A0046 */ addiu $t2, $t1, 0x46 -/* 049F78 7F015448 01B94023 */ subu $t0, $t5, $t9 -/* 049F7C 7F01544C AFA80088 */ sw $t0, 0x88($sp) -/* 049F80 7F015450 16820007 */ bne $s4, $v0, .L7F015470 -/* 049F84 7F015454 AFAA0084 */ sw $t2, 0x84($sp) -/* 049F88 7F015458 1682001A */ bne $s4, $v0, .L7F0154C4 -/* 049F8C 7F01545C 3C0B8003 */ lui $t3, %hi(D_8002B560) -/* 049F90 7F015460 8D6BB560 */ lw $t3, %lo(D_8002B560)($t3) -/* 049F94 7F015464 2961000A */ slti $at, $t3, 0xa -/* 049F98 7F015468 50200017 */ beql $at, $zero, .L7F0154C8 -/* 049F9C 7F01546C 8FB900CC */ lw $t9, 0xcc($sp) -.L7F015470: -/* 049FA0 7F015470 0C001107 */ jal viGetX -/* 049FA4 7F015474 00000000 */ nop -/* 049FA8 7F015478 00028400 */ sll $s0, $v0, 0x10 -/* 049FAC 7F01547C 00106403 */ sra $t4, $s0, 0x10 -/* 049FB0 7F015480 0C00110B */ jal viGetY -/* 049FB4 7F015484 01808025 */ move $s0, $t4 -/* 049FB8 7F015488 8EEE0000 */ lw $t6, ($s7) -/* 049FBC 7F01548C 8FCD0000 */ lw $t5, ($fp) -/* 049FC0 7F015490 02A02025 */ move $a0, $s5 -/* 049FC4 7F015494 27A50088 */ addiu $a1, $sp, 0x88 -/* 049FC8 7F015498 27A60084 */ addiu $a2, $sp, 0x84 -/* 049FCC 7F01549C 02203825 */ move $a3, $s1 -/* 049FD0 7F0154A0 AFB20018 */ sw $s2, 0x18($sp) -/* 049FD4 7F0154A4 AFB0001C */ sw $s0, 0x1c($sp) -/* 049FD8 7F0154A8 AFA20020 */ sw $v0, 0x20($sp) -/* 049FDC 7F0154AC AFA00024 */ sw $zero, 0x24($sp) -/* 049FE0 7F0154B0 AFA00028 */ sw $zero, 0x28($sp) -/* 049FE4 7F0154B4 AFAE0010 */ sw $t6, 0x10($sp) -/* 049FE8 7F0154B8 0FC025D8 */ jal frontPrintText -/* 049FEC 7F0154BC AFAD0014 */ sw $t5, 0x14($sp) -/* 049FF0 7F0154C0 0040A825 */ move $s5, $v0 -.L7F0154C4: -/* 049FF4 7F0154C4 8FB900CC */ lw $t9, 0xcc($sp) -.L7F0154C8: -/* 049FF8 7F0154C8 26940001 */ addiu $s4, $s4, 1 -/* 049FFC 7F0154CC 5699FF55 */ bnel $s4, $t9, .L7F015224 -/* 04A000 7F0154D0 2A810002 */ slti $at, $s4, 2 -.L7F0154D4: -/* 04A004 7F0154D4 0FC2B3BC */ jal combiner_bayer_lod_perspective -/* 04A008 7F0154D8 02A02025 */ move $a0, $s5 -/* 04A00C 7F0154DC 8FBF0064 */ lw $ra, 0x64($sp) -/* 04A010 7F0154E0 D7B40038 */ ldc1 $f20, 0x38($sp) -/* 04A014 7F0154E4 8FB00040 */ lw $s0, 0x40($sp) -/* 04A018 7F0154E8 8FB10044 */ lw $s1, 0x44($sp) -/* 04A01C 7F0154EC 8FB20048 */ lw $s2, 0x48($sp) -/* 04A020 7F0154F0 8FB3004C */ lw $s3, 0x4c($sp) -/* 04A024 7F0154F4 8FB40050 */ lw $s4, 0x50($sp) -/* 04A028 7F0154F8 8FB50054 */ lw $s5, 0x54($sp) -/* 04A02C 7F0154FC 8FB60058 */ lw $s6, 0x58($sp) -/* 04A030 7F015500 8FB7005C */ lw $s7, 0x5c($sp) -/* 04A034 7F015504 8FBE0060 */ lw $fp, 0x60($sp) -/* 04A038 7F015508 03E00008 */ jr $ra -/* 04A03C 7F01550C 27BD00D0 */ addiu $sp, $sp, 0xd0 -) -#endif - - void set_briefing_page(WATCH_BRIEFING_PAGE page) { @@ -8198,17 +7366,10 @@ Gfx *constructor_menu0D_missioncomplete(Gfx *DL) } - - - - - - - - //******************************************************************************************************** //CHEAT SCREEN //******************************************************************************************************** + void init_menu15_cheat(void) { int i; @@ -8259,8 +7420,8 @@ void interface_menu15_cheat(void) { s32 i; - viSetFovY(60.0f); - viSetAspect(1.3333334f); + viSetFovY(FOV_Y_F); + viSetAspect(ASPECT_RATIO_SD); viSetZRange(100.0f, 10000.0f); viSetUseZBuf(0); @@ -8438,13 +7599,6 @@ Gfx * constructor_menu15_cheat(Gfx *DL) } - - - - - - - //******************************************************************************************************** //NO CONTROLLER SCREEN //******************************************************************************************************** @@ -8452,14 +7606,17 @@ void init_menu16_nocontroller(void) { return; } + void update_menu16_nocontrollers(void) { return; } + void interface_menu16_nocontrollers(void) { return; } + Gfx *constructor_menu16_nocontrollers(Gfx *DL) { s32 y2; @@ -8479,7 +7636,7 @@ Gfx *constructor_menu16_nocontrollers(Gfx *DL) if ((conConnected & 2)) { numContCon++; } - DL = microcode_constructor(insert_imageDL(DL)); + DL = microcode_constructor(clear_framebuffer_black(DL)); if ((numContCon == 0) || (numContCon == 1) || (numContCon == 2) || (numContCon == 3)) { @@ -8521,17 +7678,10 @@ Gfx *constructor_menu16_nocontrollers(Gfx *DL) } - - - - - - - -void do_extended_cast_display(s32 flag) +void do_extended_cast_display(bool doExtended) { - full_actor_intro = flag; - if (flag) + full_actor_intro = doExtended; + if (doExtended) { intro_character_index = 0; return; @@ -8539,1437 +7689,203 @@ void do_extended_cast_display(s32 flag) intro_character_index = 1; } + //******************************************************************************************************** //CAST SCREEN //******************************************************************************************************** -#ifdef NONMATCHING - -// Address 0x7F01869C NTSC -// Address 0x7F018714 PAL - -// https://decomp.me/scratch/MAkgo (PAL) 97.69% void init_menu18_displaycast(void) { - u8 *spB4; - s32 spB0; - s32 temp_t0; - struct coord3d spA0; - struct texpool sp90; - enum BODIES sp8C; - enum HEADS sp88; - s32 sp84; - ModelFileHeader *sp80; - ModelFileHeader *sp7C; - ModelFileHeader *sp78; + u8 *bufferPtr; + s32 bufferRemaining; + s32 allocSize; + struct coord3d subOffset; + struct texpool texPool; + enum BODIES body; + enum HEADS head; + s32 weaponProp; + ModelFileHeader *bodyHeader; + ModelFileHeader *headHeader; + ModelFileHeader *weaponHeader; s32 padding; - s32 sp70; - s32 sp6C; - struct intro_random_rifles sp54; - struct intro_random_pistols sp2C; - - spB4 = ptr_logo_and_walletbond_DL; - - // struct copy - spA0 = D_8002BA2C; - - sp7C = NULL; - sp70 = randomGetNext() & 1; + bool flip; + s32 cameraPreset; + struct intro_random_rifles rifles; + struct intro_random_pistols pistols; + + bufferPtr = ptr_logo_and_walletbond_DL; + subOffset = zeroCoord; + headHeader = NULL; + flip = randomGetNext() & 1; if ((full_actor_intro != 0) && (intro_character_index == 0)) { - musicTrack1ApplySeqpVol(0x7FFF); + musicTrack1ApplySeqpVol(VOLUME_MAX); g_musicXTrack1Fade = 0; - musicTrack1Play(2); + musicTrack1Play(M_INTRO); } for (intro_animation_count = 0; intro_animation_table[intro_animation_count].animID >= 0; intro_animation_count++) { - // this `for` loop just sets intro_animation_count + // empty } - randomly_selected_intro_animation = randomGetNext() % (u32) intro_animation_count; - - sp8C = intro_char_table[intro_character_index].body; - sp88 = intro_char_table[intro_character_index].head; - - sp6C = intro_animation_table[randomly_selected_intro_animation].camera_preset; - - if (sp8C == BODY_Special_Operations_Uniform) + randomly_selected_intro_animation = randomGetNext() % ((u32) intro_animation_count); + body = intro_char_table[intro_character_index].body; + head = intro_char_table[intro_character_index].head; + cameraPreset = intro_animation_table[randomly_selected_intro_animation].camera_preset; + + if (body == BODY_Special_Operations_Uniform) { - switch (randomGetNext() % 5U) - { - case 0: - break; + // Keep the multiple assignments on the same line for matching. + switch (randomGetNext() % 5U) + { + case 0: + break; + case 1: + body = BODY_Formal_Wear; head = HEAD_Male_Brosnan_Default; + break; + case 2: + body = BODY_Jungle_Fatigues; head = HEAD_Male_Brosnan_Default; + break; + case 3: + body = BODY_Parka; head = HEAD_Male_Brosnan_Default; + break; + case 4: + body = BODY_Brosnan_Tuxedo; head = HEAD_Male_Brosnan_Tuxedo; + break; + } + } + else if (body == BODY_Natalya_Skirt) + { + if (randomGetNext() & 1) + { + body = BODY_Natalya_Jungle_Fatigues; + } + } + else if ((body == BODY_Trevelyan_006) && (randomGetNext() & 1)) + { + body = BODY_Trevelyan_Janus; + } - case 1: - sp8C = BODY_Formal_Wear;\ - sp88 = HEAD_Male_Brosnan_Default; - break; + if (head == HEAD_RANDOM) + { + head = get_random_head(body); + } - case 2: - sp8C = BODY_Jungle_Fatigues;\ - sp88 = HEAD_Male_Brosnan_Default; - break; + allocSize = 0x19000; + bufferRemaining = 0x18160; - case 3: - sp8C = BODY_Parka;\ - sp88 = HEAD_Male_Brosnan_Default; - break; + if (1); - case 4: - sp8C = BODY_Brosnan_Tuxedo;\ - sp88 = HEAD_Male_Brosnan_Tuxedo; - break; - } - } - else if (sp8C == BODY_Natalya_Skirt) + bufferRemaining = bufferRemaining + allocSize; + + zbufSetBuffer(ALIGN64_V2(bufferPtr + bufferRemaining), Z_BUFFER_4_3_WIDTH, Z_BUFFER_4_3_HEIGHT); + texInitPool(&texPool, bufferPtr, allocSize); + + bufferRemaining -= allocSize; + bufferPtr += allocSize; + bodyHeader = c_item_entries[body].header; + + load_object_fill_header(c_item_entries[body].header, c_item_entries[body].filename, bufferPtr, bufferRemaining, &texPool); + allocSize = ALIGN64_V2(get_pc_buffer_remaining_value(c_item_entries[body].filename)); + bufferRemaining -= allocSize; + bufferPtr += allocSize; + + if (head >= 0) { - if (randomGetNext() & 1) - { - sp8C = BODY_Natalya_Jungle_Fatigues; - } - } - else if (sp8C == BODY_Trevelyan_006 && randomGetNext() & 1) - { - sp8C = BODY_Trevelyan_Janus; + headHeader = c_item_entries[head].header; + load_object_fill_header(c_item_entries[head].header, c_item_entries[head].filename, bufferPtr, bufferRemaining, &texPool); + allocSize = ALIGN64_V2(get_pc_buffer_remaining_value(c_item_entries[head].filename)); + bufferRemaining -= allocSize; + bufferPtr += allocSize; } - if (sp88 == -0x61) - { - sp88 = get_random_head(sp8C); - } - - // begin problem area - - temp_t0 = 0x19000; - spB0 = 0x18160 + temp_t0; - - if(0); - - zbufSetBuffer(ALIGN64_V2(spB4 + spB0), 440, 330); - texInitPool(&sp90, spB4, temp_t0); - - spB0 -= temp_t0; - spB4 += temp_t0; - - sp80 = c_item_entries[sp8C].header; - - // can't get subu a3,a3,v1 - - load_object_fill_header(c_item_entries[sp8C].header, c_item_entries[sp8C].filename, spB4, spB0, &sp90); - temp_t0 = ALIGN64_V2(get_pc_buffer_remaining_value(c_item_entries[sp8C].filename)); - - // end problem area - - spB0 -= temp_t0; - spB4 += temp_t0; - - if (sp88 >= 0) - { - sp7C = c_item_entries[sp88].header; - - load_object_fill_header(c_item_entries[sp88].header, c_item_entries[sp88].filename, spB4, spB0, &sp90); - temp_t0 = ALIGN64_V2(get_pc_buffer_remaining_value(c_item_entries[sp88].filename)); - - spB0 -= temp_t0; - spB4 += temp_t0; - } - - cast_model = setup_chr_instance(sp8C, sp88, sp80, sp7C, 0); + cast_model = setup_chr_instance(body, head, bodyHeader, headHeader, 0); modelSetScale((Model *) cast_model, 0.1f); - if (sp6C != 0) + if (cameraPreset != INTRO_WEAPON_TYPE_NONE) { - if (sp6C == 2) + if (cameraPreset == INTRO_WEAPON_TYPE_RIFLE) { - // struct copy - sp54 = random_rifles_in_intro; - - sp84 = sp54.props[randomGetNext() % INTRO_RANDOM_RIFLE_LEN]; + rifles = random_rifles_in_intro; + weaponProp = rifles.props[randomGetNext() % 6]; } else { - // struct copy - sp2C = random_pistols_in_intro; - - sp84 = sp2C.props[randomGetNext() % INTRO_RANDOM_PISTO_LEN]; + pistols = random_pistols_in_intro; + weaponProp = pistols.props[randomGetNext() % 10]; } - if (sp84 == PROP_CHRRUGER) // Cougar Magnum + // Replace Cougar Magnum with PP7 if Cradle has not been completed on any folder. + if (weaponProp == PROP_CHRRUGER) { - if (fileIsCradleCompletedAnyFolder() == 0) + if (fileIsCradleCompletedAnyFolder() == FALSE) { - sp84 = PROP_CHRWPPK; + weaponProp = PROP_CHRWPPK; } } - if (sp84 == PROP_CHRLASER) + // Replace Laser with PP7 if Aztec has not been completed on Secret Agent or 00 Agent on any folder. + if (weaponProp == PROP_CHRLASER) { - if (check_aztec_completed_any_folder_secret_00() == 0) + if (check_aztec_completed_any_folder_secret_00() == FALSE) { - sp84 = PROP_CHRWPPK; + weaponProp = PROP_CHRWPPK; } } - if (sp84 == PROP_CHRGOLDEN) + // Replace Golden Gun with PP7 if Egyptian has not been completed on 00 Agent on any folder. + if (weaponProp == PROP_CHRGOLDEN) { - if (fileIsEgyptCompletedOn00AnyFolder() == 0) + if (fileIsEgyptCompletedOn00AnyFolder() == FALSE) { - sp84 = PROP_CHRWPPK; + weaponProp = PROP_CHRWPPK; } } - //temp_v0_4 = &PitemZ_entries[sp84]; - sp78 = PitemZ_entries[sp84].header; - - load_object_fill_header(sp78, PitemZ_entries[sp84].filename, spB4, spB0, &sp90); - temp_t0 = ALIGN64_V2(get_pc_buffer_remaining_value(PitemZ_entries[sp84].filename)); - spB0 -= temp_t0; - spB4 += temp_t0; - - modelCalculateRwDataLen(sp78); - cast_model_weapon = get_obj_instance_controller_for_header(sp78); - modelSetScale((Model *) cast_model_weapon, 0.1f); + weaponHeader = PitemZ_entries[weaponProp].header; + load_object_fill_header(weaponHeader, PitemZ_entries[weaponProp].filename, bufferPtr, bufferRemaining, &texPool); + allocSize = ALIGN64_V2(get_pc_buffer_remaining_value(PitemZ_entries[weaponProp].filename)); + bufferRemaining -= allocSize; + bufferPtr += allocSize; + modelCalculateRwDataLen(weaponHeader); + cast_model_weapon = modelmgrInstantiateModel(weaponHeader); + modelSetScale(cast_model_weapon, 0.1f); cast_model_weapon->attachedto = cast_model; - //var_v0_2 = (sp70 != 0) ? 5 : 3; - cast_model_weapon->attachedto_objinst = cast_model->obj->Switches[(sp70 != 0) ? 5 : 3]; + cast_model_weapon->attachedto_objinst = cast_model->obj->Switches[(flip != FALSE) ? (5) : (3)]; } else { cast_model_weapon = NULL; } - sub_GAME_7F06CE84(cast_model, 0.1f); - setsuboffset(cast_model, &spA0); + modelSetAnimTranslationScale(cast_model, 0.1f); + setsuboffset(cast_model, &subOffset); setsubroty(cast_model, 0.0f); -#if defined(VERSION_EU) - modelSetAnimPlaySpeed(cast_model, 0.600000023842f, 0); + +#if defined VERSION_EU + modelSetAnimPlaySpeed(cast_model, 0.6f, 0); #else modelSetAnimPlaySpeed(cast_model, 0.5f, 0); #endif - - modelSetAnimation( - cast_model, - animation_table_ptrs1[intro_animation_table[randomly_selected_intro_animation].animID], - sp70, - intro_animation_table[randomly_selected_intro_animation].startframeoffset, - intro_animation_table[randomly_selected_intro_animation].playback_speed, - 0.0f); + modelSetAnimation(cast_model, animation_table_ptrs1[intro_animation_table[randomly_selected_intro_animation].animID], flip, intro_animation_table[randomly_selected_intro_animation].startframeoffset, intro_animation_table[randomly_selected_intro_animation].playback_speed, 0.0f); g_MenuTimer = 0; - - flt_CODE_bss_800695A4 = (RANDOMGETNEXT_F32() * 80.0f) + 70.0f; - flt_CODE_bss_800695A8 = (RANDOMGETNEXT_F32() * 80.0f) + 70.0f; - flt_CODE_bss_800695B0 = (RANDOMGETNEXT_F32() - 0.5f) * 6.2831855f; - flt_CODE_bss_800695B4 = (RANDOMGETNEXT_F32() - 0.5f) * 2.5132742f; - flt_CODE_bss_800695BC = (RANDOMGETNEXT_F32() * 200.0f) + (-100.0f); - flt_CODE_bss_800695C0 = (RANDOMGETNEXT_F32() * 200.0f) + (-100.0f); - flt_CODE_bss_800695A0 = flt_CODE_bss_800695A4; - flt_CODE_bss_800695AC = flt_CODE_bss_800695B0; - flt_CODE_bss_800695B8 = flt_CODE_bss_800695BC; - bss_800695E4 = 1; - flt_CODE_bss_800695E8.f[0] = 0.0f; - flt_CODE_bss_800695E8.f[1] = 0.0f; - flt_CODE_bss_800695E8.f[2] = 0.0f; + cast_camera_dist_start = ((((f32) ((u32) randomGetNext())) * (1.0f / U32_MAX)) * 80.0f) + 70.0f; + cast_camera_dist_end = ((((f32) ((u32) randomGetNext())) * (1.0f / U32_MAX)) * 80.0f) + 70.0f; + cast_camera_angle_start = ((((f32) ((u32) randomGetNext())) * (1.0f / U32_MAX)) - 0.5f) * M_TAU_F; + cast_camera_angle_end = ((((f32) ((u32) randomGetNext())) * (1.0f / U32_MAX)) - 0.5f) * 2.5132742f; + cast_camera_height_start = ((((f32) ((u32) randomGetNext())) * (1.0f / U32_MAX)) * 200.0f) + (-100.0f); + cast_camera_height_end = ((((f32) ((u32) randomGetNext())) * (1.0f / U32_MAX)) * 200.0f) + (-100.0f); + cast_camera_dist = cast_camera_dist_start; + cast_camera_angle = cast_camera_angle_start; + cast_camera_height = cast_camera_height_start; + cast_camera_reset = TRUE; + cast_rootpos_smoothed.f[0] = 0.0f; + cast_rootpos_smoothed.f[1] = 0.0f; + cast_rootpos_smoothed.f[2] = 0.0f; } -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel jpt_intro_bond_head - .word .L7F0188C0 - .word .L7F01881C - .word .L7F018830 - .word .L7F018844 - .word .L7F018858 - .size jpt_intro_bond_head, . - jpt_intro_bond_head - -glabel D_80051B00 -.word 0x40C90FDB /*6.2831855;*/ -glabel D_80051B04 -.word 0x4020D97C /*2.5132742;*/ - - -.text -glabel init_menu18_displaycast -/* 04D1CC 7F01869C 3C0E8003 */ lui $t6, %hi(ptr_logo_and_walletbond_DL) -/* 04D1D0 7F0186A0 8DCEA950 */ lw $t6, %lo(ptr_logo_and_walletbond_DL)($t6) -/* 04D1D4 7F0186A4 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 04D1D8 7F0186A8 3C188003 */ lui $t8, %hi(D_8002BA2C) -/* 04D1DC 7F0186AC AFBF001C */ sw $ra, 0x1c($sp) -/* 04D1E0 7F0186B0 2718BA2C */ addiu $t8, %lo(D_8002BA2C) # addiu $t8, $t8, -0x45d4 -/* 04D1E4 7F0186B4 AFAE00B4 */ sw $t6, 0xb4($sp) -/* 04D1E8 7F0186B8 8F010000 */ lw $at, ($t8) -/* 04D1EC 7F0186BC 27AF00A0 */ addiu $t7, $sp, 0xa0 -/* 04D1F0 7F0186C0 8F090004 */ lw $t1, 4($t8) -/* 04D1F4 7F0186C4 ADE10000 */ sw $at, ($t7) -/* 04D1F8 7F0186C8 8F010008 */ lw $at, 8($t8) -/* 04D1FC 7F0186CC ADE90004 */ sw $t1, 4($t7) -/* 04D200 7F0186D0 ADE10008 */ sw $at, 8($t7) -/* 04D204 7F0186D4 0C002914 */ jal randomGetNext -/* 04D208 7F0186D8 AFA0007C */ sw $zero, 0x7c($sp) -/* 04D20C 7F0186DC 3C0B8003 */ lui $t3, %hi(full_actor_intro) -/* 04D210 7F0186E0 8D6BB5FC */ lw $t3, %lo(full_actor_intro)($t3) -/* 04D214 7F0186E4 304A0001 */ andi $t2, $v0, 1 -/* 04D218 7F0186E8 AFAA0070 */ sw $t2, 0x70($sp) -/* 04D21C 7F0186EC 1160000A */ beqz $t3, .L7F018718 -/* 04D220 7F0186F0 3C0C8003 */ lui $t4, %hi(intro_character_index) -/* 04D224 7F0186F4 8D8CB5E8 */ lw $t4, %lo(intro_character_index)($t4) -/* 04D228 7F0186F8 15800007 */ bnez $t4, .L7F018718 -/* 04D22C 7F0186FC 00000000 */ nop -/* 04D230 7F018700 0C001C0F */ jal musicTrack1ApplySeqpVol -/* 04D234 7F018704 24047FFF */ li $a0, 32767 -/* 04D238 7F018708 3C018002 */ lui $at, %hi(g_musicXTrack1Fade) -/* 04D23C 7F01870C AC20434C */ sw $zero, %lo(g_musicXTrack1Fade)($at) -/* 04D240 7F018710 0C001B9F */ jal musicTrack1Play -/* 04D244 7F018714 24040002 */ li $a0, 2 -.L7F018718: -/* 04D248 7F018718 3C048003 */ lui $a0, %hi(intro_animation_table) -/* 04D24C 7F01871C 2484B8BC */ addiu $a0, %lo(intro_animation_table) # addiu $a0, $a0, -0x4744 -/* 04D250 7F018720 00006900 */ sll $t5, $zero, 4 -/* 04D254 7F018724 008D7021 */ addu $t6, $a0, $t5 -/* 04D258 7F018728 8DC80000 */ lw $t0, ($t6) -/* 04D25C 7F01872C 3C038003 */ lui $v1, %hi(intro_animation_count) -/* 04D260 7F018730 2463B5F0 */ addiu $v1, %lo(intro_animation_count) # addiu $v1, $v1, -0x4a10 -/* 04D264 7F018734 AC600000 */ sw $zero, ($v1) -/* 04D268 7F018738 05000009 */ bltz $t0, .L7F018760 -/* 04D26C 7F01873C 00001025 */ move $v0, $zero -/* 04D270 7F018740 24590001 */ addiu $t9, $v0, 1 -.L7F018744: -/* 04D274 7F018744 00197900 */ sll $t7, $t9, 4 -/* 04D278 7F018748 008FC021 */ addu $t8, $a0, $t7 -/* 04D27C 7F01874C 8F090000 */ lw $t1, ($t8) -/* 04D280 7F018750 AC790000 */ sw $t9, ($v1) -/* 04D284 7F018754 03201025 */ move $v0, $t9 -/* 04D288 7F018758 0523FFFA */ bgezl $t1, .L7F018744 -/* 04D28C 7F01875C 24590001 */ addiu $t9, $v0, 1 -.L7F018760: -/* 04D290 7F018760 0C002914 */ jal randomGetNext -/* 04D294 7F018764 00000000 */ nop -/* 04D298 7F018768 3C038003 */ lui $v1, %hi(intro_animation_count) -/* 04D29C 7F01876C 2463B5F0 */ addiu $v1, %lo(intro_animation_count) # addiu $v1, $v1, -0x4a10 -/* 04D2A0 7F018770 8C6A0000 */ lw $t2, ($v1) -/* 04D2A4 7F018774 3C0C8003 */ lui $t4, %hi(intro_character_index) -/* 04D2A8 7F018778 8D8CB5E8 */ lw $t4, %lo(intro_character_index)($t4) -/* 04D2AC 7F01877C 004A001B */ divu $zero, $v0, $t2 -/* 04D2B0 7F018780 00005810 */ mfhi $t3 -/* 04D2B4 7F018784 3C018003 */ lui $at, %hi(randomly_selected_intro_animation) -/* 04D2B8 7F018788 AC2BB5EC */ sw $t3, %lo(randomly_selected_intro_animation)($at) -/* 04D2BC 7F01878C 3C0F8003 */ lui $t7, %hi(randomly_selected_intro_animation) -/* 04D2C0 7F018790 000C6880 */ sll $t5, $t4, 2 -/* 04D2C4 7F018794 8DEFB5EC */ lw $t7, %lo(randomly_selected_intro_animation)($t7) -/* 04D2C8 7F018798 3C0E8003 */ lui $t6, %hi(intro_char_table) -/* 04D2CC 7F01879C 01AC6821 */ addu $t5, $t5, $t4 -/* 04D2D0 7F0187A0 000D6880 */ sll $t5, $t5, 2 -/* 04D2D4 7F0187A4 25CEB600 */ addiu $t6, %lo(intro_char_table) # addiu $t6, $t6, -0x4a00 -/* 04D2D8 7F0187A8 01AE2021 */ addu $a0, $t5, $t6 -/* 04D2DC 7F0187AC 8C880000 */ lw $t0, ($a0) -/* 04D2E0 7F0187B0 3C098003 */ lui $t1, %hi(intro_animation_table+12) -/* 04D2E4 7F0187B4 000FC100 */ sll $t8, $t7, 4 -/* 04D2E8 7F0187B8 01384821 */ addu $t1, $t1, $t8 -/* 04D2EC 7F0187BC 8C990004 */ lw $t9, 4($a0) -/* 04D2F0 7F0187C0 8D29B8C8 */ lw $t1, %lo(intro_animation_table+12)($t1) -/* 04D2F4 7F0187C4 24010016 */ li $at, 22 -/* 04D2F8 7F0187C8 15400002 */ bnez $t2, .L7F0187D4 -/* 04D2FC 7F0187CC 00000000 */ nop -/* 04D300 7F0187D0 0007000D */ break 7 -.L7F0187D4: -/* 04D304 7F0187D4 AFA8008C */ sw $t0, 0x8c($sp) -/* 04D308 7F0187D8 01005025 */ move $t2, $t0 -/* 04D30C 7F0187DC AFB90088 */ sw $t9, 0x88($sp) -/* 04D310 7F0187E0 15010022 */ bne $t0, $at, .L7F01886C -/* 04D314 7F0187E4 AFA9006C */ sw $t1, 0x6c($sp) -/* 04D318 7F0187E8 0C002914 */ jal randomGetNext -/* 04D31C 7F0187EC 00000000 */ nop -/* 04D320 7F0187F0 24010005 */ li $at, 5 -/* 04D324 7F0187F4 0041001B */ divu $zero, $v0, $at -/* 04D328 7F0187F8 00005810 */ mfhi $t3 -/* 04D32C 7F0187FC 2D610005 */ sltiu $at, $t3, 5 -/* 04D330 7F018800 1020002F */ beqz $at, .L7F0188C0 -/* 04D334 7F018804 000B5880 */ sll $t3, $t3, 2 -/* 04D338 7F018808 3C018005 */ lui $at, %hi(jpt_intro_bond_head) -/* 04D33C 7F01880C 002B0821 */ addu $at, $at, $t3 -/* 04D340 7F018810 8C2B1AEC */ lw $t3, %lo(jpt_intro_bond_head)($at) -/* 04D344 7F018814 01600008 */ jr $t3 -/* 04D348 7F018818 00000000 */ nop -.L7F01881C: -/* 04D34C 7F01881C 240C0017 */ li $t4, 23 -/* 04D350 7F018820 240D004B */ li $t5, 75 -/* 04D354 7F018824 AFAD0088 */ sw $t5, 0x88($sp) -/* 04D358 7F018828 10000025 */ b .L7F0188C0 -/* 04D35C 7F01882C AFAC008C */ sw $t4, 0x8c($sp) -.L7F018830: -/* 04D360 7F018830 240E0018 */ li $t6, 24 -/* 04D364 7F018834 2408004B */ li $t0, 75 -/* 04D368 7F018838 AFA80088 */ sw $t0, 0x88($sp) -/* 04D36C 7F01883C 10000020 */ b .L7F0188C0 -/* 04D370 7F018840 AFAE008C */ sw $t6, 0x8c($sp) -.L7F018844: -/* 04D374 7F018844 24190019 */ li $t9, 25 -/* 04D378 7F018848 240F004B */ li $t7, 75 -/* 04D37C 7F01884C AFAF0088 */ sw $t7, 0x88($sp) -/* 04D380 7F018850 1000001B */ b .L7F0188C0 -/* 04D384 7F018854 AFB9008C */ sw $t9, 0x8c($sp) -.L7F018858: -/* 04D388 7F018858 24180005 */ li $t8, 5 -/* 04D38C 7F01885C 2409004E */ li $t1, 78 -/* 04D390 7F018860 AFA90088 */ sw $t1, 0x88($sp) -/* 04D394 7F018864 10000016 */ b .L7F0188C0 -/* 04D398 7F018868 AFB8008C */ sw $t8, 0x8c($sp) -.L7F01886C: -/* 04D39C 7F01886C 8FAA008C */ lw $t2, 0x8c($sp) -/* 04D3A0 7F018870 24010010 */ li $at, 16 -/* 04D3A4 7F018874 8FAD008C */ lw $t5, 0x8c($sp) -/* 04D3A8 7F018878 55410009 */ bnel $t2, $at, .L7F0188A0 -/* 04D3AC 7F01887C 24010009 */ li $at, 9 -/* 04D3B0 7F018880 0C002914 */ jal randomGetNext -/* 04D3B4 7F018884 00000000 */ nop -/* 04D3B8 7F018888 304B0001 */ andi $t3, $v0, 1 -/* 04D3BC 7F01888C 1160000C */ beqz $t3, .L7F0188C0 -/* 04D3C0 7F018890 240C004F */ li $t4, 79 -/* 04D3C4 7F018894 1000000A */ b .L7F0188C0 -/* 04D3C8 7F018898 AFAC008C */ sw $t4, 0x8c($sp) -/* 04D3CC 7F01889C 24010009 */ li $at, 9 -.L7F0188A0: -/* 04D3D0 7F0188A0 55A10008 */ bnel $t5, $at, .L7F0188C4 -/* 04D3D4 7F0188A4 8FB90088 */ lw $t9, 0x88($sp) -/* 04D3D8 7F0188A8 0C002914 */ jal randomGetNext -/* 04D3DC 7F0188AC 00000000 */ nop -/* 04D3E0 7F0188B0 304E0001 */ andi $t6, $v0, 1 -/* 04D3E4 7F0188B4 11C00002 */ beqz $t6, .L7F0188C0 -/* 04D3E8 7F0188B8 24080008 */ li $t0, 8 -/* 04D3EC 7F0188BC AFA8008C */ sw $t0, 0x8c($sp) -.L7F0188C0: -/* 04D3F0 7F0188C0 8FB90088 */ lw $t9, 0x88($sp) -.L7F0188C4: -/* 04D3F4 7F0188C4 2401FF9F */ li $at, -97 -/* 04D3F8 7F0188C8 57210005 */ bnel $t9, $at, .L7F0188E0 -/* 04D3FC 7F0188CC 8FAF00B4 */ lw $t7, 0xb4($sp) -/* 04D400 7F0188D0 0FC08D98 */ jal get_random_head -/* 04D404 7F0188D4 8FA4008C */ lw $a0, 0x8c($sp) -/* 04D408 7F0188D8 AFA20088 */ sw $v0, 0x88($sp) -/* 04D40C 7F0188DC 8FAF00B4 */ lw $t7, 0xb4($sp) -.L7F0188E0: -/* 04D410 7F0188E0 3C020003 */ lui $v0, (0x00031160 >> 16) # lui $v0, 3 -/* 04D414 7F0188E4 34421160 */ ori $v0, (0x00031160 & 0xFFFF) # ori $v0, $v0, 0x1160 -/* 04D418 7F0188E8 01E22021 */ addu $a0, $t7, $v0 -/* 04D41C 7F0188EC 2484003F */ addiu $a0, $a0, 0x3f -/* 04D420 7F0188F0 3498003F */ ori $t8, $a0, 0x3f -/* 04D424 7F0188F4 3B04003F */ xori $a0, $t8, 0x3f -/* 04D428 7F0188F8 AFA200B0 */ sw $v0, 0xb0($sp) -/* 04D42C 7F0188FC 240501B8 */ li $a1, 440 -/* 04D430 7F018900 0FC34912 */ jal zbufSetBuffer -/* 04D434 7F018904 2406014A */ li $a2, 330 -/* 04D438 7F018908 3C060001 */ lui $a2, (0x00019000 >> 16) # lui $a2, 1 -/* 04D43C 7F01890C 34C69000 */ ori $a2, (0x00019000 & 0xFFFF) # ori $a2, $a2, 0x9000 -/* 04D440 7F018910 27A40090 */ addiu $a0, $sp, 0x90 -/* 04D444 7F018914 0FC32EBD */ jal texInitPool -/* 04D448 7F018918 8FA500B4 */ lw $a1, 0xb4($sp) -/* 04D44C 7F01891C 8FAA008C */ lw $t2, 0x8c($sp) -/* 04D450 7F018920 3C0C8004 */ lui $t4, %hi(c_item_entries) -/* 04D454 7F018924 8FA600B4 */ lw $a2, 0xb4($sp) -/* 04D458 7F018928 000A5880 */ sll $t3, $t2, 2 -/* 04D45C 7F01892C 016A5821 */ addu $t3, $t3, $t2 -/* 04D460 7F018930 8FA700B0 */ lw $a3, 0xb0($sp) -/* 04D464 7F018934 3C030001 */ lui $v1, (0x00019000 >> 16) # lui $v1, 1 -/* 04D468 7F018938 000B5880 */ sll $t3, $t3, 2 -/* 04D46C 7F01893C 258CDE10 */ addiu $t4, %lo(c_item_entries) # addiu $t4, $t4, -0x21f0 -/* 04D470 7F018940 34639000 */ ori $v1, (0x00019000 & 0xFFFF) # ori $v1, $v1, 0x9000 -/* 04D474 7F018944 016C1021 */ addu $v0, $t3, $t4 -/* 04D478 7F018948 8C440000 */ lw $a0, ($v0) -/* 04D47C 7F01894C 27AD0090 */ addiu $t5, $sp, 0x90 -/* 04D480 7F018950 00C33021 */ addu $a2, $a2, $v1 -/* 04D484 7F018954 00E33823 */ subu $a3, $a3, $v1 -/* 04D488 7F018958 AFA700B0 */ sw $a3, 0xb0($sp) -/* 04D48C 7F01895C AFA600B4 */ sw $a2, 0xb4($sp) -/* 04D490 7F018960 AFAD0010 */ sw $t5, 0x10($sp) -/* 04D494 7F018964 8C450004 */ lw $a1, 4($v0) -/* 04D498 7F018968 AFA20024 */ sw $v0, 0x24($sp) -/* 04D49C 7F01896C 0FC1D929 */ jal load_object_fill_header -/* 04D4A0 7F018970 AFA40080 */ sw $a0, 0x80($sp) -/* 04D4A4 7F018974 8FA20024 */ lw $v0, 0x24($sp) -/* 04D4A8 7F018978 0FC2F462 */ jal get_pc_buffer_remaining_value -/* 04D4AC 7F01897C 8C440004 */ lw $a0, 4($v0) -/* 04D4B0 7F018980 2443003F */ addiu $v1, $v0, 0x3f -/* 04D4B4 7F018984 8FB900B0 */ lw $t9, 0xb0($sp) -/* 04D4B8 7F018988 8FB800B4 */ lw $t8, 0xb4($sp) -/* 04D4BC 7F01898C 346E003F */ ori $t6, $v1, 0x3f -/* 04D4C0 7F018990 8FAA0088 */ lw $t2, 0x88($sp) -/* 04D4C4 7F018994 39C8003F */ xori $t0, $t6, 0x3f -/* 04D4C8 7F018998 03287823 */ subu $t7, $t9, $t0 -/* 04D4CC 7F01899C 03084821 */ addu $t1, $t8, $t0 -/* 04D4D0 7F0189A0 AFAF00B0 */ sw $t7, 0xb0($sp) -/* 04D4D4 7F0189A4 0540001C */ bltz $t2, .L7F018A18 -/* 04D4D8 7F0189A8 AFA900B4 */ sw $t1, 0xb4($sp) -/* 04D4DC 7F0189AC 000A5880 */ sll $t3, $t2, 2 -/* 04D4E0 7F0189B0 016A5821 */ addu $t3, $t3, $t2 -/* 04D4E4 7F0189B4 3C0C8004 */ lui $t4, %hi(c_item_entries) -/* 04D4E8 7F0189B8 258CDE10 */ addiu $t4, %lo(c_item_entries) # addiu $t4, $t4, -0x21f0 -/* 04D4EC 7F0189BC 000B5880 */ sll $t3, $t3, 2 -/* 04D4F0 7F0189C0 016C1021 */ addu $v0, $t3, $t4 -/* 04D4F4 7F0189C4 8C440000 */ lw $a0, ($v0) -/* 04D4F8 7F0189C8 27AD0090 */ addiu $t5, $sp, 0x90 -/* 04D4FC 7F0189CC AFAD0010 */ sw $t5, 0x10($sp) -/* 04D500 7F0189D0 8C450004 */ lw $a1, 4($v0) -/* 04D504 7F0189D4 AFA20024 */ sw $v0, 0x24($sp) -/* 04D508 7F0189D8 01203025 */ move $a2, $t1 -/* 04D50C 7F0189DC 01E03825 */ move $a3, $t7 -/* 04D510 7F0189E0 0FC1D929 */ jal load_object_fill_header -/* 04D514 7F0189E4 AFA4007C */ sw $a0, 0x7c($sp) -/* 04D518 7F0189E8 8FA20024 */ lw $v0, 0x24($sp) -/* 04D51C 7F0189EC 0FC2F462 */ jal get_pc_buffer_remaining_value -/* 04D520 7F0189F0 8C440004 */ lw $a0, 4($v0) -/* 04D524 7F0189F4 2443003F */ addiu $v1, $v0, 0x3f -/* 04D528 7F0189F8 8FB900B0 */ lw $t9, 0xb0($sp) -/* 04D52C 7F0189FC 8FAA00B4 */ lw $t2, 0xb4($sp) -/* 04D530 7F018A00 346E003F */ ori $t6, $v1, 0x3f -/* 04D534 7F018A04 39C8003F */ xori $t0, $t6, 0x3f -/* 04D538 7F018A08 0328C023 */ subu $t8, $t9, $t0 -/* 04D53C 7F018A0C 01485821 */ addu $t3, $t2, $t0 -/* 04D540 7F018A10 AFB800B0 */ sw $t8, 0xb0($sp) -/* 04D544 7F018A14 AFAB00B4 */ sw $t3, 0xb4($sp) -.L7F018A18: -/* 04D548 7F018A18 8FA4008C */ lw $a0, 0x8c($sp) -/* 04D54C 7F018A1C 8FA50088 */ lw $a1, 0x88($sp) -/* 04D550 7F018A20 8FA60080 */ lw $a2, 0x80($sp) -/* 04D554 7F018A24 8FA7007C */ lw $a3, 0x7c($sp) -/* 04D558 7F018A28 0FC08D2A */ jal setup_chr_instance -/* 04D55C 7F018A2C AFA00010 */ sw $zero, 0x10($sp) -/* 04D560 7F018A30 3C038003 */ lui $v1, %hi(cast_model) -/* 04D564 7F018A34 2463B5F4 */ addiu $v1, %lo(cast_model) # addiu $v1, $v1, -0x4a0c -/* 04D568 7F018A38 3C053DCC */ lui $a1, (0x3DCCCCCD >> 16) # lui $a1, 0x3dcc -/* 04D56C 7F018A3C AC620000 */ sw $v0, ($v1) -/* 04D570 7F018A40 34A5CCCD */ ori $a1, (0x3DCCCCCD & 0xFFFF) # ori $a1, $a1, 0xcccd -/* 04D574 7F018A44 0FC1B39E */ jal modelSetScale -/* 04D578 7F018A48 00402025 */ move $a0, $v0 -/* 04D57C 7F018A4C 8FAC006C */ lw $t4, 0x6c($sp) -/* 04D580 7F018A50 24010002 */ li $at, 2 -/* 04D584 7F018A54 1180007A */ beqz $t4, .L7F018C40 -/* 04D588 7F018A58 00000000 */ nop -/* 04D58C 7F018A5C 15810018 */ bne $t4, $at, .L7F018AC0 -/* 04D590 7F018A60 27B8002C */ addiu $t8, $sp, 0x2c -/* 04D594 7F018A64 3C0F8003 */ lui $t7, %hi(random_rifles_in_intro) -/* 04D598 7F018A68 25EFBA38 */ addiu $t7, %lo(random_rifles_in_intro) # addiu $t7, $t7, -0x45c8 -/* 04D59C 7F018A6C 8DE10000 */ lw $at, ($t7) -/* 04D5A0 7F018A70 8DEE0004 */ lw $t6, 4($t7) -/* 04D5A4 7F018A74 27A90054 */ addiu $t1, $sp, 0x54 -/* 04D5A8 7F018A78 AD210000 */ sw $at, ($t1) -/* 04D5AC 7F018A7C AD2E0004 */ sw $t6, 4($t1) -/* 04D5B0 7F018A80 8DEE000C */ lw $t6, 0xc($t7) -/* 04D5B4 7F018A84 8DE10008 */ lw $at, 8($t7) -/* 04D5B8 7F018A88 AD2E000C */ sw $t6, 0xc($t1) -/* 04D5BC 7F018A8C AD210008 */ sw $at, 8($t1) -/* 04D5C0 7F018A90 8DE10010 */ lw $at, 0x10($t7) -/* 04D5C4 7F018A94 8DEE0014 */ lw $t6, 0x14($t7) -/* 04D5C8 7F018A98 AD210010 */ sw $at, 0x10($t1) -/* 04D5CC 7F018A9C 0C002914 */ jal randomGetNext -/* 04D5D0 7F018AA0 AD2E0014 */ sw $t6, 0x14($t1) -/* 04D5D4 7F018AA4 24010006 */ li $at, 6 -/* 04D5D8 7F018AA8 0041001B */ divu $zero, $v0, $at -/* 04D5DC 7F018AAC 00004010 */ mfhi $t0 -/* 04D5E0 7F018AB0 0008C880 */ sll $t9, $t0, 2 -/* 04D5E4 7F018AB4 03B91821 */ addu $v1, $sp, $t9 -/* 04D5E8 7F018AB8 10000016 */ b .L7F018B14 -/* 04D5EC 7F018ABC 8C630054 */ lw $v1, 0x54($v1) -.L7F018AC0: -/* 04D5F0 7F018AC0 3C0A8003 */ lui $t2, %hi(random_pistols_in_intro) -/* 04D5F4 7F018AC4 254ABA50 */ addiu $t2, %lo(random_pistols_in_intro) # addiu $t2, $t2, -0x45b0 -/* 04D5F8 7F018AC8 254C0024 */ addiu $t4, $t2, 0x24 -.L7F018ACC: -/* 04D5FC 7F018ACC 8D410000 */ lw $at, ($t2) -/* 04D600 7F018AD0 254A000C */ addiu $t2, $t2, 0xc -/* 04D604 7F018AD4 2718000C */ addiu $t8, $t8, 0xc -/* 04D608 7F018AD8 AF01FFF4 */ sw $at, -0xc($t8) -/* 04D60C 7F018ADC 8D41FFF8 */ lw $at, -8($t2) -/* 04D610 7F018AE0 AF01FFF8 */ sw $at, -8($t8) -/* 04D614 7F018AE4 8D41FFFC */ lw $at, -4($t2) -/* 04D618 7F018AE8 154CFFF8 */ bne $t2, $t4, .L7F018ACC -/* 04D61C 7F018AEC AF01FFFC */ sw $at, -4($t8) -/* 04D620 7F018AF0 8D410000 */ lw $at, ($t2) -/* 04D624 7F018AF4 0C002914 */ jal randomGetNext -/* 04D628 7F018AF8 AF010000 */ sw $at, ($t8) -/* 04D62C 7F018AFC 2401000A */ li $at, 10 -/* 04D630 7F018B00 0041001B */ divu $zero, $v0, $at -/* 04D634 7F018B04 00006810 */ mfhi $t5 -/* 04D638 7F018B08 000D4880 */ sll $t1, $t5, 2 -/* 04D63C 7F018B0C 03A91821 */ addu $v1, $sp, $t1 -/* 04D640 7F018B10 8C63002C */ lw $v1, 0x2c($v1) -.L7F018B14: -/* 04D644 7F018B14 240100BE */ li $at, 190 -/* 04D648 7F018B18 54610007 */ bnel $v1, $at, .L7F018B38 -/* 04D64C 7F018B1C 240100BB */ li $at, 187 -/* 04D650 7F018B20 0FC07AB4 */ jal fileIsCradleCompletedAnyFolder -/* 04D654 7F018B24 AFA30084 */ sw $v1, 0x84($sp) -/* 04D658 7F018B28 14400002 */ bnez $v0, .L7F018B34 -/* 04D65C 7F018B2C 8FA30084 */ lw $v1, 0x84($sp) -/* 04D660 7F018B30 240300BF */ li $v1, 191 -.L7F018B34: -/* 04D664 7F018B34 240100BB */ li $at, 187 -.L7F018B38: -/* 04D668 7F018B38 54610007 */ bnel $v1, $at, .L7F018B58 -/* 04D66C 7F018B3C 240100D0 */ li $at, 208 -/* 04D670 7F018B40 0FC07AC8 */ jal check_aztec_completed_any_folder_secret_00 -/* 04D674 7F018B44 AFA30084 */ sw $v1, 0x84($sp) -/* 04D678 7F018B48 14400002 */ bnez $v0, .L7F018B54 -/* 04D67C 7F018B4C 8FA30084 */ lw $v1, 0x84($sp) -/* 04D680 7F018B50 240300BF */ li $v1, 191 -.L7F018B54: -/* 04D684 7F018B54 240100D0 */ li $at, 208 -.L7F018B58: -/* 04D688 7F018B58 54610007 */ bnel $v1, $at, .L7F018B78 -/* 04D68C 7F018B5C 00037880 */ sll $t7, $v1, 2 -/* 04D690 7F018B60 0FC07ADC */ jal fileIsEgyptCompletedOn00AnyFolder -/* 04D694 7F018B64 AFA30084 */ sw $v1, 0x84($sp) -/* 04D698 7F018B68 14400002 */ bnez $v0, .L7F018B74 -/* 04D69C 7F018B6C 8FA30084 */ lw $v1, 0x84($sp) -/* 04D6A0 7F018B70 240300BF */ li $v1, 191 -.L7F018B74: -/* 04D6A4 7F018B74 00037880 */ sll $t7, $v1, 2 -.L7F018B78: -/* 04D6A8 7F018B78 01E37823 */ subu $t7, $t7, $v1 -/* 04D6AC 7F018B7C 3C0E8004 */ lui $t6, %hi(PitemZ_entries) -/* 04D6B0 7F018B80 25CEA228 */ addiu $t6, %lo(PitemZ_entries) # addiu $t6, $t6, -0x5dd8 -/* 04D6B4 7F018B84 000F7880 */ sll $t7, $t7, 2 -/* 04D6B8 7F018B88 01EE1021 */ addu $v0, $t7, $t6 -/* 04D6BC 7F018B8C 8C440000 */ lw $a0, ($v0) -/* 04D6C0 7F018B90 27A80090 */ addiu $t0, $sp, 0x90 -/* 04D6C4 7F018B94 AFA80010 */ sw $t0, 0x10($sp) -/* 04D6C8 7F018B98 8C450004 */ lw $a1, 4($v0) -/* 04D6CC 7F018B9C AFA20024 */ sw $v0, 0x24($sp) -/* 04D6D0 7F018BA0 8FA600B4 */ lw $a2, 0xb4($sp) -/* 04D6D4 7F018BA4 8FA700B0 */ lw $a3, 0xb0($sp) -/* 04D6D8 7F018BA8 0FC1D929 */ jal load_object_fill_header -/* 04D6DC 7F018BAC AFA40078 */ sw $a0, 0x78($sp) -/* 04D6E0 7F018BB0 8FA20024 */ lw $v0, 0x24($sp) -/* 04D6E4 7F018BB4 0FC2F462 */ jal get_pc_buffer_remaining_value -/* 04D6E8 7F018BB8 8C440004 */ lw $a0, 4($v0) -/* 04D6EC 7F018BBC 0FC1D73D */ jal modelCalculateRwDataLen -/* 04D6F0 7F018BC0 8FA40078 */ lw $a0, 0x78($sp) -/* 04D6F4 7F018BC4 0FC1B025 */ jal get_obj_instance_controller_for_header -/* 04D6F8 7F018BC8 8FA40078 */ lw $a0, 0x78($sp) -/* 04D6FC 7F018BCC 3C038003 */ lui $v1, %hi(cast_model_weapon) -/* 04D700 7F018BD0 2463B5F8 */ addiu $v1, %lo(cast_model_weapon) # addiu $v1, $v1, -0x4a08 -/* 04D704 7F018BD4 3C053DCC */ lui $a1, (0x3DCCCCCD >> 16) # lui $a1, 0x3dcc -/* 04D708 7F018BD8 AC620000 */ sw $v0, ($v1) -/* 04D70C 7F018BDC 34A5CCCD */ ori $a1, (0x3DCCCCCD & 0xFFFF) # ori $a1, $a1, 0xcccd -/* 04D710 7F018BE0 0FC1B39E */ jal modelSetScale -/* 04D714 7F018BE4 00402025 */ move $a0, $v0 -/* 04D718 7F018BE8 3C038003 */ lui $v1, %hi(cast_model_weapon) -/* 04D71C 7F018BEC 3C068003 */ lui $a2, %hi(cast_model) -/* 04D720 7F018BF0 24C6B5F4 */ addiu $a2, %lo(cast_model) # addiu $a2, $a2, -0x4a0c -/* 04D724 7F018BF4 2463B5F8 */ addiu $v1, %lo(cast_model_weapon) # addiu $v1, $v1, -0x4a08 -/* 04D728 7F018BF8 8C6B0000 */ lw $t3, ($v1) -/* 04D72C 7F018BFC 8CD90000 */ lw $t9, ($a2) -/* 04D730 7F018C00 24020003 */ li $v0, 3 -/* 04D734 7F018C04 AD790018 */ sw $t9, 0x18($t3) -/* 04D738 7F018C08 8FAC0070 */ lw $t4, 0x70($sp) -/* 04D73C 7F018C0C 11800003 */ beqz $t4, .L7F018C1C -/* 04D740 7F018C10 00000000 */ nop -/* 04D744 7F018C14 10000001 */ b .L7F018C1C -/* 04D748 7F018C18 24020005 */ li $v0, 5 -.L7F018C1C: -/* 04D74C 7F018C1C 8CCA0000 */ lw $t2, ($a2) -/* 04D750 7F018C20 00024880 */ sll $t1, $v0, 2 -/* 04D754 7F018C24 8C680000 */ lw $t0, ($v1) -/* 04D758 7F018C28 8D580008 */ lw $t8, 8($t2) -/* 04D75C 7F018C2C 8F0D0008 */ lw $t5, 8($t8) -/* 04D760 7F018C30 01A97821 */ addu $t7, $t5, $t1 -/* 04D764 7F018C34 8DEE0000 */ lw $t6, ($t7) -/* 04D768 7F018C38 10000006 */ b .L7F018C54 -/* 04D76C 7F018C3C AD0E001C */ sw $t6, 0x1c($t0) -.L7F018C40: -/* 04D770 7F018C40 3C038003 */ lui $v1, %hi(cast_model_weapon) -/* 04D774 7F018C44 2463B5F8 */ addiu $v1, %lo(cast_model_weapon) # addiu $v1, $v1, -0x4a08 -/* 04D778 7F018C48 3C068003 */ lui $a2, %hi(cast_model) -/* 04D77C 7F018C4C 24C6B5F4 */ addiu $a2, %lo(cast_model) # addiu $a2, $a2, -0x4a0c -/* 04D780 7F018C50 AC600000 */ sw $zero, ($v1) -.L7F018C54: -/* 04D784 7F018C54 3C053DCC */ lui $a1, (0x3DCCCCCD >> 16) # lui $a1, 0x3dcc -/* 04D788 7F018C58 34A5CCCD */ ori $a1, (0x3DCCCCCD & 0xFFFF) # ori $a1, $a1, 0xcccd -/* 04D78C 7F018C5C 0FC1B3A1 */ jal sub_GAME_7F06CE84 -/* 04D790 7F018C60 8CC40000 */ lw $a0, ($a2) -/* 04D794 7F018C64 3C048003 */ lui $a0, %hi(cast_model) -/* 04D798 7F018C68 8C84B5F4 */ lw $a0, %lo(cast_model)($a0) -/* 04D79C 7F018C6C 0FC1B303 */ jal setsuboffset -/* 04D7A0 7F018C70 27A500A0 */ addiu $a1, $sp, 0xa0 -/* 04D7A4 7F018C74 3C048003 */ lui $a0, %hi(cast_model) -/* 04D7A8 7F018C78 8C84B5F4 */ lw $a0, %lo(cast_model)($a0) -/* 04D7AC 7F018C7C 0FC1B34F */ jal setsubroty -/* 04D7B0 7F018C80 24050000 */ li $a1, 0 -/* 04D7B4 7F018C84 3C048003 */ lui $a0, %hi(cast_model) -/* 04D7B8 7F018C88 8C84B5F4 */ lw $a0, %lo(cast_model)($a0) -/* 04D7BC 7F018C8C 3C053F00 */ lui $a1, 0x3f00 -/* 04D7C0 7F018C90 0FC1BFC6 */ jal modelSetAnimPlaySpeed -/* 04D7C4 7F018C94 24060000 */ li $a2, 0 -/* 04D7C8 7F018C98 3C198003 */ lui $t9, %hi(randomly_selected_intro_animation) -/* 04D7CC 7F018C9C 8F39B5EC */ lw $t9, %lo(randomly_selected_intro_animation)($t9) -/* 04D7D0 7F018CA0 3C0C8003 */ lui $t4, %hi(intro_animation_table) -/* 04D7D4 7F018CA4 258CB8BC */ addiu $t4, %lo(intro_animation_table) # addiu $t4, $t4, -0x4744 -/* 04D7D8 7F018CA8 00195900 */ sll $t3, $t9, 4 -/* 04D7DC 7F018CAC 016C1021 */ addu $v0, $t3, $t4 -/* 04D7E0 7F018CB0 8C4A0000 */ lw $t2, ($v0) -/* 04D7E4 7F018CB4 C4440008 */ lwc1 $f4, 8($v0) -/* 04D7E8 7F018CB8 44803000 */ mtc1 $zero, $f6 -/* 04D7EC 7F018CBC 3C058003 */ lui $a1, %hi(animation_table_ptrs1) -/* 04D7F0 7F018CC0 000AC080 */ sll $t8, $t2, 2 -/* 04D7F4 7F018CC4 00B82821 */ addu $a1, $a1, $t8 -/* 04D7F8 7F018CC8 3C048003 */ lui $a0, %hi(cast_model) -/* 04D7FC 7F018CCC 8C84B5F4 */ lw $a0, %lo(cast_model)($a0) -/* 04D800 7F018CD0 8CA59D6C */ lw $a1, %lo(animation_table_ptrs1)($a1) -/* 04D804 7F018CD4 8C470004 */ lw $a3, 4($v0) -/* 04D808 7F018CD8 8FA60070 */ lw $a2, 0x70($sp) -/* 04D80C 7F018CDC E7A40010 */ swc1 $f4, 0x10($sp) -/* 04D810 7F018CE0 0FC1BF2A */ jal modelSetAnimation -/* 04D814 7F018CE4 E7A60014 */ swc1 $f6, 0x14($sp) -/* 04D818 7F018CE8 3C018003 */ lui $at, %hi(g_MenuTimer) -/* 04D81C 7F018CEC 0C002914 */ jal randomGetNext -/* 04D820 7F018CF0 AC20A8CC */ sw $zero, %lo(g_MenuTimer)($at) -/* 04D824 7F018CF4 44824000 */ mtc1 $v0, $f8 -/* 04D828 7F018CF8 04410005 */ bgez $v0, .L7F018D10 -/* 04D82C 7F018CFC 468042A0 */ cvt.s.w $f10, $f8 -/* 04D830 7F018D00 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04D834 7F018D04 44818000 */ mtc1 $at, $f16 -/* 04D838 7F018D08 00000000 */ nop -/* 04D83C 7F018D0C 46105280 */ add.s $f10, $f10, $f16 -.L7F018D10: -/* 04D840 7F018D10 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04D844 7F018D14 44819000 */ mtc1 $at, $f18 -/* 04D848 7F018D18 3C0142A0 */ li $at, 0x42A00000 # 80.000000 -/* 04D84C 7F018D1C 44813000 */ mtc1 $at, $f6 -/* 04D850 7F018D20 46125102 */ mul.s $f4, $f10, $f18 -/* 04D854 7F018D24 3C01428C */ li $at, 0x428C0000 # 70.000000 -/* 04D858 7F018D28 44818000 */ mtc1 $at, $f16 -/* 04D85C 7F018D2C 3C018007 */ lui $at, %hi(flt_CODE_bss_800695A4) -/* 04D860 7F018D30 46062202 */ mul.s $f8, $f4, $f6 -/* 04D864 7F018D34 46104280 */ add.s $f10, $f8, $f16 -/* 04D868 7F018D38 0C002914 */ jal randomGetNext -/* 04D86C 7F018D3C E42A95A4 */ swc1 $f10, %lo(flt_CODE_bss_800695A4)($at) -/* 04D870 7F018D40 44829000 */ mtc1 $v0, $f18 -/* 04D874 7F018D44 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04D878 7F018D48 04410004 */ bgez $v0, .L7F018D5C -/* 04D87C 7F018D4C 46809120 */ cvt.s.w $f4, $f18 -/* 04D880 7F018D50 44813000 */ mtc1 $at, $f6 -/* 04D884 7F018D54 00000000 */ nop -/* 04D888 7F018D58 46062100 */ add.s $f4, $f4, $f6 -.L7F018D5C: -/* 04D88C 7F018D5C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04D890 7F018D60 44814000 */ mtc1 $at, $f8 -/* 04D894 7F018D64 3C0142A0 */ li $at, 0x42A00000 # 80.000000 -/* 04D898 7F018D68 44815000 */ mtc1 $at, $f10 -/* 04D89C 7F018D6C 46082402 */ mul.s $f16, $f4, $f8 -/* 04D8A0 7F018D70 3C01428C */ li $at, 0x428C0000 # 70.000000 -/* 04D8A4 7F018D74 44813000 */ mtc1 $at, $f6 -/* 04D8A8 7F018D78 3C018007 */ lui $at, %hi(flt_CODE_bss_800695A8) -/* 04D8AC 7F018D7C 460A8482 */ mul.s $f18, $f16, $f10 -/* 04D8B0 7F018D80 46069100 */ add.s $f4, $f18, $f6 -/* 04D8B4 7F018D84 0C002914 */ jal randomGetNext -/* 04D8B8 7F018D88 E42495A8 */ swc1 $f4, %lo(flt_CODE_bss_800695A8)($at) -/* 04D8BC 7F018D8C 44824000 */ mtc1 $v0, $f8 -/* 04D8C0 7F018D90 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04D8C4 7F018D94 04410004 */ bgez $v0, .L7F018DA8 -/* 04D8C8 7F018D98 46804420 */ cvt.s.w $f16, $f8 -/* 04D8CC 7F018D9C 44815000 */ mtc1 $at, $f10 -/* 04D8D0 7F018DA0 00000000 */ nop -/* 04D8D4 7F018DA4 460A8400 */ add.s $f16, $f16, $f10 -.L7F018DA8: -/* 04D8D8 7F018DA8 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04D8DC 7F018DAC 44819000 */ mtc1 $at, $f18 -/* 04D8E0 7F018DB0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 04D8E4 7F018DB4 44812000 */ mtc1 $at, $f4 -/* 04D8E8 7F018DB8 46128182 */ mul.s $f6, $f16, $f18 -/* 04D8EC 7F018DBC 3C018005 */ lui $at, %hi(D_80051B00) -/* 04D8F0 7F018DC0 C42A1B00 */ lwc1 $f10, %lo(D_80051B00)($at) -/* 04D8F4 7F018DC4 3C018007 */ lui $at, %hi(flt_CODE_bss_800695B0) -/* 04D8F8 7F018DC8 46043201 */ sub.s $f8, $f6, $f4 -/* 04D8FC 7F018DCC 460A4402 */ mul.s $f16, $f8, $f10 -/* 04D900 7F018DD0 0C002914 */ jal randomGetNext -/* 04D904 7F018DD4 E43095B0 */ swc1 $f16, %lo(flt_CODE_bss_800695B0)($at) -/* 04D908 7F018DD8 44829000 */ mtc1 $v0, $f18 -/* 04D90C 7F018DDC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04D910 7F018DE0 04410004 */ bgez $v0, .L7F018DF4 -/* 04D914 7F018DE4 468091A0 */ cvt.s.w $f6, $f18 -/* 04D918 7F018DE8 44812000 */ mtc1 $at, $f4 -/* 04D91C 7F018DEC 00000000 */ nop -/* 04D920 7F018DF0 46043180 */ add.s $f6, $f6, $f4 -.L7F018DF4: -/* 04D924 7F018DF4 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04D928 7F018DF8 44814000 */ mtc1 $at, $f8 -/* 04D92C 7F018DFC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 04D930 7F018E00 44818000 */ mtc1 $at, $f16 -/* 04D934 7F018E04 46083282 */ mul.s $f10, $f6, $f8 -/* 04D938 7F018E08 3C018005 */ lui $at, %hi(D_80051B04) -/* 04D93C 7F018E0C C4241B04 */ lwc1 $f4, %lo(D_80051B04)($at) -/* 04D940 7F018E10 3C018007 */ lui $at, %hi(flt_CODE_bss_800695B4) -/* 04D944 7F018E14 46105481 */ sub.s $f18, $f10, $f16 -/* 04D948 7F018E18 46049182 */ mul.s $f6, $f18, $f4 -/* 04D94C 7F018E1C 0C002914 */ jal randomGetNext -/* 04D950 7F018E20 E42695B4 */ swc1 $f6, %lo(flt_CODE_bss_800695B4)($at) -/* 04D954 7F018E24 44824000 */ mtc1 $v0, $f8 -/* 04D958 7F018E28 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04D95C 7F018E2C 04410004 */ bgez $v0, .L7F018E40 -/* 04D960 7F018E30 468042A0 */ cvt.s.w $f10, $f8 -/* 04D964 7F018E34 44818000 */ mtc1 $at, $f16 -/* 04D968 7F018E38 00000000 */ nop -/* 04D96C 7F018E3C 46105280 */ add.s $f10, $f10, $f16 -.L7F018E40: -/* 04D970 7F018E40 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04D974 7F018E44 44819000 */ mtc1 $at, $f18 -/* 04D978 7F018E48 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 04D97C 7F018E4C 44813000 */ mtc1 $at, $f6 -/* 04D980 7F018E50 46125102 */ mul.s $f4, $f10, $f18 -/* 04D984 7F018E54 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 04D988 7F018E58 44818000 */ mtc1 $at, $f16 -/* 04D98C 7F018E5C 3C018007 */ lui $at, %hi(flt_CODE_bss_800695BC) -/* 04D990 7F018E60 46062202 */ mul.s $f8, $f4, $f6 -/* 04D994 7F018E64 46104280 */ add.s $f10, $f8, $f16 -/* 04D998 7F018E68 0C002914 */ jal randomGetNext -/* 04D99C 7F018E6C E42A95BC */ swc1 $f10, %lo(flt_CODE_bss_800695BC)($at) -/* 04D9A0 7F018E70 44829000 */ mtc1 $v0, $f18 -/* 04D9A4 7F018E74 3C038007 */ lui $v1, %hi(flt_CODE_bss_800695E8) -/* 04D9A8 7F018E78 44800000 */ mtc1 $zero, $f0 -/* 04D9AC 7F018E7C 246395E8 */ addiu $v1, %lo(flt_CODE_bss_800695E8) # addiu $v1, $v1, -0x6a18 -/* 04D9B0 7F018E80 04410005 */ bgez $v0, .L7F018E98 -/* 04D9B4 7F018E84 46809120 */ cvt.s.w $f4, $f18 -/* 04D9B8 7F018E88 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04D9BC 7F018E8C 44813000 */ mtc1 $at, $f6 -/* 04D9C0 7F018E90 00000000 */ nop -/* 04D9C4 7F018E94 46062100 */ add.s $f4, $f4, $f6 -.L7F018E98: -/* 04D9C8 7F018E98 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04D9CC 7F018E9C 44814000 */ mtc1 $at, $f8 -/* 04D9D0 7F018EA0 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 04D9D4 7F018EA4 44815000 */ mtc1 $at, $f10 -/* 04D9D8 7F018EA8 46082402 */ mul.s $f16, $f4, $f8 -/* 04D9DC 7F018EAC 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 04D9E0 7F018EB0 44813000 */ mtc1 $at, $f6 -/* 04D9E4 7F018EB4 3C018007 */ lui $at, %hi(flt_CODE_bss_800695C0) -/* 04D9E8 7F018EB8 8FBF001C */ lw $ra, 0x1c($sp) -/* 04D9EC 7F018EBC 240D0001 */ li $t5, 1 -/* 04D9F0 7F018EC0 460A8482 */ mul.s $f18, $f16, $f10 -/* 04D9F4 7F018EC4 46069100 */ add.s $f4, $f18, $f6 -/* 04D9F8 7F018EC8 E42495C0 */ swc1 $f4, %lo(flt_CODE_bss_800695C0)($at) -/* 04D9FC 7F018ECC 3C018007 */ lui $at, %hi(flt_CODE_bss_800695A4) -/* 04DA00 7F018ED0 C42895A4 */ lwc1 $f8, %lo(flt_CODE_bss_800695A4)($at) -/* 04DA04 7F018ED4 3C018007 */ lui $at, %hi(flt_CODE_bss_800695A0) -/* 04DA08 7F018ED8 E42895A0 */ swc1 $f8, %lo(flt_CODE_bss_800695A0)($at) -/* 04DA0C 7F018EDC 3C018007 */ lui $at, %hi(flt_CODE_bss_800695B0) -/* 04DA10 7F018EE0 C43095B0 */ lwc1 $f16, %lo(flt_CODE_bss_800695B0)($at) -/* 04DA14 7F018EE4 3C018007 */ lui $at, %hi(flt_CODE_bss_800695AC) -/* 04DA18 7F018EE8 E43095AC */ swc1 $f16, %lo(flt_CODE_bss_800695AC)($at) -/* 04DA1C 7F018EEC 3C018007 */ lui $at, %hi(flt_CODE_bss_800695BC) -/* 04DA20 7F018EF0 C42A95BC */ lwc1 $f10, %lo(flt_CODE_bss_800695BC)($at) -/* 04DA24 7F018EF4 3C018007 */ lui $at, %hi(flt_CODE_bss_800695B8) -/* 04DA28 7F018EF8 27BD00B8 */ addiu $sp, $sp, 0xb8 -/* 04DA2C 7F018EFC E42A95B8 */ swc1 $f10, %lo(flt_CODE_bss_800695B8)($at) -/* 04DA30 7F018F00 3C018007 */ lui $at, %hi(bss_800695E4) -/* 04DA34 7F018F04 AC2D95E4 */ sw $t5, %lo(bss_800695E4)($at) -/* 04DA38 7F018F08 E4600000 */ swc1 $f0, ($v1) -/* 04DA3C 7F018F0C E4600004 */ swc1 $f0, 4($v1) -/* 04DA40 7F018F10 03E00008 */ jr $ra -/* 04DA44 7F018F14 E4600008 */ swc1 $f0, 8($v1) -) -#endif -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel jpt_intro_bond_head - .word .L7F0188C0 - .word .L7F01881C - .word .L7F018830 - .word .L7F018844 - .word .L7F018858 - .size jpt_intro_bond_head, . - jpt_intro_bond_head -glabel D_80051B00 -.word 0x40C90FDB /*6.2831855;*/ -glabel D_80051B04 -.word 0x4020D97C /*2.5132742;*/ - - -.text -glabel init_menu18_displaycast -/* 04B104 7F018714 3C0E8002 */ lui $t6, %hi(ptr_logo_and_walletbond_DL) # $t6, 0x8002 -/* 04B108 7F018718 8DCE5EA0 */ lw $t6, %lo(ptr_logo_and_walletbond_DL)($t6) -/* 04B10C 7F01871C 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 04B110 7F018720 3C188002 */ lui $t8, %hi(D_8002BA2C) # $t8, 0x8002 -/* 04B114 7F018724 AFBF001C */ sw $ra, 0x1c($sp) -/* 04B118 7F018728 27186F7C */ addiu $t8, %lo(D_8002BA2C) # addiu $t8, $t8, 0x6f7c -/* 04B11C 7F01872C AFAE00B4 */ sw $t6, 0xb4($sp) -/* 04B120 7F018730 8F010000 */ lw $at, ($t8) -/* 04B124 7F018734 27AF00A0 */ addiu $t7, $sp, 0xa0 -/* 04B128 7F018738 8F090004 */ lw $t1, 4($t8) -/* 04B12C 7F01873C ADE10000 */ sw $at, ($t7) -/* 04B130 7F018740 8F010008 */ lw $at, 8($t8) -/* 04B134 7F018744 ADE90004 */ sw $t1, 4($t7) -/* 04B138 7F018748 ADE10008 */ sw $at, 8($t7) -/* 04B13C 7F01874C 0C00262C */ jal randomGetNext -/* 04B140 7F018750 AFA0007C */ sw $zero, 0x7c($sp) -/* 04B144 7F018754 3C0B8002 */ lui $t3, %hi(full_actor_intro) # $t3, 0x8002 -/* 04B148 7F018758 8D6B6B4C */ lw $t3, %lo(full_actor_intro)($t3) -/* 04B14C 7F01875C 304A0001 */ andi $t2, $v0, 1 -/* 04B150 7F018760 AFAA0070 */ sw $t2, 0x70($sp) -/* 04B154 7F018764 1160000A */ beqz $t3, .L7F018790 -/* 04B158 7F018768 3C0C8002 */ lui $t4, %hi(intro_character_index) # $t4, 0x8002 -/* 04B15C 7F01876C 8D8C6B38 */ lw $t4, %lo(intro_character_index)($t4) -/* 04B160 7F018770 15800007 */ bnez $t4, .L7F018790 -/* 04B164 7F018774 00000000 */ nop -/* 04B168 7F018778 0C001927 */ jal musicTrack1ApplySeqpVol -/* 04B16C 7F01877C 24047FFF */ li $a0, 32767 -/* 04B170 7F018780 3C018002 */ lui $at, %hi(g_musicXTrack1Fade) # $at, 0x8002 -/* 04B174 7F018784 AC2021DC */ sw $zero, %lo(g_musicXTrack1Fade)($at) -/* 04B178 7F018788 0C0018B7 */ jal musicTrack1Play -/* 04B17C 7F01878C 24040002 */ li $a0, 2 -.L7F018790: -/* 04B180 7F018790 3C048002 */ lui $a0, %hi(intro_animation_table) # $a0, 0x8002 -/* 04B184 7F018794 24846E0C */ addiu $a0, %lo(intro_animation_table) # addiu $a0, $a0, 0x6e0c -/* 04B188 7F018798 00006900 */ sll $t5, $zero, 4 -/* 04B18C 7F01879C 008D7021 */ addu $t6, $a0, $t5 -/* 04B190 7F0187A0 8DC80000 */ lw $t0, ($t6) -/* 04B194 7F0187A4 3C038002 */ lui $v1, %hi(intro_animation_count) # $v1, 0x8002 -/* 04B198 7F0187A8 24636B40 */ addiu $v1, %lo(intro_animation_count) # addiu $v1, $v1, 0x6b40 -/* 04B19C 7F0187AC AC600000 */ sw $zero, ($v1) -/* 04B1A0 7F0187B0 05000009 */ bltz $t0, .L7F0187D8 -/* 04B1A4 7F0187B4 00001025 */ move $v0, $zero -/* 04B1A8 7F0187B8 24590001 */ addiu $t9, $v0, 1 -.L7F0187BC: -/* 04B1AC 7F0187BC 00197900 */ sll $t7, $t9, 4 -/* 04B1B0 7F0187C0 008FC021 */ addu $t8, $a0, $t7 -/* 04B1B4 7F0187C4 8F090000 */ lw $t1, ($t8) -/* 04B1B8 7F0187C8 AC790000 */ sw $t9, ($v1) -/* 04B1BC 7F0187CC 03201025 */ move $v0, $t9 -/* 04B1C0 7F0187D0 0523FFFA */ bgezl $t1, .L7F0187BC -/* 04B1C4 7F0187D4 24590001 */ addiu $t9, $v0, 1 -.L7F0187D8: -/* 04B1C8 7F0187D8 0C00262C */ jal randomGetNext -/* 04B1CC 7F0187DC 00000000 */ nop -/* 04B1D0 7F0187E0 3C038002 */ lui $v1, %hi(intro_animation_count) # $v1, 0x8002 -/* 04B1D4 7F0187E4 24636B40 */ addiu $v1, %lo(intro_animation_count) # addiu $v1, $v1, 0x6b40 -/* 04B1D8 7F0187E8 8C6A0000 */ lw $t2, ($v1) -/* 04B1DC 7F0187EC 3C0C8002 */ lui $t4, %hi(intro_character_index) # $t4, 0x8002 -/* 04B1E0 7F0187F0 8D8C6B38 */ lw $t4, %lo(intro_character_index)($t4) -/* 04B1E4 7F0187F4 004A001B */ divu $zero, $v0, $t2 -/* 04B1E8 7F0187F8 00005810 */ mfhi $t3 -/* 04B1EC 7F0187FC 3C018002 */ lui $at, %hi(randomly_selected_intro_animation) # $at, 0x8002 -/* 04B1F0 7F018800 AC2B6B3C */ sw $t3, %lo(randomly_selected_intro_animation)($at) -/* 04B1F4 7F018804 3C0F8002 */ lui $t7, %hi(randomly_selected_intro_animation) # $t7, 0x8002 -/* 04B1F8 7F018808 000C6880 */ sll $t5, $t4, 2 -/* 04B1FC 7F01880C 8DEF6B3C */ lw $t7, %lo(randomly_selected_intro_animation)($t7) -/* 04B200 7F018810 3C0E8002 */ lui $t6, %hi(intro_char_table) # $t6, 0x8002 -/* 04B204 7F018814 01AC6821 */ addu $t5, $t5, $t4 -/* 04B208 7F018818 000D6880 */ sll $t5, $t5, 2 -/* 04B20C 7F01881C 25CE6B50 */ addiu $t6, %lo(intro_char_table) # addiu $t6, $t6, 0x6b50 -/* 04B210 7F018820 01AE2021 */ addu $a0, $t5, $t6 -/* 04B214 7F018824 8C880000 */ lw $t0, ($a0) -/* 04B218 7F018828 3C098002 */ lui $t1, %hi(intro_animation_table+12) -/* 04B21C 7F01882C 000FC100 */ sll $t8, $t7, 4 -/* 04B220 7F018830 01384821 */ addu $t1, $t1, $t8 -/* 04B224 7F018834 8C990004 */ lw $t9, 4($a0) -/* 04B228 7F018838 8D296E18 */ lw $t1, %lo(intro_animation_table+12)($t1) -/* 04B22C 7F01883C 24010016 */ li $at, 22 -/* 04B230 7F018840 15400002 */ bnez $t2, .L7F01884C -/* 04B234 7F018844 00000000 */ nop -/* 04B238 7F018848 0007000D */ break 7 -.L7F01884C: -/* 04B23C 7F01884C AFA8008C */ sw $t0, 0x8c($sp) -/* 04B240 7F018850 01005025 */ move $t2, $t0 -/* 04B244 7F018854 AFB90088 */ sw $t9, 0x88($sp) -/* 04B248 7F018858 15010022 */ bne $t0, $at, .L7F0188E4 -/* 04B24C 7F01885C AFA9006C */ sw $t1, 0x6c($sp) -/* 04B250 7F018860 0C00262C */ jal randomGetNext -/* 04B254 7F018864 00000000 */ nop -/* 04B258 7F018868 24010005 */ li $at, 5 -/* 04B25C 7F01886C 0041001B */ divu $zero, $v0, $at -/* 04B260 7F018870 00005810 */ mfhi $t3 -/* 04B264 7F018874 2D610005 */ sltiu $at, $t3, 5 -/* 04B268 7F018878 1020002F */ beqz $at, .L7F018938 -/* 04B26C 7F01887C 000B5880 */ sll $t3, $t3, 2 -/* 04B270 7F018880 3C018004 */ lui $at, %hi(jpt_intro_bond_head) -/* 04B274 7F018884 002B0821 */ addu $at, $at, $t3 -/* 04B278 7F018888 8C2B7C14 */ lw $t3, %lo(jpt_intro_bond_head)($at) -/* 04B27C 7F01888C 01600008 */ jr $t3 -/* 04B280 7F018890 00000000 */ nop -.L7F01881C: -/* 04B284 7F018894 240C0017 */ li $t4, 23 -/* 04B288 7F018898 240D004B */ li $t5, 75 -/* 04B28C 7F01889C AFAD0088 */ sw $t5, 0x88($sp) -/* 04B290 7F0188A0 10000025 */ b .L7F018938 -/* 04B294 7F0188A4 AFAC008C */ sw $t4, 0x8c($sp) -.L7F018830: -/* 04B298 7F0188A8 240E0018 */ li $t6, 24 -/* 04B29C 7F0188AC 2408004B */ li $t0, 75 -/* 04B2A0 7F0188B0 AFA80088 */ sw $t0, 0x88($sp) -/* 04B2A4 7F0188B4 10000020 */ b .L7F018938 -/* 04B2A8 7F0188B8 AFAE008C */ sw $t6, 0x8c($sp) -.L7F018844: -/* 04B2AC 7F0188BC 24190019 */ li $t9, 25 -/* 04B2B0 7F0188C0 240F004B */ li $t7, 75 -/* 04B2B4 7F0188C4 AFAF0088 */ sw $t7, 0x88($sp) -/* 04B2B8 7F0188C8 1000001B */ b .L7F018938 -/* 04B2BC 7F0188CC AFB9008C */ sw $t9, 0x8c($sp) -.L7F018858: -/* 04B2C0 7F0188D0 24180005 */ li $t8, 5 -/* 04B2C4 7F0188D4 2409004E */ li $t1, 78 -/* 04B2C8 7F0188D8 AFA90088 */ sw $t1, 0x88($sp) -/* 04B2CC 7F0188DC 10000016 */ b .L7F018938 -/* 04B2D0 7F0188E0 AFB8008C */ sw $t8, 0x8c($sp) -.L7F01886C: -.L7F0188E4: -/* 04B2D4 7F0188E4 8FAA008C */ lw $t2, 0x8c($sp) -/* 04B2D8 7F0188E8 24010010 */ li $at, 16 -/* 04B2DC 7F0188EC 8FAD008C */ lw $t5, 0x8c($sp) -/* 04B2E0 7F0188F0 55410009 */ bnel $t2, $at, .L7F018918 -/* 04B2E4 7F0188F4 24010009 */ li $at, 9 -/* 04B2E8 7F0188F8 0C00262C */ jal randomGetNext -/* 04B2EC 7F0188FC 00000000 */ nop -/* 04B2F0 7F018900 304B0001 */ andi $t3, $v0, 1 -/* 04B2F4 7F018904 1160000C */ beqz $t3, .L7F018938 -/* 04B2F8 7F018908 240C004F */ li $t4, 79 -/* 04B2FC 7F01890C 1000000A */ b .L7F018938 -/* 04B300 7F018910 AFAC008C */ sw $t4, 0x8c($sp) -/* 04B304 7F018914 24010009 */ li $at, 9 -.L7F018918: -/* 04B308 7F018918 55A10008 */ bnel $t5, $at, .L7F01893C -/* 04B30C 7F01891C 8FB90088 */ lw $t9, 0x88($sp) -/* 04B310 7F018920 0C00262C */ jal randomGetNext -/* 04B314 7F018924 00000000 */ nop -/* 04B318 7F018928 304E0001 */ andi $t6, $v0, 1 -/* 04B31C 7F01892C 11C00002 */ beqz $t6, .L7F018938 -/* 04B320 7F018930 24080008 */ li $t0, 8 -/* 04B324 7F018934 AFA8008C */ sw $t0, 0x8c($sp) -.L7F0188C0: -.L7F018938: -/* 04B328 7F018938 8FB90088 */ lw $t9, 0x88($sp) -.L7F01893C: -/* 04B32C 7F01893C 2401FF9F */ li $at, -97 -/* 04B330 7F018940 57210005 */ bnel $t9, $at, .L7F018958 -/* 04B334 7F018944 8FAF00B4 */ lw $t7, 0xb4($sp) -/* 04B338 7F018948 0FC08D90 */ jal get_random_head -/* 04B33C 7F01894C 8FA4008C */ lw $a0, 0x8c($sp) -/* 04B340 7F018950 AFA20088 */ sw $v0, 0x88($sp) -/* 04B344 7F018954 8FAF00B4 */ lw $t7, 0xb4($sp) -.L7F018958: -/* 04B348 7F018958 3C020003 */ lui $v0, (0x00031160 >> 16) # lui $v0, 3 -/* 04B34C 7F01895C 34421160 */ ori $v0, (0x00031160 & 0xFFFF) # ori $v0, $v0, 0x1160 -/* 04B350 7F018960 01E22021 */ addu $a0, $t7, $v0 -/* 04B354 7F018964 2484003F */ addiu $a0, $a0, 0x3f -/* 04B358 7F018968 3498003F */ ori $t8, $a0, 0x3f -/* 04B35C 7F01896C 3B04003F */ xori $a0, $t8, 0x3f -/* 04B360 7F018970 AFA200B0 */ sw $v0, 0xb0($sp) -/* 04B364 7F018974 240501B8 */ li $a1, 440 -/* 04B368 7F018978 0FC3465A */ jal zbufSetBuffer -/* 04B36C 7F01897C 2406014A */ li $a2, 330 -/* 04B370 7F018980 3C060001 */ lui $a2, (0x00019000 >> 16) # lui $a2, 1 -/* 04B374 7F018984 34C69000 */ ori $a2, (0x00019000 & 0xFFFF) # ori $a2, $a2, 0x9000 -/* 04B378 7F018988 27A40090 */ addiu $a0, $sp, 0x90 -/* 04B37C 7F01898C 0FC32C05 */ jal texInitPool -/* 04B380 7F018990 8FA500B4 */ lw $a1, 0xb4($sp) -/* 04B384 7F018994 8FAA008C */ lw $t2, 0x8c($sp) -/* 04B388 7F018998 3C0C8003 */ lui $t4, %hi(c_item_entries) # $t4, 0x8003 -/* 04B38C 7F01899C 8FA600B4 */ lw $a2, 0xb4($sp) -/* 04B390 7F0189A0 000A5880 */ sll $t3, $t2, 2 -/* 04B394 7F0189A4 016A5821 */ addu $t3, $t3, $t2 -/* 04B398 7F0189A8 8FA700B0 */ lw $a3, 0xb0($sp) -/* 04B39C 7F0189AC 3C030001 */ lui $v1, (0x00019000 >> 16) # lui $v1, 1 -/* 04B3A0 7F0189B0 000B5880 */ sll $t3, $t3, 2 -/* 04B3A4 7F0189B4 258C7A60 */ addiu $t4, %lo(c_item_entries) # addiu $t4, $t4, 0x7a60 -/* 04B3A8 7F0189B8 34639000 */ ori $v1, (0x00019000 & 0xFFFF) # ori $v1, $v1, 0x9000 -/* 04B3AC 7F0189BC 016C1021 */ addu $v0, $t3, $t4 -/* 04B3B0 7F0189C0 8C440000 */ lw $a0, ($v0) -/* 04B3B4 7F0189C4 27AD0090 */ addiu $t5, $sp, 0x90 -/* 04B3B8 7F0189C8 00C33021 */ addu $a2, $a2, $v1 -/* 04B3BC 7F0189CC 00E33823 */ subu $a3, $a3, $v1 -/* 04B3C0 7F0189D0 AFA700B0 */ sw $a3, 0xb0($sp) -/* 04B3C4 7F0189D4 AFA600B4 */ sw $a2, 0xb4($sp) -/* 04B3C8 7F0189D8 AFAD0010 */ sw $t5, 0x10($sp) -/* 04B3CC 7F0189DC 8C450004 */ lw $a1, 4($v0) -/* 04B3D0 7F0189E0 AFA20024 */ sw $v0, 0x24($sp) -/* 04B3D4 7F0189E4 0FC1D949 */ jal load_object_fill_header -/* 04B3D8 7F0189E8 AFA40080 */ sw $a0, 0x80($sp) -/* 04B3DC 7F0189EC 8FA20024 */ lw $v0, 0x24($sp) -/* 04B3E0 7F0189F0 0FC2F150 */ jal get_pc_buffer_remaining_value -/* 04B3E4 7F0189F4 8C440004 */ lw $a0, 4($v0) -/* 04B3E8 7F0189F8 2443003F */ addiu $v1, $v0, 0x3f -/* 04B3EC 7F0189FC 8FB900B0 */ lw $t9, 0xb0($sp) -/* 04B3F0 7F018A00 8FB800B4 */ lw $t8, 0xb4($sp) -/* 04B3F4 7F018A04 346E003F */ ori $t6, $v1, 0x3f -/* 04B3F8 7F018A08 8FAA0088 */ lw $t2, 0x88($sp) -/* 04B3FC 7F018A0C 39C8003F */ xori $t0, $t6, 0x3f -/* 04B400 7F018A10 03287823 */ subu $t7, $t9, $t0 -/* 04B404 7F018A14 03084821 */ addu $t1, $t8, $t0 -/* 04B408 7F018A18 AFAF00B0 */ sw $t7, 0xb0($sp) -/* 04B40C 7F018A1C 0540001C */ bltz $t2, .L7F018A90 -/* 04B410 7F018A20 AFA900B4 */ sw $t1, 0xb4($sp) -/* 04B414 7F018A24 000A5880 */ sll $t3, $t2, 2 -/* 04B418 7F018A28 016A5821 */ addu $t3, $t3, $t2 -/* 04B41C 7F018A2C 3C0C8003 */ lui $t4, %hi(c_item_entries) # $t4, 0x8003 -/* 04B420 7F018A30 258C7A60 */ addiu $t4, %lo(c_item_entries) # addiu $t4, $t4, 0x7a60 -/* 04B424 7F018A34 000B5880 */ sll $t3, $t3, 2 -/* 04B428 7F018A38 016C1021 */ addu $v0, $t3, $t4 -/* 04B42C 7F018A3C 8C440000 */ lw $a0, ($v0) -/* 04B430 7F018A40 27AD0090 */ addiu $t5, $sp, 0x90 -/* 04B434 7F018A44 AFAD0010 */ sw $t5, 0x10($sp) -/* 04B438 7F018A48 8C450004 */ lw $a1, 4($v0) -/* 04B43C 7F018A4C AFA20024 */ sw $v0, 0x24($sp) -/* 04B440 7F018A50 01203025 */ move $a2, $t1 -/* 04B444 7F018A54 01E03825 */ move $a3, $t7 -/* 04B448 7F018A58 0FC1D949 */ jal load_object_fill_header -/* 04B44C 7F018A5C AFA4007C */ sw $a0, 0x7c($sp) -/* 04B450 7F018A60 8FA20024 */ lw $v0, 0x24($sp) -/* 04B454 7F018A64 0FC2F150 */ jal get_pc_buffer_remaining_value -/* 04B458 7F018A68 8C440004 */ lw $a0, 4($v0) -/* 04B45C 7F018A6C 2443003F */ addiu $v1, $v0, 0x3f -/* 04B460 7F018A70 8FB900B0 */ lw $t9, 0xb0($sp) -/* 04B464 7F018A74 8FAA00B4 */ lw $t2, 0xb4($sp) -/* 04B468 7F018A78 346E003F */ ori $t6, $v1, 0x3f -/* 04B46C 7F018A7C 39C8003F */ xori $t0, $t6, 0x3f -/* 04B470 7F018A80 0328C023 */ subu $t8, $t9, $t0 -/* 04B474 7F018A84 01485821 */ addu $t3, $t2, $t0 -/* 04B478 7F018A88 AFB800B0 */ sw $t8, 0xb0($sp) -/* 04B47C 7F018A8C AFAB00B4 */ sw $t3, 0xb4($sp) -.L7F018A90: -/* 04B480 7F018A90 8FA4008C */ lw $a0, 0x8c($sp) -/* 04B484 7F018A94 8FA50088 */ lw $a1, 0x88($sp) -/* 04B488 7F018A98 8FA60080 */ lw $a2, 0x80($sp) -/* 04B48C 7F018A9C 8FA7007C */ lw $a3, 0x7c($sp) -/* 04B490 7F018AA0 0FC08D22 */ jal setup_chr_instance -/* 04B494 7F018AA4 AFA00010 */ sw $zero, 0x10($sp) -/* 04B498 7F018AA8 3C038002 */ lui $v1, %hi(cast_model) # $v1, 0x8002 -/* 04B49C 7F018AAC 24636B44 */ addiu $v1, %lo(cast_model) # addiu $v1, $v1, 0x6b44 -/* 04B4A0 7F018AB0 3C053DCC */ lui $a1, (0x3DCCCCCD >> 16) # lui $a1, 0x3dcc -/* 04B4A4 7F018AB4 AC620000 */ sw $v0, ($v1) -/* 04B4A8 7F018AB8 34A5CCCD */ ori $a1, (0x3DCCCCCD & 0xFFFF) # ori $a1, $a1, 0xcccd -/* 04B4AC 7F018ABC 0FC1B4CF */ jal modelSetScale -/* 04B4B0 7F018AC0 00402025 */ move $a0, $v0 -/* 04B4B4 7F018AC4 8FAC006C */ lw $t4, 0x6c($sp) -/* 04B4B8 7F018AC8 24010002 */ li $at, 2 -/* 04B4BC 7F018ACC 1180007A */ beqz $t4, .L7F018CB8 -/* 04B4C0 7F018AD0 00000000 */ nop -/* 04B4C4 7F018AD4 15810018 */ bne $t4, $at, .L7F018B38 -/* 04B4C8 7F018AD8 27B8002C */ addiu $t8, $sp, 0x2c -/* 04B4CC 7F018ADC 3C0F8002 */ lui $t7, %hi(random_rifles_in_intro) # $t7, 0x8002 -/* 04B4D0 7F018AE0 25EF6F88 */ addiu $t7, %lo(random_rifles_in_intro) # addiu $t7, $t7, 0x6f88 -/* 04B4D4 7F018AE4 8DE10000 */ lw $at, ($t7) -/* 04B4D8 7F018AE8 8DEE0004 */ lw $t6, 4($t7) -/* 04B4DC 7F018AEC 27A90054 */ addiu $t1, $sp, 0x54 -/* 04B4E0 7F018AF0 AD210000 */ sw $at, ($t1) -/* 04B4E4 7F018AF4 AD2E0004 */ sw $t6, 4($t1) -/* 04B4E8 7F018AF8 8DEE000C */ lw $t6, 0xc($t7) -/* 04B4EC 7F018AFC 8DE10008 */ lw $at, 8($t7) -/* 04B4F0 7F018B00 AD2E000C */ sw $t6, 0xc($t1) -/* 04B4F4 7F018B04 AD210008 */ sw $at, 8($t1) -/* 04B4F8 7F018B08 8DE10010 */ lw $at, 0x10($t7) -/* 04B4FC 7F018B0C 8DEE0014 */ lw $t6, 0x14($t7) -/* 04B500 7F018B10 AD210010 */ sw $at, 0x10($t1) -/* 04B504 7F018B14 0C00262C */ jal randomGetNext -/* 04B508 7F018B18 AD2E0014 */ sw $t6, 0x14($t1) -/* 04B50C 7F018B1C 24010006 */ li $at, 6 -/* 04B510 7F018B20 0041001B */ divu $zero, $v0, $at -/* 04B514 7F018B24 00004010 */ mfhi $t0 -/* 04B518 7F018B28 0008C880 */ sll $t9, $t0, 2 -/* 04B51C 7F018B2C 03B91821 */ addu $v1, $sp, $t9 -/* 04B520 7F018B30 10000016 */ b .L7F018B8C -/* 04B524 7F018B34 8C630054 */ lw $v1, 0x54($v1) -.L7F018B38: -/* 04B528 7F018B38 3C0A8002 */ lui $t2, %hi(random_pistols_in_intro) # $t2, 0x8002 -/* 04B52C 7F018B3C 254A6FA0 */ addiu $t2, %lo(random_pistols_in_intro) # addiu $t2, $t2, 0x6fa0 -/* 04B530 7F018B40 254C0024 */ addiu $t4, $t2, 0x24 -.L7F018B44: -/* 04B534 7F018B44 8D410000 */ lw $at, ($t2) -/* 04B538 7F018B48 254A000C */ addiu $t2, $t2, 0xc -/* 04B53C 7F018B4C 2718000C */ addiu $t8, $t8, 0xc -/* 04B540 7F018B50 AF01FFF4 */ sw $at, -0xc($t8) -/* 04B544 7F018B54 8D41FFF8 */ lw $at, -8($t2) -/* 04B548 7F018B58 AF01FFF8 */ sw $at, -8($t8) -/* 04B54C 7F018B5C 8D41FFFC */ lw $at, -4($t2) -/* 04B550 7F018B60 154CFFF8 */ bne $t2, $t4, .L7F018B44 -/* 04B554 7F018B64 AF01FFFC */ sw $at, -4($t8) -/* 04B558 7F018B68 8D410000 */ lw $at, ($t2) -/* 04B55C 7F018B6C 0C00262C */ jal randomGetNext -/* 04B560 7F018B70 AF010000 */ sw $at, ($t8) -/* 04B564 7F018B74 2401000A */ li $at, 10 -/* 04B568 7F018B78 0041001B */ divu $zero, $v0, $at -/* 04B56C 7F018B7C 00006810 */ mfhi $t5 -/* 04B570 7F018B80 000D4880 */ sll $t1, $t5, 2 -/* 04B574 7F018B84 03A91821 */ addu $v1, $sp, $t1 -/* 04B578 7F018B88 8C63002C */ lw $v1, 0x2c($v1) -.L7F018B8C: -/* 04B57C 7F018B8C 240100BE */ li $at, 190 -/* 04B580 7F018B90 54610007 */ bnel $v1, $at, .L7F018BB0 -/* 04B584 7F018B94 240100BB */ li $at, 187 -/* 04B588 7F018B98 0FC07A4C */ jal fileIsCradleCompletedAnyFolder -/* 04B58C 7F018B9C AFA30084 */ sw $v1, 0x84($sp) -/* 04B590 7F018BA0 14400002 */ bnez $v0, .L7F018BAC -/* 04B594 7F018BA4 8FA30084 */ lw $v1, 0x84($sp) -/* 04B598 7F018BA8 240300BF */ li $v1, 191 -.L7F018BAC: -/* 04B59C 7F018BAC 240100BB */ li $at, 187 -.L7F018BB0: -/* 04B5A0 7F018BB0 54610007 */ bnel $v1, $at, .L7F018BD0 -/* 04B5A4 7F018BB4 240100D0 */ li $at, 208 -/* 04B5A8 7F018BB8 0FC07A60 */ jal check_aztec_completed_any_folder_secret_00 -/* 04B5AC 7F018BBC AFA30084 */ sw $v1, 0x84($sp) -/* 04B5B0 7F018BC0 14400002 */ bnez $v0, .L7F018BCC -/* 04B5B4 7F018BC4 8FA30084 */ lw $v1, 0x84($sp) -/* 04B5B8 7F018BC8 240300BF */ li $v1, 191 -.L7F018BCC: -/* 04B5BC 7F018BCC 240100D0 */ li $at, 208 -.L7F018BD0: -/* 04B5C0 7F018BD0 54610007 */ bnel $v1, $at, .L7F018BF0 -/* 04B5C4 7F018BD4 00037880 */ sll $t7, $v1, 2 -/* 04B5C8 7F018BD8 0FC07A74 */ jal fileIsEgyptCompletedOn00AnyFolder -/* 04B5CC 7F018BDC AFA30084 */ sw $v1, 0x84($sp) -/* 04B5D0 7F018BE0 14400002 */ bnez $v0, .L7F018BEC -/* 04B5D4 7F018BE4 8FA30084 */ lw $v1, 0x84($sp) -/* 04B5D8 7F018BE8 240300BF */ li $v1, 191 -.L7F018BEC: -/* 04B5DC 7F018BEC 00037880 */ sll $t7, $v1, 2 -.L7F018BF0: -/* 04B5E0 7F018BF0 01E37823 */ subu $t7, $t7, $v1 -/* 04B5E4 7F018BF4 3C0E8003 */ lui $t6, %hi(PitemZ_entries) # $t6, 0x8003 -/* 04B5E8 7F018BF8 25CE4D88 */ addiu $t6, %lo(PitemZ_entries) # addiu $t6, $t6, 0x4d88 -/* 04B5EC 7F018BFC 000F7880 */ sll $t7, $t7, 2 -/* 04B5F0 7F018C00 01EE1021 */ addu $v0, $t7, $t6 -/* 04B5F4 7F018C04 8C440000 */ lw $a0, ($v0) -/* 04B5F8 7F018C08 27A80090 */ addiu $t0, $sp, 0x90 -/* 04B5FC 7F018C0C AFA80010 */ sw $t0, 0x10($sp) -/* 04B600 7F018C10 8C450004 */ lw $a1, 4($v0) -/* 04B604 7F018C14 AFA20024 */ sw $v0, 0x24($sp) -/* 04B608 7F018C18 8FA600B4 */ lw $a2, 0xb4($sp) -/* 04B60C 7F018C1C 8FA700B0 */ lw $a3, 0xb0($sp) -/* 04B610 7F018C20 0FC1D949 */ jal load_object_fill_header -/* 04B614 7F018C24 AFA40078 */ sw $a0, 0x78($sp) -/* 04B618 7F018C28 8FA20024 */ lw $v0, 0x24($sp) -/* 04B61C 7F018C2C 0FC2F150 */ jal get_pc_buffer_remaining_value -/* 04B620 7F018C30 8C440004 */ lw $a0, 4($v0) -/* 04B624 7F018C34 0FC1D75F */ jal modelCalculateRwDataLen -/* 04B628 7F018C38 8FA40078 */ lw $a0, 0x78($sp) -/* 04B62C 7F018C3C 0FC1B1F5 */ jal get_obj_instance_controller_for_header -/* 04B630 7F018C40 8FA40078 */ lw $a0, 0x78($sp) -/* 04B634 7F018C44 3C038002 */ lui $v1, %hi(cast_model_weapon) # $v1, 0x8002 -/* 04B638 7F018C48 24636B48 */ addiu $v1, %lo(cast_model_weapon) # addiu $v1, $v1, 0x6b48 -/* 04B63C 7F018C4C 3C053DCC */ lui $a1, (0x3DCCCCCD >> 16) # lui $a1, 0x3dcc -/* 04B640 7F018C50 AC620000 */ sw $v0, ($v1) -/* 04B644 7F018C54 34A5CCCD */ ori $a1, (0x3DCCCCCD & 0xFFFF) # ori $a1, $a1, 0xcccd -/* 04B648 7F018C58 0FC1B4CF */ jal modelSetScale -/* 04B64C 7F018C5C 00402025 */ move $a0, $v0 -/* 04B650 7F018C60 3C038002 */ lui $v1, %hi(cast_model_weapon) # $v1, 0x8002 -/* 04B654 7F018C64 3C068002 */ lui $a2, %hi(cast_model) # $a2, 0x8002 -/* 04B658 7F018C68 24C66B44 */ addiu $a2, %lo(cast_model) # addiu $a2, $a2, 0x6b44 -/* 04B65C 7F018C6C 24636B48 */ addiu $v1, %lo(cast_model_weapon) # addiu $v1, $v1, 0x6b48 -/* 04B660 7F018C70 8C6B0000 */ lw $t3, ($v1) -/* 04B664 7F018C74 8CD90000 */ lw $t9, ($a2) -/* 04B668 7F018C78 24020003 */ li $v0, 3 -/* 04B66C 7F018C7C AD790018 */ sw $t9, 0x18($t3) -/* 04B670 7F018C80 8FAC0070 */ lw $t4, 0x70($sp) -/* 04B674 7F018C84 11800003 */ beqz $t4, .L7F018C94 -/* 04B678 7F018C88 00000000 */ nop -/* 04B67C 7F018C8C 10000001 */ b .L7F018C94 -/* 04B680 7F018C90 24020005 */ li $v0, 5 -.L7F018C94: -/* 04B684 7F018C94 8CCA0000 */ lw $t2, ($a2) -/* 04B688 7F018C98 00024880 */ sll $t1, $v0, 2 -/* 04B68C 7F018C9C 8C680000 */ lw $t0, ($v1) -/* 04B690 7F018CA0 8D580008 */ lw $t8, 8($t2) -/* 04B694 7F018CA4 8F0D0008 */ lw $t5, 8($t8) -/* 04B698 7F018CA8 01A97821 */ addu $t7, $t5, $t1 -/* 04B69C 7F018CAC 8DEE0000 */ lw $t6, ($t7) -/* 04B6A0 7F018CB0 10000006 */ b .L7F018CCC -/* 04B6A4 7F018CB4 AD0E001C */ sw $t6, 0x1c($t0) -.L7F018CB8: -/* 04B6A8 7F018CB8 3C038002 */ lui $v1, %hi(cast_model_weapon) # $v1, 0x8002 -/* 04B6AC 7F018CBC 24636B48 */ addiu $v1, %lo(cast_model_weapon) # addiu $v1, $v1, 0x6b48 -/* 04B6B0 7F018CC0 3C068002 */ lui $a2, %hi(cast_model) # $a2, 0x8002 -/* 04B6B4 7F018CC4 24C66B44 */ addiu $a2, %lo(cast_model) # addiu $a2, $a2, 0x6b44 -/* 04B6B8 7F018CC8 AC600000 */ sw $zero, ($v1) -.L7F018CCC: -/* 04B6BC 7F018CCC 3C053DCC */ lui $a1, (0x3DCCCCCD >> 16) # lui $a1, 0x3dcc -/* 04B6C0 7F018CD0 34A5CCCD */ ori $a1, (0x3DCCCCCD & 0xFFFF) # ori $a1, $a1, 0xcccd -/* 04B6C4 7F018CD4 0FC1B4D2 */ jal sub_GAME_7F06CE84 -/* 04B6C8 7F018CD8 8CC40000 */ lw $a0, ($a2) -/* 04B6CC 7F018CDC 3C048002 */ lui $a0, %hi(cast_model) # $a0, 0x8002 -/* 04B6D0 7F018CE0 8C846B44 */ lw $a0, %lo(cast_model)($a0) -/* 04B6D4 7F018CE4 0FC1B480 */ jal setsuboffset -/* 04B6D8 7F018CE8 27A500A0 */ addiu $a1, $sp, 0xa0 -/* 04B6DC 7F018CEC 3C048002 */ lui $a0, %hi(cast_model) # $a0, 0x8002 -/* 04B6E0 7F018CF0 8C846B44 */ lw $a0, %lo(cast_model)($a0) -/* 04B6E4 7F018CF4 0FC1B49D */ jal setsubroty -/* 04B6E8 7F018CF8 24050000 */ li $a1, 0 -/* 04B6EC 7F018CFC 3C048002 */ lui $a0, %hi(cast_model) # $a0, 0x8002 -/* 04B6F0 7F018D00 3C053F19 */ lui $a1, (0x3F19999A >> 16) # lui $a1, 0x3f19 -/* 04B6F4 7F018D04 34A5999A */ ori $a1, (0x3F19999A & 0xFFFF) # ori $a1, $a1, 0x999a -/* 04B6F8 7F018D08 8C846B44 */ lw $a0, %lo(cast_model)($a0) -/* 04B6FC 7F018D0C 0FC1C02E */ jal modelSetAnimPlaySpeed -/* 04B700 7F018D10 24060000 */ li $a2, 0 -/* 04B704 7F018D14 3C198002 */ lui $t9, %hi(randomly_selected_intro_animation) # $t9, 0x8002 -/* 04B708 7F018D18 8F396B3C */ lw $t9, %lo(randomly_selected_intro_animation)($t9) -/* 04B70C 7F018D1C 3C0C8002 */ lui $t4, %hi(intro_animation_table) # $t4, 0x8002 -/* 04B710 7F018D20 258C6E0C */ addiu $t4, %lo(intro_animation_table) # addiu $t4, $t4, 0x6e0c -/* 04B714 7F018D24 00195900 */ sll $t3, $t9, 4 -/* 04B718 7F018D28 016C1021 */ addu $v0, $t3, $t4 -/* 04B71C 7F018D2C 8C4A0000 */ lw $t2, ($v0) -/* 04B720 7F018D30 C4440008 */ lwc1 $f4, 8($v0) -/* 04B724 7F018D34 44803000 */ mtc1 $zero, $f6 -/* 04B728 7F018D38 3C058002 */ lui $a1, %hi(animation_table_ptrs1) -/* 04B72C 7F018D3C 000AC080 */ sll $t8, $t2, 2 -/* 04B730 7F018D40 00B82821 */ addu $a1, $a1, $t8 -/* 04B734 7F018D44 3C048002 */ lui $a0, %hi(cast_model) # $a0, 0x8002 -/* 04B738 7F018D48 8C846B44 */ lw $a0, %lo(cast_model)($a0) -/* 04B73C 7F018D4C 8CA552BC */ lw $a1, %lo(animation_table_ptrs1)($a1) -/* 04B740 7F018D50 8C470004 */ lw $a3, 4($v0) -/* 04B744 7F018D54 8FA60070 */ lw $a2, 0x70($sp) -/* 04B748 7F018D58 E7A40010 */ swc1 $f4, 0x10($sp) -/* 04B74C 7F018D5C 0FC1BF92 */ jal modelSetAnimation -/* 04B750 7F018D60 E7A60014 */ swc1 $f6, 0x14($sp) -/* 04B754 7F018D64 3C018002 */ lui $at, %hi(g_MenuTimer) # $at, 0x8002 -/* 04B758 7F018D68 0C00262C */ jal randomGetNext -/* 04B75C 7F018D6C AC205E1C */ sw $zero, %lo(g_MenuTimer)($at) -/* 04B760 7F018D70 44824000 */ mtc1 $v0, $f8 -/* 04B764 7F018D74 04410005 */ bgez $v0, .L7F018D8C -/* 04B768 7F018D78 468042A0 */ cvt.s.w $f10, $f8 -/* 04B76C 7F018D7C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04B770 7F018D80 44818000 */ mtc1 $at, $f16 -/* 04B774 7F018D84 00000000 */ nop -/* 04B778 7F018D88 46105280 */ add.s $f10, $f10, $f16 -.L7F018D8C: -/* 04B77C 7F018D8C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04B780 7F018D90 44819000 */ mtc1 $at, $f18 -/* 04B784 7F018D94 3C0142A0 */ li $at, 0x42A00000 # 80.000000 -/* 04B788 7F018D98 44813000 */ mtc1 $at, $f6 -/* 04B78C 7F018D9C 46125102 */ mul.s $f4, $f10, $f18 -/* 04B790 7F018DA0 3C01428C */ li $at, 0x428C0000 # 70.000000 -/* 04B794 7F018DA4 44818000 */ mtc1 $at, $f16 -/* 04B798 7F018DA8 3C018006 */ lui $at, %hi(flt_CODE_bss_800695A4) # $at, 0x8006 -/* 04B79C 7F018DAC 46062202 */ mul.s $f8, $f4, $f6 -/* 04B7A0 7F018DB0 46104280 */ add.s $f10, $f8, $f16 -/* 04B7A4 7F018DB4 0C00262C */ jal randomGetNext -/* 04B7A8 7F018DB8 E42A84E4 */ swc1 $f10, %lo(flt_CODE_bss_800695A4)($at) -/* 04B7AC 7F018DBC 44829000 */ mtc1 $v0, $f18 -/* 04B7B0 7F018DC0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04B7B4 7F018DC4 04410004 */ bgez $v0, .L7F018DD8 -/* 04B7B8 7F018DC8 46809120 */ cvt.s.w $f4, $f18 -/* 04B7BC 7F018DCC 44813000 */ mtc1 $at, $f6 -/* 04B7C0 7F018DD0 00000000 */ nop -/* 04B7C4 7F018DD4 46062100 */ add.s $f4, $f4, $f6 -.L7F018DD8: -/* 04B7C8 7F018DD8 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04B7CC 7F018DDC 44814000 */ mtc1 $at, $f8 -/* 04B7D0 7F018DE0 3C0142A0 */ li $at, 0x42A00000 # 80.000000 -/* 04B7D4 7F018DE4 44815000 */ mtc1 $at, $f10 -/* 04B7D8 7F018DE8 46082402 */ mul.s $f16, $f4, $f8 -/* 04B7DC 7F018DEC 3C01428C */ li $at, 0x428C0000 # 70.000000 -/* 04B7E0 7F018DF0 44813000 */ mtc1 $at, $f6 -/* 04B7E4 7F018DF4 3C018006 */ lui $at, %hi(flt_CODE_bss_800695A8) # $at, 0x8006 -/* 04B7E8 7F018DF8 460A8482 */ mul.s $f18, $f16, $f10 -/* 04B7EC 7F018DFC 46069100 */ add.s $f4, $f18, $f6 -/* 04B7F0 7F018E00 0C00262C */ jal randomGetNext -/* 04B7F4 7F018E04 E42484E8 */ swc1 $f4, %lo(flt_CODE_bss_800695A8)($at) -/* 04B7F8 7F018E08 44824000 */ mtc1 $v0, $f8 -/* 04B7FC 7F018E0C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04B800 7F018E10 04410004 */ bgez $v0, .L7F018E24 -/* 04B804 7F018E14 46804420 */ cvt.s.w $f16, $f8 -/* 04B808 7F018E18 44815000 */ mtc1 $at, $f10 -/* 04B80C 7F018E1C 00000000 */ nop -/* 04B810 7F018E20 460A8400 */ add.s $f16, $f16, $f10 -.L7F018E24: -/* 04B814 7F018E24 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04B818 7F018E28 44819000 */ mtc1 $at, $f18 -/* 04B81C 7F018E2C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 04B820 7F018E30 44812000 */ mtc1 $at, $f4 -/* 04B824 7F018E34 46128182 */ mul.s $f6, $f16, $f18 -/* 04B828 7F018E38 3C018004 */ lui $at, %hi(D_80051B00) # $at, 0x8004 -/* 04B82C 7F018E3C C42A7C28 */ lwc1 $f10, %lo(D_80051B00)($at) -/* 04B830 7F018E40 3C018006 */ lui $at, %hi(flt_CODE_bss_800695B0) # $at, 0x8006 -/* 04B834 7F018E44 46043201 */ sub.s $f8, $f6, $f4 -/* 04B838 7F018E48 460A4402 */ mul.s $f16, $f8, $f10 -/* 04B83C 7F018E4C 0C00262C */ jal randomGetNext -/* 04B840 7F018E50 E43084F0 */ swc1 $f16, %lo(flt_CODE_bss_800695B0)($at) -/* 04B844 7F018E54 44829000 */ mtc1 $v0, $f18 -/* 04B848 7F018E58 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04B84C 7F018E5C 04410004 */ bgez $v0, .L7F018E70 -/* 04B850 7F018E60 468091A0 */ cvt.s.w $f6, $f18 -/* 04B854 7F018E64 44812000 */ mtc1 $at, $f4 -/* 04B858 7F018E68 00000000 */ nop -/* 04B85C 7F018E6C 46043180 */ add.s $f6, $f6, $f4 -.L7F018E70: -/* 04B860 7F018E70 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04B864 7F018E74 44814000 */ mtc1 $at, $f8 -/* 04B868 7F018E78 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 04B86C 7F018E7C 44818000 */ mtc1 $at, $f16 -/* 04B870 7F018E80 46083282 */ mul.s $f10, $f6, $f8 -/* 04B874 7F018E84 3C018004 */ lui $at, %hi(D_80051B04) # $at, 0x8004 -/* 04B878 7F018E88 C4247C2C */ lwc1 $f4, %lo(D_80051B04)($at) -/* 04B87C 7F018E8C 3C018006 */ lui $at, %hi(flt_CODE_bss_800695B4) # $at, 0x8006 -/* 04B880 7F018E90 46105481 */ sub.s $f18, $f10, $f16 -/* 04B884 7F018E94 46049182 */ mul.s $f6, $f18, $f4 -/* 04B888 7F018E98 0C00262C */ jal randomGetNext -/* 04B88C 7F018E9C E42684F4 */ swc1 $f6, %lo(flt_CODE_bss_800695B4)($at) -/* 04B890 7F018EA0 44824000 */ mtc1 $v0, $f8 -/* 04B894 7F018EA4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04B898 7F018EA8 04410004 */ bgez $v0, .L7F018EBC -/* 04B89C 7F018EAC 468042A0 */ cvt.s.w $f10, $f8 -/* 04B8A0 7F018EB0 44818000 */ mtc1 $at, $f16 -/* 04B8A4 7F018EB4 00000000 */ nop -/* 04B8A8 7F018EB8 46105280 */ add.s $f10, $f10, $f16 -.L7F018EBC: -/* 04B8AC 7F018EBC 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04B8B0 7F018EC0 44819000 */ mtc1 $at, $f18 -/* 04B8B4 7F018EC4 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 04B8B8 7F018EC8 44813000 */ mtc1 $at, $f6 -/* 04B8BC 7F018ECC 46125102 */ mul.s $f4, $f10, $f18 -/* 04B8C0 7F018ED0 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 04B8C4 7F018ED4 44818000 */ mtc1 $at, $f16 -/* 04B8C8 7F018ED8 3C018006 */ lui $at, %hi(flt_CODE_bss_800695BC) # $at, 0x8006 -/* 04B8CC 7F018EDC 46062202 */ mul.s $f8, $f4, $f6 -/* 04B8D0 7F018EE0 46104280 */ add.s $f10, $f8, $f16 -/* 04B8D4 7F018EE4 0C00262C */ jal randomGetNext -/* 04B8D8 7F018EE8 E42A84FC */ swc1 $f10, %lo(flt_CODE_bss_800695BC)($at) -/* 04B8DC 7F018EEC 44829000 */ mtc1 $v0, $f18 -/* 04B8E0 7F018EF0 3C038006 */ lui $v1, %hi(flt_CODE_bss_800695E8) # $v1, 0x8006 -/* 04B8E4 7F018EF4 44800000 */ mtc1 $zero, $f0 -/* 04B8E8 7F018EF8 24638528 */ addiu $v1, %lo(flt_CODE_bss_800695E8) # addiu $v1, $v1, -0x7ad8 -/* 04B8EC 7F018EFC 04410005 */ bgez $v0, .L7F018F14 -/* 04B8F0 7F018F00 46809120 */ cvt.s.w $f4, $f18 -/* 04B8F4 7F018F04 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 04B8F8 7F018F08 44813000 */ mtc1 $at, $f6 -/* 04B8FC 7F018F0C 00000000 */ nop -/* 04B900 7F018F10 46062100 */ add.s $f4, $f4, $f6 -.L7F018F14: -/* 04B904 7F018F14 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 04B908 7F018F18 44814000 */ mtc1 $at, $f8 -/* 04B90C 7F018F1C 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 04B910 7F018F20 44815000 */ mtc1 $at, $f10 -/* 04B914 7F018F24 46082402 */ mul.s $f16, $f4, $f8 -/* 04B918 7F018F28 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 04B91C 7F018F2C 44813000 */ mtc1 $at, $f6 -/* 04B920 7F018F30 3C018006 */ lui $at, %hi(flt_CODE_bss_800695C0) # $at, 0x8006 -/* 04B924 7F018F34 8FBF001C */ lw $ra, 0x1c($sp) -/* 04B928 7F018F38 240D0001 */ li $t5, 1 -/* 04B92C 7F018F3C 460A8482 */ mul.s $f18, $f16, $f10 -/* 04B930 7F018F40 46069100 */ add.s $f4, $f18, $f6 -/* 04B934 7F018F44 E4248500 */ swc1 $f4, %lo(flt_CODE_bss_800695C0)($at) -/* 04B938 7F018F48 3C018006 */ lui $at, %hi(flt_CODE_bss_800695A4) # $at, 0x8006 -/* 04B93C 7F018F4C C42884E4 */ lwc1 $f8, %lo(flt_CODE_bss_800695A4)($at) -/* 04B940 7F018F50 3C018006 */ lui $at, %hi(flt_CODE_bss_800695A0) # $at, 0x8006 -/* 04B944 7F018F54 E42884E0 */ swc1 $f8, %lo(flt_CODE_bss_800695A0)($at) -/* 04B948 7F018F58 3C018006 */ lui $at, %hi(flt_CODE_bss_800695B0) # $at, 0x8006 -/* 04B94C 7F018F5C C43084F0 */ lwc1 $f16, %lo(flt_CODE_bss_800695B0)($at) -/* 04B950 7F018F60 3C018006 */ lui $at, %hi(flt_CODE_bss_800695AC) # $at, 0x8006 -/* 04B954 7F018F64 E43084EC */ swc1 $f16, %lo(flt_CODE_bss_800695AC)($at) -/* 04B958 7F018F68 3C018006 */ lui $at, %hi(flt_CODE_bss_800695BC) # $at, 0x8006 -/* 04B95C 7F018F6C C42A84FC */ lwc1 $f10, %lo(flt_CODE_bss_800695BC)($at) -/* 04B960 7F018F70 3C018006 */ lui $at, %hi(flt_CODE_bss_800695B8) # $at, 0x8006 -/* 04B964 7F018F74 27BD00B8 */ addiu $sp, $sp, 0xb8 -/* 04B968 7F018F78 E42A84F8 */ swc1 $f10, %lo(flt_CODE_bss_800695B8)($at) -/* 04B96C 7F018F7C 3C018006 */ lui $at, %hi(bss_800695E4) # $at, 0x8006 -/* 04B970 7F018F80 AC2D8524 */ sw $t5, %lo(bss_800695E4)($at) -/* 04B974 7F018F84 E4600000 */ swc1 $f0, ($v1) -/* 04B978 7F018F88 E4600004 */ swc1 $f0, 4($v1) -/* 04B97C 7F018F8C 03E00008 */ jr $ra -/* 04B980 7F018F90 E4600008 */ swc1 $f0, 8($v1) -) -#endif -#endif - void update_menu18_displaycast(void) { @@ -9983,14 +7899,13 @@ void update_menu18_displaycast(void) { } - - // Address 0x7F018F60 NTSC void interface_menu18_displaycast(void) { s32 f; + // Unlike all other menu functions, this one uses a FOV of 46.0 degrees instead of 60.0 degrees. viSetFovY(46.0f); viSetZRange(10.0f, 2000.0f); viSetUseZBuf(TRUE); @@ -10091,275 +8006,226 @@ void interface_menu18_displaycast(void) } - - -#ifdef NONMATCHING - -// https://decomp.me/scratch/8VrOg 71.40% - -typedef struct some_model_struct +Gfx *constructor_menu18_displaycast(Gfx *DL) { - s16 val; -}; - -Gfx * constructor_menu18_displaycast(Gfx *DL) -{ - struct coord3d sp244; - struct coord3d sp238; - struct coord3d sp22C; - s32 padding; - Mtxf sp1E8; - ModelRenderData sp1A8; - s32 padding3; - Mtxf sp160; - s32 sp15C; - s32 sp158; - s32 sp154; - s32 sp150; - LookAt * temp_v0; - s32 padding2; - f32 sp148; - f32 sp144; - union ModelRwData *unmrd; - struct coord3d sp134; - struct coord3d sp128; - struct some_model_struct *srecord; - ModelNode *mnode; - Mtx spE0; - - s32 var_s1; + coord3d campos = cast_camera_pos; + coord3d tarpos = cast_camera_target; + coord3d up = cast_camera_up; + Light *light; + Mtxf mtx; + ModelRenderData renderdata = cast_renderdata_default; + s32 pad1A4; + s32 pad1A0; + Mtxf mtx2; + s32 x; + s32 y; + s32 textwidth; + s32 textheight; s32 i; - struct coord3d temp_f2; - u8 *temp_v0_6; - s32 var_t4; - - // struct copies. - sp244 = D_8002BA78; - sp238 = D_8002BA84; - sp22C = D_8002BA90; - sp1A8 = D_8002BA9C; - sp148 = g_MenuTimer / 180.0f; - sp134 = D_8002BADC; - // end struct copies. - - if ((g_MenuTimer < 0) || (g_MenuTimer >= 0xB4)) + f32 menufrac = (f32)g_MenuTimer / CAST_INTRO_LEN_F; + f32 fade; + char *text; + coord3d vec = cast_camera_offset; + coord3d suboffset; + s32 pad120; + s32 pad124; + Mtx lookatmtx; + s32 padDC; + + if (g_MenuTimer < 0 || g_MenuTimer >= CAST_INTRO_LEN) { - sp144 = 0.0f; + fade = 0.0f; } - else if (g_MenuTimer < 0x1E) + else if (g_MenuTimer < CAST_INTRO_FADE) { - sp144 = g_MenuTimer / 30.0f; + fade = (f32)g_MenuTimer / CAST_INTRO_FADE_F; } - else if (g_MenuTimer >= 0x97) + else if (g_MenuTimer >= CAST_INTRO_FADEOUT) { - sp144 = (f32) (0xB4 - g_MenuTimer) / 30.0f; + fade = (f32)(CAST_INTRO_LEN - g_MenuTimer) / CAST_INTRO_FADE_F; } else { - sp144 = 1.0f; + fade = 1.0f; } - - DL = viSetFillColor(DL, 0, 0, 0); - DL = viFillScreen(DL); - - flt_CODE_bss_800695A0 = ((flt_CODE_bss_800695A8 - flt_CODE_bss_800695A4) * sp148) + flt_CODE_bss_800695A4; - flt_CODE_bss_800695AC = ((flt_CODE_bss_800695B4 - flt_CODE_bss_800695B0) * sp148) + flt_CODE_bss_800695B0; - flt_CODE_bss_800695B8 = ((flt_CODE_bss_800695C0 - flt_CODE_bss_800695BC) * sp148) + flt_CODE_bss_800695BC; - - if (flt_CODE_bss_800695AC < 0.0f) + + DL = viFillScreen(viSetFillColor(DL, 0, 0, 0)); + + cast_camera_dist = (cast_camera_dist_end - cast_camera_dist_start) * menufrac + cast_camera_dist_start; + cast_camera_angle = (cast_camera_angle_end - cast_camera_angle_start) * menufrac + cast_camera_angle_start; + cast_camera_height = (cast_camera_height_end - cast_camera_height_start) * menufrac + cast_camera_height_start; + + if (cast_camera_angle < 0.0f) { - flt_CODE_bss_800695AC += 6.2831855f; + cast_camera_angle += M_TAU_F; } - - sp244.f[0] = (flt_CODE_bss_800695A0 * sinf(flt_CODE_bss_800695AC)) + (0.2f * flt_CODE_bss_800695A0 * cosf(flt_CODE_bss_800695AC)); - sp244.f[1] = flt_CODE_bss_800695B8; - sp244.f[2] = (flt_CODE_bss_800695A0 * cosf(flt_CODE_bss_800695AC)) - (0.2f * flt_CODE_bss_800695A0 * sinf(flt_CODE_bss_800695AC)); - sp238.f[0] += cosf(flt_CODE_bss_800695AC) * 0.2f * flt_CODE_bss_800695A0; - sp238.f[2] += -sinf(flt_CODE_bss_800695AC) * 0.2f * flt_CODE_bss_800695A0; - - temp_v0 = (LookAt *)dynAllocate7F0BD6F8(2); - guLookAtReflect(&spE0, temp_v0, 0.0f, 0.0f, 4000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); - - gSPNumLights(DL++, 1); - gSPLight(DL++, &gelogolight.l[0], 1); - gSPLight(DL++, &gelogolight.a, 2); - gSPLookAtX(DL++, &temp_v0->l[0]); - gSPLookAtY(DL++, &temp_v0->l[1]); - - modelTickAnimQuarterSpeed(cast_model, g_ClockTimer, 1); + + campos.x = cast_camera_dist * sinf(cast_camera_angle) + cosf(cast_camera_angle) * 0.2f * cast_camera_dist; + campos.y = cast_camera_height; + campos.z = cast_camera_dist * cosf(cast_camera_angle) - sinf(cast_camera_angle) * 0.2f * cast_camera_dist; + + tarpos.x += cosf(cast_camera_angle) * 0.2f * cast_camera_dist; + tarpos.z += -sinf(cast_camera_angle) * 0.2f * cast_camera_dist; + + light = dynAllocateLights(2); + + guLookAtReflect(&lookatmtx, (LookAt *)light, 0.0f, 0.0f, 4000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); + + gSPNumLights(DL++, 1); \ + gSPLight(DL++, &gelogolight.l[0], 1); \ + gSPLight(DL++, &gelogolight, 2); + + gSPLookAt(DL++, light); + + modelTickAnim(cast_model, g_ClockTimer, 1); modelSetDistanceDisabled(1); sub_GAME_7F073FC8(0); subcalcpos(cast_model); + + if (cast_model_weapon != NULL && cast_model_weapon->obj->Switches[0] != NULL) + { + modelGetNodeRwData( cast_model_weapon, cast_model_weapon->obj->Switches[0])->Gunfire.visible = 0; + } + + if (cast_model_weapon != NULL && cast_model_weapon->obj->Switches[2] != NULL) + { + modelGetNodeRwData(cast_model_weapon, cast_model_weapon->obj->Switches[2])->Switch.visible = 0; + } + + renderdata.mtxlist = (Mtxf *)dynAllocate(cast_model->obj->numMatrices << 6); + + matrix_4x4_set_identity(&mtx); + + renderdata.basemtx = &mtx; + + subcalcmatrices(&renderdata, cast_model); + getsuboffset(cast_model, &suboffset); + + if (cast_camera_reset) + { + cast_rootpos_smoothed.y = suboffset.y; + } + + vec.f[0] = (suboffset.x - cast_rootpos_smoothed.x) / g_GlobalTimerDelta; + vec.f[1] = (suboffset.y - cast_rootpos_smoothed.y) / g_GlobalTimerDelta; + vec.f[2] = (suboffset.z - cast_rootpos_smoothed.z) / g_GlobalTimerDelta; + + if (cast_camera_reset) + { + cast_rootvel_accumulator.x = vec.f[0] / CAST_DAMP_COMP; + cast_rootvel_accumulator.y = vec.f[1] / CAST_DAMP_COMP; + cast_rootvel_accumulator.z = vec.f[2] / CAST_DAMP_COMP; + } + + for (i = 0; i < g_ClockTimer; i++) + { + cast_rootvel_accumulator.x = vec.f[0] + CAST_DAMP * cast_rootvel_accumulator.x; + cast_rootvel_accumulator.y = vec.f[1] + CAST_DAMP * cast_rootvel_accumulator.y; + cast_rootvel_accumulator.z = vec.f[2] + CAST_DAMP * cast_rootvel_accumulator.z; + } + + cast_rootvel_smoothed.x = cast_rootvel_accumulator.x * CAST_DAMP_COMP; + cast_rootvel_smoothed.y = cast_rootvel_accumulator.y * CAST_DAMP_COMP; + cast_rootvel_smoothed.z = cast_rootvel_accumulator.z * CAST_DAMP_COMP; + + cast_rootpos_smoothed.x += cast_rootvel_smoothed.x * g_GlobalTimerDelta; + cast_rootpos_smoothed.y += cast_rootvel_smoothed.y * g_GlobalTimerDelta; + cast_rootpos_smoothed.z += cast_rootvel_smoothed.z * g_GlobalTimerDelta; + + mtx4TransformVecInPlace(cast_model->render_pos, &vec); + + vec.f[0] -= cast_rootpos_smoothed.x; + vec.f[1] -= cast_rootpos_smoothed.y; + vec.f[2] -= cast_rootpos_smoothed.z; + + if (cast_camera_reset) + { + cast_camera_reset = FALSE; + cast_target_accumulator.x = vec.f[0] / CAST_DAMP_COMP; + cast_target_accumulator.y = vec.f[1] / CAST_DAMP_COMP; + cast_target_accumulator.z = vec.f[2] / CAST_DAMP_COMP; + } + + for (i = 0; i < g_ClockTimer; i++) + { + cast_target_accumulator.x = vec.f[0] + CAST_DAMP * cast_target_accumulator.x; + cast_target_accumulator.y = vec.f[1] + CAST_DAMP * cast_target_accumulator.y; + cast_target_accumulator.z = vec.f[2] + CAST_DAMP * cast_target_accumulator.z; + } + + cast_target_smoothed.x = cast_target_accumulator.x * CAST_DAMP_COMP; + cast_target_smoothed.y = cast_target_accumulator.y * CAST_DAMP_COMP; + cast_target_smoothed.z = cast_target_accumulator.z * CAST_DAMP_COMP; + + vec.f[0] = cast_rootpos_smoothed.x + cast_target_smoothed.x; + vec.f[1] = (cast_rootpos_smoothed.y + cast_target_smoothed.y) - 10.0f; + vec.f[2] = cast_rootpos_smoothed.z + cast_target_smoothed.z; + + tarpos.x += vec.f[0]; + tarpos.y += vec.f[1]; + tarpos.z += vec.f[2]; + + campos.x += cast_rootpos_smoothed.x; + campos.y += cast_rootpos_smoothed.y + 52.5f; + campos.z += cast_rootpos_smoothed.z; + + matrix_4x4_set_lookat_target(&mtx, campos.x, campos.y, campos.z, tarpos.x, tarpos.y, tarpos.z, up.x, up.y, up.z); + + renderdata.basemtx = &mtx; + renderdata.mtxlist = (Mtxf *)dynAllocate(cast_model->obj->numMatrices << 6); + + subcalcmatrices(&renderdata, cast_model); + if (cast_model_weapon != NULL) { - mnode = cast_model_weapon->obj->Switches[0]; - - if (mnode != NULL) - { - unmrd = modelGetNodeRwData(cast_model_weapon, mnode); - srecord = (struct some_model_struct *)unmrd; - srecord->val = 0; - } - } - - if (cast_model_weapon != NULL) - { - mnode = cast_model_weapon->obj->Switches[2]; - - if (mnode != NULL) - { - unmrd = modelGetNodeRwData(cast_model_weapon, mnode); - ((struct ModelRwData_SwitchRecord *)unmrd)->visible = 0; - } - } - - sp1A8.mtxlist = dynAllocate(cast_model->obj->numMatrices << 6); - sp1A8.unk_matrix = &sp1E8; - matrix_4x4_set_identity(&sp1E8); - subcalcmatrices(&sp1A8, cast_model); - getsuboffset(cast_model, &sp128); - - var_s1 = 0; - if (bss_800695E4 != 0) - { - flt_CODE_bss_800695E8.f[1] = sp128.f[1]; - } - - sp134.f[0] = (sp128.f[0] - flt_CODE_bss_800695E8.f[0]) / g_GlobalTimerDelta; - sp134.f[1] = (sp128.f[1] - flt_CODE_bss_800695E8.f[1]) / g_GlobalTimerDelta; - sp134.f[2] = (sp128.f[2] - flt_CODE_bss_800695E8.f[2]) / g_GlobalTimerDelta; - - if (bss_800695E4 != 0) - { - flt_CODE_bss_80069608.f[0] = sp134.f[0] / 0.050000012f; - flt_CODE_bss_80069608.f[1] = sp134.f[1] / 0.050000012f; - flt_CODE_bss_80069608.f[2] = sp134.f[2] / 0.050000012f; - } - - if (g_ClockTimer > 0) - { - var_s1 = 0; - do - { - flt_CODE_bss_80069608.f[0] = (0.95f * flt_CODE_bss_80069608.f[0]) + sp134.f[0]; - flt_CODE_bss_80069608.f[1] = (0.95f * flt_CODE_bss_80069608.f[1]) + sp134.f[1]; - flt_CODE_bss_80069608.f[2] = (0.95f * flt_CODE_bss_80069608.f[2]) + sp134.f[2]; - } - while (++var_s1 < g_ClockTimer); - - if (sp134.f[0]); - if (sp134.f[1]); - if (sp134.f[2]); - - var_s1 = 0; - } - - flt_CODE_bss_800695F8.f[0] = flt_CODE_bss_80069608.f[0] * 0.050000012f; - flt_CODE_bss_800695F8.f[1] = flt_CODE_bss_80069608.f[1] * 0.050000012f; - flt_CODE_bss_800695F8.f[2] = flt_CODE_bss_80069608.f[2] * 0.050000012f; - - flt_CODE_bss_800695E8.f[0] += flt_CODE_bss_800695F8.f[0] * g_GlobalTimerDelta; - flt_CODE_bss_800695E8.f[1] += flt_CODE_bss_800695F8.f[1] * g_GlobalTimerDelta; - flt_CODE_bss_800695E8.f[2] += flt_CODE_bss_800695F8.f[2] * g_GlobalTimerDelta; - - mtx4TransformVecInPlace(&cast_model->render_pos->pos, (struct coord3d *) &sp134); - - sp134.f[0] -= flt_CODE_bss_800695E8.f[0]; - sp134.f[1] -= flt_CODE_bss_800695E8.f[1]; - sp134.f[2] -= flt_CODE_bss_800695E8.f[2]; - - if (bss_800695E4 != 0) - { - bss_800695E4 = 0; - flt_CODE_bss_800695D8.f[0] = (f32) (sp134.f[0] / 0.050000012f); - flt_CODE_bss_800695D8.f[1] = (f32) (sp134.f[1] / 0.050000012f); - flt_CODE_bss_800695D8.f[2] = (f32) (sp134.f[2] / 0.050000012f); - } - - if (g_ClockTimer > 0) - { - var_s1 = 0; - do - { - flt_CODE_bss_800695D8.f[0] = (0.95f * flt_CODE_bss_800695D8.f[0]) + sp134.f[0]; - flt_CODE_bss_800695D8.f[1] = (0.95f * flt_CODE_bss_800695D8.f[1]) + sp134.f[1]; - flt_CODE_bss_800695D8.f[2] = (0.95f * flt_CODE_bss_800695D8.f[2]) + sp134.f[2]; - } - while (++var_s1 < g_ClockTimer); - - flt_CODE_bss_800695D8.f[0] = (0.95f * flt_CODE_bss_800695D8.f[0]) + sp134.f[0]; - flt_CODE_bss_800695D8.f[1] = (0.95f * flt_CODE_bss_800695D8.f[1]) + sp134.f[1]; - flt_CODE_bss_800695D8.f[2] = (0.95f * flt_CODE_bss_800695D8.f[2]) + sp134.f[2]; - - var_s1 = 0; - } - - flt_CODE_bss_800695C8.f[0] = flt_CODE_bss_800695D8.f[0] * 0.050000012f; - flt_CODE_bss_800695C8.f[1] = flt_CODE_bss_800695D8.f[1] * 0.050000012f; - flt_CODE_bss_800695C8.f[2] = flt_CODE_bss_800695D8.f[2] * 0.050000012f; - - sp134.f[2] = flt_CODE_bss_800695E8.f[2] + flt_CODE_bss_800695C8.f[2]; - sp238.f[0] += flt_CODE_bss_800695E8.f[0] + flt_CODE_bss_800695C8.f[0]; - sp244.f[0] += flt_CODE_bss_800695E8.f[0]; - sp238.f[2] += flt_CODE_bss_800695E8.f[2] + flt_CODE_bss_800695C8.f[2]; - sp244.f[2] += flt_CODE_bss_800695E8.f[1] + 52.5f; - sp244.f[2] += flt_CODE_bss_800695E8.f[2]; - sp238.f[2] += (flt_CODE_bss_800695E8.f[1] + flt_CODE_bss_800695C8.f[1]) - 10.0f; - sp134.f[0] = flt_CODE_bss_800695E8.f[0] + flt_CODE_bss_800695C8.f[0]; - sp134.f[2] = (flt_CODE_bss_800695E8.f[1] + flt_CODE_bss_800695C8.f[1]) - 10.0f; - - matrix_4x4_set_lookat_target(&sp1E8, sp244.f[0], sp244.f[1], sp244.f[2], flt_CODE_bss_800695E8.f[1], sp238.f[2], sp238.f[2], sp22C.f[0], sp22C.f[1], sp22C.f[2]); - - sp1A8.unk_matrix = &sp1E8; - sp1A8.mtxlist = dynAllocate(cast_model->obj->numMatrices << 6); - subcalcmatrices((ModelRenderData *) &sp1A8, cast_model); - - if (cast_model_weapon != NULL) - { - sp1A8.unk_matrix = modelFindNodeMtx(cast_model, cast_model_weapon->attachedto_objinst, 0); - + renderdata.basemtx = modelFindNodeMtx(cast_model, cast_model_weapon->attachedto_objinst, 0); + if (cast_model_weapon->attachedto_objinst == cast_model->obj->Switches[5]) { - matrix_4x4_set_rotation_around_z(3.1415927f, &sp160); - matrix_4x4_multiply_in_place(sp1A8.unk_matrix, &sp160); - sp1A8.unk_matrix = &sp160; + matrix_4x4_set_rotation_around_z(M_PI_F, &mtx2); + matrix_4x4_multiply_in_place(renderdata.basemtx, &mtx2); + + renderdata.basemtx = &mtx2; } - - sp1A8.mtxlist = dynAllocate(cast_model_weapon->obj->numMatrices << 6); - instcalcmatrices((ModelRenderData *) &sp1A8, cast_model_weapon); + + renderdata.mtxlist = (Mtxf *)dynAllocate(cast_model_weapon->obj->numMatrices << 6); + + instcalcmatrices(&renderdata, cast_model_weapon); } - - sp1A8.unk20 = 7; - sp1A8.unk04 = 1; - sp1A8.gdl = DL++; - sp1A8.unk08 = 3; - subdraw((ModelRenderData *) &sp1A8, cast_model); - + + renderdata.PropType = PROP_TYPE_EXPLOSION; + renderdata.zbufferenabled = TRUE; + renderdata.gdl = DL; + renderdata.flags = 3; + + subdraw(&renderdata, cast_model); + if (cast_model_weapon != NULL) { - subdraw((ModelRenderData *) &sp1A8, cast_model_weapon); + subdraw(&renderdata, cast_model_weapon); } - + + DL = renderdata.gdl; + modelSetDistanceDisabled(0); - - for (; var_s1obj->numMatrices; var_s1++) + + for (i = 0; i < cast_model->obj->numMatrices; i++) { - // hack: source address steps by sizeof(Mtxf), but can't get that to match - matrix_4x4_copy(&((s8*)cast_model->render_pos)[var_s1*0x40], &sp160); - matrix_4x4_f32_to_s32(&sp160, &((Mtxf*)cast_model->render_pos)[var_s1]); + matrix_4x4_copy(&((s8 *)cast_model->render_pos)[i * sizeof(Mtxf)], &mtx2); + matrix_4x4_f32_to_s32(&mtx2, &((Mtxf *)cast_model->render_pos)[i]); } - + if (cast_model_weapon != NULL) { - for (i=0; iobj->numMatrices; i++) + for (i = 0; i < cast_model_weapon->obj->numMatrices; i++) { - // hack: source address steps by sizeof(Mtxf), but can't get that to match - matrix_4x4_copy(&((s8*)cast_model_weapon->render_pos)[i*0x40], &sp160); - matrix_4x4_f32_to_s32(&sp160, &((Mtxf*)cast_model_weapon->render_pos)[i]); + matrix_4x4_copy(&((s8 *)cast_model_weapon->render_pos)[i * sizeof(Mtxf)], &mtx2); + + matrix_4x4_f32_to_s32(&mtx2, &((Mtxf *)cast_model_weapon->render_pos)[i]); } } - + gDPSetScissor(DL++, G_SC_NON_INTERLACE, 0, 0, 440, 330); gDPPipeSync(DL++); gDPSetCycleType(DL++, G_CYC_1CYCLE); @@ -10372,2343 +8238,52 @@ Gfx * constructor_menu18_displaycast(Gfx *DL) gDPSetTextureLUT(DL++, G_TT_NONE); gDPSetRenderMode(DL++, G_RM_CLD_SURF, G_RM_CLD_SURF2); gDPSetCombineMode(DL++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); - gDPSetPrimColor(DL++, 0, 0, 0x00, 0x00, 0x00, (0xFF - (s32) (255.0f * sp144)) & 0xFF); + gDPSetPrimColor(DL++, 0, 0, 0, 0, 0, 0xFF - (s32)(255.0f * fade)); gDPFillRectangle(DL++, 0, 0, 440, 330); gDPPipeSync(DL++); gDPSetColorDither(DL++, G_CD_BAYER); gDPSetTexturePersp(DL++, G_TP_PERSP); gDPSetTextureLOD(DL++, G_TL_LOD); - + DL = microcode_constructor(DL); - - if (full_actor_intro == 0) + + if (full_actor_intro == FALSE) { - temp_v0_6 = langGet(intro_char_table[intro_character_index].text1); - textMeasure(&sp150, &sp154, temp_v0_6, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - - sp158 = 0x6C; - sp15C = 0x13B - (sp154 / 2); - - DL = microcode_constructor_related_to_menus(DL, sp15C, 0x6C, sp15C + sp154 + 1, sp150 + 0x6D, 0); -/* - if (sp158 & 0x78) - { - if (!(sp158 & 0x78)) - { - var_t4 = (255.0f * sp144) / 2147483647; - } - else - { - var_t4 = -1; - } - } - else - { - var_t4 = 255.0f * sp144; - if (var_t4 < 0) - { - var_t4 = -1; - } - } -*/ - if ((s32)sp144 & 0x78) - { - var_t4 = (255.0f * sp144) / 2147483647; - } - else - { - var_t4 = -1; - } - - DL = textRender(DL, &sp15C, &sp158, temp_v0_6, ptrFontZurichBoldChars, ptrFontZurichBold, var_t4 | ~0xFF, viGetX(), viGetY(), 0, 0); + text = langGet( (u16)intro_char_table[intro_character_index].text1); + + textMeasure(&textheight, &textwidth, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + + x = 315 - textwidth / 2; + y = 108; + + DL = microcode_constructor_related_to_menus(DL, x, 108, x + textwidth + 1, textheight + 109, 0); + + DL = textRender(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, (u32)(255.0f * fade) | 0xFFFFFF00, viGetX(), viGetY(), 0, 0); } -/* - if (sp158 & 0x78) - { - if (!(sp158 & 0x78)) - { - var_t4 = (255.0f * sp144) / 2147483647; - } - else - { - var_t4 = -1; - } - } - else - { - var_t4 = 255.0f * sp144; - if (var_t4 < 0) - { - var_t4 = -1; - } - } -*/ - - temp_v0_6 = langGet(intro_char_table[intro_character_index].text2); - textMeasure(&sp150, &sp154, temp_v0_6, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - sp158 = 0x98; - sp15C = 0x13B - (sp154 / 2); - DL = microcode_constructor_related_to_menus(DL, sp15C, 0x98, sp15C + sp154 + 1, sp150 + 0x99, 0); - DL = textRender(DL, &sp15C, &sp158, temp_v0_6, ptrFontZurichBoldChars, ptrFontZurichBold, var_t4 | ~0xFF, viGetX(), viGetY(), 0, 0); - - temp_v0_6 = langGet(intro_char_table[intro_character_index].text3); - textMeasure(&sp150, &sp154, temp_v0_6, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - sp158 = 0xAE; - sp15C = 0x13B - (sp154 / 2); - DL = microcode_constructor_related_to_menus(DL, sp15C, 0xAE, sp15C + sp154 + 1, sp150 + 0xAF, 0); - DL = textRender(DL, &sp15C, &sp158, temp_v0_6, ptrFontZurichBoldChars, ptrFontZurichBold, var_t4 | ~0xFF, viGetX(), viGetY(), 0, 0); - - return DL; + + text = langGet((u16)intro_char_table[intro_character_index].text2); + + textMeasure(&textheight, &textwidth, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + + x = 315 - textwidth / 2; + y = 152; + + DL = microcode_constructor_related_to_menus(DL, x, 152, x + textwidth + 1, textheight + 153, 0); + + DL = textRender(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, (u32)(255.0f * fade) | 0xFFFFFF00, viGetX(), viGetY(), 0, 0); + + text = langGet((u16)intro_char_table[intro_character_index].text3); + + textMeasure(&textheight, &textwidth, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); + + x = 315 - textwidth / 2; + y = 174; + + DL = microcode_constructor_related_to_menus(DL, x, 174, x + textwidth + 1, textheight + 175, 0); + + return textRender(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, (u32)(255.0f * fade) | 0xFFFFFF00, viGetX(), viGetY(), 0, 0); } -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80051B0C -.word 0x40C90FDB /*6.2831855;*/ -glabel D_80051B10 -.word 0x3E4CCCCD /*0.2;*/ -glabel D_80051B14 -.word 0x3E4CCCCD /*0.2;*/ -glabel D_80051B18 -.word 0x3E4CCCCD /*0.2;*/ -glabel D_80051B1C -.word 0x3E4CCCCD /*0.2;*/ -glabel D_80051B20 -.word 0x3D4CCCD0 /*0.050000012;*/ -glabel D_80051B24 -.word 0x3D4CCCD0 /*0.050000012;*/ -glabel D_80051B28 -.word 0x3F733333 /*0.94999999;*/ -glabel D_80051B2C -.word 0x3F733333 /*0.94999999;*/ -glabel D_80051B30 -.word 0x3F733333 /*0.94999999;*/ -glabel D_80051B34 -.word 0x3D4CCCD0 /*0.050000012;*/ -glabel D_80051B38 -.word 0x40490FDB /*3.1415927;*/ - -.text -glabel constructor_menu18_displaycast -/* 04DE58 7F019328 27BDFDB0 */ addiu $sp, $sp, -0x250 -/* 04DE5C 7F01932C 3C0E8003 */ lui $t6, %hi(D_8002BA78) -/* 04DE60 7F019330 AFBF004C */ sw $ra, 0x4c($sp) -/* 04DE64 7F019334 AFB40048 */ sw $s4, 0x48($sp) -/* 04DE68 7F019338 AFB30044 */ sw $s3, 0x44($sp) -/* 04DE6C 7F01933C AFB20040 */ sw $s2, 0x40($sp) -/* 04DE70 7F019340 AFB1003C */ sw $s1, 0x3c($sp) -/* 04DE74 7F019344 AFB00038 */ sw $s0, 0x38($sp) -/* 04DE78 7F019348 25CEBA78 */ addiu $t6, %lo(D_8002BA78) # addiu $t6, $t6, -0x4588 -/* 04DE7C 7F01934C 8DC10000 */ lw $at, ($t6) -/* 04DE80 7F019350 27AF0244 */ addiu $t7, $sp, 0x244 -/* 04DE84 7F019354 8DCC0004 */ lw $t4, 4($t6) -/* 04DE88 7F019358 ADE10000 */ sw $at, ($t7) -/* 04DE8C 7F01935C 8DC10008 */ lw $at, 8($t6) -/* 04DE90 7F019360 3C0D8003 */ lui $t5, %hi(D_8002BA84) -/* 04DE94 7F019364 25ADBA84 */ addiu $t5, %lo(D_8002BA84) # addiu $t5, $t5, -0x457c -/* 04DE98 7F019368 ADEC0004 */ sw $t4, 4($t7) -/* 04DE9C 7F01936C ADE10008 */ sw $at, 8($t7) -/* 04DEA0 7F019370 8DA10000 */ lw $at, ($t5) -/* 04DEA4 7F019374 27B90238 */ addiu $t9, $sp, 0x238 -/* 04DEA8 7F019378 8DAF0004 */ lw $t7, 4($t5) -/* 04DEAC 7F01937C AF210000 */ sw $at, ($t9) -/* 04DEB0 7F019380 8DA10008 */ lw $at, 8($t5) -/* 04DEB4 7F019384 3C0C8003 */ lui $t4, %hi(D_8002BA90) -/* 04DEB8 7F019388 258CBA90 */ addiu $t4, %lo(D_8002BA90) # addiu $t4, $t4, -0x4570 -/* 04DEBC 7F01938C AF2F0004 */ sw $t7, 4($t9) -/* 04DEC0 7F019390 AF210008 */ sw $at, 8($t9) -/* 04DEC4 7F019394 8D810000 */ lw $at, ($t4) -/* 04DEC8 7F019398 27AE022C */ addiu $t6, $sp, 0x22c -/* 04DECC 7F01939C 8D990004 */ lw $t9, 4($t4) -/* 04DED0 7F0193A0 ADC10000 */ sw $at, ($t6) -/* 04DED4 7F0193A4 8D810008 */ lw $at, 8($t4) -/* 04DED8 7F0193A8 3C0F8003 */ lui $t7, %hi(D_8002BA9C) -/* 04DEDC 7F0193AC 25EFBA9C */ addiu $t7, %lo(D_8002BA9C) # addiu $t7, $t7, -0x4564 -/* 04DEE0 7F0193B0 ADD90004 */ sw $t9, 4($t6) -/* 04DEE4 7F0193B4 ADC10008 */ sw $at, 8($t6) -/* 04DEE8 7F0193B8 00809825 */ move $s3, $a0 -/* 04DEEC 7F0193BC 25EE003C */ addiu $t6, $t7, 0x3c -/* 04DEF0 7F0193C0 27AD01A8 */ addiu $t5, $sp, 0x1a8 -.L7F0193C4: -/* 04DEF4 7F0193C4 8DE10000 */ lw $at, ($t7) -/* 04DEF8 7F0193C8 25EF000C */ addiu $t7, $t7, 0xc -/* 04DEFC 7F0193CC 25AD000C */ addiu $t5, $t5, 0xc -/* 04DF00 7F0193D0 ADA1FFF4 */ sw $at, -0xc($t5) -/* 04DF04 7F0193D4 8DE1FFF8 */ lw $at, -8($t7) -/* 04DF08 7F0193D8 ADA1FFF8 */ sw $at, -8($t5) -/* 04DF0C 7F0193DC 8DE1FFFC */ lw $at, -4($t7) -/* 04DF10 7F0193E0 15EEFFF8 */ bne $t7, $t6, .L7F0193C4 -/* 04DF14 7F0193E4 ADA1FFFC */ sw $at, -4($t5) -/* 04DF18 7F0193E8 8DE10000 */ lw $at, ($t7) -/* 04DF1C 7F0193EC 3C028003 */ lui $v0, %hi(g_MenuTimer) -/* 04DF20 7F0193F0 3C198003 */ lui $t9, %hi(D_8002BADC) -/* 04DF24 7F0193F4 ADA10000 */ sw $at, ($t5) -/* 04DF28 7F0193F8 8C42A8CC */ lw $v0, %lo(g_MenuTimer)($v0) -/* 04DF2C 7F0193FC 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 04DF30 7F019400 44819000 */ mtc1 $at, $f18 -/* 04DF34 7F019404 44827000 */ mtc1 $v0, $f14 -/* 04DF38 7F019408 2739BADC */ addiu $t9, %lo(D_8002BADC) # addiu $t9, $t9, -0x4524 -/* 04DF3C 7F01940C 8F210000 */ lw $at, ($t9) -/* 04DF40 7F019410 46807020 */ cvt.s.w $f0, $f14 -/* 04DF44 7F019414 8F2E0004 */ lw $t6, 4($t9) -/* 04DF48 7F019418 27AC0134 */ addiu $t4, $sp, 0x134 -/* 04DF4C 7F01941C AD810000 */ sw $at, ($t4) -/* 04DF50 7F019420 8F210008 */ lw $at, 8($t9) -/* 04DF54 7F019424 AD8E0004 */ sw $t6, 4($t4) -/* 04DF58 7F019428 46120403 */ div.s $f16, $f0, $f18 -/* 04DF5C 7F01942C 04400004 */ bltz $v0, .L7F019440 -/* 04DF60 7F019430 AD810008 */ sw $at, 8($t4) -/* 04DF64 7F019434 284100B4 */ slti $at, $v0, 0xb4 -/* 04DF68 7F019438 54200005 */ bnezl $at, .L7F019450 -/* 04DF6C 7F01943C 2841001E */ slti $at, $v0, 0x1e -.L7F019440: -/* 04DF70 7F019440 44802000 */ mtc1 $zero, $f4 -/* 04DF74 7F019444 10000018 */ b .L7F0194A8 -/* 04DF78 7F019448 E7A40144 */ swc1 $f4, 0x144($sp) -/* 04DF7C 7F01944C 2841001E */ slti $at, $v0, 0x1e -.L7F019450: -/* 04DF80 7F019450 10200006 */ beqz $at, .L7F01946C -/* 04DF84 7F019454 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 04DF88 7F019458 44815000 */ mtc1 $at, $f10 -/* 04DF8C 7F01945C 00000000 */ nop -/* 04DF90 7F019460 460A0203 */ div.s $f8, $f0, $f10 -/* 04DF94 7F019464 10000010 */ b .L7F0194A8 -/* 04DF98 7F019468 E7A80144 */ swc1 $f8, 0x144($sp) -.L7F01946C: -/* 04DF9C 7F01946C 28410097 */ slti $at, $v0, 0x97 -/* 04DFA0 7F019470 14200009 */ bnez $at, .L7F019498 -/* 04DFA4 7F019474 240F00B4 */ li $t7, 180 -/* 04DFA8 7F019478 01E26823 */ subu $t5, $t7, $v0 -/* 04DFAC 7F01947C 448D3000 */ mtc1 $t5, $f6 -/* 04DFB0 7F019480 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 04DFB4 7F019484 44815000 */ mtc1 $at, $f10 -/* 04DFB8 7F019488 46803120 */ cvt.s.w $f4, $f6 -/* 04DFBC 7F01948C 460A2203 */ div.s $f8, $f4, $f10 -/* 04DFC0 7F019490 10000005 */ b .L7F0194A8 -/* 04DFC4 7F019494 E7A80144 */ swc1 $f8, 0x144($sp) -.L7F019498: -/* 04DFC8 7F019498 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 04DFCC 7F01949C 44813000 */ mtc1 $at, $f6 -/* 04DFD0 7F0194A0 00000000 */ nop -/* 04DFD4 7F0194A4 E7A60144 */ swc1 $f6, 0x144($sp) -.L7F0194A8: -/* 04DFD8 7F0194A8 02602025 */ move $a0, $s3 -/* 04DFDC 7F0194AC 00002825 */ move $a1, $zero -/* 04DFE0 7F0194B0 00003025 */ move $a2, $zero -/* 04DFE4 7F0194B4 00003825 */ move $a3, $zero -/* 04DFE8 7F0194B8 0C0011B4 */ jal viSetFillColor -/* 04DFEC 7F0194BC E7B00148 */ swc1 $f16, 0x148($sp) -/* 04DFF0 7F0194C0 0C000FBE */ jal viFillScreen -/* 04DFF4 7F0194C4 00402025 */ move $a0, $v0 -/* 04DFF8 7F0194C8 3C018007 */ lui $at, %hi(flt_CODE_bss_800695A4) -/* 04DFFC 7F0194CC C42095A4 */ lwc1 $f0, %lo(flt_CODE_bss_800695A4)($at) -/* 04E000 7F0194D0 3C018007 */ lui $at, %hi(flt_CODE_bss_800695A8) -/* 04E004 7F0194D4 C42495A8 */ lwc1 $f4, %lo(flt_CODE_bss_800695A8)($at) -/* 04E008 7F0194D8 C7B00148 */ lwc1 $f16, 0x148($sp) -/* 04E00C 7F0194DC 3C118007 */ lui $s1, %hi(flt_CODE_bss_800695A0) -/* 04E010 7F0194E0 46002281 */ sub.s $f10, $f4, $f0 -/* 04E014 7F0194E4 263195A0 */ addiu $s1, %lo(flt_CODE_bss_800695A0) # addiu $s1, $s1, -0x6a60 -/* 04E018 7F0194E8 3C018007 */ lui $at, %hi(flt_CODE_bss_800695B0) -/* 04E01C 7F0194EC 3C108007 */ lui $s0, %hi(flt_CODE_bss_800695AC) -/* 04E020 7F0194F0 46105202 */ mul.s $f8, $f10, $f16 -/* 04E024 7F0194F4 261095AC */ addiu $s0, %lo(flt_CODE_bss_800695AC) # addiu $s0, $s0, -0x6a54 -/* 04E028 7F0194F8 3C128007 */ lui $s2, %hi(flt_CODE_bss_800695B8) -/* 04E02C 7F0194FC 265295B8 */ addiu $s2, %lo(flt_CODE_bss_800695B8) # addiu $s2, $s2, -0x6a48 -/* 04E030 7F019500 00409825 */ move $s3, $v0 -/* 04E034 7F019504 46004180 */ add.s $f6, $f8, $f0 -/* 04E038 7F019508 E6260000 */ swc1 $f6, ($s1) -/* 04E03C 7F01950C C42295B0 */ lwc1 $f2, %lo(flt_CODE_bss_800695B0)($at) -/* 04E040 7F019510 3C018007 */ lui $at, %hi(flt_CODE_bss_800695B4) -/* 04E044 7F019514 C42495B4 */ lwc1 $f4, %lo(flt_CODE_bss_800695B4)($at) -/* 04E048 7F019518 3C018007 */ lui $at, %hi(flt_CODE_bss_800695BC) -/* 04E04C 7F01951C 46022281 */ sub.s $f10, $f4, $f2 -/* 04E050 7F019520 46105202 */ mul.s $f8, $f10, $f16 -/* 04E054 7F019524 46024180 */ add.s $f6, $f8, $f2 -/* 04E058 7F019528 E6060000 */ swc1 $f6, ($s0) -/* 04E05C 7F01952C C42C95BC */ lwc1 $f12, %lo(flt_CODE_bss_800695BC)($at) -/* 04E060 7F019530 3C018007 */ lui $at, %hi(flt_CODE_bss_800695C0) -/* 04E064 7F019534 C42495C0 */ lwc1 $f4, %lo(flt_CODE_bss_800695C0)($at) -/* 04E068 7F019538 C60E0000 */ lwc1 $f14, ($s0) -/* 04E06C 7F01953C 460C2281 */ sub.s $f10, $f4, $f12 -/* 04E070 7F019540 44802000 */ mtc1 $zero, $f4 -/* 04E074 7F019544 46105202 */ mul.s $f8, $f10, $f16 -/* 04E078 7F019548 4604703C */ c.lt.s $f14, $f4 -/* 04E07C 7F01954C 460C4180 */ add.s $f6, $f8, $f12 -/* 04E080 7F019550 45000006 */ bc1f .L7F01956C -/* 04E084 7F019554 E6460000 */ swc1 $f6, ($s2) -/* 04E088 7F019558 3C018005 */ lui $at, %hi(D_80051B0C) -/* 04E08C 7F01955C C42A1B0C */ lwc1 $f10, %lo(D_80051B0C)($at) -/* 04E090 7F019560 460A7200 */ add.s $f8, $f14, $f10 -/* 04E094 7F019564 E6080000 */ swc1 $f8, ($s0) -/* 04E098 7F019568 C60E0000 */ lwc1 $f14, ($s0) -.L7F01956C: -/* 04E09C 7F01956C 0FC15FAB */ jal sinf -/* 04E0A0 7F019570 46007306 */ mov.s $f12, $f14 -/* 04E0A4 7F019574 E7A00078 */ swc1 $f0, 0x78($sp) -/* 04E0A8 7F019578 0FC15FA8 */ jal cosf -/* 04E0AC 7F01957C C60C0000 */ lwc1 $f12, ($s0) -/* 04E0B0 7F019580 3C018005 */ lui $at, %hi(D_80051B10) -/* 04E0B4 7F019584 C4261B10 */ lwc1 $f6, %lo(D_80051B10)($at) -/* 04E0B8 7F019588 C6220000 */ lwc1 $f2, ($s1) -/* 04E0BC 7F01958C C7A80078 */ lwc1 $f8, 0x78($sp) -/* 04E0C0 7F019590 46060102 */ mul.s $f4, $f0, $f6 -/* 04E0C4 7F019594 C60C0000 */ lwc1 $f12, ($s0) -/* 04E0C8 7F019598 46022282 */ mul.s $f10, $f4, $f2 -/* 04E0CC 7F01959C 00000000 */ nop -/* 04E0D0 7F0195A0 46081182 */ mul.s $f6, $f2, $f8 -/* 04E0D4 7F0195A4 C6480000 */ lwc1 $f8, ($s2) -/* 04E0D8 7F0195A8 E7A80248 */ swc1 $f8, 0x248($sp) -/* 04E0DC 7F0195AC 46065100 */ add.s $f4, $f10, $f6 -/* 04E0E0 7F0195B0 0FC15FA8 */ jal cosf -/* 04E0E4 7F0195B4 E7A40244 */ swc1 $f4, 0x244($sp) -/* 04E0E8 7F0195B8 E7A00078 */ swc1 $f0, 0x78($sp) -/* 04E0EC 7F0195BC 0FC15FAB */ jal sinf -/* 04E0F0 7F0195C0 C60C0000 */ lwc1 $f12, ($s0) -/* 04E0F4 7F0195C4 C6220000 */ lwc1 $f2, ($s1) -/* 04E0F8 7F0195C8 C7AA0078 */ lwc1 $f10, 0x78($sp) -/* 04E0FC 7F0195CC 3C018005 */ lui $at, %hi(D_80051B14) -/* 04E100 7F0195D0 C4241B14 */ lwc1 $f4, %lo(D_80051B14)($at) -/* 04E104 7F0195D4 460A1182 */ mul.s $f6, $f2, $f10 -/* 04E108 7F0195D8 C60C0000 */ lwc1 $f12, ($s0) -/* 04E10C 7F0195DC 46040202 */ mul.s $f8, $f0, $f4 -/* 04E110 7F0195E0 00000000 */ nop -/* 04E114 7F0195E4 46024282 */ mul.s $f10, $f8, $f2 -/* 04E118 7F0195E8 460A3101 */ sub.s $f4, $f6, $f10 -/* 04E11C 7F0195EC 0FC15FA8 */ jal cosf -/* 04E120 7F0195F0 E7A4024C */ swc1 $f4, 0x24c($sp) -/* 04E124 7F0195F4 3C018005 */ lui $at, %hi(D_80051B18) -/* 04E128 7F0195F8 C4281B18 */ lwc1 $f8, %lo(D_80051B18)($at) -/* 04E12C 7F0195FC C62A0000 */ lwc1 $f10, ($s1) -/* 04E130 7F019600 C60C0000 */ lwc1 $f12, ($s0) -/* 04E134 7F019604 46080182 */ mul.s $f6, $f0, $f8 -/* 04E138 7F019608 C7A80238 */ lwc1 $f8, 0x238($sp) -/* 04E13C 7F01960C 460A3102 */ mul.s $f4, $f6, $f10 -/* 04E140 7F019610 46044180 */ add.s $f6, $f8, $f4 -/* 04E144 7F019614 0FC15FAB */ jal sinf -/* 04E148 7F019618 E7A60238 */ swc1 $f6, 0x238($sp) -/* 04E14C 7F01961C 3C018005 */ lui $at, %hi(D_80051B1C) -/* 04E150 7F019620 C4281B1C */ lwc1 $f8, %lo(D_80051B1C)($at) -/* 04E154 7F019624 46000287 */ neg.s $f10, $f0 -/* 04E158 7F019628 C6260000 */ lwc1 $f6, ($s1) -/* 04E15C 7F01962C 46085102 */ mul.s $f4, $f10, $f8 -/* 04E160 7F019630 C7A80240 */ lwc1 $f8, 0x240($sp) -/* 04E164 7F019634 24040002 */ li $a0, 2 -/* 04E168 7F019638 46062282 */ mul.s $f10, $f4, $f6 -/* 04E16C 7F01963C 460A4100 */ add.s $f4, $f8, $f10 -/* 04E170 7F019640 0FC2F5BE */ jal dynAllocate7F0BD6F8 -/* 04E174 7F019644 E7A40240 */ swc1 $f4, 0x240($sp) -/* 04E178 7F019648 44800000 */ mtc1 $zero, $f0 -/* 04E17C 7F01964C 3C01457A */ li $at, 0x457A0000 # 4000.000000 -/* 04E180 7F019650 44813000 */ mtc1 $at, $f6 -/* 04E184 7F019654 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 04E188 7F019658 44814000 */ mtc1 $at, $f8 -/* 04E18C 7F01965C 44060000 */ mfc1 $a2, $f0 -/* 04E190 7F019660 44070000 */ mfc1 $a3, $f0 -/* 04E194 7F019664 00408025 */ move $s0, $v0 -/* 04E198 7F019668 27A400E0 */ addiu $a0, $sp, 0xe0 -/* 04E19C 7F01966C 00402825 */ move $a1, $v0 -/* 04E1A0 7F019670 E7A00014 */ swc1 $f0, 0x14($sp) -/* 04E1A4 7F019674 E7A00018 */ swc1 $f0, 0x18($sp) -/* 04E1A8 7F019678 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 04E1AC 7F01967C E7A00020 */ swc1 $f0, 0x20($sp) -/* 04E1B0 7F019680 E7A00028 */ swc1 $f0, 0x28($sp) -/* 04E1B4 7F019684 E7A60010 */ swc1 $f6, 0x10($sp) -/* 04E1B8 7F019688 0C005CDC */ jal guLookAtReflect -/* 04E1BC 7F01968C E7A80024 */ swc1 $f8, 0x24($sp) -/* 04E1C0 7F019690 02601025 */ move $v0, $s3 -/* 04E1C4 7F019694 26730008 */ addiu $s3, $s3, 8 -/* 04E1C8 7F019698 3C0BBC00 */ lui $t3, (0xBC000002 >> 16) # lui $t3, 0xbc00 -/* 04E1CC 7F01969C 3C188000 */ lui $t8, (0x80000040 >> 16) # lui $t8, 0x8000 -/* 04E1D0 7F0196A0 37180040 */ ori $t8, (0x80000040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 04E1D4 7F0196A4 356B0002 */ ori $t3, (0xBC000002 & 0xFFFF) # ori $t3, $t3, 2 -/* 04E1D8 7F0196A8 02601825 */ move $v1, $s3 -/* 04E1DC 7F0196AC 26730008 */ addiu $s3, $s3, 8 -/* 04E1E0 7F0196B0 AC4B0000 */ sw $t3, ($v0) -/* 04E1E4 7F0196B4 AC580004 */ sw $t8, 4($v0) -/* 04E1E8 7F0196B8 3C0C0386 */ lui $t4, (0x03860010 >> 16) # lui $t4, 0x386 -/* 04E1EC 7F0196BC 3C198003 */ lui $t9, %hi(gelogolight + 0x8) -/* 04E1F0 7F0196C0 2739A978 */ addiu $t9, %lo(gelogolight + 0x8) # addiu $t9, $t9, -0x5688 -/* 04E1F4 7F0196C4 358C0010 */ ori $t4, (0x03860010 & 0xFFFF) # ori $t4, $t4, 0x10 -/* 04E1F8 7F0196C8 02602025 */ move $a0, $s3 -/* 04E1FC 7F0196CC 26730008 */ addiu $s3, $s3, 8 -/* 04E200 7F0196D0 AC6C0000 */ sw $t4, ($v1) -/* 04E204 7F0196D4 AC790004 */ sw $t9, 4($v1) -/* 04E208 7F0196D8 3C0E0388 */ lui $t6, (0x03880010 >> 16) # lui $t6, 0x388 -/* 04E20C 7F0196DC 3C0F8003 */ lui $t7, %hi(gelogolight) -/* 04E210 7F0196E0 25EFA970 */ addiu $t7, %lo(gelogolight) # addiu $t7, $t7, -0x5690 -/* 04E214 7F0196E4 35CE0010 */ ori $t6, (0x03880010 & 0xFFFF) # ori $t6, $t6, 0x10 -/* 04E218 7F0196E8 02602825 */ move $a1, $s3 -/* 04E21C 7F0196EC AC8E0000 */ sw $t6, ($a0) -/* 04E220 7F0196F0 AC8F0004 */ sw $t7, 4($a0) -/* 04E224 7F0196F4 3C0D0384 */ lui $t5, (0x03840010 >> 16) # lui $t5, 0x384 -/* 04E228 7F0196F8 35AD0010 */ ori $t5, (0x03840010 & 0xFFFF) # ori $t5, $t5, 0x10 -/* 04E22C 7F0196FC ACAD0000 */ sw $t5, ($a1) -/* 04E230 7F019700 ACB00004 */ sw $s0, 4($a1) -/* 04E234 7F019704 26730008 */ addiu $s3, $s3, 8 -/* 04E238 7F019708 02603825 */ move $a3, $s3 -/* 04E23C 7F01970C 3C0B0382 */ lui $t3, (0x03820010 >> 16) # lui $t3, 0x382 -/* 04E240 7F019710 356B0010 */ ori $t3, (0x03820010 & 0xFFFF) # ori $t3, $t3, 0x10 -/* 04E244 7F019714 26180010 */ addiu $t8, $s0, 0x10 -/* 04E248 7F019718 3C148003 */ lui $s4, %hi(cast_model) -/* 04E24C 7F01971C 2694B5F4 */ addiu $s4, %lo(cast_model) # addiu $s4, $s4, -0x4a0c -/* 04E250 7F019720 ACF80004 */ sw $t8, 4($a3) -/* 04E254 7F019724 ACEB0000 */ sw $t3, ($a3) -/* 04E258 7F019728 3C058005 */ lui $a1, %hi(g_ClockTimer) -/* 04E25C 7F01972C 26730008 */ addiu $s3, $s3, 8 -/* 04E260 7F019730 8CA58374 */ lw $a1, %lo(g_ClockTimer)($a1) -/* 04E264 7F019734 8E840000 */ lw $a0, ($s4) -/* 04E268 7F019738 0FC1C2BB */ jal modelTickAnimQuarterSpeed -/* 04E26C 7F01973C 24060001 */ li $a2, 1 -/* 04E270 7F019740 0FC1B100 */ jal modelSetDistanceDisabled -/* 04E274 7F019744 24040001 */ li $a0, 1 -/* 04E278 7F019748 0FC1CFF2 */ jal sub_GAME_7F073FC8 -/* 04E27C 7F01974C 00002025 */ move $a0, $zero -/* 04E280 7F019750 0FC1B5AC */ jal subcalcpos -/* 04E284 7F019754 8E840000 */ lw $a0, ($s4) -/* 04E288 7F019758 3C078003 */ lui $a3, %hi(cast_model_weapon) -/* 04E28C 7F01975C 8CE7B5F8 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04E290 7F019760 10E0000B */ beqz $a3, .L7F019790 -/* 04E294 7F019764 00000000 */ nop -/* 04E298 7F019768 8CEC0008 */ lw $t4, 8($a3) -/* 04E29C 7F01976C 8D990008 */ lw $t9, 8($t4) -/* 04E2A0 7F019770 8F250000 */ lw $a1, ($t9) -/* 04E2A4 7F019774 10A00006 */ beqz $a1, .L7F019790 -/* 04E2A8 7F019778 00000000 */ nop -/* 04E2AC 7F01977C 0FC1B1E7 */ jal modelGetNodeRwData -/* 04E2B0 7F019780 00E02025 */ move $a0, $a3 -/* 04E2B4 7F019784 A4400000 */ sh $zero, ($v0) -/* 04E2B8 7F019788 3C078003 */ lui $a3, %hi(cast_model_weapon) -/* 04E2BC 7F01978C 8CE7B5F8 */ lw $a3, %lo(cast_model_weapon)($a3) -.L7F019790: -/* 04E2C0 7F019790 50E0000A */ beql $a3, $zero, .L7F0197BC -/* 04E2C4 7F019794 8E8D0000 */ lw $t5, ($s4) -/* 04E2C8 7F019798 8CEE0008 */ lw $t6, 8($a3) -/* 04E2CC 7F01979C 8DCF0008 */ lw $t7, 8($t6) -/* 04E2D0 7F0197A0 8DE50008 */ lw $a1, 8($t7) -/* 04E2D4 7F0197A4 50A00005 */ beql $a1, $zero, .L7F0197BC -/* 04E2D8 7F0197A8 8E8D0000 */ lw $t5, ($s4) -/* 04E2DC 7F0197AC 0FC1B1E7 */ jal modelGetNodeRwData -/* 04E2E0 7F0197B0 00E02025 */ move $a0, $a3 -/* 04E2E4 7F0197B4 AC400000 */ sw $zero, ($v0) -/* 04E2E8 7F0197B8 8E8D0000 */ lw $t5, ($s4) -.L7F0197BC: -/* 04E2EC 7F0197BC 8DAB0008 */ lw $t3, 8($t5) -/* 04E2F0 7F0197C0 8564000E */ lh $a0, 0xe($t3) -/* 04E2F4 7F0197C4 0004C180 */ sll $t8, $a0, 6 -/* 04E2F8 7F0197C8 0FC2F5C5 */ jal dynAllocate -/* 04E2FC 7F0197CC 03002025 */ move $a0, $t8 -/* 04E300 7F0197D0 27B201E8 */ addiu $s2, $sp, 0x1e8 -/* 04E304 7F0197D4 AFA201B8 */ sw $v0, 0x1b8($sp) -/* 04E308 7F0197D8 0FC15FF4 */ jal matrix_4x4_set_identity -/* 04E30C 7F0197DC 02402025 */ move $a0, $s2 -/* 04E310 7F0197E0 AFB201A8 */ sw $s2, 0x1a8($sp) -/* 04E314 7F0197E4 27A401A8 */ addiu $a0, $sp, 0x1a8 -/* 04E318 7F0197E8 0FC1BCBE */ jal subcalcmatrices -/* 04E31C 7F0197EC 8E850000 */ lw $a1, ($s4) -/* 04E320 7F0197F0 8E840000 */ lw $a0, ($s4) -/* 04E324 7F0197F4 0FC1B2E6 */ jal getsuboffset -/* 04E328 7F0197F8 27A50128 */ addiu $a1, $sp, 0x128 -/* 04E32C 7F0197FC 3C068007 */ lui $a2, %hi(bss_800695E4) -/* 04E330 7F019800 24C695E4 */ addiu $a2, %lo(bss_800695E4) # addiu $a2, $a2, -0x6a1c -/* 04E334 7F019804 8CC20000 */ lw $v0, ($a2) -/* 04E338 7F019808 00008825 */ move $s1, $zero -/* 04E33C 7F01980C 3C038005 */ lui $v1, %hi(g_ClockTimer) -/* 04E340 7F019810 10400005 */ beqz $v0, .L7F019828 -/* 04E344 7F019814 00000000 */ nop -/* 04E348 7F019818 C7AA012C */ lwc1 $f10, 0x12c($sp) -/* 04E34C 7F01981C 3C108007 */ lui $s0, %hi(flt_CODE_bss_800695E8) -/* 04E350 7F019820 261095E8 */ addiu $s0, %lo(flt_CODE_bss_800695E8) # addiu $s0, $s0, -0x6a18 -/* 04E354 7F019824 E60A0004 */ swc1 $f10, 4($s0) -.L7F019828: -/* 04E358 7F019828 3C108007 */ lui $s0, %hi(flt_CODE_bss_800695E8) -/* 04E35C 7F01982C 261095E8 */ addiu $s0, %lo(flt_CODE_bss_800695E8) # addiu $s0, $s0, -0x6a18 -/* 04E360 7F019830 C6040000 */ lwc1 $f4, ($s0) -/* 04E364 7F019834 C7A60128 */ lwc1 $f6, 0x128($sp) -/* 04E368 7F019838 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 04E36C 7F01983C E7A4006C */ swc1 $f4, 0x6c($sp) -/* 04E370 7F019840 C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 04E374 7F019844 C6040004 */ lwc1 $f4, 4($s0) -/* 04E378 7F019848 C4328378 */ lwc1 $f18, %lo(g_GlobalTimerDelta)($at) -/* 04E37C 7F01984C 46083281 */ sub.s $f10, $f6, $f8 -/* 04E380 7F019850 E7A40064 */ swc1 $f4, 0x64($sp) -/* 04E384 7F019854 C7A80064 */ lwc1 $f8, 0x64($sp) -/* 04E388 7F019858 C7A6012C */ lwc1 $f6, 0x12c($sp) -/* 04E38C 7F01985C C6040008 */ lwc1 $f4, 8($s0) -/* 04E390 7F019860 46125083 */ div.s $f2, $f10, $f18 -/* 04E394 7F019864 E7A40060 */ swc1 $f4, 0x60($sp) -/* 04E398 7F019868 46083281 */ sub.s $f10, $f6, $f8 -/* 04E39C 7F01986C C7A80060 */ lwc1 $f8, 0x60($sp) -/* 04E3A0 7F019870 C7A60130 */ lwc1 $f6, 0x130($sp) -/* 04E3A4 7F019874 46125303 */ div.s $f12, $f10, $f18 -/* 04E3A8 7F019878 46083281 */ sub.s $f10, $f6, $f8 -/* 04E3AC 7F01987C 1040000B */ beqz $v0, .L7F0198AC -/* 04E3B0 7F019880 46125383 */ div.s $f14, $f10, $f18 -/* 04E3B4 7F019884 3C018005 */ lui $at, %hi(D_80051B20) -/* 04E3B8 7F019888 C4301B20 */ lwc1 $f16, %lo(D_80051B20)($at) -/* 04E3BC 7F01988C 3C028007 */ lui $v0, %hi(flt_CODE_bss_80069608) -/* 04E3C0 7F019890 24429608 */ addiu $v0, %lo(flt_CODE_bss_80069608) # addiu $v0, $v0, -0x69f8 -/* 04E3C4 7F019894 46101103 */ div.s $f4, $f2, $f16 -/* 04E3C8 7F019898 46106183 */ div.s $f6, $f12, $f16 -/* 04E3CC 7F01989C E4440000 */ swc1 $f4, ($v0) -/* 04E3D0 7F0198A0 46107203 */ div.s $f8, $f14, $f16 -/* 04E3D4 7F0198A4 E4460004 */ swc1 $f6, 4($v0) -/* 04E3D8 7F0198A8 E4480008 */ swc1 $f8, 8($v0) -.L7F0198AC: -/* 04E3DC 7F0198AC 8C638374 */ lw $v1, %lo(g_ClockTimer)($v1) -/* 04E3E0 7F0198B0 3C028007 */ lui $v0, %hi(flt_CODE_bss_80069608) -/* 04E3E4 7F0198B4 3C018005 */ lui $at, %hi(D_80051B24) -/* 04E3E8 7F0198B8 C4301B24 */ lwc1 $f16, %lo(D_80051B24)($at) -/* 04E3EC 7F0198BC 24429608 */ addiu $v0, %lo(flt_CODE_bss_80069608) # addiu $v0, $v0, -0x69f8 -/* 04E3F0 7F0198C0 E7A20134 */ swc1 $f2, 0x134($sp) -/* 04E3F4 7F0198C4 E7AC0138 */ swc1 $f12, 0x138($sp) -/* 04E3F8 7F0198C8 18600025 */ blez $v1, .L7F019960 -/* 04E3FC 7F0198CC E7AE013C */ swc1 $f14, 0x13c($sp) -/* 04E400 7F0198D0 3C018005 */ lui $at, %hi(D_80051B28) -/* 04E404 7F0198D4 C4201B28 */ lwc1 $f0, %lo(D_80051B28)($at) -/* 04E408 7F0198D8 C4440000 */ lwc1 $f4, ($v0) -/* 04E40C 7F0198DC 26310001 */ addiu $s1, $s1, 1 -/* 04E410 7F0198E0 0223082A */ slt $at, $s1, $v1 -/* 04E414 7F0198E4 46040282 */ mul.s $f10, $f0, $f4 -/* 04E418 7F0198E8 10200010 */ beqz $at, .L7F01992C -/* 04E41C 7F0198EC C4480004 */ lwc1 $f8, 4($v0) -.L7F0198F0: -/* 04E420 7F0198F0 46080182 */ mul.s $f6, $f0, $f8 -/* 04E424 7F0198F4 460A1100 */ add.s $f4, $f2, $f10 -/* 04E428 7F0198F8 C4480008 */ lwc1 $f8, 8($v0) -/* 04E42C 7F0198FC 26310001 */ addiu $s1, $s1, 1 -/* 04E430 7F019900 0223082A */ slt $at, $s1, $v1 -/* 04E434 7F019904 46080282 */ mul.s $f10, $f0, $f8 -/* 04E438 7F019908 E4440000 */ swc1 $f4, ($v0) -/* 04E43C 7F01990C 46066180 */ add.s $f6, $f12, $f6 -/* 04E440 7F019910 C4440000 */ lwc1 $f4, ($v0) -/* 04E444 7F019914 E4460004 */ swc1 $f6, 4($v0) -/* 04E448 7F019918 460A7180 */ add.s $f6, $f14, $f10 -/* 04E44C 7F01991C 46040282 */ mul.s $f10, $f0, $f4 -/* 04E450 7F019920 C4480004 */ lwc1 $f8, 4($v0) -/* 04E454 7F019924 1420FFF2 */ bnez $at, .L7F0198F0 -/* 04E458 7F019928 E4460008 */ swc1 $f6, 8($v0) -.L7F01992C: -/* 04E45C 7F01992C 46080182 */ mul.s $f6, $f0, $f8 -/* 04E460 7F019930 C4480008 */ lwc1 $f8, 8($v0) -/* 04E464 7F019934 460A1100 */ add.s $f4, $f2, $f10 -/* 04E468 7F019938 46080282 */ mul.s $f10, $f0, $f8 -/* 04E46C 7F01993C E4440000 */ swc1 $f4, ($v0) -/* 04E470 7F019940 46066180 */ add.s $f6, $f12, $f6 -/* 04E474 7F019944 E4460004 */ swc1 $f6, 4($v0) -/* 04E478 7F019948 460A7180 */ add.s $f6, $f14, $f10 -/* 04E47C 7F01994C E4460008 */ swc1 $f6, 8($v0) -/* 04E480 7F019950 E7AE013C */ swc1 $f14, 0x13c($sp) -/* 04E484 7F019954 E7AC0138 */ swc1 $f12, 0x138($sp) -/* 04E488 7F019958 E7A20134 */ swc1 $f2, 0x134($sp) -/* 04E48C 7F01995C 00008825 */ move $s1, $zero -.L7F019960: -/* 04E490 7F019960 C4440000 */ lwc1 $f4, ($v0) -/* 04E494 7F019964 C4480004 */ lwc1 $f8, 4($v0) -/* 04E498 7F019968 3C038007 */ lui $v1, %hi(flt_CODE_bss_800695F8) -/* 04E49C 7F01996C 46102182 */ mul.s $f6, $f4, $f16 -/* 04E4A0 7F019970 C4440008 */ lwc1 $f4, 8($v0) -/* 04E4A4 7F019974 246395F8 */ addiu $v1, %lo(flt_CODE_bss_800695F8) # addiu $v1, $v1, -0x6a08 -/* 04E4A8 7F019978 46104282 */ mul.s $f10, $f8, $f16 -/* 04E4AC 7F01997C C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 04E4B0 7F019980 8E8C0000 */ lw $t4, ($s4) -/* 04E4B4 7F019984 27A50134 */ addiu $a1, $sp, 0x134 -/* 04E4B8 7F019988 E4660000 */ swc1 $f6, ($v1) -/* 04E4BC 7F01998C 46102182 */ mul.s $f6, $f4, $f16 -/* 04E4C0 7F019990 E46A0004 */ swc1 $f10, 4($v1) -/* 04E4C4 7F019994 C46A0000 */ lwc1 $f10, ($v1) -/* 04E4C8 7F019998 46125102 */ mul.s $f4, $f10, $f18 -/* 04E4CC 7F01999C E4660008 */ swc1 $f6, 8($v1) -/* 04E4D0 7F0199A0 C7AA0064 */ lwc1 $f10, 0x64($sp) -/* 04E4D4 7F0199A4 46044180 */ add.s $f6, $f8, $f4 -/* 04E4D8 7F0199A8 C4680004 */ lwc1 $f8, 4($v1) -/* 04E4DC 7F0199AC 46124102 */ mul.s $f4, $f8, $f18 -/* 04E4E0 7F0199B0 E6060000 */ swc1 $f6, ($s0) -/* 04E4E4 7F0199B4 C7A80060 */ lwc1 $f8, 0x60($sp) -/* 04E4E8 7F0199B8 46045180 */ add.s $f6, $f10, $f4 -/* 04E4EC 7F0199BC C46A0008 */ lwc1 $f10, 8($v1) -/* 04E4F0 7F0199C0 46125102 */ mul.s $f4, $f10, $f18 -/* 04E4F4 7F0199C4 E6060004 */ swc1 $f6, 4($s0) -/* 04E4F8 7F0199C8 46044180 */ add.s $f6, $f8, $f4 -/* 04E4FC 7F0199CC E6060008 */ swc1 $f6, 8($s0) -/* 04E500 7F0199D0 0FC1611D */ jal mtx4TransformVecInPlace -/* 04E504 7F0199D4 8D84000C */ lw $a0, 0xc($t4) -/* 04E508 7F0199D8 C60A0004 */ lwc1 $f10, 4($s0) -/* 04E50C 7F0199DC C6040008 */ lwc1 $f4, 8($s0) -/* 04E510 7F0199E0 3C068007 */ lui $a2, %hi(bss_800695E4) -/* 04E514 7F0199E4 24C695E4 */ addiu $a2, %lo(bss_800695E4) # addiu $a2, $a2, -0x6a1c -/* 04E518 7F0199E8 8CD90000 */ lw $t9, ($a2) -/* 04E51C 7F0199EC 3C018005 */ lui $at, %hi(D_80051B30) -/* 04E520 7F0199F0 E7AA0064 */ swc1 $f10, 0x64($sp) -/* 04E524 7F0199F4 E7A40060 */ swc1 $f4, 0x60($sp) -/* 04E528 7F0199F8 C7A20134 */ lwc1 $f2, 0x134($sp) -/* 04E52C 7F0199FC C7AC0138 */ lwc1 $f12, 0x138($sp) -/* 04E530 7F019A00 C7AE013C */ lwc1 $f14, 0x13c($sp) -/* 04E534 7F019A04 C6120000 */ lwc1 $f18, ($s0) -/* 04E538 7F019A08 C7A80064 */ lwc1 $f8, 0x64($sp) -/* 04E53C 7F019A0C C7A60060 */ lwc1 $f6, 0x60($sp) -/* 04E540 7F019A10 C4201B30 */ lwc1 $f0, %lo(D_80051B30)($at) -/* 04E544 7F019A14 3C018005 */ lui $at, %hi(D_80051B34) -/* 04E548 7F019A18 C4301B34 */ lwc1 $f16, %lo(D_80051B34)($at) -/* 04E54C 7F019A1C 46121081 */ sub.s $f2, $f2, $f18 -/* 04E550 7F019A20 46086301 */ sub.s $f12, $f12, $f8 -/* 04E554 7F019A24 1320000A */ beqz $t9, .L7F019A50 -/* 04E558 7F019A28 46067381 */ sub.s $f14, $f14, $f6 -/* 04E55C 7F019A2C 46101283 */ div.s $f10, $f2, $f16 -/* 04E560 7F019A30 3C028007 */ lui $v0, %hi(flt_CODE_bss_800695D8) -/* 04E564 7F019A34 244295D8 */ addiu $v0, %lo(flt_CODE_bss_800695D8) # addiu $v0, $v0, -0x6a28 -/* 04E568 7F019A38 ACC00000 */ sw $zero, ($a2) -/* 04E56C 7F019A3C 46106203 */ div.s $f8, $f12, $f16 -/* 04E570 7F019A40 E44A0000 */ swc1 $f10, ($v0) -/* 04E574 7F019A44 46107103 */ div.s $f4, $f14, $f16 -/* 04E578 7F019A48 E4480004 */ swc1 $f8, 4($v0) -/* 04E57C 7F019A4C E4440008 */ swc1 $f4, 8($v0) -.L7F019A50: -/* 04E580 7F019A50 3C038005 */ lui $v1, %hi(g_ClockTimer) -/* 04E584 7F019A54 8C638374 */ lw $v1, %lo(g_ClockTimer)($v1) -/* 04E588 7F019A58 3C028007 */ lui $v0, %hi(flt_CODE_bss_800695D8) -/* 04E58C 7F019A5C 244295D8 */ addiu $v0, %lo(flt_CODE_bss_800695D8) # addiu $v0, $v0, -0x6a28 -/* 04E590 7F019A60 58600021 */ blezl $v1, .L7F019AE8 -/* 04E594 7F019A64 C44A0000 */ lwc1 $f10, ($v0) -/* 04E598 7F019A68 C4440000 */ lwc1 $f4, ($v0) -/* 04E59C 7F019A6C 26310001 */ addiu $s1, $s1, 1 -/* 04E5A0 7F019A70 0223082A */ slt $at, $s1, $v1 -/* 04E5A4 7F019A74 46040202 */ mul.s $f8, $f0, $f4 -/* 04E5A8 7F019A78 10200010 */ beqz $at, .L7F019ABC -/* 04E5AC 7F019A7C C44A0004 */ lwc1 $f10, 4($v0) -.L7F019A80: -/* 04E5B0 7F019A80 460A0182 */ mul.s $f6, $f0, $f10 -/* 04E5B4 7F019A84 46081100 */ add.s $f4, $f2, $f8 -/* 04E5B8 7F019A88 C44A0008 */ lwc1 $f10, 8($v0) -/* 04E5BC 7F019A8C 26310001 */ addiu $s1, $s1, 1 -/* 04E5C0 7F019A90 0223082A */ slt $at, $s1, $v1 -/* 04E5C4 7F019A94 460A0202 */ mul.s $f8, $f0, $f10 -/* 04E5C8 7F019A98 E4440000 */ swc1 $f4, ($v0) -/* 04E5CC 7F019A9C 46066180 */ add.s $f6, $f12, $f6 -/* 04E5D0 7F019AA0 C4440000 */ lwc1 $f4, ($v0) -/* 04E5D4 7F019AA4 E4460004 */ swc1 $f6, 4($v0) -/* 04E5D8 7F019AA8 46087180 */ add.s $f6, $f14, $f8 -/* 04E5DC 7F019AAC 46040202 */ mul.s $f8, $f0, $f4 -/* 04E5E0 7F019AB0 C44A0004 */ lwc1 $f10, 4($v0) -/* 04E5E4 7F019AB4 1420FFF2 */ bnez $at, .L7F019A80 -/* 04E5E8 7F019AB8 E4460008 */ swc1 $f6, 8($v0) -.L7F019ABC: -/* 04E5EC 7F019ABC 460A0182 */ mul.s $f6, $f0, $f10 -/* 04E5F0 7F019AC0 C44A0008 */ lwc1 $f10, 8($v0) -/* 04E5F4 7F019AC4 46081100 */ add.s $f4, $f2, $f8 -/* 04E5F8 7F019AC8 460A0202 */ mul.s $f8, $f0, $f10 -/* 04E5FC 7F019ACC E4440000 */ swc1 $f4, ($v0) -/* 04E600 7F019AD0 46066180 */ add.s $f6, $f12, $f6 -/* 04E604 7F019AD4 E4460004 */ swc1 $f6, 4($v0) -/* 04E608 7F019AD8 46087180 */ add.s $f6, $f14, $f8 -/* 04E60C 7F019ADC E4460008 */ swc1 $f6, 8($v0) -/* 04E610 7F019AE0 00008825 */ move $s1, $zero -/* 04E614 7F019AE4 C44A0000 */ lwc1 $f10, ($v0) -.L7F019AE8: -/* 04E618 7F019AE8 C4440004 */ lwc1 $f4, 4($v0) -/* 04E61C 7F019AEC 3C038007 */ lui $v1, %hi(flt_CODE_bss_800695C8) -/* 04E620 7F019AF0 46105202 */ mul.s $f8, $f10, $f16 -/* 04E624 7F019AF4 C44A0008 */ lwc1 $f10, 8($v0) -/* 04E628 7F019AF8 246395C8 */ addiu $v1, %lo(flt_CODE_bss_800695C8) # addiu $v1, $v1, -0x6a38 -/* 04E62C 7F019AFC 46102182 */ mul.s $f6, $f4, $f16 -/* 04E630 7F019B00 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 04E634 7F019B04 C7A0023C */ lwc1 $f0, 0x23c($sp) -/* 04E638 7F019B08 02402025 */ move $a0, $s2 -/* 04E63C 7F019B0C E4680000 */ swc1 $f8, ($v1) -/* 04E640 7F019B10 46105202 */ mul.s $f8, $f10, $f16 -/* 04E644 7F019B14 C4640000 */ lwc1 $f4, ($v1) -/* 04E648 7F019B18 E4660004 */ swc1 $f6, 4($v1) -/* 04E64C 7F019B1C C46A0004 */ lwc1 $f10, 4($v1) -/* 04E650 7F019B20 C7A60064 */ lwc1 $f6, 0x64($sp) -/* 04E654 7F019B24 46049080 */ add.s $f2, $f18, $f4 -/* 04E658 7F019B28 44812000 */ mtc1 $at, $f4 -/* 04E65C 7F019B2C E4680008 */ swc1 $f8, 8($v1) -/* 04E660 7F019B30 460A3200 */ add.s $f8, $f6, $f10 -/* 04E664 7F019B34 C7AA0060 */ lwc1 $f10, 0x60($sp) -/* 04E668 7F019B38 E7A60050 */ swc1 $f6, 0x50($sp) -/* 04E66C 7F019B3C 3C014252 */ li $at, 0x42520000 # 52.500000 -/* 04E670 7F019B40 46044301 */ sub.s $f12, $f8, $f4 -/* 04E674 7F019B44 C4680008 */ lwc1 $f8, 8($v1) -/* 04E678 7F019B48 C7A40238 */ lwc1 $f4, 0x238($sp) -/* 04E67C 7F019B4C E7AA0054 */ swc1 $f10, 0x54($sp) -/* 04E680 7F019B50 46085380 */ add.s $f14, $f10, $f8 -/* 04E684 7F019B54 C7AA0050 */ lwc1 $f10, 0x50($sp) -/* 04E688 7F019B58 C7A60244 */ lwc1 $f6, 0x244($sp) -/* 04E68C 7F019B5C 46022200 */ add.s $f8, $f4, $f2 -/* 04E690 7F019B60 C7A40240 */ lwc1 $f4, 0x240($sp) -/* 04E694 7F019B64 E7AE013C */ swc1 $f14, 0x13c($sp) -/* 04E698 7F019B68 46123180 */ add.s $f6, $f6, $f18 -/* 04E69C 7F019B6C E7A80238 */ swc1 $f8, 0x238($sp) -/* 04E6A0 7F019B70 E7A80050 */ swc1 $f8, 0x50($sp) -/* 04E6A4 7F019B74 44814000 */ mtc1 $at, $f8 -/* 04E6A8 7F019B78 460E2100 */ add.s $f4, $f4, $f14 -/* 04E6AC 7F019B7C E7A60244 */ swc1 $f6, 0x244($sp) -/* 04E6B0 7F019B80 44053000 */ mfc1 $a1, $f6 -/* 04E6B4 7F019B84 46085280 */ add.s $f10, $f10, $f8 -/* 04E6B8 7F019B88 C7A80248 */ lwc1 $f8, 0x248($sp) -/* 04E6BC 7F019B8C E7A40240 */ swc1 $f4, 0x240($sp) -/* 04E6C0 7F019B90 E7A40058 */ swc1 $f4, 0x58($sp) -/* 04E6C4 7F019B94 460A4200 */ add.s $f8, $f8, $f10 -/* 04E6C8 7F019B98 C7AA024C */ lwc1 $f10, 0x24c($sp) -/* 04E6CC 7F019B9C C7A40054 */ lwc1 $f4, 0x54($sp) -/* 04E6D0 7F019BA0 460C0000 */ add.s $f0, $f0, $f12 -/* 04E6D4 7F019BA4 E7A80248 */ swc1 $f8, 0x248($sp) -/* 04E6D8 7F019BA8 44064000 */ mfc1 $a2, $f8 -/* 04E6DC 7F019BAC 46045280 */ add.s $f10, $f10, $f4 -/* 04E6E0 7F019BB0 C7A40050 */ lwc1 $f4, 0x50($sp) -/* 04E6E4 7F019BB4 C7A8022C */ lwc1 $f8, 0x22c($sp) -/* 04E6E8 7F019BB8 C7A60058 */ lwc1 $f6, 0x58($sp) -/* 04E6EC 7F019BBC E7AA024C */ swc1 $f10, 0x24c($sp) -/* 04E6F0 7F019BC0 44075000 */ mfc1 $a3, $f10 -/* 04E6F4 7F019BC4 E7A40010 */ swc1 $f4, 0x10($sp) -/* 04E6F8 7F019BC8 C7A40234 */ lwc1 $f4, 0x234($sp) -/* 04E6FC 7F019BCC C7AA0230 */ lwc1 $f10, 0x230($sp) -/* 04E700 7F019BD0 E7A00014 */ swc1 $f0, 0x14($sp) -/* 04E704 7F019BD4 E7A0023C */ swc1 $f0, 0x23c($sp) -/* 04E708 7F019BD8 E7AC0138 */ swc1 $f12, 0x138($sp) -/* 04E70C 7F019BDC E7A20134 */ swc1 $f2, 0x134($sp) -/* 04E710 7F019BE0 E7A8001C */ swc1 $f8, 0x1c($sp) -/* 04E714 7F019BE4 E7A60018 */ swc1 $f6, 0x18($sp) -/* 04E718 7F019BE8 E7A40024 */ swc1 $f4, 0x24($sp) -/* 04E71C 7F019BEC 0FC165A5 */ jal matrix_4x4_set_lookat_target -/* 04E720 7F019BF0 E7AA0020 */ swc1 $f10, 0x20($sp) -/* 04E724 7F019BF4 8E8E0000 */ lw $t6, ($s4) -/* 04E728 7F019BF8 AFB201A8 */ sw $s2, 0x1a8($sp) -/* 04E72C 7F019BFC 8DCF0008 */ lw $t7, 8($t6) -/* 04E730 7F019C00 85E4000E */ lh $a0, 0xe($t7) -/* 04E734 7F019C04 00046980 */ sll $t5, $a0, 6 -/* 04E738 7F019C08 0FC2F5C5 */ jal dynAllocate -/* 04E73C 7F019C0C 01A02025 */ move $a0, $t5 -/* 04E740 7F019C10 AFA201B8 */ sw $v0, 0x1b8($sp) -/* 04E744 7F019C14 27A401A8 */ addiu $a0, $sp, 0x1a8 -/* 04E748 7F019C18 0FC1BCBE */ jal subcalcmatrices -/* 04E74C 7F019C1C 8E850000 */ lw $a1, ($s4) -/* 04E750 7F019C20 3C078003 */ lui $a3, %hi(cast_model_weapon) -/* 04E754 7F019C24 8CE7B5F8 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04E758 7F019C28 50E00025 */ beql $a3, $zero, .L7F019CC0 -/* 04E75C 7F019C2C 24180007 */ li $t8, 7 -/* 04E760 7F019C30 8E840000 */ lw $a0, ($s4) -/* 04E764 7F019C34 8CE5001C */ lw $a1, 0x1c($a3) -/* 04E768 7F019C38 0FC1B198 */ jal modelFindNodeMtx -/* 04E76C 7F019C3C 00003025 */ move $a2, $zero -/* 04E770 7F019C40 8E980000 */ lw $t8, ($s4) -/* 04E774 7F019C44 AFA201A8 */ sw $v0, 0x1a8($sp) -/* 04E778 7F019C48 3C078003 */ lui $a3, %hi(cast_model_weapon) -/* 04E77C 7F019C4C 8F0C0008 */ lw $t4, 8($t8) -/* 04E780 7F019C50 8CE7B5F8 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04E784 7F019C54 27B20160 */ addiu $s2, $sp, 0x160 -/* 04E788 7F019C58 8D990008 */ lw $t9, 8($t4) -/* 04E78C 7F019C5C 8CEB001C */ lw $t3, 0x1c($a3) -/* 04E790 7F019C60 02402825 */ move $a1, $s2 -/* 04E794 7F019C64 8F2E0014 */ lw $t6, 0x14($t9) -/* 04E798 7F019C68 3C018005 */ lui $at, %hi(D_80051B38) -/* 04E79C 7F019C6C 556E000A */ bnel $t3, $t6, .L7F019C98 -/* 04E7A0 7F019C70 8CEF0008 */ lw $t7, 8($a3) -/* 04E7A4 7F019C74 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 04E7A8 7F019C78 C42C1B38 */ lwc1 $f12, %lo(D_80051B38)($at) -/* 04E7AC 7F019C7C 8FA401A8 */ lw $a0, 0x1a8($sp) -/* 04E7B0 7F019C80 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 04E7B4 7F019C84 02402825 */ move $a1, $s2 -/* 04E7B8 7F019C88 3C078003 */ lui $a3, %hi(cast_model_weapon) -/* 04E7BC 7F019C8C 8CE7B5F8 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04E7C0 7F019C90 AFB201A8 */ sw $s2, 0x1a8($sp) -/* 04E7C4 7F019C94 8CEF0008 */ lw $t7, 8($a3) -.L7F019C98: -/* 04E7C8 7F019C98 85E4000E */ lh $a0, 0xe($t7) -/* 04E7CC 7F019C9C 00046980 */ sll $t5, $a0, 6 -/* 04E7D0 7F019CA0 0FC2F5C5 */ jal dynAllocate -/* 04E7D4 7F019CA4 01A02025 */ move $a0, $t5 -/* 04E7D8 7F019CA8 3C058003 */ lui $a1, %hi(cast_model_weapon) -/* 04E7DC 7F019CAC AFA201B8 */ sw $v0, 0x1b8($sp) -/* 04E7E0 7F019CB0 8CA5B5F8 */ lw $a1, %lo(cast_model_weapon)($a1) -/* 04E7E4 7F019CB4 0FC1BC92 */ jal instcalcmatrices -/* 04E7E8 7F019CB8 27A401A8 */ addiu $a0, $sp, 0x1a8 -/* 04E7EC 7F019CBC 24180007 */ li $t8, 7 -.L7F019CC0: -/* 04E7F0 7F019CC0 240C0001 */ li $t4, 1 -/* 04E7F4 7F019CC4 24190003 */ li $t9, 3 -/* 04E7F8 7F019CC8 27B20160 */ addiu $s2, $sp, 0x160 -/* 04E7FC 7F019CCC AFB801D8 */ sw $t8, 0x1d8($sp) -/* 04E800 7F019CD0 AFAC01AC */ sw $t4, 0x1ac($sp) -/* 04E804 7F019CD4 AFB301B4 */ sw $s3, 0x1b4($sp) -/* 04E808 7F019CD8 AFB901B0 */ sw $t9, 0x1b0($sp) -/* 04E80C 7F019CDC 27A401A8 */ addiu $a0, $sp, 0x1a8 -/* 04E810 7F019CE0 0FC1D1A1 */ jal subdraw -/* 04E814 7F019CE4 8E850000 */ lw $a1, ($s4) -/* 04E818 7F019CE8 3C078003 */ lui $a3, %hi(cast_model_weapon) -/* 04E81C 7F019CEC 8CE7B5F8 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04E820 7F019CF0 10E00003 */ beqz $a3, .L7F019D00 -/* 04E824 7F019CF4 27A401A8 */ addiu $a0, $sp, 0x1a8 -/* 04E828 7F019CF8 0FC1D1A1 */ jal subdraw -/* 04E82C 7F019CFC 00E02825 */ move $a1, $a3 -.L7F019D00: -/* 04E830 7F019D00 8FB301B4 */ lw $s3, 0x1b4($sp) -/* 04E834 7F019D04 0FC1B100 */ jal modelSetDistanceDisabled -/* 04E838 7F019D08 00002025 */ move $a0, $zero -/* 04E83C 7F019D0C 8E820000 */ lw $v0, ($s4) -/* 04E840 7F019D10 8C4B0008 */ lw $t3, 8($v0) -/* 04E844 7F019D14 856E000E */ lh $t6, 0xe($t3) -/* 04E848 7F019D18 19C00013 */ blez $t6, .L7F019D68 -/* 04E84C 7F019D1C 00008025 */ move $s0, $zero -/* 04E850 7F019D20 8C4F000C */ lw $t7, 0xc($v0) -.L7F019D24: -/* 04E854 7F019D24 02402825 */ move $a1, $s2 -/* 04E858 7F019D28 0FC16008 */ jal matrix_4x4_copy -/* 04E85C 7F019D2C 01F02021 */ addu $a0, $t7, $s0 -/* 04E860 7F019D30 8E8D0000 */ lw $t5, ($s4) -/* 04E864 7F019D34 00116180 */ sll $t4, $s1, 6 -/* 04E868 7F019D38 02402025 */ move $a0, $s2 -/* 04E86C 7F019D3C 8DB8000C */ lw $t8, 0xc($t5) -/* 04E870 7F019D40 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 04E874 7F019D44 030C2821 */ addu $a1, $t8, $t4 -/* 04E878 7F019D48 8E820000 */ lw $v0, ($s4) -/* 04E87C 7F019D4C 26310001 */ addiu $s1, $s1, 1 -/* 04E880 7F019D50 26100040 */ addiu $s0, $s0, 0x40 -/* 04E884 7F019D54 8C590008 */ lw $t9, 8($v0) -/* 04E888 7F019D58 872B000E */ lh $t3, 0xe($t9) -/* 04E88C 7F019D5C 022B082A */ slt $at, $s1, $t3 -/* 04E890 7F019D60 5420FFF0 */ bnezl $at, .L7F019D24 -/* 04E894 7F019D64 8C4F000C */ lw $t7, 0xc($v0) -.L7F019D68: -/* 04E898 7F019D68 3C078003 */ lui $a3, %hi(cast_model_weapon) -/* 04E89C 7F019D6C 8CE7B5F8 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04E8A0 7F019D70 50E0001C */ beql $a3, $zero, .L7F019DE4 -/* 04E8A4 7F019D74 02601025 */ move $v0, $s3 -/* 04E8A8 7F019D78 8CEE0008 */ lw $t6, 8($a3) -/* 04E8AC 7F019D7C 00008825 */ move $s1, $zero -/* 04E8B0 7F019D80 00008025 */ move $s0, $zero -/* 04E8B4 7F019D84 85CF000E */ lh $t7, 0xe($t6) -/* 04E8B8 7F019D88 59E00016 */ blezl $t7, .L7F019DE4 -/* 04E8BC 7F019D8C 02601025 */ move $v0, $s3 -/* 04E8C0 7F019D90 8CED000C */ lw $t5, 0xc($a3) -.L7F019D94: -/* 04E8C4 7F019D94 02402825 */ move $a1, $s2 -/* 04E8C8 7F019D98 0FC16008 */ jal matrix_4x4_copy -/* 04E8CC 7F019D9C 01B02021 */ addu $a0, $t5, $s0 -/* 04E8D0 7F019DA0 3C188003 */ lui $t8, %hi(cast_model_weapon) -/* 04E8D4 7F019DA4 8F18B5F8 */ lw $t8, %lo(cast_model_weapon)($t8) -/* 04E8D8 7F019DA8 0011C980 */ sll $t9, $s1, 6 -/* 04E8DC 7F019DAC 02402025 */ move $a0, $s2 -/* 04E8E0 7F019DB0 8F0C000C */ lw $t4, 0xc($t8) -/* 04E8E4 7F019DB4 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 04E8E8 7F019DB8 01992821 */ addu $a1, $t4, $t9 -/* 04E8EC 7F019DBC 3C078003 */ lui $a3, %hi(cast_model_weapon) -/* 04E8F0 7F019DC0 8CE7B5F8 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04E8F4 7F019DC4 26310001 */ addiu $s1, $s1, 1 -/* 04E8F8 7F019DC8 26100040 */ addiu $s0, $s0, 0x40 -/* 04E8FC 7F019DCC 8CEB0008 */ lw $t3, 8($a3) -/* 04E900 7F019DD0 856E000E */ lh $t6, 0xe($t3) -/* 04E904 7F019DD4 022E082A */ slt $at, $s1, $t6 -/* 04E908 7F019DD8 5420FFEE */ bnezl $at, .L7F019D94 -/* 04E90C 7F019DDC 8CED000C */ lw $t5, 0xc($a3) -/* 04E910 7F019DE0 02601025 */ move $v0, $s3 -.L7F019DE4: -/* 04E914 7F019DE4 3C0D006E */ lui $t5, (0x006E0528 >> 16) # lui $t5, 0x6e -/* 04E918 7F019DE8 35AD0528 */ ori $t5, (0x006E0528 & 0xFFFF) # ori $t5, $t5, 0x528 -/* 04E91C 7F019DEC 3C0FED00 */ lui $t7, 0xed00 -/* 04E920 7F019DF0 AC4F0000 */ sw $t7, ($v0) -/* 04E924 7F019DF4 AC4D0004 */ sw $t5, 4($v0) -/* 04E928 7F019DF8 26730008 */ addiu $s3, $s3, 8 -/* 04E92C 7F019DFC 3C07E700 */ lui $a3, 0xe700 -/* 04E930 7F019E00 26640008 */ addiu $a0, $s3, 8 -/* 04E934 7F019E04 AE670000 */ sw $a3, ($s3) -/* 04E938 7F019E08 AE600004 */ sw $zero, 4($s3) -/* 04E93C 7F019E0C 3C18BA00 */ lui $t8, (0xBA001402 >> 16) # lui $t8, 0xba00 -/* 04E940 7F019E10 37181402 */ ori $t8, (0xBA001402 & 0xFFFF) # ori $t8, $t8, 0x1402 -/* 04E944 7F019E14 AC980000 */ sw $t8, ($a0) -/* 04E948 7F019E18 AC800004 */ sw $zero, 4($a0) -/* 04E94C 7F019E1C 24850008 */ addiu $a1, $a0, 8 -/* 04E950 7F019E20 3C08BA00 */ lui $t0, (0xBA000602 >> 16) # lui $t0, 0xba00 -/* 04E954 7F019E24 35080602 */ ori $t0, (0xBA000602 & 0xFFFF) # ori $t0, $t0, 0x602 -/* 04E958 7F019E28 24A60008 */ addiu $a2, $a1, 8 -/* 04E95C 7F019E2C 240C00C0 */ li $t4, 192 -/* 04E960 7F019E30 3C09BA00 */ lui $t1, (0xBA001301 >> 16) # lui $t1, 0xba00 -/* 04E964 7F019E34 ACAC0004 */ sw $t4, 4($a1) -/* 04E968 7F019E38 ACA80000 */ sw $t0, ($a1) -/* 04E96C 7F019E3C 35291301 */ ori $t1, (0xBA001301 & 0xFFFF) # ori $t1, $t1, 0x1301 -/* 04E970 7F019E40 24C20008 */ addiu $v0, $a2, 8 -/* 04E974 7F019E44 ACC90000 */ sw $t1, ($a2) -/* 04E978 7F019E48 ACC00004 */ sw $zero, 4($a2) -/* 04E97C 7F019E4C 3C19B900 */ lui $t9, (0xB9000002 >> 16) # lui $t9, 0xb900 -/* 04E980 7F019E50 37390002 */ ori $t9, (0xB9000002 & 0xFFFF) # ori $t9, $t9, 2 -/* 04E984 7F019E54 24430008 */ addiu $v1, $v0, 8 -/* 04E988 7F019E58 3C0ABA00 */ lui $t2, (0xBA001001 >> 16) # lui $t2, 0xba00 -/* 04E98C 7F019E5C AC590000 */ sw $t9, ($v0) -/* 04E990 7F019E60 AC400004 */ sw $zero, 4($v0) -/* 04E994 7F019E64 354A1001 */ ori $t2, (0xBA001001 & 0xFFFF) # ori $t2, $t2, 0x1001 -/* 04E998 7F019E68 24730008 */ addiu $s3, $v1, 8 -/* 04E99C 7F019E6C AC6A0000 */ sw $t2, ($v1) -/* 04E9A0 7F019E70 AC600004 */ sw $zero, 4($v1) -/* 04E9A4 7F019E74 02602025 */ move $a0, $s3 -/* 04E9A8 7F019E78 3C0BBA00 */ lui $t3, (0xBA000C02 >> 16) # lui $t3, 0xba00 -/* 04E9AC 7F019E7C 356B0C02 */ ori $t3, (0xBA000C02 & 0xFFFF) # ori $t3, $t3, 0xc02 -/* 04E9B0 7F019E80 240E2000 */ li $t6, 8192 -/* 04E9B4 7F019E84 AC8E0004 */ sw $t6, 4($a0) -/* 04E9B8 7F019E88 AC8B0000 */ sw $t3, ($a0) -/* 04E9BC 7F019E8C 26650008 */ addiu $a1, $s3, 8 -/* 04E9C0 7F019E90 3C0FBA00 */ lui $t7, (0xBA000903 >> 16) # lui $t7, 0xba00 -/* 04E9C4 7F019E94 35EF0903 */ ori $t7, (0xBA000903 & 0xFFFF) # ori $t7, $t7, 0x903 -/* 04E9C8 7F019E98 ACAF0000 */ sw $t7, ($a1) -/* 04E9CC 7F019E9C 24A60008 */ addiu $a2, $a1, 8 -/* 04E9D0 7F019EA0 240D0C00 */ li $t5, 3072 -/* 04E9D4 7F019EA4 ACAD0004 */ sw $t5, 4($a1) -/* 04E9D8 7F019EA8 3C18BA00 */ lui $t8, (0xBA000E02 >> 16) # lui $t8, 0xba00 -/* 04E9DC 7F019EAC 37180E02 */ ori $t8, (0xBA000E02 & 0xFFFF) # ori $t8, $t8, 0xe02 -/* 04E9E0 7F019EB0 24C20008 */ addiu $v0, $a2, 8 -/* 04E9E4 7F019EB4 ACD80000 */ sw $t8, ($a2) -/* 04E9E8 7F019EB8 ACC00004 */ sw $zero, 4($a2) -/* 04E9EC 7F019EBC 3C190050 */ lui $t9, (0x00504340 >> 16) # lui $t9, 0x50 -/* 04E9F0 7F019EC0 3C0CB900 */ lui $t4, (0xB900031D >> 16) # lui $t4, 0xb900 -/* 04E9F4 7F019EC4 358C031D */ ori $t4, (0xB900031D & 0xFFFF) # ori $t4, $t4, 0x31d -/* 04E9F8 7F019EC8 37394340 */ ori $t9, (0x00504340 & 0xFFFF) # ori $t9, $t9, 0x4340 -/* 04E9FC 7F019ECC 24430008 */ addiu $v1, $v0, 8 -/* 04EA00 7F019ED0 AC590004 */ sw $t9, 4($v0) -/* 04EA04 7F019ED4 AC4C0000 */ sw $t4, ($v0) -/* 04EA08 7F019ED8 3C0BFCFF */ lui $t3, (0xFCFFFFFF >> 16) # lui $t3, 0xfcff -/* 04EA0C 7F019EDC 3C0EFFFD */ lui $t6, (0xFFFDF6FB >> 16) # lui $t6, 0xfffd -/* 04EA10 7F019EE0 35CEF6FB */ ori $t6, (0xFFFDF6FB & 0xFFFF) # ori $t6, $t6, 0xf6fb -/* 04EA14 7F019EE4 356BFFFF */ ori $t3, (0xFCFFFFFF & 0xFFFF) # ori $t3, $t3, 0xffff -/* 04EA18 7F019EE8 AC6B0000 */ sw $t3, ($v1) -/* 04EA1C 7F019EEC AC6E0004 */ sw $t6, 4($v1) -/* 04EA20 7F019EF0 24640008 */ addiu $a0, $v1, 8 -/* 04EA24 7F019EF4 3C0FFA00 */ lui $t7, 0xfa00 -/* 04EA28 7F019EF8 AC8F0000 */ sw $t7, ($a0) -/* 04EA2C 7F019EFC 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 04EA30 7F019F00 44813000 */ mtc1 $at, $f6 -/* 04EA34 7F019F04 C7A80144 */ lwc1 $f8, 0x144($sp) -/* 04EA38 7F019F08 240C00FF */ li $t4, 255 -/* 04EA3C 7F019F0C 24930008 */ addiu $s3, $a0, 8 -/* 04EA40 7F019F10 46083002 */ mul.s $f0, $f6, $f8 -/* 04EA44 7F019F14 3C0EF66E */ lui $t6, (0xF66E0528 >> 16) # lui $t6, 0xf66e -/* 04EA48 7F019F18 35CE0528 */ ori $t6, (0xF66E0528 & 0xFFFF) # ori $t6, $t6, 0x528 -/* 04EA4C 7F019F1C 26660008 */ addiu $a2, $s3, 8 -/* 04EA50 7F019F20 24C20008 */ addiu $v0, $a2, 8 -/* 04EA54 7F019F24 24430008 */ addiu $v1, $v0, 8 -/* 04EA58 7F019F28 240F0040 */ li $t7, 64 -/* 04EA5C 7F019F2C 4600028D */ trunc.w.s $f10, $f0 -/* 04EA60 7F019F30 3C0D0008 */ lui $t5, 8 -/* 04EA64 7F019F34 24650008 */ addiu $a1, $v1, 8 -/* 04EA68 7F019F38 44185000 */ mfc1 $t8, $f10 -/* 04EA6C 7F019F3C 00000000 */ nop -/* 04EA70 7F019F40 0198C823 */ subu $t9, $t4, $t8 -/* 04EA74 7F019F44 332B00FF */ andi $t3, $t9, 0xff -/* 04EA78 7F019F48 AC8B0004 */ sw $t3, 4($a0) -/* 04EA7C 7F019F4C AE600004 */ sw $zero, 4($s3) -/* 04EA80 7F019F50 AE6E0000 */ sw $t6, ($s3) -/* 04EA84 7F019F54 ACC00004 */ sw $zero, 4($a2) -/* 04EA88 7F019F58 ACC70000 */ sw $a3, ($a2) -/* 04EA8C 7F019F5C AC4F0004 */ sw $t7, 4($v0) -/* 04EA90 7F019F60 AC480000 */ sw $t0, ($v0) -/* 04EA94 7F019F64 AC6D0004 */ sw $t5, 4($v1) -/* 04EA98 7F019F68 AC690000 */ sw $t1, ($v1) -/* 04EA9C 7F019F6C 3C0C0001 */ lui $t4, 1 -/* 04EAA0 7F019F70 ACAC0004 */ sw $t4, 4($a1) -/* 04EAA4 7F019F74 ACAA0000 */ sw $t2, ($a1) -/* 04EAA8 7F019F78 24A40008 */ addiu $a0, $a1, 8 -/* 04EAAC 7F019F7C 0FC2B366 */ jal microcode_constructor -/* 04EAB0 7F019F80 E7A00070 */ swc1 $f0, 0x70($sp) -/* 04EAB4 7F019F84 3C188003 */ lui $t8, %hi(full_actor_intro) -/* 04EAB8 7F019F88 8F18B5FC */ lw $t8, %lo(full_actor_intro)($t8) -/* 04EABC 7F019F8C 00409825 */ move $s3, $v0 -/* 04EAC0 7F019F90 1700005F */ bnez $t8, .L7F01A110 -/* 04EAC4 7F019F94 3C198003 */ lui $t9, %hi(intro_character_index) -/* 04EAC8 7F019F98 8F39B5E8 */ lw $t9, %lo(intro_character_index)($t9) -/* 04EACC 7F019F9C 3C048003 */ lui $a0, %hi(intro_char_table+8) -/* 04EAD0 7F019FA0 00195880 */ sll $t3, $t9, 2 -/* 04EAD4 7F019FA4 01795821 */ addu $t3, $t3, $t9 -/* 04EAD8 7F019FA8 000B5880 */ sll $t3, $t3, 2 -/* 04EADC 7F019FAC 008B2021 */ addu $a0, $a0, $t3 -/* 04EAE0 7F019FB0 0FC30776 */ jal langGet -/* 04EAE4 7F019FB4 9484B608 */ lhu $a0, %lo(intro_char_table+8)($a0) -/* 04EAE8 7F019FB8 3C0E8004 */ lui $t6, %hi(ptrFontZurichBold) -/* 04EAEC 7F019FBC 8DCE0EB4 */ lw $t6, %lo(ptrFontZurichBold)($t6) -/* 04EAF0 7F019FC0 3C148004 */ lui $s4, %hi(ptrFontZurichBoldChars) -/* 04EAF4 7F019FC4 26940EB8 */ addiu $s4, %lo(ptrFontZurichBoldChars) # addiu $s4, $s4, 0xeb8 -/* 04EAF8 7F019FC8 00408825 */ move $s1, $v0 -/* 04EAFC 7F019FCC 8E870000 */ lw $a3, ($s4) -/* 04EB00 7F019FD0 27A40150 */ addiu $a0, $sp, 0x150 -/* 04EB04 7F019FD4 27A50154 */ addiu $a1, $sp, 0x154 -/* 04EB08 7F019FD8 00403025 */ move $a2, $v0 -/* 04EB0C 7F019FDC AFA00014 */ sw $zero, 0x14($sp) -/* 04EB10 7F019FE0 0FC2BA63 */ jal textMeasure -/* 04EB14 7F019FE4 AFAE0010 */ sw $t6, 0x10($sp) -/* 04EB18 7F019FE8 8FA20154 */ lw $v0, 0x154($sp) -/* 04EB1C 7F019FEC 8FB80150 */ lw $t8, 0x150($sp) -/* 04EB20 7F019FF0 240D013B */ li $t5, 315 -/* 04EB24 7F019FF4 04410003 */ bgez $v0, .L7F01A004 -/* 04EB28 7F019FF8 00027843 */ sra $t7, $v0, 1 -/* 04EB2C 7F019FFC 24410001 */ addiu $at, $v0, 1 -/* 04EB30 7F01A000 00017843 */ sra $t7, $at, 1 -.L7F01A004: -/* 04EB34 7F01A004 01AF2823 */ subu $a1, $t5, $t7 -/* 04EB38 7F01A008 240C006C */ li $t4, 108 -/* 04EB3C 7F01A00C 00A23821 */ addu $a3, $a1, $v0 -/* 04EB40 7F01A010 2719006D */ addiu $t9, $t8, 0x6d -/* 04EB44 7F01A014 AFAC0158 */ sw $t4, 0x158($sp) -/* 04EB48 7F01A018 AFB90010 */ sw $t9, 0x10($sp) -/* 04EB4C 7F01A01C 24E70001 */ addiu $a3, $a3, 1 -/* 04EB50 7F01A020 AFA5015C */ sw $a1, 0x15c($sp) -/* 04EB54 7F01A024 02602025 */ move $a0, $s3 -/* 04EB58 7F01A028 2406006C */ li $a2, 108 -/* 04EB5C 7F01A02C 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 04EB60 7F01A030 AFA00014 */ sw $zero, 0x14($sp) -/* 04EB64 7F01A034 0C001107 */ jal viGetX -/* 04EB68 7F01A038 00409825 */ move $s3, $v0 -/* 04EB6C 7F01A03C 00028400 */ sll $s0, $v0, 0x10 -/* 04EB70 7F01A040 00105C03 */ sra $t3, $s0, 0x10 -/* 04EB74 7F01A044 0C00110B */ jal viGetY -/* 04EB78 7F01A048 01608025 */ move $s0, $t3 -/* 04EB7C 7F01A04C 444FF800 */ cfc1 $t7, $31 -/* 04EB80 7F01A050 240C0001 */ li $t4, 1 -/* 04EB84 7F01A054 44CCF800 */ ctc1 $t4, $31 -/* 04EB88 7F01A058 C7A40070 */ lwc1 $f4, 0x70($sp) -/* 04EB8C 7F01A05C 3C0D8004 */ lui $t5, %hi(ptrFontZurichBold) -/* 04EB90 7F01A060 8DAD0EB4 */ lw $t5, %lo(ptrFontZurichBold)($t5) -/* 04EB94 7F01A064 460021A4 */ cvt.w.s $f6, $f4 -/* 04EB98 7F01A068 8E8E0000 */ lw $t6, ($s4) -/* 04EB9C 7F01A06C 02602025 */ move $a0, $s3 -/* 04EBA0 7F01A070 27A5015C */ addiu $a1, $sp, 0x15c -/* 04EBA4 7F01A074 444CF800 */ cfc1 $t4, $31 -/* 04EBA8 7F01A078 27A60158 */ addiu $a2, $sp, 0x158 -/* 04EBAC 7F01A07C 02203825 */ move $a3, $s1 -/* 04EBB0 7F01A080 318C0078 */ andi $t4, $t4, 0x78 -/* 04EBB4 7F01A084 AFAD0014 */ sw $t5, 0x14($sp) -/* 04EBB8 7F01A088 11800013 */ beqz $t4, .L7F01A0D8 -/* 04EBBC 7F01A08C AFAE0010 */ sw $t6, 0x10($sp) -/* 04EBC0 7F01A090 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 04EBC4 7F01A094 44813000 */ mtc1 $at, $f6 -/* 04EBC8 7F01A098 240C0001 */ li $t4, 1 -/* 04EBCC 7F01A09C 46062181 */ sub.s $f6, $f4, $f6 -/* 04EBD0 7F01A0A0 44CCF800 */ ctc1 $t4, $31 -/* 04EBD4 7F01A0A4 00000000 */ nop -/* 04EBD8 7F01A0A8 460031A4 */ cvt.w.s $f6, $f6 -/* 04EBDC 7F01A0AC 444CF800 */ cfc1 $t4, $31 -/* 04EBE0 7F01A0B0 00000000 */ nop -/* 04EBE4 7F01A0B4 318C0078 */ andi $t4, $t4, 0x78 -/* 04EBE8 7F01A0B8 15800005 */ bnez $t4, .L7F01A0D0 -/* 04EBEC 7F01A0BC 00000000 */ nop -/* 04EBF0 7F01A0C0 440C3000 */ mfc1 $t4, $f6 -/* 04EBF4 7F01A0C4 3C018000 */ lui $at, 0x8000 -/* 04EBF8 7F01A0C8 10000007 */ b .L7F01A0E8 -/* 04EBFC 7F01A0CC 01816025 */ or $t4, $t4, $at -.L7F01A0D0: -/* 04EC00 7F01A0D0 10000005 */ b .L7F01A0E8 -/* 04EC04 7F01A0D4 240CFFFF */ li $t4, -1 -.L7F01A0D8: -/* 04EC08 7F01A0D8 440C3000 */ mfc1 $t4, $f6 -/* 04EC0C 7F01A0DC 00000000 */ nop -/* 04EC10 7F01A0E0 0580FFFB */ bltz $t4, .L7F01A0D0 -/* 04EC14 7F01A0E4 00000000 */ nop -.L7F01A0E8: -/* 04EC18 7F01A0E8 2401FF00 */ li $at, -256 -/* 04EC1C 7F01A0EC 0181C025 */ or $t8, $t4, $at -/* 04EC20 7F01A0F0 44CFF800 */ ctc1 $t7, $31 -/* 04EC24 7F01A0F4 AFB80018 */ sw $t8, 0x18($sp) -/* 04EC28 7F01A0F8 AFB0001C */ sw $s0, 0x1c($sp) -/* 04EC2C 7F01A0FC AFA20020 */ sw $v0, 0x20($sp) -/* 04EC30 7F01A100 AFA00024 */ sw $zero, 0x24($sp) -/* 04EC34 7F01A104 0FC2B6AF */ jal textRender -/* 04EC38 7F01A108 AFA00028 */ sw $zero, 0x28($sp) -/* 04EC3C 7F01A10C 00409825 */ move $s3, $v0 -.L7F01A110: -/* 04EC40 7F01A110 444EF800 */ cfc1 $t6, $31 -/* 04EC44 7F01A114 24120001 */ li $s2, 1 -/* 04EC48 7F01A118 44D2F800 */ ctc1 $s2, $31 -/* 04EC4C 7F01A11C C7A80070 */ lwc1 $f8, 0x70($sp) -/* 04EC50 7F01A120 3C198003 */ lui $t9, %hi(intro_character_index) -/* 04EC54 7F01A124 8F39B5E8 */ lw $t9, %lo(intro_character_index)($t9) -/* 04EC58 7F01A128 460042A4 */ cvt.w.s $f10, $f8 -/* 04EC5C 7F01A12C 3C048003 */ lui $a0, %hi(intro_char_table+10) -/* 04EC60 7F01A130 00195880 */ sll $t3, $t9, 2 -/* 04EC64 7F01A134 01795821 */ addu $t3, $t3, $t9 -/* 04EC68 7F01A138 4452F800 */ cfc1 $s2, $31 -/* 04EC6C 7F01A13C 000B5880 */ sll $t3, $t3, 2 -/* 04EC70 7F01A140 3C148004 */ lui $s4, %hi(ptrFontZurichBoldChars) -/* 04EC74 7F01A144 008B2021 */ addu $a0, $a0, $t3 -/* 04EC78 7F01A148 32520078 */ andi $s2, $s2, 0x78 -/* 04EC7C 7F01A14C 26940EB8 */ addiu $s4, %lo(ptrFontZurichBoldChars) # addiu $s4, $s4, 0xeb8 -/* 04EC80 7F01A150 12400013 */ beqz $s2, .L7F01A1A0 -/* 04EC84 7F01A154 9484B60A */ lhu $a0, %lo(intro_char_table+10)($a0) -/* 04EC88 7F01A158 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 04EC8C 7F01A15C 44815000 */ mtc1 $at, $f10 -/* 04EC90 7F01A160 24120001 */ li $s2, 1 -/* 04EC94 7F01A164 460A4281 */ sub.s $f10, $f8, $f10 -/* 04EC98 7F01A168 44D2F800 */ ctc1 $s2, $31 -/* 04EC9C 7F01A16C 00000000 */ nop -/* 04ECA0 7F01A170 460052A4 */ cvt.w.s $f10, $f10 -/* 04ECA4 7F01A174 4452F800 */ cfc1 $s2, $31 -/* 04ECA8 7F01A178 00000000 */ nop -/* 04ECAC 7F01A17C 32520078 */ andi $s2, $s2, 0x78 -/* 04ECB0 7F01A180 16400005 */ bnez $s2, .L7F01A198 -/* 04ECB4 7F01A184 00000000 */ nop -/* 04ECB8 7F01A188 44125000 */ mfc1 $s2, $f10 -/* 04ECBC 7F01A18C 3C018000 */ lui $at, 0x8000 -/* 04ECC0 7F01A190 10000007 */ b .L7F01A1B0 -/* 04ECC4 7F01A194 02419025 */ or $s2, $s2, $at -.L7F01A198: -/* 04ECC8 7F01A198 10000005 */ b .L7F01A1B0 -/* 04ECCC 7F01A19C 2412FFFF */ li $s2, -1 -.L7F01A1A0: -/* 04ECD0 7F01A1A0 44125000 */ mfc1 $s2, $f10 -/* 04ECD4 7F01A1A4 00000000 */ nop -/* 04ECD8 7F01A1A8 0640FFFB */ bltz $s2, .L7F01A198 -/* 04ECDC 7F01A1AC 00000000 */ nop -.L7F01A1B0: -/* 04ECE0 7F01A1B0 2401FF00 */ li $at, -256 -/* 04ECE4 7F01A1B4 02416825 */ or $t5, $s2, $at -/* 04ECE8 7F01A1B8 44CEF800 */ ctc1 $t6, $31 -/* 04ECEC 7F01A1BC 0FC30776 */ jal langGet -/* 04ECF0 7F01A1C0 01A09025 */ move $s2, $t5 -/* 04ECF4 7F01A1C4 3C0F8004 */ lui $t7, %hi(ptrFontZurichBold) -/* 04ECF8 7F01A1C8 8DEF0EB4 */ lw $t7, %lo(ptrFontZurichBold)($t7) -/* 04ECFC 7F01A1CC 00408825 */ move $s1, $v0 -/* 04ED00 7F01A1D0 27A40150 */ addiu $a0, $sp, 0x150 -/* 04ED04 7F01A1D4 27A50154 */ addiu $a1, $sp, 0x154 -/* 04ED08 7F01A1D8 00403025 */ move $a2, $v0 -/* 04ED0C 7F01A1DC 8E870000 */ lw $a3, ($s4) -/* 04ED10 7F01A1E0 AFA00014 */ sw $zero, 0x14($sp) -/* 04ED14 7F01A1E4 0FC2BA63 */ jal textMeasure -/* 04ED18 7F01A1E8 AFAF0010 */ sw $t7, 0x10($sp) -/* 04ED1C 7F01A1EC 8FA20154 */ lw $v0, 0x154($sp) -/* 04ED20 7F01A1F0 8FAB0150 */ lw $t3, 0x150($sp) -/* 04ED24 7F01A1F4 2418013B */ li $t8, 315 -/* 04ED28 7F01A1F8 04410003 */ bgez $v0, .L7F01A208 -/* 04ED2C 7F01A1FC 00026043 */ sra $t4, $v0, 1 -/* 04ED30 7F01A200 24410001 */ addiu $at, $v0, 1 -/* 04ED34 7F01A204 00016043 */ sra $t4, $at, 1 -.L7F01A208: -/* 04ED38 7F01A208 030C2823 */ subu $a1, $t8, $t4 -/* 04ED3C 7F01A20C 24190098 */ li $t9, 152 -/* 04ED40 7F01A210 00A23821 */ addu $a3, $a1, $v0 -/* 04ED44 7F01A214 256E0099 */ addiu $t6, $t3, 0x99 -/* 04ED48 7F01A218 AFB90158 */ sw $t9, 0x158($sp) -/* 04ED4C 7F01A21C AFAE0010 */ sw $t6, 0x10($sp) -/* 04ED50 7F01A220 24E70001 */ addiu $a3, $a3, 1 -/* 04ED54 7F01A224 AFA5015C */ sw $a1, 0x15c($sp) -/* 04ED58 7F01A228 02602025 */ move $a0, $s3 -/* 04ED5C 7F01A22C 24060098 */ li $a2, 152 -/* 04ED60 7F01A230 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 04ED64 7F01A234 AFA00014 */ sw $zero, 0x14($sp) -/* 04ED68 7F01A238 0C001107 */ jal viGetX -/* 04ED6C 7F01A23C 00409825 */ move $s3, $v0 -/* 04ED70 7F01A240 00028400 */ sll $s0, $v0, 0x10 -/* 04ED74 7F01A244 00106C03 */ sra $t5, $s0, 0x10 -/* 04ED78 7F01A248 0C00110B */ jal viGetY -/* 04ED7C 7F01A24C 01A08025 */ move $s0, $t5 -/* 04ED80 7F01A250 3C188004 */ lui $t8, %hi(ptrFontZurichBold) -/* 04ED84 7F01A254 8F180EB4 */ lw $t8, %lo(ptrFontZurichBold)($t8) -/* 04ED88 7F01A258 8E8F0000 */ lw $t7, ($s4) -/* 04ED8C 7F01A25C 02602025 */ move $a0, $s3 -/* 04ED90 7F01A260 27A5015C */ addiu $a1, $sp, 0x15c -/* 04ED94 7F01A264 27A60158 */ addiu $a2, $sp, 0x158 -/* 04ED98 7F01A268 02203825 */ move $a3, $s1 -/* 04ED9C 7F01A26C AFB20018 */ sw $s2, 0x18($sp) -/* 04EDA0 7F01A270 AFB0001C */ sw $s0, 0x1c($sp) -/* 04EDA4 7F01A274 AFA20020 */ sw $v0, 0x20($sp) -/* 04EDA8 7F01A278 AFA00024 */ sw $zero, 0x24($sp) -/* 04EDAC 7F01A27C AFA00028 */ sw $zero, 0x28($sp) -/* 04EDB0 7F01A280 AFB80014 */ sw $t8, 0x14($sp) -/* 04EDB4 7F01A284 0FC2B6AF */ jal textRender -/* 04EDB8 7F01A288 AFAF0010 */ sw $t7, 0x10($sp) -/* 04EDBC 7F01A28C 3C0C8003 */ lui $t4, %hi(intro_character_index) -/* 04EDC0 7F01A290 8D8CB5E8 */ lw $t4, %lo(intro_character_index)($t4) -/* 04EDC4 7F01A294 3C048003 */ lui $a0, %hi(intro_char_table+12) -/* 04EDC8 7F01A298 00409825 */ move $s3, $v0 -/* 04EDCC 7F01A29C 000CC880 */ sll $t9, $t4, 2 -/* 04EDD0 7F01A2A0 032CC821 */ addu $t9, $t9, $t4 -/* 04EDD4 7F01A2A4 0019C880 */ sll $t9, $t9, 2 -/* 04EDD8 7F01A2A8 00992021 */ addu $a0, $a0, $t9 -/* 04EDDC 7F01A2AC 0FC30776 */ jal langGet -/* 04EDE0 7F01A2B0 9484B60C */ lhu $a0, %lo(intro_char_table+12)($a0) -/* 04EDE4 7F01A2B4 3C0B8004 */ lui $t3, %hi(ptrFontZurichBold) -/* 04EDE8 7F01A2B8 8D6B0EB4 */ lw $t3, %lo(ptrFontZurichBold)($t3) -/* 04EDEC 7F01A2BC 00408825 */ move $s1, $v0 -/* 04EDF0 7F01A2C0 27A40150 */ addiu $a0, $sp, 0x150 -/* 04EDF4 7F01A2C4 27A50154 */ addiu $a1, $sp, 0x154 -/* 04EDF8 7F01A2C8 00403025 */ move $a2, $v0 -/* 04EDFC 7F01A2CC 8E870000 */ lw $a3, ($s4) -/* 04EE00 7F01A2D0 AFA00014 */ sw $zero, 0x14($sp) -/* 04EE04 7F01A2D4 0FC2BA63 */ jal textMeasure -/* 04EE08 7F01A2D8 AFAB0010 */ sw $t3, 0x10($sp) -/* 04EE0C 7F01A2DC 8FA20154 */ lw $v0, 0x154($sp) -/* 04EE10 7F01A2E0 8FB80150 */ lw $t8, 0x150($sp) -/* 04EE14 7F01A2E4 240D013B */ li $t5, 315 -/* 04EE18 7F01A2E8 04410003 */ bgez $v0, .L7F01A2F8 -/* 04EE1C 7F01A2EC 00027043 */ sra $t6, $v0, 1 -/* 04EE20 7F01A2F0 24410001 */ addiu $at, $v0, 1 -/* 04EE24 7F01A2F4 00017043 */ sra $t6, $at, 1 -.L7F01A2F8: -/* 04EE28 7F01A2F8 01AE2823 */ subu $a1, $t5, $t6 -/* 04EE2C 7F01A2FC 240F00AE */ li $t7, 174 -/* 04EE30 7F01A300 00A23821 */ addu $a3, $a1, $v0 -/* 04EE34 7F01A304 270C00AF */ addiu $t4, $t8, 0xaf -/* 04EE38 7F01A308 AFAF0158 */ sw $t7, 0x158($sp) -/* 04EE3C 7F01A30C AFAC0010 */ sw $t4, 0x10($sp) -/* 04EE40 7F01A310 24E70001 */ addiu $a3, $a3, 1 -/* 04EE44 7F01A314 AFA5015C */ sw $a1, 0x15c($sp) -/* 04EE48 7F01A318 02602025 */ move $a0, $s3 -/* 04EE4C 7F01A31C 240600AE */ li $a2, 174 -/* 04EE50 7F01A320 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 04EE54 7F01A324 AFA00014 */ sw $zero, 0x14($sp) -/* 04EE58 7F01A328 0C001107 */ jal viGetX -/* 04EE5C 7F01A32C 00409825 */ move $s3, $v0 -/* 04EE60 7F01A330 00028400 */ sll $s0, $v0, 0x10 -/* 04EE64 7F01A334 0010CC03 */ sra $t9, $s0, 0x10 -/* 04EE68 7F01A338 0C00110B */ jal viGetY -/* 04EE6C 7F01A33C 03208025 */ move $s0, $t9 -/* 04EE70 7F01A340 3C0D8004 */ lui $t5, %hi(ptrFontZurichBold) -/* 04EE74 7F01A344 8DAD0EB4 */ lw $t5, %lo(ptrFontZurichBold)($t5) -/* 04EE78 7F01A348 8E8B0000 */ lw $t3, ($s4) -/* 04EE7C 7F01A34C 02602025 */ move $a0, $s3 -/* 04EE80 7F01A350 27A5015C */ addiu $a1, $sp, 0x15c -/* 04EE84 7F01A354 27A60158 */ addiu $a2, $sp, 0x158 -/* 04EE88 7F01A358 02203825 */ move $a3, $s1 -/* 04EE8C 7F01A35C AFB20018 */ sw $s2, 0x18($sp) -/* 04EE90 7F01A360 AFB0001C */ sw $s0, 0x1c($sp) -/* 04EE94 7F01A364 AFA20020 */ sw $v0, 0x20($sp) -/* 04EE98 7F01A368 AFA00024 */ sw $zero, 0x24($sp) -/* 04EE9C 7F01A36C AFA00028 */ sw $zero, 0x28($sp) -/* 04EEA0 7F01A370 AFAD0014 */ sw $t5, 0x14($sp) -/* 04EEA4 7F01A374 0FC2B6AF */ jal textRender -/* 04EEA8 7F01A378 AFAB0010 */ sw $t3, 0x10($sp) -/* 04EEAC 7F01A37C 8FBF004C */ lw $ra, 0x4c($sp) -/* 04EEB0 7F01A380 8FB00038 */ lw $s0, 0x38($sp) -/* 04EEB4 7F01A384 8FB1003C */ lw $s1, 0x3c($sp) -/* 04EEB8 7F01A388 8FB20040 */ lw $s2, 0x40($sp) -/* 04EEBC 7F01A38C 8FB30044 */ lw $s3, 0x44($sp) -/* 04EEC0 7F01A390 8FB40048 */ lw $s4, 0x48($sp) -/* 04EEC4 7F01A394 03E00008 */ jr $ra -/* 04EEC8 7F01A398 27BD0250 */ addiu $sp, $sp, 0x250 -) -#endif - - - - -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80051B0C -.word 0x40C90FDB /*6.2831855;*/ -glabel D_80051B10 -.word 0x3E4CCCCD /*0.2;*/ -glabel D_80051B14 -.word 0x3E4CCCCD /*0.2;*/ -glabel D_80051B18 -.word 0x3E4CCCCD /*0.2;*/ -glabel D_80051B1C -.word 0x3E4CCCCD /*0.2;*/ -glabel D_80051B20 -.word 0x3D748800 /* 0.0597000122070312 */ -glabel D_80051B24 -.word 0x3D748800 /* 0.0597000122070312 */ -glabel D_80051B28 -.word 0x3F70B780 /* 0.940299987792969 */ -glabel D_80051B2C -.word 0x3F70B780 /* 0.940299987792969 */ -glabel D_80051B30 -.word 0x3F70B780 /* 0.940299987792969 */ -glabel D_80051B34 -.word 0x3D748800 /* 0.0597000122070312 */ -glabel D_80051B38 -.word 0x40490FDB /*3.1415927;*/ - -.text -glabel constructor_menu18_displaycast -/* 04BD94 7F0193A4 27BDFDB0 */ addiu $sp, $sp, -0x250 -/* 04BD98 7F0193A8 3C0E8002 */ lui $t6, %hi(D_8002BA78) # $t6, 0x8002 -/* 04BD9C 7F0193AC AFBF004C */ sw $ra, 0x4c($sp) -/* 04BDA0 7F0193B0 AFB40048 */ sw $s4, 0x48($sp) -/* 04BDA4 7F0193B4 AFB30044 */ sw $s3, 0x44($sp) -/* 04BDA8 7F0193B8 AFB20040 */ sw $s2, 0x40($sp) -/* 04BDAC 7F0193BC AFB1003C */ sw $s1, 0x3c($sp) -/* 04BDB0 7F0193C0 AFB00038 */ sw $s0, 0x38($sp) -/* 04BDB4 7F0193C4 25CE6FC8 */ addiu $t6, %lo(D_8002BA78) # addiu $t6, $t6, 0x6fc8 -/* 04BDB8 7F0193C8 8DC10000 */ lw $at, ($t6) -/* 04BDBC 7F0193CC 27AF0244 */ addiu $t7, $sp, 0x244 -/* 04BDC0 7F0193D0 8DCC0004 */ lw $t4, 4($t6) -/* 04BDC4 7F0193D4 ADE10000 */ sw $at, ($t7) -/* 04BDC8 7F0193D8 8DC10008 */ lw $at, 8($t6) -/* 04BDCC 7F0193DC 3C0D8002 */ lui $t5, %hi(D_8002BA84) # $t5, 0x8002 -/* 04BDD0 7F0193E0 25AD6FD4 */ addiu $t5, %lo(D_8002BA84) # addiu $t5, $t5, 0x6fd4 -/* 04BDD4 7F0193E4 ADEC0004 */ sw $t4, 4($t7) -/* 04BDD8 7F0193E8 ADE10008 */ sw $at, 8($t7) -/* 04BDDC 7F0193EC 8DA10000 */ lw $at, ($t5) -/* 04BDE0 7F0193F0 27B90238 */ addiu $t9, $sp, 0x238 -/* 04BDE4 7F0193F4 8DAF0004 */ lw $t7, 4($t5) -/* 04BDE8 7F0193F8 AF210000 */ sw $at, ($t9) -/* 04BDEC 7F0193FC 8DA10008 */ lw $at, 8($t5) -/* 04BDF0 7F019400 3C0C8002 */ lui $t4, %hi(D_8002BA90) # $t4, 0x8002 -/* 04BDF4 7F019404 258C6FE0 */ addiu $t4, %lo(D_8002BA90) # addiu $t4, $t4, 0x6fe0 -/* 04BDF8 7F019408 AF2F0004 */ sw $t7, 4($t9) -/* 04BDFC 7F01940C AF210008 */ sw $at, 8($t9) -/* 04BE00 7F019410 8D810000 */ lw $at, ($t4) -/* 04BE04 7F019414 27AE022C */ addiu $t6, $sp, 0x22c -/* 04BE08 7F019418 8D990004 */ lw $t9, 4($t4) -/* 04BE0C 7F01941C ADC10000 */ sw $at, ($t6) -/* 04BE10 7F019420 8D810008 */ lw $at, 8($t4) -/* 04BE14 7F019424 3C0F8002 */ lui $t7, %hi(D_8002BA9C) # $t7, 0x8002 -/* 04BE18 7F019428 25EF6FEC */ addiu $t7, %lo(D_8002BA9C) # addiu $t7, $t7, 0x6fec -/* 04BE1C 7F01942C ADD90004 */ sw $t9, 4($t6) -/* 04BE20 7F019430 ADC10008 */ sw $at, 8($t6) -/* 04BE24 7F019434 00809825 */ move $s3, $a0 -/* 04BE28 7F019438 25EE003C */ addiu $t6, $t7, 0x3c -/* 04BE2C 7F01943C 27AD01A8 */ addiu $t5, $sp, 0x1a8 -.L7F019440: -/* 04BE30 7F019440 8DE10000 */ lw $at, ($t7) -/* 04BE34 7F019444 25EF000C */ addiu $t7, $t7, 0xc -/* 04BE38 7F019448 25AD000C */ addiu $t5, $t5, 0xc -/* 04BE3C 7F01944C ADA1FFF4 */ sw $at, -0xc($t5) -/* 04BE40 7F019450 8DE1FFF8 */ lw $at, -8($t7) -/* 04BE44 7F019454 ADA1FFF8 */ sw $at, -8($t5) -/* 04BE48 7F019458 8DE1FFFC */ lw $at, -4($t7) -/* 04BE4C 7F01945C 15EEFFF8 */ bne $t7, $t6, .L7F019440 -/* 04BE50 7F019460 ADA1FFFC */ sw $at, -4($t5) -/* 04BE54 7F019464 8DE10000 */ lw $at, ($t7) -/* 04BE58 7F019468 3C028002 */ lui $v0, %hi(g_MenuTimer) # $v0, 0x8002 -/* 04BE5C 7F01946C 3C198002 */ lui $t9, %hi(D_8002BADC) # $t9, 0x8002 -/* 04BE60 7F019470 ADA10000 */ sw $at, ($t5) -/* 04BE64 7F019474 8C425E1C */ lw $v0, %lo(g_MenuTimer)($v0) -/* 04BE68 7F019478 3C014316 */ li $at, 0x43160000 # 150.000000 -/* 04BE6C 7F01947C 44819000 */ mtc1 $at, $f18 -/* 04BE70 7F019480 44827000 */ mtc1 $v0, $f14 -/* 04BE74 7F019484 2739702C */ addiu $t9, %lo(D_8002BADC) # addiu $t9, $t9, 0x702c -/* 04BE78 7F019488 8F210000 */ lw $at, ($t9) -/* 04BE7C 7F01948C 46807020 */ cvt.s.w $f0, $f14 -/* 04BE80 7F019490 8F2E0004 */ lw $t6, 4($t9) -/* 04BE84 7F019494 27AC0134 */ addiu $t4, $sp, 0x134 -/* 04BE88 7F019498 AD810000 */ sw $at, ($t4) -/* 04BE8C 7F01949C 8F210008 */ lw $at, 8($t9) -/* 04BE90 7F0194A0 AD8E0004 */ sw $t6, 4($t4) -/* 04BE94 7F0194A4 46120403 */ div.s $f16, $f0, $f18 -/* 04BE98 7F0194A8 04400004 */ bltz $v0, .L7F0194BC -/* 04BE9C 7F0194AC AD810008 */ sw $at, 8($t4) -/* 04BEA0 7F0194B0 28410096 */ slti $at, $v0, 0x96 -/* 04BEA4 7F0194B4 54200005 */ bnezl $at, .L7F0194CC -/* 04BEA8 7F0194B8 28410019 */ slti $at, $v0, 0x19 -.L7F0194BC: -/* 04BEAC 7F0194BC 44802000 */ mtc1 $zero, $f4 -/* 04BEB0 7F0194C0 10000018 */ b .L7F019524 -/* 04BEB4 7F0194C4 E7A40144 */ swc1 $f4, 0x144($sp) -/* 04BEB8 7F0194C8 28410019 */ slti $at, $v0, 0x19 -.L7F0194CC: -/* 04BEBC 7F0194CC 10200006 */ beqz $at, .L7F0194E8 -/* 04BEC0 7F0194D0 3C0141C8 */ li $at, 0x41C80000 # 25.000000 -/* 04BEC4 7F0194D4 44815000 */ mtc1 $at, $f10 -/* 04BEC8 7F0194D8 00000000 */ nop -/* 04BECC 7F0194DC 460A0203 */ div.s $f8, $f0, $f10 -/* 04BED0 7F0194E0 10000010 */ b .L7F019524 -/* 04BED4 7F0194E4 E7A80144 */ swc1 $f8, 0x144($sp) -.L7F0194E8: -/* 04BED8 7F0194E8 2841007E */ slti $at, $v0, 0x7e -/* 04BEDC 7F0194EC 14200009 */ bnez $at, .L7F019514 -/* 04BEE0 7F0194F0 240F0096 */ li $t7, 150 -/* 04BEE4 7F0194F4 01E26823 */ subu $t5, $t7, $v0 -/* 04BEE8 7F0194F8 448D3000 */ mtc1 $t5, $f6 -/* 04BEEC 7F0194FC 3C0141C8 */ li $at, 0x41C80000 # 25.000000 -/* 04BEF0 7F019500 44815000 */ mtc1 $at, $f10 -/* 04BEF4 7F019504 46803120 */ cvt.s.w $f4, $f6 -/* 04BEF8 7F019508 460A2203 */ div.s $f8, $f4, $f10 -/* 04BEFC 7F01950C 10000005 */ b .L7F019524 -/* 04BF00 7F019510 E7A80144 */ swc1 $f8, 0x144($sp) -.L7F019514: -/* 04BF04 7F019514 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 04BF08 7F019518 44813000 */ mtc1 $at, $f6 -/* 04BF0C 7F01951C 00000000 */ nop -/* 04BF10 7F019520 E7A60144 */ swc1 $f6, 0x144($sp) -.L7F019524: -/* 04BF14 7F019524 02602025 */ move $a0, $s3 -/* 04BF18 7F019528 00002825 */ move $a1, $zero -/* 04BF1C 7F01952C 00003025 */ move $a2, $zero -/* 04BF20 7F019530 00003825 */ move $a3, $zero -/* 04BF24 7F019534 0C001048 */ jal viSetFillColor -/* 04BF28 7F019538 E7B00148 */ swc1 $f16, 0x148($sp) -/* 04BF2C 7F01953C 0C000E52 */ jal viFillScreen -/* 04BF30 7F019540 00402025 */ move $a0, $v0 -/* 04BF34 7F019544 3C018006 */ lui $at, %hi(flt_CODE_bss_800695A4) # $at, 0x8006 -/* 04BF38 7F019548 C42084E4 */ lwc1 $f0, %lo(flt_CODE_bss_800695A4)($at) -/* 04BF3C 7F01954C 3C018006 */ lui $at, %hi(flt_CODE_bss_800695A8) # $at, 0x8006 -/* 04BF40 7F019550 C42484E8 */ lwc1 $f4, %lo(flt_CODE_bss_800695A8)($at) -/* 04BF44 7F019554 C7B00148 */ lwc1 $f16, 0x148($sp) -/* 04BF48 7F019558 3C118006 */ lui $s1, %hi(flt_CODE_bss_800695A0) # $s1, 0x8006 -/* 04BF4C 7F01955C 46002281 */ sub.s $f10, $f4, $f0 -/* 04BF50 7F019560 263184E0 */ addiu $s1, %lo(flt_CODE_bss_800695A0) # addiu $s1, $s1, -0x7b20 -/* 04BF54 7F019564 3C018006 */ lui $at, %hi(flt_CODE_bss_800695B0) # $at, 0x8006 -/* 04BF58 7F019568 3C108006 */ lui $s0, %hi(flt_CODE_bss_800695AC) # $s0, 0x8006 -/* 04BF5C 7F01956C 46105202 */ mul.s $f8, $f10, $f16 -/* 04BF60 7F019570 261084EC */ addiu $s0, %lo(flt_CODE_bss_800695AC) # addiu $s0, $s0, -0x7b14 -/* 04BF64 7F019574 3C128006 */ lui $s2, %hi(flt_CODE_bss_800695B8) # $s2, 0x8006 -/* 04BF68 7F019578 265284F8 */ addiu $s2, %lo(flt_CODE_bss_800695B8) # addiu $s2, $s2, -0x7b08 -/* 04BF6C 7F01957C 00409825 */ move $s3, $v0 -/* 04BF70 7F019580 46004180 */ add.s $f6, $f8, $f0 -/* 04BF74 7F019584 E6260000 */ swc1 $f6, ($s1) -/* 04BF78 7F019588 C42284F0 */ lwc1 $f2, %lo(flt_CODE_bss_800695B0)($at) -/* 04BF7C 7F01958C 3C018006 */ lui $at, %hi(flt_CODE_bss_800695B4) # $at, 0x8006 -/* 04BF80 7F019590 C42484F4 */ lwc1 $f4, %lo(flt_CODE_bss_800695B4)($at) -/* 04BF84 7F019594 3C018006 */ lui $at, %hi(flt_CODE_bss_800695BC) # $at, 0x8006 -/* 04BF88 7F019598 46022281 */ sub.s $f10, $f4, $f2 -/* 04BF8C 7F01959C 46105202 */ mul.s $f8, $f10, $f16 -/* 04BF90 7F0195A0 46024180 */ add.s $f6, $f8, $f2 -/* 04BF94 7F0195A4 E6060000 */ swc1 $f6, ($s0) -/* 04BF98 7F0195A8 C42C84FC */ lwc1 $f12, %lo(flt_CODE_bss_800695BC)($at) -/* 04BF9C 7F0195AC 3C018006 */ lui $at, %hi(flt_CODE_bss_800695C0) # $at, 0x8006 -/* 04BFA0 7F0195B0 C4248500 */ lwc1 $f4, %lo(flt_CODE_bss_800695C0)($at) -/* 04BFA4 7F0195B4 C60E0000 */ lwc1 $f14, ($s0) -/* 04BFA8 7F0195B8 460C2281 */ sub.s $f10, $f4, $f12 -/* 04BFAC 7F0195BC 44802000 */ mtc1 $zero, $f4 -/* 04BFB0 7F0195C0 46105202 */ mul.s $f8, $f10, $f16 -/* 04BFB4 7F0195C4 4604703C */ c.lt.s $f14, $f4 -/* 04BFB8 7F0195C8 460C4180 */ add.s $f6, $f8, $f12 -/* 04BFBC 7F0195CC 45000006 */ bc1f .L7F0195E8 -/* 04BFC0 7F0195D0 E6460000 */ swc1 $f6, ($s2) -/* 04BFC4 7F0195D4 3C018004 */ lui $at, %hi(D_80051B0C) # $at, 0x8004 -/* 04BFC8 7F0195D8 C42A7C34 */ lwc1 $f10, %lo(D_80051B0C)($at) -/* 04BFCC 7F0195DC 460A7200 */ add.s $f8, $f14, $f10 -/* 04BFD0 7F0195E0 E6080000 */ swc1 $f8, ($s0) -/* 04BFD4 7F0195E4 C60E0000 */ lwc1 $f14, ($s0) -.L7F0195E8: -/* 04BFD8 7F0195E8 0FC1606B */ jal sinf -/* 04BFDC 7F0195EC 46007306 */ mov.s $f12, $f14 -/* 04BFE0 7F0195F0 E7A00078 */ swc1 $f0, 0x78($sp) -/* 04BFE4 7F0195F4 0FC16068 */ jal cosf -/* 04BFE8 7F0195F8 C60C0000 */ lwc1 $f12, ($s0) -/* 04BFEC 7F0195FC 3C018004 */ lui $at, %hi(D_80051B10) # $at, 0x8004 -/* 04BFF0 7F019600 C4267C38 */ lwc1 $f6, %lo(D_80051B10)($at) -/* 04BFF4 7F019604 C6220000 */ lwc1 $f2, ($s1) -/* 04BFF8 7F019608 C7A80078 */ lwc1 $f8, 0x78($sp) -/* 04BFFC 7F01960C 46060102 */ mul.s $f4, $f0, $f6 -/* 04C000 7F019610 C60C0000 */ lwc1 $f12, ($s0) -/* 04C004 7F019614 46022282 */ mul.s $f10, $f4, $f2 -/* 04C008 7F019618 00000000 */ nop -/* 04C00C 7F01961C 46081182 */ mul.s $f6, $f2, $f8 -/* 04C010 7F019620 C6480000 */ lwc1 $f8, ($s2) -/* 04C014 7F019624 E7A80248 */ swc1 $f8, 0x248($sp) -/* 04C018 7F019628 46065100 */ add.s $f4, $f10, $f6 -/* 04C01C 7F01962C 0FC16068 */ jal cosf -/* 04C020 7F019630 E7A40244 */ swc1 $f4, 0x244($sp) -/* 04C024 7F019634 E7A00078 */ swc1 $f0, 0x78($sp) -/* 04C028 7F019638 0FC1606B */ jal sinf -/* 04C02C 7F01963C C60C0000 */ lwc1 $f12, ($s0) -/* 04C030 7F019640 C6220000 */ lwc1 $f2, ($s1) -/* 04C034 7F019644 C7AA0078 */ lwc1 $f10, 0x78($sp) -/* 04C038 7F019648 3C018004 */ lui $at, %hi(D_80051B14) # $at, 0x8004 -/* 04C03C 7F01964C C4247C3C */ lwc1 $f4, %lo(D_80051B14)($at) -/* 04C040 7F019650 460A1182 */ mul.s $f6, $f2, $f10 -/* 04C044 7F019654 C60C0000 */ lwc1 $f12, ($s0) -/* 04C048 7F019658 46040202 */ mul.s $f8, $f0, $f4 -/* 04C04C 7F01965C 00000000 */ nop -/* 04C050 7F019660 46024282 */ mul.s $f10, $f8, $f2 -/* 04C054 7F019664 460A3101 */ sub.s $f4, $f6, $f10 -/* 04C058 7F019668 0FC16068 */ jal cosf -/* 04C05C 7F01966C E7A4024C */ swc1 $f4, 0x24c($sp) -/* 04C060 7F019670 3C018004 */ lui $at, %hi(D_80051B18) # $at, 0x8004 -/* 04C064 7F019674 C4287C40 */ lwc1 $f8, %lo(D_80051B18)($at) -/* 04C068 7F019678 C62A0000 */ lwc1 $f10, ($s1) -/* 04C06C 7F01967C C60C0000 */ lwc1 $f12, ($s0) -/* 04C070 7F019680 46080182 */ mul.s $f6, $f0, $f8 -/* 04C074 7F019684 C7A80238 */ lwc1 $f8, 0x238($sp) -/* 04C078 7F019688 460A3102 */ mul.s $f4, $f6, $f10 -/* 04C07C 7F01968C 46044180 */ add.s $f6, $f8, $f4 -/* 04C080 7F019690 0FC1606B */ jal sinf -/* 04C084 7F019694 E7A60238 */ swc1 $f6, 0x238($sp) -/* 04C088 7F019698 3C018004 */ lui $at, %hi(D_80051B1C) # $at, 0x8004 -/* 04C08C 7F01969C C4287C44 */ lwc1 $f8, %lo(D_80051B1C)($at) -/* 04C090 7F0196A0 46000287 */ neg.s $f10, $f0 -/* 04C094 7F0196A4 C6260000 */ lwc1 $f6, ($s1) -/* 04C098 7F0196A8 46085102 */ mul.s $f4, $f10, $f8 -/* 04C09C 7F0196AC C7A80240 */ lwc1 $f8, 0x240($sp) -/* 04C0A0 7F0196B0 24040002 */ li $a0, 2 -/* 04C0A4 7F0196B4 46062282 */ mul.s $f10, $f4, $f6 -/* 04C0A8 7F0196B8 460A4100 */ add.s $f4, $f8, $f10 -/* 04C0AC 7F0196BC 0FC2F2AA */ jal dynAllocate7F0BD6F8 -/* 04C0B0 7F0196C0 E7A40240 */ swc1 $f4, 0x240($sp) -/* 04C0B4 7F0196C4 44800000 */ mtc1 $zero, $f0 -/* 04C0B8 7F0196C8 3C01457A */ li $at, 0x457A0000 # 4000.000000 -/* 04C0BC 7F0196CC 44813000 */ mtc1 $at, $f6 -/* 04C0C0 7F0196D0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 04C0C4 7F0196D4 44814000 */ mtc1 $at, $f8 -/* 04C0C8 7F0196D8 44060000 */ mfc1 $a2, $f0 -/* 04C0CC 7F0196DC 44070000 */ mfc1 $a3, $f0 -/* 04C0D0 7F0196E0 00408025 */ move $s0, $v0 -/* 04C0D4 7F0196E4 27A400E0 */ addiu $a0, $sp, 0xe0 -/* 04C0D8 7F0196E8 00402825 */ move $a1, $v0 -/* 04C0DC 7F0196EC E7A00014 */ swc1 $f0, 0x14($sp) -/* 04C0E0 7F0196F0 E7A00018 */ swc1 $f0, 0x18($sp) -/* 04C0E4 7F0196F4 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 04C0E8 7F0196F8 E7A00020 */ swc1 $f0, 0x20($sp) -/* 04C0EC 7F0196FC E7A00028 */ swc1 $f0, 0x28($sp) -/* 04C0F0 7F019700 E7A60010 */ swc1 $f6, 0x10($sp) -/* 04C0F4 7F019704 0C005A84 */ jal guLookAtReflect -/* 04C0F8 7F019708 E7A80024 */ swc1 $f8, 0x24($sp) -/* 04C0FC 7F01970C 02601025 */ move $v0, $s3 -/* 04C100 7F019710 26730008 */ addiu $s3, $s3, 8 -/* 04C104 7F019714 3C0BBC00 */ lui $t3, (0xBC000002 >> 16) # lui $t3, 0xbc00 -/* 04C108 7F019718 3C188000 */ lui $t8, (0x80000040 >> 16) # lui $t8, 0x8000 -/* 04C10C 7F01971C 37180040 */ ori $t8, (0x80000040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 04C110 7F019720 356B0002 */ ori $t3, (0xBC000002 & 0xFFFF) # ori $t3, $t3, 2 -/* 04C114 7F019724 02601825 */ move $v1, $s3 -/* 04C118 7F019728 26730008 */ addiu $s3, $s3, 8 -/* 04C11C 7F01972C AC4B0000 */ sw $t3, ($v0) -/* 04C120 7F019730 AC580004 */ sw $t8, 4($v0) -/* 04C124 7F019734 3C0C0386 */ lui $t4, (0x03860010 >> 16) # lui $t4, 0x386 -/* 04C128 7F019738 3C198002 */ lui $t9, %hi(gelogolight + 0x8) # $t9, 0x8002 -/* 04C12C 7F01973C 27395EC8 */ addiu $t9, %lo(gelogolight + 0x8) # addiu $t9, $t9, 0x5ec8 -/* 04C130 7F019740 358C0010 */ ori $t4, (0x03860010 & 0xFFFF) # ori $t4, $t4, 0x10 -/* 04C134 7F019744 02602025 */ move $a0, $s3 -/* 04C138 7F019748 26730008 */ addiu $s3, $s3, 8 -/* 04C13C 7F01974C AC6C0000 */ sw $t4, ($v1) -/* 04C140 7F019750 AC790004 */ sw $t9, 4($v1) -/* 04C144 7F019754 3C0E0388 */ lui $t6, (0x03880010 >> 16) # lui $t6, 0x388 -/* 04C148 7F019758 3C0F8002 */ lui $t7, %hi(gelogolight) # $t7, 0x8002 -/* 04C14C 7F01975C 25EF5EC0 */ addiu $t7, %lo(gelogolight) # addiu $t7, $t7, 0x5ec0 -/* 04C150 7F019760 35CE0010 */ ori $t6, (0x03880010 & 0xFFFF) # ori $t6, $t6, 0x10 -/* 04C154 7F019764 02602825 */ move $a1, $s3 -/* 04C158 7F019768 AC8E0000 */ sw $t6, ($a0) -/* 04C15C 7F01976C AC8F0004 */ sw $t7, 4($a0) -/* 04C160 7F019770 3C0D0384 */ lui $t5, (0x03840010 >> 16) # lui $t5, 0x384 -/* 04C164 7F019774 35AD0010 */ ori $t5, (0x03840010 & 0xFFFF) # ori $t5, $t5, 0x10 -/* 04C168 7F019778 ACAD0000 */ sw $t5, ($a1) -/* 04C16C 7F01977C ACB00004 */ sw $s0, 4($a1) -/* 04C170 7F019780 26730008 */ addiu $s3, $s3, 8 -/* 04C174 7F019784 02603825 */ move $a3, $s3 -/* 04C178 7F019788 3C0B0382 */ lui $t3, (0x03820010 >> 16) # lui $t3, 0x382 -/* 04C17C 7F01978C 356B0010 */ ori $t3, (0x03820010 & 0xFFFF) # ori $t3, $t3, 0x10 -/* 04C180 7F019790 26180010 */ addiu $t8, $s0, 0x10 -/* 04C184 7F019794 3C148002 */ lui $s4, %hi(cast_model) # $s4, 0x8002 -/* 04C188 7F019798 26946B44 */ addiu $s4, %lo(cast_model) # addiu $s4, $s4, 0x6b44 -/* 04C18C 7F01979C ACF80004 */ sw $t8, 4($a3) -/* 04C190 7F0197A0 ACEB0000 */ sw $t3, ($a3) -/* 04C194 7F0197A4 3C058004 */ lui $a1, %hi(g_ClockTimer) # $a1, 0x8004 -/* 04C198 7F0197A8 26730008 */ addiu $s3, $s3, 8 -/* 04C19C 7F0197AC 8CA50FF4 */ lw $a1, %lo(g_ClockTimer)($a1) -/* 04C1A0 7F0197B0 8E840000 */ lw $a0, ($s4) -/* 04C1A4 7F0197B4 0FC1C323 */ jal modelTickAnimQuarterSpeed -/* 04C1A8 7F0197B8 24060001 */ li $a2, 1 -/* 04C1AC 7F0197BC 0FC1B2D0 */ jal modelSetDistanceDisabled -/* 04C1B0 7F0197C0 24040001 */ li $a0, 1 -/* 04C1B4 7F0197C4 0FC1D037 */ jal sub_GAME_7F073FC8 -/* 04C1B8 7F0197C8 00002025 */ move $a0, $zero -/* 04C1BC 7F0197CC 0FC1B6B8 */ jal subcalcpos -/* 04C1C0 7F0197D0 8E840000 */ lw $a0, ($s4) -/* 04C1C4 7F0197D4 3C078002 */ lui $a3, %hi(cast_model_weapon) # $a3, 0x8002 -/* 04C1C8 7F0197D8 8CE76B48 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04C1CC 7F0197DC 10E0000B */ beqz $a3, .L7F01980C -/* 04C1D0 7F0197E0 00000000 */ nop -/* 04C1D4 7F0197E4 8CEC0008 */ lw $t4, 8($a3) -/* 04C1D8 7F0197E8 8D990008 */ lw $t9, 8($t4) -/* 04C1DC 7F0197EC 8F250000 */ lw $a1, ($t9) -/* 04C1E0 7F0197F0 10A00006 */ beqz $a1, .L7F01980C -/* 04C1E4 7F0197F4 00000000 */ nop -/* 04C1E8 7F0197F8 0FC1B3A3 */ jal modelGetNodeRwData -/* 04C1EC 7F0197FC 00E02025 */ move $a0, $a3 -/* 04C1F0 7F019800 A4400000 */ sh $zero, ($v0) -/* 04C1F4 7F019804 3C078002 */ lui $a3, %hi(cast_model_weapon) # $a3, 0x8002 -/* 04C1F8 7F019808 8CE76B48 */ lw $a3, %lo(cast_model_weapon)($a3) -.L7F01980C: -/* 04C1FC 7F01980C 50E0000A */ beql $a3, $zero, .L7F019838 -/* 04C200 7F019810 8E8D0000 */ lw $t5, ($s4) -/* 04C204 7F019814 8CEE0008 */ lw $t6, 8($a3) -/* 04C208 7F019818 8DCF0008 */ lw $t7, 8($t6) -/* 04C20C 7F01981C 8DE50008 */ lw $a1, 8($t7) -/* 04C210 7F019820 50A00005 */ beql $a1, $zero, .L7F019838 -/* 04C214 7F019824 8E8D0000 */ lw $t5, ($s4) -/* 04C218 7F019828 0FC1B3A3 */ jal modelGetNodeRwData -/* 04C21C 7F01982C 00E02025 */ move $a0, $a3 -/* 04C220 7F019830 AC400000 */ sw $zero, ($v0) -/* 04C224 7F019834 8E8D0000 */ lw $t5, ($s4) -.L7F019838: -/* 04C228 7F019838 8DAB0008 */ lw $t3, 8($t5) -/* 04C22C 7F01983C 8564000E */ lh $a0, 0xe($t3) -/* 04C230 7F019840 0004C180 */ sll $t8, $a0, 6 -/* 04C234 7F019844 0FC2F2B1 */ jal dynAllocate -/* 04C238 7F019848 03002025 */ move $a0, $t8 -/* 04C23C 7F01984C 27B201E8 */ addiu $s2, $sp, 0x1e8 -/* 04C240 7F019850 AFA201B8 */ sw $v0, 0x1b8($sp) -/* 04C244 7F019854 0FC1611E */ jal matrix_4x4_set_identity -/* 04C248 7F019858 02402025 */ move $a0, $s2 -/* 04C24C 7F01985C AFB201A8 */ sw $s2, 0x1a8($sp) -/* 04C250 7F019860 27A401A8 */ addiu $a0, $sp, 0x1a8 -/* 04C254 7F019864 0FC1BD9C */ jal subcalcmatrices -/* 04C258 7F019868 8E850000 */ lw $a1, ($s4) -/* 04C25C 7F01986C 8E840000 */ lw $a0, ($s4) -/* 04C260 7F019870 0FC1B476 */ jal getsuboffset -/* 04C264 7F019874 27A50128 */ addiu $a1, $sp, 0x128 -/* 04C268 7F019878 3C068006 */ lui $a2, %hi(bss_800695E4) # $a2, 0x8006 -/* 04C26C 7F01987C 24C68524 */ addiu $a2, %lo(bss_800695E4) # addiu $a2, $a2, -0x7adc -/* 04C270 7F019880 8CC20000 */ lw $v0, ($a2) -/* 04C274 7F019884 00008825 */ move $s1, $zero -/* 04C278 7F019888 3C038004 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8004 -/* 04C27C 7F01988C 10400005 */ beqz $v0, .L7F0198A4 -/* 04C280 7F019890 00000000 */ nop -/* 04C284 7F019894 C7AA012C */ lwc1 $f10, 0x12c($sp) -/* 04C288 7F019898 3C108006 */ lui $s0, %hi(flt_CODE_bss_800695E8) # $s0, 0x8006 -/* 04C28C 7F01989C 26108528 */ addiu $s0, %lo(flt_CODE_bss_800695E8) # addiu $s0, $s0, -0x7ad8 -/* 04C290 7F0198A0 E60A0004 */ swc1 $f10, 4($s0) -.L7F0198A4: -/* 04C294 7F0198A4 3C108006 */ lui $s0, %hi(flt_CODE_bss_800695E8) # $s0, 0x8006 -/* 04C298 7F0198A8 26108528 */ addiu $s0, %lo(flt_CODE_bss_800695E8) # addiu $s0, $s0, -0x7ad8 -/* 04C29C 7F0198AC C6040000 */ lwc1 $f4, ($s0) -/* 04C2A0 7F0198B0 C7A60128 */ lwc1 $f6, 0x128($sp) -/* 04C2A4 7F0198B4 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 04C2A8 7F0198B8 E7A4006C */ swc1 $f4, 0x6c($sp) -/* 04C2AC 7F0198BC C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 04C2B0 7F0198C0 C6040004 */ lwc1 $f4, 4($s0) -/* 04C2B4 7F0198C4 C4321004 */ lwc1 $f18, %lo(g_GlobalTimerDelta)($at) -/* 04C2B8 7F0198C8 46083281 */ sub.s $f10, $f6, $f8 -/* 04C2BC 7F0198CC E7A40064 */ swc1 $f4, 0x64($sp) -/* 04C2C0 7F0198D0 C7A80064 */ lwc1 $f8, 0x64($sp) -/* 04C2C4 7F0198D4 C7A6012C */ lwc1 $f6, 0x12c($sp) -/* 04C2C8 7F0198D8 C6040008 */ lwc1 $f4, 8($s0) -/* 04C2CC 7F0198DC 46125083 */ div.s $f2, $f10, $f18 -/* 04C2D0 7F0198E0 E7A40060 */ swc1 $f4, 0x60($sp) -/* 04C2D4 7F0198E4 46083281 */ sub.s $f10, $f6, $f8 -/* 04C2D8 7F0198E8 C7A80060 */ lwc1 $f8, 0x60($sp) -/* 04C2DC 7F0198EC C7A60130 */ lwc1 $f6, 0x130($sp) -/* 04C2E0 7F0198F0 46125303 */ div.s $f12, $f10, $f18 -/* 04C2E4 7F0198F4 46083281 */ sub.s $f10, $f6, $f8 -/* 04C2E8 7F0198F8 1040000B */ beqz $v0, .L7F019928 -/* 04C2EC 7F0198FC 46125383 */ div.s $f14, $f10, $f18 -/* 04C2F0 7F019900 3C018004 */ lui $at, %hi(D_80051B20) # $at, 0x8004 -/* 04C2F4 7F019904 C4307C48 */ lwc1 $f16, %lo(D_80051B20)($at) -/* 04C2F8 7F019908 3C028006 */ lui $v0, %hi(flt_CODE_bss_80069608) # $v0, 0x8006 -/* 04C2FC 7F01990C 24428548 */ addiu $v0, %lo(flt_CODE_bss_80069608) # addiu $v0, $v0, -0x7ab8 -/* 04C300 7F019910 46101103 */ div.s $f4, $f2, $f16 -/* 04C304 7F019914 46106183 */ div.s $f6, $f12, $f16 -/* 04C308 7F019918 E4440000 */ swc1 $f4, ($v0) -/* 04C30C 7F01991C 46107203 */ div.s $f8, $f14, $f16 -/* 04C310 7F019920 E4460004 */ swc1 $f6, 4($v0) -/* 04C314 7F019924 E4480008 */ swc1 $f8, 8($v0) -.L7F019928: -/* 04C318 7F019928 8C630FF4 */ lw $v1, %lo(g_ClockTimer)($v1) -/* 04C31C 7F01992C 3C028006 */ lui $v0, %hi(flt_CODE_bss_80069608) # $v0, 0x8006 -/* 04C320 7F019930 3C018004 */ lui $at, %hi(D_80051B24) # $at, 0x8004 -/* 04C324 7F019934 C4307C4C */ lwc1 $f16, %lo(D_80051B24)($at) -/* 04C328 7F019938 24428548 */ addiu $v0, %lo(flt_CODE_bss_80069608) # addiu $v0, $v0, -0x7ab8 -/* 04C32C 7F01993C E7A20134 */ swc1 $f2, 0x134($sp) -/* 04C330 7F019940 E7AC0138 */ swc1 $f12, 0x138($sp) -/* 04C334 7F019944 18600025 */ blez $v1, .L7F0199DC -/* 04C338 7F019948 E7AE013C */ swc1 $f14, 0x13c($sp) -/* 04C33C 7F01994C 3C018004 */ lui $at, %hi(D_80051B28) # $at, 0x8004 -/* 04C340 7F019950 C4207C50 */ lwc1 $f0, %lo(D_80051B28)($at) -/* 04C344 7F019954 C4440000 */ lwc1 $f4, ($v0) -/* 04C348 7F019958 26310001 */ addiu $s1, $s1, 1 -/* 04C34C 7F01995C 0223082A */ slt $at, $s1, $v1 -/* 04C350 7F019960 46040282 */ mul.s $f10, $f0, $f4 -/* 04C354 7F019964 10200010 */ beqz $at, .L7F0199A8 -/* 04C358 7F019968 C4480004 */ lwc1 $f8, 4($v0) -.L7F01996C: -/* 04C35C 7F01996C 46080182 */ mul.s $f6, $f0, $f8 -/* 04C360 7F019970 460A1100 */ add.s $f4, $f2, $f10 -/* 04C364 7F019974 C4480008 */ lwc1 $f8, 8($v0) -/* 04C368 7F019978 26310001 */ addiu $s1, $s1, 1 -/* 04C36C 7F01997C 0223082A */ slt $at, $s1, $v1 -/* 04C370 7F019980 46080282 */ mul.s $f10, $f0, $f8 -/* 04C374 7F019984 E4440000 */ swc1 $f4, ($v0) -/* 04C378 7F019988 46066180 */ add.s $f6, $f12, $f6 -/* 04C37C 7F01998C C4440000 */ lwc1 $f4, ($v0) -/* 04C380 7F019990 E4460004 */ swc1 $f6, 4($v0) -/* 04C384 7F019994 460A7180 */ add.s $f6, $f14, $f10 -/* 04C388 7F019998 46040282 */ mul.s $f10, $f0, $f4 -/* 04C38C 7F01999C C4480004 */ lwc1 $f8, 4($v0) -/* 04C390 7F0199A0 1420FFF2 */ bnez $at, .L7F01996C -/* 04C394 7F0199A4 E4460008 */ swc1 $f6, 8($v0) -.L7F0199A8: -/* 04C398 7F0199A8 46080182 */ mul.s $f6, $f0, $f8 -/* 04C39C 7F0199AC C4480008 */ lwc1 $f8, 8($v0) -/* 04C3A0 7F0199B0 460A1100 */ add.s $f4, $f2, $f10 -/* 04C3A4 7F0199B4 46080282 */ mul.s $f10, $f0, $f8 -/* 04C3A8 7F0199B8 E4440000 */ swc1 $f4, ($v0) -/* 04C3AC 7F0199BC 46066180 */ add.s $f6, $f12, $f6 -/* 04C3B0 7F0199C0 E4460004 */ swc1 $f6, 4($v0) -/* 04C3B4 7F0199C4 460A7180 */ add.s $f6, $f14, $f10 -/* 04C3B8 7F0199C8 E4460008 */ swc1 $f6, 8($v0) -/* 04C3BC 7F0199CC E7AE013C */ swc1 $f14, 0x13c($sp) -/* 04C3C0 7F0199D0 E7AC0138 */ swc1 $f12, 0x138($sp) -/* 04C3C4 7F0199D4 E7A20134 */ swc1 $f2, 0x134($sp) -/* 04C3C8 7F0199D8 00008825 */ move $s1, $zero -.L7F0199DC: -/* 04C3CC 7F0199DC C4440000 */ lwc1 $f4, ($v0) -/* 04C3D0 7F0199E0 C4480004 */ lwc1 $f8, 4($v0) -/* 04C3D4 7F0199E4 3C038006 */ lui $v1, %hi(flt_CODE_bss_800695F8) # $v1, 0x8006 -/* 04C3D8 7F0199E8 46102182 */ mul.s $f6, $f4, $f16 -/* 04C3DC 7F0199EC C4440008 */ lwc1 $f4, 8($v0) -/* 04C3E0 7F0199F0 24638538 */ addiu $v1, %lo(flt_CODE_bss_800695F8) # addiu $v1, $v1, -0x7ac8 -/* 04C3E4 7F0199F4 46104282 */ mul.s $f10, $f8, $f16 -/* 04C3E8 7F0199F8 C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 04C3EC 7F0199FC 8E8C0000 */ lw $t4, ($s4) -/* 04C3F0 7F019A00 27A50134 */ addiu $a1, $sp, 0x134 -/* 04C3F4 7F019A04 E4660000 */ swc1 $f6, ($v1) -/* 04C3F8 7F019A08 46102182 */ mul.s $f6, $f4, $f16 -/* 04C3FC 7F019A0C E46A0004 */ swc1 $f10, 4($v1) -/* 04C400 7F019A10 C46A0000 */ lwc1 $f10, ($v1) -/* 04C404 7F019A14 46125102 */ mul.s $f4, $f10, $f18 -/* 04C408 7F019A18 E4660008 */ swc1 $f6, 8($v1) -/* 04C40C 7F019A1C C7AA0064 */ lwc1 $f10, 0x64($sp) -/* 04C410 7F019A20 46044180 */ add.s $f6, $f8, $f4 -/* 04C414 7F019A24 C4680004 */ lwc1 $f8, 4($v1) -/* 04C418 7F019A28 46124102 */ mul.s $f4, $f8, $f18 -/* 04C41C 7F019A2C E6060000 */ swc1 $f6, ($s0) -/* 04C420 7F019A30 C7A80060 */ lwc1 $f8, 0x60($sp) -/* 04C424 7F019A34 46045180 */ add.s $f6, $f10, $f4 -/* 04C428 7F019A38 C46A0008 */ lwc1 $f10, 8($v1) -/* 04C42C 7F019A3C 46125102 */ mul.s $f4, $f10, $f18 -/* 04C430 7F019A40 E6060004 */ swc1 $f6, 4($s0) -/* 04C434 7F019A44 46044180 */ add.s $f6, $f8, $f4 -/* 04C438 7F019A48 E6060008 */ swc1 $f6, 8($s0) -/* 04C43C 7F019A4C 0FC16247 */ jal mtx4TransformVecInPlace -/* 04C440 7F019A50 8D84000C */ lw $a0, 0xc($t4) -/* 04C444 7F019A54 C60A0004 */ lwc1 $f10, 4($s0) -/* 04C448 7F019A58 C6040008 */ lwc1 $f4, 8($s0) -/* 04C44C 7F019A5C 3C068006 */ lui $a2, %hi(bss_800695E4) # $a2, 0x8006 -/* 04C450 7F019A60 24C68524 */ addiu $a2, %lo(bss_800695E4) # addiu $a2, $a2, -0x7adc -/* 04C454 7F019A64 8CD90000 */ lw $t9, ($a2) -/* 04C458 7F019A68 3C018004 */ lui $at, %hi(D_80051B30) # $at, 0x8004 -/* 04C45C 7F019A6C E7AA0064 */ swc1 $f10, 0x64($sp) -/* 04C460 7F019A70 E7A40060 */ swc1 $f4, 0x60($sp) -/* 04C464 7F019A74 C7A20134 */ lwc1 $f2, 0x134($sp) -/* 04C468 7F019A78 C7AC0138 */ lwc1 $f12, 0x138($sp) -/* 04C46C 7F019A7C C7AE013C */ lwc1 $f14, 0x13c($sp) -/* 04C470 7F019A80 C6120000 */ lwc1 $f18, ($s0) -/* 04C474 7F019A84 C7A80064 */ lwc1 $f8, 0x64($sp) -/* 04C478 7F019A88 C7A60060 */ lwc1 $f6, 0x60($sp) -/* 04C47C 7F019A8C C4207C58 */ lwc1 $f0, %lo(D_80051B30)($at) -/* 04C480 7F019A90 3C018004 */ lui $at, %hi(D_80051B34) # $at, 0x8004 -/* 04C484 7F019A94 C4307C5C */ lwc1 $f16, %lo(D_80051B34)($at) -/* 04C488 7F019A98 46121081 */ sub.s $f2, $f2, $f18 -/* 04C48C 7F019A9C 46086301 */ sub.s $f12, $f12, $f8 -/* 04C490 7F019AA0 1320000A */ beqz $t9, .L7F019ACC -/* 04C494 7F019AA4 46067381 */ sub.s $f14, $f14, $f6 -/* 04C498 7F019AA8 46101283 */ div.s $f10, $f2, $f16 -/* 04C49C 7F019AAC 3C028006 */ lui $v0, %hi(flt_CODE_bss_800695D8) # $v0, 0x8006 -/* 04C4A0 7F019AB0 24428518 */ addiu $v0, %lo(flt_CODE_bss_800695D8) # addiu $v0, $v0, -0x7ae8 -/* 04C4A4 7F019AB4 ACC00000 */ sw $zero, ($a2) -/* 04C4A8 7F019AB8 46106203 */ div.s $f8, $f12, $f16 -/* 04C4AC 7F019ABC E44A0000 */ swc1 $f10, ($v0) -/* 04C4B0 7F019AC0 46107103 */ div.s $f4, $f14, $f16 -/* 04C4B4 7F019AC4 E4480004 */ swc1 $f8, 4($v0) -/* 04C4B8 7F019AC8 E4440008 */ swc1 $f4, 8($v0) -.L7F019ACC: -/* 04C4BC 7F019ACC 3C038004 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8004 -/* 04C4C0 7F019AD0 8C630FF4 */ lw $v1, %lo(g_ClockTimer)($v1) -/* 04C4C4 7F019AD4 3C028006 */ lui $v0, %hi(flt_CODE_bss_800695D8) # $v0, 0x8006 -/* 04C4C8 7F019AD8 24428518 */ addiu $v0, %lo(flt_CODE_bss_800695D8) # addiu $v0, $v0, -0x7ae8 -/* 04C4CC 7F019ADC 58600021 */ blezl $v1, .L7F019B64 -/* 04C4D0 7F019AE0 C44A0000 */ lwc1 $f10, ($v0) -/* 04C4D4 7F019AE4 C4440000 */ lwc1 $f4, ($v0) -/* 04C4D8 7F019AE8 26310001 */ addiu $s1, $s1, 1 -/* 04C4DC 7F019AEC 0223082A */ slt $at, $s1, $v1 -/* 04C4E0 7F019AF0 46040202 */ mul.s $f8, $f0, $f4 -/* 04C4E4 7F019AF4 10200010 */ beqz $at, .L7F019B38 -/* 04C4E8 7F019AF8 C44A0004 */ lwc1 $f10, 4($v0) -.L7F019AFC: -/* 04C4EC 7F019AFC 460A0182 */ mul.s $f6, $f0, $f10 -/* 04C4F0 7F019B00 46081100 */ add.s $f4, $f2, $f8 -/* 04C4F4 7F019B04 C44A0008 */ lwc1 $f10, 8($v0) -/* 04C4F8 7F019B08 26310001 */ addiu $s1, $s1, 1 -/* 04C4FC 7F019B0C 0223082A */ slt $at, $s1, $v1 -/* 04C500 7F019B10 460A0202 */ mul.s $f8, $f0, $f10 -/* 04C504 7F019B14 E4440000 */ swc1 $f4, ($v0) -/* 04C508 7F019B18 46066180 */ add.s $f6, $f12, $f6 -/* 04C50C 7F019B1C C4440000 */ lwc1 $f4, ($v0) -/* 04C510 7F019B20 E4460004 */ swc1 $f6, 4($v0) -/* 04C514 7F019B24 46087180 */ add.s $f6, $f14, $f8 -/* 04C518 7F019B28 46040202 */ mul.s $f8, $f0, $f4 -/* 04C51C 7F019B2C C44A0004 */ lwc1 $f10, 4($v0) -/* 04C520 7F019B30 1420FFF2 */ bnez $at, .L7F019AFC -/* 04C524 7F019B34 E4460008 */ swc1 $f6, 8($v0) -.L7F019B38: -/* 04C528 7F019B38 460A0182 */ mul.s $f6, $f0, $f10 -/* 04C52C 7F019B3C C44A0008 */ lwc1 $f10, 8($v0) -/* 04C530 7F019B40 46081100 */ add.s $f4, $f2, $f8 -/* 04C534 7F019B44 460A0202 */ mul.s $f8, $f0, $f10 -/* 04C538 7F019B48 E4440000 */ swc1 $f4, ($v0) -/* 04C53C 7F019B4C 46066180 */ add.s $f6, $f12, $f6 -/* 04C540 7F019B50 E4460004 */ swc1 $f6, 4($v0) -/* 04C544 7F019B54 46087180 */ add.s $f6, $f14, $f8 -/* 04C548 7F019B58 E4460008 */ swc1 $f6, 8($v0) -/* 04C54C 7F019B5C 00008825 */ move $s1, $zero -/* 04C550 7F019B60 C44A0000 */ lwc1 $f10, ($v0) -.L7F019B64: -/* 04C554 7F019B64 C4440004 */ lwc1 $f4, 4($v0) -/* 04C558 7F019B68 3C038006 */ lui $v1, %hi(flt_CODE_bss_800695C8) # $v1, 0x8006 -/* 04C55C 7F019B6C 46105202 */ mul.s $f8, $f10, $f16 -/* 04C560 7F019B70 C44A0008 */ lwc1 $f10, 8($v0) -/* 04C564 7F019B74 24638508 */ addiu $v1, %lo(flt_CODE_bss_800695C8) # addiu $v1, $v1, -0x7af8 -/* 04C568 7F019B78 46102182 */ mul.s $f6, $f4, $f16 -/* 04C56C 7F019B7C 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 04C570 7F019B80 C7A0023C */ lwc1 $f0, 0x23c($sp) -/* 04C574 7F019B84 02402025 */ move $a0, $s2 -/* 04C578 7F019B88 E4680000 */ swc1 $f8, ($v1) -/* 04C57C 7F019B8C 46105202 */ mul.s $f8, $f10, $f16 -/* 04C580 7F019B90 C4640000 */ lwc1 $f4, ($v1) -/* 04C584 7F019B94 E4660004 */ swc1 $f6, 4($v1) -/* 04C588 7F019B98 C46A0004 */ lwc1 $f10, 4($v1) -/* 04C58C 7F019B9C C7A60064 */ lwc1 $f6, 0x64($sp) -/* 04C590 7F019BA0 46049080 */ add.s $f2, $f18, $f4 -/* 04C594 7F019BA4 44812000 */ mtc1 $at, $f4 -/* 04C598 7F019BA8 E4680008 */ swc1 $f8, 8($v1) -/* 04C59C 7F019BAC 460A3200 */ add.s $f8, $f6, $f10 -/* 04C5A0 7F019BB0 C7AA0060 */ lwc1 $f10, 0x60($sp) -/* 04C5A4 7F019BB4 E7A60050 */ swc1 $f6, 0x50($sp) -/* 04C5A8 7F019BB8 3C014252 */ li $at, 0x42520000 # 52.500000 -/* 04C5AC 7F019BBC 46044301 */ sub.s $f12, $f8, $f4 -/* 04C5B0 7F019BC0 C4680008 */ lwc1 $f8, 8($v1) -/* 04C5B4 7F019BC4 C7A40238 */ lwc1 $f4, 0x238($sp) -/* 04C5B8 7F019BC8 E7AA0054 */ swc1 $f10, 0x54($sp) -/* 04C5BC 7F019BCC 46085380 */ add.s $f14, $f10, $f8 -/* 04C5C0 7F019BD0 C7AA0050 */ lwc1 $f10, 0x50($sp) -/* 04C5C4 7F019BD4 C7A60244 */ lwc1 $f6, 0x244($sp) -/* 04C5C8 7F019BD8 46022200 */ add.s $f8, $f4, $f2 -/* 04C5CC 7F019BDC C7A40240 */ lwc1 $f4, 0x240($sp) -/* 04C5D0 7F019BE0 E7AE013C */ swc1 $f14, 0x13c($sp) -/* 04C5D4 7F019BE4 46123180 */ add.s $f6, $f6, $f18 -/* 04C5D8 7F019BE8 E7A80238 */ swc1 $f8, 0x238($sp) -/* 04C5DC 7F019BEC E7A80050 */ swc1 $f8, 0x50($sp) -/* 04C5E0 7F019BF0 44814000 */ mtc1 $at, $f8 -/* 04C5E4 7F019BF4 460E2100 */ add.s $f4, $f4, $f14 -/* 04C5E8 7F019BF8 E7A60244 */ swc1 $f6, 0x244($sp) -/* 04C5EC 7F019BFC 44053000 */ mfc1 $a1, $f6 -/* 04C5F0 7F019C00 46085280 */ add.s $f10, $f10, $f8 -/* 04C5F4 7F019C04 C7A80248 */ lwc1 $f8, 0x248($sp) -/* 04C5F8 7F019C08 E7A40240 */ swc1 $f4, 0x240($sp) -/* 04C5FC 7F019C0C E7A40058 */ swc1 $f4, 0x58($sp) -/* 04C600 7F019C10 460A4200 */ add.s $f8, $f8, $f10 -/* 04C604 7F019C14 C7AA024C */ lwc1 $f10, 0x24c($sp) -/* 04C608 7F019C18 C7A40054 */ lwc1 $f4, 0x54($sp) -/* 04C60C 7F019C1C 460C0000 */ add.s $f0, $f0, $f12 -/* 04C610 7F019C20 E7A80248 */ swc1 $f8, 0x248($sp) -/* 04C614 7F019C24 44064000 */ mfc1 $a2, $f8 -/* 04C618 7F019C28 46045280 */ add.s $f10, $f10, $f4 -/* 04C61C 7F019C2C C7A40050 */ lwc1 $f4, 0x50($sp) -/* 04C620 7F019C30 C7A8022C */ lwc1 $f8, 0x22c($sp) -/* 04C624 7F019C34 C7A60058 */ lwc1 $f6, 0x58($sp) -/* 04C628 7F019C38 E7AA024C */ swc1 $f10, 0x24c($sp) -/* 04C62C 7F019C3C 44075000 */ mfc1 $a3, $f10 -/* 04C630 7F019C40 E7A40010 */ swc1 $f4, 0x10($sp) -/* 04C634 7F019C44 C7A40234 */ lwc1 $f4, 0x234($sp) -/* 04C638 7F019C48 C7AA0230 */ lwc1 $f10, 0x230($sp) -/* 04C63C 7F019C4C E7A00014 */ swc1 $f0, 0x14($sp) -/* 04C640 7F019C50 E7A0023C */ swc1 $f0, 0x23c($sp) -/* 04C644 7F019C54 E7AC0138 */ swc1 $f12, 0x138($sp) -/* 04C648 7F019C58 E7A20134 */ swc1 $f2, 0x134($sp) -/* 04C64C 7F019C5C E7A8001C */ swc1 $f8, 0x1c($sp) -/* 04C650 7F019C60 E7A60018 */ swc1 $f6, 0x18($sp) -/* 04C654 7F019C64 E7A40024 */ swc1 $f4, 0x24($sp) -/* 04C658 7F019C68 0FC166CF */ jal matrix_4x4_set_lookat_target -/* 04C65C 7F019C6C E7AA0020 */ swc1 $f10, 0x20($sp) -/* 04C660 7F019C70 8E8E0000 */ lw $t6, ($s4) -/* 04C664 7F019C74 AFB201A8 */ sw $s2, 0x1a8($sp) -/* 04C668 7F019C78 8DCF0008 */ lw $t7, 8($t6) -/* 04C66C 7F019C7C 85E4000E */ lh $a0, 0xe($t7) -/* 04C670 7F019C80 00046980 */ sll $t5, $a0, 6 -/* 04C674 7F019C84 0FC2F2B1 */ jal dynAllocate -/* 04C678 7F019C88 01A02025 */ move $a0, $t5 -/* 04C67C 7F019C8C AFA201B8 */ sw $v0, 0x1b8($sp) -/* 04C680 7F019C90 27A401A8 */ addiu $a0, $sp, 0x1a8 -/* 04C684 7F019C94 0FC1BD9C */ jal subcalcmatrices -/* 04C688 7F019C98 8E850000 */ lw $a1, ($s4) -/* 04C68C 7F019C9C 3C078002 */ lui $a3, %hi(cast_model_weapon) # $a3, 0x8002 -/* 04C690 7F019CA0 8CE76B48 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04C694 7F019CA4 50E00025 */ beql $a3, $zero, .L7F019D3C -/* 04C698 7F019CA8 24180007 */ li $t8, 7 -/* 04C69C 7F019CAC 8E840000 */ lw $a0, ($s4) -/* 04C6A0 7F019CB0 8CE5001C */ lw $a1, 0x1c($a3) -/* 04C6A4 7F019CB4 0FC1B366 */ jal modelFindNodeMtx -/* 04C6A8 7F019CB8 00003025 */ move $a2, $zero -/* 04C6AC 7F019CBC 8E980000 */ lw $t8, ($s4) -/* 04C6B0 7F019CC0 AFA201A8 */ sw $v0, 0x1a8($sp) -/* 04C6B4 7F019CC4 3C078002 */ lui $a3, %hi(cast_model_weapon) # $a3, 0x8002 -/* 04C6B8 7F019CC8 8F0C0008 */ lw $t4, 8($t8) -/* 04C6BC 7F019CCC 8CE76B48 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04C6C0 7F019CD0 27B20160 */ addiu $s2, $sp, 0x160 -/* 04C6C4 7F019CD4 8D990008 */ lw $t9, 8($t4) -/* 04C6C8 7F019CD8 8CEB001C */ lw $t3, 0x1c($a3) -/* 04C6CC 7F019CDC 02402825 */ move $a1, $s2 -/* 04C6D0 7F019CE0 8F2E0014 */ lw $t6, 0x14($t9) -/* 04C6D4 7F019CE4 3C018004 */ lui $at, %hi(D_80051B38) # $at, 0x8004 -/* 04C6D8 7F019CE8 556E000A */ bnel $t3, $t6, .L7F019D14 -/* 04C6DC 7F019CEC 8CEF0008 */ lw $t7, 8($a3) -/* 04C6E0 7F019CF0 0FC162CC */ jal matrix_4x4_set_rotation_around_z -/* 04C6E4 7F019CF4 C42C7C60 */ lwc1 $f12, %lo(D_80051B38)($at) -/* 04C6E8 7F019CF8 8FA401A8 */ lw $a0, 0x1a8($sp) -/* 04C6EC 7F019CFC 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 04C6F0 7F019D00 02402825 */ move $a1, $s2 -/* 04C6F4 7F019D04 3C078002 */ lui $a3, %hi(cast_model_weapon) # $a3, 0x8002 -/* 04C6F8 7F019D08 8CE76B48 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04C6FC 7F019D0C AFB201A8 */ sw $s2, 0x1a8($sp) -/* 04C700 7F019D10 8CEF0008 */ lw $t7, 8($a3) -.L7F019D14: -/* 04C704 7F019D14 85E4000E */ lh $a0, 0xe($t7) -/* 04C708 7F019D18 00046980 */ sll $t5, $a0, 6 -/* 04C70C 7F019D1C 0FC2F2B1 */ jal dynAllocate -/* 04C710 7F019D20 01A02025 */ move $a0, $t5 -/* 04C714 7F019D24 3C058002 */ lui $a1, %hi(cast_model_weapon) # $a1, 0x8002 -/* 04C718 7F019D28 AFA201B8 */ sw $v0, 0x1b8($sp) -/* 04C71C 7F019D2C 8CA56B48 */ lw $a1, %lo(cast_model_weapon)($a1) -/* 04C720 7F019D30 0FC1BD8D */ jal instcalcmatrices -/* 04C724 7F019D34 27A401A8 */ addiu $a0, $sp, 0x1a8 -/* 04C728 7F019D38 24180007 */ li $t8, 7 -.L7F019D3C: -/* 04C72C 7F019D3C 240C0001 */ li $t4, 1 -/* 04C730 7F019D40 24190003 */ li $t9, 3 -/* 04C734 7F019D44 27B20160 */ addiu $s2, $sp, 0x160 -/* 04C738 7F019D48 AFB801D8 */ sw $t8, 0x1d8($sp) -/* 04C73C 7F019D4C AFAC01AC */ sw $t4, 0x1ac($sp) -/* 04C740 7F019D50 AFB301B4 */ sw $s3, 0x1b4($sp) -/* 04C744 7F019D54 AFB901B0 */ sw $t9, 0x1b0($sp) -/* 04C748 7F019D58 27A401A8 */ addiu $a0, $sp, 0x1a8 -/* 04C74C 7F019D5C 0FC1D1D6 */ jal subdraw -/* 04C750 7F019D60 8E850000 */ lw $a1, ($s4) -/* 04C754 7F019D64 3C078002 */ lui $a3, %hi(cast_model_weapon) # $a3, 0x8002 -/* 04C758 7F019D68 8CE76B48 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04C75C 7F019D6C 10E00003 */ beqz $a3, .L7F019D7C -/* 04C760 7F019D70 27A401A8 */ addiu $a0, $sp, 0x1a8 -/* 04C764 7F019D74 0FC1D1D6 */ jal subdraw -/* 04C768 7F019D78 00E02825 */ move $a1, $a3 -.L7F019D7C: -/* 04C76C 7F019D7C 8FB301B4 */ lw $s3, 0x1b4($sp) -/* 04C770 7F019D80 0FC1B2D0 */ jal modelSetDistanceDisabled -/* 04C774 7F019D84 00002025 */ move $a0, $zero -/* 04C778 7F019D88 8E820000 */ lw $v0, ($s4) -/* 04C77C 7F019D8C 8C4B0008 */ lw $t3, 8($v0) -/* 04C780 7F019D90 856E000E */ lh $t6, 0xe($t3) -/* 04C784 7F019D94 19C00013 */ blez $t6, .L7F019DE4 -/* 04C788 7F019D98 00008025 */ move $s0, $zero -/* 04C78C 7F019D9C 8C4F000C */ lw $t7, 0xc($v0) -.L7F019DA0: -/* 04C790 7F019DA0 02402825 */ move $a1, $s2 -/* 04C794 7F019DA4 0FC16132 */ jal matrix_4x4_copy -/* 04C798 7F019DA8 01F02021 */ addu $a0, $t7, $s0 -/* 04C79C 7F019DAC 8E8D0000 */ lw $t5, ($s4) -/* 04C7A0 7F019DB0 00116180 */ sll $t4, $s1, 6 -/* 04C7A4 7F019DB4 02402025 */ move $a0, $s2 -/* 04C7A8 7F019DB8 8DB8000C */ lw $t8, 0xc($t5) -/* 04C7AC 7F019DBC 0FC16451 */ jal matrix_4x4_f32_to_s32 -/* 04C7B0 7F019DC0 030C2821 */ addu $a1, $t8, $t4 -/* 04C7B4 7F019DC4 8E820000 */ lw $v0, ($s4) -/* 04C7B8 7F019DC8 26310001 */ addiu $s1, $s1, 1 -/* 04C7BC 7F019DCC 26100040 */ addiu $s0, $s0, 0x40 -/* 04C7C0 7F019DD0 8C590008 */ lw $t9, 8($v0) -/* 04C7C4 7F019DD4 872B000E */ lh $t3, 0xe($t9) -/* 04C7C8 7F019DD8 022B082A */ slt $at, $s1, $t3 -/* 04C7CC 7F019DDC 5420FFF0 */ bnezl $at, .L7F019DA0 -/* 04C7D0 7F019DE0 8C4F000C */ lw $t7, 0xc($v0) -.L7F019DE4: -/* 04C7D4 7F019DE4 3C078002 */ lui $a3, %hi(cast_model_weapon) # $a3, 0x8002 -/* 04C7D8 7F019DE8 8CE76B48 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04C7DC 7F019DEC 50E0001C */ beql $a3, $zero, .L7F019E60 -/* 04C7E0 7F019DF0 02601025 */ move $v0, $s3 -/* 04C7E4 7F019DF4 8CEE0008 */ lw $t6, 8($a3) -/* 04C7E8 7F019DF8 00008825 */ move $s1, $zero -/* 04C7EC 7F019DFC 00008025 */ move $s0, $zero -/* 04C7F0 7F019E00 85CF000E */ lh $t7, 0xe($t6) -/* 04C7F4 7F019E04 59E00016 */ blezl $t7, .L7F019E60 -/* 04C7F8 7F019E08 02601025 */ move $v0, $s3 -/* 04C7FC 7F019E0C 8CED000C */ lw $t5, 0xc($a3) -.L7F019E10: -/* 04C800 7F019E10 02402825 */ move $a1, $s2 -/* 04C804 7F019E14 0FC16132 */ jal matrix_4x4_copy -/* 04C808 7F019E18 01B02021 */ addu $a0, $t5, $s0 -/* 04C80C 7F019E1C 3C188002 */ lui $t8, %hi(cast_model_weapon) # $t8, 0x8002 -/* 04C810 7F019E20 8F186B48 */ lw $t8, %lo(cast_model_weapon)($t8) -/* 04C814 7F019E24 0011C980 */ sll $t9, $s1, 6 -/* 04C818 7F019E28 02402025 */ move $a0, $s2 -/* 04C81C 7F019E2C 8F0C000C */ lw $t4, 0xc($t8) -/* 04C820 7F019E30 0FC16451 */ jal matrix_4x4_f32_to_s32 -/* 04C824 7F019E34 01992821 */ addu $a1, $t4, $t9 -/* 04C828 7F019E38 3C078002 */ lui $a3, %hi(cast_model_weapon) # $a3, 0x8002 -/* 04C82C 7F019E3C 8CE76B48 */ lw $a3, %lo(cast_model_weapon)($a3) -/* 04C830 7F019E40 26310001 */ addiu $s1, $s1, 1 -/* 04C834 7F019E44 26100040 */ addiu $s0, $s0, 0x40 -/* 04C838 7F019E48 8CEB0008 */ lw $t3, 8($a3) -/* 04C83C 7F019E4C 856E000E */ lh $t6, 0xe($t3) -/* 04C840 7F019E50 022E082A */ slt $at, $s1, $t6 -/* 04C844 7F019E54 5420FFEE */ bnezl $at, .L7F019E10 -/* 04C848 7F019E58 8CED000C */ lw $t5, 0xc($a3) -/* 04C84C 7F019E5C 02601025 */ move $v0, $s3 -.L7F019E60: -/* 04C850 7F019E60 3C0D006E */ lui $t5, (0x006E0528 >> 16) # lui $t5, 0x6e -/* 04C854 7F019E64 35AD0528 */ ori $t5, (0x006E0528 & 0xFFFF) # ori $t5, $t5, 0x528 -/* 04C858 7F019E68 3C0FED00 */ lui $t7, 0xed00 -/* 04C85C 7F019E6C AC4F0000 */ sw $t7, ($v0) -/* 04C860 7F019E70 AC4D0004 */ sw $t5, 4($v0) -/* 04C864 7F019E74 26730008 */ addiu $s3, $s3, 8 -/* 04C868 7F019E78 3C07E700 */ lui $a3, 0xe700 -/* 04C86C 7F019E7C 26640008 */ addiu $a0, $s3, 8 -/* 04C870 7F019E80 AE670000 */ sw $a3, ($s3) -/* 04C874 7F019E84 AE600004 */ sw $zero, 4($s3) -/* 04C878 7F019E88 3C18BA00 */ lui $t8, (0xBA001402 >> 16) # lui $t8, 0xba00 -/* 04C87C 7F019E8C 37181402 */ ori $t8, (0xBA001402 & 0xFFFF) # ori $t8, $t8, 0x1402 -/* 04C880 7F019E90 AC980000 */ sw $t8, ($a0) -/* 04C884 7F019E94 AC800004 */ sw $zero, 4($a0) -/* 04C888 7F019E98 24850008 */ addiu $a1, $a0, 8 -/* 04C88C 7F019E9C 3C08BA00 */ lui $t0, (0xBA000602 >> 16) # lui $t0, 0xba00 -/* 04C890 7F019EA0 35080602 */ ori $t0, (0xBA000602 & 0xFFFF) # ori $t0, $t0, 0x602 -/* 04C894 7F019EA4 24A60008 */ addiu $a2, $a1, 8 -/* 04C898 7F019EA8 240C00C0 */ li $t4, 192 -/* 04C89C 7F019EAC 3C09BA00 */ lui $t1, (0xBA001301 >> 16) # lui $t1, 0xba00 -/* 04C8A0 7F019EB0 ACAC0004 */ sw $t4, 4($a1) -/* 04C8A4 7F019EB4 ACA80000 */ sw $t0, ($a1) -/* 04C8A8 7F019EB8 35291301 */ ori $t1, (0xBA001301 & 0xFFFF) # ori $t1, $t1, 0x1301 -/* 04C8AC 7F019EBC 24C20008 */ addiu $v0, $a2, 8 -/* 04C8B0 7F019EC0 ACC90000 */ sw $t1, ($a2) -/* 04C8B4 7F019EC4 ACC00004 */ sw $zero, 4($a2) -/* 04C8B8 7F019EC8 3C19B900 */ lui $t9, (0xB9000002 >> 16) # lui $t9, 0xb900 -/* 04C8BC 7F019ECC 37390002 */ ori $t9, (0xB9000002 & 0xFFFF) # ori $t9, $t9, 2 -/* 04C8C0 7F019ED0 24430008 */ addiu $v1, $v0, 8 -/* 04C8C4 7F019ED4 3C0ABA00 */ lui $t2, (0xBA001001 >> 16) # lui $t2, 0xba00 -/* 04C8C8 7F019ED8 AC590000 */ sw $t9, ($v0) -/* 04C8CC 7F019EDC AC400004 */ sw $zero, 4($v0) -/* 04C8D0 7F019EE0 354A1001 */ ori $t2, (0xBA001001 & 0xFFFF) # ori $t2, $t2, 0x1001 -/* 04C8D4 7F019EE4 24730008 */ addiu $s3, $v1, 8 -/* 04C8D8 7F019EE8 AC6A0000 */ sw $t2, ($v1) -/* 04C8DC 7F019EEC AC600004 */ sw $zero, 4($v1) -/* 04C8E0 7F019EF0 02602025 */ move $a0, $s3 -/* 04C8E4 7F019EF4 3C0BBA00 */ lui $t3, (0xBA000C02 >> 16) # lui $t3, 0xba00 -/* 04C8E8 7F019EF8 356B0C02 */ ori $t3, (0xBA000C02 & 0xFFFF) # ori $t3, $t3, 0xc02 -/* 04C8EC 7F019EFC 240E2000 */ li $t6, 8192 -/* 04C8F0 7F019F00 AC8E0004 */ sw $t6, 4($a0) -/* 04C8F4 7F019F04 AC8B0000 */ sw $t3, ($a0) -/* 04C8F8 7F019F08 26650008 */ addiu $a1, $s3, 8 -/* 04C8FC 7F019F0C 3C0FBA00 */ lui $t7, (0xBA000903 >> 16) # lui $t7, 0xba00 -/* 04C900 7F019F10 35EF0903 */ ori $t7, (0xBA000903 & 0xFFFF) # ori $t7, $t7, 0x903 -/* 04C904 7F019F14 ACAF0000 */ sw $t7, ($a1) -/* 04C908 7F019F18 24A60008 */ addiu $a2, $a1, 8 -/* 04C90C 7F019F1C 240D0C00 */ li $t5, 3072 -/* 04C910 7F019F20 ACAD0004 */ sw $t5, 4($a1) -/* 04C914 7F019F24 3C18BA00 */ lui $t8, (0xBA000E02 >> 16) # lui $t8, 0xba00 -/* 04C918 7F019F28 37180E02 */ ori $t8, (0xBA000E02 & 0xFFFF) # ori $t8, $t8, 0xe02 -/* 04C91C 7F019F2C 24C20008 */ addiu $v0, $a2, 8 -/* 04C920 7F019F30 ACD80000 */ sw $t8, ($a2) -/* 04C924 7F019F34 ACC00004 */ sw $zero, 4($a2) -/* 04C928 7F019F38 3C190050 */ lui $t9, (0x00504340 >> 16) # lui $t9, 0x50 -/* 04C92C 7F019F3C 3C0CB900 */ lui $t4, (0xB900031D >> 16) # lui $t4, 0xb900 -/* 04C930 7F019F40 358C031D */ ori $t4, (0xB900031D & 0xFFFF) # ori $t4, $t4, 0x31d -/* 04C934 7F019F44 37394340 */ ori $t9, (0x00504340 & 0xFFFF) # ori $t9, $t9, 0x4340 -/* 04C938 7F019F48 24430008 */ addiu $v1, $v0, 8 -/* 04C93C 7F019F4C AC590004 */ sw $t9, 4($v0) -/* 04C940 7F019F50 AC4C0000 */ sw $t4, ($v0) -/* 04C944 7F019F54 3C0BFCFF */ lui $t3, (0xFCFFFFFF >> 16) # lui $t3, 0xfcff -/* 04C948 7F019F58 3C0EFFFD */ lui $t6, (0xFFFDF6FB >> 16) # lui $t6, 0xfffd -/* 04C94C 7F019F5C 35CEF6FB */ ori $t6, (0xFFFDF6FB & 0xFFFF) # ori $t6, $t6, 0xf6fb -/* 04C950 7F019F60 356BFFFF */ ori $t3, (0xFCFFFFFF & 0xFFFF) # ori $t3, $t3, 0xffff -/* 04C954 7F019F64 AC6B0000 */ sw $t3, ($v1) -/* 04C958 7F019F68 AC6E0004 */ sw $t6, 4($v1) -/* 04C95C 7F019F6C 24640008 */ addiu $a0, $v1, 8 -/* 04C960 7F019F70 3C0FFA00 */ lui $t7, 0xfa00 -/* 04C964 7F019F74 AC8F0000 */ sw $t7, ($a0) -/* 04C968 7F019F78 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 04C96C 7F019F7C 44813000 */ mtc1 $at, $f6 -/* 04C970 7F019F80 C7A80144 */ lwc1 $f8, 0x144($sp) -/* 04C974 7F019F84 240C00FF */ li $t4, 255 -/* 04C978 7F019F88 24930008 */ addiu $s3, $a0, 8 -/* 04C97C 7F019F8C 46083002 */ mul.s $f0, $f6, $f8 -/* 04C980 7F019F90 3C0EF66E */ lui $t6, (0xF66E0528 >> 16) # lui $t6, 0xf66e -/* 04C984 7F019F94 35CE0528 */ ori $t6, (0xF66E0528 & 0xFFFF) # ori $t6, $t6, 0x528 -/* 04C988 7F019F98 26660008 */ addiu $a2, $s3, 8 -/* 04C98C 7F019F9C 24C20008 */ addiu $v0, $a2, 8 -/* 04C990 7F019FA0 24430008 */ addiu $v1, $v0, 8 -/* 04C994 7F019FA4 240F0040 */ li $t7, 64 -/* 04C998 7F019FA8 4600028D */ trunc.w.s $f10, $f0 -/* 04C99C 7F019FAC 3C0D0008 */ lui $t5, 8 -/* 04C9A0 7F019FB0 24650008 */ addiu $a1, $v1, 8 -/* 04C9A4 7F019FB4 44185000 */ mfc1 $t8, $f10 -/* 04C9A8 7F019FB8 00000000 */ nop -/* 04C9AC 7F019FBC 0198C823 */ subu $t9, $t4, $t8 -/* 04C9B0 7F019FC0 332B00FF */ andi $t3, $t9, 0xff -/* 04C9B4 7F019FC4 AC8B0004 */ sw $t3, 4($a0) -/* 04C9B8 7F019FC8 AE600004 */ sw $zero, 4($s3) -/* 04C9BC 7F019FCC AE6E0000 */ sw $t6, ($s3) -/* 04C9C0 7F019FD0 ACC00004 */ sw $zero, 4($a2) -/* 04C9C4 7F019FD4 ACC70000 */ sw $a3, ($a2) -/* 04C9C8 7F019FD8 AC4F0004 */ sw $t7, 4($v0) -/* 04C9CC 7F019FDC AC480000 */ sw $t0, ($v0) -/* 04C9D0 7F019FE0 AC6D0004 */ sw $t5, 4($v1) -/* 04C9D4 7F019FE4 AC690000 */ sw $t1, ($v1) -/* 04C9D8 7F019FE8 3C0C0001 */ lui $t4, 1 -/* 04C9DC 7F019FEC ACAC0004 */ sw $t4, 4($a1) -/* 04C9E0 7F019FF0 ACAA0000 */ sw $t2, ($a1) -/* 04C9E4 7F019FF4 24A40008 */ addiu $a0, $a1, 8 -/* 04C9E8 7F019FF8 0FC2B016 */ jal microcode_constructor -/* 04C9EC 7F019FFC E7A00070 */ swc1 $f0, 0x70($sp) -/* 04C9F0 7F01A000 3C188002 */ lui $t8, %hi(full_actor_intro) # $t8, 0x8002 -/* 04C9F4 7F01A004 8F186B4C */ lw $t8, %lo(full_actor_intro)($t8) -/* 04C9F8 7F01A008 00409825 */ move $s3, $v0 -/* 04C9FC 7F01A00C 1700005F */ bnez $t8, .L7F01A18C -/* 04CA00 7F01A010 3C198002 */ lui $t9, %hi(intro_character_index) # $t9, 0x8002 -/* 04CA04 7F01A014 8F396B38 */ lw $t9, %lo(intro_character_index)($t9) -/* 04CA08 7F01A018 3C048002 */ lui $a0, %hi(intro_char_table+8) -/* 04CA0C 7F01A01C 00195880 */ sll $t3, $t9, 2 -/* 04CA10 7F01A020 01795821 */ addu $t3, $t3, $t9 -/* 04CA14 7F01A024 000B5880 */ sll $t3, $t3, 2 -/* 04CA18 7F01A028 008B2021 */ addu $a0, $a0, $t3 -/* 04CA1C 7F01A02C 0FC304AE */ jal langGet -/* 04CA20 7F01A030 94846B58 */ lhu $a0, %lo(intro_char_table+8)($a0) -/* 04CA24 7F01A034 3C0E8004 */ lui $t6, %hi(ptrFontZurichBold) # $t6, 0x8004 -/* 04CA28 7F01A038 8DCEAB04 */ lw $t6, %lo(ptrFontZurichBold)($t6) -/* 04CA2C 7F01A03C 3C148004 */ lui $s4, %hi(ptrFontZurichBoldChars) # $s4, 0x8004 -/* 04CA30 7F01A040 2694AB08 */ addiu $s4, %lo(ptrFontZurichBoldChars) # addiu $s4, $s4, -0x54f8 -/* 04CA34 7F01A044 00408825 */ move $s1, $v0 -/* 04CA38 7F01A048 8E870000 */ lw $a3, ($s4) -/* 04CA3C 7F01A04C 27A40150 */ addiu $a0, $sp, 0x150 -/* 04CA40 7F01A050 27A50154 */ addiu $a1, $sp, 0x154 -/* 04CA44 7F01A054 00403025 */ move $a2, $v0 -/* 04CA48 7F01A058 AFA00014 */ sw $zero, 0x14($sp) -/* 04CA4C 7F01A05C 0FC2B713 */ jal textMeasure -/* 04CA50 7F01A060 AFAE0010 */ sw $t6, 0x10($sp) -/* 04CA54 7F01A064 8FA20154 */ lw $v0, 0x154($sp) -/* 04CA58 7F01A068 8FB80150 */ lw $t8, 0x150($sp) -/* 04CA5C 7F01A06C 240D013B */ li $t5, 315 -/* 04CA60 7F01A070 04410003 */ bgez $v0, .L7F01A080 -/* 04CA64 7F01A074 00027843 */ sra $t7, $v0, 1 -/* 04CA68 7F01A078 24410001 */ addiu $at, $v0, 1 -/* 04CA6C 7F01A07C 00017843 */ sra $t7, $at, 1 -.L7F01A080: -/* 04CA70 7F01A080 01AF2823 */ subu $a1, $t5, $t7 -/* 04CA74 7F01A084 240C006C */ li $t4, 108 -/* 04CA78 7F01A088 00A23821 */ addu $a3, $a1, $v0 -/* 04CA7C 7F01A08C 2719006D */ addiu $t9, $t8, 0x6d -/* 04CA80 7F01A090 AFAC0158 */ sw $t4, 0x158($sp) -/* 04CA84 7F01A094 AFB90010 */ sw $t9, 0x10($sp) -/* 04CA88 7F01A098 24E70001 */ addiu $a3, $a3, 1 -/* 04CA8C 7F01A09C AFA5015C */ sw $a1, 0x15c($sp) -/* 04CA90 7F01A0A0 02602025 */ move $a0, $s3 -/* 04CA94 7F01A0A4 2406006C */ li $a2, 108 -/* 04CA98 7F01A0A8 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 04CA9C 7F01A0AC AFA00014 */ sw $zero, 0x14($sp) -/* 04CAA0 7F01A0B0 0C000F9B */ jal viGetX -/* 04CAA4 7F01A0B4 00409825 */ move $s3, $v0 -/* 04CAA8 7F01A0B8 00028400 */ sll $s0, $v0, 0x10 -/* 04CAAC 7F01A0BC 00105C03 */ sra $t3, $s0, 0x10 -/* 04CAB0 7F01A0C0 0C000F9F */ jal viGetY -/* 04CAB4 7F01A0C4 01608025 */ move $s0, $t3 -/* 04CAB8 7F01A0C8 444FF800 */ cfc1 $t7, $31 -/* 04CABC 7F01A0CC 240C0001 */ li $t4, 1 -/* 04CAC0 7F01A0D0 44CCF800 */ ctc1 $t4, $31 -/* 04CAC4 7F01A0D4 C7A40070 */ lwc1 $f4, 0x70($sp) -/* 04CAC8 7F01A0D8 3C0D8004 */ lui $t5, %hi(ptrFontZurichBold) # $t5, 0x8004 -/* 04CACC 7F01A0DC 8DADAB04 */ lw $t5, %lo(ptrFontZurichBold)($t5) -/* 04CAD0 7F01A0E0 460021A4 */ cvt.w.s $f6, $f4 -/* 04CAD4 7F01A0E4 8E8E0000 */ lw $t6, ($s4) -/* 04CAD8 7F01A0E8 02602025 */ move $a0, $s3 -/* 04CADC 7F01A0EC 27A5015C */ addiu $a1, $sp, 0x15c -/* 04CAE0 7F01A0F0 444CF800 */ cfc1 $t4, $31 -/* 04CAE4 7F01A0F4 27A60158 */ addiu $a2, $sp, 0x158 -/* 04CAE8 7F01A0F8 02203825 */ move $a3, $s1 -/* 04CAEC 7F01A0FC 318C0078 */ andi $t4, $t4, 0x78 -/* 04CAF0 7F01A100 AFAD0014 */ sw $t5, 0x14($sp) -/* 04CAF4 7F01A104 11800013 */ beqz $t4, .L7F01A154 -/* 04CAF8 7F01A108 AFAE0010 */ sw $t6, 0x10($sp) -/* 04CAFC 7F01A10C 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 04CB00 7F01A110 44813000 */ mtc1 $at, $f6 -/* 04CB04 7F01A114 240C0001 */ li $t4, 1 -/* 04CB08 7F01A118 46062181 */ sub.s $f6, $f4, $f6 -/* 04CB0C 7F01A11C 44CCF800 */ ctc1 $t4, $31 -/* 04CB10 7F01A120 00000000 */ nop -/* 04CB14 7F01A124 460031A4 */ cvt.w.s $f6, $f6 -/* 04CB18 7F01A128 444CF800 */ cfc1 $t4, $31 -/* 04CB1C 7F01A12C 00000000 */ nop -/* 04CB20 7F01A130 318C0078 */ andi $t4, $t4, 0x78 -/* 04CB24 7F01A134 15800005 */ bnez $t4, .L7F01A14C -/* 04CB28 7F01A138 00000000 */ nop -/* 04CB2C 7F01A13C 440C3000 */ mfc1 $t4, $f6 -/* 04CB30 7F01A140 3C018000 */ lui $at, 0x8000 -/* 04CB34 7F01A144 10000007 */ b .L7F01A164 -/* 04CB38 7F01A148 01816025 */ or $t4, $t4, $at -.L7F01A14C: -/* 04CB3C 7F01A14C 10000005 */ b .L7F01A164 -/* 04CB40 7F01A150 240CFFFF */ li $t4, -1 -.L7F01A154: -/* 04CB44 7F01A154 440C3000 */ mfc1 $t4, $f6 -/* 04CB48 7F01A158 00000000 */ nop -/* 04CB4C 7F01A15C 0580FFFB */ bltz $t4, .L7F01A14C -/* 04CB50 7F01A160 00000000 */ nop -.L7F01A164: -/* 04CB54 7F01A164 2401FF00 */ li $at, -256 -/* 04CB58 7F01A168 0181C025 */ or $t8, $t4, $at -/* 04CB5C 7F01A16C 44CFF800 */ ctc1 $t7, $31 -/* 04CB60 7F01A170 AFB80018 */ sw $t8, 0x18($sp) -/* 04CB64 7F01A174 AFB0001C */ sw $s0, 0x1c($sp) -/* 04CB68 7F01A178 AFA20020 */ sw $v0, 0x20($sp) -/* 04CB6C 7F01A17C AFA00024 */ sw $zero, 0x24($sp) -/* 04CB70 7F01A180 0FC2B35F */ jal textRender -/* 04CB74 7F01A184 AFA00028 */ sw $zero, 0x28($sp) -/* 04CB78 7F01A188 00409825 */ move $s3, $v0 -.L7F01A18C: -/* 04CB7C 7F01A18C 444EF800 */ cfc1 $t6, $31 -/* 04CB80 7F01A190 24120001 */ li $s2, 1 -/* 04CB84 7F01A194 44D2F800 */ ctc1 $s2, $31 -/* 04CB88 7F01A198 C7A80070 */ lwc1 $f8, 0x70($sp) -/* 04CB8C 7F01A19C 3C198002 */ lui $t9, %hi(intro_character_index) # $t9, 0x8002 -/* 04CB90 7F01A1A0 8F396B38 */ lw $t9, %lo(intro_character_index)($t9) -/* 04CB94 7F01A1A4 460042A4 */ cvt.w.s $f10, $f8 -/* 04CB98 7F01A1A8 3C048002 */ lui $a0, %hi(intro_char_table+10) -/* 04CB9C 7F01A1AC 00195880 */ sll $t3, $t9, 2 -/* 04CBA0 7F01A1B0 01795821 */ addu $t3, $t3, $t9 -/* 04CBA4 7F01A1B4 4452F800 */ cfc1 $s2, $31 -/* 04CBA8 7F01A1B8 000B5880 */ sll $t3, $t3, 2 -/* 04CBAC 7F01A1BC 3C148004 */ lui $s4, %hi(ptrFontZurichBoldChars) # $s4, 0x8004 -/* 04CBB0 7F01A1C0 008B2021 */ addu $a0, $a0, $t3 -/* 04CBB4 7F01A1C4 32520078 */ andi $s2, $s2, 0x78 -/* 04CBB8 7F01A1C8 2694AB08 */ addiu $s4, %lo(ptrFontZurichBoldChars) # addiu $s4, $s4, -0x54f8 -/* 04CBBC 7F01A1CC 12400013 */ beqz $s2, .L7F01A21C -/* 04CBC0 7F01A1D0 94846B5A */ lhu $a0, %lo(intro_char_table+10)($a0) -/* 04CBC4 7F01A1D4 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 04CBC8 7F01A1D8 44815000 */ mtc1 $at, $f10 -/* 04CBCC 7F01A1DC 24120001 */ li $s2, 1 -/* 04CBD0 7F01A1E0 460A4281 */ sub.s $f10, $f8, $f10 -/* 04CBD4 7F01A1E4 44D2F800 */ ctc1 $s2, $31 -/* 04CBD8 7F01A1E8 00000000 */ nop -/* 04CBDC 7F01A1EC 460052A4 */ cvt.w.s $f10, $f10 -/* 04CBE0 7F01A1F0 4452F800 */ cfc1 $s2, $31 -/* 04CBE4 7F01A1F4 00000000 */ nop -/* 04CBE8 7F01A1F8 32520078 */ andi $s2, $s2, 0x78 -/* 04CBEC 7F01A1FC 16400005 */ bnez $s2, .L7F01A214 -/* 04CBF0 7F01A200 00000000 */ nop -/* 04CBF4 7F01A204 44125000 */ mfc1 $s2, $f10 -/* 04CBF8 7F01A208 3C018000 */ lui $at, 0x8000 -/* 04CBFC 7F01A20C 10000007 */ b .L7F01A22C -/* 04CC00 7F01A210 02419025 */ or $s2, $s2, $at -.L7F01A214: -/* 04CC04 7F01A214 10000005 */ b .L7F01A22C -/* 04CC08 7F01A218 2412FFFF */ li $s2, -1 -.L7F01A21C: -/* 04CC0C 7F01A21C 44125000 */ mfc1 $s2, $f10 -/* 04CC10 7F01A220 00000000 */ nop -/* 04CC14 7F01A224 0640FFFB */ bltz $s2, .L7F01A214 -/* 04CC18 7F01A228 00000000 */ nop -.L7F01A22C: -/* 04CC1C 7F01A22C 2401FF00 */ li $at, -256 -/* 04CC20 7F01A230 02416825 */ or $t5, $s2, $at -/* 04CC24 7F01A234 44CEF800 */ ctc1 $t6, $31 -/* 04CC28 7F01A238 0FC304AE */ jal langGet -/* 04CC2C 7F01A23C 01A09025 */ move $s2, $t5 -/* 04CC30 7F01A240 3C0F8004 */ lui $t7, %hi(ptrFontZurichBold) # $t7, 0x8004 -/* 04CC34 7F01A244 8DEFAB04 */ lw $t7, %lo(ptrFontZurichBold)($t7) -/* 04CC38 7F01A248 00408825 */ move $s1, $v0 -/* 04CC3C 7F01A24C 27A40150 */ addiu $a0, $sp, 0x150 -/* 04CC40 7F01A250 27A50154 */ addiu $a1, $sp, 0x154 -/* 04CC44 7F01A254 00403025 */ move $a2, $v0 -/* 04CC48 7F01A258 8E870000 */ lw $a3, ($s4) -/* 04CC4C 7F01A25C AFA00014 */ sw $zero, 0x14($sp) -/* 04CC50 7F01A260 0FC2B713 */ jal textMeasure -/* 04CC54 7F01A264 AFAF0010 */ sw $t7, 0x10($sp) -/* 04CC58 7F01A268 8FA20154 */ lw $v0, 0x154($sp) -/* 04CC5C 7F01A26C 8FAB0150 */ lw $t3, 0x150($sp) -/* 04CC60 7F01A270 2418013B */ li $t8, 315 -/* 04CC64 7F01A274 04410003 */ bgez $v0, .L7F01A284 -/* 04CC68 7F01A278 00026043 */ sra $t4, $v0, 1 -/* 04CC6C 7F01A27C 24410001 */ addiu $at, $v0, 1 -/* 04CC70 7F01A280 00016043 */ sra $t4, $at, 1 -.L7F01A284: -/* 04CC74 7F01A284 030C2823 */ subu $a1, $t8, $t4 -/* 04CC78 7F01A288 24190098 */ li $t9, 152 -/* 04CC7C 7F01A28C 00A23821 */ addu $a3, $a1, $v0 -/* 04CC80 7F01A290 256E0099 */ addiu $t6, $t3, 0x99 -/* 04CC84 7F01A294 AFB90158 */ sw $t9, 0x158($sp) -/* 04CC88 7F01A298 AFAE0010 */ sw $t6, 0x10($sp) -/* 04CC8C 7F01A29C 24E70001 */ addiu $a3, $a3, 1 -/* 04CC90 7F01A2A0 AFA5015C */ sw $a1, 0x15c($sp) -/* 04CC94 7F01A2A4 02602025 */ move $a0, $s3 -/* 04CC98 7F01A2A8 24060098 */ li $a2, 152 -/* 04CC9C 7F01A2AC 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 04CCA0 7F01A2B0 AFA00014 */ sw $zero, 0x14($sp) -/* 04CCA4 7F01A2B4 0C000F9B */ jal viGetX -/* 04CCA8 7F01A2B8 00409825 */ move $s3, $v0 -/* 04CCAC 7F01A2BC 00028400 */ sll $s0, $v0, 0x10 -/* 04CCB0 7F01A2C0 00106C03 */ sra $t5, $s0, 0x10 -/* 04CCB4 7F01A2C4 0C000F9F */ jal viGetY -/* 04CCB8 7F01A2C8 01A08025 */ move $s0, $t5 -/* 04CCBC 7F01A2CC 3C188004 */ lui $t8, %hi(ptrFontZurichBold) # $t8, 0x8004 -/* 04CCC0 7F01A2D0 8F18AB04 */ lw $t8, %lo(ptrFontZurichBold)($t8) -/* 04CCC4 7F01A2D4 8E8F0000 */ lw $t7, ($s4) -/* 04CCC8 7F01A2D8 02602025 */ move $a0, $s3 -/* 04CCCC 7F01A2DC 27A5015C */ addiu $a1, $sp, 0x15c -/* 04CCD0 7F01A2E0 27A60158 */ addiu $a2, $sp, 0x158 -/* 04CCD4 7F01A2E4 02203825 */ move $a3, $s1 -/* 04CCD8 7F01A2E8 AFB20018 */ sw $s2, 0x18($sp) -/* 04CCDC 7F01A2EC AFB0001C */ sw $s0, 0x1c($sp) -/* 04CCE0 7F01A2F0 AFA20020 */ sw $v0, 0x20($sp) -/* 04CCE4 7F01A2F4 AFA00024 */ sw $zero, 0x24($sp) -/* 04CCE8 7F01A2F8 AFA00028 */ sw $zero, 0x28($sp) -/* 04CCEC 7F01A2FC AFB80014 */ sw $t8, 0x14($sp) -/* 04CCF0 7F01A300 0FC2B35F */ jal textRender -/* 04CCF4 7F01A304 AFAF0010 */ sw $t7, 0x10($sp) -/* 04CCF8 7F01A308 3C0C8002 */ lui $t4, %hi(intro_character_index) # $t4, 0x8002 -/* 04CCFC 7F01A30C 8D8C6B38 */ lw $t4, %lo(intro_character_index)($t4) -/* 04CD00 7F01A310 3C048002 */ lui $a0, %hi(intro_char_table+12) -/* 04CD04 7F01A314 00409825 */ move $s3, $v0 -/* 04CD08 7F01A318 000CC880 */ sll $t9, $t4, 2 -/* 04CD0C 7F01A31C 032CC821 */ addu $t9, $t9, $t4 -/* 04CD10 7F01A320 0019C880 */ sll $t9, $t9, 2 -/* 04CD14 7F01A324 00992021 */ addu $a0, $a0, $t9 -/* 04CD18 7F01A328 0FC304AE */ jal langGet -/* 04CD1C 7F01A32C 94846B5C */ lhu $a0, %lo(intro_char_table+12)($a0) -/* 04CD20 7F01A330 3C0B8004 */ lui $t3, %hi(ptrFontZurichBold) # $t3, 0x8004 -/* 04CD24 7F01A334 8D6BAB04 */ lw $t3, %lo(ptrFontZurichBold)($t3) -/* 04CD28 7F01A338 00408825 */ move $s1, $v0 -/* 04CD2C 7F01A33C 27A40150 */ addiu $a0, $sp, 0x150 -/* 04CD30 7F01A340 27A50154 */ addiu $a1, $sp, 0x154 -/* 04CD34 7F01A344 00403025 */ move $a2, $v0 -/* 04CD38 7F01A348 8E870000 */ lw $a3, ($s4) -/* 04CD3C 7F01A34C AFA00014 */ sw $zero, 0x14($sp) -/* 04CD40 7F01A350 0FC2B713 */ jal textMeasure -/* 04CD44 7F01A354 AFAB0010 */ sw $t3, 0x10($sp) -/* 04CD48 7F01A358 8FA20154 */ lw $v0, 0x154($sp) -/* 04CD4C 7F01A35C 8FB80150 */ lw $t8, 0x150($sp) -/* 04CD50 7F01A360 240D013B */ li $t5, 315 -/* 04CD54 7F01A364 04410003 */ bgez $v0, .L7F01A374 -/* 04CD58 7F01A368 00027043 */ sra $t6, $v0, 1 -/* 04CD5C 7F01A36C 24410001 */ addiu $at, $v0, 1 -/* 04CD60 7F01A370 00017043 */ sra $t6, $at, 1 -.L7F01A374: -/* 04CD64 7F01A374 01AE2823 */ subu $a1, $t5, $t6 -/* 04CD68 7F01A378 240F00AE */ li $t7, 174 -/* 04CD6C 7F01A37C 00A23821 */ addu $a3, $a1, $v0 -/* 04CD70 7F01A380 270C00AF */ addiu $t4, $t8, 0xaf -/* 04CD74 7F01A384 AFAF0158 */ sw $t7, 0x158($sp) -/* 04CD78 7F01A388 AFAC0010 */ sw $t4, 0x10($sp) -/* 04CD7C 7F01A38C 24E70001 */ addiu $a3, $a3, 1 -/* 04CD80 7F01A390 AFA5015C */ sw $a1, 0x15c($sp) -/* 04CD84 7F01A394 02602025 */ move $a0, $s3 -/* 04CD88 7F01A398 240600AE */ li $a2, 174 -/* 04CD8C 7F01A39C 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 04CD90 7F01A3A0 AFA00014 */ sw $zero, 0x14($sp) -/* 04CD94 7F01A3A4 0C000F9B */ jal viGetX -/* 04CD98 7F01A3A8 00409825 */ move $s3, $v0 -/* 04CD9C 7F01A3AC 00028400 */ sll $s0, $v0, 0x10 -/* 04CDA0 7F01A3B0 0010CC03 */ sra $t9, $s0, 0x10 -/* 04CDA4 7F01A3B4 0C000F9F */ jal viGetY -/* 04CDA8 7F01A3B8 03208025 */ move $s0, $t9 -/* 04CDAC 7F01A3BC 3C0D8004 */ lui $t5, %hi(ptrFontZurichBold) # $t5, 0x8004 -/* 04CDB0 7F01A3C0 8DADAB04 */ lw $t5, %lo(ptrFontZurichBold)($t5) -/* 04CDB4 7F01A3C4 8E8B0000 */ lw $t3, ($s4) -/* 04CDB8 7F01A3C8 02602025 */ move $a0, $s3 -/* 04CDBC 7F01A3CC 27A5015C */ addiu $a1, $sp, 0x15c -/* 04CDC0 7F01A3D0 27A60158 */ addiu $a2, $sp, 0x158 -/* 04CDC4 7F01A3D4 02203825 */ move $a3, $s1 -/* 04CDC8 7F01A3D8 AFB20018 */ sw $s2, 0x18($sp) -/* 04CDCC 7F01A3DC AFB0001C */ sw $s0, 0x1c($sp) -/* 04CDD0 7F01A3E0 AFA20020 */ sw $v0, 0x20($sp) -/* 04CDD4 7F01A3E4 AFA00024 */ sw $zero, 0x24($sp) -/* 04CDD8 7F01A3E8 AFA00028 */ sw $zero, 0x28($sp) -/* 04CDDC 7F01A3EC AFAD0014 */ sw $t5, 0x14($sp) -/* 04CDE0 7F01A3F0 0FC2B35F */ jal textRender -/* 04CDE4 7F01A3F4 AFAB0010 */ sw $t3, 0x10($sp) -/* 04CDE8 7F01A3F8 8FBF004C */ lw $ra, 0x4c($sp) -/* 04CDEC 7F01A3FC 8FB00038 */ lw $s0, 0x38($sp) -/* 04CDF0 7F01A400 8FB1003C */ lw $s1, 0x3c($sp) -/* 04CDF4 7F01A404 8FB20040 */ lw $s2, 0x40($sp) -/* 04CDF8 7F01A408 8FB30044 */ lw $s3, 0x44($sp) -/* 04CDFC 7F01A40C 8FB40048 */ lw $s4, 0x48($sp) -/* 04CE00 7F01A410 03E00008 */ jr $ra -/* 04CE04 7F01A414 27BD0250 */ addiu $sp, $sp, 0x250 -) -#endif -#endif - - //******************************************************************************************************** //SPECTRUM EMULATOR @@ -12758,7 +8333,8 @@ void init_menu19_spectrum(void) } -void update_menu19_spectrum(void) { +void update_menu19_spectrum(void) +{ return; } @@ -12775,19 +8351,16 @@ void interface_menu19_spectrum(void) } - - #if !defined(LEFTOVERSPECTRUM) Gfx* constructor_menu19_spectrum(Gfx* DL) { return DL; } #else - // Address 0x7F01A4E0 NTSC Gfx * constructor_menu19_spectrum(Gfx * DL) { - DL = insert_imageDL(DL); + DL = clear_framebuffer_black(DL); gDPSetCycleType(DL++, G_CYC_1CYCLE); gDPSetRenderMode(DL++, G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2); @@ -12808,11 +8381,6 @@ Gfx * constructor_menu19_spectrum(Gfx * DL) #endif - - - - - void frontChangeMenu(MENU menu, s32 reload) { if ((menu == MENU_RUN_STAGE) || (menu == MENU_SPECTRUM_EMU)) @@ -12836,8 +8404,6 @@ MENU get_currentmenu(void) } - - void menu_init(void) { s32 var_v0; @@ -13003,9 +8569,12 @@ void menu_init(void) { frontChangeMenu(MENU_MP_OPTIONS, 1); } + /** + * The intro roster only shows main characters. The credits roster shows minor characters like guards. + */ else if (selected_stage == LEVELID_CUBA) { - do_extended_cast_display(1); + do_extended_cast_display(TRUE); frontChangeMenu(MENU_DISPLAY_CAST, 1); } else @@ -13017,9 +8586,6 @@ void menu_init(void) } - - - Gfx * menu_jump_constructor_handler(Gfx *DL) { switch(current_menu) { diff --git a/src/game/front.h b/src/game/front.h index 3674f6ef..03a7fd49 100644 --- a/src/game/front.h +++ b/src/game/front.h @@ -33,7 +33,6 @@ #define PREVTAB_TAB_BOTTOM 315.0f - struct legal_screen_text { s32 h_pos; s32 v_pos; @@ -47,18 +46,18 @@ struct mission_folder_setup { void * string_ptr; u16 folder_text_preset; u16 icon_text_preset; - int stage_id; - int unknown; - int type; - int mission_num; + s32 stage_id; + s32 unknown; + s32 type; + s32 mission_num; void * briefing_name_ptr; }; struct MP_game_length_settings { u16 text_preset; u16 padding; - int time; - int points; + s32 time; + s32 points; }; struct mp_stage_playercount { @@ -81,15 +80,15 @@ struct MP_selectable_chars { u16 text_preset; u8 gender; u8 select_photo; - short body; - short head; - float pov; + s16 body; + s16 head; + f32 pov; }; struct MP_handicap_menu { u16 text_preset; u16 padding; - float damage_modifier; + f32 damage_modifier; }; struct MP_controller_configuration_menu { @@ -108,18 +107,18 @@ struct MP_sight_aim_settings { struct intro_char { enum BODIES body; enum HEADS head; - short text1; - short text2; - short text3; - short RESERVED; - int flag; + s16 text1; + s16 text2; + s16 text3; + s16 RESERVED; + s32 flag; }; struct intro_animation { - int animID; - float startframeoffset; - float playback_speed; - int camera_preset; + s32 animID; + f32 startframeoffset; + f32 playback_speed; + s32 camera_preset; }; struct solo_target_times { @@ -130,49 +129,49 @@ struct solo_target_times { -extern f32 flt_CODE_bss_800695A0; +extern f32 cast_camera_dist; //CODE.bss:800695A4 -extern f32 flt_CODE_bss_800695A4; +extern f32 cast_camera_dist_start; //CODE.bss:800695A8 -extern f32 flt_CODE_bss_800695A8; +extern f32 cast_camera_dist_end; //CODE.bss:800695AC -extern f32 flt_CODE_bss_800695AC; +extern f32 cast_camera_angle; //CODE.bss:800695B0 -extern f32 flt_CODE_bss_800695B0; +extern f32 cast_camera_angle_start; //CODE.bss:800695B4 -extern f32 flt_CODE_bss_800695B4; +extern f32 cast_camera_angle_end; //CODE.bss:800695B8 -extern f32 flt_CODE_bss_800695B8; +extern f32 cast_camera_height; //CODE.bss:800695BC -extern f32 flt_CODE_bss_800695BC; +extern f32 cast_camera_height_start; //CODE.bss:800695C0 -extern f32 flt_CODE_bss_800695C0; +extern f32 cast_camera_height_end; //CODE.bss:800695C4 .align 3 //CODE.bss:800695C8 -extern struct coord3d flt_CODE_bss_800695C8; +extern struct coord3d cast_target_smoothed; //CODE.bss:800695D4 .align 3 //CODE.bss:800695D8 -extern struct coord3d flt_CODE_bss_800695D8; +extern struct coord3d cast_target_accumulator; //CODE.bss:800695E4 -extern s32 bss_800695E4; +extern s32 cast_camera_reset; //CODE.bss:800695E8 -extern struct coord3d flt_CODE_bss_800695E8; +extern struct coord3d cast_rootpos_smoothed; //CODE.bss:800695F4 .align 3 //CODE.bss:800695F8 -extern struct coord3d flt_CODE_bss_800695F8; +extern struct coord3d cast_rootvel_smoothed; //CODE.bss:80069604 .align 3 //CODE.bss:80069608 -extern struct coord3d flt_CODE_bss_80069608; +extern struct coord3d cast_rootvel_accumulator; //CODE.bss:80069614 extern f32 ninLogoRotRate; //CODE.bss:80069618 extern f32 ninLogoScale; //CODE.bss:80069620 -extern coord3d dword_CODE_bss_80069620[0x4]; +extern coord3d folderpositions_camspace[MAX_FOLDER_COUNT]; //CODE.bss:80069650 extern u8 cheat_available[]; @@ -190,7 +189,7 @@ extern s32 mp_char_cur_select_player[4]; extern s32 mp_char_prev_select_player[4]; //CODE.bss:80069730 -extern s32 dword_CODE_bss_80069730[4]; +extern s32 mp_char_select_scroll_offset[4]; //CODE.bss:80069740 extern s32 player_has_selected_char[]; @@ -219,9 +218,9 @@ extern s32 highlight_enemy_reaction; //CODE.bss:80069798 extern s32 highlight_enemy_health; //CODE.bss:8006979C -extern s32 highlight_enemy_accuracy; -//CODE.bss:800697A0 extern s32 highlight_enemy_damage; +//CODE.bss:800697A0 +extern s32 highlight_enemy_accuracy; //CODE.bss:800697A4 .align 3 @@ -333,12 +332,12 @@ extern u32 full_actor_intro; void frontChangeMenu(MENU menu, s32 reload); s32 get_selected_num_players(void); -void do_extended_cast_display(s32 flag); +void do_extended_cast_display(bool doExtended); MPSCENARIOS get_scenario(void); f32 get_player_mp_handicap(int player); f32 get_player_mp_char_height(int player); -int get_mp_timelimit(void); -int get_mp_pointlimit(void); +s32 get_mp_timelimit(void); +s32 get_mp_pointlimit(void); void reset_mp_options_for_scenario(MPSCENARIOS scenarioid); void copy_aim_settings_to_playerdata(void); void menu_init(void); diff --git a/src/game/glass.c b/src/game/glass.c index b9a09dcc..a9453df4 100644 --- a/src/game/glass.c +++ b/src/game/glass.c @@ -1,9 +1,14 @@ #include #include -#include "math_atan2f.h" +#include #include "glass.h" -#include "random.h" +#include "image_bank.h" #include "lv.h" +#include "math_atan2f.h" +#include "objective_status.h" +#include "player.h" +#include "random.h" + #ifndef VERSION_EU #define SHARD_HORIZ_VEL_SCALE 1.5f @@ -15,7 +20,7 @@ #define SHARD_ANGVEL_SCALE 0.12f #endif -#define UNK_8007A170_MAX 20 +#define BULLET_SPARKS_MAX 20 // bss //CODE.bss:8007A160 @@ -27,17 +32,6 @@ u32 dword_CODE_bss_8007A168; //CODE.bss:8007A16C u32 dword_CODE_bss_8007A16C; -// something explosion related -// size of each item is 0x2c (see sub_GAME_7F0A3E1C) -//CODE.bss:8007A170 -bondstruct_unk_8007A170 dword_CODE_bss_8007A170[UNK_8007A170_MAX]; - -#ifndef VERSION_EU -//CODE.bss:8007A4E0 -u8 dword_CODE_bss_8007A4E0[0xBB4]; -//CODE.bss:8007B098 -u8 dword_CODE_bss_8007B098[8]; -#endif // data @@ -52,288 +46,91 @@ u32 D_80040958 = 0; u32 D_8004095C = 0; -//D:80040960 -struct rgba_u8 D_80040960[8] = { - { 0xFF, 0xFF, 0xFF, 0xFF }, - { 0xFF, 0xFF, 0xC8, 0xFF }, - { 0xFF, 0x00, 0x00, 0xFF }, - { 0xFF, 0xFF, 0xFF, 0xFF }, - { 0xFF, 0xFF, 0xFF, 0xFF }, - { 0xFF, 0xFF, 0xFF, 0xFF }, - { 0 }, - { 0 } -}; -u32 D_80040980 = 0; + // rodata - - - -#ifdef NONMATCHING -void sub_GAME_7F0A1DA0(f32*, f32*, f32*, f32*, f32, f32, f32, f32, f32, f32) { - +void sub_GAME_7F0A1DA0(coord3d *pos, coord3d *xaxis, coord3d *yaxis, coord3d *zaxis, f32 xmin, f32 xmax, f32 ymin, f32 ymax, f32 arg8, f32 arg9) +{ + f32 len; + f32 angle; + f32 rand_range; + s32 step; + s32 xcount; + coord3d shardpos; + s32 ycount; + s32 xlimit; + s32 x; + f32 shard_size; + s32 y; + s32 new_var; + coord3d basepos; + coord3d xnorm; + coord3d ynorm; + coord3d *new_var3; + xnorm.x = xaxis->x; + xnorm.y = xaxis->y; + xnorm.z = xaxis->z; + len = xnorm.x * xnorm.x; + len = sqrtf((xnorm.z * xnorm.z) + (len + (xnorm.y * xnorm.y))); + xnorm.x *= 1.0f / len; + xnorm.y *= 1.0f / len; + xnorm.z *= 1.0f / len; + xmin *= len; + xmax *= len; + ynorm.x = yaxis->x; + ynorm.y = yaxis->y; + ynorm.z = yaxis->z; + len = ynorm.x * ynorm.x; + len = sqrtf((ynorm.z * ynorm.z) + (len + (ynorm.y * ynorm.y))); + ynorm.x *= 1.0f / len; + ynorm.y *= 1.0f / len; + ynorm.z *= 1.0f / len; + ymin *= len; + ymax *= len; + if (&ymax) {} + if (&xnorm) {} + angle = atan2f(zaxis->x, zaxis->z); + arg8 = xmax - xmin; + arg9 = ymax - ymin; + new_var3 = &ynorm; + if (xmin) {} + shard_size = sqrtf((0, (arg8 * arg9) / (SHATTERED_WINDOW_PIECES_BUFFER_LEN / 2))); + step = (s32)shard_size; + new_var = step; + basepos.x = (pos->x + ((xmin + ((f32)(new_var >> 1))) * xnorm.x)) + ((*new_var3).x * (ymin + ((f32)(new_var >> 1)))); + basepos.y = (pos->y + ((xmin + ((f32)(new_var >> 1))) * xnorm.y)) + ((*new_var3).y * (ymin + ((f32)(new_var >> 1)))); + basepos.z = (pos->z + ((xmin + ((f32)(new_var >> 1))) * xnorm.z)) + ((*new_var3).z * (ymin + ((f32)(new_var >> 1)))); + chrobjSndCreatePostEventDefault(sndPlaySfx(g_musicSfxBufferPtr, 0x47, 0), pos); + y = 0; + xlimit = (xcount = (s32)(arg8 / ((f32)step))); + ycount = (s32)(arg9 / ((f32)new_var)); + if (ycount > 0) + { + f32 rand_min; + do + { + if (TRUE) + { + x = 0; + } + if (xcount > 0) + { + do + { + shardpos.x = (basepos.x + ((x * ((f32)step)) * xnorm.x)) + ((*new_var3).x * (((f32)y) * ((f32)new_var))); + shardpos.y = (basepos.y + ((x * ((f32)step)) * xnorm.y)) + ((*new_var3).y * (y * ((f32)new_var))); + shardpos.z = (basepos.z + ((x * ((f32)step)) * xnorm.z)) + ((*new_var3).z * (((f32)y) * ((f32)new_var))); + glassCreateShard(&shardpos, angle, (((randomGetNext() * 2.3283064e-10f) * 0.7f) + 0.1f) * shard_size); + x++; + } while (x != xlimit); + } + y++; + } while (y < ycount); + } } -#else -void sub_GAME_7F0A1DA0(f32*, f32*, f32*, f32*, f32, f32, f32, f32, f32, f32); -GLOBAL_ASM( -.late_rodata -glabel D_80057710 -.word 0x3dcccccd /*0.1*/ -glabel D_80057714 -.word 0x3f333333 /*0.69999999*/ -.text -glabel sub_GAME_7F0A1DA0 -/* 0D68D0 7F0A1DA0 27BDFF20 */ addiu $sp, $sp, -0xe0 -/* 0D68D4 7F0A1DA4 AFBF005C */ sw $ra, 0x5c($sp) -/* 0D68D8 7F0A1DA8 AFB50058 */ sw $s5, 0x58($sp) -/* 0D68DC 7F0A1DAC AFB40054 */ sw $s4, 0x54($sp) -/* 0D68E0 7F0A1DB0 AFB30050 */ sw $s3, 0x50($sp) -/* 0D68E4 7F0A1DB4 AFB2004C */ sw $s2, 0x4c($sp) -/* 0D68E8 7F0A1DB8 AFB10048 */ sw $s1, 0x48($sp) -/* 0D68EC 7F0A1DBC AFB00044 */ sw $s0, 0x44($sp) -/* 0D68F0 7F0A1DC0 F7BE0038 */ sdc1 $f30, 0x38($sp) -/* 0D68F4 7F0A1DC4 F7BC0030 */ sdc1 $f28, 0x30($sp) -/* 0D68F8 7F0A1DC8 F7BA0028 */ sdc1 $f26, 0x28($sp) -/* 0D68FC 7F0A1DCC F7B80020 */ sdc1 $f24, 0x20($sp) -/* 0D6900 7F0A1DD0 F7B60018 */ sdc1 $f22, 0x18($sp) -/* 0D6904 7F0A1DD4 F7B40010 */ sdc1 $f20, 0x10($sp) -/* 0D6908 7F0A1DD8 C4A40000 */ lwc1 $f4, ($a1) -/* 0D690C 7F0A1DDC 00C08025 */ move $s0, $a2 -/* 0D6910 7F0A1DE0 00808825 */ move $s1, $a0 -/* 0D6914 7F0A1DE4 E7A40090 */ swc1 $f4, 0x90($sp) -/* 0D6918 7F0A1DE8 C4A60004 */ lwc1 $f6, 4($a1) -/* 0D691C 7F0A1DEC C7AA0090 */ lwc1 $f10, 0x90($sp) -/* 0D6920 7F0A1DF0 00E09025 */ move $s2, $a3 -/* 0D6924 7F0A1DF4 E7A60094 */ swc1 $f6, 0x94($sp) -/* 0D6928 7F0A1DF8 460A5402 */ mul.s $f16, $f10, $f10 -/* 0D692C 7F0A1DFC C4A80008 */ lwc1 $f8, 8($a1) -/* 0D6930 7F0A1E00 C7B20094 */ lwc1 $f18, 0x94($sp) -/* 0D6934 7F0A1E04 E7A80098 */ swc1 $f8, 0x98($sp) -/* 0D6938 7F0A1E08 46129102 */ mul.s $f4, $f18, $f18 -/* 0D693C 7F0A1E0C C7A80098 */ lwc1 $f8, 0x98($sp) -/* 0D6940 7F0A1E10 46084282 */ mul.s $f10, $f8, $f8 -/* 0D6944 7F0A1E14 46048180 */ add.s $f6, $f16, $f4 -/* 0D6948 7F0A1E18 0C007DF8 */ jal sqrtf -/* 0D694C 7F0A1E1C 46065300 */ add.s $f12, $f10, $f6 -/* 0D6950 7F0A1E20 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D6954 7F0A1E24 4481D000 */ mtc1 $at, $f26 -/* 0D6958 7F0A1E28 C7B20090 */ lwc1 $f18, 0x90($sp) -/* 0D695C 7F0A1E2C C7A40094 */ lwc1 $f4, 0x94($sp) -/* 0D6960 7F0A1E30 4600D503 */ div.s $f20, $f26, $f0 -/* 0D6964 7F0A1E34 C7AA0098 */ lwc1 $f10, 0x98($sp) -/* 0D6968 7F0A1E38 C7B600F0 */ lwc1 $f22, 0xf0($sp) -/* 0D696C 7F0A1E3C C7BC00F4 */ lwc1 $f28, 0xf4($sp) -/* 0D6970 7F0A1E40 46149402 */ mul.s $f16, $f18, $f20 -/* 0D6974 7F0A1E44 00000000 */ nop -/* 0D6978 7F0A1E48 46142202 */ mul.s $f8, $f4, $f20 -/* 0D697C 7F0A1E4C 00000000 */ nop -/* 0D6980 7F0A1E50 46145182 */ mul.s $f6, $f10, $f20 -/* 0D6984 7F0A1E54 E7B00090 */ swc1 $f16, 0x90($sp) -/* 0D6988 7F0A1E58 4600B582 */ mul.s $f22, $f22, $f0 -/* 0D698C 7F0A1E5C E7A80094 */ swc1 $f8, 0x94($sp) -/* 0D6990 7F0A1E60 4600E702 */ mul.s $f28, $f28, $f0 -/* 0D6994 7F0A1E64 E7A60098 */ swc1 $f6, 0x98($sp) -/* 0D6998 7F0A1E68 C6120000 */ lwc1 $f18, ($s0) -/* 0D699C 7F0A1E6C E7B20084 */ swc1 $f18, 0x84($sp) -/* 0D69A0 7F0A1E70 C6100004 */ lwc1 $f16, 4($s0) -/* 0D69A4 7F0A1E74 C7A80084 */ lwc1 $f8, 0x84($sp) -/* 0D69A8 7F0A1E78 E7B00088 */ swc1 $f16, 0x88($sp) -/* 0D69AC 7F0A1E7C 46084282 */ mul.s $f10, $f8, $f8 -/* 0D69B0 7F0A1E80 C6040008 */ lwc1 $f4, 8($s0) -/* 0D69B4 7F0A1E84 C7A60088 */ lwc1 $f6, 0x88($sp) -/* 0D69B8 7F0A1E88 E7A4008C */ swc1 $f4, 0x8c($sp) -/* 0D69BC 7F0A1E8C 46063482 */ mul.s $f18, $f6, $f6 -/* 0D69C0 7F0A1E90 C7A4008C */ lwc1 $f4, 0x8c($sp) -/* 0D69C4 7F0A1E94 46042202 */ mul.s $f8, $f4, $f4 -/* 0D69C8 7F0A1E98 46125400 */ add.s $f16, $f10, $f18 -/* 0D69CC 7F0A1E9C 0C007DF8 */ jal sqrtf -/* 0D69D0 7F0A1EA0 46104300 */ add.s $f12, $f8, $f16 -/* 0D69D4 7F0A1EA4 4600D503 */ div.s $f20, $f26, $f0 -/* 0D69D8 7F0A1EA8 C7A60084 */ lwc1 $f6, 0x84($sp) -/* 0D69DC 7F0A1EAC C7B20088 */ lwc1 $f18, 0x88($sp) -/* 0D69E0 7F0A1EB0 C7A8008C */ lwc1 $f8, 0x8c($sp) -/* 0D69E4 7F0A1EB4 C7B800F8 */ lwc1 $f24, 0xf8($sp) -/* 0D69E8 7F0A1EB8 46143282 */ mul.s $f10, $f6, $f20 -/* 0D69EC 7F0A1EBC C7A600FC */ lwc1 $f6, 0xfc($sp) -/* 0D69F0 7F0A1EC0 46149102 */ mul.s $f4, $f18, $f20 -/* 0D69F4 7F0A1EC4 00000000 */ nop -/* 0D69F8 7F0A1EC8 46144402 */ mul.s $f16, $f8, $f20 -/* 0D69FC 7F0A1ECC E7AA0084 */ swc1 $f10, 0x84($sp) -/* 0D6A00 7F0A1ED0 4600C602 */ mul.s $f24, $f24, $f0 -/* 0D6A04 7F0A1ED4 E7A40088 */ swc1 $f4, 0x88($sp) -/* 0D6A08 7F0A1ED8 46003282 */ mul.s $f10, $f6, $f0 -/* 0D6A0C 7F0A1EDC E7B0008C */ swc1 $f16, 0x8c($sp) -/* 0D6A10 7F0A1EE0 E7AA00FC */ swc1 $f10, 0xfc($sp) -/* 0D6A14 7F0A1EE4 C64E0008 */ lwc1 $f14, 8($s2) -/* 0D6A18 7F0A1EE8 0FC16A8C */ jal atan2f -/* 0D6A1C 7F0A1EEC C64C0000 */ lwc1 $f12, ($s2) -/* 0D6A20 7F0A1EF0 C7B200FC */ lwc1 $f18, 0xfc($sp) -/* 0D6A24 7F0A1EF4 3C0E8008 */ lui $t6, %hi(SHATTERED_WINDOW_PIECES_BUFFER_LEN) -/* 0D6A28 7F0A1EF8 8DCEA160 */ lw $t6, %lo(SHATTERED_WINDOW_PIECES_BUFFER_LEN)($t6) -/* 0D6A2C 7F0A1EFC 4616E501 */ sub.s $f20, $f28, $f22 -/* 0D6A30 7F0A1F00 46000786 */ mov.s $f30, $f0 -/* 0D6A34 7F0A1F04 46189681 */ sub.s $f26, $f18, $f24 -/* 0D6A38 7F0A1F08 461AA102 */ mul.s $f4, $f20, $f26 -/* 0D6A3C 7F0A1F0C 05C10003 */ bgez $t6, .L7F0A1F1C -/* 0D6A40 7F0A1F10 000E7843 */ sra $t7, $t6, 1 -/* 0D6A44 7F0A1F14 25C10001 */ addiu $at, $t6, 1 -/* 0D6A48 7F0A1F18 00017843 */ sra $t7, $at, 1 -.L7F0A1F1C: -/* 0D6A4C 7F0A1F1C 448F4000 */ mtc1 $t7, $f8 -/* 0D6A50 7F0A1F20 00000000 */ nop -/* 0D6A54 7F0A1F24 46804420 */ cvt.s.w $f16, $f8 -/* 0D6A58 7F0A1F28 0C007DF8 */ jal sqrtf -/* 0D6A5C 7F0A1F2C 46102303 */ div.s $f12, $f4, $f16 -/* 0D6A60 7F0A1F30 4600018D */ trunc.w.s $f6, $f0 -/* 0D6A64 7F0A1F34 C7A80090 */ lwc1 $f8, 0x90($sp) -/* 0D6A68 7F0A1F38 E7A000B0 */ swc1 $f0, 0xb0($sp) -/* 0D6A6C 7F0A1F3C C6320000 */ lwc1 $f18, ($s1) -/* 0D6A70 7F0A1F40 44023000 */ mfc1 $v0, $f6 -/* 0D6A74 7F0A1F44 C7A60084 */ lwc1 $f6, 0x84($sp) -/* 0D6A78 7F0A1F48 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 0D6A7C 7F0A1F4C 0002C843 */ sra $t9, $v0, 1 -/* 0D6A80 7F0A1F50 44995000 */ mtc1 $t9, $f10 -/* 0D6A84 7F0A1F54 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0D6A88 7F0A1F58 24050047 */ li $a1, 71 -/* 0D6A8C 7F0A1F5C 468053A0 */ cvt.s.w $f14, $f10 -/* 0D6A90 7F0A1F60 00003025 */ move $a2, $zero -/* 0D6A94 7F0A1F64 00408025 */ move $s0, $v0 -/* 0D6A98 7F0A1F68 00409025 */ move $s2, $v0 -/* 0D6A9C 7F0A1F6C 460EB300 */ add.s $f12, $f22, $f14 -/* 0D6AA0 7F0A1F70 460EC080 */ add.s $f2, $f24, $f14 -/* 0D6AA4 7F0A1F74 46086102 */ mul.s $f4, $f12, $f8 -/* 0D6AA8 7F0A1F78 46049400 */ add.s $f16, $f18, $f4 -/* 0D6AAC 7F0A1F7C 46023282 */ mul.s $f10, $f6, $f2 -/* 0D6AB0 7F0A1F80 C7A40094 */ lwc1 $f4, 0x94($sp) -/* 0D6AB4 7F0A1F84 46046182 */ mul.s $f6, $f12, $f4 -/* 0D6AB8 7F0A1F88 46105200 */ add.s $f8, $f10, $f16 -/* 0D6ABC 7F0A1F8C C7B00088 */ lwc1 $f16, 0x88($sp) -/* 0D6AC0 7F0A1F90 E7A8009C */ swc1 $f8, 0x9c($sp) -/* 0D6AC4 7F0A1F94 46028202 */ mul.s $f8, $f16, $f2 -/* 0D6AC8 7F0A1F98 C6320004 */ lwc1 $f18, 4($s1) -/* 0D6ACC 7F0A1F9C 46069280 */ add.s $f10, $f18, $f6 -/* 0D6AD0 7F0A1FA0 C7A60098 */ lwc1 $f6, 0x98($sp) -/* 0D6AD4 7F0A1FA4 460A4100 */ add.s $f4, $f8, $f10 -/* 0D6AD8 7F0A1FA8 46066402 */ mul.s $f16, $f12, $f6 -/* 0D6ADC 7F0A1FAC C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 0D6AE0 7F0A1FB0 E7A400A0 */ swc1 $f4, 0xa0($sp) -/* 0D6AE4 7F0A1FB4 46025102 */ mul.s $f4, $f10, $f2 -/* 0D6AE8 7F0A1FB8 C6320008 */ lwc1 $f18, 8($s1) -/* 0D6AEC 7F0A1FBC 46109200 */ add.s $f8, $f18, $f16 -/* 0D6AF0 7F0A1FC0 46082180 */ add.s $f6, $f4, $f8 -/* 0D6AF4 7F0A1FC4 0C002382 */ jal sndPlaySfx -/* 0D6AF8 7F0A1FC8 E7A600A4 */ swc1 $f6, 0xa4($sp) -/* 0D6AFC 7F0A1FCC 00402025 */ move $a0, $v0 -/* 0D6B00 7F0A1FD0 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 0D6B04 7F0A1FD4 02202825 */ move $a1, $s1 -/* 0D6B08 7F0A1FD8 44922000 */ mtc1 $s2, $f4 -/* 0D6B0C 7F0A1FDC 44909000 */ mtc1 $s0, $f18 -/* 0D6B10 7F0A1FE0 00009825 */ move $s3, $zero -/* 0D6B14 7F0A1FE4 46802220 */ cvt.s.w $f8, $f4 -/* 0D6B18 7F0A1FE8 3C018005 */ lui $at, %hi(D_80057710) -/* 0D6B1C 7F0A1FEC 468095A0 */ cvt.s.w $f22, $f18 -/* 0D6B20 7F0A1FF0 E7A80068 */ swc1 $f8, 0x68($sp) -/* 0D6B24 7F0A1FF4 C7A60068 */ lwc1 $f6, 0x68($sp) -/* 0D6B28 7F0A1FF8 4606D483 */ div.s $f18, $f26, $f6 -/* 0D6B2C 7F0A1FFC 4616A403 */ div.s $f16, $f20, $f22 -/* 0D6B30 7F0A2000 4600828D */ trunc.w.s $f10, $f16 -/* 0D6B34 7F0A2004 4600940D */ trunc.w.s $f16, $f18 -/* 0D6B38 7F0A2008 44145000 */ mfc1 $s4, $f10 -/* 0D6B3C 7F0A200C 44158000 */ mfc1 $s5, $f16 -/* 0D6B40 7F0A2010 02808825 */ move $s1, $s4 -/* 0D6B44 7F0A2014 5AA00044 */ blezl $s5, .L7F0A2128 -/* 0D6B48 7F0A2018 8FBF005C */ lw $ra, 0x5c($sp) -/* 0D6B4C 7F0A201C C43C7710 */ lwc1 $f28, %lo(D_80057710)($at) -/* 0D6B50 7F0A2020 3C018005 */ lui $at, %hi(D_80057714) -/* 0D6B54 7F0A2024 C43A7714 */ lwc1 $f26, %lo(D_80057714)($at) -/* 0D6B58 7F0A2028 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D6B5C 7F0A202C 4481C000 */ mtc1 $at, $f24 -/* 0D6B60 7F0A2030 27B200C0 */ addiu $s2, $sp, 0xc0 -.L7F0A2034: -/* 0D6B64 7F0A2034 1A800037 */ blez $s4, .L7F0A2114 -/* 0D6B68 7F0A2038 00008025 */ move $s0, $zero -/* 0D6B6C 7F0A203C 44935000 */ mtc1 $s3, $f10 -/* 0D6B70 7F0A2040 C7A80068 */ lwc1 $f8, 0x68($sp) -/* 0D6B74 7F0A2044 46805120 */ cvt.s.w $f4, $f10 -/* 0D6B78 7F0A2048 46082502 */ mul.s $f20, $f4, $f8 -/* 0D6B7C 7F0A204C 00000000 */ nop -/* 0D6B80 7F0A2050 44903000 */ mtc1 $s0, $f6 -.L7F0A2054: -/* 0D6B84 7F0A2054 C7AA0090 */ lwc1 $f10, 0x90($sp) -/* 0D6B88 7F0A2058 C7B0009C */ lwc1 $f16, 0x9c($sp) -/* 0D6B8C 7F0A205C 468034A0 */ cvt.s.w $f18, $f6 -/* 0D6B90 7F0A2060 C7A60084 */ lwc1 $f6, 0x84($sp) -/* 0D6B94 7F0A2064 46169002 */ mul.s $f0, $f18, $f22 -/* 0D6B98 7F0A2068 00000000 */ nop -/* 0D6B9C 7F0A206C 460A0102 */ mul.s $f4, $f0, $f10 -/* 0D6BA0 7F0A2070 46048200 */ add.s $f8, $f16, $f4 -/* 0D6BA4 7F0A2074 46143482 */ mul.s $f18, $f6, $f20 -/* 0D6BA8 7F0A2078 C7A40094 */ lwc1 $f4, 0x94($sp) -/* 0D6BAC 7F0A207C C7B000A0 */ lwc1 $f16, 0xa0($sp) -/* 0D6BB0 7F0A2080 46040182 */ mul.s $f6, $f0, $f4 -/* 0D6BB4 7F0A2084 46089280 */ add.s $f10, $f18, $f8 -/* 0D6BB8 7F0A2088 C7A80088 */ lwc1 $f8, 0x88($sp) -/* 0D6BBC 7F0A208C 46068480 */ add.s $f18, $f16, $f6 -/* 0D6BC0 7F0A2090 E7AA00C0 */ swc1 $f10, 0xc0($sp) -/* 0D6BC4 7F0A2094 46144282 */ mul.s $f10, $f8, $f20 -/* 0D6BC8 7F0A2098 C7A60098 */ lwc1 $f6, 0x98($sp) -/* 0D6BCC 7F0A209C C7B000A4 */ lwc1 $f16, 0xa4($sp) -/* 0D6BD0 7F0A20A0 46060202 */ mul.s $f8, $f0, $f6 -/* 0D6BD4 7F0A20A4 46125100 */ add.s $f4, $f10, $f18 -/* 0D6BD8 7F0A20A8 C7B2008C */ lwc1 $f18, 0x8c($sp) -/* 0D6BDC 7F0A20AC 46088280 */ add.s $f10, $f16, $f8 -/* 0D6BE0 7F0A20B0 E7A400C4 */ swc1 $f4, 0xc4($sp) -/* 0D6BE4 7F0A20B4 46149102 */ mul.s $f4, $f18, $f20 -/* 0D6BE8 7F0A20B8 460A2180 */ add.s $f6, $f4, $f10 -/* 0D6BEC 7F0A20BC 0C002914 */ jal randomGetNext -/* 0D6BF0 7F0A20C0 E7A600C8 */ swc1 $f6, 0xc8($sp) -/* 0D6BF4 7F0A20C4 44828000 */ mtc1 $v0, $f16 -/* 0D6BF8 7F0A20C8 4405F000 */ mfc1 $a1, $f30 -/* 0D6BFC 7F0A20CC 02402025 */ move $a0, $s2 -/* 0D6C00 7F0A20D0 04410005 */ bgez $v0, .L7F0A20E8 -/* 0D6C04 7F0A20D4 46808220 */ cvt.s.w $f8, $f16 -/* 0D6C08 7F0A20D8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D6C0C 7F0A20DC 44819000 */ mtc1 $at, $f18 -/* 0D6C10 7F0A20E0 00000000 */ nop -/* 0D6C14 7F0A20E4 46124200 */ add.s $f8, $f8, $f18 -.L7F0A20E8: -/* 0D6C18 7F0A20E8 46184102 */ mul.s $f4, $f8, $f24 -/* 0D6C1C 7F0A20EC C7B000B0 */ lwc1 $f16, 0xb0($sp) -/* 0D6C20 7F0A20F0 461A2282 */ mul.s $f10, $f4, $f26 -/* 0D6C24 7F0A20F4 461C5180 */ add.s $f6, $f10, $f28 -/* 0D6C28 7F0A20F8 46103482 */ mul.s $f18, $f6, $f16 -/* 0D6C2C 7F0A20FC 44069000 */ mfc1 $a2, $f18 -/* 0D6C30 7F0A2100 0FC28858 */ jal glassCreateShard -/* 0D6C34 7F0A2104 00000000 */ nop -/* 0D6C38 7F0A2108 26100001 */ addiu $s0, $s0, 1 -/* 0D6C3C 7F0A210C 5611FFD1 */ bnel $s0, $s1, .L7F0A2054 -/* 0D6C40 7F0A2110 44903000 */ mtc1 $s0, $f6 -.L7F0A2114: -/* 0D6C44 7F0A2114 26730001 */ addiu $s3, $s3, 1 -/* 0D6C48 7F0A2118 0275082A */ slt $at, $s3, $s5 -/* 0D6C4C 7F0A211C 1420FFC5 */ bnez $at, .L7F0A2034 -/* 0D6C50 7F0A2120 00000000 */ nop -/* 0D6C54 7F0A2124 8FBF005C */ lw $ra, 0x5c($sp) -.L7F0A2128: -/* 0D6C58 7F0A2128 D7B40010 */ ldc1 $f20, 0x10($sp) -/* 0D6C5C 7F0A212C D7B60018 */ ldc1 $f22, 0x18($sp) -/* 0D6C60 7F0A2130 D7B80020 */ ldc1 $f24, 0x20($sp) -/* 0D6C64 7F0A2134 D7BA0028 */ ldc1 $f26, 0x28($sp) -/* 0D6C68 7F0A2138 D7BC0030 */ ldc1 $f28, 0x30($sp) -/* 0D6C6C 7F0A213C D7BE0038 */ ldc1 $f30, 0x38($sp) -/* 0D6C70 7F0A2140 8FB00044 */ lw $s0, 0x44($sp) -/* 0D6C74 7F0A2144 8FB10048 */ lw $s1, 0x48($sp) -/* 0D6C78 7F0A2148 8FB2004C */ lw $s2, 0x4c($sp) -/* 0D6C7C 7F0A214C 8FB30050 */ lw $s3, 0x50($sp) -/* 0D6C80 7F0A2150 8FB40054 */ lw $s4, 0x54($sp) -/* 0D6C84 7F0A2154 8FB50058 */ lw $s5, 0x58($sp) -/* 0D6C88 7F0A2158 03E00008 */ jr $ra -/* 0D6C8C 7F0A215C 27BD00E0 */ addiu $sp, $sp, 0xe0 -) -#endif /** * Creates a triangular shard of glass. @@ -422,3564 +219,91 @@ void glassCreateShard(coord3d* pos, f32 rotX, f32 shard_size) } -#ifdef NONMATCHING void update_broken_windows(void) { - -} -#else - -#if defined(LEFTOVERDEBUG) - -GLOBAL_ASM( -.late_rodata -glabel D_80057728 -.word 0x46ea6000 /*30000.0*/ -glabel D_8005772C -.word 0xc6ea6000 /*-30000.0*/ -glabel D_80057730 -.word 0x3dcccccd /*0.1*/ -glabel D_80057734 -.word 0x00000000 /*0.0*/ -glabel D_80057738 -.word 0x00000000 /*0.0*/ -glabel D_8005773C -.word 0x00000000 /*0.0*/ -.text -glabel update_broken_windows -/* 0D7404 7F0A28D4 3C028005 */ lui $v0, %hi(g_ClockTimer) -/* 0D7408 7F0A28D8 8C428374 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0D740C 7F0A28DC 3C088008 */ lui $t0, %hi(SHATTERED_WINDOW_PIECES_BUFFER_LEN) -/* 0D7410 7F0A28E0 2508A160 */ addiu $t0, %lo(SHATTERED_WINDOW_PIECES_BUFFER_LEN) # addiu $t0, $t0, -0x5ea0 -/* 0D7414 7F0A28E4 2841000F */ slti $at, $v0, 0xf -/* 0D7418 7F0A28E8 10200004 */ beqz $at, .L7F0A28FC -/* 0D741C 7F0A28EC 00001825 */ move $v1, $zero -/* 0D7420 7F0A28F0 44822000 */ mtc1 $v0, $f4 -/* 0D7424 7F0A28F4 10000004 */ b .L7F0A2908 -/* 0D7428 7F0A28F8 46802020 */ cvt.s.w $f0, $f4 -.L7F0A28FC: -/* 0D742C 7F0A28FC 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0D7430 7F0A2900 44810000 */ mtc1 $at, $f0 -/* 0D7434 7F0A2904 00000000 */ nop -.L7F0A2908: -/* 0D7438 7F0A2908 8D0E0000 */ lw $t6, ($t0) -/* 0D743C 7F0A290C 00001025 */ move $v0, $zero -/* 0D7440 7F0A2910 3C018005 */ lui $at, %hi(D_80057728) -/* 0D7444 7F0A2914 19C000C9 */ blez $t6, .L7F0A2C3C -/* 0D7448 7F0A2918 3C098008 */ lui $t1, %hi(ptr_shattered_window_pieces) -/* 0D744C 7F0A291C C4307728 */ lwc1 $f16, %lo(D_80057728)($at) -/* 0D7450 7F0A2920 3C018005 */ lui $at, %hi(D_8005772C) -/* 0D7454 7F0A2924 C42E772C */ lwc1 $f14, %lo(D_8005772C)($at) -/* 0D7458 7F0A2928 3C018005 */ lui $at, %hi(D_80057730) -/* 0D745C 7F0A292C C42C7730 */ lwc1 $f12, %lo(D_80057730)($at) -/* 0D7460 7F0A2930 2529A164 */ addiu $t1, %lo(ptr_shattered_window_pieces) # addiu $t1, $t1, -0x5e9c -/* 0D7464 7F0A2934 8D2F0000 */ lw $t7, ($t1) -.L7F0A2938: -/* 0D7468 7F0A2938 01E32021 */ addu $a0, $t7, $v1 -/* 0D746C 7F0A293C 8C850000 */ lw $a1, ($a0) -/* 0D7470 7F0A2940 58A000B9 */ blezl $a1, .L7F0A2C28 -/* 0D7474 7F0A2944 8D0C0000 */ lw $t4, ($t0) -/* 0D7478 7F0A2948 4600018D */ trunc.w.s $f6, $f0 -/* 0D747C 7F0A294C 00003825 */ move $a3, $zero -/* 0D7480 7F0A2950 44063000 */ mfc1 $a2, $f6 -/* 0D7484 7F0A2954 00000000 */ nop -/* 0D7488 7F0A2958 00A6C821 */ addu $t9, $a1, $a2 -/* 0D748C 7F0A295C AC990000 */ sw $t9, ($a0) -/* 0D7490 7F0A2960 8D2A0000 */ lw $t2, ($t1) -/* 0D7494 7F0A2964 01432021 */ addu $a0, $t2, $v1 -/* 0D7498 7F0A2968 C48A0028 */ lwc1 $f10, 0x28($a0) -/* 0D749C 7F0A296C C4880010 */ lwc1 $f8, 0x10($a0) -/* 0D74A0 7F0A2970 46005482 */ mul.s $f18, $f10, $f0 -/* 0D74A4 7F0A2974 46124100 */ add.s $f4, $f8, $f18 -/* 0D74A8 7F0A2978 E4840010 */ swc1 $f4, 0x10($a0) -/* 0D74AC 7F0A297C 8D2B0000 */ lw $t3, ($t1) -/* 0D74B0 7F0A2980 01632021 */ addu $a0, $t3, $v1 -/* 0D74B4 7F0A2984 C48A002C */ lwc1 $f10, 0x2c($a0) -/* 0D74B8 7F0A2988 C4860014 */ lwc1 $f6, 0x14($a0) -/* 0D74BC 7F0A298C 46005202 */ mul.s $f8, $f10, $f0 -/* 0D74C0 7F0A2990 46083480 */ add.s $f18, $f6, $f8 -/* 0D74C4 7F0A2994 E4920014 */ swc1 $f18, 0x14($a0) -/* 0D74C8 7F0A2998 8D2C0000 */ lw $t4, ($t1) -/* 0D74CC 7F0A299C 01832021 */ addu $a0, $t4, $v1 -/* 0D74D0 7F0A29A0 C48A0030 */ lwc1 $f10, 0x30($a0) -/* 0D74D4 7F0A29A4 C4840018 */ lwc1 $f4, 0x18($a0) -/* 0D74D8 7F0A29A8 46005182 */ mul.s $f6, $f10, $f0 -/* 0D74DC 7F0A29AC 46062200 */ add.s $f8, $f4, $f6 -/* 0D74E0 7F0A29B0 E4880018 */ swc1 $f8, 0x18($a0) -/* 0D74E4 7F0A29B4 8D2D0000 */ lw $t5, ($t1) -/* 0D74E8 7F0A29B8 01A32021 */ addu $a0, $t5, $v1 -/* 0D74EC 7F0A29BC C48A001C */ lwc1 $f10, 0x1c($a0) -/* 0D74F0 7F0A29C0 C4920004 */ lwc1 $f18, 4($a0) -/* 0D74F4 7F0A29C4 46005102 */ mul.s $f4, $f10, $f0 -/* 0D74F8 7F0A29C8 46049180 */ add.s $f6, $f18, $f4 -/* 0D74FC 7F0A29CC E4860004 */ swc1 $f6, 4($a0) -/* 0D7500 7F0A29D0 8D2E0000 */ lw $t6, ($t1) -/* 0D7504 7F0A29D4 01C32021 */ addu $a0, $t6, $v1 -/* 0D7508 7F0A29D8 C48A0024 */ lwc1 $f10, 0x24($a0) -/* 0D750C 7F0A29DC C488000C */ lwc1 $f8, 0xc($a0) -/* 0D7510 7F0A29E0 46005482 */ mul.s $f18, $f10, $f0 -/* 0D7514 7F0A29E4 46124100 */ add.s $f4, $f8, $f18 -/* 0D7518 7F0A29E8 18C0007B */ blez $a2, .L7F0A2BD8 -/* 0D751C 7F0A29EC E484000C */ swc1 $f4, 0xc($a0) -/* 0D7520 7F0A29F0 30C40003 */ andi $a0, $a2, 3 -/* 0D7524 7F0A29F4 1080001C */ beqz $a0, .L7F0A2A68 -/* 0D7528 7F0A29F8 00802825 */ move $a1, $a0 -/* 0D752C 7F0A29FC 24E70001 */ addiu $a3, $a3, 1 -/* 0D7530 7F0A2A00 10A7000E */ beq $a1, $a3, .L7F0A2A3C -/* 0D7534 7F0A2A04 8D2F0000 */ lw $t7, ($t1) -.L7F0A2A08: -/* 0D7538 7F0A2A08 01E32021 */ addu $a0, $t7, $v1 -/* 0D753C 7F0A2A0C C4920008 */ lwc1 $f18, 8($a0) -/* 0D7540 7F0A2A10 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D7544 7F0A2A14 24E70001 */ addiu $a3, $a3, 1 -/* 0D7548 7F0A2A18 460A9280 */ add.s $f10, $f18, $f10 -/* 0D754C 7F0A2A1C E48A0008 */ swc1 $f10, 8($a0) -/* 0D7550 7F0A2A20 8D380000 */ lw $t8, ($t1) -/* 0D7554 7F0A2A24 03032021 */ addu $a0, $t8, $v1 -/* 0D7558 7F0A2A28 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D755C 7F0A2A2C 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D7560 7F0A2A30 E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D7564 7F0A2A34 14A7FFF4 */ bne $a1, $a3, .L7F0A2A08 -/* 0D7568 7F0A2A38 8D2F0000 */ lw $t7, ($t1) -.L7F0A2A3C: -/* 0D756C 7F0A2A3C 01E32021 */ addu $a0, $t7, $v1 -/* 0D7570 7F0A2A40 C4920008 */ lwc1 $f18, 8($a0) -/* 0D7574 7F0A2A44 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D7578 7F0A2A48 460A9280 */ add.s $f10, $f18, $f10 -/* 0D757C 7F0A2A4C E48A0008 */ swc1 $f10, 8($a0) -/* 0D7580 7F0A2A50 8D380000 */ lw $t8, ($t1) -/* 0D7584 7F0A2A54 03032021 */ addu $a0, $t8, $v1 -/* 0D7588 7F0A2A58 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D758C 7F0A2A5C 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D7590 7F0A2A60 E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D7594 7F0A2A64 10E6005C */ beq $a3, $a2, .L7F0A2BD8 -.L7F0A2A68: -/* 0D7598 7F0A2A68 24E70004 */ addiu $a3, $a3, 4 -/* 0D759C 7F0A2A6C 10E6002F */ beq $a3, $a2, .L7F0A2B2C -/* 0D75A0 7F0A2A70 8D390000 */ lw $t9, ($t1) -.L7F0A2A74: -/* 0D75A4 7F0A2A74 03232021 */ addu $a0, $t9, $v1 -/* 0D75A8 7F0A2A78 C4920008 */ lwc1 $f18, 8($a0) -/* 0D75AC 7F0A2A7C C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D75B0 7F0A2A80 24E70004 */ addiu $a3, $a3, 4 -/* 0D75B4 7F0A2A84 460A9280 */ add.s $f10, $f18, $f10 -/* 0D75B8 7F0A2A88 E48A0008 */ swc1 $f10, 8($a0) -/* 0D75BC 7F0A2A8C 8D2A0000 */ lw $t2, ($t1) -/* 0D75C0 7F0A2A90 01432021 */ addu $a0, $t2, $v1 -/* 0D75C4 7F0A2A94 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D75C8 7F0A2A98 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D75CC 7F0A2A9C E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D75D0 7F0A2AA0 8D2B0000 */ lw $t3, ($t1) -/* 0D75D4 7F0A2AA4 01632021 */ addu $a0, $t3, $v1 -/* 0D75D8 7F0A2AA8 C48A0008 */ lwc1 $f10, 8($a0) -/* 0D75DC 7F0A2AAC C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D75E0 7F0A2AB0 46125480 */ add.s $f18, $f10, $f18 -/* 0D75E4 7F0A2AB4 E4920008 */ swc1 $f18, 8($a0) -/* 0D75E8 7F0A2AB8 8D2C0000 */ lw $t4, ($t1) -/* 0D75EC 7F0A2ABC 01832021 */ addu $a0, $t4, $v1 -/* 0D75F0 7F0A2AC0 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D75F4 7F0A2AC4 460C9481 */ sub.s $f18, $f18, $f12 -/* 0D75F8 7F0A2AC8 E4920020 */ swc1 $f18, 0x20($a0) -/* 0D75FC 7F0A2ACC 8D2D0000 */ lw $t5, ($t1) -/* 0D7600 7F0A2AD0 01A32021 */ addu $a0, $t5, $v1 -/* 0D7604 7F0A2AD4 C4920008 */ lwc1 $f18, 8($a0) -/* 0D7608 7F0A2AD8 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D760C 7F0A2ADC 460A9280 */ add.s $f10, $f18, $f10 -/* 0D7610 7F0A2AE0 E48A0008 */ swc1 $f10, 8($a0) -/* 0D7614 7F0A2AE4 8D2E0000 */ lw $t6, ($t1) -/* 0D7618 7F0A2AE8 01C32021 */ addu $a0, $t6, $v1 -/* 0D761C 7F0A2AEC C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D7620 7F0A2AF0 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D7624 7F0A2AF4 E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D7628 7F0A2AF8 8D2F0000 */ lw $t7, ($t1) -/* 0D762C 7F0A2AFC 01E32021 */ addu $a0, $t7, $v1 -/* 0D7630 7F0A2B00 C48A0008 */ lwc1 $f10, 8($a0) -/* 0D7634 7F0A2B04 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D7638 7F0A2B08 46125480 */ add.s $f18, $f10, $f18 -/* 0D763C 7F0A2B0C E4920008 */ swc1 $f18, 8($a0) -/* 0D7640 7F0A2B10 8D380000 */ lw $t8, ($t1) -/* 0D7644 7F0A2B14 03032021 */ addu $a0, $t8, $v1 -/* 0D7648 7F0A2B18 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D764C 7F0A2B1C 460C9481 */ sub.s $f18, $f18, $f12 -/* 0D7650 7F0A2B20 E4920020 */ swc1 $f18, 0x20($a0) -/* 0D7654 7F0A2B24 14E6FFD3 */ bne $a3, $a2, .L7F0A2A74 -/* 0D7658 7F0A2B28 8D390000 */ lw $t9, ($t1) -.L7F0A2B2C: -/* 0D765C 7F0A2B2C 03232021 */ addu $a0, $t9, $v1 -/* 0D7660 7F0A2B30 C4920008 */ lwc1 $f18, 8($a0) -/* 0D7664 7F0A2B34 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D7668 7F0A2B38 460A9280 */ add.s $f10, $f18, $f10 -/* 0D766C 7F0A2B3C E48A0008 */ swc1 $f10, 8($a0) -/* 0D7670 7F0A2B40 8D2A0000 */ lw $t2, ($t1) -/* 0D7674 7F0A2B44 01432021 */ addu $a0, $t2, $v1 -/* 0D7678 7F0A2B48 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D767C 7F0A2B4C 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D7680 7F0A2B50 E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D7684 7F0A2B54 8D2B0000 */ lw $t3, ($t1) -/* 0D7688 7F0A2B58 01632021 */ addu $a0, $t3, $v1 -/* 0D768C 7F0A2B5C C48A0008 */ lwc1 $f10, 8($a0) -/* 0D7690 7F0A2B60 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D7694 7F0A2B64 46125480 */ add.s $f18, $f10, $f18 -/* 0D7698 7F0A2B68 E4920008 */ swc1 $f18, 8($a0) -/* 0D769C 7F0A2B6C 8D2C0000 */ lw $t4, ($t1) -/* 0D76A0 7F0A2B70 01832021 */ addu $a0, $t4, $v1 -/* 0D76A4 7F0A2B74 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D76A8 7F0A2B78 460C9481 */ sub.s $f18, $f18, $f12 -/* 0D76AC 7F0A2B7C E4920020 */ swc1 $f18, 0x20($a0) -/* 0D76B0 7F0A2B80 8D2D0000 */ lw $t5, ($t1) -/* 0D76B4 7F0A2B84 01A32021 */ addu $a0, $t5, $v1 -/* 0D76B8 7F0A2B88 C4920008 */ lwc1 $f18, 8($a0) -/* 0D76BC 7F0A2B8C C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D76C0 7F0A2B90 460A9280 */ add.s $f10, $f18, $f10 -/* 0D76C4 7F0A2B94 E48A0008 */ swc1 $f10, 8($a0) -/* 0D76C8 7F0A2B98 8D2E0000 */ lw $t6, ($t1) -/* 0D76CC 7F0A2B9C 01C32021 */ addu $a0, $t6, $v1 -/* 0D76D0 7F0A2BA0 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D76D4 7F0A2BA4 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D76D8 7F0A2BA8 E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D76DC 7F0A2BAC 8D2F0000 */ lw $t7, ($t1) -/* 0D76E0 7F0A2BB0 01E32021 */ addu $a0, $t7, $v1 -/* 0D76E4 7F0A2BB4 C48A0008 */ lwc1 $f10, 8($a0) -/* 0D76E8 7F0A2BB8 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D76EC 7F0A2BBC 46125480 */ add.s $f18, $f10, $f18 -/* 0D76F0 7F0A2BC0 E4920008 */ swc1 $f18, 8($a0) -/* 0D76F4 7F0A2BC4 8D380000 */ lw $t8, ($t1) -/* 0D76F8 7F0A2BC8 03032021 */ addu $a0, $t8, $v1 -/* 0D76FC 7F0A2BCC C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D7700 7F0A2BD0 460C9481 */ sub.s $f18, $f18, $f12 -/* 0D7704 7F0A2BD4 E4920020 */ swc1 $f18, 0x20($a0) -.L7F0A2BD8: -/* 0D7708 7F0A2BD8 8D390000 */ lw $t9, ($t1) -/* 0D770C 7F0A2BDC 03232021 */ addu $a0, $t9, $v1 -/* 0D7710 7F0A2BE0 8C8A0000 */ lw $t2, ($a0) -/* 0D7714 7F0A2BE4 29410096 */ slti $at, $t2, 0x96 -/* 0D7718 7F0A2BE8 54200005 */ bnezl $at, .L7F0A2C00 -/* 0D771C 7F0A2BEC C4820008 */ lwc1 $f2, 8($a0) -/* 0D7720 7F0A2BF0 AC800000 */ sw $zero, ($a0) -/* 0D7724 7F0A2BF4 8D2B0000 */ lw $t3, ($t1) -/* 0D7728 7F0A2BF8 01632021 */ addu $a0, $t3, $v1 -/* 0D772C 7F0A2BFC C4820008 */ lwc1 $f2, 8($a0) -.L7F0A2C00: -/* 0D7730 7F0A2C00 460E103C */ c.lt.s $f2, $f14 -/* 0D7734 7F0A2C04 00000000 */ nop -/* 0D7738 7F0A2C08 45030006 */ bc1tl .L7F0A2C24 -/* 0D773C 7F0A2C0C AC800000 */ sw $zero, ($a0) -/* 0D7740 7F0A2C10 4602803C */ c.lt.s $f16, $f2 -/* 0D7744 7F0A2C14 00000000 */ nop -/* 0D7748 7F0A2C18 45020003 */ bc1fl .L7F0A2C28 -/* 0D774C 7F0A2C1C 8D0C0000 */ lw $t4, ($t0) -/* 0D7750 7F0A2C20 AC800000 */ sw $zero, ($a0) -.L7F0A2C24: -/* 0D7754 7F0A2C24 8D0C0000 */ lw $t4, ($t0) -.L7F0A2C28: -/* 0D7758 7F0A2C28 24420001 */ addiu $v0, $v0, 1 -/* 0D775C 7F0A2C2C 24630068 */ addiu $v1, $v1, 0x68 -/* 0D7760 7F0A2C30 004C082A */ slt $at, $v0, $t4 -/* 0D7764 7F0A2C34 5420FF40 */ bnezl $at, .L7F0A2938 -/* 0D7768 7F0A2C38 8D2F0000 */ lw $t7, ($t1) -.L7F0A2C3C: -/* 0D776C 7F0A2C3C 03E00008 */ jr $ra -/* 0D7770 7F0A2C40 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_8004CE00 -.word 0x46ea6000 /*30000.0*/ -glabel D_8004CE04 -.word 0xc6ea6000 /*-30000.0*/ -glabel D_8004CE08 -.word 0x3dcccccd /*0.1*/ -glabel D_8004CE0C -.word 0x00000000 /*0.0*/ - -.text -glabel update_broken_windows -/* 0D4804 7F0A1E14 3C028004 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8004 -/* 0D4808 7F0A1E18 8C420FF4 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0D480C 7F0A1E1C 3C088007 */ lui $t0, %hi(SHATTERED_WINDOW_PIECES_BUFFER_LEN) # $t0, 0x8007 -/* 0D4810 7F0A1E20 25088C70 */ addiu $t0, %lo(SHATTERED_WINDOW_PIECES_BUFFER_LEN) # addiu $t0, $t0, -0x7390 -/* 0D4814 7F0A1E24 2841000F */ slti $at, $v0, 0xf -/* 0D4818 7F0A1E28 10200004 */ beqz $at, .L7F0A1E3C -/* 0D481C 7F0A1E2C 00001825 */ move $v1, $zero -/* 0D4820 7F0A1E30 44822000 */ mtc1 $v0, $f4 -/* 0D4824 7F0A1E34 10000004 */ b .L7F0A1E48 -/* 0D4828 7F0A1E38 46802020 */ cvt.s.w $f0, $f4 -.L7F0A1E3C: -/* 0D482C 7F0A1E3C 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0D4830 7F0A1E40 44810000 */ mtc1 $at, $f0 -/* 0D4834 7F0A1E44 00000000 */ nop -.L7F0A1E48: -/* 0D4838 7F0A1E48 8D0E0000 */ lw $t6, ($t0) -/* 0D483C 7F0A1E4C 00001025 */ move $v0, $zero -/* 0D4840 7F0A1E50 3C018005 */ lui $at, %hi(D_8004CE00) # $at, 0x8005 -/* 0D4844 7F0A1E54 19C000C9 */ blez $t6, .L7F0A217C -/* 0D4848 7F0A1E58 3C098007 */ lui $t1, %hi(ptr_shattered_window_pieces) # $t1, 0x8007 -/* 0D484C 7F0A1E5C C430CE00 */ lwc1 $f16, %lo(D_8004CE00)($at) -/* 0D4850 7F0A1E60 3C018005 */ lui $at, %hi(D_8004CE04) # $at, 0x8005 -/* 0D4854 7F0A1E64 C42ECE04 */ lwc1 $f14, %lo(D_8004CE04)($at) -/* 0D4858 7F0A1E68 3C018005 */ lui $at, %hi(D_8004CE08) # $at, 0x8005 -/* 0D485C 7F0A1E6C C42CCE08 */ lwc1 $f12, %lo(D_8004CE08)($at) -/* 0D4860 7F0A1E70 25298C74 */ addiu $t1, %lo(ptr_shattered_window_pieces) # addiu $t1, $t1, -0x738c -/* 0D4864 7F0A1E74 8D2F0000 */ lw $t7, ($t1) -.L7F0A1E78: -/* 0D4868 7F0A1E78 01E32021 */ addu $a0, $t7, $v1 -/* 0D486C 7F0A1E7C 8C850000 */ lw $a1, ($a0) -/* 0D4870 7F0A1E80 58A000B9 */ blezl $a1, .L7F0A2168 -/* 0D4874 7F0A1E84 8D0C0000 */ lw $t4, ($t0) -/* 0D4878 7F0A1E88 4600018D */ trunc.w.s $f6, $f0 -/* 0D487C 7F0A1E8C 00003825 */ move $a3, $zero -/* 0D4880 7F0A1E90 44063000 */ mfc1 $a2, $f6 -/* 0D4884 7F0A1E94 00000000 */ nop -/* 0D4888 7F0A1E98 00A6C821 */ addu $t9, $a1, $a2 -/* 0D488C 7F0A1E9C AC990000 */ sw $t9, ($a0) -/* 0D4890 7F0A1EA0 8D2A0000 */ lw $t2, ($t1) -/* 0D4894 7F0A1EA4 01432021 */ addu $a0, $t2, $v1 -/* 0D4898 7F0A1EA8 C48A0028 */ lwc1 $f10, 0x28($a0) -/* 0D489C 7F0A1EAC C4880010 */ lwc1 $f8, 0x10($a0) -/* 0D48A0 7F0A1EB0 46005482 */ mul.s $f18, $f10, $f0 -/* 0D48A4 7F0A1EB4 46124100 */ add.s $f4, $f8, $f18 -/* 0D48A8 7F0A1EB8 E4840010 */ swc1 $f4, 0x10($a0) -/* 0D48AC 7F0A1EBC 8D2B0000 */ lw $t3, ($t1) -/* 0D48B0 7F0A1EC0 01632021 */ addu $a0, $t3, $v1 -/* 0D48B4 7F0A1EC4 C48A002C */ lwc1 $f10, 0x2c($a0) -/* 0D48B8 7F0A1EC8 C4860014 */ lwc1 $f6, 0x14($a0) -/* 0D48BC 7F0A1ECC 46005202 */ mul.s $f8, $f10, $f0 -/* 0D48C0 7F0A1ED0 46083480 */ add.s $f18, $f6, $f8 -/* 0D48C4 7F0A1ED4 E4920014 */ swc1 $f18, 0x14($a0) -/* 0D48C8 7F0A1ED8 8D2C0000 */ lw $t4, ($t1) -/* 0D48CC 7F0A1EDC 01832021 */ addu $a0, $t4, $v1 -/* 0D48D0 7F0A1EE0 C48A0030 */ lwc1 $f10, 0x30($a0) -/* 0D48D4 7F0A1EE4 C4840018 */ lwc1 $f4, 0x18($a0) -/* 0D48D8 7F0A1EE8 46005182 */ mul.s $f6, $f10, $f0 -/* 0D48DC 7F0A1EEC 46062200 */ add.s $f8, $f4, $f6 -/* 0D48E0 7F0A1EF0 E4880018 */ swc1 $f8, 0x18($a0) -/* 0D48E4 7F0A1EF4 8D2D0000 */ lw $t5, ($t1) -/* 0D48E8 7F0A1EF8 01A32021 */ addu $a0, $t5, $v1 -/* 0D48EC 7F0A1EFC C48A001C */ lwc1 $f10, 0x1c($a0) -/* 0D48F0 7F0A1F00 C4920004 */ lwc1 $f18, 4($a0) -/* 0D48F4 7F0A1F04 46005102 */ mul.s $f4, $f10, $f0 -/* 0D48F8 7F0A1F08 46049180 */ add.s $f6, $f18, $f4 -/* 0D48FC 7F0A1F0C E4860004 */ swc1 $f6, 4($a0) -/* 0D4900 7F0A1F10 8D2E0000 */ lw $t6, ($t1) -/* 0D4904 7F0A1F14 01C32021 */ addu $a0, $t6, $v1 -/* 0D4908 7F0A1F18 C48A0024 */ lwc1 $f10, 0x24($a0) -/* 0D490C 7F0A1F1C C488000C */ lwc1 $f8, 0xc($a0) -/* 0D4910 7F0A1F20 46005482 */ mul.s $f18, $f10, $f0 -/* 0D4914 7F0A1F24 46124100 */ add.s $f4, $f8, $f18 -/* 0D4918 7F0A1F28 18C0007B */ blez $a2, .L7F0A2118 -/* 0D491C 7F0A1F2C E484000C */ swc1 $f4, 0xc($a0) -/* 0D4920 7F0A1F30 30C40003 */ andi $a0, $a2, 3 -/* 0D4924 7F0A1F34 1080001C */ beqz $a0, .L7F0A1FA8 -/* 0D4928 7F0A1F38 00802825 */ move $a1, $a0 -/* 0D492C 7F0A1F3C 24E70001 */ addiu $a3, $a3, 1 -/* 0D4930 7F0A1F40 10A7000E */ beq $a1, $a3, .L7F0A1F7C -/* 0D4934 7F0A1F44 8D2F0000 */ lw $t7, ($t1) -.L7F0A1F48: -/* 0D4938 7F0A1F48 01E32021 */ addu $a0, $t7, $v1 -/* 0D493C 7F0A1F4C C4920008 */ lwc1 $f18, 8($a0) -/* 0D4940 7F0A1F50 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D4944 7F0A1F54 24E70001 */ addiu $a3, $a3, 1 -/* 0D4948 7F0A1F58 460A9280 */ add.s $f10, $f18, $f10 -/* 0D494C 7F0A1F5C E48A0008 */ swc1 $f10, 8($a0) -/* 0D4950 7F0A1F60 8D380000 */ lw $t8, ($t1) -/* 0D4954 7F0A1F64 03032021 */ addu $a0, $t8, $v1 -/* 0D4958 7F0A1F68 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D495C 7F0A1F6C 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D4960 7F0A1F70 E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D4964 7F0A1F74 14A7FFF4 */ bne $a1, $a3, .L7F0A1F48 -/* 0D4968 7F0A1F78 8D2F0000 */ lw $t7, ($t1) -.L7F0A1F7C: -/* 0D496C 7F0A1F7C 01E32021 */ addu $a0, $t7, $v1 -/* 0D4970 7F0A1F80 C4920008 */ lwc1 $f18, 8($a0) -/* 0D4974 7F0A1F84 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D4978 7F0A1F88 460A9280 */ add.s $f10, $f18, $f10 -/* 0D497C 7F0A1F8C E48A0008 */ swc1 $f10, 8($a0) -/* 0D4980 7F0A1F90 8D380000 */ lw $t8, ($t1) -/* 0D4984 7F0A1F94 03032021 */ addu $a0, $t8, $v1 -/* 0D4988 7F0A1F98 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D498C 7F0A1F9C 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D4990 7F0A1FA0 E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D4994 7F0A1FA4 10E6005C */ beq $a3, $a2, .L7F0A2118 -.L7F0A1FA8: -/* 0D4998 7F0A1FA8 24E70004 */ addiu $a3, $a3, 4 -/* 0D499C 7F0A1FAC 10E6002F */ beq $a3, $a2, .L7F0A206C -/* 0D49A0 7F0A1FB0 8D390000 */ lw $t9, ($t1) -.L7F0A1FB4: -/* 0D49A4 7F0A1FB4 03232021 */ addu $a0, $t9, $v1 -/* 0D49A8 7F0A1FB8 C4920008 */ lwc1 $f18, 8($a0) -/* 0D49AC 7F0A1FBC C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D49B0 7F0A1FC0 24E70004 */ addiu $a3, $a3, 4 -/* 0D49B4 7F0A1FC4 460A9280 */ add.s $f10, $f18, $f10 -/* 0D49B8 7F0A1FC8 E48A0008 */ swc1 $f10, 8($a0) -/* 0D49BC 7F0A1FCC 8D2A0000 */ lw $t2, ($t1) -/* 0D49C0 7F0A1FD0 01432021 */ addu $a0, $t2, $v1 -/* 0D49C4 7F0A1FD4 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D49C8 7F0A1FD8 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D49CC 7F0A1FDC E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D49D0 7F0A1FE0 8D2B0000 */ lw $t3, ($t1) -/* 0D49D4 7F0A1FE4 01632021 */ addu $a0, $t3, $v1 -/* 0D49D8 7F0A1FE8 C48A0008 */ lwc1 $f10, 8($a0) -/* 0D49DC 7F0A1FEC C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D49E0 7F0A1FF0 46125480 */ add.s $f18, $f10, $f18 -/* 0D49E4 7F0A1FF4 E4920008 */ swc1 $f18, 8($a0) -/* 0D49E8 7F0A1FF8 8D2C0000 */ lw $t4, ($t1) -/* 0D49EC 7F0A1FFC 01832021 */ addu $a0, $t4, $v1 -/* 0D49F0 7F0A2000 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D49F4 7F0A2004 460C9481 */ sub.s $f18, $f18, $f12 -/* 0D49F8 7F0A2008 E4920020 */ swc1 $f18, 0x20($a0) -/* 0D49FC 7F0A200C 8D2D0000 */ lw $t5, ($t1) -/* 0D4A00 7F0A2010 01A32021 */ addu $a0, $t5, $v1 -/* 0D4A04 7F0A2014 C4920008 */ lwc1 $f18, 8($a0) -/* 0D4A08 7F0A2018 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D4A0C 7F0A201C 460A9280 */ add.s $f10, $f18, $f10 -/* 0D4A10 7F0A2020 E48A0008 */ swc1 $f10, 8($a0) -/* 0D4A14 7F0A2024 8D2E0000 */ lw $t6, ($t1) -/* 0D4A18 7F0A2028 01C32021 */ addu $a0, $t6, $v1 -/* 0D4A1C 7F0A202C C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D4A20 7F0A2030 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D4A24 7F0A2034 E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D4A28 7F0A2038 8D2F0000 */ lw $t7, ($t1) -/* 0D4A2C 7F0A203C 01E32021 */ addu $a0, $t7, $v1 -/* 0D4A30 7F0A2040 C48A0008 */ lwc1 $f10, 8($a0) -/* 0D4A34 7F0A2044 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D4A38 7F0A2048 46125480 */ add.s $f18, $f10, $f18 -/* 0D4A3C 7F0A204C E4920008 */ swc1 $f18, 8($a0) -/* 0D4A40 7F0A2050 8D380000 */ lw $t8, ($t1) -/* 0D4A44 7F0A2054 03032021 */ addu $a0, $t8, $v1 -/* 0D4A48 7F0A2058 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D4A4C 7F0A205C 460C9481 */ sub.s $f18, $f18, $f12 -/* 0D4A50 7F0A2060 E4920020 */ swc1 $f18, 0x20($a0) -/* 0D4A54 7F0A2064 14E6FFD3 */ bne $a3, $a2, .L7F0A1FB4 -/* 0D4A58 7F0A2068 8D390000 */ lw $t9, ($t1) -.L7F0A206C: -/* 0D4A5C 7F0A206C 03232021 */ addu $a0, $t9, $v1 -/* 0D4A60 7F0A2070 C4920008 */ lwc1 $f18, 8($a0) -/* 0D4A64 7F0A2074 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D4A68 7F0A2078 460A9280 */ add.s $f10, $f18, $f10 -/* 0D4A6C 7F0A207C E48A0008 */ swc1 $f10, 8($a0) -/* 0D4A70 7F0A2080 8D2A0000 */ lw $t2, ($t1) -/* 0D4A74 7F0A2084 01432021 */ addu $a0, $t2, $v1 -/* 0D4A78 7F0A2088 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D4A7C 7F0A208C 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D4A80 7F0A2090 E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D4A84 7F0A2094 8D2B0000 */ lw $t3, ($t1) -/* 0D4A88 7F0A2098 01632021 */ addu $a0, $t3, $v1 -/* 0D4A8C 7F0A209C C48A0008 */ lwc1 $f10, 8($a0) -/* 0D4A90 7F0A20A0 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D4A94 7F0A20A4 46125480 */ add.s $f18, $f10, $f18 -/* 0D4A98 7F0A20A8 E4920008 */ swc1 $f18, 8($a0) -/* 0D4A9C 7F0A20AC 8D2C0000 */ lw $t4, ($t1) -/* 0D4AA0 7F0A20B0 01832021 */ addu $a0, $t4, $v1 -/* 0D4AA4 7F0A20B4 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D4AA8 7F0A20B8 460C9481 */ sub.s $f18, $f18, $f12 -/* 0D4AAC 7F0A20BC E4920020 */ swc1 $f18, 0x20($a0) -/* 0D4AB0 7F0A20C0 8D2D0000 */ lw $t5, ($t1) -/* 0D4AB4 7F0A20C4 01A32021 */ addu $a0, $t5, $v1 -/* 0D4AB8 7F0A20C8 C4920008 */ lwc1 $f18, 8($a0) -/* 0D4ABC 7F0A20CC C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D4AC0 7F0A20D0 460A9280 */ add.s $f10, $f18, $f10 -/* 0D4AC4 7F0A20D4 E48A0008 */ swc1 $f10, 8($a0) -/* 0D4AC8 7F0A20D8 8D2E0000 */ lw $t6, ($t1) -/* 0D4ACC 7F0A20DC 01C32021 */ addu $a0, $t6, $v1 -/* 0D4AD0 7F0A20E0 C48A0020 */ lwc1 $f10, 0x20($a0) -/* 0D4AD4 7F0A20E4 460C5281 */ sub.s $f10, $f10, $f12 -/* 0D4AD8 7F0A20E8 E48A0020 */ swc1 $f10, 0x20($a0) -/* 0D4ADC 7F0A20EC 8D2F0000 */ lw $t7, ($t1) -/* 0D4AE0 7F0A20F0 01E32021 */ addu $a0, $t7, $v1 -/* 0D4AE4 7F0A20F4 C48A0008 */ lwc1 $f10, 8($a0) -/* 0D4AE8 7F0A20F8 C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D4AEC 7F0A20FC 46125480 */ add.s $f18, $f10, $f18 -/* 0D4AF0 7F0A2100 E4920008 */ swc1 $f18, 8($a0) -/* 0D4AF4 7F0A2104 8D380000 */ lw $t8, ($t1) -/* 0D4AF8 7F0A2108 03032021 */ addu $a0, $t8, $v1 -/* 0D4AFC 7F0A210C C4920020 */ lwc1 $f18, 0x20($a0) -/* 0D4B00 7F0A2110 460C9481 */ sub.s $f18, $f18, $f12 -/* 0D4B04 7F0A2114 E4920020 */ swc1 $f18, 0x20($a0) -.L7F0A2118: -/* 0D4B08 7F0A2118 8D390000 */ lw $t9, ($t1) -/* 0D4B0C 7F0A211C 03232021 */ addu $a0, $t9, $v1 -/* 0D4B10 7F0A2120 8C8A0000 */ lw $t2, ($a0) -/* 0D4B14 7F0A2124 29410096 */ slti $at, $t2, 0x96 -/* 0D4B18 7F0A2128 54200005 */ bnezl $at, .L7F0A2140 -/* 0D4B1C 7F0A212C C4820008 */ lwc1 $f2, 8($a0) -/* 0D4B20 7F0A2130 AC800000 */ sw $zero, ($a0) -/* 0D4B24 7F0A2134 8D2B0000 */ lw $t3, ($t1) -/* 0D4B28 7F0A2138 01632021 */ addu $a0, $t3, $v1 -/* 0D4B2C 7F0A213C C4820008 */ lwc1 $f2, 8($a0) -.L7F0A2140: -/* 0D4B30 7F0A2140 460E103C */ c.lt.s $f2, $f14 -/* 0D4B34 7F0A2144 00000000 */ nop -/* 0D4B38 7F0A2148 45030006 */ bc1tl .L7F0A2164 -/* 0D4B3C 7F0A214C AC800000 */ sw $zero, ($a0) -/* 0D4B40 7F0A2150 4602803C */ c.lt.s $f16, $f2 -/* 0D4B44 7F0A2154 00000000 */ nop -/* 0D4B48 7F0A2158 45020003 */ bc1fl .L7F0A2168 -/* 0D4B4C 7F0A215C 8D0C0000 */ lw $t4, ($t0) -/* 0D4B50 7F0A2160 AC800000 */ sw $zero, ($a0) -.L7F0A2164: -/* 0D4B54 7F0A2164 8D0C0000 */ lw $t4, ($t0) -.L7F0A2168: -/* 0D4B58 7F0A2168 24420001 */ addiu $v0, $v0, 1 -/* 0D4B5C 7F0A216C 24630068 */ addiu $v1, $v1, 0x68 -/* 0D4B60 7F0A2170 004C082A */ slt $at, $v0, $t4 -/* 0D4B64 7F0A2174 5420FF40 */ bnezl $at, .L7F0A1E78 -/* 0D4B68 7F0A2178 8D2F0000 */ lw $t7, ($t1) -.L7F0A217C: -/* 0D4B6C 7F0A217C 03E00008 */ jr $ra -/* 0D4B70 7F0A2180 00000000 */ nop -) -#endif -#endif - - - - - -#ifdef NONMATCHING -Gfx * sub_GAME_7F0A2C44(Gfx *arg0) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A2C44 -/* 0D7774 7F0A2C44 27BDFF30 */ addiu $sp, $sp, -0xd0 -/* 0D7778 7F0A2C48 3C058009 */ lui $a1, %hi(glassoverlayimage) -/* 0D777C 7F0A2C4C 8CA5D11C */ lw $a1, %lo(glassoverlayimage)($a1) -/* 0D7780 7F0A2C50 AFBF0044 */ sw $ra, 0x44($sp) -/* 0D7784 7F0A2C54 AFA400D0 */ sw $a0, 0xd0($sp) -/* 0D7788 7F0A2C58 240E0002 */ li $t6, 2 -/* 0D778C 7F0A2C5C AFBE0040 */ sw $fp, 0x40($sp) -/* 0D7790 7F0A2C60 AFB7003C */ sw $s7, 0x3c($sp) -/* 0D7794 7F0A2C64 AFB60038 */ sw $s6, 0x38($sp) -/* 0D7798 7F0A2C68 AFB50034 */ sw $s5, 0x34($sp) -/* 0D779C 7F0A2C6C AFB40030 */ sw $s4, 0x30($sp) -/* 0D77A0 7F0A2C70 AFB3002C */ sw $s3, 0x2c($sp) -/* 0D77A4 7F0A2C74 AFB20028 */ sw $s2, 0x28($sp) -/* 0D77A8 7F0A2C78 AFB10024 */ sw $s1, 0x24($sp) -/* 0D77AC 7F0A2C7C AFB00020 */ sw $s0, 0x20($sp) -/* 0D77B0 7F0A2C80 AFAE0010 */ sw $t6, 0x10($sp) -/* 0D77B4 7F0A2C84 27A400D0 */ addiu $a0, $sp, 0xd0 -/* 0D77B8 7F0A2C88 24060002 */ li $a2, 2 -/* 0D77BC 7F0A2C8C 24070001 */ li $a3, 1 -/* 0D77C0 7F0A2C90 0FC1DB5A */ jal texSelect -/* 0D77C4 7F0A2C94 24A5000C */ addiu $a1, $a1, 0xc -/* 0D77C8 7F0A2C98 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0D77CC 7F0A2C9C 3C19BB00 */ lui $t9, (0xBB001001 >> 16) # lui $t9, 0xbb00 -/* 0D77D0 7F0A2CA0 3C080D80 */ lui $t0, (0x0D800D80 >> 16) # lui $t0, 0xd80 -/* 0D77D4 7F0A2CA4 25F80008 */ addiu $t8, $t7, 8 -/* 0D77D8 7F0A2CA8 AFB800D0 */ sw $t8, 0xd0($sp) -/* 0D77DC 7F0A2CAC 35080D80 */ ori $t0, (0x0D800D80 & 0xFFFF) # ori $t0, $t0, 0xd80 -/* 0D77E0 7F0A2CB0 37391001 */ ori $t9, (0xBB001001 & 0xFFFF) # ori $t9, $t9, 0x1001 -/* 0D77E4 7F0A2CB4 ADF90000 */ sw $t9, ($t7) -/* 0D77E8 7F0A2CB8 ADE80004 */ sw $t0, 4($t7) -/* 0D77EC 7F0A2CBC 8FA900D0 */ lw $t1, 0xd0($sp) -/* 0D77F0 7F0A2CC0 3C0BBA00 */ lui $t3, (0xBA001402 >> 16) # lui $t3, 0xba00 -/* 0D77F4 7F0A2CC4 356B1402 */ ori $t3, (0xBA001402 & 0xFFFF) # ori $t3, $t3, 0x1402 -/* 0D77F8 7F0A2CC8 252A0008 */ addiu $t2, $t1, 8 -/* 0D77FC 7F0A2CCC AFAA00D0 */ sw $t2, 0xd0($sp) -/* 0D7800 7F0A2CD0 3C0C0010 */ lui $t4, 0x10 -/* 0D7804 7F0A2CD4 AD2C0004 */ sw $t4, 4($t1) -/* 0D7808 7F0A2CD8 AD2B0000 */ sw $t3, ($t1) -/* 0D780C 7F0A2CDC 8FAD00D0 */ lw $t5, 0xd0($sp) -/* 0D7810 7F0A2CE0 3C0FBA00 */ lui $t7, (0xBA001001 >> 16) # lui $t7, 0xba00 -/* 0D7814 7F0A2CE4 35EF1001 */ ori $t7, (0xBA001001 & 0xFFFF) # ori $t7, $t7, 0x1001 -/* 0D7818 7F0A2CE8 25AE0008 */ addiu $t6, $t5, 8 -/* 0D781C 7F0A2CEC AFAE00D0 */ sw $t6, 0xd0($sp) -/* 0D7820 7F0A2CF0 3C180001 */ lui $t8, 1 -/* 0D7824 7F0A2CF4 ADB80004 */ sw $t8, 4($t5) -/* 0D7828 7F0A2CF8 ADAF0000 */ sw $t7, ($t5) -/* 0D782C 7F0A2CFC 8FB900D0 */ lw $t9, 0xd0($sp) -/* 0D7830 7F0A2D00 3C09B600 */ lui $t1, 0xb600 -/* 0D7834 7F0A2D04 240A3000 */ li $t2, 12288 -/* 0D7838 7F0A2D08 27280008 */ addiu $t0, $t9, 8 -/* 0D783C 7F0A2D0C AFA800D0 */ sw $t0, 0xd0($sp) -/* 0D7840 7F0A2D10 AF2A0004 */ sw $t2, 4($t9) -/* 0D7844 7F0A2D14 AF290000 */ sw $t1, ($t9) -/* 0D7848 7F0A2D18 8FAB00D0 */ lw $t3, 0xd0($sp) -/* 0D784C 7F0A2D1C 3C0DBA00 */ lui $t5, (0xBA000C02 >> 16) # lui $t5, 0xba00 -/* 0D7850 7F0A2D20 35AD0C02 */ ori $t5, (0xBA000C02 & 0xFFFF) # ori $t5, $t5, 0xc02 -/* 0D7854 7F0A2D24 256C0008 */ addiu $t4, $t3, 8 -/* 0D7858 7F0A2D28 AFAC00D0 */ sw $t4, 0xd0($sp) -/* 0D785C 7F0A2D2C 240E2000 */ li $t6, 8192 -/* 0D7860 7F0A2D30 AD6E0004 */ sw $t6, 4($t3) -/* 0D7864 7F0A2D34 AD6D0000 */ sw $t5, ($t3) -/* 0D7868 7F0A2D38 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0D786C 7F0A2D3C 3C19B700 */ lui $t9, 0xb700 -/* 0D7870 7F0A2D40 3C080006 */ lui $t0, 6 -/* 0D7874 7F0A2D44 25F80008 */ addiu $t8, $t7, 8 -/* 0D7878 7F0A2D48 AFB800D0 */ sw $t8, 0xd0($sp) -/* 0D787C 7F0A2D4C ADE80004 */ sw $t0, 4($t7) -/* 0D7880 7F0A2D50 ADF90000 */ sw $t9, ($t7) -/* 0D7884 7F0A2D54 8FB000D0 */ lw $s0, 0xd0($sp) -/* 0D7888 7F0A2D58 3C0B0103 */ lui $t3, (0x01030040 >> 16) # lui $t3, 0x103 -/* 0D788C 7F0A2D5C 356B0040 */ ori $t3, (0x01030040 & 0xFFFF) # ori $t3, $t3, 0x40 -/* 0D7890 7F0A2D60 260A0008 */ addiu $t2, $s0, 8 -/* 0D7894 7F0A2D64 AFAA00D0 */ sw $t2, 0xd0($sp) -/* 0D7898 7F0A2D68 0FC1E0E5 */ jal get_BONDdata_field_10E0 -/* 0D789C 7F0A2D6C AE0B0000 */ sw $t3, ($s0) -/* 0D78A0 7F0A2D70 0C003A2C */ jal osVirtualToPhysical -/* 0D78A4 7F0A2D74 00402025 */ move $a0, $v0 -/* 0D78A8 7F0A2D78 AE020004 */ sw $v0, 4($s0) -/* 0D78AC 7F0A2D7C 3C048008 */ lui $a0, %hi(SHATTERED_WINDOW_PIECES_BUFFER_LEN) -/* 0D78B0 7F0A2D80 8C84A160 */ lw $a0, %lo(SHATTERED_WINDOW_PIECES_BUFFER_LEN)($a0) -/* 0D78B4 7F0A2D84 00008025 */ move $s0, $zero -/* 0D78B8 7F0A2D88 0000A025 */ move $s4, $zero -/* 0D78BC 7F0A2D8C 18800044 */ blez $a0, .L7F0A2EA0 -/* 0D78C0 7F0A2D90 3C170420 */ lui $s7, (0x04200030 >> 16) # lui $s7, 0x420 -/* 0D78C4 7F0A2D94 3C168008 */ lui $s6, %hi(g_CurrentPlayer) -/* 0D78C8 7F0A2D98 3C138008 */ lui $s3, %hi(ptr_shattered_window_pieces) -/* 0D78CC 7F0A2D9C 2673A164 */ addiu $s3, %lo(ptr_shattered_window_pieces) # addiu $s3, $s3, -0x5e9c -/* 0D78D0 7F0A2DA0 26D6A0B0 */ addiu $s6, %lo(g_CurrentPlayer) # addiu $s6, $s6, -0x5f50 -/* 0D78D4 7F0A2DA4 3C1EBF00 */ lui $fp, 0xbf00 -/* 0D78D8 7F0A2DA8 36F70030 */ ori $s7, (0x04200030 & 0xFFFF) # ori $s7, $s7, 0x30 -/* 0D78DC 7F0A2DAC 27B50090 */ addiu $s5, $sp, 0x90 -.L7F0A2DB0: -/* 0D78E0 7F0A2DB0 8E6C0000 */ lw $t4, ($s3) -/* 0D78E4 7F0A2DB4 01906821 */ addu $t5, $t4, $s0 -/* 0D78E8 7F0A2DB8 8DAE0000 */ lw $t6, ($t5) -/* 0D78EC 7F0A2DBC 59C00035 */ blezl $t6, .L7F0A2E94 -/* 0D78F0 7F0A2DC0 26940001 */ addiu $s4, $s4, 1 -/* 0D78F4 7F0A2DC4 0FC2F5B8 */ jal dynAllocateMatrix -/* 0D78F8 7F0A2DC8 00000000 */ nop -/* 0D78FC 7F0A2DCC 8E6F0000 */ lw $t7, ($s3) -/* 0D7900 7F0A2DD0 00408825 */ move $s1, $v0 -/* 0D7904 7F0A2DD4 02A03025 */ move $a2, $s5 -/* 0D7908 7F0A2DD8 01F01821 */ addu $v1, $t7, $s0 -/* 0D790C 7F0A2DDC 24640004 */ addiu $a0, $v1, 4 -/* 0D7910 7F0A2DE0 0FC1624B */ jal matrix_4x4_set_position_and_rotation_around_xyz -/* 0D7914 7F0A2DE4 24650010 */ addiu $a1, $v1, 0x10 -/* 0D7918 7F0A2DE8 8EC20000 */ lw $v0, ($s6) -/* 0D791C 7F0A2DEC C7A400C0 */ lwc1 $f4, 0xc0($sp) -/* 0D7920 7F0A2DF0 C7AA00C4 */ lwc1 $f10, 0xc4($sp) -/* 0D7924 7F0A2DF4 C4460038 */ lwc1 $f6, 0x38($v0) -/* 0D7928 7F0A2DF8 02A02025 */ move $a0, $s5 -/* 0D792C 7F0A2DFC 02202825 */ move $a1, $s1 -/* 0D7930 7F0A2E00 46062201 */ sub.s $f8, $f4, $f6 -/* 0D7934 7F0A2E04 C7A400C8 */ lwc1 $f4, 0xc8($sp) -/* 0D7938 7F0A2E08 E7A800C0 */ swc1 $f8, 0xc0($sp) -/* 0D793C 7F0A2E0C C450003C */ lwc1 $f16, 0x3c($v0) -/* 0D7940 7F0A2E10 46105481 */ sub.s $f18, $f10, $f16 -/* 0D7944 7F0A2E14 E7B200C4 */ swc1 $f18, 0xc4($sp) -/* 0D7948 7F0A2E18 C4460040 */ lwc1 $f6, 0x40($v0) -/* 0D794C 7F0A2E1C 46062201 */ sub.s $f8, $f4, $f6 -/* 0D7950 7F0A2E20 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 0D7954 7F0A2E24 E7A800C8 */ swc1 $f8, 0xc8($sp) -/* 0D7958 7F0A2E28 8FB200D0 */ lw $s2, 0xd0($sp) -/* 0D795C 7F0A2E2C 3C080102 */ lui $t0, (0x01020040 >> 16) # lui $t0, 0x102 -/* 0D7960 7F0A2E30 35080040 */ ori $t0, (0x01020040 & 0xFFFF) # ori $t0, $t0, 0x40 -/* 0D7964 7F0A2E34 26590008 */ addiu $t9, $s2, 8 -/* 0D7968 7F0A2E38 AFB900D0 */ sw $t9, 0xd0($sp) -/* 0D796C 7F0A2E3C 02202025 */ move $a0, $s1 -/* 0D7970 7F0A2E40 0C003A2C */ jal osVirtualToPhysical -/* 0D7974 7F0A2E44 AE480000 */ sw $t0, ($s2) -/* 0D7978 7F0A2E48 AE420004 */ sw $v0, 4($s2) -/* 0D797C 7F0A2E4C 8FB100D0 */ lw $s1, 0xd0($sp) -/* 0D7980 7F0A2E50 262A0008 */ addiu $t2, $s1, 8 -/* 0D7984 7F0A2E54 AFAA00D0 */ sw $t2, 0xd0($sp) -/* 0D7988 7F0A2E58 AE370000 */ sw $s7, ($s1) -/* 0D798C 7F0A2E5C 8E6B0000 */ lw $t3, ($s3) -/* 0D7990 7F0A2E60 01702021 */ addu $a0, $t3, $s0 -/* 0D7994 7F0A2E64 0C003A2C */ jal osVirtualToPhysical -/* 0D7998 7F0A2E68 24840038 */ addiu $a0, $a0, 0x38 -/* 0D799C 7F0A2E6C AE220004 */ sw $v0, 4($s1) -/* 0D79A0 7F0A2E70 8FAC00D0 */ lw $t4, 0xd0($sp) -/* 0D79A4 7F0A2E74 240E0A14 */ li $t6, 2580 -/* 0D79A8 7F0A2E78 3C048008 */ lui $a0, %hi(SHATTERED_WINDOW_PIECES_BUFFER_LEN) -/* 0D79AC 7F0A2E7C 258D0008 */ addiu $t5, $t4, 8 -/* 0D79B0 7F0A2E80 AFAD00D0 */ sw $t5, 0xd0($sp) -/* 0D79B4 7F0A2E84 AD8E0004 */ sw $t6, 4($t4) -/* 0D79B8 7F0A2E88 AD9E0000 */ sw $fp, ($t4) -/* 0D79BC 7F0A2E8C 8C84A160 */ lw $a0, %lo(SHATTERED_WINDOW_PIECES_BUFFER_LEN)($a0) -/* 0D79C0 7F0A2E90 26940001 */ addiu $s4, $s4, 1 -.L7F0A2E94: -/* 0D79C4 7F0A2E94 0284082A */ slt $at, $s4, $a0 -/* 0D79C8 7F0A2E98 1420FFC5 */ bnez $at, .L7F0A2DB0 -/* 0D79CC 7F0A2E9C 26100068 */ addiu $s0, $s0, 0x68 -.L7F0A2EA0: -/* 0D79D0 7F0A2EA0 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0D79D4 7F0A2EA4 3C19B600 */ lui $t9, 0xb600 -/* 0D79D8 7F0A2EA8 3C080006 */ lui $t0, 6 -/* 0D79DC 7F0A2EAC 25F80008 */ addiu $t8, $t7, 8 -/* 0D79E0 7F0A2EB0 AFB800D0 */ sw $t8, 0xd0($sp) -/* 0D79E4 7F0A2EB4 ADE80004 */ sw $t0, 4($t7) -/* 0D79E8 7F0A2EB8 ADF90000 */ sw $t9, ($t7) -/* 0D79EC 7F0A2EBC 8FB000D0 */ lw $s0, 0xd0($sp) -/* 0D79F0 7F0A2EC0 3C0B0103 */ lui $t3, (0x01030040 >> 16) # lui $t3, 0x103 -/* 0D79F4 7F0A2EC4 356B0040 */ ori $t3, (0x01030040 & 0xFFFF) # ori $t3, $t3, 0x40 -/* 0D79F8 7F0A2EC8 260A0008 */ addiu $t2, $s0, 8 -/* 0D79FC 7F0A2ECC AFAA00D0 */ sw $t2, 0xd0($sp) -/* 0D7A00 7F0A2ED0 0FC1E0DD */ jal currentPlayerGetProjectionMatrix -/* 0D7A04 7F0A2ED4 AE0B0000 */ sw $t3, ($s0) -/* 0D7A08 7F0A2ED8 AE020004 */ sw $v0, 4($s0) -/* 0D7A0C 7F0A2EDC 8FB100D0 */ lw $s1, 0xd0($sp) -/* 0D7A10 7F0A2EE0 3C0E0102 */ lui $t6, (0x01020040 >> 16) # lui $t6, 0x102 -/* 0D7A14 7F0A2EE4 35CE0040 */ ori $t6, (0x01020040 & 0xFFFF) # ori $t6, $t6, 0x40 -/* 0D7A18 7F0A2EE8 262D0008 */ addiu $t5, $s1, 8 -/* 0D7A1C 7F0A2EEC AFAD00D0 */ sw $t5, 0xd0($sp) -/* 0D7A20 7F0A2EF0 0FC1E0D5 */ jal currentPlayerGetMatrix10C8 -/* 0D7A24 7F0A2EF4 AE2E0000 */ sw $t6, ($s1) -/* 0D7A28 7F0A2EF8 AE220004 */ sw $v0, 4($s1) -/* 0D7A2C 7F0A2EFC 8FBF0044 */ lw $ra, 0x44($sp) -/* 0D7A30 7F0A2F00 8FBE0040 */ lw $fp, 0x40($sp) -/* 0D7A34 7F0A2F04 8FB7003C */ lw $s7, 0x3c($sp) -/* 0D7A38 7F0A2F08 8FB60038 */ lw $s6, 0x38($sp) -/* 0D7A3C 7F0A2F0C 8FB50034 */ lw $s5, 0x34($sp) -/* 0D7A40 7F0A2F10 8FB40030 */ lw $s4, 0x30($sp) -/* 0D7A44 7F0A2F14 8FB3002C */ lw $s3, 0x2c($sp) -/* 0D7A48 7F0A2F18 8FB20028 */ lw $s2, 0x28($sp) -/* 0D7A4C 7F0A2F1C 8FB10024 */ lw $s1, 0x24($sp) -/* 0D7A50 7F0A2F20 8FB00020 */ lw $s0, 0x20($sp) -/* 0D7A54 7F0A2F24 8FA200D0 */ lw $v0, 0xd0($sp) -/* 0D7A58 7F0A2F28 03E00008 */ jr $ra -/* 0D7A5C 7F0A2F2C 27BD00D0 */ addiu $sp, $sp, 0xd0 -) -#endif - - - - - -#ifdef NONMATCHING -// https://decomp.me/scratch/68YEL 85.92% -void sub_GAME_7F0A2F30(struct damage_display_parent *arg0, s32 arg1, s32 arg2, f32 arg3) -{ - s32 sp80; - f32 sp74; - s32 i; - s32 var_s4; - - f32 temp_f24; // is this real? (probably) - - f32 temp_f4; // is this real? (maybe not) - s16 temp_s1; // is this real? (maybe not) - - arg3 *= 8.0f; - sp74 = (f32) arg2; - sp80 = 0; - - for (i=0; i<23; i++) - { - temp_f24 = ((f32) (s32) (142.5 - (f64) sp80) * 3.1415927f * 2.0f) / 360.0f; - - for (var_s4 = 0; var_s4 < 2; var_s4++) - { - temp_s1 = (s16) (s32) (((sinf(temp_f24) * 4.0f * 130.0f * (6 - var_s4)) / 5.0f) * sp74); - temp_f4 = cosf(temp_f24) * 4.0f; - - arg0[i].items[var_s4].unk00 = (temp_s1 + 1); - arg0[i].items[var_s4].unk02 = 0; - arg0[i].items[var_s4].unk04 = (s16) -(s32) (((temp_f4) * 130.0f * (6 - var_s4)) / 5.0f); - arg0[i].items[var_s4].unk06 = 0; - arg0[i].items[var_s4].unk08 = 0; - arg0[i].items[var_s4].unk0A = 0; - arg0[i].items[var_s4].unk0C = 0xFF; - arg0[i].items[var_s4].unk0D = 0xFF; - arg0[i].items[var_s4].unk0E = 0xFF; - - if (arg2 > 0) - { - arg0[i].items[var_s4].unk0C = 96.0f - (cosf(temp_f24) * 96.0f); - arg0[i].items[var_s4].unk0D = 127.0f - (cosf(temp_f24) * 127.0f); - arg0[i].items[var_s4].unk0E = 0xFF; - } - else if (arg2 < 0) - { - arg0[i].items[var_s4].unk0D = 127.0f - (cosf(temp_f24) * 127.0f); - arg0[i].items[var_s4].unk0E = 32.0f - (cosf(temp_f24) * 32.0f); - } - - if (i < 10) - { - if ((((s32) arg3 * 2) - 1) >= i) - { - arg0[i].items[var_s4].unk0F = 0xFF; - } - else if ((i < (s32) (2.0f * arg3)) && ((((s32) arg3 * 2) - 1) < i)) - { - arg0[i].items[var_s4].unk0F = (s8) ((s32) ((arg3 - (f32) (s32) arg3) * 207.0f) + 0x30); - } - else - { - arg0[i].items[var_s4].unk0F = 0x30; - } - } - else if (i >= 10) - { - if ((f32) i <= (9.0f + ((arg3 - 5.0f) * 4.0f))) - { - arg0[i].items[var_s4].unk0F = 0xFF; - } - else if ((((s32) (((arg3 - 5.0f) * 4.0f) + 0.5f) + 9) >= i) && ((((s32) (arg3 - 5.0f) * 2) + 8) < i)) - { - arg0[i].items[var_s4].unk0F = (s8) ((s32) ((arg3 - (f32) (s32) arg3) * 207.0f) + 0x30); - } - else - { - arg0[i].items[var_s4].unk0F = 0x30; - } - } - } - - sp80 += 5; - } -} -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_80057740 -.word 0x4061d000, 0x00000000 /*142.5*/ -glabel D_80057748 -.word 0x40490fdb /*3.1415927*/ -.text -glabel sub_GAME_7F0A2F30 -/* 0D7A60 7F0A2F30 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 0D7A64 7F0A2F34 AFB60060 */ sw $s6, 0x60($sp) -/* 0D7A68 7F0A2F38 00C0B025 */ move $s6, $a2 -/* 0D7A6C 7F0A2F3C 44963000 */ mtc1 $s6, $f6 -/* 0D7A70 7F0A2F40 3C014100 */ li $at, 0x41000000 # 8.000000 -/* 0D7A74 7F0A2F44 44812000 */ mtc1 $at, $f4 -/* 0D7A78 7F0A2F48 46803220 */ cvt.s.w $f8, $f6 -/* 0D7A7C 7F0A2F4C F7BE0040 */ sdc1 $f30, 0x40($sp) -/* 0D7A80 7F0A2F50 3C014302 */ li $at, 0x43020000 # 130.000000 -/* 0D7A84 7F0A2F54 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0D7A88 7F0A2F58 4481F000 */ mtc1 $at, $f30 -/* 0D7A8C 7F0A2F5C 4487B000 */ mtc1 $a3, $f22 -/* 0D7A90 7F0A2F60 F7BC0038 */ sdc1 $f28, 0x38($sp) -/* 0D7A94 7F0A2F64 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0D7A98 7F0A2F68 4481E000 */ mtc1 $at, $f28 -/* 0D7A9C 7F0A2F6C F7BA0030 */ sdc1 $f26, 0x30($sp) -/* 0D7AA0 7F0A2F70 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0D7AA4 7F0A2F74 AFBE0068 */ sw $fp, 0x68($sp) -/* 0D7AA8 7F0A2F78 AFB70064 */ sw $s7, 0x64($sp) -/* 0D7AAC 7F0A2F7C AFB5005C */ sw $s5, 0x5c($sp) -/* 0D7AB0 7F0A2F80 AFB30054 */ sw $s3, 0x54($sp) -/* 0D7AB4 7F0A2F84 AFB20050 */ sw $s2, 0x50($sp) -/* 0D7AB8 7F0A2F88 AFB00048 */ sw $s0, 0x48($sp) -/* 0D7ABC 7F0A2F8C 4481D000 */ mtc1 $at, $f26 -/* 0D7AC0 7F0A2F90 4604B582 */ mul.s $f22, $f22, $f4 -/* 0D7AC4 7F0A2F94 00808025 */ move $s0, $a0 -/* 0D7AC8 7F0A2F98 AFBF006C */ sw $ra, 0x6c($sp) -/* 0D7ACC 7F0A2F9C AFB40058 */ sw $s4, 0x58($sp) -/* 0D7AD0 7F0A2FA0 AFB1004C */ sw $s1, 0x4c($sp) -/* 0D7AD4 7F0A2FA4 F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0D7AD8 7F0A2FA8 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0D7ADC 7F0A2FAC AFA5009C */ sw $a1, 0x9c($sp) -/* 0D7AE0 7F0A2FB0 00009025 */ move $s2, $zero -/* 0D7AE4 7F0A2FB4 241300FF */ li $s3, 255 -/* 0D7AE8 7F0A2FB8 24150030 */ li $s5, 48 -/* 0D7AEC 7F0A2FBC 24170006 */ li $s7, 6 -/* 0D7AF0 7F0A2FC0 241E0002 */ li $fp, 2 -/* 0D7AF4 7F0A2FC4 E7A80074 */ swc1 $f8, 0x74($sp) -/* 0D7AF8 7F0A2FC8 AFA00080 */ sw $zero, 0x80($sp) -.L7F0A2FCC: -/* 0D7AFC 7F0A2FCC 8FA20080 */ lw $v0, 0x80($sp) -/* 0D7B00 7F0A2FD0 3C018005 */ lui $at, %hi(D_80057740) -/* 0D7B04 7F0A2FD4 D42A7740 */ ldc1 $f10, %lo(D_80057740)($at) -/* 0D7B08 7F0A2FD8 44828000 */ mtc1 $v0, $f16 -/* 0D7B0C 7F0A2FDC 3C018005 */ lui $at, %hi(D_80057748) -/* 0D7B10 7F0A2FE0 0000A025 */ move $s4, $zero -/* 0D7B14 7F0A2FE4 468084A1 */ cvt.d.w $f18, $f16 -/* 0D7B18 7F0A2FE8 46325101 */ sub.d $f4, $f10, $f18 -/* 0D7B1C 7F0A2FEC C42A7748 */ lwc1 $f10, %lo(D_80057748)($at) -/* 0D7B20 7F0A2FF0 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0D7B24 7F0A2FF4 4620218D */ trunc.w.d $f6, $f4 -/* 0D7B28 7F0A2FF8 44812000 */ mtc1 $at, $f4 -/* 0D7B2C 7F0A2FFC 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0D7B30 7F0A3000 440F3000 */ mfc1 $t7, $f6 -/* 0D7B34 7F0A3004 00000000 */ nop -/* 0D7B38 7F0A3008 448F4000 */ mtc1 $t7, $f8 -/* 0D7B3C 7F0A300C 00000000 */ nop -/* 0D7B40 7F0A3010 46804420 */ cvt.s.w $f16, $f8 -/* 0D7B44 7F0A3014 44814000 */ mtc1 $at, $f8 -/* 0D7B48 7F0A3018 460A8482 */ mul.s $f18, $f16, $f10 -/* 0D7B4C 7F0A301C 00000000 */ nop -/* 0D7B50 7F0A3020 46049182 */ mul.s $f6, $f18, $f4 -/* 0D7B54 7F0A3024 46083603 */ div.s $f24, $f6, $f8 -.L7F0A3028: -/* 0D7B58 7F0A3028 0FC15FAB */ jal sinf -/* 0D7B5C 7F0A302C 4600C306 */ mov.s $f12, $f24 -/* 0D7B60 7F0A3030 461C0282 */ mul.s $f10, $f0, $f28 -/* 0D7B64 7F0A3034 02F4C023 */ subu $t8, $s7, $s4 -/* 0D7B68 7F0A3038 44988000 */ mtc1 $t8, $f16 -/* 0D7B6C 7F0A303C 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 0D7B70 7F0A3040 44813000 */ mtc1 $at, $f6 -/* 0D7B74 7F0A3044 4600C306 */ mov.s $f12, $f24 -/* 0D7B78 7F0A3048 46808520 */ cvt.s.w $f20, $f16 -/* 0D7B7C 7F0A304C 461E5482 */ mul.s $f18, $f10, $f30 -/* 0D7B80 7F0A3050 C7B00074 */ lwc1 $f16, 0x74($sp) -/* 0D7B84 7F0A3054 46149102 */ mul.s $f4, $f18, $f20 -/* 0D7B88 7F0A3058 46062203 */ div.s $f8, $f4, $f6 -/* 0D7B8C 7F0A305C 46104282 */ mul.s $f10, $f8, $f16 -/* 0D7B90 7F0A3060 4600548D */ trunc.w.s $f18, $f10 -/* 0D7B94 7F0A3064 44119000 */ mfc1 $s1, $f18 -/* 0D7B98 7F0A3068 00000000 */ nop -/* 0D7B9C 7F0A306C 00114400 */ sll $t0, $s1, 0x10 -/* 0D7BA0 7F0A3070 0FC15FA8 */ jal cosf -/* 0D7BA4 7F0A3074 00088C03 */ sra $s1, $t0, 0x10 -/* 0D7BA8 7F0A3078 461C0102 */ mul.s $f4, $f0, $f28 -/* 0D7BAC 7F0A307C 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 0D7BB0 7F0A3080 44818000 */ mtc1 $at, $f16 -/* 0D7BB4 7F0A3084 262A0001 */ addiu $t2, $s1, 1 -/* 0D7BB8 7F0A3088 A60A0000 */ sh $t2, ($s0) -/* 0D7BBC 7F0A308C A6000002 */ sh $zero, 2($s0) -/* 0D7BC0 7F0A3090 A6000006 */ sh $zero, 6($s0) -/* 0D7BC4 7F0A3094 461E2182 */ mul.s $f6, $f4, $f30 -/* 0D7BC8 7F0A3098 A6000008 */ sh $zero, 8($s0) -/* 0D7BCC 7F0A309C A600000A */ sh $zero, 0xa($s0) -/* 0D7BD0 7F0A30A0 A213000C */ sb $s3, 0xc($s0) -/* 0D7BD4 7F0A30A4 A213000D */ sb $s3, 0xd($s0) -/* 0D7BD8 7F0A30A8 A213000E */ sb $s3, 0xe($s0) -/* 0D7BDC 7F0A30AC 46143202 */ mul.s $f8, $f6, $f20 -/* 0D7BE0 7F0A30B0 46104283 */ div.s $f10, $f8, $f16 -/* 0D7BE4 7F0A30B4 4600548D */ trunc.w.s $f18, $f10 -/* 0D7BE8 7F0A30B8 440E9000 */ mfc1 $t6, $f18 -/* 0D7BEC 7F0A30BC 00000000 */ nop -/* 0D7BF0 7F0A30C0 000E7823 */ negu $t7, $t6 -/* 0D7BF4 7F0A30C4 1AC00013 */ blez $s6, .L7F0A3114 -/* 0D7BF8 7F0A30C8 A60F0004 */ sh $t7, 4($s0) -/* 0D7BFC 7F0A30CC 0FC15FA8 */ jal cosf -/* 0D7C00 7F0A30D0 4600C306 */ mov.s $f12, $f24 -/* 0D7C04 7F0A30D4 3C0142C0 */ li $at, 0x42C00000 # 96.000000 -/* 0D7C08 7F0A30D8 44811000 */ mtc1 $at, $f2 -/* 0D7C0C 7F0A30DC 4600C306 */ mov.s $f12, $f24 -/* 0D7C10 7F0A30E0 46020102 */ mul.s $f4, $f0, $f2 -/* 0D7C14 7F0A30E4 46041181 */ sub.s $f6, $f2, $f4 -/* 0D7C18 7F0A30E8 4600320D */ trunc.w.s $f8, $f6 -/* 0D7C1C 7F0A30EC 44194000 */ mfc1 $t9, $f8 -/* 0D7C20 7F0A30F0 0FC15FA8 */ jal cosf -/* 0D7C24 7F0A30F4 A219000C */ sb $t9, 0xc($s0) -/* 0D7C28 7F0A30F8 461A0402 */ mul.s $f16, $f0, $f26 -/* 0D7C2C 7F0A30FC A213000E */ sb $s3, 0xe($s0) -/* 0D7C30 7F0A3100 4610D281 */ sub.s $f10, $f26, $f16 -/* 0D7C34 7F0A3104 4600548D */ trunc.w.s $f18, $f10 -/* 0D7C38 7F0A3108 44099000 */ mfc1 $t1, $f18 -/* 0D7C3C 7F0A310C 10000015 */ b .L7F0A3164 -/* 0D7C40 7F0A3110 A209000D */ sb $t1, 0xd($s0) -.L7F0A3114: -/* 0D7C44 7F0A3114 06C30014 */ bgezl $s6, .L7F0A3168 -/* 0D7C48 7F0A3118 2A41000A */ slti $at, $s2, 0xa -/* 0D7C4C 7F0A311C 0FC15FA8 */ jal cosf -/* 0D7C50 7F0A3120 4600C306 */ mov.s $f12, $f24 -/* 0D7C54 7F0A3124 461A0102 */ mul.s $f4, $f0, $f26 -/* 0D7C58 7F0A3128 4600C306 */ mov.s $f12, $f24 -/* 0D7C5C 7F0A312C 4604D181 */ sub.s $f6, $f26, $f4 -/* 0D7C60 7F0A3130 4600320D */ trunc.w.s $f8, $f6 -/* 0D7C64 7F0A3134 440B4000 */ mfc1 $t3, $f8 -/* 0D7C68 7F0A3138 0FC15FA8 */ jal cosf -/* 0D7C6C 7F0A313C A20B000D */ sb $t3, 0xd($s0) -/* 0D7C70 7F0A3140 3C014200 */ li $at, 0x42000000 # 32.000000 -/* 0D7C74 7F0A3144 44815000 */ mtc1 $at, $f10 -/* 0D7C78 7F0A3148 44818000 */ mtc1 $at, $f16 -/* 0D7C7C 7F0A314C 460A0482 */ mul.s $f18, $f0, $f10 -/* 0D7C80 7F0A3150 46128101 */ sub.s $f4, $f16, $f18 -/* 0D7C84 7F0A3154 4600218D */ trunc.w.s $f6, $f4 -/* 0D7C88 7F0A3158 440D3000 */ mfc1 $t5, $f6 -/* 0D7C8C 7F0A315C 00000000 */ nop -/* 0D7C90 7F0A3160 A20D000E */ sb $t5, 0xe($s0) -.L7F0A3164: -/* 0D7C94 7F0A3164 2A41000A */ slti $at, $s2, 0xa -.L7F0A3168: -/* 0D7C98 7F0A3168 10200022 */ beqz $at, .L7F0A31F4 -/* 0D7C9C 7F0A316C 26940001 */ addiu $s4, $s4, 1 -/* 0D7CA0 7F0A3170 4600B20D */ trunc.w.s $f8, $f22 -/* 0D7CA4 7F0A3174 44024000 */ mfc1 $v0, $f8 -/* 0D7CA8 7F0A3178 00000000 */ nop -/* 0D7CAC 7F0A317C 00021840 */ sll $v1, $v0, 1 -/* 0D7CB0 7F0A3180 2463FFFF */ addiu $v1, $v1, -1 -/* 0D7CB4 7F0A3184 0072082A */ slt $at, $v1, $s2 -/* 0D7CB8 7F0A3188 54200004 */ bnezl $at, .L7F0A319C -/* 0D7CBC 7F0A318C 4616B280 */ add.s $f10, $f22, $f22 -/* 0D7CC0 7F0A3190 1000004D */ b .L7F0A32C8 -/* 0D7CC4 7F0A3194 A213000F */ sb $s3, 0xf($s0) -/* 0D7CC8 7F0A3198 4616B280 */ add.s $f10, $f22, $f22 -.L7F0A319C: -/* 0D7CCC 7F0A319C 4600540D */ trunc.w.s $f16, $f10 -/* 0D7CD0 7F0A31A0 44188000 */ mfc1 $t8, $f16 -/* 0D7CD4 7F0A31A4 00000000 */ nop -/* 0D7CD8 7F0A31A8 0258082A */ slt $at, $s2, $t8 -/* 0D7CDC 7F0A31AC 1020000F */ beqz $at, .L7F0A31EC -/* 0D7CE0 7F0A31B0 0072082A */ slt $at, $v1, $s2 -/* 0D7CE4 7F0A31B4 1020000D */ beqz $at, .L7F0A31EC -/* 0D7CE8 7F0A31B8 00000000 */ nop -/* 0D7CEC 7F0A31BC 44829000 */ mtc1 $v0, $f18 -/* 0D7CF0 7F0A31C0 3C01434F */ li $at, 0x434F0000 # 207.000000 -/* 0D7CF4 7F0A31C4 44814000 */ mtc1 $at, $f8 -/* 0D7CF8 7F0A31C8 46809120 */ cvt.s.w $f4, $f18 -/* 0D7CFC 7F0A31CC 4604B181 */ sub.s $f6, $f22, $f4 -/* 0D7D00 7F0A31D0 46083282 */ mul.s $f10, $f6, $f8 -/* 0D7D04 7F0A31D4 4600540D */ trunc.w.s $f16, $f10 -/* 0D7D08 7F0A31D8 44088000 */ mfc1 $t0, $f16 -/* 0D7D0C 7F0A31DC 00000000 */ nop -/* 0D7D10 7F0A31E0 25090030 */ addiu $t1, $t0, 0x30 -/* 0D7D14 7F0A31E4 10000038 */ b .L7F0A32C8 -/* 0D7D18 7F0A31E8 A209000F */ sb $t1, 0xf($s0) -.L7F0A31EC: -/* 0D7D1C 7F0A31EC 10000036 */ b .L7F0A32C8 -/* 0D7D20 7F0A31F0 A215000F */ sb $s5, 0xf($s0) -.L7F0A31F4: -/* 0D7D24 7F0A31F4 2A41000A */ slti $at, $s2, 0xa -/* 0D7D28 7F0A31F8 14200033 */ bnez $at, .L7F0A32C8 -/* 0D7D2C 7F0A31FC 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 0D7D30 7F0A3200 44819000 */ mtc1 $at, $f18 -/* 0D7D34 7F0A3204 44924000 */ mtc1 $s2, $f8 -/* 0D7D38 7F0A3208 3C014110 */ li $at, 0x41100000 # 9.000000 -/* 0D7D3C 7F0A320C 4612B001 */ sub.s $f0, $f22, $f18 -/* 0D7D40 7F0A3210 44812000 */ mtc1 $at, $f4 -/* 0D7D44 7F0A3214 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D7D48 7F0A3218 468042A0 */ cvt.s.w $f10, $f8 -/* 0D7D4C 7F0A321C 461C0082 */ mul.s $f2, $f0, $f28 -/* 0D7D50 7F0A3220 46022180 */ add.s $f6, $f4, $f2 -/* 0D7D54 7F0A3224 4606503E */ c.le.s $f10, $f6 -/* 0D7D58 7F0A3228 00000000 */ nop -/* 0D7D5C 7F0A322C 45020004 */ bc1fl .L7F0A3240 -/* 0D7D60 7F0A3230 44818000 */ mtc1 $at, $f16 -/* 0D7D64 7F0A3234 10000024 */ b .L7F0A32C8 -/* 0D7D68 7F0A3238 A213000F */ sb $s3, 0xf($s0) -/* 0D7D6C 7F0A323C 44818000 */ mtc1 $at, $f16 -.L7F0A3240: -/* 0D7D70 7F0A3240 00000000 */ nop -/* 0D7D74 7F0A3244 46101480 */ add.s $f18, $f2, $f16 -/* 0D7D78 7F0A3248 4600910D */ trunc.w.s $f4, $f18 -/* 0D7D7C 7F0A324C 440B2000 */ mfc1 $t3, $f4 -/* 0D7D80 7F0A3250 00000000 */ nop -/* 0D7D84 7F0A3254 256C0009 */ addiu $t4, $t3, 9 -/* 0D7D88 7F0A3258 0192082A */ slt $at, $t4, $s2 -/* 0D7D8C 7F0A325C 5420001A */ bnezl $at, .L7F0A32C8 -/* 0D7D90 7F0A3260 A215000F */ sb $s5, 0xf($s0) -/* 0D7D94 7F0A3264 4600020D */ trunc.w.s $f8, $f0 -/* 0D7D98 7F0A3268 440E4000 */ mfc1 $t6, $f8 -/* 0D7D9C 7F0A326C 00000000 */ nop -/* 0D7DA0 7F0A3270 000E7840 */ sll $t7, $t6, 1 -/* 0D7DA4 7F0A3274 25F80008 */ addiu $t8, $t7, 8 -/* 0D7DA8 7F0A3278 0312082A */ slt $at, $t8, $s2 -/* 0D7DAC 7F0A327C 50200012 */ beql $at, $zero, .L7F0A32C8 -/* 0D7DB0 7F0A3280 A215000F */ sb $s5, 0xf($s0) -/* 0D7DB4 7F0A3284 4600B18D */ trunc.w.s $f6, $f22 -/* 0D7DB8 7F0A3288 3C01434F */ li $at, 0x434F0000 # 207.000000 -/* 0D7DBC 7F0A328C 44812000 */ mtc1 $at, $f4 -/* 0D7DC0 7F0A3290 44083000 */ mfc1 $t0, $f6 -/* 0D7DC4 7F0A3294 00000000 */ nop -/* 0D7DC8 7F0A3298 44885000 */ mtc1 $t0, $f10 -/* 0D7DCC 7F0A329C 00000000 */ nop -/* 0D7DD0 7F0A32A0 46805420 */ cvt.s.w $f16, $f10 -/* 0D7DD4 7F0A32A4 4610B481 */ sub.s $f18, $f22, $f16 -/* 0D7DD8 7F0A32A8 46049202 */ mul.s $f8, $f18, $f4 -/* 0D7DDC 7F0A32AC 4600418D */ trunc.w.s $f6, $f8 -/* 0D7DE0 7F0A32B0 440A3000 */ mfc1 $t2, $f6 -/* 0D7DE4 7F0A32B4 00000000 */ nop -/* 0D7DE8 7F0A32B8 254B0030 */ addiu $t3, $t2, 0x30 -/* 0D7DEC 7F0A32BC 10000002 */ b .L7F0A32C8 -/* 0D7DF0 7F0A32C0 A20B000F */ sb $t3, 0xf($s0) -/* 0D7DF4 7F0A32C4 A215000F */ sb $s5, 0xf($s0) -.L7F0A32C8: -/* 0D7DF8 7F0A32C8 169EFF57 */ bne $s4, $fp, .L7F0A3028 -/* 0D7DFC 7F0A32CC 26100010 */ addiu $s0, $s0, 0x10 -/* 0D7E00 7F0A32D0 8FAC0080 */ lw $t4, 0x80($sp) -/* 0D7E04 7F0A32D4 26520001 */ addiu $s2, $s2, 1 -/* 0D7E08 7F0A32D8 24010017 */ li $at, 23 -/* 0D7E0C 7F0A32DC 258D0005 */ addiu $t5, $t4, 5 -/* 0D7E10 7F0A32E0 1641FF3A */ bne $s2, $at, .L7F0A2FCC -/* 0D7E14 7F0A32E4 AFAD0080 */ sw $t5, 0x80($sp) -/* 0D7E18 7F0A32E8 8FBF006C */ lw $ra, 0x6c($sp) -/* 0D7E1C 7F0A32EC D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0D7E20 7F0A32F0 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0D7E24 7F0A32F4 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0D7E28 7F0A32F8 D7BA0030 */ ldc1 $f26, 0x30($sp) -/* 0D7E2C 7F0A32FC D7BC0038 */ ldc1 $f28, 0x38($sp) -/* 0D7E30 7F0A3300 D7BE0040 */ ldc1 $f30, 0x40($sp) -/* 0D7E34 7F0A3304 8FB00048 */ lw $s0, 0x48($sp) -/* 0D7E38 7F0A3308 8FB1004C */ lw $s1, 0x4c($sp) -/* 0D7E3C 7F0A330C 8FB20050 */ lw $s2, 0x50($sp) -/* 0D7E40 7F0A3310 8FB30054 */ lw $s3, 0x54($sp) -/* 0D7E44 7F0A3314 8FB40058 */ lw $s4, 0x58($sp) -/* 0D7E48 7F0A3318 8FB5005C */ lw $s5, 0x5c($sp) -/* 0D7E4C 7F0A331C 8FB60060 */ lw $s6, 0x60($sp) -/* 0D7E50 7F0A3320 8FB70064 */ lw $s7, 0x64($sp) -/* 0D7E54 7F0A3324 8FBE0068 */ lw $fp, 0x68($sp) -/* 0D7E58 7F0A3328 03E00008 */ jr $ra -/* 0D7E5C 7F0A332C 27BD0098 */ addiu $sp, $sp, 0x98 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_8004CE10 -.word 0x4061d000 -glabel D_8004CE14 -.word 0x00000000 /*0.0*/ -glabel D_8004CE18 -.word 0x40490fdb -glabel D_8004CE1C -.word 0x40490fdb -glabel D_8004CE20 -.word 0x40c90fdb - -.text -glabel sub_GAME_7F0A2F30 -/* 0D4E60 7F0A2470 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 0D4E64 7F0A2474 AFB60060 */ sw $s6, 0x60($sp) -/* 0D4E68 7F0A2478 00C0B025 */ move $s6, $a2 -/* 0D4E6C 7F0A247C 44963000 */ mtc1 $s6, $f6 -/* 0D4E70 7F0A2480 3C014100 */ li $at, 0x41000000 # 8.000000 -/* 0D4E74 7F0A2484 44812000 */ mtc1 $at, $f4 -/* 0D4E78 7F0A2488 46803220 */ cvt.s.w $f8, $f6 -/* 0D4E7C 7F0A248C F7BE0040 */ sdc1 $f30, 0x40($sp) -/* 0D4E80 7F0A2490 3C014302 */ li $at, 0x43020000 # 130.000000 -/* 0D4E84 7F0A2494 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0D4E88 7F0A2498 4481F000 */ mtc1 $at, $f30 -/* 0D4E8C 7F0A249C 4487B000 */ mtc1 $a3, $f22 -/* 0D4E90 7F0A24A0 F7BC0038 */ sdc1 $f28, 0x38($sp) -/* 0D4E94 7F0A24A4 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0D4E98 7F0A24A8 4481E000 */ mtc1 $at, $f28 -/* 0D4E9C 7F0A24AC F7BA0030 */ sdc1 $f26, 0x30($sp) -/* 0D4EA0 7F0A24B0 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0D4EA4 7F0A24B4 AFBE0068 */ sw $fp, 0x68($sp) -/* 0D4EA8 7F0A24B8 AFB70064 */ sw $s7, 0x64($sp) -/* 0D4EAC 7F0A24BC AFB5005C */ sw $s5, 0x5c($sp) -/* 0D4EB0 7F0A24C0 AFB30054 */ sw $s3, 0x54($sp) -/* 0D4EB4 7F0A24C4 AFB20050 */ sw $s2, 0x50($sp) -/* 0D4EB8 7F0A24C8 AFB00048 */ sw $s0, 0x48($sp) -/* 0D4EBC 7F0A24CC 4481D000 */ mtc1 $at, $f26 -/* 0D4EC0 7F0A24D0 4604B582 */ mul.s $f22, $f22, $f4 -/* 0D4EC4 7F0A24D4 00808025 */ move $s0, $a0 -/* 0D4EC8 7F0A24D8 AFBF006C */ sw $ra, 0x6c($sp) -/* 0D4ECC 7F0A24DC AFB40058 */ sw $s4, 0x58($sp) -/* 0D4ED0 7F0A24E0 AFB1004C */ sw $s1, 0x4c($sp) -/* 0D4ED4 7F0A24E4 F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0D4ED8 7F0A24E8 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0D4EDC 7F0A24EC AFA5009C */ sw $a1, 0x9c($sp) -/* 0D4EE0 7F0A24F0 00009025 */ move $s2, $zero -/* 0D4EE4 7F0A24F4 241300FF */ li $s3, 255 -/* 0D4EE8 7F0A24F8 24150030 */ li $s5, 48 -/* 0D4EEC 7F0A24FC 24170006 */ li $s7, 6 -/* 0D4EF0 7F0A2500 241E0002 */ li $fp, 2 -/* 0D4EF4 7F0A2504 E7A80074 */ swc1 $f8, 0x74($sp) -/* 0D4EF8 7F0A2508 AFA00080 */ sw $zero, 0x80($sp) -.L7F0A250C: -/* 0D4EFC 7F0A250C 8FA20080 */ lw $v0, 0x80($sp) -/* 0D4F00 7F0A2510 3C018005 */ lui $at, %hi(D_8004CE10) -/* 0D4F04 7F0A2514 D42ACE10 */ ldc1 $f10, %lo(D_8004CE10)($at) -/* 0D4F08 7F0A2518 44828000 */ mtc1 $v0, $f16 -/* 0D4F0C 7F0A251C 3C018005 */ lui $at, %hi(D_8004CE18) -/* 0D4F10 7F0A2520 0000A025 */ move $s4, $zero -/* 0D4F14 7F0A2524 468084A1 */ cvt.d.w $f18, $f16 -/* 0D4F18 7F0A2528 46325101 */ sub.d $f4, $f10, $f18 -/* 0D4F1C 7F0A252C C42ACE18 */ lwc1 $f10, %lo(D_8004CE18)($at) -/* 0D4F20 7F0A2530 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0D4F24 7F0A2534 4620218D */ trunc.w.d $f6, $f4 -/* 0D4F28 7F0A2538 44812000 */ mtc1 $at, $f4 -/* 0D4F2C 7F0A253C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0D4F30 7F0A2540 440F3000 */ mfc1 $t7, $f6 -/* 0D4F34 7F0A2544 00000000 */ nop -/* 0D4F38 7F0A2548 448F4000 */ mtc1 $t7, $f8 -/* 0D4F3C 7F0A254C 00000000 */ nop -/* 0D4F40 7F0A2550 46804420 */ cvt.s.w $f16, $f8 -/* 0D4F44 7F0A2554 44814000 */ mtc1 $at, $f8 -/* 0D4F48 7F0A2558 460A8482 */ mul.s $f18, $f16, $f10 -/* 0D4F4C 7F0A255C 00000000 */ nop -/* 0D4F50 7F0A2560 46049182 */ mul.s $f6, $f18, $f4 -/* 0D4F54 7F0A2564 46083603 */ div.s $f24, $f6, $f8 -.L7F0A2568: -/* 0D4F58 7F0A2568 0FC1606B */ jal sinf -/* 0D4F5C 7F0A256C 4600C306 */ mov.s $f12, $f24 -/* 0D4F60 7F0A2570 461C0282 */ mul.s $f10, $f0, $f28 -/* 0D4F64 7F0A2574 02F4C023 */ subu $t8, $s7, $s4 -/* 0D4F68 7F0A2578 44988000 */ mtc1 $t8, $f16 -/* 0D4F6C 7F0A257C 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 0D4F70 7F0A2580 44813000 */ mtc1 $at, $f6 -/* 0D4F74 7F0A2584 4600C306 */ mov.s $f12, $f24 -/* 0D4F78 7F0A2588 46808520 */ cvt.s.w $f20, $f16 -/* 0D4F7C 7F0A258C 461E5482 */ mul.s $f18, $f10, $f30 -/* 0D4F80 7F0A2590 C7B00074 */ lwc1 $f16, 0x74($sp) -/* 0D4F84 7F0A2594 46149102 */ mul.s $f4, $f18, $f20 -/* 0D4F88 7F0A2598 46062203 */ div.s $f8, $f4, $f6 -/* 0D4F8C 7F0A259C 46104282 */ mul.s $f10, $f8, $f16 -/* 0D4F90 7F0A25A0 4600548D */ trunc.w.s $f18, $f10 -/* 0D4F94 7F0A25A4 44119000 */ mfc1 $s1, $f18 -/* 0D4F98 7F0A25A8 00000000 */ nop -/* 0D4F9C 7F0A25AC 00114400 */ sll $t0, $s1, 0x10 -/* 0D4FA0 7F0A25B0 0FC16068 */ jal cosf -/* 0D4FA4 7F0A25B4 00088C03 */ sra $s1, $t0, 0x10 -/* 0D4FA8 7F0A25B8 461C0102 */ mul.s $f4, $f0, $f28 -/* 0D4FAC 7F0A25BC 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 0D4FB0 7F0A25C0 44818000 */ mtc1 $at, $f16 -/* 0D4FB4 7F0A25C4 262A0001 */ addiu $t2, $s1, 1 -/* 0D4FB8 7F0A25C8 A60A0000 */ sh $t2, ($s0) -/* 0D4FBC 7F0A25CC A6000002 */ sh $zero, 2($s0) -/* 0D4FC0 7F0A25D0 A6000006 */ sh $zero, 6($s0) -/* 0D4FC4 7F0A25D4 461E2182 */ mul.s $f6, $f4, $f30 -/* 0D4FC8 7F0A25D8 A6000008 */ sh $zero, 8($s0) -/* 0D4FCC 7F0A25DC A600000A */ sh $zero, 0xa($s0) -/* 0D4FD0 7F0A25E0 A213000C */ sb $s3, 0xc($s0) -/* 0D4FD4 7F0A25E4 A213000D */ sb $s3, 0xd($s0) -/* 0D4FD8 7F0A25E8 A213000E */ sb $s3, 0xe($s0) -/* 0D4FDC 7F0A25EC 46143202 */ mul.s $f8, $f6, $f20 -/* 0D4FE0 7F0A25F0 46104283 */ div.s $f10, $f8, $f16 -/* 0D4FE4 7F0A25F4 4600548D */ trunc.w.s $f18, $f10 -/* 0D4FE8 7F0A25F8 440E9000 */ mfc1 $t6, $f18 -/* 0D4FEC 7F0A25FC 00000000 */ nop -/* 0D4FF0 7F0A2600 000E7823 */ negu $t7, $t6 -/* 0D4FF4 7F0A2604 1AC00013 */ blez $s6, .L7F0A2654 -/* 0D4FF8 7F0A2608 A60F0004 */ sh $t7, 4($s0) -/* 0D4FFC 7F0A260C 0FC16068 */ jal cosf -/* 0D5000 7F0A2610 4600C306 */ mov.s $f12, $f24 -/* 0D5004 7F0A2614 3C0142C0 */ li $at, 0x42C00000 # 96.000000 -/* 0D5008 7F0A2618 44811000 */ mtc1 $at, $f2 -/* 0D500C 7F0A261C 4600C306 */ mov.s $f12, $f24 -/* 0D5010 7F0A2620 46020102 */ mul.s $f4, $f0, $f2 -/* 0D5014 7F0A2624 46041181 */ sub.s $f6, $f2, $f4 -/* 0D5018 7F0A2628 4600320D */ trunc.w.s $f8, $f6 -/* 0D501C 7F0A262C 44194000 */ mfc1 $t9, $f8 -/* 0D5020 7F0A2630 0FC16068 */ jal cosf -/* 0D5024 7F0A2634 A219000C */ sb $t9, 0xc($s0) -/* 0D5028 7F0A2638 461A0402 */ mul.s $f16, $f0, $f26 -/* 0D502C 7F0A263C A213000E */ sb $s3, 0xe($s0) -/* 0D5030 7F0A2640 4610D281 */ sub.s $f10, $f26, $f16 -/* 0D5034 7F0A2644 4600548D */ trunc.w.s $f18, $f10 -/* 0D5038 7F0A2648 44099000 */ mfc1 $t1, $f18 -/* 0D503C 7F0A264C 10000015 */ b .L7F0A26A4 -/* 0D5040 7F0A2650 A209000D */ sb $t1, 0xd($s0) -.L7F0A2654: -/* 0D5044 7F0A2654 06C30014 */ bgezl $s6, .L7F0A26A8 -/* 0D5048 7F0A2658 2A41000A */ slti $at, $s2, 0xa -/* 0D504C 7F0A265C 0FC16068 */ jal cosf -/* 0D5050 7F0A2660 4600C306 */ mov.s $f12, $f24 -/* 0D5054 7F0A2664 461A0102 */ mul.s $f4, $f0, $f26 -/* 0D5058 7F0A2668 4600C306 */ mov.s $f12, $f24 -/* 0D505C 7F0A266C 4604D181 */ sub.s $f6, $f26, $f4 -/* 0D5060 7F0A2670 4600320D */ trunc.w.s $f8, $f6 -/* 0D5064 7F0A2674 440B4000 */ mfc1 $t3, $f8 -/* 0D5068 7F0A2678 0FC16068 */ jal cosf -/* 0D506C 7F0A267C A20B000D */ sb $t3, 0xd($s0) -/* 0D5070 7F0A2680 3C014200 */ li $at, 0x42000000 # 32.000000 -/* 0D5074 7F0A2684 44815000 */ mtc1 $at, $f10 -/* 0D5078 7F0A2688 44818000 */ mtc1 $at, $f16 -/* 0D507C 7F0A268C 460A0482 */ mul.s $f18, $f0, $f10 -/* 0D5080 7F0A2690 46128101 */ sub.s $f4, $f16, $f18 -/* 0D5084 7F0A2694 4600218D */ trunc.w.s $f6, $f4 -/* 0D5088 7F0A2698 440D3000 */ mfc1 $t5, $f6 -/* 0D508C 7F0A269C 00000000 */ nop -/* 0D5090 7F0A26A0 A20D000E */ sb $t5, 0xe($s0) -.L7F0A26A4: -/* 0D5094 7F0A26A4 2A41000A */ slti $at, $s2, 0xa -.L7F0A26A8: -/* 0D5098 7F0A26A8 10200022 */ beqz $at, .L7F0A2734 -/* 0D509C 7F0A26AC 26940001 */ addiu $s4, $s4, 1 -/* 0D50A0 7F0A26B0 4600B20D */ trunc.w.s $f8, $f22 -/* 0D50A4 7F0A26B4 44024000 */ mfc1 $v0, $f8 -/* 0D50A8 7F0A26B8 00000000 */ nop -/* 0D50AC 7F0A26BC 00021840 */ sll $v1, $v0, 1 -/* 0D50B0 7F0A26C0 2463FFFF */ addiu $v1, $v1, -1 -/* 0D50B4 7F0A26C4 0072082A */ slt $at, $v1, $s2 -/* 0D50B8 7F0A26C8 54200004 */ bnezl $at, .L7F0A26DC -/* 0D50BC 7F0A26CC 4616B280 */ add.s $f10, $f22, $f22 -/* 0D50C0 7F0A26D0 1000004D */ b .L7F0A2808 -/* 0D50C4 7F0A26D4 A213000F */ sb $s3, 0xf($s0) -/* 0D50C8 7F0A26D8 4616B280 */ add.s $f10, $f22, $f22 -.L7F0A26DC: -/* 0D50CC 7F0A26DC 4600540D */ trunc.w.s $f16, $f10 -/* 0D50D0 7F0A26E0 44188000 */ mfc1 $t8, $f16 -/* 0D50D4 7F0A26E4 00000000 */ nop -/* 0D50D8 7F0A26E8 0258082A */ slt $at, $s2, $t8 -/* 0D50DC 7F0A26EC 1020000F */ beqz $at, .L7F0A272C -/* 0D50E0 7F0A26F0 0072082A */ slt $at, $v1, $s2 -/* 0D50E4 7F0A26F4 1020000D */ beqz $at, .L7F0A272C -/* 0D50E8 7F0A26F8 00000000 */ nop -/* 0D50EC 7F0A26FC 44829000 */ mtc1 $v0, $f18 -/* 0D50F0 7F0A2700 3C01434F */ li $at, 0x434F0000 # 207.000000 -/* 0D50F4 7F0A2704 44814000 */ mtc1 $at, $f8 -/* 0D50F8 7F0A2708 46809120 */ cvt.s.w $f4, $f18 -/* 0D50FC 7F0A270C 4604B181 */ sub.s $f6, $f22, $f4 -/* 0D5100 7F0A2710 46083282 */ mul.s $f10, $f6, $f8 -/* 0D5104 7F0A2714 4600540D */ trunc.w.s $f16, $f10 -/* 0D5108 7F0A2718 44088000 */ mfc1 $t0, $f16 -/* 0D510C 7F0A271C 00000000 */ nop -/* 0D5110 7F0A2720 25090030 */ addiu $t1, $t0, 0x30 -/* 0D5114 7F0A2724 10000038 */ b .L7F0A2808 -/* 0D5118 7F0A2728 A209000F */ sb $t1, 0xf($s0) -.L7F0A272C: -/* 0D511C 7F0A272C 10000036 */ b .L7F0A2808 -/* 0D5120 7F0A2730 A215000F */ sb $s5, 0xf($s0) -.L7F0A2734: -/* 0D5124 7F0A2734 2A41000A */ slti $at, $s2, 0xa -/* 0D5128 7F0A2738 14200033 */ bnez $at, .L7F0A2808 -/* 0D512C 7F0A273C 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 0D5130 7F0A2740 44819000 */ mtc1 $at, $f18 -/* 0D5134 7F0A2744 44924000 */ mtc1 $s2, $f8 -/* 0D5138 7F0A2748 3C014110 */ li $at, 0x41100000 # 9.000000 -/* 0D513C 7F0A274C 4612B001 */ sub.s $f0, $f22, $f18 -/* 0D5140 7F0A2750 44812000 */ mtc1 $at, $f4 -/* 0D5144 7F0A2754 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D5148 7F0A2758 468042A0 */ cvt.s.w $f10, $f8 -/* 0D514C 7F0A275C 461C0082 */ mul.s $f2, $f0, $f28 -/* 0D5150 7F0A2760 46022180 */ add.s $f6, $f4, $f2 -/* 0D5154 7F0A2764 4606503E */ c.le.s $f10, $f6 -/* 0D5158 7F0A2768 00000000 */ nop -/* 0D515C 7F0A276C 45020004 */ bc1fl .L7F0A2780 -/* 0D5160 7F0A2770 44818000 */ mtc1 $at, $f16 -/* 0D5164 7F0A2774 10000024 */ b .L7F0A2808 -/* 0D5168 7F0A2778 A213000F */ sb $s3, 0xf($s0) -/* 0D516C 7F0A277C 44818000 */ mtc1 $at, $f16 -.L7F0A2780: -/* 0D5170 7F0A2780 00000000 */ nop -/* 0D5174 7F0A2784 46101480 */ add.s $f18, $f2, $f16 -/* 0D5178 7F0A2788 4600910D */ trunc.w.s $f4, $f18 -/* 0D517C 7F0A278C 440B2000 */ mfc1 $t3, $f4 -/* 0D5180 7F0A2790 00000000 */ nop -/* 0D5184 7F0A2794 256C0009 */ addiu $t4, $t3, 9 -/* 0D5188 7F0A2798 0192082A */ slt $at, $t4, $s2 -/* 0D518C 7F0A279C 5420001A */ bnezl $at, .L7F0A2808 -/* 0D5190 7F0A27A0 A215000F */ sb $s5, 0xf($s0) -/* 0D5194 7F0A27A4 4600020D */ trunc.w.s $f8, $f0 -/* 0D5198 7F0A27A8 440E4000 */ mfc1 $t6, $f8 -/* 0D519C 7F0A27AC 00000000 */ nop -/* 0D51A0 7F0A27B0 000E7840 */ sll $t7, $t6, 1 -/* 0D51A4 7F0A27B4 25F80008 */ addiu $t8, $t7, 8 -/* 0D51A8 7F0A27B8 0312082A */ slt $at, $t8, $s2 -/* 0D51AC 7F0A27BC 50200012 */ beql $at, $zero, .L7F0A2808 -/* 0D51B0 7F0A27C0 A215000F */ sb $s5, 0xf($s0) -/* 0D51B4 7F0A27C4 4600B18D */ trunc.w.s $f6, $f22 -/* 0D51B8 7F0A27C8 3C01434F */ li $at, 0x434F0000 # 207.000000 -/* 0D51BC 7F0A27CC 44812000 */ mtc1 $at, $f4 -/* 0D51C0 7F0A27D0 44083000 */ mfc1 $t0, $f6 -/* 0D51C4 7F0A27D4 00000000 */ nop -/* 0D51C8 7F0A27D8 44885000 */ mtc1 $t0, $f10 -/* 0D51CC 7F0A27DC 00000000 */ nop -/* 0D51D0 7F0A27E0 46805420 */ cvt.s.w $f16, $f10 -/* 0D51D4 7F0A27E4 4610B481 */ sub.s $f18, $f22, $f16 -/* 0D51D8 7F0A27E8 46049202 */ mul.s $f8, $f18, $f4 -/* 0D51DC 7F0A27EC 4600418D */ trunc.w.s $f6, $f8 -/* 0D51E0 7F0A27F0 440A3000 */ mfc1 $t2, $f6 -/* 0D51E4 7F0A27F4 00000000 */ nop -/* 0D51E8 7F0A27F8 254B0030 */ addiu $t3, $t2, 0x30 -/* 0D51EC 7F0A27FC 10000002 */ b .L7F0A2808 -/* 0D51F0 7F0A2800 A20B000F */ sb $t3, 0xf($s0) -/* 0D51F4 7F0A2804 A215000F */ sb $s5, 0xf($s0) -.L7F0A2808: -/* 0D51F8 7F0A2808 169EFF57 */ bne $s4, $fp, .L7F0A2568 -/* 0D51FC 7F0A280C 26100010 */ addiu $s0, $s0, 0x10 -/* 0D5200 7F0A2810 8FAC0080 */ lw $t4, 0x80($sp) -/* 0D5204 7F0A2814 26520001 */ addiu $s2, $s2, 1 -/* 0D5208 7F0A2818 24010017 */ li $at, 23 -/* 0D520C 7F0A281C 258D0005 */ addiu $t5, $t4, 5 -/* 0D5210 7F0A2820 1641FF3A */ bne $s2, $at, .L7F0A250C -/* 0D5214 7F0A2824 AFAD0080 */ sw $t5, 0x80($sp) -/* 0D5218 7F0A2828 8FBF006C */ lw $ra, 0x6c($sp) -/* 0D521C 7F0A282C D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0D5220 7F0A2830 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0D5224 7F0A2834 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0D5228 7F0A2838 D7BA0030 */ ldc1 $f26, 0x30($sp) -/* 0D522C 7F0A283C D7BC0038 */ ldc1 $f28, 0x38($sp) -/* 0D5230 7F0A2840 D7BE0040 */ ldc1 $f30, 0x40($sp) -/* 0D5234 7F0A2844 8FB00048 */ lw $s0, 0x48($sp) -/* 0D5238 7F0A2848 8FB1004C */ lw $s1, 0x4c($sp) -/* 0D523C 7F0A284C 8FB20050 */ lw $s2, 0x50($sp) -/* 0D5240 7F0A2850 8FB30054 */ lw $s3, 0x54($sp) -/* 0D5244 7F0A2854 8FB40058 */ lw $s4, 0x58($sp) -/* 0D5248 7F0A2858 8FB5005C */ lw $s5, 0x5c($sp) -/* 0D524C 7F0A285C 8FB60060 */ lw $s6, 0x60($sp) -/* 0D5250 7F0A2860 8FB70064 */ lw $s7, 0x64($sp) -/* 0D5254 7F0A2864 8FBE0068 */ lw $fp, 0x68($sp) -/* 0D5258 7F0A2868 03E00008 */ jr $ra -/* 0D525C 7F0A286C 27BD0098 */ addiu $sp, $sp, 0x98 -) -#endif -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A3330(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A3330 -/* 0D7E60 7F0A3330 00803825 */ move $a3, $a0 -/* 0D7E64 7F0A3334 00001025 */ move $v0, $zero -/* 0D7E68 7F0A3338 04C10003 */ bgez $a2, .L7F0A3348 -/* 0D7E6C 7F0A333C 00061843 */ sra $v1, $a2, 1 -/* 0D7E70 7F0A3340 24C10001 */ addiu $at, $a2, 1 -/* 0D7E74 7F0A3344 00011843 */ sra $v1, $at, 1 -.L7F0A3348: -/* 0D7E78 7F0A3348 2463FFFE */ addiu $v1, $v1, -2 -/* 0D7E7C 7F0A334C 04600026 */ bltz $v1, .L7F0A33E8 -/* 0D7E80 7F0A3350 3C0BB800 */ lui $t3, 0xb800 -/* 0D7E84 7F0A3354 3C08B100 */ lui $t0, (0xB1000032 >> 16) # lui $t0, 0xb100 -/* 0D7E88 7F0A3358 3C060430 */ lui $a2, (0x04300040 >> 16) # lui $a2, 0x430 -/* 0D7E8C 7F0A335C 34C60040 */ ori $a2, (0x04300040 & 0xFFFF) # ori $a2, $a2, 0x40 -/* 0D7E90 7F0A3360 35080032 */ ori $t0, (0xB1000032 & 0xFFFF) # ori $t0, $t0, 0x32 -/* 0D7E94 7F0A3364 24092110 */ li $t1, 8464 -.L7F0A3368: -/* 0D7E98 7F0A3368 00E02025 */ move $a0, $a3 -/* 0D7E9C 7F0A336C 28410009 */ slti $at, $v0, 9 -/* 0D7EA0 7F0A3370 AC860000 */ sw $a2, ($a0) -/* 0D7EA4 7F0A3374 AC850004 */ sw $a1, 4($a0) -/* 0D7EA8 7F0A3378 1420000D */ bnez $at, .L7F0A33B0 -/* 0D7EAC 7F0A337C 24E70008 */ addiu $a3, $a3, 8 -/* 0D7EB0 7F0A3380 244E0003 */ addiu $t6, $v0, 3 -/* 0D7EB4 7F0A3384 05C10004 */ bgez $t6, .L7F0A3398 -/* 0D7EB8 7F0A3388 31CF0003 */ andi $t7, $t6, 3 -/* 0D7EBC 7F0A338C 11E00002 */ beqz $t7, .L7F0A3398 -/* 0D7EC0 7F0A3390 00000000 */ nop -/* 0D7EC4 7F0A3394 25EFFFFC */ addiu $t7, $t7, -4 -.L7F0A3398: -/* 0D7EC8 7F0A3398 11E0000D */ beqz $t7, .L7F0A33D0 -/* 0D7ECC 7F0A339C 00E02025 */ move $a0, $a3 -/* 0D7ED0 7F0A33A0 24E70008 */ addiu $a3, $a3, 8 -/* 0D7ED4 7F0A33A4 AC880000 */ sw $t0, ($a0) -/* 0D7ED8 7F0A33A8 10000009 */ b .L7F0A33D0 -/* 0D7EDC 7F0A33AC AC890004 */ sw $t1, 4($a0) -.L7F0A33B0: -/* 0D7EE0 7F0A33B0 28410009 */ slti $at, $v0, 9 -/* 0D7EE4 7F0A33B4 10200006 */ beqz $at, .L7F0A33D0 -/* 0D7EE8 7F0A33B8 30580001 */ andi $t8, $v0, 1 -/* 0D7EEC 7F0A33BC 17000004 */ bnez $t8, .L7F0A33D0 -/* 0D7EF0 7F0A33C0 00E02025 */ move $a0, $a3 -/* 0D7EF4 7F0A33C4 24E70008 */ addiu $a3, $a3, 8 -/* 0D7EF8 7F0A33C8 AC880000 */ sw $t0, ($a0) -/* 0D7EFC 7F0A33CC AC890004 */ sw $t1, 4($a0) -.L7F0A33D0: -/* 0D7F00 7F0A33D0 24420001 */ addiu $v0, $v0, 1 -/* 0D7F04 7F0A33D4 0002CE00 */ sll $t9, $v0, 0x18 -/* 0D7F08 7F0A33D8 00191603 */ sra $v0, $t9, 0x18 -/* 0D7F0C 7F0A33DC 0062082A */ slt $at, $v1, $v0 -/* 0D7F10 7F0A33E0 1020FFE1 */ beqz $at, .L7F0A3368 -/* 0D7F14 7F0A33E4 24A50020 */ addiu $a1, $a1, 0x20 -.L7F0A33E8: -/* 0D7F18 7F0A33E8 24E20008 */ addiu $v0, $a3, 8 -/* 0D7F1C 7F0A33EC ACEB0000 */ sw $t3, ($a3) -/* 0D7F20 7F0A33F0 03E00008 */ jr $ra -/* 0D7F24 7F0A33F4 ACE00004 */ sw $zero, 4($a3) -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A33F8(void) { - -} -#else -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_8005774C -.word 0x40490fdb /*3.1415927*/ -.text -glabel sub_GAME_7F0A33F8 -/* 0D7F28 7F0A33F8 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0D7F2C 7F0A33FC F7BE0038 */ sdc1 $f30, 0x38($sp) -/* 0D7F30 7F0A3400 4486F000 */ mtc1 $a2, $f30 -/* 0D7F34 7F0A3404 AFB6005C */ sw $s6, 0x5c($sp) -/* 0D7F38 7F0A3408 AFB00044 */ sw $s0, 0x44($sp) -/* 0D7F3C 7F0A340C 00808025 */ move $s0, $a0 -/* 0D7F40 7F0A3410 00A0B025 */ move $s6, $a1 -/* 0D7F44 7F0A3414 AFBF0064 */ sw $ra, 0x64($sp) -/* 0D7F48 7F0A3418 AFB70060 */ sw $s7, 0x60($sp) -/* 0D7F4C 7F0A341C AFB50058 */ sw $s5, 0x58($sp) -/* 0D7F50 7F0A3420 AFB40054 */ sw $s4, 0x54($sp) -/* 0D7F54 7F0A3424 AFB30050 */ sw $s3, 0x50($sp) -/* 0D7F58 7F0A3428 AFB2004C */ sw $s2, 0x4c($sp) -/* 0D7F5C 7F0A342C AFB10048 */ sw $s1, 0x48($sp) -/* 0D7F60 7F0A3430 F7BC0030 */ sdc1 $f28, 0x30($sp) -/* 0D7F64 7F0A3434 F7BA0028 */ sdc1 $f26, 0x28($sp) -/* 0D7F68 7F0A3438 F7B80020 */ sdc1 $f24, 0x20($sp) -/* 0D7F6C 7F0A343C F7B60018 */ sdc1 $f22, 0x18($sp) -/* 0D7F70 7F0A3440 10E0000F */ beqz $a3, .L7F0A3480 -/* 0D7F74 7F0A3444 F7B40010 */ sdc1 $f20, 0x10($sp) -/* 0D7F78 7F0A3448 241500B0 */ li $s5, 176 -/* 0D7F7C 7F0A344C 240E0001 */ li $t6, 1 -/* 0D7F80 7F0A3450 240F002C */ li $t7, 44 -/* 0D7F84 7F0A3454 A48E0000 */ sh $t6, ($a0) -/* 0D7F88 7F0A3458 A4800002 */ sh $zero, 2($a0) -/* 0D7F8C 7F0A345C A4800004 */ sh $zero, 4($a0) -/* 0D7F90 7F0A3460 A4800006 */ sh $zero, 6($a0) -/* 0D7F94 7F0A3464 A4800008 */ sh $zero, 8($a0) -/* 0D7F98 7F0A3468 A480000A */ sh $zero, 0xa($a0) -/* 0D7F9C 7F0A346C A080000C */ sb $zero, 0xc($a0) -/* 0D7FA0 7F0A3470 A08F000D */ sb $t7, 0xd($a0) -/* 0D7FA4 7F0A3474 A080000E */ sb $zero, 0xe($a0) -/* 0D7FA8 7F0A3478 A095000F */ sb $s5, 0xf($a0) -/* 0D7FAC 7F0A347C 24900010 */ addiu $s0, $a0, 0x10 -.L7F0A3480: -/* 0D7FB0 7F0A3480 26D7FFF9 */ addiu $s7, $s6, -7 -/* 0D7FB4 7F0A3484 2AE10007 */ slti $at, $s7, 7 -/* 0D7FB8 7F0A3488 241500B0 */ li $s5, 176 -/* 0D7FBC 7F0A348C 14200129 */ bnez $at, .L7F0A3934 -/* 0D7FC0 7F0A3490 24110007 */ li $s1, 7 -/* 0D7FC4 7F0A3494 44962000 */ mtc1 $s6, $f4 -/* 0D7FC8 7F0A3498 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 0D7FCC 7F0A349C 4481E000 */ mtc1 $at, $f28 -/* 0D7FD0 7F0A34A0 46802020 */ cvt.s.w $f0, $f4 -/* 0D7FD4 7F0A34A4 3C014230 */ li $at, 0x42300000 # 44.000000 -/* 0D7FD8 7F0A34A8 4481D000 */ mtc1 $at, $f26 -/* 0D7FDC 7F0A34AC 3C014402 */ li $at, 0x44020000 # 520.000000 -/* 0D7FE0 7F0A34B0 4481C000 */ mtc1 $at, $f24 -/* 0D7FE4 7F0A34B4 4480B000 */ mtc1 $zero, $f22 -/* 0D7FE8 7F0A34B8 E7A0006C */ swc1 $f0, 0x6c($sp) -/* 0D7FEC 7F0A34BC 241300FF */ li $s3, 255 -/* 0D7FF0 7F0A34C0 44913000 */ mtc1 $s1, $f6 -.L7F0A34C4: -/* 0D7FF4 7F0A34C4 3C018005 */ lui $at, %hi(D_8005774C) -/* 0D7FF8 7F0A34C8 C42A774C */ lwc1 $f10, %lo(D_8005774C)($at) -/* 0D7FFC 7F0A34CC 46803220 */ cvt.s.w $f8, $f6 -/* 0D8000 7F0A34D0 C7A0006C */ lwc1 $f0, 0x6c($sp) -/* 0D8004 7F0A34D4 460A4402 */ mul.s $f16, $f8, $f10 -/* 0D8008 7F0A34D8 46008503 */ div.s $f20, $f16, $f0 -/* 0D800C 7F0A34DC 0FC15FAB */ jal sinf -/* 0D8010 7F0A34E0 4600A306 */ mov.s $f12, $f20 -/* 0D8014 7F0A34E4 46180482 */ mul.s $f18, $f0, $f24 -/* 0D8018 7F0A34E8 4600A306 */ mov.s $f12, $f20 -/* 0D801C 7F0A34EC 461E9102 */ mul.s $f4, $f18, $f30 -/* 0D8020 7F0A34F0 4600218D */ trunc.w.s $f6, $f4 -/* 0D8024 7F0A34F4 44123000 */ mfc1 $s2, $f6 -/* 0D8028 7F0A34F8 00000000 */ nop -/* 0D802C 7F0A34FC 0012CC00 */ sll $t9, $s2, 0x10 -/* 0D8030 7F0A3500 0FC15FA8 */ jal cosf -/* 0D8034 7F0A3504 00199403 */ sra $s2, $t9, 0x10 -/* 0D8038 7F0A3508 46180202 */ mul.s $f8, $f0, $f24 -/* 0D803C 7F0A350C 264B0001 */ addiu $t3, $s2, 1 -/* 0D8040 7F0A3510 A60B0000 */ sh $t3, ($s0) -/* 0D8044 7F0A3514 A6000002 */ sh $zero, 2($s0) -/* 0D8048 7F0A3518 A6000006 */ sh $zero, 6($s0) -/* 0D804C 7F0A351C A6000008 */ sh $zero, 8($s0) -/* 0D8050 7F0A3520 A600000A */ sh $zero, 0xa($s0) -/* 0D8054 7F0A3524 461E4282 */ mul.s $f10, $f8, $f30 -/* 0D8058 7F0A3528 4600A306 */ mov.s $f12, $f20 -/* 0D805C 7F0A352C 4600540D */ trunc.w.s $f16, $f10 -/* 0D8060 7F0A3530 440D8000 */ mfc1 $t5, $f16 -/* 0D8064 7F0A3534 00000000 */ nop -/* 0D8068 7F0A3538 000DA400 */ sll $s4, $t5, 0x10 -/* 0D806C 7F0A353C 00145403 */ sra $t2, $s4, 0x10 -/* 0D8070 7F0A3540 000D7023 */ negu $t6, $t5 -/* 0D8074 7F0A3544 0140A025 */ move $s4, $t2 -/* 0D8078 7F0A3548 0FC15FA8 */ jal cosf -/* 0D807C 7F0A354C A60E0004 */ sh $t6, 4($s0) -/* 0D8080 7F0A3550 46160482 */ mul.s $f18, $f0, $f22 -/* 0D8084 7F0A3554 24180001 */ li $t8, 1 -/* 0D8088 7F0A3558 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D808C 7F0A355C 4612B101 */ sub.s $f4, $f22, $f18 -/* 0D8090 7F0A3560 444FF800 */ cfc1 $t7, $31 -/* 0D8094 7F0A3564 44D8F800 */ ctc1 $t8, $31 -/* 0D8098 7F0A3568 00000000 */ nop -/* 0D809C 7F0A356C 460021A4 */ cvt.w.s $f6, $f4 -/* 0D80A0 7F0A3570 4458F800 */ cfc1 $t8, $31 -/* 0D80A4 7F0A3574 00000000 */ nop -/* 0D80A8 7F0A3578 33180078 */ andi $t8, $t8, 0x78 -/* 0D80AC 7F0A357C 53000013 */ beql $t8, $zero, .L7F0A35CC -/* 0D80B0 7F0A3580 44183000 */ mfc1 $t8, $f6 -/* 0D80B4 7F0A3584 44813000 */ mtc1 $at, $f6 -/* 0D80B8 7F0A3588 24180001 */ li $t8, 1 -/* 0D80BC 7F0A358C 46062181 */ sub.s $f6, $f4, $f6 -/* 0D80C0 7F0A3590 44D8F800 */ ctc1 $t8, $31 -/* 0D80C4 7F0A3594 00000000 */ nop -/* 0D80C8 7F0A3598 460031A4 */ cvt.w.s $f6, $f6 -/* 0D80CC 7F0A359C 4458F800 */ cfc1 $t8, $31 -/* 0D80D0 7F0A35A0 00000000 */ nop -/* 0D80D4 7F0A35A4 33180078 */ andi $t8, $t8, 0x78 -/* 0D80D8 7F0A35A8 17000005 */ bnez $t8, .L7F0A35C0 -/* 0D80DC 7F0A35AC 00000000 */ nop -/* 0D80E0 7F0A35B0 44183000 */ mfc1 $t8, $f6 -/* 0D80E4 7F0A35B4 3C018000 */ lui $at, 0x8000 -/* 0D80E8 7F0A35B8 10000007 */ b .L7F0A35D8 -/* 0D80EC 7F0A35BC 0301C025 */ or $t8, $t8, $at -.L7F0A35C0: -/* 0D80F0 7F0A35C0 10000005 */ b .L7F0A35D8 -/* 0D80F4 7F0A35C4 2418FFFF */ li $t8, -1 -/* 0D80F8 7F0A35C8 44183000 */ mfc1 $t8, $f6 -.L7F0A35CC: -/* 0D80FC 7F0A35CC 00000000 */ nop -/* 0D8100 7F0A35D0 0700FFFB */ bltz $t8, .L7F0A35C0 -/* 0D8104 7F0A35D4 00000000 */ nop -.L7F0A35D8: -/* 0D8108 7F0A35D8 44CFF800 */ ctc1 $t7, $31 -/* 0D810C 7F0A35DC A218000C */ sb $t8, 0xc($s0) -/* 0D8110 7F0A35E0 0FC15FA8 */ jal cosf -/* 0D8114 7F0A35E4 4600A306 */ mov.s $f12, $f20 -/* 0D8118 7F0A35E8 461C0202 */ mul.s $f8, $f0, $f28 -/* 0D811C 7F0A35EC 24080001 */ li $t0, 1 -/* 0D8120 7F0A35F0 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D8124 7F0A35F4 4608D281 */ sub.s $f10, $f26, $f8 -/* 0D8128 7F0A35F8 4459F800 */ cfc1 $t9, $31 -/* 0D812C 7F0A35FC 44C8F800 */ ctc1 $t0, $31 -/* 0D8130 7F0A3600 00000000 */ nop -/* 0D8134 7F0A3604 46005424 */ cvt.w.s $f16, $f10 -/* 0D8138 7F0A3608 4448F800 */ cfc1 $t0, $31 -/* 0D813C 7F0A360C 00000000 */ nop -/* 0D8140 7F0A3610 31080078 */ andi $t0, $t0, 0x78 -/* 0D8144 7F0A3614 51000013 */ beql $t0, $zero, .L7F0A3664 -/* 0D8148 7F0A3618 44088000 */ mfc1 $t0, $f16 -/* 0D814C 7F0A361C 44818000 */ mtc1 $at, $f16 -/* 0D8150 7F0A3620 24080001 */ li $t0, 1 -/* 0D8154 7F0A3624 46105401 */ sub.s $f16, $f10, $f16 -/* 0D8158 7F0A3628 44C8F800 */ ctc1 $t0, $31 -/* 0D815C 7F0A362C 00000000 */ nop -/* 0D8160 7F0A3630 46008424 */ cvt.w.s $f16, $f16 -/* 0D8164 7F0A3634 4448F800 */ cfc1 $t0, $31 -/* 0D8168 7F0A3638 00000000 */ nop -/* 0D816C 7F0A363C 31080078 */ andi $t0, $t0, 0x78 -/* 0D8170 7F0A3640 15000005 */ bnez $t0, .L7F0A3658 -/* 0D8174 7F0A3644 00000000 */ nop -/* 0D8178 7F0A3648 44088000 */ mfc1 $t0, $f16 -/* 0D817C 7F0A364C 3C018000 */ lui $at, 0x8000 -/* 0D8180 7F0A3650 10000007 */ b .L7F0A3670 -/* 0D8184 7F0A3654 01014025 */ or $t0, $t0, $at -.L7F0A3658: -/* 0D8188 7F0A3658 10000005 */ b .L7F0A3670 -/* 0D818C 7F0A365C 2408FFFF */ li $t0, -1 -/* 0D8190 7F0A3660 44088000 */ mfc1 $t0, $f16 -.L7F0A3664: -/* 0D8194 7F0A3664 00000000 */ nop -/* 0D8198 7F0A3668 0500FFFB */ bltz $t0, .L7F0A3658 -/* 0D819C 7F0A366C 00000000 */ nop -.L7F0A3670: -/* 0D81A0 7F0A3670 44D9F800 */ ctc1 $t9, $31 -/* 0D81A4 7F0A3674 A208000D */ sb $t0, 0xd($s0) -/* 0D81A8 7F0A3678 0FC15FA8 */ jal cosf -/* 0D81AC 7F0A367C 4600A306 */ mov.s $f12, $f20 -/* 0D81B0 7F0A3680 46160482 */ mul.s $f18, $f0, $f22 -/* 0D81B4 7F0A3684 240A0001 */ li $t2, 1 -/* 0D81B8 7F0A3688 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D81BC 7F0A368C 4612B101 */ sub.s $f4, $f22, $f18 -/* 0D81C0 7F0A3690 4449F800 */ cfc1 $t1, $31 -/* 0D81C4 7F0A3694 44CAF800 */ ctc1 $t2, $31 -/* 0D81C8 7F0A3698 00000000 */ nop -/* 0D81CC 7F0A369C 460021A4 */ cvt.w.s $f6, $f4 -/* 0D81D0 7F0A36A0 444AF800 */ cfc1 $t2, $31 -/* 0D81D4 7F0A36A4 00000000 */ nop -/* 0D81D8 7F0A36A8 314A0078 */ andi $t2, $t2, 0x78 -/* 0D81DC 7F0A36AC 51400013 */ beql $t2, $zero, .L7F0A36FC -/* 0D81E0 7F0A36B0 440A3000 */ mfc1 $t2, $f6 -/* 0D81E4 7F0A36B4 44813000 */ mtc1 $at, $f6 -/* 0D81E8 7F0A36B8 240A0001 */ li $t2, 1 -/* 0D81EC 7F0A36BC 46062181 */ sub.s $f6, $f4, $f6 -/* 0D81F0 7F0A36C0 44CAF800 */ ctc1 $t2, $31 -/* 0D81F4 7F0A36C4 00000000 */ nop -/* 0D81F8 7F0A36C8 460031A4 */ cvt.w.s $f6, $f6 -/* 0D81FC 7F0A36CC 444AF800 */ cfc1 $t2, $31 -/* 0D8200 7F0A36D0 00000000 */ nop -/* 0D8204 7F0A36D4 314A0078 */ andi $t2, $t2, 0x78 -/* 0D8208 7F0A36D8 15400005 */ bnez $t2, .L7F0A36F0 -/* 0D820C 7F0A36DC 00000000 */ nop -/* 0D8210 7F0A36E0 440A3000 */ mfc1 $t2, $f6 -/* 0D8214 7F0A36E4 3C018000 */ lui $at, 0x8000 -/* 0D8218 7F0A36E8 10000007 */ b .L7F0A3708 -/* 0D821C 7F0A36EC 01415025 */ or $t2, $t2, $at -.L7F0A36F0: -/* 0D8220 7F0A36F0 10000005 */ b .L7F0A3708 -/* 0D8224 7F0A36F4 240AFFFF */ li $t2, -1 -/* 0D8228 7F0A36F8 440A3000 */ mfc1 $t2, $f6 -.L7F0A36FC: -/* 0D822C 7F0A36FC 00000000 */ nop -/* 0D8230 7F0A3700 0540FFFB */ bltz $t2, .L7F0A36F0 -/* 0D8234 7F0A3704 00000000 */ nop -.L7F0A3708: -/* 0D8238 7F0A3708 44C9F800 */ ctc1 $t1, $31 -/* 0D823C 7F0A370C A20A000E */ sb $t2, 0xe($s0) -/* 0D8240 7F0A3710 A215000F */ sb $s5, 0xf($s0) -/* 0D8244 7F0A3714 12200083 */ beqz $s1, .L7F0A3924 -/* 0D8248 7F0A3718 26100010 */ addiu $s0, $s0, 0x10 -/* 0D824C 7F0A371C 0236082A */ slt $at, $s1, $s6 -/* 0D8250 7F0A3720 10200080 */ beqz $at, .L7F0A3924 -/* 0D8254 7F0A3724 240B0001 */ li $t3, 1 -/* 0D8258 7F0A3728 01726023 */ subu $t4, $t3, $s2 -/* 0D825C 7F0A372C 00146823 */ negu $t5, $s4 -/* 0D8260 7F0A3730 A60C0000 */ sh $t4, ($s0) -/* 0D8264 7F0A3734 A6000002 */ sh $zero, 2($s0) -/* 0D8268 7F0A3738 A60D0004 */ sh $t5, 4($s0) -/* 0D826C 7F0A373C A6000006 */ sh $zero, 6($s0) -/* 0D8270 7F0A3740 A6000008 */ sh $zero, 8($s0) -/* 0D8274 7F0A3744 A600000A */ sh $zero, 0xa($s0) -/* 0D8278 7F0A3748 A213000C */ sb $s3, 0xc($s0) -/* 0D827C 7F0A374C A213000D */ sb $s3, 0xd($s0) -/* 0D8280 7F0A3750 A213000E */ sb $s3, 0xe($s0) -/* 0D8284 7F0A3754 0FC15FA8 */ jal cosf -/* 0D8288 7F0A3758 4600A306 */ mov.s $f12, $f20 -/* 0D828C 7F0A375C 46160202 */ mul.s $f8, $f0, $f22 -/* 0D8290 7F0A3760 240F0001 */ li $t7, 1 -/* 0D8294 7F0A3764 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D8298 7F0A3768 4608B281 */ sub.s $f10, $f22, $f8 -/* 0D829C 7F0A376C 444EF800 */ cfc1 $t6, $31 -/* 0D82A0 7F0A3770 44CFF800 */ ctc1 $t7, $31 -/* 0D82A4 7F0A3774 00000000 */ nop -/* 0D82A8 7F0A3778 46005424 */ cvt.w.s $f16, $f10 -/* 0D82AC 7F0A377C 444FF800 */ cfc1 $t7, $31 -/* 0D82B0 7F0A3780 00000000 */ nop -/* 0D82B4 7F0A3784 31EF0078 */ andi $t7, $t7, 0x78 -/* 0D82B8 7F0A3788 51E00013 */ beql $t7, $zero, .L7F0A37D8 -/* 0D82BC 7F0A378C 440F8000 */ mfc1 $t7, $f16 -/* 0D82C0 7F0A3790 44818000 */ mtc1 $at, $f16 -/* 0D82C4 7F0A3794 240F0001 */ li $t7, 1 -/* 0D82C8 7F0A3798 46105401 */ sub.s $f16, $f10, $f16 -/* 0D82CC 7F0A379C 44CFF800 */ ctc1 $t7, $31 -/* 0D82D0 7F0A37A0 00000000 */ nop -/* 0D82D4 7F0A37A4 46008424 */ cvt.w.s $f16, $f16 -/* 0D82D8 7F0A37A8 444FF800 */ cfc1 $t7, $31 -/* 0D82DC 7F0A37AC 00000000 */ nop -/* 0D82E0 7F0A37B0 31EF0078 */ andi $t7, $t7, 0x78 -/* 0D82E4 7F0A37B4 15E00005 */ bnez $t7, .L7F0A37CC -/* 0D82E8 7F0A37B8 00000000 */ nop -/* 0D82EC 7F0A37BC 440F8000 */ mfc1 $t7, $f16 -/* 0D82F0 7F0A37C0 3C018000 */ lui $at, 0x8000 -/* 0D82F4 7F0A37C4 10000007 */ b .L7F0A37E4 -/* 0D82F8 7F0A37C8 01E17825 */ or $t7, $t7, $at -.L7F0A37CC: -/* 0D82FC 7F0A37CC 10000005 */ b .L7F0A37E4 -/* 0D8300 7F0A37D0 240FFFFF */ li $t7, -1 -/* 0D8304 7F0A37D4 440F8000 */ mfc1 $t7, $f16 -.L7F0A37D8: -/* 0D8308 7F0A37D8 00000000 */ nop -/* 0D830C 7F0A37DC 05E0FFFB */ bltz $t7, .L7F0A37CC -/* 0D8310 7F0A37E0 00000000 */ nop -.L7F0A37E4: -/* 0D8314 7F0A37E4 44CEF800 */ ctc1 $t6, $31 -/* 0D8318 7F0A37E8 A20F000C */ sb $t7, 0xc($s0) -/* 0D831C 7F0A37EC 0FC15FA8 */ jal cosf -/* 0D8320 7F0A37F0 4600A306 */ mov.s $f12, $f20 -/* 0D8324 7F0A37F4 461C0482 */ mul.s $f18, $f0, $f28 -/* 0D8328 7F0A37F8 24190001 */ li $t9, 1 -/* 0D832C 7F0A37FC 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D8330 7F0A3800 4612D101 */ sub.s $f4, $f26, $f18 -/* 0D8334 7F0A3804 4458F800 */ cfc1 $t8, $31 -/* 0D8338 7F0A3808 44D9F800 */ ctc1 $t9, $31 -/* 0D833C 7F0A380C 00000000 */ nop -/* 0D8340 7F0A3810 460021A4 */ cvt.w.s $f6, $f4 -/* 0D8344 7F0A3814 4459F800 */ cfc1 $t9, $31 -/* 0D8348 7F0A3818 00000000 */ nop -/* 0D834C 7F0A381C 33390078 */ andi $t9, $t9, 0x78 -/* 0D8350 7F0A3820 53200013 */ beql $t9, $zero, .L7F0A3870 -/* 0D8354 7F0A3824 44193000 */ mfc1 $t9, $f6 -/* 0D8358 7F0A3828 44813000 */ mtc1 $at, $f6 -/* 0D835C 7F0A382C 24190001 */ li $t9, 1 -/* 0D8360 7F0A3830 46062181 */ sub.s $f6, $f4, $f6 -/* 0D8364 7F0A3834 44D9F800 */ ctc1 $t9, $31 -/* 0D8368 7F0A3838 00000000 */ nop -/* 0D836C 7F0A383C 460031A4 */ cvt.w.s $f6, $f6 -/* 0D8370 7F0A3840 4459F800 */ cfc1 $t9, $31 -/* 0D8374 7F0A3844 00000000 */ nop -/* 0D8378 7F0A3848 33390078 */ andi $t9, $t9, 0x78 -/* 0D837C 7F0A384C 17200005 */ bnez $t9, .L7F0A3864 -/* 0D8380 7F0A3850 00000000 */ nop -/* 0D8384 7F0A3854 44193000 */ mfc1 $t9, $f6 -/* 0D8388 7F0A3858 3C018000 */ lui $at, 0x8000 -/* 0D838C 7F0A385C 10000007 */ b .L7F0A387C -/* 0D8390 7F0A3860 0321C825 */ or $t9, $t9, $at -.L7F0A3864: -/* 0D8394 7F0A3864 10000005 */ b .L7F0A387C -/* 0D8398 7F0A3868 2419FFFF */ li $t9, -1 -/* 0D839C 7F0A386C 44193000 */ mfc1 $t9, $f6 -.L7F0A3870: -/* 0D83A0 7F0A3870 00000000 */ nop -/* 0D83A4 7F0A3874 0720FFFB */ bltz $t9, .L7F0A3864 -/* 0D83A8 7F0A3878 00000000 */ nop -.L7F0A387C: -/* 0D83AC 7F0A387C 44D8F800 */ ctc1 $t8, $31 -/* 0D83B0 7F0A3880 A219000D */ sb $t9, 0xd($s0) -/* 0D83B4 7F0A3884 0FC15FA8 */ jal cosf -/* 0D83B8 7F0A3888 4600A306 */ mov.s $f12, $f20 -/* 0D83BC 7F0A388C 46160202 */ mul.s $f8, $f0, $f22 -/* 0D83C0 7F0A3890 24090001 */ li $t1, 1 -/* 0D83C4 7F0A3894 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D83C8 7F0A3898 4608B281 */ sub.s $f10, $f22, $f8 -/* 0D83CC 7F0A389C 4448F800 */ cfc1 $t0, $31 -/* 0D83D0 7F0A38A0 44C9F800 */ ctc1 $t1, $31 -/* 0D83D4 7F0A38A4 00000000 */ nop -/* 0D83D8 7F0A38A8 46005424 */ cvt.w.s $f16, $f10 -/* 0D83DC 7F0A38AC 4449F800 */ cfc1 $t1, $31 -/* 0D83E0 7F0A38B0 00000000 */ nop -/* 0D83E4 7F0A38B4 31290078 */ andi $t1, $t1, 0x78 -/* 0D83E8 7F0A38B8 51200013 */ beql $t1, $zero, .L7F0A3908 -/* 0D83EC 7F0A38BC 44098000 */ mfc1 $t1, $f16 -/* 0D83F0 7F0A38C0 44818000 */ mtc1 $at, $f16 -/* 0D83F4 7F0A38C4 24090001 */ li $t1, 1 -/* 0D83F8 7F0A38C8 46105401 */ sub.s $f16, $f10, $f16 -/* 0D83FC 7F0A38CC 44C9F800 */ ctc1 $t1, $31 -/* 0D8400 7F0A38D0 00000000 */ nop -/* 0D8404 7F0A38D4 46008424 */ cvt.w.s $f16, $f16 -/* 0D8408 7F0A38D8 4449F800 */ cfc1 $t1, $31 -/* 0D840C 7F0A38DC 00000000 */ nop -/* 0D8410 7F0A38E0 31290078 */ andi $t1, $t1, 0x78 -/* 0D8414 7F0A38E4 15200005 */ bnez $t1, .L7F0A38FC -/* 0D8418 7F0A38E8 00000000 */ nop -/* 0D841C 7F0A38EC 44098000 */ mfc1 $t1, $f16 -/* 0D8420 7F0A38F0 3C018000 */ lui $at, 0x8000 -/* 0D8424 7F0A38F4 10000007 */ b .L7F0A3914 -/* 0D8428 7F0A38F8 01214825 */ or $t1, $t1, $at -.L7F0A38FC: -/* 0D842C 7F0A38FC 10000005 */ b .L7F0A3914 -/* 0D8430 7F0A3900 2409FFFF */ li $t1, -1 -/* 0D8434 7F0A3904 44098000 */ mfc1 $t1, $f16 -.L7F0A3908: -/* 0D8438 7F0A3908 00000000 */ nop -/* 0D843C 7F0A390C 0520FFFB */ bltz $t1, .L7F0A38FC -/* 0D8440 7F0A3910 00000000 */ nop -.L7F0A3914: -/* 0D8444 7F0A3914 44C8F800 */ ctc1 $t0, $31 -/* 0D8448 7F0A3918 A209000E */ sb $t1, 0xe($s0) -/* 0D844C 7F0A391C A215000F */ sb $s5, 0xf($s0) -/* 0D8450 7F0A3920 26100010 */ addiu $s0, $s0, 0x10 -.L7F0A3924: -/* 0D8454 7F0A3924 26310002 */ addiu $s1, $s1, 2 -/* 0D8458 7F0A3928 02F1082A */ slt $at, $s7, $s1 -/* 0D845C 7F0A392C 5020FEE5 */ beql $at, $zero, .L7F0A34C4 -/* 0D8460 7F0A3930 44913000 */ mtc1 $s1, $f6 -.L7F0A3934: -/* 0D8464 7F0A3934 8FBF0064 */ lw $ra, 0x64($sp) -/* 0D8468 7F0A3938 D7B40010 */ ldc1 $f20, 0x10($sp) -/* 0D846C 7F0A393C D7B60018 */ ldc1 $f22, 0x18($sp) -/* 0D8470 7F0A3940 D7B80020 */ ldc1 $f24, 0x20($sp) -/* 0D8474 7F0A3944 D7BA0028 */ ldc1 $f26, 0x28($sp) -/* 0D8478 7F0A3948 D7BC0030 */ ldc1 $f28, 0x30($sp) -/* 0D847C 7F0A394C D7BE0038 */ ldc1 $f30, 0x38($sp) -/* 0D8480 7F0A3950 8FB00044 */ lw $s0, 0x44($sp) -/* 0D8484 7F0A3954 8FB10048 */ lw $s1, 0x48($sp) -/* 0D8488 7F0A3958 8FB2004C */ lw $s2, 0x4c($sp) -/* 0D848C 7F0A395C 8FB30050 */ lw $s3, 0x50($sp) -/* 0D8490 7F0A3960 8FB40054 */ lw $s4, 0x54($sp) -/* 0D8494 7F0A3964 8FB50058 */ lw $s5, 0x58($sp) -/* 0D8498 7F0A3968 8FB6005C */ lw $s6, 0x5c($sp) -/* 0D849C 7F0A396C 8FB70060 */ lw $s7, 0x60($sp) -/* 0D84A0 7F0A3970 03E00008 */ jr $ra -/* 0D84A4 7F0A3974 27BD0080 */ addiu $sp, $sp, 0x80 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_8005774C -.word 0x3fb501e2 -.text -glabel sub_GAME_7F0A33F8 -/* 0D5328 7F0A2938 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0D532C 7F0A293C F7BE0038 */ sdc1 $f30, 0x38($sp) -/* 0D5330 7F0A2940 4486F000 */ mtc1 $a2, $f30 -/* 0D5334 7F0A2944 AFB6005C */ sw $s6, 0x5c($sp) -/* 0D5338 7F0A2948 AFB00044 */ sw $s0, 0x44($sp) -/* 0D533C 7F0A294C 00808025 */ move $s0, $a0 -/* 0D5340 7F0A2950 00A0B025 */ move $s6, $a1 -/* 0D5344 7F0A2954 AFBF0064 */ sw $ra, 0x64($sp) -/* 0D5348 7F0A2958 AFB70060 */ sw $s7, 0x60($sp) -/* 0D534C 7F0A295C AFB50058 */ sw $s5, 0x58($sp) -/* 0D5350 7F0A2960 AFB40054 */ sw $s4, 0x54($sp) -/* 0D5354 7F0A2964 AFB30050 */ sw $s3, 0x50($sp) -/* 0D5358 7F0A2968 AFB2004C */ sw $s2, 0x4c($sp) -/* 0D535C 7F0A296C AFB10048 */ sw $s1, 0x48($sp) -/* 0D5360 7F0A2970 F7BC0030 */ sdc1 $f28, 0x30($sp) -/* 0D5364 7F0A2974 F7BA0028 */ sdc1 $f26, 0x28($sp) -/* 0D5368 7F0A2978 F7B80020 */ sdc1 $f24, 0x20($sp) -/* 0D536C 7F0A297C F7B60018 */ sdc1 $f22, 0x18($sp) -/* 0D5370 7F0A2980 10E0000F */ beqz $a3, .L7F0A29C0 -/* 0D5374 7F0A2984 F7B40010 */ sdc1 $f20, 0x10($sp) -/* 0D5378 7F0A2988 241500B0 */ li $s5, 176 -/* 0D537C 7F0A298C 240E0001 */ li $t6, 1 -/* 0D5380 7F0A2990 240F002C */ li $t7, 44 -/* 0D5384 7F0A2994 A48E0000 */ sh $t6, ($a0) -/* 0D5388 7F0A2998 A4800002 */ sh $zero, 2($a0) -/* 0D538C 7F0A299C A4800004 */ sh $zero, 4($a0) -/* 0D5390 7F0A29A0 A4800006 */ sh $zero, 6($a0) -/* 0D5394 7F0A29A4 A4800008 */ sh $zero, 8($a0) -/* 0D5398 7F0A29A8 A480000A */ sh $zero, 0xa($a0) -/* 0D539C 7F0A29AC A080000C */ sb $zero, 0xc($a0) -/* 0D53A0 7F0A29B0 A08F000D */ sb $t7, 0xd($a0) -/* 0D53A4 7F0A29B4 A080000E */ sb $zero, 0xe($a0) -/* 0D53A8 7F0A29B8 A095000F */ sb $s5, 0xf($a0) -/* 0D53AC 7F0A29BC 24900010 */ addiu $s0, $a0, 0x10 -.L7F0A29C0: -/* 0D53B0 7F0A29C0 26D7FFF9 */ addiu $s7, $s6, -7 -/* 0D53B4 7F0A29C4 2AE10007 */ slti $at, $s7, 7 -/* 0D53B8 7F0A29C8 241500B0 */ li $s5, 176 -/* 0D53BC 7F0A29CC 14200129 */ bnez $at, .L7F0A2E74 -/* 0D53C0 7F0A29D0 24110007 */ li $s1, 7 -/* 0D53C4 7F0A29D4 44962000 */ mtc1 $s6, $f4 -/* 0D53C8 7F0A29D8 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 0D53CC 7F0A29DC 4481E000 */ mtc1 $at, $f28 -/* 0D53D0 7F0A29E0 46802020 */ cvt.s.w $f0, $f4 -/* 0D53D4 7F0A29E4 3C014230 */ li $at, 0x42300000 # 44.000000 -/* 0D53D8 7F0A29E8 4481D000 */ mtc1 $at, $f26 -/* 0D53DC 7F0A29EC 3C014402 */ li $at, 0x44020000 # 520.000000 -/* 0D53E0 7F0A29F0 4481C000 */ mtc1 $at, $f24 -/* 0D53E4 7F0A29F4 4480B000 */ mtc1 $zero, $f22 -/* 0D53E8 7F0A29F8 E7A0006C */ swc1 $f0, 0x6c($sp) -/* 0D53EC 7F0A29FC 241300FF */ li $s3, 255 -/* 0D53F0 7F0A2A00 44913000 */ mtc1 $s1, $f6 -.L7F0A2A04: -/* 0D53F4 7F0A2A04 3C018005 */ lui $at, %hi(D_8004CE1C) # $at, 0x8005 -/* 0D53F8 7F0A2A08 C42ACE1C */ lwc1 $f10, %lo(D_8004CE1C)($at) -/* 0D53FC 7F0A2A0C 46803220 */ cvt.s.w $f8, $f6 -/* 0D5400 7F0A2A10 C7A0006C */ lwc1 $f0, 0x6c($sp) -/* 0D5404 7F0A2A14 460A4402 */ mul.s $f16, $f8, $f10 -/* 0D5408 7F0A2A18 46008503 */ div.s $f20, $f16, $f0 -/* 0D540C 7F0A2A1C 0FC1606B */ jal sinf -/* 0D5410 7F0A2A20 4600A306 */ mov.s $f12, $f20 -/* 0D5414 7F0A2A24 46180482 */ mul.s $f18, $f0, $f24 -/* 0D5418 7F0A2A28 4600A306 */ mov.s $f12, $f20 -/* 0D541C 7F0A2A2C 461E9102 */ mul.s $f4, $f18, $f30 -/* 0D5420 7F0A2A30 4600218D */ trunc.w.s $f6, $f4 -/* 0D5424 7F0A2A34 44123000 */ mfc1 $s2, $f6 -/* 0D5428 7F0A2A38 00000000 */ nop -/* 0D542C 7F0A2A3C 0012CC00 */ sll $t9, $s2, 0x10 -/* 0D5430 7F0A2A40 0FC16068 */ jal cosf -/* 0D5434 7F0A2A44 00199403 */ sra $s2, $t9, 0x10 -/* 0D5438 7F0A2A48 46180202 */ mul.s $f8, $f0, $f24 -/* 0D543C 7F0A2A4C 264B0001 */ addiu $t3, $s2, 1 -/* 0D5440 7F0A2A50 A60B0000 */ sh $t3, ($s0) -/* 0D5444 7F0A2A54 A6000002 */ sh $zero, 2($s0) -/* 0D5448 7F0A2A58 A6000006 */ sh $zero, 6($s0) -/* 0D544C 7F0A2A5C A6000008 */ sh $zero, 8($s0) -/* 0D5450 7F0A2A60 A600000A */ sh $zero, 0xa($s0) -/* 0D5454 7F0A2A64 461E4282 */ mul.s $f10, $f8, $f30 -/* 0D5458 7F0A2A68 4600A306 */ mov.s $f12, $f20 -/* 0D545C 7F0A2A6C 4600540D */ trunc.w.s $f16, $f10 -/* 0D5460 7F0A2A70 440D8000 */ mfc1 $t5, $f16 -/* 0D5464 7F0A2A74 00000000 */ nop -/* 0D5468 7F0A2A78 000DA400 */ sll $s4, $t5, 0x10 -/* 0D546C 7F0A2A7C 00145403 */ sra $t2, $s4, 0x10 -/* 0D5470 7F0A2A80 000D7023 */ negu $t6, $t5 -/* 0D5474 7F0A2A84 0140A025 */ move $s4, $t2 -/* 0D5478 7F0A2A88 0FC16068 */ jal cosf -/* 0D547C 7F0A2A8C A60E0004 */ sh $t6, 4($s0) -/* 0D5480 7F0A2A90 46160482 */ mul.s $f18, $f0, $f22 -/* 0D5484 7F0A2A94 24180001 */ li $t8, 1 -/* 0D5488 7F0A2A98 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D548C 7F0A2A9C 4612B101 */ sub.s $f4, $f22, $f18 -/* 0D5490 7F0A2AA0 444FF800 */ cfc1 $t7, $31 -/* 0D5494 7F0A2AA4 44D8F800 */ ctc1 $t8, $31 -/* 0D5498 7F0A2AA8 00000000 */ nop -/* 0D549C 7F0A2AAC 460021A4 */ cvt.w.s $f6, $f4 -/* 0D54A0 7F0A2AB0 4458F800 */ cfc1 $t8, $31 -/* 0D54A4 7F0A2AB4 00000000 */ nop -/* 0D54A8 7F0A2AB8 33180078 */ andi $t8, $t8, 0x78 -/* 0D54AC 7F0A2ABC 53000013 */ beql $t8, $zero, .L7F0A2B0C -/* 0D54B0 7F0A2AC0 44183000 */ mfc1 $t8, $f6 -/* 0D54B4 7F0A2AC4 44813000 */ mtc1 $at, $f6 -/* 0D54B8 7F0A2AC8 24180001 */ li $t8, 1 -/* 0D54BC 7F0A2ACC 46062181 */ sub.s $f6, $f4, $f6 -/* 0D54C0 7F0A2AD0 44D8F800 */ ctc1 $t8, $31 -/* 0D54C4 7F0A2AD4 00000000 */ nop -/* 0D54C8 7F0A2AD8 460031A4 */ cvt.w.s $f6, $f6 -/* 0D54CC 7F0A2ADC 4458F800 */ cfc1 $t8, $31 -/* 0D54D0 7F0A2AE0 00000000 */ nop -/* 0D54D4 7F0A2AE4 33180078 */ andi $t8, $t8, 0x78 -/* 0D54D8 7F0A2AE8 17000005 */ bnez $t8, .L7F0A2B00 -/* 0D54DC 7F0A2AEC 00000000 */ nop -/* 0D54E0 7F0A2AF0 44183000 */ mfc1 $t8, $f6 -/* 0D54E4 7F0A2AF4 3C018000 */ lui $at, 0x8000 -/* 0D54E8 7F0A2AF8 10000007 */ b .L7F0A2B18 -/* 0D54EC 7F0A2AFC 0301C025 */ or $t8, $t8, $at -.L7F0A2B00: -/* 0D54F0 7F0A2B00 10000005 */ b .L7F0A2B18 -/* 0D54F4 7F0A2B04 2418FFFF */ li $t8, -1 -/* 0D54F8 7F0A2B08 44183000 */ mfc1 $t8, $f6 -.L7F0A2B0C: -/* 0D54FC 7F0A2B0C 00000000 */ nop -/* 0D5500 7F0A2B10 0700FFFB */ bltz $t8, .L7F0A2B00 -/* 0D5504 7F0A2B14 00000000 */ nop -.L7F0A2B18: -/* 0D5508 7F0A2B18 44CFF800 */ ctc1 $t7, $31 -/* 0D550C 7F0A2B1C A218000C */ sb $t8, 0xc($s0) -/* 0D5510 7F0A2B20 0FC16068 */ jal cosf -/* 0D5514 7F0A2B24 4600A306 */ mov.s $f12, $f20 -/* 0D5518 7F0A2B28 461C0202 */ mul.s $f8, $f0, $f28 -/* 0D551C 7F0A2B2C 24080001 */ li $t0, 1 -/* 0D5520 7F0A2B30 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D5524 7F0A2B34 4608D281 */ sub.s $f10, $f26, $f8 -/* 0D5528 7F0A2B38 4459F800 */ cfc1 $t9, $31 -/* 0D552C 7F0A2B3C 44C8F800 */ ctc1 $t0, $31 -/* 0D5530 7F0A2B40 00000000 */ nop -/* 0D5534 7F0A2B44 46005424 */ cvt.w.s $f16, $f10 -/* 0D5538 7F0A2B48 4448F800 */ cfc1 $t0, $31 -/* 0D553C 7F0A2B4C 00000000 */ nop -/* 0D5540 7F0A2B50 31080078 */ andi $t0, $t0, 0x78 -/* 0D5544 7F0A2B54 51000013 */ beql $t0, $zero, .L7F0A2BA4 -/* 0D5548 7F0A2B58 44088000 */ mfc1 $t0, $f16 -/* 0D554C 7F0A2B5C 44818000 */ mtc1 $at, $f16 -/* 0D5550 7F0A2B60 24080001 */ li $t0, 1 -/* 0D5554 7F0A2B64 46105401 */ sub.s $f16, $f10, $f16 -/* 0D5558 7F0A2B68 44C8F800 */ ctc1 $t0, $31 -/* 0D555C 7F0A2B6C 00000000 */ nop -/* 0D5560 7F0A2B70 46008424 */ cvt.w.s $f16, $f16 -/* 0D5564 7F0A2B74 4448F800 */ cfc1 $t0, $31 -/* 0D5568 7F0A2B78 00000000 */ nop -/* 0D556C 7F0A2B7C 31080078 */ andi $t0, $t0, 0x78 -/* 0D5570 7F0A2B80 15000005 */ bnez $t0, .L7F0A2B98 -/* 0D5574 7F0A2B84 00000000 */ nop -/* 0D5578 7F0A2B88 44088000 */ mfc1 $t0, $f16 -/* 0D557C 7F0A2B8C 3C018000 */ lui $at, 0x8000 -/* 0D5580 7F0A2B90 10000007 */ b .L7F0A2BB0 -/* 0D5584 7F0A2B94 01014025 */ or $t0, $t0, $at -.L7F0A2B98: -/* 0D5588 7F0A2B98 10000005 */ b .L7F0A2BB0 -/* 0D558C 7F0A2B9C 2408FFFF */ li $t0, -1 -/* 0D5590 7F0A2BA0 44088000 */ mfc1 $t0, $f16 -.L7F0A2BA4: -/* 0D5594 7F0A2BA4 00000000 */ nop -/* 0D5598 7F0A2BA8 0500FFFB */ bltz $t0, .L7F0A2B98 -/* 0D559C 7F0A2BAC 00000000 */ nop -.L7F0A2BB0: -/* 0D55A0 7F0A2BB0 44D9F800 */ ctc1 $t9, $31 -/* 0D55A4 7F0A2BB4 A208000D */ sb $t0, 0xd($s0) -/* 0D55A8 7F0A2BB8 0FC16068 */ jal cosf -/* 0D55AC 7F0A2BBC 4600A306 */ mov.s $f12, $f20 -/* 0D55B0 7F0A2BC0 46160482 */ mul.s $f18, $f0, $f22 -/* 0D55B4 7F0A2BC4 240A0001 */ li $t2, 1 -/* 0D55B8 7F0A2BC8 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D55BC 7F0A2BCC 4612B101 */ sub.s $f4, $f22, $f18 -/* 0D55C0 7F0A2BD0 4449F800 */ cfc1 $t1, $31 -/* 0D55C4 7F0A2BD4 44CAF800 */ ctc1 $t2, $31 -/* 0D55C8 7F0A2BD8 00000000 */ nop -/* 0D55CC 7F0A2BDC 460021A4 */ cvt.w.s $f6, $f4 -/* 0D55D0 7F0A2BE0 444AF800 */ cfc1 $t2, $31 -/* 0D55D4 7F0A2BE4 00000000 */ nop -/* 0D55D8 7F0A2BE8 314A0078 */ andi $t2, $t2, 0x78 -/* 0D55DC 7F0A2BEC 51400013 */ beql $t2, $zero, .L7F0A2C3C -/* 0D55E0 7F0A2BF0 440A3000 */ mfc1 $t2, $f6 -/* 0D55E4 7F0A2BF4 44813000 */ mtc1 $at, $f6 -/* 0D55E8 7F0A2BF8 240A0001 */ li $t2, 1 -/* 0D55EC 7F0A2BFC 46062181 */ sub.s $f6, $f4, $f6 -/* 0D55F0 7F0A2C00 44CAF800 */ ctc1 $t2, $31 -/* 0D55F4 7F0A2C04 00000000 */ nop -/* 0D55F8 7F0A2C08 460031A4 */ cvt.w.s $f6, $f6 -/* 0D55FC 7F0A2C0C 444AF800 */ cfc1 $t2, $31 -/* 0D5600 7F0A2C10 00000000 */ nop -/* 0D5604 7F0A2C14 314A0078 */ andi $t2, $t2, 0x78 -/* 0D5608 7F0A2C18 15400005 */ bnez $t2, .L7F0A2C30 -/* 0D560C 7F0A2C1C 00000000 */ nop -/* 0D5610 7F0A2C20 440A3000 */ mfc1 $t2, $f6 -/* 0D5614 7F0A2C24 3C018000 */ lui $at, 0x8000 -/* 0D5618 7F0A2C28 10000007 */ b .L7F0A2C48 -/* 0D561C 7F0A2C2C 01415025 */ or $t2, $t2, $at -.L7F0A2C30: -/* 0D5620 7F0A2C30 10000005 */ b .L7F0A2C48 -/* 0D5624 7F0A2C34 240AFFFF */ li $t2, -1 -/* 0D5628 7F0A2C38 440A3000 */ mfc1 $t2, $f6 -.L7F0A2C3C: -/* 0D562C 7F0A2C3C 00000000 */ nop -/* 0D5630 7F0A2C40 0540FFFB */ bltz $t2, .L7F0A2C30 -/* 0D5634 7F0A2C44 00000000 */ nop -.L7F0A2C48: -/* 0D5638 7F0A2C48 44C9F800 */ ctc1 $t1, $31 -/* 0D563C 7F0A2C4C A20A000E */ sb $t2, 0xe($s0) -/* 0D5640 7F0A2C50 A215000F */ sb $s5, 0xf($s0) -/* 0D5644 7F0A2C54 12200083 */ beqz $s1, .L7F0A2E64 -/* 0D5648 7F0A2C58 26100010 */ addiu $s0, $s0, 0x10 -/* 0D564C 7F0A2C5C 0236082A */ slt $at, $s1, $s6 -/* 0D5650 7F0A2C60 10200080 */ beqz $at, .L7F0A2E64 -/* 0D5654 7F0A2C64 240B0001 */ li $t3, 1 -/* 0D5658 7F0A2C68 01726023 */ subu $t4, $t3, $s2 -/* 0D565C 7F0A2C6C 00146823 */ negu $t5, $s4 -/* 0D5660 7F0A2C70 A60C0000 */ sh $t4, ($s0) -/* 0D5664 7F0A2C74 A6000002 */ sh $zero, 2($s0) -/* 0D5668 7F0A2C78 A60D0004 */ sh $t5, 4($s0) -/* 0D566C 7F0A2C7C A6000006 */ sh $zero, 6($s0) -/* 0D5670 7F0A2C80 A6000008 */ sh $zero, 8($s0) -/* 0D5674 7F0A2C84 A600000A */ sh $zero, 0xa($s0) -/* 0D5678 7F0A2C88 A213000C */ sb $s3, 0xc($s0) -/* 0D567C 7F0A2C8C A213000D */ sb $s3, 0xd($s0) -/* 0D5680 7F0A2C90 A213000E */ sb $s3, 0xe($s0) -/* 0D5684 7F0A2C94 0FC16068 */ jal cosf -/* 0D5688 7F0A2C98 4600A306 */ mov.s $f12, $f20 -/* 0D568C 7F0A2C9C 46160202 */ mul.s $f8, $f0, $f22 -/* 0D5690 7F0A2CA0 240F0001 */ li $t7, 1 -/* 0D5694 7F0A2CA4 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D5698 7F0A2CA8 4608B281 */ sub.s $f10, $f22, $f8 -/* 0D569C 7F0A2CAC 444EF800 */ cfc1 $t6, $31 -/* 0D56A0 7F0A2CB0 44CFF800 */ ctc1 $t7, $31 -/* 0D56A4 7F0A2CB4 00000000 */ nop -/* 0D56A8 7F0A2CB8 46005424 */ cvt.w.s $f16, $f10 -/* 0D56AC 7F0A2CBC 444FF800 */ cfc1 $t7, $31 -/* 0D56B0 7F0A2CC0 00000000 */ nop -/* 0D56B4 7F0A2CC4 31EF0078 */ andi $t7, $t7, 0x78 -/* 0D56B8 7F0A2CC8 51E00013 */ beql $t7, $zero, .L7F0A2D18 -/* 0D56BC 7F0A2CCC 440F8000 */ mfc1 $t7, $f16 -/* 0D56C0 7F0A2CD0 44818000 */ mtc1 $at, $f16 -/* 0D56C4 7F0A2CD4 240F0001 */ li $t7, 1 -/* 0D56C8 7F0A2CD8 46105401 */ sub.s $f16, $f10, $f16 -/* 0D56CC 7F0A2CDC 44CFF800 */ ctc1 $t7, $31 -/* 0D56D0 7F0A2CE0 00000000 */ nop -/* 0D56D4 7F0A2CE4 46008424 */ cvt.w.s $f16, $f16 -/* 0D56D8 7F0A2CE8 444FF800 */ cfc1 $t7, $31 -/* 0D56DC 7F0A2CEC 00000000 */ nop -/* 0D56E0 7F0A2CF0 31EF0078 */ andi $t7, $t7, 0x78 -/* 0D56E4 7F0A2CF4 15E00005 */ bnez $t7, .L7F0A2D0C -/* 0D56E8 7F0A2CF8 00000000 */ nop -/* 0D56EC 7F0A2CFC 440F8000 */ mfc1 $t7, $f16 -/* 0D56F0 7F0A2D00 3C018000 */ lui $at, 0x8000 -/* 0D56F4 7F0A2D04 10000007 */ b .L7F0A2D24 -/* 0D56F8 7F0A2D08 01E17825 */ or $t7, $t7, $at -.L7F0A2D0C: -/* 0D56FC 7F0A2D0C 10000005 */ b .L7F0A2D24 -/* 0D5700 7F0A2D10 240FFFFF */ li $t7, -1 -/* 0D5704 7F0A2D14 440F8000 */ mfc1 $t7, $f16 -.L7F0A2D18: -/* 0D5708 7F0A2D18 00000000 */ nop -/* 0D570C 7F0A2D1C 05E0FFFB */ bltz $t7, .L7F0A2D0C -/* 0D5710 7F0A2D20 00000000 */ nop -.L7F0A2D24: -/* 0D5714 7F0A2D24 44CEF800 */ ctc1 $t6, $31 -/* 0D5718 7F0A2D28 A20F000C */ sb $t7, 0xc($s0) -/* 0D571C 7F0A2D2C 0FC16068 */ jal cosf -/* 0D5720 7F0A2D30 4600A306 */ mov.s $f12, $f20 -/* 0D5724 7F0A2D34 461C0482 */ mul.s $f18, $f0, $f28 -/* 0D5728 7F0A2D38 24190001 */ li $t9, 1 -/* 0D572C 7F0A2D3C 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D5730 7F0A2D40 4612D101 */ sub.s $f4, $f26, $f18 -/* 0D5734 7F0A2D44 4458F800 */ cfc1 $t8, $31 -/* 0D5738 7F0A2D48 44D9F800 */ ctc1 $t9, $31 -/* 0D573C 7F0A2D4C 00000000 */ nop -/* 0D5740 7F0A2D50 460021A4 */ cvt.w.s $f6, $f4 -/* 0D5744 7F0A2D54 4459F800 */ cfc1 $t9, $31 -/* 0D5748 7F0A2D58 00000000 */ nop -/* 0D574C 7F0A2D5C 33390078 */ andi $t9, $t9, 0x78 -/* 0D5750 7F0A2D60 53200013 */ beql $t9, $zero, .Leu7F0A2DB0 -/* 0D5754 7F0A2D64 44193000 */ mfc1 $t9, $f6 -/* 0D5758 7F0A2D68 44813000 */ mtc1 $at, $f6 -/* 0D575C 7F0A2D6C 24190001 */ li $t9, 1 -/* 0D5760 7F0A2D70 46062181 */ sub.s $f6, $f4, $f6 -/* 0D5764 7F0A2D74 44D9F800 */ ctc1 $t9, $31 -/* 0D5768 7F0A2D78 00000000 */ nop -/* 0D576C 7F0A2D7C 460031A4 */ cvt.w.s $f6, $f6 -/* 0D5770 7F0A2D80 4459F800 */ cfc1 $t9, $31 -/* 0D5774 7F0A2D84 00000000 */ nop -/* 0D5778 7F0A2D88 33390078 */ andi $t9, $t9, 0x78 -/* 0D577C 7F0A2D8C 17200005 */ bnez $t9, .L7F0A2DA4 -/* 0D5780 7F0A2D90 00000000 */ nop -/* 0D5784 7F0A2D94 44193000 */ mfc1 $t9, $f6 -/* 0D5788 7F0A2D98 3C018000 */ lui $at, 0x8000 -/* 0D578C 7F0A2D9C 10000007 */ b .L7F0A2DBC -/* 0D5790 7F0A2DA0 0321C825 */ or $t9, $t9, $at -.L7F0A2DA4: -/* 0D5794 7F0A2DA4 10000005 */ b .L7F0A2DBC -/* 0D5798 7F0A2DA8 2419FFFF */ li $t9, -1 -/* 0D579C 7F0A2DAC 44193000 */ mfc1 $t9, $f6 -.Leu7F0A2DB0: -/* 0D57A0 7F0A2DB0 00000000 */ nop -/* 0D57A4 7F0A2DB4 0720FFFB */ bltz $t9, .L7F0A2DA4 -/* 0D57A8 7F0A2DB8 00000000 */ nop -.L7F0A2DBC: -/* 0D57AC 7F0A2DBC 44D8F800 */ ctc1 $t8, $31 -/* 0D57B0 7F0A2DC0 A219000D */ sb $t9, 0xd($s0) -/* 0D57B4 7F0A2DC4 0FC16068 */ jal cosf -/* 0D57B8 7F0A2DC8 4600A306 */ mov.s $f12, $f20 -/* 0D57BC 7F0A2DCC 46160202 */ mul.s $f8, $f0, $f22 -/* 0D57C0 7F0A2DD0 24090001 */ li $t1, 1 -/* 0D57C4 7F0A2DD4 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D57C8 7F0A2DD8 4608B281 */ sub.s $f10, $f22, $f8 -/* 0D57CC 7F0A2DDC 4448F800 */ cfc1 $t0, $31 -/* 0D57D0 7F0A2DE0 44C9F800 */ ctc1 $t1, $31 -/* 0D57D4 7F0A2DE4 00000000 */ nop -/* 0D57D8 7F0A2DE8 46005424 */ cvt.w.s $f16, $f10 -/* 0D57DC 7F0A2DEC 4449F800 */ cfc1 $t1, $31 -/* 0D57E0 7F0A2DF0 00000000 */ nop -/* 0D57E4 7F0A2DF4 31290078 */ andi $t1, $t1, 0x78 -/* 0D57E8 7F0A2DF8 51200013 */ beql $t1, $zero, .L7F0A2E48 -/* 0D57EC 7F0A2DFC 44098000 */ mfc1 $t1, $f16 -/* 0D57F0 7F0A2E00 44818000 */ mtc1 $at, $f16 -/* 0D57F4 7F0A2E04 24090001 */ li $t1, 1 -/* 0D57F8 7F0A2E08 46105401 */ sub.s $f16, $f10, $f16 -/* 0D57FC 7F0A2E0C 44C9F800 */ ctc1 $t1, $31 -/* 0D5800 7F0A2E10 00000000 */ nop -/* 0D5804 7F0A2E14 46008424 */ cvt.w.s $f16, $f16 -/* 0D5808 7F0A2E18 4449F800 */ cfc1 $t1, $31 -/* 0D580C 7F0A2E1C 00000000 */ nop -/* 0D5810 7F0A2E20 31290078 */ andi $t1, $t1, 0x78 -/* 0D5814 7F0A2E24 15200005 */ bnez $t1, .L7F0A2E3C -/* 0D5818 7F0A2E28 00000000 */ nop -/* 0D581C 7F0A2E2C 44098000 */ mfc1 $t1, $f16 -/* 0D5820 7F0A2E30 3C018000 */ lui $at, 0x8000 -/* 0D5824 7F0A2E34 10000007 */ b .L7F0A2E54 -/* 0D5828 7F0A2E38 01214825 */ or $t1, $t1, $at -.L7F0A2E3C: -/* 0D582C 7F0A2E3C 10000005 */ b .L7F0A2E54 -/* 0D5830 7F0A2E40 2409FFFF */ li $t1, -1 -/* 0D5834 7F0A2E44 44098000 */ mfc1 $t1, $f16 -.L7F0A2E48: -/* 0D5838 7F0A2E48 00000000 */ nop -/* 0D583C 7F0A2E4C 0520FFFB */ bltz $t1, .L7F0A2E3C -/* 0D5840 7F0A2E50 00000000 */ nop -.L7F0A2E54: -/* 0D5844 7F0A2E54 44C8F800 */ ctc1 $t0, $31 -/* 0D5848 7F0A2E58 A209000E */ sb $t1, 0xe($s0) -/* 0D584C 7F0A2E5C A215000F */ sb $s5, 0xf($s0) -/* 0D5850 7F0A2E60 26100010 */ addiu $s0, $s0, 0x10 -.L7F0A2E64: -/* 0D5854 7F0A2E64 26310002 */ addiu $s1, $s1, 2 -/* 0D5858 7F0A2E68 02F1082A */ slt $at, $s7, $s1 -/* 0D585C 7F0A2E6C 5020FEE5 */ beql $at, $zero, .L7F0A2A04 -/* 0D5860 7F0A2E70 44913000 */ mtc1 $s1, $f6 -.L7F0A2E74: -/* 0D5864 7F0A2E74 8FBF0064 */ lw $ra, 0x64($sp) -/* 0D5868 7F0A2E78 D7B40010 */ ldc1 $f20, 0x10($sp) -/* 0D586C 7F0A2E7C D7B60018 */ ldc1 $f22, 0x18($sp) -/* 0D5870 7F0A2E80 D7B80020 */ ldc1 $f24, 0x20($sp) -/* 0D5874 7F0A2E84 D7BA0028 */ ldc1 $f26, 0x28($sp) -/* 0D5878 7F0A2E88 D7BC0030 */ ldc1 $f28, 0x30($sp) -/* 0D587C 7F0A2E8C D7BE0038 */ ldc1 $f30, 0x38($sp) -/* 0D5880 7F0A2E90 8FB00044 */ lw $s0, 0x44($sp) -/* 0D5884 7F0A2E94 8FB10048 */ lw $s1, 0x48($sp) -/* 0D5888 7F0A2E98 8FB2004C */ lw $s2, 0x4c($sp) -/* 0D588C 7F0A2E9C 8FB30050 */ lw $s3, 0x50($sp) -/* 0D5890 7F0A2EA0 8FB40054 */ lw $s4, 0x54($sp) -/* 0D5894 7F0A2EA4 8FB50058 */ lw $s5, 0x58($sp) -/* 0D5898 7F0A2EA8 8FB6005C */ lw $s6, 0x5c($sp) -/* 0D589C 7F0A2EAC 8FB70060 */ lw $s7, 0x60($sp) -/* 0D58A0 7F0A2EB0 03E00008 */ jr $ra -/* 0D58A4 7F0A2EB4 27BD0080 */ addiu $sp, $sp, 0x80 -) -#endif -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A3978(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A3978 -/* 0D84A8 7F0A3978 10E00036 */ beqz $a3, .L7F0A3A54 -/* 0D84AC 7F0A397C AFA60008 */ sw $a2, 8($sp) -/* 0D84B0 7F0A3980 00A01025 */ move $v0, $a1 -/* 0D84B4 7F0A3984 00803025 */ move $a2, $a0 -/* 0D84B8 7F0A3988 3C090430 */ lui $t1, (0x04300040 >> 16) # lui $t1, 0x430 -/* 0D84BC 7F0A398C 24A50010 */ addiu $a1, $a1, 0x10 -/* 0D84C0 7F0A3990 24840008 */ addiu $a0, $a0, 8 -/* 0D84C4 7F0A3994 35290040 */ ori $t1, (0x04300040 & 0xFFFF) # ori $t1, $t1, 0x40 -/* 0D84C8 7F0A3998 24AE00E0 */ addiu $t6, $a1, 0xe0 -/* 0D84CC 7F0A399C 00803825 */ move $a3, $a0 -/* 0D84D0 7F0A39A0 3C0A0404 */ lui $t2, (0x04040010 >> 16) # lui $t2, 0x404 -/* 0D84D4 7F0A39A4 ACCE0004 */ sw $t6, 4($a2) -/* 0D84D8 7F0A39A8 ACC90000 */ sw $t1, ($a2) -/* 0D84DC 7F0A39AC 24840008 */ addiu $a0, $a0, 8 -/* 0D84E0 7F0A39B0 354A0010 */ ori $t2, (0x04040010 & 0xFFFF) # ori $t2, $t2, 0x10 -/* 0D84E4 7F0A39B4 00804025 */ move $t0, $a0 -/* 0D84E8 7F0A39B8 ACEA0000 */ sw $t2, ($a3) -/* 0D84EC 7F0A39BC ACE20004 */ sw $v0, 4($a3) -/* 0D84F0 7F0A39C0 3C0FB100 */ lui $t7, (0xB1000003 >> 16) # lui $t7, 0xb100 -/* 0D84F4 7F0A39C4 35EF0003 */ ori $t7, (0xB1000003 & 0xFFFF) # ori $t7, $t7, 3 -/* 0D84F8 7F0A39C8 24180042 */ li $t8, 66 -/* 0D84FC 7F0A39CC 3C0BB100 */ lui $t3, (0xB1000042 >> 16) # lui $t3, 0xb100 -/* 0D8500 7F0A39D0 24030007 */ li $v1, 7 -/* 0D8504 7F0A39D4 AD180004 */ sw $t8, 4($t0) -/* 0D8508 7F0A39D8 AD0F0000 */ sw $t7, ($t0) -/* 0D850C 7F0A39DC 24840008 */ addiu $a0, $a0, 8 -/* 0D8510 7F0A39E0 356B0042 */ ori $t3, (0xB1000042 & 0xFFFF) # ori $t3, $t3, 0x42 -/* 0D8514 7F0A39E4 240C3140 */ li $t4, 12608 -.L7F0A39E8: -/* 0D8518 7F0A39E8 00803025 */ move $a2, $a0 -/* 0D851C 7F0A39EC 0060C825 */ move $t9, $v1 -/* 0D8520 7F0A39F0 00196940 */ sll $t5, $t9, 5 -/* 0D8524 7F0A39F4 24840008 */ addiu $a0, $a0, 8 -/* 0D8528 7F0A39F8 01A57021 */ addu $t6, $t5, $a1 -/* 0D852C 7F0A39FC 00803825 */ move $a3, $a0 -/* 0D8530 7F0A3A00 2463FFFF */ addiu $v1, $v1, -1 -/* 0D8534 7F0A3A04 ACCE0004 */ sw $t6, 4($a2) -/* 0D8538 7F0A3A08 ACC90000 */ sw $t1, ($a2) -/* 0D853C 7F0A3A0C 24840008 */ addiu $a0, $a0, 8 -/* 0D8540 7F0A3A10 00037E00 */ sll $t7, $v1, 0x18 -/* 0D8544 7F0A3A14 00804025 */ move $t0, $a0 -/* 0D8548 7F0A3A18 000F1E03 */ sra $v1, $t7, 0x18 -/* 0D854C 7F0A3A1C ACE20004 */ sw $v0, 4($a3) -/* 0D8550 7F0A3A20 ACEA0000 */ sw $t2, ($a3) -/* 0D8554 7F0A3A24 AD0C0004 */ sw $t4, 4($t0) -/* 0D8558 7F0A3A28 AD0B0000 */ sw $t3, ($t0) -/* 0D855C 7F0A3A2C 0461FFEE */ bgez $v1, .L7F0A39E8 -/* 0D8560 7F0A3A30 24840008 */ addiu $a0, $a0, 8 -/* 0D8564 7F0A3A34 00801025 */ move $v0, $a0 -/* 0D8568 7F0A3A38 3C19B100 */ lui $t9, (0xB1000004 >> 16) # lui $t9, 0xb100 -/* 0D856C 7F0A3A3C 37390004 */ ori $t9, (0xB1000004 & 0xFFFF) # ori $t9, $t9, 4 -/* 0D8570 7F0A3A40 240D0010 */ li $t5, 16 -/* 0D8574 7F0A3A44 AC4D0004 */ sw $t5, 4($v0) -/* 0D8578 7F0A3A48 AC590000 */ sw $t9, ($v0) -/* 0D857C 7F0A3A4C 10000015 */ b .L7F0A3AA4 -/* 0D8580 7F0A3A50 24840008 */ addiu $a0, $a0, 8 -.L7F0A3A54: -/* 0D8584 7F0A3A54 3C090430 */ lui $t1, (0x04300040 >> 16) # lui $t1, 0x430 -/* 0D8588 7F0A3A58 3C07B100 */ lui $a3, (0xB1000032 >> 16) # lui $a3, 0xb100 -/* 0D858C 7F0A3A5C 34E70032 */ ori $a3, (0xB1000032 & 0xFFFF) # ori $a3, $a3, 0x32 -/* 0D8590 7F0A3A60 35290040 */ ori $t1, (0x04300040 & 0xFFFF) # ori $t1, $t1, 0x40 -/* 0D8594 7F0A3A64 00001825 */ move $v1, $zero -/* 0D8598 7F0A3A68 24082110 */ li $t0, 8464 -.L7F0A3A6C: -/* 0D859C 7F0A3A6C 24630001 */ addiu $v1, $v1, 1 -/* 0D85A0 7F0A3A70 00801025 */ move $v0, $a0 -/* 0D85A4 7F0A3A74 00037600 */ sll $t6, $v1, 0x18 -/* 0D85A8 7F0A3A78 24840008 */ addiu $a0, $a0, 8 -/* 0D85AC 7F0A3A7C 000E1E03 */ sra $v1, $t6, 0x18 -/* 0D85B0 7F0A3A80 AC450004 */ sw $a1, 4($v0) -/* 0D85B4 7F0A3A84 00803025 */ move $a2, $a0 -/* 0D85B8 7F0A3A88 28610008 */ slti $at, $v1, 8 -/* 0D85BC 7F0A3A8C AC490000 */ sw $t1, ($v0) -/* 0D85C0 7F0A3A90 ACC80004 */ sw $t0, 4($a2) -/* 0D85C4 7F0A3A94 ACC70000 */ sw $a3, ($a2) -/* 0D85C8 7F0A3A98 24840008 */ addiu $a0, $a0, 8 -/* 0D85CC 7F0A3A9C 1420FFF3 */ bnez $at, .L7F0A3A6C -/* 0D85D0 7F0A3AA0 24A50020 */ addiu $a1, $a1, 0x20 -.L7F0A3AA4: -/* 0D85D4 7F0A3AA4 3C18B800 */ lui $t8, 0xb800 -/* 0D85D8 7F0A3AA8 AC980000 */ sw $t8, ($a0) -/* 0D85DC 7F0A3AAC 24820008 */ addiu $v0, $a0, 8 -/* 0D85E0 7F0A3AB0 03E00008 */ jr $ra -/* 0D85E4 7F0A3AB4 AC800004 */ sw $zero, 4($a0) -) -#endif - - - - - -#ifdef NONMATCHING -/** - * Setup watch rectangles in the usual manner. - * This is called to setup the screen select rectangles, but note - * that the colors are overwritten in set_page_rectangle_colors. - * Also used to initialize watch static. - * @param vtx: Pointer to first vertex in a {@code struct WatchRectangle}. - * @param startx: - * @param startz: - * @param width: - * @param height: - * @param horizontal_offset: - * @param vertical_offset: - * - * decomp status: - * - compiles: yes - * - stack resize: ok - * - identical instructions: no - * - identical registers: fail - * - * Notes: Instruction order is just wrong until the loop starts. - * There's an extra move instruction. -*/ -struct WatchVertex *setup_watch_rectangles(struct WatchVertex *vtx, s32 startx, s32 startz, s32 width, s32 height, s32 horizontal_offset, s32 vertical_offset) -{ + f32 var_f0; s32 i; s32 j; - s32 xval; - s32 zval; - xval = startx + horizontal_offset; + if (g_ClockTimer < 15) { + var_f0 = (f32)g_ClockTimer; + } else { + var_f0 = 15.0f; + } + if (SHATTERED_WINDOW_PIECES_BUFFER_LEN > 0) { + i = 0; + do { + if (ptr_shattered_window_pieces[i].active > 0) { + ptr_shattered_window_pieces[i].active += (s32)var_f0; + j = 0; + ptr_shattered_window_pieces[i].rot.x += ptr_shattered_window_pieces[i].angvel.x * var_f0; + ptr_shattered_window_pieces[i].rot.y += ptr_shattered_window_pieces[i].angvel.y * var_f0; + ptr_shattered_window_pieces[i].rot.z += ptr_shattered_window_pieces[i].angvel.z * var_f0; + ptr_shattered_window_pieces[i].pos.x += ptr_shattered_window_pieces[i].velocity.x * var_f0; + ptr_shattered_window_pieces[i].pos.z += ptr_shattered_window_pieces[i].velocity.z * var_f0; + if ((s32)var_f0 > 0) { + do { + ptr_shattered_window_pieces[i].pos.y += ptr_shattered_window_pieces[i].velocity.y; + ptr_shattered_window_pieces[i].velocity.y -= 0.1f; + j++; + } while (j < (s32)var_f0); + } + if (ptr_shattered_window_pieces[i].active >= 0x96) { + ptr_shattered_window_pieces[i].active = 0; + } + if (ptr_shattered_window_pieces[i].pos.y < -30000.0f || + ptr_shattered_window_pieces[i].pos.y > 30000.0f) { + ptr_shattered_window_pieces[i].active = 0; + } + } + i++; + } while (i < SHATTERED_WINDOW_PIECES_BUFFER_LEN); + } +} - if(vtx); // seems to be needed to match return and last few lines. - for (i=0; i<2; i++, xval += width) - { - zval = startz + vertical_offset; +/** + * Address: 7F0A2C44 + */ +Gfx *glassRenderShards(Gfx *gdl) +{ + Mtxf mtxf; + s32 i; + Mtx *mtx; - for (j=0; j<2; j++, zval += height) - { - vtx->coord1.AsArray[0] = xval; - vtx->coord1.AsArray[1] = 0; - vtx->coord1.AsArray[2] = zval; + texSelect(&gdl, glassoverlayimage + 1, 2, 1, 2); - vtx->coord2.AsArray[0] = 0; - vtx->coord2.AsArray[1] = 0; - vtx->coord2.AsArray[2] = 0; + gSPTexture(gdl++, 0x0D80, 0x0D80, 2, G_TX_RENDERTILE, 1); + gDPSetCycleType(gdl++, G_CYC_2CYCLE); + gDPSetTextureLOD(gdl++, G_TL_LOD); + gSPClearGeometryMode(gdl++, G_CULL_BOTH); + gDPSetTextureFilter(gdl++, G_TF_BILERP); + gSPSetGeometryMode(gdl++, G_LIGHTING | G_TEXTURE_GEN); + gSPMatrix(gdl++, osVirtualToPhysical(get_BONDdata_field_10E0()), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); - vtx->color.rgba[0] = 0x20; - vtx->color.rgba[1] = 0x70; - vtx->color.rgba[2] = 0x20; - vtx->color.rgba[3] = 0xF0; + #define WINDOW_PIECE(_i) ((s_shattered_window_piece*)((u8*)ptr_shattered_window_pieces + ((_i) * sizeof(s_shattered_window_piece)))) - vtx++; + for (i = 0; i < SHATTERED_WINDOW_PIECES_BUFFER_LEN; i++) { + if (WINDOW_PIECE(i)->active > 0) { + mtx = dynAllocateMatrix(); + + matrix_4x4_set_position_and_rotation_around_xyz(&WINDOW_PIECE(i)->pos, &WINDOW_PIECE(i)->rot, &mtxf); + + mtxf.m[3][0] -= g_CurrentPlayer->current_model_pos.x; + mtxf.m[3][1] -= g_CurrentPlayer->current_model_pos.y; + mtxf.m[3][2] -= g_CurrentPlayer->current_model_pos.z; + + matrix_4x4_f32_to_s32(&mtxf, (Mtxf *)mtx); + + gSPMatrix(gdl++, osVirtualToPhysical(mtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(gdl++, osVirtualToPhysical(&WINDOW_PIECE(i)->v1x), 3, 0); + gSP1Triangle(gdl++, 0, 1, 2, 0); } } + #undef WINDOW_PIECE - return vtx; -} -#else -GLOBAL_ASM( -.text -glabel setup_watch_rectangles -/* 0D85E8 7F0A3AB8 27BDFFF8 */ addiu $sp, $sp, -8 -/* 0D85EC 7F0A3ABC 8FAE001C */ lw $t6, 0x1c($sp) -/* 0D85F0 7F0A3AC0 AFB00004 */ sw $s0, 4($sp) -/* 0D85F4 7F0A3AC4 24100002 */ li $s0, 2 -/* 0D85F8 7F0A3AC8 00AE4021 */ addu $t0, $a1, $t6 -/* 0D85FC 7F0A3ACC 8FA50018 */ lw $a1, 0x18($sp) -/* 0D8600 7F0A3AD0 8FA90020 */ lw $t1, 0x20($sp) -/* 0D8604 7F0A3AD4 00001025 */ move $v0, $zero -/* 0D8608 7F0A3AD8 240D00F0 */ li $t5, 240 -/* 0D860C 7F0A3ADC 240C0070 */ li $t4, 112 -/* 0D8610 7F0A3AE0 240B0020 */ li $t3, 32 -.L7F0A3AE4: -/* 0D8614 7F0A3AE4 00001825 */ move $v1, $zero -/* 0D8618 7F0A3AE8 00C95021 */ addu $t2, $a2, $t1 -.L7F0A3AEC: -/* 0D861C 7F0A3AEC 24630001 */ addiu $v1, $v1, 1 -/* 0D8620 7F0A3AF0 A48A0004 */ sh $t2, 4($a0) -/* 0D8624 7F0A3AF4 01455021 */ addu $t2, $t2, $a1 -/* 0D8628 7F0A3AF8 A4880000 */ sh $t0, ($a0) -/* 0D862C 7F0A3AFC A4800002 */ sh $zero, 2($a0) -/* 0D8630 7F0A3B00 A4800006 */ sh $zero, 6($a0) -/* 0D8634 7F0A3B04 A4800008 */ sh $zero, 8($a0) -/* 0D8638 7F0A3B08 A480000A */ sh $zero, 0xa($a0) -/* 0D863C 7F0A3B0C A08B000C */ sb $t3, 0xc($a0) -/* 0D8640 7F0A3B10 A08C000D */ sb $t4, 0xd($a0) -/* 0D8644 7F0A3B14 A08B000E */ sb $t3, 0xe($a0) -/* 0D8648 7F0A3B18 A08D000F */ sb $t5, 0xf($a0) -/* 0D864C 7F0A3B1C 1470FFF3 */ bne $v1, $s0, .L7F0A3AEC -/* 0D8650 7F0A3B20 24840010 */ addiu $a0, $a0, 0x10 -/* 0D8654 7F0A3B24 24420001 */ addiu $v0, $v0, 1 -/* 0D8658 7F0A3B28 1450FFEE */ bne $v0, $s0, .L7F0A3AE4 -/* 0D865C 7F0A3B2C 01074021 */ addu $t0, $t0, $a3 -/* 0D8660 7F0A3B30 8FB00004 */ lw $s0, 4($sp) -/* 0D8664 7F0A3B34 27BD0008 */ addiu $sp, $sp, 8 -/* 0D8668 7F0A3B38 03E00008 */ jr $ra -/* 0D866C 7F0A3B3C 00801025 */ move $v0, $a0 -) -#endif - - - - - -Gfx *sub_GAME_7F0A3B40(Gfx *gdl, s32 *arg1) -{ - gSPVertex(gdl++, arg1, 4, 0); - - // gfxdis can't parse this, but maybe?: gSPModifyVertex(gdl++, 16, 0, 0x2110); - // manual specification: - { \ - Gfx *_g = (Gfx *)(gdl++); \ - _g->words.w0 = 0xB1000032; \ - _g->words.w1 = 0x2110; \ - } + gSPClearGeometryMode(gdl++, G_LIGHTING | G_TEXTURE_GEN); + gSPMatrix(gdl++, (u32)currentPlayerGetProjectionMatrix(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + gSPMatrix(gdl++, (u32)currentPlayerGetMatrix10C8(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); return gdl; } - - - -// unreferenced -void unused_7F0A3B70(s32 arg0, struct rgba_u8 *arg1) -{ - arg1->r = D_80040960[arg0].r; - arg1->g = D_80040960[arg0].g; - arg1->b = D_80040960[arg0].b; - arg1->a = D_80040960[arg0].a; -} - - - - - -// unreferenced -void unused_7F0A3BA4(s32 arg0, struct rgba_u8 *arg1) -{ - D_80040960[arg0].r = arg1->r; - D_80040960[arg0].g = arg1->g; - D_80040960[arg0].b = arg1->b; - D_80040960[arg0].a = arg1->a; -} - - -void sub_GAME_7F0A3BD8(void) -{ - s32 i; - s32 start_index; - - if (1) { start_index = 0; } - - for (i = start_index; (i < UNK_8007A170_MAX) ^ 0; i++) - { - dword_CODE_bss_8007A170[i].unk0C = 0; - dword_CODE_bss_8007A170[i].unk04 = 0; - dword_CODE_bss_8007A170[i].unk00 = 0; - } -} - - -#ifdef NONMATCHING -void sub_GAME_7F0A3C08(void) { - -} -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_80057750 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80057754 -.word 0x3fb501e2 /*1.41412*/ -.text -glabel sub_GAME_7F0A3C08 -/* 0D8738 7F0A3C08 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0D873C 7F0A3C0C F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0D8740 7F0A3C10 4487A000 */ mtc1 $a3, $f20 -/* 0D8744 7F0A3C14 AFBF0024 */ sw $ra, 0x24($sp) -/* 0D8748 7F0A3C18 AFB00020 */ sw $s0, 0x20($sp) -/* 0D874C 7F0A3C1C 00808025 */ move $s0, $a0 -/* 0D8750 7F0A3C20 AFA50034 */ sw $a1, 0x34($sp) -/* 0D8754 7F0A3C24 0C002914 */ jal randomGetNext -/* 0D8758 7F0A3C28 AFA60038 */ sw $a2, 0x38($sp) -/* 0D875C 7F0A3C2C 44822000 */ mtc1 $v0, $f4 -/* 0D8760 7F0A3C30 8FA50034 */ lw $a1, 0x34($sp) -/* 0D8764 7F0A3C34 8FA60038 */ lw $a2, 0x38($sp) -/* 0D8768 7F0A3C38 04410005 */ bgez $v0, .L7F0A3C50 -/* 0D876C 7F0A3C3C 468021A0 */ cvt.s.w $f6, $f4 -/* 0D8770 7F0A3C40 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D8774 7F0A3C44 44814000 */ mtc1 $at, $f8 -/* 0D8778 7F0A3C48 00000000 */ nop -/* 0D877C 7F0A3C4C 46083180 */ add.s $f6, $f6, $f8 -.L7F0A3C50: -/* 0D8780 7F0A3C50 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D8784 7F0A3C54 44815000 */ mtc1 $at, $f10 -/* 0D8788 7F0A3C58 3C018005 */ lui $at, %hi(D_80057750) -/* 0D878C 7F0A3C5C C4327750 */ lwc1 $f18, %lo(D_80057750)($at) -/* 0D8790 7F0A3C60 460A3402 */ mul.s $f16, $f6, $f10 -/* 0D8794 7F0A3C64 24010004 */ li $at, 4 -/* 0D8798 7F0A3C68 240F0001 */ li $t7, 1 -/* 0D879C 7F0A3C6C 46128102 */ mul.s $f4, $f16, $f18 -/* 0D87A0 7F0A3C70 E7A4002C */ swc1 $f4, 0x2c($sp) -/* 0D87A4 7F0A3C74 AE000000 */ sw $zero, ($s0) -/* 0D87A8 7F0A3C78 87AE0042 */ lh $t6, 0x42($sp) -/* 0D87AC 7F0A3C7C 14C10009 */ bne $a2, $at, .L7F0A3CA4 -/* 0D87B0 7F0A3C80 A60E0006 */ sh $t6, 6($s0) -/* 0D87B4 7F0A3C84 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D87B8 7F0A3C88 44814000 */ mtc1 $at, $f8 -/* 0D87BC 7F0A3C8C A60F0004 */ sh $t7, 4($s0) -/* 0D87C0 7F0A3C90 3C188009 */ lui $t8, %hi(flareimage2) -/* 0D87C4 7F0A3C94 E6080008 */ swc1 $f8, 8($s0) -/* 0D87C8 7F0A3C98 8F18D0CC */ lw $t8, %lo(flareimage2)($t8) -/* 0D87CC 7F0A3C9C 10000029 */ b .L7F0A3D44 -/* 0D87D0 7F0A3CA0 AE18000C */ sw $t8, 0xc($s0) -.L7F0A3CA4: -/* 0D87D4 7F0A3CA4 24010001 */ li $at, 1 -/* 0D87D8 7F0A3CA8 14C10009 */ bne $a2, $at, .L7F0A3CD0 -/* 0D87DC 7F0A3CAC 2419000B */ li $t9, 11 -/* 0D87E0 7F0A3CB0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D87E4 7F0A3CB4 44813000 */ mtc1 $at, $f6 -/* 0D87E8 7F0A3CB8 A6190004 */ sh $t9, 4($s0) -/* 0D87EC 7F0A3CBC 3C088009 */ lui $t0, %hi(explosion_smokeimages) -/* 0D87F0 7F0A3CC0 E6060008 */ swc1 $f6, 8($s0) -/* 0D87F4 7F0A3CC4 8D08D0C0 */ lw $t0, %lo(explosion_smokeimages)($t0) -/* 0D87F8 7F0A3CC8 1000001E */ b .L7F0A3D44 -/* 0D87FC 7F0A3CCC AE08000C */ sw $t0, 0xc($s0) -.L7F0A3CD0: -/* 0D8800 7F0A3CD0 24010003 */ li $at, 3 -/* 0D8804 7F0A3CD4 14C10009 */ bne $a2, $at, .L7F0A3CFC -/* 0D8808 7F0A3CD8 24090009 */ li $t1, 9 -/* 0D880C 7F0A3CDC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D8810 7F0A3CE0 44815000 */ mtc1 $at, $f10 -/* 0D8814 7F0A3CE4 A6090004 */ sh $t1, 4($s0) -/* 0D8818 7F0A3CE8 3C0A8009 */ lui $t2, %hi(scattered_explosions) -/* 0D881C 7F0A3CEC E60A0008 */ swc1 $f10, 8($s0) -/* 0D8820 7F0A3CF0 8D4AD0C4 */ lw $t2, %lo(scattered_explosions)($t2) -/* 0D8824 7F0A3CF4 10000013 */ b .L7F0A3D44 -/* 0D8828 7F0A3CF8 AE0A000C */ sw $t2, 0xc($s0) -.L7F0A3CFC: -/* 0D882C 7F0A3CFC 24010006 */ li $at, 6 -/* 0D8830 7F0A3D00 14C10009 */ bne $a2, $at, .L7F0A3D28 -/* 0D8834 7F0A3D04 240D000B */ li $t5, 11 -/* 0D8838 7F0A3D08 44808000 */ mtc1 $zero, $f16 -/* 0D883C 7F0A3D0C 240B0064 */ li $t3, 100 -/* 0D8840 7F0A3D10 A60B0004 */ sh $t3, 4($s0) -/* 0D8844 7F0A3D14 3C0C8009 */ lui $t4, %hi(flareimage2) -/* 0D8848 7F0A3D18 E6100008 */ swc1 $f16, 8($s0) -/* 0D884C 7F0A3D1C 8D8CD0CC */ lw $t4, %lo(flareimage2)($t4) -/* 0D8850 7F0A3D20 10000008 */ b .L7F0A3D44 -/* 0D8854 7F0A3D24 AE0C000C */ sw $t4, 0xc($s0) -.L7F0A3D28: -/* 0D8858 7F0A3D28 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D885C 7F0A3D2C 44819000 */ mtc1 $at, $f18 -/* 0D8860 7F0A3D30 A60D0004 */ sh $t5, 4($s0) -/* 0D8864 7F0A3D34 3C0E8009 */ lui $t6, %hi(explosion_smokeimages) -/* 0D8868 7F0A3D38 E6120008 */ swc1 $f18, 8($s0) -/* 0D886C 7F0A3D3C 8DCED0C0 */ lw $t6, %lo(explosion_smokeimages)($t6) -/* 0D8870 7F0A3D40 AE0E000C */ sw $t6, 0xc($s0) -.L7F0A3D44: -/* 0D8874 7F0A3D44 3C188004 */ lui $t8, %hi(D_80040960) -/* 0D8878 7F0A3D48 27180960 */ addiu $t8, %lo(D_80040960) # addiu $t8, $t8, 0x960 -/* 0D887C 7F0A3D4C 00067880 */ sll $t7, $a2, 2 -/* 0D8880 7F0A3D50 01F81021 */ addu $v0, $t7, $t8 -/* 0D8884 7F0A3D54 90590000 */ lbu $t9, ($v0) -/* 0D8888 7F0A3D58 A2190028 */ sb $t9, 0x28($s0) -/* 0D888C 7F0A3D5C 90480001 */ lbu $t0, 1($v0) -/* 0D8890 7F0A3D60 A2080029 */ sb $t0, 0x29($s0) -/* 0D8894 7F0A3D64 90490002 */ lbu $t1, 2($v0) -/* 0D8898 7F0A3D68 A209002A */ sb $t1, 0x2a($s0) -/* 0D889C 7F0A3D6C 904A0003 */ lbu $t2, 3($v0) -/* 0D88A0 7F0A3D70 A20A002B */ sb $t2, 0x2b($s0) -/* 0D88A4 7F0A3D74 C4A40000 */ lwc1 $f4, ($a1) -/* 0D88A8 7F0A3D78 E6040010 */ swc1 $f4, 0x10($s0) -/* 0D88AC 7F0A3D7C C4A80004 */ lwc1 $f8, 4($a1) -/* 0D88B0 7F0A3D80 E6080014 */ swc1 $f8, 0x14($s0) -/* 0D88B4 7F0A3D84 C4A60008 */ lwc1 $f6, 8($a1) -/* 0D88B8 7F0A3D88 0C002914 */ jal randomGetNext -/* 0D88BC 7F0A3D8C E6060018 */ swc1 $f6, 0x18($s0) -/* 0D88C0 7F0A3D90 44825000 */ mtc1 $v0, $f10 -/* 0D88C4 7F0A3D94 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D88C8 7F0A3D98 04410004 */ bgez $v0, .L7F0A3DAC -/* 0D88CC 7F0A3D9C 46805420 */ cvt.s.w $f16, $f10 -/* 0D88D0 7F0A3DA0 44819000 */ mtc1 $at, $f18 -/* 0D88D4 7F0A3DA4 00000000 */ nop -/* 0D88D8 7F0A3DA8 46128400 */ add.s $f16, $f16, $f18 -.L7F0A3DAC: -/* 0D88DC 7F0A3DAC 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D88E0 7F0A3DB0 44812000 */ mtc1 $at, $f4 -/* 0D88E4 7F0A3DB4 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 0D88E8 7F0A3DB8 44813000 */ mtc1 $at, $f6 -/* 0D88EC 7F0A3DBC 46048202 */ mul.s $f8, $f16, $f4 -/* 0D88F0 7F0A3DC0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D88F4 7F0A3DC4 44819000 */ mtc1 $at, $f18 -/* 0D88F8 7F0A3DC8 3C018005 */ lui $at, %hi(D_80057754) -/* 0D88FC 7F0A3DCC C4247754 */ lwc1 $f4, %lo(D_80057754)($at) -/* 0D8900 7F0A3DD0 46064282 */ mul.s $f10, $f8, $f6 -/* 0D8904 7F0A3DD4 460A9400 */ add.s $f16, $f18, $f10 -/* 0D8908 7F0A3DD8 4610A502 */ mul.s $f20, $f20, $f16 -/* 0D890C 7F0A3DDC 00000000 */ nop -/* 0D8910 7F0A3DE0 4604A502 */ mul.s $f20, $f20, $f4 -/* 0D8914 7F0A3DE4 E6140024 */ swc1 $f20, 0x24($s0) -/* 0D8918 7F0A3DE8 0FC15FA8 */ jal cosf -/* 0D891C 7F0A3DEC C7AC002C */ lwc1 $f12, 0x2c($sp) -/* 0D8920 7F0A3DF0 46140202 */ mul.s $f8, $f0, $f20 -/* 0D8924 7F0A3DF4 E608001C */ swc1 $f8, 0x1c($s0) -/* 0D8928 7F0A3DF8 0FC15FAB */ jal sinf -/* 0D892C 7F0A3DFC C7AC002C */ lwc1 $f12, 0x2c($sp) -/* 0D8930 7F0A3E00 46140182 */ mul.s $f6, $f0, $f20 -/* 0D8934 7F0A3E04 E6060020 */ swc1 $f6, 0x20($s0) -/* 0D8938 7F0A3E08 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D893C 7F0A3E0C 8FB00020 */ lw $s0, 0x20($sp) -/* 0D8940 7F0A3E10 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0D8944 7F0A3E14 03E00008 */ jr $ra -/* 0D8948 7F0A3E18 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( - -/* same asm, but float .rodata references other .rodata */ - -.text -glabel sub_GAME_7F0A3C08 -/* 0D8738 7F0A3C08 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0D873C 7F0A3C0C F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0D8740 7F0A3C10 4487A000 */ mtc1 $a3, $f20 -/* 0D8744 7F0A3C14 AFBF0024 */ sw $ra, 0x24($sp) -/* 0D8748 7F0A3C18 AFB00020 */ sw $s0, 0x20($sp) -/* 0D874C 7F0A3C1C 00808025 */ move $s0, $a0 -/* 0D8750 7F0A3C20 AFA50034 */ sw $a1, 0x34($sp) -/* 0D8754 7F0A3C24 0C002914 */ jal randomGetNext -/* 0D8758 7F0A3C28 AFA60038 */ sw $a2, 0x38($sp) -/* 0D875C 7F0A3C2C 44822000 */ mtc1 $v0, $f4 -/* 0D8760 7F0A3C30 8FA50034 */ lw $a1, 0x34($sp) -/* 0D8764 7F0A3C34 8FA60038 */ lw $a2, 0x38($sp) -/* 0D8768 7F0A3C38 04410005 */ bgez $v0, .L7F0A3C50 -/* 0D876C 7F0A3C3C 468021A0 */ cvt.s.w $f6, $f4 -/* 0D8770 7F0A3C40 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D8774 7F0A3C44 44814000 */ mtc1 $at, $f8 -/* 0D8778 7F0A3C48 00000000 */ nop -/* 0D877C 7F0A3C4C 46083180 */ add.s $f6, $f6, $f8 -.L7F0A3C50: -/* 0D8780 7F0A3C50 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D8784 7F0A3C54 44815000 */ mtc1 $at, $f10 -/* 0D8788 7F0A3C58 3C018005 */ lui $at, %hi(D_8004CE20) -/* 0D878C 7F0A3C5C C4327750 */ lwc1 $f18, %lo(D_8004CE20)($at) -/* 0D8790 7F0A3C60 460A3402 */ mul.s $f16, $f6, $f10 -/* 0D8794 7F0A3C64 24010004 */ li $at, 4 -/* 0D8798 7F0A3C68 240F0001 */ li $t7, 1 -/* 0D879C 7F0A3C6C 46128102 */ mul.s $f4, $f16, $f18 -/* 0D87A0 7F0A3C70 E7A4002C */ swc1 $f4, 0x2c($sp) -/* 0D87A4 7F0A3C74 AE000000 */ sw $zero, ($s0) -/* 0D87A8 7F0A3C78 87AE0042 */ lh $t6, 0x42($sp) -/* 0D87AC 7F0A3C7C 14C10009 */ bne $a2, $at, .L7F0A3CA4 -/* 0D87B0 7F0A3C80 A60E0006 */ sh $t6, 6($s0) -/* 0D87B4 7F0A3C84 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D87B8 7F0A3C88 44814000 */ mtc1 $at, $f8 -/* 0D87BC 7F0A3C8C A60F0004 */ sh $t7, 4($s0) -/* 0D87C0 7F0A3C90 3C188009 */ lui $t8, %hi(flareimage2) -/* 0D87C4 7F0A3C94 E6080008 */ swc1 $f8, 8($s0) -/* 0D87C8 7F0A3C98 8F18D0CC */ lw $t8, %lo(flareimage2)($t8) -/* 0D87CC 7F0A3C9C 10000029 */ b .L7F0A3D44 -/* 0D87D0 7F0A3CA0 AE18000C */ sw $t8, 0xc($s0) -.L7F0A3CA4: -/* 0D87D4 7F0A3CA4 24010001 */ li $at, 1 -/* 0D87D8 7F0A3CA8 14C10009 */ bne $a2, $at, .L7F0A3CD0 -/* 0D87DC 7F0A3CAC 2419000B */ li $t9, 11 -/* 0D87E0 7F0A3CB0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D87E4 7F0A3CB4 44813000 */ mtc1 $at, $f6 -/* 0D87E8 7F0A3CB8 A6190004 */ sh $t9, 4($s0) -/* 0D87EC 7F0A3CBC 3C088009 */ lui $t0, %hi(explosion_smokeimages) -/* 0D87F0 7F0A3CC0 E6060008 */ swc1 $f6, 8($s0) -/* 0D87F4 7F0A3CC4 8D08D0C0 */ lw $t0, %lo(explosion_smokeimages)($t0) -/* 0D87F8 7F0A3CC8 1000001E */ b .L7F0A3D44 -/* 0D87FC 7F0A3CCC AE08000C */ sw $t0, 0xc($s0) -.L7F0A3CD0: -/* 0D8800 7F0A3CD0 24010003 */ li $at, 3 -/* 0D8804 7F0A3CD4 14C10009 */ bne $a2, $at, .L7F0A3CFC -/* 0D8808 7F0A3CD8 24090009 */ li $t1, 9 -/* 0D880C 7F0A3CDC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D8810 7F0A3CE0 44815000 */ mtc1 $at, $f10 -/* 0D8814 7F0A3CE4 A6090004 */ sh $t1, 4($s0) -/* 0D8818 7F0A3CE8 3C0A8009 */ lui $t2, %hi(scattered_explosions) -/* 0D881C 7F0A3CEC E60A0008 */ swc1 $f10, 8($s0) -/* 0D8820 7F0A3CF0 8D4AD0C4 */ lw $t2, %lo(scattered_explosions)($t2) -/* 0D8824 7F0A3CF4 10000013 */ b .L7F0A3D44 -/* 0D8828 7F0A3CF8 AE0A000C */ sw $t2, 0xc($s0) -.L7F0A3CFC: -/* 0D882C 7F0A3CFC 24010006 */ li $at, 6 -/* 0D8830 7F0A3D00 14C10009 */ bne $a2, $at, .L7F0A3D28 -/* 0D8834 7F0A3D04 240D000B */ li $t5, 11 -/* 0D8838 7F0A3D08 44808000 */ mtc1 $zero, $f16 -/* 0D883C 7F0A3D0C 240B0064 */ li $t3, 100 -/* 0D8840 7F0A3D10 A60B0004 */ sh $t3, 4($s0) -/* 0D8844 7F0A3D14 3C0C8009 */ lui $t4, %hi(flareimage2) -/* 0D8848 7F0A3D18 E6100008 */ swc1 $f16, 8($s0) -/* 0D884C 7F0A3D1C 8D8CD0CC */ lw $t4, %lo(flareimage2)($t4) -/* 0D8850 7F0A3D20 10000008 */ b .L7F0A3D44 -/* 0D8854 7F0A3D24 AE0C000C */ sw $t4, 0xc($s0) -.L7F0A3D28: -/* 0D8858 7F0A3D28 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D885C 7F0A3D2C 44819000 */ mtc1 $at, $f18 -/* 0D8860 7F0A3D30 A60D0004 */ sh $t5, 4($s0) -/* 0D8864 7F0A3D34 3C0E8009 */ lui $t6, %hi(explosion_smokeimages) -/* 0D8868 7F0A3D38 E6120008 */ swc1 $f18, 8($s0) -/* 0D886C 7F0A3D3C 8DCED0C0 */ lw $t6, %lo(explosion_smokeimages)($t6) -/* 0D8870 7F0A3D40 AE0E000C */ sw $t6, 0xc($s0) -.L7F0A3D44: -/* 0D8874 7F0A3D44 3C188004 */ lui $t8, %hi(D_80040960) -/* 0D8878 7F0A3D48 27180960 */ addiu $t8, %lo(D_80040960) # addiu $t8, $t8, 0x960 -/* 0D887C 7F0A3D4C 00067880 */ sll $t7, $a2, 2 -/* 0D8880 7F0A3D50 01F81021 */ addu $v0, $t7, $t8 -/* 0D8884 7F0A3D54 90590000 */ lbu $t9, ($v0) -/* 0D8888 7F0A3D58 A2190028 */ sb $t9, 0x28($s0) -/* 0D888C 7F0A3D5C 90480001 */ lbu $t0, 1($v0) -/* 0D8890 7F0A3D60 A2080029 */ sb $t0, 0x29($s0) -/* 0D8894 7F0A3D64 90490002 */ lbu $t1, 2($v0) -/* 0D8898 7F0A3D68 A209002A */ sb $t1, 0x2a($s0) -/* 0D889C 7F0A3D6C 904A0003 */ lbu $t2, 3($v0) -/* 0D88A0 7F0A3D70 A20A002B */ sb $t2, 0x2b($s0) -/* 0D88A4 7F0A3D74 C4A40000 */ lwc1 $f4, ($a1) -/* 0D88A8 7F0A3D78 E6040010 */ swc1 $f4, 0x10($s0) -/* 0D88AC 7F0A3D7C C4A80004 */ lwc1 $f8, 4($a1) -/* 0D88B0 7F0A3D80 E6080014 */ swc1 $f8, 0x14($s0) -/* 0D88B4 7F0A3D84 C4A60008 */ lwc1 $f6, 8($a1) -/* 0D88B8 7F0A3D88 0C002914 */ jal randomGetNext -/* 0D88BC 7F0A3D8C E6060018 */ swc1 $f6, 0x18($s0) -/* 0D88C0 7F0A3D90 44825000 */ mtc1 $v0, $f10 -/* 0D88C4 7F0A3D94 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D88C8 7F0A3D98 04410004 */ bgez $v0, .L7F0A3DAC -/* 0D88CC 7F0A3D9C 46805420 */ cvt.s.w $f16, $f10 -/* 0D88D0 7F0A3DA0 44819000 */ mtc1 $at, $f18 -/* 0D88D4 7F0A3DA4 00000000 */ nop -/* 0D88D8 7F0A3DA8 46128400 */ add.s $f16, $f16, $f18 -.L7F0A3DAC: -/* 0D88DC 7F0A3DAC 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D88E0 7F0A3DB0 44812000 */ mtc1 $at, $f4 -/* 0D88E4 7F0A3DB4 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 0D88E8 7F0A3DB8 44813000 */ mtc1 $at, $f6 -/* 0D88EC 7F0A3DBC 46048202 */ mul.s $f8, $f16, $f4 -/* 0D88F0 7F0A3DC0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D88F4 7F0A3DC4 44819000 */ mtc1 $at, $f18 -/* 0D88F8 7F0A3DC8 3C018005 */ lui $at, %hi(D_8005774C) -/* 0D88FC 7F0A3DCC C4247754 */ lwc1 $f4, %lo(D_8005774C)($at) -/* 0D8900 7F0A3DD0 46064282 */ mul.s $f10, $f8, $f6 -/* 0D8904 7F0A3DD4 460A9400 */ add.s $f16, $f18, $f10 -/* 0D8908 7F0A3DD8 4610A502 */ mul.s $f20, $f20, $f16 -/* 0D890C 7F0A3DDC 00000000 */ nop -/* 0D8910 7F0A3DE0 4604A502 */ mul.s $f20, $f20, $f4 -/* 0D8914 7F0A3DE4 E6140024 */ swc1 $f20, 0x24($s0) -/* 0D8918 7F0A3DE8 0FC15FA8 */ jal cosf -/* 0D891C 7F0A3DEC C7AC002C */ lwc1 $f12, 0x2c($sp) -/* 0D8920 7F0A3DF0 46140202 */ mul.s $f8, $f0, $f20 -/* 0D8924 7F0A3DF4 E608001C */ swc1 $f8, 0x1c($s0) -/* 0D8928 7F0A3DF8 0FC15FAB */ jal sinf -/* 0D892C 7F0A3DFC C7AC002C */ lwc1 $f12, 0x2c($sp) -/* 0D8930 7F0A3E00 46140182 */ mul.s $f6, $f0, $f20 -/* 0D8934 7F0A3E04 E6060020 */ swc1 $f6, 0x20($s0) -/* 0D8938 7F0A3E08 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D893C 7F0A3E0C 8FB00020 */ lw $s0, 0x20($sp) -/* 0D8940 7F0A3E10 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0D8944 7F0A3E14 03E00008 */ jr $ra -/* 0D8948 7F0A3E18 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A3E1C(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A3E1C -/* 0D894C 7F0A3E1C 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D8950 7F0A3E20 AFB00020 */ sw $s0, 0x20($sp) -/* 0D8954 7F0A3E24 44866000 */ mtc1 $a2, $f12 -/* 0D8958 7F0A3E28 3C108008 */ lui $s0, %hi(dword_CODE_bss_8007A170) -/* 0D895C 7F0A3E2C 3C028008 */ lui $v0, %hi(dword_CODE_bss_8007A170 + 0x370) -/* 0D8960 7F0A3E30 00A03025 */ move $a2, $a1 -/* 0D8964 7F0A3E34 AFBF0024 */ sw $ra, 0x24($sp) -/* 0D8968 7F0A3E38 AFA40028 */ sw $a0, 0x28($sp) -/* 0D896C 7F0A3E3C AFA5002C */ sw $a1, 0x2c($sp) -/* 0D8970 7F0A3E40 AFA70034 */ sw $a3, 0x34($sp) -/* 0D8974 7F0A3E44 2442A4E0 */ addiu $v0, %lo(dword_CODE_bss_8007A170 + 0x370) # addiu $v0, $v0, -0x5b20 -/* 0D8978 7F0A3E48 2610A170 */ addiu $s0, %lo(dword_CODE_bss_8007A170) # addiu $s0, $s0, -0x5e90 -/* 0D897C 7F0A3E4C 860E0004 */ lh $t6, 4($s0) -.L7F0A3E50: -/* 0D8980 7F0A3E50 55C0000A */ bnezl $t6, .L7F0A3E7C -/* 0D8984 7F0A3E54 2610002C */ addiu $s0, $s0, 0x2c -/* 0D8988 7F0A3E58 87AF0036 */ lh $t7, 0x36($sp) -/* 0D898C 7F0A3E5C 44076000 */ mfc1 $a3, $f12 -/* 0D8990 7F0A3E60 02002025 */ move $a0, $s0 -/* 0D8994 7F0A3E64 8FA50028 */ lw $a1, 0x28($sp) -/* 0D8998 7F0A3E68 0FC28F02 */ jal sub_GAME_7F0A3C08 -/* 0D899C 7F0A3E6C AFAF0010 */ sw $t7, 0x10($sp) -/* 0D89A0 7F0A3E70 10000006 */ b .L7F0A3E8C -/* 0D89A4 7F0A3E74 02001025 */ move $v0, $s0 -/* 0D89A8 7F0A3E78 2610002C */ addiu $s0, $s0, 0x2c -.L7F0A3E7C: -/* 0D89AC 7F0A3E7C 0202082B */ sltu $at, $s0, $v0 -/* 0D89B0 7F0A3E80 5420FFF3 */ bnezl $at, .L7F0A3E50 -/* 0D89B4 7F0A3E84 860E0004 */ lh $t6, 4($s0) -/* 0D89B8 7F0A3E88 00001025 */ move $v0, $zero -.L7F0A3E8C: -/* 0D89BC 7F0A3E8C 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D89C0 7F0A3E90 8FB00020 */ lw $s0, 0x20($sp) -/* 0D89C4 7F0A3E94 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D89C8 7F0A3E98 03E00008 */ jr $ra -/* 0D89CC 7F0A3E9C 00000000 */ nop -) -#endif - - - - - -void sub_GAME_7F0A3EA0(void) -{ - bondstruct_unk_8007A170 *thing = &dword_CODE_bss_8007A170[0]; \ - bondstruct_unk_8007A170 *end = dword_CODE_bss_8007A170 + UNK_8007A170_MAX; - - for (; thing < end; thing++) { - if (thing->unk04 > 0) { - thing->unk00 += g_ClockTimer; - - if (thing->unk00 >= 0 && thing->unk00 >= thing->unk04) { - thing->unk04 = 0; - } - } - } -} - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A3F04(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A3F04 -/* 0D8A34 7F0A3F04 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 0D8A38 7F0A3F08 AFBF002C */ sw $ra, 0x2c($sp) -/* 0D8A3C 7F0A3F0C AFB20028 */ sw $s2, 0x28($sp) -/* 0D8A40 7F0A3F10 AFB10024 */ sw $s1, 0x24($sp) -/* 0D8A44 7F0A3F14 AFB00020 */ sw $s0, 0x20($sp) -/* 0D8A48 7F0A3F18 AFA500BC */ sw $a1, 0xbc($sp) -/* 0D8A4C 7F0A3F1C AFA600C0 */ sw $a2, 0xc0($sp) -/* 0D8A50 7F0A3F20 848E0004 */ lh $t6, 4($a0) -/* 0D8A54 7F0A3F24 00808025 */ move $s0, $a0 -/* 0D8A58 7F0A3F28 59C0017A */ blezl $t6, .L7F0A4514 -/* 0D8A5C 7F0A3F2C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0D8A60 7F0A3F30 8C8F0000 */ lw $t7, ($a0) -/* 0D8A64 7F0A3F34 24840010 */ addiu $a0, $a0, 0x10 -/* 0D8A68 7F0A3F38 05E20176 */ bltzl $t7, .L7F0A4514 -/* 0D8A6C 7F0A3F3C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0D8A70 7F0A3F40 0FC1E296 */ jal camIsPosInScreen -/* 0D8A74 7F0A3F44 8E050024 */ lw $a1, 0x24($s0) -/* 0D8A78 7F0A3F48 10400171 */ beqz $v0, .L7F0A4510 -/* 0D8A7C 7F0A3F4C 3C198004 */ lui $t9, %hi(D_80040980) -/* 0D8A80 7F0A3F50 27390980 */ addiu $t9, %lo(D_80040980) # addiu $t9, $t9, 0x980 -/* 0D8A84 7F0A3F54 8F210000 */ lw $at, ($t9) -/* 0D8A88 7F0A3F58 8F290004 */ lw $t1, 4($t9) -/* 0D8A8C 7F0A3F5C 27B800A8 */ addiu $t8, $sp, 0xa8 -/* 0D8A90 7F0A3F60 AF010000 */ sw $at, ($t8) -/* 0D8A94 7F0A3F64 AF090004 */ sw $t1, 4($t8) -/* 0D8A98 7F0A3F68 8F29000C */ lw $t1, 0xc($t9) -/* 0D8A9C 7F0A3F6C 8F210008 */ lw $at, 8($t9) -/* 0D8AA0 7F0A3F70 AF09000C */ sw $t1, 0xc($t8) -/* 0D8AA4 7F0A3F74 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 0D8AA8 7F0A3F78 AF010008 */ sw $at, 8($t8) -/* 0D8AAC 7F0A3F7C 8FAA00BC */ lw $t2, 0xbc($sp) -/* 0D8AB0 7F0A3F80 24040004 */ li $a0, 4 -/* 0D8AB4 7F0A3F84 8D4B0000 */ lw $t3, ($t2) -/* 0D8AB8 7F0A3F88 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0D8ABC 7F0A3F8C 0FC2F5B1 */ jal dynAllocate7F0BD6C4 -/* 0D8AC0 7F0A3F90 AFAB00A0 */ sw $t3, 0xa0($sp) -/* 0D8AC4 7F0A3F94 86040006 */ lh $a0, 6($s0) -/* 0D8AC8 7F0A3F98 00408825 */ move $s1, $v0 -/* 0D8ACC 7F0A3F9C 0FC2F285 */ jal getRoomPositionByIndex -/* 0D8AD0 7F0A3FA0 AFA40058 */ sw $a0, 0x58($sp) -/* 0D8AD4 7F0A3FA4 920C0028 */ lbu $t4, 0x28($s0) -/* 0D8AD8 7F0A3FA8 8FA300A4 */ lw $v1, 0xa4($sp) -/* 0D8ADC 7F0A3FAC 00409025 */ move $s2, $v0 -/* 0D8AE0 7F0A3FB0 A3AC00B4 */ sb $t4, 0xb4($sp) -/* 0D8AE4 7F0A3FB4 920D0029 */ lbu $t5, 0x29($s0) -/* 0D8AE8 7F0A3FB8 27A200A8 */ addiu $v0, $sp, 0xa8 -/* 0D8AEC 7F0A3FBC A3AD00B5 */ sb $t5, 0xb5($sp) -/* 0D8AF0 7F0A3FC0 920E002A */ lbu $t6, 0x2a($s0) -/* 0D8AF4 7F0A3FC4 A3AE00B6 */ sb $t6, 0xb6($sp) -/* 0D8AF8 7F0A3FC8 920F002B */ lbu $t7, 0x2b($s0) -/* 0D8AFC 7F0A3FCC A3AF00B7 */ sb $t7, 0xb7($sp) -/* 0D8B00 7F0A3FD0 8E080000 */ lw $t0, ($s0) -/* 0D8B04 7F0A3FD4 C6080008 */ lwc1 $f8, 8($s0) -/* 0D8B08 7F0A3FD8 44882000 */ mtc1 $t0, $f4 -/* 0D8B0C 7F0A3FDC 00000000 */ nop -/* 0D8B10 7F0A3FE0 468021A0 */ cvt.s.w $f6, $f4 -/* 0D8B14 7F0A3FE4 46083282 */ mul.s $f10, $f6, $f8 -/* 0D8B18 7F0A3FE8 4600540D */ trunc.w.s $f16, $f10 -/* 0D8B1C 7F0A3FEC 44198000 */ mfc1 $t9, $f16 -/* 0D8B20 7F0A3FF0 00000000 */ nop -/* 0D8B24 7F0A3FF4 AFB9005C */ sw $t9, 0x5c($sp) -/* 0D8B28 7F0A3FF8 C6120010 */ lwc1 $f18, 0x10($s0) -/* 0D8B2C 7F0A3FFC E7B20090 */ swc1 $f18, 0x90($sp) -/* 0D8B30 7F0A4000 C6040014 */ lwc1 $f4, 0x14($s0) -/* 0D8B34 7F0A4004 E7A40094 */ swc1 $f4, 0x94($sp) -/* 0D8B38 7F0A4008 C6060018 */ lwc1 $f6, 0x18($s0) -/* 0D8B3C 7F0A400C E7A60098 */ swc1 $f6, 0x98($sp) -/* 0D8B40 7F0A4010 C60A001C */ lwc1 $f10, 0x1c($s0) -/* 0D8B44 7F0A4014 C4680000 */ lwc1 $f8, ($v1) -/* 0D8B48 7F0A4018 460A4402 */ mul.s $f16, $f8, $f10 -/* 0D8B4C 7F0A401C E7B00084 */ swc1 $f16, 0x84($sp) -/* 0D8B50 7F0A4020 C604001C */ lwc1 $f4, 0x1c($s0) -/* 0D8B54 7F0A4024 C4720004 */ lwc1 $f18, 4($v1) -/* 0D8B58 7F0A4028 46049182 */ mul.s $f6, $f18, $f4 -/* 0D8B5C 7F0A402C E7A60088 */ swc1 $f6, 0x88($sp) -/* 0D8B60 7F0A4030 C60A001C */ lwc1 $f10, 0x1c($s0) -/* 0D8B64 7F0A4034 C4680008 */ lwc1 $f8, 8($v1) -/* 0D8B68 7F0A4038 460A4402 */ mul.s $f16, $f8, $f10 -/* 0D8B6C 7F0A403C E7B0008C */ swc1 $f16, 0x8c($sp) -/* 0D8B70 7F0A4040 C6040020 */ lwc1 $f4, 0x20($s0) -/* 0D8B74 7F0A4044 C4720000 */ lwc1 $f18, ($v1) -/* 0D8B78 7F0A4048 46049182 */ mul.s $f6, $f18, $f4 -/* 0D8B7C 7F0A404C E7A60078 */ swc1 $f6, 0x78($sp) -/* 0D8B80 7F0A4050 C60A0020 */ lwc1 $f10, 0x20($s0) -/* 0D8B84 7F0A4054 C4680004 */ lwc1 $f8, 4($v1) -/* 0D8B88 7F0A4058 460A4402 */ mul.s $f16, $f8, $f10 -/* 0D8B8C 7F0A405C E7B0007C */ swc1 $f16, 0x7c($sp) -/* 0D8B90 7F0A4060 C6040020 */ lwc1 $f4, 0x20($s0) -/* 0D8B94 7F0A4064 C4720008 */ lwc1 $f18, 8($v1) -/* 0D8B98 7F0A4068 46049182 */ mul.s $f6, $f18, $f4 -/* 0D8B9C 7F0A406C E7A60080 */ swc1 $f6, 0x80($sp) -/* 0D8BA0 7F0A4070 C60A001C */ lwc1 $f10, 0x1c($s0) -/* 0D8BA4 7F0A4074 C4680010 */ lwc1 $f8, 0x10($v1) -/* 0D8BA8 7F0A4078 460A4402 */ mul.s $f16, $f8, $f10 -/* 0D8BAC 7F0A407C E7B0006C */ swc1 $f16, 0x6c($sp) -/* 0D8BB0 7F0A4080 C604001C */ lwc1 $f4, 0x1c($s0) -/* 0D8BB4 7F0A4084 C4720014 */ lwc1 $f18, 0x14($v1) -/* 0D8BB8 7F0A4088 46049182 */ mul.s $f6, $f18, $f4 -/* 0D8BBC 7F0A408C E7A60070 */ swc1 $f6, 0x70($sp) -/* 0D8BC0 7F0A4090 C60A001C */ lwc1 $f10, 0x1c($s0) -/* 0D8BC4 7F0A4094 C4680018 */ lwc1 $f8, 0x18($v1) -/* 0D8BC8 7F0A4098 460A4402 */ mul.s $f16, $f8, $f10 -/* 0D8BCC 7F0A409C E7B00074 */ swc1 $f16, 0x74($sp) -/* 0D8BD0 7F0A40A0 C6040020 */ lwc1 $f4, 0x20($s0) -/* 0D8BD4 7F0A40A4 C4720010 */ lwc1 $f18, 0x10($v1) -/* 0D8BD8 7F0A40A8 46049182 */ mul.s $f6, $f18, $f4 -/* 0D8BDC 7F0A40AC E7A60060 */ swc1 $f6, 0x60($sp) -/* 0D8BE0 7F0A40B0 C60A0020 */ lwc1 $f10, 0x20($s0) -/* 0D8BE4 7F0A40B4 C4680014 */ lwc1 $f8, 0x14($v1) -/* 0D8BE8 7F0A40B8 460A4402 */ mul.s $f16, $f8, $f10 -/* 0D8BEC 7F0A40BC E7B00064 */ swc1 $f16, 0x64($sp) -/* 0D8BF0 7F0A40C0 C6040020 */ lwc1 $f4, 0x20($s0) -/* 0D8BF4 7F0A40C4 C4720018 */ lwc1 $f18, 0x18($v1) -/* 0D8BF8 7F0A40C8 46049182 */ mul.s $f6, $f18, $f4 -/* 0D8BFC 7F0A40CC E7A60068 */ swc1 $f6, 0x68($sp) -/* 0D8C00 7F0A40D0 8C410000 */ lw $at, ($v0) -/* 0D8C04 7F0A40D4 AE210000 */ sw $at, ($s1) -/* 0D8C08 7F0A40D8 8C4B0004 */ lw $t3, 4($v0) -/* 0D8C0C 7F0A40DC AE2B0004 */ sw $t3, 4($s1) -/* 0D8C10 7F0A40E0 8C410008 */ lw $at, 8($v0) -/* 0D8C14 7F0A40E4 AE210008 */ sw $at, 8($s1) -/* 0D8C18 7F0A40E8 8C4B000C */ lw $t3, 0xc($v0) -/* 0D8C1C 7F0A40EC AE2B000C */ sw $t3, 0xc($s1) -/* 0D8C20 7F0A40F0 8C410000 */ lw $at, ($v0) -/* 0D8C24 7F0A40F4 AE210010 */ sw $at, 0x10($s1) -/* 0D8C28 7F0A40F8 8C4E0004 */ lw $t6, 4($v0) -/* 0D8C2C 7F0A40FC AE2E0014 */ sw $t6, 0x14($s1) -/* 0D8C30 7F0A4100 8C410008 */ lw $at, 8($v0) -/* 0D8C34 7F0A4104 AE210018 */ sw $at, 0x18($s1) -/* 0D8C38 7F0A4108 8C4E000C */ lw $t6, 0xc($v0) -/* 0D8C3C 7F0A410C AE2E001C */ sw $t6, 0x1c($s1) -/* 0D8C40 7F0A4110 8C410000 */ lw $at, ($v0) -/* 0D8C44 7F0A4114 AE210020 */ sw $at, 0x20($s1) -/* 0D8C48 7F0A4118 8C580004 */ lw $t8, 4($v0) -/* 0D8C4C 7F0A411C AE380024 */ sw $t8, 0x24($s1) -/* 0D8C50 7F0A4120 8C410008 */ lw $at, 8($v0) -/* 0D8C54 7F0A4124 AE210028 */ sw $at, 0x28($s1) -/* 0D8C58 7F0A4128 8C58000C */ lw $t8, 0xc($v0) -/* 0D8C5C 7F0A412C AE38002C */ sw $t8, 0x2c($s1) -/* 0D8C60 7F0A4130 8C410000 */ lw $at, ($v0) -/* 0D8C64 7F0A4134 AE210030 */ sw $at, 0x30($s1) -/* 0D8C68 7F0A4138 8C490004 */ lw $t1, 4($v0) -/* 0D8C6C 7F0A413C AE290034 */ sw $t1, 0x34($s1) -/* 0D8C70 7F0A4140 8C410008 */ lw $at, 8($v0) -/* 0D8C74 7F0A4144 AE210038 */ sw $at, 0x38($s1) -/* 0D8C78 7F0A4148 8C49000C */ lw $t1, 0xc($v0) -/* 0D8C7C 7F0A414C 0FC2D20F */ jal get_room_data_float1 -/* 0D8C80 7F0A4150 AE29003C */ sw $t1, 0x3c($s1) -/* 0D8C84 7F0A4154 C7A80090 */ lwc1 $f8, 0x90($sp) -/* 0D8C88 7F0A4158 C7AA0084 */ lwc1 $f10, 0x84($sp) -/* 0D8C8C 7F0A415C C7B20060 */ lwc1 $f18, 0x60($sp) -/* 0D8C90 7F0A4160 460A4401 */ sub.s $f16, $f8, $f10 -/* 0D8C94 7F0A4164 C6480000 */ lwc1 $f8, ($s2) -/* 0D8C98 7F0A4168 46128101 */ sub.s $f4, $f16, $f18 -/* 0D8C9C 7F0A416C 46002182 */ mul.s $f6, $f4, $f0 -/* 0D8CA0 7F0A4170 46083281 */ sub.s $f10, $f6, $f8 -/* 0D8CA4 7F0A4174 4600540D */ trunc.w.s $f16, $f10 -/* 0D8CA8 7F0A4178 440D8000 */ mfc1 $t5, $f16 -/* 0D8CAC 7F0A417C 0FC2D20F */ jal get_room_data_float1 -/* 0D8CB0 7F0A4180 A62D0000 */ sh $t5, ($s1) -/* 0D8CB4 7F0A4184 C7B20094 */ lwc1 $f18, 0x94($sp) -/* 0D8CB8 7F0A4188 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 0D8CBC 7F0A418C C7A80064 */ lwc1 $f8, 0x64($sp) -/* 0D8CC0 7F0A4190 46049181 */ sub.s $f6, $f18, $f4 -/* 0D8CC4 7F0A4194 C6520004 */ lwc1 $f18, 4($s2) -/* 0D8CC8 7F0A4198 46083281 */ sub.s $f10, $f6, $f8 -/* 0D8CCC 7F0A419C 46005402 */ mul.s $f16, $f10, $f0 -/* 0D8CD0 7F0A41A0 46128101 */ sub.s $f4, $f16, $f18 -/* 0D8CD4 7F0A41A4 4600218D */ trunc.w.s $f6, $f4 -/* 0D8CD8 7F0A41A8 440E3000 */ mfc1 $t6, $f6 -/* 0D8CDC 7F0A41AC 0FC2D20F */ jal get_room_data_float1 -/* 0D8CE0 7F0A41B0 A62E0002 */ sh $t6, 2($s1) -/* 0D8CE4 7F0A41B4 C7A80098 */ lwc1 $f8, 0x98($sp) -/* 0D8CE8 7F0A41B8 C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 0D8CEC 7F0A41BC C7B20068 */ lwc1 $f18, 0x68($sp) -/* 0D8CF0 7F0A41C0 460A4401 */ sub.s $f16, $f8, $f10 -/* 0D8CF4 7F0A41C4 C6480008 */ lwc1 $f8, 8($s2) -/* 0D8CF8 7F0A41C8 46128101 */ sub.s $f4, $f16, $f18 -/* 0D8CFC 7F0A41CC 46002182 */ mul.s $f6, $f4, $f0 -/* 0D8D00 7F0A41D0 46083281 */ sub.s $f10, $f6, $f8 -/* 0D8D04 7F0A41D4 4600540D */ trunc.w.s $f16, $f10 -/* 0D8D08 7F0A41D8 440F8000 */ mfc1 $t7, $f16 -/* 0D8D0C 7F0A41DC 00000000 */ nop -/* 0D8D10 7F0A41E0 A62F0004 */ sh $t7, 4($s1) -/* 0D8D14 7F0A41E4 8FA2005C */ lw $v0, 0x5c($sp) -/* 0D8D18 7F0A41E8 8E0A000C */ lw $t2, 0xc($s0) -/* 0D8D1C 7F0A41EC 0002C080 */ sll $t8, $v0, 2 -/* 0D8D20 7F0A41F0 0302C023 */ subu $t8, $t8, $v0 -/* 0D8D24 7F0A41F4 0018C080 */ sll $t8, $t8, 2 -/* 0D8D28 7F0A41F8 0158C821 */ addu $t9, $t2, $t8 -/* 0D8D2C 7F0A41FC 93290004 */ lbu $t1, 4($t9) -/* 0D8D30 7F0A4200 A620000A */ sh $zero, 0xa($s1) -/* 0D8D34 7F0A4204 00095940 */ sll $t3, $t1, 5 -/* 0D8D38 7F0A4208 A62B0008 */ sh $t3, 8($s1) -/* 0D8D3C 7F0A420C 0FC2D20F */ jal get_room_data_float1 -/* 0D8D40 7F0A4210 AFB80034 */ sw $t8, 0x34($sp) -/* 0D8D44 7F0A4214 C7B20090 */ lwc1 $f18, 0x90($sp) -/* 0D8D48 7F0A4218 C7A40078 */ lwc1 $f4, 0x78($sp) -/* 0D8D4C 7F0A421C C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 0D8D50 7F0A4220 46049180 */ add.s $f6, $f18, $f4 -/* 0D8D54 7F0A4224 C6520000 */ lwc1 $f18, ($s2) -/* 0D8D58 7F0A4228 46083281 */ sub.s $f10, $f6, $f8 -/* 0D8D5C 7F0A422C 46005402 */ mul.s $f16, $f10, $f0 -/* 0D8D60 7F0A4230 46128101 */ sub.s $f4, $f16, $f18 -/* 0D8D64 7F0A4234 4600218D */ trunc.w.s $f6, $f4 -/* 0D8D68 7F0A4238 440C3000 */ mfc1 $t4, $f6 -/* 0D8D6C 7F0A423C 0FC2D20F */ jal get_room_data_float1 -/* 0D8D70 7F0A4240 A62C0010 */ sh $t4, 0x10($s1) -/* 0D8D74 7F0A4244 C7A80094 */ lwc1 $f8, 0x94($sp) -/* 0D8D78 7F0A4248 C7AA007C */ lwc1 $f10, 0x7c($sp) -/* 0D8D7C 7F0A424C C7B20070 */ lwc1 $f18, 0x70($sp) -/* 0D8D80 7F0A4250 460A4400 */ add.s $f16, $f8, $f10 -/* 0D8D84 7F0A4254 C6480004 */ lwc1 $f8, 4($s2) -/* 0D8D88 7F0A4258 46128101 */ sub.s $f4, $f16, $f18 -/* 0D8D8C 7F0A425C 46002182 */ mul.s $f6, $f4, $f0 -/* 0D8D90 7F0A4260 46083281 */ sub.s $f10, $f6, $f8 -/* 0D8D94 7F0A4264 4600540D */ trunc.w.s $f16, $f10 -/* 0D8D98 7F0A4268 44088000 */ mfc1 $t0, $f16 -/* 0D8D9C 7F0A426C 0FC2D20F */ jal get_room_data_float1 -/* 0D8DA0 7F0A4270 A6280012 */ sh $t0, 0x12($s1) -/* 0D8DA4 7F0A4274 C7B20098 */ lwc1 $f18, 0x98($sp) -/* 0D8DA8 7F0A4278 C7A40080 */ lwc1 $f4, 0x80($sp) -/* 0D8DAC 7F0A427C C7A80074 */ lwc1 $f8, 0x74($sp) -/* 0D8DB0 7F0A4280 46049180 */ add.s $f6, $f18, $f4 -/* 0D8DB4 7F0A4284 C6520008 */ lwc1 $f18, 8($s2) -/* 0D8DB8 7F0A4288 A6200018 */ sh $zero, 0x18($s1) -/* 0D8DBC 7F0A428C A620001A */ sh $zero, 0x1a($s1) -/* 0D8DC0 7F0A4290 46083281 */ sub.s $f10, $f6, $f8 -/* 0D8DC4 7F0A4294 46005402 */ mul.s $f16, $f10, $f0 -/* 0D8DC8 7F0A4298 46128101 */ sub.s $f4, $f16, $f18 -/* 0D8DCC 7F0A429C 4600218D */ trunc.w.s $f6, $f4 -/* 0D8DD0 7F0A42A0 44183000 */ mfc1 $t8, $f6 -/* 0D8DD4 7F0A42A4 0FC2D20F */ jal get_room_data_float1 -/* 0D8DD8 7F0A42A8 A6380014 */ sh $t8, 0x14($s1) -/* 0D8DDC 7F0A42AC C7A80090 */ lwc1 $f8, 0x90($sp) -/* 0D8DE0 7F0A42B0 C7AA0084 */ lwc1 $f10, 0x84($sp) -/* 0D8DE4 7F0A42B4 C7B20060 */ lwc1 $f18, 0x60($sp) -/* 0D8DE8 7F0A42B8 460A4400 */ add.s $f16, $f8, $f10 -/* 0D8DEC 7F0A42BC C6480000 */ lwc1 $f8, ($s2) -/* 0D8DF0 7F0A42C0 46128100 */ add.s $f4, $f16, $f18 -/* 0D8DF4 7F0A42C4 46002182 */ mul.s $f6, $f4, $f0 -/* 0D8DF8 7F0A42C8 46083281 */ sub.s $f10, $f6, $f8 -/* 0D8DFC 7F0A42CC 4600540D */ trunc.w.s $f16, $f10 -/* 0D8E00 7F0A42D0 44198000 */ mfc1 $t9, $f16 -/* 0D8E04 7F0A42D4 0FC2D20F */ jal get_room_data_float1 -/* 0D8E08 7F0A42D8 A6390020 */ sh $t9, 0x20($s1) -/* 0D8E0C 7F0A42DC C7B20094 */ lwc1 $f18, 0x94($sp) -/* 0D8E10 7F0A42E0 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 0D8E14 7F0A42E4 C7A80064 */ lwc1 $f8, 0x64($sp) -/* 0D8E18 7F0A42E8 46049180 */ add.s $f6, $f18, $f4 -/* 0D8E1C 7F0A42EC C6520004 */ lwc1 $f18, 4($s2) -/* 0D8E20 7F0A42F0 46083280 */ add.s $f10, $f6, $f8 -/* 0D8E24 7F0A42F4 46005402 */ mul.s $f16, $f10, $f0 -/* 0D8E28 7F0A42F8 46128101 */ sub.s $f4, $f16, $f18 -/* 0D8E2C 7F0A42FC 4600218D */ trunc.w.s $f6, $f4 -/* 0D8E30 7F0A4300 440B3000 */ mfc1 $t3, $f6 -/* 0D8E34 7F0A4304 0FC2D20F */ jal get_room_data_float1 -/* 0D8E38 7F0A4308 A62B0022 */ sh $t3, 0x22($s1) -/* 0D8E3C 7F0A430C C7A80098 */ lwc1 $f8, 0x98($sp) -/* 0D8E40 7F0A4310 C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 0D8E44 7F0A4314 C7B20068 */ lwc1 $f18, 0x68($sp) -/* 0D8E48 7F0A4318 460A4400 */ add.s $f16, $f8, $f10 -/* 0D8E4C 7F0A431C C6480008 */ lwc1 $f8, 8($s2) -/* 0D8E50 7F0A4320 A6200028 */ sh $zero, 0x28($s1) -/* 0D8E54 7F0A4324 46128100 */ add.s $f4, $f16, $f18 -/* 0D8E58 7F0A4328 46002182 */ mul.s $f6, $f4, $f0 -/* 0D8E5C 7F0A432C 46083281 */ sub.s $f10, $f6, $f8 -/* 0D8E60 7F0A4330 4600540D */ trunc.w.s $f16, $f10 -/* 0D8E64 7F0A4334 440C8000 */ mfc1 $t4, $f16 -/* 0D8E68 7F0A4338 00000000 */ nop -/* 0D8E6C 7F0A433C A62C0024 */ sh $t4, 0x24($s1) -/* 0D8E70 7F0A4340 8FA80034 */ lw $t0, 0x34($sp) -/* 0D8E74 7F0A4344 8E0E000C */ lw $t6, 0xc($s0) -/* 0D8E78 7F0A4348 01C87821 */ addu $t7, $t6, $t0 -/* 0D8E7C 7F0A434C 91F80005 */ lbu $t8, 5($t7) -/* 0D8E80 7F0A4350 00185140 */ sll $t2, $t8, 5 -/* 0D8E84 7F0A4354 0FC2D20F */ jal get_room_data_float1 -/* 0D8E88 7F0A4358 A62A002A */ sh $t2, 0x2a($s1) -/* 0D8E8C 7F0A435C C7B20090 */ lwc1 $f18, 0x90($sp) -/* 0D8E90 7F0A4360 C7A40078 */ lwc1 $f4, 0x78($sp) -/* 0D8E94 7F0A4364 C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 0D8E98 7F0A4368 46049181 */ sub.s $f6, $f18, $f4 -/* 0D8E9C 7F0A436C C6520000 */ lwc1 $f18, ($s2) -/* 0D8EA0 7F0A4370 46083280 */ add.s $f10, $f6, $f8 -/* 0D8EA4 7F0A4374 46005402 */ mul.s $f16, $f10, $f0 -/* 0D8EA8 7F0A4378 46128101 */ sub.s $f4, $f16, $f18 -/* 0D8EAC 7F0A437C 4600218D */ trunc.w.s $f6, $f4 -/* 0D8EB0 7F0A4380 44093000 */ mfc1 $t1, $f6 -/* 0D8EB4 7F0A4384 0FC2D20F */ jal get_room_data_float1 -/* 0D8EB8 7F0A4388 A6290030 */ sh $t1, 0x30($s1) -/* 0D8EBC 7F0A438C C7A80094 */ lwc1 $f8, 0x94($sp) -/* 0D8EC0 7F0A4390 C7AA007C */ lwc1 $f10, 0x7c($sp) -/* 0D8EC4 7F0A4394 C7B20070 */ lwc1 $f18, 0x70($sp) -/* 0D8EC8 7F0A4398 460A4401 */ sub.s $f16, $f8, $f10 -/* 0D8ECC 7F0A439C C6480004 */ lwc1 $f8, 4($s2) -/* 0D8ED0 7F0A43A0 46128100 */ add.s $f4, $f16, $f18 -/* 0D8ED4 7F0A43A4 46002182 */ mul.s $f6, $f4, $f0 -/* 0D8ED8 7F0A43A8 46083281 */ sub.s $f10, $f6, $f8 -/* 0D8EDC 7F0A43AC 4600540D */ trunc.w.s $f16, $f10 -/* 0D8EE0 7F0A43B0 440D8000 */ mfc1 $t5, $f16 -/* 0D8EE4 7F0A43B4 0FC2D20F */ jal get_room_data_float1 -/* 0D8EE8 7F0A43B8 A62D0032 */ sh $t5, 0x32($s1) -/* 0D8EEC 7F0A43BC C7B20098 */ lwc1 $f18, 0x98($sp) -/* 0D8EF0 7F0A43C0 C7A40080 */ lwc1 $f4, 0x80($sp) -/* 0D8EF4 7F0A43C4 C7A80074 */ lwc1 $f8, 0x74($sp) -/* 0D8EF8 7F0A43C8 8FA40034 */ lw $a0, 0x34($sp) -/* 0D8EFC 7F0A43CC 46049181 */ sub.s $f6, $f18, $f4 -/* 0D8F00 7F0A43D0 C6520008 */ lwc1 $f18, 8($s2) -/* 0D8F04 7F0A43D4 46083280 */ add.s $f10, $f6, $f8 -/* 0D8F08 7F0A43D8 46005402 */ mul.s $f16, $f10, $f0 -/* 0D8F0C 7F0A43DC 46128101 */ sub.s $f4, $f16, $f18 -/* 0D8F10 7F0A43E0 4600218D */ trunc.w.s $f6, $f4 -/* 0D8F14 7F0A43E4 440E3000 */ mfc1 $t6, $f6 -/* 0D8F18 7F0A43E8 00000000 */ nop -/* 0D8F1C 7F0A43EC A62E0034 */ sh $t6, 0x34($s1) -/* 0D8F20 7F0A43F0 8E08000C */ lw $t0, 0xc($s0) -/* 0D8F24 7F0A43F4 01047821 */ addu $t7, $t0, $a0 -/* 0D8F28 7F0A43F8 91F80004 */ lbu $t8, 4($t7) -/* 0D8F2C 7F0A43FC 240F2000 */ li $t7, 8192 -/* 0D8F30 7F0A4400 3C08B700 */ lui $t0, 0xb700 -/* 0D8F34 7F0A4404 00185140 */ sll $t2, $t8, 5 -/* 0D8F38 7F0A4408 A62A0038 */ sh $t2, 0x38($s1) -/* 0D8F3C 7F0A440C 8E19000C */ lw $t9, 0xc($s0) -/* 0D8F40 7F0A4410 03244821 */ addu $t1, $t9, $a0 -/* 0D8F44 7F0A4414 912B0005 */ lbu $t3, 5($t1) -/* 0D8F48 7F0A4418 3C190103 */ lui $t9, (0x01030040 >> 16) # lui $t9, 0x103 -/* 0D8F4C 7F0A441C 37390040 */ ori $t9, (0x01030040 & 0xFFFF) # ori $t9, $t9, 0x40 -/* 0D8F50 7F0A4420 000B6940 */ sll $t5, $t3, 5 -/* 0D8F54 7F0A4424 A62D003A */ sh $t5, 0x3a($s1) -/* 0D8F58 7F0A4428 8FAC00A0 */ lw $t4, 0xa0($sp) -/* 0D8F5C 7F0A442C 258E0008 */ addiu $t6, $t4, 8 -/* 0D8F60 7F0A4430 AFAE00A0 */ sw $t6, 0xa0($sp) -/* 0D8F64 7F0A4434 AD8F0004 */ sw $t7, 4($t4) -/* 0D8F68 7F0A4438 AD880000 */ sw $t0, ($t4) -/* 0D8F6C 7F0A443C 8FB800A0 */ lw $t8, 0xa0($sp) -/* 0D8F70 7F0A4440 270A0008 */ addiu $t2, $t8, 8 -/* 0D8F74 7F0A4444 AFAA00A0 */ sw $t2, 0xa0($sp) -/* 0D8F78 7F0A4448 AF190000 */ sw $t9, ($t8) -/* 0D8F7C 7F0A444C 0FC1E0E5 */ jal get_BONDdata_field_10E0 -/* 0D8F80 7F0A4450 AFB8004C */ sw $t8, 0x4c($sp) -/* 0D8F84 7F0A4454 0C003A2C */ jal osVirtualToPhysical -/* 0D8F88 7F0A4458 00402025 */ move $a0, $v0 -/* 0D8F8C 7F0A445C 8FA9004C */ lw $t1, 0x4c($sp) -/* 0D8F90 7F0A4460 AD220004 */ sw $v0, 4($t1) -/* 0D8F94 7F0A4464 8FA50058 */ lw $a1, 0x58($sp) -/* 0D8F98 7F0A4468 0FC2F271 */ jal applyRoomMatrixToDisplayList -/* 0D8F9C 7F0A446C 8FA400A0 */ lw $a0, 0xa0($sp) -/* 0D8FA0 7F0A4470 AFA200A0 */ sw $v0, 0xa0($sp) -/* 0D8FA4 7F0A4474 8E0B000C */ lw $t3, 0xc($s0) -/* 0D8FA8 7F0A4478 8FAD0034 */ lw $t5, 0x34($sp) -/* 0D8FAC 7F0A447C 240C0002 */ li $t4, 2 -/* 0D8FB0 7F0A4480 AFAC0010 */ sw $t4, 0x10($sp) -/* 0D8FB4 7F0A4484 27A400A0 */ addiu $a0, $sp, 0xa0 -/* 0D8FB8 7F0A4488 24060004 */ li $a2, 4 -/* 0D8FBC 7F0A448C 8FA700C0 */ lw $a3, 0xc0($sp) -/* 0D8FC0 7F0A4490 0FC1DB5A */ jal texSelect -/* 0D8FC4 7F0A4494 016D2821 */ addu $a1, $t3, $t5 -/* 0D8FC8 7F0A4498 8FB000A0 */ lw $s0, 0xa0($sp) -/* 0D8FCC 7F0A449C 3C0F0430 */ lui $t7, (0x04300040 >> 16) # lui $t7, 0x430 -/* 0D8FD0 7F0A44A0 35EF0040 */ ori $t7, (0x04300040 & 0xFFFF) # ori $t7, $t7, 0x40 -/* 0D8FD4 7F0A44A4 26080008 */ addiu $t0, $s0, 8 -/* 0D8FD8 7F0A44A8 AFA800A0 */ sw $t0, 0xa0($sp) -/* 0D8FDC 7F0A44AC 02202025 */ move $a0, $s1 -/* 0D8FE0 7F0A44B0 0C003A2C */ jal osVirtualToPhysical -/* 0D8FE4 7F0A44B4 AE0F0000 */ sw $t7, ($s0) -/* 0D8FE8 7F0A44B8 AE020004 */ sw $v0, 4($s0) -/* 0D8FEC 7F0A44BC 8FB800A0 */ lw $t8, 0xa0($sp) -/* 0D8FF0 7F0A44C0 3C19B100 */ lui $t9, (0xB1000032 >> 16) # lui $t9, 0xb100 -/* 0D8FF4 7F0A44C4 37390032 */ ori $t9, (0xB1000032 & 0xFFFF) # ori $t9, $t9, 0x32 -/* 0D8FF8 7F0A44C8 270A0008 */ addiu $t2, $t8, 8 -/* 0D8FFC 7F0A44CC AFAA00A0 */ sw $t2, 0xa0($sp) -/* 0D9000 7F0A44D0 24092010 */ li $t1, 8208 -/* 0D9004 7F0A44D4 AF090004 */ sw $t1, 4($t8) -/* 0D9008 7F0A44D8 AF190000 */ sw $t9, ($t8) -/* 0D900C 7F0A44DC 8FB100A0 */ lw $s1, 0xa0($sp) -/* 0D9010 7F0A44E0 3C0C0103 */ lui $t4, (0x01030040 >> 16) # lui $t4, 0x103 -/* 0D9014 7F0A44E4 358C0040 */ ori $t4, (0x01030040 & 0xFFFF) # ori $t4, $t4, 0x40 -/* 0D9018 7F0A44E8 262D0008 */ addiu $t5, $s1, 8 -/* 0D901C 7F0A44EC AFAD00A0 */ sw $t5, 0xa0($sp) -/* 0D9020 7F0A44F0 0FC1E0DD */ jal currentPlayerGetProjectionMatrix -/* 0D9024 7F0A44F4 AE2C0000 */ sw $t4, ($s1) -/* 0D9028 7F0A44F8 0C003A2C */ jal osVirtualToPhysical -/* 0D902C 7F0A44FC 00402025 */ move $a0, $v0 -/* 0D9030 7F0A4500 AE220004 */ sw $v0, 4($s1) -/* 0D9034 7F0A4504 8FA800BC */ lw $t0, 0xbc($sp) -/* 0D9038 7F0A4508 8FAE00A0 */ lw $t6, 0xa0($sp) -/* 0D903C 7F0A450C AD0E0000 */ sw $t6, ($t0) -.L7F0A4510: -/* 0D9040 7F0A4510 8FBF002C */ lw $ra, 0x2c($sp) -.L7F0A4514: -/* 0D9044 7F0A4514 8FB00020 */ lw $s0, 0x20($sp) -/* 0D9048 7F0A4518 8FB10024 */ lw $s1, 0x24($sp) -/* 0D904C 7F0A451C 8FB20028 */ lw $s2, 0x28($sp) -/* 0D9050 7F0A4520 03E00008 */ jr $ra -/* 0D9054 7F0A4524 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif - -void sub_GAME_7F0A4528(Gfx *gdl, s32 arg1) { - - bondstruct_unk_8007A170 *thing = &dword_CODE_bss_8007A170[0]; \ - bondstruct_unk_8007A170 *end = dword_CODE_bss_8007A170 + UNK_8007A170_MAX; - - for (; (thing < end); thing++) - { - sub_GAME_7F0A3F04(thing, gdl, arg1); - } -} - -#ifdef NONMATCHING -void sub_GAME_7F0A4594(vec3d *vec) -{ - mtx4TransformVecInPlace(camGetWorldToScreenMtxf(), &vec); - return -vec->z; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A4594 -/* 0D90C4 7F0A4594 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D90C8 7F0A4598 AFBF0014 */ sw $ra, 0x14($sp) -/* 0D90CC 7F0A459C C4840010 */ lwc1 $f4, 0x10($a0) -/* 0D90D0 7F0A45A0 E7A4001C */ swc1 $f4, 0x1c($sp) -/* 0D90D4 7F0A45A4 C4860014 */ lwc1 $f6, 0x14($a0) -/* 0D90D8 7F0A45A8 E7A60020 */ swc1 $f6, 0x20($sp) -/* 0D90DC 7F0A45AC C4880018 */ lwc1 $f8, 0x18($a0) -/* 0D90E0 7F0A45B0 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 0D90E4 7F0A45B4 E7A80024 */ swc1 $f8, 0x24($sp) -/* 0D90E8 7F0A45B8 00402025 */ move $a0, $v0 -/* 0D90EC 7F0A45BC 0FC1611D */ jal mtx4TransformVecInPlace -/* 0D90F0 7F0A45C0 27A5001C */ addiu $a1, $sp, 0x1c -/* 0D90F4 7F0A45C4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0D90F8 7F0A45C8 C7A00024 */ lwc1 $f0, 0x24($sp) -/* 0D90FC 7F0A45CC 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D9100 7F0A45D0 03E00008 */ jr $ra -/* 0D9104 7F0A45D4 46000007 */ neg.s $f0, $f0 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A45D8(void) { - -} -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A45D8 -/* 0D9108 7F0A45D8 3C028008 */ lui $v0, %hi(dword_CODE_bss_8007A4E0) -/* 0D910C 7F0A45DC 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007B098) -/* 0D9110 7F0A45E0 2463B098 */ addiu $v1, %lo(dword_CODE_bss_8007B098) # addiu $v1, $v1, -0x4f68 -/* 0D9114 7F0A45E4 2442A4E0 */ addiu $v0, %lo(dword_CODE_bss_8007A4E0) # addiu $v0, $v0, -0x5b20 -.L7F0A45E8: -/* 0D9118 7F0A45E8 2442003C */ addiu $v0, $v0, 0x3c -/* 0D911C 7F0A45EC 0043082B */ sltu $at, $v0, $v1 -/* 0D9120 7F0A45F0 1420FFFD */ bnez $at, .L7F0A45E8 -/* 0D9124 7F0A45F4 A440FFC8 */ sh $zero, -0x38($v0) -/* 0D9128 7F0A45F8 03E00008 */ jr $ra -/* 0D912C 7F0A45FC 00000000 */ nop -) -#endif -#ifdef VERSION_EU -void sub_GAME_7F0A45D8(void) -{ - sub_GAME_7F0A3BD8(); -} -#endif -#endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A4600(void) { - -} -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A4600 -/* 0D9130 7F0A4600 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D9134 7F0A4604 AFB00020 */ sw $s0, 0x20($sp) -/* 0D9138 7F0A4608 3C108008 */ lui $s0, %hi(dword_CODE_bss_8007A4E0) -/* 0D913C 7F0A460C 3C028008 */ lui $v0, %hi(dword_CODE_bss_8007B098) -/* 0D9140 7F0A4610 44876000 */ mtc1 $a3, $f12 -/* 0D9144 7F0A4614 AFBF0024 */ sw $ra, 0x24($sp) -/* 0D9148 7F0A4618 AFA40028 */ sw $a0, 0x28($sp) -/* 0D914C 7F0A461C AFA5002C */ sw $a1, 0x2c($sp) -/* 0D9150 7F0A4620 2442B098 */ addiu $v0, %lo(dword_CODE_bss_8007B098) # addiu $v0, $v0, -0x4f68 -/* 0D9154 7F0A4624 2610A4E0 */ addiu $s0, %lo(dword_CODE_bss_8007A4E0) # addiu $s0, $s0, -0x5b20 -/* 0D9158 7F0A4628 860E0004 */ lh $t6, 4($s0) -.L7F0A462C: -/* 0D915C 7F0A462C 55C00013 */ bnezl $t6, .L7F0A467C -/* 0D9160 7F0A4630 2610003C */ addiu $s0, $s0, 0x3c -/* 0D9164 7F0A4634 87AF003E */ lh $t7, 0x3e($sp) -/* 0D9168 7F0A4638 44076000 */ mfc1 $a3, $f12 -/* 0D916C 7F0A463C 02002025 */ move $a0, $s0 -/* 0D9170 7F0A4640 8FA50028 */ lw $a1, 0x28($sp) -/* 0D9174 7F0A4644 0FC28F02 */ jal sub_GAME_7F0A3C08 -/* 0D9178 7F0A4648 AFAF0010 */ sw $t7, 0x10($sp) -/* 0D917C 7F0A464C 8FA3002C */ lw $v1, 0x2c($sp) -/* 0D9180 7F0A4650 02001025 */ move $v0, $s0 -/* 0D9184 7F0A4654 C4640000 */ lwc1 $f4, ($v1) -/* 0D9188 7F0A4658 E604002C */ swc1 $f4, 0x2c($s0) -/* 0D918C 7F0A465C C4660004 */ lwc1 $f6, 4($v1) -/* 0D9190 7F0A4660 E6060030 */ swc1 $f6, 0x30($s0) -/* 0D9194 7F0A4664 C4680008 */ lwc1 $f8, 8($v1) -/* 0D9198 7F0A4668 E6080034 */ swc1 $f8, 0x34($s0) -/* 0D919C 7F0A466C C7AA0038 */ lwc1 $f10, 0x38($sp) -/* 0D91A0 7F0A4670 10000006 */ b .L7F0A468C -/* 0D91A4 7F0A4674 E60A0038 */ swc1 $f10, 0x38($s0) -/* 0D91A8 7F0A4678 2610003C */ addiu $s0, $s0, 0x3c -.L7F0A467C: -/* 0D91AC 7F0A467C 0202082B */ sltu $at, $s0, $v0 -/* 0D91B0 7F0A4680 5420FFEA */ bnezl $at, .L7F0A462C -/* 0D91B4 7F0A4684 860E0004 */ lh $t6, 4($s0) -/* 0D91B8 7F0A4688 00001025 */ move $v0, $zero -.L7F0A468C: -/* 0D91BC 7F0A468C 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D91C0 7F0A4690 8FB00020 */ lw $s0, 0x20($sp) -/* 0D91C4 7F0A4694 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0D91C8 7F0A4698 03E00008 */ jr $ra -/* 0D91CC 7F0A469C 00000000 */ nop -) -#endif -#ifdef VERSION_EU -void sub_GAME_7F0A4600(void) -{ - sub_GAME_7F0A3EA0(); -} -#endif -#endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A46A0(void) { - -} -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A46A0 -/* 0D91D0 7F0A46A0 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D91D4 7F0A46A4 AFB30020 */ sw $s3, 0x20($sp) -/* 0D91D8 7F0A46A8 AFB2001C */ sw $s2, 0x1c($sp) -/* 0D91DC 7F0A46AC AFB10018 */ sw $s1, 0x18($sp) -/* 0D91E0 7F0A46B0 AFB00014 */ sw $s0, 0x14($sp) -/* 0D91E4 7F0A46B4 3C108008 */ lui $s0, %hi(dword_CODE_bss_8007A4E0) -/* 0D91E8 7F0A46B8 3C138008 */ lui $s3, %hi(dword_CODE_bss_8007B098) -/* 0D91EC 7F0A46BC 3C118005 */ lui $s1, %hi(g_ClockTimer) -/* 0D91F0 7F0A46C0 3C128005 */ lui $s2, %hi(g_GlobalTimerDelta) -/* 0D91F4 7F0A46C4 AFBF0024 */ sw $ra, 0x24($sp) -/* 0D91F8 7F0A46C8 2673B098 */ addiu $s3, %lo(dword_CODE_bss_8007B098) # addiu $s3, $s3, -0x4f68 -/* 0D91FC 7F0A46CC 2610A4E0 */ addiu $s0, %lo(dword_CODE_bss_8007A4E0) # addiu $s0, $s0, -0x5b20 -/* 0D9200 7F0A46D0 26528378 */ addiu $s2, %lo(g_GlobalTimerDelta) # addiu $s2, $s2, -0x7c88 -/* 0D9204 7F0A46D4 26318374 */ addiu $s1, %lo(g_ClockTimer) # addiu $s1, $s1, -0x7c8c -/* 0D9208 7F0A46D8 860E0004 */ lh $t6, 4($s0) -.L7F0A46DC: -/* 0D920C 7F0A46DC 59C00018 */ blezl $t6, .L7F0A4740 -/* 0D9210 7F0A46E0 2610003C */ addiu $s0, $s0, 0x3c -/* 0D9214 7F0A46E4 8E0F0000 */ lw $t7, ($s0) -/* 0D9218 7F0A46E8 8E380000 */ lw $t8, ($s1) -/* 0D921C 7F0A46EC 01F8C821 */ addu $t9, $t7, $t8 -/* 0D9220 7F0A46F0 07200012 */ bltz $t9, .L7F0A473C -/* 0D9224 7F0A46F4 AE190000 */ sw $t9, ($s0) -/* 0D9228 7F0A46F8 86080004 */ lh $t0, 4($s0) -/* 0D922C 7F0A46FC 26040010 */ addiu $a0, $s0, 0x10 -/* 0D9230 7F0A4700 2605002C */ addiu $a1, $s0, 0x2c -/* 0D9234 7F0A4704 0328082A */ slt $at, $t9, $t0 -/* 0D9238 7F0A4708 5020000C */ beql $at, $zero, .L7F0A473C -/* 0D923C 7F0A470C A6000004 */ sh $zero, 4($s0) -/* 0D9240 7F0A4710 0FC15F62 */ jal sub_GAME_7F057D88 -/* 0D9244 7F0A4714 8E460000 */ lw $a2, ($s2) -/* 0D9248 7F0A4718 C6040014 */ lwc1 $f4, 0x14($s0) -/* 0D924C 7F0A471C C6060038 */ lwc1 $f6, 0x38($s0) -/* 0D9250 7F0A4720 4606203C */ c.lt.s $f4, $f6 -/* 0D9254 7F0A4724 00000000 */ nop -/* 0D9258 7F0A4728 45020005 */ bc1fl .L7F0A4740 -/* 0D925C 7F0A472C 2610003C */ addiu $s0, $s0, 0x3c -/* 0D9260 7F0A4730 10000002 */ b .L7F0A473C -/* 0D9264 7F0A4734 A6000004 */ sh $zero, 4($s0) -/* 0D9268 7F0A4738 A6000004 */ sh $zero, 4($s0) -.L7F0A473C: -/* 0D926C 7F0A473C 2610003C */ addiu $s0, $s0, 0x3c -.L7F0A4740: -/* 0D9270 7F0A4740 0213082B */ sltu $at, $s0, $s3 -/* 0D9274 7F0A4744 5420FFE5 */ bnezl $at, .L7F0A46DC -/* 0D9278 7F0A4748 860E0004 */ lh $t6, 4($s0) -/* 0D927C 7F0A474C 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D9280 7F0A4750 8FB00014 */ lw $s0, 0x14($sp) -/* 0D9284 7F0A4754 8FB10018 */ lw $s1, 0x18($sp) -/* 0D9288 7F0A4758 8FB2001C */ lw $s2, 0x1c($sp) -/* 0D928C 7F0A475C 8FB30020 */ lw $s3, 0x20($sp) -/* 0D9290 7F0A4760 03E00008 */ jr $ra -/* 0D9294 7F0A4764 27BD0028 */ addiu $sp, $sp, 0x28 -) -#endif -#ifdef VERSION_EU -void sub_GAME_7F0A46A0(Gfx *arg0, s32 arg1) -{ - sub_GAME_7F0A4528(arg0, arg1); -} -#endif -#endif - - -#ifndef VERSION_EU - -#ifdef NONMATCHING -void sub_GAME_7F0A4768(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A4768 -/* 0D9298 7F0A4768 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0D929C 7F0A476C AFB10018 */ sw $s1, 0x18($sp) -/* 0D92A0 7F0A4770 AFB00014 */ sw $s0, 0x14($sp) -/* 0D92A4 7F0A4774 AFB30020 */ sw $s3, 0x20($sp) -/* 0D92A8 7F0A4778 AFB2001C */ sw $s2, 0x1c($sp) -/* 0D92AC 7F0A477C 3C108008 */ lui $s0, %hi(dword_CODE_bss_8007A4E0) -/* 0D92B0 7F0A4780 3C118008 */ lui $s1, %hi(dword_CODE_bss_8007B098) -/* 0D92B4 7F0A4784 00809025 */ move $s2, $a0 -/* 0D92B8 7F0A4788 00A09825 */ move $s3, $a1 -/* 0D92BC 7F0A478C AFBF0024 */ sw $ra, 0x24($sp) -/* 0D92C0 7F0A4790 2631B098 */ addiu $s1, %lo(dword_CODE_bss_8007B098) # addiu $s1, $s1, -0x4f68 -/* 0D92C4 7F0A4794 2610A4E0 */ addiu $s0, %lo(dword_CODE_bss_8007A4E0) # addiu $s0, $s0, -0x5b20 -/* 0D92C8 7F0A4798 02002025 */ move $a0, $s0 -.L7F0A479C: -/* 0D92CC 7F0A479C 02402825 */ move $a1, $s2 -/* 0D92D0 7F0A47A0 0FC28FC1 */ jal sub_GAME_7F0A3F04 -/* 0D92D4 7F0A47A4 02603025 */ move $a2, $s3 -/* 0D92D8 7F0A47A8 2610003C */ addiu $s0, $s0, 0x3c -/* 0D92DC 7F0A47AC 0211082B */ sltu $at, $s0, $s1 -/* 0D92E0 7F0A47B0 5420FFFA */ bnezl $at, .L7F0A479C -/* 0D92E4 7F0A47B4 02002025 */ move $a0, $s0 -/* 0D92E8 7F0A47B8 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D92EC 7F0A47BC 8FB00014 */ lw $s0, 0x14($sp) -/* 0D92F0 7F0A47C0 8FB10018 */ lw $s1, 0x18($sp) -/* 0D92F4 7F0A47C4 8FB2001C */ lw $s2, 0x1c($sp) -/* 0D92F8 7F0A47C8 8FB30020 */ lw $s3, 0x20($sp) -/* 0D92FC 7F0A47CC 03E00008 */ jr $ra -/* 0D9300 7F0A47D0 27BD0028 */ addiu $sp, $sp, 0x28 -) -#endif - - - - - -void sub_GAME_7F0A47D4(void) { - sub_GAME_7F0A3BD8(); - sub_GAME_7F0A45D8(); -} - -void update_bullet_sparks_and_dust_clouds(void) { - // unknown - sub_GAME_7F0A3EA0(); - - // responsible for updating bullet sparks and dust clouds that spawn when shooting at other players - // the limit is 20, after which they'll stop spawning until some are removed - // these are 2D and always facing the camera - sub_GAME_7F0A46A0(); -} - - - -void sub_GAME_7F0A4824(Gfx *arg0, s32 arg1) { - sub_GAME_7F0A4528(arg0, arg1); - sub_GAME_7F0A4768(arg0, arg1); -} - - -#endif - - diff --git a/src/game/glass.h b/src/game/glass.h index fe633bcc..87a15a30 100644 --- a/src/game/glass.h +++ b/src/game/glass.h @@ -48,20 +48,32 @@ typedef struct s_shattered_window_piece { u8 v3a; } s_shattered_window_piece; -typedef struct bondstruct_unk_8007A170 { - s32 unk00; - s16 unk04; +typedef struct s_bullet_spark { + s32 age; + s16 lifetime; s16 unk06; - u32 unk08; - u32 unk0C; - u32 unk10; - u32 unk14; - u32 unk18; - u32 unk1c; - u32 unk20; - u32 unk24; - u32 unk28; -} bondstruct_unk_8007A170; + f32 unk08; + void* unk0C; + f32 unk10; + f32 unk14; + f32 unk18; + f32 unk1c; + f32 unk20; + f32 unk24; + u8 unk28; + u8 unk29; + u8 unk2A; + u8 unk2B; +} s_bullet_spark; + +#ifndef VERSION_EU +typedef struct s_moving_bullet_spark +{ + s_bullet_spark unk00; + coord3d velocity; + f32 unk38; +} s_moving_bullet_spark; +#endif extern s32 SHATTERED_WINDOW_PIECES_BUFFER_LEN; extern s_shattered_window_piece* ptr_shattered_window_pieces; @@ -76,24 +88,26 @@ extern u32 watch_screen_index; extern u32 controller_options_index; extern u32 game_options_index; -void sub_GAME_7F0A47D4(void); void sub_GAME_7F0A47FC(void); void update_broken_windows(void); -void sub_GAME_7F0A4528(Gfx *arg0, s32 arg1); -void sub_GAME_7F0A4824(Gfx *arg0, s32 arg1); -Gfx * sub_GAME_7F0A2C44(Gfx *arg0); -// tentative signature -void *sub_GAME_7F0A3E1C(coord3d *arg0, s32 arg1, f32 arg2, s16 arg3); -void sub_GAME_7F0A33F8(struct WatchVertex *arg0, s32 arg1, f32 arg2, s32 arg3); -Gfx *sub_GAME_7F0A3978(Gfx *gdl, void *arg1, s32 unused_arg2, s32 arg3); +Gfx * glassRenderShards(Gfx *arg0); +void sub_GAME_7F0A33F8(struct WatchVertex *vtx, s32 numverts, f32 scale, s32 arg3); +Gfx *draw_watch_background(Gfx *gdl, struct WatchVertex *watch_verts, s32 unused_arg2, s32 drawFan); Gfx *sub_GAME_7F0A3B40(Gfx *gdl, s32 *arg1); -Gfx * sub_GAME_7F0A3330(Gfx *arg0, void * arg1, s32 arg2); -void sub_GAME_7F0A2F30(struct damage_display_parent *arg0, s32 arg1, s32 arg2, f32 arg3); +Gfx *buildGaugeBarDL(Gfx *gdl, uintptr_t vtxaddr, s32 numvertices); +void hudMakeDamageSegments(struct damage_display_val *arg0, s32 arg1, s32 arg2, f32 arg3); struct WatchVertex *setup_watch_rectangles(struct WatchVertex *vtx, s32 startx, s32 startz, s32 width, s32 height, s32 horizontal_offset, s32 vertical_offset); void glassCreateShard(coord3d * pos, f32 rotX, f32 shard_size); -void sub_GAME_7F0A3EA0(void); - -void update_bullet_sparks_and_dust_clouds(void); +s_bullet_spark *bullet_spark_create(coord3d *arg0, s32 arg1, f32 arg2, s16 arg3); +void bullet_sparks_init(s_bullet_spark *arg0, coord3d *arg1, s32 arg2, f32 arg3, s16 arg4); +void bullet_sparks_render(Gfx *arg0, s32 zbufferMode); +void bullet_sparks_render_all(Gfx *arg0, s32 zbufferMode); +void bullet_sparks_reset_all(void); +void bullet_sparks_update(void); +void bullet_sparks_update_all(void); +#ifdef VERSION_EU +void bullet_moving_spark_create(void); +#endif #endif diff --git a/src/game/glass2.c b/src/game/glass2.c new file mode 100644 index 00000000..a2d72f94 --- /dev/null +++ b/src/game/glass2.c @@ -0,0 +1,889 @@ +#include +#include +#include "bg.h" +#include "bgroomtrans.h" +#include "bondview.h" +#include "dyn.h" +#include "math_atan2f.h" +#include "gbi_extension.h" +#include "glass.h" +#include "image_bank.h" +#include "lv.h" +#include "objective_status.h" +#include "random.h" + +#define BULLET_SPARKS_MAX 20 +#define BULLET_MOVING_SPARKS_MAX 50 +#define GAUGE_BAR_VERTEX_PAIR_STRIDE (2 * sizeof(struct WatchVertex)) + +//D:80040960 +struct rgba_u8 g_BulletSparkColors[8] = { + { 0xFF, 0xFF, 0xFF, 0xFF }, + { 0xFF, 0xFF, 0xC8, 0xFF }, + { 0xFF, 0x00, 0x00, 0xFF }, + { 0xFF, 0xFF, 0xFF, 0xFF }, + { 0xFF, 0xFF, 0xFF, 0xFF }, + { 0xFF, 0xFF, 0xFF, 0xFF }, + { 0 }, + { 0 } +}; +u32 D_80040980 = 0; + + +// something explosion related +// size of each item is 0x2c (see bullet_spark_create) +//CODE.bss:8007A170 +s_bullet_spark g_BulletSparkArray[BULLET_SPARKS_MAX]; + +#ifndef VERSION_EU + +//CODE.bss:8007A4E0 +s_moving_bullet_spark g_MovingBulletSparkArray[BULLET_MOVING_SPARKS_MAX]; + +#endif + + +#if defined(LEFTOVERDEBUG) +/* + Render Health Bars + AI Comment: This function populates a radial array of HUD elements (HealthSegments) with position and color data + based on a damage value (HealthValue) and a display mode (isArmour). It loops through 23 segments, calculating their + screen-space coordinates and visual properties using trigonometric functions. + @healthSegments : A pointer to an Array of 46 vertices. + @isArmour : Armour/Health if positive/negative + @numsegments : Not Used + @HealthValue : amount of health/armour 0-10 + @Address: 7F0A2F30 +*/ +void hudMakeDamageSegments(struct damage_display_val *HealthSegments, s32 numSegments, s32 isArmour, f32 HealthValue) +{ + s32 unused; + s32 i; + s32 pairIndex; + f32 angleRadians; + + HealthValue *= 8; + + + //for 145.2 to 35.2 degrees, calculate health/armour + for (i=0; i<23; i++) + { + //This line calculates an angle in radians, starting from 142° (cast truncated) and decreasing by 5° per iteration. + angleRadians = ((f32) (s32)(142.5 - (i*5))* M_PI_F * 2) / 360; + + for (pairIndex = 0; pairIndex < 2; pairIndex++) + { + s16 radialOffsetX = (((sinf(angleRadians) * 4 * 130 * (6 - pairIndex)) / 5) * isArmour); + s16 radialOffsetZ = (((cosf(angleRadians) * 4) * 130 * (6 - pairIndex)) / 5); + + HealthSegments->pos.x = (radialOffsetX + 1); + HealthSegments->pos.y = 0; + HealthSegments->pos.z = -radialOffsetZ; + HealthSegments->normal.x = 0; + HealthSegments->normal.y = 0; + HealthSegments->normal.z = 0; + HealthSegments->colour.r = 255; + HealthSegments->colour.g = 255; + HealthSegments->colour.b = 255; + + if (isArmour >= TRUE) //armour shade + { + HealthSegments->colour.r = (int)(96 - (cosf(angleRadians) * 96)); + HealthSegments->colour.g = (int)(127 - (cosf(angleRadians) * 127)); + HealthSegments->colour.b = 255; + } + else if (isArmour < FALSE) //health shade + { + HealthSegments->colour.g = (int)(127 - (cosf(angleRadians) * 127)); + HealthSegments->colour.b = (int)(32 - (cosf(angleRadians) * 32)); + } + + // segments 0-9 are single, 10-22 are doubled with single gaps + // IF i < damage fill, if fractional, shade else no fill. + if (i < 10) //145 to 95 + { + //full shade + if (i <= (((int)HealthValue * 2) - 1)) + { + HealthSegments->colour.a = 255; + } + // Fraction fill + else if ((i < (int)(HealthValue * 2.0f)) && (i > (((int)HealthValue * 2) - 1))) //yes, it looks like one is float, the other is cast + { + HealthSegments->colour.a = (int)((HealthValue - (int)HealthValue) * 207) + 48; + } + else //no fill + { + HealthSegments->colour.a = 48; + } + } + else if (i >= 10) //95 to 35 + { + if ( i <= (9 + ((HealthValue - 5.0f) * 4))) + { + HealthSegments->colour.a = 255; + } + else if (i <= (((int)(((HealthValue - 5.0f) * 4) + 0.5f) + 9)) && (i > (((int)(HealthValue - 5.0f) * 2) + 8))) + { + HealthSegments->colour.a = (int)((HealthValue - (int)HealthValue) * 207) + 48; + } + else + { + HealthSegments->colour.a = 48; + } + } + HealthSegments++; + } + } +} +#endif + +#if !defined(LEFTOVERDEBUG) +void hudMakeDamageSegments(struct damage_display_val *HealthSegments, s32 numSegments, s32 isArmour, f32 HealthValue) +{ + s32 new_var2; + f32 new_var; + s32 pairIndex; + s32 i; + s16 temp_s1; + s32 sp80; + f32 temp_f18; + f32 temp_f4; + f32 sp74; + f32 angleRadians; + HealthValue *= 8.0f; + sp80 = 0; + + for (i = 0; i < 23; i++) + { + temp_f18 = (f32) ((s32) (142.5 - ((f64) sp80))); + angleRadians = ((temp_f18 * M_PI_F) * ((f32) 2)) / 360.0f; + for (pairIndex = 0; pairIndex < 2; pairIndex++) + { + sp74 = (f32) isArmour; + temp_s1 = (s16) ((s32) (((((sinf(angleRadians) * 4.0f) * 130.0f) * ((f32) (6 - pairIndex))) / 5.0f) * sp74)); + temp_f4 = cosf(angleRadians) * 4.0f; + HealthSegments->pos.x = temp_s1 + 1; + HealthSegments->pos.y = 0; + HealthSegments->normal.x = 0; + HealthSegments->normal.y = 0; + new_var = HealthValue - 5.0f; + HealthSegments->normal.z = 0; + HealthSegments->colour.r = 0xFF; + HealthSegments->colour.g = 0xFF; + temp_s1 = ((temp_f4 * 130.0f) * ((f32) (6 - pairIndex))) / 5; + HealthSegments->colour.b = 0xFF; + HealthSegments->pos.z = (s16) (-((s32) temp_s1)); + if (isArmour > 0) + { + HealthSegments->colour.r = (s8) ((s32) (96.0f - (cosf(angleRadians) * 96.0f))); + HealthSegments->colour.g = (s8) ((s32) (127.0f - (cosf(angleRadians) * 127.0f))); + HealthSegments->colour.b = 0xFF; + } + else if (isArmour < 0) + { + HealthSegments->colour.g = (s8) ((s32) (127.0f - (cosf(angleRadians) * 127.0f))); + HealthSegments->colour.b = (s8) ((s32) (32.0f - (cosf(angleRadians) * 32.0f))); + } + if (i < 10) + { + if (((((s32) HealthValue) * 2) - 1) >= i) + { + HealthSegments->colour.a = 0xFF; + } + else if ((i < ((s32) (2.0f * HealthValue))) && (((((s32) HealthValue) * 2) - 1) < i)) + { + HealthSegments->colour.a = (s8) (((s32) ((HealthValue - ((f32) ((s32) HealthValue))) * 207.0f)) + 0x30); + } + else + { + HealthSegments->colour.a = 0x30; + } + } + else if (i >= 10) + { + if (((f32) i) <= (9.0f + ((HealthValue - 5.0f) * 4.0f))) + { + HealthSegments->colour.a = 0xFF; + } + else + { + new_var2 = i; + if (((((s32) ((new_var * 4.0f) + 0.5f)) + 9) >= new_var2) && (((((s32) (HealthValue - 5.0f)) * 2) + 8) < new_var2)) + { + HealthSegments->colour.a = (s8) (((s32) ((HealthValue - ((f32) ((s32) HealthValue))) * 207.0f)) + 0x30); + } + else + { + HealthSegments->colour.a = 0x30; + } + } + } + HealthSegments += 1; + } + sp80 += 5; + } +} +#endif + + +/** + * Address: 7F0A3330 + * + * Creates the display list for HUD and watch health and armor bars. + */ +Gfx *buildGaugeBarDL(Gfx *gdl, uintptr_t vtxaddr, s32 numvertices) +{ + s8 i; + + for (i = 0; i <= (numvertices / 2 - 2); i++) + { + gSPVertex(gdl++, vtxaddr, 4, 0); + + if (i >= 9) + { + if ((i + 3) % 4) + { + gSP2Triangles(gdl++, 0, 1, 2, 0, 1, 2, 3, 0); + } + } + else if (i < 9) + { + if ((i & 1) == 0) + { + gSP2Triangles(gdl++, 0, 1, 2, 0, 1, 2, 3, 0); + } + } + + vtxaddr += GAUGE_BAR_VERTEX_PAIR_STRIDE; + } + + gSPEndDisplayList(gdl++); + + return gdl; +} + + +/** + * Address: 7F0A33F8 + */ +void sub_GAME_7F0A33F8(struct WatchVertex *vtx, s32 numverts, f32 scale, s32 arg3) +{ + f32 angle; + s32 i; + s16 sinval; + s16 cosval; + + if (arg3) + { + vtx->coord1.x = 1; + vtx->coord1.y = 0; + vtx->coord1.z = 0; + vtx->coord2.x = 0; + vtx->coord2.y = 0; + vtx->coord2.z = 0; + vtx->color.r = 0; + vtx->color.g = 0x2c; + vtx->color.b = 0; + vtx->color.a = 0xb0; + + vtx++; + } + + for (i = 7; i <= (numverts - 7); i += 2) + { + angle = ((f32)i * M_PI_F) / numverts; + sinval = sinf(angle) * 520.0f * scale; + cosval = cosf(angle) * 520.0f * scale; + + vtx->coord1.x = 1 + sinval; + vtx->coord1.y = 0; + vtx->coord1.z = -cosval; + vtx->coord2.x = 0; + vtx->coord2.y = 0; + vtx->coord2.z = 0; + vtx->color.r = 0 - (cosf(angle) * 0); + vtx->color.g = 44.0f - (cosf(angle) * 20.0f); + vtx->color.b = 0 - (cosf(angle) * 0); + vtx->color.a = 0xb0; + + vtx++; + + if ((i != 0) && (i < numverts)) + { + vtx->coord1.x = 1 + -sinval; + vtx->coord1.y = 0; + vtx->coord1.z = -cosval; + vtx->coord2.x = 0; + vtx->coord2.y = 0; + vtx->coord2.z = 0; + + vtx->color.r = 0xFF; + vtx->color.g = 0xFF; + vtx->color.b = 0xFF; + + vtx->color.r = 0 - (cosf(angle) * 0); + vtx->color.g = 44.0f - (cosf(angle) * 20.0f); + vtx->color.b = 0 - (cosf(angle) * 0); + vtx->color.a = 0xb0; + + vtx++; + } + } +} + + +/** + * Address: 7F0A3978 + */ +Gfx *draw_watch_background(Gfx *gdl, struct WatchVertex *watch_verts, s32 unused_arg2, s32 drawFan) +{ + s8 i; + struct WatchVertex *orig; + + if (drawFan) + { + struct WatchVertex *vtx; + + orig = watch_verts; + watch_verts++; + vtx = watch_verts; + + i = 7; + + gSPVertex(gdl++, &vtx[14], 4, 0); + gSPVertex(gdl++, orig, 1, 4); + gSP2Triangles(gdl++, 2, 4, 3, 0, 0, 0, 0, 0); + + for (; i >= 0; i--) { + gSPVertex(gdl++, &vtx[2 * i], 4, 0); + gSPVertex(gdl++, orig, 1, 4); + gSP2Triangles(gdl++, 0, 4, 2, 0, 1, 3, 4, 0); + } + + gSP2Triangles(gdl++, 0, 1, 4, 0, 0, 0, 0, 0); + } + else + { + for (i = 0; i < 8; i++) + { + gSPVertex(gdl++, watch_verts, 4, 0); + gSP2Triangles(gdl++, 0, 1, 2, 0, 1, 2, 3, 0); + watch_verts += 2; + } + } + + gSPEndDisplayList(gdl++); + + return gdl; +} + + +/** + * Setup watch rectangles in the usual manner. + * This is called to setup the screen select rectangles, but note + * that the colors are overwritten in set_page_rectangle_colors. + * Also used to initialize watch static. + * @param vtx: Pointer to first vertex in a {@code struct WatchRectangle}. + * @param startx: + * @param startz: + * @param width: + * @param height: + * @param horizontal_offset: + * @param vertical_offset: +*/ +struct WatchVertex *setup_watch_rectangles(struct WatchVertex *vtx, s32 startx, s32 startz, s32 width, s32 height, s32 horizontal_offset, s32 vertical_offset) +{ + s32 i; + s32 j; + s32 xval; + s32 zval; + + i = 0; + j = 0; + xval = startx + horizontal_offset; + + if (i); + if (j); + if (vtx); + if (width); + if (height); + + for (i = 0; i < 2; i++, xval += width) + { + startz ^= 0; + + if (vertical_offset); + if (height); + + for (j = 0, zval = startz + vertical_offset; j < 2; j++, zval += height) + { + vtx->coord1.AsArray[0] = xval; + vtx->coord1.AsArray[1] = 0; + vtx->coord1.AsArray[2] = zval; + + vtx->coord2.AsArray[0] = 0; + vtx->coord2.AsArray[1] = 0; + vtx->coord2.AsArray[2] = 0; + + vtx->color.rgba[0] = 0x20; + vtx->color.rgba[1] = 0x70; + vtx->color.rgba[2] = 0x20; + vtx->color.rgba[3] = 0xF0; + + vtx++; + } + } + + return vtx; +} + + +Gfx *sub_GAME_7F0A3B40(Gfx *gdl, s32 *arg1) +{ + gSPVertex(gdl++, arg1, 4, 0); + + // gfxdis can't parse this, but maybe?: gSPModifyVertex(gdl++, 16, 0, 0x2110); + // manual specification: + { \ + Gfx *_g = (Gfx *)(gdl++); \ + _g->words.w0 = 0xB1000032; \ + _g->words.w1 = 0x2110; \ + } + + return gdl; +} + + +// unreferenced +void unused_7F0A3B70(s32 arg0, struct rgba_u8 *arg1) +{ + arg1->r = g_BulletSparkColors[arg0].r; + arg1->g = g_BulletSparkColors[arg0].g; + arg1->b = g_BulletSparkColors[arg0].b; + arg1->a = g_BulletSparkColors[arg0].a; +} + + +// unreferenced +void unused_7F0A3BA4(s32 arg0, struct rgba_u8 *arg1) +{ + g_BulletSparkColors[arg0].r = arg1->r; + g_BulletSparkColors[arg0].g = arg1->g; + g_BulletSparkColors[arg0].b = arg1->b; + g_BulletSparkColors[arg0].a = arg1->a; +} + + +/** + * Address: 7F0A3BD8 + */ +void bullet_sparks_reset(void) +{ + s32 i; + s32 start_index; + + if (1) { start_index = 0; } + + for (i = start_index; (i < BULLET_SPARKS_MAX) ^ 0; i++) + { + g_BulletSparkArray[i].unk0C = 0; + g_BulletSparkArray[i].lifetime = 0; + g_BulletSparkArray[i].age = 0; + } +} + + +/** + * Address: 7F0A3C08 + */ +void bullet_sparks_init(s_bullet_spark *spark, coord3d *arg1, s32 arg2, f32 arg3, s16 arg4) +{ + f32 angle; + + angle = randomGetNext(); + angle *= (1.0f / M_U32_MAX_VALUE_F); + angle *= M_TAU_F; + + spark->age = 0; + spark->unk06 = arg4; + + if (arg2 == 4) + { + spark->lifetime = 1; + spark->unk08 = 1.0f; + spark->unk0C = flareimage2; + } + else if (arg2 == 1) + { + spark->lifetime = 11; + spark->unk08 = 0.5f; + spark->unk0C = explosion_smokeimages; + } + else if (arg2 == 3) + { + spark->lifetime = 9; + spark->unk08 = 0.5f; + spark->unk0C = scattered_explosions; + } + else if (arg2 == 6) + { + spark->lifetime = 100; + spark->unk08 = 0.0f; + spark->unk0C = flareimage2; + } + else + { + spark->lifetime = 11; + spark->unk08 = 0.5f; + spark->unk0C = explosion_smokeimages; + } + + spark->unk28 = g_BulletSparkColors[arg2].r; + spark->unk29 = g_BulletSparkColors[arg2].g; + spark->unk2A = g_BulletSparkColors[arg2].b; + spark->unk2B = g_BulletSparkColors[arg2].a; + + spark->unk10 = arg1->x; + spark->unk14 = arg1->y; + spark->unk18 = arg1->z; + + arg3 *= 1.0f + ((f32)randomGetNext() * (1.0f / M_U32_MAX_VALUE_F) * 0.25f); + arg3 *= M_SQRT2_F; + spark->unk24 = arg3; + + spark->unk1c = cosf(angle) * arg3; + spark->unk20 = sinf(angle) * arg3; +} + + +/** + * Address: 7F0A3E1C + */ +s_bullet_spark *bullet_spark_create(coord3d *arg0, s32 arg1, f32 arg2, s16 arg3) +{ + s_bullet_spark *ptr; + + for (ptr = &g_BulletSparkArray[0]; ptr < &g_BulletSparkArray[BULLET_SPARKS_MAX]; ptr++) + { + if (ptr->lifetime == 0) + { + bullet_sparks_init(ptr, arg0, arg1, arg2, arg3); + return ptr; + } + } + + return NULL; +} + + +/** + * Address: 7F0A3EA0 + */ +void bullet_sparks_update(void) +{ + s_bullet_spark *thing = &g_BulletSparkArray[0]; \ + s_bullet_spark *end = g_BulletSparkArray + BULLET_SPARKS_MAX; + + for (; thing < end; thing++) + { + if (thing->lifetime > 0) + { + thing->age += g_ClockTimer; + + if (thing->age >= 0 && thing->age >= thing->lifetime) + { + thing->lifetime = 0; + } + } + } +} + + +/** + * Address: 7F0A3F04 + */ +void bullet_spark_render(s_bullet_spark *thing, Gfx *gdlarg, s32 zbufferMode) +{ + Vtx vtx; + Mtxf *mtx; + Gfx *gdl; + Vtx *vertices; + f32 z; + f32 y; + f32 x; + f32 s0[3]; + f32 s1[3]; + f32 s2[3]; + f32 s3[3]; + s32 frame; + s32 room; + struct coord3d *roompos; + + if (thing->lifetime <= 0) + { + return; + } + + if (thing->age < 0) + { + return; + } + + if (!camIsPosInScreen((coord3d *) (&thing->unk10), *((f32 *) (&thing->unk24)))) + { + return; + } + + vtx = *((Vtx *) (&D_80040980)); + mtx = currentPlayerGetViewToWorldMtxf(); + gdl = *((Gfx **) gdlarg); + vertices = dynAllocateVertices(4); + room = thing->unk06; + roompos = getRoomPositionByIndex(room); + vtx.v.cn[0] = ((u8 *) thing)[0x28]; + vtx.v.cn[1] = ((u8 *) thing)[0x29]; + vtx.v.cn[2] = ((u8 *) thing)[0x2a]; + vtx.v.cn[3] = ((u8 *) thing)[0x2b]; + frame = (s32) (((f32) thing->age) * (*(&thing->unk08))); + + x = *((f32 *) (&thing->unk10)); + y = *((f32 *) (&thing->unk14)); + z = *((f32 *) (&thing->unk18)); + + s0[0] = mtx->m[0][0] * thing->unk1c; + s0[1] = mtx->m[0][1] * thing->unk1c; + s0[2] = mtx->m[0][2] * thing->unk1c; + s1[0] = mtx->m[0][0] * thing->unk20; + s1[1] = mtx->m[0][1] * thing->unk20; + s1[2] = mtx->m[0][2] * thing->unk20; + s2[0] = mtx->m[1][0] * thing->unk1c; + s2[1] = mtx->m[1][1] * thing->unk1c; + s2[2] = mtx->m[1][2] * thing->unk1c; + s3[0] = mtx->m[1][0] * thing->unk20; + s3[1] = mtx->m[1][1] * thing->unk20; + s3[2] = mtx->m[1][2] * thing->unk20; + + vertices[0] = vtx; + vertices[1] = vtx; + vertices[2] = vtx; + vertices[3] = vtx; + vertices[0].v.ob[0] = (((x - s0[0]) - s3[0]) * get_room_data_float1()) - roompos->f[0]; + vertices[0].v.ob[1] = (((y - s0[1]) - s3[1]) * get_room_data_float1()) - roompos->f[1]; + vertices[0].v.ob[2] = (((z - s0[2]) - s3[2]) * get_room_data_float1()) - roompos->f[2]; + + // Matching hack. + if ((roompos->f && roompos->f)); + + vertices[0].v.tc[0] = ((struct sImageTableEntry *) (((u8 *) thing->unk0C) + (frame * 12)))->width << 5; + vertices[0].v.tc[1] = 0; + vertices[1].v.ob[0] = (((x + s1[0]) - s2[0]) * get_room_data_float1()) - roompos->f[0]; + vertices[1].v.ob[1] = (((y + s1[1]) - s2[1]) * get_room_data_float1()) - roompos->f[1]; + vertices[1].v.ob[2] = (((z + s1[2]) - s2[2]) * get_room_data_float1()) - roompos->f[2]; + vertices[1].v.tc[0] = 0; + vertices[1].v.tc[1] = 0; + vertices[2].v.ob[0] = (((x + s0[0]) + s3[0]) * get_room_data_float1()) - roompos->f[0]; + vertices[2].v.ob[1] = (((y + s0[1]) + s3[1]) * get_room_data_float1()) - roompos->f[1]; + vertices[2].v.ob[2] = (((z + s0[2]) + s3[2]) * get_room_data_float1()) - roompos->f[2]; + vertices[2].v.tc[0] = 0; + vertices[2].v.tc[1] = ((struct sImageTableEntry *) (((u8 *) thing->unk0C) + (frame * 12)))->height << 5; + vertices[3].v.ob[0] = (((x - s1[0]) + s2[0]) * get_room_data_float1()) - roompos->f[0]; + vertices[3].v.ob[1] = (((y - s1[1]) + s2[1]) * get_room_data_float1()) - roompos->f[1]; + vertices[3].v.ob[2] = (((z - s1[2]) + s2[2]) * get_room_data_float1()) - roompos->f[2]; + vertices[3].v.tc[0] = ((struct sImageTableEntry *) (((u8 *) thing->unk0C) + (frame * 12)))->width << 5; + vertices[3].v.tc[1] = ((struct sImageTableEntry *) (((u8 *) thing->unk0C) + (frame * 12)))->height << 5; + + gSPSetGeometryMode(gdl++, G_CULL_BACK); + gSPMatrix(gdl++, osVirtualToPhysical((void *) get_BONDdata_field_10E0()), G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH); + gdl = applyRoomMatrixToDisplayList(gdl, room); + texSelect(&gdl, (struct sImageTableEntry *) (((u8 *) thing->unk0C) + (frame * 12)), 4, zbufferMode, 2); + gSPVertex(gdl++, osVirtualToPhysical(vertices), 4, 0); + gSP2Triangles(gdl++, 0, 1, 2, 0, 0, 2, 3, 0); + gSPMatrix(gdl++, osVirtualToPhysical(currentPlayerGetProjectionMatrix()), G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH); + *((Gfx **) gdlarg) = gdl; +} + + +/** + * Address: 7F0A4528 + */ +void bullet_sparks_render(Gfx *gdl, s32 zbufferMode) +{ + + s_bullet_spark *thing = &g_BulletSparkArray[0]; \ + s_bullet_spark *end = g_BulletSparkArray + BULLET_SPARKS_MAX; + + for (; (thing < end); thing++) + { + bullet_spark_render(thing, gdl, zbufferMode); + } +} + + +/** + * Address: 7F0A4594 + */ +f32 bullet_spark_get_depth(s_bullet_spark* spark) +{ + coord3d tempVec; + + tempVec.x = spark->unk10; + tempVec.y = spark->unk14; + tempVec.z = spark->unk18; + + mtx4TransformVecInPlace(camGetWorldToScreenMtxf(), &tempVec); + + return -tempVec.z; +} + + +/** + * Address: 7F0A45D8 + */ +#ifndef VERSION_EU +void bullet_moving_sparks_reset(void) +{ + s_moving_bullet_spark *ptr; + + ptr = g_MovingBulletSparkArray; + + for (ptr = &g_MovingBulletSparkArray[0]; ptr < &g_MovingBulletSparkArray[BULLET_MOVING_SPARKS_MAX]; ptr++) + { + ptr->unk00.lifetime = 0; + } +} +#else +void bullet_moving_sparks_reset(void) +{ + bullet_sparks_reset(); +} +#endif + + +/** + * Address: 7F0A4600 + */ +#ifndef VERSION_EU +s_moving_bullet_spark *bullet_moving_spark_create(coord3d *arg0, coord3d *velocity, s32 arg2, f32 arg3, f32 arg4, s16 arg5) +{ + s_moving_bullet_spark *ptr; + + for (ptr = &g_MovingBulletSparkArray[0]; ptr < &g_MovingBulletSparkArray[BULLET_MOVING_SPARKS_MAX]; ptr++) + { + if (ptr->unk00.lifetime == 0) + { + bullet_sparks_init(&ptr->unk00, arg0, arg2, arg3, arg5); + + ptr->velocity.x = velocity->x; + ptr->velocity.y = velocity->y; + ptr->velocity.z = velocity->z; + ptr->unk38 = arg4; + + return ptr; + } + } + + return NULL; +} +#else +void bullet_moving_spark_create(void) +{ + bullet_sparks_update(); +} +#endif + + +/** + * Address: 7F0A46A0 + */ +#ifndef VERSION_EU +void bullet_moving_sparks_update(void) +{ + s_moving_bullet_spark *ptr; + s_moving_bullet_spark *end; + + ptr = &g_MovingBulletSparkArray[0]; end = &g_MovingBulletSparkArray[BULLET_MOVING_SPARKS_MAX]; + + while (ptr < end) + { + if (ptr->unk00.lifetime > 0) + { + ptr->unk00.age += g_ClockTimer; + if (ptr->unk00.age >= 0) + { + if (ptr->unk00.lifetime > ptr->unk00.age) + { + sub_GAME_7F057D88(&ptr->unk00.unk10, &ptr->velocity, g_GlobalTimerDelta); + if (ptr->unk00.unk14 < ptr->unk38) + { + ptr->unk00.lifetime = 0; + } + } + else + { + ptr->unk00.lifetime = 0; + } + } + } + ptr++; + } +} +#else +void bullet_moving_sparks_update(Gfx *arg0, s32 zbufferMode) +{ + bullet_sparks_render(arg0, zbufferMode); +} +#endif + + +/** + * Address: 7F0A4768 + */ +#ifndef VERSION_EU + +void bullet_moving_sparks_render_all(Gfx *arg0, s32 zbufferMode) +{ + s32 max_index; + s_moving_bullet_spark *ptr; + + max_index = BULLET_MOVING_SPARKS_MAX; + + for (ptr = &g_MovingBulletSparkArray[0]; ptr < (&g_MovingBulletSparkArray[max_index]); ptr++) + { + bullet_spark_render(&ptr->unk00, arg0, zbufferMode); + } + +} + + +/** + * Address: 7F0A47D4 + */ +void bullet_sparks_reset_all(void) +{ + bullet_sparks_reset(); + bullet_moving_sparks_reset(); +} + + +void bullet_sparks_update_all(void) +{ + bullet_sparks_update(); + + // responsible for updating bullet sparks and dust clouds that spawn when shooting at other players + // these are 2D and always facing the camera + bullet_moving_sparks_update(); +} + + +/** + * Address: 7F0A4824 + */ +void bullet_sparks_render_all(Gfx *arg0, s32 zbufferMode) +{ + bullet_sparks_render(arg0, zbufferMode); + bullet_moving_sparks_render_all(arg0, zbufferMode); +} + + +#endif diff --git a/src/game/gun.c b/src/game/gun.c index 840f5339..54b86f55 100644 --- a/src/game/gun.c +++ b/src/game/gun.c @@ -34,16 +34,17 @@ #include "joy.h" #include "matrixmath.h" #include "bondinv.h" +#include "stan.h" +#include "gbi_extension.h" // bss -s32 dword_CODE_bss_80075DB0; -s32 dword_CODE_bss_80075DB4; -ALSoundState* dword_CODE_bss_80075DB8[4]; +ALSoundState *g_CasingSfxState; +ALSoundState* g_UnusedSfxState; // Unused, type assumed from surrounding variables. +ALSoundState* g_ImpactSfxStates[NUM_IMPACT_SFX_STATES]; CasingRecord g_Casings[20]; -s32 dword_CODE_bss_80076A48; - +s32 dword_CODE_bss_80076A48; // Unused #ifdef REFRESH_PAL /* PAL */ @@ -51,22 +52,27 @@ s32 dword_CODE_bss_80076A48; #define THROWN_ITEM_TIMER_SOLO 250 #define THROWN_ITEM_TIMER_MULTI 150 #define THROWN_ITEM_TIMER_DEFAULT 200 - #define DUAL_WIELD_TRIGGER_SWAP_TICKS 24 - #define DUAL_WIELD_SINGLE_TRIGGER_SWAP_TICKS 36 - #define WATCH_SOUND_DURATION_TICKS 250 + #define GLGRENADE_TIMER 1000 + #define DUAL_WIELD_TRIGGER_SWAP_TICKS 24 + #define DUAL_WIELD_SINGLE_TRIGGER_SWAP_TICKS 36 + #define WATCH_SOUND_DURATION_TICKS 250 + #define GUN_SPRING_DAMP 0.9402999877929688f + #define GUN_SPRING_SCALE 0.05970001220703125f #else /* NTSC */ #define THROWN_ITEM_REFRESH_RATE 60 #define THROWN_ITEM_TIMER_SOLO 300 #define THROWN_ITEM_TIMER_MULTI 180 #define THROWN_ITEM_TIMER_DEFAULT 240 - #define DUAL_WIELD_TRIGGER_SWAP_TICKS 20 - #define DUAL_WIELD_SINGLE_TRIGGER_SWAP_TICKS 30 - #define WATCH_SOUND_DURATION_TICKS 300 + #define GLGRENADE_TIMER 1200 + #define DUAL_WIELD_TRIGGER_SWAP_TICKS 20 + #define DUAL_WIELD_SINGLE_TRIGGER_SWAP_TICKS 30 + #define WATCH_SOUND_DURATION_TICKS 300 + #define GUN_SPRING_DAMP 0.95f + #define GUN_SPRING_SCALE 0.050000012f #endif - - +#define TANK_SHELL_SPEED 66.666664f // data ////D:80032440 @@ -119,7 +125,7 @@ CartridgeModelFileRecord ejected_cartridge[] = { //D:80034C9C u32 cartridges_eject = 0; //D:80034CA0 -u32 D_80034CA0 = 0; +u32 g_gunDebKeyframeIndex = 0; //D:80034CA4 u32 D_80034CA4[] = { @@ -338,75 +344,24 @@ Weapon1PTransformKeyframe taserRaiseKeyframes[6] = { {1, { 0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, 0.0f, 0.0f} }; - -//D:80035C40 -u32 D_80035C40 = 0; -//D:80035C44 -u32 D_80035C44 = 0; -//D:80035C48 -u32 D_80035C48 = 0; -//D:80035C4C -u32 D_80035C4C = 0; -//D:80035C50 -u32 D_80035C50 = 0; -//D:80035C54 -u32 D_80035C54 = 0; -//D:80035C58 -u32 D_80035C58 = 0; -//D:80035C5C -u32 D_80035C5C = 0; - -//D:80035C60 -f32 D_80035C60 = -1.0; -//D:80035C64 -f32 D_80035C64 = 0.0; -//D:80035C68 -f32 D_80035C68 = 1.0; -//D:80035C6C -f32 D_80035C6C = 0.0; -//D:80035C70 -f32 D_80035C70 = 6.2536321; -//D:80035C74 -f32 D_80035C74 = 6.2592888; -//D:80035C78 -f32 D_80035C78 = 0.204238; -//D:80035C7C -f32 D_80035C7C = 0.25044999; -//D:80035C80 -f32 D_80035C80 = 0.90482301; -//D:80035C84 -f32 D_80035C84 = 0.28716999; -//D:80035C88 -f32 D_80035C88 = 1.715736; -//D:80035C8C -f32 D_80035C8C = 0.37460899; -//D:80035C90 -f32 D_80035C90 = 0.92193699; +coord3d D_80035C40 = {0.0f, 0.0f, 0.0f}; +coord3d D_80035C4C = {0.0f, 0.0f, 0.0f}; +coord3d D_80035C58 = {0.0f, 0.0f, -1.0f}; +coord3d D_80035C64 = {0.0f, 1.0f, 0.0f}; +coord3d D_80035C70 = {6.2536321f, 6.2592888f, 0.204238f}; +coord3d D_80035C7C = {0.25044999f, 0.90482301f, 0.28716999f}; +coord3d D_80035C88 = {1.715736f, 0.37460899f, 0.92193699f}; //D:80035C94 f32 D_80035C94 = 0; //D:80035C98 -u32 D_80035C98 = 0; -//D:80035C9C -u32 D_80035C9C = 0; -//D:80035CA0 -u32 D_80035CA0 = 0; -//D:80035CA4 -s32 D_80035CA4 = 0xFFFFFFFF; +Vtx D_80035C98 = {0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff }; //D:80035CA8 -u32 D_80035CA8 = 0; -//D:80035CAC -u32 D_80035CAC = 0; -//D:80035CB0 -u32 D_80035CB0 = 0; +coord3d D_80035CA8 = { 0.0f, 0.0f, 0.0f }; //D:80035CB4 -u32 D_80035CB4 = 0; -//D:80035CB8 -u32 D_80035CB8 = 0; -//D:80035CBC -u32 D_80035CBC = 0; +coord3d D_80035CB4 = { 0.0f, 0.0f, 0.0f }; //D:80035CC0 u32 D_80035CC0 = 0; @@ -436,7 +391,7 @@ u32 D_80035D00 = 0; //D:80035D04 u32 D_80035D04[] = {1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //D:80035D44 -u32 D_80035D44[] = { +u32 watchControllerButtonBases[] = { 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; @@ -490,9 +445,9 @@ struct EarWhistleSounds ear_whistle_sounds = { }; //D:80035E90 -struct sfx2 D_80035E90 = { RICO_LASER2_SFX, RICO_LASER3_SFX }; +struct sfx2 watchlaser_fire_sounds = { RICO_LASER2_SFX, RICO_LASER3_SFX }; //D:80035E94 -struct sfx3 D_80035E94 = { KNIFE_THROW1_SFX, KNIFE_THROW2_SFX, KNIFE_THROW3_SFX }; +struct sfx3 knife_throw_sounds = { KNIFE_THROW1_SFX, KNIFE_THROW2_SFX, KNIFE_THROW3_SFX }; //D:80035E9C struct gun_trigger_state g_ZeroTriggerState = { 0, 0 }; //D:80035EA0 @@ -504,62 +459,73 @@ u32 D_80035EA8 = 0; //D:80035EAC u32 D_80035EAC = 0; //D:80035EB0 -u32 D_80035EB0[] = {0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +u32 g_DefaultCasingModelRenderData[] = {0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //D:80035EEC -u32 dword_D_80035EEC = 0; +u32 dword_D_80035EEC = 0; // Unused //D:80035EF0 #define AMMO_RELATED_MAX 30 -AmmoStats ammo_related[AMMO_RELATED_MAX] = { - { 0x0, 0x0, 0x0, 0x0, 0x0, }, - { 0x320, 0x200, 0xC84, 0x0, 0x0, }, - { 0xC8, 0x0, 0x0, 0x0, 0x0, }, - { 0x190, 0x200, 0xC90, 0xC000, 0x0, }, - { 0x64, 0x200, 0xC9C, 0x0, 0x0, }, - { 0xC, 0x200, 0xCD8, 0x0, 0x0, }, - { 0x3, 0x200, 0xCC0, 0xC000, 0x0, }, - { 0xA, 0x200, 0xCFC, 0x3F80, 0x0, }, - { 0xA, 0x200, 0xD14, 0x3F80, 0x0, }, - { 0xA, 0x200, 0xD08, 0x3F80, 0x0, }, - { 0xA, 0x200, 0xCA8, 0x0, 0x0, }, - { 0xC, 0x200, 0xCB4, 0x0, 0x0, }, - { 0xC8, 0x200, 0xCE4, 0x0, 0x0, }, - { 0x64, 0x200, 0xCF0, 0x0, 0x0, }, - { 0x32, 0x0, 0x0, 0x0, 0x0, }, - { 0xA, 0x0, 0x0, 0x0, 0x0, }, - { 0x2, 0x0, 0x0, 0x0, 0x0, }, - { 0x8, 0x0, 0x0, 0x0, 0x0, }, - { 0x6, 0x0, 0x0, 0x0, 0x0, }, - { 0xA, 0x0, 0x0, 0x0, 0x0, }, - { 0xA, 0x0, 0x0, 0x0, 0x0, }, - { 0xA, 0x0, 0x0, 0x0, 0x0, }, - { 0x1, 0x0, 0x0, 0x0, 0x0, }, - { 0xA, 0x0, 0x0, 0x0, 0x0, }, - { 0x3E8, 0x0, 0x0, 0x0, 0x0, }, - { 0xA, 0x0, 0x0, 0x0, 0x0, }, - { 0xA, 0x0, 0x0, 0x0, 0x0, }, - { 0xA, 0x0, 0x0, 0x0, 0x0, }, - { 0x32, 0x200, 0xD20, 0xBF80, 0x0, }, - { 0x1, 0x0, 0x0, 0x0, 0x0, }, +AmmoStats ammo_related[AMMO_RELATED_MAX] = { + { 0x0 , 0x00000000, 0.0f, }, + { 0x320 , 0x02000C84, 0.0f, }, + { 0xC8 , 0x00000000, 0.0f, }, + { 0x190 , 0x02000C90, -2.0f, }, + { 0x64 , 0x02000C9C, 0.0f, }, + { 0xC , 0x02000CD8, 0.0f, }, + { 0x3 , 0x02000CC0, -2.0f, }, + { 0xA , 0x02000CFC, 1.0f, }, + { 0xA , 0x02000D14, 1.0f, }, + { 0xA , 0x02000D08, 1.0f, }, + { 0xA , 0x02000CA8, 0.0f, }, + { 0xC , 0x02000CB4, 0.0f, }, + { 0xC8 , 0x02000CE4, 0.0f, }, + { 0x64 , 0x02000CF0, 0.0f, }, + { 0x32 , 0x00000000, 0.0f, }, + { 0xA , 0x00000000, 0.0f, }, + { 0x2 , 0x00000000, 0.0f, }, + { 0x8 , 0x00000000, 0.0f, }, + { 0x6 , 0x00000000, 0.0f, }, + { 0xA , 0x00000000, 0.0f, }, + { 0xA , 0x00000000, 0.0f, }, + { 0xA , 0x00000000, 0.0f, }, + { 0x1 , 0x00000000, 0.0f, }, + { 0xA , 0x00000000, 0.0f, }, + { 0x3E8 , 0x00000000, 0.0f, }, + { 0xA , 0x00000000, 0.0f, }, + { 0xA , 0x00000000, 0.0f, }, + { 0xA , 0x00000000, 0.0f, }, + { 0x32 , 0x02000D20, -1.0f, }, + { 0x1 , 0x00000000, 0.0f, }, }; //was previously attached to ammo_related[] (array at D:80035EF0) //D:80036058 u16 D_80036058[] = { 0, 0, 0, 0, }; +extern struct ModelSkeleton skeleton_gun_kf7; //i may belong to objecthandler.c // D:80036060 canonically freedist -u32 D_80036060 = 0; - +struct ModelHitEntry *g_ModelHitFreeList = NULL; +typedef struct ModelHeader { + s16 unk00; + s16 Type; + struct ChrRecord *chr; + ModelFileHeader *obj; + RenderPosView *render_pos; + union ModelRwData **datas; + f32 scale; + struct Model *attachedto; + ModelNode *attachedto_objinst; +} ModelHeader; // forward declarations void bullet_path_from_screen_center(coord3d* arg0, coord3d* arg1, enum GUNHAND arg2); -void sub_GAME_7F05EC1C(struct WeaponObjectRecord *arg0, struct coord3d *arg1, Mtxf *arg2, struct coord3d *arg3, s32 *arg4); -s32 sub_GAME_7F05C6FC(struct Weapon1PTransformKeyframe *, f32, Mtxf *, enum GUNHAND); +void gunInitProjectileFromPlayer(ObjectRecord *obj, coord3d *targetpos, Mtxf *arg2, coord3d *velocity, Mtxf *arg4); +s32 gunSample1PTransform(Weapon1PTransformKeyframe *keyframes, f32 time, Mtxf *matrix, GUNHAND hand); void analyzeGEKey(void); void give_weapon_case_items(void); struct ModelFileHeader * get_ptr_weapon_model_header_line(ITEM_IDS weapon); @@ -570,29 +536,40 @@ void give_weapon_case_items(void); void sub_GAME_7F05DA8C(GUNHAND hand, ITEM_IDS weaponnum_watchmenu); void sub_GAME_7F05E808(GUNHAND hand); void sub_GAME_7F0649D8(enum GUNHAND hand); +void gunCreateBeamForHand(enum GUNHAND hand); +CasingRecord* casingCreate(ModelFileHeader* header, Mtxf* mtx); +void sub_GAME_7F068508(GUNHAND handnum, f32 floor_y_pos); +Vtx *dynAllocateVertices(s32 count); +Mtx *dynAllocateMatrix(void); +void divide3DCoordinates(coord3d *in, f32 divisor, coord3d *out); // end forward declarations +// current debug keyframes +#define DEB_KEYFRAMES sniperMeleeKeyframes2 - -void set_cartridges_eject(u32 uParm1) { +void set_cartridges_eject(u32 uParm1) +{ cartridges_eject = uParm1; } -u32 get_cartridges_eject(void) { + +u32 get_cartridges_eject(void) +{ return cartridges_eject; } -// Unreferenced +// Unreferenced debPrintKeyframe +// Address: ~ 7F05C538 void nullsub_73(void) { #ifdef DEBUG osSyncPrintf("\t{"); osSyncPrintf("0"); - osSyncPrintf(",{%ff,%ff,%ff}", sniperMeleeKeyframes2[D_80034CA0].pos.x, sniperMeleeKeyframes2[D_80034CA0].pos.y, sniperMeleeKeyframes2[D_80034CA0].pos.z); - osSyncPrintf(",{%ff,%ff,%ff}", sniperMeleeKeyframes2[D_80034CA0].rot.x, sniperMeleeKeyframes2[D_80034CA0].rot.y, sniperMeleeKeyframes2[D_80034CA0].rot.z); + osSyncPrintf(",{%ff,%ff,%ff}", DEB_KEYFRAMES[g_gunDebKeyframeIndex].pos.x, DEB_KEYFRAMES[g_gunDebKeyframeIndex].pos.y, DEB_KEYFRAMES[g_gunDebKeyframeIndex].pos.z); + osSyncPrintf(",{%ff,%ff,%ff}", DEB_KEYFRAMES[g_gunDebKeyframeIndex].rot.x, DEB_KEYFRAMES[g_gunDebKeyframeIndex].rot.y, DEB_KEYFRAMES[g_gunDebKeyframeIndex].rot.z); osSyncPrintf(",0.5f,20.0f"); osSyncPrintf("},\n"); #endif @@ -600,12 +577,13 @@ void nullsub_73(void) } -// Unreferenced +// Unreferenced - force keyframe to position +// Address: 7F05C540 void sub_GAME_7F05C540(coord3d* pos) { Weapon1PTransformKeyframe* temp_v0; - temp_v0 = &sniperMeleeKeyframes2[D_80034CA0]; + temp_v0 = &DEB_KEYFRAMES[g_gunDebKeyframeIndex]; temp_v0->pos.x += pos->x; temp_v0->pos.y += pos->y; temp_v0->pos.z += pos->z; @@ -616,9 +594,9 @@ void sub_GAME_7F05C540(coord3d* pos) void sub_GAME_7F05C594(Mtxf* mtxf) { Mtxf sp18; - matrix_4x4_set_rotation_around_xyz(&sniperMeleeKeyframes2[D_80034CA0].rot, &sp18); + matrix_4x4_set_rotation_around_xyz(&DEB_KEYFRAMES[g_gunDebKeyframeIndex].rot, &sp18); matrix_4x4_multiply_in_place(mtxf, &sp18); - matrix_4x4_get_rotation_around_xyz(&sp18, &sniperMeleeKeyframes2[D_80034CA0].rot); + matrix_4x4_get_rotation_around_xyz(&sp18, &DEB_KEYFRAMES[g_gunDebKeyframeIndex].rot); } @@ -627,198 +605,108 @@ void sub_GAME_7F05C614(void) if (!cartridges_eject) { return; } g_CurrentPlayer->hands[0].field_92C = 1; - matrix_4x4_set_rotation_around_xyz(&sniperMeleeKeyframes2[D_80034CA0].rot, (Mtxf* ) &g_CurrentPlayer->hands[0].field_8EC); - matrix_4x4_set_position(&sniperMeleeKeyframes2[D_80034CA0].pos, (Mtxf* ) &g_CurrentPlayer->hands[0].field_8EC); + matrix_4x4_set_rotation_around_xyz(&DEB_KEYFRAMES[g_gunDebKeyframeIndex].rot, (Mtxf *)&g_CurrentPlayer->hands[0].field_8EC); + matrix_4x4_set_position(&DEB_KEYFRAMES[g_gunDebKeyframeIndex].pos, (Mtxf *)&g_CurrentPlayer->hands[0].field_8EC); cartridges_eject = 0; } -// Unreferenced -void sub_GAME_7F05C6B8(void) +// Unreferenced increment keyframe index, loop back to start if final keyframe is reached +// Address: 7F05C6B8 +void gunDebAdvanceKeyframe(void) { - D_80034CA0++; - if (sniperMeleeKeyframes2[D_80034CA0].isFinalKey & 1) + g_gunDebKeyframeIndex++; + if (DEB_KEYFRAMES[g_gunDebKeyframeIndex].isFinalKey & 1) { - D_80034CA0 = 0; + g_gunDebKeyframeIndex = 0; } } +/** + * Address: 7F05C6FC + * + * Sample a first person weapon transform keyframe animation at `time` and + * write the interpolated transform into `matrix` + * + * @returns 1 when an in-progress frame was interpolated, 0 when `time` reached + * the final keyframe and the static end pose was written. + */ +s32 gunSample1PTransform(Weapon1PTransformKeyframe *keyframes, f32 time, Mtxf *matrix, GUNHAND hand) +{ + Weapon1PTransformKeyframe *current; + f32 frac; + f32 tangent; + coord3d posResult; + quatf qResult; + quatf q0; + quatf q1; + quatf q2; + quatf q3; + s32 i; -#ifdef NONMATCHING -void sub_GAME_7F05C6FC(void) { - fStack0000001c = param_1; - local_90 = 1; - do + i = 1; + frac = keyframes[1].duration; + current = keyframes + i; + + while (time >= current->duration) { - if (fStack0000001c < *(param_2 + local_90 * 0x24 + 0x20)) break; - fStack0000001c = fStack0000001c - *(param_2 + local_90 * 0x24 + 0x20); - iVar6 = local_90 + 1; - iVar2 = local_90 + 3; - local_90 = iVar6; - } while ((*(param_2 + iVar2 * 0x24) & 1) == 0); - iStack00000014 = param_2; - pfStack00000024 = param_4; - iStack0000002c = param_5; - if ((*(param_2 + (local_90 + 2) * 0x24) & 1) == 0) - { - fVar3 = fStack0000001c / *(param_2 + local_90 * 0x24 + 0x20); - fVar1 = *(param_2 + local_90 * 0x24 + 0x1c); - Function_8237C1C0(param_2 + (local_90 + -1) * 0x24 + 0x10, afStack_30); - Function_8237C1C0(iStack00000014 + local_90 * 0x24 + 0x10, afStack_50); - Function_8237C1C0(iStack00000014 + (local_90 + 1) * 0x24 + 0x10, afStack_80); - Function_8237C1C0(iStack00000014 + (local_90 + 2) * 0x24 + 0x10, afStack_40); - Function_8237D298(afStack_50, afStack_80); - Function_8237D298(afStack_80, afStack_40); - Function_8237D298(afStack_50, afStack_30); - lVar5 = ZEXT48(&stack0x00000000) - 0x70; - Function_8237DA60(fVar3, afStack_30, afStack_50, afStack_80, afStack_40, param_6, lVar5); - Function_82376408(fVar3, fVar1, iStack00000014 + (local_90 + -1) * 0x24 + 4, iStack00000014 + local_90 * 0x24 + 4, iStack00000014 + (local_90 + 1) * 0x24 + 4, iStack00000014 + (local_90 + 2) * 0x24 + 4, param_6, lVar5, local_18); - if (iStack0000002c == 1) + time -= current->duration; + i++; + current++; + + if (current[2].isFinalKey & 1) { - local_18[0] = -local_18[0]; + break; } - Function_8237C548(&local_70, pfStack00000024); - matrix_4x4_set_position(local_18, pfStack00000024); - uVar4 = 1; } - else + + // Comma operator is intentional: nudges IDO to emit addu s0,a0,t8. + current = (0, keyframes) + i; + + i = 2; + + if (current[i].isFinalKey & 1) { - matrix_4x4_set_rotation_around_xyz(param_2 + local_90 * 0x24 + 0x10, param_4); - matrix_4x4_set_position(iStack00000014 + local_90 * 0x24 + 4, pfStack00000024); - uVar4 = 0; + matrix_4x4_set_rotation_around_xyz(¤t->rot, matrix); + matrix_4x4_set_position(¤t->pos, matrix); + return 0; } - return uVar4; + + frac = time / current->duration; + tangent = current->interpParam; + + quaternion_set_rotation_around_xyzf(¤t[-1].rot, &q0); + quaternion_set_rotation_around_xyzf(¤t->rot, &q1); + quaternion_set_rotation_around_xyzf(¤t[1].rot, &q2); + quaternion_set_rotation_around_xyzf(¤t[2].rot, &q3); + + quaternion_ensure_shortest_path(&q1, &q2); + quaternion_ensure_shortest_path(&q2, &q3); + quaternion_ensure_shortest_path(&q1, &q0); + + quaternion_7F05C2F0(&q0, &q1, &q2, &q3, frac, &qResult); + + coord3dCubicSplineInterp(¤t[-1].pos, ¤t->pos, ¤t[1].pos, ¤t[2].pos, frac, tangent, &posResult); + + if (hand == GUNLEFT) + { + posResult.x = -posResult.x; + qResult[0] = -qResult[0]; + qResult[1] = -qResult[1]; + } + + quaternion_to_matrix(&qResult, matrix); + matrix_4x4_set_position(&posResult, matrix); + + return 1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F05C6FC -/* 09122C 7F05C6FC 27BDFF60 */ addiu $sp, $sp, -0xa0 -/* 091230 7F05C700 AFBF002C */ sw $ra, 0x2c($sp) -/* 091234 7F05C704 AFB00028 */ sw $s0, 0x28($sp) -/* 091238 7F05C708 AFA600A8 */ sw $a2, 0xa8($sp) -/* 09123C 7F05C70C AFA700AC */ sw $a3, 0xac($sp) -/* 091240 7F05C710 44856000 */ mtc1 $a1, $f12 -/* 091244 7F05C714 C4840044 */ lwc1 $f4, 0x44($a0) -/* 091248 7F05C718 24020001 */ li $v0, 1 -/* 09124C 7F05C71C 24900024 */ addiu $s0, $a0, 0x24 -/* 091250 7F05C720 460C203E */ c.le.s $f4, $f12 -/* 091254 7F05C724 00000000 */ nop -/* 091258 7F05C728 4502000E */ bc1fl .L7F05C764 -/* 09125C 7F05C72C 0002C0C0 */ sll $t8, $v0, 3 -/* 091260 7F05C730 C6000020 */ lwc1 $f0, 0x20($s0) -/* 091264 7F05C734 8E0E006C */ lw $t6, 0x6c($s0) -.L7F05C738: -/* 091268 7F05C738 46006301 */ sub.s $f12, $f12, $f0 -/* 09126C 7F05C73C 24420001 */ addiu $v0, $v0, 1 -/* 091270 7F05C740 31CF0001 */ andi $t7, $t6, 1 -/* 091274 7F05C744 15E00006 */ bnez $t7, .L7F05C760 -/* 091278 7F05C748 26100024 */ addiu $s0, $s0, 0x24 -/* 09127C 7F05C74C C6000020 */ lwc1 $f0, 0x20($s0) -/* 091280 7F05C750 460C003E */ c.le.s $f0, $f12 -/* 091284 7F05C754 00000000 */ nop -/* 091288 7F05C758 4503FFF7 */ bc1tl .L7F05C738 -/* 09128C 7F05C75C 8E0E006C */ lw $t6, 0x6c($s0) -.L7F05C760: -/* 091290 7F05C760 0002C0C0 */ sll $t8, $v0, 3 -.L7F05C764: -/* 091294 7F05C764 0302C021 */ addu $t8, $t8, $v0 -/* 091298 7F05C768 0018C080 */ sll $t8, $t8, 2 -/* 09129C 7F05C76C 00988021 */ addu $s0, $a0, $t8 -/* 0912A0 7F05C770 8E190048 */ lw $t9, 0x48($s0) -/* 0912A4 7F05C774 33280001 */ andi $t0, $t9, 1 -/* 0912A8 7F05C778 11000008 */ beqz $t0, .L7F05C79C -/* 0912AC 7F05C77C 26040010 */ addiu $a0, $s0, 0x10 -/* 0912B0 7F05C780 0FC161C5 */ jal matrix_4x4_set_rotation_around_xyz -/* 0912B4 7F05C784 8FA500A8 */ lw $a1, 0xa8($sp) -/* 0912B8 7F05C788 26040004 */ addiu $a0, $s0, 4 -/* 0912BC 7F05C78C 0FC16266 */ jal matrix_4x4_set_position -/* 0912C0 7F05C790 8FA500A8 */ lw $a1, 0xa8($sp) -/* 0912C4 7F05C794 10000042 */ b .L7F05C8A0 -/* 0912C8 7F05C798 00001025 */ move $v0, $zero -.L7F05C79C: -/* 0912CC 7F05C79C C6060020 */ lwc1 $f6, 0x20($s0) -/* 0912D0 7F05C7A0 2604FFEC */ addiu $a0, $s0, -0x14 -/* 0912D4 7F05C7A4 27A50068 */ addiu $a1, $sp, 0x68 -/* 0912D8 7F05C7A8 46066203 */ div.s $f8, $f12, $f6 -/* 0912DC 7F05C7AC E7A80098 */ swc1 $f8, 0x98($sp) -/* 0912E0 7F05C7B0 C60A001C */ lwc1 $f10, 0x1c($s0) -/* 0912E4 7F05C7B4 0FC16CFD */ jal quaternion_set_rotation_around_xyzf -/* 0912E8 7F05C7B8 E7AA0094 */ swc1 $f10, 0x94($sp) -/* 0912EC 7F05C7BC 26040010 */ addiu $a0, $s0, 0x10 -/* 0912F0 7F05C7C0 0FC16CFD */ jal quaternion_set_rotation_around_xyzf -/* 0912F4 7F05C7C4 27A50058 */ addiu $a1, $sp, 0x58 -/* 0912F8 7F05C7C8 26040034 */ addiu $a0, $s0, 0x34 -/* 0912FC 7F05C7CC 0FC16CFD */ jal quaternion_set_rotation_around_xyzf -/* 091300 7F05C7D0 27A50048 */ addiu $a1, $sp, 0x48 -/* 091304 7F05C7D4 26040058 */ addiu $a0, $s0, 0x58 -/* 091308 7F05C7D8 0FC16CFD */ jal quaternion_set_rotation_around_xyzf -/* 09130C 7F05C7DC 27A50038 */ addiu $a1, $sp, 0x38 -/* 091310 7F05C7E0 27A40058 */ addiu $a0, $sp, 0x58 -/* 091314 7F05C7E4 0FC16F84 */ jal quaternion_ensure_shortest_path -/* 091318 7F05C7E8 27A50048 */ addiu $a1, $sp, 0x48 -/* 09131C 7F05C7EC 27A40048 */ addiu $a0, $sp, 0x48 -/* 091320 7F05C7F0 0FC16F84 */ jal quaternion_ensure_shortest_path -/* 091324 7F05C7F4 27A50038 */ addiu $a1, $sp, 0x38 -/* 091328 7F05C7F8 27A40058 */ addiu $a0, $sp, 0x58 -/* 09132C 7F05C7FC 0FC16F84 */ jal quaternion_ensure_shortest_path -/* 091330 7F05C800 27A50068 */ addiu $a1, $sp, 0x68 -/* 091334 7F05C804 C7B00098 */ lwc1 $f16, 0x98($sp) -/* 091338 7F05C808 27A90078 */ addiu $t1, $sp, 0x78 -/* 09133C 7F05C80C AFA90014 */ sw $t1, 0x14($sp) -/* 091340 7F05C810 27A40068 */ addiu $a0, $sp, 0x68 -/* 091344 7F05C814 27A50058 */ addiu $a1, $sp, 0x58 -/* 091348 7F05C818 27A60048 */ addiu $a2, $sp, 0x48 -/* 09134C 7F05C81C 27A70038 */ addiu $a3, $sp, 0x38 -/* 091350 7F05C820 0FC170BC */ jal quaternion_7F05C2F0 -/* 091354 7F05C824 E7B00010 */ swc1 $f16, 0x10($sp) -/* 091358 7F05C828 C7B20098 */ lwc1 $f18, 0x98($sp) -/* 09135C 7F05C82C C7A40094 */ lwc1 $f4, 0x94($sp) -/* 091360 7F05C830 27AA0088 */ addiu $t2, $sp, 0x88 -/* 091364 7F05C834 AFAA0018 */ sw $t2, 0x18($sp) -/* 091368 7F05C838 2604FFE0 */ addiu $a0, $s0, -0x20 -/* 09136C 7F05C83C 26050004 */ addiu $a1, $s0, 4 -/* 091370 7F05C840 26060028 */ addiu $a2, $s0, 0x28 -/* 091374 7F05C844 2607004C */ addiu $a3, $s0, 0x4c -/* 091378 7F05C848 E7B20010 */ swc1 $f18, 0x10($sp) -/* 09137C 7F05C84C 0FC16C09 */ jal sub_GAME_7F05B024 -/* 091380 7F05C850 E7A40014 */ swc1 $f4, 0x14($sp) -/* 091384 7F05C854 8FAB00AC */ lw $t3, 0xac($sp) -/* 091388 7F05C858 24010001 */ li $at, 1 -/* 09138C 7F05C85C C7A60088 */ lwc1 $f6, 0x88($sp) -/* 091390 7F05C860 15610009 */ bne $t3, $at, .L7F05C888 -/* 091394 7F05C864 27A40078 */ addiu $a0, $sp, 0x78 -/* 091398 7F05C868 C7AA0078 */ lwc1 $f10, 0x78($sp) -/* 09139C 7F05C86C C7B2007C */ lwc1 $f18, 0x7c($sp) -/* 0913A0 7F05C870 46003207 */ neg.s $f8, $f6 -/* 0913A4 7F05C874 46005407 */ neg.s $f16, $f10 -/* 0913A8 7F05C878 46009107 */ neg.s $f4, $f18 -/* 0913AC 7F05C87C E7A80088 */ swc1 $f8, 0x88($sp) -/* 0913B0 7F05C880 E7B00078 */ swc1 $f16, 0x78($sp) -/* 0913B4 7F05C884 E7A4007C */ swc1 $f4, 0x7c($sp) -.L7F05C888: -/* 0913B8 7F05C888 0FC16D8A */ jal quaternion_to_matrix -/* 0913BC 7F05C88C 8FA500A8 */ lw $a1, 0xa8($sp) -/* 0913C0 7F05C890 27A40088 */ addiu $a0, $sp, 0x88 -/* 0913C4 7F05C894 0FC16266 */ jal matrix_4x4_set_position -/* 0913C8 7F05C898 8FA500A8 */ lw $a1, 0xa8($sp) -/* 0913CC 7F05C89C 24020001 */ li $v0, 1 -.L7F05C8A0: -/* 0913D0 7F05C8A0 8FBF002C */ lw $ra, 0x2c($sp) -/* 0913D4 7F05C8A4 8FB00028 */ lw $s0, 0x28($sp) -/* 0913D8 7F05C8A8 27BD00A0 */ addiu $sp, $sp, 0xa0 -/* 0913DC 7F05C8AC 03E00008 */ jr $ra -/* 0913E0 7F05C8B0 00000000 */ nop -) -#endif - - - -WeaponStats *get_ptr_item_statistics(ITEM_IDS item) { - if (gitem_structs[item].has_no_model == 0) { /* weapon has model, return stats struct */ +WeaponStats *get_ptr_item_statistics(ITEM_IDS item) +{ + if (gitem_structs[item].has_no_model == 0) + { /* weapon has model, return stats struct */ return gitem_structs[item].item_weapon_stats; } return &default_weaponstats; /* no model, return defaults */ @@ -931,7 +819,7 @@ u8 * getPlayerWeaponBufferForHand(GUNHAND hand) } -u32 getSizeBufferWeaponInHand(int hand) +u32 getSizeBufferWeaponInHand(s32 hand) { return size_item_buffer[hand]; } @@ -971,18 +859,20 @@ void place_item_in_hand_swap_and_make_visible(GUNHAND hand, ITEM_IDS item) } -char * get_ptr_item_text_call_line(ITEM_IDS item) +char *get_ptr_item_text_call_line(ITEM_IDS item) { - if (item == ITEM_FIST) { - item = g_CurrentPlayer->cur_item_weapon_getname; - } - return gitem_structs[item].item_file_name; + if (item == ITEM_FIST) + { + item = g_CurrentPlayer->cur_item_weapon_getname; + } + return gitem_structs[item].item_file_name; } -struct ModelFileHeader * get_ptr_weapon_model_header_line(ITEM_IDS weapon) + ModelFileHeader *get_ptr_weapon_model_header_line(ITEM_IDS weapon) { - if (weapon == ITEM_FIST) { + if (weapon == ITEM_FIST) + { weapon = g_CurrentPlayer->cur_item_weapon_getname; } return gitem_structs[weapon].item_header; @@ -995,50 +885,49 @@ int getCurrentWeaponOrItem(void) } -void used_to_load_1st_person_model_on_demand(enum GUNHAND hand) +void used_to_load_1st_person_model_on_demand(GUNHAND hand) { - u32 size_buffer_weapon; - s8* ptr_item_text; - ModelFileHeader* ptr_weapon_model; - u8* buffer_weapon; - enum ITEM_IDS field_2a44; + u32 size_buffer_weapon; + s8 *ptr_item_text; + ModelFileHeader *ptr_weapon_model; + u8 *buffer_weapon; + enum ITEM_IDS item; if ((g_CurrentPlayer->hand_invisible[hand] < 0) && (g_CurrentPlayer->lock_hand_model[hand] == 0)) { if ((g_CurrentPlayer->hand_invisible[hand] < -2) || (g_CurrentPlayer->hand_item[hand] == ITEM_UNARMED)) { - field_2a44 = g_CurrentPlayer->field_2A44[hand]; - ptr_item_text = (s8*)get_ptr_item_text_call_line(field_2a44); - ptr_weapon_model = get_ptr_weapon_model_header_line(field_2a44); + item = g_CurrentPlayer->field_2A44[hand]; + ptr_item_text = (s8 *)get_ptr_item_text_call_line(item); + ptr_weapon_model = get_ptr_weapon_model_header_line(item); if ((ptr_item_text != NULL) && (ptr_weapon_model != NULL)) { - buffer_weapon = getPlayerWeaponBufferForHand(hand); + buffer_weapon = getPlayerWeaponBufferForHand(hand); size_buffer_weapon = getSizeBufferWeaponInHand(hand); g_CurrentPlayer->copy_of_body_obj_header[hand] = *ptr_weapon_model; - if (field_2a44 == ITEM_SUIT_LF_HAND) + if (item == ITEM_SUIT_LF_HAND) { texInitPool(&g_CurrentPlayer->item_related[hand], buffer_weapon + 0xBD70, size_buffer_weapon + 0xFFFF4290); - load_object_fill_header(&g_CurrentPlayer->copy_of_body_obj_header[hand], (u8* ) ptr_item_text, buffer_weapon, 0xBD70, &g_CurrentPlayer->item_related[hand]); + load_object_fill_header(&g_CurrentPlayer->copy_of_body_obj_header[hand], (u8 *)ptr_item_text, buffer_weapon, 0xBD70, &g_CurrentPlayer->item_related[hand]); } - else if ((field_2a44 == ITEM_TRIGGER) || (field_2a44 == ITEM_WATCHLASER)) + else if ((item == ITEM_TRIGGER) || (item == ITEM_WATCHLASER)) { texInitPool(&g_CurrentPlayer->item_related[hand], buffer_weapon + 0xAFD0, size_buffer_weapon + 0xFFFF5030); - load_object_fill_header(&g_CurrentPlayer->copy_of_body_obj_header[hand], (u8* ) ptr_item_text, buffer_weapon, 0xAFD0, &g_CurrentPlayer->item_related[hand]); + load_object_fill_header(&g_CurrentPlayer->copy_of_body_obj_header[hand], (u8 *)ptr_item_text, buffer_weapon, 0xAFD0, &g_CurrentPlayer->item_related[hand]); } else { texInitPool(&g_CurrentPlayer->item_related[hand], &buffer_weapon[D_80032464[hand]], size_buffer_weapon - D_80032464[hand]); - load_object_fill_header(&g_CurrentPlayer->copy_of_body_obj_header[hand], (u8* ) ptr_item_text, buffer_weapon, D_80032464[hand], &g_CurrentPlayer->item_related[hand]); + load_object_fill_header(&g_CurrentPlayer->copy_of_body_obj_header[hand], (u8 *)ptr_item_text, buffer_weapon, D_80032464[hand], &g_CurrentPlayer->item_related[hand]); } } g_CurrentPlayer->hand_invisible[hand] = 1; - g_CurrentPlayer->hand_item[hand] = field_2a44; - g_CurrentPlayer->field_2A44[hand] = -1; - + g_CurrentPlayer->hand_item[hand] = item; + g_CurrentPlayer->field_2A44[hand] = -1; } else { @@ -1079,27 +968,33 @@ ITEM_IDS sub_GAME_7F05D334(ITEM_IDS item, s32 arg1) ITEM_IDS get_next_weapon_in_cycle_for_hand(GUNHAND hand, s32 direction) { - if (g_CurrentPlayer->hands[hand].when_detonating_mines_is_0 == 5) { + if (g_CurrentPlayer->hands[hand].weapon_action_state == GUN_ANIM_STATE_SWITCH_LOWER) + { if ( (direction < 0 && (g_CurrentPlayer->hands[hand].field_8B8 > 0)) || - (direction > 0 && (g_CurrentPlayer->hands[hand].field_8B8 < 0)) ) { + (direction > 0 && (g_CurrentPlayer->hands[hand].field_8B8 < 0)) ) + { return getCurrentPlayerWeaponId(hand); } - else { + else + { return g_CurrentPlayer->hands[hand].weapon_next_weapon; } } - if (g_CurrentPlayer->hands[hand].when_detonating_mines_is_0 == 6) { + + if (g_CurrentPlayer->hands[hand].weapon_action_state == GUN_ANIM_STATE_SWITCH_SWAP) + { return g_CurrentPlayer->hands[hand].weapon_next_weapon; } + return getCurrentPlayerWeaponId(hand); } -void likely_change_weapon_in_hand(enum GUNHAND hand, s32 arg1, s32 arg2) +void gunRequestHandWeaponChange(enum GUNHAND hand, s32 nextWeapon, s32 cycleDirection) { - if ((g_CurrentPlayer->hands[hand].when_detonating_mines_is_0 == 5) || (g_CurrentPlayer->hands[hand].when_detonating_mines_is_0 == 6)) + if ((g_CurrentPlayer->hands[hand].weapon_action_state == GUN_ANIM_STATE_SWITCH_LOWER) || (g_CurrentPlayer->hands[hand].weapon_action_state == GUN_ANIM_STATE_SWITCH_SWAP)) { g_CurrentPlayer->hands[hand].field_8B0 = g_CurrentPlayer->hands[hand].field_890; @@ -1116,18 +1011,18 @@ void likely_change_weapon_in_hand(enum GUNHAND hand, s32 arg1, s32 arg2) g_CurrentPlayer->hands[hand].field_8B0 += 0xD; } #endif - } - if (get_next_weapon_in_cycle_for_hand(hand, 0) != arg1) + if (get_next_weapon_in_cycle_for_hand(hand, 0) != nextWeapon) { - if ((g_CurrentPlayer->hands[hand].when_detonating_mines_is_0 != 5) && (g_CurrentPlayer->hands[hand].when_detonating_mines_is_0 != 6)) + if ((g_CurrentPlayer->hands[hand].weapon_action_state != GUN_ANIM_STATE_SWITCH_LOWER) && (g_CurrentPlayer->hands[hand].weapon_action_state != GUN_ANIM_STATE_SWITCH_SWAP)) { g_CurrentPlayer->hands[hand].weapon_current_animation = 5; } - g_CurrentPlayer->hands[hand].weapon_next_weapon = arg1; + + g_CurrentPlayer->hands[hand].weapon_next_weapon = nextWeapon; g_CurrentPlayer->hands[hand].weapon_animation_trigger = 1; - g_CurrentPlayer->hands[hand].field_8B8 = arg2; + g_CurrentPlayer->hands[hand].field_8B8 = cycleDirection; } } @@ -1135,14 +1030,14 @@ void likely_change_weapon_in_hand(enum GUNHAND hand, s32 arg1, s32 arg2) // Unused void sub_GAME_7F05D610(GUNHAND hand) { - likely_change_weapon_in_hand(hand, sub_GAME_7F05D334(get_next_weapon_in_cycle_for_hand(hand, 0), 1), 0); + gunRequestHandWeaponChange(hand, sub_GAME_7F05D334(get_next_weapon_in_cycle_for_hand(hand, 0), 1), 0); } // Unused void sub_GAME_7F05D650(GUNHAND hand) { - likely_change_weapon_in_hand(hand, sub_GAME_7F05D334(get_next_weapon_in_cycle_for_hand(hand, 0), -1), 0); + gunRequestHandWeaponChange(hand, sub_GAME_7F05D334(get_next_weapon_in_cycle_for_hand(hand, 0), -1), 0); } @@ -1171,8 +1066,8 @@ void advance_through_inventory(void) bondinvCycleForward(&nextright, &nextleft, FALSE); } - likely_change_weapon_in_hand(GUNRIGHT, nextright, 1); - likely_change_weapon_in_hand(GUNLEFT, nextleft, 1); + gunRequestHandWeaponChange(GUNRIGHT, nextright, 1); + gunRequestHandWeaponChange(GUNLEFT, nextleft, 1); } @@ -1194,8 +1089,8 @@ void backstep_through_inventory(void) bondinvCycleBackward(&nextright, &nextleft, FALSE); } - likely_change_weapon_in_hand(GUNRIGHT, nextright, -1); - likely_change_weapon_in_hand(GUNLEFT, nextleft, -1); + gunRequestHandWeaponChange(GUNRIGHT, nextright, -1); + gunRequestHandWeaponChange(GUNLEFT, nextleft, -1); } void autoadvance_on_deplete_all_ammo(void) @@ -1233,8 +1128,8 @@ void autoadvance_on_deplete_all_ammo(void) } } - likely_change_weapon_in_hand(GUNRIGHT, duperight, 1); - likely_change_weapon_in_hand(GUNLEFT, dupeleft, 1); + gunRequestHandWeaponChange(GUNRIGHT, duperight, 1); + gunRequestHandWeaponChange(GUNLEFT, dupeleft, 1); } s32 currentPlayerEquipWeaponWrapper(GUNHAND hand, s32 next_weapon) { @@ -1394,7 +1289,7 @@ void camera_sniper_zoom_in(f32 zoom) } } -f32 bondwalkItemGetDestructionAmount(ITEM_IDS item) +f32 gunItemGetDestructionAmount(ITEM_IDS item) { return get_ptr_item_statistics(item)->DestructionAmount; } @@ -1571,8 +1466,8 @@ void gunSetBondWeaponSway(f32 breathing, f32 arg1, f32 arg2, f32 arg3) void gunSetOffsetRelated(f32 param_1) { - g_CurrentPlayer->hands[GUNRIGHT].field_A30 = (1.0f - cosf(param_1)) * 5.0f; - g_CurrentPlayer->hands[GUNLEFT].field_A30 = (1.0f - cosf(param_1)) * 5.0f; + g_CurrentPlayer->hands[GUNRIGHT].gunofs2_z = (1.0f - cosf(param_1)) * 5.0f; + g_CurrentPlayer->hands[GUNLEFT].gunofs2_z = (1.0f - cosf(param_1)) * 5.0f; } @@ -1722,7 +1617,7 @@ void sub_GAME_7F05EA94(Model* model, s32 val) /** * Address 0x7F05EB0C. */ -void sub_GAME_7F05EB0C(ObjectRecord *obj, coord3d *pos, StandTile *stan, Mtxf *matrix, coord3d *arg4, Mtxf *arg5, PropRecord *arg6) +void gunInitProjectileObject(ObjectRecord *obj, coord3d *pos, StandTile *stan, Mtxf *matrix, coord3d *velocity, Mtxf *arg5, PropRecord *owner) { PropRecord *temp_s1; Projectile *temp_v0; @@ -1742,16 +1637,16 @@ void sub_GAME_7F05EB0C(ObjectRecord *obj, coord3d *pos, StandTile *stan, Mtxf *m chrobjCollisionRelated(obj); sub_GAME_7F03FDA8(temp_s1); - if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) + if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) { temp_v0 = obj->projectile; temp_v0->flags |= 0x41; - obj->projectile->ownerprop = arg6; + obj->projectile->ownerprop = owner; projectileSetSticky(temp_s1); matrix_4x4_copy(arg5, &obj->projectile->mtx); - obj->projectile->speed.f[0] = arg4->f[0]; - obj->projectile->speed.f[1] = arg4->f[1]; - obj->projectile->speed.f[2] = arg4->f[2]; + obj->projectile->speed.f[0] = velocity->f[0]; + obj->projectile->speed.f[1] = velocity->f[1]; + obj->projectile->speed.f[2] = velocity->f[2]; obj->projectile->obj = obj; obj->projectile->unkE8 = D_80048380; } @@ -1759,244 +1654,89 @@ void sub_GAME_7F05EB0C(ObjectRecord *obj, coord3d *pos, StandTile *stan, Mtxf *m } - - - -#ifdef NONMATCHING -void sub_GAME_7F05EC1C(void) +/** + * Address: 7F05EC1C + * + * Determines where the projectile may safely enter the world. Ideally that is the targetpos position, but if targetpos + * is obstructed the player's position used as a fallback. This prevents the player from launching + * projectiles through nearby surfaces. + */ +void gunInitProjectileFromPlayer(ObjectRecord *obj, coord3d *targetpos, Mtxf *arg2, coord3d *velocity, Mtxf *arg4) { - f32 spD0; - f32 spCC; - f32 spC8; - s32 spC4; - f32 spB8; - f32 spB4; - s32 spB0; - s8 spA9; - s8 spA8; - ? sp54; - ? sp50; - f32 temp_f0; - f32 temp_f14; - void *temp_s0; - f32 phi_f16; - f32 phi_f14; - s32 phi_return; + PropRecord *playerprop; + coord3d pos; + StandTile *tile; + u32 pad_c[2]; + f32 yhi; + f32 ylo; + s32 usedfallback; + f32 stanheight; + u8 rooms[2]; + s32 pad_rooms; + u8 pad_a[0x4c]; + s32 sp54; + s32 sp50; + s32 pad_sp; - phi_return = arg0->unk10; - if (arg0->unk10 != 0) - { - temp_s0 = get_curplayer_positiondata(); - temp_f0 = sub_GAME_7F089778(pPlayer); - spB0 = 0; - if (arg1->unk4 < temp_s0->unkC) - { - phi_f16 = arg1->unk4 - temp_f0; - phi_f14 = temp_s0->unkC - temp_f0; - } - else - { - phi_f16 = temp_s0->unkC - temp_f0; - phi_f14 = arg1->unk4 - temp_f0; - } - spB4 = phi_f16; - spB8 = phi_f14; - spC4 = temp_s0->unk14; - bondviewUpdateGuardTankFlagsRelated(temp_s0->unkC, phi_f14, temp_s0, 0); - temp_f14 = phi_f14; - if (stanTestLineUnobstructed(temp_f14, - &spC4, - temp_s0->unk8, - temp_s0->unk10, - arg1->unk0, - arg1->unk8, - CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, - temp_f14, - phi_f16, - 0.0f, - 1.0f) != 0) - { - spC8 = (bitwise f32)arg1->unk0; - spCC = arg1->unk4; - spD0 = arg1->unk8; - } - else - { - spC4 = temp_s0->unk14; - spC8 = (bitwise f32)temp_s0->unk8; - spCC = temp_s0->unkC; - spB0 = 1; - spD0 = (bitwise f32)temp_s0->unk10; - } - bondviewUpdateGuardTankFlagsRelated(temp_s0, 1); - phi_return = - sub_GAME_7F05EB0C(arg0, &spC8, spC4, arg2, arg3, arg4, temp_s0); - if ((arg0->unk64 & 0x80) != 0) - { - if (spB0 != 0) - { - arg0->unk6C->unk0 = (s32)(arg0->unk6C->unk0 | 0x100); - arg0->unk6C->unkD4 = (bitwise f32)arg1->unk0; - arg0->unk6C->unkD8 = (f32)arg1->unk4; - arg0->unk6C->unkDC = (f32)arg1->unk8; - } - spA8 = get_cur_players_room(); - spA9 = (u8)0xFF; - phi_return = sub_GAME_7F0B4AB4(get_BONDdata_position3(), - &spC8, - &spA8, - arg0->unk6C + 0xCC, - &sp54, - &sp50, - 0x14); - } + // fake + if (obj->prop); + if (obj->prop == NULL) { + return; + } + + playerprop = getCurrentPlayerProp(); + stanheight = bondviewGetPlayerStanHeight(g_CurrentPlayer); + + usedfallback = 0; + + if (targetpos->y < playerprop->pos.y) { + yhi = playerprop->pos.y - stanheight; + ylo = targetpos->y - stanheight; + } + else + { + yhi = targetpos->y - stanheight; + ylo = playerprop->pos.y - stanheight; + } + + tile = playerprop->stan; + bondviewUpdateGuardTankFlagsRelated(playerprop, 0); + + // If there is no obstruction, spawn the projectile at the target position. + if (stanTestLineUnobstructed(&tile, playerprop->pos.x, playerprop->pos.z, targetpos->x, targetpos->z, 0x1f, yhi, ylo, 0.0f, 1.0f)) + { + pos.x = targetpos->x; + pos.y = targetpos->y; + pos.z = targetpos->z; + } + // Otherwise spawn it from the player's position. + else + { + tile = playerprop->stan; + pos.x = playerprop->pos.x; + pos.y = playerprop->pos.y; + pos.z = playerprop->pos.z; + usedfallback = 1; + } + + bondviewUpdateGuardTankFlagsRelated(playerprop, 1); + + gunInitProjectileObject(obj, &pos, tile, arg2, velocity, arg4, playerprop); + + if (obj->runtime_bitflags & 0x80) { + if (usedfallback) { + obj->projectile->flags |= PROJECTILEFLAG_00000100; + ((coord3d *)&obj->projectile->unkd4)->x = targetpos->x; + ((coord3d *)&obj->projectile->unkd4)->y = targetpos->y; + ((coord3d *)&obj->projectile->unkd4)->z = targetpos->z; + } + + rooms[0] = bondviewGetCurrentPlayersRoom(); + rooms[1] = 0xff; + + bgFindRoomsAlongSegment(bondviewGetCurrentPlayersPosition3(), &pos, rooms, obj->projectile->unkCC, &sp54, &sp50, 0x14); } - return phi_return; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F05EC1C -/* 09374C 7F05EC1C 27BDFF28 */ addiu $sp, $sp, -0xd8 -/* 093750 7F05EC20 AFBF003C */ sw $ra, 0x3c($sp) -/* 093754 7F05EC24 AFB20038 */ sw $s2, 0x38($sp) -/* 093758 7F05EC28 AFB10034 */ sw $s1, 0x34($sp) -/* 09375C 7F05EC2C AFB00030 */ sw $s0, 0x30($sp) -/* 093760 7F05EC30 AFA600E0 */ sw $a2, 0xe0($sp) -/* 093764 7F05EC34 AFA700E4 */ sw $a3, 0xe4($sp) -/* 093768 7F05EC38 8C820010 */ lw $v0, 0x10($a0) -/* 09376C 7F05EC3C 00A08825 */ move $s1, $a1 -/* 093770 7F05EC40 00809025 */ move $s2, $a0 -/* 093774 7F05EC44 50400072 */ beql $v0, $zero, .L7F05EE10 -/* 093778 7F05EC48 8FBF003C */ lw $ra, 0x3c($sp) -/* 09377C 7F05EC4C 0FC225E6 */ jal get_curplayer_positiondata -/* 093780 7F05EC50 00000000 */ nop -/* 093784 7F05EC54 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 093788 7F05EC58 00408025 */ move $s0, $v0 -/* 09378C 7F05EC5C 0FC225DE */ jal bondviewGetPlayerStanHeight -/* 093790 7F05EC60 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 093794 7F05EC64 AFA000B0 */ sw $zero, 0xb0($sp) -/* 093798 7F05EC68 C60C000C */ lwc1 $f12, 0xc($s0) -/* 09379C 7F05EC6C C6220004 */ lwc1 $f2, 4($s1) -/* 0937A0 7F05EC70 02002025 */ move $a0, $s0 -/* 0937A4 7F05EC74 00002825 */ move $a1, $zero -/* 0937A8 7F05EC78 460C103C */ c.lt.s $f2, $f12 -/* 0937AC 7F05EC7C 00000000 */ nop -/* 0937B0 7F05EC80 45020005 */ bc1fl .L7F05EC98 -/* 0937B4 7F05EC84 46001381 */ sub.s $f14, $f2, $f0 -/* 0937B8 7F05EC88 46006381 */ sub.s $f14, $f12, $f0 -/* 0937BC 7F05EC8C 10000003 */ b .L7F05EC9C -/* 0937C0 7F05EC90 46001401 */ sub.s $f16, $f2, $f0 -/* 0937C4 7F05EC94 46001381 */ sub.s $f14, $f2, $f0 -.L7F05EC98: -/* 0937C8 7F05EC98 46006401 */ sub.s $f16, $f12, $f0 -.L7F05EC9C: -/* 0937CC 7F05EC9C 8E0E0014 */ lw $t6, 0x14($s0) -/* 0937D0 7F05ECA0 E7B000B4 */ swc1 $f16, 0xb4($sp) -/* 0937D4 7F05ECA4 E7AE00B8 */ swc1 $f14, 0xb8($sp) -/* 0937D8 7F05ECA8 0FC2280F */ jal bondviewUpdateGuardTankFlagsRelated -/* 0937DC 7F05ECAC AFAE00C4 */ sw $t6, 0xc4($sp) -/* 0937E0 7F05ECB0 C6240008 */ lwc1 $f4, 8($s1) -/* 0937E4 7F05ECB4 8E050008 */ lw $a1, 8($s0) -/* 0937E8 7F05ECB8 8E060010 */ lw $a2, 0x10($s0) -/* 0937EC 7F05ECBC 8E270000 */ lw $a3, ($s1) -/* 0937F0 7F05ECC0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0937F4 7F05ECC4 C7AE00B8 */ lwc1 $f14, 0xb8($sp) -/* 0937F8 7F05ECC8 C7B000B4 */ lwc1 $f16, 0xb4($sp) -/* 0937FC 7F05ECCC 44814000 */ mtc1 $at, $f8 -/* 093800 7F05ECD0 44803000 */ mtc1 $zero, $f6 -/* 093804 7F05ECD4 240F001F */ li $t7, 31 -/* 093808 7F05ECD8 AFAF0014 */ sw $t7, 0x14($sp) -/* 09380C 7F05ECDC 27A400C4 */ addiu $a0, $sp, 0xc4 -/* 093810 7F05ECE0 E7A40010 */ swc1 $f4, 0x10($sp) -/* 093814 7F05ECE4 E7AE0018 */ swc1 $f14, 0x18($sp) -/* 093818 7F05ECE8 E7B0001C */ swc1 $f16, 0x1c($sp) -/* 09381C 7F05ECEC E7A80024 */ swc1 $f8, 0x24($sp) -/* 093820 7F05ECF0 0FC2C389 */ jal stanTestLineUnobstructed -/* 093824 7F05ECF4 E7A60020 */ swc1 $f6, 0x20($sp) -/* 093828 7F05ECF8 10400008 */ beqz $v0, .L7F05ED1C -/* 09382C 7F05ECFC 02002025 */ move $a0, $s0 -/* 093830 7F05ED00 C62A0000 */ lwc1 $f10, ($s1) -/* 093834 7F05ED04 E7AA00C8 */ swc1 $f10, 0xc8($sp) -/* 093838 7F05ED08 C6320004 */ lwc1 $f18, 4($s1) -/* 09383C 7F05ED0C E7B200CC */ swc1 $f18, 0xcc($sp) -/* 093840 7F05ED10 C6240008 */ lwc1 $f4, 8($s1) -/* 093844 7F05ED14 1000000B */ b .L7F05ED44 -/* 093848 7F05ED18 E7A400D0 */ swc1 $f4, 0xd0($sp) -.L7F05ED1C: -/* 09384C 7F05ED1C 8E180014 */ lw $t8, 0x14($s0) -/* 093850 7F05ED20 24190001 */ li $t9, 1 -/* 093854 7F05ED24 AFB800C4 */ sw $t8, 0xc4($sp) -/* 093858 7F05ED28 C6060008 */ lwc1 $f6, 8($s0) -/* 09385C 7F05ED2C E7A600C8 */ swc1 $f6, 0xc8($sp) -/* 093860 7F05ED30 C608000C */ lwc1 $f8, 0xc($s0) -/* 093864 7F05ED34 E7A800CC */ swc1 $f8, 0xcc($sp) -/* 093868 7F05ED38 C60A0010 */ lwc1 $f10, 0x10($s0) -/* 09386C 7F05ED3C AFB900B0 */ sw $t9, 0xb0($sp) -/* 093870 7F05ED40 E7AA00D0 */ swc1 $f10, 0xd0($sp) -.L7F05ED44: -/* 093874 7F05ED44 0FC2280F */ jal bondviewUpdateGuardTankFlagsRelated -/* 093878 7F05ED48 24050001 */ li $a1, 1 -/* 09387C 7F05ED4C 8FA800E4 */ lw $t0, 0xe4($sp) -/* 093880 7F05ED50 8FA900E8 */ lw $t1, 0xe8($sp) -/* 093884 7F05ED54 02402025 */ move $a0, $s2 -/* 093888 7F05ED58 27A500C8 */ addiu $a1, $sp, 0xc8 -/* 09388C 7F05ED5C 8FA600C4 */ lw $a2, 0xc4($sp) -/* 093890 7F05ED60 8FA700E0 */ lw $a3, 0xe0($sp) -/* 093894 7F05ED64 AFB00018 */ sw $s0, 0x18($sp) -/* 093898 7F05ED68 AFA80010 */ sw $t0, 0x10($sp) -/* 09389C 7F05ED6C 0FC17AC3 */ jal sub_GAME_7F05EB0C -/* 0938A0 7F05ED70 AFA90014 */ sw $t1, 0x14($sp) -/* 0938A4 7F05ED74 8E4A0064 */ lw $t2, 0x64($s2) -/* 0938A8 7F05ED78 8FAC00B0 */ lw $t4, 0xb0($sp) -/* 0938AC 7F05ED7C 314B0080 */ andi $t3, $t2, 0x80 -/* 0938B0 7F05ED80 51600023 */ beql $t3, $zero, .L7F05EE10 -/* 0938B4 7F05ED84 8FBF003C */ lw $ra, 0x3c($sp) -/* 0938B8 7F05ED88 1180000E */ beqz $t4, .L7F05EDC4 -/* 0938BC 7F05ED8C 00000000 */ nop -/* 0938C0 7F05ED90 8E42006C */ lw $v0, 0x6c($s2) -/* 0938C4 7F05ED94 8C4D0000 */ lw $t5, ($v0) -/* 0938C8 7F05ED98 35AE0100 */ ori $t6, $t5, 0x100 -/* 0938CC 7F05ED9C AC4E0000 */ sw $t6, ($v0) -/* 0938D0 7F05EDA0 8E4F006C */ lw $t7, 0x6c($s2) -/* 0938D4 7F05EDA4 C6320000 */ lwc1 $f18, ($s1) -/* 0938D8 7F05EDA8 E5F200D4 */ swc1 $f18, 0xd4($t7) -/* 0938DC 7F05EDAC 8E58006C */ lw $t8, 0x6c($s2) -/* 0938E0 7F05EDB0 C6240004 */ lwc1 $f4, 4($s1) -/* 0938E4 7F05EDB4 E70400D8 */ swc1 $f4, 0xd8($t8) -/* 0938E8 7F05EDB8 8E59006C */ lw $t9, 0x6c($s2) -/* 0938EC 7F05EDBC C6260008 */ lwc1 $f6, 8($s1) -/* 0938F0 7F05EDC0 E72600DC */ swc1 $f6, 0xdc($t9) -.L7F05EDC4: -/* 0938F4 7F05EDC4 0FC227E6 */ jal bondviewGetCurrentPlayersRoom -/* 0938F8 7F05EDC8 00000000 */ nop -/* 0938FC 7F05EDCC 240800FF */ li $t0, 255 -/* 093900 7F05EDD0 A3A200A8 */ sb $v0, 0xa8($sp) -/* 093904 7F05EDD4 0FC22800 */ jal bondviewGetCurrentPlayersPosition3 -/* 093908 7F05EDD8 A3A800A9 */ sb $t0, 0xa9($sp) -/* 09390C 7F05EDDC 8E47006C */ lw $a3, 0x6c($s2) -/* 093910 7F05EDE0 27A90054 */ addiu $t1, $sp, 0x54 -/* 093914 7F05EDE4 27AA0050 */ addiu $t2, $sp, 0x50 -/* 093918 7F05EDE8 240B0014 */ li $t3, 20 -/* 09391C 7F05EDEC AFAB0018 */ sw $t3, 0x18($sp) -/* 093920 7F05EDF0 AFAA0014 */ sw $t2, 0x14($sp) -/* 093924 7F05EDF4 AFA90010 */ sw $t1, 0x10($sp) -/* 093928 7F05EDF8 00402025 */ move $a0, $v0 -/* 09392C 7F05EDFC 27A500C8 */ addiu $a1, $sp, 0xc8 -/* 093930 7F05EE00 27A600A8 */ addiu $a2, $sp, 0xa8 -/* 093934 7F05EE04 0FC2D2AD */ jal sub_GAME_7F0B4AB4 -/* 093938 7F05EE08 24E700CC */ addiu $a3, $a3, 0xcc -/* 09393C 7F05EE0C 8FBF003C */ lw $ra, 0x3c($sp) -.L7F05EE10: -/* 093940 7F05EE10 8FB00030 */ lw $s0, 0x30($sp) -/* 093944 7F05EE14 8FB10034 */ lw $s1, 0x34($sp) -/* 093948 7F05EE18 8FB20038 */ lw $s2, 0x38($sp) -/* 09394C 7F05EE1C 03E00008 */ jr $ra -/* 093950 7F05EE20 27BD00D8 */ addiu $sp, $sp, 0xd8 -) -#endif - - /** @@ -2025,13 +1765,13 @@ void generate_player_thrown_grenade(s32 hand) wor = NULL; base_velocity = 16.666666f; - player_prop = get_curplayer_positiondata(); - bondprevpos = get_BONDdata_field408(); + player_prop = getCurrentPlayerProp(); + bondprevpos = getCurrentPlayerPrevPos(); current_weapon = getCurrentPlayerWeaponId(hand); sub_GAME_7F057C14(&throw_speed_vec, &spFC); bullet_path_from_screen_center(&sp94, &base_speed_vec, hand); - mtx4RotateVecInPlace(currentPlayerGetMatrix10D4(), (f32*)&base_speed_vec); + mtx4RotateVecInPlace(currentPlayerGetViewToWorldMtxf(), (f32*)&base_speed_vec); throw_speed_vec.f[0] = (base_speed_vec.f[0] * base_velocity); throw_speed_vec.f[1] = (base_speed_vec.f[1] * base_velocity) + 5.0f; @@ -2069,9 +1809,9 @@ void generate_player_thrown_grenade(s32 hand) wor->runtime_bitflags &= ~(RUNTIMEBITFLAG_OWNER); wor->runtime_bitflags |= get_cur_playernum() << RUNTIMEBITSHIFT_OWNER; - sub_GAME_7F05EC1C(wor, &spE0, &spA0_a, &throw_speed_vec, &spFC); + gunInitProjectileFromPlayer(wor, &spE0, &spA0_a, &throw_speed_vec, &spFC); - if ((wor->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) != 0) + if ((wor->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) != 0) { wor->projectile->flags = (s32) (wor->projectile->flags | 2); @@ -2113,12 +1853,12 @@ void generate_player_thrown_knife(s32 hand) wor = NULL; base_velocity = 25.0f; - player_prop = get_curplayer_positiondata(); - bondprevpos = get_BONDdata_field408(); + player_prop = getCurrentPlayerProp(); + bondprevpos = getCurrentPlayerPrevPos(); sub_GAME_7F057C14(&throw_speed_vec, &spFC); bullet_path_from_screen_center(&sp94, &base_speed_vec, hand); - mtx4RotateVecInPlace(currentPlayerGetMatrix10D4(), (f32*)&base_speed_vec); + mtx4RotateVecInPlace(currentPlayerGetViewToWorldMtxf(), (f32*)&base_speed_vec); throw_speed_vec.f[0] = (base_speed_vec.f[0] * base_velocity); throw_speed_vec.f[1] = (base_speed_vec.f[1] * base_velocity) + 5.0f; @@ -2154,9 +1894,9 @@ void generate_player_thrown_knife(s32 hand) wor->runtime_bitflags &= ~(RUNTIMEBITFLAG_OWNER); wor->runtime_bitflags |= get_cur_playernum() << RUNTIMEBITSHIFT_OWNER; - sub_GAME_7F05EC1C(wor, &spE0, &spA0_a, &throw_speed_vec, &spFC); + gunInitProjectileFromPlayer(wor, &spE0, &spA0_a, &throw_speed_vec, &spFC); - if ((wor->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) != 0) + if ((wor->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) != 0) { wor->projectile->flags = (s32) (wor->projectile->flags | 2); @@ -2166,7 +1906,7 @@ void generate_player_thrown_knife(s32 hand) wor->runtime_bitflags |= RUNTIMEBITFLAG_THROWING_KNIFE_RELATED; } - sub_GAME_7F043650(wor); + objUpdateThrowKnifeSound(wor); } } @@ -2206,8 +1946,8 @@ void generate_player_thrown_object(s32 hand) wor = NULL; base_velocity = 16.666666f; - player_prop = get_curplayer_positiondata(); - bondprevpos = get_BONDdata_field408(); + player_prop = getCurrentPlayerProp(); + bondprevpos = getCurrentPlayerPrevPos(); current_weapon = getCurrentPlayerWeaponId(hand); if (current_weapon == ITEM_GOLDENEYEKEY) @@ -2217,7 +1957,7 @@ void generate_player_thrown_object(s32 hand) sub_GAME_7F057C14(&throw_speed_vec, &unk_mtxf); bullet_path_from_screen_center(&sp94, &base_speed_vec, hand); - mtx4RotateVecInPlace(currentPlayerGetMatrix10D4(), (f32*)&base_speed_vec); + mtx4RotateVecInPlace(currentPlayerGetViewToWorldMtxf(), (f32*)&base_speed_vec); throw_speed_vec.f[0] = (base_speed_vec.f[0] * base_velocity); throw_speed_vec.f[1] = (base_speed_vec.f[1] * base_velocity) + 5.0f; @@ -2354,9 +2094,9 @@ void generate_player_thrown_object(s32 hand) wor->runtime_bitflags &= ~(RUNTIMEBITFLAG_OWNER); wor->runtime_bitflags |= get_cur_playernum() << RUNTIMEBITSHIFT_OWNER; - sub_GAME_7F05EC1C(wor, &spE0, &spA0_a, &throw_speed_vec, &unk_mtxf); + gunInitProjectileFromPlayer(wor, &spE0, &spA0_a, &throw_speed_vec, &unk_mtxf); - if ((wor->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) != 0) + if ((wor->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) != 0) { wor->projectile->flags = (s32) (wor->projectile->flags | 2); @@ -2374,568 +2114,129 @@ void generate_player_thrown_object(s32 hand) } +/** + * Address: 7F05F73C + * + * Spawns Grenade Launcher rounds and makes them inherit the player's momentum. + */ +void gunSpawnGLGrenade(s32 handnum) +{ + WeaponObjRecord *grenadeobj; + struct hand *hand; + Mtxf identitymtx; + coord3d launchvel; + s32 pad; + Mtxf launchmtx; + coord3d aimpos; + coord3d aimdir; + PropRecord *playerprop; + coord3d *prevplayerpos; + hand = &g_CurrentPlayer->hands[handnum]; -#ifdef NONMATCHING -void sub_GAME_7F05F73C(void) { - struct WeaponObjRecord *wor; - f32 base_velocity; - base_velocity = 33.333332f; - wor = NULL; + playerprop = getCurrentPlayerProp(); + prevplayerpos = getCurrentPlayerPrevPos(); - player_prop = get_curplayer_positiondata(); - bondprevpos = get_BONDdata_field408(); + matrix_4x4_set_identity(&identitymtx); + bullet_path_from_screen_center(&aimpos, &aimdir, handnum); + mtx4RotateVecInPlace(currentPlayerGetViewToWorldMtxf(), &aimdir); - sub_GAME_7F057C14(&throw_speed_vec, &spFC); - bullet_path_from_screen_center(&sp94, &base_speed_vec, hand); - mtx4RotateVecInPlace(currentPlayerGetMatrix10D4(), (f32 *)&base_speed_vec); - - throw_speed_vec.f[0] = (base_speed_vec.f[0] * base_velocity); - throw_speed_vec.f[1] = (base_speed_vec.f[1] * base_velocity); - throw_speed_vec.f[2] = (base_speed_vec.f[2] * base_velocity); + launchvel.x = aimdir.x * 33.333332f; + launchvel.y = aimdir.y * 33.333332f; + launchvel.z = aimdir.z * 33.333332f; if (g_ClockTimer > 0) { - throw_speed_vec.f[0] = ((player_prop->pos.f[0] - bondprevpos->f[0]) / g_GlobalTimerDelta) + throw_speed_vec.f[0]; - throw_speed_vec.f[1] = ((player_prop->pos.f[1] - bondprevpos->f[1]) / g_GlobalTimerDelta) + throw_speed_vec.f[1]; - throw_speed_vec.f[2] = ((player_prop->pos.f[2] - bondprevpos->f[2]) / g_GlobalTimerDelta) + throw_speed_vec.f[2]; + launchvel.x += (playerprop->pos.x - prevplayerpos->x) / g_GlobalTimerDelta; + launchvel.y += (playerprop->pos.y - prevplayerpos->y) / g_GlobalTimerDelta; + launchvel.z += (playerprop->pos.z - prevplayerpos->z) / g_GlobalTimerDelta; } - matrix_4x4_copy(g_CurrentPlayer + sp28 + 0xAD8, &sp50); - sp80 = 0.0f; - sp84 = 0.0f; - sp88 = 0.0f; - wor = create_new_item_instance_of_model(PROP_CHRREMOTEMINE, ITEM_REMOTEMINE); - if (wor != NULL) + matrix_4x4_copy(&g_CurrentPlayer->hands[handnum].throw_item_pos_related, &launchmtx); + + launchmtx.m[3][0] = 0.0f; + launchmtx.m[3][1] = 0.0f; + launchmtx.m[3][2] = 0.0f; + + grenadeobj = create_new_item_instance_of_model(PROP_CHRGRENADEROUND, ITEM_GRENADEROUND); + + if (grenadeobj != NULL) { - wor->timer = 0x4B0; - wor->base.runtime_bitflags &= 0xFFF9FFFF; - spE4 = wor; - spE4->base.runtime_bitflags |= get_cur_playernum() << 0x11; - sub_GAME_7F05EC1C(spE4, spE0 + 0x2E8, &sp50, &sp94, &spA0); - if (spE4->base.runtime_bitflags & 0x80) + grenadeobj->timer = GLGRENADE_TIMER; + grenadeobj->runtime_bitflags &= ~RUNTIMEBITFLAG_OWNER; + grenadeobj->runtime_bitflags |= get_cur_playernum() << RUNTIMEBITSHIFT_OWNER; + + gunInitProjectileFromPlayer(grenadeobj, &hand->field_B58, &launchmtx, &launchvel, (s32 *)&identitymtx); + + if (grenadeobj->runtime_bitflags & RUNTIMEBITFLAG_00000080) { - spE4->base.unk6C->unk8c = 0.3f; - spE4->base.unk6C->unk94 = 0.13333333f; - spE4->base.unk6C->refreshrate = 0x3C; + grenadeobj->projectile->unk8C = 0.3f; + grenadeobj->projectile->unk94 = 0.13333333f; + grenadeobj->projectile->refreshrate = THROWN_ITEM_REFRESH_RATE; } } } -#else - -#if defined(VERSION_US) || defined(VERSION_JP) -GLOBAL_ASM( -.late_rodata -glabel D_80053DCC -.word 0x42055555 /*33.333332*/ -glabel D_80053DD0 -.word 0x3e99999a /*0.30000001*/ -glabel D_80053DD4 -.word 0x3e088888 /*0.13333333*/ -.text -glabel sub_GAME_7F05F73C -/* 09426C 7F05F73C 000470C0 */ sll $t6, $a0, 3 -/* 094270 7F05F740 01C47023 */ subu $t6, $t6, $a0 -/* 094274 7F05F744 000E7080 */ sll $t6, $t6, 2 -/* 094278 7F05F748 01C47021 */ addu $t6, $t6, $a0 -/* 09427C 7F05F74C 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) -/* 094280 7F05F750 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 094284 7F05F754 000E7080 */ sll $t6, $t6, 2 -/* 094288 7F05F758 01C47021 */ addu $t6, $t6, $a0 -/* 09428C 7F05F75C 27BDFF18 */ addiu $sp, $sp, -0xe8 -/* 094290 7F05F760 000E70C0 */ sll $t6, $t6, 3 -/* 094294 7F05F764 01EEC021 */ addu $t8, $t7, $t6 -/* 094298 7F05F768 AFBF001C */ sw $ra, 0x1c($sp) -/* 09429C 7F05F76C 27190870 */ addiu $t9, $t8, 0x870 -/* 0942A0 7F05F770 AFA400E8 */ sw $a0, 0xe8($sp) -/* 0942A4 7F05F774 AFB900E0 */ sw $t9, 0xe0($sp) -/* 0942A8 7F05F778 0FC225E6 */ jal get_curplayer_positiondata -/* 0942AC 7F05F77C AFAE0028 */ sw $t6, 0x28($sp) -/* 0942B0 7F05F780 0FC2280B */ jal get_BONDdata_field408 -/* 0942B4 7F05F784 AFA20034 */ sw $v0, 0x34($sp) -/* 0942B8 7F05F788 AFA20030 */ sw $v0, 0x30($sp) -/* 0942BC 7F05F78C 0FC15FF4 */ jal matrix_4x4_set_identity -/* 0942C0 7F05F790 27A400A0 */ addiu $a0, $sp, 0xa0 -/* 0942C4 7F05F794 27A40044 */ addiu $a0, $sp, 0x44 -/* 0942C8 7F05F798 27A50038 */ addiu $a1, $sp, 0x38 -/* 0942CC 7F05F79C 0FC1A073 */ jal bullet_path_from_screen_center -/* 0942D0 7F05F7A0 8FA600E8 */ lw $a2, 0xe8($sp) -/* 0942D4 7F05F7A4 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 0942D8 7F05F7A8 00000000 */ nop -/* 0942DC 7F05F7AC 00402025 */ move $a0, $v0 -/* 0942E0 7F05F7B0 0FC160F6 */ jal mtx4RotateVecInPlace -/* 0942E4 7F05F7B4 27A50038 */ addiu $a1, $sp, 0x38 -/* 0942E8 7F05F7B8 3C018005 */ lui $at, %hi(D_80053DCC) -/* 0942EC 7F05F7BC C4203DCC */ lwc1 $f0, %lo(D_80053DCC)($at) -/* 0942F0 7F05F7C0 C7A40038 */ lwc1 $f4, 0x38($sp) -/* 0942F4 7F05F7C4 C7A8003C */ lwc1 $f8, 0x3c($sp) -/* 0942F8 7F05F7C8 C7B00040 */ lwc1 $f16, 0x40($sp) -/* 0942FC 7F05F7CC 46002182 */ mul.s $f6, $f4, $f0 -/* 094300 7F05F7D0 3C088005 */ lui $t0, %hi(g_ClockTimer) -/* 094304 7F05F7D4 8D088374 */ lw $t0, %lo(g_ClockTimer)($t0) -/* 094308 7F05F7D8 46004282 */ mul.s $f10, $f8, $f0 -/* 09430C 7F05F7DC 8FA20030 */ lw $v0, 0x30($sp) -/* 094310 7F05F7E0 8FA30034 */ lw $v1, 0x34($sp) -/* 094314 7F05F7E4 46008482 */ mul.s $f18, $f16, $f0 -/* 094318 7F05F7E8 E7A60094 */ swc1 $f6, 0x94($sp) -/* 09431C 7F05F7EC 3C098008 */ lui $t1, %hi(g_CurrentPlayer) -/* 094320 7F05F7F0 E7AA0098 */ swc1 $f10, 0x98($sp) -/* 094324 7F05F7F4 19000015 */ blez $t0, .L7F05F84C -/* 094328 7F05F7F8 E7B2009C */ swc1 $f18, 0x9c($sp) -/* 09432C 7F05F7FC C4640008 */ lwc1 $f4, 8($v1) -/* 094330 7F05F800 C4480000 */ lwc1 $f8, ($v0) -/* 094334 7F05F804 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 094338 7F05F808 C4208378 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 09433C 7F05F80C 46082401 */ sub.s $f16, $f4, $f8 -/* 094340 7F05F810 46008103 */ div.s $f4, $f16, $f0 -/* 094344 7F05F814 46043200 */ add.s $f8, $f6, $f4 -/* 094348 7F05F818 E7A80094 */ swc1 $f8, 0x94($sp) -/* 09434C 7F05F81C C4460004 */ lwc1 $f6, 4($v0) -/* 094350 7F05F820 C470000C */ lwc1 $f16, 0xc($v1) -/* 094354 7F05F824 46068101 */ sub.s $f4, $f16, $f6 -/* 094358 7F05F828 46002203 */ div.s $f8, $f4, $f0 -/* 09435C 7F05F82C 46085400 */ add.s $f16, $f10, $f8 -/* 094360 7F05F830 E7B00098 */ swc1 $f16, 0x98($sp) -/* 094364 7F05F834 C4440008 */ lwc1 $f4, 8($v0) -/* 094368 7F05F838 C4660010 */ lwc1 $f6, 0x10($v1) -/* 09436C 7F05F83C 46043281 */ sub.s $f10, $f6, $f4 -/* 094370 7F05F840 46005203 */ div.s $f8, $f10, $f0 -/* 094374 7F05F844 46089400 */ add.s $f16, $f18, $f8 -/* 094378 7F05F848 E7B0009C */ swc1 $f16, 0x9c($sp) -.L7F05F84C: -/* 09437C 7F05F84C 8D29A0B0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 094380 7F05F850 8FAA0028 */ lw $t2, 0x28($sp) -/* 094384 7F05F854 27A50050 */ addiu $a1, $sp, 0x50 -/* 094388 7F05F858 012A2021 */ addu $a0, $t1, $t2 -/* 09438C 7F05F85C 0FC16008 */ jal matrix_4x4_copy -/* 094390 7F05F860 24840AD8 */ addiu $a0, $a0, 0xad8 -/* 094394 7F05F864 44800000 */ mtc1 $zero, $f0 -/* 094398 7F05F868 240400CB */ li $a0, 203 -/* 09439C 7F05F86C 24050057 */ li $a1, 87 -/* 0943A0 7F05F870 E7A00080 */ swc1 $f0, 0x80($sp) -/* 0943A4 7F05F874 E7A00084 */ swc1 $f0, 0x84($sp) -/* 0943A8 7F05F878 0FC1481B */ jal create_new_item_instance_of_model -/* 0943AC 7F05F87C E7A00088 */ swc1 $f0, 0x88($sp) -/* 0943B0 7F05F880 10400025 */ beqz $v0, .L7F05F918 -/* 0943B4 7F05F884 240B04B0 */ li $t3, 1200 -/* 0943B8 7F05F888 8C4C0064 */ lw $t4, 0x64($v0) -/* 0943BC 7F05F88C 3C01FFF9 */ lui $at, (0xFFF9FFFF >> 16) # lui $at, 0xfff9 -/* 0943C0 7F05F890 3421FFFF */ ori $at, (0xFFF9FFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0943C4 7F05F894 01816824 */ and $t5, $t4, $at -/* 0943C8 7F05F898 A44B0082 */ sh $t3, 0x82($v0) -/* 0943CC 7F05F89C AC4D0064 */ sw $t5, 0x64($v0) -/* 0943D0 7F05F8A0 0FC26C54 */ jal get_cur_playernum -/* 0943D4 7F05F8A4 AFA200E4 */ sw $v0, 0xe4($sp) -/* 0943D8 7F05F8A8 8FA400E4 */ lw $a0, 0xe4($sp) -/* 0943DC 7F05F8AC 00027C40 */ sll $t7, $v0, 0x11 -/* 0943E0 7F05F8B0 27B900A0 */ addiu $t9, $sp, 0xa0 -/* 0943E4 7F05F8B4 8C8E0064 */ lw $t6, 0x64($a0) -/* 0943E8 7F05F8B8 27A60050 */ addiu $a2, $sp, 0x50 -/* 0943EC 7F05F8BC 27A70094 */ addiu $a3, $sp, 0x94 -/* 0943F0 7F05F8C0 01CFC025 */ or $t8, $t6, $t7 -/* 0943F4 7F05F8C4 AC980064 */ sw $t8, 0x64($a0) -/* 0943F8 7F05F8C8 8FA500E0 */ lw $a1, 0xe0($sp) -/* 0943FC 7F05F8CC AFB90010 */ sw $t9, 0x10($sp) -/* 094400 7F05F8D0 0FC17B07 */ jal sub_GAME_7F05EC1C -/* 094404 7F05F8D4 24A502E8 */ addiu $a1, $a1, 0x2e8 -/* 094408 7F05F8D8 8FA400E4 */ lw $a0, 0xe4($sp) -/* 09440C 7F05F8DC 3C018005 */ lui $at, %hi(D_80053DD0) -/* 094410 7F05F8E0 8C880064 */ lw $t0, 0x64($a0) -/* 094414 7F05F8E4 31090080 */ andi $t1, $t0, 0x80 -/* 094418 7F05F8E8 5120000C */ beql $t1, $zero, .L7F05F91C -/* 09441C 7F05F8EC 8FBF001C */ lw $ra, 0x1c($sp) -/* 094420 7F05F8F0 C4263DD0 */ lwc1 $f6, %lo(D_80053DD0)($at) -/* 094424 7F05F8F4 8C8A006C */ lw $t2, 0x6c($a0) -/* 094428 7F05F8F8 3C018005 */ lui $at, %hi(D_80053DD4) -/* 09442C 7F05F8FC 240C003C */ li $t4, 60 -/* 094430 7F05F900 E546008C */ swc1 $f6, 0x8c($t2) -/* 094434 7F05F904 8C8B006C */ lw $t3, 0x6c($a0) -/* 094438 7F05F908 C4243DD4 */ lwc1 $f4, %lo(D_80053DD4)($at) -/* 09443C 7F05F90C E5640094 */ swc1 $f4, 0x94($t3) -/* 094440 7F05F910 8C8D006C */ lw $t5, 0x6c($a0) -/* 094444 7F05F914 ADAC00BC */ sw $t4, 0xbc($t5) -.L7F05F918: -/* 094448 7F05F918 8FBF001C */ lw $ra, 0x1c($sp) -.L7F05F91C: -/* 09444C 7F05F91C 27BD00E8 */ addiu $sp, $sp, 0xe8 -/* 094450 7F05F920 03E00008 */ jr $ra -/* 094454 7F05F924 00000000 */ nop -) -#endif - -#if defined(VERSION_EU) -GLOBAL_ASM( -.late_rodata -glabel D_80053DCC -.word 0x42055555 /*33.333332*/ -glabel D_80053DD0 -.word 0x3e99999a /*0.30000001*/ -glabel D_80053DD4 -.word 0x3e088888 /*0.13333333*/ -.text -glabel sub_GAME_7F05F73C -/* 0925E4 7F05FBF4 000470C0 */ sll $t6, $a0, 3 -/* 0925E8 7F05FBF8 01C47023 */ subu $t6, $t6, $a0 -/* 0925EC 7F05FBFC 000E7080 */ sll $t6, $t6, 2 -/* 0925F0 7F05FC00 01C47021 */ addu $t6, $t6, $a0 -/* 0925F4 7F05FC04 3C0F8007 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8007 -/* 0925F8 7F05FC08 8DEF8BC0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0925FC 7F05FC0C 000E7080 */ sll $t6, $t6, 2 -/* 092600 7F05FC10 01C47021 */ addu $t6, $t6, $a0 -/* 092604 7F05FC14 27BDFF18 */ addiu $sp, $sp, -0xe8 -/* 092608 7F05FC18 000E70C0 */ sll $t6, $t6, 3 -/* 09260C 7F05FC1C 01EEC021 */ addu $t8, $t7, $t6 -/* 092610 7F05FC20 AFBF001C */ sw $ra, 0x1c($sp) -/* 092614 7F05FC24 27190868 */ addiu $t9, $t8, 0x868 -/* 092618 7F05FC28 AFA400E8 */ sw $a0, 0xe8($sp) -/* 09261C 7F05FC2C AFB900E0 */ sw $t9, 0xe0($sp) -/* 092620 7F05FC30 0FC22640 */ jal get_curplayer_positiondata -/* 092624 7F05FC34 AFAE0028 */ sw $t6, 0x28($sp) -/* 092628 7F05FC38 0FC2287E */ jal get_BONDdata_field408 -/* 09262C 7F05FC3C AFA20034 */ sw $v0, 0x34($sp) -/* 092630 7F05FC40 AFA20030 */ sw $v0, 0x30($sp) -/* 092634 7F05FC44 0FC1611E */ jal matrix_4x4_set_identity -/* 092638 7F05FC48 27A400A0 */ addiu $a0, $sp, 0xa0 -/* 09263C 7F05FC4C 27A40044 */ addiu $a0, $sp, 0x44 -/* 092640 7F05FC50 27A50038 */ addiu $a1, $sp, 0x38 -/* 092644 7F05FC54 0FC1A25D */ jal bullet_path_from_screen_center -/* 092648 7F05FC58 8FA600E8 */ lw $a2, 0xe8($sp) -/* 09264C 7F05FC5C 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 092650 7F05FC60 00000000 */ nop -/* 092654 7F05FC64 00402025 */ move $a0, $v0 -/* 092658 7F05FC68 0FC16220 */ jal mtx4RotateVecInPlace -/* 09265C 7F05FC6C 27A50038 */ addiu $a1, $sp, 0x38 -/* 092660 7F05FC70 3C018005 */ lui $at, %hi(D_80053DCC) # $at, 0x8005 -/* 092664 7F05FC74 C4209F0C */ lwc1 $f0, %lo(D_80053DCC)($at) -/* 092668 7F05FC78 C7A40038 */ lwc1 $f4, 0x38($sp) -/* 09266C 7F05FC7C C7A8003C */ lwc1 $f8, 0x3c($sp) -/* 092670 7F05FC80 C7B00040 */ lwc1 $f16, 0x40($sp) -/* 092674 7F05FC84 46002182 */ mul.s $f6, $f4, $f0 -/* 092678 7F05FC88 3C088004 */ lui $t0, %hi(g_ClockTimer) # $t0, 0x8004 -/* 09267C 7F05FC8C 8D080FF4 */ lw $t0, %lo(g_ClockTimer)($t0) -/* 092680 7F05FC90 46004282 */ mul.s $f10, $f8, $f0 -/* 092684 7F05FC94 8FA20030 */ lw $v0, 0x30($sp) -/* 092688 7F05FC98 8FA30034 */ lw $v1, 0x34($sp) -/* 09268C 7F05FC9C 46008482 */ mul.s $f18, $f16, $f0 -/* 092690 7F05FCA0 E7A60094 */ swc1 $f6, 0x94($sp) -/* 092694 7F05FCA4 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 -/* 092698 7F05FCA8 E7AA0098 */ swc1 $f10, 0x98($sp) -/* 09269C 7F05FCAC 19000015 */ blez $t0, .L7F05FD04 -/* 0926A0 7F05FCB0 E7B2009C */ swc1 $f18, 0x9c($sp) -/* 0926A4 7F05FCB4 C4640008 */ lwc1 $f4, 8($v1) -/* 0926A8 7F05FCB8 C4480000 */ lwc1 $f8, ($v0) -/* 0926AC 7F05FCBC 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 0926B0 7F05FCC0 C4201004 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 0926B4 7F05FCC4 46082401 */ sub.s $f16, $f4, $f8 -/* 0926B8 7F05FCC8 46008103 */ div.s $f4, $f16, $f0 -/* 0926BC 7F05FCCC 46043200 */ add.s $f8, $f6, $f4 -/* 0926C0 7F05FCD0 E7A80094 */ swc1 $f8, 0x94($sp) -/* 0926C4 7F05FCD4 C4460004 */ lwc1 $f6, 4($v0) -/* 0926C8 7F05FCD8 C470000C */ lwc1 $f16, 0xc($v1) -/* 0926CC 7F05FCDC 46068101 */ sub.s $f4, $f16, $f6 -/* 0926D0 7F05FCE0 46002203 */ div.s $f8, $f4, $f0 -/* 0926D4 7F05FCE4 46085400 */ add.s $f16, $f10, $f8 -/* 0926D8 7F05FCE8 E7B00098 */ swc1 $f16, 0x98($sp) -/* 0926DC 7F05FCEC C4440008 */ lwc1 $f4, 8($v0) -/* 0926E0 7F05FCF0 C4660010 */ lwc1 $f6, 0x10($v1) -/* 0926E4 7F05FCF4 46043281 */ sub.s $f10, $f6, $f4 -/* 0926E8 7F05FCF8 46005203 */ div.s $f8, $f10, $f0 -/* 0926EC 7F05FCFC 46089400 */ add.s $f16, $f18, $f8 -/* 0926F0 7F05FD00 E7B0009C */ swc1 $f16, 0x9c($sp) -.L7F05FD04: -/* 0926F4 7F05FD04 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0926F8 7F05FD08 8FAA0028 */ lw $t2, 0x28($sp) -/* 0926FC 7F05FD0C 27A50050 */ addiu $a1, $sp, 0x50 -/* 092700 7F05FD10 012A2021 */ addu $a0, $t1, $t2 -/* 092704 7F05FD14 0FC16132 */ jal matrix_4x4_copy -/* 092708 7F05FD18 24840AD0 */ addiu $a0, $a0, 0xad0 -/* 09270C 7F05FD1C 44800000 */ mtc1 $zero, $f0 -/* 092710 7F05FD20 240400CB */ li $a0, 203 -/* 092714 7F05FD24 24050057 */ li $a1, 87 -/* 092718 7F05FD28 E7A00080 */ swc1 $f0, 0x80($sp) -/* 09271C 7F05FD2C E7A00084 */ swc1 $f0, 0x84($sp) -/* 092720 7F05FD30 0FC148D3 */ jal create_new_item_instance_of_model -/* 092724 7F05FD34 E7A00088 */ swc1 $f0, 0x88($sp) -/* 092728 7F05FD38 10400025 */ beqz $v0, .L7F05FDD0 -/* 09272C 7F05FD3C 240B03E8 */ li $t3, 1000 -/* 092730 7F05FD40 8C4C0064 */ lw $t4, 0x64($v0) -/* 092734 7F05FD44 3C01FFF9 */ lui $at, (0xFFF9FFFF >> 16) # lui $at, 0xfff9 -/* 092738 7F05FD48 3421FFFF */ ori $at, (0xFFF9FFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 09273C 7F05FD4C 01816824 */ and $t5, $t4, $at -/* 092740 7F05FD50 A44B0082 */ sh $t3, 0x82($v0) -/* 092744 7F05FD54 AC4D0064 */ sw $t5, 0x64($v0) -/* 092748 7F05FD58 0FC269A4 */ jal get_cur_playernum -/* 09274C 7F05FD5C AFA200E4 */ sw $v0, 0xe4($sp) -/* 092750 7F05FD60 8FA400E4 */ lw $a0, 0xe4($sp) -/* 092754 7F05FD64 00027C40 */ sll $t7, $v0, 0x11 -/* 092758 7F05FD68 27B900A0 */ addiu $t9, $sp, 0xa0 -/* 09275C 7F05FD6C 8C8E0064 */ lw $t6, 0x64($a0) -/* 092760 7F05FD70 27A60050 */ addiu $a2, $sp, 0x50 -/* 092764 7F05FD74 27A70094 */ addiu $a3, $sp, 0x94 -/* 092768 7F05FD78 01CFC025 */ or $t8, $t6, $t7 -/* 09276C 7F05FD7C AC980064 */ sw $t8, 0x64($a0) -/* 092770 7F05FD80 8FA500E0 */ lw $a1, 0xe0($sp) -/* 092774 7F05FD84 AFB90010 */ sw $t9, 0x10($sp) -/* 092778 7F05FD88 0FC17C35 */ jal sub_GAME_7F05EC1C -/* 09277C 7F05FD8C 24A502E8 */ addiu $a1, $a1, 0x2e8 -/* 092780 7F05FD90 8FA400E4 */ lw $a0, 0xe4($sp) -/* 092784 7F05FD94 3C018005 */ lui $at, %hi(D_80053DD0) # $at, 0x8005 -/* 092788 7F05FD98 8C880064 */ lw $t0, 0x64($a0) -/* 09278C 7F05FD9C 31090080 */ andi $t1, $t0, 0x80 -/* 092790 7F05FDA0 5120000C */ beql $t1, $zero, .L7F05FDD4 -/* 092794 7F05FDA4 8FBF001C */ lw $ra, 0x1c($sp) -/* 092798 7F05FDA8 C4269F10 */ lwc1 $f6, %lo(D_80053DD0)($at) -/* 09279C 7F05FDAC 8C8A006C */ lw $t2, 0x6c($a0) -/* 0927A0 7F05FDB0 3C018005 */ lui $at, %hi(D_80053DD4) # $at, 0x8005 -/* 0927A4 7F05FDB4 240C0032 */ li $t4, 50 -/* 0927A8 7F05FDB8 E546008C */ swc1 $f6, 0x8c($t2) -/* 0927AC 7F05FDBC 8C8B006C */ lw $t3, 0x6c($a0) -/* 0927B0 7F05FDC0 C4249F14 */ lwc1 $f4, %lo(D_80053DD4)($at) -/* 0927B4 7F05FDC4 E5640094 */ swc1 $f4, 0x94($t3) -/* 0927B8 7F05FDC8 8C8D006C */ lw $t5, 0x6c($a0) -/* 0927BC 7F05FDCC ADAC00BC */ sw $t4, 0xbc($t5) -.L7F05FDD0: -/* 0927C0 7F05FDD0 8FBF001C */ lw $ra, 0x1c($sp) -.L7F05FDD4: -/* 0927C4 7F05FDD4 27BD00E8 */ addiu $sp, $sp, 0xe8 -/* 0927C8 7F05FDD8 03E00008 */ jr $ra -/* 0927CC 7F05FDDC 00000000 */ nop -) -#endif -#endif +/** + * Address: 0x7F05F928 + * This function is responsible for attaching a rocket to the end of the Rocket Launcher and updating its matrices. + */ +void gunUpdateAttachedRocket(s32 handIndex) +{ + struct hand *entry; + AttachedObj *attachedRocket; + Model *rocketModel; + Mtxf worldMtx; + PropRecord *prop; + AttachmentChild *attachmentChild; + entry = &g_CurrentPlayer->hands[handIndex]; + attachedRocket = entry->rocket; -#ifdef NONMATCHING -void sub_GAME_7F05F928(void) { - void *sp7C; - Mtxf sp34; - PropRecord *sp30; - void *temp_s0; - void *temp_s1; - void *temp_s3; - void *temp_v0; - - temp_v0 = g_CurrentPlayer + (arg0 * 0x3A8); - temp_s0 = temp_v0->unkA90; - if (temp_s0 != NULL) + if (attachedRocket == NULL) { - temp_s3 = temp_s0->unk10; - if (temp_s3 != NULL) - { - sp7C = temp_v0 + 0x870; - sp30 = get_curplayer_positiondata(); - temp_s1 = temp_s0->unk14; - matrix_4x4_copy(sp7C + 0x268, &sp34); - sp34.m[3][0] = 0.0f; - sp34.m[3][1] = 0.0f; - sp34.m[3][2] = 0.0f; - matrix_scalar_multiply(temp_s0->unk14->unk14, &sp34); - objChangeShading(temp_s0, sp7C + 0x2E8, &sp34, sp30->stan); - chrobjCollisionRelated(temp_s0); - temp_s1->unkC = dynAllocate(temp_s1->unk8->unkE << 6); - matrix_4x4_copy(temp_s0 + 0x18, &sp34); - matrix_4x4_set_position(temp_s0 + 0x58, &sp34); - matrix_4x4_multiply_homogeneous(camGetWorldToScreenMtxf(), &sp34, temp_s1->unkC); - modelUpdateRelationsQuick(temp_s1, temp_s1->unk8->unk0); - temp_s3->unk1 = temp_s3->unk1 | 2; - temp_s3->unk18 = -temp_s1->unkC->unk38; - } + return; } + + attachmentChild = attachedRocket->child; + + if (attachmentChild == NULL) + { + return; + } + + prop = getCurrentPlayerProp(); + rocketModel = attachedRocket->model; + + matrix_4x4_copy(&entry->throw_item_pos_related, &worldMtx); + + worldMtx.m[3][0] = 0.0f; + worldMtx.m[3][1] = 0.0f; + worldMtx.m[3][2] = 0.0f; + + matrix_scalar_multiply(attachedRocket->model->scale, (f32 *)&worldMtx); + + objChangeShading(attachedRocket, &entry->field_B58, &worldMtx, prop->stan); + chrobjCollisionRelated(attachedRocket); + + rocketModel->render_pos = dynAllocate((s32)rocketModel->obj->numMatrices << 6); + + matrix_4x4_copy(&attachedRocket->transform, &worldMtx); + matrix_4x4_set_position((Mtxf *)&attachedRocket->position, &worldMtx); + + matrix_4x4_multiply_homogeneous(camGetWorldToScreenMtxf(), &worldMtx, rocketModel->render_pos); + modelUpdateRelationsQuick(rocketModel, rocketModel->obj->RootNode); + + attachmentChild->flags1 |= 2; + attachmentChild->unk18 = -rocketModel->render_pos->pos.m[3][2]; } -#else - -#if defined(VERSION_US) || defined(VERSION_JP) -GLOBAL_ASM( -.text -glabel sub_GAME_7F05F928 -/* 094458 7F05F928 000478C0 */ sll $t7, $a0, 3 -/* 09445C 7F05F92C 01E47823 */ subu $t7, $t7, $a0 -/* 094460 7F05F930 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 094464 7F05F934 000F7880 */ sll $t7, $t7, 2 -/* 094468 7F05F938 01E47821 */ addu $t7, $t7, $a0 -/* 09446C 7F05F93C 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 094470 7F05F940 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 094474 7F05F944 000F7880 */ sll $t7, $t7, 2 -/* 094478 7F05F948 01E47821 */ addu $t7, $t7, $a0 -/* 09447C 7F05F94C 000F78C0 */ sll $t7, $t7, 3 -/* 094480 7F05F950 AFBF0024 */ sw $ra, 0x24($sp) -/* 094484 7F05F954 AFB30020 */ sw $s3, 0x20($sp) -/* 094488 7F05F958 AFB2001C */ sw $s2, 0x1c($sp) -/* 09448C 7F05F95C AFB10018 */ sw $s1, 0x18($sp) -/* 094490 7F05F960 AFB00014 */ sw $s0, 0x14($sp) -/* 094494 7F05F964 01CF1021 */ addu $v0, $t6, $t7 -/* 094498 7F05F968 8C500A90 */ lw $s0, 0xa90($v0) -/* 09449C 7F05F96C 24420870 */ addiu $v0, $v0, 0x870 -/* 0944A0 7F05F970 5200003C */ beql $s0, $zero, .L7F05FA64 -/* 0944A4 7F05F974 8FBF0024 */ lw $ra, 0x24($sp) -/* 0944A8 7F05F978 8E130010 */ lw $s3, 0x10($s0) -/* 0944AC 7F05F97C 52600039 */ beql $s3, $zero, .L7F05FA64 -/* 0944B0 7F05F980 8FBF0024 */ lw $ra, 0x24($sp) -/* 0944B4 7F05F984 0FC225E6 */ jal get_curplayer_positiondata -/* 0944B8 7F05F988 AFA2007C */ sw $v0, 0x7c($sp) -/* 0944BC 7F05F98C 8FA4007C */ lw $a0, 0x7c($sp) -/* 0944C0 7F05F990 27B20034 */ addiu $s2, $sp, 0x34 -/* 0944C4 7F05F994 AFA20030 */ sw $v0, 0x30($sp) -/* 0944C8 7F05F998 8E110014 */ lw $s1, 0x14($s0) -/* 0944CC 7F05F99C 02402825 */ move $a1, $s2 -/* 0944D0 7F05F9A0 0FC16008 */ jal matrix_4x4_copy -/* 0944D4 7F05F9A4 24840268 */ addiu $a0, $a0, 0x268 -/* 0944D8 7F05F9A8 44800000 */ mtc1 $zero, $f0 -/* 0944DC 7F05F9AC 02402825 */ move $a1, $s2 -/* 0944E0 7F05F9B0 E7A00064 */ swc1 $f0, 0x64($sp) -/* 0944E4 7F05F9B4 E7A00068 */ swc1 $f0, 0x68($sp) -/* 0944E8 7F05F9B8 E7A0006C */ swc1 $f0, 0x6c($sp) -/* 0944EC 7F05F9BC 8E180014 */ lw $t8, 0x14($s0) -/* 0944F0 7F05F9C0 0FC1629F */ jal matrix_scalar_multiply -/* 0944F4 7F05F9C4 C70C0014 */ lwc1 $f12, 0x14($t8) -/* 0944F8 7F05F9C8 8FA5007C */ lw $a1, 0x7c($sp) -/* 0944FC 7F05F9CC 8FB90030 */ lw $t9, 0x30($sp) -/* 094500 7F05F9D0 02002025 */ move $a0, $s0 -/* 094504 7F05F9D4 02403025 */ move $a2, $s2 -/* 094508 7F05F9D8 24A502E8 */ addiu $a1, $a1, 0x2e8 -/* 09450C 7F05F9DC 0FC101D5 */ jal objChangeShading -/* 094510 7F05F9E0 8F270014 */ lw $a3, 0x14($t9) -/* 094514 7F05F9E4 0FC10121 */ jal chrobjCollisionRelated -/* 094518 7F05F9E8 02002025 */ move $a0, $s0 -/* 09451C 7F05F9EC 8E280008 */ lw $t0, 8($s1) -/* 094520 7F05F9F0 8504000E */ lh $a0, 0xe($t0) -/* 094524 7F05F9F4 00044980 */ sll $t1, $a0, 6 -/* 094528 7F05F9F8 0FC2F5C5 */ jal dynAllocate -/* 09452C 7F05F9FC 01202025 */ move $a0, $t1 -/* 094530 7F05FA00 AE22000C */ sw $v0, 0xc($s1) -/* 094534 7F05FA04 26040018 */ addiu $a0, $s0, 0x18 -/* 094538 7F05FA08 0FC16008 */ jal matrix_4x4_copy -/* 09453C 7F05FA0C 02402825 */ move $a1, $s2 -/* 094540 7F05FA10 26040058 */ addiu $a0, $s0, 0x58 -/* 094544 7F05FA14 0FC16266 */ jal matrix_4x4_set_position -/* 094548 7F05FA18 02402825 */ move $a1, $s2 -/* 09454C 7F05FA1C 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 094550 7F05FA20 00000000 */ nop -/* 094554 7F05FA24 00402025 */ move $a0, $v0 -/* 094558 7F05FA28 02402825 */ move $a1, $s2 -/* 09455C 7F05FA2C 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 094560 7F05FA30 8E26000C */ lw $a2, 0xc($s1) -/* 094564 7F05FA34 8E2A0008 */ lw $t2, 8($s1) -/* 094568 7F05FA38 02202025 */ move $a0, $s1 -/* 09456C 7F05FA3C 0FC1BBA9 */ jal modelUpdateRelationsQuick -/* 094570 7F05FA40 8D450000 */ lw $a1, ($t2) -/* 094574 7F05FA44 926B0001 */ lbu $t3, 1($s3) -/* 094578 7F05FA48 356C0002 */ ori $t4, $t3, 2 -/* 09457C 7F05FA4C A26C0001 */ sb $t4, 1($s3) -/* 094580 7F05FA50 8E2D000C */ lw $t5, 0xc($s1) -/* 094584 7F05FA54 C5A40038 */ lwc1 $f4, 0x38($t5) -/* 094588 7F05FA58 46002187 */ neg.s $f6, $f4 -/* 09458C 7F05FA5C E6660018 */ swc1 $f6, 0x18($s3) -/* 094590 7F05FA60 8FBF0024 */ lw $ra, 0x24($sp) -.L7F05FA64: -/* 094594 7F05FA64 8FB00014 */ lw $s0, 0x14($sp) -/* 094598 7F05FA68 8FB10018 */ lw $s1, 0x18($sp) -/* 09459C 7F05FA6C 8FB2001C */ lw $s2, 0x1c($sp) -/* 0945A0 7F05FA70 8FB30020 */ lw $s3, 0x20($sp) -/* 0945A4 7F05FA74 03E00008 */ jr $ra -/* 0945A8 7F05FA78 27BD0080 */ addiu $sp, $sp, 0x80 -) -#endif - -#if defined(VERSION_EU) -GLOBAL_ASM( -.text -glabel sub_GAME_7F05F928 -/* 0927D0 7F05FDE0 000478C0 */ sll $t7, $a0, 3 -/* 0927D4 7F05FDE4 01E47823 */ subu $t7, $t7, $a0 -/* 0927D8 7F05FDE8 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0927DC 7F05FDEC 000F7880 */ sll $t7, $t7, 2 -/* 0927E0 7F05FDF0 01E47821 */ addu $t7, $t7, $a0 -/* 0927E4 7F05FDF4 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 0927E8 7F05FDF8 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0927EC 7F05FDFC 000F7880 */ sll $t7, $t7, 2 -/* 0927F0 7F05FE00 01E47821 */ addu $t7, $t7, $a0 -/* 0927F4 7F05FE04 000F78C0 */ sll $t7, $t7, 3 -/* 0927F8 7F05FE08 AFBF0024 */ sw $ra, 0x24($sp) -/* 0927FC 7F05FE0C AFB30020 */ sw $s3, 0x20($sp) -/* 092800 7F05FE10 AFB2001C */ sw $s2, 0x1c($sp) -/* 092804 7F05FE14 AFB10018 */ sw $s1, 0x18($sp) -/* 092808 7F05FE18 AFB00014 */ sw $s0, 0x14($sp) -/* 09280C 7F05FE1C 01CF1021 */ addu $v0, $t6, $t7 -/* 092810 7F05FE20 8C500A88 */ lw $s0, 0xa88($v0) -/* 092814 7F05FE24 24420868 */ addiu $v0, $v0, 0x868 -/* 092818 7F05FE28 5200003C */ beql $s0, $zero, .L7F05FF1C -/* 09281C 7F05FE2C 8FBF0024 */ lw $ra, 0x24($sp) -/* 092820 7F05FE30 8E130010 */ lw $s3, 0x10($s0) -/* 092824 7F05FE34 52600039 */ beql $s3, $zero, .L7F05FF1C -/* 092828 7F05FE38 8FBF0024 */ lw $ra, 0x24($sp) -/* 09282C 7F05FE3C 0FC22640 */ jal get_curplayer_positiondata -/* 092830 7F05FE40 AFA2007C */ sw $v0, 0x7c($sp) -/* 092834 7F05FE44 8FA4007C */ lw $a0, 0x7c($sp) -/* 092838 7F05FE48 27B20034 */ addiu $s2, $sp, 0x34 -/* 09283C 7F05FE4C AFA20030 */ sw $v0, 0x30($sp) -/* 092840 7F05FE50 8E110014 */ lw $s1, 0x14($s0) -/* 092844 7F05FE54 02402825 */ move $a1, $s2 -/* 092848 7F05FE58 0FC16132 */ jal matrix_4x4_copy -/* 09284C 7F05FE5C 24840268 */ addiu $a0, $a0, 0x268 -/* 092850 7F05FE60 44800000 */ mtc1 $zero, $f0 -/* 092854 7F05FE64 02402825 */ move $a1, $s2 -/* 092858 7F05FE68 E7A00064 */ swc1 $f0, 0x64($sp) -/* 09285C 7F05FE6C E7A00068 */ swc1 $f0, 0x68($sp) -/* 092860 7F05FE70 E7A0006C */ swc1 $f0, 0x6c($sp) -/* 092864 7F05FE74 8E180014 */ lw $t8, 0x14($s0) -/* 092868 7F05FE78 0FC163C9 */ jal matrix_scalar_multiply -/* 09286C 7F05FE7C C70C0014 */ lwc1 $f12, 0x14($t8) -/* 092870 7F05FE80 8FA5007C */ lw $a1, 0x7c($sp) -/* 092874 7F05FE84 8FB90030 */ lw $t9, 0x30($sp) -/* 092878 7F05FE88 02002025 */ move $a0, $s0 -/* 09287C 7F05FE8C 02403025 */ move $a2, $s2 -/* 092880 7F05FE90 24A502E8 */ addiu $a1, $a1, 0x2e8 -/* 092884 7F05FE94 0FC10205 */ jal objChangeShading -/* 092888 7F05FE98 8F270014 */ lw $a3, 0x14($t9) -/* 09288C 7F05FE9C 0FC10151 */ jal chrobjCollisionRelated -/* 092890 7F05FEA0 02002025 */ move $a0, $s0 -/* 092894 7F05FEA4 8E280008 */ lw $t0, 8($s1) -/* 092898 7F05FEA8 8504000E */ lh $a0, 0xe($t0) -/* 09289C 7F05FEAC 00044980 */ sll $t1, $a0, 6 -/* 0928A0 7F05FEB0 0FC2F2B1 */ jal dynAllocate -/* 0928A4 7F05FEB4 01202025 */ move $a0, $t1 -/* 0928A8 7F05FEB8 AE22000C */ sw $v0, 0xc($s1) -/* 0928AC 7F05FEBC 26040018 */ addiu $a0, $s0, 0x18 -/* 0928B0 7F05FEC0 0FC16132 */ jal matrix_4x4_copy -/* 0928B4 7F05FEC4 02402825 */ move $a1, $s2 -/* 0928B8 7F05FEC8 26040058 */ addiu $a0, $s0, 0x58 -/* 0928BC 7F05FECC 0FC16390 */ jal matrix_4x4_set_position -/* 0928C0 7F05FED0 02402825 */ move $a1, $s2 -/* 0928C4 7F05FED4 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 0928C8 7F05FED8 00000000 */ nop -/* 0928CC 7F05FEDC 00402025 */ move $a0, $v0 -/* 0928D0 7F05FEE0 02402825 */ move $a1, $s2 -/* 0928D4 7F05FEE4 0FC1618D */ jal matrix_4x4_multiply_homogeneous -/* 0928D8 7F05FEE8 8E26000C */ lw $a2, 0xc($s1) -/* 0928DC 7F05FEEC 8E2A0008 */ lw $t2, 8($s1) -/* 0928E0 7F05FEF0 02202025 */ move $a0, $s1 -/* 0928E4 7F05FEF4 0FC1BCA4 */ jal modelUpdateRelationsQuick -/* 0928E8 7F05FEF8 8D450000 */ lw $a1, ($t2) -/* 0928EC 7F05FEFC 926B0001 */ lbu $t3, 1($s3) -/* 0928F0 7F05FF00 356C0002 */ ori $t4, $t3, 2 -/* 0928F4 7F05FF04 A26C0001 */ sb $t4, 1($s3) -/* 0928F8 7F05FF08 8E2D000C */ lw $t5, 0xc($s1) -/* 0928FC 7F05FF0C C5A40038 */ lwc1 $f4, 0x38($t5) -/* 092900 7F05FF10 46002187 */ neg.s $f6, $f4 -/* 092904 7F05FF14 E6660018 */ swc1 $f6, 0x18($s3) -/* 092908 7F05FF18 8FBF0024 */ lw $ra, 0x24($sp) -.L7F05FF1C: -/* 09290C 7F05FF1C 8FB00014 */ lw $s0, 0x14($sp) -/* 092910 7F05FF20 8FB10018 */ lw $s1, 0x18($sp) -/* 092914 7F05FF24 8FB2001C */ lw $s2, 0x1c($sp) -/* 092918 7F05FF28 8FB30020 */ lw $s3, 0x20($sp) -/* 09291C 7F05FF2C 03E00008 */ jr $ra -/* 092920 7F05FF30 27BD0080 */ addiu $sp, $sp, 0x80 -) -#endif -#endif - +/* +* Address: 0x7f05fa7c +*/ void currentPlayerCreateRocket(GUNHAND hand) { struct hand * hand_ptr; @@ -2946,6 +2247,7 @@ void currentPlayerCreateRocket(GUNHAND hand) if ((hand_ptr->rocket == NULL) && (hand_ptr->weapon_ammo_in_magazine > 0)) { rocket = (struct WeaponObjRecord *)create_new_item_instance_of_model(PROP_CHRROCKET, ITEM_ROCKETROUND); + if (rocket != NULL) { hand_ptr->rocket = (ObjectRecord *)rocket; @@ -2956,8 +2258,10 @@ void currentPlayerCreateRocket(GUNHAND hand) } - -/* This function frees some sort of ObjectRecord from the given hand */ +/* +* Address: 0x7F05FB00 +* This function frees some sort of ObjectRecord from the given hand +*/ void sub_GAME_7F05FB00(enum GUNHAND hand) { struct hand* hand_ptr; @@ -2974,6697 +2278,849 @@ void sub_GAME_7F05FB00(enum GUNHAND hand) } +extern f32 D_80053DDC; -#ifdef NONMATCHING -void gunFireTankShell(void) { +/* +* Address: 0x7F05FB64 +*/ +void gunFireTankShell(s32 handnum) +{ + WeaponObjRecord *obj; + struct hand *hand; + Mtxf identitymtx; + coord3d velocity; + ObjectRecord *tankobj; + coord3d unscaledvelocity; + Mtxf shellmtx; + coord3d screenpos; + coord3d aimdir; + PropRecord *playerprop; + coord3d *prevplayerpos; + ITEM_IDS weaponid; + coord3d spawnpos; + PropRecord *tankprop; -} -#else + hand = &g_CurrentPlayer->hands[handnum]; -#if defined(VERSION_US) || defined(VERSION_JP) -GLOBAL_ASM( -.late_rodata -glabel D_80053DD8 -.word 0x42855555 /*66.666664*/ -glabel D_80053DDC -.word 0x3f8e38e3 /*1.111111*/ -.text -glabel gunFireTankShell -/* 094694 7F05FB64 000470C0 */ sll $t6, $a0, 3 -/* 094698 7F05FB68 01C47023 */ subu $t6, $t6, $a0 -/* 09469C 7F05FB6C 000E7080 */ sll $t6, $t6, 2 -/* 0946A0 7F05FB70 01C47021 */ addu $t6, $t6, $a0 -/* 0946A4 7F05FB74 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) -/* 0946A8 7F05FB78 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0946AC 7F05FB7C 000E7080 */ sll $t6, $t6, 2 -/* 0946B0 7F05FB80 01C47021 */ addu $t6, $t6, $a0 -/* 0946B4 7F05FB84 27BDFEF8 */ addiu $sp, $sp, -0x108 -/* 0946B8 7F05FB88 000E70C0 */ sll $t6, $t6, 3 -/* 0946BC 7F05FB8C 01EEC021 */ addu $t8, $t7, $t6 -/* 0946C0 7F05FB90 AFBF001C */ sw $ra, 0x1c($sp) -/* 0946C4 7F05FB94 27190870 */ addiu $t9, $t8, 0x870 -/* 0946C8 7F05FB98 AFA40108 */ sw $a0, 0x108($sp) -/* 0946CC 7F05FB9C AFB90100 */ sw $t9, 0x100($sp) -/* 0946D0 7F05FBA0 0FC225E6 */ jal get_curplayer_positiondata -/* 0946D4 7F05FBA4 AFAE0024 */ sw $t6, 0x24($sp) -/* 0946D8 7F05FBA8 0FC2280B */ jal get_BONDdata_field408 -/* 0946DC 7F05FBAC AFA20048 */ sw $v0, 0x48($sp) -/* 0946E0 7F05FBB0 AFA20044 */ sw $v0, 0x44($sp) -/* 0946E4 7F05FBB4 0FC17674 */ jal getCurrentPlayerWeaponId -/* 0946E8 7F05FBB8 8FA40108 */ lw $a0, 0x108($sp) -/* 0946EC 7F05FBBC AFA20040 */ sw $v0, 0x40($sp) -/* 0946F0 7F05FBC0 0FC15FF4 */ jal matrix_4x4_set_identity -/* 0946F4 7F05FBC4 27A400C0 */ addiu $a0, $sp, 0xc0 -/* 0946F8 7F05FBC8 8FA80040 */ lw $t0, 0x40($sp) -/* 0946FC 7F05FBCC 24010020 */ li $at, 32 -/* 094700 7F05FBD0 27A40058 */ addiu $a0, $sp, 0x58 -/* 094704 7F05FBD4 1501005E */ bne $t0, $at, .L7F05FD50 -/* 094708 7F05FBD8 27A5004C */ addiu $a1, $sp, 0x4c -/* 09470C 7F05FBDC 0FC1F3A1 */ jal get_ptr_for_players_tank -/* 094710 7F05FBE0 00000000 */ nop -/* 094714 7F05FBE4 10400009 */ beqz $v0, .L7F05FC0C -/* 094718 7F05FBE8 AFA20030 */ sw $v0, 0x30($sp) -/* 09471C 7F05FBEC 90490001 */ lbu $t1, 1($v0) -/* 094720 7F05FBF0 312A0002 */ andi $t2, $t1, 2 -/* 094724 7F05FBF4 51400006 */ beql $t2, $zero, .L7F05FC10 -/* 094728 7F05FBF8 27A40058 */ addiu $a0, $sp, 0x58 -/* 09472C 7F05FBFC 0FC1F3AC */ jal bondviewSet3dCoord7F07CEB0 -/* 094730 7F05FC00 27A4004C */ addiu $a0, $sp, 0x4c -/* 094734 7F05FC04 10000009 */ b .L7F05FC2C -/* 094738 7F05FC08 00000000 */ nop -.L7F05FC0C: -/* 09473C 7F05FC0C 27A40058 */ addiu $a0, $sp, 0x58 -.L7F05FC10: -/* 094740 7F05FC10 0FC1A064 */ jal sub_GAME_7F068190 -/* 094744 7F05FC14 27A5004C */ addiu $a1, $sp, 0x4c -/* 094748 7F05FC18 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 09474C 7F05FC1C 00000000 */ nop -/* 094750 7F05FC20 00402025 */ move $a0, $v0 -/* 094754 7F05FC24 0FC160F6 */ jal mtx4RotateVecInPlace -/* 094758 7F05FC28 27A5004C */ addiu $a1, $sp, 0x4c -.L7F05FC2C: -/* 09475C 7F05FC2C 3C018005 */ lui $at, %hi(D_80053DD8) -/* 094760 7F05FC30 C4203DD8 */ lwc1 $f0, %lo(D_80053DD8)($at) -/* 094764 7F05FC34 C7A4004C */ lwc1 $f4, 0x4c($sp) -/* 094768 7F05FC38 C7A80050 */ lwc1 $f8, 0x50($sp) -/* 09476C 7F05FC3C C7B00054 */ lwc1 $f16, 0x54($sp) -/* 094770 7F05FC40 46002182 */ mul.s $f6, $f4, $f0 -/* 094774 7F05FC44 3C0B8005 */ lui $t3, %hi(g_ClockTimer) -/* 094778 7F05FC48 8D6B8374 */ lw $t3, %lo(g_ClockTimer)($t3) -/* 09477C 7F05FC4C 46004282 */ mul.s $f10, $f8, $f0 -/* 094780 7F05FC50 8FA20048 */ lw $v0, 0x48($sp) -/* 094784 7F05FC54 8FA30044 */ lw $v1, 0x44($sp) -/* 094788 7F05FC58 46008482 */ mul.s $f18, $f16, $f0 -/* 09478C 7F05FC5C E7A600B4 */ swc1 $f6, 0xb4($sp) -/* 094790 7F05FC60 E7AA00B8 */ swc1 $f10, 0xb8($sp) -/* 094794 7F05FC64 19600015 */ blez $t3, .L7F05FCBC -/* 094798 7F05FC68 E7B200BC */ swc1 $f18, 0xbc($sp) -/* 09479C 7F05FC6C C4440008 */ lwc1 $f4, 8($v0) -/* 0947A0 7F05FC70 C4680000 */ lwc1 $f8, ($v1) -/* 0947A4 7F05FC74 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 0947A8 7F05FC78 C4208378 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 0947AC 7F05FC7C 46082401 */ sub.s $f16, $f4, $f8 -/* 0947B0 7F05FC80 46008103 */ div.s $f4, $f16, $f0 -/* 0947B4 7F05FC84 46043200 */ add.s $f8, $f6, $f4 -/* 0947B8 7F05FC88 E7A800B4 */ swc1 $f8, 0xb4($sp) -/* 0947BC 7F05FC8C C4660004 */ lwc1 $f6, 4($v1) -/* 0947C0 7F05FC90 C450000C */ lwc1 $f16, 0xc($v0) -/* 0947C4 7F05FC94 46068101 */ sub.s $f4, $f16, $f6 -/* 0947C8 7F05FC98 46002203 */ div.s $f8, $f4, $f0 -/* 0947CC 7F05FC9C 46085400 */ add.s $f16, $f10, $f8 -/* 0947D0 7F05FCA0 E7B000B8 */ swc1 $f16, 0xb8($sp) -/* 0947D4 7F05FCA4 C4640008 */ lwc1 $f4, 8($v1) -/* 0947D8 7F05FCA8 C4460010 */ lwc1 $f6, 0x10($v0) -/* 0947DC 7F05FCAC 46043281 */ sub.s $f10, $f6, $f4 -/* 0947E0 7F05FCB0 46005203 */ div.s $f8, $f10, $f0 -/* 0947E4 7F05FCB4 46089400 */ add.s $f16, $f18, $f8 -/* 0947E8 7F05FCB8 E7B000BC */ swc1 $f16, 0xbc($sp) -.L7F05FCBC: -/* 0947EC 7F05FCBC 8FA30030 */ lw $v1, 0x30($sp) -/* 0947F0 7F05FCC0 8FA20048 */ lw $v0, 0x48($sp) -/* 0947F4 7F05FCC4 50600019 */ beql $v1, $zero, .L7F05FD2C -/* 0947F8 7F05FCC8 C4520008 */ lwc1 $f18, 8($v0) -/* 0947FC 7F05FCCC 906C0001 */ lbu $t4, 1($v1) -/* 094800 7F05FCD0 318D0002 */ andi $t5, $t4, 2 -/* 094804 7F05FCD4 51A00015 */ beql $t5, $zero, .L7F05FD2C -/* 094808 7F05FCD8 C4520008 */ lwc1 $f18, 8($v0) -/* 09480C 7F05FCDC 8C620004 */ lw $v0, 4($v1) -/* 094810 7F05FCE0 8C4E0014 */ lw $t6, 0x14($v0) -/* 094814 7F05FCE4 8DCF000C */ lw $t7, 0xc($t6) -/* 094818 7F05FCE8 C5E60130 */ lwc1 $f6, 0x130($t7) -/* 09481C 7F05FCEC E7A60034 */ swc1 $f6, 0x34($sp) -/* 094820 7F05FCF0 8C580014 */ lw $t8, 0x14($v0) -/* 094824 7F05FCF4 8F19000C */ lw $t9, 0xc($t8) -/* 094828 7F05FCF8 C7240134 */ lwc1 $f4, 0x134($t9) -/* 09482C 7F05FCFC E7A40038 */ swc1 $f4, 0x38($sp) -/* 094830 7F05FD00 8C480014 */ lw $t0, 0x14($v0) -/* 094834 7F05FD04 8D09000C */ lw $t1, 0xc($t0) -/* 094838 7F05FD08 C52A0138 */ lwc1 $f10, 0x138($t1) -/* 09483C 7F05FD0C 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 094840 7F05FD10 E7AA003C */ swc1 $f10, 0x3c($sp) -/* 094844 7F05FD14 00402025 */ move $a0, $v0 -/* 094848 7F05FD18 0FC1611D */ jal mtx4TransformVecInPlace -/* 09484C 7F05FD1C 27A50034 */ addiu $a1, $sp, 0x34 -/* 094850 7F05FD20 10000007 */ b .L7F05FD40 -/* 094854 7F05FD24 00000000 */ nop -/* 094858 7F05FD28 C4520008 */ lwc1 $f18, 8($v0) -.L7F05FD2C: -/* 09485C 7F05FD2C E7B20034 */ swc1 $f18, 0x34($sp) -/* 094860 7F05FD30 C448000C */ lwc1 $f8, 0xc($v0) -/* 094864 7F05FD34 E7A80038 */ swc1 $f8, 0x38($sp) -/* 094868 7F05FD38 C4500010 */ lwc1 $f16, 0x10($v0) -/* 09486C 7F05FD3C E7B0003C */ swc1 $f16, 0x3c($sp) -.L7F05FD40: -/* 094870 7F05FD40 0FC271EB */ jal setSixExplosionAndSmokeEntries -/* 094874 7F05FD44 00000000 */ nop -/* 094878 7F05FD48 1000003A */ b .L7F05FE34 -/* 09487C 7F05FD4C 00000000 */ nop -.L7F05FD50: -/* 094880 7F05FD50 0FC1A073 */ jal bullet_path_from_screen_center -/* 094884 7F05FD54 8FA60108 */ lw $a2, 0x108($sp) -/* 094888 7F05FD58 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 09488C 7F05FD5C 00000000 */ nop -/* 094890 7F05FD60 00402025 */ move $a0, $v0 -/* 094894 7F05FD64 0FC160F6 */ jal mtx4RotateVecInPlace -/* 094898 7F05FD68 27A5004C */ addiu $a1, $sp, 0x4c -/* 09489C 7F05FD6C 8FA60100 */ lw $a2, 0x100($sp) -/* 0948A0 7F05FD70 3C018005 */ lui $at, %hi(D_80053DDC) -/* 0948A4 7F05FD74 C4223DDC */ lwc1 $f2, %lo(D_80053DDC)($at) -/* 0948A8 7F05FD78 C4C602E8 */ lwc1 $f6, 0x2e8($a2) -/* 0948AC 7F05FD7C C7B2004C */ lwc1 $f18, 0x4c($sp) -/* 0948B0 7F05FD80 C7B00050 */ lwc1 $f16, 0x50($sp) -/* 0948B4 7F05FD84 E7A60034 */ swc1 $f6, 0x34($sp) -/* 0948B8 7F05FD88 C4C402EC */ lwc1 $f4, 0x2ec($a2) -/* 0948BC 7F05FD8C 46029202 */ mul.s $f8, $f18, $f2 -/* 0948C0 7F05FD90 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 0948C4 7F05FD94 E7A40038 */ swc1 $f4, 0x38($sp) -/* 0948C8 7F05FD98 C4CA02F0 */ lwc1 $f10, 0x2f0($a2) -/* 0948CC 7F05FD9C 46028182 */ mul.s $f6, $f16, $f2 -/* 0948D0 7F05FDA0 C7A40054 */ lwc1 $f4, 0x54($sp) -/* 0948D4 7F05FDA4 E7AA003C */ swc1 $f10, 0x3c($sp) -/* 0948D8 7F05FDA8 C4208378 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 0948DC 7F05FDAC 46022282 */ mul.s $f10, $f4, $f2 -/* 0948E0 7F05FDB0 3C0A8005 */ lui $t2, %hi(g_ClockTimer) -/* 0948E4 7F05FDB4 8D4A8374 */ lw $t2, %lo(g_ClockTimer)($t2) -/* 0948E8 7F05FDB8 46004482 */ mul.s $f18, $f8, $f0 -/* 0948EC 7F05FDBC E7A800A4 */ swc1 $f8, 0xa4($sp) -/* 0948F0 7F05FDC0 E7A600A8 */ swc1 $f6, 0xa8($sp) -/* 0948F4 7F05FDC4 46003402 */ mul.s $f16, $f6, $f0 -/* 0948F8 7F05FDC8 E7AA00AC */ swc1 $f10, 0xac($sp) -/* 0948FC 7F05FDCC 8FA20044 */ lw $v0, 0x44($sp) -/* 094900 7F05FDD0 46005102 */ mul.s $f4, $f10, $f0 -/* 094904 7F05FDD4 E7B200B4 */ swc1 $f18, 0xb4($sp) -/* 094908 7F05FDD8 8FA30048 */ lw $v1, 0x48($sp) -/* 09490C 7F05FDDC E7B000B8 */ swc1 $f16, 0xb8($sp) -/* 094910 7F05FDE0 19400014 */ blez $t2, .L7F05FE34 -/* 094914 7F05FDE4 E7A400BC */ swc1 $f4, 0xbc($sp) -/* 094918 7F05FDE8 C4680008 */ lwc1 $f8, 8($v1) -/* 09491C 7F05FDEC C4460000 */ lwc1 $f6, ($v0) -/* 094920 7F05FDF0 46064281 */ sub.s $f10, $f8, $f6 -/* 094924 7F05FDF4 46005103 */ div.s $f4, $f10, $f0 -/* 094928 7F05FDF8 46049200 */ add.s $f8, $f18, $f4 -/* 09492C 7F05FDFC E7A800B4 */ swc1 $f8, 0xb4($sp) -/* 094930 7F05FE00 C44A0004 */ lwc1 $f10, 4($v0) -/* 094934 7F05FE04 C466000C */ lwc1 $f6, 0xc($v1) -/* 094938 7F05FE08 460A3481 */ sub.s $f18, $f6, $f10 -/* 09493C 7F05FE0C 46009103 */ div.s $f4, $f18, $f0 -/* 094940 7F05FE10 46048200 */ add.s $f8, $f16, $f4 -/* 094944 7F05FE14 C7A400BC */ lwc1 $f4, 0xbc($sp) -/* 094948 7F05FE18 E7A800B8 */ swc1 $f8, 0xb8($sp) -/* 09494C 7F05FE1C C44A0008 */ lwc1 $f10, 8($v0) -/* 094950 7F05FE20 C4660010 */ lwc1 $f6, 0x10($v1) -/* 094954 7F05FE24 460A3481 */ sub.s $f18, $f6, $f10 -/* 094958 7F05FE28 46009403 */ div.s $f16, $f18, $f0 -/* 09495C 7F05FE2C 46102200 */ add.s $f8, $f4, $f16 -/* 094960 7F05FE30 E7A800BC */ swc1 $f8, 0xbc($sp) -.L7F05FE34: -/* 094964 7F05FE34 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) -/* 094968 7F05FE38 8D6BA0B0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 09496C 7F05FE3C 8FAC0024 */ lw $t4, 0x24($sp) -/* 094970 7F05FE40 27A50064 */ addiu $a1, $sp, 0x64 -/* 094974 7F05FE44 016C2021 */ addu $a0, $t3, $t4 -/* 094978 7F05FE48 0FC16008 */ jal matrix_4x4_copy -/* 09497C 7F05FE4C 24840AD8 */ addiu $a0, $a0, 0xad8 -/* 094980 7F05FE50 44800000 */ mtc1 $zero, $f0 -/* 094984 7F05FE54 8FA30100 */ lw $v1, 0x100($sp) -/* 094988 7F05FE58 240D0001 */ li $t5, 1 -/* 09498C 7F05FE5C E7A00094 */ swc1 $f0, 0x94($sp) -/* 094990 7F05FE60 E7A00098 */ swc1 $f0, 0x98($sp) -/* 094994 7F05FE64 E7A0009C */ swc1 $f0, 0x9c($sp) -/* 094998 7F05FE68 8C620220 */ lw $v0, 0x220($v1) -/* 09499C 7F05FE6C 240400CA */ li $a0, 202 -/* 0949A0 7F05FE70 10400004 */ beqz $v0, .L7F05FE84 -/* 0949A4 7F05FE74 00000000 */ nop -/* 0949A8 7F05FE78 00402025 */ move $a0, $v0 -/* 0949AC 7F05FE7C 10000004 */ b .L7F05FE90 -/* 0949B0 7F05FE80 AC6D0224 */ sw $t5, 0x224($v1) -.L7F05FE84: -/* 0949B4 7F05FE84 0FC1481B */ jal create_new_item_instance_of_model -/* 0949B8 7F05FE88 24050056 */ li $a1, 86 -/* 0949BC 7F05FE8C 00402025 */ move $a0, $v0 -.L7F05FE90: -/* 0949C0 7F05FE90 10800049 */ beqz $a0, .L7F05FFB8 -/* 0949C4 7F05FE94 240EFFFF */ li $t6, -1 -/* 0949C8 7F05FE98 8C8F0064 */ lw $t7, 0x64($a0) -/* 0949CC 7F05FE9C 3C01FFF9 */ lui $at, (0xFFF9FFFF >> 16) # lui $at, 0xfff9 -/* 0949D0 7F05FEA0 3421FFFF */ ori $at, (0xFFF9FFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 0949D4 7F05FEA4 01E1C024 */ and $t8, $t7, $at -/* 0949D8 7F05FEA8 A48E0082 */ sh $t6, 0x82($a0) -/* 0949DC 7F05FEAC AC980064 */ sw $t8, 0x64($a0) -/* 0949E0 7F05FEB0 0FC26C54 */ jal get_cur_playernum -/* 0949E4 7F05FEB4 AFA40104 */ sw $a0, 0x104($sp) -/* 0949E8 7F05FEB8 8FA40104 */ lw $a0, 0x104($sp) -/* 0949EC 7F05FEBC 00024440 */ sll $t0, $v0, 0x11 -/* 0949F0 7F05FEC0 27AA00C0 */ addiu $t2, $sp, 0xc0 -/* 0949F4 7F05FEC4 8C990064 */ lw $t9, 0x64($a0) -/* 0949F8 7F05FEC8 27A50034 */ addiu $a1, $sp, 0x34 -/* 0949FC 7F05FECC 27A60064 */ addiu $a2, $sp, 0x64 -/* 094A00 7F05FED0 03284825 */ or $t1, $t9, $t0 -/* 094A04 7F05FED4 AC890064 */ sw $t1, 0x64($a0) -/* 094A08 7F05FED8 AFAA0010 */ sw $t2, 0x10($sp) -/* 094A0C 7F05FEDC 0FC17B07 */ jal sub_GAME_7F05EC1C -/* 094A10 7F05FEE0 27A700B4 */ addiu $a3, $sp, 0xb4 -/* 094A14 7F05FEE4 8FA40104 */ lw $a0, 0x104($sp) -/* 094A18 7F05FEE8 8C8B0064 */ lw $t3, 0x64($a0) -/* 094A1C 7F05FEEC 316C0080 */ andi $t4, $t3, 0x80 -/* 094A20 7F05FEF0 51800032 */ beql $t4, $zero, .L7F05FFBC -/* 094A24 7F05FEF4 8FBF001C */ lw $ra, 0x1c($sp) -/* 094A28 7F05FEF8 8C82006C */ lw $v0, 0x6c($a0) -/* 094A2C 7F05FEFC 24010020 */ li $at, 32 -/* 094A30 7F05FF00 8C4D0000 */ lw $t5, ($v0) -/* 094A34 7F05FF04 35AE0080 */ ori $t6, $t5, 0x80 -/* 094A38 7F05FF08 AC4E0000 */ sw $t6, ($v0) -/* 094A3C 7F05FF0C 8FAF0040 */ lw $t7, 0x40($sp) -/* 094A40 7F05FF10 51E1002A */ beql $t7, $at, .L7F05FFBC -/* 094A44 7F05FF14 8FBF001C */ lw $ra, 0x1c($sp) -/* 094A48 7F05FF18 8C82006C */ lw $v0, 0x6c($a0) -/* 094A4C 7F05FF1C 240C003C */ li $t4, 60 -/* 094A50 7F05FF20 24050001 */ li $a1, 1 -/* 094A54 7F05FF24 8C580000 */ lw $t8, ($v0) -/* 094A58 7F05FF28 37190020 */ ori $t9, $t8, 0x20 -/* 094A5C 7F05FF2C AC590000 */ sw $t9, ($v0) -/* 094A60 7F05FF30 8C88006C */ lw $t0, 0x6c($a0) -/* 094A64 7F05FF34 C486005C */ lwc1 $f6, 0x5c($a0) -/* 094A68 7F05FF38 E50600B0 */ swc1 $f6, 0xb0($t0) -/* 094A6C 7F05FF3C 8C82006C */ lw $v0, 0x6c($a0) -/* 094A70 7F05FF40 C44A0008 */ lwc1 $f10, 8($v0) -/* 094A74 7F05FF44 E44A00B4 */ swc1 $f10, 0xb4($v0) -/* 094A78 7F05FF48 8C89006C */ lw $t1, 0x6c($a0) -/* 094A7C 7F05FF4C C7B200A4 */ lwc1 $f18, 0xa4($sp) -/* 094A80 7F05FF50 E5320010 */ swc1 $f18, 0x10($t1) -/* 094A84 7F05FF54 8C8A006C */ lw $t2, 0x6c($a0) -/* 094A88 7F05FF58 C7A400A8 */ lwc1 $f4, 0xa8($sp) -/* 094A8C 7F05FF5C E5440014 */ swc1 $f4, 0x14($t2) -/* 094A90 7F05FF60 8C8B006C */ lw $t3, 0x6c($a0) -/* 094A94 7F05FF64 C7B000AC */ lwc1 $f16, 0xac($sp) -/* 094A98 7F05FF68 E5700018 */ swc1 $f16, 0x18($t3) -/* 094A9C 7F05FF6C 8C8D006C */ lw $t5, 0x6c($a0) -/* 094AA0 7F05FF70 ADAC00BC */ sw $t4, 0xbc($t5) -/* 094AA4 7F05FF74 8C82006C */ lw $v0, 0x6c($a0) -/* 094AA8 7F05FF78 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 094AAC 7F05FF7C 8C4E0098 */ lw $t6, 0x98($v0) -/* 094AB0 7F05FF80 24460098 */ addiu $a2, $v0, 0x98 -/* 094AB4 7F05FF84 55C00006 */ bnezl $t6, .L7F05FFA0 -/* 094AB8 7F05FF88 8C4F009C */ lw $t7, 0x9c($v0) -/* 094ABC 7F05FF8C 0C002382 */ jal sndPlaySfx -/* 094AC0 7F05FF90 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 094AC4 7F05FF94 10000009 */ b .L7F05FFBC -/* 094AC8 7F05FF98 8FBF001C */ lw $ra, 0x1c($sp) -/* 094ACC 7F05FF9C 8C4F009C */ lw $t7, 0x9c($v0) -.L7F05FFA0: -/* 094AD0 7F05FFA0 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 094AD4 7F05FFA4 24050001 */ li $a1, 1 -/* 094AD8 7F05FFA8 15E00003 */ bnez $t7, .L7F05FFB8 -/* 094ADC 7F05FFAC 2446009C */ addiu $a2, $v0, 0x9c -/* 094AE0 7F05FFB0 0C002382 */ jal sndPlaySfx -/* 094AE4 7F05FFB4 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -.L7F05FFB8: -/* 094AE8 7F05FFB8 8FBF001C */ lw $ra, 0x1c($sp) -.L7F05FFBC: -/* 094AEC 7F05FFBC 27BD0108 */ addiu $sp, $sp, 0x108 -/* 094AF0 7F05FFC0 03E00008 */ jr $ra -/* 094AF4 7F05FFC4 00000000 */ nop -) -#endif + playerprop = getCurrentPlayerProp(); + prevplayerpos = getCurrentPlayerPrevPos(); + weaponid = getCurrentPlayerWeaponId(handnum); -#if defined(VERSION_EU) -GLOBAL_ASM( -.late_rodata -glabel D_80053DD8 -.word 0x42855555 /*66.666664*/ -glabel D_80053DDC -.word 0x3f8e38e3 /*1.111111*/ -.text -glabel gunFireTankShell -/* 092A0C 7F06001C 000470C0 */ sll $t6, $a0, 3 -/* 092A10 7F060020 01C47023 */ subu $t6, $t6, $a0 -/* 092A14 7F060024 000E7080 */ sll $t6, $t6, 2 -/* 092A18 7F060028 01C47021 */ addu $t6, $t6, $a0 -/* 092A1C 7F06002C 3C0F8007 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8007 -/* 092A20 7F060030 8DEF8BC0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 092A24 7F060034 000E7080 */ sll $t6, $t6, 2 -/* 092A28 7F060038 01C47021 */ addu $t6, $t6, $a0 -/* 092A2C 7F06003C 27BDFEF8 */ addiu $sp, $sp, -0x108 -/* 092A30 7F060040 000E70C0 */ sll $t6, $t6, 3 -/* 092A34 7F060044 01EEC021 */ addu $t8, $t7, $t6 -/* 092A38 7F060048 AFBF001C */ sw $ra, 0x1c($sp) -/* 092A3C 7F06004C 27190868 */ addiu $t9, $t8, 0x868 -/* 092A40 7F060050 AFA40108 */ sw $a0, 0x108($sp) -/* 092A44 7F060054 AFB90100 */ sw $t9, 0x100($sp) -/* 092A48 7F060058 0FC22640 */ jal get_curplayer_positiondata -/* 092A4C 7F06005C AFAE0024 */ sw $t6, 0x24($sp) -/* 092A50 7F060060 0FC2287E */ jal get_BONDdata_field408 -/* 092A54 7F060064 AFA20048 */ sw $v0, 0x48($sp) -/* 092A58 7F060068 AFA20044 */ sw $v0, 0x44($sp) -/* 092A5C 7F06006C 0FC177A2 */ jal getCurrentPlayerWeaponId -/* 092A60 7F060070 8FA40108 */ lw $a0, 0x108($sp) -/* 092A64 7F060074 AFA20040 */ sw $v0, 0x40($sp) -/* 092A68 7F060078 0FC1611E */ jal matrix_4x4_set_identity -/* 092A6C 7F06007C 27A400C0 */ addiu $a0, $sp, 0xc0 -/* 092A70 7F060080 8FA80040 */ lw $t0, 0x40($sp) -/* 092A74 7F060084 24010020 */ li $at, 32 -/* 092A78 7F060088 27A40058 */ addiu $a0, $sp, 0x58 -/* 092A7C 7F06008C 1501005E */ bne $t0, $at, .L7F060208 -/* 092A80 7F060090 27A5004C */ addiu $a1, $sp, 0x4c -/* 092A84 7F060094 0FC1F3D6 */ jal get_ptr_for_players_tank -/* 092A88 7F060098 00000000 */ nop -/* 092A8C 7F06009C 10400009 */ beqz $v0, .L7F0600C4 -/* 092A90 7F0600A0 AFA20030 */ sw $v0, 0x30($sp) -/* 092A94 7F0600A4 90490001 */ lbu $t1, 1($v0) -/* 092A98 7F0600A8 312A0002 */ andi $t2, $t1, 2 -/* 092A9C 7F0600AC 51400006 */ beql $t2, $zero, .L7F0600C8 -/* 092AA0 7F0600B0 27A40058 */ addiu $a0, $sp, 0x58 -/* 092AA4 7F0600B4 0FC1F3E1 */ jal bondviewSet3dCoord7F07CEB0 -/* 092AA8 7F0600B8 27A4004C */ addiu $a0, $sp, 0x4c -/* 092AAC 7F0600BC 10000009 */ b .L7F0600E4 -/* 092AB0 7F0600C0 00000000 */ nop -.L7F0600C4: -/* 092AB4 7F0600C4 27A40058 */ addiu $a0, $sp, 0x58 -.L7F0600C8: -/* 092AB8 7F0600C8 0FC1A24E */ jal sub_GAME_7F068190 -/* 092ABC 7F0600CC 27A5004C */ addiu $a1, $sp, 0x4c -/* 092AC0 7F0600D0 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 092AC4 7F0600D4 00000000 */ nop -/* 092AC8 7F0600D8 00402025 */ move $a0, $v0 -/* 092ACC 7F0600DC 0FC16220 */ jal mtx4RotateVecInPlace -/* 092AD0 7F0600E0 27A5004C */ addiu $a1, $sp, 0x4c -.L7F0600E4: -/* 092AD4 7F0600E4 3C018005 */ lui $at, %hi(D_80053DD8) # $at, 0x8005 -/* 092AD8 7F0600E8 C4209F18 */ lwc1 $f0, %lo(D_80053DD8)($at) -/* 092ADC 7F0600EC C7A4004C */ lwc1 $f4, 0x4c($sp) -/* 092AE0 7F0600F0 C7A80050 */ lwc1 $f8, 0x50($sp) -/* 092AE4 7F0600F4 C7B00054 */ lwc1 $f16, 0x54($sp) -/* 092AE8 7F0600F8 46002182 */ mul.s $f6, $f4, $f0 -/* 092AEC 7F0600FC 3C0B8004 */ lui $t3, %hi(g_ClockTimer) # $t3, 0x8004 -/* 092AF0 7F060100 8D6B0FF4 */ lw $t3, %lo(g_ClockTimer)($t3) -/* 092AF4 7F060104 46004282 */ mul.s $f10, $f8, $f0 -/* 092AF8 7F060108 8FA20048 */ lw $v0, 0x48($sp) -/* 092AFC 7F06010C 8FA30044 */ lw $v1, 0x44($sp) -/* 092B00 7F060110 46008482 */ mul.s $f18, $f16, $f0 -/* 092B04 7F060114 E7A600B4 */ swc1 $f6, 0xb4($sp) -/* 092B08 7F060118 E7AA00B8 */ swc1 $f10, 0xb8($sp) -/* 092B0C 7F06011C 19600015 */ blez $t3, .L7F060174 -/* 092B10 7F060120 E7B200BC */ swc1 $f18, 0xbc($sp) -/* 092B14 7F060124 C4440008 */ lwc1 $f4, 8($v0) -/* 092B18 7F060128 C4680000 */ lwc1 $f8, ($v1) -/* 092B1C 7F06012C 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 092B20 7F060130 C4201004 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 092B24 7F060134 46082401 */ sub.s $f16, $f4, $f8 -/* 092B28 7F060138 46008103 */ div.s $f4, $f16, $f0 -/* 092B2C 7F06013C 46043200 */ add.s $f8, $f6, $f4 -/* 092B30 7F060140 E7A800B4 */ swc1 $f8, 0xb4($sp) -/* 092B34 7F060144 C4660004 */ lwc1 $f6, 4($v1) -/* 092B38 7F060148 C450000C */ lwc1 $f16, 0xc($v0) -/* 092B3C 7F06014C 46068101 */ sub.s $f4, $f16, $f6 -/* 092B40 7F060150 46002203 */ div.s $f8, $f4, $f0 -/* 092B44 7F060154 46085400 */ add.s $f16, $f10, $f8 -/* 092B48 7F060158 E7B000B8 */ swc1 $f16, 0xb8($sp) -/* 092B4C 7F06015C C4640008 */ lwc1 $f4, 8($v1) -/* 092B50 7F060160 C4460010 */ lwc1 $f6, 0x10($v0) -/* 092B54 7F060164 46043281 */ sub.s $f10, $f6, $f4 -/* 092B58 7F060168 46005203 */ div.s $f8, $f10, $f0 -/* 092B5C 7F06016C 46089400 */ add.s $f16, $f18, $f8 -/* 092B60 7F060170 E7B000BC */ swc1 $f16, 0xbc($sp) -.L7F060174: -/* 092B64 7F060174 8FA30030 */ lw $v1, 0x30($sp) -/* 092B68 7F060178 8FA20048 */ lw $v0, 0x48($sp) -/* 092B6C 7F06017C 50600019 */ beql $v1, $zero, .L7F0601E4 -/* 092B70 7F060180 C4520008 */ lwc1 $f18, 8($v0) -/* 092B74 7F060184 906C0001 */ lbu $t4, 1($v1) -/* 092B78 7F060188 318D0002 */ andi $t5, $t4, 2 -/* 092B7C 7F06018C 51A00015 */ beql $t5, $zero, .L7F0601E4 -/* 092B80 7F060190 C4520008 */ lwc1 $f18, 8($v0) -/* 092B84 7F060194 8C620004 */ lw $v0, 4($v1) -/* 092B88 7F060198 8C4E0014 */ lw $t6, 0x14($v0) -/* 092B8C 7F06019C 8DCF000C */ lw $t7, 0xc($t6) -/* 092B90 7F0601A0 C5E60130 */ lwc1 $f6, 0x130($t7) -/* 092B94 7F0601A4 E7A60034 */ swc1 $f6, 0x34($sp) -/* 092B98 7F0601A8 8C580014 */ lw $t8, 0x14($v0) -/* 092B9C 7F0601AC 8F19000C */ lw $t9, 0xc($t8) -/* 092BA0 7F0601B0 C7240134 */ lwc1 $f4, 0x134($t9) -/* 092BA4 7F0601B4 E7A40038 */ swc1 $f4, 0x38($sp) -/* 092BA8 7F0601B8 8C480014 */ lw $t0, 0x14($v0) -/* 092BAC 7F0601BC 8D09000C */ lw $t1, 0xc($t0) -/* 092BB0 7F0601C0 C52A0138 */ lwc1 $f10, 0x138($t1) -/* 092BB4 7F0601C4 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 092BB8 7F0601C8 E7AA003C */ swc1 $f10, 0x3c($sp) -/* 092BBC 7F0601CC 00402025 */ move $a0, $v0 -/* 092BC0 7F0601D0 0FC16247 */ jal mtx4TransformVecInPlace -/* 092BC4 7F0601D4 27A50034 */ addiu $a1, $sp, 0x34 -/* 092BC8 7F0601D8 10000007 */ b .L7F0601F8 -/* 092BCC 7F0601DC 00000000 */ nop -/* 092BD0 7F0601E0 C4520008 */ lwc1 $f18, 8($v0) -.L7F0601E4: -/* 092BD4 7F0601E4 E7B20034 */ swc1 $f18, 0x34($sp) -/* 092BD8 7F0601E8 C448000C */ lwc1 $f8, 0xc($v0) -/* 092BDC 7F0601EC E7A80038 */ swc1 $f8, 0x38($sp) -/* 092BE0 7F0601F0 C4500010 */ lwc1 $f16, 0x10($v0) -/* 092BE4 7F0601F4 E7B0003C */ swc1 $f16, 0x3c($sp) -.L7F0601F8: -/* 092BE8 7F0601F8 0FC26F30 */ jal setSixExplosionAndSmokeEntries -/* 092BEC 7F0601FC 00000000 */ nop -/* 092BF0 7F060200 1000003A */ b .L7F0602EC -/* 092BF4 7F060204 00000000 */ nop -.L7F060208: -/* 092BF8 7F060208 0FC1A25D */ jal bullet_path_from_screen_center -/* 092BFC 7F06020C 8FA60108 */ lw $a2, 0x108($sp) -/* 092C00 7F060210 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 092C04 7F060214 00000000 */ nop -/* 092C08 7F060218 00402025 */ move $a0, $v0 -/* 092C0C 7F06021C 0FC16220 */ jal mtx4RotateVecInPlace -/* 092C10 7F060220 27A5004C */ addiu $a1, $sp, 0x4c -/* 092C14 7F060224 8FA60100 */ lw $a2, 0x100($sp) -/* 092C18 7F060228 3C018005 */ lui $at, %hi(D_80053DDC) # $at, 0x8005 -/* 092C1C 7F06022C C4229F1C */ lwc1 $f2, %lo(D_80053DDC)($at) -/* 092C20 7F060230 C4C602E8 */ lwc1 $f6, 0x2e8($a2) -/* 092C24 7F060234 C7B2004C */ lwc1 $f18, 0x4c($sp) -/* 092C28 7F060238 C7B00050 */ lwc1 $f16, 0x50($sp) -/* 092C2C 7F06023C E7A60034 */ swc1 $f6, 0x34($sp) -/* 092C30 7F060240 C4C402EC */ lwc1 $f4, 0x2ec($a2) -/* 092C34 7F060244 46029202 */ mul.s $f8, $f18, $f2 -/* 092C38 7F060248 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 092C3C 7F06024C E7A40038 */ swc1 $f4, 0x38($sp) -/* 092C40 7F060250 C4CA02F0 */ lwc1 $f10, 0x2f0($a2) -/* 092C44 7F060254 46028182 */ mul.s $f6, $f16, $f2 -/* 092C48 7F060258 C7A40054 */ lwc1 $f4, 0x54($sp) -/* 092C4C 7F06025C E7AA003C */ swc1 $f10, 0x3c($sp) -/* 092C50 7F060260 C4201004 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 092C54 7F060264 46022282 */ mul.s $f10, $f4, $f2 -/* 092C58 7F060268 3C0A8004 */ lui $t2, %hi(g_ClockTimer) # $t2, 0x8004 -/* 092C5C 7F06026C 8D4A0FF4 */ lw $t2, %lo(g_ClockTimer)($t2) -/* 092C60 7F060270 46004482 */ mul.s $f18, $f8, $f0 -/* 092C64 7F060274 E7A800A4 */ swc1 $f8, 0xa4($sp) -/* 092C68 7F060278 E7A600A8 */ swc1 $f6, 0xa8($sp) -/* 092C6C 7F06027C 46003402 */ mul.s $f16, $f6, $f0 -/* 092C70 7F060280 E7AA00AC */ swc1 $f10, 0xac($sp) -/* 092C74 7F060284 8FA20044 */ lw $v0, 0x44($sp) -/* 092C78 7F060288 46005102 */ mul.s $f4, $f10, $f0 -/* 092C7C 7F06028C E7B200B4 */ swc1 $f18, 0xb4($sp) -/* 092C80 7F060290 8FA30048 */ lw $v1, 0x48($sp) -/* 092C84 7F060294 E7B000B8 */ swc1 $f16, 0xb8($sp) -/* 092C88 7F060298 19400014 */ blez $t2, .L7F0602EC -/* 092C8C 7F06029C E7A400BC */ swc1 $f4, 0xbc($sp) -/* 092C90 7F0602A0 C4680008 */ lwc1 $f8, 8($v1) -/* 092C94 7F0602A4 C4460000 */ lwc1 $f6, ($v0) -/* 092C98 7F0602A8 46064281 */ sub.s $f10, $f8, $f6 -/* 092C9C 7F0602AC 46005103 */ div.s $f4, $f10, $f0 -/* 092CA0 7F0602B0 46049200 */ add.s $f8, $f18, $f4 -/* 092CA4 7F0602B4 E7A800B4 */ swc1 $f8, 0xb4($sp) -/* 092CA8 7F0602B8 C44A0004 */ lwc1 $f10, 4($v0) -/* 092CAC 7F0602BC C466000C */ lwc1 $f6, 0xc($v1) -/* 092CB0 7F0602C0 460A3481 */ sub.s $f18, $f6, $f10 -/* 092CB4 7F0602C4 46009103 */ div.s $f4, $f18, $f0 -/* 092CB8 7F0602C8 46048200 */ add.s $f8, $f16, $f4 -/* 092CBC 7F0602CC C7A400BC */ lwc1 $f4, 0xbc($sp) -/* 092CC0 7F0602D0 E7A800B8 */ swc1 $f8, 0xb8($sp) -/* 092CC4 7F0602D4 C44A0008 */ lwc1 $f10, 8($v0) -/* 092CC8 7F0602D8 C4660010 */ lwc1 $f6, 0x10($v1) -/* 092CCC 7F0602DC 460A3481 */ sub.s $f18, $f6, $f10 -/* 092CD0 7F0602E0 46009403 */ div.s $f16, $f18, $f0 -/* 092CD4 7F0602E4 46102200 */ add.s $f8, $f4, $f16 -/* 092CD8 7F0602E8 E7A800BC */ swc1 $f8, 0xbc($sp) -.L7F0602EC: -/* 092CDC 7F0602EC 3C0B8007 */ lui $t3, %hi(g_CurrentPlayer) # $t3, 0x8007 -/* 092CE0 7F0602F0 8D6B8BC0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 092CE4 7F0602F4 8FAC0024 */ lw $t4, 0x24($sp) -/* 092CE8 7F0602F8 27A50064 */ addiu $a1, $sp, 0x64 -/* 092CEC 7F0602FC 016C2021 */ addu $a0, $t3, $t4 -/* 092CF0 7F060300 0FC16132 */ jal matrix_4x4_copy -/* 092CF4 7F060304 24840AD0 */ addiu $a0, $a0, 0xad0 -/* 092CF8 7F060308 44800000 */ mtc1 $zero, $f0 -/* 092CFC 7F06030C 8FA30100 */ lw $v1, 0x100($sp) -/* 092D00 7F060310 240D0001 */ li $t5, 1 -/* 092D04 7F060314 E7A00094 */ swc1 $f0, 0x94($sp) -/* 092D08 7F060318 E7A00098 */ swc1 $f0, 0x98($sp) -/* 092D0C 7F06031C E7A0009C */ swc1 $f0, 0x9c($sp) -/* 092D10 7F060320 8C620220 */ lw $v0, 0x220($v1) -/* 092D14 7F060324 240400CA */ li $a0, 202 -/* 092D18 7F060328 10400004 */ beqz $v0, .L7F06033C -/* 092D1C 7F06032C 00000000 */ nop -/* 092D20 7F060330 00402025 */ move $a0, $v0 -/* 092D24 7F060334 10000004 */ b .L7F060348 -/* 092D28 7F060338 AC6D0224 */ sw $t5, 0x224($v1) -.L7F06033C: -/* 092D2C 7F06033C 0FC148D3 */ jal create_new_item_instance_of_model -/* 092D30 7F060340 24050056 */ li $a1, 86 -/* 092D34 7F060344 00402025 */ move $a0, $v0 -.L7F060348: -/* 092D38 7F060348 10800049 */ beqz $a0, .L7F060470 -/* 092D3C 7F06034C 240EFFFF */ li $t6, -1 -/* 092D40 7F060350 8C8F0064 */ lw $t7, 0x64($a0) -/* 092D44 7F060354 3C01FFF9 */ lui $at, (0xFFF9FFFF >> 16) # lui $at, 0xfff9 -/* 092D48 7F060358 3421FFFF */ ori $at, (0xFFF9FFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 092D4C 7F06035C 01E1C024 */ and $t8, $t7, $at -/* 092D50 7F060360 A48E0082 */ sh $t6, 0x82($a0) -/* 092D54 7F060364 AC980064 */ sw $t8, 0x64($a0) -/* 092D58 7F060368 0FC269A4 */ jal get_cur_playernum -/* 092D5C 7F06036C AFA40104 */ sw $a0, 0x104($sp) -/* 092D60 7F060370 8FA40104 */ lw $a0, 0x104($sp) -/* 092D64 7F060374 00024440 */ sll $t0, $v0, 0x11 -/* 092D68 7F060378 27AA00C0 */ addiu $t2, $sp, 0xc0 -/* 092D6C 7F06037C 8C990064 */ lw $t9, 0x64($a0) -/* 092D70 7F060380 27A50034 */ addiu $a1, $sp, 0x34 -/* 092D74 7F060384 27A60064 */ addiu $a2, $sp, 0x64 -/* 092D78 7F060388 03284825 */ or $t1, $t9, $t0 -/* 092D7C 7F06038C AC890064 */ sw $t1, 0x64($a0) -/* 092D80 7F060390 AFAA0010 */ sw $t2, 0x10($sp) -/* 092D84 7F060394 0FC17C35 */ jal sub_GAME_7F05EC1C -/* 092D88 7F060398 27A700B4 */ addiu $a3, $sp, 0xb4 -/* 092D8C 7F06039C 8FA40104 */ lw $a0, 0x104($sp) -/* 092D90 7F0603A0 8C8B0064 */ lw $t3, 0x64($a0) -/* 092D94 7F0603A4 316C0080 */ andi $t4, $t3, 0x80 -/* 092D98 7F0603A8 51800032 */ beql $t4, $zero, .L7F060474 -/* 092D9C 7F0603AC 8FBF001C */ lw $ra, 0x1c($sp) -/* 092DA0 7F0603B0 8C82006C */ lw $v0, 0x6c($a0) -/* 092DA4 7F0603B4 24010020 */ li $at, 32 -/* 092DA8 7F0603B8 8C4D0000 */ lw $t5, ($v0) -/* 092DAC 7F0603BC 35AE0080 */ ori $t6, $t5, 0x80 -/* 092DB0 7F0603C0 AC4E0000 */ sw $t6, ($v0) -/* 092DB4 7F0603C4 8FAF0040 */ lw $t7, 0x40($sp) -/* 092DB8 7F0603C8 51E1002A */ beql $t7, $at, .L7F060474 -/* 092DBC 7F0603CC 8FBF001C */ lw $ra, 0x1c($sp) -/* 092DC0 7F0603D0 8C82006C */ lw $v0, 0x6c($a0) -/* 092DC4 7F0603D4 240C0032 */ li $t4, 50 -/* 092DC8 7F0603D8 24050001 */ li $a1, 1 -/* 092DCC 7F0603DC 8C580000 */ lw $t8, ($v0) -/* 092DD0 7F0603E0 37190020 */ ori $t9, $t8, 0x20 -/* 092DD4 7F0603E4 AC590000 */ sw $t9, ($v0) -/* 092DD8 7F0603E8 8C88006C */ lw $t0, 0x6c($a0) -/* 092DDC 7F0603EC C486005C */ lwc1 $f6, 0x5c($a0) -/* 092DE0 7F0603F0 E50600B0 */ swc1 $f6, 0xb0($t0) -/* 092DE4 7F0603F4 8C82006C */ lw $v0, 0x6c($a0) -/* 092DE8 7F0603F8 C44A0008 */ lwc1 $f10, 8($v0) -/* 092DEC 7F0603FC E44A00B4 */ swc1 $f10, 0xb4($v0) -/* 092DF0 7F060400 8C89006C */ lw $t1, 0x6c($a0) -/* 092DF4 7F060404 C7B200A4 */ lwc1 $f18, 0xa4($sp) -/* 092DF8 7F060408 E5320010 */ swc1 $f18, 0x10($t1) -/* 092DFC 7F06040C 8C8A006C */ lw $t2, 0x6c($a0) -/* 092E00 7F060410 C7A400A8 */ lwc1 $f4, 0xa8($sp) -/* 092E04 7F060414 E5440014 */ swc1 $f4, 0x14($t2) -/* 092E08 7F060418 8C8B006C */ lw $t3, 0x6c($a0) -/* 092E0C 7F06041C C7B000AC */ lwc1 $f16, 0xac($sp) -/* 092E10 7F060420 E5700018 */ swc1 $f16, 0x18($t3) -/* 092E14 7F060424 8C8D006C */ lw $t5, 0x6c($a0) -/* 092E18 7F060428 ADAC00BC */ sw $t4, 0xbc($t5) -/* 092E1C 7F06042C 8C82006C */ lw $v0, 0x6c($a0) -/* 092E20 7F060430 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 092E24 7F060434 8C4E0098 */ lw $t6, 0x98($v0) -/* 092E28 7F060438 24460098 */ addiu $a2, $v0, 0x98 -/* 092E2C 7F06043C 55C00006 */ bnezl $t6, .L7F060458 -/* 092E30 7F060440 8C4F009C */ lw $t7, 0x9c($v0) -/* 092E34 7F060444 0C00209A */ jal sndPlaySfx -/* 092E38 7F060448 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 092E3C 7F06044C 10000009 */ b .L7F060474 -/* 092E40 7F060450 8FBF001C */ lw $ra, 0x1c($sp) -/* 092E44 7F060454 8C4F009C */ lw $t7, 0x9c($v0) -.L7F060458: -/* 092E48 7F060458 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 092E4C 7F06045C 24050001 */ li $a1, 1 -/* 092E50 7F060460 15E00003 */ bnez $t7, .L7F060470 -/* 092E54 7F060464 2446009C */ addiu $a2, $v0, 0x9c -/* 092E58 7F060468 0C00209A */ jal sndPlaySfx -/* 092E5C 7F06046C 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -.L7F060470: -/* 092E60 7F060470 8FBF001C */ lw $ra, 0x1c($sp) -.L7F060474: -/* 092E64 7F060474 27BD0108 */ addiu $sp, $sp, 0x108 -/* 092E68 7F060478 03E00008 */ jr $ra -/* 092E6C 7F06047C 00000000 */ nop -) -#endif -#endif + matrix_4x4_set_identity(&identitymtx); - - - - -#ifdef NONMATCHING -void handles_firing_or_throwing_weapon_in_hand(void) { - Mtxf *sp2A4; - Mtxf sp264; - f32 sp224; - Mtxf sp1E4; - Mtxf sp1A4; - void *sp1A0; - f32 sp19C; - f32 sp198; - f32 sp194; - Mtxf sp154; - Mtxf sp114; - s32 *sp10C; - f32 *sp108; - s32 sp100; - s32 spFC; - void *spF8; - f32 spE8; - f32 spE4; - f32 spE0; - f32 spD4; - f32 spC8; - ? spB8; - ? spAC; - ? spA0; - f32 *sp9C; - f32 *sp94; - f32 sp8C; - f32 sp88; - f32 sp84; - f32 sp80; - f32 sp7C; - f32 *sp70; - s32 sp6C; - void *sp68; - f32 *sp64; - s32 sp60; - s32 sp5C; - f32 sp50; - f32 sp4C; - f32 sp48; - Mtxf *sp44; - Mtxf *sp40; - void *sp3C; - void *sp38; // compiler-managed - Mtxf *temp_a0; - Mtxf *temp_a0_2; - Mtxf *temp_a1; - Mtxf *temp_t0; - Mtxf *temp_t1; - Mtxf *temp_v0_8; - Mtxf *var_a0; - Mtxf *var_a2; - f32 *temp_a0_4; - f32 *temp_a0_5; - f32 temp_f10; - f32 temp_f10_2; - f32 temp_f16; - f32 temp_f16_2; - f32 var_f10; - f32 var_f10_2; - f32 var_f12; - f32 var_f16; - f32 var_f4; - f32 var_f6; - f32 var_f8; - f32 var_f8_2; - s32 *temp_v0_17; - s32 *temp_v0_18; - s32 temp_a1_2; - s32 temp_a1_3; - s32 temp_v0; - s32 temp_v0_10; - s32 temp_v0_11; - s32 temp_v0_12; - s32 temp_v0_13; - s32 temp_v0_2; - s32 temp_v0_3; - s32 temp_v0_4; - s32 temp_v0_5; - s32 temp_v0_6; - s32 var_v1; - s32 var_v1_2; - s32 var_v1_3; - void *temp_a0_3; - void *temp_a0_6; - void *temp_a0_7; - void *temp_s0; - void *temp_t2; - void *temp_t3; - void *temp_v0_14; - void *temp_v0_15; - void *temp_v0_16; - void *temp_v0_7; - void *temp_v0_9; - void *temp_v1; - void *temp_v1_2; - void *temp_v1_3; - void *temp_v1_4; - void *temp_v1_5; - void *temp_v1_6; - void *var_v0; - void *var_v0_2; - - sp194.unk0 = D_80035C40.unk0; - sp194.unk4 = D_80035C40.unk4; - sp194.unk8 = D_80035C40.unk8; - sp10C = NULL; - sp108 = NULL; - temp_s0 = g_CurrentPlayer + (arg0 * 0x3A8) + 0x870; - temp_v0 = get_item_in_hand_or_watch_menu(); - spFC = temp_v0; - spF8 = get_ptr_item_statistics(temp_v0); - if (arg0 == 0) + if (weaponid == ITEM_TANKSHELLS) { - if (bondwalkItemCheckBitflags(get_item_in_hand_or_watch_menu(1), 0x800) != 0) + tankprop = get_ptr_for_players_tank(); + + if (1); + + if ((tankprop != NULL) && (tankprop->flags & TANK_RUN_STATE_RUNNING)) { - temp_s0->unk1C4 = temp_s0->unk1C4 + ((2.0f * g_GlobalTimerDelta) / 240.0f); - if (temp_s0->unk1C4 > 2.0f) + bondviewSet3dCoord7F07CEB0(&aimdir); + } + else + { + sub_GAME_7F068190(&screenpos, &aimdir); + mtx4RotateVecInPlace(currentPlayerGetViewToWorldMtxf(), &aimdir); + } + + velocity.x = aimdir.x * TANK_SHELL_SPEED; + velocity.y = aimdir.y * TANK_SHELL_SPEED; + velocity.z = aimdir.z * TANK_SHELL_SPEED; + + if (g_ClockTimer > 0) { + velocity.x += (playerprop->pos.x - prevplayerpos->x) / g_GlobalTimerDelta; + velocity.y += (playerprop->pos.y - prevplayerpos->y) / g_GlobalTimerDelta; + velocity.z += (playerprop->pos.z - prevplayerpos->z) / g_GlobalTimerDelta; + } + + if ((tankprop != NULL) && (tankprop->flags & TANK_RUN_STATE_RUNNING)) + { + tankobj = tankprop->obj; + spawnpos.x = tankobj->model->render_pos[4].pos.m[3][0]; + spawnpos.y = tankobj->model->render_pos[4].pos.m[3][1]; + spawnpos.z = tankobj->model->render_pos[4].pos.m[3][2]; + + mtx4TransformVecInPlace(currentPlayerGetViewToWorldMtxf(), &spawnpos); + } + else + { + spawnpos.x = playerprop->pos.x; + spawnpos.y = playerprop->pos.y; + spawnpos.z = playerprop->pos.z; + } + + if ((g_CurrentPlayer && g_CurrentPlayer)); + + setSixExplosionAndSmokeEntries(); + } + else + { + bullet_path_from_screen_center(&screenpos, &aimdir, handnum); + mtx4RotateVecInPlace(currentPlayerGetViewToWorldMtxf(), &aimdir); + + spawnpos.x = hand->field_B58.x; + spawnpos.y = hand->field_B58.y; + spawnpos.z = hand->field_B58.z; + + if (1); + + unscaledvelocity.x = aimdir.x * D_80053DDC; + unscaledvelocity.y = aimdir.y * D_80053DDC; + unscaledvelocity.z = aimdir.z * D_80053DDC; + + velocity.x = unscaledvelocity.x * g_GlobalTimerDelta; + velocity.y = unscaledvelocity.y * g_GlobalTimerDelta; + velocity.z = unscaledvelocity.z * g_GlobalTimerDelta; + + if (g_ClockTimer > 0) + { + velocity.x += (playerprop->pos.x - prevplayerpos->x) / g_GlobalTimerDelta; + velocity.y += (playerprop->pos.y - prevplayerpos->y) / g_GlobalTimerDelta; + velocity.z += (playerprop->pos.z - prevplayerpos->z) / g_GlobalTimerDelta; + } + } + + matrix_4x4_copy(&g_CurrentPlayer->hands[handnum].throw_item_pos_related, &shellmtx); + + shellmtx.m[3][0] = 0.0f; + shellmtx.m[3][1] = 0.0f; + shellmtx.m[3][2] = 0.0f; + + if (hand->rocket != NULL) + { + obj = (WeaponObjRecord *) hand->rocket; + hand->firedrocket = 1; + } + else + { + obj = (WeaponObjRecord *) create_new_item_instance_of_model(PROP_CHRROCKET, ITEM_ROCKETROUND); + } + + if (obj == NULL) + { + return; + } + + obj->timer = -1; + obj->runtime_bitflags &= ~RUNTIMEBITFLAG_OWNER; + obj->runtime_bitflags |= get_cur_playernum() << RUNTIMEBITSHIFT_OWNER; + + gunInitProjectileFromPlayer(obj, &spawnpos, &shellmtx, &velocity, (s32 *) &identitymtx); + + if (obj->runtime_bitflags & RUNTIMEBITFLAG_00000080) + { + obj->projectile->flags |= PROJECTILEFLAG_LAUNCHING; + + if (weaponid != ITEM_TANKSHELLS) + { + obj->projectile->flags |= PROJECTILEFLAG_00000020; + obj->projectile->unkB0 = obj->runtime_pos.y; + obj->projectile->unkB4 = obj->projectile->speed.y; + obj->projectile->unk10.x = unscaledvelocity.x; + obj->projectile->unk10.y = unscaledvelocity.y; + obj->projectile->unk10.z = unscaledvelocity.z; + obj->projectile->refreshrate = THROWN_ITEM_REFRESH_RATE; + + if (obj->projectile->sounds[0] == NULL) { - temp_s0->unk1C4 = 2.0f; + sndPlaySfx(g_musicSfxBufferPtr, 1, &obj->projectile->sounds[0]); + } + else if (obj->projectile->sounds[1] == NULL) + { + sndPlaySfx(g_musicSfxBufferPtr, 1, &obj->projectile->sounds[1]); + } + } + } +} + + +/** + * D_80053DDC belongs to gunFireTankShell, but must sit here + * immediately ahead of this function's pool for that function to match. + */ +GLOBAL_ASM( +.late_rodata +glabel D_80053DDC +.word 0x3f8e38e3 /*1.111111*/ +) + + +void gunUpdateAndFire(GUNHAND handnum) +{ + Mtxf *rwmtx; + Mtxf gunmtx; + Mtxf flashmtx; + Mtxf flash2mtx; + Mtxf tmpmtx; + ModelFileHeader *mdlhdr; + coord3d gunofs = D_80035C40; + Mtxf rotmtx; + Mtxf aimmtx; + struct hand *hand; + s32 *flashvisptr; + f32 *flashdata; + ModelNode *node; + s32 j; + ITEM_IDS item; + WeaponStats *itemstats; + f32 rndf; + u32 rnd; + f32 stackpad_scale; + coord3d blendedpos; + coord3d blendedlook; + coord3d blendedup; + s32 i; + coord3d trigrot; + coord3d taserrot; + coord3d fistrot; + f32 *cylinderdata; + u8 stackpad1[4]; + ModelNode **hammerdata; + Model *model; + coord3d flashpos; + f32 flashscale; + f32 flashext; + f32 *nodeptr; + f32 *nodepos; + f32 *swdata; + s32 sw6mtxidx; + f32 *hingedata; + f32 *sw7data; + s32 sw7mtxidx; + s32 shellidx; + u8 stackpad2[4]; + + flashvisptr = NULL; + flashdata = NULL; + hand = &g_CurrentPlayer->hands[handnum]; + item = get_item_in_hand_or_watch_menu(handnum); + itemstats = get_ptr_item_statistics(item); + + /** + * When switching from a single weapon to dual wielding, both gun models interpolate a little to the sides of the screen + * over a period of 4 seconds. And when switching back to a single weapon that weapon moves back more towards the + * center of the screen. + */ + if (handnum == GUNRIGHT) + { + if (bondwalkItemCheckBitflags(get_item_in_hand_or_watch_menu(1), WEAPONSTATBITFLAG_SHOW_FIRST_PERSON) != 0) + { + hand->field_A34 += (2.0f * g_GlobalTimerDelta) / 240.0f; + + if (hand->field_A34 > 2.0f) + { + hand->field_A34 = 2.0f; } } else { - temp_s0->unk1C4 = temp_s0->unk1C4 - ((2.0f * g_GlobalTimerDelta) / 240.0f); - if (temp_s0->unk1C4 < 0.0f) + hand->field_A34 -= (2.0f * g_GlobalTimerDelta) / 240.0f; + + if (hand->field_A34 < 0.0f) { - temp_s0->unk1C4 = 0.0f; + hand->field_A34 = 0.0f; } } } - else if (bondwalkItemCheckBitflags(get_item_in_hand_or_watch_menu(0), 0x800) != 0) + else if (bondwalkItemCheckBitflags(get_item_in_hand_or_watch_menu(0), WEAPONSTATBITFLAG_SHOW_FIRST_PERSON) != 0) { - temp_s0->unk1C4 = temp_s0->unk1C4 - ((2.0f * g_GlobalTimerDelta) / 240.0f); - if (temp_s0->unk1C4 < -2.0f) + hand->field_A34 -= (2.0f * g_GlobalTimerDelta) / 240.0f; + + if (hand->field_A34 < (-2.0f)) { - temp_s0->unk1C4 = -2.0f; + hand->field_A34 = -2.0f; } } else { - temp_s0->unk1C4 = temp_s0->unk1C4 + ((2.0f * g_GlobalTimerDelta) / 240.0f); - if (temp_s0->unk1C4 > 0.0f) + hand->field_A34 += (2.0f * g_GlobalTimerDelta) / 240.0f; + + if (hand->field_A34 > 0.0f) { - temp_s0->unk1C4 = 0.0f; + hand->field_A34 = 0.0f; } } - spE0.unk0 = D_80035C4C.unk0; - spE0.unk4 = D_80035C4C.unk4; - spE0.unk8 = D_80035C4C.unk8; - spD4.unk0 = D_80035C58.unk0; - spD4.unk4 = D_80035C58.unk4; - spD4.unk8 = D_80035C58.unk8; - spC8.unk0 = D_80035C64.unk0; - spC8.unk4 = D_80035C64.unk4; - spC8.unk8 = D_80035C64.unk8; - temp_v0_2 = temp_s0->unk198; - temp_t0 = temp_s0 + (((temp_v0_2 + 3) % 4) * 0xC); - sp44 = temp_t0; - temp_t1 = temp_s0 + (temp_v0_2 * 0xC); - sp40 = temp_t1; - temp_t2 = temp_s0 + (((temp_v0_2 + 1) % 4) * 0xC); - sp3C = temp_t2; - temp_t3 = temp_s0 + (((temp_v0_2 + 2) % 4) * 0xC); - sp38 = temp_t3; - sub_GAME_7F05AEFC(temp_t0 + 0x108, temp_t1 + 0x108, temp_t2 + 0x108, temp_t3 + 0x108, temp_s0->unk19C, &spE0); - sub_GAME_7F05AEFC(sp44 + 0x138, sp40 + 0x138, sp3C + 0x138, sp38 + 0x138, temp_s0->unk19C, &spD4); - sub_GAME_7F05AEFC(sp44 + 0x168, sp40 + 0x168, sp3C + 0x168, sp38 + 0x168, temp_s0->unk19C, &spC8); - temp_f16 = spE0 * g_CurrentPlayer->unkFC0; - spE0 = temp_f16; - temp_f10 = spE4 * g_CurrentPlayer->unkFC0; - spE4 = temp_f10; - spE8 *= g_CurrentPlayer->unkFC0; - spE0 = temp_f16 + temp_s0->unk1AC; - spE4 = temp_f10 + temp_s0->unk1B0; - var_v1 = 0; - spE0 += sub_GAME_7F05DCB8(arg0); + + /** + * Gun sway system. This moves the held weapons in figure-eight pattern which becomes bigger depending how fast the player is moving. + */ + blendedpos = D_80035C4C; + blendedlook = D_80035C58; + blendedup = D_80035C64; + + i = hand->curblendpos; + + coord3dCatmullRomInterp(&hand->blendpos[(i + 3) % 4], &hand->blendpos[i], &hand->blendpos[(i + 1) % 4], &hand->blendpos[(i + 2) % 4], hand->dampt, &blendedpos); + coord3dCatmullRomInterp(&hand->blendlook[(i + 3) % 4], &hand->blendlook[i], &hand->blendlook[(i + 1) % 4], &hand->blendlook[(i + 2) % 4], hand->dampt, &blendedlook); + coord3dCatmullRomInterp(&hand->blendup[(i + 3) % 4], &hand->blendup[i], &hand->blendup[(i + 1) % 4], &hand->blendup[(i + 2) % 4], hand->dampt, &blendedup); + + blendedpos.x *= g_CurrentPlayer->gunposamplitude; + blendedpos.y *= g_CurrentPlayer->gunposamplitude; + blendedpos.z *= g_CurrentPlayer->gunposamplitude; + blendedpos.x += hand->weapon_theta_displacement; + blendedpos.y += hand->weapon_verta_displacement; + blendedpos.x += sub_GAME_7F05DCB8(handnum); + + j = 0; + if (g_ClockTimer > 0) { do { - var_v1 += 1; - temp_s0->unkE4 = spE0 + (0.95f * temp_s0->unkE4); - temp_s0->unkE8 = spE4 + (0.95f * temp_s0->unkE8); - temp_s0->unkEC = spE8 + (0.95f * temp_s0->unkEC); - temp_s0->unkF0 = spD4 + (0.95f * temp_s0->unkF0); - temp_s0->unkF4 = spD8 + (0.95f * temp_s0->unkF4); - temp_s0->unkF8 = spDC + (0.95f * temp_s0->unkF8); - temp_s0->unkFC = spC8 + (0.95f * temp_s0->unkFC); - temp_s0->unk100 = spCC + (0.95f * temp_s0->unk100); - temp_s0->unk104 = spD0 + (0.95f * temp_s0->unk104); - } while (var_v1 < g_ClockTimer); + j += 1; + hand->spring_pos_x = (GUN_SPRING_DAMP * hand->spring_pos_x) + ((f32 *) (&blendedpos))[0]; + hand->spring_pos_y = (GUN_SPRING_DAMP * hand->spring_pos_y) + ((f32 *) (&blendedpos))[1]; + hand->spring_pos_z = (GUN_SPRING_DAMP * hand->spring_pos_z) + ((f32 *) (&blendedpos))[2]; + hand->spring_look_x = (GUN_SPRING_DAMP * hand->spring_look_x) + ((f32 *) (&blendedlook))[0]; + hand->spring_look_y = (GUN_SPRING_DAMP * hand->spring_look_y) + ((f32 *) (&blendedlook))[1]; + hand->spring_look_z = (GUN_SPRING_DAMP * hand->spring_look_z) + ((f32 *) (&blendedlook))[2]; + hand->spring_up_x = (GUN_SPRING_DAMP * hand->spring_up_x) + ((f32 *) (&blendedup))[0]; + hand->spring_up_y = (GUN_SPRING_DAMP * hand->spring_up_y) + ((f32 *) (&blendedup))[1]; + hand->spring_up_z = (GUN_SPRING_DAMP * hand->spring_up_z) + ((f32 *) (&blendedup))[2]; + } + while (j < g_ClockTimer); } - temp_s0->unkC0 = temp_s0->unkE4 * 0.050000012f; - temp_s0->unkC4 = temp_s0->unkE8 * 0.050000012f; - temp_s0->unkC8 = temp_s0->unkEC * 0.050000012f; - temp_s0->unkCC = temp_s0->unkF0 * 0.050000012f; - temp_s0->unkD0 = temp_s0->unkF4 * 0.050000012f; - temp_s0->unkD4 = temp_s0->unkF8 * 0.050000012f; - temp_s0->unkD8 = temp_s0->unkFC * 0.050000012f; - temp_s0->unkDC = temp_s0->unk100 * 0.050000012f; - temp_s0->unkE0 = temp_s0->unk104 * 0.050000012f; - if (arg0 == 0) + + hand->sway_pos_x = hand->spring_pos_x * GUN_SPRING_SCALE; + hand->sway_pos_y = hand->spring_pos_y * GUN_SPRING_SCALE; + hand->sway_pos_z = hand->spring_pos_z * GUN_SPRING_SCALE; + hand->sway_look_x = hand->spring_look_x * GUN_SPRING_SCALE; + hand->sway_look_y = hand->spring_look_y * GUN_SPRING_SCALE; + hand->sway_look_z = hand->spring_look_z * GUN_SPRING_SCALE; + hand->sway_up_x = hand->spring_up_x * GUN_SPRING_SCALE; + hand->sway_up_y = hand->spring_up_y * GUN_SPRING_SCALE; + hand->sway_up_z = hand->spring_up_z * GUN_SPRING_SCALE; + + // Offset the weapon to the right or left side of the screen depending on which hand it's in. + if (handnum == GUNRIGHT) { - sp194 = temp_s0->unk1B8 + (gunSetHorizontalOffset(arg0) + temp_s0->unkC0); + gunofs.x = (gunSetHorizontalOffset(handnum) + hand->sway_pos_x) + (*hand).gunofs2_x; } else { - sp194 = (gunSetHorizontalOffset(arg0) + temp_s0->unkC0) - temp_s0->unk1B8; + gunofs.x = (gunSetHorizontalOffset(handnum) + hand->sway_pos_x) - hand->gunofs2_x; } - sp198 = temp_s0->unk1BC + (spF8->unk8 + temp_s0->unkC4); - sp19C = temp_s0->unk1C0 + (spF8->unkC + temp_s0->unkC8); - if ((spFC == 0x19) || (spFC == 0x1E) || (spFC == 0x17)) + + gunofs.y = hand->gunofs2_y + (itemstats->PosY + hand->sway_pos_y); + gunofs.z = hand->gunofs2_z + (itemstats->PosZ + hand->sway_pos_z); + + if (((item == ITEM_ROCKETLAUNCH) || (item == ITEM_TRIGGER)) || (item == ITEM_WATCHLASER)) { - sp198 += g_CurrentPlayer->unkA0 / -100.0f; - sp19C += (3.0f * g_CurrentPlayer->unkA0) / -100.0f; - if ((spFC == 0x19) && ((cur_player_get_screen_setting(spFC) == 1) || (cur_player_get_screen_setting() == 2) || (get_screen_ratio() == 1))) + gunofs.y += g_CurrentPlayer->ducking_height_offset / (-100.0f); + gunofs.z += (3.0f * g_CurrentPlayer->ducking_height_offset) / (-100.0f); + + if ((item == ITEM_ROCKETLAUNCH) && (((cur_player_get_screen_setting() == SCREEN_SIZE_WIDESCREEN) || (cur_player_get_screen_setting() == SCREEN_SIZE_CINEMA)) || (get_screen_ratio() == SCREEN_RATIO_16_9))) { - sp198 -= 3.0f; + gunofs.y -= 3.0f; } } + else if (item == ITEM_TASER) + { + gunofs.y += (2.5f * g_CurrentPlayer->ducking_height_offset) / (-100.0f); + gunofs.z += (7.5f * g_CurrentPlayer->ducking_height_offset) / (-100.0f); + } else { - if (spFC == 0x1F) - { - sp198 += (2.5f * g_CurrentPlayer->unkA0) / -100.0f; - var_f10 = sp19C + ((7.5f * g_CurrentPlayer->unkA0) / -100.0f); - } - else - { - sp198 += (5.0f * g_CurrentPlayer->unkA0) / -100.0f; - var_f10 = sp19C + ((15.0f * g_CurrentPlayer->unkA0) / -100.0f); - } - sp19C = var_f10; + gunofs.y += (5.0f * g_CurrentPlayer->ducking_height_offset) / (-100.0f); + gunofs.z += (15.0f * g_CurrentPlayer->ducking_height_offset) / (-100.0f); } - if ((temp_s0->unkC != 0) && (bondwalkItemCheckBitflags(spFC, 0x20) != 0)) + + if ((hand->weapon_firing_status != 0) && (bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_00000020) != 0)) { - if (bondwalkItemCheckBitflags(spFC, 0x40) != 0) + if (bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_00000040) != 0) { - temp_v0_3 = randomGetNext(); - var_f8 = temp_v0_3; - if (temp_v0_3 < 0) - { - var_f8 += 4294967296.0f; - } - sp194 += 0.3f - (var_f8 * 2.3283064e-10f * 0.6f); + rnd = randomGetNext(); + rndf = (f32) ((u32) rnd); + gunofs.x += 0.3f - ((rndf * (1.0f / M_U32_MAX_VALUE_F)) * 0.6f); } - temp_v0_4 = randomGetNext(); - var_f16 = temp_v0_4; - if (temp_v0_4 < 0) - { - var_f16 += 4294967296.0f; - } - sp198 += 0.3f - (var_f16 * 2.3283064e-10f * 0.6f); - temp_v0_5 = randomGetNext(); - var_f4 = temp_v0_5; - if (temp_v0_5 < 0) - { - var_f4 += 4294967296.0f; - } - sp19C += 0.3f - (var_f4 * 2.3283064e-10f * 0.6f); + + rnd = randomGetNext(); + rndf = (f32) ((u32) rnd); + gunofs.y += 0.3f - ((rndf * (1.0f / M_U32_MAX_VALUE_F)) * 0.6f); + rnd = randomGetNext(); + rndf = (f32) ((u32) rnd); + gunofs.z += 0.3f - ((rndf * (1.0f / M_U32_MAX_VALUE_F)) * 0.6f); } - sp48 = getPlayer_c_screenwidth(); - sp4C = getPlayer_c_screenwidth(); - sp194 += (((g_CurrentPlayer->unkFFC - getPlayer_c_screenleft()) - (sp4C * 0.5f)) * spF8->unk18) / (sp48 * 0.5f); - sp50 = getPlayer_c_screentop(); - if ((getPlayer_c_screenheight() * 0.5f) < (g_CurrentPlayer->unk1000 - sp50)) + + gunofs.x += (((g_CurrentPlayer->field_FFC.x - getPlayer_c_screenleft()) - (getPlayer_c_screenwidth() * 0.5f)) * itemstats->PlayZ) / (getPlayer_c_screenwidth() * 0.5f); + + if ((g_CurrentPlayer->field_FFC.y - getPlayer_c_screentop()) > (getPlayer_c_screenheight() * 0.5f)) { - sp48 = getPlayer_c_screenheight(); - sp4C = getPlayer_c_screenheight(); - sp198 -= (((g_CurrentPlayer->unk1000 - getPlayer_c_screentop()) - (sp4C * 0.5f)) * spF8->unk14) / (sp48 * 0.5f); + gunofs.y -= (((g_CurrentPlayer->field_FFC.y - getPlayer_c_screentop()) - (getPlayer_c_screenheight() * 0.5f)) * itemstats->PlayY) / (getPlayer_c_screenheight() * 0.5f); } else { - sp48 = getPlayer_c_screenheight(); - sp4C = getPlayer_c_screenheight(); - sp198 -= (((g_CurrentPlayer->unk1000 - getPlayer_c_screentop()) - (sp4C * 0.5f)) * spF8->unk10) / (sp48 * 0.5f); + gunofs.y -= (((g_CurrentPlayer->field_FFC.y - getPlayer_c_screentop()) - (getPlayer_c_screenheight() * 0.5f)) * itemstats->PlayX) / (getPlayer_c_screenheight() * 0.5f); } + sub_GAME_7F05C614(); - matrix_4x4_set_identity(&sp154); - if ((spFC == 0x1E) || (spFC == 0x17)) + matrix_4x4_set_identity(&rotmtx); + + if ((item == ITEM_TRIGGER) || (item == ITEM_WATCHLASER)) { - spB8.unk0 = D_80035C70.unk0; - spB8.unk4 = D_80035C70.unk4; - spB8.unk8 = D_80035C70.unk8; - matrix_4x4_set_rotation_around_xyz(&spB8, &sp1A4); - matrix_4x4_multiply_homogeneous_in_place(&sp1A4, &sp154); + trigrot = D_80035C70; + matrix_4x4_set_rotation_around_xyz(&trigrot, &tmpmtx); + matrix_4x4_multiply_homogeneous_in_place(&tmpmtx, &rotmtx); } - else if (spFC == 0x1F) + else if (item == ITEM_TASER) { - spAC.unk0 = D_80035C7C.unk0; - spAC.unk4 = D_80035C7C.unk4; - spAC.unk8 = D_80035C7C.unk8; - matrix_4x4_set_rotation_around_xyz(&spAC, &sp1A4); - matrix_4x4_multiply_homogeneous_in_place(&sp1A4, &sp154); + taserrot = D_80035C7C; + matrix_4x4_set_rotation_around_xyz(&taserrot, &tmpmtx); + matrix_4x4_multiply_homogeneous_in_place(&tmpmtx, &rotmtx); } - else if ((spFC == 1) && (g_CurrentPlayer->unk2A38 == 0x11)) + else if ((item == ITEM_FIST) && (g_CurrentPlayer->cur_item_weapon_getname == ITEM_SNIPERRIFLE)) { - spA0.unk0 = D_80035C88.unk0; - spA0.unk4 = D_80035C88.unk4; - spA0.unk8 = D_80035C88.unk8; - matrix_4x4_set_rotation_around_xyz(&spA0, &sp1A4); - matrix_4x4_multiply_homogeneous_in_place(&sp1A4, &sp154); - sp194 += -2.5f; - sp198 += 27.8f; - sp19C += 2.0f; + fistrot = D_80035C88; + matrix_4x4_set_rotation_around_xyz(&fistrot, &tmpmtx); + matrix_4x4_multiply_homogeneous_in_place(&tmpmtx, &rotmtx); + gunofs.x += -2.5f; + gunofs.y += 27.8f; + gunofs.z += 2.0f; } - if (temp_s0->unkBC != 0) + + if (hand->field_92C != 0) { - sp194 += temp_s0->unkAC; - sp198 += temp_s0->unkB0; - sp19C += temp_s0->unkB4; - matrix_4x4_multiply_homogeneous_in_place(temp_s0 + 0x7C, &sp154); - sp154.m[3][0] = 0.0f; - sp154.m[3][1] = 0.0f; - sp154.m[3][2] = 0.0f; + gunofs.x += hand->field_8EC.m[3][0]; + gunofs.y += hand->field_8EC.m[3][1]; + gunofs.z += hand->field_8EC.m[3][2]; + matrix_4x4_multiply_homogeneous_in_place(&hand->field_8EC, &rotmtx); + rotmtx.m[3][0] = 0.0f; + rotmtx.m[3][1] = 0.0f; + rotmtx.m[3][2] = 0.0f; } else { - temp_s0->unk78 = 0.0f; - temp_s0->unk6C = 0.0f; - temp_s0->unk70 = 0.0f; - temp_s0->unk74 = 0.0f; + hand->field_8E8 = 0.0f; + hand->field_8DC = (-0.0f) + 0.0f; + hand->field_8E0 = 0.0f; + hand->field_8E4 = (-0.0f) + 0.0f; } - matrix_4x4_7F059908(&sp1A4, 0.0f, 0.0f, 0.0f, temp_s0->unkCC, temp_s0->unkD0, temp_s0->unkD4, temp_s0->unkD8, temp_s0->unkDC, temp_s0->unkE0); - matrix_4x4_multiply_homogeneous_in_place(&sp1A4, &sp154); - matrix_4x4_align(&sp1A4, 0.0f, sp194 - temp_s0->unk1C8, sp198 - temp_s0->unk1CC, sp19C - temp_s0->unk1D0); - matrix_4x4_multiply_homogeneous_in_place(&sp1A4, &sp154); - matrix_4x4_copy(&sp154, &sp264); - matrix_4x4_set_position(&sp194, &sp264); - temp_a1 = temp_s0 + 0x228; - sp44 = temp_a1; - matrix_4x4_copy(&sp264, temp_a1); - temp_a0 = temp_s0 + 0x268; - sp40 = temp_a0; - matrix_4x4_copy(temp_a0, temp_s0 + 0x2A8); - matrix_4x4_multiply_homogeneous(currentPlayerGetMatrix10D4(), sp44, sp40); - temp_s0->unkF = 1; - if ((get_ptr_weapon_model_header_line(spFC) == 0) || (bondwalkItemCheckBitflags(spFC, 0x800) == 0) || (bondwalkItemCheckBitflags(spFC, 0x2000) != 0) || (temp_v0_6 = temp_s0->unk24, (temp_v0_6 == 6)) || (temp_v0_6 == 7) || (Gun_hand_without_item(arg0) == 0) || (get_itemtype_in_hand(arg0) == 0)) + + matrix_4x4_set_basis_and_position_target(&tmpmtx, 0.0f, 0.0f, 0.0f, hand->sway_look_x, hand->sway_look_y, hand->sway_look_z, hand->sway_up_x, hand->sway_up_y, hand->sway_up_z); + matrix_4x4_multiply_homogeneous_in_place(&tmpmtx, &rotmtx); + matrix_4x4_align(&tmpmtx, 0.0f, gunofs.x - hand->field_A38, gunofs.y - hand->field_A3C, gunofs.z - hand->field_A40); + matrix_4x4_multiply_homogeneous_in_place(&tmpmtx, &rotmtx); + matrix_4x4_copy(&rotmtx, &gunmtx); + matrix_4x4_set_position(&gunofs, &gunmtx); + matrix_4x4_copy(&gunmtx, &hand->gunmtx_camspace); + matrix_4x4_copy(&hand->throw_item_pos_related, &hand->throw_item_pos_related_prev); + matrix_4x4_multiply_homogeneous(currentPlayerGetViewToWorldMtxf(), &hand->gunmtx_camspace, &hand->throw_item_pos_related); + hand->field_87F = 1; + + if (((((((get_ptr_weapon_model_header_line(item) == 0) || (bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_SHOW_FIRST_PERSON) == 0)) || (bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_HIDE_FIRST_PERSON_HAND) != 0)) + || (hand->weapon_action_state == GUN_ANIM_STATE_SWITCH_SWAP)) || (hand->weapon_action_state == GUN_ANIM_STATE_SWITCH_HOLD)) || (Gun_hand_without_item(handnum) == 0)) || (get_itemtype_in_hand(handnum) == 0)) { - temp_s0->unkF = 0; + hand->field_87F = 0; } - if ((temp_s0->unk2C <= 0) && (bondwalkItemCheckBitflags(spFC, 2) != 0)) + + if ((hand->weapon_ammo_in_magazine <= 0) && (bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_SINGLE_USE_RELOAD) != 0)) { - temp_s0->unkF = 0; + hand->field_87F = 0; } - if (temp_s0->unkF != 0) + + if (hand->field_87F != 0) { - temp_v0_7 = g_CurrentPlayer + (arg0 << 5); - sp1A0 = temp_v0_7 + 0x810; - sp100 = 0; - temp_v0_8 = dynAllocate(temp_v0_7->unk81E << 6); - sp2A4 = temp_v0_8; - var_v1_2 = sp100; - var_a0 = temp_v0_8; - if (sp1A0->unkE > 0) + mdlhdr = &g_CurrentPlayer->copy_of_body_obj_header[handnum]; + rwmtx = (Mtxf *) dynAllocate(mdlhdr->numMatrices * ((s32) (sizeof(Mtxf)))); + j = 0; + + if (mdlhdr->numMatrices > 0) { do { - sp100 = var_v1_2; - sp44 = var_a0; - matrix_4x4_set_identity(var_a0); - var_v1_2 += 1; - var_a0 += 0x40; - } while (var_v1_2 < sp1A0->unkE); - } - modelCalculateRwDataLen(sp1A0); - #ifdef DEBUG - if (sp1a0->unk14 >= 32) ossyncprintf("Increase GUNSAVESIZE to %d!!! ", sp1a0->unk14); - #endif - temp_a0_2 = temp_s0 + 0x2F8; - sp44 = temp_a0_2; - modelInit(temp_a0_2, sp1A0, temp_s0 + 0x318); - sub_GAME_7F05E978(temp_a0_2, 1); - sub_GAME_7F05EA94(temp_a0_2, temp_s0->unkE); - temp_v0_9 = sp1A0->unk8; - temp_a0_3 = temp_v0_9->unk4; - if (temp_a0_3 != NULL) - { - sp10C = temp_s0 + (temp_a0_3->unk4->unk4 * 4) + 0x318; - } - temp_v1 = temp_v0_9->unkC; - if (temp_v1 != NULL) - { - sp108 = temp_v1->unk4; - } - temp_s0->unk304 = sp2A4; - if ((bondwalkItemCheckBitflags(spFC, 0x400) != 0) && (arg0 == 1)) - { - matrix_column_1_scalar_multiply(0xBF800000, &sp264); - } - matrix_scalar_multiply(0.10000001f, &sp264); - matrix_4x4_copy(&sp264, sp2A4); - if (&skeleton_gun_revolver == sp1A0->unk4) - { - var_v0 = sp1A0->unk8; - temp_v1_2 = var_v0->unk10; - if (temp_v1_2 != NULL) - { - var_f12 = 0.0f; - temp_a0_4 = temp_v1_2->unk4; - if (spFC == 0x12) - { - if (temp_s0->unk24 == 1) - { - var_f12 = (((temp_s0->unk20 - (temp_s0->unk2C * 6)) + 0x1E) * 6.2831855f) / 36.0f; - } - else - { - var_f12 = ((6 - temp_s0->unk2C) * 6.2831855f) / 6.0f; - } - } - else if (temp_s0->unk24 == 1) - { - temp_v0_10 = temp_s0->unk20; - if (temp_v0_10 < 6) - { - var_f12 = (temp_v0_10 * 6.2831855f) / 36.0f; - } - } - sp9C = temp_a0_4; - matrix_4x4_set_rotation_around_z(var_f12, temp_a0_4, &sp1A4); - matrix_4x4_set_position(sp9C, &sp1A4); - matrix_4x4_multiply(&sp264, &sp1A4, sp2A4 + 0xC0); - var_v0 = sp1A0->unk8; + matrix_4x4_set_identity((Mtxf *) (((u8 *) rwmtx) + (j * ((s32) (sizeof(Mtxf)))))); + j += 1; } - temp_v1_3 = var_v0->unk14; - if (temp_v1_3 != NULL) + while (j < mdlhdr->numMatrices); + } + + modelCalculateRwDataLen(mdlhdr); +#ifdef DEBUG + /** + * The model's runtime data is written into hand->modeldatas, which is a + * fixed run of 32 words (modeldatas .. field_C04, ending at volley). + */ + if (mdlhdr->numRecords >= 32) + { + osSyncPrintf("Increase GUNSAVESIZE to %d!!! ", mdlhdr->numRecords); + } +#endif + model = (Model *) (&hand->field_B68); + + if (mdlhdr->Switches); + + modelInit(model, mdlhdr, (s32 *) (&hand->modeldatas)); + sub_GAME_7F05E978(model, 1); + sub_GAME_7F05EA94(model, hand->field_87E); + node = mdlhdr->Switches[1]; + + if (node != NULL) + { + if (&node->Data->Switch); + + flashvisptr = ((s32 *) (&hand->modeldatas)) + node->Data->Switch.RwDataIndex; + } + + if (mdlhdr->Switches[3] != NULL) + { + flashdata = (f32 *) mdlhdr->Switches[3]->Data; + } + + hand->mtxlist = rwmtx; + + if ((bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_MIRROR_DUAL) != 0) && (handnum == GUNLEFT)) + { + matrix_column_1_scalar_multiply(-1.0f, gunmtx.m[0]); + } + + matrix_scalar_multiply(IDO_POINT_ONE, gunmtx.m[0]); + matrix_4x4_copy(&gunmtx, rwmtx); + + if (mdlhdr->Skeleton == (&skeleton_gun_revolver)) + { + swdata = (f32 *) mdlhdr->Switches[4]; + + if (swdata != NULL) { - temp_a0_5 = temp_v1_3->unk4; - if (temp_s0->unk24 == 1) + rndf = 0.0f; + cylinderdata = (f32 *) ((ModelNode *) swdata)->Data; + + if (item == ITEM_RUGER) { - temp_v0_11 = temp_s0->unk20; - if (temp_v0_11 < 3) + if (hand->weapon_action_state == 1) { - var_f6 = 2.0f * (-temp_v0_11 * 0.5235988f); +#if defined(VERSION_EU) + rndf = (((hand->field_890 - (hand->weapon_ammo_in_magazine * 5)) + 0x19) * M_TAU_F) / 30.0f; +#else + rndf = (((hand->field_890 - (hand->weapon_ammo_in_magazine * 6)) + 0x1E) * M_TAU_F) / 36.0f; +#endif } else { - var_f6 = 2.0f * (-(6 - temp_v0_11) * 0.5235988f); + rndf = ((6 - hand->weapon_ammo_in_magazine) * M_TAU_F) / 6.0f; } - sp94 = temp_a0_5; - matrix_4x4_set_rotation_around_x(var_f6 / 6.0f, temp_a0_5, &sp1A4); - matrix_4x4_set_position(sp94, &sp1A4); + } + else if (hand->weapon_action_state == 1) + { +#if defined(VERSION_EU) + if (hand->field_890 < 5) + { + rndf = (hand->field_890 * M_TAU_F) / 30.0f; + } +#else + if (hand->field_890 < 6) + { + rndf = (hand->field_890 * M_TAU_F) / 36.0f; + } +#endif + } + + matrix_4x4_set_rotation_around_z(rndf, &tmpmtx); + matrix_4x4_set_position((coord3d *) cylinderdata, &tmpmtx); + matrix_4x4_multiply(&gunmtx, &tmpmtx, &rwmtx[3]); + } + + swdata = (f32 *) mdlhdr->Switches[5]; + + if (swdata != NULL) + { + hammerdata = (ModelNode **) ((ModelNode *) swdata)->Data; + + if (hand->weapon_action_state == 1) + { +#if defined(VERSION_EU) + if (hand->field_890 < 2) + { + rndf = (2.0f * ((-((f32) hand->field_890)) * DegToRad(30.0f))) / 5.0f; + } + else + { + rndf = (2.0f * ((-((f32) (5 - hand->field_890))) * DegToRad(30.0f))) / 5.0f; + } +#else + if (hand->field_890 < 3) + { + rndf = (2.0f * ((-((f32) hand->field_890)) * DegToRad(30.0f))) / 6.0f; + } + else + { + rndf = (2.0f * ((-((f32) (6 - hand->field_890))) * DegToRad(30.0f))) / 6.0f; + } +#endif + matrix_4x4_set_rotation_around_x(rndf, &tmpmtx); + matrix_4x4_set_position((coord3d *) hammerdata, &tmpmtx); } else { - matrix_4x4_set_identity_and_position(temp_a0_5, &sp1A4); + matrix_4x4_set_identity_and_position((coord3d *) hammerdata, &tmpmtx); } - matrix_4x4_multiply(&sp264, &sp1A4, sp2A4 + 0x100); + + matrix_4x4_multiply(&gunmtx, &tmpmtx, &rwmtx[4]); } } - if (sp10C != NULL) + + if (flashvisptr != NULL) { - *sp10C = 0; + *flashvisptr = 0; } - if (sp108 != NULL) + + if (flashdata != NULL) { - temp_v0_12 = randomGetNext(); - var_f8_2 = temp_v0_12; - if (temp_v0_12 < 0) + rnd = randomGetNext(); + rndf = (f32) ((u32) rnd); + flashscale = ((rndf * (1.0f / M_U32_MAX_VALUE_F)) * 0.25f) + 1.0f; + flashext = itemstats->MuzzleFlashExtension; + + if (bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_00000001) != 0) { - var_f8_2 += 4294967296.0f; - } - sp80 = (var_f8_2 * 2.3283064e-10f * 0.25f) + 1.0f; - sp7C = spF8->unk0; - if (bondwalkItemCheckBitflags(spFC, 1) != 0) - { - temp_v0_13 = randomGetNext(sp108); - var_f10_2 = temp_v0_13; - if (temp_v0_13 < 0) - { - var_f10_2 += 4294967296.0f; - } - matrix_4x4_set_rotation_around_z(var_f10_2 * 2.3283064e-10f * 6.2831855f, &sp224); - matrix_4x4_set_position(sp108, &sp224); + rnd = randomGetNext(); + rndf = (f32) ((u32) rnd); + matrix_4x4_set_rotation_around_z((rndf * (1.0f / M_U32_MAX_VALUE_F)) * M_TAU_F, &flashmtx); + matrix_4x4_set_position((coord3d *) flashdata, &flashmtx); } else { - matrix_4x4_set_identity_and_position(sp108, &sp224); + matrix_4x4_set_identity_and_position((coord3d *) flashdata, &flashmtx); } - matrix_scalar_multiply(sp80, &sp224); - matrix_column_3_scalar_multiply(sp7C, &sp224); - matrix_4x4_multiply_in_place(&sp264, &sp224); - matrix_4x4_copy(&sp224, sp2A4 + 0x40); - temp_s0->unk2E8 = sp254; - temp_s0->unk2EC = sp258; - temp_s0->unk2F0 = sp25C; - mtx4TransformVecInPlace(currentPlayerGetMatrix10D4(), temp_s0 + 0x2E8); - temp_s0->unk2F4 = -sp25C; - if (temp_s0->unkD != 0) + + matrix_scalar_multiply(flashscale, flashmtx.m[0]); + matrix_column_3_scalar_multiply(flashext, flashmtx.m[0]); + matrix_4x4_multiply_in_place(&gunmtx, &flashmtx); + matrix_4x4_copy(&flashmtx, &rwmtx[1]); + + hand->field_B58.x = flashmtx.m[3][0]; + hand->field_B58.y = flashmtx.m[3][1]; + hand->field_B58.z = flashmtx.m[3][2]; + mtx4TransformVecInPlace(currentPlayerGetViewToWorldMtxf(), &hand->field_B58); + hand->field_B64 = -flashmtx.m[3][2]; + + if (hand->field_87D != 0) { - if (sp10C != NULL) + if (flashvisptr != NULL) { - *sp10C = 1; + *flashvisptr = 1; } - temp_v1_4 = sp1A0->unk8->unk8; - if (temp_v1_4 != NULL) + + nodeptr = (f32 *) mdlhdr->Switches[2]; + + if (nodeptr != NULL) { - temp_v0_14 = temp_v1_4->unk4; - sp84 = sp254 + ((temp_v0_14->unk0 * sp224) + (temp_v0_14->unk4 * sp234) + (temp_v0_14->unk8 * sp244)); - temp_f16_2 = sp258 + ((temp_v0_14->unk0 * sp228) + (temp_v0_14->unk4 * sp238) + (temp_v0_14->unk8 * sp248)); - sp88 = temp_f16_2; - temp_f10_2 = sp25C + ((temp_v0_14->unk0 * sp22C) + (temp_v0_14->unk4 * sp23C) + (temp_v0_14->unk8 * sp24C)); - sp8C = temp_f10_2; - matrix_4x4_align(&sp1E4, randomGetNext() * 2.3283064e-10f * 6.2831855f, -sp84, -temp_f16_2, -temp_f10_2); - matrix_scalar_multiply(0.10000001f * sp80, &sp1E4); - matrix_4x4_7F059B58(&sp114, 0, sp194 - temp_s0->unk1C8, sp198 - temp_s0->unk1CC, sp19C - temp_s0->unk1D0); - matrix_4x4_multiply_in_place(&sp114, sp1E4.m[0]); - matrix_row_3_scalar_multiply(sp7C, &sp1E4); - matrix_4x4_multiply_in_place(&sp154, sp1E4.m[0]); - matrix_4x4_set_position(&sp84, &sp1E4); - matrix_4x4_copy(&sp1E4, sp2A4 + 0x80); + nodepos = (f32 *) ((ModelNode *) nodeptr)->Data; + flashpos.x = (((((f32 *) nodepos)[0] * flashmtx.m[0][0]) + (((f32 *) nodepos)[1] * flashmtx.m[1][0])) + (((f32 *) nodepos)[2] * flashmtx.m[2][0])) + flashmtx.m[3][0]; + flashpos.y = (((((f32 *) nodepos)[0] * flashmtx.m[0][1]) + (((f32 *) nodepos)[1] * flashmtx.m[1][1])) + (((f32 *) nodepos)[2] * flashmtx.m[2][1])) + flashmtx.m[3][1]; + flashpos.z = (((((f32 *) nodepos)[0] * flashmtx.m[0][2]) + (((f32 *) nodepos)[1] * flashmtx.m[1][2])) + (((f32 *) nodepos)[2] * flashmtx.m[2][2])) + flashmtx.m[3][2]; + + matrix_4x4_align(&flash2mtx, (randomGetNext() * (1.0f / M_U32_MAX_VALUE_F)) * M_TAU_F, -flashpos.x, -flashpos.y, -flashpos.z); + matrix_scalar_multiply(IDO_POINT_ONE * flashscale, flash2mtx.m[0]); + matrix_4x4_set_rotation_axis_angle(&aimmtx, 0, gunofs.x - hand->field_A38, gunofs.y - hand->field_A3C, gunofs.z - hand->field_A40); + matrix_4x4_multiply_in_place(&aimmtx, &flash2mtx); + matrix_row_3_scalar_multiply(flashext, flash2mtx.m[0]); + matrix_4x4_multiply_in_place(&rotmtx, &flash2mtx); + matrix_4x4_set_position(&flashpos, &flash2mtx); + matrix_4x4_copy(&flash2mtx, &rwmtx[2]); } - if (&skeleton_gun_kf7 == sp1A0->unk4) + + if (mdlhdr->Skeleton == (&skeleton_gun_kf7)) { - temp_v1_5 = sp1A0->unk8->unk10; - if (temp_v1_5 != NULL) + nodeptr = (f32 *) mdlhdr->Switches[4]; + + if (nodeptr != NULL) { - temp_v0_15 = temp_v1_5->unk4; - sp84 = sp254 + ((temp_v0_15->unk0 * sp224) + (temp_v0_15->unk4 * sp234) + (temp_v0_15->unk8 * sp244)); - sp88 = sp258 + ((temp_v0_15->unk0 * sp228) + (temp_v0_15->unk4 * sp238) + (temp_v0_15->unk8 * sp248)); - sp40 = sp2A4 + 0xC0; - sp8C = sp25C + ((temp_v0_15->unk0 * sp22C) + (temp_v0_15->unk4 * sp23C) + (temp_v0_15->unk8 * sp24C)); - sp38 = 0.10000001f * sp80; - matrix_4x4_align(&sp1E4, randomGetNext() * 2.3283064e-10f * 6.2831855f, -sp84, -sp88, -sp8C); - matrix_scalar_multiply(sp38, &sp1E4); - matrix_4x4_7F059B58(&sp114, 0, sp194 - temp_s0->unk1C8, sp198 - temp_s0->unk1CC, sp19C - temp_s0->unk1D0); - matrix_4x4_multiply_in_place(&sp114, sp1E4.m[0]); - matrix_row_3_scalar_multiply(sp7C, &sp1E4); - matrix_4x4_multiply_in_place(&sp154, sp1E4.m[0]); - matrix_4x4_set_position(&sp84, &sp1E4); - matrix_4x4_copy(&sp1E4, sp40); + nodepos = (f32 *) ((ModelNode *) nodeptr)->Data; + flashpos.x = (((((f32 *) nodepos)[0] * flashmtx.m[0][0]) + (((f32 *) nodepos)[1] * flashmtx.m[1][0])) + (((f32 *) nodepos)[2] * flashmtx.m[2][0])) + flashmtx.m[3][0]; + flashpos.y = (((((f32 *) nodepos)[0] * flashmtx.m[0][1]) + (((f32 *) nodepos)[1] * flashmtx.m[1][1])) + (((f32 *) nodepos)[2] * flashmtx.m[2][1])) + flashmtx.m[3][1]; + flashpos.z = (((((f32 *) nodepos)[0] * flashmtx.m[0][2]) + (((f32 *) nodepos)[1] * flashmtx.m[1][2])) + (((f32 *) nodepos)[2] * flashmtx.m[2][2])) + flashmtx.m[3][2]; + ((f32 *) stackpad2)[-8] = IDO_POINT_ONE * flashscale; + matrix_4x4_align(&flash2mtx, (randomGetNext() * (1.0f / M_U32_MAX_VALUE_F)) * M_TAU_F, -flashpos.x, -flashpos.y, -flashpos.z); + matrix_scalar_multiply(((f32 *) stackpad2)[-8], flash2mtx.m[0]); + matrix_4x4_set_rotation_axis_angle(&aimmtx, 0, gunofs.x - hand->field_A38, gunofs.y - hand->field_A3C, gunofs.z - hand->field_A40); + matrix_4x4_multiply_in_place(&aimmtx, &flash2mtx); + matrix_row_3_scalar_multiply(flashext, flash2mtx.m[0]); + matrix_4x4_multiply_in_place(&rotmtx, &flash2mtx); + matrix_4x4_set_position(&flashpos, &flash2mtx); + matrix_4x4_copy(&flash2mtx, &rwmtx[3]); } } } - var_v0_2 = sp1A0->unk8; } else { - temp_s0->unk2E8 = temp_s0->unk298; - temp_s0->unk2F4 = -temp_s0->unk260; - temp_s0->unk2EC = temp_s0->unk29C; - temp_s0->unk2F0 = temp_s0->unk2A0; - var_v0_2 = sp1A0->unk8; + hand->field_B58.x = hand->throw_item_pos_related.m[3][0]; + hand->field_B58.y = hand->throw_item_pos_related.m[3][1]; + hand->field_B58.z = hand->throw_item_pos_related.m[3][2]; + hand->field_B64 = -hand->gunmtx_camspace.m[3][2]; } - temp_a0_6 = var_v0_2->unk18; - if (temp_a0_6 != NULL) + + node = mdlhdr->Switches[6]; + + if (node != NULL) { - sp70 = temp_a0_6->unk4; - sp6C = modelFindNodeMtxIndex(temp_a0_6, 0); - sub_GAME_7F05E6B4(arg0, temp_s0->unk10); - if ((sp1A0->unkC >= 0x1D) && (temp_v1_6 = sp1A0->unk8->unk70, (temp_v1_6 != NULL))) + swdata = (f32 *) node->Data; + sw6mtxidx = modelFindNodeMtxIndex(node, 0); + sub_GAME_7F05E6B4(handnum, hand->weapon_hold_time); + + if ((mdlhdr->numSwitches >= 0x1D) && (mdlhdr->Switches[28] != NULL)) { - temp_v0_16 = temp_v1_6->unk4; - sp68 = temp_v0_16; - guRotateF(&sp1A4, (((temp_s0->unk214 + 6.2831855f) - get_value_if_watch_is_on_hand_or_not(arg0)) * 360.0f) / 6.2831855f, temp_v0_16->unk0 - temp_v0_16->unkC, temp_v0_16->unk4 - temp_v0_16->unk10, temp_v0_16->unk8 - temp_v0_16->unk14); - matrix_4x4_set_position(sp70, &sp1A4); + hingedata = (f32 *) mdlhdr->Switches[28]->Data; + guRotateF(tmpmtx.m, (((hand->field_A84 + M_TAU_F) - get_value_if_watch_is_on_hand_or_not(handnum)) * 360.0f) / M_TAU_F, hingedata[0] - hingedata[3], hingedata[1] - hingedata[4], hingedata[2] - hingedata[5]); + matrix_4x4_set_position((coord3d *) swdata, &tmpmtx); } else { - matrix_4x4_set_position_and_rotation_around_y(sp70, temp_s0->unk214, &sp1A4); + matrix_4x4_set_position_and_rotation_around_y(swdata, hand->field_A84, &tmpmtx); } - matrix_4x4_multiply_homogeneous(&sp264, &sp1A4, &sp2A4[sp6C]); + + matrix_4x4_multiply_homogeneous(&gunmtx, &tmpmtx, &rwmtx[sw6mtxidx]); } - if (sp1A0->unkC >= 0x1E) + + if (mdlhdr->numSwitches >= 0x1E) { - seems_to_load_cuff_microcode(sp44, sp1A0, 0x1D); + bondviewSelectCuff(model, mdlhdr, 0x1D); } - temp_a0_7 = sp1A0->unk8->unk1C; - if (temp_a0_7 != NULL) + + node = mdlhdr->Switches[7]; + + if (node != NULL) { - sp64 = temp_a0_7->unk4; - sp60 = modelFindNodeMtxIndex(temp_a0_7, 0); - sub_GAME_7F05E83C(arg0); - matrix_4x4_set_identity_and_position(sp64, &sp1A4); - sp1A4.m[3][2] -= temp_s0->unk218; - matrix_4x4_multiply(&sp264, &sp1A4, &sp2A4[sp60]); + sw7data = (f32 *) node->Data; + sw7mtxidx = modelFindNodeMtxIndex(node, 0); + sub_GAME_7F05E83C(handnum); + matrix_4x4_set_identity_and_position((coord3d *) sw7data, &tmpmtx); + tmpmtx.m[3][2] -= hand->field_A88; + matrix_4x4_multiply(&gunmtx, &tmpmtx, &rwmtx[sw7mtxidx]); } - var_v1_3 = 0; - var_a2 = NULL; - if (sp1A0->unkC >= 0x13) + + shellidx = 0; + + /** + * For the shotguns, show or hide the shells in the shell holder based on how much ammunition is in the player's reserve. + */ + if (mdlhdr->numSwitches >= 0x13) { do { - temp_a1_2 = (sp1A0->unk8 + var_a2)->unk48; - if (temp_a1_2 != 0) + if (mdlhdr->Switches[18 + shellidx] != 0) { - sp5C = var_v1_3; - sp40 = var_a2; - temp_v0_17 = modelGetNodeRwData(sp44, temp_a1_2, var_a2, 5); - if (temp_v0_17 != NULL) + nodeptr = (f32 *) modelGetNodeRwData(model, mdlhdr->Switches[18 + shellidx]); + + if (nodeptr != NULL) { - *temp_v0_17 = (temp_s0->unk34 < (5 - var_v1_3)) ^ 1; + *((s32 *) nodeptr) = hand->numvisibleshells >= (5 - shellidx); } } - temp_a1_3 = (sp1A0->unk8 + var_a2)->unk5C; - if (temp_a1_3 != 0) + + if (mdlhdr->Switches[23 + shellidx] != 0) { - sp5C = var_v1_3; - sp40 = var_a2; - temp_v0_18 = modelGetNodeRwData(sp44, temp_a1_3, var_a2, 5); - if (temp_v0_18 != NULL) + nodeptr = (f32 *) modelGetNodeRwData(model, mdlhdr->Switches[23 + shellidx]); + + if (nodeptr != NULL) { - *temp_v0_18 = (temp_s0->unk34 < (5 - var_v1_3)) ^ 1; + *((s32 *) nodeptr) = hand->numvisibleshells >= (5 - shellidx); } } - var_v1_3 += 1; - var_a2 += 4; - } while (var_v1_3 != 5); + + shellidx += 1; + } + while (shellidx != 5); } - sub_GAME_7F06EFC4(sp44); - if (temp_s0->unkC != 0) + + modelUpdateNodeRelations(model); + + if (hand->weapon_firing_status != 0) { - switch (spFC) + switch (item) { - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - case 12: - case 13: - case 14: - case 17: - case 18: - case 19: - case 20: - case 21: - sub_GAME_7F061BF4(arg0); - temp_s0->unk30 = temp_s0->unk30 + 1; - break; - case 22: - case 23: - sub_GAME_7F061BF4(arg0); - break; + case ITEM_WPPK: + case ITEM_WPPKSIL: + case ITEM_TT33: + case ITEM_SKORPION: + case ITEM_AK47: + case ITEM_UZI: + case ITEM_MP5K: + case ITEM_MP5KSIL: + case ITEM_SPECTRE: + case ITEM_M16: + case ITEM_FNP90: + case ITEM_SNIPERRIFLE: + case ITEM_RUGER: + case ITEM_GOLDENGUN: + case ITEM_SILVERWPPK: + case ITEM_GOLDWPPK: + gunCreateBeamForHand(handnum); + hand->field_8A0 = hand->field_8A0 + 1; + break; + case ITEM_LASER: + case ITEM_WATCHLASER: +#if defined(VERSION_JP) || defined(VERSION_EU) + hand->field_8A0 = hand->field_8A0 + 1; +#endif + gunCreateBeamForHand(handnum); + break; } } } - if (spFC == 0x19) + + if (item == ITEM_ROCKETLAUNCH) { - sub_GAME_7F05F928(arg0); + gunUpdateAttachedRocket(handnum); } - if (temp_s0->unkC != 0) + + if (hand->weapon_firing_status != 0) { - sub_GAME_7F068508(arg0, bondviewGetPlayerStanHeight(g_CurrentPlayer)); - if (spFC == 0x18) + sub_GAME_7F068508(handnum, bondviewGetPlayerStanHeight(g_CurrentPlayer)); + + if (item == ITEM_GRENADELAUNCH) { - sub_GAME_7F05F73C(arg0); + gunSpawnGLGrenade(handnum); return; } - if (spFC == 0x1A) + + if (item == ITEM_GRENADE) { - generate_player_thrown_grenade(arg0); + generate_player_thrown_grenade(handnum); return; } - if (spFC == 0x19) + + if (item == ITEM_ROCKETLAUNCH) { - gunFireTankShell(arg0); + gunFireTankShell(handnum); return; } - if (spFC == 3) + + if (item == ITEM_THROWKNIFE) { - generate_player_thrown_knife(arg0); + generate_player_thrown_knife(handnum); return; } - if ((spFC == 0x1D) || (spFC == 0x1C) || (spFC == 0x1B) || (spFC == 0x21) || (spFC == 0x2F) || (spFC == 0x30) || (spFC == 0x3D) || (spFC == 0x22)) + + if ((((((((item == ITEM_REMOTEMINE) || (item == ITEM_PROXIMITYMINE)) || (item == ITEM_TIMEDMINE)) || (item == ITEM_BOMBCASE)) || (item == ITEM_BUG)) || (item == ITEM_MICROCAMERA)) || (item == ITEM_GOLDENEYEKEY)) || (item == ITEM_PLASTIQUE)) { - generate_player_thrown_object(arg0); + generate_player_thrown_object(handnum); return; } - if (spFC == 0x23) + + if (item == ITEM_FLAREPISTOL) { - sub_GAME_7F05F73C(arg0); + gunSpawnGLGrenade(handnum); return; } - if (spFC == 0x24) + + if (item == ITEM_PITONGUN) { - sub_GAME_7F05F73C(arg0); + gunSpawnGLGrenade(handnum); } } } -#else - -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel D_80053DE0 -.word 0x3f733333 /*0.94999999*/ -glabel D_80053DE4 -.word 0x3d4cccd0 /*0.050000012*/ -glabel D_80053DE8 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053DEC -.word 0x3e99999a /*0.30000001*/ -glabel D_80053DF0 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053DF4 -.word 0x3e99999a /*0.30000001*/ -glabel D_80053DF8 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053DFC -.word 0x3e99999a /*0.30000001*/ -glabel D_80053E00 -.word 0x41de6666 /*27.799999*/ -glabel D_80053E04 -.word 0x3dccccce /*0.10000001*/ -glabel D_80053E08 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E0C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E10 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E14 -.word 0x3f060a92 /*0.52359879*/ -glabel D_80053E18 -.word 0x3f060a92 /*0.52359879*/ -glabel D_80053E1C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E20 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E24 -.word 0x3dccccce /*0.10000001*/ -glabel D_80053E28 -.word 0x3dccccce /*0.10000001*/ -glabel D_80053E2C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E30 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E34 -.word 0x40c90fdb /*6.2831855*/ - -/*D:80053E38*/ -glabel jpt_weapon_bullet_type -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_shotgun_mine -.word weapon_bullet_type_shotgun_mine -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_none -.word weapon_bullet_type_none -.size jpt_weapon_bullet_type, . - jpt_weapon_bullet_type - -.text -glabel handles_firing_or_throwing_weapon_in_hand -/* 094AF8 7F05FFC8 27BDFD58 */ addiu $sp, $sp, -0x2a8 -/* 094AFC 7F05FFCC 3C0F8003 */ lui $t7, %hi(D_80035C40) -/* 094B00 7F05FFD0 AFBF0034 */ sw $ra, 0x34($sp) -/* 094B04 7F05FFD4 AFB00030 */ sw $s0, 0x30($sp) -/* 094B08 7F05FFD8 25EF5C40 */ addiu $t7, %lo(D_80035C40) # addiu $t7, $t7, 0x5c40 -/* 094B0C 7F05FFDC 8DE10000 */ lw $at, ($t7) -/* 094B10 7F05FFE0 27AE0194 */ addiu $t6, $sp, 0x194 -/* 094B14 7F05FFE4 8DED0004 */ lw $t5, 4($t7) -/* 094B18 7F05FFE8 ADC10000 */ sw $at, ($t6) -/* 094B1C 7F05FFEC 8DE10008 */ lw $at, 8($t7) -/* 094B20 7F05FFF0 0004C0C0 */ sll $t8, $a0, 3 -/* 094B24 7F05FFF4 0304C023 */ subu $t8, $t8, $a0 -/* 094B28 7F05FFF8 0018C080 */ sll $t8, $t8, 2 -/* 094B2C 7F05FFFC 0304C021 */ addu $t8, $t8, $a0 -/* 094B30 7F060000 3C198008 */ lui $t9, %hi(g_CurrentPlayer) -/* 094B34 7F060004 ADCD0004 */ sw $t5, 4($t6) -/* 094B38 7F060008 ADC10008 */ sw $at, 8($t6) -/* 094B3C 7F06000C 8F39A0B0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 094B40 7F060010 0018C080 */ sll $t8, $t8, 2 -/* 094B44 7F060014 0304C021 */ addu $t8, $t8, $a0 -/* 094B48 7F060018 0018C0C0 */ sll $t8, $t8, 3 -/* 094B4C 7F06001C 03388021 */ addu $s0, $t9, $t8 -/* 094B50 7F060020 AFA0010C */ sw $zero, 0x10c($sp) -/* 094B54 7F060024 AFA00108 */ sw $zero, 0x108($sp) -/* 094B58 7F060028 26100870 */ addiu $s0, $s0, 0x870 -/* 094B5C 7F06002C 0FC17691 */ jal get_item_in_hand_or_watch_menu -/* 094B60 7F060030 AFA402A8 */ sw $a0, 0x2a8($sp) -/* 094B64 7F060034 AFA200FC */ sw $v0, 0xfc($sp) -/* 094B68 7F060038 0FC1722D */ jal get_ptr_item_statistics -/* 094B6C 7F06003C 00402025 */ move $a0, $v0 -/* 094B70 7F060040 8FAE02A8 */ lw $t6, 0x2a8($sp) -/* 094B74 7F060044 AFA200F8 */ sw $v0, 0xf8($sp) -/* 094B78 7F060048 15C0002D */ bnez $t6, .L7F060100 -/* 094B7C 7F06004C 00000000 */ nop -/* 094B80 7F060050 0FC17691 */ jal get_item_in_hand_or_watch_menu -/* 094B84 7F060054 24040001 */ li $a0, 1 -/* 094B88 7F060058 00402025 */ move $a0, $v0 -/* 094B8C 7F06005C 0FC1782D */ jal bondwalkItemCheckBitflags -/* 094B90 7F060060 24050800 */ li $a1, 2048 -/* 094B94 7F060064 10400015 */ beqz $v0, .L7F0600BC -/* 094B98 7F060068 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 094B9C 7F06006C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 094BA0 7F060070 C4208378 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 094BA4 7F060074 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 094BA8 7F060078 44813000 */ mtc1 $at, $f6 -/* 094BAC 7F06007C 46000100 */ add.s $f4, $f0, $f0 -/* 094BB0 7F060080 C60A01C4 */ lwc1 $f10, 0x1c4($s0) -/* 094BB4 7F060084 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 094BB8 7F060088 44819000 */ mtc1 $at, $f18 -/* 094BBC 7F06008C 46062203 */ div.s $f8, $f4, $f6 -/* 094BC0 7F060090 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 094BC4 7F060094 46085400 */ add.s $f16, $f10, $f8 -/* 094BC8 7F060098 E61001C4 */ swc1 $f16, 0x1c4($s0) -/* 094BCC 7F06009C C60401C4 */ lwc1 $f4, 0x1c4($s0) -/* 094BD0 7F0600A0 4604903C */ c.lt.s $f18, $f4 -/* 094BD4 7F0600A4 00000000 */ nop -/* 094BD8 7F0600A8 4500003F */ bc1f .L7F0601A8 -/* 094BDC 7F0600AC 00000000 */ nop -/* 094BE0 7F0600B0 44813000 */ mtc1 $at, $f6 -/* 094BE4 7F0600B4 1000003C */ b .L7F0601A8 -/* 094BE8 7F0600B8 E60601C4 */ swc1 $f6, 0x1c4($s0) -.L7F0600BC: -/* 094BEC 7F0600BC C4208378 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 094BF0 7F0600C0 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 094BF4 7F0600C4 44814000 */ mtc1 $at, $f8 -/* 094BF8 7F0600C8 46000280 */ add.s $f10, $f0, $f0 -/* 094BFC 7F0600CC C61201C4 */ lwc1 $f18, 0x1c4($s0) -/* 094C00 7F0600D0 46085403 */ div.s $f16, $f10, $f8 -/* 094C04 7F0600D4 44805000 */ mtc1 $zero, $f10 -/* 094C08 7F0600D8 46109101 */ sub.s $f4, $f18, $f16 -/* 094C0C 7F0600DC E60401C4 */ swc1 $f4, 0x1c4($s0) -/* 094C10 7F0600E0 C60601C4 */ lwc1 $f6, 0x1c4($s0) -/* 094C14 7F0600E4 460A303C */ c.lt.s $f6, $f10 -/* 094C18 7F0600E8 00000000 */ nop -/* 094C1C 7F0600EC 4500002E */ bc1f .L7F0601A8 -/* 094C20 7F0600F0 00000000 */ nop -/* 094C24 7F0600F4 44804000 */ mtc1 $zero, $f8 -/* 094C28 7F0600F8 1000002B */ b .L7F0601A8 -/* 094C2C 7F0600FC E60801C4 */ swc1 $f8, 0x1c4($s0) -.L7F060100: -/* 094C30 7F060100 0FC17691 */ jal get_item_in_hand_or_watch_menu -/* 094C34 7F060104 00002025 */ move $a0, $zero -/* 094C38 7F060108 00402025 */ move $a0, $v0 -/* 094C3C 7F06010C 0FC1782D */ jal bondwalkItemCheckBitflags -/* 094C40 7F060110 24050800 */ li $a1, 2048 -/* 094C44 7F060114 10400013 */ beqz $v0, .L7F060164 -/* 094C48 7F060118 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 094C4C 7F06011C 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 094C50 7F060120 44811000 */ mtc1 $at, $f2 -/* 094C54 7F060124 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 094C58 7F060128 C4208378 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 094C5C 7F06012C 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 094C60 7F060130 44818000 */ mtc1 $at, $f16 -/* 094C64 7F060134 46000480 */ add.s $f18, $f0, $f0 -/* 094C68 7F060138 C60601C4 */ lwc1 $f6, 0x1c4($s0) -/* 094C6C 7F06013C 46109103 */ div.s $f4, $f18, $f16 -/* 094C70 7F060140 46043281 */ sub.s $f10, $f6, $f4 -/* 094C74 7F060144 E60A01C4 */ swc1 $f10, 0x1c4($s0) -/* 094C78 7F060148 C60801C4 */ lwc1 $f8, 0x1c4($s0) -/* 094C7C 7F06014C 4602403C */ c.lt.s $f8, $f2 -/* 094C80 7F060150 00000000 */ nop -/* 094C84 7F060154 45000014 */ bc1f .L7F0601A8 -/* 094C88 7F060158 00000000 */ nop -/* 094C8C 7F06015C 10000012 */ b .L7F0601A8 -/* 094C90 7F060160 E60201C4 */ swc1 $f2, 0x1c4($s0) -.L7F060164: -/* 094C94 7F060164 C4208378 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 094C98 7F060168 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 094C9C 7F06016C 44818000 */ mtc1 $at, $f16 -/* 094CA0 7F060170 46000480 */ add.s $f18, $f0, $f0 -/* 094CA4 7F060174 C60401C4 */ lwc1 $f4, 0x1c4($s0) -/* 094CA8 7F060178 44804000 */ mtc1 $zero, $f8 -/* 094CAC 7F06017C 46109183 */ div.s $f6, $f18, $f16 -/* 094CB0 7F060180 46062280 */ add.s $f10, $f4, $f6 -/* 094CB4 7F060184 E60A01C4 */ swc1 $f10, 0x1c4($s0) -/* 094CB8 7F060188 C61201C4 */ lwc1 $f18, 0x1c4($s0) -/* 094CBC 7F06018C 4612403C */ c.lt.s $f8, $f18 -/* 094CC0 7F060190 00000000 */ nop -/* 094CC4 7F060194 45000004 */ bc1f .L7F0601A8 -/* 094CC8 7F060198 00000000 */ nop -/* 094CCC 7F06019C 44808000 */ mtc1 $zero, $f16 -/* 094CD0 7F0601A0 00000000 */ nop -/* 094CD4 7F0601A4 E61001C4 */ swc1 $f16, 0x1c4($s0) -.L7F0601A8: -/* 094CD8 7F0601A8 3C0F8003 */ lui $t7, %hi(D_80035C4C) -/* 094CDC 7F0601AC 25EF5C4C */ addiu $t7, %lo(D_80035C4C) # addiu $t7, $t7, 0x5c4c -/* 094CE0 7F0601B0 8DE10000 */ lw $at, ($t7) -/* 094CE4 7F0601B4 27AC00E0 */ addiu $t4, $sp, 0xe0 -/* 094CE8 7F0601B8 3C0E8003 */ lui $t6, %hi(D_80035C58) -/* 094CEC 7F0601BC AD810000 */ sw $at, ($t4) -/* 094CF0 7F0601C0 8DF90004 */ lw $t9, 4($t7) -/* 094CF4 7F0601C4 25CE5C58 */ addiu $t6, %lo(D_80035C58) # addiu $t6, $t6, 0x5c58 -/* 094CF8 7F0601C8 27B800D4 */ addiu $t8, $sp, 0xd4 -/* 094CFC 7F0601CC AD990004 */ sw $t9, 4($t4) -/* 094D00 7F0601D0 8DE10008 */ lw $at, 8($t7) -/* 094D04 7F0601D4 3C0D8003 */ lui $t5, %hi(D_80035C64) -/* 094D08 7F0601D8 25AD5C64 */ addiu $t5, %lo(D_80035C64) # addiu $t5, $t5, 0x5c64 -/* 094D0C 7F0601DC AD810008 */ sw $at, 8($t4) -/* 094D10 7F0601E0 8DC10000 */ lw $at, ($t6) -/* 094D14 7F0601E4 8DCF0004 */ lw $t7, 4($t6) -/* 094D18 7F0601E8 27B900C8 */ addiu $t9, $sp, 0xc8 -/* 094D1C 7F0601EC AF010000 */ sw $at, ($t8) -/* 094D20 7F0601F0 8DC10008 */ lw $at, 8($t6) -/* 094D24 7F0601F4 AF0F0004 */ sw $t7, 4($t8) -/* 094D28 7F0601F8 2403000C */ li $v1, 12 -/* 094D2C 7F0601FC AF010008 */ sw $at, 8($t8) -/* 094D30 7F060200 8DA10000 */ lw $at, ($t5) -/* 094D34 7F060204 8DAE0004 */ lw $t6, 4($t5) -/* 094D38 7F060208 AF210000 */ sw $at, ($t9) -/* 094D3C 7F06020C 8DA10008 */ lw $at, 8($t5) -/* 094D40 7F060210 AF2E0004 */ sw $t6, 4($t9) -/* 094D44 7F060214 AF210008 */ sw $at, 8($t9) -/* 094D48 7F060218 8E020198 */ lw $v0, 0x198($s0) -/* 094D4C 7F06021C C604019C */ lwc1 $f4, 0x19c($s0) -/* 094D50 7F060220 AFAC0014 */ sw $t4, 0x14($sp) -/* 094D54 7F060224 244F0003 */ addiu $t7, $v0, 3 -/* 094D58 7F060228 05E10004 */ bgez $t7, .L7F06023C -/* 094D5C 7F06022C 31F80003 */ andi $t8, $t7, 3 -/* 094D60 7F060230 13000002 */ beqz $t8, .L7F06023C -/* 094D64 7F060234 00000000 */ nop -/* 094D68 7F060238 2718FFFC */ addiu $t8, $t8, -4 -.L7F06023C: -/* 094D6C 7F06023C 03030019 */ multu $t8, $v1 -/* 094D70 7F060240 244E0001 */ addiu $t6, $v0, 1 -/* 094D74 7F060244 E7A40010 */ swc1 $f4, 0x10($sp) -/* 094D78 7F060248 0000C812 */ mflo $t9 -/* 094D7C 7F06024C 02194021 */ addu $t0, $s0, $t9 -/* 094D80 7F060250 24590002 */ addiu $t9, $v0, 2 -/* 094D84 7F060254 00430019 */ multu $v0, $v1 -/* 094D88 7F060258 25040108 */ addiu $a0, $t0, 0x108 -/* 094D8C 7F06025C AFA80044 */ sw $t0, 0x44($sp) -/* 094D90 7F060260 00006812 */ mflo $t5 -/* 094D94 7F060264 020D4821 */ addu $t1, $s0, $t5 -/* 094D98 7F060268 25250108 */ addiu $a1, $t1, 0x108 -/* 094D9C 7F06026C 05C10004 */ bgez $t6, .L7F060280 -/* 094DA0 7F060270 31CF0003 */ andi $t7, $t6, 3 -/* 094DA4 7F060274 11E00002 */ beqz $t7, .L7F060280 -/* 094DA8 7F060278 00000000 */ nop -/* 094DAC 7F06027C 25EFFFFC */ addiu $t7, $t7, -4 -.L7F060280: -/* 094DB0 7F060280 01E30019 */ multu $t7, $v1 -/* 094DB4 7F060284 AFA90040 */ sw $t1, 0x40($sp) -/* 094DB8 7F060288 0000C012 */ mflo $t8 -/* 094DBC 7F06028C 02185021 */ addu $t2, $s0, $t8 -/* 094DC0 7F060290 25460108 */ addiu $a2, $t2, 0x108 -/* 094DC4 7F060294 07210004 */ bgez $t9, .L7F0602A8 -/* 094DC8 7F060298 332D0003 */ andi $t5, $t9, 3 -/* 094DCC 7F06029C 11A00002 */ beqz $t5, .L7F0602A8 -/* 094DD0 7F0602A0 00000000 */ nop -/* 094DD4 7F0602A4 25ADFFFC */ addiu $t5, $t5, -4 -.L7F0602A8: -/* 094DD8 7F0602A8 01A30019 */ multu $t5, $v1 -/* 094DDC 7F0602AC AFAA003C */ sw $t2, 0x3c($sp) -/* 094DE0 7F0602B0 00007012 */ mflo $t6 -/* 094DE4 7F0602B4 020E5821 */ addu $t3, $s0, $t6 -/* 094DE8 7F0602B8 25670108 */ addiu $a3, $t3, 0x108 -/* 094DEC 7F0602BC 0FC16BBF */ jal sub_GAME_7F05AEFC -/* 094DF0 7F0602C0 AFAB0038 */ sw $t3, 0x38($sp) -/* 094DF4 7F0602C4 8FA40044 */ lw $a0, 0x44($sp) -/* 094DF8 7F0602C8 8FA50040 */ lw $a1, 0x40($sp) -/* 094DFC 7F0602CC 8FA6003C */ lw $a2, 0x3c($sp) -/* 094E00 7F0602D0 8FA70038 */ lw $a3, 0x38($sp) -/* 094E04 7F0602D4 C606019C */ lwc1 $f6, 0x19c($s0) -/* 094E08 7F0602D8 27AF00D4 */ addiu $t7, $sp, 0xd4 -/* 094E0C 7F0602DC AFAF0014 */ sw $t7, 0x14($sp) -/* 094E10 7F0602E0 24840138 */ addiu $a0, $a0, 0x138 -/* 094E14 7F0602E4 24A50138 */ addiu $a1, $a1, 0x138 -/* 094E18 7F0602E8 24C60138 */ addiu $a2, $a2, 0x138 -/* 094E1C 7F0602EC 24E70138 */ addiu $a3, $a3, 0x138 -/* 094E20 7F0602F0 0FC16BBF */ jal sub_GAME_7F05AEFC -/* 094E24 7F0602F4 E7A60010 */ swc1 $f6, 0x10($sp) -/* 094E28 7F0602F8 8FA40044 */ lw $a0, 0x44($sp) -/* 094E2C 7F0602FC 8FA50040 */ lw $a1, 0x40($sp) -/* 094E30 7F060300 8FA6003C */ lw $a2, 0x3c($sp) -/* 094E34 7F060304 8FA70038 */ lw $a3, 0x38($sp) -/* 094E38 7F060308 C60A019C */ lwc1 $f10, 0x19c($s0) -/* 094E3C 7F06030C 27B800C8 */ addiu $t8, $sp, 0xc8 -/* 094E40 7F060310 AFB80014 */ sw $t8, 0x14($sp) -/* 094E44 7F060314 24840168 */ addiu $a0, $a0, 0x168 -/* 094E48 7F060318 24A50168 */ addiu $a1, $a1, 0x168 -/* 094E4C 7F06031C 24C60168 */ addiu $a2, $a2, 0x168 -/* 094E50 7F060320 24E70168 */ addiu $a3, $a3, 0x168 -/* 094E54 7F060324 0FC16BBF */ jal sub_GAME_7F05AEFC -/* 094E58 7F060328 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 094E5C 7F06032C 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 094E60 7F060330 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 094E64 7F060334 C7A800E0 */ lwc1 $f8, 0xe0($sp) -/* 094E68 7F060338 C7A400E4 */ lwc1 $f4, 0xe4($sp) -/* 094E6C 7F06033C C4520FC0 */ lwc1 $f18, 0xfc0($v0) -/* 094E70 7F060340 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 094E74 7F060344 46124402 */ mul.s $f16, $f8, $f18 -/* 094E78 7F060348 C7A800E8 */ lwc1 $f8, 0xe8($sp) -/* 094E7C 7F06034C E7B000E0 */ swc1 $f16, 0xe0($sp) -/* 094E80 7F060350 C4460FC0 */ lwc1 $f6, 0xfc0($v0) -/* 094E84 7F060354 46062282 */ mul.s $f10, $f4, $f6 -/* 094E88 7F060358 E7AA00E4 */ swc1 $f10, 0xe4($sp) -/* 094E8C 7F06035C C4520FC0 */ lwc1 $f18, 0xfc0($v0) -/* 094E90 7F060360 46124102 */ mul.s $f4, $f8, $f18 -/* 094E94 7F060364 E7A400E8 */ swc1 $f4, 0xe8($sp) -/* 094E98 7F060368 C60601AC */ lwc1 $f6, 0x1ac($s0) -/* 094E9C 7F06036C 46068200 */ add.s $f8, $f16, $f6 -/* 094EA0 7F060370 E7A800E0 */ swc1 $f8, 0xe0($sp) -/* 094EA4 7F060374 C61201B0 */ lwc1 $f18, 0x1b0($s0) -/* 094EA8 7F060378 46125100 */ add.s $f4, $f10, $f18 -/* 094EAC 7F06037C 0FC1772E */ jal sub_GAME_7F05DCB8 -/* 094EB0 7F060380 E7A400E4 */ swc1 $f4, 0xe4($sp) -/* 094EB4 7F060384 C7B000E0 */ lwc1 $f16, 0xe0($sp) -/* 094EB8 7F060388 3C028005 */ lui $v0, %hi(g_ClockTimer) -/* 094EBC 7F06038C 24428374 */ addiu $v0, %lo(g_ClockTimer) # addiu $v0, $v0, -0x7c8c -/* 094EC0 7F060390 46008180 */ add.s $f6, $f16, $f0 -/* 094EC4 7F060394 8C590000 */ lw $t9, ($v0) -/* 094EC8 7F060398 00001825 */ move $v1, $zero -/* 094ECC 7F06039C 1B200035 */ blez $t9, .L7F060474 -/* 094ED0 7F0603A0 E7A600E0 */ swc1 $f6, 0xe0($sp) -/* 094ED4 7F0603A4 3C018005 */ lui $at, %hi(D_80053DE0) -/* 094ED8 7F0603A8 C4203DE0 */ lwc1 $f0, %lo(D_80053DE0)($at) -/* 094EDC 7F0603AC C60A00E4 */ lwc1 $f10, 0xe4($s0) -.L7F0603B0: -/* 094EE0 7F0603B0 C7A800E0 */ lwc1 $f8, 0xe0($sp) -/* 094EE4 7F0603B4 C60600E8 */ lwc1 $f6, 0xe8($s0) -/* 094EE8 7F0603B8 460A0482 */ mul.s $f18, $f0, $f10 -/* 094EEC 7F0603BC 24630001 */ addiu $v1, $v1, 1 -/* 094EF0 7F0603C0 46060282 */ mul.s $f10, $f0, $f6 -/* 094EF4 7F0603C4 46124100 */ add.s $f4, $f8, $f18 -/* 094EF8 7F0603C8 E60400E4 */ swc1 $f4, 0xe4($s0) -/* 094EFC 7F0603CC C7B000E4 */ lwc1 $f16, 0xe4($sp) -/* 094F00 7F0603D0 C60400EC */ lwc1 $f4, 0xec($s0) -/* 094F04 7F0603D4 460A8200 */ add.s $f8, $f16, $f10 -/* 094F08 7F0603D8 46040182 */ mul.s $f6, $f0, $f4 -/* 094F0C 7F0603DC E60800E8 */ swc1 $f8, 0xe8($s0) -/* 094F10 7F0603E0 C7B200E8 */ lwc1 $f18, 0xe8($sp) -/* 094F14 7F0603E4 C60800F0 */ lwc1 $f8, 0xf0($s0) -/* 094F18 7F0603E8 46069400 */ add.s $f16, $f18, $f6 -/* 094F1C 7F0603EC 46080102 */ mul.s $f4, $f0, $f8 -/* 094F20 7F0603F0 E61000EC */ swc1 $f16, 0xec($s0) -/* 094F24 7F0603F4 C7AA00D4 */ lwc1 $f10, 0xd4($sp) -/* 094F28 7F0603F8 C61000F4 */ lwc1 $f16, 0xf4($s0) -/* 094F2C 7F0603FC 46045480 */ add.s $f18, $f10, $f4 -/* 094F30 7F060400 46100202 */ mul.s $f8, $f0, $f16 -/* 094F34 7F060404 E61200F0 */ swc1 $f18, 0xf0($s0) -/* 094F38 7F060408 C7A600D8 */ lwc1 $f6, 0xd8($sp) -/* 094F3C 7F06040C C61200F8 */ lwc1 $f18, 0xf8($s0) -/* 094F40 7F060410 46083280 */ add.s $f10, $f6, $f8 -/* 094F44 7F060414 46120402 */ mul.s $f16, $f0, $f18 -/* 094F48 7F060418 E60A00F4 */ swc1 $f10, 0xf4($s0) -/* 094F4C 7F06041C C7A400DC */ lwc1 $f4, 0xdc($sp) -/* 094F50 7F060420 C60A00FC */ lwc1 $f10, 0xfc($s0) -/* 094F54 7F060424 46102180 */ add.s $f6, $f4, $f16 -/* 094F58 7F060428 460A0482 */ mul.s $f18, $f0, $f10 -/* 094F5C 7F06042C E60600F8 */ swc1 $f6, 0xf8($s0) -/* 094F60 7F060430 C7A800C8 */ lwc1 $f8, 0xc8($sp) -/* 094F64 7F060434 C6060100 */ lwc1 $f6, 0x100($s0) -/* 094F68 7F060438 46124100 */ add.s $f4, $f8, $f18 -/* 094F6C 7F06043C 46060282 */ mul.s $f10, $f0, $f6 -/* 094F70 7F060440 E60400FC */ swc1 $f4, 0xfc($s0) -/* 094F74 7F060444 C7B000CC */ lwc1 $f16, 0xcc($sp) -/* 094F78 7F060448 C6040104 */ lwc1 $f4, 0x104($s0) -/* 094F7C 7F06044C 460A8200 */ add.s $f8, $f16, $f10 -/* 094F80 7F060450 46040182 */ mul.s $f6, $f0, $f4 -/* 094F84 7F060454 E6080100 */ swc1 $f8, 0x100($s0) -/* 094F88 7F060458 C7B200D0 */ lwc1 $f18, 0xd0($sp) -/* 094F8C 7F06045C 46069400 */ add.s $f16, $f18, $f6 -/* 094F90 7F060460 E6100104 */ swc1 $f16, 0x104($s0) -/* 094F94 7F060464 8C4D0000 */ lw $t5, ($v0) -/* 094F98 7F060468 006D082A */ slt $at, $v1, $t5 -/* 094F9C 7F06046C 5420FFD0 */ bnezl $at, .L7F0603B0 -/* 094FA0 7F060470 C60A00E4 */ lwc1 $f10, 0xe4($s0) -.L7F060474: -/* 094FA4 7F060474 3C018005 */ lui $at, %hi(D_80053DE4) -/* 094FA8 7F060478 C4203DE4 */ lwc1 $f0, %lo(D_80053DE4)($at) -/* 094FAC 7F06047C C60A00E4 */ lwc1 $f10, 0xe4($s0) -/* 094FB0 7F060480 C60400E8 */ lwc1 $f4, 0xe8($s0) -/* 094FB4 7F060484 C60600EC */ lwc1 $f6, 0xec($s0) -/* 094FB8 7F060488 46005202 */ mul.s $f8, $f10, $f0 -/* 094FBC 7F06048C C60A00F0 */ lwc1 $f10, 0xf0($s0) -/* 094FC0 7F060490 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 094FC4 7F060494 46002482 */ mul.s $f18, $f4, $f0 -/* 094FC8 7F060498 C60400F4 */ lwc1 $f4, 0xf4($s0) -/* 094FCC 7F06049C 46003402 */ mul.s $f16, $f6, $f0 -/* 094FD0 7F0604A0 E60800C0 */ swc1 $f8, 0xc0($s0) -/* 094FD4 7F0604A4 C60600F8 */ lwc1 $f6, 0xf8($s0) -/* 094FD8 7F0604A8 46005202 */ mul.s $f8, $f10, $f0 -/* 094FDC 7F0604AC E61200C4 */ swc1 $f18, 0xc4($s0) -/* 094FE0 7F0604B0 C60A00FC */ lwc1 $f10, 0xfc($s0) -/* 094FE4 7F0604B4 46002482 */ mul.s $f18, $f4, $f0 -/* 094FE8 7F0604B8 E61000C8 */ swc1 $f16, 0xc8($s0) -/* 094FEC 7F0604BC C6040100 */ lwc1 $f4, 0x100($s0) -/* 094FF0 7F0604C0 46003402 */ mul.s $f16, $f6, $f0 -/* 094FF4 7F0604C4 E60800CC */ swc1 $f8, 0xcc($s0) -/* 094FF8 7F0604C8 C6060104 */ lwc1 $f6, 0x104($s0) -/* 094FFC 7F0604CC 46005202 */ mul.s $f8, $f10, $f0 -/* 095000 7F0604D0 E61200D0 */ swc1 $f18, 0xd0($s0) -/* 095004 7F0604D4 46002482 */ mul.s $f18, $f4, $f0 -/* 095008 7F0604D8 E61000D4 */ swc1 $f16, 0xd4($s0) -/* 09500C 7F0604DC 46003402 */ mul.s $f16, $f6, $f0 -/* 095010 7F0604E0 E60800D8 */ swc1 $f8, 0xd8($s0) -/* 095014 7F0604E4 E61200DC */ swc1 $f18, 0xdc($s0) -/* 095018 7F0604E8 14800009 */ bnez $a0, .L7F060510 -/* 09501C 7F0604EC E61000E0 */ swc1 $f16, 0xe0($s0) -/* 095020 7F0604F0 0FC1773A */ jal gunSetHorizontalOffset -/* 095024 7F0604F4 00000000 */ nop -/* 095028 7F0604F8 C60800C0 */ lwc1 $f8, 0xc0($s0) -/* 09502C 7F0604FC C60A01B8 */ lwc1 $f10, 0x1b8($s0) -/* 095030 7F060500 46080100 */ add.s $f4, $f0, $f8 -/* 095034 7F060504 46045480 */ add.s $f18, $f10, $f4 -/* 095038 7F060508 10000008 */ b .L7F06052C -/* 09503C 7F06050C E7B20194 */ swc1 $f18, 0x194($sp) -.L7F060510: -/* 095040 7F060510 0FC1773A */ jal gunSetHorizontalOffset -/* 095044 7F060514 00000000 */ nop -/* 095048 7F060518 C60600C0 */ lwc1 $f6, 0xc0($s0) -/* 09504C 7F06051C C60801B8 */ lwc1 $f8, 0x1b8($s0) -/* 095050 7F060520 46060400 */ add.s $f16, $f0, $f6 -/* 095054 7F060524 46088281 */ sub.s $f10, $f16, $f8 -/* 095058 7F060528 E7AA0194 */ swc1 $f10, 0x194($sp) -.L7F06052C: -/* 09505C 7F06052C 8FAE00F8 */ lw $t6, 0xf8($sp) -/* 095060 7F060530 C61200C4 */ lwc1 $f18, 0xc4($s0) -/* 095064 7F060534 C61001BC */ lwc1 $f16, 0x1bc($s0) -/* 095068 7F060538 C5C40008 */ lwc1 $f4, 8($t6) -/* 09506C 7F06053C 8FA400FC */ lw $a0, 0xfc($sp) -/* 095070 7F060540 24010019 */ li $at, 25 -/* 095074 7F060544 46122180 */ add.s $f6, $f4, $f18 -/* 095078 7F060548 46068200 */ add.s $f8, $f16, $f6 -/* 09507C 7F06054C E7A80198 */ swc1 $f8, 0x198($sp) -/* 095080 7F060550 C60400C8 */ lwc1 $f4, 0xc8($s0) -/* 095084 7F060554 C5CA000C */ lwc1 $f10, 0xc($t6) -/* 095088 7F060558 C61001C0 */ lwc1 $f16, 0x1c0($s0) -/* 09508C 7F06055C 46045480 */ add.s $f18, $f10, $f4 -/* 095090 7F060560 46128180 */ add.s $f6, $f16, $f18 -/* 095094 7F060564 10810005 */ beq $a0, $at, .L7F06057C -/* 095098 7F060568 E7A6019C */ swc1 $f6, 0x19c($sp) -/* 09509C 7F06056C 2401001E */ li $at, 30 -/* 0950A0 7F060570 10810002 */ beq $a0, $at, .L7F06057C -/* 0950A4 7F060574 24010017 */ li $at, 23 -/* 0950A8 7F060578 14810028 */ bne $a0, $at, .L7F06061C -.L7F06057C: -/* 0950AC 7F06057C 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0950B0 7F060580 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0950B4 7F060584 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 0950B8 7F060588 44810000 */ mtc1 $at, $f0 -/* 0950BC 7F06058C C44A00A0 */ lwc1 $f10, 0xa0($v0) -/* 0950C0 7F060590 C7A80198 */ lwc1 $f8, 0x198($sp) -/* 0950C4 7F060594 3C014040 */ li $at, 0x40400000 # 3.000000 -/* 0950C8 7F060598 46005103 */ div.s $f4, $f10, $f0 -/* 0950CC 7F06059C 44819000 */ mtc1 $at, $f18 -/* 0950D0 7F0605A0 24010019 */ li $at, 25 -/* 0950D4 7F0605A4 46044400 */ add.s $f16, $f8, $f4 -/* 0950D8 7F0605A8 C7A4019C */ lwc1 $f4, 0x19c($sp) -/* 0950DC 7F0605AC E7B00198 */ swc1 $f16, 0x198($sp) -/* 0950E0 7F0605B0 C44600A0 */ lwc1 $f6, 0xa0($v0) -/* 0950E4 7F0605B4 46069282 */ mul.s $f10, $f18, $f6 -/* 0950E8 7F0605B8 46005203 */ div.s $f8, $f10, $f0 -/* 0950EC 7F0605BC 46082400 */ add.s $f16, $f4, $f8 -/* 0950F0 7F0605C0 14810014 */ bne $a0, $at, .L7F060614 -/* 0950F4 7F0605C4 E7B0019C */ swc1 $f16, 0x19c($sp) -/* 0950F8 7F0605C8 0FC293B2 */ jal cur_player_get_screen_setting -/* 0950FC 7F0605CC 00000000 */ nop -/* 095100 7F0605D0 24010001 */ li $at, 1 -/* 095104 7F0605D4 5041000B */ beql $v0, $at, .L7F060604 -/* 095108 7F0605D8 3C014040 */ lui $at, 0x4040 -/* 09510C 7F0605DC 0FC293B2 */ jal cur_player_get_screen_setting -/* 095110 7F0605E0 00000000 */ nop -/* 095114 7F0605E4 24010002 */ li $at, 2 -/* 095118 7F0605E8 50410006 */ beql $v0, $at, .L7F060604 -/* 09511C 7F0605EC 3C014040 */ lui $at, 0x4040 -/* 095120 7F0605F0 0FC293B8 */ jal get_screen_ratio -/* 095124 7F0605F4 00000000 */ nop -/* 095128 7F0605F8 24010001 */ li $at, 1 -/* 09512C 7F0605FC 14410005 */ bne $v0, $at, .L7F060614 -/* 095130 7F060600 3C014040 */ li $at, 0x40400000 # 3.000000 -.L7F060604: -/* 095134 7F060604 44813000 */ mtc1 $at, $f6 -/* 095138 7F060608 C7B20198 */ lwc1 $f18, 0x198($sp) -/* 09513C 7F06060C 46069281 */ sub.s $f10, $f18, $f6 -/* 095140 7F060610 E7AA0198 */ swc1 $f10, 0x198($sp) -.L7F060614: -/* 095144 7F060614 1000002C */ b .L7F0606C8 -/* 095148 7F060618 8FA400FC */ lw $a0, 0xfc($sp) -.L7F06061C: -/* 09514C 7F06061C 2401001F */ li $at, 31 -/* 095150 7F060620 14810016 */ bne $a0, $at, .L7F06067C -/* 095154 7F060624 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 095158 7F060628 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 09515C 7F06062C 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 095160 7F060630 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 095164 7F060634 44810000 */ mtc1 $at, $f0 -/* 095168 7F060638 3C014020 */ li $at, 0x40200000 # 2.500000 -/* 09516C 7F06063C 44812000 */ mtc1 $at, $f4 -/* 095170 7F060640 C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 095174 7F060644 C7A60198 */ lwc1 $f6, 0x198($sp) -/* 095178 7F060648 3C0140F0 */ li $at, 0x40F00000 # 7.500000 -/* 09517C 7F06064C 46082402 */ mul.s $f16, $f4, $f8 -/* 095180 7F060650 44812000 */ mtc1 $at, $f4 -/* 095184 7F060654 46008483 */ div.s $f18, $f16, $f0 -/* 095188 7F060658 46123280 */ add.s $f10, $f6, $f18 -/* 09518C 7F06065C C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 095190 7F060660 E7AA0198 */ swc1 $f10, 0x198($sp) -/* 095194 7F060664 C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 095198 7F060668 46082402 */ mul.s $f16, $f4, $f8 -/* 09519C 7F06066C 46008183 */ div.s $f6, $f16, $f0 -/* 0951A0 7F060670 46069280 */ add.s $f10, $f18, $f6 -/* 0951A4 7F060674 10000014 */ b .L7F0606C8 -/* 0951A8 7F060678 E7AA019C */ swc1 $f10, 0x19c($sp) -.L7F06067C: -/* 0951AC 7F06067C 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0951B0 7F060680 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 0951B4 7F060684 44810000 */ mtc1 $at, $f0 -/* 0951B8 7F060688 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 0951BC 7F06068C 44812000 */ mtc1 $at, $f4 -/* 0951C0 7F060690 C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 0951C4 7F060694 C7A60198 */ lwc1 $f6, 0x198($sp) -/* 0951C8 7F060698 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0951CC 7F06069C 46082402 */ mul.s $f16, $f4, $f8 -/* 0951D0 7F0606A0 44812000 */ mtc1 $at, $f4 -/* 0951D4 7F0606A4 46008483 */ div.s $f18, $f16, $f0 -/* 0951D8 7F0606A8 46123280 */ add.s $f10, $f6, $f18 -/* 0951DC 7F0606AC C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 0951E0 7F0606B0 E7AA0198 */ swc1 $f10, 0x198($sp) -/* 0951E4 7F0606B4 C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 0951E8 7F0606B8 46082402 */ mul.s $f16, $f4, $f8 -/* 0951EC 7F0606BC 46008183 */ div.s $f6, $f16, $f0 -/* 0951F0 7F0606C0 46069280 */ add.s $f10, $f18, $f6 -/* 0951F4 7F0606C4 E7AA019C */ swc1 $f10, 0x19c($sp) -.L7F0606C8: -/* 0951F8 7F0606C8 820F000C */ lb $t7, 0xc($s0) -/* 0951FC 7F0606CC 11E00047 */ beqz $t7, .L7F0607EC -/* 095200 7F0606D0 00000000 */ nop -/* 095204 7F0606D4 0FC1782D */ jal bondwalkItemCheckBitflags -/* 095208 7F0606D8 24050020 */ li $a1, 32 -/* 09520C 7F0606DC 10400043 */ beqz $v0, .L7F0607EC -/* 095210 7F0606E0 8FA400FC */ lw $a0, 0xfc($sp) -/* 095214 7F0606E4 0FC1782D */ jal bondwalkItemCheckBitflags -/* 095218 7F0606E8 24050040 */ li $a1, 64 -/* 09521C 7F0606EC 10400016 */ beqz $v0, .L7F060748 -/* 095220 7F0606F0 00000000 */ nop -/* 095224 7F0606F4 0C002914 */ jal randomGetNext -/* 095228 7F0606F8 00000000 */ nop -/* 09522C 7F0606FC 44822000 */ mtc1 $v0, $f4 -/* 095230 7F060700 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 095234 7F060704 04410004 */ bgez $v0, .L7F060718 -/* 095238 7F060708 46802220 */ cvt.s.w $f8, $f4 -/* 09523C 7F06070C 44818000 */ mtc1 $at, $f16 -/* 095240 7F060710 00000000 */ nop -/* 095244 7F060714 46104200 */ add.s $f8, $f8, $f16 -.L7F060718: -/* 095248 7F060718 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09524C 7F06071C 44819000 */ mtc1 $at, $f18 -/* 095250 7F060720 3C018005 */ lui $at, %hi(D_80053DE8) -/* 095254 7F060724 C42A3DE8 */ lwc1 $f10, %lo(D_80053DE8)($at) -/* 095258 7F060728 46124182 */ mul.s $f6, $f8, $f18 -/* 09525C 7F06072C 3C018005 */ lui $at, %hi(D_80053DEC) -/* 095260 7F060730 C4303DEC */ lwc1 $f16, %lo(D_80053DEC)($at) -/* 095264 7F060734 C7B20194 */ lwc1 $f18, 0x194($sp) -/* 095268 7F060738 460A3102 */ mul.s $f4, $f6, $f10 -/* 09526C 7F06073C 46048201 */ sub.s $f8, $f16, $f4 -/* 095270 7F060740 46089180 */ add.s $f6, $f18, $f8 -/* 095274 7F060744 E7A60194 */ swc1 $f6, 0x194($sp) -.L7F060748: -/* 095278 7F060748 0C002914 */ jal randomGetNext -/* 09527C 7F06074C 00000000 */ nop -/* 095280 7F060750 44825000 */ mtc1 $v0, $f10 -/* 095284 7F060754 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 095288 7F060758 04410004 */ bgez $v0, .L7F06076C -/* 09528C 7F06075C 46805420 */ cvt.s.w $f16, $f10 -/* 095290 7F060760 44812000 */ mtc1 $at, $f4 -/* 095294 7F060764 00000000 */ nop -/* 095298 7F060768 46048400 */ add.s $f16, $f16, $f4 -.L7F06076C: -/* 09529C 7F06076C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0952A0 7F060770 44819000 */ mtc1 $at, $f18 -/* 0952A4 7F060774 3C018005 */ lui $at, %hi(D_80053DF0) -/* 0952A8 7F060778 C4263DF0 */ lwc1 $f6, %lo(D_80053DF0)($at) -/* 0952AC 7F06077C 46128202 */ mul.s $f8, $f16, $f18 -/* 0952B0 7F060780 3C018005 */ lui $at, %hi(D_80053DF4) -/* 0952B4 7F060784 C4243DF4 */ lwc1 $f4, %lo(D_80053DF4)($at) -/* 0952B8 7F060788 C7B20198 */ lwc1 $f18, 0x198($sp) -/* 0952BC 7F06078C 46064282 */ mul.s $f10, $f8, $f6 -/* 0952C0 7F060790 460A2401 */ sub.s $f16, $f4, $f10 -/* 0952C4 7F060794 46109200 */ add.s $f8, $f18, $f16 -/* 0952C8 7F060798 0C002914 */ jal randomGetNext -/* 0952CC 7F06079C E7A80198 */ swc1 $f8, 0x198($sp) -/* 0952D0 7F0607A0 44823000 */ mtc1 $v0, $f6 -/* 0952D4 7F0607A4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0952D8 7F0607A8 04410004 */ bgez $v0, .L7F0607BC -/* 0952DC 7F0607AC 46803120 */ cvt.s.w $f4, $f6 -/* 0952E0 7F0607B0 44815000 */ mtc1 $at, $f10 -/* 0952E4 7F0607B4 00000000 */ nop -/* 0952E8 7F0607B8 460A2100 */ add.s $f4, $f4, $f10 -.L7F0607BC: -/* 0952EC 7F0607BC 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0952F0 7F0607C0 44819000 */ mtc1 $at, $f18 -/* 0952F4 7F0607C4 3C018005 */ lui $at, %hi(D_80053DF8) -/* 0952F8 7F0607C8 C4283DF8 */ lwc1 $f8, %lo(D_80053DF8)($at) -/* 0952FC 7F0607CC 46122402 */ mul.s $f16, $f4, $f18 -/* 095300 7F0607D0 3C018005 */ lui $at, %hi(D_80053DFC) -/* 095304 7F0607D4 C42A3DFC */ lwc1 $f10, %lo(D_80053DFC)($at) -/* 095308 7F0607D8 C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 09530C 7F0607DC 46088182 */ mul.s $f6, $f16, $f8 -/* 095310 7F0607E0 46065101 */ sub.s $f4, $f10, $f6 -/* 095314 7F0607E4 46049400 */ add.s $f16, $f18, $f4 -/* 095318 7F0607E8 E7B0019C */ swc1 $f16, 0x19c($sp) -.L7F0607EC: -/* 09531C 7F0607EC 0FC1E129 */ jal getPlayer_c_screenwidth -/* 095320 7F0607F0 00000000 */ nop -/* 095324 7F0607F4 0FC1E129 */ jal getPlayer_c_screenwidth -/* 095328 7F0607F8 E7A00048 */ swc1 $f0, 0x48($sp) -/* 09532C 7F0607FC 0FC1E131 */ jal getPlayer_c_screenleft -/* 095330 7F060800 E7A0004C */ swc1 $f0, 0x4c($sp) -/* 095334 7F060804 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 095338 7F060808 3C188008 */ lui $t8, %hi(g_CurrentPlayer) -/* 09533C 7F06080C 8F18A0B0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 095340 7F060810 44811000 */ mtc1 $at, $f2 -/* 095344 7F060814 C7A6004C */ lwc1 $f6, 0x4c($sp) -/* 095348 7F060818 C7080FFC */ lwc1 $f8, 0xffc($t8) -/* 09534C 7F06081C 8FB900F8 */ lw $t9, 0xf8($sp) -/* 095350 7F060820 46023482 */ mul.s $f18, $f6, $f2 -/* 095354 7F060824 46004281 */ sub.s $f10, $f8, $f0 -/* 095358 7F060828 C7300018 */ lwc1 $f16, 0x18($t9) -/* 09535C 7F06082C C7A60048 */ lwc1 $f6, 0x48($sp) -/* 095360 7F060830 46125101 */ sub.s $f4, $f10, $f18 -/* 095364 7F060834 46102202 */ mul.s $f8, $f4, $f16 -/* 095368 7F060838 C7A40194 */ lwc1 $f4, 0x194($sp) -/* 09536C 7F06083C 46023282 */ mul.s $f10, $f6, $f2 -/* 095370 7F060840 460A4483 */ div.s $f18, $f8, $f10 -/* 095374 7F060844 46122400 */ add.s $f16, $f4, $f18 -/* 095378 7F060848 0FC1E135 */ jal getPlayer_c_screentop -/* 09537C 7F06084C E7B00194 */ swc1 $f16, 0x194($sp) -/* 095380 7F060850 0FC1E12D */ jal getPlayer_c_screenheight -/* 095384 7F060854 E7A00050 */ swc1 $f0, 0x50($sp) -/* 095388 7F060858 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 09538C 7F06085C 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) -/* 095390 7F060860 8DADA0B0 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 095394 7F060864 44813000 */ mtc1 $at, $f6 -/* 095398 7F060868 C7A40050 */ lwc1 $f4, 0x50($sp) -/* 09539C 7F06086C C5AA1000 */ lwc1 $f10, 0x1000($t5) -/* 0953A0 7F060870 46060202 */ mul.s $f8, $f0, $f6 -/* 0953A4 7F060874 46045481 */ sub.s $f18, $f10, $f4 -/* 0953A8 7F060878 4612403C */ c.lt.s $f8, $f18 -/* 0953AC 7F06087C 00000000 */ nop -/* 0953B0 7F060880 4500001A */ bc1f .L7F0608EC -/* 0953B4 7F060884 00000000 */ nop -/* 0953B8 7F060888 0FC1E12D */ jal getPlayer_c_screenheight -/* 0953BC 7F06088C 00000000 */ nop -/* 0953C0 7F060890 0FC1E12D */ jal getPlayer_c_screenheight -/* 0953C4 7F060894 E7A00048 */ swc1 $f0, 0x48($sp) -/* 0953C8 7F060898 0FC1E135 */ jal getPlayer_c_screentop -/* 0953CC 7F06089C E7A0004C */ swc1 $f0, 0x4c($sp) -/* 0953D0 7F0608A0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0953D4 7F0608A4 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 0953D8 7F0608A8 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0953DC 7F0608AC 44811000 */ mtc1 $at, $f2 -/* 0953E0 7F0608B0 C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 0953E4 7F0608B4 C5D01000 */ lwc1 $f16, 0x1000($t6) -/* 0953E8 7F0608B8 8FAF00F8 */ lw $t7, 0xf8($sp) -/* 0953EC 7F0608BC 46025102 */ mul.s $f4, $f10, $f2 -/* 0953F0 7F0608C0 46008181 */ sub.s $f6, $f16, $f0 -/* 0953F4 7F0608C4 C5F20014 */ lwc1 $f18, 0x14($t7) -/* 0953F8 7F0608C8 C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0953FC 7F0608CC 46043201 */ sub.s $f8, $f6, $f4 -/* 095400 7F0608D0 46124402 */ mul.s $f16, $f8, $f18 -/* 095404 7F0608D4 C7A80198 */ lwc1 $f8, 0x198($sp) -/* 095408 7F0608D8 46025182 */ mul.s $f6, $f10, $f2 -/* 09540C 7F0608DC 46068103 */ div.s $f4, $f16, $f6 -/* 095410 7F0608E0 46044481 */ sub.s $f18, $f8, $f4 -/* 095414 7F0608E4 1000001A */ b .L7F060950 -/* 095418 7F0608E8 E7B20198 */ swc1 $f18, 0x198($sp) -.L7F0608EC: -/* 09541C 7F0608EC 0FC1E12D */ jal getPlayer_c_screenheight -/* 095420 7F0608F0 00000000 */ nop -/* 095424 7F0608F4 0FC1E12D */ jal getPlayer_c_screenheight -/* 095428 7F0608F8 E7A00048 */ swc1 $f0, 0x48($sp) -/* 09542C 7F0608FC 0FC1E135 */ jal getPlayer_c_screentop -/* 095430 7F060900 E7A0004C */ swc1 $f0, 0x4c($sp) -/* 095434 7F060904 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 095438 7F060908 3C188008 */ lui $t8, %hi(g_CurrentPlayer) -/* 09543C 7F06090C 8F18A0B0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 095440 7F060910 44818000 */ mtc1 $at, $f16 -/* 095444 7F060914 C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 095448 7F060918 C7081000 */ lwc1 $f8, 0x1000($t8) -/* 09544C 7F06091C 8FB900F8 */ lw $t9, 0xf8($sp) -/* 095450 7F060920 46105182 */ mul.s $f6, $f10, $f16 -/* 095454 7F060924 46004101 */ sub.s $f4, $f8, $f0 -/* 095458 7F060928 C72A0010 */ lwc1 $f10, 0x10($t9) -/* 09545C 7F06092C C7A80048 */ lwc1 $f8, 0x48($sp) -/* 095460 7F060930 46062481 */ sub.s $f18, $f4, $f6 -/* 095464 7F060934 44812000 */ mtc1 $at, $f4 -/* 095468 7F060938 460A9402 */ mul.s $f16, $f18, $f10 -/* 09546C 7F06093C C7AA0198 */ lwc1 $f10, 0x198($sp) -/* 095470 7F060940 46044182 */ mul.s $f6, $f8, $f4 -/* 095474 7F060944 46068483 */ div.s $f18, $f16, $f6 -/* 095478 7F060948 46125201 */ sub.s $f8, $f10, $f18 -/* 09547C 7F06094C E7A80198 */ swc1 $f8, 0x198($sp) -.L7F060950: -/* 095480 7F060950 0FC17185 */ jal sub_GAME_7F05C614 -/* 095484 7F060954 00000000 */ nop -/* 095488 7F060958 0FC15FF4 */ jal matrix_4x4_set_identity -/* 09548C 7F06095C 27A40154 */ addiu $a0, $sp, 0x154 -/* 095490 7F060960 8FA200FC */ lw $v0, 0xfc($sp) -/* 095494 7F060964 2401001E */ li $at, 30 -/* 095498 7F060968 10410002 */ beq $v0, $at, .L7F060974 -/* 09549C 7F06096C 24010017 */ li $at, 23 -/* 0954A0 7F060970 14410010 */ bne $v0, $at, .L7F0609B4 -.L7F060974: -/* 0954A4 7F060974 3C0D8003 */ lui $t5, %hi(D_80035C70) -/* 0954A8 7F060978 25AD5C70 */ addiu $t5, %lo(D_80035C70) # addiu $t5, $t5, 0x5c70 -/* 0954AC 7F06097C 8DA10000 */ lw $at, ($t5) -/* 0954B0 7F060980 27A400B8 */ addiu $a0, $sp, 0xb8 -/* 0954B4 7F060984 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 0954B8 7F060988 AC810000 */ sw $at, ($a0) -/* 0954BC 7F06098C 8DAF0004 */ lw $t7, 4($t5) -/* 0954C0 7F060990 AC8F0004 */ sw $t7, 4($a0) -/* 0954C4 7F060994 8DA10008 */ lw $at, 8($t5) -/* 0954C8 7F060998 0FC161C5 */ jal matrix_4x4_set_rotation_around_xyz -/* 0954CC 7F06099C AC810008 */ sw $at, 8($a0) -/* 0954D0 7F0609A0 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 0954D4 7F0609A4 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 0954D8 7F0609A8 27A50154 */ addiu $a1, $sp, 0x154 -/* 0954DC 7F0609AC 10000039 */ b .L7F060A94 -/* 0954E0 7F0609B0 8E0D00BC */ lw $t5, 0xbc($s0) -.L7F0609B4: -/* 0954E4 7F0609B4 2401001F */ li $at, 31 -/* 0954E8 7F0609B8 14410010 */ bne $v0, $at, .L7F0609FC -/* 0954EC 7F0609BC 3C188003 */ lui $t8, %hi(D_80035C7C) -/* 0954F0 7F0609C0 27185C7C */ addiu $t8, %lo(D_80035C7C) # addiu $t8, $t8, 0x5c7c -/* 0954F4 7F0609C4 8F010000 */ lw $at, ($t8) -/* 0954F8 7F0609C8 27A400AC */ addiu $a0, $sp, 0xac -/* 0954FC 7F0609CC 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095500 7F0609D0 AC810000 */ sw $at, ($a0) -/* 095504 7F0609D4 8F0E0004 */ lw $t6, 4($t8) -/* 095508 7F0609D8 AC8E0004 */ sw $t6, 4($a0) -/* 09550C 7F0609DC 8F010008 */ lw $at, 8($t8) -/* 095510 7F0609E0 0FC161C5 */ jal matrix_4x4_set_rotation_around_xyz -/* 095514 7F0609E4 AC810008 */ sw $at, 8($a0) -/* 095518 7F0609E8 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 09551C 7F0609EC 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 095520 7F0609F0 27A50154 */ addiu $a1, $sp, 0x154 -/* 095524 7F0609F4 10000027 */ b .L7F060A94 -/* 095528 7F0609F8 8E0D00BC */ lw $t5, 0xbc($s0) -.L7F0609FC: -/* 09552C 7F0609FC 24010001 */ li $at, 1 -/* 095530 7F060A00 14410023 */ bne $v0, $at, .L7F060A90 -/* 095534 7F060A04 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) -/* 095538 7F060A08 8DADA0B0 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 09553C 7F060A0C 24010011 */ li $at, 17 -/* 095540 7F060A10 3C198003 */ lui $t9, %hi(D_80035C88) -/* 095544 7F060A14 8DAF2A38 */ lw $t7, 0x2a38($t5) -/* 095548 7F060A18 27395C88 */ addiu $t9, %lo(D_80035C88) # addiu $t9, $t9, 0x5c88 -/* 09554C 7F060A1C 55E1001D */ bnel $t7, $at, .L7F060A94 -/* 095550 7F060A20 8E0D00BC */ lw $t5, 0xbc($s0) -/* 095554 7F060A24 8F210000 */ lw $at, ($t9) -/* 095558 7F060A28 27A400A0 */ addiu $a0, $sp, 0xa0 -/* 09555C 7F060A2C 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095560 7F060A30 AC810000 */ sw $at, ($a0) -/* 095564 7F060A34 8F2E0004 */ lw $t6, 4($t9) -/* 095568 7F060A38 AC8E0004 */ sw $t6, 4($a0) -/* 09556C 7F060A3C 8F210008 */ lw $at, 8($t9) -/* 095570 7F060A40 0FC161C5 */ jal matrix_4x4_set_rotation_around_xyz -/* 095574 7F060A44 AC810008 */ sw $at, 8($a0) -/* 095578 7F060A48 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 09557C 7F060A4C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 095580 7F060A50 27A50154 */ addiu $a1, $sp, 0x154 -/* 095584 7F060A54 3C01C020 */ li $at, 0xC0200000 # -2.500000 -/* 095588 7F060A58 44818000 */ mtc1 $at, $f16 -/* 09558C 7F060A5C C7A40194 */ lwc1 $f4, 0x194($sp) -/* 095590 7F060A60 3C018005 */ lui $at, %hi(D_80053E00) -/* 095594 7F060A64 C4323E00 */ lwc1 $f18, %lo(D_80053E00)($at) -/* 095598 7F060A68 46102180 */ add.s $f6, $f4, $f16 -/* 09559C 7F060A6C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0955A0 7F060A70 C7AA0198 */ lwc1 $f10, 0x198($sp) -/* 0955A4 7F060A74 44818000 */ mtc1 $at, $f16 -/* 0955A8 7F060A78 C7A4019C */ lwc1 $f4, 0x19c($sp) -/* 0955AC 7F060A7C E7A60194 */ swc1 $f6, 0x194($sp) -/* 0955B0 7F060A80 46125200 */ add.s $f8, $f10, $f18 -/* 0955B4 7F060A84 46102180 */ add.s $f6, $f4, $f16 -/* 0955B8 7F060A88 E7A80198 */ swc1 $f8, 0x198($sp) -/* 0955BC 7F060A8C E7A6019C */ swc1 $f6, 0x19c($sp) -.L7F060A90: -/* 0955C0 7F060A90 8E0D00BC */ lw $t5, 0xbc($s0) -.L7F060A94: -/* 0955C4 7F060A94 51A00017 */ beql $t5, $zero, .L7F060AF4 -/* 0955C8 7F060A98 44802000 */ mtc1 $zero, $f4 -/* 0955CC 7F060A9C C7AA0194 */ lwc1 $f10, 0x194($sp) -/* 0955D0 7F060AA0 C61200AC */ lwc1 $f18, 0xac($s0) -/* 0955D4 7F060AA4 C7A40198 */ lwc1 $f4, 0x198($sp) -/* 0955D8 7F060AA8 2604007C */ addiu $a0, $s0, 0x7c -/* 0955DC 7F060AAC 46125200 */ add.s $f8, $f10, $f18 -/* 0955E0 7F060AB0 C7AA019C */ lwc1 $f10, 0x19c($sp) -/* 0955E4 7F060AB4 27A50154 */ addiu $a1, $sp, 0x154 -/* 0955E8 7F060AB8 E7A80194 */ swc1 $f8, 0x194($sp) -/* 0955EC 7F060ABC C61000B0 */ lwc1 $f16, 0xb0($s0) -/* 0955F0 7F060AC0 46102180 */ add.s $f6, $f4, $f16 -/* 0955F4 7F060AC4 E7A60198 */ swc1 $f6, 0x198($sp) -/* 0955F8 7F060AC8 C61200B4 */ lwc1 $f18, 0xb4($s0) -/* 0955FC 7F060ACC 46125200 */ add.s $f8, $f10, $f18 -/* 095600 7F060AD0 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 095604 7F060AD4 E7A8019C */ swc1 $f8, 0x19c($sp) -/* 095608 7F060AD8 44800000 */ mtc1 $zero, $f0 -/* 09560C 7F060ADC 00000000 */ nop -/* 095610 7F060AE0 E7A00184 */ swc1 $f0, 0x184($sp) -/* 095614 7F060AE4 E7A00188 */ swc1 $f0, 0x188($sp) -/* 095618 7F060AE8 1000000A */ b .L7F060B14 -/* 09561C 7F060AEC E7A0018C */ swc1 $f0, 0x18c($sp) -/* 095620 7F060AF0 44802000 */ mtc1 $zero, $f4 -.L7F060AF4: -/* 095624 7F060AF4 44808000 */ mtc1 $zero, $f16 -/* 095628 7F060AF8 44803000 */ mtc1 $zero, $f6 -/* 09562C 7F060AFC 44805000 */ mtc1 $zero, $f10 -/* 095630 7F060B00 44800000 */ mtc1 $zero, $f0 -/* 095634 7F060B04 E6040078 */ swc1 $f4, 0x78($s0) -/* 095638 7F060B08 E610006C */ swc1 $f16, 0x6c($s0) -/* 09563C 7F060B0C E6060070 */ swc1 $f6, 0x70($s0) -/* 095640 7F060B10 E60A0074 */ swc1 $f10, 0x74($s0) -.L7F060B14: -/* 095644 7F060B14 C61200CC */ lwc1 $f18, 0xcc($s0) -/* 095648 7F060B18 44050000 */ mfc1 $a1, $f0 -/* 09564C 7F060B1C 44060000 */ mfc1 $a2, $f0 -/* 095650 7F060B20 E7B20010 */ swc1 $f18, 0x10($sp) -/* 095654 7F060B24 C60800D0 */ lwc1 $f8, 0xd0($s0) -/* 095658 7F060B28 44070000 */ mfc1 $a3, $f0 -/* 09565C 7F060B2C 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 095660 7F060B30 E7A80014 */ swc1 $f8, 0x14($sp) -/* 095664 7F060B34 C60400D4 */ lwc1 $f4, 0xd4($s0) -/* 095668 7F060B38 E7A40018 */ swc1 $f4, 0x18($sp) -/* 09566C 7F060B3C C61000D8 */ lwc1 $f16, 0xd8($s0) -/* 095670 7F060B40 E7B0001C */ swc1 $f16, 0x1c($sp) -/* 095674 7F060B44 C60600DC */ lwc1 $f6, 0xdc($s0) -/* 095678 7F060B48 E7A60020 */ swc1 $f6, 0x20($sp) -/* 09567C 7F060B4C C60A00E0 */ lwc1 $f10, 0xe0($s0) -/* 095680 7F060B50 0FC16642 */ jal matrix_4x4_set_basis_and_position_target -/* 095684 7F060B54 E7AA0024 */ swc1 $f10, 0x24($sp) -/* 095688 7F060B58 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 09568C 7F060B5C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 095690 7F060B60 27A50154 */ addiu $a1, $sp, 0x154 -/* 095694 7F060B64 C7B20194 */ lwc1 $f18, 0x194($sp) -/* 095698 7F060B68 C60801C8 */ lwc1 $f8, 0x1c8($s0) -/* 09569C 7F060B6C C7B00198 */ lwc1 $f16, 0x198($sp) -/* 0956A0 7F060B70 C60601CC */ lwc1 $f6, 0x1cc($s0) -/* 0956A4 7F060B74 46089101 */ sub.s $f4, $f18, $f8 -/* 0956A8 7F060B78 C60801D0 */ lwc1 $f8, 0x1d0($s0) -/* 0956AC 7F060B7C C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 0956B0 7F060B80 46068281 */ sub.s $f10, $f16, $f6 -/* 0956B4 7F060B84 44062000 */ mfc1 $a2, $f4 -/* 0956B8 7F060B88 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 0956BC 7F060B8C 46089101 */ sub.s $f4, $f18, $f8 -/* 0956C0 7F060B90 44075000 */ mfc1 $a3, $f10 -/* 0956C4 7F060B94 24050000 */ li $a1, 0 -/* 0956C8 7F060B98 0FC1673A */ jal matrix_4x4_align -/* 0956CC 7F060B9C E7A40010 */ swc1 $f4, 0x10($sp) -/* 0956D0 7F060BA0 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 0956D4 7F060BA4 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 0956D8 7F060BA8 27A50154 */ addiu $a1, $sp, 0x154 -/* 0956DC 7F060BAC 27A40154 */ addiu $a0, $sp, 0x154 -/* 0956E0 7F060BB0 0FC16008 */ jal matrix_4x4_copy -/* 0956E4 7F060BB4 27A50264 */ addiu $a1, $sp, 0x264 -/* 0956E8 7F060BB8 27A40194 */ addiu $a0, $sp, 0x194 -/* 0956EC 7F060BBC 0FC16266 */ jal matrix_4x4_set_position -/* 0956F0 7F060BC0 27A50264 */ addiu $a1, $sp, 0x264 -/* 0956F4 7F060BC4 26050228 */ addiu $a1, $s0, 0x228 -/* 0956F8 7F060BC8 AFA50044 */ sw $a1, 0x44($sp) -/* 0956FC 7F060BCC 0FC16008 */ jal matrix_4x4_copy -/* 095700 7F060BD0 27A40264 */ addiu $a0, $sp, 0x264 -/* 095704 7F060BD4 26040268 */ addiu $a0, $s0, 0x268 -/* 095708 7F060BD8 AFA40040 */ sw $a0, 0x40($sp) -/* 09570C 7F060BDC 0FC16008 */ jal matrix_4x4_copy -/* 095710 7F060BE0 260502A8 */ addiu $a1, $s0, 0x2a8 -/* 095714 7F060BE4 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 095718 7F060BE8 00000000 */ nop -/* 09571C 7F060BEC 00402025 */ move $a0, $v0 -/* 095720 7F060BF0 8FA50044 */ lw $a1, 0x44($sp) -/* 095724 7F060BF4 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 095728 7F060BF8 8FA60040 */ lw $a2, 0x40($sp) -/* 09572C 7F060BFC 240F0001 */ li $t7, 1 -/* 095730 7F060C00 A20F000F */ sb $t7, 0xf($s0) -/* 095734 7F060C04 0FC17412 */ jal get_ptr_weapon_model_header_line -/* 095738 7F060C08 8FA400FC */ lw $a0, 0xfc($sp) -/* 09573C 7F060C0C 10400017 */ beqz $v0, .L7F060C6C -/* 095740 7F060C10 8FA400FC */ lw $a0, 0xfc($sp) -/* 095744 7F060C14 0FC1782D */ jal bondwalkItemCheckBitflags -/* 095748 7F060C18 24050800 */ li $a1, 2048 -/* 09574C 7F060C1C 10400013 */ beqz $v0, .L7F060C6C -/* 095750 7F060C20 8FA400FC */ lw $a0, 0xfc($sp) -/* 095754 7F060C24 0FC1782D */ jal bondwalkItemCheckBitflags -/* 095758 7F060C28 24052000 */ li $a1, 8192 -/* 09575C 7F060C2C 54400010 */ bnezl $v0, .L7F060C70 -/* 095760 7F060C30 A200000F */ sb $zero, 0xf($s0) -/* 095764 7F060C34 8E020024 */ lw $v0, 0x24($s0) -/* 095768 7F060C38 24010006 */ li $at, 6 -/* 09576C 7F060C3C 1041000B */ beq $v0, $at, .L7F060C6C -/* 095770 7F060C40 24010007 */ li $at, 7 -/* 095774 7F060C44 5041000A */ beql $v0, $at, .L7F060C70 -/* 095778 7F060C48 A200000F */ sb $zero, 0xf($s0) -/* 09577C 7F060C4C 0FC173AF */ jal Gun_hand_without_item -/* 095780 7F060C50 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 095784 7F060C54 50400006 */ beql $v0, $zero, .L7F060C70 -/* 095788 7F060C58 A200000F */ sb $zero, 0xf($s0) -/* 09578C 7F060C5C 0FC173C0 */ jal get_itemtype_in_hand -/* 095790 7F060C60 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 095794 7F060C64 54400003 */ bnezl $v0, .L7F060C74 -/* 095798 7F060C68 8E18002C */ lw $t8, 0x2c($s0) -.L7F060C6C: -/* 09579C 7F060C6C A200000F */ sb $zero, 0xf($s0) -.L7F060C70: -/* 0957A0 7F060C70 8E18002C */ lw $t8, 0x2c($s0) -.L7F060C74: -/* 0957A4 7F060C74 8FA400FC */ lw $a0, 0xfc($sp) -/* 0957A8 7F060C78 5F000007 */ bgtzl $t8, .L7F060C98 -/* 0957AC 7F060C7C 8219000F */ lb $t9, 0xf($s0) -/* 0957B0 7F060C80 0FC1782D */ jal bondwalkItemCheckBitflags -/* 0957B4 7F060C84 24050002 */ li $a1, 2 -/* 0957B8 7F060C88 50400003 */ beql $v0, $zero, .L7F060C98 -/* 0957BC 7F060C8C 8219000F */ lb $t9, 0xf($s0) -/* 0957C0 7F060C90 A200000F */ sb $zero, 0xf($s0) -/* 0957C4 7F060C94 8219000F */ lb $t9, 0xf($s0) -.L7F060C98: -/* 0957C8 7F060C98 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 0957CC 7F060C9C 8FAD02A8 */ lw $t5, 0x2a8($sp) -/* 0957D0 7F060CA0 532002CD */ beql $t9, $zero, .L7F0617D8 -/* 0957D4 7F060CA4 8FAF00FC */ lw $t7, 0xfc($sp) -/* 0957D8 7F060CA8 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0957DC 7F060CAC 000D7940 */ sll $t7, $t5, 5 -/* 0957E0 7F060CB0 00001825 */ move $v1, $zero -/* 0957E4 7F060CB4 01CF1021 */ addu $v0, $t6, $t7 -/* 0957E8 7F060CB8 8444081E */ lh $a0, 0x81e($v0) -/* 0957EC 7F060CBC 24420810 */ addiu $v0, $v0, 0x810 -/* 0957F0 7F060CC0 AFA201A0 */ sw $v0, 0x1a0($sp) -/* 0957F4 7F060CC4 0004C180 */ sll $t8, $a0, 6 -/* 0957F8 7F060CC8 03002025 */ move $a0, $t8 -/* 0957FC 7F060CCC 0FC2F5C5 */ jal dynAllocate -/* 095800 7F060CD0 AFA00100 */ sw $zero, 0x100($sp) -/* 095804 7F060CD4 8FB901A0 */ lw $t9, 0x1a0($sp) -/* 095808 7F060CD8 AFA202A4 */ sw $v0, 0x2a4($sp) -/* 09580C 7F060CDC 8FA30100 */ lw $v1, 0x100($sp) -/* 095810 7F060CE0 872D000E */ lh $t5, 0xe($t9) -/* 095814 7F060CE4 19A0000D */ blez $t5, .L7F060D1C -/* 095818 7F060CE8 00402025 */ move $a0, $v0 -/* 09581C 7F060CEC AFA30100 */ sw $v1, 0x100($sp) -.L7F060CF0: -/* 095820 7F060CF0 0FC15FF4 */ jal matrix_4x4_set_identity -/* 095824 7F060CF4 AFA40044 */ sw $a0, 0x44($sp) -/* 095828 7F060CF8 8FAE01A0 */ lw $t6, 0x1a0($sp) -/* 09582C 7F060CFC 8FA30100 */ lw $v1, 0x100($sp) -/* 095830 7F060D00 8FA40044 */ lw $a0, 0x44($sp) -/* 095834 7F060D04 85CF000E */ lh $t7, 0xe($t6) -/* 095838 7F060D08 24630001 */ addiu $v1, $v1, 1 -/* 09583C 7F060D0C 24840040 */ addiu $a0, $a0, 0x40 -/* 095840 7F060D10 006F082A */ slt $at, $v1, $t7 -/* 095844 7F060D14 5420FFF6 */ bnezl $at, .L7F060CF0 -/* 095848 7F060D18 AFA30100 */ sw $v1, 0x100($sp) -.L7F060D1C: -/* 09584C 7F060D1C 0FC1D73D */ jal modelCalculateRwDataLen -/* 095850 7F060D20 8FA401A0 */ lw $a0, 0x1a0($sp) -/* 095854 7F060D24 260402F8 */ addiu $a0, $s0, 0x2f8 -/* 095858 7F060D28 8FA501A0 */ lw $a1, 0x1a0($sp) -/* 09585C 7F060D2C AFA40044 */ sw $a0, 0x44($sp) -/* 095860 7F060D30 0FC1D7DA */ jal modelInit -/* 095864 7F060D34 26060318 */ addiu $a2, $s0, 0x318 -/* 095868 7F060D38 8FA40044 */ lw $a0, 0x44($sp) -/* 09586C 7F060D3C 0FC17A5E */ jal sub_GAME_7F05E978 -/* 095870 7F060D40 24050001 */ li $a1, 1 -/* 095874 7F060D44 8FA40044 */ lw $a0, 0x44($sp) -/* 095878 7F060D48 0FC17AA5 */ jal sub_GAME_7F05EA94 -/* 09587C 7F060D4C 8205000E */ lb $a1, 0xe($s0) -/* 095880 7F060D50 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 095884 7F060D54 8F020008 */ lw $v0, 8($t8) -/* 095888 7F060D58 8C440004 */ lw $a0, 4($v0) -/* 09588C 7F060D5C 50800008 */ beql $a0, $zero, .L7F060D80 -/* 095890 7F060D60 8C43000C */ lw $v1, 0xc($v0) -/* 095894 7F060D64 8C830004 */ lw $v1, 4($a0) -/* 095898 7F060D68 94790004 */ lhu $t9, 4($v1) -/* 09589C 7F060D6C 00196880 */ sll $t5, $t9, 2 -/* 0958A0 7F060D70 020D7021 */ addu $t6, $s0, $t5 -/* 0958A4 7F060D74 25CF0318 */ addiu $t7, $t6, 0x318 -/* 0958A8 7F060D78 AFAF010C */ sw $t7, 0x10c($sp) -/* 0958AC 7F060D7C 8C43000C */ lw $v1, 0xc($v0) -.L7F060D80: -/* 0958B0 7F060D80 50600004 */ beql $v1, $zero, .L7F060D94 -/* 0958B4 7F060D84 8FB902A4 */ lw $t9, 0x2a4($sp) -/* 0958B8 7F060D88 8C780004 */ lw $t8, 4($v1) -/* 0958BC 7F060D8C AFB80108 */ sw $t8, 0x108($sp) -/* 0958C0 7F060D90 8FB902A4 */ lw $t9, 0x2a4($sp) -.L7F060D94: -/* 0958C4 7F060D94 24050400 */ li $a1, 1024 -/* 0958C8 7F060D98 AE190304 */ sw $t9, 0x304($s0) -/* 0958CC 7F060D9C 0FC1782D */ jal bondwalkItemCheckBitflags -/* 0958D0 7F060DA0 8FA400FC */ lw $a0, 0xfc($sp) -/* 0958D4 7F060DA4 10400008 */ beqz $v0, .L7F060DC8 -/* 0958D8 7F060DA8 00000000 */ nop -/* 0958DC 7F060DAC 8FAD02A8 */ lw $t5, 0x2a8($sp) -/* 0958E0 7F060DB0 24010001 */ li $at, 1 -/* 0958E4 7F060DB4 15A10004 */ bne $t5, $at, .L7F060DC8 -/* 0958E8 7F060DB8 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0958EC 7F060DBC 44816000 */ mtc1 $at, $f12 -/* 0958F0 7F060DC0 0FC1626D */ jal matrix_column_1_scalar_multiply -/* 0958F4 7F060DC4 27A50264 */ addiu $a1, $sp, 0x264 -.L7F060DC8: -/* 0958F8 7F060DC8 3C018005 */ lui $at, %hi(D_80053E04) -/* 0958FC 7F060DCC C42C3E04 */ lwc1 $f12, %lo(D_80053E04)($at) -/* 095900 7F060DD0 0FC1629F */ jal matrix_scalar_multiply -/* 095904 7F060DD4 27A50264 */ addiu $a1, $sp, 0x264 -/* 095908 7F060DD8 27A40264 */ addiu $a0, $sp, 0x264 -/* 09590C 7F060DDC 0FC16008 */ jal matrix_4x4_copy -/* 095910 7F060DE0 8FA502A4 */ lw $a1, 0x2a4($sp) -/* 095914 7F060DE4 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 095918 7F060DE8 3C0E8004 */ lui $t6, %hi(skeleton_gun_revolver) -/* 09591C 7F060DEC 25CEC76C */ addiu $t6, %lo(skeleton_gun_revolver) # addiu $t6, $t6, -0x3894 -/* 095920 7F060DF0 8DF80004 */ lw $t8, 4($t7) -/* 095924 7F060DF4 55D80078 */ bnel $t6, $t8, .L7F060FD8 -/* 095928 7F060DF8 8FA2010C */ lw $v0, 0x10c($sp) -/* 09592C 7F060DFC 8DE20008 */ lw $v0, 8($t7) -/* 095930 7F060E00 8FB900FC */ lw $t9, 0xfc($sp) -/* 095934 7F060E04 24010012 */ li $at, 18 -/* 095938 7F060E08 8C430010 */ lw $v1, 0x10($v0) -/* 09593C 7F060E0C 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095940 7F060E10 50600041 */ beql $v1, $zero, .L7F060F18 -/* 095944 7F060E14 8C430014 */ lw $v1, 0x14($v0) -/* 095948 7F060E18 44806000 */ mtc1 $zero, $f12 -/* 09594C 7F060E1C 17210021 */ bne $t9, $at, .L7F060EA4 -/* 095950 7F060E20 8C640004 */ lw $a0, 4($v1) -/* 095954 7F060E24 8E0D0024 */ lw $t5, 0x24($s0) -/* 095958 7F060E28 24010001 */ li $at, 1 -/* 09595C 7F060E2C 55A10012 */ bnel $t5, $at, .L7F060E78 -/* 095960 7F060E30 8E18002C */ lw $t8, 0x2c($s0) -/* 095964 7F060E34 8E18002C */ lw $t8, 0x2c($s0) -/* 095968 7F060E38 8E0E0020 */ lw $t6, 0x20($s0) -/* 09596C 7F060E3C 3C018005 */ lui $at, %hi(D_80053E08) -/* 095970 7F060E40 00187880 */ sll $t7, $t8, 2 -/* 095974 7F060E44 01F87823 */ subu $t7, $t7, $t8 -/* 095978 7F060E48 000F7840 */ sll $t7, $t7, 1 -/* 09597C 7F060E4C 01CFC823 */ subu $t9, $t6, $t7 -/* 095980 7F060E50 272D001E */ addiu $t5, $t9, 0x1e -/* 095984 7F060E54 448D8000 */ mtc1 $t5, $f16 -/* 095988 7F060E58 C42A3E08 */ lwc1 $f10, %lo(D_80053E08)($at) -/* 09598C 7F060E5C 3C014210 */ li $at, 0x42100000 # 36.000000 -/* 095990 7F060E60 468081A0 */ cvt.s.w $f6, $f16 -/* 095994 7F060E64 44814000 */ mtc1 $at, $f8 -/* 095998 7F060E68 460A3482 */ mul.s $f18, $f6, $f10 -/* 09599C 7F060E6C 1000001D */ b .L7F060EE4 -/* 0959A0 7F060E70 46089303 */ div.s $f12, $f18, $f8 -/* 0959A4 7F060E74 8E18002C */ lw $t8, 0x2c($s0) -.L7F060E78: -/* 0959A8 7F060E78 240E0006 */ li $t6, 6 -/* 0959AC 7F060E7C 3C018005 */ lui $at, %hi(D_80053E0C) -/* 0959B0 7F060E80 01D87823 */ subu $t7, $t6, $t8 -/* 0959B4 7F060E84 448F2000 */ mtc1 $t7, $f4 -/* 0959B8 7F060E88 C4263E0C */ lwc1 $f6, %lo(D_80053E0C)($at) -/* 0959BC 7F060E8C 3C0140C0 */ li $at, 0x40C00000 # 6.000000 -/* 0959C0 7F060E90 46802420 */ cvt.s.w $f16, $f4 -/* 0959C4 7F060E94 44819000 */ mtc1 $at, $f18 -/* 0959C8 7F060E98 46068282 */ mul.s $f10, $f16, $f6 -/* 0959CC 7F060E9C 10000011 */ b .L7F060EE4 -/* 0959D0 7F060EA0 46125303 */ div.s $f12, $f10, $f18 -.L7F060EA4: -/* 0959D4 7F060EA4 8E190024 */ lw $t9, 0x24($s0) -/* 0959D8 7F060EA8 24010001 */ li $at, 1 -/* 0959DC 7F060EAC 1721000D */ bne $t9, $at, .L7F060EE4 -/* 0959E0 7F060EB0 00000000 */ nop -/* 0959E4 7F060EB4 8E020020 */ lw $v0, 0x20($s0) -/* 0959E8 7F060EB8 28410006 */ slti $at, $v0, 6 -/* 0959EC 7F060EBC 10200009 */ beqz $at, .L7F060EE4 -/* 0959F0 7F060EC0 00000000 */ nop -/* 0959F4 7F060EC4 44824000 */ mtc1 $v0, $f8 -/* 0959F8 7F060EC8 3C018005 */ lui $at, %hi(D_80053E10) -/* 0959FC 7F060ECC C4303E10 */ lwc1 $f16, %lo(D_80053E10)($at) -/* 095A00 7F060ED0 46804120 */ cvt.s.w $f4, $f8 -/* 095A04 7F060ED4 3C014210 */ li $at, 0x42100000 # 36.000000 -/* 095A08 7F060ED8 44815000 */ mtc1 $at, $f10 -/* 095A0C 7F060EDC 46102182 */ mul.s $f6, $f4, $f16 -/* 095A10 7F060EE0 460A3303 */ div.s $f12, $f6, $f10 -.L7F060EE4: -/* 095A14 7F060EE4 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 095A18 7F060EE8 AFA4009C */ sw $a0, 0x9c($sp) -/* 095A1C 7F060EEC 8FA4009C */ lw $a0, 0x9c($sp) -/* 095A20 7F060EF0 0FC16266 */ jal matrix_4x4_set_position -/* 095A24 7F060EF4 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095A28 7F060EF8 8FA602A4 */ lw $a2, 0x2a4($sp) -/* 095A2C 7F060EFC 27A40264 */ addiu $a0, $sp, 0x264 -/* 095A30 7F060F00 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095A34 7F060F04 0FC16032 */ jal matrix_4x4_multiply -/* 095A38 7F060F08 24C600C0 */ addiu $a2, $a2, 0xc0 -/* 095A3C 7F060F0C 8FAD01A0 */ lw $t5, 0x1a0($sp) -/* 095A40 7F060F10 8DA20008 */ lw $v0, 8($t5) -/* 095A44 7F060F14 8C430014 */ lw $v1, 0x14($v0) -.L7F060F18: -/* 095A48 7F060F18 5060002F */ beql $v1, $zero, .L7F060FD8 -/* 095A4C 7F060F1C 8FA2010C */ lw $v0, 0x10c($sp) -/* 095A50 7F060F20 8E0E0024 */ lw $t6, 0x24($s0) -/* 095A54 7F060F24 24010001 */ li $at, 1 -/* 095A58 7F060F28 8C640004 */ lw $a0, 4($v1) -/* 095A5C 7F060F2C 15C10022 */ bne $t6, $at, .L7F060FB8 -/* 095A60 7F060F30 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095A64 7F060F34 8E020020 */ lw $v0, 0x20($s0) -/* 095A68 7F060F38 24180006 */ li $t8, 6 -/* 095A6C 7F060F3C 28410003 */ slti $at, $v0, 3 -/* 095A70 7F060F40 1020000C */ beqz $at, .L7F060F74 -/* 095A74 7F060F44 03027823 */ subu $t7, $t8, $v0 -/* 095A78 7F060F48 44829000 */ mtc1 $v0, $f18 -/* 095A7C 7F060F4C 3C018005 */ lui $at, %hi(D_80053E14) -/* 095A80 7F060F50 C4303E14 */ lwc1 $f16, %lo(D_80053E14)($at) -/* 095A84 7F060F54 46809220 */ cvt.s.w $f8, $f18 -/* 095A88 7F060F58 3C0140C0 */ li $at, 0x40C00000 # 6.000000 -/* 095A8C 7F060F5C 44815000 */ mtc1 $at, $f10 -/* 095A90 7F060F60 46004107 */ neg.s $f4, $f8 -/* 095A94 7F060F64 46102002 */ mul.s $f0, $f4, $f16 -/* 095A98 7F060F68 46000180 */ add.s $f6, $f0, $f0 -/* 095A9C 7F060F6C 1000000B */ b .L7F060F9C -/* 095AA0 7F060F70 460A3303 */ div.s $f12, $f6, $f10 -.L7F060F74: -/* 095AA4 7F060F74 448F9000 */ mtc1 $t7, $f18 -/* 095AA8 7F060F78 3C018005 */ lui $at, %hi(D_80053E18) -/* 095AAC 7F060F7C C4303E18 */ lwc1 $f16, %lo(D_80053E18)($at) -/* 095AB0 7F060F80 46809220 */ cvt.s.w $f8, $f18 -/* 095AB4 7F060F84 3C0140C0 */ li $at, 0x40C00000 # 6.000000 -/* 095AB8 7F060F88 44815000 */ mtc1 $at, $f10 -/* 095ABC 7F060F8C 46004107 */ neg.s $f4, $f8 -/* 095AC0 7F060F90 46102002 */ mul.s $f0, $f4, $f16 -/* 095AC4 7F060F94 46000180 */ add.s $f6, $f0, $f0 -/* 095AC8 7F060F98 460A3303 */ div.s $f12, $f6, $f10 -.L7F060F9C: -/* 095ACC 7F060F9C 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 095AD0 7F060FA0 AFA40094 */ sw $a0, 0x94($sp) -/* 095AD4 7F060FA4 8FA40094 */ lw $a0, 0x94($sp) -/* 095AD8 7F060FA8 0FC16266 */ jal matrix_4x4_set_position -/* 095ADC 7F060FAC 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095AE0 7F060FB0 10000004 */ b .L7F060FC4 -/* 095AE4 7F060FB4 8FA602A4 */ lw $a2, 0x2a4($sp) -.L7F060FB8: -/* 095AE8 7F060FB8 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 095AEC 7F060FBC 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095AF0 7F060FC0 8FA602A4 */ lw $a2, 0x2a4($sp) -.L7F060FC4: -/* 095AF4 7F060FC4 27A40264 */ addiu $a0, $sp, 0x264 -/* 095AF8 7F060FC8 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095AFC 7F060FCC 0FC16032 */ jal matrix_4x4_multiply -/* 095B00 7F060FD0 24C60100 */ addiu $a2, $a2, 0x100 -/* 095B04 7F060FD4 8FA2010C */ lw $v0, 0x10c($sp) -.L7F060FD8: -/* 095B08 7F060FD8 50400003 */ beql $v0, $zero, .L7F060FE8 -/* 095B0C 7F060FDC 8FB90108 */ lw $t9, 0x108($sp) -/* 095B10 7F060FE0 AC400000 */ sw $zero, ($v0) -/* 095B14 7F060FE4 8FB90108 */ lw $t9, 0x108($sp) -.L7F060FE8: -/* 095B18 7F060FE8 53200142 */ beql $t9, $zero, .L7F0614F4 -/* 095B1C 7F060FEC C6100260 */ lwc1 $f16, 0x260($s0) -/* 095B20 7F060FF0 0C002914 */ jal randomGetNext -/* 095B24 7F060FF4 00000000 */ nop -/* 095B28 7F060FF8 44829000 */ mtc1 $v0, $f18 -/* 095B2C 7F060FFC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 095B30 7F061000 04410004 */ bgez $v0, .L7F061014 -/* 095B34 7F061004 46809220 */ cvt.s.w $f8, $f18 -/* 095B38 7F061008 44812000 */ mtc1 $at, $f4 -/* 095B3C 7F06100C 00000000 */ nop -/* 095B40 7F061010 46044200 */ add.s $f8, $f8, $f4 -.L7F061014: -/* 095B44 7F061014 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 095B48 7F061018 44818000 */ mtc1 $at, $f16 -/* 095B4C 7F06101C 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 095B50 7F061020 44815000 */ mtc1 $at, $f10 -/* 095B54 7F061024 46104182 */ mul.s $f6, $f8, $f16 -/* 095B58 7F061028 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 095B5C 7F06102C 44812000 */ mtc1 $at, $f4 -/* 095B60 7F061030 8FAD00F8 */ lw $t5, 0xf8($sp) -/* 095B64 7F061034 8FA400FC */ lw $a0, 0xfc($sp) -/* 095B68 7F061038 24050001 */ li $a1, 1 -/* 095B6C 7F06103C 460A3482 */ mul.s $f18, $f6, $f10 -/* 095B70 7F061040 46049200 */ add.s $f8, $f18, $f4 -/* 095B74 7F061044 E7A80080 */ swc1 $f8, 0x80($sp) -/* 095B78 7F061048 C5B00000 */ lwc1 $f16, ($t5) -/* 095B7C 7F06104C 0FC1782D */ jal bondwalkItemCheckBitflags -/* 095B80 7F061050 E7B0007C */ swc1 $f16, 0x7c($sp) -/* 095B84 7F061054 10400018 */ beqz $v0, .L7F0610B8 -/* 095B88 7F061058 8FA40108 */ lw $a0, 0x108($sp) -/* 095B8C 7F06105C 0C002914 */ jal randomGetNext -/* 095B90 7F061060 00000000 */ nop -/* 095B94 7F061064 44823000 */ mtc1 $v0, $f6 -/* 095B98 7F061068 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 095B9C 7F06106C 04410004 */ bgez $v0, .L7F061080 -/* 095BA0 7F061070 468032A0 */ cvt.s.w $f10, $f6 -/* 095BA4 7F061074 44819000 */ mtc1 $at, $f18 -/* 095BA8 7F061078 00000000 */ nop -/* 095BAC 7F06107C 46125280 */ add.s $f10, $f10, $f18 -.L7F061080: -/* 095BB0 7F061080 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 095BB4 7F061084 44812000 */ mtc1 $at, $f4 -/* 095BB8 7F061088 3C018005 */ lui $at, %hi(D_80053E1C) -/* 095BBC 7F06108C C4303E1C */ lwc1 $f16, %lo(D_80053E1C)($at) -/* 095BC0 7F061090 46045202 */ mul.s $f8, $f10, $f4 -/* 095BC4 7F061094 27A50224 */ addiu $a1, $sp, 0x224 -/* 095BC8 7F061098 46104302 */ mul.s $f12, $f8, $f16 -/* 095BCC 7F06109C 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 095BD0 7F0610A0 00000000 */ nop -/* 095BD4 7F0610A4 8FA40108 */ lw $a0, 0x108($sp) -/* 095BD8 7F0610A8 0FC16266 */ jal matrix_4x4_set_position -/* 095BDC 7F0610AC 27A50224 */ addiu $a1, $sp, 0x224 -/* 095BE0 7F0610B0 10000004 */ b .L7F0610C4 -/* 095BE4 7F0610B4 C7AC0080 */ lwc1 $f12, 0x80($sp) -.L7F0610B8: -/* 095BE8 7F0610B8 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 095BEC 7F0610BC 27A50224 */ addiu $a1, $sp, 0x224 -/* 095BF0 7F0610C0 C7AC0080 */ lwc1 $f12, 0x80($sp) -.L7F0610C4: -/* 095BF4 7F0610C4 0FC1629F */ jal matrix_scalar_multiply -/* 095BF8 7F0610C8 27A50224 */ addiu $a1, $sp, 0x224 -/* 095BFC 7F0610CC C7AC007C */ lwc1 $f12, 0x7c($sp) -/* 095C00 7F0610D0 0FC16285 */ jal matrix_column_3_scalar_multiply -/* 095C04 7F0610D4 27A50224 */ addiu $a1, $sp, 0x224 -/* 095C08 7F0610D8 27A40264 */ addiu $a0, $sp, 0x264 -/* 095C0C 7F0610DC 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 095C10 7F0610E0 27A50224 */ addiu $a1, $sp, 0x224 -/* 095C14 7F0610E4 8FA502A4 */ lw $a1, 0x2a4($sp) -/* 095C18 7F0610E8 27A40224 */ addiu $a0, $sp, 0x224 -/* 095C1C 7F0610EC 0FC16008 */ jal matrix_4x4_copy -/* 095C20 7F0610F0 24A50040 */ addiu $a1, $a1, 0x40 -/* 095C24 7F0610F4 C7A60254 */ lwc1 $f6, 0x254($sp) -/* 095C28 7F0610F8 E60602E8 */ swc1 $f6, 0x2e8($s0) -/* 095C2C 7F0610FC C7B20258 */ lwc1 $f18, 0x258($sp) -/* 095C30 7F061100 E61202EC */ swc1 $f18, 0x2ec($s0) -/* 095C34 7F061104 C7AA025C */ lwc1 $f10, 0x25c($sp) -/* 095C38 7F061108 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 095C3C 7F06110C E60A02F0 */ swc1 $f10, 0x2f0($s0) -/* 095C40 7F061110 00402025 */ move $a0, $v0 -/* 095C44 7F061114 0FC1611D */ jal mtx4TransformVecInPlace -/* 095C48 7F061118 260502E8 */ addiu $a1, $s0, 0x2e8 -/* 095C4C 7F06111C C7A4025C */ lwc1 $f4, 0x25c($sp) -/* 095C50 7F061120 820E000D */ lb $t6, 0xd($s0) -/* 095C54 7F061124 46002207 */ neg.s $f8, $f4 -/* 095C58 7F061128 11C000EE */ beqz $t6, .L7F0614E4 -/* 095C5C 7F06112C E60802F4 */ swc1 $f8, 0x2f4($s0) -/* 095C60 7F061130 8FB8010C */ lw $t8, 0x10c($sp) -/* 095C64 7F061134 240F0001 */ li $t7, 1 -/* 095C68 7F061138 53000003 */ beql $t8, $zero, .L7F061148 -/* 095C6C 7F06113C 8FB901A0 */ lw $t9, 0x1a0($sp) -/* 095C70 7F061140 AF0F0000 */ sw $t7, ($t8) -/* 095C74 7F061144 8FB901A0 */ lw $t9, 0x1a0($sp) -.L7F061148: -/* 095C78 7F061148 8F2D0008 */ lw $t5, 8($t9) -/* 095C7C 7F06114C 8DA30008 */ lw $v1, 8($t5) -/* 095C80 7F061150 5060006D */ beql $v1, $zero, .L7F061308 -/* 095C84 7F061154 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 095C88 7F061158 8C620004 */ lw $v0, 4($v1) -/* 095C8C 7F06115C C7A60224 */ lwc1 $f6, 0x224($sp) -/* 095C90 7F061160 C7A40234 */ lwc1 $f4, 0x234($sp) -/* 095C94 7F061164 C4500000 */ lwc1 $f16, ($v0) -/* 095C98 7F061168 C44A0004 */ lwc1 $f10, 4($v0) -/* 095C9C 7F06116C 46068482 */ mul.s $f18, $f16, $f6 -/* 095CA0 7F061170 C4460008 */ lwc1 $f6, 8($v0) -/* 095CA4 7F061174 46045202 */ mul.s $f8, $f10, $f4 -/* 095CA8 7F061178 C7AA0244 */ lwc1 $f10, 0x244($sp) -/* 095CAC 7F06117C 460A3102 */ mul.s $f4, $f6, $f10 -/* 095CB0 7F061180 46089400 */ add.s $f16, $f18, $f8 -/* 095CB4 7F061184 C7A80254 */ lwc1 $f8, 0x254($sp) -/* 095CB8 7F061188 46048480 */ add.s $f18, $f16, $f4 -/* 095CBC 7F06118C C7B00228 */ lwc1 $f16, 0x228($sp) -/* 095CC0 7F061190 46124180 */ add.s $f6, $f8, $f18 -/* 095CC4 7F061194 C7B20238 */ lwc1 $f18, 0x238($sp) -/* 095CC8 7F061198 E7A60084 */ swc1 $f6, 0x84($sp) -/* 095CCC 7F06119C C44A0000 */ lwc1 $f10, ($v0) -/* 095CD0 7F0611A0 C4480004 */ lwc1 $f8, 4($v0) -/* 095CD4 7F0611A4 46105102 */ mul.s $f4, $f10, $f16 -/* 095CD8 7F0611A8 C4500008 */ lwc1 $f16, 8($v0) -/* 095CDC 7F0611AC 46124182 */ mul.s $f6, $f8, $f18 -/* 095CE0 7F0611B0 C7A80248 */ lwc1 $f8, 0x248($sp) -/* 095CE4 7F0611B4 46088482 */ mul.s $f18, $f16, $f8 -/* 095CE8 7F0611B8 46062280 */ add.s $f10, $f4, $f6 -/* 095CEC 7F0611BC C7A60258 */ lwc1 $f6, 0x258($sp) -/* 095CF0 7F0611C0 46125100 */ add.s $f4, $f10, $f18 -/* 095CF4 7F0611C4 C7AA022C */ lwc1 $f10, 0x22c($sp) -/* 095CF8 7F0611C8 46043400 */ add.s $f16, $f6, $f4 -/* 095CFC 7F0611CC C7A4023C */ lwc1 $f4, 0x23c($sp) -/* 095D00 7F0611D0 E7B00088 */ swc1 $f16, 0x88($sp) -/* 095D04 7F0611D4 C4480000 */ lwc1 $f8, ($v0) -/* 095D08 7F0611D8 C4460004 */ lwc1 $f6, 4($v0) -/* 095D0C 7F0611DC 460A4482 */ mul.s $f18, $f8, $f10 -/* 095D10 7F0611E0 C44A0008 */ lwc1 $f10, 8($v0) -/* 095D14 7F0611E4 46043402 */ mul.s $f16, $f6, $f4 -/* 095D18 7F0611E8 C7A6024C */ lwc1 $f6, 0x24c($sp) -/* 095D1C 7F0611EC 46065102 */ mul.s $f4, $f10, $f6 -/* 095D20 7F0611F0 46109200 */ add.s $f8, $f18, $f16 -/* 095D24 7F0611F4 C7B0025C */ lwc1 $f16, 0x25c($sp) -/* 095D28 7F0611F8 46044480 */ add.s $f18, $f8, $f4 -/* 095D2C 7F0611FC 46128280 */ add.s $f10, $f16, $f18 -/* 095D30 7F061200 0C002914 */ jal randomGetNext -/* 095D34 7F061204 E7AA008C */ swc1 $f10, 0x8c($sp) -/* 095D38 7F061208 44823000 */ mtc1 $v0, $f6 -/* 095D3C 7F06120C 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 095D40 7F061210 04410005 */ bgez $v0, .L7F061228 -/* 095D44 7F061214 46803220 */ cvt.s.w $f8, $f6 -/* 095D48 7F061218 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 095D4C 7F06121C 44812000 */ mtc1 $at, $f4 -/* 095D50 7F061220 00000000 */ nop -/* 095D54 7F061224 46044200 */ add.s $f8, $f8, $f4 -.L7F061228: -/* 095D58 7F061228 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 095D5C 7F06122C 44818000 */ mtc1 $at, $f16 -/* 095D60 7F061230 3C018005 */ lui $at, %hi(D_80053E20) -/* 095D64 7F061234 C42A3E20 */ lwc1 $f10, %lo(D_80053E20)($at) -/* 095D68 7F061238 46104482 */ mul.s $f18, $f8, $f16 -/* 095D6C 7F06123C C7B00088 */ lwc1 $f16, 0x88($sp) -/* 095D70 7F061240 C7A40084 */ lwc1 $f4, 0x84($sp) -/* 095D74 7F061244 46002207 */ neg.s $f8, $f4 -/* 095D78 7F061248 460A9182 */ mul.s $f6, $f18, $f10 -/* 095D7C 7F06124C C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 095D80 7F061250 46008487 */ neg.s $f18, $f16 -/* 095D84 7F061254 44064000 */ mfc1 $a2, $f8 -/* 095D88 7F061258 44079000 */ mfc1 $a3, $f18 -/* 095D8C 7F06125C 44053000 */ mfc1 $a1, $f6 -/* 095D90 7F061260 46005187 */ neg.s $f6, $f10 -/* 095D94 7F061264 0FC1673A */ jal matrix_4x4_align -/* 095D98 7F061268 E7A60010 */ swc1 $f6, 0x10($sp) -/* 095D9C 7F06126C 3C018005 */ lui $at, %hi(D_80053E24) -/* 095DA0 7F061270 C4243E24 */ lwc1 $f4, %lo(D_80053E24)($at) -/* 095DA4 7F061274 C7A80080 */ lwc1 $f8, 0x80($sp) -/* 095DA8 7F061278 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 095DAC 7F06127C 46082302 */ mul.s $f12, $f4, $f8 -/* 095DB0 7F061280 0FC1629F */ jal matrix_scalar_multiply -/* 095DB4 7F061284 00000000 */ nop -/* 095DB8 7F061288 C7B00194 */ lwc1 $f16, 0x194($sp) -/* 095DBC 7F06128C C61201C8 */ lwc1 $f18, 0x1c8($s0) -/* 095DC0 7F061290 C7A60198 */ lwc1 $f6, 0x198($sp) -/* 095DC4 7F061294 C60401CC */ lwc1 $f4, 0x1cc($s0) -/* 095DC8 7F061298 46128281 */ sub.s $f10, $f16, $f18 -/* 095DCC 7F06129C C61201D0 */ lwc1 $f18, 0x1d0($s0) -/* 095DD0 7F0612A0 C7B0019C */ lwc1 $f16, 0x19c($sp) -/* 095DD4 7F0612A4 46043201 */ sub.s $f8, $f6, $f4 -/* 095DD8 7F0612A8 44065000 */ mfc1 $a2, $f10 -/* 095DDC 7F0612AC 27A40114 */ addiu $a0, $sp, 0x114 -/* 095DE0 7F0612B0 46128281 */ sub.s $f10, $f16, $f18 -/* 095DE4 7F0612B4 44074000 */ mfc1 $a3, $f8 -/* 095DE8 7F0612B8 24050000 */ li $a1, 0 -/* 095DEC 7F0612BC 0FC166D6 */ jal matrix_4x4_set_rotation_axis_angle -/* 095DF0 7F0612C0 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 095DF4 7F0612C4 27A40114 */ addiu $a0, $sp, 0x114 -/* 095DF8 7F0612C8 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 095DFC 7F0612CC 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 095E00 7F0612D0 C7AC007C */ lwc1 $f12, 0x7c($sp) -/* 095E04 7F0612D4 0FC162E0 */ jal matrix_row_3_scalar_multiply -/* 095E08 7F0612D8 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 095E0C 7F0612DC 27A40154 */ addiu $a0, $sp, 0x154 -/* 095E10 7F0612E0 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 095E14 7F0612E4 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 095E18 7F0612E8 27A40084 */ addiu $a0, $sp, 0x84 -/* 095E1C 7F0612EC 0FC16266 */ jal matrix_4x4_set_position -/* 095E20 7F0612F0 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 095E24 7F0612F4 8FA502A4 */ lw $a1, 0x2a4($sp) -/* 095E28 7F0612F8 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 095E2C 7F0612FC 0FC16008 */ jal matrix_4x4_copy -/* 095E30 7F061300 24A50080 */ addiu $a1, $a1, 0x80 -/* 095E34 7F061304 8FAF01A0 */ lw $t7, 0x1a0($sp) -.L7F061308: -/* 095E38 7F061308 3C0E8004 */ lui $t6, %hi(skeleton_gun_kf7) -/* 095E3C 7F06130C 25CEC7AC */ addiu $t6, %lo(skeleton_gun_kf7) # addiu $t6, $t6, -0x3854 -/* 095E40 7F061310 8DF80004 */ lw $t8, 4($t7) -/* 095E44 7F061314 55D80074 */ bnel $t6, $t8, .L7F0614E8 -/* 095E48 7F061318 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 095E4C 7F06131C 8DF90008 */ lw $t9, 8($t7) -/* 095E50 7F061320 8F230010 */ lw $v1, 0x10($t9) -/* 095E54 7F061324 50600070 */ beql $v1, $zero, .L7F0614E8 -/* 095E58 7F061328 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 095E5C 7F06132C 8C620004 */ lw $v0, 4($v1) -/* 095E60 7F061330 C7A40224 */ lwc1 $f4, 0x224($sp) -/* 095E64 7F061334 C7B20234 */ lwc1 $f18, 0x234($sp) -/* 095E68 7F061338 C4460000 */ lwc1 $f6, ($v0) -/* 095E6C 7F06133C C4500004 */ lwc1 $f16, 4($v0) -/* 095E70 7F061340 3C018005 */ lui $at, %hi(D_80053E28) -/* 095E74 7F061344 46043202 */ mul.s $f8, $f6, $f4 -/* 095E78 7F061348 C4440008 */ lwc1 $f4, 8($v0) -/* 095E7C 7F06134C 8FAD02A4 */ lw $t5, 0x2a4($sp) -/* 095E80 7F061350 46128282 */ mul.s $f10, $f16, $f18 -/* 095E84 7F061354 C7B00244 */ lwc1 $f16, 0x244($sp) -/* 095E88 7F061358 25AE00C0 */ addiu $t6, $t5, 0xc0 -/* 095E8C 7F06135C 46102482 */ mul.s $f18, $f4, $f16 -/* 095E90 7F061360 460A4180 */ add.s $f6, $f8, $f10 -/* 095E94 7F061364 C7AA0254 */ lwc1 $f10, 0x254($sp) -/* 095E98 7F061368 46123200 */ add.s $f8, $f6, $f18 -/* 095E9C 7F06136C C7A60228 */ lwc1 $f6, 0x228($sp) -/* 095EA0 7F061370 46085100 */ add.s $f4, $f10, $f8 -/* 095EA4 7F061374 C7A80238 */ lwc1 $f8, 0x238($sp) -/* 095EA8 7F061378 E7A40084 */ swc1 $f4, 0x84($sp) -/* 095EAC 7F06137C C4500000 */ lwc1 $f16, ($v0) -/* 095EB0 7F061380 C44A0004 */ lwc1 $f10, 4($v0) -/* 095EB4 7F061384 46068482 */ mul.s $f18, $f16, $f6 -/* 095EB8 7F061388 C4460008 */ lwc1 $f6, 8($v0) -/* 095EBC 7F06138C 46085102 */ mul.s $f4, $f10, $f8 -/* 095EC0 7F061390 C7AA0248 */ lwc1 $f10, 0x248($sp) -/* 095EC4 7F061394 460A3202 */ mul.s $f8, $f6, $f10 -/* 095EC8 7F061398 46049400 */ add.s $f16, $f18, $f4 -/* 095ECC 7F06139C C7A40258 */ lwc1 $f4, 0x258($sp) -/* 095ED0 7F0613A0 46088480 */ add.s $f18, $f16, $f8 -/* 095ED4 7F0613A4 C7B0022C */ lwc1 $f16, 0x22c($sp) -/* 095ED8 7F0613A8 46122180 */ add.s $f6, $f4, $f18 -/* 095EDC 7F0613AC C7B2023C */ lwc1 $f18, 0x23c($sp) -/* 095EE0 7F0613B0 E7A60088 */ swc1 $f6, 0x88($sp) -/* 095EE4 7F0613B4 C44A0000 */ lwc1 $f10, ($v0) -/* 095EE8 7F0613B8 C4440004 */ lwc1 $f4, 4($v0) -/* 095EEC 7F0613BC 46105202 */ mul.s $f8, $f10, $f16 -/* 095EF0 7F0613C0 C4500008 */ lwc1 $f16, 8($v0) -/* 095EF4 7F0613C4 AFAE0040 */ sw $t6, 0x40($sp) -/* 095EF8 7F0613C8 46122182 */ mul.s $f6, $f4, $f18 -/* 095EFC 7F0613CC C7A4024C */ lwc1 $f4, 0x24c($sp) -/* 095F00 7F0613D0 46048482 */ mul.s $f18, $f16, $f4 -/* 095F04 7F0613D4 C4243E28 */ lwc1 $f4, %lo(D_80053E28)($at) -/* 095F08 7F0613D8 46064280 */ add.s $f10, $f8, $f6 -/* 095F0C 7F0613DC C7A6025C */ lwc1 $f6, 0x25c($sp) -/* 095F10 7F0613E0 46125200 */ add.s $f8, $f10, $f18 -/* 095F14 7F0613E4 C7AA0080 */ lwc1 $f10, 0x80($sp) -/* 095F18 7F0613E8 460A2482 */ mul.s $f18, $f4, $f10 -/* 095F1C 7F0613EC 46083400 */ add.s $f16, $f6, $f8 -/* 095F20 7F0613F0 E7B0008C */ swc1 $f16, 0x8c($sp) -/* 095F24 7F0613F4 0C002914 */ jal randomGetNext -/* 095F28 7F0613F8 E7B20038 */ swc1 $f18, 0x38($sp) -/* 095F2C 7F0613FC 44823000 */ mtc1 $v0, $f6 -/* 095F30 7F061400 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 095F34 7F061404 04410005 */ bgez $v0, .L7F06141C -/* 095F38 7F061408 46803220 */ cvt.s.w $f8, $f6 -/* 095F3C 7F06140C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 095F40 7F061410 44818000 */ mtc1 $at, $f16 -/* 095F44 7F061414 00000000 */ nop -/* 095F48 7F061418 46104200 */ add.s $f8, $f8, $f16 -.L7F06141C: -/* 095F4C 7F06141C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 095F50 7F061420 44812000 */ mtc1 $at, $f4 -/* 095F54 7F061424 3C018005 */ lui $at, %hi(D_80053E2C) -/* 095F58 7F061428 C4323E2C */ lwc1 $f18, %lo(D_80053E2C)($at) -/* 095F5C 7F06142C 46044282 */ mul.s $f10, $f8, $f4 -/* 095F60 7F061430 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 095F64 7F061434 C7B00084 */ lwc1 $f16, 0x84($sp) -/* 095F68 7F061438 46008207 */ neg.s $f8, $f16 -/* 095F6C 7F06143C 46125182 */ mul.s $f6, $f10, $f18 -/* 095F70 7F061440 C7B2008C */ lwc1 $f18, 0x8c($sp) -/* 095F74 7F061444 46002287 */ neg.s $f10, $f4 -/* 095F78 7F061448 44064000 */ mfc1 $a2, $f8 -/* 095F7C 7F06144C 44075000 */ mfc1 $a3, $f10 -/* 095F80 7F061450 44053000 */ mfc1 $a1, $f6 -/* 095F84 7F061454 46009187 */ neg.s $f6, $f18 -/* 095F88 7F061458 0FC1673A */ jal matrix_4x4_align -/* 095F8C 7F06145C E7A60010 */ swc1 $f6, 0x10($sp) -/* 095F90 7F061460 C7AC0038 */ lwc1 $f12, 0x38($sp) -/* 095F94 7F061464 0FC1629F */ jal matrix_scalar_multiply -/* 095F98 7F061468 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 095F9C 7F06146C C7B00194 */ lwc1 $f16, 0x194($sp) -/* 095FA0 7F061470 C60801C8 */ lwc1 $f8, 0x1c8($s0) -/* 095FA4 7F061474 C7AA0198 */ lwc1 $f10, 0x198($sp) -/* 095FA8 7F061478 C61201CC */ lwc1 $f18, 0x1cc($s0) -/* 095FAC 7F06147C 46088101 */ sub.s $f4, $f16, $f8 -/* 095FB0 7F061480 C60801D0 */ lwc1 $f8, 0x1d0($s0) -/* 095FB4 7F061484 C7B0019C */ lwc1 $f16, 0x19c($sp) -/* 095FB8 7F061488 46125181 */ sub.s $f6, $f10, $f18 -/* 095FBC 7F06148C 44062000 */ mfc1 $a2, $f4 -/* 095FC0 7F061490 27A40114 */ addiu $a0, $sp, 0x114 -/* 095FC4 7F061494 46088101 */ sub.s $f4, $f16, $f8 -/* 095FC8 7F061498 44073000 */ mfc1 $a3, $f6 -/* 095FCC 7F06149C 24050000 */ li $a1, 0 -/* 095FD0 7F0614A0 0FC166D6 */ jal matrix_4x4_set_rotation_axis_angle -/* 095FD4 7F0614A4 E7A40010 */ swc1 $f4, 0x10($sp) -/* 095FD8 7F0614A8 27A40114 */ addiu $a0, $sp, 0x114 -/* 095FDC 7F0614AC 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 095FE0 7F0614B0 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 095FE4 7F0614B4 C7AC007C */ lwc1 $f12, 0x7c($sp) -/* 095FE8 7F0614B8 0FC162E0 */ jal matrix_row_3_scalar_multiply -/* 095FEC 7F0614BC 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 095FF0 7F0614C0 27A40154 */ addiu $a0, $sp, 0x154 -/* 095FF4 7F0614C4 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 095FF8 7F0614C8 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 095FFC 7F0614CC 27A40084 */ addiu $a0, $sp, 0x84 -/* 096000 7F0614D0 0FC16266 */ jal matrix_4x4_set_position -/* 096004 7F0614D4 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 096008 7F0614D8 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 09600C 7F0614DC 0FC16008 */ jal matrix_4x4_copy -/* 096010 7F0614E0 8FA50040 */ lw $a1, 0x40($sp) -.L7F0614E4: -/* 096014 7F0614E4 8FB801A0 */ lw $t8, 0x1a0($sp) -.L7F0614E8: -/* 096018 7F0614E8 1000000C */ b .L7F06151C -/* 09601C 7F0614EC 8F020008 */ lw $v0, 8($t8) -/* 096020 7F0614F0 C6100260 */ lwc1 $f16, 0x260($s0) -.L7F0614F4: -/* 096024 7F0614F4 C60A0298 */ lwc1 $f10, 0x298($s0) -/* 096028 7F0614F8 C612029C */ lwc1 $f18, 0x29c($s0) -/* 09602C 7F0614FC C60602A0 */ lwc1 $f6, 0x2a0($s0) -/* 096030 7F061500 46008207 */ neg.s $f8, $f16 -/* 096034 7F061504 E60A02E8 */ swc1 $f10, 0x2e8($s0) -/* 096038 7F061508 E60802F4 */ swc1 $f8, 0x2f4($s0) -/* 09603C 7F06150C E61202EC */ swc1 $f18, 0x2ec($s0) -/* 096040 7F061510 E60602F0 */ swc1 $f6, 0x2f0($s0) -/* 096044 7F061514 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 096048 7F061518 8DE20008 */ lw $v0, 8($t7) -.L7F06151C: -/* 09604C 7F06151C 8C440018 */ lw $a0, 0x18($v0) -/* 096050 7F061520 50800043 */ beql $a0, $zero, .L7F061630 -/* 096054 7F061524 8FAD01A0 */ lw $t5, 0x1a0($sp) -/* 096058 7F061528 8C990004 */ lw $t9, 4($a0) -/* 09605C 7F06152C 00002825 */ move $a1, $zero -/* 096060 7F061530 0FC1B15C */ jal modelFindNodeMtxIndex -/* 096064 7F061534 AFB90070 */ sw $t9, 0x70($sp) -/* 096068 7F061538 AFA2006C */ sw $v0, 0x6c($sp) -/* 09606C 7F06153C 8E050010 */ lw $a1, 0x10($s0) -/* 096070 7F061540 0FC179AD */ jal sub_GAME_7F05E6B4 -/* 096074 7F061544 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 096078 7F061548 8FAD01A0 */ lw $t5, 0x1a0($sp) -/* 09607C 7F06154C 8FA40070 */ lw $a0, 0x70($sp) -/* 096080 7F061550 27A601A4 */ addiu $a2, $sp, 0x1a4 -/* 096084 7F061554 85AE000C */ lh $t6, 0xc($t5) -/* 096088 7F061558 29C1001D */ slti $at, $t6, 0x1d -/* 09608C 7F06155C 1420002A */ bnez $at, .L7F061608 -/* 096090 7F061560 00000000 */ nop -/* 096094 7F061564 8DB80008 */ lw $t8, 8($t5) -/* 096098 7F061568 8F030070 */ lw $v1, 0x70($t8) -/* 09609C 7F06156C 10600026 */ beqz $v1, .L7F061608 -/* 0960A0 7F061570 00000000 */ nop -/* 0960A4 7F061574 8C620004 */ lw $v0, 4($v1) -/* 0960A8 7F061578 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0960AC 7F06157C 0FC17999 */ jal get_value_if_watch_is_on_hand_or_not -/* 0960B0 7F061580 AFA20068 */ sw $v0, 0x68($sp) -/* 0960B4 7F061584 3C018005 */ lui $at, %hi(D_80053E30) -/* 0960B8 7F061588 C42A3E30 */ lwc1 $f10, %lo(D_80053E30)($at) -/* 0960BC 7F06158C C6040214 */ lwc1 $f4, 0x214($s0) -/* 0960C0 7F061590 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0960C4 7F061594 44818000 */ mtc1 $at, $f16 -/* 0960C8 7F061598 460A2480 */ add.s $f18, $f4, $f10 -/* 0960CC 7F06159C 3C018005 */ lui $at, %hi(D_80053E34) -/* 0960D0 7F0615A0 C4243E34 */ lwc1 $f4, %lo(D_80053E34)($at) -/* 0960D4 7F0615A4 8FA20068 */ lw $v0, 0x68($sp) -/* 0960D8 7F0615A8 46009181 */ sub.s $f6, $f18, $f0 -/* 0960DC 7F0615AC 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 0960E0 7F0615B0 C4520000 */ lwc1 $f18, ($v0) -/* 0960E4 7F0615B4 46103202 */ mul.s $f8, $f6, $f16 -/* 0960E8 7F0615B8 C446000C */ lwc1 $f6, 0xc($v0) -/* 0960EC 7F0615BC 46069401 */ sub.s $f16, $f18, $f6 -/* 0960F0 7F0615C0 C4460014 */ lwc1 $f6, 0x14($v0) -/* 0960F4 7F0615C4 C4520008 */ lwc1 $f18, 8($v0) -/* 0960F8 7F0615C8 46044283 */ div.s $f10, $f8, $f4 -/* 0960FC 7F0615CC C4440010 */ lwc1 $f4, 0x10($v0) -/* 096100 7F0615D0 C4480004 */ lwc1 $f8, 4($v0) -/* 096104 7F0615D4 44068000 */ mfc1 $a2, $f16 -/* 096108 7F0615D8 46069401 */ sub.s $f16, $f18, $f6 -/* 09610C 7F0615DC E7B00010 */ swc1 $f16, 0x10($sp) -/* 096110 7F0615E0 44055000 */ mfc1 $a1, $f10 -/* 096114 7F0615E4 46044281 */ sub.s $f10, $f8, $f4 -/* 096118 7F0615E8 44075000 */ mfc1 $a3, $f10 -/* 09611C 7F0615EC 0C005DC8 */ jal guRotateF -/* 096120 7F0615F0 00000000 */ nop -/* 096124 7F0615F4 8FA40070 */ lw $a0, 0x70($sp) -/* 096128 7F0615F8 0FC16266 */ jal matrix_4x4_set_position -/* 09612C 7F0615FC 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 096130 7F061600 10000004 */ b .L7F061614 -/* 096134 7F061604 8FAF006C */ lw $t7, 0x6c($sp) -.L7F061608: -/* 096138 7F061608 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y -/* 09613C 7F06160C 8E050214 */ lw $a1, 0x214($s0) -/* 096140 7F061610 8FAF006C */ lw $t7, 0x6c($sp) -.L7F061614: -/* 096144 7F061614 8FAE02A4 */ lw $t6, 0x2a4($sp) -/* 096148 7F061618 27A40264 */ addiu $a0, $sp, 0x264 -/* 09614C 7F06161C 000FC980 */ sll $t9, $t7, 6 -/* 096150 7F061620 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 096154 7F061624 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 096158 7F061628 032E3021 */ addu $a2, $t9, $t6 -/* 09615C 7F06162C 8FAD01A0 */ lw $t5, 0x1a0($sp) -.L7F061630: -/* 096160 7F061630 8FA40044 */ lw $a0, 0x44($sp) -/* 096164 7F061634 85B8000C */ lh $t8, 0xc($t5) -/* 096168 7F061638 01A02825 */ move $a1, $t5 -/* 09616C 7F06163C 2B01001E */ slti $at, $t8, 0x1e -/* 096170 7F061640 54200004 */ bnezl $at, .L7F061654 -/* 096174 7F061644 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 096178 7F061648 0FC21F05 */ jal seems_to_load_cuff_microcode -/* 09617C 7F06164C 2406001D */ li $a2, 29 -/* 096180 7F061650 8FAF01A0 */ lw $t7, 0x1a0($sp) -.L7F061654: -/* 096184 7F061654 8DF90008 */ lw $t9, 8($t7) -/* 096188 7F061658 8F24001C */ lw $a0, 0x1c($t9) -/* 09618C 7F06165C 50800017 */ beql $a0, $zero, .L7F0616BC -/* 096190 7F061660 8FB901A0 */ lw $t9, 0x1a0($sp) -/* 096194 7F061664 8C8E0004 */ lw $t6, 4($a0) -/* 096198 7F061668 00002825 */ move $a1, $zero -/* 09619C 7F06166C 0FC1B15C */ jal modelFindNodeMtxIndex -/* 0961A0 7F061670 AFAE0064 */ sw $t6, 0x64($sp) -/* 0961A4 7F061674 AFA20060 */ sw $v0, 0x60($sp) -/* 0961A8 7F061678 0FC17A0F */ jal sub_GAME_7F05E83C -/* 0961AC 7F06167C 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0961B0 7F061680 8FA40064 */ lw $a0, 0x64($sp) -/* 0961B4 7F061684 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 0961B8 7F061688 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 0961BC 7F06168C C7A801DC */ lwc1 $f8, 0x1dc($sp) -/* 0961C0 7F061690 C6040218 */ lwc1 $f4, 0x218($s0) -/* 0961C4 7F061694 8FB80060 */ lw $t8, 0x60($sp) -/* 0961C8 7F061698 8FAF02A4 */ lw $t7, 0x2a4($sp) -/* 0961CC 7F06169C 46044281 */ sub.s $f10, $f8, $f4 -/* 0961D0 7F0616A0 00186980 */ sll $t5, $t8, 6 -/* 0961D4 7F0616A4 27A40264 */ addiu $a0, $sp, 0x264 -/* 0961D8 7F0616A8 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 0961DC 7F0616AC E7AA01DC */ swc1 $f10, 0x1dc($sp) -/* 0961E0 7F0616B0 0FC16032 */ jal matrix_4x4_multiply -/* 0961E4 7F0616B4 01AF3021 */ addu $a2, $t5, $t7 -/* 0961E8 7F0616B8 8FB901A0 */ lw $t9, 0x1a0($sp) -.L7F0616BC: -/* 0961EC 7F0616BC 00001825 */ move $v1, $zero -/* 0961F0 7F0616C0 00003025 */ move $a2, $zero -/* 0961F4 7F0616C4 872E000C */ lh $t6, 0xc($t9) -/* 0961F8 7F0616C8 24070005 */ li $a3, 5 -/* 0961FC 7F0616CC 29C10013 */ slti $at, $t6, 0x13 -/* 096200 7F0616D0 1420002A */ bnez $at, .L7F06177C -/* 096204 7F0616D4 00000000 */ nop -.L7F0616D8: -/* 096208 7F0616D8 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 09620C 7F0616DC 8FA40044 */ lw $a0, 0x44($sp) -/* 096210 7F0616E0 8F0D0008 */ lw $t5, 8($t8) -/* 096214 7F0616E4 01A67821 */ addu $t7, $t5, $a2 -/* 096218 7F0616E8 8DE50048 */ lw $a1, 0x48($t7) -/* 09621C 7F0616EC 50A0000E */ beql $a1, $zero, .L7F061728 -/* 096220 7F0616F0 8FAD01A0 */ lw $t5, 0x1a0($sp) -/* 096224 7F0616F4 AFA3005C */ sw $v1, 0x5c($sp) -/* 096228 7F0616F8 0FC1B1E7 */ jal modelGetNodeRwData -/* 09622C 7F0616FC AFA60040 */ sw $a2, 0x40($sp) -/* 096230 7F061700 8FA3005C */ lw $v1, 0x5c($sp) -/* 096234 7F061704 8FA60040 */ lw $a2, 0x40($sp) -/* 096238 7F061708 10400006 */ beqz $v0, .L7F061724 -/* 09623C 7F06170C 24070005 */ li $a3, 5 -/* 096240 7F061710 8E190034 */ lw $t9, 0x34($s0) -/* 096244 7F061714 00E37023 */ subu $t6, $a3, $v1 -/* 096248 7F061718 032EC02A */ slt $t8, $t9, $t6 -/* 09624C 7F06171C 3B180001 */ xori $t8, $t8, 1 -/* 096250 7F061720 AC580000 */ sw $t8, ($v0) -.L7F061724: -/* 096254 7F061724 8FAD01A0 */ lw $t5, 0x1a0($sp) -.L7F061728: -/* 096258 7F061728 8FA40044 */ lw $a0, 0x44($sp) -/* 09625C 7F06172C 8DAF0008 */ lw $t7, 8($t5) -/* 096260 7F061730 01E6C821 */ addu $t9, $t7, $a2 -/* 096264 7F061734 8F25005C */ lw $a1, 0x5c($t9) -/* 096268 7F061738 50A0000E */ beql $a1, $zero, .L7F061774 -/* 09626C 7F06173C 24630001 */ addiu $v1, $v1, 1 -/* 096270 7F061740 AFA3005C */ sw $v1, 0x5c($sp) -/* 096274 7F061744 0FC1B1E7 */ jal modelGetNodeRwData -/* 096278 7F061748 AFA60040 */ sw $a2, 0x40($sp) -/* 09627C 7F06174C 8FA3005C */ lw $v1, 0x5c($sp) -/* 096280 7F061750 8FA60040 */ lw $a2, 0x40($sp) -/* 096284 7F061754 10400006 */ beqz $v0, .L7F061770 -/* 096288 7F061758 24070005 */ li $a3, 5 -/* 09628C 7F06175C 8E0E0034 */ lw $t6, 0x34($s0) -/* 096290 7F061760 00E3C023 */ subu $t8, $a3, $v1 -/* 096294 7F061764 01D8682A */ slt $t5, $t6, $t8 -/* 096298 7F061768 39AD0001 */ xori $t5, $t5, 1 -/* 09629C 7F06176C AC4D0000 */ sw $t5, ($v0) -.L7F061770: -/* 0962A0 7F061770 24630001 */ addiu $v1, $v1, 1 -.L7F061774: -/* 0962A4 7F061774 1467FFD8 */ bne $v1, $a3, .L7F0616D8 -/* 0962A8 7F061778 24C60004 */ addiu $a2, $a2, 4 -.L7F06177C: -/* 0962AC 7F06177C 0FC1BBF1 */ jal modelUpdateNodeRelations -/* 0962B0 7F061780 8FA40044 */ lw $a0, 0x44($sp) -/* 0962B4 7F061784 820F000C */ lb $t7, 0xc($s0) -/* 0962B8 7F061788 8FB900FC */ lw $t9, 0xfc($sp) -/* 0962BC 7F06178C 11E00011 */ beqz $t7, .L7F0617D4 -/* 0962C0 7F061790 272EFFFC */ addiu $t6, $t9, -4 -/* 0962C4 7F061794 2DC10014 */ sltiu $at, $t6, 0x14 -/* 0962C8 7F061798 1020000E */ beqz $at, .L7F0617D4 -/* 0962CC 7F06179C 000E7080 */ sll $t6, $t6, 2 -/* 0962D0 7F0617A0 3C018005 */ lui $at, %hi(jpt_weapon_bullet_type) -/* 0962D4 7F0617A4 002E0821 */ addu $at, $at, $t6 -/* 0962D8 7F0617A8 8C2E3E38 */ lw $t6, %lo(jpt_weapon_bullet_type)($at) -/* 0962DC 7F0617AC 01C00008 */ jr $t6 -/* 0962E0 7F0617B0 00000000 */ nop -weapon_bullet_type_pistol: -/* 0962E4 7F0617B4 0FC186FD */ jal sub_GAME_7F061BF4 -/* 0962E8 7F0617B8 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0962EC 7F0617BC 8E180030 */ lw $t8, 0x30($s0) -/* 0962F0 7F0617C0 270D0001 */ addiu $t5, $t8, 1 -/* 0962F4 7F0617C4 10000003 */ b .L7F0617D4 -/* 0962F8 7F0617C8 AE0D0030 */ sw $t5, 0x30($s0) -weapon_bullet_type_none: -/* 0962FC 7F0617CC 0FC186FD */ jal sub_GAME_7F061BF4 -/* 096300 7F0617D0 8FA402A8 */ lw $a0, 0x2a8($sp) -weapon_bullet_type_shotgun_mine: -.L7F0617D4: -/* 096304 7F0617D4 8FAF00FC */ lw $t7, 0xfc($sp) -.L7F0617D8: -/* 096308 7F0617D8 24010019 */ li $at, 25 -/* 09630C 7F0617DC 55E10004 */ bnel $t7, $at, .L7F0617F0 -/* 096310 7F0617E0 8219000C */ lb $t9, 0xc($s0) -/* 096314 7F0617E4 0FC17E4A */ jal sub_GAME_7F05F928 -/* 096318 7F0617E8 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 09631C 7F0617EC 8219000C */ lb $t9, 0xc($s0) -.L7F0617F0: -/* 096320 7F0617F0 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 096324 7F0617F4 53200046 */ beql $t9, $zero, .L7F061910 -/* 096328 7F0617F8 8FBF0034 */ lw $ra, 0x34($sp) -/* 09632C 7F0617FC 0FC225DE */ jal bondviewGetPlayerStanHeight -/* 096330 7F061800 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 096334 7F061804 44050000 */ mfc1 $a1, $f0 -/* 096338 7F061808 0FC1A142 */ jal sub_GAME_7F068508 -/* 09633C 7F06180C 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 096340 7F061810 8FAE00FC */ lw $t6, 0xfc($sp) -/* 096344 7F061814 24010018 */ li $at, 24 -/* 096348 7F061818 8FB800FC */ lw $t8, 0xfc($sp) -/* 09634C 7F06181C 55C10006 */ bnel $t6, $at, .L7F061838 -/* 096350 7F061820 2401001A */ li $at, 26 -/* 096354 7F061824 0FC17DCF */ jal sub_GAME_7F05F73C -/* 096358 7F061828 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 09635C 7F06182C 10000038 */ b .L7F061910 -/* 096360 7F061830 8FBF0034 */ lw $ra, 0x34($sp) -/* 096364 7F061834 2401001A */ li $at, 26 -.L7F061838: -/* 096368 7F061838 17010005 */ bne $t8, $at, .L7F061850 -/* 09636C 7F06183C 8FAD00FC */ lw $t5, 0xfc($sp) -/* 096370 7F061840 0FC17B89 */ jal generate_player_thrown_grenade -/* 096374 7F061844 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 096378 7F061848 10000031 */ b .L7F061910 -/* 09637C 7F06184C 8FBF0034 */ lw $ra, 0x34($sp) -.L7F061850: -/* 096380 7F061850 24010019 */ li $at, 25 -/* 096384 7F061854 15A10005 */ bne $t5, $at, .L7F06186C -/* 096388 7F061858 8FAF00FC */ lw $t7, 0xfc($sp) -/* 09638C 7F06185C 0FC17ED9 */ jal gunFireTankShell -/* 096390 7F061860 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 096394 7F061864 1000002A */ b .L7F061910 -/* 096398 7F061868 8FBF0034 */ lw $ra, 0x34($sp) -.L7F06186C: -/* 09639C 7F06186C 24010003 */ li $at, 3 -/* 0963A0 7F061870 15E10005 */ bne $t7, $at, .L7F061888 -/* 0963A4 7F061874 8FB900FC */ lw $t9, 0xfc($sp) -/* 0963A8 7F061878 0FC17C27 */ jal generate_player_thrown_knife -/* 0963AC 7F06187C 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0963B0 7F061880 10000023 */ b .L7F061910 -/* 0963B4 7F061884 8FBF0034 */ lw $ra, 0x34($sp) -.L7F061888: -/* 0963B8 7F061888 2401001D */ li $at, 29 -/* 0963BC 7F06188C 1321000F */ beq $t9, $at, .L7F0618CC -/* 0963C0 7F061890 2401001C */ li $at, 28 -/* 0963C4 7F061894 1321000D */ beq $t9, $at, .L7F0618CC -/* 0963C8 7F061898 2401001B */ li $at, 27 -/* 0963CC 7F06189C 1321000B */ beq $t9, $at, .L7F0618CC -/* 0963D0 7F0618A0 24010021 */ li $at, 33 -/* 0963D4 7F0618A4 13210009 */ beq $t9, $at, .L7F0618CC -/* 0963D8 7F0618A8 2401002F */ li $at, 47 -/* 0963DC 7F0618AC 13210007 */ beq $t9, $at, .L7F0618CC -/* 0963E0 7F0618B0 24010030 */ li $at, 48 -/* 0963E4 7F0618B4 13210005 */ beq $t9, $at, .L7F0618CC -/* 0963E8 7F0618B8 2401003D */ li $at, 61 -/* 0963EC 7F0618BC 13210003 */ beq $t9, $at, .L7F0618CC -/* 0963F0 7F0618C0 24010022 */ li $at, 34 -/* 0963F4 7F0618C4 17210005 */ bne $t9, $at, .L7F0618DC -/* 0963F8 7F0618C8 8FAE00FC */ lw $t6, 0xfc($sp) -.L7F0618CC: -/* 0963FC 7F0618CC 0FC17CD6 */ jal generate_player_thrown_object -/* 096400 7F0618D0 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 096404 7F0618D4 1000000E */ b .L7F061910 -/* 096408 7F0618D8 8FBF0034 */ lw $ra, 0x34($sp) -.L7F0618DC: -/* 09640C 7F0618DC 24010023 */ li $at, 35 -/* 096410 7F0618E0 15C10005 */ bne $t6, $at, .L7F0618F8 -/* 096414 7F0618E4 8FB800FC */ lw $t8, 0xfc($sp) -/* 096418 7F0618E8 0FC17DCF */ jal sub_GAME_7F05F73C -/* 09641C 7F0618EC 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 096420 7F0618F0 10000007 */ b .L7F061910 -/* 096424 7F0618F4 8FBF0034 */ lw $ra, 0x34($sp) -.L7F0618F8: -/* 096428 7F0618F8 24010024 */ li $at, 36 -/* 09642C 7F0618FC 57010004 */ bnel $t8, $at, .L7F061910 -/* 096430 7F061900 8FBF0034 */ lw $ra, 0x34($sp) -/* 096434 7F061904 0FC17DCF */ jal sub_GAME_7F05F73C -/* 096438 7F061908 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 09643C 7F06190C 8FBF0034 */ lw $ra, 0x34($sp) -.L7F061910: -/* 096440 7F061910 8FB00030 */ lw $s0, 0x30($sp) -/* 096444 7F061914 27BD02A8 */ addiu $sp, $sp, 0x2a8 -/* 096448 7F061918 03E00008 */ jr $ra -/* 09644C 7F06191C 00000000 */ nop -) -#endif - -#ifdef VERSION_JP -GLOBAL_ASM( -.late_rodata -glabel D_80053DE0 -.word 0x3f733333 /*0.94999999*/ -glabel D_80053DE4 -.word 0x3d4cccd0 /*0.050000012*/ -glabel D_80053DE8 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053DEC -.word 0x3e99999a /*0.30000001*/ -glabel D_80053DF0 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053DF4 -.word 0x3e99999a /*0.30000001*/ -glabel D_80053DF8 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053DFC -.word 0x3e99999a /*0.30000001*/ -glabel D_80053E00 -.word 0x41de6666 /*27.799999*/ -glabel D_80053E04 -.word 0x3dccccce /*0.10000001*/ -glabel D_80053E08 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E0C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E10 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E14 -.word 0x3f060a92 /*0.52359879*/ -glabel D_80053E18 -.word 0x3f060a92 /*0.52359879*/ -glabel D_80053E1C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E20 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E24 -.word 0x3dccccce /*0.10000001*/ -glabel D_80053E28 -.word 0x3dccccce /*0.10000001*/ -glabel D_80053E2C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E30 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E34 -.word 0x40c90fdb /*6.2831855*/ - -/*D:80053E38*/ -glabel jpt_weapon_bullet_type -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_shotgun_mine -.word weapon_bullet_type_shotgun_mine -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_none -.word weapon_bullet_type_none -.size jpt_weapon_bullet_type, . - jpt_weapon_bullet_type - -.text -glabel handles_firing_or_throwing_weapon_in_hand -/* 095058 7F0604E8 27BDFD58 */ addiu $sp, $sp, -0x2a8 -/* 09505C 7F0604EC 3C0F8003 */ lui $t7, %hi(D_80035C40) # $t7, 0x8003 -/* 095060 7F0604F0 AFBF0034 */ sw $ra, 0x34($sp) -/* 095064 7F0604F4 AFB00030 */ sw $s0, 0x30($sp) -/* 095068 7F0604F8 25EF5C80 */ addiu $t7, %lo(D_80035C40) # addiu $t7, $t7, 0x5c80 -/* 09506C 7F0604FC 8DE10000 */ lw $at, ($t7) -/* 095070 7F060500 27AE0194 */ addiu $t6, $sp, 0x194 -/* 095074 7F060504 8DED0004 */ lw $t5, 4($t7) -/* 095078 7F060508 ADC10000 */ sw $at, ($t6) -/* 09507C 7F06050C 8DE10008 */ lw $at, 8($t7) -/* 095080 7F060510 0004C0C0 */ sll $t8, $a0, 3 -/* 095084 7F060514 0304C023 */ subu $t8, $t8, $a0 -/* 095088 7F060518 0018C080 */ sll $t8, $t8, 2 -/* 09508C 7F06051C 0304C021 */ addu $t8, $t8, $a0 -/* 095090 7F060520 3C198008 */ lui $t9, %hi(g_CurrentPlayer) # $t9, 0x8008 -/* 095094 7F060524 ADCD0004 */ sw $t5, 4($t6) -/* 095098 7F060528 ADC10008 */ sw $at, 8($t6) -/* 09509C 7F06052C 8F39A120 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0950A0 7F060530 0018C080 */ sll $t8, $t8, 2 -/* 0950A4 7F060534 0304C021 */ addu $t8, $t8, $a0 -/* 0950A8 7F060538 0018C0C0 */ sll $t8, $t8, 3 -/* 0950AC 7F06053C 03388021 */ addu $s0, $t9, $t8 -/* 0950B0 7F060540 AFA0010C */ sw $zero, 0x10c($sp) -/* 0950B4 7F060544 AFA00108 */ sw $zero, 0x108($sp) -/* 0950B8 7F060548 26100870 */ addiu $s0, $s0, 0x870 -/* 0950BC 7F06054C 0FC177D9 */ jal get_item_in_hand_or_watch_menu -/* 0950C0 7F060550 AFA402A8 */ sw $a0, 0x2a8($sp) -/* 0950C4 7F060554 AFA200FC */ sw $v0, 0xfc($sp) -/* 0950C8 7F060558 0FC17375 */ jal get_ptr_item_statistics -/* 0950CC 7F06055C 00402025 */ move $a0, $v0 -/* 0950D0 7F060560 8FAE02A8 */ lw $t6, 0x2a8($sp) -/* 0950D4 7F060564 AFA200F8 */ sw $v0, 0xf8($sp) -/* 0950D8 7F060568 15C0002D */ bnez $t6, .Ljp7F060620 -/* 0950DC 7F06056C 00000000 */ nop -/* 0950E0 7F060570 0FC177D9 */ jal get_item_in_hand_or_watch_menu -/* 0950E4 7F060574 24040001 */ li $a0, 1 -/* 0950E8 7F060578 00402025 */ move $a0, $v0 -/* 0950EC 7F06057C 0FC17975 */ jal bondwalkItemCheckBitflags -/* 0950F0 7F060580 24050800 */ li $a1, 2048 -/* 0950F4 7F060584 10400015 */ beqz $v0, .Ljp7F0605DC -/* 0950F8 7F060588 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 0950FC 7F06058C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 095100 7F060590 C42083B4 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 095104 7F060594 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 095108 7F060598 44813000 */ mtc1 $at, $f6 -/* 09510C 7F06059C 46000100 */ add.s $f4, $f0, $f0 -/* 095110 7F0605A0 C60A01C4 */ lwc1 $f10, 0x1c4($s0) -/* 095114 7F0605A4 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 095118 7F0605A8 44819000 */ mtc1 $at, $f18 -/* 09511C 7F0605AC 46062203 */ div.s $f8, $f4, $f6 -/* 095120 7F0605B0 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 095124 7F0605B4 46085400 */ add.s $f16, $f10, $f8 -/* 095128 7F0605B8 E61001C4 */ swc1 $f16, 0x1c4($s0) -/* 09512C 7F0605BC C60401C4 */ lwc1 $f4, 0x1c4($s0) -/* 095130 7F0605C0 4604903C */ c.lt.s $f18, $f4 -/* 095134 7F0605C4 00000000 */ nop -/* 095138 7F0605C8 4500003F */ bc1f .Ljp7F0606C8 -/* 09513C 7F0605CC 00000000 */ nop -/* 095140 7F0605D0 44813000 */ mtc1 $at, $f6 -/* 095144 7F0605D4 1000003C */ b .Ljp7F0606C8 -/* 095148 7F0605D8 E60601C4 */ swc1 $f6, 0x1c4($s0) -.Ljp7F0605DC: -/* 09514C 7F0605DC C42083B4 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 095150 7F0605E0 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 095154 7F0605E4 44814000 */ mtc1 $at, $f8 -/* 095158 7F0605E8 46000280 */ add.s $f10, $f0, $f0 -/* 09515C 7F0605EC C61201C4 */ lwc1 $f18, 0x1c4($s0) -/* 095160 7F0605F0 46085403 */ div.s $f16, $f10, $f8 -/* 095164 7F0605F4 44805000 */ mtc1 $zero, $f10 -/* 095168 7F0605F8 46109101 */ sub.s $f4, $f18, $f16 -/* 09516C 7F0605FC E60401C4 */ swc1 $f4, 0x1c4($s0) -/* 095170 7F060600 C60601C4 */ lwc1 $f6, 0x1c4($s0) -/* 095174 7F060604 460A303C */ c.lt.s $f6, $f10 -/* 095178 7F060608 00000000 */ nop -/* 09517C 7F06060C 4500002E */ bc1f .Ljp7F0606C8 -/* 095180 7F060610 00000000 */ nop -/* 095184 7F060614 44804000 */ mtc1 $zero, $f8 -/* 095188 7F060618 1000002B */ b .Ljp7F0606C8 -/* 09518C 7F06061C E60801C4 */ swc1 $f8, 0x1c4($s0) -.Ljp7F060620: -/* 095190 7F060620 0FC177D9 */ jal get_item_in_hand_or_watch_menu -/* 095194 7F060624 00002025 */ move $a0, $zero -/* 095198 7F060628 00402025 */ move $a0, $v0 -/* 09519C 7F06062C 0FC17975 */ jal bondwalkItemCheckBitflags -/* 0951A0 7F060630 24050800 */ li $a1, 2048 -/* 0951A4 7F060634 10400013 */ beqz $v0, .Ljp7F060684 -/* 0951A8 7F060638 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 0951AC 7F06063C 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 0951B0 7F060640 44811000 */ mtc1 $at, $f2 -/* 0951B4 7F060644 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 0951B8 7F060648 C42083B4 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 0951BC 7F06064C 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 0951C0 7F060650 44818000 */ mtc1 $at, $f16 -/* 0951C4 7F060654 46000480 */ add.s $f18, $f0, $f0 -/* 0951C8 7F060658 C60601C4 */ lwc1 $f6, 0x1c4($s0) -/* 0951CC 7F06065C 46109103 */ div.s $f4, $f18, $f16 -/* 0951D0 7F060660 46043281 */ sub.s $f10, $f6, $f4 -/* 0951D4 7F060664 E60A01C4 */ swc1 $f10, 0x1c4($s0) -/* 0951D8 7F060668 C60801C4 */ lwc1 $f8, 0x1c4($s0) -/* 0951DC 7F06066C 4602403C */ c.lt.s $f8, $f2 -/* 0951E0 7F060670 00000000 */ nop -/* 0951E4 7F060674 45000014 */ bc1f .Ljp7F0606C8 -/* 0951E8 7F060678 00000000 */ nop -/* 0951EC 7F06067C 10000012 */ b .Ljp7F0606C8 -/* 0951F0 7F060680 E60201C4 */ swc1 $f2, 0x1c4($s0) -.Ljp7F060684: -/* 0951F4 7F060684 C42083B4 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 0951F8 7F060688 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 0951FC 7F06068C 44818000 */ mtc1 $at, $f16 -/* 095200 7F060690 46000480 */ add.s $f18, $f0, $f0 -/* 095204 7F060694 C60401C4 */ lwc1 $f4, 0x1c4($s0) -/* 095208 7F060698 44804000 */ mtc1 $zero, $f8 -/* 09520C 7F06069C 46109183 */ div.s $f6, $f18, $f16 -/* 095210 7F0606A0 46062280 */ add.s $f10, $f4, $f6 -/* 095214 7F0606A4 E60A01C4 */ swc1 $f10, 0x1c4($s0) -/* 095218 7F0606A8 C61201C4 */ lwc1 $f18, 0x1c4($s0) -/* 09521C 7F0606AC 4612403C */ c.lt.s $f8, $f18 -/* 095220 7F0606B0 00000000 */ nop -/* 095224 7F0606B4 45000004 */ bc1f .Ljp7F0606C8 -/* 095228 7F0606B8 00000000 */ nop -/* 09522C 7F0606BC 44808000 */ mtc1 $zero, $f16 -/* 095230 7F0606C0 00000000 */ nop -/* 095234 7F0606C4 E61001C4 */ swc1 $f16, 0x1c4($s0) -.Ljp7F0606C8: -/* 095238 7F0606C8 3C0F8003 */ lui $t7, %hi(D_80035C4C) # $t7, 0x8003 -/* 09523C 7F0606CC 25EF5C8C */ addiu $t7, %lo(D_80035C4C) # addiu $t7, $t7, 0x5c8c -/* 095240 7F0606D0 8DE10000 */ lw $at, ($t7) -/* 095244 7F0606D4 27AC00E0 */ addiu $t4, $sp, 0xe0 -/* 095248 7F0606D8 3C0E8003 */ lui $t6, %hi(D_80035C58) # $t6, 0x8003 -/* 09524C 7F0606DC AD810000 */ sw $at, ($t4) -/* 095250 7F0606E0 8DF90004 */ lw $t9, 4($t7) -/* 095254 7F0606E4 25CE5C98 */ addiu $t6, %lo(D_80035C58) # addiu $t6, $t6, 0x5c98 -/* 095258 7F0606E8 27B800D4 */ addiu $t8, $sp, 0xd4 -/* 09525C 7F0606EC AD990004 */ sw $t9, 4($t4) -/* 095260 7F0606F0 8DE10008 */ lw $at, 8($t7) -/* 095264 7F0606F4 3C0D8003 */ lui $t5, %hi(D_80035C64) # $t5, 0x8003 -/* 095268 7F0606F8 25AD5CA4 */ addiu $t5, %lo(D_80035C64) # addiu $t5, $t5, 0x5ca4 -/* 09526C 7F0606FC AD810008 */ sw $at, 8($t4) -/* 095270 7F060700 8DC10000 */ lw $at, ($t6) -/* 095274 7F060704 8DCF0004 */ lw $t7, 4($t6) -/* 095278 7F060708 27B900C8 */ addiu $t9, $sp, 0xc8 -/* 09527C 7F06070C AF010000 */ sw $at, ($t8) -/* 095280 7F060710 8DC10008 */ lw $at, 8($t6) -/* 095284 7F060714 AF0F0004 */ sw $t7, 4($t8) -/* 095288 7F060718 2403000C */ li $v1, 12 -/* 09528C 7F06071C AF010008 */ sw $at, 8($t8) -/* 095290 7F060720 8DA10000 */ lw $at, ($t5) -/* 095294 7F060724 8DAE0004 */ lw $t6, 4($t5) -/* 095298 7F060728 AF210000 */ sw $at, ($t9) -/* 09529C 7F06072C 8DA10008 */ lw $at, 8($t5) -/* 0952A0 7F060730 AF2E0004 */ sw $t6, 4($t9) -/* 0952A4 7F060734 AF210008 */ sw $at, 8($t9) -/* 0952A8 7F060738 8E020198 */ lw $v0, 0x198($s0) -/* 0952AC 7F06073C C604019C */ lwc1 $f4, 0x19c($s0) -/* 0952B0 7F060740 AFAC0014 */ sw $t4, 0x14($sp) -/* 0952B4 7F060744 244F0003 */ addiu $t7, $v0, 3 -/* 0952B8 7F060748 05E10004 */ bgez $t7, .Ljp7F06075C -/* 0952BC 7F06074C 31F80003 */ andi $t8, $t7, 3 -/* 0952C0 7F060750 13000002 */ beqz $t8, .Ljp7F06075C -/* 0952C4 7F060754 00000000 */ nop -/* 0952C8 7F060758 2718FFFC */ addiu $t8, $t8, -4 -.Ljp7F06075C: -/* 0952CC 7F06075C 03030019 */ multu $t8, $v1 -/* 0952D0 7F060760 244E0001 */ addiu $t6, $v0, 1 -/* 0952D4 7F060764 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0952D8 7F060768 0000C812 */ mflo $t9 -/* 0952DC 7F06076C 02194021 */ addu $t0, $s0, $t9 -/* 0952E0 7F060770 24590002 */ addiu $t9, $v0, 2 -/* 0952E4 7F060774 00430019 */ multu $v0, $v1 -/* 0952E8 7F060778 25040108 */ addiu $a0, $t0, 0x108 -/* 0952EC 7F06077C AFA80044 */ sw $t0, 0x44($sp) -/* 0952F0 7F060780 00006812 */ mflo $t5 -/* 0952F4 7F060784 020D4821 */ addu $t1, $s0, $t5 -/* 0952F8 7F060788 25250108 */ addiu $a1, $t1, 0x108 -/* 0952FC 7F06078C 05C10004 */ bgez $t6, .Ljp7F0607A0 -/* 095300 7F060790 31CF0003 */ andi $t7, $t6, 3 -/* 095304 7F060794 11E00002 */ beqz $t7, .Ljp7F0607A0 -/* 095308 7F060798 00000000 */ nop -/* 09530C 7F06079C 25EFFFFC */ addiu $t7, $t7, -4 -.Ljp7F0607A0: -/* 095310 7F0607A0 01E30019 */ multu $t7, $v1 -/* 095314 7F0607A4 AFA90040 */ sw $t1, 0x40($sp) -/* 095318 7F0607A8 0000C012 */ mflo $t8 -/* 09531C 7F0607AC 02185021 */ addu $t2, $s0, $t8 -/* 095320 7F0607B0 25460108 */ addiu $a2, $t2, 0x108 -/* 095324 7F0607B4 07210004 */ bgez $t9, .Ljp7F0607C8 -/* 095328 7F0607B8 332D0003 */ andi $t5, $t9, 3 -/* 09532C 7F0607BC 11A00002 */ beqz $t5, .Ljp7F0607C8 -/* 095330 7F0607C0 00000000 */ nop -/* 095334 7F0607C4 25ADFFFC */ addiu $t5, $t5, -4 -.Ljp7F0607C8: -/* 095338 7F0607C8 01A30019 */ multu $t5, $v1 -/* 09533C 7F0607CC AFAA003C */ sw $t2, 0x3c($sp) -/* 095340 7F0607D0 00007012 */ mflo $t6 -/* 095344 7F0607D4 020E5821 */ addu $t3, $s0, $t6 -/* 095348 7F0607D8 25670108 */ addiu $a3, $t3, 0x108 -/* 09534C 7F0607DC 0FC16D07 */ jal sub_GAME_7F05AEFC -/* 095350 7F0607E0 AFAB0038 */ sw $t3, 0x38($sp) -/* 095354 7F0607E4 8FA40044 */ lw $a0, 0x44($sp) -/* 095358 7F0607E8 8FA50040 */ lw $a1, 0x40($sp) -/* 09535C 7F0607EC 8FA6003C */ lw $a2, 0x3c($sp) -/* 095360 7F0607F0 8FA70038 */ lw $a3, 0x38($sp) -/* 095364 7F0607F4 C606019C */ lwc1 $f6, 0x19c($s0) -/* 095368 7F0607F8 27AF00D4 */ addiu $t7, $sp, 0xd4 -/* 09536C 7F0607FC AFAF0014 */ sw $t7, 0x14($sp) -/* 095370 7F060800 24840138 */ addiu $a0, $a0, 0x138 -/* 095374 7F060804 24A50138 */ addiu $a1, $a1, 0x138 -/* 095378 7F060808 24C60138 */ addiu $a2, $a2, 0x138 -/* 09537C 7F06080C 24E70138 */ addiu $a3, $a3, 0x138 -/* 095380 7F060810 0FC16D07 */ jal sub_GAME_7F05AEFC -/* 095384 7F060814 E7A60010 */ swc1 $f6, 0x10($sp) -/* 095388 7F060818 8FA40044 */ lw $a0, 0x44($sp) -/* 09538C 7F06081C 8FA50040 */ lw $a1, 0x40($sp) -/* 095390 7F060820 8FA6003C */ lw $a2, 0x3c($sp) -/* 095394 7F060824 8FA70038 */ lw $a3, 0x38($sp) -/* 095398 7F060828 C60A019C */ lwc1 $f10, 0x19c($s0) -/* 09539C 7F06082C 27B800C8 */ addiu $t8, $sp, 0xc8 -/* 0953A0 7F060830 AFB80014 */ sw $t8, 0x14($sp) -/* 0953A4 7F060834 24840168 */ addiu $a0, $a0, 0x168 -/* 0953A8 7F060838 24A50168 */ addiu $a1, $a1, 0x168 -/* 0953AC 7F06083C 24C60168 */ addiu $a2, $a2, 0x168 -/* 0953B0 7F060840 24E70168 */ addiu $a3, $a3, 0x168 -/* 0953B4 7F060844 0FC16D07 */ jal sub_GAME_7F05AEFC -/* 0953B8 7F060848 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 0953BC 7F06084C 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0953C0 7F060850 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0953C4 7F060854 C7A800E0 */ lwc1 $f8, 0xe0($sp) -/* 0953C8 7F060858 C7A400E4 */ lwc1 $f4, 0xe4($sp) -/* 0953CC 7F06085C C4520FC0 */ lwc1 $f18, 0xfc0($v0) -/* 0953D0 7F060860 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0953D4 7F060864 46124402 */ mul.s $f16, $f8, $f18 -/* 0953D8 7F060868 C7A800E8 */ lwc1 $f8, 0xe8($sp) -/* 0953DC 7F06086C E7B000E0 */ swc1 $f16, 0xe0($sp) -/* 0953E0 7F060870 C4460FC0 */ lwc1 $f6, 0xfc0($v0) -/* 0953E4 7F060874 46062282 */ mul.s $f10, $f4, $f6 -/* 0953E8 7F060878 E7AA00E4 */ swc1 $f10, 0xe4($sp) -/* 0953EC 7F06087C C4520FC0 */ lwc1 $f18, 0xfc0($v0) -/* 0953F0 7F060880 46124102 */ mul.s $f4, $f8, $f18 -/* 0953F4 7F060884 E7A400E8 */ swc1 $f4, 0xe8($sp) -/* 0953F8 7F060888 C60601AC */ lwc1 $f6, 0x1ac($s0) -/* 0953FC 7F06088C 46068200 */ add.s $f8, $f16, $f6 -/* 095400 7F060890 E7A800E0 */ swc1 $f8, 0xe0($sp) -/* 095404 7F060894 C61201B0 */ lwc1 $f18, 0x1b0($s0) -/* 095408 7F060898 46125100 */ add.s $f4, $f10, $f18 -/* 09540C 7F06089C 0FC17876 */ jal sub_GAME_7F05DCB8 -/* 095410 7F0608A0 E7A400E4 */ swc1 $f4, 0xe4($sp) -/* 095414 7F0608A4 C7B000E0 */ lwc1 $f16, 0xe0($sp) -/* 095418 7F0608A8 3C028005 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8005 -/* 09541C 7F0608AC 244283A4 */ addiu $v0, %lo(g_ClockTimer) # addiu $v0, $v0, -0x7c5c -/* 095420 7F0608B0 46008180 */ add.s $f6, $f16, $f0 -/* 095424 7F0608B4 8C590000 */ lw $t9, ($v0) -/* 095428 7F0608B8 00001825 */ move $v1, $zero -/* 09542C 7F0608BC 1B200035 */ blez $t9, .Ljp7F060994 -/* 095430 7F0608C0 E7A600E0 */ swc1 $f6, 0xe0($sp) -/* 095434 7F0608C4 3C018005 */ lui $at, %hi(D_80053DE0) # $at, 0x8005 -/* 095438 7F0608C8 C4203E10 */ lwc1 $f0, %lo(D_80053DE0)($at) -/* 09543C 7F0608CC C60A00E4 */ lwc1 $f10, 0xe4($s0) -.Ljp7F0608D0: -/* 095440 7F0608D0 C7A800E0 */ lwc1 $f8, 0xe0($sp) -/* 095444 7F0608D4 C60600E8 */ lwc1 $f6, 0xe8($s0) -/* 095448 7F0608D8 460A0482 */ mul.s $f18, $f0, $f10 -/* 09544C 7F0608DC 24630001 */ addiu $v1, $v1, 1 -/* 095450 7F0608E0 46060282 */ mul.s $f10, $f0, $f6 -/* 095454 7F0608E4 46124100 */ add.s $f4, $f8, $f18 -/* 095458 7F0608E8 E60400E4 */ swc1 $f4, 0xe4($s0) -/* 09545C 7F0608EC C7B000E4 */ lwc1 $f16, 0xe4($sp) -/* 095460 7F0608F0 C60400EC */ lwc1 $f4, 0xec($s0) -/* 095464 7F0608F4 460A8200 */ add.s $f8, $f16, $f10 -/* 095468 7F0608F8 46040182 */ mul.s $f6, $f0, $f4 -/* 09546C 7F0608FC E60800E8 */ swc1 $f8, 0xe8($s0) -/* 095470 7F060900 C7B200E8 */ lwc1 $f18, 0xe8($sp) -/* 095474 7F060904 C60800F0 */ lwc1 $f8, 0xf0($s0) -/* 095478 7F060908 46069400 */ add.s $f16, $f18, $f6 -/* 09547C 7F06090C 46080102 */ mul.s $f4, $f0, $f8 -/* 095480 7F060910 E61000EC */ swc1 $f16, 0xec($s0) -/* 095484 7F060914 C7AA00D4 */ lwc1 $f10, 0xd4($sp) -/* 095488 7F060918 C61000F4 */ lwc1 $f16, 0xf4($s0) -/* 09548C 7F06091C 46045480 */ add.s $f18, $f10, $f4 -/* 095490 7F060920 46100202 */ mul.s $f8, $f0, $f16 -/* 095494 7F060924 E61200F0 */ swc1 $f18, 0xf0($s0) -/* 095498 7F060928 C7A600D8 */ lwc1 $f6, 0xd8($sp) -/* 09549C 7F06092C C61200F8 */ lwc1 $f18, 0xf8($s0) -/* 0954A0 7F060930 46083280 */ add.s $f10, $f6, $f8 -/* 0954A4 7F060934 46120402 */ mul.s $f16, $f0, $f18 -/* 0954A8 7F060938 E60A00F4 */ swc1 $f10, 0xf4($s0) -/* 0954AC 7F06093C C7A400DC */ lwc1 $f4, 0xdc($sp) -/* 0954B0 7F060940 C60A00FC */ lwc1 $f10, 0xfc($s0) -/* 0954B4 7F060944 46102180 */ add.s $f6, $f4, $f16 -/* 0954B8 7F060948 460A0482 */ mul.s $f18, $f0, $f10 -/* 0954BC 7F06094C E60600F8 */ swc1 $f6, 0xf8($s0) -/* 0954C0 7F060950 C7A800C8 */ lwc1 $f8, 0xc8($sp) -/* 0954C4 7F060954 C6060100 */ lwc1 $f6, 0x100($s0) -/* 0954C8 7F060958 46124100 */ add.s $f4, $f8, $f18 -/* 0954CC 7F06095C 46060282 */ mul.s $f10, $f0, $f6 -/* 0954D0 7F060960 E60400FC */ swc1 $f4, 0xfc($s0) -/* 0954D4 7F060964 C7B000CC */ lwc1 $f16, 0xcc($sp) -/* 0954D8 7F060968 C6040104 */ lwc1 $f4, 0x104($s0) -/* 0954DC 7F06096C 460A8200 */ add.s $f8, $f16, $f10 -/* 0954E0 7F060970 46040182 */ mul.s $f6, $f0, $f4 -/* 0954E4 7F060974 E6080100 */ swc1 $f8, 0x100($s0) -/* 0954E8 7F060978 C7B200D0 */ lwc1 $f18, 0xd0($sp) -/* 0954EC 7F06097C 46069400 */ add.s $f16, $f18, $f6 -/* 0954F0 7F060980 E6100104 */ swc1 $f16, 0x104($s0) -/* 0954F4 7F060984 8C4D0000 */ lw $t5, ($v0) -/* 0954F8 7F060988 006D082A */ slt $at, $v1, $t5 -/* 0954FC 7F06098C 5420FFD0 */ bnezl $at, .Ljp7F0608D0 -/* 095500 7F060990 C60A00E4 */ lwc1 $f10, 0xe4($s0) -.Ljp7F060994: -/* 095504 7F060994 3C018005 */ lui $at, %hi(D_80053DE4) # $at, 0x8005 -/* 095508 7F060998 C4203E14 */ lwc1 $f0, %lo(D_80053DE4)($at) -/* 09550C 7F06099C C60A00E4 */ lwc1 $f10, 0xe4($s0) -/* 095510 7F0609A0 C60400E8 */ lwc1 $f4, 0xe8($s0) -/* 095514 7F0609A4 C60600EC */ lwc1 $f6, 0xec($s0) -/* 095518 7F0609A8 46005202 */ mul.s $f8, $f10, $f0 -/* 09551C 7F0609AC C60A00F0 */ lwc1 $f10, 0xf0($s0) -/* 095520 7F0609B0 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 095524 7F0609B4 46002482 */ mul.s $f18, $f4, $f0 -/* 095528 7F0609B8 C60400F4 */ lwc1 $f4, 0xf4($s0) -/* 09552C 7F0609BC 46003402 */ mul.s $f16, $f6, $f0 -/* 095530 7F0609C0 E60800C0 */ swc1 $f8, 0xc0($s0) -/* 095534 7F0609C4 C60600F8 */ lwc1 $f6, 0xf8($s0) -/* 095538 7F0609C8 46005202 */ mul.s $f8, $f10, $f0 -/* 09553C 7F0609CC E61200C4 */ swc1 $f18, 0xc4($s0) -/* 095540 7F0609D0 C60A00FC */ lwc1 $f10, 0xfc($s0) -/* 095544 7F0609D4 46002482 */ mul.s $f18, $f4, $f0 -/* 095548 7F0609D8 E61000C8 */ swc1 $f16, 0xc8($s0) -/* 09554C 7F0609DC C6040100 */ lwc1 $f4, 0x100($s0) -/* 095550 7F0609E0 46003402 */ mul.s $f16, $f6, $f0 -/* 095554 7F0609E4 E60800CC */ swc1 $f8, 0xcc($s0) -/* 095558 7F0609E8 C6060104 */ lwc1 $f6, 0x104($s0) -/* 09555C 7F0609EC 46005202 */ mul.s $f8, $f10, $f0 -/* 095560 7F0609F0 E61200D0 */ swc1 $f18, 0xd0($s0) -/* 095564 7F0609F4 46002482 */ mul.s $f18, $f4, $f0 -/* 095568 7F0609F8 E61000D4 */ swc1 $f16, 0xd4($s0) -/* 09556C 7F0609FC 46003402 */ mul.s $f16, $f6, $f0 -/* 095570 7F060A00 E60800D8 */ swc1 $f8, 0xd8($s0) -/* 095574 7F060A04 E61200DC */ swc1 $f18, 0xdc($s0) -/* 095578 7F060A08 14800009 */ bnez $a0, .Ljp7F060A30 -/* 09557C 7F060A0C E61000E0 */ swc1 $f16, 0xe0($s0) -/* 095580 7F060A10 0FC17882 */ jal gunSetHorizontalOffset -/* 095584 7F060A14 00000000 */ nop -/* 095588 7F060A18 C60800C0 */ lwc1 $f8, 0xc0($s0) -/* 09558C 7F060A1C C60A01B8 */ lwc1 $f10, 0x1b8($s0) -/* 095590 7F060A20 46080100 */ add.s $f4, $f0, $f8 -/* 095594 7F060A24 46045480 */ add.s $f18, $f10, $f4 -/* 095598 7F060A28 10000008 */ b .Ljp7F060A4C -/* 09559C 7F060A2C E7B20194 */ swc1 $f18, 0x194($sp) -.Ljp7F060A30: -/* 0955A0 7F060A30 0FC17882 */ jal gunSetHorizontalOffset -/* 0955A4 7F060A34 00000000 */ nop -/* 0955A8 7F060A38 C60600C0 */ lwc1 $f6, 0xc0($s0) -/* 0955AC 7F060A3C C60801B8 */ lwc1 $f8, 0x1b8($s0) -/* 0955B0 7F060A40 46060400 */ add.s $f16, $f0, $f6 -/* 0955B4 7F060A44 46088281 */ sub.s $f10, $f16, $f8 -/* 0955B8 7F060A48 E7AA0194 */ swc1 $f10, 0x194($sp) -.Ljp7F060A4C: -/* 0955BC 7F060A4C 8FAE00F8 */ lw $t6, 0xf8($sp) -/* 0955C0 7F060A50 C61200C4 */ lwc1 $f18, 0xc4($s0) -/* 0955C4 7F060A54 C61001BC */ lwc1 $f16, 0x1bc($s0) -/* 0955C8 7F060A58 C5C40008 */ lwc1 $f4, 8($t6) -/* 0955CC 7F060A5C 8FA400FC */ lw $a0, 0xfc($sp) -/* 0955D0 7F060A60 24010019 */ li $at, 25 -/* 0955D4 7F060A64 46122180 */ add.s $f6, $f4, $f18 -/* 0955D8 7F060A68 46068200 */ add.s $f8, $f16, $f6 -/* 0955DC 7F060A6C E7A80198 */ swc1 $f8, 0x198($sp) -/* 0955E0 7F060A70 C60400C8 */ lwc1 $f4, 0xc8($s0) -/* 0955E4 7F060A74 C5CA000C */ lwc1 $f10, 0xc($t6) -/* 0955E8 7F060A78 C61001C0 */ lwc1 $f16, 0x1c0($s0) -/* 0955EC 7F060A7C 46045480 */ add.s $f18, $f10, $f4 -/* 0955F0 7F060A80 46128180 */ add.s $f6, $f16, $f18 -/* 0955F4 7F060A84 10810005 */ beq $a0, $at, .Ljp7F060A9C -/* 0955F8 7F060A88 E7A6019C */ swc1 $f6, 0x19c($sp) -/* 0955FC 7F060A8C 2401001E */ li $at, 30 -/* 095600 7F060A90 10810002 */ beq $a0, $at, .Ljp7F060A9C -/* 095604 7F060A94 24010017 */ li $at, 23 -/* 095608 7F060A98 14810028 */ bne $a0, $at, .Ljp7F060B3C -.Ljp7F060A9C: -/* 09560C 7F060A9C 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 095610 7F060AA0 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 095614 7F060AA4 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 095618 7F060AA8 44810000 */ mtc1 $at, $f0 -/* 09561C 7F060AAC C44A00A0 */ lwc1 $f10, 0xa0($v0) -/* 095620 7F060AB0 C7A80198 */ lwc1 $f8, 0x198($sp) -/* 095624 7F060AB4 3C014040 */ li $at, 0x40400000 # 3.000000 -/* 095628 7F060AB8 46005103 */ div.s $f4, $f10, $f0 -/* 09562C 7F060ABC 44819000 */ mtc1 $at, $f18 -/* 095630 7F060AC0 24010019 */ li $at, 25 -/* 095634 7F060AC4 46044400 */ add.s $f16, $f8, $f4 -/* 095638 7F060AC8 C7A4019C */ lwc1 $f4, 0x19c($sp) -/* 09563C 7F060ACC E7B00198 */ swc1 $f16, 0x198($sp) -/* 095640 7F060AD0 C44600A0 */ lwc1 $f6, 0xa0($v0) -/* 095644 7F060AD4 46069282 */ mul.s $f10, $f18, $f6 -/* 095648 7F060AD8 46005203 */ div.s $f8, $f10, $f0 -/* 09564C 7F060ADC 46082400 */ add.s $f16, $f4, $f8 -/* 095650 7F060AE0 14810014 */ bne $a0, $at, .Ljp7F060B34 -/* 095654 7F060AE4 E7B0019C */ swc1 $f16, 0x19c($sp) -/* 095658 7F060AE8 0FC2969A */ jal cur_player_get_screen_setting -/* 09565C 7F060AEC 00000000 */ nop -/* 095660 7F060AF0 24010001 */ li $at, 1 -/* 095664 7F060AF4 5041000B */ beql $v0, $at, .Ljp7F060B24 -/* 095668 7F060AF8 3C014040 */ lui $at, 0x4040 -/* 09566C 7F060AFC 0FC2969A */ jal cur_player_get_screen_setting -/* 095670 7F060B00 00000000 */ nop -/* 095674 7F060B04 24010002 */ li $at, 2 -/* 095678 7F060B08 50410006 */ beql $v0, $at, .Ljp7F060B24 -/* 09567C 7F060B0C 3C014040 */ lui $at, 0x4040 -/* 095680 7F060B10 0FC296A0 */ jal get_screen_ratio -/* 095684 7F060B14 00000000 */ nop -/* 095688 7F060B18 24010001 */ li $at, 1 -/* 09568C 7F060B1C 14410005 */ bne $v0, $at, .Ljp7F060B34 -/* 095690 7F060B20 3C014040 */ li $at, 0x40400000 # 3.000000 -.Ljp7F060B24: -/* 095694 7F060B24 44813000 */ mtc1 $at, $f6 -/* 095698 7F060B28 C7B20198 */ lwc1 $f18, 0x198($sp) -/* 09569C 7F060B2C 46069281 */ sub.s $f10, $f18, $f6 -/* 0956A0 7F060B30 E7AA0198 */ swc1 $f10, 0x198($sp) -.Ljp7F060B34: -/* 0956A4 7F060B34 1000002C */ b .Ljp7F060BE8 -/* 0956A8 7F060B38 8FA400FC */ lw $a0, 0xfc($sp) -.Ljp7F060B3C: -/* 0956AC 7F060B3C 2401001F */ li $at, 31 -/* 0956B0 7F060B40 14810016 */ bne $a0, $at, .Ljp7F060B9C -/* 0956B4 7F060B44 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0956B8 7F060B48 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0956BC 7F060B4C 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0956C0 7F060B50 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 0956C4 7F060B54 44810000 */ mtc1 $at, $f0 -/* 0956C8 7F060B58 3C014020 */ li $at, 0x40200000 # 2.500000 -/* 0956CC 7F060B5C 44812000 */ mtc1 $at, $f4 -/* 0956D0 7F060B60 C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 0956D4 7F060B64 C7A60198 */ lwc1 $f6, 0x198($sp) -/* 0956D8 7F060B68 3C0140F0 */ li $at, 0x40F00000 # 7.500000 -/* 0956DC 7F060B6C 46082402 */ mul.s $f16, $f4, $f8 -/* 0956E0 7F060B70 44812000 */ mtc1 $at, $f4 -/* 0956E4 7F060B74 46008483 */ div.s $f18, $f16, $f0 -/* 0956E8 7F060B78 46123280 */ add.s $f10, $f6, $f18 -/* 0956EC 7F060B7C C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 0956F0 7F060B80 E7AA0198 */ swc1 $f10, 0x198($sp) -/* 0956F4 7F060B84 C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 0956F8 7F060B88 46082402 */ mul.s $f16, $f4, $f8 -/* 0956FC 7F060B8C 46008183 */ div.s $f6, $f16, $f0 -/* 095700 7F060B90 46069280 */ add.s $f10, $f18, $f6 -/* 095704 7F060B94 10000014 */ b .Ljp7F060BE8 -/* 095708 7F060B98 E7AA019C */ swc1 $f10, 0x19c($sp) -.Ljp7F060B9C: -/* 09570C 7F060B9C 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 095710 7F060BA0 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 095714 7F060BA4 44810000 */ mtc1 $at, $f0 -/* 095718 7F060BA8 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 09571C 7F060BAC 44812000 */ mtc1 $at, $f4 -/* 095720 7F060BB0 C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 095724 7F060BB4 C7A60198 */ lwc1 $f6, 0x198($sp) -/* 095728 7F060BB8 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 09572C 7F060BBC 46082402 */ mul.s $f16, $f4, $f8 -/* 095730 7F060BC0 44812000 */ mtc1 $at, $f4 -/* 095734 7F060BC4 46008483 */ div.s $f18, $f16, $f0 -/* 095738 7F060BC8 46123280 */ add.s $f10, $f6, $f18 -/* 09573C 7F060BCC C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 095740 7F060BD0 E7AA0198 */ swc1 $f10, 0x198($sp) -/* 095744 7F060BD4 C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 095748 7F060BD8 46082402 */ mul.s $f16, $f4, $f8 -/* 09574C 7F060BDC 46008183 */ div.s $f6, $f16, $f0 -/* 095750 7F060BE0 46069280 */ add.s $f10, $f18, $f6 -/* 095754 7F060BE4 E7AA019C */ swc1 $f10, 0x19c($sp) -.Ljp7F060BE8: -/* 095758 7F060BE8 820F000C */ lb $t7, 0xc($s0) -/* 09575C 7F060BEC 11E00047 */ beqz $t7, .Ljp7F060D0C -/* 095760 7F060BF0 00000000 */ nop -/* 095764 7F060BF4 0FC17975 */ jal bondwalkItemCheckBitflags -/* 095768 7F060BF8 24050020 */ li $a1, 32 -/* 09576C 7F060BFC 10400043 */ beqz $v0, .Ljp7F060D0C -/* 095770 7F060C00 8FA400FC */ lw $a0, 0xfc($sp) -/* 095774 7F060C04 0FC17975 */ jal bondwalkItemCheckBitflags -/* 095778 7F060C08 24050040 */ li $a1, 64 -/* 09577C 7F060C0C 10400016 */ beqz $v0, .Ljp7F060C68 -/* 095780 7F060C10 00000000 */ nop -/* 095784 7F060C14 0C002918 */ jal randomGetNext -/* 095788 7F060C18 00000000 */ nop -/* 09578C 7F060C1C 44822000 */ mtc1 $v0, $f4 -/* 095790 7F060C20 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 095794 7F060C24 04410004 */ bgez $v0, .Ljp7F060C38 -/* 095798 7F060C28 46802220 */ cvt.s.w $f8, $f4 -/* 09579C 7F060C2C 44818000 */ mtc1 $at, $f16 -/* 0957A0 7F060C30 00000000 */ nop -/* 0957A4 7F060C34 46104200 */ add.s $f8, $f8, $f16 -.Ljp7F060C38: -/* 0957A8 7F060C38 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0957AC 7F060C3C 44819000 */ mtc1 $at, $f18 -/* 0957B0 7F060C40 3C018005 */ lui $at, %hi(D_80053DE8) # $at, 0x8005 -/* 0957B4 7F060C44 C42A3E18 */ lwc1 $f10, %lo(D_80053DE8)($at) -/* 0957B8 7F060C48 46124182 */ mul.s $f6, $f8, $f18 -/* 0957BC 7F060C4C 3C018005 */ lui $at, %hi(D_80053DEC) # $at, 0x8005 -/* 0957C0 7F060C50 C4303E1C */ lwc1 $f16, %lo(D_80053DEC)($at) -/* 0957C4 7F060C54 C7B20194 */ lwc1 $f18, 0x194($sp) -/* 0957C8 7F060C58 460A3102 */ mul.s $f4, $f6, $f10 -/* 0957CC 7F060C5C 46048201 */ sub.s $f8, $f16, $f4 -/* 0957D0 7F060C60 46089180 */ add.s $f6, $f18, $f8 -/* 0957D4 7F060C64 E7A60194 */ swc1 $f6, 0x194($sp) -.Ljp7F060C68: -/* 0957D8 7F060C68 0C002918 */ jal randomGetNext -/* 0957DC 7F060C6C 00000000 */ nop -/* 0957E0 7F060C70 44825000 */ mtc1 $v0, $f10 -/* 0957E4 7F060C74 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0957E8 7F060C78 04410004 */ bgez $v0, .Ljp7F060C8C -/* 0957EC 7F060C7C 46805420 */ cvt.s.w $f16, $f10 -/* 0957F0 7F060C80 44812000 */ mtc1 $at, $f4 -/* 0957F4 7F060C84 00000000 */ nop -/* 0957F8 7F060C88 46048400 */ add.s $f16, $f16, $f4 -.Ljp7F060C8C: -/* 0957FC 7F060C8C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 095800 7F060C90 44819000 */ mtc1 $at, $f18 -/* 095804 7F060C94 3C018005 */ lui $at, %hi(D_80053DF0) # $at, 0x8005 -/* 095808 7F060C98 C4263E20 */ lwc1 $f6, %lo(D_80053DF0)($at) -/* 09580C 7F060C9C 46128202 */ mul.s $f8, $f16, $f18 -/* 095810 7F060CA0 3C018005 */ lui $at, %hi(D_80053DF4) # $at, 0x8005 -/* 095814 7F060CA4 C4243E24 */ lwc1 $f4, %lo(D_80053DF4)($at) -/* 095818 7F060CA8 C7B20198 */ lwc1 $f18, 0x198($sp) -/* 09581C 7F060CAC 46064282 */ mul.s $f10, $f8, $f6 -/* 095820 7F060CB0 460A2401 */ sub.s $f16, $f4, $f10 -/* 095824 7F060CB4 46109200 */ add.s $f8, $f18, $f16 -/* 095828 7F060CB8 0C002918 */ jal randomGetNext -/* 09582C 7F060CBC E7A80198 */ swc1 $f8, 0x198($sp) -/* 095830 7F060CC0 44823000 */ mtc1 $v0, $f6 -/* 095834 7F060CC4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 095838 7F060CC8 04410004 */ bgez $v0, .Ljp7F060CDC -/* 09583C 7F060CCC 46803120 */ cvt.s.w $f4, $f6 -/* 095840 7F060CD0 44815000 */ mtc1 $at, $f10 -/* 095844 7F060CD4 00000000 */ nop -/* 095848 7F060CD8 460A2100 */ add.s $f4, $f4, $f10 -.Ljp7F060CDC: -/* 09584C 7F060CDC 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 095850 7F060CE0 44819000 */ mtc1 $at, $f18 -/* 095854 7F060CE4 3C018005 */ lui $at, %hi(D_80053DF8) # $at, 0x8005 -/* 095858 7F060CE8 C4283E28 */ lwc1 $f8, %lo(D_80053DF8)($at) -/* 09585C 7F060CEC 46122402 */ mul.s $f16, $f4, $f18 -/* 095860 7F060CF0 3C018005 */ lui $at, %hi(D_80053DFC) -/* 095864 7F060CF4 C42A3E2C */ lwc1 $f10, %lo(D_80053DFC)($at) -/* 095868 7F060CF8 C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 09586C 7F060CFC 46088182 */ mul.s $f6, $f16, $f8 -/* 095870 7F060D00 46065101 */ sub.s $f4, $f10, $f6 -/* 095874 7F060D04 46049400 */ add.s $f16, $f18, $f4 -/* 095878 7F060D08 E7B0019C */ swc1 $f16, 0x19c($sp) -.Ljp7F060D0C: -/* 09587C 7F060D0C 0FC1E2A5 */ jal getPlayer_c_screenwidth -/* 095880 7F060D10 00000000 */ nop -/* 095884 7F060D14 0FC1E2A5 */ jal getPlayer_c_screenwidth -/* 095888 7F060D18 E7A00048 */ swc1 $f0, 0x48($sp) -/* 09588C 7F060D1C 0FC1E2AD */ jal getPlayer_c_screenleft -/* 095890 7F060D20 E7A0004C */ swc1 $f0, 0x4c($sp) -/* 095894 7F060D24 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 095898 7F060D28 3C188008 */ lui $t8, %hi(g_CurrentPlayer) # $t8, 0x8008 -/* 09589C 7F060D2C 8F18A120 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0958A0 7F060D30 44811000 */ mtc1 $at, $f2 -/* 0958A4 7F060D34 C7A6004C */ lwc1 $f6, 0x4c($sp) -/* 0958A8 7F060D38 C7080FFC */ lwc1 $f8, 0xffc($t8) -/* 0958AC 7F060D3C 8FB900F8 */ lw $t9, 0xf8($sp) -/* 0958B0 7F060D40 46023482 */ mul.s $f18, $f6, $f2 -/* 0958B4 7F060D44 46004281 */ sub.s $f10, $f8, $f0 -/* 0958B8 7F060D48 C7300018 */ lwc1 $f16, 0x18($t9) -/* 0958BC 7F060D4C C7A60048 */ lwc1 $f6, 0x48($sp) -/* 0958C0 7F060D50 46125101 */ sub.s $f4, $f10, $f18 -/* 0958C4 7F060D54 46102202 */ mul.s $f8, $f4, $f16 -/* 0958C8 7F060D58 C7A40194 */ lwc1 $f4, 0x194($sp) -/* 0958CC 7F060D5C 46023282 */ mul.s $f10, $f6, $f2 -/* 0958D0 7F060D60 460A4483 */ div.s $f18, $f8, $f10 -/* 0958D4 7F060D64 46122400 */ add.s $f16, $f4, $f18 -/* 0958D8 7F060D68 0FC1E2B1 */ jal getPlayer_c_screentop -/* 0958DC 7F060D6C E7B00194 */ swc1 $f16, 0x194($sp) -/* 0958E0 7F060D70 0FC1E2A9 */ jal getPlayer_c_screenheight -/* 0958E4 7F060D74 E7A00050 */ swc1 $f0, 0x50($sp) -/* 0958E8 7F060D78 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0958EC 7F060D7C 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) # $t5, 0x8008 -/* 0958F0 7F060D80 8DADA120 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 0958F4 7F060D84 44813000 */ mtc1 $at, $f6 -/* 0958F8 7F060D88 C7A40050 */ lwc1 $f4, 0x50($sp) -/* 0958FC 7F060D8C C5AA1000 */ lwc1 $f10, 0x1000($t5) -/* 095900 7F060D90 46060202 */ mul.s $f8, $f0, $f6 -/* 095904 7F060D94 46045481 */ sub.s $f18, $f10, $f4 -/* 095908 7F060D98 4612403C */ c.lt.s $f8, $f18 -/* 09590C 7F060D9C 00000000 */ nop -/* 095910 7F060DA0 4500001A */ bc1f .Ljp7F060E0C -/* 095914 7F060DA4 00000000 */ nop -/* 095918 7F060DA8 0FC1E2A9 */ jal getPlayer_c_screenheight -/* 09591C 7F060DAC 00000000 */ nop -/* 095920 7F060DB0 0FC1E2A9 */ jal getPlayer_c_screenheight -/* 095924 7F060DB4 E7A00048 */ swc1 $f0, 0x48($sp) -/* 095928 7F060DB8 0FC1E2B1 */ jal getPlayer_c_screentop -/* 09592C 7F060DBC E7A0004C */ swc1 $f0, 0x4c($sp) -/* 095930 7F060DC0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 095934 7F060DC4 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8008 -/* 095938 7F060DC8 8DCEA120 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 09593C 7F060DCC 44811000 */ mtc1 $at, $f2 -/* 095940 7F060DD0 C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 095944 7F060DD4 C5D01000 */ lwc1 $f16, 0x1000($t6) -/* 095948 7F060DD8 8FAF00F8 */ lw $t7, 0xf8($sp) -/* 09594C 7F060DDC 46025102 */ mul.s $f4, $f10, $f2 -/* 095950 7F060DE0 46008181 */ sub.s $f6, $f16, $f0 -/* 095954 7F060DE4 C5F20014 */ lwc1 $f18, 0x14($t7) -/* 095958 7F060DE8 C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 09595C 7F060DEC 46043201 */ sub.s $f8, $f6, $f4 -/* 095960 7F060DF0 46124402 */ mul.s $f16, $f8, $f18 -/* 095964 7F060DF4 C7A80198 */ lwc1 $f8, 0x198($sp) -/* 095968 7F060DF8 46025182 */ mul.s $f6, $f10, $f2 -/* 09596C 7F060DFC 46068103 */ div.s $f4, $f16, $f6 -/* 095970 7F060E00 46044481 */ sub.s $f18, $f8, $f4 -/* 095974 7F060E04 1000001A */ b .Ljp7F060E70 -/* 095978 7F060E08 E7B20198 */ swc1 $f18, 0x198($sp) -.Ljp7F060E0C: -/* 09597C 7F060E0C 0FC1E2A9 */ jal getPlayer_c_screenheight -/* 095980 7F060E10 00000000 */ nop -/* 095984 7F060E14 0FC1E2A9 */ jal getPlayer_c_screenheight -/* 095988 7F060E18 E7A00048 */ swc1 $f0, 0x48($sp) -/* 09598C 7F060E1C 0FC1E2B1 */ jal getPlayer_c_screentop -/* 095990 7F060E20 E7A0004C */ swc1 $f0, 0x4c($sp) -/* 095994 7F060E24 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 095998 7F060E28 3C188008 */ lui $t8, %hi(g_CurrentPlayer) # $t8, 0x8008 -/* 09599C 7F060E2C 8F18A120 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0959A0 7F060E30 44818000 */ mtc1 $at, $f16 -/* 0959A4 7F060E34 C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 0959A8 7F060E38 C7081000 */ lwc1 $f8, 0x1000($t8) -/* 0959AC 7F060E3C 8FB900F8 */ lw $t9, 0xf8($sp) -/* 0959B0 7F060E40 46105182 */ mul.s $f6, $f10, $f16 -/* 0959B4 7F060E44 46004101 */ sub.s $f4, $f8, $f0 -/* 0959B8 7F060E48 C72A0010 */ lwc1 $f10, 0x10($t9) -/* 0959BC 7F060E4C C7A80048 */ lwc1 $f8, 0x48($sp) -/* 0959C0 7F060E50 46062481 */ sub.s $f18, $f4, $f6 -/* 0959C4 7F060E54 44812000 */ mtc1 $at, $f4 -/* 0959C8 7F060E58 460A9402 */ mul.s $f16, $f18, $f10 -/* 0959CC 7F060E5C C7AA0198 */ lwc1 $f10, 0x198($sp) -/* 0959D0 7F060E60 46044182 */ mul.s $f6, $f8, $f4 -/* 0959D4 7F060E64 46068483 */ div.s $f18, $f16, $f6 -/* 0959D8 7F060E68 46125201 */ sub.s $f8, $f10, $f18 -/* 0959DC 7F060E6C E7A80198 */ swc1 $f8, 0x198($sp) -.Ljp7F060E70: -/* 0959E0 7F060E70 0FC172CD */ jal sub_GAME_7F05C614 -/* 0959E4 7F060E74 00000000 */ nop -/* 0959E8 7F060E78 0FC1613C */ jal matrix_4x4_set_identity -/* 0959EC 7F060E7C 27A40154 */ addiu $a0, $sp, 0x154 -/* 0959F0 7F060E80 8FA200FC */ lw $v0, 0xfc($sp) -/* 0959F4 7F060E84 2401001E */ li $at, 30 -/* 0959F8 7F060E88 10410002 */ beq $v0, $at, .Ljp7F060E94 -/* 0959FC 7F060E8C 24010017 */ li $at, 23 -/* 095A00 7F060E90 14410010 */ bne $v0, $at, .Ljp7F060ED4 -.Ljp7F060E94: -/* 095A04 7F060E94 3C0D8003 */ lui $t5, %hi(D_80035C70) # $t5, 0x8003 -/* 095A08 7F060E98 25AD5CB0 */ addiu $t5, %lo(D_80035C70) # addiu $t5, $t5, 0x5cb0 -/* 095A0C 7F060E9C 8DA10000 */ lw $at, ($t5) -/* 095A10 7F060EA0 27A400B8 */ addiu $a0, $sp, 0xb8 -/* 095A14 7F060EA4 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095A18 7F060EA8 AC810000 */ sw $at, ($a0) -/* 095A1C 7F060EAC 8DAF0004 */ lw $t7, 4($t5) -/* 095A20 7F060EB0 AC8F0004 */ sw $t7, 4($a0) -/* 095A24 7F060EB4 8DA10008 */ lw $at, 8($t5) -/* 095A28 7F060EB8 0FC1630D */ jal matrix_4x4_set_rotation_around_xyz -/* 095A2C 7F060EBC AC810008 */ sw $at, 8($a0) -/* 095A30 7F060EC0 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 095A34 7F060EC4 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 095A38 7F060EC8 27A50154 */ addiu $a1, $sp, 0x154 -/* 095A3C 7F060ECC 10000039 */ b .Ljp7F060FB4 -/* 095A40 7F060ED0 8E0D00BC */ lw $t5, 0xbc($s0) -.Ljp7F060ED4: -/* 095A44 7F060ED4 2401001F */ li $at, 31 -/* 095A48 7F060ED8 14410010 */ bne $v0, $at, .Ljp7F060F1C -/* 095A4C 7F060EDC 3C188003 */ lui $t8, %hi(D_80035C7C) # $t8, 0x8003 -/* 095A50 7F060EE0 27185CBC */ addiu $t8, %lo(D_80035C7C) # addiu $t8, $t8, 0x5cbc -/* 095A54 7F060EE4 8F010000 */ lw $at, ($t8) -/* 095A58 7F060EE8 27A400AC */ addiu $a0, $sp, 0xac -/* 095A5C 7F060EEC 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095A60 7F060EF0 AC810000 */ sw $at, ($a0) -/* 095A64 7F060EF4 8F0E0004 */ lw $t6, 4($t8) -/* 095A68 7F060EF8 AC8E0004 */ sw $t6, 4($a0) -/* 095A6C 7F060EFC 8F010008 */ lw $at, 8($t8) -/* 095A70 7F060F00 0FC1630D */ jal matrix_4x4_set_rotation_around_xyz -/* 095A74 7F060F04 AC810008 */ sw $at, 8($a0) -/* 095A78 7F060F08 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 095A7C 7F060F0C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 095A80 7F060F10 27A50154 */ addiu $a1, $sp, 0x154 -/* 095A84 7F060F14 10000027 */ b .Ljp7F060FB4 -/* 095A88 7F060F18 8E0D00BC */ lw $t5, 0xbc($s0) -.Ljp7F060F1C: -/* 095A8C 7F060F1C 24010001 */ li $at, 1 -/* 095A90 7F060F20 14410023 */ bne $v0, $at, .Ljp7F060FB0 -/* 095A94 7F060F24 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) # $t5, 0x8008 -/* 095A98 7F060F28 8DADA120 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 095A9C 7F060F2C 24010011 */ li $at, 17 -/* 095AA0 7F060F30 3C198003 */ lui $t9, %hi(D_80035C88) # $t9, 0x8003 -/* 095AA4 7F060F34 8DAF2A38 */ lw $t7, 0x2a38($t5) -/* 095AA8 7F060F38 27395CC8 */ addiu $t9, %lo(D_80035C88) # addiu $t9, $t9, 0x5cc8 -/* 095AAC 7F060F3C 55E1001D */ bnel $t7, $at, .Ljp7F060FB4 -/* 095AB0 7F060F40 8E0D00BC */ lw $t5, 0xbc($s0) -/* 095AB4 7F060F44 8F210000 */ lw $at, ($t9) -/* 095AB8 7F060F48 27A400A0 */ addiu $a0, $sp, 0xa0 -/* 095ABC 7F060F4C 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095AC0 7F060F50 AC810000 */ sw $at, ($a0) -/* 095AC4 7F060F54 8F2E0004 */ lw $t6, 4($t9) -/* 095AC8 7F060F58 AC8E0004 */ sw $t6, 4($a0) -/* 095ACC 7F060F5C 8F210008 */ lw $at, 8($t9) -/* 095AD0 7F060F60 0FC1630D */ jal matrix_4x4_set_rotation_around_xyz -/* 095AD4 7F060F64 AC810008 */ sw $at, 8($a0) -/* 095AD8 7F060F68 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 095ADC 7F060F6C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 095AE0 7F060F70 27A50154 */ addiu $a1, $sp, 0x154 -/* 095AE4 7F060F74 3C01C020 */ li $at, 0xC0200000 # -2.500000 -/* 095AE8 7F060F78 44818000 */ mtc1 $at, $f16 -/* 095AEC 7F060F7C C7A40194 */ lwc1 $f4, 0x194($sp) -/* 095AF0 7F060F80 3C018005 */ lui $at, %hi(D_80053E00) # $at, 0x8005 -/* 095AF4 7F060F84 C4323E30 */ lwc1 $f18, %lo(D_80053E00)($at) -/* 095AF8 7F060F88 46102180 */ add.s $f6, $f4, $f16 -/* 095AFC 7F060F8C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 095B00 7F060F90 C7AA0198 */ lwc1 $f10, 0x198($sp) -/* 095B04 7F060F94 44818000 */ mtc1 $at, $f16 -/* 095B08 7F060F98 C7A4019C */ lwc1 $f4, 0x19c($sp) -/* 095B0C 7F060F9C E7A60194 */ swc1 $f6, 0x194($sp) -/* 095B10 7F060FA0 46125200 */ add.s $f8, $f10, $f18 -/* 095B14 7F060FA4 46102180 */ add.s $f6, $f4, $f16 -/* 095B18 7F060FA8 E7A80198 */ swc1 $f8, 0x198($sp) -/* 095B1C 7F060FAC E7A6019C */ swc1 $f6, 0x19c($sp) -.Ljp7F060FB0: -/* 095B20 7F060FB0 8E0D00BC */ lw $t5, 0xbc($s0) -.Ljp7F060FB4: -/* 095B24 7F060FB4 51A00017 */ beql $t5, $zero, .Ljp7F061014 -/* 095B28 7F060FB8 44802000 */ mtc1 $zero, $f4 -/* 095B2C 7F060FBC C7AA0194 */ lwc1 $f10, 0x194($sp) -/* 095B30 7F060FC0 C61200AC */ lwc1 $f18, 0xac($s0) -/* 095B34 7F060FC4 C7A40198 */ lwc1 $f4, 0x198($sp) -/* 095B38 7F060FC8 2604007C */ addiu $a0, $s0, 0x7c -/* 095B3C 7F060FCC 46125200 */ add.s $f8, $f10, $f18 -/* 095B40 7F060FD0 C7AA019C */ lwc1 $f10, 0x19c($sp) -/* 095B44 7F060FD4 27A50154 */ addiu $a1, $sp, 0x154 -/* 095B48 7F060FD8 E7A80194 */ swc1 $f8, 0x194($sp) -/* 095B4C 7F060FDC C61000B0 */ lwc1 $f16, 0xb0($s0) -/* 095B50 7F060FE0 46102180 */ add.s $f6, $f4, $f16 -/* 095B54 7F060FE4 E7A60198 */ swc1 $f6, 0x198($sp) -/* 095B58 7F060FE8 C61200B4 */ lwc1 $f18, 0xb4($s0) -/* 095B5C 7F060FEC 46125200 */ add.s $f8, $f10, $f18 -/* 095B60 7F060FF0 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 095B64 7F060FF4 E7A8019C */ swc1 $f8, 0x19c($sp) -/* 095B68 7F060FF8 44800000 */ mtc1 $zero, $f0 -/* 095B6C 7F060FFC 00000000 */ nop -/* 095B70 7F061000 E7A00184 */ swc1 $f0, 0x184($sp) -/* 095B74 7F061004 E7A00188 */ swc1 $f0, 0x188($sp) -/* 095B78 7F061008 1000000A */ b .Ljp7F061034 -/* 095B7C 7F06100C E7A0018C */ swc1 $f0, 0x18c($sp) -/* 095B80 7F061010 44802000 */ mtc1 $zero, $f4 -.Ljp7F061014: -/* 095B84 7F061014 44808000 */ mtc1 $zero, $f16 -/* 095B88 7F061018 44803000 */ mtc1 $zero, $f6 -/* 095B8C 7F06101C 44805000 */ mtc1 $zero, $f10 -/* 095B90 7F061020 44800000 */ mtc1 $zero, $f0 -/* 095B94 7F061024 E6040078 */ swc1 $f4, 0x78($s0) -/* 095B98 7F061028 E610006C */ swc1 $f16, 0x6c($s0) -/* 095B9C 7F06102C E6060070 */ swc1 $f6, 0x70($s0) -/* 095BA0 7F061030 E60A0074 */ swc1 $f10, 0x74($s0) -.Ljp7F061034: -/* 095BA4 7F061034 C61200CC */ lwc1 $f18, 0xcc($s0) -/* 095BA8 7F061038 44050000 */ mfc1 $a1, $f0 -/* 095BAC 7F06103C 44060000 */ mfc1 $a2, $f0 -/* 095BB0 7F061040 E7B20010 */ swc1 $f18, 0x10($sp) -/* 095BB4 7F061044 C60800D0 */ lwc1 $f8, 0xd0($s0) -/* 095BB8 7F061048 44070000 */ mfc1 $a3, $f0 -/* 095BBC 7F06104C 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 095BC0 7F061050 E7A80014 */ swc1 $f8, 0x14($sp) -/* 095BC4 7F061054 C60400D4 */ lwc1 $f4, 0xd4($s0) -/* 095BC8 7F061058 E7A40018 */ swc1 $f4, 0x18($sp) -/* 095BCC 7F06105C C61000D8 */ lwc1 $f16, 0xd8($s0) -/* 095BD0 7F061060 E7B0001C */ swc1 $f16, 0x1c($sp) -/* 095BD4 7F061064 C60600DC */ lwc1 $f6, 0xdc($s0) -/* 095BD8 7F061068 E7A60020 */ swc1 $f6, 0x20($sp) -/* 095BDC 7F06106C C60A00E0 */ lwc1 $f10, 0xe0($s0) -/* 095BE0 7F061070 0FC1678A */ jal matrix_4x4_set_basis_and_position_target -/* 095BE4 7F061074 E7AA0024 */ swc1 $f10, 0x24($sp) -/* 095BE8 7F061078 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 095BEC 7F06107C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 095BF0 7F061080 27A50154 */ addiu $a1, $sp, 0x154 -/* 095BF4 7F061084 C7B20194 */ lwc1 $f18, 0x194($sp) -/* 095BF8 7F061088 C60801C8 */ lwc1 $f8, 0x1c8($s0) -/* 095BFC 7F06108C C7B00198 */ lwc1 $f16, 0x198($sp) -/* 095C00 7F061090 C60601CC */ lwc1 $f6, 0x1cc($s0) -/* 095C04 7F061094 46089101 */ sub.s $f4, $f18, $f8 -/* 095C08 7F061098 C60801D0 */ lwc1 $f8, 0x1d0($s0) -/* 095C0C 7F06109C C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 095C10 7F0610A0 46068281 */ sub.s $f10, $f16, $f6 -/* 095C14 7F0610A4 44062000 */ mfc1 $a2, $f4 -/* 095C18 7F0610A8 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 095C1C 7F0610AC 46089101 */ sub.s $f4, $f18, $f8 -/* 095C20 7F0610B0 44075000 */ mfc1 $a3, $f10 -/* 095C24 7F0610B4 24050000 */ li $a1, 0 -/* 095C28 7F0610B8 0FC16882 */ jal matrix_4x4_align -/* 095C2C 7F0610BC E7A40010 */ swc1 $f4, 0x10($sp) -/* 095C30 7F0610C0 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 095C34 7F0610C4 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 095C38 7F0610C8 27A50154 */ addiu $a1, $sp, 0x154 -/* 095C3C 7F0610CC 27A40154 */ addiu $a0, $sp, 0x154 -/* 095C40 7F0610D0 0FC16150 */ jal matrix_4x4_copy -/* 095C44 7F0610D4 27A50264 */ addiu $a1, $sp, 0x264 -/* 095C48 7F0610D8 27A40194 */ addiu $a0, $sp, 0x194 -/* 095C4C 7F0610DC 0FC163AE */ jal matrix_4x4_set_position -/* 095C50 7F0610E0 27A50264 */ addiu $a1, $sp, 0x264 -/* 095C54 7F0610E4 26050228 */ addiu $a1, $s0, 0x228 -/* 095C58 7F0610E8 AFA50044 */ sw $a1, 0x44($sp) -/* 095C5C 7F0610EC 0FC16150 */ jal matrix_4x4_copy -/* 095C60 7F0610F0 27A40264 */ addiu $a0, $sp, 0x264 -/* 095C64 7F0610F4 26040268 */ addiu $a0, $s0, 0x268 -/* 095C68 7F0610F8 AFA40040 */ sw $a0, 0x40($sp) -/* 095C6C 7F0610FC 0FC16150 */ jal matrix_4x4_copy -/* 095C70 7F061100 260502A8 */ addiu $a1, $s0, 0x2a8 -/* 095C74 7F061104 0FC1E28D */ jal currentPlayerGetMatrix10D4 -/* 095C78 7F061108 00000000 */ nop -/* 095C7C 7F06110C 00402025 */ move $a0, $v0 -/* 095C80 7F061110 8FA50044 */ lw $a1, 0x44($sp) -/* 095C84 7F061114 0FC161AB */ jal matrix_4x4_multiply_homogeneous -/* 095C88 7F061118 8FA60040 */ lw $a2, 0x40($sp) -/* 095C8C 7F06111C 240F0001 */ li $t7, 1 -/* 095C90 7F061120 A20F000F */ sb $t7, 0xf($s0) -/* 095C94 7F061124 0FC1755A */ jal get_ptr_weapon_model_header_line -/* 095C98 7F061128 8FA400FC */ lw $a0, 0xfc($sp) -/* 095C9C 7F06112C 10400017 */ beqz $v0, .Ljp7F06118C -/* 095CA0 7F061130 8FA400FC */ lw $a0, 0xfc($sp) -/* 095CA4 7F061134 0FC17975 */ jal bondwalkItemCheckBitflags -/* 095CA8 7F061138 24050800 */ li $a1, 2048 -/* 095CAC 7F06113C 10400013 */ beqz $v0, .Ljp7F06118C -/* 095CB0 7F061140 8FA400FC */ lw $a0, 0xfc($sp) -/* 095CB4 7F061144 0FC17975 */ jal bondwalkItemCheckBitflags -/* 095CB8 7F061148 24052000 */ li $a1, 8192 -/* 095CBC 7F06114C 54400010 */ bnezl $v0, .Ljp7F061190 -/* 095CC0 7F061150 A200000F */ sb $zero, 0xf($s0) -/* 095CC4 7F061154 8E020024 */ lw $v0, 0x24($s0) -/* 095CC8 7F061158 24010006 */ li $at, 6 -/* 095CCC 7F06115C 1041000B */ beq $v0, $at, .Ljp7F06118C -/* 095CD0 7F061160 24010007 */ li $at, 7 -/* 095CD4 7F061164 5041000A */ beql $v0, $at, .Ljp7F061190 -/* 095CD8 7F061168 A200000F */ sb $zero, 0xf($s0) -/* 095CDC 7F06116C 0FC174F7 */ jal Gun_hand_without_item -/* 095CE0 7F061170 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 095CE4 7F061174 50400006 */ beql $v0, $zero, .Ljp7F061190 -/* 095CE8 7F061178 A200000F */ sb $zero, 0xf($s0) -/* 095CEC 7F06117C 0FC17508 */ jal get_itemtype_in_hand -/* 095CF0 7F061180 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 095CF4 7F061184 54400003 */ bnezl $v0, .Ljp7F061194 -/* 095CF8 7F061188 8E18002C */ lw $t8, 0x2c($s0) -.Ljp7F06118C: -/* 095CFC 7F06118C A200000F */ sb $zero, 0xf($s0) -.Ljp7F061190: -/* 095D00 7F061190 8E18002C */ lw $t8, 0x2c($s0) -.Ljp7F061194: -/* 095D04 7F061194 8FA400FC */ lw $a0, 0xfc($sp) -/* 095D08 7F061198 5F000007 */ bgtzl $t8, .Ljp7F0611B8 -/* 095D0C 7F06119C 8219000F */ lb $t9, 0xf($s0) -/* 095D10 7F0611A0 0FC17975 */ jal bondwalkItemCheckBitflags -/* 095D14 7F0611A4 24050002 */ li $a1, 2 -/* 095D18 7F0611A8 50400003 */ beql $v0, $zero, .Ljp7F0611B8 -/* 095D1C 7F0611AC 8219000F */ lb $t9, 0xf($s0) -/* 095D20 7F0611B0 A200000F */ sb $zero, 0xf($s0) -/* 095D24 7F0611B4 8219000F */ lb $t9, 0xf($s0) -.Ljp7F0611B8: -/* 095D28 7F0611B8 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 095D2C 7F0611BC 8FAD02A8 */ lw $t5, 0x2a8($sp) -/* 095D30 7F0611C0 532002D0 */ beql $t9, $zero, .Ljp7F061D04 -/* 095D34 7F0611C4 8FAE00FC */ lw $t6, 0xfc($sp) -/* 095D38 7F0611C8 8DCEA120 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 095D3C 7F0611CC 000D7940 */ sll $t7, $t5, 5 -/* 095D40 7F0611D0 00001825 */ move $v1, $zero -/* 095D44 7F0611D4 01CF1021 */ addu $v0, $t6, $t7 -/* 095D48 7F0611D8 8444081E */ lh $a0, 0x81e($v0) -/* 095D4C 7F0611DC 24420810 */ addiu $v0, $v0, 0x810 -/* 095D50 7F0611E0 AFA201A0 */ sw $v0, 0x1a0($sp) -/* 095D54 7F0611E4 0004C180 */ sll $t8, $a0, 6 -/* 095D58 7F0611E8 03002025 */ move $a0, $t8 -/* 095D5C 7F0611EC 0FC2F8B1 */ jal dynAllocate -/* 095D60 7F0611F0 AFA00100 */ sw $zero, 0x100($sp) -/* 095D64 7F0611F4 8FB901A0 */ lw $t9, 0x1a0($sp) -/* 095D68 7F0611F8 AFA202A4 */ sw $v0, 0x2a4($sp) -/* 095D6C 7F0611FC 8FA30100 */ lw $v1, 0x100($sp) -/* 095D70 7F061200 872D000E */ lh $t5, 0xe($t9) -/* 095D74 7F061204 19A0000D */ blez $t5, .Ljp7F06123C -/* 095D78 7F061208 00402025 */ move $a0, $v0 -/* 095D7C 7F06120C AFA30100 */ sw $v1, 0x100($sp) -.Ljp7F061210: -/* 095D80 7F061210 0FC1613C */ jal matrix_4x4_set_identity -/* 095D84 7F061214 AFA40044 */ sw $a0, 0x44($sp) -/* 095D88 7F061218 8FAE01A0 */ lw $t6, 0x1a0($sp) -/* 095D8C 7F06121C 8FA30100 */ lw $v1, 0x100($sp) -/* 095D90 7F061220 8FA40044 */ lw $a0, 0x44($sp) -/* 095D94 7F061224 85CF000E */ lh $t7, 0xe($t6) -/* 095D98 7F061228 24630001 */ addiu $v1, $v1, 1 -/* 095D9C 7F06122C 24840040 */ addiu $a0, $a0, 0x40 -/* 095DA0 7F061230 006F082A */ slt $at, $v1, $t7 -/* 095DA4 7F061234 5420FFF6 */ bnezl $at, .Ljp7F061210 -/* 095DA8 7F061238 AFA30100 */ sw $v1, 0x100($sp) -.Ljp7F06123C: -/* 095DAC 7F06123C 0FC1D8B9 */ jal modelCalculateRwDataLen -/* 095DB0 7F061240 8FA401A0 */ lw $a0, 0x1a0($sp) -/* 095DB4 7F061244 260402F8 */ addiu $a0, $s0, 0x2f8 -/* 095DB8 7F061248 8FA501A0 */ lw $a1, 0x1a0($sp) -/* 095DBC 7F06124C AFA40044 */ sw $a0, 0x44($sp) -/* 095DC0 7F061250 0FC1D956 */ jal modelInit -/* 095DC4 7F061254 26060318 */ addiu $a2, $s0, 0x318 -/* 095DC8 7F061258 8FA40044 */ lw $a0, 0x44($sp) -/* 095DCC 7F06125C 0FC17BA6 */ jal sub_GAME_7F05E978 -/* 095DD0 7F061260 24050001 */ li $a1, 1 -/* 095DD4 7F061264 8FA40044 */ lw $a0, 0x44($sp) -/* 095DD8 7F061268 0FC17BED */ jal sub_GAME_7F05EA94 -/* 095DDC 7F06126C 8205000E */ lb $a1, 0xe($s0) -/* 095DE0 7F061270 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 095DE4 7F061274 8F020008 */ lw $v0, 8($t8) -/* 095DE8 7F061278 8C440004 */ lw $a0, 4($v0) -/* 095DEC 7F06127C 50800008 */ beql $a0, $zero, .Ljp7F0612A0 -/* 095DF0 7F061280 8C43000C */ lw $v1, 0xc($v0) -/* 095DF4 7F061284 8C830004 */ lw $v1, 4($a0) -/* 095DF8 7F061288 94790004 */ lhu $t9, 4($v1) -/* 095DFC 7F06128C 00196880 */ sll $t5, $t9, 2 -/* 095E00 7F061290 020D7021 */ addu $t6, $s0, $t5 -/* 095E04 7F061294 25CF0318 */ addiu $t7, $t6, 0x318 -/* 095E08 7F061298 AFAF010C */ sw $t7, 0x10c($sp) -/* 095E0C 7F06129C 8C43000C */ lw $v1, 0xc($v0) -.Ljp7F0612A0: -/* 095E10 7F0612A0 50600004 */ beql $v1, $zero, .Ljp7F0612B4 -/* 095E14 7F0612A4 8FB902A4 */ lw $t9, 0x2a4($sp) -/* 095E18 7F0612A8 8C780004 */ lw $t8, 4($v1) -/* 095E1C 7F0612AC AFB80108 */ sw $t8, 0x108($sp) -/* 095E20 7F0612B0 8FB902A4 */ lw $t9, 0x2a4($sp) -.Ljp7F0612B4: -/* 095E24 7F0612B4 24050400 */ li $a1, 1024 -/* 095E28 7F0612B8 AE190304 */ sw $t9, 0x304($s0) -/* 095E2C 7F0612BC 0FC17975 */ jal bondwalkItemCheckBitflags -/* 095E30 7F0612C0 8FA400FC */ lw $a0, 0xfc($sp) -/* 095E34 7F0612C4 10400008 */ beqz $v0, .Ljp7F0612E8 -/* 095E38 7F0612C8 00000000 */ nop -/* 095E3C 7F0612CC 8FAD02A8 */ lw $t5, 0x2a8($sp) -/* 095E40 7F0612D0 24010001 */ li $at, 1 -/* 095E44 7F0612D4 15A10004 */ bne $t5, $at, .Ljp7F0612E8 -/* 095E48 7F0612D8 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 095E4C 7F0612DC 44816000 */ mtc1 $at, $f12 -/* 095E50 7F0612E0 0FC163B5 */ jal matrix_column_1_scalar_multiply -/* 095E54 7F0612E4 27A50264 */ addiu $a1, $sp, 0x264 -.Ljp7F0612E8: -/* 095E58 7F0612E8 3C018005 */ lui $at, %hi(D_80053E04) # $at, 0x8005 -/* 095E5C 7F0612EC C42C3E34 */ lwc1 $f12, %lo(D_80053E04)($at) -/* 095E60 7F0612F0 0FC163E7 */ jal matrix_scalar_multiply -/* 095E64 7F0612F4 27A50264 */ addiu $a1, $sp, 0x264 -/* 095E68 7F0612F8 27A40264 */ addiu $a0, $sp, 0x264 -/* 095E6C 7F0612FC 0FC16150 */ jal matrix_4x4_copy -/* 095E70 7F061300 8FA502A4 */ lw $a1, 0x2a4($sp) -/* 095E74 7F061304 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 095E78 7F061308 3C0E8004 */ lui $t6, %hi(skeleton_gun_revolver) # $t6, 0x8004 -/* 095E7C 7F06130C 25CEC79C */ addiu $t6, %lo(skeleton_gun_revolver) # addiu $t6, $t6, -0x3864 -/* 095E80 7F061310 8DF80004 */ lw $t8, 4($t7) -/* 095E84 7F061314 55D80078 */ bnel $t6, $t8, .Ljp7F0614F8 -/* 095E88 7F061318 8FA2010C */ lw $v0, 0x10c($sp) -/* 095E8C 7F06131C 8DE20008 */ lw $v0, 8($t7) -/* 095E90 7F061320 8FB900FC */ lw $t9, 0xfc($sp) -/* 095E94 7F061324 24010012 */ li $at, 18 -/* 095E98 7F061328 8C430010 */ lw $v1, 0x10($v0) -/* 095E9C 7F06132C 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095EA0 7F061330 50600041 */ beql $v1, $zero, .Ljp7F061438 -/* 095EA4 7F061334 8C430014 */ lw $v1, 0x14($v0) -/* 095EA8 7F061338 44806000 */ mtc1 $zero, $f12 -/* 095EAC 7F06133C 17210021 */ bne $t9, $at, .Ljp7F0613C4 -/* 095EB0 7F061340 8C640004 */ lw $a0, 4($v1) -/* 095EB4 7F061344 8E0D0024 */ lw $t5, 0x24($s0) -/* 095EB8 7F061348 24010001 */ li $at, 1 -/* 095EBC 7F06134C 55A10012 */ bnel $t5, $at, .Ljp7F061398 -/* 095EC0 7F061350 8E18002C */ lw $t8, 0x2c($s0) -/* 095EC4 7F061354 8E18002C */ lw $t8, 0x2c($s0) -/* 095EC8 7F061358 8E0E0020 */ lw $t6, 0x20($s0) -/* 095ECC 7F06135C 3C018005 */ lui $at, %hi(D_80053E08) # $at, 0x8005 -/* 095ED0 7F061360 00187880 */ sll $t7, $t8, 2 -/* 095ED4 7F061364 01F87823 */ subu $t7, $t7, $t8 -/* 095ED8 7F061368 000F7840 */ sll $t7, $t7, 1 -/* 095EDC 7F06136C 01CFC823 */ subu $t9, $t6, $t7 -/* 095EE0 7F061370 272D001E */ addiu $t5, $t9, 0x1e -/* 095EE4 7F061374 448D8000 */ mtc1 $t5, $f16 -/* 095EE8 7F061378 C42A3E38 */ lwc1 $f10, %lo(D_80053E08)($at) -/* 095EEC 7F06137C 3C014210 */ li $at, 0x42100000 # 36.000000 -/* 095EF0 7F061380 468081A0 */ cvt.s.w $f6, $f16 -/* 095EF4 7F061384 44814000 */ mtc1 $at, $f8 -/* 095EF8 7F061388 460A3482 */ mul.s $f18, $f6, $f10 -/* 095EFC 7F06138C 1000001D */ b .Ljp7F061404 -/* 095F00 7F061390 46089303 */ div.s $f12, $f18, $f8 -/* 095F04 7F061394 8E18002C */ lw $t8, 0x2c($s0) -.Ljp7F061398: -/* 095F08 7F061398 240E0006 */ li $t6, 6 -/* 095F0C 7F06139C 3C018005 */ lui $at, %hi(D_80053E0C) # $at, 0x8005 -/* 095F10 7F0613A0 01D87823 */ subu $t7, $t6, $t8 -/* 095F14 7F0613A4 448F2000 */ mtc1 $t7, $f4 -/* 095F18 7F0613A8 C4263E3C */ lwc1 $f6, %lo(D_80053E0C)($at) -/* 095F1C 7F0613AC 3C0140C0 */ li $at, 0x40C00000 # 6.000000 -/* 095F20 7F0613B0 46802420 */ cvt.s.w $f16, $f4 -/* 095F24 7F0613B4 44819000 */ mtc1 $at, $f18 -/* 095F28 7F0613B8 46068282 */ mul.s $f10, $f16, $f6 -/* 095F2C 7F0613BC 10000011 */ b .Ljp7F061404 -/* 095F30 7F0613C0 46125303 */ div.s $f12, $f10, $f18 -.Ljp7F0613C4: -/* 095F34 7F0613C4 8E190024 */ lw $t9, 0x24($s0) -/* 095F38 7F0613C8 24010001 */ li $at, 1 -/* 095F3C 7F0613CC 1721000D */ bne $t9, $at, .Ljp7F061404 -/* 095F40 7F0613D0 00000000 */ nop -/* 095F44 7F0613D4 8E020020 */ lw $v0, 0x20($s0) -/* 095F48 7F0613D8 28410006 */ slti $at, $v0, 6 -/* 095F4C 7F0613DC 10200009 */ beqz $at, .Ljp7F061404 -/* 095F50 7F0613E0 00000000 */ nop -/* 095F54 7F0613E4 44824000 */ mtc1 $v0, $f8 -/* 095F58 7F0613E8 3C018005 */ lui $at, %hi(D_80053E10) # $at, 0x8005 -/* 095F5C 7F0613EC C4303E40 */ lwc1 $f16, %lo(D_80053E10)($at) -/* 095F60 7F0613F0 46804120 */ cvt.s.w $f4, $f8 -/* 095F64 7F0613F4 3C014210 */ li $at, 0x42100000 # 36.000000 -/* 095F68 7F0613F8 44815000 */ mtc1 $at, $f10 -/* 095F6C 7F0613FC 46102182 */ mul.s $f6, $f4, $f16 -/* 095F70 7F061400 460A3303 */ div.s $f12, $f6, $f10 -.Ljp7F061404: -/* 095F74 7F061404 0FC162EA */ jal matrix_4x4_set_rotation_around_z -/* 095F78 7F061408 AFA4009C */ sw $a0, 0x9c($sp) -/* 095F7C 7F06140C 8FA4009C */ lw $a0, 0x9c($sp) -/* 095F80 7F061410 0FC163AE */ jal matrix_4x4_set_position -/* 095F84 7F061414 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095F88 7F061418 8FA602A4 */ lw $a2, 0x2a4($sp) -/* 095F8C 7F06141C 27A40264 */ addiu $a0, $sp, 0x264 -/* 095F90 7F061420 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095F94 7F061424 0FC1617A */ jal matrix_4x4_multiply -/* 095F98 7F061428 24C600C0 */ addiu $a2, $a2, 0xc0 -/* 095F9C 7F06142C 8FAD01A0 */ lw $t5, 0x1a0($sp) -/* 095FA0 7F061430 8DA20008 */ lw $v0, 8($t5) -/* 095FA4 7F061434 8C430014 */ lw $v1, 0x14($v0) -.Ljp7F061438: -/* 095FA8 7F061438 5060002F */ beql $v1, $zero, .Ljp7F0614F8 -/* 095FAC 7F06143C 8FA2010C */ lw $v0, 0x10c($sp) -/* 095FB0 7F061440 8E0E0024 */ lw $t6, 0x24($s0) -/* 095FB4 7F061444 24010001 */ li $at, 1 -/* 095FB8 7F061448 8C640004 */ lw $a0, 4($v1) -/* 095FBC 7F06144C 15C10022 */ bne $t6, $at, .Ljp7F0614D8 -/* 095FC0 7F061450 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 095FC4 7F061454 8E020020 */ lw $v0, 0x20($s0) -/* 095FC8 7F061458 24180006 */ li $t8, 6 -/* 095FCC 7F06145C 28410003 */ slti $at, $v0, 3 -/* 095FD0 7F061460 1020000C */ beqz $at, .Ljp7F061494 -/* 095FD4 7F061464 03027823 */ subu $t7, $t8, $v0 -/* 095FD8 7F061468 44829000 */ mtc1 $v0, $f18 -/* 095FDC 7F06146C 3C018005 */ lui $at, %hi(D_80053E14) # $at, 0x8005 -/* 095FE0 7F061470 C4303E44 */ lwc1 $f16, %lo(D_80053E14)($at) -/* 095FE4 7F061474 46809220 */ cvt.s.w $f8, $f18 -/* 095FE8 7F061478 3C0140C0 */ li $at, 0x40C00000 # 6.000000 -/* 095FEC 7F06147C 44815000 */ mtc1 $at, $f10 -/* 095FF0 7F061480 46004107 */ neg.s $f4, $f8 -/* 095FF4 7F061484 46102002 */ mul.s $f0, $f4, $f16 -/* 095FF8 7F061488 46000180 */ add.s $f6, $f0, $f0 -/* 095FFC 7F06148C 1000000B */ b .Ljp7F0614BC -/* 096000 7F061490 460A3303 */ div.s $f12, $f6, $f10 -.Ljp7F061494: -/* 096004 7F061494 448F9000 */ mtc1 $t7, $f18 -/* 096008 7F061498 3C018005 */ lui $at, %hi(D_80053E18) # $at, 0x8005 -/* 09600C 7F06149C C4303E48 */ lwc1 $f16, %lo(D_80053E18)($at) -/* 096010 7F0614A0 46809220 */ cvt.s.w $f8, $f18 -/* 096014 7F0614A4 3C0140C0 */ li $at, 0x40C00000 # 6.000000 -/* 096018 7F0614A8 44815000 */ mtc1 $at, $f10 -/* 09601C 7F0614AC 46004107 */ neg.s $f4, $f8 -/* 096020 7F0614B0 46102002 */ mul.s $f0, $f4, $f16 -/* 096024 7F0614B4 46000180 */ add.s $f6, $f0, $f0 -/* 096028 7F0614B8 460A3303 */ div.s $f12, $f6, $f10 -.Ljp7F0614BC: -/* 09602C 7F0614BC 0FC162A4 */ jal matrix_4x4_set_rotation_around_x -/* 096030 7F0614C0 AFA40094 */ sw $a0, 0x94($sp) -/* 096034 7F0614C4 8FA40094 */ lw $a0, 0x94($sp) -/* 096038 7F0614C8 0FC163AE */ jal matrix_4x4_set_position -/* 09603C 7F0614CC 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 096040 7F0614D0 10000004 */ b .Ljp7F0614E4 -/* 096044 7F0614D4 8FA602A4 */ lw $a2, 0x2a4($sp) -.Ljp7F0614D8: -/* 096048 7F0614D8 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 09604C 7F0614DC 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 096050 7F0614E0 8FA602A4 */ lw $a2, 0x2a4($sp) -.Ljp7F0614E4: -/* 096054 7F0614E4 27A40264 */ addiu $a0, $sp, 0x264 -/* 096058 7F0614E8 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 09605C 7F0614EC 0FC1617A */ jal matrix_4x4_multiply -/* 096060 7F0614F0 24C60100 */ addiu $a2, $a2, 0x100 -/* 096064 7F0614F4 8FA2010C */ lw $v0, 0x10c($sp) -.Ljp7F0614F8: -/* 096068 7F0614F8 50400003 */ beql $v0, $zero, .Ljp7F061508 -/* 09606C 7F0614FC 8FB90108 */ lw $t9, 0x108($sp) -/* 096070 7F061500 AC400000 */ sw $zero, ($v0) -/* 096074 7F061504 8FB90108 */ lw $t9, 0x108($sp) -.Ljp7F061508: -/* 096078 7F061508 53200142 */ beql $t9, $zero, .Ljp7F061A14 -/* 09607C 7F06150C C6100260 */ lwc1 $f16, 0x260($s0) -/* 096080 7F061510 0C002918 */ jal randomGetNext -/* 096084 7F061514 00000000 */ nop -/* 096088 7F061518 44829000 */ mtc1 $v0, $f18 -/* 09608C 7F06151C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 096090 7F061520 04410004 */ bgez $v0, .Ljp7F061534 -/* 096094 7F061524 46809220 */ cvt.s.w $f8, $f18 -/* 096098 7F061528 44812000 */ mtc1 $at, $f4 -/* 09609C 7F06152C 00000000 */ nop -/* 0960A0 7F061530 46044200 */ add.s $f8, $f8, $f4 -.Ljp7F061534: -/* 0960A4 7F061534 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0960A8 7F061538 44818000 */ mtc1 $at, $f16 -/* 0960AC 7F06153C 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 0960B0 7F061540 44815000 */ mtc1 $at, $f10 -/* 0960B4 7F061544 46104182 */ mul.s $f6, $f8, $f16 -/* 0960B8 7F061548 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0960BC 7F06154C 44812000 */ mtc1 $at, $f4 -/* 0960C0 7F061550 8FAD00F8 */ lw $t5, 0xf8($sp) -/* 0960C4 7F061554 8FA400FC */ lw $a0, 0xfc($sp) -/* 0960C8 7F061558 24050001 */ li $a1, 1 -/* 0960CC 7F06155C 460A3482 */ mul.s $f18, $f6, $f10 -/* 0960D0 7F061560 46049200 */ add.s $f8, $f18, $f4 -/* 0960D4 7F061564 E7A80080 */ swc1 $f8, 0x80($sp) -/* 0960D8 7F061568 C5B00000 */ lwc1 $f16, ($t5) -/* 0960DC 7F06156C 0FC17975 */ jal bondwalkItemCheckBitflags -/* 0960E0 7F061570 E7B0007C */ swc1 $f16, 0x7c($sp) -/* 0960E4 7F061574 10400018 */ beqz $v0, .Ljp7F0615D8 -/* 0960E8 7F061578 8FA40108 */ lw $a0, 0x108($sp) -/* 0960EC 7F06157C 0C002918 */ jal randomGetNext -/* 0960F0 7F061580 00000000 */ nop -/* 0960F4 7F061584 44823000 */ mtc1 $v0, $f6 -/* 0960F8 7F061588 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0960FC 7F06158C 04410004 */ bgez $v0, .Ljp7F0615A0 -/* 096100 7F061590 468032A0 */ cvt.s.w $f10, $f6 -/* 096104 7F061594 44819000 */ mtc1 $at, $f18 -/* 096108 7F061598 00000000 */ nop -/* 09610C 7F06159C 46125280 */ add.s $f10, $f10, $f18 -.Ljp7F0615A0: -/* 096110 7F0615A0 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 096114 7F0615A4 44812000 */ mtc1 $at, $f4 -/* 096118 7F0615A8 3C018005 */ lui $at, %hi(D_80053E1C) # $at, 0x8005 -/* 09611C 7F0615AC C4303E4C */ lwc1 $f16, %lo(D_80053E1C)($at) -/* 096120 7F0615B0 46045202 */ mul.s $f8, $f10, $f4 -/* 096124 7F0615B4 27A50224 */ addiu $a1, $sp, 0x224 -/* 096128 7F0615B8 46104302 */ mul.s $f12, $f8, $f16 -/* 09612C 7F0615BC 0FC162EA */ jal matrix_4x4_set_rotation_around_z -/* 096130 7F0615C0 00000000 */ nop -/* 096134 7F0615C4 8FA40108 */ lw $a0, 0x108($sp) -/* 096138 7F0615C8 0FC163AE */ jal matrix_4x4_set_position -/* 09613C 7F0615CC 27A50224 */ addiu $a1, $sp, 0x224 -/* 096140 7F0615D0 10000004 */ b .Ljp7F0615E4 -/* 096144 7F0615D4 C7AC0080 */ lwc1 $f12, 0x80($sp) -.Ljp7F0615D8: -/* 096148 7F0615D8 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 09614C 7F0615DC 27A50224 */ addiu $a1, $sp, 0x224 -/* 096150 7F0615E0 C7AC0080 */ lwc1 $f12, 0x80($sp) -.Ljp7F0615E4: -/* 096154 7F0615E4 0FC163E7 */ jal matrix_scalar_multiply -/* 096158 7F0615E8 27A50224 */ addiu $a1, $sp, 0x224 -/* 09615C 7F0615EC C7AC007C */ lwc1 $f12, 0x7c($sp) -/* 096160 7F0615F0 0FC163CD */ jal matrix_column_3_scalar_multiply -/* 096164 7F0615F4 27A50224 */ addiu $a1, $sp, 0x224 -/* 096168 7F0615F8 27A40264 */ addiu $a0, $sp, 0x264 -/* 09616C 7F0615FC 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 096170 7F061600 27A50224 */ addiu $a1, $sp, 0x224 -/* 096174 7F061604 8FA502A4 */ lw $a1, 0x2a4($sp) -/* 096178 7F061608 27A40224 */ addiu $a0, $sp, 0x224 -/* 09617C 7F06160C 0FC16150 */ jal matrix_4x4_copy -/* 096180 7F061610 24A50040 */ addiu $a1, $a1, 0x40 -/* 096184 7F061614 C7A60254 */ lwc1 $f6, 0x254($sp) -/* 096188 7F061618 E60602E8 */ swc1 $f6, 0x2e8($s0) -/* 09618C 7F06161C C7B20258 */ lwc1 $f18, 0x258($sp) -/* 096190 7F061620 E61202EC */ swc1 $f18, 0x2ec($s0) -/* 096194 7F061624 C7AA025C */ lwc1 $f10, 0x25c($sp) -/* 096198 7F061628 0FC1E28D */ jal currentPlayerGetMatrix10D4 -/* 09619C 7F06162C E60A02F0 */ swc1 $f10, 0x2f0($s0) -/* 0961A0 7F061630 00402025 */ move $a0, $v0 -/* 0961A4 7F061634 0FC16265 */ jal mtx4TransformVecInPlace -/* 0961A8 7F061638 260502E8 */ addiu $a1, $s0, 0x2e8 -/* 0961AC 7F06163C C7A4025C */ lwc1 $f4, 0x25c($sp) -/* 0961B0 7F061640 820E000D */ lb $t6, 0xd($s0) -/* 0961B4 7F061644 46002207 */ neg.s $f8, $f4 -/* 0961B8 7F061648 11C000EE */ beqz $t6, .Ljp7F061A04 -/* 0961BC 7F06164C E60802F4 */ swc1 $f8, 0x2f4($s0) -/* 0961C0 7F061650 8FB8010C */ lw $t8, 0x10c($sp) -/* 0961C4 7F061654 240F0001 */ li $t7, 1 -/* 0961C8 7F061658 53000003 */ beql $t8, $zero, .Ljp7F061668 -/* 0961CC 7F06165C 8FB901A0 */ lw $t9, 0x1a0($sp) -/* 0961D0 7F061660 AF0F0000 */ sw $t7, ($t8) -/* 0961D4 7F061664 8FB901A0 */ lw $t9, 0x1a0($sp) -.Ljp7F061668: -/* 0961D8 7F061668 8F2D0008 */ lw $t5, 8($t9) -/* 0961DC 7F06166C 8DA30008 */ lw $v1, 8($t5) -/* 0961E0 7F061670 5060006D */ beql $v1, $zero, .Ljp7F061828 -/* 0961E4 7F061674 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 0961E8 7F061678 8C620004 */ lw $v0, 4($v1) -/* 0961EC 7F06167C C7A60224 */ lwc1 $f6, 0x224($sp) -/* 0961F0 7F061680 C7A40234 */ lwc1 $f4, 0x234($sp) -/* 0961F4 7F061684 C4500000 */ lwc1 $f16, ($v0) -/* 0961F8 7F061688 C44A0004 */ lwc1 $f10, 4($v0) -/* 0961FC 7F06168C 46068482 */ mul.s $f18, $f16, $f6 -/* 096200 7F061690 C4460008 */ lwc1 $f6, 8($v0) -/* 096204 7F061694 46045202 */ mul.s $f8, $f10, $f4 -/* 096208 7F061698 C7AA0244 */ lwc1 $f10, 0x244($sp) -/* 09620C 7F06169C 460A3102 */ mul.s $f4, $f6, $f10 -/* 096210 7F0616A0 46089400 */ add.s $f16, $f18, $f8 -/* 096214 7F0616A4 C7A80254 */ lwc1 $f8, 0x254($sp) -/* 096218 7F0616A8 46048480 */ add.s $f18, $f16, $f4 -/* 09621C 7F0616AC C7B00228 */ lwc1 $f16, 0x228($sp) -/* 096220 7F0616B0 46124180 */ add.s $f6, $f8, $f18 -/* 096224 7F0616B4 C7B20238 */ lwc1 $f18, 0x238($sp) -/* 096228 7F0616B8 E7A60084 */ swc1 $f6, 0x84($sp) -/* 09622C 7F0616BC C44A0000 */ lwc1 $f10, ($v0) -/* 096230 7F0616C0 C4480004 */ lwc1 $f8, 4($v0) -/* 096234 7F0616C4 46105102 */ mul.s $f4, $f10, $f16 -/* 096238 7F0616C8 C4500008 */ lwc1 $f16, 8($v0) -/* 09623C 7F0616CC 46124182 */ mul.s $f6, $f8, $f18 -/* 096240 7F0616D0 C7A80248 */ lwc1 $f8, 0x248($sp) -/* 096244 7F0616D4 46088482 */ mul.s $f18, $f16, $f8 -/* 096248 7F0616D8 46062280 */ add.s $f10, $f4, $f6 -/* 09624C 7F0616DC C7A60258 */ lwc1 $f6, 0x258($sp) -/* 096250 7F0616E0 46125100 */ add.s $f4, $f10, $f18 -/* 096254 7F0616E4 C7AA022C */ lwc1 $f10, 0x22c($sp) -/* 096258 7F0616E8 46043400 */ add.s $f16, $f6, $f4 -/* 09625C 7F0616EC C7A4023C */ lwc1 $f4, 0x23c($sp) -/* 096260 7F0616F0 E7B00088 */ swc1 $f16, 0x88($sp) -/* 096264 7F0616F4 C4480000 */ lwc1 $f8, ($v0) -/* 096268 7F0616F8 C4460004 */ lwc1 $f6, 4($v0) -/* 09626C 7F0616FC 460A4482 */ mul.s $f18, $f8, $f10 -/* 096270 7F061700 C44A0008 */ lwc1 $f10, 8($v0) -/* 096274 7F061704 46043402 */ mul.s $f16, $f6, $f4 -/* 096278 7F061708 C7A6024C */ lwc1 $f6, 0x24c($sp) -/* 09627C 7F06170C 46065102 */ mul.s $f4, $f10, $f6 -/* 096280 7F061710 46109200 */ add.s $f8, $f18, $f16 -/* 096284 7F061714 C7B0025C */ lwc1 $f16, 0x25c($sp) -/* 096288 7F061718 46044480 */ add.s $f18, $f8, $f4 -/* 09628C 7F06171C 46128280 */ add.s $f10, $f16, $f18 -/* 096290 7F061720 0C002918 */ jal randomGetNext -/* 096294 7F061724 E7AA008C */ swc1 $f10, 0x8c($sp) -/* 096298 7F061728 44823000 */ mtc1 $v0, $f6 -/* 09629C 7F06172C 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 0962A0 7F061730 04410005 */ bgez $v0, .Ljp7F061748 -/* 0962A4 7F061734 46803220 */ cvt.s.w $f8, $f6 -/* 0962A8 7F061738 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0962AC 7F06173C 44812000 */ mtc1 $at, $f4 -/* 0962B0 7F061740 00000000 */ nop -/* 0962B4 7F061744 46044200 */ add.s $f8, $f8, $f4 -.Ljp7F061748: -/* 0962B8 7F061748 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0962BC 7F06174C 44818000 */ mtc1 $at, $f16 -/* 0962C0 7F061750 3C018005 */ lui $at, %hi(D_80053E20) # $at, 0x8005 -/* 0962C4 7F061754 C42A3E50 */ lwc1 $f10, %lo(D_80053E20)($at) -/* 0962C8 7F061758 46104482 */ mul.s $f18, $f8, $f16 -/* 0962CC 7F06175C C7B00088 */ lwc1 $f16, 0x88($sp) -/* 0962D0 7F061760 C7A40084 */ lwc1 $f4, 0x84($sp) -/* 0962D4 7F061764 46002207 */ neg.s $f8, $f4 -/* 0962D8 7F061768 460A9182 */ mul.s $f6, $f18, $f10 -/* 0962DC 7F06176C C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 0962E0 7F061770 46008487 */ neg.s $f18, $f16 -/* 0962E4 7F061774 44064000 */ mfc1 $a2, $f8 -/* 0962E8 7F061778 44079000 */ mfc1 $a3, $f18 -/* 0962EC 7F06177C 44053000 */ mfc1 $a1, $f6 -/* 0962F0 7F061780 46005187 */ neg.s $f6, $f10 -/* 0962F4 7F061784 0FC16882 */ jal matrix_4x4_align -/* 0962F8 7F061788 E7A60010 */ swc1 $f6, 0x10($sp) -/* 0962FC 7F06178C 3C018005 */ lui $at, %hi(D_80053E24) # $at, 0x8005 -/* 096300 7F061790 C4243E54 */ lwc1 $f4, %lo(D_80053E24)($at) -/* 096304 7F061794 C7A80080 */ lwc1 $f8, 0x80($sp) -/* 096308 7F061798 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 09630C 7F06179C 46082302 */ mul.s $f12, $f4, $f8 -/* 096310 7F0617A0 0FC163E7 */ jal matrix_scalar_multiply -/* 096314 7F0617A4 00000000 */ nop -/* 096318 7F0617A8 C7B00194 */ lwc1 $f16, 0x194($sp) -/* 09631C 7F0617AC C61201C8 */ lwc1 $f18, 0x1c8($s0) -/* 096320 7F0617B0 C7A60198 */ lwc1 $f6, 0x198($sp) -/* 096324 7F0617B4 C60401CC */ lwc1 $f4, 0x1cc($s0) -/* 096328 7F0617B8 46128281 */ sub.s $f10, $f16, $f18 -/* 09632C 7F0617BC C61201D0 */ lwc1 $f18, 0x1d0($s0) -/* 096330 7F0617C0 C7B0019C */ lwc1 $f16, 0x19c($sp) -/* 096334 7F0617C4 46043201 */ sub.s $f8, $f6, $f4 -/* 096338 7F0617C8 44065000 */ mfc1 $a2, $f10 -/* 09633C 7F0617CC 27A40114 */ addiu $a0, $sp, 0x114 -/* 096340 7F0617D0 46128281 */ sub.s $f10, $f16, $f18 -/* 096344 7F0617D4 44074000 */ mfc1 $a3, $f8 -/* 096348 7F0617D8 24050000 */ li $a1, 0 -/* 09634C 7F0617DC 0FC1681E */ jal matrix_4x4_set_rotation_axis_angle -/* 096350 7F0617E0 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 096354 7F0617E4 27A40114 */ addiu $a0, $sp, 0x114 -/* 096358 7F0617E8 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 09635C 7F0617EC 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 096360 7F0617F0 C7AC007C */ lwc1 $f12, 0x7c($sp) -/* 096364 7F0617F4 0FC16428 */ jal matrix_row_3_scalar_multiply -/* 096368 7F0617F8 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 09636C 7F0617FC 27A40154 */ addiu $a0, $sp, 0x154 -/* 096370 7F061800 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 096374 7F061804 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 096378 7F061808 27A40084 */ addiu $a0, $sp, 0x84 -/* 09637C 7F06180C 0FC163AE */ jal matrix_4x4_set_position -/* 096380 7F061810 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 096384 7F061814 8FA502A4 */ lw $a1, 0x2a4($sp) -/* 096388 7F061818 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 09638C 7F06181C 0FC16150 */ jal matrix_4x4_copy -/* 096390 7F061820 24A50080 */ addiu $a1, $a1, 0x80 -/* 096394 7F061824 8FAF01A0 */ lw $t7, 0x1a0($sp) -.Ljp7F061828: -/* 096398 7F061828 3C0E8004 */ lui $t6, %hi(skeleton_gun_kf7) # $t6, 0x8004 -/* 09639C 7F06182C 25CEC7DC */ addiu $t6, %lo(skeleton_gun_kf7) # addiu $t6, $t6, -0x3824 -/* 0963A0 7F061830 8DF80004 */ lw $t8, 4($t7) -/* 0963A4 7F061834 55D80074 */ bnel $t6, $t8, .Ljp7F061A08 -/* 0963A8 7F061838 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 0963AC 7F06183C 8DF90008 */ lw $t9, 8($t7) -/* 0963B0 7F061840 8F230010 */ lw $v1, 0x10($t9) -/* 0963B4 7F061844 50600070 */ beql $v1, $zero, .Ljp7F061A08 -/* 0963B8 7F061848 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 0963BC 7F06184C 8C620004 */ lw $v0, 4($v1) -/* 0963C0 7F061850 C7A40224 */ lwc1 $f4, 0x224($sp) -/* 0963C4 7F061854 C7B20234 */ lwc1 $f18, 0x234($sp) -/* 0963C8 7F061858 C4460000 */ lwc1 $f6, ($v0) -/* 0963CC 7F06185C C4500004 */ lwc1 $f16, 4($v0) -/* 0963D0 7F061860 3C018005 */ lui $at, %hi(D_80053E28) # $at, 0x8005 -/* 0963D4 7F061864 46043202 */ mul.s $f8, $f6, $f4 -/* 0963D8 7F061868 C4440008 */ lwc1 $f4, 8($v0) -/* 0963DC 7F06186C 8FAD02A4 */ lw $t5, 0x2a4($sp) -/* 0963E0 7F061870 46128282 */ mul.s $f10, $f16, $f18 -/* 0963E4 7F061874 C7B00244 */ lwc1 $f16, 0x244($sp) -/* 0963E8 7F061878 25AE00C0 */ addiu $t6, $t5, 0xc0 -/* 0963EC 7F06187C 46102482 */ mul.s $f18, $f4, $f16 -/* 0963F0 7F061880 460A4180 */ add.s $f6, $f8, $f10 -/* 0963F4 7F061884 C7AA0254 */ lwc1 $f10, 0x254($sp) -/* 0963F8 7F061888 46123200 */ add.s $f8, $f6, $f18 -/* 0963FC 7F06188C C7A60228 */ lwc1 $f6, 0x228($sp) -/* 096400 7F061890 46085100 */ add.s $f4, $f10, $f8 -/* 096404 7F061894 C7A80238 */ lwc1 $f8, 0x238($sp) -/* 096408 7F061898 E7A40084 */ swc1 $f4, 0x84($sp) -/* 09640C 7F06189C C4500000 */ lwc1 $f16, ($v0) -/* 096410 7F0618A0 C44A0004 */ lwc1 $f10, 4($v0) -/* 096414 7F0618A4 46068482 */ mul.s $f18, $f16, $f6 -/* 096418 7F0618A8 C4460008 */ lwc1 $f6, 8($v0) -/* 09641C 7F0618AC 46085102 */ mul.s $f4, $f10, $f8 -/* 096420 7F0618B0 C7AA0248 */ lwc1 $f10, 0x248($sp) -/* 096424 7F0618B4 460A3202 */ mul.s $f8, $f6, $f10 -/* 096428 7F0618B8 46049400 */ add.s $f16, $f18, $f4 -/* 09642C 7F0618BC C7A40258 */ lwc1 $f4, 0x258($sp) -/* 096430 7F0618C0 46088480 */ add.s $f18, $f16, $f8 -/* 096434 7F0618C4 C7B0022C */ lwc1 $f16, 0x22c($sp) -/* 096438 7F0618C8 46122180 */ add.s $f6, $f4, $f18 -/* 09643C 7F0618CC C7B2023C */ lwc1 $f18, 0x23c($sp) -/* 096440 7F0618D0 E7A60088 */ swc1 $f6, 0x88($sp) -/* 096444 7F0618D4 C44A0000 */ lwc1 $f10, ($v0) -/* 096448 7F0618D8 C4440004 */ lwc1 $f4, 4($v0) -/* 09644C 7F0618DC 46105202 */ mul.s $f8, $f10, $f16 -/* 096450 7F0618E0 C4500008 */ lwc1 $f16, 8($v0) -/* 096454 7F0618E4 AFAE0040 */ sw $t6, 0x40($sp) -/* 096458 7F0618E8 46122182 */ mul.s $f6, $f4, $f18 -/* 09645C 7F0618EC C7A4024C */ lwc1 $f4, 0x24c($sp) -/* 096460 7F0618F0 46048482 */ mul.s $f18, $f16, $f4 -/* 096464 7F0618F4 C4243E58 */ lwc1 $f4, %lo(D_80053E28)($at) -/* 096468 7F0618F8 46064280 */ add.s $f10, $f8, $f6 -/* 09646C 7F0618FC C7A6025C */ lwc1 $f6, 0x25c($sp) -/* 096470 7F061900 46125200 */ add.s $f8, $f10, $f18 -/* 096474 7F061904 C7AA0080 */ lwc1 $f10, 0x80($sp) -/* 096478 7F061908 460A2482 */ mul.s $f18, $f4, $f10 -/* 09647C 7F06190C 46083400 */ add.s $f16, $f6, $f8 -/* 096480 7F061910 E7B0008C */ swc1 $f16, 0x8c($sp) -/* 096484 7F061914 0C002918 */ jal randomGetNext -/* 096488 7F061918 E7B20038 */ swc1 $f18, 0x38($sp) -/* 09648C 7F06191C 44823000 */ mtc1 $v0, $f6 -/* 096490 7F061920 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 096494 7F061924 04410005 */ bgez $v0, .Ljp7F06193C -/* 096498 7F061928 46803220 */ cvt.s.w $f8, $f6 -/* 09649C 7F06192C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0964A0 7F061930 44818000 */ mtc1 $at, $f16 -/* 0964A4 7F061934 00000000 */ nop -/* 0964A8 7F061938 46104200 */ add.s $f8, $f8, $f16 -.Ljp7F06193C: -/* 0964AC 7F06193C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0964B0 7F061940 44812000 */ mtc1 $at, $f4 -/* 0964B4 7F061944 3C018005 */ lui $at, %hi(D_80053E2C) # $at, 0x8005 -/* 0964B8 7F061948 C4323E5C */ lwc1 $f18, %lo(D_80053E2C)($at) -/* 0964BC 7F06194C 46044282 */ mul.s $f10, $f8, $f4 -/* 0964C0 7F061950 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 0964C4 7F061954 C7B00084 */ lwc1 $f16, 0x84($sp) -/* 0964C8 7F061958 46008207 */ neg.s $f8, $f16 -/* 0964CC 7F06195C 46125182 */ mul.s $f6, $f10, $f18 -/* 0964D0 7F061960 C7B2008C */ lwc1 $f18, 0x8c($sp) -/* 0964D4 7F061964 46002287 */ neg.s $f10, $f4 -/* 0964D8 7F061968 44064000 */ mfc1 $a2, $f8 -/* 0964DC 7F06196C 44075000 */ mfc1 $a3, $f10 -/* 0964E0 7F061970 44053000 */ mfc1 $a1, $f6 -/* 0964E4 7F061974 46009187 */ neg.s $f6, $f18 -/* 0964E8 7F061978 0FC16882 */ jal matrix_4x4_align -/* 0964EC 7F06197C E7A60010 */ swc1 $f6, 0x10($sp) -/* 0964F0 7F061980 C7AC0038 */ lwc1 $f12, 0x38($sp) -/* 0964F4 7F061984 0FC163E7 */ jal matrix_scalar_multiply -/* 0964F8 7F061988 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 0964FC 7F06198C C7B00194 */ lwc1 $f16, 0x194($sp) -/* 096500 7F061990 C60801C8 */ lwc1 $f8, 0x1c8($s0) -/* 096504 7F061994 C7AA0198 */ lwc1 $f10, 0x198($sp) -/* 096508 7F061998 C61201CC */ lwc1 $f18, 0x1cc($s0) -/* 09650C 7F06199C 46088101 */ sub.s $f4, $f16, $f8 -/* 096510 7F0619A0 C60801D0 */ lwc1 $f8, 0x1d0($s0) -/* 096514 7F0619A4 C7B0019C */ lwc1 $f16, 0x19c($sp) -/* 096518 7F0619A8 46125181 */ sub.s $f6, $f10, $f18 -/* 09651C 7F0619AC 44062000 */ mfc1 $a2, $f4 -/* 096520 7F0619B0 27A40114 */ addiu $a0, $sp, 0x114 -/* 096524 7F0619B4 46088101 */ sub.s $f4, $f16, $f8 -/* 096528 7F0619B8 44073000 */ mfc1 $a3, $f6 -/* 09652C 7F0619BC 24050000 */ li $a1, 0 -/* 096530 7F0619C0 0FC1681E */ jal matrix_4x4_set_rotation_axis_angle -/* 096534 7F0619C4 E7A40010 */ swc1 $f4, 0x10($sp) -/* 096538 7F0619C8 27A40114 */ addiu $a0, $sp, 0x114 -/* 09653C 7F0619CC 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 096540 7F0619D0 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 096544 7F0619D4 C7AC007C */ lwc1 $f12, 0x7c($sp) -/* 096548 7F0619D8 0FC16428 */ jal matrix_row_3_scalar_multiply -/* 09654C 7F0619DC 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 096550 7F0619E0 27A40154 */ addiu $a0, $sp, 0x154 -/* 096554 7F0619E4 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 096558 7F0619E8 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 09655C 7F0619EC 27A40084 */ addiu $a0, $sp, 0x84 -/* 096560 7F0619F0 0FC163AE */ jal matrix_4x4_set_position -/* 096564 7F0619F4 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 096568 7F0619F8 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 09656C 7F0619FC 0FC16150 */ jal matrix_4x4_copy -/* 096570 7F061A00 8FA50040 */ lw $a1, 0x40($sp) -.Ljp7F061A04: -/* 096574 7F061A04 8FB801A0 */ lw $t8, 0x1a0($sp) -.Ljp7F061A08: -/* 096578 7F061A08 1000000C */ b .Ljp7F061A3C -/* 09657C 7F061A0C 8F020008 */ lw $v0, 8($t8) -/* 096580 7F061A10 C6100260 */ lwc1 $f16, 0x260($s0) -.Ljp7F061A14: -/* 096584 7F061A14 C60A0298 */ lwc1 $f10, 0x298($s0) -/* 096588 7F061A18 C612029C */ lwc1 $f18, 0x29c($s0) -/* 09658C 7F061A1C C60602A0 */ lwc1 $f6, 0x2a0($s0) -/* 096590 7F061A20 46008207 */ neg.s $f8, $f16 -/* 096594 7F061A24 E60A02E8 */ swc1 $f10, 0x2e8($s0) -/* 096598 7F061A28 E60802F4 */ swc1 $f8, 0x2f4($s0) -/* 09659C 7F061A2C E61202EC */ swc1 $f18, 0x2ec($s0) -/* 0965A0 7F061A30 E60602F0 */ swc1 $f6, 0x2f0($s0) -/* 0965A4 7F061A34 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 0965A8 7F061A38 8DE20008 */ lw $v0, 8($t7) -.Ljp7F061A3C: -/* 0965AC 7F061A3C 8C440018 */ lw $a0, 0x18($v0) -/* 0965B0 7F061A40 50800043 */ beql $a0, $zero, .Ljp7F061B50 -/* 0965B4 7F061A44 8FAD01A0 */ lw $t5, 0x1a0($sp) -/* 0965B8 7F061A48 8C990004 */ lw $t9, 4($a0) -/* 0965BC 7F061A4C 00002825 */ move $a1, $zero -/* 0965C0 7F061A50 0FC1B2D8 */ jal modelFindNodeMtxIndex -/* 0965C4 7F061A54 AFB90070 */ sw $t9, 0x70($sp) -/* 0965C8 7F061A58 AFA2006C */ sw $v0, 0x6c($sp) -/* 0965CC 7F061A5C 8E050010 */ lw $a1, 0x10($s0) -/* 0965D0 7F061A60 0FC17AF5 */ jal sub_GAME_7F05E6B4 -/* 0965D4 7F061A64 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0965D8 7F061A68 8FAD01A0 */ lw $t5, 0x1a0($sp) -/* 0965DC 7F061A6C 8FA40070 */ lw $a0, 0x70($sp) -/* 0965E0 7F061A70 27A601A4 */ addiu $a2, $sp, 0x1a4 -/* 0965E4 7F061A74 85AE000C */ lh $t6, 0xc($t5) -/* 0965E8 7F061A78 29C1001D */ slti $at, $t6, 0x1d -/* 0965EC 7F061A7C 1420002A */ bnez $at, .Ljp7F061B28 -/* 0965F0 7F061A80 00000000 */ nop -/* 0965F4 7F061A84 8DB80008 */ lw $t8, 8($t5) -/* 0965F8 7F061A88 8F030070 */ lw $v1, 0x70($t8) -/* 0965FC 7F061A8C 10600026 */ beqz $v1, .Ljp7F061B28 -/* 096600 7F061A90 00000000 */ nop -/* 096604 7F061A94 8C620004 */ lw $v0, 4($v1) -/* 096608 7F061A98 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 09660C 7F061A9C 0FC17AE1 */ jal get_value_if_watch_is_on_hand_or_not -/* 096610 7F061AA0 AFA20068 */ sw $v0, 0x68($sp) -/* 096614 7F061AA4 3C018005 */ lui $at, %hi(D_80053E30) # $at, 0x8005 -/* 096618 7F061AA8 C42A3E60 */ lwc1 $f10, %lo(D_80053E30)($at) -/* 09661C 7F061AAC C6040214 */ lwc1 $f4, 0x214($s0) -/* 096620 7F061AB0 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 096624 7F061AB4 44818000 */ mtc1 $at, $f16 -/* 096628 7F061AB8 460A2480 */ add.s $f18, $f4, $f10 -/* 09662C 7F061ABC 3C018005 */ lui $at, %hi(D_80053E34) # $at, 0x8005 -/* 096630 7F061AC0 C4243E64 */ lwc1 $f4, %lo(D_80053E34)($at) -/* 096634 7F061AC4 8FA20068 */ lw $v0, 0x68($sp) -/* 096638 7F061AC8 46009181 */ sub.s $f6, $f18, $f0 -/* 09663C 7F061ACC 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 096640 7F061AD0 C4520000 */ lwc1 $f18, ($v0) -/* 096644 7F061AD4 46103202 */ mul.s $f8, $f6, $f16 -/* 096648 7F061AD8 C446000C */ lwc1 $f6, 0xc($v0) -/* 09664C 7F061ADC 46069401 */ sub.s $f16, $f18, $f6 -/* 096650 7F061AE0 C4460014 */ lwc1 $f6, 0x14($v0) -/* 096654 7F061AE4 C4520008 */ lwc1 $f18, 8($v0) -/* 096658 7F061AE8 46044283 */ div.s $f10, $f8, $f4 -/* 09665C 7F061AEC C4440010 */ lwc1 $f4, 0x10($v0) -/* 096660 7F061AF0 C4480004 */ lwc1 $f8, 4($v0) -/* 096664 7F061AF4 44068000 */ mfc1 $a2, $f16 -/* 096668 7F061AF8 46069401 */ sub.s $f16, $f18, $f6 -/* 09666C 7F061AFC E7B00010 */ swc1 $f16, 0x10($sp) -/* 096670 7F061B00 44055000 */ mfc1 $a1, $f10 -/* 096674 7F061B04 46044281 */ sub.s $f10, $f8, $f4 -/* 096678 7F061B08 44075000 */ mfc1 $a3, $f10 -/* 09667C 7F061B0C 0C005DD8 */ jal guRotateF -/* 096680 7F061B10 00000000 */ nop -/* 096684 7F061B14 8FA40070 */ lw $a0, 0x70($sp) -/* 096688 7F061B18 0FC163AE */ jal matrix_4x4_set_position -/* 09668C 7F061B1C 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 096690 7F061B20 10000004 */ b .Ljp7F061B34 -/* 096694 7F061B24 8FAF006C */ lw $t7, 0x6c($sp) -.Ljp7F061B28: -/* 096698 7F061B28 0FC1627C */ jal matrix_4x4_set_position_and_rotation_around_y -/* 09669C 7F061B2C 8E050214 */ lw $a1, 0x214($s0) -/* 0966A0 7F061B30 8FAF006C */ lw $t7, 0x6c($sp) -.Ljp7F061B34: -/* 0966A4 7F061B34 8FAE02A4 */ lw $t6, 0x2a4($sp) -/* 0966A8 7F061B38 27A40264 */ addiu $a0, $sp, 0x264 -/* 0966AC 7F061B3C 000FC980 */ sll $t9, $t7, 6 -/* 0966B0 7F061B40 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 0966B4 7F061B44 0FC161AB */ jal matrix_4x4_multiply_homogeneous -/* 0966B8 7F061B48 032E3021 */ addu $a2, $t9, $t6 -/* 0966BC 7F061B4C 8FAD01A0 */ lw $t5, 0x1a0($sp) -.Ljp7F061B50: -/* 0966C0 7F061B50 8FA40044 */ lw $a0, 0x44($sp) -/* 0966C4 7F061B54 85B8000C */ lh $t8, 0xc($t5) -/* 0966C8 7F061B58 01A02825 */ move $a1, $t5 -/* 0966CC 7F061B5C 2B01001E */ slti $at, $t8, 0x1e -/* 0966D0 7F061B60 54200004 */ bnezl $at, .Ljp7F061B74 -/* 0966D4 7F061B64 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 0966D8 7F061B68 0FC220B8 */ jal seems_to_load_cuff_microcode -/* 0966DC 7F061B6C 2406001D */ li $a2, 29 -/* 0966E0 7F061B70 8FAF01A0 */ lw $t7, 0x1a0($sp) -.Ljp7F061B74: -/* 0966E4 7F061B74 8DF90008 */ lw $t9, 8($t7) -/* 0966E8 7F061B78 8F24001C */ lw $a0, 0x1c($t9) -/* 0966EC 7F061B7C 50800017 */ beql $a0, $zero, .Ljp7F061BDC -/* 0966F0 7F061B80 8FB901A0 */ lw $t9, 0x1a0($sp) -/* 0966F4 7F061B84 8C8E0004 */ lw $t6, 4($a0) -/* 0966F8 7F061B88 00002825 */ move $a1, $zero -/* 0966FC 7F061B8C 0FC1B2D8 */ jal modelFindNodeMtxIndex -/* 096700 7F061B90 AFAE0064 */ sw $t6, 0x64($sp) -/* 096704 7F061B94 AFA20060 */ sw $v0, 0x60($sp) -/* 096708 7F061B98 0FC17B57 */ jal sub_GAME_7F05E83C -/* 09670C 7F061B9C 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 096710 7F061BA0 8FA40064 */ lw $a0, 0x64($sp) -/* 096714 7F061BA4 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 096718 7F061BA8 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 09671C 7F061BAC C7A801DC */ lwc1 $f8, 0x1dc($sp) -/* 096720 7F061BB0 C6040218 */ lwc1 $f4, 0x218($s0) -/* 096724 7F061BB4 8FB80060 */ lw $t8, 0x60($sp) -/* 096728 7F061BB8 8FAF02A4 */ lw $t7, 0x2a4($sp) -/* 09672C 7F061BBC 46044281 */ sub.s $f10, $f8, $f4 -/* 096730 7F061BC0 00186980 */ sll $t5, $t8, 6 -/* 096734 7F061BC4 27A40264 */ addiu $a0, $sp, 0x264 -/* 096738 7F061BC8 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 09673C 7F061BCC E7AA01DC */ swc1 $f10, 0x1dc($sp) -/* 096740 7F061BD0 0FC1617A */ jal matrix_4x4_multiply -/* 096744 7F061BD4 01AF3021 */ addu $a2, $t5, $t7 -/* 096748 7F061BD8 8FB901A0 */ lw $t9, 0x1a0($sp) -.Ljp7F061BDC: -/* 09674C 7F061BDC 00001825 */ move $v1, $zero -/* 096750 7F061BE0 00003025 */ move $a2, $zero -/* 096754 7F061BE4 872E000C */ lh $t6, 0xc($t9) -/* 096758 7F061BE8 24070005 */ li $a3, 5 -/* 09675C 7F061BEC 29C10013 */ slti $at, $t6, 0x13 -/* 096760 7F061BF0 1420002A */ bnez $at, .Ljp7F061C9C -/* 096764 7F061BF4 00000000 */ nop -.Ljp7F061BF8: -/* 096768 7F061BF8 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 09676C 7F061BFC 8FA40044 */ lw $a0, 0x44($sp) -/* 096770 7F061C00 8F0D0008 */ lw $t5, 8($t8) -/* 096774 7F061C04 01A67821 */ addu $t7, $t5, $a2 -/* 096778 7F061C08 8DE50048 */ lw $a1, 0x48($t7) -/* 09677C 7F061C0C 50A0000E */ beql $a1, $zero, .Ljp7F061C48 -/* 096780 7F061C10 8FAD01A0 */ lw $t5, 0x1a0($sp) -/* 096784 7F061C14 AFA3005C */ sw $v1, 0x5c($sp) -/* 096788 7F061C18 0FC1B363 */ jal modelGetNodeRwData -/* 09678C 7F061C1C AFA60040 */ sw $a2, 0x40($sp) -/* 096790 7F061C20 8FA3005C */ lw $v1, 0x5c($sp) -/* 096794 7F061C24 8FA60040 */ lw $a2, 0x40($sp) -/* 096798 7F061C28 10400006 */ beqz $v0, .Ljp7F061C44 -/* 09679C 7F061C2C 24070005 */ li $a3, 5 -/* 0967A0 7F061C30 8E190034 */ lw $t9, 0x34($s0) -/* 0967A4 7F061C34 00E37023 */ subu $t6, $a3, $v1 -/* 0967A8 7F061C38 032EC02A */ slt $t8, $t9, $t6 -/* 0967AC 7F061C3C 3B180001 */ xori $t8, $t8, 1 -/* 0967B0 7F061C40 AC580000 */ sw $t8, ($v0) -.Ljp7F061C44: -/* 0967B4 7F061C44 8FAD01A0 */ lw $t5, 0x1a0($sp) -.Ljp7F061C48: -/* 0967B8 7F061C48 8FA40044 */ lw $a0, 0x44($sp) -/* 0967BC 7F061C4C 8DAF0008 */ lw $t7, 8($t5) -/* 0967C0 7F061C50 01E6C821 */ addu $t9, $t7, $a2 -/* 0967C4 7F061C54 8F25005C */ lw $a1, 0x5c($t9) -/* 0967C8 7F061C58 50A0000E */ beql $a1, $zero, .Ljp7F061C94 -/* 0967CC 7F061C5C 24630001 */ addiu $v1, $v1, 1 -/* 0967D0 7F061C60 AFA3005C */ sw $v1, 0x5c($sp) -/* 0967D4 7F061C64 0FC1B363 */ jal modelGetNodeRwData -/* 0967D8 7F061C68 AFA60040 */ sw $a2, 0x40($sp) -/* 0967DC 7F061C6C 8FA3005C */ lw $v1, 0x5c($sp) -/* 0967E0 7F061C70 8FA60040 */ lw $a2, 0x40($sp) -/* 0967E4 7F061C74 10400006 */ beqz $v0, .Ljp7F061C90 -/* 0967E8 7F061C78 24070005 */ li $a3, 5 -/* 0967EC 7F061C7C 8E0E0034 */ lw $t6, 0x34($s0) -/* 0967F0 7F061C80 00E3C023 */ subu $t8, $a3, $v1 -/* 0967F4 7F061C84 01D8682A */ slt $t5, $t6, $t8 -/* 0967F8 7F061C88 39AD0001 */ xori $t5, $t5, 1 -/* 0967FC 7F061C8C AC4D0000 */ sw $t5, ($v0) -.Ljp7F061C90: -/* 096800 7F061C90 24630001 */ addiu $v1, $v1, 1 -.Ljp7F061C94: -/* 096804 7F061C94 1467FFD8 */ bne $v1, $a3, .Ljp7F061BF8 -/* 096808 7F061C98 24C60004 */ addiu $a2, $a2, 4 -.Ljp7F061C9C: -/* 09680C 7F061C9C 0FC1BD6D */ jal modelUpdateNodeRelations -/* 096810 7F061CA0 8FA40044 */ lw $a0, 0x44($sp) -/* 096814 7F061CA4 820F000C */ lb $t7, 0xc($s0) -/* 096818 7F061CA8 8FB900FC */ lw $t9, 0xfc($sp) -/* 09681C 7F061CAC 11E00014 */ beqz $t7, weapon_bullet_type_shotgun_mine -/* 096820 7F061CB0 272EFFFC */ addiu $t6, $t9, -4 -/* 096824 7F061CB4 2DC10014 */ sltiu $at, $t6, 0x14 -/* 096828 7F061CB8 10200011 */ beqz $at, weapon_bullet_type_shotgun_mine -/* 09682C 7F061CBC 000E7080 */ sll $t6, $t6, 2 -/* 096830 7F061CC0 3C018005 */ lui $at, %hi(jpt_weapon_bullet_type) -/* 096834 7F061CC4 002E0821 */ addu $at, $at, $t6 -/* 096838 7F061CC8 8C2E3E68 */ lw $t6, %lo(jpt_weapon_bullet_type)($at) -/* 09683C 7F061CCC 01C00008 */ jr $t6 -/* 096840 7F061CD0 00000000 */ nop -weapon_bullet_type_pistol: -/* 096844 7F061CD4 0FC18848 */ jal sub_GAME_7F061BF4 -/* 096848 7F061CD8 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 09684C 7F061CDC 8E180030 */ lw $t8, 0x30($s0) -/* 096850 7F061CE0 270D0001 */ addiu $t5, $t8, 1 -/* 096854 7F061CE4 10000006 */ b weapon_bullet_type_shotgun_mine -/* 096858 7F061CE8 AE0D0030 */ sw $t5, 0x30($s0) -weapon_bullet_type_none: -/* 09685C 7F061CEC 8E0F0030 */ lw $t7, 0x30($s0) -/* 096860 7F061CF0 25F90001 */ addiu $t9, $t7, 1 -/* 096864 7F061CF4 AE190030 */ sw $t9, 0x30($s0) -/* 096868 7F061CF8 0FC18848 */ jal sub_GAME_7F061BF4 -/* 09686C 7F061CFC 8FA402A8 */ lw $a0, 0x2a8($sp) -weapon_bullet_type_shotgun_mine: -/* 096870 7F061D00 8FAE00FC */ lw $t6, 0xfc($sp) -.Ljp7F061D04: -/* 096874 7F061D04 24010019 */ li $at, 25 -/* 096878 7F061D08 55C10004 */ bnel $t6, $at, .Ljp7F061D1C -/* 09687C 7F061D0C 8218000C */ lb $t8, 0xc($s0) -/* 096880 7F061D10 0FC17F92 */ jal sub_GAME_7F05F928 -/* 096884 7F061D14 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 096888 7F061D18 8218000C */ lb $t8, 0xc($s0) -.Ljp7F061D1C: -/* 09688C 7F061D1C 3C048008 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8008 -/* 096890 7F061D20 53000046 */ beql $t8, $zero, .Ljp7F061E3C -/* 096894 7F061D24 8FBF0034 */ lw $ra, 0x34($sp) -/* 096898 7F061D28 0FC22793 */ jal bondviewGetPlayerStanHeight -/* 09689C 7F061D2C 8C84A120 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0968A0 7F061D30 44050000 */ mfc1 $a1, $f0 -/* 0968A4 7F061D34 0FC1A2B8 */ jal sub_GAME_7F068508 -/* 0968A8 7F061D38 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0968AC 7F061D3C 8FAD00FC */ lw $t5, 0xfc($sp) -/* 0968B0 7F061D40 24010018 */ li $at, 24 -/* 0968B4 7F061D44 8FAF00FC */ lw $t7, 0xfc($sp) -/* 0968B8 7F061D48 55A10006 */ bnel $t5, $at, .Ljp7F061D64 -/* 0968BC 7F061D4C 2401001A */ li $at, 26 -/* 0968C0 7F061D50 0FC17F17 */ jal sub_GAME_7F05F73C -/* 0968C4 7F061D54 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0968C8 7F061D58 10000038 */ b .Ljp7F061E3C -/* 0968CC 7F061D5C 8FBF0034 */ lw $ra, 0x34($sp) -/* 0968D0 7F061D60 2401001A */ li $at, 26 -.Ljp7F061D64: -/* 0968D4 7F061D64 15E10005 */ bne $t7, $at, .Ljp7F061D7C -/* 0968D8 7F061D68 8FB900FC */ lw $t9, 0xfc($sp) -/* 0968DC 7F061D6C 0FC17CD1 */ jal generate_player_thrown_grenade -/* 0968E0 7F061D70 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0968E4 7F061D74 10000031 */ b .Ljp7F061E3C -/* 0968E8 7F061D78 8FBF0034 */ lw $ra, 0x34($sp) -.Ljp7F061D7C: -/* 0968EC 7F061D7C 24010019 */ li $at, 25 -/* 0968F0 7F061D80 17210005 */ bne $t9, $at, .Ljp7F061D98 -/* 0968F4 7F061D84 8FAE00FC */ lw $t6, 0xfc($sp) -/* 0968F8 7F061D88 0FC18021 */ jal gunFireTankShell -/* 0968FC 7F061D8C 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 096900 7F061D90 1000002A */ b .Ljp7F061E3C -/* 096904 7F061D94 8FBF0034 */ lw $ra, 0x34($sp) -.Ljp7F061D98: -/* 096908 7F061D98 24010003 */ li $at, 3 -/* 09690C 7F061D9C 15C10005 */ bne $t6, $at, .Ljp7F061DB4 -/* 096910 7F061DA0 8FB800FC */ lw $t8, 0xfc($sp) -/* 096914 7F061DA4 0FC17D6F */ jal generate_player_thrown_knife -/* 096918 7F061DA8 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 09691C 7F061DAC 10000023 */ b .Ljp7F061E3C -/* 096920 7F061DB0 8FBF0034 */ lw $ra, 0x34($sp) -.Ljp7F061DB4: -/* 096924 7F061DB4 2401001D */ li $at, 29 -/* 096928 7F061DB8 1301000F */ beq $t8, $at, .Ljp7F061DF8 -/* 09692C 7F061DBC 2401001C */ li $at, 28 -/* 096930 7F061DC0 1301000D */ beq $t8, $at, .Ljp7F061DF8 -/* 096934 7F061DC4 2401001B */ li $at, 27 -/* 096938 7F061DC8 1301000B */ beq $t8, $at, .Ljp7F061DF8 -/* 09693C 7F061DCC 24010021 */ li $at, 33 -/* 096940 7F061DD0 13010009 */ beq $t8, $at, .Ljp7F061DF8 -/* 096944 7F061DD4 2401002F */ li $at, 47 -/* 096948 7F061DD8 13010007 */ beq $t8, $at, .Ljp7F061DF8 -/* 09694C 7F061DDC 24010030 */ li $at, 48 -/* 096950 7F061DE0 13010005 */ beq $t8, $at, .Ljp7F061DF8 -/* 096954 7F061DE4 2401003D */ li $at, 61 -/* 096958 7F061DE8 13010003 */ beq $t8, $at, .Ljp7F061DF8 -/* 09695C 7F061DEC 24010022 */ li $at, 34 -/* 096960 7F061DF0 17010005 */ bne $t8, $at, .Ljp7F061E08 -/* 096964 7F061DF4 8FAD00FC */ lw $t5, 0xfc($sp) -.Ljp7F061DF8: -/* 096968 7F061DF8 0FC17E1E */ jal generate_player_thrown_object -/* 09696C 7F061DFC 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 096970 7F061E00 1000000E */ b .Ljp7F061E3C -/* 096974 7F061E04 8FBF0034 */ lw $ra, 0x34($sp) -.Ljp7F061E08: -/* 096978 7F061E08 24010023 */ li $at, 35 -/* 09697C 7F061E0C 15A10005 */ bne $t5, $at, .Ljp7F061E24 -/* 096980 7F061E10 8FAF00FC */ lw $t7, 0xfc($sp) -/* 096984 7F061E14 0FC17F17 */ jal sub_GAME_7F05F73C -/* 096988 7F061E18 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 09698C 7F061E1C 10000007 */ b .Ljp7F061E3C -/* 096990 7F061E20 8FBF0034 */ lw $ra, 0x34($sp) -.Ljp7F061E24: -/* 096994 7F061E24 24010024 */ li $at, 36 -/* 096998 7F061E28 55E10004 */ bnel $t7, $at, .Ljp7F061E3C -/* 09699C 7F061E2C 8FBF0034 */ lw $ra, 0x34($sp) -/* 0969A0 7F061E30 0FC17F17 */ jal sub_GAME_7F05F73C -/* 0969A4 7F061E34 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0969A8 7F061E38 8FBF0034 */ lw $ra, 0x34($sp) -.Ljp7F061E3C: -/* 0969AC 7F061E3C 8FB00030 */ lw $s0, 0x30($sp) -/* 0969B0 7F061E40 27BD02A8 */ addiu $sp, $sp, 0x2a8 -/* 0969B4 7F061E44 03E00008 */ jr $ra -/* 0969B8 7F061E48 00000000 */ nop -) -#endif - -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80053DE0 -.word 0x3F70B780 /* 0.940299987793 */ -glabel D_80053DE4 -.word 0x3D748800 /* 0.059700012207 */ -glabel D_80053DE8 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053DEC -.word 0x3e99999a /*0.30000001*/ -glabel D_80053DF0 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053DF4 -.word 0x3e99999a /*0.30000001*/ -glabel D_80053DF8 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053DFC -.word 0x3e99999a /*0.30000001*/ -glabel D_80053E00 -.word 0x41de6666 /*27.799999*/ -glabel D_80053E04 -.word 0x3dccccce /*0.10000001*/ -glabel D_80053E08 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E0C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E10 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E14 -.word 0x3f060a92 /*0.52359879*/ -glabel D_80053E18 -.word 0x3f060a92 /*0.52359879*/ -glabel D_80053E1C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E20 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E24 -.word 0x3dccccce /*0.10000001*/ -glabel D_80053E28 -.word 0x3dccccce /*0.10000001*/ -glabel D_80053E2C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E30 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053E34 -.word 0x40c90fdb /*6.2831855*/ - -/*D:80053E38*/ -glabel jpt_weapon_bullet_type -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_shotgun_mine -.word weapon_bullet_type_shotgun_mine -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_pistol -.word weapon_bullet_type_none -.word weapon_bullet_type_none -.size jpt_weapon_bullet_type, . - jpt_weapon_bullet_type - -.text -glabel handles_firing_or_throwing_weapon_in_hand -/* 092E70 7F060480 27BDFD58 */ addiu $sp, $sp, -0x2a8 -/* 092E74 7F060484 3C0F8003 */ lui $t7, %hi(D_80035C40) # $t7, 0x8003 -/* 092E78 7F060488 AFBF0034 */ sw $ra, 0x34($sp) -/* 092E7C 7F06048C AFB00030 */ sw $s0, 0x30($sp) -/* 092E80 7F060490 25EF1190 */ addiu $t7, %lo(D_80035C40) # addiu $t7, $t7, 0x1190 -/* 092E84 7F060494 8DE10000 */ lw $at, ($t7) -/* 092E88 7F060498 27AE0194 */ addiu $t6, $sp, 0x194 -/* 092E8C 7F06049C 8DED0004 */ lw $t5, 4($t7) -/* 092E90 7F0604A0 ADC10000 */ sw $at, ($t6) -/* 092E94 7F0604A4 8DE10008 */ lw $at, 8($t7) -/* 092E98 7F0604A8 0004C0C0 */ sll $t8, $a0, 3 -/* 092E9C 7F0604AC 0304C023 */ subu $t8, $t8, $a0 -/* 092EA0 7F0604B0 0018C080 */ sll $t8, $t8, 2 -/* 092EA4 7F0604B4 0304C021 */ addu $t8, $t8, $a0 -/* 092EA8 7F0604B8 3C198007 */ lui $t9, %hi(g_CurrentPlayer) # $t9, 0x8007 -/* 092EAC 7F0604BC ADCD0004 */ sw $t5, 4($t6) -/* 092EB0 7F0604C0 ADC10008 */ sw $at, 8($t6) -/* 092EB4 7F0604C4 8F398BC0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 092EB8 7F0604C8 0018C080 */ sll $t8, $t8, 2 -/* 092EBC 7F0604CC 0304C021 */ addu $t8, $t8, $a0 -/* 092EC0 7F0604D0 0018C0C0 */ sll $t8, $t8, 3 -/* 092EC4 7F0604D4 03388021 */ addu $s0, $t9, $t8 -/* 092EC8 7F0604D8 AFA0010C */ sw $zero, 0x10c($sp) -/* 092ECC 7F0604DC AFA00108 */ sw $zero, 0x108($sp) -/* 092ED0 7F0604E0 26100868 */ addiu $s0, $s0, 0x868 -/* 092ED4 7F0604E4 0FC177BF */ jal get_item_in_hand_or_watch_menu -/* 092ED8 7F0604E8 AFA402A8 */ sw $a0, 0x2a8($sp) -/* 092EDC 7F0604EC AFA200FC */ sw $v0, 0xfc($sp) -/* 092EE0 7F0604F0 0FC17359 */ jal get_ptr_item_statistics -/* 092EE4 7F0604F4 00402025 */ move $a0, $v0 -/* 092EE8 7F0604F8 8FAE02A8 */ lw $t6, 0x2a8($sp) -/* 092EEC 7F0604FC AFA200F8 */ sw $v0, 0xf8($sp) -/* 092EF0 7F060500 15C0002D */ bnez $t6, .L7F0605B8 -/* 092EF4 7F060504 00000000 */ nop -/* 092EF8 7F060508 0FC177BF */ jal get_item_in_hand_or_watch_menu -/* 092EFC 7F06050C 24040001 */ li $a0, 1 -/* 092F00 7F060510 00402025 */ move $a0, $v0 -/* 092F04 7F060514 0FC1795B */ jal bondwalkItemCheckBitflags -/* 092F08 7F060518 24050800 */ li $a1, 2048 -/* 092F0C 7F06051C 10400015 */ beqz $v0, .L7F060574 -/* 092F10 7F060520 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) -/* 092F14 7F060524 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 092F18 7F060528 C4201004 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 092F1C 7F06052C 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 092F20 7F060530 44813000 */ mtc1 $at, $f6 -/* 092F24 7F060534 46000100 */ add.s $f4, $f0, $f0 -/* 092F28 7F060538 C60A01C4 */ lwc1 $f10, 0x1c4($s0) -/* 092F2C 7F06053C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 092F30 7F060540 44819000 */ mtc1 $at, $f18 -/* 092F34 7F060544 46062203 */ div.s $f8, $f4, $f6 -/* 092F38 7F060548 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 092F3C 7F06054C 46085400 */ add.s $f16, $f10, $f8 -/* 092F40 7F060550 E61001C4 */ swc1 $f16, 0x1c4($s0) -/* 092F44 7F060554 C60401C4 */ lwc1 $f4, 0x1c4($s0) -/* 092F48 7F060558 4604903C */ c.lt.s $f18, $f4 -/* 092F4C 7F06055C 00000000 */ nop -/* 092F50 7F060560 4500003F */ bc1f .L7F060660 -/* 092F54 7F060564 00000000 */ nop -/* 092F58 7F060568 44813000 */ mtc1 $at, $f6 -/* 092F5C 7F06056C 1000003C */ b .L7F060660 -/* 092F60 7F060570 E60601C4 */ swc1 $f6, 0x1c4($s0) -.L7F060574: -/* 092F64 7F060574 C4201004 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 092F68 7F060578 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 092F6C 7F06057C 44814000 */ mtc1 $at, $f8 -/* 092F70 7F060580 46000280 */ add.s $f10, $f0, $f0 -/* 092F74 7F060584 C61201C4 */ lwc1 $f18, 0x1c4($s0) -/* 092F78 7F060588 46085403 */ div.s $f16, $f10, $f8 -/* 092F7C 7F06058C 44805000 */ mtc1 $zero, $f10 -/* 092F80 7F060590 46109101 */ sub.s $f4, $f18, $f16 -/* 092F84 7F060594 E60401C4 */ swc1 $f4, 0x1c4($s0) -/* 092F88 7F060598 C60601C4 */ lwc1 $f6, 0x1c4($s0) -/* 092F8C 7F06059C 460A303C */ c.lt.s $f6, $f10 -/* 092F90 7F0605A0 00000000 */ nop -/* 092F94 7F0605A4 4500002E */ bc1f .L7F060660 -/* 092F98 7F0605A8 00000000 */ nop -/* 092F9C 7F0605AC 44804000 */ mtc1 $zero, $f8 -/* 092FA0 7F0605B0 1000002B */ b .L7F060660 -/* 092FA4 7F0605B4 E60801C4 */ swc1 $f8, 0x1c4($s0) -.L7F0605B8: -/* 092FA8 7F0605B8 0FC177BF */ jal get_item_in_hand_or_watch_menu -/* 092FAC 7F0605BC 00002025 */ move $a0, $zero -/* 092FB0 7F0605C0 00402025 */ move $a0, $v0 -/* 092FB4 7F0605C4 0FC1795B */ jal bondwalkItemCheckBitflags -/* 092FB8 7F0605C8 24050800 */ li $a1, 2048 -/* 092FBC 7F0605CC 10400013 */ beqz $v0, .L7F06061C -/* 092FC0 7F0605D0 3C018004 */ lui $at, 0x8004 -/* 092FC4 7F0605D4 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 092FC8 7F0605D8 44811000 */ mtc1 $at, $f2 -/* 092FCC 7F0605DC 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 092FD0 7F0605E0 C4201004 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 092FD4 7F0605E4 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 092FD8 7F0605E8 44818000 */ mtc1 $at, $f16 -/* 092FDC 7F0605EC 46000480 */ add.s $f18, $f0, $f0 -/* 092FE0 7F0605F0 C60601C4 */ lwc1 $f6, 0x1c4($s0) -/* 092FE4 7F0605F4 46109103 */ div.s $f4, $f18, $f16 -/* 092FE8 7F0605F8 46043281 */ sub.s $f10, $f6, $f4 -/* 092FEC 7F0605FC E60A01C4 */ swc1 $f10, 0x1c4($s0) -/* 092FF0 7F060600 C60801C4 */ lwc1 $f8, 0x1c4($s0) -/* 092FF4 7F060604 4602403C */ c.lt.s $f8, $f2 -/* 092FF8 7F060608 00000000 */ nop -/* 092FFC 7F06060C 45000014 */ bc1f .L7F060660 -/* 093000 7F060610 00000000 */ nop -/* 093004 7F060614 10000012 */ b .L7F060660 -/* 093008 7F060618 E60201C4 */ swc1 $f2, 0x1c4($s0) -.L7F06061C: -/* 09300C 7F06061C C4201004 */ lwc1 $f0, %lo(g_GlobalTimerDelta)($at) -/* 093010 7F060620 3C014370 */ li $at, 0x43700000 # 240.000000 -/* 093014 7F060624 44818000 */ mtc1 $at, $f16 -/* 093018 7F060628 46000480 */ add.s $f18, $f0, $f0 -/* 09301C 7F06062C C60401C4 */ lwc1 $f4, 0x1c4($s0) -/* 093020 7F060630 44804000 */ mtc1 $zero, $f8 -/* 093024 7F060634 46109183 */ div.s $f6, $f18, $f16 -/* 093028 7F060638 46062280 */ add.s $f10, $f4, $f6 -/* 09302C 7F06063C E60A01C4 */ swc1 $f10, 0x1c4($s0) -/* 093030 7F060640 C61201C4 */ lwc1 $f18, 0x1c4($s0) -/* 093034 7F060644 4612403C */ c.lt.s $f8, $f18 -/* 093038 7F060648 00000000 */ nop -/* 09303C 7F06064C 45000004 */ bc1f .L7F060660 -/* 093040 7F060650 00000000 */ nop -/* 093044 7F060654 44808000 */ mtc1 $zero, $f16 -/* 093048 7F060658 00000000 */ nop -/* 09304C 7F06065C E61001C4 */ swc1 $f16, 0x1c4($s0) -.L7F060660: -/* 093050 7F060660 3C0F8003 */ lui $t7, %hi(D_80035C4C) # $t7, 0x8003 -/* 093054 7F060664 25EF119C */ addiu $t7, %lo(D_80035C4C) # addiu $t7, $t7, 0x119c -/* 093058 7F060668 8DE10000 */ lw $at, ($t7) -/* 09305C 7F06066C 27AC00E0 */ addiu $t4, $sp, 0xe0 -/* 093060 7F060670 3C0E8003 */ lui $t6, %hi(D_80035C58) # $t6, 0x8003 -/* 093064 7F060674 AD810000 */ sw $at, ($t4) -/* 093068 7F060678 8DF90004 */ lw $t9, 4($t7) -/* 09306C 7F06067C 25CE11A8 */ addiu $t6, %lo(D_80035C58) # addiu $t6, $t6, 0x11a8 -/* 093070 7F060680 27B800D4 */ addiu $t8, $sp, 0xd4 -/* 093074 7F060684 AD990004 */ sw $t9, 4($t4) -/* 093078 7F060688 8DE10008 */ lw $at, 8($t7) -/* 09307C 7F06068C 3C0D8003 */ lui $t5, %hi(D_80035C64) # $t5, 0x8003 -/* 093080 7F060690 25AD11B4 */ addiu $t5, %lo(D_80035C64) # addiu $t5, $t5, 0x11b4 -/* 093084 7F060694 AD810008 */ sw $at, 8($t4) -/* 093088 7F060698 8DC10000 */ lw $at, ($t6) -/* 09308C 7F06069C 8DCF0004 */ lw $t7, 4($t6) -/* 093090 7F0606A0 27B900C8 */ addiu $t9, $sp, 0xc8 -/* 093094 7F0606A4 AF010000 */ sw $at, ($t8) -/* 093098 7F0606A8 8DC10008 */ lw $at, 8($t6) -/* 09309C 7F0606AC AF0F0004 */ sw $t7, 4($t8) -/* 0930A0 7F0606B0 2403000C */ li $v1, 12 -/* 0930A4 7F0606B4 AF010008 */ sw $at, 8($t8) -/* 0930A8 7F0606B8 8DA10000 */ lw $at, ($t5) -/* 0930AC 7F0606BC 8DAE0004 */ lw $t6, 4($t5) -/* 0930B0 7F0606C0 AF210000 */ sw $at, ($t9) -/* 0930B4 7F0606C4 8DA10008 */ lw $at, 8($t5) -/* 0930B8 7F0606C8 AF2E0004 */ sw $t6, 4($t9) -/* 0930BC 7F0606CC AF210008 */ sw $at, 8($t9) -/* 0930C0 7F0606D0 8E020198 */ lw $v0, 0x198($s0) -/* 0930C4 7F0606D4 C604019C */ lwc1 $f4, 0x19c($s0) -/* 0930C8 7F0606D8 AFAC0014 */ sw $t4, 0x14($sp) -/* 0930CC 7F0606DC 244F0003 */ addiu $t7, $v0, 3 -/* 0930D0 7F0606E0 05E10004 */ bgez $t7, .L7F0606F4 -/* 0930D4 7F0606E4 31F80003 */ andi $t8, $t7, 3 -/* 0930D8 7F0606E8 13000002 */ beqz $t8, .L7F0606F4 -/* 0930DC 7F0606EC 00000000 */ nop -/* 0930E0 7F0606F0 2718FFFC */ addiu $t8, $t8, -4 -.L7F0606F4: -/* 0930E4 7F0606F4 03030019 */ multu $t8, $v1 -/* 0930E8 7F0606F8 244E0001 */ addiu $t6, $v0, 1 -/* 0930EC 7F0606FC E7A40010 */ swc1 $f4, 0x10($sp) -/* 0930F0 7F060700 0000C812 */ mflo $t9 -/* 0930F4 7F060704 02194021 */ addu $t0, $s0, $t9 -/* 0930F8 7F060708 24590002 */ addiu $t9, $v0, 2 -/* 0930FC 7F06070C 00430019 */ multu $v0, $v1 -/* 093100 7F060710 25040108 */ addiu $a0, $t0, 0x108 -/* 093104 7F060714 AFA80044 */ sw $t0, 0x44($sp) -/* 093108 7F060718 00006812 */ mflo $t5 -/* 09310C 7F06071C 020D4821 */ addu $t1, $s0, $t5 -/* 093110 7F060720 25250108 */ addiu $a1, $t1, 0x108 -/* 093114 7F060724 05C10004 */ bgez $t6, .L7F060738 -/* 093118 7F060728 31CF0003 */ andi $t7, $t6, 3 -/* 09311C 7F06072C 11E00002 */ beqz $t7, .L7F060738 -/* 093120 7F060730 00000000 */ nop -/* 093124 7F060734 25EFFFFC */ addiu $t7, $t7, -4 -.L7F060738: -/* 093128 7F060738 01E30019 */ multu $t7, $v1 -/* 09312C 7F06073C AFA90040 */ sw $t1, 0x40($sp) -/* 093130 7F060740 0000C012 */ mflo $t8 -/* 093134 7F060744 02185021 */ addu $t2, $s0, $t8 -/* 093138 7F060748 25460108 */ addiu $a2, $t2, 0x108 -/* 09313C 7F06074C 07210004 */ bgez $t9, .L7F060760 -/* 093140 7F060750 332D0003 */ andi $t5, $t9, 3 -/* 093144 7F060754 11A00002 */ beqz $t5, .L7F060760 -/* 093148 7F060758 00000000 */ nop -/* 09314C 7F06075C 25ADFFFC */ addiu $t5, $t5, -4 -.L7F060760: -/* 093150 7F060760 01A30019 */ multu $t5, $v1 -/* 093154 7F060764 AFAA003C */ sw $t2, 0x3c($sp) -/* 093158 7F060768 00007012 */ mflo $t6 -/* 09315C 7F06076C 020E5821 */ addu $t3, $s0, $t6 -/* 093160 7F060770 25670108 */ addiu $a3, $t3, 0x108 -/* 093164 7F060774 0FC16CEB */ jal sub_GAME_7F05AEFC -/* 093168 7F060778 AFAB0038 */ sw $t3, 0x38($sp) -/* 09316C 7F06077C 8FA40044 */ lw $a0, 0x44($sp) -/* 093170 7F060780 8FA50040 */ lw $a1, 0x40($sp) -/* 093174 7F060784 8FA6003C */ lw $a2, 0x3c($sp) -/* 093178 7F060788 8FA70038 */ lw $a3, 0x38($sp) -/* 09317C 7F06078C C606019C */ lwc1 $f6, 0x19c($s0) -/* 093180 7F060790 27AF00D4 */ addiu $t7, $sp, 0xd4 -/* 093184 7F060794 AFAF0014 */ sw $t7, 0x14($sp) -/* 093188 7F060798 24840138 */ addiu $a0, $a0, 0x138 -/* 09318C 7F06079C 24A50138 */ addiu $a1, $a1, 0x138 -/* 093190 7F0607A0 24C60138 */ addiu $a2, $a2, 0x138 -/* 093194 7F0607A4 24E70138 */ addiu $a3, $a3, 0x138 -/* 093198 7F0607A8 0FC16CEB */ jal sub_GAME_7F05AEFC -/* 09319C 7F0607AC E7A60010 */ swc1 $f6, 0x10($sp) -/* 0931A0 7F0607B0 8FA40044 */ lw $a0, 0x44($sp) -/* 0931A4 7F0607B4 8FA50040 */ lw $a1, 0x40($sp) -/* 0931A8 7F0607B8 8FA6003C */ lw $a2, 0x3c($sp) -/* 0931AC 7F0607BC 8FA70038 */ lw $a3, 0x38($sp) -/* 0931B0 7F0607C0 C60A019C */ lwc1 $f10, 0x19c($s0) -/* 0931B4 7F0607C4 27B800C8 */ addiu $t8, $sp, 0xc8 -/* 0931B8 7F0607C8 AFB80014 */ sw $t8, 0x14($sp) -/* 0931BC 7F0607CC 24840168 */ addiu $a0, $a0, 0x168 -/* 0931C0 7F0607D0 24A50168 */ addiu $a1, $a1, 0x168 -/* 0931C4 7F0607D4 24C60168 */ addiu $a2, $a2, 0x168 -/* 0931C8 7F0607D8 24E70168 */ addiu $a3, $a3, 0x168 -/* 0931CC 7F0607DC 0FC16CEB */ jal sub_GAME_7F05AEFC -/* 0931D0 7F0607E0 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 0931D4 7F0607E4 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0931D8 7F0607E8 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0931DC 7F0607EC C7A800E0 */ lwc1 $f8, 0xe0($sp) -/* 0931E0 7F0607F0 C7A400E4 */ lwc1 $f4, 0xe4($sp) -/* 0931E4 7F0607F4 C4520FB8 */ lwc1 $f18, 0xfb8($v0) -/* 0931E8 7F0607F8 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0931EC 7F0607FC 46124402 */ mul.s $f16, $f8, $f18 -/* 0931F0 7F060800 C7A800E8 */ lwc1 $f8, 0xe8($sp) -/* 0931F4 7F060804 E7B000E0 */ swc1 $f16, 0xe0($sp) -/* 0931F8 7F060808 C4460FB8 */ lwc1 $f6, 0xfb8($v0) -/* 0931FC 7F06080C 46062282 */ mul.s $f10, $f4, $f6 -/* 093200 7F060810 E7AA00E4 */ swc1 $f10, 0xe4($sp) -/* 093204 7F060814 C4520FB8 */ lwc1 $f18, 0xfb8($v0) -/* 093208 7F060818 46124102 */ mul.s $f4, $f8, $f18 -/* 09320C 7F06081C E7A400E8 */ swc1 $f4, 0xe8($sp) -/* 093210 7F060820 C60601AC */ lwc1 $f6, 0x1ac($s0) -/* 093214 7F060824 46068200 */ add.s $f8, $f16, $f6 -/* 093218 7F060828 E7A800E0 */ swc1 $f8, 0xe0($sp) -/* 09321C 7F06082C C61201B0 */ lwc1 $f18, 0x1b0($s0) -/* 093220 7F060830 46125100 */ add.s $f4, $f10, $f18 -/* 093224 7F060834 0FC1785C */ jal sub_GAME_7F05DCB8 -/* 093228 7F060838 E7A400E4 */ swc1 $f4, 0xe4($sp) -/* 09322C 7F06083C C7B000E0 */ lwc1 $f16, 0xe0($sp) -/* 093230 7F060840 3C028004 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8004 -/* 093234 7F060844 24420FF4 */ addiu $v0, %lo(g_ClockTimer) # addiu $v0, $v0, 0xff4 -/* 093238 7F060848 46008180 */ add.s $f6, $f16, $f0 -/* 09323C 7F06084C 8C590000 */ lw $t9, ($v0) -/* 093240 7F060850 00001825 */ move $v1, $zero -/* 093244 7F060854 1B200035 */ blez $t9, .L7F06092C -/* 093248 7F060858 E7A600E0 */ swc1 $f6, 0xe0($sp) -/* 09324C 7F06085C 3C018005 */ lui $at, %hi(D_80053DE0) # $at, 0x8005 -/* 093250 7F060860 C4209F20 */ lwc1 $f0, %lo(D_80053DE0)($at) -/* 093254 7F060864 C60A00E4 */ lwc1 $f10, 0xe4($s0) -.L7F060868: -/* 093258 7F060868 C7A800E0 */ lwc1 $f8, 0xe0($sp) -/* 09325C 7F06086C C60600E8 */ lwc1 $f6, 0xe8($s0) -/* 093260 7F060870 460A0482 */ mul.s $f18, $f0, $f10 -/* 093264 7F060874 24630001 */ addiu $v1, $v1, 1 -/* 093268 7F060878 46060282 */ mul.s $f10, $f0, $f6 -/* 09326C 7F06087C 46124100 */ add.s $f4, $f8, $f18 -/* 093270 7F060880 E60400E4 */ swc1 $f4, 0xe4($s0) -/* 093274 7F060884 C7B000E4 */ lwc1 $f16, 0xe4($sp) -/* 093278 7F060888 C60400EC */ lwc1 $f4, 0xec($s0) -/* 09327C 7F06088C 460A8200 */ add.s $f8, $f16, $f10 -/* 093280 7F060890 46040182 */ mul.s $f6, $f0, $f4 -/* 093284 7F060894 E60800E8 */ swc1 $f8, 0xe8($s0) -/* 093288 7F060898 C7B200E8 */ lwc1 $f18, 0xe8($sp) -/* 09328C 7F06089C C60800F0 */ lwc1 $f8, 0xf0($s0) -/* 093290 7F0608A0 46069400 */ add.s $f16, $f18, $f6 -/* 093294 7F0608A4 46080102 */ mul.s $f4, $f0, $f8 -/* 093298 7F0608A8 E61000EC */ swc1 $f16, 0xec($s0) -/* 09329C 7F0608AC C7AA00D4 */ lwc1 $f10, 0xd4($sp) -/* 0932A0 7F0608B0 C61000F4 */ lwc1 $f16, 0xf4($s0) -/* 0932A4 7F0608B4 46045480 */ add.s $f18, $f10, $f4 -/* 0932A8 7F0608B8 46100202 */ mul.s $f8, $f0, $f16 -/* 0932AC 7F0608BC E61200F0 */ swc1 $f18, 0xf0($s0) -/* 0932B0 7F0608C0 C7A600D8 */ lwc1 $f6, 0xd8($sp) -/* 0932B4 7F0608C4 C61200F8 */ lwc1 $f18, 0xf8($s0) -/* 0932B8 7F0608C8 46083280 */ add.s $f10, $f6, $f8 -/* 0932BC 7F0608CC 46120402 */ mul.s $f16, $f0, $f18 -/* 0932C0 7F0608D0 E60A00F4 */ swc1 $f10, 0xf4($s0) -/* 0932C4 7F0608D4 C7A400DC */ lwc1 $f4, 0xdc($sp) -/* 0932C8 7F0608D8 C60A00FC */ lwc1 $f10, 0xfc($s0) -/* 0932CC 7F0608DC 46102180 */ add.s $f6, $f4, $f16 -/* 0932D0 7F0608E0 460A0482 */ mul.s $f18, $f0, $f10 -/* 0932D4 7F0608E4 E60600F8 */ swc1 $f6, 0xf8($s0) -/* 0932D8 7F0608E8 C7A800C8 */ lwc1 $f8, 0xc8($sp) -/* 0932DC 7F0608EC C6060100 */ lwc1 $f6, 0x100($s0) -/* 0932E0 7F0608F0 46124100 */ add.s $f4, $f8, $f18 -/* 0932E4 7F0608F4 46060282 */ mul.s $f10, $f0, $f6 -/* 0932E8 7F0608F8 E60400FC */ swc1 $f4, 0xfc($s0) -/* 0932EC 7F0608FC C7B000CC */ lwc1 $f16, 0xcc($sp) -/* 0932F0 7F060900 C6040104 */ lwc1 $f4, 0x104($s0) -/* 0932F4 7F060904 460A8200 */ add.s $f8, $f16, $f10 -/* 0932F8 7F060908 46040182 */ mul.s $f6, $f0, $f4 -/* 0932FC 7F06090C E6080100 */ swc1 $f8, 0x100($s0) -/* 093300 7F060910 C7B200D0 */ lwc1 $f18, 0xd0($sp) -/* 093304 7F060914 46069400 */ add.s $f16, $f18, $f6 -/* 093308 7F060918 E6100104 */ swc1 $f16, 0x104($s0) -/* 09330C 7F06091C 8C4D0000 */ lw $t5, ($v0) -/* 093310 7F060920 006D082A */ slt $at, $v1, $t5 -/* 093314 7F060924 5420FFD0 */ bnezl $at, .L7F060868 -/* 093318 7F060928 C60A00E4 */ lwc1 $f10, 0xe4($s0) -.L7F06092C: -/* 09331C 7F06092C 3C018005 */ lui $at, %hi(D_80053DE4) # $at, 0x8005 -/* 093320 7F060930 C4209F24 */ lwc1 $f0, %lo(D_80053DE4)($at) -/* 093324 7F060934 C60A00E4 */ lwc1 $f10, 0xe4($s0) -/* 093328 7F060938 C60400E8 */ lwc1 $f4, 0xe8($s0) -/* 09332C 7F06093C C60600EC */ lwc1 $f6, 0xec($s0) -/* 093330 7F060940 46005202 */ mul.s $f8, $f10, $f0 -/* 093334 7F060944 C60A00F0 */ lwc1 $f10, 0xf0($s0) -/* 093338 7F060948 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 09333C 7F06094C 46002482 */ mul.s $f18, $f4, $f0 -/* 093340 7F060950 C60400F4 */ lwc1 $f4, 0xf4($s0) -/* 093344 7F060954 46003402 */ mul.s $f16, $f6, $f0 -/* 093348 7F060958 E60800C0 */ swc1 $f8, 0xc0($s0) -/* 09334C 7F06095C C60600F8 */ lwc1 $f6, 0xf8($s0) -/* 093350 7F060960 46005202 */ mul.s $f8, $f10, $f0 -/* 093354 7F060964 E61200C4 */ swc1 $f18, 0xc4($s0) -/* 093358 7F060968 C60A00FC */ lwc1 $f10, 0xfc($s0) -/* 09335C 7F06096C 46002482 */ mul.s $f18, $f4, $f0 -/* 093360 7F060970 E61000C8 */ swc1 $f16, 0xc8($s0) -/* 093364 7F060974 C6040100 */ lwc1 $f4, 0x100($s0) -/* 093368 7F060978 46003402 */ mul.s $f16, $f6, $f0 -/* 09336C 7F06097C E60800CC */ swc1 $f8, 0xcc($s0) -/* 093370 7F060980 C6060104 */ lwc1 $f6, 0x104($s0) -/* 093374 7F060984 46005202 */ mul.s $f8, $f10, $f0 -/* 093378 7F060988 E61200D0 */ swc1 $f18, 0xd0($s0) -/* 09337C 7F06098C 46002482 */ mul.s $f18, $f4, $f0 -/* 093380 7F060990 E61000D4 */ swc1 $f16, 0xd4($s0) -/* 093384 7F060994 46003402 */ mul.s $f16, $f6, $f0 -/* 093388 7F060998 E60800D8 */ swc1 $f8, 0xd8($s0) -/* 09338C 7F06099C E61200DC */ swc1 $f18, 0xdc($s0) -/* 093390 7F0609A0 14800009 */ bnez $a0, .L7F0609C8 -/* 093394 7F0609A4 E61000E0 */ swc1 $f16, 0xe0($s0) -/* 093398 7F0609A8 0FC17868 */ jal gunSetHorizontalOffset -/* 09339C 7F0609AC 00000000 */ nop -/* 0933A0 7F0609B0 C60800C0 */ lwc1 $f8, 0xc0($s0) -/* 0933A4 7F0609B4 C60A01B8 */ lwc1 $f10, 0x1b8($s0) -/* 0933A8 7F0609B8 46080100 */ add.s $f4, $f0, $f8 -/* 0933AC 7F0609BC 46045480 */ add.s $f18, $f10, $f4 -/* 0933B0 7F0609C0 10000008 */ b .L7F0609E4 -/* 0933B4 7F0609C4 E7B20194 */ swc1 $f18, 0x194($sp) -.L7F0609C8: -/* 0933B8 7F0609C8 0FC17868 */ jal gunSetHorizontalOffset -/* 0933BC 7F0609CC 00000000 */ nop -/* 0933C0 7F0609D0 C60600C0 */ lwc1 $f6, 0xc0($s0) -/* 0933C4 7F0609D4 C60801B8 */ lwc1 $f8, 0x1b8($s0) -/* 0933C8 7F0609D8 46060400 */ add.s $f16, $f0, $f6 -/* 0933CC 7F0609DC 46088281 */ sub.s $f10, $f16, $f8 -/* 0933D0 7F0609E0 E7AA0194 */ swc1 $f10, 0x194($sp) -.L7F0609E4: -/* 0933D4 7F0609E4 8FAE00F8 */ lw $t6, 0xf8($sp) -/* 0933D8 7F0609E8 C61200C4 */ lwc1 $f18, 0xc4($s0) -/* 0933DC 7F0609EC C61001BC */ lwc1 $f16, 0x1bc($s0) -/* 0933E0 7F0609F0 C5C40008 */ lwc1 $f4, 8($t6) -/* 0933E4 7F0609F4 8FA400FC */ lw $a0, 0xfc($sp) -/* 0933E8 7F0609F8 24010019 */ li $at, 25 -/* 0933EC 7F0609FC 46122180 */ add.s $f6, $f4, $f18 -/* 0933F0 7F060A00 46068200 */ add.s $f8, $f16, $f6 -/* 0933F4 7F060A04 E7A80198 */ swc1 $f8, 0x198($sp) -/* 0933F8 7F060A08 C60400C8 */ lwc1 $f4, 0xc8($s0) -/* 0933FC 7F060A0C C5CA000C */ lwc1 $f10, 0xc($t6) -/* 093400 7F060A10 C61001C0 */ lwc1 $f16, 0x1c0($s0) -/* 093404 7F060A14 46045480 */ add.s $f18, $f10, $f4 -/* 093408 7F060A18 46128180 */ add.s $f6, $f16, $f18 -/* 09340C 7F060A1C 10810005 */ beq $a0, $at, .L7F060A34 -/* 093410 7F060A20 E7A6019C */ swc1 $f6, 0x19c($sp) -/* 093414 7F060A24 2401001E */ li $at, 30 -/* 093418 7F060A28 10810002 */ beq $a0, $at, .L7F060A34 -/* 09341C 7F060A2C 24010017 */ li $at, 23 -/* 093420 7F060A30 14810028 */ bne $a0, $at, .L7F060AD4 -.L7F060A34: -/* 093424 7F060A34 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 093428 7F060A38 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09342C 7F060A3C 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 093430 7F060A40 44810000 */ mtc1 $at, $f0 -/* 093434 7F060A44 C44A00A0 */ lwc1 $f10, 0xa0($v0) -/* 093438 7F060A48 C7A80198 */ lwc1 $f8, 0x198($sp) -/* 09343C 7F060A4C 3C014040 */ li $at, 0x40400000 # 3.000000 -/* 093440 7F060A50 46005103 */ div.s $f4, $f10, $f0 -/* 093444 7F060A54 44819000 */ mtc1 $at, $f18 -/* 093448 7F060A58 24010019 */ li $at, 25 -/* 09344C 7F060A5C 46044400 */ add.s $f16, $f8, $f4 -/* 093450 7F060A60 C7A4019C */ lwc1 $f4, 0x19c($sp) -/* 093454 7F060A64 E7B00198 */ swc1 $f16, 0x198($sp) -/* 093458 7F060A68 C44600A0 */ lwc1 $f6, 0xa0($v0) -/* 09345C 7F060A6C 46069282 */ mul.s $f10, $f18, $f6 -/* 093460 7F060A70 46005203 */ div.s $f8, $f10, $f0 -/* 093464 7F060A74 46082400 */ add.s $f16, $f4, $f8 -/* 093468 7F060A78 14810014 */ bne $a0, $at, .L7F060ACC -/* 09346C 7F060A7C E7B0019C */ swc1 $f16, 0x19c($sp) -/* 093470 7F060A80 0FC2907A */ jal cur_player_get_screen_setting -/* 093474 7F060A84 00000000 */ nop -/* 093478 7F060A88 24010001 */ li $at, 1 -/* 09347C 7F060A8C 5041000B */ beql $v0, $at, .L7F060ABC -/* 093480 7F060A90 3C014040 */ lui $at, 0x4040 -/* 093484 7F060A94 0FC2907A */ jal cur_player_get_screen_setting -/* 093488 7F060A98 00000000 */ nop -/* 09348C 7F060A9C 24010002 */ li $at, 2 -/* 093490 7F060AA0 50410006 */ beql $v0, $at, .L7F060ABC -/* 093494 7F060AA4 3C014040 */ lui $at, 0x4040 -/* 093498 7F060AA8 0FC29080 */ jal get_screen_ratio -/* 09349C 7F060AAC 00000000 */ nop -/* 0934A0 7F060AB0 24010001 */ li $at, 1 -/* 0934A4 7F060AB4 14410005 */ bne $v0, $at, .L7F060ACC -/* 0934A8 7F060AB8 3C014040 */ li $at, 0x40400000 # 3.000000 -.L7F060ABC: -/* 0934AC 7F060ABC 44813000 */ mtc1 $at, $f6 -/* 0934B0 7F060AC0 C7B20198 */ lwc1 $f18, 0x198($sp) -/* 0934B4 7F060AC4 46069281 */ sub.s $f10, $f18, $f6 -/* 0934B8 7F060AC8 E7AA0198 */ swc1 $f10, 0x198($sp) -.L7F060ACC: -/* 0934BC 7F060ACC 1000002C */ b .L7F060B80 -/* 0934C0 7F060AD0 8FA400FC */ lw $a0, 0xfc($sp) -.L7F060AD4: -/* 0934C4 7F060AD4 2401001F */ li $at, 31 -/* 0934C8 7F060AD8 14810016 */ bne $a0, $at, .L7F060B34 -/* 0934CC 7F060ADC 3C028007 */ lui $v0, 0x8007 -/* 0934D0 7F060AE0 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0934D4 7F060AE4 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0934D8 7F060AE8 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 0934DC 7F060AEC 44810000 */ mtc1 $at, $f0 -/* 0934E0 7F060AF0 3C014020 */ li $at, 0x40200000 # 2.500000 -/* 0934E4 7F060AF4 44812000 */ mtc1 $at, $f4 -/* 0934E8 7F060AF8 C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 0934EC 7F060AFC C7A60198 */ lwc1 $f6, 0x198($sp) -/* 0934F0 7F060B00 3C0140F0 */ li $at, 0x40F00000 # 7.500000 -/* 0934F4 7F060B04 46082402 */ mul.s $f16, $f4, $f8 -/* 0934F8 7F060B08 44812000 */ mtc1 $at, $f4 -/* 0934FC 7F060B0C 46008483 */ div.s $f18, $f16, $f0 -/* 093500 7F060B10 46123280 */ add.s $f10, $f6, $f18 -/* 093504 7F060B14 C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 093508 7F060B18 E7AA0198 */ swc1 $f10, 0x198($sp) -/* 09350C 7F060B1C C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 093510 7F060B20 46082402 */ mul.s $f16, $f4, $f8 -/* 093514 7F060B24 46008183 */ div.s $f6, $f16, $f0 -/* 093518 7F060B28 46069280 */ add.s $f10, $f18, $f6 -/* 09351C 7F060B2C 10000014 */ b .L7F060B80 -/* 093520 7F060B30 E7AA019C */ swc1 $f10, 0x19c($sp) -.L7F060B34: -/* 093524 7F060B34 8C428BC0 */ lw $v0, -0x7440($v0) -/* 093528 7F060B38 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 09352C 7F060B3C 44810000 */ mtc1 $at, $f0 -/* 093530 7F060B40 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 093534 7F060B44 44812000 */ mtc1 $at, $f4 -/* 093538 7F060B48 C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 09353C 7F060B4C C7A60198 */ lwc1 $f6, 0x198($sp) -/* 093540 7F060B50 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 093544 7F060B54 46082402 */ mul.s $f16, $f4, $f8 -/* 093548 7F060B58 44812000 */ mtc1 $at, $f4 -/* 09354C 7F060B5C 46008483 */ div.s $f18, $f16, $f0 -/* 093550 7F060B60 46123280 */ add.s $f10, $f6, $f18 -/* 093554 7F060B64 C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 093558 7F060B68 E7AA0198 */ swc1 $f10, 0x198($sp) -/* 09355C 7F060B6C C44800A0 */ lwc1 $f8, 0xa0($v0) -/* 093560 7F060B70 46082402 */ mul.s $f16, $f4, $f8 -/* 093564 7F060B74 46008183 */ div.s $f6, $f16, $f0 -/* 093568 7F060B78 46069280 */ add.s $f10, $f18, $f6 -/* 09356C 7F060B7C E7AA019C */ swc1 $f10, 0x19c($sp) -.L7F060B80: -/* 093570 7F060B80 820F000C */ lb $t7, 0xc($s0) -/* 093574 7F060B84 11E00047 */ beqz $t7, .L7F060CA4 -/* 093578 7F060B88 00000000 */ nop -/* 09357C 7F060B8C 0FC1795B */ jal bondwalkItemCheckBitflags -/* 093580 7F060B90 24050020 */ li $a1, 32 -/* 093584 7F060B94 10400043 */ beqz $v0, .L7F060CA4 -/* 093588 7F060B98 8FA400FC */ lw $a0, 0xfc($sp) -/* 09358C 7F060B9C 0FC1795B */ jal bondwalkItemCheckBitflags -/* 093590 7F060BA0 24050040 */ li $a1, 64 -/* 093594 7F060BA4 10400016 */ beqz $v0, .L7F060C00 -/* 093598 7F060BA8 00000000 */ nop -/* 09359C 7F060BAC 0C00262C */ jal randomGetNext -/* 0935A0 7F060BB0 00000000 */ nop -/* 0935A4 7F060BB4 44822000 */ mtc1 $v0, $f4 -/* 0935A8 7F060BB8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0935AC 7F060BBC 04410004 */ bgez $v0, .L7F060BD0 -/* 0935B0 7F060BC0 46802220 */ cvt.s.w $f8, $f4 -/* 0935B4 7F060BC4 44818000 */ mtc1 $at, $f16 -/* 0935B8 7F060BC8 00000000 */ nop -/* 0935BC 7F060BCC 46104200 */ add.s $f8, $f8, $f16 -.L7F060BD0: -/* 0935C0 7F060BD0 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0935C4 7F060BD4 44819000 */ mtc1 $at, $f18 -/* 0935C8 7F060BD8 3C018005 */ lui $at, %hi(D_80053DE8) # $at, 0x8005 -/* 0935CC 7F060BDC C42A9F28 */ lwc1 $f10, %lo(D_80053DE8)($at) -/* 0935D0 7F060BE0 46124182 */ mul.s $f6, $f8, $f18 -/* 0935D4 7F060BE4 3C018005 */ lui $at, %hi(D_80053DEC) # $at, 0x8005 -/* 0935D8 7F060BE8 C4309F2C */ lwc1 $f16, %lo(D_80053DEC)($at) -/* 0935DC 7F060BEC C7B20194 */ lwc1 $f18, 0x194($sp) -/* 0935E0 7F060BF0 460A3102 */ mul.s $f4, $f6, $f10 -/* 0935E4 7F060BF4 46048201 */ sub.s $f8, $f16, $f4 -/* 0935E8 7F060BF8 46089180 */ add.s $f6, $f18, $f8 -/* 0935EC 7F060BFC E7A60194 */ swc1 $f6, 0x194($sp) -.L7F060C00: -/* 0935F0 7F060C00 0C00262C */ jal randomGetNext -/* 0935F4 7F060C04 00000000 */ nop -/* 0935F8 7F060C08 44825000 */ mtc1 $v0, $f10 -/* 0935FC 7F060C0C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 093600 7F060C10 04410004 */ bgez $v0, .L7F060C24 -/* 093604 7F060C14 46805420 */ cvt.s.w $f16, $f10 -/* 093608 7F060C18 44812000 */ mtc1 $at, $f4 -/* 09360C 7F060C1C 00000000 */ nop -/* 093610 7F060C20 46048400 */ add.s $f16, $f16, $f4 -.L7F060C24: -/* 093614 7F060C24 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 093618 7F060C28 44819000 */ mtc1 $at, $f18 -/* 09361C 7F060C2C 3C018005 */ lui $at, %hi(D_80053DF0) # $at, 0x8005 -/* 093620 7F060C30 C4269F30 */ lwc1 $f6, %lo(D_80053DF0)($at) -/* 093624 7F060C34 46128202 */ mul.s $f8, $f16, $f18 -/* 093628 7F060C38 3C018005 */ lui $at, %hi(D_80053DF4) # $at, 0x8005 -/* 09362C 7F060C3C C4249F34 */ lwc1 $f4, %lo(D_80053DF4)($at) -/* 093630 7F060C40 C7B20198 */ lwc1 $f18, 0x198($sp) -/* 093634 7F060C44 46064282 */ mul.s $f10, $f8, $f6 -/* 093638 7F060C48 460A2401 */ sub.s $f16, $f4, $f10 -/* 09363C 7F060C4C 46109200 */ add.s $f8, $f18, $f16 -/* 093640 7F060C50 0C00262C */ jal randomGetNext -/* 093644 7F060C54 E7A80198 */ swc1 $f8, 0x198($sp) -/* 093648 7F060C58 44823000 */ mtc1 $v0, $f6 -/* 09364C 7F060C5C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 093650 7F060C60 04410004 */ bgez $v0, .L7F060C74 -/* 093654 7F060C64 46803120 */ cvt.s.w $f4, $f6 -/* 093658 7F060C68 44815000 */ mtc1 $at, $f10 -/* 09365C 7F060C6C 00000000 */ nop -/* 093660 7F060C70 460A2100 */ add.s $f4, $f4, $f10 -.L7F060C74: -/* 093664 7F060C74 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 093668 7F060C78 44819000 */ mtc1 $at, $f18 -/* 09366C 7F060C7C 3C018005 */ lui $at, %hi(D_80053DF8) # $at, 0x8005 -/* 093670 7F060C80 C4289F38 */ lwc1 $f8, %lo(D_80053DF8)($at) -/* 093674 7F060C84 46122402 */ mul.s $f16, $f4, $f18 -/* 093678 7F060C88 3C018005 */ lui $at, %hi(D_80053DFC) -/* 09367C 7F060C8C C42A9F3C */ lwc1 $f10, %lo(D_80053DFC)($at) -/* 093680 7F060C90 C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 093684 7F060C94 46088182 */ mul.s $f6, $f16, $f8 -/* 093688 7F060C98 46065101 */ sub.s $f4, $f10, $f6 -/* 09368C 7F060C9C 46049400 */ add.s $f16, $f18, $f4 -/* 093690 7F060CA0 E7B0019C */ swc1 $f16, 0x19c($sp) -.L7F060CA4: -/* 093694 7F060CA4 0FC1E149 */ jal getPlayer_c_screenwidth -/* 093698 7F060CA8 00000000 */ nop -/* 09369C 7F060CAC 0FC1E149 */ jal getPlayer_c_screenwidth -/* 0936A0 7F060CB0 E7A00048 */ swc1 $f0, 0x48($sp) -/* 0936A4 7F060CB4 0FC1E151 */ jal getPlayer_c_screenleft -/* 0936A8 7F060CB8 E7A0004C */ swc1 $f0, 0x4c($sp) -/* 0936AC 7F060CBC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0936B0 7F060CC0 3C188007 */ lui $t8, %hi(g_CurrentPlayer) # $t8, 0x8007 -/* 0936B4 7F060CC4 8F188BC0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0936B8 7F060CC8 44811000 */ mtc1 $at, $f2 -/* 0936BC 7F060CCC C7A6004C */ lwc1 $f6, 0x4c($sp) -/* 0936C0 7F060CD0 C7080FF4 */ lwc1 $f8, 0xff4($t8) -/* 0936C4 7F060CD4 8FB900F8 */ lw $t9, 0xf8($sp) -/* 0936C8 7F060CD8 46023482 */ mul.s $f18, $f6, $f2 -/* 0936CC 7F060CDC 46004281 */ sub.s $f10, $f8, $f0 -/* 0936D0 7F060CE0 C7300018 */ lwc1 $f16, 0x18($t9) -/* 0936D4 7F060CE4 C7A60048 */ lwc1 $f6, 0x48($sp) -/* 0936D8 7F060CE8 46125101 */ sub.s $f4, $f10, $f18 -/* 0936DC 7F060CEC 46102202 */ mul.s $f8, $f4, $f16 -/* 0936E0 7F060CF0 C7A40194 */ lwc1 $f4, 0x194($sp) -/* 0936E4 7F060CF4 46023282 */ mul.s $f10, $f6, $f2 -/* 0936E8 7F060CF8 460A4483 */ div.s $f18, $f8, $f10 -/* 0936EC 7F060CFC 46122400 */ add.s $f16, $f4, $f18 -/* 0936F0 7F060D00 0FC1E155 */ jal getPlayer_c_screentop -/* 0936F4 7F060D04 E7B00194 */ swc1 $f16, 0x194($sp) -/* 0936F8 7F060D08 0FC1E14D */ jal getPlayer_c_screenheight -/* 0936FC 7F060D0C E7A00050 */ swc1 $f0, 0x50($sp) -/* 093700 7F060D10 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 093704 7F060D14 3C0D8007 */ lui $t5, %hi(g_CurrentPlayer) # $t5, 0x8007 -/* 093708 7F060D18 8DAD8BC0 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 09370C 7F060D1C 44813000 */ mtc1 $at, $f6 -/* 093710 7F060D20 C7A40050 */ lwc1 $f4, 0x50($sp) -/* 093714 7F060D24 C5AA0FF8 */ lwc1 $f10, 0xff8($t5) -/* 093718 7F060D28 46060202 */ mul.s $f8, $f0, $f6 -/* 09371C 7F060D2C 46045481 */ sub.s $f18, $f10, $f4 -/* 093720 7F060D30 4612403C */ c.lt.s $f8, $f18 -/* 093724 7F060D34 00000000 */ nop -/* 093728 7F060D38 4500001A */ bc1f .L7F060DA4 -/* 09372C 7F060D3C 00000000 */ nop -/* 093730 7F060D40 0FC1E14D */ jal getPlayer_c_screenheight -/* 093734 7F060D44 00000000 */ nop -/* 093738 7F060D48 0FC1E14D */ jal getPlayer_c_screenheight -/* 09373C 7F060D4C E7A00048 */ swc1 $f0, 0x48($sp) -/* 093740 7F060D50 0FC1E155 */ jal getPlayer_c_screentop -/* 093744 7F060D54 E7A0004C */ swc1 $f0, 0x4c($sp) -/* 093748 7F060D58 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 09374C 7F060D5C 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 093750 7F060D60 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 093754 7F060D64 44811000 */ mtc1 $at, $f2 -/* 093758 7F060D68 C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 09375C 7F060D6C C5D00FF8 */ lwc1 $f16, 0xff8($t6) -/* 093760 7F060D70 8FAF00F8 */ lw $t7, 0xf8($sp) -/* 093764 7F060D74 46025102 */ mul.s $f4, $f10, $f2 -/* 093768 7F060D78 46008181 */ sub.s $f6, $f16, $f0 -/* 09376C 7F060D7C C5F20014 */ lwc1 $f18, 0x14($t7) -/* 093770 7F060D80 C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 093774 7F060D84 46043201 */ sub.s $f8, $f6, $f4 -/* 093778 7F060D88 46124402 */ mul.s $f16, $f8, $f18 -/* 09377C 7F060D8C C7A80198 */ lwc1 $f8, 0x198($sp) -/* 093780 7F060D90 46025182 */ mul.s $f6, $f10, $f2 -/* 093784 7F060D94 46068103 */ div.s $f4, $f16, $f6 -/* 093788 7F060D98 46044481 */ sub.s $f18, $f8, $f4 -/* 09378C 7F060D9C 1000001A */ b .L7F060E08 -/* 093790 7F060DA0 E7B20198 */ swc1 $f18, 0x198($sp) -.L7F060DA4: -/* 093794 7F060DA4 0FC1E14D */ jal getPlayer_c_screenheight -/* 093798 7F060DA8 00000000 */ nop -/* 09379C 7F060DAC 0FC1E14D */ jal getPlayer_c_screenheight -/* 0937A0 7F060DB0 E7A00048 */ swc1 $f0, 0x48($sp) -/* 0937A4 7F060DB4 0FC1E155 */ jal getPlayer_c_screentop -/* 0937A8 7F060DB8 E7A0004C */ swc1 $f0, 0x4c($sp) -/* 0937AC 7F060DBC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0937B0 7F060DC0 3C188007 */ lui $t8, %hi(g_CurrentPlayer) # $t8, 0x8007 -/* 0937B4 7F060DC4 8F188BC0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0937B8 7F060DC8 44818000 */ mtc1 $at, $f16 -/* 0937BC 7F060DCC C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 0937C0 7F060DD0 C7080FF8 */ lwc1 $f8, 0xff8($t8) -/* 0937C4 7F060DD4 8FB900F8 */ lw $t9, 0xf8($sp) -/* 0937C8 7F060DD8 46105182 */ mul.s $f6, $f10, $f16 -/* 0937CC 7F060DDC 46004101 */ sub.s $f4, $f8, $f0 -/* 0937D0 7F060DE0 C72A0010 */ lwc1 $f10, 0x10($t9) -/* 0937D4 7F060DE4 C7A80048 */ lwc1 $f8, 0x48($sp) -/* 0937D8 7F060DE8 46062481 */ sub.s $f18, $f4, $f6 -/* 0937DC 7F060DEC 44812000 */ mtc1 $at, $f4 -/* 0937E0 7F060DF0 460A9402 */ mul.s $f16, $f18, $f10 -/* 0937E4 7F060DF4 C7AA0198 */ lwc1 $f10, 0x198($sp) -/* 0937E8 7F060DF8 46044182 */ mul.s $f6, $f8, $f4 -/* 0937EC 7F060DFC 46068483 */ div.s $f18, $f16, $f6 -/* 0937F0 7F060E00 46125201 */ sub.s $f8, $f10, $f18 -/* 0937F4 7F060E04 E7A80198 */ swc1 $f8, 0x198($sp) -.L7F060E08: -/* 0937F8 7F060E08 0FC172B1 */ jal sub_GAME_7F05C614 -/* 0937FC 7F060E0C 00000000 */ nop -/* 093800 7F060E10 0FC1611E */ jal matrix_4x4_set_identity -/* 093804 7F060E14 27A40154 */ addiu $a0, $sp, 0x154 -/* 093808 7F060E18 8FA200FC */ lw $v0, 0xfc($sp) -/* 09380C 7F060E1C 2401001E */ li $at, 30 -/* 093810 7F060E20 10410002 */ beq $v0, $at, .L7F060E2C -/* 093814 7F060E24 24010017 */ li $at, 23 -/* 093818 7F060E28 14410010 */ bne $v0, $at, .L7F060E6C -.L7F060E2C: -/* 09381C 7F060E2C 3C0D8003 */ lui $t5, %hi(D_80035C70) # $t5, 0x8003 -/* 093820 7F060E30 25AD11C0 */ addiu $t5, %lo(D_80035C70) # addiu $t5, $t5, 0x11c0 -/* 093824 7F060E34 8DA10000 */ lw $at, ($t5) -/* 093828 7F060E38 27A400B8 */ addiu $a0, $sp, 0xb8 -/* 09382C 7F060E3C 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 093830 7F060E40 AC810000 */ sw $at, ($a0) -/* 093834 7F060E44 8DAF0004 */ lw $t7, 4($t5) -/* 093838 7F060E48 AC8F0004 */ sw $t7, 4($a0) -/* 09383C 7F060E4C 8DA10008 */ lw $at, 8($t5) -/* 093840 7F060E50 0FC162EF */ jal matrix_4x4_set_rotation_around_xyz -/* 093844 7F060E54 AC810008 */ sw $at, 8($a0) -/* 093848 7F060E58 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 09384C 7F060E5C 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 093850 7F060E60 27A50154 */ addiu $a1, $sp, 0x154 -/* 093854 7F060E64 10000039 */ b .L7F060F4C -/* 093858 7F060E68 8E0D00BC */ lw $t5, 0xbc($s0) -.L7F060E6C: -/* 09385C 7F060E6C 2401001F */ li $at, 31 -/* 093860 7F060E70 14410010 */ bne $v0, $at, .L7F060EB4 -/* 093864 7F060E74 3C188003 */ lui $t8, %hi(D_80035C7C) # $t8, 0x8003 -/* 093868 7F060E78 271811CC */ addiu $t8, %lo(D_80035C7C) # addiu $t8, $t8, 0x11cc -/* 09386C 7F060E7C 8F010000 */ lw $at, ($t8) -/* 093870 7F060E80 27A400AC */ addiu $a0, $sp, 0xac -/* 093874 7F060E84 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 093878 7F060E88 AC810000 */ sw $at, ($a0) -/* 09387C 7F060E8C 8F0E0004 */ lw $t6, 4($t8) -/* 093880 7F060E90 AC8E0004 */ sw $t6, 4($a0) -/* 093884 7F060E94 8F010008 */ lw $at, 8($t8) -/* 093888 7F060E98 0FC162EF */ jal matrix_4x4_set_rotation_around_xyz -/* 09388C 7F060E9C AC810008 */ sw $at, 8($a0) -/* 093890 7F060EA0 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 093894 7F060EA4 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 093898 7F060EA8 27A50154 */ addiu $a1, $sp, 0x154 -/* 09389C 7F060EAC 10000027 */ b .L7F060F4C -/* 0938A0 7F060EB0 8E0D00BC */ lw $t5, 0xbc($s0) -.L7F060EB4: -/* 0938A4 7F060EB4 24010001 */ li $at, 1 -/* 0938A8 7F060EB8 14410023 */ bne $v0, $at, .L7F060F48 -/* 0938AC 7F060EBC 3C0D8007 */ lui $t5, %hi(g_CurrentPlayer) # $t5, 0x8007 -/* 0938B0 7F060EC0 8DAD8BC0 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 0938B4 7F060EC4 24010011 */ li $at, 17 -/* 0938B8 7F060EC8 3C198003 */ lui $t9, %hi(D_80035C88) # $t9, 0x8003 -/* 0938BC 7F060ECC 8DAF2A30 */ lw $t7, 0x2a30($t5) -/* 0938C0 7F060ED0 273911D8 */ addiu $t9, %lo(D_80035C88) # addiu $t9, $t9, 0x11d8 -/* 0938C4 7F060ED4 55E1001D */ bnel $t7, $at, .L7F060F4C -/* 0938C8 7F060ED8 8E0D00BC */ lw $t5, 0xbc($s0) -/* 0938CC 7F060EDC 8F210000 */ lw $at, ($t9) -/* 0938D0 7F060EE0 27A400A0 */ addiu $a0, $sp, 0xa0 -/* 0938D4 7F060EE4 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 0938D8 7F060EE8 AC810000 */ sw $at, ($a0) -/* 0938DC 7F060EEC 8F2E0004 */ lw $t6, 4($t9) -/* 0938E0 7F060EF0 AC8E0004 */ sw $t6, 4($a0) -/* 0938E4 7F060EF4 8F210008 */ lw $at, 8($t9) -/* 0938E8 7F060EF8 0FC162EF */ jal matrix_4x4_set_rotation_around_xyz -/* 0938EC 7F060EFC AC810008 */ sw $at, 8($a0) -/* 0938F0 7F060F00 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 0938F4 7F060F04 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 0938F8 7F060F08 27A50154 */ addiu $a1, $sp, 0x154 -/* 0938FC 7F060F0C 3C01C020 */ li $at, 0xC0200000 # -2.500000 -/* 093900 7F060F10 44818000 */ mtc1 $at, $f16 -/* 093904 7F060F14 C7A40194 */ lwc1 $f4, 0x194($sp) -/* 093908 7F060F18 3C018005 */ lui $at, %hi(D_80053E00) # $at, 0x8005 -/* 09390C 7F060F1C C4329F40 */ lwc1 $f18, %lo(D_80053E00)($at) -/* 093910 7F060F20 46102180 */ add.s $f6, $f4, $f16 -/* 093914 7F060F24 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 093918 7F060F28 C7AA0198 */ lwc1 $f10, 0x198($sp) -/* 09391C 7F060F2C 44818000 */ mtc1 $at, $f16 -/* 093920 7F060F30 C7A4019C */ lwc1 $f4, 0x19c($sp) -/* 093924 7F060F34 E7A60194 */ swc1 $f6, 0x194($sp) -/* 093928 7F060F38 46125200 */ add.s $f8, $f10, $f18 -/* 09392C 7F060F3C 46102180 */ add.s $f6, $f4, $f16 -/* 093930 7F060F40 E7A80198 */ swc1 $f8, 0x198($sp) -/* 093934 7F060F44 E7A6019C */ swc1 $f6, 0x19c($sp) -.L7F060F48: -/* 093938 7F060F48 8E0D00BC */ lw $t5, 0xbc($s0) -.L7F060F4C: -/* 09393C 7F060F4C 51A00017 */ beql $t5, $zero, .L7F060FAC -/* 093940 7F060F50 44802000 */ mtc1 $zero, $f4 -/* 093944 7F060F54 C7AA0194 */ lwc1 $f10, 0x194($sp) -/* 093948 7F060F58 C61200AC */ lwc1 $f18, 0xac($s0) -/* 09394C 7F060F5C C7A40198 */ lwc1 $f4, 0x198($sp) -/* 093950 7F060F60 2604007C */ addiu $a0, $s0, 0x7c -/* 093954 7F060F64 46125200 */ add.s $f8, $f10, $f18 -/* 093958 7F060F68 C7AA019C */ lwc1 $f10, 0x19c($sp) -/* 09395C 7F060F6C 27A50154 */ addiu $a1, $sp, 0x154 -/* 093960 7F060F70 E7A80194 */ swc1 $f8, 0x194($sp) -/* 093964 7F060F74 C61000B0 */ lwc1 $f16, 0xb0($s0) -/* 093968 7F060F78 46102180 */ add.s $f6, $f4, $f16 -/* 09396C 7F060F7C E7A60198 */ swc1 $f6, 0x198($sp) -/* 093970 7F060F80 C61200B4 */ lwc1 $f18, 0xb4($s0) -/* 093974 7F060F84 46125200 */ add.s $f8, $f10, $f18 -/* 093978 7F060F88 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 09397C 7F060F8C E7A8019C */ swc1 $f8, 0x19c($sp) -/* 093980 7F060F90 44800000 */ mtc1 $zero, $f0 -/* 093984 7F060F94 00000000 */ nop -/* 093988 7F060F98 E7A00184 */ swc1 $f0, 0x184($sp) -/* 09398C 7F060F9C E7A00188 */ swc1 $f0, 0x188($sp) -/* 093990 7F060FA0 1000000A */ b .L7F060FCC -/* 093994 7F060FA4 E7A0018C */ swc1 $f0, 0x18c($sp) -/* 093998 7F060FA8 44802000 */ mtc1 $zero, $f4 -.L7F060FAC: -/* 09399C 7F060FAC 44808000 */ mtc1 $zero, $f16 -/* 0939A0 7F060FB0 44803000 */ mtc1 $zero, $f6 -/* 0939A4 7F060FB4 44805000 */ mtc1 $zero, $f10 -/* 0939A8 7F060FB8 44800000 */ mtc1 $zero, $f0 -/* 0939AC 7F060FBC E6040078 */ swc1 $f4, 0x78($s0) -/* 0939B0 7F060FC0 E610006C */ swc1 $f16, 0x6c($s0) -/* 0939B4 7F060FC4 E6060070 */ swc1 $f6, 0x70($s0) -/* 0939B8 7F060FC8 E60A0074 */ swc1 $f10, 0x74($s0) -.L7F060FCC: -/* 0939BC 7F060FCC C61200CC */ lwc1 $f18, 0xcc($s0) -/* 0939C0 7F060FD0 44050000 */ mfc1 $a1, $f0 -/* 0939C4 7F060FD4 44060000 */ mfc1 $a2, $f0 -/* 0939C8 7F060FD8 E7B20010 */ swc1 $f18, 0x10($sp) -/* 0939CC 7F060FDC C60800D0 */ lwc1 $f8, 0xd0($s0) -/* 0939D0 7F060FE0 44070000 */ mfc1 $a3, $f0 -/* 0939D4 7F060FE4 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 0939D8 7F060FE8 E7A80014 */ swc1 $f8, 0x14($sp) -/* 0939DC 7F060FEC C60400D4 */ lwc1 $f4, 0xd4($s0) -/* 0939E0 7F060FF0 E7A40018 */ swc1 $f4, 0x18($sp) -/* 0939E4 7F060FF4 C61000D8 */ lwc1 $f16, 0xd8($s0) -/* 0939E8 7F060FF8 E7B0001C */ swc1 $f16, 0x1c($sp) -/* 0939EC 7F060FFC C60600DC */ lwc1 $f6, 0xdc($s0) -/* 0939F0 7F061000 E7A60020 */ swc1 $f6, 0x20($sp) -/* 0939F4 7F061004 C60A00E0 */ lwc1 $f10, 0xe0($s0) -/* 0939F8 7F061008 0FC1676C */ jal matrix_4x4_set_basis_and_position_target -/* 0939FC 7F06100C E7AA0024 */ swc1 $f10, 0x24($sp) -/* 093A00 7F061010 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 093A04 7F061014 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 093A08 7F061018 27A50154 */ addiu $a1, $sp, 0x154 -/* 093A0C 7F06101C C7B20194 */ lwc1 $f18, 0x194($sp) -/* 093A10 7F061020 C60801C8 */ lwc1 $f8, 0x1c8($s0) -/* 093A14 7F061024 C7B00198 */ lwc1 $f16, 0x198($sp) -/* 093A18 7F061028 C60601CC */ lwc1 $f6, 0x1cc($s0) -/* 093A1C 7F06102C 46089101 */ sub.s $f4, $f18, $f8 -/* 093A20 7F061030 C60801D0 */ lwc1 $f8, 0x1d0($s0) -/* 093A24 7F061034 C7B2019C */ lwc1 $f18, 0x19c($sp) -/* 093A28 7F061038 46068281 */ sub.s $f10, $f16, $f6 -/* 093A2C 7F06103C 44062000 */ mfc1 $a2, $f4 -/* 093A30 7F061040 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 093A34 7F061044 46089101 */ sub.s $f4, $f18, $f8 -/* 093A38 7F061048 44075000 */ mfc1 $a3, $f10 -/* 093A3C 7F06104C 24050000 */ li $a1, 0 -/* 093A40 7F061050 0FC16864 */ jal matrix_4x4_align -/* 093A44 7F061054 E7A40010 */ swc1 $f4, 0x10($sp) -/* 093A48 7F061058 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 093A4C 7F06105C 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 093A50 7F061060 27A50154 */ addiu $a1, $sp, 0x154 -/* 093A54 7F061064 27A40154 */ addiu $a0, $sp, 0x154 -/* 093A58 7F061068 0FC16132 */ jal matrix_4x4_copy -/* 093A5C 7F06106C 27A50264 */ addiu $a1, $sp, 0x264 -/* 093A60 7F061070 27A40194 */ addiu $a0, $sp, 0x194 -/* 093A64 7F061074 0FC16390 */ jal matrix_4x4_set_position -/* 093A68 7F061078 27A50264 */ addiu $a1, $sp, 0x264 -/* 093A6C 7F06107C 26050228 */ addiu $a1, $s0, 0x228 -/* 093A70 7F061080 AFA50044 */ sw $a1, 0x44($sp) -/* 093A74 7F061084 0FC16132 */ jal matrix_4x4_copy -/* 093A78 7F061088 27A40264 */ addiu $a0, $sp, 0x264 -/* 093A7C 7F06108C 26040268 */ addiu $a0, $s0, 0x268 -/* 093A80 7F061090 AFA40040 */ sw $a0, 0x40($sp) -/* 093A84 7F061094 0FC16132 */ jal matrix_4x4_copy -/* 093A88 7F061098 260502A8 */ addiu $a1, $s0, 0x2a8 -/* 093A8C 7F06109C 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 093A90 7F0610A0 00000000 */ nop -/* 093A94 7F0610A4 00402025 */ move $a0, $v0 -/* 093A98 7F0610A8 8FA50044 */ lw $a1, 0x44($sp) -/* 093A9C 7F0610AC 0FC1618D */ jal matrix_4x4_multiply_homogeneous -/* 093AA0 7F0610B0 8FA60040 */ lw $a2, 0x40($sp) -/* 093AA4 7F0610B4 240F0001 */ li $t7, 1 -/* 093AA8 7F0610B8 A20F000F */ sb $t7, 0xf($s0) -/* 093AAC 7F0610BC 0FC17540 */ jal get_ptr_weapon_model_header_line -/* 093AB0 7F0610C0 8FA400FC */ lw $a0, 0xfc($sp) -/* 093AB4 7F0610C4 10400017 */ beqz $v0, .L7F061124 -/* 093AB8 7F0610C8 8FA400FC */ lw $a0, 0xfc($sp) -/* 093ABC 7F0610CC 0FC1795B */ jal bondwalkItemCheckBitflags -/* 093AC0 7F0610D0 24050800 */ li $a1, 2048 -/* 093AC4 7F0610D4 10400013 */ beqz $v0, .L7F061124 -/* 093AC8 7F0610D8 8FA400FC */ lw $a0, 0xfc($sp) -/* 093ACC 7F0610DC 0FC1795B */ jal bondwalkItemCheckBitflags -/* 093AD0 7F0610E0 24052000 */ li $a1, 8192 -/* 093AD4 7F0610E4 54400010 */ bnezl $v0, .L7F061128 -/* 093AD8 7F0610E8 A200000F */ sb $zero, 0xf($s0) -/* 093ADC 7F0610EC 8E020024 */ lw $v0, 0x24($s0) -/* 093AE0 7F0610F0 24010006 */ li $at, 6 -/* 093AE4 7F0610F4 1041000B */ beq $v0, $at, .L7F061124 -/* 093AE8 7F0610F8 24010007 */ li $at, 7 -/* 093AEC 7F0610FC 5041000A */ beql $v0, $at, .L7F061128 -/* 093AF0 7F061100 A200000F */ sb $zero, 0xf($s0) -/* 093AF4 7F061104 0FC174DB */ jal Gun_hand_without_item -/* 093AF8 7F061108 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 093AFC 7F06110C 50400006 */ beql $v0, $zero, .L7F061128 -/* 093B00 7F061110 A200000F */ sb $zero, 0xf($s0) -/* 093B04 7F061114 0FC174EC */ jal get_itemtype_in_hand -/* 093B08 7F061118 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 093B0C 7F06111C 54400003 */ bnezl $v0, .L7F06112C -/* 093B10 7F061120 8E18002C */ lw $t8, 0x2c($s0) -.L7F061124: -/* 093B14 7F061124 A200000F */ sb $zero, 0xf($s0) -.L7F061128: -/* 093B18 7F061128 8E18002C */ lw $t8, 0x2c($s0) -.L7F06112C: -/* 093B1C 7F06112C 8FA400FC */ lw $a0, 0xfc($sp) -/* 093B20 7F061130 5F000007 */ bgtzl $t8, .L7F061150 -/* 093B24 7F061134 8219000F */ lb $t9, 0xf($s0) -/* 093B28 7F061138 0FC1795B */ jal bondwalkItemCheckBitflags -/* 093B2C 7F06113C 24050002 */ li $a1, 2 -/* 093B30 7F061140 50400003 */ beql $v0, $zero, .L7F061150 -/* 093B34 7F061144 8219000F */ lb $t9, 0xf($s0) -/* 093B38 7F061148 A200000F */ sb $zero, 0xf($s0) -/* 093B3C 7F06114C 8219000F */ lb $t9, 0xf($s0) -.L7F061150: -/* 093B40 7F061150 8FAD02A8 */ lw $t5, 0x2a8($sp) -/* 093B44 7F061154 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 093B48 7F061158 132002CF */ beqz $t9, .L7F061C98 -/* 093B4C 7F06115C 000D78C0 */ sll $t7, $t5, 3 -/* 093B50 7F061160 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 093B54 7F061164 01ED7823 */ subu $t7, $t7, $t5 -/* 093B58 7F061168 000F7880 */ sll $t7, $t7, 2 -/* 093B5C 7F06116C 01CF1021 */ addu $v0, $t6, $t7 -/* 093B60 7F061170 8444081E */ lh $a0, 0x81e($v0) -/* 093B64 7F061174 24420810 */ addiu $v0, $v0, 0x810 -/* 093B68 7F061178 AFA201A0 */ sw $v0, 0x1a0($sp) -/* 093B6C 7F06117C 0004C180 */ sll $t8, $a0, 6 -/* 093B70 7F061180 03002025 */ move $a0, $t8 -/* 093B74 7F061184 AFA00100 */ sw $zero, 0x100($sp) -/* 093B78 7F061188 0FC2F2B1 */ jal dynAllocate -/* 093B7C 7F06118C 00001825 */ move $v1, $zero -/* 093B80 7F061190 8FB901A0 */ lw $t9, 0x1a0($sp) -/* 093B84 7F061194 AFA202A4 */ sw $v0, 0x2a4($sp) -/* 093B88 7F061198 8FA30100 */ lw $v1, 0x100($sp) -/* 093B8C 7F06119C 872D000E */ lh $t5, 0xe($t9) -/* 093B90 7F0611A0 19A0000D */ blez $t5, .L7F0611D8 -/* 093B94 7F0611A4 00402025 */ move $a0, $v0 -/* 093B98 7F0611A8 AFA30100 */ sw $v1, 0x100($sp) -.L7F0611AC: -/* 093B9C 7F0611AC 0FC1611E */ jal matrix_4x4_set_identity -/* 093BA0 7F0611B0 AFA40044 */ sw $a0, 0x44($sp) -/* 093BA4 7F0611B4 8FAE01A0 */ lw $t6, 0x1a0($sp) -/* 093BA8 7F0611B8 8FA30100 */ lw $v1, 0x100($sp) -/* 093BAC 7F0611BC 8FA40044 */ lw $a0, 0x44($sp) -/* 093BB0 7F0611C0 85CF000E */ lh $t7, 0xe($t6) -/* 093BB4 7F0611C4 24630001 */ addiu $v1, $v1, 1 -/* 093BB8 7F0611C8 24840040 */ addiu $a0, $a0, 0x40 -/* 093BBC 7F0611CC 006F082A */ slt $at, $v1, $t7 -/* 093BC0 7F0611D0 5420FFF6 */ bnezl $at, .L7F0611AC -/* 093BC4 7F0611D4 AFA30100 */ sw $v1, 0x100($sp) -.L7F0611D8: -/* 093BC8 7F0611D8 0FC1D75F */ jal modelCalculateRwDataLen -/* 093BCC 7F0611DC 8FA401A0 */ lw $a0, 0x1a0($sp) -/* 093BD0 7F0611E0 260402F8 */ addiu $a0, $s0, 0x2f8 -/* 093BD4 7F0611E4 8FA501A0 */ lw $a1, 0x1a0($sp) -/* 093BD8 7F0611E8 AFA40044 */ sw $a0, 0x44($sp) -/* 093BDC 7F0611EC 0FC1D7F9 */ jal modelInit -/* 093BE0 7F0611F0 26060318 */ addiu $a2, $s0, 0x318 -/* 093BE4 7F0611F4 8FA40044 */ lw $a0, 0x44($sp) -/* 093BE8 7F0611F8 0FC17B8C */ jal sub_GAME_7F05E978 -/* 093BEC 7F0611FC 24050001 */ li $a1, 1 -/* 093BF0 7F061200 8FA40044 */ lw $a0, 0x44($sp) -/* 093BF4 7F061204 0FC17BD3 */ jal sub_GAME_7F05EA94 -/* 093BF8 7F061208 8205000E */ lb $a1, 0xe($s0) -/* 093BFC 7F06120C 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 093C00 7F061210 8F020008 */ lw $v0, 8($t8) -/* 093C04 7F061214 8C440004 */ lw $a0, 4($v0) -/* 093C08 7F061218 50800008 */ beql $a0, $zero, .L7F06123C -/* 093C0C 7F06121C 8C43000C */ lw $v1, 0xc($v0) -/* 093C10 7F061220 8C830004 */ lw $v1, 4($a0) -/* 093C14 7F061224 94790004 */ lhu $t9, 4($v1) -/* 093C18 7F061228 00196880 */ sll $t5, $t9, 2 -/* 093C1C 7F06122C 020D7021 */ addu $t6, $s0, $t5 -/* 093C20 7F061230 25CF0318 */ addiu $t7, $t6, 0x318 -/* 093C24 7F061234 AFAF010C */ sw $t7, 0x10c($sp) -/* 093C28 7F061238 8C43000C */ lw $v1, 0xc($v0) -.L7F06123C: -/* 093C2C 7F06123C 50600004 */ beql $v1, $zero, .L7F061250 -/* 093C30 7F061240 8FB902A4 */ lw $t9, 0x2a4($sp) -/* 093C34 7F061244 8C780004 */ lw $t8, 4($v1) -/* 093C38 7F061248 AFB80108 */ sw $t8, 0x108($sp) -/* 093C3C 7F06124C 8FB902A4 */ lw $t9, 0x2a4($sp) -.L7F061250: -/* 093C40 7F061250 24050400 */ li $a1, 1024 -/* 093C44 7F061254 AE190304 */ sw $t9, 0x304($s0) -/* 093C48 7F061258 0FC1795B */ jal bondwalkItemCheckBitflags -/* 093C4C 7F06125C 8FA400FC */ lw $a0, 0xfc($sp) -/* 093C50 7F061260 10400008 */ beqz $v0, .L7F061284 -/* 093C54 7F061264 00000000 */ nop -/* 093C58 7F061268 8FAD02A8 */ lw $t5, 0x2a8($sp) -/* 093C5C 7F06126C 24010001 */ li $at, 1 -/* 093C60 7F061270 15A10004 */ bne $t5, $at, .L7F061284 -/* 093C64 7F061274 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 093C68 7F061278 44816000 */ mtc1 $at, $f12 -/* 093C6C 7F06127C 0FC16397 */ jal matrix_column_1_scalar_multiply -/* 093C70 7F061280 27A50264 */ addiu $a1, $sp, 0x264 -.L7F061284: -/* 093C74 7F061284 3C018005 */ lui $at, %hi(D_80053E04) # $at, 0x8005 -/* 093C78 7F061288 C42C9F44 */ lwc1 $f12, %lo(D_80053E04)($at) -/* 093C7C 7F06128C 0FC163C9 */ jal matrix_scalar_multiply -/* 093C80 7F061290 27A50264 */ addiu $a1, $sp, 0x264 -/* 093C84 7F061294 27A40264 */ addiu $a0, $sp, 0x264 -/* 093C88 7F061298 0FC16132 */ jal matrix_4x4_copy -/* 093C8C 7F06129C 8FA502A4 */ lw $a1, 0x2a4($sp) -/* 093C90 7F0612A0 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 093C94 7F0612A4 3C0E8003 */ lui $t6, %hi(skeleton_gun_revolver) # $t6, 0x8003 -/* 093C98 7F0612A8 25CE666C */ addiu $t6, %lo(skeleton_gun_revolver) # addiu $t6, $t6, 0x666c -/* 093C9C 7F0612AC 8DF80004 */ lw $t8, 4($t7) -/* 093CA0 7F0612B0 55D80077 */ bnel $t6, $t8, .L7F061490 -/* 093CA4 7F0612B4 8FA2010C */ lw $v0, 0x10c($sp) -/* 093CA8 7F0612B8 8DE20008 */ lw $v0, 8($t7) -/* 093CAC 7F0612BC 8FB900FC */ lw $t9, 0xfc($sp) -/* 093CB0 7F0612C0 24010012 */ li $at, 18 -/* 093CB4 7F0612C4 8C430010 */ lw $v1, 0x10($v0) -/* 093CB8 7F0612C8 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 093CBC 7F0612CC 50600040 */ beql $v1, $zero, .L7F0613D0 -/* 093CC0 7F0612D0 8C430014 */ lw $v1, 0x14($v0) -/* 093CC4 7F0612D4 44806000 */ mtc1 $zero, $f12 -/* 093CC8 7F0612D8 17210020 */ bne $t9, $at, .L7F06135C -/* 093CCC 7F0612DC 8C640004 */ lw $a0, 4($v1) -/* 093CD0 7F0612E0 8E0D0024 */ lw $t5, 0x24($s0) -/* 093CD4 7F0612E4 24010001 */ li $at, 1 -/* 093CD8 7F0612E8 55A10011 */ bnel $t5, $at, .L7F061330 -/* 093CDC 7F0612EC 8E18002C */ lw $t8, 0x2c($s0) -/* 093CE0 7F0612F0 8E18002C */ lw $t8, 0x2c($s0) -/* 093CE4 7F0612F4 8E0E0020 */ lw $t6, 0x20($s0) -/* 093CE8 7F0612F8 3C018005 */ lui $at, %hi(D_80053E08) # $at, 0x8005 -/* 093CEC 7F0612FC 00187880 */ sll $t7, $t8, 2 -/* 093CF0 7F061300 01F87821 */ addu $t7, $t7, $t8 -/* 093CF4 7F061304 01CFC823 */ subu $t9, $t6, $t7 -/* 093CF8 7F061308 272D0019 */ addiu $t5, $t9, 0x19 -/* 093CFC 7F06130C 448D8000 */ mtc1 $t5, $f16 -/* 093D00 7F061310 C42A9F48 */ lwc1 $f10, %lo(D_80053E08)($at) -/* 093D04 7F061314 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 093D08 7F061318 468081A0 */ cvt.s.w $f6, $f16 -/* 093D0C 7F06131C 44814000 */ mtc1 $at, $f8 -/* 093D10 7F061320 460A3482 */ mul.s $f18, $f6, $f10 -/* 093D14 7F061324 1000001D */ b .L7F06139C -/* 093D18 7F061328 46089303 */ div.s $f12, $f18, $f8 -/* 093D1C 7F06132C 8E18002C */ lw $t8, 0x2c($s0) -.L7F061330: -/* 093D20 7F061330 240E0006 */ li $t6, 6 -/* 093D24 7F061334 3C018005 */ lui $at, %hi(D_80053E0C) # $at, 0x8005 -/* 093D28 7F061338 01D87823 */ subu $t7, $t6, $t8 -/* 093D2C 7F06133C 448F2000 */ mtc1 $t7, $f4 -/* 093D30 7F061340 C4269F4C */ lwc1 $f6, %lo(D_80053E0C)($at) -/* 093D34 7F061344 3C0140C0 */ li $at, 0x40C00000 # 6.000000 -/* 093D38 7F061348 46802420 */ cvt.s.w $f16, $f4 -/* 093D3C 7F06134C 44819000 */ mtc1 $at, $f18 -/* 093D40 7F061350 46068282 */ mul.s $f10, $f16, $f6 -/* 093D44 7F061354 10000011 */ b .L7F06139C -/* 093D48 7F061358 46125303 */ div.s $f12, $f10, $f18 -.L7F06135C: -/* 093D4C 7F06135C 8E190024 */ lw $t9, 0x24($s0) -/* 093D50 7F061360 24010001 */ li $at, 1 -/* 093D54 7F061364 1721000D */ bne $t9, $at, .L7F06139C -/* 093D58 7F061368 00000000 */ nop -/* 093D5C 7F06136C 8E020020 */ lw $v0, 0x20($s0) -/* 093D60 7F061370 28410005 */ slti $at, $v0, 5 -/* 093D64 7F061374 10200009 */ beqz $at, .L7F06139C -/* 093D68 7F061378 00000000 */ nop -/* 093D6C 7F06137C 44824000 */ mtc1 $v0, $f8 -/* 093D70 7F061380 3C018005 */ lui $at, %hi(D_80053E10) # $at, 0x8005 -/* 093D74 7F061384 C4309F50 */ lwc1 $f16, %lo(D_80053E10)($at) -/* 093D78 7F061388 46804120 */ cvt.s.w $f4, $f8 -/* 093D7C 7F06138C 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 093D80 7F061390 44815000 */ mtc1 $at, $f10 -/* 093D84 7F061394 46102182 */ mul.s $f6, $f4, $f16 -/* 093D88 7F061398 460A3303 */ div.s $f12, $f6, $f10 -.L7F06139C: -/* 093D8C 7F06139C 0FC162CC */ jal matrix_4x4_set_rotation_around_z -/* 093D90 7F0613A0 AFA4009C */ sw $a0, 0x9c($sp) -/* 093D94 7F0613A4 8FA4009C */ lw $a0, 0x9c($sp) -/* 093D98 7F0613A8 0FC16390 */ jal matrix_4x4_set_position -/* 093D9C 7F0613AC 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 093DA0 7F0613B0 8FA602A4 */ lw $a2, 0x2a4($sp) -/* 093DA4 7F0613B4 27A40264 */ addiu $a0, $sp, 0x264 -/* 093DA8 7F0613B8 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 093DAC 7F0613BC 0FC1615C */ jal matrix_4x4_multiply -/* 093DB0 7F0613C0 24C600C0 */ addiu $a2, $a2, 0xc0 -/* 093DB4 7F0613C4 8FAD01A0 */ lw $t5, 0x1a0($sp) -/* 093DB8 7F0613C8 8DA20008 */ lw $v0, 8($t5) -/* 093DBC 7F0613CC 8C430014 */ lw $v1, 0x14($v0) -.L7F0613D0: -/* 093DC0 7F0613D0 5060002F */ beql $v1, $zero, .L7F061490 -/* 093DC4 7F0613D4 8FA2010C */ lw $v0, 0x10c($sp) -/* 093DC8 7F0613D8 8E0E0024 */ lw $t6, 0x24($s0) -/* 093DCC 7F0613DC 24010001 */ li $at, 1 -/* 093DD0 7F0613E0 8C640004 */ lw $a0, 4($v1) -/* 093DD4 7F0613E4 15C10022 */ bne $t6, $at, .L7F061470 -/* 093DD8 7F0613E8 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 093DDC 7F0613EC 8E020020 */ lw $v0, 0x20($s0) -/* 093DE0 7F0613F0 24180005 */ li $t8, 5 -/* 093DE4 7F0613F4 28410002 */ slti $at, $v0, 2 -/* 093DE8 7F0613F8 1020000C */ beqz $at, .L7F06142C -/* 093DEC 7F0613FC 03027823 */ subu $t7, $t8, $v0 -/* 093DF0 7F061400 44829000 */ mtc1 $v0, $f18 -/* 093DF4 7F061404 3C018005 */ lui $at, %hi(D_80053E14) # $at, 0x8005 -/* 093DF8 7F061408 C4309F54 */ lwc1 $f16, %lo(D_80053E14)($at) -/* 093DFC 7F06140C 46809220 */ cvt.s.w $f8, $f18 -/* 093E00 7F061410 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 093E04 7F061414 44815000 */ mtc1 $at, $f10 -/* 093E08 7F061418 46004107 */ neg.s $f4, $f8 -/* 093E0C 7F06141C 46102002 */ mul.s $f0, $f4, $f16 -/* 093E10 7F061420 46000180 */ add.s $f6, $f0, $f0 -/* 093E14 7F061424 1000000B */ b .L7F061454 -/* 093E18 7F061428 460A3303 */ div.s $f12, $f6, $f10 -.L7F06142C: -/* 093E1C 7F06142C 448F9000 */ mtc1 $t7, $f18 -/* 093E20 7F061430 3C018005 */ lui $at, %hi(D_80053E18) # $at, 0x8005 -/* 093E24 7F061434 C4309F58 */ lwc1 $f16, %lo(D_80053E18)($at) -/* 093E28 7F061438 46809220 */ cvt.s.w $f8, $f18 -/* 093E2C 7F06143C 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 093E30 7F061440 44815000 */ mtc1 $at, $f10 -/* 093E34 7F061444 46004107 */ neg.s $f4, $f8 -/* 093E38 7F061448 46102002 */ mul.s $f0, $f4, $f16 -/* 093E3C 7F06144C 46000180 */ add.s $f6, $f0, $f0 -/* 093E40 7F061450 460A3303 */ div.s $f12, $f6, $f10 -.L7F061454: -/* 093E44 7F061454 0FC16286 */ jal matrix_4x4_set_rotation_around_x -/* 093E48 7F061458 AFA40094 */ sw $a0, 0x94($sp) -/* 093E4C 7F06145C 8FA40094 */ lw $a0, 0x94($sp) -/* 093E50 7F061460 0FC16390 */ jal matrix_4x4_set_position -/* 093E54 7F061464 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 093E58 7F061468 10000004 */ b .L7F06147C -/* 093E5C 7F06146C 8FA602A4 */ lw $a2, 0x2a4($sp) -.L7F061470: -/* 093E60 7F061470 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 093E64 7F061474 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 093E68 7F061478 8FA602A4 */ lw $a2, 0x2a4($sp) -.L7F06147C: -/* 093E6C 7F06147C 27A40264 */ addiu $a0, $sp, 0x264 -/* 093E70 7F061480 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 093E74 7F061484 0FC1615C */ jal matrix_4x4_multiply -/* 093E78 7F061488 24C60100 */ addiu $a2, $a2, 0x100 -/* 093E7C 7F06148C 8FA2010C */ lw $v0, 0x10c($sp) -.L7F061490: -/* 093E80 7F061490 50400003 */ beql $v0, $zero, .L7F0614A0 -/* 093E84 7F061494 8FB90108 */ lw $t9, 0x108($sp) -/* 093E88 7F061498 AC400000 */ sw $zero, ($v0) -/* 093E8C 7F06149C 8FB90108 */ lw $t9, 0x108($sp) -.L7F0614A0: -/* 093E90 7F0614A0 53200142 */ beql $t9, $zero, .L7F0619AC -/* 093E94 7F0614A4 C6100260 */ lwc1 $f16, 0x260($s0) -/* 093E98 7F0614A8 0C00262C */ jal randomGetNext -/* 093E9C 7F0614AC 00000000 */ nop -/* 093EA0 7F0614B0 44829000 */ mtc1 $v0, $f18 -/* 093EA4 7F0614B4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 093EA8 7F0614B8 04410004 */ bgez $v0, .L7F0614CC -/* 093EAC 7F0614BC 46809220 */ cvt.s.w $f8, $f18 -/* 093EB0 7F0614C0 44812000 */ mtc1 $at, $f4 -/* 093EB4 7F0614C4 00000000 */ nop -/* 093EB8 7F0614C8 46044200 */ add.s $f8, $f8, $f4 -.L7F0614CC: -/* 093EBC 7F0614CC 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 093EC0 7F0614D0 44818000 */ mtc1 $at, $f16 -/* 093EC4 7F0614D4 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 093EC8 7F0614D8 44815000 */ mtc1 $at, $f10 -/* 093ECC 7F0614DC 46104182 */ mul.s $f6, $f8, $f16 -/* 093ED0 7F0614E0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 093ED4 7F0614E4 44812000 */ mtc1 $at, $f4 -/* 093ED8 7F0614E8 8FAD00F8 */ lw $t5, 0xf8($sp) -/* 093EDC 7F0614EC 8FA400FC */ lw $a0, 0xfc($sp) -/* 093EE0 7F0614F0 24050001 */ li $a1, 1 -/* 093EE4 7F0614F4 460A3482 */ mul.s $f18, $f6, $f10 -/* 093EE8 7F0614F8 46049200 */ add.s $f8, $f18, $f4 -/* 093EEC 7F0614FC E7A80080 */ swc1 $f8, 0x80($sp) -/* 093EF0 7F061500 C5B00000 */ lwc1 $f16, ($t5) -/* 093EF4 7F061504 0FC1795B */ jal bondwalkItemCheckBitflags -/* 093EF8 7F061508 E7B0007C */ swc1 $f16, 0x7c($sp) -/* 093EFC 7F06150C 10400018 */ beqz $v0, .L7F061570 -/* 093F00 7F061510 8FA40108 */ lw $a0, 0x108($sp) -/* 093F04 7F061514 0C00262C */ jal randomGetNext -/* 093F08 7F061518 00000000 */ nop -/* 093F0C 7F06151C 44823000 */ mtc1 $v0, $f6 -/* 093F10 7F061520 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 093F14 7F061524 04410004 */ bgez $v0, .L7F061538 -/* 093F18 7F061528 468032A0 */ cvt.s.w $f10, $f6 -/* 093F1C 7F06152C 44819000 */ mtc1 $at, $f18 -/* 093F20 7F061530 00000000 */ nop -/* 093F24 7F061534 46125280 */ add.s $f10, $f10, $f18 -.L7F061538: -/* 093F28 7F061538 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 093F2C 7F06153C 44812000 */ mtc1 $at, $f4 -/* 093F30 7F061540 3C018005 */ lui $at, %hi(D_80053E1C) # $at, 0x8005 -/* 093F34 7F061544 C4309F5C */ lwc1 $f16, %lo(D_80053E1C)($at) -/* 093F38 7F061548 46045202 */ mul.s $f8, $f10, $f4 -/* 093F3C 7F06154C 27A50224 */ addiu $a1, $sp, 0x224 -/* 093F40 7F061550 46104302 */ mul.s $f12, $f8, $f16 -/* 093F44 7F061554 0FC162CC */ jal matrix_4x4_set_rotation_around_z -/* 093F48 7F061558 00000000 */ nop -/* 093F4C 7F06155C 8FA40108 */ lw $a0, 0x108($sp) -/* 093F50 7F061560 0FC16390 */ jal matrix_4x4_set_position -/* 093F54 7F061564 27A50224 */ addiu $a1, $sp, 0x224 -/* 093F58 7F061568 10000004 */ b .L7F06157C -/* 093F5C 7F06156C C7AC0080 */ lwc1 $f12, 0x80($sp) -.L7F061570: -/* 093F60 7F061570 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 093F64 7F061574 27A50224 */ addiu $a1, $sp, 0x224 -/* 093F68 7F061578 C7AC0080 */ lwc1 $f12, 0x80($sp) -.L7F06157C: -/* 093F6C 7F06157C 0FC163C9 */ jal matrix_scalar_multiply -/* 093F70 7F061580 27A50224 */ addiu $a1, $sp, 0x224 -/* 093F74 7F061584 C7AC007C */ lwc1 $f12, 0x7c($sp) -/* 093F78 7F061588 0FC163AF */ jal matrix_column_3_scalar_multiply -/* 093F7C 7F06158C 27A50224 */ addiu $a1, $sp, 0x224 -/* 093F80 7F061590 27A40264 */ addiu $a0, $sp, 0x264 -/* 093F84 7F061594 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 093F88 7F061598 27A50224 */ addiu $a1, $sp, 0x224 -/* 093F8C 7F06159C 8FA502A4 */ lw $a1, 0x2a4($sp) -/* 093F90 7F0615A0 27A40224 */ addiu $a0, $sp, 0x224 -/* 093F94 7F0615A4 0FC16132 */ jal matrix_4x4_copy -/* 093F98 7F0615A8 24A50040 */ addiu $a1, $a1, 0x40 -/* 093F9C 7F0615AC C7A60254 */ lwc1 $f6, 0x254($sp) -/* 093FA0 7F0615B0 E60602E8 */ swc1 $f6, 0x2e8($s0) -/* 093FA4 7F0615B4 C7B20258 */ lwc1 $f18, 0x258($sp) -/* 093FA8 7F0615B8 E61202EC */ swc1 $f18, 0x2ec($s0) -/* 093FAC 7F0615BC C7AA025C */ lwc1 $f10, 0x25c($sp) -/* 093FB0 7F0615C0 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 093FB4 7F0615C4 E60A02F0 */ swc1 $f10, 0x2f0($s0) -/* 093FB8 7F0615C8 00402025 */ move $a0, $v0 -/* 093FBC 7F0615CC 0FC16247 */ jal mtx4TransformVecInPlace -/* 093FC0 7F0615D0 260502E8 */ addiu $a1, $s0, 0x2e8 -/* 093FC4 7F0615D4 C7A4025C */ lwc1 $f4, 0x25c($sp) -/* 093FC8 7F0615D8 820E000D */ lb $t6, 0xd($s0) -/* 093FCC 7F0615DC 46002207 */ neg.s $f8, $f4 -/* 093FD0 7F0615E0 11C000EE */ beqz $t6, .L7F06199C -/* 093FD4 7F0615E4 E60802F4 */ swc1 $f8, 0x2f4($s0) -/* 093FD8 7F0615E8 8FB8010C */ lw $t8, 0x10c($sp) -/* 093FDC 7F0615EC 240F0001 */ li $t7, 1 -/* 093FE0 7F0615F0 53000003 */ beql $t8, $zero, .L7F061600 -/* 093FE4 7F0615F4 8FB901A0 */ lw $t9, 0x1a0($sp) -/* 093FE8 7F0615F8 AF0F0000 */ sw $t7, ($t8) -/* 093FEC 7F0615FC 8FB901A0 */ lw $t9, 0x1a0($sp) -.L7F061600: -/* 093FF0 7F061600 8F2D0008 */ lw $t5, 8($t9) -/* 093FF4 7F061604 8DA30008 */ lw $v1, 8($t5) -/* 093FF8 7F061608 5060006D */ beql $v1, $zero, .L7F0617C0 -/* 093FFC 7F06160C 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 094000 7F061610 8C620004 */ lw $v0, 4($v1) -/* 094004 7F061614 C7A60224 */ lwc1 $f6, 0x224($sp) -/* 094008 7F061618 C7A40234 */ lwc1 $f4, 0x234($sp) -/* 09400C 7F06161C C4500000 */ lwc1 $f16, ($v0) -/* 094010 7F061620 C44A0004 */ lwc1 $f10, 4($v0) -/* 094014 7F061624 46068482 */ mul.s $f18, $f16, $f6 -/* 094018 7F061628 C4460008 */ lwc1 $f6, 8($v0) -/* 09401C 7F06162C 46045202 */ mul.s $f8, $f10, $f4 -/* 094020 7F061630 C7AA0244 */ lwc1 $f10, 0x244($sp) -/* 094024 7F061634 460A3102 */ mul.s $f4, $f6, $f10 -/* 094028 7F061638 46089400 */ add.s $f16, $f18, $f8 -/* 09402C 7F06163C C7A80254 */ lwc1 $f8, 0x254($sp) -/* 094030 7F061640 46048480 */ add.s $f18, $f16, $f4 -/* 094034 7F061644 C7B00228 */ lwc1 $f16, 0x228($sp) -/* 094038 7F061648 46124180 */ add.s $f6, $f8, $f18 -/* 09403C 7F06164C C7B20238 */ lwc1 $f18, 0x238($sp) -/* 094040 7F061650 E7A60084 */ swc1 $f6, 0x84($sp) -/* 094044 7F061654 C44A0000 */ lwc1 $f10, ($v0) -/* 094048 7F061658 C4480004 */ lwc1 $f8, 4($v0) -/* 09404C 7F06165C 46105102 */ mul.s $f4, $f10, $f16 -/* 094050 7F061660 C4500008 */ lwc1 $f16, 8($v0) -/* 094054 7F061664 46124182 */ mul.s $f6, $f8, $f18 -/* 094058 7F061668 C7A80248 */ lwc1 $f8, 0x248($sp) -/* 09405C 7F06166C 46088482 */ mul.s $f18, $f16, $f8 -/* 094060 7F061670 46062280 */ add.s $f10, $f4, $f6 -/* 094064 7F061674 C7A60258 */ lwc1 $f6, 0x258($sp) -/* 094068 7F061678 46125100 */ add.s $f4, $f10, $f18 -/* 09406C 7F06167C C7AA022C */ lwc1 $f10, 0x22c($sp) -/* 094070 7F061680 46043400 */ add.s $f16, $f6, $f4 -/* 094074 7F061684 C7A4023C */ lwc1 $f4, 0x23c($sp) -/* 094078 7F061688 E7B00088 */ swc1 $f16, 0x88($sp) -/* 09407C 7F06168C C4480000 */ lwc1 $f8, ($v0) -/* 094080 7F061690 C4460004 */ lwc1 $f6, 4($v0) -/* 094084 7F061694 460A4482 */ mul.s $f18, $f8, $f10 -/* 094088 7F061698 C44A0008 */ lwc1 $f10, 8($v0) -/* 09408C 7F06169C 46043402 */ mul.s $f16, $f6, $f4 -/* 094090 7F0616A0 C7A6024C */ lwc1 $f6, 0x24c($sp) -/* 094094 7F0616A4 46065102 */ mul.s $f4, $f10, $f6 -/* 094098 7F0616A8 46109200 */ add.s $f8, $f18, $f16 -/* 09409C 7F0616AC C7B0025C */ lwc1 $f16, 0x25c($sp) -/* 0940A0 7F0616B0 46044480 */ add.s $f18, $f8, $f4 -/* 0940A4 7F0616B4 46128280 */ add.s $f10, $f16, $f18 -/* 0940A8 7F0616B8 0C00262C */ jal randomGetNext -/* 0940AC 7F0616BC E7AA008C */ swc1 $f10, 0x8c($sp) -/* 0940B0 7F0616C0 44823000 */ mtc1 $v0, $f6 -/* 0940B4 7F0616C4 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 0940B8 7F0616C8 04410005 */ bgez $v0, .L7F0616E0 -/* 0940BC 7F0616CC 46803220 */ cvt.s.w $f8, $f6 -/* 0940C0 7F0616D0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0940C4 7F0616D4 44812000 */ mtc1 $at, $f4 -/* 0940C8 7F0616D8 00000000 */ nop -/* 0940CC 7F0616DC 46044200 */ add.s $f8, $f8, $f4 -.L7F0616E0: -/* 0940D0 7F0616E0 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0940D4 7F0616E4 44818000 */ mtc1 $at, $f16 -/* 0940D8 7F0616E8 3C018005 */ lui $at, %hi(D_80053E20) # $at, 0x8005 -/* 0940DC 7F0616EC C42A9F60 */ lwc1 $f10, %lo(D_80053E20)($at) -/* 0940E0 7F0616F0 46104482 */ mul.s $f18, $f8, $f16 -/* 0940E4 7F0616F4 C7B00088 */ lwc1 $f16, 0x88($sp) -/* 0940E8 7F0616F8 C7A40084 */ lwc1 $f4, 0x84($sp) -/* 0940EC 7F0616FC 46002207 */ neg.s $f8, $f4 -/* 0940F0 7F061700 460A9182 */ mul.s $f6, $f18, $f10 -/* 0940F4 7F061704 C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 0940F8 7F061708 46008487 */ neg.s $f18, $f16 -/* 0940FC 7F06170C 44064000 */ mfc1 $a2, $f8 -/* 094100 7F061710 44079000 */ mfc1 $a3, $f18 -/* 094104 7F061714 44053000 */ mfc1 $a1, $f6 -/* 094108 7F061718 46005187 */ neg.s $f6, $f10 -/* 09410C 7F06171C 0FC16864 */ jal matrix_4x4_align -/* 094110 7F061720 E7A60010 */ swc1 $f6, 0x10($sp) -/* 094114 7F061724 3C018005 */ lui $at, %hi(D_80053E24) # $at, 0x8005 -/* 094118 7F061728 C4249F64 */ lwc1 $f4, %lo(D_80053E24)($at) -/* 09411C 7F06172C C7A80080 */ lwc1 $f8, 0x80($sp) -/* 094120 7F061730 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 094124 7F061734 46082302 */ mul.s $f12, $f4, $f8 -/* 094128 7F061738 0FC163C9 */ jal matrix_scalar_multiply -/* 09412C 7F06173C 00000000 */ nop -/* 094130 7F061740 C7B00194 */ lwc1 $f16, 0x194($sp) -/* 094134 7F061744 C61201C8 */ lwc1 $f18, 0x1c8($s0) -/* 094138 7F061748 C7A60198 */ lwc1 $f6, 0x198($sp) -/* 09413C 7F06174C C60401CC */ lwc1 $f4, 0x1cc($s0) -/* 094140 7F061750 46128281 */ sub.s $f10, $f16, $f18 -/* 094144 7F061754 C61201D0 */ lwc1 $f18, 0x1d0($s0) -/* 094148 7F061758 C7B0019C */ lwc1 $f16, 0x19c($sp) -/* 09414C 7F06175C 46043201 */ sub.s $f8, $f6, $f4 -/* 094150 7F061760 44065000 */ mfc1 $a2, $f10 -/* 094154 7F061764 27A40114 */ addiu $a0, $sp, 0x114 -/* 094158 7F061768 46128281 */ sub.s $f10, $f16, $f18 -/* 09415C 7F06176C 44074000 */ mfc1 $a3, $f8 -/* 094160 7F061770 24050000 */ li $a1, 0 -/* 094164 7F061774 0FC16800 */ jal matrix_4x4_set_rotation_axis_angle -/* 094168 7F061778 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 09416C 7F06177C 27A40114 */ addiu $a0, $sp, 0x114 -/* 094170 7F061780 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 094174 7F061784 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 094178 7F061788 C7AC007C */ lwc1 $f12, 0x7c($sp) -/* 09417C 7F06178C 0FC1640A */ jal matrix_row_3_scalar_multiply -/* 094180 7F061790 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 094184 7F061794 27A40154 */ addiu $a0, $sp, 0x154 -/* 094188 7F061798 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 09418C 7F06179C 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 094190 7F0617A0 27A40084 */ addiu $a0, $sp, 0x84 -/* 094194 7F0617A4 0FC16390 */ jal matrix_4x4_set_position -/* 094198 7F0617A8 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 09419C 7F0617AC 8FA502A4 */ lw $a1, 0x2a4($sp) -/* 0941A0 7F0617B0 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 0941A4 7F0617B4 0FC16132 */ jal matrix_4x4_copy -/* 0941A8 7F0617B8 24A50080 */ addiu $a1, $a1, 0x80 -/* 0941AC 7F0617BC 8FAF01A0 */ lw $t7, 0x1a0($sp) -.L7F0617C0: -/* 0941B0 7F0617C0 3C0E8003 */ lui $t6, %hi(skeleton_gun_kf7) # $t6, 0x8003 -/* 0941B4 7F0617C4 25CE66AC */ addiu $t6, %lo(skeleton_gun_kf7) # addiu $t6, $t6, 0x66ac -/* 0941B8 7F0617C8 8DF80004 */ lw $t8, 4($t7) -/* 0941BC 7F0617CC 55D80074 */ bnel $t6, $t8, .L7F0619A0 -/* 0941C0 7F0617D0 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 0941C4 7F0617D4 8DF90008 */ lw $t9, 8($t7) -/* 0941C8 7F0617D8 8F230010 */ lw $v1, 0x10($t9) -/* 0941CC 7F0617DC 50600070 */ beql $v1, $zero, .L7F0619A0 -/* 0941D0 7F0617E0 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 0941D4 7F0617E4 8C620004 */ lw $v0, 4($v1) -/* 0941D8 7F0617E8 C7A40224 */ lwc1 $f4, 0x224($sp) -/* 0941DC 7F0617EC C7B20234 */ lwc1 $f18, 0x234($sp) -/* 0941E0 7F0617F0 C4460000 */ lwc1 $f6, ($v0) -/* 0941E4 7F0617F4 C4500004 */ lwc1 $f16, 4($v0) -/* 0941E8 7F0617F8 3C018005 */ lui $at, %hi(D_80053E28) # $at, 0x8005 -/* 0941EC 7F0617FC 46043202 */ mul.s $f8, $f6, $f4 -/* 0941F0 7F061800 C4440008 */ lwc1 $f4, 8($v0) -/* 0941F4 7F061804 8FAD02A4 */ lw $t5, 0x2a4($sp) -/* 0941F8 7F061808 46128282 */ mul.s $f10, $f16, $f18 -/* 0941FC 7F06180C C7B00244 */ lwc1 $f16, 0x244($sp) -/* 094200 7F061810 25AE00C0 */ addiu $t6, $t5, 0xc0 -/* 094204 7F061814 46102482 */ mul.s $f18, $f4, $f16 -/* 094208 7F061818 460A4180 */ add.s $f6, $f8, $f10 -/* 09420C 7F06181C C7AA0254 */ lwc1 $f10, 0x254($sp) -/* 094210 7F061820 46123200 */ add.s $f8, $f6, $f18 -/* 094214 7F061824 C7A60228 */ lwc1 $f6, 0x228($sp) -/* 094218 7F061828 46085100 */ add.s $f4, $f10, $f8 -/* 09421C 7F06182C C7A80238 */ lwc1 $f8, 0x238($sp) -/* 094220 7F061830 E7A40084 */ swc1 $f4, 0x84($sp) -/* 094224 7F061834 C4500000 */ lwc1 $f16, ($v0) -/* 094228 7F061838 C44A0004 */ lwc1 $f10, 4($v0) -/* 09422C 7F06183C 46068482 */ mul.s $f18, $f16, $f6 -/* 094230 7F061840 C4460008 */ lwc1 $f6, 8($v0) -/* 094234 7F061844 46085102 */ mul.s $f4, $f10, $f8 -/* 094238 7F061848 C7AA0248 */ lwc1 $f10, 0x248($sp) -/* 09423C 7F06184C 460A3202 */ mul.s $f8, $f6, $f10 -/* 094240 7F061850 46049400 */ add.s $f16, $f18, $f4 -/* 094244 7F061854 C7A40258 */ lwc1 $f4, 0x258($sp) -/* 094248 7F061858 46088480 */ add.s $f18, $f16, $f8 -/* 09424C 7F06185C C7B0022C */ lwc1 $f16, 0x22c($sp) -/* 094250 7F061860 46122180 */ add.s $f6, $f4, $f18 -/* 094254 7F061864 C7B2023C */ lwc1 $f18, 0x23c($sp) -/* 094258 7F061868 E7A60088 */ swc1 $f6, 0x88($sp) -/* 09425C 7F06186C C44A0000 */ lwc1 $f10, ($v0) -/* 094260 7F061870 C4440004 */ lwc1 $f4, 4($v0) -/* 094264 7F061874 46105202 */ mul.s $f8, $f10, $f16 -/* 094268 7F061878 C4500008 */ lwc1 $f16, 8($v0) -/* 09426C 7F06187C AFAE0040 */ sw $t6, 0x40($sp) -/* 094270 7F061880 46122182 */ mul.s $f6, $f4, $f18 -/* 094274 7F061884 C7A4024C */ lwc1 $f4, 0x24c($sp) -/* 094278 7F061888 46048482 */ mul.s $f18, $f16, $f4 -/* 09427C 7F06188C C4249F68 */ lwc1 $f4, %lo(D_80053E28)($at) -/* 094280 7F061890 46064280 */ add.s $f10, $f8, $f6 -/* 094284 7F061894 C7A6025C */ lwc1 $f6, 0x25c($sp) -/* 094288 7F061898 46125200 */ add.s $f8, $f10, $f18 -/* 09428C 7F06189C C7AA0080 */ lwc1 $f10, 0x80($sp) -/* 094290 7F0618A0 460A2482 */ mul.s $f18, $f4, $f10 -/* 094294 7F0618A4 46083400 */ add.s $f16, $f6, $f8 -/* 094298 7F0618A8 E7B0008C */ swc1 $f16, 0x8c($sp) -/* 09429C 7F0618AC 0C00262C */ jal randomGetNext -/* 0942A0 7F0618B0 E7B20038 */ swc1 $f18, 0x38($sp) -/* 0942A4 7F0618B4 44823000 */ mtc1 $v0, $f6 -/* 0942A8 7F0618B8 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 0942AC 7F0618BC 04410005 */ bgez $v0, .L7F0618D4 -/* 0942B0 7F0618C0 46803220 */ cvt.s.w $f8, $f6 -/* 0942B4 7F0618C4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0942B8 7F0618C8 44818000 */ mtc1 $at, $f16 -/* 0942BC 7F0618CC 00000000 */ nop -/* 0942C0 7F0618D0 46104200 */ add.s $f8, $f8, $f16 -.L7F0618D4: -/* 0942C4 7F0618D4 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0942C8 7F0618D8 44812000 */ mtc1 $at, $f4 -/* 0942CC 7F0618DC 3C018005 */ lui $at, %hi(D_80053E2C) # $at, 0x8005 -/* 0942D0 7F0618E0 C4329F6C */ lwc1 $f18, %lo(D_80053E2C)($at) -/* 0942D4 7F0618E4 46044282 */ mul.s $f10, $f8, $f4 -/* 0942D8 7F0618E8 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 0942DC 7F0618EC C7B00084 */ lwc1 $f16, 0x84($sp) -/* 0942E0 7F0618F0 46008207 */ neg.s $f8, $f16 -/* 0942E4 7F0618F4 46125182 */ mul.s $f6, $f10, $f18 -/* 0942E8 7F0618F8 C7B2008C */ lwc1 $f18, 0x8c($sp) -/* 0942EC 7F0618FC 46002287 */ neg.s $f10, $f4 -/* 0942F0 7F061900 44064000 */ mfc1 $a2, $f8 -/* 0942F4 7F061904 44075000 */ mfc1 $a3, $f10 -/* 0942F8 7F061908 44053000 */ mfc1 $a1, $f6 -/* 0942FC 7F06190C 46009187 */ neg.s $f6, $f18 -/* 094300 7F061910 0FC16864 */ jal matrix_4x4_align -/* 094304 7F061914 E7A60010 */ swc1 $f6, 0x10($sp) -/* 094308 7F061918 C7AC0038 */ lwc1 $f12, 0x38($sp) -/* 09430C 7F06191C 0FC163C9 */ jal matrix_scalar_multiply -/* 094310 7F061920 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 094314 7F061924 C7B00194 */ lwc1 $f16, 0x194($sp) -/* 094318 7F061928 C60801C8 */ lwc1 $f8, 0x1c8($s0) -/* 09431C 7F06192C C7AA0198 */ lwc1 $f10, 0x198($sp) -/* 094320 7F061930 C61201CC */ lwc1 $f18, 0x1cc($s0) -/* 094324 7F061934 46088101 */ sub.s $f4, $f16, $f8 -/* 094328 7F061938 C60801D0 */ lwc1 $f8, 0x1d0($s0) -/* 09432C 7F06193C C7B0019C */ lwc1 $f16, 0x19c($sp) -/* 094330 7F061940 46125181 */ sub.s $f6, $f10, $f18 -/* 094334 7F061944 44062000 */ mfc1 $a2, $f4 -/* 094338 7F061948 27A40114 */ addiu $a0, $sp, 0x114 -/* 09433C 7F06194C 46088101 */ sub.s $f4, $f16, $f8 -/* 094340 7F061950 44073000 */ mfc1 $a3, $f6 -/* 094344 7F061954 24050000 */ li $a1, 0 -/* 094348 7F061958 0FC16800 */ jal matrix_4x4_set_rotation_axis_angle -/* 09434C 7F06195C E7A40010 */ swc1 $f4, 0x10($sp) -/* 094350 7F061960 27A40114 */ addiu $a0, $sp, 0x114 -/* 094354 7F061964 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 094358 7F061968 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 09435C 7F06196C C7AC007C */ lwc1 $f12, 0x7c($sp) -/* 094360 7F061970 0FC1640A */ jal matrix_row_3_scalar_multiply -/* 094364 7F061974 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 094368 7F061978 27A40154 */ addiu $a0, $sp, 0x154 -/* 09436C 7F06197C 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 094370 7F061980 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 094374 7F061984 27A40084 */ addiu $a0, $sp, 0x84 -/* 094378 7F061988 0FC16390 */ jal matrix_4x4_set_position -/* 09437C 7F06198C 27A501E4 */ addiu $a1, $sp, 0x1e4 -/* 094380 7F061990 27A401E4 */ addiu $a0, $sp, 0x1e4 -/* 094384 7F061994 0FC16132 */ jal matrix_4x4_copy -/* 094388 7F061998 8FA50040 */ lw $a1, 0x40($sp) -.L7F06199C: -/* 09438C 7F06199C 8FB801A0 */ lw $t8, 0x1a0($sp) -.L7F0619A0: -/* 094390 7F0619A0 1000000C */ b .L7F0619D4 -/* 094394 7F0619A4 8F020008 */ lw $v0, 8($t8) -/* 094398 7F0619A8 C6100260 */ lwc1 $f16, 0x260($s0) -.L7F0619AC: -/* 09439C 7F0619AC C60A0298 */ lwc1 $f10, 0x298($s0) -/* 0943A0 7F0619B0 C612029C */ lwc1 $f18, 0x29c($s0) -/* 0943A4 7F0619B4 C60602A0 */ lwc1 $f6, 0x2a0($s0) -/* 0943A8 7F0619B8 46008207 */ neg.s $f8, $f16 -/* 0943AC 7F0619BC E60A02E8 */ swc1 $f10, 0x2e8($s0) -/* 0943B0 7F0619C0 E60802F4 */ swc1 $f8, 0x2f4($s0) -/* 0943B4 7F0619C4 E61202EC */ swc1 $f18, 0x2ec($s0) -/* 0943B8 7F0619C8 E60602F0 */ swc1 $f6, 0x2f0($s0) -/* 0943BC 7F0619CC 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 0943C0 7F0619D0 8DE20008 */ lw $v0, 8($t7) -.L7F0619D4: -/* 0943C4 7F0619D4 8C440018 */ lw $a0, 0x18($v0) -/* 0943C8 7F0619D8 50800043 */ beql $a0, $zero, .L7F061AE8 -/* 0943CC 7F0619DC 8FAD01A0 */ lw $t5, 0x1a0($sp) -/* 0943D0 7F0619E0 8C990004 */ lw $t9, 4($a0) -/* 0943D4 7F0619E4 00002825 */ move $a1, $zero -/* 0943D8 7F0619E8 0FC1B32A */ jal modelFindNodeMtxIndex -/* 0943DC 7F0619EC AFB90070 */ sw $t9, 0x70($sp) -/* 0943E0 7F0619F0 AFA2006C */ sw $v0, 0x6c($sp) -/* 0943E4 7F0619F4 8E050010 */ lw $a1, 0x10($s0) -/* 0943E8 7F0619F8 0FC17ADB */ jal sub_GAME_7F05E6B4 -/* 0943EC 7F0619FC 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0943F0 7F061A00 8FAD01A0 */ lw $t5, 0x1a0($sp) -/* 0943F4 7F061A04 8FA40070 */ lw $a0, 0x70($sp) -/* 0943F8 7F061A08 27A601A4 */ addiu $a2, $sp, 0x1a4 -/* 0943FC 7F061A0C 85AE000C */ lh $t6, 0xc($t5) -/* 094400 7F061A10 29C1001D */ slti $at, $t6, 0x1d -/* 094404 7F061A14 1420002A */ bnez $at, .L7F061AC0 -/* 094408 7F061A18 00000000 */ nop -/* 09440C 7F061A1C 8DB80008 */ lw $t8, 8($t5) -/* 094410 7F061A20 8F030070 */ lw $v1, 0x70($t8) -/* 094414 7F061A24 10600026 */ beqz $v1, .L7F061AC0 -/* 094418 7F061A28 00000000 */ nop -/* 09441C 7F061A2C 8C620004 */ lw $v0, 4($v1) -/* 094420 7F061A30 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 094424 7F061A34 0FC17AC7 */ jal get_value_if_watch_is_on_hand_or_not -/* 094428 7F061A38 AFA20068 */ sw $v0, 0x68($sp) -/* 09442C 7F061A3C 3C018005 */ lui $at, %hi(D_80053E30) # $at, 0x8005 -/* 094430 7F061A40 C42A9F70 */ lwc1 $f10, %lo(D_80053E30)($at) -/* 094434 7F061A44 C6040214 */ lwc1 $f4, 0x214($s0) -/* 094438 7F061A48 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 09443C 7F061A4C 44818000 */ mtc1 $at, $f16 -/* 094440 7F061A50 460A2480 */ add.s $f18, $f4, $f10 -/* 094444 7F061A54 3C018005 */ lui $at, %hi(D_80053E34) # $at, 0x8005 -/* 094448 7F061A58 C4249F74 */ lwc1 $f4, %lo(D_80053E34)($at) -/* 09444C 7F061A5C 8FA20068 */ lw $v0, 0x68($sp) -/* 094450 7F061A60 46009181 */ sub.s $f6, $f18, $f0 -/* 094454 7F061A64 27A401A4 */ addiu $a0, $sp, 0x1a4 -/* 094458 7F061A68 C4520000 */ lwc1 $f18, ($v0) -/* 09445C 7F061A6C 46103202 */ mul.s $f8, $f6, $f16 -/* 094460 7F061A70 C446000C */ lwc1 $f6, 0xc($v0) -/* 094464 7F061A74 46069401 */ sub.s $f16, $f18, $f6 -/* 094468 7F061A78 C4460014 */ lwc1 $f6, 0x14($v0) -/* 09446C 7F061A7C C4520008 */ lwc1 $f18, 8($v0) -/* 094470 7F061A80 46044283 */ div.s $f10, $f8, $f4 -/* 094474 7F061A84 C4440010 */ lwc1 $f4, 0x10($v0) -/* 094478 7F061A88 C4480004 */ lwc1 $f8, 4($v0) -/* 09447C 7F061A8C 44068000 */ mfc1 $a2, $f16 -/* 094480 7F061A90 46069401 */ sub.s $f16, $f18, $f6 -/* 094484 7F061A94 E7B00010 */ swc1 $f16, 0x10($sp) -/* 094488 7F061A98 44055000 */ mfc1 $a1, $f10 -/* 09448C 7F061A9C 46044281 */ sub.s $f10, $f8, $f4 -/* 094490 7F061AA0 44075000 */ mfc1 $a3, $f10 -/* 094494 7F061AA4 0C005B70 */ jal guRotateF -/* 094498 7F061AA8 00000000 */ nop -/* 09449C 7F061AAC 8FA40070 */ lw $a0, 0x70($sp) -/* 0944A0 7F061AB0 0FC16390 */ jal matrix_4x4_set_position -/* 0944A4 7F061AB4 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 0944A8 7F061AB8 10000004 */ b .L7F061ACC -/* 0944AC 7F061ABC 8FAF006C */ lw $t7, 0x6c($sp) -.L7F061AC0: -/* 0944B0 7F061AC0 0FC1625E */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0944B4 7F061AC4 8E050214 */ lw $a1, 0x214($s0) -/* 0944B8 7F061AC8 8FAF006C */ lw $t7, 0x6c($sp) -.L7F061ACC: -/* 0944BC 7F061ACC 8FAE02A4 */ lw $t6, 0x2a4($sp) -/* 0944C0 7F061AD0 27A40264 */ addiu $a0, $sp, 0x264 -/* 0944C4 7F061AD4 000FC980 */ sll $t9, $t7, 6 -/* 0944C8 7F061AD8 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 0944CC 7F061ADC 0FC1618D */ jal matrix_4x4_multiply_homogeneous -/* 0944D0 7F061AE0 032E3021 */ addu $a2, $t9, $t6 -/* 0944D4 7F061AE4 8FAD01A0 */ lw $t5, 0x1a0($sp) -.L7F061AE8: -/* 0944D8 7F061AE8 8FA40044 */ lw $a0, 0x44($sp) -/* 0944DC 7F061AEC 85B8000C */ lh $t8, 0xc($t5) -/* 0944E0 7F061AF0 01A02825 */ move $a1, $t5 -/* 0944E4 7F061AF4 2B01001E */ slti $at, $t8, 0x1e -/* 0944E8 7F061AF8 54200004 */ bnezl $at, .L7F061B0C -/* 0944EC 7F061AFC 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 0944F0 7F061B00 0FC21F5D */ jal seems_to_load_cuff_microcode -/* 0944F4 7F061B04 2406001D */ li $a2, 29 -/* 0944F8 7F061B08 8FAF01A0 */ lw $t7, 0x1a0($sp) -.L7F061B0C: -/* 0944FC 7F061B0C 8DF90008 */ lw $t9, 8($t7) -/* 094500 7F061B10 8F24001C */ lw $a0, 0x1c($t9) -/* 094504 7F061B14 50800017 */ beql $a0, $zero, .L7F061B74eu -/* 094508 7F061B18 8FB901A0 */ lw $t9, 0x1a0($sp) -/* 09450C 7F061B1C 8C8E0004 */ lw $t6, 4($a0) -/* 094510 7F061B20 00002825 */ move $a1, $zero -/* 094514 7F061B24 0FC1B32A */ jal modelFindNodeMtxIndex -/* 094518 7F061B28 AFAE0064 */ sw $t6, 0x64($sp) -/* 09451C 7F061B2C AFA20060 */ sw $v0, 0x60($sp) -/* 094520 7F061B30 0FC17B3D */ jal sub_GAME_7F05E83C -/* 094524 7F061B34 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 094528 7F061B38 8FA40064 */ lw $a0, 0x64($sp) -/* 09452C 7F061B3C 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 094530 7F061B40 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 094534 7F061B44 C7A801DC */ lwc1 $f8, 0x1dc($sp) -/* 094538 7F061B48 C6040218 */ lwc1 $f4, 0x218($s0) -/* 09453C 7F061B4C 8FB80060 */ lw $t8, 0x60($sp) -/* 094540 7F061B50 8FAF02A4 */ lw $t7, 0x2a4($sp) -/* 094544 7F061B54 46044281 */ sub.s $f10, $f8, $f4 -/* 094548 7F061B58 00186980 */ sll $t5, $t8, 6 -/* 09454C 7F061B5C 27A40264 */ addiu $a0, $sp, 0x264 -/* 094550 7F061B60 27A501A4 */ addiu $a1, $sp, 0x1a4 -/* 094554 7F061B64 E7AA01DC */ swc1 $f10, 0x1dc($sp) -/* 094558 7F061B68 0FC1615C */ jal matrix_4x4_multiply -/* 09455C 7F061B6C 01AF3021 */ addu $a2, $t5, $t7 -/* 094560 7F061B70 8FB901A0 */ lw $t9, 0x1a0($sp) -.L7F061B74eu: -/* 094564 7F061B74 00001825 */ move $v1, $zero -/* 094568 7F061B78 00003025 */ move $a2, $zero -/* 09456C 7F061B7C 872E000C */ lh $t6, 0xc($t9) -/* 094570 7F061B80 29C10013 */ slti $at, $t6, 0x13 -/* 094574 7F061B84 1420002B */ bnez $at, .L7F061C34 -/* 094578 7F061B88 00000000 */ nop -.L7F061B8C: -/* 09457C 7F061B8C 8FB801A0 */ lw $t8, 0x1a0($sp) -/* 094580 7F061B90 8FA40044 */ lw $a0, 0x44($sp) -/* 094584 7F061B94 8F0D0008 */ lw $t5, 8($t8) -/* 094588 7F061B98 01A67821 */ addu $t7, $t5, $a2 -/* 09458C 7F061B9C 8DE50048 */ lw $a1, 0x48($t7) -/* 094590 7F061BA0 50A0000E */ beql $a1, $zero, .L7F061BDC -/* 094594 7F061BA4 8FAF01A0 */ lw $t7, 0x1a0($sp) -/* 094598 7F061BA8 AFA3005C */ sw $v1, 0x5c($sp) -/* 09459C 7F061BAC 0FC1B3A3 */ jal modelGetNodeRwData -/* 0945A0 7F061BB0 AFA60040 */ sw $a2, 0x40($sp) -/* 0945A4 7F061BB4 8FA3005C */ lw $v1, 0x5c($sp) -/* 0945A8 7F061BB8 10400007 */ beqz $v0, .L7F061BD8 -/* 0945AC 7F061BBC 8FA60040 */ lw $a2, 0x40($sp) -/* 0945B0 7F061BC0 8E190034 */ lw $t9, 0x34($s0) -/* 0945B4 7F061BC4 240E0005 */ li $t6, 5 -/* 0945B8 7F061BC8 01C3C023 */ subu $t8, $t6, $v1 -/* 0945BC 7F061BCC 0338682A */ slt $t5, $t9, $t8 -/* 0945C0 7F061BD0 39AD0001 */ xori $t5, $t5, 1 -/* 0945C4 7F061BD4 AC4D0000 */ sw $t5, ($v0) -.L7F061BD8: -/* 0945C8 7F061BD8 8FAF01A0 */ lw $t7, 0x1a0($sp) -.L7F061BDC: -/* 0945CC 7F061BDC 8FA40044 */ lw $a0, 0x44($sp) -/* 0945D0 7F061BE0 8DEE0008 */ lw $t6, 8($t7) -/* 0945D4 7F061BE4 01C6C821 */ addu $t9, $t6, $a2 -/* 0945D8 7F061BE8 8F25005C */ lw $a1, 0x5c($t9) -/* 0945DC 7F061BEC 50A0000E */ beql $a1, $zero, .L7F061C28 -/* 0945E0 7F061BF0 24630001 */ addiu $v1, $v1, 1 -/* 0945E4 7F061BF4 AFA3005C */ sw $v1, 0x5c($sp) -/* 0945E8 7F061BF8 0FC1B3A3 */ jal modelGetNodeRwData -/* 0945EC 7F061BFC AFA60040 */ sw $a2, 0x40($sp) -/* 0945F0 7F061C00 8FA3005C */ lw $v1, 0x5c($sp) -/* 0945F4 7F061C04 10400007 */ beqz $v0, .L7F061C24 -/* 0945F8 7F061C08 8FA60040 */ lw $a2, 0x40($sp) -/* 0945FC 7F061C0C 8E180034 */ lw $t8, 0x34($s0) -/* 094600 7F061C10 240D0005 */ li $t5, 5 -/* 094604 7F061C14 01A37823 */ subu $t7, $t5, $v1 -/* 094608 7F061C18 030F702A */ slt $t6, $t8, $t7 -/* 09460C 7F061C1C 39CE0001 */ xori $t6, $t6, 1 -/* 094610 7F061C20 AC4E0000 */ sw $t6, ($v0) -.L7F061C24: -/* 094614 7F061C24 24630001 */ addiu $v1, $v1, 1 -.L7F061C28: -/* 094618 7F061C28 24010005 */ li $at, 5 -/* 09461C 7F061C2C 1461FFD7 */ bne $v1, $at, .L7F061B8C -/* 094620 7F061C30 24C60004 */ addiu $a2, $a2, 4 -.L7F061C34: -/* 094624 7F061C34 0FC1BCEC */ jal modelUpdateNodeRelations -/* 094628 7F061C38 8FA40044 */ lw $a0, 0x44($sp) -/* 09462C 7F061C3C 8219000C */ lb $t9, 0xc($s0) -/* 094630 7F061C40 8FAD00FC */ lw $t5, 0xfc($sp) -/* 094634 7F061C44 13200014 */ beqz $t9, .L7F061C98 -/* 094638 7F061C48 25B8FFFC */ addiu $t8, $t5, -4 -/* 09463C 7F061C4C 2F010014 */ sltiu $at, $t8, 0x14 -/* 094640 7F061C50 10200011 */ beqz $at, .L7F061C98 -/* 094644 7F061C54 0018C080 */ sll $t8, $t8, 2 -/* 094648 7F061C58 3C018005 */ lui $at, %hi(jpt_weapon_bullet_type) -/* 09464C 7F061C5C 00380821 */ addu $at, $at, $t8 -/* 094650 7F061C60 8C389F78 */ lw $t8, %lo(jpt_weapon_bullet_type)($at) -/* 094654 7F061C64 03000008 */ jr $t8 -/* 094658 7F061C68 00000000 */ nop -weapon_bullet_type_pistol: -/* 09465C 7F061C6C 0FC1882E */ jal sub_GAME_7F061BF4 -/* 094660 7F061C70 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 094664 7F061C74 8E0F0030 */ lw $t7, 0x30($s0) -/* 094668 7F061C78 25EE0001 */ addiu $t6, $t7, 1 -/* 09466C 7F061C7C 10000006 */ b .L7F061C98 -/* 094670 7F061C80 AE0E0030 */ sw $t6, 0x30($s0) -weapon_bullet_type_none: -/* 094674 7F061C84 8E190030 */ lw $t9, 0x30($s0) -/* 094678 7F061C88 272D0001 */ addiu $t5, $t9, 1 -/* 09467C 7F061C8C AE0D0030 */ sw $t5, 0x30($s0) -/* 094680 7F061C90 0FC1882E */ jal sub_GAME_7F061BF4 -/* 094684 7F061C94 8FA402A8 */ lw $a0, 0x2a8($sp) -weapon_bullet_type_shotgun_mine: -.L7F061C98: -/* 094688 7F061C98 8FB800FC */ lw $t8, 0xfc($sp) - -/* 09468C 7F061C9C 24010019 */ li $at, 25 -/* 094690 7F061CA0 57010004 */ bnel $t8, $at, .L7F061CB4 -/* 094694 7F061CA4 820F000C */ lb $t7, 0xc($s0) -/* 094698 7F061CA8 0FC17F78 */ jal sub_GAME_7F05F928 -/* 09469C 7F061CAC 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0946A0 7F061CB0 820F000C */ lb $t7, 0xc($s0) -.L7F061CB4: -/* 0946A4 7F061CB4 3C048007 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8007 -/* 0946A8 7F061CB8 51E00046 */ beql $t7, $zero, .L7F061DD4 -/* 0946AC 7F061CBC 8FBF0034 */ lw $ra, 0x34($sp) -/* 0946B0 7F061CC0 0FC22638 */ jal bondviewGetPlayerStanHeight -/* 0946B4 7F061CC4 8C848BC0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0946B8 7F061CC8 44050000 */ mfc1 $a1, $f0 -/* 0946BC 7F061CCC 0FC1A31A */ jal sub_GAME_7F068508 -/* 0946C0 7F061CD0 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0946C4 7F061CD4 8FAE00FC */ lw $t6, 0xfc($sp) -/* 0946C8 7F061CD8 24010018 */ li $at, 24 -/* 0946CC 7F061CDC 8FB900FC */ lw $t9, 0xfc($sp) -/* 0946D0 7F061CE0 55C10006 */ bnel $t6, $at, .L7F061CFC -/* 0946D4 7F061CE4 2401001A */ li $at, 26 -/* 0946D8 7F061CE8 0FC17EFD */ jal sub_GAME_7F05F73C -/* 0946DC 7F061CEC 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0946E0 7F061CF0 10000038 */ b .L7F061DD4 -/* 0946E4 7F061CF4 8FBF0034 */ lw $ra, 0x34($sp) -/* 0946E8 7F061CF8 2401001A */ li $at, 26 -.L7F061CFC: -/* 0946EC 7F061CFC 17210005 */ bne $t9, $at, .L7F061D14 -/* 0946F0 7F061D00 8FAD00FC */ lw $t5, 0xfc($sp) -/* 0946F4 7F061D04 0FC17CB7 */ jal generate_player_thrown_grenade -/* 0946F8 7F061D08 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0946FC 7F061D0C 10000031 */ b .L7F061DD4 -/* 094700 7F061D10 8FBF0034 */ lw $ra, 0x34($sp) -.L7F061D14: -/* 094704 7F061D14 24010019 */ li $at, 25 -/* 094708 7F061D18 15A10005 */ bne $t5, $at, .L7F061D30 -/* 09470C 7F061D1C 8FB800FC */ lw $t8, 0xfc($sp) -/* 094710 7F061D20 0FC18007 */ jal gunFireTankShell -/* 094714 7F061D24 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 094718 7F061D28 1000002A */ b .L7F061DD4 -/* 09471C 7F061D2C 8FBF0034 */ lw $ra, 0x34($sp) -.L7F061D30: -/* 094720 7F061D30 24010003 */ li $at, 3 -/* 094724 7F061D34 17010005 */ bne $t8, $at, .L7F061D4C -/* 094728 7F061D38 8FAF00FC */ lw $t7, 0xfc($sp) -/* 09472C 7F061D3C 0FC17D55 */ jal generate_player_thrown_knife -/* 094730 7F061D40 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 094734 7F061D44 10000023 */ b .L7F061DD4 -/* 094738 7F061D48 8FBF0034 */ lw $ra, 0x34($sp) -.L7F061D4C: -/* 09473C 7F061D4C 2401001D */ li $at, 29 -/* 094740 7F061D50 11E1000F */ beq $t7, $at, .L7F061D90 -/* 094744 7F061D54 2401001C */ li $at, 28 -/* 094748 7F061D58 11E1000D */ beq $t7, $at, .L7F061D90 -/* 09474C 7F061D5C 2401001B */ li $at, 27 -/* 094750 7F061D60 11E1000B */ beq $t7, $at, .L7F061D90 -/* 094754 7F061D64 24010021 */ li $at, 33 -/* 094758 7F061D68 11E10009 */ beq $t7, $at, .L7F061D90 -/* 09475C 7F061D6C 2401002F */ li $at, 47 -/* 094760 7F061D70 11E10007 */ beq $t7, $at, .L7F061D90 -/* 094764 7F061D74 24010030 */ li $at, 48 -/* 094768 7F061D78 11E10005 */ beq $t7, $at, .L7F061D90 -/* 09476C 7F061D7C 2401003D */ li $at, 61 -/* 094770 7F061D80 11E10003 */ beq $t7, $at, .L7F061D90 -/* 094774 7F061D84 24010022 */ li $at, 34 -/* 094778 7F061D88 15E10005 */ bne $t7, $at, .L7F061DA0 -/* 09477C 7F061D8C 8FAE00FC */ lw $t6, 0xfc($sp) -.L7F061D90: -/* 094780 7F061D90 0FC17E04 */ jal generate_player_thrown_object -/* 094784 7F061D94 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 094788 7F061D98 1000000E */ b .L7F061DD4 -/* 09478C 7F061D9C 8FBF0034 */ lw $ra, 0x34($sp) -.L7F061DA0: -/* 094790 7F061DA0 24010023 */ li $at, 35 -/* 094794 7F061DA4 15C10005 */ bne $t6, $at, .L7F061DBC -/* 094798 7F061DA8 8FB900FC */ lw $t9, 0xfc($sp) -/* 09479C 7F061DAC 0FC17EFD */ jal sub_GAME_7F05F73C -/* 0947A0 7F061DB0 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0947A4 7F061DB4 10000007 */ b .L7F061DD4 -/* 0947A8 7F061DB8 8FBF0034 */ lw $ra, 0x34($sp) -.L7F061DBC: -/* 0947AC 7F061DBC 24010024 */ li $at, 36 -/* 0947B0 7F061DC0 57210004 */ bnel $t9, $at, .L7F061DD4 -/* 0947B4 7F061DC4 8FBF0034 */ lw $ra, 0x34($sp) -/* 0947B8 7F061DC8 0FC17EFD */ jal sub_GAME_7F05F73C -/* 0947BC 7F061DCC 8FA402A8 */ lw $a0, 0x2a8($sp) -/* 0947C0 7F061DD0 8FBF0034 */ lw $ra, 0x34($sp) -.L7F061DD4: -/* 0947C4 7F061DD4 8FB00030 */ lw $s0, 0x30($sp) -/* 0947C8 7F061DD8 27BD02A8 */ addiu $sp, $sp, 0x2a8 -/* 0947CC 7F061DDC 03E00008 */ jr $ra -/* 0947D0 7F061DE0 00000000 */ nop -) -#endif - -#endif - -void bondwalkFireBothHands(void) +void gunUpdateAndFireBothHands(void) { - handles_firing_or_throwing_weapon_in_hand(GUNRIGHT); - handles_firing_or_throwing_weapon_in_hand(GUNLEFT); + gunUpdateAndFire(GUNRIGHT); + gunUpdateAndFire(GUNLEFT); } - - - - /** * @param arg0: * @param item: @@ -9682,7 +3138,7 @@ void bondwalkFireBothHands(void) * fires into the void, there may be graphical glitches with the beam. * */ -void CapBeamLengthAndDecideIfRendered(struct ChrRecord_f180 *arg0, ITEM_IDS item, coord3d *arg2, coord3d *arg3) +void CapBeamLengthAndDecideIfRendered(struct BeamRecord *arg0, ITEM_IDS item, coord3d *arg2, coord3d *arg3) { f32 phi_f12_2; @@ -9787,7 +3243,8 @@ void CapBeamLengthAndDecideIfRendered(struct ChrRecord_f180 *arg0, ITEM_IDS item } -void sub_GAME_7F061BF4(enum GUNHAND hand) { +void gunCreateBeamForHand(enum GUNHAND hand) +{ coord3d *field_2A18; Mtxf *player_matrix; struct hand *hand_ptr; @@ -9799,22 +3256,26 @@ void sub_GAME_7F061BF4(enum GUNHAND hand) { f32 diff2_z; f32 diff2_y; f32 diff2_x; - ChrRecord_f180 *field_A54; + BeamRecord *weapon_beam; hand_ptr = &g_CurrentPlayer->hands[hand]; player_matrix = camGetWorldToScreenMtxf(); val = -((((hand_ptr->item_related.x * player_matrix->m[0][2]) + (hand_ptr->item_related.y * player_matrix->m[1][2])) + (hand_ptr->item_related.z * player_matrix->m[2][2])) + player_matrix->m[3][2]); - if (val < hand_ptr->field_B64) { return; } - field_A54 = &hand_ptr->field_A54; - CapBeamLengthAndDecideIfRendered( - field_A54, - getCurrentPlayerWeaponId(hand), - &hand_ptr->field_B58, - &hand_ptr->item_related); + if (val < hand_ptr->field_B64) + { + return; + } - if ((g_CurrentPlayer->prop->chr == NULL) || (getPlayerCount() < 2)) { return; } + weapon_beam = &hand_ptr->weapon_beam; + + CapBeamLengthAndDecideIfRendered(weapon_beam, getCurrentPlayerWeaponId(hand), &hand_ptr->field_B58, &hand_ptr->item_related); + + if ((g_CurrentPlayer->prop->chr == NULL) || (getPlayerCount() < 2)) + { + return; + } chr = g_CurrentPlayer->prop->chr; @@ -9832,2744 +3293,647 @@ void sub_GAME_7F061BF4(enum GUNHAND hand) { + (diff2_z * diff1_z) + ((diff1_x * diff2_x) + (diff1_y * diff2_y))); - if (val > 0.08726647f) { return; } - CapBeamLengthAndDecideIfRendered( - &chr->unk180[hand], - getCurrentPlayerWeaponId(hand), - &g_CurrentPlayer->field_2A18[hand], - &hand_ptr->item_related); + if (val > 0.08726647f) + { + return; + } + + CapBeamLengthAndDecideIfRendered(&chr->beams[hand], getCurrentPlayerWeaponId(hand), &g_CurrentPlayer->field_2A18[hand], &hand_ptr->item_related); } -#ifdef NONMATCHING -void sub_GAME_7F061E18(void) { +Gfx *sub_GAME_7F061E18(Gfx *gdl, BeamRecord *flash, s32 arg2) +{ + f32 posz; + Mtx *mtx; + Mtxf mtxf; + Vtx templatevtx; + coord3d pos; + coord3d *playerpos; + f32 radius; + f32 pad_after_radius[2]; + f32 startoffset; + coord3d up; + coord3d right; + coord3d flareoffset; + coord3d extraorigin; + f32 extra_scale; + struct sImageTableEntry *image; + f32 d; + Mtxf *worldtoscreen; + coord3d tmp; + coord3d divout; + f32 divin[2]; + f32 f14; + f32 f16; + f32 f18; + f32 dist_to_start; + Vtx *vtx; + f32 dist; + Gfx *cmd; + if (flash->unk00 >= 0) + { + templatevtx = D_80035C98; + playerpos = bondviewGetCurrentPlayersPosition(); + startoffset = flash->unk28; + dist = flash->unk24; + flareoffset = D_80035CA8; + extraorigin = D_80035CB4; + extra_scale = 1.4142f; // ~√2 + image = flareimage3; + worldtoscreen = camGetWorldToScreenMtxf(); + + if (flash->item_id == ITEM_LASER) + { + radius = 50.0f; + image = flareimage4; + } + else if (flash->item_id == ITEM_WATCHLASER) + { + radius = 10.0f; + image = flareimage4; + templatevtx.v.cn[3] = (randomGetNext() % 50) + 150; + + if ((randomGetNext() % 5) == 0) + { + templatevtx.v.cn[0] = (templatevtx.v.cn[1] = 255 - (randomGetNext() % 100)); + } + } + else + { + radius = 30.0f; + } + + pos.f[0] = flash->pos.f[0]; + pos.f[1] = flash->pos.f[1]; + pos.f[2] = flash->pos.f[2]; + + if (startoffset > 0.0f) + { + pos.f[0] += startoffset * flash->delta.f[0]; + pos.f[1] += startoffset * flash->delta.f[1]; + pos.f[2] += startoffset * flash->delta.f[2]; + } + else + { + dist += startoffset; + startoffset = 0.0f; + } + + if (flash->unk1c < (startoffset + dist)) + { + dist = flash->unk1c - startoffset; + } + + right.f[0] = (flash->delta.f[1] * (playerpos->f[2] - (pos.f[2] + (dist * flash->delta.f[2])))) - (flash->delta.f[2] * (playerpos->f[1] - (pos.f[1] + (dist * flash->delta.f[1])))); + right.f[1] = (flash->delta.f[2] * (playerpos->f[0] - (pos.f[0] + (dist * flash->delta.f[0])))) - (flash->delta.f[0] * (playerpos->f[2] - (pos.f[2] + (dist * flash->delta.f[2])))); + right.f[2] = (flash->delta.f[0] * (playerpos->f[1] - (pos.f[1] + (dist * flash->delta.f[1])))) - (flash->delta.f[1] * (playerpos->f[0] - (pos.f[0] + (dist * flash->delta.f[0])))); + + if (((right.f[0] != 0.0f) || (right.f[1] != 0.0f)) || (right.f[2] != 0.0f)) + { + guNormalize(&right.f[0], &right.f[1], &right.f[2]); + right.f[0] *= radius; + right.f[1] *= radius; + right.f[2] *= radius; + } + else + { + right.f[0] = 0.0f; + right.f[1] = radius; + right.f[2] = 0.0f; + } + + up.f[0] = (flash->delta.f[1] * right.f[2]) - (flash->delta.f[2] * right.f[1]); + up.f[1] = (flash->delta.f[2] * right.f[0]) - (flash->delta.f[0] * right.f[2]); + up.f[2] = (flash->delta.f[0] * right.f[1]) - (flash->delta.f[1] * right.f[0]); + + guNormalize(&up.f[0], &up.f[1], &up.f[2]); + + up.f[0] *= radius; + up.f[1] *= radius; + up.f[2] *= radius; + + if (flash->item_id == ITEM_LASER) + { + vtx = dynAllocateVertices(8); + } + else + { + vtx = dynAllocateVertices(4); + } + + mtx = dynAllocateMatrix(); + + matrix_4x4_set_identity_and_position(&pos, &mtxf); + matrix_scalar_multiply(0.1f, (f32 *)&mtxf); + matrix_4x4_multiply_homogeneous_in_place(worldtoscreen, &mtxf); + matrix_4x4_f32_to_s32(&mtxf, (Mtxf *)mtx); + + vtx[0] = templatevtx; + vtx[1] = templatevtx; + vtx[2] = templatevtx; + vtx[3] = templatevtx; + + if (flash->item_id == ITEM_LASER) + { + vtx[4] = templatevtx; + vtx[5] = templatevtx; + vtx[6] = templatevtx; + vtx[7] = templatevtx; + } + + if (flash->item_id == ITEM_WATCHLASER) + { + tmp.f[0] = pos.f[0] + flash->delta.f[0] * dist; + tmp.f[1] = pos.f[1] + flash->delta.f[1] * dist; + tmp.f[2] = pos.f[2] + flash->delta.f[2] * dist; + + mtx4TransformVecInPlace(worldtoscreen, &tmp); + + divin[0] = divin[1] = radius / 10.0f; + + dist_to_start = -tmp.f[2]; + divide3DCoordinates((coord3d *)divin, dist_to_start, &divout); + + if (divout.f[0] < 2.0f) + { + tmp.f[0] *= divout.f[0] * 0.5f; + tmp.f[1] *= divout.f[0] * 0.5f; + tmp.f[2] *= divout.f[0] * 0.5f; + } + + mtx4TransformVecInPlace(currentPlayerGetViewToWorldMtxf(), &tmp); + + tmp.f[0] -= pos.f[0]; + tmp.f[1] -= pos.f[1]; + tmp.f[2] -= pos.f[2]; + + flareoffset.x = tmp.f[0] * 10.0f; + flareoffset.y = tmp.f[1] * 10.0f; + flareoffset.z = tmp.f[2] * 10.0f; + } + else + { + flareoffset.x = flash->delta.f[0] * (dist * 10.0f); + flareoffset.y = flash->delta.f[1] * (dist * 10.0f); + flareoffset.z = flash->delta.f[2] * (dist * 10.0f); + } + + vtx[0].v.ob[0] = right.f[0]; + vtx[0].v.ob[1] = right.f[1]; + vtx[0].v.ob[2] = right.f[2]; + vtx[0].v.tc[0] = image->width << 5; + vtx[0].v.tc[1] = 0; + + vtx[1].v.ob[0] = -right.f[0]; + vtx[1].v.ob[1] = -right.f[1]; + vtx[1].v.ob[2] = -right.f[2]; + vtx[1].v.tc[0] = 0; + vtx[1].v.tc[1] = 0; + + vtx[2].v.ob[0] = flareoffset.f[0] + (right.f[0] * 0.9f); + vtx[2].v.ob[1] = flareoffset.f[1] + (right.f[1] * 0.9f); + vtx[2].v.ob[2] = flareoffset.f[2] + (right.f[2] * 0.9f); + vtx[2].v.tc[0] = image->width << 5; + vtx[2].v.tc[1] = image->height << 5; + + vtx[3].v.ob[0] = flareoffset.f[0] - (right.f[0] * 0.9f); + vtx[3].v.ob[1] = flareoffset.f[1] - (right.f[1] * 0.9f); + vtx[3].v.ob[2] = flareoffset.f[2] - (right.f[2] * 0.9f); + vtx[3].v.tc[0] = 0; + vtx[3].v.tc[1] = image->height << 5; + + if (flash->item_id == ITEM_LASER) + { + f14 = playerpos->f[0] - pos.f[0]; + f16 = playerpos->f[1] - pos.f[1]; + f18 = playerpos->f[2] - pos.f[2]; + + dist_to_start = (f14 * f14) + (f16 * f16) + (f18 * f18); + + f14 = playerpos->f[0] - (pos.f[0] + (flash->delta.f[0] * dist)); + f16 = playerpos->f[1] - (pos.f[1] + (flash->delta.f[1] * dist)); + f18 = playerpos->f[2] - (pos.f[2] + (flash->delta.f[2] * dist)); + + d = (f14 * f14) + (f16 * f16) + (f18 * f18); + + if (d < dist_to_start) + { + extraorigin.f[0] = flareoffset.f[0]; + extraorigin.f[1] = flareoffset.f[1]; + extraorigin.f[2] = flareoffset.f[2]; + extra_scale *= 0.9f; + } + + vtx[4].v.ob[0] = extraorigin.f[0] + (up.f[0] * extra_scale); + vtx[4].v.ob[1] = extraorigin.f[1] + (up.f[1] * extra_scale); + vtx[4].v.ob[2] = extraorigin.f[2] + (up.f[2] * extra_scale); + vtx[4].v.tc[0] = flareimage5->width << 5; + vtx[4].v.tc[1] = flareimage5->height << 5; + + vtx[5].v.ob[0] = extraorigin.f[0] - (up.f[0] * extra_scale); + vtx[5].v.ob[1] = extraorigin.f[1] - (up.f[1] * extra_scale); + vtx[5].v.ob[2] = extraorigin.f[2] - (up.f[2] * extra_scale); + vtx[5].v.tc[0] = 0; + vtx[5].v.tc[1] = 0; + + vtx[6].v.ob[0] = extraorigin.f[0] + (right.f[0] * extra_scale); + vtx[6].v.ob[1] = extraorigin.f[1] + (right.f[1] * extra_scale); + vtx[6].v.ob[2] = extraorigin.f[2] + (right.f[2] * extra_scale); + vtx[6].v.tc[0] = 0; + vtx[6].v.tc[1] = flareimage5->height << 5; + + vtx[7].v.ob[0] = extraorigin.f[0] - (right.f[0] * extra_scale); + vtx[7].v.ob[1] = extraorigin.f[1] - (right.f[1] * extra_scale); + vtx[7].v.ob[2] = extraorigin.f[2] - (right.f[2] * extra_scale); + vtx[7].v.tc[0] = flareimage5->width << 5; + vtx[7].v.tc[1] = 0; + } + + gSPClearGeometryMode(gdl++, G_CULL_BACK); + + // Ideally this should be something like gSPMatrix(gdl++ or cmd++, osVirtualToPhysical(mtx), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH) but I can't get these or similar forms to match + { + cmd = gdl++; + cmd->words.w0 = _SHIFTL(G_MTX, 24, 8) + | _SHIFTL(G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH, 16, 8) + | _SHIFTL(sizeof(Mtx), 0, 16); + cmd->words.w1 = osVirtualToPhysical(mtx); + } + + if (flash->item_id == ITEM_LASER) + { + texSelect(&gdl, flareimage5, 4, arg2, 2); + + gSPVertex(gdl++, osVirtualToPhysical(vtx), 8, 0); + + gSP4Triangles(gdl++, 4, 5, 6, 4, 5, 7, 0, 0, 0, 0, 0, 0); + + texSelect(&gdl, image, 4, arg2, 2); + + gSP4Triangles(gdl++, 0, 2, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0); + } + else + { + texSelect(&gdl, image, 4, arg2, 2); + + gSPVertex(gdl++, osVirtualToPhysical(vtx), 4, 0); + + gSP4Triangles(gdl++, 0, 2, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0); + } + } + + return gdl; } -#else -#if defined(VERSION_US) || defined(VERSION_JP) -GLOBAL_ASM( -.late_rodata -glabel D_80053EAC -.word 0x3fb50481 /*1.4141999*/ -glabel D_80053EB0 -.word 0x3dcccccd /*0.1*/ -glabel D_80053EB4 -.word 0x3f666666 /*0.89999998*/ -glabel D_80053EB8 -.word 0x3f666666 /*0.89999998*/ -glabel D_80053EBC -.word 0x3f666666 /*0.89999998*/ -glabel D_80053EC0 -.word 0x3f666666 /*0.89999998*/ -glabel D_80053EC4 -.word 0x3f666666 /*0.89999998*/ -glabel D_80053EC8 -.word 0x3f666666 /*0.89999998*/ -glabel D_80053ECC -.word 0x3fb50481 /*1.4141999*/ -glabel D_80053ED0 -.word 0x3f666666 /*0.89999998*/ -.text -glabel sub_GAME_7F061E18 -/* 096948 7F061E18 27BDFEA0 */ addiu $sp, $sp, -0x160 -/* 09694C 7F061E1C AFBF002C */ sw $ra, 0x2c($sp) -/* 096950 7F061E20 AFB10028 */ sw $s1, 0x28($sp) -/* 096954 7F061E24 AFB00024 */ sw $s0, 0x24($sp) -/* 096958 7F061E28 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 09695C 7F061E2C AFA40160 */ sw $a0, 0x160($sp) -/* 096960 7F061E30 AFA60168 */ sw $a2, 0x168($sp) -/* 096964 7F061E34 80AB0000 */ lb $t3, ($a1) -/* 096968 7F061E38 3C0E8003 */ lui $t6, %hi(D_80035C98) -/* 09696C 7F061E3C 00A08825 */ move $s1, $a1 -/* 096970 7F061E40 05600328 */ bltz $t3, .L7F062AE4 -/* 096974 7F061E44 25CE5C98 */ addiu $t6, %lo(D_80035C98) # addiu $t6, $t6, 0x5c98 -/* 096978 7F061E48 8DC10000 */ lw $at, ($t6) -/* 09697C 7F061E4C 8DD90004 */ lw $t9, 4($t6) -/* 096980 7F061E50 27A90108 */ addiu $t1, $sp, 0x108 -/* 096984 7F061E54 AD210000 */ sw $at, ($t1) -/* 096988 7F061E58 AD390004 */ sw $t9, 4($t1) -/* 09698C 7F061E5C 8DD9000C */ lw $t9, 0xc($t6) -/* 096990 7F061E60 8DC10008 */ lw $at, 8($t6) -/* 096994 7F061E64 AD39000C */ sw $t9, 0xc($t1) -/* 096998 7F061E68 0FC227F5 */ jal bondviewGetCurrentPlayersPosition -/* 09699C 7F061E6C AD210008 */ sw $at, 8($t1) -/* 0969A0 7F061E70 AFA200F8 */ sw $v0, 0xf8($sp) -/* 0969A4 7F061E74 3C0D8003 */ lui $t5, %hi(D_80035CA8) -/* 0969A8 7F061E78 25AD5CA8 */ addiu $t5, %lo(D_80035CA8) # addiu $t5, $t5, 0x5ca8 -/* 0969AC 7F061E7C 8DA10000 */ lw $at, ($t5) -/* 0969B0 7F061E80 C6200028 */ lwc1 $f0, 0x28($s1) -/* 0969B4 7F061E84 C6340024 */ lwc1 $f20, 0x24($s1) -/* 0969B8 7F061E88 27AF00C4 */ addiu $t7, $sp, 0xc4 -/* 0969BC 7F061E8C ADE10000 */ sw $at, ($t7) -/* 0969C0 7F061E90 8DA10008 */ lw $at, 8($t5) -/* 0969C4 7F061E94 8DAB0004 */ lw $t3, 4($t5) -/* 0969C8 7F061E98 3C098003 */ lui $t1, %hi(D_80035CB4) -/* 0969CC 7F061E9C 25295CB4 */ addiu $t1, %lo(D_80035CB4) # addiu $t1, $t1, 0x5cb4 -/* 0969D0 7F061EA0 ADE10008 */ sw $at, 8($t7) -/* 0969D4 7F061EA4 ADEB0004 */ sw $t3, 4($t7) -/* 0969D8 7F061EA8 8D210000 */ lw $at, ($t1) -/* 0969DC 7F061EAC 27B800B8 */ addiu $t8, $sp, 0xb8 -/* 0969E0 7F061EB0 8D2A0004 */ lw $t2, 4($t1) -/* 0969E4 7F061EB4 AF010000 */ sw $at, ($t8) -/* 0969E8 7F061EB8 8D210008 */ lw $at, 8($t1) -/* 0969EC 7F061EBC AF0A0004 */ sw $t2, 4($t8) -/* 0969F0 7F061EC0 3C0C8009 */ lui $t4, %hi(flareimage3) -/* 0969F4 7F061EC4 AF010008 */ sw $at, 8($t8) -/* 0969F8 7F061EC8 3C018005 */ lui $at, %hi(D_80053EAC) -/* 0969FC 7F061ECC C4243EAC */ lwc1 $f4, %lo(D_80053EAC)($at) -/* 096A00 7F061ED0 8D8CD0D0 */ lw $t4, %lo(flareimage3)($t4) -/* 096A04 7F061ED4 E7A000E8 */ swc1 $f0, 0xe8($sp) -/* 096A08 7F061ED8 E7A400B4 */ swc1 $f4, 0xb4($sp) -/* 096A0C 7F061EDC 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 096A10 7F061EE0 AFAC00B0 */ sw $t4, 0xb0($sp) -/* 096A14 7F061EE4 AFA200A8 */ sw $v0, 0xa8($sp) -/* 096A18 7F061EE8 82230001 */ lb $v1, 1($s1) -/* 096A1C 7F061EEC 24010016 */ li $at, 22 -/* 096A20 7F061EF0 C7A000E8 */ lwc1 $f0, 0xe8($sp) -/* 096A24 7F061EF4 14610007 */ bne $v1, $at, .L7F061F14 -/* 096A28 7F061EF8 3C014248 */ li $at, 0x42480000 # 50.000000 -/* 096A2C 7F061EFC 44819000 */ mtc1 $at, $f18 -/* 096A30 7F061F00 3C0F8009 */ lui $t7, %hi(flareimage4) -/* 096A34 7F061F04 8DEFD0D4 */ lw $t7, %lo(flareimage4)($t7) -/* 096A38 7F061F08 E7B200F4 */ swc1 $f18, 0xf4($sp) -/* 096A3C 7F061F0C 10000026 */ b .L7F061FA8 -/* 096A40 7F061F10 AFAF00B0 */ sw $t7, 0xb0($sp) -.L7F061F14: -/* 096A44 7F061F14 24010017 */ li $at, 23 -/* 096A48 7F061F18 1461001F */ bne $v1, $at, .L7F061F98 -/* 096A4C 7F061F1C 3C0D8009 */ lui $t5, %hi(flareimage4) -/* 096A50 7F061F20 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 096A54 7F061F24 44813000 */ mtc1 $at, $f6 -/* 096A58 7F061F28 8DADD0D4 */ lw $t5, %lo(flareimage4)($t5) -/* 096A5C 7F061F2C E7A000E8 */ swc1 $f0, 0xe8($sp) -/* 096A60 7F061F30 E7A600F4 */ swc1 $f6, 0xf4($sp) -/* 096A64 7F061F34 0C002914 */ jal randomGetNext -/* 096A68 7F061F38 AFAD00B0 */ sw $t5, 0xb0($sp) -/* 096A6C 7F061F3C 24010032 */ li $at, 50 -/* 096A70 7F061F40 0041001B */ divu $zero, $v0, $at -/* 096A74 7F061F44 00005810 */ mfhi $t3 -/* 096A78 7F061F48 25790096 */ addiu $t9, $t3, 0x96 -/* 096A7C 7F061F4C 0C002914 */ jal randomGetNext -/* 096A80 7F061F50 A3B90117 */ sb $t9, 0x117($sp) -/* 096A84 7F061F54 24010005 */ li $at, 5 -/* 096A88 7F061F58 0041001B */ divu $zero, $v0, $at -/* 096A8C 7F061F5C 00007010 */ mfhi $t6 -/* 096A90 7F061F60 C7A000E8 */ lwc1 $f0, 0xe8($sp) -/* 096A94 7F061F64 55C00011 */ bnezl $t6, .L7F061FAC -/* 096A98 7F061F68 C6240004 */ lwc1 $f4, 4($s1) -/* 096A9C 7F061F6C 0C002914 */ jal randomGetNext -/* 096AA0 7F061F70 E7A000E8 */ swc1 $f0, 0xe8($sp) -/* 096AA4 7F061F74 24010064 */ li $at, 100 -/* 096AA8 7F061F78 0041001B */ divu $zero, $v0, $at -/* 096AAC 7F061F7C 0000C010 */ mfhi $t8 -/* 096AB0 7F061F80 240900FF */ li $t1, 255 -/* 096AB4 7F061F84 01381823 */ subu $v1, $t1, $t8 -/* 096AB8 7F061F88 A3A30115 */ sb $v1, 0x115($sp) -/* 096ABC 7F061F8C A3A30114 */ sb $v1, 0x114($sp) -/* 096AC0 7F061F90 10000005 */ b .L7F061FA8 -/* 096AC4 7F061F94 C7A000E8 */ lwc1 $f0, 0xe8($sp) -.L7F061F98: -/* 096AC8 7F061F98 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 096ACC 7F061F9C 44815000 */ mtc1 $at, $f10 -/* 096AD0 7F061FA0 00000000 */ nop -/* 096AD4 7F061FA4 E7AA00F4 */ swc1 $f10, 0xf4($sp) -.L7F061FA8: -/* 096AD8 7F061FA8 C6240004 */ lwc1 $f4, 4($s1) -.L7F061FAC: -/* 096ADC 7F061FAC 44807000 */ mtc1 $zero, $f14 -/* 096AE0 7F061FB0 E7A400FC */ swc1 $f4, 0xfc($sp) -/* 096AE4 7F061FB4 C6280008 */ lwc1 $f8, 8($s1) -/* 096AE8 7F061FB8 4600703C */ c.lt.s $f14, $f0 -/* 096AEC 7F061FBC E7A80100 */ swc1 $f8, 0x100($sp) -/* 096AF0 7F061FC0 C626000C */ lwc1 $f6, 0xc($s1) -/* 096AF4 7F061FC4 45000011 */ bc1f .L7F06200C -/* 096AF8 7F061FC8 E7A60104 */ swc1 $f6, 0x104($sp) -/* 096AFC 7F061FCC C6240010 */ lwc1 $f4, 0x10($s1) -/* 096B00 7F061FD0 C7AA00FC */ lwc1 $f10, 0xfc($sp) -/* 096B04 7F061FD4 46040202 */ mul.s $f8, $f0, $f4 -/* 096B08 7F061FD8 C7A40100 */ lwc1 $f4, 0x100($sp) -/* 096B0C 7F061FDC 46085180 */ add.s $f6, $f10, $f8 -/* 096B10 7F061FE0 E7A600FC */ swc1 $f6, 0xfc($sp) -/* 096B14 7F061FE4 C62A0014 */ lwc1 $f10, 0x14($s1) -/* 096B18 7F061FE8 460A0202 */ mul.s $f8, $f0, $f10 -/* 096B1C 7F061FEC C7AA0104 */ lwc1 $f10, 0x104($sp) -/* 096B20 7F061FF0 46082180 */ add.s $f6, $f4, $f8 -/* 096B24 7F061FF4 E7A60100 */ swc1 $f6, 0x100($sp) -/* 096B28 7F061FF8 C6240018 */ lwc1 $f4, 0x18($s1) -/* 096B2C 7F061FFC 46040202 */ mul.s $f8, $f0, $f4 -/* 096B30 7F062000 46085180 */ add.s $f6, $f10, $f8 -/* 096B34 7F062004 10000003 */ b .L7F062014 -/* 096B38 7F062008 E7A60104 */ swc1 $f6, 0x104($sp) -.L7F06200C: -/* 096B3C 7F06200C 4600A500 */ add.s $f20, $f20, $f0 -/* 096B40 7F062010 46007006 */ mov.s $f0, $f14 -.L7F062014: -/* 096B44 7F062014 46140100 */ add.s $f4, $f0, $f20 -/* 096B48 7F062018 C622001C */ lwc1 $f2, 0x1c($s1) -/* 096B4C 7F06201C 4604103C */ c.lt.s $f2, $f4 -/* 096B50 7F062020 00000000 */ nop -/* 096B54 7F062024 45020003 */ bc1fl .L7F062034 -/* 096B58 7F062028 C62C0018 */ lwc1 $f12, 0x18($s1) -/* 096B5C 7F06202C 46001501 */ sub.s $f20, $f2, $f0 -/* 096B60 7F062030 C62C0018 */ lwc1 $f12, 0x18($s1) -.L7F062034: -/* 096B64 7F062034 C7AA0104 */ lwc1 $f10, 0x104($sp) -/* 096B68 7F062038 8FA200F8 */ lw $v0, 0xf8($sp) -/* 096B6C 7F06203C 460CA202 */ mul.s $f8, $f20, $f12 -/* 096B70 7F062040 C6220014 */ lwc1 $f2, 0x14($s1) -/* 096B74 7F062044 C4440008 */ lwc1 $f4, 8($v0) -/* 096B78 7F062048 E7AA0030 */ swc1 $f10, 0x30($sp) -/* 096B7C 7F06204C 46085180 */ add.s $f6, $f10, $f8 -/* 096B80 7F062050 C44A0004 */ lwc1 $f10, 4($v0) -/* 096B84 7F062054 46062201 */ sub.s $f8, $f4, $f6 -/* 096B88 7F062058 46081102 */ mul.s $f4, $f2, $f8 -/* 096B8C 7F06205C C7A80100 */ lwc1 $f8, 0x100($sp) -/* 096B90 7F062060 46141182 */ mul.s $f6, $f2, $f20 -/* 096B94 7F062064 46083180 */ add.s $f6, $f6, $f8 -/* 096B98 7F062068 46065281 */ sub.s $f10, $f10, $f6 -/* 096B9C 7F06206C 460C5182 */ mul.s $f6, $f10, $f12 -/* 096BA0 7F062070 46062281 */ sub.s $f10, $f4, $f6 -/* 096BA4 7F062074 C7A400FC */ lwc1 $f4, 0xfc($sp) -/* 096BA8 7F062078 E7AA00D0 */ swc1 $f10, 0xd0($sp) -/* 096BAC 7F06207C C6200010 */ lwc1 $f0, 0x10($s1) -/* 096BB0 7F062080 C62C0018 */ lwc1 $f12, 0x18($s1) -/* 096BB4 7F062084 E7A80034 */ swc1 $f8, 0x34($sp) -/* 096BB8 7F062088 4600A182 */ mul.s $f6, $f20, $f0 -/* 096BBC 7F06208C C4480000 */ lwc1 $f8, ($v0) -/* 096BC0 7F062090 E7AA0038 */ swc1 $f10, 0x38($sp) -/* 096BC4 7F062094 C7AA0030 */ lwc1 $f10, 0x30($sp) -/* 096BC8 7F062098 46062180 */ add.s $f6, $f4, $f6 -/* 096BCC 7F06209C 46064201 */ sub.s $f8, $f8, $f6 -/* 096BD0 7F0620A0 46086182 */ mul.s $f6, $f12, $f8 -/* 096BD4 7F0620A4 00000000 */ nop -/* 096BD8 7F0620A8 46146202 */ mul.s $f8, $f12, $f20 -/* 096BDC 7F0620AC 460A4200 */ add.s $f8, $f8, $f10 -/* 096BE0 7F0620B0 C44A0008 */ lwc1 $f10, 8($v0) -/* 096BE4 7F0620B4 46085281 */ sub.s $f10, $f10, $f8 -/* 096BE8 7F0620B8 46005202 */ mul.s $f8, $f10, $f0 -/* 096BEC 7F0620BC 46083281 */ sub.s $f10, $f6, $f8 -/* 096BF0 7F0620C0 C7A60034 */ lwc1 $f6, 0x34($sp) -/* 096BF4 7F0620C4 E7AA00D4 */ swc1 $f10, 0xd4($sp) -/* 096BF8 7F0620C8 C6220014 */ lwc1 $f2, 0x14($s1) -/* 096BFC 7F0620CC C6200010 */ lwc1 $f0, 0x10($s1) -/* 096C00 7F0620D0 4602A202 */ mul.s $f8, $f20, $f2 -/* 096C04 7F0620D4 46083180 */ add.s $f6, $f6, $f8 -/* 096C08 7F0620D8 C4480004 */ lwc1 $f8, 4($v0) -/* 096C0C 7F0620DC 46064201 */ sub.s $f8, $f8, $f6 -/* 096C10 7F0620E0 46080182 */ mul.s $f6, $f0, $f8 -/* 096C14 7F0620E4 00000000 */ nop -/* 096C18 7F0620E8 46140202 */ mul.s $f8, $f0, $f20 -/* 096C1C 7F0620EC 46044200 */ add.s $f8, $f8, $f4 -/* 096C20 7F0620F0 C4440000 */ lwc1 $f4, ($v0) -/* 096C24 7F0620F4 46082101 */ sub.s $f4, $f4, $f8 -/* 096C28 7F0620F8 46022202 */ mul.s $f8, $f4, $f2 -/* 096C2C 7F0620FC 46083101 */ sub.s $f4, $f6, $f8 -/* 096C30 7F062100 C7A60038 */ lwc1 $f6, 0x38($sp) -/* 096C34 7F062104 46067032 */ c.eq.s $f14, $f6 -/* 096C38 7F062108 E7A400D8 */ swc1 $f4, 0xd8($sp) -/* 096C3C 7F06210C 45000008 */ bc1f .L7F062130 -/* 096C40 7F062110 00000000 */ nop -/* 096C44 7F062114 460A7032 */ c.eq.s $f14, $f10 -/* 096C48 7F062118 00000000 */ nop -/* 096C4C 7F06211C 45020005 */ bc1fl .L7F062134 -/* 096C50 7F062120 27A400D0 */ addiu $a0, $sp, 0xd0 -/* 096C54 7F062124 46047032 */ c.eq.s $f14, $f4 -/* 096C58 7F062128 00000000 */ nop -/* 096C5C 7F06212C 4501000F */ bc1t .L7F06216C -.L7F062130: -/* 096C60 7F062130 27A400D0 */ addiu $a0, $sp, 0xd0 -.L7F062134: -/* 096C64 7F062134 27A500D4 */ addiu $a1, $sp, 0xd4 -/* 096C68 7F062138 0C007DD4 */ jal guNormalize -/* 096C6C 7F06213C 27A600D8 */ addiu $a2, $sp, 0xd8 -/* 096C70 7F062140 C7A000F4 */ lwc1 $f0, 0xf4($sp) -/* 096C74 7F062144 C7A800D0 */ lwc1 $f8, 0xd0($sp) -/* 096C78 7F062148 C7AA00D4 */ lwc1 $f10, 0xd4($sp) -/* 096C7C 7F06214C 46004182 */ mul.s $f6, $f8, $f0 -/* 096C80 7F062150 C7A800D8 */ lwc1 $f8, 0xd8($sp) -/* 096C84 7F062154 46005102 */ mul.s $f4, $f10, $f0 -/* 096C88 7F062158 E7A600D0 */ swc1 $f6, 0xd0($sp) -/* 096C8C 7F06215C 46004182 */ mul.s $f6, $f8, $f0 -/* 096C90 7F062160 E7A400D4 */ swc1 $f4, 0xd4($sp) -/* 096C94 7F062164 10000005 */ b .L7F06217C -/* 096C98 7F062168 E7A600D8 */ swc1 $f6, 0xd8($sp) -.L7F06216C: -/* 096C9C 7F06216C C7AA00F4 */ lwc1 $f10, 0xf4($sp) -/* 096CA0 7F062170 E7AE00D0 */ swc1 $f14, 0xd0($sp) -/* 096CA4 7F062174 E7AE00D8 */ swc1 $f14, 0xd8($sp) -/* 096CA8 7F062178 E7AA00D4 */ swc1 $f10, 0xd4($sp) -.L7F06217C: -/* 096CAC 7F06217C C6240014 */ lwc1 $f4, 0x14($s1) -/* 096CB0 7F062180 C7A800D8 */ lwc1 $f8, 0xd8($sp) -/* 096CB4 7F062184 C7AA00D4 */ lwc1 $f10, 0xd4($sp) -/* 096CB8 7F062188 27A400DC */ addiu $a0, $sp, 0xdc -/* 096CBC 7F06218C 46082182 */ mul.s $f6, $f4, $f8 -/* 096CC0 7F062190 C6240018 */ lwc1 $f4, 0x18($s1) -/* 096CC4 7F062194 27A500E0 */ addiu $a1, $sp, 0xe0 -/* 096CC8 7F062198 27A600E4 */ addiu $a2, $sp, 0xe4 -/* 096CCC 7F06219C 46045102 */ mul.s $f4, $f10, $f4 -/* 096CD0 7F0621A0 46043181 */ sub.s $f6, $f6, $f4 -/* 096CD4 7F0621A4 E7A600DC */ swc1 $f6, 0xdc($sp) -/* 096CD8 7F0621A8 C6240018 */ lwc1 $f4, 0x18($s1) -/* 096CDC 7F0621AC C7A600D0 */ lwc1 $f6, 0xd0($sp) -/* 096CE0 7F0621B0 E7AA0038 */ swc1 $f10, 0x38($sp) -/* 096CE4 7F0621B4 C62A0010 */ lwc1 $f10, 0x10($s1) -/* 096CE8 7F0621B8 46062102 */ mul.s $f4, $f4, $f6 -/* 096CEC 7F0621BC 00000000 */ nop -/* 096CF0 7F0621C0 460A4202 */ mul.s $f8, $f8, $f10 -/* 096CF4 7F0621C4 46082281 */ sub.s $f10, $f4, $f8 -/* 096CF8 7F0621C8 C7A80038 */ lwc1 $f8, 0x38($sp) -/* 096CFC 7F0621CC E7AA00E0 */ swc1 $f10, 0xe0($sp) -/* 096D00 7F0621D0 C6240010 */ lwc1 $f4, 0x10($s1) -/* 096D04 7F0621D4 46082282 */ mul.s $f10, $f4, $f8 -/* 096D08 7F0621D8 C6240014 */ lwc1 $f4, 0x14($s1) -/* 096D0C 7F0621DC 46043202 */ mul.s $f8, $f6, $f4 -/* 096D10 7F0621E0 46085181 */ sub.s $f6, $f10, $f8 -/* 096D14 7F0621E4 0C007DD4 */ jal guNormalize -/* 096D18 7F0621E8 E7A600E4 */ swc1 $f6, 0xe4($sp) -/* 096D1C 7F0621EC C7A000F4 */ lwc1 $f0, 0xf4($sp) -/* 096D20 7F0621F0 C7A400DC */ lwc1 $f4, 0xdc($sp) -/* 096D24 7F0621F4 C7A800E0 */ lwc1 $f8, 0xe0($sp) -/* 096D28 7F0621F8 24010016 */ li $at, 22 -/* 096D2C 7F0621FC 46002282 */ mul.s $f10, $f4, $f0 -/* 096D30 7F062200 C7A400E4 */ lwc1 $f4, 0xe4($sp) -/* 096D34 7F062204 46004182 */ mul.s $f6, $f8, $f0 -/* 096D38 7F062208 E7AA00DC */ swc1 $f10, 0xdc($sp) -/* 096D3C 7F06220C 46002282 */ mul.s $f10, $f4, $f0 -/* 096D40 7F062210 E7A600E0 */ swc1 $f6, 0xe0($sp) -/* 096D44 7F062214 E7AA00E4 */ swc1 $f10, 0xe4($sp) -/* 096D48 7F062218 822A0001 */ lb $t2, 1($s1) -/* 096D4C 7F06221C 15410005 */ bne $t2, $at, .L7F062234 -/* 096D50 7F062220 00000000 */ nop -/* 096D54 7F062224 0FC2F5B1 */ jal dynAllocate7F0BD6C4 -/* 096D58 7F062228 24040008 */ li $a0, 8 -/* 096D5C 7F06222C 10000004 */ b .L7F062240 -/* 096D60 7F062230 00408025 */ move $s0, $v0 -.L7F062234: -/* 096D64 7F062234 0FC2F5B1 */ jal dynAllocate7F0BD6C4 -/* 096D68 7F062238 24040004 */ li $a0, 4 -/* 096D6C 7F06223C 00408025 */ move $s0, $v0 -.L7F062240: -/* 096D70 7F062240 0FC2F5B8 */ jal dynAllocateMatrix -/* 096D74 7F062244 00000000 */ nop -/* 096D78 7F062248 AFA20158 */ sw $v0, 0x158($sp) -/* 096D7C 7F06224C 27A400FC */ addiu $a0, $sp, 0xfc -/* 096D80 7F062250 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 096D84 7F062254 27A50118 */ addiu $a1, $sp, 0x118 -/* 096D88 7F062258 3C018005 */ lui $at, %hi(D_80053EB0) -/* 096D8C 7F06225C C42C3EB0 */ lwc1 $f12, %lo(D_80053EB0)($at) -/* 096D90 7F062260 0FC1629F */ jal matrix_scalar_multiply -/* 096D94 7F062264 27A50118 */ addiu $a1, $sp, 0x118 -/* 096D98 7F062268 8FA400A8 */ lw $a0, 0xa8($sp) -/* 096D9C 7F06226C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 096DA0 7F062270 27A50118 */ addiu $a1, $sp, 0x118 -/* 096DA4 7F062274 27A40118 */ addiu $a0, $sp, 0x118 -/* 096DA8 7F062278 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 096DAC 7F06227C 8FA50158 */ lw $a1, 0x158($sp) -/* 096DB0 7F062280 27A20108 */ addiu $v0, $sp, 0x108 -/* 096DB4 7F062284 8C410000 */ lw $at, ($v0) -/* 096DB8 7F062288 AE010000 */ sw $at, ($s0) -/* 096DBC 7F06228C 8C4D0004 */ lw $t5, 4($v0) -/* 096DC0 7F062290 AE0D0004 */ sw $t5, 4($s0) -/* 096DC4 7F062294 8C410008 */ lw $at, 8($v0) -/* 096DC8 7F062298 AE010008 */ sw $at, 8($s0) -/* 096DCC 7F06229C 8C4D000C */ lw $t5, 0xc($v0) -/* 096DD0 7F0622A0 AE0D000C */ sw $t5, 0xc($s0) -/* 096DD4 7F0622A4 8C410000 */ lw $at, ($v0) -/* 096DD8 7F0622A8 AE010010 */ sw $at, 0x10($s0) -/* 096DDC 7F0622AC 8C4E0004 */ lw $t6, 4($v0) -/* 096DE0 7F0622B0 AE0E0014 */ sw $t6, 0x14($s0) -/* 096DE4 7F0622B4 8C410008 */ lw $at, 8($v0) -/* 096DE8 7F0622B8 AE010018 */ sw $at, 0x18($s0) -/* 096DEC 7F0622BC 8C4E000C */ lw $t6, 0xc($v0) -/* 096DF0 7F0622C0 AE0E001C */ sw $t6, 0x1c($s0) -/* 096DF4 7F0622C4 8C410000 */ lw $at, ($v0) -/* 096DF8 7F0622C8 AE010020 */ sw $at, 0x20($s0) -/* 096DFC 7F0622CC 8C4A0004 */ lw $t2, 4($v0) -/* 096E00 7F0622D0 AE0A0024 */ sw $t2, 0x24($s0) -/* 096E04 7F0622D4 8C410008 */ lw $at, 8($v0) -/* 096E08 7F0622D8 AE010028 */ sw $at, 0x28($s0) -/* 096E0C 7F0622DC 8C4A000C */ lw $t2, 0xc($v0) -/* 096E10 7F0622E0 AE0A002C */ sw $t2, 0x2c($s0) -/* 096E14 7F0622E4 8C410000 */ lw $at, ($v0) -/* 096E18 7F0622E8 AE010030 */ sw $at, 0x30($s0) -/* 096E1C 7F0622EC 8C4D0004 */ lw $t5, 4($v0) -/* 096E20 7F0622F0 AE0D0034 */ sw $t5, 0x34($s0) -/* 096E24 7F0622F4 8C410008 */ lw $at, 8($v0) -/* 096E28 7F0622F8 AE010038 */ sw $at, 0x38($s0) -/* 096E2C 7F0622FC 8C4D000C */ lw $t5, 0xc($v0) -/* 096E30 7F062300 24010016 */ li $at, 22 -/* 096E34 7F062304 AE0D003C */ sw $t5, 0x3c($s0) -/* 096E38 7F062308 82230001 */ lb $v1, 1($s1) -/* 096E3C 7F06230C 54610023 */ bnel $v1, $at, .L7F06239C -/* 096E40 7F062310 24010017 */ li $at, 23 -/* 096E44 7F062314 8C410000 */ lw $at, ($v0) -/* 096E48 7F062318 AE010040 */ sw $at, 0x40($s0) -/* 096E4C 7F06231C 8C4B0004 */ lw $t3, 4($v0) -/* 096E50 7F062320 AE0B0044 */ sw $t3, 0x44($s0) -/* 096E54 7F062324 8C410008 */ lw $at, 8($v0) -/* 096E58 7F062328 AE010048 */ sw $at, 0x48($s0) -/* 096E5C 7F06232C 8C4B000C */ lw $t3, 0xc($v0) -/* 096E60 7F062330 AE0B004C */ sw $t3, 0x4c($s0) -/* 096E64 7F062334 8C410000 */ lw $at, ($v0) -/* 096E68 7F062338 AE010050 */ sw $at, 0x50($s0) -/* 096E6C 7F06233C 8C580004 */ lw $t8, 4($v0) -/* 096E70 7F062340 AE180054 */ sw $t8, 0x54($s0) -/* 096E74 7F062344 8C410008 */ lw $at, 8($v0) -/* 096E78 7F062348 AE010058 */ sw $at, 0x58($s0) -/* 096E7C 7F06234C 8C58000C */ lw $t8, 0xc($v0) -/* 096E80 7F062350 AE18005C */ sw $t8, 0x5c($s0) -/* 096E84 7F062354 8C410000 */ lw $at, ($v0) -/* 096E88 7F062358 AE010060 */ sw $at, 0x60($s0) -/* 096E8C 7F06235C 8C4A0004 */ lw $t2, 4($v0) -/* 096E90 7F062360 AE0A0064 */ sw $t2, 0x64($s0) -/* 096E94 7F062364 8C410008 */ lw $at, 8($v0) -/* 096E98 7F062368 AE010068 */ sw $at, 0x68($s0) -/* 096E9C 7F06236C 8C4A000C */ lw $t2, 0xc($v0) -/* 096EA0 7F062370 AE0A006C */ sw $t2, 0x6c($s0) -/* 096EA4 7F062374 8C410000 */ lw $at, ($v0) -/* 096EA8 7F062378 AE010070 */ sw $at, 0x70($s0) -/* 096EAC 7F06237C 8C4F0004 */ lw $t7, 4($v0) -/* 096EB0 7F062380 AE0F0074 */ sw $t7, 0x74($s0) -/* 096EB4 7F062384 8C410008 */ lw $at, 8($v0) -/* 096EB8 7F062388 AE010078 */ sw $at, 0x78($s0) -/* 096EBC 7F06238C 8C4F000C */ lw $t7, 0xc($v0) -/* 096EC0 7F062390 AE0F007C */ sw $t7, 0x7c($s0) -/* 096EC4 7F062394 82230001 */ lb $v1, 1($s1) -/* 096EC8 7F062398 24010017 */ li $at, 23 -.L7F06239C: -/* 096ECC 7F06239C 5461004F */ bnel $v1, $at, .L7F0624DC -/* 096ED0 7F0623A0 3C014120 */ lui $at, 0x4120 -/* 096ED4 7F0623A4 C6280010 */ lwc1 $f8, 0x10($s1) -/* 096ED8 7F0623A8 C7A400FC */ lwc1 $f4, 0xfc($sp) -/* 096EDC 7F0623AC 8FA400A8 */ lw $a0, 0xa8($sp) -/* 096EE0 7F0623B0 46144182 */ mul.s $f6, $f8, $f20 -/* 096EE4 7F0623B4 27A5009C */ addiu $a1, $sp, 0x9c -/* 096EE8 7F0623B8 46043280 */ add.s $f10, $f6, $f4 -/* 096EEC 7F0623BC C7A40100 */ lwc1 $f4, 0x100($sp) -/* 096EF0 7F0623C0 E7AA009C */ swc1 $f10, 0x9c($sp) -/* 096EF4 7F0623C4 C6280014 */ lwc1 $f8, 0x14($s1) -/* 096EF8 7F0623C8 46144182 */ mul.s $f6, $f8, $f20 -/* 096EFC 7F0623CC 46043280 */ add.s $f10, $f6, $f4 -/* 096F00 7F0623D0 C7A40104 */ lwc1 $f4, 0x104($sp) -/* 096F04 7F0623D4 E7AA00A0 */ swc1 $f10, 0xa0($sp) -/* 096F08 7F0623D8 C6280018 */ lwc1 $f8, 0x18($s1) -/* 096F0C 7F0623DC 46144182 */ mul.s $f6, $f8, $f20 -/* 096F10 7F0623E0 46043280 */ add.s $f10, $f6, $f4 -/* 096F14 7F0623E4 0FC1611D */ jal mtx4TransformVecInPlace -/* 096F18 7F0623E8 E7AA00A4 */ swc1 $f10, 0xa4($sp) -/* 096F1C 7F0623EC 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 096F20 7F0623F0 44813000 */ mtc1 $at, $f6 -/* 096F24 7F0623F4 C7A800F4 */ lwc1 $f8, 0xf4($sp) -/* 096F28 7F0623F8 C7AE00A4 */ lwc1 $f14, 0xa4($sp) -/* 096F2C 7F0623FC 27A40088 */ addiu $a0, $sp, 0x88 -/* 096F30 7F062400 46064003 */ div.s $f0, $f8, $f6 -/* 096F34 7F062404 27A60090 */ addiu $a2, $sp, 0x90 -/* 096F38 7F062408 46007087 */ neg.s $f2, $f14 -/* 096F3C 7F06240C 44051000 */ mfc1 $a1, $f2 -/* 096F40 7F062410 E7A0008C */ swc1 $f0, 0x8c($sp) -/* 096F44 7F062414 0FC1E03C */ jal divide3DCoordinates -/* 096F48 7F062418 E7A00088 */ swc1 $f0, 0x88($sp) -/* 096F4C 7F06241C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 096F50 7F062420 C7B00090 */ lwc1 $f16, 0x90($sp) -/* 096F54 7F062424 44812000 */ mtc1 $at, $f4 -/* 096F58 7F062428 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 096F5C 7F06242C 4604803C */ c.lt.s $f16, $f4 -/* 096F60 7F062430 00000000 */ nop -/* 096F64 7F062434 4500000E */ bc1f .L7F062470 -/* 096F68 7F062438 00000000 */ nop -/* 096F6C 7F06243C 44815000 */ mtc1 $at, $f10 -/* 096F70 7F062440 C7A2009C */ lwc1 $f2, 0x9c($sp) -/* 096F74 7F062444 C7AC00A0 */ lwc1 $f12, 0xa0($sp) -/* 096F78 7F062448 460A8002 */ mul.s $f0, $f16, $f10 -/* 096F7C 7F06244C C7AE00A4 */ lwc1 $f14, 0xa4($sp) -/* 096F80 7F062450 46001082 */ mul.s $f2, $f2, $f0 -/* 096F84 7F062454 00000000 */ nop -/* 096F88 7F062458 46006302 */ mul.s $f12, $f12, $f0 -/* 096F8C 7F06245C 00000000 */ nop -/* 096F90 7F062460 46007382 */ mul.s $f14, $f14, $f0 -/* 096F94 7F062464 E7A2009C */ swc1 $f2, 0x9c($sp) -/* 096F98 7F062468 E7AC00A0 */ swc1 $f12, 0xa0($sp) -/* 096F9C 7F06246C E7AE00A4 */ swc1 $f14, 0xa4($sp) -.L7F062470: -/* 096FA0 7F062470 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 096FA4 7F062474 00000000 */ nop -/* 096FA8 7F062478 00402025 */ move $a0, $v0 -/* 096FAC 7F06247C 0FC1611D */ jal mtx4TransformVecInPlace -/* 096FB0 7F062480 27A5009C */ addiu $a1, $sp, 0x9c -/* 096FB4 7F062484 C7A2009C */ lwc1 $f2, 0x9c($sp) -/* 096FB8 7F062488 C7A800FC */ lwc1 $f8, 0xfc($sp) -/* 096FBC 7F06248C C7AC00A0 */ lwc1 $f12, 0xa0($sp) -/* 096FC0 7F062490 C7A60100 */ lwc1 $f6, 0x100($sp) -/* 096FC4 7F062494 46081081 */ sub.s $f2, $f2, $f8 -/* 096FC8 7F062498 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 096FCC 7F06249C 44810000 */ mtc1 $at, $f0 -/* 096FD0 7F0624A0 46066301 */ sub.s $f12, $f12, $f6 -/* 096FD4 7F0624A4 C7AE00A4 */ lwc1 $f14, 0xa4($sp) -/* 096FD8 7F0624A8 C7A40104 */ lwc1 $f4, 0x104($sp) -/* 096FDC 7F0624AC 46001282 */ mul.s $f10, $f2, $f0 -/* 096FE0 7F0624B0 E7AC00A0 */ swc1 $f12, 0xa0($sp) -/* 096FE4 7F0624B4 46047381 */ sub.s $f14, $f14, $f4 -/* 096FE8 7F0624B8 46006202 */ mul.s $f8, $f12, $f0 -/* 096FEC 7F0624BC E7A2009C */ swc1 $f2, 0x9c($sp) -/* 096FF0 7F0624C0 46007182 */ mul.s $f6, $f14, $f0 -/* 096FF4 7F0624C4 E7AA00C4 */ swc1 $f10, 0xc4($sp) -/* 096FF8 7F0624C8 E7AE00A4 */ swc1 $f14, 0xa4($sp) -/* 096FFC 7F0624CC E7A800C8 */ swc1 $f8, 0xc8($sp) -/* 097000 7F0624D0 1000000E */ b .L7F06250C -/* 097004 7F0624D4 E7A600CC */ swc1 $f6, 0xcc($sp) -/* 097008 7F0624D8 3C014120 */ li $at, 0x41200000 # 10.000000 -.L7F0624DC: -/* 09700C 7F0624DC 44812000 */ mtc1 $at, $f4 -/* 097010 7F0624E0 C62A0010 */ lwc1 $f10, 0x10($s1) -/* 097014 7F0624E4 4604A002 */ mul.s $f0, $f20, $f4 -/* 097018 7F0624E8 00000000 */ nop -/* 09701C 7F0624EC 46005202 */ mul.s $f8, $f10, $f0 -/* 097020 7F0624F0 E7A800C4 */ swc1 $f8, 0xc4($sp) -/* 097024 7F0624F4 C6260014 */ lwc1 $f6, 0x14($s1) -/* 097028 7F0624F8 46003102 */ mul.s $f4, $f6, $f0 -/* 09702C 7F0624FC E7A400C8 */ swc1 $f4, 0xc8($sp) -/* 097030 7F062500 C62A0018 */ lwc1 $f10, 0x18($s1) -/* 097034 7F062504 46005202 */ mul.s $f8, $f10, $f0 -/* 097038 7F062508 E7A800CC */ swc1 $f8, 0xcc($sp) -.L7F06250C: -/* 09703C 7F06250C C7A600D0 */ lwc1 $f6, 0xd0($sp) -/* 097040 7F062510 8FA500B0 */ lw $a1, 0xb0($sp) -/* 097044 7F062514 3C018005 */ lui $at, %hi(D_80053EB4) -/* 097048 7F062518 4600310D */ trunc.w.s $f4, $f6 -/* 09704C 7F06251C 44192000 */ mfc1 $t9, $f4 -/* 097050 7F062520 00000000 */ nop -/* 097054 7F062524 A6190000 */ sh $t9, ($s0) -/* 097058 7F062528 C7AA00D4 */ lwc1 $f10, 0xd4($sp) -/* 09705C 7F06252C 4600520D */ trunc.w.s $f8, $f10 -/* 097060 7F062530 440E4000 */ mfc1 $t6, $f8 -/* 097064 7F062534 00000000 */ nop -/* 097068 7F062538 A60E0002 */ sh $t6, 2($s0) -/* 09706C 7F06253C C7A600D8 */ lwc1 $f6, 0xd8($sp) -/* 097070 7F062540 4600310D */ trunc.w.s $f4, $f6 -/* 097074 7F062544 44092000 */ mfc1 $t1, $f4 -/* 097078 7F062548 00000000 */ nop -/* 09707C 7F06254C A6090004 */ sh $t1, 4($s0) -/* 097080 7F062550 90AA0004 */ lbu $t2, 4($a1) -/* 097084 7F062554 A600000A */ sh $zero, 0xa($s0) -/* 097088 7F062558 000A6140 */ sll $t4, $t2, 5 -/* 09708C 7F06255C A60C0008 */ sh $t4, 8($s0) -/* 097090 7F062560 C7AA00D0 */ lwc1 $f10, 0xd0($sp) -/* 097094 7F062564 46005207 */ neg.s $f8, $f10 -/* 097098 7F062568 4600418D */ trunc.w.s $f6, $f8 -/* 09709C 7F06256C 440D3000 */ mfc1 $t5, $f6 -/* 0970A0 7F062570 00000000 */ nop -/* 0970A4 7F062574 A60D0010 */ sh $t5, 0x10($s0) -/* 0970A8 7F062578 C7A400D4 */ lwc1 $f4, 0xd4($sp) -/* 0970AC 7F06257C 46002287 */ neg.s $f10, $f4 -/* 0970B0 7F062580 4600520D */ trunc.w.s $f8, $f10 -/* 0970B4 7F062584 440B4000 */ mfc1 $t3, $f8 -/* 0970B8 7F062588 00000000 */ nop -/* 0970BC 7F06258C A60B0012 */ sh $t3, 0x12($s0) -/* 0970C0 7F062590 C7A600D8 */ lwc1 $f6, 0xd8($sp) -/* 0970C4 7F062594 A6000018 */ sh $zero, 0x18($s0) -/* 0970C8 7F062598 A600001A */ sh $zero, 0x1a($s0) -/* 0970CC 7F06259C 46003107 */ neg.s $f4, $f6 -/* 0970D0 7F0625A0 4600228D */ trunc.w.s $f10, $f4 -/* 0970D4 7F0625A4 44185000 */ mfc1 $t8, $f10 -/* 0970D8 7F0625A8 00000000 */ nop -/* 0970DC 7F0625AC A6180014 */ sh $t8, 0x14($s0) -/* 0970E0 7F0625B0 C7A800D0 */ lwc1 $f8, 0xd0($sp) -/* 0970E4 7F0625B4 C4263EB4 */ lwc1 $f6, %lo(D_80053EB4)($at) -/* 0970E8 7F0625B8 C7AA00C4 */ lwc1 $f10, 0xc4($sp) -/* 0970EC 7F0625BC 3C018005 */ lui $at, %hi(D_80053EB8) -/* 0970F0 7F0625C0 46064102 */ mul.s $f4, $f8, $f6 -/* 0970F4 7F0625C4 460A2200 */ add.s $f8, $f4, $f10 -/* 0970F8 7F0625C8 4600418D */ trunc.w.s $f6, $f8 -/* 0970FC 7F0625CC 440A3000 */ mfc1 $t2, $f6 -/* 097100 7F0625D0 00000000 */ nop -/* 097104 7F0625D4 A60A0020 */ sh $t2, 0x20($s0) -/* 097108 7F0625D8 C7A400D4 */ lwc1 $f4, 0xd4($sp) -/* 09710C 7F0625DC C42A3EB8 */ lwc1 $f10, %lo(D_80053EB8)($at) -/* 097110 7F0625E0 C7A600C8 */ lwc1 $f6, 0xc8($sp) -/* 097114 7F0625E4 3C018005 */ lui $at, %hi(D_80053EBC) -/* 097118 7F0625E8 460A2202 */ mul.s $f8, $f4, $f10 -/* 09711C 7F0625EC 46064100 */ add.s $f4, $f8, $f6 -/* 097120 7F0625F0 4600228D */ trunc.w.s $f10, $f4 -/* 097124 7F0625F4 440F5000 */ mfc1 $t7, $f10 -/* 097128 7F0625F8 00000000 */ nop -/* 09712C 7F0625FC A60F0022 */ sh $t7, 0x22($s0) -/* 097130 7F062600 C7A800D8 */ lwc1 $f8, 0xd8($sp) -/* 097134 7F062604 C4263EBC */ lwc1 $f6, %lo(D_80053EBC)($at) -/* 097138 7F062608 C7AA00CC */ lwc1 $f10, 0xcc($sp) -/* 09713C 7F06260C 3C018005 */ lui $at, %hi(D_80053EC0) -/* 097140 7F062610 46064102 */ mul.s $f4, $f8, $f6 -/* 097144 7F062614 460A2200 */ add.s $f8, $f4, $f10 -/* 097148 7F062618 4600418D */ trunc.w.s $f6, $f8 -/* 09714C 7F06261C 44193000 */ mfc1 $t9, $f6 -/* 097150 7F062620 00000000 */ nop -/* 097154 7F062624 A6190024 */ sh $t9, 0x24($s0) -/* 097158 7F062628 90AB0004 */ lbu $t3, 4($a1) -/* 09715C 7F06262C 000B7140 */ sll $t6, $t3, 5 -/* 097160 7F062630 A60E0028 */ sh $t6, 0x28($s0) -/* 097164 7F062634 90B80005 */ lbu $t8, 5($a1) -/* 097168 7F062638 00184940 */ sll $t1, $t8, 5 -/* 09716C 7F06263C A609002A */ sh $t1, 0x2a($s0) -/* 097170 7F062640 C42A3EC0 */ lwc1 $f10, %lo(D_80053EC0)($at) -/* 097174 7F062644 C7A400D0 */ lwc1 $f4, 0xd0($sp) -/* 097178 7F062648 C7A600C4 */ lwc1 $f6, 0xc4($sp) -/* 09717C 7F06264C 3C018005 */ lui $at, %hi(D_80053EC4) -/* 097180 7F062650 460A2202 */ mul.s $f8, $f4, $f10 -/* 097184 7F062654 46083101 */ sub.s $f4, $f6, $f8 -/* 097188 7F062658 4600228D */ trunc.w.s $f10, $f4 -/* 09718C 7F06265C 440C5000 */ mfc1 $t4, $f10 -/* 097190 7F062660 00000000 */ nop -/* 097194 7F062664 A60C0030 */ sh $t4, 0x30($s0) -/* 097198 7F062668 C4283EC4 */ lwc1 $f8, %lo(D_80053EC4)($at) -/* 09719C 7F06266C C7A600D4 */ lwc1 $f6, 0xd4($sp) -/* 0971A0 7F062670 C7AA00C8 */ lwc1 $f10, 0xc8($sp) -/* 0971A4 7F062674 3C018005 */ lui $at, %hi(D_80053EC8) -/* 0971A8 7F062678 46083102 */ mul.s $f4, $f6, $f8 -/* 0971AC 7F06267C 46045181 */ sub.s $f6, $f10, $f4 -/* 0971B0 7F062680 4600320D */ trunc.w.s $f8, $f6 -/* 0971B4 7F062684 440D4000 */ mfc1 $t5, $f8 -/* 0971B8 7F062688 00000000 */ nop -/* 0971BC 7F06268C A60D0032 */ sh $t5, 0x32($s0) -/* 0971C0 7F062690 C4243EC8 */ lwc1 $f4, %lo(D_80053EC8)($at) -/* 0971C4 7F062694 C7AA00D8 */ lwc1 $f10, 0xd8($sp) -/* 0971C8 7F062698 C7A800CC */ lwc1 $f8, 0xcc($sp) -/* 0971CC 7F06269C A6000038 */ sh $zero, 0x38($s0) -/* 0971D0 7F0626A0 46045182 */ mul.s $f6, $f10, $f4 -/* 0971D4 7F0626A4 24010016 */ li $at, 22 -/* 0971D8 7F0626A8 46064281 */ sub.s $f10, $f8, $f6 -/* 0971DC 7F0626AC 4600510D */ trunc.w.s $f4, $f10 -/* 0971E0 7F0626B0 440B2000 */ mfc1 $t3, $f4 -/* 0971E4 7F0626B4 00000000 */ nop -/* 0971E8 7F0626B8 A60B0034 */ sh $t3, 0x34($s0) -/* 0971EC 7F0626BC 90AE0005 */ lbu $t6, 5($a1) -/* 0971F0 7F0626C0 000EC140 */ sll $t8, $t6, 5 -/* 0971F4 7F0626C4 A618003A */ sh $t8, 0x3a($s0) -/* 0971F8 7F0626C8 82290001 */ lb $t1, 1($s1) -/* 0971FC 7F0626CC C7A800FC */ lwc1 $f8, 0xfc($sp) -/* 097200 7F0626D0 8FAA00F8 */ lw $t2, 0xf8($sp) -/* 097204 7F0626D4 552100AD */ bnel $t1, $at, .L7F06298C -/* 097208 7F0626D8 8FAC0160 */ lw $t4, 0x160($sp) -/* 09720C 7F0626DC C54C0000 */ lwc1 $f12, ($t2) -/* 097210 7F0626E0 C5420004 */ lwc1 $f2, 4($t2) -/* 097214 7F0626E4 C7A60100 */ lwc1 $f6, 0x100($sp) -/* 097218 7F0626E8 46086381 */ sub.s $f14, $f12, $f8 -/* 09721C 7F0626EC C5400008 */ lwc1 $f0, 8($t2) -/* 097220 7F0626F0 E7A80038 */ swc1 $f8, 0x38($sp) -/* 097224 7F0626F4 46061401 */ sub.s $f16, $f2, $f6 -/* 097228 7F0626F8 460E7102 */ mul.s $f4, $f14, $f14 -/* 09722C 7F0626FC C7AA0104 */ lwc1 $f10, 0x104($sp) -/* 097230 7F062700 3C018005 */ lui $at, %hi(D_80053ECC) -/* 097234 7F062704 46108202 */ mul.s $f8, $f16, $f16 -/* 097238 7F062708 460A0481 */ sub.s $f18, $f0, $f10 -/* 09723C 7F06270C 46082100 */ add.s $f4, $f4, $f8 -/* 097240 7F062710 46129202 */ mul.s $f8, $f18, $f18 -/* 097244 7F062714 46082100 */ add.s $f4, $f4, $f8 -/* 097248 7F062718 E7A40078 */ swc1 $f4, 0x78($sp) -/* 09724C 7F06271C C6280010 */ lwc1 $f8, 0x10($s1) -/* 097250 7F062720 E7A60034 */ swc1 $f6, 0x34($sp) -/* 097254 7F062724 C7A60038 */ lwc1 $f6, 0x38($sp) -/* 097258 7F062728 46144202 */ mul.s $f8, $f8, $f20 -/* 09725C 7F06272C 46064200 */ add.s $f8, $f8, $f6 -/* 097260 7F062730 C6260014 */ lwc1 $f6, 0x14($s1) -/* 097264 7F062734 46086381 */ sub.s $f14, $f12, $f8 -/* 097268 7F062738 46143202 */ mul.s $f8, $f6, $f20 -/* 09726C 7F06273C C7A60034 */ lwc1 $f6, 0x34($sp) -/* 097270 7F062740 46064200 */ add.s $f8, $f8, $f6 -/* 097274 7F062744 C6260018 */ lwc1 $f6, 0x18($s1) -/* 097278 7F062748 46081401 */ sub.s $f16, $f2, $f8 -/* 09727C 7F06274C 46143202 */ mul.s $f8, $f6, $f20 -/* 097280 7F062750 460A4180 */ add.s $f6, $f8, $f10 -/* 097284 7F062754 460E7202 */ mul.s $f8, $f14, $f14 -/* 097288 7F062758 00000000 */ nop -/* 09728C 7F06275C 46108282 */ mul.s $f10, $f16, $f16 -/* 097290 7F062760 46060481 */ sub.s $f18, $f0, $f6 -/* 097294 7F062764 460A4180 */ add.s $f6, $f8, $f10 -/* 097298 7F062768 46129202 */ mul.s $f8, $f18, $f18 -/* 09729C 7F06276C 46083280 */ add.s $f10, $f6, $f8 -/* 0972A0 7F062770 C7A600C4 */ lwc1 $f6, 0xc4($sp) -/* 0972A4 7F062774 4604503C */ c.lt.s $f10, $f4 -/* 0972A8 7F062778 00000000 */ nop -/* 0972AC 7F06277C 4500000B */ bc1f .L7F0627AC -/* 0972B0 7F062780 00000000 */ nop -/* 0972B4 7F062784 C4243ECC */ lwc1 $f4, %lo(D_80053ECC)($at) -/* 0972B8 7F062788 E7A600B8 */ swc1 $f6, 0xb8($sp) -/* 0972BC 7F06278C 3C018005 */ lui $at, %hi(D_80053ED0) -/* 0972C0 7F062790 C4263ED0 */ lwc1 $f6, %lo(D_80053ED0)($at) -/* 0972C4 7F062794 C7A800C8 */ lwc1 $f8, 0xc8($sp) -/* 0972C8 7F062798 C7AA00CC */ lwc1 $f10, 0xcc($sp) -/* 0972CC 7F06279C 46062002 */ mul.s $f0, $f4, $f6 -/* 0972D0 7F0627A0 E7A800BC */ swc1 $f8, 0xbc($sp) -/* 0972D4 7F0627A4 E7AA00C0 */ swc1 $f10, 0xc0($sp) -/* 0972D8 7F0627A8 E7A000B4 */ swc1 $f0, 0xb4($sp) -.L7F0627AC: -/* 0972DC 7F0627AC C7A000B4 */ lwc1 $f0, 0xb4($sp) -/* 0972E0 7F0627B0 C7A800DC */ lwc1 $f8, 0xdc($sp) -/* 0972E4 7F0627B4 C7A400B8 */ lwc1 $f4, 0xb8($sp) -/* 0972E8 7F0627B8 3C088009 */ lui $t0, %hi(flareimage5) -/* 0972EC 7F0627BC 46004282 */ mul.s $f10, $f8, $f0 -/* 0972F0 7F0627C0 2508D0D8 */ addiu $t0, %lo(flareimage5) # addiu $t0, $t0, -0x2f28 -/* 0972F4 7F0627C4 46045180 */ add.s $f6, $f10, $f4 -/* 0972F8 7F0627C8 4600320D */ trunc.w.s $f8, $f6 -/* 0972FC 7F0627CC 440F4000 */ mfc1 $t7, $f8 -/* 097300 7F0627D0 00000000 */ nop -/* 097304 7F0627D4 A60F0040 */ sh $t7, 0x40($s0) -/* 097308 7F0627D8 C7AA00E0 */ lwc1 $f10, 0xe0($sp) -/* 09730C 7F0627DC C7A600BC */ lwc1 $f6, 0xbc($sp) -/* 097310 7F0627E0 46005102 */ mul.s $f4, $f10, $f0 -/* 097314 7F0627E4 46062200 */ add.s $f8, $f4, $f6 -/* 097318 7F0627E8 4600428D */ trunc.w.s $f10, $f8 -/* 09731C 7F0627EC 44195000 */ mfc1 $t9, $f10 -/* 097320 7F0627F0 00000000 */ nop -/* 097324 7F0627F4 A6190042 */ sh $t9, 0x42($s0) -/* 097328 7F0627F8 C7A400E4 */ lwc1 $f4, 0xe4($sp) -/* 09732C 7F0627FC C7A800C0 */ lwc1 $f8, 0xc0($sp) -/* 097330 7F062800 46002182 */ mul.s $f6, $f4, $f0 -/* 097334 7F062804 46083280 */ add.s $f10, $f6, $f8 -/* 097338 7F062808 4600510D */ trunc.w.s $f4, $f10 -/* 09733C 7F06280C 440E2000 */ mfc1 $t6, $f4 -/* 097340 7F062810 00000000 */ nop -/* 097344 7F062814 A60E0044 */ sh $t6, 0x44($s0) -/* 097348 7F062818 8D180000 */ lw $t8, ($t0) -/* 09734C 7F06281C 93090004 */ lbu $t1, 4($t8) -/* 097350 7F062820 00095140 */ sll $t2, $t1, 5 -/* 097354 7F062824 A60A0048 */ sh $t2, 0x48($s0) -/* 097358 7F062828 8D0C0000 */ lw $t4, ($t0) -/* 09735C 7F06282C 918F0005 */ lbu $t7, 5($t4) -/* 097360 7F062830 000F6940 */ sll $t5, $t7, 5 -/* 097364 7F062834 A60D004A */ sh $t5, 0x4a($s0) -/* 097368 7F062838 C7A800DC */ lwc1 $f8, 0xdc($sp) -/* 09736C 7F06283C C7A600B8 */ lwc1 $f6, 0xb8($sp) -/* 097370 7F062840 46004282 */ mul.s $f10, $f8, $f0 -/* 097374 7F062844 460A3101 */ sub.s $f4, $f6, $f10 -/* 097378 7F062848 4600220D */ trunc.w.s $f8, $f4 -/* 09737C 7F06284C 440B4000 */ mfc1 $t3, $f8 -/* 097380 7F062850 00000000 */ nop -/* 097384 7F062854 A60B0050 */ sh $t3, 0x50($s0) -/* 097388 7F062858 C7AA00E0 */ lwc1 $f10, 0xe0($sp) -/* 09738C 7F06285C C7A600BC */ lwc1 $f6, 0xbc($sp) -/* 097390 7F062860 46005102 */ mul.s $f4, $f10, $f0 -/* 097394 7F062864 46043201 */ sub.s $f8, $f6, $f4 -/* 097398 7F062868 4600428D */ trunc.w.s $f10, $f8 -/* 09739C 7F06286C 44185000 */ mfc1 $t8, $f10 -/* 0973A0 7F062870 00000000 */ nop -/* 0973A4 7F062874 A6180052 */ sh $t8, 0x52($s0) -/* 0973A8 7F062878 C7A400E4 */ lwc1 $f4, 0xe4($sp) -/* 0973AC 7F06287C C7A600C0 */ lwc1 $f6, 0xc0($sp) -/* 0973B0 7F062880 A6000058 */ sh $zero, 0x58($s0) -/* 0973B4 7F062884 46002202 */ mul.s $f8, $f4, $f0 -/* 0973B8 7F062888 A600005A */ sh $zero, 0x5a($s0) -/* 0973BC 7F06288C 46083281 */ sub.s $f10, $f6, $f8 -/* 0973C0 7F062890 4600510D */ trunc.w.s $f4, $f10 -/* 0973C4 7F062894 440A2000 */ mfc1 $t2, $f4 -/* 0973C8 7F062898 00000000 */ nop -/* 0973CC 7F06289C A60A0054 */ sh $t2, 0x54($s0) -/* 0973D0 7F0628A0 C7A600D0 */ lwc1 $f6, 0xd0($sp) -/* 0973D4 7F0628A4 C7AA00B8 */ lwc1 $f10, 0xb8($sp) -/* 0973D8 7F0628A8 46003202 */ mul.s $f8, $f6, $f0 -/* 0973DC 7F0628AC 460A4100 */ add.s $f4, $f8, $f10 -/* 0973E0 7F0628B0 4600218D */ trunc.w.s $f6, $f4 -/* 0973E4 7F0628B4 440F3000 */ mfc1 $t7, $f6 -/* 0973E8 7F0628B8 00000000 */ nop -/* 0973EC 7F0628BC A60F0060 */ sh $t7, 0x60($s0) -/* 0973F0 7F0628C0 C7A800D4 */ lwc1 $f8, 0xd4($sp) -/* 0973F4 7F0628C4 C7A400BC */ lwc1 $f4, 0xbc($sp) -/* 0973F8 7F0628C8 46004282 */ mul.s $f10, $f8, $f0 -/* 0973FC 7F0628CC 46045180 */ add.s $f6, $f10, $f4 -/* 097400 7F0628D0 4600320D */ trunc.w.s $f8, $f6 -/* 097404 7F0628D4 44194000 */ mfc1 $t9, $f8 -/* 097408 7F0628D8 00000000 */ nop -/* 09740C 7F0628DC A6190062 */ sh $t9, 0x62($s0) -/* 097410 7F0628E0 C7AA00D8 */ lwc1 $f10, 0xd8($sp) -/* 097414 7F0628E4 C7A600C0 */ lwc1 $f6, 0xc0($sp) -/* 097418 7F0628E8 A6000068 */ sh $zero, 0x68($s0) -/* 09741C 7F0628EC 46005102 */ mul.s $f4, $f10, $f0 -/* 097420 7F0628F0 46062200 */ add.s $f8, $f4, $f6 -/* 097424 7F0628F4 4600428D */ trunc.w.s $f10, $f8 -/* 097428 7F0628F8 440E5000 */ mfc1 $t6, $f10 -/* 09742C 7F0628FC 00000000 */ nop -/* 097430 7F062900 A60E0064 */ sh $t6, 0x64($s0) -/* 097434 7F062904 8D180000 */ lw $t8, ($t0) -/* 097438 7F062908 93090005 */ lbu $t1, 5($t8) -/* 09743C 7F06290C 00095140 */ sll $t2, $t1, 5 -/* 097440 7F062910 A60A006A */ sh $t2, 0x6a($s0) -/* 097444 7F062914 C7A600D0 */ lwc1 $f6, 0xd0($sp) -/* 097448 7F062918 C7A400B8 */ lwc1 $f4, 0xb8($sp) -/* 09744C 7F06291C 46003202 */ mul.s $f8, $f6, $f0 -/* 097450 7F062920 46082281 */ sub.s $f10, $f4, $f8 -/* 097454 7F062924 4600518D */ trunc.w.s $f6, $f10 -/* 097458 7F062928 440F3000 */ mfc1 $t7, $f6 -/* 09745C 7F06292C 00000000 */ nop -/* 097460 7F062930 A60F0070 */ sh $t7, 0x70($s0) -/* 097464 7F062934 C7A800D4 */ lwc1 $f8, 0xd4($sp) -/* 097468 7F062938 C7A400BC */ lwc1 $f4, 0xbc($sp) -/* 09746C 7F06293C 46004282 */ mul.s $f10, $f8, $f0 -/* 097470 7F062940 460A2181 */ sub.s $f6, $f4, $f10 -/* 097474 7F062944 4600320D */ trunc.w.s $f8, $f6 -/* 097478 7F062948 44194000 */ mfc1 $t9, $f8 -/* 09747C 7F06294C 00000000 */ nop -/* 097480 7F062950 A6190072 */ sh $t9, 0x72($s0) -/* 097484 7F062954 C7AA00D8 */ lwc1 $f10, 0xd8($sp) -/* 097488 7F062958 C7A400C0 */ lwc1 $f4, 0xc0($sp) -/* 09748C 7F06295C 46005182 */ mul.s $f6, $f10, $f0 -/* 097490 7F062960 46062201 */ sub.s $f8, $f4, $f6 -/* 097494 7F062964 4600428D */ trunc.w.s $f10, $f8 -/* 097498 7F062968 440E5000 */ mfc1 $t6, $f10 -/* 09749C 7F06296C 00000000 */ nop -/* 0974A0 7F062970 A60E0074 */ sh $t6, 0x74($s0) -/* 0974A4 7F062974 8D180000 */ lw $t8, ($t0) -/* 0974A8 7F062978 93090004 */ lbu $t1, 4($t8) -/* 0974AC 7F06297C A600007A */ sh $zero, 0x7a($s0) -/* 0974B0 7F062980 00095140 */ sll $t2, $t1, 5 -/* 0974B4 7F062984 A60A0078 */ sh $t2, 0x78($s0) -/* 0974B8 7F062988 8FAC0160 */ lw $t4, 0x160($sp) -.L7F06298C: -/* 0974BC 7F06298C 3C0DB600 */ lui $t5, 0xb600 -/* 0974C0 7F062990 24192000 */ li $t9, 8192 -/* 0974C4 7F062994 258F0008 */ addiu $t7, $t4, 8 -/* 0974C8 7F062998 AFAF0160 */ sw $t7, 0x160($sp) -/* 0974CC 7F06299C AD990004 */ sw $t9, 4($t4) -/* 0974D0 7F0629A0 AD8D0000 */ sw $t5, ($t4) -/* 0974D4 7F0629A4 8FAB0160 */ lw $t3, 0x160($sp) -/* 0974D8 7F0629A8 3C180102 */ lui $t8, (0x01020040 >> 16) # lui $t8, 0x102 -/* 0974DC 7F0629AC 37180040 */ ori $t8, (0x01020040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 0974E0 7F0629B0 256E0008 */ addiu $t6, $t3, 8 -/* 0974E4 7F0629B4 AFAE0160 */ sw $t6, 0x160($sp) -/* 0974E8 7F0629B8 AD780000 */ sw $t8, ($t3) -/* 0974EC 7F0629BC 8FA40158 */ lw $a0, 0x158($sp) -/* 0974F0 7F0629C0 0C003A2C */ jal osVirtualToPhysical -/* 0974F4 7F0629C4 AFAB006C */ sw $t3, 0x6c($sp) -/* 0974F8 7F0629C8 8FA3006C */ lw $v1, 0x6c($sp) -/* 0974FC 7F0629CC 3C088009 */ lui $t0, %hi(flareimage5) -/* 097500 7F0629D0 24010016 */ li $at, 22 -/* 097504 7F0629D4 AC620004 */ sw $v0, 4($v1) -/* 097508 7F0629D8 82290001 */ lb $t1, 1($s1) -/* 09750C 7F0629DC 2508D0D8 */ addiu $t0, %lo(flareimage5) # addiu $t0, $t0, -0x2f28 -/* 097510 7F0629E0 8FA500B0 */ lw $a1, 0xb0($sp) -/* 097514 7F0629E4 15210029 */ bne $t1, $at, .L7F062A8C -/* 097518 7F0629E8 27A40160 */ addiu $a0, $sp, 0x160 -/* 09751C 7F0629EC 240A0002 */ li $t2, 2 -/* 097520 7F0629F0 AFAA0010 */ sw $t2, 0x10($sp) -/* 097524 7F0629F4 27A40160 */ addiu $a0, $sp, 0x160 -/* 097528 7F0629F8 8D050000 */ lw $a1, ($t0) -/* 09752C 7F0629FC 24060004 */ li $a2, 4 -/* 097530 7F062A00 0FC1DB5A */ jal texSelect -/* 097534 7F062A04 8FA70168 */ lw $a3, 0x168($sp) -/* 097538 7F062A08 8FB10160 */ lw $s1, 0x160($sp) -/* 09753C 7F062A0C 3C0D0470 */ lui $t5, (0x04700080 >> 16) # lui $t5, 0x470 -/* 097540 7F062A10 35AD0080 */ ori $t5, (0x04700080 & 0xFFFF) # ori $t5, $t5, 0x80 -/* 097544 7F062A14 262F0008 */ addiu $t7, $s1, 8 -/* 097548 7F062A18 AFAF0160 */ sw $t7, 0x160($sp) -/* 09754C 7F062A1C 02002025 */ move $a0, $s0 -/* 097550 7F062A20 0C003A2C */ jal osVirtualToPhysical -/* 097554 7F062A24 AE2D0000 */ sw $t5, ($s1) -/* 097558 7F062A28 AE220004 */ sw $v0, 4($s1) -/* 09755C 7F062A2C 8FB90160 */ lw $t9, 0x160($sp) -/* 097560 7F062A30 3C0EB100 */ lui $t6, (0xB1000076 >> 16) # lui $t6, 0xb100 # gSP4Triangles(8,8,6,5,1,7,2,0,0,0,0,0 -/* 097564 7F062A34 35CE0076 */ ori $t6, (0xB1000076 & 0xFFFF) # ori $t6, $t6, 0x76 -/* 097568 7F062A38 272B0008 */ addiu $t3, $t9, 8 -/* 09756C 7F062A3C AFAB0160 */ sw $t3, 0x160($sp) -/* 097570 7F062A40 24185454 */ li $t8, 21588 -/* 097574 7F062A44 AF380004 */ sw $t8, 4($t9) # ), -/* 097578 7F062A48 AF2E0000 */ sw $t6, ($t9) -/* 09757C 7F062A4C 24090002 */ li $t1, 2 -/* 097580 7F062A50 AFA90010 */ sw $t1, 0x10($sp) -/* 097584 7F062A54 8FA70168 */ lw $a3, 0x168($sp) -/* 097588 7F062A58 8FA500B0 */ lw $a1, 0xb0($sp) -/* 09758C 7F062A5C 27A40160 */ addiu $a0, $sp, 0x160 -/* 097590 7F062A60 0FC1DB5A */ jal texSelect -/* 097594 7F062A64 24060004 */ li $a2, 4 -/* 097598 7F062A68 8FAA0160 */ lw $t2, 0x160($sp) -/* 09759C 7F062A6C 3C0FB100 */ lui $t7, (0xB1000013 >> 16) # lui $t7, 0xb100 # gSP4Triangles(0,2,3,3,2,1,1,0,0,0,0 -/* 0975A0 7F062A70 35EF0013 */ ori $t7, (0xB1000013 & 0xFFFF) # ori $t7, $t7, 0x13 -/* 0975A4 7F062A74 254C0008 */ addiu $t4, $t2, 8 -/* 0975A8 7F062A78 AFAC0160 */ sw $t4, 0x160($sp) -/* 0975AC 7F062A7C 240D3020 */ li $t5, 12320 -/* 0975B0 7F062A80 AD4D0004 */ sw $t5, 4($t2) -/* 0975B4 7F062A84 10000017 */ b .L7F062AE4 -/* 0975B8 7F062A88 AD4F0000 */ sw $t7, ($t2) # ), -.L7F062A8C: -/* 0975BC 7F062A8C 24190002 */ li $t9, 2 -/* 0975C0 7F062A90 AFB90010 */ sw $t9, 0x10($sp) -/* 0975C4 7F062A94 24060004 */ li $a2, 4 -/* 0975C8 7F062A98 0FC1DB5A */ jal texSelect -/* 0975CC 7F062A9C 8FA70168 */ lw $a3, 0x168($sp) -/* 0975D0 7F062AA0 8FB10160 */ lw $s1, 0x160($sp) -/* 0975D4 7F062AA4 3C180430 */ lui $t8, (0x04300040 >> 16) # lui $t8, 0x430 -/* 0975D8 7F062AA8 37180040 */ ori $t8, (0x04300040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 0975DC 7F062AAC 262E0008 */ addiu $t6, $s1, 8 -/* 0975E0 7F062AB0 AFAE0160 */ sw $t6, 0x160($sp) -/* 0975E4 7F062AB4 02002025 */ move $a0, $s0 -/* 0975E8 7F062AB8 0C003A2C */ jal osVirtualToPhysical -/* 0975EC 7F062ABC AE380000 */ sw $t8, ($s1) -/* 0975F0 7F062AC0 AE220004 */ sw $v0, 4($s1) -/* 0975F4 7F062AC4 8FA90160 */ lw $t1, 0x160($sp) -/* 0975F8 7F062AC8 3C0CB100 */ lui $t4, (0xB1000013 >> 16) # lui $t4, 0xb100 -/* 0975FC 7F062ACC 358C0013 */ ori $t4, (0xB1000013 & 0xFFFF) # ori $t4, $t4, 0x13 -/* 097600 7F062AD0 252A0008 */ addiu $t2, $t1, 8 -/* 097604 7F062AD4 AFAA0160 */ sw $t2, 0x160($sp) -/* 097608 7F062AD8 240F3020 */ li $t7, 12320 -/* 09760C 7F062ADC AD2F0004 */ sw $t7, 4($t1) -/* 097610 7F062AE0 AD2C0000 */ sw $t4, ($t1) -.L7F062AE4: -/* 097614 7F062AE4 8FBF002C */ lw $ra, 0x2c($sp) -/* 097618 7F062AE8 8FA20160 */ lw $v0, 0x160($sp) -/* 09761C 7F062AEC D7B40018 */ ldc1 $f20, 0x18($sp) -/* 097620 7F062AF0 8FB00024 */ lw $s0, 0x24($sp) -/* 097624 7F062AF4 8FB10028 */ lw $s1, 0x28($sp) -/* 097628 7F062AF8 03E00008 */ jr $ra -/* 09762C 7F062AFC 27BD0160 */ addiu $sp, $sp, 0x160 -) -#endif - -#if defined(VERSION_EU) -GLOBAL_ASM( -.late_rodata -glabel D_80053EAC -.word 0x3fb50481 /*1.4141999*/ -glabel D_80053EB0 -.word 0x3dcccccd /*0.1*/ -glabel D_80053EB4 -.word 0x3f666666 /*0.89999998*/ -glabel D_80053EB8 -.word 0x3f666666 /*0.89999998*/ -glabel D_80053EBC -.word 0x3f666666 /*0.89999998*/ -glabel D_80053EC0 -.word 0x3f666666 /*0.89999998*/ -glabel D_80053EC4 -.word 0x3f666666 /*0.89999998*/ -glabel D_80053EC8 -.word 0x3f666666 /*0.89999998*/ -glabel D_80053ECC -.word 0x3fb50481 /*1.4141999*/ -glabel D_80053ED0 -.word 0x3f666666 /*0.89999998*/ -.text -glabel sub_GAME_7F061E18 -/* 094CCC 7F0622DC 27BDFEA0 */ addiu $sp, $sp, -0x160 -/* 094CD0 7F0622E0 AFBF002C */ sw $ra, 0x2c($sp) -/* 094CD4 7F0622E4 AFB10028 */ sw $s1, 0x28($sp) -/* 094CD8 7F0622E8 AFB00024 */ sw $s0, 0x24($sp) -/* 094CDC 7F0622EC F7B40018 */ sdc1 $f20, 0x18($sp) -/* 094CE0 7F0622F0 AFA40160 */ sw $a0, 0x160($sp) -/* 094CE4 7F0622F4 AFA60168 */ sw $a2, 0x168($sp) -/* 094CE8 7F0622F8 80AB0000 */ lb $t3, ($a1) -/* 094CEC 7F0622FC 3C0E8003 */ lui $t6, %hi(D_80035C98) # $t6, 0x8003 -/* 094CF0 7F062300 00A08825 */ move $s1, $a1 -/* 094CF4 7F062304 05600328 */ bltz $t3, .L7F062FA8 -/* 094CF8 7F062308 25CE11E8 */ addiu $t6, %lo(D_80035C98) # addiu $t6, $t6, 0x11e8 -/* 094CFC 7F06230C 8DC10000 */ lw $at, ($t6) -/* 094D00 7F062310 8DD90004 */ lw $t9, 4($t6) -/* 094D04 7F062314 27A90108 */ addiu $t1, $sp, 0x108 -/* 094D08 7F062318 AD210000 */ sw $at, ($t1) -/* 094D0C 7F06231C AD390004 */ sw $t9, 4($t1) -/* 094D10 7F062320 8DD9000C */ lw $t9, 0xc($t6) -/* 094D14 7F062324 8DC10008 */ lw $at, 8($t6) -/* 094D18 7F062328 AD39000C */ sw $t9, 0xc($t1) -/* 094D1C 7F06232C 0FC22868 */ jal bondviewGetCurrentPlayersPosition -/* 094D20 7F062330 AD210008 */ sw $at, 8($t1) -/* 094D24 7F062334 AFA200F8 */ sw $v0, 0xf8($sp) -/* 094D28 7F062338 3C0D8003 */ lui $t5, %hi(D_80035CA8) # $t5, 0x8003 -/* 094D2C 7F06233C 25AD11F8 */ addiu $t5, %lo(D_80035CA8) # addiu $t5, $t5, 0x11f8 -/* 094D30 7F062340 8DA10000 */ lw $at, ($t5) -/* 094D34 7F062344 C6200028 */ lwc1 $f0, 0x28($s1) -/* 094D38 7F062348 C6340024 */ lwc1 $f20, 0x24($s1) -/* 094D3C 7F06234C 27AF00C4 */ addiu $t7, $sp, 0xc4 -/* 094D40 7F062350 ADE10000 */ sw $at, ($t7) -/* 094D44 7F062354 8DA10008 */ lw $at, 8($t5) -/* 094D48 7F062358 8DAB0004 */ lw $t3, 4($t5) -/* 094D4C 7F06235C 3C098003 */ lui $t1, %hi(D_80035CB4) # $t1, 0x8003 -/* 094D50 7F062360 25291204 */ addiu $t1, %lo(D_80035CB4) # addiu $t1, $t1, 0x1204 -/* 094D54 7F062364 ADE10008 */ sw $at, 8($t7) -/* 094D58 7F062368 ADEB0004 */ sw $t3, 4($t7) -/* 094D5C 7F06236C 8D210000 */ lw $at, ($t1) -/* 094D60 7F062370 27B800B8 */ addiu $t8, $sp, 0xb8 -/* 094D64 7F062374 8D2A0004 */ lw $t2, 4($t1) -/* 094D68 7F062378 AF010000 */ sw $at, ($t8) -/* 094D6C 7F06237C 8D210008 */ lw $at, 8($t1) -/* 094D70 7F062380 AF0A0004 */ sw $t2, 4($t8) -/* 094D74 7F062384 3C0C8007 */ lui $t4, %hi(flareimage3) # $t4, 0x8007 -/* 094D78 7F062388 AF010008 */ sw $at, 8($t8) -/* 094D7C 7F06238C 3C018005 */ lui $at, %hi(D_80053EAC) # $at, 0x8005 -/* 094D80 7F062390 C4249FEC */ lwc1 $f4, %lo(D_80053EAC)($at) -/* 094D84 7F062394 8D8C44B0 */ lw $t4, %lo(flareimage3)($t4) -/* 094D88 7F062398 E7A000E8 */ swc1 $f0, 0xe8($sp) -/* 094D8C 7F06239C E7A400B4 */ swc1 $f4, 0xb4($sp) -/* 094D90 7F0623A0 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 094D94 7F0623A4 AFAC00B0 */ sw $t4, 0xb0($sp) -/* 094D98 7F0623A8 AFA200A8 */ sw $v0, 0xa8($sp) -/* 094D9C 7F0623AC 82230001 */ lb $v1, 1($s1) -/* 094DA0 7F0623B0 24010016 */ li $at, 22 -/* 094DA4 7F0623B4 C7A000E8 */ lwc1 $f0, 0xe8($sp) -/* 094DA8 7F0623B8 14610007 */ bne $v1, $at, .L7F0623D8 -/* 094DAC 7F0623BC 3C014248 */ li $at, 0x42480000 # 50.000000 -/* 094DB0 7F0623C0 44819000 */ mtc1 $at, $f18 -/* 094DB4 7F0623C4 3C0F8007 */ lui $t7, %hi(flareimage4) # $t7, 0x8007 -/* 094DB8 7F0623C8 8DEF44B4 */ lw $t7, %lo(flareimage4)($t7) -/* 094DBC 7F0623CC E7B200F4 */ swc1 $f18, 0xf4($sp) -/* 094DC0 7F0623D0 10000026 */ b .L7F06246C -/* 094DC4 7F0623D4 AFAF00B0 */ sw $t7, 0xb0($sp) -.L7F0623D8: -/* 094DC8 7F0623D8 24010017 */ li $at, 23 -/* 094DCC 7F0623DC 1461001F */ bne $v1, $at, .L7F06245C -/* 094DD0 7F0623E0 3C0D8007 */ lui $t5, %hi(flareimage4) # $t5, 0x8007 -/* 094DD4 7F0623E4 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 094DD8 7F0623E8 44813000 */ mtc1 $at, $f6 -/* 094DDC 7F0623EC 8DAD44B4 */ lw $t5, %lo(flareimage4)($t5) -/* 094DE0 7F0623F0 E7A000E8 */ swc1 $f0, 0xe8($sp) -/* 094DE4 7F0623F4 E7A600F4 */ swc1 $f6, 0xf4($sp) -/* 094DE8 7F0623F8 0C00262C */ jal randomGetNext -/* 094DEC 7F0623FC AFAD00B0 */ sw $t5, 0xb0($sp) -/* 094DF0 7F062400 24010032 */ li $at, 50 -/* 094DF4 7F062404 0041001B */ divu $zero, $v0, $at -/* 094DF8 7F062408 00005810 */ mfhi $t3 -/* 094DFC 7F06240C 25790096 */ addiu $t9, $t3, 0x96 -/* 094E00 7F062410 0C00262C */ jal randomGetNext -/* 094E04 7F062414 A3B90117 */ sb $t9, 0x117($sp) -/* 094E08 7F062418 24010005 */ li $at, 5 -/* 094E0C 7F06241C 0041001B */ divu $zero, $v0, $at -/* 094E10 7F062420 00007010 */ mfhi $t6 -/* 094E14 7F062424 C7A000E8 */ lwc1 $f0, 0xe8($sp) -/* 094E18 7F062428 55C00011 */ bnezl $t6, .L7F062470 -/* 094E1C 7F06242C C6240004 */ lwc1 $f4, 4($s1) -/* 094E20 7F062430 0C00262C */ jal randomGetNext -/* 094E24 7F062434 E7A000E8 */ swc1 $f0, 0xe8($sp) -/* 094E28 7F062438 24010064 */ li $at, 100 -/* 094E2C 7F06243C 0041001B */ divu $zero, $v0, $at -/* 094E30 7F062440 0000C010 */ mfhi $t8 -/* 094E34 7F062444 240900FF */ li $t1, 255 -/* 094E38 7F062448 01381823 */ subu $v1, $t1, $t8 -/* 094E3C 7F06244C A3A30115 */ sb $v1, 0x115($sp) -/* 094E40 7F062450 A3A30114 */ sb $v1, 0x114($sp) -/* 094E44 7F062454 10000005 */ b .L7F06246C -/* 094E48 7F062458 C7A000E8 */ lwc1 $f0, 0xe8($sp) -.L7F06245C: -/* 094E4C 7F06245C 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 094E50 7F062460 44815000 */ mtc1 $at, $f10 -/* 094E54 7F062464 00000000 */ nop -/* 094E58 7F062468 E7AA00F4 */ swc1 $f10, 0xf4($sp) -.L7F06246C: -/* 094E5C 7F06246C C6240004 */ lwc1 $f4, 4($s1) -.L7F062470: -/* 094E60 7F062470 44807000 */ mtc1 $zero, $f14 -/* 094E64 7F062474 E7A400FC */ swc1 $f4, 0xfc($sp) -/* 094E68 7F062478 C6280008 */ lwc1 $f8, 8($s1) -/* 094E6C 7F06247C 4600703C */ c.lt.s $f14, $f0 -/* 094E70 7F062480 E7A80100 */ swc1 $f8, 0x100($sp) -/* 094E74 7F062484 C626000C */ lwc1 $f6, 0xc($s1) -/* 094E78 7F062488 45000011 */ bc1f .L7F0624D0 -/* 094E7C 7F06248C E7A60104 */ swc1 $f6, 0x104($sp) -/* 094E80 7F062490 C6240010 */ lwc1 $f4, 0x10($s1) -/* 094E84 7F062494 C7AA00FC */ lwc1 $f10, 0xfc($sp) -/* 094E88 7F062498 46040202 */ mul.s $f8, $f0, $f4 -/* 094E8C 7F06249C C7A40100 */ lwc1 $f4, 0x100($sp) -/* 094E90 7F0624A0 46085180 */ add.s $f6, $f10, $f8 -/* 094E94 7F0624A4 E7A600FC */ swc1 $f6, 0xfc($sp) -/* 094E98 7F0624A8 C62A0014 */ lwc1 $f10, 0x14($s1) -/* 094E9C 7F0624AC 460A0202 */ mul.s $f8, $f0, $f10 -/* 094EA0 7F0624B0 C7AA0104 */ lwc1 $f10, 0x104($sp) -/* 094EA4 7F0624B4 46082180 */ add.s $f6, $f4, $f8 -/* 094EA8 7F0624B8 E7A60100 */ swc1 $f6, 0x100($sp) -/* 094EAC 7F0624BC C6240018 */ lwc1 $f4, 0x18($s1) -/* 094EB0 7F0624C0 46040202 */ mul.s $f8, $f0, $f4 -/* 094EB4 7F0624C4 46085180 */ add.s $f6, $f10, $f8 -/* 094EB8 7F0624C8 10000003 */ b .L7F0624D8 -/* 094EBC 7F0624CC E7A60104 */ swc1 $f6, 0x104($sp) -.L7F0624D0: -/* 094EC0 7F0624D0 4600A500 */ add.s $f20, $f20, $f0 -/* 094EC4 7F0624D4 46007006 */ mov.s $f0, $f14 -.L7F0624D8: -/* 094EC8 7F0624D8 46140100 */ add.s $f4, $f0, $f20 -/* 094ECC 7F0624DC C622001C */ lwc1 $f2, 0x1c($s1) -/* 094ED0 7F0624E0 4604103C */ c.lt.s $f2, $f4 -/* 094ED4 7F0624E4 00000000 */ nop -/* 094ED8 7F0624E8 45020003 */ bc1fl .L7F0624F8 -/* 094EDC 7F0624EC C62C0018 */ lwc1 $f12, 0x18($s1) -/* 094EE0 7F0624F0 46001501 */ sub.s $f20, $f2, $f0 -/* 094EE4 7F0624F4 C62C0018 */ lwc1 $f12, 0x18($s1) -.L7F0624F8: -/* 094EE8 7F0624F8 C7AA0104 */ lwc1 $f10, 0x104($sp) -/* 094EEC 7F0624FC 8FA200F8 */ lw $v0, 0xf8($sp) -/* 094EF0 7F062500 460CA202 */ mul.s $f8, $f20, $f12 -/* 094EF4 7F062504 C6220014 */ lwc1 $f2, 0x14($s1) -/* 094EF8 7F062508 C4440008 */ lwc1 $f4, 8($v0) -/* 094EFC 7F06250C E7AA0030 */ swc1 $f10, 0x30($sp) -/* 094F00 7F062510 46085180 */ add.s $f6, $f10, $f8 -/* 094F04 7F062514 C44A0004 */ lwc1 $f10, 4($v0) -/* 094F08 7F062518 46062201 */ sub.s $f8, $f4, $f6 -/* 094F0C 7F06251C 46081102 */ mul.s $f4, $f2, $f8 -/* 094F10 7F062520 C7A80100 */ lwc1 $f8, 0x100($sp) -/* 094F14 7F062524 46141182 */ mul.s $f6, $f2, $f20 -/* 094F18 7F062528 46083180 */ add.s $f6, $f6, $f8 -/* 094F1C 7F06252C 46065281 */ sub.s $f10, $f10, $f6 -/* 094F20 7F062530 460C5182 */ mul.s $f6, $f10, $f12 -/* 094F24 7F062534 46062281 */ sub.s $f10, $f4, $f6 -/* 094F28 7F062538 C7A400FC */ lwc1 $f4, 0xfc($sp) -/* 094F2C 7F06253C E7AA00D0 */ swc1 $f10, 0xd0($sp) -/* 094F30 7F062540 C6200010 */ lwc1 $f0, 0x10($s1) -/* 094F34 7F062544 C62C0018 */ lwc1 $f12, 0x18($s1) -/* 094F38 7F062548 E7A80034 */ swc1 $f8, 0x34($sp) -/* 094F3C 7F06254C 4600A182 */ mul.s $f6, $f20, $f0 -/* 094F40 7F062550 C4480000 */ lwc1 $f8, ($v0) -/* 094F44 7F062554 E7AA0038 */ swc1 $f10, 0x38($sp) -/* 094F48 7F062558 C7AA0030 */ lwc1 $f10, 0x30($sp) -/* 094F4C 7F06255C 46062180 */ add.s $f6, $f4, $f6 -/* 094F50 7F062560 46064201 */ sub.s $f8, $f8, $f6 -/* 094F54 7F062564 46086182 */ mul.s $f6, $f12, $f8 -/* 094F58 7F062568 00000000 */ nop -/* 094F5C 7F06256C 46146202 */ mul.s $f8, $f12, $f20 -/* 094F60 7F062570 460A4200 */ add.s $f8, $f8, $f10 -/* 094F64 7F062574 C44A0008 */ lwc1 $f10, 8($v0) -/* 094F68 7F062578 46085281 */ sub.s $f10, $f10, $f8 -/* 094F6C 7F06257C 46005202 */ mul.s $f8, $f10, $f0 -/* 094F70 7F062580 46083281 */ sub.s $f10, $f6, $f8 -/* 094F74 7F062584 C7A60034 */ lwc1 $f6, 0x34($sp) -/* 094F78 7F062588 E7AA00D4 */ swc1 $f10, 0xd4($sp) -/* 094F7C 7F06258C C6220014 */ lwc1 $f2, 0x14($s1) -/* 094F80 7F062590 C6200010 */ lwc1 $f0, 0x10($s1) -/* 094F84 7F062594 4602A202 */ mul.s $f8, $f20, $f2 -/* 094F88 7F062598 46083180 */ add.s $f6, $f6, $f8 -/* 094F8C 7F06259C C4480004 */ lwc1 $f8, 4($v0) -/* 094F90 7F0625A0 46064201 */ sub.s $f8, $f8, $f6 -/* 094F94 7F0625A4 46080182 */ mul.s $f6, $f0, $f8 -/* 094F98 7F0625A8 00000000 */ nop -/* 094F9C 7F0625AC 46140202 */ mul.s $f8, $f0, $f20 -/* 094FA0 7F0625B0 46044200 */ add.s $f8, $f8, $f4 -/* 094FA4 7F0625B4 C4440000 */ lwc1 $f4, ($v0) -/* 094FA8 7F0625B8 46082101 */ sub.s $f4, $f4, $f8 -/* 094FAC 7F0625BC 46022202 */ mul.s $f8, $f4, $f2 -/* 094FB0 7F0625C0 46083101 */ sub.s $f4, $f6, $f8 -/* 094FB4 7F0625C4 C7A60038 */ lwc1 $f6, 0x38($sp) -/* 094FB8 7F0625C8 46067032 */ c.eq.s $f14, $f6 -/* 094FBC 7F0625CC E7A400D8 */ swc1 $f4, 0xd8($sp) -/* 094FC0 7F0625D0 45000008 */ bc1f .L7F0625F4 -/* 094FC4 7F0625D4 00000000 */ nop -/* 094FC8 7F0625D8 460A7032 */ c.eq.s $f14, $f10 -/* 094FCC 7F0625DC 00000000 */ nop -/* 094FD0 7F0625E0 45020005 */ bc1fl .L7F0625F8 -/* 094FD4 7F0625E4 27A400D0 */ addiu $a0, $sp, 0xd0 -/* 094FD8 7F0625E8 46047032 */ c.eq.s $f14, $f4 -/* 094FDC 7F0625EC 00000000 */ nop -/* 094FE0 7F0625F0 4501000F */ bc1t .L7F062630 -.L7F0625F4: -/* 094FE4 7F0625F4 27A400D0 */ addiu $a0, $sp, 0xd0 -.L7F0625F8: -/* 094FE8 7F0625F8 27A500D4 */ addiu $a1, $sp, 0xd4 -/* 094FEC 7F0625FC 0C0075F0 */ jal guNormalize -/* 094FF0 7F062600 27A600D8 */ addiu $a2, $sp, 0xd8 -/* 094FF4 7F062604 C7A000F4 */ lwc1 $f0, 0xf4($sp) -/* 094FF8 7F062608 C7A800D0 */ lwc1 $f8, 0xd0($sp) -/* 094FFC 7F06260C C7AA00D4 */ lwc1 $f10, 0xd4($sp) -/* 095000 7F062610 46004182 */ mul.s $f6, $f8, $f0 -/* 095004 7F062614 C7A800D8 */ lwc1 $f8, 0xd8($sp) -/* 095008 7F062618 46005102 */ mul.s $f4, $f10, $f0 -/* 09500C 7F06261C E7A600D0 */ swc1 $f6, 0xd0($sp) -/* 095010 7F062620 46004182 */ mul.s $f6, $f8, $f0 -/* 095014 7F062624 E7A400D4 */ swc1 $f4, 0xd4($sp) -/* 095018 7F062628 10000005 */ b .L7F062640 -/* 09501C 7F06262C E7A600D8 */ swc1 $f6, 0xd8($sp) -.L7F062630: -/* 095020 7F062630 C7AA00F4 */ lwc1 $f10, 0xf4($sp) -/* 095024 7F062634 E7AE00D0 */ swc1 $f14, 0xd0($sp) -/* 095028 7F062638 E7AE00D8 */ swc1 $f14, 0xd8($sp) -/* 09502C 7F06263C E7AA00D4 */ swc1 $f10, 0xd4($sp) -.L7F062640: -/* 095030 7F062640 C6240014 */ lwc1 $f4, 0x14($s1) -/* 095034 7F062644 C7A800D8 */ lwc1 $f8, 0xd8($sp) -/* 095038 7F062648 C7AA00D4 */ lwc1 $f10, 0xd4($sp) -/* 09503C 7F06264C 27A400DC */ addiu $a0, $sp, 0xdc -/* 095040 7F062650 46082182 */ mul.s $f6, $f4, $f8 -/* 095044 7F062654 C6240018 */ lwc1 $f4, 0x18($s1) -/* 095048 7F062658 27A500E0 */ addiu $a1, $sp, 0xe0 -/* 09504C 7F06265C 27A600E4 */ addiu $a2, $sp, 0xe4 -/* 095050 7F062660 46045102 */ mul.s $f4, $f10, $f4 -/* 095054 7F062664 46043181 */ sub.s $f6, $f6, $f4 -/* 095058 7F062668 E7A600DC */ swc1 $f6, 0xdc($sp) -/* 09505C 7F06266C C6240018 */ lwc1 $f4, 0x18($s1) -/* 095060 7F062670 C7A600D0 */ lwc1 $f6, 0xd0($sp) -/* 095064 7F062674 E7AA0038 */ swc1 $f10, 0x38($sp) -/* 095068 7F062678 C62A0010 */ lwc1 $f10, 0x10($s1) -/* 09506C 7F06267C 46062102 */ mul.s $f4, $f4, $f6 -/* 095070 7F062680 00000000 */ nop -/* 095074 7F062684 460A4202 */ mul.s $f8, $f8, $f10 -/* 095078 7F062688 46082281 */ sub.s $f10, $f4, $f8 -/* 09507C 7F06268C C7A80038 */ lwc1 $f8, 0x38($sp) -/* 095080 7F062690 E7AA00E0 */ swc1 $f10, 0xe0($sp) -/* 095084 7F062694 C6240010 */ lwc1 $f4, 0x10($s1) -/* 095088 7F062698 46082282 */ mul.s $f10, $f4, $f8 -/* 09508C 7F06269C C6240014 */ lwc1 $f4, 0x14($s1) -/* 095090 7F0626A0 46043202 */ mul.s $f8, $f6, $f4 -/* 095094 7F0626A4 46085181 */ sub.s $f6, $f10, $f8 -/* 095098 7F0626A8 0C0075F0 */ jal guNormalize -/* 09509C 7F0626AC E7A600E4 */ swc1 $f6, 0xe4($sp) -/* 0950A0 7F0626B0 C7A000F4 */ lwc1 $f0, 0xf4($sp) -/* 0950A4 7F0626B4 C7A400DC */ lwc1 $f4, 0xdc($sp) -/* 0950A8 7F0626B8 C7A800E0 */ lwc1 $f8, 0xe0($sp) -/* 0950AC 7F0626BC 24010016 */ li $at, 22 -/* 0950B0 7F0626C0 46002282 */ mul.s $f10, $f4, $f0 -/* 0950B4 7F0626C4 C7A400E4 */ lwc1 $f4, 0xe4($sp) -/* 0950B8 7F0626C8 46004182 */ mul.s $f6, $f8, $f0 -/* 0950BC 7F0626CC E7AA00DC */ swc1 $f10, 0xdc($sp) -/* 0950C0 7F0626D0 46002282 */ mul.s $f10, $f4, $f0 -/* 0950C4 7F0626D4 E7A600E0 */ swc1 $f6, 0xe0($sp) -/* 0950C8 7F0626D8 E7AA00E4 */ swc1 $f10, 0xe4($sp) -/* 0950CC 7F0626DC 822A0001 */ lb $t2, 1($s1) -/* 0950D0 7F0626E0 15410005 */ bne $t2, $at, .L7F0626F8 -/* 0950D4 7F0626E4 00000000 */ nop -/* 0950D8 7F0626E8 0FC2F29D */ jal dynAllocate7F0BD6C4 -/* 0950DC 7F0626EC 24040008 */ li $a0, 8 -/* 0950E0 7F0626F0 10000004 */ b .L7F062704 -/* 0950E4 7F0626F4 00408025 */ move $s0, $v0 -.L7F0626F8: -/* 0950E8 7F0626F8 0FC2F29D */ jal dynAllocate7F0BD6C4 -/* 0950EC 7F0626FC 24040004 */ li $a0, 4 -/* 0950F0 7F062700 00408025 */ move $s0, $v0 -.L7F062704: -/* 0950F4 7F062704 0FC2F2A4 */ jal dynAllocateMatrix -/* 0950F8 7F062708 00000000 */ nop -/* 0950FC 7F06270C AFA20158 */ sw $v0, 0x158($sp) -/* 095100 7F062710 27A400FC */ addiu $a0, $sp, 0xfc -/* 095104 7F062714 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 095108 7F062718 27A50118 */ addiu $a1, $sp, 0x118 -/* 09510C 7F06271C 3C018005 */ lui $at, %hi(D_80053EB0) # $at, 0x8005 -/* 095110 7F062720 C42C9FF0 */ lwc1 $f12, %lo(D_80053EB0)($at) -/* 095114 7F062724 0FC163C9 */ jal matrix_scalar_multiply -/* 095118 7F062728 27A50118 */ addiu $a1, $sp, 0x118 -/* 09511C 7F06272C 8FA400A8 */ lw $a0, 0xa8($sp) -/* 095120 7F062730 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 095124 7F062734 27A50118 */ addiu $a1, $sp, 0x118 -/* 095128 7F062738 27A40118 */ addiu $a0, $sp, 0x118 -/* 09512C 7F06273C 0FC16451 */ jal matrix_4x4_f32_to_s32 -/* 095130 7F062740 8FA50158 */ lw $a1, 0x158($sp) -/* 095134 7F062744 27A20108 */ addiu $v0, $sp, 0x108 -/* 095138 7F062748 8C410000 */ lw $at, ($v0) -/* 09513C 7F06274C AE010000 */ sw $at, ($s0) -/* 095140 7F062750 8C4D0004 */ lw $t5, 4($v0) -/* 095144 7F062754 AE0D0004 */ sw $t5, 4($s0) -/* 095148 7F062758 8C410008 */ lw $at, 8($v0) -/* 09514C 7F06275C AE010008 */ sw $at, 8($s0) -/* 095150 7F062760 8C4D000C */ lw $t5, 0xc($v0) -/* 095154 7F062764 AE0D000C */ sw $t5, 0xc($s0) -/* 095158 7F062768 8C410000 */ lw $at, ($v0) -/* 09515C 7F06276C AE010010 */ sw $at, 0x10($s0) -/* 095160 7F062770 8C4E0004 */ lw $t6, 4($v0) -/* 095164 7F062774 AE0E0014 */ sw $t6, 0x14($s0) -/* 095168 7F062778 8C410008 */ lw $at, 8($v0) -/* 09516C 7F06277C AE010018 */ sw $at, 0x18($s0) -/* 095170 7F062780 8C4E000C */ lw $t6, 0xc($v0) -/* 095174 7F062784 AE0E001C */ sw $t6, 0x1c($s0) -/* 095178 7F062788 8C410000 */ lw $at, ($v0) -/* 09517C 7F06278C AE010020 */ sw $at, 0x20($s0) -/* 095180 7F062790 8C4A0004 */ lw $t2, 4($v0) -/* 095184 7F062794 AE0A0024 */ sw $t2, 0x24($s0) -/* 095188 7F062798 8C410008 */ lw $at, 8($v0) -/* 09518C 7F06279C AE010028 */ sw $at, 0x28($s0) -/* 095190 7F0627A0 8C4A000C */ lw $t2, 0xc($v0) -/* 095194 7F0627A4 AE0A002C */ sw $t2, 0x2c($s0) -/* 095198 7F0627A8 8C410000 */ lw $at, ($v0) -/* 09519C 7F0627AC AE010030 */ sw $at, 0x30($s0) -/* 0951A0 7F0627B0 8C4D0004 */ lw $t5, 4($v0) -/* 0951A4 7F0627B4 AE0D0034 */ sw $t5, 0x34($s0) -/* 0951A8 7F0627B8 8C410008 */ lw $at, 8($v0) -/* 0951AC 7F0627BC AE010038 */ sw $at, 0x38($s0) -/* 0951B0 7F0627C0 8C4D000C */ lw $t5, 0xc($v0) -/* 0951B4 7F0627C4 24010016 */ li $at, 22 -/* 0951B8 7F0627C8 AE0D003C */ sw $t5, 0x3c($s0) -/* 0951BC 7F0627CC 82230001 */ lb $v1, 1($s1) -/* 0951C0 7F0627D0 54610023 */ bnel $v1, $at, .L7F062860 -/* 0951C4 7F0627D4 24010017 */ li $at, 23 -/* 0951C8 7F0627D8 8C410000 */ lw $at, ($v0) -/* 0951CC 7F0627DC AE010040 */ sw $at, 0x40($s0) -/* 0951D0 7F0627E0 8C4B0004 */ lw $t3, 4($v0) -/* 0951D4 7F0627E4 AE0B0044 */ sw $t3, 0x44($s0) -/* 0951D8 7F0627E8 8C410008 */ lw $at, 8($v0) -/* 0951DC 7F0627EC AE010048 */ sw $at, 0x48($s0) -/* 0951E0 7F0627F0 8C4B000C */ lw $t3, 0xc($v0) -/* 0951E4 7F0627F4 AE0B004C */ sw $t3, 0x4c($s0) -/* 0951E8 7F0627F8 8C410000 */ lw $at, ($v0) -/* 0951EC 7F0627FC AE010050 */ sw $at, 0x50($s0) -/* 0951F0 7F062800 8C580004 */ lw $t8, 4($v0) -/* 0951F4 7F062804 AE180054 */ sw $t8, 0x54($s0) -/* 0951F8 7F062808 8C410008 */ lw $at, 8($v0) -/* 0951FC 7F06280C AE010058 */ sw $at, 0x58($s0) -/* 095200 7F062810 8C58000C */ lw $t8, 0xc($v0) -/* 095204 7F062814 AE18005C */ sw $t8, 0x5c($s0) -/* 095208 7F062818 8C410000 */ lw $at, ($v0) -/* 09520C 7F06281C AE010060 */ sw $at, 0x60($s0) -/* 095210 7F062820 8C4A0004 */ lw $t2, 4($v0) -/* 095214 7F062824 AE0A0064 */ sw $t2, 0x64($s0) -/* 095218 7F062828 8C410008 */ lw $at, 8($v0) -/* 09521C 7F06282C AE010068 */ sw $at, 0x68($s0) -/* 095220 7F062830 8C4A000C */ lw $t2, 0xc($v0) -/* 095224 7F062834 AE0A006C */ sw $t2, 0x6c($s0) -/* 095228 7F062838 8C410000 */ lw $at, ($v0) -/* 09522C 7F06283C AE010070 */ sw $at, 0x70($s0) -/* 095230 7F062840 8C4F0004 */ lw $t7, 4($v0) -/* 095234 7F062844 AE0F0074 */ sw $t7, 0x74($s0) -/* 095238 7F062848 8C410008 */ lw $at, 8($v0) -/* 09523C 7F06284C AE010078 */ sw $at, 0x78($s0) -/* 095240 7F062850 8C4F000C */ lw $t7, 0xc($v0) -/* 095244 7F062854 AE0F007C */ sw $t7, 0x7c($s0) -/* 095248 7F062858 82230001 */ lb $v1, 1($s1) -/* 09524C 7F06285C 24010017 */ li $at, 23 -.L7F062860: -/* 095250 7F062860 5461004F */ bnel $v1, $at, .L7F0629A0 -/* 095254 7F062864 3C014120 */ lui $at, 0x4120 -/* 095258 7F062868 C6280010 */ lwc1 $f8, 0x10($s1) -/* 09525C 7F06286C C7A400FC */ lwc1 $f4, 0xfc($sp) -/* 095260 7F062870 8FA400A8 */ lw $a0, 0xa8($sp) -/* 095264 7F062874 46144182 */ mul.s $f6, $f8, $f20 -/* 095268 7F062878 27A5009C */ addiu $a1, $sp, 0x9c -/* 09526C 7F06287C 46043280 */ add.s $f10, $f6, $f4 -/* 095270 7F062880 C7A40100 */ lwc1 $f4, 0x100($sp) -/* 095274 7F062884 E7AA009C */ swc1 $f10, 0x9c($sp) -/* 095278 7F062888 C6280014 */ lwc1 $f8, 0x14($s1) -/* 09527C 7F06288C 46144182 */ mul.s $f6, $f8, $f20 -/* 095280 7F062890 46043280 */ add.s $f10, $f6, $f4 -/* 095284 7F062894 C7A40104 */ lwc1 $f4, 0x104($sp) -/* 095288 7F062898 E7AA00A0 */ swc1 $f10, 0xa0($sp) -/* 09528C 7F06289C C6280018 */ lwc1 $f8, 0x18($s1) -/* 095290 7F0628A0 46144182 */ mul.s $f6, $f8, $f20 -/* 095294 7F0628A4 46043280 */ add.s $f10, $f6, $f4 -/* 095298 7F0628A8 0FC16247 */ jal mtx4TransformVecInPlace -/* 09529C 7F0628AC E7AA00A4 */ swc1 $f10, 0xa4($sp) -/* 0952A0 7F0628B0 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 0952A4 7F0628B4 44813000 */ mtc1 $at, $f6 -/* 0952A8 7F0628B8 C7A800F4 */ lwc1 $f8, 0xf4($sp) -/* 0952AC 7F0628BC C7AE00A4 */ lwc1 $f14, 0xa4($sp) -/* 0952B0 7F0628C0 27A40088 */ addiu $a0, $sp, 0x88 -/* 0952B4 7F0628C4 46064003 */ div.s $f0, $f8, $f6 -/* 0952B8 7F0628C8 27A60090 */ addiu $a2, $sp, 0x90 -/* 0952BC 7F0628CC 46007087 */ neg.s $f2, $f14 -/* 0952C0 7F0628D0 44051000 */ mfc1 $a1, $f2 -/* 0952C4 7F0628D4 E7A0008C */ swc1 $f0, 0x8c($sp) -/* 0952C8 7F0628D8 0FC1E05C */ jal divide3DCoordinates -/* 0952CC 7F0628DC E7A00088 */ swc1 $f0, 0x88($sp) -/* 0952D0 7F0628E0 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0952D4 7F0628E4 C7B00090 */ lwc1 $f16, 0x90($sp) -/* 0952D8 7F0628E8 44812000 */ mtc1 $at, $f4 -/* 0952DC 7F0628EC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0952E0 7F0628F0 4604803C */ c.lt.s $f16, $f4 -/* 0952E4 7F0628F4 00000000 */ nop -/* 0952E8 7F0628F8 4500000E */ bc1f .L7F062934 -/* 0952EC 7F0628FC 00000000 */ nop -/* 0952F0 7F062900 44815000 */ mtc1 $at, $f10 -/* 0952F4 7F062904 C7A2009C */ lwc1 $f2, 0x9c($sp) -/* 0952F8 7F062908 C7AC00A0 */ lwc1 $f12, 0xa0($sp) -/* 0952FC 7F06290C 460A8002 */ mul.s $f0, $f16, $f10 -/* 095300 7F062910 C7AE00A4 */ lwc1 $f14, 0xa4($sp) -/* 095304 7F062914 46001082 */ mul.s $f2, $f2, $f0 -/* 095308 7F062918 00000000 */ nop -/* 09530C 7F06291C 46006302 */ mul.s $f12, $f12, $f0 -/* 095310 7F062920 00000000 */ nop -/* 095314 7F062924 46007382 */ mul.s $f14, $f14, $f0 -/* 095318 7F062928 E7A2009C */ swc1 $f2, 0x9c($sp) -/* 09531C 7F06292C E7AC00A0 */ swc1 $f12, 0xa0($sp) -/* 095320 7F062930 E7AE00A4 */ swc1 $f14, 0xa4($sp) -.L7F062934: -/* 095324 7F062934 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 095328 7F062938 00000000 */ nop -/* 09532C 7F06293C 00402025 */ move $a0, $v0 -/* 095330 7F062940 0FC16247 */ jal mtx4TransformVecInPlace -/* 095334 7F062944 27A5009C */ addiu $a1, $sp, 0x9c -/* 095338 7F062948 C7A2009C */ lwc1 $f2, 0x9c($sp) -/* 09533C 7F06294C C7A800FC */ lwc1 $f8, 0xfc($sp) -/* 095340 7F062950 C7AC00A0 */ lwc1 $f12, 0xa0($sp) -/* 095344 7F062954 C7A60100 */ lwc1 $f6, 0x100($sp) -/* 095348 7F062958 46081081 */ sub.s $f2, $f2, $f8 -/* 09534C 7F06295C 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 095350 7F062960 44810000 */ mtc1 $at, $f0 -/* 095354 7F062964 46066301 */ sub.s $f12, $f12, $f6 -/* 095358 7F062968 C7AE00A4 */ lwc1 $f14, 0xa4($sp) -/* 09535C 7F06296C C7A40104 */ lwc1 $f4, 0x104($sp) -/* 095360 7F062970 46001282 */ mul.s $f10, $f2, $f0 -/* 095364 7F062974 E7AC00A0 */ swc1 $f12, 0xa0($sp) -/* 095368 7F062978 46047381 */ sub.s $f14, $f14, $f4 -/* 09536C 7F06297C 46006202 */ mul.s $f8, $f12, $f0 -/* 095370 7F062980 E7A2009C */ swc1 $f2, 0x9c($sp) -/* 095374 7F062984 46007182 */ mul.s $f6, $f14, $f0 -/* 095378 7F062988 E7AA00C4 */ swc1 $f10, 0xc4($sp) -/* 09537C 7F06298C E7AE00A4 */ swc1 $f14, 0xa4($sp) -/* 095380 7F062990 E7A800C8 */ swc1 $f8, 0xc8($sp) -/* 095384 7F062994 1000000E */ b .L7F0629D0 -/* 095388 7F062998 E7A600CC */ swc1 $f6, 0xcc($sp) -/* 09538C 7F06299C 3C014120 */ li $at, 0x41200000 # 10.000000 -.L7F0629A0: -/* 095390 7F0629A0 44812000 */ mtc1 $at, $f4 -/* 095394 7F0629A4 C62A0010 */ lwc1 $f10, 0x10($s1) -/* 095398 7F0629A8 4604A002 */ mul.s $f0, $f20, $f4 -/* 09539C 7F0629AC 00000000 */ nop -/* 0953A0 7F0629B0 46005202 */ mul.s $f8, $f10, $f0 -/* 0953A4 7F0629B4 E7A800C4 */ swc1 $f8, 0xc4($sp) -/* 0953A8 7F0629B8 C6260014 */ lwc1 $f6, 0x14($s1) -/* 0953AC 7F0629BC 46003102 */ mul.s $f4, $f6, $f0 -/* 0953B0 7F0629C0 E7A400C8 */ swc1 $f4, 0xc8($sp) -/* 0953B4 7F0629C4 C62A0018 */ lwc1 $f10, 0x18($s1) -/* 0953B8 7F0629C8 46005202 */ mul.s $f8, $f10, $f0 -/* 0953BC 7F0629CC E7A800CC */ swc1 $f8, 0xcc($sp) -.L7F0629D0: -/* 0953C0 7F0629D0 C7A600D0 */ lwc1 $f6, 0xd0($sp) -/* 0953C4 7F0629D4 8FA500B0 */ lw $a1, 0xb0($sp) -/* 0953C8 7F0629D8 3C018005 */ lui $at, %hi(D_80053EB4) # $at, 0x8005 -/* 0953CC 7F0629DC 4600310D */ trunc.w.s $f4, $f6 -/* 0953D0 7F0629E0 44192000 */ mfc1 $t9, $f4 -/* 0953D4 7F0629E4 00000000 */ nop -/* 0953D8 7F0629E8 A6190000 */ sh $t9, ($s0) -/* 0953DC 7F0629EC C7AA00D4 */ lwc1 $f10, 0xd4($sp) -/* 0953E0 7F0629F0 4600520D */ trunc.w.s $f8, $f10 -/* 0953E4 7F0629F4 440E4000 */ mfc1 $t6, $f8 -/* 0953E8 7F0629F8 00000000 */ nop -/* 0953EC 7F0629FC A60E0002 */ sh $t6, 2($s0) -/* 0953F0 7F062A00 C7A600D8 */ lwc1 $f6, 0xd8($sp) -/* 0953F4 7F062A04 4600310D */ trunc.w.s $f4, $f6 -/* 0953F8 7F062A08 44092000 */ mfc1 $t1, $f4 -/* 0953FC 7F062A0C 00000000 */ nop -/* 095400 7F062A10 A6090004 */ sh $t1, 4($s0) -/* 095404 7F062A14 90AA0004 */ lbu $t2, 4($a1) -/* 095408 7F062A18 A600000A */ sh $zero, 0xa($s0) -/* 09540C 7F062A1C 000A6140 */ sll $t4, $t2, 5 -/* 095410 7F062A20 A60C0008 */ sh $t4, 8($s0) -/* 095414 7F062A24 C7AA00D0 */ lwc1 $f10, 0xd0($sp) -/* 095418 7F062A28 46005207 */ neg.s $f8, $f10 -/* 09541C 7F062A2C 4600418D */ trunc.w.s $f6, $f8 -/* 095420 7F062A30 440D3000 */ mfc1 $t5, $f6 -/* 095424 7F062A34 00000000 */ nop -/* 095428 7F062A38 A60D0010 */ sh $t5, 0x10($s0) -/* 09542C 7F062A3C C7A400D4 */ lwc1 $f4, 0xd4($sp) -/* 095430 7F062A40 46002287 */ neg.s $f10, $f4 -/* 095434 7F062A44 4600520D */ trunc.w.s $f8, $f10 -/* 095438 7F062A48 440B4000 */ mfc1 $t3, $f8 -/* 09543C 7F062A4C 00000000 */ nop -/* 095440 7F062A50 A60B0012 */ sh $t3, 0x12($s0) -/* 095444 7F062A54 C7A600D8 */ lwc1 $f6, 0xd8($sp) -/* 095448 7F062A58 A6000018 */ sh $zero, 0x18($s0) -/* 09544C 7F062A5C A600001A */ sh $zero, 0x1a($s0) -/* 095450 7F062A60 46003107 */ neg.s $f4, $f6 -/* 095454 7F062A64 4600228D */ trunc.w.s $f10, $f4 -/* 095458 7F062A68 44185000 */ mfc1 $t8, $f10 -/* 09545C 7F062A6C 00000000 */ nop -/* 095460 7F062A70 A6180014 */ sh $t8, 0x14($s0) -/* 095464 7F062A74 C7A800D0 */ lwc1 $f8, 0xd0($sp) -/* 095468 7F062A78 C4269FF4 */ lwc1 $f6, %lo(D_80053EB4)($at) -/* 09546C 7F062A7C C7AA00C4 */ lwc1 $f10, 0xc4($sp) -/* 095470 7F062A80 3C018005 */ lui $at, %hi(D_80053EB8) # $at, 0x8005 -/* 095474 7F062A84 46064102 */ mul.s $f4, $f8, $f6 -/* 095478 7F062A88 460A2200 */ add.s $f8, $f4, $f10 -/* 09547C 7F062A8C 4600418D */ trunc.w.s $f6, $f8 -/* 095480 7F062A90 440A3000 */ mfc1 $t2, $f6 -/* 095484 7F062A94 00000000 */ nop -/* 095488 7F062A98 A60A0020 */ sh $t2, 0x20($s0) -/* 09548C 7F062A9C C7A400D4 */ lwc1 $f4, 0xd4($sp) -/* 095490 7F062AA0 C42A9FF8 */ lwc1 $f10, %lo(D_80053EB8)($at) -/* 095494 7F062AA4 C7A600C8 */ lwc1 $f6, 0xc8($sp) -/* 095498 7F062AA8 3C018005 */ lui $at, %hi(D_80053EBC) # $at, 0x8005 -/* 09549C 7F062AAC 460A2202 */ mul.s $f8, $f4, $f10 -/* 0954A0 7F062AB0 46064100 */ add.s $f4, $f8, $f6 -/* 0954A4 7F062AB4 4600228D */ trunc.w.s $f10, $f4 -/* 0954A8 7F062AB8 440F5000 */ mfc1 $t7, $f10 -/* 0954AC 7F062ABC 00000000 */ nop -/* 0954B0 7F062AC0 A60F0022 */ sh $t7, 0x22($s0) -/* 0954B4 7F062AC4 C7A800D8 */ lwc1 $f8, 0xd8($sp) -/* 0954B8 7F062AC8 C4269FFC */ lwc1 $f6, %lo(D_80053EBC)($at) -/* 0954BC 7F062ACC C7AA00CC */ lwc1 $f10, 0xcc($sp) -/* 0954C0 7F062AD0 3C018005 */ lui $at, %hi(D_80053EC0) # $at, 0x8005 -/* 0954C4 7F062AD4 46064102 */ mul.s $f4, $f8, $f6 -/* 0954C8 7F062AD8 460A2200 */ add.s $f8, $f4, $f10 -/* 0954CC 7F062ADC 4600418D */ trunc.w.s $f6, $f8 -/* 0954D0 7F062AE0 44193000 */ mfc1 $t9, $f6 -/* 0954D4 7F062AE4 00000000 */ nop -/* 0954D8 7F062AE8 A6190024 */ sh $t9, 0x24($s0) -/* 0954DC 7F062AEC 90AB0004 */ lbu $t3, 4($a1) -/* 0954E0 7F062AF0 000B7140 */ sll $t6, $t3, 5 -/* 0954E4 7F062AF4 A60E0028 */ sh $t6, 0x28($s0) -/* 0954E8 7F062AF8 90B80005 */ lbu $t8, 5($a1) -/* 0954EC 7F062AFC 00184940 */ sll $t1, $t8, 5 -/* 0954F0 7F062B00 A609002A */ sh $t1, 0x2a($s0) -/* 0954F4 7F062B04 C42AA000 */ lwc1 $f10, %lo(D_80053EC0)($at) -/* 0954F8 7F062B08 C7A400D0 */ lwc1 $f4, 0xd0($sp) -/* 0954FC 7F062B0C C7A600C4 */ lwc1 $f6, 0xc4($sp) -/* 095500 7F062B10 3C018005 */ lui $at, %hi(D_80053EC4) # $at, 0x8005 -/* 095504 7F062B14 460A2202 */ mul.s $f8, $f4, $f10 -/* 095508 7F062B18 46083101 */ sub.s $f4, $f6, $f8 -/* 09550C 7F062B1C 4600228D */ trunc.w.s $f10, $f4 -/* 095510 7F062B20 440C5000 */ mfc1 $t4, $f10 -/* 095514 7F062B24 00000000 */ nop -/* 095518 7F062B28 A60C0030 */ sh $t4, 0x30($s0) -/* 09551C 7F062B2C C428A004 */ lwc1 $f8, %lo(D_80053EC4)($at) -/* 095520 7F062B30 C7A600D4 */ lwc1 $f6, 0xd4($sp) -/* 095524 7F062B34 C7AA00C8 */ lwc1 $f10, 0xc8($sp) -/* 095528 7F062B38 3C018005 */ lui $at, %hi(D_80053EC8) # $at, 0x8005 -/* 09552C 7F062B3C 46083102 */ mul.s $f4, $f6, $f8 -/* 095530 7F062B40 46045181 */ sub.s $f6, $f10, $f4 -/* 095534 7F062B44 4600320D */ trunc.w.s $f8, $f6 -/* 095538 7F062B48 440D4000 */ mfc1 $t5, $f8 -/* 09553C 7F062B4C 00000000 */ nop -/* 095540 7F062B50 A60D0032 */ sh $t5, 0x32($s0) -/* 095544 7F062B54 C424A008 */ lwc1 $f4, %lo(D_80053EC8)($at) -/* 095548 7F062B58 C7AA00D8 */ lwc1 $f10, 0xd8($sp) -/* 09554C 7F062B5C C7A800CC */ lwc1 $f8, 0xcc($sp) -/* 095550 7F062B60 A6000038 */ sh $zero, 0x38($s0) -/* 095554 7F062B64 46045182 */ mul.s $f6, $f10, $f4 -/* 095558 7F062B68 24010016 */ li $at, 22 -/* 09555C 7F062B6C 46064281 */ sub.s $f10, $f8, $f6 -/* 095560 7F062B70 4600510D */ trunc.w.s $f4, $f10 -/* 095564 7F062B74 440B2000 */ mfc1 $t3, $f4 -/* 095568 7F062B78 00000000 */ nop -/* 09556C 7F062B7C A60B0034 */ sh $t3, 0x34($s0) -/* 095570 7F062B80 90AE0005 */ lbu $t6, 5($a1) -/* 095574 7F062B84 000EC140 */ sll $t8, $t6, 5 -/* 095578 7F062B88 A618003A */ sh $t8, 0x3a($s0) -/* 09557C 7F062B8C 82290001 */ lb $t1, 1($s1) -/* 095580 7F062B90 C7A800FC */ lwc1 $f8, 0xfc($sp) -/* 095584 7F062B94 8FAA00F8 */ lw $t2, 0xf8($sp) -/* 095588 7F062B98 552100AD */ bnel $t1, $at, .L7F062E50 -/* 09558C 7F062B9C 8FAC0160 */ lw $t4, 0x160($sp) -/* 095590 7F062BA0 C54C0000 */ lwc1 $f12, ($t2) -/* 095594 7F062BA4 C5420004 */ lwc1 $f2, 4($t2) -/* 095598 7F062BA8 C7A60100 */ lwc1 $f6, 0x100($sp) -/* 09559C 7F062BAC 46086381 */ sub.s $f14, $f12, $f8 -/* 0955A0 7F062BB0 C5400008 */ lwc1 $f0, 8($t2) -/* 0955A4 7F062BB4 E7A80038 */ swc1 $f8, 0x38($sp) -/* 0955A8 7F062BB8 46061401 */ sub.s $f16, $f2, $f6 -/* 0955AC 7F062BBC 460E7102 */ mul.s $f4, $f14, $f14 -/* 0955B0 7F062BC0 C7AA0104 */ lwc1 $f10, 0x104($sp) -/* 0955B4 7F062BC4 3C018005 */ lui $at, %hi(D_80053ECC) # $at, 0x8005 -/* 0955B8 7F062BC8 46108202 */ mul.s $f8, $f16, $f16 -/* 0955BC 7F062BCC 460A0481 */ sub.s $f18, $f0, $f10 -/* 0955C0 7F062BD0 46082100 */ add.s $f4, $f4, $f8 -/* 0955C4 7F062BD4 46129202 */ mul.s $f8, $f18, $f18 -/* 0955C8 7F062BD8 46082100 */ add.s $f4, $f4, $f8 -/* 0955CC 7F062BDC E7A40078 */ swc1 $f4, 0x78($sp) -/* 0955D0 7F062BE0 C6280010 */ lwc1 $f8, 0x10($s1) -/* 0955D4 7F062BE4 E7A60034 */ swc1 $f6, 0x34($sp) -/* 0955D8 7F062BE8 C7A60038 */ lwc1 $f6, 0x38($sp) -/* 0955DC 7F062BEC 46144202 */ mul.s $f8, $f8, $f20 -/* 0955E0 7F062BF0 46064200 */ add.s $f8, $f8, $f6 -/* 0955E4 7F062BF4 C6260014 */ lwc1 $f6, 0x14($s1) -/* 0955E8 7F062BF8 46086381 */ sub.s $f14, $f12, $f8 -/* 0955EC 7F062BFC 46143202 */ mul.s $f8, $f6, $f20 -/* 0955F0 7F062C00 C7A60034 */ lwc1 $f6, 0x34($sp) -/* 0955F4 7F062C04 46064200 */ add.s $f8, $f8, $f6 -/* 0955F8 7F062C08 C6260018 */ lwc1 $f6, 0x18($s1) -/* 0955FC 7F062C0C 46081401 */ sub.s $f16, $f2, $f8 -/* 095600 7F062C10 46143202 */ mul.s $f8, $f6, $f20 -/* 095604 7F062C14 460A4180 */ add.s $f6, $f8, $f10 -/* 095608 7F062C18 460E7202 */ mul.s $f8, $f14, $f14 -/* 09560C 7F062C1C 00000000 */ nop -/* 095610 7F062C20 46108282 */ mul.s $f10, $f16, $f16 -/* 095614 7F062C24 46060481 */ sub.s $f18, $f0, $f6 -/* 095618 7F062C28 460A4180 */ add.s $f6, $f8, $f10 -/* 09561C 7F062C2C 46129202 */ mul.s $f8, $f18, $f18 -/* 095620 7F062C30 46083280 */ add.s $f10, $f6, $f8 -/* 095624 7F062C34 C7A600C4 */ lwc1 $f6, 0xc4($sp) -/* 095628 7F062C38 4604503C */ c.lt.s $f10, $f4 -/* 09562C 7F062C3C 00000000 */ nop -/* 095630 7F062C40 4500000B */ bc1f .L7F062C70 -/* 095634 7F062C44 00000000 */ nop -/* 095638 7F062C48 C424A00C */ lwc1 $f4, %lo(D_80053ECC)($at) -/* 09563C 7F062C4C E7A600B8 */ swc1 $f6, 0xb8($sp) -/* 095640 7F062C50 3C018005 */ lui $at, %hi(D_80053ED0) # $at, 0x8005 -/* 095644 7F062C54 C426A010 */ lwc1 $f6, %lo(D_80053ED0)($at) -/* 095648 7F062C58 C7A800C8 */ lwc1 $f8, 0xc8($sp) -/* 09564C 7F062C5C C7AA00CC */ lwc1 $f10, 0xcc($sp) -/* 095650 7F062C60 46062002 */ mul.s $f0, $f4, $f6 -/* 095654 7F062C64 E7A800BC */ swc1 $f8, 0xbc($sp) -/* 095658 7F062C68 E7AA00C0 */ swc1 $f10, 0xc0($sp) -/* 09565C 7F062C6C E7A000B4 */ swc1 $f0, 0xb4($sp) -.L7F062C70: -/* 095660 7F062C70 C7A000B4 */ lwc1 $f0, 0xb4($sp) -/* 095664 7F062C74 C7A800DC */ lwc1 $f8, 0xdc($sp) -/* 095668 7F062C78 C7A400B8 */ lwc1 $f4, 0xb8($sp) -/* 09566C 7F062C7C 3C088007 */ lui $t0, %hi(flareimage5) # $t0, 0x8007 -/* 095670 7F062C80 46004282 */ mul.s $f10, $f8, $f0 -/* 095674 7F062C84 250844B8 */ addiu $t0, %lo(flareimage5) # addiu $t0, $t0, 0x44b8 -/* 095678 7F062C88 46045180 */ add.s $f6, $f10, $f4 -/* 09567C 7F062C8C 4600320D */ trunc.w.s $f8, $f6 -/* 095680 7F062C90 440F4000 */ mfc1 $t7, $f8 -/* 095684 7F062C94 00000000 */ nop -/* 095688 7F062C98 A60F0040 */ sh $t7, 0x40($s0) -/* 09568C 7F062C9C C7AA00E0 */ lwc1 $f10, 0xe0($sp) -/* 095690 7F062CA0 C7A600BC */ lwc1 $f6, 0xbc($sp) -/* 095694 7F062CA4 46005102 */ mul.s $f4, $f10, $f0 -/* 095698 7F062CA8 46062200 */ add.s $f8, $f4, $f6 -/* 09569C 7F062CAC 4600428D */ trunc.w.s $f10, $f8 -/* 0956A0 7F062CB0 44195000 */ mfc1 $t9, $f10 -/* 0956A4 7F062CB4 00000000 */ nop -/* 0956A8 7F062CB8 A6190042 */ sh $t9, 0x42($s0) -/* 0956AC 7F062CBC C7A400E4 */ lwc1 $f4, 0xe4($sp) -/* 0956B0 7F062CC0 C7A800C0 */ lwc1 $f8, 0xc0($sp) -/* 0956B4 7F062CC4 46002182 */ mul.s $f6, $f4, $f0 -/* 0956B8 7F062CC8 46083280 */ add.s $f10, $f6, $f8 -/* 0956BC 7F062CCC 4600510D */ trunc.w.s $f4, $f10 -/* 0956C0 7F062CD0 440E2000 */ mfc1 $t6, $f4 -/* 0956C4 7F062CD4 00000000 */ nop -/* 0956C8 7F062CD8 A60E0044 */ sh $t6, 0x44($s0) -/* 0956CC 7F062CDC 8D180000 */ lw $t8, ($t0) -/* 0956D0 7F062CE0 93090004 */ lbu $t1, 4($t8) -/* 0956D4 7F062CE4 00095140 */ sll $t2, $t1, 5 -/* 0956D8 7F062CE8 A60A0048 */ sh $t2, 0x48($s0) -/* 0956DC 7F062CEC 8D0C0000 */ lw $t4, ($t0) -/* 0956E0 7F062CF0 918F0005 */ lbu $t7, 5($t4) -/* 0956E4 7F062CF4 000F6940 */ sll $t5, $t7, 5 -/* 0956E8 7F062CF8 A60D004A */ sh $t5, 0x4a($s0) -/* 0956EC 7F062CFC C7A800DC */ lwc1 $f8, 0xdc($sp) -/* 0956F0 7F062D00 C7A600B8 */ lwc1 $f6, 0xb8($sp) -/* 0956F4 7F062D04 46004282 */ mul.s $f10, $f8, $f0 -/* 0956F8 7F062D08 460A3101 */ sub.s $f4, $f6, $f10 -/* 0956FC 7F062D0C 4600220D */ trunc.w.s $f8, $f4 -/* 095700 7F062D10 440B4000 */ mfc1 $t3, $f8 -/* 095704 7F062D14 00000000 */ nop -/* 095708 7F062D18 A60B0050 */ sh $t3, 0x50($s0) -/* 09570C 7F062D1C C7AA00E0 */ lwc1 $f10, 0xe0($sp) -/* 095710 7F062D20 C7A600BC */ lwc1 $f6, 0xbc($sp) -/* 095714 7F062D24 46005102 */ mul.s $f4, $f10, $f0 -/* 095718 7F062D28 46043201 */ sub.s $f8, $f6, $f4 -/* 09571C 7F062D2C 4600428D */ trunc.w.s $f10, $f8 -/* 095720 7F062D30 44185000 */ mfc1 $t8, $f10 -/* 095724 7F062D34 00000000 */ nop -/* 095728 7F062D38 A6180052 */ sh $t8, 0x52($s0) -/* 09572C 7F062D3C C7A400E4 */ lwc1 $f4, 0xe4($sp) -/* 095730 7F062D40 C7A600C0 */ lwc1 $f6, 0xc0($sp) -/* 095734 7F062D44 A6000058 */ sh $zero, 0x58($s0) -/* 095738 7F062D48 46002202 */ mul.s $f8, $f4, $f0 -/* 09573C 7F062D4C A600005A */ sh $zero, 0x5a($s0) -/* 095740 7F062D50 46083281 */ sub.s $f10, $f6, $f8 -/* 095744 7F062D54 4600510D */ trunc.w.s $f4, $f10 -/* 095748 7F062D58 440A2000 */ mfc1 $t2, $f4 -/* 09574C 7F062D5C 00000000 */ nop -/* 095750 7F062D60 A60A0054 */ sh $t2, 0x54($s0) -/* 095754 7F062D64 C7A600D0 */ lwc1 $f6, 0xd0($sp) -/* 095758 7F062D68 C7AA00B8 */ lwc1 $f10, 0xb8($sp) -/* 09575C 7F062D6C 46003202 */ mul.s $f8, $f6, $f0 -/* 095760 7F062D70 460A4100 */ add.s $f4, $f8, $f10 -/* 095764 7F062D74 4600218D */ trunc.w.s $f6, $f4 -/* 095768 7F062D78 440F3000 */ mfc1 $t7, $f6 -/* 09576C 7F062D7C 00000000 */ nop -/* 095770 7F062D80 A60F0060 */ sh $t7, 0x60($s0) -/* 095774 7F062D84 C7A800D4 */ lwc1 $f8, 0xd4($sp) -/* 095778 7F062D88 C7A400BC */ lwc1 $f4, 0xbc($sp) -/* 09577C 7F062D8C 46004282 */ mul.s $f10, $f8, $f0 -/* 095780 7F062D90 46045180 */ add.s $f6, $f10, $f4 -/* 095784 7F062D94 4600320D */ trunc.w.s $f8, $f6 -/* 095788 7F062D98 44194000 */ mfc1 $t9, $f8 -/* 09578C 7F062D9C 00000000 */ nop -/* 095790 7F062DA0 A6190062 */ sh $t9, 0x62($s0) -/* 095794 7F062DA4 C7AA00D8 */ lwc1 $f10, 0xd8($sp) -/* 095798 7F062DA8 C7A600C0 */ lwc1 $f6, 0xc0($sp) -/* 09579C 7F062DAC A6000068 */ sh $zero, 0x68($s0) -/* 0957A0 7F062DB0 46005102 */ mul.s $f4, $f10, $f0 -/* 0957A4 7F062DB4 46062200 */ add.s $f8, $f4, $f6 -/* 0957A8 7F062DB8 4600428D */ trunc.w.s $f10, $f8 -/* 0957AC 7F062DBC 440E5000 */ mfc1 $t6, $f10 -/* 0957B0 7F062DC0 00000000 */ nop -/* 0957B4 7F062DC4 A60E0064 */ sh $t6, 0x64($s0) -/* 0957B8 7F062DC8 8D180000 */ lw $t8, ($t0) -/* 0957BC 7F062DCC 93090005 */ lbu $t1, 5($t8) -/* 0957C0 7F062DD0 00095140 */ sll $t2, $t1, 5 -/* 0957C4 7F062DD4 A60A006A */ sh $t2, 0x6a($s0) -/* 0957C8 7F062DD8 C7A600D0 */ lwc1 $f6, 0xd0($sp) -/* 0957CC 7F062DDC C7A400B8 */ lwc1 $f4, 0xb8($sp) -/* 0957D0 7F062DE0 46003202 */ mul.s $f8, $f6, $f0 -/* 0957D4 7F062DE4 46082281 */ sub.s $f10, $f4, $f8 -/* 0957D8 7F062DE8 4600518D */ trunc.w.s $f6, $f10 -/* 0957DC 7F062DEC 440F3000 */ mfc1 $t7, $f6 -/* 0957E0 7F062DF0 00000000 */ nop -/* 0957E4 7F062DF4 A60F0070 */ sh $t7, 0x70($s0) -/* 0957E8 7F062DF8 C7A800D4 */ lwc1 $f8, 0xd4($sp) -/* 0957EC 7F062DFC C7A400BC */ lwc1 $f4, 0xbc($sp) -/* 0957F0 7F062E00 46004282 */ mul.s $f10, $f8, $f0 -/* 0957F4 7F062E04 460A2181 */ sub.s $f6, $f4, $f10 -/* 0957F8 7F062E08 4600320D */ trunc.w.s $f8, $f6 -/* 0957FC 7F062E0C 44194000 */ mfc1 $t9, $f8 -/* 095800 7F062E10 00000000 */ nop -/* 095804 7F062E14 A6190072 */ sh $t9, 0x72($s0) -/* 095808 7F062E18 C7AA00D8 */ lwc1 $f10, 0xd8($sp) -/* 09580C 7F062E1C C7A400C0 */ lwc1 $f4, 0xc0($sp) -/* 095810 7F062E20 46005182 */ mul.s $f6, $f10, $f0 -/* 095814 7F062E24 46062201 */ sub.s $f8, $f4, $f6 -/* 095818 7F062E28 4600428D */ trunc.w.s $f10, $f8 -/* 09581C 7F062E2C 440E5000 */ mfc1 $t6, $f10 -/* 095820 7F062E30 00000000 */ nop -/* 095824 7F062E34 A60E0074 */ sh $t6, 0x74($s0) -/* 095828 7F062E38 8D180000 */ lw $t8, ($t0) -/* 09582C 7F062E3C 93090004 */ lbu $t1, 4($t8) -/* 095830 7F062E40 A600007A */ sh $zero, 0x7a($s0) -/* 095834 7F062E44 00095140 */ sll $t2, $t1, 5 -/* 095838 7F062E48 A60A0078 */ sh $t2, 0x78($s0) -/* 09583C 7F062E4C 8FAC0160 */ lw $t4, 0x160($sp) -.L7F062E50: -/* 095840 7F062E50 3C0DB600 */ lui $t5, 0xb600 -/* 095844 7F062E54 24192000 */ li $t9, 8192 -/* 095848 7F062E58 258F0008 */ addiu $t7, $t4, 8 -/* 09584C 7F062E5C AFAF0160 */ sw $t7, 0x160($sp) -/* 095850 7F062E60 AD990004 */ sw $t9, 4($t4) -/* 095854 7F062E64 AD8D0000 */ sw $t5, ($t4) -/* 095858 7F062E68 8FAB0160 */ lw $t3, 0x160($sp) -/* 09585C 7F062E6C 3C180102 */ lui $t8, (0x01020040 >> 16) # lui $t8, 0x102 -/* 095860 7F062E70 37180040 */ ori $t8, (0x01020040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 095864 7F062E74 256E0008 */ addiu $t6, $t3, 8 -/* 095868 7F062E78 AFAE0160 */ sw $t6, 0x160($sp) -/* 09586C 7F062E7C AD780000 */ sw $t8, ($t3) -/* 095870 7F062E80 8FA40158 */ lw $a0, 0x158($sp) -/* 095874 7F062E84 0C003838 */ jal osVirtualToPhysical -/* 095878 7F062E88 AFAB006C */ sw $t3, 0x6c($sp) -/* 09587C 7F062E8C 8FA3006C */ lw $v1, 0x6c($sp) -/* 095880 7F062E90 3C088007 */ lui $t0, %hi(flareimage5) # $t0, 0x8007 -/* 095884 7F062E94 24010016 */ li $at, 22 -/* 095888 7F062E98 AC620004 */ sw $v0, 4($v1) -/* 09588C 7F062E9C 82290001 */ lb $t1, 1($s1) -/* 095890 7F062EA0 250844B8 */ addiu $t0, %lo(flareimage5) # addiu $t0, $t0, 0x44b8 -/* 095894 7F062EA4 8FA500B0 */ lw $a1, 0xb0($sp) -/* 095898 7F062EA8 15210029 */ bne $t1, $at, .L7F062F50 -/* 09589C 7F062EAC 27A40160 */ addiu $a0, $sp, 0x160 -/* 0958A0 7F062EB0 240A0002 */ li $t2, 2 -/* 0958A4 7F062EB4 AFAA0010 */ sw $t2, 0x10($sp) -/* 0958A8 7F062EB8 27A40160 */ addiu $a0, $sp, 0x160 -/* 0958AC 7F062EBC 8D050000 */ lw $a1, ($t0) -/* 0958B0 7F062EC0 24060004 */ li $a2, 4 -/* 0958B4 7F062EC4 0FC1DB7A */ jal texSelect -/* 0958B8 7F062EC8 8FA70168 */ lw $a3, 0x168($sp) -/* 0958BC 7F062ECC 8FB10160 */ lw $s1, 0x160($sp) -/* 0958C0 7F062ED0 3C0D0470 */ lui $t5, (0x04700080 >> 16) # lui $t5, 0x470 -/* 0958C4 7F062ED4 35AD0080 */ ori $t5, (0x04700080 & 0xFFFF) # ori $t5, $t5, 0x80 -/* 0958C8 7F062ED8 262F0008 */ addiu $t7, $s1, 8 -/* 0958CC 7F062EDC AFAF0160 */ sw $t7, 0x160($sp) -/* 0958D0 7F062EE0 02002025 */ move $a0, $s0 -/* 0958D4 7F062EE4 0C003838 */ jal osVirtualToPhysical -/* 0958D8 7F062EE8 AE2D0000 */ sw $t5, ($s1) -/* 0958DC 7F062EEC AE220004 */ sw $v0, 4($s1) -/* 0958E0 7F062EF0 8FB90160 */ lw $t9, 0x160($sp) -/* 0958E4 7F062EF4 3C0EB100 */ lui $t6, (0xB1000076 >> 16) # lui $t6, 0xb100 -/* 0958E8 7F062EF8 35CE0076 */ ori $t6, (0xB1000076 & 0xFFFF) # ori $t6, $t6, 0x76 -/* 0958EC 7F062EFC 272B0008 */ addiu $t3, $t9, 8 -/* 0958F0 7F062F00 AFAB0160 */ sw $t3, 0x160($sp) -/* 0958F4 7F062F04 24185454 */ li $t8, 21588 -/* 0958F8 7F062F08 AF380004 */ sw $t8, 4($t9) -/* 0958FC 7F062F0C AF2E0000 */ sw $t6, ($t9) -/* 095900 7F062F10 24090002 */ li $t1, 2 -/* 095904 7F062F14 AFA90010 */ sw $t1, 0x10($sp) -/* 095908 7F062F18 8FA70168 */ lw $a3, 0x168($sp) -/* 09590C 7F062F1C 8FA500B0 */ lw $a1, 0xb0($sp) -/* 095910 7F062F20 27A40160 */ addiu $a0, $sp, 0x160 -/* 095914 7F062F24 0FC1DB7A */ jal texSelect -/* 095918 7F062F28 24060004 */ li $a2, 4 -/* 09591C 7F062F2C 8FAA0160 */ lw $t2, 0x160($sp) -/* 095920 7F062F30 3C0FB100 */ lui $t7, (0xB1000013 >> 16) # lui $t7, 0xb100 -/* 095924 7F062F34 35EF0013 */ ori $t7, (0xB1000013 & 0xFFFF) # ori $t7, $t7, 0x13 -/* 095928 7F062F38 254C0008 */ addiu $t4, $t2, 8 -/* 09592C 7F062F3C AFAC0160 */ sw $t4, 0x160($sp) -/* 095930 7F062F40 240D3020 */ li $t5, 12320 -/* 095934 7F062F44 AD4D0004 */ sw $t5, 4($t2) -/* 095938 7F062F48 10000017 */ b .L7F062FA8 -/* 09593C 7F062F4C AD4F0000 */ sw $t7, ($t2) -.L7F062F50: -/* 095940 7F062F50 24190002 */ li $t9, 2 -/* 095944 7F062F54 AFB90010 */ sw $t9, 0x10($sp) -/* 095948 7F062F58 24060004 */ li $a2, 4 -/* 09594C 7F062F5C 0FC1DB7A */ jal texSelect -/* 095950 7F062F60 8FA70168 */ lw $a3, 0x168($sp) -/* 095954 7F062F64 8FB10160 */ lw $s1, 0x160($sp) -/* 095958 7F062F68 3C180430 */ lui $t8, (0x04300040 >> 16) # lui $t8, 0x430 -/* 09595C 7F062F6C 37180040 */ ori $t8, (0x04300040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 095960 7F062F70 262E0008 */ addiu $t6, $s1, 8 -/* 095964 7F062F74 AFAE0160 */ sw $t6, 0x160($sp) -/* 095968 7F062F78 02002025 */ move $a0, $s0 -/* 09596C 7F062F7C 0C003838 */ jal osVirtualToPhysical -/* 095970 7F062F80 AE380000 */ sw $t8, ($s1) -/* 095974 7F062F84 AE220004 */ sw $v0, 4($s1) -/* 095978 7F062F88 8FA90160 */ lw $t1, 0x160($sp) -/* 09597C 7F062F8C 3C0CB100 */ lui $t4, (0xB1000013 >> 16) # lui $t4, 0xb100 -/* 095980 7F062F90 358C0013 */ ori $t4, (0xB1000013 & 0xFFFF) # ori $t4, $t4, 0x13 -/* 095984 7F062F94 252A0008 */ addiu $t2, $t1, 8 -/* 095988 7F062F98 AFAA0160 */ sw $t2, 0x160($sp) -/* 09598C 7F062F9C 240F3020 */ li $t7, 12320 -/* 095990 7F062FA0 AD2F0004 */ sw $t7, 4($t1) -/* 095994 7F062FA4 AD2C0000 */ sw $t4, ($t1) -.L7F062FA8: -/* 095998 7F062FA8 8FBF002C */ lw $ra, 0x2c($sp) -/* 09599C 7F062FAC 8FA20160 */ lw $v0, 0x160($sp) -/* 0959A0 7F062FB0 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0959A4 7F062FB4 8FB00024 */ lw $s0, 0x24($sp) -/* 0959A8 7F062FB8 8FB10028 */ lw $s1, 0x28($sp) -/* 0959AC 7F062FBC 03E00008 */ jr $ra -/* 0959B0 7F062FC0 27BD0160 */ addiu $sp, $sp, 0x160 -) -#endif -#endif /* * Address: 0x7F062B00 */ -void sub_GAME_7F062B00(ChrRecord_f180* arg0) +void gunAdvanceBeamTimer(BeamRecord* beam) { - if (arg0->unk00 >= 0) + if (beam->unk00 >= 0) { if (g_ClockTimer < 3) { #ifdef VERSION_US - arg0->unk28 += arg0->unk20 * g_GlobalTimerDelta; + beam->unk28 += beam->unk20 * g_GlobalTimerDelta; #else - arg0->unk28 += arg0->unk20 * g_JP_GlobalTimerDelta; + beam->unk28 += beam->unk20 * g_JP_GlobalTimerDelta; #endif } else { - arg0->unk28 += arg0->unk20 * (2.0f + ((f32) randomGetNext() * 2.3283064e-10f * 0.5f)); + beam->unk28 += beam->unk20 * (2.0f + ((f32) randomGetNext() * 2.3283064e-10f * 0.5f)); } - if (arg0->unk1c <= arg0->unk28) + if (beam->unk1c <= beam->unk28) { - arg0->unk00 = -1; + beam->unk00 = -1; return; } - arg0->unk00++; + beam->unk00++; } } +// Address: 0x7F062BE4 +void gunRenderFirstPersonGunModels(Gfx **gdlptr) +{ + Gfx *gdl = *gdlptr; + ModelRenderData renderdata; + s32 handnum; + Model *model; + + renderdata = *(ModelRenderData *)&D_80035CC0; + + for (handnum = 0; handnum != 2; handnum++) + { + struct hand *handptr = &g_CurrentPlayer->hands[handnum]; + s32 item = get_item_in_hand_or_watch_menu(handnum); + + if (handptr->field_87F == 0) + { + continue; + } + + if (item != ITEM_WATCHLASER) + { + gdl = sub_GAME_7F061E18(gdl, &handptr->weapon_beam, 0); + } + + if (item == ITEM_GOLDENGUN || item == ITEM_RUGER || item == ITEM_KNIFE || item == ITEM_THROWKNIFE || item == ITEM_SILVERWPPK || item == ITEM_GOLDWPPK) + { + gSPSetLights1(gdl++, g_WeaponEnvmapLight); + gSPLookAt(gdl++, sub_GAME_7F078474()); + } + + gSPPerspNormalize(gdl++, matrix_4x4_calc_depth_scale(0.0f, 300.0f)); + + if ((*(Model *)&handptr->field_B68).obj->numSwitches >= 0x11 && (*(Model *)&handptr->field_B68).obj->Switches[16] != NULL) + { + union ModelRwData *rwdata; + model = (Model *)&handptr->field_B68; + rwdata = modelGetNodeRwData(model, (*(Model *)&handptr->field_B68).obj->Switches[17]); + + if (rwdata != NULL) + { + rwdata->Raw.unk00 = 1; + } + + if (item == ITEM_ROCKETLAUNCH) + { + save_img_index_to_obj_ani_slot(&g_UnknownAnimController, crosshairimage); + gdl = process_monitor_animation_microcode(model, (*(Model *)&handptr->field_B68).obj->Switches[16], &g_UnknownAnimController, gdl, 0, 4); + } + else + { + gdl = process_monitor_animation_microcode(model, (*(Model *)&handptr->field_B68).obj->Switches[16], &g_TaserAnimController, gdl, 0, 1); + } + } + + renderdata.gdl = gdl; + renderdata.PropType = 4; + renderdata.envcolour.word = g_CurrentPlayer->tileColor.a + | ((u32)g_CurrentPlayer->tileColor.r << 24) + | ((u32)g_CurrentPlayer->tileColor.g << 16) + | ((u32)g_CurrentPlayer->tileColor.b << 8); + renderdata.zbufferenabled = 0; + + matrix_4x4_7F058C64(); + + if (item == ITEM_ROCKETLAUNCH && handptr->rocket != NULL) + { + model = handptr->rocket->model; + + subdraw(&renderdata, model); + bondviewTransformManyPosToViewMatrix(model->render_pos, model->obj->numMatrices); + + if (handptr->firedrocket != 0) + { + handptr->rocket = NULL; + } + } + + if (bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_MIRROR_DUAL) != 0) + { + gSPClearGeometryMode(renderdata.gdl++, G_CULL_BOTH); + + if (handnum == 0) + { + renderdata.cullmode = 3; + } + else + { + renderdata.cullmode = 2; + } + } + + subdraw(&renderdata, (Model *)&handptr->field_B68); + gdl = renderdata.gdl; + + if (bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_MIRROR_DUAL) != 0) + { + gSPClearGeometryMode(gdl++, G_CULL_BOTH); + } + + bondviewTransformManyPosToViewMatrix((*(Model *)&handptr->field_B68).render_pos, (*(Model *)&handptr->field_B68).obj->numMatrices); + matrix_4x4_7F058C88(); + + gSPPerspNormalize(gdl++, viGetPerspNorm()); + + if (item == ITEM_WATCHLASER) + { + gdl = sub_GAME_7F061E18(gdl, &handptr->weapon_beam, 0); + } + } + + *gdlptr = gdl; +} -#ifdef NONMATCHING -void sub_GAME_7F062BE4(void) { + +Gfx *set_enviro_fog_for_items_in_solo_watch_menu(Gfx *gdl, ITEM_IDS itemid, Mtxf *mtx, s32 arg3, s32 arg4) +{ + ModelRenderData renderdata = *((ModelRenderData *) (&D_80035D00)); + ModelHeader model; + u8 spb8[0x80]; + s32 padb4; + Mtxf sp74; + Mtxf *matrices; + union ModelRwData *rwdata; + s32 i; + s32 j; + ModelFileHeader *bodymodel; + + if ((itemid == ITEM_TRIGGER) || (itemid == ITEM_WATCHLASER)) + { + itemid = ITEM_WATCHMAGNETATTRACT; + } + + sub_GAME_7F05DA8C(GUNRIGHT, itemid); + + if ((!Gun_hand_without_item(GUNRIGHT)) || (!get_itemtype_in_hand(GUNRIGHT))) + { + return gdl; + } + + bodymodel = &g_CurrentPlayer->copy_of_body_obj_header[GUNRIGHT]; + + if (!get_ptr_weapon_model_header_line(itemid)) + { + goto earlyreturn; + } + + if (bondwalkItemCheckBitflags(itemid, WEAPONSTATBITFLAG_HIDE_FIRST_PERSON_MENU)) + { + goto earlyreturn; + } + + matrices = dynAllocate(bodymodel->numMatrices << 6); + + for (i = 0; i < bodymodel->numMatrices; i++) + { + matrix_4x4_set_identity(&matrices[i]); + } + + i = 0; + ((Model *) &model)->render_pos = matrices; + modelCalculateRwDataLen(bodymodel); + modelInit((Model *) &model, bodymodel, spb8); + sub_GAME_7F05E978((Model *) &model, 0); + sub_GAME_7F05EA94((Model *) &model, 1); + + if (bodymodel->Switches[1] != NULL) + { + rwdata = modelGetNodeRwData((Model *) &model, bodymodel->Switches[1]); + + if (rwdata != 0) + { + rwdata->Raw.unk00 = 0; + } + } + + matrix_4x4_copy(mtx, matrices); + + if (bodymodel->Skeleton == (&skeleton_gun_revolver)) + { + if (bodymodel->Switches[4] != NULL) + { + matrix_4x4_set_identity_and_position((coord3d *) bodymodel->Switches[4]->Data, &sp74); + matrix_4x4_multiply(mtx, &sp74, &matrices[3]); + } + if (bodymodel->Switches[5] != NULL) + { + matrix_4x4_set_identity_and_position((coord3d *) bodymodel->Switches[5]->Data, &sp74); + matrix_4x4_multiply(mtx, &sp74, &matrices[4]); + } + } + + if (bodymodel->Switches[6] != NULL) + { + coord3d *pos; + s32 index; + + pos = (coord3d *) bodymodel->Switches[6]->Data; + index = modelFindNodeMtxIndex(bodymodel->Switches[6], 0); + matrix_4x4_set_identity_and_position(pos, &sp74); + matrix_4x4_multiply(mtx, &sp74, &matrices[index]); + } + + if (bodymodel->Switches[7] != NULL) + { + coord3d *pos; + s32 index; + u8 pad[8]; + + pos = (coord3d *) bodymodel->Switches[7]->Data; + index = modelFindNodeMtxIndex(bodymodel->Switches[7], 0); + matrix_4x4_set_identity_and_position(pos, &sp74); + matrix_4x4_multiply(mtx, &sp74, &matrices[index]); + } + + if (bodymodel->numSwitches >= 19) + { + for (j = 0; j != 20; j += 4) + { + if ((*((ModelNode **) ((((u8 *) bodymodel->Switches) + j) + 0x48))) != NULL) + { + rwdata = modelGetNodeRwData((Model *) &model, *((ModelNode **) ((((u8 *) bodymodel->Switches) + j) + 0x48))); + + if (rwdata != NULL) + { + rwdata->Raw.unk00 = 1; + } + } + + if ((*((ModelNode **) ((((u8 *) bodymodel->Switches) + j) + 0x5c))) != NULL) + { + rwdata = modelGetNodeRwData((Model *) &model, *((ModelNode **) ((((u8 *) bodymodel->Switches) + j) + 0x5c))); + + if (rwdata != NULL) + { + rwdata->Raw.unk00 = 1; + } + } + } + } + + modelUpdateNodeRelations((Model *) &model); + + if ((((((itemid == ITEM_GOLDENGUN) || (itemid == ITEM_RUGER)) || (itemid == ITEM_KNIFE)) || (itemid == ITEM_THROWKNIFE)) || (itemid == ITEM_SILVERWPPK)) || (itemid == ITEM_GOLDWPPK)) + { + gSPSetLights1(gdl++, g_WeaponEnvmapLight); + gSPLookAt(gdl++, sub_GAME_7F078474()); + } + + if (bodymodel->numSwitches >= 17) + { + if (bodymodel->Switches[16] != NULL) + { + rwdata = modelGetNodeRwData((Model *) &model, bodymodel->Switches[17]); + + if (rwdata != 0) + { + rwdata->Raw.unk00 = 0; + } + } + } + + renderdata.gdl = gdl; + + if (arg3 >= 0xff) + { + renderdata.PropType = PROP_TYPE_WEAPON; + renderdata.envcolour.word = arg4; + } + else + { + renderdata.PropType = PROP_TYPE_PLAYER; + renderdata.envcolour.word = arg3; + renderdata.fogcolour.word = arg4; + } + + renderdata.zbufferenabled = FALSE; + subdraw(&renderdata, (Model *) &model); + gdl = renderdata.gdl; + matrix_4x4_7F058C64(); + j = 0; + + if (bodymodel->numMatrices > 0) + { + do + { + matrix_4x4_copy((Mtxf *) (((u8 *) ((Model *) &model)->render_pos) + j), &sp74); + matrix_4x4_f32_to_s32(&sp74, (Mtxf *) ((i << 6) + (u8 *) ((Model *) &model)->render_pos)); + i++; + j += 0x40; + } + while (i < bodymodel->numMatrices); + } + + matrix_4x4_7F058C88(); + +earlyreturn: + return gdl; } -#else -#if defined(VERSION_US) || defined(VERSION_JP) -GLOBAL_ASM( -.text -glabel sub_GAME_7F062BE4 -/* 097714 7F062BE4 27BDFF30 */ addiu $sp, $sp, -0xd0 -/* 097718 7F062BE8 AFB7003C */ sw $s7, 0x3c($sp) -/* 09771C 7F062BEC 3C0F8003 */ lui $t7, %hi(D_80035CC0) -/* 097720 7F062BF0 27B7008C */ addiu $s7, $sp, 0x8c -/* 097724 7F062BF4 AFBF0044 */ sw $ra, 0x44($sp) -/* 097728 7F062BF8 AFBE0040 */ sw $fp, 0x40($sp) -/* 09772C 7F062BFC AFB60038 */ sw $s6, 0x38($sp) -/* 097730 7F062C00 AFB50034 */ sw $s5, 0x34($sp) -/* 097734 7F062C04 AFB40030 */ sw $s4, 0x30($sp) -/* 097738 7F062C08 AFB3002C */ sw $s3, 0x2c($sp) -/* 09773C 7F062C0C AFB20028 */ sw $s2, 0x28($sp) -/* 097740 7F062C10 AFB10024 */ sw $s1, 0x24($sp) -/* 097744 7F062C14 AFB00020 */ sw $s0, 0x20($sp) -/* 097748 7F062C18 AFA400D0 */ sw $a0, 0xd0($sp) -/* 09774C 7F062C1C 25EF5CC0 */ addiu $t7, %lo(D_80035CC0) # addiu $t7, $t7, 0x5cc0 -/* 097750 7F062C20 8C900000 */ lw $s0, ($a0) -/* 097754 7F062C24 25E8003C */ addiu $t0, $t7, 0x3c -/* 097758 7F062C28 02E04825 */ move $t1, $s7 -.L7F062C2C: -/* 09775C 7F062C2C 8DE10000 */ lw $at, ($t7) -/* 097760 7F062C30 25EF000C */ addiu $t7, $t7, 0xc -/* 097764 7F062C34 2529000C */ addiu $t1, $t1, 0xc -/* 097768 7F062C38 AD21FFF4 */ sw $at, -0xc($t1) -/* 09776C 7F062C3C 8DE1FFF8 */ lw $at, -8($t7) -/* 097770 7F062C40 AD21FFF8 */ sw $at, -8($t1) -/* 097774 7F062C44 8DE1FFFC */ lw $at, -4($t7) -/* 097778 7F062C48 15E8FFF8 */ bne $t7, $t0, .L7F062C2C -/* 09777C 7F062C4C AD21FFFC */ sw $at, -4($t1) -/* 097780 7F062C50 8DE10000 */ lw $at, ($t7) -/* 097784 7F062C54 3C1E8008 */ lui $fp, %hi(g_CurrentPlayer) -/* 097788 7F062C58 27DEA0B0 */ addiu $fp, %lo(g_CurrentPlayer) # addiu $fp, $fp, -0x5f50 -/* 09778C 7F062C5C 0000A825 */ move $s5, $zero -/* 097790 7F062C60 0000B025 */ move $s6, $zero -/* 097794 7F062C64 AD210000 */ sw $at, ($t1) -.L7F062C68: -/* 097798 7F062C68 8FCA0000 */ lw $t2, ($fp) -/* 09779C 7F062C6C 02A02025 */ move $a0, $s5 -/* 0977A0 7F062C70 01569821 */ addu $s3, $t2, $s6 -/* 0977A4 7F062C74 0FC17691 */ jal get_item_in_hand_or_watch_menu -/* 0977A8 7F062C78 26730870 */ addiu $s3, $s3, 0x870 -/* 0977AC 7F062C7C 826B000F */ lb $t3, 0xf($s3) -/* 0977B0 7F062C80 0040A025 */ move $s4, $v0 -/* 0977B4 7F062C84 24010017 */ li $at, 23 -/* 0977B8 7F062C88 516000CD */ beql $t3, $zero, .L7F062FC0 -/* 0977BC 7F062C8C 26B50001 */ addiu $s5, $s5, 1 -/* 0977C0 7F062C90 10410005 */ beq $v0, $at, .L7F062CA8 -/* 0977C4 7F062C94 02002025 */ move $a0, $s0 -/* 0977C8 7F062C98 266501E4 */ addiu $a1, $s3, 0x1e4 -/* 0977CC 7F062C9C 0FC18786 */ jal sub_GAME_7F061E18 -/* 0977D0 7F062CA0 00003025 */ move $a2, $zero -/* 0977D4 7F062CA4 00408025 */ move $s0, $v0 -.L7F062CA8: -/* 0977D8 7F062CA8 24010013 */ li $at, 19 -/* 0977DC 7F062CAC 1281000C */ beq $s4, $at, .L7F062CE0 -/* 0977E0 7F062CB0 02001025 */ move $v0, $s0 -/* 0977E4 7F062CB4 24010012 */ li $at, 18 -/* 0977E8 7F062CB8 12810009 */ beq $s4, $at, .L7F062CE0 -/* 0977EC 7F062CBC 24010002 */ li $at, 2 -/* 0977F0 7F062CC0 12810007 */ beq $s4, $at, .L7F062CE0 -/* 0977F4 7F062CC4 24010003 */ li $at, 3 -/* 0977F8 7F062CC8 12810005 */ beq $s4, $at, .L7F062CE0 -/* 0977FC 7F062CCC 24010014 */ li $at, 20 -/* 097800 7F062CD0 12810003 */ beq $s4, $at, .L7F062CE0 -/* 097804 7F062CD4 24010015 */ li $at, 21 -/* 097808 7F062CD8 56810028 */ bnel $s4, $at, .L7F062D7C -/* 09780C 7F062CDC 3C0BBC00 */ lui $t3, 0xbc00 -.L7F062CE0: -/* 097810 7F062CE0 26100008 */ addiu $s0, $s0, 8 -/* 097814 7F062CE4 3C0CBC00 */ lui $t4, (0xBC000002 >> 16) # lui $t4, 0xbc00 -/* 097818 7F062CE8 3C0D8000 */ lui $t5, (0x80000040 >> 16) # lui $t5, 0x8000 -/* 09781C 7F062CEC 35AD0040 */ ori $t5, (0x80000040 & 0xFFFF) # ori $t5, $t5, 0x40 -/* 097820 7F062CF0 358C0002 */ ori $t4, (0xBC000002 & 0xFFFF) # ori $t4, $t4, 2 -/* 097824 7F062CF4 02001825 */ move $v1, $s0 -/* 097828 7F062CF8 26100008 */ addiu $s0, $s0, 8 -/* 09782C 7F062CFC AC4C0000 */ sw $t4, ($v0) -/* 097830 7F062D00 AC4D0004 */ sw $t5, 4($v0) -/* 097834 7F062D04 3C0E0386 */ lui $t6, (0x03860010 >> 16) # lui $t6, 0x386 -/* 097838 7F062D08 3C198003 */ lui $t9, %hi(g_WeaponEnvmapLight + 0x8) -/* 09783C 7F062D0C 27392448 */ addiu $t9, %lo(g_WeaponEnvmapLight + 0x8) # addiu $t9, $t9, 0x2448 -/* 097840 7F062D10 35CE0010 */ ori $t6, (0x03860010 & 0xFFFF) # ori $t6, $t6, 0x10 -/* 097844 7F062D14 02002025 */ move $a0, $s0 -/* 097848 7F062D18 AC6E0000 */ sw $t6, ($v1) -/* 09784C 7F062D1C AC790004 */ sw $t9, 4($v1) -/* 097850 7F062D20 3C180388 */ lui $t8, (0x03880010 >> 16) # lui $t8, 0x388 -/* 097854 7F062D24 3C088003 */ lui $t0, %hi(g_WeaponEnvmapLight) -/* 097858 7F062D28 25082440 */ addiu $t0, %lo(g_WeaponEnvmapLight) # addiu $t0, $t0, 0x2440 -/* 09785C 7F062D2C 37180010 */ ori $t8, (0x03880010 & 0xFFFF) # ori $t8, $t8, 0x10 -/* 097860 7F062D30 26100008 */ addiu $s0, $s0, 8 -/* 097864 7F062D34 3C0F0384 */ lui $t7, (0x03840010 >> 16) # lui $t7, 0x384 -/* 097868 7F062D38 AC980000 */ sw $t8, ($a0) -/* 09786C 7F062D3C AC880004 */ sw $t0, 4($a0) -/* 097870 7F062D40 35EF0010 */ ori $t7, (0x03840010 & 0xFFFF) # ori $t7, $t7, 0x10 -/* 097874 7F062D44 02008825 */ move $s1, $s0 -/* 097878 7F062D48 AE2F0000 */ sw $t7, ($s1) -/* 09787C 7F062D4C 0FC1E11D */ jal sub_GAME_7F078474 -/* 097880 7F062D50 26100008 */ addiu $s0, $s0, 8 -/* 097884 7F062D54 3C090382 */ lui $t1, (0x03820010 >> 16) # lui $t1, 0x382 -/* 097888 7F062D58 35290010 */ ori $t1, (0x03820010 & 0xFFFF) # ori $t1, $t1, 0x10 -/* 09788C 7F062D5C AE220004 */ sw $v0, 4($s1) -/* 097890 7F062D60 02009025 */ move $s2, $s0 -/* 097894 7F062D64 AE490000 */ sw $t1, ($s2) -/* 097898 7F062D68 0FC1E11D */ jal sub_GAME_7F078474 -/* 09789C 7F062D6C 26100008 */ addiu $s0, $s0, 8 -/* 0978A0 7F062D70 244A0010 */ addiu $t2, $v0, 0x10 -/* 0978A4 7F062D74 AE4A0004 */ sw $t2, 4($s2) -/* 0978A8 7F062D78 3C0BBC00 */ lui $t3, (0xBC00000E >> 16) # lui $t3, 0xbc00 -.L7F062D7C: -/* 0978AC 7F062D7C 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0978B0 7F062D80 44817000 */ mtc1 $at, $f14 -/* 0978B4 7F062D84 356B000E */ ori $t3, (0xBC00000E & 0xFFFF) # ori $t3, $t3, 0xe -/* 0978B8 7F062D88 02008825 */ move $s1, $s0 -/* 0978BC 7F062D8C 44806000 */ mtc1 $zero, $f12 -/* 0978C0 7F062D90 AE2B0000 */ sw $t3, ($s1) -/* 0978C4 7F062D94 0FC1665F */ jal matrix_4x4_calc_depth_scale -/* 0978C8 7F062D98 26100008 */ addiu $s0, $s0, 8 -/* 0978CC 7F062D9C AE220004 */ sw $v0, 4($s1) -/* 0978D0 7F062DA0 8E630300 */ lw $v1, 0x300($s3) -/* 0978D4 7F062DA4 846C000C */ lh $t4, 0xc($v1) -/* 0978D8 7F062DA8 29810011 */ slti $at, $t4, 0x11 -/* 0978DC 7F062DAC 5420002D */ bnezl $at, .L7F062E64 -/* 0978E0 7F062DB0 8FC20000 */ lw $v0, ($fp) -/* 0978E4 7F062DB4 8C620008 */ lw $v0, 8($v1) -/* 0978E8 7F062DB8 267102F8 */ addiu $s1, $s3, 0x2f8 -/* 0978EC 7F062DBC 02202025 */ move $a0, $s1 -/* 0978F0 7F062DC0 8C4D0040 */ lw $t5, 0x40($v0) -/* 0978F4 7F062DC4 51A00027 */ beql $t5, $zero, .L7F062E64 -/* 0978F8 7F062DC8 8FC20000 */ lw $v0, ($fp) -/* 0978FC 7F062DCC 0FC1B1E7 */ jal modelGetNodeRwData -/* 097900 7F062DD0 8C450044 */ lw $a1, 0x44($v0) -/* 097904 7F062DD4 10400003 */ beqz $v0, .L7F062DE4 -/* 097908 7F062DD8 24010019 */ li $at, 25 -/* 09790C 7F062DDC 240E0001 */ li $t6, 1 -/* 097910 7F062DE0 AC4E0000 */ sw $t6, ($v0) -.L7F062DE4: -/* 097914 7F062DE4 16810013 */ bne $s4, $at, .L7F062E34 -/* 097918 7F062DE8 02202025 */ move $a0, $s1 -/* 09791C 7F062DEC 3C048007 */ lui $a0, %hi(g_UnknownAnimController) -/* 097920 7F062DF0 3C058009 */ lui $a1, %hi(crosshairimage) -/* 097924 7F062DF4 8CA5D114 */ lw $a1, %lo(crosshairimage)($a1) -/* 097928 7F062DF8 0FC127D0 */ jal save_img_index_to_obj_ani_slot -/* 09792C 7F062DFC 24845C10 */ addiu $a0, %lo(g_UnknownAnimController) # addiu $a0, $a0, 0x5c10 -/* 097930 7F062E00 8E790300 */ lw $t9, 0x300($s3) -/* 097934 7F062E04 3C068007 */ lui $a2, %hi(g_UnknownAnimController) -/* 097938 7F062E08 24080004 */ li $t0, 4 -/* 09793C 7F062E0C 8F380008 */ lw $t8, 8($t9) -/* 097940 7F062E10 24C65C10 */ addiu $a2, %lo(g_UnknownAnimController) # addiu $a2, $a2, 0x5c10 -/* 097944 7F062E14 02202025 */ move $a0, $s1 -/* 097948 7F062E18 8F050040 */ lw $a1, 0x40($t8) -/* 09794C 7F062E1C AFA80014 */ sw $t0, 0x14($sp) -/* 097950 7F062E20 AFA00010 */ sw $zero, 0x10($sp) -/* 097954 7F062E24 0FC127D2 */ jal process_monitor_animation_microcode -/* 097958 7F062E28 02003825 */ move $a3, $s0 -/* 09795C 7F062E2C 1000000C */ b .L7F062E60 -/* 097960 7F062E30 00408025 */ move $s0, $v0 -.L7F062E34: -/* 097964 7F062E34 8E6F0300 */ lw $t7, 0x300($s3) -/* 097968 7F062E38 3C068007 */ lui $a2, %hi(g_TaserAnimController) -/* 09796C 7F062E3C 240A0001 */ li $t2, 1 -/* 097970 7F062E40 8DE90008 */ lw $t1, 8($t7) -/* 097974 7F062E44 24C65C88 */ addiu $a2, %lo(g_TaserAnimController) # addiu $a2, $a2, 0x5c88 -/* 097978 7F062E48 02003825 */ move $a3, $s0 -/* 09797C 7F062E4C 8D250040 */ lw $a1, 0x40($t1) -/* 097980 7F062E50 AFAA0014 */ sw $t2, 0x14($sp) -/* 097984 7F062E54 0FC127D2 */ jal process_monitor_animation_microcode -/* 097988 7F062E58 AFA00010 */ sw $zero, 0x10($sp) -/* 09798C 7F062E5C 00408025 */ move $s0, $v0 -.L7F062E60: -/* 097990 7F062E60 8FC20000 */ lw $v0, ($fp) -.L7F062E64: -/* 097994 7F062E64 240B0004 */ li $t3, 4 -/* 097998 7F062E68 AFB00098 */ sw $s0, 0x98($sp) -/* 09799C 7F062E6C AFAB00BC */ sw $t3, 0xbc($sp) -/* 0979A0 7F062E70 904D0FDC */ lbu $t5, 0xfdc($v0) -/* 0979A4 7F062E74 90580FDD */ lbu $t8, 0xfdd($v0) -/* 0979A8 7F062E78 904C0FDF */ lbu $t4, 0xfdf($v0) -/* 0979AC 7F062E7C 90490FDE */ lbu $t1, 0xfde($v0) -/* 0979B0 7F062E80 000D7600 */ sll $t6, $t5, 0x18 -/* 0979B4 7F062E84 00184400 */ sll $t0, $t8, 0x10 -/* 0979B8 7F062E88 018EC825 */ or $t9, $t4, $t6 -/* 0979BC 7F062E8C 03287825 */ or $t7, $t9, $t0 -/* 0979C0 7F062E90 00095200 */ sll $t2, $t1, 8 -/* 0979C4 7F062E94 01EA5825 */ or $t3, $t7, $t2 -/* 0979C8 7F062E98 AFAB00C0 */ sw $t3, 0xc0($sp) -/* 0979CC 7F062E9C AFA00090 */ sw $zero, 0x90($sp) -/* 0979D0 7F062EA0 0FC16319 */ jal matrix_4x4_7F058C64 -/* 0979D4 7F062EA4 267102F8 */ addiu $s1, $s3, 0x2f8 -/* 0979D8 7F062EA8 24010019 */ li $at, 25 -/* 0979DC 7F062EAC 56810011 */ bnel $s4, $at, .L7F062EF4 -/* 0979E0 7F062EB0 02802025 */ move $a0, $s4 -/* 0979E4 7F062EB4 8E620220 */ lw $v0, 0x220($s3) -/* 0979E8 7F062EB8 5040000E */ beql $v0, $zero, .L7F062EF4 -/* 0979EC 7F062EBC 02802025 */ move $a0, $s4 -/* 0979F0 7F062EC0 8C500014 */ lw $s0, 0x14($v0) -/* 0979F4 7F062EC4 02E02025 */ move $a0, $s7 -/* 0979F8 7F062EC8 0FC1D1A1 */ jal subdraw -/* 0979FC 7F062ECC 02002825 */ move $a1, $s0 -/* 097A00 7F062ED0 8E0D0008 */ lw $t5, 8($s0) -/* 097A04 7F062ED4 8E04000C */ lw $a0, 0xc($s0) -/* 097A08 7F062ED8 0FC22F52 */ jal bondviewTransformManyPosToViewMatrix -/* 097A0C 7F062EDC 85A5000E */ lh $a1, 0xe($t5) -/* 097A10 7F062EE0 8E6C0224 */ lw $t4, 0x224($s3) -/* 097A14 7F062EE4 51800003 */ beql $t4, $zero, .L7F062EF4 -/* 097A18 7F062EE8 02802025 */ move $a0, $s4 -/* 097A1C 7F062EEC AE600220 */ sw $zero, 0x220($s3) -/* 097A20 7F062EF0 02802025 */ move $a0, $s4 -.L7F062EF4: -/* 097A24 7F062EF4 0FC1782D */ jal bondwalkItemCheckBitflags -/* 097A28 7F062EF8 24050400 */ li $a1, 1024 -/* 097A2C 7F062EFC 1040000E */ beqz $v0, .L7F062F38 -/* 097A30 7F062F00 02E02025 */ move $a0, $s7 -/* 097A34 7F062F04 8FAE0098 */ lw $t6, 0x98($sp) -/* 097A38 7F062F08 3C19B600 */ lui $t9, 0xb600 -/* 097A3C 7F062F0C 24083000 */ li $t0, 12288 -/* 097A40 7F062F10 25D80008 */ addiu $t8, $t6, 8 -/* 097A44 7F062F14 AFB80098 */ sw $t8, 0x98($sp) -/* 097A48 7F062F18 ADC80004 */ sw $t0, 4($t6) -/* 097A4C 7F062F1C 16A00004 */ bnez $s5, .L7F062F30 -/* 097A50 7F062F20 ADD90000 */ sw $t9, ($t6) -/* 097A54 7F062F24 24090003 */ li $t1, 3 -/* 097A58 7F062F28 10000003 */ b .L7F062F38 -/* 097A5C 7F062F2C AFA900C8 */ sw $t1, 0xc8($sp) -.L7F062F30: -/* 097A60 7F062F30 240F0002 */ li $t7, 2 -/* 097A64 7F062F34 AFAF00C8 */ sw $t7, 0xc8($sp) -.L7F062F38: -/* 097A68 7F062F38 0FC1D1A1 */ jal subdraw -/* 097A6C 7F062F3C 02202825 */ move $a1, $s1 -/* 097A70 7F062F40 8FB00098 */ lw $s0, 0x98($sp) -/* 097A74 7F062F44 02802025 */ move $a0, $s4 -/* 097A78 7F062F48 0FC1782D */ jal bondwalkItemCheckBitflags -/* 097A7C 7F062F4C 24050400 */ li $a1, 1024 -/* 097A80 7F062F50 10400006 */ beqz $v0, .L7F062F6C -/* 097A84 7F062F54 3C0AB600 */ lui $t2, 0xb600 -/* 097A88 7F062F58 02001025 */ move $v0, $s0 -/* 097A8C 7F062F5C 240B3000 */ li $t3, 12288 -/* 097A90 7F062F60 AC4B0004 */ sw $t3, 4($v0) -/* 097A94 7F062F64 AC4A0000 */ sw $t2, ($v0) -/* 097A98 7F062F68 26100008 */ addiu $s0, $s0, 8 -.L7F062F6C: -/* 097A9C 7F062F6C 8E6D0300 */ lw $t5, 0x300($s3) -/* 097AA0 7F062F70 8E640304 */ lw $a0, 0x304($s3) -/* 097AA4 7F062F74 0FC22F52 */ jal bondviewTransformManyPosToViewMatrix -/* 097AA8 7F062F78 85A5000E */ lh $a1, 0xe($t5) -/* 097AAC 7F062F7C 0FC16322 */ jal matrix_4x4_7F058C88 -/* 097AB0 7F062F80 00000000 */ nop -/* 097AB4 7F062F84 3C0CBC00 */ lui $t4, (0xBC00000E >> 16) # lui $t4, 0xbc00 -/* 097AB8 7F062F88 358C000E */ ori $t4, (0xBC00000E & 0xFFFF) # ori $t4, $t4, 0xe -/* 097ABC 7F062F8C 02008825 */ move $s1, $s0 -/* 097AC0 7F062F90 AE2C0000 */ sw $t4, ($s1) -/* 097AC4 7F062F94 0C000F13 */ jal viGetPerspNorm -/* 097AC8 7F062F98 26100008 */ addiu $s0, $s0, 8 -/* 097ACC 7F062F9C 24010017 */ li $at, 23 -/* 097AD0 7F062FA0 16810006 */ bne $s4, $at, .L7F062FBC -/* 097AD4 7F062FA4 AE220004 */ sw $v0, 4($s1) -/* 097AD8 7F062FA8 02002025 */ move $a0, $s0 -/* 097ADC 7F062FAC 266501E4 */ addiu $a1, $s3, 0x1e4 -/* 097AE0 7F062FB0 0FC18786 */ jal sub_GAME_7F061E18 -/* 097AE4 7F062FB4 00003025 */ move $a2, $zero -/* 097AE8 7F062FB8 00408025 */ move $s0, $v0 -.L7F062FBC: -/* 097AEC 7F062FBC 26B50001 */ addiu $s5, $s5, 1 -.L7F062FC0: -/* 097AF0 7F062FC0 24010002 */ li $at, 2 -/* 097AF4 7F062FC4 16A1FF28 */ bne $s5, $at, .L7F062C68 -/* 097AF8 7F062FC8 26D603A8 */ addiu $s6, $s6, 0x3a8 -/* 097AFC 7F062FCC 8FAE00D0 */ lw $t6, 0xd0($sp) -/* 097B00 7F062FD0 ADD00000 */ sw $s0, ($t6) -/* 097B04 7F062FD4 8FBF0044 */ lw $ra, 0x44($sp) -/* 097B08 7F062FD8 8FBE0040 */ lw $fp, 0x40($sp) -/* 097B0C 7F062FDC 8FB7003C */ lw $s7, 0x3c($sp) -/* 097B10 7F062FE0 8FB60038 */ lw $s6, 0x38($sp) -/* 097B14 7F062FE4 8FB50034 */ lw $s5, 0x34($sp) -/* 097B18 7F062FE8 8FB40030 */ lw $s4, 0x30($sp) -/* 097B1C 7F062FEC 8FB3002C */ lw $s3, 0x2c($sp) -/* 097B20 7F062FF0 8FB20028 */ lw $s2, 0x28($sp) -/* 097B24 7F062FF4 8FB10024 */ lw $s1, 0x24($sp) -/* 097B28 7F062FF8 8FB00020 */ lw $s0, 0x20($sp) -/* 097B2C 7F062FFC 03E00008 */ jr $ra -/* 097B30 7F063000 27BD00D0 */ addiu $sp, $sp, 0xd0 -) -#endif - -#if defined(VERSION_EU) -GLOBAL_ASM( -.text -glabel sub_GAME_7F062BE4 -/* 095A98 7F0630A8 27BDFF30 */ addiu $sp, $sp, -0xd0 -/* 095A9C 7F0630AC AFB7003C */ sw $s7, 0x3c($sp) -/* 095AA0 7F0630B0 3C0F8003 */ lui $t7, %hi(D_80035CC0) # $t7, 0x8003 -/* 095AA4 7F0630B4 27B7008C */ addiu $s7, $sp, 0x8c -/* 095AA8 7F0630B8 AFBF0044 */ sw $ra, 0x44($sp) -/* 095AAC 7F0630BC AFBE0040 */ sw $fp, 0x40($sp) -/* 095AB0 7F0630C0 AFB60038 */ sw $s6, 0x38($sp) -/* 095AB4 7F0630C4 AFB50034 */ sw $s5, 0x34($sp) -/* 095AB8 7F0630C8 AFB40030 */ sw $s4, 0x30($sp) -/* 095ABC 7F0630CC AFB3002C */ sw $s3, 0x2c($sp) -/* 095AC0 7F0630D0 AFB20028 */ sw $s2, 0x28($sp) -/* 095AC4 7F0630D4 AFB10024 */ sw $s1, 0x24($sp) -/* 095AC8 7F0630D8 AFB00020 */ sw $s0, 0x20($sp) -/* 095ACC 7F0630DC AFA400D0 */ sw $a0, 0xd0($sp) -/* 095AD0 7F0630E0 25EF1210 */ addiu $t7, %lo(D_80035CC0) # addiu $t7, $t7, 0x1210 -/* 095AD4 7F0630E4 8C900000 */ lw $s0, ($a0) -/* 095AD8 7F0630E8 25E8003C */ addiu $t0, $t7, 0x3c -/* 095ADC 7F0630EC 02E04825 */ move $t1, $s7 -.L7F0630F0: -/* 095AE0 7F0630F0 8DE10000 */ lw $at, ($t7) -/* 095AE4 7F0630F4 25EF000C */ addiu $t7, $t7, 0xc -/* 095AE8 7F0630F8 2529000C */ addiu $t1, $t1, 0xc -/* 095AEC 7F0630FC AD21FFF4 */ sw $at, -0xc($t1) -/* 095AF0 7F063100 8DE1FFF8 */ lw $at, -8($t7) -/* 095AF4 7F063104 AD21FFF8 */ sw $at, -8($t1) -/* 095AF8 7F063108 8DE1FFFC */ lw $at, -4($t7) -/* 095AFC 7F06310C 15E8FFF8 */ bne $t7, $t0, .L7F0630F0 -/* 095B00 7F063110 AD21FFFC */ sw $at, -4($t1) -/* 095B04 7F063114 8DE10000 */ lw $at, ($t7) -/* 095B08 7F063118 3C1E8007 */ lui $fp, %hi(g_CurrentPlayer) # $fp, 0x8007 -/* 095B0C 7F06311C 27DE8BC0 */ addiu $fp, %lo(g_CurrentPlayer) # addiu $fp, $fp, -0x7440 -/* 095B10 7F063120 0000A825 */ move $s5, $zero -/* 095B14 7F063124 0000B025 */ move $s6, $zero -/* 095B18 7F063128 AD210000 */ sw $at, ($t1) -.L7F06312C: -/* 095B1C 7F06312C 8FCA0000 */ lw $t2, ($fp) -/* 095B20 7F063130 02A02025 */ move $a0, $s5 -/* 095B24 7F063134 01569821 */ addu $s3, $t2, $s6 -/* 095B28 7F063138 0FC177BF */ jal get_item_in_hand_or_watch_menu -/* 095B2C 7F06313C 26730868 */ addiu $s3, $s3, 0x868 -/* 095B30 7F063140 826B000F */ lb $t3, 0xf($s3) -/* 095B34 7F063144 0040A025 */ move $s4, $v0 -/* 095B38 7F063148 24010017 */ li $at, 23 -/* 095B3C 7F06314C 516000CD */ beql $t3, $zero, .L7F063484 -/* 095B40 7F063150 26B50001 */ addiu $s5, $s5, 1 -/* 095B44 7F063154 10410005 */ beq $v0, $at, .L7F06316C -/* 095B48 7F063158 02002025 */ move $a0, $s0 -/* 095B4C 7F06315C 266501E4 */ addiu $a1, $s3, 0x1e4 -/* 095B50 7F063160 0FC188B7 */ jal sub_GAME_7F061E18 -/* 095B54 7F063164 00003025 */ move $a2, $zero -/* 095B58 7F063168 00408025 */ move $s0, $v0 -.L7F06316C: -/* 095B5C 7F06316C 24010013 */ li $at, 19 -/* 095B60 7F063170 1281000C */ beq $s4, $at, .L7F0631A4 -/* 095B64 7F063174 02001025 */ move $v0, $s0 -/* 095B68 7F063178 24010012 */ li $at, 18 -/* 095B6C 7F06317C 12810009 */ beq $s4, $at, .L7F0631A4 -/* 095B70 7F063180 24010002 */ li $at, 2 -/* 095B74 7F063184 12810007 */ beq $s4, $at, .L7F0631A4 -/* 095B78 7F063188 24010003 */ li $at, 3 -/* 095B7C 7F06318C 12810005 */ beq $s4, $at, .L7F0631A4 -/* 095B80 7F063190 24010014 */ li $at, 20 -/* 095B84 7F063194 12810003 */ beq $s4, $at, .L7F0631A4 -/* 095B88 7F063198 24010015 */ li $at, 21 -/* 095B8C 7F06319C 56810028 */ bnel $s4, $at, .Leu7F063240 -/* 095B90 7F0631A0 3C0BBC00 */ lui $t3, 0xbc00 -.L7F0631A4: -/* 095B94 7F0631A4 26100008 */ addiu $s0, $s0, 8 -/* 095B98 7F0631A8 3C0CBC00 */ lui $t4, (0xBC000002 >> 16) # lui $t4, 0xbc00 -/* 095B9C 7F0631AC 3C0D8000 */ lui $t5, (0x80000040 >> 16) # lui $t5, 0x8000 -/* 095BA0 7F0631B0 35AD0040 */ ori $t5, (0x80000040 & 0xFFFF) # ori $t5, $t5, 0x40 -/* 095BA4 7F0631B4 358C0002 */ ori $t4, (0xBC000002 & 0xFFFF) # ori $t4, $t4, 2 -/* 095BA8 7F0631B8 02001825 */ move $v1, $s0 -/* 095BAC 7F0631BC 26100008 */ addiu $s0, $s0, 8 -/* 095BB0 7F0631C0 AC4C0000 */ sw $t4, ($v0) -/* 095BB4 7F0631C4 AC4D0004 */ sw $t5, 4($v0) -/* 095BB8 7F0631C8 3C0E0386 */ lui $t6, (0x03860010 >> 16) # lui $t6, 0x386 -/* 095BBC 7F0631CC 3C198003 */ lui $t9, %hi(g_WeaponEnvmapLight + 0x8) # $t9, 0x8003 -/* 095BC0 7F0631D0 2739D998 */ addiu $t9, %lo(g_WeaponEnvmapLight + 0x8) # addiu $t9, $t9, -0x2668 -/* 095BC4 7F0631D4 35CE0010 */ ori $t6, (0x03860010 & 0xFFFF) # ori $t6, $t6, 0x10 -/* 095BC8 7F0631D8 02002025 */ move $a0, $s0 -/* 095BCC 7F0631DC AC6E0000 */ sw $t6, ($v1) -/* 095BD0 7F0631E0 AC790004 */ sw $t9, 4($v1) -/* 095BD4 7F0631E4 3C180388 */ lui $t8, (0x03880010 >> 16) # lui $t8, 0x388 -/* 095BD8 7F0631E8 3C088003 */ lui $t0, %hi(g_WeaponEnvmapLight) # $t0, 0x8003 -/* 095BDC 7F0631EC 2508D990 */ addiu $t0, %lo(g_WeaponEnvmapLight) # addiu $t0, $t0, -0x2670 -/* 095BE0 7F0631F0 37180010 */ ori $t8, (0x03880010 & 0xFFFF) # ori $t8, $t8, 0x10 -/* 095BE4 7F0631F4 26100008 */ addiu $s0, $s0, 8 -/* 095BE8 7F0631F8 3C0F0384 */ lui $t7, (0x03840010 >> 16) # lui $t7, 0x384 -/* 095BEC 7F0631FC AC980000 */ sw $t8, ($a0) -/* 095BF0 7F063200 AC880004 */ sw $t0, 4($a0) -/* 095BF4 7F063204 35EF0010 */ ori $t7, (0x03840010 & 0xFFFF) # ori $t7, $t7, 0x10 -/* 095BF8 7F063208 02008825 */ move $s1, $s0 -/* 095BFC 7F06320C AE2F0000 */ sw $t7, ($s1) -/* 095C00 7F063210 0FC1E13D */ jal sub_GAME_7F078474 -/* 095C04 7F063214 26100008 */ addiu $s0, $s0, 8 -/* 095C08 7F063218 3C090382 */ lui $t1, (0x03820010 >> 16) # lui $t1, 0x382 -/* 095C0C 7F06321C 35290010 */ ori $t1, (0x03820010 & 0xFFFF) # ori $t1, $t1, 0x10 -/* 095C10 7F063220 AE220004 */ sw $v0, 4($s1) -/* 095C14 7F063224 02009025 */ move $s2, $s0 -/* 095C18 7F063228 AE490000 */ sw $t1, ($s2) -/* 095C1C 7F06322C 0FC1E13D */ jal sub_GAME_7F078474 -/* 095C20 7F063230 26100008 */ addiu $s0, $s0, 8 -/* 095C24 7F063234 244A0010 */ addiu $t2, $v0, 0x10 -/* 095C28 7F063238 AE4A0004 */ sw $t2, 4($s2) -/* 095C2C 7F06323C 3C0BBC00 */ lui $t3, (0xBC00000E >> 16) # lui $t3, 0xbc00 -.Leu7F063240: -/* 095C30 7F063240 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 095C34 7F063244 44817000 */ mtc1 $at, $f14 -/* 095C38 7F063248 356B000E */ ori $t3, (0xBC00000E & 0xFFFF) # ori $t3, $t3, 0xe -/* 095C3C 7F06324C 02008825 */ move $s1, $s0 -/* 095C40 7F063250 44806000 */ mtc1 $zero, $f12 -/* 095C44 7F063254 AE2B0000 */ sw $t3, ($s1) -/* 095C48 7F063258 0FC16789 */ jal matrix_4x4_calc_depth_scale -/* 095C4C 7F06325C 26100008 */ addiu $s0, $s0, 8 -/* 095C50 7F063260 AE220004 */ sw $v0, 4($s1) -/* 095C54 7F063264 8E630300 */ lw $v1, 0x300($s3) -/* 095C58 7F063268 846C000C */ lh $t4, 0xc($v1) -/* 095C5C 7F06326C 29810011 */ slti $at, $t4, 0x11 -/* 095C60 7F063270 5420002D */ bnezl $at, .L7F063328 -/* 095C64 7F063274 8FC20000 */ lw $v0, ($fp) -/* 095C68 7F063278 8C620008 */ lw $v0, 8($v1) -/* 095C6C 7F06327C 267102F8 */ addiu $s1, $s3, 0x2f8 -/* 095C70 7F063280 02202025 */ move $a0, $s1 -/* 095C74 7F063284 8C4D0040 */ lw $t5, 0x40($v0) -/* 095C78 7F063288 51A00027 */ beql $t5, $zero, .L7F063328 -/* 095C7C 7F06328C 8FC20000 */ lw $v0, ($fp) -/* 095C80 7F063290 0FC1B3A3 */ jal modelGetNodeRwData -/* 095C84 7F063294 8C450044 */ lw $a1, 0x44($v0) -/* 095C88 7F063298 10400003 */ beqz $v0, .L7F0632A8 -/* 095C8C 7F06329C 24010019 */ li $at, 25 -/* 095C90 7F0632A0 240E0001 */ li $t6, 1 -/* 095C94 7F0632A4 AC4E0000 */ sw $t6, ($v0) -.L7F0632A8: -/* 095C98 7F0632A8 16810013 */ bne $s4, $at, .L7F0632F8 -/* 095C9C 7F0632AC 02202025 */ move $a0, $s1 -/* 095CA0 7F0632B0 3C048006 */ lui $a0, %hi(g_UnknownAnimController) # $a0, 0x8006 -/* 095CA4 7F0632B4 3C058007 */ lui $a1, %hi(crosshairimage) # $a1, 0x8007 -/* 095CA8 7F0632B8 8CA544F4 */ lw $a1, %lo(crosshairimage)($a1) -/* 095CAC 7F0632BC 0FC12847 */ jal save_img_index_to_obj_ani_slot -/* 095CB0 7F0632C0 24844B50 */ addiu $a0, %lo(g_UnknownAnimController) # addiu $a0, $a0, 0x4b50 -/* 095CB4 7F0632C4 8E790300 */ lw $t9, 0x300($s3) -/* 095CB8 7F0632C8 3C068006 */ lui $a2, %hi(g_UnknownAnimController) # $a2, 0x8006 -/* 095CBC 7F0632CC 24080004 */ li $t0, 4 -/* 095CC0 7F0632D0 8F380008 */ lw $t8, 8($t9) -/* 095CC4 7F0632D4 24C64B50 */ addiu $a2, %lo(g_UnknownAnimController) # addiu $a2, $a2, 0x4b50 -/* 095CC8 7F0632D8 02202025 */ move $a0, $s1 -/* 095CCC 7F0632DC 8F050040 */ lw $a1, 0x40($t8) -/* 095CD0 7F0632E0 AFA80014 */ sw $t0, 0x14($sp) -/* 095CD4 7F0632E4 AFA00010 */ sw $zero, 0x10($sp) -/* 095CD8 7F0632E8 0FC12849 */ jal process_monitor_animation_microcode -/* 095CDC 7F0632EC 02003825 */ move $a3, $s0 -/* 095CE0 7F0632F0 1000000C */ b .L7F063324 -/* 095CE4 7F0632F4 00408025 */ move $s0, $v0 -.L7F0632F8: -/* 095CE8 7F0632F8 8E6F0300 */ lw $t7, 0x300($s3) -/* 095CEC 7F0632FC 3C068006 */ lui $a2, %hi(g_TaserAnimController) # $a2, 0x8006 -/* 095CF0 7F063300 240A0001 */ li $t2, 1 -/* 095CF4 7F063304 8DE90008 */ lw $t1, 8($t7) -/* 095CF8 7F063308 24C64BC8 */ addiu $a2, %lo(g_TaserAnimController) # addiu $a2, $a2, 0x4bc8 -/* 095CFC 7F06330C 02003825 */ move $a3, $s0 -/* 095D00 7F063310 8D250040 */ lw $a1, 0x40($t1) -/* 095D04 7F063314 AFAA0014 */ sw $t2, 0x14($sp) -/* 095D08 7F063318 0FC12849 */ jal process_monitor_animation_microcode -/* 095D0C 7F06331C AFA00010 */ sw $zero, 0x10($sp) -/* 095D10 7F063320 00408025 */ move $s0, $v0 -.L7F063324: -/* 095D14 7F063324 8FC20000 */ lw $v0, ($fp) -.L7F063328: -/* 095D18 7F063328 240B0004 */ li $t3, 4 -/* 095D1C 7F06332C AFB00098 */ sw $s0, 0x98($sp) -/* 095D20 7F063330 AFAB00BC */ sw $t3, 0xbc($sp) -/* 095D24 7F063334 904D0FD4 */ lbu $t5, 0xfd4($v0) -/* 095D28 7F063338 90580FD5 */ lbu $t8, 0xfd5($v0) -/* 095D2C 7F06333C 904C0FD7 */ lbu $t4, 0xfd7($v0) -/* 095D30 7F063340 90490FD6 */ lbu $t1, 0xfd6($v0) -/* 095D34 7F063344 000D7600 */ sll $t6, $t5, 0x18 -/* 095D38 7F063348 00184400 */ sll $t0, $t8, 0x10 -/* 095D3C 7F06334C 018EC825 */ or $t9, $t4, $t6 -/* 095D40 7F063350 03287825 */ or $t7, $t9, $t0 -/* 095D44 7F063354 00095200 */ sll $t2, $t1, 8 -/* 095D48 7F063358 01EA5825 */ or $t3, $t7, $t2 -/* 095D4C 7F06335C AFAB00C0 */ sw $t3, 0xc0($sp) -/* 095D50 7F063360 AFA00090 */ sw $zero, 0x90($sp) -/* 095D54 7F063364 0FC16443 */ jal matrix_4x4_7F058C64 -/* 095D58 7F063368 267102F8 */ addiu $s1, $s3, 0x2f8 -/* 095D5C 7F06336C 24010019 */ li $at, 25 -/* 095D60 7F063370 56810011 */ bnel $s4, $at, .L7F0633B8 -/* 095D64 7F063374 02802025 */ move $a0, $s4 -/* 095D68 7F063378 8E620220 */ lw $v0, 0x220($s3) -/* 095D6C 7F06337C 5040000E */ beql $v0, $zero, .L7F0633B8 -/* 095D70 7F063380 02802025 */ move $a0, $s4 -/* 095D74 7F063384 8C500014 */ lw $s0, 0x14($v0) -/* 095D78 7F063388 02E02025 */ move $a0, $s7 -/* 095D7C 7F06338C 0FC1D1D6 */ jal subdraw -/* 095D80 7F063390 02002825 */ move $a1, $s0 -/* 095D84 7F063394 8E0D0008 */ lw $t5, 8($s0) -/* 095D88 7F063398 8E04000C */ lw $a0, 0xc($s0) -/* 095D8C 7F06339C 0FC2300F */ jal bondviewTransformManyPosToViewMatrix -/* 095D90 7F0633A0 85A5000E */ lh $a1, 0xe($t5) -/* 095D94 7F0633A4 8E6C0224 */ lw $t4, 0x224($s3) -/* 095D98 7F0633A8 51800003 */ beql $t4, $zero, .L7F0633B8 -/* 095D9C 7F0633AC 02802025 */ move $a0, $s4 -/* 095DA0 7F0633B0 AE600220 */ sw $zero, 0x220($s3) -/* 095DA4 7F0633B4 02802025 */ move $a0, $s4 -.L7F0633B8: -/* 095DA8 7F0633B8 0FC1795B */ jal bondwalkItemCheckBitflags -/* 095DAC 7F0633BC 24050400 */ li $a1, 1024 -/* 095DB0 7F0633C0 1040000E */ beqz $v0, .L7F0633FC -/* 095DB4 7F0633C4 02E02025 */ move $a0, $s7 -/* 095DB8 7F0633C8 8FAE0098 */ lw $t6, 0x98($sp) -/* 095DBC 7F0633CC 3C19B600 */ lui $t9, 0xb600 -/* 095DC0 7F0633D0 24083000 */ li $t0, 12288 -/* 095DC4 7F0633D4 25D80008 */ addiu $t8, $t6, 8 -/* 095DC8 7F0633D8 AFB80098 */ sw $t8, 0x98($sp) -/* 095DCC 7F0633DC ADC80004 */ sw $t0, 4($t6) -/* 095DD0 7F0633E0 16A00004 */ bnez $s5, .L7F0633F4 -/* 095DD4 7F0633E4 ADD90000 */ sw $t9, ($t6) -/* 095DD8 7F0633E8 24090003 */ li $t1, 3 -/* 095DDC 7F0633EC 10000003 */ b .L7F0633FC -/* 095DE0 7F0633F0 AFA900C8 */ sw $t1, 0xc8($sp) -.L7F0633F4: -/* 095DE4 7F0633F4 240F0002 */ li $t7, 2 -/* 095DE8 7F0633F8 AFAF00C8 */ sw $t7, 0xc8($sp) -.L7F0633FC: -/* 095DEC 7F0633FC 0FC1D1D6 */ jal subdraw -/* 095DF0 7F063400 02202825 */ move $a1, $s1 -/* 095DF4 7F063404 8FB00098 */ lw $s0, 0x98($sp) -/* 095DF8 7F063408 02802025 */ move $a0, $s4 -/* 095DFC 7F06340C 0FC1795B */ jal bondwalkItemCheckBitflags -/* 095E00 7F063410 24050400 */ li $a1, 1024 -/* 095E04 7F063414 10400006 */ beqz $v0, .L7F063430 -/* 095E08 7F063418 3C0AB600 */ lui $t2, 0xb600 -/* 095E0C 7F06341C 02001025 */ move $v0, $s0 -/* 095E10 7F063420 240B3000 */ li $t3, 12288 -/* 095E14 7F063424 AC4B0004 */ sw $t3, 4($v0) -/* 095E18 7F063428 AC4A0000 */ sw $t2, ($v0) -/* 095E1C 7F06342C 26100008 */ addiu $s0, $s0, 8 -.L7F063430: -/* 095E20 7F063430 8E6D0300 */ lw $t5, 0x300($s3) -/* 095E24 7F063434 8E640304 */ lw $a0, 0x304($s3) -/* 095E28 7F063438 0FC2300F */ jal bondviewTransformManyPosToViewMatrix -/* 095E2C 7F06343C 85A5000E */ lh $a1, 0xe($t5) -/* 095E30 7F063440 0FC1644C */ jal matrix_4x4_7F058C88 -/* 095E34 7F063444 00000000 */ nop -/* 095E38 7F063448 3C0CBC00 */ lui $t4, (0xBC00000E >> 16) # lui $t4, 0xbc00 -/* 095E3C 7F06344C 358C000E */ ori $t4, (0xBC00000E & 0xFFFF) # ori $t4, $t4, 0xe -/* 095E40 7F063450 02008825 */ move $s1, $s0 -/* 095E44 7F063454 AE2C0000 */ sw $t4, ($s1) -/* 095E48 7F063458 0C000DA7 */ jal viGetPerspNorm -/* 095E4C 7F06345C 26100008 */ addiu $s0, $s0, 8 -/* 095E50 7F063460 24010017 */ li $at, 23 -/* 095E54 7F063464 16810006 */ bne $s4, $at, .L7F063480 -/* 095E58 7F063468 AE220004 */ sw $v0, 4($s1) -/* 095E5C 7F06346C 02002025 */ move $a0, $s0 -/* 095E60 7F063470 266501E4 */ addiu $a1, $s3, 0x1e4 -/* 095E64 7F063474 0FC188B7 */ jal sub_GAME_7F061E18 -/* 095E68 7F063478 00003025 */ move $a2, $zero -/* 095E6C 7F06347C 00408025 */ move $s0, $v0 -.L7F063480: -/* 095E70 7F063480 26B50001 */ addiu $s5, $s5, 1 -.L7F063484: -/* 095E74 7F063484 24010002 */ li $at, 2 -/* 095E78 7F063488 16A1FF28 */ bne $s5, $at, .L7F06312C -/* 095E7C 7F06348C 26D603A8 */ addiu $s6, $s6, 0x3a8 -/* 095E80 7F063490 8FAE00D0 */ lw $t6, 0xd0($sp) -/* 095E84 7F063494 ADD00000 */ sw $s0, ($t6) -/* 095E88 7F063498 8FBF0044 */ lw $ra, 0x44($sp) -/* 095E8C 7F06349C 8FBE0040 */ lw $fp, 0x40($sp) -/* 095E90 7F0634A0 8FB7003C */ lw $s7, 0x3c($sp) -/* 095E94 7F0634A4 8FB60038 */ lw $s6, 0x38($sp) -/* 095E98 7F0634A8 8FB50034 */ lw $s5, 0x34($sp) -/* 095E9C 7F0634AC 8FB40030 */ lw $s4, 0x30($sp) -/* 095EA0 7F0634B0 8FB3002C */ lw $s3, 0x2c($sp) -/* 095EA4 7F0634B4 8FB20028 */ lw $s2, 0x28($sp) -/* 095EA8 7F0634B8 8FB10024 */ lw $s1, 0x24($sp) -/* 095EAC 7F0634BC 8FB00020 */ lw $s0, 0x20($sp) -/* 095EB0 7F0634C0 03E00008 */ jr $ra -/* 095EB4 7F0634C4 27BD00D0 */ addiu $sp, $sp, 0xd0 -) -#endif -#endif - - - - - -#ifdef NONMATCHING -void set_enviro_fog_for_items_in_solo_watch_menu(void) { - -} -#else -GLOBAL_ASM( -.text -glabel set_enviro_fog_for_items_in_solo_watch_menu -/* 097B34 7F063004 27BDFE68 */ addiu $sp, $sp, -0x198 -/* 097B38 7F063008 3C0F8003 */ lui $t7, %hi(D_80035D00) -/* 097B3C 7F06300C 25EF5D00 */ addiu $t7, %lo(D_80035D00) # addiu $t7, $t7, 0x5d00 -/* 097B40 7F063010 AFBF0024 */ sw $ra, 0x24($sp) -/* 097B44 7F063014 AFB30020 */ sw $s3, 0x20($sp) -/* 097B48 7F063018 AFB2001C */ sw $s2, 0x1c($sp) -/* 097B4C 7F06301C AFB10018 */ sw $s1, 0x18($sp) -/* 097B50 7F063020 AFB00014 */ sw $s0, 0x14($sp) -/* 097B54 7F063024 AFA40198 */ sw $a0, 0x198($sp) -/* 097B58 7F063028 AFA601A0 */ sw $a2, 0x1a0($sp) -/* 097B5C 7F06302C AFA701A4 */ sw $a3, 0x1a4($sp) -/* 097B60 7F063030 25E8003C */ addiu $t0, $t7, 0x3c -/* 097B64 7F063034 27AE0158 */ addiu $t6, $sp, 0x158 -.L7F063038: -/* 097B68 7F063038 8DE10000 */ lw $at, ($t7) -/* 097B6C 7F06303C 25EF000C */ addiu $t7, $t7, 0xc -/* 097B70 7F063040 25CE000C */ addiu $t6, $t6, 0xc -/* 097B74 7F063044 ADC1FFF4 */ sw $at, -0xc($t6) -/* 097B78 7F063048 8DE1FFF8 */ lw $at, -8($t7) -/* 097B7C 7F06304C ADC1FFF8 */ sw $at, -8($t6) -/* 097B80 7F063050 8DE1FFFC */ lw $at, -4($t7) -/* 097B84 7F063054 15E8FFF8 */ bne $t7, $t0, .L7F063038 -/* 097B88 7F063058 ADC1FFFC */ sw $at, -4($t6) -/* 097B8C 7F06305C 8DE10000 */ lw $at, ($t7) -/* 097B90 7F063060 00002025 */ move $a0, $zero -/* 097B94 7F063064 ADC10000 */ sw $at, ($t6) -/* 097B98 7F063068 2401001E */ li $at, 30 -/* 097B9C 7F06306C 10A10003 */ beq $a1, $at, .L7F06307C -/* 097BA0 7F063070 24010017 */ li $at, 23 -/* 097BA4 7F063074 14A10002 */ bne $a1, $at, .L7F063080 -/* 097BA8 7F063078 00000000 */ nop -.L7F06307C: -/* 097BAC 7F06307C 2405003C */ li $a1, 60 -.L7F063080: -/* 097BB0 7F063080 0FC176A3 */ jal sub_GAME_7F05DA8C -/* 097BB4 7F063084 AFA5019C */ sw $a1, 0x19c($sp) -/* 097BB8 7F063088 0FC173AF */ jal Gun_hand_without_item -/* 097BBC 7F06308C 00002025 */ move $a0, $zero -/* 097BC0 7F063090 10400005 */ beqz $v0, .L7F0630A8 -/* 097BC4 7F063094 00000000 */ nop -/* 097BC8 7F063098 0FC173C0 */ jal get_itemtype_in_hand -/* 097BCC 7F06309C 00002025 */ move $a0, $zero -/* 097BD0 7F0630A0 14400003 */ bnez $v0, .L7F0630B0 -/* 097BD4 7F0630A4 3C128008 */ lui $s2, %hi(g_CurrentPlayer) -.L7F0630A8: -/* 097BD8 7F0630A8 10000104 */ b .L7F0634BC -/* 097BDC 7F0630AC 8FA20198 */ lw $v0, 0x198($sp) -.L7F0630B0: -/* 097BE0 7F0630B0 8E52A0B0 */ lw $s2, %lo(g_CurrentPlayer)($s2) -/* 097BE4 7F0630B4 8FA4019C */ lw $a0, 0x19c($sp) -/* 097BE8 7F0630B8 0FC17412 */ jal get_ptr_weapon_model_header_line -/* 097BEC 7F0630BC 26520810 */ addiu $s2, $s2, 0x810 -/* 097BF0 7F0630C0 104000FD */ beqz $v0, .L7F0634B8 -/* 097BF4 7F0630C4 8FA4019C */ lw $a0, 0x19c($sp) -/* 097BF8 7F0630C8 0FC1782D */ jal bondwalkItemCheckBitflags -/* 097BFC 7F0630CC 24054000 */ li $a1, 16384 -/* 097C00 7F0630D0 544000FA */ bnezl $v0, .L7F0634BC -/* 097C04 7F0630D4 8FA20198 */ lw $v0, 0x198($sp) -/* 097C08 7F0630D8 8644000E */ lh $a0, 0xe($s2) -/* 097C0C 7F0630DC 00044980 */ sll $t1, $a0, 6 -/* 097C10 7F0630E0 0FC2F5C5 */ jal dynAllocate -/* 097C14 7F0630E4 01202025 */ move $a0, $t1 -/* 097C18 7F0630E8 864A000E */ lh $t2, 0xe($s2) -/* 097C1C 7F0630EC 00408025 */ move $s0, $v0 -/* 097C20 7F0630F0 00008825 */ move $s1, $zero -/* 097C24 7F0630F4 19400009 */ blez $t2, .L7F06311C -/* 097C28 7F0630F8 00115980 */ sll $t3, $s1, 6 -.L7F0630FC: -/* 097C2C 7F0630FC 0FC15FF4 */ jal matrix_4x4_set_identity -/* 097C30 7F063100 01702021 */ addu $a0, $t3, $s0 -/* 097C34 7F063104 864C000E */ lh $t4, 0xe($s2) -/* 097C38 7F063108 26310001 */ addiu $s1, $s1, 1 -/* 097C3C 7F06310C 022C082A */ slt $at, $s1, $t4 -/* 097C40 7F063110 5420FFFA */ bnezl $at, .L7F0630FC -/* 097C44 7F063114 00115980 */ sll $t3, $s1, 6 -/* 097C48 7F063118 00008825 */ move $s1, $zero -.L7F06311C: -/* 097C4C 7F06311C AFB00144 */ sw $s0, 0x144($sp) -/* 097C50 7F063120 0FC1D73D */ jal modelCalculateRwDataLen -/* 097C54 7F063124 02402025 */ move $a0, $s2 -/* 097C58 7F063128 27B30138 */ addiu $s3, $sp, 0x138 -/* 097C5C 7F06312C 02602025 */ move $a0, $s3 -/* 097C60 7F063130 02402825 */ move $a1, $s2 -/* 097C64 7F063134 0FC1D7DA */ jal modelInit -/* 097C68 7F063138 27A600B8 */ addiu $a2, $sp, 0xb8 -/* 097C6C 7F06313C 02602025 */ move $a0, $s3 -/* 097C70 7F063140 0FC17A5E */ jal sub_GAME_7F05E978 -/* 097C74 7F063144 00002825 */ move $a1, $zero -/* 097C78 7F063148 02602025 */ move $a0, $s3 -/* 097C7C 7F06314C 0FC17AA5 */ jal sub_GAME_7F05EA94 -/* 097C80 7F063150 24050001 */ li $a1, 1 -/* 097C84 7F063154 8E4D0008 */ lw $t5, 8($s2) -/* 097C88 7F063158 8DA50004 */ lw $a1, 4($t5) -/* 097C8C 7F06315C 50A00007 */ beql $a1, $zero, .L7F06317C -/* 097C90 7F063160 8FA401A0 */ lw $a0, 0x1a0($sp) -/* 097C94 7F063164 0FC1B1E7 */ jal modelGetNodeRwData -/* 097C98 7F063168 02602025 */ move $a0, $s3 -/* 097C9C 7F06316C 50400003 */ beql $v0, $zero, .L7F06317C -/* 097CA0 7F063170 8FA401A0 */ lw $a0, 0x1a0($sp) -/* 097CA4 7F063174 AC400000 */ sw $zero, ($v0) -/* 097CA8 7F063178 8FA401A0 */ lw $a0, 0x1a0($sp) -.L7F06317C: -/* 097CAC 7F06317C 0FC16008 */ jal matrix_4x4_copy -/* 097CB0 7F063180 02002825 */ move $a1, $s0 -/* 097CB4 7F063184 8E580004 */ lw $t8, 4($s2) -/* 097CB8 7F063188 3C198004 */ lui $t9, %hi(skeleton_gun_revolver) -/* 097CBC 7F06318C 2739C76C */ addiu $t9, %lo(skeleton_gun_revolver) # addiu $t9, $t9, -0x3894 -/* 097CC0 7F063190 57380018 */ bnel $t9, $t8, .L7F0631F4 -/* 097CC4 7F063194 8E420008 */ lw $v0, 8($s2) -/* 097CC8 7F063198 8E420008 */ lw $v0, 8($s2) -/* 097CCC 7F06319C 27A50074 */ addiu $a1, $sp, 0x74 -/* 097CD0 7F0631A0 8C430010 */ lw $v1, 0x10($v0) -/* 097CD4 7F0631A4 50600009 */ beql $v1, $zero, .L7F0631CC -/* 097CD8 7F0631A8 8C430014 */ lw $v1, 0x14($v0) -/* 097CDC 7F0631AC 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 097CE0 7F0631B0 8C640004 */ lw $a0, 4($v1) -/* 097CE4 7F0631B4 8FA401A0 */ lw $a0, 0x1a0($sp) -/* 097CE8 7F0631B8 27A50074 */ addiu $a1, $sp, 0x74 -/* 097CEC 7F0631BC 0FC16032 */ jal matrix_4x4_multiply -/* 097CF0 7F0631C0 260600C0 */ addiu $a2, $s0, 0xc0 -/* 097CF4 7F0631C4 8E420008 */ lw $v0, 8($s2) -/* 097CF8 7F0631C8 8C430014 */ lw $v1, 0x14($v0) -.L7F0631CC: -/* 097CFC 7F0631CC 27A50074 */ addiu $a1, $sp, 0x74 -/* 097D00 7F0631D0 50600008 */ beql $v1, $zero, .L7F0631F4 -/* 097D04 7F0631D4 8E420008 */ lw $v0, 8($s2) -/* 097D08 7F0631D8 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 097D0C 7F0631DC 8C640004 */ lw $a0, 4($v1) -/* 097D10 7F0631E0 8FA401A0 */ lw $a0, 0x1a0($sp) -/* 097D14 7F0631E4 27A50074 */ addiu $a1, $sp, 0x74 -/* 097D18 7F0631E8 0FC16032 */ jal matrix_4x4_multiply -/* 097D1C 7F0631EC 26060100 */ addiu $a2, $s0, 0x100 -/* 097D20 7F0631F0 8E420008 */ lw $v0, 8($s2) -.L7F0631F4: -/* 097D24 7F0631F4 8C440018 */ lw $a0, 0x18($v0) -/* 097D28 7F0631F8 50800011 */ beql $a0, $zero, .L7F063240 -/* 097D2C 7F0631FC 8C44001C */ lw $a0, 0x1c($v0) -/* 097D30 7F063200 8C880004 */ lw $t0, 4($a0) -/* 097D34 7F063204 00002825 */ move $a1, $zero -/* 097D38 7F063208 0FC1B15C */ jal modelFindNodeMtxIndex -/* 097D3C 7F06320C AFA8005C */ sw $t0, 0x5c($sp) -/* 097D40 7F063210 AFA20058 */ sw $v0, 0x58($sp) -/* 097D44 7F063214 8FA4005C */ lw $a0, 0x5c($sp) -/* 097D48 7F063218 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 097D4C 7F06321C 27A50074 */ addiu $a1, $sp, 0x74 -/* 097D50 7F063220 8FAF0058 */ lw $t7, 0x58($sp) -/* 097D54 7F063224 8FA401A0 */ lw $a0, 0x1a0($sp) -/* 097D58 7F063228 27A50074 */ addiu $a1, $sp, 0x74 -/* 097D5C 7F06322C 000F7180 */ sll $t6, $t7, 6 -/* 097D60 7F063230 0FC16032 */ jal matrix_4x4_multiply -/* 097D64 7F063234 01D03021 */ addu $a2, $t6, $s0 -/* 097D68 7F063238 8E420008 */ lw $v0, 8($s2) -/* 097D6C 7F06323C 8C44001C */ lw $a0, 0x1c($v0) -.L7F063240: -/* 097D70 7F063240 50800010 */ beql $a0, $zero, .L7F063284 -/* 097D74 7F063244 864C000C */ lh $t4, 0xc($s2) -/* 097D78 7F063248 8C890004 */ lw $t1, 4($a0) -/* 097D7C 7F06324C 00002825 */ move $a1, $zero -/* 097D80 7F063250 0FC1B15C */ jal modelFindNodeMtxIndex -/* 097D84 7F063254 AFA90054 */ sw $t1, 0x54($sp) -/* 097D88 7F063258 AFA20050 */ sw $v0, 0x50($sp) -/* 097D8C 7F06325C 8FA40054 */ lw $a0, 0x54($sp) -/* 097D90 7F063260 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 097D94 7F063264 27A50074 */ addiu $a1, $sp, 0x74 -/* 097D98 7F063268 8FAA0050 */ lw $t2, 0x50($sp) -/* 097D9C 7F06326C 8FA401A0 */ lw $a0, 0x1a0($sp) -/* 097DA0 7F063270 27A50074 */ addiu $a1, $sp, 0x74 -/* 097DA4 7F063274 000A5980 */ sll $t3, $t2, 6 -/* 097DA8 7F063278 0FC16032 */ jal matrix_4x4_multiply -/* 097DAC 7F06327C 01703021 */ addu $a2, $t3, $s0 -/* 097DB0 7F063280 864C000C */ lh $t4, 0xc($s2) -.L7F063284: -/* 097DB4 7F063284 00008025 */ move $s0, $zero -/* 097DB8 7F063288 29810013 */ slti $at, $t4, 0x13 -/* 097DBC 7F06328C 14200019 */ bnez $at, .L7F0632F4 -/* 097DC0 7F063290 00000000 */ nop -/* 097DC4 7F063294 8E4D0008 */ lw $t5, 8($s2) -.L7F063298: -/* 097DC8 7F063298 01B0C821 */ addu $t9, $t5, $s0 -/* 097DCC 7F06329C 8F250048 */ lw $a1, 0x48($t9) -/* 097DD0 7F0632A0 50A00007 */ beql $a1, $zero, .L7F0632C0 -/* 097DD4 7F0632A4 8E480008 */ lw $t0, 8($s2) -/* 097DD8 7F0632A8 0FC1B1E7 */ jal modelGetNodeRwData -/* 097DDC 7F0632AC 02602025 */ move $a0, $s3 -/* 097DE0 7F0632B0 10400002 */ beqz $v0, .L7F0632BC -/* 097DE4 7F0632B4 24180001 */ li $t8, 1 -/* 097DE8 7F0632B8 AC580000 */ sw $t8, ($v0) -.L7F0632BC: -/* 097DEC 7F0632BC 8E480008 */ lw $t0, 8($s2) -.L7F0632C0: -/* 097DF0 7F0632C0 01107821 */ addu $t7, $t0, $s0 -/* 097DF4 7F0632C4 8DE5005C */ lw $a1, 0x5c($t7) -/* 097DF8 7F0632C8 50A00007 */ beql $a1, $zero, .L7F0632E8 -/* 097DFC 7F0632CC 26100004 */ addiu $s0, $s0, 4 -/* 097E00 7F0632D0 0FC1B1E7 */ jal modelGetNodeRwData -/* 097E04 7F0632D4 02602025 */ move $a0, $s3 -/* 097E08 7F0632D8 10400002 */ beqz $v0, .L7F0632E4 -/* 097E0C 7F0632DC 240E0001 */ li $t6, 1 -/* 097E10 7F0632E0 AC4E0000 */ sw $t6, ($v0) -.L7F0632E4: -/* 097E14 7F0632E4 26100004 */ addiu $s0, $s0, 4 -.L7F0632E8: -/* 097E18 7F0632E8 24010014 */ li $at, 20 -/* 097E1C 7F0632EC 5601FFEA */ bnel $s0, $at, .L7F063298 -/* 097E20 7F0632F0 8E4D0008 */ lw $t5, 8($s2) -.L7F0632F4: -/* 097E24 7F0632F4 0FC1BBF1 */ jal modelUpdateNodeRelations -/* 097E28 7F0632F8 02602025 */ move $a0, $s3 -/* 097E2C 7F0632FC 8FA2019C */ lw $v0, 0x19c($sp) -/* 097E30 7F063300 24010013 */ li $at, 19 -/* 097E34 7F063304 3C09BC00 */ lui $t1, (0xBC000002 >> 16) # lui $t1, 0xbc00 -/* 097E38 7F063308 1041000C */ beq $v0, $at, .L7F06333C -/* 097E3C 7F06330C 35290002 */ ori $t1, (0xBC000002 & 0xFFFF) # ori $t1, $t1, 2 -/* 097E40 7F063310 24010012 */ li $at, 18 -/* 097E44 7F063314 10410009 */ beq $v0, $at, .L7F06333C -/* 097E48 7F063318 24010002 */ li $at, 2 -/* 097E4C 7F06331C 10410007 */ beq $v0, $at, .L7F06333C -/* 097E50 7F063320 24010003 */ li $at, 3 -/* 097E54 7F063324 10410005 */ beq $v0, $at, .L7F06333C -/* 097E58 7F063328 24010014 */ li $at, 20 -/* 097E5C 7F06332C 10410003 */ beq $v0, $at, .L7F06333C -/* 097E60 7F063330 24010015 */ li $at, 21 -/* 097E64 7F063334 54410028 */ bnel $v0, $at, .L7F0633D8 -/* 097E68 7F063338 864A000C */ lh $t2, 0xc($s2) -.L7F06333C: -/* 097E6C 7F06333C 8FA20198 */ lw $v0, 0x198($sp) -/* 097E70 7F063340 3C0A8000 */ lui $t2, (0x80000040 >> 16) # lui $t2, 0x8000 -/* 097E74 7F063344 354A0040 */ ori $t2, (0x80000040 & 0xFFFF) # ori $t2, $t2, 0x40 -/* 097E78 7F063348 24430008 */ addiu $v1, $v0, 8 -/* 097E7C 7F06334C 3C0B0386 */ lui $t3, (0x03860010 >> 16) # lui $t3, 0x386 -/* 097E80 7F063350 3C0C8003 */ lui $t4, %hi(g_WeaponEnvmapLight + 0x8) -/* 097E84 7F063354 AC4A0004 */ sw $t2, 4($v0) -/* 097E88 7F063358 AC490000 */ sw $t1, ($v0) -/* 097E8C 7F06335C 258C2448 */ addiu $t4, %lo(g_WeaponEnvmapLight + 0x8) # addiu $t4, $t4, 0x2448 -/* 097E90 7F063360 356B0010 */ ori $t3, (0x03860010 & 0xFFFF) # ori $t3, $t3, 0x10 -/* 097E94 7F063364 24640008 */ addiu $a0, $v1, 8 -/* 097E98 7F063368 AC6B0000 */ sw $t3, ($v1) -/* 097E9C 7F06336C AC6C0004 */ sw $t4, 4($v1) -/* 097EA0 7F063370 3C0D0388 */ lui $t5, (0x03880010 >> 16) # lui $t5, 0x388 -/* 097EA4 7F063374 3C198003 */ lui $t9, %hi(g_WeaponEnvmapLight) -/* 097EA8 7F063378 27392440 */ addiu $t9, %lo(g_WeaponEnvmapLight) # addiu $t9, $t9, 0x2440 -/* 097EAC 7F06337C 35AD0010 */ ori $t5, (0x03880010 & 0xFFFF) # ori $t5, $t5, 0x10 -/* 097EB0 7F063380 24900008 */ addiu $s0, $a0, 8 -/* 097EB4 7F063384 3C180384 */ lui $t8, (0x03840010 >> 16) # lui $t8, 0x384 -/* 097EB8 7F063388 AC8D0000 */ sw $t5, ($a0) -/* 097EBC 7F06338C AC990004 */ sw $t9, 4($a0) -/* 097EC0 7F063390 37180010 */ ori $t8, (0x03840010 & 0xFFFF) # ori $t8, $t8, 0x10 -/* 097EC4 7F063394 AE180000 */ sw $t8, ($s0) -/* 097EC8 7F063398 26050008 */ addiu $a1, $s0, 8 -/* 097ECC 7F06339C 0FC1E11D */ jal sub_GAME_7F078474 -/* 097ED0 7F0633A0 AFA50198 */ sw $a1, 0x198($sp) -/* 097ED4 7F0633A4 AE020004 */ sw $v0, 4($s0) -/* 097ED8 7F0633A8 8FA80198 */ lw $t0, 0x198($sp) -/* 097EDC 7F0633AC 3C0E0382 */ lui $t6, (0x03820010 >> 16) # lui $t6, 0x382 -/* 097EE0 7F0633B0 35CE0010 */ ori $t6, (0x03820010 & 0xFFFF) # ori $t6, $t6, 0x10 -/* 097EE4 7F0633B4 250F0008 */ addiu $t7, $t0, 8 -/* 097EE8 7F0633B8 AFAF0198 */ sw $t7, 0x198($sp) -/* 097EEC 7F0633BC AD0E0000 */ sw $t6, ($t0) -/* 097EF0 7F0633C0 0FC1E11D */ jal sub_GAME_7F078474 -/* 097EF4 7F0633C4 AFA80034 */ sw $t0, 0x34($sp) -/* 097EF8 7F0633C8 8FA30034 */ lw $v1, 0x34($sp) -/* 097EFC 7F0633CC 24490010 */ addiu $t1, $v0, 0x10 -/* 097F00 7F0633D0 AC690004 */ sw $t1, 4($v1) -/* 097F04 7F0633D4 864A000C */ lh $t2, 0xc($s2) -.L7F0633D8: -/* 097F08 7F0633D8 29410011 */ slti $at, $t2, 0x11 -/* 097F0C 7F0633DC 5420000C */ bnezl $at, .L7F063410 -/* 097F10 7F0633E0 8FA201A4 */ lw $v0, 0x1a4($sp) -/* 097F14 7F0633E4 8E420008 */ lw $v0, 8($s2) -/* 097F18 7F0633E8 02602025 */ move $a0, $s3 -/* 097F1C 7F0633EC 8C4B0040 */ lw $t3, 0x40($v0) -/* 097F20 7F0633F0 51600007 */ beql $t3, $zero, .L7F063410 -/* 097F24 7F0633F4 8FA201A4 */ lw $v0, 0x1a4($sp) -/* 097F28 7F0633F8 0FC1B1E7 */ jal modelGetNodeRwData -/* 097F2C 7F0633FC 8C450044 */ lw $a1, 0x44($v0) -/* 097F30 7F063400 50400003 */ beql $v0, $zero, .L7F063410 -/* 097F34 7F063404 8FA201A4 */ lw $v0, 0x1a4($sp) -/* 097F38 7F063408 AC400000 */ sw $zero, ($v0) -/* 097F3C 7F06340C 8FA201A4 */ lw $v0, 0x1a4($sp) -.L7F063410: -/* 097F40 7F063410 8FAC0198 */ lw $t4, 0x198($sp) -/* 097F44 7F063414 27A40158 */ addiu $a0, $sp, 0x158 -/* 097F48 7F063418 284100FF */ slti $at, $v0, 0xff -/* 097F4C 7F06341C 14200006 */ bnez $at, .L7F063438 -/* 097F50 7F063420 AFAC0164 */ sw $t4, 0x164($sp) -/* 097F54 7F063424 8FB901A8 */ lw $t9, 0x1a8($sp) -/* 097F58 7F063428 240D0004 */ li $t5, 4 -/* 097F5C 7F06342C AFAD0188 */ sw $t5, 0x188($sp) -/* 097F60 7F063430 10000006 */ b .L7F06344C -/* 097F64 7F063434 AFB9018C */ sw $t9, 0x18c($sp) -.L7F063438: -/* 097F68 7F063438 8FA801A8 */ lw $t0, 0x1a8($sp) -/* 097F6C 7F06343C 24180005 */ li $t8, 5 -/* 097F70 7F063440 AFB80188 */ sw $t8, 0x188($sp) -/* 097F74 7F063444 AFA2018C */ sw $v0, 0x18c($sp) -/* 097F78 7F063448 AFA80190 */ sw $t0, 0x190($sp) -.L7F06344C: -/* 097F7C 7F06344C AFA0015C */ sw $zero, 0x15c($sp) -/* 097F80 7F063450 0FC1D1A1 */ jal subdraw -/* 097F84 7F063454 02602825 */ move $a1, $s3 -/* 097F88 7F063458 8FAF0164 */ lw $t7, 0x164($sp) -/* 097F8C 7F06345C 0FC16319 */ jal matrix_4x4_7F058C64 -/* 097F90 7F063460 AFAF0198 */ sw $t7, 0x198($sp) -/* 097F94 7F063464 864E000E */ lh $t6, 0xe($s2) -/* 097F98 7F063468 00008025 */ move $s0, $zero -/* 097F9C 7F06346C 19C00010 */ blez $t6, .L7F0634B0 -/* 097FA0 7F063470 00000000 */ nop -/* 097FA4 7F063474 8FA90144 */ lw $t1, 0x144($sp) -.L7F063478: -/* 097FA8 7F063478 27A50074 */ addiu $a1, $sp, 0x74 -/* 097FAC 7F06347C 0FC16008 */ jal matrix_4x4_copy -/* 097FB0 7F063480 01302021 */ addu $a0, $t1, $s0 -/* 097FB4 7F063484 8FAB0144 */ lw $t3, 0x144($sp) -/* 097FB8 7F063488 00115180 */ sll $t2, $s1, 6 -/* 097FBC 7F06348C 27A40074 */ addiu $a0, $sp, 0x74 -/* 097FC0 7F063490 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 097FC4 7F063494 014B2821 */ addu $a1, $t2, $t3 -/* 097FC8 7F063498 864C000E */ lh $t4, 0xe($s2) -/* 097FCC 7F06349C 26310001 */ addiu $s1, $s1, 1 -/* 097FD0 7F0634A0 26100040 */ addiu $s0, $s0, 0x40 -/* 097FD4 7F0634A4 022C082A */ slt $at, $s1, $t4 -/* 097FD8 7F0634A8 5420FFF3 */ bnezl $at, .L7F063478 -/* 097FDC 7F0634AC 8FA90144 */ lw $t1, 0x144($sp) -.L7F0634B0: -/* 097FE0 7F0634B0 0FC16322 */ jal matrix_4x4_7F058C88 -/* 097FE4 7F0634B4 00000000 */ nop -.L7F0634B8: -/* 097FE8 7F0634B8 8FA20198 */ lw $v0, 0x198($sp) -.L7F0634BC: -/* 097FEC 7F0634BC 8FBF0024 */ lw $ra, 0x24($sp) -/* 097FF0 7F0634C0 8FB00014 */ lw $s0, 0x14($sp) -/* 097FF4 7F0634C4 8FB10018 */ lw $s1, 0x18($sp) -/* 097FF8 7F0634C8 8FB2001C */ lw $s2, 0x1c($sp) -/* 097FFC 7F0634CC 8FB30020 */ lw $s3, 0x20($sp) -/* 098000 7F0634D0 03E00008 */ jr $ra -/* 098004 7F0634D4 27BD0198 */ addiu $sp, $sp, 0x198 -) -#endif void sub_GAME_7F0634D8(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { set_enviro_fog_for_items_in_solo_watch_menu(arg0, arg1, arg2, arg3, -256); } + // Unreferenced -void sub_GAME_7F0634FC(s32 arg0, s32 arg1, s32 arg2) { +void sub_GAME_7F0634FC(s32 arg0, s32 arg1, s32 arg2) +{ sub_GAME_7F0634D8(arg0, arg1, arg2, 0xFF); } + void sub_GAME_7F06351C(struct coord3d* arg0, Mtxf* arg1, Mtxf* arg2, Mtxf* arg3, struct coord3d* arg4, Mtxf* arg5, Mtxf* arg6) { Mtxf sp20; @@ -12584,1026 +3948,390 @@ void sub_GAME_7F06351C(struct coord3d* arg0, Mtxf* arg1, Mtxf* arg2, Mtxf* arg3, } +/** + * Address: 7F06359C + */ +Gfx* watchRenderController(Gfx* gdl, Mtxf* basemtx, s32 envcolour, bool animatebuttons, WatchContButtonPositions* buttonpositions, s8* contpadnum) +{ + ModelRenderData renderdata; + struct ModelHeader modelstack; + s32 i; + s32 j; + s32 offset; + f32 angle; + u32 rwdata[26]; + u32 pad2; + Mtxf sp41c; + Mtxf sp3dc; + struct ModelFileHeader* objheader; + struct coord3d* position; + Mtxf* matrices; + ModelNode* node; + Mtxf sp38c; + Mtxf sp34c; + Mtxf sp30c; + Mtxf sp2cc; + Mtxf sp28c; + Mtxf sp24c; + Mtxf sp20c; + Mtxf sp1cc; + struct coord3d coord_node2; + struct coord3d coord_node11_pos; + struct coord3d coord_node11_base; + struct coord3d coord_node4_pos; + struct coord3d coord_node4_base; + struct coord3d coord_node5_pos; + struct coord3d coord_node5_base; + struct coord3d coord_node6_pos; + struct coord3d coord_node6_base; + struct coord3d coord_node7_pos; + struct coord3d coord_node7_base; + struct coord3d coord_node9_pos; + struct coord3d coord_node9_base; + struct coord3d coord_node8_pos; + struct coord3d coord_node8_base; + struct coord3d coord_node10_pos; + struct coord3d coord_node10_base; + struct coord3d coord_node3_pos; + Mtxf spb4; + struct coord3d coord_node3_base; + struct coord3d coord_node1_pos; + struct coord3d coord_node1_base; + struct coord3d coord_node12_pos; + struct coord3d coord_node12_base; -#ifdef NONMATCHING -void sub_GAME_7F06359C(void) { + renderdata = *(ModelRenderData *)((u8 *)D_80035D04 + 0x3c); + sub_GAME_7F05DA8C(GUNRIGHT, 0x55); + + if (!(Gun_hand_without_item(GUNRIGHT) && get_itemtype_in_hand(GUNRIGHT))) + { + return gdl; + } + + objheader = g_CurrentPlayer->copy_of_body_obj_header; + matrices = dynAllocate(objheader->numMatrices * (sizeof(Mtxf))); + modelCalculateRwDataLen(objheader); + + if (objheader); + + modelInit(&modelstack, objheader, rwdata); + modelstack.render_pos = (RenderPosView*) matrices; + matrix_4x4_copy(basemtx, &matrices[0]); + + for (i = 1; i < 13; i++) + { + position = objheader->Switches[i]->Data; + + // Update joy stick position and rotation. + if (i == 2) + { + angle = ((((-(f32) joyGetStickX(*contpadnum)) * M_TAU_F) * 0.6f)) / 360.0f; + matrix_4x4_set_rotation_around_z(angle, &sp41c); + angle = ((((-(f32) joyGetStickY(*contpadnum)) * M_TAU_F) * 0.6f)) / 360.0f; + matrix_4x4_set_rotation_around_x(angle, &sp3dc); + matrix_4x4_multiply_in_place(&sp3dc, &sp41c); + matrix_4x4_set_position(position, &sp41c); + } + else + { + matrix_4x4_set_identity_and_position(position, &sp41c); + } + + matrix_4x4_multiply(basemtx, &sp41c, &matrices[i]); + } + + modelUpdateNodeRelations(&modelstack); + renderdata.gdl = gdl; + + if (envcolour >= 0xff) + { + renderdata.PropType = PROP_TYPE_OBJ; + } + else + { + renderdata.PropType = PROP_TYPE_PLAYER; + renderdata.envcolour.word = envcolour; + renderdata.fogcolour.word = 0xFFFFFF00; + } + + renderdata.zbufferenabled = TRUE; + subdraw(&renderdata, &modelstack); + gdl = renderdata.gdl; + matrix_4x4_7F058C64(); + + for (i = 0; i < objheader->numMatrices; i++) + { + matrix_4x4_copy((u32)modelstack.render_pos + i * sizeof(Mtxf), &sp41c); + matrix_4x4_f32_to_s32(&sp41c, &modelstack.render_pos[i]); + } + + matrix_4x4_7F058C88(); + + if (animatebuttons) + { + node = objheader->Switches[13]; + + if (node) + { + *((s32*) modelGetNodeRwData(&modelstack, node)) = 0; + } + + matrices = dynAllocate(objheader->numMatrices * (sizeof(Mtxf))); + modelstack.render_pos = (RenderPosView*) matrices; + + // Update the positions and/or rotations of the free floating buttons on the sides of the screen. + for (i = 0; i < 13; i++) + { + matrix_4x4_set_lookat_target(&sp20c, -5.0f, 2000.0f, -168.0f, -5.0f, 0.0f, -168.0f, 0.0f, 0.0f, -1.0f); + matrix_4x4_set_lookat_target(&sp38c, -5.0f, 2000.0f, -168.0f, -5.0f, 0.0f, -168.0f, 0.0f, 0.0f, -1.0f); + matrix_4x4_set_identity(&sp24c); + matrix_4x4_set_identity(&sp1cc); + matrix_4x4_copy(&sp1cc, &sp2cc); + + // Joy stick + if (i == 2) + { + coord_node2 = buttonpositions->joystick; + matrix_4x4_set_identity_and_position(&coord_node2, &sp34c); + angle = ((((-(f32) joyGetStickX(*contpadnum)) * M_TAU_F) * 0.6f)) / 360.0f; + matrix_4x4_set_rotation_around_z(angle, &sp41c); + angle = ((((-(f32) joyGetStickY(*contpadnum)) * M_TAU_F) * 0.6f)) / 360.0f; + matrix_4x4_set_rotation_around_x(angle, &sp3dc); + matrix_4x4_multiply_in_place(&sp3dc, &sp41c); + matrix_4x4_multiply_in_place(&sp34c, &sp41c); + matrix_4x4_multiply(&sp20c, &sp41c, &sp30c); + matrix_4x4_copy(&sp30c, &matrices[i]); + } + // R + else if (i == 11) + { + coord_node11_base = ((struct coord3d *)watchControllerButtonBases)[5]; + coord_node11_pos = buttonpositions->r; + + if (joyGetButtons(*contpadnum, R_TRIG)) + { + matrix_4x4_set_rotation_around_y(-0.17453294f, &sp24c); + } + + matrix_4x4_set_rotation_around_x(1.0471976f, &sp28c); + sub_GAME_7F06351C(&coord_node11_base, &sp24c, &sp28c, &sp1cc, &coord_node11_pos, &sp20c, &sp38c); + matrix_4x4_copy(&sp38c, &matrices[i]); + } + // C-Up + else if (i == 4) + { + coord_node4_base = ((struct coord3d *)watchControllerButtonBases)[6]; + coord_node4_pos = buttonpositions->cUp; + + if (joyGetButtons(*contpadnum, U_CBUTTONS)) + { + coord_node4_base.y += -10.0f; + } + + matrix_4x4_set_rotation_around_x(-1.0471976f, &sp28c); + sub_GAME_7F06351C(&coord_node4_base, &sp24c, &sp28c, &sp1cc, &coord_node4_pos, &sp20c, &sp38c); + matrix_4x4_copy(&sp38c, &matrices[i]); + } + // C-Down + else if (i == 5) + { + coord_node5_base = ((struct coord3d *)watchControllerButtonBases)[7]; + coord_node5_pos = buttonpositions->cDown; + + if (joyGetButtons(*contpadnum, D_CBUTTONS)) + { + coord_node5_base.y += -10.0f; + } + + matrix_4x4_set_rotation_around_x(-1.0471976f, &sp28c); + sub_GAME_7F06351C(&coord_node5_base, &sp24c, &sp28c, &sp1cc, &coord_node5_pos, &sp20c, &sp38c); + matrix_4x4_copy(&sp38c, &matrices[i]); + } + // C-Left + else if (i == 6) + { + coord_node6_base = ((struct coord3d *)watchControllerButtonBases)[8]; + coord_node6_pos = buttonpositions->cLeft; + + if (joyGetButtons(*contpadnum, L_CBUTTONS)) + { + coord_node6_base.y += -10.0f; + } + + matrix_4x4_set_rotation_around_x(-1.0471976f, &sp28c); + sub_GAME_7F06351C(&coord_node6_base, &sp24c, &sp28c, &sp1cc, &coord_node6_pos, &sp20c, &sp38c); + matrix_4x4_copy(&sp38c, &matrices[i]); + } + // C-Right + else if (i == 7) + { + coord_node7_base = ((struct coord3d *)watchControllerButtonBases)[9]; + coord_node7_pos = buttonpositions->cRight; + + if (joyGetButtons(*contpadnum, R_CBUTTONS)) + { + coord_node7_base.y += -10.0f; + } + + matrix_4x4_set_rotation_around_x(-1.0471976f, &sp28c); + sub_GAME_7F06351C(&coord_node7_base, &sp24c, &sp28c, &sp1cc, &coord_node7_pos, &sp20c, &sp38c); + matrix_4x4_copy(&sp38c, &matrices[i]); + } + // B + else if (i == 9) + { + coord_node9_base = ((struct coord3d *)watchControllerButtonBases)[10]; + coord_node9_pos = buttonpositions->b; + + if (joyGetButtons(*contpadnum, B_BUTTON)) + { + coord_node9_base.y += -10.0f; + } + + matrix_4x4_set_rotation_around_x(-1.0471976, &sp28c); + sub_GAME_7F06351C(&coord_node9_base, &sp24c, &sp28c, &sp1cc, &coord_node9_pos, &sp20c, &sp38c); + matrix_4x4_copy(&sp38c, &matrices[i]); + } + // A + else if (i == 8) + { + coord_node8_base = ((struct coord3d *)watchControllerButtonBases)[11]; + coord_node8_pos = buttonpositions->a; + + if (joyGetButtons(*contpadnum, A_BUTTON)) + { + coord_node8_base.y += -10.0f; + } + + matrix_4x4_set_rotation_around_x(-1.0471976f, &sp28c); + sub_GAME_7F06351C(&coord_node8_base, &sp24c, &sp28c, &sp1cc, &coord_node8_pos, &sp20c, &sp38c); + matrix_4x4_copy(&sp38c, &matrices[i]); + } + // L + else if (i == 10) + { + coord_node10_base = ((struct coord3d *)watchControllerButtonBases)[12]; + coord_node10_pos = buttonpositions->l; + + if (joyGetButtons(*contpadnum, L_TRIG)) + { + matrix_4x4_set_rotation_around_y(0.17453294f, &sp24c); + } + + matrix_4x4_set_rotation_around_x(1.0471976f, &sp28c); + sub_GAME_7F06351C(&coord_node10_base, &sp24c, &sp28c, &sp1cc, &coord_node10_pos, &sp20c, &sp38c); + matrix_4x4_copy(&sp38c, &matrices[i]); + } + // D-pad + else if (i == 3) + { + coord_node3_base = ((struct coord3d *)watchControllerButtonBases)[13]; + coord_node3_pos = buttonpositions->dPad; + matrix_4x4_set_identity(&spb4); + + if (joyGetButtons(*contpadnum, U_JPAD)) + { + matrix_4x4_set_rotation_around_x(-0.17453294f, &sp24c); + } + else if (joyGetButtons(*contpadnum, D_JPAD)) + { + matrix_4x4_set_rotation_around_x(0.17453294f, &sp24c); + } + + if (joyGetButtons(*contpadnum, L_JPAD)) + { + matrix_4x4_set_rotation_around_z(0.17453294f, &spb4); + } + else if (joyGetButtons(*contpadnum, R_JPAD)) + { + matrix_4x4_set_rotation_around_z(-0.17453294f, &spb4); + } + + matrix_4x4_multiply_in_place(&spb4, &sp24c); + matrix_4x4_set_rotation_around_x(-0.89759791f, &sp28c); + sub_GAME_7F06351C(&coord_node3_base, &sp24c, &sp28c, &sp1cc, &coord_node3_pos, &sp20c, &sp38c); + matrix_4x4_copy(&sp38c, &matrices[i]); + } + // Start + else if (i == 1) + { + coord_node1_base = ((struct coord3d *)watchControllerButtonBases)[14]; + coord_node1_pos = buttonpositions->start; + + if (joyGetButtons(*contpadnum, START_BUTTON)) + { + coord_node1_base.y += -10.0f; + } + + matrix_4x4_set_rotation_around_x(-1.0471976f, &sp28c); + sub_GAME_7F06351C(&coord_node1_base, &sp24c, &sp28c, &sp1cc, &coord_node1_pos, &sp20c, &sp38c); + matrix_4x4_copy(&sp38c, &matrices[i]); + } + // Z + else if (i == 12) + { + coord_node12_base = ((struct coord3d *)watchControllerButtonBases)[15]; + coord_node12_pos = buttonpositions->z; + + if (joyGetButtons(*contpadnum, Z_TRIG)) + { + matrix_4x4_set_rotation_around_x(-0.17453294f, &sp24c); + } + + matrix_4x4_set_rotation_around_z(M_PI_F, &sp28c); + sub_GAME_7F06351C(&coord_node12_base, &sp24c, &sp28c, &sp1cc, &coord_node12_pos, &sp20c, &sp38c); + matrix_4x4_copy(&sp38c, &matrices[i]); + } + else + { + matrix_4x4_copy(basemtx, &matrices[i]); + } + } + + modelUpdateNodeRelations(&modelstack); + renderdata.gdl = gdl; + subdraw(&renderdata, &modelstack); + gdl = renderdata.gdl; + matrix_4x4_7F058C64(); + + for (i = 0; i < objheader->numMatrices; i++) + { + matrix_4x4_copy((u32)modelstack.render_pos + i * sizeof(Mtxf), &sp41c); + matrix_4x4_f32_to_s32(&sp41c, &modelstack.render_pos[i]); + } + + matrix_4x4_7F058C88(); + } + + return gdl; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80053ED4 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053ED8 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053EDC -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053EE0 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053EE4 -.word 0xbf860a92 /*-1.0471976*/ -glabel D_80053EE8 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053EEC -.word 0x3f19999a /*0.60000002*/ -glabel D_80053EF0 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80053EF4 -.word 0x3f19999a /*0.60000002*/ -glabel D_80053EF8 -.word 0xbe32b8c3 /*-0.17453294*/ -glabel D_80053EFC -.word 0x3f860a92 /*1.0471976*/ -glabel D_80053F00 -.word 0x3e32b8c3 /*0.17453294*/ -glabel D_80053F04 -.word 0x3f860a92 /*1.0471976*/ -glabel D_80053F08 -.word 0xbe32b8c3 /*-0.17453294*/ -glabel D_80053F0C -.word 0x3e32b8c3 /*0.17453294*/ -glabel D_80053F10 -.word 0x3e32b8c3 /*0.17453294*/ -glabel D_80053F14 -.word 0xbe32b8c3 /*-0.17453294*/ -glabel D_80053F18 -.word 0xbf65c8fa /*-0.89759791*/ -glabel D_80053F1C -.word 0xbe32b8c3 /*-0.17453294*/ -glabel D_80053F20 -.word 0x40490fdb /*3.1415927*/ -.text -glabel sub_GAME_7F06359C -/* 0980CC 7F06359C 27BDFAC8 */ addiu $sp, $sp, -0x538 -/* 0980D0 7F0635A0 3C0F8003 */ lui $t7, %hi(D_80035D04+0x3C) -/* 0980D4 7F0635A4 AFB30054 */ sw $s3, 0x54($sp) -/* 0980D8 7F0635A8 AFB20050 */ sw $s2, 0x50($sp) -/* 0980DC 7F0635AC 25EF5D40 */ addiu $t7, %lo(D_80035D04+0x3C) # addiu $t7, $t7, 0x5d40 -/* 0980E0 7F0635B0 00C09025 */ move $s2, $a2 -/* 0980E4 7F0635B4 00E09825 */ move $s3, $a3 -/* 0980E8 7F0635B8 AFBF006C */ sw $ra, 0x6c($sp) -/* 0980EC 7F0635BC AFBE0068 */ sw $fp, 0x68($sp) -/* 0980F0 7F0635C0 AFB70064 */ sw $s7, 0x64($sp) -/* 0980F4 7F0635C4 AFB60060 */ sw $s6, 0x60($sp) -/* 0980F8 7F0635C8 AFB5005C */ sw $s5, 0x5c($sp) -/* 0980FC 7F0635CC AFB40058 */ sw $s4, 0x58($sp) -/* 098100 7F0635D0 AFB1004C */ sw $s1, 0x4c($sp) -/* 098104 7F0635D4 AFB00048 */ sw $s0, 0x48($sp) -/* 098108 7F0635D8 F7B80040 */ sdc1 $f24, 0x40($sp) -/* 09810C 7F0635DC F7B60038 */ sdc1 $f22, 0x38($sp) -/* 098110 7F0635E0 F7B40030 */ sdc1 $f20, 0x30($sp) -/* 098114 7F0635E4 AFA40538 */ sw $a0, 0x538($sp) -/* 098118 7F0635E8 AFA5053C */ sw $a1, 0x53c($sp) -/* 09811C 7F0635EC 25E8003C */ addiu $t0, $t7, 0x3c -/* 098120 7F0635F0 27AE04F8 */ addiu $t6, $sp, 0x4f8 -.L7F0635F4: -/* 098124 7F0635F4 8DE10000 */ lw $at, ($t7) -/* 098128 7F0635F8 25EF000C */ addiu $t7, $t7, 0xc -/* 09812C 7F0635FC 25CE000C */ addiu $t6, $t6, 0xc -/* 098130 7F063600 ADC1FFF4 */ sw $at, -0xc($t6) -/* 098134 7F063604 8DE1FFF8 */ lw $at, -8($t7) -/* 098138 7F063608 ADC1FFF8 */ sw $at, -8($t6) -/* 09813C 7F06360C 8DE1FFFC */ lw $at, -4($t7) -/* 098140 7F063610 15E8FFF8 */ bne $t7, $t0, .L7F0635F4 -/* 098144 7F063614 ADC1FFFC */ sw $at, -4($t6) -/* 098148 7F063618 8DE10000 */ lw $at, ($t7) -/* 09814C 7F06361C 00002025 */ move $a0, $zero -/* 098150 7F063620 24050055 */ li $a1, 85 -/* 098154 7F063624 0FC176A3 */ jal sub_GAME_7F05DA8C -/* 098158 7F063628 ADC10000 */ sw $at, ($t6) -/* 09815C 7F06362C 0FC173AF */ jal Gun_hand_without_item -/* 098160 7F063630 00002025 */ move $a0, $zero -/* 098164 7F063634 10400005 */ beqz $v0, .L7F06364C -/* 098168 7F063638 00000000 */ nop -/* 09816C 7F06363C 0FC173C0 */ jal get_itemtype_in_hand -/* 098170 7F063640 00002025 */ move $a0, $zero -/* 098174 7F063644 14400003 */ bnez $v0, .L7F063654 -/* 098178 7F063648 00000000 */ nop -.L7F06364C: -/* 09817C 7F06364C 10000336 */ b .L7F064328 -/* 098180 7F063650 8FA20538 */ lw $v0, 0x538($sp) -.L7F063654: -/* 098184 7F063654 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 098188 7F063658 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09818C 7F06365C 8444081E */ lh $a0, 0x81e($v0) -/* 098190 7F063660 24420810 */ addiu $v0, $v0, 0x810 -/* 098194 7F063664 AFA203D8 */ sw $v0, 0x3d8($sp) -/* 098198 7F063668 00044980 */ sll $t1, $a0, 6 -/* 09819C 7F06366C 0FC2F5C5 */ jal dynAllocate -/* 0981A0 7F063670 01202025 */ move $a0, $t1 -/* 0981A4 7F063674 0040B825 */ move $s7, $v0 -/* 0981A8 7F063678 0FC1D73D */ jal modelCalculateRwDataLen -/* 0981AC 7F06367C 8FA403D8 */ lw $a0, 0x3d8($sp) -/* 0981B0 7F063680 8FA503D8 */ lw $a1, 0x3d8($sp) -/* 0981B4 7F063684 27A404D8 */ addiu $a0, $sp, 0x4d8 -/* 0981B8 7F063688 0FC1D7DA */ jal modelInit -/* 0981BC 7F06368C 27A60460 */ addiu $a2, $sp, 0x460 -/* 0981C0 7F063690 AFB704E4 */ sw $s7, 0x4e4($sp) -/* 0981C4 7F063694 8FA4053C */ lw $a0, 0x53c($sp) -/* 0981C8 7F063698 0FC16008 */ jal matrix_4x4_copy -/* 0981CC 7F06369C 02E02825 */ move $a1, $s7 -/* 0981D0 7F0636A0 240A0004 */ li $t2, 4 -/* 0981D4 7F0636A4 AFAA0070 */ sw $t2, 0x70($sp) -/* 0981D8 7F0636A8 24110001 */ li $s1, 1 -/* 0981DC 7F0636AC 8FB4054C */ lw $s4, 0x54c($sp) -.L7F0636B0: -/* 0981E0 7F0636B0 8FAB03D8 */ lw $t3, 0x3d8($sp) -/* 0981E4 7F0636B4 8FAD0070 */ lw $t5, 0x70($sp) -/* 0981E8 7F0636B8 24010002 */ li $at, 2 -/* 0981EC 7F0636BC 8D6C0008 */ lw $t4, 8($t3) -/* 0981F0 7F0636C0 27A5041C */ addiu $a1, $sp, 0x41c -/* 0981F4 7F0636C4 018DC821 */ addu $t9, $t4, $t5 -/* 0981F8 7F0636C8 8F380000 */ lw $t8, ($t9) -/* 0981FC 7F0636CC 1621002B */ bne $s1, $at, .L7F06377C -/* 098200 7F0636D0 8F100004 */ lw $s0, 4($t8) -/* 098204 7F0636D4 0C00303B */ jal joyGetStickX -/* 098208 7F0636D8 82840000 */ lb $a0, ($s4) -/* 09820C 7F0636DC 44822000 */ mtc1 $v0, $f4 -/* 098210 7F0636E0 3C018005 */ lui $at, %hi(D_80053ED4) -/* 098214 7F0636E4 C42A3ED4 */ lwc1 $f10, %lo(D_80053ED4)($at) -/* 098218 7F0636E8 468021A0 */ cvt.s.w $f6, $f4 -/* 09821C 7F0636EC 3C018005 */ lui $at, %hi(D_80053ED8) -/* 098220 7F0636F0 C4323ED8 */ lwc1 $f18, %lo(D_80053ED8)($at) -/* 098224 7F0636F4 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 098228 7F0636F8 27A5041C */ addiu $a1, $sp, 0x41c -/* 09822C 7F0636FC 46003207 */ neg.s $f8, $f6 -/* 098230 7F063700 44813000 */ mtc1 $at, $f6 -/* 098234 7F063704 460A4402 */ mul.s $f16, $f8, $f10 -/* 098238 7F063708 00000000 */ nop -/* 09823C 7F06370C 46128102 */ mul.s $f4, $f16, $f18 -/* 098240 7F063710 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 098244 7F063714 46062303 */ div.s $f12, $f4, $f6 -/* 098248 7F063718 0C00307F */ jal joyGetStickY -/* 09824C 7F06371C 82840000 */ lb $a0, ($s4) -/* 098250 7F063720 44824000 */ mtc1 $v0, $f8 -/* 098254 7F063724 3C018005 */ lui $at, %hi(D_80053EDC) -/* 098258 7F063728 C4323EDC */ lwc1 $f18, %lo(D_80053EDC)($at) -/* 09825C 7F06372C 468042A0 */ cvt.s.w $f10, $f8 -/* 098260 7F063730 3C018005 */ lui $at, %hi(D_80053EE0) -/* 098264 7F063734 C4263EE0 */ lwc1 $f6, %lo(D_80053EE0)($at) -/* 098268 7F063738 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 09826C 7F06373C 27A503DC */ addiu $a1, $sp, 0x3dc -/* 098270 7F063740 46005407 */ neg.s $f16, $f10 -/* 098274 7F063744 44815000 */ mtc1 $at, $f10 -/* 098278 7F063748 46128102 */ mul.s $f4, $f16, $f18 -/* 09827C 7F06374C 00000000 */ nop -/* 098280 7F063750 46062202 */ mul.s $f8, $f4, $f6 -/* 098284 7F063754 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098288 7F063758 460A4303 */ div.s $f12, $f8, $f10 -/* 09828C 7F06375C 27A403DC */ addiu $a0, $sp, 0x3dc -/* 098290 7F063760 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 098294 7F063764 27A5041C */ addiu $a1, $sp, 0x41c -/* 098298 7F063768 02002025 */ move $a0, $s0 -/* 09829C 7F06376C 0FC16266 */ jal matrix_4x4_set_position -/* 0982A0 7F063770 27A5041C */ addiu $a1, $sp, 0x41c -/* 0982A4 7F063774 10000004 */ b .L7F063788 -/* 0982A8 7F063778 00114180 */ sll $t0, $s1, 6 -.L7F06377C: -/* 0982AC 7F06377C 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 0982B0 7F063780 02002025 */ move $a0, $s0 -/* 0982B4 7F063784 00114180 */ sll $t0, $s1, 6 -.L7F063788: -/* 0982B8 7F063788 01173021 */ addu $a2, $t0, $s7 -/* 0982BC 7F06378C 8FA4053C */ lw $a0, 0x53c($sp) -/* 0982C0 7F063790 0FC16032 */ jal matrix_4x4_multiply -/* 0982C4 7F063794 27A5041C */ addiu $a1, $sp, 0x41c -/* 0982C8 7F063798 8FAF0070 */ lw $t7, 0x70($sp) -/* 0982CC 7F06379C 26310001 */ addiu $s1, $s1, 1 -/* 0982D0 7F0637A0 2A21000D */ slti $at, $s1, 0xd -/* 0982D4 7F0637A4 25EE0004 */ addiu $t6, $t7, 4 -/* 0982D8 7F0637A8 1420FFC1 */ bnez $at, .L7F0636B0 -/* 0982DC 7F0637AC AFAE0070 */ sw $t6, 0x70($sp) -/* 0982E0 7F0637B0 0FC1BBF1 */ jal modelUpdateNodeRelations -/* 0982E4 7F0637B4 27A404D8 */ addiu $a0, $sp, 0x4d8 -/* 0982E8 7F0637B8 8FA90538 */ lw $t1, 0x538($sp) -/* 0982EC 7F0637BC 2A4100FF */ slti $at, $s2, 0xff -/* 0982F0 7F0637C0 14200004 */ bnez $at, .L7F0637D4 -/* 0982F4 7F0637C4 AFA90504 */ sw $t1, 0x504($sp) -/* 0982F8 7F0637C8 240A0001 */ li $t2, 1 -/* 0982FC 7F0637CC 10000006 */ b .L7F0637E8 -/* 098300 7F0637D0 AFAA0528 */ sw $t2, 0x528($sp) -.L7F0637D4: -/* 098304 7F0637D4 240B0005 */ li $t3, 5 -/* 098308 7F0637D8 240CFF00 */ li $t4, -256 -/* 09830C 7F0637DC AFAB0528 */ sw $t3, 0x528($sp) -/* 098310 7F0637E0 AFB2052C */ sw $s2, 0x52c($sp) -/* 098314 7F0637E4 AFAC0530 */ sw $t4, 0x530($sp) -.L7F0637E8: -/* 098318 7F0637E8 240D0001 */ li $t5, 1 -/* 09831C 7F0637EC AFAD04FC */ sw $t5, 0x4fc($sp) -/* 098320 7F0637F0 27A404F8 */ addiu $a0, $sp, 0x4f8 -/* 098324 7F0637F4 0FC1D1A1 */ jal subdraw -/* 098328 7F0637F8 27A504D8 */ addiu $a1, $sp, 0x4d8 -/* 09832C 7F0637FC 8FB90504 */ lw $t9, 0x504($sp) -/* 098330 7F063800 0FC16319 */ jal matrix_4x4_7F058C64 -/* 098334 7F063804 AFB90538 */ sw $t9, 0x538($sp) -/* 098338 7F063808 8FB803D8 */ lw $t8, 0x3d8($sp) -/* 09833C 7F06380C 00008825 */ move $s1, $zero -/* 098340 7F063810 00008025 */ move $s0, $zero -/* 098344 7F063814 8708000E */ lh $t0, 0xe($t8) -/* 098348 7F063818 19000011 */ blez $t0, .L7F063860 -/* 09834C 7F06381C 00000000 */ nop -/* 098350 7F063820 8FAF04E4 */ lw $t7, 0x4e4($sp) -.L7F063824: -/* 098354 7F063824 27A5041C */ addiu $a1, $sp, 0x41c -/* 098358 7F063828 0FC16008 */ jal matrix_4x4_copy -/* 09835C 7F06382C 01F02021 */ addu $a0, $t7, $s0 -/* 098360 7F063830 8FA904E4 */ lw $t1, 0x4e4($sp) -/* 098364 7F063834 00117180 */ sll $t6, $s1, 6 -/* 098368 7F063838 27A4041C */ addiu $a0, $sp, 0x41c -/* 09836C 7F06383C 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 098370 7F063840 01C92821 */ addu $a1, $t6, $t1 -/* 098374 7F063844 8FAA03D8 */ lw $t2, 0x3d8($sp) -/* 098378 7F063848 26310001 */ addiu $s1, $s1, 1 -/* 09837C 7F06384C 26100040 */ addiu $s0, $s0, 0x40 -/* 098380 7F063850 854B000E */ lh $t3, 0xe($t2) -/* 098384 7F063854 022B082A */ slt $at, $s1, $t3 -/* 098388 7F063858 5420FFF2 */ bnezl $at, .L7F063824 -/* 09838C 7F06385C 8FAF04E4 */ lw $t7, 0x4e4($sp) -.L7F063860: -/* 098390 7F063860 0FC16322 */ jal matrix_4x4_7F058C88 -/* 098394 7F063864 00000000 */ nop -/* 098398 7F063868 126002AE */ beqz $s3, .L7F064324 -/* 09839C 7F06386C 8FAC03D8 */ lw $t4, 0x3d8($sp) -/* 0983A0 7F063870 8D8D0008 */ lw $t5, 8($t4) -/* 0983A4 7F063874 00008825 */ move $s1, $zero -/* 0983A8 7F063878 8DA50034 */ lw $a1, 0x34($t5) -/* 0983AC 7F06387C 50A00005 */ beql $a1, $zero, .L7F063894 -/* 0983B0 7F063880 8FB903D8 */ lw $t9, 0x3d8($sp) -/* 0983B4 7F063884 0FC1B1E7 */ jal modelGetNodeRwData -/* 0983B8 7F063888 27A404D8 */ addiu $a0, $sp, 0x4d8 -/* 0983BC 7F06388C AC400000 */ sw $zero, ($v0) -/* 0983C0 7F063890 8FB903D8 */ lw $t9, 0x3d8($sp) -.L7F063894: -/* 0983C4 7F063894 8724000E */ lh $a0, 0xe($t9) -/* 0983C8 7F063898 0004C180 */ sll $t8, $a0, 6 -/* 0983CC 7F06389C 0FC2F5C5 */ jal dynAllocate -/* 0983D0 7F0638A0 03002025 */ move $a0, $t8 -/* 0983D4 7F0638A4 3C018005 */ lui $at, %hi(D_80053EE4) -/* 0983D8 7F0638A8 C4363EE4 */ lwc1 $f22, %lo(D_80053EE4)($at) -/* 0983DC 7F0638AC 3C01C120 */ li $at, 0xC1200000 # -10.000000 -/* 0983E0 7F0638B0 4481A000 */ mtc1 $at, $f20 -/* 0983E4 7F0638B4 4480C000 */ mtc1 $zero, $f24 -/* 0983E8 7F0638B8 0040B825 */ move $s7, $v0 -/* 0983EC 7F0638BC AFA204E4 */ sw $v0, 0x4e4($sp) -/* 0983F0 7F0638C0 8FBE0548 */ lw $fp, 0x548($sp) -/* 0983F4 7F0638C4 27B601CC */ addiu $s6, $sp, 0x1cc -/* 0983F8 7F0638C8 27B5020C */ addiu $s5, $sp, 0x20c -/* 0983FC 7F0638CC 27B3024C */ addiu $s3, $sp, 0x24c -/* 098400 7F0638D0 27B2028C */ addiu $s2, $sp, 0x28c -/* 098404 7F0638D4 27B0038C */ addiu $s0, $sp, 0x38c -/* 098408 7F0638D8 3C01C0A0 */ li $at, 0xC0A00000 # -5.000000 -.L7F0638DC: -/* 09840C 7F0638DC 44810000 */ mtc1 $at, $f0 -/* 098410 7F0638E0 3C01C328 */ li $at, 0xC3280000 # -168.000000 -/* 098414 7F0638E4 44811000 */ mtc1 $at, $f2 -/* 098418 7F0638E8 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 09841C 7F0638EC 44818000 */ mtc1 $at, $f16 -/* 098420 7F0638F0 44050000 */ mfc1 $a1, $f0 -/* 098424 7F0638F4 44071000 */ mfc1 $a3, $f2 -/* 098428 7F0638F8 02A02025 */ move $a0, $s5 -/* 09842C 7F0638FC 3C0644FA */ lui $a2, 0x44fa -/* 098430 7F063900 E7B80014 */ swc1 $f24, 0x14($sp) -/* 098434 7F063904 E7B8001C */ swc1 $f24, 0x1c($sp) -/* 098438 7F063908 E7B80020 */ swc1 $f24, 0x20($sp) -/* 09843C 7F06390C E7A00010 */ swc1 $f0, 0x10($sp) -/* 098440 7F063910 E7A20018 */ swc1 $f2, 0x18($sp) -/* 098444 7F063914 0FC165A5 */ jal matrix_4x4_set_lookat_target -/* 098448 7F063918 E7B00024 */ swc1 $f16, 0x24($sp) -/* 09844C 7F06391C 3C01C0A0 */ li $at, 0xC0A00000 # -5.000000 -/* 098450 7F063920 44810000 */ mtc1 $at, $f0 -/* 098454 7F063924 3C01C328 */ li $at, 0xC3280000 # -168.000000 -/* 098458 7F063928 44811000 */ mtc1 $at, $f2 -/* 09845C 7F06392C 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 098460 7F063930 44819000 */ mtc1 $at, $f18 -/* 098464 7F063934 44050000 */ mfc1 $a1, $f0 -/* 098468 7F063938 44071000 */ mfc1 $a3, $f2 -/* 09846C 7F06393C 02002025 */ move $a0, $s0 -/* 098470 7F063940 3C0644FA */ lui $a2, 0x44fa -/* 098474 7F063944 E7B80014 */ swc1 $f24, 0x14($sp) -/* 098478 7F063948 E7B8001C */ swc1 $f24, 0x1c($sp) -/* 09847C 7F06394C E7B80020 */ swc1 $f24, 0x20($sp) -/* 098480 7F063950 E7A00010 */ swc1 $f0, 0x10($sp) -/* 098484 7F063954 E7A20018 */ swc1 $f2, 0x18($sp) -/* 098488 7F063958 0FC165A5 */ jal matrix_4x4_set_lookat_target -/* 09848C 7F06395C E7B20024 */ swc1 $f18, 0x24($sp) -/* 098490 7F063960 0FC15FF4 */ jal matrix_4x4_set_identity -/* 098494 7F063964 02602025 */ move $a0, $s3 -/* 098498 7F063968 0FC15FF4 */ jal matrix_4x4_set_identity -/* 09849C 7F06396C 02C02025 */ move $a0, $s6 -/* 0984A0 7F063970 02C02025 */ move $a0, $s6 -/* 0984A4 7F063974 0FC16008 */ jal matrix_4x4_copy -/* 0984A8 7F063978 27A502CC */ addiu $a1, $sp, 0x2cc -/* 0984AC 7F06397C 24010002 */ li $at, 2 -/* 0984B0 7F063980 5621003D */ bnel $s1, $at, .L7F063A78 -/* 0984B4 7F063984 2401000B */ li $at, 11 -/* 0984B8 7F063988 8FC10058 */ lw $at, 0x58($fp) -/* 0984BC 7F06398C 27A401C0 */ addiu $a0, $sp, 0x1c0 -/* 0984C0 7F063990 27A5034C */ addiu $a1, $sp, 0x34c -/* 0984C4 7F063994 AC810000 */ sw $at, ($a0) -/* 0984C8 7F063998 8FCF005C */ lw $t7, 0x5c($fp) -/* 0984CC 7F06399C AC8F0004 */ sw $t7, 4($a0) -/* 0984D0 7F0639A0 8FC10060 */ lw $at, 0x60($fp) -/* 0984D4 7F0639A4 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 0984D8 7F0639A8 AC810008 */ sw $at, 8($a0) -/* 0984DC 7F0639AC 0C00303B */ jal joyGetStickX -/* 0984E0 7F0639B0 82840000 */ lb $a0, ($s4) -/* 0984E4 7F0639B4 44822000 */ mtc1 $v0, $f4 -/* 0984E8 7F0639B8 3C018005 */ lui $at, %hi(D_80053EE8) -/* 0984EC 7F0639BC C42A3EE8 */ lwc1 $f10, %lo(D_80053EE8)($at) -/* 0984F0 7F0639C0 468021A0 */ cvt.s.w $f6, $f4 -/* 0984F4 7F0639C4 3C018005 */ lui $at, %hi(D_80053EEC) -/* 0984F8 7F0639C8 C4323EEC */ lwc1 $f18, %lo(D_80053EEC)($at) -/* 0984FC 7F0639CC 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 098500 7F0639D0 27A5041C */ addiu $a1, $sp, 0x41c -/* 098504 7F0639D4 46003207 */ neg.s $f8, $f6 -/* 098508 7F0639D8 44813000 */ mtc1 $at, $f6 -/* 09850C 7F0639DC 460A4402 */ mul.s $f16, $f8, $f10 -/* 098510 7F0639E0 00000000 */ nop -/* 098514 7F0639E4 46128102 */ mul.s $f4, $f16, $f18 -/* 098518 7F0639E8 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 09851C 7F0639EC 46062303 */ div.s $f12, $f4, $f6 -/* 098520 7F0639F0 0C00307F */ jal joyGetStickY -/* 098524 7F0639F4 82840000 */ lb $a0, ($s4) -/* 098528 7F0639F8 44824000 */ mtc1 $v0, $f8 -/* 09852C 7F0639FC 3C018005 */ lui $at, %hi(D_80053EF0) -/* 098530 7F063A00 C4323EF0 */ lwc1 $f18, %lo(D_80053EF0)($at) -/* 098534 7F063A04 468042A0 */ cvt.s.w $f10, $f8 -/* 098538 7F063A08 3C018005 */ lui $at, %hi(D_80053EF4) -/* 09853C 7F063A0C C4263EF4 */ lwc1 $f6, %lo(D_80053EF4)($at) -/* 098540 7F063A10 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 098544 7F063A14 27A503DC */ addiu $a1, $sp, 0x3dc -/* 098548 7F063A18 46005407 */ neg.s $f16, $f10 -/* 09854C 7F063A1C 44815000 */ mtc1 $at, $f10 -/* 098550 7F063A20 46128102 */ mul.s $f4, $f16, $f18 -/* 098554 7F063A24 00000000 */ nop -/* 098558 7F063A28 46062202 */ mul.s $f8, $f4, $f6 -/* 09855C 7F063A2C 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098560 7F063A30 460A4303 */ div.s $f12, $f8, $f10 -/* 098564 7F063A34 27A403DC */ addiu $a0, $sp, 0x3dc -/* 098568 7F063A38 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 09856C 7F063A3C 27A5041C */ addiu $a1, $sp, 0x41c -/* 098570 7F063A40 27A4034C */ addiu $a0, $sp, 0x34c -/* 098574 7F063A44 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 098578 7F063A48 27A5041C */ addiu $a1, $sp, 0x41c -/* 09857C 7F063A4C 02A02025 */ move $a0, $s5 -/* 098580 7F063A50 27A5041C */ addiu $a1, $sp, 0x41c -/* 098584 7F063A54 0FC16032 */ jal matrix_4x4_multiply -/* 098588 7F063A58 27A6030C */ addiu $a2, $sp, 0x30c -/* 09858C 7F063A5C 00117180 */ sll $t6, $s1, 6 -/* 098590 7F063A60 01D72821 */ addu $a1, $t6, $s7 -/* 098594 7F063A64 0FC16008 */ jal matrix_4x4_copy -/* 098598 7F063A68 27A4030C */ addiu $a0, $sp, 0x30c -/* 09859C 7F063A6C 10000208 */ b .L7F064290 -/* 0985A0 7F063A70 26310001 */ addiu $s1, $s1, 1 -/* 0985A4 7F063A74 2401000B */ li $at, 11 -.L7F063A78: -/* 0985A8 7F063A78 1621002B */ bne $s1, $at, .L7F063B28 -/* 0985AC 7F063A7C 3C0A8003 */ lui $t2, %hi(D_80035D44+0x3C) -/* 0985B0 7F063A80 254A5D80 */ addiu $t2, %lo(D_80035D44+0x3C) # addiu $t2, $t2, 0x5d80 -/* 0985B4 7F063A84 8D410000 */ lw $at, ($t2) -/* 0985B8 7F063A88 27A901A8 */ addiu $t1, $sp, 0x1a8 -/* 0985BC 7F063A8C 8D4C0004 */ lw $t4, 4($t2) -/* 0985C0 7F063A90 AD210000 */ sw $at, ($t1) -/* 0985C4 7F063A94 8D410008 */ lw $at, 8($t2) -/* 0985C8 7F063A98 AD2C0004 */ sw $t4, 4($t1) -/* 0985CC 7F063A9C 27AD01B4 */ addiu $t5, $sp, 0x1b4 -/* 0985D0 7F063AA0 AD210008 */ sw $at, 8($t1) -/* 0985D4 7F063AA4 8FC100C4 */ lw $at, 0xc4($fp) -/* 0985D8 7F063AA8 24050010 */ li $a1, 16 -/* 0985DC 7F063AAC ADA10000 */ sw $at, ($t5) -/* 0985E0 7F063AB0 8FD800C8 */ lw $t8, 0xc8($fp) -/* 0985E4 7F063AB4 ADB80004 */ sw $t8, 4($t5) -/* 0985E8 7F063AB8 8FC100CC */ lw $at, 0xcc($fp) -/* 0985EC 7F063ABC ADA10008 */ sw $at, 8($t5) -/* 0985F0 7F063AC0 0C0030C3 */ jal joyGetButtons -/* 0985F4 7F063AC4 82840000 */ lb $a0, ($s4) -/* 0985F8 7F063AC8 10400004 */ beqz $v0, .L7F063ADC -/* 0985FC 7F063ACC 3C018005 */ lui $at, %hi(D_80053EF8) -/* 098600 7F063AD0 C42C3EF8 */ lwc1 $f12, %lo(D_80053EF8)($at) -/* 098604 7F063AD4 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 098608 7F063AD8 02602825 */ move $a1, $s3 -.L7F063ADC: -/* 09860C 7F063ADC 3C018005 */ lui $at, %hi(D_80053EFC) -/* 098610 7F063AE0 C42C3EFC */ lwc1 $f12, %lo(D_80053EFC)($at) -/* 098614 7F063AE4 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098618 7F063AE8 02402825 */ move $a1, $s2 -/* 09861C 7F063AEC 27A801B4 */ addiu $t0, $sp, 0x1b4 -/* 098620 7F063AF0 AFA80010 */ sw $t0, 0x10($sp) -/* 098624 7F063AF4 27A401A8 */ addiu $a0, $sp, 0x1a8 -/* 098628 7F063AF8 02602825 */ move $a1, $s3 -/* 09862C 7F063AFC 02403025 */ move $a2, $s2 -/* 098630 7F063B00 02C03825 */ move $a3, $s6 -/* 098634 7F063B04 AFB50014 */ sw $s5, 0x14($sp) -/* 098638 7F063B08 0FC18D47 */ jal sub_GAME_7F06351C -/* 09863C 7F063B0C AFB00018 */ sw $s0, 0x18($sp) -/* 098640 7F063B10 00117980 */ sll $t7, $s1, 6 -/* 098644 7F063B14 01F72821 */ addu $a1, $t7, $s7 -/* 098648 7F063B18 0FC16008 */ jal matrix_4x4_copy -/* 09864C 7F063B1C 02002025 */ move $a0, $s0 -/* 098650 7F063B20 100001DB */ b .L7F064290 -/* 098654 7F063B24 26310001 */ addiu $s1, $s1, 1 -.L7F063B28: -/* 098658 7F063B28 24010004 */ li $at, 4 -/* 09865C 7F063B2C 16210029 */ bne $s1, $at, .L7F063BD4 -/* 098660 7F063B30 3C0B8003 */ lui $t3, %hi(D_80035D44+0x48) -/* 098664 7F063B34 256B5D8C */ addiu $t3, %lo(D_80035D44+0x48) # addiu $t3, $t3, 0x5d8c -/* 098668 7F063B38 8D610000 */ lw $at, ($t3) -/* 09866C 7F063B3C 27AE0190 */ addiu $t6, $sp, 0x190 -/* 098670 7F063B40 8D6A0004 */ lw $t2, 4($t3) -/* 098674 7F063B44 ADC10000 */ sw $at, ($t6) -/* 098678 7F063B48 8D610008 */ lw $at, 8($t3) -/* 09867C 7F063B4C ADCA0004 */ sw $t2, 4($t6) -/* 098680 7F063B50 27AC019C */ addiu $t4, $sp, 0x19c -/* 098684 7F063B54 ADC10008 */ sw $at, 8($t6) -/* 098688 7F063B58 8FC10070 */ lw $at, 0x70($fp) -/* 09868C 7F063B5C 24050008 */ li $a1, 8 -/* 098690 7F063B60 AD810000 */ sw $at, ($t4) -/* 098694 7F063B64 8FCD0074 */ lw $t5, 0x74($fp) -/* 098698 7F063B68 AD8D0004 */ sw $t5, 4($t4) -/* 09869C 7F063B6C 8FC10078 */ lw $at, 0x78($fp) -/* 0986A0 7F063B70 AD810008 */ sw $at, 8($t4) -/* 0986A4 7F063B74 0C0030C3 */ jal joyGetButtons -/* 0986A8 7F063B78 82840000 */ lb $a0, ($s4) -/* 0986AC 7F063B7C 10400004 */ beqz $v0, .L7F063B90 -/* 0986B0 7F063B80 4600B306 */ mov.s $f12, $f22 -/* 0986B4 7F063B84 C7B00194 */ lwc1 $f16, 0x194($sp) -/* 0986B8 7F063B88 46148480 */ add.s $f18, $f16, $f20 -/* 0986BC 7F063B8C E7B20194 */ swc1 $f18, 0x194($sp) -.L7F063B90: -/* 0986C0 7F063B90 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 0986C4 7F063B94 02402825 */ move $a1, $s2 -/* 0986C8 7F063B98 27B8019C */ addiu $t8, $sp, 0x19c -/* 0986CC 7F063B9C AFB80010 */ sw $t8, 0x10($sp) -/* 0986D0 7F063BA0 27A40190 */ addiu $a0, $sp, 0x190 -/* 0986D4 7F063BA4 02602825 */ move $a1, $s3 -/* 0986D8 7F063BA8 02403025 */ move $a2, $s2 -/* 0986DC 7F063BAC 02C03825 */ move $a3, $s6 -/* 0986E0 7F063BB0 AFB50014 */ sw $s5, 0x14($sp) -/* 0986E4 7F063BB4 0FC18D47 */ jal sub_GAME_7F06351C -/* 0986E8 7F063BB8 AFB00018 */ sw $s0, 0x18($sp) -/* 0986EC 7F063BBC 00114180 */ sll $t0, $s1, 6 -/* 0986F0 7F063BC0 01172821 */ addu $a1, $t0, $s7 -/* 0986F4 7F063BC4 0FC16008 */ jal matrix_4x4_copy -/* 0986F8 7F063BC8 02002025 */ move $a0, $s0 -/* 0986FC 7F063BCC 100001B0 */ b .L7F064290 -/* 098700 7F063BD0 26310001 */ addiu $s1, $s1, 1 -.L7F063BD4: -/* 098704 7F063BD4 24010005 */ li $at, 5 -/* 098708 7F063BD8 16210029 */ bne $s1, $at, .L7F063C80 -/* 09870C 7F063BDC 3C098003 */ lui $t1, %hi(D_80035D44+0x54) -/* 098710 7F063BE0 25295D98 */ addiu $t1, %lo(D_80035D44+0x54) # addiu $t1, $t1, 0x5d98 -/* 098714 7F063BE4 8D210000 */ lw $at, ($t1) -/* 098718 7F063BE8 27AF0178 */ addiu $t7, $sp, 0x178 -/* 09871C 7F063BEC 8D2B0004 */ lw $t3, 4($t1) -/* 098720 7F063BF0 ADE10000 */ sw $at, ($t7) -/* 098724 7F063BF4 8D210008 */ lw $at, 8($t1) -/* 098728 7F063BF8 ADEB0004 */ sw $t3, 4($t7) -/* 09872C 7F063BFC 27AA0184 */ addiu $t2, $sp, 0x184 -/* 098730 7F063C00 ADE10008 */ sw $at, 8($t7) -/* 098734 7F063C04 8FC1007C */ lw $at, 0x7c($fp) -/* 098738 7F063C08 24050004 */ li $a1, 4 -/* 09873C 7F063C0C AD410000 */ sw $at, ($t2) -/* 098740 7F063C10 8FCC0080 */ lw $t4, 0x80($fp) -/* 098744 7F063C14 AD4C0004 */ sw $t4, 4($t2) -/* 098748 7F063C18 8FC10084 */ lw $at, 0x84($fp) -/* 09874C 7F063C1C AD410008 */ sw $at, 8($t2) -/* 098750 7F063C20 0C0030C3 */ jal joyGetButtons -/* 098754 7F063C24 82840000 */ lb $a0, ($s4) -/* 098758 7F063C28 10400004 */ beqz $v0, .L7F063C3C -/* 09875C 7F063C2C 4600B306 */ mov.s $f12, $f22 -/* 098760 7F063C30 C7A4017C */ lwc1 $f4, 0x17c($sp) -/* 098764 7F063C34 46142180 */ add.s $f6, $f4, $f20 -/* 098768 7F063C38 E7A6017C */ swc1 $f6, 0x17c($sp) -.L7F063C3C: -/* 09876C 7F063C3C 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098770 7F063C40 02402825 */ move $a1, $s2 -/* 098774 7F063C44 27AD0184 */ addiu $t5, $sp, 0x184 -/* 098778 7F063C48 AFAD0010 */ sw $t5, 0x10($sp) -/* 09877C 7F063C4C 27A40178 */ addiu $a0, $sp, 0x178 -/* 098780 7F063C50 02602825 */ move $a1, $s3 -/* 098784 7F063C54 02403025 */ move $a2, $s2 -/* 098788 7F063C58 02C03825 */ move $a3, $s6 -/* 09878C 7F063C5C AFB50014 */ sw $s5, 0x14($sp) -/* 098790 7F063C60 0FC18D47 */ jal sub_GAME_7F06351C -/* 098794 7F063C64 AFB00018 */ sw $s0, 0x18($sp) -/* 098798 7F063C68 0011C180 */ sll $t8, $s1, 6 -/* 09879C 7F063C6C 03172821 */ addu $a1, $t8, $s7 -/* 0987A0 7F063C70 0FC16008 */ jal matrix_4x4_copy -/* 0987A4 7F063C74 02002025 */ move $a0, $s0 -/* 0987A8 7F063C78 10000185 */ b .L7F064290 -/* 0987AC 7F063C7C 26310001 */ addiu $s1, $s1, 1 -.L7F063C80: -/* 0987B0 7F063C80 24010006 */ li $at, 6 -/* 0987B4 7F063C84 16210029 */ bne $s1, $at, .L7F063D2C -/* 0987B8 7F063C88 3C0E8003 */ lui $t6, %hi(D_80035D44+0x60) -/* 0987BC 7F063C8C 25CE5DA4 */ addiu $t6, %lo(D_80035D44+0x60) # addiu $t6, $t6, 0x5da4 -/* 0987C0 7F063C90 8DC10000 */ lw $at, ($t6) -/* 0987C4 7F063C94 27A80160 */ addiu $t0, $sp, 0x160 -/* 0987C8 7F063C98 8DC90004 */ lw $t1, 4($t6) -/* 0987CC 7F063C9C AD010000 */ sw $at, ($t0) -/* 0987D0 7F063CA0 8DC10008 */ lw $at, 8($t6) -/* 0987D4 7F063CA4 AD090004 */ sw $t1, 4($t0) -/* 0987D8 7F063CA8 27AB016C */ addiu $t3, $sp, 0x16c -/* 0987DC 7F063CAC AD010008 */ sw $at, 8($t0) -/* 0987E0 7F063CB0 8FC10088 */ lw $at, 0x88($fp) -/* 0987E4 7F063CB4 24050002 */ li $a1, 2 -/* 0987E8 7F063CB8 AD610000 */ sw $at, ($t3) -/* 0987EC 7F063CBC 8FCA008C */ lw $t2, 0x8c($fp) -/* 0987F0 7F063CC0 AD6A0004 */ sw $t2, 4($t3) -/* 0987F4 7F063CC4 8FC10090 */ lw $at, 0x90($fp) -/* 0987F8 7F063CC8 AD610008 */ sw $at, 8($t3) -/* 0987FC 7F063CCC 0C0030C3 */ jal joyGetButtons -/* 098800 7F063CD0 82840000 */ lb $a0, ($s4) -/* 098804 7F063CD4 10400004 */ beqz $v0, .L7F063CE8 -/* 098808 7F063CD8 4600B306 */ mov.s $f12, $f22 -/* 09880C 7F063CDC C7A80164 */ lwc1 $f8, 0x164($sp) -/* 098810 7F063CE0 46144280 */ add.s $f10, $f8, $f20 -/* 098814 7F063CE4 E7AA0164 */ swc1 $f10, 0x164($sp) -.L7F063CE8: -/* 098818 7F063CE8 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 09881C 7F063CEC 02402825 */ move $a1, $s2 -/* 098820 7F063CF0 27AC016C */ addiu $t4, $sp, 0x16c -/* 098824 7F063CF4 AFAC0010 */ sw $t4, 0x10($sp) -/* 098828 7F063CF8 27A40160 */ addiu $a0, $sp, 0x160 -/* 09882C 7F063CFC 02602825 */ move $a1, $s3 -/* 098830 7F063D00 02403025 */ move $a2, $s2 -/* 098834 7F063D04 02C03825 */ move $a3, $s6 -/* 098838 7F063D08 AFB50014 */ sw $s5, 0x14($sp) -/* 09883C 7F063D0C 0FC18D47 */ jal sub_GAME_7F06351C -/* 098840 7F063D10 AFB00018 */ sw $s0, 0x18($sp) -/* 098844 7F063D14 00116980 */ sll $t5, $s1, 6 -/* 098848 7F063D18 01B72821 */ addu $a1, $t5, $s7 -/* 09884C 7F063D1C 0FC16008 */ jal matrix_4x4_copy -/* 098850 7F063D20 02002025 */ move $a0, $s0 -/* 098854 7F063D24 1000015A */ b .L7F064290 -/* 098858 7F063D28 26310001 */ addiu $s1, $s1, 1 -.L7F063D2C: -/* 09885C 7F063D2C 24010007 */ li $at, 7 -/* 098860 7F063D30 16210029 */ bne $s1, $at, .L7F063DD8 -/* 098864 7F063D34 3C0F8003 */ lui $t7, %hi(D_80035D44+0x6C) -/* 098868 7F063D38 25EF5DB0 */ addiu $t7, %lo(D_80035D44+0x6C) # addiu $t7, $t7, 0x5db0 -/* 09886C 7F063D3C 8DE10000 */ lw $at, ($t7) -/* 098870 7F063D40 27B80148 */ addiu $t8, $sp, 0x148 -/* 098874 7F063D44 8DEE0004 */ lw $t6, 4($t7) -/* 098878 7F063D48 AF010000 */ sw $at, ($t8) -/* 09887C 7F063D4C 8DE10008 */ lw $at, 8($t7) -/* 098880 7F063D50 AF0E0004 */ sw $t6, 4($t8) -/* 098884 7F063D54 27A90154 */ addiu $t1, $sp, 0x154 -/* 098888 7F063D58 AF010008 */ sw $at, 8($t8) -/* 09888C 7F063D5C 8FC10094 */ lw $at, 0x94($fp) -/* 098890 7F063D60 24050001 */ li $a1, 1 -/* 098894 7F063D64 AD210000 */ sw $at, ($t1) -/* 098898 7F063D68 8FCB0098 */ lw $t3, 0x98($fp) -/* 09889C 7F063D6C AD2B0004 */ sw $t3, 4($t1) -/* 0988A0 7F063D70 8FC1009C */ lw $at, 0x9c($fp) -/* 0988A4 7F063D74 AD210008 */ sw $at, 8($t1) -/* 0988A8 7F063D78 0C0030C3 */ jal joyGetButtons -/* 0988AC 7F063D7C 82840000 */ lb $a0, ($s4) -/* 0988B0 7F063D80 10400004 */ beqz $v0, .L7F063D94 -/* 0988B4 7F063D84 4600B306 */ mov.s $f12, $f22 -/* 0988B8 7F063D88 C7B0014C */ lwc1 $f16, 0x14c($sp) -/* 0988BC 7F063D8C 46148480 */ add.s $f18, $f16, $f20 -/* 0988C0 7F063D90 E7B2014C */ swc1 $f18, 0x14c($sp) -.L7F063D94: -/* 0988C4 7F063D94 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 0988C8 7F063D98 02402825 */ move $a1, $s2 -/* 0988CC 7F063D9C 27AA0154 */ addiu $t2, $sp, 0x154 -/* 0988D0 7F063DA0 AFAA0010 */ sw $t2, 0x10($sp) -/* 0988D4 7F063DA4 27A40148 */ addiu $a0, $sp, 0x148 -/* 0988D8 7F063DA8 02602825 */ move $a1, $s3 -/* 0988DC 7F063DAC 02403025 */ move $a2, $s2 -/* 0988E0 7F063DB0 02C03825 */ move $a3, $s6 -/* 0988E4 7F063DB4 AFB50014 */ sw $s5, 0x14($sp) -/* 0988E8 7F063DB8 0FC18D47 */ jal sub_GAME_7F06351C -/* 0988EC 7F063DBC AFB00018 */ sw $s0, 0x18($sp) -/* 0988F0 7F063DC0 00116180 */ sll $t4, $s1, 6 -/* 0988F4 7F063DC4 01972821 */ addu $a1, $t4, $s7 -/* 0988F8 7F063DC8 0FC16008 */ jal matrix_4x4_copy -/* 0988FC 7F063DCC 02002025 */ move $a0, $s0 -/* 098900 7F063DD0 1000012F */ b .L7F064290 -/* 098904 7F063DD4 26310001 */ addiu $s1, $s1, 1 -.L7F063DD8: -/* 098908 7F063DD8 24010009 */ li $at, 9 -/* 09890C 7F063DDC 16210029 */ bne $s1, $at, .L7F063E84 -/* 098910 7F063DE0 3C088003 */ lui $t0, %hi(D_80035D44+0x78) -/* 098914 7F063DE4 25085DBC */ addiu $t0, %lo(D_80035D44+0x78) # addiu $t0, $t0, 0x5dbc -/* 098918 7F063DE8 8D010000 */ lw $at, ($t0) -/* 09891C 7F063DEC 27AD0130 */ addiu $t5, $sp, 0x130 -/* 098920 7F063DF0 8D0F0004 */ lw $t7, 4($t0) -/* 098924 7F063DF4 ADA10000 */ sw $at, ($t5) -/* 098928 7F063DF8 8D010008 */ lw $at, 8($t0) -/* 09892C 7F063DFC ADAF0004 */ sw $t7, 4($t5) -/* 098930 7F063E00 27AE013C */ addiu $t6, $sp, 0x13c -/* 098934 7F063E04 ADA10008 */ sw $at, 8($t5) -/* 098938 7F063E08 8FC100AC */ lw $at, 0xac($fp) -/* 09893C 7F063E0C 24054000 */ li $a1, 16384 -/* 098940 7F063E10 ADC10000 */ sw $at, ($t6) -/* 098944 7F063E14 8FC900B0 */ lw $t1, 0xb0($fp) -/* 098948 7F063E18 ADC90004 */ sw $t1, 4($t6) -/* 09894C 7F063E1C 8FC100B4 */ lw $at, 0xb4($fp) -/* 098950 7F063E20 ADC10008 */ sw $at, 8($t6) -/* 098954 7F063E24 0C0030C3 */ jal joyGetButtons -/* 098958 7F063E28 82840000 */ lb $a0, ($s4) -/* 09895C 7F063E2C 10400004 */ beqz $v0, .L7F063E40 -/* 098960 7F063E30 4600B306 */ mov.s $f12, $f22 -/* 098964 7F063E34 C7A40134 */ lwc1 $f4, 0x134($sp) -/* 098968 7F063E38 46142180 */ add.s $f6, $f4, $f20 -/* 09896C 7F063E3C E7A60134 */ swc1 $f6, 0x134($sp) -.L7F063E40: -/* 098970 7F063E40 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098974 7F063E44 02402825 */ move $a1, $s2 -/* 098978 7F063E48 27AB013C */ addiu $t3, $sp, 0x13c -/* 09897C 7F063E4C AFAB0010 */ sw $t3, 0x10($sp) -/* 098980 7F063E50 27A40130 */ addiu $a0, $sp, 0x130 -/* 098984 7F063E54 02602825 */ move $a1, $s3 -/* 098988 7F063E58 02403025 */ move $a2, $s2 -/* 09898C 7F063E5C 02C03825 */ move $a3, $s6 -/* 098990 7F063E60 AFB50014 */ sw $s5, 0x14($sp) -/* 098994 7F063E64 0FC18D47 */ jal sub_GAME_7F06351C -/* 098998 7F063E68 AFB00018 */ sw $s0, 0x18($sp) -/* 09899C 7F063E6C 00115180 */ sll $t2, $s1, 6 -/* 0989A0 7F063E70 01572821 */ addu $a1, $t2, $s7 -/* 0989A4 7F063E74 0FC16008 */ jal matrix_4x4_copy -/* 0989A8 7F063E78 02002025 */ move $a0, $s0 -/* 0989AC 7F063E7C 10000104 */ b .L7F064290 -/* 0989B0 7F063E80 26310001 */ addiu $s1, $s1, 1 -.L7F063E84: -/* 0989B4 7F063E84 24010008 */ li $at, 8 -/* 0989B8 7F063E88 16210029 */ bne $s1, $at, .L7F063F30 -/* 0989BC 7F063E8C 3C188003 */ lui $t8, %hi(D_80035D44+0x84) -/* 0989C0 7F063E90 27185DC8 */ addiu $t8, %lo(D_80035D44+0x84) # addiu $t8, $t8, 0x5dc8 -/* 0989C4 7F063E94 8F010000 */ lw $at, ($t8) -/* 0989C8 7F063E98 27AC0118 */ addiu $t4, $sp, 0x118 -/* 0989CC 7F063E9C 8F080004 */ lw $t0, 4($t8) -/* 0989D0 7F063EA0 AD810000 */ sw $at, ($t4) -/* 0989D4 7F063EA4 8F010008 */ lw $at, 8($t8) -/* 0989D8 7F063EA8 AD880004 */ sw $t0, 4($t4) -/* 0989DC 7F063EAC 27AF0124 */ addiu $t7, $sp, 0x124 -/* 0989E0 7F063EB0 AD810008 */ sw $at, 8($t4) -/* 0989E4 7F063EB4 8FC100A0 */ lw $at, 0xa0($fp) -/* 0989E8 7F063EB8 34058000 */ li $a1, 32768 -/* 0989EC 7F063EBC ADE10000 */ sw $at, ($t7) -/* 0989F0 7F063EC0 8FCE00A4 */ lw $t6, 0xa4($fp) -/* 0989F4 7F063EC4 ADEE0004 */ sw $t6, 4($t7) -/* 0989F8 7F063EC8 8FC100A8 */ lw $at, 0xa8($fp) -/* 0989FC 7F063ECC ADE10008 */ sw $at, 8($t7) -/* 098A00 7F063ED0 0C0030C3 */ jal joyGetButtons -/* 098A04 7F063ED4 82840000 */ lb $a0, ($s4) -/* 098A08 7F063ED8 10400004 */ beqz $v0, .L7F063EEC -/* 098A0C 7F063EDC 4600B306 */ mov.s $f12, $f22 -/* 098A10 7F063EE0 C7A8011C */ lwc1 $f8, 0x11c($sp) -/* 098A14 7F063EE4 46144280 */ add.s $f10, $f8, $f20 -/* 098A18 7F063EE8 E7AA011C */ swc1 $f10, 0x11c($sp) -.L7F063EEC: -/* 098A1C 7F063EEC 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098A20 7F063EF0 02402825 */ move $a1, $s2 -/* 098A24 7F063EF4 27A90124 */ addiu $t1, $sp, 0x124 -/* 098A28 7F063EF8 AFA90010 */ sw $t1, 0x10($sp) -/* 098A2C 7F063EFC 27A40118 */ addiu $a0, $sp, 0x118 -/* 098A30 7F063F00 02602825 */ move $a1, $s3 -/* 098A34 7F063F04 02403025 */ move $a2, $s2 -/* 098A38 7F063F08 02C03825 */ move $a3, $s6 -/* 098A3C 7F063F0C AFB50014 */ sw $s5, 0x14($sp) -/* 098A40 7F063F10 0FC18D47 */ jal sub_GAME_7F06351C -/* 098A44 7F063F14 AFB00018 */ sw $s0, 0x18($sp) -/* 098A48 7F063F18 00115980 */ sll $t3, $s1, 6 -/* 098A4C 7F063F1C 01772821 */ addu $a1, $t3, $s7 -/* 098A50 7F063F20 0FC16008 */ jal matrix_4x4_copy -/* 098A54 7F063F24 02002025 */ move $a0, $s0 -/* 098A58 7F063F28 100000D9 */ b .L7F064290 -/* 098A5C 7F063F2C 26310001 */ addiu $s1, $s1, 1 -.L7F063F30: -/* 098A60 7F063F30 2401000A */ li $at, 10 -/* 098A64 7F063F34 1621002B */ bne $s1, $at, .L7F063FE4 -/* 098A68 7F063F38 3C0D8003 */ lui $t5, %hi(D_80035D44+0x90) -/* 098A6C 7F063F3C 25AD5DD4 */ addiu $t5, %lo(D_80035D44+0x90) # addiu $t5, $t5, 0x5dd4 -/* 098A70 7F063F40 8DA10000 */ lw $at, ($t5) -/* 098A74 7F063F44 27AA0100 */ addiu $t2, $sp, 0x100 -/* 098A78 7F063F48 8DB80004 */ lw $t8, 4($t5) -/* 098A7C 7F063F4C AD410000 */ sw $at, ($t2) -/* 098A80 7F063F50 8DA10008 */ lw $at, 8($t5) -/* 098A84 7F063F54 AD580004 */ sw $t8, 4($t2) -/* 098A88 7F063F58 27A8010C */ addiu $t0, $sp, 0x10c -/* 098A8C 7F063F5C AD410008 */ sw $at, 8($t2) -/* 098A90 7F063F60 8FC100B8 */ lw $at, 0xb8($fp) -/* 098A94 7F063F64 24050020 */ li $a1, 32 -/* 098A98 7F063F68 AD010000 */ sw $at, ($t0) -/* 098A9C 7F063F6C 8FCF00BC */ lw $t7, 0xbc($fp) -/* 098AA0 7F063F70 AD0F0004 */ sw $t7, 4($t0) -/* 098AA4 7F063F74 8FC100C0 */ lw $at, 0xc0($fp) -/* 098AA8 7F063F78 AD010008 */ sw $at, 8($t0) -/* 098AAC 7F063F7C 0C0030C3 */ jal joyGetButtons -/* 098AB0 7F063F80 82840000 */ lb $a0, ($s4) -/* 098AB4 7F063F84 10400004 */ beqz $v0, .L7F063F98 -/* 098AB8 7F063F88 3C018005 */ lui $at, %hi(D_80053F00) -/* 098ABC 7F063F8C C42C3F00 */ lwc1 $f12, %lo(D_80053F00)($at) -/* 098AC0 7F063F90 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 098AC4 7F063F94 02602825 */ move $a1, $s3 -.L7F063F98: -/* 098AC8 7F063F98 3C018005 */ lui $at, %hi(D_80053F04) -/* 098ACC 7F063F9C C42C3F04 */ lwc1 $f12, %lo(D_80053F04)($at) -/* 098AD0 7F063FA0 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098AD4 7F063FA4 02402825 */ move $a1, $s2 -/* 098AD8 7F063FA8 27AE010C */ addiu $t6, $sp, 0x10c -/* 098ADC 7F063FAC AFAE0010 */ sw $t6, 0x10($sp) -/* 098AE0 7F063FB0 27A40100 */ addiu $a0, $sp, 0x100 -/* 098AE4 7F063FB4 02602825 */ move $a1, $s3 -/* 098AE8 7F063FB8 02403025 */ move $a2, $s2 -/* 098AEC 7F063FBC 02C03825 */ move $a3, $s6 -/* 098AF0 7F063FC0 AFB50014 */ sw $s5, 0x14($sp) -/* 098AF4 7F063FC4 0FC18D47 */ jal sub_GAME_7F06351C -/* 098AF8 7F063FC8 AFB00018 */ sw $s0, 0x18($sp) -/* 098AFC 7F063FCC 00114980 */ sll $t1, $s1, 6 -/* 098B00 7F063FD0 01372821 */ addu $a1, $t1, $s7 -/* 098B04 7F063FD4 0FC16008 */ jal matrix_4x4_copy -/* 098B08 7F063FD8 02002025 */ move $a0, $s0 -/* 098B0C 7F063FDC 100000AC */ b .L7F064290 -/* 098B10 7F063FE0 26310001 */ addiu $s1, $s1, 1 -.L7F063FE4: -/* 098B14 7F063FE4 24010003 */ li $at, 3 -/* 098B18 7F063FE8 1621004C */ bne $s1, $at, .L7F06411C -/* 098B1C 7F063FEC 3C0C8003 */ lui $t4, %hi(D_80035D44+0x9C) -/* 098B20 7F063FF0 258C5DE0 */ addiu $t4, %lo(D_80035D44+0x9C) # addiu $t4, $t4, 0x5de0 -/* 098B24 7F063FF4 8D810000 */ lw $at, ($t4) -/* 098B28 7F063FF8 27AB00A8 */ addiu $t3, $sp, 0xa8 -/* 098B2C 7F063FFC 8D8D0004 */ lw $t5, 4($t4) -/* 098B30 7F064000 AD610000 */ sw $at, ($t3) -/* 098B34 7F064004 8D810008 */ lw $at, 8($t4) -/* 098B38 7F064008 AD6D0004 */ sw $t5, 4($t3) -/* 098B3C 7F06400C 27B800F4 */ addiu $t8, $sp, 0xf4 -/* 098B40 7F064010 AD610008 */ sw $at, 8($t3) -/* 098B44 7F064014 8FC10064 */ lw $at, 0x64($fp) -/* 098B48 7F064018 27A400B4 */ addiu $a0, $sp, 0xb4 -/* 098B4C 7F06401C AF010000 */ sw $at, ($t8) -/* 098B50 7F064020 8FC80068 */ lw $t0, 0x68($fp) -/* 098B54 7F064024 AF080004 */ sw $t0, 4($t8) -/* 098B58 7F064028 8FC1006C */ lw $at, 0x6c($fp) -/* 098B5C 7F06402C 0FC15FF4 */ jal matrix_4x4_set_identity -/* 098B60 7F064030 AF010008 */ sw $at, 8($t8) -/* 098B64 7F064034 82840000 */ lb $a0, ($s4) -/* 098B68 7F064038 0C0030C3 */ jal joyGetButtons -/* 098B6C 7F06403C 24050800 */ li $a1, 2048 -/* 098B70 7F064040 10400007 */ beqz $v0, .L7F064060 -/* 098B74 7F064044 24050400 */ li $a1, 1024 -/* 098B78 7F064048 3C018005 */ lui $at, %hi(D_80053F08) -/* 098B7C 7F06404C C42C3F08 */ lwc1 $f12, %lo(D_80053F08)($at) -/* 098B80 7F064050 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098B84 7F064054 02602825 */ move $a1, $s3 -/* 098B88 7F064058 10000009 */ b .L7F064080 -/* 098B8C 7F06405C 82840000 */ lb $a0, ($s4) -.L7F064060: -/* 098B90 7F064060 0C0030C3 */ jal joyGetButtons -/* 098B94 7F064064 82840000 */ lb $a0, ($s4) -/* 098B98 7F064068 10400004 */ beqz $v0, .L7F06407C -/* 098B9C 7F06406C 3C018005 */ lui $at, %hi(D_80053F0C) -/* 098BA0 7F064070 C42C3F0C */ lwc1 $f12, %lo(D_80053F0C)($at) -/* 098BA4 7F064074 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098BA8 7F064078 02602825 */ move $a1, $s3 -.L7F06407C: -/* 098BAC 7F06407C 82840000 */ lb $a0, ($s4) -.L7F064080: -/* 098BB0 7F064080 0C0030C3 */ jal joyGetButtons -/* 098BB4 7F064084 24050200 */ li $a1, 512 -/* 098BB8 7F064088 10400007 */ beqz $v0, .L7F0640A8 -/* 098BBC 7F06408C 24050100 */ li $a1, 256 -/* 098BC0 7F064090 3C018005 */ lui $at, %hi(D_80053F10) -/* 098BC4 7F064094 C42C3F10 */ lwc1 $f12, %lo(D_80053F10)($at) -/* 098BC8 7F064098 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 098BCC 7F06409C 27A500B4 */ addiu $a1, $sp, 0xb4 -/* 098BD0 7F0640A0 10000009 */ b .L7F0640C8 -/* 098BD4 7F0640A4 27A400B4 */ addiu $a0, $sp, 0xb4 -.L7F0640A8: -/* 098BD8 7F0640A8 0C0030C3 */ jal joyGetButtons -/* 098BDC 7F0640AC 82840000 */ lb $a0, ($s4) -/* 098BE0 7F0640B0 10400004 */ beqz $v0, .L7F0640C4 -/* 098BE4 7F0640B4 3C018005 */ lui $at, %hi(D_80053F14) -/* 098BE8 7F0640B8 C42C3F14 */ lwc1 $f12, %lo(D_80053F14)($at) -/* 098BEC 7F0640BC 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 098BF0 7F0640C0 27A500B4 */ addiu $a1, $sp, 0xb4 -.L7F0640C4: -/* 098BF4 7F0640C4 27A400B4 */ addiu $a0, $sp, 0xb4 -.L7F0640C8: -/* 098BF8 7F0640C8 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 098BFC 7F0640CC 02602825 */ move $a1, $s3 -/* 098C00 7F0640D0 3C018005 */ lui $at, %hi(D_80053F18) -/* 098C04 7F0640D4 C42C3F18 */ lwc1 $f12, %lo(D_80053F18)($at) -/* 098C08 7F0640D8 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098C0C 7F0640DC 02402825 */ move $a1, $s2 -/* 098C10 7F0640E0 27AF00F4 */ addiu $t7, $sp, 0xf4 -/* 098C14 7F0640E4 AFAF0010 */ sw $t7, 0x10($sp) -/* 098C18 7F0640E8 27A400A8 */ addiu $a0, $sp, 0xa8 -/* 098C1C 7F0640EC 02602825 */ move $a1, $s3 -/* 098C20 7F0640F0 02403025 */ move $a2, $s2 -/* 098C24 7F0640F4 02C03825 */ move $a3, $s6 -/* 098C28 7F0640F8 AFB50014 */ sw $s5, 0x14($sp) -/* 098C2C 7F0640FC 0FC18D47 */ jal sub_GAME_7F06351C -/* 098C30 7F064100 AFB00018 */ sw $s0, 0x18($sp) -/* 098C34 7F064104 00117180 */ sll $t6, $s1, 6 -/* 098C38 7F064108 01D72821 */ addu $a1, $t6, $s7 -/* 098C3C 7F06410C 0FC16008 */ jal matrix_4x4_copy -/* 098C40 7F064110 02002025 */ move $a0, $s0 -/* 098C44 7F064114 1000005E */ b .L7F064290 -/* 098C48 7F064118 26310001 */ addiu $s1, $s1, 1 -.L7F06411C: -/* 098C4C 7F06411C 24010001 */ li $at, 1 -/* 098C50 7F064120 16210029 */ bne $s1, $at, .L7F0641C8 -/* 098C54 7F064124 3C0A8003 */ lui $t2, %hi(D_80035D44+0xA8) -/* 098C58 7F064128 254A5DEC */ addiu $t2, %lo(D_80035D44+0xA8) # addiu $t2, $t2, 0x5dec -/* 098C5C 7F06412C 8D410000 */ lw $at, ($t2) -/* 098C60 7F064130 27A90090 */ addiu $t1, $sp, 0x90 -/* 098C64 7F064134 8D4C0004 */ lw $t4, 4($t2) -/* 098C68 7F064138 AD210000 */ sw $at, ($t1) -/* 098C6C 7F06413C 8D410008 */ lw $at, 8($t2) -/* 098C70 7F064140 AD2C0004 */ sw $t4, 4($t1) -/* 098C74 7F064144 27AD009C */ addiu $t5, $sp, 0x9c -/* 098C78 7F064148 AD210008 */ sw $at, 8($t1) -/* 098C7C 7F06414C 8FC1004C */ lw $at, 0x4c($fp) -/* 098C80 7F064150 24051000 */ li $a1, 4096 -/* 098C84 7F064154 ADA10000 */ sw $at, ($t5) -/* 098C88 7F064158 8FD80050 */ lw $t8, 0x50($fp) -/* 098C8C 7F06415C ADB80004 */ sw $t8, 4($t5) -/* 098C90 7F064160 8FC10054 */ lw $at, 0x54($fp) -/* 098C94 7F064164 ADA10008 */ sw $at, 8($t5) -/* 098C98 7F064168 0C0030C3 */ jal joyGetButtons -/* 098C9C 7F06416C 82840000 */ lb $a0, ($s4) -/* 098CA0 7F064170 10400004 */ beqz $v0, .L7F064184 -/* 098CA4 7F064174 4600B306 */ mov.s $f12, $f22 -/* 098CA8 7F064178 C7B00094 */ lwc1 $f16, 0x94($sp) -/* 098CAC 7F06417C 46148480 */ add.s $f18, $f16, $f20 -/* 098CB0 7F064180 E7B20094 */ swc1 $f18, 0x94($sp) -.L7F064184: -/* 098CB4 7F064184 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098CB8 7F064188 02402825 */ move $a1, $s2 -/* 098CBC 7F06418C 27A8009C */ addiu $t0, $sp, 0x9c -/* 098CC0 7F064190 AFA80010 */ sw $t0, 0x10($sp) -/* 098CC4 7F064194 27A40090 */ addiu $a0, $sp, 0x90 -/* 098CC8 7F064198 02602825 */ move $a1, $s3 -/* 098CCC 7F06419C 02403025 */ move $a2, $s2 -/* 098CD0 7F0641A0 02C03825 */ move $a3, $s6 -/* 098CD4 7F0641A4 AFB50014 */ sw $s5, 0x14($sp) -/* 098CD8 7F0641A8 0FC18D47 */ jal sub_GAME_7F06351C -/* 098CDC 7F0641AC AFB00018 */ sw $s0, 0x18($sp) -/* 098CE0 7F0641B0 00117980 */ sll $t7, $s1, 6 -/* 098CE4 7F0641B4 01F72821 */ addu $a1, $t7, $s7 -/* 098CE8 7F0641B8 0FC16008 */ jal matrix_4x4_copy -/* 098CEC 7F0641BC 02002025 */ move $a0, $s0 -/* 098CF0 7F0641C0 10000033 */ b .L7F064290 -/* 098CF4 7F0641C4 26310001 */ addiu $s1, $s1, 1 -.L7F0641C8: -/* 098CF8 7F0641C8 2401000C */ li $at, 12 -/* 098CFC 7F0641CC 1621002C */ bne $s1, $at, .L7F064280 -/* 098D00 7F0641D0 8FA4053C */ lw $a0, 0x53c($sp) -/* 098D04 7F0641D4 3C0B8003 */ lui $t3, %hi(D_80035D44+0xB4) -/* 098D08 7F0641D8 256B5DF8 */ addiu $t3, %lo(D_80035D44+0xB4) # addiu $t3, $t3, 0x5df8 -/* 098D0C 7F0641DC 8D610000 */ lw $at, ($t3) -/* 098D10 7F0641E0 27AE0078 */ addiu $t6, $sp, 0x78 -/* 098D14 7F0641E4 8D6A0004 */ lw $t2, 4($t3) -/* 098D18 7F0641E8 ADC10000 */ sw $at, ($t6) -/* 098D1C 7F0641EC 8D610008 */ lw $at, 8($t3) -/* 098D20 7F0641F0 ADCA0004 */ sw $t2, 4($t6) -/* 098D24 7F0641F4 27AC0084 */ addiu $t4, $sp, 0x84 -/* 098D28 7F0641F8 ADC10008 */ sw $at, 8($t6) -/* 098D2C 7F0641FC 8FC100D0 */ lw $at, 0xd0($fp) -/* 098D30 7F064200 24052000 */ li $a1, 8192 -/* 098D34 7F064204 AD810000 */ sw $at, ($t4) -/* 098D38 7F064208 8FCD00D4 */ lw $t5, 0xd4($fp) -/* 098D3C 7F06420C AD8D0004 */ sw $t5, 4($t4) -/* 098D40 7F064210 8FC100D8 */ lw $at, 0xd8($fp) -/* 098D44 7F064214 AD810008 */ sw $at, 8($t4) -/* 098D48 7F064218 0C0030C3 */ jal joyGetButtons -/* 098D4C 7F06421C 82840000 */ lb $a0, ($s4) -/* 098D50 7F064220 10400004 */ beqz $v0, .L7F064234 -/* 098D54 7F064224 3C018005 */ lui $at, %hi(D_80053F1C) -/* 098D58 7F064228 C42C3F1C */ lwc1 $f12, %lo(D_80053F1C)($at) -/* 098D5C 7F06422C 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 098D60 7F064230 02602825 */ move $a1, $s3 -.L7F064234: -/* 098D64 7F064234 3C018005 */ lui $at, %hi(D_80053F20) -/* 098D68 7F064238 C42C3F20 */ lwc1 $f12, %lo(D_80053F20)($at) -/* 098D6C 7F06423C 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 098D70 7F064240 02402825 */ move $a1, $s2 -/* 098D74 7F064244 27B80084 */ addiu $t8, $sp, 0x84 -/* 098D78 7F064248 AFB80010 */ sw $t8, 0x10($sp) -/* 098D7C 7F06424C 27A40078 */ addiu $a0, $sp, 0x78 -/* 098D80 7F064250 02602825 */ move $a1, $s3 -/* 098D84 7F064254 02403025 */ move $a2, $s2 -/* 098D88 7F064258 02C03825 */ move $a3, $s6 -/* 098D8C 7F06425C AFB50014 */ sw $s5, 0x14($sp) -/* 098D90 7F064260 0FC18D47 */ jal sub_GAME_7F06351C -/* 098D94 7F064264 AFB00018 */ sw $s0, 0x18($sp) -/* 098D98 7F064268 00114180 */ sll $t0, $s1, 6 -/* 098D9C 7F06426C 01172821 */ addu $a1, $t0, $s7 -/* 098DA0 7F064270 0FC16008 */ jal matrix_4x4_copy -/* 098DA4 7F064274 02002025 */ move $a0, $s0 -/* 098DA8 7F064278 10000005 */ b .L7F064290 -/* 098DAC 7F06427C 26310001 */ addiu $s1, $s1, 1 -.L7F064280: -/* 098DB0 7F064280 00117980 */ sll $t7, $s1, 6 -/* 098DB4 7F064284 0FC16008 */ jal matrix_4x4_copy -/* 098DB8 7F064288 01F72821 */ addu $a1, $t7, $s7 -/* 098DBC 7F06428C 26310001 */ addiu $s1, $s1, 1 -.L7F064290: -/* 098DC0 7F064290 2A21000D */ slti $at, $s1, 0xd -/* 098DC4 7F064294 5420FD91 */ bnezl $at, .L7F0638DC -/* 098DC8 7F064298 3C01C0A0 */ lui $at, 0xc0a0 -/* 098DCC 7F06429C 0FC1BBF1 */ jal modelUpdateNodeRelations -/* 098DD0 7F0642A0 27A404D8 */ addiu $a0, $sp, 0x4d8 -/* 098DD4 7F0642A4 8FA90538 */ lw $t1, 0x538($sp) -/* 098DD8 7F0642A8 27A404F8 */ addiu $a0, $sp, 0x4f8 -/* 098DDC 7F0642AC 27A504D8 */ addiu $a1, $sp, 0x4d8 -/* 098DE0 7F0642B0 0FC1D1A1 */ jal subdraw -/* 098DE4 7F0642B4 AFA90504 */ sw $t1, 0x504($sp) -/* 098DE8 7F0642B8 8FAE0504 */ lw $t6, 0x504($sp) -/* 098DEC 7F0642BC 0FC16319 */ jal matrix_4x4_7F058C64 -/* 098DF0 7F0642C0 AFAE0538 */ sw $t6, 0x538($sp) -/* 098DF4 7F0642C4 8FAB03D8 */ lw $t3, 0x3d8($sp) -/* 098DF8 7F0642C8 00008825 */ move $s1, $zero -/* 098DFC 7F0642CC 00008025 */ move $s0, $zero -/* 098E00 7F0642D0 856A000E */ lh $t2, 0xe($t3) -/* 098E04 7F0642D4 19400011 */ blez $t2, .L7F06431C -/* 098E08 7F0642D8 00000000 */ nop -/* 098E0C 7F0642DC 8FB904E4 */ lw $t9, 0x4e4($sp) -.L7F0642E0: -/* 098E10 7F0642E0 27A5041C */ addiu $a1, $sp, 0x41c -/* 098E14 7F0642E4 0FC16008 */ jal matrix_4x4_copy -/* 098E18 7F0642E8 03302021 */ addu $a0, $t9, $s0 -/* 098E1C 7F0642EC 8FAD04E4 */ lw $t5, 0x4e4($sp) -/* 098E20 7F0642F0 00116180 */ sll $t4, $s1, 6 -/* 098E24 7F0642F4 27A4041C */ addiu $a0, $sp, 0x41c -/* 098E28 7F0642F8 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 098E2C 7F0642FC 018D2821 */ addu $a1, $t4, $t5 -/* 098E30 7F064300 8FB803D8 */ lw $t8, 0x3d8($sp) -/* 098E34 7F064304 26310001 */ addiu $s1, $s1, 1 -/* 098E38 7F064308 26100040 */ addiu $s0, $s0, 0x40 -/* 098E3C 7F06430C 8708000E */ lh $t0, 0xe($t8) -/* 098E40 7F064310 0228082A */ slt $at, $s1, $t0 -/* 098E44 7F064314 5420FFF2 */ bnezl $at, .L7F0642E0 -/* 098E48 7F064318 8FB904E4 */ lw $t9, 0x4e4($sp) -.L7F06431C: -/* 098E4C 7F06431C 0FC16322 */ jal matrix_4x4_7F058C88 -/* 098E50 7F064320 00000000 */ nop -.L7F064324: -/* 098E54 7F064324 8FA20538 */ lw $v0, 0x538($sp) -.L7F064328: -/* 098E58 7F064328 8FBF006C */ lw $ra, 0x6c($sp) -/* 098E5C 7F06432C D7B40030 */ ldc1 $f20, 0x30($sp) -/* 098E60 7F064330 D7B60038 */ ldc1 $f22, 0x38($sp) -/* 098E64 7F064334 D7B80040 */ ldc1 $f24, 0x40($sp) -/* 098E68 7F064338 8FB00048 */ lw $s0, 0x48($sp) -/* 098E6C 7F06433C 8FB1004C */ lw $s1, 0x4c($sp) -/* 098E70 7F064340 8FB20050 */ lw $s2, 0x50($sp) -/* 098E74 7F064344 8FB30054 */ lw $s3, 0x54($sp) -/* 098E78 7F064348 8FB40058 */ lw $s4, 0x58($sp) -/* 098E7C 7F06434C 8FB5005C */ lw $s5, 0x5c($sp) -/* 098E80 7F064350 8FB60060 */ lw $s6, 0x60($sp) -/* 098E84 7F064354 8FB70064 */ lw $s7, 0x64($sp) -/* 098E88 7F064358 8FBE0068 */ lw $fp, 0x68($sp) -/* 098E8C 7F06435C 03E00008 */ jr $ra -/* 098E90 7F064360 27BD0538 */ addiu $sp, $sp, 0x538 -) -#endif - - - -#ifdef NONMATCHING -void sub_GAME_7F064364(void) { - +/** + * Address: 7F064364 + */ +Gfx *watchRenderControllerOpaque(Gfx *gdl, Mtxf *basemtx, bool animatebuttons, WatchContButtonPositions *buttonpositions, s8 *contpadnum) +{ + return watchRenderController(gdl, basemtx, 0xff, animatebuttons, buttonpositions, contpadnum); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F064364 -/* 098E94 7F064364 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 098E98 7F064368 AFA7002C */ sw $a3, 0x2c($sp) -/* 098E9C 7F06436C 8FAE002C */ lw $t6, 0x2c($sp) -/* 098EA0 7F064370 8FAF0030 */ lw $t7, 0x30($sp) -/* 098EA4 7F064374 00C03825 */ move $a3, $a2 -/* 098EA8 7F064378 AFBF001C */ sw $ra, 0x1c($sp) -/* 098EAC 7F06437C AFA60028 */ sw $a2, 0x28($sp) -/* 098EB0 7F064380 240600FF */ li $a2, 255 -/* 098EB4 7F064384 AFAE0010 */ sw $t6, 0x10($sp) -/* 098EB8 7F064388 0FC18D67 */ jal sub_GAME_7F06359C -/* 098EBC 7F06438C AFAF0014 */ sw $t7, 0x14($sp) -/* 098EC0 7F064390 8FBF001C */ lw $ra, 0x1c($sp) -/* 098EC4 7F064394 27BD0020 */ addiu $sp, $sp, 0x20 -/* 098EC8 7F064398 03E00008 */ jr $ra -/* 098ECC 7F06439C 00000000 */ nop -) -#endif - -ALSoundState* sub_GAME_7F0643A0(void) +/** + * Address: 7F0643A0 + */ +ALSoundState* gunGetFreeSfxState(void) { s32 i; - for (i = 0; i < 4; i++) { - if (dword_CODE_bss_80075DB8[i] == 0) { - return &dword_CODE_bss_80075DB8[i]; + + for (i = 0; i < NUM_IMPACT_SFX_STATES; i++) + { + if (g_ImpactSfxStates[i] == NULL) + { + return &g_ImpactSfxStates[i]; } } + return NULL; } @@ -13648,10 +4376,10 @@ void recall_joy2_hits_edit_detail_edit_flag(enum ITEM_IDS item, PropRecord* prop if (g_ClockTimer <= 0) { return; } #endif - sound_state = sub_GAME_7F0643A0(); + sound_state = gunGetFreeSfxState(); if (sound_state != NULL) { - if ((prop->type != 3) && (prop->type != 6)) + if ((prop->type != PROP_TYPE_CHR) && (prop->type != PROP_TYPE_VIEWER)) { if (item == ITEM_LASER) { @@ -13691,15 +4419,15 @@ void recall_joy2_hits_edit_detail_edit_flag(enum ITEM_IDS item, PropRecord* prop } } - sound_state = sub_GAME_7F0643A0(); + sound_state = gunGetFreeSfxState(); if ((sound_state != NULL) && (texture_index >= 0)) { - if (D_8004E86C[g_Textures[texture_index].hitSound] != NULL) + if (g_HitTypeSounds[g_Textures[texture_index].hitSound] != NULL) { - if (D_8004E86C[g_Textures[texture_index].hitSound]->sfx_len > 0) + if (g_HitTypeSounds[g_Textures[texture_index].hitSound]->sfx_len > 0) { - sfx_index = rnd2 % D_8004E86C[g_Textures[texture_index].hitSound]->sfx_len; - sndPlaySfx((struct ALBankAlt_s* ) g_musicSfxBufferPtr, D_8004E86C[g_Textures[texture_index].hitSound]->sfx[sfx_index], sound_state); + sfx_index = rnd2 % g_HitTypeSounds[g_Textures[texture_index].hitSound]->sfx_len; + sndPlaySfx((struct ALBankAlt_s* ) g_musicSfxBufferPtr, g_HitTypeSounds[g_Textures[texture_index].hitSound]->sfx[sfx_index], sound_state); } if (sound_state->link.next != NULL) @@ -13726,7 +4454,7 @@ void sub_GAME_7F064720(coord3d* pos) if (g_ClockTimer <= 0) { return; } #endif - sound = sub_GAME_7F0643A0(); + sound = gunGetFreeSfxState(); if (sound != NULL) { @@ -13761,7 +4489,7 @@ void recall_joy2_hits_edit_flag(enum ITEM_IDS item, coord3d* arg1, s32 texture_i if (g_ClockTimer <= 0) { return; } #endif - sound_state = sub_GAME_7F0643A0(); + sound_state = gunGetFreeSfxState(); if (sound_state != NULL) { if (item != ITEM_WATCHLASER) @@ -13784,10 +4512,10 @@ void recall_joy2_hits_edit_flag(enum ITEM_IDS item, coord3d* arg1, s32 texture_i } } - sound_state = sub_GAME_7F0643A0(); + sound_state = gunGetFreeSfxState(); if ((sound_state != NULL) && (texture_index >= 0)) { - img_sound = D_8004E86C[g_Textures[texture_index].hitSound]; + img_sound = g_HitTypeSounds[g_Textures[texture_index].hitSound]; if (img_sound->sfx_len > 0) { if (img_sound != NULL) @@ -13869,15 +4597,15 @@ void sub_GAME_7F0649D8(enum GUNHAND hand) ammo_in_hands = get_ammo_in_hands_weapon(hand); if (ammo_in_hands >= 5) { - hand_ptr->field_8A4 = 5; + hand_ptr->numvisibleshells = 5; return; } - hand_ptr->field_8A4 = ammo_in_hands; + hand_ptr->numvisibleshells = ammo_in_hands; } } #if defined(VERSION_US) || defined(VERSION_JP) - #define F_7F05C6FC_ARG1(x) ((f32)(x)) + #define WEAPON_1P_ANIM_TIME(x) ((f32)(x)) #define WHEN_1_CASE_GRENADELAUNCH_FLD890 6 #define WHEN_1_CASE_GRENADE_FLD890 0xf0 #define WHEN_D_FLD890 0x14 @@ -13897,7 +4625,7 @@ void sub_GAME_7F0649D8(enum GUNHAND hand) #define WHEN_1E_FLD890 0x1e #endif #if defined(VERSION_EU) - #define F_7F05C6FC_ARG1(x) ((f32)(x)) * 60.0f / 50.0f + #define WEAPON_1P_ANIM_TIME(x) ((f32)(x)) * 60.0f / 50.0f #define WHEN_1_CASE_GRENADELAUNCH_FLD890 5 #define WHEN_1_CASE_GRENADE_FLD890 0xc8 #define WHEN_D_FLD890 0x10 @@ -13917,8 +4645,11 @@ void sub_GAME_7F0649D8(enum GUNHAND hand) #define WHEN_1E_FLD890 0x19 #endif -// 0x7f064b28 NTSC -void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s32 arg1) + +/** + * Address: 7F064B28 + */ +void gunTickHandState(enum GUNHAND hand, s32 triggerOn) { #if defined(VERSION_US) s32 stack1; @@ -13951,7 +4682,7 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 s32 stack12; Mtxf spE4; f32 tempf; - struct hand *temp_s0; + struct hand *handptr; Mtxf sp9C; f32 sp98; f32 sp94; @@ -14010,7 +4741,7 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 Mtxf sp9C; f32 sp98; f32 sp94; - struct hand *temp_s0; + struct hand *handptr; f32 sp8C; f32 sp88; enum ITEM_IDS temp_v0_3; @@ -14065,7 +4796,7 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 Mtxf sp9C; f32 sp98; f32 sp94; - struct hand *temp_s0; + struct hand *handptr; f32 sp8C; f32 sp88; enum ITEM_IDS temp_v0_3; @@ -14083,65 +4814,65 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 s32 stack15; #endif - temp_s0 = &g_CurrentPlayer->hands[arg0]; - var_s1 = get_item_in_hand_or_watch_menu(arg0); + handptr = &g_CurrentPlayer->hands[hand]; + var_s1 = get_item_in_hand_or_watch_menu(hand); sp1C4 = get_ammo_type_for_weapon(var_s1); - temp_s0->field_884 = temp_s0->weapon_hold_time; - temp_s0->weapon_hold_time = arg1; + handptr->field_884 = handptr->weapon_hold_time; + handptr->weapon_hold_time = triggerOn; - if (arg1 == 0) + if (triggerOn == 0) { - temp_s0->field_888 = 1; + handptr->field_888 = 1; } - temp_s0->weapon_firing_status = 0; - temp_s0->field_87D = 0; + handptr->weapon_firing_status = 0; + handptr->field_87D = 0; if (g_ClockTimer > 0) { - temp_s0->field_890 += g_ClockTimer; - temp_s0->field_88C += 1; + handptr->field_890 += g_ClockTimer; + handptr->field_88C += 1; } - temp_s0->field_92C = 0; + handptr->field_92C = 0; - if (temp_s0->when_detonating_mines_is_0 == 0) + if (handptr->weapon_action_state == GUN_ANIM_STATE_IDLE) { #if defined(VERSION_JP) || defined(VERSION_EU) - if ((var_s1 == ITEM_LASER) && (temp_s0->field_888 != 0)) + if ((var_s1 == ITEM_LASER) && (handptr->field_888 != 0)) { - temp_s0->field_8A0 = 0; + handptr->field_8A0 = 0; } #endif if ( - (temp_s0->weapon_hold_time != 0) + (handptr->weapon_hold_time != 0) && (var_s1 != ITEM_UNARMED) - && (((bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_CLICKY) != 0)) || (temp_s0->weapon_ammo_in_magazine > 0)) + && (((bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_CLICKY) != 0)) || (handptr->weapon_ammo_in_magazine > 0)) #if defined(VERSION_JP) || defined(VERSION_EU) - && ((var_s1 != ITEM_LASER) || (temp_s0->field_8A0 < 0xC8)) + && ((var_s1 != ITEM_LASER) || (handptr->field_8A0 < 0xC8)) #endif ) { - temp_s0->when_detonating_mines_is_0 = 1; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; - temp_s0->field_888 = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_TRIGGER_PRESS; + handptr->field_890 = 0; + handptr->field_88C = 0; + handptr->field_888 = 0; } else { - if (temp_s0->weapon_current_animation != 0) + if (handptr->weapon_current_animation != 0) { - temp_s0->when_detonating_mines_is_0 = temp_s0->weapon_current_animation; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = handptr->weapon_current_animation; + handptr->field_890 = 0; + handptr->field_88C = 0; } } - temp_s0->weapon_current_animation = 0; + handptr->weapon_current_animation = 0; - if ((temp_s0->when_detonating_mines_is_0 == 0) - && (temp_s0->weapon_ammo_in_magazine == 0) + if ((handptr->weapon_action_state == GUN_ANIM_STATE_IDLE) + && (handptr->weapon_ammo_in_magazine == 0) && (sp1C4 != 0)) { if ((lvlGetControlsLockedFlag() == 0) && (g_CurrentPlayer->mpmenuon == 0)) @@ -14154,38 +4885,38 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 g_CurrentPlayer->ammoheldarr[sp1C4] = 1; } - if (get_ammo_in_hands_weapon(arg0) > 0) + if (get_ammo_in_hands_weapon(hand) > 0) { - temp_s0->when_detonating_mines_is_0 = 9; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_RELOAD_START; + handptr->field_890 = 0; + handptr->field_88C = 0; } else { if (g_CurrentPlayer->trigger_released != 0) { - temp_v0_3 = get_item_in_hand_or_watch_menu(1 - arg0); + temp_v0_3 = get_item_in_hand_or_watch_menu(1 - hand); - sp1BC = (g_CurrentPlayer->hands - arg0) + 1; + sp1BC = (g_CurrentPlayer->hands - hand) + 1; - if ((sp1BC->when_detonating_mines_is_0 == 0) + if ((sp1BC->weapon_action_state == GUN_ANIM_STATE_IDLE) && (sp1BC->weapon_current_animation == 0) && ( (temp_v0_3 == ITEM_UNARMED) || ((sp1BC->weapon_ammo_in_magazine == 0) && ((get_ammo_type_for_weapon(temp_v0_3) != 0)) - && ((get_ammo_in_hands_weapon(1 - arg0) <= 0))))) + && ((get_ammo_in_hands_weapon(1 - hand) <= 0))))) { autoadvance_on_deplete_all_ammo(); - temp_s0->field_88C = 0; - temp_s0->field_890 = 0; - temp_s0->when_detonating_mines_is_0 = temp_s0->weapon_current_animation; - temp_s0->weapon_current_animation = 0; + handptr->field_88C = 0; + handptr->field_890 = 0; + handptr->weapon_action_state = handptr->weapon_current_animation; + handptr->weapon_current_animation = 0; sp1BC->field_88C = 0; sp1BC->field_890 = 0; - sp1BC->when_detonating_mines_is_0 = sp1BC->weapon_current_animation; + sp1BC->weapon_action_state = sp1BC->weapon_current_animation; sp1BC->weapon_current_animation = 0; } } @@ -14194,30 +4925,30 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 } } - if (temp_s0->when_detonating_mines_is_0 == 1) + if (handptr->weapon_action_state == GUN_ANIM_STATE_TRIGGER_PRESS) { switch (var_s1) { case ITEM_RUGER: case ITEM_GRENADELAUNCH: - if (temp_s0->field_890 >= WHEN_1_CASE_GRENADELAUNCH_FLD890) + if (handptr->field_890 >= WHEN_1_CASE_GRENADELAUNCH_FLD890) { - temp_s0->when_detonating_mines_is_0 = 2; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_FIRE; + handptr->field_890 = 0; + handptr->field_88C = 0; } break; case ITEM_CAMERA: - if (temp_s0->field_88C == 0) + if (handptr->field_88C == 0) { currentPlayerSetFadeColour(0, 0, 0, 1.0f); } - else if (temp_s0->field_890 > 0) + else if (handptr->field_890 > 0) { currentPlayerAdjustFade(8.0f, 0, 0, 0, 0.0f); - temp_s0->when_detonating_mines_is_0 = 2; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_FIRE; + handptr->field_890 = 0; + handptr->field_88C = 0; } break; case ITEM_WPPK: @@ -14245,9 +4976,9 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 case ITEM_FLAREPISTOL: case ITEM_PITONGUN: case ITEM_WATCHMAGNETATTRACT: - temp_s0->when_detonating_mines_is_0 = 2; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_FIRE; + handptr->field_890 = 0; + handptr->field_88C = 0; break; case ITEM_TIMEDMINE: case ITEM_PROXIMITYMINE: @@ -14257,59 +4988,59 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 case ITEM_BUG: case ITEM_MICROCAMERA: case ITEM_GOLDENEYEKEY: - temp_s0->when_detonating_mines_is_0 = 0x1C; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_MINE_PLACE; + handptr->field_890 = 0; + handptr->field_88C = 0; break; case ITEM_KNIFE: if (!(randomGetNext() & 1)) { - temp_s0->when_detonating_mines_is_0 = 0x11; + handptr->weapon_action_state = GUN_ANIM_STATE_KNIFE_SLASH1_BEGIN; } else { - temp_s0->when_detonating_mines_is_0 = 0x14; + handptr->weapon_action_state = GUN_ANIM_STATE_KNIFE_SLASH2_BEGIN; } - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->field_890 = 0; + handptr->field_88C = 0; break; case ITEM_GRENADE: - if ((temp_s0->field_888 != 0) || (temp_s0->field_890 >= WHEN_1_CASE_GRENADE_FLD890)) + if ((handptr->field_888 != 0) || (handptr->field_890 >= WHEN_1_CASE_GRENADE_FLD890)) { - g_CurrentPlayer->last_z_trigger_timer = temp_s0->field_890; - temp_s0->when_detonating_mines_is_0 = 0x1A; - temp_s0->field_88C = 0; - temp_s0->field_890 = 0; + g_CurrentPlayer->last_z_trigger_timer = handptr->field_890; + handptr->weapon_action_state = GUN_ANIM_STATE_GRENADE_THROW; + handptr->field_88C = 0; + handptr->field_890 = 0; } break; case ITEM_FIST: if (!(randomGetNext() & 1)) { - temp_s0->when_detonating_mines_is_0 = 0x1E; + handptr->weapon_action_state = GUN_ANIM_STATE_PUNCH1_STRIKE; } else { - temp_s0->when_detonating_mines_is_0 = 0x20; + handptr->weapon_action_state = GUN_ANIM_STATE_PUNCH2_STRIKE; } - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->field_890 = 0; + handptr->field_88C = 0; break; case ITEM_THROWKNIFE: - temp_s0->when_detonating_mines_is_0 = 0x17; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_THROWKNIFE_DRAW; + handptr->field_890 = 0; + handptr->field_88C = 0; break; case ITEM_TASER: - tempf = F_7F05C6FC_ARG1(temp_s0->field_890); - if (sub_GAME_7F05C6FC(taserFireKeyFrames, tempf, &temp_s0->field_8EC, arg0) != 0) + tempf = WEAPON_1P_ANIM_TIME(handptr->field_890); + if (gunSample1PTransform(taserFireKeyFrames, tempf, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } else { - temp_s0->when_detonating_mines_is_0 = 2; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_FIRE; + handptr->field_890 = 0; + handptr->field_88C = 0; } break; case ITEM_BUNGEE: @@ -14335,9 +5066,9 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 case ITEM_KEYCARD: case ITEM_KEYYALE: case ITEM_KEYBOLT: - temp_s0->when_detonating_mines_is_0 = 0x24; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_USE_ITEM; + handptr->field_890 = 0; + handptr->field_88C = 0; break; case ITEM_SUIT_LF_HAND: case ITEM_JOYPAD: @@ -14345,32 +5076,32 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 case ITEM_GRENADEROUND: case ITEM_TOKEN: default: - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0; + handptr->field_88C = 0; break; } - temp_s0->volley = 0; + handptr->volley = 0; } - if (temp_s0->when_detonating_mines_is_0 == 2) + if (handptr->weapon_action_state == GUN_ANIM_STATE_FIRE) { - if ((get_ammo_type_for_weapon(var_s1) == 0) || (temp_s0->weapon_ammo_in_magazine > 0)) + if ((get_ammo_type_for_weapon(var_s1) == 0) || (handptr->weapon_ammo_in_magazine > 0)) { switch (var_s1) { case ITEM_CAMERA: case ITEM_WATCHMAGNETATTRACT: - if (temp_s0->field_88C == 0) + if (handptr->field_88C == 0) { - temp_s0->weapon_firing_status = (lvlGetControlsLockedFlag() == 0) && (g_CurrentPlayer->mpmenuon == 0); + handptr->weapon_firing_status = (lvlGetControlsLockedFlag() == 0) && (g_CurrentPlayer->mpmenuon == 0); } else { - temp_s0->when_detonating_mines_is_0 = 3; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_RECOIL1; + handptr->field_890 = 0; + handptr->field_88C = 0; } break; case ITEM_WPPK: @@ -14391,22 +5122,22 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 case ITEM_TANKSHELLS: case ITEM_FLAREPISTOL: case ITEM_PITONGUN: - if (temp_s0->field_88C == 0) + if (handptr->field_88C == 0) { if ((getPlayerCount() == 1) || ((checkGamePaused() == 0) && (g_CurrentPlayer->mpmenuon == 0))) { - temp_s0->field_87D = 1; + handptr->field_87D = 1; } - temp_s0->weapon_firing_status = (lvlGetControlsLockedFlag() == 0) && (g_CurrentPlayer->mpmenuon == 0); + handptr->weapon_firing_status = (lvlGetControlsLockedFlag() == 0) && (g_CurrentPlayer->mpmenuon == 0); - sub_GAME_7F05E808(arg0); + sub_GAME_7F05E808(hand); } else { - temp_s0->when_detonating_mines_is_0 = 3; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_RECOIL1; + handptr->field_890 = 0; + handptr->field_88C = 0; } break; case ITEM_SKORPION: @@ -14417,68 +5148,68 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 case ITEM_SPECTRE: case ITEM_M16: case ITEM_FNP90: - if ((temp_s0->field_88C == 0) - || (temp_s0->weapon_hold_time != 0) + if ((handptr->field_88C == 0) + || (handptr->weapon_hold_time != 0) || ((bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_BURST_FIRE) != 0) - && (get_BONDdata_is_aiming() == 0) - && (((s32) temp_s0->volley % 3) != 0))) + && (currentPlayerGetIsAiming() == 0) + && (((s32) handptr->volley % 3) != 0))) { - if (((s32) temp_s0->field_88C % bondwalkItemGetAutomaticFiringRate(var_s1)) == 0) + if (((s32) handptr->field_88C % bondwalkItemGetAutomaticFiringRate(var_s1)) == 0) { if ((getPlayerCount() == 1) || ((checkGamePaused() == 0) && (g_CurrentPlayer->mpmenuon == 0))) { - temp_s0->field_87D = 1; + handptr->field_87D = 1; } - temp_s0->weapon_firing_status = (lvlGetControlsLockedFlag() == 0) + handptr->weapon_firing_status = (lvlGetControlsLockedFlag() == 0) && (g_CurrentPlayer->mpmenuon == 0); } } else { - temp_s0->when_detonating_mines_is_0 = 3; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_RECOIL1; + handptr->field_890 = 0; + handptr->field_88C = 0; } break; case ITEM_KNIFE: - if ((temp_s0->field_88C == 0) || (temp_s0->weapon_hold_time != 0)) + if ((handptr->field_88C == 0) || (handptr->weapon_hold_time != 0)) { - temp_s0->weapon_firing_status = 0; - temp_s0->field_87D = temp_s0->weapon_firing_status; + handptr->weapon_firing_status = 0; + handptr->field_87D = handptr->weapon_firing_status; } else { - temp_s0->when_detonating_mines_is_0 = 3; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_RECOIL1; + handptr->field_890 = 0; + handptr->field_88C = 0; } break; case ITEM_TASER: - if ((temp_s0->field_88C == 0) || (temp_s0->weapon_hold_time != 0)) + if ((handptr->field_88C == 0) || (handptr->weapon_hold_time != 0)) { - sub_GAME_7F05C6FC(taserRaiseKeyframes, 0.0f, &temp_s0->field_8EC, arg0); + gunSample1PTransform(taserRaiseKeyframes, 0.0f, &handptr->field_8EC, hand); - temp_s0->weapon_firing_status = 0; - temp_s0->field_92C = 1; - temp_s0->field_87D = temp_s0->weapon_firing_status; + handptr->weapon_firing_status = 0; + handptr->field_92C = 1; + handptr->field_87D = handptr->weapon_firing_status; - if (temp_s0->field_88C == 0) + if (handptr->field_88C == 0) { - temp_s0->weapon_firing_status = (lvlGetControlsLockedFlag() == 0) + handptr->weapon_firing_status = (lvlGetControlsLockedFlag() == 0) && (g_CurrentPlayer->mpmenuon == 0); } } else { - temp_s0->when_detonating_mines_is_0 = 3; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_RECOIL1; + handptr->field_890 = 0; + handptr->field_88C = 0; } break; } - if (temp_s0->weapon_firing_status != 0) + if (handptr->weapon_firing_status != 0) { if (var_s1 != ITEM_CAMERA) { @@ -14490,24 +5221,24 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 } } - temp_s0->weapon_ammo_in_magazine -= 1; - temp_s0->volley += 1; + handptr->weapon_ammo_in_magazine -= 1; + handptr->volley += 1; } - if (temp_s0->when_detonating_mines_is_0 == 2) + if (handptr->weapon_action_state == GUN_ANIM_STATE_FIRE) { sp1B4 = 0; if (bondwalkItemGetSoundTriggerRate(var_s1) > 0) { - if ((g_CurrentPlayer->hands[1 - arg0].field_A50 != g_GlobalTimer) - && (temp_s0->field_A4C < g_GlobalTimer)) + if ((g_CurrentPlayer->hands[1 - hand].field_A50 != g_GlobalTimer) + && (handptr->field_A4C < g_GlobalTimer)) { - temp_s0->field_A4C = bondwalkItemGetSoundTriggerRate(var_s1) + g_GlobalTimer; + handptr->field_A4C = bondwalkItemGetSoundTriggerRate(var_s1) + g_GlobalTimer; sp1B4 = 1; } } - else if (temp_s0->weapon_firing_status != 0) + else if (handptr->weapon_firing_status != 0) { sp1B4 = 1; } @@ -14516,51 +5247,51 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 { if (sp1B4 != 0) { - if ((temp_s0->audioHandle != NULL) && (sndGetPlayingState(temp_s0->audioHandle) != 0)) + if ((handptr->audioHandle != NULL) && (sndGetPlayingState(handptr->audioHandle) != 0)) { - sndDeactivate(temp_s0->audioHandle); + sndDeactivate(handptr->audioHandle); } - if (((struct ALSoundState *)temp_s0->field_A48 != 0) - && (sndGetPlayingState((struct ALSoundState *) temp_s0->field_A48) != 0)) + if (((struct ALSoundState *)handptr->field_A48 != 0) + && (sndGetPlayingState((struct ALSoundState *) handptr->field_A48) != 0)) { - sndDeactivate((struct ALSoundState *) temp_s0->field_A48); + sndDeactivate((struct ALSoundState *) handptr->field_A48); } if (bondwalkItemGetSound(var_s1) != 0) { - if (temp_s0->audioHandle == NULL) + if (handptr->audioHandle == NULL) { - sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, bondwalkItemGetSound(var_s1), (struct ALSoundState *) &temp_s0->audioHandle); + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, bondwalkItemGetSound(var_s1), (struct ALSoundState *) &handptr->audioHandle); } - else if ((struct ALSoundState *)temp_s0->field_A48 == 0) + else if ((struct ALSoundState *)handptr->field_A48 == 0) { - sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, bondwalkItemGetSound(var_s1), (struct ALSoundState *) &temp_s0->field_A48); + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, bondwalkItemGetSound(var_s1), (struct ALSoundState *) &handptr->field_A48); } - temp_s0->field_A50 = g_GlobalTimer; + handptr->field_A50 = g_GlobalTimer; } } if (var_s1 == ITEM_WATCHLASER) { - sp1B0 = D_80035E90; + sp1B0 = watchlaser_fire_sounds; sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, sp1B0.half[randomGetNext() & 1], NULL); } } } } - else if (temp_s0->field_88C > 0) + else if (handptr->field_88C > 0) { - temp_s0->when_detonating_mines_is_0 = 3; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_RECOIL1; + handptr->field_890 = 0; + handptr->field_88C = 0; } else { - temp_s0->when_detonating_mines_is_0 = 0xD; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_DRY_FIRE; + handptr->field_890 = 0; + handptr->field_88C = 0; if ((getPlayerCount() == 1) #if defined(VERSION_JP) || defined(VERSION_EU) @@ -14575,20 +5306,20 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 } } - if (temp_s0->when_detonating_mines_is_0 == 3) + if (handptr->weapon_action_state == GUN_ANIM_STATE_RECOIL1) { if (var_s1 == ITEM_TASER) { - tempf = F_7F05C6FC_ARG1(temp_s0->field_890); - if (sub_GAME_7F05C6FC(taserRaiseKeyframes, tempf, &temp_s0->field_8EC, arg0) != 0) + tempf = WEAPON_1P_ANIM_TIME(handptr->field_890); + if (gunSample1PTransform(taserRaiseKeyframes, tempf, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } else { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } else @@ -14615,35 +5346,35 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 #endif if (( - (temp_s0->field_888 != 0) - && (temp_s0->field_890 >= (sp1A4 + sp1A0)) + (handptr->field_888 != 0) + && (handptr->field_890 >= (sp1A4 + sp1A0)) ) || ( ((weapon_stats->SingleFiringRate >= 0)) - && (temp_s0->field_888 == 0) + && (handptr->field_888 == 0) #if defined(VERSION_US) - && (temp_s0->field_890 >= (sp1A4 + sp1A0 + weapon_stats->SingleFiringRate)) + && (handptr->field_890 >= (sp1A4 + sp1A0 + weapon_stats->SingleFiringRate)) #endif #if defined(VERSION_JP) || defined(VERSION_EU) - && (temp_s0->field_890 >= (sp1A4 + sp1A0 + stat_4)) + && (handptr->field_890 >= (sp1A4 + sp1A0 + stat_4)) #endif ) ) { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } else if ( - (temp_s0->field_888 != 0) - && (temp_s0->weapon_hold_time != 0) + (handptr->field_888 != 0) + && (handptr->weapon_hold_time != 0) #if defined(VERSION_US) - && (temp_s0->field_890 >= weapon_stats->b44[2]) + && (handptr->field_890 >= weapon_stats->b44[2]) #endif #if defined(VERSION_JP) || defined(VERSION_EU) - && (temp_s0->field_890 >= stat_2) + && (handptr->field_890 >= stat_2) #endif && (weapon_stats->b44[3] >= 0) @@ -14651,158 +5382,158 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 #if defined(VERSION_US) // HACK: registers are swapped // addu a1, v1, a0 - && (temp_s0->field_890 + weapon_stats->b44[3] < (0,sp1A4) + sp1A0) - && (temp_s0->field_890 + weapon_stats->b44[3] >= (s32)weapon_stats->b44[2]) + && (handptr->field_890 + weapon_stats->b44[3] < (0,sp1A4) + sp1A0) + && (handptr->field_890 + weapon_stats->b44[3] >= (s32)weapon_stats->b44[2]) #endif #if defined(VERSION_JP) || defined(VERSION_EU) - && (temp_s0->field_890 + stat_3 < sp1A4 + sp1A0) - && (temp_s0->field_890 + stat_3 >= (s32)stat_2) + && (handptr->field_890 + stat_3 < sp1A4 + sp1A0) + && (handptr->field_890 + stat_3 >= (s32)stat_2) #endif ) { - temp_s0->when_detonating_mines_is_0 = 4; - temp_s0->field_890 = 0; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_RECOIL2; + handptr->field_890 = 0; + handptr->field_88C = 0; #if defined(VERSION_US) - temp_s0->field_8A8 = weapon_stats->b44[3]; + handptr->field_8A8 = weapon_stats->b44[3]; #endif #if defined(VERSION_JP) || defined(VERSION_EU) - temp_s0->field_8A8 = stat_3; + handptr->field_8A8 = stat_3; #endif } - else if (temp_s0->field_890 < sp1A4 + sp1A0) + else if (handptr->field_890 < sp1A4 + sp1A0) { sp198 = weapon_stats->RecoilBack; sp19C = weapon_stats->RecoilUp; - if (temp_s0->field_890 == 0) + if (handptr->field_890 == 0) { - temp_s0->field_8C8 = temp_s0->field_8E8; - temp_s0->field_8BC = temp_s0->field_8DC; - temp_s0->field_8C0 = temp_s0->field_8E0; - temp_s0->field_8C4 = temp_s0->field_8E4; + handptr->field_8C8 = handptr->field_8E8; + handptr->field_8BC = handptr->field_8DC; + handptr->field_8C0 = handptr->field_8E0; + handptr->field_8C4 = handptr->field_8E4; } - if (temp_s0->field_890 < sp1A4) + if (handptr->field_890 < sp1A4) { - temp_s0->field_8D8 = M_TAU_F - ((sp19C * M_TAU_F) / 360.0f); + handptr->field_8D8 = M_TAU_F - ((sp19C * M_TAU_F) / 360.0f); - temp_s0->field_8CC = ((gunSetHorizontalOffset(arg0) - temp_s0->field_A38) * sp198) / 1000.0f; - temp_s0->field_8D0 = 0; - temp_s0->field_8D4 = ((weapon_stats->PosZ - temp_s0->field_A40) * sp198) / 1000.0f; + handptr->field_8CC = ((gunSetHorizontalOffset(hand) - handptr->field_A38) * sp198) / 1000.0f; + handptr->field_8D0 = 0; + handptr->field_8D4 = ((weapon_stats->PosZ - handptr->field_A40) * sp198) / 1000.0f; - sp190 = sinf(((f32) temp_s0->field_890 * M_PI_2F) / (f32) sp1A4); + sp190 = sinf(((f32) handptr->field_890 * M_PI_2F) / (f32) sp1A4); } else { - temp_s0->field_8D8 = M_TAU_F - ((sp19C * M_TAU_F) / 360.0f); + handptr->field_8D8 = M_TAU_F - ((sp19C * M_TAU_F) / 360.0f); - temp_s0->field_8CC = ((gunSetHorizontalOffset(arg0) - temp_s0->field_A38) * sp198) / 1000.0f; - temp_s0->field_8D0 = 0; - temp_s0->field_8D4 = ((weapon_stats->PosZ - temp_s0->field_A40) * sp198) / 1000.0f; + handptr->field_8CC = ((gunSetHorizontalOffset(hand) - handptr->field_A38) * sp198) / 1000.0f; + handptr->field_8D0 = 0; + handptr->field_8D4 = ((weapon_stats->PosZ - handptr->field_A40) * sp198) / 1000.0f; - sp190 = (cosf(((f32) (temp_s0->field_890 - sp1A4) * M_PI_F) / (f32) sp1A0) * 0.5f) + 0.5f; + sp190 = (cosf(((f32) (handptr->field_890 - sp1A4) * M_PI_F) / (f32) sp1A0) * 0.5f) + 0.5f; } - temp_f0_2 = sub_GAME_7F06D0CC(temp_s0->field_8C8, temp_s0->field_8D8, sp190); + temp_f0_2 = sub_GAME_7F06D0CC(handptr->field_8C8, handptr->field_8D8, sp190); - temp_s0->field_8E8 = temp_f0_2; - temp_s0->field_92C = 1; - temp_s0->field_8DC = ((temp_s0->field_8CC - temp_s0->field_8BC) * sp190) + temp_s0->field_8BC; - temp_s0->field_8E0 = ((temp_s0->field_8D0 - temp_s0->field_8C0) * sp190) + temp_s0->field_8C0; - temp_s0->field_8E4 = ((temp_s0->field_8D4 - temp_s0->field_8C4) * sp190) + temp_s0->field_8C4; + handptr->field_8E8 = temp_f0_2; + handptr->field_92C = 1; + handptr->field_8DC = ((handptr->field_8CC - handptr->field_8BC) * sp190) + handptr->field_8BC; + handptr->field_8E0 = ((handptr->field_8D0 - handptr->field_8C0) * sp190) + handptr->field_8C0; + handptr->field_8E4 = ((handptr->field_8D4 - handptr->field_8C4) * sp190) + handptr->field_8C4; - matrix_4x4_set_rotation_around_x(temp_f0_2, &temp_s0->field_8EC); - matrix_4x4_set_position((struct coord3d *)&temp_s0->field_8DC, &temp_s0->field_8EC); + matrix_4x4_set_rotation_around_x(temp_f0_2, &handptr->field_8EC); + matrix_4x4_set_position((struct coord3d *)&handptr->field_8DC, &handptr->field_8EC); } } } - if (temp_s0->when_detonating_mines_is_0 == 4) + if (handptr->weapon_action_state == GUN_ANIM_STATE_RECOIL2) { - if (temp_s0->field_890 == 0) + if (handptr->field_890 == 0) { - temp_s0->field_8C8 = temp_s0->field_8E8; - temp_s0->field_8BC = temp_s0->field_8DC; - temp_s0->field_8C0 = temp_s0->field_8E0; - temp_s0->field_8C4 = temp_s0->field_8E4; - temp_s0->field_8D8 = 0.0f; - temp_s0->field_8CC = 0.0f; - temp_s0->field_8D0 = 0.0f; - temp_s0->field_8D4 = 0.0f; + handptr->field_8C8 = handptr->field_8E8; + handptr->field_8BC = handptr->field_8DC; + handptr->field_8C0 = handptr->field_8E0; + handptr->field_8C4 = handptr->field_8E4; + handptr->field_8D8 = 0.0f; + handptr->field_8CC = 0.0f; + handptr->field_8D0 = 0.0f; + handptr->field_8D4 = 0.0f; } - if (temp_s0->field_890 < temp_s0->field_8A8) + if (handptr->field_890 < handptr->field_8A8) { - sp18C = (cosf(((f32) (temp_s0->field_8A8 - temp_s0->field_890) * M_PI_2F) / (f32) temp_s0->field_8A8) * 0.5f) + 0.5f; + sp18C = (cosf(((f32) (handptr->field_8A8 - handptr->field_890) * M_PI_2F) / (f32) handptr->field_8A8) * 0.5f) + 0.5f; - temp_f0_2 = sub_GAME_7F06D0CC(temp_s0->field_8C8, temp_s0->field_8D8, sp18C); + temp_f0_2 = sub_GAME_7F06D0CC(handptr->field_8C8, handptr->field_8D8, sp18C); - temp_s0->field_8E8 = temp_f0_2; - temp_s0->field_92C = 1; - temp_s0->field_8DC = ((temp_s0->field_8CC - temp_s0->field_8BC) * sp18C) + temp_s0->field_8BC; - temp_s0->field_8E0 = ((temp_s0->field_8D0 - temp_s0->field_8C0) * sp18C) + temp_s0->field_8C0; - temp_s0->field_8E4 = ((temp_s0->field_8D4 - temp_s0->field_8C4) * sp18C) + temp_s0->field_8C4; + handptr->field_8E8 = temp_f0_2; + handptr->field_92C = 1; + handptr->field_8DC = ((handptr->field_8CC - handptr->field_8BC) * sp18C) + handptr->field_8BC; + handptr->field_8E0 = ((handptr->field_8D0 - handptr->field_8C0) * sp18C) + handptr->field_8C0; + handptr->field_8E4 = ((handptr->field_8D4 - handptr->field_8C4) * sp18C) + handptr->field_8C4; - matrix_4x4_set_rotation_around_x(temp_f0_2, &temp_s0->field_8EC); - matrix_4x4_set_position((struct coord3d *)&temp_s0->field_8DC, &temp_s0->field_8EC); + matrix_4x4_set_rotation_around_x(temp_f0_2, &handptr->field_8EC); + matrix_4x4_set_position((struct coord3d *)&handptr->field_8DC, &handptr->field_8EC); } else { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if (temp_s0->when_detonating_mines_is_0 == 0xD) + if (handptr->weapon_action_state == GUN_ANIM_STATE_DRY_FIRE) { - if (temp_s0->field_88C == 0) + if (handptr->field_88C == 0) { - sub_GAME_7F05E808(arg0); + sub_GAME_7F05E808(hand); } - if ((temp_s0->field_888 != 0) || ((temp_s0->field_888 == 0) && (temp_s0->field_890 >= WHEN_D_FLD890))) + if ((handptr->field_888 != 0) || ((handptr->field_888 == 0) && (handptr->field_890 >= WHEN_D_FLD890))) { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } sp188 = WHEN_5_SP188_INIT; - if (temp_s0->when_detonating_mines_is_0 == 5) + if (handptr->weapon_action_state == GUN_ANIM_STATE_SWITCH_LOWER) { if (getPlayerCount() >= 2) { sp188 = WHEN_5_SP188_MULTI; } - if (temp_s0->field_88C == 0) + if (handptr->field_88C == 0) { if (getPlayerCount() == 1) { - temp_s0->field_8B0 = WHEN_5_FLD8B0_SP; + handptr->field_8B0 = WHEN_5_FLD8B0_SP; } else { - temp_s0->field_8B0 = WHEN_5_FLD8B0_MULTI; + handptr->field_8B0 = WHEN_5_FLD8B0_MULTI; } } - if (temp_s0->field_890 >= sp188) + if (handptr->field_890 >= sp188) { - g_CurrentPlayer->ammoheldarr[get_ammo_type_for_weapon(var_s1)] += temp_s0->weapon_ammo_in_magazine; - temp_s0->weapon_ammo_in_magazine = 0; + g_CurrentPlayer->ammoheldarr[get_ammo_type_for_weapon(var_s1)] += handptr->weapon_ammo_in_magazine; + handptr->weapon_ammo_in_magazine = 0; if (getPlayerCount() >= 2) { - sub_GAME_7F09B368(arg0); + sub_GAME_7F09B368(hand); } - sub_GAME_7F05FB00(arg0); + sub_GAME_7F05FB00(hand); - temp_s0->when_detonating_mines_is_0 = 6; + handptr->weapon_action_state = GUN_ANIM_STATE_SWITCH_SWAP; if (bondinvItemAvailable(ITEM_SNIPERRIFLE) != 0) { @@ -14815,70 +5546,70 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 } else { - sp184 = ((f32) temp_s0->field_890 * M_LN2F) / (f32) sp188; - temp_s0->field_92C = 1; + sp184 = ((f32) handptr->field_890 * M_LN2F) / (f32) sp188; + handptr->field_92C = 1; - matrix_4x4_set_rotation_around_x(sp184, &temp_s0->field_8EC); + matrix_4x4_set_rotation_around_x(sp184, &handptr->field_8EC); - temp_s0->field_8EC.m[3][0] = 0.0f; - temp_s0->field_8EC.m[3][1] = (1.0f - cosf(sp184)) * -60.0f; - temp_s0->field_8EC.m[3][2] = sinf(sp184) * 15.0f; + handptr->field_8EC.m[3][0] = 0.0f; + handptr->field_8EC.m[3][1] = (1.0f - cosf(sp184)) * -60.0f; + handptr->field_8EC.m[3][2] = sinf(sp184) * 15.0f; } } - if ((temp_s0->when_detonating_mines_is_0 == 6) || (temp_s0->when_detonating_mines_is_0 == 7)) + if ((handptr->weapon_action_state == GUN_ANIM_STATE_SWITCH_SWAP) || (handptr->weapon_action_state == GUN_ANIM_STATE_SWITCH_HOLD)) { - if ((temp_s0->weapon_animation_trigger == 0) || (temp_s0->field_890 >= temp_s0->field_8B0)) + if ((handptr->weapon_animation_trigger == 0) || (handptr->field_890 >= handptr->field_8B0)) { - if (temp_s0->when_detonating_mines_is_0 == 6) + if (handptr->weapon_action_state == GUN_ANIM_STATE_SWITCH_SWAP) { - temp_v1_5 = (g_CurrentPlayer->hands - arg0) + 1; + temp_v1_5 = (g_CurrentPlayer->hands - hand) + 1; - if ((temp_v1_5->when_detonating_mines_is_0 != 6) && (temp_v1_5->when_detonating_mines_is_0 != 5)) + if ((temp_v1_5->weapon_action_state != GUN_ANIM_STATE_SWITCH_SWAP) && (temp_v1_5->weapon_action_state != GUN_ANIM_STATE_SWITCH_LOWER)) { if ( (temp_v1_5->weapon_current_animation != 5) - && (temp_v1_5->when_detonating_mines_is_0 != 0xE) - && (temp_v1_5->when_detonating_mines_is_0 != 0xF) - && (temp_v1_5->when_detonating_mines_is_0 != 0x10) + && (temp_v1_5->weapon_action_state != GUN_ANIM_STATE_WATCH_LOWER) + && (temp_v1_5->weapon_action_state != GUN_ANIM_STATE_WATCH_SWAP) + && (temp_v1_5->weapon_action_state != GUN_ANIM_STATE_WATCH_RAISE) && (temp_v1_5->weapon_current_animation != 0xE)) { - if (arg0 == GUNRIGHT) + if (hand == GUNRIGHT) { - if (bondinvItemAvailableForHand(temp_s0->weapon_next_weapon, getCurrentPlayerWeaponId(GUNLEFT)) == 0) + if (bondinvItemAvailableForHand(handptr->weapon_next_weapon, getCurrentPlayerWeaponId(GUNLEFT)) == 0) { currentPlayerEquipWeaponWrapper(GUNLEFT, 0); } } - else if (bondinvItemAvailableForHand(getCurrentPlayerWeaponId(GUNRIGHT), temp_s0->weapon_next_weapon) == 0) + else if (bondinvItemAvailableForHand(getCurrentPlayerWeaponId(GUNRIGHT), handptr->weapon_next_weapon) == 0) { - temp_s0->weapon_next_weapon = ITEM_UNARMED; + handptr->weapon_next_weapon = ITEM_UNARMED; } } } - currentPlayerUnEquipWeaponWrapper(arg0, temp_s0->weapon_next_weapon); - var_s1 = get_item_in_hand_or_watch_menu(arg0); - temp_s0->when_detonating_mines_is_0 = 7; + currentPlayerUnEquipWeaponWrapper(hand, handptr->weapon_next_weapon); + var_s1 = get_item_in_hand_or_watch_menu(hand); + handptr->weapon_action_state = GUN_ANIM_STATE_SWITCH_HOLD; } - else if (Gun_hand_without_item(arg0) != 0) + else if (Gun_hand_without_item(hand) != 0) { - temp_s0->when_detonating_mines_is_0 = 8; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_SWITCH_RAISE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if ((temp_s0->when_detonating_mines_is_0 == 6) || (temp_s0->when_detonating_mines_is_0 == 7)) + if ((handptr->weapon_action_state == GUN_ANIM_STATE_SWITCH_SWAP) || (handptr->weapon_action_state == GUN_ANIM_STATE_SWITCH_HOLD)) { - temp_s0->field_92C = 1; - matrix_4x4_set_rotation_around_x(M_LN2F, &temp_s0->field_8EC); - temp_s0->field_8EC.m[3][0] = 0.0f; - temp_s0->field_8EC.m[3][1] = (1.0f - cosf(M_LN2F)) * -60.0f; - temp_s0->field_8EC.m[3][2] = sinf(M_LN2F) * 15.0f; + handptr->field_92C = 1; + matrix_4x4_set_rotation_around_x(M_LN2F, &handptr->field_8EC); + handptr->field_8EC.m[3][0] = 0.0f; + handptr->field_8EC.m[3][1] = (1.0f - cosf(M_LN2F)) * -60.0f; + handptr->field_8EC.m[3][2] = sinf(M_LN2F) * 15.0f; } } - if (temp_s0->when_detonating_mines_is_0 == 8) + if (handptr->weapon_action_state == GUN_ANIM_STATE_SWITCH_RAISE) { sp178 = WHEN_8_SP178_INIT; @@ -14887,21 +5618,21 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 sp178 = WHEN_8_SP178_MULTI; } - if (temp_s0->field_88C == 0) + if (handptr->field_88C == 0) { if (getPlayerCount() >= 2) { - sub_GAME_7F09B398(arg0); + sub_GAME_7F09B398(hand); } - sub_GAME_7F0649D8(arg0); + sub_GAME_7F0649D8(hand); g_CurrentPlayer->trigger_released = 0; if ((g_ClockTimer > 0) - && (g_CurrentPlayer->unknown != 1) - && (Gun_hand_without_item(arg0) != 0) - && (g_PlayerInvincible == 0) + && (g_CurrentPlayer->cameramode != CAMERAMODE_INTRO) + && (Gun_hand_without_item(hand) != 0) + && (g_PlayerInvincible == FALSE) #if defined(VERSION_JP) || defined(VERSION_EU) && (g_CurrentPlayer->bonddead == 0) #endif @@ -14948,83 +5679,83 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 } } - if ((temp_s0->field_890 >= sp178) + if ((handptr->field_890 >= sp178) || (get_ptr_weapon_model_header_line(var_s1) == NULL) || (bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_SHOW_FIRST_PERSON) == 0) || (bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_HIDE_FIRST_PERSON_HAND) != 0)) { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } else { - sp174 = ((f32) (sp178 - temp_s0->field_890) * M_LN2F) / (f32) sp178; - temp_s0->field_92C = 1; - matrix_4x4_set_rotation_around_x(sp174, &temp_s0->field_8EC); - temp_s0->field_8EC.m[3][0] = 0.0f; - temp_s0->field_8EC.m[3][1] = (1.0f - cosf(sp174)) * -60.0f; - temp_s0->field_8EC.m[3][2] = sinf(sp174) * 15.0f; + sp174 = ((f32) (sp178 - handptr->field_890) * M_LN2F) / (f32) sp178; + handptr->field_92C = 1; + matrix_4x4_set_rotation_around_x(sp174, &handptr->field_8EC); + handptr->field_8EC.m[3][0] = 0.0f; + handptr->field_8EC.m[3][1] = (1.0f - cosf(sp174)) * -60.0f; + handptr->field_8EC.m[3][2] = sinf(sp174) * 15.0f; } } - if (temp_s0->when_detonating_mines_is_0 == 9) + if (handptr->weapon_action_state == GUN_ANIM_STATE_RELOAD_START) { - if (((temp_s0->weapon_ammo_in_magazine < get_ptr_item_statistics(var_s1)->MagSize) + if (((handptr->weapon_ammo_in_magazine < get_ptr_item_statistics(var_s1)->MagSize) || (bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_AMMO_CLIP_LIMIT) != 0)) - && ((get_ammo_in_hands_weapon(arg0) > 0))) + && ((get_ammo_in_hands_weapon(hand) > 0))) { - temp_s0->when_detonating_mines_is_0 = 0xA; + handptr->weapon_action_state = GUN_ANIM_STATE_RELOAD_LOWER; } else { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if (temp_s0->when_detonating_mines_is_0 == 0xA) + if (handptr->weapon_action_state == GUN_ANIM_STATE_RELOAD_LOWER) { - if ((temp_s0->field_890 >= WHEN_A_FLD890) || (temp_s0->field_87F == 0)) + if ((handptr->field_890 >= WHEN_A_FLD890) || (handptr->field_87F == 0)) { - temp_s0->when_detonating_mines_is_0 = 0xB; - temp_s0->field_8B0 = WHEN_A_FLD8B0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_RELOAD_SWAP; + handptr->field_8B0 = WHEN_A_FLD8B0; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } else { - sp128 = ((f32) temp_s0->field_890 * M_LN2F) / un_f32_div_1; - temp_s0->field_92C = 1; + sp128 = ((f32) handptr->field_890 * M_LN2F) / un_f32_div_1; + handptr->field_92C = 1; - if (arg0 == GUNRIGHT) + if (hand == GUNRIGHT) { - matrix_4x4_set_rotation_around_z((un_f32_num / un_f32_div_1), &temp_s0->field_8EC); + matrix_4x4_set_rotation_around_z((un_f32_num / un_f32_div_1), &handptr->field_8EC); } else { - matrix_4x4_set_rotation_around_z(-(un_f32_num / un_f32_div_1), &temp_s0->field_8EC); + matrix_4x4_set_rotation_around_z(-(un_f32_num / un_f32_div_1), &handptr->field_8EC); } matrix_4x4_set_rotation_around_x(sp128, &sp12C); - matrix_4x4_multiply_in_place(&sp12C, &temp_s0->field_8EC); + matrix_4x4_multiply_in_place(&sp12C, &handptr->field_8EC); sinf((un_f32_num / un_f32_div_1)); - temp_s0->field_8EC.m[3][0] = 0.0f; - temp_s0->field_8EC.m[3][1] = sub_GAME_7F0649AC(var_s1) * (1.0f - cosf(sp128)); - temp_s0->field_8EC.m[3][2] = sinf(sp128) * 15.0f; + handptr->field_8EC.m[3][0] = 0.0f; + handptr->field_8EC.m[3][1] = sub_GAME_7F0649AC(var_s1) * (1.0f - cosf(sp128)); + handptr->field_8EC.m[3][2] = sinf(sp128) * 15.0f; } } - if (temp_s0->when_detonating_mines_is_0 == 0xB) + if (handptr->weapon_action_state == GUN_ANIM_STATE_RELOAD_SWAP) { - if ((temp_s0->field_88C == 0) + if ((handptr->field_88C == 0) #if defined(VERSION_JP) || defined(VERSION_EU) && (g_ClockTimer > 0) #endif - && (g_CurrentPlayer->unknown != 1) - && (Gun_hand_without_item(arg0) != 0) - && (g_PlayerInvincible == 0) + && (g_CurrentPlayer->cameramode != CAMERAMODE_INTRO) + && (Gun_hand_without_item(hand) != 0) + && (g_PlayerInvincible == FALSE) #if defined(VERSION_JP) || defined(VERSION_EU) && (g_CurrentPlayer->bonddead == 0) #endif @@ -15102,199 +5833,199 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 } } - if ((temp_s0->field_890 >= temp_s0->field_8B0) && !(((temp_s0->field_88C < 2)))) + if ((handptr->field_890 >= handptr->field_8B0) && !(((handptr->field_88C < 2)))) { - temp_s0->when_detonating_mines_is_0 = 0xC; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_RELOAD_RAISE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } else { - temp_s0->field_92C = 1; + handptr->field_92C = 1; - if (arg0 == GUNRIGHT) + if (hand == GUNRIGHT) { - matrix_4x4_set_rotation_around_z(un_f32_num, &temp_s0->field_8EC); + matrix_4x4_set_rotation_around_z(un_f32_num, &handptr->field_8EC); } else { - matrix_4x4_set_rotation_around_z(-un_f32_num, &temp_s0->field_8EC); + matrix_4x4_set_rotation_around_z(-un_f32_num, &handptr->field_8EC); } matrix_4x4_set_rotation_around_x(M_LN2F, &spE4); - matrix_4x4_multiply_in_place(&spE4, &temp_s0->field_8EC); + matrix_4x4_multiply_in_place(&spE4, &handptr->field_8EC); sinf(un_f32_num); - temp_s0->field_8EC.m[3][0] = 0.0f; - temp_s0->field_8EC.m[3][1] = sub_GAME_7F0649AC(var_s1) * (1.0f - cosf(M_LN2F)); - temp_s0->field_8EC.m[3][2] = sinf(M_LN2F) * 15.0f; + handptr->field_8EC.m[3][0] = 0.0f; + handptr->field_8EC.m[3][1] = sub_GAME_7F0649AC(var_s1) * (1.0f - cosf(M_LN2F)); + handptr->field_8EC.m[3][2] = sinf(M_LN2F) * 15.0f; } } - if (temp_s0->when_detonating_mines_is_0 == 0xC) + if (handptr->weapon_action_state == GUN_ANIM_STATE_RELOAD_RAISE) { - if (temp_s0->field_88C == 0) + if (handptr->field_88C == 0) { - sub_GAME_7F0649D8(arg0); + sub_GAME_7F0649D8(hand); g_CurrentPlayer->trigger_released = 0; } - if ((temp_s0->field_890 >= WHEN_C_FLD890) + if ((handptr->field_890 >= WHEN_C_FLD890) || (get_ptr_weapon_model_header_line(var_s1) == NULL) || (bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_SHOW_FIRST_PERSON) == 0) || (bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_HIDE_FIRST_PERSON_HAND) != 0)) { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } else { - sp98 = ((f32) (WHEN_C_FLD890 - temp_s0->field_890) * M_LN2F) / un_f32_div_2; - temp_s0->field_92C = 1; + sp98 = ((f32) (WHEN_C_FLD890 - handptr->field_890) * M_LN2F) / un_f32_div_2; + handptr->field_92C = 1; - if (arg0 == GUNRIGHT) + if (hand == GUNRIGHT) { - matrix_4x4_set_rotation_around_z((un_f32_num / un_f32_div_2), &temp_s0->field_8EC); + matrix_4x4_set_rotation_around_z((un_f32_num / un_f32_div_2), &handptr->field_8EC); } else { - matrix_4x4_set_rotation_around_z(-(un_f32_num / un_f32_div_2), &temp_s0->field_8EC); + matrix_4x4_set_rotation_around_z(-(un_f32_num / un_f32_div_2), &handptr->field_8EC); } matrix_4x4_set_rotation_around_x(sp98, &sp9C); - matrix_4x4_multiply_in_place(&sp9C, &temp_s0->field_8EC); + matrix_4x4_multiply_in_place(&sp9C, &handptr->field_8EC); sinf(un_f32_num / un_f32_div_2); - temp_s0->field_8EC.m[3][0] = 0.0f; - temp_s0->field_8EC.m[3][1] = sub_GAME_7F0649AC(var_s1) * (1.0f - cosf(sp98)); - temp_s0->field_8EC.m[3][2] = sinf(sp98) * 15.0f; + handptr->field_8EC.m[3][0] = 0.0f; + handptr->field_8EC.m[3][1] = sub_GAME_7F0649AC(var_s1) * (1.0f - cosf(sp98)); + handptr->field_8EC.m[3][2] = sinf(sp98) * 15.0f; } } - if (temp_s0->when_detonating_mines_is_0 == 0xE) + if (handptr->weapon_action_state == GUN_ANIM_STATE_WATCH_LOWER) { - if ((temp_s0->field_890 >= WHEN_E_FLD890) || (temp_s0->field_87F == 0)) + if ((handptr->field_890 >= WHEN_E_FLD890) || (handptr->field_87F == 0)) { - temp_s0->when_detonating_mines_is_0 = 0xF; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_WATCH_SWAP; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } else { - sp94 = ((f32) temp_s0->field_890 * M_LN2F) / un_f32_div_1; - temp_s0->field_92C = 1; + sp94 = ((f32) handptr->field_890 * M_LN2F) / un_f32_div_1; + handptr->field_92C = 1; - matrix_4x4_set_rotation_around_x(sp94, &temp_s0->field_8EC); - temp_s0->field_8EC.m[3][0] = 0.0f; - temp_s0->field_8EC.m[3][1] = (1.0f - cosf(sp94)) * -60.0f; - temp_s0->field_8EC.m[3][2] = sinf(sp94) * 15.0f; + matrix_4x4_set_rotation_around_x(sp94, &handptr->field_8EC); + handptr->field_8EC.m[3][0] = 0.0f; + handptr->field_8EC.m[3][1] = (1.0f - cosf(sp94)) * -60.0f; + handptr->field_8EC.m[3][2] = sinf(sp94) * 15.0f; } } - if (temp_s0->when_detonating_mines_is_0 == 0xF) + if (handptr->weapon_action_state == GUN_ANIM_STATE_WATCH_SWAP) { - if ((temp_s0->field_88C == 0) || (Gun_hand_without_item(arg0) == 0)) + if ((handptr->field_88C == 0) || (Gun_hand_without_item(hand) == 0)) { - sub_GAME_7F05DA8C(arg0, temp_s0->weapon_next_weapon); - var_s1 = get_item_in_hand_or_watch_menu(arg0); + sub_GAME_7F05DA8C(hand, handptr->weapon_next_weapon); + var_s1 = get_item_in_hand_or_watch_menu(hand); } - if (Gun_hand_without_item(arg0) != 0) + if (Gun_hand_without_item(hand) != 0) { - temp_s0->when_detonating_mines_is_0 = 0x10; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_WATCH_RAISE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } else { - temp_s0->field_92C = 1; - matrix_4x4_set_rotation_around_x(M_LN2F, &temp_s0->field_8EC); - temp_s0->field_8EC.m[3][0] = 0.0f; - temp_s0->field_8EC.m[3][1] = (1.0f - cosf(M_LN2F)) * -60.0f; - temp_s0->field_8EC.m[3][2] = sinf(M_LN2F) * 15.0f; + handptr->field_92C = 1; + matrix_4x4_set_rotation_around_x(M_LN2F, &handptr->field_8EC); + handptr->field_8EC.m[3][0] = 0.0f; + handptr->field_8EC.m[3][1] = (1.0f - cosf(M_LN2F)) * -60.0f; + handptr->field_8EC.m[3][2] = sinf(M_LN2F) * 15.0f; } } - if (temp_s0->when_detonating_mines_is_0 == 0x10) + if (handptr->weapon_action_state == GUN_ANIM_STATE_WATCH_RAISE) { - if ((temp_s0->field_88C == 0) && (var_s1 < 0x21)) + if ((handptr->field_88C == 0) && (var_s1 < 0x21)) { if (getPlayerCount() >= 2) { - sub_GAME_7F09B398(arg0); + sub_GAME_7F09B398(hand); } - sub_GAME_7F0649D8(arg0); + sub_GAME_7F0649D8(hand); g_CurrentPlayer->trigger_released = 0; } - if ((temp_s0->field_890 >= WHEN_10_FLD890) + if ((handptr->field_890 >= WHEN_10_FLD890) || (get_ptr_weapon_model_header_line(var_s1) == NULL) || (bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_SHOW_FIRST_PERSON) == 0) || (bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_HIDE_FIRST_PERSON_HAND) != 0)) { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } else { - sp8C = ((f32) (WHEN_10_FLD890 - temp_s0->field_890) * M_LN2F) / un_f32_div_2; - temp_s0->field_92C = 1; - matrix_4x4_set_rotation_around_x(sp8C, &temp_s0->field_8EC); - temp_s0->field_8EC.m[3][0] = 0.0f; - temp_s0->field_8EC.m[3][1] = (1.0f - cosf(sp8C)) * -60.0f; - temp_s0->field_8EC.m[3][2] = sinf(sp8C) * 15.0f; + sp8C = ((f32) (WHEN_10_FLD890 - handptr->field_890) * M_LN2F) / un_f32_div_2; + handptr->field_92C = 1; + matrix_4x4_set_rotation_around_x(sp8C, &handptr->field_8EC); + handptr->field_8EC.m[3][0] = 0.0f; + handptr->field_8EC.m[3][1] = (1.0f - cosf(sp8C)) * -60.0f; + handptr->field_8EC.m[3][2] = sinf(sp8C) * 15.0f; } } - if ((temp_s0->when_detonating_mines_is_0 == 0x11) - || (temp_s0->when_detonating_mines_is_0 == 0x12) - || (temp_s0->when_detonating_mines_is_0 == 0x13) - || (temp_s0->when_detonating_mines_is_0 == 0x14) - || (temp_s0->when_detonating_mines_is_0 == 0x15) - || (temp_s0->when_detonating_mines_is_0 == 0x16)) + if ((handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH1_BEGIN) + || (handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH1_STRIKE) + || (handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH1_RECOVER) + || (handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH2_BEGIN) + || (handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH2_STRIKE) + || (handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH2_RECOVER)) { - sp88 = F_7F05C6FC_ARG1(temp_s0->field_890); + sp88 = WEAPON_1P_ANIM_TIME(handptr->field_890); - if (((temp_s0->when_detonating_mines_is_0 == 0x11) - || (temp_s0->when_detonating_mines_is_0 == 0x14)) - && (temp_s0->field_890 >= WHEN_11_FLD890_1)) + if (((handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH1_BEGIN) + || (handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH2_BEGIN)) + && (handptr->field_890 >= WHEN_11_FLD890_1)) { - sp7C = D_80035E94; + sp7C = knife_throw_sounds; sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, sp7C.half[randomGetNext() % 3U], NULL); - if (temp_s0->when_detonating_mines_is_0 == 0x11) + if (handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH1_BEGIN) { - temp_s0->when_detonating_mines_is_0 = 0x12; - temp_s0->when_detonating_mines_is_0 = 0x12; + handptr->weapon_action_state = GUN_ANIM_STATE_KNIFE_SLASH1_STRIKE; + handptr->weapon_action_state = GUN_ANIM_STATE_KNIFE_SLASH1_STRIKE; } else { - temp_s0->when_detonating_mines_is_0 = 0x15; - temp_s0->when_detonating_mines_is_0 = 0x15; + handptr->weapon_action_state = GUN_ANIM_STATE_KNIFE_SLASH2_STRIKE; + handptr->weapon_action_state = GUN_ANIM_STATE_KNIFE_SLASH2_STRIKE; } } - if ((temp_s0->when_detonating_mines_is_0 != 0x13) - && (temp_s0->when_detonating_mines_is_0 != 0x16) - && (temp_s0->field_890 >= WHEN_11_FLD890_2)) + if ((handptr->weapon_action_state != GUN_ANIM_STATE_KNIFE_SLASH1_RECOVER) + && (handptr->weapon_action_state != GUN_ANIM_STATE_KNIFE_SLASH2_RECOVER) + && (handptr->field_890 >= WHEN_11_FLD890_2)) { - temp_s0->weapon_firing_status = 1; - if ((temp_s0->when_detonating_mines_is_0 == 0x11) || (temp_s0->when_detonating_mines_is_0 == 0x12)) + handptr->weapon_firing_status = 1; + if ((handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH1_BEGIN) || (handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH1_STRIKE)) { - temp_s0->when_detonating_mines_is_0 = 0x13; - temp_s0->when_detonating_mines_is_0 = 0x13; + handptr->weapon_action_state = GUN_ANIM_STATE_KNIFE_SLASH1_RECOVER; + handptr->weapon_action_state = GUN_ANIM_STATE_KNIFE_SLASH1_RECOVER; } else { - temp_s0->when_detonating_mines_is_0 = 0x16; - temp_s0->when_detonating_mines_is_0 = 0x16; + handptr->weapon_action_state = GUN_ANIM_STATE_KNIFE_SLASH2_RECOVER; + handptr->weapon_action_state = GUN_ANIM_STATE_KNIFE_SLASH2_RECOVER; } } - if ((temp_s0->when_detonating_mines_is_0 == 0x11) - || (temp_s0->when_detonating_mines_is_0 == 0x12) - || (temp_s0->when_detonating_mines_is_0 == 0x13)) + if ((handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH1_BEGIN) + || (handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH1_STRIKE) + || (handptr->weapon_action_state == GUN_ANIM_STATE_KNIFE_SLASH1_RECOVER)) { var_a0_2 = D_80034CA4; } @@ -15303,28 +6034,28 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 var_a0_2 = D_80034E0C; } - if (sub_GAME_7F05C6FC(var_a0_2, sp88, &temp_s0->field_8EC, arg0) != 0) + if (gunSample1PTransform(var_a0_2, sp88, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } else { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if ((temp_s0->when_detonating_mines_is_0 == 0x1E) - || (temp_s0->when_detonating_mines_is_0 == 0x1F) - || (temp_s0->when_detonating_mines_is_0 == 0x20) - || (temp_s0->when_detonating_mines_is_0 == 0x21)) + if ((handptr->weapon_action_state == GUN_ANIM_STATE_PUNCH1_STRIKE) + || (handptr->weapon_action_state == GUN_ANIM_STATE_PUNCH1_RECOVER) + || (handptr->weapon_action_state == GUN_ANIM_STATE_PUNCH2_STRIKE) + || (handptr->weapon_action_state == GUN_ANIM_STATE_PUNCH2_RECOVER)) { - temp_v1_9 = F_7F05C6FC_ARG1(temp_s0->field_890); + temp_v1_9 = WEAPON_1P_ANIM_TIME(handptr->field_890); - if ((temp_s0->when_detonating_mines_is_0 == 0x1E) || (temp_s0->when_detonating_mines_is_0 == 0x1F)) + if ((handptr->weapon_action_state == GUN_ANIM_STATE_PUNCH1_STRIKE) || (handptr->weapon_action_state == GUN_ANIM_STATE_PUNCH1_RECOVER)) { - if (g_CurrentPlayer->cur_item_weapon_getname == 0x11) // Sniper Rifle + if (g_CurrentPlayer->cur_item_weapon_getname == ITEM_SNIPERRIFLE) { sp74 = sniperMeleeKeyframes1; } @@ -15333,15 +6064,15 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 sp74 = fistMeleeKeyframes1; } - if ((temp_s0->when_detonating_mines_is_0 != 0x1F) && (temp_s0->field_890 >= WHEN_1E_FLD890)) + if ((handptr->weapon_action_state != GUN_ANIM_STATE_PUNCH1_RECOVER) && (handptr->field_890 >= WHEN_1E_FLD890)) { - temp_s0->weapon_firing_status = 1; - temp_s0->when_detonating_mines_is_0 = 0x1F; + handptr->weapon_firing_status = 1; + handptr->weapon_action_state = GUN_ANIM_STATE_PUNCH1_RECOVER; } } - else if ((temp_s0->when_detonating_mines_is_0 == 0x20) || (temp_s0->when_detonating_mines_is_0 == 0x21)) + else if ((handptr->weapon_action_state == GUN_ANIM_STATE_PUNCH2_STRIKE) || (handptr->weapon_action_state == GUN_ANIM_STATE_PUNCH2_RECOVER)) { - if (g_CurrentPlayer->cur_item_weapon_getname == 0x11) // Sniper Rifle + if (g_CurrentPlayer->cur_item_weapon_getname == ITEM_SNIPERRIFLE) { sp74 = sniperMeleeKeyframes2; } @@ -15350,199 +6081,200 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 sp74 = fistMeleeKeyframes2; } - if ((temp_s0->when_detonating_mines_is_0 != 0x21) && (temp_s0->field_890 >= WHEN_1E_FLD890)) + if ((handptr->weapon_action_state != GUN_ANIM_STATE_PUNCH2_RECOVER) && (handptr->field_890 >= WHEN_1E_FLD890)) { - temp_s0->weapon_firing_status = 1; - temp_s0->when_detonating_mines_is_0 = 0x21; + handptr->weapon_firing_status = 1; + handptr->weapon_action_state = GUN_ANIM_STATE_PUNCH2_RECOVER; } } - if (sub_GAME_7F05C6FC(sp74, temp_v1_9, &temp_s0->field_8EC, arg0) != 0) + if (gunSample1PTransform(sp74, temp_v1_9, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } else { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if (temp_s0->when_detonating_mines_is_0 == 0x1A) + if (handptr->weapon_action_state == GUN_ANIM_STATE_GRENADE_THROW) { - if (temp_s0->weapon_ammo_in_magazine > 0) + if (handptr->weapon_ammo_in_magazine > 0) { - tempf = F_7F05C6FC_ARG1(temp_s0->field_890); - if (sub_GAME_7F05C6FC(grenadeThrowKeyframes, tempf, &temp_s0->field_8EC, arg0) != 0) + tempf = WEAPON_1P_ANIM_TIME(handptr->field_890); + if (gunSample1PTransform(grenadeThrowKeyframes, tempf, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } else { - temp_s0->field_87E = 0; - temp_s0->weapon_firing_status = 1; - temp_s0->weapon_ammo_in_magazine -= 1; - temp_s0->when_detonating_mines_is_0 = 0x1B; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->field_87E = 0; + handptr->weapon_firing_status = 1; + handptr->weapon_ammo_in_magazine -= 1; + handptr->weapon_action_state = GUN_ANIM_STATE_GRENADE_RECOVER; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } else { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if (temp_s0->when_detonating_mines_is_0 == 0x1B) + if (handptr->weapon_action_state == GUN_ANIM_STATE_GRENADE_RECOVER) { - tempf = F_7F05C6FC_ARG1(temp_s0->field_890); - if (sub_GAME_7F05C6FC(timedMineThrowKeyframes, tempf, &temp_s0->field_8EC, arg0) != 0) + tempf = WEAPON_1P_ANIM_TIME(handptr->field_890); + if (gunSample1PTransform(timedMineThrowKeyframes, tempf, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } else { - temp_s0->field_87E = 1; - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->field_87E = 1; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if (temp_s0->when_detonating_mines_is_0 == 0x17) + if (handptr->weapon_action_state == GUN_ANIM_STATE_THROWKNIFE_DRAW) { - if (temp_s0->weapon_ammo_in_magazine > 0) + if (handptr->weapon_ammo_in_magazine > 0) { - if (temp_s0->field_888 != 0) + if (handptr->field_888 != 0) { - temp_s0->when_detonating_mines_is_0 = 0x18; + handptr->weapon_action_state = GUN_ANIM_STATE_THROWKNIFE_THROW; } else { - tempf = F_7F05C6FC_ARG1(temp_s0->field_890); - if (sub_GAME_7F05C6FC(throwKnifeDrawBackKeyframes, tempf, &temp_s0->field_8EC, arg0) != 0) + tempf = WEAPON_1P_ANIM_TIME(handptr->field_890); + if (gunSample1PTransform(throwKnifeDrawBackKeyframes, tempf, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } - else if (sub_GAME_7F05C6FC(throwKnifeReleaseKeyframes, 0.0f, &temp_s0->field_8EC, arg0) != 0) + else if (gunSample1PTransform(throwKnifeReleaseKeyframes, 0.0f, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } else { - temp_s0->when_detonating_mines_is_0 = 0x18; + handptr->weapon_action_state = GUN_ANIM_STATE_THROWKNIFE_THROW; } } } else { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if (temp_s0->when_detonating_mines_is_0 == 0x18) + if (handptr->weapon_action_state == GUN_ANIM_STATE_THROWKNIFE_THROW) { - if (temp_s0->weapon_ammo_in_magazine > 0) + if (handptr->weapon_ammo_in_magazine > 0) { - tempf = F_7F05C6FC_ARG1(temp_s0->field_890); - if (sub_GAME_7F05C6FC(throwKnifeDrawBackKeyframes, tempf, &temp_s0->field_8EC, arg0) != 0) + tempf = WEAPON_1P_ANIM_TIME(handptr->field_890); + if (gunSample1PTransform(throwKnifeDrawBackKeyframes, tempf, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } else { - temp_s0->field_87E = 0; - temp_s0->weapon_firing_status = 1; - temp_s0->weapon_ammo_in_magazine -= 1; - temp_s0->when_detonating_mines_is_0 = 0x19; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->field_87E = 0; + handptr->weapon_firing_status = 1; + handptr->weapon_ammo_in_magazine -= 1; + handptr->weapon_action_state = GUN_ANIM_STATE_THROWKNIFE_RECOVER; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } else { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if (temp_s0->when_detonating_mines_is_0 == 0x19) + if (handptr->weapon_action_state == GUN_ANIM_STATE_THROWKNIFE_RECOVER) { - tempf = F_7F05C6FC_ARG1(temp_s0->field_890); - if (sub_GAME_7F05C6FC(throwKnifeReleaseKeyframes, tempf, &temp_s0->field_8EC, arg0) != 0) + tempf = WEAPON_1P_ANIM_TIME(handptr->field_890); + if (gunSample1PTransform(throwKnifeReleaseKeyframes, tempf, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } else { - temp_s0->field_87E = 1; - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->field_87E = 1; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if (temp_s0->when_detonating_mines_is_0 == 0x1C) + if (handptr->weapon_action_state == GUN_ANIM_STATE_MINE_PLACE) { - if ((temp_s0->weapon_ammo_in_magazine > 0) || (bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_CLICKY) != 0)) + if ((handptr->weapon_ammo_in_magazine > 0) || (bondwalkItemCheckBitflags(var_s1, WEAPONSTATBITFLAG_CLICKY) != 0)) { - tempf = F_7F05C6FC_ARG1(temp_s0->field_890); - if (sub_GAME_7F05C6FC(proxMineThrowKeyframes, tempf, &temp_s0->field_8EC, arg0) != 0) + tempf = WEAPON_1P_ANIM_TIME(handptr->field_890); + + if (gunSample1PTransform(proxMineThrowKeyframes, tempf, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } else { - temp_s0->field_87E = 0; - temp_s0->weapon_firing_status = 1; - temp_s0->weapon_ammo_in_magazine -= 1; - temp_s0->when_detonating_mines_is_0 = 0x1D; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->field_87E = 0; + handptr->weapon_firing_status = 1; + handptr->weapon_ammo_in_magazine -= 1; + handptr->weapon_action_state = GUN_ANIM_STATE_MINE_RECOVER; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } else { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if (temp_s0->when_detonating_mines_is_0 == 0x1D) + if (handptr->weapon_action_state == GUN_ANIM_STATE_MINE_RECOVER) { - tempf = F_7F05C6FC_ARG1(temp_s0->field_890); - if (sub_GAME_7F05C6FC(remoteMineThrowKeyframes, tempf, &temp_s0->field_8EC, arg0) != 0) + tempf = WEAPON_1P_ANIM_TIME(handptr->field_890); + if (gunSample1PTransform(remoteMineThrowKeyframes, tempf, &handptr->field_8EC, hand) != 0) { - temp_s0->field_92C = 1; + handptr->field_92C = 1; } else { - temp_s0->field_87E = 1; - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->field_87E = 1; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } - if (temp_s0->when_detonating_mines_is_0 == 0x24) + if (handptr->weapon_action_state == GUN_ANIM_STATE_USE_ITEM) { if (var_s1 == ITEM_KEYANALYSERCASE) { - if (temp_s0->field_88C == 0) + if (handptr->field_88C == 0) { analyzeGEKey(); } } else if (var_s1 == ITEM_WEAPONCASE) { - if (temp_s0->field_88C == 0) + if (handptr->field_88C == 0) { give_weapon_case_items(); } @@ -15553,7 +6285,7 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 || (var_s1 == ITEM_EXPLOSIVEFLOPPY) || (var_s1 == ITEM_DATTAPE)) { - if (temp_s0->field_88C == 0) + if (handptr->field_88C == 0) { temp_v0_8 = propFindForInteract(); @@ -15586,15 +6318,16 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 // removed } - if (temp_s0->field_888 != 0) + if (handptr->field_888 != 0) { - temp_s0->when_detonating_mines_is_0 = 0; - temp_s0->field_890 = 0.0f; - temp_s0->field_88C = 0; + handptr->weapon_action_state = GUN_ANIM_STATE_IDLE; + handptr->field_890 = 0.0f; + handptr->field_88C = 0; } } } -#undef F_7F05C6FC_ARG1 + +#undef WEAPON_1P_ANIM_TIME #undef WHEN_1_CASE_GRENADELAUNCH_FLD890 #undef WHEN_1_CASE_GRENADE_FLD890 #undef WHEN_D_FLD890 @@ -15614,8 +6347,6 @@ void handle_weapon_id_values_possibly_1st_person_animation(enum GUNHAND arg0, s3 #undef WHEN_1E_FLD890 - - void analyzeGEKey(void) { if (bondinvHasGEKey()) @@ -15635,7 +6366,7 @@ void analyzeGEKey(void) } -int get_keyanalyzer_flag(void) +s32 get_keyanalyzer_flag(void) { return g_CurrentPlayer->copiedgoldeneye; } @@ -15739,7 +6470,6 @@ f32 get_depth_offset_solo_watch_menu_inventory_page_for_item(ITEM_IDS item) } - f32 getCurrentPlayerNoise(GUNHAND hand) { return g_CurrentPlayer->hands[hand].noise; @@ -15782,8 +6512,8 @@ void gunTickNoise(void) } } - noise_reduction = (item_right_stats->NoiseIncreasePerShot * g_GlobalTimerDelta) / (item_right_stats->field_60 * 60.0f); - noise_reduction_max = ((g_CurrentPlayer->hands[GUNRIGHT].noise - item_right_stats->LoudnessMin) * g_GlobalTimerDelta) / (item_right_stats->field_64 * 60.0f); + noise_reduction = (item_right_stats->NoiseIncreasePerShot * g_GlobalTimerDelta) / (item_right_stats->NoiseDecayLinearTime * 60.0f); + noise_reduction_max = ((g_CurrentPlayer->hands[GUNRIGHT].noise - item_right_stats->LoudnessMin) * g_GlobalTimerDelta) / (item_right_stats->NoiseDecayScaledTime * 60.0f); if (noise_reduction < noise_reduction_max) { @@ -15797,8 +6527,8 @@ void gunTickNoise(void) g_CurrentPlayer->hands[GUNRIGHT].noise = item_right_stats->LoudnessMin; } - noise_reduction = (item_left_stats->NoiseIncreasePerShot * g_GlobalTimerDelta) / (item_left_stats->field_60 * 60.0f); - noise_reduction_max = ((g_CurrentPlayer->hands[GUNLEFT].noise - item_left_stats->LoudnessMin) * g_GlobalTimerDelta) / (item_left_stats->field_64 * 60.0f); + noise_reduction = (item_left_stats->NoiseIncreasePerShot * g_GlobalTimerDelta) / (item_left_stats->NoiseDecayLinearTime * 60.0f); + noise_reduction_max = ((g_CurrentPlayer->hands[GUNLEFT].noise - item_left_stats->LoudnessMin) * g_GlobalTimerDelta) / (item_left_stats->NoiseDecayScaledTime * 60.0f); if (noise_reduction < noise_reduction_max) { @@ -15813,6 +6543,7 @@ void gunTickNoise(void) } } + /** * Returns true if the hand has a melee weapon or has ammo in the magazine. */ @@ -15826,7 +6557,7 @@ s32 gunCanUseWeapon(enum GUNHAND hand) /** * US address 7F067420. * Perfect Dark method bgunTickGameplay. - * + * * Handles logic for single gun and dual wield trigger presses. * Calls updates to first person gun animations, gun model loading, noise to AI, and updating color from collision tiles. * Also handles the Watch Magnet Attract hum noise. @@ -15981,20 +6712,20 @@ void gunTickGameplay(s32 triggerOn) g_CurrentPlayer->z_trigger_timer = 0; } - handle_weapon_id_values_possibly_1st_person_animation(0, trigger_state.triggerOn[0]); // Right hand - handle_weapon_id_values_possibly_1st_person_animation(1, trigger_state.triggerOn[1]); // Left hand + gunTickHandState(0, trigger_state.triggerOn[0]); // Right hand + gunTickHandState(1, trigger_state.triggerOn[1]); // Left hand used_to_load_1st_person_model_on_demand(0); used_to_load_1st_person_model_on_demand(1); gunTickNoise(); if (g_CurrentPlayer->resetshadecol) { - set_color_shading_from_tile(get_curplayer_positiondata(), (struct rgba_u8 *) &g_CurrentPlayer->tileColor); + set_color_shading_from_tile(getCurrentPlayerProp(), (struct rgba_u8 *) &g_CurrentPlayer->tileColor); g_CurrentPlayer->resetshadecol = FALSE; } else { - set_color_shading_from_tile(get_curplayer_positiondata(), &weapon_color); + set_color_shading_from_tile(getCurrentPlayerProp(), &weapon_color); update_color_shading(&g_CurrentPlayer->tileColor, &weapon_color); } @@ -16058,7 +6789,7 @@ void sub_GAME_7F067AB4(coord3d *param_1) } -void sub_GAME_7F067B4C(coord3d* pos) +void gunSetTracerTarget(coord3d* pos) { g_CurrentPlayer->hands[GUNLEFT].item_related.x = g_CurrentPlayer->hands[GUNRIGHT].item_related.x = pos->x; g_CurrentPlayer->hands[GUNLEFT].item_related.y = g_CurrentPlayer->hands[GUNRIGHT].item_related.y = pos->y; @@ -16137,7 +6868,6 @@ void caclulate_gun_crosshair_position_rotation(f32 turn_x, f32 turn_y, f32 guncr } - void sub_GAME_7F067F58(f32 turn_x, f32 turn_y, f32 max_aim_lock_speed) { f32 aim_lock_speed; @@ -16157,7 +6887,6 @@ void sub_GAME_7F067F58(f32 turn_x, f32 turn_y, f32 max_aim_lock_speed) } - void sub_GAME_7F067FBC(f32 turn_x, f32 turn_y) { WeaponStats * item_stats; @@ -16181,7 +6910,6 @@ void sub_GAME_7F067FBC(f32 turn_x, f32 turn_y) } - /* * Address: 0x7f068008 */ @@ -16191,7 +6919,6 @@ void get_bullet_angle(f32* horizontal_angle, f32* vertical_angle) { } - void sub_GAME_7F06802C(void) { coord3d coord; @@ -16210,7 +6937,6 @@ void sub_GAME_7F06802C(void) } - void sub_GAME_7F0680D4(coord3d * coord) { coord3d tmp; @@ -16232,7 +6958,6 @@ void sub_GAME_7F0680D4(coord3d * coord) } - /** * Address 0x7F068190. */ @@ -16245,6 +6970,7 @@ void sub_GAME_7F068190(coord3d *zeropos, coord3d *vec) transformAndNormalizeByLength2Dto3D(&g_CurrentPlayer->crosshair_angle, vec, 1.0f); } + /* * Address: 0x7f0681cc * This function computes the angle the player's bullets are fired at @@ -16305,27 +7031,27 @@ CasingRecord* casingCreate(ModelFileHeader* header, Mtxf* mtx) entry->pos.y = mtx->m[3][1]; entry->pos.z = mtx->m[3][2]; #if VERSION_EU - matrix_7f05842c_eu(mtx, entry->unk1C); + matrix_7f05842c_eu(mtx, entry->rot_mtx); #else - entry->unk1C.m[0][0] = mtx->m[0][0]; - entry->unk1C.m[0][1] = mtx->m[0][1]; - entry->unk1C.m[0][2] = mtx->m[0][2]; - entry->unk1C.m[0][3] = 0.0f; + entry->rot_mtx.m[0][0] = mtx->m[0][0]; + entry->rot_mtx.m[0][1] = mtx->m[0][1]; + entry->rot_mtx.m[0][2] = mtx->m[0][2]; + entry->rot_mtx.m[0][3] = 0.0f; - entry->unk1C.m[1][0] = mtx->m[1][0]; - entry->unk1C.m[1][1] = mtx->m[1][1]; - entry->unk1C.m[1][2] = mtx->m[1][2]; - entry->unk1C.m[1][3] = 0.0f; + entry->rot_mtx.m[1][0] = mtx->m[1][0]; + entry->rot_mtx.m[1][1] = mtx->m[1][1]; + entry->rot_mtx.m[1][2] = mtx->m[1][2]; + entry->rot_mtx.m[1][3] = 0.0f; - entry->unk1C.m[2][0] = mtx->m[2][0]; - entry->unk1C.m[2][1] = mtx->m[2][1]; - entry->unk1C.m[2][2] = mtx->m[2][2]; - entry->unk1C.m[2][3] = 0.0f; + entry->rot_mtx.m[2][0] = mtx->m[2][0]; + entry->rot_mtx.m[2][1] = mtx->m[2][1]; + entry->rot_mtx.m[2][2] = mtx->m[2][2]; + entry->rot_mtx.m[2][3] = 0.0f; - entry->unk1C.m[3][0] = 0.0f; - entry->unk1C.m[3][1] = 0.0f; - entry->unk1C.m[3][2] = 0.0f; - entry->unk1C.m[3][3] = 1.0f; + entry->rot_mtx.m[3][0] = 0.0f; + entry->rot_mtx.m[3][1] = 0.0f; + entry->rot_mtx.m[3][2] = 0.0f; + entry->rot_mtx.m[3][3] = 1.0f; #endif return entry; } @@ -16334,11 +7060,41 @@ CasingRecord* casingCreate(ModelFileHeader* header, Mtxf* mtx) } -#ifdef NONMATCHING -void sub_GAME_7F068508(void) { - -} +#if VERSION_EU +#define THROWMTX_OFFSET 0xAD0 +#define THROWPOS_OFFSET 0xB00 +#define THROWPOS_PREV_OFFSET 0xB40 #else +#define THROWMTX_OFFSET 0xAD8 +#define THROWPOS_OFFSET 0xB08 +#define THROWPOS_PREV_OFFSET 0xB48 +#endif + +#define THROWMTX ((Mtxf *) ((u8 *) g_CurrentPlayer + handoffset + THROWMTX_OFFSET)) +#define THROWPOS(k) (((f32 *) ((u8 *) g_CurrentPlayer + handoffset + THROWPOS_OFFSET))[k]) +#define THROWPREV(k) (((f32 *) ((u8 *) g_CurrentPlayer + handoffset + THROWPOS_PREV_OFFSET))[k]) + +extern f32 D_800543B4; +extern f32 D_800543B8; +extern f32 D_800543BC; +extern f32 D_800543C0; +extern f32 D_800543C4; +extern f32 D_800543C8; +extern f32 D_800543CC; +extern f32 D_800543D0; +extern f32 D_800543D4; +extern f32 expended_shell_initial_gravity_modifier_pistol; +extern f32 D_800543DC; +extern f32 D_800543E0; +extern f32 D_800543E4; +extern f32 D_800543E8; +extern f32 D_800543EC; +extern f32 D_800543F0; +extern f32 D_800543F4; +extern f32 D_800543F8; +extern f32 D_800543FC; +extern f32 expended_shell_initial_gravity_modifier_non_pistol; + #ifndef VERSION_EU GLOBAL_ASM( .late_rodata @@ -16382,550 +7138,8 @@ glabel D_800543FC .word 0x493d6c30 /*775875.0*/ glabel expended_shell_initial_gravity_modifier_non_pistol .word 0x3e8e38e4 /*0.27777779*/ -.text -glabel sub_GAME_7F068508 -/* 09D038 7F068508 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 09D03C 7F06850C AFBF001C */ sw $ra, 0x1c($sp) -/* 09D040 7F068510 AFB00014 */ sw $s0, 0x14($sp) -/* 09D044 7F068514 00808025 */ move $s0, $a0 -/* 09D048 7F068518 AFB10018 */ sw $s1, 0x18($sp) -/* 09D04C 7F06851C 0FC17674 */ jal getCurrentPlayerWeaponId -/* 09D050 7F068520 AFA500C4 */ sw $a1, 0xc4($sp) -/* 09D054 7F068524 AFA20078 */ sw $v0, 0x78($sp) -/* 09D058 7F068528 0FC1722D */ jal get_ptr_item_statistics -/* 09D05C 7F06852C 00402025 */ move $a0, $v0 -/* 09D060 7F068530 8C430028 */ lw $v1, 0x28($v0) -/* 09D064 7F068534 506001F6 */ beql $v1, $zero, .L7F068D10 -/* 09D068 7F068538 8FBF001C */ lw $ra, 0x1c($sp) -/* 09D06C 7F06853C 0FC26919 */ jal getPlayerCount -/* 09D070 7F068540 AFA30070 */ sw $v1, 0x70($sp) -/* 09D074 7F068544 28410002 */ slti $at, $v0, 2 -/* 09D078 7F068548 102001F0 */ beqz $at, .L7F068D0C -/* 09D07C 7F06854C 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 09D080 7F068550 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09D084 7F068554 00107140 */ sll $t6, $s0, 5 -/* 09D088 7F068558 001088C0 */ sll $s1, $s0, 3 -/* 09D08C 7F06855C 004E7821 */ addu $t7, $v0, $t6 -/* 09D090 7F068560 8DF80818 */ lw $t8, 0x818($t7) -/* 09D094 7F068564 02308823 */ subu $s1, $s1, $s0 -/* 09D098 7F068568 00118880 */ sll $s1, $s1, 2 -/* 09D09C 7F06856C 8F030000 */ lw $v1, ($t8) -/* 09D0A0 7F068570 02308821 */ addu $s1, $s1, $s0 -/* 09D0A4 7F068574 00118880 */ sll $s1, $s1, 2 -/* 09D0A8 7F068578 1060001F */ beqz $v1, .L7F0685F8 -/* 09D0AC 7F06857C 02308821 */ addu $s1, $s1, $s0 -/* 09D0B0 7F068580 8C620004 */ lw $v0, 4($v1) -/* 09D0B4 7F068584 3C018005 */ lui $at, %hi(D_800543B4) -/* 09D0B8 7F068588 C42043B4 */ lwc1 $f0, %lo(D_800543B4)($at) -/* 09D0BC 7F06858C C4440000 */ lwc1 $f4, ($v0) -/* 09D0C0 7F068590 27A40064 */ addiu $a0, $sp, 0x64 -/* 09D0C4 7F068594 27A5007C */ addiu $a1, $sp, 0x7c -/* 09D0C8 7F068598 46002182 */ mul.s $f6, $f4, $f0 -/* 09D0CC 7F06859C E7A60064 */ swc1 $f6, 0x64($sp) -/* 09D0D0 7F0685A0 C4480004 */ lwc1 $f8, 4($v0) -/* 09D0D4 7F0685A4 46004282 */ mul.s $f10, $f8, $f0 -/* 09D0D8 7F0685A8 E7AA0068 */ swc1 $f10, 0x68($sp) -/* 09D0DC 7F0685AC C4520008 */ lwc1 $f18, 8($v0) -/* 09D0E0 7F0685B0 46009102 */ mul.s $f4, $f18, $f0 -/* 09D0E4 7F0685B4 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 09D0E8 7F0685B8 E7A4006C */ swc1 $f4, 0x6c($sp) -/* 09D0EC 7F0685BC 001088C0 */ sll $s1, $s0, 3 -/* 09D0F0 7F0685C0 02308823 */ subu $s1, $s1, $s0 -/* 09D0F4 7F0685C4 00118880 */ sll $s1, $s1, 2 -/* 09D0F8 7F0685C8 02308821 */ addu $s1, $s1, $s0 -/* 09D0FC 7F0685CC 3C198008 */ lui $t9, %hi(g_CurrentPlayer) -/* 09D100 7F0685D0 8F39A0B0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 09D104 7F0685D4 00118880 */ sll $s1, $s1, 2 -/* 09D108 7F0685D8 02308821 */ addu $s1, $s1, $s0 -/* 09D10C 7F0685DC 001188C0 */ sll $s1, $s1, 3 -/* 09D110 7F0685E0 03312021 */ addu $a0, $t9, $s1 -/* 09D114 7F0685E4 24840AD8 */ addiu $a0, $a0, 0xad8 -/* 09D118 7F0685E8 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 09D11C 7F0685EC 27A5007C */ addiu $a1, $sp, 0x7c -/* 09D120 7F0685F0 10000007 */ b .L7F068610 -/* 09D124 7F0685F4 8FA40070 */ lw $a0, 0x70($sp) -.L7F0685F8: -/* 09D128 7F0685F8 001188C0 */ sll $s1, $s1, 3 -/* 09D12C 7F0685FC 00512021 */ addu $a0, $v0, $s1 -/* 09D130 7F068600 24840AD8 */ addiu $a0, $a0, 0xad8 -/* 09D134 7F068604 0FC16008 */ jal matrix_4x4_copy -/* 09D138 7F068608 27A5007C */ addiu $a1, $sp, 0x7c -/* 09D13C 7F06860C 8FA40070 */ lw $a0, 0x70($sp) -.L7F068610: -/* 09D140 7F068610 0FC1A108 */ jal casingCreate -/* 09D144 7F068614 27A5007C */ addiu $a1, $sp, 0x7c -/* 09D148 7F068618 104001BC */ beqz $v0, .L7F068D0C -/* 09D14C 7F06861C 00408025 */ move $s0, $v0 -/* 09D150 7F068620 3C098003 */ lui $t1, %hi(D_80035EA4) -/* 09D154 7F068624 25295EA4 */ addiu $t1, %lo(D_80035EA4) # addiu $t1, $t1, 0x5ea4 -/* 09D158 7F068628 8D210000 */ lw $at, ($t1) -/* 09D15C 7F06862C 8FA30078 */ lw $v1, 0x78($sp) -/* 09D160 7F068630 27A80054 */ addiu $t0, $sp, 0x54 -/* 09D164 7F068634 AD010000 */ sw $at, ($t0) -/* 09D168 7F068638 8D210008 */ lw $at, 8($t1) -/* 09D16C 7F06863C 8D2B0004 */ lw $t3, 4($t1) -/* 09D170 7F068640 AD010008 */ sw $at, 8($t0) -/* 09D174 7F068644 AD0B0004 */ sw $t3, 4($t0) -/* 09D178 7F068648 C7A600C4 */ lwc1 $f6, 0xc4($sp) -/* 09D17C 7F06864C 24010004 */ li $at, 4 -/* 09D180 7F068650 1061000A */ beq $v1, $at, .L7F06867C -/* 09D184 7F068654 E4460000 */ swc1 $f6, ($v0) -/* 09D188 7F068658 24010005 */ li $at, 5 -/* 09D18C 7F06865C 10610007 */ beq $v1, $at, .L7F06867C -/* 09D190 7F068660 24010006 */ li $at, 6 -/* 09D194 7F068664 10610005 */ beq $v1, $at, .L7F06867C -/* 09D198 7F068668 24010014 */ li $at, 20 -/* 09D19C 7F06866C 10610003 */ beq $v1, $at, .L7F06867C -/* 09D1A0 7F068670 24010015 */ li $at, 21 -/* 09D1A4 7F068674 146100D3 */ bne $v1, $at, .L7F0689C4 -/* 09D1A8 7F068678 00000000 */ nop -.L7F06867C: -/* 09D1AC 7F06867C 0C002914 */ jal randomGetNext -/* 09D1B0 7F068680 00000000 */ nop -/* 09D1B4 7F068684 44824000 */ mtc1 $v0, $f8 -/* 09D1B8 7F068688 3C018005 */ lui $at, %hi(D_800543B8) -/* 09D1BC 7F06868C C42043B8 */ lwc1 $f0, %lo(D_800543B8)($at) -/* 09D1C0 7F068690 04410005 */ bgez $v0, .L7F0686A8 -/* 09D1C4 7F068694 468042A0 */ cvt.s.w $f10, $f8 -/* 09D1C8 7F068698 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D1CC 7F06869C 44819000 */ mtc1 $at, $f18 -/* 09D1D0 7F0686A0 00000000 */ nop -/* 09D1D4 7F0686A4 46125280 */ add.s $f10, $f10, $f18 -.L7F0686A8: -/* 09D1D8 7F0686A8 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09D1DC 7F0686AC 44812000 */ mtc1 $at, $f4 -/* 09D1E0 7F0686B0 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09D1E4 7F0686B4 44819000 */ mtc1 $at, $f18 -/* 09D1E8 7F0686B8 46045182 */ mul.s $f6, $f10, $f4 -/* 09D1EC 7F0686BC 00000000 */ nop -/* 09D1F0 7F0686C0 46003202 */ mul.s $f8, $f6, $f0 -/* 09D1F4 7F0686C4 00000000 */ nop -/* 09D1F8 7F0686C8 46124282 */ mul.s $f10, $f8, $f18 -/* 09D1FC 7F0686CC 46005100 */ add.s $f4, $f10, $f0 -/* 09D200 7F0686D0 46002187 */ neg.s $f6, $f4 -/* 09D204 7F0686D4 0C002914 */ jal randomGetNext -/* 09D208 7F0686D8 E6060010 */ swc1 $f6, 0x10($s0) -/* 09D20C 7F0686DC 44824000 */ mtc1 $v0, $f8 -/* 09D210 7F0686E0 3C014020 */ li $at, 0x40200000 # 2.500000 -/* 09D214 7F0686E4 44810000 */ mtc1 $at, $f0 -/* 09D218 7F0686E8 04410005 */ bgez $v0, .L7F068700 -/* 09D21C 7F0686EC 468044A0 */ cvt.s.w $f18, $f8 -/* 09D220 7F0686F0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D224 7F0686F4 44815000 */ mtc1 $at, $f10 -/* 09D228 7F0686F8 00000000 */ nop -/* 09D22C 7F0686FC 460A9480 */ add.s $f18, $f18, $f10 -.L7F068700: -/* 09D230 7F068700 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09D234 7F068704 44812000 */ mtc1 $at, $f4 -/* 09D238 7F068708 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09D23C 7F06870C 44815000 */ mtc1 $at, $f10 -/* 09D240 7F068710 46049182 */ mul.s $f6, $f18, $f4 -/* 09D244 7F068714 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) -/* 09D248 7F068718 26050010 */ addiu $a1, $s0, 0x10 -/* 09D24C 7F06871C 46003202 */ mul.s $f8, $f6, $f0 -/* 09D250 7F068720 44803000 */ mtc1 $zero, $f6 -/* 09D254 7F068724 00000000 */ nop -/* 09D258 7F068728 E6060018 */ swc1 $f6, 0x18($s0) -/* 09D25C 7F06872C 460A4482 */ mul.s $f18, $f8, $f10 -/* 09D260 7F068730 46009100 */ add.s $f4, $f18, $f0 -/* 09D264 7F068734 E6040014 */ swc1 $f4, 0x14($s0) -/* 09D268 7F068738 8D8CA0B0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 09D26C 7F06873C 01912021 */ addu $a0, $t4, $s1 -/* 09D270 7F068740 0FC160F6 */ jal mtx4RotateVecInPlace -/* 09D274 7F068744 24840AD8 */ addiu $a0, $a0, 0xad8 -/* 09D278 7F068748 0C002914 */ jal randomGetNext -/* 09D27C 7F06874C 00000000 */ nop -/* 09D280 7F068750 44824000 */ mtc1 $v0, $f8 -/* 09D284 7F068754 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D288 7F068758 04410004 */ bgez $v0, .L7F06876C -/* 09D28C 7F06875C 468042A0 */ cvt.s.w $f10, $f8 -/* 09D290 7F068760 44819000 */ mtc1 $at, $f18 -/* 09D294 7F068764 00000000 */ nop -/* 09D298 7F068768 46125280 */ add.s $f10, $f10, $f18 -.L7F06876C: -/* 09D29C 7F06876C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09D2A0 7F068770 44812000 */ mtc1 $at, $f4 -/* 09D2A4 7F068774 3C018005 */ lui $at, %hi(D_800543BC) -/* 09D2A8 7F068778 C42843BC */ lwc1 $f8, %lo(D_800543BC)($at) -/* 09D2AC 7F06877C 46045002 */ mul.s $f0, $f10, $f4 -/* 09D2B0 7F068780 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09D2B4 7F068784 44815000 */ mtc1 $at, $f10 -/* 09D2B8 7F068788 3C018005 */ lui $at, %hi(D_800543C0) -/* 09D2BC 7F06878C 46000180 */ add.s $f6, $f0, $f0 -/* 09D2C0 7F068790 46083482 */ mul.s $f18, $f6, $f8 -/* 09D2C4 7F068794 C42643C0 */ lwc1 $f6, %lo(D_800543C0)($at) -/* 09D2C8 7F068798 460A9102 */ mul.s $f4, $f18, $f10 -/* 09D2CC 7F06879C 46062201 */ sub.s $f8, $f4, $f6 -/* 09D2D0 7F0687A0 0C002914 */ jal randomGetNext -/* 09D2D4 7F0687A4 E7A80054 */ swc1 $f8, 0x54($sp) -/* 09D2D8 7F0687A8 44829000 */ mtc1 $v0, $f18 -/* 09D2DC 7F0687AC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D2E0 7F0687B0 04410004 */ bgez $v0, .L7F0687C4 -/* 09D2E4 7F0687B4 468092A0 */ cvt.s.w $f10, $f18 -/* 09D2E8 7F0687B8 44812000 */ mtc1 $at, $f4 -/* 09D2EC 7F0687BC 00000000 */ nop -/* 09D2F0 7F0687C0 46045280 */ add.s $f10, $f10, $f4 -.L7F0687C4: -/* 09D2F4 7F0687C4 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09D2F8 7F0687C8 44813000 */ mtc1 $at, $f6 -/* 09D2FC 7F0687CC 3C018005 */ lui $at, %hi(D_800543C4) -/* 09D300 7F0687D0 C43243C4 */ lwc1 $f18, %lo(D_800543C4)($at) -/* 09D304 7F0687D4 46065002 */ mul.s $f0, $f10, $f6 -/* 09D308 7F0687D8 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09D30C 7F0687DC 44815000 */ mtc1 $at, $f10 -/* 09D310 7F0687E0 3C018005 */ lui $at, %hi(D_800543C8) -/* 09D314 7F0687E4 46000200 */ add.s $f8, $f0, $f0 -/* 09D318 7F0687E8 46124102 */ mul.s $f4, $f8, $f18 -/* 09D31C 7F0687EC C42843C8 */ lwc1 $f8, %lo(D_800543C8)($at) -/* 09D320 7F0687F0 460A2182 */ mul.s $f6, $f4, $f10 -/* 09D324 7F0687F4 46083481 */ sub.s $f18, $f6, $f8 -/* 09D328 7F0687F8 0C002914 */ jal randomGetNext -/* 09D32C 7F0687FC E7B20058 */ swc1 $f18, 0x58($sp) -/* 09D330 7F068800 44822000 */ mtc1 $v0, $f4 -/* 09D334 7F068804 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D338 7F068808 04410004 */ bgez $v0, .L7F06881C -/* 09D33C 7F06880C 468022A0 */ cvt.s.w $f10, $f4 -/* 09D340 7F068810 44813000 */ mtc1 $at, $f6 -/* 09D344 7F068814 00000000 */ nop -/* 09D348 7F068818 46065280 */ add.s $f10, $f10, $f6 -.L7F06881C: -/* 09D34C 7F06881C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09D350 7F068820 44814000 */ mtc1 $at, $f8 -/* 09D354 7F068824 3C018005 */ lui $at, %hi(D_800543CC) -/* 09D358 7F068828 C42443CC */ lwc1 $f4, %lo(D_800543CC)($at) -/* 09D35C 7F06882C 46085002 */ mul.s $f0, $f10, $f8 -/* 09D360 7F068830 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09D364 7F068834 44815000 */ mtc1 $at, $f10 -/* 09D368 7F068838 3C018005 */ lui $at, %hi(D_800543D0) -/* 09D36C 7F06883C 27A40054 */ addiu $a0, $sp, 0x54 -/* 09D370 7F068840 2605005C */ addiu $a1, $s0, 0x5c -/* 09D374 7F068844 46000480 */ add.s $f18, $f0, $f0 -/* 09D378 7F068848 46049182 */ mul.s $f6, $f18, $f4 -/* 09D37C 7F06884C C43243D0 */ lwc1 $f18, %lo(D_800543D0)($at) -/* 09D380 7F068850 460A3202 */ mul.s $f8, $f6, $f10 -/* 09D384 7F068854 46124101 */ sub.s $f4, $f8, $f18 -/* 09D388 7F068858 0FC161C5 */ jal matrix_4x4_set_rotation_around_xyz -/* 09D38C 7F06885C E7A4005C */ swc1 $f4, 0x5c($sp) -/* 09D390 7F068860 0C002914 */ jal randomGetNext -/* 09D394 7F068864 00000000 */ nop -/* 09D398 7F068868 3C030015 */ lui $v1, (0x00158679 >> 16) # lui $v1, 0x15 -/* 09D39C 7F06886C 34638679 */ ori $v1, (0x00158679 & 0xFFFF) # ori $v1, $v1, 0x8679 -/* 09D3A0 7F068870 00026E02 */ srl $t5, $v0, 0x18 -/* 09D3A4 7F068874 01A30019 */ multu $t5, $v1 -/* 09D3A8 7F068878 00007012 */ mflo $t6 -/* 09D3AC 7F06887C 000E7A83 */ sra $t7, $t6, 0xa -/* 09D3B0 7F068880 01E3C021 */ addu $t8, $t7, $v1 -/* 09D3B4 7F068884 0C002914 */ jal randomGetNext -/* 09D3B8 7F068888 AFB8004C */ sw $t8, 0x4c($sp) -/* 09D3BC 7F06888C 8FB9004C */ lw $t9, 0x4c($sp) -/* 09D3C0 7F068890 C60C0014 */ lwc1 $f12, 0x14($s0) -/* 09D3C4 7F068894 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D3C8 7F068898 0059001B */ divu $zero, $v0, $t9 -/* 09D3CC 7F06889C 00005010 */ mfhi $t2 -/* 09D3D0 7F0688A0 448A3000 */ mtc1 $t2, $f6 -/* 09D3D4 7F0688A4 17200002 */ bnez $t9, .L7F0688B0 -/* 09D3D8 7F0688A8 00000000 */ nop -/* 09D3DC 7F0688AC 0007000D */ break 7 -.L7F0688B0: -/* 09D3E0 7F0688B0 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 09D3E4 7F0688B4 05410004 */ bgez $t2, .L7F0688C8 -/* 09D3E8 7F0688B8 468032A0 */ cvt.s.w $f10, $f6 -/* 09D3EC 7F0688BC 44814000 */ mtc1 $at, $f8 -/* 09D3F0 7F0688C0 00000000 */ nop -/* 09D3F4 7F0688C4 46085280 */ add.s $f10, $f10, $f8 -.L7F0688C8: -/* 09D3F8 7F0688C8 3C018005 */ lui $at, %hi(D_800543D4) -/* 09D3FC 7F0688CC C43243D4 */ lwc1 $f18, %lo(D_800543D4)($at) -/* 09D400 7F0688D0 3C018005 */ lui $at, %hi(expended_shell_initial_gravity_modifier_pistol) -/* 09D404 7F0688D4 C42443D8 */ lwc1 $f4, %lo(expended_shell_initial_gravity_modifier_pistol)($at) -/* 09D408 7F0688D8 46125003 */ div.s $f0, $f10, $f18 -/* 09D40C 7F0688DC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 09D410 7F0688E0 44819000 */ mtc1 $at, $f18 -/* 09D414 7F0688E4 C60E0010 */ lwc1 $f14, 0x10($s0) -/* 09D418 7F0688E8 C6100018 */ lwc1 $f16, 0x18($s0) -/* 09D41C 7F0688EC 3C088005 */ lui $t0, %hi(g_ClockTimer) -/* 09D420 7F0688F0 2484A0B0 */ addiu $a0, %lo(g_CurrentPlayer) # addiu $a0, $a0, -0x5f50 -/* 09D424 7F0688F4 46040182 */ mul.s $f6, $f0, $f4 -/* 09D428 7F0688F8 46066081 */ sub.s $f2, $f12, $f6 -/* 09D42C 7F0688FC C6060008 */ lwc1 $f6, 8($s0) -/* 09D430 7F068900 46026200 */ add.s $f8, $f12, $f2 -/* 09D434 7F068904 E6020014 */ swc1 $f2, 0x14($s0) -/* 09D438 7F068908 46080282 */ mul.s $f10, $f0, $f8 -/* 09D43C 7F06890C 00000000 */ nop -/* 09D440 7F068910 46125102 */ mul.s $f4, $f10, $f18 -/* 09D444 7F068914 C60A0004 */ lwc1 $f10, 4($s0) -/* 09D448 7F068918 460E0482 */ mul.s $f18, $f0, $f14 -/* 09D44C 7F06891C 46043200 */ add.s $f8, $f6, $f4 -/* 09D450 7F068920 C604000C */ lwc1 $f4, 0xc($s0) -/* 09D454 7F068924 46125180 */ add.s $f6, $f10, $f18 -/* 09D458 7F068928 E6080008 */ swc1 $f8, 8($s0) -/* 09D45C 7F06892C 46100202 */ mul.s $f8, $f0, $f16 -/* 09D460 7F068930 E6060004 */ swc1 $f6, 4($s0) -/* 09D464 7F068934 46082280 */ add.s $f10, $f4, $f8 -/* 09D468 7F068938 E60A000C */ swc1 $f10, 0xc($s0) -/* 09D46C 7F06893C 8D088374 */ lw $t0, %lo(g_ClockTimer)($t0) -/* 09D470 7F068940 190000F2 */ blez $t0, .L7F068D0C -/* 09D474 7F068944 00000000 */ nop -/* 09D478 7F068948 8C890000 */ lw $t1, ($a0) -/* 09D47C 7F06894C 3C038005 */ lui $v1, %hi(g_GlobalTimerDelta) -/* 09D480 7F068950 24638378 */ addiu $v1, %lo(g_GlobalTimerDelta) # addiu $v1, $v1, -0x7c88 -/* 09D484 7F068954 01311021 */ addu $v0, $t1, $s1 -/* 09D488 7F068958 C4520B08 */ lwc1 $f18, 0xb08($v0) -/* 09D48C 7F06895C C4460B48 */ lwc1 $f6, 0xb48($v0) -/* 09D490 7F068960 C4680000 */ lwc1 $f8, ($v1) -/* 09D494 7F068964 46069101 */ sub.s $f4, $f18, $f6 -/* 09D498 7F068968 46082283 */ div.s $f10, $f4, $f8 -/* 09D49C 7F06896C 460A7480 */ add.s $f18, $f14, $f10 -/* 09D4A0 7F068970 E6120010 */ swc1 $f18, 0x10($s0) -/* 09D4A4 7F068974 8C8B0000 */ lw $t3, ($a0) -/* 09D4A8 7F068978 C46A0000 */ lwc1 $f10, ($v1) -/* 09D4AC 7F06897C 01711021 */ addu $v0, $t3, $s1 -/* 09D4B0 7F068980 C4460B0C */ lwc1 $f6, 0xb0c($v0) -/* 09D4B4 7F068984 C4440B4C */ lwc1 $f4, 0xb4c($v0) -/* 09D4B8 7F068988 46043201 */ sub.s $f8, $f6, $f4 -/* 09D4BC 7F06898C C6060014 */ lwc1 $f6, 0x14($s0) -/* 09D4C0 7F068990 460A4483 */ div.s $f18, $f8, $f10 -/* 09D4C4 7F068994 46123100 */ add.s $f4, $f6, $f18 -/* 09D4C8 7F068998 E6040014 */ swc1 $f4, 0x14($s0) -/* 09D4CC 7F06899C 8C8C0000 */ lw $t4, ($a0) -/* 09D4D0 7F0689A0 C4720000 */ lwc1 $f18, ($v1) -/* 09D4D4 7F0689A4 01911021 */ addu $v0, $t4, $s1 -/* 09D4D8 7F0689A8 C4480B10 */ lwc1 $f8, 0xb10($v0) -/* 09D4DC 7F0689AC C44A0B50 */ lwc1 $f10, 0xb50($v0) -/* 09D4E0 7F0689B0 460A4181 */ sub.s $f6, $f8, $f10 -/* 09D4E4 7F0689B4 46123103 */ div.s $f4, $f6, $f18 -/* 09D4E8 7F0689B8 46048200 */ add.s $f8, $f16, $f4 -/* 09D4EC 7F0689BC 100000D3 */ b .L7F068D0C -/* 09D4F0 7F0689C0 E6080018 */ swc1 $f8, 0x18($s0) -.L7F0689C4: -/* 09D4F4 7F0689C4 0C002914 */ jal randomGetNext -/* 09D4F8 7F0689C8 00000000 */ nop -/* 09D4FC 7F0689CC 44825000 */ mtc1 $v0, $f10 -/* 09D500 7F0689D0 3C018005 */ lui $at, %hi(D_800543DC) -/* 09D504 7F0689D4 C42043DC */ lwc1 $f0, %lo(D_800543DC)($at) -/* 09D508 7F0689D8 04410005 */ bgez $v0, .L7F0689F0 -/* 09D50C 7F0689DC 468051A0 */ cvt.s.w $f6, $f10 -/* 09D510 7F0689E0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D514 7F0689E4 44819000 */ mtc1 $at, $f18 -/* 09D518 7F0689E8 00000000 */ nop -/* 09D51C 7F0689EC 46123180 */ add.s $f6, $f6, $f18 -.L7F0689F0: -/* 09D520 7F0689F0 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09D524 7F0689F4 44812000 */ mtc1 $at, $f4 -/* 09D528 7F0689F8 3C013E00 */ li $at, 0x3E000000 # 0.125000 -/* 09D52C 7F0689FC 44819000 */ mtc1 $at, $f18 -/* 09D530 7F068A00 46043202 */ mul.s $f8, $f6, $f4 -/* 09D534 7F068A04 00000000 */ nop -/* 09D538 7F068A08 46004282 */ mul.s $f10, $f8, $f0 -/* 09D53C 7F068A0C 00000000 */ nop -/* 09D540 7F068A10 46125182 */ mul.s $f6, $f10, $f18 -/* 09D544 7F068A14 46003100 */ add.s $f4, $f6, $f0 -/* 09D548 7F068A18 46002207 */ neg.s $f8, $f4 -/* 09D54C 7F068A1C 0C002914 */ jal randomGetNext -/* 09D550 7F068A20 E6080010 */ swc1 $f8, 0x10($s0) -/* 09D554 7F068A24 44825000 */ mtc1 $v0, $f10 -/* 09D558 7F068A28 3C018005 */ lui $at, %hi(D_800543E0) -/* 09D55C 7F068A2C C42043E0 */ lwc1 $f0, %lo(D_800543E0)($at) -/* 09D560 7F068A30 04410005 */ bgez $v0, .L7F068A48 -/* 09D564 7F068A34 468054A0 */ cvt.s.w $f18, $f10 -/* 09D568 7F068A38 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D56C 7F068A3C 44813000 */ mtc1 $at, $f6 -/* 09D570 7F068A40 00000000 */ nop -/* 09D574 7F068A44 46069480 */ add.s $f18, $f18, $f6 -.L7F068A48: -/* 09D578 7F068A48 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09D57C 7F068A4C 44812000 */ mtc1 $at, $f4 -/* 09D580 7F068A50 3C013E00 */ li $at, 0x3E000000 # 0.125000 -/* 09D584 7F068A54 44813000 */ mtc1 $at, $f6 -/* 09D588 7F068A58 46049202 */ mul.s $f8, $f18, $f4 -/* 09D58C 7F068A5C 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) -/* 09D590 7F068A60 26050010 */ addiu $a1, $s0, 0x10 -/* 09D594 7F068A64 46004282 */ mul.s $f10, $f8, $f0 -/* 09D598 7F068A68 44804000 */ mtc1 $zero, $f8 -/* 09D59C 7F068A6C 00000000 */ nop -/* 09D5A0 7F068A70 E6080018 */ swc1 $f8, 0x18($s0) -/* 09D5A4 7F068A74 46065482 */ mul.s $f18, $f10, $f6 -/* 09D5A8 7F068A78 46009100 */ add.s $f4, $f18, $f0 -/* 09D5AC 7F068A7C E6040014 */ swc1 $f4, 0x14($s0) -/* 09D5B0 7F068A80 8DADA0B0 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 09D5B4 7F068A84 01B12021 */ addu $a0, $t5, $s1 -/* 09D5B8 7F068A88 0FC160F6 */ jal mtx4RotateVecInPlace -/* 09D5BC 7F068A8C 24840AD8 */ addiu $a0, $a0, 0xad8 -/* 09D5C0 7F068A90 0C002914 */ jal randomGetNext -/* 09D5C4 7F068A94 00000000 */ nop -/* 09D5C8 7F068A98 44825000 */ mtc1 $v0, $f10 -/* 09D5CC 7F068A9C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D5D0 7F068AA0 04410004 */ bgez $v0, .L7F068AB4 -/* 09D5D4 7F068AA4 468051A0 */ cvt.s.w $f6, $f10 -/* 09D5D8 7F068AA8 44819000 */ mtc1 $at, $f18 -/* 09D5DC 7F068AAC 00000000 */ nop -/* 09D5E0 7F068AB0 46123180 */ add.s $f6, $f6, $f18 -.L7F068AB4: -/* 09D5E4 7F068AB4 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09D5E8 7F068AB8 44812000 */ mtc1 $at, $f4 -/* 09D5EC 7F068ABC 3C018005 */ lui $at, %hi(D_800543E4) -/* 09D5F0 7F068AC0 C42A43E4 */ lwc1 $f10, %lo(D_800543E4)($at) -/* 09D5F4 7F068AC4 46043002 */ mul.s $f0, $f6, $f4 -/* 09D5F8 7F068AC8 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09D5FC 7F068ACC 44813000 */ mtc1 $at, $f6 -/* 09D600 7F068AD0 3C018005 */ lui $at, %hi(D_800543E8) -/* 09D604 7F068AD4 46000200 */ add.s $f8, $f0, $f0 -/* 09D608 7F068AD8 460A4482 */ mul.s $f18, $f8, $f10 -/* 09D60C 7F068ADC C42843E8 */ lwc1 $f8, %lo(D_800543E8)($at) -/* 09D610 7F068AE0 46069102 */ mul.s $f4, $f18, $f6 -/* 09D614 7F068AE4 46082281 */ sub.s $f10, $f4, $f8 -/* 09D618 7F068AE8 0C002914 */ jal randomGetNext -/* 09D61C 7F068AEC E7AA0054 */ swc1 $f10, 0x54($sp) -/* 09D620 7F068AF0 44829000 */ mtc1 $v0, $f18 -/* 09D624 7F068AF4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D628 7F068AF8 04410004 */ bgez $v0, .L7F068B0C -/* 09D62C 7F068AFC 468091A0 */ cvt.s.w $f6, $f18 -/* 09D630 7F068B00 44812000 */ mtc1 $at, $f4 -/* 09D634 7F068B04 00000000 */ nop -/* 09D638 7F068B08 46043180 */ add.s $f6, $f6, $f4 -.L7F068B0C: -/* 09D63C 7F068B0C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09D640 7F068B10 44814000 */ mtc1 $at, $f8 -/* 09D644 7F068B14 3C018005 */ lui $at, %hi(D_800543EC) -/* 09D648 7F068B18 C43243EC */ lwc1 $f18, %lo(D_800543EC)($at) -/* 09D64C 7F068B1C 46083002 */ mul.s $f0, $f6, $f8 -/* 09D650 7F068B20 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09D654 7F068B24 44813000 */ mtc1 $at, $f6 -/* 09D658 7F068B28 3C018005 */ lui $at, %hi(D_800543F0) -/* 09D65C 7F068B2C 46000280 */ add.s $f10, $f0, $f0 -/* 09D660 7F068B30 46125102 */ mul.s $f4, $f10, $f18 -/* 09D664 7F068B34 C42A43F0 */ lwc1 $f10, %lo(D_800543F0)($at) -/* 09D668 7F068B38 46062202 */ mul.s $f8, $f4, $f6 -/* 09D66C 7F068B3C 460A4481 */ sub.s $f18, $f8, $f10 -/* 09D670 7F068B40 0C002914 */ jal randomGetNext -/* 09D674 7F068B44 E7B20058 */ swc1 $f18, 0x58($sp) -/* 09D678 7F068B48 44822000 */ mtc1 $v0, $f4 -/* 09D67C 7F068B4C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D680 7F068B50 04410004 */ bgez $v0, .L7F068B64 -/* 09D684 7F068B54 468021A0 */ cvt.s.w $f6, $f4 -/* 09D688 7F068B58 44814000 */ mtc1 $at, $f8 -/* 09D68C 7F068B5C 00000000 */ nop -/* 09D690 7F068B60 46083180 */ add.s $f6, $f6, $f8 -.L7F068B64: -/* 09D694 7F068B64 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09D698 7F068B68 44815000 */ mtc1 $at, $f10 -/* 09D69C 7F068B6C 3C018005 */ lui $at, %hi(D_800543F4) -/* 09D6A0 7F068B70 C42443F4 */ lwc1 $f4, %lo(D_800543F4)($at) -/* 09D6A4 7F068B74 460A3002 */ mul.s $f0, $f6, $f10 -/* 09D6A8 7F068B78 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09D6AC 7F068B7C 44813000 */ mtc1 $at, $f6 -/* 09D6B0 7F068B80 3C018005 */ lui $at, %hi(D_800543F8) -/* 09D6B4 7F068B84 27A40054 */ addiu $a0, $sp, 0x54 -/* 09D6B8 7F068B88 2605005C */ addiu $a1, $s0, 0x5c -/* 09D6BC 7F068B8C 46000480 */ add.s $f18, $f0, $f0 -/* 09D6C0 7F068B90 46049202 */ mul.s $f8, $f18, $f4 -/* 09D6C4 7F068B94 C43243F8 */ lwc1 $f18, %lo(D_800543F8)($at) -/* 09D6C8 7F068B98 46064282 */ mul.s $f10, $f8, $f6 -/* 09D6CC 7F068B9C 46125101 */ sub.s $f4, $f10, $f18 -/* 09D6D0 7F068BA0 0FC161C5 */ jal matrix_4x4_set_rotation_around_xyz -/* 09D6D4 7F068BA4 E7A4005C */ swc1 $f4, 0x5c($sp) -/* 09D6D8 7F068BA8 0C002914 */ jal randomGetNext -/* 09D6DC 7F068BAC 00000000 */ nop -/* 09D6E0 7F068BB0 3C030015 */ lui $v1, (0x00158679 >> 16) # lui $v1, 0x15 -/* 09D6E4 7F068BB4 34638679 */ ori $v1, (0x00158679 & 0xFFFF) # ori $v1, $v1, 0x8679 -/* 09D6E8 7F068BB8 00027602 */ srl $t6, $v0, 0x18 -/* 09D6EC 7F068BBC 01C30019 */ multu $t6, $v1 -/* 09D6F0 7F068BC0 00007812 */ mflo $t7 -/* 09D6F4 7F068BC4 000FC283 */ sra $t8, $t7, 0xa -/* 09D6F8 7F068BC8 0303C821 */ addu $t9, $t8, $v1 -/* 09D6FC 7F068BCC 0C002914 */ jal randomGetNext -/* 09D700 7F068BD0 AFB9003C */ sw $t9, 0x3c($sp) -/* 09D704 7F068BD4 8FAA003C */ lw $t2, 0x3c($sp) -/* 09D708 7F068BD8 C60C0014 */ lwc1 $f12, 0x14($s0) -/* 09D70C 7F068BDC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09D710 7F068BE0 004A001B */ divu $zero, $v0, $t2 -/* 09D714 7F068BE4 00004010 */ mfhi $t0 -/* 09D718 7F068BE8 44884000 */ mtc1 $t0, $f8 -/* 09D71C 7F068BEC 15400002 */ bnez $t2, .L7F068BF8 -/* 09D720 7F068BF0 00000000 */ nop -/* 09D724 7F068BF4 0007000D */ break 7 -.L7F068BF8: -/* 09D728 7F068BF8 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) -/* 09D72C 7F068BFC 05010004 */ bgez $t0, .L7F068C10 -/* 09D730 7F068C00 468041A0 */ cvt.s.w $f6, $f8 -/* 09D734 7F068C04 44815000 */ mtc1 $at, $f10 -/* 09D738 7F068C08 00000000 */ nop -/* 09D73C 7F068C0C 460A3180 */ add.s $f6, $f6, $f10 -.L7F068C10: -/* 09D740 7F068C10 3C018005 */ lui $at, %hi(D_800543FC) -/* 09D744 7F068C14 C43243FC */ lwc1 $f18, %lo(D_800543FC)($at) -/* 09D748 7F068C18 3C018005 */ lui $at, %hi(expended_shell_initial_gravity_modifier_non_pistol) -/* 09D74C 7F068C1C C4244400 */ lwc1 $f4, %lo(expended_shell_initial_gravity_modifier_non_pistol)($at) -/* 09D750 7F068C20 46123003 */ div.s $f0, $f6, $f18 -/* 09D754 7F068C24 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 09D758 7F068C28 44819000 */ mtc1 $at, $f18 -/* 09D75C 7F068C2C C60E0010 */ lwc1 $f14, 0x10($s0) -/* 09D760 7F068C30 C6100018 */ lwc1 $f16, 0x18($s0) -/* 09D764 7F068C34 3C098005 */ lui $t1, %hi(g_ClockTimer) -/* 09D768 7F068C38 46040202 */ mul.s $f8, $f0, $f4 -/* 09D76C 7F068C3C 46086081 */ sub.s $f2, $f12, $f8 -/* 09D770 7F068C40 C6080008 */ lwc1 $f8, 8($s0) -/* 09D774 7F068C44 46026280 */ add.s $f10, $f12, $f2 -/* 09D778 7F068C48 E6020014 */ swc1 $f2, 0x14($s0) -/* 09D77C 7F068C4C 460A0182 */ mul.s $f6, $f0, $f10 -/* 09D780 7F068C50 00000000 */ nop -/* 09D784 7F068C54 46123102 */ mul.s $f4, $f6, $f18 -/* 09D788 7F068C58 C6060004 */ lwc1 $f6, 4($s0) -/* 09D78C 7F068C5C 460E0482 */ mul.s $f18, $f0, $f14 -/* 09D790 7F068C60 46044280 */ add.s $f10, $f8, $f4 -/* 09D794 7F068C64 C604000C */ lwc1 $f4, 0xc($s0) -/* 09D798 7F068C68 46123200 */ add.s $f8, $f6, $f18 -/* 09D79C 7F068C6C E60A0008 */ swc1 $f10, 8($s0) -/* 09D7A0 7F068C70 46100282 */ mul.s $f10, $f0, $f16 -/* 09D7A4 7F068C74 E6080004 */ swc1 $f8, 4($s0) -/* 09D7A8 7F068C78 460A2180 */ add.s $f6, $f4, $f10 -/* 09D7AC 7F068C7C E606000C */ swc1 $f6, 0xc($s0) -/* 09D7B0 7F068C80 8D298374 */ lw $t1, %lo(g_ClockTimer)($t1) -/* 09D7B4 7F068C84 19200021 */ blez $t1, .L7F068D0C -/* 09D7B8 7F068C88 00000000 */ nop -/* 09D7BC 7F068C8C 8D6BA0B0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 09D7C0 7F068C90 3C038005 */ lui $v1, %hi(g_GlobalTimerDelta) -/* 09D7C4 7F068C94 24638378 */ addiu $v1, %lo(g_GlobalTimerDelta) # addiu $v1, $v1, -0x7c88 -/* 09D7C8 7F068C98 01711021 */ addu $v0, $t3, $s1 -/* 09D7CC 7F068C9C C4520B08 */ lwc1 $f18, 0xb08($v0) -/* 09D7D0 7F068CA0 C4480B48 */ lwc1 $f8, 0xb48($v0) -/* 09D7D4 7F068CA4 C46A0000 */ lwc1 $f10, ($v1) -/* 09D7D8 7F068CA8 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) -/* 09D7DC 7F068CAC 46089101 */ sub.s $f4, $f18, $f8 -/* 09D7E0 7F068CB0 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) -/* 09D7E4 7F068CB4 460A2183 */ div.s $f6, $f4, $f10 -/* 09D7E8 7F068CB8 46067480 */ add.s $f18, $f14, $f6 -/* 09D7EC 7F068CBC E6120010 */ swc1 $f18, 0x10($s0) -/* 09D7F0 7F068CC0 8D8CA0B0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 09D7F4 7F068CC4 C4660000 */ lwc1 $f6, ($v1) -/* 09D7F8 7F068CC8 01911021 */ addu $v0, $t4, $s1 -/* 09D7FC 7F068CCC C4480B0C */ lwc1 $f8, 0xb0c($v0) -/* 09D800 7F068CD0 C4440B4C */ lwc1 $f4, 0xb4c($v0) -/* 09D804 7F068CD4 46044281 */ sub.s $f10, $f8, $f4 -/* 09D808 7F068CD8 C6080014 */ lwc1 $f8, 0x14($s0) -/* 09D80C 7F068CDC 46065483 */ div.s $f18, $f10, $f6 -/* 09D810 7F068CE0 46124100 */ add.s $f4, $f8, $f18 -/* 09D814 7F068CE4 E6040014 */ swc1 $f4, 0x14($s0) -/* 09D818 7F068CE8 8DADA0B0 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 09D81C 7F068CEC C4720000 */ lwc1 $f18, ($v1) -/* 09D820 7F068CF0 01B11021 */ addu $v0, $t5, $s1 -/* 09D824 7F068CF4 C44A0B10 */ lwc1 $f10, 0xb10($v0) -/* 09D828 7F068CF8 C4460B50 */ lwc1 $f6, 0xb50($v0) -/* 09D82C 7F068CFC 46065201 */ sub.s $f8, $f10, $f6 -/* 09D830 7F068D00 46124103 */ div.s $f4, $f8, $f18 -/* 09D834 7F068D04 46048280 */ add.s $f10, $f16, $f4 -/* 09D838 7F068D08 E60A0018 */ swc1 $f10, 0x18($s0) -.L7F068D0C: -/* 09D83C 7F068D0C 8FBF001C */ lw $ra, 0x1c($sp) -.L7F068D10: -/* 09D840 7F068D10 8FB00014 */ lw $s0, 0x14($sp) -/* 09D844 7F068D14 8FB10018 */ lw $s1, 0x18($sp) -/* 09D848 7F068D18 03E00008 */ jr $ra -/* 09D84C 7F068D1C 27BD00C0 */ addiu $sp, $sp, 0xc0 ) -#endif - -#ifdef VERSION_EU +#else GLOBAL_ASM( .late_rodata glabel D_800543B4 @@ -16968,561 +7182,213 @@ glabel D_800543FC .word 0x49634ea0 /* 931050.0 */ glabel expended_shell_initial_gravity_modifier_non_pistol .word 0x3e8e38e4 /*0.27777779*/ -.text -glabel sub_GAME_7F068508 -/* 09B658 7F068C68 27BDFEF8 */ addiu $sp, $sp, -0x108 -/* 09B65C 7F068C6C AFBF001C */ sw $ra, 0x1c($sp) -/* 09B660 7F068C70 AFB00014 */ sw $s0, 0x14($sp) -/* 09B664 7F068C74 00808025 */ move $s0, $a0 -/* 09B668 7F068C78 AFB10018 */ sw $s1, 0x18($sp) -/* 09B66C 7F068C7C 0FC177A2 */ jal getCurrentPlayerWeaponId -/* 09B670 7F068C80 AFA5010C */ sw $a1, 0x10c($sp) -/* 09B674 7F068C84 AFA200C0 */ sw $v0, 0xc0($sp) -/* 09B678 7F068C88 0FC17359 */ jal get_ptr_item_statistics -/* 09B67C 7F068C8C 00402025 */ move $a0, $v0 -/* 09B680 7F068C90 8C430028 */ lw $v1, 0x28($v0) -/* 09B684 7F068C94 506001FE */ beql $v1, $zero, .L7F069490 -/* 09B688 7F068C98 8FBF001C */ lw $ra, 0x1c($sp) -/* 09B68C 7F068C9C 0FC26669 */ jal getPlayerCount -/* 09B690 7F068CA0 AFA300B8 */ sw $v1, 0xb8($sp) -/* 09B694 7F068CA4 28410002 */ slti $at, $v0, 2 -/* 09B698 7F068CA8 102001F8 */ beqz $at, .L7F06948C -/* 09B69C 7F068CAC 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 09B6A0 7F068CB0 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09B6A4 7F068CB4 001070C0 */ sll $t6, $s0, 3 -/* 09B6A8 7F068CB8 01D07023 */ subu $t6, $t6, $s0 -/* 09B6AC 7F068CBC 000E7080 */ sll $t6, $t6, 2 -/* 09B6B0 7F068CC0 004E7821 */ addu $t7, $v0, $t6 -/* 09B6B4 7F068CC4 8DF80818 */ lw $t8, 0x818($t7) -/* 09B6B8 7F068CC8 001088C0 */ sll $s1, $s0, 3 -/* 09B6BC 7F068CCC 02308823 */ subu $s1, $s1, $s0 -/* 09B6C0 7F068CD0 8F030000 */ lw $v1, ($t8) -/* 09B6C4 7F068CD4 00118880 */ sll $s1, $s1, 2 -/* 09B6C8 7F068CD8 02308821 */ addu $s1, $s1, $s0 -/* 09B6CC 7F068CDC 1060001F */ beqz $v1, .L7F068D5C -/* 09B6D0 7F068CE0 00118880 */ sll $s1, $s1, 2 -/* 09B6D4 7F068CE4 8C620004 */ lw $v0, 4($v1) -/* 09B6D8 7F068CE8 3C018005 */ lui $at, %hi(D_800543B4) # $at, 0x8005 -/* 09B6DC 7F068CEC C420A4F4 */ lwc1 $f0, %lo(D_800543B4)($at) -/* 09B6E0 7F068CF0 C4440000 */ lwc1 $f4, ($v0) -/* 09B6E4 7F068CF4 27A400AC */ addiu $a0, $sp, 0xac -/* 09B6E8 7F068CF8 27A500C4 */ addiu $a1, $sp, 0xc4 -/* 09B6EC 7F068CFC 46002182 */ mul.s $f6, $f4, $f0 -/* 09B6F0 7F068D00 E7A600AC */ swc1 $f6, 0xac($sp) -/* 09B6F4 7F068D04 C4480004 */ lwc1 $f8, 4($v0) -/* 09B6F8 7F068D08 46004282 */ mul.s $f10, $f8, $f0 -/* 09B6FC 7F068D0C E7AA00B0 */ swc1 $f10, 0xb0($sp) -/* 09B700 7F068D10 C4520008 */ lwc1 $f18, 8($v0) -/* 09B704 7F068D14 46009102 */ mul.s $f4, $f18, $f0 -/* 09B708 7F068D18 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 09B70C 7F068D1C E7A400B4 */ swc1 $f4, 0xb4($sp) -/* 09B710 7F068D20 001088C0 */ sll $s1, $s0, 3 -/* 09B714 7F068D24 02308823 */ subu $s1, $s1, $s0 -/* 09B718 7F068D28 00118880 */ sll $s1, $s1, 2 -/* 09B71C 7F068D2C 02308821 */ addu $s1, $s1, $s0 -/* 09B720 7F068D30 3C198007 */ lui $t9, %hi(g_CurrentPlayer) # $t9, 0x8007 -/* 09B724 7F068D34 8F398BC0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 09B728 7F068D38 00118880 */ sll $s1, $s1, 2 -/* 09B72C 7F068D3C 02308821 */ addu $s1, $s1, $s0 -/* 09B730 7F068D40 001188C0 */ sll $s1, $s1, 3 -/* 09B734 7F068D44 03312021 */ addu $a0, $t9, $s1 -/* 09B738 7F068D48 24840AD0 */ addiu $a0, $a0, 0xad0 -/* 09B73C 7F068D4C 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 09B740 7F068D50 27A500C4 */ addiu $a1, $sp, 0xc4 -/* 09B744 7F068D54 10000008 */ b .L7F068D78 -/* 09B748 7F068D58 8FA400B8 */ lw $a0, 0xb8($sp) -.L7F068D5C: -/* 09B74C 7F068D5C 02308821 */ addu $s1, $s1, $s0 -/* 09B750 7F068D60 001188C0 */ sll $s1, $s1, 3 -/* 09B754 7F068D64 00512021 */ addu $a0, $v0, $s1 -/* 09B758 7F068D68 24840AD0 */ addiu $a0, $a0, 0xad0 -/* 09B75C 7F068D6C 0FC16132 */ jal matrix_4x4_copy -/* 09B760 7F068D70 27A500C4 */ addiu $a1, $sp, 0xc4 -/* 09B764 7F068D74 8FA400B8 */ lw $a0, 0xb8($sp) -.L7F068D78: -/* 09B768 7F068D78 0FC1A2F2 */ jal casingCreate -/* 09B76C 7F068D7C 27A500C4 */ addiu $a1, $sp, 0xc4 -/* 09B770 7F068D80 104001C2 */ beqz $v0, .L7F06948C -/* 09B774 7F068D84 00408025 */ move $s0, $v0 -/* 09B778 7F068D88 3C098003 */ lui $t1, %hi(D_80035EA4) # $t1, 0x8003 -/* 09B77C 7F068D8C 252913F4 */ addiu $t1, %lo(D_80035EA4) # addiu $t1, $t1, 0x13f4 -/* 09B780 7F068D90 8D210000 */ lw $at, ($t1) -/* 09B784 7F068D94 8FA300C0 */ lw $v1, 0xc0($sp) -/* 09B788 7F068D98 27A8009C */ addiu $t0, $sp, 0x9c -/* 09B78C 7F068D9C AD010000 */ sw $at, ($t0) -/* 09B790 7F068DA0 8D210008 */ lw $at, 8($t1) -/* 09B794 7F068DA4 8D2B0004 */ lw $t3, 4($t1) -/* 09B798 7F068DA8 AD010008 */ sw $at, 8($t0) -/* 09B79C 7F068DAC AD0B0004 */ sw $t3, 4($t0) -/* 09B7A0 7F068DB0 C7A6010C */ lwc1 $f6, 0x10c($sp) -/* 09B7A4 7F068DB4 24010004 */ li $at, 4 -/* 09B7A8 7F068DB8 1061000A */ beq $v1, $at, .L7F068DE4 -/* 09B7AC 7F068DBC E4460000 */ swc1 $f6, ($v0) -/* 09B7B0 7F068DC0 24010005 */ li $at, 5 -/* 09B7B4 7F068DC4 10610007 */ beq $v1, $at, .L7F068DE4 -/* 09B7B8 7F068DC8 24010006 */ li $at, 6 -/* 09B7BC 7F068DCC 10610005 */ beq $v1, $at, .L7F068DE4 -/* 09B7C0 7F068DD0 24010014 */ li $at, 20 -/* 09B7C4 7F068DD4 10610003 */ beq $v1, $at, .L7F068DE4 -/* 09B7C8 7F068DD8 24010015 */ li $at, 21 -/* 09B7CC 7F068DDC 146100D6 */ bne $v1, $at, .L7F069138 -/* 09B7D0 7F068DE0 00000000 */ nop -.L7F068DE4: -/* 09B7D4 7F068DE4 0C00262C */ jal randomGetNext -/* 09B7D8 7F068DE8 00000000 */ nop -/* 09B7DC 7F068DEC 44824000 */ mtc1 $v0, $f8 -/* 09B7E0 7F068DF0 3C018005 */ lui $at, %hi(D_800543B8) # $at, 0x8005 -/* 09B7E4 7F068DF4 C420A4F8 */ lwc1 $f0, %lo(D_800543B8)($at) -/* 09B7E8 7F068DF8 04410005 */ bgez $v0, .L7F068E10 -/* 09B7EC 7F068DFC 468042A0 */ cvt.s.w $f10, $f8 -/* 09B7F0 7F068E00 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09B7F4 7F068E04 44819000 */ mtc1 $at, $f18 -/* 09B7F8 7F068E08 00000000 */ nop -/* 09B7FC 7F068E0C 46125280 */ add.s $f10, $f10, $f18 -.L7F068E10: -/* 09B800 7F068E10 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09B804 7F068E14 44812000 */ mtc1 $at, $f4 -/* 09B808 7F068E18 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09B80C 7F068E1C 44819000 */ mtc1 $at, $f18 -/* 09B810 7F068E20 46045182 */ mul.s $f6, $f10, $f4 -/* 09B814 7F068E24 00000000 */ nop -/* 09B818 7F068E28 46003202 */ mul.s $f8, $f6, $f0 -/* 09B81C 7F068E2C 00000000 */ nop -/* 09B820 7F068E30 46124282 */ mul.s $f10, $f8, $f18 -/* 09B824 7F068E34 46005100 */ add.s $f4, $f10, $f0 -/* 09B828 7F068E38 46002187 */ neg.s $f6, $f4 -/* 09B82C 7F068E3C 0C00262C */ jal randomGetNext -/* 09B830 7F068E40 E6060010 */ swc1 $f6, 0x10($s0) -/* 09B834 7F068E44 44824000 */ mtc1 $v0, $f8 -/* 09B838 7F068E48 3C014020 */ li $at, 0x40200000 # 2.500000 -/* 09B83C 7F068E4C 44810000 */ mtc1 $at, $f0 -/* 09B840 7F068E50 04410005 */ bgez $v0, .L7F068E68 -/* 09B844 7F068E54 468044A0 */ cvt.s.w $f18, $f8 -/* 09B848 7F068E58 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09B84C 7F068E5C 44815000 */ mtc1 $at, $f10 -/* 09B850 7F068E60 00000000 */ nop -/* 09B854 7F068E64 460A9480 */ add.s $f18, $f18, $f10 -.L7F068E68: -/* 09B858 7F068E68 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09B85C 7F068E6C 44812000 */ mtc1 $at, $f4 -/* 09B860 7F068E70 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09B864 7F068E74 44815000 */ mtc1 $at, $f10 -/* 09B868 7F068E78 46049182 */ mul.s $f6, $f18, $f4 -/* 09B86C 7F068E7C 3C0C8007 */ lui $t4, %hi(g_CurrentPlayer) # $t4, 0x8007 -/* 09B870 7F068E80 26050010 */ addiu $a1, $s0, 0x10 -/* 09B874 7F068E84 46003202 */ mul.s $f8, $f6, $f0 -/* 09B878 7F068E88 44803000 */ mtc1 $zero, $f6 -/* 09B87C 7F068E8C 00000000 */ nop -/* 09B880 7F068E90 E6060018 */ swc1 $f6, 0x18($s0) -/* 09B884 7F068E94 460A4482 */ mul.s $f18, $f8, $f10 -/* 09B888 7F068E98 46009100 */ add.s $f4, $f18, $f0 -/* 09B88C 7F068E9C E6040014 */ swc1 $f4, 0x14($s0) -/* 09B890 7F068EA0 8D8C8BC0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 09B894 7F068EA4 01912021 */ addu $a0, $t4, $s1 -/* 09B898 7F068EA8 0FC16220 */ jal mtx4RotateVecInPlace -/* 09B89C 7F068EAC 24840AD0 */ addiu $a0, $a0, 0xad0 -/* 09B8A0 7F068EB0 0C00262C */ jal randomGetNext -/* 09B8A4 7F068EB4 00000000 */ nop -/* 09B8A8 7F068EB8 44824000 */ mtc1 $v0, $f8 -/* 09B8AC 7F068EBC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09B8B0 7F068EC0 04410004 */ bgez $v0, .L7F068ED4 -/* 09B8B4 7F068EC4 468042A0 */ cvt.s.w $f10, $f8 -/* 09B8B8 7F068EC8 44819000 */ mtc1 $at, $f18 -/* 09B8BC 7F068ECC 00000000 */ nop -/* 09B8C0 7F068ED0 46125280 */ add.s $f10, $f10, $f18 -.L7F068ED4: -/* 09B8C4 7F068ED4 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09B8C8 7F068ED8 44812000 */ mtc1 $at, $f4 -/* 09B8CC 7F068EDC 3C018005 */ lui $at, %hi(D_800543BC) # $at, 0x8005 -/* 09B8D0 7F068EE0 C428A4FC */ lwc1 $f8, %lo(D_800543BC)($at) -/* 09B8D4 7F068EE4 46045002 */ mul.s $f0, $f10, $f4 -/* 09B8D8 7F068EE8 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09B8DC 7F068EEC 44815000 */ mtc1 $at, $f10 -/* 09B8E0 7F068EF0 3C018005 */ lui $at, %hi(D_800543C0) # $at, 0x8005 -/* 09B8E4 7F068EF4 46000180 */ add.s $f6, $f0, $f0 -/* 09B8E8 7F068EF8 46083482 */ mul.s $f18, $f6, $f8 -/* 09B8EC 7F068EFC C426A500 */ lwc1 $f6, %lo(D_800543C0)($at) -/* 09B8F0 7F068F00 460A9102 */ mul.s $f4, $f18, $f10 -/* 09B8F4 7F068F04 46062201 */ sub.s $f8, $f4, $f6 -/* 09B8F8 7F068F08 0C00262C */ jal randomGetNext -/* 09B8FC 7F068F0C E7A8009C */ swc1 $f8, 0x9c($sp) -/* 09B900 7F068F10 44829000 */ mtc1 $v0, $f18 -/* 09B904 7F068F14 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09B908 7F068F18 04410004 */ bgez $v0, .L7F068F2C -/* 09B90C 7F068F1C 468092A0 */ cvt.s.w $f10, $f18 -/* 09B910 7F068F20 44812000 */ mtc1 $at, $f4 -/* 09B914 7F068F24 00000000 */ nop -/* 09B918 7F068F28 46045280 */ add.s $f10, $f10, $f4 -.L7F068F2C: -/* 09B91C 7F068F2C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09B920 7F068F30 44813000 */ mtc1 $at, $f6 -/* 09B924 7F068F34 3C018005 */ lui $at, %hi(D_800543C4) # $at, 0x8005 -/* 09B928 7F068F38 C432A504 */ lwc1 $f18, %lo(D_800543C4)($at) -/* 09B92C 7F068F3C 46065002 */ mul.s $f0, $f10, $f6 -/* 09B930 7F068F40 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09B934 7F068F44 44815000 */ mtc1 $at, $f10 -/* 09B938 7F068F48 3C018005 */ lui $at, %hi(D_800543C8) # $at, 0x8005 -/* 09B93C 7F068F4C 46000200 */ add.s $f8, $f0, $f0 -/* 09B940 7F068F50 46124102 */ mul.s $f4, $f8, $f18 -/* 09B944 7F068F54 C428A508 */ lwc1 $f8, %lo(D_800543C8)($at) -/* 09B948 7F068F58 460A2182 */ mul.s $f6, $f4, $f10 -/* 09B94C 7F068F5C 46083481 */ sub.s $f18, $f6, $f8 -/* 09B950 7F068F60 0C00262C */ jal randomGetNext -/* 09B954 7F068F64 E7B200A0 */ swc1 $f18, 0xa0($sp) -/* 09B958 7F068F68 44822000 */ mtc1 $v0, $f4 -/* 09B95C 7F068F6C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09B960 7F068F70 04410004 */ bgez $v0, .L7F068F84 -/* 09B964 7F068F74 468022A0 */ cvt.s.w $f10, $f4 -/* 09B968 7F068F78 44813000 */ mtc1 $at, $f6 -/* 09B96C 7F068F7C 00000000 */ nop -/* 09B970 7F068F80 46065280 */ add.s $f10, $f10, $f6 -.L7F068F84: -/* 09B974 7F068F84 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09B978 7F068F88 44814000 */ mtc1 $at, $f8 -/* 09B97C 7F068F8C 3C018005 */ lui $at, %hi(D_800543CC) # $at, 0x8005 -/* 09B980 7F068F90 C424A50C */ lwc1 $f4, %lo(D_800543CC)($at) -/* 09B984 7F068F94 46085002 */ mul.s $f0, $f10, $f8 -/* 09B988 7F068F98 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09B98C 7F068F9C 44815000 */ mtc1 $at, $f10 -/* 09B990 7F068FA0 3C018005 */ lui $at, %hi(D_800543D0) # $at, 0x8005 -/* 09B994 7F068FA4 27A4009C */ addiu $a0, $sp, 0x9c -/* 09B998 7F068FA8 27A5005C */ addiu $a1, $sp, 0x5c -/* 09B99C 7F068FAC 46000480 */ add.s $f18, $f0, $f0 -/* 09B9A0 7F068FB0 46049182 */ mul.s $f6, $f18, $f4 -/* 09B9A4 7F068FB4 C432A510 */ lwc1 $f18, %lo(D_800543D0)($at) -/* 09B9A8 7F068FB8 460A3202 */ mul.s $f8, $f6, $f10 -/* 09B9AC 7F068FBC 46124101 */ sub.s $f4, $f8, $f18 -/* 09B9B0 7F068FC0 0FC162EF */ jal matrix_4x4_set_rotation_around_xyz -/* 09B9B4 7F068FC4 E7A400A4 */ swc1 $f4, 0xa4($sp) -/* 09B9B8 7F068FC8 27A4005C */ addiu $a0, $sp, 0x5c -/* 09B9BC 7F068FCC 0FC1610B */ jal matrix_7f05842c_eu -/* 09B9C0 7F068FD0 26050040 */ addiu $a1, $s0, 0x40 -/* 09B9C4 7F068FD4 0C00262C */ jal randomGetNext -/* 09B9C8 7F068FD8 00000000 */ nop -/* 09B9CC 7F068FDC 3C030015 */ lui $v1, (0x00158679 >> 16) # lui $v1, 0x15 -/* 09B9D0 7F068FE0 34638679 */ ori $v1, (0x00158679 & 0xFFFF) # ori $v1, $v1, 0x8679 -/* 09B9D4 7F068FE4 00026E02 */ srl $t5, $v0, 0x18 -/* 09B9D8 7F068FE8 01A30019 */ multu $t5, $v1 -/* 09B9DC 7F068FEC 00007012 */ mflo $t6 -/* 09B9E0 7F068FF0 000E7A83 */ sra $t7, $t6, 0xa -/* 09B9E4 7F068FF4 01E3C021 */ addu $t8, $t7, $v1 -/* 09B9E8 7F068FF8 0C00262C */ jal randomGetNext -/* 09B9EC 7F068FFC AFB8004C */ sw $t8, 0x4c($sp) -/* 09B9F0 7F069000 8FB9004C */ lw $t9, 0x4c($sp) -/* 09B9F4 7F069004 C60C0014 */ lwc1 $f12, 0x14($s0) -/* 09B9F8 7F069008 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09B9FC 7F06900C 0059001B */ divu $zero, $v0, $t9 -/* 09BA00 7F069010 00005010 */ mfhi $t2 -/* 09BA04 7F069014 448A3000 */ mtc1 $t2, $f6 -/* 09BA08 7F069018 17200002 */ bnez $t9, .L7F069024 -/* 09BA0C 7F06901C 00000000 */ nop -/* 09BA10 7F069020 0007000D */ break 7 -.L7F069024: -/* 09BA14 7F069024 3C048007 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8007 -/* 09BA18 7F069028 05410004 */ bgez $t2, .L7F06903C -/* 09BA1C 7F06902C 468032A0 */ cvt.s.w $f10, $f6 -/* 09BA20 7F069030 44814000 */ mtc1 $at, $f8 -/* 09BA24 7F069034 00000000 */ nop -/* 09BA28 7F069038 46085280 */ add.s $f10, $f10, $f8 -.L7F06903C: -/* 09BA2C 7F06903C 3C018005 */ lui $at, %hi(D_800543D4) # $at, 0x8005 -/* 09BA30 7F069040 C432A514 */ lwc1 $f18, %lo(D_800543D4)($at) -/* 09BA34 7F069044 3C018005 */ lui $at, %hi(expended_shell_initial_gravity_modifier_pistol) # $at, 0x8005 -/* 09BA38 7F069048 C424A518 */ lwc1 $f4, %lo(expended_shell_initial_gravity_modifier_pistol)($at) -/* 09BA3C 7F06904C 46125003 */ div.s $f0, $f10, $f18 -/* 09BA40 7F069050 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 09BA44 7F069054 44819000 */ mtc1 $at, $f18 -/* 09BA48 7F069058 C60E0010 */ lwc1 $f14, 0x10($s0) -/* 09BA4C 7F06905C C6100018 */ lwc1 $f16, 0x18($s0) -/* 09BA50 7F069060 3C088004 */ lui $t0, %hi(g_ClockTimer) # $t0, 0x8004 -/* 09BA54 7F069064 24848BC0 */ addiu $a0, %lo(g_CurrentPlayer) # addiu $a0, $a0, -0x7440 -/* 09BA58 7F069068 46040182 */ mul.s $f6, $f0, $f4 -/* 09BA5C 7F06906C 46066081 */ sub.s $f2, $f12, $f6 -/* 09BA60 7F069070 C6060008 */ lwc1 $f6, 8($s0) -/* 09BA64 7F069074 46026200 */ add.s $f8, $f12, $f2 -/* 09BA68 7F069078 E6020014 */ swc1 $f2, 0x14($s0) -/* 09BA6C 7F06907C 46080282 */ mul.s $f10, $f0, $f8 -/* 09BA70 7F069080 00000000 */ nop -/* 09BA74 7F069084 46125102 */ mul.s $f4, $f10, $f18 -/* 09BA78 7F069088 C60A0004 */ lwc1 $f10, 4($s0) -/* 09BA7C 7F06908C 460E0482 */ mul.s $f18, $f0, $f14 -/* 09BA80 7F069090 46043200 */ add.s $f8, $f6, $f4 -/* 09BA84 7F069094 C604000C */ lwc1 $f4, 0xc($s0) -/* 09BA88 7F069098 46125180 */ add.s $f6, $f10, $f18 -/* 09BA8C 7F06909C E6080008 */ swc1 $f8, 8($s0) -/* 09BA90 7F0690A0 46100202 */ mul.s $f8, $f0, $f16 -/* 09BA94 7F0690A4 E6060004 */ swc1 $f6, 4($s0) -/* 09BA98 7F0690A8 46082280 */ add.s $f10, $f4, $f8 -/* 09BA9C 7F0690AC E60A000C */ swc1 $f10, 0xc($s0) -/* 09BAA0 7F0690B0 8D080FF4 */ lw $t0, %lo(g_ClockTimer)($t0) -/* 09BAA4 7F0690B4 190000F5 */ blez $t0, .L7F06948C -/* 09BAA8 7F0690B8 00000000 */ nop -/* 09BAAC 7F0690BC 8C890000 */ lw $t1, ($a0) -/* 09BAB0 7F0690C0 3C038004 */ lui $v1, %hi(g_GlobalTimerDelta) # $v1, 0x8004 -/* 09BAB4 7F0690C4 24631004 */ addiu $v1, %lo(g_GlobalTimerDelta) # addiu $v1, $v1, 0x1004 -/* 09BAB8 7F0690C8 01311021 */ addu $v0, $t1, $s1 -/* 09BABC 7F0690CC C4520B00 */ lwc1 $f18, 0xb00($v0) -/* 09BAC0 7F0690D0 C4460B40 */ lwc1 $f6, 0xb40($v0) -/* 09BAC4 7F0690D4 C4680000 */ lwc1 $f8, ($v1) -/* 09BAC8 7F0690D8 46069101 */ sub.s $f4, $f18, $f6 -/* 09BACC 7F0690DC 46082283 */ div.s $f10, $f4, $f8 -/* 09BAD0 7F0690E0 460A7480 */ add.s $f18, $f14, $f10 -/* 09BAD4 7F0690E4 E6120010 */ swc1 $f18, 0x10($s0) -/* 09BAD8 7F0690E8 8C8B0000 */ lw $t3, ($a0) -/* 09BADC 7F0690EC C46A0000 */ lwc1 $f10, ($v1) -/* 09BAE0 7F0690F0 01711021 */ addu $v0, $t3, $s1 -/* 09BAE4 7F0690F4 C4460B04 */ lwc1 $f6, 0xb04($v0) -/* 09BAE8 7F0690F8 C4440B44 */ lwc1 $f4, 0xb44($v0) -/* 09BAEC 7F0690FC 46043201 */ sub.s $f8, $f6, $f4 -/* 09BAF0 7F069100 C6060014 */ lwc1 $f6, 0x14($s0) -/* 09BAF4 7F069104 460A4483 */ div.s $f18, $f8, $f10 -/* 09BAF8 7F069108 46123100 */ add.s $f4, $f6, $f18 -/* 09BAFC 7F06910C E6040014 */ swc1 $f4, 0x14($s0) -/* 09BB00 7F069110 8C8C0000 */ lw $t4, ($a0) -/* 09BB04 7F069114 C4720000 */ lwc1 $f18, ($v1) -/* 09BB08 7F069118 01911021 */ addu $v0, $t4, $s1 -/* 09BB0C 7F06911C C4480B08 */ lwc1 $f8, 0xb08($v0) -/* 09BB10 7F069120 C44A0B48 */ lwc1 $f10, 0xb48($v0) -/* 09BB14 7F069124 460A4181 */ sub.s $f6, $f8, $f10 -/* 09BB18 7F069128 46123103 */ div.s $f4, $f6, $f18 -/* 09BB1C 7F06912C 46048200 */ add.s $f8, $f16, $f4 -/* 09BB20 7F069130 100000D6 */ b .L7F06948C -/* 09BB24 7F069134 E6080018 */ swc1 $f8, 0x18($s0) -.L7F069138: -/* 09BB28 7F069138 0C00262C */ jal randomGetNext -/* 09BB2C 7F06913C 00000000 */ nop -/* 09BB30 7F069140 44825000 */ mtc1 $v0, $f10 -/* 09BB34 7F069144 3C018005 */ lui $at, %hi(D_800543DC) # $at, 0x8005 -/* 09BB38 7F069148 C420A51C */ lwc1 $f0, %lo(D_800543DC)($at) -/* 09BB3C 7F06914C 04410005 */ bgez $v0, .L7F069164 -/* 09BB40 7F069150 468051A0 */ cvt.s.w $f6, $f10 -/* 09BB44 7F069154 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09BB48 7F069158 44819000 */ mtc1 $at, $f18 -/* 09BB4C 7F06915C 00000000 */ nop -/* 09BB50 7F069160 46123180 */ add.s $f6, $f6, $f18 -.L7F069164: -/* 09BB54 7F069164 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09BB58 7F069168 44812000 */ mtc1 $at, $f4 -/* 09BB5C 7F06916C 3C013E00 */ li $at, 0x3E000000 # 0.125000 -/* 09BB60 7F069170 44819000 */ mtc1 $at, $f18 -/* 09BB64 7F069174 46043202 */ mul.s $f8, $f6, $f4 -/* 09BB68 7F069178 00000000 */ nop -/* 09BB6C 7F06917C 46004282 */ mul.s $f10, $f8, $f0 -/* 09BB70 7F069180 00000000 */ nop -/* 09BB74 7F069184 46125182 */ mul.s $f6, $f10, $f18 -/* 09BB78 7F069188 46003100 */ add.s $f4, $f6, $f0 -/* 09BB7C 7F06918C 46002207 */ neg.s $f8, $f4 -/* 09BB80 7F069190 0C00262C */ jal randomGetNext -/* 09BB84 7F069194 E6080010 */ swc1 $f8, 0x10($s0) -/* 09BB88 7F069198 44825000 */ mtc1 $v0, $f10 -/* 09BB8C 7F06919C 3C018005 */ lui $at, %hi(D_800543E0) # $at, 0x8005 -/* 09BB90 7F0691A0 C420A520 */ lwc1 $f0, %lo(D_800543E0)($at) -/* 09BB94 7F0691A4 04410005 */ bgez $v0, .L7F0691BC -/* 09BB98 7F0691A8 468054A0 */ cvt.s.w $f18, $f10 -/* 09BB9C 7F0691AC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09BBA0 7F0691B0 44813000 */ mtc1 $at, $f6 -/* 09BBA4 7F0691B4 00000000 */ nop -/* 09BBA8 7F0691B8 46069480 */ add.s $f18, $f18, $f6 -.L7F0691BC: -/* 09BBAC 7F0691BC 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09BBB0 7F0691C0 44812000 */ mtc1 $at, $f4 -/* 09BBB4 7F0691C4 3C013E00 */ li $at, 0x3E000000 # 0.125000 -/* 09BBB8 7F0691C8 44813000 */ mtc1 $at, $f6 -/* 09BBBC 7F0691CC 46049202 */ mul.s $f8, $f18, $f4 -/* 09BBC0 7F0691D0 3C0D8007 */ lui $t5, %hi(g_CurrentPlayer) # $t5, 0x8007 -/* 09BBC4 7F0691D4 26050010 */ addiu $a1, $s0, 0x10 -/* 09BBC8 7F0691D8 46004282 */ mul.s $f10, $f8, $f0 -/* 09BBCC 7F0691DC 44804000 */ mtc1 $zero, $f8 -/* 09BBD0 7F0691E0 00000000 */ nop -/* 09BBD4 7F0691E4 E6080018 */ swc1 $f8, 0x18($s0) -/* 09BBD8 7F0691E8 46065482 */ mul.s $f18, $f10, $f6 -/* 09BBDC 7F0691EC 46009100 */ add.s $f4, $f18, $f0 -/* 09BBE0 7F0691F0 E6040014 */ swc1 $f4, 0x14($s0) -/* 09BBE4 7F0691F4 8DAD8BC0 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 09BBE8 7F0691F8 01B12021 */ addu $a0, $t5, $s1 -/* 09BBEC 7F0691FC 0FC16220 */ jal mtx4RotateVecInPlace -/* 09BBF0 7F069200 24840AD0 */ addiu $a0, $a0, 0xad0 -/* 09BBF4 7F069204 0C00262C */ jal randomGetNext -/* 09BBF8 7F069208 00000000 */ nop -/* 09BBFC 7F06920C 44825000 */ mtc1 $v0, $f10 -/* 09BC00 7F069210 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09BC04 7F069214 04410004 */ bgez $v0, .L7F069228 -/* 09BC08 7F069218 468051A0 */ cvt.s.w $f6, $f10 -/* 09BC0C 7F06921C 44819000 */ mtc1 $at, $f18 -/* 09BC10 7F069220 00000000 */ nop -/* 09BC14 7F069224 46123180 */ add.s $f6, $f6, $f18 -.L7F069228: -/* 09BC18 7F069228 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09BC1C 7F06922C 44812000 */ mtc1 $at, $f4 -/* 09BC20 7F069230 3C018005 */ lui $at, %hi(D_800543E4) # $at, 0x8005 -/* 09BC24 7F069234 C42AA524 */ lwc1 $f10, %lo(D_800543E4)($at) -/* 09BC28 7F069238 46043002 */ mul.s $f0, $f6, $f4 -/* 09BC2C 7F06923C 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09BC30 7F069240 44813000 */ mtc1 $at, $f6 -/* 09BC34 7F069244 3C018005 */ lui $at, %hi(D_800543E8) # $at, 0x8005 -/* 09BC38 7F069248 46000200 */ add.s $f8, $f0, $f0 -/* 09BC3C 7F06924C 460A4482 */ mul.s $f18, $f8, $f10 -/* 09BC40 7F069250 C428A528 */ lwc1 $f8, %lo(D_800543E8)($at) -/* 09BC44 7F069254 46069102 */ mul.s $f4, $f18, $f6 -/* 09BC48 7F069258 46082281 */ sub.s $f10, $f4, $f8 -/* 09BC4C 7F06925C 0C00262C */ jal randomGetNext -/* 09BC50 7F069260 E7AA009C */ swc1 $f10, 0x9c($sp) -/* 09BC54 7F069264 44829000 */ mtc1 $v0, $f18 -/* 09BC58 7F069268 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09BC5C 7F06926C 04410004 */ bgez $v0, .L7F069280 -/* 09BC60 7F069270 468091A0 */ cvt.s.w $f6, $f18 -/* 09BC64 7F069274 44812000 */ mtc1 $at, $f4 -/* 09BC68 7F069278 00000000 */ nop -/* 09BC6C 7F06927C 46043180 */ add.s $f6, $f6, $f4 -.L7F069280: -/* 09BC70 7F069280 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09BC74 7F069284 44814000 */ mtc1 $at, $f8 -/* 09BC78 7F069288 3C018005 */ lui $at, %hi(D_800543EC) # $at, 0x8005 -/* 09BC7C 7F06928C C432A52C */ lwc1 $f18, %lo(D_800543EC)($at) -/* 09BC80 7F069290 46083002 */ mul.s $f0, $f6, $f8 -/* 09BC84 7F069294 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09BC88 7F069298 44813000 */ mtc1 $at, $f6 -/* 09BC8C 7F06929C 3C018005 */ lui $at, %hi(D_800543F0) # $at, 0x8005 -/* 09BC90 7F0692A0 46000280 */ add.s $f10, $f0, $f0 -/* 09BC94 7F0692A4 46125102 */ mul.s $f4, $f10, $f18 -/* 09BC98 7F0692A8 C42AA530 */ lwc1 $f10, %lo(D_800543F0)($at) -/* 09BC9C 7F0692AC 46062202 */ mul.s $f8, $f4, $f6 -/* 09BCA0 7F0692B0 460A4481 */ sub.s $f18, $f8, $f10 -/* 09BCA4 7F0692B4 0C00262C */ jal randomGetNext -/* 09BCA8 7F0692B8 E7B200A0 */ swc1 $f18, 0xa0($sp) -/* 09BCAC 7F0692BC 44822000 */ mtc1 $v0, $f4 -/* 09BCB0 7F0692C0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09BCB4 7F0692C4 04410004 */ bgez $v0, .L7F0692D8 -/* 09BCB8 7F0692C8 468021A0 */ cvt.s.w $f6, $f4 -/* 09BCBC 7F0692CC 44814000 */ mtc1 $at, $f8 -/* 09BCC0 7F0692D0 00000000 */ nop -/* 09BCC4 7F0692D4 46083180 */ add.s $f6, $f6, $f8 -.L7F0692D8: -/* 09BCC8 7F0692D8 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 09BCCC 7F0692DC 44815000 */ mtc1 $at, $f10 -/* 09BCD0 7F0692E0 3C018005 */ lui $at, %hi(D_800543F4) # $at, 0x8005 -/* 09BCD4 7F0692E4 C424A534 */ lwc1 $f4, %lo(D_800543F4)($at) -/* 09BCD8 7F0692E8 460A3002 */ mul.s $f0, $f6, $f10 -/* 09BCDC 7F0692EC 3C013D80 */ li $at, 0x3D800000 # 0.062500 -/* 09BCE0 7F0692F0 44813000 */ mtc1 $at, $f6 -/* 09BCE4 7F0692F4 3C018005 */ lui $at, %hi(D_800543F8) # $at, 0x8005 -/* 09BCE8 7F0692F8 27A4009C */ addiu $a0, $sp, 0x9c -/* 09BCEC 7F0692FC 27A5005C */ addiu $a1, $sp, 0x5c -/* 09BCF0 7F069300 46000480 */ add.s $f18, $f0, $f0 -/* 09BCF4 7F069304 46049202 */ mul.s $f8, $f18, $f4 -/* 09BCF8 7F069308 C432A538 */ lwc1 $f18, %lo(D_800543F8)($at) -/* 09BCFC 7F06930C 46064282 */ mul.s $f10, $f8, $f6 -/* 09BD00 7F069310 46125101 */ sub.s $f4, $f10, $f18 -/* 09BD04 7F069314 0FC162EF */ jal matrix_4x4_set_rotation_around_xyz -/* 09BD08 7F069318 E7A400A4 */ swc1 $f4, 0xa4($sp) -/* 09BD0C 7F06931C 27A4005C */ addiu $a0, $sp, 0x5c -/* 09BD10 7F069320 0FC1610B */ jal matrix_7f05842c_eu -/* 09BD14 7F069324 26050040 */ addiu $a1, $s0, 0x40 -/* 09BD18 7F069328 0C00262C */ jal randomGetNext -/* 09BD1C 7F06932C 00000000 */ nop -/* 09BD20 7F069330 3C030015 */ lui $v1, (0x00158679 >> 16) # lui $v1, 0x15 -/* 09BD24 7F069334 34638679 */ ori $v1, (0x00158679 & 0xFFFF) # ori $v1, $v1, 0x8679 -/* 09BD28 7F069338 00027602 */ srl $t6, $v0, 0x18 -/* 09BD2C 7F06933C 01C30019 */ multu $t6, $v1 -/* 09BD30 7F069340 00007812 */ mflo $t7 -/* 09BD34 7F069344 000FC283 */ sra $t8, $t7, 0xa -/* 09BD38 7F069348 0303C821 */ addu $t9, $t8, $v1 -/* 09BD3C 7F06934C 0C00262C */ jal randomGetNext -/* 09BD40 7F069350 AFB9003C */ sw $t9, 0x3c($sp) -/* 09BD44 7F069354 8FAA003C */ lw $t2, 0x3c($sp) -/* 09BD48 7F069358 C60C0014 */ lwc1 $f12, 0x14($s0) -/* 09BD4C 7F06935C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09BD50 7F069360 004A001B */ divu $zero, $v0, $t2 -/* 09BD54 7F069364 00004010 */ mfhi $t0 -/* 09BD58 7F069368 44884000 */ mtc1 $t0, $f8 -/* 09BD5C 7F06936C 15400002 */ bnez $t2, .L7F069378 -/* 09BD60 7F069370 00000000 */ nop -/* 09BD64 7F069374 0007000D */ break 7 -.L7F069378: -/* 09BD68 7F069378 3C0B8007 */ lui $t3, %hi(g_CurrentPlayer) # $t3, 0x8007 -/* 09BD6C 7F06937C 05010004 */ bgez $t0, .L7F069390 -/* 09BD70 7F069380 468041A0 */ cvt.s.w $f6, $f8 -/* 09BD74 7F069384 44815000 */ mtc1 $at, $f10 -/* 09BD78 7F069388 00000000 */ nop -/* 09BD7C 7F06938C 460A3180 */ add.s $f6, $f6, $f10 -.L7F069390: -/* 09BD80 7F069390 3C018005 */ lui $at, %hi(D_800543FC) # $at, 0x8005 -/* 09BD84 7F069394 C432A53C */ lwc1 $f18, %lo(D_800543FC)($at) -/* 09BD88 7F069398 3C018005 */ lui $at, %hi(expended_shell_initial_gravity_modifier_non_pistol) # $at, 0x8005 -/* 09BD8C 7F06939C C424A540 */ lwc1 $f4, %lo(expended_shell_initial_gravity_modifier_non_pistol)($at) -/* 09BD90 7F0693A0 46123003 */ div.s $f0, $f6, $f18 -/* 09BD94 7F0693A4 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 09BD98 7F0693A8 44819000 */ mtc1 $at, $f18 -/* 09BD9C 7F0693AC C60E0010 */ lwc1 $f14, 0x10($s0) -/* 09BDA0 7F0693B0 C6100018 */ lwc1 $f16, 0x18($s0) -/* 09BDA4 7F0693B4 3C098004 */ lui $t1, %hi(g_ClockTimer) # $t1, 0x8004 -/* 09BDA8 7F0693B8 46040202 */ mul.s $f8, $f0, $f4 -/* 09BDAC 7F0693BC 46086081 */ sub.s $f2, $f12, $f8 -/* 09BDB0 7F0693C0 C6080008 */ lwc1 $f8, 8($s0) -/* 09BDB4 7F0693C4 46026280 */ add.s $f10, $f12, $f2 -/* 09BDB8 7F0693C8 E6020014 */ swc1 $f2, 0x14($s0) -/* 09BDBC 7F0693CC 460A0182 */ mul.s $f6, $f0, $f10 -/* 09BDC0 7F0693D0 00000000 */ nop -/* 09BDC4 7F0693D4 46123102 */ mul.s $f4, $f6, $f18 -/* 09BDC8 7F0693D8 C6060004 */ lwc1 $f6, 4($s0) -/* 09BDCC 7F0693DC 460E0482 */ mul.s $f18, $f0, $f14 -/* 09BDD0 7F0693E0 46044280 */ add.s $f10, $f8, $f4 -/* 09BDD4 7F0693E4 C604000C */ lwc1 $f4, 0xc($s0) -/* 09BDD8 7F0693E8 46123200 */ add.s $f8, $f6, $f18 -/* 09BDDC 7F0693EC E60A0008 */ swc1 $f10, 8($s0) -/* 09BDE0 7F0693F0 46100282 */ mul.s $f10, $f0, $f16 -/* 09BDE4 7F0693F4 E6080004 */ swc1 $f8, 4($s0) -/* 09BDE8 7F0693F8 460A2180 */ add.s $f6, $f4, $f10 -/* 09BDEC 7F0693FC E606000C */ swc1 $f6, 0xc($s0) -/* 09BDF0 7F069400 8D290FF4 */ lw $t1, %lo(g_ClockTimer)($t1) -/* 09BDF4 7F069404 19200021 */ blez $t1, .L7F06948C -/* 09BDF8 7F069408 00000000 */ nop -/* 09BDFC 7F06940C 8D6B8BC0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 09BE00 7F069410 3C038004 */ lui $v1, %hi(g_GlobalTimerDelta) # $v1, 0x8004 -/* 09BE04 7F069414 24631004 */ addiu $v1, %lo(g_GlobalTimerDelta) # addiu $v1, $v1, 0x1004 -/* 09BE08 7F069418 01711021 */ addu $v0, $t3, $s1 -/* 09BE0C 7F06941C C4520B00 */ lwc1 $f18, 0xb00($v0) -/* 09BE10 7F069420 C4480B40 */ lwc1 $f8, 0xb40($v0) -/* 09BE14 7F069424 C46A0000 */ lwc1 $f10, ($v1) -/* 09BE18 7F069428 3C0C8007 */ lui $t4, %hi(g_CurrentPlayer) # $t4, 0x8007 -/* 09BE1C 7F06942C 46089101 */ sub.s $f4, $f18, $f8 -/* 09BE20 7F069430 3C0D8007 */ lui $t5, %hi(g_CurrentPlayer) # $t5, 0x8007 -/* 09BE24 7F069434 460A2183 */ div.s $f6, $f4, $f10 -/* 09BE28 7F069438 46067480 */ add.s $f18, $f14, $f6 -/* 09BE2C 7F06943C E6120010 */ swc1 $f18, 0x10($s0) -/* 09BE30 7F069440 8D8C8BC0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 09BE34 7F069444 C4660000 */ lwc1 $f6, ($v1) -/* 09BE38 7F069448 01911021 */ addu $v0, $t4, $s1 -/* 09BE3C 7F06944C C4480B04 */ lwc1 $f8, 0xb04($v0) -/* 09BE40 7F069450 C4440B44 */ lwc1 $f4, 0xb44($v0) -/* 09BE44 7F069454 46044281 */ sub.s $f10, $f8, $f4 -/* 09BE48 7F069458 C6080014 */ lwc1 $f8, 0x14($s0) -/* 09BE4C 7F06945C 46065483 */ div.s $f18, $f10, $f6 -/* 09BE50 7F069460 46124100 */ add.s $f4, $f8, $f18 -/* 09BE54 7F069464 E6040014 */ swc1 $f4, 0x14($s0) -/* 09BE58 7F069468 8DAD8BC0 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 09BE5C 7F06946C C4720000 */ lwc1 $f18, ($v1) -/* 09BE60 7F069470 01B11021 */ addu $v0, $t5, $s1 -/* 09BE64 7F069474 C44A0B08 */ lwc1 $f10, 0xb08($v0) -/* 09BE68 7F069478 C4460B48 */ lwc1 $f6, 0xb48($v0) -/* 09BE6C 7F06947C 46065201 */ sub.s $f8, $f10, $f6 -/* 09BE70 7F069480 46124103 */ div.s $f4, $f8, $f18 -/* 09BE74 7F069484 46048280 */ add.s $f10, $f16, $f4 -/* 09BE78 7F069488 E60A0018 */ swc1 $f10, 0x18($s0) -.L7F06948C: -/* 09BE7C 7F06948C 8FBF001C */ lw $ra, 0x1c($sp) -.L7F069490: -/* 09BE80 7F069490 8FB00014 */ lw $s0, 0x14($sp) -/* 09BE84 7F069494 8FB10018 */ lw $s1, 0x18($sp) -/* 09BE88 7F069498 03E00008 */ jr $ra -/* 09BE8C 7F06949C 27BD0108 */ addiu $sp, $sp, 0x108 ) #endif - - + +/** + * Address: 7F068508 + * + * Ejects a spent cartridge casing from the gun in the given hand. + */ +void sub_GAME_7F068508(GUNHAND handnum, f32 floor_y_pos) +{ + CasingRecord *casing; + Mtxf mtx; + ITEM_IDS weaponid; + coord3d *switchdata; + ModelFileHeader *cartridge_header; + coord3d switchpos; + ModelNode *switch0; + coord3d rot; +#if VERSION_EU + Mtxf rotmtx; #endif + f32 rand; + s32 new_var; /* dead but declared on EU — still reserves its frame slot */ + f32 frac; +#if VERSION_EU + s32 randlimit; +#endif + f32 oldvely; + f32 newvely; +#ifndef VERSION_EU + s32 randlimit; +#endif + s32 handoffset; + u32 randval; +#if VERSION_EU + s32 pad[2]; +#endif + + weaponid = getCurrentPlayerWeaponId(handnum); + cartridge_header = get_ptr_item_statistics(weaponid)->ptr_cartridge_struct; + + // Do not create ejected casings in multiplayer. + if ((cartridge_header == NULL) || (getPlayerCount() >= 2)) + { + return; + } + + handoffset = handnum * sizeof(struct hand); + switch0 = g_CurrentPlayer->copy_of_body_obj_header[handnum].Switches[0]; + + if (switch0 != NULL) + { + switchdata = (coord3d *) switch0->Data; + + switchpos.x = switchdata->x * D_800543B4; + switchpos.y = switchdata->y * D_800543B4; + switchpos.z = switchdata->z * D_800543B4; + + matrix_4x4_set_identity_and_position(&switchpos, &mtx); + matrix_4x4_multiply_in_place(THROWMTX, &mtx); + } + else + { + matrix_4x4_copy(THROWMTX, &mtx); + } + + casing = casingCreate(cartridge_header, &mtx); + + if (casing == NULL) + { + return; + } + + rot = *((coord3d *) (&D_80035EA4)); + casing->floor_y_pos = floor_y_pos; + + if (((((weaponid == ITEM_WPPK) || (weaponid == ITEM_WPPKSIL)) || (weaponid == ITEM_TT33)) || (weaponid == ITEM_SILVERWPPK)) || (weaponid == ITEM_GOLDWPPK)) + { + rand = ((f32) ((u32) randomGetNext())) * 2.3283064e-10f; + newvely = 0.0625f; + casing->vel.x = -(((rand * D_800543B8) * newvely) + D_800543B8); + + rand = ((f32) ((u32) randomGetNext())) * 2.3283064e-10f; + casing->vel.y = ((rand * 2.5f) * 0.0625f) + 2.5f; + casing->vel.z = frac * 0.0f; + + mtx4RotateVecInPlace(THROWMTX, &casing->vel); + + rand = ((f32) ((u32) randomGetNext())) * 2.3283064e-10f; + rot.x = (((rand + rand) * D_800543BC) * newvely) - D_800543C0; + + rand = ((f32) ((u32) randomGetNext())) * 2.3283064e-10f; + rot.y = (((rand + rand) * D_800543C4) * newvely) - D_800543C8; + + rand = ((f32) ((u32) randomGetNext())) * 2.3283064e-10f; + rot.z = (((rand + rand) * D_800543CC) * newvely) - D_800543D0; + +#if VERSION_EU + matrix_4x4_set_rotation_around_xyz(&rot, &rotmtx); + matrix_7f05842c_eu(&rotmtx, casing->rot_velocity_mtx); + if (handoffset); +#else + matrix_4x4_set_rotation_around_xyz(&rot, &casing->rot_velocity_mtx); +#endif + +#if VERSION_EU + randlimit = ((s32) ((randomGetNext() >> 24) * 0x158679)) >> 10; + randlimit = randlimit + 0x158679; + randval = randomGetNext(); + oldvely = casing->vel.y; + frac = ((f32) ((u32) (randval % randlimit))) / D_800543D4; +#else + randlimit = (((s32) ((randomGetNext() >> 24) * 0x158679)) >> 10) + 0x158679; + new_var = randlimit; + randval = randomGetNext(); + oldvely = casing->vel.y; + frac = ((f32) ((u32) (randval % new_var))) / D_800543D4; +#endif + newvely = oldvely - (frac * expended_shell_initial_gravity_modifier_pistol); + + casing->vel.y = newvely; + casing->pos.y += (frac * (oldvely + newvely)) * 0.5f; + casing->pos.x += frac * casing->vel.x; + casing->pos.z += frac * casing->vel.z; + + // Keep the 0 + 1 for matching. + if (g_ClockTimer >= (0 + 1)) + { + casing->vel.x += (THROWPOS(0) - THROWPREV(0)) / g_GlobalTimerDelta; + casing->vel.y += (THROWPOS(1) - THROWPREV(1)) / g_GlobalTimerDelta; + casing->vel.z += (THROWPOS(2) - THROWPREV(2)) / g_GlobalTimerDelta; + } + } + else + { + rand = ((f32) ((u32) randomGetNext())) * 2.3283064e-10f; + casing->vel.x = -(((rand * D_800543DC) * 0.125f) + D_800543DC); + + rand = ((f32) ((u32) randomGetNext())) * 2.3283064e-10f; + casing->vel.y = ((rand * D_800543E0) * 0.125f) + D_800543E0; + casing->vel.z = 0.0f; + + mtx4RotateVecInPlace(THROWMTX, &casing->vel); + + rand = ((f32) ((u32) randomGetNext())) * 2.3283064e-10f; + rot.x = (((rand + rand) * D_800543E4) * 0.0625f) - D_800543E8; + + rand = ((f32) ((u32) randomGetNext())) * 2.3283064e-10f; + rot.y = (((rand + rand) * D_800543EC) * 0.0625f) - D_800543F0; + + rand = ((f32) ((u32) randomGetNext())) * 2.3283064e-10f; + rot.z = (((rand + rand) * D_800543F4) * 0.0625f) - D_800543F8; + +#if VERSION_EU + matrix_4x4_set_rotation_around_xyz(&rot, &rotmtx); + matrix_7f05842c_eu(&rotmtx, casing->rot_velocity_mtx); + if (handoffset); +#else + matrix_4x4_set_rotation_around_xyz(&rot, &casing->rot_velocity_mtx); +#endif + randval = ((s32) ((randomGetNext() >> 24) * 0x158679)) >> 10; +#if VERSION_EU + randval = randval + 0x158679; + randlimit = randomGetNext(); + oldvely = (&casing->vel)->y; + frac = ((f32) ((u32) (randlimit % randval))) / D_800543FC; +#else + randlimit = randval + 0x158679; + randval = randomGetNext(); + oldvely = (&casing->vel)->y; + frac = ((f32) ((u32) (randval % randlimit))) / D_800543FC; +#endif + newvely = (casing->vel.y = oldvely - (frac * expended_shell_initial_gravity_modifier_non_pistol)); + + casing->pos.y += (frac * (oldvely + newvely)) * 0.5f; + casing->pos.x += frac * casing->vel.x; + casing->pos.z += frac * casing->vel.z; + + if (g_ClockTimer > 0) + { + casing->vel.x += (THROWPOS(0) - THROWPREV(0)) / g_GlobalTimerDelta; + casing->vel.y += (THROWPOS(1) - THROWPREV(1)) / g_GlobalTimerDelta; + casing->vel.z += (THROWPOS(2) - THROWPREV(2)) / g_GlobalTimerDelta; + } + } + + if (handoffset); +} +extern f32 g_CasingGravity; +extern f32 g_CasingModelScale; +extern f32 g_CasingMinMatrixTranslation; +extern f32 g_CasingMaxMatrixTranslation; + +GLOBAL_ASM( +.late_rodata +glabel g_CasingGravity +.word 0x3e8e38e4 /*0.27777779*/ +glabel g_CasingModelScale +.word 0x3dccccce /*0.10000001*/ +glabel g_CasingMinMatrixTranslation +.word 0xc6ea6000 /*-30000.0*/ +glabel g_CasingMaxMatrixTranslation +.word 0x46ea6000 /*30000.0*/ +) + void update_bullet_casing(CasingRecord* casing) { f32 new_val_y; @@ -17531,22 +7397,22 @@ void update_bullet_casing(CasingRecord* casing) struct player* current_player; delta = g_GlobalTimerDelta; - new_val_y = casing->vel.y - (delta * 0.2777778f); + new_val_y = casing->vel.y - (delta * g_CasingGravity); casing->pos.y += delta * 0.5f * (casing->vel.y + new_val_y); if (casing->pos.y < casing->floor_y_pos) { #if defined(BUGFIX_R1) - if (dword_CODE_bss_80075DB0 == 0 && (g_ClockTimer > 0)) + if (g_CasingSfxState == 0 && (g_ClockTimer > 0)) #else - if (dword_CODE_bss_80075DB0 == 0) + if (g_CasingSfxState == 0) #endif { - if ((g_CurrentPlayer->hands[0].when_detonating_mines_is_0 != 2) && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 2)) + if ((g_CurrentPlayer->hands[0].weapon_action_state != GUN_ANIM_STATE_FIRE) && (g_CurrentPlayer->hands[1].weapon_action_state != GUN_ANIM_STATE_FIRE)) { // Play bullet casing rolling on floor sound - sndPlaySfx((struct ALBankAlt_s* ) g_musicSfxBufferPtr, CART_SPENT_SFX, (ALSoundState* ) &dword_CODE_bss_80075DB0); + sndPlaySfx((struct ALBankAlt_s* ) g_musicSfxBufferPtr, CART_SPENT_SFX, (ALSoundState* ) &g_CasingSfxState); } } @@ -17562,9 +7428,9 @@ void update_bullet_casing(CasingRecord* casing) for (i = 0; i < g_ClockTimer; i++) { #if defined(VERSION_US) || defined(VERSION_JP) - matrix_4x4_multiply_homogeneous_in_place(&casing->unk5C, &casing->unk1C); + matrix_4x4_multiply_homogeneous_in_place(&casing->rot_velocity_mtx, &casing->rot_mtx); #else - matrix_4x4_multiply_homogeneous_in_place_eu(casing->unk40, casing->unk1C); + matrix_4x4_multiply_homogeneous_in_place_eu(casing->rot_velocity_mtx, casing->rot_mtx); #endif } } @@ -17574,301 +7440,122 @@ void update_bullet_casings(void) { CasingRecord* end = g_Casings + ARRAYCOUNT(g_Casings); CasingRecord* entry = g_Casings; + while (entry < end) { if (entry->header) { update_bullet_casing(entry); } + entry++; } } +typedef struct ModelHead { + s16 unk00; + s16 rwdatalen; + void *chr; + ModelFileHeader *obj; + RenderPosView *render_pos; + union ModelRwData **datas; + f32 scale; + Model *attachedto; + ModelNode *attachedto_objinst; +} ModelHead; -#ifdef NONMATCHING -void sub_GAME_7F068EC4(void) { +void sub_GAME_7F068EC4(CasingRecord *casing, Gfx **gdl) +{ + Gfx *savedgdl = *gdl; + ModelFileHeader *model_header = casing->header; + RenderPosView *model_matrices = dynAllocate(model_header->numMatrices * sizeof(RenderPosView)); + ModelHead model; + ModelRenderData render_data = *(ModelRenderData *)g_DefaultCasingModelRenderData; + Mtxf casing_model_mtx; + s32 axis_offset; + s32 matrix_translation_in_range = TRUE; + f32 max_matrix_translation; + f32 model_scale_or_min_translation; + u8 *matrix_axis_ptr; -} -#else + modelCalculateRwDataLen(model_header); + modelInit((Model *)&model, model_header, NULL); -#if defined(VERSION_US) || defined(VERSION_JP) -GLOBAL_ASM( -.late_rodata -glabel D_80054408 -.word 0x3dccccce /*0.10000001*/ -glabel D_8005440C -.word 0xc6ea6000 /*-30000.0*/ -glabel D_80054410 -.word 0x46ea6000 /*30000.0*/ -.text -glabel sub_GAME_7F068EC4 -/* 09D9F4 7F068EC4 27BDFF18 */ addiu $sp, $sp, -0xe8 -/* 09D9F8 7F068EC8 AFBF001C */ sw $ra, 0x1c($sp) -/* 09D9FC 7F068ECC AFB00018 */ sw $s0, 0x18($sp) -/* 09DA00 7F068ED0 AFA400E8 */ sw $a0, 0xe8($sp) -/* 09DA04 7F068ED4 AFA500EC */ sw $a1, 0xec($sp) -/* 09DA08 7F068ED8 8CAF0000 */ lw $t7, ($a1) -/* 09DA0C 7F068EDC AFAF00E4 */ sw $t7, 0xe4($sp) -/* 09DA10 7F068EE0 8C82009C */ lw $v0, 0x9c($a0) -/* 09DA14 7F068EE4 8444000E */ lh $a0, 0xe($v0) -/* 09DA18 7F068EE8 AFA200E0 */ sw $v0, 0xe0($sp) -/* 09DA1C 7F068EEC 0004C980 */ sll $t9, $a0, 6 -/* 09DA20 7F068EF0 0FC2F5C5 */ jal dynAllocate -/* 09DA24 7F068EF4 03202025 */ move $a0, $t9 -/* 09DA28 7F068EF8 3C098003 */ lui $t1, %hi(D_80035EB0) -/* 09DA2C 7F068EFC 25295EB0 */ addiu $t1, %lo(D_80035EB0) # addiu $t1, $t1, 0x5eb0 -/* 09DA30 7F068F00 AFA200DC */ sw $v0, 0xdc($sp) -/* 09DA34 7F068F04 252C003C */ addiu $t4, $t1, 0x3c -/* 09DA38 7F068F08 27A8007C */ addiu $t0, $sp, 0x7c -.L7F068F0C: -/* 09DA3C 7F068F0C 8D210000 */ lw $at, ($t1) -/* 09DA40 7F068F10 2529000C */ addiu $t1, $t1, 0xc -/* 09DA44 7F068F14 2508000C */ addiu $t0, $t0, 0xc -/* 09DA48 7F068F18 AD01FFF4 */ sw $at, -0xc($t0) -/* 09DA4C 7F068F1C 8D21FFF8 */ lw $at, -8($t1) -/* 09DA50 7F068F20 AD01FFF8 */ sw $at, -8($t0) -/* 09DA54 7F068F24 8D21FFFC */ lw $at, -4($t1) -/* 09DA58 7F068F28 152CFFF8 */ bne $t1, $t4, .L7F068F0C -/* 09DA5C 7F068F2C AD01FFFC */ sw $at, -4($t0) -/* 09DA60 7F068F30 8D210000 */ lw $at, ($t1) -/* 09DA64 7F068F34 24100001 */ li $s0, 1 -/* 09DA68 7F068F38 AD010000 */ sw $at, ($t0) -/* 09DA6C 7F068F3C 0FC1D73D */ jal modelCalculateRwDataLen -/* 09DA70 7F068F40 8FA400E0 */ lw $a0, 0xe0($sp) -/* 09DA74 7F068F44 27A400BC */ addiu $a0, $sp, 0xbc -/* 09DA78 7F068F48 8FA500E0 */ lw $a1, 0xe0($sp) -/* 09DA7C 7F068F4C 0FC1D7DA */ jal modelInit -/* 09DA80 7F068F50 00003025 */ move $a2, $zero -/* 09DA84 7F068F54 8FAD00DC */ lw $t5, 0xdc($sp) -/* 09DA88 7F068F58 8FA400E8 */ lw $a0, 0xe8($sp) -/* 09DA8C 7F068F5C 27A5003C */ addiu $a1, $sp, 0x3c -/* 09DA90 7F068F60 AFAD00C8 */ sw $t5, 0xc8($sp) -/* 09DA94 7F068F64 0FC16008 */ jal matrix_4x4_copy -/* 09DA98 7F068F68 2484001C */ addiu $a0, $a0, 0x1c -/* 09DA9C 7F068F6C 3C018005 */ lui $at, %hi(D_80054408) -/* 09DAA0 7F068F70 C42C4408 */ lwc1 $f12, %lo(D_80054408)($at) -/* 09DAA4 7F068F74 0FC1629F */ jal matrix_scalar_multiply -/* 09DAA8 7F068F78 27A5003C */ addiu $a1, $sp, 0x3c -/* 09DAAC 7F068F7C 8FA400E8 */ lw $a0, 0xe8($sp) -/* 09DAB0 7F068F80 27A5003C */ addiu $a1, $sp, 0x3c -/* 09DAB4 7F068F84 0FC16266 */ jal matrix_4x4_set_position -/* 09DAB8 7F068F88 24840004 */ addiu $a0, $a0, 4 -/* 09DABC 7F068F8C 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 09DAC0 7F068F90 00000000 */ nop -/* 09DAC4 7F068F94 00402025 */ move $a0, $v0 -/* 09DAC8 7F068F98 27A5003C */ addiu $a1, $sp, 0x3c -/* 09DACC 7F068F9C 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 09DAD0 7F068FA0 8FA600C8 */ lw $a2, 0xc8($sp) -/* 09DAD4 7F068FA4 3C018005 */ lui $at, %hi(D_8005440C) -/* 09DAD8 7F068FA8 C42C440C */ lwc1 $f12, %lo(D_8005440C)($at) -/* 09DADC 7F068FAC 3C018005 */ lui $at, %hi(D_80054410) -/* 09DAE0 7F068FB0 C4224410 */ lwc1 $f2, %lo(D_80054410)($at) -/* 09DAE4 7F068FB4 00001025 */ move $v0, $zero -/* 09DAE8 7F068FB8 8FA300C8 */ lw $v1, 0xc8($sp) -/* 09DAEC 7F068FBC 2404000C */ li $a0, 12 -.L7F068FC0: -/* 09DAF0 7F068FC0 C4600030 */ lwc1 $f0, 0x30($v1) -/* 09DAF4 7F068FC4 24420004 */ addiu $v0, $v0, 4 -/* 09DAF8 7F068FC8 4600103C */ c.lt.s $f2, $f0 -/* 09DAFC 7F068FCC 00000000 */ nop -/* 09DB00 7F068FD0 45020004 */ bc1fl .L7F068FE4 -/* 09DB04 7F068FD4 460C003C */ c.lt.s $f0, $f12 -/* 09DB08 7F068FD8 10000006 */ b .L7F068FF4 -/* 09DB0C 7F068FDC 00008025 */ move $s0, $zero -/* 09DB10 7F068FE0 460C003C */ c.lt.s $f0, $f12 -.L7F068FE4: -/* 09DB14 7F068FE4 00000000 */ nop -/* 09DB18 7F068FE8 45000002 */ bc1f .L7F068FF4 -/* 09DB1C 7F068FEC 00000000 */ nop -/* 09DB20 7F068FF0 00008025 */ move $s0, $zero -.L7F068FF4: -/* 09DB24 7F068FF4 1444FFF2 */ bne $v0, $a0, .L7F068FC0 -/* 09DB28 7F068FF8 24630004 */ addiu $v1, $v1, 4 -/* 09DB2C 7F068FFC 1200001E */ beqz $s0, .L7F069078 -/* 09DB30 7F069000 24180004 */ li $t8, 4 -/* 09DB34 7F069004 8FAE00E4 */ lw $t6, 0xe4($sp) -/* 09DB38 7F069008 8FAF00DC */ lw $t7, 0xdc($sp) -/* 09DB3C 7F06900C 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 09DB40 7F069010 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09DB44 7F069014 AFA00080 */ sw $zero, 0x80($sp) -/* 09DB48 7F069018 AFB800AC */ sw $t8, 0xac($sp) -/* 09DB4C 7F06901C AFAE0088 */ sw $t6, 0x88($sp) -/* 09DB50 7F069020 AFAF008C */ sw $t7, 0x8c($sp) -/* 09DB54 7F069024 904B0FDC */ lbu $t3, 0xfdc($v0) -/* 09DB58 7F069028 90490FDD */ lbu $t1, 0xfdd($v0) -/* 09DB5C 7F06902C 90590FDF */ lbu $t9, 0xfdf($v0) -/* 09DB60 7F069030 904E0FDE */ lbu $t6, 0xfde($v0) -/* 09DB64 7F069034 000B5600 */ sll $t2, $t3, 0x18 -/* 09DB68 7F069038 00094400 */ sll $t0, $t1, 0x10 -/* 09DB6C 7F06903C 032A6025 */ or $t4, $t9, $t2 -/* 09DB70 7F069040 01886825 */ or $t5, $t4, $t0 -/* 09DB74 7F069044 000E7A00 */ sll $t7, $t6, 8 -/* 09DB78 7F069048 01AFC025 */ or $t8, $t5, $t7 -/* 09DB7C 7F06904C AFB800B0 */ sw $t8, 0xb0($sp) -/* 09DB80 7F069050 27A4007C */ addiu $a0, $sp, 0x7c -/* 09DB84 7F069054 0FC1D1A1 */ jal subdraw -/* 09DB88 7F069058 27A500BC */ addiu $a1, $sp, 0xbc -/* 09DB8C 7F06905C 8FAB0088 */ lw $t3, 0x88($sp) -/* 09DB90 7F069060 8FB900EC */ lw $t9, 0xec($sp) -/* 09DB94 7F069064 AF2B0000 */ sw $t3, ($t9) -/* 09DB98 7F069068 8FAA00E0 */ lw $t2, 0xe0($sp) -/* 09DB9C 7F06906C 8FA400DC */ lw $a0, 0xdc($sp) -/* 09DBA0 7F069070 0FC22F52 */ jal bondviewTransformManyPosToViewMatrix -/* 09DBA4 7F069074 8545000E */ lh $a1, 0xe($t2) -.L7F069078: -/* 09DBA8 7F069078 8FBF001C */ lw $ra, 0x1c($sp) -/* 09DBAC 7F06907C 8FB00018 */ lw $s0, 0x18($sp) -/* 09DBB0 7F069080 27BD00E8 */ addiu $sp, $sp, 0xe8 -/* 09DBB4 7F069084 03E00008 */ jr $ra -/* 09DBB8 7F069088 00000000 */ nop -) -#endif + model.render_pos = model_matrices; #if defined(VERSION_EU) -GLOBAL_ASM( -.late_rodata -glabel D_80054408 -.word 0x3dccccce /*0.10000001*/ -glabel D_8005440C -.word 0xc6ea6000 /*-30000.0*/ -glabel D_80054410 -.word 0x46ea6000 /*30000.0*/ -.text -glabel sub_GAME_7F068EC4 -/* 09C048 7F069658 27BDFF18 */ addiu $sp, $sp, -0xe8 -/* 09C04C 7F06965C AFBF001C */ sw $ra, 0x1c($sp) -/* 09C050 7F069660 AFB00018 */ sw $s0, 0x18($sp) -/* 09C054 7F069664 AFA400E8 */ sw $a0, 0xe8($sp) -/* 09C058 7F069668 AFA500EC */ sw $a1, 0xec($sp) -/* 09C05C 7F06966C 8CAF0000 */ lw $t7, ($a1) -/* 09C060 7F069670 AFAF00E4 */ sw $t7, 0xe4($sp) -/* 09C064 7F069674 8C820064 */ lw $v0, 0x64($a0) -/* 09C068 7F069678 8444000E */ lh $a0, 0xe($v0) -/* 09C06C 7F06967C AFA200E0 */ sw $v0, 0xe0($sp) -/* 09C070 7F069680 0004C980 */ sll $t9, $a0, 6 -/* 09C074 7F069684 0FC2F2B1 */ jal dynAllocate -/* 09C078 7F069688 03202025 */ move $a0, $t9 -/* 09C07C 7F06968C 3C098003 */ lui $t1, %hi(D_80035EB0) # $t1, 0x8003 -/* 09C080 7F069690 25291400 */ addiu $t1, %lo(D_80035EB0) # addiu $t1, $t1, 0x1400 -/* 09C084 7F069694 AFA200DC */ sw $v0, 0xdc($sp) -/* 09C088 7F069698 252C003C */ addiu $t4, $t1, 0x3c -/* 09C08C 7F06969C 27A8007C */ addiu $t0, $sp, 0x7c -.L7F0696A0: -/* 09C090 7F0696A0 8D210000 */ lw $at, ($t1) -/* 09C094 7F0696A4 2529000C */ addiu $t1, $t1, 0xc -/* 09C098 7F0696A8 2508000C */ addiu $t0, $t0, 0xc -/* 09C09C 7F0696AC AD01FFF4 */ sw $at, -0xc($t0) -/* 09C0A0 7F0696B0 8D21FFF8 */ lw $at, -8($t1) -/* 09C0A4 7F0696B4 AD01FFF8 */ sw $at, -8($t0) -/* 09C0A8 7F0696B8 8D21FFFC */ lw $at, -4($t1) -/* 09C0AC 7F0696BC 152CFFF8 */ bne $t1, $t4, .L7F0696A0 -/* 09C0B0 7F0696C0 AD01FFFC */ sw $at, -4($t0) -/* 09C0B4 7F0696C4 8D210000 */ lw $at, ($t1) -/* 09C0B8 7F0696C8 24100001 */ li $s0, 1 -/* 09C0BC 7F0696CC AD010000 */ sw $at, ($t0) -/* 09C0C0 7F0696D0 0FC1D75F */ jal modelCalculateRwDataLen -/* 09C0C4 7F0696D4 8FA400E0 */ lw $a0, 0xe0($sp) -/* 09C0C8 7F0696D8 27A400BC */ addiu $a0, $sp, 0xbc -/* 09C0CC 7F0696DC 8FA500E0 */ lw $a1, 0xe0($sp) -/* 09C0D0 7F0696E0 0FC1D7F9 */ jal modelInit -/* 09C0D4 7F0696E4 00003025 */ move $a2, $zero -/* 09C0D8 7F0696E8 8FAD00DC */ lw $t5, 0xdc($sp) -/* 09C0DC 7F0696EC 8FA400E8 */ lw $a0, 0xe8($sp) -/* 09C0E0 7F0696F0 27A5003C */ addiu $a1, $sp, 0x3c -/* 09C0E4 7F0696F4 AFAD00C8 */ sw $t5, 0xc8($sp) -/* 09C0E8 7F0696F8 0FC160EF */ jal matrix_4x4_copy_eu -/* 09C0EC 7F0696FC 2484001C */ addiu $a0, $a0, 0x1c -/* 09C0F0 7F069700 3C018005 */ lui $at, %hi(D_80054408) # $at, 0x8005 -/* 09C0F4 7F069704 C42CA548 */ lwc1 $f12, %lo(D_80054408)($at) -/* 09C0F8 7F069708 0FC163C9 */ jal matrix_scalar_multiply -/* 09C0FC 7F06970C 27A5003C */ addiu $a1, $sp, 0x3c -/* 09C100 7F069710 8FA400E8 */ lw $a0, 0xe8($sp) -/* 09C104 7F069714 27A5003C */ addiu $a1, $sp, 0x3c -/* 09C108 7F069718 0FC16390 */ jal matrix_4x4_set_position -/* 09C10C 7F06971C 24840004 */ addiu $a0, $a0, 4 -/* 09C110 7F069720 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 09C114 7F069724 00000000 */ nop -/* 09C118 7F069728 00402025 */ move $a0, $v0 -/* 09C11C 7F06972C 27A5003C */ addiu $a1, $sp, 0x3c -/* 09C120 7F069730 0FC1618D */ jal matrix_4x4_multiply_homogeneous -/* 09C124 7F069734 8FA600C8 */ lw $a2, 0xc8($sp) -/* 09C128 7F069738 3C018005 */ lui $at, %hi(D_8005440C) # $at, 0x8005 -/* 09C12C 7F06973C C42CA54C */ lwc1 $f12, %lo(D_8005440C)($at) -/* 09C130 7F069740 3C018005 */ lui $at, %hi(D_80054410) # $at, 0x8005 -/* 09C134 7F069744 C422A550 */ lwc1 $f2, %lo(D_80054410)($at) -/* 09C138 7F069748 00001025 */ move $v0, $zero -/* 09C13C 7F06974C 8FA300C8 */ lw $v1, 0xc8($sp) -/* 09C140 7F069750 2404000C */ li $a0, 12 -.L7F069754: -/* 09C144 7F069754 C4600030 */ lwc1 $f0, 0x30($v1) -/* 09C148 7F069758 24420004 */ addiu $v0, $v0, 4 -/* 09C14C 7F06975C 4600103C */ c.lt.s $f2, $f0 -/* 09C150 7F069760 00000000 */ nop -/* 09C154 7F069764 45020004 */ bc1fl .L7F069778 -/* 09C158 7F069768 460C003C */ c.lt.s $f0, $f12 -/* 09C15C 7F06976C 10000006 */ b .L7F069788 -/* 09C160 7F069770 00008025 */ move $s0, $zero -/* 09C164 7F069774 460C003C */ c.lt.s $f0, $f12 -.L7F069778: -/* 09C168 7F069778 00000000 */ nop -/* 09C16C 7F06977C 45000002 */ bc1f .L7F069788 -/* 09C170 7F069780 00000000 */ nop -/* 09C174 7F069784 00008025 */ move $s0, $zero -.L7F069788: -/* 09C178 7F069788 1444FFF2 */ bne $v0, $a0, .L7F069754 -/* 09C17C 7F06978C 24630004 */ addiu $v1, $v1, 4 -/* 09C180 7F069790 1200001E */ beqz $s0, .L7F06980C -/* 09C184 7F069794 24180004 */ li $t8, 4 -/* 09C188 7F069798 8FAE00E4 */ lw $t6, 0xe4($sp) -/* 09C18C 7F06979C 8FAF00DC */ lw $t7, 0xdc($sp) -/* 09C190 7F0697A0 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 09C194 7F0697A4 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09C198 7F0697A8 AFA00080 */ sw $zero, 0x80($sp) -/* 09C19C 7F0697AC AFB800AC */ sw $t8, 0xac($sp) -/* 09C1A0 7F0697B0 AFAE0088 */ sw $t6, 0x88($sp) -/* 09C1A4 7F0697B4 AFAF008C */ sw $t7, 0x8c($sp) -/* 09C1A8 7F0697B8 904B0FD4 */ lbu $t3, 0xfd4($v0) -/* 09C1AC 7F0697BC 90490FD5 */ lbu $t1, 0xfd5($v0) -/* 09C1B0 7F0697C0 90590FD7 */ lbu $t9, 0xfd7($v0) -/* 09C1B4 7F0697C4 904E0FD6 */ lbu $t6, 0xfd6($v0) -/* 09C1B8 7F0697C8 000B5600 */ sll $t2, $t3, 0x18 -/* 09C1BC 7F0697CC 00094400 */ sll $t0, $t1, 0x10 -/* 09C1C0 7F0697D0 032A6025 */ or $t4, $t9, $t2 -/* 09C1C4 7F0697D4 01886825 */ or $t5, $t4, $t0 -/* 09C1C8 7F0697D8 000E7A00 */ sll $t7, $t6, 8 -/* 09C1CC 7F0697DC 01AFC025 */ or $t8, $t5, $t7 -/* 09C1D0 7F0697E0 AFB800B0 */ sw $t8, 0xb0($sp) -/* 09C1D4 7F0697E4 27A4007C */ addiu $a0, $sp, 0x7c -/* 09C1D8 7F0697E8 0FC1D1D6 */ jal subdraw -/* 09C1DC 7F0697EC 27A500BC */ addiu $a1, $sp, 0xbc -/* 09C1E0 7F0697F0 8FAB0088 */ lw $t3, 0x88($sp) -/* 09C1E4 7F0697F4 8FB900EC */ lw $t9, 0xec($sp) -/* 09C1E8 7F0697F8 AF2B0000 */ sw $t3, ($t9) -/* 09C1EC 7F0697FC 8FAA00E0 */ lw $t2, 0xe0($sp) -/* 09C1F0 7F069800 8FA400DC */ lw $a0, 0xdc($sp) -/* 09C1F4 7F069804 0FC2300F */ jal bondviewTransformManyPosToViewMatrix -/* 09C1F8 7F069808 8545000E */ lh $a1, 0xe($t2) -.L7F06980C: -/* 09C1FC 7F06980C 8FBF001C */ lw $ra, 0x1c($sp) -/* 09C200 7F069810 8FB00018 */ lw $s0, 0x18($sp) -/* 09C204 7F069814 27BD00E8 */ addiu $sp, $sp, 0xe8 -/* 09C208 7F069818 03E00008 */ jr $ra -/* 09C20C 7F06981C 00000000 */ nop -) -#endif + matrix_4x4_copy_eu(casing->rot_mtx, casing_model_mtx.m); +#else + matrix_4x4_copy(&casing->rot_mtx, &casing_model_mtx); #endif + model_scale_or_min_translation = g_CasingModelScale; + matrix_scalar_multiply(model_scale_or_min_translation, &casing_model_mtx); -void sub_GAME_7F06908C(Gfx** arg0) + matrix_4x4_set_position(&casing->pos, &casing_model_mtx); + + matrix_4x4_multiply_homogeneous( + camGetWorldToScreenMtxf(), + &casing_model_mtx, + (Mtxf *)model.render_pos); + + model_scale_or_min_translation = g_CasingMinMatrixTranslation; + max_matrix_translation = g_CasingMaxMatrixTranslation; + + axis_offset = 0; + matrix_axis_ptr = (u8 *)model.render_pos; + + // Offset 0x30 is m[3][0]; advancing the pointer checks translation X, Y and Z. + while (axis_offset != 12) + { + if (max_matrix_translation < *(f32 *)(matrix_axis_ptr + 0x30)) + { + matrix_translation_in_range = FALSE; + } + else if (*(f32 *)(matrix_axis_ptr + 0x30) < model_scale_or_min_translation) + { + matrix_translation_in_range = FALSE; + } + + axis_offset += 4; + matrix_axis_ptr += 4; + } + + if (matrix_translation_in_range) + { + render_data.zbufferenabled = 0; + render_data.gdl = savedgdl; + render_data.mtxlist = (Mtxf *)model_matrices; + render_data.PropType = PROP_TYPE_WEAPON; + + render_data.envcolour.word = + ((g_CurrentPlayer->tileColor.a | + (g_CurrentPlayer->tileColor.r << 24)) | + (g_CurrentPlayer->tileColor.g << 16)) | + (g_CurrentPlayer->tileColor.b << 8); + + subdraw(&render_data, (Model *)&model); + + *gdl = render_data.gdl; + + bondviewTransformManyPosToViewMatrix(model_matrices, model_header->numMatrices); + } +} + + +// Address: 0x7F06908C +void gunRenderCasings(Gfx **gdl) { CasingRecord* end = g_Casings + ARRAYCOUNT(g_Casings); CasingRecord* entry = g_Casings; + while (entry < end) { if (entry->header) { - sub_GAME_7F068EC4(entry, arg0); + sub_GAME_7F068EC4(entry, gdl); } + entry++; } } @@ -17978,7 +7665,7 @@ s32 get_ammo_in_hands_weapon(enum GUNHAND hand) if ((other_weapon_id == ITEM_SHOTGUN) || (other_weapon_id == ITEM_AUTOSHOT)) { - return ammo_count - g_CurrentPlayer->hands[1 - hand].field_8A4; + return ammo_count - g_CurrentPlayer->hands[1 - hand].numvisibleshells; } /* I don't know why there's an extra return here, but it's needed to match */ @@ -18009,558 +7696,79 @@ s32 get_max_ammo_for_weapon(enum ITEM_IDS weapon) } +Gfx *microcode_generation_ammo_related(Gfx *gdl, struct sImageTableEntry *tconfig, f32 x, f32 y, f32 arg4, s32 arg5, f32 arg6, s32 arg7, s32 red, s32 green, s32 blue, s32 alpha) +{ + f32 xy[2]; + f32 halfed[2]; + + gDPSetColorDither(gdl++, G_CD_DISABLE); + gDPSetTexturePersp(gdl++, G_TP_NONE); + gDPSetAlphaCompare(gdl++, G_AC_NONE); + gDPSetTextureLOD(gdl++, G_TL_TILE); + gDPSetTextureFilter(gdl++, G_TF_POINT); + gDPSetTextureConvert(gdl++, G_TC_FILT); + gDPSetTextureLUT(gdl++, G_TT_NONE); + + xy[0] = ((u32)tconfig->width * 0.5f) - (f32)(tconfig->width / 2); -#ifdef NONMATCHING -void *microcode_generation_ammo_related(void *arg0, void *arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5, f32 arg6, s32 arg7, ?32 arg8, ?32 arg9, ?32 argA, ?32 argB) { - f32 spA8; - f32 spAC; - f32 spB0; - f32 spB4; - f32 temp_f4; - f32 temp_f4_2; - f32 temp_f18; - f32 temp_f10; - f32 temp_f6; - f32 temp_f18_2; - f32 temp_f16; - s32 phi_t9; - f32 phi_f4; - f32 phi_f18; - s32 phi_t2; - f32 phi_f18_2; - f32 phi_f16; - ? phi_a2; + if (arg5 != 0) + { + xy[0] = -xy[0]; + } - // Node 0 - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0xc0; - *arg0 = 0xba000602; //gDPSetColorDither(glistp++, G_CD_MAGICSQ); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0; - *arg0 = 0xba001301;//gDPSetTexturePersp(glistp++, G_TP_NONE); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0; - *arg0 = 0xb9000002; - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0; - *arg0 = 0xba001001;//gDPSetTextureLOD(glistp++, G_TL_TILE); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0; - *arg0 = 0xba000c02;//gDPSetTextureFilter(glistp++, G_TF_POINT); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0xc00; - *arg0 = 0xba000903;//gDPSetTextureConvert(glistp++, G_TC_CONV); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0; - *arg0 = 0xba000e02;//gDPSetTextureLUT(glistp++, G_TT_NONE); - phi_t9 = ((s32) arg1->unk4 >> 1); - if (arg1->unk4 < 0) + xy[0] = xy[0] + x; + + if (0.0f <= y) { - // Node 1 - phi_t9 = ((s32) (arg1->unk4 + 1) >> 1); - } - // Node 2 - temp_f4 = (((f32) (u32) arg1->unk4 * 0.5f) - (f32) phi_t9); - spB0 = temp_f4; - if (arg5 != 0) - { - // Node 3 - spB0 = (f32) -temp_f4; - } - // Node 4 - spB0 = (f32) (spB0 + arg2); - if (0.0f <= arg3) - { - // Node 5 - temp_f4_2 = (f32) arg1->unk5; - phi_f4 = temp_f4_2; - if (arg1->unk5 < 0) - { - // Node 6 - phi_f4 = (temp_f4_2 + M_U32_MAX_VALUE_F); - } - // Node 7 - spB4 = (f32) (arg3 - (phi_f4 * 0.5f)); + xy[1] = y - (((f32) ((u32) tconfig->height)) * 0.5f); } else { - // Node 8 - temp_f18 = (f32) arg1->unk5; - phi_f18 = temp_f18; - if (arg1->unk5 < 0) - { - // Node 9 - phi_f18 = (temp_f18 + M_U32_MAX_VALUE_F); - } - // Node 10 - phi_t2 = ((s32) arg1->unk5 >> 1); - if (arg1->unk5 < 0) - { - // Node 11 - phi_t2 = ((s32) (arg1->unk5 + 1) >> 1); - } - // Node 12 - temp_f10 = ((phi_f18 * 0.5f) - (f32) phi_t2); - temp_f6 = (arg4 - temp_f10); - spB4 = (f32) -temp_f10; - spB4 = temp_f6; - spB4 = (f32) (temp_f6 + arg6); + xy[1] = -((((f32)((u32)tconfig->height)) * 0.5f) - ((f32)(tconfig->height / 2))); + xy[1] = arg4 + xy[1]; + xy[1] = xy[1] + arg6; } - // Node 13 - temp_f18_2 = (f32) arg1->unk4; - phi_f18_2 = temp_f18_2; - if (arg1->unk4 < 0) - { - // Node 14 - phi_f18_2 = (temp_f18_2 + M_U32_MAX_VALUE_F); - } - // Node 15 - spA8 = (f32) (phi_f18_2 * 0.5f); - temp_f16 = (f32) arg1->unk5; - phi_f16 = temp_f16; - if (arg1->unk5 < 0) - { - // Node 16 - phi_f16 = (temp_f16 + M_U32_MAX_VALUE_F); - } - // Node 17 - arg0 = (void *) (arg0 + 8); - spAC = (f32) (phi_f16 * 0.5f); - arg0->unk4 = 0; - *arg0 = 0xe7000000;//gDPPipeSync(glistp++); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0; - *arg0 = 0xba001402;//gDPSetCyceType(glistp++, G_CYC_1CYCLE); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0x504240; - *arg0 = 0xb900031d;//gDPSetRenderMode(glistp++, G_RM_XLU_SURF, G_RM_XLU_SURF2); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0xfffdf6fb; - *arg0 = 0xfcffffff;//gDPSetCombineMode(glistp++, PRIMITIVE, PRIMITIVE2); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0; - *arg0 = 0xfa000000; - arg0 = (void *) (arg0 + 8); - *arg0 = (s32) ((((((s32) (spAC + spB4) + 1) & 0x3ff) * 4) | 0xf6000000) | ((((s32) (spB0 + spA8) + 1) & 0x3ff) << 0xe)); - arg0->unk4 = (s32) (((((s32) (spB4 - spAC) + -1) & 0x3ff) * 4) | ((((s32) (spB0 - spA8) + -1) & 0x3ff) << 0xe)); - phi_a2 = 1; - if (arg7 != 0) - { - // Node 18 - phi_a2 = 2; - } - // Node 19 - texSelect(arg3, arg2, &arg0, arg1, phi_a2, 0, 0); - display_image_at_position(&arg0, &spB0, &spA8, arg1->unk4, (s32) arg1->unk5, 0, 0, 1, arg8, arg9, argA, argB, (s32) (0 < arg1->unk6), 0); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0; - *arg0 = 0xe7000000;//gDPPipeSync(glistp++); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0x40; - *arg0 = 0xba000602;//gDPSetColorDither(glistp++, G_CD_BAYER); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0x80000; - *arg0 = 0xba001301;//gDPSetTexturePersp(glistp++, G_TP_PERSP); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0; - *arg0 = 0xb9000002; - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0x10000; - *arg0 = 0xba001001;//gDPSetTextureLOD(glistp++, G_TL_LOD); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0x2000; - *arg0 = 0xba000c02;//gDPSetTextureFilter(glistp++, G_TF_BILERP); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0xc00; - *arg0 = 0xba000903;//gDPSetTextureConvert(glistp++, G_TC_FILT); - arg0 = (void *) (arg0 + 8); - arg0->unk4 = 0; - *arg0 = 0xba000e02; - return arg0; + + halfed[0] = ((f32) ((u32) tconfig->width)) * 0.5f; + halfed[1] = ((f32) ((u32) tconfig->height)) * 0.5f; + + gDPPipeSync(gdl++); + gDPSetCycleType(gdl++, G_CYC_1CYCLE); + gDPSetRenderMode(gdl++, G_RM_XLU_SURF, G_RM_XLU_SURF2); + gDPSetCombineMode(gdl++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); + gDPSetPrimColor(gdl++, 0, 0, 0, 0, 0, 0); + gDPFillRectangle(gdl++, ((s32)(xy[0] - halfed[0])) - 1, ((s32)(xy[1] - halfed[1])) - 1, ((s32)(xy[0] + halfed[0])) + 1, ((s32)(xy[1] + halfed[1])) + 1); + + texSelect(&gdl, tconfig, (arg7 != 0) ? (2) : (1), 0, 0); + display_image_at_position(&gdl, xy, halfed, tconfig->width, tconfig->height, 0, 0, 1, red, green, blue, alpha, 0 < tconfig->level, 0); + + gDPPipeSync(gdl++); + gDPSetColorDither(gdl++, G_CD_BAYER); + gDPSetTexturePersp(gdl++, G_TP_PERSP); + gDPSetAlphaCompare(gdl++, G_AC_NONE); + gDPSetTextureLOD(gdl++, G_TL_LOD); + gDPSetTextureFilter(gdl++, G_TF_BILERP); + gDPSetTextureConvert(gdl++, G_TC_FILT); + gDPSetTextureLUT(gdl++, G_TT_NONE); + + return gdl; } -#else -GLOBAL_ASM( -.text -glabel microcode_generation_ammo_related -/* 09E018 7F0694E8 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 09E01C 7F0694EC AFA400B8 */ sw $a0, 0xb8($sp) -/* 09E020 7F0694F0 248F0008 */ addiu $t7, $a0, 8 -/* 09E024 7F0694F4 AFBF0044 */ sw $ra, 0x44($sp) -/* 09E028 7F0694F8 AFB00040 */ sw $s0, 0x40($sp) -/* 09E02C 7F0694FC AFAF00B8 */ sw $t7, 0xb8($sp) -/* 09E030 7F069500 3C18BA00 */ lui $t8, (0xBA000602 >> 16) # lui $t8, 0xba00 -/* 09E034 7F069504 37180602 */ ori $t8, (0xBA000602 & 0xFFFF) # ori $t8, $t8, 0x602 -/* 09E038 7F069508 241900C0 */ li $t9, 192 -/* 09E03C 7F06950C AC990004 */ sw $t9, 4($a0) -/* 09E040 7F069510 AC980000 */ sw $t8, ($a0) -/* 09E044 7F069514 8FA800B8 */ lw $t0, 0xb8($sp) -/* 09E048 7F069518 3C0ABA00 */ lui $t2, (0xBA001301 >> 16) # lui $t2, 0xba00 -/* 09E04C 7F06951C 354A1301 */ ori $t2, (0xBA001301 & 0xFFFF) # ori $t2, $t2, 0x1301 -/* 09E050 7F069520 25090008 */ addiu $t1, $t0, 8 -/* 09E054 7F069524 AFA900B8 */ sw $t1, 0xb8($sp) -/* 09E058 7F069528 AD000004 */ sw $zero, 4($t0) -/* 09E05C 7F06952C AD0A0000 */ sw $t2, ($t0) -/* 09E060 7F069530 8FAB00B8 */ lw $t3, 0xb8($sp) -/* 09E064 7F069534 3C0DB900 */ lui $t5, (0xB9000002 >> 16) # lui $t5, 0xb900 -/* 09E068 7F069538 35AD0002 */ ori $t5, (0xB9000002 & 0xFFFF) # ori $t5, $t5, 2 -/* 09E06C 7F06953C 256C0008 */ addiu $t4, $t3, 8 -/* 09E070 7F069540 AFAC00B8 */ sw $t4, 0xb8($sp) -/* 09E074 7F069544 AD600004 */ sw $zero, 4($t3) -/* 09E078 7F069548 AD6D0000 */ sw $t5, ($t3) -/* 09E07C 7F06954C 8FAE00B8 */ lw $t6, 0xb8($sp) -/* 09E080 7F069550 3C18BA00 */ lui $t8, (0xBA001001 >> 16) # lui $t8, 0xba00 -/* 09E084 7F069554 37181001 */ ori $t8, (0xBA001001 & 0xFFFF) # ori $t8, $t8, 0x1001 -/* 09E088 7F069558 25CF0008 */ addiu $t7, $t6, 8 -/* 09E08C 7F06955C AFAF00B8 */ sw $t7, 0xb8($sp) -/* 09E090 7F069560 ADC00004 */ sw $zero, 4($t6) -/* 09E094 7F069564 ADD80000 */ sw $t8, ($t6) -/* 09E098 7F069568 8FB900B8 */ lw $t9, 0xb8($sp) -/* 09E09C 7F06956C 3C09BA00 */ lui $t1, (0xBA000C02 >> 16) # lui $t1, 0xba00 -/* 09E0A0 7F069570 35290C02 */ ori $t1, (0xBA000C02 & 0xFFFF) # ori $t1, $t1, 0xc02 -/* 09E0A4 7F069574 27280008 */ addiu $t0, $t9, 8 -/* 09E0A8 7F069578 AFA800B8 */ sw $t0, 0xb8($sp) -/* 09E0AC 7F06957C AF200004 */ sw $zero, 4($t9) -/* 09E0B0 7F069580 AF290000 */ sw $t1, ($t9) -/* 09E0B4 7F069584 8FAA00B8 */ lw $t2, 0xb8($sp) -/* 09E0B8 7F069588 3C0CBA00 */ lui $t4, (0xBA000903 >> 16) # lui $t4, 0xba00 -/* 09E0BC 7F06958C 358C0903 */ ori $t4, (0xBA000903 & 0xFFFF) # ori $t4, $t4, 0x903 -/* 09E0C0 7F069590 254B0008 */ addiu $t3, $t2, 8 -/* 09E0C4 7F069594 AFAB00B8 */ sw $t3, 0xb8($sp) -/* 09E0C8 7F069598 240D0C00 */ li $t5, 3072 -/* 09E0CC 7F06959C AD4D0004 */ sw $t5, 4($t2) -/* 09E0D0 7F0695A0 AD4C0000 */ sw $t4, ($t2) -/* 09E0D4 7F0695A4 8FAE00B8 */ lw $t6, 0xb8($sp) -/* 09E0D8 7F0695A8 3C18BA00 */ lui $t8, (0xBA000E02 >> 16) # lui $t8, 0xba00 -/* 09E0DC 7F0695AC 37180E02 */ ori $t8, (0xBA000E02 & 0xFFFF) # ori $t8, $t8, 0xe02 -/* 09E0E0 7F0695B0 25CF0008 */ addiu $t7, $t6, 8 -/* 09E0E4 7F0695B4 AFAF00B8 */ sw $t7, 0xb8($sp) -/* 09E0E8 7F0695B8 ADC00004 */ sw $zero, 4($t6) -/* 09E0EC 7F0695BC ADD80000 */ sw $t8, ($t6) -/* 09E0F0 7F0695C0 90A40004 */ lbu $a0, 4($a1) -/* 09E0F4 7F0695C4 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 09E0F8 7F0695C8 44867000 */ mtc1 $a2, $f14 -/* 09E0FC 7F0695CC 44842000 */ mtc1 $a0, $f4 -/* 09E100 7F0695D0 44876000 */ mtc1 $a3, $f12 -/* 09E104 7F0695D4 44810000 */ mtc1 $at, $f0 -/* 09E108 7F0695D8 00A08025 */ move $s0, $a1 -/* 09E10C 7F0695DC 04810005 */ bgez $a0, .L7F0695F4 -/* 09E110 7F0695E0 468021A0 */ cvt.s.w $f6, $f4 -/* 09E114 7F0695E4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09E118 7F0695E8 44814000 */ mtc1 $at, $f8 -/* 09E11C 7F0695EC 00000000 */ nop -/* 09E120 7F0695F0 46083180 */ add.s $f6, $f6, $f8 -.L7F0695F4: -/* 09E124 7F0695F4 46003282 */ mul.s $f10, $f6, $f0 -/* 09E128 7F0695F8 04810003 */ bgez $a0, .L7F069608 -/* 09E12C 7F0695FC 0004C843 */ sra $t9, $a0, 1 -/* 09E130 7F069600 24810001 */ addiu $at, $a0, 1 -/* 09E134 7F069604 0001C843 */ sra $t9, $at, 1 -.L7F069608: -/* 09E138 7F069608 44998000 */ mtc1 $t9, $f16 -/* 09E13C 7F06960C 8FA800CC */ lw $t0, 0xcc($sp) -/* 09E140 7F069610 3C0FE700 */ lui $t7, 0xe700 -/* 09E144 7F069614 468084A0 */ cvt.s.w $f18, $f16 -/* 09E148 7F069618 27A400B8 */ addiu $a0, $sp, 0xb8 -/* 09E14C 7F06961C 02002825 */ move $a1, $s0 -/* 09E150 7F069620 00003825 */ move $a3, $zero -/* 09E154 7F069624 46125101 */ sub.s $f4, $f10, $f18 -/* 09E158 7F069628 44805000 */ mtc1 $zero, $f10 -/* 09E15C 7F06962C 11000003 */ beqz $t0, .L7F06963C -/* 09E160 7F069630 E7A400B0 */ swc1 $f4, 0xb0($sp) -/* 09E164 7F069634 46002207 */ neg.s $f8, $f4 -/* 09E168 7F069638 E7A800B0 */ swc1 $f8, 0xb0($sp) -.L7F06963C: -/* 09E16C 7F06963C C7A600B0 */ lwc1 $f6, 0xb0($sp) -/* 09E170 7F069640 460C503E */ c.le.s $f10, $f12 -/* 09E174 7F069644 3C08BA00 */ lui $t0, (0xBA001402 >> 16) # lui $t0, 0xba00 -/* 09E178 7F069648 460E3400 */ add.s $f16, $f6, $f14 -/* 09E17C 7F06964C 4500000D */ bc1f .L7F069684 -/* 09E180 7F069650 E7B000B0 */ swc1 $f16, 0xb0($sp) -/* 09E184 7F069654 92090005 */ lbu $t1, 5($s0) -/* 09E188 7F069658 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09E18C 7F06965C 44899000 */ mtc1 $t1, $f18 -/* 09E190 7F069660 05210004 */ bgez $t1, .L7F069674 -/* 09E194 7F069664 46809120 */ cvt.s.w $f4, $f18 -/* 09E198 7F069668 44814000 */ mtc1 $at, $f8 -/* 09E19C 7F06966C 00000000 */ nop -/* 09E1A0 7F069670 46082100 */ add.s $f4, $f4, $f8 -.L7F069674: -/* 09E1A4 7F069674 46002182 */ mul.s $f6, $f4, $f0 -/* 09E1A8 7F069678 46066401 */ sub.s $f16, $f12, $f6 -/* 09E1AC 7F06967C 10000019 */ b .L7F0696E4 -/* 09E1B0 7F069680 E7B000B4 */ swc1 $f16, 0xb4($sp) -.L7F069684: -/* 09E1B4 7F069684 92020005 */ lbu $v0, 5($s0) -/* 09E1B8 7F069688 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09E1BC 7F06968C 44825000 */ mtc1 $v0, $f10 -/* 09E1C0 7F069690 04410004 */ bgez $v0, .L7F0696A4 -/* 09E1C4 7F069694 468054A0 */ cvt.s.w $f18, $f10 -/* 09E1C8 7F069698 44814000 */ mtc1 $at, $f8 -/* 09E1CC 7F06969C 00000000 */ nop -/* 09E1D0 7F0696A0 46089480 */ add.s $f18, $f18, $f8 -.L7F0696A4: -/* 09E1D4 7F0696A4 46009102 */ mul.s $f4, $f18, $f0 -/* 09E1D8 7F0696A8 04410003 */ bgez $v0, .L7F0696B8 -/* 09E1DC 7F0696AC 00025043 */ sra $t2, $v0, 1 -/* 09E1E0 7F0696B0 24410001 */ addiu $at, $v0, 1 -/* 09E1E4 7F0696B4 00015043 */ sra $t2, $at, 1 -.L7F0696B8: -/* 09E1E8 7F0696B8 448A3000 */ mtc1 $t2, $f6 -/* 09E1EC 7F0696BC C7B200C8 */ lwc1 $f18, 0xc8($sp) -/* 09E1F0 7F0696C0 46803420 */ cvt.s.w $f16, $f6 -/* 09E1F4 7F0696C4 46102281 */ sub.s $f10, $f4, $f16 -/* 09E1F8 7F0696C8 C7A400D0 */ lwc1 $f4, 0xd0($sp) -/* 09E1FC 7F0696CC 460A9181 */ sub.s $f6, $f18, $f10 -/* 09E200 7F0696D0 46005207 */ neg.s $f8, $f10 -/* 09E204 7F0696D4 46043400 */ add.s $f16, $f6, $f4 -/* 09E208 7F0696D8 E7A800B4 */ swc1 $f8, 0xb4($sp) -/* 09E20C 7F0696DC E7A600B4 */ swc1 $f6, 0xb4($sp) -/* 09E210 7F0696E0 E7B000B4 */ swc1 $f16, 0xb4($sp) -.L7F0696E4: -/* 09E214 7F0696E4 920B0004 */ lbu $t3, 4($s0) -/* 09E218 7F0696E8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09E21C 7F0696EC 24060001 */ li $a2, 1 -/* 09E220 7F0696F0 448B4000 */ mtc1 $t3, $f8 -/* 09E224 7F0696F4 05610004 */ bgez $t3, .L7F069708 -/* 09E228 7F0696F8 468044A0 */ cvt.s.w $f18, $f8 -/* 09E22C 7F0696FC 44815000 */ mtc1 $at, $f10 -/* 09E230 7F069700 00000000 */ nop -/* 09E234 7F069704 460A9480 */ add.s $f18, $f18, $f10 -.L7F069708: -/* 09E238 7F069708 46009182 */ mul.s $f6, $f18, $f0 -/* 09E23C 7F06970C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 09E240 7F069710 E7A600A8 */ swc1 $f6, 0xa8($sp) -/* 09E244 7F069714 920C0005 */ lbu $t4, 5($s0) -/* 09E248 7F069718 448C2000 */ mtc1 $t4, $f4 -/* 09E24C 7F06971C 05810004 */ bgez $t4, .L7F069730 -/* 09E250 7F069720 46802420 */ cvt.s.w $f16, $f4 -/* 09E254 7F069724 44814000 */ mtc1 $at, $f8 -/* 09E258 7F069728 00000000 */ nop -/* 09E25C 7F06972C 46088400 */ add.s $f16, $f16, $f8 -.L7F069730: -/* 09E260 7F069730 46008282 */ mul.s $f10, $f16, $f0 -/* 09E264 7F069734 8FAD00B8 */ lw $t5, 0xb8($sp) -/* 09E268 7F069738 35081402 */ ori $t0, (0xBA001402 & 0xFFFF) # ori $t0, $t0, 0x1402 -/* 09E26C 7F06973C 3C0BB900 */ lui $t3, (0xB900031D >> 16) # lui $t3, 0xb900 -/* 09E270 7F069740 25AE0008 */ addiu $t6, $t5, 8 -/* 09E274 7F069744 AFAE00B8 */ sw $t6, 0xb8($sp) -/* 09E278 7F069748 3C0C0050 */ lui $t4, (0x00504240 >> 16) # lui $t4, 0x50 -/* 09E27C 7F06974C E7AA00AC */ swc1 $f10, 0xac($sp) -/* 09E280 7F069750 ADA00004 */ sw $zero, 4($t5) -/* 09E284 7F069754 ADAF0000 */ sw $t7, ($t5) -/* 09E288 7F069758 8FB800B8 */ lw $t8, 0xb8($sp) -/* 09E28C 7F06975C 358C4240 */ ori $t4, (0x00504240 & 0xFFFF) # ori $t4, $t4, 0x4240 -/* 09E290 7F069760 356B031D */ ori $t3, (0xB900031D & 0xFFFF) # ori $t3, $t3, 0x31d -/* 09E294 7F069764 27190008 */ addiu $t9, $t8, 8 -/* 09E298 7F069768 AFB900B8 */ sw $t9, 0xb8($sp) -/* 09E29C 7F06976C AF000004 */ sw $zero, 4($t8) -/* 09E2A0 7F069770 AF080000 */ sw $t0, ($t8) -/* 09E2A4 7F069774 8FA900B8 */ lw $t1, 0xb8($sp) -/* 09E2A8 7F069778 3C18FFFD */ lui $t8, (0xFFFDF6FB >> 16) # lui $t8, 0xfffd -/* 09E2AC 7F06977C 3C0FFCFF */ lui $t7, (0xFCFFFFFF >> 16) # lui $t7, 0xfcff -/* 09E2B0 7F069780 252A0008 */ addiu $t2, $t1, 8 -/* 09E2B4 7F069784 AFAA00B8 */ sw $t2, 0xb8($sp) -/* 09E2B8 7F069788 AD2C0004 */ sw $t4, 4($t1) -/* 09E2BC 7F06978C AD2B0000 */ sw $t3, ($t1) -/* 09E2C0 7F069790 8FAD00B8 */ lw $t5, 0xb8($sp) -/* 09E2C4 7F069794 35EFFFFF */ ori $t7, (0xFCFFFFFF & 0xFFFF) # ori $t7, $t7, 0xffff -/* 09E2C8 7F069798 3718F6FB */ ori $t8, (0xFFFDF6FB & 0xFFFF) # ori $t8, $t8, 0xf6fb -/* 09E2CC 7F06979C 25AE0008 */ addiu $t6, $t5, 8 -/* 09E2D0 7F0697A0 AFAE00B8 */ sw $t6, 0xb8($sp) -/* 09E2D4 7F0697A4 ADB80004 */ sw $t8, 4($t5) -/* 09E2D8 7F0697A8 ADAF0000 */ sw $t7, ($t5) -/* 09E2DC 7F0697AC 8FB900B8 */ lw $t9, 0xb8($sp) -/* 09E2E0 7F0697B0 3C09FA00 */ lui $t1, 0xfa00 -/* 09E2E4 7F0697B4 3C01F600 */ lui $at, 0xf600 -/* 09E2E8 7F0697B8 27280008 */ addiu $t0, $t9, 8 -/* 09E2EC 7F0697BC AFA800B8 */ sw $t0, 0xb8($sp) -/* 09E2F0 7F0697C0 AF200004 */ sw $zero, 4($t9) -/* 09E2F4 7F0697C4 AF290000 */ sw $t1, ($t9) -/* 09E2F8 7F0697C8 C7B200AC */ lwc1 $f18, 0xac($sp) -/* 09E2FC 7F0697CC C7A600B4 */ lwc1 $f6, 0xb4($sp) -/* 09E300 7F0697D0 C7AA00A8 */ lwc1 $f10, 0xa8($sp) -/* 09E304 7F0697D4 C7B000B0 */ lwc1 $f16, 0xb0($sp) -/* 09E308 7F0697D8 46069100 */ add.s $f4, $f18, $f6 -/* 09E30C 7F0697DC 8FA200B8 */ lw $v0, 0xb8($sp) -/* 09E310 7F0697E0 460A8480 */ add.s $f18, $f16, $f10 -/* 09E314 7F0697E4 244B0008 */ addiu $t3, $v0, 8 -/* 09E318 7F0697E8 AFAB00B8 */ sw $t3, 0xb8($sp) -/* 09E31C 7F0697EC 4600220D */ trunc.w.s $f8, $f4 -/* 09E320 7F0697F0 4600918D */ trunc.w.s $f6, $f18 -/* 09E324 7F0697F4 440D4000 */ mfc1 $t5, $f8 -/* 09E328 7F0697F8 44093000 */ mfc1 $t1, $f6 -/* 09E32C 7F0697FC 25AE0001 */ addiu $t6, $t5, 1 -/* 09E330 7F069800 31CF03FF */ andi $t7, $t6, 0x3ff -/* 09E334 7F069804 252A0001 */ addiu $t2, $t1, 1 -/* 09E338 7F069808 314B03FF */ andi $t3, $t2, 0x3ff -/* 09E33C 7F06980C 000FC080 */ sll $t8, $t7, 2 -/* 09E340 7F069810 0301C825 */ or $t9, $t8, $at -/* 09E344 7F069814 000B6380 */ sll $t4, $t3, 0xe -/* 09E348 7F069818 032C6825 */ or $t5, $t9, $t4 -/* 09E34C 7F06981C AC4D0000 */ sw $t5, ($v0) -/* 09E350 7F069820 C7A800AC */ lwc1 $f8, 0xac($sp) -/* 09E354 7F069824 C7A400B4 */ lwc1 $f4, 0xb4($sp) -/* 09E358 7F069828 C7A600A8 */ lwc1 $f6, 0xa8($sp) -/* 09E35C 7F06982C C7B200B0 */ lwc1 $f18, 0xb0($sp) -/* 09E360 7F069830 46082401 */ sub.s $f16, $f4, $f8 -/* 09E364 7F069834 46069101 */ sub.s $f4, $f18, $f6 -/* 09E368 7F069838 4600828D */ trunc.w.s $f10, $f16 -/* 09E36C 7F06983C 4600220D */ trunc.w.s $f8, $f4 -/* 09E370 7F069840 440F5000 */ mfc1 $t7, $f10 -/* 09E374 7F069844 440B4000 */ mfc1 $t3, $f8 -/* 09E378 7F069848 25F8FFFF */ addiu $t8, $t7, -1 -/* 09E37C 7F06984C 330803FF */ andi $t0, $t8, 0x3ff -/* 09E380 7F069850 2579FFFF */ addiu $t9, $t3, -1 -/* 09E384 7F069854 332C03FF */ andi $t4, $t9, 0x3ff -/* 09E388 7F069858 000C6B80 */ sll $t5, $t4, 0xe -/* 09E38C 7F06985C 00084880 */ sll $t1, $t0, 2 -/* 09E390 7F069860 012D7025 */ or $t6, $t1, $t5 -/* 09E394 7F069864 AC4E0004 */ sw $t6, 4($v0) -/* 09E398 7F069868 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 09E39C 7F06986C 11E00003 */ beqz $t7, .L7F06987C -/* 09E3A0 7F069870 00000000 */ nop -/* 09E3A4 7F069874 10000001 */ b .L7F06987C -/* 09E3A8 7F069878 24060002 */ li $a2, 2 -.L7F06987C: -/* 09E3AC 7F06987C 0FC1DB5A */ jal texSelect -/* 09E3B0 7F069880 AFA00010 */ sw $zero, 0x10($sp) -/* 09E3B4 7F069884 92180005 */ lbu $t8, 5($s0) -/* 09E3B8 7F069888 92070004 */ lbu $a3, 4($s0) -/* 09E3BC 7F06988C 8FAA00D8 */ lw $t2, 0xd8($sp) -/* 09E3C0 7F069890 8FAB00DC */ lw $t3, 0xdc($sp) -/* 09E3C4 7F069894 8FB900E0 */ lw $t9, 0xe0($sp) -/* 09E3C8 7F069898 8FAC00E4 */ lw $t4, 0xe4($sp) -/* 09E3CC 7F06989C 24080001 */ li $t0, 1 -/* 09E3D0 7F0698A0 AFA8001C */ sw $t0, 0x1c($sp) -/* 09E3D4 7F0698A4 AFA00018 */ sw $zero, 0x18($sp) -/* 09E3D8 7F0698A8 AFA00014 */ sw $zero, 0x14($sp) -/* 09E3DC 7F0698AC AFB80010 */ sw $t8, 0x10($sp) -/* 09E3E0 7F0698B0 AFAA0020 */ sw $t2, 0x20($sp) -/* 09E3E4 7F0698B4 AFAB0024 */ sw $t3, 0x24($sp) -/* 09E3E8 7F0698B8 AFB90028 */ sw $t9, 0x28($sp) -/* 09E3EC 7F0698BC AFAC002C */ sw $t4, 0x2c($sp) -/* 09E3F0 7F0698C0 92090006 */ lbu $t1, 6($s0) -/* 09E3F4 7F0698C4 AFA00034 */ sw $zero, 0x34($sp) -/* 09E3F8 7F0698C8 27A400B8 */ addiu $a0, $sp, 0xb8 -/* 09E3FC 7F0698CC 0009682A */ slt $t5, $zero, $t1 -/* 09E400 7F0698D0 AFAD0030 */ sw $t5, 0x30($sp) -/* 09E404 7F0698D4 27A500B0 */ addiu $a1, $sp, 0xb0 -/* 09E408 7F0698D8 0FC1ABFA */ jal display_image_at_position -/* 09E40C 7F0698DC 27A600A8 */ addiu $a2, $sp, 0xa8 -/* 09E410 7F0698E0 8FAE00B8 */ lw $t6, 0xb8($sp) -/* 09E414 7F0698E4 3C18E700 */ lui $t8, 0xe700 -/* 09E418 7F0698E8 3C0BBA00 */ lui $t3, (0xBA000602 >> 16) # lui $t3, 0xba00 -/* 09E41C 7F0698EC 25CF0008 */ addiu $t7, $t6, 8 -/* 09E420 7F0698F0 AFAF00B8 */ sw $t7, 0xb8($sp) -/* 09E424 7F0698F4 ADC00004 */ sw $zero, 4($t6) -/* 09E428 7F0698F8 ADD80000 */ sw $t8, ($t6) -/* 09E42C 7F0698FC 8FA800B8 */ lw $t0, 0xb8($sp) -/* 09E430 7F069900 356B0602 */ ori $t3, (0xBA000602 & 0xFFFF) # ori $t3, $t3, 0x602 -/* 09E434 7F069904 24190040 */ li $t9, 64 -/* 09E438 7F069908 250A0008 */ addiu $t2, $t0, 8 -/* 09E43C 7F06990C AFAA00B8 */ sw $t2, 0xb8($sp) -/* 09E440 7F069910 AD190004 */ sw $t9, 4($t0) -/* 09E444 7F069914 AD0B0000 */ sw $t3, ($t0) -/* 09E448 7F069918 8FAC00B8 */ lw $t4, 0xb8($sp) -/* 09E44C 7F06991C 3C0DBA00 */ lui $t5, (0xBA001301 >> 16) # lui $t5, 0xba00 -/* 09E450 7F069920 35AD1301 */ ori $t5, (0xBA001301 & 0xFFFF) # ori $t5, $t5, 0x1301 -/* 09E454 7F069924 25890008 */ addiu $t1, $t4, 8 -/* 09E458 7F069928 AFA900B8 */ sw $t1, 0xb8($sp) -/* 09E45C 7F06992C 3C0E0008 */ lui $t6, 8 -/* 09E460 7F069930 AD8E0004 */ sw $t6, 4($t4) -/* 09E464 7F069934 AD8D0000 */ sw $t5, ($t4) -/* 09E468 7F069938 8FAF00B8 */ lw $t7, 0xb8($sp) -/* 09E46C 7F06993C 3C08B900 */ lui $t0, (0xB9000002 >> 16) # lui $t0, 0xb900 -/* 09E470 7F069940 35080002 */ ori $t0, (0xB9000002 & 0xFFFF) # ori $t0, $t0, 2 -/* 09E474 7F069944 25F80008 */ addiu $t8, $t7, 8 -/* 09E478 7F069948 AFB800B8 */ sw $t8, 0xb8($sp) -/* 09E47C 7F06994C ADE00004 */ sw $zero, 4($t7) -/* 09E480 7F069950 ADE80000 */ sw $t0, ($t7) -/* 09E484 7F069954 8FAA00B8 */ lw $t2, 0xb8($sp) -/* 09E488 7F069958 3C19BA00 */ lui $t9, (0xBA001001 >> 16) # lui $t9, 0xba00 -/* 09E48C 7F06995C 37391001 */ ori $t9, (0xBA001001 & 0xFFFF) # ori $t9, $t9, 0x1001 -/* 09E490 7F069960 254B0008 */ addiu $t3, $t2, 8 -/* 09E494 7F069964 AFAB00B8 */ sw $t3, 0xb8($sp) -/* 09E498 7F069968 3C0C0001 */ lui $t4, 1 -/* 09E49C 7F06996C AD4C0004 */ sw $t4, 4($t2) -/* 09E4A0 7F069970 AD590000 */ sw $t9, ($t2) -/* 09E4A4 7F069974 8FA900B8 */ lw $t1, 0xb8($sp) -/* 09E4A8 7F069978 3C0EBA00 */ lui $t6, (0xBA000C02 >> 16) # lui $t6, 0xba00 -/* 09E4AC 7F06997C 35CE0C02 */ ori $t6, (0xBA000C02 & 0xFFFF) # ori $t6, $t6, 0xc02 -/* 09E4B0 7F069980 252D0008 */ addiu $t5, $t1, 8 -/* 09E4B4 7F069984 AFAD00B8 */ sw $t5, 0xb8($sp) -/* 09E4B8 7F069988 240F2000 */ li $t7, 8192 -/* 09E4BC 7F06998C AD2F0004 */ sw $t7, 4($t1) -/* 09E4C0 7F069990 AD2E0000 */ sw $t6, ($t1) -/* 09E4C4 7F069994 8FB800B8 */ lw $t8, 0xb8($sp) -/* 09E4C8 7F069998 3C0ABA00 */ lui $t2, (0xBA000903 >> 16) # lui $t2, 0xba00 -/* 09E4CC 7F06999C 354A0903 */ ori $t2, (0xBA000903 & 0xFFFF) # ori $t2, $t2, 0x903 -/* 09E4D0 7F0699A0 27080008 */ addiu $t0, $t8, 8 -/* 09E4D4 7F0699A4 AFA800B8 */ sw $t0, 0xb8($sp) -/* 09E4D8 7F0699A8 240B0C00 */ li $t3, 3072 -/* 09E4DC 7F0699AC AF0B0004 */ sw $t3, 4($t8) -/* 09E4E0 7F0699B0 AF0A0000 */ sw $t2, ($t8) -/* 09E4E4 7F0699B4 8FB900B8 */ lw $t9, 0xb8($sp) -/* 09E4E8 7F0699B8 3C09BA00 */ lui $t1, (0xBA000E02 >> 16) # lui $t1, 0xba00 -/* 09E4EC 7F0699BC 35290E02 */ ori $t1, (0xBA000E02 & 0xFFFF) # ori $t1, $t1, 0xe02 -/* 09E4F0 7F0699C0 272C0008 */ addiu $t4, $t9, 8 -/* 09E4F4 7F0699C4 AFAC00B8 */ sw $t4, 0xb8($sp) -/* 09E4F8 7F0699C8 AF200004 */ sw $zero, 4($t9) -/* 09E4FC 7F0699CC AF290000 */ sw $t1, ($t9) -/* 09E500 7F0699D0 8FBF0044 */ lw $ra, 0x44($sp) -/* 09E504 7F0699D4 8FB00040 */ lw $s0, 0x40($sp) -/* 09E508 7F0699D8 8FA200B8 */ lw $v0, 0xb8($sp) -/* 09E50C 7F0699DC 03E00008 */ jr $ra -/* 09E510 7F0699E0 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif - - - - -#ifdef NONMATCHING -void set_rgba_redirect_generate_microcode(? arg2, ? arg3, f32 arg4, ?32 arg5, f32 arg6, ?32 arg7) { - // Node 0 - return microcode_generation_ammo_related(arg2, arg3, arg2, arg3, arg4, arg5, arg6, arg7, 0xff, 0xff, 0xff, 0xff); +/** + * Address: TODO + * WARNING: This function is missing a "return". This will cause bugs on other compilers. + */ +Gfx *set_rgba_redirect_generate_microcode(Gfx *gdl, sImageTableEntry *tconfig, f32 x, f32 y, f32 arg4, s32 arg5, f32 arg6, s32 arg7) +{ + microcode_generation_ammo_related(gdl, tconfig, x, y, arg4, arg5, arg6, arg7, 0xff, 0xff, 0xff, 0xff); } -#else -GLOBAL_ASM( -.text -glabel set_rgba_redirect_generate_microcode -/* 09E514 7F0699E4 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 09E518 7F0699E8 44866000 */ mtc1 $a2, $f12 -/* 09E51C 7F0699EC 44877000 */ mtc1 $a3, $f14 -/* 09E520 7F0699F0 C7A40048 */ lwc1 $f4, 0x48($sp) -/* 09E524 7F0699F4 8FAE004C */ lw $t6, 0x4c($sp) -/* 09E528 7F0699F8 C7A60050 */ lwc1 $f6, 0x50($sp) -/* 09E52C 7F0699FC 8FAF0054 */ lw $t7, 0x54($sp) -/* 09E530 7F069A00 AFBF0034 */ sw $ra, 0x34($sp) -/* 09E534 7F069A04 241800FF */ li $t8, 255 -/* 09E538 7F069A08 241900FF */ li $t9, 255 -/* 09E53C 7F069A0C 240800FF */ li $t0, 255 -/* 09E540 7F069A10 240900FF */ li $t1, 255 -/* 09E544 7F069A14 44066000 */ mfc1 $a2, $f12 -/* 09E548 7F069A18 44077000 */ mfc1 $a3, $f14 -/* 09E54C 7F069A1C AFA9002C */ sw $t1, 0x2c($sp) -/* 09E550 7F069A20 AFA80028 */ sw $t0, 0x28($sp) -/* 09E554 7F069A24 AFB90024 */ sw $t9, 0x24($sp) -/* 09E558 7F069A28 AFB80020 */ sw $t8, 0x20($sp) -/* 09E55C 7F069A2C E7A40010 */ swc1 $f4, 0x10($sp) -/* 09E560 7F069A30 AFAE0014 */ sw $t6, 0x14($sp) -/* 09E564 7F069A34 E7A60018 */ swc1 $f6, 0x18($sp) -/* 09E568 7F069A38 0FC1A53A */ jal microcode_generation_ammo_related -/* 09E56C 7F069A3C AFAF001C */ sw $t7, 0x1c($sp) -/* 09E570 7F069A40 8FBF0034 */ lw $ra, 0x34($sp) -/* 09E574 7F069A44 27BD0038 */ addiu $sp, $sp, 0x38 -/* 09E578 7F069A48 03E00008 */ jr $ra -/* 09E57C 7F069A4C 00000000 */ nop -) -#endif -Gfx *gunDrawHudString(Gfx *gdl, s8 *text, s32 x, s32 halign, s32 y, s32 valign, bool glow) +/** + * Address: TODO + */ +Gfx *gunDrawHudString(Gfx *gdl, s8 *text, s32 x, s32 halign, s32 y, s32 valign, bool outline) { s32 x1; s32 y1; @@ -18602,7 +7810,7 @@ Gfx *gunDrawHudString(Gfx *gdl, s8 *text, s32 x, s32 halign, s32 y, s32 valign, gdl = draw_blackbox_to_screen(gdl, &x1, &y1, &x2, &y2); - if (glow) { + if (outline) { gdl = textRenderOutlined(gdl, &x1, &y1, text, ptrFontBankGothicChars, ptrFontBankGothic, -1, 0x646464FF, (s32) viGetX(), viGetY(), 0, 0); } else { gdl = textRender(gdl, &x1, &y1, text, ptrFontBankGothicChars, ptrFontBankGothic, 0xFF00B0, (s32) viGetX(), viGetY(), 0, 0); @@ -18612,1631 +7820,285 @@ Gfx *gunDrawHudString(Gfx *gdl, s8 *text, s32 x, s32 halign, s32 y, s32 valign, } -Gfx *gunDrawHudInteger(Gfx *gdl, s32 value, s32 x, s32 halign, s32 y, s32 valign, bool glow) +/** + * Address: TODO + */ +Gfx *gunDrawHudInteger(Gfx *gdl, s32 value, s32 x, s32 halign, s32 y, s32 valign, bool outline) { char buffer[12]; sprintf(buffer, "%d\n", value); - return gunDrawHudString(gdl, buffer, x, halign, y, valign, glow); + return gunDrawHudString(gdl, buffer, x, halign, y, valign, outline); } -#ifdef NONMATCHING -s32 generate_ammo_total_microcode(s32 arg0) { - void *sp28; - s16 sp2C; - s16 sp2E; - f32 sp30; - f32 sp34; - s16 sp38; - s32 sp3C; - void *sp40; - s32 sp44; - void *sp48; - s32 sp4C; - s32 sp50; - s32 sp54; - s32 sp58; - s32 sp5C; - s32 sp60; - s32 sp64; - ? temp_ret; - void *temp_v1; - s32 temp_v1_3; - s32 temp_t3; - ? temp_ret_2; - void *temp_v1_2; - s32 temp_v1_4; - s32 temp_t1; - s32 phi_v1; - s32 phi_t9; - s32 phi_t0; - s32 phi_v1_2; - s32 phi_t3; - s32 phi_t0_2; - // Node 0 - if (g_CurrentPlayer->unk1064 == 0) +/** + * Draw magazine ammo number, ammo type icon, and total ammo number at the bottom right of the viewport. + * Render an additional ammo counter at the bottom left of the viewport when dual wielding. + */ +Gfx *generate_ammo_total_microcode(Gfx *gdl) +{ + ITEM_IDS weapon_left; + ITEM_IDS weapon_right; + s32 ammotype; + s32 leftx; + s32 rightx; + s32 reserveammo; + s32 magammo; + u32 imageoffset_r; + s32 textwidth_r; + u32 imageoffset_l; + s32 textwidth_l; + + if (g_CurrentPlayer->gunammooff == 0) { - // Node 1 - if (g_CurrentPlayer->unk29C4 == 0) + if (g_CurrentPlayer->mpmenuon == 0) { - // Node 2 - sp64 = getCurrentPlayerWeaponId(1); - sp60 = getCurrentPlayerWeaponId(0); + weapon_left = getCurrentPlayerWeaponId(GUNLEFT); + weapon_right = getCurrentPlayerWeaponId(GUNRIGHT); + if (getPlayerCount() < 3) { - // Node 3 - sp58 = 0x3b; - sp54 = 0x3b; + leftx = 59; + rightx = 59; + } + else if (get_cur_playernum() & 1) + { + leftx = 43; + rightx = 127; } else { - // Node 4 - if ((get_cur_playernum() & 1) != 0) - { - // Node 5 - sp58 = 0x2b; - sp54 = 0x7f; - } - else - { - // Node 6 - sp58 = 0x3b; - sp54 = 0x6d; - } + leftx = 59; + rightx = 109; } - // Node 7 - if (sp60 != 0) - { - // Node 8 - temp_ret = get_ammo_type_for_weapon(sp60); - sp5C = temp_ret; - if (temp_ret != 0) - { - // Node 9 - if (g_CurrentPlayer->unk894 != 7) - { - // Node 10 - if (g_CurrentPlayer->unk894 != 7) - { - // Node 11 - if (bondwalkItemCheckBitflags(sp60, 0x80000) == 0) - { - // Node 12 - temp_v1 = ((sp5C * 0xc) + &ammo_related); - sp44 = 5; - if (temp_v1->unk4 != 0) - { - // Node 13 - sp28 = temp_v1; - sp48 = (void *) (temp_v1->unk4 + globalbank_rdram_offset); - sp30 = getPlayer_c_screenleft(); - sp34 = getPlayer_c_screenwidth(); - sp38 = viGetViewTop(); - arg0 = set_rgba_redirect_generate_microcode(arg0, sp48, ((sp34 + sp30) - (f32) sp54), 0xbf800000, (f32) ((viGetViewHeight() + sp38) + -0x14), 0, (f32) sp28->unk8, 1); - sp44 = (s32) sp48->unk4; - } - // Node 14 - arg0 = microcode_constructor(arg0); - if (bondwalkItemCheckBitflags(sp60, 0x400000) != 0) - { - // Node 15 - sp4C = 0; - temp_v1_3 = (g_CurrentPlayer->unk89C + (g_CurrentPlayer + (sp5C * 4))->unk1130); - phi_v1 = temp_v1_3; - if (sp64 == sp60) - { - // Node 16 - phi_v1 = (temp_v1_3 + g_CurrentPlayer->unkC44); - } - // Node 17 - sp50 = (s32) phi_v1; - } - else - { - // Node 18 - sp4C = (s32) g_CurrentPlayer->unk89C; - sp50 = (s32) (g_CurrentPlayer + (sp5C * 4))->unk1130; - } - // Node 19 - if (bondwalkItemCheckBitflags(sp60, 0x400000) == 0) - { - // Node 20 - sp2C = viGetViewLeft(); - sp2E = viGetViewWidth(); - sp38 = viGetViewTop(); - viGetViewHeight(); - phi_t9 = (sp44 >> 1); - if (sp44 < 0) - { - // Node 21 - phi_t9 = ((s32) (sp44 + 1) >> 1); - } - // Node 22 - arg0 = gunDrawHudInteger(arg0, sp4C, ((((sp2E + sp2C) - sp54) - phi_t9) + -4), 0); - } - // Node 23 - if ((sp50 > 0) || (bondwalkItemCheckBitflags(sp60, 0x400000) != 0)) - { - // Node 25 - sp2C = viGetViewLeft(); - sp2E = viGetViewWidth(); - sp38 = viGetViewTop(); - viGetViewHeight(); - temp_t3 = (sp44 + 1); - phi_t0 = (temp_t3 >> 1); - if (temp_t3 < 0) - { - // Node 26 - phi_t0 = ((s32) (temp_t3 + 1) >> 1); - } - // Node 27 - arg0 = gunDrawHudInteger(arg0, sp50, ((((sp2E + sp2C) - sp54) + phi_t0) + 3), 1); - } - else - { - } - // Node 28 - arg0 = combiner_bayer_lod_perspective(arg0); - } + if (weapon_right != ITEM_UNARMED) + { + ammotype = get_ammo_type_for_weapon(weapon_right); + + if (ammotype != 0 + && g_CurrentPlayer->hands[0].weapon_action_state != GUN_ANIM_STATE_SWITCH_SWAP + && g_CurrentPlayer->hands[0].weapon_action_state != GUN_ANIM_STATE_SWITCH_HOLD + && !bondwalkItemCheckBitflags(weapon_right, WEAPONSTATBITFLAG_HIDE_AMMO_DISPLAY)) + { + imageoffset_r = ammo_related[ammotype].IconImage; + textwidth_r = 5; + + if (imageoffset_r != 0) + { + imageoffset_r += globalbank_rdram_offset; + gdl = set_rgba_redirect_generate_microcode(gdl, (u8 *)imageoffset_r, (getPlayer_c_screenleft() + getPlayer_c_screenwidth()) - (f32)rightx, -1.0f, +#if defined(VERSION_EU) + (viGetViewTop() + viGetViewHeight()) - 30, 0, +#else + (viGetViewTop() + viGetViewHeight()) - 20, 0, +#endif + ammo_related[ammotype].IconYOffset, 1); + textwidth_r = ((u8 *)imageoffset_r)[4]; + } + + gdl = microcode_constructor(gdl); + + if (bondwalkItemCheckBitflags(weapon_right, WEAPONSTATBITFLAG_NO_CLIP_RELOADS)) + { + magammo = 0; + reserveammo = g_CurrentPlayer->ammoheldarr[ammotype] + g_CurrentPlayer->hands[0].weapon_ammo_in_magazine; + if (weapon_left == weapon_right) + { + reserveammo += g_CurrentPlayer->hands[1].weapon_ammo_in_magazine; } } + else + { + magammo = g_CurrentPlayer->hands[0].weapon_ammo_in_magazine; + reserveammo = g_CurrentPlayer->ammoheldarr[ammotype]; + } + + if (!bondwalkItemCheckBitflags(weapon_right, WEAPONSTATBITFLAG_NO_CLIP_RELOADS)) + { + gdl = gunDrawHudInteger(gdl, magammo, (((viGetViewLeft() + viGetViewWidth()) - rightx) - (textwidth_r / 2)) - 4, 0, +#if defined(VERSION_EU) + (viGetViewTop() + viGetViewHeight()) - 28, 2, 1); +#else + (viGetViewTop() + viGetViewHeight()) - 18, 2, 1); +#endif + } + + if (reserveammo > 0 || bondwalkItemCheckBitflags(weapon_right, WEAPONSTATBITFLAG_NO_CLIP_RELOADS)) + { + gdl = gunDrawHudInteger(gdl, reserveammo, (((viGetViewLeft() + viGetViewWidth()) - rightx) + ((textwidth_r + 1) / 2)) + 3, 1, +#if defined(VERSION_EU) + (viGetViewTop() + viGetViewHeight()) - 28, 2, 1); +#else + (viGetViewTop() + viGetViewHeight()) - 18, 2, 1); +#endif + } + + gdl = combiner_bayer_lod_perspective(gdl); } } - // Node 29 - if (sp64 != 0) - { - // Node 30 - temp_ret_2 = get_ammo_type_for_weapon(sp64); - sp5C = temp_ret_2; - if (temp_ret_2 != 0) - { - // Node 31 - if (g_CurrentPlayer->unkC3C != 7) - { - // Node 32 - if (g_CurrentPlayer->unkC3C != 7) - { - // Node 33 - if (bondwalkItemCheckBitflags(sp64, 0x80000) == 0) - { - // Node 34 - temp_v1_2 = ((sp5C * 0xc) + &ammo_related); - sp3C = 5; - if (temp_v1_2->unk4 != 0) - { - // Node 35 - sp28 = temp_v1_2; - sp40 = (void *) (temp_v1_2->unk4 + globalbank_rdram_offset); - sp34 = getPlayer_c_screenleft(); - sp38 = viGetViewTop(); - viGetViewHeight(); - arg0 = set_rgba_redirect_generate_microcode(sp28->unk8, arg0, sp40, (sp34 + (f32) sp58), 0xbf800000, 1, 1); - sp3C = (s32) sp40->unk4; - } - // Node 36 - arg0 = microcode_constructor(arg0); - if (bondwalkItemCheckBitflags(sp64, 0x400000) != 0) - { - // Node 37 - sp4C = 0; - temp_v1_4 = (g_CurrentPlayer->unkC44 + (g_CurrentPlayer + (sp5C * 4))->unk1130); - phi_v1_2 = temp_v1_4; - if (sp64 == sp60) - { - // Node 38 - phi_v1_2 = (temp_v1_4 + g_CurrentPlayer->unk89C); - } - // Node 39 - sp50 = (s32) phi_v1_2; - } - else - { - // Node 40 - sp4C = (s32) g_CurrentPlayer->unkC44; - sp50 = (s32) (g_CurrentPlayer + (sp5C * 4))->unk1130; - } - // Node 41 - if (bondwalkItemCheckBitflags(sp64, 0x400000) == 0) - { - // Node 42 - sp2E = viGetViewLeft(); - sp38 = viGetViewTop(); - viGetViewHeight(); - phi_t3 = (sp3C >> 1); - if (sp3C < 0) - { - // Node 43 - phi_t3 = ((s32) (sp3C + 1) >> 1); - } - // Node 44 - arg0 = gunDrawHudInteger(arg0, sp4C, (((sp2E + sp58) + phi_t3) + 3), 1); - } - // Node 45 - if ((sp50 > 0) || (bondwalkItemCheckBitflags(sp64, 0x400000) != 0)) - { - // Node 47 - sp2E = viGetViewLeft(); - sp38 = viGetViewTop(); - viGetViewHeight(); - temp_t1 = (sp3C + 1); - phi_t0_2 = (temp_t1 >> 1); - if (temp_t1 < 0) - { - // Node 48 - phi_t0_2 = ((s32) (temp_t1 + 1) >> 1); - } - // Node 49 - arg0 = gunDrawHudInteger(arg0, sp50, (((sp2E + sp58) - phi_t0_2) + -4), 0); - } - else - { - } - // Node 50 - arg0 = combiner_bayer_lod_perspective(arg0); - } + if (weapon_left != ITEM_UNARMED) + { + ammotype = get_ammo_type_for_weapon(weapon_left); + + if (ammotype != 0 + && g_CurrentPlayer->hands[1].weapon_action_state != GUN_ANIM_STATE_SWITCH_SWAP + && g_CurrentPlayer->hands[1].weapon_action_state != GUN_ANIM_STATE_SWITCH_HOLD + && !bondwalkItemCheckBitflags(weapon_left, WEAPONSTATBITFLAG_HIDE_AMMO_DISPLAY)) + { + imageoffset_l = ammo_related[ammotype].IconImage; + textwidth_l = 5; + + if (imageoffset_l != 0) + { + imageoffset_l += globalbank_rdram_offset; + gdl = set_rgba_redirect_generate_microcode(gdl, (u8 *)imageoffset_l, getPlayer_c_screenleft() + (f32)leftx, -1.0f, +#if defined(VERSION_EU) + (viGetViewTop() + viGetViewHeight()) - 30, 1, +#else + (viGetViewTop() + viGetViewHeight()) - 20, 1, +#endif + ammo_related[ammotype].IconYOffset, 1); + textwidth_l = ((u8 *)imageoffset_l)[4]; + } + + gdl = microcode_constructor(gdl); + + if (bondwalkItemCheckBitflags(weapon_left, WEAPONSTATBITFLAG_NO_CLIP_RELOADS)) + { + magammo = 0; + reserveammo = g_CurrentPlayer->ammoheldarr[ammotype] + g_CurrentPlayer->hands[1].weapon_ammo_in_magazine; + if (weapon_left == weapon_right) + { + reserveammo += g_CurrentPlayer->hands[0].weapon_ammo_in_magazine; } } + else + { + magammo = g_CurrentPlayer->hands[1].weapon_ammo_in_magazine; + reserveammo = g_CurrentPlayer->ammoheldarr[ammotype]; + } + + if (!bondwalkItemCheckBitflags(weapon_left, WEAPONSTATBITFLAG_NO_CLIP_RELOADS)) + { + gdl = gunDrawHudInteger(gdl, magammo, ((viGetViewLeft() + leftx) + (textwidth_l / 2)) + 3, 1, +#if defined(VERSION_EU) + (viGetViewTop() + viGetViewHeight()) - 28, 2, 1); +#else + (viGetViewTop() + viGetViewHeight()) - 18, 2, 1); +#endif + } + + if (reserveammo > 0 || bondwalkItemCheckBitflags(weapon_left, WEAPONSTATBITFLAG_NO_CLIP_RELOADS)) + { + gdl = gunDrawHudInteger(gdl, reserveammo, ((viGetViewLeft() + leftx) - ((textwidth_l + 1) / 2)) - 4, 0, +#if defined(VERSION_EU) + (viGetViewTop() + viGetViewHeight()) - 28, 2, 1); +#else + (viGetViewTop() + viGetViewHeight()) - 18, 2, 1); +#endif + } + + gdl = combiner_bayer_lod_perspective(gdl); } } } } - // Node 51 - return arg0; + + return gdl; } -#else - -#if defined(VERSION_US) || defined(VERSION_JP) -GLOBAL_ASM( -.text -glabel generate_ammo_total_microcode -/* 09E824 7F069CF4 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 09E828 7F069CF8 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09E82C 7F069CFC 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 09E830 7F069D00 AFBF0024 */ sw $ra, 0x24($sp) -/* 09E834 7F069D04 AFA40068 */ sw $a0, 0x68($sp) -/* 09E838 7F069D08 8C4E1064 */ lw $t6, 0x1064($v0) -/* 09E83C 7F069D0C 55C00185 */ bnezl $t6, .L7F06A324 -/* 09E840 7F069D10 8FBF0024 */ lw $ra, 0x24($sp) -/* 09E844 7F069D14 8C4F29C4 */ lw $t7, 0x29c4($v0) -/* 09E848 7F069D18 55E00182 */ bnezl $t7, .L7F06A324 -/* 09E84C 7F069D1C 8FBF0024 */ lw $ra, 0x24($sp) -/* 09E850 7F069D20 0FC17674 */ jal getCurrentPlayerWeaponId -/* 09E854 7F069D24 24040001 */ li $a0, 1 -/* 09E858 7F069D28 AFA20064 */ sw $v0, 0x64($sp) -/* 09E85C 7F069D2C 0FC17674 */ jal getCurrentPlayerWeaponId -/* 09E860 7F069D30 00002025 */ move $a0, $zero -/* 09E864 7F069D34 0FC26919 */ jal getPlayerCount -/* 09E868 7F069D38 AFA20060 */ sw $v0, 0x60($sp) -/* 09E86C 7F069D3C 28410003 */ slti $at, $v0, 3 -/* 09E870 7F069D40 10200005 */ beqz $at, .L7F069D58 -/* 09E874 7F069D44 2418003B */ li $t8, 59 -/* 09E878 7F069D48 2419003B */ li $t9, 59 -/* 09E87C 7F069D4C AFB80058 */ sw $t8, 0x58($sp) -/* 09E880 7F069D50 1000000E */ b .L7F069D8C -/* 09E884 7F069D54 AFB90054 */ sw $t9, 0x54($sp) -.L7F069D58: -/* 09E888 7F069D58 0FC26C54 */ jal get_cur_playernum -/* 09E88C 7F069D5C 00000000 */ nop -/* 09E890 7F069D60 30480001 */ andi $t0, $v0, 1 -/* 09E894 7F069D64 11000006 */ beqz $t0, .L7F069D80 -/* 09E898 7F069D68 240B003B */ li $t3, 59 -/* 09E89C 7F069D6C 2409002B */ li $t1, 43 -/* 09E8A0 7F069D70 240A007F */ li $t2, 127 -/* 09E8A4 7F069D74 AFA90058 */ sw $t1, 0x58($sp) -/* 09E8A8 7F069D78 10000004 */ b .L7F069D8C -/* 09E8AC 7F069D7C AFAA0054 */ sw $t2, 0x54($sp) -.L7F069D80: -/* 09E8B0 7F069D80 240C006D */ li $t4, 109 -/* 09E8B4 7F069D84 AFAB0058 */ sw $t3, 0x58($sp) -/* 09E8B8 7F069D88 AFAC0054 */ sw $t4, 0x54($sp) -.L7F069D8C: -/* 09E8BC 7F069D8C 8FAD0060 */ lw $t5, 0x60($sp) -/* 09E8C0 7F069D90 51A000B7 */ beql $t5, $zero, .L7F06A070 -/* 09E8C4 7F069D94 8FA40064 */ lw $a0, 0x64($sp) -/* 09E8C8 7F069D98 0FC1A50B */ jal get_ammo_type_for_weapon -/* 09E8CC 7F069D9C 01A02025 */ move $a0, $t5 -/* 09E8D0 7F069DA0 104000B2 */ beqz $v0, .L7F06A06C -/* 09E8D4 7F069DA4 AFA2005C */ sw $v0, 0x5c($sp) -/* 09E8D8 7F069DA8 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 09E8DC 7F069DAC 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 09E8E0 7F069DB0 24010006 */ li $at, 6 -/* 09E8E4 7F069DB4 8DC20894 */ lw $v0, 0x894($t6) -/* 09E8E8 7F069DB8 104100AC */ beq $v0, $at, .L7F06A06C -/* 09E8EC 7F069DBC 24010007 */ li $at, 7 -/* 09E8F0 7F069DC0 104100AA */ beq $v0, $at, .L7F06A06C -/* 09E8F4 7F069DC4 8FA40060 */ lw $a0, 0x60($sp) -/* 09E8F8 7F069DC8 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09E8FC 7F069DCC 3C050008 */ lui $a1, 8 -/* 09E900 7F069DD0 144000A6 */ bnez $v0, .L7F06A06C -/* 09E904 7F069DD4 8FAF005C */ lw $t7, 0x5c($sp) -/* 09E908 7F069DD8 000FC080 */ sll $t8, $t7, 2 -/* 09E90C 7F069DDC 030FC023 */ subu $t8, $t8, $t7 -/* 09E910 7F069DE0 3C198003 */ lui $t9, %hi(ammo_related) -/* 09E914 7F069DE4 27395EF0 */ addiu $t9, %lo(ammo_related) # addiu $t9, $t9, 0x5ef0 -/* 09E918 7F069DE8 0018C080 */ sll $t8, $t8, 2 -/* 09E91C 7F069DEC 03191821 */ addu $v1, $t8, $t9 -/* 09E920 7F069DF0 8C620004 */ lw $v0, 4($v1) -/* 09E924 7F069DF4 24080005 */ li $t0, 5 -/* 09E928 7F069DF8 AFA80044 */ sw $t0, 0x44($sp) -/* 09E92C 7F069DFC 10400028 */ beqz $v0, .L7F069EA0 -/* 09E930 7F069E00 3C098009 */ lui $t1, %hi(globalbank_rdram_offset) -/* 09E934 7F069E04 8D29D0B0 */ lw $t1, %lo(globalbank_rdram_offset)($t1) -/* 09E938 7F069E08 AFA30028 */ sw $v1, 0x28($sp) -/* 09E93C 7F069E0C 00491021 */ addu $v0, $v0, $t1 -/* 09E940 7F069E10 0FC1E131 */ jal getPlayer_c_screenleft -/* 09E944 7F069E14 AFA20048 */ sw $v0, 0x48($sp) -/* 09E948 7F069E18 0FC1E129 */ jal getPlayer_c_screenwidth -/* 09E94C 7F069E1C E7A00030 */ swc1 $f0, 0x30($sp) -/* 09E950 7F069E20 0C001149 */ jal viGetViewTop -/* 09E954 7F069E24 E7A00034 */ swc1 $f0, 0x34($sp) -/* 09E958 7F069E28 0C00112B */ jal viGetViewHeight -/* 09E95C 7F069E2C A7A20038 */ sh $v0, 0x38($sp) -/* 09E960 7F069E30 8FAA0054 */ lw $t2, 0x54($sp) -/* 09E964 7F069E34 87AB0038 */ lh $t3, 0x38($sp) -/* 09E968 7F069E38 C7A40034 */ lwc1 $f4, 0x34($sp) -/* 09E96C 7F069E3C C7A60030 */ lwc1 $f6, 0x30($sp) -/* 09E970 7F069E40 448A5000 */ mtc1 $t2, $f10 -/* 09E974 7F069E44 004B6021 */ addu $t4, $v0, $t3 -/* 09E978 7F069E48 46062200 */ add.s $f8, $f4, $f6 -/* 09E97C 7F069E4C 258DFFEC */ addiu $t5, $t4, -0x14 -/* 09E980 7F069E50 448D2000 */ mtc1 $t5, $f4 -/* 09E984 7F069E54 46805420 */ cvt.s.w $f16, $f10 -/* 09E988 7F069E58 8FAE0028 */ lw $t6, 0x28($sp) -/* 09E98C 7F069E5C AFA00014 */ sw $zero, 0x14($sp) -/* 09E990 7F069E60 240F0001 */ li $t7, 1 -/* 09E994 7F069E64 8FA40068 */ lw $a0, 0x68($sp) -/* 09E998 7F069E68 468021A0 */ cvt.s.w $f6, $f4 -/* 09E99C 7F069E6C 8FA50048 */ lw $a1, 0x48($sp) -/* 09E9A0 7F069E70 3C07BF80 */ lui $a3, 0xbf80 -/* 09E9A4 7F069E74 46104481 */ sub.s $f18, $f8, $f16 -/* 09E9A8 7F069E78 E7A60010 */ swc1 $f6, 0x10($sp) -/* 09E9AC 7F069E7C C5CA0008 */ lwc1 $f10, 8($t6) -/* 09E9B0 7F069E80 AFAF001C */ sw $t7, 0x1c($sp) -/* 09E9B4 7F069E84 44069000 */ mfc1 $a2, $f18 -/* 09E9B8 7F069E88 0FC1A679 */ jal set_rgba_redirect_generate_microcode -/* 09E9BC 7F069E8C E7AA0018 */ swc1 $f10, 0x18($sp) -/* 09E9C0 7F069E90 8FB80048 */ lw $t8, 0x48($sp) -/* 09E9C4 7F069E94 AFA20068 */ sw $v0, 0x68($sp) -/* 09E9C8 7F069E98 93190004 */ lbu $t9, 4($t8) -/* 09E9CC 7F069E9C AFB90044 */ sw $t9, 0x44($sp) -.L7F069EA0: -/* 09E9D0 7F069EA0 0FC2B366 */ jal microcode_constructor -/* 09E9D4 7F069EA4 8FA40068 */ lw $a0, 0x68($sp) -/* 09E9D8 7F069EA8 AFA20068 */ sw $v0, 0x68($sp) -/* 09E9DC 7F069EAC 8FA40060 */ lw $a0, 0x60($sp) -/* 09E9E0 7F069EB0 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09E9E4 7F069EB4 3C050040 */ lui $a1, 0x40 -/* 09E9E8 7F069EB8 10400011 */ beqz $v0, .L7F069F00 -/* 09E9EC 7F069EBC 3C050040 */ lui $a1, 0x40 -/* 09E9F0 7F069EC0 8FA9005C */ lw $t1, 0x5c($sp) -/* 09E9F4 7F069EC4 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 09E9F8 7F069EC8 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09E9FC 7F069ECC AFA0004C */ sw $zero, 0x4c($sp) -/* 09EA00 7F069ED0 00095080 */ sll $t2, $t1, 2 -/* 09EA04 7F069ED4 8FAD0064 */ lw $t5, 0x64($sp) -/* 09EA08 7F069ED8 8FAE0060 */ lw $t6, 0x60($sp) -/* 09EA0C 7F069EDC 004A5821 */ addu $t3, $v0, $t2 -/* 09EA10 7F069EE0 8D6C1130 */ lw $t4, 0x1130($t3) -/* 09EA14 7F069EE4 8C48089C */ lw $t0, 0x89c($v0) -/* 09EA18 7F069EE8 15AE0003 */ bne $t5, $t6, .L7F069EF8 -/* 09EA1C 7F069EEC 010C1821 */ addu $v1, $t0, $t4 -/* 09EA20 7F069EF0 8C4F0C44 */ lw $t7, 0xc44($v0) -/* 09EA24 7F069EF4 006F1821 */ addu $v1, $v1, $t7 -.L7F069EF8: -/* 09EA28 7F069EF8 1000000A */ b .L7F069F24 -/* 09EA2C 7F069EFC AFA30050 */ sw $v1, 0x50($sp) -.L7F069F00: -/* 09EA30 7F069F00 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 09EA34 7F069F04 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09EA38 7F069F08 8FB9005C */ lw $t9, 0x5c($sp) -/* 09EA3C 7F069F0C 8C58089C */ lw $t8, 0x89c($v0) -/* 09EA40 7F069F10 00194880 */ sll $t1, $t9, 2 -/* 09EA44 7F069F14 00495021 */ addu $t2, $v0, $t1 -/* 09EA48 7F069F18 AFB8004C */ sw $t8, 0x4c($sp) -/* 09EA4C 7F069F1C 8D4B1130 */ lw $t3, 0x1130($t2) -/* 09EA50 7F069F20 AFAB0050 */ sw $t3, 0x50($sp) -.L7F069F24: -/* 09EA54 7F069F24 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09EA58 7F069F28 8FA40060 */ lw $a0, 0x60($sp) -/* 09EA5C 7F069F2C 54400023 */ bnezl $v0, .L7F069FBC -/* 09EA60 7F069F30 8FAD0050 */ lw $t5, 0x50($sp) -/* 09EA64 7F069F34 0C001145 */ jal viGetViewLeft -/* 09EA68 7F069F38 00000000 */ nop -/* 09EA6C 7F069F3C 0C001127 */ jal viGetViewWidth -/* 09EA70 7F069F40 A7A2002C */ sh $v0, 0x2c($sp) -/* 09EA74 7F069F44 0C001149 */ jal viGetViewTop -/* 09EA78 7F069F48 A7A2002E */ sh $v0, 0x2e($sp) -/* 09EA7C 7F069F4C 0C00112B */ jal viGetViewHeight -/* 09EA80 7F069F50 A7A20038 */ sh $v0, 0x38($sp) -/* 09EA84 7F069F54 87A8002E */ lh $t0, 0x2e($sp) -/* 09EA88 7F069F58 87AC002C */ lh $t4, 0x2c($sp) -/* 09EA8C 7F069F5C 8FAE0054 */ lw $t6, 0x54($sp) -/* 09EA90 7F069F60 8FB80044 */ lw $t8, 0x44($sp) -/* 09EA94 7F069F64 87A90038 */ lh $t1, 0x38($sp) -/* 09EA98 7F069F68 010C6821 */ addu $t5, $t0, $t4 -/* 09EA9C 7F069F6C 01AE7823 */ subu $t7, $t5, $t6 -/* 09EAA0 7F069F70 00495021 */ addu $t2, $v0, $t1 -/* 09EAA4 7F069F74 254BFFEE */ addiu $t3, $t2, -0x12 -/* 09EAA8 7F069F78 240C0001 */ li $t4, 1 -/* 09EAAC 7F069F7C 24080002 */ li $t0, 2 -/* 09EAB0 7F069F80 AFA80014 */ sw $t0, 0x14($sp) -/* 09EAB4 7F069F84 AFAC0018 */ sw $t4, 0x18($sp) -/* 09EAB8 7F069F88 AFAB0010 */ sw $t3, 0x10($sp) -/* 09EABC 7F069F8C 8FA40068 */ lw $a0, 0x68($sp) -/* 09EAC0 7F069F90 8FA5004C */ lw $a1, 0x4c($sp) -/* 09EAC4 7F069F94 07010003 */ bgez $t8, .L7F069FA4 -/* 09EAC8 7F069F98 0018C843 */ sra $t9, $t8, 1 -/* 09EACC 7F069F9C 27010001 */ addiu $at, $t8, 1 -/* 09EAD0 7F069FA0 0001C843 */ sra $t9, $at, 1 -.L7F069FA4: -/* 09EAD4 7F069FA4 01F93023 */ subu $a2, $t7, $t9 -/* 09EAD8 7F069FA8 24C6FFFC */ addiu $a2, $a2, -4 -/* 09EADC 7F069FAC 0FC1A723 */ jal gunDrawHudInteger -/* 09EAE0 7F069FB0 00003825 */ move $a3, $zero -/* 09EAE4 7F069FB4 AFA20068 */ sw $v0, 0x68($sp) -/* 09EAE8 7F069FB8 8FAD0050 */ lw $t5, 0x50($sp) -.L7F069FBC: -/* 09EAEC 7F069FBC 8FA40060 */ lw $a0, 0x60($sp) -/* 09EAF0 7F069FC0 1DA00005 */ bgtz $t5, .L7F069FD8 -/* 09EAF4 7F069FC4 00000000 */ nop -/* 09EAF8 7F069FC8 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09EAFC 7F069FCC 3C050040 */ lui $a1, 0x40 -/* 09EB00 7F069FD0 10400023 */ beqz $v0, .L7F06A060 -/* 09EB04 7F069FD4 00000000 */ nop -.L7F069FD8: -/* 09EB08 7F069FD8 0C001145 */ jal viGetViewLeft -/* 09EB0C 7F069FDC 00000000 */ nop -/* 09EB10 7F069FE0 0C001127 */ jal viGetViewWidth -/* 09EB14 7F069FE4 A7A2002C */ sh $v0, 0x2c($sp) -/* 09EB18 7F069FE8 0C001149 */ jal viGetViewTop -/* 09EB1C 7F069FEC A7A2002E */ sh $v0, 0x2e($sp) -/* 09EB20 7F069FF0 0C00112B */ jal viGetViewHeight -/* 09EB24 7F069FF4 A7A20038 */ sh $v0, 0x38($sp) -/* 09EB28 7F069FF8 87AE002E */ lh $t6, 0x2e($sp) -/* 09EB2C 7F069FFC 87B8002C */ lh $t8, 0x2c($sp) -/* 09EB30 7F06A000 8FB90054 */ lw $t9, 0x54($sp) -/* 09EB34 7F06A004 8FAA0044 */ lw $t2, 0x44($sp) -/* 09EB38 7F06A008 87AC0038 */ lh $t4, 0x38($sp) -/* 09EB3C 7F06A00C 01D87821 */ addu $t7, $t6, $t8 -/* 09EB40 7F06A010 01F94823 */ subu $t1, $t7, $t9 -/* 09EB44 7F06A014 254B0001 */ addiu $t3, $t2, 1 -/* 09EB48 7F06A018 004C6821 */ addu $t5, $v0, $t4 -/* 09EB4C 7F06A01C 25AEFFEE */ addiu $t6, $t5, -0x12 -/* 09EB50 7F06A020 240F0001 */ li $t7, 1 -/* 09EB54 7F06A024 24180002 */ li $t8, 2 -/* 09EB58 7F06A028 AFB80014 */ sw $t8, 0x14($sp) -/* 09EB5C 7F06A02C AFAF0018 */ sw $t7, 0x18($sp) -/* 09EB60 7F06A030 AFAE0010 */ sw $t6, 0x10($sp) -/* 09EB64 7F06A034 8FA40068 */ lw $a0, 0x68($sp) -/* 09EB68 7F06A038 8FA50050 */ lw $a1, 0x50($sp) -/* 09EB6C 7F06A03C 05610003 */ bgez $t3, .L7F06A04C -/* 09EB70 7F06A040 000B4043 */ sra $t0, $t3, 1 -/* 09EB74 7F06A044 25610001 */ addiu $at, $t3, 1 -/* 09EB78 7F06A048 00014043 */ sra $t0, $at, 1 -.L7F06A04C: -/* 09EB7C 7F06A04C 01283021 */ addu $a2, $t1, $t0 -/* 09EB80 7F06A050 24C60003 */ addiu $a2, $a2, 3 -/* 09EB84 7F06A054 0FC1A723 */ jal gunDrawHudInteger -/* 09EB88 7F06A058 24070001 */ li $a3, 1 -/* 09EB8C 7F06A05C AFA20068 */ sw $v0, 0x68($sp) -.L7F06A060: -/* 09EB90 7F06A060 0FC2B3BC */ jal combiner_bayer_lod_perspective -/* 09EB94 7F06A064 8FA40068 */ lw $a0, 0x68($sp) -/* 09EB98 7F06A068 AFA20068 */ sw $v0, 0x68($sp) -.L7F06A06C: -/* 09EB9C 7F06A06C 8FA40064 */ lw $a0, 0x64($sp) -.L7F06A070: -/* 09EBA0 7F06A070 508000AC */ beql $a0, $zero, .L7F06A324 -/* 09EBA4 7F06A074 8FBF0024 */ lw $ra, 0x24($sp) -/* 09EBA8 7F06A078 0FC1A50B */ jal get_ammo_type_for_weapon -/* 09EBAC 7F06A07C 00000000 */ nop -/* 09EBB0 7F06A080 104000A7 */ beqz $v0, .L7F06A320 -/* 09EBB4 7F06A084 AFA2005C */ sw $v0, 0x5c($sp) -/* 09EBB8 7F06A088 3C198008 */ lui $t9, %hi(g_CurrentPlayer) -/* 09EBBC 7F06A08C 8F39A0B0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 09EBC0 7F06A090 24010006 */ li $at, 6 -/* 09EBC4 7F06A094 8F220C3C */ lw $v0, 0xc3c($t9) -/* 09EBC8 7F06A098 104100A1 */ beq $v0, $at, .L7F06A320 -/* 09EBCC 7F06A09C 24010007 */ li $at, 7 -/* 09EBD0 7F06A0A0 1041009F */ beq $v0, $at, .L7F06A320 -/* 09EBD4 7F06A0A4 8FA40064 */ lw $a0, 0x64($sp) -/* 09EBD8 7F06A0A8 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09EBDC 7F06A0AC 3C050008 */ lui $a1, 8 -/* 09EBE0 7F06A0B0 1440009B */ bnez $v0, .L7F06A320 -/* 09EBE4 7F06A0B4 8FAA005C */ lw $t2, 0x5c($sp) -/* 09EBE8 7F06A0B8 000A5880 */ sll $t3, $t2, 2 -/* 09EBEC 7F06A0BC 016A5823 */ subu $t3, $t3, $t2 -/* 09EBF0 7F06A0C0 3C098003 */ lui $t1, %hi(ammo_related) -/* 09EBF4 7F06A0C4 25295EF0 */ addiu $t1, %lo(ammo_related) # addiu $t1, $t1, 0x5ef0 -/* 09EBF8 7F06A0C8 000B5880 */ sll $t3, $t3, 2 -/* 09EBFC 7F06A0CC 01691821 */ addu $v1, $t3, $t1 -/* 09EC00 7F06A0D0 8C620004 */ lw $v0, 4($v1) -/* 09EC04 7F06A0D4 24080005 */ li $t0, 5 -/* 09EC08 7F06A0D8 AFA8003C */ sw $t0, 0x3c($sp) -/* 09EC0C 7F06A0DC 10400025 */ beqz $v0, .L7F06A174 -/* 09EC10 7F06A0E0 3C0C8009 */ lui $t4, %hi(globalbank_rdram_offset) -/* 09EC14 7F06A0E4 8D8CD0B0 */ lw $t4, %lo(globalbank_rdram_offset)($t4) -/* 09EC18 7F06A0E8 AFA30028 */ sw $v1, 0x28($sp) -/* 09EC1C 7F06A0EC 004C1021 */ addu $v0, $v0, $t4 -/* 09EC20 7F06A0F0 0FC1E131 */ jal getPlayer_c_screenleft -/* 09EC24 7F06A0F4 AFA20040 */ sw $v0, 0x40($sp) -/* 09EC28 7F06A0F8 0C001149 */ jal viGetViewTop -/* 09EC2C 7F06A0FC E7A00034 */ swc1 $f0, 0x34($sp) -/* 09EC30 7F06A100 0C00112B */ jal viGetViewHeight -/* 09EC34 7F06A104 A7A20038 */ sh $v0, 0x38($sp) -/* 09EC38 7F06A108 8FAD0058 */ lw $t5, 0x58($sp) -/* 09EC3C 7F06A10C 87AE0038 */ lh $t6, 0x38($sp) -/* 09EC40 7F06A110 C7B20034 */ lwc1 $f18, 0x34($sp) -/* 09EC44 7F06A114 448D8000 */ mtc1 $t5, $f16 -/* 09EC48 7F06A118 8FAA0028 */ lw $t2, 0x28($sp) -/* 09EC4C 7F06A11C 004EC021 */ addu $t8, $v0, $t6 -/* 09EC50 7F06A120 46808420 */ cvt.s.w $f16, $f16 -/* 09EC54 7F06A124 270FFFEC */ addiu $t7, $t8, -0x14 -/* 09EC58 7F06A128 448F7000 */ mtc1 $t7, $f14 -/* 09EC5C 7F06A12C 24190001 */ li $t9, 1 -/* 09EC60 7F06A130 AFB90014 */ sw $t9, 0x14($sp) -/* 09EC64 7F06A134 468073A0 */ cvt.s.w $f14, $f14 -/* 09EC68 7F06A138 240B0001 */ li $t3, 1 -/* 09EC6C 7F06A13C 8FA40068 */ lw $a0, 0x68($sp) -/* 09EC70 7F06A140 8FA50040 */ lw $a1, 0x40($sp) -/* 09EC74 7F06A144 3C07BF80 */ lui $a3, 0xbf80 -/* 09EC78 7F06A148 46109400 */ add.s $f16, $f18, $f16 -/* 09EC7C 7F06A14C E7AE0010 */ swc1 $f14, 0x10($sp) -/* 09EC80 7F06A150 C54E0008 */ lwc1 $f14, 8($t2) -/* 09EC84 7F06A154 AFAB001C */ sw $t3, 0x1c($sp) -/* 09EC88 7F06A158 44068000 */ mfc1 $a2, $f16 -/* 09EC8C 7F06A15C 0FC1A679 */ jal set_rgba_redirect_generate_microcode -/* 09EC90 7F06A160 E7AE0018 */ swc1 $f14, 0x18($sp) -/* 09EC94 7F06A164 8FA90040 */ lw $t1, 0x40($sp) -/* 09EC98 7F06A168 AFA20068 */ sw $v0, 0x68($sp) -/* 09EC9C 7F06A16C 91280004 */ lbu $t0, 4($t1) -/* 09ECA0 7F06A170 AFA8003C */ sw $t0, 0x3c($sp) -.L7F06A174: -/* 09ECA4 7F06A174 0FC2B366 */ jal microcode_constructor -/* 09ECA8 7F06A178 8FA40068 */ lw $a0, 0x68($sp) -/* 09ECAC 7F06A17C AFA20068 */ sw $v0, 0x68($sp) -/* 09ECB0 7F06A180 8FA40064 */ lw $a0, 0x64($sp) -/* 09ECB4 7F06A184 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09ECB8 7F06A188 3C050040 */ lui $a1, 0x40 -/* 09ECBC 7F06A18C 10400011 */ beqz $v0, .L7F06A1D4 -/* 09ECC0 7F06A190 3C050040 */ lui $a1, 0x40 -/* 09ECC4 7F06A194 8FAD005C */ lw $t5, 0x5c($sp) -/* 09ECC8 7F06A198 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 09ECCC 7F06A19C 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09ECD0 7F06A1A0 AFA0004C */ sw $zero, 0x4c($sp) -/* 09ECD4 7F06A1A4 000D7080 */ sll $t6, $t5, 2 -/* 09ECD8 7F06A1A8 8FB90064 */ lw $t9, 0x64($sp) -/* 09ECDC 7F06A1AC 8FAA0060 */ lw $t2, 0x60($sp) -/* 09ECE0 7F06A1B0 004EC021 */ addu $t8, $v0, $t6 -/* 09ECE4 7F06A1B4 8F0F1130 */ lw $t7, 0x1130($t8) -/* 09ECE8 7F06A1B8 8C4C0C44 */ lw $t4, 0xc44($v0) -/* 09ECEC 7F06A1BC 172A0003 */ bne $t9, $t2, .L7F06A1CC -/* 09ECF0 7F06A1C0 018F1821 */ addu $v1, $t4, $t7 -/* 09ECF4 7F06A1C4 8C4B089C */ lw $t3, 0x89c($v0) -/* 09ECF8 7F06A1C8 006B1821 */ addu $v1, $v1, $t3 -.L7F06A1CC: -/* 09ECFC 7F06A1CC 1000000A */ b .L7F06A1F8 -/* 09ED00 7F06A1D0 AFA30050 */ sw $v1, 0x50($sp) -.L7F06A1D4: -/* 09ED04 7F06A1D4 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 09ED08 7F06A1D8 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09ED0C 7F06A1DC 8FA8005C */ lw $t0, 0x5c($sp) -/* 09ED10 7F06A1E0 8C490C44 */ lw $t1, 0xc44($v0) -/* 09ED14 7F06A1E4 00086880 */ sll $t5, $t0, 2 -/* 09ED18 7F06A1E8 004D7021 */ addu $t6, $v0, $t5 -/* 09ED1C 7F06A1EC AFA9004C */ sw $t1, 0x4c($sp) -/* 09ED20 7F06A1F0 8DD81130 */ lw $t8, 0x1130($t6) -/* 09ED24 7F06A1F4 AFB80050 */ sw $t8, 0x50($sp) -.L7F06A1F8: -/* 09ED28 7F06A1F8 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09ED2C 7F06A1FC 8FA40064 */ lw $a0, 0x64($sp) -/* 09ED30 7F06A200 5440001F */ bnezl $v0, .L7F06A280 -/* 09ED34 7F06A204 8FAC0050 */ lw $t4, 0x50($sp) -/* 09ED38 7F06A208 0C001145 */ jal viGetViewLeft -/* 09ED3C 7F06A20C 00000000 */ nop -/* 09ED40 7F06A210 0C001149 */ jal viGetViewTop -/* 09ED44 7F06A214 A7A2002E */ sh $v0, 0x2e($sp) -/* 09ED48 7F06A218 0C00112B */ jal viGetViewHeight -/* 09ED4C 7F06A21C A7A20038 */ sh $v0, 0x38($sp) -/* 09ED50 7F06A220 87AC002E */ lh $t4, 0x2e($sp) -/* 09ED54 7F06A224 8FAF0058 */ lw $t7, 0x58($sp) -/* 09ED58 7F06A228 8FAA003C */ lw $t2, 0x3c($sp) -/* 09ED5C 7F06A22C 87A90038 */ lh $t1, 0x38($sp) -/* 09ED60 7F06A230 018FC821 */ addu $t9, $t4, $t7 -/* 09ED64 7F06A234 240E0002 */ li $t6, 2 -/* 09ED68 7F06A238 00494021 */ addu $t0, $v0, $t1 -/* 09ED6C 7F06A23C 250DFFEE */ addiu $t5, $t0, -0x12 -/* 09ED70 7F06A240 24180001 */ li $t8, 1 -/* 09ED74 7F06A244 AFB80018 */ sw $t8, 0x18($sp) -/* 09ED78 7F06A248 AFAD0010 */ sw $t5, 0x10($sp) -/* 09ED7C 7F06A24C AFAE0014 */ sw $t6, 0x14($sp) -/* 09ED80 7F06A250 8FA40068 */ lw $a0, 0x68($sp) -/* 09ED84 7F06A254 8FA5004C */ lw $a1, 0x4c($sp) -/* 09ED88 7F06A258 05410003 */ bgez $t2, .L7F06A268 -/* 09ED8C 7F06A25C 000A5843 */ sra $t3, $t2, 1 -/* 09ED90 7F06A260 25410001 */ addiu $at, $t2, 1 -/* 09ED94 7F06A264 00015843 */ sra $t3, $at, 1 -.L7F06A268: -/* 09ED98 7F06A268 032B3021 */ addu $a2, $t9, $t3 -/* 09ED9C 7F06A26C 24C60003 */ addiu $a2, $a2, 3 -/* 09EDA0 7F06A270 0FC1A723 */ jal gunDrawHudInteger -/* 09EDA4 7F06A274 24070001 */ li $a3, 1 -/* 09EDA8 7F06A278 AFA20068 */ sw $v0, 0x68($sp) -/* 09EDAC 7F06A27C 8FAC0050 */ lw $t4, 0x50($sp) -.L7F06A280: -/* 09EDB0 7F06A280 8FA40064 */ lw $a0, 0x64($sp) -/* 09EDB4 7F06A284 1D800005 */ bgtz $t4, .L7F06A29C -/* 09EDB8 7F06A288 00000000 */ nop -/* 09EDBC 7F06A28C 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09EDC0 7F06A290 3C050040 */ lui $a1, 0x40 -/* 09EDC4 7F06A294 1040001F */ beqz $v0, .L7F06A314 -/* 09EDC8 7F06A298 00000000 */ nop -.L7F06A29C: -/* 09EDCC 7F06A29C 0C001145 */ jal viGetViewLeft -/* 09EDD0 7F06A2A0 00000000 */ nop -/* 09EDD4 7F06A2A4 0C001149 */ jal viGetViewTop -/* 09EDD8 7F06A2A8 A7A2002E */ sh $v0, 0x2e($sp) -/* 09EDDC 7F06A2AC 0C00112B */ jal viGetViewHeight -/* 09EDE0 7F06A2B0 A7A20038 */ sh $v0, 0x38($sp) -/* 09EDE4 7F06A2B4 87AF002E */ lh $t7, 0x2e($sp) -/* 09EDE8 7F06A2B8 8FAA0058 */ lw $t2, 0x58($sp) -/* 09EDEC 7F06A2BC 8FAB003C */ lw $t3, 0x3c($sp) -/* 09EDF0 7F06A2C0 87AD0038 */ lh $t5, 0x38($sp) -/* 09EDF4 7F06A2C4 01EAC821 */ addu $t9, $t7, $t2 -/* 09EDF8 7F06A2C8 25690001 */ addiu $t1, $t3, 1 -/* 09EDFC 7F06A2CC 004D7021 */ addu $t6, $v0, $t5 -/* 09EE00 7F06A2D0 25D8FFEE */ addiu $t8, $t6, -0x12 -/* 09EE04 7F06A2D4 240F0001 */ li $t7, 1 -/* 09EE08 7F06A2D8 240C0002 */ li $t4, 2 -/* 09EE0C 7F06A2DC AFAC0014 */ sw $t4, 0x14($sp) -/* 09EE10 7F06A2E0 AFAF0018 */ sw $t7, 0x18($sp) -/* 09EE14 7F06A2E4 AFB80010 */ sw $t8, 0x10($sp) -/* 09EE18 7F06A2E8 8FA40068 */ lw $a0, 0x68($sp) -/* 09EE1C 7F06A2EC 8FA50050 */ lw $a1, 0x50($sp) -/* 09EE20 7F06A2F0 05210003 */ bgez $t1, .L7F06A300 -/* 09EE24 7F06A2F4 00094043 */ sra $t0, $t1, 1 -/* 09EE28 7F06A2F8 25210001 */ addiu $at, $t1, 1 -/* 09EE2C 7F06A2FC 00014043 */ sra $t0, $at, 1 -.L7F06A300: -/* 09EE30 7F06A300 03283023 */ subu $a2, $t9, $t0 -/* 09EE34 7F06A304 24C6FFFC */ addiu $a2, $a2, -4 -/* 09EE38 7F06A308 0FC1A723 */ jal gunDrawHudInteger -/* 09EE3C 7F06A30C 00003825 */ move $a3, $zero -/* 09EE40 7F06A310 AFA20068 */ sw $v0, 0x68($sp) -.L7F06A314: -/* 09EE44 7F06A314 0FC2B3BC */ jal combiner_bayer_lod_perspective -/* 09EE48 7F06A318 8FA40068 */ lw $a0, 0x68($sp) -/* 09EE4C 7F06A31C AFA20068 */ sw $v0, 0x68($sp) -.L7F06A320: -/* 09EE50 7F06A320 8FBF0024 */ lw $ra, 0x24($sp) -.L7F06A324: -/* 09EE54 7F06A324 8FA20068 */ lw $v0, 0x68($sp) -/* 09EE58 7F06A328 27BD0068 */ addiu $sp, $sp, 0x68 -/* 09EE5C 7F06A32C 03E00008 */ jr $ra -/* 09EE60 7F06A330 00000000 */ nop -) -#endif - -#if defined(VERSION_EU) -GLOBAL_ASM( -.text -glabel generate_ammo_total_microcode -/* 09CE78 7F06A488 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 09CE7C 7F06A48C 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09CE80 7F06A490 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 09CE84 7F06A494 AFBF0024 */ sw $ra, 0x24($sp) -/* 09CE88 7F06A498 AFA40068 */ sw $a0, 0x68($sp) -/* 09CE8C 7F06A49C 8C4E105C */ lw $t6, 0x105c($v0) -/* 09CE90 7F06A4A0 55C00185 */ bnezl $t6, .L7F06AAB8 -/* 09CE94 7F06A4A4 8FBF0024 */ lw $ra, 0x24($sp) -/* 09CE98 7F06A4A8 8C4F29BC */ lw $t7, 0x29bc($v0) -/* 09CE9C 7F06A4AC 55E00182 */ bnezl $t7, .L7F06AAB8 -/* 09CEA0 7F06A4B0 8FBF0024 */ lw $ra, 0x24($sp) -/* 09CEA4 7F06A4B4 0FC177A2 */ jal getCurrentPlayerWeaponId -/* 09CEA8 7F06A4B8 24040001 */ li $a0, 1 -/* 09CEAC 7F06A4BC AFA20064 */ sw $v0, 0x64($sp) -/* 09CEB0 7F06A4C0 0FC177A2 */ jal getCurrentPlayerWeaponId -/* 09CEB4 7F06A4C4 00002025 */ move $a0, $zero -/* 09CEB8 7F06A4C8 0FC26669 */ jal getPlayerCount -/* 09CEBC 7F06A4CC AFA20060 */ sw $v0, 0x60($sp) -/* 09CEC0 7F06A4D0 28410003 */ slti $at, $v0, 3 -/* 09CEC4 7F06A4D4 10200005 */ beqz $at, .L7F06A4EC -/* 09CEC8 7F06A4D8 2418003B */ li $t8, 59 -/* 09CECC 7F06A4DC 2419003B */ li $t9, 59 -/* 09CED0 7F06A4E0 AFB80058 */ sw $t8, 0x58($sp) -/* 09CED4 7F06A4E4 1000000E */ b .L7F06A520 -/* 09CED8 7F06A4E8 AFB90054 */ sw $t9, 0x54($sp) -.L7F06A4EC: -/* 09CEDC 7F06A4EC 0FC269A4 */ jal get_cur_playernum -/* 09CEE0 7F06A4F0 00000000 */ nop -/* 09CEE4 7F06A4F4 30480001 */ andi $t0, $v0, 1 -/* 09CEE8 7F06A4F8 11000006 */ beqz $t0, .L7F06A514 -/* 09CEEC 7F06A4FC 240B003B */ li $t3, 59 -/* 09CEF0 7F06A500 2409002B */ li $t1, 43 -/* 09CEF4 7F06A504 240A007F */ li $t2, 127 -/* 09CEF8 7F06A508 AFA90058 */ sw $t1, 0x58($sp) -/* 09CEFC 7F06A50C 10000004 */ b .L7F06A520 -/* 09CF00 7F06A510 AFAA0054 */ sw $t2, 0x54($sp) -.L7F06A514: -/* 09CF04 7F06A514 240C006D */ li $t4, 109 -/* 09CF08 7F06A518 AFAB0058 */ sw $t3, 0x58($sp) -/* 09CF0C 7F06A51C AFAC0054 */ sw $t4, 0x54($sp) -.L7F06A520: -/* 09CF10 7F06A520 8FAD0060 */ lw $t5, 0x60($sp) -/* 09CF14 7F06A524 51A000B7 */ beql $t5, $zero, .L7F06A804 -/* 09CF18 7F06A528 8FA40064 */ lw $a0, 0x64($sp) -/* 09CF1C 7F06A52C 0FC1A6F0 */ jal get_ammo_type_for_weapon -/* 09CF20 7F06A530 01A02025 */ move $a0, $t5 -/* 09CF24 7F06A534 104000B2 */ beqz $v0, .L7F06A800 -/* 09CF28 7F06A538 AFA2005C */ sw $v0, 0x5c($sp) -/* 09CF2C 7F06A53C 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 09CF30 7F06A540 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 09CF34 7F06A544 24010006 */ li $at, 6 -/* 09CF38 7F06A548 8DC2088C */ lw $v0, 0x88c($t6) -/* 09CF3C 7F06A54C 104100AC */ beq $v0, $at, .L7F06A800 -/* 09CF40 7F06A550 24010007 */ li $at, 7 -/* 09CF44 7F06A554 104100AA */ beq $v0, $at, .L7F06A800 -/* 09CF48 7F06A558 8FA40060 */ lw $a0, 0x60($sp) -/* 09CF4C 7F06A55C 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09CF50 7F06A560 3C050008 */ lui $a1, 8 -/* 09CF54 7F06A564 144000A6 */ bnez $v0, .L7F06A800 -/* 09CF58 7F06A568 8FAF005C */ lw $t7, 0x5c($sp) -/* 09CF5C 7F06A56C 000FC080 */ sll $t8, $t7, 2 -/* 09CF60 7F06A570 030FC023 */ subu $t8, $t8, $t7 -/* 09CF64 7F06A574 3C198003 */ lui $t9, %hi(ammo_related) # $t9, 0x8003 -/* 09CF68 7F06A578 27391440 */ addiu $t9, %lo(ammo_related) # addiu $t9, $t9, 0x1440 -/* 09CF6C 7F06A57C 0018C080 */ sll $t8, $t8, 2 -/* 09CF70 7F06A580 03191821 */ addu $v1, $t8, $t9 -/* 09CF74 7F06A584 8C620004 */ lw $v0, 4($v1) -/* 09CF78 7F06A588 24080005 */ li $t0, 5 -/* 09CF7C 7F06A58C AFA80044 */ sw $t0, 0x44($sp) -/* 09CF80 7F06A590 10400028 */ beqz $v0, .L7F06A634 -/* 09CF84 7F06A594 3C098007 */ lui $t1, %hi(globalbank_rdram_offset) # $t1, 0x8007 -/* 09CF88 7F06A598 8D294490 */ lw $t1, %lo(globalbank_rdram_offset)($t1) -/* 09CF8C 7F06A59C AFA30028 */ sw $v1, 0x28($sp) -/* 09CF90 7F06A5A0 00491021 */ addu $v0, $v0, $t1 -/* 09CF94 7F06A5A4 0FC1E151 */ jal getPlayer_c_screenleft -/* 09CF98 7F06A5A8 AFA20048 */ sw $v0, 0x48($sp) -/* 09CF9C 7F06A5AC 0FC1E149 */ jal getPlayer_c_screenwidth -/* 09CFA0 7F06A5B0 E7A00030 */ swc1 $f0, 0x30($sp) -/* 09CFA4 7F06A5B4 0C000FDD */ jal viGetViewTop -/* 09CFA8 7F06A5B8 E7A00034 */ swc1 $f0, 0x34($sp) -/* 09CFAC 7F06A5BC 0C000FBF */ jal viGetViewHeight -/* 09CFB0 7F06A5C0 A7A20038 */ sh $v0, 0x38($sp) -/* 09CFB4 7F06A5C4 8FAA0054 */ lw $t2, 0x54($sp) -/* 09CFB8 7F06A5C8 87AB0038 */ lh $t3, 0x38($sp) -/* 09CFBC 7F06A5CC C7A40034 */ lwc1 $f4, 0x34($sp) -/* 09CFC0 7F06A5D0 C7A60030 */ lwc1 $f6, 0x30($sp) -/* 09CFC4 7F06A5D4 448A5000 */ mtc1 $t2, $f10 -/* 09CFC8 7F06A5D8 004B6021 */ addu $t4, $v0, $t3 -/* 09CFCC 7F06A5DC 46062200 */ add.s $f8, $f4, $f6 -/* 09CFD0 7F06A5E0 258DFFE2 */ addiu $t5, $t4, -0x1e -/* 09CFD4 7F06A5E4 448D2000 */ mtc1 $t5, $f4 -/* 09CFD8 7F06A5E8 46805420 */ cvt.s.w $f16, $f10 -/* 09CFDC 7F06A5EC 8FAE0028 */ lw $t6, 0x28($sp) -/* 09CFE0 7F06A5F0 AFA00014 */ sw $zero, 0x14($sp) -/* 09CFE4 7F06A5F4 240F0001 */ li $t7, 1 -/* 09CFE8 7F06A5F8 8FA40068 */ lw $a0, 0x68($sp) -/* 09CFEC 7F06A5FC 468021A0 */ cvt.s.w $f6, $f4 -/* 09CFF0 7F06A600 8FA50048 */ lw $a1, 0x48($sp) -/* 09CFF4 7F06A604 3C07BF80 */ lui $a3, 0xbf80 -/* 09CFF8 7F06A608 46104481 */ sub.s $f18, $f8, $f16 -/* 09CFFC 7F06A60C E7A60010 */ swc1 $f6, 0x10($sp) -/* 09D000 7F06A610 C5CA0008 */ lwc1 $f10, 8($t6) -/* 09D004 7F06A614 AFAF001C */ sw $t7, 0x1c($sp) -/* 09D008 7F06A618 44069000 */ mfc1 $a2, $f18 -/* 09D00C 7F06A61C 0FC1A85E */ jal set_rgba_redirect_generate_microcode -/* 09D010 7F06A620 E7AA0018 */ swc1 $f10, 0x18($sp) -/* 09D014 7F06A624 8FB80048 */ lw $t8, 0x48($sp) -/* 09D018 7F06A628 AFA20068 */ sw $v0, 0x68($sp) -/* 09D01C 7F06A62C 93190004 */ lbu $t9, 4($t8) -/* 09D020 7F06A630 AFB90044 */ sw $t9, 0x44($sp) -.L7F06A634: -/* 09D024 7F06A634 0FC2B016 */ jal microcode_constructor -/* 09D028 7F06A638 8FA40068 */ lw $a0, 0x68($sp) -/* 09D02C 7F06A63C AFA20068 */ sw $v0, 0x68($sp) -/* 09D030 7F06A640 8FA40060 */ lw $a0, 0x60($sp) -/* 09D034 7F06A644 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09D038 7F06A648 3C050040 */ lui $a1, 0x40 -/* 09D03C 7F06A64C 10400011 */ beqz $v0, .L7F06A694 -/* 09D040 7F06A650 3C050040 */ lui $a1, 0x40 -/* 09D044 7F06A654 8FA9005C */ lw $t1, 0x5c($sp) -/* 09D048 7F06A658 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 09D04C 7F06A65C 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09D050 7F06A660 AFA0004C */ sw $zero, 0x4c($sp) -/* 09D054 7F06A664 00095080 */ sll $t2, $t1, 2 -/* 09D058 7F06A668 8FAD0064 */ lw $t5, 0x64($sp) -/* 09D05C 7F06A66C 8FAE0060 */ lw $t6, 0x60($sp) -/* 09D060 7F06A670 004A5821 */ addu $t3, $v0, $t2 -/* 09D064 7F06A674 8D6C1128 */ lw $t4, 0x1128($t3) -/* 09D068 7F06A678 8C480894 */ lw $t0, 0x894($v0) -/* 09D06C 7F06A67C 15AE0003 */ bne $t5, $t6, .L7F06A68C -/* 09D070 7F06A680 010C1821 */ addu $v1, $t0, $t4 -/* 09D074 7F06A684 8C4F0C3C */ lw $t7, 0xc3c($v0) -/* 09D078 7F06A688 006F1821 */ addu $v1, $v1, $t7 -.L7F06A68C: -/* 09D07C 7F06A68C 1000000A */ b .L7F06A6B8 -/* 09D080 7F06A690 AFA30050 */ sw $v1, 0x50($sp) -.L7F06A694: -/* 09D084 7F06A694 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 09D088 7F06A698 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09D08C 7F06A69C 8FB9005C */ lw $t9, 0x5c($sp) -/* 09D090 7F06A6A0 8C580894 */ lw $t8, 0x894($v0) -/* 09D094 7F06A6A4 00194880 */ sll $t1, $t9, 2 -/* 09D098 7F06A6A8 00495021 */ addu $t2, $v0, $t1 -/* 09D09C 7F06A6AC AFB8004C */ sw $t8, 0x4c($sp) -/* 09D0A0 7F06A6B0 8D4B1128 */ lw $t3, 0x1128($t2) -/* 09D0A4 7F06A6B4 AFAB0050 */ sw $t3, 0x50($sp) -.L7F06A6B8: -/* 09D0A8 7F06A6B8 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09D0AC 7F06A6BC 8FA40060 */ lw $a0, 0x60($sp) -/* 09D0B0 7F06A6C0 54400023 */ bnezl $v0, .L7F06A750 -/* 09D0B4 7F06A6C4 8FAD0050 */ lw $t5, 0x50($sp) -/* 09D0B8 7F06A6C8 0C000FD9 */ jal viGetViewLeft -/* 09D0BC 7F06A6CC 00000000 */ nop -/* 09D0C0 7F06A6D0 0C000FBB */ jal viGetViewWidth -/* 09D0C4 7F06A6D4 A7A2002C */ sh $v0, 0x2c($sp) -/* 09D0C8 7F06A6D8 0C000FDD */ jal viGetViewTop -/* 09D0CC 7F06A6DC A7A2002E */ sh $v0, 0x2e($sp) -/* 09D0D0 7F06A6E0 0C000FBF */ jal viGetViewHeight -/* 09D0D4 7F06A6E4 A7A20038 */ sh $v0, 0x38($sp) -/* 09D0D8 7F06A6E8 87A8002E */ lh $t0, 0x2e($sp) -/* 09D0DC 7F06A6EC 87AC002C */ lh $t4, 0x2c($sp) -/* 09D0E0 7F06A6F0 8FAE0054 */ lw $t6, 0x54($sp) -/* 09D0E4 7F06A6F4 8FB80044 */ lw $t8, 0x44($sp) -/* 09D0E8 7F06A6F8 87A90038 */ lh $t1, 0x38($sp) -/* 09D0EC 7F06A6FC 010C6821 */ addu $t5, $t0, $t4 -/* 09D0F0 7F06A700 01AE7823 */ subu $t7, $t5, $t6 -/* 09D0F4 7F06A704 00495021 */ addu $t2, $v0, $t1 -/* 09D0F8 7F06A708 254BFFE4 */ addiu $t3, $t2, -0x1c -/* 09D0FC 7F06A70C 240C0001 */ li $t4, 1 -/* 09D100 7F06A710 24080002 */ li $t0, 2 -/* 09D104 7F06A714 AFA80014 */ sw $t0, 0x14($sp) -/* 09D108 7F06A718 AFAC0018 */ sw $t4, 0x18($sp) -/* 09D10C 7F06A71C AFAB0010 */ sw $t3, 0x10($sp) -/* 09D110 7F06A720 8FA40068 */ lw $a0, 0x68($sp) -/* 09D114 7F06A724 8FA5004C */ lw $a1, 0x4c($sp) -/* 09D118 7F06A728 07010003 */ bgez $t8, .L7F06A738 -/* 09D11C 7F06A72C 0018C843 */ sra $t9, $t8, 1 -/* 09D120 7F06A730 27010001 */ addiu $at, $t8, 1 -/* 09D124 7F06A734 0001C843 */ sra $t9, $at, 1 -.L7F06A738: -/* 09D128 7F06A738 01F93023 */ subu $a2, $t7, $t9 -/* 09D12C 7F06A73C 24C6FFFC */ addiu $a2, $a2, -4 -/* 09D130 7F06A740 0FC1A908 */ jal gunDrawHudInteger -/* 09D134 7F06A744 00003825 */ move $a3, $zero -/* 09D138 7F06A748 AFA20068 */ sw $v0, 0x68($sp) -/* 09D13C 7F06A74C 8FAD0050 */ lw $t5, 0x50($sp) -.L7F06A750: -/* 09D140 7F06A750 8FA40060 */ lw $a0, 0x60($sp) -/* 09D144 7F06A754 1DA00005 */ bgtz $t5, .L7F06A76C -/* 09D148 7F06A758 00000000 */ nop -/* 09D14C 7F06A75C 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09D150 7F06A760 3C050040 */ lui $a1, 0x40 -/* 09D154 7F06A764 10400023 */ beqz $v0, .L7F06A7F4 -/* 09D158 7F06A768 00000000 */ nop -.L7F06A76C: -/* 09D15C 7F06A76C 0C000FD9 */ jal viGetViewLeft -/* 09D160 7F06A770 00000000 */ nop -/* 09D164 7F06A774 0C000FBB */ jal viGetViewWidth -/* 09D168 7F06A778 A7A2002C */ sh $v0, 0x2c($sp) -/* 09D16C 7F06A77C 0C000FDD */ jal viGetViewTop -/* 09D170 7F06A780 A7A2002E */ sh $v0, 0x2e($sp) -/* 09D174 7F06A784 0C000FBF */ jal viGetViewHeight -/* 09D178 7F06A788 A7A20038 */ sh $v0, 0x38($sp) -/* 09D17C 7F06A78C 87AE002E */ lh $t6, 0x2e($sp) -/* 09D180 7F06A790 87B8002C */ lh $t8, 0x2c($sp) -/* 09D184 7F06A794 8FB90054 */ lw $t9, 0x54($sp) -/* 09D188 7F06A798 8FAA0044 */ lw $t2, 0x44($sp) -/* 09D18C 7F06A79C 87AC0038 */ lh $t4, 0x38($sp) -/* 09D190 7F06A7A0 01D87821 */ addu $t7, $t6, $t8 -/* 09D194 7F06A7A4 01F94823 */ subu $t1, $t7, $t9 -/* 09D198 7F06A7A8 254B0001 */ addiu $t3, $t2, 1 -/* 09D19C 7F06A7AC 004C6821 */ addu $t5, $v0, $t4 -/* 09D1A0 7F06A7B0 25AEFFE4 */ addiu $t6, $t5, -0x1c -/* 09D1A4 7F06A7B4 240F0001 */ li $t7, 1 -/* 09D1A8 7F06A7B8 24180002 */ li $t8, 2 -/* 09D1AC 7F06A7BC AFB80014 */ sw $t8, 0x14($sp) -/* 09D1B0 7F06A7C0 AFAF0018 */ sw $t7, 0x18($sp) -/* 09D1B4 7F06A7C4 AFAE0010 */ sw $t6, 0x10($sp) -/* 09D1B8 7F06A7C8 8FA40068 */ lw $a0, 0x68($sp) -/* 09D1BC 7F06A7CC 8FA50050 */ lw $a1, 0x50($sp) -/* 09D1C0 7F06A7D0 05610003 */ bgez $t3, .L7F06A7E0 -/* 09D1C4 7F06A7D4 000B4043 */ sra $t0, $t3, 1 -/* 09D1C8 7F06A7D8 25610001 */ addiu $at, $t3, 1 -/* 09D1CC 7F06A7DC 00014043 */ sra $t0, $at, 1 -.L7F06A7E0: -/* 09D1D0 7F06A7E0 01283021 */ addu $a2, $t1, $t0 -/* 09D1D4 7F06A7E4 24C60003 */ addiu $a2, $a2, 3 -/* 09D1D8 7F06A7E8 0FC1A908 */ jal gunDrawHudInteger -/* 09D1DC 7F06A7EC 24070001 */ li $a3, 1 -/* 09D1E0 7F06A7F0 AFA20068 */ sw $v0, 0x68($sp) -.L7F06A7F4: -/* 09D1E4 7F06A7F4 0FC2B06C */ jal combiner_bayer_lod_perspective -/* 09D1E8 7F06A7F8 8FA40068 */ lw $a0, 0x68($sp) -/* 09D1EC 7F06A7FC AFA20068 */ sw $v0, 0x68($sp) -.L7F06A800: -/* 09D1F0 7F06A800 8FA40064 */ lw $a0, 0x64($sp) -.L7F06A804: -/* 09D1F4 7F06A804 508000AC */ beql $a0, $zero, .L7F06AAB8 -/* 09D1F8 7F06A808 8FBF0024 */ lw $ra, 0x24($sp) -/* 09D1FC 7F06A80C 0FC1A6F0 */ jal get_ammo_type_for_weapon -/* 09D200 7F06A810 00000000 */ nop -/* 09D204 7F06A814 104000A7 */ beqz $v0, .L7F06AAB4 -/* 09D208 7F06A818 AFA2005C */ sw $v0, 0x5c($sp) -/* 09D20C 7F06A81C 3C198007 */ lui $t9, %hi(g_CurrentPlayer) # $t9, 0x8007 -/* 09D210 7F06A820 8F398BC0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 09D214 7F06A824 24010006 */ li $at, 6 -/* 09D218 7F06A828 8F220C34 */ lw $v0, 0xc34($t9) -/* 09D21C 7F06A82C 104100A1 */ beq $v0, $at, .L7F06AAB4 -/* 09D220 7F06A830 24010007 */ li $at, 7 -/* 09D224 7F06A834 1041009F */ beq $v0, $at, .L7F06AAB4 -/* 09D228 7F06A838 8FA40064 */ lw $a0, 0x64($sp) -/* 09D22C 7F06A83C 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09D230 7F06A840 3C050008 */ lui $a1, 8 -/* 09D234 7F06A844 1440009B */ bnez $v0, .L7F06AAB4 -/* 09D238 7F06A848 8FAA005C */ lw $t2, 0x5c($sp) -/* 09D23C 7F06A84C 000A5880 */ sll $t3, $t2, 2 -/* 09D240 7F06A850 016A5823 */ subu $t3, $t3, $t2 -/* 09D244 7F06A854 3C098003 */ lui $t1, %hi(ammo_related) # $t1, 0x8003 -/* 09D248 7F06A858 25291440 */ addiu $t1, %lo(ammo_related) # addiu $t1, $t1, 0x1440 -/* 09D24C 7F06A85C 000B5880 */ sll $t3, $t3, 2 -/* 09D250 7F06A860 01691821 */ addu $v1, $t3, $t1 -/* 09D254 7F06A864 8C620004 */ lw $v0, 4($v1) -/* 09D258 7F06A868 24080005 */ li $t0, 5 -/* 09D25C 7F06A86C AFA8003C */ sw $t0, 0x3c($sp) -/* 09D260 7F06A870 10400025 */ beqz $v0, .L7F06A908 -/* 09D264 7F06A874 3C0C8007 */ lui $t4, %hi(globalbank_rdram_offset) # $t4, 0x8007 -/* 09D268 7F06A878 8D8C4490 */ lw $t4, %lo(globalbank_rdram_offset)($t4) -/* 09D26C 7F06A87C AFA30028 */ sw $v1, 0x28($sp) -/* 09D270 7F06A880 004C1021 */ addu $v0, $v0, $t4 -/* 09D274 7F06A884 0FC1E151 */ jal getPlayer_c_screenleft -/* 09D278 7F06A888 AFA20040 */ sw $v0, 0x40($sp) -/* 09D27C 7F06A88C 0C000FDD */ jal viGetViewTop -/* 09D280 7F06A890 E7A00034 */ swc1 $f0, 0x34($sp) -/* 09D284 7F06A894 0C000FBF */ jal viGetViewHeight -/* 09D288 7F06A898 A7A20038 */ sh $v0, 0x38($sp) -/* 09D28C 7F06A89C 8FAD0058 */ lw $t5, 0x58($sp) -/* 09D290 7F06A8A0 87AE0038 */ lh $t6, 0x38($sp) -/* 09D294 7F06A8A4 C7B20034 */ lwc1 $f18, 0x34($sp) -/* 09D298 7F06A8A8 448D8000 */ mtc1 $t5, $f16 -/* 09D29C 7F06A8AC 8FAA0028 */ lw $t2, 0x28($sp) -/* 09D2A0 7F06A8B0 004EC021 */ addu $t8, $v0, $t6 -/* 09D2A4 7F06A8B4 46808420 */ cvt.s.w $f16, $f16 -/* 09D2A8 7F06A8B8 270FFFE2 */ addiu $t7, $t8, -0x1e -/* 09D2AC 7F06A8BC 448F7000 */ mtc1 $t7, $f14 -/* 09D2B0 7F06A8C0 24190001 */ li $t9, 1 -/* 09D2B4 7F06A8C4 AFB90014 */ sw $t9, 0x14($sp) -/* 09D2B8 7F06A8C8 468073A0 */ cvt.s.w $f14, $f14 -/* 09D2BC 7F06A8CC 240B0001 */ li $t3, 1 -/* 09D2C0 7F06A8D0 8FA40068 */ lw $a0, 0x68($sp) -/* 09D2C4 7F06A8D4 8FA50040 */ lw $a1, 0x40($sp) -/* 09D2C8 7F06A8D8 3C07BF80 */ lui $a3, 0xbf80 -/* 09D2CC 7F06A8DC 46109400 */ add.s $f16, $f18, $f16 -/* 09D2D0 7F06A8E0 E7AE0010 */ swc1 $f14, 0x10($sp) -/* 09D2D4 7F06A8E4 C54E0008 */ lwc1 $f14, 8($t2) -/* 09D2D8 7F06A8E8 AFAB001C */ sw $t3, 0x1c($sp) -/* 09D2DC 7F06A8EC 44068000 */ mfc1 $a2, $f16 -/* 09D2E0 7F06A8F0 0FC1A85E */ jal set_rgba_redirect_generate_microcode -/* 09D2E4 7F06A8F4 E7AE0018 */ swc1 $f14, 0x18($sp) -/* 09D2E8 7F06A8F8 8FA90040 */ lw $t1, 0x40($sp) -/* 09D2EC 7F06A8FC AFA20068 */ sw $v0, 0x68($sp) -/* 09D2F0 7F06A900 91280004 */ lbu $t0, 4($t1) -/* 09D2F4 7F06A904 AFA8003C */ sw $t0, 0x3c($sp) -.L7F06A908: -/* 09D2F8 7F06A908 0FC2B016 */ jal microcode_constructor -/* 09D2FC 7F06A90C 8FA40068 */ lw $a0, 0x68($sp) -/* 09D300 7F06A910 AFA20068 */ sw $v0, 0x68($sp) -/* 09D304 7F06A914 8FA40064 */ lw $a0, 0x64($sp) -/* 09D308 7F06A918 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09D30C 7F06A91C 3C050040 */ lui $a1, 0x40 -/* 09D310 7F06A920 10400011 */ beqz $v0, .L7F06A968 -/* 09D314 7F06A924 3C050040 */ lui $a1, 0x40 -/* 09D318 7F06A928 8FAD005C */ lw $t5, 0x5c($sp) -/* 09D31C 7F06A92C 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 09D320 7F06A930 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09D324 7F06A934 AFA0004C */ sw $zero, 0x4c($sp) -/* 09D328 7F06A938 000D7080 */ sll $t6, $t5, 2 -/* 09D32C 7F06A93C 8FB90064 */ lw $t9, 0x64($sp) -/* 09D330 7F06A940 8FAA0060 */ lw $t2, 0x60($sp) -/* 09D334 7F06A944 004EC021 */ addu $t8, $v0, $t6 -/* 09D338 7F06A948 8F0F1128 */ lw $t7, 0x1128($t8) -/* 09D33C 7F06A94C 8C4C0C3C */ lw $t4, 0xc3c($v0) -/* 09D340 7F06A950 172A0003 */ bne $t9, $t2, .L7F06A960 -/* 09D344 7F06A954 018F1821 */ addu $v1, $t4, $t7 -/* 09D348 7F06A958 8C4B0894 */ lw $t3, 0x894($v0) -/* 09D34C 7F06A95C 006B1821 */ addu $v1, $v1, $t3 -.L7F06A960: -/* 09D350 7F06A960 1000000A */ b .L7F06A98C -/* 09D354 7F06A964 AFA30050 */ sw $v1, 0x50($sp) -.L7F06A968: -/* 09D358 7F06A968 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 09D35C 7F06A96C 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09D360 7F06A970 8FA8005C */ lw $t0, 0x5c($sp) -/* 09D364 7F06A974 8C490C3C */ lw $t1, 0xc3c($v0) -/* 09D368 7F06A978 00086880 */ sll $t5, $t0, 2 -/* 09D36C 7F06A97C 004D7021 */ addu $t6, $v0, $t5 -/* 09D370 7F06A980 AFA9004C */ sw $t1, 0x4c($sp) -/* 09D374 7F06A984 8DD81128 */ lw $t8, 0x1128($t6) -/* 09D378 7F06A988 AFB80050 */ sw $t8, 0x50($sp) -.L7F06A98C: -/* 09D37C 7F06A98C 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09D380 7F06A990 8FA40064 */ lw $a0, 0x64($sp) -/* 09D384 7F06A994 5440001F */ bnezl $v0, .L7F06AA14 -/* 09D388 7F06A998 8FAC0050 */ lw $t4, 0x50($sp) -/* 09D38C 7F06A99C 0C000FD9 */ jal viGetViewLeft -/* 09D390 7F06A9A0 00000000 */ nop -/* 09D394 7F06A9A4 0C000FDD */ jal viGetViewTop -/* 09D398 7F06A9A8 A7A2002E */ sh $v0, 0x2e($sp) -/* 09D39C 7F06A9AC 0C000FBF */ jal viGetViewHeight -/* 09D3A0 7F06A9B0 A7A20038 */ sh $v0, 0x38($sp) -/* 09D3A4 7F06A9B4 87AC002E */ lh $t4, 0x2e($sp) -/* 09D3A8 7F06A9B8 8FAF0058 */ lw $t7, 0x58($sp) -/* 09D3AC 7F06A9BC 8FAA003C */ lw $t2, 0x3c($sp) -/* 09D3B0 7F06A9C0 87A90038 */ lh $t1, 0x38($sp) -/* 09D3B4 7F06A9C4 018FC821 */ addu $t9, $t4, $t7 -/* 09D3B8 7F06A9C8 240E0002 */ li $t6, 2 -/* 09D3BC 7F06A9CC 00494021 */ addu $t0, $v0, $t1 -/* 09D3C0 7F06A9D0 250DFFE4 */ addiu $t5, $t0, -0x1c -/* 09D3C4 7F06A9D4 24180001 */ li $t8, 1 -/* 09D3C8 7F06A9D8 AFB80018 */ sw $t8, 0x18($sp) -/* 09D3CC 7F06A9DC AFAD0010 */ sw $t5, 0x10($sp) -/* 09D3D0 7F06A9E0 AFAE0014 */ sw $t6, 0x14($sp) -/* 09D3D4 7F06A9E4 8FA40068 */ lw $a0, 0x68($sp) -/* 09D3D8 7F06A9E8 8FA5004C */ lw $a1, 0x4c($sp) -/* 09D3DC 7F06A9EC 05410003 */ bgez $t2, .L7F06A9FC -/* 09D3E0 7F06A9F0 000A5843 */ sra $t3, $t2, 1 -/* 09D3E4 7F06A9F4 25410001 */ addiu $at, $t2, 1 -/* 09D3E8 7F06A9F8 00015843 */ sra $t3, $at, 1 -.L7F06A9FC: -/* 09D3EC 7F06A9FC 032B3021 */ addu $a2, $t9, $t3 -/* 09D3F0 7F06AA00 24C60003 */ addiu $a2, $a2, 3 -/* 09D3F4 7F06AA04 0FC1A908 */ jal gunDrawHudInteger -/* 09D3F8 7F06AA08 24070001 */ li $a3, 1 -/* 09D3FC 7F06AA0C AFA20068 */ sw $v0, 0x68($sp) -/* 09D400 7F06AA10 8FAC0050 */ lw $t4, 0x50($sp) -.L7F06AA14: -/* 09D404 7F06AA14 8FA40064 */ lw $a0, 0x64($sp) -/* 09D408 7F06AA18 1D800005 */ bgtz $t4, .L7F06AA30 -/* 09D40C 7F06AA1C 00000000 */ nop -/* 09D410 7F06AA20 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09D414 7F06AA24 3C050040 */ lui $a1, 0x40 -/* 09D418 7F06AA28 1040001F */ beqz $v0, .L7F06AAA8 -/* 09D41C 7F06AA2C 00000000 */ nop -.L7F06AA30: -/* 09D420 7F06AA30 0C000FD9 */ jal viGetViewLeft -/* 09D424 7F06AA34 00000000 */ nop -/* 09D428 7F06AA38 0C000FDD */ jal viGetViewTop -/* 09D42C 7F06AA3C A7A2002E */ sh $v0, 0x2e($sp) -/* 09D430 7F06AA40 0C000FBF */ jal viGetViewHeight -/* 09D434 7F06AA44 A7A20038 */ sh $v0, 0x38($sp) -/* 09D438 7F06AA48 87AF002E */ lh $t7, 0x2e($sp) -/* 09D43C 7F06AA4C 8FAA0058 */ lw $t2, 0x58($sp) -/* 09D440 7F06AA50 8FAB003C */ lw $t3, 0x3c($sp) -/* 09D444 7F06AA54 87AD0038 */ lh $t5, 0x38($sp) -/* 09D448 7F06AA58 01EAC821 */ addu $t9, $t7, $t2 -/* 09D44C 7F06AA5C 25690001 */ addiu $t1, $t3, 1 -/* 09D450 7F06AA60 004D7021 */ addu $t6, $v0, $t5 -/* 09D454 7F06AA64 25D8FFE4 */ addiu $t8, $t6, -0x1c -/* 09D458 7F06AA68 240F0001 */ li $t7, 1 -/* 09D45C 7F06AA6C 240C0002 */ li $t4, 2 -/* 09D460 7F06AA70 AFAC0014 */ sw $t4, 0x14($sp) -/* 09D464 7F06AA74 AFAF0018 */ sw $t7, 0x18($sp) -/* 09D468 7F06AA78 AFB80010 */ sw $t8, 0x10($sp) -/* 09D46C 7F06AA7C 8FA40068 */ lw $a0, 0x68($sp) -/* 09D470 7F06AA80 8FA50050 */ lw $a1, 0x50($sp) -/* 09D474 7F06AA84 05210003 */ bgez $t1, .L7F06AA94 -/* 09D478 7F06AA88 00094043 */ sra $t0, $t1, 1 -/* 09D47C 7F06AA8C 25210001 */ addiu $at, $t1, 1 -/* 09D480 7F06AA90 00014043 */ sra $t0, $at, 1 -.L7F06AA94: -/* 09D484 7F06AA94 03283023 */ subu $a2, $t9, $t0 -/* 09D488 7F06AA98 24C6FFFC */ addiu $a2, $a2, -4 -/* 09D48C 7F06AA9C 0FC1A908 */ jal gunDrawHudInteger -/* 09D490 7F06AAA0 00003825 */ move $a3, $zero -/* 09D494 7F06AAA4 AFA20068 */ sw $v0, 0x68($sp) -.L7F06AAA8: -/* 09D498 7F06AAA8 0FC2B06C */ jal combiner_bayer_lod_perspective -/* 09D49C 7F06AAAC 8FA40068 */ lw $a0, 0x68($sp) -/* 09D4A0 7F06AAB0 AFA20068 */ sw $v0, 0x68($sp) -.L7F06AAB4: -/* 09D4A4 7F06AAB4 8FBF0024 */ lw $ra, 0x24($sp) -.L7F06AAB8: -/* 09D4A8 7F06AAB8 8FA20068 */ lw $v0, 0x68($sp) -/* 09D4AC 7F06AABC 27BD0068 */ addiu $sp, $sp, 0x68 -/* 09D4B0 7F06AAC0 03E00008 */ jr $ra -/* 09D4B4 7F06AAC4 00000000 */ nop -) -#endif -#endif +/** + * Address: 7F06A334 + */ +Gfx *gunDrawWatchAmmoDisplay(Gfx *gdl) +{ + ITEM_IDS offhanditem; + ITEM_IDS item; + s32 ammotype; + s32 reserveammo; + s32 magammo; + u32 imageoffset; + s32 textwidth; + s32 pad; + offhanditem = getCurrentPlayerWeaponId(1); + item = getCurrentPlayerWeaponId(0); - -#ifdef NONMATCHING -s32 sub_GAME_7F06A334(s32 arg0) { - void *sp30; - s16 sp34; - s32 sp3C; - void *sp40; - s32 sp44; - s32 sp48; - s32 sp4C; - s32 sp50; - s32 sp54; - ? temp_ret; - ? temp_ret_2; - void *temp_v0; - s32 temp_s0; - s32 temp_v1; - s32 temp_a2; - s32 phi_s0; - s32 phi_v1; - s32 phi_t4; - s32 phi_s0_2; - s32 phi_t9; - s32 phi_s0_3; - s32 phi_s0_4; - - // Node 0 - sp54 = getCurrentPlayerWeaponId(1); - temp_ret = getCurrentPlayerWeaponId(0); - phi_s0_4 = arg0; - if (temp_ret != 0) + if (item != ITEM_UNARMED) { - // Node 1 - sp50 = temp_ret; - temp_ret_2 = get_ammo_type_for_weapon(temp_ret); - sp4C = temp_ret_2; - phi_s0_4 = arg0; - if (temp_ret_2 != 0) - { - // Node 2 - phi_s0_4 = arg0; - if (g_CurrentPlayer->unk894 != 7) - { - // Node 3 - phi_s0_4 = arg0; - if (g_CurrentPlayer->unk894 != 7) - { - // Node 4 - phi_s0_4 = arg0; - if (bondwalkItemCheckBitflags(sp50, 0x80000) == 0) - { - // Node 5 - temp_v0 = ((sp4C * 0xc) + &ammo_related); - sp3C = 5; - sp30 = temp_v0; - sp40 = (void *) temp_v0->unk4; - get_ptr_item_statistics(sp50); - phi_s0 = arg0; - if (sp40 != 0) - { - // Node 6 - sp40 = (void *) (sp40 + globalbank_rdram_offset); - sp34 = viGetViewTop(); - sp3C = (s32) sp40->unk4; - phi_s0 = set_rgba_redirect_generate_microcode(arg0, sp40, 0x43480000, 0x43340000, (f32) ((viGetViewHeight() + sp34) + -0x14), 0, (f32) sp30->unk8, 1); - } - // Node 7 - temp_s0 = microcode_constructor(phi_s0); - if (bondwalkItemCheckBitflags(sp50, 0x400000) != 0) - { - // Node 8 - sp44 = 0; - temp_v1 = (g_CurrentPlayer->unk89C + (g_CurrentPlayer + (sp4C * 4))->unk1130); - phi_v1 = temp_v1; - if (sp54 == sp50) - { - // Node 9 - phi_v1 = (temp_v1 + g_CurrentPlayer->unkC44); - } - // Node 10 - sp48 = (s32) phi_v1; - } - else - { - // Node 11 - sp44 = (s32) g_CurrentPlayer->unk89C; - sp48 = (s32) (g_CurrentPlayer + (sp4C * 4))->unk1130; - } - // Node 12 - phi_s0_2 = temp_s0; - if (bondwalkItemCheckBitflags(sp50, 0x400000) == 0) - { - // Node 13 - phi_t4 = (sp3C >> 1); - if (sp3C < 0) - { - // Node 14 - phi_t4 = ((s32) (sp3C + 1) >> 1); - } - // Node 15 - phi_s0_2 = gunDrawHudInteger(temp_s0, sp44, (0xc4 - phi_t4), 0, 0); - } - // Node 16 - if ((sp48 > 0) || (bondwalkItemCheckBitflags(sp50, 0x400000) != 0)) - { - // Node 18 - temp_a2 = (sp3C + 1); - phi_t9 = (temp_a2 >> 1); - if (temp_a2 < 0) - { - // Node 19 - phi_t9 = ((s32) (temp_a2 + 1) >> 1); - } - // Node 20 - phi_s0_3 = gunDrawHudInteger(phi_s0_2, sp48, (phi_t9 + 0xcb), 1, 0); - } - else - { + ammotype = get_ammo_type_for_weapon(item); - } - // Node 21 - phi_s0_4 = combiner_bayer_lod_perspective(phi_s0_3); - } + if (ammotype != 0 + && g_CurrentPlayer->hands[GUNRIGHT].weapon_action_state != GUN_ANIM_STATE_SWITCH_SWAP + && g_CurrentPlayer->hands[GUNRIGHT].weapon_action_state != GUN_ANIM_STATE_SWITCH_HOLD + && !bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_HIDE_AMMO_DISPLAY)) + { + imageoffset = ammo_related[ammotype].IconImage; + textwidth = 5; + + get_ptr_item_statistics(item); + + if (imageoffset != 0) + { + imageoffset += globalbank_rdram_offset; + + // Draw the ammo icon +#if defined(VERSION_EU) + gdl = set_rgba_redirect_generate_microcode(gdl, (u8 *)imageoffset, 200.0f, 208.0f, (viGetViewTop() + viGetViewHeight()) - 30, 0, ammo_related[ammotype].IconYOffset, 1); +#else + gdl = set_rgba_redirect_generate_microcode(gdl, (u8 *)imageoffset, 200.0f, 180.0f, (viGetViewTop() + viGetViewHeight()) - 20, 0, ammo_related[ammotype].IconYOffset, 1); +#endif + + textwidth = ((u8 *)imageoffset)[4]; + } + + gdl = microcode_constructor(gdl); + + if (bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_NO_CLIP_RELOADS)) + { + magammo = 0; + reserveammo = g_CurrentPlayer->ammoheldarr[ammotype] + g_CurrentPlayer->hands[0].weapon_ammo_in_magazine; + + if (offhanditem == item) + { + reserveammo += g_CurrentPlayer->hands[1].weapon_ammo_in_magazine; } } + else + { + magammo = g_CurrentPlayer->hands[0].weapon_ammo_in_magazine; + reserveammo = g_CurrentPlayer->ammoheldarr[ammotype]; + } + + if (!bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_NO_CLIP_RELOADS)) + { + // Draw the magazine ammo count. +#if defined(VERSION_EU) + gdl = gunDrawHudInteger(gdl, magammo, 196 - (textwidth / 2), 0, 205, 2, 0); +#else + gdl = gunDrawHudInteger(gdl, magammo, 196 - (textwidth / 2), 0, 177, 2, 0); +#endif + } + + if (reserveammo > 0 || bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_NO_CLIP_RELOADS)) + { + // Draw the reserve ammo count. +#if defined(VERSION_EU) + gdl = gunDrawHudInteger(gdl, reserveammo, 203 + ((textwidth + 1) / 2), 1, 205, 2, 0); +#else + gdl = gunDrawHudInteger(gdl, reserveammo, 203 + ((textwidth + 1) / 2), 1, 177, 2, 0); +#endif + } + + gdl = combiner_bayer_lod_perspective(gdl); } } - // Node 22 - return phi_s0_4; + + return gdl; } -#else - -#if defined(VERSION_US) || defined(VERSION_JP) -GLOBAL_ASM( -.text -glabel sub_GAME_7F06A334 -/* 09EE64 7F06A334 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 09EE68 7F06A338 AFB00028 */ sw $s0, 0x28($sp) -/* 09EE6C 7F06A33C 00808025 */ move $s0, $a0 -/* 09EE70 7F06A340 AFBF002C */ sw $ra, 0x2c($sp) -/* 09EE74 7F06A344 0FC17674 */ jal getCurrentPlayerWeaponId -/* 09EE78 7F06A348 24040001 */ li $a0, 1 -/* 09EE7C 7F06A34C AFA20054 */ sw $v0, 0x54($sp) -/* 09EE80 7F06A350 0FC17674 */ jal getCurrentPlayerWeaponId -/* 09EE84 7F06A354 00002025 */ move $a0, $zero -/* 09EE88 7F06A358 1040008E */ beqz $v0, .L7F06A594 -/* 09EE8C 7F06A35C 00402025 */ move $a0, $v0 -/* 09EE90 7F06A360 0FC1A50B */ jal get_ammo_type_for_weapon -/* 09EE94 7F06A364 AFA20050 */ sw $v0, 0x50($sp) -/* 09EE98 7F06A368 1040008A */ beqz $v0, .L7F06A594 -/* 09EE9C 7F06A36C AFA2004C */ sw $v0, 0x4c($sp) -/* 09EEA0 7F06A370 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 09EEA4 7F06A374 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 09EEA8 7F06A378 24010006 */ li $at, 6 -/* 09EEAC 7F06A37C 8DC20894 */ lw $v0, 0x894($t6) -/* 09EEB0 7F06A380 10410084 */ beq $v0, $at, .L7F06A594 -/* 09EEB4 7F06A384 24010007 */ li $at, 7 -/* 09EEB8 7F06A388 10410082 */ beq $v0, $at, .L7F06A594 -/* 09EEBC 7F06A38C 8FA40050 */ lw $a0, 0x50($sp) -/* 09EEC0 7F06A390 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09EEC4 7F06A394 3C050008 */ lui $a1, 8 -/* 09EEC8 7F06A398 1440007E */ bnez $v0, .L7F06A594 -/* 09EECC 7F06A39C 8FAF004C */ lw $t7, 0x4c($sp) -/* 09EED0 7F06A3A0 000FC080 */ sll $t8, $t7, 2 -/* 09EED4 7F06A3A4 030FC023 */ subu $t8, $t8, $t7 -/* 09EED8 7F06A3A8 3C198003 */ lui $t9, %hi(ammo_related) -/* 09EEDC 7F06A3AC 27395EF0 */ addiu $t9, %lo(ammo_related) # addiu $t9, $t9, 0x5ef0 -/* 09EEE0 7F06A3B0 0018C080 */ sll $t8, $t8, 2 -/* 09EEE4 7F06A3B4 03191021 */ addu $v0, $t8, $t9 -/* 09EEE8 7F06A3B8 8C480004 */ lw $t0, 4($v0) -/* 09EEEC 7F06A3BC 24090005 */ li $t1, 5 -/* 09EEF0 7F06A3C0 AFA9003C */ sw $t1, 0x3c($sp) -/* 09EEF4 7F06A3C4 AFA20030 */ sw $v0, 0x30($sp) -/* 09EEF8 7F06A3C8 8FA40050 */ lw $a0, 0x50($sp) -/* 09EEFC 7F06A3CC 0FC1722D */ jal get_ptr_item_statistics -/* 09EF00 7F06A3D0 AFA80040 */ sw $t0, 0x40($sp) -/* 09EF04 7F06A3D4 8FA30040 */ lw $v1, 0x40($sp) -/* 09EF08 7F06A3D8 3C0A8009 */ lui $t2, %hi(globalbank_rdram_offset) -/* 09EF0C 7F06A3DC 1060001C */ beqz $v1, .L7F06A450 -/* 09EF10 7F06A3E0 00000000 */ nop -/* 09EF14 7F06A3E4 8D4AD0B0 */ lw $t2, %lo(globalbank_rdram_offset)($t2) -/* 09EF18 7F06A3E8 006A1821 */ addu $v1, $v1, $t2 -/* 09EF1C 7F06A3EC 0C001149 */ jal viGetViewTop -/* 09EF20 7F06A3F0 AFA30040 */ sw $v1, 0x40($sp) -/* 09EF24 7F06A3F4 0C00112B */ jal viGetViewHeight -/* 09EF28 7F06A3F8 A7A20034 */ sh $v0, 0x34($sp) -/* 09EF2C 7F06A3FC 87AB0034 */ lh $t3, 0x34($sp) -/* 09EF30 7F06A400 8FAE0030 */ lw $t6, 0x30($sp) -/* 09EF34 7F06A404 AFA00014 */ sw $zero, 0x14($sp) -/* 09EF38 7F06A408 004B6021 */ addu $t4, $v0, $t3 -/* 09EF3C 7F06A40C 258DFFEC */ addiu $t5, $t4, -0x14 -/* 09EF40 7F06A410 448D2000 */ mtc1 $t5, $f4 -/* 09EF44 7F06A414 240F0001 */ li $t7, 1 -/* 09EF48 7F06A418 02002025 */ move $a0, $s0 -/* 09EF4C 7F06A41C 468021A0 */ cvt.s.w $f6, $f4 -/* 09EF50 7F06A420 8FA50040 */ lw $a1, 0x40($sp) -/* 09EF54 7F06A424 3C064348 */ lui $a2, 0x4348 -/* 09EF58 7F06A428 3C074334 */ lui $a3, 0x4334 -/* 09EF5C 7F06A42C E7A60010 */ swc1 $f6, 0x10($sp) -/* 09EF60 7F06A430 C5C80008 */ lwc1 $f8, 8($t6) -/* 09EF64 7F06A434 AFAF001C */ sw $t7, 0x1c($sp) -/* 09EF68 7F06A438 0FC1A679 */ jal set_rgba_redirect_generate_microcode -/* 09EF6C 7F06A43C E7A80018 */ swc1 $f8, 0x18($sp) -/* 09EF70 7F06A440 8FB80040 */ lw $t8, 0x40($sp) -/* 09EF74 7F06A444 00408025 */ move $s0, $v0 -/* 09EF78 7F06A448 93190004 */ lbu $t9, 4($t8) -/* 09EF7C 7F06A44C AFB9003C */ sw $t9, 0x3c($sp) -.L7F06A450: -/* 09EF80 7F06A450 0FC2B366 */ jal microcode_constructor -/* 09EF84 7F06A454 02002025 */ move $a0, $s0 -/* 09EF88 7F06A458 00408025 */ move $s0, $v0 -/* 09EF8C 7F06A45C 8FA40050 */ lw $a0, 0x50($sp) -/* 09EF90 7F06A460 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09EF94 7F06A464 3C050040 */ lui $a1, 0x40 -/* 09EF98 7F06A468 10400011 */ beqz $v0, .L7F06A4B0 -/* 09EF9C 7F06A46C 3C050040 */ lui $a1, 0x40 -/* 09EFA0 7F06A470 8FA9004C */ lw $t1, 0x4c($sp) -/* 09EFA4 7F06A474 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 09EFA8 7F06A478 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09EFAC 7F06A47C AFA00044 */ sw $zero, 0x44($sp) -/* 09EFB0 7F06A480 00095080 */ sll $t2, $t1, 2 -/* 09EFB4 7F06A484 8FAD0054 */ lw $t5, 0x54($sp) -/* 09EFB8 7F06A488 8FAE0050 */ lw $t6, 0x50($sp) -/* 09EFBC 7F06A48C 004A5821 */ addu $t3, $v0, $t2 -/* 09EFC0 7F06A490 8D6C1130 */ lw $t4, 0x1130($t3) -/* 09EFC4 7F06A494 8C48089C */ lw $t0, 0x89c($v0) -/* 09EFC8 7F06A498 15AE0003 */ bne $t5, $t6, .L7F06A4A8 -/* 09EFCC 7F06A49C 010C1821 */ addu $v1, $t0, $t4 -/* 09EFD0 7F06A4A0 8C4F0C44 */ lw $t7, 0xc44($v0) -/* 09EFD4 7F06A4A4 006F1821 */ addu $v1, $v1, $t7 -.L7F06A4A8: -/* 09EFD8 7F06A4A8 1000000A */ b .L7F06A4D4 -/* 09EFDC 7F06A4AC AFA30048 */ sw $v1, 0x48($sp) -.L7F06A4B0: -/* 09EFE0 7F06A4B0 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 09EFE4 7F06A4B4 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09EFE8 7F06A4B8 8FB9004C */ lw $t9, 0x4c($sp) -/* 09EFEC 7F06A4BC 8C58089C */ lw $t8, 0x89c($v0) -/* 09EFF0 7F06A4C0 00194880 */ sll $t1, $t9, 2 -/* 09EFF4 7F06A4C4 00495021 */ addu $t2, $v0, $t1 -/* 09EFF8 7F06A4C8 AFB80044 */ sw $t8, 0x44($sp) -/* 09EFFC 7F06A4CC 8D4B1130 */ lw $t3, 0x1130($t2) -/* 09F000 7F06A4D0 AFAB0048 */ sw $t3, 0x48($sp) -.L7F06A4D4: -/* 09F004 7F06A4D4 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09F008 7F06A4D8 8FA40050 */ lw $a0, 0x50($sp) -/* 09F00C 7F06A4DC 14400011 */ bnez $v0, .L7F06A524 -/* 09F010 7F06A4E0 02002025 */ move $a0, $s0 -/* 09F014 7F06A4E4 8FA8003C */ lw $t0, 0x3c($sp) -/* 09F018 7F06A4E8 240D00C4 */ li $t5, 196 -/* 09F01C 7F06A4EC 240E00B1 */ li $t6, 177 -/* 09F020 7F06A4F0 240F0002 */ li $t7, 2 -/* 09F024 7F06A4F4 AFAF0014 */ sw $t7, 0x14($sp) -/* 09F028 7F06A4F8 AFAE0010 */ sw $t6, 0x10($sp) -/* 09F02C 7F06A4FC 8FA50044 */ lw $a1, 0x44($sp) -/* 09F030 7F06A500 05010003 */ bgez $t0, .L7F06A510 -/* 09F034 7F06A504 00086043 */ sra $t4, $t0, 1 -/* 09F038 7F06A508 25010001 */ addiu $at, $t0, 1 -/* 09F03C 7F06A50C 00016043 */ sra $t4, $at, 1 -.L7F06A510: -/* 09F040 7F06A510 01AC3023 */ subu $a2, $t5, $t4 -/* 09F044 7F06A514 00003825 */ move $a3, $zero -/* 09F048 7F06A518 0FC1A723 */ jal gunDrawHudInteger -/* 09F04C 7F06A51C AFA00018 */ sw $zero, 0x18($sp) -/* 09F050 7F06A520 00408025 */ move $s0, $v0 -.L7F06A524: -/* 09F054 7F06A524 8FB80048 */ lw $t8, 0x48($sp) -/* 09F058 7F06A528 8FA40050 */ lw $a0, 0x50($sp) -/* 09F05C 7F06A52C 5F000006 */ bgtzl $t8, .L7F06A548 -/* 09F060 7F06A530 8FA6003C */ lw $a2, 0x3c($sp) -/* 09F064 7F06A534 0FC1782D */ jal bondwalkItemCheckBitflags -/* 09F068 7F06A538 3C050040 */ lui $a1, 0x40 -/* 09F06C 7F06A53C 10400012 */ beqz $v0, .L7F06A588 -/* 09F070 7F06A540 00000000 */ nop -/* 09F074 7F06A544 8FA6003C */ lw $a2, 0x3c($sp) -.L7F06A548: -/* 09F078 7F06A548 240900B1 */ li $t1, 177 -/* 09F07C 7F06A54C 240A0002 */ li $t2, 2 -/* 09F080 7F06A550 24C60001 */ addiu $a2, $a2, 1 -/* 09F084 7F06A554 AFAA0014 */ sw $t2, 0x14($sp) -/* 09F088 7F06A558 AFA90010 */ sw $t1, 0x10($sp) -/* 09F08C 7F06A55C 02002025 */ move $a0, $s0 -/* 09F090 7F06A560 8FA50048 */ lw $a1, 0x48($sp) -/* 09F094 7F06A564 04C10003 */ bgez $a2, .L7F06A574 -/* 09F098 7F06A568 0006C843 */ sra $t9, $a2, 1 -/* 09F09C 7F06A56C 24C10001 */ addiu $at, $a2, 1 -/* 09F0A0 7F06A570 0001C843 */ sra $t9, $at, 1 -.L7F06A574: -/* 09F0A4 7F06A574 272600CB */ addiu $a2, $t9, 0xcb -/* 09F0A8 7F06A578 24070001 */ li $a3, 1 -/* 09F0AC 7F06A57C 0FC1A723 */ jal gunDrawHudInteger -/* 09F0B0 7F06A580 AFA00018 */ sw $zero, 0x18($sp) -/* 09F0B4 7F06A584 00408025 */ move $s0, $v0 -.L7F06A588: -/* 09F0B8 7F06A588 0FC2B3BC */ jal combiner_bayer_lod_perspective -/* 09F0BC 7F06A58C 02002025 */ move $a0, $s0 -/* 09F0C0 7F06A590 00408025 */ move $s0, $v0 -.L7F06A594: -/* 09F0C4 7F06A594 8FBF002C */ lw $ra, 0x2c($sp) -/* 09F0C8 7F06A598 02001025 */ move $v0, $s0 -/* 09F0CC 7F06A59C 8FB00028 */ lw $s0, 0x28($sp) -/* 09F0D0 7F06A5A0 03E00008 */ jr $ra -/* 09F0D4 7F06A5A4 27BD0058 */ addiu $sp, $sp, 0x58 -) -#endif - -#if defined(VERSION_EU) -GLOBAL_ASM( -.text -glabel sub_GAME_7F06A334 -/* 09D4B8 7F06AAC8 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 09D4BC 7F06AACC AFB00028 */ sw $s0, 0x28($sp) -/* 09D4C0 7F06AAD0 00808025 */ move $s0, $a0 -/* 09D4C4 7F06AAD4 AFBF002C */ sw $ra, 0x2c($sp) -/* 09D4C8 7F06AAD8 0FC177A2 */ jal getCurrentPlayerWeaponId -/* 09D4CC 7F06AADC 24040001 */ li $a0, 1 -/* 09D4D0 7F06AAE0 AFA20054 */ sw $v0, 0x54($sp) -/* 09D4D4 7F06AAE4 0FC177A2 */ jal getCurrentPlayerWeaponId -/* 09D4D8 7F06AAE8 00002025 */ move $a0, $zero -/* 09D4DC 7F06AAEC 1040008E */ beqz $v0, .L7F06AD28 -/* 09D4E0 7F06AAF0 00402025 */ move $a0, $v0 -/* 09D4E4 7F06AAF4 0FC1A6F0 */ jal get_ammo_type_for_weapon -/* 09D4E8 7F06AAF8 AFA20050 */ sw $v0, 0x50($sp) -/* 09D4EC 7F06AAFC 1040008A */ beqz $v0, .L7F06AD28 -/* 09D4F0 7F06AB00 AFA2004C */ sw $v0, 0x4c($sp) -/* 09D4F4 7F06AB04 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 09D4F8 7F06AB08 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 09D4FC 7F06AB0C 24010006 */ li $at, 6 -/* 09D500 7F06AB10 8DC2088C */ lw $v0, 0x88c($t6) -/* 09D504 7F06AB14 10410084 */ beq $v0, $at, .L7F06AD28 -/* 09D508 7F06AB18 24010007 */ li $at, 7 -/* 09D50C 7F06AB1C 10410082 */ beq $v0, $at, .L7F06AD28 -/* 09D510 7F06AB20 8FA40050 */ lw $a0, 0x50($sp) -/* 09D514 7F06AB24 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09D518 7F06AB28 3C050008 */ lui $a1, 8 -/* 09D51C 7F06AB2C 1440007E */ bnez $v0, .L7F06AD28 -/* 09D520 7F06AB30 8FAF004C */ lw $t7, 0x4c($sp) -/* 09D524 7F06AB34 000FC080 */ sll $t8, $t7, 2 -/* 09D528 7F06AB38 030FC023 */ subu $t8, $t8, $t7 -/* 09D52C 7F06AB3C 3C198003 */ lui $t9, %hi(ammo_related) # $t9, 0x8003 -/* 09D530 7F06AB40 27391440 */ addiu $t9, %lo(ammo_related) # addiu $t9, $t9, 0x1440 -/* 09D534 7F06AB44 0018C080 */ sll $t8, $t8, 2 -/* 09D538 7F06AB48 03191021 */ addu $v0, $t8, $t9 -/* 09D53C 7F06AB4C 8C480004 */ lw $t0, 4($v0) -/* 09D540 7F06AB50 24090005 */ li $t1, 5 -/* 09D544 7F06AB54 AFA9003C */ sw $t1, 0x3c($sp) -/* 09D548 7F06AB58 AFA20030 */ sw $v0, 0x30($sp) -/* 09D54C 7F06AB5C 8FA40050 */ lw $a0, 0x50($sp) -/* 09D550 7F06AB60 0FC17359 */ jal get_ptr_item_statistics -/* 09D554 7F06AB64 AFA80040 */ sw $t0, 0x40($sp) -/* 09D558 7F06AB68 8FA30040 */ lw $v1, 0x40($sp) -/* 09D55C 7F06AB6C 3C0A8007 */ lui $t2, %hi(globalbank_rdram_offset) # $t2, 0x8007 -/* 09D560 7F06AB70 1060001C */ beqz $v1, .L7F06ABE4 -/* 09D564 7F06AB74 00000000 */ nop -/* 09D568 7F06AB78 8D4A4490 */ lw $t2, %lo(globalbank_rdram_offset)($t2) -/* 09D56C 7F06AB7C 006A1821 */ addu $v1, $v1, $t2 -/* 09D570 7F06AB80 0C000FDD */ jal viGetViewTop -/* 09D574 7F06AB84 AFA30040 */ sw $v1, 0x40($sp) -/* 09D578 7F06AB88 0C000FBF */ jal viGetViewHeight -/* 09D57C 7F06AB8C A7A20034 */ sh $v0, 0x34($sp) -/* 09D580 7F06AB90 87AB0034 */ lh $t3, 0x34($sp) -/* 09D584 7F06AB94 8FAE0030 */ lw $t6, 0x30($sp) -/* 09D588 7F06AB98 AFA00014 */ sw $zero, 0x14($sp) -/* 09D58C 7F06AB9C 004B6021 */ addu $t4, $v0, $t3 -/* 09D590 7F06ABA0 258DFFE2 */ addiu $t5, $t4, -0x1e -/* 09D594 7F06ABA4 448D2000 */ mtc1 $t5, $f4 -/* 09D598 7F06ABA8 240F0001 */ li $t7, 1 -/* 09D59C 7F06ABAC 02002025 */ move $a0, $s0 -/* 09D5A0 7F06ABB0 468021A0 */ cvt.s.w $f6, $f4 -/* 09D5A4 7F06ABB4 8FA50040 */ lw $a1, 0x40($sp) -/* 09D5A8 7F06ABB8 3C064348 */ lui $a2, 0x4348 -/* 09D5AC 7F06ABBC 3C074350 */ lui $a3, 0x4350 -/* 09D5B0 7F06ABC0 E7A60010 */ swc1 $f6, 0x10($sp) -/* 09D5B4 7F06ABC4 C5C80008 */ lwc1 $f8, 8($t6) -/* 09D5B8 7F06ABC8 AFAF001C */ sw $t7, 0x1c($sp) -/* 09D5BC 7F06ABCC 0FC1A85E */ jal set_rgba_redirect_generate_microcode -/* 09D5C0 7F06ABD0 E7A80018 */ swc1 $f8, 0x18($sp) -/* 09D5C4 7F06ABD4 8FB80040 */ lw $t8, 0x40($sp) -/* 09D5C8 7F06ABD8 00408025 */ move $s0, $v0 -/* 09D5CC 7F06ABDC 93190004 */ lbu $t9, 4($t8) -/* 09D5D0 7F06ABE0 AFB9003C */ sw $t9, 0x3c($sp) -.L7F06ABE4: -/* 09D5D4 7F06ABE4 0FC2B016 */ jal microcode_constructor -/* 09D5D8 7F06ABE8 02002025 */ move $a0, $s0 -/* 09D5DC 7F06ABEC 00408025 */ move $s0, $v0 -/* 09D5E0 7F06ABF0 8FA40050 */ lw $a0, 0x50($sp) -/* 09D5E4 7F06ABF4 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09D5E8 7F06ABF8 3C050040 */ lui $a1, 0x40 -/* 09D5EC 7F06ABFC 10400011 */ beqz $v0, .L7F06AC44 -/* 09D5F0 7F06AC00 3C050040 */ lui $a1, 0x40 -/* 09D5F4 7F06AC04 8FA9004C */ lw $t1, 0x4c($sp) -/* 09D5F8 7F06AC08 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 09D5FC 7F06AC0C 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09D600 7F06AC10 AFA00044 */ sw $zero, 0x44($sp) -/* 09D604 7F06AC14 00095080 */ sll $t2, $t1, 2 -/* 09D608 7F06AC18 8FAD0054 */ lw $t5, 0x54($sp) -/* 09D60C 7F06AC1C 8FAE0050 */ lw $t6, 0x50($sp) -/* 09D610 7F06AC20 004A5821 */ addu $t3, $v0, $t2 -/* 09D614 7F06AC24 8D6C1128 */ lw $t4, 0x1128($t3) -/* 09D618 7F06AC28 8C480894 */ lw $t0, 0x894($v0) -/* 09D61C 7F06AC2C 15AE0003 */ bne $t5, $t6, .L7F06AC3C -/* 09D620 7F06AC30 010C1821 */ addu $v1, $t0, $t4 -/* 09D624 7F06AC34 8C4F0C3C */ lw $t7, 0xc3c($v0) -/* 09D628 7F06AC38 006F1821 */ addu $v1, $v1, $t7 -.L7F06AC3C: -/* 09D62C 7F06AC3C 1000000A */ b .L7F06AC68 -/* 09D630 7F06AC40 AFA30048 */ sw $v1, 0x48($sp) -.L7F06AC44: -/* 09D634 7F06AC44 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 09D638 7F06AC48 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 09D63C 7F06AC4C 8FB9004C */ lw $t9, 0x4c($sp) -/* 09D640 7F06AC50 8C580894 */ lw $t8, 0x894($v0) -/* 09D644 7F06AC54 00194880 */ sll $t1, $t9, 2 -/* 09D648 7F06AC58 00495021 */ addu $t2, $v0, $t1 -/* 09D64C 7F06AC5C AFB80044 */ sw $t8, 0x44($sp) -/* 09D650 7F06AC60 8D4B1128 */ lw $t3, 0x1128($t2) -/* 09D654 7F06AC64 AFAB0048 */ sw $t3, 0x48($sp) -.L7F06AC68: -/* 09D658 7F06AC68 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09D65C 7F06AC6C 8FA40050 */ lw $a0, 0x50($sp) -/* 09D660 7F06AC70 14400011 */ bnez $v0, .L7F06ACB8 -/* 09D664 7F06AC74 02002025 */ move $a0, $s0 -/* 09D668 7F06AC78 8FA8003C */ lw $t0, 0x3c($sp) -/* 09D66C 7F06AC7C 240D00C4 */ li $t5, 196 -/* 09D670 7F06AC80 240E00CD */ li $t6, 205 -/* 09D674 7F06AC84 240F0002 */ li $t7, 2 -/* 09D678 7F06AC88 AFAF0014 */ sw $t7, 0x14($sp) -/* 09D67C 7F06AC8C AFAE0010 */ sw $t6, 0x10($sp) -/* 09D680 7F06AC90 8FA50044 */ lw $a1, 0x44($sp) -/* 09D684 7F06AC94 05010003 */ bgez $t0, .L7F06ACA4 -/* 09D688 7F06AC98 00086043 */ sra $t4, $t0, 1 -/* 09D68C 7F06AC9C 25010001 */ addiu $at, $t0, 1 -/* 09D690 7F06ACA0 00016043 */ sra $t4, $at, 1 -.L7F06ACA4: -/* 09D694 7F06ACA4 01AC3023 */ subu $a2, $t5, $t4 -/* 09D698 7F06ACA8 00003825 */ move $a3, $zero -/* 09D69C 7F06ACAC 0FC1A908 */ jal gunDrawHudInteger -/* 09D6A0 7F06ACB0 AFA00018 */ sw $zero, 0x18($sp) -/* 09D6A4 7F06ACB4 00408025 */ move $s0, $v0 -.L7F06ACB8: -/* 09D6A8 7F06ACB8 8FB80048 */ lw $t8, 0x48($sp) -/* 09D6AC 7F06ACBC 8FA40050 */ lw $a0, 0x50($sp) -/* 09D6B0 7F06ACC0 5F000006 */ bgtzl $t8, .L7F06ACDC -/* 09D6B4 7F06ACC4 8FA6003C */ lw $a2, 0x3c($sp) -/* 09D6B8 7F06ACC8 0FC1795B */ jal bondwalkItemCheckBitflags -/* 09D6BC 7F06ACCC 3C050040 */ lui $a1, 0x40 -/* 09D6C0 7F06ACD0 10400012 */ beqz $v0, .L7F06AD1C -/* 09D6C4 7F06ACD4 00000000 */ nop -/* 09D6C8 7F06ACD8 8FA6003C */ lw $a2, 0x3c($sp) -.L7F06ACDC: -/* 09D6CC 7F06ACDC 240900CD */ li $t1, 205 -/* 09D6D0 7F06ACE0 240A0002 */ li $t2, 2 -/* 09D6D4 7F06ACE4 24C60001 */ addiu $a2, $a2, 1 -/* 09D6D8 7F06ACE8 AFAA0014 */ sw $t2, 0x14($sp) -/* 09D6DC 7F06ACEC AFA90010 */ sw $t1, 0x10($sp) -/* 09D6E0 7F06ACF0 02002025 */ move $a0, $s0 -/* 09D6E4 7F06ACF4 8FA50048 */ lw $a1, 0x48($sp) -/* 09D6E8 7F06ACF8 04C10003 */ bgez $a2, .L7F06AD08 -/* 09D6EC 7F06ACFC 0006C843 */ sra $t9, $a2, 1 -/* 09D6F0 7F06AD00 24C10001 */ addiu $at, $a2, 1 -/* 09D6F4 7F06AD04 0001C843 */ sra $t9, $at, 1 -.L7F06AD08: -/* 09D6F8 7F06AD08 272600CB */ addiu $a2, $t9, 0xcb -/* 09D6FC 7F06AD0C 24070001 */ li $a3, 1 -/* 09D700 7F06AD10 0FC1A908 */ jal gunDrawHudInteger -/* 09D704 7F06AD14 AFA00018 */ sw $zero, 0x18($sp) -/* 09D708 7F06AD18 00408025 */ move $s0, $v0 -.L7F06AD1C: -/* 09D70C 7F06AD1C 0FC2B06C */ jal combiner_bayer_lod_perspective -/* 09D710 7F06AD20 02002025 */ move $a0, $s0 -/* 09D714 7F06AD24 00408025 */ move $s0, $v0 -.L7F06AD28: -/* 09D718 7F06AD28 8FBF002C */ lw $ra, 0x2c($sp) -/* 09D71C 7F06AD2C 02001025 */ move $v0, $s0 -/* 09D720 7F06AD30 8FB00028 */ lw $s0, 0x28($sp) -/* 09D724 7F06AD34 03E00008 */ jr $ra -/* 09D728 7F06AD38 27BD0058 */ addiu $sp, $sp, 0x58 -) -#endif -#endif - - void gunSetSightVisible(s32 reason, bool visible) @@ -20278,7 +8140,6 @@ void gunDrawSight(s32 *gdl) { } - void inc_curplayer_hitcount_with_weapon(ITEM_IDS item, SHOT_REGISTER shot_register) { if (bondwalkItemCheckBitflags(item, WEAPONSTATBITFLAG_PLAYER_STAT_HIT)) { @@ -20286,16 +8147,19 @@ void inc_curplayer_hitcount_with_weapon(ITEM_IDS item, SHOT_REGISTER shot_regist } } + s32 get_curplayer_shot_register(SHOT_REGISTER shot_register) { return g_playerPerm->shot_count[shot_register]; } + void inc_cur_civilian_casualties(void) { g_playerPerm->killed_civilians++; } + s32 get_civilian_casualties(void) { return g_playerPerm->killed_civilians; @@ -20314,7 +8178,7 @@ void increment_num_kills_display_text_in_MP(void) s32 unused; // needed this variable to match g_playerPerm->kill_count += 1; - g_CurrentPlayer->field_29F8 += 1; + g_CurrentPlayer->kills_this_life += 1; if (getPlayerCount() < 2) { return; } diff --git a/src/game/gun.h b/src/game/gun.h index a0e68f1b..1ce99c43 100644 --- a/src/game/gun.h +++ b/src/game/gun.h @@ -5,6 +5,11 @@ #include #include +/** + * Pool of AlSoundState slots for impact and ricochet SFX. + */ +#define NUM_IMPACT_SFX_STATES 4 + typedef struct WeaponStats { /** @@ -168,14 +173,21 @@ typedef struct WeaponStats f32 NoiseIncreasePerShot; /** - * Unknown (field 0x60). + * Noise bleeds off at a constant NoiseIncreasePerShot / this value per + * second, i.e. one shot's worth of noise decays over this many seconds. + * This is the guaranteed minimum decay, so accumulated noise always + * drains to LoudnessMin in finite time. All weapons use 2.0 for this value. */ - f32 field_60; + f32 NoiseDecayLinearTime; /** - * Unknown (field 0x64). + * Proportional noise decay time constant in seconds. + * Noise above LoudnessMin relaxes toward the floor with this time + * constant: (noise - LoudnessMin) / this value is removed per second. + * Dominates when the player is loud; near LoudnessMin the linear term + * (NoiseDecayLinearTime) takes over. All weapons use 4.0 for this value. */ - f32 field_64; + f32 NoiseDecayScaledTime; /** * Force of impact. @@ -195,24 +207,16 @@ typedef struct AmmoStats { u32 MaxAmmo; /** - * Unknown (field 0x04). + * Segmented address (segment 0x02, global image bank) of this ammo + * type's HUD icon image. 0 for no icon. Resolved to an RDRAM pointer + * by adding globalbank_rdram_offset before use. */ - u16 field_04; + u32 IconImage; /** - * Unknown (field 0x06). + * Vertical offset in pixels when the icon is drawn on the HUD. */ - u16 field_06; - - /** - * Unknown (field 0x08). - */ - u16 field_08; - - /** - * Unknown (field 0x0A). - */ - u16 field_0A; + f32 IconYOffset; } AmmoStats; typedef struct GunModelFileRecord @@ -240,11 +244,11 @@ typedef struct CasingRecord { coord3d pos; coord3d vel; #if VERSION_EU - f32 unk1C[3][3]; - f32 unk40[3][3]; + f32 rot_mtx[3][3]; + f32 rot_velocity_mtx[3][3]; #else - Mtxf unk1C; - Mtxf unk5C; + Mtxf rot_mtx; + Mtxf rot_velocity_mtx; #endif ModelFileHeader *header; } CasingRecord; @@ -283,11 +287,27 @@ extern u32 size_item_buffer[]; extern WeaponStats sniperrifle_stats; extern WeaponStats camera_stats; +typedef struct WatchContButtonPositions { + f32 words[19]; + struct coord3d start; + struct coord3d joystick; + struct coord3d dPad; + struct coord3d cUp; + struct coord3d cDown; + struct coord3d cLeft; + struct coord3d cRight; + struct coord3d a; + struct coord3d b; + struct coord3d l; + struct coord3d r; + struct coord3d z; +} WatchContButtonPositions; + f32 bondwalkItemGetForceOfImpact(ITEM_IDS item); u32 bondwalkItemCheckBitflags(ITEM_IDS item, u32 mask); -void bondwalkFireBothHands(void); +void gunUpdateAndFireBothHands(void); f32 sub_GAME_7F0649AC(s32 param_1); @@ -314,14 +334,14 @@ void give_cur_player_ammo(s32, s32); s8 bondwalkItemGetAutomaticFiringRate(ITEM_IDS item); void inc_cur_civilian_casualties(void); void increment_num_kills_display_text_in_MP(void); -f32 bondwalkItemGetDestructionAmount(ITEM_IDS item); +f32 gunItemGetDestructionAmount(ITEM_IDS item); u16 bondwalkItemGetSound(ITEM_IDS item); u8 bondwalkItemGetSoundTriggerRate(ITEM_IDS item); void recall_joy2_hits_edit_detail_edit_flag(enum ITEM_IDS item, PropRecord* prop, s32 texture_index); void recall_joy2_hits_edit_flag(enum ITEM_IDS item, coord3d* arg1, s32 texture_index); -void sub_GAME_7F05EB0C(ObjectRecord *arg0, coord3d *arg1, StandTile *arg2, Mtxf *arg3, coord3d *arg4, Mtxf *arg5, PropRecord *arg6); -void CapBeamLengthAndDecideIfRendered(struct ChrRecord_f180 *arg0, ITEM_IDS item, coord3d *arg2, coord3d *arg3); +void gunInitProjectileObject(ObjectRecord *arg0, coord3d *arg1, StandTile *arg2, Mtxf *arg3, coord3d *arg4, Mtxf *arg5, PropRecord *owner); +void CapBeamLengthAndDecideIfRendered(struct BeamRecord *arg0, ITEM_IDS item, coord3d *arg2, coord3d *arg3); void sub_GAME_7F068190(coord3d *arg0, coord3d *arg1); void inc_curplayer_hitcount_with_weapon(ITEM_IDS item, SHOT_REGISTER shot_register); @@ -333,6 +353,7 @@ s32 currentPlayerGetAmmoCount(AMMOTYPE ammotype); s32 get_civilian_casualties(void); s32 Gun_hand_without_item(enum GUNHAND arg0); void sub_GAME_7F05FB00(enum GUNHAND hand); +void gunSetTracerTarget(coord3d* pos); void bgunCalculateBlend(enum GUNHAND handnum); void gunSetBondWeaponSway(f32 arg0, f32 arg1, f32 speed_verta, f32 speed_theta); @@ -358,8 +379,18 @@ void backstep_through_inventory(void); void gunSetAimType(s32 param_1); void sub_GAME_7F067FBC(f32 turn_x, f32 turn_y); void gunTickGameplay(s32 arg0); +u8 bondwalkItemGetObjectsShootThrough(ITEM_IDS item); +void sub_GAME_7F064720(coord3d* pos); -Gfx *gunDrawHudString(Gfx *gdl, s8 *text, s32 x, s32 halign, s32 y, s32 valign, bool glow); -Gfx *gunDrawHudInteger(Gfx *gdl, s32 value, s32 x, s32 halign, s32 y, s32 valign, bool glow); +Gfx *gunDrawHudString(Gfx *gdl, s8 *text, s32 x, s32 halign, s32 y, s32 valign, bool outline); +Gfx *gunDrawHudInteger(Gfx *gdl, s32 value, s32 x, s32 halign, s32 y, s32 valign, bool outline); +void gunAdvanceBeamTimer(BeamRecord* arg0); +Gfx* watchRenderController(Gfx* gdl, Mtxf* basemtx, s32 envcolour, bool animatebuttons, WatchContButtonPositions* buttonpositions, s8* contpadnum); +Gfx *watchRenderControllerOpaque(Gfx *gdl, Mtxf *basemtx, bool animatebuttons, WatchContButtonPositions *buttonpositions, s8 *contpadnum); + +Gfx *set_enviro_fog_for_items_in_solo_watch_menu(Gfx *gdl, ITEM_IDS itemid, Mtxf *mtx, s32 arg3, s32 arg4); +void gunRenderCasings(Gfx **gdl); +void gunRenderFirstPersonGunModels(Gfx **gdl); +Gfx *generate_ammo_total_microcode(Gfx *gdl); #endif diff --git a/src/game/image.c b/src/game/image.c index 46c74aa2..a29470fd 100644 --- a/src/game/image.c +++ b/src/game/image.c @@ -7,6 +7,9 @@ #include "ramrom.h" #include "decompress.h" + +#define TEX_ALPHA_WEIGHT 961 + // bss //8008C720 struct texpool *ptr_texture_alloc_start; @@ -172,7 +175,7 @@ s32 texInflateZlib(u8 *src, u8 *dst, s32 arg2, s32 forcenumimages, struct texpoo } arg4->rightpos->maxlod = forcenumimages; - arg4->rightpos->unk0c_02 = arg2; + arg4->rightpos->hasExplicitLods = arg2; if (arg2) { @@ -321,7 +324,7 @@ s32 texAlignIndices(u8 *src, s32 width, s32 height, s32 format, u8 *dst) { indicesperbyte = 1; } - else if (format == TEXFORMAT_RGBA16_CI4 || format == TEXFORMAT_0C) + else if (format == TEXFORMAT_RGBA16_CI4 || format == TEXFORMAT_IA16_CI4) { indicesperbyte = 2; } @@ -385,7 +388,7 @@ s32 texShrinkPaletted(u8 *src, u8 *dst, s32 srcwidth, s32 srcheight, s32 format, break; case TEXFORMAT_RGBA16_CI4: - case TEXFORMAT_0C: + case TEXFORMAT_IA16_CI4: aligneddstwidth = (((srcwidth + 1) >> 1) + 15) & 0xff0; alignedsrcwidth = (srcwidth + 15) & 0xff0; break; @@ -486,7 +489,7 @@ s32 texShrinkPaletted(u8 *src, u8 *dst, s32 srcwidth, s32 srcheight, s32 format, return (aligneddstwidth >> 1) * dstheight; - case TEXFORMAT_0C: + case TEXFORMAT_IA16_CI4: for (i = 0; i < srcheight; i += 2) { nextrow = i + 1 < srcheight ? alignedsrcwidth >> 1 : 0; @@ -529,681 +532,279 @@ s32 texShrinkPaletted(u8 *src, u8 *dst, s32 srcwidth, s32 srcheight, s32 format, } -#ifdef NONMATCHING -// https://decomp.me/scratch/m2ol7 79.87% +/** + * Find the palette entry closest to the target colour and return its index. + * Used for texture LOD generation/shrinking a colour-indexed texture (see texShrinkPaletted): the 2x2 + * box filter averages four palette entries, and the average may not be a colour + * the palette already holds, so it has to be requantized to the nearest entry. This allows the LOD + * textures to use existing palettes instead of creating new ones. + * + * The design of the algorithm is to: + * 1) Return an exact match in the palette for the target colour if there is one. + * 2) Failing that, a binary search uses cheap scalar ordering to find a promising region in the palette. + * 3) Perform a more meaningful RGBA comparison on only a small section of the palette. + * + * Stage 2 is an approximation so this function isn't necessarily guaranteed to return the closest matching palette index for a target colour. + * + * Used by TEXFORMAT_RGBA16_CI8, TEXFORMAT_RGBA16_CI4 + * + * @param palette Palette to search, RGBA5551, assumed ordered by the stage 2 key + * @param numcolours Number of entries in palette + * @param r Target red, 0..31 + * @param g Target green, 0..31 + * @param b Target blue, 0..31 + * @param a Target alpha, 0..1 + * @return Index of the closest entry, or 0 if numcolours is not positive + */ s32 texFindClosestColourIndexRGBA(u16 *palette, s32 numcolours, s32 r, s32 g, s32 b, s32 a) { - s32 var_v1; - u16 temp_t6; - s32 temp_t0; - s32 var_a1; - s32 temp_a0; - - s32 loop_start; - s32 loop_end; - - s32 bestindex; - s32 bestvalue; - - u16 local_color; - s32 local_r; - s32 local_g; - s32 local_b; - s32 local_a; - s32 temp_s4; - - temp_t6 = ((r << 11) | (g << 6) | (b << 1) | a); - - for (var_v1 = 0; var_v1 < numcolours; var_v1++) - { - if (temp_t6 == palette[var_v1]) - { - return var_v1; - } - } - - temp_t0 = (r * r) + (g * g) + (b * b) + (a * 0x3C1); - var_v1 = numcolours - 1; - var_a1 = 0; - - // binary search for a region - while (var_v1 - var_a1 >= 2) - { - temp_a0 = (s32) (var_v1 + var_a1) >> 1; - - local_color = palette[temp_a0 * 4]; - local_r = ((s32) local_color >> 0xB) & 0x1F; - local_g = ((s32) local_color >> 0x6) & 0x1F; - local_b = ((s32) local_color >> 0x1) & 0x1F; - local_a = local_color & 1; - - temp_s4 = (local_r * local_r) + (local_g * local_g) + (local_b * local_b) + (local_a * 0x3C1); - - if (temp_s4 < temp_t0) - { - var_a1 = temp_a0; - } - else - { - if (temp_t0 < temp_s4) - { - var_v1 = temp_a0; - } - else - { - var_v1 = temp_a0; - var_a1 = temp_a0; - } - } - } - - loop_start = var_v1 - 4; - if (loop_start < 0) - { - loop_start = 0; - } - - loop_end = var_v1 + 4; - if (loop_end >= numcolours) - { - loop_end = numcolours - 1; - } - - bestindex = 0; - bestvalue = 999999; - - // search for best within the region - for (var_v1 = loop_start; var_v1 < loop_end; var_v1++) - { - local_color = palette[var_v1 * 4]; - local_r = (((s32) local_color >> 0xB) & 0x1F) - r; - local_g = (((s32) local_color >> 0x6) & 0x1F) - g; - local_b = (((s32) local_color >> 0x1) & 0x1F) - b; - local_a = 0x3C1; - if (a == (local_color & 1)) - { - local_a = 0; - } - - temp_s4 = (local_r * local_r) + (local_g * local_g) + (local_b * local_b) + (local_a); - - if (temp_s4 < bestvalue) - { - bestindex = var_v1; - bestvalue = temp_s4; - } - } - - return bestindex; -} - -#else -GLOBAL_ASM( -.text -glabel texFindClosestColourIndexRGBA -/* 0FC2DC 7F0C77AC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0FC2E0 7F0C77B0 AFB2000C */ sw $s2, 0xc($sp) -/* 0FC2E4 7F0C77B4 AFB10008 */ sw $s1, 8($sp) -/* 0FC2E8 7F0C77B8 AFB00004 */ sw $s0, 4($sp) -/* 0FC2EC 7F0C77BC 00C08025 */ move $s0, $a2 -/* 0FC2F0 7F0C77C0 00E08825 */ move $s1, $a3 -/* 0FC2F4 7F0C77C4 00809025 */ move $s2, $a0 -/* 0FC2F8 7F0C77C8 AFB40014 */ sw $s4, 0x14($sp) -/* 0FC2FC 7F0C77CC AFB30010 */ sw $s3, 0x10($sp) -/* 0FC300 7F0C77D0 AFA5001C */ sw $a1, 0x1c($sp) -/* 0FC304 7F0C77D4 18A0003F */ blez $a1, .L7F0C78D4 -/* 0FC308 7F0C77D8 00001825 */ move $v1, $zero -/* 0FC30C 7F0C77DC 30A60003 */ andi $a2, $a1, 3 -/* 0FC310 7F0C77E0 10C00018 */ beqz $a2, .L7F0C7844 -/* 0FC314 7F0C77E4 8FA90028 */ lw $t1, 0x28($sp) -/* 0FC318 7F0C77E8 00007840 */ sll $t7, $zero, 1 -/* 0FC31C 7F0C77EC 8FAA002C */ lw $t2, 0x2c($sp) -/* 0FC320 7F0C77F0 024F1021 */ addu $v0, $s2, $t7 -/* 0FC324 7F0C77F4 0010C2C0 */ sll $t8, $s0, 0xb -/* 0FC328 7F0C77F8 0007C980 */ sll $t9, $a3, 6 -/* 0FC32C 7F0C77FC 03197025 */ or $t6, $t8, $t9 -/* 0FC330 7F0C7800 00097840 */ sll $t7, $t1, 1 -/* 0FC334 7F0C7804 01CFC025 */ or $t8, $t6, $t7 -/* 0FC338 7F0C7808 030A2825 */ or $a1, $t8, $t2 -/* 0FC33C 7F0C780C 30B9FFFF */ andi $t9, $a1, 0xffff -/* 0FC340 7F0C7810 03202825 */ move $a1, $t9 -/* 0FC344 7F0C7814 00C02025 */ move $a0, $a2 -.L7F0C7818: -/* 0FC348 7F0C7818 944E0000 */ lhu $t6, ($v0) -/* 0FC34C 7F0C781C 54AE0004 */ bnel $a1, $t6, .L7F0C7830 -/* 0FC350 7F0C7820 24630001 */ addiu $v1, $v1, 1 -/* 0FC354 7F0C7824 100000E5 */ b .L7F0C7BBC -/* 0FC358 7F0C7828 00601025 */ move $v0, $v1 -/* 0FC35C 7F0C782C 24630001 */ addiu $v1, $v1, 1 -.L7F0C7830: -/* 0FC360 7F0C7830 1483FFF9 */ bne $a0, $v1, .L7F0C7818 -/* 0FC364 7F0C7834 24420002 */ addiu $v0, $v0, 2 -/* 0FC368 7F0C7838 8FAF001C */ lw $t7, 0x1c($sp) -/* 0FC36C 7F0C783C 506F0026 */ beql $v1, $t7, .L7F0C78D8 -/* 0FC370 7F0C7840 8FA6001C */ lw $a2, 0x1c($sp) -.L7F0C7844: -/* 0FC374 7F0C7844 8FA90028 */ lw $t1, 0x28($sp) -/* 0FC378 7F0C7848 0003C040 */ sll $t8, $v1, 1 -/* 0FC37C 7F0C784C 8FAA002C */ lw $t2, 0x2c($sp) -/* 0FC380 7F0C7850 02581021 */ addu $v0, $s2, $t8 -/* 0FC384 7F0C7854 0010CAC0 */ sll $t9, $s0, 0xb -/* 0FC388 7F0C7858 00117180 */ sll $t6, $s1, 6 -/* 0FC38C 7F0C785C 032E7825 */ or $t7, $t9, $t6 -/* 0FC390 7F0C7860 0009C040 */ sll $t8, $t1, 1 -/* 0FC394 7F0C7864 01F8C825 */ or $t9, $t7, $t8 -/* 0FC398 7F0C7868 032A2825 */ or $a1, $t9, $t2 -/* 0FC39C 7F0C786C 30AEFFFF */ andi $t6, $a1, 0xffff -/* 0FC3A0 7F0C7870 01C02825 */ move $a1, $t6 -.L7F0C7874: -/* 0FC3A4 7F0C7874 944F0000 */ lhu $t7, ($v0) -/* 0FC3A8 7F0C7878 54AF0004 */ bnel $a1, $t7, .L7F0C788C -/* 0FC3AC 7F0C787C 94580002 */ lhu $t8, 2($v0) -/* 0FC3B0 7F0C7880 100000CE */ b .L7F0C7BBC -/* 0FC3B4 7F0C7884 00601025 */ move $v0, $v1 -/* 0FC3B8 7F0C7888 94580002 */ lhu $t8, 2($v0) -.L7F0C788C: -/* 0FC3BC 7F0C788C 8FAF001C */ lw $t7, 0x1c($sp) -/* 0FC3C0 7F0C7890 54B80004 */ bnel $a1, $t8, .L7F0C78A4 -/* 0FC3C4 7F0C7894 94590004 */ lhu $t9, 4($v0) -/* 0FC3C8 7F0C7898 100000C8 */ b .L7F0C7BBC -/* 0FC3CC 7F0C789C 24620001 */ addiu $v0, $v1, 1 -/* 0FC3D0 7F0C78A0 94590004 */ lhu $t9, 4($v0) -.L7F0C78A4: -/* 0FC3D4 7F0C78A4 54B90004 */ bnel $a1, $t9, .L7F0C78B8 -/* 0FC3D8 7F0C78A8 944E0006 */ lhu $t6, 6($v0) -/* 0FC3DC 7F0C78AC 100000C3 */ b .L7F0C7BBC -/* 0FC3E0 7F0C78B0 24620002 */ addiu $v0, $v1, 2 -/* 0FC3E4 7F0C78B4 944E0006 */ lhu $t6, 6($v0) -.L7F0C78B8: -/* 0FC3E8 7F0C78B8 54AE0004 */ bnel $a1, $t6, .L7F0C78CC -/* 0FC3EC 7F0C78BC 24630004 */ addiu $v1, $v1, 4 -/* 0FC3F0 7F0C78C0 100000BE */ b .L7F0C7BBC -/* 0FC3F4 7F0C78C4 24620003 */ addiu $v0, $v1, 3 -/* 0FC3F8 7F0C78C8 24630004 */ addiu $v1, $v1, 4 -.L7F0C78CC: -/* 0FC3FC 7F0C78CC 146FFFE9 */ bne $v1, $t7, .L7F0C7874 -/* 0FC400 7F0C78D0 24420008 */ addiu $v0, $v0, 8 -.L7F0C78D4: -/* 0FC404 7F0C78D4 8FA6001C */ lw $a2, 0x1c($sp) -.L7F0C78D8: -/* 0FC408 7F0C78D8 8FA90028 */ lw $t1, 0x28($sp) -/* 0FC40C 7F0C78DC 8FAA002C */ lw $t2, 0x2c($sp) -/* 0FC410 7F0C78E0 24C6FFFF */ addiu $a2, $a2, -1 -/* 0FC414 7F0C78E4 28C10002 */ slti $at, $a2, 2 -/* 0FC418 7F0C78E8 00002825 */ move $a1, $zero -/* 0FC41C 7F0C78EC 1420003A */ bnez $at, .L7F0C79D8 -/* 0FC420 7F0C78F0 00C03825 */ move $a3, $a2 -/* 0FC424 7F0C78F4 02100019 */ multu $s0, $s0 -/* 0FC428 7F0C78F8 0000C012 */ mflo $t8 -/* 0FC42C 7F0C78FC 00000000 */ nop -/* 0FC430 7F0C7900 00000000 */ nop -/* 0FC434 7F0C7904 02310019 */ multu $s1, $s1 -/* 0FC438 7F0C7908 0000C812 */ mflo $t9 -/* 0FC43C 7F0C790C 03197021 */ addu $t6, $t8, $t9 -/* 0FC440 7F0C7910 000AC900 */ sll $t9, $t2, 4 -/* 0FC444 7F0C7914 01290019 */ multu $t1, $t1 -/* 0FC448 7F0C7918 032AC823 */ subu $t9, $t9, $t2 -/* 0FC44C 7F0C791C 0019C980 */ sll $t9, $t9, 6 -/* 0FC450 7F0C7920 032AC821 */ addu $t9, $t9, $t2 -/* 0FC454 7F0C7924 00007812 */ mflo $t7 -/* 0FC458 7F0C7928 01CFC021 */ addu $t8, $t6, $t7 -/* 0FC45C 7F0C792C 03194021 */ addu $t0, $t8, $t9 -/* 0FC460 7F0C7930 00E55821 */ addu $t3, $a3, $a1 -.L7F0C7934: -/* 0FC464 7F0C7934 000B2043 */ sra $a0, $t3, 1 -/* 0FC468 7F0C7938 00047840 */ sll $t7, $a0, 1 -/* 0FC46C 7F0C793C 024FC021 */ addu $t8, $s2, $t7 -/* 0FC470 7F0C7940 97030000 */ lhu $v1, ($t8) -/* 0FC474 7F0C7944 000362C3 */ sra $t4, $v1, 0xb -/* 0FC478 7F0C7948 3199001F */ andi $t9, $t4, 0x1f -/* 0FC47C 7F0C794C 03390019 */ multu $t9, $t9 -/* 0FC480 7F0C7950 00036983 */ sra $t5, $v1, 6 -/* 0FC484 7F0C7954 31AE001F */ andi $t6, $t5, 0x1f -/* 0FC488 7F0C7958 00039843 */ sra $s3, $v1, 1 -/* 0FC48C 7F0C795C 326F001F */ andi $t7, $s3, 0x1f -/* 0FC490 7F0C7960 0000C012 */ mflo $t8 -/* 0FC494 7F0C7964 00000000 */ nop -/* 0FC498 7F0C7968 00000000 */ nop -/* 0FC49C 7F0C796C 01CE0019 */ multu $t6, $t6 -/* 0FC4A0 7F0C7970 0000C812 */ mflo $t9 -/* 0FC4A4 7F0C7974 03197021 */ addu $t6, $t8, $t9 -/* 0FC4A8 7F0C7978 30790001 */ andi $t9, $v1, 1 -/* 0FC4AC 7F0C797C 01EF0019 */ multu $t7, $t7 -/* 0FC4B0 7F0C7980 00007812 */ mflo $t7 -/* 0FC4B4 7F0C7984 01CFC021 */ addu $t8, $t6, $t7 -/* 0FC4B8 7F0C7988 00197100 */ sll $t6, $t9, 4 -/* 0FC4BC 7F0C798C 01D97023 */ subu $t6, $t6, $t9 -/* 0FC4C0 7F0C7990 000E7180 */ sll $t6, $t6, 6 -/* 0FC4C4 7F0C7994 01D97021 */ addu $t6, $t6, $t9 -/* 0FC4C8 7F0C7998 030EA021 */ addu $s4, $t8, $t6 -/* 0FC4CC 7F0C799C 0288082A */ slt $at, $s4, $t0 -/* 0FC4D0 7F0C79A0 50200004 */ beql $at, $zero, .L7F0C79B4 -/* 0FC4D4 7F0C79A4 0114082A */ slt $at, $t0, $s4 -/* 0FC4D8 7F0C79A8 10000007 */ b .L7F0C79C8 -/* 0FC4DC 7F0C79AC 00802825 */ move $a1, $a0 -/* 0FC4E0 7F0C79B0 0114082A */ slt $at, $t0, $s4 -.L7F0C79B4: -/* 0FC4E4 7F0C79B4 10200003 */ beqz $at, .L7F0C79C4 -/* 0FC4E8 7F0C79B8 00803825 */ move $a3, $a0 -/* 0FC4EC 7F0C79BC 10000002 */ b .L7F0C79C8 -/* 0FC4F0 7F0C79C0 00803825 */ move $a3, $a0 -.L7F0C79C4: -/* 0FC4F4 7F0C79C4 00802825 */ move $a1, $a0 -.L7F0C79C8: -/* 0FC4F8 7F0C79C8 00E57823 */ subu $t7, $a3, $a1 -/* 0FC4FC 7F0C79CC 29E10002 */ slti $at, $t7, 2 -/* 0FC500 7F0C79D0 5020FFD8 */ beql $at, $zero, .L7F0C7934 -/* 0FC504 7F0C79D4 00E55821 */ addu $t3, $a3, $a1 -.L7F0C79D8: -/* 0FC508 7F0C79D8 24E5FFFC */ addiu $a1, $a3, -4 -/* 0FC50C 7F0C79DC 04A10002 */ bgez $a1, .L7F0C79E8 -/* 0FC510 7F0C79E0 8FB9001C */ lw $t9, 0x1c($sp) -/* 0FC514 7F0C79E4 00002825 */ move $a1, $zero -.L7F0C79E8: -/* 0FC518 7F0C79E8 24E70004 */ addiu $a3, $a3, 4 -/* 0FC51C 7F0C79EC 00F9082A */ slt $at, $a3, $t9 -/* 0FC520 7F0C79F0 14200002 */ bnez $at, .L7F0C79FC -/* 0FC524 7F0C79F4 3C14000F */ lui $s4, (0x000F423F >> 16) # lui $s4, 0xf -/* 0FC528 7F0C79F8 00C03825 */ move $a3, $a2 -.L7F0C79FC: -/* 0FC52C 7F0C79FC 3694423F */ ori $s4, (0x000F423F & 0xFFFF) # ori $s4, $s4, 0x423f -/* 0FC530 7F0C7A00 00E5082A */ slt $at, $a3, $a1 -/* 0FC534 7F0C7A04 00004025 */ move $t0, $zero -/* 0FC538 7F0C7A08 02803025 */ move $a2, $s4 -/* 0FC53C 7F0C7A0C 1420006A */ bnez $at, .L7F0C7BB8 -/* 0FC540 7F0C7A10 00A02025 */ move $a0, $a1 -/* 0FC544 7F0C7A14 00E51023 */ subu $v0, $a3, $a1 -/* 0FC548 7F0C7A18 24420001 */ addiu $v0, $v0, 1 -/* 0FC54C 7F0C7A1C 30580001 */ andi $t8, $v0, 1 -/* 0FC550 7F0C7A20 13000023 */ beqz $t8, .L7F0C7AB0 -/* 0FC554 7F0C7A24 00057040 */ sll $t6, $a1, 1 -/* 0FC558 7F0C7A28 024E7821 */ addu $t7, $s2, $t6 -/* 0FC55C 7F0C7A2C 95E20000 */ lhu $v0, ($t7) -/* 0FC560 7F0C7A30 24A40001 */ addiu $a0, $a1, 1 -/* 0FC564 7F0C7A34 240303C1 */ li $v1, 961 -/* 0FC568 7F0C7A38 30590001 */ andi $t9, $v0, 1 -/* 0FC56C 7F0C7A3C 15590003 */ bne $t2, $t9, .L7F0C7A4C -/* 0FC570 7F0C7A40 0002C2C3 */ sra $t8, $v0, 0xb -/* 0FC574 7F0C7A44 10000001 */ b .L7F0C7A4C -/* 0FC578 7F0C7A48 00001825 */ move $v1, $zero -.L7F0C7A4C: -/* 0FC57C 7F0C7A4C 330E001F */ andi $t6, $t8, 0x1f -/* 0FC580 7F0C7A50 01D05823 */ subu $t3, $t6, $s0 -/* 0FC584 7F0C7A54 016B0019 */ multu $t3, $t3 -/* 0FC588 7F0C7A58 00027983 */ sra $t7, $v0, 6 -/* 0FC58C 7F0C7A5C 31F9001F */ andi $t9, $t7, 0x1f -/* 0FC590 7F0C7A60 03316023 */ subu $t4, $t9, $s1 -/* 0FC594 7F0C7A64 0002C043 */ sra $t8, $v0, 1 -/* 0FC598 7F0C7A68 330E001F */ andi $t6, $t8, 0x1f -/* 0FC59C 7F0C7A6C 01C96823 */ subu $t5, $t6, $t1 -/* 0FC5A0 7F0C7A70 00007812 */ mflo $t7 -/* 0FC5A4 7F0C7A74 006FC821 */ addu $t9, $v1, $t7 -/* 0FC5A8 7F0C7A78 00000000 */ nop -/* 0FC5AC 7F0C7A7C 018C0019 */ multu $t4, $t4 -/* 0FC5B0 7F0C7A80 0000C012 */ mflo $t8 -/* 0FC5B4 7F0C7A84 03387021 */ addu $t6, $t9, $t8 -/* 0FC5B8 7F0C7A88 24F90001 */ addiu $t9, $a3, 1 -/* 0FC5BC 7F0C7A8C 01AD0019 */ multu $t5, $t5 -/* 0FC5C0 7F0C7A90 00007812 */ mflo $t7 -/* 0FC5C4 7F0C7A94 01CF9821 */ addu $s3, $t6, $t7 -/* 0FC5C8 7F0C7A98 0274082A */ slt $at, $s3, $s4 -/* 0FC5CC 7F0C7A9C 10200003 */ beqz $at, .L7F0C7AAC -/* 0FC5D0 7F0C7AA0 00000000 */ nop -/* 0FC5D4 7F0C7AA4 00A04025 */ move $t0, $a1 -/* 0FC5D8 7F0C7AA8 02603025 */ move $a2, $s3 -.L7F0C7AAC: -/* 0FC5DC 7F0C7AAC 13240042 */ beq $t9, $a0, .L7F0C7BB8 -.L7F0C7AB0: -/* 0FC5E0 7F0C7AB0 0004C040 */ sll $t8, $a0, 1 -/* 0FC5E4 7F0C7AB4 02582821 */ addu $a1, $s2, $t8 -.L7F0C7AB8: -/* 0FC5E8 7F0C7AB8 94A20000 */ lhu $v0, ($a1) -/* 0FC5EC 7F0C7ABC 240303C1 */ li $v1, 961 -/* 0FC5F0 7F0C7AC0 304E0001 */ andi $t6, $v0, 1 -/* 0FC5F4 7F0C7AC4 154E0003 */ bne $t2, $t6, .L7F0C7AD4 -/* 0FC5F8 7F0C7AC8 00027AC3 */ sra $t7, $v0, 0xb -/* 0FC5FC 7F0C7ACC 10000001 */ b .L7F0C7AD4 -/* 0FC600 7F0C7AD0 00001825 */ move $v1, $zero -.L7F0C7AD4: -/* 0FC604 7F0C7AD4 31F9001F */ andi $t9, $t7, 0x1f -/* 0FC608 7F0C7AD8 03306023 */ subu $t4, $t9, $s0 -/* 0FC60C 7F0C7ADC 018C0019 */ multu $t4, $t4 -/* 0FC610 7F0C7AE0 0002C183 */ sra $t8, $v0, 6 -/* 0FC614 7F0C7AE4 330E001F */ andi $t6, $t8, 0x1f -/* 0FC618 7F0C7AE8 01D16823 */ subu $t5, $t6, $s1 -/* 0FC61C 7F0C7AEC 00027843 */ sra $t7, $v0, 1 -/* 0FC620 7F0C7AF0 31F9001F */ andi $t9, $t7, 0x1f -/* 0FC624 7F0C7AF4 03299023 */ subu $s2, $t9, $t1 -/* 0FC628 7F0C7AF8 0000C012 */ mflo $t8 -/* 0FC62C 7F0C7AFC 00787021 */ addu $t6, $v1, $t8 -/* 0FC630 7F0C7B00 240303C1 */ li $v1, 961 -/* 0FC634 7F0C7B04 01AD0019 */ multu $t5, $t5 -/* 0FC638 7F0C7B08 00007812 */ mflo $t7 -/* 0FC63C 7F0C7B0C 01CFC821 */ addu $t9, $t6, $t7 -/* 0FC640 7F0C7B10 00000000 */ nop -/* 0FC644 7F0C7B14 02520019 */ multu $s2, $s2 -/* 0FC648 7F0C7B18 0000C012 */ mflo $t8 -/* 0FC64C 7F0C7B1C 03389821 */ addu $s3, $t9, $t8 -/* 0FC650 7F0C7B20 0266082A */ slt $at, $s3, $a2 -/* 0FC654 7F0C7B24 50200004 */ beql $at, $zero, .L7F0C7B38 -/* 0FC658 7F0C7B28 94A20002 */ lhu $v0, 2($a1) -/* 0FC65C 7F0C7B2C 00804025 */ move $t0, $a0 -/* 0FC660 7F0C7B30 02603025 */ move $a2, $s3 -/* 0FC664 7F0C7B34 94A20002 */ lhu $v0, 2($a1) -.L7F0C7B38: -/* 0FC668 7F0C7B38 304E0001 */ andi $t6, $v0, 1 -/* 0FC66C 7F0C7B3C 154E0003 */ bne $t2, $t6, .L7F0C7B4C -/* 0FC670 7F0C7B40 00027AC3 */ sra $t7, $v0, 0xb -/* 0FC674 7F0C7B44 10000001 */ b .L7F0C7B4C -/* 0FC678 7F0C7B48 00001825 */ move $v1, $zero -.L7F0C7B4C: -/* 0FC67C 7F0C7B4C 31F9001F */ andi $t9, $t7, 0x1f -/* 0FC680 7F0C7B50 03305823 */ subu $t3, $t9, $s0 -/* 0FC684 7F0C7B54 016B0019 */ multu $t3, $t3 -/* 0FC688 7F0C7B58 0002C183 */ sra $t8, $v0, 6 -/* 0FC68C 7F0C7B5C 330E001F */ andi $t6, $t8, 0x1f -/* 0FC690 7F0C7B60 01D16023 */ subu $t4, $t6, $s1 -/* 0FC694 7F0C7B64 00027843 */ sra $t7, $v0, 1 -/* 0FC698 7F0C7B68 31F9001F */ andi $t9, $t7, 0x1f -/* 0FC69C 7F0C7B6C 03296823 */ subu $t5, $t9, $t1 -/* 0FC6A0 7F0C7B70 0000C012 */ mflo $t8 -/* 0FC6A4 7F0C7B74 00787021 */ addu $t6, $v1, $t8 -/* 0FC6A8 7F0C7B78 00000000 */ nop -/* 0FC6AC 7F0C7B7C 018C0019 */ multu $t4, $t4 -/* 0FC6B0 7F0C7B80 00007812 */ mflo $t7 -/* 0FC6B4 7F0C7B84 01CFC821 */ addu $t9, $t6, $t7 -/* 0FC6B8 7F0C7B88 24EE0001 */ addiu $t6, $a3, 1 -/* 0FC6BC 7F0C7B8C 01AD0019 */ multu $t5, $t5 -/* 0FC6C0 7F0C7B90 0000C012 */ mflo $t8 -/* 0FC6C4 7F0C7B94 03389021 */ addu $s2, $t9, $t8 -/* 0FC6C8 7F0C7B98 0246082A */ slt $at, $s2, $a2 -/* 0FC6CC 7F0C7B9C 50200004 */ beql $at, $zero, .L7F0C7BB0 -/* 0FC6D0 7F0C7BA0 24840002 */ addiu $a0, $a0, 2 -/* 0FC6D4 7F0C7BA4 24880001 */ addiu $t0, $a0, 1 -/* 0FC6D8 7F0C7BA8 02403025 */ move $a2, $s2 -/* 0FC6DC 7F0C7BAC 24840002 */ addiu $a0, $a0, 2 -.L7F0C7BB0: -/* 0FC6E0 7F0C7BB0 15C4FFC1 */ bne $t6, $a0, .L7F0C7AB8 -/* 0FC6E4 7F0C7BB4 24A50004 */ addiu $a1, $a1, 4 -.L7F0C7BB8: -/* 0FC6E8 7F0C7BB8 01001025 */ move $v0, $t0 -.L7F0C7BBC: -/* 0FC6EC 7F0C7BBC 8FB00004 */ lw $s0, 4($sp) -/* 0FC6F0 7F0C7BC0 8FB10008 */ lw $s1, 8($sp) -/* 0FC6F4 7F0C7BC4 8FB2000C */ lw $s2, 0xc($sp) -/* 0FC6F8 7F0C7BC8 8FB30010 */ lw $s3, 0x10($sp) -/* 0FC6FC 7F0C7BCC 8FB40014 */ lw $s4, 0x14($sp) -/* 0FC700 7F0C7BD0 03E00008 */ jr $ra -/* 0FC704 7F0C7BD4 27BD0018 */ addiu $sp, $sp, 0x18 -) -#endif - - - - - -#ifdef NONMATCHING -// https://decomp.me/scratch/tmXxj 99.64% -s32 texFindClosestColourIndexIA(u16 *palette, s32 numcolours, s32 intensity, s32 alpha) -{ - s32 loop_start; - s32 loop_end; - s32 i; - s32 j; - - s32 bestindex; - s32 bestvalue; - s32 low; - s32 colour; - - s32 value; - s32 a; - s32 b; - s32 sum; - - u32 sum2; // is this real? - - // check palette for existing color - colour = (intensity << 8) | alpha; + s32 high; + s32 i; + u16 targetcolour; + s32 targetmagnitude; + + // Cursor into the palette: the midpoint in stage 2, the scan position in stage 3. + s32 paletteidx; + + u16 colour; + s32 red; + s32 green; + s32 blue; + s32 alpha; + s32 magnitude; + + s32 diffr; + s32 diffg; + s32 diffb; + s32 alphapenalty; + s32 distance; + + s32 bestindex; + s32 bestvalue; + + // Stage 1: scan the whole palette for a matching colour and return its index if one is found. + targetcolour = ((r << 11) | (g << 6) | (b << 1) | a); + for (i = 0; i < numcolours; i++) { - if (palette[i] == (colour & 0xFFFFU)) + if (targetcolour == palette[i]) { return i; } } - - // binary search for a region + + /** + * Stage 2: Find a promising palette neighborhood. + */ low = 0; - loop_end = numcolours - 1; - colour = (intensity * intensity) + (alpha * alpha); - - while ((loop_end - low) >= 2) + high = numcolours - 1; + // TEX_ALPHA_WEIGHT = 31^2, the maximum possible squared difference in one five-bit color channel. + targetmagnitude = (r * r) + (g * g) + (b * b) + (a * TEX_ALPHA_WEIGHT); + + while (high - low >= 2) { - s32 index; - - index = (loop_end + low) >> 1; - value = palette[index]; - a = (((s32) value) >> 8) & 0xFF; - b = value & 0xFF; - sum = (a * a) + (b * b); - if (sum < colour) + paletteidx = (high + low) >> 1; + + colour = palette[paletteidx]; + red = (colour >> 11) & 0x1F; + green = (colour >> 6) & 0x1F; + blue = (colour >> 1) & 0x1F; + alpha = colour & 1; + + magnitude = (red * red) + (green * green) + (blue * blue) + (alpha * TEX_ALPHA_WEIGHT); + + if (magnitude < targetmagnitude) { - low = index; + low = paletteidx; continue; } - if (colour < sum) + + if (targetmagnitude < magnitude) { - loop_end = index; + high = paletteidx; } else { - low = index; - loop_end = index; + high = paletteidx; + low = paletteidx; } } - - loop_start = loop_end - 4; - if (loop_start < 0) + + // Stage 3: Search the nearby palette entries accurately. + low = high - 4; + + if (low < 0) { - loop_start = 0; + low = 0; + } + + high += 4; + + if (high >= numcolours) + { + high = numcolours - 1; + } + + bestindex = 0; + bestvalue = 999999; + + for (paletteidx = low; paletteidx <= high; paletteidx++) + { + colour = palette[paletteidx]; + diffr = ((colour >> 11) & 0x1F) - r; + diffg = ((colour >> 6) & 0x1F) - g; + diffb = ((colour >> 1) & 0x1F) - b; + + // An alpha mismatch costs 961, strongly discouraging a palette entry with the wrong transparency. + alphapenalty = (a == (colour & 1)) ? 0 : TEX_ALPHA_WEIGHT; + + distance = alphapenalty; + distance += diffr * diffr; + distance += diffg * diffg; + distance += diffb * diffb; + + if (distance < bestvalue) + { + bestindex = paletteidx; + bestvalue = distance; + } + } + + return bestindex; +} + + +/** + * Find the palette entry closest to the given intensity/alpha pair and return its index. + * + * Used by TEXFORMAT_IA16_CI8 and TEXFORMAT_IA16_CI4 to + * requantize box-filtered averages back onto the palette. + * + * Colours are IA16, packed iiiiiiiiaaaaaaaa, intensity and alpha both 0..255. + * + * @param palette Palette to search, IA16, assumed ordered by the stage 2 key + * @param numcolours Number of entries in palette + * @param intensity Target intensity, 0..255 + * @param alpha Target alpha, 0..255 + * @return Index of the closest entry, or 0 if numcolours is not positive + */ +s32 texFindClosestColourIndexIA(u16 *palette, s32 numcolours, s32 intensity, s32 alpha) +{ + s32 scanstart; + s32 high; + s32 i; + s32 scanidx; + s32 bestindex; + s32 bestvalue; + s32 low; + s32 targetcolour; + s32 targetmagnitude; + s32 colour; + s32 entryintensity; + s32 entryalpha; + s32 magnitude; + s32 diffi; + s32 diffa; + s32 distance; + + // Stage 1: scan the whole palette for a matching intensity and return its index if one is found. + targetcolour = (intensity << 8) | alpha; + + for (i = 0; i < numcolours; i++) + { + if ((u16)targetcolour == palette[i]) + { + return i; + } + } + + // Stage 2: binary search by squared magnitude. + low = 0; + high = numcolours - 1; + targetmagnitude = (intensity * intensity) + (alpha * alpha); + + while (high - low >= 2) + { + s32 mid; + + mid = (high + low) >> 1; + colour = palette[mid]; + + entryintensity = (colour >> 8) & 0xFF; + entryalpha = colour & 0xFF; + magnitude = (entryintensity * entryintensity) + (entryalpha * entryalpha); + + if (magnitude < targetmagnitude) + { + low = mid; + continue; + } + + if (targetmagnitude < magnitude) + { + high = mid; + } + else + { + // Equal magnitude. Collapse the window to end the search here. + low = mid; + high = mid; + } + } + + // Stage 3: widen the window by four entries either side and clamp it. + scanstart = high - 4; + scanidx = scanstart; + high += 4; + + if (scanidx < 0) + { + scanstart = 0; + } + + if (high >= numcolours) + { + high = numcolours - 1; } - loop_end += 4; - if (loop_end >= numcolours) - { - loop_end = numcolours - 1; - } - - // search for best within the region + /* 999999 is an unreachable sentinel: the worst possible distance is + * 2 * 255 * 255 = 130050. */ bestindex = 0; bestvalue = 999999; - for (j = loop_start; j <= loop_end; j++) + scanidx = scanstart; + + if (scanidx <= high) { - value = palette[j]; - a = ((value >> 8) & 0xff) - intensity; - b = (value & 0xff) - alpha; - sum = (a * a) + (b * b); + s32 scanend; - sum2 = sum; - - if (sum < bestvalue) + for (;;) { - bestindex = j; - bestvalue = sum; + colour = palette[scanidx]; + + diffi = ((colour >> 8) & 0xff) - intensity; + diffa = (colour & 0xff) - alpha; + distance = (diffi * diffi) + (diffa * diffa); + scanend = high + 1; + + if (distance < bestvalue) + { + bestindex = scanidx; + bestvalue = distance; + } + + scanidx++; + + if (scanend == scanidx) + { + break; + } } - - // Seems to need to be any variable used in the loop here? - if (j); } - + return bestindex; } -#else -GLOBAL_ASM( -.text -glabel texFindClosestColourIndexIA -/* 0FC708 7F0C7BD8 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0FC70C 7F0C7BDC AFB1000C */ sw $s1, 0xc($sp) -/* 0FC710 7F0C7BE0 AFB00008 */ sw $s0, 8($sp) -/* 0FC714 7F0C7BE4 18A00030 */ blez $a1, .L7F0C7CA8 -/* 0FC718 7F0C7BE8 00001825 */ move $v1, $zero -/* 0FC71C 7F0C7BEC 30AA0003 */ andi $t2, $a1, 3 -/* 0FC720 7F0C7BF0 11400010 */ beqz $t2, .L7F0C7C34 -/* 0FC724 7F0C7BF4 01404025 */ move $t0, $t2 -/* 0FC728 7F0C7BF8 00067A00 */ sll $t7, $a2, 8 -/* 0FC72C 7F0C7BFC 01E74825 */ or $t1, $t7, $a3 -/* 0FC730 7F0C7C00 3138FFFF */ andi $t8, $t1, 0xffff -/* 0FC734 7F0C7C04 00007040 */ sll $t6, $zero, 1 -/* 0FC738 7F0C7C08 008E1021 */ addu $v0, $a0, $t6 -/* 0FC73C 7F0C7C0C 03004825 */ move $t1, $t8 -.L7F0C7C10: -/* 0FC740 7F0C7C10 94590000 */ lhu $t9, ($v0) -/* 0FC744 7F0C7C14 55390004 */ bnel $t1, $t9, .L7F0C7C28 -/* 0FC748 7F0C7C18 24630001 */ addiu $v1, $v1, 1 -/* 0FC74C 7F0C7C1C 10000073 */ b .L7F0C7DEC -/* 0FC750 7F0C7C20 00601025 */ move $v0, $v1 -/* 0FC754 7F0C7C24 24630001 */ addiu $v1, $v1, 1 -.L7F0C7C28: -/* 0FC758 7F0C7C28 1503FFF9 */ bne $t0, $v1, .L7F0C7C10 -/* 0FC75C 7F0C7C2C 24420002 */ addiu $v0, $v0, 2 -/* 0FC760 7F0C7C30 1065001D */ beq $v1, $a1, .L7F0C7CA8 -.L7F0C7C34: -/* 0FC764 7F0C7C34 00067A00 */ sll $t7, $a2, 8 -/* 0FC768 7F0C7C38 01E74825 */ or $t1, $t7, $a3 -/* 0FC76C 7F0C7C3C 3138FFFF */ andi $t8, $t1, 0xffff -/* 0FC770 7F0C7C40 00037040 */ sll $t6, $v1, 1 -/* 0FC774 7F0C7C44 008E1021 */ addu $v0, $a0, $t6 -/* 0FC778 7F0C7C48 03004825 */ move $t1, $t8 -.L7F0C7C4C: -/* 0FC77C 7F0C7C4C 94590000 */ lhu $t9, ($v0) -/* 0FC780 7F0C7C50 55390004 */ bnel $t1, $t9, .L7F0C7C64 -/* 0FC784 7F0C7C54 944E0002 */ lhu $t6, 2($v0) -/* 0FC788 7F0C7C58 10000064 */ b .L7F0C7DEC -/* 0FC78C 7F0C7C5C 00601025 */ move $v0, $v1 -/* 0FC790 7F0C7C60 944E0002 */ lhu $t6, 2($v0) -.L7F0C7C64: -/* 0FC794 7F0C7C64 552E0004 */ bnel $t1, $t6, .L7F0C7C78 -/* 0FC798 7F0C7C68 944F0004 */ lhu $t7, 4($v0) -/* 0FC79C 7F0C7C6C 1000005F */ b .L7F0C7DEC -/* 0FC7A0 7F0C7C70 24620001 */ addiu $v0, $v1, 1 -/* 0FC7A4 7F0C7C74 944F0004 */ lhu $t7, 4($v0) -.L7F0C7C78: -/* 0FC7A8 7F0C7C78 552F0004 */ bnel $t1, $t7, .L7F0C7C8C -/* 0FC7AC 7F0C7C7C 94580006 */ lhu $t8, 6($v0) -/* 0FC7B0 7F0C7C80 1000005A */ b .L7F0C7DEC -/* 0FC7B4 7F0C7C84 24620002 */ addiu $v0, $v1, 2 -/* 0FC7B8 7F0C7C88 94580006 */ lhu $t8, 6($v0) -.L7F0C7C8C: -/* 0FC7BC 7F0C7C8C 55380004 */ bnel $t1, $t8, .L7F0C7CA0 -/* 0FC7C0 7F0C7C90 24630004 */ addiu $v1, $v1, 4 -/* 0FC7C4 7F0C7C94 10000055 */ b .L7F0C7DEC -/* 0FC7C8 7F0C7C98 24620003 */ addiu $v0, $v1, 3 -/* 0FC7CC 7F0C7C9C 24630004 */ addiu $v1, $v1, 4 -.L7F0C7CA0: -/* 0FC7D0 7F0C7CA0 1465FFEA */ bne $v1, $a1, .L7F0C7C4C -/* 0FC7D4 7F0C7CA4 24420008 */ addiu $v0, $v0, 8 -.L7F0C7CA8: -/* 0FC7D8 7F0C7CA8 24A8FFFF */ addiu $t0, $a1, -1 -/* 0FC7DC 7F0C7CAC 29010002 */ slti $at, $t0, 2 -/* 0FC7E0 7F0C7CB0 00001025 */ move $v0, $zero -/* 0FC7E4 7F0C7CB4 14200027 */ bnez $at, .L7F0C7D54 -/* 0FC7E8 7F0C7CB8 01001825 */ move $v1, $t0 -/* 0FC7EC 7F0C7CBC 00C60019 */ multu $a2, $a2 -/* 0FC7F0 7F0C7CC0 0000C812 */ mflo $t9 -/* 0FC7F4 7F0C7CC4 00000000 */ nop -/* 0FC7F8 7F0C7CC8 00000000 */ nop -/* 0FC7FC 7F0C7CCC 00E70019 */ multu $a3, $a3 -/* 0FC800 7F0C7CD0 00007012 */ mflo $t6 -/* 0FC804 7F0C7CD4 032E4821 */ addu $t1, $t9, $t6 -/* 0FC808 7F0C7CD8 00000000 */ nop -/* 0FC80C 7F0C7CDC 00625821 */ addu $t3, $v1, $v0 -.L7F0C7CE0: -/* 0FC810 7F0C7CE0 000B5043 */ sra $t2, $t3, 1 -/* 0FC814 7F0C7CE4 000AC040 */ sll $t8, $t2, 1 -/* 0FC818 7F0C7CE8 0098C821 */ addu $t9, $a0, $t8 -/* 0FC81C 7F0C7CEC 972C0000 */ lhu $t4, ($t9) -/* 0FC820 7F0C7CF0 000C6A03 */ sra $t5, $t4, 8 -/* 0FC824 7F0C7CF4 31AE00FF */ andi $t6, $t5, 0xff -/* 0FC828 7F0C7CF8 01CE0019 */ multu $t6, $t6 -/* 0FC82C 7F0C7CFC 319000FF */ andi $s0, $t4, 0xff -/* 0FC830 7F0C7D00 00007812 */ mflo $t7 -/* 0FC834 7F0C7D04 00000000 */ nop -/* 0FC838 7F0C7D08 00000000 */ nop -/* 0FC83C 7F0C7D0C 02100019 */ multu $s0, $s0 -/* 0FC840 7F0C7D10 0000C012 */ mflo $t8 -/* 0FC844 7F0C7D14 01F88821 */ addu $s1, $t7, $t8 -/* 0FC848 7F0C7D18 0229082A */ slt $at, $s1, $t1 -/* 0FC84C 7F0C7D1C 50200004 */ beql $at, $zero, .L7F0C7D30 -/* 0FC850 7F0C7D20 0131082A */ slt $at, $t1, $s1 -/* 0FC854 7F0C7D24 10000007 */ b .L7F0C7D44 -/* 0FC858 7F0C7D28 01401025 */ move $v0, $t2 -/* 0FC85C 7F0C7D2C 0131082A */ slt $at, $t1, $s1 -.L7F0C7D30: -/* 0FC860 7F0C7D30 10200003 */ beqz $at, .L7F0C7D40 -/* 0FC864 7F0C7D34 01401825 */ move $v1, $t2 -/* 0FC868 7F0C7D38 10000002 */ b .L7F0C7D44 -/* 0FC86C 7F0C7D3C 01401825 */ move $v1, $t2 -.L7F0C7D40: -/* 0FC870 7F0C7D40 01401025 */ move $v0, $t2 -.L7F0C7D44: -/* 0FC874 7F0C7D44 0062C823 */ subu $t9, $v1, $v0 -/* 0FC878 7F0C7D48 2B210002 */ slti $at, $t9, 2 -/* 0FC87C 7F0C7D4C 5020FFE4 */ beql $at, $zero, .L7F0C7CE0 -/* 0FC880 7F0C7D50 00625821 */ addu $t3, $v1, $v0 -.L7F0C7D54: -/* 0FC884 7F0C7D54 2462FFFC */ addiu $v0, $v1, -4 -/* 0FC888 7F0C7D58 04410002 */ bgez $v0, .L7F0C7D64 -/* 0FC88C 7F0C7D5C 24630004 */ addiu $v1, $v1, 4 -/* 0FC890 7F0C7D60 00001025 */ move $v0, $zero -.L7F0C7D64: -/* 0FC894 7F0C7D64 0065082A */ slt $at, $v1, $a1 -/* 0FC898 7F0C7D68 14200002 */ bnez $at, .L7F0C7D74 -/* 0FC89C 7F0C7D6C 00002825 */ move $a1, $zero -/* 0FC8A0 7F0C7D70 01001825 */ move $v1, $t0 -.L7F0C7D74: -/* 0FC8A4 7F0C7D74 3C08000F */ lui $t0, (0x000F423F >> 16) # lui $t0, 0xf -/* 0FC8A8 7F0C7D78 0062082A */ slt $at, $v1, $v0 -/* 0FC8AC 7F0C7D7C 3508423F */ ori $t0, (0x000F423F & 0xFFFF) # ori $t0, $t0, 0x423f -/* 0FC8B0 7F0C7D80 14200019 */ bnez $at, .L7F0C7DE8 -/* 0FC8B4 7F0C7D84 00405025 */ move $t2, $v0 -/* 0FC8B8 7F0C7D88 00027040 */ sll $t6, $v0, 1 -/* 0FC8BC 7F0C7D8C 008E1021 */ addu $v0, $a0, $t6 -/* 0FC8C0 7F0C7D90 246B0001 */ addiu $t3, $v1, 1 -.L7F0C7D94: -/* 0FC8C4 7F0C7D94 944C0000 */ lhu $t4, ($v0) -/* 0FC8C8 7F0C7D98 000C7A03 */ sra $t7, $t4, 8 -/* 0FC8CC 7F0C7D9C 31F800FF */ andi $t8, $t7, 0xff -/* 0FC8D0 7F0C7DA0 03061823 */ subu $v1, $t8, $a2 -/* 0FC8D4 7F0C7DA4 00630019 */ multu $v1, $v1 -/* 0FC8D8 7F0C7DA8 319900FF */ andi $t9, $t4, 0xff -/* 0FC8DC 7F0C7DAC 03272023 */ subu $a0, $t9, $a3 -/* 0FC8E0 7F0C7DB0 00007012 */ mflo $t6 -/* 0FC8E4 7F0C7DB4 00000000 */ nop -/* 0FC8E8 7F0C7DB8 00000000 */ nop -/* 0FC8EC 7F0C7DBC 00840019 */ multu $a0, $a0 -/* 0FC8F0 7F0C7DC0 00007812 */ mflo $t7 -/* 0FC8F4 7F0C7DC4 01CF4821 */ addu $t1, $t6, $t7 -/* 0FC8F8 7F0C7DC8 0128082A */ slt $at, $t1, $t0 -/* 0FC8FC 7F0C7DCC 50200004 */ beql $at, $zero, .L7F0C7DE0 -/* 0FC900 7F0C7DD0 254A0001 */ addiu $t2, $t2, 1 -/* 0FC904 7F0C7DD4 01402825 */ move $a1, $t2 -/* 0FC908 7F0C7DD8 01204025 */ move $t0, $t1 -/* 0FC90C 7F0C7DDC 254A0001 */ addiu $t2, $t2, 1 -.L7F0C7DE0: -/* 0FC910 7F0C7DE0 156AFFEC */ bne $t3, $t2, .L7F0C7D94 -/* 0FC914 7F0C7DE4 24420002 */ addiu $v0, $v0, 2 -.L7F0C7DE8: -/* 0FC918 7F0C7DE8 00A01025 */ move $v0, $a1 -.L7F0C7DEC: -/* 0FC91C 7F0C7DEC 8FB00008 */ lw $s0, 8($sp) -/* 0FC920 7F0C7DF0 8FB1000C */ lw $s1, 0xc($sp) -/* 0FC924 7F0C7DF4 03E00008 */ jr $ra -/* 0FC928 7F0C7DF8 27BD0010 */ addiu $sp, $sp, 0x10 -) -#endif /** @@ -1243,7 +844,7 @@ s32 texInflateNonZlib(u8 *src, u8 *dst, s32 arg2, s32 forcenumimages, struct tex numimages = arg2 && forcenumimages ? forcenumimages : 1; arg4->rightpos->maxlod = forcenumimages; - arg4->rightpos->unk0c_02 = arg2; + arg4->rightpos->hasExplicitLods = arg2; if (arg2) { @@ -2588,7 +2189,7 @@ void texSwapAltRowBytes(u8 *dst, s32 width, s32 height, s32 format) case TEXFORMAT_IA4: case TEXFORMAT_I4: case TEXFORMAT_RGBA16_CI4: - case TEXFORMAT_0C: + case TEXFORMAT_IA16_CI4: alignedwidth = ((width + 0xf) & 0xff0) >> 3; break; } diff --git a/src/game/image.h b/src/game/image.h index 9d8c19c1..f9f01738 100644 --- a/src/game/image.h +++ b/src/game/image.h @@ -16,7 +16,7 @@ #define TEXFORMAT_RGBA16_CI8 0x09 // 16-bit 5551 paletted colour with 8-bit palette indexes #define TEXFORMAT_RGBA16_CI4 0x0a // 16-bit 5551 paletted colour with 4-bit palette indexes #define TEXFORMAT_IA16_CI8 0x0b // 16-bit 88 paletted greyscale+alpha with 8-bit palette indexes -#define TEXFORMAT_0C 0x0c +#define TEXFORMAT_IA16_CI4 0x0c // 16-bit 88 paletted greyscale+alpha with 4-bit palette indexes #define TEXCOMPMETHOD_UNCOMPRESSED0 0 #define TEXCOMPMETHOD_UNCOMPRESSED1 1 @@ -47,7 +47,7 @@ struct tex { /*0x0b*/ u8 gbiformat : 3; /*0x0b*/ u8 depth : 2; /*0x0c*/ u32 lutmodeindex : 2; - /*0x0c*/ u32 unk0c_02 : 1; + /*0x0c*/ u32 hasExplicitLods : 1; /*0x0c*/ u32 unk0c_03 : 1; /*0x0c*/ u32 next : 24; }; @@ -55,7 +55,7 @@ struct tex { struct image_entry { u8 hitSound : 4; // HitType-Sound (should be enum HIT_TYPE, but it needs to be unsigned) - HIT_TYPE hitTexture : 4; // HitType-Texture + u32 hitTexture : 4; // HitType-Texture u32 dataoffset : 24; // this is u32 Size:24 - 24bit size/address u32 flag3 : 4; // Detailflag1 used once with value 0x38D2 (S/T offset of detail) u32 flag4 : 4; diff --git a/src/game/image_bank.h b/src/game/image_bank.h index 31f055fb..85ffa545 100644 --- a/src/game/image_bank.h +++ b/src/game/image_bank.h @@ -14,10 +14,18 @@ extern struct sImageTableEntry *monitorimages; extern struct sImageTableEntry *mpcharselimages; extern struct sImageTableEntry *mpradarimages; extern struct sImageTableEntry *impactimages; +extern struct sImageTableEntry *explosion_smokeimages; +extern struct sImageTableEntry *scattered_explosions; +extern struct sImageTableEntry *flareimage2; +extern struct sImageTableEntry *glassoverlayimage; +extern struct sImageTableEntry *flareimage3; +extern struct sImageTableEntry *flareimage4; +extern struct sImageTableEntry *flareimage5; extern u8* img_curpos; extern s32 img_bitcount; extern s32 *pGlobalimagetable; +extern s32 globalbank_rdram_offset; void texReset(void); u32 texReadBits(s32 bitCount); diff --git a/src/game/initBondDATA.c b/src/game/initBondDATA.c index 178d949d..d7dedf72 100644 --- a/src/game/initBondDATA.c +++ b/src/game/initBondDATA.c @@ -18,23 +18,23 @@ struct hand hand_data_dummy = { 0, // ITEM_IDS weaponnum; 0xFFFFFFFF, // ITEM_IDS weaponnum_watchmenu; 0, // ITEM_IDS previous_weapon; - + 0, // s8 weapon_firing_status; - + 0, // s8 field_87D; 0x1, // s8 field_87E; 0, // s8 field_87F; - + 0, // s32 weapon_hold_time; 0, // s32 field_884; 0, // s32 field_888; 0, // s32 field_88C; 0, // s32 field_890; - 0, // s32 when_detonating_mines_is_0; + 0, // s32 weapon_action_state; 0, // s32 weapon_current_animation; 0, // s32 weapon_ammo_in_magazine; 0, // s32 field_8A0; - 0, // s32 field_8A4; + 0, // s32 numvisibleshells; 0, // s32 field_8A8; 0, // s32 weapon_next_weapon; 0, // s32 field_8B0; @@ -52,51 +52,51 @@ struct hand hand_data_dummy = { 0, // s32 field_8E0; 0, // s32 field_8E4; 0, // s32 field_8E8; - + // Mtxf field_8EC; 1.0f,0,0,0, 0,1.0f,0,0, 0,0,1.0f,0, 0,0,0,1.0f, - + 0, // s32 field_92C; - 0, // s32 field_930; - 0, // s32 field_934; - 0, // s32 field_938; - 0, // s32 field_93C; - 0, // s32 field_940; - -1.0f, // s32 field_944; - 0, // s32 field_948; - 1.0f, // s32 field_94C; - 0, // s32 field_950; - 0, // s32 field_954; - 0, // s32 field_958; - 0, // s32 field_95C; - 0, // s32 field_960; - 0, // s32 field_964; - -VALUENAME, // f32 field_968; - 0, // s32 field_96C; - VALUENAME, // f32 field_970; - 0, // s32 field_974; - + 0, // f32 sway_pos_x; + 0, // f32 sway_pos_y; + 0, // f32 sway_pos_z; + 0, // f32 sway_look_x; + 0, // f32 sway_look_y; + -1.0f, // f32 sway_look_z; + 0, // f32 sway_up_x; + 1.0f, // f32 sway_up_y; + 0, // f32 sway_up_z; + 0, // f32 spring_pos_x; + 0, // f32 spring_pos_y; + 0, // f32 spring_pos_z; + 0, // f32 spring_look_x; + 0, // f32 spring_look_y; + -VALUENAME, // f32 spring_look_z; + 0, // f32 spring_up_x; + VALUENAME, // f32 spring_up_y; + 0, // f32 spring_up_z; + // coord3d blendpos[4]; 0,0,0, 0,0,0, 0,0,0, 0,0,0, - + // coord3d blendlook[4]; 0,0,-1.0f, 0,0,-1.0f, 0,0,-1.0f, 0,0,-1.0f, - + // coord3d blendup[4]; 0,1.0f,0, 0,1.0f,0, 0,1.0f,0, 0,1.0f,0, - + 0, // s32 curblendpos; 0, // f32 dampt; 1.0f, // f32 blendscale; @@ -105,9 +105,9 @@ struct hand hand_data_dummy = { 0, // f32 weapon_theta_displacement; 0, // f32 weapon_verta_displacement; 0, // s32 field_A24; - 0, // s32 field_A28; - 0, // s32 field_A2C; - 0, // f32 field_A30; + 0, // f32 gunofs2_x; + 0, // f32 gunofs2_y; + 0, // f32 gunofs2_z; 0, // f32 field_A34; 0, // f32 field_A38; 0, // f32 field_A3C; @@ -116,91 +116,81 @@ struct hand hand_data_dummy = { 0, // s32 field_A48; 0, // s32 field_A4C; 0, // s32 field_A50; - - // // struct ChrRecord_f180 { + + // // struct BeamRecord { { 0xff, // s8 unk00; 0, // s8 item_id; // type ITEM_IDS 0, // char unk02; 0, // char unk03; - + // coord3d pos; 0,0,0, - + // /** // * Offset 0x10 // */ // struct coord3d delta; 0,0,0, - + 0, // f32 unk1c; - + 0, // f32 unk20; 0, // f32 unk24; 0 // f32 unk28; }, // // } - + 0, // f32 noise; 0, // f32 field_A84; 0, // f32 field_A88; 0, // s32 field_A8C; NULL, // ObjectRecord* rocket; 0, // s32 firedrocket; - 0, // s32 field_A98; - 0, // s32 field_A9C; - 0, // s32 field_AA0; - 0, // s32 field_AA4; - 0, // s32 field_AA8; - 0, // s32 field_AAC; - 0, // s32 field_AB0; - 0, // s32 field_AB4; - 0, // s32 field_AB8; - 0, // s32 field_ABC; - 0, // s32 field_AC0; - 0, // s32 field_AC4; - 0, // s32 field_AC8; - 0, // s32 field_ACC; - 0, // s32 field_AD0; - 0, // s32 field_AD4; - - // // offset 0xad8 + 0, // gunmtx_camspace.m[0][0]; + 0, // gunmtx_camspace.m[0][1]; + 0, // gunmtx_camspace.m[0][2]; + 0, // gunmtx_camspace.m[0][3]; + 0, // gunmtx_camspace.m[1][0]; + 0, // gunmtx_camspace.m[1][1]; + 0, // gunmtx_camspace.m[1][2]; + 0, // gunmtx_camspace.m[1][3]; + 0, // gunmtx_camspace.m[2][0]; + 0, // gunmtx_camspace.m[2][1]; + 0, // gunmtx_camspace.m[2][2]; + 0, // gunmtx_camspace.m[2][3]; + 0, // gunmtx_camspace.m[3][0]; + 0, // gunmtx_camspace.m[3][1]; + 0, // gunmtx_camspace.m[3][2]; + 0, // gunmtx_camspace.m[3][3]; + + // offset 0xad8 // Mtxf throw_item_pos_related; 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, - - 0, // s32 field_B18; - 0, // s32 field_B1C; - 0, // s32 field_B20; - 0, // s32 field_B24; - 0, // s32 field_B28; - 0, // s32 field_B2C; - 0, // s32 field_B30; - 0, // s32 field_B34; - 0, // s32 field_B38; - 0, // s32 field_B3C; - 0, // s32 field_B40; - 0, // s32 field_B44; - 0, // s32 field_B48; - 0, // s32 field_B4C; - 0, // s32 field_B50; - 0, // s32 field_B54; - + + // offset 0xb18 + // Mtxf throw_item_pos_related_prev; + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + // coord3d field_B58; 0,0,0, - + 0, // f32 field_B64; 0, // s32 field_B68; 0, // s32 field_B6C; 0, // s32 field_B70; - 0, // s32 field_B74; + 0, // Mtxf * mtxlist; 0, // s32 field_B78; 0, // s32 field_B7C; 0, // s32 field_B80; 0, // s32 field_B84; - 0, // s32 field_B88; + 0, // s32 modeldatas; 0, // s32 field_B8C; 0, // s32 field_B90; 0, // s32 field_B94; diff --git a/src/game/initBondDATA.h b/src/game/initBondDATA.h index 3127953b..e61d8f55 100644 --- a/src/game/initBondDATA.h +++ b/src/game/initBondDATA.h @@ -4,9 +4,9 @@ struct BONDdata_item_control_blocks { int hand_data_dummy; - int field_4; - int field_8; - int field_C; + int field_04; + int field_08; + int field_0C; int field_10; int field_14; int field_18; diff --git a/src/game/initBondDATAdefaults.c b/src/game/initBondDATAdefaults.c index 12961dcd..9f50cbc6 100644 --- a/src/game/initBondDATAdefaults.c +++ b/src/game/initBondDATAdefaults.c @@ -174,7 +174,7 @@ void sets_a_bunch_of_BONDdata_values_to_default(void) subcalcpos(&g_CurrentPlayer->model); matrix_4x4_set_identity(&identityMatrix); - renderData.unk_matrix = &identityMatrix; + renderData.basemtx = &identityMatrix; renderData.mtxlist = &g_CurrentPlayer->bondheadmatrices[0]; subcalcmatrices(&renderData, &g_CurrentPlayer->model); diff --git a/src/game/initactorpropstuff.c b/src/game/initactorpropstuff.c index 609922b4..33015f53 100644 --- a/src/game/initactorpropstuff.c +++ b/src/game/initactorpropstuff.c @@ -1,9 +1,12 @@ #include #include "initactorpropstuff.h" +#include "initanitable.h" #include "chr.h" #include "gun.h" +#include "math.h" #include "math_floor.h" + /** * Gets the number of currently allocated heads and bodies * Note: Compile-time static? why bother with a function? @@ -33,7 +36,7 @@ void reset_counter_rand_body_head(void) u32 sub_GAME_7F0001F0(void *ani, int aniid, int param_3) { - short asStack8[4]; + u16 asStack8[4]; u16 result = 0; while (aniid < param_3) { @@ -44,607 +47,241 @@ u32 sub_GAME_7F0001F0(void *ani, int aniid, int param_3) { } -#ifdef NONMATCHING -s32 sub_GAME_7F000290(s32 arg0, s32 arg1, s32 arg2) +s32 sub_GAME_7F000290(ModelAnimation *anim, s32 startframe, s32 endframe) { - ? sp3C; - s32 var_s0; - s32 var_s1; + s32 sum; + s16 out[3]; - var_s0 = arg1; - var_s1 = 0; - if (arg1 < arg2) + sum = 0; + + if (startframe < endframe) { do { - sub_GAME_7F06D2E4(0, 0, &skeleton_guard, arg0, var_s0, &sp3C); - var_s0 += 1; - var_s1 += sp40; - } while (var_s0 < arg2); + sub_GAME_7F06D2E4(0, 0, &skeleton_guard, anim, startframe, out); + + startframe++; + sum += out[2]; + } + while (startframe < endframe); } - return var_s1; + + return sum; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F000290 -/* 034DC0 7F000290 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 034DC4 7F000294 AFB30028 */ sw $s3, 0x28($sp) -/* 034DC8 7F000298 AFB20024 */ sw $s2, 0x24($sp) -/* 034DCC 7F00029C AFB10020 */ sw $s1, 0x20($sp) -/* 034DD0 7F0002A0 AFB0001C */ sw $s0, 0x1c($sp) -/* 034DD4 7F0002A4 00A6082A */ slt $at, $a1, $a2 -/* 034DD8 7F0002A8 00A08025 */ move $s0, $a1 -/* 034DDC 7F0002AC 00C09025 */ move $s2, $a2 -/* 034DE0 7F0002B0 00809825 */ move $s3, $a0 -/* 034DE4 7F0002B4 AFBF0034 */ sw $ra, 0x34($sp) -/* 034DE8 7F0002B8 AFB50030 */ sw $s5, 0x30($sp) -/* 034DEC 7F0002BC AFB4002C */ sw $s4, 0x2c($sp) -/* 034DF0 7F0002C0 10200010 */ beqz $at, .L7F000304 -/* 034DF4 7F0002C4 00008825 */ move $s1, $zero -/* 034DF8 7F0002C8 3C148004 */ lui $s4, %hi(skeleton_guard) -/* 034DFC 7F0002CC 2694D400 */ addiu $s4, %lo(skeleton_guard) # addiu $s4, $s4, -0x2c00 -/* 034E00 7F0002D0 27B5003C */ addiu $s5, $sp, 0x3c -.L7F0002D4: -/* 034E04 7F0002D4 00002025 */ move $a0, $zero -/* 034E08 7F0002D8 00002825 */ move $a1, $zero -/* 034E0C 7F0002DC 02803025 */ move $a2, $s4 -/* 034E10 7F0002E0 02603825 */ move $a3, $s3 -/* 034E14 7F0002E4 AFB00010 */ sw $s0, 0x10($sp) -/* 034E18 7F0002E8 0FC1B4B9 */ jal sub_GAME_7F06D2E4 -/* 034E1C 7F0002EC AFB50014 */ sw $s5, 0x14($sp) -/* 034E20 7F0002F0 87AE0040 */ lh $t6, 0x40($sp) -/* 034E24 7F0002F4 26100001 */ addiu $s0, $s0, 1 -/* 034E28 7F0002F8 0212082A */ slt $at, $s0, $s2 -/* 034E2C 7F0002FC 1420FFF5 */ bnez $at, .L7F0002D4 -/* 034E30 7F000300 022E8821 */ addu $s1, $s1, $t6 -.L7F000304: -/* 034E34 7F000304 8FBF0034 */ lw $ra, 0x34($sp) -/* 034E38 7F000308 02201025 */ move $v0, $s1 -/* 034E3C 7F00030C 8FB10020 */ lw $s1, 0x20($sp) -/* 034E40 7F000310 8FB0001C */ lw $s0, 0x1c($sp) -/* 034E44 7F000314 8FB20024 */ lw $s2, 0x24($sp) -/* 034E48 7F000318 8FB30028 */ lw $s3, 0x28($sp) -/* 034E4C 7F00031C 8FB4002C */ lw $s4, 0x2c($sp) -/* 034E50 7F000320 8FB50030 */ lw $s5, 0x30($sp) -/* 034E54 7F000324 03E00008 */ jr $ra -/* 034E58 7F000328 27BD0048 */ addiu $sp, $sp, 0x48 -) -#endif +/** + * Address: 7F00032C + * + * pd is raceInitAnimGroup + * + * Initializes a null-terminated table of weapon firing animation configs. + * + * @returns the number of table entires. + */ +s32 initResolveAnimGroupTable(struct weapon_firing_animation_table *animconfig) +{ + s32 animoffset; + s32 numconfigs; + struct weapon_firing_animation_table *config; -#ifdef NONMATCHING -//pd is raceInitAnimGroup - s32 sub_GAME_7F00032C(s32 * arg0) + union { - f32 temp_f0; - f32 var_f4; - f32 var_f6; - s32 *var_s0; - s32 temp_at; - s32 temp_t6; - s32 temp_v1; - s32 var_s1; - s32 var_v0; + u32 offset; + struct ModelAnimation *anim; + } *initialanim; - temp_t6 = *arg0; - var_s1 = 0; - var_s0 = arg0; - var_v0 = temp_t6; - if (temp_t6 != 0) + s32 endframe; + u32 angle16; + f32 duration; + + numconfigs = 0; + config = animconfig; + + if (animconfig->anim.offset != 0) + { + f32 fullturn = M_TAU_F; + f32 angleconv = 0.0000958738f; + + initialanim = (void *)&animconfig->anim; + animoffset = (*initialanim).offset; + + do { - do + config->anim.anim = (struct ModelAnimation *)(((0, animoffset)) + ((s32)ptr_animation_table)); + endframe = floorFloatToInt(config->unk04); + angle16 = sub_GAME_7F0001F0(config->anim.anim, 0, endframe) & 0xffff; + duration = config->unk04; + + if (duration > 0.0f) { - var_s0->unk0 = var_v0 + ptr_animation_table; - temp_f0 = var_s0->unk4; - temp_v1 = sub_GAME_7F0001F0(var_s0->unk0, 0, floorFloatToInt(var_s0->unk4)) & 0xFFFF; - temp_at = temp_v1 < 0x8000; - if (temp_f0 > 0.0f) + if (((s32)angle16) < 0x8000) { - if (temp_at != 0) - { - var_f6 = temp_v1; - if (temp_v1 < 0) - { - var_f6 += 4294967296.0f; - } - var_s0->unk8 = (var_f6 * 0.0000958738f) / temp_f0; - } - else - { - var_f4 = temp_v1; - if (temp_v1 < 0) - { - var_f4 += 4294967296.0f; - } - var_s0->unk8 = ((var_f4 * 0.0000958738f) - 6.2831855f) / temp_f0; - } + config->turn_angle_per_frame = (angle16 * angleconv) / duration; } else { - var_s0->unk8 = 0.0f; + config->turn_angle_per_frame = ((angle16 * angleconv) - fullturn) / duration; } - var_v0 = var_s0->unk48; - var_s0 += 0x48; - var_s1 += 1; - } while (var_v0 != 0); + } + else + { + config->turn_angle_per_frame = 0.0f; + } + + animoffset = config[1].anim.offset; + config++; + numconfigs++; } - return var_s1; + while (animoffset != 0); } -#else -GLOBAL_ASM( -.late_rodata -glabel F32_8004ED70 -.word 0x40c90fdb -glabel F32_8004ED74 -.word 0x38c90fdb -.text -glabel sub_GAME_7F00032C -/* 034E5C 7F00032C 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 034E60 7F000330 AFBF003C */ sw $ra, 0x3c($sp) -/* 034E64 7F000334 AFB30038 */ sw $s3, 0x38($sp) -/* 034E68 7F000338 AFB20034 */ sw $s2, 0x34($sp) -/* 034E6C 7F00033C AFB10030 */ sw $s1, 0x30($sp) -/* 034E70 7F000340 AFB0002C */ sw $s0, 0x2c($sp) -/* 034E74 7F000344 F7B80020 */ sdc1 $f24, 0x20($sp) -/* 034E78 7F000348 F7B60018 */ sdc1 $f22, 0x18($sp) -/* 034E7C 7F00034C F7B40010 */ sdc1 $f20, 0x10($sp) -/* 034E80 7F000350 8C8E0000 */ lw $t6, ($a0) -/* 034E84 7F000354 00008825 */ move $s1, $zero -/* 034E88 7F000358 00808025 */ move $s0, $a0 -/* 034E8C 7F00035C 11C00038 */ beqz $t6, .L7F000440 -/* 034E90 7F000360 01C01025 */ move $v0, $t6 -/* 034E94 7F000364 3C018005 */ lui $at, %hi(F32_8004ED70) -/* 034E98 7F000368 C438ED70 */ lwc1 $f24, %lo(F32_8004ED70)($at) -/* 034E9C 7F00036C 3C018005 */ lui $at, %hi(F32_8004ED74) -/* 034EA0 7F000370 3C128007 */ lui $s2, %hi(ptr_animation_table) -/* 034EA4 7F000374 4480A000 */ mtc1 $zero, $f20 -/* 034EA8 7F000378 26529538 */ addiu $s2, %lo(ptr_animation_table) # addiu $s2, $s2, -0x6ac8 -/* 034EAC 7F00037C C436ED74 */ lwc1 $f22, %lo(F32_8004ED74)($at) -/* 034EB0 7F000380 34138000 */ li $s3, 32768 -/* 034EB4 7F000384 8E4F0000 */ lw $t7, ($s2) -.L7F000388: -/* 034EB8 7F000388 C60C0004 */ lwc1 $f12, 4($s0) -/* 034EBC 7F00038C 004FC021 */ addu $t8, $v0, $t7 -/* 034EC0 7F000390 0FC170F6 */ jal floorFloatToInt -/* 034EC4 7F000394 AE180000 */ sw $t8, ($s0) -/* 034EC8 7F000398 8E040000 */ lw $a0, ($s0) -/* 034ECC 7F00039C 00002825 */ move $a1, $zero -/* 034ED0 7F0003A0 0FC0007C */ jal sub_GAME_7F0001F0 -/* 034ED4 7F0003A4 00403025 */ move $a2, $v0 -/* 034ED8 7F0003A8 C6000004 */ lwc1 $f0, 4($s0) -/* 034EDC 7F0003AC 3043FFFF */ andi $v1, $v0, 0xffff -/* 034EE0 7F0003B0 0073082A */ slt $at, $v1, $s3 -/* 034EE4 7F0003B4 4600A03C */ c.lt.s $f20, $f0 -/* 034EE8 7F0003B8 00000000 */ nop -/* 034EEC 7F0003BC 4502001B */ bc1fl .L7F00042C -/* 034EF0 7F0003C0 E6140008 */ swc1 $f20, 8($s0) -/* 034EF4 7F0003C4 5020000D */ beql $at, $zero, .L7F0003FC -/* 034EF8 7F0003C8 44839000 */ mtc1 $v1, $f18 -/* 034EFC 7F0003CC 44832000 */ mtc1 $v1, $f4 -/* 034F00 7F0003D0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 034F04 7F0003D4 04610004 */ bgez $v1, .L7F0003E8 -/* 034F08 7F0003D8 468021A0 */ cvt.s.w $f6, $f4 -/* 034F0C 7F0003DC 44814000 */ mtc1 $at, $f8 -/* 034F10 7F0003E0 00000000 */ nop -/* 034F14 7F0003E4 46083180 */ add.s $f6, $f6, $f8 -.L7F0003E8: -/* 034F18 7F0003E8 46163282 */ mul.s $f10, $f6, $f22 -/* 034F1C 7F0003EC 46005403 */ div.s $f16, $f10, $f0 -/* 034F20 7F0003F0 1000000E */ b .L7F00042C -/* 034F24 7F0003F4 E6100008 */ swc1 $f16, 8($s0) -/* 034F28 7F0003F8 44839000 */ mtc1 $v1, $f18 -.L7F0003FC: -/* 034F2C 7F0003FC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 034F30 7F000400 04610004 */ bgez $v1, .L7F000414 -/* 034F34 7F000404 46809120 */ cvt.s.w $f4, $f18 -/* 034F38 7F000408 44814000 */ mtc1 $at, $f8 -/* 034F3C 7F00040C 00000000 */ nop -/* 034F40 7F000410 46082100 */ add.s $f4, $f4, $f8 -.L7F000414: -/* 034F44 7F000414 46162182 */ mul.s $f6, $f4, $f22 -/* 034F48 7F000418 46183281 */ sub.s $f10, $f6, $f24 -/* 034F4C 7F00041C 46005403 */ div.s $f16, $f10, $f0 -/* 034F50 7F000420 10000002 */ b .L7F00042C -/* 034F54 7F000424 E6100008 */ swc1 $f16, 8($s0) -/* 034F58 7F000428 E6140008 */ swc1 $f20, 8($s0) -.L7F00042C: -/* 034F5C 7F00042C 8E020048 */ lw $v0, 0x48($s0) -/* 034F60 7F000430 26100048 */ addiu $s0, $s0, 0x48 -/* 034F64 7F000434 26310001 */ addiu $s1, $s1, 1 -/* 034F68 7F000438 5440FFD3 */ bnezl $v0, .L7F000388 -/* 034F6C 7F00043C 8E4F0000 */ lw $t7, ($s2) -.L7F000440: -/* 034F70 7F000440 8FBF003C */ lw $ra, 0x3c($sp) -/* 034F74 7F000444 02201025 */ move $v0, $s1 -/* 034F78 7F000448 8FB10030 */ lw $s1, 0x30($sp) -/* 034F7C 7F00044C D7B40010 */ ldc1 $f20, 0x10($sp) -/* 034F80 7F000450 D7B60018 */ ldc1 $f22, 0x18($sp) -/* 034F84 7F000454 D7B80020 */ ldc1 $f24, 0x20($sp) -/* 034F88 7F000458 8FB0002C */ lw $s0, 0x2c($sp) -/* 034F8C 7F00045C 8FB20034 */ lw $s2, 0x34($sp) -/* 034F90 7F000460 8FB30038 */ lw $s3, 0x38($sp) -/* 034F94 7F000464 03E00008 */ jr $ra -/* 034F98 7F000468 27BD0040 */ addiu $sp, $sp, 0x40 -) -#endif + + return numconfigs; +} //pd is raceInitAnimGroups -void sub_GAME_7F00046C(struct attackanimgroup **groups) +/** + * Address: 7F00046C + */ +void initResolveAnimGroups(struct anim_group_info **groups) { - s32 i; + s32 i; - for (i = 0; i < 32; i++) { - if (groups[i]->len < 0) { - groups[i]->len = sub_GAME_7F00032C(groups[i]->animcfg); - } - } -} - - - -#ifdef NONMATCHING -void sub_GAME_7F0004D0(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0004D0 -/* 035000 7F0004D0 8C8E0000 */ lw $t6, ($a0) -/* 035004 7F0004D4 00001825 */ move $v1, $zero -/* 035008 7F0004D8 00801025 */ move $v0, $a0 -/* 03500C 7F0004DC 11C0000C */ beqz $t6, .L7F000510 -/* 035010 7F0004E0 00000000 */ nop -/* 035014 7F0004E4 8C850000 */ lw $a1, ($a0) -/* 035018 7F0004E8 3C048007 */ lui $a0, %hi(ptr_animation_table) -/* 03501C 7F0004EC 24849538 */ addiu $a0, %lo(ptr_animation_table) # addiu $a0, $a0, -0x6ac8 -/* 035020 7F0004F0 8C8F0000 */ lw $t7, ($a0) -.L7F0004F4: -/* 035024 7F0004F4 24630001 */ addiu $v1, $v1, 1 -/* 035028 7F0004F8 2442001C */ addiu $v0, $v0, 0x1c -/* 03502C 7F0004FC 00AFC021 */ addu $t8, $a1, $t7 -/* 035030 7F000500 8C450000 */ lw $a1, ($v0) -/* 035034 7F000504 AC58FFE4 */ sw $t8, -0x1c($v0) -/* 035038 7F000508 54A0FFFA */ bnezl $a1, .L7F0004F4 -/* 03503C 7F00050C 8C8F0000 */ lw $t7, ($a0) -.L7F000510: -/* 035040 7F000510 03E00008 */ jr $ra -/* 035044 7F000514 00601025 */ move $v0, $v1 -) -#endif - - - -#ifdef NONMATCHING -void somethingwith_weapon_animation_groups(void) { - -} -#else -GLOBAL_ASM( -.late_rodata -glabel F32_8004ED78 -.word 0x3dccccce -.text -glabel somethingwith_weapon_animation_groups -/* 035048 7F000518 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 03504C 7F00051C 3C0E8003 */ lui $t6, %hi(D_8002C914) -/* 035050 7F000520 8DCEC914 */ lw $t6, %lo(D_8002C914)($t6) -/* 035054 7F000524 AFB10024 */ sw $s1, 0x24($sp) -/* 035058 7F000528 2411FFFF */ li $s1, -1 -/* 03505C 7F00052C AFBF002C */ sw $ra, 0x2c($sp) -/* 035060 7F000530 AFB20028 */ sw $s2, 0x28($sp) -/* 035064 7F000534 AFB00020 */ sw $s0, 0x20($sp) -/* 035068 7F000538 122E0013 */ beq $s1, $t6, .L7F000588 -/* 03506C 7F00053C F7B40018 */ sdc1 $f20, 0x18($sp) -/* 035070 7F000540 3C108003 */ lui $s0, %hi(D_8002C914) -/* 035074 7F000544 2610C914 */ addiu $s0, %lo(D_8002C914) # addiu $s0, $s0, -0x36ec -/* 035078 7F000548 8E04001C */ lw $a0, 0x1c($s0) -.L7F00054C: -/* 03507C 7F00054C 50800005 */ beql $a0, $zero, .L7F000564 -/* 035080 7F000550 8E040024 */ lw $a0, 0x24($s0) -/* 035084 7F000554 0FC00134 */ jal sub_GAME_7F0004D0 -/* 035088 7F000558 00000000 */ nop -/* 03508C 7F00055C AE020020 */ sw $v0, 0x20($s0) -/* 035090 7F000560 8E040024 */ lw $a0, 0x24($s0) -.L7F000564: -/* 035094 7F000564 50800005 */ beql $a0, $zero, .L7F00057C -/* 035098 7F000568 8E0F002C */ lw $t7, 0x2c($s0) -/* 03509C 7F00056C 0FC00134 */ jal sub_GAME_7F0004D0 -/* 0350A0 7F000570 00000000 */ nop -/* 0350A4 7F000574 AE020028 */ sw $v0, 0x28($s0) -/* 0350A8 7F000578 8E0F002C */ lw $t7, 0x2c($s0) -.L7F00057C: -/* 0350AC 7F00057C 2610002C */ addiu $s0, $s0, 0x2c -/* 0350B0 7F000580 562FFFF2 */ bnel $s1, $t7, .L7F00054C -/* 0350B4 7F000584 8E04001C */ lw $a0, 0x1c($s0) -.L7F000588: -/* 0350B8 7F000588 3C048003 */ lui $a0, %hi(D_8002DEBC) -/* 0350BC 7F00058C 0FC00134 */ jal sub_GAME_7F0004D0 -/* 0350C0 7F000590 2484DEBC */ addiu $a0, %lo(D_8002DEBC) # addiu $a0, $a0, -0x2144 -/* 0350C4 7F000594 3C048003 */ lui $a0, %hi(ptr_rifle_firing_animation_groups) -/* 0350C8 7F000598 0FC0011B */ jal sub_GAME_7F00046C -/* 0350CC 7F00059C 2484ED28 */ addiu $a0, %lo(ptr_rifle_firing_animation_groups) # addiu $a0, $a0, -0x12d8 -/* 0350D0 7F0005A0 3C048003 */ lui $a0, %hi(ptr_pistol_firing_animation_groups) -/* 0350D4 7F0005A4 0FC0011B */ jal sub_GAME_7F00046C -/* 0350D8 7F0005A8 2484F408 */ addiu $a0, %lo(ptr_pistol_firing_animation_groups) # addiu $a0, $a0, -0xbf8 -/* 0350DC 7F0005AC 3C048003 */ lui $a0, %hi(ptr_doubles_firing_animation_groups) -/* 0350E0 7F0005B0 0FC0011B */ jal sub_GAME_7F00046C -/* 0350E4 7F0005B4 2484F6E0 */ addiu $a0, %lo(ptr_doubles_firing_animation_groups) # addiu $a0, $a0, -0x920 -/* 0350E8 7F0005B8 3C048003 */ lui $a0, %hi(ptr_crouched_rifle_firing_animation_groups) -/* 0350EC 7F0005BC 0FC0011B */ jal sub_GAME_7F00046C -/* 0350F0 7F0005C0 2484F970 */ addiu $a0, %lo(ptr_crouched_rifle_firing_animation_groups) # addiu $a0, $a0, -0x690 -/* 0350F4 7F0005C4 3C048003 */ lui $a0, %hi(ptr_crouched_pistol_firing_animation_groups) -/* 0350F8 7F0005C8 0FC0011B */ jal sub_GAME_7F00046C -/* 0350FC 7F0005CC 2484FCD8 */ addiu $a0, %lo(ptr_crouched_pistol_firing_animation_groups) # addiu $a0, $a0, -0x328 -/* 035100 7F0005D0 3C048003 */ lui $a0, %hi(ptr_crouched_doubles_firing_animation_groups) -/* 035104 7F0005D4 0FC0011B */ jal sub_GAME_7F00046C -/* 035108 7F0005D8 2484FFF8 */ addiu $a0, %lo(ptr_crouched_doubles_firing_animation_groups) # addiu $a0, $a0, -8 -/* 03510C 7F0005DC 3C048003 */ lui $a0, %hi(D_80030078) -/* 035110 7F0005E0 0FC000CB */ jal sub_GAME_7F00032C -/* 035114 7F0005E4 24840078 */ addiu $a0, %lo(D_80030078) # addiu $a0, $a0, 0x78 -/* 035118 7F0005E8 3C048003 */ lui $a0, %hi(D_80030660) -/* 03511C 7F0005EC 0FC000CB */ jal sub_GAME_7F00032C -/* 035120 7F0005F0 24840660 */ addiu $a0, %lo(D_80030660) # addiu $a0, $a0, 0x660 -/* 035124 7F0005F4 3C128007 */ lui $s2, %hi(ptr_animation_table) -/* 035128 7F0005F8 26529538 */ addiu $s2, %lo(ptr_animation_table) # addiu $s2, $s2, -0x6ac8 -/* 03512C 7F0005FC 8E580000 */ lw $t8, ($s2) -/* 035130 7F000600 3C110000 */ lui $s1, %hi(0x00004018) # $s1, 0 -/* 035134 7F000604 26314018 */ addiu $s1, %lo(0x00004018) # addiu $s1, $s1, 0x4018 -/* 035138 7F000608 02382021 */ addu $a0, $s1, $t8 -/* 03513C 7F00060C 94860004 */ lhu $a2, 4($a0) -/* 035140 7F000610 00002825 */ move $a1, $zero -/* 035144 7F000614 0FC000A4 */ jal sub_GAME_7F000290 -/* 035148 7F000618 24C6FFFF */ addiu $a2, $a2, -1 -/* 03514C 7F00061C 44822000 */ mtc1 $v0, $f4 -/* 035150 7F000620 8E500000 */ lw $s0, ($s2) -/* 035154 7F000624 3C018005 */ lui $at, %hi(F32_8004ED78) -/* 035158 7F000628 468021A0 */ cvt.s.w $f6, $f4 -/* 03515C 7F00062C 0230C821 */ addu $t9, $s1, $s0 -/* 035160 7F000630 97280004 */ lhu $t0, 4($t9) -/* 035164 7F000634 C434ED78 */ lwc1 $f20, %lo(F32_8004ED78)($at) -/* 035168 7F000638 44885000 */ mtc1 $t0, $f10 -/* 03516C 7F00063C 46143202 */ mul.s $f8, $f6, $f20 -/* 035170 7F000640 05010005 */ bgez $t0, .L7F000658 -/* 035174 7F000644 46805420 */ cvt.s.w $f16, $f10 -/* 035178 7F000648 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 03517C 7F00064C 44819000 */ mtc1 $at, $f18 -/* 035180 7F000650 00000000 */ nop -/* 035184 7F000654 46128400 */ add.s $f16, $f16, $f18 -.L7F000658: -/* 035188 7F000658 46104103 */ div.s $f4, $f8, $f16 -/* 03518C 7F00065C 3C030000 */ lui $v1, %hi(0x000040D4) # $v1, 0 -/* 035190 7F000660 3C018003 */ lui $at, %hi(D_80030984) -/* 035194 7F000664 246340D4 */ addiu $v1, %lo(0x000040D4) # addiu $v1, $v1, 0x40d4 -/* 035198 7F000668 00702021 */ addu $a0, $v1, $s0 -/* 03519C 7F00066C 00002825 */ move $a1, $zero -/* 0351A0 7F000670 E4240984 */ swc1 $f4, %lo(D_80030984)($at) -/* 0351A4 7F000674 94860004 */ lhu $a2, 4($a0) -/* 0351A8 7F000678 AFA30034 */ sw $v1, 0x34($sp) -/* 0351AC 7F00067C 0FC000A4 */ jal sub_GAME_7F000290 -/* 0351B0 7F000680 24C6FFFF */ addiu $a2, $a2, -1 -/* 0351B4 7F000684 44823000 */ mtc1 $v0, $f6 -/* 0351B8 7F000688 8FA30034 */ lw $v1, 0x34($sp) -/* 0351BC 7F00068C 8E500000 */ lw $s0, ($s2) -/* 0351C0 7F000690 468032A0 */ cvt.s.w $f10, $f6 -/* 0351C4 7F000694 00704821 */ addu $t1, $v1, $s0 -/* 0351C8 7F000698 952A0004 */ lhu $t2, 4($t1) -/* 0351CC 7F00069C 448A4000 */ mtc1 $t2, $f8 -/* 0351D0 7F0006A0 46145482 */ mul.s $f18, $f10, $f20 -/* 0351D4 7F0006A4 05410005 */ bgez $t2, .L7F0006BC -/* 0351D8 7F0006A8 46804420 */ cvt.s.w $f16, $f8 -/* 0351DC 7F0006AC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0351E0 7F0006B0 44812000 */ mtc1 $at, $f4 -/* 0351E4 7F0006B4 00000000 */ nop -/* 0351E8 7F0006B8 46048400 */ add.s $f16, $f16, $f4 -.L7F0006BC: -/* 0351EC 7F0006BC 46109183 */ div.s $f6, $f18, $f16 -/* 0351F0 7F0006C0 3C110000 */ lui $s1, %hi(0x00004070) # $s1, 0 -/* 0351F4 7F0006C4 3C018003 */ lui $at, %hi(D_80030988) -/* 0351F8 7F0006C8 26314070 */ addiu $s1, %lo(0x00004070) # addiu $s1, $s1, 0x4070 -/* 0351FC 7F0006CC 02302021 */ addu $a0, $s1, $s0 -/* 035200 7F0006D0 00002825 */ move $a1, $zero -/* 035204 7F0006D4 E4260988 */ swc1 $f6, %lo(D_80030988)($at) -/* 035208 7F0006D8 94860004 */ lhu $a2, 4($a0) -/* 03520C 7F0006DC 0FC000A4 */ jal sub_GAME_7F000290 -/* 035210 7F0006E0 24C6FFFF */ addiu $a2, $a2, -1 -/* 035214 7F0006E4 44825000 */ mtc1 $v0, $f10 -/* 035218 7F0006E8 8E500000 */ lw $s0, ($s2) -/* 03521C 7F0006EC 46805220 */ cvt.s.w $f8, $f10 -/* 035220 7F0006F0 02305821 */ addu $t3, $s1, $s0 -/* 035224 7F0006F4 956C0004 */ lhu $t4, 4($t3) -/* 035228 7F0006F8 448C9000 */ mtc1 $t4, $f18 -/* 03522C 7F0006FC 46144102 */ mul.s $f4, $f8, $f20 -/* 035230 7F000700 05810005 */ bgez $t4, .L7F000718 -/* 035234 7F000704 46809420 */ cvt.s.w $f16, $f18 -/* 035238 7F000708 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 03523C 7F00070C 44813000 */ mtc1 $at, $f6 -/* 035240 7F000710 00000000 */ nop -/* 035244 7F000714 46068400 */ add.s $f16, $f16, $f6 -.L7F000718: -/* 035248 7F000718 46102283 */ div.s $f10, $f4, $f16 -/* 03524C 7F00071C 3C030001 */ lui $v1, %hi(0x00008204) # $v1, 1 -/* 035250 7F000720 3C018003 */ lui $at, %hi(D_8003098C) -/* 035254 7F000724 24638204 */ addiu $v1, %lo(0x00008204) # addiu $v1, $v1, -0x7dfc -/* 035258 7F000728 00702021 */ addu $a0, $v1, $s0 -/* 03525C 7F00072C 00002825 */ move $a1, $zero -/* 035260 7F000730 E42A098C */ swc1 $f10, %lo(D_8003098C)($at) -/* 035264 7F000734 94860004 */ lhu $a2, 4($a0) -/* 035268 7F000738 AFA30034 */ sw $v1, 0x34($sp) -/* 03526C 7F00073C 0FC000A4 */ jal sub_GAME_7F000290 -/* 035270 7F000740 24C6FFFF */ addiu $a2, $a2, -1 -/* 035274 7F000744 44824000 */ mtc1 $v0, $f8 -/* 035278 7F000748 8FA30034 */ lw $v1, 0x34($sp) -/* 03527C 7F00074C 8E500000 */ lw $s0, ($s2) -/* 035280 7F000750 468044A0 */ cvt.s.w $f18, $f8 -/* 035284 7F000754 00706821 */ addu $t5, $v1, $s0 -/* 035288 7F000758 95AE0004 */ lhu $t6, 4($t5) -/* 03528C 7F00075C 448E2000 */ mtc1 $t6, $f4 -/* 035290 7F000760 46149182 */ mul.s $f6, $f18, $f20 -/* 035294 7F000764 05C10005 */ bgez $t6, .L7F00077C -/* 035298 7F000768 46802420 */ cvt.s.w $f16, $f4 -/* 03529C 7F00076C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0352A0 7F000770 44815000 */ mtc1 $at, $f10 -/* 0352A4 7F000774 00000000 */ nop -/* 0352A8 7F000778 460A8400 */ add.s $f16, $f16, $f10 -.L7F00077C: -/* 0352AC 7F00077C 46103203 */ div.s $f8, $f6, $f16 -/* 0352B0 7F000780 3C070000 */ lui $a3, %hi(0x0000777C) # $a3, 0 -/* 0352B4 7F000784 3C018003 */ lui $at, %hi(D_80030990) -/* 0352B8 7F000788 24E7777C */ addiu $a3, %lo(0x0000777C) # addiu $a3, $a3, 0x777c -/* 0352BC 7F00078C 00F02021 */ addu $a0, $a3, $s0 -/* 0352C0 7F000790 00002825 */ move $a1, $zero -/* 0352C4 7F000794 E4280990 */ swc1 $f8, %lo(D_80030990)($at) -/* 0352C8 7F000798 94860004 */ lhu $a2, 4($a0) -/* 0352CC 7F00079C AFA70038 */ sw $a3, 0x38($sp) -/* 0352D0 7F0007A0 0FC000A4 */ jal sub_GAME_7F000290 -/* 0352D4 7F0007A4 24C6FFFF */ addiu $a2, $a2, -1 -/* 0352D8 7F0007A8 44829000 */ mtc1 $v0, $f18 -/* 0352DC 7F0007AC 8FA70038 */ lw $a3, 0x38($sp) -/* 0352E0 7F0007B0 8E500000 */ lw $s0, ($s2) -/* 0352E4 7F0007B4 46809120 */ cvt.s.w $f4, $f18 -/* 0352E8 7F0007B8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0352EC 7F0007BC 00F07821 */ addu $t7, $a3, $s0 -/* 0352F0 7F0007C0 95F80004 */ lhu $t8, 4($t7) -/* 0352F4 7F0007C4 44983000 */ mtc1 $t8, $f6 -/* 0352F8 7F0007C8 46142282 */ mul.s $f10, $f4, $f20 -/* 0352FC 7F0007CC 07010004 */ bgez $t8, .L7F0007E0 -/* 035300 7F0007D0 46803420 */ cvt.s.w $f16, $f6 -/* 035304 7F0007D4 44814000 */ mtc1 $at, $f8 -/* 035308 7F0007D8 00000000 */ nop -/* 03530C 7F0007DC 46088400 */ add.s $f16, $f16, $f8 -.L7F0007E0: -/* 035310 7F0007E0 46105483 */ div.s $f18, $f10, $f16 -/* 035314 7F0007E4 3C110000 */ lui $s1, %hi(0x000077D4) # $s1, 0 -/* 035318 7F0007E8 3C018003 */ lui $at, %hi(D_80030994) -/* 03531C 7F0007EC 263177D4 */ addiu $s1, %lo(0x000077D4) # addiu $s1, $s1, 0x77d4 -/* 035320 7F0007F0 02302021 */ addu $a0, $s1, $s0 -/* 035324 7F0007F4 00002825 */ move $a1, $zero -/* 035328 7F0007F8 E4320994 */ swc1 $f18, %lo(D_80030994)($at) -/* 03532C 7F0007FC 94860004 */ lhu $a2, 4($a0) -/* 035330 7F000800 0FC000A4 */ jal sub_GAME_7F000290 -/* 035334 7F000804 24C6FFFF */ addiu $a2, $a2, -1 -/* 035338 7F000808 44822000 */ mtc1 $v0, $f4 -/* 03533C 7F00080C 8E500000 */ lw $s0, ($s2) -/* 035340 7F000810 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 035344 7F000814 468021A0 */ cvt.s.w $f6, $f4 -/* 035348 7F000818 0230C821 */ addu $t9, $s1, $s0 -/* 03534C 7F00081C 97280004 */ lhu $t0, 4($t9) -/* 035350 7F000820 44885000 */ mtc1 $t0, $f10 -/* 035354 7F000824 46143202 */ mul.s $f8, $f6, $f20 -/* 035358 7F000828 05010004 */ bgez $t0, .L7F00083C -/* 03535C 7F00082C 46805420 */ cvt.s.w $f16, $f10 -/* 035360 7F000830 44819000 */ mtc1 $at, $f18 -/* 035364 7F000834 00000000 */ nop -/* 035368 7F000838 46128400 */ add.s $f16, $f16, $f18 -.L7F00083C: -/* 03536C 7F00083C 46104103 */ div.s $f4, $f8, $f16 -/* 035370 7F000840 3C030001 */ lui $v1, %hi(0x000084C4) # $v1, 1 -/* 035374 7F000844 3C018003 */ lui $at, %hi(D_80030998) -/* 035378 7F000848 246384C4 */ addiu $v1, %lo(0x000084C4) # addiu $v1, $v1, -0x7b3c -/* 03537C 7F00084C 00702021 */ addu $a0, $v1, $s0 -/* 035380 7F000850 00002825 */ move $a1, $zero -/* 035384 7F000854 E4240998 */ swc1 $f4, %lo(D_80030998)($at) -/* 035388 7F000858 94860004 */ lhu $a2, 4($a0) -/* 03538C 7F00085C AFA30038 */ sw $v1, 0x38($sp) -/* 035390 7F000860 0FC000A4 */ jal sub_GAME_7F000290 -/* 035394 7F000864 24C6FFFF */ addiu $a2, $a2, -1 -/* 035398 7F000868 44823000 */ mtc1 $v0, $f6 -/* 03539C 7F00086C 8FA30038 */ lw $v1, 0x38($sp) -/* 0353A0 7F000870 8E500000 */ lw $s0, ($s2) -/* 0353A4 7F000874 468032A0 */ cvt.s.w $f10, $f6 -/* 0353A8 7F000878 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0353AC 7F00087C 00704821 */ addu $t1, $v1, $s0 -/* 0353B0 7F000880 952A0004 */ lhu $t2, 4($t1) -/* 0353B4 7F000884 448A4000 */ mtc1 $t2, $f8 -/* 0353B8 7F000888 46145482 */ mul.s $f18, $f10, $f20 -/* 0353BC 7F00088C 05410004 */ bgez $t2, .L7F0008A0 -/* 0353C0 7F000890 46804420 */ cvt.s.w $f16, $f8 -/* 0353C4 7F000894 44812000 */ mtc1 $at, $f4 -/* 0353C8 7F000898 00000000 */ nop -/* 0353CC 7F00089C 46048400 */ add.s $f16, $f16, $f4 -.L7F0008A0: -/* 0353D0 7F0008A0 46109183 */ div.s $f6, $f18, $f16 -/* 0353D4 7F0008A4 3C070001 */ lui $a3, %hi(0x00008520) # $a3, 1 -/* 0353D8 7F0008A8 3C018003 */ lui $at, %hi(D_8003099C) -/* 0353DC 7F0008AC 24E78520 */ addiu $a3, %lo(0x00008520) # addiu $a3, $a3, -0x7ae0 -/* 0353E0 7F0008B0 00F02021 */ addu $a0, $a3, $s0 -/* 0353E4 7F0008B4 00002825 */ move $a1, $zero -/* 0353E8 7F0008B8 E426099C */ swc1 $f6, %lo(D_8003099C)($at) -/* 0353EC 7F0008BC 94860004 */ lhu $a2, 4($a0) -/* 0353F0 7F0008C0 AFA70030 */ sw $a3, 0x30($sp) -/* 0353F4 7F0008C4 0FC000A4 */ jal sub_GAME_7F000290 -/* 0353F8 7F0008C8 24C6FFFF */ addiu $a2, $a2, -1 -/* 0353FC 7F0008CC 44825000 */ mtc1 $v0, $f10 -/* 035400 7F0008D0 8FA70030 */ lw $a3, 0x30($sp) -/* 035404 7F0008D4 8E500000 */ lw $s0, ($s2) -/* 035408 7F0008D8 46805220 */ cvt.s.w $f8, $f10 -/* 03540C 7F0008DC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 035410 7F0008E0 00F05821 */ addu $t3, $a3, $s0 -/* 035414 7F0008E4 956C0004 */ lhu $t4, 4($t3) -/* 035418 7F0008E8 448C9000 */ mtc1 $t4, $f18 -/* 03541C 7F0008EC 46144102 */ mul.s $f4, $f8, $f20 -/* 035420 7F0008F0 05810004 */ bgez $t4, .L7F000904 -/* 035424 7F0008F4 46809420 */ cvt.s.w $f16, $f18 -/* 035428 7F0008F8 44813000 */ mtc1 $at, $f6 -/* 03542C 7F0008FC 00000000 */ nop -/* 035430 7F000900 46068400 */ add.s $f16, $f16, $f6 -.L7F000904: -/* 035434 7F000904 46102283 */ div.s $f10, $f4, $f16 -/* 035438 7F000908 3C018003 */ lui $at, %hi(D_800309A0) -/* 03543C 7F00090C 02302021 */ addu $a0, $s1, $s0 -/* 035440 7F000910 00002825 */ move $a1, $zero -/* 035444 7F000914 E42A09A0 */ swc1 $f10, %lo(D_800309A0)($at) -/* 035448 7F000918 94860004 */ lhu $a2, 4($a0) -/* 03544C 7F00091C 0FC000A4 */ jal sub_GAME_7F000290 -/* 035450 7F000920 24C6FFFF */ addiu $a2, $a2, -1 -/* 035454 7F000924 44824000 */ mtc1 $v0, $f8 -/* 035458 7F000928 8E4D0000 */ lw $t5, ($s2) -/* 03545C 7F00092C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 035460 7F000930 468044A0 */ cvt.s.w $f18, $f8 -/* 035464 7F000934 022D7021 */ addu $t6, $s1, $t5 -/* 035468 7F000938 95CF0004 */ lhu $t7, 4($t6) -/* 03546C 7F00093C 448F2000 */ mtc1 $t7, $f4 -/* 035470 7F000940 46149182 */ mul.s $f6, $f18, $f20 -/* 035474 7F000944 05E10004 */ bgez $t7, .L7F000958 -/* 035478 7F000948 46802420 */ cvt.s.w $f16, $f4 -/* 03547C 7F00094C 44815000 */ mtc1 $at, $f10 -/* 035480 7F000950 00000000 */ nop -/* 035484 7F000954 460A8400 */ add.s $f16, $f16, $f10 -.L7F000958: -/* 035488 7F000958 46103203 */ div.s $f8, $f6, $f16 -/* 03548C 7F00095C 8FBF002C */ lw $ra, 0x2c($sp) -/* 035490 7F000960 3C018003 */ lui $at, %hi(D_800309A4) -/* 035494 7F000964 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 035498 7F000968 8FB00020 */ lw $s0, 0x20($sp) -/* 03549C 7F00096C 8FB10024 */ lw $s1, 0x24($sp) -/* 0354A0 7F000970 8FB20028 */ lw $s2, 0x28($sp) -/* 0354A4 7F000974 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0354A8 7F000978 03E00008 */ jr $ra -/* 0354AC 7F00097C E42809A4 */ swc1 $f8, %lo(D_800309A4)($at) -) -#endif - - - -void sub_GAME_7F000980(void) { - sub_GAME_7F0009A0(); -} - -#if defined (VERSION_EU) -#define POS 0x19 -#else -#define POS 0x27 -#endif - -void sub_GAME_7F0009A0(void) { - u32 *end = &g_Casings[20]; - u32 *ptr = &g_Casings[0]; - while(end > ptr) { - ptr[POS] = 0; - ptr += POS+1; + for (i = 0; i < 32; i++) + { + if (groups[i]->len < 0) + { + groups[i]->len = initResolveAnimGroupTable(groups[i]->table); + } } } + +/** + * Address: 7F0004D0 + * + * Resolves each entry's anim offset into an absolute ModelAnimation*. + * @returns the entry count. + */ +s32 initResolveAnimTable(struct StruckAnim *entries) +{ + s32 count; + struct StruckAnim *entry; + s32 address; + struct StruckAnim *ptr_animation_table_addr; + + count = 0; + entry = entries; + ptr_animation_table_addr = (struct StruckAnim *)(&ptr_animation_table); + + if (1); + + if (entry->struck_anim != 0) + { + do + { + address = (*entry).struck_anim; + entries = ptr_animation_table_addr; + count++; + entry++; + ptr_animation_table_addr = (struct StruckAnim *)(&ptr_animation_table); + entry[-1].struck_anim = (ModelAnimation *)((*((s32 *)entries)) + (0, address)); + } + while (entry->struck_anim != 0); + } + + return count; +} + + +#define ANIM_PTR(anim) \ + ((ModelAnimation *)((s32)&anim + ((s32)ptr_animation_table))) + +#define ANIM_FRAC(anim) \ + ((((f32)sub_GAME_7F000290(ANIM_PTR(anim), 0, ANIM_PTR(anim)->unk04 - 1)) * 0.10000001f) / \ + ((f32)((u32)ANIM_PTR(anim)->unk04))) + +#define ANIM_FRAC_MUL_FIRST(anim) \ + ((0.10000001f * ((f32)sub_GAME_7F000290(ANIM_PTR(anim), 0, ANIM_PTR(anim)->unk04 - 1))) / \ + ((f32)((u32)ANIM_PTR(anim)->unk04))) + +void initWeaponAnimGroups(void) +{ + s32 i; + + if (g_HitReactionTable[0].hitpart != (-1)) + { + i = 0; + + do + { + if (g_HitReactionTable[i].deathAnims != NULL) + { + g_HitReactionTable[i].deathAnimCount = initResolveAnimTable(g_HitReactionTable[i].deathAnims); + } + + if (g_HitReactionTable[i].flinchAnims != NULL) + { + g_HitReactionTable[i].flinchAnimCount = initResolveAnimTable(g_HitReactionTable[i].flinchAnims); + } + + i++; + } + while (g_HitReactionTable[i].hitpart != (-1)); + } + + + initResolveAnimTable(death_stagger); + + initResolveAnimGroups(ptr_rifle_firing_animation_groups); + initResolveAnimGroups(ptr_pistol_firing_animation_groups); + initResolveAnimGroups(ptr_doubles_firing_animation_groups); + initResolveAnimGroups(ptr_crouched_rifle_firing_animation_groups); + initResolveAnimGroups(ptr_crouched_pistol_firing_animation_groups); + initResolveAnimGroups(ptr_crouched_doubles_firing_animation_groups); + + initResolveAnimGroupTable(D_80030078); + initResolveAnimGroupTable(D_80030660); + + D_80030984 = ANIM_FRAC(ANIM_DATA_walking); + D_80030988 = ANIM_FRAC(ANIM_DATA_running); + D_8003098C = ANIM_FRAC(ANIM_DATA_sprinting); + D_80030990 = ANIM_FRAC(ANIM_DATA_walking_unarmed); + D_80030994 = ANIM_FRAC(ANIM_DATA_running_one_handed_weapon); + D_80030998 = ANIM_FRAC(ANIM_DATA_sprinting_one_handed_weapon); + D_8003099C = ANIM_FRAC(ANIM_DATA_walking_female); + D_800309A0 = ANIM_FRAC_MUL_FIRST(ANIM_DATA_running_female); + D_800309A4 = ANIM_FRAC(ANIM_DATA_sprinting_one_handed_weapon); +} + +#undef ANIM_PTR +#undef ANIM_FRAC +#undef ANIM_FRAC_MUL_FIRST + + +/** + * Address: 7F000980 + */ +void casingsInit(void) +{ + initCasingPool(); +} + + +/** + * Address: 7F0009A0 + * + * Sets the header field of every g_Casings entry to NULL. + */ +void initCasingPool(void) +{ + CasingRecord *end = &g_Casings[20]; + CasingRecord *ptr = &g_Casings[0]; + + while (end > ptr) + { + ptr->header = NULL; + ptr++; + } +} diff --git a/src/game/initactorpropstuff.h b/src/game/initactorpropstuff.h index e6d96326..edf2adaf 100644 --- a/src/game/initactorpropstuff.h +++ b/src/game/initactorpropstuff.h @@ -3,31 +3,6 @@ #include -struct attackanimconfig { - /*0x00*/ s16 animnum; - /*0x04*/ f32 unk04; - /*0x08*/ f32 unk08; - /*0x0c*/ f32 unk0c; - /*0x10*/ f32 unk10; // frame number - /*0x14*/ f32 unk14; // frame number - /*0x18*/ f32 unk18; // frame number - /*0x1c*/ f32 unk1c; // frame number - /*0x20*/ f32 unk20; // frame number - /*0x24*/ f32 unk24; // frame number - /*0x28*/ f32 unk28; // frame number - /*0x2c*/ f32 unk2c; // frame number - /*0x30*/ f32 unk30; - /*0x34*/ f32 unk34; - /*0x38*/ f32 unk38; - /*0x3c*/ f32 unk3c; - /*0x40*/ f32 unk40; - /*0x44*/ f32 unk44; -}; -struct attackanimgroup { - struct attackanimconfig *animcfg; - s32 len; -}; - -void sub_GAME_7F0009A0(void); +void initCasingPool(void); #endif diff --git a/src/game/initanitable.c b/src/game/initanitable.c index db97a226..d5cd44a8 100644 --- a/src/game/initanitable.c +++ b/src/game/initanitable.c @@ -219,111 +219,44 @@ struct ModelAnimation *animation_table_ptrs2[] = { }; -#ifdef NONMATCHING -struct anim_data_entry +extern u32 _animation_entriesSegmentRomStart[]; + +struct anim_entry { - void *unk00; + s32 unk00; s32 unk04; - void *unk08; + s32 unk08; s32 unk0C; - void *unk10; + s32 unk10; }; -/** - * https://decomp.me/scratch/n0qGM 82.91% -*/ + void expand_ani_table_entries(s32** arg0) { - s32 **var_v0; - struct anim_data_entry *temp_t7; - s32 intval; - - for (var_v0 = arg0; *var_v0 != 0; var_v0++) - { - //var_v1 = *var_v0; - if (*var_v0 != (s32*)1) - { - temp_t7 = (struct anim_data_entry *)(&ptr_animation_table->data[(s32)*var_v0]); - //temp_t7->unk00 = (s32*)temp_t7; - //*var_v0 = (s32*)temp_t7; + s32** var_v0; - intval = *(s32*)temp_t7->unk08; - temp_t7->unk08 = &ptr_animation_table->data[intval]; - intval = *(s32*)temp_t7->unk10; - temp_t7->unk10 = &ptr_animation_table->data[intval]; + var_v0 = arg0; + while (*var_v0 != 0) { + if (*var_v0 != (s32*)1) { + *var_v0 = (s32)((s32)*var_v0 + (s32)(&ptr_animation_table->data)); + ((struct anim_entry *)*var_v0)->unk08 += (s32)&ptr_animation_table->data; + ((struct anim_entry *)*var_v0)->unk10 += (s32)&ptr_animation_table->data; } + var_v0++; } - for (var_v0 = arg0; *var_v0 != 0; var_v0++) - { - //var_v1 = *var_v0; - if (*var_v0 != (s32*)1) - { + for (var_v0 = arg0; *var_v0 != 0; var_v0++) { + if (*var_v0 != (s32*)1) { **var_v0 += (s32)&_animation_entriesSegmentRomStart; } } } -#else -GLOBAL_ASM( -.text -glabel expand_ani_table_entries -/* 035530 7F000A00 8C830000 */ lw $v1, ($a0) -/* 035534 7F000A04 3C068007 */ lui $a2, %hi(ptr_animation_table) -/* 035538 7F000A08 00801025 */ move $v0, $a0 -/* 03553C 7F000A0C 10600017 */ beqz $v1, .L7F000A6C -/* 035540 7F000A10 24C69538 */ addiu $a2, %lo(ptr_animation_table) # addiu $a2, $a2, -0x6ac8 -/* 035544 7F000A14 8C830000 */ lw $v1, ($a0) -/* 035548 7F000A18 24050001 */ li $a1, 1 -.L7F000A1C: -/* 03554C 7F000A1C 50A3000E */ beql $a1, $v1, .L7F000A58 -/* 035550 7F000A20 8C430004 */ lw $v1, 4($v0) -/* 035554 7F000A24 8CCE0000 */ lw $t6, ($a2) -/* 035558 7F000A28 006E7821 */ addu $t7, $v1, $t6 -/* 03555C 7F000A2C AC4F0000 */ sw $t7, ($v0) -/* 035560 7F000A30 8CD90000 */ lw $t9, ($a2) -/* 035564 7F000A34 8DF80008 */ lw $t8, 8($t7) -/* 035568 7F000A38 03194021 */ addu $t0, $t8, $t9 -/* 03556C 7F000A3C ADE80008 */ sw $t0, 8($t7) -/* 035570 7F000A40 8C430000 */ lw $v1, ($v0) -/* 035574 7F000A44 8CCA0000 */ lw $t2, ($a2) -/* 035578 7F000A48 8C690010 */ lw $t1, 0x10($v1) -/* 03557C 7F000A4C 012A5821 */ addu $t3, $t1, $t2 -/* 035580 7F000A50 AC6B0010 */ sw $t3, 0x10($v1) -/* 035584 7F000A54 8C430004 */ lw $v1, 4($v0) -.L7F000A58: -/* 035588 7F000A58 24420004 */ addiu $v0, $v0, 4 -/* 03558C 7F000A5C 1460FFEF */ bnez $v1, .L7F000A1C -/* 035590 7F000A60 00000000 */ nop -/* 035594 7F000A64 00801025 */ move $v0, $a0 -/* 035598 7F000A68 8C830000 */ lw $v1, ($a0) -.L7F000A6C: -/* 03559C 7F000A6C 1060000D */ beqz $v1, .L7F000AA4 -/* 0355A0 7F000A70 24050001 */ li $a1, 1 -/* 0355A4 7F000A74 3C040012 */ lui $a0, %hi(_animation_entriesSegmentRomStart) # $a0, 0x12 -/* 0355A8 7F000A78 24844AC0 */ addiu $a0, %lo(_animation_entriesSegmentRomStart) # addiu $a0, $a0, 0x4ac0 -/* 0355AC 7F000A7C 8C430000 */ lw $v1, ($v0) -.L7F000A80: -/* 0355B0 7F000A80 50A30005 */ beql $a1, $v1, .L7F000A98 -/* 0355B4 7F000A84 8C430004 */ lw $v1, 4($v0) -/* 0355B8 7F000A88 8C6C0000 */ lw $t4, ($v1) -/* 0355BC 7F000A8C 01846821 */ addu $t5, $t4, $a0 -/* 0355C0 7F000A90 AC6D0000 */ sw $t5, ($v1) -/* 0355C4 7F000A94 8C430004 */ lw $v1, 4($v0) -.L7F000A98: -/* 0355C8 7F000A98 24420004 */ addiu $v0, $v0, 4 -/* 0355CC 7F000A9C 1460FFF8 */ bnez $v1, .L7F000A80 -/* 0355D0 7F000AA0 00000000 */ nop -.L7F000AA4: -/* 0355D4 7F000AA4 03E00008 */ jr $ra -/* 0355D8 7F000AA8 00000000 */ nop -) -#endif void alloc_load_expand_ani_table(void) { s32 animsDataSegmentSize; osCreateMesgQueue(&animMsgQ, animMesg, 8); - sub_GAME_7F0009E0(&D_80029D60, &animMsgQ, &dword_CODE_bss_80069458); + initAnimationsBuffer(&D_80029D60, &animMsgQ, &dword_CODE_bss_80069458); animsDataSegmentSize = (s32)&_animation_dataSegmentEnd - (s32)&_animation_dataSegmentStart; diff --git a/src/game/initgamedata.c b/src/game/initgamedata.c index c1671fe3..c49450a6 100644 --- a/src/game/initgamedata.c +++ b/src/game/initgamedata.c @@ -3,7 +3,7 @@ #include /** * initGameData - * + * **/ void initGameData(void) { current_menu = MENU_INVALID; @@ -31,6 +31,12 @@ void initGameData(void) { cast_model = NULL; cast_model_weapon = NULL; full_actor_intro = FALSE; +#ifdef DEBUG + load_body_head_if_not_loaded(BODY_Brosnan_Tuxedo, "char"); + load_body_head_if_not_loaded(BODY_Male_Pierce_Bond_Tuxedo, "head"); + LoadItemModel(PROP_GOLDENEYELOGO); + LoadItemModel(PROP_LEGALPAGE); +#endif } diff --git a/src/game/initguards.h b/src/game/initguards.h index 93b22460..e9499ddd 100644 --- a/src/game/initguards.h +++ b/src/game/initguards.h @@ -4,5 +4,6 @@ void init_guards(void); void bodiesReset(u32 stagenum); +void alloc_init_GUARDdata_entries(s32 count); #endif diff --git a/src/game/initobjects.c b/src/game/initobjects.c index 8b26e177..13fe7efe 100644 --- a/src/game/initobjects.c +++ b/src/game/initobjects.c @@ -17,7 +17,7 @@ f32 g_DoorScale = 1.0f; void alloc_lookup_buffers(); void write_monitor_ani_control_blocks(); -void initialize_temp_mine_table(); +void initialize_proxy_mine_table(); // end forward declarations @@ -45,16 +45,15 @@ void init_load_objpos_table(void) s32 i; difficulty = 1.0f; - ptr_obj_pos_list_current_entry = - ptr_obj_pos_list_first_entry = NULL; + g_ActivePropsTail = g_ActivePropsHead = NULL; g_OnScreenPropCount = 0; g_OnScreenPropList[0] = NULL; g_LastOnScreenProp = (PropRecord *) g_OnScreenPropList; - ptr_obj_pos_list_final_entry = pos_data_entry; + g_FreeProps = g_Props; - for (i=0; i<(POS_DATA_ENTRY_LEN-1); i++) + for (i = 0; i < (MAX_PROPS - 1); i++) { - pos_data_entry[i].prev = &pos_data_entry[i+1]; + g_Props[i].prev = &g_Props[i + 1]; } alloc_lookup_buffers(); @@ -70,23 +69,23 @@ void alloc_lookup_buffers(void) s32 i; ptr_list_object_lookup_indices = (s16 *)mempAllocBytesInBank(PTR_LIST_OBJECT_LOOKUP_INDICES_LEN * sizeof(s16), MEMPOOL_STAGE); - RoomPropListChunkIndexes = (s16 *)mempAllocBytesInBank((((g_MaxNumRooms * 4) + 0xF) | 0xF) ^ 0xF, MEMPOOL_STAGE); - RoomPropListChunks = (s16 *)mempAllocBytesInBank(BSS_8007161C_LEN * sizeof(struct roomproplistchunk), MEMPOOL_STAGE); + RoomPropListBlockIndices = (s16 *)mempAllocBytesInBank((((g_MaxNumRooms * 4) + 0xF) | 0xF) ^ 0xF, MEMPOOL_STAGE); + RoomPropListBlocks = (s16 *)mempAllocBytesInBank(BSS_8007161C_LEN * sizeof(struct roomproplistblock), MEMPOOL_STAGE); ptr_list_object_lookup_indices[0] = -1; for (i=0; i +#include "chrai.h" #include "initpathtablelinks.h" #include "padhalllv.h" -#ifdef NONMATCHING - -/*** -* Ryan spent a few minutes looking at this and left some notes about what this function does: -* -* var_s6 is an "error" variable. If set anywhere, the function goes into an infinite loop at the end. -* The first outer loop appears to be verifying that the waypoints don't list themselves as their own neighbour. -* The second outer loop appears to do the same but for waygroups. It also calls sub_GAME_7F08F438, which is a more simple version of PD's waypointFindSegmentIntoGroup, so it's likely verifying that there is a waypoint path between this group and each neighbour. -* The third outer loop is iterating waygroups, then iterating each group's waypoints, and assigning each waypoint's groupNum if it's less than 0. If a value is stored and it's wrong, the error variable is set. -* The fourth outer loop is checking that all waypoints have a groupNum assigned. -* The fifth outer loop I'm not sure about without actually decompiling it and naming stuff. It appears to be using the waypoint->dist property temporary so it can validate something. If it doesn't like it then the error variable is set. -* The final outer loop is the infinite loop which occurs if the error variable is true. -*/ - /** * NTSC address 0x7F006890. - * https://decomp.me/scratch/nSCDd 40.03% -*/ + * + * Ryan spent a few minutes looking at this and left some notes about what this function does: + * + * var_s6 is an "error" variable. If set anywhere, the function goes into an infinite loop at the end. + * The first outer loop appears to be verifying that the waypoints don't list themselves as their own neighbour. + * The second outer loop appears to do the same but for waygroups. It also calls sub_GAME_7F08F438, which is a more simple version of PD's waypointFindSegmentIntoGroup, so it's likely verifying that there is a waypoint path between this group and each neighbour. + * The third outer loop is iterating waygroups, then iterating each group's waypoints, and assigning each waypoint's groupNum if it's less than 0. If a value is stored and it's wrong, the error variable is set. + * The fourth outer loop is checking that all waypoints have a groupNum assigned. + * The fifth outer loop I'm not sure about without actually decompiling it and naming stuff. It appears to be using the waypoint->dist property temporary so it can validate something. If it doesn't like it then the error variable is set. + * The final outer loop is the infinite loop which occurs if the error variable is true. + */ + void init_path_table_links(void) { - waypoint *spA0; - waypoint *sp9C; + stagesetup *setup; + waygroup *groups; + s32 hasError; + waypoint *waypoints; + s32 waypointIndex; + waygroup *currentWaypoint; - s32 var_s6; - waypoint *temp_s0; - waygroup *spD8; + hasError = 0; + setup = &g_CurrentSetup; + waypoints = setup->pathwaypoints; + groups = setup->waypointgroups; - waypoint *var_t5; - s32 var_v0_2; - s32 var_s3; - s32 var_s1; - s32 *temp_a2; - s32 var_a1; - s32 var_a3; - s32 *temp_v0; - s32 var_a0; - s32 *temp_v1; - s32 var_t1; - s32 *var_v1_3; - waypoint *temp_a1_2; - s32 temp_a2_2; - waygroup *var_t3; - s32 *var_v0_4; - s32 var_a3_2; - waypoint *var_a2_2; - s32 var_t4; - s32 var_t0_2; - s32 var_t1_2; - s32 var_v0_5; - s32 var_v1_4; - s32 var_t1_3; - waypoint *temp_a2_3; - s32 var_v1_5; - s32 var_v0_6; + if (groups); + if (groups); + if (groups); - var_s6 = 0; - - temp_s0 = g_CurrentSetup.pathwaypoints; - spD8 = g_CurrentSetup.waypointgroups; - - if (temp_s0 != NULL) + if (waypoints != NULL) { - var_a3 = 0; + s32 neighbourIndex; + s32 neighbourNum; - var_t5 = temp_s0; - while (var_t5->padID >= 0) + waypointIndex = 0; + currentWaypoint = waypoints; + + while (((waypoint *) currentWaypoint)->padID >= 0) { - temp_v0 = var_t5->neighbours; + neighbourIndex = 0; - while (*temp_v0 >= 0) + while ((neighbourNum = ((waypoint *) currentWaypoint)->neighbours[neighbourIndex]) >= 0) { - if (*temp_v0 == var_a3) + if (neighbourNum == waypointIndex) { - var_s6 = 1; if (g_CurrentSetup.padnames != NULL) { - // removed - #ifdef DEBUG - osSyncPrintf("loc \'%s\' has a link to itself!\n", g_CurrentSetup.padnames[i]); +#ifdef DEBUG + osSyncPrintf("loc '%s' has a link to itself!\n", + g_CurrentSetup.padnames[((waypoint *) currentWaypoint)->padID].p); +#endif } - else + else if (1) { - osSyncPrintf("loc number %d has a link to itself!\n", i); - #endif +#ifdef DEBUG + osSyncPrintf("loc number %d has a link to itself!\n", waypointIndex); +#endif } + hasError = 1; } else { - var_a0 = 0; + waypoint *linkedWaypoint; + s32 reverseIndex; - temp_v1 = temp_s0[*temp_v0].neighbours; + reverseIndex = 0; + linkedWaypoint = &waypoints[neighbourNum]; - while (*temp_v1 >= 0) + while ((linkedWaypoint->neighbours[reverseIndex] >= 0) && (waypointIndex != linkedWaypoint->neighbours[reverseIndex])) { - var_a0++; - - if (var_a3 != *temp_v1) - { - continue; - } - - break; + reverseIndex++; } - - if (var_a3 != temp_s0[*temp_v0].neighbours[var_a0]) + + if (waypointIndex != linkedWaypoint->neighbours[reverseIndex]) { #ifdef DEBUG if (g_CurrentSetup.padnames == NULL) { - osSyncPrintf("loc number %d has link to number %d but not back again!\n", someting, something2); + osSyncPrintf("loc number %d has link to number %d but not back again!\n", + waypointIndex, neighbourNum); } else { - osSyncPrintf("loc \'%s\' has link to \'%s\' but not back again!\n",something->padname, g_CurrentSetup.padnames[i])); + osSyncPrintf("loc '%s' has link to '%s' but not back again!\n", + g_CurrentSetup.padnames[((waypoint *) currentWaypoint)->padID].p, + g_CurrentSetup.padnames[linkedWaypoint->padID].p); } #endif - - var_s6 = 1; + hasError = 1; } } - - temp_v0++; + neighbourIndex++; } - - var_a3++; - var_t5 = &temp_s0[var_a3]; + + waypointIndex++; + currentWaypoint = &waypoints[waypointIndex]; } + } - - if (spD8 != NULL) { - var_s1 = 0; + waygroup *assignmentGroupCursor; + waypoint *validationWaypointCursor; + waygroup *floodGroupCursor; + s32 changed; + s32 floodReverseIndex; + waypoint *connectionWaypoint1; + waypoint *connectionWaypoint2; + s32 *member; + waygroup *floodGroup; + s32 disconnected; + waypoint *floodWaypoint; + s32 floodWaypointNum; + s32 assignmentMemberOffset; + s32 memberIndex; + waypoint *assignmentWaypoint; + s32 assignmentGroupIndex; + s32 linkedWaypointNum; + waypoint *validationWaypoint; - var_s3 = 0; - var_v0_2 = spD8->neighbours[var_s3]; - - while (var_v0_2 >= 0) + if (groups != NULL) { - if (var_v0_2 == var_s1) + waygroup *linkedGroup; + waygroup *validationGroup; + s32 validationGroupIndex; + s32 groupNeighbourIndex; + s32 reverseIndex; + s32 waypointNum; + waygroup *validationGroupCursors[1]; + + validationGroupIndex = 0; + validationGroup = groups; + + if (validationGroup->neighbours != NULL) { - var_s6 = 1; - if (g_CurrentSetup.boundpadnames != NULL) - { - // removed - #ifdef DEBUG - osSyncPrintf("hall \'%s\' has a link to itself!\n", g_CurrentSetup.boundpadnames[i]); - } - else - { - osSyncPrintf("hall number %d has a link to itself!\n", i); - #endif - } - } - else - { - var_a1 = 0; - temp_a2 = &spD8->neighbours[var_v0_2]; + validationGroupCursors[-3] = groups; - while (*temp_a2 >= 0) + do { - var_a1++; + groupNeighbourIndex = 0; + waypointNum = validationGroup->neighbours[groupNeighbourIndex]; - if (var_s1 != *temp_a2) + while (waypointNum >= 0) { - temp_a2++; - continue; - } - - break; - } - - if (var_s1 != temp_a2[var_a1]) - { - var_s6 = 1; - if (g_CurrentSetup.boundpadnames != NULL) - { - // removed - #ifdef DEBUG - osSyncPrintf("hall \'%s\' has link to \'%s\' but not connected locs!\n", g_CurrentSetup.boundpadnames[i]); - } - else - { - osSyncPrintf("hall number %d has link to number %d but not connected locs! \n", i); - #endif - } - - - } - else if (g_CurrentSetup.pathwaypoints != NULL) - { - sub_GAME_7F08F438(spD8, &spD8[var_v0_2], &spA0, &sp9C); - - if (spA0 == NULL || sp9C == NULL) - { - #ifdef DEBUG - if (g_CurrentSetup.padnames == NULL) + if (waypointNum == validationGroupIndex) { - osSyncPrintf("hall number %d has link to number %d but not back again!\n", someting, something2); - } - else - { - osSyncPrintf("hall \'%s\' has link to \'%s\' but not back again!\n",something->padname, g_CurrentSetup.padnames[i])); - } - #endif - var_s6 = 1; - } - } - } - - var_s3++; - var_v0_2 = spD8->neighbours[var_s3]; - } - } - - if ((temp_s0 != NULL) && (spD8 != NULL)) - { - var_t1 = 0; - - var_t3 = spD8; - while (var_t3 != NULL) - { - if (var_t3->neighbours != NULL) - { - var_a3_2 = 0; - var_v1_3 = var_t3->waypoints; - while (*var_v1_3 >= 0) - { - temp_a1_2 = &temp_s0[*var_v1_3]; - temp_a2_2 = temp_a1_2->groupNum; - - if (temp_a2_2 < 0) - { - temp_a1_2->groupNum = var_t1; - var_v0_4 = &var_t3->waypoints[var_a3_2]; - } - else - { - var_v0_4 = &var_t3->waypoints[var_a3_2]; - if (var_t1 != temp_a2_2) - { - #ifdef DEBUG - if (g_CurrentSetup.padnames == NULL || (g_chraiCurrentSetup.volnames == NULL)) + if (g_CurrentSetup.boundpadnames != NULL) { - osSyncPrintf("hall number %d contains loc number %d which thinks it is in hall n umber %d!\n", someting, something2); +#ifdef DEBUG + osSyncPrintf("hall '%s' has a link to itself!\n", g_CurrentSetup.boundpadnames[validationGroupIndex].p); +#endif } else { - osSyncPrintf("hall \'%s\' contains loc \'%s\' which thinks it is in hall \'%s\'! \n", something->padname, g_CurrentSetup.padnames[i], xxx); - } - #endif - - var_s6 = 1; - } - } - - var_a3_2++; - - var_v1_3 = var_v0_4 + 1; - } - - var_t1 = 0; - } - - var_t3++; - } - - var_a2_2 = temp_s0; - while (var_a2_2->padID >= 0) - { - var_a2_2 = &temp_s0[var_t1]; - if (var_a2_2->groupNum < 0) - { - #ifdef DEBUG - if (g_CurrentSetup.padnames != NULL) - { - osSyncPrintf("loc \'%s\' is not in a hall!\n", someting); - } - else - { - osSyncPrintf("loc number %d is not in a hall!\n", i); - } - #endif - - var_s6 = 1; - } - var_t1++; - } - - if (spD8->neighbours != NULL) - { - var_t3 = spD8; - - - while (var_t3 != NULL) - { - var_v1_4 = 0; - var_t0_2 = 0; - var_t4 = 0; - var_t1_2 = 0; - - var_v0_5 = *var_t3->waypoints; - while (var_v0_5 >= 0) - { - if (var_t1_2 == 0) - { - temp_s0[var_v0_5].dist = 1; - } - else - { - temp_s0[var_v0_5].dist = 0; - } - - var_v0_5 = var_t3->waypoints[var_t1_2]; - var_t1_2++; - } - - // loop_57 - var_t1_3 = 0; - var_v0_5 = var_t3->waypoints[var_t1_3]; - while (var_v0_5 >= 0) - { - temp_a2_3 = &temp_s0[var_v0_5]; - - if (temp_a2_3->dist == 1) - { - var_v1_5 = 0; - var_v0_6 = temp_a2_3->neighbours[var_v1_5]; - while (var_v0_6 >= 0) //var_v0_6 >= 0 - { - if (temp_s0[var_v0_6].dist != 1) - { - temp_s0[var_v0_6].dist = 1; - var_t0_2 = 1; - } - - var_v1_5++; - var_v0_6 = temp_a2_3->neighbours[var_v1_5]; - } - } - - var_v0_5 = var_t3->waypoints[var_t1_3]; - } - - // loop_67 - var_v0_5 = *var_t3->waypoints; - while (var_v0_5 >= 0) // var_v0_5 >= 0 - { - var_v1_4++; - if (temp_s0[var_v0_5].dist != 1) - { - var_t4 = 1; - break; - } - - var_v0_5 = var_t3->waypoints[var_v1_4]; - } - - //var_v1_4 = 0; - if (var_t0_2 != 0) - { - //var_v0_5 = var_a1_2; - if (var_t4 != 0) - { - //var_t0_2 = 0; - //var_t4 = 0; - - continue; - } - } - - if (var_t4 != 0) - { - var_s6 = 1; - - if (g_CurrentSetup.boundpadnames != NULL) - { - #ifdef DEBUG - osSyncPrintf("not all locs in hall number %d are connected!\n", i); - } - else - { - osSyncPrintf("not all locs in hall \'%s\' are connected!\n", g_CurrentSetup.boundpadnames[i]); - #endif - } - } - var_t3++; - } - } - } - - if (var_s6 != 0) - { - #ifdef DEBUG - osSyncPrintf("PLEASE FIX THE ABOVE LOC ERRORS NOW! "); - #endif - while(1); - } -} - -#else -GLOBAL_ASM( -.text -glabel init_path_table_links -/* 03B3C0 7F006890 27BDFF20 */ addiu $sp, $sp, -0xe0 -/* 03B3C4 7F006894 AFB40028 */ sw $s4, 0x28($sp) -/* 03B3C8 7F006898 3C148007 */ lui $s4, %hi(g_CurrentSetup+0) -/* 03B3CC 7F00689C 26945D00 */ addiu $s4, %lo(g_CurrentSetup+0) # addiu $s4, $s4, 0x5d00 -/* 03B3D0 7F0068A0 AFB00018 */ sw $s0, 0x18($sp) -/* 03B3D4 7F0068A4 8E900000 */ lw $s0, ($s4) -/* 03B3D8 7F0068A8 8E8E0004 */ lw $t6, 4($s4) -/* 03B3DC 7F0068AC AFB60030 */ sw $s6, 0x30($sp) -/* 03B3E0 7F0068B0 AFBF003C */ sw $ra, 0x3c($sp) -/* 03B3E4 7F0068B4 AFBE0038 */ sw $fp, 0x38($sp) -/* 03B3E8 7F0068B8 AFB70034 */ sw $s7, 0x34($sp) -/* 03B3EC 7F0068BC AFB5002C */ sw $s5, 0x2c($sp) -/* 03B3F0 7F0068C0 AFB30024 */ sw $s3, 0x24($sp) -/* 03B3F4 7F0068C4 AFB20020 */ sw $s2, 0x20($sp) -/* 03B3F8 7F0068C8 AFB1001C */ sw $s1, 0x1c($sp) -/* 03B3FC 7F0068CC 0000B025 */ move $s6, $zero -/* 03B400 7F0068D0 12000036 */ beqz $s0, .L7F0069AC -/* 03B404 7F0068D4 AFAE00D8 */ sw $t6, 0xd8($sp) -/* 03B408 7F0068D8 8E0F0000 */ lw $t7, ($s0) -/* 03B40C 7F0068DC 00003825 */ move $a3, $zero -/* 03B410 7F0068E0 02006825 */ move $t5, $s0 -/* 03B414 7F0068E4 05E20032 */ bltzl $t7, .L7F0069B0 -/* 03B418 7F0068E8 8FAE00D8 */ lw $t6, 0xd8($sp) -/* 03B41C 7F0068EC 8DA20004 */ lw $v0, 4($t5) -.L7F0068F0: -/* 03B420 7F0068F0 8C460000 */ lw $a2, ($v0) -/* 03B424 7F0068F4 00404025 */ move $t0, $v0 -/* 03B428 7F0068F8 04C20027 */ bltzl $a2, .L7F006998 -/* 03B42C 7F0068FC 24E70001 */ addiu $a3, $a3, 1 -.L7F006900: -/* 03B430 7F006900 14C70007 */ bne $a2, $a3, .L7F006920 -/* 03B434 7F006904 0006C900 */ sll $t9, $a2, 4 -/* 03B438 7F006908 8E980020 */ lw $t8, 0x20($s4) -/* 03B43C 7F00690C 24160001 */ li $s6, 1 -/* 03B440 7F006910 5300001D */ beql $t8, $zero, .L7F006988 -/* 03B444 7F006914 8D060004 */ lw $a2, 4($t0) -/* 03B448 7F006918 1000001B */ b .L7F006988 -/* 03B44C 7F00691C 8D060004 */ lw $a2, 4($t0) -.L7F006920: -/* 03B450 7F006920 03301821 */ addu $v1, $t9, $s0 -/* 03B454 7F006924 8C650004 */ lw $a1, 4($v1) -/* 03B458 7F006928 00002025 */ move $a0, $zero -/* 03B45C 7F00692C 8CAE0000 */ lw $t6, ($a1) -/* 03B460 7F006930 05C2000F */ bltzl $t6, .L7F006970 -/* 03B464 7F006934 0004C880 */ sll $t9, $a0, 2 -/* 03B468 7F006938 10EE000C */ beq $a3, $t6, .L7F00696C -/* 03B46C 7F00693C 00001080 */ sll $v0, $zero, 2 -/* 03B470 7F006940 24420004 */ addiu $v0, $v0, 4 -.L7F006944: -/* 03B474 7F006944 00A2C021 */ addu $t8, $a1, $v0 -/* 03B478 7F006948 8F190000 */ lw $t9, ($t8) -/* 03B47C 7F00694C 24840001 */ addiu $a0, $a0, 1 -/* 03B480 7F006950 07220007 */ bltzl $t9, .L7F006970 -/* 03B484 7F006954 0004C880 */ sll $t9, $a0, 2 -/* 03B488 7F006958 8C6E0004 */ lw $t6, 4($v1) -/* 03B48C 7F00695C 01C27821 */ addu $t7, $t6, $v0 -/* 03B490 7F006960 8DF80000 */ lw $t8, ($t7) -/* 03B494 7F006964 54F8FFF7 */ bnel $a3, $t8, .L7F006944 -/* 03B498 7F006968 24420004 */ addiu $v0, $v0, 4 -.L7F00696C: -/* 03B49C 7F00696C 0004C880 */ sll $t9, $a0, 2 -.L7F006970: -/* 03B4A0 7F006970 00B97021 */ addu $t6, $a1, $t9 -/* 03B4A4 7F006974 8DCF0000 */ lw $t7, ($t6) -/* 03B4A8 7F006978 50EF0003 */ beql $a3, $t7, .L7F006988 -/* 03B4AC 7F00697C 8D060004 */ lw $a2, 4($t0) -/* 03B4B0 7F006980 24160001 */ li $s6, 1 -/* 03B4B4 7F006984 8D060004 */ lw $a2, 4($t0) -.L7F006988: -/* 03B4B8 7F006988 25080004 */ addiu $t0, $t0, 4 -/* 03B4BC 7F00698C 04C1FFDC */ bgez $a2, .L7F006900 -/* 03B4C0 7F006990 00000000 */ nop -/* 03B4C4 7F006994 24E70001 */ addiu $a3, $a3, 1 -.L7F006998: -/* 03B4C8 7F006998 0007C100 */ sll $t8, $a3, 4 -/* 03B4CC 7F00699C 03106821 */ addu $t5, $t8, $s0 -/* 03B4D0 7F0069A0 8DB90000 */ lw $t9, ($t5) -/* 03B4D4 7F0069A4 0723FFD2 */ bgezl $t9, .L7F0068F0 -/* 03B4D8 7F0069A8 8DA20004 */ lw $v0, 4($t5) -.L7F0069AC: -/* 03B4DC 7F0069AC 8FAE00D8 */ lw $t6, 0xd8($sp) -.L7F0069B0: -/* 03B4E0 7F0069B0 11C00054 */ beqz $t6, .L7F006B04 -/* 03B4E4 7F0069B4 00000000 */ nop -/* 03B4E8 7F0069B8 8DCF0000 */ lw $t7, ($t6) -/* 03B4EC 7F0069BC 00008825 */ move $s1, $zero -/* 03B4F0 7F0069C0 01C0A825 */ move $s5, $t6 -/* 03B4F4 7F0069C4 11E0004F */ beqz $t7, .L7F006B04 -/* 03B4F8 7F0069C8 27BE00A0 */ addiu $fp, $sp, 0xa0 -/* 03B4FC 7F0069CC AFAE0048 */ sw $t6, 0x48($sp) -/* 03B500 7F0069D0 2417000C */ li $s7, 12 -/* 03B504 7F0069D4 8EB80000 */ lw $t8, ($s5) -.L7F0069D8: -/* 03B508 7F0069D8 00009825 */ move $s3, $zero -/* 03B50C 7F0069DC 8F020000 */ lw $v0, ($t8) -/* 03B510 7F0069E0 04420042 */ bltzl $v0, .L7F006AEC -/* 03B514 7F0069E4 8FAE0048 */ lw $t6, 0x48($sp) -.L7F0069E8: -/* 03B518 7F0069E8 14510007 */ bne $v0, $s1, .L7F006A08 -/* 03B51C 7F0069EC 00000000 */ nop -/* 03B520 7F0069F0 8E990024 */ lw $t9, 0x24($s4) -/* 03B524 7F0069F4 24160001 */ li $s6, 1 -/* 03B528 7F0069F8 53200036 */ beql $t9, $zero, .L7F006AD4 -/* 03B52C 7F0069FC 8EB90000 */ lw $t9, ($s5) -/* 03B530 7F006A00 10000034 */ b .L7F006AD4 -/* 03B534 7F006A04 8EB90000 */ lw $t9, ($s5) -.L7F006A08: -/* 03B538 7F006A08 00570019 */ multu $v0, $s7 -/* 03B53C 7F006A0C 8FAE00D8 */ lw $t6, 0xd8($sp) -/* 03B540 7F006A10 00002825 */ move $a1, $zero -/* 03B544 7F006A14 00007812 */ mflo $t7 -/* 03B548 7F006A18 01EE9021 */ addu $s2, $t7, $t6 -/* 03B54C 7F006A1C 8E460000 */ lw $a2, ($s2) -/* 03B550 7F006A20 02402025 */ move $a0, $s2 -/* 03B554 7F006A24 8CD80000 */ lw $t8, ($a2) -/* 03B558 7F006A28 07020011 */ bltzl $t8, .L7F006A70 -/* 03B55C 7F006A2C 00057880 */ sll $t7, $a1, 2 -/* 03B560 7F006A30 8CD90000 */ lw $t9, ($a2) -/* 03B564 7F006A34 00001080 */ sll $v0, $zero, 2 -/* 03B568 7F006A38 00C21821 */ addu $v1, $a2, $v0 -/* 03B56C 7F006A3C 5239000C */ beql $s1, $t9, .L7F006A70 -/* 03B570 7F006A40 00057880 */ sll $t7, $a1, 2 -/* 03B574 7F006A44 8C6F0004 */ lw $t7, 4($v1) -.L7F006A48: -/* 03B578 7F006A48 24A50001 */ addiu $a1, $a1, 1 -/* 03B57C 7F006A4C 24420004 */ addiu $v0, $v0, 4 -/* 03B580 7F006A50 05E00006 */ bltz $t7, .L7F006A6C -/* 03B584 7F006A54 24630004 */ addiu $v1, $v1, 4 -/* 03B588 7F006A58 8C8E0000 */ lw $t6, ($a0) -/* 03B58C 7F006A5C 01C2C021 */ addu $t8, $t6, $v0 -/* 03B590 7F006A60 8F190000 */ lw $t9, ($t8) -/* 03B594 7F006A64 5639FFF8 */ bnel $s1, $t9, .L7F006A48 -/* 03B598 7F006A68 8C6F0004 */ lw $t7, 4($v1) -.L7F006A6C: -/* 03B59C 7F006A6C 00057880 */ sll $t7, $a1, 2 -.L7F006A70: -/* 03B5A0 7F006A70 00CF7021 */ addu $t6, $a2, $t7 -/* 03B5A4 7F006A74 8DD80000 */ lw $t8, ($t6) -/* 03B5A8 7F006A78 52380008 */ beql $s1, $t8, .L7F006A9C -/* 03B5AC 7F006A7C 8E8F0000 */ lw $t7, ($s4) -/* 03B5B0 7F006A80 8E990024 */ lw $t9, 0x24($s4) -/* 03B5B4 7F006A84 24160001 */ li $s6, 1 -/* 03B5B8 7F006A88 53200012 */ beql $t9, $zero, .L7F006AD4 -/* 03B5BC 7F006A8C 8EB90000 */ lw $t9, ($s5) -/* 03B5C0 7F006A90 10000010 */ b .L7F006AD4 -/* 03B5C4 7F006A94 8EB90000 */ lw $t9, ($s5) -/* 03B5C8 7F006A98 8E8F0000 */ lw $t7, ($s4) -.L7F006A9C: -/* 03B5CC 7F006A9C 02A02025 */ move $a0, $s5 -/* 03B5D0 7F006AA0 02402825 */ move $a1, $s2 -/* 03B5D4 7F006AA4 11E0000A */ beqz $t7, .L7F006AD0 -/* 03B5D8 7F006AA8 03C03025 */ move $a2, $fp -/* 03B5DC 7F006AAC 0FC23D0E */ jal sub_GAME_7F08F438 -/* 03B5E0 7F006AB0 27A7009C */ addiu $a3, $sp, 0x9c -/* 03B5E4 7F006AB4 8FAE00A0 */ lw $t6, 0xa0($sp) -/* 03B5E8 7F006AB8 8FB8009C */ lw $t8, 0x9c($sp) -/* 03B5EC 7F006ABC 51C00004 */ beql $t6, $zero, .L7F006AD0 -/* 03B5F0 7F006AC0 24160001 */ li $s6, 1 -/* 03B5F4 7F006AC4 57000003 */ bnezl $t8, .L7F006AD4 -/* 03B5F8 7F006AC8 8EB90000 */ lw $t9, ($s5) -/* 03B5FC 7F006ACC 24160001 */ li $s6, 1 -.L7F006AD0: -/* 03B600 7F006AD0 8EB90000 */ lw $t9, ($s5) -.L7F006AD4: -/* 03B604 7F006AD4 26730004 */ addiu $s3, $s3, 4 -/* 03B608 7F006AD8 03337821 */ addu $t7, $t9, $s3 -/* 03B60C 7F006ADC 8DE20000 */ lw $v0, ($t7) -/* 03B610 7F006AE0 0441FFC1 */ bgez $v0, .L7F0069E8 -/* 03B614 7F006AE4 00000000 */ nop -/* 03B618 7F006AE8 8FAE0048 */ lw $t6, 0x48($sp) -.L7F006AEC: -/* 03B61C 7F006AEC 26310001 */ addiu $s1, $s1, 1 -/* 03B620 7F006AF0 25D5000C */ addiu $s5, $t6, 0xc -/* 03B624 7F006AF4 AFB50048 */ sw $s5, 0x48($sp) -/* 03B628 7F006AF8 8EB90000 */ lw $t9, ($s5) -/* 03B62C 7F006AFC 5720FFB6 */ bnezl $t9, .L7F0069D8 -/* 03B630 7F006B00 8EB80000 */ lw $t8, ($s5) -.L7F006B04: -/* 03B634 7F006B04 12000091 */ beqz $s0, .L7F006D4C -/* 03B638 7F006B08 8FAF00D8 */ lw $t7, 0xd8($sp) -/* 03B63C 7F006B0C 11E0008F */ beqz $t7, .L7F006D4C -/* 03B640 7F006B10 00000000 */ nop -/* 03B644 7F006B14 8DE30000 */ lw $v1, ($t7) -/* 03B648 7F006B18 00004825 */ move $t1, $zero -/* 03B64C 7F006B1C 01E05825 */ move $t3, $t7 -/* 03B650 7F006B20 1060001F */ beqz $v1, .L7F006BA0 -/* 03B654 7F006B24 0200B825 */ move $s7, $s0 -/* 03B658 7F006B28 01E06825 */ move $t5, $t7 -.L7F006B2C: -/* 03B65C 7F006B2C 8D640004 */ lw $a0, 4($t3) -/* 03B660 7F006B30 00003825 */ move $a3, $zero -/* 03B664 7F006B34 8C830000 */ lw $v1, ($a0) -/* 03B668 7F006B38 04600011 */ bltz $v1, .L7F006B80 -/* 03B66C 7F006B3C 00037100 */ sll $t6, $v1, 4 -.L7F006B40: -/* 03B670 7F006B40 01D02821 */ addu $a1, $t6, $s0 -/* 03B674 7F006B44 8CA60008 */ lw $a2, 8($a1) -/* 03B678 7F006B48 04C10005 */ bgez $a2, .L7F006B60 -/* 03B67C 7F006B4C 00000000 */ nop -/* 03B680 7F006B50 ACA90008 */ sw $t1, 8($a1) -/* 03B684 7F006B54 8D640004 */ lw $a0, 4($t3) -/* 03B688 7F006B58 10000004 */ b .L7F006B6C -/* 03B68C 7F006B5C 00871021 */ addu $v0, $a0, $a3 -.L7F006B60: -/* 03B690 7F006B60 11260002 */ beq $t1, $a2, .L7F006B6C -/* 03B694 7F006B64 00871021 */ addu $v0, $a0, $a3 -/* 03B698 7F006B68 24160001 */ li $s6, 1 -.L7F006B6C: -/* 03B69C 7F006B6C 8C430004 */ lw $v1, 4($v0) -/* 03B6A0 7F006B70 24E70004 */ addiu $a3, $a3, 4 -/* 03B6A4 7F006B74 24420004 */ addiu $v0, $v0, 4 -/* 03B6A8 7F006B78 0463FFF1 */ bgezl $v1, .L7F006B40 -/* 03B6AC 7F006B7C 00037100 */ sll $t6, $v1, 4 -.L7F006B80: -/* 03B6B0 7F006B80 8DB8000C */ lw $t8, 0xc($t5) -/* 03B6B4 7F006B84 25AD000C */ addiu $t5, $t5, 0xc -/* 03B6B8 7F006B88 01A05825 */ move $t3, $t5 -/* 03B6BC 7F006B8C 1700FFE7 */ bnez $t8, .L7F006B2C -/* 03B6C0 7F006B90 25290001 */ addiu $t1, $t1, 1 -/* 03B6C4 7F006B94 8FAB00D8 */ lw $t3, 0xd8($sp) -/* 03B6C8 7F006B98 00004825 */ move $t1, $zero -/* 03B6CC 7F006B9C 8D630000 */ lw $v1, ($t3) -.L7F006BA0: -/* 03B6D0 7F006BA0 8EEF0000 */ lw $t7, ($s7) -/* 03B6D4 7F006BA4 02E03025 */ move $a2, $s7 -/* 03B6D8 7F006BA8 8FAD00D8 */ lw $t5, 0xd8($sp) -/* 03B6DC 7F006BAC 05E0000A */ bltz $t7, .L7F006BD8 -/* 03B6E0 7F006BB0 24070001 */ li $a3, 1 -/* 03B6E4 7F006BB4 8CCE0008 */ lw $t6, 8($a2) -.L7F006BB8: -/* 03B6E8 7F006BB8 25290001 */ addiu $t1, $t1, 1 -/* 03B6EC 7F006BBC 0009C100 */ sll $t8, $t1, 4 -/* 03B6F0 7F006BC0 05C10002 */ bgez $t6, .L7F006BCC -/* 03B6F4 7F006BC4 03103021 */ addu $a2, $t8, $s0 -/* 03B6F8 7F006BC8 24160001 */ li $s6, 1 -.L7F006BCC: -/* 03B6FC 7F006BCC 8CD90000 */ lw $t9, ($a2) -/* 03B700 7F006BD0 0723FFF9 */ bgezl $t9, .L7F006BB8 -/* 03B704 7F006BD4 8CCE0008 */ lw $t6, 8($a2) -.L7F006BD8: -/* 03B708 7F006BD8 1060005C */ beqz $v1, .L7F006D4C -/* 03B70C 7F006BDC 00000000 */ nop -/* 03B710 7F006BE0 8D640004 */ lw $a0, 4($t3) -.L7F006BE4: -/* 03B714 7F006BE4 00001825 */ move $v1, $zero -/* 03B718 7F006BE8 00004025 */ move $t0, $zero -/* 03B71C 7F006BEC 8C850000 */ lw $a1, ($a0) -/* 03B720 7F006BF0 00006025 */ move $t4, $zero -/* 03B724 7F006BF4 00004825 */ move $t1, $zero -/* 03B728 7F006BF8 04A00012 */ bltz $a1, .L7F006C44 -/* 03B72C 7F006BFC 00A01025 */ move $v0, $a1 -.L7F006C00: -/* 03B730 7F006C00 15200005 */ bnez $t1, .L7F006C18 -/* 03B734 7F006C04 0002C100 */ sll $t8, $v0, 4 -/* 03B738 7F006C08 00027900 */ sll $t7, $v0, 4 -/* 03B73C 7F006C0C 01F07021 */ addu $t6, $t7, $s0 -/* 03B740 7F006C10 10000003 */ b .L7F006C20 -/* 03B744 7F006C14 ADC7000C */ sw $a3, 0xc($t6) -.L7F006C18: -/* 03B748 7F006C18 0310C821 */ addu $t9, $t8, $s0 -/* 03B74C 7F006C1C AF20000C */ sw $zero, 0xc($t9) -.L7F006C20: -/* 03B750 7F006C20 8D640004 */ lw $a0, 4($t3) -/* 03B754 7F006C24 25290004 */ addiu $t1, $t1, 4 -/* 03B758 7F006C28 00897821 */ addu $t7, $a0, $t1 -/* 03B75C 7F006C2C 8DE20000 */ lw $v0, ($t7) -/* 03B760 7F006C30 0441FFF3 */ bgez $v0, .L7F006C00 -/* 03B764 7F006C34 00000000 */ nop -/* 03B768 7F006C38 8C850000 */ lw $a1, ($a0) -/* 03B76C 7F006C3C 00001825 */ move $v1, $zero -/* 03B770 7F006C40 00A01025 */ move $v0, $a1 -.L7F006C44: -/* 03B774 7F006C44 04400020 */ bltz $v0, .L7F006CC8 -/* 03B778 7F006C48 00004825 */ move $t1, $zero -/* 03B77C 7F006C4C 00027100 */ sll $t6, $v0, 4 -.L7F006C50: -/* 03B780 7F006C50 01D03021 */ addu $a2, $t6, $s0 -/* 03B784 7F006C54 8CD8000C */ lw $t8, 0xc($a2) -/* 03B788 7F006C58 25290004 */ addiu $t1, $t1, 4 -/* 03B78C 7F006C5C 54F80014 */ bnel $a3, $t8, .L7F006CB0 -/* 03B790 7F006C60 0089C021 */ addu $t8, $a0, $t1 -/* 03B794 7F006C64 8CC50004 */ lw $a1, 4($a2) -/* 03B798 7F006C68 00001825 */ move $v1, $zero -/* 03B79C 7F006C6C 8CA20000 */ lw $v0, ($a1) -/* 03B7A0 7F006C70 0440000E */ bltz $v0, .L7F006CAC -/* 03B7A4 7F006C74 0002C900 */ sll $t9, $v0, 4 -.L7F006C78: -/* 03B7A8 7F006C78 03302021 */ addu $a0, $t9, $s0 -/* 03B7AC 7F006C7C 8C8F000C */ lw $t7, 0xc($a0) -/* 03B7B0 7F006C80 24630004 */ addiu $v1, $v1, 4 -/* 03B7B4 7F006C84 50EF0005 */ beql $a3, $t7, .L7F006C9C -/* 03B7B8 7F006C88 00A37021 */ addu $t6, $a1, $v1 -/* 03B7BC 7F006C8C AC87000C */ sw $a3, 0xc($a0) -/* 03B7C0 7F006C90 8CC50004 */ lw $a1, 4($a2) -/* 03B7C4 7F006C94 00E04025 */ move $t0, $a3 -/* 03B7C8 7F006C98 00A37021 */ addu $t6, $a1, $v1 -.L7F006C9C: -/* 03B7CC 7F006C9C 8DC20000 */ lw $v0, ($t6) -/* 03B7D0 7F006CA0 0443FFF5 */ bgezl $v0, .L7F006C78 -/* 03B7D4 7F006CA4 0002C900 */ sll $t9, $v0, 4 -/* 03B7D8 7F006CA8 8D640004 */ lw $a0, 4($t3) -.L7F006CAC: -/* 03B7DC 7F006CAC 0089C021 */ addu $t8, $a0, $t1 -.L7F006CB0: -/* 03B7E0 7F006CB0 8F020000 */ lw $v0, ($t8) -/* 03B7E4 7F006CB4 0443FFE6 */ bgezl $v0, .L7F006C50 -/* 03B7E8 7F006CB8 00027100 */ sll $t6, $v0, 4 -/* 03B7EC 7F006CBC 8C850000 */ lw $a1, ($a0) -/* 03B7F0 7F006CC0 00001825 */ move $v1, $zero -/* 03B7F4 7F006CC4 00A01025 */ move $v0, $a1 -.L7F006CC8: -/* 03B7F8 7F006CC8 0440000C */ bltz $v0, .L7F006CFC -/* 03B7FC 7F006CCC 0002C900 */ sll $t9, $v0, 4 -.L7F006CD0: -/* 03B800 7F006CD0 03307821 */ addu $t7, $t9, $s0 -/* 03B804 7F006CD4 8DEE000C */ lw $t6, 0xc($t7) -/* 03B808 7F006CD8 24630001 */ addiu $v1, $v1, 1 -/* 03B80C 7F006CDC 0003C080 */ sll $t8, $v1, 2 -/* 03B810 7F006CE0 10EE0003 */ beq $a3, $t6, .L7F006CF0 -/* 03B814 7F006CE4 0098C821 */ addu $t9, $a0, $t8 -/* 03B818 7F006CE8 10000004 */ b .L7F006CFC -/* 03B81C 7F006CEC 00E06025 */ move $t4, $a3 -.L7F006CF0: -/* 03B820 7F006CF0 8F220000 */ lw $v0, ($t9) -/* 03B824 7F006CF4 0443FFF6 */ bgezl $v0, .L7F006CD0 -/* 03B828 7F006CF8 0002C900 */ sll $t9, $v0, 4 -.L7F006CFC: -/* 03B82C 7F006CFC 11000003 */ beqz $t0, .L7F006D0C -/* 03B830 7F006D00 00001825 */ move $v1, $zero -/* 03B834 7F006D04 15800009 */ bnez $t4, .L7F006D2C -/* 03B838 7F006D08 00A01025 */ move $v0, $a1 -.L7F006D0C: -/* 03B83C 7F006D0C 5180000B */ beql $t4, $zero, .L7F006D3C -/* 03B840 7F006D10 8DAE000C */ lw $t6, 0xc($t5) -/* 03B844 7F006D14 8E8F0024 */ lw $t7, 0x24($s4) -/* 03B848 7F006D18 24160001 */ li $s6, 1 -/* 03B84C 7F006D1C 51E00007 */ beql $t7, $zero, .L7F006D3C -/* 03B850 7F006D20 8DAE000C */ lw $t6, 0xc($t5) -/* 03B854 7F006D24 10000005 */ b .L7F006D3C -/* 03B858 7F006D28 8DAE000C */ lw $t6, 0xc($t5) -.L7F006D2C: -/* 03B85C 7F006D2C 00004025 */ move $t0, $zero -/* 03B860 7F006D30 1000FFC4 */ b .L7F006C44 -/* 03B864 7F006D34 00006025 */ move $t4, $zero -/* 03B868 7F006D38 8DAE000C */ lw $t6, 0xc($t5) -.L7F006D3C: -/* 03B86C 7F006D3C 25AD000C */ addiu $t5, $t5, 0xc -/* 03B870 7F006D40 01A05825 */ move $t3, $t5 -/* 03B874 7F006D44 55C0FFA7 */ bnezl $t6, .L7F006BE4 -/* 03B878 7F006D48 8D640004 */ lw $a0, 4($t3) -.L7F006D4C: -/* 03B87C 7F006D4C 12C00003 */ beqz $s6, .L7F006D5C -/* 03B880 7F006D50 8FB00018 */ lw $s0, 0x18($sp) -.L7F006D54: -/* 03B884 7F006D54 1000FFFF */ b .L7F006D54 -/* 03B888 7F006D58 00000000 */ nop -.L7F006D5C: -/* 03B88C 7F006D5C 8FBF003C */ lw $ra, 0x3c($sp) -/* 03B890 7F006D60 8FB1001C */ lw $s1, 0x1c($sp) -/* 03B894 7F006D64 8FB20020 */ lw $s2, 0x20($sp) -/* 03B898 7F006D68 8FB30024 */ lw $s3, 0x24($sp) -/* 03B89C 7F006D6C 8FB40028 */ lw $s4, 0x28($sp) -/* 03B8A0 7F006D70 8FB5002C */ lw $s5, 0x2c($sp) -/* 03B8A4 7F006D74 8FB60030 */ lw $s6, 0x30($sp) -/* 03B8A8 7F006D78 8FB70034 */ lw $s7, 0x34($sp) -/* 03B8AC 7F006D7C 8FBE0038 */ lw $fp, 0x38($sp) -/* 03B8B0 7F006D80 03E00008 */ jr $ra -/* 03B8B4 7F006D84 27BD00E0 */ addiu $sp, $sp, 0xe0 -) +#ifdef DEBUG + osSyncPrintf("hall number %d has a link to itself!\n", validationGroupIndex); #endif + } + hasError = 1; + } + else + { + linkedGroup = &groups[waypointNum]; + reverseIndex = 0; + while ((linkedGroup->neighbours[reverseIndex] >= 0) && (validationGroupIndex != linkedGroup->neighbours[reverseIndex])) + { + reverseIndex++; + if ((!(&g_CurrentSetup)) && (validationGroupIndex + (linkedGroup != 0))) + { + } + if ((!(&g_CurrentSetup)) && (validationGroupIndex + (groupNeighbourIndex != 0))) + { + } + } + + if (validationGroupIndex != linkedGroup->neighbours[reverseIndex]) + { + if (g_CurrentSetup.boundpadnames != NULL) + { +#ifdef DEBUG + osSyncPrintf("hall '%s' has link to '%s' but not connected locs!\n", + g_CurrentSetup.boundpadnames[validationGroupIndex].p, + g_CurrentSetup.boundpadnames[waypointNum].p); +#endif + } + else + { +#ifdef DEBUG + osSyncPrintf("hall number %d has link to number %d but not connected locs! \n", + validationGroupIndex, waypointNum); +#endif + } + hasError = 1; + } + else + if (g_CurrentSetup.pathwaypoints != NULL) + { + sub_GAME_7F08F438(validationGroup, linkedGroup, &connectionWaypoint1, &connectionWaypoint2); + + if ((connectionWaypoint1 == NULL) || (connectionWaypoint2 == NULL)) + { +#ifdef DEBUG + if (g_CurrentSetup.boundpadnames == NULL) + { + osSyncPrintf("hall number %d has link to number %d but not back again!\n", + validationGroupIndex, waypointNum); + } + else + { + osSyncPrintf("hall '%s' has link to '%s' but not back again!\n", + g_CurrentSetup.boundpadnames[validationGroupIndex].p, + g_CurrentSetup.boundpadnames[waypointNum].p); + } +#endif + hasError = 1; + } + } + } + groupNeighbourIndex++; + waypointNum = validationGroup->neighbours[groupNeighbourIndex]; + } + + validationGroupIndex++; + validationGroupCursors[-3]++; + validationGroup = validationGroupCursors[-3]; + } + while (validationGroupCursors[-3]->neighbours != NULL); + } + } + if ((waypoints != NULL) && (groups != NULL)) + { + { + assignmentGroupIndex = 0; + floodGroup = groups; + validationWaypoint = waypoints + hasError * 0; + + if (floodGroup->neighbours != NULL) + { + currentWaypoint = groups; + assignmentGroupCursor = floodGroup; + + do + { + waypointIndex = 0; + + if (assignmentGroupCursor); + if (assignmentGroupCursor); + + member = floodGroup->waypoints; + + while ((*member) >= 0) + { + assignmentWaypoint = &waypoints[*member]; + + if (assignmentWaypoint->groupNum < 0) + { + assignmentWaypoint->groupNum = assignmentGroupIndex; + } + else if (assignmentWaypoint->groupNum != assignmentGroupIndex) + { +#ifdef DEBUG + if ((g_CurrentSetup.boundpadnames == NULL) || (g_CurrentSetup.padnames == NULL)) + { + osSyncPrintf("hall number %d contains loc number %d which thinks it is in hall number %d!\n", + assignmentGroupIndex, *member, assignmentWaypoint->groupNum); + } + else + { + osSyncPrintf("hall '%s' contains loc '%s' which thinks it is in hall '%s'! \n", + g_CurrentSetup.boundpadnames[assignmentGroupIndex].p, + g_CurrentSetup.padnames[assignmentWaypoint->padID].p, + g_CurrentSetup.boundpadnames[assignmentWaypoint->groupNum].p); + } +#endif + hasError = 1; + } + + waypointIndex += 4; + member = (s32 *) (((char *) floodGroup->waypoints) + waypointIndex); + } + + currentWaypoint++; + floodGroup = currentWaypoint; + assignmentGroupIndex++; + } + while (currentWaypoint->neighbours != NULL); + } + + } + + floodGroup = groups; + + { + assignmentGroupIndex = 0; + validationWaypointCursor = validationWaypoint; + floodGroupCursor = groups; + currentWaypoint = floodGroupCursor; + + while (validationWaypointCursor->padID >= 0) + { + if (validationWaypointCursor->groupNum < 0) + { +#ifdef DEBUG + if (g_CurrentSetup.padnames != NULL) + { + osSyncPrintf("loc '%s' is not in a hall!\n", + g_CurrentSetup.padnames[validationWaypointCursor->padID].p); + } + else + { + osSyncPrintf("loc number %d is not in a hall!\n", assignmentGroupIndex); + } +#endif + hasError = 1; + } + + assignmentGroupIndex++; + validationWaypointCursor = &waypoints[assignmentGroupIndex]; + } + + } + + if (groups->neighbours != NULL) + { + do + { + memberIndex = 0; + floodWaypointNum = floodGroup->waypoints[memberIndex]; + + while (floodWaypointNum >= 0) + { + floodWaypoint = &waypoints[floodWaypointNum]; + + if (memberIndex == 0) + { + floodWaypoint->dist = 1; + } + else + { + floodWaypoint->dist = 0; + + if (((currentWaypoint) && (currentWaypoint)) && (currentWaypoint)); + } + + memberIndex++; + floodWaypointNum = floodGroup->waypoints[memberIndex]; + } + + while (1) + { + memberIndex = 0; + floodWaypointNum = floodGroup->waypoints[memberIndex]; + changed = 0; + disconnected = 0; + + while (floodWaypointNum >= 0) + { + floodWaypoint = &waypoints[floodWaypointNum]; + + if (floodWaypoint->dist == 1) + { + floodReverseIndex = 0; + linkedWaypointNum = floodWaypoint->neighbours[floodReverseIndex]; + + if (linkedWaypointNum >= 0) + { + do + { + assignmentWaypoint = &waypoints[linkedWaypointNum]; + + if (assignmentWaypoint->dist != 1) + { + assignmentWaypoint->dist = 1; + changed = 1; + } + + floodReverseIndex++; + linkedWaypointNum = floodWaypoint->neighbours[floodReverseIndex]; + } + while (linkedWaypointNum >= 0); + } + } + + memberIndex++; + floodWaypointNum = floodGroup->waypoints[memberIndex]; + } + + memberIndex = 0; + floodWaypointNum = floodGroup->waypoints[memberIndex]; + + while (floodWaypointNum >= 0) + { + memberIndex++; + floodWaypoint = &waypoints[floodWaypointNum]; + + if (floodWaypoint->dist != 1) + { + disconnected = 1; + break; + } + + floodWaypointNum = floodGroup->waypoints[memberIndex]; + } + + if ((!changed) || (!disconnected)) + { + if (((!validationWaypoint) && (!validationWaypoint)) && (!validationWaypoint)) + { + } + + if (disconnected) + { + if (g_CurrentSetup.boundpadnames != NULL) + { +#ifdef DEBUG + osSyncPrintf("not all locs in hall '%s' are connected!\n", + g_CurrentSetup.boundpadnames[floodGroup - groups].p); +#endif + } + else + { +#ifdef DEBUG + osSyncPrintf("not all locs in hall number %d are connected!\n", + (s32) (floodGroup - groups)); +#endif + } + hasError = 1; + } + break; + } + } + + currentWaypoint = ((waygroup *) currentWaypoint) + 1; + floodGroup = (waygroup *) currentWaypoint; + } + while (((waygroup *) currentWaypoint)->neighbours != NULL); + } + } + } + + if (hasError) + { +#ifdef DEBUG + osSyncPrintf("PLEASE FIX THE ABOVE LOC ERRORS NOW! "); +#endif + while (1) + { + // Intentional crash/freeze + } + + } +} \ No newline at end of file diff --git a/src/game/initunk_0009E0.c b/src/game/initunk_0009E0.c index f706f613..87c48e08 100644 --- a/src/game/initunk_0009E0.c +++ b/src/game/initunk_0009E0.c @@ -1,7 +1,10 @@ #include #include "objecthandler.h" -void sub_GAME_7F0009E0(struct bondstruct_unk_animation_related* animBuffer, OSMesgQueue* mq, s32 unused) { +/* + * Address: 0x7F0009E0 +*/ +void initAnimationsBuffer(struct bondstruct_unk_animation_related* animBuffer, OSMesgQueue* mq, s32 unused) { D_80036414 = animBuffer; // Data structure with offset and two tables D_80036418 = mq; // Unused message queue D_8003641C = unused; // Some unused array diff --git a/src/game/initunk_005450.c b/src/game/initunk_005450.c index c8cb9478..da4e1f56 100644 --- a/src/game/initunk_005450.c +++ b/src/game/initunk_005450.c @@ -1,103 +1,42 @@ #include - +#include "bondtypes.h" #include "initunk_005450.h" -//called by stage load +#define MODELHITENTRIES_LEN 600 +extern struct ModelHitEntry *g_ModelHitFreeList; // canonically freedist -#ifdef NONMATCHING -struct unk_7F005450 -{ - s32 unk00; - s32 unk04; - s32 unk08; - s32 unk0c; // prev struct unk_7F005450 ? +/** + * These are linker/BSS labels. g_ModelHitEntries is the start of a + * ModelHitEntry[600] pool. g_ModelHitEntriesPenultimate labels entry 598 + * inside that same pool and is kept as a raw char symbol so IDO emits the + * original relocation. + */ +extern char g_ModelHitEntries[]; // dword_CODE_bss_80076A50 +extern char g_ModelHitEntriesPenultimate[]; // dword_CODE_bss_80079908 - s32 unk10; // next struct unk_7F005450 ? -}; - -#define D80076A50_LEN 600 - -extern struct unk_7F005450 *D_80036060; // canonically freedist - -struct unk_7F005450 dword_CODE_bss_80076A50[D80076A50_LEN]; - -// There's some loop unrolling, and the type for D_80036060 / dword_CODE_bss_80076A50 isn't known. -// -// https://decomp.me/scratch/W8anf 69% -void sub_GAME_7F005450(void) +/** + * Address: 7F005450 + * + * Called by stage load. + * + * Initializes a fixed pool of ModelHitEntry records used while building per-model hit/collision traversal lists. + * The pool is threaded as a doubly linked free list and consumed by objecthandler.c. + */ +void initModelHitEntryFreeList(void) { s32 i; + ModelHitEntry *entries = (ModelHitEntry *)g_ModelHitEntries; - D_80036060 = dword_CODE_bss_80076A50; + g_ModelHitFreeList = entries; - for (i = 0; i < D80076A50_LEN - 2; i++) + entries[0].next = &entries[1]; + + for (i = 1; i < MODELHITENTRIES_LEN - 1; i++) { - dword_CODE_bss_80076A50[i].unk04 = &dword_CODE_bss_80076A50[i+2].unk00; - dword_CODE_bss_80076A50[i].unk0c = &dword_CODE_bss_80076A50[i+2].unk00; - dword_CODE_bss_80076A50[i].unk10 = &dword_CODE_bss_80076A50[i+2].unk00; + entries[i].next = &entries[i + 1]; + entries[i].prev = &entries[i - 1]; } - // target: t8,t8,%lo(dword_CODE_bss_80079908) - // current: t7,t7,%lo(dword_CODE_bss_80076A50+0x2eb8) ----> 0x80076A50 + 0x2eb8 == 0x80079908 - dword_CODE_bss_80076A50[599].unk10 = &dword_CODE_bss_80076A50[598].unk00; + ((ModelHitEntry *)g_ModelHitEntries)[MODELHITENTRIES_LEN - 1].prev = (ModelHitEntry *)g_ModelHitEntriesPenultimate; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F005450 -/* 039F80 7F005450 3C0A8007 */ lui $t2, %hi(dword_CODE_bss_80076A50) -/* 039F84 7F005454 254A6A50 */ addiu $t2, %lo(dword_CODE_bss_80076A50) # addiu $t2, $t2, 0x6a50 -/* 039F88 7F005458 3C018003 */ lui $at, %hi(D_80036060) -/* 039F8C 7F00545C 3C0B8007 */ lui $t3, %hi(dword_CODE_bss_80076A64) -/* 039F90 7F005460 AC2A6060 */ sw $t2, %lo(D_80036060)($at) -/* 039F94 7F005464 256B6A64 */ addiu $t3, %lo(dword_CODE_bss_80076A64) # addiu $t3, $t3, 0x6a64 -/* 039F98 7F005468 3C0E8007 */ lui $t6, %hi(dword_CODE_bss_80076A78) -/* 039F9C 7F00546C AD4B000C */ sw $t3, 0xc($t2) -/* 039FA0 7F005470 25C66A78 */ addiu $a2, $t6, %lo(dword_CODE_bss_80076A78) -/* 039FA4 7F005474 3C018007 */ lui $at, %hi(dword_CODE_bss_80076A70) -/* 039FA8 7F005478 AC266A70 */ sw $a2, %lo(dword_CODE_bss_80076A70)($at) -/* 039FAC 7F00547C 3C018007 */ lui $at, %hi(dword_CODE_bss_80076A74) -/* 039FB0 7F005480 AC2A6A74 */ sw $t2, %lo(dword_CODE_bss_80076A74)($at) -/* 039FB4 7F005484 3C0F8007 */ lui $t7, %hi(dword_CODE_bss_80076A8C) -/* 039FB8 7F005488 25E46A8C */ addiu $a0, $t7, %lo(dword_CODE_bss_80076A8C) -/* 039FBC 7F00548C 3C018007 */ lui $at, %hi(dword_CODE_bss_80076A84) -/* 039FC0 7F005490 AC246A84 */ sw $a0, %lo(dword_CODE_bss_80076A84)($at) -/* 039FC4 7F005494 3C018007 */ lui $at, %hi(dword_CODE_bss_80076A88) -/* 039FC8 7F005498 3C058007 */ lui $a1, %hi(dword_CODE_bss_80076AA0) -/* 039FCC 7F00549C 3C078007 */ lui $a3, %hi(dword_CODE_bss_80076AB4) -/* 039FD0 7F0054A0 3C088007 */ lui $t0, %hi(dword_CODE_bss_80076AC8) -/* 039FD4 7F0054A4 3C098007 */ lui $t1, %hi(dword_CODE_bss_80076ADC) -/* 039FD8 7F0054A8 3C028008 */ lui $v0, %hi(flt_CODE_bss_8007996C) -/* 039FDC 7F0054AC 2442996C */ addiu $v0, %lo(flt_CODE_bss_8007996C) # addiu $v0, $v0, -0x6694 -/* 039FE0 7F0054B0 25296ADC */ addiu $t1, %lo(dword_CODE_bss_80076ADC) # addiu $t1, $t1, 0x6adc -/* 039FE4 7F0054B4 25086AC8 */ addiu $t0, %lo(dword_CODE_bss_80076AC8) # addiu $t0, $t0, 0x6ac8 -/* 039FE8 7F0054B8 24E76AB4 */ addiu $a3, %lo(dword_CODE_bss_80076AB4) # addiu $a3, $a3, 0x6ab4 -/* 039FEC 7F0054BC 24A56AA0 */ addiu $a1, %lo(dword_CODE_bss_80076AA0) # addiu $a1, $a1, 0x6aa0 -/* 039FF0 7F0054C0 AC2B6A88 */ sw $t3, %lo(dword_CODE_bss_80076A88)($at) -/* 039FF4 7F0054C4 00801825 */ move $v1, $a0 -.L7F0054C8: -/* 039FF8 7F0054C8 AC690048 */ sw $t1, 0x48($v1) -/* 039FFC 7F0054CC 25290050 */ addiu $t1, $t1, 0x50 -/* 03A000 7F0054D0 AC670020 */ sw $a3, 0x20($v1) -/* 03A004 7F0054D4 AC640024 */ sw $a0, 0x24($v1) -/* 03A008 7F0054D8 AC680034 */ sw $t0, 0x34($v1) -/* 03A00C 7F0054DC AC650038 */ sw $a1, 0x38($v1) -/* 03A010 7F0054E0 AC67004C */ sw $a3, 0x4c($v1) -/* 03A014 7F0054E4 AC65000C */ sw $a1, 0xc($v1) -/* 03A018 7F0054E8 AC660010 */ sw $a2, 0x10($v1) -/* 03A01C 7F0054EC 24C60050 */ addiu $a2, $a2, 0x50 -/* 03A020 7F0054F0 24A50050 */ addiu $a1, $a1, 0x50 -/* 03A024 7F0054F4 24E70050 */ addiu $a3, $a3, 0x50 -/* 03A028 7F0054F8 25080050 */ addiu $t0, $t0, 0x50 -/* 03A02C 7F0054FC 24840050 */ addiu $a0, $a0, 0x50 -/* 03A030 7F005500 1522FFF1 */ bne $t1, $v0, .L7F0054C8 -/* 03A034 7F005504 24630050 */ addiu $v1, $v1, 0x50 -/* 03A038 7F005508 3C188008 */ lui $t8, %hi(dword_CODE_bss_80079908) -/* 03A03C 7F00550C 27189908 */ addiu $t8, %lo(dword_CODE_bss_80079908) # addiu $t8, $t8, -0x66f8 -/* 03A040 7F005510 03E00008 */ jr $ra -/* 03A044 7F005514 AD582EDC */ sw $t8, 0x2edc($t2) -) -#endif - - diff --git a/src/game/initunk_005450.h b/src/game/initunk_005450.h index 50d98d0d..d2648633 100644 --- a/src/game/initunk_005450.h +++ b/src/game/initunk_005450.h @@ -2,6 +2,6 @@ #define _INITUNK_005450_H_ #include -void sub_GAME_7F005450(void); +void initModelHitEntryFreeList(void); #endif diff --git a/src/game/initunk_005520.c b/src/game/initunk_005520.c index b425a1b8..4cdf1036 100644 --- a/src/game/initunk_005520.c +++ b/src/game/initunk_005520.c @@ -1,22 +1,27 @@ #include #include +#include "model.h" #include "initunk_005520.h" #include "objecthandler.h" #include "memp.h" -extern s32 D_80036070; -extern s32 D_80036074; -extern s32 D_80036078; +#define MODEL_SPARE_SLOTS 30 +#define ANIM_MODEL_SPARE_SLOTS 10 + +#define MODEL_SPARE_RWDATALEN 0x14 +#define ANIM_MODEL_SPARE_RWDATALEN 0x8c - -void zero_contents_of_80036070_74(void) { - D_80036070 = 0; - D_80036074 = 0; +void modelmgrResetSlotCounts(void) +{ + g_MaxAnimModelSlots = 0; + g_MaxModelSlots = 0; } -void set_contents_of_80036078(s32 arg0) { - D_80036078 = arg0; + +void modelmgrSetLevelResetting(bool resetting) +{ + g_ModelIsLvResetting = resetting; } //this may be a file split @@ -24,27 +29,26 @@ void set_contents_of_80036078(s32 arg0) { /** * NTSC address 0x7F005540. */ -void sub_GAME_7F005540(s32 arg0) +void modelmgrAllocateModelSlots(s32 numobjs) { - s32 temp_t6; - s32 var_s1; + s32 i; - D_80036074 = arg0 + 30; + g_MaxModelSlots = numobjs + MODEL_SPARE_SLOTS; - ptr_allocation_1 = mempAllocBytesInBank(D_80036074 * sizeof(struct ptr_1_s), MEMPOOL_STAGE); + g_ModelSlots = mempAllocBytesInBank(g_MaxModelSlots * sizeof(struct ModelSlot), MEMPOOL_STAGE); - for (var_s1 = 0; var_s1 < D_80036074; var_s1++) + for (i = 0; i < g_MaxModelSlots; i++) { - ptr_allocation_1[var_s1].unk08 = 0; + g_ModelSlots[i].unk08 = 0; - if (var_s1 < arg0) + if (i < numobjs) { - ptr_allocation_1[var_s1].unk10 = NULL; + g_ModelSlots[i].unk10 = NULL; } else { - ptr_allocation_1[var_s1].unk10 = mempAllocBytesInBank(0x50, MEMPOOL_STAGE); - ptr_allocation_1[var_s1].unk02 = 0x14; + g_ModelSlots[i].unk10 = mempAllocBytesInBank(MODEL_SPARE_RWDATALEN * sizeof(u32), MEMPOOL_STAGE); + g_ModelSlots[i].unk02 = MODEL_SPARE_RWDATALEN; } } } @@ -53,29 +57,29 @@ void sub_GAME_7F005540(s32 arg0) /** * NTSC address 0x7F005540. */ -void sub_GAME_7F005624(s32 arg0) +void modelmgrAllocateAnimModelSlots(s32 numanimated) { s32 temp_t6; - s32 var_s1; + s32 i; - D_80036070 = arg0 + 10; + g_MaxAnimModelSlots = numanimated + ANIM_MODEL_SPARE_SLOTS; - // mips2c says: ptr_allocation_0 = mempAllocBytesInBank(temp_t6 * 0xC0, 4); + // mips2c says: g_AnimModelSlots = mempAllocBytesInBank(temp_t6 * 0xC0, 4); // however, the pointer is incremented by 0xbc in the loop below. - ptr_allocation_0 = mempAllocBytesInBank(D_80036070 * (4 + sizeof(struct ptr_0_s)), MEMPOOL_STAGE); + g_AnimModelSlots = mempAllocBytesInBank(g_MaxAnimModelSlots * (4 + sizeof(struct AnimModelSlot)), MEMPOOL_STAGE); - for (var_s1 = 0; var_s1 < D_80036070; var_s1++) + for (i = 0; i < g_MaxAnimModelSlots; i++) { - ptr_allocation_0[var_s1].unk08 = 0; + g_AnimModelSlots[i].unk08 = 0; - if (var_s1 < arg0) + if (i < numanimated) { - ptr_allocation_0[var_s1].unk10 = NULL; + g_AnimModelSlots[i].unk10 = NULL; } else { - ptr_allocation_0[var_s1].unk10 = mempAllocBytesInBank(0x230, MEMPOOL_STAGE); - ptr_allocation_0[var_s1].unk02 = 0x8c; + g_AnimModelSlots[i].unk10 = mempAllocBytesInBank(ANIM_MODEL_SPARE_RWDATALEN * sizeof(u32), MEMPOOL_STAGE); + g_AnimModelSlots[i].unk02 = ANIM_MODEL_SPARE_RWDATALEN; } } } diff --git a/src/game/initunk_005520.h b/src/game/initunk_005520.h index 27e06829..dde0fbd5 100644 --- a/src/game/initunk_005520.h +++ b/src/game/initunk_005520.h @@ -2,7 +2,9 @@ #define _INITUNK_005520_H_ #include -void set_contents_of_80036078(s32 arg0); -void zero_contents_of_80036070_74(void); +void modelmgrSetLevelResetting(bool resetting); +void modelmgrResetSlotCounts(void); +void modelmgrAllocateModelSlots(s32 numobjs); +void modelmgrAllocateAnimModelSlots(s32 numanimated); #endif diff --git a/src/game/initweaponanigroups.c b/src/game/initweaponanigroups.c index 236891a7..72e3e1bd 100644 --- a/src/game/initweaponanigroups.c +++ b/src/game/initweaponanigroups.c @@ -7,5 +7,5 @@ extern s32 get_ptr_allocated_block_for_vertices; void init_weapon_animation_groups_maybe(void) { set_vtxallocator(&get_ptr_allocated_block_for_vertices); - somethingwith_weapon_animation_groups(); + initWeaponAnimGroups(); } diff --git a/src/game/lightfixture.c b/src/game/lightfixture.c index a0e1a908..b75779e1 100644 --- a/src/game/lightfixture.c +++ b/src/game/lightfixture.c @@ -1,3 +1,63 @@ +/** + * GE's light system is quite rudimentary and does just two things when a light is destroyed: + * + * 1) it darkens the light fixture's own vertices in place. Each vertex + * color component is shifted right by 2 so the fixture's polygons draw + * at a quarter brightness and read as burnt out + * + * 2) it spawns glass shards from the light fixture + * + * Two tables are important for this sytem. + * + * light_fixture_table[100] is a directory of the fixtures currently loaded. An + * entry is (room_index, DL start, DL end): the run of a room's display list + * drawn with a single light texture. Note that one entry is NOT one light fixture, + * but rather a batch of tris in a room using the same texture. Thus one entry could + * represent multiple light fixtures so long as those fixtures use the same texture. + * Function lightIsCoordNearDarkenedVertex() determines what counts as one light fixture. + * + * darkened_light_table[512] is the persistent record of what has been shot + * out, as (room_index, vertex index). It has to be separate and persistent + * because vertex data is reread from the file whenever a room is streamed + * back in, which wipes the in-place darkening. It is a circular buffer, so on + * a level with a great many broken lights the oldest ones silently come back. + * + * Lifecycle: + * Level start On level start lightFixtureInitTables() zeroes both tables. + * + * Room load bgLoadRoomPrimaryGdl() calls clear_light_fixturetable_in_room(), + * which drops that room's stale fixture entries and latches the + * room number into current_light_fixture_room. Then + * texLoadFromGdl() walks the room's display list. Every time it + * emits a texture that check_if_imageID_is_light() recognises + * it opens an entry via lightFixtureEntryBegin() + * and closes it with lightFixtureEntryEnd(). So the + * fixture directory is a by-product of texture processing. + * + * Room unload Nothing! delete_room_data() frees ptr_expanded_mapping_info, + * the display list these entries point into, but never + * touches light_fixture_table. Thus a level could in theory have + * enough lights to fill the light_fixture_table and after that + * point you wouldn't be able to shoot out any more lights. But I + * don't believe any levels actually have enough rooms and lights + * to fill the table. + * + * Vertex load after bgLoadRoomVtxData(), bg.c calls redarken_lights_in_room() + * to re-apply the >>2 to every vertex the darkened table lists for + * that room, restoring lights the player broke earlier. + * + * Bullet hit chrprop.c checks check_if_imageID_is_light() on the hit + * texture and, if it matches, calls lightFixtureBreak() with the + * display list command of the triangle that was hit. + * + * Vertex pointers inside a room display list are segmented addresses - segment + * SPSEGMENT_BG_VTX (14) in the top byte, a 24-bit offset below - because the + * display list was built offline. The RSP resolves them from the gSPSegment + * that bg.c issues at draw time, but code here reads the vertices with the CPU + * and so has to resolve them by hand: room vertex base + offset. That is the + * "(ptr & 0xFF000000) == 0x0E000000" test in lightFindVertexBaseForTri. + */ + #include #include "lightfixture.h" #include "bg.h" @@ -5,31 +65,28 @@ #include #include #include +#include #define LIGHTFIXTURE_TABLE_MAX 0x64 #define DARKENED_LIGHT_TABLE_MAX 0x200 -// bss -//CODE.bss:80082660 s_lightfixture light_fixture_table[LIGHTFIXTURE_TABLE_MAX]; -//CODE.bss:80082B10 -s16 cur_entry_lightfixture_table; -//CODE.bss:80082B12 -s16 index_of_cur_entry_lightfixture_table; -//CODE.bss:80082B14 .align 3 -//CODE.bss:80082B18 -struct s_darkened_light darkened_light_table[DARKENED_LIGHT_TABLE_MAX]; // a table containing the vertices of lights that were shot, and therefore, darkened -//CODE.bss:80083318 -s32 dword_CODE_bss_80083318; +s16 current_light_fixture_slot; +s16 current_light_fixture_room; -// data -//D:80046030 +/** + * The darkened light table can hold a maximum of 512 vertices. It is a circular table so if that limit is exceeded, + * the oldest records are overwritten first. + */ +struct s_darkened_light darkened_light_table[DARKENED_LIGHT_TABLE_MAX]; + +s32 dword_CODE_bss_80083318; // unused s32 cur_entry_darkened_light_table = 0; -s32 D_80046034[] = {0, 0, 0, 0, 0, 0, 0}; +s32 D_80046034[] = {0, 0, 0, 0, 0, 0, 0}; // unused -void init_lightfixture_tables(void) +void lightFixtureInitTables(void) { s32 i; @@ -47,7 +104,7 @@ void init_lightfixture_tables(void) } -s32 get_index_of_current_entry_in_init_lightfixture_table(void) +s32 lightFixtureFindFreeSlot(void) { s32 i; @@ -58,31 +115,33 @@ s32 get_index_of_current_entry_in_init_lightfixture_table(void) return i; } } + return LIGHTFIXTURE_TABLE_MAX; } -void add_entry_to_init_lightfixture_table(Gfx *DL) +void lightFixtureEntryBegin(Gfx *DL) { - cur_entry_lightfixture_table = get_index_of_current_entry_in_init_lightfixture_table(); - if (cur_entry_lightfixture_table != LIGHTFIXTURE_TABLE_MAX) + current_light_fixture_slot = lightFixtureFindFreeSlot(); + + if (current_light_fixture_slot != LIGHTFIXTURE_TABLE_MAX) { - light_fixture_table[cur_entry_lightfixture_table].room_index = index_of_cur_entry_lightfixture_table; - light_fixture_table[cur_entry_lightfixture_table].ptr_start_pertinent_DL = DL; + light_fixture_table[current_light_fixture_slot].room_index = current_light_fixture_room; + light_fixture_table[current_light_fixture_slot].ptr_start_pertinent_DL = DL; } } -void save_ptrDL_enpoint_to_current_init_lightfixture_table(Gfx *param_1) +void lightFixtureEntryEnd(Gfx *DL) { - if (cur_entry_lightfixture_table != LIGHTFIXTURE_TABLE_MAX) + if (current_light_fixture_slot != LIGHTFIXTURE_TABLE_MAX) { - light_fixture_table[cur_entry_lightfixture_table].ptr_end_pertinent_DL = param_1; + light_fixture_table[current_light_fixture_slot].ptr_end_pertinent_DL = DL; } } -s32 check_if_imageID_is_light(s32 imageID) +bool check_if_imageID_is_light(s32 imageID) { if ((imageID == IMAGE_WALL_LAMP) || (imageID == IMAGE_203_LIGHT) || @@ -105,17 +164,29 @@ s32 check_if_imageID_is_light(s32 imageID) } -Vtx * return_ptr_vertex_of_entry_room(Gfx * gfx, s32 room_index) +/** + * Returns the vertex array that a triangle command's indices refer to. + * + * Scans backwards to the gSPVertex that last loaded vertices, then resolves its + * address. That address is normally a segment-14 (SPSEGMENT_BG_VTX) reference, + * because room display lists are built offline; the RSP resolves those itself + * at draw time, but this runs on the CPU and so adds the room's vertex base by + * hand. + */ +Vtx *lightFindVertexBaseForTri(Gfx *gfx, s32 room_index) { Vtx * ret; - while (gfx->dma.cmd != G_VTX ){ gfx--; } + while (gfx->dma.cmd != G_VTX ) + { + gfx--; + } ret = gfx->dma.addr; - // weird memory checking, not sure what's going on here - if (((s32) ret & 0xFF000000) == 0x0E000000) { - ret = (s32)g_BgRoomInfo[room_index].ptr_point_index + ((s32) ret & 0xFFFFFF); + if (((s32) ret & 0xFF000000) == 0x0E000000) + { + ret = (s32)g_BgRoomInfo[room_index].vertices + ((s32) ret & 0xFFFFFF); } return ret; @@ -124,7 +195,8 @@ Vtx * return_ptr_vertex_of_entry_room(Gfx * gfx, s32 room_index) void extract_vertex_indices_from_triangle(Gfx* gfx, u32 tri_type, s32* idx1, s32* idx2, s32* idx3) { - switch (tri_type) { + switch (tri_type) + { case 0: *idx1 = (s32) gfx->tri.tri.v[0] / 10; *idx2 = (s32) gfx->tri.tri.v[1] / 10; @@ -163,7 +235,7 @@ void extract_vertex_coords_from_triangle(Gfx * gfx, u32 tri_type, s32 room_index Vtx * vertices; extract_vertex_indices_from_triangle(gfx, tri_type, &idx1, &idx2, &idx3); - vertices = return_ptr_vertex_of_entry_room(gfx, room_index); + vertices = lightFindVertexBaseForTri(gfx, room_index); out1->AsArray[0] = (s16) vertices[idx1].v.ob[0]; out1->AsArray[1] = (s16) vertices[idx1].v.ob[1]; @@ -185,7 +257,7 @@ void redarken_lights_in_room(s32 room_index) s32 i; struct s_darkened_light* unk; - vertex = g_BgRoomInfo[room_index].ptr_point_index; + vertex = g_BgRoomInfo[room_index].vertices; for (i = 0; i < DARKENED_LIGHT_TABLE_MAX; i++) { @@ -209,7 +281,7 @@ void darken_vertex_in_room(Vtx * vertex, s32 room_index) if (darkened_light_table_contains_vertex(vertex, room_index) != 0) { return; } // weird memory stuff going on here - vtx_index = ((u32)vertex - (u32)g_BgRoomInfo[room_index].ptr_point_index) >> 4; + vtx_index = ((u32)vertex - (u32)g_BgRoomInfo[room_index].vertices) >> 4; darkened_light_table[cur_entry_darkened_light_table].room_index = (u16) room_index; darkened_light_table[cur_entry_darkened_light_table].vtx_index = vtx_index; @@ -234,7 +306,7 @@ s32 darkened_light_table_contains_vertex(Vtx * vertex, s32 room_index) s32 i; // weird memory stuff going on here - vtx_index = ((u32)vertex - (u32)g_BgRoomInfo[room_index].ptr_point_index) >> 4; + vtx_index = ((u32)vertex - (u32)g_BgRoomInfo[room_index].vertices) >> 4; for (i = 0; i < DARKENED_LIGHT_TABLE_MAX; i++) { @@ -257,7 +329,7 @@ void darken_triangle_in_room(Gfx *gfx, u32 tri_type, s32 room_index) Vtx * vertices; extract_vertex_indices_from_triangle(gfx, tri_type, &idx1, &idx2, &idx3); - vertices = return_ptr_vertex_of_entry_room(gfx, room_index); + vertices = lightFindVertexBaseForTri(gfx, room_index); darken_vertex_in_room(&vertices[idx1], room_index); darken_vertex_in_room(&vertices[idx2], room_index); @@ -278,13 +350,14 @@ s32 darkened_light_table_contains_triangle(Gfx * gfx, u32 tri_type, s32 room_ind s32 out1; extract_vertex_indices_from_triangle(gfx, tri_type, &idx1, &idx2, &idx3); - vertices = return_ptr_vertex_of_entry_room(gfx, room_index); + vertices = lightFindVertexBaseForTri(gfx, room_index); out1 = darkened_light_table_contains_vertex(&vertices[idx2], room_index); out2 = darkened_light_table_contains_vertex(&vertices[idx1], room_index); out3 = darkened_light_table_contains_vertex(&vertices[idx3], room_index); return out3 + out2 + out1; } + /** * Test whether a tri belongs to a light fixture region that should also be darkened. */ @@ -301,7 +374,7 @@ s32 lightIsCoordNearDarkenedVertex(coord16 * coord, s32 room_index) { if (room_index == darkened_light_table[i].room_index) { - vertex = &g_BgRoomInfo[room_index].ptr_point_index[darkened_light_table[i].vtx_index]; + vertex = &g_BgRoomInfo[room_index].vertices[darkened_light_table[i].vtx_index]; dx = vertex->v.ob[0] - coord->AsArray[0]; dy = vertex->v.ob[1] - coord->AsArray[1]; @@ -321,114 +394,146 @@ s32 lightIsCoordNearDarkenedVertex(coord16 * coord, s32 room_index) return 0; } + /** * Darken the vertices belonging to a light fixture and spawn shards of glass. + * + * When a bullet hits a triangle, lightFixtureBreak searches for a light_fixture_table entry where: + * room_index == entry->room_index + * gfx >= entry->ptr_start_pertinent_DL + * gfx < entry->ptr_end_pertinent_DL + * */ -void lightFixtureBreak(Gfx * gfx, u32 tri_type, s32 room_index) +void lightFixtureBreak(Gfx * hit_gfx, u32 tri_type, s32 room_index) { s16 diff_z_12; - + // Vertices of the hit triangle coord16 hit_vtx1; coord16 hit_vtx2; coord16 hit_vtx3; - - coord16 tri_vtx1; - coord16 tri_vtx2; - coord16 tri_vtx3; - - s16 diff_x_13; + + // Corners of whichever candidate tri is currently being tested for darkening + coord16 cand_vtx1; + coord16 cand_vtx2; + coord16 cand_vtx3; + + s16 diff_x_23; s16 diff_x_12; Gfx *fixture_gfx; - f32 dist_tween; + f32 edge_frac; s32 j; - s8 should_darken1; - s8 should_darken2; - s16 diff_y_13; + s8 darken_tri1; + s8 darken_tri4; + s16 diff_y_23; s16 diff_y_12; - s16 diff_x_23; - s16 diff_z_13; - f32 inv_dist_12; - f32 inv_dist_23; - f32 inv_dist_13; + s16 diff_x_13; + s16 diff_z_23; + f32 shard_step_12; + f32 shard_step_13; + f32 shard_step_23; coord3d room_origin; coord3d shard_pos; s32 i; - s16 diff_z_23; + s16 diff_z_13; f32 edge_length; - s16 diff_y_23; - + s16 diff_y_13; + for (i = 0; i < LIGHTFIXTURE_TABLE_MAX; i++) { - if (room_index != light_fixture_table[i].room_index) { continue; } - - if (gfx < light_fixture_table[i].ptr_start_pertinent_DL) { continue; } - if (gfx >= light_fixture_table[i].ptr_end_pertinent_DL) { continue; } - - if (darkened_light_table_contains_triangle(gfx, tri_type, light_fixture_table[i].room_index) != 0) { return; } - + /** + * Check if this shot landed in the same room as this light fixture table entry. If not, skip this iteration. + * This is what makes stale slots in the light fixture array safe. An unloaded room's entries keep dangling + * DL pointers, and they are rejected here before the pointer comparisons + * below could ever look at them. + */ + if (room_index != light_fixture_table[i].room_index) + { + continue; + } + + if (hit_gfx < light_fixture_table[i].ptr_start_pertinent_DL) + { + continue; + } + + if (hit_gfx >= light_fixture_table[i].ptr_end_pertinent_DL) + { + continue; + } + + // If this tri is already darkened, do not darken it again. + if (darkened_light_table_contains_triangle(hit_gfx, tri_type, light_fixture_table[i].room_index) != 0) + { + return; + } + + //Darken the exact triangle that was shot. The check for other tris that are part of this light fixture comes later. + darken_triangle_in_room(hit_gfx, tri_type, light_fixture_table[i].room_index); + /** - * Darken the exact triangle that was shot. + * Measure the hit tri's three edges and turn each into a step size for the shard loops below. + * + * edge_length is in room units; get_room_data_float2() is 1 / level scale, so multiplying gives + * the edge length in world units, and 10.0f / that is the fraction of the edge + * spanning 10 world units. The loops add it to edge_frac from 0 to 1, so shards land every 10 + * world units and a longer edge sheds proportionally more. The per-axis diffs are kept because + * those loops reuse them as the direction to interpolate along. */ - darken_triangle_in_room(gfx, tri_type, light_fixture_table[i].room_index); - - /** - * Get the hit tri's verts, compute the edge lengths, and a step size (inv_dist) - */ - extract_vertex_coords_from_triangle(gfx, tri_type, light_fixture_table[i].room_index, &hit_vtx1, &hit_vtx2, &hit_vtx3); - + extract_vertex_coords_from_triangle(hit_gfx, tri_type, light_fixture_table[i].room_index, &hit_vtx1, &hit_vtx2, &hit_vtx3); + diff_x_12 = hit_vtx1.AsArray[0] - hit_vtx2.AsArray[0]; - diff_x_23 = hit_vtx1.AsArray[0] - hit_vtx3.AsArray[0]; - diff_x_13 = hit_vtx2.AsArray[0] - hit_vtx3.AsArray[0]; - + diff_x_13 = hit_vtx1.AsArray[0] - hit_vtx3.AsArray[0]; + diff_x_23 = hit_vtx2.AsArray[0] - hit_vtx3.AsArray[0]; + diff_y_12 = hit_vtx1.AsArray[1] - hit_vtx2.AsArray[1]; - diff_y_23 = hit_vtx1.AsArray[1] - hit_vtx3.AsArray[1]; - diff_y_13 = hit_vtx2.AsArray[1] - hit_vtx3.AsArray[1]; - + diff_y_13 = hit_vtx1.AsArray[1] - hit_vtx3.AsArray[1]; + diff_y_23 = hit_vtx2.AsArray[1] - hit_vtx3.AsArray[1]; + diff_z_12 = hit_vtx1.AsArray[2] - hit_vtx2.AsArray[2]; - diff_z_23 = hit_vtx1.AsArray[2] - hit_vtx3.AsArray[2]; - diff_z_13 = hit_vtx2.AsArray[2] - hit_vtx3.AsArray[2]; - + diff_z_13 = hit_vtx1.AsArray[2] - hit_vtx3.AsArray[2]; + diff_z_23 = hit_vtx2.AsArray[2] - hit_vtx3.AsArray[2]; + edge_length = sqrtf((diff_x_12 * diff_x_12) + (diff_y_12 * diff_y_12) + (diff_z_12 * diff_z_12)); - inv_dist_12 = 10.0f / (get_room_data_float2() * edge_length); - - edge_length = sqrtf((diff_x_23 * diff_x_23) + (diff_y_23 * diff_y_23) + (diff_z_23 * diff_z_23)); - inv_dist_23 = 10.0f / (get_room_data_float2() * edge_length); - + shard_step_12 = 10.0f / (get_room_data_float2() * edge_length); + edge_length = sqrtf((diff_x_13 * diff_x_13) + (diff_y_13 * diff_y_13) + (diff_z_13 * diff_z_13)); - inv_dist_13 = 10.0f / (get_room_data_float2() * edge_length); - + shard_step_13 = 10.0f / (get_room_data_float2() * edge_length); + + edge_length = sqrtf((diff_x_23 * diff_x_23) + (diff_y_23 * diff_y_23) + (diff_z_23 * diff_z_23)); + shard_step_23 = 10.0f / (get_room_data_float2() * edge_length); + getRoomPositionScaledByIndex(light_fixture_table[i].room_index, &room_origin); - + /** * Spawn glass shards along the edges of the hit tri. * Shards are spawned at fixed length intervals i.e. a long edge spawns more shards than a short edge. * Positions are converted from room space to world space for the glassCreateShard() function. */ - for (dist_tween = 0.0f; dist_tween < 1.0f; dist_tween += inv_dist_12) + for (edge_frac = 0.0f; edge_frac < 1.0f; edge_frac += shard_step_12) { - shard_pos.x = ((hit_vtx2.AsArray[0] + (diff_x_12 * dist_tween)) * get_room_data_float2()) + room_origin.f[0]; - shard_pos.y = ((hit_vtx2.AsArray[1] + (diff_y_12 * dist_tween)) * get_room_data_float2()) + room_origin.f[1]; - shard_pos.z = ((hit_vtx2.AsArray[2] + (diff_z_12 * dist_tween)) * get_room_data_float2()) + room_origin.f[2]; + shard_pos.x = ((hit_vtx2.AsArray[0] + (diff_x_12 * edge_frac)) * get_room_data_float2()) + room_origin.f[0]; + shard_pos.y = ((hit_vtx2.AsArray[1] + (diff_y_12 * edge_frac)) * get_room_data_float2()) + room_origin.f[1]; + shard_pos.z = ((hit_vtx2.AsArray[2] + (diff_z_12 * edge_frac)) * get_room_data_float2()) + room_origin.f[2]; glassCreateShard(&shard_pos, 0.0f, 10.0f); } - - for (dist_tween = 0.0f; dist_tween < 1.0f; dist_tween += inv_dist_23) + + for (edge_frac = 0.0f; edge_frac < 1.0f; edge_frac += shard_step_13) { - shard_pos.x = ((hit_vtx3.AsArray[0] + (diff_x_23 * dist_tween)) * get_room_data_float2()) + room_origin.f[0]; - shard_pos.y = ((hit_vtx3.AsArray[1] + (diff_y_23 * dist_tween)) * get_room_data_float2()) + room_origin.f[1]; - shard_pos.z = ((hit_vtx3.AsArray[2] + (diff_z_23 * dist_tween)) * get_room_data_float2()) + room_origin.f[2]; + shard_pos.x = ((hit_vtx3.AsArray[0] + (diff_x_13 * edge_frac)) * get_room_data_float2()) + room_origin.f[0]; + shard_pos.y = ((hit_vtx3.AsArray[1] + (diff_y_13 * edge_frac)) * get_room_data_float2()) + room_origin.f[1]; + shard_pos.z = ((hit_vtx3.AsArray[2] + (diff_z_13 * edge_frac)) * get_room_data_float2()) + room_origin.f[2]; glassCreateShard(&shard_pos, 0.0f, 10.0f); } - - for (dist_tween = 0.0f; dist_tween < 1.0f; dist_tween += inv_dist_13) + + for (edge_frac = 0.0f; edge_frac < 1.0f; edge_frac += shard_step_23) { - shard_pos.x = ((hit_vtx3.AsArray[0] + (diff_x_13 * dist_tween)) * get_room_data_float2()) + room_origin.f[0]; - shard_pos.y = ((hit_vtx3.AsArray[1] + (diff_y_13 * dist_tween)) * get_room_data_float2()) + room_origin.f[1]; - shard_pos.z = ((hit_vtx3.AsArray[2] + (diff_z_13 * dist_tween)) * get_room_data_float2()) + room_origin.f[2]; + shard_pos.x = ((hit_vtx3.AsArray[0] + (diff_x_23 * edge_frac)) * get_room_data_float2()) + room_origin.f[0]; + shard_pos.y = ((hit_vtx3.AsArray[1] + (diff_y_23 * edge_frac)) * get_room_data_float2()) + room_origin.f[1]; + shard_pos.z = ((hit_vtx3.AsArray[2] + (diff_z_23 * edge_frac)) * get_room_data_float2()) + room_origin.f[2]; glassCreateShard(&shard_pos, 0.0f, 10.0f); } - + /** * Iterate over all tris in the fixture's display list range. * If any vertex of a tri is close to a previously darkened vertex, @@ -438,50 +543,50 @@ void lightFixtureBreak(Gfx * gfx, u32 tri_type, s32 room_index) { if (fixture_gfx->dma.cmd == G_TRI1) { - should_darken1 = 0; - - extract_vertex_coords_from_triangle(fixture_gfx, 0U, light_fixture_table[i].room_index, &tri_vtx1, &tri_vtx2, &tri_vtx3); - - if (lightIsCoordNearDarkenedVertex(&tri_vtx1, light_fixture_table[i].room_index) != 0) + darken_tri1 = 0; + + extract_vertex_coords_from_triangle(fixture_gfx, 0, light_fixture_table[i].room_index, &cand_vtx1, &cand_vtx2, &cand_vtx3); + + if (lightIsCoordNearDarkenedVertex(&cand_vtx1, light_fixture_table[i].room_index) != 0) { - should_darken1 = 1; + darken_tri1 = 1; } - else if (lightIsCoordNearDarkenedVertex(&tri_vtx2, light_fixture_table[i].room_index) != 0) + else if (lightIsCoordNearDarkenedVertex(&cand_vtx2, light_fixture_table[i].room_index) != 0) { - should_darken1 = 1; + darken_tri1 = 1; } - else if (lightIsCoordNearDarkenedVertex(&tri_vtx3, light_fixture_table[i].room_index) != 0) + else if (lightIsCoordNearDarkenedVertex(&cand_vtx3, light_fixture_table[i].room_index) != 0) { - should_darken1 = 1; + darken_tri1 = 1; } - - if (should_darken1 != 0) + + if (darken_tri1 != 0) { - darken_triangle_in_room(fixture_gfx, 0U, light_fixture_table[i].room_index); + darken_triangle_in_room(fixture_gfx, 0, light_fixture_table[i].room_index); } } - else if (fixture_gfx->dma.cmd == -0x4f /* G_TRI2 ? */) + else if (fixture_gfx->dma.cmd == G_TRI4) { for (j = 0; j < 4; j++) { - should_darken2 = 0; - - extract_vertex_coords_from_triangle(fixture_gfx, j + 1, light_fixture_table[i].room_index, &tri_vtx1, &tri_vtx2, &tri_vtx3); - - if (lightIsCoordNearDarkenedVertex(&tri_vtx1, light_fixture_table[i].room_index) != 0) + darken_tri4 = 0; + + extract_vertex_coords_from_triangle(fixture_gfx, j + 1, light_fixture_table[i].room_index, &cand_vtx1, &cand_vtx2, &cand_vtx3); + + if (lightIsCoordNearDarkenedVertex(&cand_vtx1, light_fixture_table[i].room_index) != 0) { - should_darken2 = 1; + darken_tri4 = 1; } - else if (lightIsCoordNearDarkenedVertex(&tri_vtx2, light_fixture_table[i].room_index) != 0) + else if (lightIsCoordNearDarkenedVertex(&cand_vtx2, light_fixture_table[i].room_index) != 0) { - should_darken2 = 1; + darken_tri4 = 1; } - else if (lightIsCoordNearDarkenedVertex(&tri_vtx3, light_fixture_table[i].room_index) != 0) + else if (lightIsCoordNearDarkenedVertex(&cand_vtx3, light_fixture_table[i].room_index) != 0) { - should_darken2 = 1; + darken_tri4 = 1; } - - if (should_darken2 != 0) + + if (darken_tri4 != 0) { darken_triangle_in_room(fixture_gfx, j + 1, light_fixture_table[i].room_index); } @@ -493,9 +598,18 @@ void lightFixtureBreak(Gfx * gfx, u32 tri_type, s32 room_index) } +/** + * When a room loads bgLoadRoomPrimaryGdl() calls this function. + * The function walks through the entire light_fixture_table and frees the slots + * that belong to the room being loaded. The level's room numbers start at 1 so setting + * the room index to 0 is a way to indicate the slot is free. Then texLoadFromGdl() refills slots + * for that room via first-fit, so a reloaded room may land in entirely different slots than before. + */ void clear_light_fixturetable_in_room(s32 room_index) { s32 i; + + for (i = 0; i < LIGHTFIXTURE_TABLE_MAX; i++) { if (room_index == light_fixture_table[i].room_index) @@ -503,6 +617,7 @@ void clear_light_fixturetable_in_room(s32 room_index) light_fixture_table[i].room_index = 0; } } - index_of_cur_entry_lightfixture_table = room_index; + + current_light_fixture_room = room_index; } diff --git a/src/game/lightfixture.h b/src/game/lightfixture.h index a10a35a6..a5884e6e 100644 --- a/src/game/lightfixture.h +++ b/src/game/lightfixture.h @@ -2,6 +2,7 @@ #define _LIGHTFIXTURE_H_ #include +#include typedef struct s_lightfixture { s16 room_index; @@ -15,4 +16,8 @@ struct s_darkened_light { u16 vtx_index; }; +void lightFixtureEntryEnd(Gfx *param_1); +bool check_if_imageID_is_light(s32 imageID); +void lightFixtureEntryBegin(Gfx *DL); + #endif diff --git a/src/game/line_tri_intersect.c b/src/game/line_tri_intersect.c index 360c0109..4d6fb248 100644 --- a/src/game/line_tri_intersect.c +++ b/src/game/line_tri_intersect.c @@ -1,596 +1,176 @@ #include - - -#ifdef NONMATCHING -struct unk_bg_struct { - f32 unk00; - f32 unk04; - f32 unk08; - - f32 unk0c; - f32 unk10; - f32 unk14; - - f32 unk18; - f32 unk1c; - f32 unk20; - - f32 unk24; - - s16 unk28; - s16 unk2a; - s16 unk2c; - s16 unk2e; -}; - -struct coord3d64 { - f64 f[3]; -}; +#include /** - * Not close to matching, but the logic in the method is very close. - * Seems to be almost all f64 math. - * Very similar to Perfect Dark func0002f490. - * https://decomp.me/scratch/8EjDL 24.30% - * - * Address: 0x7F092890 -*/ -s32 intersectLineTriangle(Vtx *arg0, Vtx *arg1, Vtx *arg2, struct coord3d *arg3, struct coord3d *arg4, struct coord3d *arg5, struct coord3d *arg6, struct unk_bg_struct *arg7) + * Tests whether an infinite line intersects a triangle, writing the hit position and unnormalized + * face normal into *hit on success. All the math is done as f64/double. + * + * @param vertex0 First triangle vertex in local coordinates. + * @param vertex1 Second triangle vertex in local coordinates. + * @param vertex2 Third triangle vertex in local coordinates. + * @param vertexOffset Translation applied to each triangle vertex, moving locally stored + * geometry into the tested line's coordinate space. + * @param rayStart Ray origin used to reject intersections behind it. + * @param linePoint Point on the infinite line used for the plane intersection. + * @param rayDirection Direction of the line and forward ray test. + * @param hit Receives the intersection position and face normal on success. + */ +bool intersectRayTriangle(Vertex *vertex0, Vertex *vertex1, Vertex *vertex2, coord3d *vertexOffset, coord3d *rayStart, coord3d *linePoint, coord3d *rayDirection, HitThing *hit) { - f64 sp150; - f64 sp148; - f64 sp140; - f64 sp138; - f64 sp130; - f64 sp128; - f64 sp120; - f64 sp118; - f64 sp110; - f64 sp108; - f64 sp100; - f64 spF8; - f64 spF0; - f64 spD8; - f64 spD0; - f64 spC8; - f64 spC0; - f64 spB8; - f64 spB0; - f64 spA0; - f64 sp98; - f64 sp90; - f64 sp88; - f64 sp80; - f64 sp78; - f64 sp70; - f64 sp68; - f64 sp60; - //f64 sp50; - //f64 sp48; - //f64 sp40; - //f64 sp38; - //f64 temp_f18; - //f64 temp_f20; - //f64 temp_f22; - //f64 temp_f24; - //f64 temp_f26; - //f64 temp_f28; - f64 temp_f2; - f64 var_f0; - f64 var_f2; + f64 edge01[3]; + f64 edge12[3]; + f64 edge02[3]; + f64 normalX; + f64 normalY; + f64 normalZ; + f64 planeConstant; + f64 denominator; + f64 baryU; + f64 hitPosition[3]; + f64 relativePosition[3]; + f64 baryV; + f64 vertexOffset64[3]; + f64 rayDirection64[3]; + f64 linePoint64[3]; + f64 lineParameter; + + // Widen the 32-bit coord3d components to f64. + vertexOffset64[0] = vertexOffset->x; + vertexOffset64[1] = vertexOffset->y; + vertexOffset64[2] = vertexOffset->z; + + rayDirection64[0] = rayDirection->x; + rayDirection64[1] = rayDirection->y; + rayDirection64[2] = rayDirection->z; + + linePoint64[0] = linePoint->x; + linePoint64[1] = linePoint->y; + linePoint64[2] = linePoint->z; + + /** + * Build two adjacent edges of the triangle. The shared vertex offset cancels when + * subtracting endpoints, so these vectors can remain in the triangle's local space. + */ + edge01[0] = vertex1->coord.x - vertex0->coord.x; + edge12[0] = vertex2->coord.x - vertex1->coord.x; + edge01[1] = vertex1->coord.y - vertex0->coord.y; + edge12[1] = vertex2->coord.y - vertex1->coord.y; + edge01[2] = vertex1->coord.z - vertex0->coord.z; + edge12[2] = vertex2->coord.z - vertex1->coord.z; - sp90 = (f64) arg3->f[0]; - sp98 = (f64) arg3->f[1]; - spA0 = (f64) arg3->f[2]; - - sp78 = (f64) arg6->f[0]; - sp80 = (f64) arg6->f[1]; - sp88 = (f64) arg6->f[2]; - - sp60 = (f64) arg5->f[0]; - sp68 = (f64) arg5->f[1]; - sp70 = (f64) arg5->f[2]; - - sp140 = (f64) (arg1->v.ob[0] - arg0->v.ob[0]); - sp128 = (f64) (arg2->v.ob[0] - arg1->v.ob[0]); - - sp148 = (f64) (arg1->v.ob[1] - arg0->v.ob[1]); - sp130 = (f64) (arg2->v.ob[1] - arg1->v.ob[1]); - - sp150 = (f64) (arg1->v.ob[2] - arg0->v.ob[2]); - sp138 = (f64) (arg2->v.ob[2] - arg1->v.ob[2]); - - sp110 = (f64) (arg2->v.ob[0] - arg0->v.ob[0]); - sp118 = (f64) (arg2->v.ob[1] - arg0->v.ob[1]); - sp120 = (f64) (arg2->v.ob[2] - arg0->v.ob[2]); - - /* - temp_f18 = sp148 * sp138; - temp_f20 = sp150 * sp130; - temp_f22 = sp150 * sp128; - temp_f24 = sp140 * sp138; - temp_f26 = sp140 * sp130; - temp_f28 = sp148 * sp128; + // Build the direct edge from vertex0 to vertex2 for the barycentric calculations. + edge02[0] = vertex2->coord.x - vertex0->coord.x; + edge02[1] = vertex2->coord.y - vertex0->coord.y; + edge02[2] = vertex2->coord.z - vertex0->coord.z; + + // Take the cross product of the triangle edges to obtain its unnormalized face normal. + normalX = (edge01[1] * edge12[2]) - (edge12[1] * edge01[2]); + normalY = (edge01[2] * edge12[0]) - (edge12[2] * edge01[0]); + normalZ = (edge01[0] * edge12[1]) - (edge12[0] * edge01[1]); + + /** + * Place the triangle's plane in the line's coordinate space by translating vertex0. + * The resulting plane equation is normal's dot product with point vertex0 = planeConstant. + */ + planeConstant = ((normalX * (vertex0->coord.x + vertexOffset64[0])) + (normalY * (vertex0->coord.y + vertexOffset64[1]))) + (normalZ * (vertex0->coord.z + vertexOffset64[2])); + + /** + * Measure how directly the line points through the plane. A zero dot product means + * the line runs parallel to the plane and therefore does not intersect. */ - - #define temp_f18 (sp148 * sp138) - #define temp_f20 (sp150 * sp130) - #define temp_f22 (sp150 * sp128) - #define temp_f24 (sp140 * sp138) - #define temp_f26 (sp140 * sp130) - #define temp_f28 (sp148 * sp128) - - sp108 = temp_f18 - temp_f20; - sp100 = temp_f22 - temp_f24; - spF8 = temp_f26 - temp_f28; - - // why would this happen before the next early return when it's only used later? - spF0 = - (spF8 * ((f64) arg0->v.ob[2] + spA0)) - + - (sp100 * ((f64) arg0->v.ob[1] + sp98)) - + - (sp108 * ((f64) arg0->v.ob[0] + sp90)) - ; - - // this is a dot product check that when 0.0, means the line is parallel to the - // plane of the triangle indicating an intersection is not possible - if ((sp108 * sp78) + (sp100 * sp80) + (spF8 * sp88) == 0.0) + denominator = ((normalX * rayDirection64[0]) + (normalY * rayDirection64[1])) + (normalZ * rayDirection64[2]); + + if (denominator == 0.0) { - return 0; + // Line is parallel to the tri's plane, return false for no hit. + return FALSE; } - - //sp50 = ((spF0 - (sp108 * sp60)) - (sp100 * sp68)) - (sp70 * spF8); - temp_f2 = ((spF0 - (sp108 * sp60)) - (sp100 * sp68) - (spF8 * sp70)) - / ((sp108 * sp78) + (sp100 * sp80) + (spF8 * sp88)); - - spC8 = (sp78 * temp_f2) + sp60; - spD0 = (sp80 * temp_f2) + sp68; - spD8 = (sp88 * temp_f2) + sp70; - - spB0 = spC8 - (sp90 + (f64) arg0->v.ob[0]); - spB8 = spD0 - (sp98 + (f64) arg0->v.ob[1]); - spC0 = spD8 - (spA0 + (f64) arg0->v.ob[2]); - - if ((temp_f28 - temp_f26) != 0.0) + + // Solve the plane equation for the parameter along the infinite line. + lineParameter = (((planeConstant - (normalX * linePoint64[0])) - (normalY * linePoint64[1])) - (normalZ * linePoint64[2])) / denominator; + + /** + * Evaluate linePoint + rayDirection * lineParameter to get the plane intersection. + */ + hitPosition[0] = linePoint64[0] + (rayDirection64[0] * lineParameter); + hitPosition[1] = linePoint64[1] + (rayDirection64[1] * lineParameter); + hitPosition[2] = linePoint64[2] + (rayDirection64[2] * lineParameter); + + /** + * Express the intersection relative to translated vertex0. This lets the following + * calculations determine where the point lies within the triangle. + */ + relativePosition[0] = hitPosition[0] - (vertex0->coord.x + vertexOffset64[0]); + relativePosition[1] = hitPosition[1] - (vertex0->coord.y + vertexOffset64[1]); + relativePosition[2] = hitPosition[2] - (vertex0->coord.z + vertexOffset64[2]); + + // Solve the first barycentric weight using the triangle's XY projection. + denominator = (edge01[1] * edge12[0]) - (edge01[0] * edge12[1]); + + if (denominator != 0.0) { - var_f2 = ((spB0 * sp148) - (sp140 * spB8)) / (temp_f28 - temp_f26); + baryU = ((relativePosition[0] * edge01[1]) - (relativePosition[1] * edge01[0])) / denominator; } else { - if ((temp_f20 - temp_f18) != 0.0) + // The XY projection is degenerate, so try the YZ projection instead. + denominator = (edge01[2] * edge12[1]) - (edge01[1] * edge12[2]); + + if (denominator != 0.0) { - var_f2 = ((spB8 * sp150) - (sp148 * spC0)) / (temp_f20 - temp_f18); + baryU = ((relativePosition[1] * edge01[2]) - (relativePosition[2] * edge01[1])) / denominator; } else { - var_f2 = ((spC0 * sp140) - (sp150 * spB0)) / (temp_f24 - temp_f22); + // The YZ projection is also degenerate, so use the XZ projection. + denominator = (edge01[0] * edge12[2]) - (edge01[2] * edge12[0]); + baryU = ((relativePosition[2] * edge01[0]) - (relativePosition[0] * edge01[2])) / denominator; } } - - if (sp140 != 0.0) + + // Solve the second barycentric weight using a nonzero component of edge01. + if (edge01[0] != 0.0) { - var_f0 = (spB0 - (var_f2 * sp110)) / sp140; + baryV = (relativePosition[0] - (baryU * edge02[0])) / edge01[0]; } - else if (sp148 != 0.0) + else if (edge01[1] != 0.0) { - var_f0 = (spB8 - (var_f2 * sp118)) / sp148; + baryV = (relativePosition[1] - (baryU * edge02[1])) / edge01[1]; } else { - var_f0 = (spC0 - (var_f2 * sp120)) / sp150; + baryV = (relativePosition[2] - (baryU * edge02[2])) / edge01[2]; } - - // checks if the impact point is within the triangle? - if ((var_f0 >= 0.0) && (var_f2 >= 0.0) && ((var_f0 + var_f2) <= 1.0)) + + /** + * Both weights must be nonnegative and their sum must not exceed one. This is the + * barycentric test for whether the plane intersection is inside or on the triangle. + */ + if (((baryV >= 0.0) && (baryU >= 0.0)) && ((baryV + baryU) <= 1.0)) { - // what's this doing? - if (( - (sp78 * (spC8 - (f64) arg4->f[0])) - + - (sp80 * (spD0 - (f64) arg4->f[1])) - + - (sp88 * (spD8 - (f64) arg4->f[2])) - ) >= 0.0) + /** + * The plane calculation used an infinite line. This dot product verifies that the + * intersection lies at or in front of rayStart rather than behind the ray. + */ + if ((((rayDirection64[0] * (hitPosition[0] - rayStart->x)) + (rayDirection64[1] * (hitPosition[1] - rayStart->y))) + (rayDirection64[2] * (hitPosition[2] - rayStart->z))) >= 0.0) { - arg7->unk00 = (f32) spC8; - arg7->unk04 = (f32) spD0; - arg7->unk08 = (f32) spD8; - arg7->unk0c = (f32) sp108; - arg7->unk10 = (f32) sp100; - arg7->unk14 = (f32) spF8; - arg7->unk2a = 0; - - return 1; + hit->hitpos.x = hitPosition[0]; + hit->hitpos.y = hitPosition[1]; + hit->hitpos.z = hitPosition[2]; + + hit->normal.x = normalX; + hit->normal.y = normalY; + hit->normal.z = normalZ; + + hit->texturenum = 0; + + return TRUE; } - - return 0; + + // The infinite line hit the triangle, but the intersection was behind rayStart. + return FALSE; } - - return 0; -} - -#else -GLOBAL_ASM( -.text -glabel intersectLineTriangle -/* 0C73C0 7F092890 27BDFEA8 */ addiu $sp, $sp, -0x158 -/* 0C73C4 7F092894 F7BE0030 */ sdc1 $f30, 0x30($sp) -/* 0C73C8 7F092898 F7BC0028 */ sdc1 $f28, 0x28($sp) -/* 0C73CC 7F09289C F7BA0020 */ sdc1 $f26, 0x20($sp) -/* 0C73D0 7F0928A0 F7B80018 */ sdc1 $f24, 0x18($sp) -/* 0C73D4 7F0928A4 F7B60010 */ sdc1 $f22, 0x10($sp) -/* 0C73D8 7F0928A8 F7B40008 */ sdc1 $f20, 8($sp) -/* 0C73DC 7F0928AC C4E40000 */ lwc1 $f4, ($a3) -/* 0C73E0 7F0928B0 8FA90170 */ lw $t1, 0x170($sp) -/* 0C73E4 7F0928B4 8FAA016C */ lw $t2, 0x16c($sp) -/* 0C73E8 7F0928B8 46002221 */ cvt.d.s $f8, $f4 -/* 0C73EC 7F0928BC F7A80090 */ sdc1 $f8, 0x90($sp) -/* 0C73F0 7F0928C0 C4EA0004 */ lwc1 $f10, 4($a3) -/* 0C73F4 7F0928C4 460051A1 */ cvt.d.s $f6, $f10 -/* 0C73F8 7F0928C8 F7A60098 */ sdc1 $f6, 0x98($sp) -/* 0C73FC 7F0928CC C4E40008 */ lwc1 $f4, 8($a3) -/* 0C7400 7F0928D0 46002221 */ cvt.d.s $f8, $f4 -/* 0C7404 7F0928D4 F7A800A0 */ sdc1 $f8, 0xa0($sp) -/* 0C7408 7F0928D8 C52A0000 */ lwc1 $f10, ($t1) -/* 0C740C 7F0928DC 460051A1 */ cvt.d.s $f6, $f10 -/* 0C7410 7F0928E0 F7A60078 */ sdc1 $f6, 0x78($sp) -/* 0C7414 7F0928E4 C5240004 */ lwc1 $f4, 4($t1) -/* 0C7418 7F0928E8 46002221 */ cvt.d.s $f8, $f4 -/* 0C741C 7F0928EC F7A80080 */ sdc1 $f8, 0x80($sp) -/* 0C7420 7F0928F0 C52A0008 */ lwc1 $f10, 8($t1) -/* 0C7424 7F0928F4 46005121 */ cvt.d.s $f4, $f10 -/* 0C7428 7F0928F8 F7A40088 */ sdc1 $f4, 0x88($sp) -/* 0C742C 7F0928FC C54A0000 */ lwc1 $f10, ($t2) -/* 0C7430 7F092900 460052A1 */ cvt.d.s $f10, $f10 -/* 0C7434 7F092904 F7AA0060 */ sdc1 $f10, 0x60($sp) -/* 0C7438 7F092908 C54A0004 */ lwc1 $f10, 4($t2) -/* 0C743C 7F09290C 460052A1 */ cvt.d.s $f10, $f10 -/* 0C7440 7F092910 F7AA0068 */ sdc1 $f10, 0x68($sp) -/* 0C7444 7F092914 C54A0008 */ lwc1 $f10, 8($t2) -/* 0C7448 7F092918 460052A1 */ cvt.d.s $f10, $f10 -/* 0C744C 7F09291C F7AA0070 */ sdc1 $f10, 0x70($sp) -/* 0C7450 7F092920 848C0000 */ lh $t4, ($a0) -/* 0C7454 7F092924 84AB0000 */ lh $t3, ($a1) -/* 0C7458 7F092928 016C6823 */ subu $t5, $t3, $t4 -/* 0C745C 7F09292C 448D5000 */ mtc1 $t5, $f10 -/* 0C7460 7F092930 00000000 */ nop -/* 0C7464 7F092934 468052A1 */ cvt.d.w $f10, $f10 -/* 0C7468 7F092938 F7AA0140 */ sdc1 $f10, 0x140($sp) -/* 0C746C 7F09293C 84CE0000 */ lh $t6, ($a2) -/* 0C7470 7F092940 84AF0000 */ lh $t7, ($a1) -/* 0C7474 7F092944 F7A60038 */ sdc1 $f6, 0x38($sp) -/* 0C7478 7F092948 01CFC023 */ subu $t8, $t6, $t7 -/* 0C747C 7F09294C 44983000 */ mtc1 $t8, $f6 -/* 0C7480 7F092950 00000000 */ nop -/* 0C7484 7F092954 468031A1 */ cvt.d.w $f6, $f6 -/* 0C7488 7F092958 F7A60128 */ sdc1 $f6, 0x128($sp) -/* 0C748C 7F09295C 84880002 */ lh $t0, 2($a0) -/* 0C7490 7F092960 84B90002 */ lh $t9, 2($a1) -/* 0C7494 7F092964 F7A80040 */ sdc1 $f8, 0x40($sp) -/* 0C7498 7F092968 03284823 */ subu $t1, $t9, $t0 -/* 0C749C 7F09296C 44894000 */ mtc1 $t1, $f8 -/* 0C74A0 7F092970 00000000 */ nop -/* 0C74A4 7F092974 46804221 */ cvt.d.w $f8, $f8 -/* 0C74A8 7F092978 F7A80148 */ sdc1 $f8, 0x148($sp) -/* 0C74AC 7F09297C 84CA0002 */ lh $t2, 2($a2) -/* 0C74B0 7F092980 84AB0002 */ lh $t3, 2($a1) -/* 0C74B4 7F092984 014B6023 */ subu $t4, $t2, $t3 -/* 0C74B8 7F092988 448C4000 */ mtc1 $t4, $f8 -/* 0C74BC 7F09298C 00000000 */ nop -/* 0C74C0 7F092990 46804221 */ cvt.d.w $f8, $f8 -/* 0C74C4 7F092994 F7A80130 */ sdc1 $f8, 0x130($sp) -/* 0C74C8 7F092998 848E0004 */ lh $t6, 4($a0) -/* 0C74CC 7F09299C 84AD0004 */ lh $t5, 4($a1) -/* 0C74D0 7F0929A0 01AE7823 */ subu $t7, $t5, $t6 -/* 0C74D4 7F0929A4 448F4000 */ mtc1 $t7, $f8 -/* 0C74D8 7F0929A8 00000000 */ nop -/* 0C74DC 7F0929AC 46804221 */ cvt.d.w $f8, $f8 -/* 0C74E0 7F0929B0 F7A80150 */ sdc1 $f8, 0x150($sp) -/* 0C74E4 7F0929B4 84D80004 */ lh $t8, 4($a2) -/* 0C74E8 7F0929B8 84B90004 */ lh $t9, 4($a1) -/* 0C74EC 7F0929BC 03194023 */ subu $t0, $t8, $t9 -/* 0C74F0 7F0929C0 44884000 */ mtc1 $t0, $f8 -/* 0C74F4 7F0929C4 00000000 */ nop -/* 0C74F8 7F0929C8 46804221 */ cvt.d.w $f8, $f8 -/* 0C74FC 7F0929CC F7A80138 */ sdc1 $f8, 0x138($sp) -/* 0C7500 7F0929D0 848A0000 */ lh $t2, ($a0) -/* 0C7504 7F0929D4 84C90000 */ lh $t1, ($a2) -/* 0C7508 7F0929D8 012A5823 */ subu $t3, $t1, $t2 -/* 0C750C 7F0929DC 448B4000 */ mtc1 $t3, $f8 -/* 0C7510 7F0929E0 00000000 */ nop -/* 0C7514 7F0929E4 46804221 */ cvt.d.w $f8, $f8 -/* 0C7518 7F0929E8 F7A80110 */ sdc1 $f8, 0x110($sp) -/* 0C751C 7F0929EC 848D0002 */ lh $t5, 2($a0) -/* 0C7520 7F0929F0 84CC0002 */ lh $t4, 2($a2) -/* 0C7524 7F0929F4 018D7023 */ subu $t6, $t4, $t5 -/* 0C7528 7F0929F8 448E4000 */ mtc1 $t6, $f8 -/* 0C752C 7F0929FC 00000000 */ nop -/* 0C7530 7F092A00 46804221 */ cvt.d.w $f8, $f8 -/* 0C7534 7F092A04 F7A80118 */ sdc1 $f8, 0x118($sp) -/* 0C7538 7F092A08 84980004 */ lh $t8, 4($a0) -/* 0C753C 7F092A0C 84CF0004 */ lh $t7, 4($a2) -/* 0C7540 7F092A10 F7A40048 */ sdc1 $f4, 0x48($sp) -/* 0C7544 7F092A14 D7A40138 */ ldc1 $f4, 0x138($sp) -/* 0C7548 7F092A18 01F8C823 */ subu $t9, $t7, $t8 -/* 0C754C 7F092A1C 44994000 */ mtc1 $t9, $f8 -/* 0C7550 7F092A20 00000000 */ nop -/* 0C7554 7F092A24 46804221 */ cvt.d.w $f8, $f8 -/* 0C7558 7F092A28 F7A80120 */ sdc1 $f8, 0x120($sp) -/* 0C755C 7F092A2C D7A80148 */ ldc1 $f8, 0x148($sp) -/* 0C7560 7F092A30 46244482 */ mul.d $f18, $f8, $f4 -/* 0C7564 7F092A34 D7A40130 */ ldc1 $f4, 0x130($sp) -/* 0C7568 7F092A38 D7A80150 */ ldc1 $f8, 0x150($sp) -/* 0C756C 7F092A3C 46244502 */ mul.d $f20, $f8, $f4 -/* 0C7570 7F092A40 D7A40138 */ ldc1 $f4, 0x138($sp) -/* 0C7574 7F092A44 46264582 */ mul.d $f22, $f8, $f6 -/* 0C7578 7F092A48 D7A80130 */ ldc1 $f8, 0x130($sp) -/* 0C757C 7F092A4C 46245602 */ mul.d $f24, $f10, $f4 -/* 0C7580 7F092A50 D7A40148 */ ldc1 $f4, 0x148($sp) -/* 0C7584 7F092A54 46349301 */ sub.d $f12, $f18, $f20 -/* 0C7588 7F092A58 46285682 */ mul.d $f26, $f10, $f8 -/* 0C758C 7F092A5C 00000000 */ nop -/* 0C7590 7F092A60 46262702 */ mul.d $f28, $f4, $f6 -/* 0C7594 7F092A64 D7A40090 */ ldc1 $f4, 0x90($sp) -/* 0C7598 7F092A68 4638B381 */ sub.d $f14, $f22, $f24 -/* 0C759C 7F092A6C 463CD401 */ sub.d $f16, $f26, $f28 -/* 0C75A0 7F092A70 F7B000F8 */ sdc1 $f16, 0xf8($sp) -/* 0C75A4 7F092A74 84880000 */ lh $t0, ($a0) -/* 0C75A8 7F092A78 84890002 */ lh $t1, 2($a0) -/* 0C75AC 7F092A7C 848A0004 */ lh $t2, 4($a0) -/* 0C75B0 7F092A80 44885000 */ mtc1 $t0, $f10 -/* 0C75B4 7F092A84 F7AE0100 */ sdc1 $f14, 0x100($sp) -/* 0C75B8 7F092A88 F7AC0108 */ sdc1 $f12, 0x108($sp) -/* 0C75BC 7F092A8C 46805221 */ cvt.d.w $f8, $f10 -/* 0C75C0 7F092A90 46244180 */ add.d $f6, $f8, $f4 -/* 0C75C4 7F092A94 44894000 */ mtc1 $t1, $f8 -/* 0C75C8 7F092A98 00000000 */ nop -/* 0C75CC 7F092A9C 46804121 */ cvt.d.w $f4, $f8 -/* 0C75D0 7F092AA0 46266282 */ mul.d $f10, $f12, $f6 -/* 0C75D4 7F092AA4 D7A60098 */ ldc1 $f6, 0x98($sp) -/* 0C75D8 7F092AA8 46262200 */ add.d $f8, $f4, $f6 -/* 0C75DC 7F092AAC 46287102 */ mul.d $f4, $f14, $f8 -/* 0C75E0 7F092AB0 D7A800A0 */ ldc1 $f8, 0xa0($sp) -/* 0C75E4 7F092AB4 46245180 */ add.d $f6, $f10, $f4 -/* 0C75E8 7F092AB8 448A5000 */ mtc1 $t2, $f10 -/* 0C75EC 7F092ABC 00000000 */ nop -/* 0C75F0 7F092AC0 46805121 */ cvt.d.w $f4, $f10 -/* 0C75F4 7F092AC4 46244280 */ add.d $f10, $f8, $f4 -/* 0C75F8 7F092AC8 D7A80048 */ ldc1 $f8, 0x48($sp) -/* 0C75FC 7F092ACC 46305102 */ mul.d $f4, $f10, $f16 -/* 0C7600 7F092AD0 46262280 */ add.d $f10, $f4, $f6 -/* 0C7604 7F092AD4 46304182 */ mul.d $f6, $f8, $f16 -/* 0C7608 7F092AD8 D7A40040 */ ldc1 $f4, 0x40($sp) -/* 0C760C 7F092ADC F7AA00F0 */ sdc1 $f10, 0xf0($sp) -/* 0C7610 7F092AE0 D7AA0038 */ ldc1 $f10, 0x38($sp) -/* 0C7614 7F092AE4 462A6202 */ mul.d $f8, $f12, $f10 -/* 0C7618 7F092AE8 00000000 */ nop -/* 0C761C 7F092AEC 46247282 */ mul.d $f10, $f14, $f4 -/* 0C7620 7F092AF0 462A4100 */ add.d $f4, $f8, $f10 -/* 0C7624 7F092AF4 44804000 */ mtc1 $zero, $f8 -/* 0C7628 7F092AF8 44804800 */ mtc1 $zero, $f9 -/* 0C762C 7F092AFC 46243000 */ add.d $f0, $f6, $f4 -/* 0C7630 7F092B00 D7A60060 */ ldc1 $f6, 0x60($sp) -/* 0C7634 7F092B04 46280032 */ c.eq.d $f0, $f8 -/* 0C7638 7F092B08 00000000 */ nop -/* 0C763C 7F092B0C 45000003 */ bc1f .L7F092B1C -/* 0C7640 7F092B10 00000000 */ nop -/* 0C7644 7F092B14 100000C5 */ b .L7F092E2C -/* 0C7648 7F092B18 00001025 */ move $v0, $zero -.L7F092B1C: -/* 0C764C 7F092B1C 46266102 */ mul.d $f4, $f12, $f6 -/* 0C7650 7F092B20 D7AA00F0 */ ldc1 $f10, 0xf0($sp) -/* 0C7654 7F092B24 F7A60048 */ sdc1 $f6, 0x48($sp) -/* 0C7658 7F092B28 463AE781 */ sub.d $f30, $f28, $f26 -/* 0C765C 7F092B2C 00001025 */ move $v0, $zero -/* 0C7660 7F092B30 46245201 */ sub.d $f8, $f10, $f4 -/* 0C7664 7F092B34 D7AA0068 */ ldc1 $f10, 0x68($sp) -/* 0C7668 7F092B38 462A7102 */ mul.d $f4, $f14, $f10 -/* 0C766C 7F092B3C F7AA0040 */ sdc1 $f10, 0x40($sp) -/* 0C7670 7F092B40 46244201 */ sub.d $f8, $f8, $f4 -/* 0C7674 7F092B44 D7A40070 */ ldc1 $f4, 0x70($sp) -/* 0C7678 7F092B48 46302182 */ mul.d $f6, $f4, $f16 -/* 0C767C 7F092B4C F7A40038 */ sdc1 $f4, 0x38($sp) -/* 0C7680 7F092B50 D7A40080 */ ldc1 $f4, 0x80($sp) -/* 0C7684 7F092B54 46264201 */ sub.d $f8, $f8, $f6 -/* 0C7688 7F092B58 D7A60078 */ ldc1 $f6, 0x78($sp) -/* 0C768C 7F092B5C 46266282 */ mul.d $f10, $f12, $f6 -/* 0C7690 7F092B60 F7A80050 */ sdc1 $f8, 0x50($sp) -/* 0C7694 7F092B64 F7A60058 */ sdc1 $f6, 0x58($sp) -/* 0C7698 7F092B68 46247202 */ mul.d $f8, $f14, $f4 -/* 0C769C 7F092B6C D7AE0148 */ ldc1 $f14, 0x148($sp) -/* 0C76A0 7F092B70 46285280 */ add.d $f10, $f10, $f8 -/* 0C76A4 7F092B74 D7A80088 */ ldc1 $f8, 0x88($sp) -/* 0C76A8 7F092B78 46304182 */ mul.d $f6, $f8, $f16 -/* 0C76AC 7F092B7C 44808000 */ mtc1 $zero, $f16 -/* 0C76B0 7F092B80 44808800 */ mtc1 $zero, $f17 -/* 0C76B4 7F092B84 462A3180 */ add.d $f6, $f6, $f10 -/* 0C76B8 7F092B88 D7AA0050 */ ldc1 $f10, 0x50($sp) -/* 0C76BC 7F092B8C 46265083 */ div.d $f2, $f10, $f6 -/* 0C76C0 7F092B90 D7AA0058 */ ldc1 $f10, 0x58($sp) -/* 0C76C4 7F092B94 46225182 */ mul.d $f6, $f10, $f2 -/* 0C76C8 7F092B98 D7AA0048 */ ldc1 $f10, 0x48($sp) -/* 0C76CC 7F092B9C 462A3180 */ add.d $f6, $f6, $f10 -/* 0C76D0 7F092BA0 46222282 */ mul.d $f10, $f4, $f2 -/* 0C76D4 7F092BA4 D7A40040 */ ldc1 $f4, 0x40($sp) -/* 0C76D8 7F092BA8 F7A600C8 */ sdc1 $f6, 0xc8($sp) -/* 0C76DC 7F092BAC 46245280 */ add.d $f10, $f10, $f4 -/* 0C76E0 7F092BB0 46224102 */ mul.d $f4, $f8, $f2 -/* 0C76E4 7F092BB4 D7A80038 */ ldc1 $f8, 0x38($sp) -/* 0C76E8 7F092BB8 F7AA00D0 */ sdc1 $f10, 0xd0($sp) -/* 0C76EC 7F092BBC 46282100 */ add.d $f4, $f4, $f8 -/* 0C76F0 7F092BC0 D7A80090 */ ldc1 $f8, 0x90($sp) -/* 0C76F4 7F092BC4 F7A400D8 */ sdc1 $f4, 0xd8($sp) -/* 0C76F8 7F092BC8 848B0000 */ lh $t3, ($a0) -/* 0C76FC 7F092BCC F7AA0058 */ sdc1 $f10, 0x58($sp) -/* 0C7700 7F092BD0 448B5000 */ mtc1 $t3, $f10 -/* 0C7704 7F092BD4 00000000 */ nop -/* 0C7708 7F092BD8 468052A1 */ cvt.d.w $f10, $f10 -/* 0C770C 7F092BDC 462A4200 */ add.d $f8, $f8, $f10 -/* 0C7710 7F092BE0 46283281 */ sub.d $f10, $f6, $f8 -/* 0C7714 7F092BE4 D7A80098 */ ldc1 $f8, 0x98($sp) -/* 0C7718 7F092BE8 D7A60058 */ ldc1 $f6, 0x58($sp) -/* 0C771C 7F092BEC F7AA00B0 */ sdc1 $f10, 0xb0($sp) -/* 0C7720 7F092BF0 848C0002 */ lh $t4, 2($a0) -/* 0C7724 7F092BF4 448C5000 */ mtc1 $t4, $f10 -/* 0C7728 7F092BF8 00000000 */ nop -/* 0C772C 7F092BFC 468052A1 */ cvt.d.w $f10, $f10 -/* 0C7730 7F092C00 462A4200 */ add.d $f8, $f8, $f10 -/* 0C7734 7F092C04 46283281 */ sub.d $f10, $f6, $f8 -/* 0C7738 7F092C08 D7A600A0 */ ldc1 $f6, 0xa0($sp) -/* 0C773C 7F092C0C F7AA00B8 */ sdc1 $f10, 0xb8($sp) -/* 0C7740 7F092C10 848D0004 */ lh $t5, 4($a0) -/* 0C7744 7F092C14 448D4000 */ mtc1 $t5, $f8 -/* 0C7748 7F092C18 00000000 */ nop -/* 0C774C 7F092C1C 468042A1 */ cvt.d.w $f10, $f8 -/* 0C7750 7F092C20 462A3200 */ add.d $f8, $f6, $f10 -/* 0C7754 7F092C24 44805000 */ mtc1 $zero, $f10 -/* 0C7758 7F092C28 44805800 */ mtc1 $zero, $f11 -/* 0C775C 7F092C2C 46282181 */ sub.d $f6, $f4, $f8 -/* 0C7760 7F092C30 D7A400B0 */ ldc1 $f4, 0xb0($sp) -/* 0C7764 7F092C34 462AF032 */ c.eq.d $f30, $f10 -/* 0C7768 7F092C38 F7A600C0 */ sdc1 $f6, 0xc0($sp) -/* 0C776C 7F092C3C D7A600B8 */ ldc1 $f6, 0xb8($sp) -/* 0C7770 7F092C40 45030008 */ bc1tl .L7F092C64 -/* 0C7774 7F092C44 4632A301 */ sub.d $f12, $f20, $f18 -/* 0C7778 7F092C48 462E2202 */ mul.d $f8, $f4, $f14 -/* 0C777C 7F092C4C D7AC0140 */ ldc1 $f12, 0x140($sp) -/* 0C7780 7F092C50 46266282 */ mul.d $f10, $f12, $f6 -/* 0C7784 7F092C54 462A4101 */ sub.d $f4, $f8, $f10 -/* 0C7788 7F092C58 1000001C */ b .L7F092CCC -/* 0C778C 7F092C5C 463E2083 */ div.d $f2, $f4, $f30 -/* 0C7790 7F092C60 4632A301 */ sub.d $f12, $f20, $f18 -.L7F092C64: -/* 0C7794 7F092C64 44803800 */ mtc1 $zero, $f7 -/* 0C7798 7F092C68 44803000 */ mtc1 $zero, $f6 -/* 0C779C 7F092C6C D7A800B8 */ ldc1 $f8, 0xb8($sp) -/* 0C77A0 7F092C70 D7A400B0 */ ldc1 $f4, 0xb0($sp) -/* 0C77A4 7F092C74 46266032 */ c.eq.d $f12, $f6 -/* 0C77A8 7F092C78 D7A60150 */ ldc1 $f6, 0x150($sp) -/* 0C77AC 7F092C7C D7AA00C0 */ ldc1 $f10, 0xc0($sp) -/* 0C77B0 7F092C80 4501000B */ bc1t .L7F092CB0 -/* 0C77B4 7F092C84 00000000 */ nop -/* 0C77B8 7F092C88 D7AA0150 */ ldc1 $f10, 0x150($sp) -/* 0C77BC 7F092C8C D7AE0148 */ ldc1 $f14, 0x148($sp) -/* 0C77C0 7F092C90 D7A600C0 */ ldc1 $f6, 0xc0($sp) -/* 0C77C4 7F092C94 462A4102 */ mul.d $f4, $f8, $f10 -/* 0C77C8 7F092C98 00000000 */ nop -/* 0C77CC 7F092C9C 46267202 */ mul.d $f8, $f14, $f6 -/* 0C77D0 7F092CA0 46282281 */ sub.d $f10, $f4, $f8 -/* 0C77D4 7F092CA4 462C5083 */ div.d $f2, $f10, $f12 -/* 0C77D8 7F092CA8 10000008 */ b .L7F092CCC -/* 0C77DC 7F092CAC D7AC0140 */ ldc1 $f12, 0x140($sp) -.L7F092CB0: -/* 0C77E0 7F092CB0 46243202 */ mul.d $f8, $f6, $f4 -/* 0C77E4 7F092CB4 D7AC0140 */ ldc1 $f12, 0x140($sp) -/* 0C77E8 7F092CB8 4636C001 */ sub.d $f0, $f24, $f22 -/* 0C77EC 7F092CBC D7AE0148 */ ldc1 $f14, 0x148($sp) -/* 0C77F0 7F092CC0 462C5182 */ mul.d $f6, $f10, $f12 -/* 0C77F4 7F092CC4 46283101 */ sub.d $f4, $f6, $f8 -/* 0C77F8 7F092CC8 46202083 */ div.d $f2, $f4, $f0 -.L7F092CCC: -/* 0C77FC 7F092CCC 462C8032 */ c.eq.d $f16, $f12 -/* 0C7800 7F092CD0 D7A60110 */ ldc1 $f6, 0x110($sp) -/* 0C7804 7F092CD4 45030007 */ bc1tl .L7F092CF4 -/* 0C7808 7F092CD8 462E8032 */ c.eq.d $f16, $f14 -/* 0C780C 7F092CDC 46261202 */ mul.d $f8, $f2, $f6 -/* 0C7810 7F092CE0 D7AA00B0 */ ldc1 $f10, 0xb0($sp) -/* 0C7814 7F092CE4 46285101 */ sub.d $f4, $f10, $f8 -/* 0C7818 7F092CE8 10000010 */ b .L7F092D2C -/* 0C781C 7F092CEC 462C2003 */ div.d $f0, $f4, $f12 -/* 0C7820 7F092CF0 462E8032 */ c.eq.d $f16, $f14 -.L7F092CF4: -/* 0C7824 7F092CF4 D7AA0118 */ ldc1 $f10, 0x118($sp) -/* 0C7828 7F092CF8 D7A60120 */ ldc1 $f6, 0x120($sp) -/* 0C782C 7F092CFC 45010006 */ bc1t .L7F092D18 -/* 0C7830 7F092D00 00000000 */ nop -/* 0C7834 7F092D04 462A1202 */ mul.d $f8, $f2, $f10 -/* 0C7838 7F092D08 D7A600B8 */ ldc1 $f6, 0xb8($sp) -/* 0C783C 7F092D0C 46283101 */ sub.d $f4, $f6, $f8 -/* 0C7840 7F092D10 10000006 */ b .L7F092D2C -/* 0C7844 7F092D14 462E2003 */ div.d $f0, $f4, $f14 -.L7F092D18: -/* 0C7848 7F092D18 46261202 */ mul.d $f8, $f2, $f6 -/* 0C784C 7F092D1C D7AA00C0 */ ldc1 $f10, 0xc0($sp) -/* 0C7850 7F092D20 D7A60150 */ ldc1 $f6, 0x150($sp) -/* 0C7854 7F092D24 46285101 */ sub.d $f4, $f10, $f8 -/* 0C7858 7F092D28 46262003 */ div.d $f0, $f4, $f6 -.L7F092D2C: -/* 0C785C 7F092D2C 4620803E */ c.le.d $f16, $f0 -/* 0C7860 7F092D30 00000000 */ nop -/* 0C7864 7F092D34 4500003D */ bc1f .L7F092E2C -/* 0C7868 7F092D38 00000000 */ nop -/* 0C786C 7F092D3C 4622803E */ c.le.d $f16, $f2 -/* 0C7870 7F092D40 3C013FF0 */ li $at, 0x3FF00000 # 1.875000 -/* 0C7874 7F092D44 45000039 */ bc1f .L7F092E2C -/* 0C7878 7F092D48 00000000 */ nop -/* 0C787C 7F092D4C 46220200 */ add.d $f8, $f0, $f2 -/* 0C7880 7F092D50 44815800 */ mtc1 $at, $f11 -/* 0C7884 7F092D54 44805000 */ mtc1 $zero, $f10 -/* 0C7888 7F092D58 00000000 */ nop -/* 0C788C 7F092D5C 462A403E */ c.le.d $f8, $f10 -/* 0C7890 7F092D60 00000000 */ nop -/* 0C7894 7F092D64 45000031 */ bc1f .L7F092E2C -/* 0C7898 7F092D68 00000000 */ nop -/* 0C789C 7F092D6C 8FA20168 */ lw $v0, 0x168($sp) -/* 0C78A0 7F092D70 D7A400C8 */ ldc1 $f4, 0xc8($sp) -/* 0C78A4 7F092D74 C4460000 */ lwc1 $f6, ($v0) -/* 0C78A8 7F092D78 460032A1 */ cvt.d.s $f10, $f6 -/* 0C78AC 7F092D7C D7A60078 */ ldc1 $f6, 0x78($sp) -/* 0C78B0 7F092D80 462A2201 */ sub.d $f8, $f4, $f10 -/* 0C78B4 7F092D84 46283282 */ mul.d $f10, $f6, $f8 -/* 0C78B8 7F092D88 C4480004 */ lwc1 $f8, 4($v0) -/* 0C78BC 7F092D8C D7A600D0 */ ldc1 $f6, 0xd0($sp) -/* 0C78C0 7F092D90 46004221 */ cvt.d.s $f8, $f8 -/* 0C78C4 7F092D94 46283181 */ sub.d $f6, $f6, $f8 -/* 0C78C8 7F092D98 D7A80080 */ ldc1 $f8, 0x80($sp) -/* 0C78CC 7F092D9C 46264202 */ mul.d $f8, $f8, $f6 -/* 0C78D0 7F092DA0 46285180 */ add.d $f6, $f10, $f8 -/* 0C78D4 7F092DA4 C4480008 */ lwc1 $f8, 8($v0) -/* 0C78D8 7F092DA8 D7AA00D8 */ ldc1 $f10, 0xd8($sp) -/* 0C78DC 7F092DAC 46004221 */ cvt.d.s $f8, $f8 -/* 0C78E0 7F092DB0 46285281 */ sub.d $f10, $f10, $f8 -/* 0C78E4 7F092DB4 D7A80088 */ ldc1 $f8, 0x88($sp) -/* 0C78E8 7F092DB8 46285282 */ mul.d $f10, $f10, $f8 -/* 0C78EC 7F092DBC 46265200 */ add.d $f8, $f10, $f6 -/* 0C78F0 7F092DC0 4628803E */ c.le.d $f16, $f8 -/* 0C78F4 7F092DC4 00000000 */ nop -/* 0C78F8 7F092DC8 45000016 */ bc1f .L7F092E24 -/* 0C78FC 7F092DCC 00000000 */ nop -/* 0C7900 7F092DD0 462022A0 */ cvt.s.d $f10, $f4 -/* 0C7904 7F092DD4 8FA30174 */ lw $v1, 0x174($sp) -/* 0C7908 7F092DD8 24020001 */ li $v0, 1 -/* 0C790C 7F092DDC E46A0000 */ swc1 $f10, ($v1) -/* 0C7910 7F092DE0 D7A600D0 */ ldc1 $f6, 0xd0($sp) -/* 0C7914 7F092DE4 46203220 */ cvt.s.d $f8, $f6 -/* 0C7918 7F092DE8 E4680004 */ swc1 $f8, 4($v1) -/* 0C791C 7F092DEC D7A400D8 */ ldc1 $f4, 0xd8($sp) -/* 0C7920 7F092DF0 462022A0 */ cvt.s.d $f10, $f4 -/* 0C7924 7F092DF4 E46A0008 */ swc1 $f10, 8($v1) -/* 0C7928 7F092DF8 D7A60108 */ ldc1 $f6, 0x108($sp) -/* 0C792C 7F092DFC 46203220 */ cvt.s.d $f8, $f6 -/* 0C7930 7F092E00 E468000C */ swc1 $f8, 0xc($v1) -/* 0C7934 7F092E04 D7A40100 */ ldc1 $f4, 0x100($sp) -/* 0C7938 7F092E08 462022A0 */ cvt.s.d $f10, $f4 -/* 0C793C 7F092E0C E46A0010 */ swc1 $f10, 0x10($v1) -/* 0C7940 7F092E10 D7A600F8 */ ldc1 $f6, 0xf8($sp) -/* 0C7944 7F092E14 A460002A */ sh $zero, 0x2a($v1) -/* 0C7948 7F092E18 46203220 */ cvt.s.d $f8, $f6 -/* 0C794C 7F092E1C 10000003 */ b .L7F092E2C -/* 0C7950 7F092E20 E4680014 */ swc1 $f8, 0x14($v1) -.L7F092E24: -/* 0C7954 7F092E24 10000001 */ b .L7F092E2C -/* 0C7958 7F092E28 00001025 */ move $v0, $zero -.L7F092E2C: -/* 0C795C 7F092E2C D7B40008 */ ldc1 $f20, 8($sp) -/* 0C7960 7F092E30 D7B60010 */ ldc1 $f22, 0x10($sp) -/* 0C7964 7F092E34 D7B80018 */ ldc1 $f24, 0x18($sp) -/* 0C7968 7F092E38 D7BA0020 */ ldc1 $f26, 0x20($sp) -/* 0C796C 7F092E3C D7BC0028 */ ldc1 $f28, 0x28($sp) -/* 0C7970 7F092E40 D7BE0030 */ ldc1 $f30, 0x30($sp) -/* 0C7974 7F092E44 03E00008 */ jr $ra -/* 0C7978 7F092E48 27BD0158 */ addiu $sp, $sp, 0x158 -) -#endif - - + + // The line reached the triangle's plane outside the triangle's three edges. + return FALSE; +} \ No newline at end of file diff --git a/src/game/loadobjectmodel.c b/src/game/loadobjectmodel.c index b5b7c035..efc36fdb 100644 --- a/src/game/loadobjectmodel.c +++ b/src/game/loadobjectmodel.c @@ -11,7 +11,7 @@ * Address 0x7F056850. * @brief getposstan */ -s32 sub_GAME_7F056850(struct coord3d *pos, StandTile *stan, f32 radius, struct coord3d *posReturn, StandTile **stanReturn) +s32 getposstan(struct coord3d *pos, StandTile *stan, f32 radius, struct coord3d *posReturn, StandTile **stanReturn) { posReturn->f[0] = pos->f[0]; posReturn->f[1] = pos->f[1]; @@ -46,7 +46,8 @@ s32 sub_GAME_7F056850(struct coord3d *pos, StandTile *stan, f32 radius, struct c */ s32 sizepropdef(PropDefHeaderRecord *pdef) { - switch(pdef->type) + #if 1 + switch (pdef->type) { case PROPDEF_GUARD: return sizeof(GuardRecord) / 4; @@ -57,17 +58,17 @@ s32 sizepropdef(PropDefHeaderRecord *pdef) case PROPDEF_PROP: return sizeof(ObjectRecord) / 4; case PROPDEF_GLASS: - return sizeof(ObjectRecord) / 4; + return sizeof(ObjectRecord) / 4; // Rare typo? case PROPDEF_TINTED_GLASS: - return 0x25;//return sizeof(TintedGlassRecord) / 4; + return sizeof(TintedGlassRecord) / 4; case PROPDEF_SAFE: - return 0x20;//return sizeof(GlassRecord) / 4; + return sizeof(ObjectRecord) / 4; // wrong case PROPDEF_GAS_RELEASING: - return 0x20;//return sizeof(GlassRecord) / 4; + return sizeof(ObjectRecord) / 4; // also wrong, gas is only 2 words case PROPDEF_KEY: - return 0x21;//return sizeof(GlassRecord) / 4; + return sizeof(KeyRecord) / 4; case PROPDEF_ALARM: - return 0x20;//return sizeof(GlassRecord) / 4; + return sizeof(ObjectRecord) / 4; case PROPDEF_CCTV: return 0x3b;//return sizeof(GlassRecord) / 4; case PROPDEF_MAGAZINE: @@ -79,13 +80,13 @@ s32 sizepropdef(PropDefHeaderRecord *pdef) case PROPDEF_MULTI_MONITOR: return 0x95;//return sizeof(GlassRecord) / 4; case PROPDEF_RACK: - return 0x20;//return sizeof(GlassRecord) / 4; + return sizeof(ObjectRecord) / 4; case PROPDEF_AUTOGUN: return 0x36;//return sizeof(GlassRecord) / 4; case PROPDEF_LINK: return 3;//return sizeof(GlassRecord) / 4; case PROPDEF_HAT: - return 0x20;//return sizeof(GlassRecord) / 4; + return sizeof(ObjectRecord) / 4; case PROPDEF_GUARD_ATTRIBUTE: return 3;//return sizeof(GlassRecord) / 4; case PROPDEF_SWITCH: @@ -142,6 +143,104 @@ s32 sizepropdef(PropDefHeaderRecord *pdef) #endif return sizeof(PropDefHeaderRecord) / 4;; } + #else + switch (pdef->type) + { + case PROPDEF_GUARD: + return sizeof(GuardRecord) / 4; + case PROPDEF_DOOR: + return sizeof(DoorRecord) / 4; + case PROPDEF_DOOR_SCALE: + return sizeof(GlobalDoorScaleRecord) / 4; + case PROPDEF_PROP: + return sizeof(ObjectRecord) / 4; + case PROPDEF_GLASS: + return sizeof(GlassRecord) / 4; + case PROPDEF_TINTED_GLASS: + return sizeof(TintedGlassRecord) / 4; + case PROPDEF_SAFE: + return sizeof(SafeRecord) / 4; + case PROPDEF_GAS_RELEASING: + return sizeof(GasReleasingRecord) / 4; + case PROPDEF_KEY: + return sizeof(KeyRecord) / 4; + case PROPDEF_ALARM: + return sizeof(ObjectRecord) / 4; + case PROPDEF_CCTV: + return sizeof(CCTVRecord) / 4; + case PROPDEF_MAGAZINE: + return sizeof(AmmoCrateRecord) / 4; + case PROPDEF_COLLECTABLE: + return sizeof(WeaponObjRecord) / 4; + case PROPDEF_MONITOR: + return sizeof(MonitorObjRecord) / 4; + case PROPDEF_MULTI_MONITOR: + return sizeof(MultiMonitorObjRecord) / 4; + case PROPDEF_RACK: + return sizeof(ObjectRecord) / 4; + case PROPDEF_AUTOGUN: + return sizeof(AutogunRecord) / 4; + case PROPDEF_LINK: + return sizeof(LinkRecord) / 4; + case PROPDEF_HAT: + return sizeof(HatRecord) / 4; + case PROPDEF_GUARD_ATTRIBUTE: + return sizeof(GuardAttributeRecord) / 4; + case PROPDEF_SWITCH: + return sizeof(LinkRecord) / 4; /* Switch is typedef'd to LinkRecord */ + case PROPDEF_SAFE_ITEM: + return sizeof(SafeObjectRecord) / 4; + case PROPDEF_AMMO: + return sizeof(MultiAmmoCrateRecord) / 4; + case PROPDEF_ARMOUR: + return sizeof(BodyArmourRecord) / 4; + case PROPDEF_TAG: + return sizeof(TagObjectRecord) / 4; + case PROPDEF_RENAME: + return sizeof(RenameObjectRecord) / 4; + case PROPDEF_OBJECTIVE_START: + return sizeof(MissionObjectiveRecord) / 4; + case PROPDEF_OBJECTIVE_END: + return sizeof(MissionObjectiveRecord) / 4; /* End mission objective shares layout */ + case PROPDEF_OBJECTIVE_DESTROY_OBJECT: + return sizeof(DestroyObjectRecord) / 4; + case PROPDEF_OBJECTIVE_COMPLETE_CONDITION: + return sizeof(CompleteConditionRecord) / 4; + case PROPDEF_OBJECTIVE_FAIL_CONDITION: + return sizeof(FailConditionRecord) / 4; + case PROPDEF_OBJECTIVE_COLLECT_OBJECT: + return sizeof(CollectObjectRecord) / 4; + case PROPDEF_OBJECTIVE_DEPOSIT_OBJECT: + return sizeof(DepositObjectRecord) / 4; + case PROPDEF_OBJECTIVE_PHOTOGRAPH: + return sizeof(PhotographObjectRecord) / 4; + case PROPDEF_OBJECTIVE_NULL: + return sizeof(NULLObjectRecord) / 4; + case PROPDEF_OBJECTIVE_ENTER_ROOM: + return sizeof(EnterRoomRecord) / 4; + case PROPDEF_OBJECTIVE_DEPOSIT_OBJECT_IN_ROOM: + return sizeof(DepositObjectInRoomRecord) / 4; + case PROPDEF_OBJECTIVE_COPY_ITEM: + return sizeof(CoopyObjectRecord) / 4; + case PROPDEF_WATCH_MENU_OBJECTIVE_TEXT: + return sizeof(WatchMenuObjectiveTextRecord) / 4; + case PROPDEF_LOCK_DOOR: + return sizeof(LockDoorRecord) / 4; + case PROPDEF_VEHICHLE: + return sizeof(VehichleRecord) / 4; + case PROPDEF_AIRCRAFT: + return sizeof(AircraftRecord) / 4; + case PROPDEF_TANK: + return sizeof(TankRecord) / 4; + case PROPDEF_CAMERAPOS: + return sizeof(CutsceneRecord) / 4; + default: +#ifdef DEBUG + osSyncPrintf("sizepropdef: unknown prop def type %d!!\n", pdef->type); +#endif + return sizeof(PropDefHeaderRecord) / 4; + } + #endif } @@ -314,7 +413,7 @@ void setupUpdateObjectRoomPosition(ObjectRecord *obj) sp34.f[1] += obj->runtime_pos.f[1]; sp34.f[2] += obj->runtime_pos.f[2]; - sub_GAME_7F03E27C(temp_s1, &sp40, &sp34, phi_f20); + chrpropUpdateRoomList(temp_s1, &sp40, &sp34, phi_f20); } } @@ -420,7 +519,7 @@ ObjectRecord *setupFindObjForReuse(s32 wanttype, ObjectRecord **offscreenobjptr, } } else if (wanttype != PROP_TYPE_SMOKE - && (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) == 0 + && (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) == 0 && (obj->state & PROPSTATE_RESPAWN) == 0 && obj->prop->parent == NULL && (!musthavemodel || modelmgrCanSlotFitRwdata(obj->model, modeldef))) diff --git a/src/game/loadobjectmodel.h b/src/game/loadobjectmodel.h index 6b9113ef..6e6582e2 100644 --- a/src/game/loadobjectmodel.h +++ b/src/game/loadobjectmodel.h @@ -2,13 +2,13 @@ #define _LOADOBJECTMODEL_H_ #include -s32 sizepropdef(PropDefHeaderRecord *pdef); - -void setupUpdateObjectRoomPosition(ObjectRecord *); -s32 sub_GAME_7F056850(struct coord3d *arg0, StandTile *arg1, f32 arg2, struct coord3d *arg3, StandTile **arg4); -ObjectRecord *setupGetPtrToCommandByIndex(s32 index); -s32 tagGetCommandIndex(struct ObjectRecord *arg0); -s32 modelLoad(s32 modelid); -struct ObjectRecord *setupCommandGetObject(s32 stageID, s32 index); +s32 getposstan(struct coord3d *arg0, StandTile *arg1, f32 arg2, struct coord3d *arg3, StandTile **arg4); +s32 modelLoad(s32 modelid); +s32 sizepropdef(struct PropDefHeaderRecord *pdef); +void setupUpdateObjectRoomPosition(struct ObjectRecord *); +struct ObjectRecord *setupGetPtrToCommandByIndex(s32 index); +struct ObjectRecord *setupCommandGetObject(s32 stageID, s32 index); +s32 setupGetCommandIndexByProp(struct PropRecord *prop); +s32 tagGetCommandIndex(struct ObjectRecord *arg0); #endif diff --git a/src/game/lv.c b/src/game/lv.c index c0180e77..48ef1265 100644 --- a/src/game/lv.c +++ b/src/game/lv.c @@ -35,7 +35,7 @@ #include "bg.h" #include "objective.h" #include "mpmenu.h" -#include "unk_09B7A0.h" +#include "vtxstore.h" #include "initunk_005450.h" #include "initobjects.h" #include "initguards.h" @@ -190,13 +190,27 @@ struct LvlMpUnknown *D_800483C8 = NULL; * Debug variable, something to do with portals. * Address 0x800483CC. */ -s32 g_DebugPortalsD_800483CC = 0; +s32 g_DebugPortalIndex = 0; /** - * Input buffer, used in debug portal method. Might be array. + * Input buffer used in debug portal method. * Address 0x800483D0. */ -s32 g_DebugPortalsInputBuffer[5] = { 0 }; +s32 g_DebugPortalsInputBuffer = 0; +s32 g_DebugPortalsInputBuffer1 = 0; +s32 g_DebugPortalsInputBuffer2 = 0; +s32 g_DebugPortalsInputBuffer3 = 0; +s32 g_DebugPortalsInputBuffer4 = 0; + +extern s32 g_DebugPortalsInputBufferSource1; +extern s32 g_DebugPortalsInputBufferSource2; +extern s32 g_DebugPortalsInputBufferSource3; +extern s32 g_DebugPortalsInputBufferSource4; + +#pragma weak g_DebugPortalsInputBufferSource1 = g_DebugPortalsInputBuffer1 +#pragma weak g_DebugPortalsInputBufferSource2 = g_DebugPortalsInputBuffer2 +#pragma weak g_DebugPortalsInputBufferSource3 = g_DebugPortalsInputBuffer3 +#pragma weak g_DebugPortalsInputBufferSource4 = g_DebugPortalsInputBuffer4 /** * Something debug related in the MP manage method. @@ -348,12 +362,12 @@ void lvlStageLoad(s32 stage) musicTrack2ApplySeqpVol(VOLUME_MAX); musicTrack3ApplySeqpVol(VOLUME_MAX); sub_GAME_7F0C1364(); - set_contents_of_80036078(1); + modelmgrSetLevelResetting(TRUE); set_mt_tex_alloc(); #ifdef VERSION_EU - sub_GAME_7F0A45D8(); + bullet_moving_sparks_reset(); #else - sub_GAME_7F0A47D4(); + bullet_sparks_reset_all(); #endif texReset(); load_font_tables(); @@ -460,8 +474,8 @@ void lvlStageLoad(s32 stage) something_with_stage_objectives(); mpwatchUnpauseGame(); sub_GAME_7F09B820(); - sub_GAME_7F005450(); - zero_contents_of_80036070_74(); + initModelHitEntryFreeList(); + modelmgrResetSlotCounts(); init_load_objpos_table(); reinit_between_menus(); init_sound_effects_registers(); @@ -491,7 +505,7 @@ void lvlStageLoad(s32 stage) init_player_BONDdata_stats(); init_player_BONDdata(); bondviewLoadSetupIntroSection(); - bondviewPlayerSpawnRelated(); + bondviewPlayerBeginLife(); sets_a_bunch_of_BONDdata_values_to_default(); disableOnscreenCheatText(); } @@ -499,7 +513,12 @@ void lvlStageLoad(s32 stage) set_cur_player(0); } - set_contents_of_80036078(0); + /** + * Leave stage load allocation mode. + * From this point on, model creation should try to reuse existing slots. + */ + modelmgrSetLevelResetting(FALSE); + zbufDeallocate(); viSetVideoMode(MD_NORMAL); D_80048368 = 1.0f; @@ -514,418 +533,135 @@ s32 lvlGetCurrentStageToLoad(void) } -#ifdef NONMATCHING -/** + /** + * Address: 7F0BDF10 + * * Debug method. Something to do with portals. Button press * on controller 1 and 2 are used for control flow. - * - * address 0x7F0BDF10. - * - * https://decomp.me/scratch/C83v8 90.47% - * - * decomp status: - * - compiles: yes - * - stack resize: wrong - * - identical instructions: no - * - identical registers: fail */ -Gfx * lvlPortalDebug7F0BDF10(Gfx * arg0) +Gfx *lvlPortalDebug7F0BDF10(Gfx *gdl) { s32 temp_v1; - s32 sp20; - s32 i; + bool portalDebugStateChanged; // This value has no observable use in the final assembly but the variable definitely existed in the orignal code. + s32 *selectedPortal = &g_DebugPortalIndex; - sp20 = 0; + portalDebugStateChanged = FALSE; - if (arg0 != 0) + if (gdl) { - arg0 = bgDebugRemoved7F0B9DE4(arg0, g_DebugPortalsD_800483CC, -1); + gdl = bgDebugRemoved7F0B9DE4(gdl, g_DebugPortalIndex, -1); - for (i = 0; i < 4; i++) - { - g_DebugPortalsInputBuffer[i] = g_DebugPortalsInputBuffer[i+1]; - } + g_DebugPortalsInputBuffer = g_DebugPortalsInputBufferSource1; + g_DebugPortalsInputBuffer1 = g_DebugPortalsInputBufferSource2; + temp_v1 = g_DebugPortalsInputBufferSource4; + g_DebugPortalsInputBuffer2 = g_DebugPortalsInputBufferSource3; + g_DebugPortalsInputBuffer3 = temp_v1; temp_v1 = joyGetButtons(PLAYER_1, A_BUTTON) | joyGetButtons(PLAYER_2, A_BUTTON); - if (g_DebugPortalsInputBuffer[3] != temp_v1) + if ((temp_v1 == g_DebugPortalsInputBuffer3) == FALSE) { D_800483C0 ^= 1; } - if (g_DebugPortalsInputBuffer[0] != g_DebugPortalsInputBuffer[1]) + if ((g_DebugPortalsInputBuffer1 == g_DebugPortalsInputBuffer) == FALSE) { D_800483C0 ^= 1; } - g_DebugPortalsInputBuffer[4] = temp_v1; + g_DebugPortalsInputBuffer4 = temp_v1; - bgRemoved7F0B9DF4(temp_v1 ? g_DebugPortalsD_800483CC : -1); + bgRemoved7F0B9DF4(temp_v1 ? g_DebugPortalIndex : -1); - return arg0; + return gdl; } - if (joyGetButtonsPressedThisFrame(PLAYER_1, L_JPAD) | joyGetButtonsPressedThisFrame(PLAYER_2, L_JPAD)) + if (joyGetButtonsPressedThisFrame(PLAYER_1, L_JPAD) | + joyGetButtonsPressedThisFrame(PLAYER_2, L_JPAD)) { - g_DebugPortalsD_800483CC--; - sp20 = 1; - if (g_DebugPortalsD_800483CC < 0) + g_DebugPortalIndex = *selectedPortal - 1; + + if (portalDebugStateChanged = TRUE, *selectedPortal < 0) { - g_DebugPortalsD_800483CC = 0; + g_DebugPortalIndex = 0; } } - if (joyGetButtonsPressedThisFrame(PLAYER_1, R_JPAD) | joyGetButtonsPressedThisFrame(PLAYER_2, R_JPAD)) + if (joyGetButtonsPressedThisFrame(PLAYER_1, R_JPAD) | + joyGetButtonsPressedThisFrame(PLAYER_2, R_JPAD)) { - g_DebugPortalsD_800483CC++; - sp20 = 1; + g_DebugPortalIndex = *selectedPortal + 1; + portalDebugStateChanged = TRUE; } - if ( - (joyGetButtons(PLAYER_1, R_TRIG) | joyGetButtons(PLAYER_2, R_TRIG)) - && (joyGetButtons(PLAYER_1, L_TRIG) | joyGetButtons(PLAYER_2, L_TRIG))) + if ((joyGetButtons(PLAYER_1, R_TRIG) | joyGetButtons(PLAYER_2, R_TRIG)) && + (joyGetButtons(PLAYER_1, L_TRIG) | joyGetButtons(PLAYER_2, L_TRIG))) { if (joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD)) { - bgSwapConnectedRooms(g_DebugPortalsD_800483CC); + bgSwapConnectedRooms(*selectedPortal); } } else if (joyGetButtons(PLAYER_1, R_TRIG) | joyGetButtons(PLAYER_2, R_TRIG)) { - if ( - (joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD) | joyGetButtonsPressedThisFrame(PLAYER_2, D_JPAD)) - && (bgGetDataPortalsControlBytes1Bit1(g_DebugPortalsD_800483CC) == 0)) + if ((joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD) | + joyGetButtonsPressedThisFrame(PLAYER_2, D_JPAD)) && + (bgGetDataPortalsControlBytes1Bit1(g_DebugPortalIndex) == 0)) { - bgToggleDataPortalsContrlBytes1Bit1(g_DebugPortalsD_800483CC, 0); - sp20 = 1; + bgToggleDataPortalsContrlBytes1Bit1(g_DebugPortalIndex, 0); + portalDebugStateChanged = TRUE; } - if ( - (joyGetButtonsPressedThisFrame(PLAYER_1, U_JPAD) | joyGetButtonsPressedThisFrame(PLAYER_2, U_JPAD)) - && (bgGetDataPortalsControlBytes1Bit1(g_DebugPortalsD_800483CC) != 0)) + if ((joyGetButtonsPressedThisFrame(PLAYER_1, U_JPAD) | + joyGetButtonsPressedThisFrame(PLAYER_2, U_JPAD)) && + (bgGetDataPortalsControlBytes1Bit1(g_DebugPortalIndex) != 0)) { - bgToggleDataPortalsContrlBytes1Bit1(g_DebugPortalsD_800483CC, 1); - sp20 = 1; + bgToggleDataPortalsContrlBytes1Bit1(g_DebugPortalIndex, 1); + portalDebugStateChanged = TRUE; } } else if (joyGetButtons(PLAYER_1, L_TRIG) | joyGetButtons(PLAYER_2, L_TRIG)) { - if ( - (joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD) | joyGetButtonsPressedThisFrame(PLAYER_2, D_JPAD)) - && bgGetDataPortalsControlBytes1Bit2(g_DebugPortalsD_800483CC)) + if ((joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD) | + joyGetButtonsPressedThisFrame(PLAYER_2, D_JPAD)) && + bgGetDataPortalsControlBytes1Bit2(g_DebugPortalIndex)) { - bgClearDataPortalsControlBytes1Low2Bits(g_DebugPortalsD_800483CC); - sp20 = 1; + bgClearDataPortalsControlBytes1Low2Bits(g_DebugPortalIndex); + portalDebugStateChanged = TRUE; } - if ( - (joyGetButtonsPressedThisFrame(PLAYER_1, U_JPAD) | joyGetButtonsPressedThisFrame(PLAYER_2, U_JPAD)) - && (bgGetDataPortalsControlBytes1Bit2(g_DebugPortalsD_800483CC) == 0)) + if ((joyGetButtonsPressedThisFrame(PLAYER_1, U_JPAD) | + joyGetButtonsPressedThisFrame(PLAYER_2, U_JPAD)) && + (bgGetDataPortalsControlBytes1Bit2(g_DebugPortalIndex) == 0)) { - bgSetDataPortalsControlBytes1Bit2(g_DebugPortalsD_800483CC); - sp20 = 1; + bgSetDataPortalsControlBytes1Bit2(g_DebugPortalIndex); + portalDebugStateChanged = TRUE; } } else { - if (joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD) | joyGetButtonsPressedThisFrame(PLAYER_2, D_JPAD)) + if (joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD) | + joyGetButtonsPressedThisFrame(PLAYER_2, D_JPAD)) { - sub_GAME_7F0B9A7C(g_DebugPortalsD_800483CC); - sp20 = 1; + sub_GAME_7F0B9A7C(g_DebugPortalIndex); + portalDebugStateChanged = TRUE; } - if (joyGetButtonsPressedThisFrame(PLAYER_1, U_JPAD) | joyGetButtonsPressedThisFrame(PLAYER_2, U_JPAD)) + if (joyGetButtonsPressedThisFrame(PLAYER_1, U_JPAD) | + joyGetButtonsPressedThisFrame(PLAYER_2, U_JPAD)) { - sub_GAME_7F0B9A2C(g_DebugPortalsD_800483CC); - sp20 = 1; + sub_GAME_7F0B9A2C(g_DebugPortalIndex); + portalDebugStateChanged = TRUE; } } - if (sp20) + if (portalDebugStateChanged) { - // removed? + // Removed } - return 0; - + return NULL; } -#else -GLOBAL_ASM( -.text -glabel lvlPortalDebug7F0BDF10 -/* 0F2A40 7F0BDF10 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0F2A44 7F0BDF14 AFBF001C */ sw $ra, 0x1c($sp) -/* 0F2A48 7F0BDF18 AFB00018 */ sw $s0, 0x18($sp) -/* 0F2A4C 7F0BDF1C 1080003B */ beqz $a0, .L7F0BE00C -/* 0F2A50 7F0BDF20 AFA00020 */ sw $zero, 0x20($sp) -/* 0F2A54 7F0BDF24 3C058005 */ lui $a1, %hi(g_DebugPortalsD_800483CC) -/* 0F2A58 7F0BDF28 8CA583CC */ lw $a1, %lo(g_DebugPortalsD_800483CC)($a1) -/* 0F2A5C 7F0BDF2C 0FC2E779 */ jal bgDebugRemoved7F0B9DE4 -/* 0F2A60 7F0BDF30 2406FFFF */ li $a2, -1 -/* 0F2A64 7F0BDF34 3C0E8005 */ lui $t6, %hi(g_DebugPortalsInputBuffer + 0x4) -/* 0F2A68 7F0BDF38 8DCE83D4 */ lw $t6, %lo(g_DebugPortalsInputBuffer + 0x4)($t6) -/* 0F2A6C 7F0BDF3C 3C0F8005 */ lui $t7, %hi(g_DebugPortalsInputBuffer + 0x8) -/* 0F2A70 7F0BDF40 8DEF83D8 */ lw $t7, %lo(g_DebugPortalsInputBuffer + 0x8)($t7) -/* 0F2A74 7F0BDF44 3C018005 */ lui $at, %hi(g_DebugPortalsInputBuffer + 0x0) -/* 0F2A78 7F0BDF48 3C188005 */ lui $t8, %hi(g_DebugPortalsInputBuffer + 0xc) -/* 0F2A7C 7F0BDF4C AC2E83D0 */ sw $t6, %lo(g_DebugPortalsInputBuffer + 0x0)($at) -/* 0F2A80 7F0BDF50 8F1883DC */ lw $t8, %lo(g_DebugPortalsInputBuffer + 0xc)($t8) -/* 0F2A84 7F0BDF54 3C018005 */ lui $at, %hi(g_DebugPortalsInputBuffer + 0x4) -/* 0F2A88 7F0BDF58 AC2F83D4 */ sw $t7, %lo(g_DebugPortalsInputBuffer + 0x4)($at) -/* 0F2A8C 7F0BDF5C 3C038005 */ lui $v1, %hi(g_DebugPortalsInputBuffer + 0x10) -/* 0F2A90 7F0BDF60 3C018005 */ lui $at, %hi(g_DebugPortalsInputBuffer + 0x8) -/* 0F2A94 7F0BDF64 8C6383E0 */ lw $v1, %lo(g_DebugPortalsInputBuffer + 0x10)($v1) -/* 0F2A98 7F0BDF68 AC3883D8 */ sw $t8, %lo(g_DebugPortalsInputBuffer + 0x8)($at) -/* 0F2A9C 7F0BDF6C 3C018005 */ lui $at, %hi(g_DebugPortalsInputBuffer + 0xc) -/* 0F2AA0 7F0BDF70 AFA20028 */ sw $v0, 0x28($sp) -/* 0F2AA4 7F0BDF74 00002025 */ move $a0, $zero -/* 0F2AA8 7F0BDF78 34058000 */ li $a1, 32768 -/* 0F2AAC 7F0BDF7C 0C0030C3 */ jal joyGetButtons -/* 0F2AB0 7F0BDF80 AC2383DC */ sw $v1, %lo(g_DebugPortalsInputBuffer + 0xc)($at) -/* 0F2AB4 7F0BDF84 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2AB8 7F0BDF88 24040001 */ li $a0, 1 -/* 0F2ABC 7F0BDF8C 0C0030C3 */ jal joyGetButtons -/* 0F2AC0 7F0BDF90 34058000 */ li $a1, 32768 -/* 0F2AC4 7F0BDF94 3C198005 */ lui $t9, %hi(g_DebugPortalsInputBuffer + 0xc) -/* 0F2AC8 7F0BDF98 8F3983DC */ lw $t9, %lo(g_DebugPortalsInputBuffer + 0xc)($t9) -/* 0F2ACC 7F0BDF9C 00501825 */ or $v1, $v0, $s0 -/* 0F2AD0 7F0BDFA0 3C0B8005 */ lui $t3, %hi(g_DebugPortalsInputBuffer + 0x0) -/* 0F2AD4 7F0BDFA4 13230006 */ beq $t9, $v1, .L7F0BDFC0 -/* 0F2AD8 7F0BDFA8 3C0C8005 */ lui $t4, %hi(g_DebugPortalsInputBuffer + 0x4) -/* 0F2ADC 7F0BDFAC 3C028005 */ lui $v0, %hi(D_800483C0) -/* 0F2AE0 7F0BDFB0 244283C0 */ addiu $v0, %lo(D_800483C0) # addiu $v0, $v0, -0x7c40 -/* 0F2AE4 7F0BDFB4 8C490000 */ lw $t1, ($v0) -/* 0F2AE8 7F0BDFB8 392A0001 */ xori $t2, $t1, 1 -/* 0F2AEC 7F0BDFBC AC4A0000 */ sw $t2, ($v0) -.L7F0BDFC0: -/* 0F2AF0 7F0BDFC0 8D6B83D0 */ lw $t3, %lo(g_DebugPortalsInputBuffer + 0x0)($t3) -/* 0F2AF4 7F0BDFC4 8D8C83D4 */ lw $t4, %lo(g_DebugPortalsInputBuffer + 0x4)($t4) -/* 0F2AF8 7F0BDFC8 3C028005 */ lui $v0, %hi(D_800483C0) -/* 0F2AFC 7F0BDFCC 244283C0 */ addiu $v0, %lo(D_800483C0) # addiu $v0, $v0, -0x7c40 -/* 0F2B00 7F0BDFD0 116C0004 */ beq $t3, $t4, .L7F0BDFE4 -/* 0F2B04 7F0BDFD4 3C018005 */ lui $at, %hi(g_DebugPortalsInputBuffer + 0x10) -/* 0F2B08 7F0BDFD8 8C4E0000 */ lw $t6, ($v0) -/* 0F2B0C 7F0BDFDC 39CF0001 */ xori $t7, $t6, 1 -/* 0F2B10 7F0BDFE0 AC4F0000 */ sw $t7, ($v0) -.L7F0BDFE4: -/* 0F2B14 7F0BDFE4 10600004 */ beqz $v1, .L7F0BDFF8 -/* 0F2B18 7F0BDFE8 AC2383E0 */ sw $v1, %lo(g_DebugPortalsInputBuffer + 0x10)($at) -/* 0F2B1C 7F0BDFEC 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2B20 7F0BDFF0 10000002 */ b .L7F0BDFFC -/* 0F2B24 7F0BDFF4 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -.L7F0BDFF8: -/* 0F2B28 7F0BDFF8 2404FFFF */ li $a0, -1 -.L7F0BDFFC: -/* 0F2B2C 7F0BDFFC 0FC2E77D */ jal bgRemoved7F0B9DF4 -/* 0F2B30 7F0BE000 00000000 */ nop -/* 0F2B34 7F0BE004 100000BC */ b .L7F0BE2F8 -/* 0F2B38 7F0BE008 8FA20028 */ lw $v0, 0x28($sp) -.L7F0BE00C: -/* 0F2B3C 7F0BE00C 00002025 */ move $a0, $zero -/* 0F2B40 7F0BE010 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2B44 7F0BE014 24050200 */ li $a1, 512 -/* 0F2B48 7F0BE018 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2B4C 7F0BE01C 24040001 */ li $a0, 1 -/* 0F2B50 7F0BE020 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2B54 7F0BE024 24050200 */ li $a1, 512 -/* 0F2B58 7F0BE028 0050C025 */ or $t8, $v0, $s0 -/* 0F2B5C 7F0BE02C 1300000B */ beqz $t8, .L7F0BE05C -/* 0F2B60 7F0BE030 24050100 */ li $a1, 256 -/* 0F2B64 7F0BE034 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2B68 7F0BE038 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -/* 0F2B6C 7F0BE03C 24190001 */ li $t9, 1 -/* 0F2B70 7F0BE040 3C018005 */ lui $at, %hi(g_DebugPortalsD_800483CC) -/* 0F2B74 7F0BE044 2484FFFF */ addiu $a0, $a0, -1 -/* 0F2B78 7F0BE048 AC2483CC */ sw $a0, %lo(g_DebugPortalsD_800483CC)($at) -/* 0F2B7C 7F0BE04C 04810003 */ bgez $a0, .L7F0BE05C -/* 0F2B80 7F0BE050 AFB90020 */ sw $t9, 0x20($sp) -/* 0F2B84 7F0BE054 3C018005 */ lui $at, %hi(g_DebugPortalsD_800483CC) -/* 0F2B88 7F0BE058 AC2083CC */ sw $zero, %lo(g_DebugPortalsD_800483CC)($at) -.L7F0BE05C: -/* 0F2B8C 7F0BE05C 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2B90 7F0BE060 00002025 */ move $a0, $zero -/* 0F2B94 7F0BE064 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2B98 7F0BE068 24040001 */ li $a0, 1 -/* 0F2B9C 7F0BE06C 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2BA0 7F0BE070 24050100 */ li $a1, 256 -/* 0F2BA4 7F0BE074 00504025 */ or $t0, $v0, $s0 -/* 0F2BA8 7F0BE078 11000008 */ beqz $t0, .L7F0BE09C -/* 0F2BAC 7F0BE07C 24050010 */ li $a1, 16 -/* 0F2BB0 7F0BE080 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2BB4 7F0BE084 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -/* 0F2BB8 7F0BE088 24090001 */ li $t1, 1 -/* 0F2BBC 7F0BE08C 3C018005 */ lui $at, %hi(g_DebugPortalsD_800483CC) -/* 0F2BC0 7F0BE090 24840001 */ addiu $a0, $a0, 1 -/* 0F2BC4 7F0BE094 AC2483CC */ sw $a0, %lo(g_DebugPortalsD_800483CC)($at) -/* 0F2BC8 7F0BE098 AFA90020 */ sw $t1, 0x20($sp) -.L7F0BE09C: -/* 0F2BCC 7F0BE09C 0C0030C3 */ jal joyGetButtons -/* 0F2BD0 7F0BE0A0 00002025 */ move $a0, $zero -/* 0F2BD4 7F0BE0A4 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2BD8 7F0BE0A8 24040001 */ li $a0, 1 -/* 0F2BDC 7F0BE0AC 0C0030C3 */ jal joyGetButtons -/* 0F2BE0 7F0BE0B0 24050010 */ li $a1, 16 -/* 0F2BE4 7F0BE0B4 00505025 */ or $t2, $v0, $s0 -/* 0F2BE8 7F0BE0B8 11400012 */ beqz $t2, .L7F0BE104 -/* 0F2BEC 7F0BE0BC 00002025 */ move $a0, $zero -/* 0F2BF0 7F0BE0C0 0C0030C3 */ jal joyGetButtons -/* 0F2BF4 7F0BE0C4 24050020 */ li $a1, 32 -/* 0F2BF8 7F0BE0C8 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2BFC 7F0BE0CC 24040001 */ li $a0, 1 -/* 0F2C00 7F0BE0D0 0C0030C3 */ jal joyGetButtons -/* 0F2C04 7F0BE0D4 24050020 */ li $a1, 32 -/* 0F2C08 7F0BE0D8 00505825 */ or $t3, $v0, $s0 -/* 0F2C0C 7F0BE0DC 11600009 */ beqz $t3, .L7F0BE104 -/* 0F2C10 7F0BE0E0 00002025 */ move $a0, $zero -/* 0F2C14 7F0BE0E4 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2C18 7F0BE0E8 24050400 */ li $a1, 1024 -/* 0F2C1C 7F0BE0EC 10400081 */ beqz $v0, .L7F0BE2F4 -/* 0F2C20 7F0BE0F0 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2C24 7F0BE0F4 0FC2E6D9 */ jal bgSwapConnectedRooms -/* 0F2C28 7F0BE0F8 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -/* 0F2C2C 7F0BE0FC 1000007E */ b .L7F0BE2F8 -/* 0F2C30 7F0BE100 00001025 */ move $v0, $zero -.L7F0BE104: -/* 0F2C34 7F0BE104 00002025 */ move $a0, $zero -/* 0F2C38 7F0BE108 0C0030C3 */ jal joyGetButtons -/* 0F2C3C 7F0BE10C 24050010 */ li $a1, 16 -/* 0F2C40 7F0BE110 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2C44 7F0BE114 24040001 */ li $a0, 1 -/* 0F2C48 7F0BE118 0C0030C3 */ jal joyGetButtons -/* 0F2C4C 7F0BE11C 24050010 */ li $a1, 16 -/* 0F2C50 7F0BE120 00506025 */ or $t4, $v0, $s0 -/* 0F2C54 7F0BE124 11800029 */ beqz $t4, .L7F0BE1CC -/* 0F2C58 7F0BE128 00002025 */ move $a0, $zero -/* 0F2C5C 7F0BE12C 00002025 */ move $a0, $zero -/* 0F2C60 7F0BE130 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2C64 7F0BE134 24050400 */ li $a1, 1024 -/* 0F2C68 7F0BE138 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2C6C 7F0BE13C 24040001 */ li $a0, 1 -/* 0F2C70 7F0BE140 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2C74 7F0BE144 24050400 */ li $a1, 1024 -/* 0F2C78 7F0BE148 00506825 */ or $t5, $v0, $s0 -/* 0F2C7C 7F0BE14C 11A0000A */ beqz $t5, .L7F0BE178 -/* 0F2C80 7F0BE150 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2C84 7F0BE154 0FC2E6B9 */ jal bgGetDataPortalsControlBytes1Bit1 -/* 0F2C88 7F0BE158 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -/* 0F2C8C 7F0BE15C 14400006 */ bnez $v0, .L7F0BE178 -/* 0F2C90 7F0BE160 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2C94 7F0BE164 240E0001 */ li $t6, 1 -/* 0F2C98 7F0BE168 AFAE0020 */ sw $t6, 0x20($sp) -/* 0F2C9C 7F0BE16C 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -/* 0F2CA0 7F0BE170 0FC2E76F */ jal bgToggleDataPortalsContrlBytes1Bit1 -/* 0F2CA4 7F0BE174 00002825 */ move $a1, $zero -.L7F0BE178: -/* 0F2CA8 7F0BE178 00002025 */ move $a0, $zero -/* 0F2CAC 7F0BE17C 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2CB0 7F0BE180 24050800 */ li $a1, 2048 -/* 0F2CB4 7F0BE184 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2CB8 7F0BE188 24040001 */ li $a0, 1 -/* 0F2CBC 7F0BE18C 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2CC0 7F0BE190 24050800 */ li $a1, 2048 -/* 0F2CC4 7F0BE194 00507825 */ or $t7, $v0, $s0 -/* 0F2CC8 7F0BE198 11E00056 */ beqz $t7, .L7F0BE2F4 -/* 0F2CCC 7F0BE19C 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2CD0 7F0BE1A0 0FC2E6B9 */ jal bgGetDataPortalsControlBytes1Bit1 -/* 0F2CD4 7F0BE1A4 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -/* 0F2CD8 7F0BE1A8 10400052 */ beqz $v0, .L7F0BE2F4 -/* 0F2CDC 7F0BE1AC 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2CE0 7F0BE1B0 24180001 */ li $t8, 1 -/* 0F2CE4 7F0BE1B4 AFB80020 */ sw $t8, 0x20($sp) -/* 0F2CE8 7F0BE1B8 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -/* 0F2CEC 7F0BE1BC 0FC2E76F */ jal bgToggleDataPortalsContrlBytes1Bit1 -/* 0F2CF0 7F0BE1C0 24050001 */ li $a1, 1 -/* 0F2CF4 7F0BE1C4 1000004C */ b .L7F0BE2F8 -/* 0F2CF8 7F0BE1C8 00001025 */ move $v0, $zero -.L7F0BE1CC: -/* 0F2CFC 7F0BE1CC 0C0030C3 */ jal joyGetButtons -/* 0F2D00 7F0BE1D0 24050020 */ li $a1, 32 -/* 0F2D04 7F0BE1D4 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2D08 7F0BE1D8 24040001 */ li $a0, 1 -/* 0F2D0C 7F0BE1DC 0C0030C3 */ jal joyGetButtons -/* 0F2D10 7F0BE1E0 24050020 */ li $a1, 32 -/* 0F2D14 7F0BE1E4 0050C825 */ or $t9, $v0, $s0 -/* 0F2D18 7F0BE1E8 13200027 */ beqz $t9, .L7F0BE288 -/* 0F2D1C 7F0BE1EC 00002025 */ move $a0, $zero -/* 0F2D20 7F0BE1F0 00002025 */ move $a0, $zero -/* 0F2D24 7F0BE1F4 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2D28 7F0BE1F8 24050400 */ li $a1, 1024 -/* 0F2D2C 7F0BE1FC 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2D30 7F0BE200 24040001 */ li $a0, 1 -/* 0F2D34 7F0BE204 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2D38 7F0BE208 24050400 */ li $a1, 1024 -/* 0F2D3C 7F0BE20C 00504025 */ or $t0, $v0, $s0 -/* 0F2D40 7F0BE210 11000009 */ beqz $t0, .L7F0BE238 -/* 0F2D44 7F0BE214 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2D48 7F0BE218 0FC2E6C1 */ jal bgGetDataPortalsControlBytes1Bit2 -/* 0F2D4C 7F0BE21C 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -/* 0F2D50 7F0BE220 10400005 */ beqz $v0, .L7F0BE238 -/* 0F2D54 7F0BE224 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2D58 7F0BE228 24090001 */ li $t1, 1 -/* 0F2D5C 7F0BE22C AFA90020 */ sw $t1, 0x20($sp) -/* 0F2D60 7F0BE230 0FC2E6D1 */ jal bgClearDataPortalsControlBytes1Low2Bits -/* 0F2D64 7F0BE234 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -.L7F0BE238: -/* 0F2D68 7F0BE238 00002025 */ move $a0, $zero -/* 0F2D6C 7F0BE23C 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2D70 7F0BE240 24050800 */ li $a1, 2048 -/* 0F2D74 7F0BE244 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2D78 7F0BE248 24040001 */ li $a0, 1 -/* 0F2D7C 7F0BE24C 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2D80 7F0BE250 24050800 */ li $a1, 2048 -/* 0F2D84 7F0BE254 00505025 */ or $t2, $v0, $s0 -/* 0F2D88 7F0BE258 11400026 */ beqz $t2, .L7F0BE2F4 -/* 0F2D8C 7F0BE25C 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2D90 7F0BE260 0FC2E6C1 */ jal bgGetDataPortalsControlBytes1Bit2 -/* 0F2D94 7F0BE264 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -/* 0F2D98 7F0BE268 14400022 */ bnez $v0, .L7F0BE2F4 -/* 0F2D9C 7F0BE26C 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2DA0 7F0BE270 240B0001 */ li $t3, 1 -/* 0F2DA4 7F0BE274 AFAB0020 */ sw $t3, 0x20($sp) -/* 0F2DA8 7F0BE278 0FC2E6C9 */ jal bgSetDataPortalsControlBytes1Bit2 -/* 0F2DAC 7F0BE27C 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -/* 0F2DB0 7F0BE280 1000001D */ b .L7F0BE2F8 -/* 0F2DB4 7F0BE284 00001025 */ move $v0, $zero -.L7F0BE288: -/* 0F2DB8 7F0BE288 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2DBC 7F0BE28C 24050400 */ li $a1, 1024 -/* 0F2DC0 7F0BE290 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2DC4 7F0BE294 24040001 */ li $a0, 1 -/* 0F2DC8 7F0BE298 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2DCC 7F0BE29C 24050400 */ li $a1, 1024 -/* 0F2DD0 7F0BE2A0 00506025 */ or $t4, $v0, $s0 -/* 0F2DD4 7F0BE2A4 11800005 */ beqz $t4, .L7F0BE2BC -/* 0F2DD8 7F0BE2A8 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2DDC 7F0BE2AC 240D0001 */ li $t5, 1 -/* 0F2DE0 7F0BE2B0 AFAD0020 */ sw $t5, 0x20($sp) -/* 0F2DE4 7F0BE2B4 0FC2E69F */ jal sub_GAME_7F0B9A7C -/* 0F2DE8 7F0BE2B8 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -.L7F0BE2BC: -/* 0F2DEC 7F0BE2BC 00002025 */ move $a0, $zero -/* 0F2DF0 7F0BE2C0 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2DF4 7F0BE2C4 24050800 */ li $a1, 2048 -/* 0F2DF8 7F0BE2C8 3050FFFF */ andi $s0, $v0, 0xffff -/* 0F2DFC 7F0BE2CC 24040001 */ li $a0, 1 -/* 0F2E00 7F0BE2D0 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F2E04 7F0BE2D4 24050800 */ li $a1, 2048 -/* 0F2E08 7F0BE2D8 00507025 */ or $t6, $v0, $s0 -/* 0F2E0C 7F0BE2DC 11C00005 */ beqz $t6, .L7F0BE2F4 -/* 0F2E10 7F0BE2E0 3C048005 */ lui $a0, %hi(g_DebugPortalsD_800483CC) -/* 0F2E14 7F0BE2E4 240F0001 */ li $t7, 1 -/* 0F2E18 7F0BE2E8 AFAF0020 */ sw $t7, 0x20($sp) -/* 0F2E1C 7F0BE2EC 0FC2E68B */ jal sub_GAME_7F0B9A2C -/* 0F2E20 7F0BE2F0 8C8483CC */ lw $a0, %lo(g_DebugPortalsD_800483CC)($a0) -.L7F0BE2F4: -/* 0F2E24 7F0BE2F4 00001025 */ move $v0, $zero -.L7F0BE2F8: -/* 0F2E28 7F0BE2F8 8FBF001C */ lw $ra, 0x1c($sp) -/* 0F2E2C 7F0BE2FC 8FB00018 */ lw $s0, 0x18($sp) -/* 0F2E30 7F0BE300 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0F2E34 7F0BE304 03E00008 */ jr $ra -/* 0F2E38 7F0BE308 00000000 */ nop -) -#endif - /** @@ -946,7 +682,7 @@ Gfx* lvlRender(Gfx* DL) if (g_CurrentStageToLoad == LEVELID_TITLE) { DL = viClearZBufCurrentPlayer(DL); - DL = video_related_F(DL); + DL = viSetupCurrentPlayerView(DL); gDPSetScissor(DL++, G_SC_NON_INTERLACE, 0, 0, (s16)viGetX(), (s16)viGetY()); DL = menu_jump_constructor_handler(DL); } @@ -969,7 +705,7 @@ Gfx* lvlRender(Gfx* DL) viSetAspect(g_CurrentPlayer->aspect); DL = viClearZBufCurrentPlayer(DL); - DL = video_related_F(DL); + DL = viSetupCurrentPlayerView(DL); if (get_debug_render_raster() == DEB_MOVE_VIEW) { @@ -978,18 +714,18 @@ Gfx* lvlRender(Gfx* DL) if (get_debug_render_raster() == DEB_STAN_VIEW) { - DL = sub_GAME_7F0B2D48(DL); + DL = stanRenderDebugStanView(DL); } if (get_debug_render_raster() == DEB_BOND_VIEW) { - DL = sub_GAME_7F087A08(DL); + DL = bondviewRenderDebugBondView(DL); } DL = viSetupScreensForNumPlayers(DL); DL = skyRender(DL); bgRoomVisibilityRelated(); - determing_type_of_object_and_detection(); + propsTick(); chraiUpdateOnscreenPropCount(); chrpropUpdateAutoaimTarget(); chraiCheckUseHeldItems(); @@ -1000,7 +736,7 @@ Gfx* lvlRender(Gfx* DL) attempt_reload_item_in_hand(GUNLEFT); } - sub_GAME_7F03D0D4(); + propsTickPlayer(); DL = bgLevelRender(DL); if (get_debug_portal_flag()) @@ -1056,14 +792,14 @@ Gfx* lvlRender(Gfx* DL) } setanimationdebugflag(getDebugMode() == DEB_SELANIM); - DL = sub_GAME_7F049B58(DL); + DL = weaponRenderTracers(DL); #if defined(VERSION_EU) - sub_GAME_7F0A46A0(&DL, 1); + bullet_moving_sparks_update(&DL, ZBUF_SURFACE); #else /* VERSION_US, VERSION_JP, unspecified */ - sub_GAME_7F0A4824(&DL, 1); + bullet_sparks_render_all(&DL, ZBUF_SURFACE); #endif - DL = sub_GAME_7F0A2C44(DL); + DL = glassRenderShards(DL); DL = explosionRenderFlyingParticles(DL); if ( @@ -1111,7 +847,7 @@ void lvlSetMultipliersForDifficulty(void) { if (g_SelectedDifficulty == DIFFICULTY_AGENT) { - f32 armorDiff = bondviewGetCurrentPlayerHealth() + get_BONDdata_watch_armor(); + f32 armorDiff = currentPlayerGetHealth() + currentPlayerGetArmor(); f32 damageMultiplier = 1.0f; if (armorDiff <= 0.125f) @@ -1212,52 +948,17 @@ void lvlSetMultipliersForDifficulty(void) } -#ifdef NONMATCHING /** - * Multiplayer method. + * Multiplayer method. Manages a lot of stuff. * Tracks you-only-live-twice kills/deaths. * Lots of debug code. * * Address: 0x7F0BEB88 (NTSC). - * - * decomp status: - * - compiles: yes - * - stack resize: fail - * - identical instructions: fail - * - identical registers: fail - * - * notes: there is one big `if` block that is very wrong. A few places where two instructions are swapped. - * Otherwise just lots of regalloc. - * - * mismatch section is probably Perfect Dark void mpCalculateAwards(void) - * - * https://decomp.me/scratch/YWqVR 63.28% + * Address: 0x7F0BF7AC (NTSC-J). + * Address: 0x7F0BDFAC (PAL). */ void lvlManageMpGame(void) { - s32 current_time_copy; - s32 sp180; - s32 sp30; - s32 sp2C; - s32 time_limit_minus_60_seconds; - s32 var_player_count2_again; - s32 temp_t6; - s32 temp_v0; - s32 current_time; - s32 var_player_count1; - s32 var_player_count2; - s32 mp_game_time_limit; - s32 mp_game_time_limit_2; - s32 temp_v1_7; - s32 mp_alive_count; - s32 mp_player_field424_count; - s32 mp_player_currently_in_dying_animation; - s32 phi_a2_5; - s32 copy_g_clockTimer; - s32 mp_players_over_point_limit; - s32 phi_ra_2; - s32 phi_ra_3; - tlbmanageResetCurrentEntriesCount(); if (g_ControlsLockedFlag != 0) @@ -1274,21 +975,27 @@ void lvlManageMpGame(void) D_80048380 += 1; } - temp_v0 = g_ClockTimer; - g_GlobalTimerDelta = (f32) temp_v0; - g_GlobalTimer += temp_v0; - +#ifdef VERSION_US + g_GlobalTimerDelta = (f32) g_ClockTimer; +#else + g_JP_GlobalTimerDelta = (f32) g_ClockTimer; +#ifdef VERSION_EU + g_GlobalTimerDelta = g_JP_GlobalTimerDelta * 1.2f; +#else + g_GlobalTimerDelta = g_JP_GlobalTimerDelta; +#endif +#endif + g_GlobalTimer += g_ClockTimer; if ((g_CurrentStageToLoad != LEVELID_TITLE) && (D_80048394 == 0) && (g_ClockTimer > 0)) { if (g_AppendCheatSinglePlayer != 0) { - s32 s0 = 1; - - for (s0 = 1; s0 != CHEAT_INVALID; s0++) + s32 i; + for (i = 1; i != CHEAT_INVALID; i++) { - if (g_CheatActivated[s0] && !cheatIsEnemyRockets(s0)) + if (g_CheatActivated[i] && !cheatIsEnemyRockets(i)) { - cheatButtonTurnOnCheatForPlayers(s0); + cheatButtonTurnOnCheatForPlayers(i); } } } @@ -1299,19 +1006,18 @@ void lvlManageMpGame(void) if (get_mission_state() == MISSION_STATE_6) { s32 i; - struct player* p; + s32 mp_alive_count; + s32 mp_player_field424_count; mp_alive_count = 0; mp_player_field424_count = 0; for (i=0; ibonddead != FALSE) + if (g_playerPointers[i]->bonddead != FALSE) { mp_alive_count++; - if (p->redbloodfinished) + if (g_playerPointers[i]->redbloodfinished) { mp_player_field424_count++; } @@ -1324,27 +1030,37 @@ void lvlManageMpGame(void) } } - mp_game_time_limit = g_MpTime; - if (mp_game_time_limit > 0) + if (g_MpTime > 0) { + s32 current_time; + s32 sp180; + s32 i; current_time = D_80048394; - time_limit_minus_60_seconds = mp_game_time_limit - 0xE10; - temp_t6 = g_ClockTimer + current_time; - sp180 = temp_t6; - current_time_copy = current_time; + sp180 = g_ClockTimer + D_80048394; - if ((current_time < time_limit_minus_60_seconds) && (temp_t6 >= time_limit_minus_60_seconds)) +#ifdef VERSION_EU + if ((D_80048394 < (g_MpTime - 0xBB8)) && (sp180 >= (g_MpTime - 0xBB8))) +#else + if ((D_80048394 < (g_MpTime - 0xE10)) && (sp180 >= (g_MpTime - 0xE10))) +#endif { - s32 i = 0; - for (i=0; i= (g_MpTime - 0x1F4)) && (g_MpSoundStateRelated == 0) && (lvlGetControlsLockedFlag() == 0)) +#else if ((sp180 >= (g_MpTime - 0x258)) && (g_MpSoundStateRelated == 0) && (lvlGetControlsLockedFlag() == 0)) +#endif { sndPlaySfx(g_musicSfxBufferPtr, ALARM1_SFX, &g_MpSoundStateRelated); } @@ -1358,29 +1074,28 @@ void lvlManageMpGame(void) } } - mp_game_time_limit_2 = g_MpTime; - if ((current_time_copy < mp_game_time_limit_2) && (sp180 >= mp_game_time_limit_2)) + if ((current_time < g_MpTime) && (sp180 >= g_MpTime)) { - mpCalculateAwards(0); + mpCalculateAwards(FALSE); } } // when playing with a kill limit, g_MpPoint is not zero if ((g_MpPoint > 0) && (g_ClockTimer != 0)) { + s32 var_player_count1; s32 i; - struct player* p; + s32 mp_player_currently_in_dying_animation; + s32 mp_players_over_point_limit; var_player_count1 = getPlayerCount(); - mp_players_over_point_limit = 0; mp_player_currently_in_dying_animation = 0; + mp_players_over_point_limit = 0; - for (i=0; ibonddead != FALSE && - (p->redbloodfinished == FALSE || p->deathanimfinished == FALSE || p->colourfadetimemax60 >= 0.0f)) + if (g_playerPointers[i]->bonddead != FALSE && + (g_playerPointers[i]->redbloodfinished == FALSE || g_playerPointers[i]->deathanimfinished == FALSE || g_playerPointers[i]->colourfadetimemax60 >= 0.0f)) { mp_player_currently_in_dying_animation++; } @@ -1397,7 +1112,7 @@ void lvlManageMpGame(void) if (mp_player_currently_in_dying_animation == 0) { // end game after dying players are finished dying - mpCalculateAwards(0); + mpCalculateAwards(FALSE); } else { @@ -1408,111 +1123,97 @@ void lvlManageMpGame(void) } -// decomp issue: begin very wrong section + // YOLT scenario: end-of-game tracking. if ((get_scenario() == SCENARIO_YOLT) && (g_ClockTimer != 0)) { - s32 not_dead_count = 0; - s32 killed_count = 0; + s32 player_count; + s32 killed_count; + s32 not_dead_count; + s32 fully_dead_total; + s32 killed_total; s32 i; s32 j; - var_player_count2 = getPlayerCount(); + player_count = getPlayerCount(); + killed_total = 0; + fully_dead_total = 0; - //if (var_player_count2 > 0) - //{ - for (i=0; i < var_player_count2; i++) + for (i = 0; i < player_count; i++) + { + killed_count = 0; + not_dead_count = 0; + + for (j = 0; j < player_count; j++) { - if (var_player_count2 > 0) + if (g_playerPointers[j]->bonddead == 0) { - var_player_count2_again = var_player_count2 & 3; + not_dead_count++; + } + killed_count += g_playerPlayerData[j].kill_counts[i]; + } - if (var_player_count2_again != 0) - { - for (j=0; jbonddead == FALSE) - { - not_dead_count++; - } - - killed_count += g_playerPlayerData[j].killed_p1; - } - } - else - { - for (j=0; jbonddead == FALSE) - { - not_dead_count++; - } - if (g_playerPointers[PLAYER_2]->bonddead == FALSE) - { - not_dead_count++; - } - if (g_playerPointers[PLAYER_3]->bonddead == FALSE) - { - not_dead_count++; - } - if (g_playerPointers[PLAYER_4]->bonddead == FALSE) - { - not_dead_count++; - } - - killed_count = - g_playerPlayerData[PLAYER_1].killed_p1 + - g_playerPlayerData[PLAYER_2].killed_p1 + - g_playerPlayerData[PLAYER_3].killed_p1 + - g_playerPlayerData[PLAYER_4].killed_p1; - } - } + if (killed_count >= 2) + { + if (g_playerPlayerData[i].order_out_in_yolt == 0) + { + g_playerPlayerData[i].order_out_in_yolt = (u8) (not_dead_count + 1); } - if (killed_count >= 2) - { - if (g_playerPlayerData[i].order_out_in_yolt == 0) - { - g_playerPlayerData[i].order_out_in_yolt = (u8) (phi_a2_5 + 1); - } + killed_total++; - if ((g_playerPointers[i]->redbloodfinished) && (g_playerPointers[i]->deathanimfinished) && (g_playerPointers[i]->colourfadetimemax60 < 0.0f)) - { - phi_ra_2 = phi_ra_3 + 1; - } + if (g_playerPointers[i]->redbloodfinished + && g_playerPointers[i]->deathanimfinished + && g_playerPointers[i]->colourfadetimemax60 < 0.0f) + { + fully_dead_total++; } } - //} - - temp_v1_7 = var_player_count2 - 1; - if (not_dead_count >= temp_v1_7) - { - mpCalculateAwards(0); } - else if (killed_count >= temp_v1_7) + + if (fully_dead_total >= player_count - 1) + { + mpCalculateAwards(FALSE); + } + else if (killed_total >= player_count - 1) { mpwatchSetStopPlayFlag(); } } // end YOLT -// decomp issue: end very wrong section + + if (0) + { + char debug_buf[268]; + sprintf(debug_buf, "setdetail %d %d %d %d %d %d %d %d %d", 0, 0, 0, 0, 0, 0, 0, 0, 0); + } } D_80048394 = D_80048394 + g_ClockTimer; +#ifdef VERSION_EU + g_CurrentMultiPlayerSec = (f32) (D_80048394) / 50.0f; +#else g_CurrentMultiPlayerSec = (f32) (D_80048394) / 60.0f; +#endif D_800483A8 = D_800483A8 + g_ClockTimer; +#ifdef VERSION_EU + g_CurrentMultiPlayerMin = (f32) (D_800483A8) / 50.0f; +#else g_CurrentMultiPlayerMin = (f32) (D_800483A8) / 60.0f; +#endif if (joyGetButtonsPressedThisFrame(PLAYER_1, ANY_BUTTON)) { D_80048388 = 0; D_80048390 = 0; - copy_g_clockTimer = g_ClockTimer; } else { D_80048390 = D_80048390 + g_ClockTimer; - copy_g_clockTimer = g_ClockTimer; +#ifdef VERSION_EU + if (D_80048390 >= 0x5DC) +#else if (D_80048390 >= 0x708) +#endif { D_80048388 = 1; } @@ -1520,14 +1221,22 @@ void lvlManageMpGame(void) if (D_80048388 != 0) { - D_8004838C += copy_g_clockTimer; + D_8004838C += g_ClockTimer; } else { - D_800483B0 = D_800483B0 + copy_g_clockTimer; + D_800483B0 = D_800483B0 + g_ClockTimer; +#ifdef VERSION_EU + g_StageTimeSec = (f32) (D_800483B0) / 50.0f; +#else g_StageTimeSec = (f32) (D_800483B0) / 60.0f; - D_800483B8 = D_800483B8 + copy_g_clockTimer; +#endif + D_800483B8 = D_800483B8 + g_ClockTimer; +#ifdef VERSION_EU + g_PowerOnTimeSec = (f32) (D_800483B8) / 50.0f; +#else g_PowerOnTimeSec = (f32) (D_800483B8) / 60.0f; +#endif } viSetUseZBuf(1); @@ -1545,11 +1254,15 @@ void lvlManageMpGame(void) updateRoomStatusFlags(); sub_GAME_7F092E50(); skyTick(); - update_bullet_sparks_and_dust_clouds(); +#ifdef VERSION_EU + bullet_moving_spark_create(); +#else + bullet_sparks_update_all(); +#endif update_bullet_casings(); update_broken_windows(); explosionUpdateFlyingParticles(); - handle_mp_respawn_and_some_things(); + chrpropTick(); reset_all_music_slots(); langTick(); @@ -1608,2784 +1321,140 @@ void lvlManageMpGame(void) chrToggleD_8002C90C(); } - sub_GAME_7F022EE0(0 < joyGetButtons(PLAYER_1, R_TRIG)); + sub_GAME_7F022EE0(joyGetButtons(PLAYER_1, R_TRIG) != 0); } break; } } - - switch (getDebugMode()) { - case 0x38: + struct ALBank * sfx; + s16 sound_index; + s16 *sound_index_ptr; + switch (getDebugMode()) { - sp30 = viGetHorizontalOffset(); - sp2C = viGet800232A0(); - if (joyGetButtons(PLAYER_1, D_CBUTTONS)) + case 0x38: { - sp2C += 1; + s32 sp30; + s32 sp2C; + sp30 = viGetHorizontalOffset(); + sp2C = viGet800232A0(); + if (joyGetButtons(PLAYER_1, D_CBUTTONS)) + { + sp2C += 1; + } + if (joyGetButtons(PLAYER_1, U_CBUTTONS)) + { + sp2C += -1; + } + if (joyGetButtons(PLAYER_1, R_CBUTTONS)) + { + sp30 += 1; + } + if (joyGetButtons(PLAYER_1, L_CBUTTONS)) + { + sp30 += -1; + } + viSetHorizontalOffset(sp30); + viSet800232A0(sp2C); } - if (joyGetButtons(PLAYER_1, U_CBUTTONS)) - { - sp2C += -1; - } - if (joyGetButtons(PLAYER_1, R_CBUTTONS)) - { - sp30 += 1; - } - if (joyGetButtons(PLAYER_1, L_CBUTTONS)) - { - sp30 += -1; - } - viSetHorizontalOffset(sp30); - viSet800232A0(sp2C); - } - break; + break; - case 0xc: - { - if (joyGetButtonsPressedThisFrame(PLAYER_1, (L_JPAD | L_CBUTTONS))) + case 0xc: { - lvlMusicAppendPlayEndTheme(); - } + if (joyGetButtonsPressedThisFrame(PLAYER_1, (L_JPAD | L_CBUTTONS))) + { + lvlMusicAppendPlayEndTheme(); + } - if (joyGetButtonsPressedThisFrame(PLAYER_1, (R_JPAD | R_CBUTTONS))) + if (joyGetButtonsPressedThisFrame(PLAYER_1, (R_JPAD | R_CBUTTONS))) + { + lvlMusicAppendPlaySoloDeathShort(); + } + + if (joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD)) + { + musicTrack1Stop(); + } + + if (joyGetButtonsPressedThisFrame(PLAYER_1, B_BUTTON)) + { + musicTrack1SaveCurrentVolumeAsTrackDefault(); + } + } + break; + case 0xd: { - lvlMusicAppendPlaySoloDeathShort(); - } - - if (joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD)) - { - musicTrack1Stop(); - } - - if (joyGetButtonsPressedThisFrame(PLAYER_1, B_BUTTON)) - { - musicTrack1SaveCurrentVolumeAsTrackDefault(); - } - } - break; - - // decomp issue: some of the lui R_MIPS_HI16 for g_musicSfxBufferPtr and g_DebugMpGameSoundFxIndex are swapped - case 0xd: - { - s16 sound_index; - s16 *sound_index_ptr = &g_DebugMpGameSoundFxIndex; - - if (joyGetButtonsPressedThisFrame(PLAYER_1, (D_JPAD | L_JPAD | L_TRIG | L_CBUTTONS))) - { - sound_index = g_DebugMpGameSoundFxIndex - 1; - *sound_index_ptr = sound_index; - sndPlaySfx(g_musicSfxBufferPtr, sound_index, NULL); - } - - if (joyGetButtonsPressedThisFrame(PLAYER_1, (U_JPAD | R_JPAD | R_TRIG | R_CBUTTONS))) - { - sound_index = g_DebugMpGameSoundFxIndex + 1; - *sound_index_ptr = sound_index; - sndPlaySfx(g_musicSfxBufferPtr, sound_index, NULL); - } - - if (joyGetButtonsPressedThisFrame(PLAYER_1, D_CBUTTONS)) - { - sndDeactivateAllSfxByFlag_1(); - } - - if (joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS)) - { - sound_index = g_DebugMpGameSoundFxIndex; - sndPlaySfx(g_musicSfxBufferPtr, sound_index, NULL); - } - } - break; - - default: - break; - } - -} -#else #ifdef VERSION_US -GLOBAL_ASM( -.rdata -#const char aOneMinuteLeft[] = "One minute left"; -glabel aOneMinuteLeft -.word 0x4f6e6520 -.word 0x6d696e75 -.word 0x7465206c -.word 0x65667400 -#const char aSetdetailDDDDDDDDD[] = "setdetail %d %d %d %d %d %d %d %d %d"; -glabel aSetdetailDDDDDDDDD -.word 0x73657464 -.word 0x65746169 -.word 0x6c202564 -.word 0x20256420 -.word 0x25642025 -.word 0x64202564 -.word 0x20256420 -.word 0x25642025 -.word 0x64202564 -.word 0x00000000 -.text -glabel lvlManageMpGame -/* 0F36B8 7F0BEB88 27BDFE68 */ addiu $sp, $sp, -0x198 -/* 0F36BC 7F0BEB8C AFBF0014 */ sw $ra, 0x14($sp) -/* 0F36C0 7F0BEB90 0C000626 */ jal tlbmanageResetCurrentEntriesCount -/* 0F36C4 7F0BEB94 00000000 */ nop -/* 0F36C8 7F0BEB98 3C0E8005 */ lui $t6, %hi(g_ControlsLockedFlag) -/* 0F36CC 7F0BEB9C 8DCE8370 */ lw $t6, %lo(g_ControlsLockedFlag)($t6) -/* 0F36D0 7F0BEBA0 3C018005 */ lui $at, %hi(g_ClockTimer) -/* 0F36D4 7F0BEBA4 11C00003 */ beqz $t6, .L7F0BEBB4 -/* 0F36D8 7F0BEBA8 00000000 */ nop -/* 0F36DC 7F0BEBAC 10000010 */ b .L7F0BEBF0 -/* 0F36E0 7F0BEBB0 AC208374 */ sw $zero, %lo(g_ClockTimer)($at) -.L7F0BEBB4: -/* 0F36E4 7F0BEBB4 0FC31820 */ jal checkGamePaused -/* 0F36E8 7F0BEBB8 00000000 */ nop -/* 0F36EC 7F0BEBBC 10400004 */ beqz $v0, .L7F0BEBD0 -/* 0F36F0 7F0BEBC0 3C0F8005 */ lui $t7, %hi(speedgraphframes) -/* 0F36F4 7F0BEBC4 3C018005 */ lui $at, %hi(g_ClockTimer) -/* 0F36F8 7F0BEBC8 10000009 */ b .L7F0BEBF0 -/* 0F36FC 7F0BEBCC AC208374 */ sw $zero, %lo(g_ClockTimer)($at) -.L7F0BEBD0: -/* 0F3700 7F0BEBD0 8DEF8498 */ lw $t7, %lo(speedgraphframes)($t7) -/* 0F3704 7F0BEBD4 3C028005 */ lui $v0, %hi(D_80048380) -/* 0F3708 7F0BEBD8 3C018005 */ lui $at, %hi(g_ClockTimer) -/* 0F370C 7F0BEBDC 24428380 */ addiu $v0, %lo(D_80048380) # addiu $v0, $v0, -0x7c80 -/* 0F3710 7F0BEBE0 AC2F8374 */ sw $t7, %lo(g_ClockTimer)($at) -/* 0F3714 7F0BEBE4 8C580000 */ lw $t8, ($v0) -/* 0F3718 7F0BEBE8 27190001 */ addiu $t9, $t8, 1 -/* 0F371C 7F0BEBEC AC590000 */ sw $t9, ($v0) -.L7F0BEBF0: -/* 0F3720 7F0BEBF0 3C028005 */ lui $v0, %hi(g_ClockTimer) -/* 0F3724 7F0BEBF4 8C428374 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0F3728 7F0BEBF8 3C038005 */ lui $v1, %hi(g_GlobalTimer) -/* 0F372C 7F0BEBFC 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 0F3730 7F0BEC00 44822000 */ mtc1 $v0, $f4 -/* 0F3734 7F0BEC04 2463837C */ addiu $v1, %lo(g_GlobalTimer) # addiu $v1, $v1, -0x7c84 -/* 0F3738 7F0BEC08 3C188005 */ lui $t8, %hi(g_CurrentStageToLoad) -/* 0F373C 7F0BEC0C 468021A0 */ cvt.s.w $f6, $f4 -/* 0F3740 7F0BEC10 3C198005 */ lui $t9, %hi(D_80048394) -/* 0F3744 7F0BEC14 E4268378 */ swc1 $f6, %lo(g_GlobalTimerDelta)($at) -/* 0F3748 7F0BEC18 8C6E0000 */ lw $t6, ($v1) -/* 0F374C 7F0BEC1C 2401005A */ li $at, 90 -/* 0F3750 7F0BEC20 01C27821 */ addu $t7, $t6, $v0 -/* 0F3754 7F0BEC24 AC6F0000 */ sw $t7, ($v1) -/* 0F3758 7F0BEC28 8F188364 */ lw $t8, %lo(g_CurrentStageToLoad)($t8) -/* 0F375C 7F0BEC2C 1301001D */ beq $t8, $at, .L7F0BECA4 -/* 0F3760 7F0BEC30 00000000 */ nop -/* 0F3764 7F0BEC34 8F398394 */ lw $t9, %lo(D_80048394)($t9) -/* 0F3768 7F0BEC38 1720001A */ bnez $t9, .L7F0BECA4 -/* 0F376C 7F0BEC3C 00000000 */ nop -/* 0F3770 7F0BEC40 18400018 */ blez $v0, .L7F0BECA4 -/* 0F3774 7F0BEC44 3C0E8003 */ lui $t6, %hi(g_AppendCheatSinglePlayer) -/* 0F3778 7F0BEC48 8DCEA900 */ lw $t6, %lo(g_AppendCheatSinglePlayer)($t6) -/* 0F377C 7F0BEC4C 3C038007 */ lui $v1, %hi(g_CheatActivated + 1) -/* 0F3780 7F0BEC50 246396A1 */ addiu $v1, %lo(g_CheatActivated + 1) # addiu $v1, $v1, -0x695f -/* 0F3784 7F0BEC54 11C00013 */ beqz $t6, .L7F0BECA4 -/* 0F3788 7F0BEC58 24040001 */ li $a0, 1 -.L7F0BEC5C: -/* 0F378C 7F0BEC5C 906F0000 */ lbu $t7, ($v1) -/* 0F3790 7F0BEC60 51E0000D */ beql $t7, $zero, .L7F0BEC98 -/* 0F3794 7F0BEC64 24840001 */ addiu $a0, $a0, 1 -/* 0F3798 7F0BEC68 AFA3001C */ sw $v1, 0x1c($sp) -/* 0F379C 7F0BEC6C 0FC24697 */ jal cheatIsEnemyRockets -/* 0F37A0 7F0BEC70 AFA40194 */ sw $a0, 0x194($sp) -/* 0F37A4 7F0BEC74 8FA3001C */ lw $v1, 0x1c($sp) -/* 0F37A8 7F0BEC78 14400006 */ bnez $v0, .L7F0BEC94 -/* 0F37AC 7F0BEC7C 8FA40194 */ lw $a0, 0x194($sp) -/* 0F37B0 7F0BEC80 AFA3001C */ sw $v1, 0x1c($sp) -/* 0F37B4 7F0BEC84 0FC246AB */ jal cheatButtonTurnOnCheatForPlayers -/* 0F37B8 7F0BEC88 AFA40194 */ sw $a0, 0x194($sp) -/* 0F37BC 7F0BEC8C 8FA3001C */ lw $v1, 0x1c($sp) -/* 0F37C0 7F0BEC90 8FA40194 */ lw $a0, 0x194($sp) -.L7F0BEC94: -/* 0F37C4 7F0BEC94 24840001 */ addiu $a0, $a0, 1 -.L7F0BEC98: -/* 0F37C8 7F0BEC98 2401004B */ li $at, 75 -/* 0F37CC 7F0BEC9C 1481FFEF */ bne $a0, $at, .L7F0BEC5C -/* 0F37D0 7F0BECA0 24630001 */ addiu $v1, $v1, 1 -.L7F0BECA4: -/* 0F37D4 7F0BECA4 0FC26919 */ jal getPlayerCount -/* 0F37D8 7F0BECA8 00000000 */ nop -/* 0F37DC 7F0BECAC 28410002 */ slti $at, $v0, 2 -/* 0F37E0 7F0BECB0 1420014B */ bnez $at, .L7F0BF1E0 -/* 0F37E4 7F0BECB4 3C188005 */ lui $t8, %hi(g_CurrentStageToLoad) -/* 0F37E8 7F0BECB8 8F188364 */ lw $t8, %lo(g_CurrentStageToLoad)($t8) -/* 0F37EC 7F0BECBC 2401005A */ li $at, 90 -/* 0F37F0 7F0BECC0 13010147 */ beq $t8, $at, .L7F0BF1E0 -/* 0F37F4 7F0BECC4 00000000 */ nop -/* 0F37F8 7F0BECC8 0FC3030C */ jal get_mission_state -/* 0F37FC 7F0BECCC 00000000 */ nop -/* 0F3800 7F0BECD0 24010006 */ li $at, 6 -/* 0F3804 7F0BECD4 14410029 */ bne $v0, $at, .L7F0BED7C -/* 0F3808 7F0BECD8 00000000 */ nop -/* 0F380C 7F0BECDC AFA00190 */ sw $zero, 0x190($sp) -/* 0F3810 7F0BECE0 AFA0018C */ sw $zero, 0x18c($sp) -/* 0F3814 7F0BECE4 0FC26919 */ jal getPlayerCount -/* 0F3818 7F0BECE8 AFA00188 */ sw $zero, 0x188($sp) -/* 0F381C 7F0BECEC 8FA30190 */ lw $v1, 0x190($sp) -/* 0F3820 7F0BECF0 8FA5018C */ lw $a1, 0x18c($sp) -/* 0F3824 7F0BECF4 1840001B */ blez $v0, .L7F0BED64 -/* 0F3828 7F0BECF8 8FA60188 */ lw $a2, 0x188($sp) -/* 0F382C 7F0BECFC 3C0E8008 */ lui $t6, %hi(g_playerPointers) -/* 0F3830 7F0BED00 25CE9EE0 */ addiu $t6, %lo(g_playerPointers) # addiu $t6, $t6, -0x6120 -/* 0F3834 7F0BED04 0003C880 */ sll $t9, $v1, 2 -/* 0F3838 7F0BED08 032E2021 */ addu $a0, $t9, $t6 -.L7F0BED0C: -/* 0F383C 7F0BED0C 8C820000 */ lw $v0, ($a0) -/* 0F3840 7F0BED10 24630001 */ addiu $v1, $v1, 1 -/* 0F3844 7F0BED14 24840004 */ addiu $a0, $a0, 4 -/* 0F3848 7F0BED18 8C4F00D8 */ lw $t7, 0xd8($v0) -/* 0F384C 7F0BED1C 51E00007 */ beql $t7, $zero, .L7F0BED3C -/* 0F3850 7F0BED20 AFA30190 */ sw $v1, 0x190($sp) -/* 0F3854 7F0BED24 8C580424 */ lw $t8, 0x424($v0) -/* 0F3858 7F0BED28 24A50001 */ addiu $a1, $a1, 1 -/* 0F385C 7F0BED2C 53000003 */ beql $t8, $zero, .L7F0BED3C -/* 0F3860 7F0BED30 AFA30190 */ sw $v1, 0x190($sp) -/* 0F3864 7F0BED34 24C60001 */ addiu $a2, $a2, 1 -/* 0F3868 7F0BED38 AFA30190 */ sw $v1, 0x190($sp) -.L7F0BED3C: -/* 0F386C 7F0BED3C AFA4001C */ sw $a0, 0x1c($sp) -/* 0F3870 7F0BED40 AFA5018C */ sw $a1, 0x18c($sp) -/* 0F3874 7F0BED44 0FC26919 */ jal getPlayerCount -/* 0F3878 7F0BED48 AFA60188 */ sw $a2, 0x188($sp) -/* 0F387C 7F0BED4C 8FA30190 */ lw $v1, 0x190($sp) -/* 0F3880 7F0BED50 8FA4001C */ lw $a0, 0x1c($sp) -/* 0F3884 7F0BED54 8FA5018C */ lw $a1, 0x18c($sp) -/* 0F3888 7F0BED58 0062082A */ slt $at, $v1, $v0 -/* 0F388C 7F0BED5C 1420FFEB */ bnez $at, .L7F0BED0C -/* 0F3890 7F0BED60 8FA60188 */ lw $a2, 0x188($sp) -.L7F0BED64: -/* 0F3894 7F0BED64 18A00005 */ blez $a1, .L7F0BED7C -/* 0F3898 7F0BED68 00000000 */ nop -/* 0F389C 7F0BED6C 14A60003 */ bne $a1, $a2, .L7F0BED7C -/* 0F38A0 7F0BED70 00000000 */ nop -/* 0F38A4 7F0BED74 0FC3030F */ jal set_missionstate -/* 0F38A8 7F0BED78 24040001 */ li $a0, 1 -.L7F0BED7C: -/* 0F38AC 7F0BED7C 3C038005 */ lui $v1, %hi(g_MpTime) -/* 0F38B0 7F0BED80 8C638398 */ lw $v1, %lo(g_MpTime)($v1) -/* 0F38B4 7F0BED84 3C028005 */ lui $v0, %hi(D_80048394) -/* 0F38B8 7F0BED88 3C198005 */ lui $t9, %hi(g_ClockTimer) -/* 0F38BC 7F0BED8C 18600049 */ blez $v1, .L7F0BEEB4 -/* 0F38C0 7F0BED90 00000000 */ nop -/* 0F38C4 7F0BED94 8C428394 */ lw $v0, %lo(D_80048394)($v0) -/* 0F38C8 7F0BED98 8F398374 */ lw $t9, %lo(g_ClockTimer)($t9) -/* 0F38CC 7F0BED9C 2464F1F0 */ addiu $a0, $v1, -0xe10 -/* 0F38D0 7F0BEDA0 0044082A */ slt $at, $v0, $a0 -/* 0F38D4 7F0BEDA4 03227021 */ addu $t6, $t9, $v0 -/* 0F38D8 7F0BEDA8 AFAE0180 */ sw $t6, 0x180($sp) -/* 0F38DC 7F0BEDAC 10200015 */ beqz $at, .L7F0BEE04 -/* 0F38E0 7F0BEDB0 AFA20184 */ sw $v0, 0x184($sp) -/* 0F38E4 7F0BEDB4 01C4082A */ slt $at, $t6, $a0 -/* 0F38E8 7F0BEDB8 14200012 */ bnez $at, .L7F0BEE04 -/* 0F38EC 7F0BEDBC 00000000 */ nop -/* 0F38F0 7F0BEDC0 0FC26919 */ jal getPlayerCount -/* 0F38F4 7F0BEDC4 AFA0017C */ sw $zero, 0x17c($sp) -/* 0F38F8 7F0BEDC8 1840000E */ blez $v0, .L7F0BEE04 -/* 0F38FC 7F0BEDCC 00000000 */ nop -.L7F0BEDD0: -/* 0F3900 7F0BEDD0 0FC26C43 */ jal set_cur_player -/* 0F3904 7F0BEDD4 8FA4017C */ lw $a0, 0x17c($sp) -/* 0F3908 7F0BEDD8 3C048006 */ lui $a0, %hi(aOneMinuteLeft) -/* 0F390C 7F0BEDDC 0FC228F2 */ jal hudmsgBottomShow -/* 0F3910 7F0BEDE0 2484B704 */ addiu $a0, %lo(aOneMinuteLeft) # addiu $a0, $a0, -0x48fc -/* 0F3914 7F0BEDE4 8FAF017C */ lw $t7, 0x17c($sp) -/* 0F3918 7F0BEDE8 25F80001 */ addiu $t8, $t7, 1 -/* 0F391C 7F0BEDEC 0FC26919 */ jal getPlayerCount -/* 0F3920 7F0BEDF0 AFB8017C */ sw $t8, 0x17c($sp) -/* 0F3924 7F0BEDF4 8FB9017C */ lw $t9, 0x17c($sp) -/* 0F3928 7F0BEDF8 0322082A */ slt $at, $t9, $v0 -/* 0F392C 7F0BEDFC 1420FFF4 */ bnez $at, .L7F0BEDD0 -/* 0F3930 7F0BEE00 00000000 */ nop -.L7F0BEE04: -/* 0F3934 7F0BEE04 3C0F8005 */ lui $t7, %hi(g_MpTime) -/* 0F3938 7F0BEE08 8DEF8398 */ lw $t7, %lo(g_MpTime)($t7) -/* 0F393C 7F0BEE0C 8FAE0180 */ lw $t6, 0x180($sp) -/* 0F3940 7F0BEE10 3C198005 */ lui $t9, %hi(g_MpSoundStateRelated) -/* 0F3944 7F0BEE14 25F8FDA8 */ addiu $t8, $t7, -0x258 -/* 0F3948 7F0BEE18 01D8082A */ slt $at, $t6, $t8 -/* 0F394C 7F0BEE1C 1420000D */ bnez $at, .L7F0BEE54 -/* 0F3950 7F0BEE20 00000000 */ nop -/* 0F3954 7F0BEE24 8F3983A0 */ lw $t9, %lo(g_MpSoundStateRelated)($t9) -/* 0F3958 7F0BEE28 1720000A */ bnez $t9, .L7F0BEE54 -/* 0F395C 7F0BEE2C 00000000 */ nop -/* 0F3960 7F0BEE30 0FC2FF01 */ jal lvlGetControlsLockedFlag -/* 0F3964 7F0BEE34 00000000 */ nop -/* 0F3968 7F0BEE38 14400006 */ bnez $v0, .L7F0BEE54 -/* 0F396C 7F0BEE3C 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 0F3970 7F0BEE40 3C068005 */ lui $a2, %hi(g_MpSoundStateRelated) -/* 0F3974 7F0BEE44 24C683A0 */ addiu $a2, %lo(g_MpSoundStateRelated) # addiu $a2, $a2, -0x7c60 -/* 0F3978 7F0BEE48 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F397C 7F0BEE4C 0C002382 */ jal sndPlaySfx -/* 0F3980 7F0BEE50 240500A1 */ li $a1, 161 -.L7F0BEE54: -/* 0F3984 7F0BEE54 0FC2FF01 */ jal lvlGetControlsLockedFlag -/* 0F3988 7F0BEE58 00000000 */ nop -/* 0F398C 7F0BEE5C 1040000A */ beqz $v0, .L7F0BEE88 -/* 0F3990 7F0BEE60 3C048005 */ lui $a0, %hi(g_MpSoundStateRelated) -/* 0F3994 7F0BEE64 8C8483A0 */ lw $a0, %lo(g_MpSoundStateRelated)($a0) -/* 0F3998 7F0BEE68 10800007 */ beqz $a0, .L7F0BEE88 -/* 0F399C 7F0BEE6C 00000000 */ nop -/* 0F39A0 7F0BEE70 0C00237C */ jal sndGetPlayingState -/* 0F39A4 7F0BEE74 00000000 */ nop -/* 0F39A8 7F0BEE78 10400003 */ beqz $v0, .L7F0BEE88 -/* 0F39AC 7F0BEE7C 3C048005 */ lui $a0, %hi(g_MpSoundStateRelated) -/* 0F39B0 7F0BEE80 0C002408 */ jal sndDeactivate -/* 0F39B4 7F0BEE84 8C8483A0 */ lw $a0, %lo(g_MpSoundStateRelated)($a0) -.L7F0BEE88: -/* 0F39B8 7F0BEE88 3C038005 */ lui $v1, %hi(g_MpTime) -/* 0F39BC 7F0BEE8C 8C638398 */ lw $v1, %lo(g_MpTime)($v1) -/* 0F39C0 7F0BEE90 8FAF0184 */ lw $t7, 0x184($sp) -/* 0F39C4 7F0BEE94 8FAE0180 */ lw $t6, 0x180($sp) -/* 0F39C8 7F0BEE98 01E3082A */ slt $at, $t7, $v1 -/* 0F39CC 7F0BEE9C 10200005 */ beqz $at, .L7F0BEEB4 -/* 0F39D0 7F0BEEA0 01C3082A */ slt $at, $t6, $v1 -/* 0F39D4 7F0BEEA4 14200003 */ bnez $at, .L7F0BEEB4 -/* 0F39D8 7F0BEEA8 00000000 */ nop -/* 0F39DC 7F0BEEAC 0FC3094C */ jal mpCalculateAwards -/* 0F39E0 7F0BEEB0 00002025 */ move $a0, $zero -.L7F0BEEB4: -/* 0F39E4 7F0BEEB4 3C188005 */ lui $t8, %hi(g_MpPoint) -/* 0F39E8 7F0BEEB8 8F18839C */ lw $t8, %lo(g_MpPoint)($t8) -/* 0F39EC 7F0BEEBC 3C198005 */ lui $t9, %hi(g_ClockTimer) -/* 0F39F0 7F0BEEC0 1B00003D */ blez $t8, .L7F0BEFB8 -/* 0F39F4 7F0BEEC4 00000000 */ nop -/* 0F39F8 7F0BEEC8 8F398374 */ lw $t9, %lo(g_ClockTimer)($t9) -/* 0F39FC 7F0BEECC 1320003A */ beqz $t9, .L7F0BEFB8 -/* 0F3A00 7F0BEED0 00000000 */ nop -/* 0F3A04 7F0BEED4 0FC26919 */ jal getPlayerCount -/* 0F3A08 7F0BEED8 00000000 */ nop -/* 0F3A0C 7F0BEEDC 00403825 */ move $a3, $v0 -/* 0F3A10 7F0BEEE0 00002825 */ move $a1, $zero -/* 0F3A14 7F0BEEE4 00003025 */ move $a2, $zero -/* 0F3A18 7F0BEEE8 18400029 */ blez $v0, .L7F0BEF90 -/* 0F3A1C 7F0BEEEC 00002025 */ move $a0, $zero -/* 0F3A20 7F0BEEF0 3C038008 */ lui $v1, %hi(g_playerPointers) -/* 0F3A24 7F0BEEF4 44800000 */ mtc1 $zero, $f0 -/* 0F3A28 7F0BEEF8 24639EE0 */ addiu $v1, %lo(g_playerPointers) # addiu $v1, $v1, -0x6120 -.L7F0BEEFC: -/* 0F3A2C 7F0BEEFC 8C620000 */ lw $v0, ($v1) -/* 0F3A30 7F0BEF00 8C4F00D8 */ lw $t7, 0xd8($v0) -/* 0F3A34 7F0BEF04 51E0000E */ beql $t7, $zero, .L7F0BEF40 -/* 0F3A38 7F0BEF08 AFA3001C */ sw $v1, 0x1c($sp) -/* 0F3A3C 7F0BEF0C 8C4E0424 */ lw $t6, 0x424($v0) -/* 0F3A40 7F0BEF10 51C0000A */ beql $t6, $zero, .L7F0BEF3C -/* 0F3A44 7F0BEF14 24A50001 */ addiu $a1, $a1, 1 -/* 0F3A48 7F0BEF18 8C580428 */ lw $t8, 0x428($v0) -/* 0F3A4C 7F0BEF1C 53000007 */ beql $t8, $zero, .L7F0BEF3C -/* 0F3A50 7F0BEF20 24A50001 */ addiu $a1, $a1, 1 -/* 0F3A54 7F0BEF24 C44803E4 */ lwc1 $f8, 0x3e4($v0) -/* 0F3A58 7F0BEF28 4608003E */ c.le.s $f0, $f8 -/* 0F3A5C 7F0BEF2C 00000000 */ nop -/* 0F3A60 7F0BEF30 45020003 */ bc1fl .L7F0BEF40 -/* 0F3A64 7F0BEF34 AFA3001C */ sw $v1, 0x1c($sp) -/* 0F3A68 7F0BEF38 24A50001 */ addiu $a1, $a1, 1 -.L7F0BEF3C: -/* 0F3A6C 7F0BEF3C AFA3001C */ sw $v1, 0x1c($sp) -.L7F0BEF40: -/* 0F3A70 7F0BEF40 AFA40174 */ sw $a0, 0x174($sp) -/* 0F3A74 7F0BEF44 AFA50170 */ sw $a1, 0x170($sp) -/* 0F3A78 7F0BEF48 AFA6016C */ sw $a2, 0x16c($sp) -/* 0F3A7C 7F0BEF4C 0FC30E36 */ jal get_points_for_mp_player -/* 0F3A80 7F0BEF50 AFA70178 */ sw $a3, 0x178($sp) -/* 0F3A84 7F0BEF54 3C198005 */ lui $t9, %hi(g_MpPoint) -/* 0F3A88 7F0BEF58 8F39839C */ lw $t9, %lo(g_MpPoint)($t9) -/* 0F3A8C 7F0BEF5C 44800000 */ mtc1 $zero, $f0 -/* 0F3A90 7F0BEF60 8FA3001C */ lw $v1, 0x1c($sp) -/* 0F3A94 7F0BEF64 0059082A */ slt $at, $v0, $t9 -/* 0F3A98 7F0BEF68 8FA40174 */ lw $a0, 0x174($sp) -/* 0F3A9C 7F0BEF6C 8FA50170 */ lw $a1, 0x170($sp) -/* 0F3AA0 7F0BEF70 8FA6016C */ lw $a2, 0x16c($sp) -/* 0F3AA4 7F0BEF74 14200002 */ bnez $at, .L7F0BEF80 -/* 0F3AA8 7F0BEF78 8FA70178 */ lw $a3, 0x178($sp) -/* 0F3AAC 7F0BEF7C 24C60001 */ addiu $a2, $a2, 1 -.L7F0BEF80: -/* 0F3AB0 7F0BEF80 24840001 */ addiu $a0, $a0, 1 -/* 0F3AB4 7F0BEF84 0087082A */ slt $at, $a0, $a3 -/* 0F3AB8 7F0BEF88 1420FFDC */ bnez $at, .L7F0BEEFC -/* 0F3ABC 7F0BEF8C 24630004 */ addiu $v1, $v1, 4 -.L7F0BEF90: -/* 0F3AC0 7F0BEF90 18C00009 */ blez $a2, .L7F0BEFB8 -/* 0F3AC4 7F0BEF94 00000000 */ nop -/* 0F3AC8 7F0BEF98 14A00005 */ bnez $a1, .L7F0BEFB0 -/* 0F3ACC 7F0BEF9C 00000000 */ nop -/* 0F3AD0 7F0BEFA0 0FC3094C */ jal mpCalculateAwards -/* 0F3AD4 7F0BEFA4 00002025 */ move $a0, $zero -/* 0F3AD8 7F0BEFA8 10000003 */ b .L7F0BEFB8 -/* 0F3ADC 7F0BEFAC 00000000 */ nop -.L7F0BEFB0: -/* 0F3AE0 7F0BEFB0 0FC30948 */ jal mpwatchSetStopPlayFlag -/* 0F3AE4 7F0BEFB4 00000000 */ nop -.L7F0BEFB8: -/* 0F3AE8 7F0BEFB8 0FC051D6 */ jal get_scenario -/* 0F3AEC 7F0BEFBC 00000000 */ nop -/* 0F3AF0 7F0BEFC0 24010001 */ li $at, 1 -/* 0F3AF4 7F0BEFC4 14410086 */ bne $v0, $at, .L7F0BF1E0 -/* 0F3AF8 7F0BEFC8 3C0F8005 */ lui $t7, %hi(g_ClockTimer) -/* 0F3AFC 7F0BEFCC 8DEF8374 */ lw $t7, %lo(g_ClockTimer)($t7) -/* 0F3B00 7F0BEFD0 11E00083 */ beqz $t7, .L7F0BF1E0 -/* 0F3B04 7F0BEFD4 00000000 */ nop -/* 0F3B08 7F0BEFD8 0FC26919 */ jal getPlayerCount -/* 0F3B0C 7F0BEFDC 00000000 */ nop -/* 0F3B10 7F0BEFE0 44800000 */ mtc1 $zero, $f0 -/* 0F3B14 7F0BEFE4 00405025 */ move $t2, $v0 -/* 0F3B18 7F0BEFE8 00006825 */ move $t5, $zero -/* 0F3B1C 7F0BEFEC 0000F825 */ move $ra, $zero -/* 0F3B20 7F0BEFF0 1840006E */ blez $v0, .L7F0BF1AC -/* 0F3B24 7F0BEFF4 00006025 */ move $t4, $zero -/* 0F3B28 7F0BEFF8 00002825 */ move $a1, $zero -.L7F0BEFFC: -/* 0F3B2C 7F0BEFFC 00003025 */ move $a2, $zero -/* 0F3B30 7F0BF000 18400048 */ blez $v0, .L7F0BF124 -/* 0F3B34 7F0BF004 00003825 */ move $a3, $zero -/* 0F3B38 7F0BF008 30490003 */ andi $t1, $v0, 3 -/* 0F3B3C 7F0BF00C 11200019 */ beqz $t1, .L7F0BF074 -/* 0F3B40 7F0BF010 000C5880 */ sll $t3, $t4, 2 -/* 0F3B44 7F0BF014 3C188008 */ lui $t8, %hi(g_playerPointers) -/* 0F3B48 7F0BF018 27189EE0 */ addiu $t8, %lo(g_playerPointers) # addiu $t8, $t8, -0x6120 -/* 0F3B4C 7F0BF01C 00007080 */ sll $t6, $zero, 2 -/* 0F3B50 7F0BF020 0000C8C0 */ sll $t9, $zero, 3 -/* 0F3B54 7F0BF024 0320C823 */ subu $t9, $t9, $zero -/* 0F3B58 7F0BF028 01D81821 */ addu $v1, $t6, $t8 -/* 0F3B5C 7F0BF02C 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) -/* 0F3B60 7F0BF030 0019C900 */ sll $t9, $t9, 4 -/* 0F3B64 7F0BF034 032B7821 */ addu $t7, $t9, $t3 -/* 0F3B68 7F0BF038 25CE9EF0 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x6110 -/* 0F3B6C 7F0BF03C 01EE2021 */ addu $a0, $t7, $t6 -/* 0F3B70 7F0BF040 01204025 */ move $t0, $t1 -.L7F0BF044: -/* 0F3B74 7F0BF044 8C780000 */ lw $t8, ($v1) -/* 0F3B78 7F0BF048 24E70001 */ addiu $a3, $a3, 1 -/* 0F3B7C 7F0BF04C 24630004 */ addiu $v1, $v1, 4 -/* 0F3B80 7F0BF050 8F1900D8 */ lw $t9, 0xd8($t8) -/* 0F3B84 7F0BF054 57200003 */ bnezl $t9, .L7F0BF064 -/* 0F3B88 7F0BF058 8C8F0024 */ lw $t7, 0x24($a0) -/* 0F3B8C 7F0BF05C 24C60001 */ addiu $a2, $a2, 1 -/* 0F3B90 7F0BF060 8C8F0024 */ lw $t7, 0x24($a0) -.L7F0BF064: -/* 0F3B94 7F0BF064 24840070 */ addiu $a0, $a0, 0x70 -/* 0F3B98 7F0BF068 1507FFF6 */ bne $t0, $a3, .L7F0BF044 -/* 0F3B9C 7F0BF06C 00AF2821 */ addu $a1, $a1, $t7 -/* 0F3BA0 7F0BF070 10E2002C */ beq $a3, $v0, .L7F0BF124 -.L7F0BF074: -/* 0F3BA4 7F0BF074 3C188008 */ lui $t8, %hi(g_playerPointers) -/* 0F3BA8 7F0BF078 0007C8C0 */ sll $t9, $a3, 3 -/* 0F3BAC 7F0BF07C 0327C823 */ subu $t9, $t9, $a3 -/* 0F3BB0 7F0BF080 27189EE0 */ addiu $t8, %lo(g_playerPointers) # addiu $t8, $t8, -0x6120 -/* 0F3BB4 7F0BF084 00077080 */ sll $t6, $a3, 2 -/* 0F3BB8 7F0BF088 01D81821 */ addu $v1, $t6, $t8 -/* 0F3BBC 7F0BF08C 0019C900 */ sll $t9, $t9, 4 -/* 0F3BC0 7F0BF090 032B7821 */ addu $t7, $t9, $t3 -/* 0F3BC4 7F0BF094 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) -/* 0F3BC8 7F0BF098 25CE9EF0 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x6110 -/* 0F3BCC 7F0BF09C 000AC880 */ sll $t9, $t2, 2 -/* 0F3BD0 7F0BF0A0 03384021 */ addu $t0, $t9, $t8 -/* 0F3BD4 7F0BF0A4 01EE2021 */ addu $a0, $t7, $t6 -.L7F0BF0A8: -/* 0F3BD8 7F0BF0A8 8C6F0000 */ lw $t7, ($v1) -/* 0F3BDC 7F0BF0AC 8DEE00D8 */ lw $t6, 0xd8($t7) -/* 0F3BE0 7F0BF0B0 55C00003 */ bnezl $t6, .L7F0BF0C0 -/* 0F3BE4 7F0BF0B4 8C780004 */ lw $t8, 4($v1) -/* 0F3BE8 7F0BF0B8 24C60001 */ addiu $a2, $a2, 1 -/* 0F3BEC 7F0BF0BC 8C780004 */ lw $t8, 4($v1) -.L7F0BF0C0: -/* 0F3BF0 7F0BF0C0 8C990024 */ lw $t9, 0x24($a0) -/* 0F3BF4 7F0BF0C4 8F0F00D8 */ lw $t7, 0xd8($t8) -/* 0F3BF8 7F0BF0C8 00B92821 */ addu $a1, $a1, $t9 -/* 0F3BFC 7F0BF0CC 55E00003 */ bnezl $t7, .L7F0BF0DC -/* 0F3C00 7F0BF0D0 8C790008 */ lw $t9, 8($v1) -/* 0F3C04 7F0BF0D4 24C60001 */ addiu $a2, $a2, 1 -/* 0F3C08 7F0BF0D8 8C790008 */ lw $t9, 8($v1) -.L7F0BF0DC: -/* 0F3C0C 7F0BF0DC 8C8E0094 */ lw $t6, 0x94($a0) -/* 0F3C10 7F0BF0E0 8F3800D8 */ lw $t8, 0xd8($t9) -/* 0F3C14 7F0BF0E4 00AE2821 */ addu $a1, $a1, $t6 -/* 0F3C18 7F0BF0E8 57000003 */ bnezl $t8, .L7F0BF0F8 -/* 0F3C1C 7F0BF0EC 8C6E000C */ lw $t6, 0xc($v1) -/* 0F3C20 7F0BF0F0 24C60001 */ addiu $a2, $a2, 1 -/* 0F3C24 7F0BF0F4 8C6E000C */ lw $t6, 0xc($v1) -.L7F0BF0F8: -/* 0F3C28 7F0BF0F8 8C8F0104 */ lw $t7, 0x104($a0) -/* 0F3C2C 7F0BF0FC 24630010 */ addiu $v1, $v1, 0x10 -/* 0F3C30 7F0BF100 8DD900D8 */ lw $t9, 0xd8($t6) -/* 0F3C34 7F0BF104 00AF2821 */ addu $a1, $a1, $t7 -/* 0F3C38 7F0BF108 57200003 */ bnezl $t9, .L7F0BF118 -/* 0F3C3C 7F0BF10C 8C980174 */ lw $t8, 0x174($a0) -/* 0F3C40 7F0BF110 24C60001 */ addiu $a2, $a2, 1 -/* 0F3C44 7F0BF114 8C980174 */ lw $t8, 0x174($a0) -.L7F0BF118: -/* 0F3C48 7F0BF118 248401C0 */ addiu $a0, $a0, 0x1c0 -/* 0F3C4C 7F0BF11C 1468FFE2 */ bne $v1, $t0, .L7F0BF0A8 -/* 0F3C50 7F0BF120 00B82821 */ addu $a1, $a1, $t8 -.L7F0BF124: -/* 0F3C54 7F0BF124 28A10002 */ slti $at, $a1, 2 -/* 0F3C58 7F0BF128 1420001C */ bnez $at, .L7F0BF19C -/* 0F3C5C 7F0BF12C 000C78C0 */ sll $t7, $t4, 3 -/* 0F3C60 7F0BF130 01EC7823 */ subu $t7, $t7, $t4 -/* 0F3C64 7F0BF134 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) -/* 0F3C68 7F0BF138 25CE9EF0 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x6110 -/* 0F3C6C 7F0BF13C 000F7900 */ sll $t7, $t7, 4 -/* 0F3C70 7F0BF140 01EE1821 */ addu $v1, $t7, $t6 -/* 0F3C74 7F0BF144 906F0068 */ lbu $t7, 0x68($v1) -/* 0F3C78 7F0BF148 3C188008 */ lui $t8, %hi(g_playerPointers) -/* 0F3C7C 7F0BF14C 27189EE0 */ addiu $t8, %lo(g_playerPointers) # addiu $t8, $t8, -0x6120 -/* 0F3C80 7F0BF150 000CC880 */ sll $t9, $t4, 2 -/* 0F3C84 7F0BF154 15E00003 */ bnez $t7, .L7F0BF164 -/* 0F3C88 7F0BF158 03382021 */ addu $a0, $t9, $t8 -/* 0F3C8C 7F0BF15C 24CE0001 */ addiu $t6, $a2, 1 -/* 0F3C90 7F0BF160 A06E0068 */ sb $t6, 0x68($v1) -.L7F0BF164: -/* 0F3C94 7F0BF164 8C830000 */ lw $v1, ($a0) -/* 0F3C98 7F0BF168 25AD0001 */ addiu $t5, $t5, 1 -/* 0F3C9C 7F0BF16C 8C790424 */ lw $t9, 0x424($v1) -/* 0F3CA0 7F0BF170 5320000B */ beql $t9, $zero, .L7F0BF1A0 -/* 0F3CA4 7F0BF174 258C0001 */ addiu $t4, $t4, 1 -/* 0F3CA8 7F0BF178 8C780428 */ lw $t8, 0x428($v1) -/* 0F3CAC 7F0BF17C 53000008 */ beql $t8, $zero, .L7F0BF1A0 -/* 0F3CB0 7F0BF180 258C0001 */ addiu $t4, $t4, 1 -/* 0F3CB4 7F0BF184 C46A03E4 */ lwc1 $f10, 0x3e4($v1) -/* 0F3CB8 7F0BF188 4600503C */ c.lt.s $f10, $f0 -/* 0F3CBC 7F0BF18C 00000000 */ nop -/* 0F3CC0 7F0BF190 45020003 */ bc1fl .L7F0BF1A0 -/* 0F3CC4 7F0BF194 258C0001 */ addiu $t4, $t4, 1 -/* 0F3CC8 7F0BF198 27FF0001 */ addiu $ra, $ra, 1 -.L7F0BF19C: -/* 0F3CCC 7F0BF19C 258C0001 */ addiu $t4, $t4, 1 -.L7F0BF1A0: -/* 0F3CD0 7F0BF1A0 018A082A */ slt $at, $t4, $t2 -/* 0F3CD4 7F0BF1A4 5420FF95 */ bnezl $at, .L7F0BEFFC -/* 0F3CD8 7F0BF1A8 00002825 */ move $a1, $zero -.L7F0BF1AC: -/* 0F3CDC 7F0BF1AC 2443FFFF */ addiu $v1, $v0, -1 -/* 0F3CE0 7F0BF1B0 03E3082A */ slt $at, $ra, $v1 -/* 0F3CE4 7F0BF1B4 54200006 */ bnezl $at, .L7F0BF1D0 -/* 0F3CE8 7F0BF1B8 01A3082A */ slt $at, $t5, $v1 -/* 0F3CEC 7F0BF1BC 0FC3094C */ jal mpCalculateAwards -/* 0F3CF0 7F0BF1C0 00002025 */ move $a0, $zero -/* 0F3CF4 7F0BF1C4 10000006 */ b .L7F0BF1E0 -/* 0F3CF8 7F0BF1C8 00000000 */ nop -/* 0F3CFC 7F0BF1CC 01A3082A */ slt $at, $t5, $v1 -.L7F0BF1D0: -/* 0F3D00 7F0BF1D0 14200003 */ bnez $at, .L7F0BF1E0 -/* 0F3D04 7F0BF1D4 00000000 */ nop -/* 0F3D08 7F0BF1D8 0FC30948 */ jal mpwatchSetStopPlayFlag -/* 0F3D0C 7F0BF1DC 00000000 */ nop -.L7F0BF1E0: -/* 0F3D10 7F0BF1E0 3C028005 */ lui $v0, %hi(g_ClockTimer) -/* 0F3D14 7F0BF1E4 3C0F8005 */ lui $t7, %hi(D_80048394) -/* 0F3D18 7F0BF1E8 8DEF8394 */ lw $t7, %lo(D_80048394)($t7) -/* 0F3D1C 7F0BF1EC 8C428374 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0F3D20 7F0BF1F0 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0F3D24 7F0BF1F4 44810000 */ mtc1 $at, $f0 -/* 0F3D28 7F0BF1F8 01E27021 */ addu $t6, $t7, $v0 -/* 0F3D2C 7F0BF1FC 448E8000 */ mtc1 $t6, $f16 -/* 0F3D30 7F0BF200 3C018005 */ lui $at, %hi(D_80048394) -/* 0F3D34 7F0BF204 AC2E8394 */ sw $t6, %lo(D_80048394)($at) -/* 0F3D38 7F0BF208 468084A0 */ cvt.s.w $f18, $f16 -/* 0F3D3C 7F0BF20C 3C038005 */ lui $v1, %hi(D_800483A8) -/* 0F3D40 7F0BF210 3C018005 */ lui $at, %hi(g_CurrentMultiPlayerSec) -/* 0F3D44 7F0BF214 246383A8 */ addiu $v1, %lo(D_800483A8) # addiu $v1, $v1, -0x7c58 -/* 0F3D48 7F0BF218 00002025 */ move $a0, $zero -/* 0F3D4C 7F0BF21C 3405FFFF */ li $a1, 65535 -/* 0F3D50 7F0BF220 46009103 */ div.s $f4, $f18, $f0 -/* 0F3D54 7F0BF224 E42483A4 */ swc1 $f4, %lo(g_CurrentMultiPlayerSec)($at) -/* 0F3D58 7F0BF228 8C790000 */ lw $t9, ($v1) -/* 0F3D5C 7F0BF22C 3C018005 */ lui $at, %hi(g_CurrentMultiPlayerMin) -/* 0F3D60 7F0BF230 03227821 */ addu $t7, $t9, $v0 -/* 0F3D64 7F0BF234 448F3000 */ mtc1 $t7, $f6 -/* 0F3D68 7F0BF238 AC6F0000 */ sw $t7, ($v1) -/* 0F3D6C 7F0BF23C 46803220 */ cvt.s.w $f8, $f6 -/* 0F3D70 7F0BF240 46004283 */ div.s $f10, $f8, $f0 -/* 0F3D74 7F0BF244 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F3D78 7F0BF248 E42A83AC */ swc1 $f10, %lo(g_CurrentMultiPlayerMin)($at) -/* 0F3D7C 7F0BF24C 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0F3D80 7F0BF250 44810000 */ mtc1 $at, $f0 -/* 0F3D84 7F0BF254 10400009 */ beqz $v0, .L7F0BF27C -/* 0F3D88 7F0BF258 3C038005 */ lui $v1, %hi(D_80048390) -/* 0F3D8C 7F0BF25C 3C038005 */ lui $v1, %hi(D_80048390) -/* 0F3D90 7F0BF260 3C018005 */ lui $at, %hi(D_80048388) -/* 0F3D94 7F0BF264 24638390 */ addiu $v1, %lo(D_80048390) # addiu $v1, $v1, -0x7c70 -/* 0F3D98 7F0BF268 AC208388 */ sw $zero, %lo(D_80048388)($at) -/* 0F3D9C 7F0BF26C AC600000 */ sw $zero, ($v1) -/* 0F3DA0 7F0BF270 3C028005 */ lui $v0, %hi(g_ClockTimer) -/* 0F3DA4 7F0BF274 1000000C */ b .L7F0BF2A8 -/* 0F3DA8 7F0BF278 8C428374 */ lw $v0, %lo(g_ClockTimer)($v0) -.L7F0BF27C: -/* 0F3DAC 7F0BF27C 24638390 */ addiu $v1, $v1, %lo(D_80048390) -/* 0F3DB0 7F0BF280 3C028005 */ lui $v0, %hi(g_ClockTimer) -/* 0F3DB4 7F0BF284 8C428374 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0F3DB8 7F0BF288 8C6E0000 */ lw $t6, ($v1) -/* 0F3DBC 7F0BF28C 240F0001 */ li $t7, 1 -/* 0F3DC0 7F0BF290 01C2C821 */ addu $t9, $t6, $v0 -/* 0F3DC4 7F0BF294 2B210708 */ slti $at, $t9, 0x708 -/* 0F3DC8 7F0BF298 14200003 */ bnez $at, .L7F0BF2A8 -/* 0F3DCC 7F0BF29C AC790000 */ sw $t9, ($v1) -/* 0F3DD0 7F0BF2A0 3C018005 */ lui $at, %hi(D_80048388) -/* 0F3DD4 7F0BF2A4 AC2F8388 */ sw $t7, %lo(D_80048388)($at) -.L7F0BF2A8: -/* 0F3DD8 7F0BF2A8 3C0E8005 */ lui $t6, %hi(D_80048388) -/* 0F3DDC 7F0BF2AC 8DCE8388 */ lw $t6, %lo(D_80048388)($t6) -/* 0F3DE0 7F0BF2B0 3C038005 */ lui $v1, %hi(D_8004838C) -/* 0F3DE4 7F0BF2B4 2463838C */ addiu $v1, %lo(D_8004838C) # addiu $v1, $v1, -0x7c74 -/* 0F3DE8 7F0BF2B8 11C00005 */ beqz $t6, .L7F0BF2D0 -/* 0F3DEC 7F0BF2BC 00000000 */ nop -/* 0F3DF0 7F0BF2C0 8C790000 */ lw $t9, ($v1) -/* 0F3DF4 7F0BF2C4 0322C021 */ addu $t8, $t9, $v0 -/* 0F3DF8 7F0BF2C8 10000015 */ b .L7F0BF320 -/* 0F3DFC 7F0BF2CC AC780000 */ sw $t8, ($v1) -.L7F0BF2D0: -/* 0F3E00 7F0BF2D0 3C038005 */ lui $v1, %hi(D_800483B0) -/* 0F3E04 7F0BF2D4 246383B0 */ addiu $v1, %lo(D_800483B0) # addiu $v1, $v1, -0x7c50 -/* 0F3E08 7F0BF2D8 8C6F0000 */ lw $t7, ($v1) -/* 0F3E0C 7F0BF2DC 3C048005 */ lui $a0, %hi(D_800483B8) -/* 0F3E10 7F0BF2E0 3C018005 */ lui $at, %hi(g_StageTimeSec) -/* 0F3E14 7F0BF2E4 01E2C821 */ addu $t9, $t7, $v0 -/* 0F3E18 7F0BF2E8 44998000 */ mtc1 $t9, $f16 -/* 0F3E1C 7F0BF2EC AC790000 */ sw $t9, ($v1) -/* 0F3E20 7F0BF2F0 248483B8 */ addiu $a0, %lo(D_800483B8) # addiu $a0, $a0, -0x7c48 -/* 0F3E24 7F0BF2F4 468084A0 */ cvt.s.w $f18, $f16 -/* 0F3E28 7F0BF2F8 46009103 */ div.s $f4, $f18, $f0 -/* 0F3E2C 7F0BF2FC E42483B4 */ swc1 $f4, %lo(g_StageTimeSec)($at) -/* 0F3E30 7F0BF300 8C980000 */ lw $t8, ($a0) -/* 0F3E34 7F0BF304 3C018005 */ lui $at, %hi(g_PowerOnTimeSec) -/* 0F3E38 7F0BF308 03027021 */ addu $t6, $t8, $v0 -/* 0F3E3C 7F0BF30C 448E3000 */ mtc1 $t6, $f6 -/* 0F3E40 7F0BF310 AC8E0000 */ sw $t6, ($a0) -/* 0F3E44 7F0BF314 46803220 */ cvt.s.w $f8, $f6 -/* 0F3E48 7F0BF318 46004283 */ div.s $f10, $f8, $f0 -/* 0F3E4C 7F0BF31C E42A83BC */ swc1 $f10, %lo(g_PowerOnTimeSec)($at) -.L7F0BF320: -/* 0F3E50 7F0BF320 0C00114D */ jal viSetUseZBuf -/* 0F3E54 7F0BF324 24040001 */ li $a0, 1 -/* 0F3E58 7F0BF328 3C198005 */ lui $t9, %hi(g_CurrentStageToLoad) -/* 0F3E5C 7F0BF32C 8F398364 */ lw $t9, %lo(g_CurrentStageToLoad)($t9) -/* 0F3E60 7F0BF330 2401005A */ li $at, 90 -/* 0F3E64 7F0BF334 17210009 */ bne $t9, $at, .L7F0BF35C -/* 0F3E68 7F0BF338 00000000 */ nop -/* 0F3E6C 7F0BF33C 0FC2464F */ jal cheat_buttons_mp_related -/* 0F3E70 7F0BF340 00000000 */ nop -/* 0F3E74 7F0BF344 0FC06987 */ jal menu_init -/* 0F3E78 7F0BF348 00000000 */ nop -/* 0F3E7C 7F0BF34C 0FC30650 */ jal langTick -/* 0F3E80 7F0BF350 00000000 */ nop -/* 0F3E84 7F0BF354 100000A9 */ b .L7F0BF5FC -/* 0F3E88 7F0BF358 00000000 */ nop -.L7F0BF35C: -/* 0F3E8C 7F0BF35C 0FC26EEF */ jal sub_GAME_7F09BBBC -/* 0F3E90 7F0BF360 00000000 */ nop -/* 0F3E94 7F0BF364 0FC2FA34 */ jal lvlSetMultipliersForDifficulty -/* 0F3E98 7F0BF368 00000000 */ nop -/* 0F3E9C 7F0BF36C 0FC2F1F5 */ jal updateRoomStatusFlags -/* 0F3EA0 7F0BF370 00000000 */ nop -/* 0F3EA4 7F0BF374 0FC24B94 */ jal sub_GAME_7F092E50 -/* 0F3EA8 7F0BF378 00000000 */ nop -/* 0F3EAC 7F0BF37C 0FC2510E */ jal skyTick -/* 0F3EB0 7F0BF380 00000000 */ nop -/* 0F3EB4 7F0BF384 0FC291FF */ jal update_bullet_sparks_and_dust_clouds -/* 0F3EB8 7F0BF388 00000000 */ nop -/* 0F3EBC 7F0BF38C 0FC1A39B */ jal update_bullet_casings -/* 0F3EC0 7F0BF390 00000000 */ nop -/* 0F3EC4 7F0BF394 0FC28A35 */ jal update_broken_windows -/* 0F3EC8 7F0BF398 00000000 */ nop -/* 0F3ECC 7F0BF39C 0FC27F4F */ jal explosionUpdateFlyingParticles -/* 0F3ED0 7F0BF3A0 00000000 */ nop -/* 0F3ED4 7F0BF3A4 0FC0F192 */ jal handle_mp_respawn_and_some_things -/* 0F3ED8 7F0BF3A8 00000000 */ nop -/* 0F3EDC 7F0BF3AC 0FC304F2 */ jal reset_all_music_slots -/* 0F3EE0 7F0BF3B0 00000000 */ nop -/* 0F3EE4 7F0BF3B4 0FC30650 */ jal langTick -/* 0F3EE8 7F0BF3B8 00000000 */ nop -/* 0F3EEC 7F0BF3BC 0FC243EE */ jal get_debug_joy2detailedit_flag -/* 0F3EF0 7F0BF3C0 00000000 */ nop -/* 0F3EF4 7F0BF3C4 1040004D */ beqz $v0, .L7F0BF4FC -/* 0F3EF8 7F0BF3C8 3C068005 */ lui $a2, %hi(D_800483C8) -/* 0F3EFC 7F0BF3CC 24C683C8 */ addiu $a2, %lo(D_800483C8) # addiu $a2, $a2, -0x7c38 -/* 0F3F00 7F0BF3D0 8CD80000 */ lw $t8, ($a2) -/* 0F3F04 7F0BF3D4 24043000 */ li $a0, 12288 -/* 0F3F08 7F0BF3D8 17000048 */ bnez $t8, .L7F0BF4FC -/* 0F3F0C 7F0BF3DC 00000000 */ nop -/* 0F3F10 7F0BF3E0 0C0025C8 */ jal mempAllocBytesInBank -/* 0F3F14 7F0BF3E4 24050004 */ li $a1, 4 -/* 0F3F18 7F0BF3E8 3C068005 */ lui $a2, %hi(D_800483C8) -/* 0F3F1C 7F0BF3EC 24C683C8 */ addiu $a2, %lo(D_800483C8) # addiu $a2, $a2, -0x7c38 -/* 0F3F20 7F0BF3F0 10400042 */ beqz $v0, .L7F0BF4FC -/* 0F3F24 7F0BF3F4 ACC20000 */ sw $v0, ($a2) -/* 0F3F28 7F0BF3F8 00001825 */ move $v1, $zero -/* 0F3F2C 7F0BF3FC 24052EE0 */ li $a1, 12000 -/* 0F3F30 7F0BF400 240400FF */ li $a0, 255 -.L7F0BF404: -/* 0F3F34 7F0BF404 8CCE0000 */ lw $t6, ($a2) -/* 0F3F38 7F0BF408 01C3C821 */ addu $t9, $t6, $v1 -/* 0F3F3C 7F0BF40C A3240000 */ sb $a0, ($t9) -/* 0F3F40 7F0BF410 8CD80000 */ lw $t8, ($a2) -/* 0F3F44 7F0BF414 03031021 */ addu $v0, $t8, $v1 -/* 0F3F48 7F0BF418 904F0001 */ lbu $t7, 1($v0) -/* 0F3F4C 7F0BF41C 31EEFF1F */ andi $t6, $t7, 0xff1f -/* 0F3F50 7F0BF420 35D90020 */ ori $t9, $t6, 0x20 -/* 0F3F54 7F0BF424 A0590001 */ sb $t9, 1($v0) -/* 0F3F58 7F0BF428 8CD80000 */ lw $t8, ($a2) -/* 0F3F5C 7F0BF42C 03031021 */ addu $v0, $t8, $v1 -/* 0F3F60 7F0BF430 904F0001 */ lbu $t7, 1($v0) -/* 0F3F64 7F0BF434 31EEFFE3 */ andi $t6, $t7, 0xffe3 -/* 0F3F68 7F0BF438 35D90004 */ ori $t9, $t6, 4 -/* 0F3F6C 7F0BF43C A0590001 */ sb $t9, 1($v0) -/* 0F3F70 7F0BF440 8CD80000 */ lw $t8, ($a2) -/* 0F3F74 7F0BF444 03037821 */ addu $t7, $t8, $v1 -/* 0F3F78 7F0BF448 A1E40004 */ sb $a0, 4($t7) -/* 0F3F7C 7F0BF44C 8CCE0000 */ lw $t6, ($a2) -/* 0F3F80 7F0BF450 01C31021 */ addu $v0, $t6, $v1 -/* 0F3F84 7F0BF454 90590005 */ lbu $t9, 5($v0) -/* 0F3F88 7F0BF458 3338FF1F */ andi $t8, $t9, 0xff1f -/* 0F3F8C 7F0BF45C 370F0020 */ ori $t7, $t8, 0x20 -/* 0F3F90 7F0BF460 A04F0005 */ sb $t7, 5($v0) -/* 0F3F94 7F0BF464 8CCE0000 */ lw $t6, ($a2) -/* 0F3F98 7F0BF468 01C31021 */ addu $v0, $t6, $v1 -/* 0F3F9C 7F0BF46C 90590005 */ lbu $t9, 5($v0) -/* 0F3FA0 7F0BF470 3338FFE3 */ andi $t8, $t9, 0xffe3 -/* 0F3FA4 7F0BF474 370F0004 */ ori $t7, $t8, 4 -/* 0F3FA8 7F0BF478 A04F0005 */ sb $t7, 5($v0) -/* 0F3FAC 7F0BF47C 8CCE0000 */ lw $t6, ($a2) -/* 0F3FB0 7F0BF480 01C3C821 */ addu $t9, $t6, $v1 -/* 0F3FB4 7F0BF484 A3240008 */ sb $a0, 8($t9) -/* 0F3FB8 7F0BF488 8CD80000 */ lw $t8, ($a2) -/* 0F3FBC 7F0BF48C 03031021 */ addu $v0, $t8, $v1 -/* 0F3FC0 7F0BF490 904F0009 */ lbu $t7, 9($v0) -/* 0F3FC4 7F0BF494 31EEFF1F */ andi $t6, $t7, 0xff1f -/* 0F3FC8 7F0BF498 35D90020 */ ori $t9, $t6, 0x20 -/* 0F3FCC 7F0BF49C A0590009 */ sb $t9, 9($v0) -/* 0F3FD0 7F0BF4A0 8CD80000 */ lw $t8, ($a2) -/* 0F3FD4 7F0BF4A4 03031021 */ addu $v0, $t8, $v1 -/* 0F3FD8 7F0BF4A8 904F0009 */ lbu $t7, 9($v0) -/* 0F3FDC 7F0BF4AC 31EEFFE3 */ andi $t6, $t7, 0xffe3 -/* 0F3FE0 7F0BF4B0 35D90004 */ ori $t9, $t6, 4 -/* 0F3FE4 7F0BF4B4 A0590009 */ sb $t9, 9($v0) -/* 0F3FE8 7F0BF4B8 8CD80000 */ lw $t8, ($a2) -/* 0F3FEC 7F0BF4BC 03037821 */ addu $t7, $t8, $v1 -/* 0F3FF0 7F0BF4C0 A1E4000C */ sb $a0, 0xc($t7) -/* 0F3FF4 7F0BF4C4 8CCE0000 */ lw $t6, ($a2) -/* 0F3FF8 7F0BF4C8 01C31021 */ addu $v0, $t6, $v1 -/* 0F3FFC 7F0BF4CC 9059000D */ lbu $t9, 0xd($v0) -/* 0F4000 7F0BF4D0 3338FF1F */ andi $t8, $t9, 0xff1f -/* 0F4004 7F0BF4D4 370F0020 */ ori $t7, $t8, 0x20 -/* 0F4008 7F0BF4D8 A04F000D */ sb $t7, 0xd($v0) -/* 0F400C 7F0BF4DC 8CCE0000 */ lw $t6, ($a2) -/* 0F4010 7F0BF4E0 01C31021 */ addu $v0, $t6, $v1 -/* 0F4014 7F0BF4E4 9059000D */ lbu $t9, 0xd($v0) -/* 0F4018 7F0BF4E8 24630010 */ addiu $v1, $v1, 0x10 -/* 0F401C 7F0BF4EC 3338FFE3 */ andi $t8, $t9, 0xffe3 -/* 0F4020 7F0BF4F0 370F0004 */ ori $t7, $t8, 4 -/* 0F4024 7F0BF4F4 1465FFC3 */ bne $v1, $a1, .L7F0BF404 -/* 0F4028 7F0BF4F8 A04F000D */ sb $t7, 0xd($v0) -.L7F0BF4FC: -/* 0F402C 7F0BF4FC 0FC2440F */ jal get_debug_portal_flag -/* 0F4030 7F0BF500 00000000 */ nop -/* 0F4034 7F0BF504 10400003 */ beqz $v0, .L7F0BF514 -/* 0F4038 7F0BF508 00000000 */ nop -/* 0F403C 7F0BF50C 0FC2F7C4 */ jal lvlPortalDebug7F0BDF10 -/* 0F4040 7F0BF510 00002025 */ move $a0, $zero -.L7F0BF514: -/* 0F4044 7F0BF514 0FC243C5 */ jal getDebugMode -/* 0F4048 7F0BF518 00000000 */ nop -/* 0F404C 7F0BF51C 24010004 */ li $at, 4 -/* 0F4050 7F0BF520 10410006 */ beq $v0, $at, .L7F0BF53C -/* 0F4054 7F0BF524 00002025 */ move $a0, $zero -/* 0F4058 7F0BF528 24010008 */ li $at, 8 -/* 0F405C 7F0BF52C 1041001A */ beq $v0, $at, .L7F0BF598 -/* 0F4060 7F0BF530 00002025 */ move $a0, $zero -/* 0F4064 7F0BF534 10000031 */ b .L7F0BF5FC -/* 0F4068 7F0BF538 00000000 */ nop -.L7F0BF53C: -/* 0F406C 7F0BF53C 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F4070 7F0BF540 24050002 */ li $a1, 2 -/* 0F4074 7F0BF544 50400008 */ beql $v0, $zero, .L7F0BF568 -/* 0F4078 7F0BF548 00002025 */ move $a0, $zero -/* 0F407C 7F0BF54C 0FC2BD8C */ jal sub_GAME_7F0AF630 -/* 0F4080 7F0BF550 2404FFFF */ li $a0, -1 -/* 0F4084 7F0BF554 00002025 */ move $a0, $zero -/* 0F4088 7F0BF558 00002825 */ move $a1, $zero -/* 0F408C 7F0BF55C 0FC2CB4E */ jal debugStanView -/* 0F4090 7F0BF560 00003025 */ move $a2, $zero -/* 0F4094 7F0BF564 00002025 */ move $a0, $zero -.L7F0BF568: -/* 0F4098 7F0BF568 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F409C 7F0BF56C 24050001 */ li $a1, 1 -/* 0F40A0 7F0BF570 10400022 */ beqz $v0, .L7F0BF5FC -/* 0F40A4 7F0BF574 00000000 */ nop -/* 0F40A8 7F0BF578 0FC2BD8C */ jal sub_GAME_7F0AF630 -/* 0F40AC 7F0BF57C 24040001 */ li $a0, 1 -/* 0F40B0 7F0BF580 00002025 */ move $a0, $zero -/* 0F40B4 7F0BF584 00002825 */ move $a1, $zero -/* 0F40B8 7F0BF588 0FC2CB4E */ jal debugStanView -/* 0F40BC 7F0BF58C 00003025 */ move $a2, $zero -/* 0F40C0 7F0BF590 1000001A */ b .L7F0BF5FC -/* 0F40C4 7F0BF594 00000000 */ nop -.L7F0BF598: -/* 0F40C8 7F0BF598 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F40CC 7F0BF59C 24050002 */ li $a1, 2 -/* 0F40D0 7F0BF5A0 50400004 */ beql $v0, $zero, .L7F0BF5B4 -/* 0F40D4 7F0BF5A4 00002025 */ move $a0, $zero -/* 0F40D8 7F0BF5A8 0FC08B8C */ jal chrDecrementAnimationTablePointerCount -/* 0F40DC 7F0BF5AC 00000000 */ nop -/* 0F40E0 7F0BF5B0 00002025 */ move $a0, $zero -.L7F0BF5B4: -/* 0F40E4 7F0BF5B4 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F40E8 7F0BF5B8 24050001 */ li $a1, 1 -/* 0F40EC 7F0BF5BC 50400004 */ beql $v0, $zero, .L7F0BF5D0 -/* 0F40F0 7F0BF5C0 00002025 */ move $a0, $zero -/* 0F40F4 7F0BF5C4 0FC08BA4 */ jal chrIncrementAnimationTablePointerCount -/* 0F40F8 7F0BF5C8 00000000 */ nop -/* 0F40FC 7F0BF5CC 00002025 */ move $a0, $zero -.L7F0BF5D0: -/* 0F4100 7F0BF5D0 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F4104 7F0BF5D4 24050020 */ li $a1, 32 -/* 0F4108 7F0BF5D8 50400004 */ beql $v0, $zero, .L7F0BF5EC -/* 0F410C 7F0BF5DC 00002025 */ move $a0, $zero -/* 0F4110 7F0BF5E0 0FC08BB2 */ jal chrToggleD_8002C90C -/* 0F4114 7F0BF5E4 00000000 */ nop -/* 0F4118 7F0BF5E8 00002025 */ move $a0, $zero -.L7F0BF5EC: -/* 0F411C 7F0BF5EC 0C0030C3 */ jal joyGetButtons -/* 0F4120 7F0BF5F0 24050010 */ li $a1, 16 -/* 0F4124 7F0BF5F4 0FC08BB8 */ jal sub_GAME_7F022EE0 -/* 0F4128 7F0BF5F8 0002202B */ sltu $a0, $zero, $v0 -.L7F0BF5FC: -/* 0F412C 7F0BF5FC 0FC243C5 */ jal getDebugMode -/* 0F4130 7F0BF600 00000000 */ nop -/* 0F4134 7F0BF604 2401000C */ li $at, 12 -/* 0F4138 7F0BF608 1041002E */ beq $v0, $at, .L7F0BF6C4 -/* 0F413C 7F0BF60C 00002025 */ move $a0, $zero -/* 0F4140 7F0BF610 2401000D */ li $at, 13 -/* 0F4144 7F0BF614 10410048 */ beq $v0, $at, .L7F0BF738 -/* 0F4148 7F0BF618 00002025 */ move $a0, $zero -/* 0F414C 7F0BF61C 24010038 */ li $at, 56 -/* 0F4150 7F0BF620 54410074 */ bnel $v0, $at, .L7F0BF7F4 -/* 0F4154 7F0BF624 8FBF0014 */ lw $ra, 0x14($sp) -/* 0F4158 7F0BF628 0C0010EA */ jal viGetHorizontalOffset -/* 0F415C 7F0BF62C 00000000 */ nop -/* 0F4160 7F0BF630 0C0010E4 */ jal viGet800232A0 -/* 0F4164 7F0BF634 AFA20030 */ sw $v0, 0x30($sp) -/* 0F4168 7F0BF638 AFA2002C */ sw $v0, 0x2c($sp) -/* 0F416C 7F0BF63C 00002025 */ move $a0, $zero -/* 0F4170 7F0BF640 0C0030C3 */ jal joyGetButtons -/* 0F4174 7F0BF644 24050004 */ li $a1, 4 -/* 0F4178 7F0BF648 10400004 */ beqz $v0, .L7F0BF65C -/* 0F417C 7F0BF64C 00002025 */ move $a0, $zero -/* 0F4180 7F0BF650 8FAE002C */ lw $t6, 0x2c($sp) -/* 0F4184 7F0BF654 25D90001 */ addiu $t9, $t6, 1 -/* 0F4188 7F0BF658 AFB9002C */ sw $t9, 0x2c($sp) -.L7F0BF65C: -/* 0F418C 7F0BF65C 0C0030C3 */ jal joyGetButtons -/* 0F4190 7F0BF660 24050008 */ li $a1, 8 -/* 0F4194 7F0BF664 10400004 */ beqz $v0, .L7F0BF678 -/* 0F4198 7F0BF668 00002025 */ move $a0, $zero -/* 0F419C 7F0BF66C 8FB8002C */ lw $t8, 0x2c($sp) -/* 0F41A0 7F0BF670 270FFFFF */ addiu $t7, $t8, -1 -/* 0F41A4 7F0BF674 AFAF002C */ sw $t7, 0x2c($sp) -.L7F0BF678: -/* 0F41A8 7F0BF678 0C0030C3 */ jal joyGetButtons -/* 0F41AC 7F0BF67C 24050001 */ li $a1, 1 -/* 0F41B0 7F0BF680 10400004 */ beqz $v0, .L7F0BF694 -/* 0F41B4 7F0BF684 00002025 */ move $a0, $zero -/* 0F41B8 7F0BF688 8FAE0030 */ lw $t6, 0x30($sp) -/* 0F41BC 7F0BF68C 25D90001 */ addiu $t9, $t6, 1 -/* 0F41C0 7F0BF690 AFB90030 */ sw $t9, 0x30($sp) -.L7F0BF694: -/* 0F41C4 7F0BF694 0C0030C3 */ jal joyGetButtons -/* 0F41C8 7F0BF698 24050002 */ li $a1, 2 -/* 0F41CC 7F0BF69C 10400003 */ beqz $v0, .L7F0BF6AC -/* 0F41D0 7F0BF6A0 8FB80030 */ lw $t8, 0x30($sp) -/* 0F41D4 7F0BF6A4 270FFFFF */ addiu $t7, $t8, -1 -/* 0F41D8 7F0BF6A8 AFAF0030 */ sw $t7, 0x30($sp) -.L7F0BF6AC: -/* 0F41DC 7F0BF6AC 0C0010E7 */ jal viSetHorizontalOffset -/* 0F41E0 7F0BF6B0 8FA40030 */ lw $a0, 0x30($sp) -/* 0F41E4 7F0BF6B4 0C0010E1 */ jal viSet800232A0 -/* 0F41E8 7F0BF6B8 8FA4002C */ lw $a0, 0x2c($sp) -/* 0F41EC 7F0BF6BC 1000004D */ b .L7F0BF7F4 -/* 0F41F0 7F0BF6C0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0BF6C4: -/* 0F41F4 7F0BF6C4 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F41F8 7F0BF6C8 24050202 */ li $a1, 514 -/* 0F41FC 7F0BF6CC 50400004 */ beql $v0, $zero, .L7F0BF6E0 -/* 0F4200 7F0BF6D0 00002025 */ move $a0, $zero -/* 0F4204 7F0BF6D4 0FC2F68E */ jal lvlMusicAppendPlayEndTheme -/* 0F4208 7F0BF6D8 00000000 */ nop -/* 0F420C 7F0BF6DC 00002025 */ move $a0, $zero -.L7F0BF6E0: -/* 0F4210 7F0BF6E0 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F4214 7F0BF6E4 24050101 */ li $a1, 257 -/* 0F4218 7F0BF6E8 50400004 */ beql $v0, $zero, .L7F0BF6FC -/* 0F421C 7F0BF6EC 00002025 */ move $a0, $zero -/* 0F4220 7F0BF6F0 0FC2F67B */ jal lvlMusicAppendPlaySoloDeathShort -/* 0F4224 7F0BF6F4 00000000 */ nop -/* 0F4228 7F0BF6F8 00002025 */ move $a0, $zero -.L7F0BF6FC: -/* 0F422C 7F0BF6FC 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F4230 7F0BF700 24050400 */ li $a1, 1024 -/* 0F4234 7F0BF704 50400004 */ beql $v0, $zero, .L7F0BF718 -/* 0F4238 7F0BF708 00002025 */ move $a0, $zero -/* 0F423C 7F0BF70C 0C001BF4 */ jal musicTrack1Stop -/* 0F4240 7F0BF710 00000000 */ nop -/* 0F4244 7F0BF714 00002025 */ move $a0, $zero -.L7F0BF718: -/* 0F4248 7F0BF718 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F424C 7F0BF71C 24054000 */ li $a1, 16384 -/* 0F4250 7F0BF720 50400034 */ beql $v0, $zero, .L7F0BF7F4 -/* 0F4254 7F0BF724 8FBF0014 */ lw $ra, 0x14($sp) -/* 0F4258 7F0BF728 0C001C28 */ jal musicTrack1SaveCurrentVolumeAsTrackDefault -/* 0F425C 7F0BF72C 00000000 */ nop -/* 0F4260 7F0BF730 10000030 */ b .L7F0BF7F4 -/* 0F4264 7F0BF734 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0BF738: -/* 0F4268 7F0BF738 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F426C 7F0BF73C 24050622 */ li $a1, 1570 -/* 0F4270 7F0BF740 1040000B */ beqz $v0, .L7F0BF770 -/* 0F4274 7F0BF744 3C058005 */ lui $a1, 0x8005 -/* 0F4278 7F0BF748 84A583E4 */ lh $a1, %lo(g_DebugMpGameSoundFxIndex)($a1) -/* 0F427C 7F0BF74C 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 0F4280 7F0BF750 3C018005 */ lui $at, %hi(g_DebugMpGameSoundFxIndex) -/* 0F4284 7F0BF754 24A5FFFF */ addiu $a1, $a1, -1 -/* 0F4288 7F0BF758 00057400 */ sll $t6, $a1, 0x10 -/* 0F428C 7F0BF75C 000E2C03 */ sra $a1, $t6, 0x10 -/* 0F4290 7F0BF760 A42583E4 */ sh $a1, %lo(g_DebugMpGameSoundFxIndex)($at) -/* 0F4294 7F0BF764 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F4298 7F0BF768 0C002382 */ jal sndPlaySfx -/* 0F429C 7F0BF76C 00003025 */ move $a2, $zero -.L7F0BF770: -/* 0F42A0 7F0BF770 00002025 */ move $a0, $zero -/* 0F42A4 7F0BF774 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F42A8 7F0BF778 24050911 */ li $a1, 2321 -/* 0F42AC 7F0BF77C 1040000B */ beqz $v0, .L7F0BF7AC -/* 0F42B0 7F0BF780 3C058005 */ lui $a1, 0x8005 -/* 0F42B4 7F0BF784 84A583E4 */ lh $a1, %lo(g_DebugMpGameSoundFxIndex)($a1) -/* 0F42B8 7F0BF788 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 0F42BC 7F0BF78C 3C018005 */ lui $at, %hi(g_DebugMpGameSoundFxIndex) -/* 0F42C0 7F0BF790 24A50001 */ addiu $a1, $a1, 1 -/* 0F42C4 7F0BF794 0005C400 */ sll $t8, $a1, 0x10 -/* 0F42C8 7F0BF798 00182C03 */ sra $a1, $t8, 0x10 -/* 0F42CC 7F0BF79C A42583E4 */ sh $a1, %lo(g_DebugMpGameSoundFxIndex)($at) -/* 0F42D0 7F0BF7A0 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F42D4 7F0BF7A4 0C002382 */ jal sndPlaySfx -/* 0F42D8 7F0BF7A8 00003025 */ move $a2, $zero -.L7F0BF7AC: -/* 0F42DC 7F0BF7AC 00002025 */ move $a0, $zero -/* 0F42E0 7F0BF7B0 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F42E4 7F0BF7B4 24050004 */ li $a1, 4 -/* 0F42E8 7F0BF7B8 50400004 */ beql $v0, $zero, .L7F0BF7CC -/* 0F42EC 7F0BF7BC 00002025 */ move $a0, $zero -/* 0F42F0 7F0BF7C0 0C002449 */ jal sndDeactivateAllSfxByFlag_1 -/* 0F42F4 7F0BF7C4 00000000 */ nop -/* 0F42F8 7F0BF7C8 00002025 */ move $a0, $zero -.L7F0BF7CC: -/* 0F42FC 7F0BF7CC 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0F4300 7F0BF7D0 24050008 */ li $a1, 8 -/* 0F4304 7F0BF7D4 10400006 */ beqz $v0, .L7F0BF7F0 -/* 0F4308 7F0BF7D8 3C058005 */ lui $a1, %hi(g_DebugMpGameSoundFxIndex) -/* 0F430C 7F0BF7DC 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 0F4310 7F0BF7E0 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F4314 7F0BF7E4 84A583E4 */ lh $a1, %lo(g_DebugMpGameSoundFxIndex)($a1) -/* 0F4318 7F0BF7E8 0C002382 */ jal sndPlaySfx -/* 0F431C 7F0BF7EC 00003025 */ move $a2, $zero -.L7F0BF7F0: -/* 0F4320 7F0BF7F0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0BF7F4: -/* 0F4324 7F0BF7F4 27BD0198 */ addiu $sp, $sp, 0x198 -/* 0F4328 7F0BF7F8 03E00008 */ jr $ra -/* 0F432C 7F0BF7FC 00000000 */ nop -) -#endif + sound_index_ptr = &g_DebugMpGameSoundFxIndex; -#ifdef VERSION_JP -GLOBAL_ASM( -.rdata -#const char aSetdetailDDDDDDDDD[] = "setdetail %d %d %d %d %d %d %d %d %d"; -glabel aSetdetailDDDDDDDDD -.word 0x73657464 -.word 0x65746169 -.word 0x6c202564 -.word 0x20256420 -.word 0x25642025 -.word 0x64202564 -.word 0x20256420 -.word 0x25642025 -.word 0x64202564 -.word 0x00000000 -.text -glabel lvlManageMpGame -/* 0F431C 7F0BF7AC 27BDFE68 */ addiu $sp, $sp, -0x198 -/* 0F4320 7F0BF7B0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0F4324 7F0BF7B4 0C000626 */ jal tlbmanageResetCurrentEntriesCount -/* 0F4328 7F0BF7B8 00000000 */ nop -/* 0F432C 7F0BF7BC 3C0E8005 */ lui $t6, %hi(g_ControlsLockedFlag) # $t6, 0x8005 -/* 0F4330 7F0BF7C0 8DCE83A0 */ lw $t6, %lo(g_ControlsLockedFlag)($t6) -/* 0F4334 7F0BF7C4 3C018005 */ lui $at, %hi(g_ClockTimer) # $at, 0x8005 -/* 0F4338 7F0BF7C8 11C00003 */ beqz $t6, .Ljp7F0BF7D8 -/* 0F433C 7F0BF7CC 00000000 */ nop -/* 0F4340 7F0BF7D0 10000010 */ b .Ljp7F0BF814 -/* 0F4344 7F0BF7D4 AC2083A4 */ sw $zero, %lo(g_ClockTimer)($at) -.Ljp7F0BF7D8: -/* 0F4348 7F0BF7D8 0FC31B59 */ jal checkGamePaused -/* 0F434C 7F0BF7DC 00000000 */ nop -/* 0F4350 7F0BF7E0 10400004 */ beqz $v0, .Ljp7F0BF7F4 -/* 0F4354 7F0BF7E4 3C0F8005 */ lui $t7, %hi(speedgraphframes) # $t7, 0x8005 -/* 0F4358 7F0BF7E8 3C018005 */ lui $at, %hi(g_ClockTimer) # $at, 0x8005 -/* 0F435C 7F0BF7EC 10000009 */ b .Ljp7F0BF814 -/* 0F4360 7F0BF7F0 AC2083A4 */ sw $zero, %lo(g_ClockTimer)($at) -.Ljp7F0BF7F4: -/* 0F4364 7F0BF7F4 8DEF84C8 */ lw $t7, %lo(speedgraphframes)($t7) -/* 0F4368 7F0BF7F8 3C028005 */ lui $v0, %hi(D_80048380) # $v0, 0x8005 -/* 0F436C 7F0BF7FC 3C018005 */ lui $at, %hi(g_ClockTimer) # $at, 0x8005 -/* 0F4370 7F0BF800 244283B0 */ addiu $v0, %lo(D_80048380) # addiu $v0, $v0, -0x7c50 -/* 0F4374 7F0BF804 AC2F83A4 */ sw $t7, %lo(g_ClockTimer)($at) -/* 0F4378 7F0BF808 8C580000 */ lw $t8, ($v0) -/* 0F437C 7F0BF80C 27190001 */ addiu $t9, $t8, 1 -/* 0F4380 7F0BF810 AC590000 */ sw $t9, ($v0) -.Ljp7F0BF814: -/* 0F4384 7F0BF814 3C028005 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8005 -/* 0F4388 7F0BF818 8C4283A4 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0F438C 7F0BF81C 3C038005 */ lui $v1, %hi(g_JP_GlobalTimerDelta) # $v1, 0x8005 -/* 0F4390 7F0BF820 246383A8 */ addiu $v1, %lo(g_JP_GlobalTimerDelta) # addiu $v1, $v1, -0x7c58 -/* 0F4394 7F0BF824 44822000 */ mtc1 $v0, $f4 -/* 0F4398 7F0BF828 3C048005 */ lui $a0, %hi(g_GlobalTimer) # $a0, 0x8005 -/* 0F439C 7F0BF82C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 0F43A0 7F0BF830 468021A0 */ cvt.s.w $f6, $f4 -/* 0F43A4 7F0BF834 248483AC */ addiu $a0, %lo(g_GlobalTimer) # addiu $a0, $a0, -0x7c54 -/* 0F43A8 7F0BF838 3C188005 */ lui $t8, %hi(g_CurrentStageToLoad) # $t8, 0x8005 -/* 0F43AC 7F0BF83C 3C198005 */ lui $t9, %hi(D_80048394) # $t9, 0x8005 -/* 0F43B0 7F0BF840 E4660000 */ swc1 $f6, ($v1) -/* 0F43B4 7F0BF844 C4680000 */ lwc1 $f8, ($v1) -/* 0F43B8 7F0BF848 E42883B4 */ swc1 $f8, %lo(g_GlobalTimerDelta)($at) -/* 0F43BC 7F0BF84C 8C8E0000 */ lw $t6, ($a0) -/* 0F43C0 7F0BF850 2401005A */ li $at, 90 -/* 0F43C4 7F0BF854 01C27821 */ addu $t7, $t6, $v0 -/* 0F43C8 7F0BF858 AC8F0000 */ sw $t7, ($a0) -/* 0F43CC 7F0BF85C 8F188394 */ lw $t8, %lo(g_CurrentStageToLoad)($t8) -/* 0F43D0 7F0BF860 1301001D */ beq $t8, $at, .Ljp7F0BF8D8 -/* 0F43D4 7F0BF864 00000000 */ nop -/* 0F43D8 7F0BF868 8F3983C8 */ lw $t9, %lo(D_80048394)($t9) -/* 0F43DC 7F0BF86C 1720001A */ bnez $t9, .Ljp7F0BF8D8 -/* 0F43E0 7F0BF870 00000000 */ nop -/* 0F43E4 7F0BF874 18400018 */ blez $v0, .Ljp7F0BF8D8 -/* 0F43E8 7F0BF878 3C0E8003 */ lui $t6, %hi(g_AppendCheatSinglePlayer) # $t6, 0x8003 -/* 0F43EC 7F0BF87C 8DCEA940 */ lw $t6, %lo(g_AppendCheatSinglePlayer)($t6) -/* 0F43F0 7F0BF880 3C038007 */ lui $v1, %hi(g_CheatActivated + 1) # $v1, 0x8007 -/* 0F43F4 7F0BF884 246396E1 */ addiu $v1, %lo(g_CheatActivated + 1) # addiu $v1, $v1, -0x691f -/* 0F43F8 7F0BF888 11C00013 */ beqz $t6, .Ljp7F0BF8D8 -/* 0F43FC 7F0BF88C 24040001 */ li $a0, 1 -.Ljp7F0BF890: -/* 0F4400 7F0BF890 906F0000 */ lbu $t7, ($v1) -/* 0F4404 7F0BF894 51E0000D */ beql $t7, $zero, .Ljp7F0BF8CC -/* 0F4408 7F0BF898 24840001 */ addiu $a0, $a0, 1 -/* 0F440C 7F0BF89C AFA3001C */ sw $v1, 0x1c($sp) -/* 0F4410 7F0BF8A0 0FC2494F */ jal cheatIsEnemyRockets -/* 0F4414 7F0BF8A4 AFA40194 */ sw $a0, 0x194($sp) -/* 0F4418 7F0BF8A8 8FA3001C */ lw $v1, 0x1c($sp) -/* 0F441C 7F0BF8AC 14400006 */ bnez $v0, .Ljp7F0BF8C8 -/* 0F4420 7F0BF8B0 8FA40194 */ lw $a0, 0x194($sp) -/* 0F4424 7F0BF8B4 AFA3001C */ sw $v1, 0x1c($sp) -/* 0F4428 7F0BF8B8 0FC24963 */ jal cheatButtonTurnOnCheatForPlayers -/* 0F442C 7F0BF8BC AFA40194 */ sw $a0, 0x194($sp) -/* 0F4430 7F0BF8C0 8FA3001C */ lw $v1, 0x1c($sp) -/* 0F4434 7F0BF8C4 8FA40194 */ lw $a0, 0x194($sp) -.Ljp7F0BF8C8: -/* 0F4438 7F0BF8C8 24840001 */ addiu $a0, $a0, 1 -.Ljp7F0BF8CC: -/* 0F443C 7F0BF8CC 2401004B */ li $at, 75 -/* 0F4440 7F0BF8D0 1481FFEF */ bne $a0, $at, .Ljp7F0BF890 -/* 0F4444 7F0BF8D4 24630001 */ addiu $v1, $v1, 1 -.Ljp7F0BF8D8: -/* 0F4448 7F0BF8D8 0FC26C01 */ jal getPlayerCount -/* 0F444C 7F0BF8DC 00000000 */ nop -/* 0F4450 7F0BF8E0 28410002 */ slti $at, $v0, 2 -/* 0F4454 7F0BF8E4 1420014C */ bnez $at, .Ljp7F0BFE18 -/* 0F4458 7F0BF8E8 3C188005 */ lui $t8, %hi(g_CurrentStageToLoad) # $t8, 0x8005 -/* 0F445C 7F0BF8EC 8F188394 */ lw $t8, %lo(g_CurrentStageToLoad)($t8) -/* 0F4460 7F0BF8F0 2401005A */ li $at, 90 -/* 0F4464 7F0BF8F4 13010148 */ beq $t8, $at, .Ljp7F0BFE18 -/* 0F4468 7F0BF8F8 00000000 */ nop -/* 0F446C 7F0BF8FC 0FC30630 */ jal get_mission_state -/* 0F4470 7F0BF900 00000000 */ nop -/* 0F4474 7F0BF904 24010006 */ li $at, 6 -/* 0F4478 7F0BF908 14410029 */ bne $v0, $at, .Ljp7F0BF9B0 -/* 0F447C 7F0BF90C 00000000 */ nop -/* 0F4480 7F0BF910 AFA00190 */ sw $zero, 0x190($sp) -/* 0F4484 7F0BF914 AFA0018C */ sw $zero, 0x18c($sp) -/* 0F4488 7F0BF918 0FC26C01 */ jal getPlayerCount -/* 0F448C 7F0BF91C AFA00188 */ sw $zero, 0x188($sp) -/* 0F4490 7F0BF920 8FA30190 */ lw $v1, 0x190($sp) -/* 0F4494 7F0BF924 8FA5018C */ lw $a1, 0x18c($sp) -/* 0F4498 7F0BF928 1840001B */ blez $v0, .Ljp7F0BF998 -/* 0F449C 7F0BF92C 8FA60188 */ lw $a2, 0x188($sp) -/* 0F44A0 7F0BF930 3C0E8008 */ lui $t6, %hi(g_playerPointers) # $t6, 0x8008 -/* 0F44A4 7F0BF934 25CE9F50 */ addiu $t6, %lo(g_playerPointers) # addiu $t6, $t6, -0x60b0 -/* 0F44A8 7F0BF938 0003C880 */ sll $t9, $v1, 2 -/* 0F44AC 7F0BF93C 032E2021 */ addu $a0, $t9, $t6 -.Ljp7F0BF940: -/* 0F44B0 7F0BF940 8C820000 */ lw $v0, ($a0) -/* 0F44B4 7F0BF944 24630001 */ addiu $v1, $v1, 1 -/* 0F44B8 7F0BF948 24840004 */ addiu $a0, $a0, 4 -/* 0F44BC 7F0BF94C 8C4F00D8 */ lw $t7, 0xd8($v0) -/* 0F44C0 7F0BF950 51E00007 */ beql $t7, $zero, .Ljp7F0BF970 -/* 0F44C4 7F0BF954 AFA30190 */ sw $v1, 0x190($sp) -/* 0F44C8 7F0BF958 8C580424 */ lw $t8, 0x424($v0) -/* 0F44CC 7F0BF95C 24A50001 */ addiu $a1, $a1, 1 -/* 0F44D0 7F0BF960 53000003 */ beql $t8, $zero, .Ljp7F0BF970 -/* 0F44D4 7F0BF964 AFA30190 */ sw $v1, 0x190($sp) -/* 0F44D8 7F0BF968 24C60001 */ addiu $a2, $a2, 1 -/* 0F44DC 7F0BF96C AFA30190 */ sw $v1, 0x190($sp) -.Ljp7F0BF970: -/* 0F44E0 7F0BF970 AFA4001C */ sw $a0, 0x1c($sp) -/* 0F44E4 7F0BF974 AFA5018C */ sw $a1, 0x18c($sp) -/* 0F44E8 7F0BF978 0FC26C01 */ jal getPlayerCount -/* 0F44EC 7F0BF97C AFA60188 */ sw $a2, 0x188($sp) -/* 0F44F0 7F0BF980 8FA30190 */ lw $v1, 0x190($sp) -/* 0F44F4 7F0BF984 8FA4001C */ lw $a0, 0x1c($sp) -/* 0F44F8 7F0BF988 8FA5018C */ lw $a1, 0x18c($sp) -/* 0F44FC 7F0BF98C 0062082A */ slt $at, $v1, $v0 -/* 0F4500 7F0BF990 1420FFEB */ bnez $at, .Ljp7F0BF940 -/* 0F4504 7F0BF994 8FA60188 */ lw $a2, 0x188($sp) -.Ljp7F0BF998: -/* 0F4508 7F0BF998 18A00005 */ blez $a1, .Ljp7F0BF9B0 -/* 0F450C 7F0BF99C 00000000 */ nop -/* 0F4510 7F0BF9A0 14A60003 */ bne $a1, $a2, .Ljp7F0BF9B0 -/* 0F4514 7F0BF9A4 00000000 */ nop -/* 0F4518 7F0BF9A8 0FC30633 */ jal set_missionstate -/* 0F451C 7F0BF9AC 24040001 */ li $a0, 1 -.Ljp7F0BF9B0: -/* 0F4520 7F0BF9B0 3C038005 */ lui $v1, %hi(g_MpTime) # $v1, 0x8005 -/* 0F4524 7F0BF9B4 8C6383CC */ lw $v1, %lo(g_MpTime)($v1) -/* 0F4528 7F0BF9B8 3C028005 */ lui $v0, %hi(D_80048394) # $v0, 0x8005 -/* 0F452C 7F0BF9BC 3C198005 */ lui $t9, %hi(g_ClockTimer) # $t9, 0x8005 -/* 0F4530 7F0BF9C0 1860004A */ blez $v1, .Ljp7F0BFAEC -/* 0F4534 7F0BF9C4 00000000 */ nop -/* 0F4538 7F0BF9C8 8C4283C8 */ lw $v0, %lo(D_80048394)($v0) -/* 0F453C 7F0BF9CC 8F3983A4 */ lw $t9, %lo(g_ClockTimer)($t9) -/* 0F4540 7F0BF9D0 2464F1F0 */ addiu $a0, $v1, -0xe10 -/* 0F4544 7F0BF9D4 0044082A */ slt $at, $v0, $a0 -/* 0F4548 7F0BF9D8 03227021 */ addu $t6, $t9, $v0 -/* 0F454C 7F0BF9DC AFAE0180 */ sw $t6, 0x180($sp) -/* 0F4550 7F0BF9E0 10200016 */ beqz $at, .Ljp7F0BFA3C -/* 0F4554 7F0BF9E4 AFA20184 */ sw $v0, 0x184($sp) -/* 0F4558 7F0BF9E8 01C4082A */ slt $at, $t6, $a0 -/* 0F455C 7F0BF9EC 14200013 */ bnez $at, .Ljp7F0BFA3C -/* 0F4560 7F0BF9F0 00000000 */ nop -/* 0F4564 7F0BF9F4 0FC26C01 */ jal getPlayerCount -/* 0F4568 7F0BF9F8 AFA0017C */ sw $zero, 0x17c($sp) -/* 0F456C 7F0BF9FC 1840000F */ blez $v0, .Ljp7F0BFA3C -/* 0F4570 7F0BFA00 00000000 */ nop -.Ljp7F0BFA04: -/* 0F4574 7F0BFA04 0FC26F2B */ jal set_cur_player -/* 0F4578 7F0BFA08 8FA4017C */ lw $a0, 0x17c($sp) -/* 0F457C 7F0BFA0C 0FC30AA2 */ jal langGet -/* 0F4580 7F0BFA10 3404B044 */ li $a0, 45124 -/* 0F4584 7F0BFA14 0FC22B10 */ jal jp_hudmsgBottomShow -/* 0F4588 7F0BFA18 00402025 */ move $a0, $v0 -/* 0F458C 7F0BFA1C 8FAF017C */ lw $t7, 0x17c($sp) -/* 0F4590 7F0BFA20 25F80001 */ addiu $t8, $t7, 1 -/* 0F4594 7F0BFA24 0FC26C01 */ jal getPlayerCount -/* 0F4598 7F0BFA28 AFB8017C */ sw $t8, 0x17c($sp) -/* 0F459C 7F0BFA2C 8FB9017C */ lw $t9, 0x17c($sp) -/* 0F45A0 7F0BFA30 0322082A */ slt $at, $t9, $v0 -/* 0F45A4 7F0BFA34 1420FFF3 */ bnez $at, .Ljp7F0BFA04 -/* 0F45A8 7F0BFA38 00000000 */ nop -.Ljp7F0BFA3C: -/* 0F45AC 7F0BFA3C 3C0F8005 */ lui $t7, %hi(g_MpTime) # $t7, 0x8005 -/* 0F45B0 7F0BFA40 8DEF83CC */ lw $t7, %lo(g_MpTime)($t7) -/* 0F45B4 7F0BFA44 8FAE0180 */ lw $t6, 0x180($sp) -/* 0F45B8 7F0BFA48 3C198005 */ lui $t9, %hi(g_MpSoundStateRelated) # $t9, 0x8005 -/* 0F45BC 7F0BFA4C 25F8FDA8 */ addiu $t8, $t7, -0x258 -/* 0F45C0 7F0BFA50 01D8082A */ slt $at, $t6, $t8 -/* 0F45C4 7F0BFA54 1420000D */ bnez $at, .Ljp7F0BFA8C -/* 0F45C8 7F0BFA58 00000000 */ nop -/* 0F45CC 7F0BFA5C 8F3983D4 */ lw $t9, %lo(g_MpSoundStateRelated)($t9) -/* 0F45D0 7F0BFA60 1720000A */ bnez $t9, .Ljp7F0BFA8C -/* 0F45D4 7F0BFA64 00000000 */ nop -/* 0F45D8 7F0BFA68 0FC3021B */ jal lvlGetControlsLockedFlag -/* 0F45DC 7F0BFA6C 00000000 */ nop -/* 0F45E0 7F0BFA70 14400006 */ bnez $v0, .Ljp7F0BFA8C -/* 0F45E4 7F0BFA74 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 0F45E8 7F0BFA78 3C068005 */ lui $a2, %hi(g_MpSoundStateRelated) # $a2, 0x8005 -/* 0F45EC 7F0BFA7C 24C683D4 */ addiu $a2, %lo(g_MpSoundStateRelated) # addiu $a2, $a2, -0x7c2c -/* 0F45F0 7F0BFA80 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F45F4 7F0BFA84 0C002386 */ jal sndPlaySfx -/* 0F45F8 7F0BFA88 240500A1 */ li $a1, 161 -.Ljp7F0BFA8C: -/* 0F45FC 7F0BFA8C 0FC3021B */ jal lvlGetControlsLockedFlag -/* 0F4600 7F0BFA90 00000000 */ nop -/* 0F4604 7F0BFA94 1040000A */ beqz $v0, .Ljp7F0BFAC0 -/* 0F4608 7F0BFA98 3C048005 */ lui $a0, %hi(g_MpSoundStateRelated) # $a0, 0x8005 -/* 0F460C 7F0BFA9C 8C8483D4 */ lw $a0, %lo(g_MpSoundStateRelated)($a0) -/* 0F4610 7F0BFAA0 10800007 */ beqz $a0, .Ljp7F0BFAC0 -/* 0F4614 7F0BFAA4 00000000 */ nop -/* 0F4618 7F0BFAA8 0C002380 */ jal sndGetPlayingState -/* 0F461C 7F0BFAAC 00000000 */ nop -/* 0F4620 7F0BFAB0 10400003 */ beqz $v0, .Ljp7F0BFAC0 -/* 0F4624 7F0BFAB4 3C048005 */ lui $a0, %hi(g_MpSoundStateRelated) # $a0, 0x8005 -/* 0F4628 7F0BFAB8 0C00240C */ jal sndDeactivate -/* 0F462C 7F0BFABC 8C8483D4 */ lw $a0, %lo(g_MpSoundStateRelated)($a0) -.Ljp7F0BFAC0: -/* 0F4630 7F0BFAC0 3C038005 */ lui $v1, %hi(g_MpTime) # $v1, 0x8005 -/* 0F4634 7F0BFAC4 8C6383CC */ lw $v1, %lo(g_MpTime)($v1) -/* 0F4638 7F0BFAC8 8FAF0184 */ lw $t7, 0x184($sp) -/* 0F463C 7F0BFACC 8FAE0180 */ lw $t6, 0x180($sp) -/* 0F4640 7F0BFAD0 01E3082A */ slt $at, $t7, $v1 -/* 0F4644 7F0BFAD4 10200005 */ beqz $at, .Ljp7F0BFAEC -/* 0F4648 7F0BFAD8 01C3082A */ slt $at, $t6, $v1 -/* 0F464C 7F0BFADC 14200003 */ bnez $at, .Ljp7F0BFAEC -/* 0F4650 7F0BFAE0 00000000 */ nop -/* 0F4654 7F0BFAE4 0FC30C78 */ jal mpCalculateAwards -/* 0F4658 7F0BFAE8 00002025 */ move $a0, $zero -.Ljp7F0BFAEC: -/* 0F465C 7F0BFAEC 3C188005 */ lui $t8, %hi(g_MpPoint) # $t8, 0x8005 -/* 0F4660 7F0BFAF0 8F1883D0 */ lw $t8, %lo(g_MpPoint)($t8) -/* 0F4664 7F0BFAF4 3C198005 */ lui $t9, %hi(g_ClockTimer) # $t9, 0x8005 -/* 0F4668 7F0BFAF8 1B00003D */ blez $t8, .Ljp7F0BFBF0 -/* 0F466C 7F0BFAFC 00000000 */ nop -/* 0F4670 7F0BFB00 8F3983A4 */ lw $t9, %lo(g_ClockTimer)($t9) -/* 0F4674 7F0BFB04 1320003A */ beqz $t9, .Ljp7F0BFBF0 -/* 0F4678 7F0BFB08 00000000 */ nop -/* 0F467C 7F0BFB0C 0FC26C01 */ jal getPlayerCount -/* 0F4680 7F0BFB10 00000000 */ nop -/* 0F4684 7F0BFB14 00403825 */ move $a3, $v0 -/* 0F4688 7F0BFB18 00002825 */ move $a1, $zero -/* 0F468C 7F0BFB1C 00003025 */ move $a2, $zero -/* 0F4690 7F0BFB20 18400029 */ blez $v0, .Ljp7F0BFBC8 -/* 0F4694 7F0BFB24 00002025 */ move $a0, $zero -/* 0F4698 7F0BFB28 3C038008 */ lui $v1, %hi(g_playerPointers) # $v1, 0x8008 -/* 0F469C 7F0BFB2C 44800000 */ mtc1 $zero, $f0 -/* 0F46A0 7F0BFB30 24639F50 */ addiu $v1, %lo(g_playerPointers) # addiu $v1, $v1, -0x60b0 -.Ljp7F0BFB34: -/* 0F46A4 7F0BFB34 8C620000 */ lw $v0, ($v1) -/* 0F46A8 7F0BFB38 8C4F00D8 */ lw $t7, 0xd8($v0) -/* 0F46AC 7F0BFB3C 51E0000E */ beql $t7, $zero, .Ljp7F0BFB78 -/* 0F46B0 7F0BFB40 AFA3001C */ sw $v1, 0x1c($sp) -/* 0F46B4 7F0BFB44 8C4E0424 */ lw $t6, 0x424($v0) -/* 0F46B8 7F0BFB48 51C0000A */ beql $t6, $zero, .Ljp7F0BFB74 -/* 0F46BC 7F0BFB4C 24A50001 */ addiu $a1, $a1, 1 -/* 0F46C0 7F0BFB50 8C580428 */ lw $t8, 0x428($v0) -/* 0F46C4 7F0BFB54 53000007 */ beql $t8, $zero, .Ljp7F0BFB74 -/* 0F46C8 7F0BFB58 24A50001 */ addiu $a1, $a1, 1 -/* 0F46CC 7F0BFB5C C44A03E4 */ lwc1 $f10, 0x3e4($v0) -/* 0F46D0 7F0BFB60 460A003E */ c.le.s $f0, $f10 -/* 0F46D4 7F0BFB64 00000000 */ nop -/* 0F46D8 7F0BFB68 45020003 */ bc1fl .Ljp7F0BFB78 -/* 0F46DC 7F0BFB6C AFA3001C */ sw $v1, 0x1c($sp) -/* 0F46E0 7F0BFB70 24A50001 */ addiu $a1, $a1, 1 -.Ljp7F0BFB74: -/* 0F46E4 7F0BFB74 AFA3001C */ sw $v1, 0x1c($sp) -.Ljp7F0BFB78: -/* 0F46E8 7F0BFB78 AFA40174 */ sw $a0, 0x174($sp) -/* 0F46EC 7F0BFB7C AFA50170 */ sw $a1, 0x170($sp) -/* 0F46F0 7F0BFB80 AFA6016C */ sw $a2, 0x16c($sp) -/* 0F46F4 7F0BFB84 0FC31162 */ jal get_points_for_mp_player -/* 0F46F8 7F0BFB88 AFA70178 */ sw $a3, 0x178($sp) -/* 0F46FC 7F0BFB8C 3C198005 */ lui $t9, %hi(g_MpPoint) # $t9, 0x8005 -/* 0F4700 7F0BFB90 8F3983D0 */ lw $t9, %lo(g_MpPoint)($t9) -/* 0F4704 7F0BFB94 44800000 */ mtc1 $zero, $f0 -/* 0F4708 7F0BFB98 8FA3001C */ lw $v1, 0x1c($sp) -/* 0F470C 7F0BFB9C 0059082A */ slt $at, $v0, $t9 -/* 0F4710 7F0BFBA0 8FA40174 */ lw $a0, 0x174($sp) -/* 0F4714 7F0BFBA4 8FA50170 */ lw $a1, 0x170($sp) -/* 0F4718 7F0BFBA8 8FA6016C */ lw $a2, 0x16c($sp) -/* 0F471C 7F0BFBAC 14200002 */ bnez $at, .Ljp7F0BFBB8 -/* 0F4720 7F0BFBB0 8FA70178 */ lw $a3, 0x178($sp) -/* 0F4724 7F0BFBB4 24C60001 */ addiu $a2, $a2, 1 -.Ljp7F0BFBB8: -/* 0F4728 7F0BFBB8 24840001 */ addiu $a0, $a0, 1 -/* 0F472C 7F0BFBBC 0087082A */ slt $at, $a0, $a3 -/* 0F4730 7F0BFBC0 1420FFDC */ bnez $at, .Ljp7F0BFB34 -/* 0F4734 7F0BFBC4 24630004 */ addiu $v1, $v1, 4 -.Ljp7F0BFBC8: -/* 0F4738 7F0BFBC8 18C00009 */ blez $a2, .Ljp7F0BFBF0 -/* 0F473C 7F0BFBCC 00000000 */ nop -/* 0F4740 7F0BFBD0 14A00005 */ bnez $a1, .Ljp7F0BFBE8 -/* 0F4744 7F0BFBD4 00000000 */ nop -/* 0F4748 7F0BFBD8 0FC30C78 */ jal mpCalculateAwards -/* 0F474C 7F0BFBDC 00002025 */ move $a0, $zero -/* 0F4750 7F0BFBE0 10000003 */ b .Ljp7F0BFBF0 -/* 0F4754 7F0BFBE4 00000000 */ nop -.Ljp7F0BFBE8: -/* 0F4758 7F0BFBE8 0FC30C74 */ jal mpwatchSetStopPlayFlag -/* 0F475C 7F0BFBEC 00000000 */ nop -.Ljp7F0BFBF0: -/* 0F4760 7F0BFBF0 0FC05202 */ jal get_scenario -/* 0F4764 7F0BFBF4 00000000 */ nop -/* 0F4768 7F0BFBF8 24010001 */ li $at, 1 -/* 0F476C 7F0BFBFC 14410086 */ bne $v0, $at, .Ljp7F0BFE18 -/* 0F4770 7F0BFC00 3C0F8005 */ lui $t7, %hi(g_ClockTimer) # $t7, 0x8005 -/* 0F4774 7F0BFC04 8DEF83A4 */ lw $t7, %lo(g_ClockTimer)($t7) -/* 0F4778 7F0BFC08 11E00083 */ beqz $t7, .Ljp7F0BFE18 -/* 0F477C 7F0BFC0C 00000000 */ nop -/* 0F4780 7F0BFC10 0FC26C01 */ jal getPlayerCount -/* 0F4784 7F0BFC14 00000000 */ nop -/* 0F4788 7F0BFC18 44800000 */ mtc1 $zero, $f0 -/* 0F478C 7F0BFC1C 00405025 */ move $t2, $v0 -/* 0F4790 7F0BFC20 00006825 */ move $t5, $zero -/* 0F4794 7F0BFC24 0000F825 */ move $ra, $zero -/* 0F4798 7F0BFC28 1840006E */ blez $v0, .Ljp7F0BFDE4 -/* 0F479C 7F0BFC2C 00006025 */ move $t4, $zero -/* 0F47A0 7F0BFC30 00002825 */ move $a1, $zero -.Ljp7F0BFC34: -/* 0F47A4 7F0BFC34 00003025 */ move $a2, $zero -/* 0F47A8 7F0BFC38 18400048 */ blez $v0, .Ljp7F0BFD5C -/* 0F47AC 7F0BFC3C 00003825 */ move $a3, $zero -/* 0F47B0 7F0BFC40 30490003 */ andi $t1, $v0, 3 -/* 0F47B4 7F0BFC44 11200019 */ beqz $t1, .Ljp7F0BFCAC -/* 0F47B8 7F0BFC48 000C5880 */ sll $t3, $t4, 2 -/* 0F47BC 7F0BFC4C 3C188008 */ lui $t8, %hi(g_playerPointers) # $t8, 0x8008 -/* 0F47C0 7F0BFC50 27189F50 */ addiu $t8, %lo(g_playerPointers) # addiu $t8, $t8, -0x60b0 -/* 0F47C4 7F0BFC54 00007080 */ sll $t6, $zero, 2 -/* 0F47C8 7F0BFC58 0000C8C0 */ sll $t9, $zero, 3 -/* 0F47CC 7F0BFC5C 0320C823 */ subu $t9, $t9, $zero -/* 0F47D0 7F0BFC60 01D81821 */ addu $v1, $t6, $t8 -/* 0F47D4 7F0BFC64 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) # $t6, 0x8008 -/* 0F47D8 7F0BFC68 0019C900 */ sll $t9, $t9, 4 -/* 0F47DC 7F0BFC6C 032B7821 */ addu $t7, $t9, $t3 -/* 0F47E0 7F0BFC70 25CE9F60 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x60a0 -/* 0F47E4 7F0BFC74 01EE2021 */ addu $a0, $t7, $t6 -/* 0F47E8 7F0BFC78 01204025 */ move $t0, $t1 -.Ljp7F0BFC7C: -/* 0F47EC 7F0BFC7C 8C780000 */ lw $t8, ($v1) -/* 0F47F0 7F0BFC80 24E70001 */ addiu $a3, $a3, 1 -/* 0F47F4 7F0BFC84 24630004 */ addiu $v1, $v1, 4 -/* 0F47F8 7F0BFC88 8F1900D8 */ lw $t9, 0xd8($t8) -/* 0F47FC 7F0BFC8C 57200003 */ bnezl $t9, .Ljp7F0BFC9C -/* 0F4800 7F0BFC90 8C8F0024 */ lw $t7, 0x24($a0) -/* 0F4804 7F0BFC94 24C60001 */ addiu $a2, $a2, 1 -/* 0F4808 7F0BFC98 8C8F0024 */ lw $t7, 0x24($a0) -.Ljp7F0BFC9C: -/* 0F480C 7F0BFC9C 24840070 */ addiu $a0, $a0, 0x70 -/* 0F4810 7F0BFCA0 1507FFF6 */ bne $t0, $a3, .Ljp7F0BFC7C -/* 0F4814 7F0BFCA4 00AF2821 */ addu $a1, $a1, $t7 -/* 0F4818 7F0BFCA8 10E2002C */ beq $a3, $v0, .Ljp7F0BFD5C -.Ljp7F0BFCAC: -/* 0F481C 7F0BFCAC 3C188008 */ lui $t8, %hi(g_playerPointers) # $t8, 0x8008 -/* 0F4820 7F0BFCB0 0007C8C0 */ sll $t9, $a3, 3 -/* 0F4824 7F0BFCB4 0327C823 */ subu $t9, $t9, $a3 -/* 0F4828 7F0BFCB8 27189F50 */ addiu $t8, %lo(g_playerPointers) # addiu $t8, $t8, -0x60b0 -/* 0F482C 7F0BFCBC 00077080 */ sll $t6, $a3, 2 -/* 0F4830 7F0BFCC0 01D81821 */ addu $v1, $t6, $t8 -/* 0F4834 7F0BFCC4 0019C900 */ sll $t9, $t9, 4 -/* 0F4838 7F0BFCC8 032B7821 */ addu $t7, $t9, $t3 -/* 0F483C 7F0BFCCC 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) # $t6, 0x8008 -/* 0F4840 7F0BFCD0 25CE9F60 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x60a0 -/* 0F4844 7F0BFCD4 000AC880 */ sll $t9, $t2, 2 -/* 0F4848 7F0BFCD8 03384021 */ addu $t0, $t9, $t8 -/* 0F484C 7F0BFCDC 01EE2021 */ addu $a0, $t7, $t6 -.Ljp7F0BFCE0: -/* 0F4850 7F0BFCE0 8C6F0000 */ lw $t7, ($v1) -/* 0F4854 7F0BFCE4 8DEE00D8 */ lw $t6, 0xd8($t7) -/* 0F4858 7F0BFCE8 55C00003 */ bnezl $t6, .Ljp7F0BFCF8 -/* 0F485C 7F0BFCEC 8C780004 */ lw $t8, 4($v1) -/* 0F4860 7F0BFCF0 24C60001 */ addiu $a2, $a2, 1 -/* 0F4864 7F0BFCF4 8C780004 */ lw $t8, 4($v1) -.Ljp7F0BFCF8: -/* 0F4868 7F0BFCF8 8C990024 */ lw $t9, 0x24($a0) -/* 0F486C 7F0BFCFC 8F0F00D8 */ lw $t7, 0xd8($t8) -/* 0F4870 7F0BFD00 00B92821 */ addu $a1, $a1, $t9 -/* 0F4874 7F0BFD04 55E00003 */ bnezl $t7, .Ljp7F0BFD14 -/* 0F4878 7F0BFD08 8C790008 */ lw $t9, 8($v1) -/* 0F487C 7F0BFD0C 24C60001 */ addiu $a2, $a2, 1 -/* 0F4880 7F0BFD10 8C790008 */ lw $t9, 8($v1) -.Ljp7F0BFD14: -/* 0F4884 7F0BFD14 8C8E0094 */ lw $t6, 0x94($a0) -/* 0F4888 7F0BFD18 8F3800D8 */ lw $t8, 0xd8($t9) -/* 0F488C 7F0BFD1C 00AE2821 */ addu $a1, $a1, $t6 -/* 0F4890 7F0BFD20 57000003 */ bnezl $t8, .Ljp7F0BFD30 -/* 0F4894 7F0BFD24 8C6E000C */ lw $t6, 0xc($v1) -/* 0F4898 7F0BFD28 24C60001 */ addiu $a2, $a2, 1 -/* 0F489C 7F0BFD2C 8C6E000C */ lw $t6, 0xc($v1) -.Ljp7F0BFD30: -/* 0F48A0 7F0BFD30 8C8F0104 */ lw $t7, 0x104($a0) -/* 0F48A4 7F0BFD34 24630010 */ addiu $v1, $v1, 0x10 -/* 0F48A8 7F0BFD38 8DD900D8 */ lw $t9, 0xd8($t6) -/* 0F48AC 7F0BFD3C 00AF2821 */ addu $a1, $a1, $t7 -/* 0F48B0 7F0BFD40 57200003 */ bnezl $t9, .Ljp7F0BFD50 -/* 0F48B4 7F0BFD44 8C980174 */ lw $t8, 0x174($a0) -/* 0F48B8 7F0BFD48 24C60001 */ addiu $a2, $a2, 1 -/* 0F48BC 7F0BFD4C 8C980174 */ lw $t8, 0x174($a0) -.Ljp7F0BFD50: -/* 0F48C0 7F0BFD50 248401C0 */ addiu $a0, $a0, 0x1c0 -/* 0F48C4 7F0BFD54 1468FFE2 */ bne $v1, $t0, .Ljp7F0BFCE0 -/* 0F48C8 7F0BFD58 00B82821 */ addu $a1, $a1, $t8 -.Ljp7F0BFD5C: -/* 0F48CC 7F0BFD5C 28A10002 */ slti $at, $a1, 2 -/* 0F48D0 7F0BFD60 1420001C */ bnez $at, .Ljp7F0BFDD4 -/* 0F48D4 7F0BFD64 000C78C0 */ sll $t7, $t4, 3 -/* 0F48D8 7F0BFD68 01EC7823 */ subu $t7, $t7, $t4 -/* 0F48DC 7F0BFD6C 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) # $t6, 0x8008 -/* 0F48E0 7F0BFD70 25CE9F60 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x60a0 -/* 0F48E4 7F0BFD74 000F7900 */ sll $t7, $t7, 4 -/* 0F48E8 7F0BFD78 01EE1821 */ addu $v1, $t7, $t6 -/* 0F48EC 7F0BFD7C 906F0068 */ lbu $t7, 0x68($v1) -/* 0F48F0 7F0BFD80 3C188008 */ lui $t8, %hi(g_playerPointers) # $t8, 0x8008 -/* 0F48F4 7F0BFD84 27189F50 */ addiu $t8, %lo(g_playerPointers) # addiu $t8, $t8, -0x60b0 -/* 0F48F8 7F0BFD88 000CC880 */ sll $t9, $t4, 2 -/* 0F48FC 7F0BFD8C 15E00003 */ bnez $t7, .Ljp7F0BFD9C -/* 0F4900 7F0BFD90 03382021 */ addu $a0, $t9, $t8 -/* 0F4904 7F0BFD94 24CE0001 */ addiu $t6, $a2, 1 -/* 0F4908 7F0BFD98 A06E0068 */ sb $t6, 0x68($v1) -.Ljp7F0BFD9C: -/* 0F490C 7F0BFD9C 8C830000 */ lw $v1, ($a0) -/* 0F4910 7F0BFDA0 25AD0001 */ addiu $t5, $t5, 1 -/* 0F4914 7F0BFDA4 8C790424 */ lw $t9, 0x424($v1) -/* 0F4918 7F0BFDA8 5320000B */ beql $t9, $zero, .Ljp7F0BFDD8 -/* 0F491C 7F0BFDAC 258C0001 */ addiu $t4, $t4, 1 -/* 0F4920 7F0BFDB0 8C780428 */ lw $t8, 0x428($v1) -/* 0F4924 7F0BFDB4 53000008 */ beql $t8, $zero, .Ljp7F0BFDD8 -/* 0F4928 7F0BFDB8 258C0001 */ addiu $t4, $t4, 1 -/* 0F492C 7F0BFDBC C47003E4 */ lwc1 $f16, 0x3e4($v1) -/* 0F4930 7F0BFDC0 4600803C */ c.lt.s $f16, $f0 -/* 0F4934 7F0BFDC4 00000000 */ nop -/* 0F4938 7F0BFDC8 45020003 */ bc1fl .Ljp7F0BFDD8 -/* 0F493C 7F0BFDCC 258C0001 */ addiu $t4, $t4, 1 -/* 0F4940 7F0BFDD0 27FF0001 */ addiu $ra, $ra, 1 -.Ljp7F0BFDD4: -/* 0F4944 7F0BFDD4 258C0001 */ addiu $t4, $t4, 1 -.Ljp7F0BFDD8: -/* 0F4948 7F0BFDD8 018A082A */ slt $at, $t4, $t2 -/* 0F494C 7F0BFDDC 5420FF95 */ bnezl $at, .Ljp7F0BFC34 -/* 0F4950 7F0BFDE0 00002825 */ move $a1, $zero -.Ljp7F0BFDE4: -/* 0F4954 7F0BFDE4 2443FFFF */ addiu $v1, $v0, -1 -/* 0F4958 7F0BFDE8 03E3082A */ slt $at, $ra, $v1 -/* 0F495C 7F0BFDEC 54200006 */ bnezl $at, .Ljp7F0BFE08 -/* 0F4960 7F0BFDF0 01A3082A */ slt $at, $t5, $v1 -/* 0F4964 7F0BFDF4 0FC30C78 */ jal mpCalculateAwards -/* 0F4968 7F0BFDF8 00002025 */ move $a0, $zero -/* 0F496C 7F0BFDFC 10000006 */ b .Ljp7F0BFE18 -/* 0F4970 7F0BFE00 00000000 */ nop -/* 0F4974 7F0BFE04 01A3082A */ slt $at, $t5, $v1 -.Ljp7F0BFE08: -/* 0F4978 7F0BFE08 14200003 */ bnez $at, .Ljp7F0BFE18 -/* 0F497C 7F0BFE0C 00000000 */ nop -/* 0F4980 7F0BFE10 0FC30C74 */ jal mpwatchSetStopPlayFlag -/* 0F4984 7F0BFE14 00000000 */ nop -.Ljp7F0BFE18: -/* 0F4988 7F0BFE18 3C028005 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8005 -/* 0F498C 7F0BFE1C 3C0F8005 */ lui $t7, %hi(D_80048394) # $t7, 0x8005 -/* 0F4990 7F0BFE20 8DEF83C8 */ lw $t7, %lo(D_80048394)($t7) -/* 0F4994 7F0BFE24 8C4283A4 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0F4998 7F0BFE28 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0F499C 7F0BFE2C 44810000 */ mtc1 $at, $f0 -/* 0F49A0 7F0BFE30 01E27021 */ addu $t6, $t7, $v0 -/* 0F49A4 7F0BFE34 448E9000 */ mtc1 $t6, $f18 -/* 0F49A8 7F0BFE38 3C018005 */ lui $at, %hi(D_80048394) # $at, 0x8005 -/* 0F49AC 7F0BFE3C AC2E83C8 */ sw $t6, %lo(D_80048394)($at) -/* 0F49B0 7F0BFE40 46809120 */ cvt.s.w $f4, $f18 -/* 0F49B4 7F0BFE44 3C038005 */ lui $v1, %hi(D_800483A8) # $v1, 0x8005 -/* 0F49B8 7F0BFE48 3C018005 */ lui $at, %hi(g_CurrentMultiPlayerSec) # $at, 0x8005 -/* 0F49BC 7F0BFE4C 246383DC */ addiu $v1, %lo(D_800483A8) # addiu $v1, $v1, -0x7c24 -/* 0F49C0 7F0BFE50 00002025 */ move $a0, $zero -/* 0F49C4 7F0BFE54 3405FFFF */ li $a1, 65535 -/* 0F49C8 7F0BFE58 46002183 */ div.s $f6, $f4, $f0 -/* 0F49CC 7F0BFE5C E42683D8 */ swc1 $f6, %lo(g_CurrentMultiPlayerSec)($at) -/* 0F49D0 7F0BFE60 8C790000 */ lw $t9, ($v1) -/* 0F49D4 7F0BFE64 3C018005 */ lui $at, %hi(g_CurrentMultiPlayerMin) # $at, 0x8005 -/* 0F49D8 7F0BFE68 03227821 */ addu $t7, $t9, $v0 -/* 0F49DC 7F0BFE6C 448F4000 */ mtc1 $t7, $f8 -/* 0F49E0 7F0BFE70 AC6F0000 */ sw $t7, ($v1) -/* 0F49E4 7F0BFE74 468042A0 */ cvt.s.w $f10, $f8 -/* 0F49E8 7F0BFE78 46005403 */ div.s $f16, $f10, $f0 -/* 0F49EC 7F0BFE7C 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F49F0 7F0BFE80 E43083E0 */ swc1 $f16, %lo(g_CurrentMultiPlayerMin)($at) -/* 0F49F4 7F0BFE84 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0F49F8 7F0BFE88 44810000 */ mtc1 $at, $f0 -/* 0F49FC 7F0BFE8C 10400009 */ beqz $v0, .Ljp7F0BFEB4 -/* 0F4A00 7F0BFE90 3C038005 */ lui $v1, %hi(D_80048390) -/* 0F4A04 7F0BFE94 3C038005 */ lui $v1, %hi(D_80048390) # $v1, 0x8005 -/* 0F4A08 7F0BFE98 3C018005 */ lui $at, %hi(D_80048388) # $at, 0x8005 -/* 0F4A0C 7F0BFE9C 246383C4 */ addiu $v1, %lo(D_80048390) # addiu $v1, $v1, -0x7c3c -/* 0F4A10 7F0BFEA0 AC2083BC */ sw $zero, %lo(D_80048388)($at) -/* 0F4A14 7F0BFEA4 AC600000 */ sw $zero, ($v1) -/* 0F4A18 7F0BFEA8 3C028005 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8005 -/* 0F4A1C 7F0BFEAC 1000000C */ b .Ljp7F0BFEE0 -/* 0F4A20 7F0BFEB0 8C4283A4 */ lw $v0, %lo(g_ClockTimer)($v0) -.Ljp7F0BFEB4: -/* 0F4A24 7F0BFEB4 246383C4 */ addiu $v1, $v1, %lo(D_80048390) -/* 0F4A28 7F0BFEB8 3C028005 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8005 -/* 0F4A2C 7F0BFEBC 8C4283A4 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0F4A30 7F0BFEC0 8C6E0000 */ lw $t6, ($v1) -/* 0F4A34 7F0BFEC4 240F0001 */ li $t7, 1 -/* 0F4A38 7F0BFEC8 01C2C821 */ addu $t9, $t6, $v0 -/* 0F4A3C 7F0BFECC 2B210708 */ slti $at, $t9, 0x708 -/* 0F4A40 7F0BFED0 14200003 */ bnez $at, .Ljp7F0BFEE0 -/* 0F4A44 7F0BFED4 AC790000 */ sw $t9, ($v1) -/* 0F4A48 7F0BFED8 3C018005 */ lui $at, %hi(D_80048388) # $at, 0x8005 -/* 0F4A4C 7F0BFEDC AC2F83BC */ sw $t7, %lo(D_80048388)($at) -.Ljp7F0BFEE0: -/* 0F4A50 7F0BFEE0 3C0E8005 */ lui $t6, %hi(D_80048388) # $t6, 0x8005 -/* 0F4A54 7F0BFEE4 8DCE83BC */ lw $t6, %lo(D_80048388)($t6) -/* 0F4A58 7F0BFEE8 3C038005 */ lui $v1, %hi(D_8004838C) # $v1, 0x8005 -/* 0F4A5C 7F0BFEEC 246383C0 */ addiu $v1, %lo(D_8004838C) # addiu $v1, $v1, -0x7c40 -/* 0F4A60 7F0BFEF0 11C00005 */ beqz $t6, .Ljp7F0BFF08 -/* 0F4A64 7F0BFEF4 00000000 */ nop -/* 0F4A68 7F0BFEF8 8C790000 */ lw $t9, ($v1) -/* 0F4A6C 7F0BFEFC 0322C021 */ addu $t8, $t9, $v0 -/* 0F4A70 7F0BFF00 10000015 */ b .Ljp7F0BFF58 -/* 0F4A74 7F0BFF04 AC780000 */ sw $t8, ($v1) -.Ljp7F0BFF08: -/* 0F4A78 7F0BFF08 3C038005 */ lui $v1, %hi(D_800483B0) # $v1, 0x8005 -/* 0F4A7C 7F0BFF0C 246383E4 */ addiu $v1, %lo(D_800483B0) # addiu $v1, $v1, -0x7c1c -/* 0F4A80 7F0BFF10 8C6F0000 */ lw $t7, ($v1) -/* 0F4A84 7F0BFF14 3C048005 */ lui $a0, %hi(D_800483B8) # $a0, 0x8005 -/* 0F4A88 7F0BFF18 3C018005 */ lui $at, %hi(g_StageTimeSec) # $at, 0x8005 -/* 0F4A8C 7F0BFF1C 01E2C821 */ addu $t9, $t7, $v0 -/* 0F4A90 7F0BFF20 44999000 */ mtc1 $t9, $f18 -/* 0F4A94 7F0BFF24 AC790000 */ sw $t9, ($v1) -/* 0F4A98 7F0BFF28 248483EC */ addiu $a0, %lo(D_800483B8) # addiu $a0, $a0, -0x7c14 -/* 0F4A9C 7F0BFF2C 46809120 */ cvt.s.w $f4, $f18 -/* 0F4AA0 7F0BFF30 46002183 */ div.s $f6, $f4, $f0 -/* 0F4AA4 7F0BFF34 E42683E8 */ swc1 $f6, %lo(g_StageTimeSec)($at) -/* 0F4AA8 7F0BFF38 8C980000 */ lw $t8, ($a0) -/* 0F4AAC 7F0BFF3C 3C018005 */ lui $at, %hi(g_PowerOnTimeSec) # $at, 0x8005 -/* 0F4AB0 7F0BFF40 03027021 */ addu $t6, $t8, $v0 -/* 0F4AB4 7F0BFF44 448E4000 */ mtc1 $t6, $f8 -/* 0F4AB8 7F0BFF48 AC8E0000 */ sw $t6, ($a0) -/* 0F4ABC 7F0BFF4C 468042A0 */ cvt.s.w $f10, $f8 -/* 0F4AC0 7F0BFF50 46005403 */ div.s $f16, $f10, $f0 -/* 0F4AC4 7F0BFF54 E43083F0 */ swc1 $f16, %lo(g_PowerOnTimeSec)($at) -.Ljp7F0BFF58: -/* 0F4AC8 7F0BFF58 0C00114D */ jal viSetUseZBuf -/* 0F4ACC 7F0BFF5C 24040001 */ li $a0, 1 -/* 0F4AD0 7F0BFF60 3C198005 */ lui $t9, %hi(g_CurrentStageToLoad) # $t9, 0x8005 -/* 0F4AD4 7F0BFF64 8F398394 */ lw $t9, %lo(g_CurrentStageToLoad)($t9) -/* 0F4AD8 7F0BFF68 2401005A */ li $at, 90 -/* 0F4ADC 7F0BFF6C 17210009 */ bne $t9, $at, .Ljp7F0BFF94 -/* 0F4AE0 7F0BFF70 00000000 */ nop -/* 0F4AE4 7F0BFF74 0FC24907 */ jal cheat_buttons_mp_related -/* 0F4AE8 7F0BFF78 00000000 */ nop -/* 0F4AEC 7F0BFF7C 0FC069F4 */ jal menu_init -/* 0F4AF0 7F0BFF80 00000000 */ nop -/* 0F4AF4 7F0BFF84 0FC3097C */ jal langTick -/* 0F4AF8 7F0BFF88 00000000 */ nop -/* 0F4AFC 7F0BFF8C 100000A9 */ b .Ljp7F0C0234 -/* 0F4B00 7F0BFF90 00000000 */ nop -.Ljp7F0BFF94: -/* 0F4B04 7F0BFF94 0FC271D7 */ jal sub_GAME_7F09BBBC -/* 0F4B08 7F0BFF98 00000000 */ nop -/* 0F4B0C 7F0BFF9C 0FC2FD2D */ jal lvlSetMultipliersForDifficulty -/* 0F4B10 7F0BFFA0 00000000 */ nop -/* 0F4B14 7F0BFFA4 0FC2F4E1 */ jal updateRoomStatusFlags -/* 0F4B18 7F0BFFA8 00000000 */ nop -/* 0F4B1C 7F0BFFAC 0FC24E7C */ jal sub_GAME_7F092E50 -/* 0F4B20 7F0BFFB0 00000000 */ nop -/* 0F4B24 7F0BFFB4 0FC253F6 */ jal skyTick -/* 0F4B28 7F0BFFB8 00000000 */ nop -/* 0F4B2C 7F0BFFBC 0FC294E7 */ jal update_bullet_sparks_and_dust_clouds -/* 0F4B30 7F0BFFC0 00000000 */ nop -/* 0F4B34 7F0BFFC4 0FC1A516 */ jal update_bullet_casings -/* 0F4B38 7F0BFFC8 00000000 */ nop -/* 0F4B3C 7F0BFFCC 0FC28D1D */ jal update_broken_windows -/* 0F4B40 7F0BFFD0 00000000 */ nop -/* 0F4B44 7F0BFFD4 0FC28238 */ jal explosionUpdateFlyingParticles -/* 0F4B48 7F0BFFD8 00000000 */ nop -/* 0F4B4C 7F0BFFDC 0FC0F252 */ jal handle_mp_respawn_and_some_things -/* 0F4B50 7F0BFFE0 00000000 */ nop -/* 0F4B54 7F0BFFE4 0FC3081E */ jal reset_all_music_slots -/* 0F4B58 7F0BFFE8 00000000 */ nop -/* 0F4B5C 7F0BFFEC 0FC3097C */ jal langTick -/* 0F4B60 7F0BFFF0 00000000 */ nop -/* 0F4B64 7F0BFFF4 0FC246A6 */ jal get_debug_joy2detailedit_flag -/* 0F4B68 7F0BFFF8 00000000 */ nop -/* 0F4B6C 7F0BFFFC 1040004D */ beqz $v0, .Ljp7F0C0134 -/* 0F4B70 7F0C0000 3C068005 */ lui $a2, %hi(D_800483C8) # $a2, 0x8005 -/* 0F4B74 7F0C0004 24C683FC */ addiu $a2, %lo(D_800483C8) # addiu $a2, $a2, -0x7c04 -/* 0F4B78 7F0C0008 8CD80000 */ lw $t8, ($a2) -/* 0F4B7C 7F0C000C 24043000 */ li $a0, 12288 -/* 0F4B80 7F0C0010 17000048 */ bnez $t8, .Ljp7F0C0134 -/* 0F4B84 7F0C0014 00000000 */ nop -/* 0F4B88 7F0C0018 0C0025CC */ jal mempAllocBytesInBank -/* 0F4B8C 7F0C001C 24050004 */ li $a1, 4 -/* 0F4B90 7F0C0020 3C068005 */ lui $a2, %hi(D_800483C8) # $a2, 0x8005 -/* 0F4B94 7F0C0024 24C683FC */ addiu $a2, %lo(D_800483C8) # addiu $a2, $a2, -0x7c04 -/* 0F4B98 7F0C0028 10400042 */ beqz $v0, .Ljp7F0C0134 -/* 0F4B9C 7F0C002C ACC20000 */ sw $v0, ($a2) -/* 0F4BA0 7F0C0030 00001825 */ move $v1, $zero -/* 0F4BA4 7F0C0034 24052EE0 */ li $a1, 12000 -/* 0F4BA8 7F0C0038 240400FF */ li $a0, 255 -.Ljp7F0C003C: -/* 0F4BAC 7F0C003C 8CCE0000 */ lw $t6, ($a2) -/* 0F4BB0 7F0C0040 01C3C821 */ addu $t9, $t6, $v1 -/* 0F4BB4 7F0C0044 A3240000 */ sb $a0, ($t9) -/* 0F4BB8 7F0C0048 8CD80000 */ lw $t8, ($a2) -/* 0F4BBC 7F0C004C 03031021 */ addu $v0, $t8, $v1 -/* 0F4BC0 7F0C0050 904F0001 */ lbu $t7, 1($v0) -/* 0F4BC4 7F0C0054 31EEFF1F */ andi $t6, $t7, 0xff1f -/* 0F4BC8 7F0C0058 35D90020 */ ori $t9, $t6, 0x20 -/* 0F4BCC 7F0C005C A0590001 */ sb $t9, 1($v0) -/* 0F4BD0 7F0C0060 8CD80000 */ lw $t8, ($a2) -/* 0F4BD4 7F0C0064 03031021 */ addu $v0, $t8, $v1 -/* 0F4BD8 7F0C0068 904F0001 */ lbu $t7, 1($v0) -/* 0F4BDC 7F0C006C 31EEFFE3 */ andi $t6, $t7, 0xffe3 -/* 0F4BE0 7F0C0070 35D90004 */ ori $t9, $t6, 4 -/* 0F4BE4 7F0C0074 A0590001 */ sb $t9, 1($v0) -/* 0F4BE8 7F0C0078 8CD80000 */ lw $t8, ($a2) -/* 0F4BEC 7F0C007C 03037821 */ addu $t7, $t8, $v1 -/* 0F4BF0 7F0C0080 A1E40004 */ sb $a0, 4($t7) -/* 0F4BF4 7F0C0084 8CCE0000 */ lw $t6, ($a2) -/* 0F4BF8 7F0C0088 01C31021 */ addu $v0, $t6, $v1 -/* 0F4BFC 7F0C008C 90590005 */ lbu $t9, 5($v0) -/* 0F4C00 7F0C0090 3338FF1F */ andi $t8, $t9, 0xff1f -/* 0F4C04 7F0C0094 370F0020 */ ori $t7, $t8, 0x20 -/* 0F4C08 7F0C0098 A04F0005 */ sb $t7, 5($v0) -/* 0F4C0C 7F0C009C 8CCE0000 */ lw $t6, ($a2) -/* 0F4C10 7F0C00A0 01C31021 */ addu $v0, $t6, $v1 -/* 0F4C14 7F0C00A4 90590005 */ lbu $t9, 5($v0) -/* 0F4C18 7F0C00A8 3338FFE3 */ andi $t8, $t9, 0xffe3 -/* 0F4C1C 7F0C00AC 370F0004 */ ori $t7, $t8, 4 -/* 0F4C20 7F0C00B0 A04F0005 */ sb $t7, 5($v0) -/* 0F4C24 7F0C00B4 8CCE0000 */ lw $t6, ($a2) -/* 0F4C28 7F0C00B8 01C3C821 */ addu $t9, $t6, $v1 -/* 0F4C2C 7F0C00BC A3240008 */ sb $a0, 8($t9) -/* 0F4C30 7F0C00C0 8CD80000 */ lw $t8, ($a2) -/* 0F4C34 7F0C00C4 03031021 */ addu $v0, $t8, $v1 -/* 0F4C38 7F0C00C8 904F0009 */ lbu $t7, 9($v0) -/* 0F4C3C 7F0C00CC 31EEFF1F */ andi $t6, $t7, 0xff1f -/* 0F4C40 7F0C00D0 35D90020 */ ori $t9, $t6, 0x20 -/* 0F4C44 7F0C00D4 A0590009 */ sb $t9, 9($v0) -/* 0F4C48 7F0C00D8 8CD80000 */ lw $t8, ($a2) -/* 0F4C4C 7F0C00DC 03031021 */ addu $v0, $t8, $v1 -/* 0F4C50 7F0C00E0 904F0009 */ lbu $t7, 9($v0) -/* 0F4C54 7F0C00E4 31EEFFE3 */ andi $t6, $t7, 0xffe3 -/* 0F4C58 7F0C00E8 35D90004 */ ori $t9, $t6, 4 -/* 0F4C5C 7F0C00EC A0590009 */ sb $t9, 9($v0) -/* 0F4C60 7F0C00F0 8CD80000 */ lw $t8, ($a2) -/* 0F4C64 7F0C00F4 03037821 */ addu $t7, $t8, $v1 -/* 0F4C68 7F0C00F8 A1E4000C */ sb $a0, 0xc($t7) -/* 0F4C6C 7F0C00FC 8CCE0000 */ lw $t6, ($a2) -/* 0F4C70 7F0C0100 01C31021 */ addu $v0, $t6, $v1 -/* 0F4C74 7F0C0104 9059000D */ lbu $t9, 0xd($v0) -/* 0F4C78 7F0C0108 3338FF1F */ andi $t8, $t9, 0xff1f -/* 0F4C7C 7F0C010C 370F0020 */ ori $t7, $t8, 0x20 -/* 0F4C80 7F0C0110 A04F000D */ sb $t7, 0xd($v0) -/* 0F4C84 7F0C0114 8CCE0000 */ lw $t6, ($a2) -/* 0F4C88 7F0C0118 01C31021 */ addu $v0, $t6, $v1 -/* 0F4C8C 7F0C011C 9059000D */ lbu $t9, 0xd($v0) -/* 0F4C90 7F0C0120 24630010 */ addiu $v1, $v1, 0x10 -/* 0F4C94 7F0C0124 3338FFE3 */ andi $t8, $t9, 0xffe3 -/* 0F4C98 7F0C0128 370F0004 */ ori $t7, $t8, 4 -/* 0F4C9C 7F0C012C 1465FFC3 */ bne $v1, $a1, .Ljp7F0C003C -/* 0F4CA0 7F0C0130 A04F000D */ sb $t7, 0xd($v0) -.Ljp7F0C0134: -/* 0F4CA4 7F0C0134 0FC246C7 */ jal get_debug_portal_flag -/* 0F4CA8 7F0C0138 00000000 */ nop -/* 0F4CAC 7F0C013C 10400003 */ beqz $v0, .Ljp7F0C014C -/* 0F4CB0 7F0C0140 00000000 */ nop -/* 0F4CB4 7F0C0144 0FC2FAB4 */ jal lvlPortalDebug7F0BDF10 -/* 0F4CB8 7F0C0148 00002025 */ move $a0, $zero -.Ljp7F0C014C: -/* 0F4CBC 7F0C014C 0FC2467D */ jal getDebugMode -/* 0F4CC0 7F0C0150 00000000 */ nop -/* 0F4CC4 7F0C0154 24010004 */ li $at, 4 -/* 0F4CC8 7F0C0158 10410006 */ beq $v0, $at, .Ljp7F0C0174 -/* 0F4CCC 7F0C015C 00002025 */ move $a0, $zero -/* 0F4CD0 7F0C0160 24010008 */ li $at, 8 -/* 0F4CD4 7F0C0164 1041001A */ beq $v0, $at, .Ljp7F0C01D0 -/* 0F4CD8 7F0C0168 00002025 */ move $a0, $zero -/* 0F4CDC 7F0C016C 10000031 */ b .Ljp7F0C0234 -/* 0F4CE0 7F0C0170 00000000 */ nop -.Ljp7F0C0174: -/* 0F4CE4 7F0C0174 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4CE8 7F0C0178 24050002 */ li $a1, 2 -/* 0F4CEC 7F0C017C 50400008 */ beql $v0, $zero, .Ljp7F0C01A0 -/* 0F4CF0 7F0C0180 00002025 */ move $a0, $zero -/* 0F4CF4 7F0C0184 0FC2C078 */ jal sub_GAME_7F0AF630 -/* 0F4CF8 7F0C0188 2404FFFF */ li $a0, -1 -/* 0F4CFC 7F0C018C 00002025 */ move $a0, $zero -/* 0F4D00 7F0C0190 00002825 */ move $a1, $zero -/* 0F4D04 7F0C0194 0FC2CE3A */ jal debugStanView -/* 0F4D08 7F0C0198 00003025 */ move $a2, $zero -/* 0F4D0C 7F0C019C 00002025 */ move $a0, $zero -.Ljp7F0C01A0: -/* 0F4D10 7F0C01A0 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4D14 7F0C01A4 24050001 */ li $a1, 1 -/* 0F4D18 7F0C01A8 10400022 */ beqz $v0, .Ljp7F0C0234 -/* 0F4D1C 7F0C01AC 00000000 */ nop -/* 0F4D20 7F0C01B0 0FC2C078 */ jal sub_GAME_7F0AF630 -/* 0F4D24 7F0C01B4 24040001 */ li $a0, 1 -/* 0F4D28 7F0C01B8 00002025 */ move $a0, $zero -/* 0F4D2C 7F0C01BC 00002825 */ move $a1, $zero -/* 0F4D30 7F0C01C0 0FC2CE3A */ jal debugStanView -/* 0F4D34 7F0C01C4 00003025 */ move $a2, $zero -/* 0F4D38 7F0C01C8 1000001A */ b .Ljp7F0C0234 -/* 0F4D3C 7F0C01CC 00000000 */ nop -.Ljp7F0C01D0: -/* 0F4D40 7F0C01D0 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4D44 7F0C01D4 24050002 */ li $a1, 2 -/* 0F4D48 7F0C01D8 50400004 */ beql $v0, $zero, .Ljp7F0C01EC -/* 0F4D4C 7F0C01DC 00002025 */ move $a0, $zero -/* 0F4D50 7F0C01E0 0FC08C46 */ jal chrDecrementAnimationTablePointerCount -/* 0F4D54 7F0C01E4 00000000 */ nop -/* 0F4D58 7F0C01E8 00002025 */ move $a0, $zero -.Ljp7F0C01EC: -/* 0F4D5C 7F0C01EC 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4D60 7F0C01F0 24050001 */ li $a1, 1 -/* 0F4D64 7F0C01F4 50400004 */ beql $v0, $zero, .Ljp7F0C0208 -/* 0F4D68 7F0C01F8 00002025 */ move $a0, $zero -/* 0F4D6C 7F0C01FC 0FC08C5E */ jal chrIncrementAnimationTablePointerCount -/* 0F4D70 7F0C0200 00000000 */ nop -/* 0F4D74 7F0C0204 00002025 */ move $a0, $zero -.Ljp7F0C0208: -/* 0F4D78 7F0C0208 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4D7C 7F0C020C 24050020 */ li $a1, 32 -/* 0F4D80 7F0C0210 50400004 */ beql $v0, $zero, .Ljp7F0C0224 -/* 0F4D84 7F0C0214 00002025 */ move $a0, $zero -/* 0F4D88 7F0C0218 0FC08C6C */ jal chrToggleD_8002C90C -/* 0F4D8C 7F0C021C 00000000 */ nop -/* 0F4D90 7F0C0220 00002025 */ move $a0, $zero -.Ljp7F0C0224: -/* 0F4D94 7F0C0224 0C0030DC */ jal joyGetButtons -/* 0F4D98 7F0C0228 24050010 */ li $a1, 16 -/* 0F4D9C 7F0C022C 0FC08C72 */ jal sub_GAME_7F022EE0 -/* 0F4DA0 7F0C0230 0002202B */ sltu $a0, $zero, $v0 -.Ljp7F0C0234: -/* 0F4DA4 7F0C0234 0FC2467D */ jal getDebugMode -/* 0F4DA8 7F0C0238 00000000 */ nop -/* 0F4DAC 7F0C023C 2401000C */ li $at, 12 -/* 0F4DB0 7F0C0240 1041002E */ beq $v0, $at, .Ljp7F0C02FC -/* 0F4DB4 7F0C0244 00002025 */ move $a0, $zero -/* 0F4DB8 7F0C0248 2401000D */ li $at, 13 -/* 0F4DBC 7F0C024C 10410048 */ beq $v0, $at, .Ljp7F0C0370 -/* 0F4DC0 7F0C0250 00002025 */ move $a0, $zero -/* 0F4DC4 7F0C0254 24010038 */ li $at, 56 -/* 0F4DC8 7F0C0258 54410074 */ bnel $v0, $at, .Ljp7F0C042C -/* 0F4DCC 7F0C025C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0F4DD0 7F0C0260 0C0010EA */ jal viGetHorizontalOffset -/* 0F4DD4 7F0C0264 00000000 */ nop -/* 0F4DD8 7F0C0268 0C0010E4 */ jal viGet800232A0 -/* 0F4DDC 7F0C026C AFA20030 */ sw $v0, 0x30($sp) -/* 0F4DE0 7F0C0270 AFA2002C */ sw $v0, 0x2c($sp) -/* 0F4DE4 7F0C0274 00002025 */ move $a0, $zero -/* 0F4DE8 7F0C0278 0C0030DC */ jal joyGetButtons -/* 0F4DEC 7F0C027C 24050004 */ li $a1, 4 -/* 0F4DF0 7F0C0280 10400004 */ beqz $v0, .Ljp7F0C0294 -/* 0F4DF4 7F0C0284 00002025 */ move $a0, $zero -/* 0F4DF8 7F0C0288 8FAE002C */ lw $t6, 0x2c($sp) -/* 0F4DFC 7F0C028C 25D90001 */ addiu $t9, $t6, 1 -/* 0F4E00 7F0C0290 AFB9002C */ sw $t9, 0x2c($sp) -.Ljp7F0C0294: -/* 0F4E04 7F0C0294 0C0030DC */ jal joyGetButtons -/* 0F4E08 7F0C0298 24050008 */ li $a1, 8 -/* 0F4E0C 7F0C029C 10400004 */ beqz $v0, .Ljp7F0C02B0 -/* 0F4E10 7F0C02A0 00002025 */ move $a0, $zero -/* 0F4E14 7F0C02A4 8FB8002C */ lw $t8, 0x2c($sp) -/* 0F4E18 7F0C02A8 270FFFFF */ addiu $t7, $t8, -1 -/* 0F4E1C 7F0C02AC AFAF002C */ sw $t7, 0x2c($sp) -.Ljp7F0C02B0: -/* 0F4E20 7F0C02B0 0C0030DC */ jal joyGetButtons -/* 0F4E24 7F0C02B4 24050001 */ li $a1, 1 -/* 0F4E28 7F0C02B8 10400004 */ beqz $v0, .Ljp7F0C02CC -/* 0F4E2C 7F0C02BC 00002025 */ move $a0, $zero -/* 0F4E30 7F0C02C0 8FAE0030 */ lw $t6, 0x30($sp) -/* 0F4E34 7F0C02C4 25D90001 */ addiu $t9, $t6, 1 -/* 0F4E38 7F0C02C8 AFB90030 */ sw $t9, 0x30($sp) -.Ljp7F0C02CC: -/* 0F4E3C 7F0C02CC 0C0030DC */ jal joyGetButtons -/* 0F4E40 7F0C02D0 24050002 */ li $a1, 2 -/* 0F4E44 7F0C02D4 10400003 */ beqz $v0, .Ljp7F0C02E4 -/* 0F4E48 7F0C02D8 8FB80030 */ lw $t8, 0x30($sp) -/* 0F4E4C 7F0C02DC 270FFFFF */ addiu $t7, $t8, -1 -/* 0F4E50 7F0C02E0 AFAF0030 */ sw $t7, 0x30($sp) -.Ljp7F0C02E4: -/* 0F4E54 7F0C02E4 0C0010E7 */ jal viSetHorizontalOffset -/* 0F4E58 7F0C02E8 8FA40030 */ lw $a0, 0x30($sp) -/* 0F4E5C 7F0C02EC 0C0010E1 */ jal viSet800232A0 -/* 0F4E60 7F0C02F0 8FA4002C */ lw $a0, 0x2c($sp) -/* 0F4E64 7F0C02F4 1000004D */ b .Ljp7F0C042C -/* 0F4E68 7F0C02F8 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C02FC: -/* 0F4E6C 7F0C02FC 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4E70 7F0C0300 24050202 */ li $a1, 514 -/* 0F4E74 7F0C0304 50400004 */ beql $v0, $zero, .Ljp7F0C0318 -/* 0F4E78 7F0C0308 00002025 */ move $a0, $zero -/* 0F4E7C 7F0C030C 0FC2F97A */ jal lvlMusicAppendPlayEndTheme -/* 0F4E80 7F0C0310 00000000 */ nop -/* 0F4E84 7F0C0314 00002025 */ move $a0, $zero -.Ljp7F0C0318: -/* 0F4E88 7F0C0318 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4E8C 7F0C031C 24050101 */ li $a1, 257 -/* 0F4E90 7F0C0320 50400004 */ beql $v0, $zero, .Ljp7F0C0334 -/* 0F4E94 7F0C0324 00002025 */ move $a0, $zero -/* 0F4E98 7F0C0328 0FC2F967 */ jal lvlMusicAppendPlaySoloDeathShort -/* 0F4E9C 7F0C032C 00000000 */ nop -/* 0F4EA0 7F0C0330 00002025 */ move $a0, $zero -.Ljp7F0C0334: -/* 0F4EA4 7F0C0334 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4EA8 7F0C0338 24050400 */ li $a1, 1024 -/* 0F4EAC 7F0C033C 50400004 */ beql $v0, $zero, .Ljp7F0C0350 -/* 0F4EB0 7F0C0340 00002025 */ move $a0, $zero -/* 0F4EB4 7F0C0344 0C001BF8 */ jal musicTrack1Stop -/* 0F4EB8 7F0C0348 00000000 */ nop -/* 0F4EBC 7F0C034C 00002025 */ move $a0, $zero -.Ljp7F0C0350: -/* 0F4EC0 7F0C0350 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4EC4 7F0C0354 24054000 */ li $a1, 16384 -/* 0F4EC8 7F0C0358 50400034 */ beql $v0, $zero, .Ljp7F0C042C -/* 0F4ECC 7F0C035C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0F4ED0 7F0C0360 0C001C2C */ jal musicTrack1SaveCurrentVolumeAsTrackDefault -/* 0F4ED4 7F0C0364 00000000 */ nop -/* 0F4ED8 7F0C0368 10000030 */ b .Ljp7F0C042C -/* 0F4EDC 7F0C036C 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C0370: -/* 0F4EE0 7F0C0370 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4EE4 7F0C0374 24050622 */ li $a1, 1570 -/* 0F4EE8 7F0C0378 1040000B */ beqz $v0, .Ljp7F0C03A8 -/* 0F4EEC 7F0C037C 3C058005 */ lui $a1, 0x8005 -/* 0F4EF0 7F0C0380 84A58418 */ lh $a1, %lo(g_DebugMpGameSoundFxIndex)($a1) -/* 0F4EF4 7F0C0384 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 0F4EF8 7F0C0388 3C018005 */ lui $at, %hi(g_DebugMpGameSoundFxIndex) # $at, 0x8005 -/* 0F4EFC 7F0C038C 24A5FFFF */ addiu $a1, $a1, -1 -/* 0F4F00 7F0C0390 00057400 */ sll $t6, $a1, 0x10 -/* 0F4F04 7F0C0394 000E2C03 */ sra $a1, $t6, 0x10 -/* 0F4F08 7F0C0398 A4258418 */ sh $a1, %lo(g_DebugMpGameSoundFxIndex)($at) -/* 0F4F0C 7F0C039C 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F4F10 7F0C03A0 0C002386 */ jal sndPlaySfx -/* 0F4F14 7F0C03A4 00003025 */ move $a2, $zero -.Ljp7F0C03A8: -/* 0F4F18 7F0C03A8 00002025 */ move $a0, $zero -/* 0F4F1C 7F0C03AC 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4F20 7F0C03B0 24050911 */ li $a1, 2321 -/* 0F4F24 7F0C03B4 1040000B */ beqz $v0, .Ljp7F0C03E4 -/* 0F4F28 7F0C03B8 3C058005 */ lui $a1, 0x8005 -/* 0F4F2C 7F0C03BC 84A58418 */ lh $a1, %lo(g_DebugMpGameSoundFxIndex)($a1) -/* 0F4F30 7F0C03C0 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 0F4F34 7F0C03C4 3C018005 */ lui $at, %hi(g_DebugMpGameSoundFxIndex) # $at, 0x8005 -/* 0F4F38 7F0C03C8 24A50001 */ addiu $a1, $a1, 1 -/* 0F4F3C 7F0C03CC 0005C400 */ sll $t8, $a1, 0x10 -/* 0F4F40 7F0C03D0 00182C03 */ sra $a1, $t8, 0x10 -/* 0F4F44 7F0C03D4 A4258418 */ sh $a1, %lo(g_DebugMpGameSoundFxIndex)($at) -/* 0F4F48 7F0C03D8 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F4F4C 7F0C03DC 0C002386 */ jal sndPlaySfx -/* 0F4F50 7F0C03E0 00003025 */ move $a2, $zero -.Ljp7F0C03E4: -/* 0F4F54 7F0C03E4 00002025 */ move $a0, $zero -/* 0F4F58 7F0C03E8 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4F5C 7F0C03EC 24050004 */ li $a1, 4 -/* 0F4F60 7F0C03F0 50400004 */ beql $v0, $zero, .Ljp7F0C0404 -/* 0F4F64 7F0C03F4 00002025 */ move $a0, $zero -/* 0F4F68 7F0C03F8 0C00244D */ jal sndDeactivateAllSfxByFlag_1 -/* 0F4F6C 7F0C03FC 00000000 */ nop -/* 0F4F70 7F0C0400 00002025 */ move $a0, $zero -.Ljp7F0C0404: -/* 0F4F74 7F0C0404 0C003104 */ jal joyGetButtonsPressedThisFrame -/* 0F4F78 7F0C0408 24050008 */ li $a1, 8 -/* 0F4F7C 7F0C040C 10400006 */ beqz $v0, .Ljp7F0C0428 -/* 0F4F80 7F0C0410 3C058005 */ lui $a1, %hi(g_DebugMpGameSoundFxIndex) # $a1, 0x8005 -/* 0F4F84 7F0C0414 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 0F4F88 7F0C0418 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F4F8C 7F0C041C 84A58418 */ lh $a1, %lo(g_DebugMpGameSoundFxIndex)($a1) -/* 0F4F90 7F0C0420 0C002386 */ jal sndPlaySfx -/* 0F4F94 7F0C0424 00003025 */ move $a2, $zero -.Ljp7F0C0428: -/* 0F4F98 7F0C0428 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C042C: -/* 0F4F9C 7F0C042C 27BD0198 */ addiu $sp, $sp, 0x198 -/* 0F4FA0 7F0C0430 03E00008 */ jr $ra -/* 0F4FA4 7F0C0434 00000000 */ nop -) -#endif + if (joyGetButtonsPressedThisFrame(PLAYER_1, (D_JPAD | L_JPAD | L_TRIG | L_CBUTTONS))) + { + sound_index = g_DebugMpGameSoundFxIndex - 1;\ + sfx = g_musicSfxBufferPtr;\ + *sound_index_ptr = sound_index; + sndPlaySfx(sfx, sound_index, NULL); + } -#ifdef VERSION_EU -GLOBAL_ASM( -.rdata -#const char aSetdetailDDDDDDDDD[] = "setdetail %d %d %d %d %d %d %d %d %d"; -glabel aSetdetailDDDDDDDDD -.word 0x73657464 -.word 0x65746169 -.word 0x6c202564 -.word 0x20256420 -.word 0x25642025 -.word 0x64202564 -.word 0x20256420 -.word 0x25642025 -.word 0x64202564 -.word 0x00000000 -.late_rodata -glabel D_80050308 -.word 0x3f99999a -.text -glabel lvlManageMpGame -/* 0F099C 7F0BDFAC 27BDFE68 */ addiu $sp, $sp, -0x198 -/* 0F09A0 7F0BDFB0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0F09A4 7F0BDFB4 0C000744 */ jal tlbmanageResetCurrentEntriesCount -/* 0F09A8 7F0BDFB8 00000000 */ nop -/* 0F09AC 7F0BDFBC 3C0E8004 */ lui $t6, %hi(g_ControlsLockedFlag) # $t6, 0x8004 -/* 0F09B0 7F0BDFC0 8DCE0FF0 */ lw $t6, %lo(g_ControlsLockedFlag)($t6) -/* 0F09B4 7F0BDFC4 3C018004 */ lui $at, %hi(g_ClockTimer) # $at, 0x8004 -/* 0F09B8 7F0BDFC8 11C00003 */ beqz $t6, .L7F0BDFD8 -/* 0F09BC 7F0BDFCC 00000000 */ nop -/* 0F09C0 7F0BDFD0 10000010 */ b .L7F0BE014 -/* 0F09C4 7F0BDFD4 AC200FF4 */ sw $zero, %lo(g_ClockTimer)($at) -.L7F0BDFD8: -/* 0F09C8 7F0BDFD8 0FC31565 */ jal checkGamePaused -/* 0F09CC 7F0BDFDC 00000000 */ nop -/* 0F09D0 7F0BDFE0 10400004 */ beqz $v0, .L7F0BDFF4 -/* 0F09D4 7F0BDFE4 3C0F8004 */ lui $t7, %hi(speedgraphframes) # $t7, 0x8004 -/* 0F09D8 7F0BDFE8 3C018004 */ lui $at, %hi(g_ClockTimer) # $at, 0x8004 -/* 0F09DC 7F0BDFEC 10000009 */ b .L7F0BE014 -/* 0F09E0 7F0BDFF0 AC200FF4 */ sw $zero, %lo(g_ClockTimer)($at) -.L7F0BDFF4: -/* 0F09E4 7F0BDFF4 8DEF1118 */ lw $t7, %lo(speedgraphframes)($t7) -/* 0F09E8 7F0BDFF8 3C028004 */ lui $v0, %hi(D_80048380) # $v0, 0x8004 -/* 0F09EC 7F0BDFFC 3C018004 */ lui $at, %hi(g_ClockTimer) # $at, 0x8004 -/* 0F09F0 7F0BE000 24421000 */ addiu $v0, %lo(D_80048380) # addiu $v0, $v0, 0x1000 -/* 0F09F4 7F0BE004 AC2F0FF4 */ sw $t7, %lo(g_ClockTimer)($at) -/* 0F09F8 7F0BE008 8C580000 */ lw $t8, ($v0) -/* 0F09FC 7F0BE00C 27190001 */ addiu $t9, $t8, 1 -/* 0F0A00 7F0BE010 AC590000 */ sw $t9, ($v0) -.L7F0BE014: -/* 0F0A04 7F0BE014 3C028004 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8004 -/* 0F0A08 7F0BE018 8C420FF4 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0F0A0C 7F0BE01C 3C038004 */ lui $v1, %hi(g_JP_GlobalTimerDelta) # $v1, 0x8004 -/* 0F0A10 7F0BE020 24630FF8 */ addiu $v1, %lo(g_JP_GlobalTimerDelta) # addiu $v1, $v1, 0xff8 -/* 0F0A14 7F0BE024 44822000 */ mtc1 $v0, $f4 -/* 0F0A18 7F0BE028 3C018005 */ lui $at, %hi(D_80050308) # $at, 0x8005 -/* 0F0A1C 7F0BE02C 3C048004 */ lui $a0, %hi(g_GlobalTimer) # $a0, 0x8004 -/* 0F0A20 7F0BE030 468021A0 */ cvt.s.w $f6, $f4 -/* 0F0A24 7F0BE034 24840FFC */ addiu $a0, %lo(g_GlobalTimer) # addiu $a0, $a0, 0xffc -/* 0F0A28 7F0BE038 3C188004 */ lui $t8, %hi(g_CurrentStageToLoad) # $t8, 0x8004 -/* 0F0A2C 7F0BE03C 3C198004 */ lui $t9, %hi(D_80048394) # $t9, 0x8004 -/* 0F0A30 7F0BE040 E4660000 */ swc1 $f6, ($v1) -/* 0F0A34 7F0BE044 C42A0308 */ lwc1 $f10, %lo(D_80050308)($at) -/* 0F0A38 7F0BE048 C4680000 */ lwc1 $f8, ($v1) -/* 0F0A3C 7F0BE04C 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 0F0A40 7F0BE050 460A4402 */ mul.s $f16, $f8, $f10 -/* 0F0A44 7F0BE054 E4301004 */ swc1 $f16, %lo(g_GlobalTimerDelta)($at) -/* 0F0A48 7F0BE058 8C8E0000 */ lw $t6, ($a0) -/* 0F0A4C 7F0BE05C 2401005A */ li $at, 90 -/* 0F0A50 7F0BE060 01C27821 */ addu $t7, $t6, $v0 -/* 0F0A54 7F0BE064 AC8F0000 */ sw $t7, ($a0) -/* 0F0A58 7F0BE068 8F180FE4 */ lw $t8, %lo(g_CurrentStageToLoad)($t8) -/* 0F0A5C 7F0BE06C 1301001D */ beq $t8, $at, .L7F0BE0E4 -/* 0F0A60 7F0BE070 00000000 */ nop -/* 0F0A64 7F0BE074 8F391018 */ lw $t9, %lo(D_80048394)($t9) -/* 0F0A68 7F0BE078 1720001A */ bnez $t9, .L7F0BE0E4 -/* 0F0A6C 7F0BE07C 00000000 */ nop -/* 0F0A70 7F0BE080 18400018 */ blez $v0, .L7F0BE0E4 -/* 0F0A74 7F0BE084 3C0E8002 */ lui $t6, %hi(g_AppendCheatSinglePlayer) # $t6, 0x8002 -/* 0F0A78 7F0BE088 8DCE5E50 */ lw $t6, %lo(g_AppendCheatSinglePlayer)($t6) -/* 0F0A7C 7F0BE08C 3C038006 */ lui $v1, %hi(g_CheatActivated + 1) # $v1, 0x8006 -/* 0F0A80 7F0BE090 246385E1 */ addiu $v1, %lo(g_CheatActivated + 1) # addiu $v1, $v1, -0x7a1f -/* 0F0A84 7F0BE094 11C00013 */ beqz $t6, .L7F0BE0E4 -/* 0F0A88 7F0BE098 24040001 */ li $a0, 1 -.Leu7F0BE09C: -/* 0F0A8C 7F0BE09C 906F0000 */ lbu $t7, ($v1) -/* 0F0A90 7F0BE0A0 51E0000D */ beql $t7, $zero, .L7F0BE0D8 -/* 0F0A94 7F0BE0A4 24840001 */ addiu $a0, $a0, 1 -/* 0F0A98 7F0BE0A8 AFA3001C */ sw $v1, 0x1c($sp) -/* 0F0A9C 7F0BE0AC 0FC243B7 */ jal cheatIsEnemyRockets -/* 0F0AA0 7F0BE0B0 AFA40194 */ sw $a0, 0x194($sp) -/* 0F0AA4 7F0BE0B4 8FA3001C */ lw $v1, 0x1c($sp) -/* 0F0AA8 7F0BE0B8 14400006 */ bnez $v0, .L7F0BE0D4 -/* 0F0AAC 7F0BE0BC 8FA40194 */ lw $a0, 0x194($sp) -/* 0F0AB0 7F0BE0C0 AFA3001C */ sw $v1, 0x1c($sp) -/* 0F0AB4 7F0BE0C4 0FC243CB */ jal cheatButtonTurnOnCheatForPlayers -/* 0F0AB8 7F0BE0C8 AFA40194 */ sw $a0, 0x194($sp) -/* 0F0ABC 7F0BE0CC 8FA3001C */ lw $v1, 0x1c($sp) -/* 0F0AC0 7F0BE0D0 8FA40194 */ lw $a0, 0x194($sp) -.L7F0BE0D4: -/* 0F0AC4 7F0BE0D4 24840001 */ addiu $a0, $a0, 1 -.L7F0BE0D8: -/* 0F0AC8 7F0BE0D8 2401004B */ li $at, 75 -/* 0F0ACC 7F0BE0DC 1481FFEF */ bne $a0, $at, .Leu7F0BE09C -/* 0F0AD0 7F0BE0E0 24630001 */ addiu $v1, $v1, 1 -.L7F0BE0E4: -/* 0F0AD4 7F0BE0E4 0FC26669 */ jal getPlayerCount -/* 0F0AD8 7F0BE0E8 00000000 */ nop -/* 0F0ADC 7F0BE0EC 28410002 */ slti $at, $v0, 2 -/* 0F0AE0 7F0BE0F0 1420014C */ bnez $at, .L7F0BE624 -/* 0F0AE4 7F0BE0F4 3C188004 */ lui $t8, %hi(g_CurrentStageToLoad) # $t8, 0x8004 -/* 0F0AE8 7F0BE0F8 8F180FE4 */ lw $t8, %lo(g_CurrentStageToLoad)($t8) -/* 0F0AEC 7F0BE0FC 2401005A */ li $at, 90 -/* 0F0AF0 7F0BE100 13010148 */ beq $t8, $at, .L7F0BE624 -/* 0F0AF4 7F0BE104 00000000 */ nop -/* 0F0AF8 7F0BE108 0FC3003C */ jal get_mission_state -/* 0F0AFC 7F0BE10C 00000000 */ nop -/* 0F0B00 7F0BE110 24010006 */ li $at, 6 -/* 0F0B04 7F0BE114 14410029 */ bne $v0, $at, .L7F0BE1BC -/* 0F0B08 7F0BE118 00000000 */ nop -/* 0F0B0C 7F0BE11C AFA00190 */ sw $zero, 0x190($sp) -/* 0F0B10 7F0BE120 AFA0018C */ sw $zero, 0x18c($sp) -/* 0F0B14 7F0BE124 0FC26669 */ jal getPlayerCount -/* 0F0B18 7F0BE128 AFA00188 */ sw $zero, 0x188($sp) -/* 0F0B1C 7F0BE12C 8FA30190 */ lw $v1, 0x190($sp) -/* 0F0B20 7F0BE130 8FA5018C */ lw $a1, 0x18c($sp) -/* 0F0B24 7F0BE134 1840001B */ blez $v0, .L7F0BE1A4 -/* 0F0B28 7F0BE138 8FA60188 */ lw $a2, 0x188($sp) -/* 0F0B2C 7F0BE13C 3C0E8007 */ lui $t6, %hi(g_playerPointers) # $t6, 0x8007 -/* 0F0B30 7F0BE140 25CE89F0 */ addiu $t6, %lo(g_playerPointers) # addiu $t6, $t6, -0x7610 -/* 0F0B34 7F0BE144 0003C880 */ sll $t9, $v1, 2 -/* 0F0B38 7F0BE148 032E2021 */ addu $a0, $t9, $t6 -.L7F0BE14C: -/* 0F0B3C 7F0BE14C 8C820000 */ lw $v0, ($a0) -/* 0F0B40 7F0BE150 24630001 */ addiu $v1, $v1, 1 -/* 0F0B44 7F0BE154 24840004 */ addiu $a0, $a0, 4 -/* 0F0B48 7F0BE158 8C4F00D8 */ lw $t7, 0xd8($v0) -/* 0F0B4C 7F0BE15C 51E00007 */ beql $t7, $zero, .L7F0BE17C -/* 0F0B50 7F0BE160 AFA30190 */ sw $v1, 0x190($sp) -/* 0F0B54 7F0BE164 8C580424 */ lw $t8, 0x424($v0) -/* 0F0B58 7F0BE168 24A50001 */ addiu $a1, $a1, 1 -/* 0F0B5C 7F0BE16C 53000003 */ beql $t8, $zero, .L7F0BE17C -/* 0F0B60 7F0BE170 AFA30190 */ sw $v1, 0x190($sp) -/* 0F0B64 7F0BE174 24C60001 */ addiu $a2, $a2, 1 -/* 0F0B68 7F0BE178 AFA30190 */ sw $v1, 0x190($sp) -.L7F0BE17C: -/* 0F0B6C 7F0BE17C AFA4001C */ sw $a0, 0x1c($sp) -/* 0F0B70 7F0BE180 AFA5018C */ sw $a1, 0x18c($sp) -/* 0F0B74 7F0BE184 0FC26669 */ jal getPlayerCount -/* 0F0B78 7F0BE188 AFA60188 */ sw $a2, 0x188($sp) -/* 0F0B7C 7F0BE18C 8FA30190 */ lw $v1, 0x190($sp) -/* 0F0B80 7F0BE190 8FA4001C */ lw $a0, 0x1c($sp) -/* 0F0B84 7F0BE194 8FA5018C */ lw $a1, 0x18c($sp) -/* 0F0B88 7F0BE198 0062082A */ slt $at, $v1, $v0 -/* 0F0B8C 7F0BE19C 1420FFEB */ bnez $at, .L7F0BE14C -/* 0F0B90 7F0BE1A0 8FA60188 */ lw $a2, 0x188($sp) -.L7F0BE1A4: -/* 0F0B94 7F0BE1A4 18A00005 */ blez $a1, .L7F0BE1BC -/* 0F0B98 7F0BE1A8 00000000 */ nop -/* 0F0B9C 7F0BE1AC 14A60003 */ bne $a1, $a2, .L7F0BE1BC -/* 0F0BA0 7F0BE1B0 00000000 */ nop -/* 0F0BA4 7F0BE1B4 0FC3003F */ jal set_missionstate -/* 0F0BA8 7F0BE1B8 24040001 */ li $a0, 1 -.L7F0BE1BC: -/* 0F0BAC 7F0BE1BC 3C038004 */ lui $v1, %hi(g_MpTime) # $v1, 0x8004 -/* 0F0BB0 7F0BE1C0 8C63101C */ lw $v1, %lo(g_MpTime)($v1) -/* 0F0BB4 7F0BE1C4 3C028004 */ lui $v0, %hi(D_80048394) # $v0, 0x8004 -/* 0F0BB8 7F0BE1C8 3C198004 */ lui $t9, %hi(g_ClockTimer) # $t9, 0x8004 -/* 0F0BBC 7F0BE1CC 1860004A */ blez $v1, .Leu7F0BE2F8 -/* 0F0BC0 7F0BE1D0 00000000 */ nop -/* 0F0BC4 7F0BE1D4 8C421018 */ lw $v0, %lo(D_80048394)($v0) -/* 0F0BC8 7F0BE1D8 8F390FF4 */ lw $t9, %lo(g_ClockTimer)($t9) -/* 0F0BCC 7F0BE1DC 2464F448 */ addiu $a0, $v1, -0xbb8 -/* 0F0BD0 7F0BE1E0 0044082A */ slt $at, $v0, $a0 -/* 0F0BD4 7F0BE1E4 03227021 */ addu $t6, $t9, $v0 -/* 0F0BD8 7F0BE1E8 AFAE0180 */ sw $t6, 0x180($sp) -/* 0F0BDC 7F0BE1EC 10200016 */ beqz $at, .L7F0BE248 -/* 0F0BE0 7F0BE1F0 AFA20184 */ sw $v0, 0x184($sp) -/* 0F0BE4 7F0BE1F4 01C4082A */ slt $at, $t6, $a0 -/* 0F0BE8 7F0BE1F8 14200013 */ bnez $at, .L7F0BE248 -/* 0F0BEC 7F0BE1FC 00000000 */ nop -/* 0F0BF0 7F0BE200 0FC26669 */ jal getPlayerCount -/* 0F0BF4 7F0BE204 AFA0017C */ sw $zero, 0x17c($sp) -/* 0F0BF8 7F0BE208 1840000F */ blez $v0, .L7F0BE248 -/* 0F0BFC 7F0BE20C 00000000 */ nop -.L7F0BE210: -/* 0F0C00 7F0BE210 0FC26993 */ jal set_cur_player -/* 0F0C04 7F0BE214 8FA4017C */ lw $a0, 0x17c($sp) -/* 0F0C08 7F0BE218 0FC304AE */ jal langGet -/* 0F0C0C 7F0BE21C 3404B044 */ li $a0, 45124 -/* 0F0C10 7F0BE220 0FC229B5 */ jal jp_hudmsgBottomShow -/* 0F0C14 7F0BE224 00402025 */ move $a0, $v0 -/* 0F0C18 7F0BE228 8FAF017C */ lw $t7, 0x17c($sp) -/* 0F0C1C 7F0BE22C 25F80001 */ addiu $t8, $t7, 1 -/* 0F0C20 7F0BE230 0FC26669 */ jal getPlayerCount -/* 0F0C24 7F0BE234 AFB8017C */ sw $t8, 0x17c($sp) -/* 0F0C28 7F0BE238 8FB9017C */ lw $t9, 0x17c($sp) -/* 0F0C2C 7F0BE23C 0322082A */ slt $at, $t9, $v0 -/* 0F0C30 7F0BE240 1420FFF3 */ bnez $at, .L7F0BE210 -/* 0F0C34 7F0BE244 00000000 */ nop -.L7F0BE248: -/* 0F0C38 7F0BE248 3C0F8004 */ lui $t7, %hi(g_MpTime) # $t7, 0x8004 -/* 0F0C3C 7F0BE24C 8DEF101C */ lw $t7, %lo(g_MpTime)($t7) -/* 0F0C40 7F0BE250 8FAE0180 */ lw $t6, 0x180($sp) -/* 0F0C44 7F0BE254 3C198004 */ lui $t9, %hi(g_MpSoundStateRelated) # $t9, 0x8004 -/* 0F0C48 7F0BE258 25F8FE0C */ addiu $t8, $t7, -0x1f4 -/* 0F0C4C 7F0BE25C 01D8082A */ slt $at, $t6, $t8 -/* 0F0C50 7F0BE260 1420000D */ bnez $at, .L7F0BE298 -/* 0F0C54 7F0BE264 00000000 */ nop -/* 0F0C58 7F0BE268 8F391024 */ lw $t9, %lo(g_MpSoundStateRelated)($t9) -/* 0F0C5C 7F0BE26C 1720000A */ bnez $t9, .L7F0BE298 -/* 0F0C60 7F0BE270 00000000 */ nop -/* 0F0C64 7F0BE274 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 0F0C68 7F0BE278 00000000 */ nop -/* 0F0C6C 7F0BE27C 14400006 */ bnez $v0, .L7F0BE298 -/* 0F0C70 7F0BE280 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 0F0C74 7F0BE284 3C068004 */ lui $a2, %hi(g_MpSoundStateRelated) # $a2, 0x8004 -/* 0F0C78 7F0BE288 24C61024 */ addiu $a2, %lo(g_MpSoundStateRelated) # addiu $a2, $a2, 0x1024 -/* 0F0C7C 7F0BE28C 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F0C80 7F0BE290 0C00209A */ jal sndPlaySfx -/* 0F0C84 7F0BE294 240500A1 */ li $a1, 161 -.L7F0BE298: -/* 0F0C88 7F0BE298 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 0F0C8C 7F0BE29C 00000000 */ nop -/* 0F0C90 7F0BE2A0 1040000A */ beqz $v0, .L7F0BE2CC -/* 0F0C94 7F0BE2A4 3C048004 */ lui $a0, %hi(g_MpSoundStateRelated) # $a0, 0x8004 -/* 0F0C98 7F0BE2A8 8C841024 */ lw $a0, %lo(g_MpSoundStateRelated)($a0) -/* 0F0C9C 7F0BE2AC 10800007 */ beqz $a0, .L7F0BE2CC -/* 0F0CA0 7F0BE2B0 00000000 */ nop -/* 0F0CA4 7F0BE2B4 0C002094 */ jal sndGetPlayingState -/* 0F0CA8 7F0BE2B8 00000000 */ nop -/* 0F0CAC 7F0BE2BC 10400003 */ beqz $v0, .L7F0BE2CC -/* 0F0CB0 7F0BE2C0 3C048004 */ lui $a0, %hi(g_MpSoundStateRelated) # $a0, 0x8004 -/* 0F0CB4 7F0BE2C4 0C002120 */ jal sndDeactivate -/* 0F0CB8 7F0BE2C8 8C841024 */ lw $a0, %lo(g_MpSoundStateRelated)($a0) -.L7F0BE2CC: -/* 0F0CBC 7F0BE2CC 3C038004 */ lui $v1, %hi(g_MpTime) # $v1, 0x8004 -/* 0F0CC0 7F0BE2D0 8C63101C */ lw $v1, %lo(g_MpTime)($v1) -/* 0F0CC4 7F0BE2D4 8FAF0184 */ lw $t7, 0x184($sp) -/* 0F0CC8 7F0BE2D8 8FAE0180 */ lw $t6, 0x180($sp) -/* 0F0CCC 7F0BE2DC 01E3082A */ slt $at, $t7, $v1 -/* 0F0CD0 7F0BE2E0 10200005 */ beqz $at, .Leu7F0BE2F8 -/* 0F0CD4 7F0BE2E4 01C3082A */ slt $at, $t6, $v1 -/* 0F0CD8 7F0BE2E8 14200003 */ bnez $at, .Leu7F0BE2F8 -/* 0F0CDC 7F0BE2EC 00000000 */ nop -/* 0F0CE0 7F0BE2F0 0FC30684 */ jal mpCalculateAwards -/* 0F0CE4 7F0BE2F4 00002025 */ move $a0, $zero -.Leu7F0BE2F8: -/* 0F0CE8 7F0BE2F8 3C188004 */ lui $t8, %hi(g_MpPoint) # $t8, 0x8004 -/* 0F0CEC 7F0BE2FC 8F181020 */ lw $t8, %lo(g_MpPoint)($t8) -/* 0F0CF0 7F0BE300 3C198004 */ lui $t9, %hi(g_ClockTimer) # $t9, 0x8004 -/* 0F0CF4 7F0BE304 1B00003D */ blez $t8, .L7F0BE3FC -/* 0F0CF8 7F0BE308 00000000 */ nop -/* 0F0CFC 7F0BE30C 8F390FF4 */ lw $t9, %lo(g_ClockTimer)($t9) -/* 0F0D00 7F0BE310 1320003A */ beqz $t9, .L7F0BE3FC -/* 0F0D04 7F0BE314 00000000 */ nop -/* 0F0D08 7F0BE318 0FC26669 */ jal getPlayerCount -/* 0F0D0C 7F0BE31C 00000000 */ nop -/* 0F0D10 7F0BE320 00403825 */ move $a3, $v0 -/* 0F0D14 7F0BE324 00002825 */ move $a1, $zero -/* 0F0D18 7F0BE328 00003025 */ move $a2, $zero -/* 0F0D1C 7F0BE32C 18400029 */ blez $v0, .L7F0BE3D4 -/* 0F0D20 7F0BE330 00002025 */ move $a0, $zero -/* 0F0D24 7F0BE334 3C038007 */ lui $v1, %hi(g_playerPointers) # $v1, 0x8007 -/* 0F0D28 7F0BE338 44800000 */ mtc1 $zero, $f0 -/* 0F0D2C 7F0BE33C 246389F0 */ addiu $v1, %lo(g_playerPointers) # addiu $v1, $v1, -0x7610 -.L7F0BE340: -/* 0F0D30 7F0BE340 8C620000 */ lw $v0, ($v1) -/* 0F0D34 7F0BE344 8C4F00D8 */ lw $t7, 0xd8($v0) -/* 0F0D38 7F0BE348 51E0000E */ beql $t7, $zero, .L7F0BE384 -/* 0F0D3C 7F0BE34C AFA3001C */ sw $v1, 0x1c($sp) -/* 0F0D40 7F0BE350 8C4E0424 */ lw $t6, 0x424($v0) -/* 0F0D44 7F0BE354 51C0000A */ beql $t6, $zero, .L7F0BE380 -/* 0F0D48 7F0BE358 24A50001 */ addiu $a1, $a1, 1 -/* 0F0D4C 7F0BE35C 8C580428 */ lw $t8, 0x428($v0) -/* 0F0D50 7F0BE360 53000007 */ beql $t8, $zero, .L7F0BE380 -/* 0F0D54 7F0BE364 24A50001 */ addiu $a1, $a1, 1 -/* 0F0D58 7F0BE368 C45203E4 */ lwc1 $f18, 0x3e4($v0) -/* 0F0D5C 7F0BE36C 4612003E */ c.le.s $f0, $f18 -/* 0F0D60 7F0BE370 00000000 */ nop -/* 0F0D64 7F0BE374 45020003 */ bc1fl .L7F0BE384 -/* 0F0D68 7F0BE378 AFA3001C */ sw $v1, 0x1c($sp) -/* 0F0D6C 7F0BE37C 24A50001 */ addiu $a1, $a1, 1 -.L7F0BE380: -/* 0F0D70 7F0BE380 AFA3001C */ sw $v1, 0x1c($sp) -.L7F0BE384: -/* 0F0D74 7F0BE384 AFA40174 */ sw $a0, 0x174($sp) -/* 0F0D78 7F0BE388 AFA50170 */ sw $a1, 0x170($sp) -/* 0F0D7C 7F0BE38C AFA6016C */ sw $a2, 0x16c($sp) -/* 0F0D80 7F0BE390 0FC30B6E */ jal get_points_for_mp_player -/* 0F0D84 7F0BE394 AFA70178 */ sw $a3, 0x178($sp) -/* 0F0D88 7F0BE398 3C198004 */ lui $t9, %hi(g_MpPoint) # $t9, 0x8004 -/* 0F0D8C 7F0BE39C 8F391020 */ lw $t9, %lo(g_MpPoint)($t9) -/* 0F0D90 7F0BE3A0 44800000 */ mtc1 $zero, $f0 -/* 0F0D94 7F0BE3A4 8FA3001C */ lw $v1, 0x1c($sp) -/* 0F0D98 7F0BE3A8 0059082A */ slt $at, $v0, $t9 -/* 0F0D9C 7F0BE3AC 8FA40174 */ lw $a0, 0x174($sp) -/* 0F0DA0 7F0BE3B0 8FA50170 */ lw $a1, 0x170($sp) -/* 0F0DA4 7F0BE3B4 8FA6016C */ lw $a2, 0x16c($sp) -/* 0F0DA8 7F0BE3B8 14200002 */ bnez $at, .L7F0BE3C4 -/* 0F0DAC 7F0BE3BC 8FA70178 */ lw $a3, 0x178($sp) -/* 0F0DB0 7F0BE3C0 24C60001 */ addiu $a2, $a2, 1 -.L7F0BE3C4: -/* 0F0DB4 7F0BE3C4 24840001 */ addiu $a0, $a0, 1 -/* 0F0DB8 7F0BE3C8 0087082A */ slt $at, $a0, $a3 -/* 0F0DBC 7F0BE3CC 1420FFDC */ bnez $at, .L7F0BE340 -/* 0F0DC0 7F0BE3D0 24630004 */ addiu $v1, $v1, 4 -.L7F0BE3D4: -/* 0F0DC4 7F0BE3D4 18C00009 */ blez $a2, .L7F0BE3FC -/* 0F0DC8 7F0BE3D8 00000000 */ nop -/* 0F0DCC 7F0BE3DC 14A00005 */ bnez $a1, .L7F0BE3F4 -/* 0F0DD0 7F0BE3E0 00000000 */ nop -/* 0F0DD4 7F0BE3E4 0FC30684 */ jal mpCalculateAwards -/* 0F0DD8 7F0BE3E8 00002025 */ move $a0, $zero -/* 0F0DDC 7F0BE3EC 10000003 */ b .L7F0BE3FC -/* 0F0DE0 7F0BE3F0 00000000 */ nop -.L7F0BE3F4: -/* 0F0DE4 7F0BE3F4 0FC30680 */ jal mpwatchSetStopPlayFlag -/* 0F0DE8 7F0BE3F8 00000000 */ nop -.L7F0BE3FC: -/* 0F0DEC 7F0BE3FC 0FC051B2 */ jal get_scenario -/* 0F0DF0 7F0BE400 00000000 */ nop -/* 0F0DF4 7F0BE404 24010001 */ li $at, 1 -/* 0F0DF8 7F0BE408 14410086 */ bne $v0, $at, .L7F0BE624 -/* 0F0DFC 7F0BE40C 3C0F8004 */ lui $t7, %hi(g_ClockTimer) # $t7, 0x8004 -/* 0F0E00 7F0BE410 8DEF0FF4 */ lw $t7, %lo(g_ClockTimer)($t7) -/* 0F0E04 7F0BE414 11E00083 */ beqz $t7, .L7F0BE624 -/* 0F0E08 7F0BE418 00000000 */ nop -/* 0F0E0C 7F0BE41C 0FC26669 */ jal getPlayerCount -/* 0F0E10 7F0BE420 00000000 */ nop -/* 0F0E14 7F0BE424 44800000 */ mtc1 $zero, $f0 -/* 0F0E18 7F0BE428 00405025 */ move $t2, $v0 -/* 0F0E1C 7F0BE42C 00006825 */ move $t5, $zero -/* 0F0E20 7F0BE430 0000F825 */ move $ra, $zero -/* 0F0E24 7F0BE434 1840006E */ blez $v0, .L7F0BE5F0 -/* 0F0E28 7F0BE438 00006025 */ move $t4, $zero -/* 0F0E2C 7F0BE43C 00002825 */ move $a1, $zero -.L7F0BE440: -/* 0F0E30 7F0BE440 00003025 */ move $a2, $zero -/* 0F0E34 7F0BE444 18400048 */ blez $v0, .L7F0BE568 -/* 0F0E38 7F0BE448 00003825 */ move $a3, $zero -/* 0F0E3C 7F0BE44C 30490003 */ andi $t1, $v0, 3 -/* 0F0E40 7F0BE450 11200019 */ beqz $t1, .L7F0BE4B8 -/* 0F0E44 7F0BE454 000C5880 */ sll $t3, $t4, 2 -/* 0F0E48 7F0BE458 3C188007 */ lui $t8, %hi(g_playerPointers) # $t8, 0x8007 -/* 0F0E4C 7F0BE45C 271889F0 */ addiu $t8, %lo(g_playerPointers) # addiu $t8, $t8, -0x7610 -/* 0F0E50 7F0BE460 00007080 */ sll $t6, $zero, 2 -/* 0F0E54 7F0BE464 0000C8C0 */ sll $t9, $zero, 3 -/* 0F0E58 7F0BE468 0320C823 */ subu $t9, $t9, $zero -/* 0F0E5C 7F0BE46C 01D81821 */ addu $v1, $t6, $t8 -/* 0F0E60 7F0BE470 3C0E8007 */ lui $t6, %hi(g_playerPlayerData) # $t6, 0x8007 -/* 0F0E64 7F0BE474 0019C900 */ sll $t9, $t9, 4 -/* 0F0E68 7F0BE478 032B7821 */ addu $t7, $t9, $t3 -/* 0F0E6C 7F0BE47C 25CE8A00 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x7600 -/* 0F0E70 7F0BE480 01EE2021 */ addu $a0, $t7, $t6 -/* 0F0E74 7F0BE484 01204025 */ move $t0, $t1 -.L7F0BE488: -/* 0F0E78 7F0BE488 8C780000 */ lw $t8, ($v1) -/* 0F0E7C 7F0BE48C 24E70001 */ addiu $a3, $a3, 1 -/* 0F0E80 7F0BE490 24630004 */ addiu $v1, $v1, 4 -/* 0F0E84 7F0BE494 8F1900D8 */ lw $t9, 0xd8($t8) -/* 0F0E88 7F0BE498 57200003 */ bnezl $t9, .L7F0BE4A8 -/* 0F0E8C 7F0BE49C 8C8F0024 */ lw $t7, 0x24($a0) -/* 0F0E90 7F0BE4A0 24C60001 */ addiu $a2, $a2, 1 -/* 0F0E94 7F0BE4A4 8C8F0024 */ lw $t7, 0x24($a0) -.L7F0BE4A8: -/* 0F0E98 7F0BE4A8 24840070 */ addiu $a0, $a0, 0x70 -/* 0F0E9C 7F0BE4AC 1507FFF6 */ bne $t0, $a3, .L7F0BE488 -/* 0F0EA0 7F0BE4B0 00AF2821 */ addu $a1, $a1, $t7 -/* 0F0EA4 7F0BE4B4 10E2002C */ beq $a3, $v0, .L7F0BE568 -.L7F0BE4B8: -/* 0F0EA8 7F0BE4B8 3C188007 */ lui $t8, %hi(g_playerPointers) # $t8, 0x8007 -/* 0F0EAC 7F0BE4BC 0007C8C0 */ sll $t9, $a3, 3 -/* 0F0EB0 7F0BE4C0 0327C823 */ subu $t9, $t9, $a3 -/* 0F0EB4 7F0BE4C4 271889F0 */ addiu $t8, %lo(g_playerPointers) # addiu $t8, $t8, -0x7610 -/* 0F0EB8 7F0BE4C8 00077080 */ sll $t6, $a3, 2 -/* 0F0EBC 7F0BE4CC 01D81821 */ addu $v1, $t6, $t8 -/* 0F0EC0 7F0BE4D0 0019C900 */ sll $t9, $t9, 4 -/* 0F0EC4 7F0BE4D4 032B7821 */ addu $t7, $t9, $t3 -/* 0F0EC8 7F0BE4D8 3C0E8007 */ lui $t6, %hi(g_playerPlayerData) # $t6, 0x8007 -/* 0F0ECC 7F0BE4DC 25CE8A00 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x7600 -/* 0F0ED0 7F0BE4E0 000AC880 */ sll $t9, $t2, 2 -/* 0F0ED4 7F0BE4E4 03384021 */ addu $t0, $t9, $t8 -/* 0F0ED8 7F0BE4E8 01EE2021 */ addu $a0, $t7, $t6 -.L7F0BE4EC: -/* 0F0EDC 7F0BE4EC 8C6F0000 */ lw $t7, ($v1) -/* 0F0EE0 7F0BE4F0 8DEE00D8 */ lw $t6, 0xd8($t7) -/* 0F0EE4 7F0BE4F4 55C00003 */ bnezl $t6, .L7F0BE504 -/* 0F0EE8 7F0BE4F8 8C780004 */ lw $t8, 4($v1) -/* 0F0EEC 7F0BE4FC 24C60001 */ addiu $a2, $a2, 1 -/* 0F0EF0 7F0BE500 8C780004 */ lw $t8, 4($v1) -.L7F0BE504: -/* 0F0EF4 7F0BE504 8C990024 */ lw $t9, 0x24($a0) -/* 0F0EF8 7F0BE508 8F0F00D8 */ lw $t7, 0xd8($t8) -/* 0F0EFC 7F0BE50C 00B92821 */ addu $a1, $a1, $t9 -/* 0F0F00 7F0BE510 55E00003 */ bnezl $t7, .L7F0BE520 -/* 0F0F04 7F0BE514 8C790008 */ lw $t9, 8($v1) -/* 0F0F08 7F0BE518 24C60001 */ addiu $a2, $a2, 1 -/* 0F0F0C 7F0BE51C 8C790008 */ lw $t9, 8($v1) -.L7F0BE520: -/* 0F0F10 7F0BE520 8C8E0094 */ lw $t6, 0x94($a0) -/* 0F0F14 7F0BE524 8F3800D8 */ lw $t8, 0xd8($t9) -/* 0F0F18 7F0BE528 00AE2821 */ addu $a1, $a1, $t6 -/* 0F0F1C 7F0BE52C 57000003 */ bnezl $t8, .L7F0BE53C -/* 0F0F20 7F0BE530 8C6E000C */ lw $t6, 0xc($v1) -/* 0F0F24 7F0BE534 24C60001 */ addiu $a2, $a2, 1 -/* 0F0F28 7F0BE538 8C6E000C */ lw $t6, 0xc($v1) -.L7F0BE53C: -/* 0F0F2C 7F0BE53C 8C8F0104 */ lw $t7, 0x104($a0) -/* 0F0F30 7F0BE540 24630010 */ addiu $v1, $v1, 0x10 -/* 0F0F34 7F0BE544 8DD900D8 */ lw $t9, 0xd8($t6) -/* 0F0F38 7F0BE548 00AF2821 */ addu $a1, $a1, $t7 -/* 0F0F3C 7F0BE54C 57200003 */ bnezl $t9, .L7F0BE55C -/* 0F0F40 7F0BE550 8C980174 */ lw $t8, 0x174($a0) -/* 0F0F44 7F0BE554 24C60001 */ addiu $a2, $a2, 1 -/* 0F0F48 7F0BE558 8C980174 */ lw $t8, 0x174($a0) -.L7F0BE55C: -/* 0F0F4C 7F0BE55C 248401C0 */ addiu $a0, $a0, 0x1c0 -/* 0F0F50 7F0BE560 1468FFE2 */ bne $v1, $t0, .L7F0BE4EC -/* 0F0F54 7F0BE564 00B82821 */ addu $a1, $a1, $t8 -.L7F0BE568: -/* 0F0F58 7F0BE568 28A10002 */ slti $at, $a1, 2 -/* 0F0F5C 7F0BE56C 1420001C */ bnez $at, .L7F0BE5E0 -/* 0F0F60 7F0BE570 000C78C0 */ sll $t7, $t4, 3 -/* 0F0F64 7F0BE574 01EC7823 */ subu $t7, $t7, $t4 -/* 0F0F68 7F0BE578 3C0E8007 */ lui $t6, %hi(g_playerPlayerData) # $t6, 0x8007 -/* 0F0F6C 7F0BE57C 25CE8A00 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x7600 -/* 0F0F70 7F0BE580 000F7900 */ sll $t7, $t7, 4 -/* 0F0F74 7F0BE584 01EE1821 */ addu $v1, $t7, $t6 -/* 0F0F78 7F0BE588 906F0068 */ lbu $t7, 0x68($v1) -/* 0F0F7C 7F0BE58C 3C188007 */ lui $t8, %hi(g_playerPointers) # $t8, 0x8007 -/* 0F0F80 7F0BE590 271889F0 */ addiu $t8, %lo(g_playerPointers) # addiu $t8, $t8, -0x7610 -/* 0F0F84 7F0BE594 000CC880 */ sll $t9, $t4, 2 -/* 0F0F88 7F0BE598 15E00003 */ bnez $t7, .L7F0BE5A8 -/* 0F0F8C 7F0BE59C 03382021 */ addu $a0, $t9, $t8 -/* 0F0F90 7F0BE5A0 24CE0001 */ addiu $t6, $a2, 1 -/* 0F0F94 7F0BE5A4 A06E0068 */ sb $t6, 0x68($v1) -.L7F0BE5A8: -/* 0F0F98 7F0BE5A8 8C830000 */ lw $v1, ($a0) -/* 0F0F9C 7F0BE5AC 25AD0001 */ addiu $t5, $t5, 1 -/* 0F0FA0 7F0BE5B0 8C790424 */ lw $t9, 0x424($v1) -/* 0F0FA4 7F0BE5B4 5320000B */ beql $t9, $zero, .L7F0BE5E4 -/* 0F0FA8 7F0BE5B8 258C0001 */ addiu $t4, $t4, 1 -/* 0F0FAC 7F0BE5BC 8C780428 */ lw $t8, 0x428($v1) -/* 0F0FB0 7F0BE5C0 53000008 */ beql $t8, $zero, .L7F0BE5E4 -/* 0F0FB4 7F0BE5C4 258C0001 */ addiu $t4, $t4, 1 -/* 0F0FB8 7F0BE5C8 C46403E4 */ lwc1 $f4, 0x3e4($v1) -/* 0F0FBC 7F0BE5CC 4600203C */ c.lt.s $f4, $f0 -/* 0F0FC0 7F0BE5D0 00000000 */ nop -/* 0F0FC4 7F0BE5D4 45020003 */ bc1fl .L7F0BE5E4 -/* 0F0FC8 7F0BE5D8 258C0001 */ addiu $t4, $t4, 1 -/* 0F0FCC 7F0BE5DC 27FF0001 */ addiu $ra, $ra, 1 -.L7F0BE5E0: -/* 0F0FD0 7F0BE5E0 258C0001 */ addiu $t4, $t4, 1 -.L7F0BE5E4: -/* 0F0FD4 7F0BE5E4 018A082A */ slt $at, $t4, $t2 -/* 0F0FD8 7F0BE5E8 5420FF95 */ bnezl $at, .L7F0BE440 -/* 0F0FDC 7F0BE5EC 00002825 */ move $a1, $zero -.L7F0BE5F0: -/* 0F0FE0 7F0BE5F0 2443FFFF */ addiu $v1, $v0, -1 -/* 0F0FE4 7F0BE5F4 03E3082A */ slt $at, $ra, $v1 -/* 0F0FE8 7F0BE5F8 54200006 */ bnezl $at, .L7F0BE614 -/* 0F0FEC 7F0BE5FC 01A3082A */ slt $at, $t5, $v1 -/* 0F0FF0 7F0BE600 0FC30684 */ jal mpCalculateAwards -/* 0F0FF4 7F0BE604 00002025 */ move $a0, $zero -/* 0F0FF8 7F0BE608 10000006 */ b .L7F0BE624 -/* 0F0FFC 7F0BE60C 00000000 */ nop -/* 0F1000 7F0BE610 01A3082A */ slt $at, $t5, $v1 -.L7F0BE614: -/* 0F1004 7F0BE614 14200003 */ bnez $at, .L7F0BE624 -/* 0F1008 7F0BE618 00000000 */ nop -/* 0F100C 7F0BE61C 0FC30680 */ jal mpwatchSetStopPlayFlag -/* 0F1010 7F0BE620 00000000 */ nop -.L7F0BE624: -/* 0F1014 7F0BE624 3C028004 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8004 -/* 0F1018 7F0BE628 3C0F8004 */ lui $t7, %hi(D_80048394) # $t7, 0x8004 -/* 0F101C 7F0BE62C 8DEF1018 */ lw $t7, %lo(D_80048394)($t7) -/* 0F1020 7F0BE630 8C420FF4 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0F1024 7F0BE634 3C014248 */ li $at, 0x42480000 # 50.000000 -/* 0F1028 7F0BE638 44810000 */ mtc1 $at, $f0 -/* 0F102C 7F0BE63C 01E27021 */ addu $t6, $t7, $v0 -/* 0F1030 7F0BE640 448E3000 */ mtc1 $t6, $f6 -/* 0F1034 7F0BE644 3C018004 */ lui $at, %hi(D_80048394) # $at, 0x8004 -/* 0F1038 7F0BE648 AC2E1018 */ sw $t6, %lo(D_80048394)($at) -/* 0F103C 7F0BE64C 46803220 */ cvt.s.w $f8, $f6 -/* 0F1040 7F0BE650 3C038004 */ lui $v1, %hi(D_800483A8) # $v1, 0x8004 -/* 0F1044 7F0BE654 3C018004 */ lui $at, %hi(g_CurrentMultiPlayerSec) # $at, 0x8004 -/* 0F1048 7F0BE658 2463102C */ addiu $v1, %lo(D_800483A8) # addiu $v1, $v1, 0x102c -/* 0F104C 7F0BE65C 00002025 */ move $a0, $zero -/* 0F1050 7F0BE660 3405FFFF */ li $a1, 65535 -/* 0F1054 7F0BE664 46004283 */ div.s $f10, $f8, $f0 -/* 0F1058 7F0BE668 E42A1028 */ swc1 $f10, %lo(g_CurrentMultiPlayerSec)($at) -/* 0F105C 7F0BE66C 8C790000 */ lw $t9, ($v1) -/* 0F1060 7F0BE670 3C018004 */ lui $at, %hi(g_CurrentMultiPlayerMin) # $at, 0x8004 -/* 0F1064 7F0BE674 03227821 */ addu $t7, $t9, $v0 -/* 0F1068 7F0BE678 448F8000 */ mtc1 $t7, $f16 -/* 0F106C 7F0BE67C AC6F0000 */ sw $t7, ($v1) -/* 0F1070 7F0BE680 468084A0 */ cvt.s.w $f18, $f16 -/* 0F1074 7F0BE684 46009103 */ div.s $f4, $f18, $f0 -/* 0F1078 7F0BE688 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F107C 7F0BE68C E4241030 */ swc1 $f4, %lo(g_CurrentMultiPlayerMin)($at) -/* 0F1080 7F0BE690 3C014248 */ li $at, 0x42480000 # 50.000000 -/* 0F1084 7F0BE694 44810000 */ mtc1 $at, $f0 -/* 0F1088 7F0BE698 10400009 */ beqz $v0, .L7F0BE6C0 -/* 0F108C 7F0BE69C 3C038004 */ lui $v1, %hi(D_80048390) -/* 0F1090 7F0BE6A0 3C038004 */ lui $v1, %hi(D_80048390) # $v1, 0x8004 -/* 0F1094 7F0BE6A4 3C018004 */ lui $at, %hi(D_80048388) # $at, 0x8004 -/* 0F1098 7F0BE6A8 24631014 */ addiu $v1, %lo(D_80048390) # addiu $v1, $v1, 0x1014 -/* 0F109C 7F0BE6AC AC20100C */ sw $zero, %lo(D_80048388)($at) -/* 0F10A0 7F0BE6B0 AC600000 */ sw $zero, ($v1) -/* 0F10A4 7F0BE6B4 3C028004 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8004 -/* 0F10A8 7F0BE6B8 1000000C */ b .L7F0BE6EC -/* 0F10AC 7F0BE6BC 8C420FF4 */ lw $v0, %lo(g_ClockTimer)($v0) -.L7F0BE6C0: -/* 0F10B0 7F0BE6C0 24631014 */ addiu $v1, $v1, %lo(D_80048390) -/* 0F10B4 7F0BE6C4 3C028004 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8004 -/* 0F10B8 7F0BE6C8 8C420FF4 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0F10BC 7F0BE6CC 8C6E0000 */ lw $t6, ($v1) -/* 0F10C0 7F0BE6D0 240F0001 */ li $t7, 1 -/* 0F10C4 7F0BE6D4 01C2C821 */ addu $t9, $t6, $v0 -/* 0F10C8 7F0BE6D8 2B2105DC */ slti $at, $t9, 0x5dc -/* 0F10CC 7F0BE6DC 14200003 */ bnez $at, .L7F0BE6EC -/* 0F10D0 7F0BE6E0 AC790000 */ sw $t9, ($v1) -/* 0F10D4 7F0BE6E4 3C018004 */ lui $at, %hi(D_80048388) # $at, 0x8004 -/* 0F10D8 7F0BE6E8 AC2F100C */ sw $t7, %lo(D_80048388)($at) -.L7F0BE6EC: -/* 0F10DC 7F0BE6EC 3C0E8004 */ lui $t6, %hi(D_80048388) # $t6, 0x8004 -/* 0F10E0 7F0BE6F0 8DCE100C */ lw $t6, %lo(D_80048388)($t6) -/* 0F10E4 7F0BE6F4 3C038004 */ lui $v1, %hi(D_8004838C) # $v1, 0x8004 -/* 0F10E8 7F0BE6F8 24631010 */ addiu $v1, %lo(D_8004838C) # addiu $v1, $v1, 0x1010 -/* 0F10EC 7F0BE6FC 11C00005 */ beqz $t6, .L7F0BE714 -/* 0F10F0 7F0BE700 00000000 */ nop -/* 0F10F4 7F0BE704 8C790000 */ lw $t9, ($v1) -/* 0F10F8 7F0BE708 0322C021 */ addu $t8, $t9, $v0 -/* 0F10FC 7F0BE70C 10000015 */ b .L7F0BE764 -/* 0F1100 7F0BE710 AC780000 */ sw $t8, ($v1) -.L7F0BE714: -/* 0F1104 7F0BE714 3C038004 */ lui $v1, %hi(D_800483B0) # $v1, 0x8004 -/* 0F1108 7F0BE718 24631034 */ addiu $v1, %lo(D_800483B0) # addiu $v1, $v1, 0x1034 -/* 0F110C 7F0BE71C 8C6F0000 */ lw $t7, ($v1) -/* 0F1110 7F0BE720 3C048004 */ lui $a0, %hi(D_800483B8) # $a0, 0x8004 -/* 0F1114 7F0BE724 3C018004 */ lui $at, %hi(g_StageTimeSec) # $at, 0x8004 -/* 0F1118 7F0BE728 01E2C821 */ addu $t9, $t7, $v0 -/* 0F111C 7F0BE72C 44993000 */ mtc1 $t9, $f6 -/* 0F1120 7F0BE730 AC790000 */ sw $t9, ($v1) -/* 0F1124 7F0BE734 2484103C */ addiu $a0, %lo(D_800483B8) # addiu $a0, $a0, 0x103c -/* 0F1128 7F0BE738 46803220 */ cvt.s.w $f8, $f6 -/* 0F112C 7F0BE73C 46004283 */ div.s $f10, $f8, $f0 -/* 0F1130 7F0BE740 E42A1038 */ swc1 $f10, %lo(g_StageTimeSec)($at) -/* 0F1134 7F0BE744 8C980000 */ lw $t8, ($a0) -/* 0F1138 7F0BE748 3C018004 */ lui $at, %hi(g_PowerOnTimeSec) # $at, 0x8004 -/* 0F113C 7F0BE74C 03027021 */ addu $t6, $t8, $v0 -/* 0F1140 7F0BE750 448E8000 */ mtc1 $t6, $f16 -/* 0F1144 7F0BE754 AC8E0000 */ sw $t6, ($a0) -/* 0F1148 7F0BE758 468084A0 */ cvt.s.w $f18, $f16 -/* 0F114C 7F0BE75C 46009103 */ div.s $f4, $f18, $f0 -/* 0F1150 7F0BE760 E4241040 */ swc1 $f4, %lo(g_PowerOnTimeSec)($at) -.L7F0BE764: -/* 0F1154 7F0BE764 0C000FE1 */ jal viSetUseZBuf -/* 0F1158 7F0BE768 24040001 */ li $a0, 1 -/* 0F115C 7F0BE76C 3C198004 */ lui $t9, %hi(g_CurrentStageToLoad) # $t9, 0x8004 -/* 0F1160 7F0BE770 8F390FE4 */ lw $t9, %lo(g_CurrentStageToLoad)($t9) -/* 0F1164 7F0BE774 2401005A */ li $at, 90 -/* 0F1168 7F0BE778 17210009 */ bne $t9, $at, .L7F0BE7A0 -/* 0F116C 7F0BE77C 00000000 */ nop -/* 0F1170 7F0BE780 0FC2436F */ jal cheat_buttons_mp_related -/* 0F1174 7F0BE784 00000000 */ nop -/* 0F1178 7F0BE788 0FC06920 */ jal menu_init -/* 0F117C 7F0BE78C 00000000 */ nop -/* 0F1180 7F0BE790 0FC30388 */ jal langTick -/* 0F1184 7F0BE794 00000000 */ nop -/* 0F1188 7F0BE798 100000A9 */ b .L7F0BEA40 -/* 0F118C 7F0BE79C 00000000 */ nop -.L7F0BE7A0: -/* 0F1190 7F0BE7A0 0FC26C3F */ jal sub_GAME_7F09BBBC -/* 0F1194 7F0BE7A4 00000000 */ nop -/* 0F1198 7F0BE7A8 0FC2F72D */ jal lvlSetMultipliersForDifficulty -/* 0F119C 7F0BE7AC 00000000 */ nop -/* 0F11A0 7F0BE7B0 0FC2EEF5 */ jal updateRoomStatusFlags -/* 0F11A4 7F0BE7B4 00000000 */ nop -/* 0F11A8 7F0BE7B8 0FC248E4 */ jal sub_GAME_7F092E50 -/* 0F11AC 7F0BE7BC 00000000 */ nop -/* 0F11B0 7F0BE7C0 0FC24E5E */ jal skyTick -/* 0F11B4 7F0BE7C4 00000000 */ nop -/* 0F11B8 7F0BE7C8 0FC28ECE */ jal sub_GAME_7F0A4600 -/* 0F11BC 7F0BE7CC 00000000 */ nop -/* 0F11C0 7F0BE7D0 0FC1A580 */ jal update_bullet_casings -/* 0F11C4 7F0BE7D4 00000000 */ nop -/* 0F11C8 7F0BE7D8 0FC28785 */ jal update_broken_windows -/* 0F11CC 7F0BE7DC 00000000 */ nop -/* 0F11D0 7F0BE7E0 0FC27CA0 */ jal explosionUpdateFlyingParticles -/* 0F11D4 7F0BE7E4 00000000 */ nop -/* 0F11D8 7F0BE7E8 0FC0F1C2 */ jal handle_mp_respawn_and_some_things -/* 0F11DC 7F0BE7EC 00000000 */ nop -/* 0F11E0 7F0BE7F0 0FC3022A */ jal reset_all_music_slots -/* 0F11E4 7F0BE7F4 00000000 */ nop -/* 0F11E8 7F0BE7F8 0FC30388 */ jal langTick -/* 0F11EC 7F0BE7FC 00000000 */ nop -/* 0F11F0 7F0BE800 0FC24116 */ jal get_debug_joy2detailedit_flag -/* 0F11F4 7F0BE804 00000000 */ nop -/* 0F11F8 7F0BE808 1040004D */ beqz $v0, .L7F0BE940 -/* 0F11FC 7F0BE80C 3C068004 */ lui $a2, %hi(D_800483C8) # $a2, 0x8004 -/* 0F1200 7F0BE810 24C6104C */ addiu $a2, %lo(D_800483C8) # addiu $a2, $a2, 0x104c -/* 0F1204 7F0BE814 8CD80000 */ lw $t8, ($a2) -/* 0F1208 7F0BE818 24043000 */ li $a0, 12288 -/* 0F120C 7F0BE81C 17000048 */ bnez $t8, .L7F0BE940 -/* 0F1210 7F0BE820 00000000 */ nop -/* 0F1214 7F0BE824 0C0022E0 */ jal mempAllocBytesInBank -/* 0F1218 7F0BE828 24050004 */ li $a1, 4 -/* 0F121C 7F0BE82C 3C068004 */ lui $a2, %hi(D_800483C8) # $a2, 0x8004 -/* 0F1220 7F0BE830 24C6104C */ addiu $a2, %lo(D_800483C8) # addiu $a2, $a2, 0x104c -/* 0F1224 7F0BE834 10400042 */ beqz $v0, .L7F0BE940 -/* 0F1228 7F0BE838 ACC20000 */ sw $v0, ($a2) -/* 0F122C 7F0BE83C 00001825 */ move $v1, $zero -/* 0F1230 7F0BE840 24052EE0 */ li $a1, 12000 -/* 0F1234 7F0BE844 240400FF */ li $a0, 255 -.L7F0BE848: -/* 0F1238 7F0BE848 8CCE0000 */ lw $t6, ($a2) -/* 0F123C 7F0BE84C 01C3C821 */ addu $t9, $t6, $v1 -/* 0F1240 7F0BE850 A3240000 */ sb $a0, ($t9) -/* 0F1244 7F0BE854 8CD80000 */ lw $t8, ($a2) -/* 0F1248 7F0BE858 03031021 */ addu $v0, $t8, $v1 -/* 0F124C 7F0BE85C 904F0001 */ lbu $t7, 1($v0) -/* 0F1250 7F0BE860 31EEFF1F */ andi $t6, $t7, 0xff1f -/* 0F1254 7F0BE864 35D90020 */ ori $t9, $t6, 0x20 -/* 0F1258 7F0BE868 A0590001 */ sb $t9, 1($v0) -/* 0F125C 7F0BE86C 8CD80000 */ lw $t8, ($a2) -/* 0F1260 7F0BE870 03031021 */ addu $v0, $t8, $v1 -/* 0F1264 7F0BE874 904F0001 */ lbu $t7, 1($v0) -/* 0F1268 7F0BE878 31EEFFE3 */ andi $t6, $t7, 0xffe3 -/* 0F126C 7F0BE87C 35D90004 */ ori $t9, $t6, 4 -/* 0F1270 7F0BE880 A0590001 */ sb $t9, 1($v0) -/* 0F1274 7F0BE884 8CD80000 */ lw $t8, ($a2) -/* 0F1278 7F0BE888 03037821 */ addu $t7, $t8, $v1 -/* 0F127C 7F0BE88C A1E40004 */ sb $a0, 4($t7) -/* 0F1280 7F0BE890 8CCE0000 */ lw $t6, ($a2) -/* 0F1284 7F0BE894 01C31021 */ addu $v0, $t6, $v1 -/* 0F1288 7F0BE898 90590005 */ lbu $t9, 5($v0) -/* 0F128C 7F0BE89C 3338FF1F */ andi $t8, $t9, 0xff1f -/* 0F1290 7F0BE8A0 370F0020 */ ori $t7, $t8, 0x20 -/* 0F1294 7F0BE8A4 A04F0005 */ sb $t7, 5($v0) -/* 0F1298 7F0BE8A8 8CCE0000 */ lw $t6, ($a2) -/* 0F129C 7F0BE8AC 01C31021 */ addu $v0, $t6, $v1 -/* 0F12A0 7F0BE8B0 90590005 */ lbu $t9, 5($v0) -/* 0F12A4 7F0BE8B4 3338FFE3 */ andi $t8, $t9, 0xffe3 -/* 0F12A8 7F0BE8B8 370F0004 */ ori $t7, $t8, 4 -/* 0F12AC 7F0BE8BC A04F0005 */ sb $t7, 5($v0) -/* 0F12B0 7F0BE8C0 8CCE0000 */ lw $t6, ($a2) -/* 0F12B4 7F0BE8C4 01C3C821 */ addu $t9, $t6, $v1 -/* 0F12B8 7F0BE8C8 A3240008 */ sb $a0, 8($t9) -/* 0F12BC 7F0BE8CC 8CD80000 */ lw $t8, ($a2) -/* 0F12C0 7F0BE8D0 03031021 */ addu $v0, $t8, $v1 -/* 0F12C4 7F0BE8D4 904F0009 */ lbu $t7, 9($v0) -/* 0F12C8 7F0BE8D8 31EEFF1F */ andi $t6, $t7, 0xff1f -/* 0F12CC 7F0BE8DC 35D90020 */ ori $t9, $t6, 0x20 -/* 0F12D0 7F0BE8E0 A0590009 */ sb $t9, 9($v0) -/* 0F12D4 7F0BE8E4 8CD80000 */ lw $t8, ($a2) -/* 0F12D8 7F0BE8E8 03031021 */ addu $v0, $t8, $v1 -/* 0F12DC 7F0BE8EC 904F0009 */ lbu $t7, 9($v0) -/* 0F12E0 7F0BE8F0 31EEFFE3 */ andi $t6, $t7, 0xffe3 -/* 0F12E4 7F0BE8F4 35D90004 */ ori $t9, $t6, 4 -/* 0F12E8 7F0BE8F8 A0590009 */ sb $t9, 9($v0) -/* 0F12EC 7F0BE8FC 8CD80000 */ lw $t8, ($a2) -/* 0F12F0 7F0BE900 03037821 */ addu $t7, $t8, $v1 -/* 0F12F4 7F0BE904 A1E4000C */ sb $a0, 0xc($t7) -/* 0F12F8 7F0BE908 8CCE0000 */ lw $t6, ($a2) -/* 0F12FC 7F0BE90C 01C31021 */ addu $v0, $t6, $v1 -/* 0F1300 7F0BE910 9059000D */ lbu $t9, 0xd($v0) -/* 0F1304 7F0BE914 3338FF1F */ andi $t8, $t9, 0xff1f -/* 0F1308 7F0BE918 370F0020 */ ori $t7, $t8, 0x20 -/* 0F130C 7F0BE91C A04F000D */ sb $t7, 0xd($v0) -/* 0F1310 7F0BE920 8CCE0000 */ lw $t6, ($a2) -/* 0F1314 7F0BE924 01C31021 */ addu $v0, $t6, $v1 -/* 0F1318 7F0BE928 9059000D */ lbu $t9, 0xd($v0) -/* 0F131C 7F0BE92C 24630010 */ addiu $v1, $v1, 0x10 -/* 0F1320 7F0BE930 3338FFE3 */ andi $t8, $t9, 0xffe3 -/* 0F1324 7F0BE934 370F0004 */ ori $t7, $t8, 4 -/* 0F1328 7F0BE938 1465FFC3 */ bne $v1, $a1, .L7F0BE848 -/* 0F132C 7F0BE93C A04F000D */ sb $t7, 0xd($v0) -.L7F0BE940: -/* 0F1330 7F0BE940 0FC2413C */ jal get_debug_portal_flag -/* 0F1334 7F0BE944 00000000 */ nop -/* 0F1338 7F0BE948 10400003 */ beqz $v0, .L7F0BE958 -/* 0F133C 7F0BE94C 00000000 */ nop -/* 0F1340 7F0BE950 0FC2F4B4 */ jal lvlPortalDebug7F0BDF10 -/* 0F1344 7F0BE954 00002025 */ move $a0, $zero -.L7F0BE958: -/* 0F1348 7F0BE958 0FC240FC */ jal getDebugMode -/* 0F134C 7F0BE95C 00000000 */ nop -/* 0F1350 7F0BE960 24010004 */ li $at, 4 -/* 0F1354 7F0BE964 10410006 */ beq $v0, $at, .L7F0BE980 -/* 0F1358 7F0BE968 00002025 */ move $a0, $zero -/* 0F135C 7F0BE96C 24010008 */ li $at, 8 -/* 0F1360 7F0BE970 1041001A */ beq $v0, $at, .L7F0BE9DC -/* 0F1364 7F0BE974 00002025 */ move $a0, $zero -/* 0F1368 7F0BE978 10000031 */ b .L7F0BEA40 -/* 0F136C 7F0BE97C 00000000 */ nop -.L7F0BE980: -/* 0F1370 7F0BE980 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F1374 7F0BE984 24050002 */ li $a1, 2 -/* 0F1378 7F0BE988 50400008 */ beql $v0, $zero, .L7F0BE9AC -/* 0F137C 7F0BE98C 00002025 */ move $a0, $zero -/* 0F1380 7F0BE990 0FC2BA3C */ jal sub_GAME_7F0AF630 -/* 0F1384 7F0BE994 2404FFFF */ li $a0, -1 -/* 0F1388 7F0BE998 00002025 */ move $a0, $zero -/* 0F138C 7F0BE99C 00002825 */ move $a1, $zero -/* 0F1390 7F0BE9A0 0FC2C7FE */ jal debugStanView -/* 0F1394 7F0BE9A4 00003025 */ move $a2, $zero -/* 0F1398 7F0BE9A8 00002025 */ move $a0, $zero -.L7F0BE9AC: -/* 0F139C 7F0BE9AC 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F13A0 7F0BE9B0 24050001 */ li $a1, 1 -/* 0F13A4 7F0BE9B4 10400022 */ beqz $v0, .L7F0BEA40 -/* 0F13A8 7F0BE9B8 00000000 */ nop -/* 0F13AC 7F0BE9BC 0FC2BA3C */ jal sub_GAME_7F0AF630 -/* 0F13B0 7F0BE9C0 24040001 */ li $a0, 1 -/* 0F13B4 7F0BE9C4 00002025 */ move $a0, $zero -/* 0F13B8 7F0BE9C8 00002825 */ move $a1, $zero -/* 0F13BC 7F0BE9CC 0FC2C7FE */ jal debugStanView -/* 0F13C0 7F0BE9D0 00003025 */ move $a2, $zero -/* 0F13C4 7F0BE9D4 1000001A */ b .L7F0BEA40 -/* 0F13C8 7F0BE9D8 00000000 */ nop -.L7F0BE9DC: -/* 0F13CC 7F0BE9DC 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F13D0 7F0BE9E0 24050002 */ li $a1, 2 -/* 0F13D4 7F0BE9E4 50400004 */ beql $v0, $zero, .L7F0BE9F8 -/* 0F13D8 7F0BE9E8 00002025 */ move $a0, $zero -/* 0F13DC 7F0BE9EC 0FC08B7E */ jal chrDecrementAnimationTablePointerCount -/* 0F13E0 7F0BE9F0 00000000 */ nop -/* 0F13E4 7F0BE9F4 00002025 */ move $a0, $zero -.L7F0BE9F8: -/* 0F13E8 7F0BE9F8 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F13EC 7F0BE9FC 24050001 */ li $a1, 1 -/* 0F13F0 7F0BEA00 50400004 */ beql $v0, $zero, .L7F0BEA14 -/* 0F13F4 7F0BEA04 00002025 */ move $a0, $zero -/* 0F13F8 7F0BEA08 0FC08B96 */ jal chrIncrementAnimationTablePointerCount -/* 0F13FC 7F0BEA0C 00000000 */ nop -/* 0F1400 7F0BEA10 00002025 */ move $a0, $zero -.L7F0BEA14: -/* 0F1404 7F0BEA14 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F1408 7F0BEA18 24050020 */ li $a1, 32 -/* 0F140C 7F0BEA1C 50400004 */ beql $v0, $zero, .L7F0BEA30 -/* 0F1410 7F0BEA20 00002025 */ move $a0, $zero -/* 0F1414 7F0BEA24 0FC08BA4 */ jal chrToggleD_8002C90C -/* 0F1418 7F0BEA28 00000000 */ nop -/* 0F141C 7F0BEA2C 00002025 */ move $a0, $zero -.L7F0BEA30: -/* 0F1420 7F0BEA30 0C002C20 */ jal joyGetButtons -/* 0F1424 7F0BEA34 24050010 */ li $a1, 16 -/* 0F1428 7F0BEA38 0FC08BAA */ jal sub_GAME_7F022EE0 -/* 0F142C 7F0BEA3C 0002202B */ sltu $a0, $zero, $v0 -.L7F0BEA40: -/* 0F1430 7F0BEA40 0FC240FC */ jal getDebugMode -/* 0F1434 7F0BEA44 00000000 */ nop -/* 0F1438 7F0BEA48 2401000C */ li $at, 12 -/* 0F143C 7F0BEA4C 1041002E */ beq $v0, $at, .L7F0BEB08 -/* 0F1440 7F0BEA50 00002025 */ move $a0, $zero -/* 0F1444 7F0BEA54 2401000D */ li $at, 13 -/* 0F1448 7F0BEA58 10410048 */ beq $v0, $at, .L7F0BEB7C -/* 0F144C 7F0BEA5C 00002025 */ move $a0, $zero -/* 0F1450 7F0BEA60 24010038 */ li $at, 56 -/* 0F1454 7F0BEA64 54410074 */ bnel $v0, $at, .L7F0BEC38 -/* 0F1458 7F0BEA68 8FBF0014 */ lw $ra, 0x14($sp) -/* 0F145C 7F0BEA6C 0C000F7E */ jal viGetHorizontalOffset -/* 0F1460 7F0BEA70 00000000 */ nop -/* 0F1464 7F0BEA74 0C000F78 */ jal viGet800232A0 -/* 0F1468 7F0BEA78 AFA20030 */ sw $v0, 0x30($sp) -/* 0F146C 7F0BEA7C AFA2002C */ sw $v0, 0x2c($sp) -/* 0F1470 7F0BEA80 00002025 */ move $a0, $zero -/* 0F1474 7F0BEA84 0C002C20 */ jal joyGetButtons -/* 0F1478 7F0BEA88 24050004 */ li $a1, 4 -/* 0F147C 7F0BEA8C 10400004 */ beqz $v0, .L7F0BEAA0 -/* 0F1480 7F0BEA90 00002025 */ move $a0, $zero -/* 0F1484 7F0BEA94 8FAE002C */ lw $t6, 0x2c($sp) -/* 0F1488 7F0BEA98 25D90001 */ addiu $t9, $t6, 1 -/* 0F148C 7F0BEA9C AFB9002C */ sw $t9, 0x2c($sp) -.L7F0BEAA0: -/* 0F1490 7F0BEAA0 0C002C20 */ jal joyGetButtons -/* 0F1494 7F0BEAA4 24050008 */ li $a1, 8 -/* 0F1498 7F0BEAA8 10400004 */ beqz $v0, .L7F0BEABC -/* 0F149C 7F0BEAAC 00002025 */ move $a0, $zero -/* 0F14A0 7F0BEAB0 8FB8002C */ lw $t8, 0x2c($sp) -/* 0F14A4 7F0BEAB4 270FFFFF */ addiu $t7, $t8, -1 -/* 0F14A8 7F0BEAB8 AFAF002C */ sw $t7, 0x2c($sp) -.L7F0BEABC: -/* 0F14AC 7F0BEABC 0C002C20 */ jal joyGetButtons -/* 0F14B0 7F0BEAC0 24050001 */ li $a1, 1 -/* 0F14B4 7F0BEAC4 10400004 */ beqz $v0, .L7F0BEAD8 -/* 0F14B8 7F0BEAC8 00002025 */ move $a0, $zero -/* 0F14BC 7F0BEACC 8FAE0030 */ lw $t6, 0x30($sp) -/* 0F14C0 7F0BEAD0 25D90001 */ addiu $t9, $t6, 1 -/* 0F14C4 7F0BEAD4 AFB90030 */ sw $t9, 0x30($sp) -.L7F0BEAD8: -/* 0F14C8 7F0BEAD8 0C002C20 */ jal joyGetButtons -/* 0F14CC 7F0BEADC 24050002 */ li $a1, 2 -/* 0F14D0 7F0BEAE0 10400003 */ beqz $v0, .L7F0BEAF0 -/* 0F14D4 7F0BEAE4 8FB80030 */ lw $t8, 0x30($sp) -/* 0F14D8 7F0BEAE8 270FFFFF */ addiu $t7, $t8, -1 -/* 0F14DC 7F0BEAEC AFAF0030 */ sw $t7, 0x30($sp) -.L7F0BEAF0: -/* 0F14E0 7F0BEAF0 0C000F7B */ jal viSetHorizontalOffset -/* 0F14E4 7F0BEAF4 8FA40030 */ lw $a0, 0x30($sp) -/* 0F14E8 7F0BEAF8 0C000F75 */ jal viSet800232A0 -/* 0F14EC 7F0BEAFC 8FA4002C */ lw $a0, 0x2c($sp) -/* 0F14F0 7F0BEB00 1000004D */ b .L7F0BEC38 -/* 0F14F4 7F0BEB04 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0BEB08: -/* 0F14F8 7F0BEB08 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F14FC 7F0BEB0C 24050202 */ li $a1, 514 -/* 0F1500 7F0BEB10 50400004 */ beql $v0, $zero, .L7F0BEB24 -/* 0F1504 7F0BEB14 00002025 */ move $a0, $zero -/* 0F1508 7F0BEB18 0FC2F37A */ jal lvlMusicAppendPlayEndTheme -/* 0F150C 7F0BEB1C 00000000 */ nop -/* 0F1510 7F0BEB20 00002025 */ move $a0, $zero -.L7F0BEB24: -/* 0F1514 7F0BEB24 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F1518 7F0BEB28 24050101 */ li $a1, 257 -/* 0F151C 7F0BEB2C 50400004 */ beql $v0, $zero, .L7F0BEB40 -/* 0F1520 7F0BEB30 00002025 */ move $a0, $zero -/* 0F1524 7F0BEB34 0FC2F367 */ jal lvlMusicAppendPlaySoloDeathShort -/* 0F1528 7F0BEB38 00000000 */ nop -/* 0F152C 7F0BEB3C 00002025 */ move $a0, $zero -.L7F0BEB40: -/* 0F1530 7F0BEB40 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F1534 7F0BEB44 24050400 */ li $a1, 1024 -/* 0F1538 7F0BEB48 50400004 */ beql $v0, $zero, .L7F0BEB5C -/* 0F153C 7F0BEB4C 00002025 */ move $a0, $zero -/* 0F1540 7F0BEB50 0C00190C */ jal musicTrack1Stop -/* 0F1544 7F0BEB54 00000000 */ nop -/* 0F1548 7F0BEB58 00002025 */ move $a0, $zero -.L7F0BEB5C: -/* 0F154C 7F0BEB5C 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F1550 7F0BEB60 24054000 */ li $a1, 16384 -/* 0F1554 7F0BEB64 50400034 */ beql $v0, $zero, .L7F0BEC38 -/* 0F1558 7F0BEB68 8FBF0014 */ lw $ra, 0x14($sp) -/* 0F155C 7F0BEB6C 0C001940 */ jal musicTrack1SaveCurrentVolumeAsTrackDefault -/* 0F1560 7F0BEB70 00000000 */ nop -/* 0F1564 7F0BEB74 10000030 */ b .L7F0BEC38 -/* 0F1568 7F0BEB78 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0BEB7C: -/* 0F156C 7F0BEB7C 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F1570 7F0BEB80 24050622 */ li $a1, 1570 -/* 0F1574 7F0BEB84 1040000B */ beqz $v0, .L7F0BEBB4 -/* 0F1578 7F0BEB88 3C058004 */ lui $a1, %hi(g_DebugMpGameSoundFxIndex) # $a1, 0x8004 -/* 0F157C 7F0BEB8C 84A51068 */ lh $a1, %lo(g_DebugMpGameSoundFxIndex)($a1) -/* 0F1580 7F0BEB90 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 0F1584 7F0BEB94 3C018004 */ lui $at, %hi(g_DebugMpGameSoundFxIndex) # $at, 0x8004 -/* 0F1588 7F0BEB98 24A5FFFF */ addiu $a1, 0xffff # addiu $a1, $a1, -1 -/* 0F158C 7F0BEB9C 00057400 */ sll $t6, $a1, 0x10 -/* 0F1590 7F0BEBA0 000E2C03 */ sra $a1, $t6, 0x10 -/* 0F1594 7F0BEBA4 A4251068 */ sh $a1, %lo(g_DebugMpGameSoundFxIndex)($at) -/* 0F1598 7F0BEBA8 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F159C 7F0BEBAC 0C00209A */ jal sndPlaySfx -/* 0F15A0 7F0BEBB0 00003025 */ move $a2, $zero -.L7F0BEBB4: -/* 0F15A4 7F0BEBB4 00002025 */ move $a0, $zero -/* 0F15A8 7F0BEBB8 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F15AC 7F0BEBBC 24050911 */ li $a1, 2321 -/* 0F15B0 7F0BEBC0 1040000B */ beqz $v0, .L7F0BEBF0 -/* 0F15B4 7F0BEBC4 3C058004 */ lui $a1, %hi(g_DebugMpGameSoundFxIndex) # $a1, 0x8004 -/* 0F15B8 7F0BEBC8 84A51068 */ lh $a1, %lo(g_DebugMpGameSoundFxIndex)($a1) -/* 0F15BC 7F0BEBCC 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 0F15C0 7F0BEBD0 3C018004 */ lui $at, %hi(g_DebugMpGameSoundFxIndex) # $at, 0x8004 -/* 0F15C4 7F0BEBD4 24A50001 */ addiu $a1, 1 # addiu $a1, $a1, 1 -/* 0F15C8 7F0BEBD8 0005C400 */ sll $t8, $a1, 0x10 -/* 0F15CC 7F0BEBDC 00182C03 */ sra $a1, $t8, 0x10 -/* 0F15D0 7F0BEBE0 A4251068 */ sh $a1, %lo(g_DebugMpGameSoundFxIndex)($at) -/* 0F15D4 7F0BEBE4 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F15D8 7F0BEBE8 0C00209A */ jal sndPlaySfx -/* 0F15DC 7F0BEBEC 00003025 */ move $a2, $zero -.L7F0BEBF0: -/* 0F15E0 7F0BEBF0 00002025 */ move $a0, $zero -/* 0F15E4 7F0BEBF4 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F15E8 7F0BEBF8 24050004 */ li $a1, 4 -/* 0F15EC 7F0BEBFC 50400004 */ beql $v0, $zero, .L7F0BEC10 -/* 0F15F0 7F0BEC00 00002025 */ move $a0, $zero -/* 0F15F4 7F0BEC04 0C002161 */ jal sndDeactivateAllSfxByFlag_1 -/* 0F15F8 7F0BEC08 00000000 */ nop -/* 0F15FC 7F0BEC0C 00002025 */ move $a0, $zero -.L7F0BEC10: -/* 0F1600 7F0BEC10 0C002C48 */ jal joyGetButtonsPressedThisFrame -/* 0F1604 7F0BEC14 24050008 */ li $a1, 8 -/* 0F1608 7F0BEC18 10400006 */ beqz $v0, .L7F0BEC34 -/* 0F160C 7F0BEC1C 3C058004 */ lui $a1, %hi(g_DebugMpGameSoundFxIndex) # $a1, 0x8004 -/* 0F1610 7F0BEC20 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 0F1614 7F0BEC24 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0F1618 7F0BEC28 84A51068 */ lh $a1, %lo(g_DebugMpGameSoundFxIndex)($a1) -/* 0F161C 7F0BEC2C 0C00209A */ jal sndPlaySfx -/* 0F1620 7F0BEC30 00003025 */ move $a2, $zero -.L7F0BEC34: -/* 0F1624 7F0BEC34 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0BEC38: -/* 0F1628 7F0BEC38 27BD0198 */ addiu $sp, $sp, 0x198 -/* 0F162C 7F0BEC3C 03E00008 */ jr $ra -/* 0F1630 7F0BEC40 00000000 */ nop -) -#endif + if (joyGetButtonsPressedThisFrame(PLAYER_1, (U_JPAD | R_JPAD | R_TRIG | R_CBUTTONS))) + { + sound_index = g_DebugMpGameSoundFxIndex + 1;\ + sfx = g_musicSfxBufferPtr;\ + *sound_index_ptr = sound_index; + sndPlaySfx(sfx, sound_index, NULL); + } + if (joyGetButtonsPressedThisFrame(PLAYER_1, D_CBUTTONS)) + { + sndDeactivateAllSfxByFlag_1(); + } + + if (joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS)) + { + sound_index = g_DebugMpGameSoundFxIndex;\ + sfx = g_musicSfxBufferPtr; + sndPlaySfx(sfx, sound_index, NULL); + } +#else + sound_index_ptr = &g_DebugMpGameSoundFxIndex; + + if (joyGetButtonsPressedThisFrame(PLAYER_1, (D_JPAD | L_JPAD | L_TRIG | L_CBUTTONS))) + { + sound_index = g_DebugMpGameSoundFxIndex - 1;\ + sfx = g_musicSfxBufferPtr;\ + *sound_index_ptr = sound_index; + sndPlaySfx(sfx, sound_index, NULL); + } + + if (joyGetButtonsPressedThisFrame(PLAYER_1, (U_JPAD | R_JPAD | R_TRIG | R_CBUTTONS))) + { + sound_index = g_DebugMpGameSoundFxIndex + 1;\ + sfx = g_musicSfxBufferPtr;\ + *sound_index_ptr = sound_index; + sndPlaySfx(sfx, sound_index, NULL); + } + + if (joyGetButtonsPressedThisFrame(PLAYER_1, D_CBUTTONS)) + { + sndDeactivateAllSfxByFlag_1(); + } + + if (joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS)) + { + sound_index = g_DebugMpGameSoundFxIndex;\ + sfx = g_musicSfxBufferPtr; + sndPlaySfx(sfx, sound_index, NULL); + } #endif + } + break; + + default: + break; + } + } +} + /** @@ -4448,7 +1517,7 @@ void lvlViewMoveTick(void) bondviewMovePlayerUpdateViewport(joyGetStickX(local_player_number), joyGetStickY(local_player_number), 0); } - sub_GAME_7F0C2E80(); + mpwatchMenuTick(); } break; } @@ -4468,9 +1537,9 @@ void lvlViewMoveTick(void) if(1); - if (g_CurrentPlayer->hands[GUNRIGHT].when_detonating_mines_is_0 == 2) + if (g_CurrentPlayer->hands[GUNRIGHT].weapon_action_state == GUN_ANIM_STATE_FIRE) { - g_CurrentPlayer->hands[GUNRIGHT].when_detonating_mines_is_0 = 5; + g_CurrentPlayer->hands[GUNRIGHT].weapon_action_state = GUN_ANIM_STATE_SWITCH_LOWER; } } diff --git a/src/game/lv.h b/src/game/lv.h index 7a4ef228..2f25a667 100644 --- a/src/game/lv.h +++ b/src/game/lv.h @@ -24,10 +24,20 @@ #define DEFAULT_007_AI_REACTION_SPEED DEFAULT_00_AGENT_AI_REACTION_SPEED struct LvlMpUnknown { - u8 unk_0; - u8 unk_1; - u8 unk_2; - u8 unk_3; + union { + struct { + u8 unk_0; + u8 unk_1; + u8 unk_2; + u8 unk_3; + }; + struct { + u32 unk_0_0 : 8; + u32 unk_1_3 : 3; + u32 unk_1_0 : 3; + }; + u32 word; + }; }; extern s32 D_800483C4; diff --git a/src/game/math_unk_05A9E0.c b/src/game/math_unk_05A9E0.c index 001e9daa..5d53916e 100644 --- a/src/game/math_unk_05A9E0.c +++ b/src/game/math_unk_05A9E0.c @@ -1,8 +1,12 @@ #include // some kind of matrix helper / convenience function. -f32 sub_GAME_7F05A9E0(f32 arg0) { - return sqrtf(((sinf(arg0) / cosf(arg0)) + 1.0f)); +/** + * Address: 7F05A9E0 + */ +f32 modelGetBendStretchScale(f32 halfangle) +{ + return sqrtf(((sinf(halfangle) / cosf(halfangle)) + 1.0f)); } diff --git a/src/game/math_unk_05A9E0.h b/src/game/math_unk_05A9E0.h index 01f0b078..4786ec34 100644 --- a/src/game/math_unk_05A9E0.h +++ b/src/game/math_unk_05A9E0.h @@ -3,6 +3,6 @@ #include -f32 sub_GAME_7F05A9E0(f32 arg0); +f32 modelGetBendStretchScale(f32 arg0); #endif diff --git a/src/game/matrixmath.c b/src/game/matrixmath.c index f02571fb..d02ac16c 100644 --- a/src/game/matrixmath.c +++ b/src/game/matrixmath.c @@ -489,339 +489,43 @@ void matrix_4x4_7F058C88(void) D_80032310[0] = flt_CODE_bss_80075DA0; } -#ifdef NONMATCHING -// #define GET_HIGH_S16(x, y) (x & 0xFFFF0000) | (y >> 16); -// #define GET_LOW_S16(x, y) (x << 16) | (y & 0xFFFF); - -// #define STORE_HIGH_AND_LOW_16(index) \ -// var1 = (s32)(matrix[(index) * 2 + 0] * D_80032310[(index) & 0]); \ -// var2 = (s32)(matrix[(index) * 2 + 1] * D_80032310[(index) & 1]); \ -// result[index + 0] = GET_HIGH_S16(var1, var2); \ -// result[index + 8] = GET_LOW_S16(var1, var2); -# define FTOFIX32(x) (long)((x)*D_80032310[0]) - +/* + * Address: 0x7F058C9C +*/ void matrix_4x4_f32_to_s32(f32 mf[4][4], s32 ms[4][4]) { - int i, j; - int e1, e2; - int *ai, *af; + f32 *src = (f32 *)mf; + s32 *dst = (s32 *)ms; + s32 i; - ai = (int *)&ms[0][0]; - af = (int *)&ms[2][0]; + for (i = 0; i < 8; i += 1) + { + s32 e1, e2; - for (i = 0; i < 4; i++) - for (j = 0; j < 2; j++) - { - e1 = FTOFIX32(mf[i][j * 2]); - e2 = FTOFIX32(mf[i][j * 2 + 1]); - *(ai++) = (e1 & 0xffff0000) | ((e2 >> 16) & 0xffff); - *(af++) = ((e1 << 16) & 0xffff0000) | (e2 & 0xffff); - } + e1 = (s32)(src[((i + 0) << 1) + 0] * D_80032310[0]); + e2 = (s32)(src[((i + 0) << 1) + 1] * D_80032310[(i + 0) & 1]); + dst[(i + 0) + 0] = (e1 & 0xffff0000) | (((u32)e2) >> 16); + dst[(i + 0) + 8] = (e1 << 16) | (e2 & 0xffff); + } } +/* + * Address: 0x7F058E78 + * Reads packed s32 words from src, writes floats to dst (inverse of matrix_4x4_f32_to_s32). +*/ +void sub_GAME_7F058E78(Mtxf *src, Mtxf *dst) { + u32 *srcwords = (u32 *) src; + f32 *dstfloats = (f32 *) dst; + s32 i; -// // s32 i; -// // s32 x; -// // s32 y; -// // for (i = 0; i < 8; i++) { -// // result[i] = -// // //x = D_80032310[(i + 0) & 0] * matrix[i][0]; -// // //y = D_80032310[(i + 0) & 0] * matrix[0][i]; -// // //y = D_80032310[(i + 0) & 1] -// // } - -// s32 i; -// u32 var1; -// u32 var2; -// // u32 var3; -// // u32 var4; -// // u32 var5; -// // u32 var6; -// // u32 var7; -// // u32 var8; -// for (i = 0; i < 8; i += 4) { -// STORE_HIGH_AND_LOW_16(i + 0) -// STORE_HIGH_AND_LOW_16(i + 1) -// STORE_HIGH_AND_LOW_16(i + 2) -// STORE_HIGH_AND_LOW_16(i + 3) - - - -// // var1 = (s32)(D_80032310[0] * matrix[(i + 0) * 2 + 0]); -// // var2 = (s32)(D_80032310[0] * matrix[(i + 0) * 2 + 1]); -// // result[i + 0] = GET_HIGH_S16(var1, var2); -// // result[i + 8] = GET_LOW_S16(var1, var2); -// // var3 = (s32)(D_80032310[0] * matrix[(i + 1) * 2 + 0]); -// // var4 = (s32)(D_80032310[1] * matrix[(i + 1) * 2 + 1]); -// // result[i + 1]= GET_HIGH_S16(var3, var4); -// // result[i + 9] = GET_LOW_S16(var3, var4); -// // var5 = (s32)(D_80032310[0] * matrix[(i + 2) * 2 + 0]); -// // var6 = (s32)(D_80032310[0] * matrix[(i + 2) * 2 + 1]); -// // result[i + 2] = GET_HIGH_S16(var5, var6); -// // result[i + 10] = GET_LOW_S16(var5, var6); -// // var7 = (s32)(D_80032310[0] * matrix[(i + 3) * 2 + 0]); -// // var8 = (s32)(D_80032310[1] * matrix[(i + 3) * 2 + 1]); -// // result[i + 3] = GET_HIGH_S16(var7, var8); -// // result[i + 11] = GET_LOW_S16(var7, var8); -// } -// } -#else -GLOBAL_ASM( -.text -glabel matrix_4x4_f32_to_s32 -/* 08D7CC 7F058C9C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 08D7D0 7F058CA0 AFB1000C */ sw $s1, 0xc($sp) -/* 08D7D4 7F058CA4 AFB30014 */ sw $s3, 0x14($sp) -/* 08D7D8 7F058CA8 AFB20010 */ sw $s2, 0x10($sp) -/* 08D7DC 7F058CAC 3C118003 */ lui $s1, %hi(D_80032310) -/* 08D7E0 7F058CB0 AFB00008 */ sw $s0, 8($sp) -/* 08D7E4 7F058CB4 26312310 */ addiu $s1, %lo(D_80032310) # addiu $s1, $s1, 0x2310 -/* 08D7E8 7F058CB8 3C12FFFF */ lui $s2, 0xffff -/* 08D7EC 7F058CBC 24130008 */ li $s3, 8 -/* 08D7F0 7F058CC0 00001025 */ move $v0, $zero -/* 08D7F4 7F058CC4 00A05825 */ move $t3, $a1 -.L7F058CC8: -/* 08D7F8 7F058CC8 C6320000 */ lwc1 $f18, ($s1) -/* 08D7FC 7F058CCC 000278C0 */ sll $t7, $v0, 3 -/* 08D800 7F058CD0 008F5021 */ addu $t2, $a0, $t7 -/* 08D804 7F058CD4 C5500000 */ lwc1 $f16, ($t2) -/* 08D808 7F058CD8 C54E0004 */ lwc1 $f14, 4($t2) -/* 08D80C 7F058CDC 30590001 */ andi $t9, $v0, 1 -/* 08D810 7F058CE0 46109402 */ mul.s $f16, $f18, $f16 -/* 08D814 7F058CE4 00197080 */ sll $t6, $t9, 2 -/* 08D818 7F058CE8 022E7821 */ addu $t7, $s1, $t6 -/* 08D81C 7F058CEC C5F20000 */ lwc1 $f18, ($t7) -/* 08D820 7F058CF0 24470001 */ addiu $a3, $v0, 1 -/* 08D824 7F058CF4 24480002 */ addiu $t0, $v0, 2 -/* 08D828 7F058CF8 460E9382 */ mul.s $f14, $f18, $f14 -/* 08D82C 7F058CFC 4600840D */ trunc.w.s $f16, $f16 -/* 08D830 7F058D00 24490003 */ addiu $t1, $v0, 3 -/* 08D834 7F058D04 24420004 */ addiu $v0, $v0, 4 -/* 08D838 7F058D08 256B0010 */ addiu $t3, $t3, 0x10 -/* 08D83C 7F058D0C 44038000 */ mfc1 $v1, $f16 -/* 08D840 7F058D10 4600738D */ trunc.w.s $f14, $f14 -/* 08D844 7F058D14 0072C824 */ and $t9, $v1, $s2 -/* 08D848 7F058D18 0003C400 */ sll $t8, $v1, 0x10 -/* 08D84C 7F058D1C 44067000 */ mfc1 $a2, $f14 -/* 08D850 7F058D20 00000000 */ nop -/* 08D854 7F058D24 00067402 */ srl $t6, $a2, 0x10 -/* 08D858 7F058D28 032E7825 */ or $t7, $t9, $t6 -/* 08D85C 7F058D2C AD6FFFF0 */ sw $t7, -0x10($t3) -/* 08D860 7F058D30 30D9FFFF */ andi $t9, $a2, 0xffff -/* 08D864 7F058D34 03197025 */ or $t6, $t8, $t9 -/* 08D868 7F058D38 AD6E0010 */ sw $t6, 0x10($t3) -/* 08D86C 7F058D3C C62E0000 */ lwc1 $f14, ($s1) -/* 08D870 7F058D40 0007C0C0 */ sll $t8, $a3, 3 -/* 08D874 7F058D44 00986021 */ addu $t4, $a0, $t8 -/* 08D878 7F058D48 C5900000 */ lwc1 $f16, ($t4) -/* 08D87C 7F058D4C C5920004 */ lwc1 $f18, 4($t4) -/* 08D880 7F058D50 30EE0001 */ andi $t6, $a3, 1 -/* 08D884 7F058D54 46107402 */ mul.s $f16, $f14, $f16 -/* 08D888 7F058D58 000E7880 */ sll $t7, $t6, 2 -/* 08D88C 7F058D5C 022FC021 */ addu $t8, $s1, $t7 -/* 08D890 7F058D60 C70E0000 */ lwc1 $f14, ($t8) -/* 08D894 7F058D64 46127482 */ mul.s $f18, $f14, $f18 -/* 08D898 7F058D68 4600840D */ trunc.w.s $f16, $f16 -/* 08D89C 7F058D6C 44038000 */ mfc1 $v1, $f16 -/* 08D8A0 7F058D70 4600948D */ trunc.w.s $f18, $f18 -/* 08D8A4 7F058D74 00727024 */ and $t6, $v1, $s2 -/* 08D8A8 7F058D78 0003CC00 */ sll $t9, $v1, 0x10 -/* 08D8AC 7F058D7C 44069000 */ mfc1 $a2, $f18 -/* 08D8B0 7F058D80 00000000 */ nop -/* 08D8B4 7F058D84 00067C02 */ srl $t7, $a2, 0x10 -/* 08D8B8 7F058D88 01CFC025 */ or $t8, $t6, $t7 -/* 08D8BC 7F058D8C AD78FFF4 */ sw $t8, -0xc($t3) -/* 08D8C0 7F058D90 30CEFFFF */ andi $t6, $a2, 0xffff -/* 08D8C4 7F058D94 032E7825 */ or $t7, $t9, $t6 -/* 08D8C8 7F058D98 AD6F0014 */ sw $t7, 0x14($t3) -/* 08D8CC 7F058D9C C6320000 */ lwc1 $f18, ($s1) -/* 08D8D0 7F058DA0 0008C8C0 */ sll $t9, $t0, 3 -/* 08D8D4 7F058DA4 00996821 */ addu $t5, $a0, $t9 -/* 08D8D8 7F058DA8 C5B00000 */ lwc1 $f16, ($t5) -/* 08D8DC 7F058DAC C5AE0004 */ lwc1 $f14, 4($t5) -/* 08D8E0 7F058DB0 310F0001 */ andi $t7, $t0, 1 -/* 08D8E4 7F058DB4 46109402 */ mul.s $f16, $f18, $f16 -/* 08D8E8 7F058DB8 000FC080 */ sll $t8, $t7, 2 -/* 08D8EC 7F058DBC 0238C821 */ addu $t9, $s1, $t8 -/* 08D8F0 7F058DC0 C7320000 */ lwc1 $f18, ($t9) -/* 08D8F4 7F058DC4 460E9382 */ mul.s $f14, $f18, $f14 -/* 08D8F8 7F058DC8 4600840D */ trunc.w.s $f16, $f16 -/* 08D8FC 7F058DCC 44038000 */ mfc1 $v1, $f16 -/* 08D900 7F058DD0 4600738D */ trunc.w.s $f14, $f14 -/* 08D904 7F058DD4 00727824 */ and $t7, $v1, $s2 -/* 08D908 7F058DD8 00037400 */ sll $t6, $v1, 0x10 -/* 08D90C 7F058DDC 44067000 */ mfc1 $a2, $f14 -/* 08D910 7F058DE0 00000000 */ nop -/* 08D914 7F058DE4 0006C402 */ srl $t8, $a2, 0x10 -/* 08D918 7F058DE8 01F8C825 */ or $t9, $t7, $t8 -/* 08D91C 7F058DEC 30CFFFFF */ andi $t7, $a2, 0xffff -/* 08D920 7F058DF0 AD79FFF8 */ sw $t9, -8($t3) -/* 08D924 7F058DF4 01CFC025 */ or $t8, $t6, $t7 -/* 08D928 7F058DF8 AD780018 */ sw $t8, 0x18($t3) -/* 08D92C 7F058DFC C62E0000 */ lwc1 $f14, ($s1) -/* 08D930 7F058E00 000970C0 */ sll $t6, $t1, 3 -/* 08D934 7F058E04 008E8021 */ addu $s0, $a0, $t6 -/* 08D938 7F058E08 C6100000 */ lwc1 $f16, ($s0) -/* 08D93C 7F058E0C C6120004 */ lwc1 $f18, 4($s0) -/* 08D940 7F058E10 31380001 */ andi $t8, $t1, 1 -/* 08D944 7F058E14 46107402 */ mul.s $f16, $f14, $f16 -/* 08D948 7F058E18 0018C880 */ sll $t9, $t8, 2 -/* 08D94C 7F058E1C 02397021 */ addu $t6, $s1, $t9 -/* 08D950 7F058E20 C5CE0000 */ lwc1 $f14, ($t6) -/* 08D954 7F058E24 46127482 */ mul.s $f18, $f14, $f18 -/* 08D958 7F058E28 4600840D */ trunc.w.s $f16, $f16 -/* 08D95C 7F058E2C 44038000 */ mfc1 $v1, $f16 -/* 08D960 7F058E30 4600948D */ trunc.w.s $f18, $f18 -/* 08D964 7F058E34 0072C024 */ and $t8, $v1, $s2 -/* 08D968 7F058E38 00037C00 */ sll $t7, $v1, 0x10 -/* 08D96C 7F058E3C 44069000 */ mfc1 $a2, $f18 -/* 08D970 7F058E40 00000000 */ nop -/* 08D974 7F058E44 0006CC02 */ srl $t9, $a2, 0x10 -/* 08D978 7F058E48 03197025 */ or $t6, $t8, $t9 -/* 08D97C 7F058E4C 30D8FFFF */ andi $t8, $a2, 0xffff -/* 08D980 7F058E50 01F8C825 */ or $t9, $t7, $t8 -/* 08D984 7F058E54 AD6EFFFC */ sw $t6, -4($t3) -/* 08D988 7F058E58 1453FF9B */ bne $v0, $s3, .L7F058CC8 -/* 08D98C 7F058E5C AD79001C */ sw $t9, 0x1c($t3) -/* 08D990 7F058E60 8FB00008 */ lw $s0, 8($sp) -/* 08D994 7F058E64 8FB1000C */ lw $s1, 0xc($sp) -/* 08D998 7F058E68 8FB20010 */ lw $s2, 0x10($sp) -/* 08D99C 7F058E6C 8FB30014 */ lw $s3, 0x14($sp) -/* 08D9A0 7F058E70 03E00008 */ jr $ra -/* 08D9A4 7F058E74 27BD0018 */ addiu $sp, $sp, 0x18 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F058E78(void) { + for (i = 0; i < 8; i++) { + u32 word1 = srcwords[i + 0]; + u32 word2 = srcwords[i + 8]; + dstfloats[(i << 1) + 0] = (s32) ((word1 & 0xffff0000) | (word2 >> 16)) / D_80032310[0]; + dstfloats[(i << 1) + 1] = (s32) ((word1 << 16) | (word2 & 0xffff)) / D_80032310[i & 1]; + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F058E78 -/* 08D9A8 7F058E78 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 08D9AC 7F058E7C AFB20010 */ sw $s2, 0x10($sp) -/* 08D9B0 7F058E80 AFB30014 */ sw $s3, 0x14($sp) -/* 08D9B4 7F058E84 AFB1000C */ sw $s1, 0xc($sp) -/* 08D9B8 7F058E88 3C128003 */ lui $s2, %hi(D_80032310) -/* 08D9BC 7F058E8C AFB00008 */ sw $s0, 8($sp) -/* 08D9C0 7F058E90 26522310 */ addiu $s2, %lo(D_80032310) # addiu $s2, $s2, 0x2310 -/* 08D9C4 7F058E94 3C11FFFF */ lui $s1, 0xffff -/* 08D9C8 7F058E98 24130008 */ li $s3, 8 -/* 08D9CC 7F058E9C 00001025 */ move $v0, $zero -/* 08D9D0 7F058EA0 00805025 */ move $t2, $a0 -.L7F058EA4: -/* 08D9D4 7F058EA4 8D430000 */ lw $v1, ($t2) -/* 08D9D8 7F058EA8 8D460020 */ lw $a2, 0x20($t2) -/* 08D9DC 7F058EAC C6480000 */ lwc1 $f8, ($s2) -/* 08D9E0 7F058EB0 0071C024 */ and $t8, $v1, $s1 -/* 08D9E4 7F058EB4 0006CC02 */ srl $t9, $a2, 0x10 -/* 08D9E8 7F058EB8 03197025 */ or $t6, $t8, $t9 -/* 08D9EC 7F058EBC 448E2000 */ mtc1 $t6, $f4 -/* 08D9F0 7F058EC0 000278C0 */ sll $t7, $v0, 3 -/* 08D9F4 7F058EC4 00AF5821 */ addu $t3, $a1, $t7 -/* 08D9F8 7F058EC8 468021A0 */ cvt.s.w $f6, $f4 -/* 08D9FC 7F058ECC 00037C00 */ sll $t7, $v1, 0x10 -/* 08DA00 7F058ED0 30D8FFFF */ andi $t8, $a2, 0xffff -/* 08DA04 7F058ED4 01F8C825 */ or $t9, $t7, $t8 -/* 08DA08 7F058ED8 44998000 */ mtc1 $t9, $f16 -/* 08DA0C 7F058EDC 304E0001 */ andi $t6, $v0, 1 -/* 08DA10 7F058EE0 46083283 */ div.s $f10, $f6, $f8 -/* 08DA14 7F058EE4 000E7880 */ sll $t7, $t6, 2 -/* 08DA18 7F058EE8 024FC021 */ addu $t8, $s2, $t7 -/* 08DA1C 7F058EEC 24470001 */ addiu $a3, $v0, 1 -/* 08DA20 7F058EF0 468084A0 */ cvt.s.w $f18, $f16 -/* 08DA24 7F058EF4 000770C0 */ sll $t6, $a3, 3 -/* 08DA28 7F058EF8 00AE6021 */ addu $t4, $a1, $t6 -/* 08DA2C 7F058EFC 24480002 */ addiu $t0, $v0, 2 -/* 08DA30 7F058F00 24490003 */ addiu $t1, $v0, 3 -/* 08DA34 7F058F04 24420004 */ addiu $v0, $v0, 4 -/* 08DA38 7F058F08 254A0010 */ addiu $t2, $t2, 0x10 -/* 08DA3C 7F058F0C E56A0000 */ swc1 $f10, ($t3) -/* 08DA40 7F058F10 C7040000 */ lwc1 $f4, ($t8) -/* 08DA44 7F058F14 46049183 */ div.s $f6, $f18, $f4 -/* 08DA48 7F058F18 E5660004 */ swc1 $f6, 4($t3) -/* 08DA4C 7F058F1C 8D460014 */ lw $a2, 0x14($t2) -/* 08DA50 7F058F20 8D43FFF4 */ lw $v1, -0xc($t2) -/* 08DA54 7F058F24 C6500000 */ lwc1 $f16, ($s2) -/* 08DA58 7F058F28 0006C402 */ srl $t8, $a2, 0x10 -/* 08DA5C 7F058F2C 00717824 */ and $t7, $v1, $s1 -/* 08DA60 7F058F30 01F8C825 */ or $t9, $t7, $t8 -/* 08DA64 7F058F34 44994000 */ mtc1 $t9, $f8 -/* 08DA68 7F058F38 30CFFFFF */ andi $t7, $a2, 0xffff -/* 08DA6C 7F058F3C 00037400 */ sll $t6, $v1, 0x10 -/* 08DA70 7F058F40 468042A0 */ cvt.s.w $f10, $f8 -/* 08DA74 7F058F44 01CFC025 */ or $t8, $t6, $t7 -/* 08DA78 7F058F48 44982000 */ mtc1 $t8, $f4 -/* 08DA7C 7F058F4C 30F90001 */ andi $t9, $a3, 1 -/* 08DA80 7F058F50 00197080 */ sll $t6, $t9, 2 -/* 08DA84 7F058F54 468021A0 */ cvt.s.w $f6, $f4 -/* 08DA88 7F058F58 024E7821 */ addu $t7, $s2, $t6 -/* 08DA8C 7F058F5C 0008C8C0 */ sll $t9, $t0, 3 -/* 08DA90 7F058F60 00B96821 */ addu $t5, $a1, $t9 -/* 08DA94 7F058F64 46105483 */ div.s $f18, $f10, $f16 -/* 08DA98 7F058F68 E5920000 */ swc1 $f18, ($t4) -/* 08DA9C 7F058F6C C5E80000 */ lwc1 $f8, ($t7) -/* 08DAA0 7F058F70 46083283 */ div.s $f10, $f6, $f8 -/* 08DAA4 7F058F74 E58A0004 */ swc1 $f10, 4($t4) -/* 08DAA8 7F058F78 8D460018 */ lw $a2, 0x18($t2) -/* 08DAAC 7F058F7C 8D43FFF8 */ lw $v1, -8($t2) -/* 08DAB0 7F058F80 C6440000 */ lwc1 $f4, ($s2) -/* 08DAB4 7F058F84 00067C02 */ srl $t7, $a2, 0x10 -/* 08DAB8 7F058F88 00717024 */ and $t6, $v1, $s1 -/* 08DABC 7F058F8C 01CFC025 */ or $t8, $t6, $t7 -/* 08DAC0 7F058F90 44988000 */ mtc1 $t8, $f16 -/* 08DAC4 7F058F94 30CEFFFF */ andi $t6, $a2, 0xffff -/* 08DAC8 7F058F98 0003CC00 */ sll $t9, $v1, 0x10 -/* 08DACC 7F058F9C 468084A0 */ cvt.s.w $f18, $f16 -/* 08DAD0 7F058FA0 032E7825 */ or $t7, $t9, $t6 -/* 08DAD4 7F058FA4 448F4000 */ mtc1 $t7, $f8 -/* 08DAD8 7F058FA8 31180001 */ andi $t8, $t0, 1 -/* 08DADC 7F058FAC 0018C880 */ sll $t9, $t8, 2 -/* 08DAE0 7F058FB0 468042A0 */ cvt.s.w $f10, $f8 -/* 08DAE4 7F058FB4 02597021 */ addu $t6, $s2, $t9 -/* 08DAE8 7F058FB8 0009C0C0 */ sll $t8, $t1, 3 -/* 08DAEC 7F058FBC 00B88021 */ addu $s0, $a1, $t8 -/* 08DAF0 7F058FC0 46049183 */ div.s $f6, $f18, $f4 -/* 08DAF4 7F058FC4 E5A60000 */ swc1 $f6, ($t5) -/* 08DAF8 7F058FC8 C5D00000 */ lwc1 $f16, ($t6) -/* 08DAFC 7F058FCC 46105483 */ div.s $f18, $f10, $f16 -/* 08DB00 7F058FD0 E5B20004 */ swc1 $f18, 4($t5) -/* 08DB04 7F058FD4 8D46001C */ lw $a2, 0x1c($t2) -/* 08DB08 7F058FD8 8D43FFFC */ lw $v1, -4($t2) -/* 08DB0C 7F058FDC C6480000 */ lwc1 $f8, ($s2) -/* 08DB10 7F058FE0 00067402 */ srl $t6, $a2, 0x10 -/* 08DB14 7F058FE4 0071C824 */ and $t9, $v1, $s1 -/* 08DB18 7F058FE8 032E7825 */ or $t7, $t9, $t6 -/* 08DB1C 7F058FEC 448F2000 */ mtc1 $t7, $f4 -/* 08DB20 7F058FF0 30D9FFFF */ andi $t9, $a2, 0xffff -/* 08DB24 7F058FF4 0003C400 */ sll $t8, $v1, 0x10 -/* 08DB28 7F058FF8 468021A0 */ cvt.s.w $f6, $f4 -/* 08DB2C 7F058FFC 03197025 */ or $t6, $t8, $t9 -/* 08DB30 7F059000 448E8000 */ mtc1 $t6, $f16 -/* 08DB34 7F059004 312F0001 */ andi $t7, $t1, 1 -/* 08DB38 7F059008 000FC080 */ sll $t8, $t7, 2 -/* 08DB3C 7F05900C 468084A0 */ cvt.s.w $f18, $f16 -/* 08DB40 7F059010 0258C821 */ addu $t9, $s2, $t8 -/* 08DB44 7F059014 46083283 */ div.s $f10, $f6, $f8 -/* 08DB48 7F059018 E60A0000 */ swc1 $f10, ($s0) -/* 08DB4C 7F05901C C7240000 */ lwc1 $f4, ($t9) -/* 08DB50 7F059020 46049183 */ div.s $f6, $f18, $f4 -/* 08DB54 7F059024 1453FF9F */ bne $v0, $s3, .L7F058EA4 -/* 08DB58 7F059028 E6060004 */ swc1 $f6, 4($s0) -/* 08DB5C 7F05902C 8FB00008 */ lw $s0, 8($sp) -/* 08DB60 7F059030 8FB1000C */ lw $s1, 0xc($sp) -/* 08DB64 7F059034 8FB20010 */ lw $s2, 0x10($sp) -/* 08DB68 7F059038 8FB30014 */ lw $s3, 0x14($sp) -/* 08DB6C 7F05903C 03E00008 */ jr $ra -/* 08DB70 7F059040 27BD0018 */ addiu $sp, $sp, 0x18 -) -#endif void matrix_4x4_7F059044(Mtxf *arg0, Mtx* arg1) { s32 i, j; @@ -841,557 +545,40 @@ void matrix_4x4_7F05914C(Mtx* arg0, Mtxf *arg1) { } } -//#ifdef NONMATCHING -#if 0 -#define MTX_INTPART_PACK(w1, w2) (((w1) & 0xFFFF0000) | ((w2) >> 16)) -#define MTX_FRACPART_PACK(w1, w2) (((w1) << 16) | ((w2) & 0xFFFF)) - -void sub_GAME_7F059244(Mtx* a0, Mtx* a1) { - // s32 i; - // s32 j; - // u32 w1; - // u32 w2; - // for (i = 0; i < 2; i++) { - // for (j = 0; j < 4; j++) { - // w1 = a0->m[i * 2 + j / 2][((j * 2) % 4) + 0]; - // w2 = a0->m[i * 2 + j / 2][((j * 2) % 4) + 1]; - // a1->m[i + 0][j] = MTX_INTPART_PACK(w1, w2); - // a1->m[i + 2][j] = MTX_FRACPART_PACK(w1, w2); - // } - // } - - // Reg alloc and iteration mostly! - // s32 i; - // s32 j; - // for (i = 0; i < 2; i++) { - // for (j = 0; j < 4; j++) { - // u32 w1 = a0[i * 2 + j / 2][(j % 2) * 2 + 0]; - // u32 w2 = a0[i * 2 + j / 2][(j % 2) * 2 + 1]; - // a1[i + 0][j] = MTX_INTPART_PACK(w1, w2); - // a1[i + 2][j] = MTX_FRACPART_PACK(w1, w2); - // } - // } - - // s32 i; - // s32 j; - // s32 *mtxInt = (s32 *)&a1[0][0]; - // s32 *mtxFrc = (s32 *)&a1[2][0]; - // for (i = 0; i < 8; i++) { - // *mtxInt++ = MTX_INTPART_PACK(a0[i * 2], (u32)a0[i * 2 + 1]); - // *mtxFrc++ = MTX_FRACPART_PACK(a0[i * 2], a0[i * 2 + 1]); - // } - - // s32 i; - // s32 j; - // s32 *mtxInt = (s32 *)&a1[0][0]; - // s32 *mtxFrc = (s32 *)&a1[2][0]; - // for (i = 0; i < 8; i++) { - // *mtxInt++ = MTX_INTPART_PACK(a0[i * 2], (u32)a0[i * 2 + 1]); - // *mtxFrc++ = MTX_FRACPART_PACK(a0[i * 2], a0[i * 2 + 1]); - // } - // s32 i; - // s32 j; - // for (i = 0; i < 2; i++) { - // for (j = 0; j < 4; j++) { - // a1[i + 0][j] = MTX_INTPART_PACK(a0[i * 8 + j * 2], (u32)a0[i * 8 + j*2 + 1]); - // a1[i + 2][j] = MTX_FRACPART_PACK(a0[i * 8 + j * 2], a0[i * 8 + j*2 + 1]); - // } - // } - +/* + * Address: 0x7F059244 +*/ +void sub_GAME_7F059244(Mtx *src, Mtx *dst) { + u32 *srcwords = (u32 *) src; + u32 *dstwords = (u32 *) dst; s32 i; - s32 j; - s32* ptr = &a0->m[0][0]; - for (i = 0; i < 2; i++) { - for (j = 0; j < 4; j++) { - s32 w1 = *ptr++; - s32 w2 = *ptr++; - a1->m[i + 0][j] = MTX_INTPART_PACK(w1, (u32)w2); - a1->m[i + 2][j] = MTX_FRACPART_PACK(w1, w2); - } + + for (i = 0; i < 8; i++) { + u32 word1 = srcwords[i << 1]; + u32 word2 = srcwords[(i << 1) + 1]; + + dstwords[i + 0] = (word1 & 0xffff0000) | (word2 >> 16); + dstwords[i + 8] = (word1 << 16) | (word2 & 0xffff); } - - // s32 i; - // s32 j; - // s32 w1; - // s32 w2; - // for (i = 0; i < 2; i++) { - // for (j = 0; j < 4; j++) { - // w1 = a0[i * 8 + j * 2 + 0]; - // w2 = a0[i * 8 + j * 2 + 1]; - // a1[i + 0][j] = MTX_INTPART_PACK(w1, (u32)w2); - // a1[i + 2][j] = MTX_FRACPART_PACK(w1, w2); - // } - // } - - // s32 i = 0; - // s32 *w1 = &a0[0][0]; - // s32 *w2 = &a0[0][1]; - // for (i = 0; i < 2; i++) { - // a1[i + 0][0] = MTX_INTPART_PACK(*w1, (u32)*w2); - // a1[i + 2][0] = MTX_FRACPART_PACK(*w1, *w2); - // w1 += 2; - // w2 += 2; - // a1[i + 0][1] = MTX_INTPART_PACK(*w1, (u32)*w2); - // a1[i + 2][1] = MTX_FRACPART_PACK(*w1, *w2); - // w1 += 2; - // w2 += 2; - // a1[i + 0][2] = MTX_INTPART_PACK(*w1, (u32)*w2); - // a1[i + 2][2] = MTX_FRACPART_PACK(*w1, *w2); - // w1 += 2; - // w2 += 2; - // a1[i + 0][3] = MTX_INTPART_PACK(*w1, (u32)*w2); - // a1[i + 2][3] = MTX_FRACPART_PACK(*w1, *w2); - // } - - // s32 i = 0; - // s32 w1; - // s32 w2; - // for (i = 0; i < 2; i++) { - // w1 = a0[i * 2 + 0][0]; - // w2 = a0[i * 2 + 0][1]; - // a1[i + 0][0] = MTX_INTPART_PACK(w1, (u32)w2); - // a1[i + 2][0] = MTX_FRACPART_PACK(w1, w2); - // w1 = a0[i * 2 + 0][2]; - // w2 = a0[i * 2 + 0][3]; - // a1[i + 0][1] = MTX_INTPART_PACK(w1, (u32)w2); - // a1[i + 2][1] = MTX_FRACPART_PACK(w1, w2); - // w1 = a0[i * 2 + 1][0]; - // w2 = a0[i * 2 + 1][1]; - // a1[i + 0][2] = MTX_INTPART_PACK(w1, (u32)w2); - // a1[i + 2][2] = MTX_FRACPART_PACK(w1, w2); - // w1 = a0[i * 2 + 1][2]; - // w2 = a0[i * 2 + 1][3]; - // a1[i + 0][3] = MTX_INTPART_PACK(w1, (u32)w2); - // a1[i + 2][3] = MTX_FRACPART_PACK(w1, w2); - // } - - - // s32 i; - // for (i = 0; i < 2; i++) { - // a1[i + 0][0] = MTX_INTPART_PACK(a0[i * 2 + 0][0], (u32)a0[i * 2 + 0][1]); - // a1[i + 2][0] = MTX_FRACPART_PACK(a0[i * 2 + 0][0], a0[i * 2 + 0][1]); - // a1[i + 0][1] = MTX_INTPART_PACK(a0[i * 2 + 0][2], (u32)a0[i * 2 + 0][3]); - // a1[i + 2][1] = MTX_FRACPART_PACK(a0[i * 2 + 0][2], a0[i * 2 + 0][3]); - // a1[i + 0][2] = MTX_INTPART_PACK(a0[i * 2 + 1][0], (u32)a0[i * 2 + 1][1]); - // a1[i + 2][2] = MTX_FRACPART_PACK(a0[i * 2 + 1][0], a0[i * 2 + 1][1]); - // a1[i + 0][3] = MTX_INTPART_PACK(a0[i * 2 + 1][2], (u32)a0[i * 2 + 1][3]); - // a1[i + 2][3] = MTX_FRACPART_PACK(a0[i * 2 + 1][2], a0[i * 2 + 1][3]); - // } - - - // a1[0][0] = MTX_INTPART_PACK(a0[0][0], (u32)a0[0][1]); - // a1[2][0] = MTX_FRACPART_PACK(a0[0][0], a0[0][1]); - // a1[0][1] = MTX_INTPART_PACK(a0[0][2], (u32)a0[0][3]); - // a1[2][1] = MTX_FRACPART_PACK(a0[0][2], a0[0][3]); - // a1[0][2] = MTX_INTPART_PACK(a0[1][0], (u32)a0[1][1]); - // a1[2][2] = MTX_FRACPART_PACK(a0[1][0], a0[1][1]); - // a1[0][3] = MTX_INTPART_PACK(a0[1][2], (u32)a0[1][3]); - // a1[2][3] = MTX_FRACPART_PACK(a0[1][2], a0[1][3]); - - // a1[1][0] = MTX_INTPART_PACK(a0[2][0], (u32)a0[2][1]); - // a1[3][0] = MTX_FRACPART_PACK(a0[2][0], a0[2][1]); - // a1[1][1] = MTX_INTPART_PACK(a0[2][2], (u32)a0[2][3]); - // a1[3][1] = MTX_FRACPART_PACK(a0[2][2], a0[2][3]); - // a1[1][2] = MTX_INTPART_PACK(a0[3][0], (u32)a0[3][1]); - // a1[3][2] = MTX_FRACPART_PACK(a0[3][0], a0[3][1]); - // a1[1][3] = MTX_INTPART_PACK(a0[3][2], (u32)a0[3][3]); - // a1[3][3] = MTX_FRACPART_PACK(a0[3][2], a0[3][3]); - -/* $v0 = 0 - loop: - $a1 += 0x10 - $v1 = *($a0 + $v0 * 8 + 0x00) - $a2 = *($a0 + $v0 * 8 + 0x04) - *($a1 - 0x10) = MTX_INTPART_PACK($v1, (u32)$a2) - *($a1 + 0x10) = MTX_FRACPART_PACK($v1, $a2) - $v1 = *($a0 + ($v0 + 1) * 8 + 0x00) - $a2 = *($a0 + ($v0 + 1) * 8 + 0x04) - *($a1 - 0x0C) = MTX_INTPART_PACK($v1, (u32)$a2) - *($a1 + 0x14) = MTX_FRACPART_PACK($v1, $a2) - $v1 = *($a0 + ($v0 + 2) * 8 + 0x00) - $a2 = *($a0 + ($v0 + 2) * 8 + 0x04) - *($a1 - 0x08) = MTX_INTPART_PACK($v1, (u32)$a2) - *($a1 + 0x18) = MTX_FRACPART_PACK($v1, $a2) - $v1 = *($a0 + ($v0 + 3) * 8 + 0x00) - $a2 = *($a0 + ($v0 + 3) * 8 + 0x04) - *($a1 - 0x04) = MTX_INTPART_PACK($v1, (u32)$a2) - *($a1 + 0x1C) = MTX_FRACPART_PACK($v1, $a2) - $v0 += 4 - if ($v0 != 8) { - goto loop; - }*/ -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F059244 -/* 08DD74 7F059244 00001025 */ move $v0, $zero -/* 08DD78 7F059248 00A04025 */ move $t0, $a1 -/* 08DD7C 7F05924C 240D0008 */ li $t5, 8 -/* 08DD80 7F059250 3C0CFFFF */ lui $t4, 0xffff -.L7F059254: -/* 08DD84 7F059254 000278C0 */ sll $t7, $v0, 3 -/* 08DD88 7F059258 008F3821 */ addu $a3, $a0, $t7 -/* 08DD8C 7F05925C 8CE30000 */ lw $v1, ($a3) -/* 08DD90 7F059260 8CE60004 */ lw $a2, 4($a3) -/* 08DD94 7F059264 25080010 */ addiu $t0, $t0, 0x10 -/* 08DD98 7F059268 006CC024 */ and $t8, $v1, $t4 -/* 08DD9C 7F05926C 0006CC02 */ srl $t9, $a2, 0x10 -/* 08DDA0 7F059270 03197025 */ or $t6, $t8, $t9 -/* 08DDA4 7F059274 00037C00 */ sll $t7, $v1, 0x10 -/* 08DDA8 7F059278 30D8FFFF */ andi $t8, $a2, 0xffff -/* 08DDAC 7F05927C 01F8C825 */ or $t9, $t7, $t8 -/* 08DDB0 7F059280 244F0001 */ addiu $t7, $v0, 1 -/* 08DDB4 7F059284 000FC0C0 */ sll $t8, $t7, 3 -/* 08DDB8 7F059288 00984821 */ addu $t1, $a0, $t8 -/* 08DDBC 7F05928C AD0EFFF0 */ sw $t6, -0x10($t0) -/* 08DDC0 7F059290 AD190010 */ sw $t9, 0x10($t0) -/* 08DDC4 7F059294 8D260004 */ lw $a2, 4($t1) -/* 08DDC8 7F059298 8D230000 */ lw $v1, ($t1) -/* 08DDCC 7F05929C 00067402 */ srl $t6, $a2, 0x10 -/* 08DDD0 7F0592A0 006CC824 */ and $t9, $v1, $t4 -/* 08DDD4 7F0592A4 032E7825 */ or $t7, $t9, $t6 -/* 08DDD8 7F0592A8 30D9FFFF */ andi $t9, $a2, 0xffff -/* 08DDDC 7F0592AC 0003C400 */ sll $t8, $v1, 0x10 -/* 08DDE0 7F0592B0 03197025 */ or $t6, $t8, $t9 -/* 08DDE4 7F0592B4 24580002 */ addiu $t8, $v0, 2 -/* 08DDE8 7F0592B8 0018C8C0 */ sll $t9, $t8, 3 -/* 08DDEC 7F0592BC 00995021 */ addu $t2, $a0, $t9 -/* 08DDF0 7F0592C0 AD0E0014 */ sw $t6, 0x14($t0) -/* 08DDF4 7F0592C4 AD0FFFF4 */ sw $t7, -0xc($t0) -/* 08DDF8 7F0592C8 8D460004 */ lw $a2, 4($t2) -/* 08DDFC 7F0592CC 8D430000 */ lw $v1, ($t2) -/* 08DE00 7F0592D0 00067C02 */ srl $t7, $a2, 0x10 -/* 08DE04 7F0592D4 006C7024 */ and $t6, $v1, $t4 -/* 08DE08 7F0592D8 01CFC025 */ or $t8, $t6, $t7 -/* 08DE0C 7F0592DC 30CEFFFF */ andi $t6, $a2, 0xffff -/* 08DE10 7F0592E0 0003CC00 */ sll $t9, $v1, 0x10 -/* 08DE14 7F0592E4 032E7825 */ or $t7, $t9, $t6 -/* 08DE18 7F0592E8 24590003 */ addiu $t9, $v0, 3 -/* 08DE1C 7F0592EC 001970C0 */ sll $t6, $t9, 3 -/* 08DE20 7F0592F0 008E5821 */ addu $t3, $a0, $t6 -/* 08DE24 7F0592F4 AD0F0018 */ sw $t7, 0x18($t0) -/* 08DE28 7F0592F8 AD18FFF8 */ sw $t8, -8($t0) -/* 08DE2C 7F0592FC 8D660004 */ lw $a2, 4($t3) -/* 08DE30 7F059300 8D630000 */ lw $v1, ($t3) -/* 08DE34 7F059304 24420004 */ addiu $v0, $v0, 4 -/* 08DE38 7F059308 0006C402 */ srl $t8, $a2, 0x10 -/* 08DE3C 7F05930C 006C7824 */ and $t7, $v1, $t4 -/* 08DE40 7F059310 01F8C825 */ or $t9, $t7, $t8 -/* 08DE44 7F059314 30CFFFFF */ andi $t7, $a2, 0xffff -/* 08DE48 7F059318 00037400 */ sll $t6, $v1, 0x10 -/* 08DE4C 7F05931C 01CFC025 */ or $t8, $t6, $t7 -/* 08DE50 7F059320 AD18001C */ sw $t8, 0x1c($t0) -/* 08DE54 7F059324 144DFFCB */ bne $v0, $t5, .L7F059254 -/* 08DE58 7F059328 AD19FFFC */ sw $t9, -4($t0) -/* 08DE5C 7F05932C 03E00008 */ jr $ra -/* 08DE60 7F059330 00000000 */ nop -) -#endif - -/* -for ($v0 = 0; $v0 < 2; $v0++) { // pointers? - $a1[$v0 * 2 + 0][0] = $a0[$v0][0] & 0xFFFF0000 | ($a0[$v0 + 2][0] >> 16) - $a1[$v0 * 2 + 0][1] = $a0[$v0][0] << 16 | ($a0[$v0 + 2][0] & 0xFFFF) - $a1[$v0 * 2 + 0][2] = $a0[$v0][1] & 0xFFFF0000 | $a0[$v0 + 2][1] >> 16 - $a1[$v0 * 2 + 0][3] = $a0[$v0][1] << 16 | $a0[$v0 + 2][1] & 0xFFFF - $a1[$v0 * 2 + 1][0] = $a0[$v0][2] & 0xFFFF0000 | $a0[$v0 + 2][2] << 16 - $a1[$v0 * 2 + 1][1] = $a0[$v0][2] << 16 | $a0[$v0 + 2][2] & 0xFFFF - $a1[$v0 * 2 + 1][2] = $a0[$v0][3] & 0xFFFF0000 | $a0[$v0 + 2][3] >> 16 - $a1[$v0 * 2 + 1][3] = $a0[$v0][3] << 16 | $a0[$v0 + 2][3] & 0xffff } -*/ /* -$v0 = 0 -$a3 = $a0 -loop: - $v1 = *($a3) - $a2 = *($a3 + 0x20) - $t0 = $a1 + (($v0 + 0) * 8) - *($t0) = ($v1 & 0xFFFF0000) | ($a2 >> 16) - *($t0 + 0x4) = ($v1 << 16) | ($a2 & 0xFFFF) - $a2 = *($a3 + 0x24) - $v1 = *($a3 + 0x4) - $t1 = $a1 + (($v0 + 1) * 8) - *($t1 + 0) = $v1 & 0xFFFF0000 | $a2 >> 16 - *($t1 + 4) = $v1 << 16 | $a2 & 0xFFFF - $a2 = *($a3 + 0x28) - $v1 = *($a3 + 0x8) - $t2 = $a1 + (($v0 + 2) * 8) - *($t2 + 0) = $v1 & 0xFFFF0000 | $a2 << 16 - *($t2 + 4) = $v1 << 16 | $a2 & 0xFFFF - $a2 = *($a3 + 0x2C) - $v1 = *($a3 + 0xC) - $t3 = $a1 + (($v0 + 3) * 8) - $v0 += 4 - *($t3 + 0) = $v1 & 0xFFFF0000 | $a2 >> 16 - *($t3 + 4) = $v1 << 16 | $a2 & 0xffff - if ($v0 != 8) - { - $a3 += 0x10; - goto loop; - } -return - -*/ -/* -0, 0 -0, 1 -0, 2 -0, 3 -1, 0 -1, 1 -1, 2 -1, 3 -2, 0 + * Address: 0x7F059334 */ +void sub_GAME_7F059334(Mtx *src, Mtx *dst) { + u32 *srcwords = (u32 *) src; + u32 *dstwords = (u32 *) dst; + s32 i; -// void sub_GAME_7F059334(mat4s arg0, mat4s arg1) { -// s32 var1; -// s32 var2; -// s32 i, j; -// for (i = 0; i < 2; i++) { -// for (j = 0; j < 2; j++) { -// var1 = arg0[i + 0][j + 0]; -// var2 = arg0[i + 2][j + 0]; -// arg1[i * 2 + 0][] [i * 8 + j * 2 + 0] = ((var1 & 0xFFFF0000) | (var2 >> 16)); -// arg1[i * 2 + 0] * 2 + 1] = ((var1 << 16) | (var2 & 0xFFFF)); -// var1 = arg0[i + 0][j + 1]; -// var2 = arg0[i + 2][j + 1]; -// arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); -// arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xFFFF)); -// // var1 = arg0[i + 0][2]; -// // var2 = arg0[i + 2][2]; -// // arg1[i * 2 + 1][0] = ((var1 & 0xFFFF0000) | (var2 << 16)); -// // arg1[i * 2 + 1][1] = ((var1 << 16) | (var2 & 0xFFFF)); -// // var1 = arg0[i + 0][3]; -// // var2 = arg0[i + 2][3]; -// // arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); -// // arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xffff)); -// } -// } + for (i = 0; i < 8; i++) { + u32 word1 = srcwords[i + 0]; + u32 word2 = srcwords[i + 8]; - - - -// sub_GAME_7F059334(s32* arg0, s32* arg1) { -// s32* var1 = arg0; -// s32* var2 = arg1; -// for (i = 0; i < 2; i++) { -// for (; var1 < (arg0 + 8); var1++, var2 += 4) -// var1 = arg0[i + 0][0]; -// var2 = arg0[i + 2][0]; -// arg1[i * 2 + 0][0] = ((var1 & 0xFFFF0000) | (var2 >> 16)); -// arg1[i * 2 + 0][1] = ((var1 << 16) | (var2 & 0xFFFF)); -// var1 = arg0[i + 0][1]; -// var2 = arg0[i + 2][1]; -// arg1[i * 2 + 0][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); -// arg1[i * 2 + 0][3] = ((var1 << 16) | (var2 & 0xFFFF)); -// var1 = arg0[i + 0][2]; -// var2 = arg0[i + 2][2]; -// arg1[i * 2 + 1][0] = ((var1 & 0xFFFF0000) | (var2 << 16)); -// arg1[i * 2 + 1][1] = ((var1 << 16) | (var2 & 0xFFFF)); -// var1 = arg0[i + 0][3]; -// var2 = arg0[i + 2][3]; -// arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); -// arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xffff)); -// } - -// s32 var1; -// s32 var2; -// s32 i; -// for (i = 0; i < 2; i++) { -// var1 = arg0[i + 0][0]; -// var2 = arg0[i + 2][0]; -// arg1[i * 2 + 0][0] = ((var1 & 0xFFFF0000) | (var2 >> 16)); -// arg1[i * 2 + 0][1] = ((var1 << 16) | (var2 & 0xFFFF)); -// var1 = arg0[i + 0][1]; -// var2 = arg0[i + 2][1]; -// arg1[i * 2 + 0][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); -// arg1[i * 2 + 0][3] = ((var1 << 16) | (var2 & 0xFFFF)); -// var1 = arg0[i + 0][2]; -// var2 = arg0[i + 2][2]; -// arg1[i * 2 + 1][0] = ((var1 & 0xFFFF0000) | (var2 << 16)); -// arg1[i * 2 + 1][1] = ((var1 << 16) | (var2 & 0xFFFF)); -// var1 = arg0[i + 0][3]; -// var2 = arg0[i + 2][3]; -// arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); -// arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xffff)); -// } - - // s32 temp_v1; - // s32 temp_v1_2; - // s32 temp_v1_3; - // s32 temp_v1_4; - // u32 temp_a2; - // u32 temp_a2_2; - // u32 temp_a2_3; - // u32 temp_a2_4; - // s32 i; - - // for (i = 0; i < 2; i++) { - // temp_v1 = arg0[i + 0][0]; - // temp_a2 = arg0[i + 2][0]; - // arg1[i * 2][0] = ((temp_v1 & 0xFFFF0000) | (temp_a2 >> 0x10)); - // arg1[i * 2][1] = ((temp_v1 << 0x10) | (temp_a2 & 0xFFFF)); - // temp_v1_2 = arg0[i + 0][1]; - // temp_a2_2 = arg0[i + 2][1]; - // arg1[i * 2][2] = ((temp_v1_2 & 0xFFFF0000) | (temp_a2_2 >> 0x10)); - // arg1[i * 2][3] = ((temp_v1_2 << 0x10) | (temp_a2_2 & 0xFFFF)); - // temp_v1_3 = arg0[i + 0][2]; - // temp_a2_3 = arg0[i + 2][2]; - // arg1[i * 2 + 1][0] = ((temp_v1_3 & 0xFFFF0000) | (temp_a2_3 >> 0x10)); - // arg1[i * 2 + 1][1] = ((temp_v1_3 << 0x10) | (temp_a2_3 & 0xFFFF)); - // temp_v1_4 = arg0[i + 0][3]; - // temp_a2_4 = arg0[i + 2][3]; - // arg1[i * 2 + 1][2] = ((temp_v1_4 & 0xFFFF0000) | (temp_a2_4 >> 0x10)); - // arg1[i * 2 + 1][3] = ((temp_v1_4 << 0x10) | (temp_a2_4 & 0xFFFF)); - // } -//} - -#ifdef NONMATCHING -#define MTX_INTPART_PACK(w1, w2) (((w1) & 0xFFFF0000) | (((w2) >> 16)/* & 0xFFFF*/)) -#define MTX_FRACPART_PACK(w1, w2) ((((w1) << 16) & 0xFFFF0000) | ((w2) & 0xFFFF)) - -// void sub_GAME_7F059334(s32 arg0[4][4], s32 arg1[4][4]) { -// s32 i; -// s32 j; -// u32 *m1 = (u32*)&arg0[0][0]; -// u32 *m2 = (u32*)&arg0[2][0]; -// for (i = 0; i < 4; i++) { -// for (j = 0; j < 2; j++) { -// arg1[i][j * 2 + 0] = MTX_INTPART_PACK((*m1), (*m2)); -// m1++; -// arg1[i][j * 2 + 1] = MTX_FRACPART_PACK((*m1), (*m2)); -// m2++; -// } -// } - - - // s32 var1; - // u32 var2; - // s32 i; - // for () - // for (i = 0; i < 2; i++) { - // var1 = arg0[i + 0][0]; - // var2 = arg0[i + 2][0]; - // arg1[i * 2 + 0][0] = ((var1 & 0xFFFF0000) | (var2 >> 16)); - // arg1[i * 2 + 0][1] = ((var1 << 16) | (var2 & 0xFFFF)); - // var1 = arg0[i + 0][1]; - // var2 = arg0[i + 2][1]; - // arg1[i * 2 + 0][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); - // arg1[i * 2 + 0][3] = ((var1 << 16) | (var2 & 0xFFFF)); - // var1 = arg0[i + 0][2]; - // var2 = arg0[i + 2][2]; - // arg1[i * 2 + 1][0] = ((var1 & 0xFFFF0000) | (var2 << 16)); - // arg1[i * 2 + 1][1] = ((var1 << 16) | (var2 & 0xFFFF)); - // var1 = arg0[i + 0][3]; - // var2 = arg0[i + 2][3]; - // arg1[i * 2 + 1][2] = ((var1 & 0xFFFF0000) | (var2 >> 16)); - // arg1[i * 2 + 1][3] = ((var1 << 16) | (var2 & 0xffff)); - // } -//} -// void sub_GAME_7F059334(s32 m1[4][4], s32 m2[4][4]) { -// int i; -// int j; -// int *ai = &m1[0][0]; -// u32 *af = &m1[2][0]; - -// for (j=0; j<2; j++) { -// for (i=0; i<4; i++) { -// m2[i][j*2+0] = (*ai & 0xffff0000) | ((*af >> 16) & 0xffff); -// m2[i][j*2+1] = ((*(ai++) << 16) & 0xffff0000) | (*(af++) & 0xffff); -// } -// } -// } - -//void sub_GAME_7F059334(s32 m1[16], s32 m2[16]) { - // s32 i; - // for (i = 0; i < 8; i++) { - // s32 t1 = m1[i+0]; - // s32 t2 = m1[i+8]; - // m2[i * 2 + 0] = MTX_INTPART_PACK(t1, t2); - // m2[i * 2 + 1] = MTX_FRACPART_PACK(t1, t2); - // } - // s32 i, j; - // for (i = 0; i < 2; i++) { - // for (j = 0; j < 4; j++) { - // s32 t1 = m1[i+0][j]; - // s32 t2 = m1[i+2][j]; - // m2[i*8+j*2+0] = MTX_INTPART_PACK(t1, t2); - // m2[i*8+j*2+1] = MTX_FRACPART_PACK(t1, t2); - // } - // } -//} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F059334 -/* 08DE64 7F059334 00001025 */ move $v0, $zero -/* 08DE68 7F059338 00803825 */ move $a3, $a0 -/* 08DE6C 7F05933C 240D0008 */ li $t5, 8 -/* 08DE70 7F059340 3C0CFFFF */ lui $t4, 0xffff -.L7F059344: -/* 08DE74 7F059344 8CE30000 */ lw $v1, ($a3) -/* 08DE78 7F059348 8CE60020 */ lw $a2, 0x20($a3) -/* 08DE7C 7F05934C 000278C0 */ sll $t7, $v0, 3 -/* 08DE80 7F059350 006CC024 */ and $t8, $v1, $t4 -/* 08DE84 7F059354 0006CC02 */ srl $t9, $a2, 0x10 -/* 08DE88 7F059358 03197025 */ or $t6, $t8, $t9 -/* 08DE8C 7F05935C 00AF4021 */ addu $t0, $a1, $t7 -/* 08DE90 7F059360 00037C00 */ sll $t7, $v1, 0x10 -/* 08DE94 7F059364 30D8FFFF */ andi $t8, $a2, 0xffff -/* 08DE98 7F059368 01F8C825 */ or $t9, $t7, $t8 -/* 08DE9C 7F05936C AD0E0000 */ sw $t6, ($t0) -/* 08DEA0 7F059370 AD190004 */ sw $t9, 4($t0) -/* 08DEA4 7F059374 8CE60024 */ lw $a2, 0x24($a3) -/* 08DEA8 7F059378 8CE30004 */ lw $v1, 4($a3) -/* 08DEAC 7F05937C 244F0001 */ addiu $t7, $v0, 1 -/* 08DEB0 7F059380 000FC0C0 */ sll $t8, $t7, 3 -/* 08DEB4 7F059384 00067402 */ srl $t6, $a2, 0x10 -/* 08DEB8 7F059388 006CC824 */ and $t9, $v1, $t4 -/* 08DEBC 7F05938C 032E7825 */ or $t7, $t9, $t6 -/* 08DEC0 7F059390 00B84821 */ addu $t1, $a1, $t8 -/* 08DEC4 7F059394 30D9FFFF */ andi $t9, $a2, 0xffff -/* 08DEC8 7F059398 0003C400 */ sll $t8, $v1, 0x10 -/* 08DECC 7F05939C 03197025 */ or $t6, $t8, $t9 -/* 08DED0 7F0593A0 AD2E0004 */ sw $t6, 4($t1) -/* 08DED4 7F0593A4 AD2F0000 */ sw $t7, ($t1) -/* 08DED8 7F0593A8 8CE60028 */ lw $a2, 0x28($a3) -/* 08DEDC 7F0593AC 8CE30008 */ lw $v1, 8($a3) -/* 08DEE0 7F0593B0 24580002 */ addiu $t8, $v0, 2 -/* 08DEE4 7F0593B4 0018C8C0 */ sll $t9, $t8, 3 -/* 08DEE8 7F0593B8 00067C02 */ srl $t7, $a2, 0x10 -/* 08DEEC 7F0593BC 006C7024 */ and $t6, $v1, $t4 -/* 08DEF0 7F0593C0 01CFC025 */ or $t8, $t6, $t7 -/* 08DEF4 7F0593C4 00B95021 */ addu $t2, $a1, $t9 -/* 08DEF8 7F0593C8 30CEFFFF */ andi $t6, $a2, 0xffff -/* 08DEFC 7F0593CC 0003CC00 */ sll $t9, $v1, 0x10 -/* 08DF00 7F0593D0 032E7825 */ or $t7, $t9, $t6 -/* 08DF04 7F0593D4 AD4F0004 */ sw $t7, 4($t2) -/* 08DF08 7F0593D8 AD580000 */ sw $t8, ($t2) -/* 08DF0C 7F0593DC 8CE6002C */ lw $a2, 0x2c($a3) -/* 08DF10 7F0593E0 8CE3000C */ lw $v1, 0xc($a3) -/* 08DF14 7F0593E4 24590003 */ addiu $t9, $v0, 3 -/* 08DF18 7F0593E8 001970C0 */ sll $t6, $t9, 3 -/* 08DF1C 7F0593EC 0006C402 */ srl $t8, $a2, 0x10 -/* 08DF20 7F0593F0 006C7824 */ and $t7, $v1, $t4 -/* 08DF24 7F0593F4 01F8C825 */ or $t9, $t7, $t8 -/* 08DF28 7F0593F8 00AE5821 */ addu $t3, $a1, $t6 -/* 08DF2C 7F0593FC 30CFFFFF */ andi $t7, $a2, 0xffff -/* 08DF30 7F059400 00037400 */ sll $t6, $v1, 0x10 -/* 08DF34 7F059404 01CFC025 */ or $t8, $t6, $t7 -/* 08DF38 7F059408 24420004 */ addiu $v0, $v0, 4 -/* 08DF3C 7F05940C AD780004 */ sw $t8, 4($t3) -/* 08DF40 7F059410 AD790000 */ sw $t9, ($t3) -/* 08DF44 7F059414 144DFFCB */ bne $v0, $t5, .L7F059344 -/* 08DF48 7F059418 24E70010 */ addiu $a3, $a3, 0x10 -/* 08DF4C 7F05941C 03E00008 */ jr $ra -/* 08DF50 7F059420 00000000 */ nop -) -#endif + dstwords[(i << 1) + 0] = (word1 & 0xffff0000) | (word2 >> 16); + dstwords[(i << 1) + 1] = (word1 << 16) | (word2 & 0xffff); + } +} /* * Address: 0x7F059424 @@ -1566,7 +753,8 @@ void matrix_4x4_set_projection(Mtxf *matrix, u16* depth_scale, f32 fovy, f32 asp /* * Address: 0x7F059B58 */ -void matrix_4x4_set_rotation_axis_angle(Mtxf *matrix, f32 angle, f32 x, f32 y, f32 z) { +void matrix_4x4_set_rotation_axis_angle(Mtxf *matrix, f32 angle, f32 x, f32 y, f32 z) +{ f32 sine; f32 cosine; f32 norm; @@ -1607,7 +795,8 @@ void matrix_4x4_set_rotation_axis_angle(Mtxf *matrix, f32 angle, f32 x, f32 y, f } -void matrix_4x4_align(Mtxf *matrix, f32 angle, f32 x, f32 y, f32 z) { +void matrix_4x4_align(Mtxf *matrix, f32 angle, f32 x, f32 y, f32 z) +{ angle = RadToDeg(angle); guAlignF(matrix->m, angle, x, y, z); } @@ -1631,7 +820,8 @@ void matrix_4x4_7F059D30(Mtxf *matrix) return; } -void matrix_4x4_set_rotation_inverse(Mtxf *rotation, Mtxf *transpose) { +void matrix_4x4_set_rotation_inverse(Mtxf *rotation, Mtxf *transpose) +{ transpose->m[0][0] = rotation->m[0][0]; transpose->m[0][1] = rotation->m[1][0]; transpose->m[0][2] = rotation->m[2][0]; diff --git a/src/game/matrixmath.h b/src/game/matrixmath.h index 81bc0dcf..532887c4 100644 --- a/src/game/matrixmath.h +++ b/src/game/matrixmath.h @@ -21,7 +21,7 @@ void matrix_4x4_7F058C4C(f32 arg0); void matrix_4x4_copy(Mtxf *src, Mtxf *dst); void matrix_4x4_multiply_homogeneous(Mtxf *lhs, Mtxf *rhs, Mtxf *result); -void matrix_4x4_f32_to_s32(Mtxf *a, Mtxf *b); +void matrix_4x4_f32_to_s32(f32 mf[4][4], s32 ms[4][4]); void matrix_4x4_multiply_homogeneous_in_place(Mtxf *lhs, Mtxf *rhs); void mtx4TransformVecInPlace(Mtxf *matrix, struct coord3d *vector); void matrix_4x4_set_identity(Mtxf *matrix); @@ -32,10 +32,10 @@ void matrix_4x4_set_basis_and_position_target(Mtxf *arg0, f32 arg1, f32 arg2, f3 void matrix_4x4_set_rotation_around_z(f32 angle, Mtxf *matrix); void matrix_4x4_multiply_in_place(Mtxf *lhs, Mtxf *rhs); void matrix_4x4_set_identity_and_position(struct coord3d *position, Mtxf *matrix); -void matrix_column_3_scalar_multiply_2(f32 scalar, f32 *matrix); void matrix_4x4_set_position_and_rotation_around_y(f32 *position, f32 angle, Mtxf *matrix); void matrix_scalar_multiply_2(f32 scalar, f32 *matrix); void matrix_4x4_set_rotation_around_xyz(struct coord3d *angles, Mtxf *matrix); +void matrix_4x4_get_rotation_around_xyz(Mtxf *matrix, struct coord3d *angles); void matrix_4x4_set_basis_and_position(Mtxf *arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, f32 arg9); void matrix_4x4_set_inverse_rotation_and_translation(Mtxf *arg0, Mtxf *arg1); void matrix_column_1_scalar_multiply(f32 scalar, f32 *matrix); @@ -44,6 +44,11 @@ void matrix_column_3_scalar_multiply(f32 scalar, f32 *matrix); void matrix_column_3_scalar_multiply_2(f32 scalar, f32 *matrix); void matrix_4x4_set_position_and_rotation_around_xyz(struct coord3d *position, struct coord3d * rotation, Mtxf *matrix); void matrix_scalar_multiply_3(f32 scalar, f32 *matrix); +void matrix_4x4_align(Mtxf *matrix, f32 angle, f32 x, f32 y, f32 z); +void matrix_4x4_set_rotation_axis_angle(Mtxf *matrix, f32 angle, f32 x, f32 y, f32 z); +void matrix_4x4_set_rotation_inverse(Mtxf *rotation, Mtxf *transpose); +void matrix_4x4_transform_vector(Mtxf *matrix, struct coord3d *vector, struct coord3d *result); +void matrix_row_3_scalar_multiply(f32 scalar, f32 *matrix); // tenative guess void sub_GAME_7F058E78(Mtxf *arg0, Mtxf *arg1); @@ -53,6 +58,7 @@ void matrix_4x4_multiply_homogeneous_eu(f32 lhs[3][3], f32 rhs[3][3], f32 result /* matrixmath_misc.h */ -void sub_GAME_7F05AE00(vec3d *x, vec3d *y, f32 scaler, vec3d *result); - +void vec3Lerp(vec3d *x, vec3d *y, f32 scaler, vec3d *result); +void coord3dCubicSplineInterp(coord3d *prev, coord3d *start, coord3d *end, coord3d *next, f32 fraction, f32 tangentScale, coord3d *result); +void coord3dCatmullRomInterp(coord3d *p0, coord3d *p1, coord3d *p2, coord3d *p3, f32 fraction, coord3d *result); #endif diff --git a/src/game/matrixmath_misc.c b/src/game/matrixmath_misc.c index 5f1fac7b..aa01c39a 100644 --- a/src/game/matrixmath_misc.c +++ b/src/game/matrixmath_misc.c @@ -2,19 +2,28 @@ #include "matrixmath.h" /** + * Address: 7F05AE00 + * * result = x vector plus ((y - x vector) * scaler). + * + * Standard linear interpolation between two 3D points. */ -void sub_GAME_7F05AE00(vec3d *x, vec3d *y, f32 scaler, vec3d *result) +void vec3Lerp(vec3d *x, vec3d *y, f32 scaler, vec3d *result) { result->x = ((y->x - x->x) * scaler) + x->x; result->y = ((y->y - x->y) * scaler) + x->y; result->z = ((y->z - x->z) * scaler) + x->z; } + /** + * Address: 7F05AE50 + * + * Catmull-Rom cubic interpolation for a float. + * * Unused. */ -f32 sub_GAME_7F05AE50(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) +f32 scalarCatmullRomInterp(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { f32 cube; f32 square; @@ -39,7 +48,18 @@ f32 sub_GAME_7F05AE50(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) return total; } -void sub_GAME_7F05AEFC(coord3d *arg0, coord3d *arg1, coord3d *arg2, coord3d *arg3, f32 arg4, coord3d *arg5) + +/** + * Address: 7F05AEFC + * + * Catmull-Rom cubic interpolation for 3D points. + * The result travels from p1 to p2 depending on the value of fraction. p0 and p3 shape the curve. + * Fraction range is [0.0, 1.0], outside of that is cubic extrapolation. + * + * Specific to GoldenEye, every few seconds the game picks a small randomzied offset to slightly change + * where the first person weapon view model points. This function smooths the weapon's drift from one target vector to the next. + */ +void coord3dCatmullRomInterp(coord3d *p0, coord3d *p1, coord3d *p2, coord3d *p3, f32 fraction, coord3d *result) { f32 stack; f32 mult0; @@ -47,138 +67,65 @@ void sub_GAME_7F05AEFC(coord3d *arg0, coord3d *arg1, coord3d *arg2, coord3d *arg f32 mult2; f32 mult3; - f32 squared = arg4 * arg4; - f32 cubed = arg4 * arg4 * arg4; + f32 squared = fraction * fraction; + f32 cubed = fraction * fraction * fraction; - mult0 = squared - 0.5f * (arg4 + cubed); + mult0 = squared - 0.5f * (fraction + cubed); mult1 = 1.5f * cubed - 2.5f * squared + 1.0f; - mult2 = -1.5f * cubed + 2.0f * squared + 0.5f * arg4; + mult2 = -1.5f * cubed + 2.0f * squared + 0.5f * fraction; mult3 = 0.5f * (cubed - squared); - arg5->x = mult0 * arg0->f[0] + mult1 * arg1->f[0] + mult2 * arg2->f[0] + mult3 * arg3->f[0]; - arg5->y = mult0 * arg0->f[1] + mult1 * arg1->f[1] + mult2 * arg2->f[1] + mult3 * arg3->f[1]; - arg5->z = mult0 * arg0->f[2] + mult1 * arg1->f[2] + mult2 * arg2->f[2] + mult3 * arg3->f[2]; + result->x = mult0 * p0->f[0] + mult1 * p1->f[0] + mult2 * p2->f[0] + mult3 * p3->f[0]; + result->y = mult0 * p0->f[1] + mult1 * p1->f[1] + mult2 * p2->f[1] + mult3 * p3->f[1]; + result->z = mult0 * p0->f[2] + mult1 * p1->f[2] + mult2 * p2->f[2] + mult3 * p3->f[2]; } + /** - * Following is cleaned up mips_to_c output. + * Address: 7F05B024 * - * decomp status: - * - compiles: yes - * - stack resize: fail - * - identical instructions: fail - * - identical registers: fail + * Interpolation from 'start' to 'end' using a cubic Hermite spline segment. 'fraction' is the position along the segment with + * 0.0 being at the start and 1.0 being at the end. * - * https://decomp.me/scratch/EHA1A 74.55 % + * 'prev' and 'next' act as control points used to derive the tangent direction at 'start and 'end' + * + * tangentScale affects how strongly the control points affect the curve. + * 0.0f = no influence from 'prev' and 'next' + * >0.5f = stronger tangents, looser curve + * <0.5f = weaker tangents, tighter/flatter curve + * + * This function is used to move the camera smoothly between waypoints in the intro camera swirl. */ -#ifdef NONMATCHING -void sub_GAME_7F05B024(coord3d *arg0, coord3d *arg1, coord3d *arg2, coord3d *arg3, f32 arg4, f32 arg5, coord3d *result) +void coord3dCubicSplineInterp(coord3d *prev, coord3d *start, coord3d *end, coord3d *next, f32 fraction, f32 tangentScale, coord3d *result) { f32 square; + f32 scale; f32 cube; f32 temp_f16; f32 temp_f18; f32 temp_f6; f32 temp_f8; - square = arg4 * arg4; - cube = square * arg4; - temp_f6 = (cube - square) * arg5; - temp_f16 = ((2.0f * square) - (arg4 + cube)) * arg5; - temp_f18 = ((2.0f - arg5) * cube) + (square * (arg5 - 3.0f)) + 1.0f; - temp_f8 = ((arg5 - 2.0f) * cube) + (square * (3.0f - (2.0f * arg5))) + (arg4 * arg5); + square = fraction * fraction; + scale = tangentScale; + cube = square * fraction; - result->f[0] = temp_f16 * arg0->f[0] + temp_f18 * arg1->f[0] + temp_f8 * arg2->f[0] + temp_f6 * arg3->f[0]; - result->f[1] = temp_f16 * arg0->f[1] + temp_f18 * arg1->f[1] + temp_f8 * arg2->f[1] + temp_f6 * arg3->f[1]; - result->f[2] = temp_f16 * arg0->f[2] + temp_f18 * arg1->f[2] + temp_f8 * arg2->f[2] + temp_f6 * arg3->f[2]; + temp_f16 = ((2.0f * square) - (fraction + cube)) * scale; + temp_f18 = (((2.0f - scale) * cube) + (square * (scale - 3.0f))) + 1.0f; + temp_f8 = (((scale - 2.0f) * cube) + (square * (3.0f - (2.0f * scale)))) + (fraction * scale); + + result->f[0] = (((temp_f16 * prev->f[0]) + (temp_f18 * start->f[0])) + (temp_f8 * end->f[0])) + (((cube - square) * tangentScale) * next->f[0]); + result->f[1] = (((temp_f16 * prev->f[1]) + (temp_f18 * start->f[1])) + (temp_f8 * end->f[1])) + (((cube - square) * tangentScale) * next->f[1]); + result->f[2] = (((temp_f16 * prev->f[2]) + (temp_f18 * start->f[2])) + (temp_f8 * end->f[2])) + (((cube - square) * tangentScale) * next->f[2]); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F05B024 -/* 08FB54 7F05B024 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 08FB58 7F05B028 C7AC0038 */ lwc1 $f12, 0x38($sp) -/* 08FB5C 7F05B02C C7AE003C */ lwc1 $f14, 0x3c($sp) -/* 08FB60 7F05B030 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 08FB64 7F05B034 460C6002 */ mul.s $f0, $f12, $f12 -/* 08FB68 7F05B038 8FAE0040 */ lw $t6, 0x40($sp) -/* 08FB6C 7F05B03C 460C0082 */ mul.s $f2, $f0, $f12 -/* 08FB70 7F05B040 46000200 */ add.s $f8, $f0, $f0 -/* 08FB74 7F05B044 46001101 */ sub.s $f4, $f2, $f0 -/* 08FB78 7F05B048 46026280 */ add.s $f10, $f12, $f2 -/* 08FB7C 7F05B04C 460E2182 */ mul.s $f6, $f4, $f14 -/* 08FB80 7F05B050 460A4101 */ sub.s $f4, $f8, $f10 -/* 08FB84 7F05B054 44814000 */ mtc1 $at, $f8 -/* 08FB88 7F05B058 3C014040 */ li $at, 0x40400000 # 3.000000 -/* 08FB8C 7F05B05C E7A60000 */ swc1 $f6, ($sp) -/* 08FB90 7F05B060 460E4281 */ sub.s $f10, $f8, $f14 -/* 08FB94 7F05B064 460E2402 */ mul.s $f16, $f4, $f14 -/* 08FB98 7F05B068 44814000 */ mtc1 $at, $f8 -/* 08FB9C 7F05B06C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 08FBA0 7F05B070 46025102 */ mul.s $f4, $f10, $f2 -/* 08FBA4 7F05B074 46087281 */ sub.s $f10, $f14, $f8 -/* 08FBA8 7F05B078 460A0202 */ mul.s $f8, $f0, $f10 -/* 08FBAC 7F05B07C 46082280 */ add.s $f10, $f4, $f8 -/* 08FBB0 7F05B080 44812000 */ mtc1 $at, $f4 -/* 08FBB4 7F05B084 3C014040 */ li $at, 0x40400000 # 3.000000 -/* 08FBB8 7F05B088 44814000 */ mtc1 $at, $f8 -/* 08FBBC 7F05B08C 46045480 */ add.s $f18, $f10, $f4 -/* 08FBC0 7F05B090 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 08FBC4 7F05B094 460E7280 */ add.s $f10, $f14, $f14 -/* 08FBC8 7F05B098 460A4101 */ sub.s $f4, $f8, $f10 -/* 08FBCC 7F05B09C 44815000 */ mtc1 $at, $f10 -/* 08FBD0 7F05B0A0 46040202 */ mul.s $f8, $f0, $f4 -/* 08FBD4 7F05B0A4 460A7101 */ sub.s $f4, $f14, $f10 -/* 08FBD8 7F05B0A8 46022282 */ mul.s $f10, $f4, $f2 -/* 08FBDC 7F05B0AC 46085100 */ add.s $f4, $f10, $f8 -/* 08FBE0 7F05B0B0 460E6282 */ mul.s $f10, $f12, $f14 -/* 08FBE4 7F05B0B4 460A2200 */ add.s $f8, $f4, $f10 -/* 08FBE8 7F05B0B8 E7A80008 */ swc1 $f8, 8($sp) -/* 08FBEC 7F05B0BC C4840000 */ lwc1 $f4, ($a0) -/* 08FBF0 7F05B0C0 46048282 */ mul.s $f10, $f16, $f4 -/* 08FBF4 7F05B0C4 C4A40000 */ lwc1 $f4, ($a1) -/* 08FBF8 7F05B0C8 46049102 */ mul.s $f4, $f18, $f4 -/* 08FBFC 7F05B0CC 46045280 */ add.s $f10, $f10, $f4 -/* 08FC00 7F05B0D0 C4C40000 */ lwc1 $f4, ($a2) -/* 08FC04 7F05B0D4 46044102 */ mul.s $f4, $f8, $f4 -/* 08FC08 7F05B0D8 46045280 */ add.s $f10, $f10, $f4 -/* 08FC0C 7F05B0DC C4E40000 */ lwc1 $f4, ($a3) -/* 08FC10 7F05B0E0 46062102 */ mul.s $f4, $f4, $f6 -/* 08FC14 7F05B0E4 460A2100 */ add.s $f4, $f4, $f10 -/* 08FC18 7F05B0E8 E5C40000 */ swc1 $f4, ($t6) -/* 08FC1C 7F05B0EC C48A0004 */ lwc1 $f10, 4($a0) -/* 08FC20 7F05B0F0 460A8102 */ mul.s $f4, $f16, $f10 -/* 08FC24 7F05B0F4 C4AA0004 */ lwc1 $f10, 4($a1) -/* 08FC28 7F05B0F8 460A9282 */ mul.s $f10, $f18, $f10 -/* 08FC2C 7F05B0FC 460A2100 */ add.s $f4, $f4, $f10 -/* 08FC30 7F05B100 C4CA0004 */ lwc1 $f10, 4($a2) -/* 08FC34 7F05B104 460A4282 */ mul.s $f10, $f8, $f10 -/* 08FC38 7F05B108 460A2100 */ add.s $f4, $f4, $f10 -/* 08FC3C 7F05B10C C4EA0004 */ lwc1 $f10, 4($a3) -/* 08FC40 7F05B110 46065282 */ mul.s $f10, $f10, $f6 -/* 08FC44 7F05B114 46045280 */ add.s $f10, $f10, $f4 -/* 08FC48 7F05B118 E5CA0004 */ swc1 $f10, 4($t6) -/* 08FC4C 7F05B11C C4840008 */ lwc1 $f4, 8($a0) -/* 08FC50 7F05B120 46048282 */ mul.s $f10, $f16, $f4 -/* 08FC54 7F05B124 C4A40008 */ lwc1 $f4, 8($a1) -/* 08FC58 7F05B128 46049102 */ mul.s $f4, $f18, $f4 -/* 08FC5C 7F05B12C 46045280 */ add.s $f10, $f10, $f4 -/* 08FC60 7F05B130 C4C40008 */ lwc1 $f4, 8($a2) -/* 08FC64 7F05B134 46044202 */ mul.s $f8, $f8, $f4 -/* 08FC68 7F05B138 46085100 */ add.s $f4, $f10, $f8 -/* 08FC6C 7F05B13C C4EA0008 */ lwc1 $f10, 8($a3) -/* 08FC70 7F05B140 27BD0028 */ addiu $sp, $sp, 0x28 -/* 08FC74 7F05B144 46065202 */ mul.s $f8, $f10, $f6 -/* 08FC78 7F05B148 46044280 */ add.s $f10, $f8, $f4 -/* 08FC7C 7F05B14C 03E00008 */ jr $ra -/* 08FC80 7F05B150 E5CA0008 */ swc1 $f10, 8($t6) -) -#endif + /** + * Address: 7F05B154 + * * Unused. */ -f32 sub_GAME_7F05B154(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) +f32 scalarCubicHermiteInterp(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) { /* Quick substition (so this may be wrong), but let x=arg4. Then diff --git a/src/game/model.c b/src/game/model.c index bef80b98..955b6a1f 100644 --- a/src/game/model.c +++ b/src/game/model.c @@ -1,18 +1,30 @@ #include #include +#include "model.h" #include "../rmon.h" /**/ +#include "bondview.h" #include "chr.h" -#include "objecthandler.h" +#include "chrobjdata.h" +#include "gbi_extension.h" +#include "initunk_005520.h" +#include "math_asinfacosf.h" #include "math_floor.h" #include "math_ceil.h" -#include "quaternion.h" -#include "math_asinfacosf.h" #include "math_unk_05A9E0.h" -#include "chrobjdata.h" -#include "bondview.h" +#include "objecthandler.h" +#include "quaternion.h" #include "random.h" -#include "gbi_extension.h" -#include "model.h" + + +typedef struct ModelGroupMtxBuildArg { + u16 flags; + u16 pad; + ModelRoData_GroupRecord *group; + ModelNode *parentnode; +} ModelGroupMtxBuildArg; + +// forward declarations +void modelSetAnimFrame2WithChrStuff(struct Model *model, f32 framea, f32 frameb, f32 frame2a, f32 frame2b); @@ -20,219 +32,74 @@ bool modelmgrCanSlotFitRwdata(Model *modelslot, ModelFileHeader *modeldef) { return modeldef->numRecords <= 0 - || (modelslot->datas != NULL && modelslot->Type >= modeldef->numRecords); + || (modelslot->datas != NULL && modelslot->rwdatalen >= modeldef->numRecords); } -#ifdef NONMATCHING -struct PropRecord * get_obj_instance_controller_for_header(struct ModelFileHeader* arg0) +/** + * Address: 7F06C094 + * + * Allocates 0x20 bytes for a new model without animations. + * Models that need animations use modelmgrInstantiateModelWithAnim. + */ +Model *modelmgrInstantiateModel(ModelFileHeader *header) { - void *sp40; - s16 sp3E; - ? *var_a2; - ? *var_v1; - s16 temp_v0; - s32 temp_a0; - s32 temp_s2; - s32 var_s0; - s32 var_s1; - s32 var_v0; - void *temp_v0_2; - void *var_s6; + Model *model; + u32 *rwdata; + s16 rwdatalen; - var_s6 = NULL; - sp40 = NULL; - sp3E = -1; - if (D_80036078 != 0) + model = NULL; + rwdata = NULL; + rwdatalen = -1; + + if (g_ModelIsLvResetting) { - #ifdef DEBUG - if (arg0->numRecords > 19) osSyncPrintf("WARNING: increase OISAVESIZE to %d!\n", (arg0->numRecords)); - #endif - var_v0 = 0; - var_a2 = &ptr_allocation_1; - temp_a0 = D_80036074 - 0x1E; - if (temp_a0 > 0) + s32 i; + + for (i = 0; i < (g_MaxModelSlots - 30); i++) { - var_a2 = ptr_allocation_1; - var_v1 = var_a2; -loop_3: - if (var_v1->unk8 == 0) + if (g_ModelSlots[i].unk08 == 0) { - var_s6 = (var_v0 << 5) + var_a2; - } - else - { - var_v0 += 1; - var_v1 += 0x20; - if (var_v0 < temp_a0) - { - goto loop_3; - } + model = (Model *)&g_ModelSlots[i]; + break; } } - if (var_s6 == NULL) + + if (model == NULL) { - var_s6 = mempAllocBytesInBank(0x20, MEMPOOL_STAGE); + model = mempAllocBytesInBank(0x20, MEMPOOL_STAGE); } - temp_v0 = arg0->unk14; - if (temp_v0 > 0) + + if (header->numRecords > 0) { - sp40 = mempAllocBytesInBank((((temp_v0 * 4) + 0xF) | 0xF) ^ 0xF, MEMPOOL_STAGE); - sp3E = arg0->unk14; + rwdata = mempAllocBytesInBank((((header->numRecords * 4) + 0xf) | 0xf) ^ 0xf, MEMPOOL_STAGE); + rwdatalen = header->numRecords; } - } - else + } + else { - var_s0 = 0; - var_s1 = 0; - if (D_80036074 > 0) + s32 i; + + for (i = 0; i < g_MaxModelSlots; i++) { -loop_12: - temp_s2 = var_s0 << 5; - if (((ptr_allocation_1 + var_s1)->unk8 == 0) && (modelmgrCanSlotFitRwdata(temp_s2 + ptr_allocation_1, arg0, ptr_allocation_1) != 0)) + if (g_ModelSlots[i].unk08 == 0 && modelmgrCanSlotFitRwdata((Model *)&g_ModelSlots[i], header)) { - temp_v0_2 = ptr_allocation_1 + var_s1; - var_s6 = temp_s2 + ptr_allocation_1; - sp40 = temp_v0_2->unk10; - sp3E = temp_v0_2->unk2; - } - else - { - var_s0 += 1; - var_s1 += 0x20; - if (var_s0 < D_80036074) - { - goto loop_12; - } + rwdata = g_ModelSlots[i].unk10; + rwdatalen = g_ModelSlots[i].unk02; + model = (Model *)&g_ModelSlots[i]; + break; } } } - if (var_s6 != NULL) + + if (model != NULL) { - modelInit(var_s6, arg0, sp40); - var_s6->unk2 = sp3E; + modelInit(model, header, rwdata); + ((struct ModelSlot *)model)->unk02 = rwdatalen; } - return var_s6; + + return model; } -#else -GLOBAL_ASM( -.text -glabel get_obj_instance_controller_for_header -/* 0A0BC4 7F06C094 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0A0BC8 7F06C098 3C0F8003 */ lui $t7, %hi(D_80036078) -/* 0A0BCC 7F06C09C 8DEF6078 */ lw $t7, %lo(D_80036078)($t7) -/* 0A0BD0 7F06C0A0 AFB60030 */ sw $s6, 0x30($sp) -/* 0A0BD4 7F06C0A4 AFB5002C */ sw $s5, 0x2c($sp) -/* 0A0BD8 7F06C0A8 240EFFFF */ li $t6, -1 -/* 0A0BDC 7F06C0AC 0080A825 */ move $s5, $a0 -/* 0A0BE0 7F06C0B0 AFBF0034 */ sw $ra, 0x34($sp) -/* 0A0BE4 7F06C0B4 AFB40028 */ sw $s4, 0x28($sp) -/* 0A0BE8 7F06C0B8 AFB30024 */ sw $s3, 0x24($sp) -/* 0A0BEC 7F06C0BC AFB20020 */ sw $s2, 0x20($sp) -/* 0A0BF0 7F06C0C0 AFB1001C */ sw $s1, 0x1c($sp) -/* 0A0BF4 7F06C0C4 AFB00018 */ sw $s0, 0x18($sp) -/* 0A0BF8 7F06C0C8 0000B025 */ move $s6, $zero -/* 0A0BFC 7F06C0CC AFA00040 */ sw $zero, 0x40($sp) -/* 0A0C00 7F06C0D0 11E00025 */ beqz $t7, .L7F06C168 -/* 0A0C04 7F06C0D4 A7AE003E */ sh $t6, 0x3e($sp) -/* 0A0C08 7F06C0D8 3C148003 */ lui $s4, %hi(D_80036074) -/* 0A0C0C 7F06C0DC 26946074 */ addiu $s4, %lo(D_80036074) # addiu $s4, $s4, 0x6074 -/* 0A0C10 7F06C0E0 8E840000 */ lw $a0, ($s4) -/* 0A0C14 7F06C0E4 00001025 */ move $v0, $zero -/* 0A0C18 7F06C0E8 3C068008 */ lui $a2, %hi(ptr_allocation_1) -/* 0A0C1C 7F06C0EC 2484FFE2 */ addiu $a0, $a0, -0x1e -/* 0A0C20 7F06C0F0 1880000C */ blez $a0, .L7F06C124 -/* 0A0C24 7F06C0F4 24050004 */ li $a1, 4 -/* 0A0C28 7F06C0F8 8CC69934 */ lw $a2, %lo(ptr_allocation_1)($a2) -/* 0A0C2C 7F06C0FC 00C01825 */ move $v1, $a2 -.L7F06C100: -/* 0A0C30 7F06C100 8C780008 */ lw $t8, 8($v1) -/* 0A0C34 7F06C104 17000003 */ bnez $t8, .L7F06C114 -/* 0A0C38 7F06C108 0002C940 */ sll $t9, $v0, 5 -/* 0A0C3C 7F06C10C 10000005 */ b .L7F06C124 -/* 0A0C40 7F06C110 0326B021 */ addu $s6, $t9, $a2 -.L7F06C114: -/* 0A0C44 7F06C114 24420001 */ addiu $v0, $v0, 1 -/* 0A0C48 7F06C118 0044082A */ slt $at, $v0, $a0 -/* 0A0C4C 7F06C11C 1420FFF8 */ bnez $at, .L7F06C100 -/* 0A0C50 7F06C120 24630020 */ addiu $v1, $v1, 0x20 -.L7F06C124: -/* 0A0C54 7F06C124 56C00005 */ bnezl $s6, .L7F06C13C -/* 0A0C58 7F06C128 86A20014 */ lh $v0, 0x14($s5) -/* 0A0C5C 7F06C12C 0C0025C8 */ jal mempAllocBytesInBank -/* 0A0C60 7F06C130 24040020 */ li $a0, 32 -/* 0A0C64 7F06C134 0040B025 */ move $s6, $v0 -/* 0A0C68 7F06C138 86A20014 */ lh $v0, 0x14($s5) -.L7F06C13C: -/* 0A0C6C 7F06C13C 24050004 */ li $a1, 4 -/* 0A0C70 7F06C140 1840002A */ blez $v0, .L7F06C1EC -/* 0A0C74 7F06C144 00022080 */ sll $a0, $v0, 2 -/* 0A0C78 7F06C148 2484000F */ addiu $a0, $a0, 0xf -/* 0A0C7C 7F06C14C 3488000F */ ori $t0, $a0, 0xf -/* 0A0C80 7F06C150 0C0025C8 */ jal mempAllocBytesInBank -/* 0A0C84 7F06C154 3904000F */ xori $a0, $t0, 0xf -/* 0A0C88 7F06C158 AFA20040 */ sw $v0, 0x40($sp) -/* 0A0C8C 7F06C15C 86AA0014 */ lh $t2, 0x14($s5) -/* 0A0C90 7F06C160 10000022 */ b .L7F06C1EC -/* 0A0C94 7F06C164 A7AA003E */ sh $t2, 0x3e($sp) -.L7F06C168: -/* 0A0C98 7F06C168 3C148003 */ lui $s4, %hi(D_80036074) -/* 0A0C9C 7F06C16C 26946074 */ addiu $s4, %lo(D_80036074) # addiu $s4, $s4, 0x6074 -/* 0A0CA0 7F06C170 8E8B0000 */ lw $t3, ($s4) -/* 0A0CA4 7F06C174 00008025 */ move $s0, $zero -/* 0A0CA8 7F06C178 00008825 */ move $s1, $zero -/* 0A0CAC 7F06C17C 1960001B */ blez $t3, .L7F06C1EC -/* 0A0CB0 7F06C180 3C138008 */ lui $s3, %hi(ptr_allocation_1) -/* 0A0CB4 7F06C184 26739934 */ addiu $s3, %lo(ptr_allocation_1) # addiu $s3, $s3, -0x66cc -/* 0A0CB8 7F06C188 8E660000 */ lw $a2, ($s3) -.L7F06C18C: -/* 0A0CBC 7F06C18C 00109140 */ sll $s2, $s0, 5 -/* 0A0CC0 7F06C190 00D16021 */ addu $t4, $a2, $s1 -/* 0A0CC4 7F06C194 8D8D0008 */ lw $t5, 8($t4) -/* 0A0CC8 7F06C198 02462021 */ addu $a0, $s2, $a2 -/* 0A0CCC 7F06C19C 55A0000E */ bnezl $t5, .L7F06C1D8 -/* 0A0CD0 7F06C1A0 8E980000 */ lw $t8, ($s4) -/* 0A0CD4 7F06C1A4 0FC1B018 */ jal modelmgrCanSlotFitRwdata -/* 0A0CD8 7F06C1A8 02A02825 */ move $a1, $s5 -/* 0A0CDC 7F06C1AC 5040000A */ beql $v0, $zero, .L7F06C1D8 -/* 0A0CE0 7F06C1B0 8E980000 */ lw $t8, ($s4) -/* 0A0CE4 7F06C1B4 8E660000 */ lw $a2, ($s3) -/* 0A0CE8 7F06C1B8 00D11021 */ addu $v0, $a2, $s1 -/* 0A0CEC 7F06C1BC 8C4E0010 */ lw $t6, 0x10($v0) -/* 0A0CF0 7F06C1C0 0246B021 */ addu $s6, $s2, $a2 -/* 0A0CF4 7F06C1C4 AFAE0040 */ sw $t6, 0x40($sp) -/* 0A0CF8 7F06C1C8 844F0002 */ lh $t7, 2($v0) -/* 0A0CFC 7F06C1CC 10000007 */ b .L7F06C1EC -/* 0A0D00 7F06C1D0 A7AF003E */ sh $t7, 0x3e($sp) -/* 0A0D04 7F06C1D4 8E980000 */ lw $t8, ($s4) -.L7F06C1D8: -/* 0A0D08 7F06C1D8 26100001 */ addiu $s0, $s0, 1 -/* 0A0D0C 7F06C1DC 26310020 */ addiu $s1, $s1, 0x20 -/* 0A0D10 7F06C1E0 0218082A */ slt $at, $s0, $t8 -/* 0A0D14 7F06C1E4 5420FFE9 */ bnezl $at, .L7F06C18C -/* 0A0D18 7F06C1E8 8E660000 */ lw $a2, ($s3) -.L7F06C1EC: -/* 0A0D1C 7F06C1EC 12C00006 */ beqz $s6, .L7F06C208 -/* 0A0D20 7F06C1F0 02C02025 */ move $a0, $s6 -/* 0A0D24 7F06C1F4 02A02825 */ move $a1, $s5 -/* 0A0D28 7F06C1F8 0FC1D7DA */ jal modelInit -/* 0A0D2C 7F06C1FC 8FA60040 */ lw $a2, 0x40($sp) -/* 0A0D30 7F06C200 87B9003E */ lh $t9, 0x3e($sp) -/* 0A0D34 7F06C204 A6D90002 */ sh $t9, 2($s6) -.L7F06C208: -/* 0A0D38 7F06C208 8FBF0034 */ lw $ra, 0x34($sp) -/* 0A0D3C 7F06C20C 02C01025 */ move $v0, $s6 -/* 0A0D40 7F06C210 8FB60030 */ lw $s6, 0x30($sp) -/* 0A0D44 7F06C214 8FB00018 */ lw $s0, 0x18($sp) -/* 0A0D48 7F06C218 8FB1001C */ lw $s1, 0x1c($sp) -/* 0A0D4C 7F06C21C 8FB20020 */ lw $s2, 0x20($sp) -/* 0A0D50 7F06C220 8FB30024 */ lw $s3, 0x24($sp) -/* 0A0D54 7F06C224 8FB40028 */ lw $s4, 0x28($sp) -/* 0A0D58 7F06C228 8FB5002C */ lw $s5, 0x2c($sp) -/* 0A0D5C 7F06C22C 03E00008 */ jr $ra -/* 0A0D60 7F06C230 27BD0048 */ addiu $sp, $sp, 0x48 -) -#endif void clear_model_obj(Model* model) @@ -241,126 +108,75 @@ void clear_model_obj(Model* model) } -#ifdef NONMATCHING -void get_aircraft_obj_instance_controller(void) { - #ifdef DEBUG - if (arg0->numRecords > 140) osSyncPrintf("WARNING: increase OISAVESIZE to %d!\n", *(arg0->numRecords)); - #endif -} -#else -GLOBAL_ASM( -.text -glabel get_aircraft_obj_instance_controller -/* 0A0D6C 7F06C23C 3C0E8003 */ lui $t6, %hi(D_80036078) -/* 0A0D70 7F06C240 8DCE6078 */ lw $t6, %lo(D_80036078)($t6) -/* 0A0D74 7F06C244 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0A0D78 7F06C248 AFB00018 */ sw $s0, 0x18($sp) -/* 0A0D7C 7F06C24C AFBF001C */ sw $ra, 0x1c($sp) -/* 0A0D80 7F06C250 AFA40030 */ sw $a0, 0x30($sp) -/* 0A0D84 7F06C254 00008025 */ move $s0, $zero -/* 0A0D88 7F06C258 AFA00028 */ sw $zero, 0x28($sp) -/* 0A0D8C 7F06C25C 11C00028 */ beqz $t6, .L7F06C300 -/* 0A0D90 7F06C260 2408FFFF */ li $t0, -1 -/* 0A0D94 7F06C264 3C058003 */ lui $a1, %hi(D_80036070) -/* 0A0D98 7F06C268 8CA56070 */ lw $a1, %lo(D_80036070)($a1) -/* 0A0D9C 7F06C26C 00001025 */ move $v0, $zero -/* 0A0DA0 7F06C270 3C078008 */ lui $a3, %hi(ptr_allocation_0) -/* 0A0DA4 7F06C274 24A5FFF6 */ addiu $a1, $a1, -0xa -/* 0A0DA8 7F06C278 18A0000D */ blez $a1, .L7F06C2B0 -/* 0A0DAC 7F06C27C 00000000 */ nop -/* 0A0DB0 7F06C280 8CE79930 */ lw $a3, %lo(ptr_allocation_0)($a3) -/* 0A0DB4 7F06C284 00002025 */ move $a0, $zero -/* 0A0DB8 7F06C288 00E01825 */ move $v1, $a3 -.L7F06C28C: -/* 0A0DBC 7F06C28C 8C6F0008 */ lw $t7, 8($v1) -/* 0A0DC0 7F06C290 24420001 */ addiu $v0, $v0, 1 -/* 0A0DC4 7F06C294 0045082A */ slt $at, $v0, $a1 -/* 0A0DC8 7F06C298 15E00003 */ bnez $t7, .L7F06C2A8 -/* 0A0DCC 7F06C29C 246300BC */ addiu $v1, $v1, 0xbc -/* 0A0DD0 7F06C2A0 10000003 */ b .L7F06C2B0 -/* 0A0DD4 7F06C2A4 00878021 */ addu $s0, $a0, $a3 -.L7F06C2A8: -/* 0A0DD8 7F06C2A8 1420FFF8 */ bnez $at, .L7F06C28C -/* 0A0DDC 7F06C2AC 248400BC */ addiu $a0, $a0, 0xbc -.L7F06C2B0: -/* 0A0DE0 7F06C2B0 16000006 */ bnez $s0, .L7F06C2CC -/* 0A0DE4 7F06C2B4 240400C0 */ li $a0, 192 -/* 0A0DE8 7F06C2B8 24050004 */ li $a1, 4 -/* 0A0DEC 7F06C2BC 0C0025C8 */ jal mempAllocBytesInBank -/* 0A0DF0 7F06C2C0 A7A80026 */ sh $t0, 0x26($sp) -/* 0A0DF4 7F06C2C4 87A80026 */ lh $t0, 0x26($sp) -/* 0A0DF8 7F06C2C8 00408025 */ move $s0, $v0 -.L7F06C2CC: -/* 0A0DFC 7F06C2CC 8FB80030 */ lw $t8, 0x30($sp) -/* 0A0E00 7F06C2D0 24050004 */ li $a1, 4 -/* 0A0E04 7F06C2D4 87060014 */ lh $a2, 0x14($t8) -/* 0A0E08 7F06C2D8 18C00029 */ blez $a2, .L7F06C380 -/* 0A0E0C 7F06C2DC 00062080 */ sll $a0, $a2, 2 -/* 0A0E10 7F06C2E0 2484000F */ addiu $a0, $a0, 0xf -/* 0A0E14 7F06C2E4 3499000F */ ori $t9, $a0, 0xf -/* 0A0E18 7F06C2E8 0C0025C8 */ jal mempAllocBytesInBank -/* 0A0E1C 7F06C2EC 3B24000F */ xori $a0, $t9, 0xf -/* 0A0E20 7F06C2F0 8FAA0030 */ lw $t2, 0x30($sp) -/* 0A0E24 7F06C2F4 AFA20028 */ sw $v0, 0x28($sp) -/* 0A0E28 7F06C2F8 10000021 */ b .L7F06C380 -/* 0A0E2C 7F06C2FC 85480014 */ lh $t0, 0x14($t2) -.L7F06C300: -/* 0A0E30 7F06C300 3C058003 */ lui $a1, %hi(D_80036070) -/* 0A0E34 7F06C304 8CA56070 */ lw $a1, %lo(D_80036070)($a1) -/* 0A0E38 7F06C308 8FAB0030 */ lw $t3, 0x30($sp) -/* 0A0E3C 7F06C30C 00001825 */ move $v1, $zero -/* 0A0E40 7F06C310 18A0001B */ blez $a1, .L7F06C380 -/* 0A0E44 7F06C314 85660014 */ lh $a2, 0x14($t3) -/* 0A0E48 7F06C318 3C078008 */ lui $a3, %hi(ptr_allocation_0) -/* 0A0E4C 7F06C31C 8CE79930 */ lw $a3, %lo(ptr_allocation_0)($a3) -/* 0A0E50 7F06C320 00002025 */ move $a0, $zero -/* 0A0E54 7F06C324 00E01025 */ move $v0, $a3 -.L7F06C328: -/* 0A0E58 7F06C328 8C4C0008 */ lw $t4, 8($v0) -/* 0A0E5C 7F06C32C 24630001 */ addiu $v1, $v1, 1 -/* 0A0E60 7F06C330 55800010 */ bnezl $t4, .L7F06C374 -/* 0A0E64 7F06C334 0065082A */ slt $at, $v1, $a1 -/* 0A0E68 7F06C338 58C00009 */ blezl $a2, .L7F06C360 -/* 0A0E6C 7F06C33C 8C4F0010 */ lw $t7, 0x10($v0) -/* 0A0E70 7F06C340 8C4D0010 */ lw $t5, 0x10($v0) -/* 0A0E74 7F06C344 51A0000B */ beql $t5, $zero, .L7F06C374 -/* 0A0E78 7F06C348 0065082A */ slt $at, $v1, $a1 -/* 0A0E7C 7F06C34C 844E0002 */ lh $t6, 2($v0) -/* 0A0E80 7F06C350 01C6082A */ slt $at, $t6, $a2 -/* 0A0E84 7F06C354 54200007 */ bnezl $at, .L7F06C374 -/* 0A0E88 7F06C358 0065082A */ slt $at, $v1, $a1 -/* 0A0E8C 7F06C35C 8C4F0010 */ lw $t7, 0x10($v0) -.L7F06C360: -/* 0A0E90 7F06C360 00878021 */ addu $s0, $a0, $a3 -/* 0A0E94 7F06C364 AFAF0028 */ sw $t7, 0x28($sp) -/* 0A0E98 7F06C368 10000005 */ b .L7F06C380 -/* 0A0E9C 7F06C36C 84480002 */ lh $t0, 2($v0) -/* 0A0EA0 7F06C370 0065082A */ slt $at, $v1, $a1 -.L7F06C374: -/* 0A0EA4 7F06C374 248400BC */ addiu $a0, $a0, 0xbc -/* 0A0EA8 7F06C378 1420FFEB */ bnez $at, .L7F06C328 -/* 0A0EAC 7F06C37C 244200BC */ addiu $v0, $v0, 0xbc -.L7F06C380: -/* 0A0EB0 7F06C380 12000007 */ beqz $s0, .L7F06C3A0 -/* 0A0EB4 7F06C384 02002025 */ move $a0, $s0 -/* 0A0EB8 7F06C388 8FA50030 */ lw $a1, 0x30($sp) -/* 0A0EBC 7F06C38C 8FA60028 */ lw $a2, 0x28($sp) -/* 0A0EC0 7F06C390 0FC1D7EB */ jal animInit -/* 0A0EC4 7F06C394 A7A80026 */ sh $t0, 0x26($sp) -/* 0A0EC8 7F06C398 87A80026 */ lh $t0, 0x26($sp) -/* 0A0ECC 7F06C39C A6080002 */ sh $t0, 2($s0) -.L7F06C3A0: -/* 0A0ED0 7F06C3A0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0A0ED4 7F06C3A4 02001025 */ move $v0, $s0 -/* 0A0ED8 7F06C3A8 8FB00018 */ lw $s0, 0x18($sp) -/* 0A0EDC 7F06C3AC 03E00008 */ jr $ra -/* 0A0EE0 7F06C3B0 27BD0030 */ addiu $sp, $sp, 0x30 -) +/** + * Allocates 0xc0 bytes for a new model to allow enough memory for animations. + */ +Model *modelmgrInstantiateModelWithAnim(ModelFileHeader *modelFileHeader) +{ + Model *newModel; + void *rwdatas; + s16 rwdatalen; + s32 i; + s16 requiredRwdatalen; + s32 i2; + + newModel = NULL; + rwdatas = NULL; + rwdatalen = -1; + + if (g_ModelIsLvResetting) + { + for (i = 0; i < (g_MaxAnimModelSlots - 10); i++) + { + if (g_AnimModelSlots[i].unk08 == 0) + { + newModel = (Model *)&g_AnimModelSlots[i]; + break; + } + } + + if (newModel == NULL) + { + newModel = mempAllocBytesInBank(0xc0, MEMPOOL_STAGE); + } + + requiredRwdatalen = modelFileHeader->numRecords; + +#ifdef DEBUG + if (modelFileHeader->numRecords > 140) osSyncPrintf("WARNING: increase OISAVESIZE to %d!\n", *(modelFileHeader->numRecords)); #endif + if (requiredRwdatalen > 0) + { + i = requiredRwdatalen; + rwdatas = mempAllocBytesInBank((((i * 4) + 0xf) | 0xf) ^ 0xf, MEMPOOL_STAGE); + rwdatalen = modelFileHeader->numRecords; + } + } + else + { + requiredRwdatalen = modelFileHeader->numRecords; + for (i2 = 0; i2 < g_MaxAnimModelSlots; i2++) + { + if ((g_AnimModelSlots[i2].unk08 == 0) && ((requiredRwdatalen <= 0) || ((g_AnimModelSlots[i2].unk10 != NULL) &&(g_AnimModelSlots[i2].unk02 >= requiredRwdatalen)))) + { + newModel = (Model *)&g_AnimModelSlots[i2]; + rwdatas = g_AnimModelSlots[i2].unk10; + rwdatalen = g_AnimModelSlots[i2].unk02; + break; + } + } + } + if (newModel != NULL) + { + animInit(newModel, modelFileHeader, rwdatas); + newModel->rwdatalen = rwdatalen; + } + return newModel; +} void modelAttachHead(Model *model, ModelNode *node, ModelFileHeader *head) @@ -373,78 +189,33 @@ void modelAttachHead(Model *model, ModelNode *node, ModelFileHeader *head) modelInitRwData(model,head->RootNode); } -void clear_aircraft_model_obj(Model *objinstance) +void clear_aircraft_model_obj(Model *objinstance) { objinstance->obj = NULL; return; } + void modelSetDistanceDisabled(s32 param_1) { g_ModelDistanceDisabled = param_1; } + // PD: modelSetDistanceScale void modelSetDistanceScale(f32 param_1) { g_ModelDistanceScale = param_1; } - - - -#ifdef NONMATCHING -// unreferenced -void sub_GAME_7F06C418(void *arg0, void *arg1) -{ - s32 temp_t7; - s32 var_v0; - void *var_a2; - void *var_v1; - - var_a2 = arg0; - var_v0 = 0; - var_v1 = arg1; - do - { - var_v0 += 1; - var_v1 += 0x10; - var_v1->unk - 10 = var_a2->unk0; - temp_t7 = var_a2->unk4; - var_a2 += 0x10; - var_v1->unk - C = temp_t7; - var_v1->unk - 8 = var_a2->unk - 8; - var_v1->unk - 4 = var_a2->unk - 4; - } while (var_v0 != 4); +void sub_GAME_7F06C418(Vew4s32 *src, Vew4s32 *dst) { + s32 i, j; + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + dst[i].v[j] = src[i].v[j]; + } + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F06C418 -/* 0A0F48 7F06C418 00803025 */ move $a2, $a0 -/* 0A0F4C 7F06C41C 24040004 */ li $a0, 4 -/* 0A0F50 7F06C420 00001025 */ move $v0, $zero -/* 0A0F54 7F06C424 00A01825 */ move $v1, $a1 -.L7F06C428: -/* 0A0F58 7F06C428 8CCE0000 */ lw $t6, ($a2) -/* 0A0F5C 7F06C42C 24420001 */ addiu $v0, $v0, 1 -/* 0A0F60 7F06C430 24630010 */ addiu $v1, $v1, 0x10 -/* 0A0F64 7F06C434 AC6EFFF0 */ sw $t6, -0x10($v1) -/* 0A0F68 7F06C438 8CCF0004 */ lw $t7, 4($a2) -/* 0A0F6C 7F06C43C 24C60010 */ addiu $a2, $a2, 0x10 -/* 0A0F70 7F06C440 AC6FFFF4 */ sw $t7, -0xc($v1) -/* 0A0F74 7F06C444 8CD8FFF8 */ lw $t8, -8($a2) -/* 0A0F78 7F06C448 AC78FFF8 */ sw $t8, -8($v1) -/* 0A0F7C 7F06C44C 8CD9FFFC */ lw $t9, -4($a2) -/* 0A0F80 7F06C450 1444FFF5 */ bne $v0, $a0, .L7F06C428 -/* 0A0F84 7F06C454 AC79FFFC */ sw $t9, -4($v1) -/* 0A0F88 7F06C458 03E00008 */ jr $ra -/* 0A0F8C 7F06C45C 00000000 */ nop -) -#endif - - - void set_vtxallocator(s32 param_1) { @@ -463,7 +234,10 @@ void return_null(void) #endif -void sub_GAME_7F06C474(Model* model, coord3d* coord) +/** + * Address: 7F06C474 + */ +void modelCalculateScaledRootToOriginDir(Model* model, coord3d* coord) { Mtxf* mtx; f32 dist; @@ -493,9 +267,12 @@ void sub_GAME_7F06C474(Model* model, coord3d* coord) } -void sub_GAME_7F06C550(Model* model, coord3d* coord) +/** + * Address: 7F06C550 + */ +void modelGetScaledRootToOriginDir(Model* model, coord3d* coord) { - sub_GAME_7F06C474(model, coord); + modelCalculateScaledRootToOriginDir(model, coord); } @@ -514,7 +291,7 @@ s32 modelFindNodeMtxIndex(ModelNode *node, s32 arg1) { case MODELNODE_OPCODE_HEADER: rodata1 = node->Data; - return (s16)rodata1->Header.ModelType; + return rodata1->Header.MatrixIndex; case MODELNODE_OPCODE_GROUP: rodata2 = node->Data; @@ -945,9 +722,17 @@ void modelSetScale(Model *objinst, f32 scale) } -void sub_GAME_7F06CE84(Model* self, f32 arg1) +/** + * Address: 7F06CE84 + * + * Scales only the translation component of the root node of an animation. + * For example, the animation for the plane flight in Runway's outro doesn't + * actually move the plane very far. This function is used to scale up the translation + * ~10x to allow it to fly near the camera. + */ +void modelSetAnimTranslationScale(Model* model, f32 scale) { - self->unkb8 = arg1; + model->anim_translation_scale = scale; } @@ -1108,439 +893,214 @@ void sub_GAME_7F06D160(coord3d *arg0, coord3d *arg1, f32 mult) } -#ifdef NONMATCHING -void sub_GAME_7F06D1CC(int param_1, int param_2, int param_3) - +/** + * Address: 7F06D1CC + */ +u16 modelAnimReadRootMotionValue(ModelAnimation *anim, s32 fieldIndex, s32 extraBitOffset) { - byte bVar1; - uint uVar2; - dword local_70; - byte local_20; - dword local_1c; - byte *local_18; - dword local_14; - ushort local_10; - byte local_e; - dword local_8; + u32 result; + u32 new_var2; + u32 oldResult; + struct ModelAnimBitField *desc; + u8 *byteptr; + u32 totalBitOffset; + u32 byteIndex; + u32 mask; + u8 bitsRemaining; + u8 bitsThisRead; - local_10 = 0; - local_20 = *(*(param_1 + 8) + param_2 * 6 + 2); - if (local_20 != 0) + result = 0; + desc = anim->bitDescriptors + fieldIndex; + bitsRemaining = desc->bitCount; + + if (bitsRemaining > 0) { - uVar2 = param_3 + *(*(param_1 + 8) + param_2 * 6); - local_18 = *(param_1 + 0x10) + (uVar2 >> 3); - local_e = 8 - (uVar2 & 7); - while (local_e <= local_20) + totalBitOffset = extraBitOffset + desc->bitOffset; + byteIndex = totalBitOffset >> 3; + totalBitOffset &= 7; + byteptr = anim->bitStream + byteIndex; + bitsThisRead = 8 - totalBitOffset; + + if (bitsRemaining >= bitsThisRead) { - local_20 = local_20 - local_e; - local_10 = local_10 | (*local_18 & (1 << (local_e & 0x3f)) - 1U) << (local_20 & 0x3f); - local_18 = local_18 + 1; - local_e = 8; + do + { + mask = (1 << bitsThisRead) - 1; + bitsRemaining -= bitsThisRead; + result |= ((*byteptr) & mask) << bitsRemaining; + result &= 0xffff; + byteptr++; + bitsThisRead = 8; + } + while (bitsRemaining >= 8); } - if (local_20 != 0) + + if (bitsRemaining > 0) { - local_10 = local_10 | *local_18 >> (local_e - local_20 & 0x3f) & (1 << (local_20 & 0x3f)) - 1U; + result |= ((*byteptr) >> (bitsThisRead - bitsRemaining)) & ((1 << bitsRemaining) - 1); + result &= 0xffff; } - bVar1 = *(*(param_1 + 8) + param_2 * 6 + 2); - if ((bVar1 < 0x10) && ((local_10 & 1 << (bVar1 - 1 & 0x3f)) != 0)) + + bitsRemaining = desc->bitCount; + + if (bitsRemaining < 16) { - local_10 = local_10 | (1 << (0x10 - bVar1 & 0x3f)) + -1 << (bVar1 & 0x3f); + oldResult = result; + mask = 1 << (bitsRemaining - 1); + + if (result & mask) + { + result = ((new_var2 = oldResult) | (((1 << (16 - bitsRemaining)) - 1) << bitsRemaining)) & 0xffff; + } } } - return local_10 + *(*(param_1 + 8) + param_2 * 6 + 4); + + result = desc->valueOffset + ((0, result)); + return result; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F06D1CC -/* 0A1CFC 7F06D1CC 8C8E0008 */ lw $t6, 8($a0) -/* 0A1D00 7F06D1D0 00057880 */ sll $t7, $a1, 2 -/* 0A1D04 7F06D1D4 01E57823 */ subu $t7, $t7, $a1 -/* 0A1D08 7F06D1D8 000F7840 */ sll $t7, $t7, 1 -/* 0A1D0C 7F06D1DC 01CF3821 */ addu $a3, $t6, $t7 -/* 0A1D10 7F06D1E0 90E80002 */ lbu $t0, 2($a3) -/* 0A1D14 7F06D1E4 00001825 */ move $v1, $zero -/* 0A1D18 7F06D1E8 01004825 */ move $t1, $t0 -/* 0A1D1C 7F06D1EC 5920003A */ blezl $t1, .L7F06D2D8 -/* 0A1D20 7F06D1F0 94F80004 */ lhu $t8, 4($a3) -/* 0A1D24 7F06D1F4 94F80000 */ lhu $t8, ($a3) -/* 0A1D28 7F06D1F8 240E0008 */ li $t6, 8 -/* 0A1D2C 7F06D1FC 8C8D0010 */ lw $t5, 0x10($a0) -/* 0A1D30 7F06D200 03061021 */ addu $v0, $t8, $a2 -/* 0A1D34 7F06D204 30590007 */ andi $t9, $v0, 7 -/* 0A1D38 7F06D208 01D96023 */ subu $t4, $t6, $t9 -/* 0A1D3C 7F06D20C 318F00FF */ andi $t7, $t4, 0xff -/* 0A1D40 7F06D210 000228C2 */ srl $a1, $v0, 3 -/* 0A1D44 7F06D214 012F082A */ slt $at, $t1, $t7 -/* 0A1D48 7F06D218 318B00FF */ andi $t3, $t4, 0xff -/* 0A1D4C 7F06D21C 14200010 */ bnez $at, .L7F06D260 -/* 0A1D50 7F06D220 01A55021 */ addu $t2, $t5, $a1 -.L7F06D224: -/* 0A1D54 7F06D224 91590000 */ lbu $t9, ($t2) -/* 0A1D58 7F06D228 240D0001 */ li $t5, 1 -/* 0A1D5C 7F06D22C 016D7004 */ sllv $t6, $t5, $t3 -/* 0A1D60 7F06D230 012B1023 */ subu $v0, $t1, $t3 -/* 0A1D64 7F06D234 25CFFFFF */ addiu $t7, $t6, -1 -/* 0A1D68 7F06D238 304900FF */ andi $t1, $v0, 0xff -/* 0A1D6C 7F06D23C 032FC024 */ and $t8, $t9, $t7 -/* 0A1D70 7F06D240 01386804 */ sllv $t5, $t8, $t1 -/* 0A1D74 7F06D244 006D1825 */ or $v1, $v1, $t5 -/* 0A1D78 7F06D248 306EFFFF */ andi $t6, $v1, 0xffff -/* 0A1D7C 7F06D24C 29210008 */ slti $at, $t1, 8 -/* 0A1D80 7F06D250 01C01825 */ move $v1, $t6 -/* 0A1D84 7F06D254 254A0001 */ addiu $t2, $t2, 1 -/* 0A1D88 7F06D258 1020FFF2 */ beqz $at, .L7F06D224 -/* 0A1D8C 7F06D25C 240B0008 */ li $t3, 8 -.L7F06D260: -/* 0A1D90 7F06D260 1920000A */ blez $t1, .L7F06D28C -/* 0A1D94 7F06D264 01697823 */ subu $t7, $t3, $t1 -/* 0A1D98 7F06D268 91590000 */ lbu $t9, ($t2) -/* 0A1D9C 7F06D26C 240D0001 */ li $t5, 1 -/* 0A1DA0 7F06D270 012D7004 */ sllv $t6, $t5, $t1 -/* 0A1DA4 7F06D274 01F9C007 */ srav $t8, $t9, $t7 -/* 0A1DA8 7F06D278 25D9FFFF */ addiu $t9, $t6, -1 -/* 0A1DAC 7F06D27C 03197824 */ and $t7, $t8, $t9 -/* 0A1DB0 7F06D280 006F1825 */ or $v1, $v1, $t7 -/* 0A1DB4 7F06D284 306DFFFF */ andi $t5, $v1, 0xffff -/* 0A1DB8 7F06D288 01A01825 */ move $v1, $t5 -.L7F06D28C: -/* 0A1DBC 7F06D28C 310900FF */ andi $t1, $t0, 0xff -/* 0A1DC0 7F06D290 29210010 */ slti $at, $t1, 0x10 -/* 0A1DC4 7F06D294 1020000F */ beqz $at, .L7F06D2D4 -/* 0A1DC8 7F06D298 252E001F */ addiu $t6, $t1, 0x1f -/* 0A1DCC 7F06D29C 24180001 */ li $t8, 1 -/* 0A1DD0 7F06D2A0 01D8C804 */ sllv $t9, $t8, $t6 -/* 0A1DD4 7F06D2A4 00797824 */ and $t7, $v1, $t9 -/* 0A1DD8 7F06D2A8 11E0000A */ beqz $t7, .L7F06D2D4 -/* 0A1DDC 7F06D2AC 00601025 */ move $v0, $v1 -/* 0A1DE0 7F06D2B0 240D0010 */ li $t5, 16 -/* 0A1DE4 7F06D2B4 01A9C023 */ subu $t8, $t5, $t1 -/* 0A1DE8 7F06D2B8 240E0001 */ li $t6, 1 -/* 0A1DEC 7F06D2BC 030EC804 */ sllv $t9, $t6, $t8 -/* 0A1DF0 7F06D2C0 272FFFFF */ addiu $t7, $t9, -1 -/* 0A1DF4 7F06D2C4 012F6804 */ sllv $t5, $t7, $t1 -/* 0A1DF8 7F06D2C8 004D1825 */ or $v1, $v0, $t5 -/* 0A1DFC 7F06D2CC 306EFFFF */ andi $t6, $v1, 0xffff -/* 0A1E00 7F06D2D0 01C01825 */ move $v1, $t6 -.L7F06D2D4: -/* 0A1E04 7F06D2D4 94F80004 */ lhu $t8, 4($a3) -.L7F06D2D8: -/* 0A1E08 7F06D2D8 00781821 */ addu $v1, $v1, $t8 -/* 0A1E0C 7F06D2DC 03E00008 */ jr $ra -/* 0A1E10 7F06D2E0 3062FFFF */ andi $v0, $v1, 0xffff -) -#endif - - - -#ifdef NONMATCHING -// arg0: unknown type. arg1: unknown type. arg5: unknown type, maybe struct. -void sub_GAME_7F06D2E4(s32, s32, ModelSkeleton*, void* anim, s32, s16*) +/** + * Address: 7F06D2E4 + */ +u16 sub_GAME_7F06D2E4(s32 jointnum, s32 flip, ModelSkeleton *skeleton, ModelAnimation *anim, s32 frame, coord16 *out) { - + u32 scaled; + s32 base; + u32 angle_raw; + u16 angle_ret; + + scaled = ((u32) anim->unk0C) * ((u32) frame); + + if (flip) + { + base = skeleton->Joints[jointnum].mtxB; + } + else + { + base = skeleton->Joints[jointnum].mtxA; + } + + out->x = modelAnimReadRootMotionValue(anim, base, scaled); + out->y = modelAnimReadRootMotionValue(anim, base + 1, scaled); + out->z = modelAnimReadRootMotionValue(anim, base + 2, scaled); + angle_raw = modelAnimReadRootMotionValue(anim, base + 3, scaled); + angle_ret = angle_raw; + + if (flip) + { + out->x = -out->x; + + if (angle_raw != 0) + { + angle_ret = 0x10000 - (angle_raw & 0xFFFFFFFFu); + } + } + + return angle_ret; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F06D2E4 -/* 0A1E14 7F06D2E4 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0A1E18 7F06D2E8 AFBF0024 */ sw $ra, 0x24($sp) -/* 0A1E1C 7F06D2EC AFB20020 */ sw $s2, 0x20($sp) -/* 0A1E20 7F06D2F0 AFB1001C */ sw $s1, 0x1c($sp) -/* 0A1E24 7F06D2F4 AFB00018 */ sw $s0, 0x18($sp) -/* 0A1E28 7F06D2F8 AFA5002C */ sw $a1, 0x2c($sp) -/* 0A1E2C 7F06D2FC 94EE000C */ lhu $t6, 0xc($a3) -/* 0A1E30 7F06D300 8FAF0038 */ lw $t7, 0x38($sp) -/* 0A1E34 7F06D304 00E09025 */ move $s2, $a3 -/* 0A1E38 7F06D308 00044080 */ sll $t0, $a0, 2 -/* 0A1E3C 7F06D30C 01CF0019 */ multu $t6, $t7 -/* 0A1E40 7F06D310 00045880 */ sll $t3, $a0, 2 -/* 0A1E44 7F06D314 00008812 */ mflo $s1 -/* 0A1E48 7F06D318 50A00008 */ beql $a1, $zero, .L7F06D33C -/* 0A1E4C 7F06D31C 8CCA0004 */ lw $t2, 4($a2) -/* 0A1E50 7F06D320 8CD90004 */ lw $t9, 4($a2) -/* 0A1E54 7F06D324 01044023 */ subu $t0, $t0, $a0 -/* 0A1E58 7F06D328 00084040 */ sll $t0, $t0, 1 -/* 0A1E5C 7F06D32C 03284821 */ addu $t1, $t9, $t0 -/* 0A1E60 7F06D330 10000006 */ b .L7F06D34C -/* 0A1E64 7F06D334 95300004 */ lhu $s0, 4($t1) -/* 0A1E68 7F06D338 8CCA0004 */ lw $t2, 4($a2) -.L7F06D33C: -/* 0A1E6C 7F06D33C 01645823 */ subu $t3, $t3, $a0 -/* 0A1E70 7F06D340 000B5840 */ sll $t3, $t3, 1 -/* 0A1E74 7F06D344 014B6021 */ addu $t4, $t2, $t3 -/* 0A1E78 7F06D348 95900002 */ lhu $s0, 2($t4) -.L7F06D34C: -/* 0A1E7C 7F06D34C 02402025 */ move $a0, $s2 -/* 0A1E80 7F06D350 02002825 */ move $a1, $s0 -/* 0A1E84 7F06D354 0FC1B473 */ jal sub_GAME_7F06D1CC -/* 0A1E88 7F06D358 02203025 */ move $a2, $s1 -/* 0A1E8C 7F06D35C 8FAD003C */ lw $t5, 0x3c($sp) -/* 0A1E90 7F06D360 02402025 */ move $a0, $s2 -/* 0A1E94 7F06D364 26050001 */ addiu $a1, $s0, 1 -/* 0A1E98 7F06D368 02203025 */ move $a2, $s1 -/* 0A1E9C 7F06D36C 0FC1B473 */ jal sub_GAME_7F06D1CC -/* 0A1EA0 7F06D370 A5A20000 */ sh $v0, ($t5) -/* 0A1EA4 7F06D374 8FAE003C */ lw $t6, 0x3c($sp) -/* 0A1EA8 7F06D378 02402025 */ move $a0, $s2 -/* 0A1EAC 7F06D37C 26050002 */ addiu $a1, $s0, 2 -/* 0A1EB0 7F06D380 02203025 */ move $a2, $s1 -/* 0A1EB4 7F06D384 0FC1B473 */ jal sub_GAME_7F06D1CC -/* 0A1EB8 7F06D388 A5C20002 */ sh $v0, 2($t6) -/* 0A1EBC 7F06D38C 8FAF003C */ lw $t7, 0x3c($sp) -/* 0A1EC0 7F06D390 02402025 */ move $a0, $s2 -/* 0A1EC4 7F06D394 26050003 */ addiu $a1, $s0, 3 -/* 0A1EC8 7F06D398 02203025 */ move $a2, $s1 -/* 0A1ECC 7F06D39C 0FC1B473 */ jal sub_GAME_7F06D1CC -/* 0A1ED0 7F06D3A0 A5E20004 */ sh $v0, 4($t7) -/* 0A1ED4 7F06D3A4 8FB8002C */ lw $t8, 0x2c($sp) -/* 0A1ED8 7F06D3A8 8FA5003C */ lw $a1, 0x3c($sp) -/* 0A1EDC 7F06D3AC 3043FFFF */ andi $v1, $v0, 0xffff -/* 0A1EE0 7F06D3B0 5300000A */ beql $t8, $zero, .L7F06D3DC -/* 0A1EE4 7F06D3B4 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A1EE8 7F06D3B8 84B90000 */ lh $t9, ($a1) -/* 0A1EEC 7F06D3BC 3C090001 */ lui $t1, 1 -/* 0A1EF0 7F06D3C0 00194023 */ negu $t0, $t9 -/* 0A1EF4 7F06D3C4 10400004 */ beqz $v0, .L7F06D3D8 -/* 0A1EF8 7F06D3C8 A4A80000 */ sh $t0, ($a1) -/* 0A1EFC 7F06D3CC 01221823 */ subu $v1, $t1, $v0 -/* 0A1F00 7F06D3D0 306AFFFF */ andi $t2, $v1, 0xffff -/* 0A1F04 7F06D3D4 01401825 */ move $v1, $t2 -.L7F06D3D8: -/* 0A1F08 7F06D3D8 8FBF0024 */ lw $ra, 0x24($sp) -.L7F06D3DC: -/* 0A1F0C 7F06D3DC 8FB00018 */ lw $s0, 0x18($sp) -/* 0A1F10 7F06D3E0 8FB1001C */ lw $s1, 0x1c($sp) -/* 0A1F14 7F06D3E4 8FB20020 */ lw $s2, 0x20($sp) -/* 0A1F18 7F06D3E8 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0A1F1C 7F06D3EC 03E00008 */ jr $ra -/* 0A1F20 7F06D3F0 00601025 */ move $v0, $v1 -) -#endif +f32 sub_GAME_7F06D3F4(s32 jointnum, s32 flip, ModelSkeleton *skeleton, ModelAnimation *anim, s32 frame, coord3d *pos) +{ + s16 tmp[3]; + u16 angle; + angle = sub_GAME_7F06D2E4(jointnum, flip, skeleton, anim, frame, tmp); + pos->x = (f32)tmp[0]; + pos->y = (f32)tmp[1]; + pos->z = (f32)tmp[2]; -#ifdef NONMATCHING -void sub_GAME_7F06D3F4(void) { - + return ((f32)angle * M_TAU_F) / M_U16_MAX_VALUE_F; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80054BC0 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F06D3F4 -/* 0A1F24 7F06D3F4 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0A1F28 7F06D3F8 8FAE0040 */ lw $t6, 0x40($sp) -/* 0A1F2C 7F06D3FC AFBF001C */ sw $ra, 0x1c($sp) -/* 0A1F30 7F06D400 27AF0028 */ addiu $t7, $sp, 0x28 -/* 0A1F34 7F06D404 AFAF0014 */ sw $t7, 0x14($sp) -/* 0A1F38 7F06D408 0FC1B4B9 */ jal sub_GAME_7F06D2E4 -/* 0A1F3C 7F06D40C AFAE0010 */ sw $t6, 0x10($sp) -/* 0A1F40 7F06D410 87B80028 */ lh $t8, 0x28($sp) -/* 0A1F44 7F06D414 8FA30044 */ lw $v1, 0x44($sp) -/* 0A1F48 7F06D418 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0A1F4C 7F06D41C 44982000 */ mtc1 $t8, $f4 -/* 0A1F50 7F06D420 00000000 */ nop -/* 0A1F54 7F06D424 468021A0 */ cvt.s.w $f6, $f4 -/* 0A1F58 7F06D428 44822000 */ mtc1 $v0, $f4 -/* 0A1F5C 7F06D42C E4660000 */ swc1 $f6, ($v1) -/* 0A1F60 7F06D430 87B9002A */ lh $t9, 0x2a($sp) -/* 0A1F64 7F06D434 468021A0 */ cvt.s.w $f6, $f4 -/* 0A1F68 7F06D438 44994000 */ mtc1 $t9, $f8 -/* 0A1F6C 7F06D43C 00000000 */ nop -/* 0A1F70 7F06D440 468042A0 */ cvt.s.w $f10, $f8 -/* 0A1F74 7F06D444 E46A0004 */ swc1 $f10, 4($v1) -/* 0A1F78 7F06D448 87A8002C */ lh $t0, 0x2c($sp) -/* 0A1F7C 7F06D44C 44888000 */ mtc1 $t0, $f16 -/* 0A1F80 7F06D450 00000000 */ nop -/* 0A1F84 7F06D454 468084A0 */ cvt.s.w $f18, $f16 -/* 0A1F88 7F06D458 04410004 */ bgez $v0, .L7F06D46C -/* 0A1F8C 7F06D45C E4720008 */ swc1 $f18, 8($v1) -/* 0A1F90 7F06D460 44814000 */ mtc1 $at, $f8 -/* 0A1F94 7F06D464 00000000 */ nop -/* 0A1F98 7F06D468 46083180 */ add.s $f6, $f6, $f8 -.L7F06D46C: -/* 0A1F9C 7F06D46C 3C018005 */ lui $at, %hi(D_80054BC0) -/* 0A1FA0 7F06D470 C42A4BC0 */ lwc1 $f10, %lo(D_80054BC0)($at) -/* 0A1FA4 7F06D474 8FBF001C */ lw $ra, 0x1c($sp) -/* 0A1FA8 7F06D478 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0A1FAC 7F06D47C 460A3402 */ mul.s $f16, $f6, $f10 -/* 0A1FB0 7F06D480 44819000 */ mtc1 $at, $f18 -/* 0A1FB4 7F06D484 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0A1FB8 7F06D488 03E00008 */ jr $ra -/* 0A1FBC 7F06D48C 46128003 */ div.s $f0, $f16, $f18 -) -#endif +/** + * Address: 7F06D490 + */ +void sub_GAME_7F06D490(Model *model, ModelNode *modelNode) +{ + union ModelRwData *rw; + coord3d sp38; + coord3d sp2c; + f32 y; + rw = modelGetNodeRwData(model, modelNode); + if (rw->Header.unk00 != 0) + { + return; + } -#ifdef NONMATCHING -void sub_GAME_7F06D490(void) { + sp38.x = rw->Header.unk34.x; + sp38.y = rw->Header.unk34.y; + sp38.z = rw->Header.unk34.z; + rw->Header.unk14 = rw->Header.unk30; + if (model->unk2c != 0.0f) + { + if (rw->Header.unk01 != 0) + { + interpolate3dVectors(&sp38, &rw->Header.unk24, model->unk2c); + + // Weird do while loop but needed for matching. + do + { + rw->Header.unk14 = sub_GAME_7F06D0CC(rw->Header.unk30, rw->Header.unk20, model->unk2c); + } + while (model->unka0 * 0); + } + } + + if ((model->anim2 != 0) || (model->unk84 != 0.0f)) + { + if (rw->Header.unk02 != 0) + { + y = rw->Header.unk4c.y; + + if (model->unk5c != 0.0f) + { + y += (rw->Header.unk40.y - y) * model->unk5c; + } + + sp38.y += (y - sp38.y) * model->unk84; + } + } + + sp2c.x = sp38.x; + sp2c.y = sp38.y; + sp2c.z = sp38.z; + + if (model->unka0 && !((s32 (*)(Model *, coord3d *, coord3d *, f32 *)) model->unka0)(model, &rw->Header.pos, &sp2c, &rw->Header.ground)) + { + return; + } + + sp38.x = sp2c.x - sp38.x; + sp38.z = sp2c.z - sp38.z; + + rw->Header.pos.x = sp2c.x; + rw->Header.pos.y = ((f32) sp2c.y) + rw->Header.ground; + rw->Header.pos.z = sp2c.z; + + rw->Header.unk34.x += sp38.x; + rw->Header.unk34.z += sp38.z; + + if (rw->Header.unk01 != 0) + { + rw->Header.unk24.x += sp38.x; + rw->Header.unk24.z += sp38.z; + } + + if (rw->Header.unk02 != 0) + { + rw->Header.unk4c.x += sp38.x; + rw->Header.unk4c.z += sp38.z; + rw->Header.unk40.x += sp38.x; + rw->Header.unk40.z += sp38.z; + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F06D490 -/* 0A1FC0 7F06D490 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0A1FC4 7F06D494 AFBF001C */ sw $ra, 0x1c($sp) -/* 0A1FC8 7F06D498 AFB10018 */ sw $s1, 0x18($sp) -/* 0A1FCC 7F06D49C 00808825 */ move $s1, $a0 -/* 0A1FD0 7F06D4A0 0FC1B1E7 */ jal modelGetNodeRwData -/* 0A1FD4 7F06D4A4 AFB00014 */ sw $s0, 0x14($sp) -/* 0A1FD8 7F06D4A8 804E0000 */ lb $t6, ($v0) -/* 0A1FDC 7F06D4AC 00408025 */ move $s0, $v0 -/* 0A1FE0 7F06D4B0 55C0007B */ bnezl $t6, .L7F06D6A0 -/* 0A1FE4 7F06D4B4 8FBF001C */ lw $ra, 0x1c($sp) -/* 0A1FE8 7F06D4B8 C4440034 */ lwc1 $f4, 0x34($v0) -/* 0A1FEC 7F06D4BC 44807000 */ mtc1 $zero, $f14 -/* 0A1FF0 7F06D4C0 E7A40038 */ swc1 $f4, 0x38($sp) -/* 0A1FF4 7F06D4C4 C4460038 */ lwc1 $f6, 0x38($v0) -/* 0A1FF8 7F06D4C8 E7A6003C */ swc1 $f6, 0x3c($sp) -/* 0A1FFC 7F06D4CC C448003C */ lwc1 $f8, 0x3c($v0) -/* 0A2000 7F06D4D0 E7A80040 */ swc1 $f8, 0x40($sp) -/* 0A2004 7F06D4D4 C44A0030 */ lwc1 $f10, 0x30($v0) -/* 0A2008 7F06D4D8 E44A0014 */ swc1 $f10, 0x14($v0) -/* 0A200C 7F06D4DC C620002C */ lwc1 $f0, 0x2c($s1) -/* 0A2010 7F06D4E0 46007032 */ c.eq.s $f14, $f0 -/* 0A2014 7F06D4E4 00000000 */ nop -/* 0A2018 7F06D4E8 4503000F */ bc1tl .L7F06D528 -/* 0A201C 7F06D4EC 8E380054 */ lw $t8, 0x54($s1) -/* 0A2020 7F06D4F0 804F0001 */ lb $t7, 1($v0) -/* 0A2024 7F06D4F4 27A40038 */ addiu $a0, $sp, 0x38 -/* 0A2028 7F06D4F8 51E0000B */ beql $t7, $zero, .L7F06D528 -/* 0A202C 7F06D4FC 8E380054 */ lw $t8, 0x54($s1) -/* 0A2030 7F06D500 44060000 */ mfc1 $a2, $f0 -/* 0A2034 7F06D504 0FC1B41F */ jal interpolate3dVectors -/* 0A2038 7F06D508 24450024 */ addiu $a1, $v0, 0x24 -/* 0A203C 7F06D50C C60C0030 */ lwc1 $f12, 0x30($s0) -/* 0A2040 7F06D510 C60E0020 */ lwc1 $f14, 0x20($s0) -/* 0A2044 7F06D514 0FC1B433 */ jal sub_GAME_7F06D0CC -/* 0A2048 7F06D518 8E26002C */ lw $a2, 0x2c($s1) -/* 0A204C 7F06D51C 44807000 */ mtc1 $zero, $f14 -/* 0A2050 7F06D520 E6000014 */ swc1 $f0, 0x14($s0) -/* 0A2054 7F06D524 8E380054 */ lw $t8, 0x54($s1) -.L7F06D528: -/* 0A2058 7F06D528 02202025 */ move $a0, $s1 -/* 0A205C 7F06D52C 26050008 */ addiu $a1, $s0, 8 -/* 0A2060 7F06D530 17000006 */ bnez $t8, .L7F06D54C -/* 0A2064 7F06D534 27A6002C */ addiu $a2, $sp, 0x2c -/* 0A2068 7F06D538 C6300084 */ lwc1 $f16, 0x84($s1) -/* 0A206C 7F06D53C 46107032 */ c.eq.s $f14, $f16 -/* 0A2070 7F06D540 00000000 */ nop -/* 0A2074 7F06D544 45030015 */ bc1tl .L7F06D59C -/* 0A2078 7F06D548 C7A40038 */ lwc1 $f4, 0x38($sp) -.L7F06D54C: -/* 0A207C 7F06D54C 82190002 */ lb $t9, 2($s0) -/* 0A2080 7F06D550 C7A8003C */ lwc1 $f8, 0x3c($sp) -/* 0A2084 7F06D554 53200011 */ beql $t9, $zero, .L7F06D59C -/* 0A2088 7F06D558 C7A40038 */ lwc1 $f4, 0x38($sp) -/* 0A208C 7F06D55C C622005C */ lwc1 $f2, 0x5c($s1) -/* 0A2090 7F06D560 C6000050 */ lwc1 $f0, 0x50($s0) -/* 0A2094 7F06D564 C62C0084 */ lwc1 $f12, 0x84($s1) -/* 0A2098 7F06D568 46027032 */ c.eq.s $f14, $f2 -/* 0A209C 7F06D56C 00000000 */ nop -/* 0A20A0 7F06D570 45030006 */ bc1tl .L7F06D58C -/* 0A20A4 7F06D574 46080281 */ sub.s $f10, $f0, $f8 -/* 0A20A8 7F06D578 C6120044 */ lwc1 $f18, 0x44($s0) -/* 0A20AC 7F06D57C 46009101 */ sub.s $f4, $f18, $f0 -/* 0A20B0 7F06D580 46022182 */ mul.s $f6, $f4, $f2 -/* 0A20B4 7F06D584 46060000 */ add.s $f0, $f0, $f6 -/* 0A20B8 7F06D588 46080281 */ sub.s $f10, $f0, $f8 -.L7F06D58C: -/* 0A20BC 7F06D58C 460C5402 */ mul.s $f16, $f10, $f12 -/* 0A20C0 7F06D590 46104480 */ add.s $f18, $f8, $f16 -/* 0A20C4 7F06D594 E7B2003C */ swc1 $f18, 0x3c($sp) -/* 0A20C8 7F06D598 C7A40038 */ lwc1 $f4, 0x38($sp) -.L7F06D59C: -/* 0A20CC 7F06D59C C7A6003C */ lwc1 $f6, 0x3c($sp) -/* 0A20D0 7F06D5A0 C7AA0040 */ lwc1 $f10, 0x40($sp) -/* 0A20D4 7F06D5A4 E7A4002C */ swc1 $f4, 0x2c($sp) -/* 0A20D8 7F06D5A8 E7A60030 */ swc1 $f6, 0x30($sp) -/* 0A20DC 7F06D5AC E7AA0034 */ swc1 $f10, 0x34($sp) -/* 0A20E0 7F06D5B0 8E2200A0 */ lw $v0, 0xa0($s1) -/* 0A20E4 7F06D5B4 50400006 */ beql $v0, $zero, .L7F06D5D0 -/* 0A20E8 7F06D5B8 C7A8002C */ lwc1 $f8, 0x2c($sp) -/* 0A20EC 7F06D5BC 0040F809 */ jalr $v0 -/* 0A20F0 7F06D5C0 26070004 */ addiu $a3, $s0, 4 -/* 0A20F4 7F06D5C4 50400036 */ beql $v0, $zero, .L7F06D6A0 -/* 0A20F8 7F06D5C8 8FBF001C */ lw $ra, 0x1c($sp) -/* 0A20FC 7F06D5CC C7A8002C */ lwc1 $f8, 0x2c($sp) -.L7F06D5D0: -/* 0A2100 7F06D5D0 C7B00038 */ lwc1 $f16, 0x38($sp) -/* 0A2104 7F06D5D4 C7A40034 */ lwc1 $f4, 0x34($sp) -/* 0A2108 7F06D5D8 C7A60040 */ lwc1 $f6, 0x40($sp) -/* 0A210C 7F06D5DC 46104481 */ sub.s $f18, $f8, $f16 -/* 0A2110 7F06D5E0 46062281 */ sub.s $f10, $f4, $f6 -/* 0A2114 7F06D5E4 E7B20038 */ swc1 $f18, 0x38($sp) -/* 0A2118 7F06D5E8 E7AA0040 */ swc1 $f10, 0x40($sp) -/* 0A211C 7F06D5EC E6080008 */ swc1 $f8, 8($s0) -/* 0A2120 7F06D5F0 C7B00030 */ lwc1 $f16, 0x30($sp) -/* 0A2124 7F06D5F4 C6120004 */ lwc1 $f18, 4($s0) -/* 0A2128 7F06D5F8 C60A0034 */ lwc1 $f10, 0x34($s0) -/* 0A212C 7F06D5FC 82080001 */ lb $t0, 1($s0) -/* 0A2130 7F06D600 46128100 */ add.s $f4, $f16, $f18 -/* 0A2134 7F06D604 C612003C */ lwc1 $f18, 0x3c($s0) -/* 0A2138 7F06D608 E604000C */ swc1 $f4, 0xc($s0) -/* 0A213C 7F06D60C C7A60034 */ lwc1 $f6, 0x34($sp) -/* 0A2140 7F06D610 E6060010 */ swc1 $f6, 0x10($s0) -/* 0A2144 7F06D614 C7A80038 */ lwc1 $f8, 0x38($sp) -/* 0A2148 7F06D618 46085400 */ add.s $f16, $f10, $f8 -/* 0A214C 7F06D61C E6100034 */ swc1 $f16, 0x34($s0) -/* 0A2150 7F06D620 C7A40040 */ lwc1 $f4, 0x40($sp) -/* 0A2154 7F06D624 46049180 */ add.s $f6, $f18, $f4 -/* 0A2158 7F06D628 11000009 */ beqz $t0, .L7F06D650 -/* 0A215C 7F06D62C E606003C */ swc1 $f6, 0x3c($s0) -/* 0A2160 7F06D630 C60A0024 */ lwc1 $f10, 0x24($s0) -/* 0A2164 7F06D634 C7A80038 */ lwc1 $f8, 0x38($sp) -/* 0A2168 7F06D638 C612002C */ lwc1 $f18, 0x2c($s0) -/* 0A216C 7F06D63C 46085400 */ add.s $f16, $f10, $f8 -/* 0A2170 7F06D640 E6100024 */ swc1 $f16, 0x24($s0) -/* 0A2174 7F06D644 C7A40040 */ lwc1 $f4, 0x40($sp) -/* 0A2178 7F06D648 46049180 */ add.s $f6, $f18, $f4 -/* 0A217C 7F06D64C E606002C */ swc1 $f6, 0x2c($s0) -.L7F06D650: -/* 0A2180 7F06D650 82090002 */ lb $t1, 2($s0) -/* 0A2184 7F06D654 C7A80038 */ lwc1 $f8, 0x38($sp) -/* 0A2188 7F06D658 51200011 */ beql $t1, $zero, .L7F06D6A0 -/* 0A218C 7F06D65C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0A2190 7F06D660 C60A004C */ lwc1 $f10, 0x4c($s0) -/* 0A2194 7F06D664 C6120054 */ lwc1 $f18, 0x54($s0) -/* 0A2198 7F06D668 46085400 */ add.s $f16, $f10, $f8 -/* 0A219C 7F06D66C C60A0040 */ lwc1 $f10, 0x40($s0) -/* 0A21A0 7F06D670 E610004C */ swc1 $f16, 0x4c($s0) -/* 0A21A4 7F06D674 C7A40040 */ lwc1 $f4, 0x40($sp) -/* 0A21A8 7F06D678 46049180 */ add.s $f6, $f18, $f4 -/* 0A21AC 7F06D67C C6120048 */ lwc1 $f18, 0x48($s0) -/* 0A21B0 7F06D680 E6060054 */ swc1 $f6, 0x54($s0) -/* 0A21B4 7F06D684 C7A80038 */ lwc1 $f8, 0x38($sp) -/* 0A21B8 7F06D688 46085400 */ add.s $f16, $f10, $f8 -/* 0A21BC 7F06D68C E6100040 */ swc1 $f16, 0x40($s0) -/* 0A21C0 7F06D690 C7A40040 */ lwc1 $f4, 0x40($sp) -/* 0A21C4 7F06D694 46049180 */ add.s $f6, $f18, $f4 -/* 0A21C8 7F06D698 E6060048 */ swc1 $f6, 0x48($s0) -/* 0A21CC 7F06D69C 8FBF001C */ lw $ra, 0x1c($sp) -.L7F06D6A0: -/* 0A21D0 7F06D6A0 8FB00014 */ lw $s0, 0x14($sp) -/* 0A21D4 7F06D6A4 8FB10018 */ lw $s1, 0x18($sp) -/* 0A21D8 7F06D6A8 03E00008 */ jr $ra -/* 0A21DC 7F06D6AC 27BD0048 */ addiu $sp, $sp, 0x48 -) -#endif - - - - - - void subcalcpos(Model *arg0) @@ -1586,7 +1146,7 @@ void process_01_group_heading(ModelRenderData* renderdata, Model* model, ModelNo scale = model->scale; pos = &rwdata->Header.pos.x; unk14 = rwdata->Header.unk14; - modeltype = (s16)rodata->Header.ModelType; + modeltype = rodata->Header.MatrixIndex; renderpos = &model->render_pos[modeltype]; if (node->Parent != NULL) @@ -1595,7 +1155,7 @@ void process_01_group_heading(ModelRenderData* renderdata, Model* model, ModelNo } else { - var_a3 = renderdata->unk_matrix; + var_a3 = renderdata->basemtx; } if (rwdata->Header.unk18 != 0.0f) @@ -1625,1196 +1185,563 @@ void process_01_group_heading(ModelRenderData* renderdata, Model* model, ModelNo } -#ifdef NONMATCHING -void sub_GAME_7F06D8B0(void) { +/** + * Address: 7F06D8B0 + */ +void modelBuildGroupMatrices(Mtxf **parentMtx, Model *model, ModelGroupMtxBuildArg *mgm, coord3d *rot) +{ + u32 flags; + ModelRoData_GroupRecord *group; + Mtxf *parent; + Mtxf *matrix0_mtx; + Mtxf tmp; + s32 matrix0; + s32 matrix1; + s32 matrix2; + RenderPosView *render_pos; + Mtxf *parentNodeMtx; + f32 *origin; + s32 has_matrix2; + quatf q; + quatf q2; + Mtxf *dst; + f32 angle; + Mtxf **parentMtxPtr; + + flags = mgm->flags; + group = mgm->group; + matrix0 = group->MatrixID0; + matrix1 = group->MatrixID1; + parentMtxPtr = parentMtx; + origin = group->Origin.f; + matrix2 = group->MatrixID2; + render_pos = model->render_pos; + + if (((Mtxf *) mgm->parentnode) != NULL) + { + parentNodeMtx = modelFindNodeMtx(model, (ModelNode *) ((Mtxf *) mgm->parentnode), 0); + parent = parentNodeMtx; + } + else + { + parent = parentMtxPtr[0]; + } + + has_matrix2 = flags & MODELGROUP_MTX_HAS_MATRIX2; + matrix0_mtx = (Mtxf *) mgm->parentnode; + + if (parent != NULL) + { + matrix_4x4_set_position_and_rotation_around_xyz(&group->Origin, rot, &tmp); + matrix0_mtx = &render_pos[matrix0].pos; + matrix_4x4_multiply_homogeneous(parent, &tmp, matrix0_mtx); + + if (g_ModelJointPositionedFunc != NULL) + { + g_ModelJointPositionedFunc(matrix0, matrix0_mtx); + } + } + else + { + matrix_4x4_set_position_and_rotation_around_xyz(&group->Origin, rot, &render_pos[matrix0].pos); + } + + if (flags & MODELGROUP_MTX_HAS_MATRIX1) + { + quaternion_set_rotation_around_xyzf(rot->f, q); + quaternion_7F05BC68(q, 0.5f, q2); + + if (parent != NULL) + { + quaternion_to_transform_matrix(origin, q2, tmp.m); + matrix_4x4_multiply_homogeneous(parent, &tmp, &render_pos[matrix1].pos); + } + else + { + quaternion_to_transform_matrix(origin, q2, (render_pos + matrix1)->pos.m); + } + } + + if (has_matrix2) + { + if (parent != NULL) + { + dst = &tmp; + } + else + { + dst = &render_pos[matrix2].pos; + } + + angle = rot->y; + + if (angle < M_PI_F) + { + angle = angle * 0.5f; + } + else + { + angle = M_TAU_F - ((M_TAU_F - angle) * 0.5f); + } + + matrix_4x4_set_rotation_around_y(angle, dst); + + if (angle >= M_PI_F) + { + angle = M_TAU_F - angle; + } + if (angle < 0.890118f) + { + angle = modelGetBendStretchScale(angle); + } + else + { + angle = 1.5f; + } + + matrix_column_3_scalar_multiply_2(angle, (f32 *) dst); + matrix_4x4_set_position(&group->Origin, dst); + + if (parent != NULL) + { + matrix_4x4_multiply_homogeneous(parent, dst, &render_pos[matrix2].pos); + } + } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80054BC4 -.word 0x40490fdb /*3.1415927*/ -glabel D_80054BC8 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054BCC -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054BD0 -.word 0x40490fdb /*3.1415927*/ -glabel D_80054BD4 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054BD8 -.word 0x3f63dec6 /*0.890118*/ -.text -glabel sub_GAME_7F06D8B0 -/* 0A23E0 7F06D8B0 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 0A23E4 7F06D8B4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0A23E8 7F06D8B8 AFA500BC */ sw $a1, 0xbc($sp) -/* 0A23EC 7F06D8BC AFA700C4 */ sw $a3, 0xc4($sp) -/* 0A23F0 7F06D8C0 94CE0000 */ lhu $t6, ($a2) -/* 0A23F4 7F06D8C4 AFAE00B4 */ sw $t6, 0xb4($sp) -/* 0A23F8 7F06D8C8 8CCF0004 */ lw $t7, 4($a2) -/* 0A23FC 7F06D8CC AFAF00B0 */ sw $t7, 0xb0($sp) -/* 0A2400 7F06D8D0 85F9000E */ lh $t9, 0xe($t7) -/* 0A2404 7F06D8D4 AFB90064 */ sw $t9, 0x64($sp) -/* 0A2408 7F06D8D8 85E80010 */ lh $t0, 0x10($t7) -/* 0A240C 7F06D8DC AFA80060 */ sw $t0, 0x60($sp) -/* 0A2410 7F06D8E0 85E90012 */ lh $t1, 0x12($t7) -/* 0A2414 7F06D8E4 AFA9005C */ sw $t1, 0x5c($sp) -/* 0A2418 7F06D8E8 8CAB000C */ lw $t3, 0xc($a1) -/* 0A241C 7F06D8EC AFAB0058 */ sw $t3, 0x58($sp) -/* 0A2420 7F06D8F0 8CCC0008 */ lw $t4, 8($a2) -/* 0A2424 7F06D8F4 00003025 */ move $a2, $zero -/* 0A2428 7F06D8F8 11800006 */ beqz $t4, .L7F06D914 -/* 0A242C 7F06D8FC AFAC001C */ sw $t4, 0x1c($sp) -/* 0A2430 7F06D900 00A02025 */ move $a0, $a1 -/* 0A2434 7F06D904 0FC1B198 */ jal modelFindNodeMtx -/* 0A2438 7F06D908 01802825 */ move $a1, $t4 -/* 0A243C 7F06D90C 10000003 */ b .L7F06D91C -/* 0A2440 7F06D910 AFA200AC */ sw $v0, 0xac($sp) -.L7F06D914: -/* 0A2444 7F06D914 8C8E0000 */ lw $t6, ($a0) -/* 0A2448 7F06D918 AFAE00AC */ sw $t6, 0xac($sp) -.L7F06D91C: -/* 0A244C 7F06D91C 8FAF00AC */ lw $t7, 0xac($sp) -/* 0A2450 7F06D920 8FA90064 */ lw $t1, 0x64($sp) -/* 0A2454 7F06D924 8FA400B0 */ lw $a0, 0xb0($sp) -/* 0A2458 7F06D928 11E00017 */ beqz $t7, .L7F06D988 -/* 0A245C 7F06D92C 00095980 */ sll $t3, $t1, 6 -/* 0A2460 7F06D930 8FA400B0 */ lw $a0, 0xb0($sp) -/* 0A2464 7F06D934 8FA500C4 */ lw $a1, 0xc4($sp) -/* 0A2468 7F06D938 0FC1624B */ jal matrix_4x4_set_position_and_rotation_around_xyz -/* 0A246C 7F06D93C 27A60068 */ addiu $a2, $sp, 0x68 -/* 0A2470 7F06D940 8FB90064 */ lw $t9, 0x64($sp) -/* 0A2474 7F06D944 8FB80058 */ lw $t8, 0x58($sp) -/* 0A2478 7F06D948 8FA400AC */ lw $a0, 0xac($sp) -/* 0A247C 7F06D94C 00194180 */ sll $t0, $t9, 6 -/* 0A2480 7F06D950 01183021 */ addu $a2, $t0, $t8 -/* 0A2484 7F06D954 AFA6001C */ sw $a2, 0x1c($sp) -/* 0A2488 7F06D958 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0A248C 7F06D95C 27A50068 */ addiu $a1, $sp, 0x68 -/* 0A2490 7F06D960 3C028003 */ lui $v0, %hi(D_80036090) -/* 0A2494 7F06D964 8C426090 */ lw $v0, %lo(D_80036090)($v0) -/* 0A2498 7F06D968 8FA6001C */ lw $a2, 0x1c($sp) -/* 0A249C 7F06D96C 8FA40064 */ lw $a0, 0x64($sp) -/* 0A24A0 7F06D970 5040000A */ beql $v0, $zero, .L7F06D99C -/* 0A24A4 7F06D974 8FAA00B4 */ lw $t2, 0xb4($sp) -/* 0A24A8 7F06D978 0040F809 */ jalr $v0 -/* 0A24AC 7F06D97C 00C02825 */ move $a1, $a2 -/* 0A24B0 7F06D980 10000006 */ b .L7F06D99C -/* 0A24B4 7F06D984 8FAA00B4 */ lw $t2, 0xb4($sp) -.L7F06D988: -/* 0A24B8 7F06D988 8FAC0058 */ lw $t4, 0x58($sp) -/* 0A24BC 7F06D98C 8FA500C4 */ lw $a1, 0xc4($sp) -/* 0A24C0 7F06D990 0FC1624B */ jal matrix_4x4_set_position_and_rotation_around_xyz -/* 0A24C4 7F06D994 016C3021 */ addu $a2, $t3, $t4 -/* 0A24C8 7F06D998 8FAA00B4 */ lw $t2, 0xb4($sp) -.L7F06D99C: -/* 0A24CC 7F06D99C 8FA400C4 */ lw $a0, 0xc4($sp) -/* 0A24D0 7F06D9A0 314D0100 */ andi $t5, $t2, 0x100 -/* 0A24D4 7F06D9A4 51A0001D */ beql $t5, $zero, .L7F06DA1C -/* 0A24D8 7F06D9A8 8FAC00B4 */ lw $t4, 0xb4($sp) -/* 0A24DC 7F06D9AC 0FC16CFD */ jal quaternion_set_rotation_around_xyzf -/* 0A24E0 7F06D9B0 27A5003C */ addiu $a1, $sp, 0x3c -/* 0A24E4 7F06D9B4 27A4003C */ addiu $a0, $sp, 0x3c -/* 0A24E8 7F06D9B8 3C053F00 */ lui $a1, 0x3f00 -/* 0A24EC 7F06D9BC 0FC16F1A */ jal quaternion_7F05BC68 -/* 0A24F0 7F06D9C0 27A6002C */ addiu $a2, $sp, 0x2c -/* 0A24F4 7F06D9C4 8FAE00AC */ lw $t6, 0xac($sp) -/* 0A24F8 7F06D9C8 8FB80060 */ lw $t8, 0x60($sp) -/* 0A24FC 7F06D9CC 27A5002C */ addiu $a1, $sp, 0x2c -/* 0A2500 7F06D9D0 11C0000D */ beqz $t6, .L7F06DA08 -/* 0A2504 7F06D9D4 00184980 */ sll $t1, $t8, 6 -/* 0A2508 7F06D9D8 8FA400B0 */ lw $a0, 0xb0($sp) -/* 0A250C 7F06D9DC 0FC16E6D */ jal quaternion_to_transform_matrix -/* 0A2510 7F06D9E0 27A60068 */ addiu $a2, $sp, 0x68 -/* 0A2514 7F06D9E4 8FAF0060 */ lw $t7, 0x60($sp) -/* 0A2518 7F06D9E8 8FA80058 */ lw $t0, 0x58($sp) -/* 0A251C 7F06D9EC 8FA400AC */ lw $a0, 0xac($sp) -/* 0A2520 7F06D9F0 000FC980 */ sll $t9, $t7, 6 -/* 0A2524 7F06D9F4 27A50068 */ addiu $a1, $sp, 0x68 -/* 0A2528 7F06D9F8 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0A252C 7F06D9FC 03283021 */ addu $a2, $t9, $t0 -/* 0A2530 7F06DA00 10000006 */ b .L7F06DA1C -/* 0A2534 7F06DA04 8FAC00B4 */ lw $t4, 0xb4($sp) -.L7F06DA08: -/* 0A2538 7F06DA08 8FAB0058 */ lw $t3, 0x58($sp) -/* 0A253C 7F06DA0C 8FA400B0 */ lw $a0, 0xb0($sp) -/* 0A2540 7F06DA10 0FC16E6D */ jal quaternion_to_transform_matrix -/* 0A2544 7F06DA14 012B3021 */ addu $a2, $t1, $t3 -/* 0A2548 7F06DA18 8FAC00B4 */ lw $t4, 0xb4($sp) -.L7F06DA1C: -/* 0A254C 7F06DA1C 8FAD00AC */ lw $t5, 0xac($sp) -/* 0A2550 7F06DA20 318A0200 */ andi $t2, $t4, 0x200 -/* 0A2554 7F06DA24 5140004A */ beql $t2, $zero, .L7F06DB50 -/* 0A2558 7F06DA28 8FBF0014 */ lw $ra, 0x14($sp) -/* 0A255C 7F06DA2C 11A00004 */ beqz $t5, .L7F06DA40 -/* 0A2560 7F06DA30 8FAF005C */ lw $t7, 0x5c($sp) -/* 0A2564 7F06DA34 27AE0068 */ addiu $t6, $sp, 0x68 -/* 0A2568 7F06DA38 10000005 */ b .L7F06DA50 -/* 0A256C 7F06DA3C AFAE0028 */ sw $t6, 0x28($sp) -.L7F06DA40: -/* 0A2570 7F06DA40 8FA80058 */ lw $t0, 0x58($sp) -/* 0A2574 7F06DA44 000FC980 */ sll $t9, $t7, 6 -/* 0A2578 7F06DA48 0328C021 */ addu $t8, $t9, $t0 -/* 0A257C 7F06DA4C AFB80028 */ sw $t8, 0x28($sp) -.L7F06DA50: -/* 0A2580 7F06DA50 8FA900C4 */ lw $t1, 0xc4($sp) -/* 0A2584 7F06DA54 3C018005 */ lui $at, %hi(D_80054BC4) -/* 0A2588 7F06DA58 C4244BC4 */ lwc1 $f4, %lo(D_80054BC4)($at) -/* 0A258C 7F06DA5C C52C0004 */ lwc1 $f12, 4($t1) -/* 0A2590 7F06DA60 3C018005 */ lui $at, %hi(D_80054BC8) -/* 0A2594 7F06DA64 8FA50028 */ lw $a1, 0x28($sp) -/* 0A2598 7F06DA68 4604603C */ c.lt.s $f12, $f4 -/* 0A259C 7F06DA6C 00000000 */ nop -/* 0A25A0 7F06DA70 45000007 */ bc1f .L7F06DA90 -/* 0A25A4 7F06DA74 00000000 */ nop -/* 0A25A8 7F06DA78 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0A25AC 7F06DA7C 44813000 */ mtc1 $at, $f6 -/* 0A25B0 7F06DA80 00000000 */ nop -/* 0A25B4 7F06DA84 46066302 */ mul.s $f12, $f12, $f6 -/* 0A25B8 7F06DA88 10000009 */ b .L7F06DAB0 -/* 0A25BC 7F06DA8C 00000000 */ nop -.L7F06DA90: -/* 0A25C0 7F06DA90 C4284BC8 */ lwc1 $f8, %lo(D_80054BC8)($at) -/* 0A25C4 7F06DA94 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0A25C8 7F06DA98 44818000 */ mtc1 $at, $f16 -/* 0A25CC 7F06DA9C 460C4281 */ sub.s $f10, $f8, $f12 -/* 0A25D0 7F06DAA0 3C018005 */ lui $at, %hi(D_80054BCC) -/* 0A25D4 7F06DAA4 C4244BCC */ lwc1 $f4, %lo(D_80054BCC)($at) -/* 0A25D8 7F06DAA8 46105482 */ mul.s $f18, $f10, $f16 -/* 0A25DC 7F06DAAC 46122301 */ sub.s $f12, $f4, $f18 -.L7F06DAB0: -/* 0A25E0 7F06DAB0 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 0A25E4 7F06DAB4 E7AC0024 */ swc1 $f12, 0x24($sp) -/* 0A25E8 7F06DAB8 3C018005 */ lui $at, %hi(D_80054BD0) -/* 0A25EC 7F06DABC C7AC0024 */ lwc1 $f12, 0x24($sp) -/* 0A25F0 7F06DAC0 C4264BD0 */ lwc1 $f6, %lo(D_80054BD0)($at) -/* 0A25F4 7F06DAC4 3C018005 */ lui $at, %hi(D_80054BD4) -/* 0A25F8 7F06DAC8 460C303E */ c.le.s $f6, $f12 -/* 0A25FC 7F06DACC 00000000 */ nop -/* 0A2600 7F06DAD0 45000003 */ bc1f .L7F06DAE0 -/* 0A2604 7F06DAD4 00000000 */ nop -/* 0A2608 7F06DAD8 C4284BD4 */ lwc1 $f8, %lo(D_80054BD4)($at) -/* 0A260C 7F06DADC 460C4301 */ sub.s $f12, $f8, $f12 -.L7F06DAE0: -/* 0A2610 7F06DAE0 3C018005 */ lui $at, %hi(D_80054BD8) -/* 0A2614 7F06DAE4 C42A4BD8 */ lwc1 $f10, %lo(D_80054BD8)($at) -/* 0A2618 7F06DAE8 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 -/* 0A261C 7F06DAEC 460A603C */ c.lt.s $f12, $f10 -/* 0A2620 7F06DAF0 00000000 */ nop -/* 0A2624 7F06DAF4 45020006 */ bc1fl .L7F06DB10 -/* 0A2628 7F06DAF8 44816000 */ mtc1 $at, $f12 -/* 0A262C 7F06DAFC 0FC16A78 */ jal sub_GAME_7F05A9E0 -/* 0A2630 7F06DB00 00000000 */ nop -/* 0A2634 7F06DB04 10000003 */ b .L7F06DB14 -/* 0A2638 7F06DB08 46000306 */ mov.s $f12, $f0 -/* 0A263C 7F06DB0C 44816000 */ mtc1 $at, $f12 -.L7F06DB10: -/* 0A2640 7F06DB10 00000000 */ nop -.L7F06DB14: -/* 0A2644 7F06DB14 0FC16293 */ jal matrix_column_3_scalar_multiply_2 -/* 0A2648 7F06DB18 8FA50028 */ lw $a1, 0x28($sp) -/* 0A264C 7F06DB1C 8FA400B0 */ lw $a0, 0xb0($sp) -/* 0A2650 7F06DB20 0FC16266 */ jal matrix_4x4_set_position -/* 0A2654 7F06DB24 8FA50028 */ lw $a1, 0x28($sp) -/* 0A2658 7F06DB28 8FAB00AC */ lw $t3, 0xac($sp) -/* 0A265C 7F06DB2C 8FAC005C */ lw $t4, 0x5c($sp) -/* 0A2660 7F06DB30 8FAD0058 */ lw $t5, 0x58($sp) -/* 0A2664 7F06DB34 11600005 */ beqz $t3, .L7F06DB4C -/* 0A2668 7F06DB38 01602025 */ move $a0, $t3 -/* 0A266C 7F06DB3C 000C5180 */ sll $t2, $t4, 6 -/* 0A2670 7F06DB40 014D3021 */ addu $a2, $t2, $t5 -/* 0A2674 7F06DB44 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0A2678 7F06DB48 8FA50028 */ lw $a1, 0x28($sp) -.L7F06DB4C: -/* 0A267C 7F06DB4C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F06DB50: -/* 0A2680 7F06DB50 27BD00B8 */ addiu $sp, $sp, 0xb8 -/* 0A2684 7F06DB54 03E00008 */ jr $ra -/* 0A2688 7F06DB58 00000000 */ nop -) -#endif +void sub_GAME_7F06DB5C(ModelRenderData *arg0, Model *arg1, ModelNode *arg2, quatf arg3) +{ + s32 spA4; + ModelRoData_GroupRecord *spA0; + Mtxf *sp9C; + s32 _gap98; + Mtxf sp58; + s32 sp54; + s32 sp50; + s32 sp4C; + RenderPosView *sp48; + s32 sp44; + s32 *new_var; + s32 sp40; + quatf sp2C; + Mtxf *sp28; + f32 sp24; + s32 _gap20; + s32 sp1C; + spA4 = arg2->Opcode; + spA0 = (ModelRoData_GroupRecord *)arg2->Data; + sp54 = spA0->MatrixID0; + sp50 = spA0->MatrixID1; + sp4C = spA0->MatrixID2; + new_var = &sp1C; + sp48 = arg1->render_pos; + sp1C = (s32)arg2->Parent; + if (*new_var != 0) { + sp9C = arg0->basemtx; + sp9C = modelFindNodeMtx(arg1, (ModelNode *)sp1C, 0); + } else { + sp9C = arg0->basemtx; + } -#ifdef NONMATCHING -void sub_GAME_7F06DB5C(void) { + if (sp9C != 0) { + quaternion_to_transform_matrix(&spA0->Origin, arg3, &sp58); + sp1C = (s32)&sp48[sp54]; + matrix_4x4_multiply_homogeneous(sp9C, &sp58, (Mtxf *)sp1C); + if (g_ModelJointPositionedFunc != NULL) { + ((void (*)(s32, s32, s32)) g_ModelJointPositionedFunc)(sp54, sp1C, sp1C); + } + } else { + quaternion_to_transform_matrix(&spA0->Origin, arg3, (Mtxf *)&sp48[sp54]); + } + if (spA4 & 0x100) { + quaternion_7F05BC68(arg3, 0.5f, sp2C); + if (sp9C != 0) { + quaternion_to_transform_matrix(&spA0->Origin, sp2C, &sp58); + matrix_4x4_multiply_homogeneous(sp9C, &sp58, (Mtxf *)&sp48[sp50]); + } else { + quaternion_to_transform_matrix(&spA0->Origin, sp2C, (Mtxf *)&sp48[sp50]); + } + } + + if (spA4 & 0x200) { + if (sp9C != 0) { + sp28 = &sp58; + } else { + sp28 = (Mtxf *)&sp48[sp4C]; + } + sp24 = 2.0f * acosf(*arg3); + if (sp24 < 3.1415927f) { + sp24 = sp24 * 0.5f; + } else { + sp24 = 6.2831855f - ((6.2831855f - sp24) * 0.5f); + } + matrix_4x4_set_rotation_around_y(sp24, sp28); + if (sp24 >= 3.1415927f) { + sp24 = 6.2831855f - sp24; + } + if (sp24 < 0.890118f) { + sp24 = modelGetBendStretchScale(sp24); + } else { + sp24 = 1.5f; + } + matrix_column_3_scalar_multiply_2(sp24, (f32 *)sp28); + matrix_4x4_set_position(&spA0->Origin, sp28); + if (sp9C != 0) { + matrix_4x4_multiply_homogeneous(sp9C, sp28, (Mtxf *)&sp48[sp4C]); + } + } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80054BDC -.word 0x40490fdb /*3.1415927*/ -glabel D_80054BE0 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054BE4 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054BE8 -.word 0x40490fdb /*3.1415927*/ -glabel D_80054BEC -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054BF0 -.word 0x3f63dec6 /*0.890118*/ -.text -glabel sub_GAME_7F06DB5C -/* 0A268C 7F06DB5C 27BDFF58 */ addiu $sp, $sp, -0xa8 -/* 0A2690 7F06DB60 AFBF0014 */ sw $ra, 0x14($sp) -/* 0A2694 7F06DB64 AFA500AC */ sw $a1, 0xac($sp) -/* 0A2698 7F06DB68 AFA700B4 */ sw $a3, 0xb4($sp) -/* 0A269C 7F06DB6C 94CE0000 */ lhu $t6, ($a2) -/* 0A26A0 7F06DB70 AFAE00A4 */ sw $t6, 0xa4($sp) -/* 0A26A4 7F06DB74 8CCF0004 */ lw $t7, 4($a2) -/* 0A26A8 7F06DB78 AFAF00A0 */ sw $t7, 0xa0($sp) -/* 0A26AC 7F06DB7C 85F9000E */ lh $t9, 0xe($t7) -/* 0A26B0 7F06DB80 AFB90054 */ sw $t9, 0x54($sp) -/* 0A26B4 7F06DB84 85E80010 */ lh $t0, 0x10($t7) -/* 0A26B8 7F06DB88 AFA80050 */ sw $t0, 0x50($sp) -/* 0A26BC 7F06DB8C 85E90012 */ lh $t1, 0x12($t7) -/* 0A26C0 7F06DB90 AFA9004C */ sw $t1, 0x4c($sp) -/* 0A26C4 7F06DB94 8CAB000C */ lw $t3, 0xc($a1) -/* 0A26C8 7F06DB98 AFAB0048 */ sw $t3, 0x48($sp) -/* 0A26CC 7F06DB9C 8CCC0008 */ lw $t4, 8($a2) -/* 0A26D0 7F06DBA0 00003025 */ move $a2, $zero -/* 0A26D4 7F06DBA4 11800006 */ beqz $t4, .L7F06DBC0 -/* 0A26D8 7F06DBA8 AFAC001C */ sw $t4, 0x1c($sp) -/* 0A26DC 7F06DBAC 00A02025 */ move $a0, $a1 -/* 0A26E0 7F06DBB0 0FC1B198 */ jal modelFindNodeMtx -/* 0A26E4 7F06DBB4 01802825 */ move $a1, $t4 -/* 0A26E8 7F06DBB8 10000003 */ b .L7F06DBC8 -/* 0A26EC 7F06DBBC AFA2009C */ sw $v0, 0x9c($sp) -.L7F06DBC0: -/* 0A26F0 7F06DBC0 8C8E0000 */ lw $t6, ($a0) -/* 0A26F4 7F06DBC4 AFAE009C */ sw $t6, 0x9c($sp) -.L7F06DBC8: -/* 0A26F8 7F06DBC8 8FAF009C */ lw $t7, 0x9c($sp) -/* 0A26FC 7F06DBCC 8FA90054 */ lw $t1, 0x54($sp) -/* 0A2700 7F06DBD0 8FA400A0 */ lw $a0, 0xa0($sp) -/* 0A2704 7F06DBD4 11E00017 */ beqz $t7, .L7F06DC34 -/* 0A2708 7F06DBD8 00095980 */ sll $t3, $t1, 6 -/* 0A270C 7F06DBDC 8FA400A0 */ lw $a0, 0xa0($sp) -/* 0A2710 7F06DBE0 8FA500B4 */ lw $a1, 0xb4($sp) -/* 0A2714 7F06DBE4 0FC16E6D */ jal quaternion_to_transform_matrix -/* 0A2718 7F06DBE8 27A60058 */ addiu $a2, $sp, 0x58 -/* 0A271C 7F06DBEC 8FB90054 */ lw $t9, 0x54($sp) -/* 0A2720 7F06DBF0 8FB80048 */ lw $t8, 0x48($sp) -/* 0A2724 7F06DBF4 8FA4009C */ lw $a0, 0x9c($sp) -/* 0A2728 7F06DBF8 00194180 */ sll $t0, $t9, 6 -/* 0A272C 7F06DBFC 01183021 */ addu $a2, $t0, $t8 -/* 0A2730 7F06DC00 AFA6001C */ sw $a2, 0x1c($sp) -/* 0A2734 7F06DC04 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0A2738 7F06DC08 27A50058 */ addiu $a1, $sp, 0x58 -/* 0A273C 7F06DC0C 3C028003 */ lui $v0, %hi(D_80036090) -/* 0A2740 7F06DC10 8C426090 */ lw $v0, %lo(D_80036090)($v0) -/* 0A2744 7F06DC14 8FA6001C */ lw $a2, 0x1c($sp) -/* 0A2748 7F06DC18 8FA40054 */ lw $a0, 0x54($sp) -/* 0A274C 7F06DC1C 5040000A */ beql $v0, $zero, .L7F06DC48 -/* 0A2750 7F06DC20 8FAA00A4 */ lw $t2, 0xa4($sp) -/* 0A2754 7F06DC24 0040F809 */ jalr $v0 -/* 0A2758 7F06DC28 00C02825 */ move $a1, $a2 -/* 0A275C 7F06DC2C 10000006 */ b .L7F06DC48 -/* 0A2760 7F06DC30 8FAA00A4 */ lw $t2, 0xa4($sp) -.L7F06DC34: -/* 0A2764 7F06DC34 8FAC0048 */ lw $t4, 0x48($sp) -/* 0A2768 7F06DC38 8FA500B4 */ lw $a1, 0xb4($sp) -/* 0A276C 7F06DC3C 0FC16E6D */ jal quaternion_to_transform_matrix -/* 0A2770 7F06DC40 016C3021 */ addu $a2, $t3, $t4 -/* 0A2774 7F06DC44 8FAA00A4 */ lw $t2, 0xa4($sp) -.L7F06DC48: -/* 0A2778 7F06DC48 8FA400B4 */ lw $a0, 0xb4($sp) -/* 0A277C 7F06DC4C 3C053F00 */ lui $a1, 0x3f00 -/* 0A2780 7F06DC50 314D0100 */ andi $t5, $t2, 0x100 -/* 0A2784 7F06DC54 51A00019 */ beql $t5, $zero, .L7F06DCBC -/* 0A2788 7F06DC58 8FAC00A4 */ lw $t4, 0xa4($sp) -/* 0A278C 7F06DC5C 0FC16F1A */ jal quaternion_7F05BC68 -/* 0A2790 7F06DC60 27A6002C */ addiu $a2, $sp, 0x2c -/* 0A2794 7F06DC64 8FAE009C */ lw $t6, 0x9c($sp) -/* 0A2798 7F06DC68 8FB80050 */ lw $t8, 0x50($sp) -/* 0A279C 7F06DC6C 27A5002C */ addiu $a1, $sp, 0x2c -/* 0A27A0 7F06DC70 11C0000D */ beqz $t6, .L7F06DCA8 -/* 0A27A4 7F06DC74 00184980 */ sll $t1, $t8, 6 -/* 0A27A8 7F06DC78 8FA400A0 */ lw $a0, 0xa0($sp) -/* 0A27AC 7F06DC7C 0FC16E6D */ jal quaternion_to_transform_matrix -/* 0A27B0 7F06DC80 27A60058 */ addiu $a2, $sp, 0x58 -/* 0A27B4 7F06DC84 8FAF0050 */ lw $t7, 0x50($sp) -/* 0A27B8 7F06DC88 8FA80048 */ lw $t0, 0x48($sp) -/* 0A27BC 7F06DC8C 8FA4009C */ lw $a0, 0x9c($sp) -/* 0A27C0 7F06DC90 000FC980 */ sll $t9, $t7, 6 -/* 0A27C4 7F06DC94 27A50058 */ addiu $a1, $sp, 0x58 -/* 0A27C8 7F06DC98 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0A27CC 7F06DC9C 03283021 */ addu $a2, $t9, $t0 -/* 0A27D0 7F06DCA0 10000006 */ b .L7F06DCBC -/* 0A27D4 7F06DCA4 8FAC00A4 */ lw $t4, 0xa4($sp) -.L7F06DCA8: -/* 0A27D8 7F06DCA8 8FAB0048 */ lw $t3, 0x48($sp) -/* 0A27DC 7F06DCAC 8FA400A0 */ lw $a0, 0xa0($sp) -/* 0A27E0 7F06DCB0 0FC16E6D */ jal quaternion_to_transform_matrix -/* 0A27E4 7F06DCB4 012B3021 */ addu $a2, $t1, $t3 -/* 0A27E8 7F06DCB8 8FAC00A4 */ lw $t4, 0xa4($sp) -.L7F06DCBC: -/* 0A27EC 7F06DCBC 8FAD009C */ lw $t5, 0x9c($sp) -/* 0A27F0 7F06DCC0 318A0200 */ andi $t2, $t4, 0x200 -/* 0A27F4 7F06DCC4 5140004C */ beql $t2, $zero, .L7F06DDF8 -/* 0A27F8 7F06DCC8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0A27FC 7F06DCCC 11A00004 */ beqz $t5, .L7F06DCE0 -/* 0A2800 7F06DCD0 8FAF004C */ lw $t7, 0x4c($sp) -/* 0A2804 7F06DCD4 27AE0058 */ addiu $t6, $sp, 0x58 -/* 0A2808 7F06DCD8 10000005 */ b .L7F06DCF0 -/* 0A280C 7F06DCDC AFAE0028 */ sw $t6, 0x28($sp) -.L7F06DCE0: -/* 0A2810 7F06DCE0 8FA80048 */ lw $t0, 0x48($sp) -/* 0A2814 7F06DCE4 000FC980 */ sll $t9, $t7, 6 -/* 0A2818 7F06DCE8 0328C021 */ addu $t8, $t9, $t0 -/* 0A281C 7F06DCEC AFB80028 */ sw $t8, 0x28($sp) -.L7F06DCF0: -/* 0A2820 7F06DCF0 8FA900B4 */ lw $t1, 0xb4($sp) -/* 0A2824 7F06DCF4 0FC16B2C */ jal acosf -/* 0A2828 7F06DCF8 C52C0000 */ lwc1 $f12, ($t1) -/* 0A282C 7F06DCFC 46000080 */ add.s $f2, $f0, $f0 -/* 0A2830 7F06DD00 3C018005 */ lui $at, %hi(D_80054BDC) -/* 0A2834 7F06DD04 C4244BDC */ lwc1 $f4, %lo(D_80054BDC)($at) -/* 0A2838 7F06DD08 3C018005 */ lui $at, %hi(D_80054BE0) -/* 0A283C 7F06DD0C 8FA50028 */ lw $a1, 0x28($sp) -/* 0A2840 7F06DD10 4604103C */ c.lt.s $f2, $f4 -/* 0A2844 7F06DD14 00000000 */ nop -/* 0A2848 7F06DD18 45000007 */ bc1f .L7F06DD38 -/* 0A284C 7F06DD1C 00000000 */ nop -/* 0A2850 7F06DD20 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0A2854 7F06DD24 44813000 */ mtc1 $at, $f6 -/* 0A2858 7F06DD28 00000000 */ nop -/* 0A285C 7F06DD2C 46061302 */ mul.s $f12, $f2, $f6 -/* 0A2860 7F06DD30 10000009 */ b .L7F06DD58 -/* 0A2864 7F06DD34 00000000 */ nop -.L7F06DD38: -/* 0A2868 7F06DD38 C4284BE0 */ lwc1 $f8, %lo(D_80054BE0)($at) -/* 0A286C 7F06DD3C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0A2870 7F06DD40 44818000 */ mtc1 $at, $f16 -/* 0A2874 7F06DD44 46024281 */ sub.s $f10, $f8, $f2 -/* 0A2878 7F06DD48 3C018005 */ lui $at, %hi(D_80054BE4) -/* 0A287C 7F06DD4C C4244BE4 */ lwc1 $f4, %lo(D_80054BE4)($at) -/* 0A2880 7F06DD50 46105482 */ mul.s $f18, $f10, $f16 -/* 0A2884 7F06DD54 46122301 */ sub.s $f12, $f4, $f18 -.L7F06DD58: -/* 0A2888 7F06DD58 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 0A288C 7F06DD5C E7AC0024 */ swc1 $f12, 0x24($sp) -/* 0A2890 7F06DD60 3C018005 */ lui $at, %hi(D_80054BE8) -/* 0A2894 7F06DD64 C7AC0024 */ lwc1 $f12, 0x24($sp) -/* 0A2898 7F06DD68 C4264BE8 */ lwc1 $f6, %lo(D_80054BE8)($at) -/* 0A289C 7F06DD6C 3C018005 */ lui $at, %hi(D_80054BEC) -/* 0A28A0 7F06DD70 460C303E */ c.le.s $f6, $f12 -/* 0A28A4 7F06DD74 00000000 */ nop -/* 0A28A8 7F06DD78 45000003 */ bc1f .L7F06DD88 -/* 0A28AC 7F06DD7C 00000000 */ nop -/* 0A28B0 7F06DD80 C4284BEC */ lwc1 $f8, %lo(D_80054BEC)($at) -/* 0A28B4 7F06DD84 460C4301 */ sub.s $f12, $f8, $f12 -.L7F06DD88: -/* 0A28B8 7F06DD88 3C018005 */ lui $at, %hi(D_80054BF0) -/* 0A28BC 7F06DD8C C42A4BF0 */ lwc1 $f10, %lo(D_80054BF0)($at) -/* 0A28C0 7F06DD90 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 -/* 0A28C4 7F06DD94 460A603C */ c.lt.s $f12, $f10 -/* 0A28C8 7F06DD98 00000000 */ nop -/* 0A28CC 7F06DD9C 45020006 */ bc1fl .L7F06DDB8 -/* 0A28D0 7F06DDA0 44816000 */ mtc1 $at, $f12 -/* 0A28D4 7F06DDA4 0FC16A78 */ jal sub_GAME_7F05A9E0 -/* 0A28D8 7F06DDA8 00000000 */ nop -/* 0A28DC 7F06DDAC 10000003 */ b .L7F06DDBC -/* 0A28E0 7F06DDB0 46000306 */ mov.s $f12, $f0 -/* 0A28E4 7F06DDB4 44816000 */ mtc1 $at, $f12 -.L7F06DDB8: -/* 0A28E8 7F06DDB8 00000000 */ nop -.L7F06DDBC: -/* 0A28EC 7F06DDBC 0FC16293 */ jal matrix_column_3_scalar_multiply_2 -/* 0A28F0 7F06DDC0 8FA50028 */ lw $a1, 0x28($sp) -/* 0A28F4 7F06DDC4 8FA400A0 */ lw $a0, 0xa0($sp) -/* 0A28F8 7F06DDC8 0FC16266 */ jal matrix_4x4_set_position -/* 0A28FC 7F06DDCC 8FA50028 */ lw $a1, 0x28($sp) -/* 0A2900 7F06DDD0 8FAB009C */ lw $t3, 0x9c($sp) -/* 0A2904 7F06DDD4 8FAC004C */ lw $t4, 0x4c($sp) -/* 0A2908 7F06DDD8 8FAD0048 */ lw $t5, 0x48($sp) -/* 0A290C 7F06DDDC 11600005 */ beqz $t3, .L7F06DDF4 -/* 0A2910 7F06DDE0 01602025 */ move $a0, $t3 -/* 0A2914 7F06DDE4 000C5180 */ sll $t2, $t4, 6 -/* 0A2918 7F06DDE8 014D3021 */ addu $a2, $t2, $t5 -/* 0A291C 7F06DDEC 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0A2920 7F06DDF0 8FA50028 */ lw $a1, 0x28($sp) -.L7F06DDF4: -/* 0A2924 7F06DDF4 8FBF0014 */ lw $ra, 0x14($sp) -.L7F06DDF8: -/* 0A2928 7F06DDF8 27BD00A8 */ addiu $sp, $sp, 0xa8 -/* 0A292C 7F06DDFC 03E00008 */ jr $ra -/* 0A2930 7F06DE00 00000000 */ nop -) -#endif +/** + * Address: 7F06DE04 + */ +u32 modelAnimReadBitsAsU16Angle(u8 *bitstream, u8 width, u32 bitOffset) +{ + u32 value = 0; + u32 mask; + u8 numbitsthisbyte; + u8 remainingbits; + remainingbits = width; + value *= bitOffset / 8; + if(1); -#ifdef NONMATCHING -void sub_GAME_7F06DE04(void) { + remainingbits = width; + bitstream += bitOffset / 8; + bitOffset %= 8; + numbitsthisbyte = 8 - bitOffset; + while (remainingbits >= numbitsthisbyte) + { + remainingbits -= numbitsthisbyte; + mask = (1 << numbitsthisbyte) - 1; + value |= ((u16)((*bitstream) & mask)) << remainingbits; + value &= 0xffff; + bitstream++; + numbitsthisbyte = 8; + } + + if (remainingbits > 0) + { + mask = (1 << remainingbits) - 1; + value |= ((*bitstream) >> (numbitsthisbyte - remainingbits)) & mask; + value &= 0xffff; + } + + value <<= 16 - width; + + return value & 0xffff; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F06DE04 -/* 0A2934 7F06DE04 30CF0007 */ andi $t7, $a2, 7 -/* 0A2938 7F06DE08 24180008 */ li $t8, 8 -/* 0A293C 7F06DE0C 030F4823 */ subu $t1, $t8, $t7 -/* 0A2940 7F06DE10 30AA00FF */ andi $t2, $a1, 0xff -/* 0A2944 7F06DE14 313900FF */ andi $t9, $t1, 0xff -/* 0A2948 7F06DE18 000638C2 */ srl $a3, $a2, 3 -/* 0A294C 7F06DE1C 0159082A */ slt $at, $t2, $t9 -/* 0A2950 7F06DE20 AFA50004 */ sw $a1, 4($sp) -/* 0A2954 7F06DE24 00001825 */ move $v1, $zero -/* 0A2958 7F06DE28 314200FF */ andi $v0, $t2, 0xff -/* 0A295C 7F06DE2C 00872021 */ addu $a0, $a0, $a3 -/* 0A2960 7F06DE30 14200013 */ bnez $at, .L7F06DE80 -/* 0A2964 7F06DE34 312800FF */ andi $t0, $t1, 0xff -/* 0A2968 7F06DE38 00402825 */ move $a1, $v0 -.L7F06DE3C: -/* 0A296C 7F06DE3C 908C0000 */ lbu $t4, ($a0) -/* 0A2970 7F06DE40 240D0001 */ li $t5, 1 -/* 0A2974 7F06DE44 010D7004 */ sllv $t6, $t5, $t0 -/* 0A2978 7F06DE48 25CFFFFF */ addiu $t7, $t6, -1 -/* 0A297C 7F06DE4C 00A81023 */ subu $v0, $a1, $t0 -/* 0A2980 7F06DE50 018FC024 */ and $t8, $t4, $t7 -/* 0A2984 7F06DE54 304500FF */ andi $a1, $v0, 0xff -/* 0A2988 7F06DE58 3319FFFF */ andi $t9, $t8, 0xffff -/* 0A298C 7F06DE5C 00B95804 */ sllv $t3, $t9, $a1 -/* 0A2990 7F06DE60 006B1825 */ or $v1, $v1, $t3 -/* 0A2994 7F06DE64 306DFFFF */ andi $t5, $v1, 0xffff -/* 0A2998 7F06DE68 28A10008 */ slti $at, $a1, 8 -/* 0A299C 7F06DE6C 00A01025 */ move $v0, $a1 -/* 0A29A0 7F06DE70 01A01825 */ move $v1, $t5 -/* 0A29A4 7F06DE74 24840001 */ addiu $a0, $a0, 1 -/* 0A29A8 7F06DE78 1020FFF0 */ beqz $at, .L7F06DE3C -/* 0A29AC 7F06DE7C 24080008 */ li $t0, 8 -.L7F06DE80: -/* 0A29B0 7F06DE80 1840000A */ blez $v0, .L7F06DEAC -/* 0A29B4 7F06DE84 01026023 */ subu $t4, $t0, $v0 -/* 0A29B8 7F06DE88 908E0000 */ lbu $t6, ($a0) -/* 0A29BC 7F06DE8C 24180001 */ li $t8, 1 -/* 0A29C0 7F06DE90 0058C804 */ sllv $t9, $t8, $v0 -/* 0A29C4 7F06DE94 272BFFFF */ addiu $t3, $t9, -1 -/* 0A29C8 7F06DE98 018E7807 */ srav $t7, $t6, $t4 -/* 0A29CC 7F06DE9C 01EB6824 */ and $t5, $t7, $t3 -/* 0A29D0 7F06DEA0 006D1825 */ or $v1, $v1, $t5 -/* 0A29D4 7F06DEA4 306EFFFF */ andi $t6, $v1, 0xffff -/* 0A29D8 7F06DEA8 01C01825 */ move $v1, $t6 -.L7F06DEAC: -/* 0A29DC 7F06DEAC 240C0010 */ li $t4, 16 -/* 0A29E0 7F06DEB0 018AC023 */ subu $t8, $t4, $t2 -/* 0A29E4 7F06DEB4 03031804 */ sllv $v1, $v1, $t8 -/* 0A29E8 7F06DEB8 03E00008 */ jr $ra -/* 0A29EC 7F06DEBC 3062FFFF */ andi $v0, $v1, 0xffff -) -#endif +/** + * Address: 7F06DEC0 + */ +void sub_GAME_7F06DEC0(s32 jointnum, s32 flip, ModelSkeleton *skeleton, ModelAnimation *anim, u8 *bitstream, coord3d *rot) +{ + u32 bitoffset; + u8 width; + u16 rotation[3]; + width = anim->unk06; + // Mirrored joint rotation? + if (flip) + { + bitoffset = skeleton->Joints[jointnum].mtxB * width; + } + else + { + bitoffset = skeleton->Joints[jointnum].mtxA * width; + } -#ifdef NONMATCHING -void sub_GAME_7F06DEC0(void) { + width = anim->unk06; + rotation[0] = modelAnimReadBitsAsU16Angle(bitstream, width, bitoffset); + bitoffset += (unsigned long) width; + + rotation[1] = modelAnimReadBitsAsU16Angle(bitstream, width, bitoffset); + bitoffset += width; + + rotation[2] = modelAnimReadBitsAsU16Angle(bitstream, width, bitoffset); + + rot->x = (rotation[0] * M_TAU_F) / M_U16_MAX_VALUE_F; + + if (flip) + { + if (rotation[1] != 0) + { + rot->y = ((0x10000 - rotation[1]) * M_TAU_F) / M_U16_MAX_VALUE_F; + } + else + { + rot->y = 0.0f; + } + + if (rotation[2] != 0) + { + rot->z = ((0x10000 - rotation[2]) * M_TAU_F) / M_U16_MAX_VALUE_F; + } + else + { + rot->z = 0.0f; + } + } + else + { + rot->y = (rotation[1] * M_TAU_F) / M_U16_MAX_VALUE_F; + rot->z = (rotation[2] * M_TAU_F) / M_U16_MAX_VALUE_F; + } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80054BF4 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F06DEC0 -/* 0A29F0 7F06DEC0 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0A29F4 7F06DEC4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0A29F8 7F06DEC8 AFB00018 */ sw $s0, 0x18($sp) -/* 0A29FC 7F06DECC AFA50034 */ sw $a1, 0x34($sp) -/* 0A2A00 7F06DED0 AFA60038 */ sw $a2, 0x38($sp) -/* 0A2A04 7F06DED4 10A0000B */ beqz $a1, .L7F06DF04 -/* 0A2A08 7F06DED8 90F00006 */ lbu $s0, 6($a3) -/* 0A2A0C 7F06DEDC 8CD80004 */ lw $t8, 4($a2) -/* 0A2A10 7F06DEE0 0004C880 */ sll $t9, $a0, 2 -/* 0A2A14 7F06DEE4 0324C823 */ subu $t9, $t9, $a0 -/* 0A2A18 7F06DEE8 0019C840 */ sll $t9, $t9, 1 -/* 0A2A1C 7F06DEEC 03194021 */ addu $t0, $t8, $t9 -/* 0A2A20 7F06DEF0 95090004 */ lhu $t1, 4($t0) -/* 0A2A24 7F06DEF4 01300019 */ multu $t1, $s0 -/* 0A2A28 7F06DEF8 00003012 */ mflo $a2 -/* 0A2A2C 7F06DEFC 1000000D */ b .L7F06DF34 -/* 0A2A30 7F06DF00 8FA40040 */ lw $a0, 0x40($sp) -.L7F06DF04: -/* 0A2A34 7F06DF04 8FAA0038 */ lw $t2, 0x38($sp) -/* 0A2A38 7F06DF08 00046080 */ sll $t4, $a0, 2 -/* 0A2A3C 7F06DF0C 01846023 */ subu $t4, $t4, $a0 -/* 0A2A40 7F06DF10 8D4B0004 */ lw $t3, 4($t2) -/* 0A2A44 7F06DF14 000C6040 */ sll $t4, $t4, 1 -/* 0A2A48 7F06DF18 016C6821 */ addu $t5, $t3, $t4 -/* 0A2A4C 7F06DF1C 95AE0002 */ lhu $t6, 2($t5) -/* 0A2A50 7F06DF20 01D00019 */ multu $t6, $s0 -/* 0A2A54 7F06DF24 00003012 */ mflo $a2 -/* 0A2A58 7F06DF28 00000000 */ nop -/* 0A2A5C 7F06DF2C 00000000 */ nop -/* 0A2A60 7F06DF30 8FA40040 */ lw $a0, 0x40($sp) -.L7F06DF34: -/* 0A2A64 7F06DF34 320500FF */ andi $a1, $s0, 0xff -/* 0A2A68 7F06DF38 0FC1B781 */ jal sub_GAME_7F06DE04 -/* 0A2A6C 7F06DF3C AFA6002C */ sw $a2, 0x2c($sp) -/* 0A2A70 7F06DF40 8FA6002C */ lw $a2, 0x2c($sp) -/* 0A2A74 7F06DF44 A7A20024 */ sh $v0, 0x24($sp) -/* 0A2A78 7F06DF48 8FA40040 */ lw $a0, 0x40($sp) -/* 0A2A7C 7F06DF4C 00D03021 */ addu $a2, $a2, $s0 -/* 0A2A80 7F06DF50 AFA6002C */ sw $a2, 0x2c($sp) -/* 0A2A84 7F06DF54 0FC1B781 */ jal sub_GAME_7F06DE04 -/* 0A2A88 7F06DF58 320500FF */ andi $a1, $s0, 0xff -/* 0A2A8C 7F06DF5C 8FA6002C */ lw $a2, 0x2c($sp) -/* 0A2A90 7F06DF60 A7A20026 */ sh $v0, 0x26($sp) -/* 0A2A94 7F06DF64 8FA40040 */ lw $a0, 0x40($sp) -/* 0A2A98 7F06DF68 320500FF */ andi $a1, $s0, 0xff -/* 0A2A9C 7F06DF6C 0FC1B781 */ jal sub_GAME_7F06DE04 -/* 0A2AA0 7F06DF70 00D03021 */ addu $a2, $a2, $s0 -/* 0A2AA4 7F06DF74 97AF0024 */ lhu $t7, 0x24($sp) -/* 0A2AA8 7F06DF78 3C018005 */ lui $at, %hi(D_80054BF4) -/* 0A2AAC 7F06DF7C C4204BF4 */ lwc1 $f0, %lo(D_80054BF4)($at) -/* 0A2AB0 7F06DF80 448F2000 */ mtc1 $t7, $f4 -/* 0A2AB4 7F06DF84 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0A2AB8 7F06DF88 44811000 */ mtc1 $at, $f2 -/* 0A2ABC 7F06DF8C 8FA30044 */ lw $v1, 0x44($sp) -/* 0A2AC0 7F06DF90 A7A20028 */ sh $v0, 0x28($sp) -/* 0A2AC4 7F06DF94 05E10005 */ bgez $t7, .L7F06DFAC -/* 0A2AC8 7F06DF98 468021A0 */ cvt.s.w $f6, $f4 -/* 0A2ACC 7F06DF9C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0A2AD0 7F06DFA0 44814000 */ mtc1 $at, $f8 -/* 0A2AD4 7F06DFA4 00000000 */ nop -/* 0A2AD8 7F06DFA8 46083180 */ add.s $f6, $f6, $f8 -.L7F06DFAC: -/* 0A2ADC 7F06DFAC 46003282 */ mul.s $f10, $f6, $f0 -/* 0A2AE0 7F06DFB0 46025403 */ div.s $f16, $f10, $f2 -/* 0A2AE4 7F06DFB4 E4700000 */ swc1 $f16, ($v1) -/* 0A2AE8 7F06DFB8 8FB80034 */ lw $t8, 0x34($sp) -/* 0A2AEC 7F06DFBC 97A20026 */ lhu $v0, 0x26($sp) -/* 0A2AF0 7F06DFC0 97AB0026 */ lhu $t3, 0x26($sp) -/* 0A2AF4 7F06DFC4 5300001D */ beql $t8, $zero, .L7F06E03C -/* 0A2AF8 7F06DFC8 448B5000 */ mtc1 $t3, $f10 -/* 0A2AFC 7F06DFCC 10400009 */ beqz $v0, .L7F06DFF4 -/* 0A2B00 7F06DFD0 3C190001 */ lui $t9, 1 -/* 0A2B04 7F06DFD4 03224023 */ subu $t0, $t9, $v0 -/* 0A2B08 7F06DFD8 44889000 */ mtc1 $t0, $f18 -/* 0A2B0C 7F06DFDC 00000000 */ nop -/* 0A2B10 7F06DFE0 46809120 */ cvt.s.w $f4, $f18 -/* 0A2B14 7F06DFE4 46002202 */ mul.s $f8, $f4, $f0 -/* 0A2B18 7F06DFE8 46024183 */ div.s $f6, $f8, $f2 -/* 0A2B1C 7F06DFEC 10000004 */ b .L7F06E000 -/* 0A2B20 7F06DFF0 E4660004 */ swc1 $f6, 4($v1) -.L7F06DFF4: -/* 0A2B24 7F06DFF4 44805000 */ mtc1 $zero, $f10 -/* 0A2B28 7F06DFF8 00000000 */ nop -/* 0A2B2C 7F06DFFC E46A0004 */ swc1 $f10, 4($v1) -.L7F06E000: -/* 0A2B30 7F06E000 97A20028 */ lhu $v0, 0x28($sp) -/* 0A2B34 7F06E004 3C090001 */ lui $t1, 1 -/* 0A2B38 7F06E008 10400008 */ beqz $v0, .L7F06E02C -/* 0A2B3C 7F06E00C 01225023 */ subu $t2, $t1, $v0 -/* 0A2B40 7F06E010 448A8000 */ mtc1 $t2, $f16 -/* 0A2B44 7F06E014 00000000 */ nop -/* 0A2B48 7F06E018 468084A0 */ cvt.s.w $f18, $f16 -/* 0A2B4C 7F06E01C 46009102 */ mul.s $f4, $f18, $f0 -/* 0A2B50 7F06E020 46022203 */ div.s $f8, $f4, $f2 -/* 0A2B54 7F06E024 10000019 */ b .L7F06E08C -/* 0A2B58 7F06E028 E4680008 */ swc1 $f8, 8($v1) -.L7F06E02C: -/* 0A2B5C 7F06E02C 44803000 */ mtc1 $zero, $f6 -/* 0A2B60 7F06E030 10000016 */ b .L7F06E08C -/* 0A2B64 7F06E034 E4660008 */ swc1 $f6, 8($v1) -/* 0A2B68 7F06E038 448B5000 */ mtc1 $t3, $f10 -.L7F06E03C: -/* 0A2B6C 7F06E03C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0A2B70 7F06E040 05610004 */ bgez $t3, .L7F06E054 -/* 0A2B74 7F06E044 46805420 */ cvt.s.w $f16, $f10 -/* 0A2B78 7F06E048 44819000 */ mtc1 $at, $f18 -/* 0A2B7C 7F06E04C 00000000 */ nop -/* 0A2B80 7F06E050 46128400 */ add.s $f16, $f16, $f18 -.L7F06E054: -/* 0A2B84 7F06E054 46008102 */ mul.s $f4, $f16, $f0 -/* 0A2B88 7F06E058 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0A2B8C 7F06E05C 46022203 */ div.s $f8, $f4, $f2 -/* 0A2B90 7F06E060 E4680004 */ swc1 $f8, 4($v1) -/* 0A2B94 7F06E064 97AC0028 */ lhu $t4, 0x28($sp) -/* 0A2B98 7F06E068 448C3000 */ mtc1 $t4, $f6 -/* 0A2B9C 7F06E06C 05810004 */ bgez $t4, .L7F06E080 -/* 0A2BA0 7F06E070 468032A0 */ cvt.s.w $f10, $f6 -/* 0A2BA4 7F06E074 44819000 */ mtc1 $at, $f18 -/* 0A2BA8 7F06E078 00000000 */ nop -/* 0A2BAC 7F06E07C 46125280 */ add.s $f10, $f10, $f18 -.L7F06E080: -/* 0A2BB0 7F06E080 46005402 */ mul.s $f16, $f10, $f0 -/* 0A2BB4 7F06E084 46028103 */ div.s $f4, $f16, $f2 -/* 0A2BB8 7F06E088 E4640008 */ swc1 $f4, 8($v1) -.L7F06E08C: -/* 0A2BBC 7F06E08C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0A2BC0 7F06E090 8FB00018 */ lw $s0, 0x18($sp) -/* 0A2BC4 7F06E094 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0A2BC8 7F06E098 03E00008 */ jr $ra -/* 0A2BCC 7F06E09C 00000000 */ nop -) -#endif +void process_02_position(ModelRenderData *arg0, Model *model, ModelNode *node) +{ + union + { + s32 v; + long long int force_structure_alignment; + } jointnum; + ModelSkeleton *skeleton; + coord3d rot1; + coord3d rot2; + coord3d rot3; + quatf q1; + quatf q2; + quatf result; + coord3d rot4; + ModelRoData_GroupRecord *group; + group = &node->Data->Group; + jointnum.v = group->JointID; + skeleton = model->obj->Skeleton; -#ifdef NONMATCHING -void process_02_position(ModelRenderData *arg0, Model *model, ModelNode *node) { + rot1 = D_80036094; + + sub_GAME_7F06DEC0(jointnum.v, model->gunhand, skeleton, model->anim, model->unk34, &rot1); + if (model->unk2c != 0.0f) + { + rot2 = D_800360A0; + sub_GAME_7F06DEC0(jointnum.v, model->gunhand, skeleton, model->anim, model->unk38, &rot2); + sub_GAME_7F06D160(&rot1, &rot2, model->unk2c); + } + + if (model->unk84 != 0.0f) + { + rot3 = D_800360AC; + sub_GAME_7F06DEC0(jointnum.v, model->unk25, skeleton, model->anim2, model->unk64, &rot3); + + if (model->unk5c != 0.0f) + { + rot4 = D_800360B8; + sub_GAME_7F06DEC0(jointnum.v, model->unk25, skeleton, model->anim2, model->unk68, &rot4); + sub_GAME_7F06D160(&rot3, &rot4, model->unk5c); + } + + quaternion_set_rotation_around_xyzf(&rot1, q1); + quaternion_set_rotation_around_xyzf(&rot3, q2); + quaternion_ensure_shortest_path(q1, q2); + quaternion_slerp(q1, q2, model->unk84, result); + sub_GAME_7F06DB5C(arg0, model, node, result); + } + else + { + modelBuildGroupMatrices(arg0, model, node, &rot1); + } } -#else -GLOBAL_ASM( -.text -glabel process_02_position -/* 0A2BD0 7F06E0A0 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 0A2BD4 7F06E0A4 AFBF0024 */ sw $ra, 0x24($sp) -/* 0A2BD8 7F06E0A8 AFB00020 */ sw $s0, 0x20($sp) -/* 0A2BDC 7F06E0AC AFA40098 */ sw $a0, 0x98($sp) -/* 0A2BE0 7F06E0B0 AFA600A0 */ sw $a2, 0xa0($sp) -/* 0A2BE4 7F06E0B4 3C188003 */ lui $t8, %hi(D_80036094) -/* 0A2BE8 7F06E0B8 8CC20004 */ lw $v0, 4($a2) -/* 0A2BEC 7F06E0BC 8CAF0008 */ lw $t7, 8($a1) -/* 0A2BF0 7F06E0C0 27186094 */ addiu $t8, %lo(D_80036094) # addiu $t8, $t8, 0x6094 -/* 0A2BF4 7F06E0C4 8F010000 */ lw $at, ($t8) -/* 0A2BF8 7F06E0C8 9444000C */ lhu $a0, 0xc($v0) -/* 0A2BFC 7F06E0CC 8DE60004 */ lw $a2, 4($t7) -/* 0A2C00 7F06E0D0 27A30080 */ addiu $v1, $sp, 0x80 -/* 0A2C04 7F06E0D4 AC610000 */ sw $at, ($v1) -/* 0A2C08 7F06E0D8 8F090004 */ lw $t1, 4($t8) -/* 0A2C0C 7F06E0DC 00A08025 */ move $s0, $a1 -/* 0A2C10 7F06E0E0 AC690004 */ sw $t1, 4($v1) -/* 0A2C14 7F06E0E4 8F010008 */ lw $at, 8($t8) -/* 0A2C18 7F06E0E8 AC610008 */ sw $at, 8($v1) -/* 0A2C1C 7F06E0EC 8E0A0034 */ lw $t2, 0x34($s0) -/* 0A2C20 7F06E0F0 8E070020 */ lw $a3, 0x20($s0) -/* 0A2C24 7F06E0F4 80A50024 */ lb $a1, 0x24($a1) -/* 0A2C28 7F06E0F8 AFA30014 */ sw $v1, 0x14($sp) -/* 0A2C2C 7F06E0FC AFA40090 */ sw $a0, 0x90($sp) -/* 0A2C30 7F06E100 AFA6008C */ sw $a2, 0x8c($sp) -/* 0A2C34 7F06E104 0FC1B7B0 */ jal sub_GAME_7F06DEC0 -/* 0A2C38 7F06E108 AFAA0010 */ sw $t2, 0x10($sp) -/* 0A2C3C 7F06E10C 44802000 */ mtc1 $zero, $f4 -/* 0A2C40 7F06E110 C606002C */ lwc1 $f6, 0x2c($s0) -/* 0A2C44 7F06E114 3C0B8003 */ lui $t3, %hi(D_800360A0) -/* 0A2C48 7F06E118 256B60A0 */ addiu $t3, %lo(D_800360A0) # addiu $t3, $t3, 0x60a0 -/* 0A2C4C 7F06E11C 46062032 */ c.eq.s $f4, $f6 -/* 0A2C50 7F06E120 00000000 */ nop -/* 0A2C54 7F06E124 45030015 */ bc1tl .L7F06E17C -/* 0A2C58 7F06E128 44804000 */ mtc1 $zero, $f8 -/* 0A2C5C 7F06E12C 8D610000 */ lw $at, ($t3) -/* 0A2C60 7F06E130 27A20074 */ addiu $v0, $sp, 0x74 -/* 0A2C64 7F06E134 AC410000 */ sw $at, ($v0) -/* 0A2C68 7F06E138 8D6D0004 */ lw $t5, 4($t3) -/* 0A2C6C 7F06E13C AC4D0004 */ sw $t5, 4($v0) -/* 0A2C70 7F06E140 8D610008 */ lw $at, 8($t3) -/* 0A2C74 7F06E144 AC410008 */ sw $at, 8($v0) -/* 0A2C78 7F06E148 8E0E0038 */ lw $t6, 0x38($s0) -/* 0A2C7C 7F06E14C 8E070020 */ lw $a3, 0x20($s0) -/* 0A2C80 7F06E150 82050024 */ lb $a1, 0x24($s0) -/* 0A2C84 7F06E154 AFA20014 */ sw $v0, 0x14($sp) -/* 0A2C88 7F06E158 8FA6008C */ lw $a2, 0x8c($sp) -/* 0A2C8C 7F06E15C 8FA40090 */ lw $a0, 0x90($sp) -/* 0A2C90 7F06E160 0FC1B7B0 */ jal sub_GAME_7F06DEC0 -/* 0A2C94 7F06E164 AFAE0010 */ sw $t6, 0x10($sp) -/* 0A2C98 7F06E168 27A40080 */ addiu $a0, $sp, 0x80 -/* 0A2C9C 7F06E16C 27A50074 */ addiu $a1, $sp, 0x74 -/* 0A2CA0 7F06E170 0FC1B458 */ jal sub_GAME_7F06D160 -/* 0A2CA4 7F06E174 8E06002C */ lw $a2, 0x2c($s0) -/* 0A2CA8 7F06E178 44804000 */ mtc1 $zero, $f8 -.L7F06E17C: -/* 0A2CAC 7F06E17C C60A0084 */ lwc1 $f10, 0x84($s0) -/* 0A2CB0 7F06E180 3C0F8003 */ lui $t7, %hi(D_800360AC) -/* 0A2CB4 7F06E184 25EF60AC */ addiu $t7, %lo(D_800360AC) # addiu $t7, $t7, 0x60ac -/* 0A2CB8 7F06E188 460A4032 */ c.eq.s $f8, $f10 -/* 0A2CBC 7F06E18C 8FA40098 */ lw $a0, 0x98($sp) -/* 0A2CC0 7F06E190 02002825 */ move $a1, $s0 -/* 0A2CC4 7F06E194 8FA600A0 */ lw $a2, 0xa0($sp) -/* 0A2CC8 7F06E198 45010040 */ bc1t .L7F06E29C -/* 0A2CCC 7F06E19C 00000000 */ nop -/* 0A2CD0 7F06E1A0 8DE10000 */ lw $at, ($t7) -/* 0A2CD4 7F06E1A4 27A20068 */ addiu $v0, $sp, 0x68 -/* 0A2CD8 7F06E1A8 AC410000 */ sw $at, ($v0) -/* 0A2CDC 7F06E1AC 8DF90004 */ lw $t9, 4($t7) -/* 0A2CE0 7F06E1B0 AC590004 */ sw $t9, 4($v0) -/* 0A2CE4 7F06E1B4 8DE10008 */ lw $at, 8($t7) -/* 0A2CE8 7F06E1B8 AC410008 */ sw $at, 8($v0) -/* 0A2CEC 7F06E1BC 8E180064 */ lw $t8, 0x64($s0) -/* 0A2CF0 7F06E1C0 8E070054 */ lw $a3, 0x54($s0) -/* 0A2CF4 7F06E1C4 82050025 */ lb $a1, 0x25($s0) -/* 0A2CF8 7F06E1C8 AFA20014 */ sw $v0, 0x14($sp) -/* 0A2CFC 7F06E1CC 8FA6008C */ lw $a2, 0x8c($sp) -/* 0A2D00 7F06E1D0 8FA40090 */ lw $a0, 0x90($sp) -/* 0A2D04 7F06E1D4 0FC1B7B0 */ jal sub_GAME_7F06DEC0 -/* 0A2D08 7F06E1D8 AFB80010 */ sw $t8, 0x10($sp) -/* 0A2D0C 7F06E1DC 44808000 */ mtc1 $zero, $f16 -/* 0A2D10 7F06E1E0 C612005C */ lwc1 $f18, 0x5c($s0) -/* 0A2D14 7F06E1E4 3C098003 */ lui $t1, %hi(D_800360B8) -/* 0A2D18 7F06E1E8 252960B8 */ addiu $t1, %lo(D_800360B8) # addiu $t1, $t1, 0x60b8 -/* 0A2D1C 7F06E1EC 46128032 */ c.eq.s $f16, $f18 -/* 0A2D20 7F06E1F0 00000000 */ nop -/* 0A2D24 7F06E1F4 45030015 */ bc1tl .L7F06E24C -/* 0A2D28 7F06E1F8 27A40080 */ addiu $a0, $sp, 0x80 -/* 0A2D2C 7F06E1FC 8D210000 */ lw $at, ($t1) -/* 0A2D30 7F06E200 27A2002C */ addiu $v0, $sp, 0x2c -/* 0A2D34 7F06E204 AC410000 */ sw $at, ($v0) -/* 0A2D38 7F06E208 8D2C0004 */ lw $t4, 4($t1) -/* 0A2D3C 7F06E20C AC4C0004 */ sw $t4, 4($v0) -/* 0A2D40 7F06E210 8D210008 */ lw $at, 8($t1) -/* 0A2D44 7F06E214 AC410008 */ sw $at, 8($v0) -/* 0A2D48 7F06E218 8E0B0068 */ lw $t3, 0x68($s0) -/* 0A2D4C 7F06E21C 8E070054 */ lw $a3, 0x54($s0) -/* 0A2D50 7F06E220 82050025 */ lb $a1, 0x25($s0) -/* 0A2D54 7F06E224 AFA20014 */ sw $v0, 0x14($sp) -/* 0A2D58 7F06E228 8FA6008C */ lw $a2, 0x8c($sp) -/* 0A2D5C 7F06E22C 8FA40090 */ lw $a0, 0x90($sp) -/* 0A2D60 7F06E230 0FC1B7B0 */ jal sub_GAME_7F06DEC0 -/* 0A2D64 7F06E234 AFAB0010 */ sw $t3, 0x10($sp) -/* 0A2D68 7F06E238 27A40068 */ addiu $a0, $sp, 0x68 -/* 0A2D6C 7F06E23C 27A5002C */ addiu $a1, $sp, 0x2c -/* 0A2D70 7F06E240 0FC1B458 */ jal sub_GAME_7F06D160 -/* 0A2D74 7F06E244 8E06005C */ lw $a2, 0x5c($s0) -/* 0A2D78 7F06E248 27A40080 */ addiu $a0, $sp, 0x80 -.L7F06E24C: -/* 0A2D7C 7F06E24C 0FC16CFD */ jal quaternion_set_rotation_around_xyzf -/* 0A2D80 7F06E250 27A50058 */ addiu $a1, $sp, 0x58 -/* 0A2D84 7F06E254 27A40068 */ addiu $a0, $sp, 0x68 -/* 0A2D88 7F06E258 0FC16CFD */ jal quaternion_set_rotation_around_xyzf -/* 0A2D8C 7F06E25C 27A50048 */ addiu $a1, $sp, 0x48 -/* 0A2D90 7F06E260 27A40058 */ addiu $a0, $sp, 0x58 -/* 0A2D94 7F06E264 0FC16F84 */ jal quaternion_ensure_shortest_path -/* 0A2D98 7F06E268 27A50048 */ addiu $a1, $sp, 0x48 -/* 0A2D9C 7F06E26C 27A40058 */ addiu $a0, $sp, 0x58 -/* 0A2DA0 7F06E270 27A50048 */ addiu $a1, $sp, 0x48 -/* 0A2DA4 7F06E274 8E060084 */ lw $a2, 0x84($s0) -/* 0A2DA8 7F06E278 0FC16E82 */ jal quaternion_slerp -/* 0A2DAC 7F06E27C 27A70038 */ addiu $a3, $sp, 0x38 -/* 0A2DB0 7F06E280 8FA40098 */ lw $a0, 0x98($sp) -/* 0A2DB4 7F06E284 02002825 */ move $a1, $s0 -/* 0A2DB8 7F06E288 8FA600A0 */ lw $a2, 0xa0($sp) -/* 0A2DBC 7F06E28C 0FC1B6D7 */ jal sub_GAME_7F06DB5C -/* 0A2DC0 7F06E290 27A70038 */ addiu $a3, $sp, 0x38 -/* 0A2DC4 7F06E294 10000004 */ b .L7F06E2A8 -/* 0A2DC8 7F06E298 8FBF0024 */ lw $ra, 0x24($sp) -.L7F06E29C: -/* 0A2DCC 7F06E29C 0FC1B62C */ jal sub_GAME_7F06D8B0 -/* 0A2DD0 7F06E2A0 27A70080 */ addiu $a3, $sp, 0x80 -/* 0A2DD4 7F06E2A4 8FBF0024 */ lw $ra, 0x24($sp) -.L7F06E2A8: -/* 0A2DD8 7F06E2A8 8FB00020 */ lw $s0, 0x20($sp) -/* 0A2DDC 7F06E2AC 27BD0098 */ addiu $sp, $sp, 0x98 -/* 0A2DE0 7F06E2B0 03E00008 */ jr $ra -/* 0A2DE4 7F06E2B4 00000000 */ nop -) -#endif +/** + * Address: 7F06E2B8 + */ +void sub_GAME_7F06E2B8(ModelRenderData *renderData, Model *model, ModelNode *node, f32 angle) +{ + s32 opcode; + union ModelRoData *data; + Mtxf *mtx; + RenderPosView *render_pos; + Mtxf localMtx; + s32 m0; + s32 m1; + s32 m2; + RenderPosView *renderPosBase; + f32 *origin; + s32 matrix2Flag; + Mtxf *localMtxPtr; + Mtxf *matrixPtr; + f32 scalar; + opcode = node->Opcode; + data = node->Data; + m0 = data->Group.MatrixID0; + m1 = data->Group.MatrixID1; + m2 = data->Group.MatrixID2; + renderPosBase = model->render_pos; + render_pos = renderPosBase; + if (node->Parent != NULL) + { + mtx = modelFindNodeMtx(model, ((0, node))->Parent, 0); + } + else + { + mtx = renderData->basemtx; + } -#ifdef NONMATCHING -void sub_GAME_7F06E2B8(void) { + localMtxPtr = &localMtx; + if (mtx != NULL) + { + matrix_4x4_set_position_and_rotation_around_y((f32 *) &data->Group.Origin, angle, localMtxPtr); + matrix_4x4_multiply_homogeneous(mtx, &localMtx, &render_pos[m0].pos); + } + else + { + origin = (f32 *) &data->Group.Origin; + matrix_4x4_set_position_and_rotation_around_y(origin, angle, &render_pos[m0].pos); + } + + matrix2Flag = 0x200; + m0 = opcode & matrix2Flag; + + if ((opcode & 0x100) || m0) + { + if (matrixPtr); + + if (angle < M_PI_F) + { + angle = angle * 0.5f; + } + else + { + angle = M_TAU_F - ((M_TAU_F - angle) * 0.5f); + } + } + + if (opcode & 0x100) + { + if (mtx != NULL) + { + matrix_4x4_set_position_and_rotation_around_y((f32 *) &data->Group.Origin, angle, &localMtx); + matrix_4x4_multiply_homogeneous(mtx, localMtxPtr, &render_pos[m1].pos); + } + else + { + matrix_4x4_set_position_and_rotation_around_y((f32 *) &data->Group.Origin, angle, &render_pos[m1].pos); + } + } + + if (m0) + { + if (mtx != NULL) + { + matrixPtr = &localMtx; + } + else + { + matrixPtr = &render_pos[m2].pos; + } + + matrix_4x4_set_rotation_around_y(angle, matrixPtr); + + if (M_PI_F <= angle) + { + angle = M_TAU_F - angle; + } + + if (angle < 0.890118f) + { + scalar = modelGetBendStretchScale(angle); + } + else + { + scalar = 1.5f; + } + + matrix_column_3_scalar_multiply_2(scalar, (f32 *) matrixPtr); + matrix_4x4_set_position(&data->Group.Origin, matrixPtr); + + if (mtx != NULL) + { + matrix_4x4_multiply_homogeneous(mtx, matrixPtr, &render_pos[m2].pos); + } + } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80054BF8 -.word 0x40490fdb /*3.1415927*/ -glabel D_80054BFC -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054C00 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054C04 -.word 0x40490fdb /*3.1415927*/ -glabel D_80054C08 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054C0C -.word 0x3f63dec6 /*0.890118*/ -.text -glabel sub_GAME_7F06E2B8 -/* 0A2DE8 7F06E2B8 27BDFF60 */ addiu $sp, $sp, -0xa0 -/* 0A2DEC 7F06E2BC AFBF001C */ sw $ra, 0x1c($sp) -/* 0A2DF0 7F06E2C0 F7B40010 */ sdc1 $f20, 0x10($sp) -/* 0A2DF4 7F06E2C4 AFA500A4 */ sw $a1, 0xa4($sp) -/* 0A2DF8 7F06E2C8 94CE0000 */ lhu $t6, ($a2) -/* 0A2DFC 7F06E2CC 4487A000 */ mtc1 $a3, $f20 -/* 0A2E00 7F06E2D0 AFAE009C */ sw $t6, 0x9c($sp) -/* 0A2E04 7F06E2D4 8CCF0004 */ lw $t7, 4($a2) -/* 0A2E08 7F06E2D8 AFAF0098 */ sw $t7, 0x98($sp) -/* 0A2E0C 7F06E2DC 85F90010 */ lh $t9, 0x10($t7) -/* 0A2E10 7F06E2E0 85E3000E */ lh $v1, 0xe($t7) -/* 0A2E14 7F06E2E4 AFB90048 */ sw $t9, 0x48($sp) -/* 0A2E18 7F06E2E8 85E80012 */ lh $t0, 0x12($t7) -/* 0A2E1C 7F06E2EC AFA80044 */ sw $t0, 0x44($sp) -/* 0A2E20 7F06E2F0 8CAA000C */ lw $t2, 0xc($a1) -/* 0A2E24 7F06E2F4 AFAA0040 */ sw $t2, 0x40($sp) -/* 0A2E28 7F06E2F8 8CC70008 */ lw $a3, 8($a2) -/* 0A2E2C 7F06E2FC 00003025 */ move $a2, $zero -/* 0A2E30 7F06E300 50E00009 */ beql $a3, $zero, .L7F06E328 -/* 0A2E34 7F06E304 8C8B0000 */ lw $t3, ($a0) -/* 0A2E38 7F06E308 00A02025 */ move $a0, $a1 -/* 0A2E3C 7F06E30C 00E02825 */ move $a1, $a3 -/* 0A2E40 7F06E310 0FC1B198 */ jal modelFindNodeMtx -/* 0A2E44 7F06E314 AFA3004C */ sw $v1, 0x4c($sp) -/* 0A2E48 7F06E318 8FA3004C */ lw $v1, 0x4c($sp) -/* 0A2E4C 7F06E31C 10000003 */ b .L7F06E32C -/* 0A2E50 7F06E320 AFA20094 */ sw $v0, 0x94($sp) -/* 0A2E54 7F06E324 8C8B0000 */ lw $t3, ($a0) -.L7F06E328: -/* 0A2E58 7F06E328 AFAB0094 */ sw $t3, 0x94($sp) -.L7F06E32C: -/* 0A2E5C 7F06E32C 8FAC0094 */ lw $t4, 0x94($sp) -/* 0A2E60 7F06E330 8FA40098 */ lw $a0, 0x98($sp) -/* 0A2E64 7F06E334 00037980 */ sll $t7, $v1, 6 -/* 0A2E68 7F06E338 1180000F */ beqz $t4, .L7F06E378 -/* 0A2E6C 7F06E33C 8FB90040 */ lw $t9, 0x40($sp) -/* 0A2E70 7F06E340 4405A000 */ mfc1 $a1, $f20 -/* 0A2E74 7F06E344 8FA40098 */ lw $a0, 0x98($sp) -/* 0A2E78 7F06E348 27A60050 */ addiu $a2, $sp, 0x50 -/* 0A2E7C 7F06E34C 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0A2E80 7F06E350 AFA3004C */ sw $v1, 0x4c($sp) -/* 0A2E84 7F06E354 8FA3004C */ lw $v1, 0x4c($sp) -/* 0A2E88 7F06E358 8FAE0040 */ lw $t6, 0x40($sp) -/* 0A2E8C 7F06E35C 8FA40094 */ lw $a0, 0x94($sp) -/* 0A2E90 7F06E360 00036980 */ sll $t5, $v1, 6 -/* 0A2E94 7F06E364 27A50050 */ addiu $a1, $sp, 0x50 -/* 0A2E98 7F06E368 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0A2E9C 7F06E36C 01AE3021 */ addu $a2, $t5, $t6 -/* 0A2EA0 7F06E370 10000005 */ b .L7F06E388 -/* 0A2EA4 7F06E374 8FB8009C */ lw $t8, 0x9c($sp) -.L7F06E378: -/* 0A2EA8 7F06E378 4405A000 */ mfc1 $a1, $f20 -/* 0A2EAC 7F06E37C 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0A2EB0 7F06E380 01F93021 */ addu $a2, $t7, $t9 -/* 0A2EB4 7F06E384 8FB8009C */ lw $t8, 0x9c($sp) -.L7F06E388: -/* 0A2EB8 7F06E388 3C018005 */ lui $at, %hi(D_80054BF8) -/* 0A2EBC 7F06E38C 8FAA0094 */ lw $t2, 0x94($sp) -/* 0A2EC0 7F06E390 33020100 */ andi $v0, $t8, 0x100 -/* 0A2EC4 7F06E394 14400003 */ bnez $v0, .L7F06E3A4 -/* 0A2EC8 7F06E398 33030200 */ andi $v1, $t8, 0x200 -/* 0A2ECC 7F06E39C 10600017 */ beqz $v1, .L7F06E3FC -/* 0A2ED0 7F06E3A0 00000000 */ nop -.L7F06E3A4: -/* 0A2ED4 7F06E3A4 C4244BF8 */ lwc1 $f4, %lo(D_80054BF8)($at) -/* 0A2ED8 7F06E3A8 8FA3009C */ lw $v1, 0x9c($sp) -/* 0A2EDC 7F06E3AC 3C018005 */ lui $at, %hi(D_80054BFC) -/* 0A2EE0 7F06E3B0 4604A03C */ c.lt.s $f20, $f4 -/* 0A2EE4 7F06E3B4 30680200 */ andi $t0, $v1, 0x200 -/* 0A2EE8 7F06E3B8 01001825 */ move $v1, $t0 -/* 0A2EEC 7F06E3BC 45000007 */ bc1f .L7F06E3DC -/* 0A2EF0 7F06E3C0 00000000 */ nop -/* 0A2EF4 7F06E3C4 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0A2EF8 7F06E3C8 44813000 */ mtc1 $at, $f6 -/* 0A2EFC 7F06E3CC 00000000 */ nop -/* 0A2F00 7F06E3D0 4606A502 */ mul.s $f20, $f20, $f6 -/* 0A2F04 7F06E3D4 10000009 */ b .L7F06E3FC -/* 0A2F08 7F06E3D8 00000000 */ nop -.L7F06E3DC: -/* 0A2F0C 7F06E3DC C4284BFC */ lwc1 $f8, %lo(D_80054BFC)($at) -/* 0A2F10 7F06E3E0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0A2F14 7F06E3E4 44818000 */ mtc1 $at, $f16 -/* 0A2F18 7F06E3E8 46144281 */ sub.s $f10, $f8, $f20 -/* 0A2F1C 7F06E3EC 3C018005 */ lui $at, %hi(D_80054C00) -/* 0A2F20 7F06E3F0 C4244C00 */ lwc1 $f4, %lo(D_80054C00)($at) -/* 0A2F24 7F06E3F4 46105482 */ mul.s $f18, $f10, $f16 -/* 0A2F28 7F06E3F8 46122501 */ sub.s $f20, $f4, $f18 -.L7F06E3FC: -/* 0A2F2C 7F06E3FC 10400019 */ beqz $v0, .L7F06E464 -/* 0A2F30 7F06E400 00000000 */ nop -/* 0A2F34 7F06E404 1140000F */ beqz $t2, .L7F06E444 -/* 0A2F38 7F06E408 8FA40098 */ lw $a0, 0x98($sp) -/* 0A2F3C 7F06E40C 4405A000 */ mfc1 $a1, $f20 -/* 0A2F40 7F06E410 8FA40098 */ lw $a0, 0x98($sp) -/* 0A2F44 7F06E414 27A60050 */ addiu $a2, $sp, 0x50 -/* 0A2F48 7F06E418 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0A2F4C 7F06E41C AFA30024 */ sw $v1, 0x24($sp) -/* 0A2F50 7F06E420 8FA90048 */ lw $t1, 0x48($sp) -/* 0A2F54 7F06E424 8FAC0040 */ lw $t4, 0x40($sp) -/* 0A2F58 7F06E428 8FA40094 */ lw $a0, 0x94($sp) -/* 0A2F5C 7F06E42C 00095980 */ sll $t3, $t1, 6 -/* 0A2F60 7F06E430 27A50050 */ addiu $a1, $sp, 0x50 -/* 0A2F64 7F06E434 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0A2F68 7F06E438 016C3021 */ addu $a2, $t3, $t4 -/* 0A2F6C 7F06E43C 10000009 */ b .L7F06E464 -/* 0A2F70 7F06E440 8FA30024 */ lw $v1, 0x24($sp) -.L7F06E444: -/* 0A2F74 7F06E444 8FAD0048 */ lw $t5, 0x48($sp) -/* 0A2F78 7F06E448 8FAF0040 */ lw $t7, 0x40($sp) -/* 0A2F7C 7F06E44C 4405A000 */ mfc1 $a1, $f20 -/* 0A2F80 7F06E450 000D7180 */ sll $t6, $t5, 6 -/* 0A2F84 7F06E454 AFA30024 */ sw $v1, 0x24($sp) -/* 0A2F88 7F06E458 0FC16134 */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0A2F8C 7F06E45C 01CF3021 */ addu $a2, $t6, $t7 -/* 0A2F90 7F06E460 8FA30024 */ lw $v1, 0x24($sp) -.L7F06E464: -/* 0A2F94 7F06E464 10600031 */ beqz $v1, .L7F06E52C -/* 0A2F98 7F06E468 8FB90094 */ lw $t9, 0x94($sp) -/* 0A2F9C 7F06E46C 13200004 */ beqz $t9, .L7F06E480 -/* 0A2FA0 7F06E470 4600A306 */ mov.s $f12, $f20 -/* 0A2FA4 7F06E474 27B80050 */ addiu $t8, $sp, 0x50 -/* 0A2FA8 7F06E478 10000006 */ b .L7F06E494 -/* 0A2FAC 7F06E47C AFB80030 */ sw $t8, 0x30($sp) -.L7F06E480: -/* 0A2FB0 7F06E480 8FA80044 */ lw $t0, 0x44($sp) -/* 0A2FB4 7F06E484 8FA90040 */ lw $t1, 0x40($sp) -/* 0A2FB8 7F06E488 00085180 */ sll $t2, $t0, 6 -/* 0A2FBC 7F06E48C 01495821 */ addu $t3, $t2, $t1 -/* 0A2FC0 7F06E490 AFAB0030 */ sw $t3, 0x30($sp) -.L7F06E494: -/* 0A2FC4 7F06E494 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 0A2FC8 7F06E498 8FA50030 */ lw $a1, 0x30($sp) -/* 0A2FCC 7F06E49C 3C018005 */ lui $at, %hi(D_80054C04) -/* 0A2FD0 7F06E4A0 C4264C04 */ lwc1 $f6, %lo(D_80054C04)($at) -/* 0A2FD4 7F06E4A4 3C018005 */ lui $at, %hi(D_80054C08) -/* 0A2FD8 7F06E4A8 4614303E */ c.le.s $f6, $f20 -/* 0A2FDC 7F06E4AC 00000000 */ nop -/* 0A2FE0 7F06E4B0 45000003 */ bc1f .L7F06E4C0 -/* 0A2FE4 7F06E4B4 00000000 */ nop -/* 0A2FE8 7F06E4B8 C4284C08 */ lwc1 $f8, %lo(D_80054C08)($at) -/* 0A2FEC 7F06E4BC 46144501 */ sub.s $f20, $f8, $f20 -.L7F06E4C0: -/* 0A2FF0 7F06E4C0 3C018005 */ lui $at, %hi(D_80054C0C) -/* 0A2FF4 7F06E4C4 C42A4C0C */ lwc1 $f10, %lo(D_80054C0C)($at) -/* 0A2FF8 7F06E4C8 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 -/* 0A2FFC 7F06E4CC 460AA03C */ c.lt.s $f20, $f10 -/* 0A3000 7F06E4D0 00000000 */ nop -/* 0A3004 7F06E4D4 45020006 */ bc1fl .L7F06E4F0 -/* 0A3008 7F06E4D8 44816000 */ mtc1 $at, $f12 -/* 0A300C 7F06E4DC 0FC16A78 */ jal sub_GAME_7F05A9E0 -/* 0A3010 7F06E4E0 4600A306 */ mov.s $f12, $f20 -/* 0A3014 7F06E4E4 10000003 */ b .L7F06E4F4 -/* 0A3018 7F06E4E8 46000306 */ mov.s $f12, $f0 -/* 0A301C 7F06E4EC 44816000 */ mtc1 $at, $f12 -.L7F06E4F0: -/* 0A3020 7F06E4F0 00000000 */ nop -.L7F06E4F4: -/* 0A3024 7F06E4F4 0FC16293 */ jal matrix_column_3_scalar_multiply_2 -/* 0A3028 7F06E4F8 8FA50030 */ lw $a1, 0x30($sp) -/* 0A302C 7F06E4FC 8FA40098 */ lw $a0, 0x98($sp) -/* 0A3030 7F06E500 0FC16266 */ jal matrix_4x4_set_position -/* 0A3034 7F06E504 8FA50030 */ lw $a1, 0x30($sp) -/* 0A3038 7F06E508 8FAC0094 */ lw $t4, 0x94($sp) -/* 0A303C 7F06E50C 8FAD0044 */ lw $t5, 0x44($sp) -/* 0A3040 7F06E510 8FAF0040 */ lw $t7, 0x40($sp) -/* 0A3044 7F06E514 11800005 */ beqz $t4, .L7F06E52C -/* 0A3048 7F06E518 01802025 */ move $a0, $t4 -/* 0A304C 7F06E51C 000D7180 */ sll $t6, $t5, 6 -/* 0A3050 7F06E520 01CF3021 */ addu $a2, $t6, $t7 -/* 0A3054 7F06E524 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0A3058 7F06E528 8FA50030 */ lw $a1, 0x30($sp) -.L7F06E52C: -/* 0A305C 7F06E52C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0A3060 7F06E530 D7B40010 */ ldc1 $f20, 0x10($sp) -/* 0A3064 7F06E534 27BD00A0 */ addiu $sp, $sp, 0xa0 -/* 0A3068 7F06E538 03E00008 */ jr $ra -/* 0A306C 7F06E53C 00000000 */ nop -) -#endif +// Decodes a packed joint angle from the animation bitstream using either mtxA or mtxB. +f32 sub_GAME_7F06E540(s32 jointIndex, s32 useMtxB, ModelSkeleton *skeleton, ModelAnimation *anim, u8 *bitstream) +{ + u32 bitOffset; + u32 raw; + u8 width; + f32 angle; + angle = 0.0f; + width = anim->unk06; + if (useMtxB != 0) { + bitOffset = skeleton->Joints[jointIndex].mtxB * width; + } else { + bitOffset = skeleton->Joints[jointIndex].mtxA * width; + } -#ifdef NONMATCHING -void sub_GAME_7F06E540(void) { + raw = modelAnimReadBitsAsU16Angle(bitstream, width, bitOffset); + if (useMtxB != 0) { + if (raw != 0) { + angle = ((f32)(s32)(0x10000 - raw) * M_TAU_F) / M_U16_MAX_VALUE_F; + } + } else { + angle = ((f32)raw * M_TAU_F) / M_U16_MAX_VALUE_F; + } + + return angle; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80054C10 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054C14 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F06E540 -/* 0A3070 7F06E540 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0A3074 7F06E544 AFBF0014 */ sw $ra, 0x14($sp) -/* 0A3078 7F06E548 AFA5002C */ sw $a1, 0x2c($sp) -/* 0A307C 7F06E54C AFA60030 */ sw $a2, 0x30($sp) -/* 0A3080 7F06E550 90EE0006 */ lbu $t6, 6($a3) -/* 0A3084 7F06E554 44801000 */ mtc1 $zero, $f2 -/* 0A3088 7F06E558 10A0000C */ beqz $a1, .L7F06E58C -/* 0A308C 7F06E55C A3AE001F */ sb $t6, 0x1f($sp) -/* 0A3090 7F06E560 8CD90004 */ lw $t9, 4($a2) -/* 0A3094 7F06E564 00044080 */ sll $t0, $a0, 2 -/* 0A3098 7F06E568 01044023 */ subu $t0, $t0, $a0 -/* 0A309C 7F06E56C 00084040 */ sll $t0, $t0, 1 -/* 0A30A0 7F06E570 03284821 */ addu $t1, $t9, $t0 -/* 0A30A4 7F06E574 952A0004 */ lhu $t2, 4($t1) -/* 0A30A8 7F06E578 31CB00FF */ andi $t3, $t6, 0xff -/* 0A30AC 7F06E57C 014B0019 */ multu $t2, $t3 -/* 0A30B0 7F06E580 00003012 */ mflo $a2 -/* 0A30B4 7F06E584 1000000E */ b .L7F06E5C0 -/* 0A30B8 7F06E588 8FA40038 */ lw $a0, 0x38($sp) -.L7F06E58C: -/* 0A30BC 7F06E58C 8FAC0030 */ lw $t4, 0x30($sp) -/* 0A30C0 7F06E590 00047080 */ sll $t6, $a0, 2 -/* 0A30C4 7F06E594 01C47023 */ subu $t6, $t6, $a0 -/* 0A30C8 7F06E598 8D8D0004 */ lw $t5, 4($t4) -/* 0A30CC 7F06E59C 000E7040 */ sll $t6, $t6, 1 -/* 0A30D0 7F06E5A0 93B9001F */ lbu $t9, 0x1f($sp) -/* 0A30D4 7F06E5A4 01AE7821 */ addu $t7, $t5, $t6 -/* 0A30D8 7F06E5A8 95F80002 */ lhu $t8, 2($t7) -/* 0A30DC 7F06E5AC 03190019 */ multu $t8, $t9 -/* 0A30E0 7F06E5B0 00003012 */ mflo $a2 -/* 0A30E4 7F06E5B4 00000000 */ nop -/* 0A30E8 7F06E5B8 00000000 */ nop -/* 0A30EC 7F06E5BC 8FA40038 */ lw $a0, 0x38($sp) -.L7F06E5C0: -/* 0A30F0 7F06E5C0 93A5001F */ lbu $a1, 0x1f($sp) -/* 0A30F4 7F06E5C4 0FC1B781 */ jal sub_GAME_7F06DE04 -/* 0A30F8 7F06E5C8 E7A20018 */ swc1 $f2, 0x18($sp) -/* 0A30FC 7F06E5CC 8FA8002C */ lw $t0, 0x2c($sp) -/* 0A3100 7F06E5D0 C7A20018 */ lwc1 $f2, 0x18($sp) -/* 0A3104 7F06E5D4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0A3108 7F06E5D8 1100000D */ beqz $t0, .L7F06E610 -/* 0A310C 7F06E5DC 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0A3110 7F06E5E0 10400018 */ beqz $v0, .L7F06E644 -/* 0A3114 7F06E5E4 3C090001 */ lui $t1, 1 -/* 0A3118 7F06E5E8 01225023 */ subu $t2, $t1, $v0 -/* 0A311C 7F06E5EC 448A2000 */ mtc1 $t2, $f4 -/* 0A3120 7F06E5F0 3C018005 */ lui $at, %hi(D_80054C10) -/* 0A3124 7F06E5F4 C4284C10 */ lwc1 $f8, %lo(D_80054C10)($at) -/* 0A3128 7F06E5F8 468021A0 */ cvt.s.w $f6, $f4 -/* 0A312C 7F06E5FC 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0A3130 7F06E600 44818000 */ mtc1 $at, $f16 -/* 0A3134 7F06E604 46083282 */ mul.s $f10, $f6, $f8 -/* 0A3138 7F06E608 1000000E */ b .L7F06E644 -/* 0A313C 7F06E60C 46105083 */ div.s $f2, $f10, $f16 -.L7F06E610: -/* 0A3140 7F06E610 44829000 */ mtc1 $v0, $f18 -/* 0A3144 7F06E614 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0A3148 7F06E618 04410004 */ bgez $v0, .L7F06E62C -/* 0A314C 7F06E61C 46809120 */ cvt.s.w $f4, $f18 -/* 0A3150 7F06E620 44813000 */ mtc1 $at, $f6 -/* 0A3154 7F06E624 00000000 */ nop -/* 0A3158 7F06E628 46062100 */ add.s $f4, $f4, $f6 -.L7F06E62C: -/* 0A315C 7F06E62C 3C018005 */ lui $at, %hi(D_80054C14) -/* 0A3160 7F06E630 C4284C14 */ lwc1 $f8, %lo(D_80054C14)($at) -/* 0A3164 7F06E634 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0A3168 7F06E638 44818000 */ mtc1 $at, $f16 -/* 0A316C 7F06E63C 46082282 */ mul.s $f10, $f4, $f8 -/* 0A3170 7F06E640 46105083 */ div.s $f2, $f10, $f16 -.L7F06E644: -/* 0A3174 7F06E644 03E00008 */ jr $ra -/* 0A3178 7F06E648 46001006 */ mov.s $f0, $f2 -) -#endif +void process_03_unknown(ModelRenderData *renderData, Model *model, ModelNode *node) +{ + ModelSkeleton *skeleton; + ModelRoData_GroupRecord *rodata; + s32 jointIndex; + f32 angle; + f32 tmp2; + f32 tmp; + rodata = &node->Data->Group; + jointIndex = rodata->JointID; + skeleton = model->obj->Skeleton; + angle = sub_GAME_7F06E540(jointIndex, model->gunhand, skeleton, model->anim, (u8 *)model->unk34); -#ifdef NONMATCHING -void process_03_unknown(ModelRenderData *arg0, Model *model, ModelNode *node) { + if (model->unk2c != 0.0f) { + tmp = sub_GAME_7F06E540(jointIndex, model->gunhand, skeleton, model->anim, (u8 *)model->unk38); + angle = sub_GAME_7F06D0CC(angle, tmp, model->unk2c); + } + if (model->unk84 != 0.0f) { + tmp = sub_GAME_7F06E540(jointIndex, model->unk25, skeleton, model->anim2, (u8 *)model->unk64); + + if (model->unk5c != 0.0f) { + tmp2 = sub_GAME_7F06E540(jointIndex, model->unk25, skeleton, model->anim2, (u8 *)model->unk68); + tmp = sub_GAME_7F06D0CC(tmp, tmp2, model->unk5c); + } + + angle = sub_GAME_7F06D0CC(angle, tmp, model->unk84); + } + + sub_GAME_7F06E2B8(renderData, model, node, angle); } -#else -GLOBAL_ASM( -.text -glabel process_03_unknown -/* 0A317C 7F06E64C 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 0A3180 7F06E650 AFB00028 */ sw $s0, 0x28($sp) -/* 0A3184 7F06E654 AFBF0034 */ sw $ra, 0x34($sp) -/* 0A3188 7F06E658 AFB20030 */ sw $s2, 0x30($sp) -/* 0A318C 7F06E65C AFB1002C */ sw $s1, 0x2c($sp) -/* 0A3190 7F06E660 F7B40020 */ sdc1 $f20, 0x20($sp) -/* 0A3194 7F06E664 AFA40050 */ sw $a0, 0x50($sp) -/* 0A3198 7F06E668 AFA60058 */ sw $a2, 0x58($sp) -/* 0A319C 7F06E66C 8CC20004 */ lw $v0, 4($a2) -/* 0A31A0 7F06E670 8CAF0008 */ lw $t7, 8($a1) -/* 0A31A4 7F06E674 00A08025 */ move $s0, $a1 -/* 0A31A8 7F06E678 8E180034 */ lw $t8, 0x34($s0) -/* 0A31AC 7F06E67C 9451000C */ lhu $s1, 0xc($v0) -/* 0A31B0 7F06E680 8DF20004 */ lw $s2, 4($t7) -/* 0A31B4 7F06E684 8E070020 */ lw $a3, 0x20($s0) -/* 0A31B8 7F06E688 80A50024 */ lb $a1, 0x24($a1) -/* 0A31BC 7F06E68C AFB80010 */ sw $t8, 0x10($sp) -/* 0A31C0 7F06E690 02202025 */ move $a0, $s1 -/* 0A31C4 7F06E694 0FC1B950 */ jal sub_GAME_7F06E540 -/* 0A31C8 7F06E698 02403025 */ move $a2, $s2 -/* 0A31CC 7F06E69C 44802000 */ mtc1 $zero, $f4 -/* 0A31D0 7F06E6A0 C606002C */ lwc1 $f6, 0x2c($s0) -/* 0A31D4 7F06E6A4 46000506 */ mov.s $f20, $f0 -/* 0A31D8 7F06E6A8 02202025 */ move $a0, $s1 -/* 0A31DC 7F06E6AC 46062032 */ c.eq.s $f4, $f6 -/* 0A31E0 7F06E6B0 02403025 */ move $a2, $s2 -/* 0A31E4 7F06E6B4 4503000C */ bc1tl .L7F06E6E8 -/* 0A31E8 7F06E6B8 44804000 */ mtc1 $zero, $f8 -/* 0A31EC 7F06E6BC 8E190038 */ lw $t9, 0x38($s0) -/* 0A31F0 7F06E6C0 82050024 */ lb $a1, 0x24($s0) -/* 0A31F4 7F06E6C4 8E070020 */ lw $a3, 0x20($s0) -/* 0A31F8 7F06E6C8 0FC1B950 */ jal sub_GAME_7F06E540 -/* 0A31FC 7F06E6CC AFB90010 */ sw $t9, 0x10($sp) -/* 0A3200 7F06E6D0 4600A306 */ mov.s $f12, $f20 -/* 0A3204 7F06E6D4 46000386 */ mov.s $f14, $f0 -/* 0A3208 7F06E6D8 0FC1B433 */ jal sub_GAME_7F06D0CC -/* 0A320C 7F06E6DC 8E06002C */ lw $a2, 0x2c($s0) -/* 0A3210 7F06E6E0 46000506 */ mov.s $f20, $f0 -/* 0A3214 7F06E6E4 44804000 */ mtc1 $zero, $f8 -.L7F06E6E8: -/* 0A3218 7F06E6E8 C60A0084 */ lwc1 $f10, 0x84($s0) -/* 0A321C 7F06E6EC 02202025 */ move $a0, $s1 -/* 0A3220 7F06E6F0 02403025 */ move $a2, $s2 -/* 0A3224 7F06E6F4 460A4032 */ c.eq.s $f8, $f10 -/* 0A3228 7F06E6F8 00000000 */ nop -/* 0A322C 7F06E6FC 4503001F */ bc1tl .L7F06E77C -/* 0A3230 7F06E700 4407A000 */ mfc1 $a3, $f20 -/* 0A3234 7F06E704 8E080064 */ lw $t0, 0x64($s0) -/* 0A3238 7F06E708 82050025 */ lb $a1, 0x25($s0) -/* 0A323C 7F06E70C 8E070054 */ lw $a3, 0x54($s0) -/* 0A3240 7F06E710 0FC1B950 */ jal sub_GAME_7F06E540 -/* 0A3244 7F06E714 AFA80010 */ sw $t0, 0x10($sp) -/* 0A3248 7F06E718 E7A00038 */ swc1 $f0, 0x38($sp) -/* 0A324C 7F06E71C C612005C */ lwc1 $f18, 0x5c($s0) -/* 0A3250 7F06E720 44808000 */ mtc1 $zero, $f16 -/* 0A3254 7F06E724 02202025 */ move $a0, $s1 -/* 0A3258 7F06E728 02403025 */ move $a2, $s2 -/* 0A325C 7F06E72C 46128032 */ c.eq.s $f16, $f18 -/* 0A3260 7F06E730 00000000 */ nop -/* 0A3264 7F06E734 4503000C */ bc1tl .L7F06E768 -/* 0A3268 7F06E738 4600A306 */ mov.s $f12, $f20 -/* 0A326C 7F06E73C 8E090068 */ lw $t1, 0x68($s0) -/* 0A3270 7F06E740 82050025 */ lb $a1, 0x25($s0) -/* 0A3274 7F06E744 8E070054 */ lw $a3, 0x54($s0) -/* 0A3278 7F06E748 0FC1B950 */ jal sub_GAME_7F06E540 -/* 0A327C 7F06E74C AFA90010 */ sw $t1, 0x10($sp) -/* 0A3280 7F06E750 C7AC0038 */ lwc1 $f12, 0x38($sp) -/* 0A3284 7F06E754 46000386 */ mov.s $f14, $f0 -/* 0A3288 7F06E758 0FC1B433 */ jal sub_GAME_7F06D0CC -/* 0A328C 7F06E75C 8E06005C */ lw $a2, 0x5c($s0) -/* 0A3290 7F06E760 E7A00038 */ swc1 $f0, 0x38($sp) -/* 0A3294 7F06E764 4600A306 */ mov.s $f12, $f20 -.L7F06E768: -/* 0A3298 7F06E768 C7AE0038 */ lwc1 $f14, 0x38($sp) -/* 0A329C 7F06E76C 0FC1B433 */ jal sub_GAME_7F06D0CC -/* 0A32A0 7F06E770 8E060084 */ lw $a2, 0x84($s0) -/* 0A32A4 7F06E774 46000506 */ mov.s $f20, $f0 -/* 0A32A8 7F06E778 4407A000 */ mfc1 $a3, $f20 -.L7F06E77C: -/* 0A32AC 7F06E77C 8FA40050 */ lw $a0, 0x50($sp) -/* 0A32B0 7F06E780 02002825 */ move $a1, $s0 -/* 0A32B4 7F06E784 0FC1B8AE */ jal sub_GAME_7F06E2B8 -/* 0A32B8 7F06E788 8FA60058 */ lw $a2, 0x58($sp) -/* 0A32BC 7F06E78C 8FBF0034 */ lw $ra, 0x34($sp) -/* 0A32C0 7F06E790 D7B40020 */ ldc1 $f20, 0x20($sp) -/* 0A32C4 7F06E794 8FB00028 */ lw $s0, 0x28($sp) -/* 0A32C8 7F06E798 8FB1002C */ lw $s1, 0x2c($sp) -/* 0A32CC 7F06E79C 8FB20030 */ lw $s2, 0x30($sp) -/* 0A32D0 7F06E7A0 03E00008 */ jr $ra -/* 0A32D4 7F06E7A4 27BD0050 */ addiu $sp, $sp, 0x50 -) -#endif void process_15_subposition(ModelRenderData* arg0, Model *model, ModelNode *node) @@ -2831,7 +1758,7 @@ void process_15_subposition(ModelRenderData* arg0, Model *model, ModelNode *node } else { - sp68 = arg0->unk_matrix; + sp68 = arg0->basemtx; } if (sp68) @@ -3078,7 +2005,7 @@ void process_07_unknown(Model *model, ModelNode *node) s32 index2; s32 index3; - sub_GAME_7F06C550(model, &coord); + modelGetScaledRootToOriginDir(model, &coord); theta = acosf(((coord.x * mtx->m[1][0]) + (coord.y * mtx->m[1][1])) + (coord.z * mtx->m[1][2])); ratio = acosf((((coord.x * mtx->m[2][0]) + (coord.y * mtx->m[2][1])) + (coord.z * mtx->m[2][2])) / sinf(theta)); @@ -3310,7 +2237,7 @@ void instcalcmatrices(ModelRenderData* arg0, Model* arg1) return_null(); } - if (arg0->unk_matrix == NULL) + if (arg0->basemtx == NULL) { osSyncPrintf("instcalcmatrices: no basemtx!\n"); return_null(); @@ -3341,7 +2268,7 @@ void subcalcmatrices(ModelRenderData *arg0, struct Model *arg1) return_null(); } - if (arg0->unk_matrix == NULL) + if (arg0->basemtx == NULL) { osSyncPrintf("subcalcmatrices: no basemtx!\n"); return_null(); @@ -3433,7 +2360,7 @@ void subcalcmatrices(ModelRenderData *arg0, struct Model *arg1) } } - sub_GAME_7F0755B0(); + modelResetAnimationsScratchBuffer(); } instcalcmatrices(arg0, arg1); @@ -3446,27 +2373,31 @@ struct ModelAnimation * objecthandlerGetModelAnim(struct Model* model) { return model->anim; } -s8 objecthandlerGetModelGunhand(Model *model) { +s8 objecthandlerGetModelGunhand(Model *model) +{ return model->gunhand; } + /** * Address 0x7F06F5BC. */ -f32 objecthandlerGetModelField28(Model *model) +f32 modelGetAnimFrame(Model *model) { - return model->unk28; + return model->animframe1; } -f32 sub_GAME_7F06F5C4(Model *model) + +f32 modelGetAnimEndFrame(Model *model) { - f32 unk3c; + f32 end; ModelAnimation *modelAnimation; - unk3c = model->endframe; - if (unk3c >= 0.0f) + end = model->endframe; + + if (end >= 0.0f) { - return unk3c; + return end; } modelAnimation = model->anim; @@ -3475,6 +2406,7 @@ f32 sub_GAME_7F06F5C4(Model *model) { return modelAnimation->unk04 - 1; } + return 0.0f; } @@ -3512,668 +2444,205 @@ f32 modelGetEffectiveAnimSpeed(Model *model) { } -#ifdef NONMATCHING s32 modelConstrainOrWrapAnimFrame(s32 frame, ModelAnimation *anim, f32 endframe) { - //s32 frame; - //u16 animnum->unk4; - //u16 animnum->unk4; - - //frame = frame; - if (frame < 0) - { - if (animnum->unk7 & 1) - { - //animnum->unk4 = animnum->unk4; - frame = animnum->unk4 - ((s32) -frame % (s32) animnum->unk4); - } - else - { + if (frame < 0) { + if (anim->unk07 & 1) { + frame = anim->unk04 - ((-frame) % anim->unk04); + } else { frame = 0; } } - else if ((endframe >= 0.0f) && ((s32) endframe < frame)) - { + else if ((0.0f <= endframe) && ((s32)endframe < frame)) { frame = ceilFloatToInt(endframe); } - else - { - //animnum->unk4 = animnum->unk4; - if (frame >= (s32) animnum->unk4) - { - if (animnum->unk7 & 1) - { - frame = frame % (s32) animnum->unk4; - } - else - { - frame = animnum->unk4 - 1; - } + else if (frame >= anim->unk04) { + if (anim->unk07 & 1) { + frame %= anim->unk04; + } else { + frame = anim->unk04 - 1; } } + else { + } + return frame; } -#else -GLOBAL_ASM( -.text -glabel modelConstrainOrWrapAnimFrame -/* 0A419C 7F06F66C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0A41A0 7F06F670 44866000 */ mtc1 $a2, $f12 -/* 0A41A4 7F06F674 04810017 */ bgez $a0, .L7F06F6D4 -/* 0A41A8 7F06F678 AFBF0014 */ sw $ra, 0x14($sp) -/* 0A41AC 7F06F67C 90AE0007 */ lbu $t6, 7($a1) -/* 0A41B0 7F06F680 31CF0001 */ andi $t7, $t6, 1 -/* 0A41B4 7F06F684 11E00011 */ beqz $t7, .L7F06F6CC -/* 0A41B8 7F06F688 00000000 */ nop -/* 0A41BC 7F06F68C 94A20004 */ lhu $v0, 4($a1) -/* 0A41C0 7F06F690 0004C023 */ negu $t8, $a0 -/* 0A41C4 7F06F694 0302001A */ div $zero, $t8, $v0 -/* 0A41C8 7F06F698 0000C810 */ mfhi $t9 -/* 0A41CC 7F06F69C 00592023 */ subu $a0, $v0, $t9 -/* 0A41D0 7F06F6A0 14400002 */ bnez $v0, .L7F06F6AC -/* 0A41D4 7F06F6A4 00000000 */ nop -/* 0A41D8 7F06F6A8 0007000D */ break 7 -.L7F06F6AC: -/* 0A41DC 7F06F6AC 2401FFFF */ li $at, -1 -/* 0A41E0 7F06F6B0 14410004 */ bne $v0, $at, .L7F06F6C4 -/* 0A41E4 7F06F6B4 3C018000 */ lui $at, 0x8000 -/* 0A41E8 7F06F6B8 17010002 */ bne $t8, $at, .L7F06F6C4 -/* 0A41EC 7F06F6BC 00000000 */ nop -/* 0A41F0 7F06F6C0 0006000D */ break 6 -.L7F06F6C4: -/* 0A41F4 7F06F6C4 1000002A */ b .L7F06F770 -/* 0A41F8 7F06F6C8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F06F6CC: -/* 0A41FC 7F06F6CC 10000027 */ b .L7F06F76C -/* 0A4200 7F06F6D0 00002025 */ move $a0, $zero -.L7F06F6D4: -/* 0A4204 7F06F6D4 44802000 */ mtc1 $zero, $f4 -/* 0A4208 7F06F6D8 00000000 */ nop -/* 0A420C 7F06F6DC 460C203E */ c.le.s $f4, $f12 -/* 0A4210 7F06F6E0 00000000 */ nop -/* 0A4214 7F06F6E4 4502000C */ bc1fl .L7F06F718 -/* 0A4218 7F06F6E8 94A20004 */ lhu $v0, 4($a1) -/* 0A421C 7F06F6EC 4600618D */ trunc.w.s $f6, $f12 -/* 0A4220 7F06F6F0 44093000 */ mfc1 $t1, $f6 -/* 0A4224 7F06F6F4 00000000 */ nop -/* 0A4228 7F06F6F8 0124082A */ slt $at, $t1, $a0 -/* 0A422C 7F06F6FC 50200006 */ beql $at, $zero, .L7F06F718 -/* 0A4230 7F06F700 94A20004 */ lhu $v0, 4($a1) -/* 0A4234 7F06F704 0FC1712E */ jal ceilFloatToInt -/* 0A4238 7F06F708 00000000 */ nop -/* 0A423C 7F06F70C 10000017 */ b .L7F06F76C -/* 0A4240 7F06F710 00402025 */ move $a0, $v0 -/* 0A4244 7F06F714 94A20004 */ lhu $v0, 4($a1) -.L7F06F718: -/* 0A4248 7F06F718 0082082A */ slt $at, $a0, $v0 -/* 0A424C 7F06F71C 54200014 */ bnezl $at, .L7F06F770 -/* 0A4250 7F06F720 8FBF0014 */ lw $ra, 0x14($sp) -/* 0A4254 7F06F724 90AA0007 */ lbu $t2, 7($a1) -/* 0A4258 7F06F728 314B0001 */ andi $t3, $t2, 1 -/* 0A425C 7F06F72C 5160000F */ beql $t3, $zero, .L7F06F76C -/* 0A4260 7F06F730 2444FFFF */ addiu $a0, $v0, -1 -/* 0A4264 7F06F734 0082001A */ div $zero, $a0, $v0 -/* 0A4268 7F06F738 14400002 */ bnez $v0, .L7F06F744 -/* 0A426C 7F06F73C 00000000 */ nop -/* 0A4270 7F06F740 0007000D */ break 7 -.L7F06F744: -/* 0A4274 7F06F744 2401FFFF */ li $at, -1 -/* 0A4278 7F06F748 14410004 */ bne $v0, $at, .L7F06F75C -/* 0A427C 7F06F74C 3C018000 */ lui $at, 0x8000 -/* 0A4280 7F06F750 14810002 */ bne $a0, $at, .L7F06F75C -/* 0A4284 7F06F754 00000000 */ nop -/* 0A4288 7F06F758 0006000D */ break 6 -.L7F06F75C: -/* 0A428C 7F06F75C 00002010 */ mfhi $a0 -/* 0A4290 7F06F760 10000003 */ b .L7F06F770 -/* 0A4294 7F06F764 8FBF0014 */ lw $ra, 0x14($sp) -/* 0A4298 7F06F768 2444FFFF */ addiu $a0, $v0, -1 -.L7F06F76C: -/* 0A429C 7F06F76C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F06F770: -/* 0A42A0 7F06F770 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0A42A4 7F06F774 00801025 */ move $v0, $a0 -/* 0A42A8 7F06F778 03E00008 */ jr $ra -/* 0A42AC 7F06F77C 00000000 */ nop -) -#endif - - - -#ifdef NONMATCHING -void modelCopyAnimForMerge(Model *model, f32 arg1) +void modelCopyAnimForMerge(Model *model, f32 timemerge) { - ModelNode *temp_a1; - f32 temp_f10; - f32 temp_f16; - f32 temp_f18; - f32 temp_f4; - f32 temp_f6; - f32 temp_f8; - modeldata_root *temp_v0_2; + ModelAnimation *anim; + ModelNode *root; + struct modeldata_root *rwdata; + s32 opcode; + + if (0.0f < timemerge) { + anim = model->anim; + + if (anim != NULL) { + root = model->obj->RootNode; + opcode = root->Opcode & 0xff; + + model->anim2 = anim; + model->animframe2 = model->animframe1; + model->unk5c = model->unk2c; + model->unk25 = model->gunhand; + model->frame2a = model->framea; + model->frame2b = model->frameb; + model->speed2 = model->speed; + model->unk74 = model->newspeed; + model->unk78 = model->oldspeed; + model->unk7c = model->timespeed; + model->unk80 = model->elapsespeed; + model->unk6c = model->endframe; + + if (opcode == MODELNODE_OPCODE_HEADER) { + rwdata = (struct modeldata_root *)modelGetNodeRwData(model, root); + rwdata->unk02 = 1; + rwdata->unk4c.x = rwdata->unk34.x; + rwdata->unk4c.y = rwdata->unk34.y; + rwdata->unk4c.z = rwdata->unk34.z; + rwdata->unk40.x = rwdata->unk24.x; + rwdata->unk40.y = rwdata->unk24.y; + rwdata->unk40.z = rwdata->unk24.z; + } - if ((arg1 > 0.0f) && (model->anim != 0)) - { - temp_a1 = model->obj->RootNode; - model->unk58 = model->unk28; - model->unk5C = model->unk2C; - model->unk54 = model->anim; - model->unk25 = model->unk24; - model->unk60 = model->unk30; - model->unk62 = model->unk32; - model->unk70 = model->speed; - model->unk74 = model->newspeed; - model->unk78 = model->oldspeed; - model->unk7C = model->timespeed; - model->unk80 = model->elapsespeed; - model->unk6C = model->endframe; - if ((temp_a1->Opcode & 0xFF) == 1) - { - temp_v0_2 = modelGetNodeRwData(model, temp_a1); - temp_f10 = temp_v0_2->unk34.x; - temp_f16 = temp_v0_2->unk34.AsArray[1]; - temp_f18 = temp_v0_2->unk34.AsArray[2]; - temp_f4 = temp_v0_2->unk24.x; - temp_f6 = temp_v0_2->unk24.AsArray[1]; - temp_f8 = temp_v0_2->unk24.AsArray[2]; - temp_v0_2->unk02 = 1; - temp_v0_2->unk4c.x = temp_f10; - temp_v0_2->unk4c.AsArray[1] = temp_f16; - temp_v0_2->unk4c.AsArray[2] = temp_f18; - temp_v0_2->unk40.x = temp_f4; - temp_v0_2->unk40.AsArray[1] = temp_f6; - temp_v0_2->unk40.AsArray[2] = temp_f8; return; } - // Duplicate return node #5. Try simplifying control flow for better match - return; } - model->unk54 = NULL; + + model->anim2 = NULL; } -#else -GLOBAL_ASM( -.text -glabel modelCopyAnimForMerge -/* 0A42B0 7F06F780 44856000 */ mtc1 $a1, $f12 -/* 0A42B4 7F06F784 44802000 */ mtc1 $zero, $f4 -/* 0A42B8 7F06F788 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0A42BC 7F06F78C AFBF0014 */ sw $ra, 0x14($sp) -/* 0A42C0 7F06F790 460C203C */ c.lt.s $f4, $f12 -/* 0A42C4 7F06F794 00000000 */ nop -/* 0A42C8 7F06F798 45020033 */ bc1fl .L7F06F868 -/* 0A42CC 7F06F79C AC800054 */ sw $zero, 0x54($a0) -/* 0A42D0 7F06F7A0 8C820020 */ lw $v0, 0x20($a0) -/* 0A42D4 7F06F7A4 24010001 */ li $at, 1 -/* 0A42D8 7F06F7A8 5040002F */ beql $v0, $zero, .L7F06F868 -/* 0A42DC 7F06F7AC AC800054 */ sw $zero, 0x54($a0) -/* 0A42E0 7F06F7B0 8C8E0008 */ lw $t6, 8($a0) -/* 0A42E4 7F06F7B4 C4860028 */ lwc1 $f6, 0x28($a0) -/* 0A42E8 7F06F7B8 C488002C */ lwc1 $f8, 0x2c($a0) -/* 0A42EC 7F06F7BC 8DC50000 */ lw $a1, ($t6) -/* 0A42F0 7F06F7C0 80980024 */ lb $t8, 0x24($a0) -/* 0A42F4 7F06F7C4 84990030 */ lh $t9, 0x30($a0) -/* 0A42F8 7F06F7C8 94A30000 */ lhu $v1, ($a1) -/* 0A42FC 7F06F7CC E4860058 */ swc1 $f6, 0x58($a0) -/* 0A4300 7F06F7D0 E488005C */ swc1 $f8, 0x5c($a0) -/* 0A4304 7F06F7D4 84880032 */ lh $t0, 0x32($a0) -/* 0A4308 7F06F7D8 C48A0040 */ lwc1 $f10, 0x40($a0) -/* 0A430C 7F06F7DC C4900044 */ lwc1 $f16, 0x44($a0) -/* 0A4310 7F06F7E0 C4920048 */ lwc1 $f18, 0x48($a0) -/* 0A4314 7F06F7E4 C484004C */ lwc1 $f4, 0x4c($a0) -/* 0A4318 7F06F7E8 C4860050 */ lwc1 $f6, 0x50($a0) -/* 0A431C 7F06F7EC C488003C */ lwc1 $f8, 0x3c($a0) -/* 0A4320 7F06F7F0 306F00FF */ andi $t7, $v1, 0xff -/* 0A4324 7F06F7F4 AC820054 */ sw $v0, 0x54($a0) -/* 0A4328 7F06F7F8 A0980025 */ sb $t8, 0x25($a0) -/* 0A432C 7F06F7FC A4990060 */ sh $t9, 0x60($a0) -/* 0A4330 7F06F800 A4880062 */ sh $t0, 0x62($a0) -/* 0A4334 7F06F804 E48A0070 */ swc1 $f10, 0x70($a0) -/* 0A4338 7F06F808 E4900074 */ swc1 $f16, 0x74($a0) -/* 0A433C 7F06F80C E4920078 */ swc1 $f18, 0x78($a0) -/* 0A4340 7F06F810 E484007C */ swc1 $f4, 0x7c($a0) -/* 0A4344 7F06F814 E4860080 */ swc1 $f6, 0x80($a0) -/* 0A4348 7F06F818 15E10013 */ bne $t7, $at, .L7F06F868 -/* 0A434C 7F06F81C E488006C */ swc1 $f8, 0x6c($a0) -/* 0A4350 7F06F820 0FC1B1E7 */ jal modelGetNodeRwData -/* 0A4354 7F06F824 00000000 */ nop -/* 0A4358 7F06F828 C44A0034 */ lwc1 $f10, 0x34($v0) -/* 0A435C 7F06F82C C4500038 */ lwc1 $f16, 0x38($v0) -/* 0A4360 7F06F830 C452003C */ lwc1 $f18, 0x3c($v0) -/* 0A4364 7F06F834 C4440024 */ lwc1 $f4, 0x24($v0) -/* 0A4368 7F06F838 C4460028 */ lwc1 $f6, 0x28($v0) -/* 0A436C 7F06F83C C448002C */ lwc1 $f8, 0x2c($v0) -/* 0A4370 7F06F840 24090001 */ li $t1, 1 -/* 0A4374 7F06F844 A0490002 */ sb $t1, 2($v0) -/* 0A4378 7F06F848 E44A004C */ swc1 $f10, 0x4c($v0) -/* 0A437C 7F06F84C E4500050 */ swc1 $f16, 0x50($v0) -/* 0A4380 7F06F850 E4520054 */ swc1 $f18, 0x54($v0) -/* 0A4384 7F06F854 E4440040 */ swc1 $f4, 0x40($v0) -/* 0A4388 7F06F858 E4460044 */ swc1 $f6, 0x44($v0) -/* 0A438C 7F06F85C 10000002 */ b .L7F06F868 -/* 0A4390 7F06F860 E4480048 */ swc1 $f8, 0x48($v0) -/* 0A4394 7F06F864 AC800054 */ sw $zero, 0x54($a0) -.L7F06F868: -/* 0A4398 7F06F868 8FBF0014 */ lw $ra, 0x14($sp) -/* 0A439C 7F06F86C 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0A43A0 7F06F870 03E00008 */ jr $ra -/* 0A43A4 7F06F874 00000000 */ nop -) -#endif - - - -#ifdef NONMATCHING -void modelSetAnimation2(Model *model, void *anim, s32 arg2, f32 startframe, f32 half, f32 arg5) +void modelSetAnimation2(Model *model, ModelAnimation *anim, s32 flip, f32 frame, f32 speed, f32 arg5) { - void *sp80; - f32 sp70; - f32 sp6C; - f32 sp64; - f32 sp60; - f32 sp5C; - f32 sp58; - f32 sp54; - f32 sp50; - f32 sp4C; - f32 sp48; - f32 sp44; - f32 sp40; - f32 sp30; - s32 sp2C; - ModelNode *temp_a1; - f32 temp_f0; - f32 temp_f0_2; - f32 temp_f0_3; - f32 temp_f10; - f32 temp_f12; - f32 temp_f12_2; - f32 temp_f14; - f32 temp_f14_2; - f32 temp_f2; - f32 temp_f2_2; - f32 temp_f2_3; - f32 temp_f2_4; - f32 temp_f4; - f32 temp_f6; - modeldata_root *temp_v0; - f32 phi_f14; + s32 hadNoAnim = !model->anim; + s32 padding; + s32 type; - sp2C = model->anim == 0; - if (model->unk54 != 0) - { + if (model->anim2 != NULL) { model->unk88 = arg5; - model->unk8C = 0.0f; + model->unk8c = 0.0f; model->unk84 = 1.0f; - } - else - { + } else { model->unk88 = 0.0f; model->unk84 = 0.0f; } - model->anim = anim; - model->unk24 = arg2; + + model->anim = anim; + model->gunhand = flip; model->endframe = -1.0f; - model->speed = half; + model->speed = speed; model->timespeed = 0.0f; - modelSetAnimFrame(startframe, model, startframe, anim); - model->unk26 = 0; - temp_a1 = model->obj->RootNode; - if ((temp_a1->Opcode & 0xFF) == 1) - { - sp80 = temp_a1->Data; - temp_v0 = modelGetNodeRwData(model, temp_a1); - sp5C.unk0 = D_80036244.unk0; - temp_f2 = model->scale * model->unkB8; - sp5C.unk4 = D_80036244.unk4; - sp5C.unk8 = D_80036244.unk8; - sp70 = temp_f2; - sp58 = sub_GAME_7F06D3F4(*sp80, model->unk24, model->obj->Skeleton, model->anim, model->unk32, &sp5C); - if (temp_f2 != 1.0f) - { - sp5C *= temp_f2; - sp60 *= temp_f2; - sp64 *= temp_f2; + + modelSetAnimFrame(model, frame); + + model->animlooping = 0; + + type = model->obj->RootNode->Opcode & 0xff; + + if (type == MODELNODE_OPCODE_HEADER) { + ModelRoData_HeaderRecord *rodata = &model->obj->RootNode->Data->Header; + ModelRwData_HeaderRecord *rwdata = modelGetNodeRwData(model, model->obj->RootNode); + f32 temp_f14; + f32 sinAngle; + f32 scale; + f32 cosAngle; + s32 animPart; + coord3d pos; + f32 angleDelta; + coord3d tmppos[2]; + ModelSkeleton *skeleton; + + animPart = rodata->AnimPart; + skeleton = model->obj->Skeleton; + scale = model->scale * model->anim_translation_scale; + pos = D_80036244; + + angleDelta = sub_GAME_7F06D3F4(animPart, model->gunhand, skeleton, model->anim, model->frameb, &pos + ); + + if (scale != 1.0f) { + pos.f[0] *= scale; + pos.f[1] *= scale; + pos.f[2] *= scale; } - sp6C = cosf(temp_v0->unk14); - temp_f0 = sinf(temp_v0->unk14); - temp_f2_2 = model->unk2C; - if (temp_f2_2 == 0.0f) - { - temp_f2_3 = temp_v0->pos.x; - temp_v0->unk34.x = temp_f2_3; - temp_v0->unk34.AsArray[2] = temp_v0->pos.AsArray[2]; - temp_v0->unk34.AsArray[1] = temp_v0->pos.AsArray[1] - temp_v0->ground; - temp_v0->unk30 = temp_v0->unk14; - temp_f4 = (sp64 * temp_f0) + (temp_f2_3 + (sp5C * sp6C)); - sp4C = temp_f4; - sp50 = sp60; - sp54 = (sp64 * sp6C) + (temp_v0->unk34.AsArray[2] - (sp5C * temp_f0)); - temp_v0->unk24.x = temp_f4; - temp_v0->unk24.AsArray[1] = sp50; - temp_v0->unk24.AsArray[2] = sp54; - if (temp_v0->unk18 == 0.0f) - { - temp_f0_2 = temp_v0->unk30 + sp58; - temp_v0->unk20 = temp_f0_2; - if (temp_f0_2 >= M_TAU_F) - { - temp_v0->unk20 -= M_TAU_F; + + cosAngle = cosf(rwdata->unk14); + sinAngle = sinf(rwdata->unk14); + scale = model->unk2c; + + if (model->unk2c == 0.0f) { + rwdata->unk34.x = rwdata->pos.f[0]; + rwdata->unk34.y = rwdata->pos.f[1] - rwdata->ground; + rwdata->unk34.z = rwdata->pos.f[2]; + + rwdata->unk30 = rwdata->unk14; + + tmppos[1].x = rwdata->unk34.f[0] + (pos.f[0] * cosAngle) + (pos.f[2] * sinAngle); + tmppos[1].y = pos.f[1]; + tmppos[1].z = rwdata->unk34.f[2] - (pos.f[0] * sinAngle) + (pos.f[2] * cosAngle); + + rwdata->unk24.x = tmppos[1].f[0]; + rwdata->unk24.y = tmppos[1].f[1]; + rwdata->unk24.z = tmppos[1].f[2]; + + if (rwdata->unk18 == 0.0f) { + rwdata->unk20 = rwdata->unk30 + angleDelta; + + if (rwdata->unk20 >= M_TAU_F) { + rwdata->unk20 -= M_TAU_F; } } - temp_v0->unk1 = 1; - } - else - { - temp_f14 = (sp64 * temp_f0) + (sp5C * sp6C); - temp_f10 = (sp64 * sp6C) + (-sp5C * temp_f0); - sp30 = temp_f10; - sp44 = sp60; - temp_f6 = temp_v0->pos.x + (temp_f14 * (1.0f - temp_f2_2)); - sp40 = temp_f6; - sp48 = temp_v0->pos.AsArray[2] + (temp_f10 * (1.0f - model->unk2C)); - temp_v0->unk24.x = temp_f6; - temp_v0->unk24.AsArray[1] = sp44; - temp_v0->unk24.AsArray[2] = sp48; - temp_v0->unk34.x = temp_v0->unk24.x - temp_f14; - temp_f12 = temp_v0->pos.AsArray[1] - temp_v0->ground; - temp_f2_4 = model->unk2C; - temp_f12_2 = temp_v0->unk14; - temp_v0->unk34.AsArray[1] = temp_f12 - (((sp60 - temp_f12) * temp_f2_4) / (1.0f - temp_f2_4)); - temp_v0->unk34.AsArray[2] = temp_v0->unk24.AsArray[2] - sp30; - temp_f14_2 = temp_f12_2 - sp58; - phi_f14 = temp_f14_2; - if (temp_f14_2 < 0.0f) - { - phi_f14 = temp_f14_2 + M_TAU_F; + + rwdata->unk01 = 1; + } else { + f32 x; + f32 y; + f32 z; + + x = pos.f[0] * cosAngle + pos.f[2] * sinAngle; + y = pos.f[1]; + z = -pos.f[0] * sinAngle + pos.f[2] * cosAngle; + + tmppos[0].x = rwdata->pos.f[0] + x * (1.0f - model->unk2c); + tmppos[0].y = y; + tmppos[0].z = rwdata->pos.f[2] + z * (1.0f - model->unk2c); + + rwdata->unk24.x = tmppos[0].x; + rwdata->unk24.y = tmppos[0].y; + rwdata->unk24.z = tmppos[0].z; + + rwdata->unk34.f[0] = rwdata->unk24.f[0] - x; + rwdata->unk34.f[1] = (rwdata->pos.f[1] - rwdata->ground) - (y - (rwdata->pos.f[1] - rwdata->ground)) * model->unk2c / (1.0f - model->unk2c); + rwdata->unk34.f[2] = rwdata->unk24.f[2] - z; + + temp_f14 = rwdata->unk14 - angleDelta; + + if (temp_f14 < 0.0f) { + temp_f14 += M_TAU_F; } - temp_v0->unk30 = sub_GAME_7F06D0CC(temp_f12_2, phi_f14, model->unk2C); - if (temp_v0->unk18 == 0.0f) - { - temp_f0_3 = temp_v0->unk30 + sp58; - temp_v0->unk20 = temp_f0_3; - if (temp_f0_3 >= M_TAU_F) - { - temp_v0->unk20 -= M_TAU_F; + + rwdata->unk30 = sub_GAME_7F06D0CC(rwdata->unk14, temp_f14, model->unk2c); + + if (rwdata->unk18 == 0.0f) { + rwdata->unk20 = rwdata->unk30 + angleDelta; + + if (rwdata->unk20 >= M_TAU_F) { + rwdata->unk20 -= M_TAU_F; } } - temp_v0->unk1 = 1; + + rwdata->unk01 = 1; } - if (sp2C != 0) - { - temp_v0->unk34.AsArray[1] = temp_v0->unk24.AsArray[1]; + + if (hadNoAnim) { + rwdata->unk34.y = rwdata->unk24.y; } } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80054D40 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054D44 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80054D48 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel modelSetAnimation2 -/* 0A43A8 7F06F878 27BDFF70 */ addiu $sp, $sp, -0x90 -/* 0A43AC 7F06F87C AFBF0024 */ sw $ra, 0x24($sp) -/* 0A43B0 7F06F880 AFB10020 */ sw $s1, 0x20($sp) -/* 0A43B4 7F06F884 AFB0001C */ sw $s0, 0x1c($sp) -/* 0A43B8 7F06F888 AFA50094 */ sw $a1, 0x94($sp) -/* 0A43BC 7F06F88C 8C8E0020 */ lw $t6, 0x20($a0) -/* 0A43C0 7F06F890 44876000 */ mtc1 $a3, $f12 -/* 0A43C4 7F06F894 00A03825 */ move $a3, $a1 -/* 0A43C8 7F06F898 2DCF0001 */ sltiu $t7, $t6, 1 -/* 0A43CC 7F06F89C AFAF002C */ sw $t7, 0x2c($sp) -/* 0A43D0 7F06F8A0 8C980054 */ lw $t8, 0x54($a0) -/* 0A43D4 7F06F8A4 44056000 */ mfc1 $a1, $f12 -/* 0A43D8 7F06F8A8 00808825 */ move $s1, $a0 -/* 0A43DC 7F06F8AC 13000008 */ beqz $t8, .L7F06F8D0 -/* 0A43E0 7F06F8B0 C7A400A4 */ lwc1 $f4, 0xa4($sp) -/* 0A43E4 7F06F8B4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0A43E8 7F06F8B8 44803000 */ mtc1 $zero, $f6 -/* 0A43EC 7F06F8BC 44814000 */ mtc1 $at, $f8 -/* 0A43F0 7F06F8C0 E4840088 */ swc1 $f4, 0x88($a0) -/* 0A43F4 7F06F8C4 E486008C */ swc1 $f6, 0x8c($a0) -/* 0A43F8 7F06F8C8 10000005 */ b .L7F06F8E0 -/* 0A43FC 7F06F8CC E4880084 */ swc1 $f8, 0x84($a0) -.L7F06F8D0: -/* 0A4400 7F06F8D0 44805000 */ mtc1 $zero, $f10 -/* 0A4404 7F06F8D4 44802000 */ mtc1 $zero, $f4 -/* 0A4408 7F06F8D8 E62A0088 */ swc1 $f10, 0x88($s1) -/* 0A440C 7F06F8DC E6240084 */ swc1 $f4, 0x84($s1) -.L7F06F8E0: -/* 0A4410 7F06F8E0 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0A4414 7F06F8E4 44813000 */ mtc1 $at, $f6 -/* 0A4418 7F06F8E8 AE270020 */ sw $a3, 0x20($s1) -/* 0A441C 7F06F8EC A2260024 */ sb $a2, 0x24($s1) -/* 0A4420 7F06F8F0 E626003C */ swc1 $f6, 0x3c($s1) -/* 0A4424 7F06F8F4 C7A800A0 */ lwc1 $f8, 0xa0($sp) -/* 0A4428 7F06F8F8 44805000 */ mtc1 $zero, $f10 -/* 0A442C 7F06F8FC 02202025 */ move $a0, $s1 -/* 0A4430 7F06F900 E6280040 */ swc1 $f8, 0x40($s1) -/* 0A4434 7F06F904 0FC1BFD9 */ jal modelSetAnimFrame -/* 0A4438 7F06F908 E62A004C */ swc1 $f10, 0x4c($s1) -/* 0A443C 7F06F90C 8E390008 */ lw $t9, 8($s1) -/* 0A4440 7F06F910 A2200026 */ sb $zero, 0x26($s1) -/* 0A4444 7F06F914 24010001 */ li $at, 1 -/* 0A4448 7F06F918 8F250000 */ lw $a1, ($t9) -/* 0A444C 7F06F91C 94A20000 */ lhu $v0, ($a1) -/* 0A4450 7F06F920 304800FF */ andi $t0, $v0, 0xff -/* 0A4454 7F06F924 550100C5 */ bnel $t0, $at, .L7F06FC3C -/* 0A4458 7F06F928 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A445C 7F06F92C 8CA90004 */ lw $t1, 4($a1) -/* 0A4460 7F06F930 02202025 */ move $a0, $s1 -/* 0A4464 7F06F934 0FC1B1E7 */ jal modelGetNodeRwData -/* 0A4468 7F06F938 AFA90080 */ sw $t1, 0x80($sp) -/* 0A446C 7F06F93C 3C0C8003 */ lui $t4, %hi(D_80036244) -/* 0A4470 7F06F940 8FAA0080 */ lw $t2, 0x80($sp) -/* 0A4474 7F06F944 8E2B0008 */ lw $t3, 8($s1) -/* 0A4478 7F06F948 258C6244 */ addiu $t4, %lo(D_80036244) # addiu $t4, $t4, 0x6244 -/* 0A447C 7F06F94C 8D810000 */ lw $at, ($t4) -/* 0A4480 7F06F950 C6240014 */ lwc1 $f4, 0x14($s1) -/* 0A4484 7F06F954 C62600B8 */ lwc1 $f6, 0xb8($s1) -/* 0A4488 7F06F958 27A3005C */ addiu $v1, $sp, 0x5c -/* 0A448C 7F06F95C 95440000 */ lhu $a0, ($t2) -/* 0A4490 7F06F960 8D660004 */ lw $a2, 4($t3) -/* 0A4494 7F06F964 AC610000 */ sw $at, ($v1) -/* 0A4498 7F06F968 8D8F0004 */ lw $t7, 4($t4) -/* 0A449C 7F06F96C 46062082 */ mul.s $f2, $f4, $f6 -/* 0A44A0 7F06F970 00408025 */ move $s0, $v0 -/* 0A44A4 7F06F974 AC6F0004 */ sw $t7, 4($v1) -/* 0A44A8 7F06F978 8D810008 */ lw $at, 8($t4) -/* 0A44AC 7F06F97C AC610008 */ sw $at, 8($v1) -/* 0A44B0 7F06F980 86380032 */ lh $t8, 0x32($s1) -/* 0A44B4 7F06F984 8E270020 */ lw $a3, 0x20($s1) -/* 0A44B8 7F06F988 82250024 */ lb $a1, 0x24($s1) -/* 0A44BC 7F06F98C E7A20070 */ swc1 $f2, 0x70($sp) -/* 0A44C0 7F06F990 AFA30014 */ sw $v1, 0x14($sp) -/* 0A44C4 7F06F994 0FC1B4FD */ jal sub_GAME_7F06D3F4 -/* 0A44C8 7F06F998 AFB80010 */ sw $t8, 0x10($sp) -/* 0A44CC 7F06F99C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0A44D0 7F06F9A0 C7A20070 */ lwc1 $f2, 0x70($sp) -/* 0A44D4 7F06F9A4 44814000 */ mtc1 $at, $f8 -/* 0A44D8 7F06F9A8 E7A00058 */ swc1 $f0, 0x58($sp) -/* 0A44DC 7F06F9AC C7AA005C */ lwc1 $f10, 0x5c($sp) -/* 0A44E0 7F06F9B0 46081032 */ c.eq.s $f2, $f8 -/* 0A44E4 7F06F9B4 00000000 */ nop -/* 0A44E8 7F06F9B8 45010009 */ bc1t .L7F06F9E0 -/* 0A44EC 7F06F9BC 00000000 */ nop -/* 0A44F0 7F06F9C0 46025102 */ mul.s $f4, $f10, $f2 -/* 0A44F4 7F06F9C4 C7A60060 */ lwc1 $f6, 0x60($sp) -/* 0A44F8 7F06F9C8 C7AA0064 */ lwc1 $f10, 0x64($sp) -/* 0A44FC 7F06F9CC 46023202 */ mul.s $f8, $f6, $f2 -/* 0A4500 7F06F9D0 E7A4005C */ swc1 $f4, 0x5c($sp) -/* 0A4504 7F06F9D4 46025102 */ mul.s $f4, $f10, $f2 -/* 0A4508 7F06F9D8 E7A80060 */ swc1 $f8, 0x60($sp) -/* 0A450C 7F06F9DC E7A40064 */ swc1 $f4, 0x64($sp) -.L7F06F9E0: -/* 0A4510 7F06F9E0 0FC15FA8 */ jal cosf -/* 0A4514 7F06F9E4 C60C0014 */ lwc1 $f12, 0x14($s0) -/* 0A4518 7F06F9E8 C60C0014 */ lwc1 $f12, 0x14($s0) -/* 0A451C 7F06F9EC 0FC15FAB */ jal sinf -/* 0A4520 7F06F9F0 E7A0006C */ swc1 $f0, 0x6c($sp) -/* 0A4524 7F06F9F4 C622002C */ lwc1 $f2, 0x2c($s1) -/* 0A4528 7F06F9F8 44803000 */ mtc1 $zero, $f6 -/* 0A452C 7F06F9FC C7B2006C */ lwc1 $f18, 0x6c($sp) -/* 0A4530 7F06FA00 24190001 */ li $t9, 1 -/* 0A4534 7F06FA04 46023032 */ c.eq.s $f6, $f2 -/* 0A4538 7F06FA08 C7A60064 */ lwc1 $f6, 0x64($sp) -/* 0A453C 7F06FA0C C7AA005C */ lwc1 $f10, 0x5c($sp) -/* 0A4540 7F06FA10 45000032 */ bc1f .L7F06FADC -/* 0A4544 7F06FA14 00000000 */ nop -/* 0A4548 7F06FA18 C608000C */ lwc1 $f8, 0xc($s0) -/* 0A454C 7F06FA1C C60A0004 */ lwc1 $f10, 4($s0) -/* 0A4550 7F06FA20 C6020008 */ lwc1 $f2, 8($s0) -/* 0A4554 7F06FA24 C6060010 */ lwc1 $f6, 0x10($s0) -/* 0A4558 7F06FA28 460A4101 */ sub.s $f4, $f8, $f10 -/* 0A455C 7F06FA2C C6080014 */ lwc1 $f8, 0x14($s0) -/* 0A4560 7F06FA30 E6020034 */ swc1 $f2, 0x34($s0) -/* 0A4564 7F06FA34 E606003C */ swc1 $f6, 0x3c($s0) -/* 0A4568 7F06FA38 E6040038 */ swc1 $f4, 0x38($s0) -/* 0A456C 7F06FA3C E6080030 */ swc1 $f8, 0x30($s0) -/* 0A4570 7F06FA40 C7AA0064 */ lwc1 $f10, 0x64($sp) -/* 0A4574 7F06FA44 C7A6005C */ lwc1 $f6, 0x5c($sp) -/* 0A4578 7F06FA48 46005102 */ mul.s $f4, $f10, $f0 -/* 0A457C 7F06FA4C 00000000 */ nop -/* 0A4580 7F06FA50 46123202 */ mul.s $f8, $f6, $f18 -/* 0A4584 7F06FA54 46081200 */ add.s $f8, $f2, $f8 -/* 0A4588 7F06FA58 46003182 */ mul.s $f6, $f6, $f0 -/* 0A458C 7F06FA5C 46082100 */ add.s $f4, $f4, $f8 -/* 0A4590 7F06FA60 C7A80060 */ lwc1 $f8, 0x60($sp) -/* 0A4594 7F06FA64 E7A4004C */ swc1 $f4, 0x4c($sp) -/* 0A4598 7F06FA68 E7A80050 */ swc1 $f8, 0x50($sp) -/* 0A459C 7F06FA6C C608003C */ lwc1 $f8, 0x3c($s0) -/* 0A45A0 7F06FA70 46064201 */ sub.s $f8, $f8, $f6 -/* 0A45A4 7F06FA74 46125182 */ mul.s $f6, $f10, $f18 -/* 0A45A8 7F06FA78 46083280 */ add.s $f10, $f6, $f8 -/* 0A45AC 7F06FA7C E7AA0054 */ swc1 $f10, 0x54($sp) -/* 0A45B0 7F06FA80 E6040024 */ swc1 $f4, 0x24($s0) -/* 0A45B4 7F06FA84 C6040018 */ lwc1 $f4, 0x18($s0) -/* 0A45B8 7F06FA88 44805000 */ mtc1 $zero, $f10 -/* 0A45BC 7F06FA8C C7A60050 */ lwc1 $f6, 0x50($sp) -/* 0A45C0 7F06FA90 46045032 */ c.eq.s $f10, $f4 -/* 0A45C4 7F06FA94 E6060028 */ swc1 $f6, 0x28($s0) -/* 0A45C8 7F06FA98 C7A80054 */ lwc1 $f8, 0x54($sp) -/* 0A45CC 7F06FA9C 4500000D */ bc1f .L7F06FAD4 -/* 0A45D0 7F06FAA0 E608002C */ swc1 $f8, 0x2c($s0) -/* 0A45D4 7F06FAA4 C6060030 */ lwc1 $f6, 0x30($s0) -/* 0A45D8 7F06FAA8 C7A80058 */ lwc1 $f8, 0x58($sp) -/* 0A45DC 7F06FAAC 3C018005 */ lui $at, %hi(D_80054D40) -/* 0A45E0 7F06FAB0 C4224D40 */ lwc1 $f2, %lo(D_80054D40)($at) -/* 0A45E4 7F06FAB4 46083000 */ add.s $f0, $f6, $f8 -/* 0A45E8 7F06FAB8 4600103E */ c.le.s $f2, $f0 -/* 0A45EC 7F06FABC E6000020 */ swc1 $f0, 0x20($s0) -/* 0A45F0 7F06FAC0 45000004 */ bc1f .L7F06FAD4 -/* 0A45F4 7F06FAC4 00000000 */ nop -/* 0A45F8 7F06FAC8 C60A0020 */ lwc1 $f10, 0x20($s0) -/* 0A45FC 7F06FACC 46025101 */ sub.s $f4, $f10, $f2 -/* 0A4600 7F06FAD0 E6040020 */ swc1 $f4, 0x20($s0) -.L7F06FAD4: -/* 0A4604 7F06FAD4 10000053 */ b .L7F06FC24 -/* 0A4608 7F06FAD8 A2190001 */ sb $t9, 1($s0) -.L7F06FADC: -/* 0A460C 7F06FADC 46003202 */ mul.s $f8, $f6, $f0 -/* 0A4610 7F06FAE0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0A4614 7F06FAE4 C7B00060 */ lwc1 $f16, 0x60($sp) -/* 0A4618 7F06FAE8 46125102 */ mul.s $f4, $f10, $f18 -/* 0A461C 7F06FAEC 46044380 */ add.s $f14, $f8, $f4 -/* 0A4620 7F06FAF0 46123202 */ mul.s $f8, $f6, $f18 -/* 0A4624 7F06FAF4 46005107 */ neg.s $f4, $f10 -/* 0A4628 7F06FAF8 46002182 */ mul.s $f6, $f4, $f0 -/* 0A462C 7F06FAFC 46064280 */ add.s $f10, $f8, $f6 -/* 0A4630 7F06FB00 44814000 */ mtc1 $at, $f8 -/* 0A4634 7F06FB04 00000000 */ nop -/* 0A4638 7F06FB08 46024181 */ sub.s $f6, $f8, $f2 -/* 0A463C 7F06FB0C E7AA0030 */ swc1 $f10, 0x30($sp) -/* 0A4640 7F06FB10 C6040008 */ lwc1 $f4, 8($s0) -/* 0A4644 7F06FB14 E7B00044 */ swc1 $f16, 0x44($sp) -/* 0A4648 7F06FB18 46067202 */ mul.s $f8, $f14, $f6 -/* 0A464C 7F06FB1C 46082180 */ add.s $f6, $f4, $f8 -/* 0A4650 7F06FB20 44812000 */ mtc1 $at, $f4 -/* 0A4654 7F06FB24 E7A60040 */ swc1 $f6, 0x40($sp) -/* 0A4658 7F06FB28 C628002C */ lwc1 $f8, 0x2c($s1) -/* 0A465C 7F06FB2C 46082181 */ sub.s $f6, $f4, $f8 -/* 0A4660 7F06FB30 C6080010 */ lwc1 $f8, 0x10($s0) -/* 0A4664 7F06FB34 46065102 */ mul.s $f4, $f10, $f6 -/* 0A4668 7F06FB38 C7A60040 */ lwc1 $f6, 0x40($sp) -/* 0A466C 7F06FB3C 46044280 */ add.s $f10, $f8, $f4 -/* 0A4670 7F06FB40 E7AA0048 */ swc1 $f10, 0x48($sp) -/* 0A4674 7F06FB44 E6060024 */ swc1 $f6, 0x24($s0) -/* 0A4678 7F06FB48 C7A80044 */ lwc1 $f8, 0x44($sp) -/* 0A467C 7F06FB4C C60A0024 */ lwc1 $f10, 0x24($s0) -/* 0A4680 7F06FB50 E6080028 */ swc1 $f8, 0x28($s0) -/* 0A4684 7F06FB54 C7A40048 */ lwc1 $f4, 0x48($sp) -/* 0A4688 7F06FB58 C608000C */ lwc1 $f8, 0xc($s0) -/* 0A468C 7F06FB5C 460E5181 */ sub.s $f6, $f10, $f14 -/* 0A4690 7F06FB60 E604002C */ swc1 $f4, 0x2c($s0) -/* 0A4694 7F06FB64 C6040004 */ lwc1 $f4, 4($s0) -/* 0A4698 7F06FB68 E6060034 */ swc1 $f6, 0x34($s0) -/* 0A469C 7F06FB6C 46044301 */ sub.s $f12, $f8, $f4 -/* 0A46A0 7F06FB70 C622002C */ lwc1 $f2, 0x2c($s1) -/* 0A46A4 7F06FB74 44814000 */ mtc1 $at, $f8 -/* 0A46A8 7F06FB78 3C018005 */ lui $at, %hi(D_80054D44) -/* 0A46AC 7F06FB7C 460C8281 */ sub.s $f10, $f16, $f12 -/* 0A46B0 7F06FB80 46024101 */ sub.s $f4, $f8, $f2 -/* 0A46B4 7F06FB84 46025182 */ mul.s $f6, $f10, $f2 -/* 0A46B8 7F06FB88 46043283 */ div.s $f10, $f6, $f4 -/* 0A46BC 7F06FB8C C606002C */ lwc1 $f6, 0x2c($s0) -/* 0A46C0 7F06FB90 460A6201 */ sub.s $f8, $f12, $f10 -/* 0A46C4 7F06FB94 C60C0014 */ lwc1 $f12, 0x14($s0) -/* 0A46C8 7F06FB98 E6080038 */ swc1 $f8, 0x38($s0) -/* 0A46CC 7F06FB9C C7A40030 */ lwc1 $f4, 0x30($sp) -/* 0A46D0 7F06FBA0 46043281 */ sub.s $f10, $f6, $f4 -/* 0A46D4 7F06FBA4 44803000 */ mtc1 $zero, $f6 -/* 0A46D8 7F06FBA8 E60A003C */ swc1 $f10, 0x3c($s0) -/* 0A46DC 7F06FBAC C7A80058 */ lwc1 $f8, 0x58($sp) -/* 0A46E0 7F06FBB0 46086381 */ sub.s $f14, $f12, $f8 -/* 0A46E4 7F06FBB4 4606703C */ c.lt.s $f14, $f6 -/* 0A46E8 7F06FBB8 00000000 */ nop -/* 0A46EC 7F06FBBC 45000003 */ bc1f .L7F06FBCC -/* 0A46F0 7F06FBC0 00000000 */ nop -/* 0A46F4 7F06FBC4 C4244D44 */ lwc1 $f4, %lo(D_80054D44)($at) -/* 0A46F8 7F06FBC8 46047380 */ add.s $f14, $f14, $f4 -.L7F06FBCC: -/* 0A46FC 7F06FBCC 0FC1B433 */ jal sub_GAME_7F06D0CC -/* 0A4700 7F06FBD0 8E26002C */ lw $a2, 0x2c($s1) -/* 0A4704 7F06FBD4 44805000 */ mtc1 $zero, $f10 -/* 0A4708 7F06FBD8 C6080018 */ lwc1 $f8, 0x18($s0) -/* 0A470C 7F06FBDC 3C018005 */ lui $at, %hi(D_80054D48) -/* 0A4710 7F06FBE0 C4224D48 */ lwc1 $f2, %lo(D_80054D48)($at) -/* 0A4714 7F06FBE4 46085032 */ c.eq.s $f10, $f8 -/* 0A4718 7F06FBE8 E6000030 */ swc1 $f0, 0x30($s0) -/* 0A471C 7F06FBEC C7A40058 */ lwc1 $f4, 0x58($sp) -/* 0A4720 7F06FBF0 24080001 */ li $t0, 1 -/* 0A4724 7F06FBF4 4502000B */ bc1fl .L7F06FC24 -/* 0A4728 7F06FBF8 A2080001 */ sb $t0, 1($s0) -/* 0A472C 7F06FBFC C6060030 */ lwc1 $f6, 0x30($s0) -/* 0A4730 7F06FC00 46043000 */ add.s $f0, $f6, $f4 -/* 0A4734 7F06FC04 4600103E */ c.le.s $f2, $f0 -/* 0A4738 7F06FC08 E6000020 */ swc1 $f0, 0x20($s0) -/* 0A473C 7F06FC0C 45020005 */ bc1fl .L7F06FC24 -/* 0A4740 7F06FC10 A2080001 */ sb $t0, 1($s0) -/* 0A4744 7F06FC14 C60A0020 */ lwc1 $f10, 0x20($s0) -/* 0A4748 7F06FC18 46025201 */ sub.s $f8, $f10, $f2 -/* 0A474C 7F06FC1C E6080020 */ swc1 $f8, 0x20($s0) -/* 0A4750 7F06FC20 A2080001 */ sb $t0, 1($s0) -.L7F06FC24: -/* 0A4754 7F06FC24 8FA9002C */ lw $t1, 0x2c($sp) -/* 0A4758 7F06FC28 51200004 */ beql $t1, $zero, .L7F06FC3C -/* 0A475C 7F06FC2C 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A4760 7F06FC30 C6060028 */ lwc1 $f6, 0x28($s0) -/* 0A4764 7F06FC34 E6060038 */ swc1 $f6, 0x38($s0) -/* 0A4768 7F06FC38 8FBF0024 */ lw $ra, 0x24($sp) -.L7F06FC3C: -/* 0A476C 7F06FC3C 8FB0001C */ lw $s0, 0x1c($sp) -/* 0A4770 7F06FC40 8FB10020 */ lw $s1, 0x20($sp) -/* 0A4774 7F06FC44 03E00008 */ jr $ra -/* 0A4778 7F06FC48 27BD0090 */ addiu $sp, $sp, 0x90 -) -#endif void modelSetAnimationWithMerge(Model *model, ModelAnimation *modelAnimation, s32 flip, f32 startframe, f32 speed, f32 timemerge, s32 domerge) { @@ -4184,103 +2653,40 @@ void modelSetAnimationWithMerge(Model *model, ModelAnimation *modelAnimation, s3 } - void modelSetAnimation(Model *model, ModelAnimation *modelAnimation, s32 flip, f32 startframe, f32 speed, f32 merge) { modelCopyAnimForMerge(model, merge); modelSetAnimation2(model, modelAnimation, flip, startframe, speed, merge); } -#ifdef NONMATCHING -void sub_GAME_7F06FCFC(s32 arg0, void *arg1) +/* + * Match-only overlay types for sub_GAME_7F06FCFC. + */ +typedef struct ModelCopyHead { + u32 words[8]; // 0x00-0x1f +} ModelCopyHead; + + +typedef struct ModelCopyBc { + u32 words[0x2f]; // 0x00-0xbb +} ModelCopyBc; + + +/** + * Unreferenced. + * + * The function copies the Model data through anim_translation_scale (0x00-0xbb), + * then restores the destination's base/resource fields (0x00-0x1f). + * Maybe some kind of old/abandoned anim copy function. + */ +void sub_GAME_7F06FCFC(Model *src, Model *dst) { - void *temp_t2; - void *temp_t3; + ModelCopyHead tmp; - sp->unk0 = arg1->unk0; - sp->unk4 = arg1->unk4; - sp->unk8 = arg1->unk8; - sp->unkC = arg1->unkC; - sp->unk10 = arg1->unk10; - sp->unk14 = arg1->unk14; - sp->unk18 = arg1->unk18; - sp->unk1C = arg1->unk1C; - M2C_MEMCPY_ALIGNED(arg1, arg0, 0xB4); - temp_t3 = arg1 + 0xB4; - temp_t2 = arg0 + 0xB4; - temp_t3->unk0 = temp_t2->unk0; - temp_t3->unk4 = temp_t2->unk4; - arg1->unk0 = sp->unk0; - arg1->unk4 = sp->unk4; - arg1->unk8 = sp->unk8; - arg1->unkC = sp->unkC; - arg1->unk10 = sp->unk10; - arg1->unk14 = sp->unk14; - arg1->unk18 = sp->unk18; - arg1->unk1C = sp->unk1C; + tmp = *(ModelCopyHead *)dst; + *(ModelCopyBc *)dst = *(ModelCopyBc *)src; + *(ModelCopyHead *)dst = tmp; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F06FCFC -/* 0A482C 7F06FCFC 8CA10000 */ lw $at, ($a1) -/* 0A4830 7F06FD00 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0A4834 7F06FD04 27A20000 */ addiu $v0, $sp, 0 -/* 0A4838 7F06FD08 AC410000 */ sw $at, ($v0) -/* 0A483C 7F06FD0C 8CB80004 */ lw $t8, 4($a1) -/* 0A4840 7F06FD10 00805025 */ move $t2, $a0 -/* 0A4844 7F06FD14 00A05825 */ move $t3, $a1 -/* 0A4848 7F06FD18 AC580004 */ sw $t8, 4($v0) -/* 0A484C 7F06FD1C 8CA10008 */ lw $at, 8($a1) -/* 0A4850 7F06FD20 248900B4 */ addiu $t1, $a0, 0xb4 -/* 0A4854 7F06FD24 AC410008 */ sw $at, 8($v0) -/* 0A4858 7F06FD28 8CB8000C */ lw $t8, 0xc($a1) -/* 0A485C 7F06FD2C AC58000C */ sw $t8, 0xc($v0) -/* 0A4860 7F06FD30 8CA10010 */ lw $at, 0x10($a1) -/* 0A4864 7F06FD34 AC410010 */ sw $at, 0x10($v0) -/* 0A4868 7F06FD38 8CB80014 */ lw $t8, 0x14($a1) -/* 0A486C 7F06FD3C AC580014 */ sw $t8, 0x14($v0) -/* 0A4870 7F06FD40 8CA10018 */ lw $at, 0x18($a1) -/* 0A4874 7F06FD44 AC410018 */ sw $at, 0x18($v0) -/* 0A4878 7F06FD48 8CB8001C */ lw $t8, 0x1c($a1) -/* 0A487C 7F06FD4C AC58001C */ sw $t8, 0x1c($v0) -.L7F06FD50: -/* 0A4880 7F06FD50 8D410000 */ lw $at, ($t2) -/* 0A4884 7F06FD54 254A000C */ addiu $t2, $t2, 0xc -/* 0A4888 7F06FD58 256B000C */ addiu $t3, $t3, 0xc -/* 0A488C 7F06FD5C AD61FFF4 */ sw $at, -0xc($t3) -/* 0A4890 7F06FD60 8D41FFF8 */ lw $at, -8($t2) -/* 0A4894 7F06FD64 AD61FFF8 */ sw $at, -8($t3) -/* 0A4898 7F06FD68 8D41FFFC */ lw $at, -4($t2) -/* 0A489C 7F06FD6C 1549FFF8 */ bne $t2, $t1, .L7F06FD50 -/* 0A48A0 7F06FD70 AD61FFFC */ sw $at, -4($t3) -/* 0A48A4 7F06FD74 8D410000 */ lw $at, ($t2) -/* 0A48A8 7F06FD78 AD610000 */ sw $at, ($t3) -/* 0A48AC 7F06FD7C 8D490004 */ lw $t1, 4($t2) -/* 0A48B0 7F06FD80 AD690004 */ sw $t1, 4($t3) -/* 0A48B4 7F06FD84 8C410000 */ lw $at, ($v0) -/* 0A48B8 7F06FD88 ACA10000 */ sw $at, ($a1) -/* 0A48BC 7F06FD8C 8C4F0004 */ lw $t7, 4($v0) -/* 0A48C0 7F06FD90 ACAF0004 */ sw $t7, 4($a1) -/* 0A48C4 7F06FD94 8C410008 */ lw $at, 8($v0) -/* 0A48C8 7F06FD98 ACA10008 */ sw $at, 8($a1) -/* 0A48CC 7F06FD9C 8C4F000C */ lw $t7, 0xc($v0) -/* 0A48D0 7F06FDA0 ACAF000C */ sw $t7, 0xc($a1) -/* 0A48D4 7F06FDA4 8C410010 */ lw $at, 0x10($v0) -/* 0A48D8 7F06FDA8 ACA10010 */ sw $at, 0x10($a1) -/* 0A48DC 7F06FDAC 8C4F0014 */ lw $t7, 0x14($v0) -/* 0A48E0 7F06FDB0 ACAF0014 */ sw $t7, 0x14($a1) -/* 0A48E4 7F06FDB4 8C410018 */ lw $at, 0x18($v0) -/* 0A48E8 7F06FDB8 ACA10018 */ sw $at, 0x18($a1) -/* 0A48EC 7F06FDBC 8C4F001C */ lw $t7, 0x1c($v0) -/* 0A48F0 7F06FDC0 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0A48F4 7F06FDC4 03E00008 */ jr $ra -/* 0A48F8 7F06FDC8 ACAF001C */ sw $t7, 0x1c($a1) -) -#endif - - - void modelSetAnimLooping(Model *model, f32 loopframe, f32 loopmerge) { @@ -4300,7 +2706,7 @@ void modelSetAnimEndFrame(Model *model, f32 endframe) { } #ifdef DEBUG // not too sure why debug wants to call this - must have some significance when most debug has been stripped from this file in XBLA - modelSetAnimFrame(model, (int)model->unk28); + modelSetAnimFrame(model, (int)model->animframe1); #endif } @@ -4343,7 +2749,7 @@ void sub_GAME_7F06FE90(Model *model, f32 arg1, f32 arg2) f32 phi_f2; f32 t; - temp_f0 = model->unk28; + temp_f0 = model->animframe1; if (temp_f0 <= arg1) { @@ -4393,19 +2799,19 @@ void modelSetAnimFrame(Model* model, f32 frame) if (model->framea == model->frameb) { model->unk2c = 0.0f; - model->unk28 = model->framea; + model->animframe1 = model->framea; } else if (forwards) { f32 tmp = frame - framea; model->unk2c = tmp; - model->unk28 = model->framea + tmp; + model->animframe1 = model->framea + tmp; } else { f32 tmp = 1.0f - (frame - (f32) frameb); model->unk2c = tmp; - model->unk28 = model->frameb + (1.0f - tmp); + model->animframe1 = model->frameb + (1.0f - tmp); } } @@ -4431,19 +2837,19 @@ void modelSetAnimFrame2(Model* model, f32 frame1, f32 frame2) if (model->frame2a == model->frame2b) { model->unk5c = 0.0f; - model->unk58 = model->frame2a; + model->animframe2 = model->frame2a; } else if (forwards != 0) { f32 tmp = frame2 - framea; model->unk5c = tmp; - model->unk58 = model->frame2a + tmp; + model->animframe2 = model->frame2a + tmp; } else { f32 tmp = 1.0f - (frame2 - (f32) frameb); model->unk5c = tmp; - model->unk58 = model->frame2b + (1.0f - tmp); + model->animframe2 = model->frame2b + (1.0f - tmp); } } } @@ -4467,1322 +2873,570 @@ u32 modelIsAnimMergingEnabled(void) } - - -#ifdef NONMATCHING -void modelSetAnimFrame2WithChrStuff(void *arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4) +void modelSetAnimFrame2WithChrStuff(Model *model, f32 framea, f32 frameb, f32 frame2a, f32 frame2b) { - s32 spE4; - s32 spE0; - f32 spDC; - f32 spD0; - f32 spCC; - f32 spC8; - s32 spB8; - f32 spB4; - f32 spB0; - f32 spAC; - f32 spA4; - f32 spA0; - f32 sp9C; - f32 sp98; - s32 sp94; - f32 sp88; - f32 sp84; - f32 sp7C; - s32 sp6C; - f32 temp_f0; - f32 temp_f0_10; - f32 temp_f0_11; - f32 temp_f0_2; - f32 temp_f0_3; - f32 temp_f0_4; - f32 temp_f0_5; - f32 temp_f0_6; - f32 temp_f0_7; - f32 temp_f0_8; - f32 temp_f0_9; - f32 temp_f10; - f32 temp_f20; - f32 temp_f20_2; - f32 temp_f2; - f32 temp_f2_2; - f32 temp_f8; - f32 temp_f8_2; - f32 var_f0; - f32 var_f0_2; - f32 var_f12; - f32 var_f22; - f32 var_f22_2; - f32 var_f28; - f32 var_f30; - f32 var_f8; - s16 temp_v0_2; - s16 temp_v0_3; - s16 temp_v0_4; - s16 temp_v0_6; - s16 temp_v1; - s32 temp_s2_2; - s32 temp_v0_5; - s32 var_s2; - s32 var_s3; - s32 var_v0; - u16 *temp_s2; - void *partdesc; - void *temp_v0; + Model *modelptr; + ModelRwData_HeaderRecord *header; + ModelNode *root; + ModelNode *node; + s32 jointnum; + ModelSkeleton *skeleton; + f32 scale; + s32 curframe; + f32 speed; + coord3d pos; + f32 anglecur; + f32 cosangle; + s32 vb; + s32 endframe; + coord3d pos34; + s32 forward; + coord3d pos24; + f32 angle20; + s32 flag; + f32 angledelta; + f32 sinangle; + f32 speed2; + f32 v[3]; + s32 framenum; + s32 va; + f32 inv; + s32 end2; - partdesc = *arg0->unk8; - if ((partdesc->unk0 & 0xFF) == 1) + modelptr = model; + root = modelptr->obj->RootNode; + va = root->Opcode; + + if ((va & 0xff) == 1) { - temp_s2 = partdesc->unk4; - temp_v0 = modelGetNodeRwData(partdesc); - if (temp_v0->unk0 == 0) + node = (ModelNode *) root->Data; + header = (ModelRwData_HeaderRecord *) modelGetNodeRwData(modelptr, root); + + if (header->unk00 == 0) { - spE4 = *temp_s2; - spE0 = arg0->unk8->unk4; // skeleton - spDC = arg0->unk14 * arg0->unkB8; - spC8.unk0 = D_80036254.unk0; - spC8.unk4 = D_80036254.unk4; - spC8.unk8 = D_80036254.unk8; - spAC = temp_v0->unk34; - spB0 = temp_v0->unk38; - spB4 = temp_v0->unk3C; - var_f28 = temp_v0->unk30; - sp9C = temp_v0->unk24; - spA0 = temp_v0->unk28; - spA4 = temp_v0->unk2C; - sp98 = temp_v0->unk20; - sp94 = temp_v0->unk1; - var_f30 = arg0->unk40; - if (var_f30 < 0.0f) + jointnum = node->Opcode; + skeleton = modelptr->obj->Skeleton; + scale = modelptr->scale * modelptr->anim_translation_scale; + pos = D_80036254; + + pos34.f[0] = header->unk34.x; + pos34.f[1] = header->unk34.y; + pos34.f[2] = header->unk34.z; + anglecur = header->unk30; + pos24.f[0] = header->unk24.x; + pos24.f[1] = header->unk24.y; + pos24.f[2] = header->unk24.z; + angle20 = header->unk20; + flag = header->unk01; + + speed = modelptr->speed; + + if (speed < 0.0f) { - var_f30 = -var_f30; + speed = -speed; } - var_f0 = arg0->unk70; - if (var_f0 < 0.0f) + + speed2 = modelptr->speed2; + + if (speed2 < 0.0f) { - var_f0 = -var_f0; + speed2 = -speed2; } - var_s3 = 0; - if (arg1 <= arg2) + + forward = 0; + + if (framea <= frameb) { - var_s3 = 1; + forward = 1; } - if (var_s3 != 0) + + if (forward) { - sp88 = var_f0; - var_s2 = floorFloatToInt(arg1) + 1; - var_v0 = floorFloatToInt(arg2); + curframe = floorFloatToInt(framea) + 1; + endframe = floorFloatToInt(frameb); } else { - sp88 = var_f0; - var_s2 = ceilFloatToInt(arg1) - 1; - var_v0 = ceilFloatToInt(arg2); + curframe = ceilFloatToInt(framea) - 1; + endframe = ceilFloatToInt(frameb); } - spB8 = var_v0; -loop_12: - if (var_s3 != 0) + + while (1) { - if (spB8 < var_s2) + if (forward) { - } - else - { - goto block_16; - } - } - else if (var_s2 >= spB8) - { -block_16: - temp_v0_2 = modelConstrainOrWrapAnimFrame(var_s2, arg0->unk20, arg0->unk3C, spB8); - arg0->unk30 = temp_v0_2; - if (sp94 != 0) - { - spAC = sp9C; - spB0 = spA0; - spB4 = spA4; - if (temp_v0->unk18 == 0.0f) + if (endframe < curframe) { - var_f28 = sp98; + break; } } else { - temp_f0 = sub_GAME_7F06D3F4(spE4, arg0->unk24, spE0, arg0->unk20, temp_v0_2, &spC8); - var_f22 = temp_f0; - if (spDC != 1.0f) + if (curframe < endframe) { - spC8 *= spDC; - spCC *= spDC; - spD0 *= spDC; - } - if (var_s3 == 0) - { - spC8 = -spC8; - spD0 = -spD0; - if (temp_f0 > 0.0f) - { - var_f22 = 6.2831855f - temp_f0; - } - } - temp_f20 = cosf(temp_v0->unk14); - temp_f0_2 = sinf(temp_v0->unk14); - temp_f8 = spAC + ((spC8 * temp_f20) + (spD0 * temp_f0_2)); - spB0 = spCC; - spAC = temp_f8; - spB4 += (-spC8 * temp_f0_2) + (spD0 * temp_f20); - if (temp_v0->unk18 == 0.0f) - { - var_f28 += var_f22; - if (var_f28 >= 6.2831855f) - { - var_f28 -= 6.2831855f; - } + break; } } - if (var_s3 != 0) + + framenum = modelConstrainOrWrapAnimFrame(curframe, modelptr->anim, modelptr->endframe); + modelptr->framea = framenum; + + if (flag) { - var_s2 += 1; + pos34.f[0] = pos24.f[0]; + pos34.f[1] = pos24.f[1]; + pos34.f[2] = pos24.f[2]; + + if (header->unk18 == 0.0f) + { + anglecur = angle20; + } } else { - var_s2 -= 1; - } - temp_v0_3 = modelConstrainOrWrapAnimFrame(var_s2, arg0->unk20, arg0->unk3C); - arg0->unk32 = temp_v0_3; - if (arg0->unk30 != arg0->unk32) - { - sp94 = 1; - temp_f0_3 = sub_GAME_7F06D3F4(spE4, arg0->unk24, spE0, arg0->unk20, temp_v0_3, &spC8); - var_f22_2 = temp_f0_3; - if (spDC != 1.0f) + angledelta = sub_GAME_7F06D3F4(jointnum, modelptr->gunhand, skeleton, modelptr->anim, framenum, &pos); + + if (scale != 1.0f) { - spC8 *= spDC; - spCC *= spDC; - spD0 *= spDC; + pos.x *= scale; + pos.y *= scale; + pos.z *= scale; } - if (var_s3 == 0) + + if (!forward) { - spC8 = -spC8; - spD0 = -spD0; - if (temp_f0_3 > 0.0f) + pos.x = -pos.x; + pos.z = -pos.z; + + if (0.0f < angledelta) { - var_f22_2 = 6.2831855f - temp_f0_3; + angledelta = M_TAU_F - angledelta; } } - temp_f20_2 = cosf(temp_v0->unk30); - temp_f0_4 = sinf(temp_v0->unk30); - if ((g_ModelAnimMergingEnabled != 0) && (arg0->unk54 != 0)) + + cosangle = cosf(header->unk14); + sinangle = sinf(header->unk14); + + pos34.f[0] += (pos.x * cosangle) + (pos.z * sinangle); + pos34.f[1] = pos.y; + pos34.f[2] += (-pos.x * sinangle) + (pos.z * cosangle); + + if (header->unk18 == 0.0f) { - sp9C = (spD0 * temp_f0_4) + (spC8 * temp_f20_2); - spA4 = (spD0 * temp_f20_2) + (-spC8 * temp_f0_4); - if (var_f30 > 0.0f) + anglecur += angledelta; + + if (M_TAU_F <= anglecur) { - temp_f2 = arg0->unk84; - var_f0_2 = temp_f2 - (arg0->unkA4 / (var_f30 * arg0->unk88)); - if (var_f0_2 < 0.0f) + anglecur -= M_TAU_F; + } + } + } + + if (forward) + { + curframe += 1; + } + else + { + curframe -= 1; + } + + framenum = modelConstrainOrWrapAnimFrame(curframe, modelptr->anim, modelptr->endframe); + modelptr->frameb = framenum; + + if (modelptr->frameb != modelptr->framea) + { + angledelta = sub_GAME_7F06D3F4(jointnum, modelptr->gunhand, skeleton, modelptr->anim, framenum, &pos); + flag = 1; + + if (scale != 1.0f) + { + pos.x *= scale; + pos.y *= scale; + pos.z *= scale; + } + + if (!forward) + { + pos.x = -pos.x; + pos.z = -pos.z; + + if (0.0f < angledelta) + { + angledelta = M_TAU_F - angledelta; + } + } + + cosangle = cosf(header->unk30); + sinangle = sinf(header->unk30); + + if (g_ModelAnimMergingEnabled && modelptr->anim2 != NULL) + { + pos24.f[0] = (pos.z * sinangle) + (pos.x * cosangle); + pos24.f[2] = (pos.z * cosangle) + (-pos.x * sinangle); + + if (0.0f < speed) + { + f32 t = modelptr->unk84 - (modelptr->playspeed / (speed * modelptr->unk88)); + + if (t < 0.0f) { - var_f0_2 = 0.0f; + t = 0.0f; } - temp_f0_5 = (temp_f2 + var_f0_2) * 0.5f; - temp_f10 = ((temp_v0->unk40 - temp_v0->unk4C) * sp88) / var_f30; - sp7C = temp_f10; - temp_f8_2 = ((temp_v0->unk48 - temp_v0->unk54) * sp88) / var_f30; - sp9C += (temp_f10 - sp9C) * temp_f0_5; - sp84 = temp_f8_2; - spA4 += (temp_f8_2 - spA4) * temp_f0_5; + + t = (modelptr->unk84 + t) * 0.5f; + + v[0] = ((header->unk40.x - header->unk4c.x) * speed2) / speed; + v[2] = ((header->unk40.z - header->unk4c.z) * speed2) / speed; + + pos24.f[0] += (v[0] - pos24.f[0]) * t; + pos24.f[2] += (v[2] - pos24.f[2]) * t; } else { - sp9C += (temp_v0->unk40 - temp_v0->unk4C) * arg0->unk84; - spA4 += (temp_v0->unk48 - temp_v0->unk54) * arg0->unk84; + pos24.f[0] += (header->unk40.x - header->unk4c.x) * modelptr->unk84; + pos24.f[2] += (header->unk40.z - header->unk4c.z) * modelptr->unk84; } - var_f8 = spA4 + spB4; - sp9C += spAC; - spA0 = spCC; + + pos24.f[0] += pos34.f[0]; + pos24.f[2] += pos34.f[2]; + pos24.f[1] = pos.y; } else { - spA0 = spCC; - sp9C = (spD0 * temp_f0_4) + (spAC + (spC8 * temp_f20_2)); - var_f8 = (spD0 * temp_f20_2) + (spB4 - (spC8 * temp_f0_4)); + pos24.f[0] = (pos34.f[0] + (pos.f[0] * cosangle)) + (pos.f[2] * sinangle); + pos24.f[1] = pos.f[1]; + pos24.f[2] = (pos34.f[2] - (pos.f[0] * sinangle)) + (pos.f[2] * cosangle); } - spA4 = var_f8; - temp_f0_6 = temp_v0->unk5C; - if ((temp_f0_6 > 0.0f) && (var_f30 > 0.0f)) + + if (0.0f < header->unk5c) { - temp_f2_2 = 1.0f / var_f30; - var_f12 = temp_f2_2; - if (temp_f0_6 < temp_f2_2) + if (0.0f < speed) { - var_f12 = temp_f0_6; - temp_v0->unk5C = 0.0f; - } - else - { - temp_v0->unk5C = temp_f0_6 - temp_f2_2; - } - var_f22_2 += temp_v0->unk58 * var_f12; - if (var_f22_2 < 0.0f) - { - var_f22_2 += 6.2831855f; - } - else if (var_f22_2 >= 6.2831855f) - { - var_f22_2 -= 6.2831855f; + inv = 1.0f / speed; + + if (header->unk5c < inv) + { + inv = header->unk5c; + header->unk5c = 0.0f; + } + else + { + header->unk5c -= inv; + } + + angledelta += header->unk58 * inv; + + if (angledelta < 0.0f) + { + angledelta += M_TAU_F; + } + else if (M_TAU_F <= angledelta) + { + angledelta -= M_TAU_F; + } } } - if (temp_v0->unk18 == 0.0f) + + if (header->unk18 == 0.0f) { - temp_f0_7 = var_f28 + var_f22_2; - sp98 = temp_f0_7; - if (temp_f0_7 >= 6.2831855f) + angle20 = anglecur + angledelta; + + if (M_TAU_F <= angle20) { - sp98 = temp_f0_7 - 6.2831855f; + angle20 -= M_TAU_F; } } } - goto loop_12; } - temp_v0->unk34 = spAC; - temp_v0->unk38 = spB0; - temp_v0->unk30 = var_f28; - temp_v0->unk3C = spB4; - temp_v0->unk24 = sp9C; - temp_v0->unk28 = spA0; - temp_v0->unk2C = spA4; - temp_v0->unk20 = sp98; - temp_v0_4 = arg0->unk30; - temp_v1 = arg0->unk32; - if (temp_v1 == temp_v0_4) + + header->unk34.x = pos34.f[0]; + header->unk34.y = pos34.f[1]; + header->unk34.z = pos34.f[2]; + header->unk30 = anglecur; + header->unk24.x = pos24.f[0]; + header->unk24.y = pos24.f[1]; + header->unk24.z = pos24.f[2]; + header->unk20 = angle20; + + va = modelptr->framea; + vb = modelptr->frameb; + + if (vb == va) { - arg0->unk2C = 0.0f; - arg0->unk28 = temp_v0_4; + modelptr->unk2c = 0.0f; + modelptr->animframe1 = va; } - else if (var_s3 != 0) + else if (forward) { - temp_f0_8 = arg2 - spB8; - arg0->unk2C = temp_f0_8; - arg0->unk28 = temp_v0_4 + temp_f0_8; + modelptr->unk2c = frameb - (f32)endframe; + modelptr->animframe1 = (f32)va + modelptr->unk2c; } else { - temp_f0_9 = spB8 - arg2; - arg0->unk2C = temp_f0_9; - arg0->unk28 = temp_v1 + (1.0f - temp_f0_9); + modelptr->unk2c = (f32)endframe - frameb; + modelptr->animframe1 = (f32)vb + (1.0f - modelptr->unk2c); } - if (arg0->unk54 != 0) + + if (modelptr->anim2 != NULL) { - temp_s2_2 = floorFloatToInt(arg3); - temp_v0_5 = floorFloatToInt(arg4); - sp6C = temp_v0_5; - if (((var_s3 != 0) && (temp_s2_2 < temp_v0_5)) || ((var_s3 == 0) && (temp_v0_5 < temp_s2_2))) + curframe = floorFloatToInt(frame2a); + end2 = floorFloatToInt(frame2b); + + if ((forward && (curframe < end2)) || (!forward && (end2 < curframe))) { - if (temp_v0->unk2 != 0) + if (header->unk02) { - temp_v0->unk50 = temp_v0->unk44; + header->unk4c.y = header->unk40.y; } else { - temp_v0->unk50 = temp_v0->unk38; + header->unk4c.y = header->unk34.y; } - arg0->unk60 = modelConstrainOrWrapAnimFrame(sp6C, arg0->unk54, arg0->unk6C); - temp_v0_6 = modelConstrainOrWrapAnimFrame(sp6C + 1, arg0->unk54, arg0->unk6C); - arg0->unk62 = temp_v0_6; - sub_GAME_7F06D3F4(spE4, arg0->unk25, spE0, arg0->unk54, temp_v0_6, &spC8); - if (spDC != 1.0f) + + modelptr->frame2a = modelConstrainOrWrapAnimFrame(end2, modelptr->anim2, modelptr->unk6c); + framenum = modelConstrainOrWrapAnimFrame(end2 + 1, modelptr->anim2, modelptr->unk6c); + modelptr->frame2b = framenum; + + sub_GAME_7F06D3F4(jointnum, modelptr->unk25, skeleton, modelptr->anim2, framenum, &pos); + + if (scale != 1.0f) { - spCC *= spDC; + pos.y *= scale; } - temp_v0->unk2 = 1; - temp_v0->unk44 = spCC; + + header->unk40.y = pos.y; + header->unk02 = 1; } - if (var_s3 != 0) + + if (forward) { - temp_f0_10 = arg4 - sp6C; - arg0->unk5C = temp_f0_10; - arg0->unk58 = arg0->unk60 + temp_f0_10; - return; + modelptr->unk5c = frame2b - (f32)end2; + modelptr->animframe2 = (f32)modelptr->frame2a + modelptr->unk5c; + } + else + { + modelptr->unk5c = 1.0f - (frame2b - (f32)end2); + modelptr->animframe2 = (f32)modelptr->frame2b + (1.0f - modelptr->unk5c); } - temp_f0_11 = 1.0f - (arg4 - sp6C); - arg0->unk5C = temp_f0_11; - arg0->unk58 = arg0->unk62 + (1.0f - temp_f0_11); - return; } - temp_v0->unk2 = 0; - return; + else + { + header->unk02 = 0; + } + } + else + { + modelSetAnimFrame2(modelptr, frameb, frame2b); } - modelSetAnimFrame2(arg0, arg2, arg4); - return; } - modelSetAnimFrame2(arg0, arg2, arg4); + else + { + modelSetAnimFrame2(modelptr, frameb, frame2b); + } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80054D4C -.word 0x40c90fdb /*6.2831855*/ -.text -glabel modelSetAnimFrame2WithChrStuff -/* 0A4D1C 7F0701EC 27BDFF08 */ addiu $sp, $sp, -0xf8 -/* 0A4D20 7F0701F0 AFBF005C */ sw $ra, 0x5c($sp) -/* 0A4D24 7F0701F4 AFB30058 */ sw $s3, 0x58($sp) -/* 0A4D28 7F0701F8 AFB20054 */ sw $s2, 0x54($sp) -/* 0A4D2C 7F0701FC AFB10050 */ sw $s1, 0x50($sp) -/* 0A4D30 7F070200 AFB0004C */ sw $s0, 0x4c($sp) -/* 0A4D34 7F070204 F7BE0040 */ sdc1 $f30, 0x40($sp) -/* 0A4D38 7F070208 F7BC0038 */ sdc1 $f28, 0x38($sp) -/* 0A4D3C 7F07020C F7BA0030 */ sdc1 $f26, 0x30($sp) -/* 0A4D40 7F070210 F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0A4D44 7F070214 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0A4D48 7F070218 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0A4D4C 7F07021C AFA60100 */ sw $a2, 0x100($sp) -/* 0A4D50 7F070220 AFA70104 */ sw $a3, 0x104($sp) -/* 0A4D54 7F070224 8C8E0008 */ lw $t6, 8($a0) -/* 0A4D58 7F070228 4485A000 */ mtc1 $a1, $f20 -/* 0A4D5C 7F07022C 24010001 */ li $at, 1 -/* 0A4D60 7F070230 8DC50000 */ lw $a1, ($t6) -/* 0A4D64 7F070234 00808825 */ move $s1, $a0 -/* 0A4D68 7F070238 94A20000 */ lhu $v0, ($a1) -/* 0A4D6C 7F07023C 304F00FF */ andi $t7, $v0, 0xff -/* 0A4D70 7F070240 55E10218 */ bnel $t7, $at, .L7F070AA4 -/* 0A4D74 7F070244 C7B40108 */ lwc1 $f20, 0x108($sp) -/* 0A4D78 7F070248 0FC1B1E7 */ jal modelGetNodeRwData -/* 0A4D7C 7F07024C 8CB20004 */ lw $s2, 4($a1) -/* 0A4D80 7F070250 80580000 */ lb $t8, ($v0) -/* 0A4D84 7F070254 00408025 */ move $s0, $v0 -/* 0A4D88 7F070258 5700020A */ bnezl $t8, .L7F070A84 -/* 0A4D8C 7F07025C C7B40108 */ lwc1 $f20, 0x108($sp) -/* 0A4D90 7F070260 96590000 */ lhu $t9, ($s2) -/* 0A4D94 7F070264 3C0B8003 */ lui $t3, %hi(D_80036254) -/* 0A4D98 7F070268 256B6254 */ addiu $t3, %lo(D_80036254) # addiu $t3, $t3, 0x6254 -/* 0A4D9C 7F07026C AFB900E4 */ sw $t9, 0xe4($sp) -/* 0A4DA0 7F070270 8E280008 */ lw $t0, 8($s1) -/* 0A4DA4 7F070274 27AA00C8 */ addiu $t2, $sp, 0xc8 -/* 0A4DA8 7F070278 4480C000 */ mtc1 $zero, $f24 -/* 0A4DAC 7F07027C 8D090004 */ lw $t1, 4($t0) -/* 0A4DB0 7F070280 AFA900E0 */ sw $t1, 0xe0($sp) -/* 0A4DB4 7F070284 C62600B8 */ lwc1 $f6, 0xb8($s1) -/* 0A4DB8 7F070288 C6240014 */ lwc1 $f4, 0x14($s1) -/* 0A4DBC 7F07028C 46062202 */ mul.s $f8, $f4, $f6 -/* 0A4DC0 7F070290 E7A800DC */ swc1 $f8, 0xdc($sp) -/* 0A4DC4 7F070294 8D610000 */ lw $at, ($t3) -/* 0A4DC8 7F070298 8D6E0004 */ lw $t6, 4($t3) -/* 0A4DCC 7F07029C AD410000 */ sw $at, ($t2) -/* 0A4DD0 7F0702A0 8D610008 */ lw $at, 8($t3) -/* 0A4DD4 7F0702A4 AD4E0004 */ sw $t6, 4($t2) -/* 0A4DD8 7F0702A8 AD410008 */ sw $at, 8($t2) -/* 0A4DDC 7F0702AC C44A0034 */ lwc1 $f10, 0x34($v0) -/* 0A4DE0 7F0702B0 E7AA00AC */ swc1 $f10, 0xac($sp) -/* 0A4DE4 7F0702B4 C4500038 */ lwc1 $f16, 0x38($v0) -/* 0A4DE8 7F0702B8 E7B000B0 */ swc1 $f16, 0xb0($sp) -/* 0A4DEC 7F0702BC C452003C */ lwc1 $f18, 0x3c($v0) -/* 0A4DF0 7F0702C0 C7B00100 */ lwc1 $f16, 0x100($sp) -/* 0A4DF4 7F0702C4 E7B200B4 */ swc1 $f18, 0xb4($sp) -/* 0A4DF8 7F0702C8 C4440024 */ lwc1 $f4, 0x24($v0) -/* 0A4DFC 7F0702CC C45C0030 */ lwc1 $f28, 0x30($v0) -/* 0A4E00 7F0702D0 E7A4009C */ swc1 $f4, 0x9c($sp) -/* 0A4E04 7F0702D4 C4460028 */ lwc1 $f6, 0x28($v0) -/* 0A4E08 7F0702D8 E7A600A0 */ swc1 $f6, 0xa0($sp) -/* 0A4E0C 7F0702DC C448002C */ lwc1 $f8, 0x2c($v0) -/* 0A4E10 7F0702E0 E7A800A4 */ swc1 $f8, 0xa4($sp) -/* 0A4E14 7F0702E4 C44A0020 */ lwc1 $f10, 0x20($v0) -/* 0A4E18 7F0702E8 E7AA0098 */ swc1 $f10, 0x98($sp) -/* 0A4E1C 7F0702EC 804F0001 */ lb $t7, 1($v0) -/* 0A4E20 7F0702F0 AFAF0094 */ sw $t7, 0x94($sp) -/* 0A4E24 7F0702F4 C63E0040 */ lwc1 $f30, 0x40($s1) -/* 0A4E28 7F0702F8 4618F03C */ c.lt.s $f30, $f24 -/* 0A4E2C 7F0702FC 00000000 */ nop -/* 0A4E30 7F070300 45020003 */ bc1fl .L7F070310 -/* 0A4E34 7F070304 C6200070 */ lwc1 $f0, 0x70($s1) -/* 0A4E38 7F070308 4600F787 */ neg.s $f30, $f30 -/* 0A4E3C 7F07030C C6200070 */ lwc1 $f0, 0x70($s1) -.L7F070310: -/* 0A4E40 7F070310 4618003C */ c.lt.s $f0, $f24 -/* 0A4E44 7F070314 00000000 */ nop -/* 0A4E48 7F070318 45020003 */ bc1fl .L7F070328 -/* 0A4E4C 7F07031C 4610A03E */ c.le.s $f20, $f16 -/* 0A4E50 7F070320 46000007 */ neg.s $f0, $f0 -/* 0A4E54 7F070324 4610A03E */ c.le.s $f20, $f16 -.L7F070328: -/* 0A4E58 7F070328 00009825 */ move $s3, $zero -/* 0A4E5C 7F07032C 45000002 */ bc1f .L7F070338 -/* 0A4E60 7F070330 00000000 */ nop -/* 0A4E64 7F070334 24130001 */ li $s3, 1 -.L7F070338: -/* 0A4E68 7F070338 5260000A */ beql $s3, $zero, .L7F070364 -/* 0A4E6C 7F07033C 4600A306 */ mov.s $f12, $f20 -/* 0A4E70 7F070340 4600A306 */ mov.s $f12, $f20 -/* 0A4E74 7F070344 0FC170F6 */ jal floorFloatToInt -/* 0A4E78 7F070348 E7A00088 */ swc1 $f0, 0x88($sp) -/* 0A4E7C 7F07034C 24520001 */ addiu $s2, $v0, 1 -/* 0A4E80 7F070350 0FC170F6 */ jal floorFloatToInt -/* 0A4E84 7F070354 C7AC0100 */ lwc1 $f12, 0x100($sp) -/* 0A4E88 7F070358 10000008 */ b .L7F07037C -/* 0A4E8C 7F07035C AFA200B8 */ sw $v0, 0xb8($sp) -/* 0A4E90 7F070360 4600A306 */ mov.s $f12, $f20 -.L7F070364: -/* 0A4E94 7F070364 0FC1712E */ jal ceilFloatToInt -/* 0A4E98 7F070368 E7A00088 */ swc1 $f0, 0x88($sp) -/* 0A4E9C 7F07036C 2452FFFF */ addiu $s2, $v0, -1 -/* 0A4EA0 7F070370 0FC1712E */ jal ceilFloatToInt -/* 0A4EA4 7F070374 C7AC0100 */ lwc1 $f12, 0x100($sp) -/* 0A4EA8 7F070378 AFA200B8 */ sw $v0, 0xb8($sp) -.L7F07037C: -/* 0A4EAC 7F07037C 3C018005 */ lui $at, %hi(D_80054D4C) -/* 0A4EB0 7F070380 8FA700B8 */ lw $a3, 0xb8($sp) -/* 0A4EB4 7F070384 C43A4D4C */ lwc1 $f26, %lo(D_80054D4C)($at) -.L7F070388: -/* 0A4EB8 7F070388 12600006 */ beqz $s3, .L7F0703A4 -/* 0A4EBC 7F07038C 0247082A */ slt $at, $s2, $a3 -/* 0A4EC0 7F070390 00F2082A */ slt $at, $a3, $s2 -/* 0A4EC4 7F070394 50200006 */ beql $at, $zero, .L7F0703B0 -/* 0A4EC8 7F070398 8E250020 */ lw $a1, 0x20($s1) -/* 0A4ECC 7F07039C 10000130 */ b .L7F070860 -/* 0A4ED0 7F0703A0 C7A600AC */ lwc1 $f6, 0xac($sp) -.L7F0703A4: -/* 0A4ED4 7F0703A4 5420012E */ bnezl $at, .L7F070860 -/* 0A4ED8 7F0703A8 C7A600AC */ lwc1 $f6, 0xac($sp) -/* 0A4EDC 7F0703AC 8E250020 */ lw $a1, 0x20($s1) -.L7F0703B0: -/* 0A4EE0 7F0703B0 8E26003C */ lw $a2, 0x3c($s1) -/* 0A4EE4 7F0703B4 AFA700B8 */ sw $a3, 0xb8($sp) -/* 0A4EE8 7F0703B8 0FC1BD9B */ jal modelConstrainOrWrapAnimFrame -/* 0A4EEC 7F0703BC 02402025 */ move $a0, $s2 -/* 0A4EF0 7F0703C0 A6220030 */ sh $v0, 0x30($s1) -/* 0A4EF4 7F0703C4 8FB80094 */ lw $t8, 0x94($sp) -/* 0A4EF8 7F0703C8 00401825 */ move $v1, $v0 -/* 0A4EFC 7F0703CC 8FA600E0 */ lw $a2, 0xe0($sp) -/* 0A4F00 7F0703D0 1300000E */ beqz $t8, .L7F07040C -/* 0A4F04 7F0703D4 8FA400E4 */ lw $a0, 0xe4($sp) -/* 0A4F08 7F0703D8 C7B2009C */ lwc1 $f18, 0x9c($sp) -/* 0A4F0C 7F0703DC C7A400A0 */ lwc1 $f4, 0xa0($sp) -/* 0A4F10 7F0703E0 C7A600A4 */ lwc1 $f6, 0xa4($sp) -/* 0A4F14 7F0703E4 E7B200AC */ swc1 $f18, 0xac($sp) -/* 0A4F18 7F0703E8 E7A400B0 */ swc1 $f4, 0xb0($sp) -/* 0A4F1C 7F0703EC E7A600B4 */ swc1 $f6, 0xb4($sp) -/* 0A4F20 7F0703F0 C6080018 */ lwc1 $f8, 0x18($s0) -/* 0A4F24 7F0703F4 4608C032 */ c.eq.s $f24, $f8 -/* 0A4F28 7F0703F8 00000000 */ nop -/* 0A4F2C 7F0703FC 45000046 */ bc1f .L7F070518 -/* 0A4F30 7F070400 00000000 */ nop -/* 0A4F34 7F070404 10000044 */ b .L7F070518 -/* 0A4F38 7F070408 C7BC0098 */ lwc1 $f28, 0x98($sp) -.L7F07040C: -/* 0A4F3C 7F07040C 82250024 */ lb $a1, 0x24($s1) -/* 0A4F40 7F070410 8E270020 */ lw $a3, 0x20($s1) -/* 0A4F44 7F070414 27B900C8 */ addiu $t9, $sp, 0xc8 -/* 0A4F48 7F070418 AFB90014 */ sw $t9, 0x14($sp) -/* 0A4F4C 7F07041C 0FC1B4FD */ jal sub_GAME_7F06D3F4 -/* 0A4F50 7F070420 AFA30010 */ sw $v1, 0x10($sp) -/* 0A4F54 7F070424 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0A4F58 7F070428 44818000 */ mtc1 $at, $f16 -/* 0A4F5C 7F07042C C7AA00DC */ lwc1 $f10, 0xdc($sp) -/* 0A4F60 7F070430 46000586 */ mov.s $f22, $f0 -/* 0A4F64 7F070434 C7A200C8 */ lwc1 $f2, 0xc8($sp) -/* 0A4F68 7F070438 46105032 */ c.eq.s $f10, $f16 -/* 0A4F6C 7F07043C C7B200CC */ lwc1 $f18, 0xcc($sp) -/* 0A4F70 7F070440 4503000A */ bc1tl .L7F07046C -/* 0A4F74 7F070444 C7A200C8 */ lwc1 $f2, 0xc8($sp) -/* 0A4F78 7F070448 460A1082 */ mul.s $f2, $f2, $f10 -/* 0A4F7C 7F07044C C7AC00D0 */ lwc1 $f12, 0xd0($sp) -/* 0A4F80 7F070450 460A9102 */ mul.s $f4, $f18, $f10 -/* 0A4F84 7F070454 00000000 */ nop -/* 0A4F88 7F070458 460A6302 */ mul.s $f12, $f12, $f10 -/* 0A4F8C 7F07045C E7A200C8 */ swc1 $f2, 0xc8($sp) -/* 0A4F90 7F070460 E7A400CC */ swc1 $f4, 0xcc($sp) -/* 0A4F94 7F070464 E7AC00D0 */ swc1 $f12, 0xd0($sp) -/* 0A4F98 7F070468 C7A200C8 */ lwc1 $f2, 0xc8($sp) -.L7F07046C: -/* 0A4F9C 7F07046C 16600008 */ bnez $s3, .L7F070490 -/* 0A4FA0 7F070470 C7AC00D0 */ lwc1 $f12, 0xd0($sp) -/* 0A4FA4 7F070474 4600C03C */ c.lt.s $f24, $f0 -/* 0A4FA8 7F070478 46001087 */ neg.s $f2, $f2 -/* 0A4FAC 7F07047C 46006307 */ neg.s $f12, $f12 -/* 0A4FB0 7F070480 E7A200C8 */ swc1 $f2, 0xc8($sp) -/* 0A4FB4 7F070484 45000002 */ bc1f .L7F070490 -/* 0A4FB8 7F070488 E7AC00D0 */ swc1 $f12, 0xd0($sp) -/* 0A4FBC 7F07048C 4600D581 */ sub.s $f22, $f26, $f0 -.L7F070490: -/* 0A4FC0 7F070490 0FC15FA8 */ jal cosf -/* 0A4FC4 7F070494 C60C0014 */ lwc1 $f12, 0x14($s0) -/* 0A4FC8 7F070498 46000506 */ mov.s $f20, $f0 -/* 0A4FCC 7F07049C 0FC15FAB */ jal sinf -/* 0A4FD0 7F0704A0 C60C0014 */ lwc1 $f12, 0x14($s0) -/* 0A4FD4 7F0704A4 C7A600C8 */ lwc1 $f6, 0xc8($sp) -/* 0A4FD8 7F0704A8 C7B000D0 */ lwc1 $f16, 0xd0($sp) -/* 0A4FDC 7F0704AC C7AA00AC */ lwc1 $f10, 0xac($sp) -/* 0A4FE0 7F0704B0 46143202 */ mul.s $f8, $f6, $f20 -/* 0A4FE4 7F0704B4 00000000 */ nop -/* 0A4FE8 7F0704B8 46008482 */ mul.s $f18, $f16, $f0 -/* 0A4FEC 7F0704BC 46124100 */ add.s $f4, $f8, $f18 -/* 0A4FF0 7F0704C0 C7B200CC */ lwc1 $f18, 0xcc($sp) -/* 0A4FF4 7F0704C4 46045200 */ add.s $f8, $f10, $f4 -/* 0A4FF8 7F0704C8 E7B200B0 */ swc1 $f18, 0xb0($sp) -/* 0A4FFC 7F0704CC 46003287 */ neg.s $f10, $f6 -/* 0A5000 7F0704D0 E7A800AC */ swc1 $f8, 0xac($sp) -/* 0A5004 7F0704D4 46005102 */ mul.s $f4, $f10, $f0 -/* 0A5008 7F0704D8 C7A600B4 */ lwc1 $f6, 0xb4($sp) -/* 0A500C 7F0704DC 46148202 */ mul.s $f8, $f16, $f20 -/* 0A5010 7F0704E0 46082480 */ add.s $f18, $f4, $f8 -/* 0A5014 7F0704E4 46123280 */ add.s $f10, $f6, $f18 -/* 0A5018 7F0704E8 E7AA00B4 */ swc1 $f10, 0xb4($sp) -/* 0A501C 7F0704EC C6100018 */ lwc1 $f16, 0x18($s0) -/* 0A5020 7F0704F0 4610C032 */ c.eq.s $f24, $f16 -/* 0A5024 7F0704F4 00000000 */ nop -/* 0A5028 7F0704F8 45000007 */ bc1f .L7F070518 -/* 0A502C 7F0704FC 00000000 */ nop -/* 0A5030 7F070500 4616E700 */ add.s $f28, $f28, $f22 -/* 0A5034 7F070504 461CD03E */ c.le.s $f26, $f28 -/* 0A5038 7F070508 00000000 */ nop -/* 0A503C 7F07050C 45000002 */ bc1f .L7F070518 -/* 0A5040 7F070510 00000000 */ nop -/* 0A5044 7F070514 461AE701 */ sub.s $f28, $f28, $f26 -.L7F070518: -/* 0A5048 7F070518 52600004 */ beql $s3, $zero, .L7F07052C -/* 0A504C 7F07051C 2652FFFF */ addiu $s2, $s2, -1 -/* 0A5050 7F070520 10000002 */ b .L7F07052C -/* 0A5054 7F070524 26520001 */ addiu $s2, $s2, 1 -/* 0A5058 7F070528 2652FFFF */ addiu $s2, $s2, -1 -.L7F07052C: -/* 0A505C 7F07052C 02402025 */ move $a0, $s2 -/* 0A5060 7F070530 8E250020 */ lw $a1, 0x20($s1) -/* 0A5064 7F070534 0FC1BD9B */ jal modelConstrainOrWrapAnimFrame -/* 0A5068 7F070538 8E26003C */ lw $a2, 0x3c($s1) -/* 0A506C 7F07053C A6220032 */ sh $v0, 0x32($s1) -/* 0A5070 7F070540 86290032 */ lh $t1, 0x32($s1) -/* 0A5074 7F070544 86280030 */ lh $t0, 0x30($s1) -/* 0A5078 7F070548 8FA600E0 */ lw $a2, 0xe0($sp) -/* 0A507C 7F07054C 8FA400E4 */ lw $a0, 0xe4($sp) -/* 0A5080 7F070550 110900C0 */ beq $t0, $t1, .L7F070854 -/* 0A5084 7F070554 27AD00C8 */ addiu $t5, $sp, 0xc8 -/* 0A5088 7F070558 82250024 */ lb $a1, 0x24($s1) -/* 0A508C 7F07055C 8E270020 */ lw $a3, 0x20($s1) -/* 0A5090 7F070560 240C0001 */ li $t4, 1 -/* 0A5094 7F070564 AFAC0094 */ sw $t4, 0x94($sp) -/* 0A5098 7F070568 AFAD0014 */ sw $t5, 0x14($sp) -/* 0A509C 7F07056C 0FC1B4FD */ jal sub_GAME_7F06D3F4 -/* 0A50A0 7F070570 AFA20010 */ sw $v0, 0x10($sp) -/* 0A50A4 7F070574 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0A50A8 7F070578 44814000 */ mtc1 $at, $f8 -/* 0A50AC 7F07057C C7A400DC */ lwc1 $f4, 0xdc($sp) -/* 0A50B0 7F070580 46000586 */ mov.s $f22, $f0 -/* 0A50B4 7F070584 C7A200C8 */ lwc1 $f2, 0xc8($sp) -/* 0A50B8 7F070588 46082032 */ c.eq.s $f4, $f8 -/* 0A50BC 7F07058C C7A600CC */ lwc1 $f6, 0xcc($sp) -/* 0A50C0 7F070590 4503000A */ bc1tl .L7F0705BC -/* 0A50C4 7F070594 C7A200C8 */ lwc1 $f2, 0xc8($sp) -/* 0A50C8 7F070598 46041082 */ mul.s $f2, $f2, $f4 -/* 0A50CC 7F07059C C7AC00D0 */ lwc1 $f12, 0xd0($sp) -/* 0A50D0 7F0705A0 46043482 */ mul.s $f18, $f6, $f4 -/* 0A50D4 7F0705A4 00000000 */ nop -/* 0A50D8 7F0705A8 46046302 */ mul.s $f12, $f12, $f4 -/* 0A50DC 7F0705AC E7A200C8 */ swc1 $f2, 0xc8($sp) -/* 0A50E0 7F0705B0 E7B200CC */ swc1 $f18, 0xcc($sp) -/* 0A50E4 7F0705B4 E7AC00D0 */ swc1 $f12, 0xd0($sp) -/* 0A50E8 7F0705B8 C7A200C8 */ lwc1 $f2, 0xc8($sp) -.L7F0705BC: -/* 0A50EC 7F0705BC 16600008 */ bnez $s3, .L7F0705E0 -/* 0A50F0 7F0705C0 C7AC00D0 */ lwc1 $f12, 0xd0($sp) -/* 0A50F4 7F0705C4 4600C03C */ c.lt.s $f24, $f0 -/* 0A50F8 7F0705C8 46001087 */ neg.s $f2, $f2 -/* 0A50FC 7F0705CC 46006307 */ neg.s $f12, $f12 -/* 0A5100 7F0705D0 E7A200C8 */ swc1 $f2, 0xc8($sp) -/* 0A5104 7F0705D4 45000002 */ bc1f .L7F0705E0 -/* 0A5108 7F0705D8 E7AC00D0 */ swc1 $f12, 0xd0($sp) -/* 0A510C 7F0705DC 4600D581 */ sub.s $f22, $f26, $f0 -.L7F0705E0: -/* 0A5110 7F0705E0 0FC15FA8 */ jal cosf -/* 0A5114 7F0705E4 C60C0030 */ lwc1 $f12, 0x30($s0) -/* 0A5118 7F0705E8 46000506 */ mov.s $f20, $f0 -/* 0A511C 7F0705EC 0FC15FAB */ jal sinf -/* 0A5120 7F0705F0 C60C0030 */ lwc1 $f12, 0x30($s0) -/* 0A5124 7F0705F4 3C0A8003 */ lui $t2, %hi(g_ModelAnimMergingEnabled) -/* 0A5128 7F0705F8 8D4A6250 */ lw $t2, %lo(g_ModelAnimMergingEnabled)($t2) -/* 0A512C 7F0705FC C7A200C8 */ lwc1 $f2, 0xc8($sp) -/* 0A5130 7F070600 C7AC00D0 */ lwc1 $f12, 0xd0($sp) -/* 0A5134 7F070604 11400056 */ beqz $t2, .L7F070760 -/* 0A5138 7F070608 00000000 */ nop -/* 0A513C 7F07060C 8E2B0054 */ lw $t3, 0x54($s1) -/* 0A5140 7F070610 11600053 */ beqz $t3, .L7F070760 -/* 0A5144 7F070614 00000000 */ nop -/* 0A5148 7F070618 C7AC00D0 */ lwc1 $f12, 0xd0($sp) -/* 0A514C 7F07061C C7A200C8 */ lwc1 $f2, 0xc8($sp) -/* 0A5150 7F070620 461EC03C */ c.lt.s $f24, $f30 -/* 0A5154 7F070624 46006282 */ mul.s $f10, $f12, $f0 -/* 0A5158 7F070628 46001187 */ neg.s $f6, $f2 -/* 0A515C 7F07062C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0A5160 7F070630 46141402 */ mul.s $f16, $f2, $f20 -/* 0A5164 7F070634 00000000 */ nop -/* 0A5168 7F070638 46146102 */ mul.s $f4, $f12, $f20 -/* 0A516C 7F07063C 00000000 */ nop -/* 0A5170 7F070640 46003482 */ mul.s $f18, $f6, $f0 -/* 0A5174 7F070644 46105200 */ add.s $f8, $f10, $f16 -/* 0A5178 7F070648 E7A8009C */ swc1 $f8, 0x9c($sp) -/* 0A517C 7F07064C 46122280 */ add.s $f10, $f4, $f18 -/* 0A5180 7F070650 45000028 */ bc1f .L7F0706F4 -/* 0A5184 7F070654 E7AA00A4 */ swc1 $f10, 0xa4($sp) -/* 0A5188 7F070658 C6280088 */ lwc1 $f8, 0x88($s1) -/* 0A518C 7F07065C C63000A4 */ lwc1 $f16, 0xa4($s1) -/* 0A5190 7F070660 C6220084 */ lwc1 $f2, 0x84($s1) -/* 0A5194 7F070664 4608F182 */ mul.s $f6, $f30, $f8 -/* 0A5198 7F070668 46068103 */ div.s $f4, $f16, $f6 -/* 0A519C 7F07066C 46041001 */ sub.s $f0, $f2, $f4 -/* 0A51A0 7F070670 4618003C */ c.lt.s $f0, $f24 -/* 0A51A4 7F070674 00000000 */ nop -/* 0A51A8 7F070678 45020003 */ bc1fl .L7F070688 -/* 0A51AC 7F07067C 46001480 */ add.s $f18, $f2, $f0 -/* 0A51B0 7F070680 4600C006 */ mov.s $f0, $f24 -/* 0A51B4 7F070684 46001480 */ add.s $f18, $f2, $f0 -.L7F070688: -/* 0A51B8 7F070688 C6080040 */ lwc1 $f8, 0x40($s0) -/* 0A51BC 7F07068C C610004C */ lwc1 $f16, 0x4c($s0) -/* 0A51C0 7F070690 44815000 */ mtc1 $at, $f10 -/* 0A51C4 7F070694 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 0A51C8 7F070698 46104181 */ sub.s $f6, $f8, $f16 -/* 0A51CC 7F07069C 460A9002 */ mul.s $f0, $f18, $f10 -/* 0A51D0 7F0706A0 00000000 */ nop -/* 0A51D4 7F0706A4 46043482 */ mul.s $f18, $f6, $f4 -/* 0A51D8 7F0706A8 461E9283 */ div.s $f10, $f18, $f30 -/* 0A51DC 7F0706AC E7AA007C */ swc1 $f10, 0x7c($sp) -/* 0A51E0 7F0706B0 C6100054 */ lwc1 $f16, 0x54($s0) -/* 0A51E4 7F0706B4 C6080048 */ lwc1 $f8, 0x48($s0) -/* 0A51E8 7F0706B8 46104181 */ sub.s $f6, $f8, $f16 -/* 0A51EC 7F0706BC C7B0009C */ lwc1 $f16, 0x9c($sp) -/* 0A51F0 7F0706C0 46043482 */ mul.s $f18, $f6, $f4 -/* 0A51F4 7F0706C4 46105181 */ sub.s $f6, $f10, $f16 -/* 0A51F8 7F0706C8 C7AA00A4 */ lwc1 $f10, 0xa4($sp) -/* 0A51FC 7F0706CC 46003102 */ mul.s $f4, $f6, $f0 -/* 0A5200 7F0706D0 461E9203 */ div.s $f8, $f18, $f30 -/* 0A5204 7F0706D4 46048480 */ add.s $f18, $f16, $f4 -/* 0A5208 7F0706D8 E7B2009C */ swc1 $f18, 0x9c($sp) -/* 0A520C 7F0706DC 460A4181 */ sub.s $f6, $f8, $f10 -/* 0A5210 7F0706E0 E7A80084 */ swc1 $f8, 0x84($sp) -/* 0A5214 7F0706E4 46003402 */ mul.s $f16, $f6, $f0 -/* 0A5218 7F0706E8 46105100 */ add.s $f4, $f10, $f16 -/* 0A521C 7F0706EC 10000011 */ b .L7F070734 -/* 0A5220 7F0706F0 E7A400A4 */ swc1 $f4, 0xa4($sp) -.L7F0706F4: -/* 0A5224 7F0706F4 C6120040 */ lwc1 $f18, 0x40($s0) -/* 0A5228 7F0706F8 C608004C */ lwc1 $f8, 0x4c($s0) -/* 0A522C 7F0706FC C62A0084 */ lwc1 $f10, 0x84($s1) -/* 0A5230 7F070700 C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 0A5234 7F070704 46089181 */ sub.s $f6, $f18, $f8 -/* 0A5238 7F070708 460A3402 */ mul.s $f16, $f6, $f10 -/* 0A523C 7F07070C 46102480 */ add.s $f18, $f4, $f16 -/* 0A5240 7F070710 E7B2009C */ swc1 $f18, 0x9c($sp) -/* 0A5244 7F070714 C6060054 */ lwc1 $f6, 0x54($s0) -/* 0A5248 7F070718 C6080048 */ lwc1 $f8, 0x48($s0) -/* 0A524C 7F07071C C6240084 */ lwc1 $f4, 0x84($s1) -/* 0A5250 7F070720 C7B200A4 */ lwc1 $f18, 0xa4($sp) -/* 0A5254 7F070724 46064281 */ sub.s $f10, $f8, $f6 -/* 0A5258 7F070728 46045402 */ mul.s $f16, $f10, $f4 -/* 0A525C 7F07072C 46109200 */ add.s $f8, $f18, $f16 -/* 0A5260 7F070730 E7A800A4 */ swc1 $f8, 0xa4($sp) -.L7F070734: -/* 0A5264 7F070734 C7A6009C */ lwc1 $f6, 0x9c($sp) -/* 0A5268 7F070738 C7AA00AC */ lwc1 $f10, 0xac($sp) -/* 0A526C 7F07073C C7B200A4 */ lwc1 $f18, 0xa4($sp) -/* 0A5270 7F070740 C7B000B4 */ lwc1 $f16, 0xb4($sp) -/* 0A5274 7F070744 460A3100 */ add.s $f4, $f6, $f10 -/* 0A5278 7F070748 C7A600CC */ lwc1 $f6, 0xcc($sp) -/* 0A527C 7F07074C 46109200 */ add.s $f8, $f18, $f16 -/* 0A5280 7F070750 E7A4009C */ swc1 $f4, 0x9c($sp) -/* 0A5284 7F070754 E7A600A0 */ swc1 $f6, 0xa0($sp) -/* 0A5288 7F070758 1000000F */ b .L7F070798 -/* 0A528C 7F07075C E7A800A4 */ swc1 $f8, 0xa4($sp) -.L7F070760: -/* 0A5290 7F070760 46141102 */ mul.s $f4, $f2, $f20 -/* 0A5294 7F070764 C7AA00AC */ lwc1 $f10, 0xac($sp) -/* 0A5298 7F070768 C7A600CC */ lwc1 $f6, 0xcc($sp) -/* 0A529C 7F07076C 46006402 */ mul.s $f16, $f12, $f0 -/* 0A52A0 7F070770 E7A600A0 */ swc1 $f6, 0xa0($sp) -/* 0A52A4 7F070774 46045480 */ add.s $f18, $f10, $f4 -/* 0A52A8 7F070778 46001102 */ mul.s $f4, $f2, $f0 -/* 0A52AC 7F07077C C7AA00B4 */ lwc1 $f10, 0xb4($sp) -/* 0A52B0 7F070780 46128200 */ add.s $f8, $f16, $f18 -/* 0A52B4 7F070784 46146482 */ mul.s $f18, $f12, $f20 -/* 0A52B8 7F070788 46045401 */ sub.s $f16, $f10, $f4 -/* 0A52BC 7F07078C E7A8009C */ swc1 $f8, 0x9c($sp) -/* 0A52C0 7F070790 46109200 */ add.s $f8, $f18, $f16 -/* 0A52C4 7F070794 E7A800A4 */ swc1 $f8, 0xa4($sp) -.L7F070798: -/* 0A52C8 7F070798 C600005C */ lwc1 $f0, 0x5c($s0) -/* 0A52CC 7F07079C 4600C03C */ c.lt.s $f24, $f0 -/* 0A52D0 7F0707A0 00000000 */ nop -/* 0A52D4 7F0707A4 45020020 */ bc1fl .L7F070828 -/* 0A52D8 7F0707A8 C6100018 */ lwc1 $f16, 0x18($s0) -/* 0A52DC 7F0707AC 461EC03C */ c.lt.s $f24, $f30 -/* 0A52E0 7F0707B0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0A52E4 7F0707B4 4502001C */ bc1fl .L7F070828 -/* 0A52E8 7F0707B8 C6100018 */ lwc1 $f16, 0x18($s0) -/* 0A52EC 7F0707BC 44813000 */ mtc1 $at, $f6 -/* 0A52F0 7F0707C0 00000000 */ nop -/* 0A52F4 7F0707C4 461E3083 */ div.s $f2, $f6, $f30 -/* 0A52F8 7F0707C8 4602003C */ c.lt.s $f0, $f2 -/* 0A52FC 7F0707CC 46001306 */ mov.s $f12, $f2 -/* 0A5300 7F0707D0 45020005 */ bc1fl .L7F0707E8 -/* 0A5304 7F0707D4 46020281 */ sub.s $f10, $f0, $f2 -/* 0A5308 7F0707D8 46000306 */ mov.s $f12, $f0 -/* 0A530C 7F0707DC 10000003 */ b .L7F0707EC -/* 0A5310 7F0707E0 E618005C */ swc1 $f24, 0x5c($s0) -/* 0A5314 7F0707E4 46020281 */ sub.s $f10, $f0, $f2 -.L7F0707E8: -/* 0A5318 7F0707E8 E60A005C */ swc1 $f10, 0x5c($s0) -.L7F0707EC: -/* 0A531C 7F0707EC C6040058 */ lwc1 $f4, 0x58($s0) -/* 0A5320 7F0707F0 460C2482 */ mul.s $f18, $f4, $f12 -/* 0A5324 7F0707F4 4612B580 */ add.s $f22, $f22, $f18 -/* 0A5328 7F0707F8 4618B03C */ c.lt.s $f22, $f24 -/* 0A532C 7F0707FC 00000000 */ nop -/* 0A5330 7F070800 45020004 */ bc1fl .L7F070814 -/* 0A5334 7F070804 4616D03E */ c.le.s $f26, $f22 -/* 0A5338 7F070808 10000006 */ b .L7F070824 -/* 0A533C 7F07080C 461AB580 */ add.s $f22, $f22, $f26 -/* 0A5340 7F070810 4616D03E */ c.le.s $f26, $f22 -.L7F070814: -/* 0A5344 7F070814 00000000 */ nop -/* 0A5348 7F070818 45020003 */ bc1fl .L7F070828 -/* 0A534C 7F07081C C6100018 */ lwc1 $f16, 0x18($s0) -/* 0A5350 7F070820 461AB581 */ sub.s $f22, $f22, $f26 -.L7F070824: -/* 0A5354 7F070824 C6100018 */ lwc1 $f16, 0x18($s0) -.L7F070828: -/* 0A5358 7F070828 4610C032 */ c.eq.s $f24, $f16 -/* 0A535C 7F07082C 00000000 */ nop -/* 0A5360 7F070830 45000008 */ bc1f .L7F070854 -/* 0A5364 7F070834 00000000 */ nop -/* 0A5368 7F070838 4616E000 */ add.s $f0, $f28, $f22 -/* 0A536C 7F07083C 4600D03E */ c.le.s $f26, $f0 -/* 0A5370 7F070840 E7A00098 */ swc1 $f0, 0x98($sp) -/* 0A5374 7F070844 45000003 */ bc1f .L7F070854 -/* 0A5378 7F070848 00000000 */ nop -/* 0A537C 7F07084C 461A0201 */ sub.s $f8, $f0, $f26 -/* 0A5380 7F070850 E7A80098 */ swc1 $f8, 0x98($sp) -.L7F070854: -/* 0A5384 7F070854 1000FECC */ b .L7F070388 -/* 0A5388 7F070858 8FA700B8 */ lw $a3, 0xb8($sp) -/* 0A538C 7F07085C C7A600AC */ lwc1 $f6, 0xac($sp) -.L7F070860: -/* 0A5390 7F070860 E6060034 */ swc1 $f6, 0x34($s0) -/* 0A5394 7F070864 C7AA00B0 */ lwc1 $f10, 0xb0($sp) -/* 0A5398 7F070868 E60A0038 */ swc1 $f10, 0x38($s0) -/* 0A539C 7F07086C C7A400B4 */ lwc1 $f4, 0xb4($sp) -/* 0A53A0 7F070870 E61C0030 */ swc1 $f28, 0x30($s0) -/* 0A53A4 7F070874 E604003C */ swc1 $f4, 0x3c($s0) -/* 0A53A8 7F070878 C7B2009C */ lwc1 $f18, 0x9c($sp) -/* 0A53AC 7F07087C E6120024 */ swc1 $f18, 0x24($s0) -/* 0A53B0 7F070880 C7B000A0 */ lwc1 $f16, 0xa0($sp) -/* 0A53B4 7F070884 E6100028 */ swc1 $f16, 0x28($s0) -/* 0A53B8 7F070888 C7A800A4 */ lwc1 $f8, 0xa4($sp) -/* 0A53BC 7F07088C E608002C */ swc1 $f8, 0x2c($s0) -/* 0A53C0 7F070890 C7A60098 */ lwc1 $f6, 0x98($sp) -/* 0A53C4 7F070894 E6060020 */ swc1 $f6, 0x20($s0) -/* 0A53C8 7F070898 86220030 */ lh $v0, 0x30($s1) -/* 0A53CC 7F07089C 86230032 */ lh $v1, 0x32($s1) -/* 0A53D0 7F0708A0 14620006 */ bne $v1, $v0, .L7F0708BC -/* 0A53D4 7F0708A4 00000000 */ nop -/* 0A53D8 7F0708A8 44825000 */ mtc1 $v0, $f10 -/* 0A53DC 7F0708AC E638002C */ swc1 $f24, 0x2c($s1) -/* 0A53E0 7F0708B0 46805120 */ cvt.s.w $f4, $f10 -/* 0A53E4 7F0708B4 10000019 */ b .L7F07091C -/* 0A53E8 7F0708B8 E6240028 */ swc1 $f4, 0x28($s1) -.L7F0708BC: -/* 0A53EC 7F0708BC 5260000C */ beql $s3, $zero, .L7F0708F0 -/* 0A53F0 7F0708C0 44878000 */ mtc1 $a3, $f16 -/* 0A53F4 7F0708C4 44878000 */ mtc1 $a3, $f16 -/* 0A53F8 7F0708C8 44823000 */ mtc1 $v0, $f6 -/* 0A53FC 7F0708CC C7B20100 */ lwc1 $f18, 0x100($sp) -/* 0A5400 7F0708D0 46808220 */ cvt.s.w $f8, $f16 -/* 0A5404 7F0708D4 468032A0 */ cvt.s.w $f10, $f6 -/* 0A5408 7F0708D8 46089001 */ sub.s $f0, $f18, $f8 -/* 0A540C 7F0708DC 46005100 */ add.s $f4, $f10, $f0 -/* 0A5410 7F0708E0 E620002C */ swc1 $f0, 0x2c($s1) -/* 0A5414 7F0708E4 1000000D */ b .L7F07091C -/* 0A5418 7F0708E8 E6240028 */ swc1 $f4, 0x28($s1) -/* 0A541C 7F0708EC 44878000 */ mtc1 $a3, $f16 -.L7F0708F0: -/* 0A5420 7F0708F0 C7A80100 */ lwc1 $f8, 0x100($sp) -/* 0A5424 7F0708F4 44833000 */ mtc1 $v1, $f6 -/* 0A5428 7F0708F8 468084A0 */ cvt.s.w $f18, $f16 -/* 0A542C 7F0708FC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0A5430 7F070900 44812000 */ mtc1 $at, $f4 -/* 0A5434 7F070904 468032A0 */ cvt.s.w $f10, $f6 -/* 0A5438 7F070908 46089001 */ sub.s $f0, $f18, $f8 -/* 0A543C 7F07090C 46002401 */ sub.s $f16, $f4, $f0 -/* 0A5440 7F070910 E620002C */ swc1 $f0, 0x2c($s1) -/* 0A5444 7F070914 46105480 */ add.s $f18, $f10, $f16 -/* 0A5448 7F070918 E6320028 */ swc1 $f18, 0x28($s1) -.L7F07091C: -/* 0A544C 7F07091C 8E2E0054 */ lw $t6, 0x54($s1) -/* 0A5450 7F070920 11C00055 */ beqz $t6, .L7F070A78 -/* 0A5454 7F070924 00000000 */ nop -/* 0A5458 7F070928 0FC170F6 */ jal floorFloatToInt -/* 0A545C 7F07092C C7AC0104 */ lwc1 $f12, 0x104($sp) -/* 0A5460 7F070930 C7B40108 */ lwc1 $f20, 0x108($sp) -/* 0A5464 7F070934 00409025 */ move $s2, $v0 -/* 0A5468 7F070938 0FC170F6 */ jal floorFloatToInt -/* 0A546C 7F07093C 4600A306 */ mov.s $f12, $f20 -/* 0A5470 7F070940 12600004 */ beqz $s3, .L7F070954 -/* 0A5474 7F070944 AFA2006C */ sw $v0, 0x6c($sp) -/* 0A5478 7F070948 0242082A */ slt $at, $s2, $v0 -/* 0A547C 7F07094C 54200006 */ bnezl $at, .L7F070968 -/* 0A5480 7F070950 820F0002 */ lb $t7, 2($s0) -.L7F070954: -/* 0A5484 7F070954 1660002C */ bnez $s3, .L7F070A08 -/* 0A5488 7F070958 0052082A */ slt $at, $v0, $s2 -/* 0A548C 7F07095C 5020002B */ beql $at, $zero, .L7F070A0C -/* 0A5490 7F070960 3C013F80 */ lui $at, 0x3f80 -/* 0A5494 7F070964 820F0002 */ lb $t7, 2($s0) -.L7F070968: -/* 0A5498 7F070968 51E00005 */ beql $t7, $zero, .L7F070980 -/* 0A549C 7F07096C C6060038 */ lwc1 $f6, 0x38($s0) -/* 0A54A0 7F070970 C6080044 */ lwc1 $f8, 0x44($s0) -/* 0A54A4 7F070974 10000003 */ b .L7F070984 -/* 0A54A8 7F070978 E6080050 */ swc1 $f8, 0x50($s0) -/* 0A54AC 7F07097C C6060038 */ lwc1 $f6, 0x38($s0) -.L7F070980: -/* 0A54B0 7F070980 E6060050 */ swc1 $f6, 0x50($s0) -.L7F070984: -/* 0A54B4 7F070984 8FA4006C */ lw $a0, 0x6c($sp) -/* 0A54B8 7F070988 8E250054 */ lw $a1, 0x54($s1) -/* 0A54BC 7F07098C 0FC1BD9B */ jal modelConstrainOrWrapAnimFrame -/* 0A54C0 7F070990 8E26006C */ lw $a2, 0x6c($s1) -/* 0A54C4 7F070994 A6220060 */ sh $v0, 0x60($s1) -/* 0A54C8 7F070998 8FA4006C */ lw $a0, 0x6c($sp) -/* 0A54CC 7F07099C 8E250054 */ lw $a1, 0x54($s1) -/* 0A54D0 7F0709A0 8E26006C */ lw $a2, 0x6c($s1) -/* 0A54D4 7F0709A4 0FC1BD9B */ jal modelConstrainOrWrapAnimFrame -/* 0A54D8 7F0709A8 24840001 */ addiu $a0, $a0, 1 -/* 0A54DC 7F0709AC A6220062 */ sh $v0, 0x62($s1) -/* 0A54E0 7F0709B0 82250025 */ lb $a1, 0x25($s1) -/* 0A54E4 7F0709B4 8E270054 */ lw $a3, 0x54($s1) -/* 0A54E8 7F0709B8 27B800C8 */ addiu $t8, $sp, 0xc8 -/* 0A54EC 7F0709BC AFB80014 */ sw $t8, 0x14($sp) -/* 0A54F0 7F0709C0 AFA20010 */ sw $v0, 0x10($sp) -/* 0A54F4 7F0709C4 8FA600E0 */ lw $a2, 0xe0($sp) -/* 0A54F8 7F0709C8 0FC1B4FD */ jal sub_GAME_7F06D3F4 -/* 0A54FC 7F0709CC 8FA400E4 */ lw $a0, 0xe4($sp) -/* 0A5500 7F0709D0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0A5504 7F0709D4 44811000 */ mtc1 $at, $f2 -/* 0A5508 7F0709D8 C7AC00DC */ lwc1 $f12, 0xdc($sp) -/* 0A550C 7F0709DC C7A400CC */ lwc1 $f4, 0xcc($sp) -/* 0A5510 7F0709E0 46026032 */ c.eq.s $f12, $f2 -/* 0A5514 7F0709E4 00000000 */ nop -/* 0A5518 7F0709E8 45030004 */ bc1tl .L7F0709FC -/* 0A551C 7F0709EC C7B000CC */ lwc1 $f16, 0xcc($sp) -/* 0A5520 7F0709F0 460C2282 */ mul.s $f10, $f4, $f12 -/* 0A5524 7F0709F4 E7AA00CC */ swc1 $f10, 0xcc($sp) -/* 0A5528 7F0709F8 C7B000CC */ lwc1 $f16, 0xcc($sp) -.L7F0709FC: -/* 0A552C 7F0709FC 24190001 */ li $t9, 1 -/* 0A5530 7F070A00 A2190002 */ sb $t9, 2($s0) -/* 0A5534 7F070A04 E6100044 */ swc1 $f16, 0x44($s0) -.L7F070A08: -/* 0A5538 7F070A08 3C013F80 */ li $at, 0x3F800000 # 1.000000 -.L7F070A0C: -/* 0A553C 7F070A0C 44811000 */ mtc1 $at, $f2 -/* 0A5540 7F070A10 1260000C */ beqz $s3, .L7F070A44 -/* 0A5544 7F070A14 8FAD006C */ lw $t5, 0x6c($sp) -/* 0A5548 7F070A18 8FA8006C */ lw $t0, 0x6c($sp) -/* 0A554C 7F070A1C 86290060 */ lh $t1, 0x60($s1) -/* 0A5550 7F070A20 44889000 */ mtc1 $t0, $f18 -/* 0A5554 7F070A24 44893000 */ mtc1 $t1, $f6 -/* 0A5558 7F070A28 46809220 */ cvt.s.w $f8, $f18 -/* 0A555C 7F070A2C 46803120 */ cvt.s.w $f4, $f6 -/* 0A5560 7F070A30 4608A001 */ sub.s $f0, $f20, $f8 -/* 0A5564 7F070A34 46002280 */ add.s $f10, $f4, $f0 -/* 0A5568 7F070A38 E620005C */ swc1 $f0, 0x5c($s1) -/* 0A556C 7F070A3C 1000001E */ b .L7F070AB8 -/* 0A5570 7F070A40 E62A0058 */ swc1 $f10, 0x58($s1) -.L7F070A44: -/* 0A5574 7F070A44 448D8000 */ mtc1 $t5, $f16 -/* 0A5578 7F070A48 862C0062 */ lh $t4, 0x62($s1) -/* 0A557C 7F070A4C 468084A0 */ cvt.s.w $f18, $f16 -/* 0A5580 7F070A50 448C3000 */ mtc1 $t4, $f6 -/* 0A5584 7F070A54 00000000 */ nop -/* 0A5588 7F070A58 46803120 */ cvt.s.w $f4, $f6 -/* 0A558C 7F070A5C 4612A201 */ sub.s $f8, $f20, $f18 -/* 0A5590 7F070A60 46081001 */ sub.s $f0, $f2, $f8 -/* 0A5594 7F070A64 46001281 */ sub.s $f10, $f2, $f0 -/* 0A5598 7F070A68 E620005C */ swc1 $f0, 0x5c($s1) -/* 0A559C 7F070A6C 460A2400 */ add.s $f16, $f4, $f10 -/* 0A55A0 7F070A70 10000011 */ b .L7F070AB8 -/* 0A55A4 7F070A74 E6300058 */ swc1 $f16, 0x58($s1) -.L7F070A78: -/* 0A55A8 7F070A78 1000000F */ b .L7F070AB8 -/* 0A55AC 7F070A7C A2000002 */ sb $zero, 2($s0) -/* 0A55B0 7F070A80 C7B40108 */ lwc1 $f20, 0x108($sp) -.L7F070A84: -/* 0A55B4 7F070A84 02202025 */ move $a0, $s1 -/* 0A55B8 7F070A88 8FA50100 */ lw $a1, 0x100($sp) -/* 0A55BC 7F070A8C 4406A000 */ mfc1 $a2, $f20 -/* 0A55C0 7F070A90 0FC1C024 */ jal modelSetAnimFrame2 -/* 0A55C4 7F070A94 00000000 */ nop -/* 0A55C8 7F070A98 10000008 */ b .L7F070ABC -/* 0A55CC 7F070A9C 8FBF005C */ lw $ra, 0x5c($sp) -/* 0A55D0 7F070AA0 C7B40108 */ lwc1 $f20, 0x108($sp) -.L7F070AA4: -/* 0A55D4 7F070AA4 02202025 */ move $a0, $s1 -/* 0A55D8 7F070AA8 8FA50100 */ lw $a1, 0x100($sp) -/* 0A55DC 7F070AAC 4406A000 */ mfc1 $a2, $f20 -/* 0A55E0 7F070AB0 0FC1C024 */ jal modelSetAnimFrame2 -/* 0A55E4 7F070AB4 00000000 */ nop -.L7F070AB8: -/* 0A55E8 7F070AB8 8FBF005C */ lw $ra, 0x5c($sp) -.L7F070ABC: -/* 0A55EC 7F070ABC D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0A55F0 7F070AC0 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0A55F4 7F070AC4 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0A55F8 7F070AC8 D7BA0030 */ ldc1 $f26, 0x30($sp) -/* 0A55FC 7F070ACC D7BC0038 */ ldc1 $f28, 0x38($sp) -/* 0A5600 7F070AD0 D7BE0040 */ ldc1 $f30, 0x40($sp) -/* 0A5604 7F070AD4 8FB0004C */ lw $s0, 0x4c($sp) -/* 0A5608 7F070AD8 8FB10050 */ lw $s1, 0x50($sp) -/* 0A560C 7F070ADC 8FB20054 */ lw $s2, 0x54($sp) -/* 0A5610 7F070AE0 8FB30058 */ lw $s3, 0x58($sp) -/* 0A5614 7F070AE4 03E00008 */ jr $ra -/* 0A5618 7F070AE8 27BD00F8 */ addiu $sp, $sp, 0xf8 -) -#endif +void modelTickAnim(struct Model *model, s32 numticks, s32 update_chrstuff) +{ + f32 frame; + f32 frame2; + f32 animlast; + frame = model->animframe1; + frame2 = model->animframe2; + if (numticks > 0) + { + while (numticks > 0) + { + f32 playspeed; + f32 speed; + f32 limit; + f32 endframe; + f32 saved_newspeed; + f32 saved_oldspeed; + f32 saved_timespeed; + f32 saved_elapsespeed; + f32 loopframe; + + if (model->unkb0 > 0.0f) + { + model->unkb4 += 1.0f; -#ifdef NONMATCHING -void modelTickAnimQuarterSpeed(void) { + if (model->unkb4 < model->unkb0) + { + model->playspeed = model->unkac + ((model->animrate - model->unkac) * model->unkb4) / model->unkb0; + } + else + { + model->unkb0 = 0.0f; + model->playspeed = model->animrate; + } + } + playspeed = model->playspeed; + + if (model->unk88 > 0.0f) + { + model->unk8c += playspeed; + + if (model->unk8c == 0.0f) + { + model->unk84 = 1.0f; + playspeed = model->playspeed; + } + else if (model->unk8c < model->unk88) + { + model->unk84 = (model->unk88 - model->unk8c) / model->unk88; + playspeed = model->playspeed; + } + else + { + model->unk88 = 0.0f; + model->unk84 = 0.0f; + model->anim2 = NULL; + playspeed = model->playspeed; + } + } + + if (model->timespeed > 0.0f) + { + model->elapsespeed += playspeed; + + if (model->elapsespeed < model->timespeed) + { + model->speed = model->oldspeed + + ((model->newspeed - model->oldspeed) * model->elapsespeed) + / model->timespeed; + playspeed = model->playspeed; + } + else + { + model->timespeed = 0.0f; + playspeed = model->playspeed; + model->speed = model->newspeed; + } + } + + speed = model->speed; + frame += playspeed * speed; + + if (model->anim2 != NULL) + { + if (model->unk7c > 0.0f) + { + model->unk80 += playspeed; + + if (model->unk80 < model->unk7c) + { + model->speed2 = model->unk78 + ((model->unk74 - model->unk78) * model->unk80) / model->unk7c; + playspeed = model->playspeed; + } + else + { + model->unk7c = 0.0f; + playspeed = model->playspeed; + model->speed2 = model->unk74; + } + } + + if (frame2); + + frame2 += playspeed * model->speed2; + } + + if (model->animlooping) + { + animlast = model->anim->unk04 - 1; + endframe = model->endframe; + + if (endframe); + + if (speed >= 0.0f) + { + limit = animlast; + loopframe = model->animloopframe; + + if (endframe >= 0.0f && endframe < animlast) + { + limit = endframe; + } + } + else + { + limit = model->animloopframe; + loopframe = animlast; + + if (endframe >= 0.0f && endframe < animlast) + { + loopframe = endframe; + } + } + + if ((speed >= 0.0f && frame >= limit) || (speed < 0.0f && frame <= limit)) + { + saved_newspeed = model->newspeed; + saved_oldspeed = model->oldspeed; + saved_timespeed = model->timespeed; + saved_elapsespeed = model->elapsespeed; + + if (update_chrstuff) + { + modelSetAnimFrame2WithChrStuff(model, model->animframe1, limit, 0.0f, 0.0f); + } + else + { + modelSetAnimFrame2(model, limit, 0.0f); + } + + modelSetAnimation(model, model->anim, model->gunhand, loopframe, model->speed, model->animloopmerge); + + model->animlooping = 1; + model->endframe = endframe; + model->newspeed = saved_newspeed; + model->oldspeed = saved_oldspeed; + model->timespeed = saved_timespeed; + model->elapsespeed = saved_elapsespeed; + + frame2 = frame; + frame = loopframe + frame - limit; + + if (model->animflipfunc != 0) + { + ((void (*)(void))model->animflipfunc)(); + } + } + } + + numticks--; + } + + if (update_chrstuff) + { + if (model->anim2 != NULL) + { + modelSetAnimFrame2WithChrStuff(model, model->animframe1, frame, model->animframe2, frame2); + } + else + { + modelSetAnimFrame2WithChrStuff(model, model->animframe1, frame, 0.0f, 0.0f); + } + } + else + { + if (model->anim2 != NULL) + { + modelSetAnimFrame2(model, frame, frame2); + } + else + { + modelSetAnimFrame2(model, frame, 0.0f); + } + } + } } -#else -GLOBAL_ASM( -.text -glabel modelTickAnimQuarterSpeed -/* 0A561C 7F070AEC 27BDFF78 */ addiu $sp, $sp, -0x88 -/* 0A5620 7F070AF0 AFBF0054 */ sw $ra, 0x54($sp) -/* 0A5624 7F070AF4 AFB10050 */ sw $s1, 0x50($sp) -/* 0A5628 7F070AF8 AFB0004C */ sw $s0, 0x4c($sp) -/* 0A562C 7F070AFC F7BE0040 */ sdc1 $f30, 0x40($sp) -/* 0A5630 7F070B00 F7BC0038 */ sdc1 $f28, 0x38($sp) -/* 0A5634 7F070B04 F7BA0030 */ sdc1 $f26, 0x30($sp) -/* 0A5638 7F070B08 F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0A563C 7F070B0C F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0A5640 7F070B10 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0A5644 7F070B14 AFA60090 */ sw $a2, 0x90($sp) -/* 0A5648 7F070B18 C4840058 */ lwc1 $f4, 0x58($a0) -/* 0A564C 7F070B1C C4920028 */ lwc1 $f18, 0x28($a0) -/* 0A5650 7F070B20 00808025 */ move $s0, $a0 -/* 0A5654 7F070B24 00A08825 */ move $s1, $a1 -/* 0A5658 7F070B28 18A0010A */ blez $a1, .L7F070F54 -/* 0A565C 7F070B2C E7A40080 */ swc1 $f4, 0x80($sp) -/* 0A5660 7F070B30 58A000E6 */ blezl $a1, .L7F070ECC -/* 0A5664 7F070B34 8FAB0090 */ lw $t3, 0x90($sp) -/* 0A5668 7F070B38 4480C000 */ mtc1 $zero, $f24 -/* 0A566C 7F070B3C 00000000 */ nop -/* 0A5670 7F070B40 C60200B0 */ lwc1 $f2, 0xb0($s0) -.L7F070B44: -/* 0A5674 7F070B44 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0A5678 7F070B48 4602C03C */ c.lt.s $f24, $f2 -/* 0A567C 7F070B4C 00000000 */ nop -/* 0A5680 7F070B50 45020017 */ bc1fl .L7F070BB0 -/* 0A5684 7F070B54 C6080088 */ lwc1 $f8, 0x88($s0) -/* 0A5688 7F070B58 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 0A568C 7F070B5C 44814000 */ mtc1 $at, $f8 -/* 0A5690 7F070B60 00000000 */ nop -/* 0A5694 7F070B64 46083280 */ add.s $f10, $f6, $f8 -/* 0A5698 7F070B68 E60A00B4 */ swc1 $f10, 0xb4($s0) -/* 0A569C 7F070B6C C60C00B4 */ lwc1 $f12, 0xb4($s0) -/* 0A56A0 7F070B70 4602603C */ c.lt.s $f12, $f2 -/* 0A56A4 7F070B74 00000000 */ nop -/* 0A56A8 7F070B78 4502000A */ bc1fl .L7F070BA4 -/* 0A56AC 7F070B7C C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 0A56B0 7F070B80 C60000AC */ lwc1 $f0, 0xac($s0) -/* 0A56B4 7F070B84 C60400A8 */ lwc1 $f4, 0xa8($s0) -/* 0A56B8 7F070B88 46002181 */ sub.s $f6, $f4, $f0 -/* 0A56BC 7F070B8C 460C3202 */ mul.s $f8, $f6, $f12 -/* 0A56C0 7F070B90 46024283 */ div.s $f10, $f8, $f2 -/* 0A56C4 7F070B94 460A0100 */ add.s $f4, $f0, $f10 -/* 0A56C8 7F070B98 10000004 */ b .L7F070BAC -/* 0A56CC 7F070B9C E60400A4 */ swc1 $f4, 0xa4($s0) -/* 0A56D0 7F070BA0 C60600A8 */ lwc1 $f6, 0xa8($s0) -.L7F070BA4: -/* 0A56D4 7F070BA4 E61800B0 */ swc1 $f24, 0xb0($s0) -/* 0A56D8 7F070BA8 E60600A4 */ swc1 $f6, 0xa4($s0) -.L7F070BAC: -/* 0A56DC 7F070BAC C6080088 */ lwc1 $f8, 0x88($s0) -.L7F070BB0: -/* 0A56E0 7F070BB0 C60200A4 */ lwc1 $f2, 0xa4($s0) -/* 0A56E4 7F070BB4 4608C03C */ c.lt.s $f24, $f8 -/* 0A56E8 7F070BB8 00000000 */ nop -/* 0A56EC 7F070BBC 4502001D */ bc1fl .L7F070C34 -/* 0A56F0 7F070BC0 C60C004C */ lwc1 $f12, 0x4c($s0) -/* 0A56F4 7F070BC4 C60A008C */ lwc1 $f10, 0x8c($s0) -/* 0A56F8 7F070BC8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0A56FC 7F070BCC 46025100 */ add.s $f4, $f10, $f2 -/* 0A5700 7F070BD0 E604008C */ swc1 $f4, 0x8c($s0) -/* 0A5704 7F070BD4 C60C008C */ lwc1 $f12, 0x8c($s0) -/* 0A5708 7F070BD8 460CC032 */ c.eq.s $f24, $f12 -/* 0A570C 7F070BDC 00000000 */ nop -/* 0A5710 7F070BE0 45020006 */ bc1fl .L7F070BFC -/* 0A5714 7F070BE4 C6000088 */ lwc1 $f0, 0x88($s0) -/* 0A5718 7F070BE8 44813000 */ mtc1 $at, $f6 -/* 0A571C 7F070BEC C60200A4 */ lwc1 $f2, 0xa4($s0) -/* 0A5720 7F070BF0 1000000F */ b .L7F070C30 -/* 0A5724 7F070BF4 E6060084 */ swc1 $f6, 0x84($s0) -/* 0A5728 7F070BF8 C6000088 */ lwc1 $f0, 0x88($s0) -.L7F070BFC: -/* 0A572C 7F070BFC 4600603C */ c.lt.s $f12, $f0 -/* 0A5730 7F070C00 00000000 */ nop -/* 0A5734 7F070C04 45020007 */ bc1fl .L7F070C24 -/* 0A5738 7F070C08 E6180088 */ swc1 $f24, 0x88($s0) -/* 0A573C 7F070C0C 460C0201 */ sub.s $f8, $f0, $f12 -/* 0A5740 7F070C10 C60200A4 */ lwc1 $f2, 0xa4($s0) -/* 0A5744 7F070C14 46004283 */ div.s $f10, $f8, $f0 -/* 0A5748 7F070C18 10000005 */ b .L7F070C30 -/* 0A574C 7F070C1C E60A0084 */ swc1 $f10, 0x84($s0) -/* 0A5750 7F070C20 E6180088 */ swc1 $f24, 0x88($s0) -.L7F070C24: -/* 0A5754 7F070C24 E6180084 */ swc1 $f24, 0x84($s0) -/* 0A5758 7F070C28 AE000054 */ sw $zero, 0x54($s0) -/* 0A575C 7F070C2C C60200A4 */ lwc1 $f2, 0xa4($s0) -.L7F070C30: -/* 0A5760 7F070C30 C60C004C */ lwc1 $f12, 0x4c($s0) -.L7F070C34: -/* 0A5764 7F070C34 460CC03C */ c.lt.s $f24, $f12 -/* 0A5768 7F070C38 00000000 */ nop -/* 0A576C 7F070C3C 45020017 */ bc1fl .L7F070C9C -/* 0A5770 7F070C40 C6100040 */ lwc1 $f16, 0x40($s0) -/* 0A5774 7F070C44 C6040050 */ lwc1 $f4, 0x50($s0) -/* 0A5778 7F070C48 46022180 */ add.s $f6, $f4, $f2 -/* 0A577C 7F070C4C E6060050 */ swc1 $f6, 0x50($s0) -/* 0A5780 7F070C50 C60E0050 */ lwc1 $f14, 0x50($s0) -/* 0A5784 7F070C54 460C703C */ c.lt.s $f14, $f12 -/* 0A5788 7F070C58 00000000 */ nop -/* 0A578C 7F070C5C 4502000B */ bc1fl .L7F070C8C -/* 0A5790 7F070C60 C60A0044 */ lwc1 $f10, 0x44($s0) -/* 0A5794 7F070C64 C6000048 */ lwc1 $f0, 0x48($s0) -/* 0A5798 7F070C68 C6080044 */ lwc1 $f8, 0x44($s0) -/* 0A579C 7F070C6C C60200A4 */ lwc1 $f2, 0xa4($s0) -/* 0A57A0 7F070C70 46004281 */ sub.s $f10, $f8, $f0 -/* 0A57A4 7F070C74 460E5102 */ mul.s $f4, $f10, $f14 -/* 0A57A8 7F070C78 460C2183 */ div.s $f6, $f4, $f12 -/* 0A57AC 7F070C7C 46060200 */ add.s $f8, $f0, $f6 -/* 0A57B0 7F070C80 10000005 */ b .L7F070C98 -/* 0A57B4 7F070C84 E6080040 */ swc1 $f8, 0x40($s0) -/* 0A57B8 7F070C88 C60A0044 */ lwc1 $f10, 0x44($s0) -.L7F070C8C: -/* 0A57BC 7F070C8C E618004C */ swc1 $f24, 0x4c($s0) -/* 0A57C0 7F070C90 C60200A4 */ lwc1 $f2, 0xa4($s0) -/* 0A57C4 7F070C94 E60A0040 */ swc1 $f10, 0x40($s0) -.L7F070C98: -/* 0A57C8 7F070C98 C6100040 */ lwc1 $f16, 0x40($s0) -.L7F070C9C: -/* 0A57CC 7F070C9C 8E0E0054 */ lw $t6, 0x54($s0) -/* 0A57D0 7F070CA0 46101102 */ mul.s $f4, $f2, $f16 -/* 0A57D4 7F070CA4 11C00020 */ beqz $t6, .L7F070D28 -/* 0A57D8 7F070CA8 46049480 */ add.s $f18, $f18, $f4 -/* 0A57DC 7F070CAC C60C007C */ lwc1 $f12, 0x7c($s0) -/* 0A57E0 7F070CB0 460CC03C */ c.lt.s $f24, $f12 -/* 0A57E4 7F070CB4 00000000 */ nop -/* 0A57E8 7F070CB8 45020017 */ bc1fl .L7F070D18 -/* 0A57EC 7F070CBC C6000070 */ lwc1 $f0, 0x70($s0) -/* 0A57F0 7F070CC0 C6060080 */ lwc1 $f6, 0x80($s0) -/* 0A57F4 7F070CC4 46023200 */ add.s $f8, $f6, $f2 -/* 0A57F8 7F070CC8 E6080080 */ swc1 $f8, 0x80($s0) -/* 0A57FC 7F070CCC C60E0080 */ lwc1 $f14, 0x80($s0) -/* 0A5800 7F070CD0 460C703C */ c.lt.s $f14, $f12 -/* 0A5804 7F070CD4 00000000 */ nop -/* 0A5808 7F070CD8 4502000B */ bc1fl .L7F070D08 -/* 0A580C 7F070CDC C6040074 */ lwc1 $f4, 0x74($s0) -/* 0A5810 7F070CE0 C6000078 */ lwc1 $f0, 0x78($s0) -/* 0A5814 7F070CE4 C60A0074 */ lwc1 $f10, 0x74($s0) -/* 0A5818 7F070CE8 C60200A4 */ lwc1 $f2, 0xa4($s0) -/* 0A581C 7F070CEC 46005101 */ sub.s $f4, $f10, $f0 -/* 0A5820 7F070CF0 460E2182 */ mul.s $f6, $f4, $f14 -/* 0A5824 7F070CF4 460C3203 */ div.s $f8, $f6, $f12 -/* 0A5828 7F070CF8 46080280 */ add.s $f10, $f0, $f8 -/* 0A582C 7F070CFC 10000005 */ b .L7F070D14 -/* 0A5830 7F070D00 E60A0070 */ swc1 $f10, 0x70($s0) -/* 0A5834 7F070D04 C6040074 */ lwc1 $f4, 0x74($s0) -.L7F070D08: -/* 0A5838 7F070D08 E618007C */ swc1 $f24, 0x7c($s0) -/* 0A583C 7F070D0C C60200A4 */ lwc1 $f2, 0xa4($s0) -/* 0A5840 7F070D10 E6040070 */ swc1 $f4, 0x70($s0) -.L7F070D14: -/* 0A5844 7F070D14 C6000070 */ lwc1 $f0, 0x70($s0) -.L7F070D18: -/* 0A5848 7F070D18 C7A60080 */ lwc1 $f6, 0x80($sp) -/* 0A584C 7F070D1C 46001202 */ mul.s $f8, $f2, $f0 -/* 0A5850 7F070D20 46083280 */ add.s $f10, $f6, $f8 -/* 0A5854 7F070D24 E7AA0080 */ swc1 $f10, 0x80($sp) -.L7F070D28: -/* 0A5858 7F070D28 820F0026 */ lb $t7, 0x26($s0) -/* 0A585C 7F070D2C 51E00064 */ beql $t7, $zero, .L7F070EC0 -/* 0A5860 7F070D30 2631FFFF */ addiu $s1, $s1, -1 -/* 0A5864 7F070D34 8E180020 */ lw $t8, 0x20($s0) -/* 0A5868 7F070D38 4610C03E */ c.le.s $f24, $f16 -/* 0A586C 7F070D3C C616003C */ lwc1 $f22, 0x3c($s0) -/* 0A5870 7F070D40 97190004 */ lhu $t9, 4($t8) -/* 0A5874 7F070D44 C6020090 */ lwc1 $f2, 0x90($s0) -/* 0A5878 7F070D48 2728FFFF */ addiu $t0, $t9, -1 -/* 0A587C 7F070D4C 44882000 */ mtc1 $t0, $f4 -/* 0A5880 7F070D50 4500000C */ bc1f .L7F070D84 -/* 0A5884 7F070D54 46802020 */ cvt.s.w $f0, $f4 -/* 0A5888 7F070D58 4616C03E */ c.le.s $f24, $f22 -/* 0A588C 7F070D5C 46000506 */ mov.s $f20, $f0 -/* 0A5890 7F070D60 46001686 */ mov.s $f26, $f2 -/* 0A5894 7F070D64 45020012 */ bc1fl .L7F070DB0 -/* 0A5898 7F070D68 4610C03E */ c.le.s $f24, $f16 -/* 0A589C 7F070D6C 4600B03C */ c.lt.s $f22, $f0 -/* 0A58A0 7F070D70 00000000 */ nop -/* 0A58A4 7F070D74 4502000E */ bc1fl .L7F070DB0 -/* 0A58A8 7F070D78 4610C03E */ c.le.s $f24, $f16 -/* 0A58AC 7F070D7C 1000000B */ b .L7F070DAC -/* 0A58B0 7F070D80 4600B506 */ mov.s $f20, $f22 -.L7F070D84: -/* 0A58B4 7F070D84 4616C03E */ c.le.s $f24, $f22 -/* 0A58B8 7F070D88 46001506 */ mov.s $f20, $f2 -/* 0A58BC 7F070D8C 46000686 */ mov.s $f26, $f0 -/* 0A58C0 7F070D90 45020007 */ bc1fl .L7F070DB0 -/* 0A58C4 7F070D94 4610C03E */ c.le.s $f24, $f16 -/* 0A58C8 7F070D98 4600B03C */ c.lt.s $f22, $f0 -/* 0A58CC 7F070D9C 00000000 */ nop -/* 0A58D0 7F070DA0 45020003 */ bc1fl .L7F070DB0 -/* 0A58D4 7F070DA4 4610C03E */ c.le.s $f24, $f16 -/* 0A58D8 7F070DA8 4600B686 */ mov.s $f26, $f22 -.L7F070DAC: -/* 0A58DC 7F070DAC 4610C03E */ c.le.s $f24, $f16 -.L7F070DB0: -/* 0A58E0 7F070DB0 00000000 */ nop -/* 0A58E4 7F070DB4 45020006 */ bc1fl .L7F070DD0 -/* 0A58E8 7F070DB8 4618803C */ c.lt.s $f16, $f24 -/* 0A58EC 7F070DBC 4612A03E */ c.le.s $f20, $f18 -/* 0A58F0 7F070DC0 00000000 */ nop -/* 0A58F4 7F070DC4 4503000A */ bc1tl .L7F070DF0 -/* 0A58F8 7F070DC8 C606004C */ lwc1 $f6, 0x4c($s0) -/* 0A58FC 7F070DCC 4618803C */ c.lt.s $f16, $f24 -.L7F070DD0: -/* 0A5900 7F070DD0 00000000 */ nop -/* 0A5904 7F070DD4 4502003A */ bc1fl .L7F070EC0 -/* 0A5908 7F070DD8 2631FFFF */ addiu $s1, $s1, -1 -/* 0A590C 7F070DDC 4614903E */ c.le.s $f18, $f20 -/* 0A5910 7F070DE0 00000000 */ nop -/* 0A5914 7F070DE4 45020036 */ bc1fl .L7F070EC0 -/* 0A5918 7F070DE8 2631FFFF */ addiu $s1, $s1, -1 -/* 0A591C 7F070DEC C606004C */ lwc1 $f6, 0x4c($s0) -.L7F070DF0: -/* 0A5920 7F070DF0 C61C0044 */ lwc1 $f28, 0x44($s0) -/* 0A5924 7F070DF4 C61E0048 */ lwc1 $f30, 0x48($s0) -/* 0A5928 7F070DF8 8FA90090 */ lw $t1, 0x90($sp) -/* 0A592C 7F070DFC E7A60060 */ swc1 $f6, 0x60($sp) -/* 0A5930 7F070E00 C6080050 */ lwc1 $f8, 0x50($s0) -/* 0A5934 7F070E04 02002025 */ move $a0, $s0 -/* 0A5938 7F070E08 1120000A */ beqz $t1, .L7F070E34 -/* 0A593C 7F070E0C E7A8005C */ swc1 $f8, 0x5c($sp) -/* 0A5940 7F070E10 8E050028 */ lw $a1, 0x28($s0) -/* 0A5944 7F070E14 4406A000 */ mfc1 $a2, $f20 -/* 0A5948 7F070E18 4407C000 */ mfc1 $a3, $f24 -/* 0A594C 7F070E1C E7B20084 */ swc1 $f18, 0x84($sp) -/* 0A5950 7F070E20 E7B80010 */ swc1 $f24, 0x10($sp) -/* 0A5954 7F070E24 0FC1C07B */ jal modelSetAnimFrame2WithChrStuff -/* 0A5958 7F070E28 02002025 */ move $a0, $s0 -/* 0A595C 7F070E2C 10000006 */ b .L7F070E48 -/* 0A5960 7F070E30 C7B20084 */ lwc1 $f18, 0x84($sp) -.L7F070E34: -/* 0A5964 7F070E34 4405A000 */ mfc1 $a1, $f20 -/* 0A5968 7F070E38 4406C000 */ mfc1 $a2, $f24 -/* 0A596C 7F070E3C 0FC1C024 */ jal modelSetAnimFrame2 -/* 0A5970 7F070E40 E7B20084 */ swc1 $f18, 0x84($sp) -/* 0A5974 7F070E44 C7B20084 */ lwc1 $f18, 0x84($sp) -.L7F070E48: -/* 0A5978 7F070E48 C60A0040 */ lwc1 $f10, 0x40($s0) -/* 0A597C 7F070E4C 8E050020 */ lw $a1, 0x20($s0) -/* 0A5980 7F070E50 82060024 */ lb $a2, 0x24($s0) -/* 0A5984 7F070E54 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 0A5988 7F070E58 C6040094 */ lwc1 $f4, 0x94($s0) -/* 0A598C 7F070E5C 4407D000 */ mfc1 $a3, $f26 -/* 0A5990 7F070E60 E7B20084 */ swc1 $f18, 0x84($sp) -/* 0A5994 7F070E64 02002025 */ move $a0, $s0 -/* 0A5998 7F070E68 0FC1BF2A */ jal modelSetAnimation -/* 0A599C 7F070E6C E7A40014 */ swc1 $f4, 0x14($sp) -/* 0A59A0 7F070E70 C7B20084 */ lwc1 $f18, 0x84($sp) -/* 0A59A4 7F070E74 240A0001 */ li $t2, 1 -/* 0A59A8 7F070E78 A20A0026 */ sb $t2, 0x26($s0) -/* 0A59AC 7F070E7C E616003C */ swc1 $f22, 0x3c($s0) -/* 0A59B0 7F070E80 E61C0044 */ swc1 $f28, 0x44($s0) -/* 0A59B4 7F070E84 E61E0048 */ swc1 $f30, 0x48($s0) -/* 0A59B8 7F070E88 C7A60060 */ lwc1 $f6, 0x60($sp) -/* 0A59BC 7F070E8C 4612D280 */ add.s $f10, $f26, $f18 -/* 0A59C0 7F070E90 E606004C */ swc1 $f6, 0x4c($s0) -/* 0A59C4 7F070E94 C7A8005C */ lwc1 $f8, 0x5c($sp) -/* 0A59C8 7F070E98 E6080050 */ swc1 $f8, 0x50($s0) -/* 0A59CC 7F070E9C E7B20080 */ swc1 $f18, 0x80($sp) -/* 0A59D0 7F070EA0 8E020098 */ lw $v0, 0x98($s0) -/* 0A59D4 7F070EA4 46145481 */ sub.s $f18, $f10, $f20 -/* 0A59D8 7F070EA8 50400005 */ beql $v0, $zero, .L7F070EC0 -/* 0A59DC 7F070EAC 2631FFFF */ addiu $s1, $s1, -1 -/* 0A59E0 7F070EB0 0040F809 */ jalr $v0 -/* 0A59E4 7F070EB4 E7B20084 */ swc1 $f18, 0x84($sp) -/* 0A59E8 7F070EB8 C7B20084 */ lwc1 $f18, 0x84($sp) -/* 0A59EC 7F070EBC 2631FFFF */ addiu $s1, $s1, -1 -.L7F070EC0: -/* 0A59F0 7F070EC0 5E20FF20 */ bgtzl $s1, .L7F070B44 -/* 0A59F4 7F070EC4 C60200B0 */ lwc1 $f2, 0xb0($s0) -/* 0A59F8 7F070EC8 8FAB0090 */ lw $t3, 0x90($sp) -.L7F070ECC: -/* 0A59FC 7F070ECC 4480C000 */ mtc1 $zero, $f24 -/* 0A5A00 7F070ED0 8E020054 */ lw $v0, 0x54($s0) -/* 0A5A04 7F070ED4 11600014 */ beqz $t3, .L7F070F28 -/* 0A5A08 7F070ED8 00000000 */ nop -/* 0A5A0C 7F070EDC 1040000A */ beqz $v0, .L7F070F08 -/* 0A5A10 7F070EE0 C6000028 */ lwc1 $f0, 0x28($s0) -/* 0A5A14 7F070EE4 C7A40080 */ lwc1 $f4, 0x80($sp) -/* 0A5A18 7F070EE8 44050000 */ mfc1 $a1, $f0 -/* 0A5A1C 7F070EEC 44069000 */ mfc1 $a2, $f18 -/* 0A5A20 7F070EF0 8E070058 */ lw $a3, 0x58($s0) -/* 0A5A24 7F070EF4 02002025 */ move $a0, $s0 -/* 0A5A28 7F070EF8 0FC1C07B */ jal modelSetAnimFrame2WithChrStuff -/* 0A5A2C 7F070EFC E7A40010 */ swc1 $f4, 0x10($sp) -/* 0A5A30 7F070F00 10000015 */ b .L7F070F58 -/* 0A5A34 7F070F04 8FBF0054 */ lw $ra, 0x54($sp) -.L7F070F08: -/* 0A5A38 7F070F08 44050000 */ mfc1 $a1, $f0 -/* 0A5A3C 7F070F0C 44069000 */ mfc1 $a2, $f18 -/* 0A5A40 7F070F10 4407C000 */ mfc1 $a3, $f24 -/* 0A5A44 7F070F14 02002025 */ move $a0, $s0 -/* 0A5A48 7F070F18 0FC1C07B */ jal modelSetAnimFrame2WithChrStuff -/* 0A5A4C 7F070F1C E7B80010 */ swc1 $f24, 0x10($sp) -/* 0A5A50 7F070F20 1000000D */ b .L7F070F58 -/* 0A5A54 7F070F24 8FBF0054 */ lw $ra, 0x54($sp) -.L7F070F28: -/* 0A5A58 7F070F28 10400006 */ beqz $v0, .L7F070F44 -/* 0A5A5C 7F070F2C 02002025 */ move $a0, $s0 -/* 0A5A60 7F070F30 44059000 */ mfc1 $a1, $f18 -/* 0A5A64 7F070F34 0FC1C024 */ jal modelSetAnimFrame2 -/* 0A5A68 7F070F38 8FA60080 */ lw $a2, 0x80($sp) -/* 0A5A6C 7F070F3C 10000006 */ b .L7F070F58 -/* 0A5A70 7F070F40 8FBF0054 */ lw $ra, 0x54($sp) -.L7F070F44: -/* 0A5A74 7F070F44 44059000 */ mfc1 $a1, $f18 -/* 0A5A78 7F070F48 4406C000 */ mfc1 $a2, $f24 -/* 0A5A7C 7F070F4C 0FC1C024 */ jal modelSetAnimFrame2 -/* 0A5A80 7F070F50 02002025 */ move $a0, $s0 -.L7F070F54: -/* 0A5A84 7F070F54 8FBF0054 */ lw $ra, 0x54($sp) -.L7F070F58: -/* 0A5A88 7F070F58 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0A5A8C 7F070F5C D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0A5A90 7F070F60 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0A5A94 7F070F64 D7BA0030 */ ldc1 $f26, 0x30($sp) -/* 0A5A98 7F070F68 D7BC0038 */ ldc1 $f28, 0x38($sp) -/* 0A5A9C 7F070F6C D7BE0040 */ ldc1 $f30, 0x40($sp) -/* 0A5AA0 7F070F70 8FB0004C */ lw $s0, 0x4c($sp) -/* 0A5AA4 7F070F74 8FB10050 */ lw $s1, 0x50($sp) -/* 0A5AA8 7F070F78 03E00008 */ jr $ra -/* 0A5AAC 7F070F7C 27BD0088 */ addiu $sp, $sp, 0x88 -) -#endif + /** * @brief Model Type 1: 1Cycle No Secondary @@ -7211,879 +4865,143 @@ void sub_GAME_7F073FC8(s32 arg0) } - -#ifdef NONMATCHING -void doshadow(void) -{ - s32 sp70; - void *sp6C; - s8 sp67; - ? sp58; - void *sp54; - s16 sp52; - f32 sp48; - f32 sp44; - f32 sp40; - void *sp38; - void *sp2C; - void *sp28; - f32 temp_f0; - f32 temp_f12; - f32 temp_f14; - f32 temp_f2; - f32 var_f12; - f32 var_f14; - s16 var_v1; - s32 temp_v0_2; - void *(*temp_v0_3)(f32, f32, ?, void *); - void *temp_a2; - void *temp_v0; - void *temp_v0_4; - void *temp_v1; - void *temp_v1_2; - void *temp_v1_3; - void *temp_v1_4; - void *temp_v1_5; - void *temp_v1_6; - - if (D_800363F0 > 0) - { - temp_a2 = arg2->unk4; - sp58.unk0 = D_800363F8.unk0; - sp58.unk4 = D_800363F8.unk4; - sp58.unkC = D_800363F8.unkC; - sp58.unk8 = D_800363F8.unk8; - sp6C = temp_a2; - temp_v0 = modelGetNodeRwData(arg1, temp_a2->unk14, temp_a2, arg1); - temp_f12 = temp_a2->unk8; - temp_f14 = temp_a2->unkC; - temp_f2 = temp_v0->unkC - temp_v0->unk4; - if (arg0->unk8 & 2) - { - temp_v0_2 = arg0->unk30; - if ((temp_v0_2 == 3) || (temp_v0_2 == 8)) - { - sp67 = ((arg0->unk34 & 0xFF) * D_800363F0) / 255; - } - else - { - sp67 = D_800363F0; - } - sp6C = temp_a2; - sp40 = temp_f2; - sp48 = temp_f12; - sp44 = temp_f14; - sp70 = arg1->unkC + (modelFindNodeMtxIndex(temp_f12, temp_f14, arg2, 0, temp_a2, arg1) << 6); - if (arg0->unk4 != 0) - { - var_v1 = (2.0f - temp_f2) / arg1->unk14; - } - else - { - var_v1 = -temp_f2 / arg1->unk14; - } - if (temp_f2 < 50.0f) - { - var_f12 = temp_f12 * 1.25f; - var_f14 = temp_f14 * 1.25f; - } - else if (temp_f2 > 300.0f) - { - var_f14 = 0.0f; - var_f12 = 0.0f; - } - else - { - temp_f0 = (300.0f - temp_f2) / 200.0f; - var_f12 = temp_f12 * temp_f0; - var_f14 = temp_f14 * temp_f0; - } - temp_v0_3 = vtxallocator; - if (temp_v0_3 == NULL) - { - sp52 = var_v1; - sp6C = temp_a2; - sp48 = var_f12; - sp44 = var_f14; - osSyncPrintf("doshadow: no vtx allocator!\n", temp_a2, arg1); - return_null(); - } - sp52 = var_v1; - sp6C = temp_a2; - sp48 = var_f12; - sp44 = var_f14; - temp_v0_4 = temp_v0_3(var_f12, var_f14, 4, temp_a2); - temp_v0_4->unk0 = sp58.unk0; - temp_v0_4->unk4 = sp58.unk4; - temp_v0_4->unk8 = sp58.unk8; - temp_v0_4->unkC = sp58.unkC; - temp_v0_4->unk10 = sp58.unk0; - temp_v0_4->unk14 = sp58.unk4; - temp_v0_4->unk18 = sp58.unk8; - temp_v0_4->unk1C = sp58.unkC; - temp_v0_4->unk20 = sp58.unk0; - temp_v0_4->unk24 = sp58.unk4; - temp_v0_4->unk28 = sp58.unk8; - temp_v0_4->unk2C = sp58.unkC; - temp_v0_4->unk30 = sp58.unk0; - temp_v0_4->unk34 = sp58.unk4; - temp_v0_4->unk38 = sp58.unk8; - temp_v0_4->unk3C = sp58.unkC; - temp_v0_4->unk2 = var_v1; - temp_v0_4->unk0 = temp_a2->unk0 - var_f12; - temp_v0_4->unk4 = temp_a2->unk4 - var_f14; - temp_v0_4->unk12 = var_v1; - temp_v0_4->unk10 = temp_a2->unk0 - var_f12; - temp_v0_4->unk14 = temp_a2->unk4 + var_f14; - temp_v0_4->unk22 = var_v1; - temp_v0_4->unk20 = temp_a2->unk0 + var_f12; - temp_v0_4->unk24 = temp_a2->unk4 + var_f14; - temp_v0_4->unk32 = var_v1; - temp_v0_4->unk30 = temp_a2->unk0 + var_f12; - temp_v0_4->unk34 = temp_a2->unk4 - var_f14; - temp_v1 = arg0->unkC; - arg0->unkC = temp_v1 + 8; - temp_v1->unk0 = 0xBC001406; - sp54 = temp_v0_4; - sp6C = temp_a2; - sp38 = temp_v1; - sp38->unk4 = osVirtualToPhysical(var_f12, var_f14, temp_a2->unk1C, temp_a2); - temp_v1_2 = temp_a2->unk10; - if (temp_v1_2 != NULL) - { - sp54->unk8 = 0; - sp54->unkA = 0; - sp54->unk1A = 0; - sp54->unk18 = (temp_v1_2->unk4 << 5) - 1; - sp54->unk28 = (temp_v1_2->unk4 << 5) - 1; - sp54->unk38 = 0; - sp54->unk2A = (temp_v1_2->unk5 << 5) - 1; - sp54->unk3A = (temp_v1_2->unk5 << 5) - 1; - sub_GAME_7F073038(arg0, temp_v1_2, 4, sp54); - } - else - { - sub_GAME_7F073038(arg0, NULL, 1, sp54); - } - temp_v1_3 = arg0->unkC; - arg0->unkC = temp_v1_3 + 8; - temp_v1_3->unk0 = 0xB7000000; - temp_v1_3->unk4 = 0x2000; - temp_v1_4 = arg0->unkC; - arg0->unkC = temp_v1_4 + 8; - temp_v1_4->unk0 = 0x01020040; - sp2C = temp_v1_4; - sp2C->unk4 = osVirtualToPhysical((bitwise f32)sp70); - temp_v1_5 = arg0->unkC; - arg0->unkC = temp_v1_5 + 8; - temp_v1_5->unk0 = 0x04300040; - sp28 = temp_v1_5; - sp28->unk4 = osVirtualToPhysical((bitwise f32)sp54, (bitwise f32)sp2C); - temp_v1_6 = arg0->unkC; - arg0->unkC = temp_v1_6 + 8; - temp_v1_6->unk4 = 0x3210; - temp_v1_6->unk0 = 0xB1000002; - } - } -} -#else - #ifndef VERSION_EU +#ifdef LEFTOVERDEBUG //D:80054A94 const char aDoshadowNoVtxAllocator[] = "doshadow: no vtx allocator!\n"; -GLOBAL_ASM( -.text -glabel doshadow -/* 0A8B04 7F073FD4 3C038003 */ lui $v1, %hi(D_800363F0) -/* 0A8B08 7F073FD8 246363F0 */ addiu $v1, %lo(D_800363F0) # addiu $v1, $v1, 0x63f0 -/* 0A8B0C 7F073FDC 8C6E0000 */ lw $t6, ($v1) -/* 0A8B10 7F073FE0 27BDFF88 */ addiu $sp, $sp, -0x78 -/* 0A8B14 7F073FE4 AFB00018 */ sw $s0, 0x18($sp) -/* 0A8B18 7F073FE8 00808025 */ move $s0, $a0 -/* 0A8B1C 7F073FEC AFBF001C */ sw $ra, 0x1c($sp) -/* 0A8B20 7F073FF0 AFA60080 */ sw $a2, 0x80($sp) -/* 0A8B24 7F073FF4 19C00142 */ blez $t6, .L7F074500 -/* 0A8B28 7F073FF8 00A03825 */ move $a3, $a1 -/* 0A8B2C 7F073FFC 3C198003 */ lui $t9, %hi(D_800363F8) -/* 0A8B30 7F074000 273963F8 */ addiu $t9, %lo(D_800363F8) # addiu $t9, $t9, 0x63f8 -/* 0A8B34 7F074004 8F210000 */ lw $at, ($t9) -/* 0A8B38 7F074008 8F290004 */ lw $t1, 4($t9) -/* 0A8B3C 7F07400C 8CC60004 */ lw $a2, 4($a2) -/* 0A8B40 7F074010 27B80058 */ addiu $t8, $sp, 0x58 -/* 0A8B44 7F074014 AF010000 */ sw $at, ($t8) -/* 0A8B48 7F074018 AF090004 */ sw $t1, 4($t8) -/* 0A8B4C 7F07401C 8F29000C */ lw $t1, 0xc($t9) -/* 0A8B50 7F074020 8F210008 */ lw $at, 8($t9) -/* 0A8B54 7F074024 00A02025 */ move $a0, $a1 -/* 0A8B58 7F074028 AF09000C */ sw $t1, 0xc($t8) -/* 0A8B5C 7F07402C AF010008 */ sw $at, 8($t8) -/* 0A8B60 7F074030 8CC50014 */ lw $a1, 0x14($a2) -/* 0A8B64 7F074034 AFA7007C */ sw $a3, 0x7c($sp) -/* 0A8B68 7F074038 0FC1B1E7 */ jal modelGetNodeRwData -/* 0A8B6C 7F07403C AFA6006C */ sw $a2, 0x6c($sp) -/* 0A8B70 7F074040 8E0A0008 */ lw $t2, 8($s0) -/* 0A8B74 7F074044 8FA6006C */ lw $a2, 0x6c($sp) -/* 0A8B78 7F074048 C444000C */ lwc1 $f4, 0xc($v0) -/* 0A8B7C 7F07404C C4460004 */ lwc1 $f6, 4($v0) -/* 0A8B80 7F074050 3C038003 */ lui $v1, %hi(D_800363F0) -/* 0A8B84 7F074054 314B0002 */ andi $t3, $t2, 2 -/* 0A8B88 7F074058 246363F0 */ addiu $v1, %lo(D_800363F0) # addiu $v1, $v1, 0x63f0 -/* 0A8B8C 7F07405C 8FA7007C */ lw $a3, 0x7c($sp) -/* 0A8B90 7F074060 C4CC0008 */ lwc1 $f12, 8($a2) -/* 0A8B94 7F074064 C4CE000C */ lwc1 $f14, 0xc($a2) -/* 0A8B98 7F074068 11600125 */ beqz $t3, .L7F074500 -/* 0A8B9C 7F07406C 46062081 */ sub.s $f2, $f4, $f6 -/* 0A8BA0 7F074070 8E020030 */ lw $v0, 0x30($s0) -/* 0A8BA4 7F074074 24010003 */ li $at, 3 -/* 0A8BA8 7F074078 00002825 */ move $a1, $zero -/* 0A8BAC 7F07407C 10410003 */ beq $v0, $at, .L7F07408C -/* 0A8BB0 7F074080 24010008 */ li $at, 8 -/* 0A8BB4 7F074084 5441000F */ bnel $v0, $at, .L7F0740C4 -/* 0A8BB8 7F074088 8C780000 */ lw $t8, ($v1) -.L7F07408C: -/* 0A8BBC 7F07408C 8E0C0034 */ lw $t4, 0x34($s0) -/* 0A8BC0 7F074090 8C6E0000 */ lw $t6, ($v1) -/* 0A8BC4 7F074094 240100FF */ li $at, 255 -/* 0A8BC8 7F074098 318D00FF */ andi $t5, $t4, 0xff -/* 0A8BCC 7F07409C 01AE0019 */ multu $t5, $t6 -/* 0A8BD0 7F0740A0 00001012 */ mflo $v0 -/* 0A8BD4 7F0740A4 00000000 */ nop -/* 0A8BD8 7F0740A8 00000000 */ nop -/* 0A8BDC 7F0740AC 0041001B */ divu $zero, $v0, $at -/* 0A8BE0 7F0740B0 00004012 */ mflo $t0 -/* 0A8BE4 7F0740B4 A3A80067 */ sb $t0, 0x67($sp) -/* 0A8BE8 7F0740B8 10000004 */ b .L7F0740CC -/* 0A8BEC 7F0740BC 8FA40080 */ lw $a0, 0x80($sp) -/* 0A8BF0 7F0740C0 8C780000 */ lw $t8, ($v1) -.L7F0740C4: -/* 0A8BF4 7F0740C4 A3B80067 */ sb $t8, 0x67($sp) -/* 0A8BF8 7F0740C8 8FA40080 */ lw $a0, 0x80($sp) -.L7F0740CC: -/* 0A8BFC 7F0740CC AFA6006C */ sw $a2, 0x6c($sp) -/* 0A8C00 7F0740D0 AFA7007C */ sw $a3, 0x7c($sp) -/* 0A8C04 7F0740D4 E7A20040 */ swc1 $f2, 0x40($sp) -/* 0A8C08 7F0740D8 E7AC0048 */ swc1 $f12, 0x48($sp) -/* 0A8C0C 7F0740DC 0FC1B15C */ jal modelFindNodeMtxIndex -/* 0A8C10 7F0740E0 E7AE0044 */ swc1 $f14, 0x44($sp) -/* 0A8C14 7F0740E4 8FA7007C */ lw $a3, 0x7c($sp) -/* 0A8C18 7F0740E8 00024980 */ sll $t1, $v0, 6 -/* 0A8C1C 7F0740EC 8FA6006C */ lw $a2, 0x6c($sp) -/* 0A8C20 7F0740F0 8CF9000C */ lw $t9, 0xc($a3) -/* 0A8C24 7F0740F4 C7A20040 */ lwc1 $f2, 0x40($sp) -/* 0A8C28 7F0740F8 C7AC0048 */ lwc1 $f12, 0x48($sp) -/* 0A8C2C 7F0740FC 03295021 */ addu $t2, $t9, $t1 -/* 0A8C30 7F074100 AFAA0070 */ sw $t2, 0x70($sp) -/* 0A8C34 7F074104 8E0B0004 */ lw $t3, 4($s0) -/* 0A8C38 7F074108 C7AE0044 */ lwc1 $f14, 0x44($sp) -/* 0A8C3C 7F07410C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0A8C40 7F074110 1160000B */ beqz $t3, .L7F074140 -/* 0A8C44 7F074114 3C028003 */ lui $v0, %hi(vtxallocator) -/* 0A8C48 7F074118 44814000 */ mtc1 $at, $f8 -/* 0A8C4C 7F07411C C4F20014 */ lwc1 $f18, 0x14($a3) -/* 0A8C50 7F074120 46024281 */ sub.s $f10, $f8, $f2 -/* 0A8C54 7F074124 46125103 */ div.s $f4, $f10, $f18 -/* 0A8C58 7F074128 4600218D */ trunc.w.s $f6, $f4 -/* 0A8C5C 7F07412C 44033000 */ mfc1 $v1, $f6 -/* 0A8C60 7F074130 00000000 */ nop -/* 0A8C64 7F074134 00036C00 */ sll $t5, $v1, 0x10 -/* 0A8C68 7F074138 10000009 */ b .L7F074160 -/* 0A8C6C 7F07413C 000D1C03 */ sra $v1, $t5, 0x10 -.L7F074140: -/* 0A8C70 7F074140 C4EA0014 */ lwc1 $f10, 0x14($a3) -/* 0A8C74 7F074144 46001207 */ neg.s $f8, $f2 -/* 0A8C78 7F074148 460A4483 */ div.s $f18, $f8, $f10 -/* 0A8C7C 7F07414C 4600910D */ trunc.w.s $f4, $f18 -/* 0A8C80 7F074150 44032000 */ mfc1 $v1, $f4 -/* 0A8C84 7F074154 00000000 */ nop -/* 0A8C88 7F074158 00034400 */ sll $t0, $v1, 0x10 -/* 0A8C8C 7F07415C 00081C03 */ sra $v1, $t0, 0x10 -.L7F074160: -/* 0A8C90 7F074160 3C014248 */ li $at, 0x42480000 # 50.000000 -/* 0A8C94 7F074164 44813000 */ mtc1 $at, $f6 -/* 0A8C98 7F074168 3C048005 */ lui $a0, %hi(aDoshadowNoVtxAllocator) -/* 0A8C9C 7F07416C 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0A8CA0 7F074170 4606103C */ c.lt.s $f2, $f6 -/* 0A8CA4 7F074174 24844A94 */ addiu $a0, %lo(aDoshadowNoVtxAllocator) # addiu $a0, $a0, 0x4a94 -/* 0A8CA8 7F074178 4502000A */ bc1fl .L7F0741A4 -/* 0A8CAC 7F07417C 44818000 */ mtc1 $at, $f16 -/* 0A8CB0 7F074180 3C013FA0 */ li $at, 0x3FA00000 # 1.250000 -/* 0A8CB4 7F074184 44810000 */ mtc1 $at, $f0 -/* 0A8CB8 7F074188 00000000 */ nop -/* 0A8CBC 7F07418C 46006302 */ mul.s $f12, $f12, $f0 -/* 0A8CC0 7F074190 00000000 */ nop -/* 0A8CC4 7F074194 46007382 */ mul.s $f14, $f14, $f0 -/* 0A8CC8 7F074198 10000012 */ b .L7F0741E4 -/* 0A8CCC 7F07419C 00000000 */ nop -/* 0A8CD0 7F0741A0 44818000 */ mtc1 $at, $f16 -.L7F0741A4: -/* 0A8CD4 7F0741A4 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 0A8CD8 7F0741A8 4602803C */ c.lt.s $f16, $f2 -/* 0A8CDC 7F0741AC 00000000 */ nop -/* 0A8CE0 7F0741B0 45020005 */ bc1fl .L7F0741C8 -/* 0A8CE4 7F0741B4 46028201 */ sub.s $f8, $f16, $f2 -/* 0A8CE8 7F0741B8 44807000 */ mtc1 $zero, $f14 -/* 0A8CEC 7F0741BC 10000009 */ b .L7F0741E4 -/* 0A8CF0 7F0741C0 46007306 */ mov.s $f12, $f14 -/* 0A8CF4 7F0741C4 46028201 */ sub.s $f8, $f16, $f2 -.L7F0741C8: -/* 0A8CF8 7F0741C8 44815000 */ mtc1 $at, $f10 -/* 0A8CFC 7F0741CC 00000000 */ nop -/* 0A8D00 7F0741D0 460A4003 */ div.s $f0, $f8, $f10 -/* 0A8D04 7F0741D4 46006302 */ mul.s $f12, $f12, $f0 -/* 0A8D08 7F0741D8 00000000 */ nop -/* 0A8D0C 7F0741DC 46007382 */ mul.s $f14, $f14, $f0 -/* 0A8D10 7F0741E0 00000000 */ nop -.L7F0741E4: -/* 0A8D14 7F0741E4 8C42608C */ lw $v0, %lo(vtxallocator)($v0) -/* 0A8D18 7F0741E8 5440000F */ bnezl $v0, .L7F074228 -/* 0A8D1C 7F0741EC 24040004 */ li $a0, 4 -/* 0A8D20 7F0741F0 A7A30052 */ sh $v1, 0x52($sp) -/* 0A8D24 7F0741F4 AFA6006C */ sw $a2, 0x6c($sp) -/* 0A8D28 7F0741F8 E7AC0048 */ swc1 $f12, 0x48($sp) -/* 0A8D2C 7F0741FC 0C0033D1 */ jal osSyncPrintf -/* 0A8D30 7F074200 E7AE0044 */ swc1 $f14, 0x44($sp) -/* 0A8D34 7F074204 0FC1B11B */ jal return_null -/* 0A8D38 7F074208 00000000 */ nop -/* 0A8D3C 7F07420C 3C028003 */ lui $v0, %hi(vtxallocator) -/* 0A8D40 7F074210 8C42608C */ lw $v0, %lo(vtxallocator)($v0) -/* 0A8D44 7F074214 87A30052 */ lh $v1, 0x52($sp) -/* 0A8D48 7F074218 8FA6006C */ lw $a2, 0x6c($sp) -/* 0A8D4C 7F07421C C7AC0048 */ lwc1 $f12, 0x48($sp) -/* 0A8D50 7F074220 C7AE0044 */ lwc1 $f14, 0x44($sp) -/* 0A8D54 7F074224 24040004 */ li $a0, 4 -.L7F074228: -/* 0A8D58 7F074228 A7A30052 */ sh $v1, 0x52($sp) -/* 0A8D5C 7F07422C AFA6006C */ sw $a2, 0x6c($sp) -/* 0A8D60 7F074230 E7AC0048 */ swc1 $f12, 0x48($sp) -/* 0A8D64 7F074234 0040F809 */ jalr $v0 -/* 0A8D68 7F074238 E7AE0044 */ swc1 $f14, 0x44($sp) -/* 0A8D6C 7F07423C 27A40058 */ addiu $a0, $sp, 0x58 -/* 0A8D70 7F074240 8C810000 */ lw $at, ($a0) -/* 0A8D74 7F074244 87A30052 */ lh $v1, 0x52($sp) -/* 0A8D78 7F074248 8FA6006C */ lw $a2, 0x6c($sp) -/* 0A8D7C 7F07424C C7AC0048 */ lwc1 $f12, 0x48($sp) -/* 0A8D80 7F074250 C7AE0044 */ lwc1 $f14, 0x44($sp) -/* 0A8D84 7F074254 AC410000 */ sw $at, ($v0) -/* 0A8D88 7F074258 8C8A0004 */ lw $t2, 4($a0) -/* 0A8D8C 7F07425C AC4A0004 */ sw $t2, 4($v0) -/* 0A8D90 7F074260 8C810008 */ lw $at, 8($a0) -/* 0A8D94 7F074264 AC410008 */ sw $at, 8($v0) -/* 0A8D98 7F074268 8C8A000C */ lw $t2, 0xc($a0) -/* 0A8D9C 7F07426C AC4A000C */ sw $t2, 0xc($v0) -/* 0A8DA0 7F074270 8C810000 */ lw $at, ($a0) -/* 0A8DA4 7F074274 AC410010 */ sw $at, 0x10($v0) -/* 0A8DA8 7F074278 8C8D0004 */ lw $t5, 4($a0) -/* 0A8DAC 7F07427C AC4D0014 */ sw $t5, 0x14($v0) -/* 0A8DB0 7F074280 8C810008 */ lw $at, 8($a0) -/* 0A8DB4 7F074284 AC410018 */ sw $at, 0x18($v0) -/* 0A8DB8 7F074288 8C8D000C */ lw $t5, 0xc($a0) -/* 0A8DBC 7F07428C AC4D001C */ sw $t5, 0x1c($v0) -/* 0A8DC0 7F074290 8C810000 */ lw $at, ($a0) -/* 0A8DC4 7F074294 AC410020 */ sw $at, 0x20($v0) -/* 0A8DC8 7F074298 8C880004 */ lw $t0, 4($a0) -/* 0A8DCC 7F07429C AC480024 */ sw $t0, 0x24($v0) -/* 0A8DD0 7F0742A0 8C810008 */ lw $at, 8($a0) -/* 0A8DD4 7F0742A4 AC410028 */ sw $at, 0x28($v0) -/* 0A8DD8 7F0742A8 8C88000C */ lw $t0, 0xc($a0) -/* 0A8DDC 7F0742AC AC48002C */ sw $t0, 0x2c($v0) -/* 0A8DE0 7F0742B0 8C810000 */ lw $at, ($a0) -/* 0A8DE4 7F0742B4 AC410030 */ sw $at, 0x30($v0) -/* 0A8DE8 7F0742B8 8C990004 */ lw $t9, 4($a0) -/* 0A8DEC 7F0742BC AC590034 */ sw $t9, 0x34($v0) -/* 0A8DF0 7F0742C0 8C810008 */ lw $at, 8($a0) -/* 0A8DF4 7F0742C4 AC410038 */ sw $at, 0x38($v0) -/* 0A8DF8 7F0742C8 8C99000C */ lw $t9, 0xc($a0) -/* 0A8DFC 7F0742CC AC59003C */ sw $t9, 0x3c($v0) -/* 0A8E00 7F0742D0 C4D20000 */ lwc1 $f18, ($a2) -/* 0A8E04 7F0742D4 A4430002 */ sh $v1, 2($v0) -/* 0A8E08 7F0742D8 460C9101 */ sub.s $f4, $f18, $f12 -/* 0A8E0C 7F0742DC 4600218D */ trunc.w.s $f6, $f4 -/* 0A8E10 7F0742E0 440C3000 */ mfc1 $t4, $f6 -/* 0A8E14 7F0742E4 00000000 */ nop -/* 0A8E18 7F0742E8 A44C0000 */ sh $t4, ($v0) -/* 0A8E1C 7F0742EC C4C80004 */ lwc1 $f8, 4($a2) -/* 0A8E20 7F0742F0 460E4281 */ sub.s $f10, $f8, $f14 -/* 0A8E24 7F0742F4 4600548D */ trunc.w.s $f18, $f10 -/* 0A8E28 7F0742F8 440D9000 */ mfc1 $t5, $f18 -/* 0A8E2C 7F0742FC 00000000 */ nop -/* 0A8E30 7F074300 A44D0004 */ sh $t5, 4($v0) -/* 0A8E34 7F074304 C4C40000 */ lwc1 $f4, ($a2) -/* 0A8E38 7F074308 A4430012 */ sh $v1, 0x12($v0) -/* 0A8E3C 7F07430C 460C2181 */ sub.s $f6, $f4, $f12 -/* 0A8E40 7F074310 4600320D */ trunc.w.s $f8, $f6 -/* 0A8E44 7F074314 440E4000 */ mfc1 $t6, $f8 -/* 0A8E48 7F074318 00000000 */ nop -/* 0A8E4C 7F07431C A44E0010 */ sh $t6, 0x10($v0) -/* 0A8E50 7F074320 C4CA0004 */ lwc1 $f10, 4($a2) -/* 0A8E54 7F074324 460E5480 */ add.s $f18, $f10, $f14 -/* 0A8E58 7F074328 4600910D */ trunc.w.s $f4, $f18 -/* 0A8E5C 7F07432C 44092000 */ mfc1 $t1, $f4 -/* 0A8E60 7F074330 00000000 */ nop -/* 0A8E64 7F074334 A4490014 */ sh $t1, 0x14($v0) -/* 0A8E68 7F074338 C4C60000 */ lwc1 $f6, ($a2) -/* 0A8E6C 7F07433C A4430022 */ sh $v1, 0x22($v0) -/* 0A8E70 7F074340 3C09BC00 */ lui $t1, (0xBC001406 >> 16) # lui $t1, 0xbc00 -/* 0A8E74 7F074344 460C3200 */ add.s $f8, $f6, $f12 -/* 0A8E78 7F074348 35291406 */ ori $t1, (0xBC001406 & 0xFFFF) # ori $t1, $t1, 0x1406 -/* 0A8E7C 7F07434C 4600428D */ trunc.w.s $f10, $f8 -/* 0A8E80 7F074350 44195000 */ mfc1 $t9, $f10 -/* 0A8E84 7F074354 00000000 */ nop -/* 0A8E88 7F074358 A4590020 */ sh $t9, 0x20($v0) -/* 0A8E8C 7F07435C C4D20004 */ lwc1 $f18, 4($a2) -/* 0A8E90 7F074360 460E9100 */ add.s $f4, $f18, $f14 -/* 0A8E94 7F074364 4600218D */ trunc.w.s $f6, $f4 -/* 0A8E98 7F074368 440C3000 */ mfc1 $t4, $f6 -/* 0A8E9C 7F07436C 00000000 */ nop -/* 0A8EA0 7F074370 A44C0024 */ sh $t4, 0x24($v0) -/* 0A8EA4 7F074374 C4C80000 */ lwc1 $f8, ($a2) -/* 0A8EA8 7F074378 A4430032 */ sh $v1, 0x32($v0) -/* 0A8EAC 7F07437C 460C4280 */ add.s $f10, $f8, $f12 -/* 0A8EB0 7F074380 4600548D */ trunc.w.s $f18, $f10 -/* 0A8EB4 7F074384 440D9000 */ mfc1 $t5, $f18 -/* 0A8EB8 7F074388 00000000 */ nop -/* 0A8EBC 7F07438C A44D0030 */ sh $t5, 0x30($v0) -/* 0A8EC0 7F074390 C4C40004 */ lwc1 $f4, 4($a2) -/* 0A8EC4 7F074394 460E2181 */ sub.s $f6, $f4, $f14 -/* 0A8EC8 7F074398 4600320D */ trunc.w.s $f8, $f6 -/* 0A8ECC 7F07439C 440E4000 */ mfc1 $t6, $f8 -/* 0A8ED0 7F0743A0 00000000 */ nop -/* 0A8ED4 7F0743A4 A44E0034 */ sh $t6, 0x34($v0) -/* 0A8ED8 7F0743A8 8E03000C */ lw $v1, 0xc($s0) -/* 0A8EDC 7F0743AC 24680008 */ addiu $t0, $v1, 8 -/* 0A8EE0 7F0743B0 AE08000C */ sw $t0, 0xc($s0) -/* 0A8EE4 7F0743B4 AC690000 */ sw $t1, ($v1) -/* 0A8EE8 7F0743B8 8CC4001C */ lw $a0, 0x1c($a2) -/* 0A8EEC 7F0743BC AFA20054 */ sw $v0, 0x54($sp) -/* 0A8EF0 7F0743C0 AFA6006C */ sw $a2, 0x6c($sp) -/* 0A8EF4 7F0743C4 0C003A2C */ jal osVirtualToPhysical -/* 0A8EF8 7F0743C8 AFA30038 */ sw $v1, 0x38($sp) -/* 0A8EFC 7F0743CC 8FA50038 */ lw $a1, 0x38($sp) -/* 0A8F00 7F0743D0 8FA6006C */ lw $a2, 0x6c($sp) -/* 0A8F04 7F0743D4 8FA70054 */ lw $a3, 0x54($sp) -/* 0A8F08 7F0743D8 ACA20004 */ sw $v0, 4($a1) -/* 0A8F0C 7F0743DC 8CC30010 */ lw $v1, 0x10($a2) -/* 0A8F10 7F0743E0 24060001 */ li $a2, 1 -/* 0A8F14 7F0743E4 00002825 */ move $a1, $zero -/* 0A8F18 7F0743E8 1060001C */ beqz $v1, .L7F07445C -/* 0A8F1C 7F0743EC 02002025 */ move $a0, $s0 -/* 0A8F20 7F0743F0 A4E00008 */ sh $zero, 8($a3) -/* 0A8F24 7F0743F4 A4E0000A */ sh $zero, 0xa($a3) -/* 0A8F28 7F0743F8 90780004 */ lbu $t8, 4($v1) -/* 0A8F2C 7F0743FC A4E0001A */ sh $zero, 0x1a($a3) -/* 0A8F30 7F074400 00602825 */ move $a1, $v1 -/* 0A8F34 7F074404 0018C940 */ sll $t9, $t8, 5 -/* 0A8F38 7F074408 272AFFFF */ addiu $t2, $t9, -1 -/* 0A8F3C 7F07440C A4EA0018 */ sh $t2, 0x18($a3) -/* 0A8F40 7F074410 906C0004 */ lbu $t4, 4($v1) -/* 0A8F44 7F074414 02002025 */ move $a0, $s0 -/* 0A8F48 7F074418 24060004 */ li $a2, 4 -/* 0A8F4C 7F07441C 000C5940 */ sll $t3, $t4, 5 -/* 0A8F50 7F074420 256DFFFF */ addiu $t5, $t3, -1 -/* 0A8F54 7F074424 A4ED0028 */ sh $t5, 0x28($a3) -/* 0A8F58 7F074428 906F0005 */ lbu $t7, 5($v1) -/* 0A8F5C 7F07442C A4E00038 */ sh $zero, 0x38($a3) -/* 0A8F60 7F074430 000F7140 */ sll $t6, $t7, 5 -/* 0A8F64 7F074434 25C8FFFF */ addiu $t0, $t6, -1 -/* 0A8F68 7F074438 A4E8002A */ sh $t0, 0x2a($a3) -/* 0A8F6C 7F07443C 90690005 */ lbu $t1, 5($v1) -/* 0A8F70 7F074440 0009C140 */ sll $t8, $t1, 5 -/* 0A8F74 7F074444 2719FFFF */ addiu $t9, $t8, -1 -/* 0A8F78 7F074448 A4F9003A */ sh $t9, 0x3a($a3) -/* 0A8F7C 7F07444C 0FC1CC0E */ jal sub_GAME_7F073038 -/* 0A8F80 7F074450 AFA70054 */ sw $a3, 0x54($sp) -/* 0A8F84 7F074454 10000004 */ b .L7F074468 -/* 0A8F88 7F074458 8FA70054 */ lw $a3, 0x54($sp) -.L7F07445C: -/* 0A8F8C 7F07445C 0FC1CC0E */ jal sub_GAME_7F073038 -/* 0A8F90 7F074460 AFA70054 */ sw $a3, 0x54($sp) -/* 0A8F94 7F074464 8FA70054 */ lw $a3, 0x54($sp) -.L7F074468: -/* 0A8F98 7F074468 8E03000C */ lw $v1, 0xc($s0) -/* 0A8F9C 7F07446C 3C0CB700 */ lui $t4, 0xb700 -/* 0A8FA0 7F074470 240B2000 */ li $t3, 8192 -/* 0A8FA4 7F074474 246A0008 */ addiu $t2, $v1, 8 -/* 0A8FA8 7F074478 AE0A000C */ sw $t2, 0xc($s0) -/* 0A8FAC 7F07447C AC6C0000 */ sw $t4, ($v1) -/* 0A8FB0 7F074480 AC6B0004 */ sw $t3, 4($v1) -/* 0A8FB4 7F074484 8E03000C */ lw $v1, 0xc($s0) -/* 0A8FB8 7F074488 3C0F0102 */ lui $t7, (0x01020040 >> 16) # lui $t7, 0x102 -/* 0A8FBC 7F07448C 35EF0040 */ ori $t7, (0x01020040 & 0xFFFF) # ori $t7, $t7, 0x40 -/* 0A8FC0 7F074490 246D0008 */ addiu $t5, $v1, 8 -/* 0A8FC4 7F074494 AE0D000C */ sw $t5, 0xc($s0) -/* 0A8FC8 7F074498 AC6F0000 */ sw $t7, ($v1) -/* 0A8FCC 7F07449C AFA70054 */ sw $a3, 0x54($sp) -/* 0A8FD0 7F0744A0 8FA40070 */ lw $a0, 0x70($sp) -/* 0A8FD4 7F0744A4 0C003A2C */ jal osVirtualToPhysical -/* 0A8FD8 7F0744A8 AFA3002C */ sw $v1, 0x2c($sp) -/* 0A8FDC 7F0744AC 8FA5002C */ lw $a1, 0x2c($sp) -/* 0A8FE0 7F0744B0 8FA40054 */ lw $a0, 0x54($sp) -/* 0A8FE4 7F0744B4 3C080430 */ lui $t0, (0x04300040 >> 16) # lui $t0, 0x430 -/* 0A8FE8 7F0744B8 ACA20004 */ sw $v0, 4($a1) -/* 0A8FEC 7F0744BC 8E03000C */ lw $v1, 0xc($s0) -/* 0A8FF0 7F0744C0 35080040 */ ori $t0, (0x04300040 & 0xFFFF) # ori $t0, $t0, 0x40 -/* 0A8FF4 7F0744C4 246E0008 */ addiu $t6, $v1, 8 -/* 0A8FF8 7F0744C8 AE0E000C */ sw $t6, 0xc($s0) -/* 0A8FFC 7F0744CC AC680000 */ sw $t0, ($v1) -/* 0A9000 7F0744D0 0C003A2C */ jal osVirtualToPhysical -/* 0A9004 7F0744D4 AFA30028 */ sw $v1, 0x28($sp) -/* 0A9008 7F0744D8 8FA60028 */ lw $a2, 0x28($sp) -/* 0A900C 7F0744DC 3C18B100 */ lui $t8, (0xB1000002 >> 16) # lui $t8, 0xb100 -/* 0A9010 7F0744E0 37180002 */ ori $t8, (0xB1000002 & 0xFFFF) # ori $t8, $t8, 2 -/* 0A9014 7F0744E4 ACC20004 */ sw $v0, 4($a2) -/* 0A9018 7F0744E8 8E03000C */ lw $v1, 0xc($s0) -/* 0A901C 7F0744EC 24193210 */ li $t9, 12816 -/* 0A9020 7F0744F0 24690008 */ addiu $t1, $v1, 8 -/* 0A9024 7F0744F4 AE09000C */ sw $t1, 0xc($s0) -/* 0A9028 7F0744F8 AC790004 */ sw $t9, 4($v1) -/* 0A902C 7F0744FC AC780000 */ sw $t8, ($v1) -.L7F074500: -/* 0A9030 7F074500 8FBF001C */ lw $ra, 0x1c($sp) -/* 0A9034 7F074504 8FB00018 */ lw $s0, 0x18($sp) -/* 0A9038 7F074508 27BD0078 */ addiu $sp, $sp, 0x78 -/* 0A903C 7F07450C 03E00008 */ jr $ra -/* 0A9040 7F074510 00000000 */ nop -) -#endif -#ifdef VERSION_EU -GLOBAL_ASM( -.text -glabel doshadow -/* 0A6AD8 7F0740E8 3C038003 */ lui $v1, %hi(D_800363F0) # $v1, 0x8003 -/* 0A6ADC 7F0740EC 24631940 */ addiu $v1, %lo(D_800363F0) # addiu $v1, $v1, 0x1940 -/* 0A6AE0 7F0740F0 8C6E0000 */ lw $t6, ($v1) -/* 0A6AE4 7F0740F4 27BDFF88 */ addiu $sp, $sp, -0x78 -/* 0A6AE8 7F0740F8 AFB00018 */ sw $s0, 0x18($sp) -/* 0A6AEC 7F0740FC 00808025 */ move $s0, $a0 -/* 0A6AF0 7F074100 AFBF001C */ sw $ra, 0x1c($sp) -/* 0A6AF4 7F074104 AFA60080 */ sw $a2, 0x80($sp) -/* 0A6AF8 7F074108 19C00132 */ blez $t6, .L7F0745D4 -/* 0A6AFC 7F07410C 00A03825 */ move $a3, $a1 -/* 0A6B00 7F074110 3C198003 */ lui $t9, %hi(D_800363F8) # $t9, 0x8003 -/* 0A6B04 7F074114 27391948 */ addiu $t9, %lo(D_800363F8) # addiu $t9, $t9, 0x1948 -/* 0A6B08 7F074118 8F210000 */ lw $at, ($t9) -/* 0A6B0C 7F07411C 8F2A0004 */ lw $t2, 4($t9) -/* 0A6B10 7F074120 8CC60004 */ lw $a2, 4($a2) -/* 0A6B14 7F074124 27B80058 */ addiu $t8, $sp, 0x58 -/* 0A6B18 7F074128 AF010000 */ sw $at, ($t8) -/* 0A6B1C 7F07412C AF0A0004 */ sw $t2, 4($t8) -/* 0A6B20 7F074130 8F2A000C */ lw $t2, 0xc($t9) -/* 0A6B24 7F074134 8F210008 */ lw $at, 8($t9) -/* 0A6B28 7F074138 00A02025 */ move $a0, $a1 -/* 0A6B2C 7F07413C AF0A000C */ sw $t2, 0xc($t8) -/* 0A6B30 7F074140 AF010008 */ sw $at, 8($t8) -/* 0A6B34 7F074144 8CC50014 */ lw $a1, 0x14($a2) -/* 0A6B38 7F074148 AFA7007C */ sw $a3, 0x7c($sp) -/* 0A6B3C 7F07414C 0FC1B3A3 */ jal modelGetNodeRwData -/* 0A6B40 7F074150 AFA6006C */ sw $a2, 0x6c($sp) -/* 0A6B44 7F074154 8E0B0008 */ lw $t3, 8($s0) -/* 0A6B48 7F074158 8FA6006C */ lw $a2, 0x6c($sp) -/* 0A6B4C 7F07415C C444000C */ lwc1 $f4, 0xc($v0) -/* 0A6B50 7F074160 C4460004 */ lwc1 $f6, 4($v0) -/* 0A6B54 7F074164 3C038003 */ lui $v1, %hi(D_800363F0) # $v1, 0x8003 -/* 0A6B58 7F074168 316C0002 */ andi $t4, $t3, 2 -/* 0A6B5C 7F07416C 24631940 */ addiu $v1, %lo(D_800363F0) # addiu $v1, $v1, 0x1940 -/* 0A6B60 7F074170 8FA7007C */ lw $a3, 0x7c($sp) -/* 0A6B64 7F074174 C4C20008 */ lwc1 $f2, 8($a2) -/* 0A6B68 7F074178 C4CC000C */ lwc1 $f12, 0xc($a2) -/* 0A6B6C 7F07417C 11800115 */ beqz $t4, .L7F0745D4 -/* 0A6B70 7F074180 46062381 */ sub.s $f14, $f4, $f6 -/* 0A6B74 7F074184 8E020030 */ lw $v0, 0x30($s0) -/* 0A6B78 7F074188 24010003 */ li $at, 3 -/* 0A6B7C 7F07418C 00002825 */ move $a1, $zero -/* 0A6B80 7F074190 10410003 */ beq $v0, $at, .L7F0741A0 -/* 0A6B84 7F074194 24010008 */ li $at, 8 -/* 0A6B88 7F074198 5441000F */ bnel $v0, $at, .L7F0741D8 -/* 0A6B8C 7F07419C 8C790000 */ lw $t9, ($v1) -.L7F0741A0: -/* 0A6B90 7F0741A0 8E0D0034 */ lw $t5, 0x34($s0) -/* 0A6B94 7F0741A4 8C6F0000 */ lw $t7, ($v1) -/* 0A6B98 7F0741A8 240100FF */ li $at, 255 -/* 0A6B9C 7F0741AC 31AE00FF */ andi $t6, $t5, 0xff -/* 0A6BA0 7F0741B0 01CF0019 */ multu $t6, $t7 -/* 0A6BA4 7F0741B4 00001012 */ mflo $v0 -/* 0A6BA8 7F0741B8 00000000 */ nop -/* 0A6BAC 7F0741BC 00000000 */ nop -/* 0A6BB0 7F0741C0 0041001B */ divu $zero, $v0, $at -/* 0A6BB4 7F0741C4 0000C012 */ mflo $t8 -/* 0A6BB8 7F0741C8 A3B80067 */ sb $t8, 0x67($sp) -/* 0A6BBC 7F0741CC 10000004 */ b .L7F0741E0 -/* 0A6BC0 7F0741D0 8FA40080 */ lw $a0, 0x80($sp) -/* 0A6BC4 7F0741D4 8C790000 */ lw $t9, ($v1) -.L7F0741D8: -/* 0A6BC8 7F0741D8 A3B90067 */ sb $t9, 0x67($sp) -/* 0A6BCC 7F0741DC 8FA40080 */ lw $a0, 0x80($sp) -.L7F0741E0: -/* 0A6BD0 7F0741E0 AFA6006C */ sw $a2, 0x6c($sp) -/* 0A6BD4 7F0741E4 AFA7007C */ sw $a3, 0x7c($sp) -/* 0A6BD8 7F0741E8 E7A20048 */ swc1 $f2, 0x48($sp) -/* 0A6BDC 7F0741EC E7AC0044 */ swc1 $f12, 0x44($sp) -/* 0A6BE0 7F0741F0 0FC1B32A */ jal modelFindNodeMtxIndex -/* 0A6BE4 7F0741F4 E7AE0040 */ swc1 $f14, 0x40($sp) -/* 0A6BE8 7F0741F8 8FA7007C */ lw $a3, 0x7c($sp) -/* 0A6BEC 7F0741FC 00025980 */ sll $t3, $v0, 6 -/* 0A6BF0 7F074200 8FA6006C */ lw $a2, 0x6c($sp) -/* 0A6BF4 7F074204 8CEA000C */ lw $t2, 0xc($a3) -/* 0A6BF8 7F074208 C7A20048 */ lwc1 $f2, 0x48($sp) -/* 0A6BFC 7F07420C C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 0A6C00 7F074210 014B6021 */ addu $t4, $t2, $t3 -/* 0A6C04 7F074214 AFAC0070 */ sw $t4, 0x70($sp) -/* 0A6C08 7F074218 8E0D0004 */ lw $t5, 4($s0) -/* 0A6C0C 7F07421C C7AE0040 */ lwc1 $f14, 0x40($sp) -/* 0A6C10 7F074220 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0A6C14 7F074224 11A0000B */ beqz $t5, .L7F074254 -/* 0A6C18 7F074228 24040004 */ li $a0, 4 -/* 0A6C1C 7F07422C 44814000 */ mtc1 $at, $f8 -/* 0A6C20 7F074230 C4F20014 */ lwc1 $f18, 0x14($a3) -/* 0A6C24 7F074234 460E4281 */ sub.s $f10, $f8, $f14 -/* 0A6C28 7F074238 46125103 */ div.s $f4, $f10, $f18 -/* 0A6C2C 7F07423C 4600218D */ trunc.w.s $f6, $f4 -/* 0A6C30 7F074240 44033000 */ mfc1 $v1, $f6 -/* 0A6C34 7F074244 00000000 */ nop -/* 0A6C38 7F074248 00037C00 */ sll $t7, $v1, 0x10 -/* 0A6C3C 7F07424C 10000009 */ b .L7F074274 -/* 0A6C40 7F074250 000F1C03 */ sra $v1, $t7, 0x10 -.L7F074254: -/* 0A6C44 7F074254 C4EA0014 */ lwc1 $f10, 0x14($a3) -/* 0A6C48 7F074258 46007207 */ neg.s $f8, $f14 -/* 0A6C4C 7F07425C 460A4483 */ div.s $f18, $f8, $f10 -/* 0A6C50 7F074260 4600910D */ trunc.w.s $f4, $f18 -/* 0A6C54 7F074264 44032000 */ mfc1 $v1, $f4 -/* 0A6C58 7F074268 00000000 */ nop -/* 0A6C5C 7F07426C 0003CC00 */ sll $t9, $v1, 0x10 -/* 0A6C60 7F074270 00191C03 */ sra $v1, $t9, 0x10 -.L7F074274: -/* 0A6C64 7F074274 3C014248 */ li $at, 0x42480000 # 50.000000 -/* 0A6C68 7F074278 44813000 */ mtc1 $at, $f6 -/* 0A6C6C 7F07427C 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0A6C70 7F074280 3C198003 */ lui $t9, %hi(vtxallocator) # $t9, 0x8003 -/* 0A6C74 7F074284 4606703C */ c.lt.s $f14, $f6 -/* 0A6C78 7F074288 00000000 */ nop -/* 0A6C7C 7F07428C 4502000A */ bc1fl .L7F0742B8 -/* 0A6C80 7F074290 44818000 */ mtc1 $at, $f16 -/* 0A6C84 7F074294 3C013FA0 */ li $at, 0x3FA00000 # 1.250000 -/* 0A6C88 7F074298 44810000 */ mtc1 $at, $f0 -/* 0A6C8C 7F07429C 00000000 */ nop -/* 0A6C90 7F0742A0 46001082 */ mul.s $f2, $f2, $f0 -/* 0A6C94 7F0742A4 00000000 */ nop -/* 0A6C98 7F0742A8 46006302 */ mul.s $f12, $f12, $f0 -/* 0A6C9C 7F0742AC 10000012 */ b .L7F0742F8 -/* 0A6CA0 7F0742B0 00000000 */ nop -/* 0A6CA4 7F0742B4 44818000 */ mtc1 $at, $f16 -.L7F0742B8: -/* 0A6CA8 7F0742B8 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 0A6CAC 7F0742BC 460E803C */ c.lt.s $f16, $f14 -/* 0A6CB0 7F0742C0 00000000 */ nop -/* 0A6CB4 7F0742C4 45020005 */ bc1fl .L7F0742DC -/* 0A6CB8 7F0742C8 460E8201 */ sub.s $f8, $f16, $f14 -/* 0A6CBC 7F0742CC 44806000 */ mtc1 $zero, $f12 -/* 0A6CC0 7F0742D0 10000009 */ b .L7F0742F8 -/* 0A6CC4 7F0742D4 46006086 */ mov.s $f2, $f12 -/* 0A6CC8 7F0742D8 460E8201 */ sub.s $f8, $f16, $f14 -.L7F0742DC: -/* 0A6CCC 7F0742DC 44815000 */ mtc1 $at, $f10 -/* 0A6CD0 7F0742E0 00000000 */ nop -/* 0A6CD4 7F0742E4 460A4003 */ div.s $f0, $f8, $f10 -/* 0A6CD8 7F0742E8 46001082 */ mul.s $f2, $f2, $f0 -/* 0A6CDC 7F0742EC 00000000 */ nop -/* 0A6CE0 7F0742F0 46006302 */ mul.s $f12, $f12, $f0 -/* 0A6CE4 7F0742F4 00000000 */ nop -.L7F0742F8: -/* 0A6CE8 7F0742F8 8F3915DC */ lw $t9, %lo(vtxallocator)($t9) -/* 0A6CEC 7F0742FC A7A30052 */ sh $v1, 0x52($sp) -/* 0A6CF0 7F074300 AFA6006C */ sw $a2, 0x6c($sp) -/* 0A6CF4 7F074304 E7A20048 */ swc1 $f2, 0x48($sp) -/* 0A6CF8 7F074308 0320F809 */ jalr $t9 -/* 0A6CFC 7F07430C E7AC0044 */ swc1 $f12, 0x44($sp) -/* 0A6D00 7F074310 27A80058 */ addiu $t0, $sp, 0x58 -/* 0A6D04 7F074314 8D010000 */ lw $at, ($t0) -/* 0A6D08 7F074318 87A30052 */ lh $v1, 0x52($sp) -/* 0A6D0C 7F07431C 8FA6006C */ lw $a2, 0x6c($sp) -/* 0A6D10 7F074320 C7A20048 */ lwc1 $f2, 0x48($sp) -/* 0A6D14 7F074324 C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 0A6D18 7F074328 AC410000 */ sw $at, ($v0) -/* 0A6D1C 7F07432C 8D0D0004 */ lw $t5, 4($t0) -/* 0A6D20 7F074330 AC4D0004 */ sw $t5, 4($v0) -/* 0A6D24 7F074334 8D010008 */ lw $at, 8($t0) -/* 0A6D28 7F074338 AC410008 */ sw $at, 8($v0) -/* 0A6D2C 7F07433C 8D0D000C */ lw $t5, 0xc($t0) -/* 0A6D30 7F074340 AC4D000C */ sw $t5, 0xc($v0) -/* 0A6D34 7F074344 8D010000 */ lw $at, ($t0) -/* 0A6D38 7F074348 AC410010 */ sw $at, 0x10($v0) -/* 0A6D3C 7F07434C 8D090004 */ lw $t1, 4($t0) -/* 0A6D40 7F074350 AC490014 */ sw $t1, 0x14($v0) -/* 0A6D44 7F074354 8D010008 */ lw $at, 8($t0) -/* 0A6D48 7F074358 AC410018 */ sw $at, 0x18($v0) -/* 0A6D4C 7F07435C 8D09000C */ lw $t1, 0xc($t0) -/* 0A6D50 7F074360 AC49001C */ sw $t1, 0x1c($v0) -/* 0A6D54 7F074364 8D010000 */ lw $at, ($t0) -/* 0A6D58 7F074368 AC410020 */ sw $at, 0x20($v0) -/* 0A6D5C 7F07436C 8D190004 */ lw $t9, 4($t0) -/* 0A6D60 7F074370 AC590024 */ sw $t9, 0x24($v0) -/* 0A6D64 7F074374 8D010008 */ lw $at, 8($t0) -/* 0A6D68 7F074378 AC410028 */ sw $at, 0x28($v0) -/* 0A6D6C 7F07437C 8D19000C */ lw $t9, 0xc($t0) -/* 0A6D70 7F074380 AC59002C */ sw $t9, 0x2c($v0) -/* 0A6D74 7F074384 8D010000 */ lw $at, ($t0) -/* 0A6D78 7F074388 AC410030 */ sw $at, 0x30($v0) -/* 0A6D7C 7F07438C 8D0D0004 */ lw $t5, 4($t0) -/* 0A6D80 7F074390 AC4D0034 */ sw $t5, 0x34($v0) -/* 0A6D84 7F074394 8D010008 */ lw $at, 8($t0) -/* 0A6D88 7F074398 AC410038 */ sw $at, 0x38($v0) -/* 0A6D8C 7F07439C 8D0D000C */ lw $t5, 0xc($t0) -/* 0A6D90 7F0743A0 AC4D003C */ sw $t5, 0x3c($v0) -/* 0A6D94 7F0743A4 C4D20000 */ lwc1 $f18, ($a2) -/* 0A6D98 7F0743A8 A4430002 */ sh $v1, 2($v0) -/* 0A6D9C 7F0743AC 3C0DBC00 */ lui $t5, (0xBC001406 >> 16) # lui $t5, 0xbc00 -/* 0A6DA0 7F0743B0 46029101 */ sub.s $f4, $f18, $f2 -/* 0A6DA4 7F0743B4 35AD1406 */ ori $t5, (0xBC001406 & 0xFFFF) # ori $t5, $t5, 0x1406 -/* 0A6DA8 7F0743B8 4600218D */ trunc.w.s $f6, $f4 -/* 0A6DAC 7F0743BC 440E3000 */ mfc1 $t6, $f6 -/* 0A6DB0 7F0743C0 00000000 */ nop -/* 0A6DB4 7F0743C4 A44E0000 */ sh $t6, ($v0) -/* 0A6DB8 7F0743C8 C4C80004 */ lwc1 $f8, 4($a2) -/* 0A6DBC 7F0743CC 460C4281 */ sub.s $f10, $f8, $f12 -/* 0A6DC0 7F0743D0 4600548D */ trunc.w.s $f18, $f10 -/* 0A6DC4 7F0743D4 440A9000 */ mfc1 $t2, $f18 -/* 0A6DC8 7F0743D8 00000000 */ nop -/* 0A6DCC 7F0743DC A44A0004 */ sh $t2, 4($v0) -/* 0A6DD0 7F0743E0 C4C40000 */ lwc1 $f4, ($a2) -/* 0A6DD4 7F0743E4 A4430012 */ sh $v1, 0x12($v0) -/* 0A6DD8 7F0743E8 46022181 */ sub.s $f6, $f4, $f2 -/* 0A6DDC 7F0743EC 4600320D */ trunc.w.s $f8, $f6 -/* 0A6DE0 7F0743F0 44194000 */ mfc1 $t9, $f8 -/* 0A6DE4 7F0743F4 00000000 */ nop -/* 0A6DE8 7F0743F8 A4590010 */ sh $t9, 0x10($v0) -/* 0A6DEC 7F0743FC C4CA0004 */ lwc1 $f10, 4($a2) -/* 0A6DF0 7F074400 460C5480 */ add.s $f18, $f10, $f12 -/* 0A6DF4 7F074404 4600910D */ trunc.w.s $f4, $f18 -/* 0A6DF8 7F074408 440C2000 */ mfc1 $t4, $f4 -/* 0A6DFC 7F07440C 00000000 */ nop -/* 0A6E00 7F074410 A44C0014 */ sh $t4, 0x14($v0) -/* 0A6E04 7F074414 C4C60000 */ lwc1 $f6, ($a2) -/* 0A6E08 7F074418 A4430022 */ sh $v1, 0x22($v0) -/* 0A6E0C 7F07441C 46023200 */ add.s $f8, $f6, $f2 -/* 0A6E10 7F074420 4600428D */ trunc.w.s $f10, $f8 -/* 0A6E14 7F074424 440F5000 */ mfc1 $t7, $f10 -/* 0A6E18 7F074428 00000000 */ nop -/* 0A6E1C 7F07442C A44F0020 */ sh $t7, 0x20($v0) -/* 0A6E20 7F074430 C4D20004 */ lwc1 $f18, 4($a2) -/* 0A6E24 7F074434 460C9100 */ add.s $f4, $f18, $f12 -/* 0A6E28 7F074438 4600218D */ trunc.w.s $f6, $f4 -/* 0A6E2C 7F07443C 44093000 */ mfc1 $t1, $f6 -/* 0A6E30 7F074440 00000000 */ nop -/* 0A6E34 7F074444 A4490024 */ sh $t1, 0x24($v0) -/* 0A6E38 7F074448 C4C80000 */ lwc1 $f8, ($a2) -/* 0A6E3C 7F07444C A4430032 */ sh $v1, 0x32($v0) -/* 0A6E40 7F074450 46024280 */ add.s $f10, $f8, $f2 -/* 0A6E44 7F074454 4600548D */ trunc.w.s $f18, $f10 -/* 0A6E48 7F074458 44189000 */ mfc1 $t8, $f18 -/* 0A6E4C 7F07445C 00000000 */ nop -/* 0A6E50 7F074460 A4580030 */ sh $t8, 0x30($v0) -/* 0A6E54 7F074464 C4C40004 */ lwc1 $f4, 4($a2) -/* 0A6E58 7F074468 460C2181 */ sub.s $f6, $f4, $f12 -/* 0A6E5C 7F07446C 4600320D */ trunc.w.s $f8, $f6 -/* 0A6E60 7F074470 440B4000 */ mfc1 $t3, $f8 -/* 0A6E64 7F074474 00000000 */ nop -/* 0A6E68 7F074478 A44B0034 */ sh $t3, 0x34($v0) -/* 0A6E6C 7F07447C 8E03000C */ lw $v1, 0xc($s0) -/* 0A6E70 7F074480 246C0008 */ addiu $t4, $v1, 8 -/* 0A6E74 7F074484 AE0C000C */ sw $t4, 0xc($s0) -/* 0A6E78 7F074488 AC6D0000 */ sw $t5, ($v1) -/* 0A6E7C 7F07448C 8CC4001C */ lw $a0, 0x1c($a2) -/* 0A6E80 7F074490 AFA20054 */ sw $v0, 0x54($sp) -/* 0A6E84 7F074494 AFA6006C */ sw $a2, 0x6c($sp) -/* 0A6E88 7F074498 0C003838 */ jal osVirtualToPhysical -/* 0A6E8C 7F07449C AFA30038 */ sw $v1, 0x38($sp) -/* 0A6E90 7F0744A0 8FA50038 */ lw $a1, 0x38($sp) -/* 0A6E94 7F0744A4 8FA6006C */ lw $a2, 0x6c($sp) -/* 0A6E98 7F0744A8 8FA70054 */ lw $a3, 0x54($sp) -/* 0A6E9C 7F0744AC ACA20004 */ sw $v0, 4($a1) -/* 0A6EA0 7F0744B0 8CC30010 */ lw $v1, 0x10($a2) -/* 0A6EA4 7F0744B4 24060001 */ li $a2, 1 -/* 0A6EA8 7F0744B8 00002825 */ move $a1, $zero -/* 0A6EAC 7F0744BC 1060001C */ beqz $v1, .L7F074530 -/* 0A6EB0 7F0744C0 02002025 */ move $a0, $s0 -/* 0A6EB4 7F0744C4 A4E00008 */ sh $zero, 8($a3) -/* 0A6EB8 7F0744C8 A4E0000A */ sh $zero, 0xa($a3) -/* 0A6EBC 7F0744CC 906F0004 */ lbu $t7, 4($v1) -/* 0A6EC0 7F0744D0 A4E0001A */ sh $zero, 0x1a($a3) -/* 0A6EC4 7F0744D4 00602825 */ move $a1, $v1 -/* 0A6EC8 7F0744D8 000F7140 */ sll $t6, $t7, 5 -/* 0A6ECC 7F0744DC 25C9FFFF */ addiu $t1, $t6, -1 -/* 0A6ED0 7F0744E0 A4E90018 */ sh $t1, 0x18($a3) -/* 0A6ED4 7F0744E4 906A0004 */ lbu $t2, 4($v1) -/* 0A6ED8 7F0744E8 02002025 */ move $a0, $s0 -/* 0A6EDC 7F0744EC 24060004 */ li $a2, 4 -/* 0A6EE0 7F0744F0 000AC140 */ sll $t8, $t2, 5 -/* 0A6EE4 7F0744F4 2719FFFF */ addiu $t9, $t8, -1 -/* 0A6EE8 7F0744F8 A4F90028 */ sh $t9, 0x28($a3) -/* 0A6EEC 7F0744FC 906B0005 */ lbu $t3, 5($v1) -/* 0A6EF0 7F074500 A4E00038 */ sh $zero, 0x38($a3) -/* 0A6EF4 7F074504 000B6140 */ sll $t4, $t3, 5 -/* 0A6EF8 7F074508 258DFFFF */ addiu $t5, $t4, -1 -/* 0A6EFC 7F07450C A4ED002A */ sh $t5, 0x2a($a3) -/* 0A6F00 7F074510 906F0005 */ lbu $t7, 5($v1) -/* 0A6F04 7F074514 000F7140 */ sll $t6, $t7, 5 -/* 0A6F08 7F074518 25C9FFFF */ addiu $t1, $t6, -1 -/* 0A6F0C 7F07451C A4E9003A */ sh $t1, 0x3a($a3) -/* 0A6F10 7F074520 0FC1CC67 */ jal sub_GAME_7F073038 -/* 0A6F14 7F074524 AFA70054 */ sw $a3, 0x54($sp) -/* 0A6F18 7F074528 10000004 */ b .L7F07453C -/* 0A6F1C 7F07452C 8FA70054 */ lw $a3, 0x54($sp) -.L7F074530: -/* 0A6F20 7F074530 0FC1CC67 */ jal sub_GAME_7F073038 -/* 0A6F24 7F074534 AFA70054 */ sw $a3, 0x54($sp) -/* 0A6F28 7F074538 8FA70054 */ lw $a3, 0x54($sp) -.L7F07453C: -/* 0A6F2C 7F07453C 8E03000C */ lw $v1, 0xc($s0) -/* 0A6F30 7F074540 3C18B700 */ lui $t8, 0xb700 -/* 0A6F34 7F074544 24192000 */ li $t9, 8192 -/* 0A6F38 7F074548 246A0008 */ addiu $t2, $v1, 8 -/* 0A6F3C 7F07454C AE0A000C */ sw $t2, 0xc($s0) -/* 0A6F40 7F074550 AC780000 */ sw $t8, ($v1) -/* 0A6F44 7F074554 AC790004 */ sw $t9, 4($v1) -/* 0A6F48 7F074558 8E03000C */ lw $v1, 0xc($s0) -/* 0A6F4C 7F07455C 3C0C0102 */ lui $t4, (0x01020040 >> 16) # lui $t4, 0x102 -/* 0A6F50 7F074560 358C0040 */ ori $t4, (0x01020040 & 0xFFFF) # ori $t4, $t4, 0x40 -/* 0A6F54 7F074564 246B0008 */ addiu $t3, $v1, 8 -/* 0A6F58 7F074568 AE0B000C */ sw $t3, 0xc($s0) -/* 0A6F5C 7F07456C AC6C0000 */ sw $t4, ($v1) -/* 0A6F60 7F074570 AFA70054 */ sw $a3, 0x54($sp) -/* 0A6F64 7F074574 8FA40070 */ lw $a0, 0x70($sp) -/* 0A6F68 7F074578 0C003838 */ jal osVirtualToPhysical -/* 0A6F6C 7F07457C AFA3002C */ sw $v1, 0x2c($sp) -/* 0A6F70 7F074580 8FA5002C */ lw $a1, 0x2c($sp) -/* 0A6F74 7F074584 8FA40054 */ lw $a0, 0x54($sp) -/* 0A6F78 7F074588 3C0F0430 */ lui $t7, (0x04300040 >> 16) # lui $t7, 0x430 -/* 0A6F7C 7F07458C ACA20004 */ sw $v0, 4($a1) -/* 0A6F80 7F074590 8E03000C */ lw $v1, 0xc($s0) -/* 0A6F84 7F074594 35EF0040 */ ori $t7, (0x04300040 & 0xFFFF) # ori $t7, $t7, 0x40 -/* 0A6F88 7F074598 246D0008 */ addiu $t5, $v1, 8 -/* 0A6F8C 7F07459C AE0D000C */ sw $t5, 0xc($s0) -/* 0A6F90 7F0745A0 AC6F0000 */ sw $t7, ($v1) -/* 0A6F94 7F0745A4 0C003838 */ jal osVirtualToPhysical -/* 0A6F98 7F0745A8 AFA30028 */ sw $v1, 0x28($sp) -/* 0A6F9C 7F0745AC 8FA60028 */ lw $a2, 0x28($sp) -/* 0A6FA0 7F0745B0 3C09B100 */ lui $t1, (0xB1000002 >> 16) # lui $t1, 0xb100 -/* 0A6FA4 7F0745B4 35290002 */ ori $t1, (0xB1000002 & 0xFFFF) # ori $t1, $t1, 2 -/* 0A6FA8 7F0745B8 ACC20004 */ sw $v0, 4($a2) -/* 0A6FAC 7F0745BC 8E03000C */ lw $v1, 0xc($s0) -/* 0A6FB0 7F0745C0 240A3210 */ li $t2, 12816 -/* 0A6FB4 7F0745C4 246E0008 */ addiu $t6, $v1, 8 -/* 0A6FB8 7F0745C8 AE0E000C */ sw $t6, 0xc($s0) -/* 0A6FBC 7F0745CC AC6A0004 */ sw $t2, 4($v1) -/* 0A6FC0 7F0745D0 AC690000 */ sw $t1, ($v1) -.L7F0745D4: -/* 0A6FC4 7F0745D4 8FBF001C */ lw $ra, 0x1c($sp) -/* 0A6FC8 7F0745D8 8FB00018 */ lw $s0, 0x18($sp) -/* 0A6FCC 7F0745DC 27BD0078 */ addiu $sp, $sp, 0x78 -/* 0A6FD0 7F0745E0 03E00008 */ jr $ra -/* 0A6FD4 7F0745E4 00000000 */ nop -) -#endif #endif +void doshadow(ModelRenderData *renderdata, Model *model, ModelNode *node) +{ + sImageTableEntry *image; + RenderPosView *mtx; + ModelRoData_ShadowRecord *shadow; + Vtx vtxtemplate; + Vtx *vtx; + s16 y; + s32 temp; + f32 sizex; + f32 sizey; + f32 height; + ModelRwData_HeaderRecord *rwdata; + if ((s32) D_800363F0 <= 0) + { + return; + } + shadow = &node->Data->Shadow; + vtxtemplate = D_800363F8; + rwdata = (ModelRwData_HeaderRecord *) modelGetNodeRwData(model, shadow->HeaderNode); + height = rwdata->pos.y - rwdata->ground; + sizex = shadow->size.x; + sizey = shadow->size.y; + + if (!(renderdata->flags & 2)) + { + return; + } + + if ((renderdata->PropType == PROP_TYPE_CHR) || (renderdata->PropType == PROP_TYPE_SMOKE)) + { + temp = (vtxtemplate.v.cn[3] = ((renderdata->envcolour.word & 0xff) * D_800363F0) / 255); + } + else + { + vtxtemplate.v.cn[3] = D_800363F0; + } + + temp = modelFindNodeMtxIndex(node, 0); + mtx = &model->render_pos[temp]; + + if (renderdata->zbufferenabled) + { + y = (2.0f - height) / model->scale; + } + else + { + y = (-height) / model->scale; + } + + if (height < 50.0f) + { + sizex *= 1.25f; + sizey *= 1.25f; + } + else if (300.0f < height) + { + sizex = 0.0f; + sizey = sizex; + } + else + { + sizex *= (300.0f - height) / 200.0f; + sizey *= (300.0f - height) / 200.0f; + } + +#ifdef LEFTOVERDEBUG + if (vtxallocator == NULL) + { + if (1); + osSyncPrintf(aDoshadowNoVtxAllocator); + return_null(); + } +#endif + + vtx = (Vtx *) vtxallocator(4); + + vtx[0] = vtxtemplate; + vtx[1] = vtxtemplate; + vtx[2] = vtxtemplate; + vtx[3] = vtxtemplate; + + vtx[0].v.ob[0] = shadow->pos.x - sizex; + vtx[0].v.ob[1] = y; + vtx[0].v.ob[2] = shadow->pos.y - sizey; + vtx[1].v.ob[0] = shadow->pos.x - sizex; + vtx[1].v.ob[1] = y; + vtx[1].v.ob[2] = shadow->pos.y + sizey; + vtx[2].v.ob[0] = shadow->pos.x + sizex; + vtx[2].v.ob[1] = y; + vtx[2].v.ob[2] = shadow->pos.y + sizey; + vtx[3].v.ob[0] = shadow->pos.x + sizex; + vtx[3].v.ob[1] = y; + vtx[3].v.ob[2] = shadow->pos.y - sizey; + + gSPSegment(renderdata->gdl++, SPSEGMENT_MODEL_COL1, osVirtualToPhysical(shadow->BaseAddr)); + + if (shadow->image != NULL) + { + image = shadow->image; + + vtx[0].v.tc[0] = 0; + vtx[0].v.tc[1] = 0; + vtx[1].v.tc[0] = (image->width << 5) - 1; + vtx[1].v.tc[1] = 0; + vtx[2].v.tc[0] = (image->width << 5) - 1; + vtx[2].v.tc[1] = (image->height << 5) - 1; + vtx[3].v.tc[0] = 0; + vtx[3].v.tc[1] = (image->height << 5) - 1; + + sub_GAME_7F073038(renderdata, image, 4); + } + else + { + sub_GAME_7F073038(renderdata, NULL, 1); + } + + gSPSetGeometryMode(renderdata->gdl++, G_CULL_BACK); + + { + Gfx *gdl; + gSPMatrix(renderdata->gdl++, osVirtualToPhysical(mtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(renderdata->gdl++, osVirtualToPhysical(vtx), 4, 0); + // gSP2Triangles(gdl, 0, 1, 2, 0, 2, 3, 0, 0) via GE's G_TRI4. The macro + // itself can't be used here: its inner Gfx temp would be the block's gfx + // pointer local and shift the spill homes off the original layout. + gdl = renderdata->gdl++; + gdl->words.w0 = _SHIFTL(G_TRI4, 24, 8) | _SHIFTL(2, 0, 4); gdl->words.w1 = _SHIFTL(3, 12, 4) | _SHIFTL(2, 8, 4) | _SHIFTL(1, 4, 4); + } +} void sub_GAME_7F074514(s32 param_1,struct Model *param_2,struct ModelNode *param_3) @@ -8098,12 +5016,6 @@ void sub_GAME_7F074524(Gfx *param_1,struct Model *param_2, struct ModelNode *par } - - - - - - void sub_GAME_7F074534(ModelRenderData* data, Model* model, ModelNode* node) { u32 id = node->Opcode & 0xFF; switch (id) { @@ -8167,11 +5079,7 @@ void sub_GAME_7F074534(ModelRenderData* data, Model* model, ModelNode* node) { } - - - -#if 1 -void subdraw(ModelRenderData *mrData, Model *mdl) // Matches +void subdraw(ModelRenderData *mrData, Model *mdl) { ModelNode *root = mdl->obj->RootNode; #if defined(LEFTOVERDEBUG) @@ -8216,155 +5124,6 @@ void subdraw(ModelRenderData *mrData, Model *mdl) // Matches } } -#else -#ifndef VERSION_EU -//D:80054AB4 -const char aSubdrawNoGfxlist[] = "subdraw: no gfxlist!\n"; -//D:80054ACC -const char aSubdrawObjectNotInitialised0xX[] = "subdraw: object not initialised! (0x%X)\n"; -GLOBAL_ASM( -.text -glabel subdraw -/* 0A91B4 7F074684 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0A91B8 7F074688 AFBF0024 */ sw $ra, 0x24($sp) -/* 0A91BC 7F07468C AFB20020 */ sw $s2, 0x20($sp) -/* 0A91C0 7F074690 AFB1001C */ sw $s1, 0x1c($sp) -/* 0A91C4 7F074694 AFB00018 */ sw $s0, 0x18($sp) -/* 0A91C8 7F074698 8C8E000C */ lw $t6, 0xc($a0) -/* 0A91CC 7F07469C 8CA20008 */ lw $v0, 8($a1) -/* 0A91D0 7F0746A0 00808825 */ move $s1, $a0 -/* 0A91D4 7F0746A4 00A09025 */ move $s2, $a1 -/* 0A91D8 7F0746A8 15C00007 */ bnez $t6, .L7F0746C8 -/* 0A91DC 7F0746AC 8C500000 */ lw $s0, ($v0) -/* 0A91E0 7F0746B0 3C048005 */ lui $a0, %hi(aSubdrawNoGfxlist) -/* 0A91E4 7F0746B4 0C0033D1 */ jal osSyncPrintf -/* 0A91E8 7F0746B8 24844AB4 */ addiu $a0, %lo(aSubdrawNoGfxlist) # addiu $a0, $a0, 0x4ab4 -/* 0A91EC 7F0746BC 0FC1B11B */ jal return_null -/* 0A91F0 7F0746C0 00000000 */ nop -/* 0A91F4 7F0746C4 8E420008 */ lw $v0, 8($s2) -.L7F0746C8: -/* 0A91F8 7F0746C8 8C4F001C */ lw $t7, 0x1c($v0) -/* 0A91FC 7F0746CC 3C048005 */ lui $a0, %hi(aSubdrawObjectNotInitialised0xX) -/* 0A9200 7F0746D0 24844ACC */ addiu $a0, %lo(aSubdrawObjectNotInitialised0xX) # addiu $a0, $a0, 0x4acc -/* 0A9204 7F0746D4 11E00003 */ beqz $t7, .L7F0746E4 -/* 0A9208 7F0746D8 00000000 */ nop -/* 0A920C 7F0746DC 10000006 */ b .L7F0746F8 -/* 0A9210 7F0746E0 8E22000C */ lw $v0, 0xc($s1) -.L7F0746E4: -/* 0A9214 7F0746E4 0C0033D1 */ jal osSyncPrintf -/* 0A9218 7F0746E8 00402825 */ move $a1, $v0 -/* 0A921C 7F0746EC 0FC1B11B */ jal return_null -/* 0A9220 7F0746F0 00000000 */ nop -/* 0A9224 7F0746F4 8E22000C */ lw $v0, 0xc($s1) -.L7F0746F8: -/* 0A9228 7F0746F8 24580008 */ addiu $t8, $v0, 8 -/* 0A922C 7F0746FC 3C19BC00 */ lui $t9, (0xBC000C06 >> 16) # lui $t9, 0xbc00 -/* 0A9230 7F074700 37390C06 */ ori $t9, (0xBC000C06 & 0xFFFF) # ori $t9, $t9, 0xc06 -/* 0A9234 7F074704 AE38000C */ sw $t8, 0xc($s1) -/* 0A9238 7F074708 AC590000 */ sw $t9, ($v0) -/* 0A923C 7F07470C 8E44000C */ lw $a0, 0xc($s2) -/* 0A9240 7F074710 0C003A2C */ jal osVirtualToPhysical -/* 0A9244 7F074714 AFA20028 */ sw $v0, 0x28($sp) -/* 0A9248 7F074718 8FA30028 */ lw $v1, 0x28($sp) -/* 0A924C 7F07471C 12000016 */ beqz $s0, .L7F074778 -/* 0A9250 7F074720 AC620004 */ sw $v0, 4($v1) -/* 0A9254 7F074724 02202025 */ move $a0, $s1 -.L7F074728: -/* 0A9258 7F074728 02402825 */ move $a1, $s2 -/* 0A925C 7F07472C 0FC1D14D */ jal sub_GAME_7F074534 -/* 0A9260 7F074730 02003025 */ move $a2, $s0 -/* 0A9264 7F074734 8E020014 */ lw $v0, 0x14($s0) -/* 0A9268 7F074738 10400003 */ beqz $v0, .L7F074748 -/* 0A926C 7F07473C 00000000 */ nop -/* 0A9270 7F074740 1000000B */ b .L7F074770 -/* 0A9274 7F074744 00408025 */ move $s0, $v0 -.L7F074748: -/* 0A9278 7F074748 12000009 */ beqz $s0, .L7F074770 -/* 0A927C 7F07474C 00000000 */ nop -/* 0A9280 7F074750 8E02000C */ lw $v0, 0xc($s0) -.L7F074754: -/* 0A9284 7F074754 50400004 */ beql $v0, $zero, .L7F074768 -/* 0A9288 7F074758 8E100008 */ lw $s0, 8($s0) -/* 0A928C 7F07475C 10000004 */ b .L7F074770 -/* 0A9290 7F074760 00408025 */ move $s0, $v0 -/* 0A9294 7F074764 8E100008 */ lw $s0, 8($s0) -.L7F074768: -/* 0A9298 7F074768 5600FFFA */ bnezl $s0, .L7F074754 -/* 0A929C 7F07476C 8E02000C */ lw $v0, 0xc($s0) -.L7F074770: -/* 0A92A0 7F074770 5600FFED */ bnezl $s0, .L7F074728 -/* 0A92A4 7F074774 02202025 */ move $a0, $s1 -.L7F074778: -/* 0A92A8 7F074778 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A92AC 7F07477C 8FB00018 */ lw $s0, 0x18($sp) -/* 0A92B0 7F074780 8FB1001C */ lw $s1, 0x1c($sp) -/* 0A92B4 7F074784 8FB20020 */ lw $s2, 0x20($sp) -/* 0A92B8 7F074788 03E00008 */ jr $ra -/* 0A92BC 7F07478C 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif -#ifdef VERSION_EU -GLOBAL_ASM( -.text -glabel subdraw -/* 0A7148 7F074758 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0A714C 7F07475C AFBF0024 */ sw $ra, 0x24($sp) -/* 0A7150 7F074760 AFB20020 */ sw $s2, 0x20($sp) -/* 0A7154 7F074764 AFB1001C */ sw $s1, 0x1c($sp) -/* 0A7158 7F074768 AFB00018 */ sw $s0, 0x18($sp) -/* 0A715C 7F07476C 8CAE0008 */ lw $t6, 8($a1) -/* 0A7160 7F074770 8C82000C */ lw $v0, 0xc($a0) -/* 0A7164 7F074774 3C18BC00 */ lui $t8, (0xBC000C06 >> 16) # lui $t8, 0xbc00 -/* 0A7168 7F074778 8DD00000 */ lw $s0, ($t6) -/* 0A716C 7F07477C 244F0008 */ addiu $t7, $v0, 8 -/* 0A7170 7F074780 AC8F000C */ sw $t7, 0xc($a0) -/* 0A7174 7F074784 37180C06 */ ori $t8, (0xBC000C06 & 0xFFFF) # ori $t8, $t8, 0xc06 -/* 0A7178 7F074788 00809025 */ move $s2, $a0 -/* 0A717C 7F07478C AC580000 */ sw $t8, ($v0) -/* 0A7180 7F074790 8CA4000C */ lw $a0, 0xc($a1) -/* 0A7184 7F074794 00A08825 */ move $s1, $a1 -/* 0A7188 7F074798 0C003838 */ jal osVirtualToPhysical -/* 0A718C 7F07479C AFA20028 */ sw $v0, 0x28($sp) -/* 0A7190 7F0747A0 8FA30028 */ lw $v1, 0x28($sp) -/* 0A7194 7F0747A4 12000016 */ beqz $s0, .L7F074800 -/* 0A7198 7F0747A8 AC620004 */ sw $v0, 4($v1) -/* 0A719C 7F0747AC 02402025 */ move $a0, $s2 -.L7F0747B0: -/* 0A71A0 7F0747B0 02202825 */ move $a1, $s1 -/* 0A71A4 7F0747B4 0FC1D182 */ jal sub_GAME_7F074534 -/* 0A71A8 7F0747B8 02003025 */ move $a2, $s0 -/* 0A71AC 7F0747BC 8E020014 */ lw $v0, 0x14($s0) -/* 0A71B0 7F0747C0 10400003 */ beqz $v0, .L7F0747D0 -/* 0A71B4 7F0747C4 00000000 */ nop -/* 0A71B8 7F0747C8 1000000B */ b .L7F0747F8 -/* 0A71BC 7F0747CC 00408025 */ move $s0, $v0 -.L7F0747D0: -/* 0A71C0 7F0747D0 12000009 */ beqz $s0, .L7F0747F8 -/* 0A71C4 7F0747D4 00000000 */ nop -/* 0A71C8 7F0747D8 8E02000C */ lw $v0, 0xc($s0) -.L7F0747DC: -/* 0A71CC 7F0747DC 50400004 */ beql $v0, $zero, .L7F0747F0 -/* 0A71D0 7F0747E0 8E100008 */ lw $s0, 8($s0) -/* 0A71D4 7F0747E4 10000004 */ b .L7F0747F8 -/* 0A71D8 7F0747E8 00408025 */ move $s0, $v0 -/* 0A71DC 7F0747EC 8E100008 */ lw $s0, 8($s0) -.L7F0747F0: -/* 0A71E0 7F0747F0 5600FFFA */ bnezl $s0, .L7F0747DC -/* 0A71E4 7F0747F4 8E02000C */ lw $v0, 0xc($s0) -.L7F0747F8: -/* 0A71E8 7F0747F8 5600FFED */ bnezl $s0, .L7F0747B0 -/* 0A71EC 7F0747FC 02402025 */ move $a0, $s2 -.L7F074800: -/* 0A71F0 7F074800 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A71F4 7F074804 8FB00018 */ lw $s0, 0x18($sp) -/* 0A71F8 7F074808 8FB1001C */ lw $s1, 0x1c($sp) -/* 0A71FC 7F07480C 8FB20020 */ lw $s2, 0x20($sp) -/* 0A7200 7F074810 03E00008 */ jr $ra -/* 0A7204 7F074814 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif -#endif - // unreferenced void sub_GAME_7F074790(ModelRenderData* arg0, Model* arg1) @@ -8375,990 +5134,478 @@ void sub_GAME_7F074790(ModelRenderData* arg0, Model* arg1) } -#ifdef NONMATCHING -void sub_GAME_7F0747D0(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0747D0 -/* 0A9300 7F0747D0 C4A00000 */ lwc1 $f0, ($a1) -/* 0A9304 7F0747D4 C4A20004 */ lwc1 $f2, 4($a1) -/* 0A9308 7F0747D8 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 0A930C 7F0747DC 46000402 */ mul.s $f16, $f0, $f0 -/* 0A9310 7F0747E0 00000000 */ nop -/* 0A9314 7F0747E4 46021102 */ mul.s $f4, $f2, $f2 -/* 0A9318 7F0747E8 E7A400B0 */ swc1 $f4, 0xb0($sp) -/* 0A931C 7F0747EC C4AC0008 */ lwc1 $f12, 8($a1) -/* 0A9320 7F0747F0 C7A800B0 */ lwc1 $f8, 0xb0($sp) -/* 0A9324 7F0747F4 460C6182 */ mul.s $f6, $f12, $f12 -/* 0A9328 7F0747F8 46088280 */ add.s $f10, $f16, $f8 -/* 0A932C 7F0747FC E7A600AC */ swc1 $f6, 0xac($sp) -/* 0A9330 7F074800 C7A400AC */ lwc1 $f4, 0xac($sp) -/* 0A9334 7F074804 C4860004 */ lwc1 $f6, 4($a0) -/* 0A9338 7F074808 46045380 */ add.s $f14, $f10, $f4 -/* 0A933C 7F07480C 46007387 */ neg.s $f14, $f14 -/* 0A9340 7F074810 46067202 */ mul.s $f8, $f14, $f6 -/* 0A9344 7F074814 E7A800A4 */ swc1 $f8, 0xa4($sp) -/* 0A9348 7F074818 C48A0008 */ lwc1 $f10, 8($a0) -/* 0A934C 7F07481C 460A7102 */ mul.s $f4, $f14, $f10 -/* 0A9350 7F074820 E7A400A0 */ swc1 $f4, 0xa0($sp) -/* 0A9354 7F074824 C4E60008 */ lwc1 $f6, 8($a3) -/* 0A9358 7F074828 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0A935C 7F07482C C4E80000 */ lwc1 $f8, ($a3) -/* 0A9360 7F074830 E7A80010 */ swc1 $f8, 0x10($sp) -/* 0A9364 7F074834 C4EA0004 */ lwc1 $f10, 4($a3) -/* 0A9368 7F074838 C7A40010 */ lwc1 $f4, 0x10($sp) -/* 0A936C 7F07483C E7AA000C */ swc1 $f10, 0xc($sp) -/* 0A9370 7F074840 46040182 */ mul.s $f6, $f0, $f4 -/* 0A9374 7F074844 C7A8000C */ lwc1 $f8, 0xc($sp) -/* 0A9378 7F074848 46081282 */ mul.s $f10, $f2, $f8 -/* 0A937C 7F07484C C7A80014 */ lwc1 $f8, 0x14($sp) -/* 0A9380 7F074850 460A3100 */ add.s $f4, $f6, $f10 -/* 0A9384 7F074854 460C4182 */ mul.s $f6, $f8, $f12 -/* 0A9388 7F074858 46043280 */ add.s $f10, $f6, $f4 -/* 0A938C 7F07485C E7AA009C */ swc1 $f10, 0x9c($sp) -/* 0A9390 7F074860 C4A60038 */ lwc1 $f6, 0x38($a1) -/* 0A9394 7F074864 C4C80008 */ lwc1 $f8, 8($a2) -/* 0A9398 7F074868 46064101 */ sub.s $f4, $f8, $f6 -/* 0A939C 7F07486C E7A40008 */ swc1 $f4, 8($sp) -/* 0A93A0 7F074870 C4A60030 */ lwc1 $f6, 0x30($a1) -/* 0A93A4 7F074874 C4C80000 */ lwc1 $f8, ($a2) -/* 0A93A8 7F074878 46064101 */ sub.s $f4, $f8, $f6 -/* 0A93AC 7F07487C E7A40004 */ swc1 $f4, 4($sp) -/* 0A93B0 7F074880 C4A60034 */ lwc1 $f6, 0x34($a1) -/* 0A93B4 7F074884 C4C80004 */ lwc1 $f8, 4($a2) -/* 0A93B8 7F074888 46064101 */ sub.s $f4, $f8, $f6 -/* 0A93BC 7F07488C C7A80004 */ lwc1 $f8, 4($sp) -/* 0A93C0 7F074890 E7A40000 */ swc1 $f4, ($sp) -/* 0A93C4 7F074894 46080182 */ mul.s $f6, $f0, $f8 -/* 0A93C8 7F074898 C7A40000 */ lwc1 $f4, ($sp) -/* 0A93CC 7F07489C 46041202 */ mul.s $f8, $f2, $f4 -/* 0A93D0 7F0748A0 46083100 */ add.s $f4, $f6, $f8 -/* 0A93D4 7F0748A4 C7A60008 */ lwc1 $f6, 8($sp) -/* 0A93D8 7F0748A8 460C3202 */ mul.s $f8, $f6, $f12 -/* 0A93DC 7F0748AC 44806000 */ mtc1 $zero, $f12 -/* 0A93E0 7F0748B0 C7A600A0 */ lwc1 $f6, 0xa0($sp) -/* 0A93E4 7F0748B4 460C503C */ c.lt.s $f10, $f12 -/* 0A93E8 7F0748B8 46044480 */ add.s $f18, $f8, $f4 -/* 0A93EC 7F0748BC C7A800A4 */ lwc1 $f8, 0xa4($sp) -/* 0A93F0 7F0748C0 46069000 */ add.s $f0, $f18, $f6 -/* 0A93F4 7F0748C4 46089480 */ add.s $f18, $f18, $f8 -/* 0A93F8 7F0748C8 46000007 */ neg.s $f0, $f0 -/* 0A93FC 7F0748CC 45000005 */ bc1f .L7F0748E4 -/* 0A9400 7F0748D0 46009487 */ neg.s $f18, $f18 -/* 0A9404 7F0748D4 46005107 */ neg.s $f4, $f10 -/* 0A9408 7F0748D8 46009487 */ neg.s $f18, $f18 -/* 0A940C 7F0748DC E7A4009C */ swc1 $f4, 0x9c($sp) -/* 0A9410 7F0748E0 46000007 */ neg.s $f0, $f0 -.L7F0748E4: -/* 0A9414 7F0748E4 460C903C */ c.lt.s $f18, $f12 -/* 0A9418 7F0748E8 00000000 */ nop -/* 0A941C 7F0748EC 45020008 */ bc1fl .L7F074910 -/* 0A9420 7F0748F0 4612003C */ c.lt.s $f0, $f18 -/* 0A9424 7F0748F4 460C003C */ c.lt.s $f0, $f12 -/* 0A9428 7F0748F8 00000000 */ nop -/* 0A942C 7F0748FC 45020004 */ bc1fl .L7F074910 -/* 0A9430 7F074900 4612003C */ c.lt.s $f0, $f18 -/* 0A9434 7F074904 100000D6 */ b .L7F074C60 -/* 0A9438 7F074908 00001025 */ move $v0, $zero -/* 0A943C 7F07490C 4612003C */ c.lt.s $f0, $f18 -.L7F074910: -/* 0A9440 7F074910 E7A00094 */ swc1 $f0, 0x94($sp) -/* 0A9444 7F074914 45020005 */ bc1fl .L7F07492C -/* 0A9448 7F074918 C4A00010 */ lwc1 $f0, 0x10($a1) -/* 0A944C 7F07491C 46009086 */ mov.s $f2, $f18 -/* 0A9450 7F074920 46000486 */ mov.s $f18, $f0 -/* 0A9454 7F074924 E7A20094 */ swc1 $f2, 0x94($sp) -/* 0A9458 7F074928 C4A00010 */ lwc1 $f0, 0x10($a1) -.L7F07492C: -/* 0A945C 7F07492C 46000182 */ mul.s $f6, $f0, $f0 -/* 0A9460 7F074930 E7A60088 */ swc1 $f6, 0x88($sp) -/* 0A9464 7F074934 C4A20014 */ lwc1 $f2, 0x14($a1) -/* 0A9468 7F074938 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 0A946C 7F07493C 46021202 */ mul.s $f8, $f2, $f2 -/* 0A9470 7F074940 E7A80084 */ swc1 $f8, 0x84($sp) -/* 0A9474 7F074944 C4AC0018 */ lwc1 $f12, 0x18($a1) -/* 0A9478 7F074948 C7A60084 */ lwc1 $f6, 0x84($sp) -/* 0A947C 7F07494C 460C6282 */ mul.s $f10, $f12, $f12 -/* 0A9480 7F074950 46062200 */ add.s $f8, $f4, $f6 -/* 0A9484 7F074954 E7AA0080 */ swc1 $f10, 0x80($sp) -/* 0A9488 7F074958 C7AA0080 */ lwc1 $f10, 0x80($sp) -/* 0A948C 7F07495C C484000C */ lwc1 $f4, 0xc($a0) -/* 0A9490 7F074960 460A4380 */ add.s $f14, $f8, $f10 -/* 0A9494 7F074964 46007387 */ neg.s $f14, $f14 -/* 0A9498 7F074968 46047182 */ mul.s $f6, $f14, $f4 -/* 0A949C 7F07496C C7A40010 */ lwc1 $f4, 0x10($sp) -/* 0A94A0 7F074970 E7A60078 */ swc1 $f6, 0x78($sp) -/* 0A94A4 7F074974 C4880010 */ lwc1 $f8, 0x10($a0) -/* 0A94A8 7F074978 46087282 */ mul.s $f10, $f14, $f8 -/* 0A94AC 7F07497C C7A8000C */ lwc1 $f8, 0xc($sp) -/* 0A94B0 7F074980 46040182 */ mul.s $f6, $f0, $f4 -/* 0A94B4 7F074984 E7AA0074 */ swc1 $f10, 0x74($sp) -/* 0A94B8 7F074988 46081282 */ mul.s $f10, $f2, $f8 -/* 0A94BC 7F07498C C7A80014 */ lwc1 $f8, 0x14($sp) -/* 0A94C0 7F074990 460A3100 */ add.s $f4, $f6, $f10 -/* 0A94C4 7F074994 460C4182 */ mul.s $f6, $f8, $f12 -/* 0A94C8 7F074998 C7A80004 */ lwc1 $f8, 4($sp) -/* 0A94CC 7F07499C 46043280 */ add.s $f10, $f6, $f4 -/* 0A94D0 7F0749A0 46080182 */ mul.s $f6, $f0, $f8 -/* 0A94D4 7F0749A4 C7A40000 */ lwc1 $f4, ($sp) -/* 0A94D8 7F0749A8 E7AA0070 */ swc1 $f10, 0x70($sp) -/* 0A94DC 7F0749AC 46041202 */ mul.s $f8, $f2, $f4 -/* 0A94E0 7F0749B0 46005386 */ mov.s $f14, $f10 -/* 0A94E4 7F0749B4 46083100 */ add.s $f4, $f6, $f8 -/* 0A94E8 7F0749B8 C7A60008 */ lwc1 $f6, 8($sp) -/* 0A94EC 7F0749BC 460C3202 */ mul.s $f8, $f6, $f12 -/* 0A94F0 7F0749C0 44806000 */ mtc1 $zero, $f12 -/* 0A94F4 7F0749C4 C7A60074 */ lwc1 $f6, 0x74($sp) -/* 0A94F8 7F0749C8 460C503C */ c.lt.s $f10, $f12 -/* 0A94FC 7F0749CC 46044400 */ add.s $f16, $f8, $f4 -/* 0A9500 7F0749D0 C7A80078 */ lwc1 $f8, 0x78($sp) -/* 0A9504 7F0749D4 C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 0A9508 7F0749D8 46068000 */ add.s $f0, $f16, $f6 -/* 0A950C 7F0749DC 46088400 */ add.s $f16, $f16, $f8 -/* 0A9510 7F0749E0 46000007 */ neg.s $f0, $f0 -/* 0A9514 7F0749E4 45000004 */ bc1f .L7F0749F8 -/* 0A9518 7F0749E8 46008407 */ neg.s $f16, $f16 -/* 0A951C 7F0749EC 46005387 */ neg.s $f14, $f10 -/* 0A9520 7F0749F0 46008407 */ neg.s $f16, $f16 -/* 0A9524 7F0749F4 46000007 */ neg.s $f0, $f0 -.L7F0749F8: -/* 0A9528 7F0749F8 460C803C */ c.lt.s $f16, $f12 -/* 0A952C 7F0749FC 00000000 */ nop -/* 0A9530 7F074A00 45020008 */ bc1fl .L7F074A24 -/* 0A9534 7F074A04 4610003C */ c.lt.s $f0, $f16 -/* 0A9538 7F074A08 460C003C */ c.lt.s $f0, $f12 -/* 0A953C 7F074A0C 00000000 */ nop -/* 0A9540 7F074A10 45020004 */ bc1fl .L7F074A24 -/* 0A9544 7F074A14 4610003C */ c.lt.s $f0, $f16 -/* 0A9548 7F074A18 10000091 */ b .L7F074C60 -/* 0A954C 7F074A1C 00001025 */ move $v0, $zero -/* 0A9550 7F074A20 4610003C */ c.lt.s $f0, $f16 -.L7F074A24: -/* 0A9554 7F074A24 C7A80094 */ lwc1 $f8, 0x94($sp) -/* 0A9558 7F074A28 45000004 */ bc1f .L7F074A3C -/* 0A955C 7F074A2C 00000000 */ nop -/* 0A9560 7F074A30 46008086 */ mov.s $f2, $f16 -/* 0A9564 7F074A34 46000406 */ mov.s $f16, $f0 -/* 0A9568 7F074A38 46001006 */ mov.s $f0, $f2 -.L7F074A3C: -/* 0A956C 7F074A3C 46048302 */ mul.s $f12, $f16, $f4 -/* 0A9570 7F074A40 00000000 */ nop -/* 0A9574 7F074A44 460E9082 */ mul.s $f2, $f18, $f14 -/* 0A9578 7F074A48 4602603C */ c.lt.s $f12, $f2 -/* 0A957C 7F074A4C 00000000 */ nop -/* 0A9580 7F074A50 4500000E */ bc1f .L7F074A8C -/* 0A9584 7F074A54 00000000 */ nop -/* 0A9588 7F074A58 46040302 */ mul.s $f12, $f0, $f4 -/* 0A958C 7F074A5C 4602603C */ c.lt.s $f12, $f2 -/* 0A9590 7F074A60 00000000 */ nop -/* 0A9594 7F074A64 45020004 */ bc1fl .L7F074A78 -/* 0A9598 7F074A68 C7A60094 */ lwc1 $f6, 0x94($sp) -/* 0A959C 7F074A6C 1000007C */ b .L7F074C60 -/* 0A95A0 7F074A70 00001025 */ move $v0, $zero -/* 0A95A4 7F074A74 C7A60094 */ lwc1 $f6, 0x94($sp) -.L7F074A78: -/* 0A95A8 7F074A78 C7AA009C */ lwc1 $f10, 0x9c($sp) -/* 0A95AC 7F074A7C E7B2005C */ swc1 $f18, 0x5c($sp) -/* 0A95B0 7F074A80 460E3082 */ mul.s $f2, $f6, $f14 -/* 0A95B4 7F074A84 1000000D */ b .L7F074ABC -/* 0A95B8 7F074A88 E7AA0058 */ swc1 $f10, 0x58($sp) -.L7F074A8C: -/* 0A95BC 7F074A8C 460E4082 */ mul.s $f2, $f8, $f14 -/* 0A95C0 7F074A90 460C103C */ c.lt.s $f2, $f12 -/* 0A95C4 7F074A94 00000000 */ nop -/* 0A95C8 7F074A98 45020004 */ bc1fl .L7F074AAC -/* 0A95CC 7F074A9C C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 0A95D0 7F074AA0 1000006F */ b .L7F074C60 -/* 0A95D4 7F074AA4 00001025 */ move $v0, $zero -/* 0A95D8 7F074AA8 C7A4009C */ lwc1 $f4, 0x9c($sp) -.L7F074AAC: -/* 0A95DC 7F074AAC E7B0005C */ swc1 $f16, 0x5c($sp) -/* 0A95E0 7F074AB0 E7AE0058 */ swc1 $f14, 0x58($sp) -/* 0A95E4 7F074AB4 46040302 */ mul.s $f12, $f0, $f4 -/* 0A95E8 7F074AB8 00000000 */ nop -.L7F074ABC: -/* 0A95EC 7F074ABC 460C103C */ c.lt.s $f2, $f12 -/* 0A95F0 7F074AC0 C7AA0094 */ lwc1 $f10, 0x94($sp) -/* 0A95F4 7F074AC4 45020006 */ bc1fl .L7F074AE0 -/* 0A95F8 7F074AC8 E7A00054 */ swc1 $f0, 0x54($sp) -/* 0A95FC 7F074ACC C7A6009C */ lwc1 $f6, 0x9c($sp) -/* 0A9600 7F074AD0 E7AA0054 */ swc1 $f10, 0x54($sp) -/* 0A9604 7F074AD4 10000003 */ b .L7F074AE4 -/* 0A9608 7F074AD8 E7A60050 */ swc1 $f6, 0x50($sp) -/* 0A960C 7F074ADC E7A00054 */ swc1 $f0, 0x54($sp) -.L7F074AE0: -/* 0A9610 7F074AE0 E7AE0050 */ swc1 $f14, 0x50($sp) -.L7F074AE4: -/* 0A9614 7F074AE4 C4A00020 */ lwc1 $f0, 0x20($a1) -/* 0A9618 7F074AE8 C4A20024 */ lwc1 $f2, 0x24($a1) -/* 0A961C 7F074AEC 46000482 */ mul.s $f18, $f0, $f0 -/* 0A9620 7F074AF0 00000000 */ nop -/* 0A9624 7F074AF4 46021202 */ mul.s $f8, $f2, $f2 -/* 0A9628 7F074AF8 E7A80040 */ swc1 $f8, 0x40($sp) -/* 0A962C 7F074AFC C4AC0028 */ lwc1 $f12, 0x28($a1) -/* 0A9630 7F074B00 C7AA0040 */ lwc1 $f10, 0x40($sp) -/* 0A9634 7F074B04 460C6102 */ mul.s $f4, $f12, $f12 -/* 0A9638 7F074B08 460A9180 */ add.s $f6, $f18, $f10 -/* 0A963C 7F074B0C E7A4003C */ swc1 $f4, 0x3c($sp) -/* 0A9640 7F074B10 C7A8003C */ lwc1 $f8, 0x3c($sp) -/* 0A9644 7F074B14 C4840014 */ lwc1 $f4, 0x14($a0) -/* 0A9648 7F074B18 46083400 */ add.s $f16, $f6, $f8 -/* 0A964C 7F074B1C 46008407 */ neg.s $f16, $f16 -/* 0A9650 7F074B20 46048282 */ mul.s $f10, $f16, $f4 -/* 0A9654 7F074B24 C7A40010 */ lwc1 $f4, 0x10($sp) -/* 0A9658 7F074B28 E7AA0034 */ swc1 $f10, 0x34($sp) -/* 0A965C 7F074B2C C4860018 */ lwc1 $f6, 0x18($a0) -/* 0A9660 7F074B30 46068202 */ mul.s $f8, $f16, $f6 -/* 0A9664 7F074B34 C7A6000C */ lwc1 $f6, 0xc($sp) -/* 0A9668 7F074B38 46040282 */ mul.s $f10, $f0, $f4 -/* 0A966C 7F074B3C E7A80030 */ swc1 $f8, 0x30($sp) -/* 0A9670 7F074B40 46061202 */ mul.s $f8, $f2, $f6 -/* 0A9674 7F074B44 C7A60014 */ lwc1 $f6, 0x14($sp) -/* 0A9678 7F074B48 46085100 */ add.s $f4, $f10, $f8 -/* 0A967C 7F074B4C 460C3282 */ mul.s $f10, $f6, $f12 -/* 0A9680 7F074B50 C7A60004 */ lwc1 $f6, 4($sp) -/* 0A9684 7F074B54 46045200 */ add.s $f8, $f10, $f4 -/* 0A9688 7F074B58 46060282 */ mul.s $f10, $f0, $f6 -/* 0A968C 7F074B5C C7A40000 */ lwc1 $f4, ($sp) -/* 0A9690 7F074B60 E7A8002C */ swc1 $f8, 0x2c($sp) -/* 0A9694 7F074B64 46041182 */ mul.s $f6, $f2, $f4 -/* 0A9698 7F074B68 44801000 */ mtc1 $zero, $f2 -/* 0A969C 7F074B6C 00000000 */ nop -/* 0A96A0 7F074B70 4602403C */ c.lt.s $f8, $f2 -/* 0A96A4 7F074B74 46065100 */ add.s $f4, $f10, $f6 -/* 0A96A8 7F074B78 C7AA0008 */ lwc1 $f10, 8($sp) -/* 0A96AC 7F074B7C 460C5182 */ mul.s $f6, $f10, $f12 -/* 0A96B0 7F074B80 C7AA0030 */ lwc1 $f10, 0x30($sp) -/* 0A96B4 7F074B84 46004306 */ mov.s $f12, $f8 -/* 0A96B8 7F074B88 46043380 */ add.s $f14, $f6, $f4 -/* 0A96BC 7F074B8C C7A60034 */ lwc1 $f6, 0x34($sp) -/* 0A96C0 7F074B90 C7A4005C */ lwc1 $f4, 0x5c($sp) -/* 0A96C4 7F074B94 460A7000 */ add.s $f0, $f14, $f10 -/* 0A96C8 7F074B98 46067380 */ add.s $f14, $f14, $f6 -/* 0A96CC 7F074B9C 46000007 */ neg.s $f0, $f0 -/* 0A96D0 7F074BA0 45000004 */ bc1f .L7F074BB4 -/* 0A96D4 7F074BA4 46007387 */ neg.s $f14, $f14 -/* 0A96D8 7F074BA8 46004307 */ neg.s $f12, $f8 -/* 0A96DC 7F074BAC 46007387 */ neg.s $f14, $f14 -/* 0A96E0 7F074BB0 46000007 */ neg.s $f0, $f0 -.L7F074BB4: -/* 0A96E4 7F074BB4 4602703C */ c.lt.s $f14, $f2 -/* 0A96E8 7F074BB8 C7A80058 */ lwc1 $f8, 0x58($sp) -/* 0A96EC 7F074BBC 45020008 */ bc1fl .L7F074BE0 -/* 0A96F0 7F074BC0 460E003C */ c.lt.s $f0, $f14 -/* 0A96F4 7F074BC4 4602003C */ c.lt.s $f0, $f2 -/* 0A96F8 7F074BC8 00000000 */ nop -/* 0A96FC 7F074BCC 45020004 */ bc1fl .L7F074BE0 -/* 0A9700 7F074BD0 460E003C */ c.lt.s $f0, $f14 -/* 0A9704 7F074BD4 10000022 */ b .L7F074C60 -/* 0A9708 7F074BD8 00001025 */ move $v0, $zero -/* 0A970C 7F074BDC 460E003C */ c.lt.s $f0, $f14 -.L7F074BE0: -/* 0A9710 7F074BE0 C7A60058 */ lwc1 $f6, 0x58($sp) -/* 0A9714 7F074BE4 45000004 */ bc1f .L7F074BF8 -/* 0A9718 7F074BE8 00000000 */ nop -/* 0A971C 7F074BEC 46007086 */ mov.s $f2, $f14 -/* 0A9720 7F074BF0 46000386 */ mov.s $f14, $f0 -/* 0A9724 7F074BF4 46001006 */ mov.s $f0, $f2 -.L7F074BF8: -/* 0A9728 7F074BF8 460C2082 */ mul.s $f2, $f4, $f12 -/* 0A972C 7F074BFC 00000000 */ nop -/* 0A9730 7F074C00 46087282 */ mul.s $f10, $f14, $f8 -/* 0A9734 7F074C04 460A103C */ c.lt.s $f2, $f10 -/* 0A9738 7F074C08 00000000 */ nop -/* 0A973C 7F074C0C 4500000C */ bc1f .L7F074C40 -/* 0A9740 7F074C10 00000000 */ nop -/* 0A9744 7F074C14 C7A60054 */ lwc1 $f6, 0x54($sp) -/* 0A9748 7F074C18 C7A80050 */ lwc1 $f8, 0x50($sp) -/* 0A974C 7F074C1C 460C3102 */ mul.s $f4, $f6, $f12 -/* 0A9750 7F074C20 00000000 */ nop -/* 0A9754 7F074C24 46087282 */ mul.s $f10, $f14, $f8 -/* 0A9758 7F074C28 460A203C */ c.lt.s $f4, $f10 -/* 0A975C 7F074C2C 00000000 */ nop -/* 0A9760 7F074C30 4500000A */ bc1f .L7F074C5C -/* 0A9764 7F074C34 00000000 */ nop -/* 0A9768 7F074C38 10000009 */ b .L7F074C60 -/* 0A976C 7F074C3C 00001025 */ move $v0, $zero -.L7F074C40: -/* 0A9770 7F074C40 46060202 */ mul.s $f8, $f0, $f6 -/* 0A9774 7F074C44 4602403C */ c.lt.s $f8, $f2 -/* 0A9778 7F074C48 00000000 */ nop -/* 0A977C 7F074C4C 45020004 */ bc1fl .L7F074C60 -/* 0A9780 7F074C50 24020001 */ li $v0, 1 -/* 0A9784 7F074C54 10000002 */ b .L7F074C60 -/* 0A9788 7F074C58 00001025 */ move $v0, $zero -.L7F074C5C: -/* 0A978C 7F074C5C 24020001 */ li $v0, 1 -.L7F074C60: -/* 0A9790 7F074C60 03E00008 */ jr $ra -/* 0A9794 7F074C64 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F074C68(void *arg1, s32 arg2, s32 arg3) +/** + * Address: 7F0747D0 + * + * Ray vs transformed bounding box test. The bbox is transformed by mtx while the ray + * is defined by pos and dir. + * + * @returns TRUE if the ray intersects the bbox, otherwise FALSE. + */ +bool modelTestRayIntersectsTransformedBBox(ModelRoData_BoundingBoxRecord *bbox, Mtxf *mtx, coord3d *pos, coord3d *dir) { - s32 sp1C; + f32 xthingx; + f32 xthingy; + f32 xthingz; + u32 stack1[1]; + f32 xpmin; + f32 xpmax; + f32 xsum1; + f32 xsum2; + f32 xsum3; + f32 negL2; + f32 pmin; + f32 ythingx; + f32 ythingy; + f32 ythingz; + f32 pmax; + f32 ypmin; + f32 ypmax; + f32 ysum1; + f32 ysum2; + f32 ysum3; + f32 mult1; + f32 mult2; + f32 bestsum2; + f32 bestsum1; + f32 anotherbestsum3; + f32 anotherbestsum1; + f32 mult3; + f32 mult4; + f32 zthingx; + f32 zthingy; + f32 zthingz; + u32 stack3[1]; + f32 zpmin; + f32 zpmax; + f32 zsum1; + f32 zsum2; + f32 zsum3; - sp1C = arg1->unk4; - sub_GAME_7F0747D0(sp1C, modelFindNodeMtx(0), arg2, arg3); + xthingx = mtx->m[0][0] * mtx->m[0][0]; + xthingy = mtx->m[0][1] * mtx->m[0][1]; + xthingz = mtx->m[0][2] * mtx->m[0][2]; + + negL2 = -((xthingx + xthingy) + xthingz); + + xpmin = negL2; + xpmin *= bbox->Bounds.xmin; + + xpmax = negL2; + xpmax *= bbox->Bounds.xmax; + + xsum1 = ((mtx->m[0][0] * dir->f[0]) + (mtx->m[0][1] * dir->f[1])) + (mtx->m[0][2] * dir->f[2]); + xsum2 = ((mtx->m[0][0] * (pos->f[0] - mtx->m[3][0])) + (mtx->m[0][1] * (pos->f[1] - mtx->m[3][1]))) + (mtx->m[0][2] * (pos->f[2] - mtx->m[3][2])); + + xsum3 = -(xsum2 + xpmax); + xsum2 = -(xsum2 + xpmin); + + if (xsum1 < 0.0f) + { + xsum1 = -xsum1; + xsum2 = -xsum2; + xsum3 = -xsum3; + } + + if ((xsum2 < 0.0f) && (xsum3 < 0.0f)) + { + return FALSE; + } + + if (xsum3 < xsum2) + { + f32 tmp = xsum2; + + xsum2 = xsum3; + xsum3 = tmp; + } + + ythingx = mtx->m[1][0] * mtx->m[1][0]; + ythingy = mtx->m[1][1] * mtx->m[1][1]; + ythingz = mtx->m[1][2] * mtx->m[1][2]; + + negL2 = -((ythingx + ythingy) + ythingz); + + ypmin = negL2; + ypmin *= bbox->Bounds.ymin; + + ypmax = negL2; + ypmax *= bbox->Bounds.ymax; + + ysum1 = ((mtx->m[1][0] * dir->f[0]) + (mtx->m[1][1] * dir->f[1])) + (mtx->m[1][2] * dir->f[2]); + ysum2 = ((mtx->m[1][0] * (pos->f[0] - mtx->m[3][0])) + (mtx->m[1][1] * (pos->f[1] - mtx->m[3][1]))) + (mtx->m[1][2] * (pos->f[2] - mtx->m[3][2])); + + ysum3 = -(ysum2 + ypmax); + ysum2 = -(ysum2 + ypmin); + + if (ysum1 < 0.0f) + { + ysum1 = -ysum1; + ysum2 = -ysum2; + ysum3 = -ysum3; + } + + if ((ysum2 < 0.0f) && (ysum3 < 0.0f)) + { + return FALSE; + } + + if (ysum3 < ysum2) + { + f32 tmp = ysum2; + + ysum2 = ysum3; + ysum3 = tmp; + } + + mult1 = ysum2 * xsum1; + mult2 = xsum2 * ysum1; + mult3 = xsum3 * ysum1; + mult4 = ysum3 * xsum1; + + if (mult1 < mult2) + { + if (mult4 < mult2) + { + return FALSE; + } + + bestsum2 = xsum2; + bestsum1 = xsum1; + } + else + { + if (mult3 < mult1) + { + return FALSE; + } + + bestsum2 = ysum2; + bestsum1 = ysum1; + } + + if (mult3 < mult4) + { + anotherbestsum3 = xsum3; + anotherbestsum1 = xsum1; + } + else + { + anotherbestsum3 = ysum3; + anotherbestsum1 = ysum1; + } + + zthingx = mtx->m[2][0] * mtx->m[2][0]; + zthingy = mtx->m[2][1] * mtx->m[2][1]; + zthingz = mtx->m[2][2] * mtx->m[2][2]; + + negL2 = -((zthingx + zthingy) + zthingz); + + zpmin = negL2; + zpmin *= bbox->Bounds.zmin; + + zpmax = negL2; + zpmax *= bbox->Bounds.zmax; + + zsum1 = ((mtx->m[2][0] * dir->f[0]) + (mtx->m[2][1] * dir->f[1])) + (mtx->m[2][2] * dir->f[2]); + zsum2 = ((mtx->m[2][0] * (pos->f[0] - mtx->m[3][0])) + (mtx->m[2][1] * (pos->f[1] - mtx->m[3][1]))) + (mtx->m[2][2] * (pos->f[2] - mtx->m[3][2])); + + zsum3 = -(zsum2 + zpmax); + zsum2 = -(zsum2 + zpmin); + + if (zsum1 < 0.0f) + { + zsum1 = -zsum1; + zsum2 = -zsum2; + zsum3 = -zsum3; + } + + if ((zsum2 < 0.0f) && (zsum3 < 0.0f)) + { + return FALSE; + } + + if (zsum3 < zsum2) + { + f32 tmp = zsum2; + + zsum2 = zsum3; + zsum3 = tmp; + } + + if ((bestsum2 * zsum1) < (zsum2 * bestsum1)) + { + if ((anotherbestsum3 * zsum1) < (zsum2 * anotherbestsum1)) + { + return FALSE; + } + } + else if ((zsum3 * bestsum1) < (bestsum2 * zsum1)) + { + return FALSE; + } + + return TRUE; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F074C68 -/* 0A9798 7F074C68 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0A979C 7F074C6C AFBF0014 */ sw $ra, 0x14($sp) -/* 0A97A0 7F074C70 AFA60028 */ sw $a2, 0x28($sp) -/* 0A97A4 7F074C74 AFA7002C */ sw $a3, 0x2c($sp) -/* 0A97A8 7F074C78 8CAE0004 */ lw $t6, 4($a1) -/* 0A97AC 7F074C7C 00003025 */ move $a2, $zero -/* 0A97B0 7F074C80 0FC1B198 */ jal modelFindNodeMtx -/* 0A97B4 7F074C84 AFAE001C */ sw $t6, 0x1c($sp) -/* 0A97B8 7F074C88 8FA4001C */ lw $a0, 0x1c($sp) -/* 0A97BC 7F074C8C 00402825 */ move $a1, $v0 -/* 0A97C0 7F074C90 8FA60028 */ lw $a2, 0x28($sp) -/* 0A97C4 7F074C94 0FC1D1F4 */ jal sub_GAME_7F0747D0 -/* 0A97C8 7F074C98 8FA7002C */ lw $a3, 0x2c($sp) -/* 0A97CC 7F074C9C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0A97D0 7F074CA0 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0A97D4 7F074CA4 03E00008 */ jr $ra -/* 0A97D8 7F074CA8 00000000 */ nop -) -#endif - - - -#ifdef NONMATCHING -void sub_GAME_7F074CAC(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F074CAC -/* 0A97DC 7F074CAC 27BDFF50 */ addiu $sp, $sp, -0xb0 -/* 0A97E0 7F074CB0 AFBF001C */ sw $ra, 0x1c($sp) -/* 0A97E4 7F074CB4 AFB00018 */ sw $s0, 0x18($sp) -/* 0A97E8 7F074CB8 AFA400B0 */ sw $a0, 0xb0($sp) -/* 0A97EC 7F074CBC 8CA80004 */ lw $t0, 4($a1) -/* 0A97F0 7F074CC0 00C08025 */ move $s0, $a2 -/* 0A97F4 7F074CC4 00003025 */ move $a2, $zero -/* 0A97F8 7F074CC8 AFA700BC */ sw $a3, 0xbc($sp) -/* 0A97FC 7F074CCC AFA500B4 */ sw $a1, 0xb4($sp) -/* 0A9800 7F074CD0 0FC1B198 */ jal modelFindNodeMtx -/* 0A9804 7F074CD4 AFA800AC */ sw $t0, 0xac($sp) -/* 0A9808 7F074CD8 3C0B8003 */ lui $t3, %hi(D_80036408) -/* 0A980C 7F074CDC 256B6408 */ addiu $t3, %lo(D_80036408) # addiu $t3, $t3, 0x6408 -/* 0A9810 7F074CE0 8D610000 */ lw $at, ($t3) -/* 0A9814 7F074CE4 8FA700BC */ lw $a3, 0xbc($sp) -/* 0A9818 7F074CE8 8FA800AC */ lw $t0, 0xac($sp) -/* 0A981C 7F074CEC 27AA0090 */ addiu $t2, $sp, 0x90 -/* 0A9820 7F074CF0 AD410000 */ sw $at, ($t2) -/* 0A9824 7F074CF4 8D610008 */ lw $at, 8($t3) -/* 0A9828 7F074CF8 8D790004 */ lw $t9, 4($t3) -/* 0A982C 7F074CFC 00401825 */ move $v1, $v0 -/* 0A9830 7F074D00 AD410008 */ sw $at, 8($t2) -/* 0A9834 7F074D04 AD590004 */ sw $t9, 4($t2) -/* 0A9838 7F074D08 C5080004 */ lwc1 $f8, 4($t0) -/* 0A983C 7F074D0C 8FB800B4 */ lw $t8, 0xb4($sp) -/* 0A9840 7F074D10 E7A8008C */ swc1 $f8, 0x8c($sp) -/* 0A9844 7F074D14 C4E60000 */ lwc1 $f6, ($a3) -/* 0A9848 7F074D18 E7A6009C */ swc1 $f6, 0x9c($sp) -/* 0A984C 7F074D1C C4EA0004 */ lwc1 $f10, 4($a3) -/* 0A9850 7F074D20 E7AA00A0 */ swc1 $f10, 0xa0($sp) -/* 0A9854 7F074D24 C4E40008 */ lwc1 $f4, 8($a3) -/* 0A9858 7F074D28 E7A400A4 */ swc1 $f4, 0xa4($sp) -/* 0A985C 7F074D2C 97040000 */ lhu $a0, ($t8) -/* 0A9860 7F074D30 308E0100 */ andi $t6, $a0, 0x100 -/* 0A9864 7F074D34 11C0003C */ beqz $t6, .L7F074E28 -/* 0A9868 7F074D38 308F0200 */ andi $t7, $a0, 0x200 -/* 0A986C 7F074D3C C5080008 */ lwc1 $f8, 8($t0) -/* 0A9870 7F074D40 E7A80080 */ swc1 $f8, 0x80($sp) -/* 0A9874 7F074D44 C506000C */ lwc1 $f6, 0xc($t0) -/* 0A9878 7F074D48 C7A40080 */ lwc1 $f4, 0x80($sp) -/* 0A987C 7F074D4C E7A60084 */ swc1 $f6, 0x84($sp) -/* 0A9880 7F074D50 C50A0010 */ lwc1 $f10, 0x10($t0) -/* 0A9884 7F074D54 E7AA0088 */ swc1 $f10, 0x88($sp) -/* 0A9888 7F074D58 C4480000 */ lwc1 $f8, ($v0) -/* 0A988C 7F074D5C C7AA0084 */ lwc1 $f10, 0x84($sp) -/* 0A9890 7F074D60 46082182 */ mul.s $f6, $f4, $f8 -/* 0A9894 7F074D64 C4480010 */ lwc1 $f8, 0x10($v0) -/* 0A9898 7F074D68 E7A40020 */ swc1 $f4, 0x20($sp) -/* 0A989C 7F074D6C C4440020 */ lwc1 $f4, 0x20($v0) -/* 0A98A0 7F074D70 46085202 */ mul.s $f8, $f10, $f8 -/* 0A98A4 7F074D74 46083180 */ add.s $f6, $f6, $f8 -/* 0A98A8 7F074D78 C7A80088 */ lwc1 $f8, 0x88($sp) -/* 0A98AC 7F074D7C 46044102 */ mul.s $f4, $f8, $f4 -/* 0A98B0 7F074D80 46043180 */ add.s $f6, $f6, $f4 -/* 0A98B4 7F074D84 C4440030 */ lwc1 $f4, 0x30($v0) -/* 0A98B8 7F074D88 E7AA0024 */ swc1 $f10, 0x24($sp) -/* 0A98BC 7F074D8C C60A0000 */ lwc1 $f10, ($s0) -/* 0A98C0 7F074D90 460A2101 */ sub.s $f4, $f4, $f10 -/* 0A98C4 7F074D94 46062280 */ add.s $f10, $f4, $f6 -/* 0A98C8 7F074D98 C7A40020 */ lwc1 $f4, 0x20($sp) -/* 0A98CC 7F074D9C E7AA0090 */ swc1 $f10, 0x90($sp) -/* 0A98D0 7F074DA0 C4460004 */ lwc1 $f6, 4($v0) -/* 0A98D4 7F074DA4 46062282 */ mul.s $f10, $f4, $f6 -/* 0A98D8 7F074DA8 C7A60024 */ lwc1 $f6, 0x24($sp) -/* 0A98DC 7F074DAC E7A80024 */ swc1 $f8, 0x24($sp) -/* 0A98E0 7F074DB0 C4480014 */ lwc1 $f8, 0x14($v0) -/* 0A98E4 7F074DB4 46083202 */ mul.s $f8, $f6, $f8 -/* 0A98E8 7F074DB8 46085280 */ add.s $f10, $f10, $f8 -/* 0A98EC 7F074DBC C7A80024 */ lwc1 $f8, 0x24($sp) -/* 0A98F0 7F074DC0 E7A40024 */ swc1 $f4, 0x24($sp) -/* 0A98F4 7F074DC4 C4440024 */ lwc1 $f4, 0x24($v0) -/* 0A98F8 7F074DC8 46044102 */ mul.s $f4, $f8, $f4 -/* 0A98FC 7F074DCC 46045280 */ add.s $f10, $f10, $f4 -/* 0A9900 7F074DD0 C4440034 */ lwc1 $f4, 0x34($v0) -/* 0A9904 7F074DD4 E7A60020 */ swc1 $f6, 0x20($sp) -/* 0A9908 7F074DD8 C6060004 */ lwc1 $f6, 4($s0) -/* 0A990C 7F074DDC 46062101 */ sub.s $f4, $f4, $f6 -/* 0A9910 7F074DE0 460A2180 */ add.s $f6, $f4, $f10 -/* 0A9914 7F074DE4 C7A40024 */ lwc1 $f4, 0x24($sp) -/* 0A9918 7F074DE8 E7A60094 */ swc1 $f6, 0x94($sp) -/* 0A991C 7F074DEC C44A0008 */ lwc1 $f10, 8($v0) -/* 0A9920 7F074DF0 460A2182 */ mul.s $f6, $f4, $f10 -/* 0A9924 7F074DF4 C44A0018 */ lwc1 $f10, 0x18($v0) -/* 0A9928 7F074DF8 C7A40020 */ lwc1 $f4, 0x20($sp) -/* 0A992C 7F074DFC 460A2102 */ mul.s $f4, $f4, $f10 -/* 0A9930 7F074E00 46043280 */ add.s $f10, $f6, $f4 -/* 0A9934 7F074E04 C4460028 */ lwc1 $f6, 0x28($v0) -/* 0A9938 7F074E08 46064102 */ mul.s $f4, $f8, $f6 -/* 0A993C 7F074E0C C4460038 */ lwc1 $f6, 0x38($v0) -/* 0A9940 7F074E10 46045200 */ add.s $f8, $f10, $f4 -/* 0A9944 7F074E14 C60A0008 */ lwc1 $f10, 8($s0) -/* 0A9948 7F074E18 460A3101 */ sub.s $f4, $f6, $f10 -/* 0A994C 7F074E1C 46082180 */ add.s $f6, $f4, $f8 -/* 0A9950 7F074E20 1000003E */ b .L7F074F1C -/* 0A9954 7F074E24 E7A60098 */ swc1 $f6, 0x98($sp) -.L7F074E28: -/* 0A9958 7F074E28 51E00031 */ beql $t7, $zero, .L7F074EF0 -/* 0A995C 7F074E2C C4460030 */ lwc1 $f6, 0x30($v0) -/* 0A9960 7F074E30 8D050014 */ lw $a1, 0x14($t0) -/* 0A9964 7F074E34 8FA400B0 */ lw $a0, 0xb0($sp) -/* 0A9968 7F074E38 00003025 */ move $a2, $zero -/* 0A996C 7F074E3C 50A0001F */ beql $a1, $zero, .L7F074EBC -/* 0A9970 7F074E40 C4480030 */ lwc1 $f8, 0x30($v0) -/* 0A9974 7F074E44 AFA300A8 */ sw $v1, 0xa8($sp) -/* 0A9978 7F074E48 0FC1B198 */ jal modelFindNodeMtx -/* 0A997C 7F074E4C AFA800AC */ sw $t0, 0xac($sp) -/* 0A9980 7F074E50 8FA300A8 */ lw $v1, 0xa8($sp) -/* 0A9984 7F074E54 C4440030 */ lwc1 $f4, 0x30($v0) -/* 0A9988 7F074E58 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0A998C 7F074E5C C46A0030 */ lwc1 $f10, 0x30($v1) -/* 0A9990 7F074E60 44810000 */ mtc1 $at, $f0 -/* 0A9994 7F074E64 8FA800AC */ lw $t0, 0xac($sp) -/* 0A9998 7F074E68 46045200 */ add.s $f8, $f10, $f4 -/* 0A999C 7F074E6C C60A0000 */ lwc1 $f10, ($s0) -/* 0A99A0 7F074E70 46004182 */ mul.s $f6, $f8, $f0 -/* 0A99A4 7F074E74 460A3101 */ sub.s $f4, $f6, $f10 -/* 0A99A8 7F074E78 E7A40090 */ swc1 $f4, 0x90($sp) -/* 0A99AC 7F074E7C C4460034 */ lwc1 $f6, 0x34($v0) -/* 0A99B0 7F074E80 C4680034 */ lwc1 $f8, 0x34($v1) -/* 0A99B4 7F074E84 46064280 */ add.s $f10, $f8, $f6 -/* 0A99B8 7F074E88 C6080004 */ lwc1 $f8, 4($s0) -/* 0A99BC 7F074E8C 46005102 */ mul.s $f4, $f10, $f0 -/* 0A99C0 7F074E90 46082181 */ sub.s $f6, $f4, $f8 -/* 0A99C4 7F074E94 E7A60094 */ swc1 $f6, 0x94($sp) -/* 0A99C8 7F074E98 C4440038 */ lwc1 $f4, 0x38($v0) -/* 0A99CC 7F074E9C C46A0038 */ lwc1 $f10, 0x38($v1) -/* 0A99D0 7F074EA0 46045200 */ add.s $f8, $f10, $f4 -/* 0A99D4 7F074EA4 C60A0008 */ lwc1 $f10, 8($s0) -/* 0A99D8 7F074EA8 46004182 */ mul.s $f6, $f8, $f0 -/* 0A99DC 7F074EAC 460A3101 */ sub.s $f4, $f6, $f10 -/* 0A99E0 7F074EB0 1000001A */ b .L7F074F1C -/* 0A99E4 7F074EB4 E7A40098 */ swc1 $f4, 0x98($sp) -/* 0A99E8 7F074EB8 C4480030 */ lwc1 $f8, 0x30($v0) -.L7F074EBC: -/* 0A99EC 7F074EBC C6060000 */ lwc1 $f6, ($s0) -/* 0A99F0 7F074EC0 46064281 */ sub.s $f10, $f8, $f6 -/* 0A99F4 7F074EC4 E7AA0090 */ swc1 $f10, 0x90($sp) -/* 0A99F8 7F074EC8 C6080004 */ lwc1 $f8, 4($s0) -/* 0A99FC 7F074ECC C4440034 */ lwc1 $f4, 0x34($v0) -/* 0A9A00 7F074ED0 46082181 */ sub.s $f6, $f4, $f8 -/* 0A9A04 7F074ED4 E7A60094 */ swc1 $f6, 0x94($sp) -/* 0A9A08 7F074ED8 C6040008 */ lwc1 $f4, 8($s0) -/* 0A9A0C 7F074EDC C44A0038 */ lwc1 $f10, 0x38($v0) -/* 0A9A10 7F074EE0 46045201 */ sub.s $f8, $f10, $f4 -/* 0A9A14 7F074EE4 1000000D */ b .L7F074F1C -/* 0A9A18 7F074EE8 E7A80098 */ swc1 $f8, 0x98($sp) -/* 0A9A1C 7F074EEC C4460030 */ lwc1 $f6, 0x30($v0) -.L7F074EF0: -/* 0A9A20 7F074EF0 C60A0000 */ lwc1 $f10, ($s0) -/* 0A9A24 7F074EF4 460A3101 */ sub.s $f4, $f6, $f10 -/* 0A9A28 7F074EF8 E7A40090 */ swc1 $f4, 0x90($sp) -/* 0A9A2C 7F074EFC C6060004 */ lwc1 $f6, 4($s0) -/* 0A9A30 7F074F00 C4480034 */ lwc1 $f8, 0x34($v0) -/* 0A9A34 7F074F04 46064281 */ sub.s $f10, $f8, $f6 -/* 0A9A38 7F074F08 E7AA0094 */ swc1 $f10, 0x94($sp) -/* 0A9A3C 7F074F0C C6080008 */ lwc1 $f8, 8($s0) -/* 0A9A40 7F074F10 C4440038 */ lwc1 $f4, 0x38($v0) -/* 0A9A44 7F074F14 46082181 */ sub.s $f6, $f4, $f8 -/* 0A9A48 7F074F18 E7A60098 */ swc1 $f6, 0x98($sp) -.L7F074F1C: -/* 0A9A4C 7F074F1C 8FA900B4 */ lw $t1, 0xb4($sp) -/* 0A9A50 7F074F20 C7A400A4 */ lwc1 $f4, 0xa4($sp) -/* 0A9A54 7F074F24 C7A600A0 */ lwc1 $f6, 0xa0($sp) -/* 0A9A58 7F074F28 95240000 */ lhu $a0, ($t1) -/* 0A9A5C 7F074F2C 308D0400 */ andi $t5, $a0, 0x400 -/* 0A9A60 7F074F30 11A00074 */ beqz $t5, .L7F075104 -/* 0A9A64 7F074F34 30820800 */ andi $v0, $a0, 0x800 -/* 0A9A68 7F074F38 C46A0008 */ lwc1 $f10, 8($v1) -/* 0A9A6C 7F074F3C C50C0018 */ lwc1 $f12, 0x18($t0) -/* 0A9A70 7F074F40 C510001C */ lwc1 $f16, 0x1c($t0) -/* 0A9A74 7F074F44 46045202 */ mul.s $f8, $f10, $f4 -/* 0A9A78 7F074F48 C46A0004 */ lwc1 $f10, 4($v1) -/* 0A9A7C 7F074F4C C4600000 */ lwc1 $f0, ($v1) -/* 0A9A80 7F074F50 E7A40024 */ swc1 $f4, 0x24($sp) -/* 0A9A84 7F074F54 460A3282 */ mul.s $f10, $f6, $f10 -/* 0A9A88 7F074F58 C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 0A9A8C 7F074F5C E7A80020 */ swc1 $f8, 0x20($sp) -/* 0A9A90 7F074F60 46002202 */ mul.s $f8, $f4, $f0 -/* 0A9A94 7F074F64 460A4200 */ add.s $f8, $f8, $f10 -/* 0A9A98 7F074F68 C7AA0020 */ lwc1 $f10, 0x20($sp) -/* 0A9A9C 7F074F6C 46085280 */ add.s $f10, $f10, $f8 -/* 0A9AA0 7F074F70 460C5082 */ mul.s $f2, $f10, $f12 -/* 0A9AA4 7F074F74 00000000 */ nop -/* 0A9AA8 7F074F78 46020202 */ mul.s $f8, $f0, $f2 -/* 0A9AAC 7F074F7C 46044280 */ add.s $f10, $f8, $f4 -/* 0A9AB0 7F074F80 E7AA009C */ swc1 $f10, 0x9c($sp) -/* 0A9AB4 7F074F84 C4680004 */ lwc1 $f8, 4($v1) -/* 0A9AB8 7F074F88 46024102 */ mul.s $f4, $f8, $f2 -/* 0A9ABC 7F074F8C 46062200 */ add.s $f8, $f4, $f6 -/* 0A9AC0 7F074F90 E7A800A0 */ swc1 $f8, 0xa0($sp) -/* 0A9AC4 7F074F94 C4640008 */ lwc1 $f4, 8($v1) -/* 0A9AC8 7F074F98 46022182 */ mul.s $f6, $f4, $f2 -/* 0A9ACC 7F074F9C C7A40024 */ lwc1 $f4, 0x24($sp) -/* 0A9AD0 7F074FA0 46043180 */ add.s $f6, $f6, $f4 -/* 0A9AD4 7F074FA4 E7A600A4 */ swc1 $f6, 0xa4($sp) -/* 0A9AD8 7F074FA8 C4640008 */ lwc1 $f4, 8($v1) -/* 0A9ADC 7F074FAC C4600000 */ lwc1 $f0, ($v1) -/* 0A9AE0 7F074FB0 E7AA0024 */ swc1 $f10, 0x24($sp) -/* 0A9AE4 7F074FB4 C7AA0098 */ lwc1 $f10, 0x98($sp) -/* 0A9AE8 7F074FB8 E7A80020 */ swc1 $f8, 0x20($sp) -/* 0A9AEC 7F074FBC E7A60028 */ swc1 $f6, 0x28($sp) -/* 0A9AF0 7F074FC0 460A2102 */ mul.s $f4, $f4, $f10 -/* 0A9AF4 7F074FC4 C4660004 */ lwc1 $f6, 4($v1) -/* 0A9AF8 7F074FC8 C7A80094 */ lwc1 $f8, 0x94($sp) -/* 0A9AFC 7F074FCC E7AA002C */ swc1 $f10, 0x2c($sp) -/* 0A9B00 7F074FD0 C7AA0090 */ lwc1 $f10, 0x90($sp) -/* 0A9B04 7F074FD4 46064182 */ mul.s $f6, $f8, $f6 -/* 0A9B08 7F074FD8 E7A40030 */ swc1 $f4, 0x30($sp) -/* 0A9B0C 7F074FDC 46005102 */ mul.s $f4, $f10, $f0 -/* 0A9B10 7F074FE0 46062100 */ add.s $f4, $f4, $f6 -/* 0A9B14 7F074FE4 C7A60030 */ lwc1 $f6, 0x30($sp) -/* 0A9B18 7F074FE8 46043180 */ add.s $f6, $f6, $f4 -/* 0A9B1C 7F074FEC 460C3382 */ mul.s $f14, $f6, $f12 -/* 0A9B20 7F074FF0 00000000 */ nop -/* 0A9B24 7F074FF4 460E0102 */ mul.s $f4, $f0, $f14 -/* 0A9B28 7F074FF8 460A2180 */ add.s $f6, $f4, $f10 -/* 0A9B2C 7F074FFC E7A60090 */ swc1 $f6, 0x90($sp) -/* 0A9B30 7F075000 C4640004 */ lwc1 $f4, 4($v1) -/* 0A9B34 7F075004 460E2282 */ mul.s $f10, $f4, $f14 -/* 0A9B38 7F075008 46085100 */ add.s $f4, $f10, $f8 -/* 0A9B3C 7F07500C E7A40094 */ swc1 $f4, 0x94($sp) -/* 0A9B40 7F075010 C46A0008 */ lwc1 $f10, 8($v1) -/* 0A9B44 7F075014 460E5202 */ mul.s $f8, $f10, $f14 -/* 0A9B48 7F075018 C7AA002C */ lwc1 $f10, 0x2c($sp) -/* 0A9B4C 7F07501C 460A4200 */ add.s $f8, $f8, $f10 -/* 0A9B50 7F075020 C7AA0024 */ lwc1 $f10, 0x24($sp) -/* 0A9B54 7F075024 E7A80098 */ swc1 $f8, 0x98($sp) -/* 0A9B58 7F075028 C4600010 */ lwc1 $f0, 0x10($v1) -/* 0A9B5C 7F07502C E7A60030 */ swc1 $f6, 0x30($sp) -/* 0A9B60 7F075030 E7A4002C */ swc1 $f4, 0x2c($sp) -/* 0A9B64 7F075034 E7A80024 */ swc1 $f8, 0x24($sp) -/* 0A9B68 7F075038 46005182 */ mul.s $f6, $f10, $f0 -/* 0A9B6C 7F07503C C4680014 */ lwc1 $f8, 0x14($v1) -/* 0A9B70 7F075040 C7A40020 */ lwc1 $f4, 0x20($sp) -/* 0A9B74 7F075044 46082202 */ mul.s $f8, $f4, $f8 -/* 0A9B78 7F075048 46083180 */ add.s $f6, $f6, $f8 -/* 0A9B7C 7F07504C C7A80028 */ lwc1 $f8, 0x28($sp) -/* 0A9B80 7F075050 E7AA0028 */ swc1 $f10, 0x28($sp) -/* 0A9B84 7F075054 C46A0018 */ lwc1 $f10, 0x18($v1) -/* 0A9B88 7F075058 46085282 */ mul.s $f10, $f10, $f8 -/* 0A9B8C 7F07505C 46065280 */ add.s $f10, $f10, $f6 -/* 0A9B90 7F075060 C7A60028 */ lwc1 $f6, 0x28($sp) -/* 0A9B94 7F075064 46105082 */ mul.s $f2, $f10, $f16 -/* 0A9B98 7F075068 00000000 */ nop -/* 0A9B9C 7F07506C 46020282 */ mul.s $f10, $f0, $f2 -/* 0A9BA0 7F075070 46065280 */ add.s $f10, $f10, $f6 -/* 0A9BA4 7F075074 E7AA009C */ swc1 $f10, 0x9c($sp) -/* 0A9BA8 7F075078 C4660014 */ lwc1 $f6, 0x14($v1) -/* 0A9BAC 7F07507C 46023282 */ mul.s $f10, $f6, $f2 -/* 0A9BB0 7F075080 46045180 */ add.s $f6, $f10, $f4 -/* 0A9BB4 7F075084 E7A600A0 */ swc1 $f6, 0xa0($sp) -/* 0A9BB8 7F075088 C46A0018 */ lwc1 $f10, 0x18($v1) -/* 0A9BBC 7F07508C 46025102 */ mul.s $f4, $f10, $f2 -/* 0A9BC0 7F075090 C7AA0030 */ lwc1 $f10, 0x30($sp) -/* 0A9BC4 7F075094 46082180 */ add.s $f6, $f4, $f8 -/* 0A9BC8 7F075098 C7A8002C */ lwc1 $f8, 0x2c($sp) -/* 0A9BCC 7F07509C E7A600A4 */ swc1 $f6, 0xa4($sp) -/* 0A9BD0 7F0750A0 C4600010 */ lwc1 $f0, 0x10($v1) -/* 0A9BD4 7F0750A4 C4660014 */ lwc1 $f6, 0x14($v1) -/* 0A9BD8 7F0750A8 E7AA0030 */ swc1 $f10, 0x30($sp) -/* 0A9BDC 7F0750AC 46005102 */ mul.s $f4, $f10, $f0 -/* 0A9BE0 7F0750B0 C46A0018 */ lwc1 $f10, 0x18($v1) -/* 0A9BE4 7F0750B4 46064182 */ mul.s $f6, $f8, $f6 -/* 0A9BE8 7F0750B8 46062100 */ add.s $f4, $f4, $f6 -/* 0A9BEC 7F0750BC C7A60024 */ lwc1 $f6, 0x24($sp) -/* 0A9BF0 7F0750C0 46065282 */ mul.s $f10, $f10, $f6 -/* 0A9BF4 7F0750C4 46045280 */ add.s $f10, $f10, $f4 -/* 0A9BF8 7F0750C8 C7A40030 */ lwc1 $f4, 0x30($sp) -/* 0A9BFC 7F0750CC 46105302 */ mul.s $f12, $f10, $f16 -/* 0A9C00 7F0750D0 00000000 */ nop -/* 0A9C04 7F0750D4 460C0282 */ mul.s $f10, $f0, $f12 -/* 0A9C08 7F0750D8 46045280 */ add.s $f10, $f10, $f4 -/* 0A9C0C 7F0750DC E7AA0090 */ swc1 $f10, 0x90($sp) -/* 0A9C10 7F0750E0 C4640014 */ lwc1 $f4, 0x14($v1) -/* 0A9C14 7F0750E4 460C2282 */ mul.s $f10, $f4, $f12 -/* 0A9C18 7F0750E8 46085100 */ add.s $f4, $f10, $f8 -/* 0A9C1C 7F0750EC E7A40094 */ swc1 $f4, 0x94($sp) -/* 0A9C20 7F0750F0 C46A0018 */ lwc1 $f10, 0x18($v1) -/* 0A9C24 7F0750F4 460C5202 */ mul.s $f8, $f10, $f12 -/* 0A9C28 7F0750F8 46064100 */ add.s $f4, $f8, $f6 -/* 0A9C2C 7F0750FC 1000004F */ b .L7F07523C -/* 0A9C30 7F075100 E7A40098 */ swc1 $f4, 0x98($sp) -.L7F075104: -/* 0A9C34 7F075104 14400005 */ bnez $v0, .L7F07511C -/* 0A9C38 7F075108 308C1000 */ andi $t4, $a0, 0x1000 -/* 0A9C3C 7F07510C 15800003 */ bnez $t4, .L7F07511C -/* 0A9C40 7F075110 308A2000 */ andi $t2, $a0, 0x2000 -/* 0A9C44 7F075114 5140004A */ beql $t2, $zero, .L7F075240 -/* 0A9C48 7F075118 C7B2009C */ lwc1 $f18, 0x9c($sp) -.L7F07511C: -/* 0A9C4C 7F07511C C50A0018 */ lwc1 $f10, 0x18($t0) -/* 0A9C50 7F075120 308B1000 */ andi $t3, $a0, 0x1000 -/* 0A9C54 7F075124 10400008 */ beqz $v0, .L7F075148 -/* 0A9C58 7F075128 E7AA0060 */ swc1 $f10, 0x60($sp) -/* 0A9C5C 7F07512C C4680000 */ lwc1 $f8, ($v1) -/* 0A9C60 7F075130 E7A80054 */ swc1 $f8, 0x54($sp) -/* 0A9C64 7F075134 C4660004 */ lwc1 $f6, 4($v1) -/* 0A9C68 7F075138 E7A60058 */ swc1 $f6, 0x58($sp) -/* 0A9C6C 7F07513C C4640008 */ lwc1 $f4, 8($v1) -/* 0A9C70 7F075140 10000012 */ b .L7F07518C -/* 0A9C74 7F075144 E7A4005C */ swc1 $f4, 0x5c($sp) -.L7F075148: -/* 0A9C78 7F075148 11600008 */ beqz $t3, .L7F07516C -/* 0A9C7C 7F07514C 30992000 */ andi $t9, $a0, 0x2000 -/* 0A9C80 7F075150 C46A0010 */ lwc1 $f10, 0x10($v1) -/* 0A9C84 7F075154 E7AA0054 */ swc1 $f10, 0x54($sp) -/* 0A9C88 7F075158 C4680014 */ lwc1 $f8, 0x14($v1) -/* 0A9C8C 7F07515C E7A80058 */ swc1 $f8, 0x58($sp) -/* 0A9C90 7F075160 C4660018 */ lwc1 $f6, 0x18($v1) -/* 0A9C94 7F075164 10000009 */ b .L7F07518C -/* 0A9C98 7F075168 E7A6005C */ swc1 $f6, 0x5c($sp) -.L7F07516C: -/* 0A9C9C 7F07516C 53200008 */ beql $t9, $zero, .L7F075190 -/* 0A9CA0 7F075170 C7AC0054 */ lwc1 $f12, 0x54($sp) -/* 0A9CA4 7F075174 C4640020 */ lwc1 $f4, 0x20($v1) -/* 0A9CA8 7F075178 E7A40054 */ swc1 $f4, 0x54($sp) -/* 0A9CAC 7F07517C C46A0024 */ lwc1 $f10, 0x24($v1) -/* 0A9CB0 7F075180 E7AA0058 */ swc1 $f10, 0x58($sp) -/* 0A9CB4 7F075184 C4680028 */ lwc1 $f8, 0x28($v1) -/* 0A9CB8 7F075188 E7A8005C */ swc1 $f8, 0x5c($sp) -.L7F07518C: -/* 0A9CBC 7F07518C C7AC0054 */ lwc1 $f12, 0x54($sp) -.L7F075190: -/* 0A9CC0 7F075190 C7B2009C */ lwc1 $f18, 0x9c($sp) -/* 0A9CC4 7F075194 C7AE0058 */ lwc1 $f14, 0x58($sp) -/* 0A9CC8 7F075198 C7A400A0 */ lwc1 $f4, 0xa0($sp) -/* 0A9CCC 7F07519C 460C9182 */ mul.s $f6, $f18, $f12 -/* 0A9CD0 7F0751A0 C7B0005C */ lwc1 $f16, 0x5c($sp) -/* 0A9CD4 7F0751A4 460E2282 */ mul.s $f10, $f4, $f14 -/* 0A9CD8 7F0751A8 460A3200 */ add.s $f8, $f6, $f10 -/* 0A9CDC 7F0751AC C7A600A4 */ lwc1 $f6, 0xa4($sp) -/* 0A9CE0 7F0751B0 46068282 */ mul.s $f10, $f16, $f6 -/* 0A9CE4 7F0751B4 46085280 */ add.s $f10, $f10, $f8 -/* 0A9CE8 7F0751B8 C7A80060 */ lwc1 $f8, 0x60($sp) -/* 0A9CEC 7F0751BC 46085002 */ mul.s $f0, $f10, $f8 -/* 0A9CF0 7F0751C0 E7A80030 */ swc1 $f8, 0x30($sp) -/* 0A9CF4 7F0751C4 46006282 */ mul.s $f10, $f12, $f0 -/* 0A9CF8 7F0751C8 46125480 */ add.s $f18, $f10, $f18 -/* 0A9CFC 7F0751CC 46007282 */ mul.s $f10, $f14, $f0 -/* 0A9D00 7F0751D0 E7B2009C */ swc1 $f18, 0x9c($sp) -/* 0A9D04 7F0751D4 46045280 */ add.s $f10, $f10, $f4 -/* 0A9D08 7F0751D8 46008102 */ mul.s $f4, $f16, $f0 -/* 0A9D0C 7F0751DC E7AA00A0 */ swc1 $f10, 0xa0($sp) -/* 0A9D10 7F0751E0 46062280 */ add.s $f10, $f4, $f6 -/* 0A9D14 7F0751E4 C7A40090 */ lwc1 $f4, 0x90($sp) -/* 0A9D18 7F0751E8 E7AA00A4 */ swc1 $f10, 0xa4($sp) -/* 0A9D1C 7F0751EC 460C2182 */ mul.s $f6, $f4, $f12 -/* 0A9D20 7F0751F0 C7AA0094 */ lwc1 $f10, 0x94($sp) -/* 0A9D24 7F0751F4 E7A4002C */ swc1 $f4, 0x2c($sp) -/* 0A9D28 7F0751F8 460E5202 */ mul.s $f8, $f10, $f14 -/* 0A9D2C 7F0751FC 46083180 */ add.s $f6, $f6, $f8 -/* 0A9D30 7F075200 C7A80098 */ lwc1 $f8, 0x98($sp) -/* 0A9D34 7F075204 46088102 */ mul.s $f4, $f16, $f8 -/* 0A9D38 7F075208 46062100 */ add.s $f4, $f4, $f6 -/* 0A9D3C 7F07520C C7A60030 */ lwc1 $f6, 0x30($sp) -/* 0A9D40 7F075210 46062082 */ mul.s $f2, $f4, $f6 -/* 0A9D44 7F075214 C7A6002C */ lwc1 $f6, 0x2c($sp) -/* 0A9D48 7F075218 46026102 */ mul.s $f4, $f12, $f2 -/* 0A9D4C 7F07521C 46062100 */ add.s $f4, $f4, $f6 -/* 0A9D50 7F075220 46027182 */ mul.s $f6, $f14, $f2 -/* 0A9D54 7F075224 E7A40090 */ swc1 $f4, 0x90($sp) -/* 0A9D58 7F075228 460A3100 */ add.s $f4, $f6, $f10 -/* 0A9D5C 7F07522C 46028182 */ mul.s $f6, $f16, $f2 -/* 0A9D60 7F075230 E7A40094 */ swc1 $f4, 0x94($sp) -/* 0A9D64 7F075234 46083280 */ add.s $f10, $f6, $f8 -/* 0A9D68 7F075238 E7AA0098 */ swc1 $f10, 0x98($sp) -.L7F07523C: -/* 0A9D6C 7F07523C C7B2009C */ lwc1 $f18, 0x9c($sp) -.L7F075240: -/* 0A9D70 7F075240 C7A40090 */ lwc1 $f4, 0x90($sp) -/* 0A9D74 7F075244 C7AE00A0 */ lwc1 $f14, 0xa0($sp) -/* 0A9D78 7F075248 C7A80094 */ lwc1 $f8, 0x94($sp) -/* 0A9D7C 7F07524C 46049182 */ mul.s $f6, $f18, $f4 -/* 0A9D80 7F075250 C7B000A4 */ lwc1 $f16, 0xa4($sp) -/* 0A9D84 7F075254 E7A40030 */ swc1 $f4, 0x30($sp) -/* 0A9D88 7F075258 46087282 */ mul.s $f10, $f14, $f8 -/* 0A9D8C 7F07525C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0A9D90 7F075260 00001025 */ move $v0, $zero -/* 0A9D94 7F075264 460A3180 */ add.s $f6, $f6, $f10 -/* 0A9D98 7F075268 C7AA0098 */ lwc1 $f10, 0x98($sp) -/* 0A9D9C 7F07526C 46105102 */ mul.s $f4, $f10, $f16 -/* 0A9DA0 7F075270 46062080 */ add.s $f2, $f4, $f6 -/* 0A9DA4 7F075274 44802000 */ mtc1 $zero, $f4 -/* 0A9DA8 7F075278 00000000 */ nop -/* 0A9DAC 7F07527C 4602203C */ c.lt.s $f4, $f2 -/* 0A9DB0 7F075280 00000000 */ nop -/* 0A9DB4 7F075284 4500001A */ bc1f .L7F0752F0 -/* 0A9DB8 7F075288 00000000 */ nop -/* 0A9DBC 7F07528C 46129182 */ mul.s $f6, $f18, $f18 -/* 0A9DC0 7F075290 00000000 */ nop -/* 0A9DC4 7F075294 460E7102 */ mul.s $f4, $f14, $f14 -/* 0A9DC8 7F075298 46043180 */ add.s $f6, $f6, $f4 -/* 0A9DCC 7F07529C 46108102 */ mul.s $f4, $f16, $f16 -/* 0A9DD0 7F0752A0 46062000 */ add.s $f0, $f4, $f6 -/* 0A9DD4 7F0752A4 C7A40030 */ lwc1 $f4, 0x30($sp) -/* 0A9DD8 7F0752A8 46042182 */ mul.s $f6, $f4, $f4 -/* 0A9DDC 7F0752AC 00000000 */ nop -/* 0A9DE0 7F0752B0 46084102 */ mul.s $f4, $f8, $f8 -/* 0A9DE4 7F0752B4 46043200 */ add.s $f8, $f6, $f4 -/* 0A9DE8 7F0752B8 460A5182 */ mul.s $f6, $f10, $f10 -/* 0A9DEC 7F0752BC C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 0A9DF0 7F0752C0 46021102 */ mul.s $f4, $f2, $f2 -/* 0A9DF4 7F0752C4 46083300 */ add.s $f12, $f6, $f8 -/* 0A9DF8 7F0752C8 460A6181 */ sub.s $f6, $f12, $f10 -/* 0A9DFC 7F0752CC 46003202 */ mul.s $f8, $f6, $f0 -/* 0A9E00 7F0752D0 4604403E */ c.le.s $f8, $f4 -/* 0A9E04 7F0752D4 00000000 */ nop -/* 0A9E08 7F0752D8 45000003 */ bc1f .L7F0752E8 -/* 0A9E0C 7F0752DC 00000000 */ nop -/* 0A9E10 7F0752E0 10000003 */ b .L7F0752F0 -/* 0A9E14 7F0752E4 24020001 */ li $v0, 1 -.L7F0752E8: -/* 0A9E18 7F0752E8 10000001 */ b .L7F0752F0 -/* 0A9E1C 7F0752EC 00001025 */ move $v0, $zero -.L7F0752F0: -/* 0A9E20 7F0752F0 8FB00018 */ lw $s0, 0x18($sp) -/* 0A9E24 7F0752F4 03E00008 */ jr $ra -/* 0A9E28 7F0752F8 27BD00B0 */ addiu $sp, $sp, 0xb0 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0752FC(void) { - -} -#else -GLOBAL_ASM( -.late_rodata -/*D:80054DB4*/ -glabel jpt_80054DB4 -.word .L7F075470 -.word .L7F075470 -.word .L7F075470 -.word .L7F075470 -.word .L7F075470 -.word .L7F075470 -.word .L7F075470 -.word .L7F07543C -.word .L7F075470 -.word .L7F0753CC -.word .L7F075470 -.word .L7F075470 -.word .L7F075470 -.word .L7F075470 -.word .L7F075470 -.word .L7F075470 -.word .L7F075404 -.word .L7F075450 -.word .L7F075470 -.word .L7F075470 -.word .L7F075470 -.word .L7F075470 -.word .L7F075464 -.word .L7F075470 - -.text -glabel sub_GAME_7F0752FC -/* 0A9E2C 7F0752FC 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0A9E30 7F075300 AFBF002C */ sw $ra, 0x2c($sp) -/* 0A9E34 7F075304 AFB40028 */ sw $s4, 0x28($sp) -/* 0A9E38 7F075308 AFB30024 */ sw $s3, 0x24($sp) -/* 0A9E3C 7F07530C AFB20020 */ sw $s2, 0x20($sp) -/* 0A9E40 7F075310 AFB1001C */ sw $s1, 0x1c($sp) -/* 0A9E44 7F075314 AFB00018 */ sw $s0, 0x18($sp) -/* 0A9E48 7F075318 AFA7003C */ sw $a3, 0x3c($sp) -/* 0A9E4C 7F07531C 8CE20000 */ lw $v0, ($a3) -/* 0A9E50 7F075320 00809025 */ move $s2, $a0 -/* 0A9E54 7F075324 00A09825 */ move $s3, $a1 -/* 0A9E58 7F075328 00C0A025 */ move $s4, $a2 -/* 0A9E5C 7F07532C 10400004 */ beqz $v0, .L7F075340 -/* 0A9E60 7F075330 24110001 */ li $s1, 1 -/* 0A9E64 7F075334 00408025 */ move $s0, $v0 -/* 0A9E68 7F075338 10000003 */ b .L7F075348 -/* 0A9E6C 7F07533C ACE00000 */ sw $zero, ($a3) -.L7F075340: -/* 0A9E70 7F075340 8E4F0008 */ lw $t7, 8($s2) -/* 0A9E74 7F075344 8DF00000 */ lw $s0, ($t7) -.L7F075348: -/* 0A9E78 7F075348 5200004C */ beql $s0, $zero, .L7F07547C -/* 0A9E7C 7F07534C 00001025 */ move $v0, $zero -.L7F075350: -/* 0A9E80 7F075350 12200006 */ beqz $s1, .L7F07536C -/* 0A9E84 7F075354 00000000 */ nop -/* 0A9E88 7F075358 8E020014 */ lw $v0, 0x14($s0) -/* 0A9E8C 7F07535C 10400003 */ beqz $v0, .L7F07536C -/* 0A9E90 7F075360 00000000 */ nop -/* 0A9E94 7F075364 1000000D */ b .L7F07539C -/* 0A9E98 7F075368 00408025 */ move $s0, $v0 -.L7F07536C: -/* 0A9E9C 7F07536C 12000009 */ beqz $s0, .L7F075394 -/* 0A9EA0 7F075370 00000000 */ nop -/* 0A9EA4 7F075374 8E02000C */ lw $v0, 0xc($s0) -.L7F075378: -/* 0A9EA8 7F075378 50400004 */ beql $v0, $zero, .L7F07538C -/* 0A9EAC 7F07537C 8E100008 */ lw $s0, 8($s0) -/* 0A9EB0 7F075380 10000004 */ b .L7F075394 -/* 0A9EB4 7F075384 00408025 */ move $s0, $v0 -/* 0A9EB8 7F075388 8E100008 */ lw $s0, 8($s0) -.L7F07538C: -/* 0A9EBC 7F07538C 5600FFFA */ bnezl $s0, .L7F075378 -/* 0A9EC0 7F075390 8E02000C */ lw $v0, 0xc($s0) -.L7F075394: -/* 0A9EC4 7F075394 52000039 */ beql $s0, $zero, .L7F07547C -/* 0A9EC8 7F075398 00001025 */ move $v0, $zero -.L7F07539C: -/* 0A9ECC 7F07539C 96020000 */ lhu $v0, ($s0) -/* 0A9ED0 7F0753A0 24110001 */ li $s1, 1 -/* 0A9ED4 7F0753A4 305800FF */ andi $t8, $v0, 0xff -/* 0A9ED8 7F0753A8 2719FFFF */ addiu $t9, $t8, -1 -/* 0A9EDC 7F0753AC 2F210018 */ sltiu $at, $t9, 0x18 -/* 0A9EE0 7F0753B0 1020002F */ beqz $at, .L7F075470 -/* 0A9EE4 7F0753B4 0019C880 */ sll $t9, $t9, 2 -/* 0A9EE8 7F0753B8 3C018005 */ lui $at, %hi(jpt_80054DB4) -/* 0A9EEC 7F0753BC 00390821 */ addu $at, $at, $t9 -/* 0A9EF0 7F0753C0 8C394DB4 */ lw $t9, %lo(jpt_80054DB4)($at) -.L7F0753C4: -/* 0A9EF4 7F0753C4 03200008 */ jr $t9 -/* 0A9EF8 7F0753C8 00000000 */ nop -.L7F0753CC: -/* 0A9EFC 7F0753CC 02402025 */ move $a0, $s2 -/* 0A9F00 7F0753D0 02002825 */ move $a1, $s0 -/* 0A9F04 7F0753D4 02603025 */ move $a2, $s3 -/* 0A9F08 7F0753D8 0FC1D31A */ jal sub_GAME_7F074C68 -/* 0A9F0C 7F0753DC 02803825 */ move $a3, $s4 -/* 0A9F10 7F0753E0 10400006 */ beqz $v0, .L7F0753FC -/* 0A9F14 7F0753E4 00000000 */ nop -/* 0A9F18 7F0753E8 8FA8003C */ lw $t0, 0x3c($sp) -/* 0A9F1C 7F0753EC AD100000 */ sw $s0, ($t0) -/* 0A9F20 7F0753F0 8E090004 */ lw $t1, 4($s0) -/* 0A9F24 7F0753F4 10000021 */ b .L7F07547C -/* 0A9F28 7F0753F8 8D220000 */ lw $v0, ($t1) -.L7F0753FC: -/* 0A9F2C 7F0753FC 1000001C */ b .L7F075470 -/* 0A9F30 7F075400 00008825 */ move $s1, $zero -.L7F075404: -/* 0A9F34 7F075404 02402025 */ move $a0, $s2 -/* 0A9F38 7F075408 02002825 */ move $a1, $s0 -/* 0A9F3C 7F07540C 02603025 */ move $a2, $s3 -/* 0A9F40 7F075410 0FC1D32B */ jal sub_GAME_7F074CAC -/* 0A9F44 7F075414 02803825 */ move $a3, $s4 -/* 0A9F48 7F075418 10400006 */ beqz $v0, .L7F075434 -/* 0A9F4C 7F07541C 00000000 */ nop -/* 0A9F50 7F075420 8FAA003C */ lw $t2, 0x3c($sp) -/* 0A9F54 7F075424 AD500000 */ sw $s0, ($t2) -/* 0A9F58 7F075428 8E0B0004 */ lw $t3, 4($s0) -/* 0A9F5C 7F07542C 10000013 */ b .L7F07547C -/* 0A9F60 7F075430 8D620000 */ lw $v0, ($t3) -.L7F075434: -/* 0A9F64 7F075434 1000000E */ b .L7F075470 -/* 0A9F68 7F075438 00008825 */ move $s1, $zero -.L7F07543C: -/* 0A9F6C 7F07543C 02402025 */ move $a0, $s2 -/* 0A9F70 7F075440 0FC1BA5C */ jal modelApplyDistanceRelations -/* 0A9F74 7F075444 02002825 */ move $a1, $s0 -/* 0A9F78 7F075448 10000009 */ b .L7F075470 -/* 0A9F7C 7F07544C 00000000 */ nop -.L7F075450: -/* 0A9F80 7F075450 02402025 */ move $a0, $s2 -/* 0A9F84 7F075454 0FC1BA6F */ jal modelApplyToggleRelations -/* 0A9F88 7F075458 02002825 */ move $a1, $s0 -/* 0A9F8C 7F07545C 10000004 */ b .L7F075470 -/* 0A9F90 7F075460 00000000 */ nop -.L7F075464: -/* 0A9F94 7F075464 02402025 */ move $a0, $s2 -/* 0A9F98 7F075468 0FC1BA82 */ jal modelApplyHeadRelations -/* 0A9F9C 7F07546C 02002825 */ move $a1, $s0 -def_7F0753C4: -.L7F075470: -/* 0A9FA0 7F075470 1600FFB7 */ bnez $s0, .L7F075350 -/* 0A9FA4 7F075474 00000000 */ nop -/* 0A9FA8 7F075478 00001025 */ move $v0, $zero -.L7F07547C: -/* 0A9FAC 7F07547C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0A9FB0 7F075480 8FB00018 */ lw $s0, 0x18($sp) -/* 0A9FB4 7F075484 8FB1001C */ lw $s1, 0x1c($sp) -/* 0A9FB8 7F075488 8FB20020 */ lw $s2, 0x20($sp) -/* 0A9FBC 7F07548C 8FB30024 */ lw $s3, 0x24($sp) -/* 0A9FC0 7F075490 8FB40028 */ lw $s4, 0x28($sp) -/* 0A9FC4 7F075494 03E00008 */ jr $ra -/* 0A9FC8 7F075498 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif - - - - - -#ifdef NONMATCHING -// unreferenced -void sub_GAME_7F07549C(s32 arg0, f32 *arg1, f32 *arg2, ModelNode *arg3) +/** + * Address: 7F074C68 + */ +bool modelTestRayIntersectsNodeBBox(Model *model, ModelNode *node, coord3d *pos, coord3d *dir) { - //uses sh vs sw - arg3->Opcode = 0; - sub_GAME_7F0752FC(arg0, arg1, arg2, arg3); + ModelRoData_BoundingBoxRecord *bbox = &node->Data->BoundingBox; + + return modelTestRayIntersectsTransformedBBox(bbox, modelFindNodeMtx(model, node, 0), pos, dir); +} + + +/** + * Address: 7F074CAC + */ +s32 sub_GAME_7F074CAC(Model *model, ModelNode *node, coord3d *raypos, coord3d *raydir) +{ + ModelRoData_Op17Record *hitData; + Mtxf *nodeMtx; + ModelOp17MainStack rayData[1]; + f32 centerProjection; + Mtxf *otherNodeMtx; + ModelOp17AxisStack axisData[1]; + f32 scaledProjection; + f32 projectionScalar; + f32 secondAxisScale; + f32 centerDistanceSq; + u32 nodeFlags; + f32 directionDotProduct; + + hitData = (ModelRoData_Op17Record *) node->Data; + nodeMtx = modelFindNodeMtx(model, node, 0); + rayData->data.rel = D_80036408; + rayData->data.radiusSq = hitData->radiusSq; + rayData->data.dir.f[0] = raydir->x; + rayData->data.dir.f[1] = raydir->y; + rayData->data.dir.f[2] = raydir->z; + nodeFlags = node->Opcode; + + if (nodeFlags & 0x100) + { + rayData->data.pos.f[0] = hitData->pos.f[0]; + rayData->data.pos.f[1] = hitData->pos.f[1]; + rayData->data.pos.f[2] = hitData->pos.f[2]; + rayData->data.rel.f[0] = (((rayData->data.pos.f[0] * nodeMtx->m[0][0]) + (rayData->data.pos.f[1] * nodeMtx->m[1][0])) + (rayData->data.pos.f[2] * nodeMtx->m[2][0])) + (nodeMtx->m[3][0] - raypos->x); + rayData->data.rel.f[1] = (((rayData->data.pos.f[0] * nodeMtx->m[0][1]) + (rayData->data.pos.f[1] * nodeMtx->m[1][1])) + (rayData->data.pos.f[2] * nodeMtx->m[2][1])) + (nodeMtx->m[3][1] - raypos->y); + rayData->data.rel.f[2] = (((rayData->data.pos.f[0] * nodeMtx->m[0][2]) + (rayData->data.pos.f[1] * nodeMtx->m[1][2])) + (rayData->data.pos.f[2] * nodeMtx->m[2][2])) + (nodeMtx->m[3][2] - raypos->z); + } + else if (nodeFlags & 0x200) + { + if (hitData->othernode != NULL) + { + otherNodeMtx = modelFindNodeMtx(model, hitData->othernode, 0); + rayData->data.rel.f[0] = ((nodeMtx->m[3][0] + otherNodeMtx->m[3][0]) * 0.5f) - (*raypos).f[0]; + rayData->data.rel.f[1] = ((nodeMtx->m[3][1] + otherNodeMtx->m[3][1]) * 0.5f) - (*raypos).f[1]; + rayData->data.rel.f[2] = ((nodeMtx->m[3][2] + otherNodeMtx->m[3][2]) * 0.5f) - (*raypos).f[2]; + } + else + { + rayData->data.rel.f[0] = nodeMtx->m[3][0] - raypos->x; + rayData->data.rel.f[1] = nodeMtx->m[3][1] - raypos->y; + rayData->data.rel.f[2] = nodeMtx->m[3][2] - raypos->z; + } + } + else + { + rayData->data.rel.f[0] = nodeMtx->m[3][0] - raypos->x; + rayData->data.rel.f[1] = nodeMtx->m[3][1] - raypos->y; + rayData->data.rel.f[2] = nodeMtx->m[3][2] - raypos->z; + } + + nodeFlags = node->Opcode; + + if (nodeFlags & 0x400) + { + projectionScalar = hitData->scale1; + secondAxisScale = hitData->scale2; + scaledProjection = (((rayData->data.dir.f[0] * nodeMtx->m[0][0]) + (rayData->data.dir.f[1] * nodeMtx->m[0][1])) + (rayData->data.dir.f[2] * nodeMtx->m[0][2])) * projectionScalar; + directionDotProduct = scaledProjection; + rayData->data.dir.f[0] = rayData->data.dir.f[0] + (nodeMtx->m[0][0] * directionDotProduct); + rayData->data.dir.f[1] = rayData->data.dir.f[1] + (nodeMtx->m[0][1] * directionDotProduct); + rayData->data.dir.f[2] = rayData->data.dir.f[2] + (nodeMtx->m[0][2] * directionDotProduct); + centerProjection = (((rayData->data.rel.f[0] * nodeMtx->m[0][0]) + (rayData->data.rel.f[1] * nodeMtx->m[0][1])) + (rayData->data.rel.f[2] * nodeMtx->m[0][2])) * projectionScalar; + rayData->data.rel.f[0] = rayData->data.rel.f[0] + (nodeMtx->m[0][0] * centerProjection); + rayData->data.rel.f[1] = rayData->data.rel.f[1] + (nodeMtx->m[0][1] * centerProjection); + rayData->data.rel.f[2] = rayData->data.rel.f[2] + (nodeMtx->m[0][2] * centerProjection); + scaledProjection = (((rayData->data.dir.f[0] * nodeMtx->m[1][0]) + (rayData->data.dir.f[1] * nodeMtx->m[1][1])) + (rayData->data.dir.f[2] * nodeMtx->m[1][2])) * secondAxisScale; + directionDotProduct = scaledProjection; + rayData->data.dir.f[0] = rayData->data.dir.f[0] + (nodeMtx->m[1][0] * directionDotProduct); + rayData->data.dir.f[1] = rayData->data.dir.f[1] + (nodeMtx->m[1][1] * directionDotProduct); + rayData->data.dir.f[2] = rayData->data.dir.f[2] + (nodeMtx->m[1][2] * directionDotProduct); + projectionScalar = (((rayData->data.rel.f[0] * nodeMtx->m[1][0]) + (rayData->data.rel.f[1] * nodeMtx->m[1][1])) + (rayData->data.rel.f[2] * nodeMtx->m[1][2])) * secondAxisScale; + rayData->data.rel.f[0] = rayData->data.rel.f[0] + (nodeMtx->m[1][0] * projectionScalar); + rayData->data.rel.f[1] = rayData->data.rel.f[1] + (nodeMtx->m[1][1] * projectionScalar); + rayData->data.rel.f[2] = rayData->data.rel.f[2] + (nodeMtx->m[1][2] * projectionScalar); + } + else if (((nodeFlags & 0x800) || (nodeFlags & 0x1000)) || (nodeFlags & 0x2000)) + { + axisData->axisAdjustment.scale = hitData->scale1; + if ((nodeFlags & 0x800)) + { + axisData->axisAdjustment.axis.f[0] = nodeMtx->m[0][0]; + axisData->axisAdjustment.axis.f[1] = nodeMtx->m[0][1]; + axisData->axisAdjustment.axis.f[2] = nodeMtx->m[0][2]; + } + else if (nodeFlags & 0x1000) + { + axisData->axisAdjustment.axis.f[0] = nodeMtx->m[1][0]; + axisData->axisAdjustment.axis.f[1] = nodeMtx->m[1][1]; + axisData->axisAdjustment.axis.f[2] = nodeMtx->m[1][2]; + } + else if (nodeFlags & 0x2000) + { + axisData->axisAdjustment.axis.f[0] = nodeMtx->m[2][0]; + axisData->axisAdjustment.axis.f[1] = nodeMtx->m[2][1]; + axisData->axisAdjustment.axis.f[2] = nodeMtx->m[2][2]; + } + + directionDotProduct = axisData->axisAdjustment.scale * ( + (rayData->data.dir.f[0] * axisData->axisAdjustment.axis.f[0]) + + (rayData->data.dir.f[1] * axisData->axisAdjustment.axis.f[1]) + + (rayData->data.dir.f[2] * axisData->axisAdjustment.axis.f[2]) + ); + + rayData->data.dir.f[0] = rayData->data.dir.f[0] + (axisData->axisAdjustment.axis.f[0] * directionDotProduct); + rayData->data.dir.f[1] = rayData->data.dir.f[1] + (axisData->axisAdjustment.axis.f[1] * directionDotProduct); + rayData->data.dir.f[2] = rayData->data.dir.f[2] + (axisData->axisAdjustment.axis.f[2] * directionDotProduct); + + scaledProjection = axisData->axisAdjustment.scale * ( + (rayData->data.rel.f[0] * axisData->axisAdjustment.axis.f[0]) + + (rayData->data.rel.f[1] * axisData->axisAdjustment.axis.f[1]) + + (rayData->data.rel.f[2] * axisData->axisAdjustment.axis.f[2]) + ); + + rayData->data.rel.f[0] = rayData->data.rel.f[0] + (axisData->axisAdjustment.axis.f[0] * scaledProjection); + rayData->data.rel.f[1] = rayData->data.rel.f[1] + (axisData->axisAdjustment.axis.f[1] * scaledProjection); + rayData->data.rel.f[2] = rayData->data.rel.f[2] + (axisData->axisAdjustment.axis.f[2] * scaledProjection); + } + + projectionScalar = + (rayData->data.dir.f[0] * rayData->data.rel.f[0]) + + (rayData->data.dir.f[1] * rayData->data.rel.f[1]) + + (rayData->data.dir.f[2] * rayData->data.rel.f[2]); + + if (0.0f < projectionScalar) + { + directionDotProduct = (rayData->data.dir.f[0] * rayData->data.dir.f[0]) + (rayData->data.dir.f[1] * rayData->data.dir.f[1]) + (rayData->data.dir.f[2] * rayData->data.dir.f[2]); + centerDistanceSq = (rayData->data.rel.f[0] * rayData->data.rel.f[0]) + (rayData->data.rel.f[1] * rayData->data.rel.f[1]) + (0, rayData->data.rel.f[2] * rayData->data.rel.f[2]); + + if (((centerDistanceSq - rayData->data.radiusSq) * directionDotProduct) <= (projectionScalar * projectionScalar)) + { + return 1; + } + else + { + return 0; + } + } + + return 0; +} + + +/** + * Address: 7F0752FC + */ +u32 modelFindNextProjectileHitCandidate(Model *model, coord3d *arg1, coord3d *arg2, ModelNode **nodeptr) +{ + ModelNode *node; + s32 descend; + u32 opcode; + + descend = TRUE; + + if (*nodeptr != NULL) { + node = *nodeptr; + *nodeptr = NULL; + } else { + node = model->obj->RootNode; + } + + if (node != NULL) { + do { + if (descend != 0 && node->Child != NULL) { + node = node->Child; + } else { + if (node != NULL) { + do { + if (node->Next != NULL) { + node = node->Next; + break; + } + + node = node->Parent; + } while (node != NULL); + } + + if (node == NULL) { + break; + } + } + + descend = TRUE; + opcode = node->Opcode & 0xff; + + /* + * This switch is written as opcode - 1 to match the compiler's jump-table generation. + * The real opcodes run from HEADER=1 through DLCOLLISION=24, so the compiler + * normalizes them to a zero-based table index by subtracting 1. + */ + switch (opcode - 1) { + case MODELNODE_OPCODE_BBOX - 1: + if (modelTestRayIntersectsNodeBBox(model, node, arg1, arg2) != 0) { + *nodeptr = node; + return *(u32 *)node->Data; + } + descend = FALSE; + break; + + case MODELNODE_OPCODE_OP17 - 1: + if (sub_GAME_7F074CAC(model, node, arg1, arg2) != 0) { + *nodeptr = node; + return *(u32 *)node->Data; + } + descend = FALSE; + break; + + case MODELNODE_OPCODE_LOD - 1: + modelApplyDistanceRelations(model, node); + break; + + case MODELNODE_OPCODE_SWITCH - 1: + modelApplyToggleRelations(model, node); + break; + + case MODELNODE_OPCODE_HEAD - 1: + modelApplyHeadRelations(model, node); + break; + case MODELNODE_OPCODE_HEADER - 1: + case MODELNODE_OPCODE_DLCOLLISION - 1: + default: + break; + } + } while (node != NULL); + } + + return 0; +} + + +/** + * Unreferenced + */ +u32 *sub_GAME_7F07549C(void *arg0, f32 *arg1, f32 *arg2, ModelNode **nodeptr) +{ + *nodeptr = NULL; + return modelFindNextProjectileHitCandidate(arg0, arg1, arg2, nodeptr); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F07549C -/* 0A9FCC 7F07549C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0A9FD0 7F0754A0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0A9FD4 7F0754A4 0FC1D4BF */ jal sub_GAME_7F0752FC -/* 0A9FD8 7F0754A8 ACE00000 */ sw $zero, ($a3) -/* 0A9FDC 7F0754AC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0A9FE0 7F0754B0 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0A9FE4 7F0754B4 03E00008 */ jr $ra -/* 0A9FE8 7F0754B8 00000000 */ nop -) -#endif /** @@ -9381,7 +5628,7 @@ s32 loadAnimationFrame(ModelAnimation* anim, s32 frame, ModelSkeleton* unused) // Load that frame from RAM ret = anim->address + (frame * frameSize); } - else if (D_80036414 != NULL) // should never be NULL after sub_GAME_7F0009E0 is called + else if (D_80036414 != NULL) // should never be NULL after initAnimationsBuffer is called { // Get dest from this D_80036414 which points to an array. Align to 16 bytes. dest = ((u32) (D_80036414->animBufferPtr2 + 15) >> 4) * 16; @@ -9416,9 +5663,9 @@ s32 loadAnimationFrame(ModelAnimation* anim, s32 frame, ModelSkeleton* unused) /** * Address 7F0755B0. */ -void sub_GAME_7F0755B0(void) +void modelResetAnimationsScratchBuffer(void) { - if (D_80036414 != NULL) // should never be NULL after sub_GAME_7F0009E0 is called + if (D_80036414 != NULL) // should never be NULL after initAnimationsBuffer is called { // Reset the pointer to point to the start of the array D_80036414->animBufferPtr2 = D_80036414->animBufferPtr1; @@ -9935,7 +6182,7 @@ void modelInit(struct Model *objinst, struct ModelFileHeader *header, u32 *data) { objinst->obj = header; objinst->datas = data; - objinst->Type = -1; + objinst->rwdatalen = -1; objinst->attachedto = NULL; objinst->attachedto_objinst = NULL; objinst->scale = 1.0; @@ -9963,7 +6210,7 @@ void animInit(struct Model *objinst, struct ModelFileHeader *header, u32 *data) objinst->speed = 1.0f; objinst->speed2 = 1.0f; objinst->playspeed = 1.0f; - objinst->unkb8 = 1.0f; + objinst->anim_translation_scale = 1.0f; objinst->endframe = -1.0f; objinst->unk6c = -1.0f; } diff --git a/src/game/model.h b/src/game/model.h index f868ca07..5bbde7ca 100644 --- a/src/game/model.h +++ b/src/game/model.h @@ -5,17 +5,22 @@ #include #include "bondconstants.h" + +extern s32 g_MaxModelSlots; +extern s32 g_MaxAnimModelSlots; +extern s32 g_ModelIsLvResetting; + bool modelmgrCanSlotFitRwdata(Model *modelslot, ModelFileHeader *modeldef); -void* get_obj_instance_controller_for_header(struct ModelFileHeader* arg0); +Model* modelmgrInstantiateModel(struct ModelFileHeader* arg0); void clear_model_obj(Model* model); -Model *get_aircraft_obj_instance_controller(ModelFileHeader *); +Model *modelmgrInstantiateModelWithAnim(ModelFileHeader *); void modelAttachHead(Model *, ModelNode*, ModelFileHeader *); void clear_aircraft_model_obj(Model *objinstance); void modelSetDistanceDisabled(s32 param_1); void modelSetDistanceScale(f32 param_1); void set_vtxallocator(s32 param_1); -void sub_GAME_7F06C474(Model* model, coord3d* coord); -void sub_GAME_7F06C550(Model* model, coord3d* coord); +void modelCalculateScaledRootToOriginDir(Model* model, coord3d* coord); +void modelGetScaledRootToOriginDir(Model* model, coord3d* coord); s32 modelFindNodeMtxIndex(ModelNode *node, s32 arg1); Mtxf *modelFindNodeMtx(struct Model *model, struct ModelNode *node, s32 arg2); Mtxf *getsubmatrix(Model *objinst); @@ -28,16 +33,13 @@ void setsuboffset(Model *objinst, coord3d *offset); f32 getsubroty(Model *objinst); void setsubroty(Model *model, f32 angle); void modelSetScale(Model *objinst, f32 scale); -void sub_GAME_7F06CE84(Model* self, f32 arg1); +void modelSetAnimTranslationScale(Model* model, f32 scale); f32 getjointsize(Model *model, ModelNode *node); f32 getinstsize(Model *arg0); void interpolate3dVectors(vec3d *v, vec3d *w, float frac); f32 sub_GAME_7F06D0CC(f32 arg0, f32 angle, f32 mult); void sub_GAME_7F06D160(coord3d *arg0, coord3d *arg1, f32 mult); - -// arg0: unknown type. arg1: unknown type. arg5: unknown type, maybe struct. -void sub_GAME_7F06D2E4(s32, s32, ModelSkeleton*, void* anim, s32, s16*); - +u16 sub_GAME_7F06D2E4(s32 jointnum, s32 flip, ModelSkeleton *skeleton, ModelAnimation *anim, s32 frame, coord16 *out); void sub_GAME_7F06D490(struct Model *arg0, struct ModelNode *arg1); void subcalcpos(Model *arg0); void process_01_group_heading(ModelRenderData* renderdata, Model* model, ModelNode* node); @@ -59,12 +61,12 @@ void instcalcmatrices(ModelRenderData* arg0, Model* arg1); void subcalcmatrices(ModelRenderData *arg0, struct Model *arg1); struct ModelAnimation * objecthandlerGetModelAnim(struct Model* model); s8 objecthandlerGetModelGunhand(Model *model); -f32 objecthandlerGetModelField28(Model *model); -f32 sub_GAME_7F06F5C4(Model *model); +f32 modelGetAnimFrame(Model *model); +f32 modelGetAnimEndFrame(Model *model); f32 modelGetAnimSpeed(Model *model); f32 modelGetAbsAnimSpeed(Model *model); s32 modelConstrainOrWrapAnimFrame(s32 frame, ModelAnimation *anim, f32 endframe); -void modelCopyAnimForMerge(Model *, f32); +void modelCopyAnimForMerge(Model *model, f32 timemerge); void modelSetAnimation2(Model *, ModelAnimation *, s32, f32, f32, f32); void modelSetAnimationWithMerge(Model *model, ModelAnimation *modelAnimation, s32 flip, f32 startframe, f32 speed, f32 timemerge, s32 domerge); void modelSetAnimation(Model *model, ModelAnimation *modelAnimation, s32 flip, f32 startframe, f32 speed, f32 merge); @@ -79,7 +81,7 @@ void modelSetAnimFrame(Model* model, f32 frame); void modelSetAnimFrame2(Model* model, f32 frame1, f32 frame2); void modelSetAnimMergingEnabled(s32 arg0); u32 modelIsAnimMergingEnabled(void); -void modelTickAnimQuarterSpeed(Model *, s32, s32); +void modelTickAnim(struct Model *model, s32 numticks, s32 update_chrstuff); void modelApplyRenderModeType1(ModelRenderData *renderdata); void modelApplyRenderModeType3(ModelRenderData *renderdata, bool isPrimary); void modelApplyRenderModeType4(ModelRenderData *renderdata, bool isPrimary); @@ -101,7 +103,7 @@ void sub_GAME_7F074524(Gfx *param_1,struct Model *param_2, struct ModelNode *par void sub_GAME_7F074534(ModelRenderData* data, Model* model, ModelNode* node); void subdraw(ModelRenderData *arg0, struct Model *); s32 loadAnimationFrame(ModelAnimation* anim, s32 frame, ModelSkeleton* unused); -void sub_GAME_7F0755B0(void); +void modelResetAnimationsScratchBuffer(void); void modelPromoteNodeOffsetsToPointers(ModelNode *node, u32 vma, u32 fileramaddr); void sub_GAME_7F075A90(ModelFileHeader *header, s32 vma, u32 addr); s32 modelCalculateRwDataIndexes(ModelNode *basenode); @@ -112,6 +114,7 @@ void animInit(struct Model *objinst, struct ModelFileHeader *header, u32 *data); void modelAttachPart(Model *pmodel, ModelFileHeader *pmodeldef, ModelNode *pnode, ModelFileHeader *cmodeldef); void modelIterateDisplayLists(ModelFileHeader *fileheader, ModelNode **nodeptr, Gfx **gdlptr); void modelNodeReplaceGdl(u32 arg0, ModelNode *node, Gfx *find, Gfx *replacement); +bool modelTestRayIntersectsTransformedBBox(ModelRoData_BoundingBoxRecord *bbox, Mtxf *mtx, coord3d *pos, coord3d *dir); #ifndef VERSION_EU void return_null(void); diff --git a/src/game/mpmenu.c b/src/game/mpmenu.c index c523ae53..1e60719a 100644 --- a/src/game/mpmenu.c +++ b/src/game/mpmenu.c @@ -18,13 +18,25 @@ #include "file.h" #include "assets/obseg/text/LmpmenuE.h" +#ifdef REFRESH_PAL +#define MPMENU_YOFF 8 /* PAL: every text row sits 8 pixels lower */ +#else +#define MPMENU_YOFF 0 +#endif + // bss s32 g_stopPlayFlag; + +/** + * g_gameOverFlag has two meanings. One is the standard true/false for whether the game is over. + * The other is as a timer. Values >= 2 mean a countdown is still running. + */ s32 g_gameOverFlag; -s32 dword_CODE_bss_8008C708; -s32 dword_CODE_bss_8008C70C; -s32 time_trigger_alt_gameover_msg; -s32 dword_CODE_bss_8008C714; + +s32 chevron_glow; +s32 chevron_glow_timer; +s32 alt_gameover_msg; +s32 alt_gameover_msg_timer; s32 g_pausedFlag; s32 who_paused; @@ -36,50 +48,49 @@ u16 g_AwardNames[] = { }; - -// rodata - - -s32 mpwatchMenuCanGoRight(void) { - switch(g_CurrentPlayer->mpmenumode) - { - case MENU_GOWOC: - case MENU_LOSSES: - case MENU_KILLS: - case MENU_PAUSE: - return 1; - case MENU_EXIT: - case MENU_6: - case MENU_7: - return 0; - case MENU_SCORES: - return g_gameOverFlag ? 0 : 1; - default: - return 0; - } +s32 mpwatchMenuCanGoRight(void) +{ + switch(g_CurrentPlayer->mpmenumode) + { + case MENU_GOWOC: + case MENU_LOSSES: + case MENU_KILLS: + case MENU_PAUSE: + return 1; + case MENU_EXIT: + case MENU_EXIT_CONFIRM: + case MENU_FINISHED: + return 0; + case MENU_SCORES: + return g_gameOverFlag ? 0 : 1; + default: + return 0; + } } -s32 mpwatchMenuCanGoLeft(void) { - switch(g_CurrentPlayer->mpmenumode) - { - case MENU_KILLS: - case MENU_SCORES: - case MENU_PAUSE: - case MENU_EXIT: - return 1; - case MENU_GOWOC: - case MENU_6: - case MENU_7: - return 0; - case MENU_LOSSES: - return g_gameOverFlag ? 1 : 0; - default: + +s32 mpwatchMenuCanGoLeft(void) +{ + switch(g_CurrentPlayer->mpmenumode) + { + case MENU_KILLS: + case MENU_SCORES: + case MENU_PAUSE: + case MENU_EXIT: + return 1; + case MENU_GOWOC: + case MENU_EXIT_CONFIRM: + case MENU_FINISHED: + return 0; + case MENU_LOSSES: + return g_gameOverFlag ? 1 : 0; + default: #ifdef DEBUG - // kill the process - assert(1 == 0); // mpmenu.c, line87 + // kill the process + assert(1 == 0); // mpmenu.c, line87 #endif return 0; - } + } } @@ -87,7 +98,8 @@ s32 mpwatchIsPlayerPressingRight(s32 player) { s32 iVar3 = joyGetStickXInRange(player, -2, 1); - if ((joyGetButtonsPressedThisFrame(player, R_JPAD|R_CBUTTONS)) || ((iVar3 >= 1 && (g_CurrentPlayer->mpjoywascentre)))) { + if ((joyGetButtonsPressedThisFrame(player, R_JPAD|R_CBUTTONS)) || ((iVar3 >= 1 && (g_CurrentPlayer->mpjoywascentre)))) + { return 1; } @@ -96,9 +108,10 @@ s32 mpwatchIsPlayerPressingRight(s32 player) s32 mpwatchIsPlayerPressingLeft(s32 player) { - s32 iVar3 = joyGetStickXInRange(player, -2, 1); + s32 iVar3 = joyGetStickXInRange(player, -2, 1); - if ((joyGetButtonsPressedThisFrame(player, L_JPAD|L_CBUTTONS)) || ((iVar3 < -1 && (g_CurrentPlayer->mpjoywascentre)))) { + if ((joyGetButtonsPressedThisFrame(player, L_JPAD|L_CBUTTONS)) || ((iVar3 < -1 && (g_CurrentPlayer->mpjoywascentre)))) + { return 1; } @@ -111,6 +124,7 @@ void mpwatchPlayBeep(void) sndPlaySfx(g_musicSfxBufferPtr, CAMERA_BEEP1_SFX, 0); } + void mpwatchUnpauseGame(void) { g_stopPlayFlag = 0; @@ -118,157 +132,180 @@ void mpwatchUnpauseGame(void) g_pausedFlag = 0; } -s32 mpFindMaxInt(int numplayers, int param_2, int param_3, int param_4, int param_5) + +/** + * Returns the index (0-3) of the player with the highest value. + */ +s32 mpFindMaxInt(s32 numplayers, s32 value0, s32 value1, s32 value2, s32 value3) { - s32 aux; - s32 result; - - if ((param_2 < param_3) || - ((param_3 == param_2 && ((randomGetNext() & 1))))) { - result = 1; - aux = param_3; - } - else { - result = 0; - aux = param_2; - } - - if (numplayers >= 3) { - - if ((aux < param_4) || - ((param_4 == aux && ((randomGetNext() & 1))))) { - result = 2; - aux = param_4; - } - - if (numplayers >= 4) { - - if ((aux < param_5) || - ((param_5 == aux && ((randomGetNext() & 1))))) { - result = 3; - } - } - - } - - return result; -} - - -s32 mpFindMinInt(int numplayers, int param_2, int param_3, int param_4, int param_5) -{ - s32 aux; - s32 result; - - if ((param_3 < param_2) || - ((param_3 == param_2 && ((randomGetNext() & 1))))) { - result = 1; - aux = param_3; - } - else { - result = 0; - aux = param_2; - } - - if (numplayers >= 3) { - - if ((param_4 < aux) || - ((param_4 == aux && ((randomGetNext() & 1))))) { - result = 2; - aux = param_4; - } - - if (numplayers >= 4) { - - if ((param_5 < aux) || - ((param_5 == aux && ((randomGetNext() & 1))))) { - result = 3; - } - } - } - - return result; -} - - -s32 mpFindMaxFloat(s32 numplayers, f32 arg1, f32 arg2, f32 arg3, f32 arg4) -{ - s32 aux; - s32 result; - - if ((arg1 < arg2) || - ((arg2 == arg1 && ((randomGetNext() & 1))))) { - aux = (s32) arg2; - result = 1; - } - else { - aux = (s32) arg1; - result = 0; - } - - if (numplayers >= 3) - { - if ((aux < arg3) || - ((arg3 == aux && ((randomGetNext() & 1))))) { - aux = (s32) arg3; - result = 2; - } - - if (numplayers >= 4) + s32 aux; + s32 result; + + if ((value0 < value1) || ((value1 == value0 && ((randomGetNext() & 1))))) { - - if ((aux < arg4) || - ((arg4 == aux && ((randomGetNext() & 1))))) { - result = 3; - } + result = 1; + aux = value1; } - } - return result; -} - -s32 mpFindMinFloat(s32 numplayers, f32 arg1, f32 arg2, f32 arg3, f32 arg4) -{ - s32 aux; - s32 result; - - if ((arg2 < arg1) || - ((arg2 == arg1 && ((randomGetNext() & 1))))) { - aux = (s32) arg2; - result = 1; - } - else { - aux = (s32) arg1; - result = 0; - } - - if (numplayers >= 3) - { - if ((arg3 < aux) || - ((arg3 == aux && ((randomGetNext() & 1))))) { - aux = (s32) arg3; - result = 2; - } - - if (numplayers >= 4) + else { - - if ((arg4 < aux) || - ((arg4 == aux && ((randomGetNext() & 1))))) { - result = 3; - } + result = 0; + aux = value0; } - } - return result; + + if (numplayers >= 3) + { + + if ((aux < value2) || ((value2 == aux && ((randomGetNext() & 1))))) + { + result = 2; + aux = value2; + } + + if (numplayers >= 4) + { + if ((aux < value3) || ((value3 == aux && ((randomGetNext() & 1))))) { + result = 3; + } + } + } + + return result; } -void pauseAndLockControls(void) { +/** + * Returns the index (0-3) of the player with the lowest value. + */ +s32 mpFindMinInt(s32 numplayers, s32 value0, s32 value1, s32 value2, s32 value3) +{ + s32 aux; + s32 result; + + if ((value1 < value0) || ((value1 == value0 && ((randomGetNext() & 1))))) + { + result = 1; + aux = value1; + } + else + { + result = 0; + aux = value0; + } + + if (numplayers >= 3) + { + if ((value2 < aux) || ((value2 == aux && ((randomGetNext() & 1))))) + { + result = 2; + aux = value2; + } + + if (numplayers >= 4) + { + if ((value3 < aux) || ((value3 == aux && ((randomGetNext() & 1))))) + { + result = 3; + } + } + } + + return result; +} + + +/** + * Returns the index of the player with the highest value. + * + * @bug: aux is s32 so each time it's set to one of the values, the decimal portion gets truncated. + * The first comparison is safe from this since it doesn't use aux, but the rest are impacted. + */ +s32 mpFindMaxFloat(s32 numplayers, f32 value0, f32 value1, f32 value2, f32 value3) +{ + s32 aux; + s32 result; + + if ((value0 < value1) || ((value1 == value0 && ((randomGetNext() & 1))))) + { + aux = (s32) value1; + result = 1; + } + else + { + aux = (s32) value0; + result = 0; + } + + if (numplayers >= 3) + { + if ((aux < value2) || ((value2 == aux && ((randomGetNext() & 1))))) + { + aux = (s32) value2; + result = 2; + } + + if (numplayers >= 4) + { + if ((aux < value3) || ((value3 == aux && ((randomGetNext() & 1))))) + { + result = 3; + } + } + } + + return result; +} + + +/** + * Returns the index of the player with the lowest value. + * + * Also suffers from the same bug as the above function. + */ +s32 mpFindMinFloat(s32 numplayers, f32 value0, f32 value1, f32 value2, f32 value3) +{ + s32 aux; + s32 result; + + if ((value1 < value0) || ((value1 == value0 && ((randomGetNext() & 1))))) + { + aux = (s32) value1; + result = 1; + } + else + { + aux = (s32) value0; + result = 0; + } + + if (numplayers >= 3) + { + if ((value2 < aux) || ((value2 == aux && ((randomGetNext() & 1))))) + { + aux = (s32) value2; + result = 2; + } + + if (numplayers >= 4) + { + if ((value3 < aux) || ((value3 == aux && ((randomGetNext() & 1))))) + { + result = 3; + } + } + } + + return result; +} + + +void pauseAndLockControls(void) +{ lvlSetControlsLockedFlag(1); g_pausedFlag = TRUE; } -s32 disablePlayerActionsWhenPausedOrInMpMenu(void) +bool disablePlayerActionsWhenPausedOrInMpMenu(void) { if (getPlayerCount() == 1) { @@ -295,7 +332,8 @@ void mpwatchSetStopPlayFlag(void) } -void mpCalculateAwards(s32 arg0) + +void mpCalculateAwards(bool gameoverdelay) { s32 player_count; s32 i; @@ -315,25 +353,26 @@ void mpCalculateAwards(s32 arg0) musicTrack1ApplySeqpVol(sub_GAME_7F0C0BF0()); g_musicXTrack1Fade = 0; - musicTrack1Play(0x2C); + musicTrack1Play(M_INTROSWOOSH); pauseAndLockControls(); - if (arg0 != 0) + if (gameoverdelay != 0) { - g_gameOverFlag = (PAL ? 0xFA : 0x12C); + g_gameOverFlag = (PAL ? 250 : 300); } else { g_gameOverFlag = 1; } - time_trigger_alt_gameover_msg = 1; + alt_gameover_msg = 1; - dword_CODE_bss_8008C714 = (PAL ? 0x10 : 0x14); + // Possible copy/paste error: these are the timer values for the chevron glow + alt_gameover_msg_timer = (PAL ? 16 : 20); - dword_CODE_bss_8008C708 = 0; - dword_CODE_bss_8008C70C = 0; + chevron_glow = 0; + chevron_glow_timer = 0; prev_player_num = get_cur_playernum(); @@ -343,7 +382,7 @@ void mpCalculateAwards(s32 arg0) set_cur_player(i); g_CurrentPlayer->mpmenuon = TRUE; - g_CurrentPlayer->mpmenumode = 3; + g_CurrentPlayer->mpmenumode = MENU_SCORES; g_CurrentPlayer->ptr_text_first_mp_award = 0; g_CurrentPlayer->ptr_text_second_mp_award = 0; @@ -532,7 +571,7 @@ void mpCalculateAwards(s32 arg0) } -void sub_GAME_7F0C2E80(void) +void mpwatchMenuTick(void) { s32 player_num; s32 player_count; @@ -544,15 +583,21 @@ void sub_GAME_7F0C2E80(void) player_count = getPlayerCount(); x_centered = joyGetStickXInRange(player_num, -2, 1); + // The player in shuffled position 0 drives down g_gameOverFlag which is both a flag and a timer. if (!get_player_position_in_shuffled(player_num) && (g_gameOverFlag >= 2)) { g_gameOverFlag -= speedgraphframes; - if (g_gameOverFlag <= 0) { g_gameOverFlag = 1; } + + if (g_gameOverFlag <= 0) + { + g_gameOverFlag = 1; + } } if (player_count != 1) { - if ((g_CurrentPlayer->bonddead != FALSE) && (g_gameOverFlag == FALSE)) + // If a player has their pause menu up when they die and the game isn't over, turn their menu off. + if ((g_CurrentPlayer->bonddead) && (!g_gameOverFlag)) { g_CurrentPlayer->mpmenuon = FALSE; g_CurrentPlayer->healthdisplaytime = 0; @@ -563,30 +608,32 @@ void sub_GAME_7F0C2E80(void) { if (get_player_position_in_shuffled(player_num) == 0) { - dword_CODE_bss_8008C70C += speedgraphframes; - dword_CODE_bss_8008C714 += speedgraphframes; + chevron_glow_timer += speedgraphframes; + alt_gameover_msg_timer += speedgraphframes; - if (dword_CODE_bss_8008C70C >= (PAL ? 0x10 : 0x14)) + // Toggle chevron glow + if (chevron_glow_timer >= (PAL ? 16 : 20)) { - dword_CODE_bss_8008C70C -= (PAL ? 0x10 : 0x14); - dword_CODE_bss_8008C708 = !dword_CODE_bss_8008C708; + chevron_glow_timer -= (PAL ? 16 : 20); + chevron_glow = !chevron_glow; } - if (dword_CODE_bss_8008C714 >= (PAL ? 0x64 : 0x78)) + // Flip between "GAME OVER" and "START TO EXIT" text. + if (alt_gameover_msg_timer >= (PAL ? 100 : 120)) { - dword_CODE_bss_8008C714 -= (PAL ? 0x64: 0x78); - time_trigger_alt_gameover_msg = !time_trigger_alt_gameover_msg; + alt_gameover_msg_timer -= (PAL ? 100: 120); + alt_gameover_msg = !alt_gameover_msg; } } - if (g_playerPerm->most_killed_one_life < g_CurrentPlayer->field_29F8) + if (g_playerPerm->most_killed_one_life < g_CurrentPlayer->kills_this_life) { - g_playerPerm->most_killed_one_life = g_CurrentPlayer->field_29F8; + g_playerPerm->most_killed_one_life = g_CurrentPlayer->kills_this_life; } - if (g_playerPerm->longest_inning < (getMissiontimer() - g_CurrentPlayer->field_29F4)) + if (g_playerPerm->longest_inning < (getMissiontimer() - g_CurrentPlayer->lifestarttime60)) { - g_playerPerm->longest_inning = getMissiontimer() - g_CurrentPlayer->field_29F4; + g_playerPerm->longest_inning = getMissiontimer() - g_CurrentPlayer->lifestarttime60; } if (g_CurrentPlayer->mpmenuon != FALSE) @@ -601,17 +648,17 @@ void sub_GAME_7F0C2E80(void) mpwatchPlayBeep(); g_CurrentPlayer->mpmenumode--; } - else if (mpwatchIsPlayerPressingRight(player_num) && (g_CurrentPlayer->mpmenumode == 6)) + else if (mpwatchIsPlayerPressingRight(player_num) && (g_CurrentPlayer->mpmenumode == MENU_EXIT_CONFIRM)) { mpwatchPlayBeep(); g_CurrentPlayer->mpquitconfirm = 1; } - else if (mpwatchIsPlayerPressingLeft(player_num) && (g_CurrentPlayer->mpmenumode == 6)) + else if (mpwatchIsPlayerPressingLeft(player_num) && (g_CurrentPlayer->mpmenumode == MENU_EXIT_CONFIRM)) { mpwatchPlayBeep(); g_CurrentPlayer->mpquitconfirm = 0; } - else if (joyGetButtonsPressedThisFrame(player_num, 0x8000U) && (g_CurrentPlayer->mpmenumode == 4)) + else if (joyGetButtonsPressedThisFrame(player_num, A_BUTTON) && (g_CurrentPlayer->mpmenumode == MENU_PAUSE)) { mpwatchPlayBeep(); if (!g_pausedFlag) @@ -626,26 +673,27 @@ void sub_GAME_7F0C2E80(void) lvlSetControlsLockedFlag(0); } } - else if (g_CurrentPlayer->mpmenumode == 7) + else if (g_CurrentPlayer->mpmenumode == MENU_FINISHED) { - if (joyGetButtonsPressedThisFrame(player_num, 0x4000U)) + if (joyGetButtonsPressedThisFrame(player_num, B_BUTTON)) { mpwatchPlayBeep(); g_CurrentPlayer->mpmenuon = TRUE; - g_CurrentPlayer->mpmenumode = 3; + g_CurrentPlayer->mpmenumode = MENU_SCORES; } } - else if (((joyGetButtonsPressedThisFrame(player_num, 0x9000U) != 0) && ((((g_CurrentPlayer->mpmenumode != 5)) && (g_CurrentPlayer->mpmenumode != 6)) || ((g_CurrentPlayer->mpmenumode == 6) && (g_CurrentPlayer->mpquitconfirm != 1)))) || (joyGetButtonsPressedThisFrame(player_num, 0x4000U) != 0)) + else if (((joyGetButtonsPressedThisFrame(player_num, A_BUTTON | START_BUTTON)) && ((((g_CurrentPlayer->mpmenumode != MENU_EXIT)) && (g_CurrentPlayer->mpmenumode != MENU_EXIT_CONFIRM)) || ((g_CurrentPlayer->mpmenumode == MENU_EXIT_CONFIRM) && (g_CurrentPlayer->mpquitconfirm != 1)))) || (joyGetButtonsPressedThisFrame(player_num, B_BUTTON))) { mpwatchPlayBeep(); - if (g_gameOverFlag != 0) + + if (g_gameOverFlag) { menu_count = 0; - g_CurrentPlayer->mpmenumode = 7; + g_CurrentPlayer->mpmenumode = MENU_FINISHED; for (i = 0; i < player_count; i++) { - if (g_playerPointers[i]->mpmenumode == 7) + if (g_playerPointers[i]->mpmenumode == MENU_FINISHED) { menu_count++; } @@ -659,7 +707,8 @@ void sub_GAME_7F0C2E80(void) else { g_CurrentPlayer->mpmenuon = FALSE; - g_CurrentPlayer->healthdisplaytime = (PAL ? 0x32 : 0x3C); + g_CurrentPlayer->healthdisplaytime = (PAL ? 50 : 60); + if (get_cur_playernum() == who_paused) { g_pausedFlag = 0; @@ -667,20 +716,20 @@ void sub_GAME_7F0C2E80(void) } } } - else if ((joyGetButtonsPressedThisFrame(player_num, 0x9000U) != 0) && (g_CurrentPlayer->mpmenumode == 5)) + else if ((joyGetButtonsPressedThisFrame(player_num, A_BUTTON | START_BUTTON)) && (g_CurrentPlayer->mpmenumode == MENU_EXIT)) { mpwatchPlayBeep(); - g_CurrentPlayer->mpmenumode = 6; + g_CurrentPlayer->mpmenumode = MENU_EXIT_CONFIRM; g_CurrentPlayer->mpquitconfirm = 0; } - else if (joyGetButtonsPressedThisFrame(player_num, 0x9000U) != 0) + else if (joyGetButtonsPressedThisFrame(player_num, A_BUTTON | START_BUTTON)) { - if ((g_CurrentPlayer->mpmenumode == 6) && (g_CurrentPlayer->mpquitconfirm == 1)) + if ((g_CurrentPlayer->mpmenumode == MENU_EXIT_CONFIRM) && (g_CurrentPlayer->mpquitconfirm == 1)) { mpwatchPlayBeep(); g_CurrentPlayer->mpmenuon = FALSE; g_CurrentPlayer->healthdisplaytime = 0; - mpCalculateAwards(0); + mpCalculateAwards(FALSE); } } @@ -694,11 +743,11 @@ void sub_GAME_7F0C2E80(void) return; } - if (joyGetButtonsPressedThisFrame(player_num, 0x1000U) != 0) + if (joyGetButtonsPressedThisFrame(player_num, START_BUTTON)) { mpwatchPlayBeep(); g_CurrentPlayer->mpmenuon = TRUE; - g_CurrentPlayer->mpmenumode = 3; + g_CurrentPlayer->mpmenumode = MENU_SCORES; g_CurrentPlayer->mpjoywascentre = 1; g_CurrentPlayer->apparenthealth = g_CurrentPlayer->bondhealth; g_CurrentPlayer->apparentarmour = g_CurrentPlayer->bondarmour; @@ -708,61 +757,60 @@ void sub_GAME_7F0C2E80(void) } +Gfx *display_text_for_playerdata_on_MP_menu(Gfx *gdl, s32 x, s32 y, s32 points, TEXTCOLORS text_color) { -Gfx *display_text_for_playerdata_on_MP_menu(Gfx *gdl, s32 x, s32 y, u16* arg3, TEXTCOLORS text_color) { - - s32 sp5C; - s32 sp58; - s32 sp54; - s32 sp50; + s32 textX; + s32 textY; + s32 textwidth; + s32 textheight; s32 unused; - u16 *sp48; + u16 *text; s16 viX; s32 viY; - sprintf(&sp48, "%d", arg3); + sprintf(&text, "%d", points); - textMeasure(&sp50, &sp54, &sp48, ptrFontBankGothicChars, ptrFontBankGothic, 0); + textMeasure(&textheight, &textwidth, &text, ptrFontBankGothicChars, ptrFontBankGothic, 0); - sp5C = x - (sp54 >> 1); - sp58 = y; - - switch (text_color) { + textX = x - (textwidth >> 1); + textY = y; + switch (text_color) + { case GREEN_NORMAL: viX = viGetX(); viY = viGetY(); - gdl = textRender(gdl, &sp5C, &sp58, &sp48, ptrFontBankGothicChars, ptrFontBankGothic, 0xFF00B0, viX, viY, 0, 0); + gdl = textRender(gdl, &textX, &textY, &text, ptrFontBankGothicChars, ptrFontBankGothic, 0xFF00B0, viX, viY, 0, 0); break; case GREEN_HIGHLIGHT: viX = viGetX(); viY = viGetY(); - gdl = textRenderOutlined(gdl, &sp5C, &sp58, &sp48, ptrFontBankGothicChars, ptrFontBankGothic, 0xA0FFA0F0, 0x7000A0, viX, viY, 0, 0); + gdl = textRenderOutlined(gdl, &textX, &textY, &text, ptrFontBankGothicChars, ptrFontBankGothic, 0xA0FFA0F0, 0x7000A0, viX, viY, 0, 0); break; case RED_NORMAL: viX = viGetX(); viY = viGetY(); - gdl = textRender(gdl, &sp5C, &sp58, &sp48, ptrFontBankGothicChars, ptrFontBankGothic, 0xFF4040B0, viX, viY, 0, 0); + gdl = textRender(gdl, &textX, &textY, &text, ptrFontBankGothicChars, ptrFontBankGothic, 0xFF4040B0, viX, viY, 0, 0); break; case RED_HIGHLIGHT: viX = viGetX(); viY = viGetY(); - gdl = textRenderOutlined(gdl, &sp5C, &sp58, &sp48, ptrFontBankGothicChars, ptrFontBankGothic, 0xFFA0A0F0, 0x700000A0, viX, viY, 0, 0); + gdl = textRenderOutlined(gdl, &textX, &textY, &text, ptrFontBankGothicChars, ptrFontBankGothic, 0xFFA0A0F0, 0x700000A0, viX, viY, 0, 0); break; case BLUE_NORMAL: viX = viGetX(); viY = viGetY(); - gdl = textRender(gdl, &sp5C, &sp58, &sp48, ptrFontBankGothicChars, ptrFontBankGothic, 0x4040FFB0, viX, viY, 0, 0); + gdl = textRender(gdl, &textX, &textY, &text, ptrFontBankGothicChars, ptrFontBankGothic, 0x4040FFB0, viX, viY, 0, 0); break; case BLUE_HIGHLIGHT: viX = viGetX(); viY = viGetY(); - gdl = textRenderOutlined(gdl, &sp5C, &sp58, &sp48, ptrFontBankGothicChars, ptrFontBankGothic, 0xA0A0FFF0, 0x70A0, viX, viY, 0, 0); + gdl = textRenderOutlined(gdl, &textX, &textY, &text, ptrFontBankGothicChars, ptrFontBankGothic, 0xA0A0FFF0, 0x70A0, viX, viY, 0, 0); break; } @@ -779,7135 +827,895 @@ const char ascii_pnum_KILLS[] = "%s%d %s"; const char ascii_pnum_LOSSES[] = "%s%d %s"; -#ifdef NONMATCHING -s32 get_points_for_mp_player(s32 arg0) { +s32 get_points_for_mp_player(s32 playernum) +{ + s32 team_or_token; + s32 player_count; + s32 i; + s32 j; + s32 points; + + // The have_token_or_goldengun field is also treated as a team identifier. + team_or_token = g_playerPlayerData[playernum].have_token_or_goldengun; + + player_count = getPlayerCount(); + + points = 0; + + switch (get_scenario()) + { + case SCENARIO_NORMAL: + case SCENARIO_MWTGG: + case SCENARIO_LTK: + for (i = 0; i < player_count; i++) + { + if (i != playernum) + { + points += g_playerPlayerData[playernum].kill_counts[i]; + } + else + { + points -= g_playerPlayerData[i].kill_counts[playernum]; + } + } + + points += g_playerPlayerData[playernum].killed_gg_owner_count * (player_count - 2); + break; + + case SCENARIO_YOLT: + points = MAX_PLAYER_COUNT - g_playerPlayerData[playernum].order_out_in_yolt; + break; + + case SCENARIO_TLD: + points = g_playerPlayerData[playernum].flag_counter; + break; + + case SCENARIO_2v2: + case SCENARIO_3v1: + case SCENARIO_2v1: + for (i = 0; i < player_count; i++) + { + if (g_playerPlayerData[i].have_token_or_goldengun == team_or_token) + { + for (j = 0; j < player_count; j++) + { + if (g_playerPlayerData[j].have_token_or_goldengun != team_or_token) + { + points += g_playerPlayerData[i].kill_counts[j]; + } + else + { + points -= g_playerPlayerData[i].kill_counts[j]; + } + } + } + } + break; + + default: + break; + } + + return points; +} + + +void write_playerrank_to_buffer(char *buffer, s32 playernum) +{ + s32 scenario; + s32 count; + s32 scores[4]; + s32 players[4]; + s32 tmp; + s32 i; + s32 j; + + scenario = get_scenario(); + count = getPlayerCount(); + + for (i = 0; i < count; i++) + { + scores[i] = get_points_for_mp_player(i); + players[i] = i; + } + + for (j = 0; j < count; j++) + { + for (i = 0; i < (count - 1); i++) + { + if (scores[i] < scores[i + 1]) + { + tmp = scores[i + 1]; + scores[i + 1] = scores[i]; + scores[i] = tmp; + tmp = players[i + 1]; + players[i + 1] = players[i]; + players[i] = tmp; + } + } + + } + + for (i = 0; i < count; i++) + { + if (playernum == players[i]) + { + break; + } + } + + for (j = 0; j <= i; j++) + { + if (scores[j] == scores[i]) + { + break; + } + } + + switch (j) + { + case 0: + sprintf(buffer, langGet(getStringID(LMPMENU, MPMENU_STR_11_RANK1ST))); /* Rank: 1st */ + break; + case 1: + sprintf(buffer, langGet(getStringID(LMPMENU, MPMENU_STR_12_RANK2ND))); /* Rank: 2nd */ + break; + case 2: + if ((scenario != SCENARIO_2v2) && (scenario != SCENARIO_2v1)) + { + sprintf(buffer, langGet(getStringID(LMPMENU, MPMENU_STR_13_RANK3RD))); /* Rank: 3rd */ + } + else + { + sprintf(buffer, langGet(getStringID(LMPMENU, MPMENU_STR_12_RANK2ND))); /* Rank: 2nd */ + } + break; + case 3: + if (scenario != SCENARIO_3v1) + { + sprintf(buffer, langGet(getStringID(LMPMENU, MPMENU_STR_14_RANK4TH))); /* Rank: 4th */ + } + else + { + sprintf(buffer, langGet(getStringID(LMPMENU, MPMENU_STR_12_RANK2ND))); /* Rank: 2nd */ + } + break; + } } -#else -GLOBAL_ASM( -.late_rodata -/*D:8005BCA0*/ -glabel jpt_MP_overlays_scoring -.word num_player_kills -.word num_deaths -.word time_with_flag -.word num_player_kills -.word num_player_kills -.word team_player_kills -.word team_player_kills -.word team_player_kills -.size jpt_MP_overlays_scoring, . - jpt_MP_overlays_scoring - -.text -glabel get_points_for_mp_player -/* 0F8408 7F0C38D8 000470C0 */ sll $t6, $a0, 3 -/* 0F840C 7F0C38DC 3C038008 */ lui $v1, %hi(g_playerPlayerData) -/* 0F8410 7F0C38E0 01C47023 */ subu $t6, $t6, $a0 -/* 0F8414 7F0C38E4 24639EF0 */ addiu $v1, %lo(g_playerPlayerData) # addiu $v1, $v1, -0x6110 -/* 0F8418 7F0C38E8 000E7100 */ sll $t6, $t6, 4 -/* 0F841C 7F0C38EC 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0F8420 7F0C38F0 006E5821 */ addu $t3, $v1, $t6 -/* 0F8424 7F0C38F4 91670069 */ lbu $a3, 0x69($t3) -/* 0F8428 7F0C38F8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0F842C 7F0C38FC AFAB0018 */ sw $t3, 0x18($sp) -/* 0F8430 7F0C3900 AFA40038 */ sw $a0, 0x38($sp) -/* 0F8434 7F0C3904 0FC26919 */ jal getPlayerCount -/* 0F8438 7F0C3908 AFA70034 */ sw $a3, 0x34($sp) -/* 0F843C 7F0C390C AFA00024 */ sw $zero, 0x24($sp) -/* 0F8440 7F0C3910 0FC051D6 */ jal get_scenario -/* 0F8444 7F0C3914 AFA20030 */ sw $v0, 0x30($sp) -/* 0F8448 7F0C3918 3C038008 */ lui $v1, %hi(g_playerPlayerData) -/* 0F844C 7F0C391C 2C410008 */ sltiu $at, $v0, 8 -/* 0F8450 7F0C3920 24639EF0 */ addiu $v1, %lo(g_playerPlayerData) # addiu $v1, $v1, -0x6110 -/* 0F8454 7F0C3924 8FA40024 */ lw $a0, 0x24($sp) -/* 0F8458 7F0C3928 8FA50038 */ lw $a1, 0x38($sp) -/* 0F845C 7F0C392C 8FA70034 */ lw $a3, 0x34($sp) -/* 0F8460 7F0C3930 8FAA0030 */ lw $t2, 0x30($sp) -/* 0F8464 7F0C3934 102000D2 */ beqz $at, .L7F0C3C80 -/* 0F8468 7F0C3938 8FAB0018 */ lw $t3, 0x18($sp) -/* 0F846C 7F0C393C 00027880 */ sll $t7, $v0, 2 -/* 0F8470 7F0C3940 3C018006 */ lui $at, %hi(jpt_MP_overlays_scoring) -/* 0F8474 7F0C3944 002F0821 */ addu $at, $at, $t7 -/* 0F8478 7F0C3948 8C2FBCA0 */ lw $t7, %lo(jpt_MP_overlays_scoring)($at) -/* 0F847C 7F0C394C 01E00008 */ jr $t7 -/* 0F8480 7F0C3950 00000000 */ nop -num_player_kills: -/* 0F8484 7F0C3954 19400068 */ blez $t2, .L7F0C3AF8 -/* 0F8488 7F0C3958 00004825 */ move $t1, $zero -/* 0F848C 7F0C395C 31480003 */ andi $t0, $t2, 3 -/* 0F8490 7F0C3960 11000017 */ beqz $t0, .L7F0C39C0 -/* 0F8494 7F0C3964 01001025 */ move $v0, $t0 -.L7F0C3968: -/* 0F8498 7F0C3968 1125000A */ beq $t1, $a1, .L7F0C3994 -/* 0F849C 7F0C396C 0009C0C0 */ sll $t8, $t1, 3 -/* 0F84A0 7F0C3970 0005C0C0 */ sll $t8, $a1, 3 -/* 0F84A4 7F0C3974 0305C023 */ subu $t8, $t8, $a1 -/* 0F84A8 7F0C3978 0018C100 */ sll $t8, $t8, 4 -/* 0F84AC 7F0C397C 0078C821 */ addu $t9, $v1, $t8 -/* 0F84B0 7F0C3980 00096880 */ sll $t5, $t1, 2 -/* 0F84B4 7F0C3984 032D7021 */ addu $t6, $t9, $t5 -/* 0F84B8 7F0C3988 8DCF0024 */ lw $t7, 0x24($t6) -/* 0F84BC 7F0C398C 10000008 */ b .L7F0C39B0 -/* 0F84C0 7F0C3990 008F2021 */ addu $a0, $a0, $t7 -.L7F0C3994: -/* 0F84C4 7F0C3994 0309C023 */ subu $t8, $t8, $t1 -/* 0F84C8 7F0C3998 0018C100 */ sll $t8, $t8, 4 -/* 0F84CC 7F0C399C 0078C821 */ addu $t9, $v1, $t8 -/* 0F84D0 7F0C39A0 00056880 */ sll $t5, $a1, 2 -/* 0F84D4 7F0C39A4 032D7021 */ addu $t6, $t9, $t5 -/* 0F84D8 7F0C39A8 8DCF0024 */ lw $t7, 0x24($t6) -/* 0F84DC 7F0C39AC 008F2023 */ subu $a0, $a0, $t7 -.L7F0C39B0: -/* 0F84E0 7F0C39B0 25290001 */ addiu $t1, $t1, 1 -/* 0F84E4 7F0C39B4 1449FFEC */ bne $v0, $t1, .L7F0C3968 -/* 0F84E8 7F0C39B8 00000000 */ nop -/* 0F84EC 7F0C39BC 112A004E */ beq $t1, $t2, .L7F0C3AF8 -.L7F0C39C0: -/* 0F84F0 7F0C39C0 24A2FFFF */ addiu $v0, $a1, -1 -/* 0F84F4 7F0C39C4 24A6FFFE */ addiu $a2, $a1, -2 -/* 0F84F8 7F0C39C8 24A7FFFD */ addiu $a3, $a1, -3 -.L7F0C39CC: -/* 0F84FC 7F0C39CC 1125000A */ beq $t1, $a1, .L7F0C39F8 -/* 0F8500 7F0C39D0 0009C0C0 */ sll $t8, $t1, 3 -/* 0F8504 7F0C39D4 0005C0C0 */ sll $t8, $a1, 3 -/* 0F8508 7F0C39D8 0305C023 */ subu $t8, $t8, $a1 -/* 0F850C 7F0C39DC 0018C100 */ sll $t8, $t8, 4 -/* 0F8510 7F0C39E0 0078C821 */ addu $t9, $v1, $t8 -/* 0F8514 7F0C39E4 00096880 */ sll $t5, $t1, 2 -/* 0F8518 7F0C39E8 032D7021 */ addu $t6, $t9, $t5 -/* 0F851C 7F0C39EC 8DCF0024 */ lw $t7, 0x24($t6) -/* 0F8520 7F0C39F0 10000008 */ b .L7F0C3A14 -/* 0F8524 7F0C39F4 008F2021 */ addu $a0, $a0, $t7 -.L7F0C39F8: -/* 0F8528 7F0C39F8 0309C023 */ subu $t8, $t8, $t1 -/* 0F852C 7F0C39FC 0018C100 */ sll $t8, $t8, 4 -/* 0F8530 7F0C3A00 0078C821 */ addu $t9, $v1, $t8 -/* 0F8534 7F0C3A04 00056880 */ sll $t5, $a1, 2 -/* 0F8538 7F0C3A08 032D7021 */ addu $t6, $t9, $t5 -/* 0F853C 7F0C3A0C 8DCF0024 */ lw $t7, 0x24($t6) -/* 0F8540 7F0C3A10 008F2023 */ subu $a0, $a0, $t7 -.L7F0C3A14: -/* 0F8544 7F0C3A14 1122000A */ beq $t1, $v0, .L7F0C3A40 -/* 0F8548 7F0C3A18 0009C0C0 */ sll $t8, $t1, 3 -/* 0F854C 7F0C3A1C 0005C0C0 */ sll $t8, $a1, 3 -/* 0F8550 7F0C3A20 0305C023 */ subu $t8, $t8, $a1 -/* 0F8554 7F0C3A24 0018C100 */ sll $t8, $t8, 4 -/* 0F8558 7F0C3A28 0078C821 */ addu $t9, $v1, $t8 -/* 0F855C 7F0C3A2C 00096880 */ sll $t5, $t1, 2 -/* 0F8560 7F0C3A30 032D7021 */ addu $t6, $t9, $t5 -/* 0F8564 7F0C3A34 8DCF0028 */ lw $t7, 0x28($t6) -/* 0F8568 7F0C3A38 10000008 */ b .L7F0C3A5C -/* 0F856C 7F0C3A3C 008F2021 */ addu $a0, $a0, $t7 -.L7F0C3A40: -/* 0F8570 7F0C3A40 0309C023 */ subu $t8, $t8, $t1 -/* 0F8574 7F0C3A44 0018C100 */ sll $t8, $t8, 4 -/* 0F8578 7F0C3A48 0078C821 */ addu $t9, $v1, $t8 -/* 0F857C 7F0C3A4C 00056880 */ sll $t5, $a1, 2 -/* 0F8580 7F0C3A50 032D7021 */ addu $t6, $t9, $t5 -/* 0F8584 7F0C3A54 8DCF0094 */ lw $t7, 0x94($t6) -/* 0F8588 7F0C3A58 008F2023 */ subu $a0, $a0, $t7 -.L7F0C3A5C: -/* 0F858C 7F0C3A5C 1126000A */ beq $t1, $a2, .L7F0C3A88 -/* 0F8590 7F0C3A60 0009C0C0 */ sll $t8, $t1, 3 -/* 0F8594 7F0C3A64 0005C0C0 */ sll $t8, $a1, 3 -/* 0F8598 7F0C3A68 0305C023 */ subu $t8, $t8, $a1 -/* 0F859C 7F0C3A6C 0018C100 */ sll $t8, $t8, 4 -/* 0F85A0 7F0C3A70 0078C821 */ addu $t9, $v1, $t8 -/* 0F85A4 7F0C3A74 00096880 */ sll $t5, $t1, 2 -/* 0F85A8 7F0C3A78 032D7021 */ addu $t6, $t9, $t5 -/* 0F85AC 7F0C3A7C 8DCF002C */ lw $t7, 0x2c($t6) -/* 0F85B0 7F0C3A80 10000008 */ b .L7F0C3AA4 -/* 0F85B4 7F0C3A84 008F2021 */ addu $a0, $a0, $t7 -.L7F0C3A88: -/* 0F85B8 7F0C3A88 0309C023 */ subu $t8, $t8, $t1 -/* 0F85BC 7F0C3A8C 0018C100 */ sll $t8, $t8, 4 -/* 0F85C0 7F0C3A90 0078C821 */ addu $t9, $v1, $t8 -/* 0F85C4 7F0C3A94 00056880 */ sll $t5, $a1, 2 -/* 0F85C8 7F0C3A98 032D7021 */ addu $t6, $t9, $t5 -/* 0F85CC 7F0C3A9C 8DCF0104 */ lw $t7, 0x104($t6) -/* 0F85D0 7F0C3AA0 008F2023 */ subu $a0, $a0, $t7 -.L7F0C3AA4: -/* 0F85D4 7F0C3AA4 1127000A */ beq $t1, $a3, .L7F0C3AD0 -/* 0F85D8 7F0C3AA8 0009C0C0 */ sll $t8, $t1, 3 -/* 0F85DC 7F0C3AAC 0005C0C0 */ sll $t8, $a1, 3 -/* 0F85E0 7F0C3AB0 0305C023 */ subu $t8, $t8, $a1 -/* 0F85E4 7F0C3AB4 0018C100 */ sll $t8, $t8, 4 -/* 0F85E8 7F0C3AB8 0078C821 */ addu $t9, $v1, $t8 -/* 0F85EC 7F0C3ABC 00096880 */ sll $t5, $t1, 2 -/* 0F85F0 7F0C3AC0 032D7021 */ addu $t6, $t9, $t5 -/* 0F85F4 7F0C3AC4 8DCF0030 */ lw $t7, 0x30($t6) -/* 0F85F8 7F0C3AC8 10000008 */ b .L7F0C3AEC -/* 0F85FC 7F0C3ACC 008F2021 */ addu $a0, $a0, $t7 -.L7F0C3AD0: -/* 0F8600 7F0C3AD0 0309C023 */ subu $t8, $t8, $t1 -/* 0F8604 7F0C3AD4 0018C100 */ sll $t8, $t8, 4 -/* 0F8608 7F0C3AD8 0078C821 */ addu $t9, $v1, $t8 -/* 0F860C 7F0C3ADC 00056880 */ sll $t5, $a1, 2 -/* 0F8610 7F0C3AE0 032D7021 */ addu $t6, $t9, $t5 -/* 0F8614 7F0C3AE4 8DCF0174 */ lw $t7, 0x174($t6) -/* 0F8618 7F0C3AE8 008F2023 */ subu $a0, $a0, $t7 -.L7F0C3AEC: -/* 0F861C 7F0C3AEC 25290004 */ addiu $t1, $t1, 4 -/* 0F8620 7F0C3AF0 152AFFB6 */ bne $t1, $t2, .L7F0C39CC -/* 0F8624 7F0C3AF4 00000000 */ nop -.L7F0C3AF8: -/* 0F8628 7F0C3AF8 8D780020 */ lw $t8, 0x20($t3) -/* 0F862C 7F0C3AFC 2559FFFE */ addiu $t9, $t2, -2 -/* 0F8630 7F0C3B00 03190019 */ multu $t8, $t9 -/* 0F8634 7F0C3B04 00006812 */ mflo $t5 -/* 0F8638 7F0C3B08 008D2021 */ addu $a0, $a0, $t5 -/* 0F863C 7F0C3B0C 1000005D */ b .L7F0C3C84 -/* 0F8640 7F0C3B10 8FBF0014 */ lw $ra, 0x14($sp) -num_deaths: -/* 0F8644 7F0C3B14 916E0068 */ lbu $t6, 0x68($t3) -/* 0F8648 7F0C3B18 240F0004 */ li $t7, 4 -/* 0F864C 7F0C3B1C 10000058 */ b .L7F0C3C80 -/* 0F8650 7F0C3B20 01EE2023 */ subu $a0, $t7, $t6 -time_with_flag: -/* 0F8654 7F0C3B24 10000056 */ b .L7F0C3C80 -/* 0F8658 7F0C3B28 8D640060 */ lw $a0, 0x60($t3) -team_player_kills: -/* 0F865C 7F0C3B2C 19400054 */ blez $t2, .L7F0C3C80 -/* 0F8660 7F0C3B30 00004825 */ move $t1, $zero -/* 0F8664 7F0C3B34 3C0C8008 */ lui $t4, %hi(g_playerPlayerData) -/* 0F8668 7F0C3B38 258C9EF0 */ addiu $t4, %lo(g_playerPlayerData) # addiu $t4, $t4, -0x6110 -.L7F0C3B3C: -/* 0F866C 7F0C3B3C 91980069 */ lbu $t8, 0x69($t4) -/* 0F8670 7F0C3B40 54F8004D */ bnel $a3, $t8, .L7F0C3C78 -/* 0F8674 7F0C3B44 25290001 */ addiu $t1, $t1, 1 -/* 0F8678 7F0C3B48 1940004A */ blez $t2, .L7F0C3C74 -/* 0F867C 7F0C3B4C 00002825 */ move $a1, $zero -/* 0F8680 7F0C3B50 0009C8C0 */ sll $t9, $t1, 3 -/* 0F8684 7F0C3B54 0329C823 */ subu $t9, $t9, $t1 -/* 0F8688 7F0C3B58 3C0D8008 */ lui $t5, %hi(g_playerPlayerData) -/* 0F868C 7F0C3B5C 25AD9EF0 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x6110 -/* 0F8690 7F0C3B60 0019C900 */ sll $t9, $t9, 4 -/* 0F8694 7F0C3B64 31480003 */ andi $t0, $t2, 3 -/* 0F8698 7F0C3B68 11000015 */ beqz $t0, .L7F0C3BC0 -/* 0F869C 7F0C3B6C 032D5821 */ addu $t3, $t9, $t5 -/* 0F86A0 7F0C3B70 000078C0 */ sll $t7, $zero, 3 -/* 0F86A4 7F0C3B74 01E07823 */ subu $t7, $t7, $zero -/* 0F86A8 7F0C3B78 000F7900 */ sll $t7, $t7, 4 -/* 0F86AC 7F0C3B7C 00007080 */ sll $t6, $zero, 2 -/* 0F86B0 7F0C3B80 016E1021 */ addu $v0, $t3, $t6 -/* 0F86B4 7F0C3B84 01ED1821 */ addu $v1, $t7, $t5 -/* 0F86B8 7F0C3B88 01003025 */ move $a2, $t0 -.L7F0C3B8C: -/* 0F86BC 7F0C3B8C 90780069 */ lbu $t8, 0x69($v1) -/* 0F86C0 7F0C3B90 24A50001 */ addiu $a1, $a1, 1 -/* 0F86C4 7F0C3B94 24630070 */ addiu $v1, $v1, 0x70 -/* 0F86C8 7F0C3B98 50F80005 */ beql $a3, $t8, .L7F0C3BB0 -/* 0F86CC 7F0C3B9C 8C4F0024 */ lw $t7, 0x24($v0) -/* 0F86D0 7F0C3BA0 8C590024 */ lw $t9, 0x24($v0) -/* 0F86D4 7F0C3BA4 10000003 */ b .L7F0C3BB4 -/* 0F86D8 7F0C3BA8 00992021 */ addu $a0, $a0, $t9 -/* 0F86DC 7F0C3BAC 8C4F0024 */ lw $t7, 0x24($v0) -.L7F0C3BB0: -/* 0F86E0 7F0C3BB0 008F2023 */ subu $a0, $a0, $t7 -.L7F0C3BB4: -/* 0F86E4 7F0C3BB4 14C5FFF5 */ bne $a2, $a1, .L7F0C3B8C -/* 0F86E8 7F0C3BB8 24420004 */ addiu $v0, $v0, 4 -/* 0F86EC 7F0C3BBC 10AA002D */ beq $a1, $t2, .L7F0C3C74 -.L7F0C3BC0: -/* 0F86F0 7F0C3BC0 000568C0 */ sll $t5, $a1, 3 -/* 0F86F4 7F0C3BC4 01A56823 */ subu $t5, $t5, $a1 -/* 0F86F8 7F0C3BC8 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) -/* 0F86FC 7F0C3BCC 25CE9EF0 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x6110 -/* 0F8700 7F0C3BD0 000D6900 */ sll $t5, $t5, 4 -/* 0F8704 7F0C3BD4 00053080 */ sll $a2, $a1, 2 -/* 0F8708 7F0C3BD8 01661021 */ addu $v0, $t3, $a2 -/* 0F870C 7F0C3BDC 01AE1821 */ addu $v1, $t5, $t6 -/* 0F8710 7F0C3BE0 000A4080 */ sll $t0, $t2, 2 -.L7F0C3BE4: -/* 0F8714 7F0C3BE4 90780069 */ lbu $t8, 0x69($v1) -/* 0F8718 7F0C3BE8 24C60010 */ addiu $a2, $a2, 0x10 -/* 0F871C 7F0C3BEC 50F80005 */ beql $a3, $t8, .L7F0C3C04 -/* 0F8720 7F0C3BF0 8C4F0024 */ lw $t7, 0x24($v0) -/* 0F8724 7F0C3BF4 8C590024 */ lw $t9, 0x24($v0) -/* 0F8728 7F0C3BF8 10000003 */ b .L7F0C3C08 -/* 0F872C 7F0C3BFC 00992021 */ addu $a0, $a0, $t9 -/* 0F8730 7F0C3C00 8C4F0024 */ lw $t7, 0x24($v0) -.L7F0C3C04: -/* 0F8734 7F0C3C04 008F2023 */ subu $a0, $a0, $t7 -.L7F0C3C08: -/* 0F8738 7F0C3C08 906D00D9 */ lbu $t5, 0xd9($v1) -/* 0F873C 7F0C3C0C 50ED0005 */ beql $a3, $t5, .L7F0C3C24 -/* 0F8740 7F0C3C10 8C580028 */ lw $t8, 0x28($v0) -/* 0F8744 7F0C3C14 8C4E0028 */ lw $t6, 0x28($v0) -/* 0F8748 7F0C3C18 10000003 */ b .L7F0C3C28 -/* 0F874C 7F0C3C1C 008E2021 */ addu $a0, $a0, $t6 -/* 0F8750 7F0C3C20 8C580028 */ lw $t8, 0x28($v0) -.L7F0C3C24: -/* 0F8754 7F0C3C24 00982023 */ subu $a0, $a0, $t8 -.L7F0C3C28: -/* 0F8758 7F0C3C28 90790149 */ lbu $t9, 0x149($v1) -/* 0F875C 7F0C3C2C 50F90005 */ beql $a3, $t9, .L7F0C3C44 -/* 0F8760 7F0C3C30 8C4D002C */ lw $t5, 0x2c($v0) -/* 0F8764 7F0C3C34 8C4F002C */ lw $t7, 0x2c($v0) -/* 0F8768 7F0C3C38 10000003 */ b .L7F0C3C48 -/* 0F876C 7F0C3C3C 008F2021 */ addu $a0, $a0, $t7 -/* 0F8770 7F0C3C40 8C4D002C */ lw $t5, 0x2c($v0) -.L7F0C3C44: -/* 0F8774 7F0C3C44 008D2023 */ subu $a0, $a0, $t5 -.L7F0C3C48: -/* 0F8778 7F0C3C48 906E01B9 */ lbu $t6, 0x1b9($v1) -/* 0F877C 7F0C3C4C 246301C0 */ addiu $v1, $v1, 0x1c0 -/* 0F8780 7F0C3C50 50EE0005 */ beql $a3, $t6, .L7F0C3C68 -/* 0F8784 7F0C3C54 8C590030 */ lw $t9, 0x30($v0) -/* 0F8788 7F0C3C58 8C580030 */ lw $t8, 0x30($v0) -/* 0F878C 7F0C3C5C 10000003 */ b .L7F0C3C6C -/* 0F8790 7F0C3C60 00982021 */ addu $a0, $a0, $t8 -/* 0F8794 7F0C3C64 8C590030 */ lw $t9, 0x30($v0) -.L7F0C3C68: -/* 0F8798 7F0C3C68 00992023 */ subu $a0, $a0, $t9 -.L7F0C3C6C: -/* 0F879C 7F0C3C6C 14C8FFDD */ bne $a2, $t0, .L7F0C3BE4 -/* 0F87A0 7F0C3C70 24420010 */ addiu $v0, $v0, 0x10 -.L7F0C3C74: -/* 0F87A4 7F0C3C74 25290001 */ addiu $t1, $t1, 1 -.L7F0C3C78: -/* 0F87A8 7F0C3C78 152AFFB0 */ bne $t1, $t2, .L7F0C3B3C -/* 0F87AC 7F0C3C7C 258C0070 */ addiu $t4, $t4, 0x70 -.L7F0C3C80: -/* 0F87B0 7F0C3C80 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C3C84: -/* 0F87B4 7F0C3C84 27BD0038 */ addiu $sp, $sp, 0x38 -/* 0F87B8 7F0C3C88 00801025 */ move $v0, $a0 -/* 0F87BC 7F0C3C8C 03E00008 */ jr $ra -/* 0F87C0 7F0C3C90 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void write_playerrank_to_buffer(void) { - -} -#else -GLOBAL_ASM( -.text -glabel write_playerrank_to_buffer -/* 0F87C4 7F0C3C94 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 0F87C8 7F0C3C98 AFBF001C */ sw $ra, 0x1c($sp) -/* 0F87CC 7F0C3C9C AFB00018 */ sw $s0, 0x18($sp) -/* 0F87D0 7F0C3CA0 AFA40080 */ sw $a0, 0x80($sp) -/* 0F87D4 7F0C3CA4 0FC051D6 */ jal get_scenario -/* 0F87D8 7F0C3CA8 AFA50084 */ sw $a1, 0x84($sp) -/* 0F87DC 7F0C3CAC 0FC26919 */ jal getPlayerCount -/* 0F87E0 7F0C3CB0 AFA2007C */ sw $v0, 0x7c($sp) -/* 0F87E4 7F0C3CB4 00405825 */ move $t3, $v0 -/* 0F87E8 7F0C3CB8 18400013 */ blez $v0, .L7F0C3D08 -/* 0F87EC 7F0C3CBC 00008025 */ move $s0, $zero -/* 0F87F0 7F0C3CC0 27A30068 */ addiu $v1, $sp, 0x68 -/* 0F87F4 7F0C3CC4 27A50058 */ addiu $a1, $sp, 0x58 -.L7F0C3CC8: -/* 0F87F8 7F0C3CC8 02002025 */ move $a0, $s0 -/* 0F87FC 7F0C3CCC AFA30038 */ sw $v1, 0x38($sp) -/* 0F8800 7F0C3CD0 AFA5003C */ sw $a1, 0x3c($sp) -/* 0F8804 7F0C3CD4 0FC30E36 */ jal get_points_for_mp_player -/* 0F8808 7F0C3CD8 AFAB0078 */ sw $t3, 0x78($sp) -/* 0F880C 7F0C3CDC 8FA5003C */ lw $a1, 0x3c($sp) -/* 0F8810 7F0C3CE0 8FAB0078 */ lw $t3, 0x78($sp) -/* 0F8814 7F0C3CE4 8FA30038 */ lw $v1, 0x38($sp) -/* 0F8818 7F0C3CE8 ACB00000 */ sw $s0, ($a1) -/* 0F881C 7F0C3CEC 26100001 */ addiu $s0, $s0, 1 -/* 0F8820 7F0C3CF0 020B082A */ slt $at, $s0, $t3 -/* 0F8824 7F0C3CF4 24A50004 */ addiu $a1, $a1, 4 -/* 0F8828 7F0C3CF8 24630004 */ addiu $v1, $v1, 4 -/* 0F882C 7F0C3CFC 1420FFF2 */ bnez $at, .L7F0C3CC8 -/* 0F8830 7F0C3D00 AC62FFFC */ sw $v0, -4($v1) -/* 0F8834 7F0C3D04 00008025 */ move $s0, $zero -.L7F0C3D08: -/* 0F8838 7F0C3D08 1960003F */ blez $t3, .L7F0C3E08 -/* 0F883C 7F0C3D0C 00005025 */ move $t2, $zero -/* 0F8840 7F0C3D10 256CFFFF */ addiu $t4, $t3, -1 -/* 0F8844 7F0C3D14 27A80058 */ addiu $t0, $sp, 0x58 -/* 0F8848 7F0C3D18 8FA50068 */ lw $a1, 0x68($sp) -/* 0F884C 7F0C3D1C 8FA4006C */ lw $a0, 0x6c($sp) -.L7F0C3D20: -/* 0F8850 7F0C3D20 19800034 */ blez $t4, .L7F0C3DF4 -/* 0F8854 7F0C3D24 254A0001 */ addiu $t2, $t2, 1 -/* 0F8858 7F0C3D28 2562FFFF */ addiu $v0, $t3, -1 -/* 0F885C 7F0C3D2C 304E0001 */ andi $t6, $v0, 1 -/* 0F8860 7F0C3D30 11C0000B */ beqz $t6, .L7F0C3D60 -/* 0F8864 7F0C3D34 00A4082A */ slt $at, $a1, $a0 -/* 0F8868 7F0C3D38 10200008 */ beqz $at, .L7F0C3D5C -/* 0F886C 7F0C3D3C 24100001 */ li $s0, 1 -/* 0F8870 7F0C3D40 00801025 */ move $v0, $a0 -/* 0F8874 7F0C3D44 00A02025 */ move $a0, $a1 -/* 0F8878 7F0C3D48 00402825 */ move $a1, $v0 -/* 0F887C 7F0C3D4C 8FA2005C */ lw $v0, 0x5c($sp) -/* 0F8880 7F0C3D50 8FAF0058 */ lw $t7, 0x58($sp) -/* 0F8884 7F0C3D54 AFA20058 */ sw $v0, 0x58($sp) -/* 0F8888 7F0C3D58 AFAF005C */ sw $t7, 0x5c($sp) -.L7F0C3D5C: -/* 0F888C 7F0C3D5C 120C0024 */ beq $s0, $t4, .L7F0C3DF0 -.L7F0C3D60: -/* 0F8890 7F0C3D60 27B80068 */ addiu $t8, $sp, 0x68 -/* 0F8894 7F0C3D64 00103880 */ sll $a3, $s0, 2 -/* 0F8898 7F0C3D68 000CC880 */ sll $t9, $t4, 2 -/* 0F889C 7F0C3D6C 03384821 */ addu $t1, $t9, $t8 -/* 0F88A0 7F0C3D70 00F81821 */ addu $v1, $a3, $t8 -/* 0F88A4 7F0C3D74 AFA4006C */ sw $a0, 0x6c($sp) -/* 0F88A8 7F0C3D78 AFA50068 */ sw $a1, 0x68($sp) -.L7F0C3D7C: -/* 0F88AC 7F0C3D7C 8C660000 */ lw $a2, ($v1) -/* 0F88B0 7F0C3D80 8C640004 */ lw $a0, 4($v1) -/* 0F88B4 7F0C3D84 01072821 */ addu $a1, $t0, $a3 -/* 0F88B8 7F0C3D88 00C4082A */ slt $at, $a2, $a0 -/* 0F88BC 7F0C3D8C 50200009 */ beql $at, $zero, .L7F0C3DB4 -/* 0F88C0 7F0C3D90 8C660008 */ lw $a2, 8($v1) -/* 0F88C4 7F0C3D94 8CA20004 */ lw $v0, 4($a1) -/* 0F88C8 7F0C3D98 8CAD0000 */ lw $t5, ($a1) -/* 0F88CC 7F0C3D9C AC640000 */ sw $a0, ($v1) -/* 0F88D0 7F0C3DA0 AC660004 */ sw $a2, 4($v1) -/* 0F88D4 7F0C3DA4 00C02025 */ move $a0, $a2 -/* 0F88D8 7F0C3DA8 ACA20000 */ sw $v0, ($a1) -/* 0F88DC 7F0C3DAC ACAD0004 */ sw $t5, 4($a1) -/* 0F88E0 7F0C3DB0 8C660008 */ lw $a2, 8($v1) -.L7F0C3DB4: -/* 0F88E4 7F0C3DB4 01072821 */ addu $a1, $t0, $a3 -/* 0F88E8 7F0C3DB8 0086082A */ slt $at, $a0, $a2 -/* 0F88EC 7F0C3DBC 50200008 */ beql $at, $zero, .L7F0C3DE0 -/* 0F88F0 7F0C3DC0 24630008 */ addiu $v1, $v1, 8 -/* 0F88F4 7F0C3DC4 8CA20008 */ lw $v0, 8($a1) -/* 0F88F8 7F0C3DC8 8CAE0004 */ lw $t6, 4($a1) -/* 0F88FC 7F0C3DCC AC640008 */ sw $a0, 8($v1) -/* 0F8900 7F0C3DD0 AC660004 */ sw $a2, 4($v1) -/* 0F8904 7F0C3DD4 ACA20004 */ sw $v0, 4($a1) -/* 0F8908 7F0C3DD8 ACAE0008 */ sw $t6, 8($a1) -/* 0F890C 7F0C3DDC 24630008 */ addiu $v1, $v1, 8 -.L7F0C3DE0: -/* 0F8910 7F0C3DE0 8FA4006C */ lw $a0, 0x6c($sp) -/* 0F8914 7F0C3DE4 8FA50068 */ lw $a1, 0x68($sp) -/* 0F8918 7F0C3DE8 1469FFE4 */ bne $v1, $t1, .L7F0C3D7C -/* 0F891C 7F0C3DEC 24E70008 */ addiu $a3, $a3, 8 -.L7F0C3DF0: -/* 0F8920 7F0C3DF0 00008025 */ move $s0, $zero -.L7F0C3DF4: -/* 0F8924 7F0C3DF4 154BFFCA */ bne $t2, $t3, .L7F0C3D20 -/* 0F8928 7F0C3DF8 00000000 */ nop -/* 0F892C 7F0C3DFC AFA50068 */ sw $a1, 0x68($sp) -/* 0F8930 7F0C3E00 AFA4006C */ sw $a0, 0x6c($sp) -/* 0F8934 7F0C3E04 00005025 */ move $t2, $zero -.L7F0C3E08: -/* 0F8938 7F0C3E08 19600008 */ blez $t3, .L7F0C3E2C -/* 0F893C 7F0C3E0C 27A50058 */ addiu $a1, $sp, 0x58 -/* 0F8940 7F0C3E10 8FA20084 */ lw $v0, 0x84($sp) -.L7F0C3E14: -/* 0F8944 7F0C3E14 8CAF0000 */ lw $t7, ($a1) -/* 0F8948 7F0C3E18 104F0004 */ beq $v0, $t7, .L7F0C3E2C -/* 0F894C 7F0C3E1C 00000000 */ nop -/* 0F8950 7F0C3E20 26100001 */ addiu $s0, $s0, 1 -/* 0F8954 7F0C3E24 160BFFFB */ bne $s0, $t3, .L7F0C3E14 -/* 0F8958 7F0C3E28 24A50004 */ addiu $a1, $a1, 4 -.L7F0C3E2C: -/* 0F895C 7F0C3E2C 0600000B */ bltz $s0, .L7F0C3E5C -/* 0F8960 7F0C3E30 0010C880 */ sll $t9, $s0, 2 -/* 0F8964 7F0C3E34 27A20068 */ addiu $v0, $sp, 0x68 -/* 0F8968 7F0C3E38 03226821 */ addu $t5, $t9, $v0 -/* 0F896C 7F0C3E3C 8DA60000 */ lw $a2, ($t5) -.L7F0C3E40: -/* 0F8970 7F0C3E40 8C4E0000 */ lw $t6, ($v0) -/* 0F8974 7F0C3E44 260F0001 */ addiu $t7, $s0, 1 -/* 0F8978 7F0C3E48 11C60004 */ beq $t6, $a2, .L7F0C3E5C -/* 0F897C 7F0C3E4C 00000000 */ nop -/* 0F8980 7F0C3E50 254A0001 */ addiu $t2, $t2, 1 -/* 0F8984 7F0C3E54 15EAFFFA */ bne $t7, $t2, .L7F0C3E40 -/* 0F8988 7F0C3E58 24420004 */ addiu $v0, $v0, 4 -.L7F0C3E5C: -/* 0F898C 7F0C3E5C 1140000A */ beqz $t2, .L7F0C3E88 -/* 0F8990 7F0C3E60 24010001 */ li $at, 1 -/* 0F8994 7F0C3E64 1141000F */ beq $t2, $at, .L7F0C3EA4 -/* 0F8998 7F0C3E68 24010002 */ li $at, 2 -/* 0F899C 7F0C3E6C 11410014 */ beq $t2, $at, .L7F0C3EC0 -/* 0F89A0 7F0C3E70 8FA2007C */ lw $v0, 0x7c($sp) -/* 0F89A4 7F0C3E74 24010003 */ li $at, 3 -/* 0F89A8 7F0C3E78 11410024 */ beq $t2, $at, .L7F0C3F0C -/* 0F89AC 7F0C3E7C 8FB9007C */ lw $t9, 0x7c($sp) -/* 0F89B0 7F0C3E80 10000032 */ b .L7F0C3F4C -/* 0F89B4 7F0C3E84 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0C3E88: -/* 0F89B8 7F0C3E88 0FC30776 */ jal langGet -/* 0F89BC 7F0C3E8C 3404A011 */ li $a0, 40977 -/* 0F89C0 7F0C3E90 8FA40080 */ lw $a0, 0x80($sp) -/* 0F89C4 7F0C3E94 0C002B25 */ jal sprintf -/* 0F89C8 7F0C3E98 00402825 */ move $a1, $v0 -/* 0F89CC 7F0C3E9C 1000002B */ b .L7F0C3F4C -/* 0F89D0 7F0C3EA0 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0C3EA4: -/* 0F89D4 7F0C3EA4 0FC30776 */ jal langGet -/* 0F89D8 7F0C3EA8 3404A012 */ li $a0, 40978 -/* 0F89DC 7F0C3EAC 8FA40080 */ lw $a0, 0x80($sp) -/* 0F89E0 7F0C3EB0 0C002B25 */ jal sprintf -/* 0F89E4 7F0C3EB4 00402825 */ move $a1, $v0 -/* 0F89E8 7F0C3EB8 10000024 */ b .L7F0C3F4C -/* 0F89EC 7F0C3EBC 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0C3EC0: -/* 0F89F0 7F0C3EC0 24010005 */ li $at, 5 -/* 0F89F4 7F0C3EC4 1041000A */ beq $v0, $at, .L7F0C3EF0 -/* 0F89F8 7F0C3EC8 24010007 */ li $at, 7 -/* 0F89FC 7F0C3ECC 10410008 */ beq $v0, $at, .L7F0C3EF0 -/* 0F8A00 7F0C3ED0 00000000 */ nop -/* 0F8A04 7F0C3ED4 0FC30776 */ jal langGet -/* 0F8A08 7F0C3ED8 3404A013 */ li $a0, 40979 -/* 0F8A0C 7F0C3EDC 8FA40080 */ lw $a0, 0x80($sp) -/* 0F8A10 7F0C3EE0 0C002B25 */ jal sprintf -/* 0F8A14 7F0C3EE4 00402825 */ move $a1, $v0 -/* 0F8A18 7F0C3EE8 10000018 */ b .L7F0C3F4C -/* 0F8A1C 7F0C3EEC 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0C3EF0: -/* 0F8A20 7F0C3EF0 0FC30776 */ jal langGet -/* 0F8A24 7F0C3EF4 3404A012 */ li $a0, 40978 -/* 0F8A28 7F0C3EF8 8FA40080 */ lw $a0, 0x80($sp) -/* 0F8A2C 7F0C3EFC 0C002B25 */ jal sprintf -/* 0F8A30 7F0C3F00 00402825 */ move $a1, $v0 -/* 0F8A34 7F0C3F04 10000011 */ b .L7F0C3F4C -/* 0F8A38 7F0C3F08 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0C3F0C: -/* 0F8A3C 7F0C3F0C 24010006 */ li $at, 6 -/* 0F8A40 7F0C3F10 13210008 */ beq $t9, $at, .L7F0C3F34 -/* 0F8A44 7F0C3F14 00000000 */ nop -/* 0F8A48 7F0C3F18 0FC30776 */ jal langGet -/* 0F8A4C 7F0C3F1C 3404A014 */ li $a0, 40980 -/* 0F8A50 7F0C3F20 8FA40080 */ lw $a0, 0x80($sp) -/* 0F8A54 7F0C3F24 0C002B25 */ jal sprintf -/* 0F8A58 7F0C3F28 00402825 */ move $a1, $v0 -/* 0F8A5C 7F0C3F2C 10000007 */ b .L7F0C3F4C -/* 0F8A60 7F0C3F30 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0C3F34: -/* 0F8A64 7F0C3F34 0FC30776 */ jal langGet -/* 0F8A68 7F0C3F38 3404A012 */ li $a0, 40978 -/* 0F8A6C 7F0C3F3C 8FA40080 */ lw $a0, 0x80($sp) -/* 0F8A70 7F0C3F40 0C002B25 */ jal sprintf -/* 0F8A74 7F0C3F44 00402825 */ move $a1, $v0 -/* 0F8A78 7F0C3F48 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0C3F4C: -/* 0F8A7C 7F0C3F4C 8FB00018 */ lw $s0, 0x18($sp) -/* 0F8A80 7F0C3F50 27BD0080 */ addiu $sp, $sp, 0x80 -/* 0F8A84 7F0C3F54 03E00008 */ jr $ra -/* 0F8A88 7F0C3F58 00000000 */ nop -) -#endif s32 mpwatchShouldDisplayRank(s32 param_1) { - switch(get_scenario()) - { - case SCENARIO_NORMAL: - case SCENARIO_TLD: - case SCENARIO_MWTGG: - case SCENARIO_LTK: - case SCENARIO_2v2: - case SCENARIO_3v1: - case SCENARIO_2v1: - return 1; - case SCENARIO_YOLT: - return param_1 ? 0 : 1; - default: + switch(get_scenario()) + { + case SCENARIO_NORMAL: + case SCENARIO_TLD: + case SCENARIO_MWTGG: + case SCENARIO_LTK: + case SCENARIO_2v2: + case SCENARIO_3v1: + case SCENARIO_2v1: + return 1; + case SCENARIO_YOLT: + return param_1 ? 0 : 1; + default: #ifdef DEBUG - osSyncPrintf("Invalid scenario %d!", get_scenario()); + osSyncPrintf("Invalid scenario %d!", get_scenario()); #endif - do {} while (1); - } + } } s32 mpwatchShouldDisplayScore(s32 param_1) { - switch(get_scenario()) - { - case SCENARIO_NORMAL: - case SCENARIO_MWTGG: - case SCENARIO_LTK: - case SCENARIO_2v2: - case SCENARIO_3v1: - case SCENARIO_2v1: - return 1; - break; - case SCENARIO_YOLT: - case SCENARIO_TLD: - return 0; - break; - default: + switch(get_scenario()) + { + case SCENARIO_NORMAL: + case SCENARIO_MWTGG: + case SCENARIO_LTK: + case SCENARIO_2v2: + case SCENARIO_3v1: + case SCENARIO_2v1: + return 1; + break; + case SCENARIO_YOLT: + case SCENARIO_TLD: + return 0; + break; + default: #ifdef DEBUG - osSyncPrintf("Invalid scenario %d!", get_scenario()); + osSyncPrintf("Invalid scenario %d!", get_scenario()); #endif - do {} while (1); - } + do {} while (1); + } } +/** + * Draws the text for the multiplayer pause menu, post-game screens, and the "press start" prompt shown after death. + * + * When the match is running it works through a horizontal carousel of pages starting at the "Score" page. + * Losses << Kills << Score >> Pause >> Exit + * + * When the game is over it displays these screens: + * WOC/Awards << Losses << Kills << Score + * + * With the menu closed, nothing is drawn unless the player is dead and their + * death animation has finished, in which case the continue prompt is centred + * in the viewport. That's suppressed in YOLT once two of the player's lives are + * gone since there is nothing to continue to. + * + * @param gdl display list to append to + * @return the advanced display list pointer + */ +Gfx *mp_watch_menu_display(Gfx *gdl) +{ + s32 curplayernum; + s32 player_count; + s32 x; + s32 y; + s32 k; + s32 textwidth; + s32 textheight; + s32 m; + s32 h1; + s32 h2; + char rankbuffer[4]; + s32 two_player_x_offset; + char *text; + s32 scores[4]; + s32 i; + TEXTCOLORS current_colour; + TEXTCOLORS same_team_colour; + TEXTCOLORS other_team_colour; + MPSCENARIOS scenario; + s32 fav_textheight; + s32 fav_textwidth; + s32 fav_x_offset; + s32 x3; + s32 y3; + s32 textwidth3; + s32 textheight3; + char *text3; + s32 self_paused; + s32 total_kills_against_current; + s16 x2; + s16 viewleft; + s32 colour; + s32 q; + + curplayernum = get_cur_playernum(); + player_count = getPlayerCount(); + self_paused = 0; + + if (player_count == 1) + { + return gdl; + } + + if (g_CurrentPlayer->mpmenuon) + { + gdl = microcode_constructor(gdl); + + if (player_count == 2) + { + two_player_x_offset = 80; + } + else + { + two_player_x_offset = 0; + } -#ifdef NONMATCHING -Gfx * mp_watch_menu_display(Gfx *arg0) { + switch (g_CurrentPlayer->mpmenumode) + { + case MENU_GOWOC: + case MENU_LOSSES: + case MENU_KILLS: + case MENU_SCORES: + if (!g_gameOverFlag) + { + text = (char *) langGet(getStringID(LMPMENU, MPMENU_STR_15_PLAY)); /* PLAY */ + } + else + { + if (alt_gameover_msg) + { + text = (char *) langGet(getStringID(LMPMENU, MPMENU_STR_16_GAMEOVER)); /* GAME OVER */ + } + else + { + text = (char *) langGet(getStringID(LMPMENU, MPMENU_STR_17_STARTTTOEXIT)); /* START TO EXIT */ + } + } + break; + case MENU_FINISHED: + text = (char *) ascii_MP_watch_menu_BLANK; + break; + case MENU_PAUSE: + if (g_pausedFlag) + { + text = (char *) langGet(getStringID(LMPMENU, MPMENU_STR_18_PAUSED)); /* PAUSED */ + if (get_cur_playernum() == who_paused) + { + self_paused = 1; + } + } + else + { + text = (char *) langGet(getStringID(LMPMENU, MPMENU_STR_19_PAUSE)); /* PAUSE */ + } + break; + case MENU_EXIT: + case MENU_EXIT_CONFIRM: + text = (char *) langGet(getStringID(LMPMENU, MPMENU_STR_1A_EXIT)); /* EXIT */ + x = (viGetViewLeft() + two_player_x_offset) + 65; + break; + } + + textMeasure(&textheight, &textwidth, text, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + two_player_x_offset) - (textwidth >> 1)) + 80; + y = (viGetViewTop() - (textheight >> 1)) + (22 + MPMENU_YOFF); + + if (self_paused) + { + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRenderOutlined(gdl, &x, &y, text, ptrFontBankGothicChars, ptrFontBankGothic, 0xa0ffa0f0, 0x007000a0, viewleft, h1, 0, 0); + } + else + { + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, text, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + } + + if (mpwatchMenuCanGoLeft()) + { + viewleft = viGetViewLeft(); + + /** + * Colour is reused to store a pixel offset here. Efforts to introduce a new variable to store the offset resulted in stack problem I could not solve, + * so it's possible Rare really did reuse one variable for this. Perhaps it was not named "colour" but something more generic like "tmp." + */ + colour = g_gameOverFlag ? 10 : 0, x = ((viewleft + two_player_x_offset) - colour) + 40; + + if (g_gameOverFlag) + { + x -= 8; + } + + y = viGetViewTop() + (22 + MPMENU_YOFF); + + if (!chevron_glow) + { + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, (char *) ascii_MP_watch_menu_left_chevron, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + } + else + { + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRenderOutlined(gdl, &x, &y, (char *) ascii_MP_watch_menu_left_chevron, ptrFontBankGothicChars, ptrFontBankGothic, 0xa0ffa0f0, 0x007000a0, viewleft, h1, 0, 0); + } + } + + if (mpwatchMenuCanGoRight()) + { + viewleft = viGetViewLeft(); + // Colour is again used to store a pixel offset. + colour = g_gameOverFlag ? 10 : 0, x = ((colour + 112) + viewleft) + two_player_x_offset; + + if (g_gameOverFlag) + { + x += 8; + } + + y = viGetViewTop() + (22 + MPMENU_YOFF); + + if (!chevron_glow) + { + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, (char *) ascii_MP_watch_menu_right_chevron, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + } + else + { + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRenderOutlined(gdl, &x, &y, (char *) ascii_MP_watch_menu_right_chevron, ptrFontBankGothicChars, ptrFontBankGothic, 0xa0ffa0f0, 0x007000a0, viewleft, h1, 0, 0); + } + } + + if ((g_CurrentPlayer->mpmenumode == MENU_SCORES) || (g_CurrentPlayer->mpmenumode == MENU_PAUSE)) + { + if (player_count > 0) + { + i = 0; + + do + { + scores[i] = get_points_for_mp_player(i); + i++; + } + while (i != player_count); + } + + fav_x_offset = (g_gameOverFlag == 0); + + if (fav_x_offset) + { + fav_x_offset = (g_stopPlayFlag == 0); + } + + if (mpwatchShouldDisplayRank(fav_x_offset)) + { + write_playerrank_to_buffer(rankbuffer, curplayernum); + textMeasure(&textheight, &textwidth, rankbuffer, ptrFontBankGothicChars, ptrFontBankGothic, 0); + + x = ((viGetViewLeft() + two_player_x_offset) - (textwidth >> 1)) + 80; + y = (viGetViewTop() - (textheight >> 1)) + (37 + MPMENU_YOFF); + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, rankbuffer, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + } + + fav_x_offset = (g_gameOverFlag == 0); + + if (fav_x_offset) + { + fav_x_offset = (g_stopPlayFlag == 0); + } + + if (mpwatchShouldDisplayScore(fav_x_offset)) + { + scenario = get_scenario(); + text = (char *) langGet(getStringID(LMPMENU, MPMENU_STR_1B_SCORES)); /* SCORES */ + textMeasure(&textheight, &textwidth, text, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + two_player_x_offset) - (textwidth >> 1)) + 80; + y = (viGetViewTop() - (textheight >> 1)) + (53 + MPMENU_YOFF); + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, text, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + + if (((((scenario == SCENARIO_2v2) || (scenario == SCENARIO_3v1)) || (scenario == SCENARIO_2v1)) || (scenario == SCENARIO_TLD)) || (scenario == SCENARIO_MWTGG)) + { + if (g_playerPlayerData[curplayernum].have_token_or_goldengun == 0) + { + current_colour = RED_HIGHLIGHT; + same_team_colour = RED_NORMAL; + other_team_colour = BLUE_NORMAL; + } + else + { + current_colour = BLUE_HIGHLIGHT; + same_team_colour = BLUE_NORMAL; + other_team_colour = RED_NORMAL; + } + } + else + { + current_colour = GREEN_HIGHLIGHT; + same_team_colour = GREEN_NORMAL; + other_team_colour = GREEN_NORMAL; + } + + if (player_count == 2) + { + viewleft = viGetViewLeft(); + x2 = viGetViewTop(); + + if (curplayernum == 0) + { + colour = current_colour; + } + else + { + q = g_playerPlayerData[0].have_token_or_goldengun == g_playerPlayerData[curplayernum].have_token_or_goldengun ? same_team_colour : other_team_colour; + colour = q; + } + + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 80, x2 + (70 + MPMENU_YOFF), scores[0], colour); + viewleft = viGetViewLeft(); + x2 = viGetViewTop(); + + curplayernum == 1 ? (colour = current_colour) : (q = g_playerPlayerData[1].have_token_or_goldengun == g_playerPlayerData[curplayernum].have_token_or_goldengun ? same_team_colour : other_team_colour, colour = q); + + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 80, x2 + (86 + MPMENU_YOFF), scores[1], colour); + } + else + { + viewleft = viGetViewLeft(); + x2 = viGetViewTop(); + + if (curplayernum == 0) + { + colour = current_colour; + } + else + { + q = g_playerPlayerData[0].have_token_or_goldengun == g_playerPlayerData[curplayernum].have_token_or_goldengun ? same_team_colour : other_team_colour; + colour = q; + } + + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 64, x2 + (70 + MPMENU_YOFF), scores[0], colour); + viewleft = viGetViewLeft(); + x2 = viGetViewTop(); + + if (curplayernum == 1) + { + colour = current_colour; + } + else + { + q = g_playerPlayerData[1].have_token_or_goldengun == g_playerPlayerData[curplayernum].have_token_or_goldengun ? same_team_colour : other_team_colour; + colour = q; + } + + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 96, x2 + (70 + MPMENU_YOFF), scores[1], colour); + viewleft = viGetViewLeft(); + x2 = viGetViewTop(); + + if (curplayernum == 2) + { + colour = current_colour; + } + else + { + q = g_playerPlayerData[2].have_token_or_goldengun == g_playerPlayerData[curplayernum].have_token_or_goldengun ? same_team_colour : other_team_colour; + colour = q; + } + + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 64, x2 + (86 + MPMENU_YOFF), scores[2], colour); + + if (player_count == 4) + { + viewleft = viGetViewLeft(); + x2 = viGetViewTop(); + + curplayernum == 3 ? (colour = current_colour) : (q = g_playerPlayerData[3].have_token_or_goldengun == g_playerPlayerData[curplayernum].have_token_or_goldengun ? same_team_colour : other_team_colour, colour = q); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 96, x2 + (86 + MPMENU_YOFF), scores[3], colour); + } + } + } + + // Keep colour live through this branch to reproduce the original register allocation. + if (colour); + } + else if (g_CurrentPlayer->mpmenumode == MENU_KILLS) + { + fav_x_offset = (g_gameOverFlag == 0); + + if (fav_x_offset) + { + fav_x_offset = (g_stopPlayFlag == 0); + } + + if (mpwatchShouldDisplayRank(fav_x_offset)) + { + write_playerrank_to_buffer(rankbuffer, curplayernum); + textMeasure(&textheight, &textwidth, rankbuffer, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + two_player_x_offset) - (textwidth >> 1)) + 80; + y = (viGetViewTop() - (textheight >> 1)) + (37 + MPMENU_YOFF); + viewleft = viGetX(); h1 = viGetY(); + gdl = textRender(gdl, &x, &y, rankbuffer, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + } + + q = (s32) langGet(getStringID(LMPMENU, MPMENU_STR_1C_P)); /* P */ + + // Must remain a comma expression for matching + h2 = (s32) langGet(getStringID(LMPMENU, MPMENU_STR_1D_KILLS)), /* KILLS */ + sprintf(rankbuffer, ascii_pnum_KILLS, (char *) q, curplayernum + 1, (char *) h2); /* -> "P KILLS" */ + + textMeasure(&textheight, &textwidth, rankbuffer, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + two_player_x_offset) - (textwidth >> 1)) + 80; + y = (viGetViewTop() - (textheight >> 1)) + (53 + MPMENU_YOFF); + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, rankbuffer, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + + if (player_count == 2) + { + if (curplayernum != 0) + { + viewleft = viGetViewLeft(); h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 80, h1 + (70 + MPMENU_YOFF), g_playerPlayerData[curplayernum].kill_counts[0], GREEN_NORMAL); + } + if (curplayernum != 1) + { + viewleft = viGetViewLeft(); h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 80, h1 + (86 + MPMENU_YOFF), g_playerPlayerData[curplayernum].kill_counts[1], GREEN_NORMAL); + } + } + else + { + if (curplayernum != 0) + { + viewleft = viGetViewLeft(); h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 64, h1 + (70 + MPMENU_YOFF), g_playerPlayerData[curplayernum].kill_counts[0], GREEN_NORMAL); + } + if (curplayernum != 1) + { + viewleft = viGetViewLeft(); h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 96, h1 + (70 + MPMENU_YOFF), g_playerPlayerData[curplayernum].kill_counts[1], GREEN_NORMAL); + } + if (curplayernum != 2) + { + viewleft = viGetViewLeft(); h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 64, h1 + (86 + MPMENU_YOFF), g_playerPlayerData[curplayernum].kill_counts[2], GREEN_NORMAL); + } + if ((player_count == 4) && (curplayernum != 3)) + { + viewleft = viGetViewLeft(); h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 96, h1 + (86 + MPMENU_YOFF), g_playerPlayerData[curplayernum].kill_counts[3], GREEN_NORMAL); + } + } + } + else if (g_CurrentPlayer->mpmenumode == MENU_LOSSES) + { + fav_x_offset = (g_gameOverFlag == 0); + + if (fav_x_offset) + { + fav_x_offset = (g_stopPlayFlag == 0); + } + + if (mpwatchShouldDisplayRank(fav_x_offset)) + { + write_playerrank_to_buffer(rankbuffer, curplayernum); + textMeasure(&textheight, &textwidth, rankbuffer, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + two_player_x_offset) - (textwidth >> 1)) + 80; + y = (viGetViewTop() - (textheight >> 1)) + (37 + MPMENU_YOFF); + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, rankbuffer, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + } + + q = (s32) langGet(getStringID(LMPMENU, MPMENU_STR_1C_P)); /* P */ + + // Must remain a comma expression for matching. + h2 = (s32) langGet(getStringID(LMPMENU, MPMENU_STR_1E_LOSSES)), /* LOSSES */ + sprintf(rankbuffer, ascii_pnum_LOSSES, (char *) q, curplayernum + 1, (char *) h2); /* -> "P LOSSES" */ + + textMeasure(&textheight, &textwidth, rankbuffer, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + two_player_x_offset) - (textwidth >> 1)) + 80; + y = (viGetViewTop() - (textheight >> 1)) + (53 + MPMENU_YOFF); + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, rankbuffer, ptrFontBankGothicChars, ptrFontBankGothic, 0xff4040b0, viewleft, h1, 0, 0); + + if (player_count == 2) + { + if (curplayernum != 0) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 80, h1 + (70 + MPMENU_YOFF), g_playerPlayerData[0].kill_counts[curplayernum], GREEN_NORMAL); + } + else if (g_playerPlayerData[0].kill_counts[0] > 0) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 80, h1 + (70 + MPMENU_YOFF), g_playerPlayerData[0].kill_counts[curplayernum], RED_HIGHLIGHT); + } + if (curplayernum != 1) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 80, h1 + (86 + MPMENU_YOFF), g_playerPlayerData[1].kill_counts[curplayernum], GREEN_NORMAL); + } + else if (g_playerPlayerData[1].kill_counts[1] > 0) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 80, h1 + (86 + MPMENU_YOFF), g_playerPlayerData[1].kill_counts[curplayernum], RED_HIGHLIGHT); + } + } + else + { + if (curplayernum != 0) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 64, h1 + (70 + MPMENU_YOFF), g_playerPlayerData[0].kill_counts[curplayernum], GREEN_NORMAL); + } + else if (g_playerPlayerData[0].kill_counts[0] > 0) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 64, h1 + (70 + MPMENU_YOFF), g_playerPlayerData[0].kill_counts[curplayernum], RED_HIGHLIGHT); + } + + if (curplayernum != 1) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 96, h1 + (70 + MPMENU_YOFF), g_playerPlayerData[1].kill_counts[curplayernum], GREEN_NORMAL); + } + else if (g_playerPlayerData[1].kill_counts[1] > 0) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 96, h1 + (70 + MPMENU_YOFF), g_playerPlayerData[1].kill_counts[curplayernum], RED_HIGHLIGHT); + } + + if (curplayernum != 2) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 64, h1 + (86 + MPMENU_YOFF), g_playerPlayerData[2].kill_counts[curplayernum], GREEN_NORMAL); + } + else if (g_playerPlayerData[2].kill_counts[2] > 0) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 64, h1 + (86 + MPMENU_YOFF), g_playerPlayerData[2].kill_counts[curplayernum], RED_HIGHLIGHT); + } + + if (player_count == 4) + { + if (curplayernum != 3) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 96, h1 + (86 + MPMENU_YOFF), g_playerPlayerData[3].kill_counts[curplayernum], GREEN_NORMAL); + } + else if (g_playerPlayerData[3].kill_counts[3] > 0) + { + viewleft = viGetViewLeft(); + h1 = viGetViewTop(); + gdl = display_text_for_playerdata_on_MP_menu(gdl, (viewleft + two_player_x_offset) + 96, h1 + (86 + MPMENU_YOFF), g_playerPlayerData[3].kill_counts[curplayernum], RED_HIGHLIGHT); + } + } + } + } + else if (g_CurrentPlayer->mpmenumode == MENU_GOWOC) + { + fav_x_offset = two_player_x_offset; + + if (player_count >= 3) + { + if (curplayernum & 1) + { + fav_x_offset = two_player_x_offset - 7; + } + else + { + fav_x_offset = two_player_x_offset + 7; + } + } + + text = (char *) langGet(getStringID(LMPMENU, MPMENU_STR_1F_WEAPONOFCHOICE)); /* Weapon of choice: */ + textMeasure(&fav_textheight, &fav_textwidth, text, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + fav_x_offset) - (fav_textwidth >> 1)) + 80; + y = (viGetViewTop() - (fav_textheight >> 1)) + (37 + MPMENU_YOFF); + viewleft = viGetX(); h1 = viGetY(); + gdl = textRender(gdl, &x, &y, text, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + text = frontGetPlayersFavoriteWeaponInHand(curplayernum, 0); + textMeasure(&fav_textheight, &fav_textwidth, text, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + fav_x_offset) - (fav_textwidth >> 1)) + 80; + x2 = viGetViewTop(); + + if (j_text_trigger) + { + i = 4; + } + else + { + i = 0; + } + + y = ((i + (u32) x2) - (fav_textheight >> 1)) + (53 + MPMENU_YOFF); + + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, text, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + + if (g_CurrentPlayer->ptr_text_first_mp_award) + { + text = (char *) g_CurrentPlayer->ptr_text_first_mp_award; + textMeasure(&fav_textheight, &fav_textwidth, text, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + fav_x_offset) - (fav_textwidth >> 1)) + 80; + y = (viGetViewTop() - (fav_textheight >> 1)) + (75 + MPMENU_YOFF); + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, text, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + } + + if (g_CurrentPlayer->ptr_text_second_mp_award) + { + text = (char *) g_CurrentPlayer->ptr_text_second_mp_award; + textMeasure(&fav_textheight, &fav_textwidth, text, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + fav_x_offset) - (fav_textwidth >> 1)) + 80; + y = (viGetViewTop() - (fav_textheight >> 1)) + (88 + MPMENU_YOFF); + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, text, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + } + } + + if (g_CurrentPlayer->mpmenumode == MENU_EXIT_CONFIRM) + { + text = (char *) langGet(getStringID(LMPMENU, MPMENU_STR_20_CANCEL)); /* cancel */ + textMeasure(&textheight, &textwidth, text, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + two_player_x_offset) - (textwidth >> 1)) + 54; + y = (viGetViewTop() - (textheight >> 1)) + (54 + MPMENU_YOFF); + + if (g_CurrentPlayer->mpquitconfirm == 0) + { + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRenderOutlined(gdl, &x, &y, text, ptrFontBankGothicChars, ptrFontBankGothic, 0xa0ffa0f0, 0x007000a0, viewleft, h1, 0, 0); + } + else + { + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, text, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + } + + text = (char *) langGet(getStringID(LMPMENU, MPMENU_STR_21_CONFIRM)); /* confirm */ + textMeasure(&textheight, &textwidth, text, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x = ((viGetViewLeft() + two_player_x_offset) - (textwidth >> 1)) + 104; + y = (viGetViewTop() - (textheight >> 1)) + (54 + MPMENU_YOFF); + + if (g_CurrentPlayer->mpquitconfirm == 1) + { + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRenderOutlined(gdl, &x, &y, text, ptrFontBankGothicChars, ptrFontBankGothic, 0xa0ffa0f0, 0x007000a0, viewleft, h1, 0, 0); + } + else + { + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x, &y, text, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + } + } + gdl = combiner_bayer_lod_perspective(gdl); + } + else if (((((g_CurrentPlayer->bonddead) && (g_CurrentPlayer->deathanimfinished)) && (g_CurrentPlayer->redbloodfinished)) && (!g_stopPlayFlag)) && (!g_gameOverFlag)) + { + total_kills_against_current = 0; + + for (m = 0; m < player_count; m++) + { + total_kills_against_current += g_playerPlayerData[m].kill_counts[curplayernum]; + } + + if ((get_scenario() != SCENARIO_YOLT) || (total_kills_against_current < 2)) + { + gdl = bgScissorCurrentPlayerViewDefault(gdl); + gdl = microcode_constructor(gdl); + text3 = (char *) langGet(getStringID(LMPMENU, MPMENU_STR_22_PRESSSTART_LF)); /* press start */ + textMeasure(&textheight3, &textwidth3, text3, ptrFontBankGothicChars, ptrFontBankGothic, 0); + x2 = viGetViewLeft(); + x3 = (x2 + (viGetViewWidth() >> 1)) - (textwidth3 >> 1); + x2 = viGetViewTop(); + y3 = (x2 + (viGetViewHeight() >> 1)) - (textheight3 >> 1); +#ifndef VERSION_US + gdl = microcode_constructor_related_to_menus(gdl, x3 - 1, y3 - 1, x3 + textwidth3 + 1, y3 + textheight3 + 1, 0); +#endif + viewleft = viGetX(); + h1 = viGetY(); + gdl = textRender(gdl, &x3, &y3, text3, ptrFontBankGothicChars, ptrFontBankGothic, 0x00ff00b0, viewleft, h1, 0, 0); + gdl = combiner_bayer_lod_perspective(gdl); + } + } + + return gdl; } -#else -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata - -/*D:8005BD00*/ -glabel jpt_MP_menu_window_text -.word text_play -.word text_play -.word text_play -.word text_play -.word text_pause_unpause -.word text_exit -.word text_exit -.word text_blank -.size jpt_MP_menu_window_text, . - jpt_MP_menu_window_text - -.text -glabel mp_watch_menu_display -/* 0F8B54 7F0C4024 27BDFF28 */ addiu $sp, $sp, -0xd8 -/* 0F8B58 7F0C4028 AFBF003C */ sw $ra, 0x3c($sp) -/* 0F8B5C 7F0C402C AFB10038 */ sw $s1, 0x38($sp) -/* 0F8B60 7F0C4030 00808825 */ move $s1, $a0 -/* 0F8B64 7F0C4034 0FC26C54 */ jal get_cur_playernum -/* 0F8B68 7F0C4038 AFB00034 */ sw $s0, 0x34($sp) -/* 0F8B6C 7F0C403C 0FC26919 */ jal getPlayerCount -/* 0F8B70 7F0C4040 AFA200D4 */ sw $v0, 0xd4($sp) -/* 0F8B74 7F0C4044 24010001 */ li $at, 1 -/* 0F8B78 7F0C4048 00404025 */ move $t0, $v0 -/* 0F8B7C 7F0C404C 14410003 */ bne $v0, $at, .L7F0C405C -/* 0F8B80 7F0C4050 00008025 */ move $s0, $zero -/* 0F8B84 7F0C4054 100007F7 */ b .L7F0C6034 -/* 0F8B88 7F0C4058 02201025 */ move $v0, $s1 -.L7F0C405C: -/* 0F8B8C 7F0C405C 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0F8B90 7F0C4060 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0F8B94 7F0C4064 02202025 */ move $a0, $s1 -/* 0F8B98 7F0C4068 8C6E29C4 */ lw $t6, 0x29c4($v1) -/* 0F8B9C 7F0C406C 51C0076D */ beql $t6, $zero, .L7F0C5E24 -/* 0F8BA0 7F0C4070 8C6E00D8 */ lw $t6, 0xd8($v1) -/* 0F8BA4 7F0C4074 0FC2B366 */ jal microcode_constructor -/* 0F8BA8 7F0C4078 AFA800D0 */ sw $t0, 0xd0($sp) -/* 0F8BAC 7F0C407C 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0F8BB0 7F0C4080 24010002 */ li $at, 2 -/* 0F8BB4 7F0C4084 00408825 */ move $s1, $v0 -/* 0F8BB8 7F0C4088 15E10004 */ bne $t7, $at, .L7F0C409C -/* 0F8BBC 7F0C408C 3C198008 */ lui $t9, %hi(g_CurrentPlayer) -/* 0F8BC0 7F0C4090 24180050 */ li $t8, 80 -/* 0F8BC4 7F0C4094 10000002 */ b .L7F0C40A0 -/* 0F8BC8 7F0C4098 AFB800A8 */ sw $t8, 0xa8($sp) -.L7F0C409C: -/* 0F8BCC 7F0C409C AFA000A8 */ sw $zero, 0xa8($sp) -.L7F0C40A0: -/* 0F8BD0 7F0C40A0 8F39A0B0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0F8BD4 7F0C40A4 8F2929C8 */ lw $t1, 0x29c8($t9) -/* 0F8BD8 7F0C40A8 2D210008 */ sltiu $at, $t1, 8 -/* 0F8BDC 7F0C40AC 10200038 */ beqz $at, .L7F0C4190 -/* 0F8BE0 7F0C40B0 00094880 */ sll $t1, $t1, 2 -/* 0F8BE4 7F0C40B4 3C018006 */ lui $at, %hi(jpt_MP_menu_window_text) -/* 0F8BE8 7F0C40B8 00290821 */ addu $at, $at, $t1 -/* 0F8BEC 7F0C40BC 8C29BD00 */ lw $t1, %lo(jpt_MP_menu_window_text)($at) -/* 0F8BF0 7F0C40C0 01200008 */ jr $t1 -/* 0F8BF4 7F0C40C4 00000000 */ nop -text_play: -/* 0F8BF8 7F0C40C8 3C0A8009 */ lui $t2, %hi(g_gameOverFlag) -/* 0F8BFC 7F0C40CC 8D4AC704 */ lw $t2, %lo(g_gameOverFlag)($t2) -/* 0F8C00 7F0C40D0 3C0B8009 */ lui $t3, %hi(time_trigger_alt_gameover_msg) -/* 0F8C04 7F0C40D4 15400005 */ bnez $t2, .L7F0C40EC -/* 0F8C08 7F0C40D8 00000000 */ nop -/* 0F8C0C 7F0C40DC 0FC30776 */ jal langGet -/* 0F8C10 7F0C40E0 3404A015 */ li $a0, 40981 -/* 0F8C14 7F0C40E4 1000002A */ b .L7F0C4190 -/* 0F8C18 7F0C40E8 AFA200A4 */ sw $v0, 0xa4($sp) -.L7F0C40EC: -/* 0F8C1C 7F0C40EC 8D6BC710 */ lw $t3, %lo(time_trigger_alt_gameover_msg)($t3) -/* 0F8C20 7F0C40F0 11600005 */ beqz $t3, .L7F0C4108 -/* 0F8C24 7F0C40F4 00000000 */ nop -/* 0F8C28 7F0C40F8 0FC30776 */ jal langGet -/* 0F8C2C 7F0C40FC 3404A016 */ li $a0, 40982 -/* 0F8C30 7F0C4100 10000023 */ b .L7F0C4190 -/* 0F8C34 7F0C4104 AFA200A4 */ sw $v0, 0xa4($sp) -.L7F0C4108: -/* 0F8C38 7F0C4108 0FC30776 */ jal langGet -/* 0F8C3C 7F0C410C 3404A017 */ li $a0, 40983 -/* 0F8C40 7F0C4110 1000001F */ b .L7F0C4190 -/* 0F8C44 7F0C4114 AFA200A4 */ sw $v0, 0xa4($sp) -text_blank: -/* 0F8C48 7F0C4118 3C0C8006 */ lui $t4, %hi(ascii_MP_watch_menu_BLANK) -/* 0F8C4C 7F0C411C 258CBC24 */ addiu $t4, %lo(ascii_MP_watch_menu_BLANK) # addiu $t4, $t4, -0x43dc -/* 0F8C50 7F0C4120 1000001B */ b .L7F0C4190 -/* 0F8C54 7F0C4124 AFAC00A4 */ sw $t4, 0xa4($sp) -text_pause_unpause: -/* 0F8C58 7F0C4128 3C0D8009 */ lui $t5, %hi(g_pausedFlag) -/* 0F8C5C 7F0C412C 8DADC718 */ lw $t5, %lo(g_pausedFlag)($t5) -/* 0F8C60 7F0C4130 11A0000B */ beqz $t5, .L7F0C4160 -/* 0F8C64 7F0C4134 00000000 */ nop -/* 0F8C68 7F0C4138 0FC30776 */ jal langGet -/* 0F8C6C 7F0C413C 3404A018 */ li $a0, 40984 -/* 0F8C70 7F0C4140 0FC26C54 */ jal get_cur_playernum -/* 0F8C74 7F0C4144 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F8C78 7F0C4148 3C0E8009 */ lui $t6, %hi(who_paused) -/* 0F8C7C 7F0C414C 8DCEC71C */ lw $t6, %lo(who_paused)($t6) -/* 0F8C80 7F0C4150 144E000F */ bne $v0, $t6, .L7F0C4190 -/* 0F8C84 7F0C4154 00000000 */ nop -/* 0F8C88 7F0C4158 1000000D */ b .L7F0C4190 -/* 0F8C8C 7F0C415C 24100001 */ li $s0, 1 -.L7F0C4160: -/* 0F8C90 7F0C4160 0FC30776 */ jal langGet -/* 0F8C94 7F0C4164 3404A019 */ li $a0, 40985 -/* 0F8C98 7F0C4168 10000009 */ b .L7F0C4190 -/* 0F8C9C 7F0C416C AFA200A4 */ sw $v0, 0xa4($sp) -text_exit: -/* 0F8CA0 7F0C4170 0FC30776 */ jal langGet -/* 0F8CA4 7F0C4174 3404A01A */ li $a0, 40986 -/* 0F8CA8 7F0C4178 0C001145 */ jal viGetViewLeft -/* 0F8CAC 7F0C417C AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F8CB0 7F0C4180 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0F8CB4 7F0C4184 004F2021 */ addu $a0, $v0, $t7 -/* 0F8CB8 7F0C4188 24840041 */ addiu $a0, $a0, 0x41 -/* 0F8CBC 7F0C418C AFA400CC */ sw $a0, 0xcc($sp) -def_7F0C40C0: -.L7F0C4190: -/* 0F8CC0 7F0C4190 3C188004 */ lui $t8, %hi(ptrFontBankGothic) -/* 0F8CC4 7F0C4194 8F180EAC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0F8CC8 7F0C4198 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0F8CCC 7F0C419C 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F8CD0 7F0C41A0 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F8CD4 7F0C41A4 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F8CD8 7F0C41A8 8FA600A4 */ lw $a2, 0xa4($sp) -/* 0F8CDC 7F0C41AC AFA00014 */ sw $zero, 0x14($sp) -/* 0F8CE0 7F0C41B0 0FC2BA63 */ jal textMeasure -/* 0F8CE4 7F0C41B4 AFB80010 */ sw $t8, 0x10($sp) -/* 0F8CE8 7F0C41B8 0C001145 */ jal viGetViewLeft -/* 0F8CEC 7F0C41BC 00000000 */ nop -/* 0F8CF0 7F0C41C0 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F8CF4 7F0C41C4 8FAA00C0 */ lw $t2, 0xc0($sp) -/* 0F8CF8 7F0C41C8 00594821 */ addu $t1, $v0, $t9 -/* 0F8CFC 7F0C41CC 000A5843 */ sra $t3, $t2, 1 -/* 0F8D00 7F0C41D0 012B2023 */ subu $a0, $t1, $t3 -/* 0F8D04 7F0C41D4 24840050 */ addiu $a0, $a0, 0x50 -/* 0F8D08 7F0C41D8 0C001149 */ jal viGetViewTop -/* 0F8D0C 7F0C41DC AFA400CC */ sw $a0, 0xcc($sp) -/* 0F8D10 7F0C41E0 8FAC00BC */ lw $t4, 0xbc($sp) -/* 0F8D14 7F0C41E4 000C6843 */ sra $t5, $t4, 1 -/* 0F8D18 7F0C41E8 004D7023 */ subu $t6, $v0, $t5 -/* 0F8D1C 7F0C41EC 25CF0016 */ addiu $t7, $t6, 0x16 -/* 0F8D20 7F0C41F0 1200001E */ beqz $s0, .L7F0C426C -/* 0F8D24 7F0C41F4 AFAF00C8 */ sw $t7, 0xc8($sp) -/* 0F8D28 7F0C41F8 0C001107 */ jal viGetX -/* 0F8D2C 7F0C41FC 00000000 */ nop -/* 0F8D30 7F0C4200 00028400 */ sll $s0, $v0, 0x10 -/* 0F8D34 7F0C4204 0010C403 */ sra $t8, $s0, 0x10 -/* 0F8D38 7F0C4208 0C00110B */ jal viGetY -/* 0F8D3C 7F0C420C 03008025 */ move $s0, $t8 -/* 0F8D40 7F0C4210 3C198004 */ lui $t9, %hi(ptrFontBankGothicChars) -/* 0F8D44 7F0C4214 3C0A8004 */ lui $t2, %hi(ptrFontBankGothic) -/* 0F8D48 7F0C4218 8D4A0EAC */ lw $t2, %lo(ptrFontBankGothic)($t2) -/* 0F8D4C 7F0C421C 8F390EB0 */ lw $t9, %lo(ptrFontBankGothicChars)($t9) -/* 0F8D50 7F0C4220 3C09A0FF */ lui $t1, (0xA0FFA0F0 >> 16) # lui $t1, 0xa0ff -/* 0F8D54 7F0C4224 3C0B0070 */ lui $t3, (0x007000A0 >> 16) # lui $t3, 0x70 -/* 0F8D58 7F0C4228 356B00A0 */ ori $t3, (0x007000A0 & 0xFFFF) # ori $t3, $t3, 0xa0 -/* 0F8D5C 7F0C422C 3529A0F0 */ ori $t1, (0xA0FFA0F0 & 0xFFFF) # ori $t1, $t1, 0xa0f0 -/* 0F8D60 7F0C4230 AFA90018 */ sw $t1, 0x18($sp) -/* 0F8D64 7F0C4234 AFAB001C */ sw $t3, 0x1c($sp) -/* 0F8D68 7F0C4238 02202025 */ move $a0, $s1 -/* 0F8D6C 7F0C423C 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F8D70 7F0C4240 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F8D74 7F0C4244 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F8D78 7F0C4248 AFB00020 */ sw $s0, 0x20($sp) -/* 0F8D7C 7F0C424C AFA20024 */ sw $v0, 0x24($sp) -/* 0F8D80 7F0C4250 AFA00028 */ sw $zero, 0x28($sp) -/* 0F8D84 7F0C4254 AFA0002C */ sw $zero, 0x2c($sp) -/* 0F8D88 7F0C4258 AFAA0014 */ sw $t2, 0x14($sp) -/* 0F8D8C 7F0C425C 0FC2B9BB */ jal textRenderOutlined -/* 0F8D90 7F0C4260 AFB90010 */ sw $t9, 0x10($sp) -/* 0F8D94 7F0C4264 1000001A */ b .L7F0C42D0 -/* 0F8D98 7F0C4268 00408825 */ move $s1, $v0 -.L7F0C426C: -/* 0F8D9C 7F0C426C 0C001107 */ jal viGetX -/* 0F8DA0 7F0C4270 00000000 */ nop -/* 0F8DA4 7F0C4274 00028400 */ sll $s0, $v0, 0x10 -/* 0F8DA8 7F0C4278 00106403 */ sra $t4, $s0, 0x10 -/* 0F8DAC 7F0C427C 0C00110B */ jal viGetY -/* 0F8DB0 7F0C4280 01808025 */ move $s0, $t4 -/* 0F8DB4 7F0C4284 3C0D8004 */ lui $t5, %hi(ptrFontBankGothicChars) -/* 0F8DB8 7F0C4288 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) -/* 0F8DBC 7F0C428C 8DCE0EAC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0F8DC0 7F0C4290 8DAD0EB0 */ lw $t5, %lo(ptrFontBankGothicChars)($t5) -/* 0F8DC4 7F0C4294 3C0F00FF */ lui $t7, (0x00FF00B0 >> 16) # lui $t7, 0xff -/* 0F8DC8 7F0C4298 35EF00B0 */ ori $t7, (0x00FF00B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0F8DCC 7F0C429C AFAF0018 */ sw $t7, 0x18($sp) -/* 0F8DD0 7F0C42A0 02202025 */ move $a0, $s1 -/* 0F8DD4 7F0C42A4 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F8DD8 7F0C42A8 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F8DDC 7F0C42AC 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F8DE0 7F0C42B0 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F8DE4 7F0C42B4 AFA20020 */ sw $v0, 0x20($sp) -/* 0F8DE8 7F0C42B8 AFA00024 */ sw $zero, 0x24($sp) -/* 0F8DEC 7F0C42BC AFA00028 */ sw $zero, 0x28($sp) -/* 0F8DF0 7F0C42C0 AFAE0014 */ sw $t6, 0x14($sp) -/* 0F8DF4 7F0C42C4 0FC2B6AF */ jal textRender -/* 0F8DF8 7F0C42C8 AFAD0010 */ sw $t5, 0x10($sp) -/* 0F8DFC 7F0C42CC 00408825 */ move $s1, $v0 -.L7F0C42D0: -/* 0F8E00 7F0C42D0 0FC307A3 */ jal mpwatchMenuCanGoLeft -/* 0F8E04 7F0C42D4 00000000 */ nop -/* 0F8E08 7F0C42D8 10400056 */ beqz $v0, .L7F0C4434 -/* 0F8E0C 7F0C42DC 00000000 */ nop -/* 0F8E10 7F0C42E0 0C001145 */ jal viGetViewLeft -/* 0F8E14 7F0C42E4 00000000 */ nop -/* 0F8E18 7F0C42E8 3C038009 */ lui $v1, %hi(g_gameOverFlag) -/* 0F8E1C 7F0C42EC 8C63C704 */ lw $v1, %lo(g_gameOverFlag)($v1) -/* 0F8E20 7F0C42F0 0002CC00 */ sll $t9, $v0, 0x10 -/* 0F8E24 7F0C42F4 2418000A */ li $t8, 10 -/* 0F8E28 7F0C42F8 50600004 */ beql $v1, $zero, .L7F0C430C -/* 0F8E2C 7F0C42FC AFA00050 */ sw $zero, 0x50($sp) -/* 0F8E30 7F0C4300 10000002 */ b .L7F0C430C -/* 0F8E34 7F0C4304 AFB80050 */ sw $t8, 0x50($sp) -/* 0F8E38 7F0C4308 AFA00050 */ sw $zero, 0x50($sp) -.L7F0C430C: -/* 0F8E3C 7F0C430C 8FA900A8 */ lw $t1, 0xa8($sp) -/* 0F8E40 7F0C4310 8FAC0050 */ lw $t4, 0x50($sp) -/* 0F8E44 7F0C4314 00195403 */ sra $t2, $t9, 0x10 -/* 0F8E48 7F0C4318 01495821 */ addu $t3, $t2, $t1 -/* 0F8E4C 7F0C431C 016C2023 */ subu $a0, $t3, $t4 -/* 0F8E50 7F0C4320 24840028 */ addiu $a0, $a0, 0x28 -/* 0F8E54 7F0C4324 10600003 */ beqz $v1, .L7F0C4334 -/* 0F8E58 7F0C4328 AFA400CC */ sw $a0, 0xcc($sp) -/* 0F8E5C 7F0C432C 2484FFF8 */ addiu $a0, $a0, -8 -/* 0F8E60 7F0C4330 AFA400CC */ sw $a0, 0xcc($sp) -.L7F0C4334: -/* 0F8E64 7F0C4334 0C001149 */ jal viGetViewTop -/* 0F8E68 7F0C4338 00000000 */ nop -/* 0F8E6C 7F0C433C 3C0E8009 */ lui $t6, %hi(dword_CODE_bss_8008C708) -/* 0F8E70 7F0C4340 8DCEC708 */ lw $t6, %lo(dword_CODE_bss_8008C708)($t6) -/* 0F8E74 7F0C4344 244D0016 */ addiu $t5, $v0, 0x16 -/* 0F8E78 7F0C4348 AFAD00C8 */ sw $t5, 0xc8($sp) -/* 0F8E7C 7F0C434C 15C0001C */ bnez $t6, .L7F0C43C0 -/* 0F8E80 7F0C4350 00000000 */ nop -/* 0F8E84 7F0C4354 0C001107 */ jal viGetX -/* 0F8E88 7F0C4358 00000000 */ nop -/* 0F8E8C 7F0C435C 00028400 */ sll $s0, $v0, 0x10 -/* 0F8E90 7F0C4360 00107C03 */ sra $t7, $s0, 0x10 -/* 0F8E94 7F0C4364 0C00110B */ jal viGetY -/* 0F8E98 7F0C4368 01E08025 */ move $s0, $t7 -/* 0F8E9C 7F0C436C 3C188004 */ lui $t8, %hi(ptrFontBankGothicChars) -/* 0F8EA0 7F0C4370 3C198004 */ lui $t9, %hi(ptrFontBankGothic) -/* 0F8EA4 7F0C4374 8F390EAC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0F8EA8 7F0C4378 8F180EB0 */ lw $t8, %lo(ptrFontBankGothicChars)($t8) -/* 0F8EAC 7F0C437C 3C0A00FF */ lui $t2, (0x00FF00B0 >> 16) # lui $t2, 0xff -/* 0F8EB0 7F0C4380 354A00B0 */ ori $t2, (0x00FF00B0 & 0xFFFF) # ori $t2, $t2, 0xb0 -/* 0F8EB4 7F0C4384 3C078006 */ lui $a3, %hi(ascii_MP_watch_menu_left_chevron) -/* 0F8EB8 7F0C4388 24E7BC28 */ addiu $a3, %lo(ascii_MP_watch_menu_left_chevron) # addiu $a3, $a3, -0x43d8 -/* 0F8EBC 7F0C438C AFAA0018 */ sw $t2, 0x18($sp) -/* 0F8EC0 7F0C4390 02202025 */ move $a0, $s1 -/* 0F8EC4 7F0C4394 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F8EC8 7F0C4398 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F8ECC 7F0C439C AFB0001C */ sw $s0, 0x1c($sp) -/* 0F8ED0 7F0C43A0 AFA20020 */ sw $v0, 0x20($sp) -/* 0F8ED4 7F0C43A4 AFA00024 */ sw $zero, 0x24($sp) -/* 0F8ED8 7F0C43A8 AFA00028 */ sw $zero, 0x28($sp) -/* 0F8EDC 7F0C43AC AFB90014 */ sw $t9, 0x14($sp) -/* 0F8EE0 7F0C43B0 0FC2B6AF */ jal textRender -/* 0F8EE4 7F0C43B4 AFB80010 */ sw $t8, 0x10($sp) -/* 0F8EE8 7F0C43B8 1000001E */ b .L7F0C4434 -/* 0F8EEC 7F0C43BC 00408825 */ move $s1, $v0 -.L7F0C43C0: -/* 0F8EF0 7F0C43C0 0C001107 */ jal viGetX -/* 0F8EF4 7F0C43C4 00000000 */ nop -/* 0F8EF8 7F0C43C8 00028400 */ sll $s0, $v0, 0x10 -/* 0F8EFC 7F0C43CC 00104C03 */ sra $t1, $s0, 0x10 -/* 0F8F00 7F0C43D0 0C00110B */ jal viGetY -/* 0F8F04 7F0C43D4 01208025 */ move $s0, $t1 -/* 0F8F08 7F0C43D8 3C0B8004 */ lui $t3, %hi(ptrFontBankGothicChars) -/* 0F8F0C 7F0C43DC 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) -/* 0F8F10 7F0C43E0 8D8C0EAC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0F8F14 7F0C43E4 8D6B0EB0 */ lw $t3, %lo(ptrFontBankGothicChars)($t3) -/* 0F8F18 7F0C43E8 3C0DA0FF */ lui $t5, (0xA0FFA0F0 >> 16) # lui $t5, 0xa0ff -/* 0F8F1C 7F0C43EC 3C0E0070 */ lui $t6, (0x007000A0 >> 16) # lui $t6, 0x70 -/* 0F8F20 7F0C43F0 35CE00A0 */ ori $t6, (0x007000A0 & 0xFFFF) # ori $t6, $t6, 0xa0 -/* 0F8F24 7F0C43F4 35ADA0F0 */ ori $t5, (0xA0FFA0F0 & 0xFFFF) # ori $t5, $t5, 0xa0f0 -/* 0F8F28 7F0C43F8 3C078006 */ lui $a3, %hi(ascii_MP_watch_menu_left_chevron) -/* 0F8F2C 7F0C43FC 24E7BC28 */ addiu $a3, %lo(ascii_MP_watch_menu_left_chevron) # addiu $a3, $a3, -0x43d8 -/* 0F8F30 7F0C4400 AFAD0018 */ sw $t5, 0x18($sp) -/* 0F8F34 7F0C4404 AFAE001C */ sw $t6, 0x1c($sp) -/* 0F8F38 7F0C4408 02202025 */ move $a0, $s1 -/* 0F8F3C 7F0C440C 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F8F40 7F0C4410 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F8F44 7F0C4414 AFB00020 */ sw $s0, 0x20($sp) -/* 0F8F48 7F0C4418 AFA20024 */ sw $v0, 0x24($sp) -/* 0F8F4C 7F0C441C AFA00028 */ sw $zero, 0x28($sp) -/* 0F8F50 7F0C4420 AFA0002C */ sw $zero, 0x2c($sp) -/* 0F8F54 7F0C4424 AFAC0014 */ sw $t4, 0x14($sp) -/* 0F8F58 7F0C4428 0FC2B9BB */ jal textRenderOutlined -/* 0F8F5C 7F0C442C AFAB0010 */ sw $t3, 0x10($sp) -/* 0F8F60 7F0C4430 00408825 */ move $s1, $v0 -.L7F0C4434: -/* 0F8F64 7F0C4434 0FC30788 */ jal mpwatchMenuCanGoRight -/* 0F8F68 7F0C4438 00000000 */ nop -/* 0F8F6C 7F0C443C 10400056 */ beqz $v0, .L7F0C4598 -/* 0F8F70 7F0C4440 00000000 */ nop -/* 0F8F74 7F0C4444 0C001145 */ jal viGetViewLeft -/* 0F8F78 7F0C4448 00000000 */ nop -/* 0F8F7C 7F0C444C 3C038009 */ lui $v1, %hi(g_gameOverFlag) -/* 0F8F80 7F0C4450 8C63C704 */ lw $v1, %lo(g_gameOverFlag)($v1) -/* 0F8F84 7F0C4454 0002CC00 */ sll $t9, $v0, 0x10 -/* 0F8F88 7F0C4458 240F000A */ li $t7, 10 -/* 0F8F8C 7F0C445C 50600004 */ beql $v1, $zero, .L7F0C4470 -/* 0F8F90 7F0C4460 AFA00050 */ sw $zero, 0x50($sp) -/* 0F8F94 7F0C4464 10000002 */ b .L7F0C4470 -/* 0F8F98 7F0C4468 AFAF0050 */ sw $t7, 0x50($sp) -/* 0F8F9C 7F0C446C AFA00050 */ sw $zero, 0x50($sp) -.L7F0C4470: -/* 0F8FA0 7F0C4470 8FB80050 */ lw $t8, 0x50($sp) -/* 0F8FA4 7F0C4474 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0F8FA8 7F0C4478 00195403 */ sra $t2, $t9, 0x10 -/* 0F8FAC 7F0C447C 030A4821 */ addu $t1, $t8, $t2 -/* 0F8FB0 7F0C4480 012B2021 */ addu $a0, $t1, $t3 -/* 0F8FB4 7F0C4484 24840070 */ addiu $a0, $a0, 0x70 -/* 0F8FB8 7F0C4488 10600003 */ beqz $v1, .L7F0C4498 -/* 0F8FBC 7F0C448C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F8FC0 7F0C4490 24840008 */ addiu $a0, $a0, 8 -/* 0F8FC4 7F0C4494 AFA400CC */ sw $a0, 0xcc($sp) -.L7F0C4498: -/* 0F8FC8 7F0C4498 0C001149 */ jal viGetViewTop -/* 0F8FCC 7F0C449C 00000000 */ nop -/* 0F8FD0 7F0C44A0 3C0D8009 */ lui $t5, %hi(dword_CODE_bss_8008C708) -/* 0F8FD4 7F0C44A4 8DADC708 */ lw $t5, %lo(dword_CODE_bss_8008C708)($t5) -/* 0F8FD8 7F0C44A8 244C0016 */ addiu $t4, $v0, 0x16 -/* 0F8FDC 7F0C44AC AFAC00C8 */ sw $t4, 0xc8($sp) -/* 0F8FE0 7F0C44B0 15A0001C */ bnez $t5, .L7F0C4524 -/* 0F8FE4 7F0C44B4 00000000 */ nop -/* 0F8FE8 7F0C44B8 0C001107 */ jal viGetX -/* 0F8FEC 7F0C44BC 00000000 */ nop -/* 0F8FF0 7F0C44C0 00028400 */ sll $s0, $v0, 0x10 -/* 0F8FF4 7F0C44C4 00107403 */ sra $t6, $s0, 0x10 -/* 0F8FF8 7F0C44C8 0C00110B */ jal viGetY -/* 0F8FFC 7F0C44CC 01C08025 */ move $s0, $t6 -/* 0F9000 7F0C44D0 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) -/* 0F9004 7F0C44D4 3C198004 */ lui $t9, %hi(ptrFontBankGothic) -/* 0F9008 7F0C44D8 8F390EAC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0F900C 7F0C44DC 8DEF0EB0 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0F9010 7F0C44E0 3C1800FF */ lui $t8, (0x00FF00B0 >> 16) # lui $t8, 0xff -/* 0F9014 7F0C44E4 371800B0 */ ori $t8, (0x00FF00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0F9018 7F0C44E8 3C078006 */ lui $a3, %hi(ascii_MP_watch_menu_right_chevron) -/* 0F901C 7F0C44EC 24E7BC2C */ addiu $a3, %lo(ascii_MP_watch_menu_right_chevron) # addiu $a3, $a3, -0x43d4 -/* 0F9020 7F0C44F0 AFB80018 */ sw $t8, 0x18($sp) -/* 0F9024 7F0C44F4 02202025 */ move $a0, $s1 -/* 0F9028 7F0C44F8 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F902C 7F0C44FC 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9030 7F0C4500 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F9034 7F0C4504 AFA20020 */ sw $v0, 0x20($sp) -/* 0F9038 7F0C4508 AFA00024 */ sw $zero, 0x24($sp) -/* 0F903C 7F0C450C AFA00028 */ sw $zero, 0x28($sp) -/* 0F9040 7F0C4510 AFB90014 */ sw $t9, 0x14($sp) -/* 0F9044 7F0C4514 0FC2B6AF */ jal textRender -/* 0F9048 7F0C4518 AFAF0010 */ sw $t7, 0x10($sp) -/* 0F904C 7F0C451C 1000001E */ b .L7F0C4598 -/* 0F9050 7F0C4520 00408825 */ move $s1, $v0 -.L7F0C4524: -/* 0F9054 7F0C4524 0C001107 */ jal viGetX -/* 0F9058 7F0C4528 00000000 */ nop -/* 0F905C 7F0C452C 00028400 */ sll $s0, $v0, 0x10 -/* 0F9060 7F0C4530 00105403 */ sra $t2, $s0, 0x10 -/* 0F9064 7F0C4534 0C00110B */ jal viGetY -/* 0F9068 7F0C4538 01408025 */ move $s0, $t2 -/* 0F906C 7F0C453C 3C098004 */ lui $t1, %hi(ptrFontBankGothicChars) -/* 0F9070 7F0C4540 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) -/* 0F9074 7F0C4544 8D6B0EAC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0F9078 7F0C4548 8D290EB0 */ lw $t1, %lo(ptrFontBankGothicChars)($t1) -/* 0F907C 7F0C454C 3C0CA0FF */ lui $t4, (0xA0FFA0F0 >> 16) # lui $t4, 0xa0ff -/* 0F9080 7F0C4550 3C0D0070 */ lui $t5, (0x007000A0 >> 16) # lui $t5, 0x70 -/* 0F9084 7F0C4554 35AD00A0 */ ori $t5, (0x007000A0 & 0xFFFF) # ori $t5, $t5, 0xa0 -/* 0F9088 7F0C4558 358CA0F0 */ ori $t4, (0xA0FFA0F0 & 0xFFFF) # ori $t4, $t4, 0xa0f0 -/* 0F908C 7F0C455C 3C078006 */ lui $a3, %hi(ascii_MP_watch_menu_right_chevron) -/* 0F9090 7F0C4560 24E7BC2C */ addiu $a3, %lo(ascii_MP_watch_menu_right_chevron) # addiu $a3, $a3, -0x43d4 -/* 0F9094 7F0C4564 AFAC0018 */ sw $t4, 0x18($sp) -/* 0F9098 7F0C4568 AFAD001C */ sw $t5, 0x1c($sp) -/* 0F909C 7F0C456C 02202025 */ move $a0, $s1 -/* 0F90A0 7F0C4570 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F90A4 7F0C4574 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F90A8 7F0C4578 AFB00020 */ sw $s0, 0x20($sp) -/* 0F90AC 7F0C457C AFA20024 */ sw $v0, 0x24($sp) -/* 0F90B0 7F0C4580 AFA00028 */ sw $zero, 0x28($sp) -/* 0F90B4 7F0C4584 AFA0002C */ sw $zero, 0x2c($sp) -/* 0F90B8 7F0C4588 AFAB0014 */ sw $t3, 0x14($sp) -/* 0F90BC 7F0C458C 0FC2B9BB */ jal textRenderOutlined -/* 0F90C0 7F0C4590 AFA90010 */ sw $t1, 0x10($sp) -/* 0F90C4 7F0C4594 00408825 */ move $s1, $v0 -.L7F0C4598: -/* 0F90C8 7F0C4598 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0F90CC 7F0C459C 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0F90D0 7F0C45A0 24010003 */ li $at, 3 -/* 0F90D4 7F0C45A4 8FAE00D0 */ lw $t6, 0xd0($sp) -/* 0F90D8 7F0C45A8 8C6229C8 */ lw $v0, 0x29c8($v1) -/* 0F90DC 7F0C45AC 10410003 */ beq $v0, $at, .L7F0C45BC -/* 0F90E0 7F0C45B0 24010004 */ li $at, 4 -/* 0F90E4 7F0C45B4 544101AA */ bnel $v0, $at, .L7F0C4C60 -/* 0F90E8 7F0C45B8 24010002 */ li $at, 2 -.L7F0C45BC: -/* 0F90EC 7F0C45BC 19C0000D */ blez $t6, .L7F0C45F4 -/* 0F90F0 7F0C45C0 00002025 */ move $a0, $zero -/* 0F90F4 7F0C45C4 27A30094 */ addiu $v1, $sp, 0x94 -/* 0F90F8 7F0C45C8 AFA30044 */ sw $v1, 0x44($sp) -.L7F0C45CC: -/* 0F90FC 7F0C45CC 0FC30E36 */ jal get_points_for_mp_player -/* 0F9100 7F0C45D0 AFA40090 */ sw $a0, 0x90($sp) -/* 0F9104 7F0C45D4 8FA30044 */ lw $v1, 0x44($sp) -/* 0F9108 7F0C45D8 8FA40090 */ lw $a0, 0x90($sp) -/* 0F910C 7F0C45DC AC620000 */ sw $v0, ($v1) -/* 0F9110 7F0C45E0 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0F9114 7F0C45E4 24840001 */ addiu $a0, $a0, 1 -/* 0F9118 7F0C45E8 24630004 */ addiu $v1, $v1, 4 -/* 0F911C 7F0C45EC 548FFFF7 */ bnel $a0, $t7, .L7F0C45CC -/* 0F9120 7F0C45F0 AFA30044 */ sw $v1, 0x44($sp) -.L7F0C45F4: -/* 0F9124 7F0C45F4 3C048009 */ lui $a0, %hi(g_gameOverFlag) -/* 0F9128 7F0C45F8 8C84C704 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0F912C 7F0C45FC 2C990001 */ sltiu $t9, $a0, 1 -/* 0F9130 7F0C4600 13200005 */ beqz $t9, .L7F0C4618 -/* 0F9134 7F0C4604 03202025 */ move $a0, $t9 -/* 0F9138 7F0C4608 3C048009 */ lui $a0, %hi(g_stopPlayFlag) -/* 0F913C 7F0C460C 8C84C700 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0F9140 7F0C4610 2C980001 */ sltiu $t8, $a0, 1 -/* 0F9144 7F0C4614 03002025 */ move $a0, $t8 -.L7F0C4618: -/* 0F9148 7F0C4618 0FC30FD7 */ jal mpwatchShouldDisplayRank -/* 0F914C 7F0C461C 00000000 */ nop -/* 0F9150 7F0C4620 10400034 */ beqz $v0, .L7F0C46F4 -/* 0F9154 7F0C4624 27A400AC */ addiu $a0, $sp, 0xac -/* 0F9158 7F0C4628 0FC30F25 */ jal write_playerrank_to_buffer -/* 0F915C 7F0C462C 8FA500D4 */ lw $a1, 0xd4($sp) -/* 0F9160 7F0C4630 3C0A8004 */ lui $t2, %hi(ptrFontBankGothic) -/* 0F9164 7F0C4634 8D4A0EAC */ lw $t2, %lo(ptrFontBankGothic)($t2) -/* 0F9168 7F0C4638 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0F916C 7F0C463C 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F9170 7F0C4640 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F9174 7F0C4644 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F9178 7F0C4648 27A600AC */ addiu $a2, $sp, 0xac -/* 0F917C 7F0C464C AFA00014 */ sw $zero, 0x14($sp) -/* 0F9180 7F0C4650 0FC2BA63 */ jal textMeasure -/* 0F9184 7F0C4654 AFAA0010 */ sw $t2, 0x10($sp) -/* 0F9188 7F0C4658 0C001145 */ jal viGetViewLeft -/* 0F918C 7F0C465C 00000000 */ nop -/* 0F9190 7F0C4660 8FA900A8 */ lw $t1, 0xa8($sp) -/* 0F9194 7F0C4664 8FAC00C0 */ lw $t4, 0xc0($sp) -/* 0F9198 7F0C4668 00495821 */ addu $t3, $v0, $t1 -/* 0F919C 7F0C466C 000C6843 */ sra $t5, $t4, 1 -/* 0F91A0 7F0C4670 016D2023 */ subu $a0, $t3, $t5 -/* 0F91A4 7F0C4674 24840050 */ addiu $a0, $a0, 0x50 -/* 0F91A8 7F0C4678 0C001149 */ jal viGetViewTop -/* 0F91AC 7F0C467C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F91B0 7F0C4680 8FAE00BC */ lw $t6, 0xbc($sp) -/* 0F91B4 7F0C4684 000E7843 */ sra $t7, $t6, 1 -/* 0F91B8 7F0C4688 004FC823 */ subu $t9, $v0, $t7 -/* 0F91BC 7F0C468C 27380025 */ addiu $t8, $t9, 0x25 -/* 0F91C0 7F0C4690 0C001107 */ jal viGetX -/* 0F91C4 7F0C4694 AFB800C8 */ sw $t8, 0xc8($sp) -/* 0F91C8 7F0C4698 00028400 */ sll $s0, $v0, 0x10 -/* 0F91CC 7F0C469C 00105403 */ sra $t2, $s0, 0x10 -/* 0F91D0 7F0C46A0 0C00110B */ jal viGetY -/* 0F91D4 7F0C46A4 01408025 */ move $s0, $t2 -/* 0F91D8 7F0C46A8 3C098004 */ lui $t1, %hi(ptrFontBankGothicChars) -/* 0F91DC 7F0C46AC 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) -/* 0F91E0 7F0C46B0 8D8C0EAC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0F91E4 7F0C46B4 8D290EB0 */ lw $t1, %lo(ptrFontBankGothicChars)($t1) -/* 0F91E8 7F0C46B8 3C0B00FF */ lui $t3, (0x00FF00B0 >> 16) # lui $t3, 0xff -/* 0F91EC 7F0C46BC 356B00B0 */ ori $t3, (0x00FF00B0 & 0xFFFF) # ori $t3, $t3, 0xb0 -/* 0F91F0 7F0C46C0 AFAB0018 */ sw $t3, 0x18($sp) -/* 0F91F4 7F0C46C4 02202025 */ move $a0, $s1 -/* 0F91F8 7F0C46C8 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F91FC 7F0C46CC 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9200 7F0C46D0 27A700AC */ addiu $a3, $sp, 0xac -/* 0F9204 7F0C46D4 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F9208 7F0C46D8 AFA20020 */ sw $v0, 0x20($sp) -/* 0F920C 7F0C46DC AFA00024 */ sw $zero, 0x24($sp) -/* 0F9210 7F0C46E0 AFA00028 */ sw $zero, 0x28($sp) -/* 0F9214 7F0C46E4 AFAC0014 */ sw $t4, 0x14($sp) -/* 0F9218 7F0C46E8 0FC2B6AF */ jal textRender -/* 0F921C 7F0C46EC AFA90010 */ sw $t1, 0x10($sp) -/* 0F9220 7F0C46F0 00408825 */ move $s1, $v0 -.L7F0C46F4: -/* 0F9224 7F0C46F4 3C048009 */ lui $a0, %hi(g_gameOverFlag) -/* 0F9228 7F0C46F8 8C84C704 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0F922C 7F0C46FC 2C8D0001 */ sltiu $t5, $a0, 1 -/* 0F9230 7F0C4700 11A00005 */ beqz $t5, .L7F0C4718 -/* 0F9234 7F0C4704 01A02025 */ move $a0, $t5 -/* 0F9238 7F0C4708 3C048009 */ lui $a0, %hi(g_stopPlayFlag) -/* 0F923C 7F0C470C 8C84C700 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0F9240 7F0C4710 2C8E0001 */ sltiu $t6, $a0, 1 -/* 0F9244 7F0C4714 01C02025 */ move $a0, $t6 -.L7F0C4718: -/* 0F9248 7F0C4718 0FC30FF3 */ jal mpwatchShouldDisplayScore -/* 0F924C 7F0C471C 00000000 */ nop -/* 0F9250 7F0C4720 1040014B */ beqz $v0, .L7F0C4C50 -/* 0F9254 7F0C4724 00000000 */ nop -/* 0F9258 7F0C4728 0FC051D6 */ jal get_scenario -/* 0F925C 7F0C472C 00000000 */ nop -/* 0F9260 7F0C4730 AFA20080 */ sw $v0, 0x80($sp) -/* 0F9264 7F0C4734 0FC30776 */ jal langGet -/* 0F9268 7F0C4738 3404A01B */ li $a0, 40987 -/* 0F926C 7F0C473C 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) -/* 0F9270 7F0C4740 8DEF0EAC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F9274 7F0C4744 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0F9278 7F0C4748 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F927C 7F0C474C 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F9280 7F0C4750 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F9284 7F0C4754 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F9288 7F0C4758 00403025 */ move $a2, $v0 -/* 0F928C 7F0C475C AFA00014 */ sw $zero, 0x14($sp) -/* 0F9290 7F0C4760 0FC2BA63 */ jal textMeasure -/* 0F9294 7F0C4764 AFAF0010 */ sw $t7, 0x10($sp) -/* 0F9298 7F0C4768 0C001145 */ jal viGetViewLeft -/* 0F929C 7F0C476C 00000000 */ nop -/* 0F92A0 7F0C4770 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F92A4 7F0C4774 8FAA00C0 */ lw $t2, 0xc0($sp) -/* 0F92A8 7F0C4778 0059C021 */ addu $t8, $v0, $t9 -/* 0F92AC 7F0C477C 000A4843 */ sra $t1, $t2, 1 -/* 0F92B0 7F0C4780 03092023 */ subu $a0, $t8, $t1 -/* 0F92B4 7F0C4784 24840050 */ addiu $a0, $a0, 0x50 -/* 0F92B8 7F0C4788 0C001149 */ jal viGetViewTop -/* 0F92BC 7F0C478C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F92C0 7F0C4790 8FAC00BC */ lw $t4, 0xbc($sp) -/* 0F92C4 7F0C4794 000C5843 */ sra $t3, $t4, 1 -/* 0F92C8 7F0C4798 004B6823 */ subu $t5, $v0, $t3 -/* 0F92CC 7F0C479C 25AE0035 */ addiu $t6, $t5, 0x35 -/* 0F92D0 7F0C47A0 0C001107 */ jal viGetX -/* 0F92D4 7F0C47A4 AFAE00C8 */ sw $t6, 0xc8($sp) -/* 0F92D8 7F0C47A8 00028400 */ sll $s0, $v0, 0x10 -/* 0F92DC 7F0C47AC 00107C03 */ sra $t7, $s0, 0x10 -/* 0F92E0 7F0C47B0 0C00110B */ jal viGetY -/* 0F92E4 7F0C47B4 01E08025 */ move $s0, $t7 -/* 0F92E8 7F0C47B8 3C198004 */ lui $t9, %hi(ptrFontBankGothicChars) -/* 0F92EC 7F0C47BC 3C0A8004 */ lui $t2, %hi(ptrFontBankGothic) -/* 0F92F0 7F0C47C0 8D4A0EAC */ lw $t2, %lo(ptrFontBankGothic)($t2) -/* 0F92F4 7F0C47C4 8F390EB0 */ lw $t9, %lo(ptrFontBankGothicChars)($t9) -/* 0F92F8 7F0C47C8 3C1800FF */ lui $t8, (0x00FF00B0 >> 16) # lui $t8, 0xff -/* 0F92FC 7F0C47CC 371800B0 */ ori $t8, (0x00FF00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0F9300 7F0C47D0 AFB80018 */ sw $t8, 0x18($sp) -/* 0F9304 7F0C47D4 02202025 */ move $a0, $s1 -/* 0F9308 7F0C47D8 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F930C 7F0C47DC 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9310 7F0C47E0 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F9314 7F0C47E4 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F9318 7F0C47E8 AFA20020 */ sw $v0, 0x20($sp) -/* 0F931C 7F0C47EC AFA00024 */ sw $zero, 0x24($sp) -/* 0F9320 7F0C47F0 AFA00028 */ sw $zero, 0x28($sp) -/* 0F9324 7F0C47F4 AFAA0014 */ sw $t2, 0x14($sp) -/* 0F9328 7F0C47F8 0FC2B6AF */ jal textRender -/* 0F932C 7F0C47FC AFB90010 */ sw $t9, 0x10($sp) -/* 0F9330 7F0C4800 8FA30080 */ lw $v1, 0x80($sp) -/* 0F9334 7F0C4804 24010005 */ li $at, 5 -/* 0F9338 7F0C4808 00408825 */ move $s1, $v0 -/* 0F933C 7F0C480C 10610009 */ beq $v1, $at, .L7F0C4834 -/* 0F9340 7F0C4810 8FA900D4 */ lw $t1, 0xd4($sp) -/* 0F9344 7F0C4814 24010006 */ li $at, 6 -/* 0F9348 7F0C4818 10610006 */ beq $v1, $at, .L7F0C4834 -/* 0F934C 7F0C481C 24010007 */ li $at, 7 -/* 0F9350 7F0C4820 10610004 */ beq $v1, $at, .L7F0C4834 -/* 0F9354 7F0C4824 24010002 */ li $at, 2 -/* 0F9358 7F0C4828 10610002 */ beq $v1, $at, .L7F0C4834 -/* 0F935C 7F0C482C 24010003 */ li $at, 3 -/* 0F9360 7F0C4830 14610015 */ bne $v1, $at, .L7F0C4888 -.L7F0C4834: -/* 0F9364 7F0C4834 000960C0 */ sll $t4, $t1, 3 -/* 0F9368 7F0C4838 01896023 */ subu $t4, $t4, $t1 -/* 0F936C 7F0C483C 000C6100 */ sll $t4, $t4, 4 -/* 0F9370 7F0C4840 3C0B8008 */ lui $t3, %hi(g_playerPlayerData+105) -/* 0F9374 7F0C4844 016C5821 */ addu $t3, $t3, $t4 -/* 0F9378 7F0C4848 916B9F59 */ lbu $t3, %lo(g_playerPlayerData+105)($t3) -/* 0F937C 7F0C484C 24190005 */ li $t9, 5 -/* 0F9380 7F0C4850 240A0004 */ li $t2, 4 -/* 0F9384 7F0C4854 15600008 */ bnez $t3, .L7F0C4878 -/* 0F9388 7F0C4858 24180002 */ li $t8, 2 -/* 0F938C 7F0C485C 240D0003 */ li $t5, 3 -/* 0F9390 7F0C4860 240E0002 */ li $t6, 2 -/* 0F9394 7F0C4864 240F0004 */ li $t7, 4 -/* 0F9398 7F0C4868 AFAD008C */ sw $t5, 0x8c($sp) -/* 0F939C 7F0C486C AFAE0088 */ sw $t6, 0x88($sp) -/* 0F93A0 7F0C4870 10000009 */ b .L7F0C4898 -/* 0F93A4 7F0C4874 AFAF0084 */ sw $t7, 0x84($sp) -.L7F0C4878: -/* 0F93A8 7F0C4878 AFB9008C */ sw $t9, 0x8c($sp) -/* 0F93AC 7F0C487C AFAA0088 */ sw $t2, 0x88($sp) -/* 0F93B0 7F0C4880 10000005 */ b .L7F0C4898 -/* 0F93B4 7F0C4884 AFB80084 */ sw $t8, 0x84($sp) -.L7F0C4888: -/* 0F93B8 7F0C4888 24090001 */ li $t1, 1 -/* 0F93BC 7F0C488C AFA9008C */ sw $t1, 0x8c($sp) -/* 0F93C0 7F0C4890 AFA00088 */ sw $zero, 0x88($sp) -/* 0F93C4 7F0C4894 AFA00084 */ sw $zero, 0x84($sp) -.L7F0C4898: -/* 0F93C8 7F0C4898 8FAC00D0 */ lw $t4, 0xd0($sp) -/* 0F93CC 7F0C489C 24010002 */ li $at, 2 -/* 0F93D0 7F0C48A0 1581004E */ bne $t4, $at, .L7F0C49DC -/* 0F93D4 7F0C48A4 00000000 */ nop -/* 0F93D8 7F0C48A8 0C001145 */ jal viGetViewLeft -/* 0F93DC 7F0C48AC 00000000 */ nop -/* 0F93E0 7F0C48B0 00028400 */ sll $s0, $v0, 0x10 -/* 0F93E4 7F0C48B4 00105C03 */ sra $t3, $s0, 0x10 -/* 0F93E8 7F0C48B8 0C001149 */ jal viGetViewTop -/* 0F93EC 7F0C48BC 01608025 */ move $s0, $t3 -/* 0F93F0 7F0C48C0 8FA800D4 */ lw $t0, 0xd4($sp) -/* 0F93F4 7F0C48C4 00021C00 */ sll $v1, $v0, 0x10 -/* 0F93F8 7F0C48C8 00036C03 */ sra $t5, $v1, 0x10 -/* 0F93FC 7F0C48CC 15000004 */ bnez $t0, .L7F0C48E0 -/* 0F9400 7F0C48D0 01A01825 */ move $v1, $t5 -/* 0F9404 7F0C48D4 8FAE008C */ lw $t6, 0x8c($sp) -/* 0F9408 7F0C48D8 1000000F */ b .L7F0C4918 -/* 0F940C 7F0C48DC AFAE0050 */ sw $t6, 0x50($sp) -.L7F0C48E0: -/* 0F9410 7F0C48E0 0008C8C0 */ sll $t9, $t0, 3 -/* 0F9414 7F0C48E4 0328C823 */ subu $t9, $t9, $t0 -/* 0F9418 7F0C48E8 0019C900 */ sll $t9, $t9, 4 -/* 0F941C 7F0C48EC 3C0A8008 */ lui $t2, %hi(g_playerPlayerData + 0x69) -/* 0F9420 7F0C48F0 01595021 */ addu $t2, $t2, $t9 -/* 0F9424 7F0C48F4 3C0F8008 */ lui $t7, %hi(g_playerPlayerData + 0x69) -/* 0F9428 7F0C48F8 91EF9F59 */ lbu $t7, %lo(g_playerPlayerData + 0x69)($t7) -/* 0F942C 7F0C48FC 914A9F59 */ lbu $t2, %lo(g_playerPlayerData + 0x69)($t2) -/* 0F9430 7F0C4900 8FA60084 */ lw $a2, 0x84($sp) -/* 0F9434 7F0C4904 15EA0003 */ bne $t7, $t2, .L7F0C4914 -/* 0F9438 7F0C4908 00000000 */ nop -/* 0F943C 7F0C490C 10000001 */ b .L7F0C4914 -/* 0F9440 7F0C4910 8FA60088 */ lw $a2, 0x88($sp) -.L7F0C4914: -/* 0F9444 7F0C4914 AFA60050 */ sw $a2, 0x50($sp) -.L7F0C4918: -/* 0F9448 7F0C4918 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0F944C 7F0C491C 8FA90050 */ lw $t1, 0x50($sp) -/* 0F9450 7F0C4920 02202025 */ move $a0, $s1 -/* 0F9454 7F0C4924 02182821 */ addu $a1, $s0, $t8 -/* 0F9458 7F0C4928 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F945C 7F0C492C 24660046 */ addiu $a2, $v1, 0x46 -/* 0F9460 7F0C4930 8FA70094 */ lw $a3, 0x94($sp) -/* 0F9464 7F0C4934 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9468 7F0C4938 AFA90010 */ sw $t1, 0x10($sp) -/* 0F946C 7F0C493C 0C001145 */ jal viGetViewLeft -/* 0F9470 7F0C4940 00408825 */ move $s1, $v0 -/* 0F9474 7F0C4944 00028400 */ sll $s0, $v0, 0x10 -/* 0F9478 7F0C4948 00106403 */ sra $t4, $s0, 0x10 -/* 0F947C 7F0C494C 0C001149 */ jal viGetViewTop -/* 0F9480 7F0C4950 01808025 */ move $s0, $t4 -/* 0F9484 7F0C4954 8FA400D4 */ lw $a0, 0xd4($sp) -/* 0F9488 7F0C4958 00021C00 */ sll $v1, $v0, 0x10 -/* 0F948C 7F0C495C 00035C03 */ sra $t3, $v1, 0x10 -/* 0F9490 7F0C4960 24010001 */ li $at, 1 -/* 0F9494 7F0C4964 14810004 */ bne $a0, $at, .L7F0C4978 -/* 0F9498 7F0C4968 01601825 */ move $v1, $t3 -/* 0F949C 7F0C496C 8FAD008C */ lw $t5, 0x8c($sp) -/* 0F94A0 7F0C4970 1000000F */ b .L7F0C49B0 -/* 0F94A4 7F0C4974 AFAD0050 */ sw $t5, 0x50($sp) -.L7F0C4978: -/* 0F94A8 7F0C4978 0004C8C0 */ sll $t9, $a0, 3 -/* 0F94AC 7F0C497C 0324C823 */ subu $t9, $t9, $a0 -/* 0F94B0 7F0C4980 3C028008 */ lui $v0, %hi(g_playerPlayerData) -/* 0F94B4 7F0C4984 24429EF0 */ addiu $v0, %lo(g_playerPlayerData) # addiu $v0, $v0, -0x6110 -/* 0F94B8 7F0C4988 0019C900 */ sll $t9, $t9, 4 -/* 0F94BC 7F0C498C 00597821 */ addu $t7, $v0, $t9 -/* 0F94C0 7F0C4990 91EA0069 */ lbu $t2, 0x69($t7) -/* 0F94C4 7F0C4994 904E00D9 */ lbu $t6, 0xd9($v0) -/* 0F94C8 7F0C4998 8FA60084 */ lw $a2, 0x84($sp) -/* 0F94CC 7F0C499C 15CA0003 */ bne $t6, $t2, .L7F0C49AC -/* 0F94D0 7F0C49A0 00000000 */ nop -/* 0F94D4 7F0C49A4 10000001 */ b .L7F0C49AC -/* 0F94D8 7F0C49A8 8FA60088 */ lw $a2, 0x88($sp) -.L7F0C49AC: -/* 0F94DC 7F0C49AC AFA60050 */ sw $a2, 0x50($sp) -.L7F0C49B0: -/* 0F94E0 7F0C49B0 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0F94E4 7F0C49B4 8FA90050 */ lw $t1, 0x50($sp) -/* 0F94E8 7F0C49B8 02202025 */ move $a0, $s1 -/* 0F94EC 7F0C49BC 02182821 */ addu $a1, $s0, $t8 -/* 0F94F0 7F0C49C0 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F94F4 7F0C49C4 24660056 */ addiu $a2, $v1, 0x56 -/* 0F94F8 7F0C49C8 8FA70098 */ lw $a3, 0x98($sp) -/* 0F94FC 7F0C49CC 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9500 7F0C49D0 AFA90010 */ sw $t1, 0x10($sp) -/* 0F9504 7F0C49D4 1000009E */ b .L7F0C4C50 -/* 0F9508 7F0C49D8 00408825 */ move $s1, $v0 -.L7F0C49DC: -/* 0F950C 7F0C49DC 0C001145 */ jal viGetViewLeft -/* 0F9510 7F0C49E0 00000000 */ nop -/* 0F9514 7F0C49E4 00028400 */ sll $s0, $v0, 0x10 -/* 0F9518 7F0C49E8 00106403 */ sra $t4, $s0, 0x10 -/* 0F951C 7F0C49EC 0C001149 */ jal viGetViewTop -/* 0F9520 7F0C49F0 01808025 */ move $s0, $t4 -/* 0F9524 7F0C49F4 8FA800D4 */ lw $t0, 0xd4($sp) -/* 0F9528 7F0C49F8 00021C00 */ sll $v1, $v0, 0x10 -/* 0F952C 7F0C49FC 00035C03 */ sra $t3, $v1, 0x10 -/* 0F9530 7F0C4A00 15000004 */ bnez $t0, .L7F0C4A14 -/* 0F9534 7F0C4A04 01601825 */ move $v1, $t3 -/* 0F9538 7F0C4A08 8FAD008C */ lw $t5, 0x8c($sp) -/* 0F953C 7F0C4A0C 1000000F */ b .L7F0C4A4C -/* 0F9540 7F0C4A10 AFAD0050 */ sw $t5, 0x50($sp) -.L7F0C4A14: -/* 0F9544 7F0C4A14 000878C0 */ sll $t7, $t0, 3 -/* 0F9548 7F0C4A18 01E87823 */ subu $t7, $t7, $t0 -/* 0F954C 7F0C4A1C 000F7900 */ sll $t7, $t7, 4 -/* 0F9550 7F0C4A20 3C0E8008 */ lui $t6, %hi(g_playerPlayerData + 0x69) -/* 0F9554 7F0C4A24 01CF7021 */ addu $t6, $t6, $t7 -/* 0F9558 7F0C4A28 3C198008 */ lui $t9, %hi(g_playerPlayerData + 0x69) -/* 0F955C 7F0C4A2C 93399F59 */ lbu $t9, %lo(g_playerPlayerData + 0x69)($t9) -/* 0F9560 7F0C4A30 91CE9F59 */ lbu $t6, %lo(g_playerPlayerData + 0x69)($t6) -/* 0F9564 7F0C4A34 8FA60084 */ lw $a2, 0x84($sp) -/* 0F9568 7F0C4A38 172E0003 */ bne $t9, $t6, .L7F0C4A48 -/* 0F956C 7F0C4A3C 00000000 */ nop -/* 0F9570 7F0C4A40 10000001 */ b .L7F0C4A48 -/* 0F9574 7F0C4A44 8FA60088 */ lw $a2, 0x88($sp) -.L7F0C4A48: -/* 0F9578 7F0C4A48 AFA60050 */ sw $a2, 0x50($sp) -.L7F0C4A4C: -/* 0F957C 7F0C4A4C 8FAA00A8 */ lw $t2, 0xa8($sp) -/* 0F9580 7F0C4A50 8FB80050 */ lw $t8, 0x50($sp) -/* 0F9584 7F0C4A54 02202025 */ move $a0, $s1 -/* 0F9588 7F0C4A58 020A2821 */ addu $a1, $s0, $t2 -/* 0F958C 7F0C4A5C 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F9590 7F0C4A60 24660046 */ addiu $a2, $v1, 0x46 -/* 0F9594 7F0C4A64 8FA70094 */ lw $a3, 0x94($sp) -/* 0F9598 7F0C4A68 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F959C 7F0C4A6C AFB80010 */ sw $t8, 0x10($sp) -/* 0F95A0 7F0C4A70 0C001145 */ jal viGetViewLeft -/* 0F95A4 7F0C4A74 00408825 */ move $s1, $v0 -/* 0F95A8 7F0C4A78 00028400 */ sll $s0, $v0, 0x10 -/* 0F95AC 7F0C4A7C 00104C03 */ sra $t1, $s0, 0x10 -/* 0F95B0 7F0C4A80 0C001149 */ jal viGetViewTop -/* 0F95B4 7F0C4A84 01208025 */ move $s0, $t1 -/* 0F95B8 7F0C4A88 8FA800D4 */ lw $t0, 0xd4($sp) -/* 0F95BC 7F0C4A8C 00021C00 */ sll $v1, $v0, 0x10 -/* 0F95C0 7F0C4A90 00036403 */ sra $t4, $v1, 0x10 -/* 0F95C4 7F0C4A94 24010001 */ li $at, 1 -/* 0F95C8 7F0C4A98 15010004 */ bne $t0, $at, .L7F0C4AAC -/* 0F95CC 7F0C4A9C 01801825 */ move $v1, $t4 -/* 0F95D0 7F0C4AA0 8FAB008C */ lw $t3, 0x8c($sp) -/* 0F95D4 7F0C4AA4 1000000F */ b .L7F0C4AE4 -/* 0F95D8 7F0C4AA8 AFAB0050 */ sw $t3, 0x50($sp) -.L7F0C4AAC: -/* 0F95DC 7F0C4AAC 000878C0 */ sll $t7, $t0, 3 -/* 0F95E0 7F0C4AB0 01E87823 */ subu $t7, $t7, $t0 -/* 0F95E4 7F0C4AB4 000F7900 */ sll $t7, $t7, 4 -/* 0F95E8 7F0C4AB8 3C198008 */ lui $t9, %hi(g_playerPlayerData + 0x69) -/* 0F95EC 7F0C4ABC 032FC821 */ addu $t9, $t9, $t7 -/* 0F95F0 7F0C4AC0 3C0D8008 */ lui $t5, %hi(g_playerPlayerData+0x70 + 0x69) -/* 0F95F4 7F0C4AC4 91AD9FC9 */ lbu $t5, %lo(g_playerPlayerData+0x70 + 0x69)($t5) -/* 0F95F8 7F0C4AC8 93399F59 */ lbu $t9, %lo(g_playerPlayerData + 0x69)($t9) -/* 0F95FC 7F0C4ACC 8FA60084 */ lw $a2, 0x84($sp) -/* 0F9600 7F0C4AD0 15B90003 */ bne $t5, $t9, .L7F0C4AE0 -/* 0F9604 7F0C4AD4 00000000 */ nop -/* 0F9608 7F0C4AD8 10000001 */ b .L7F0C4AE0 -/* 0F960C 7F0C4ADC 8FA60088 */ lw $a2, 0x88($sp) -.L7F0C4AE0: -/* 0F9610 7F0C4AE0 AFA60050 */ sw $a2, 0x50($sp) -.L7F0C4AE4: -/* 0F9614 7F0C4AE4 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0F9618 7F0C4AE8 8FAA0050 */ lw $t2, 0x50($sp) -/* 0F961C 7F0C4AEC 02202025 */ move $a0, $s1 -/* 0F9620 7F0C4AF0 020E2821 */ addu $a1, $s0, $t6 -/* 0F9624 7F0C4AF4 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F9628 7F0C4AF8 24660046 */ addiu $a2, $v1, 0x46 -/* 0F962C 7F0C4AFC 8FA70098 */ lw $a3, 0x98($sp) -/* 0F9630 7F0C4B00 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9634 7F0C4B04 AFAA0010 */ sw $t2, 0x10($sp) -/* 0F9638 7F0C4B08 0C001145 */ jal viGetViewLeft -/* 0F963C 7F0C4B0C 00408825 */ move $s1, $v0 -/* 0F9640 7F0C4B10 00028400 */ sll $s0, $v0, 0x10 -/* 0F9644 7F0C4B14 0010C403 */ sra $t8, $s0, 0x10 -/* 0F9648 7F0C4B18 0C001149 */ jal viGetViewTop -/* 0F964C 7F0C4B1C 03008025 */ move $s0, $t8 -/* 0F9650 7F0C4B20 8FA800D4 */ lw $t0, 0xd4($sp) -/* 0F9654 7F0C4B24 00021C00 */ sll $v1, $v0, 0x10 -/* 0F9658 7F0C4B28 00034C03 */ sra $t1, $v1, 0x10 -/* 0F965C 7F0C4B2C 24010002 */ li $at, 2 -/* 0F9660 7F0C4B30 15010004 */ bne $t0, $at, .L7F0C4B44 -/* 0F9664 7F0C4B34 01201825 */ move $v1, $t1 -/* 0F9668 7F0C4B38 8FAC008C */ lw $t4, 0x8c($sp) -/* 0F966C 7F0C4B3C 1000000F */ b .L7F0C4B7C -/* 0F9670 7F0C4B40 AFAC0050 */ sw $t4, 0x50($sp) -.L7F0C4B44: -/* 0F9674 7F0C4B44 000878C0 */ sll $t7, $t0, 3 -/* 0F9678 7F0C4B48 01E87823 */ subu $t7, $t7, $t0 -/* 0F967C 7F0C4B4C 000F7900 */ sll $t7, $t7, 4 -/* 0F9680 7F0C4B50 3C0D8008 */ lui $t5, %hi(g_playerPlayerData + 0x69) -/* 0F9684 7F0C4B54 01AF6821 */ addu $t5, $t5, $t7 -/* 0F9688 7F0C4B58 3C0B8008 */ lui $t3, %hi(g_playerPlayerData+0x70+0x70 + 0x69) -/* 0F968C 7F0C4B5C 916BA039 */ lbu $t3, %lo(g_playerPlayerData+0x70+0x70 + 0x69)($t3) -/* 0F9690 7F0C4B60 91AD9F59 */ lbu $t5, %lo(g_playerPlayerData + 0x69)($t5) -/* 0F9694 7F0C4B64 8FA60084 */ lw $a2, 0x84($sp) -/* 0F9698 7F0C4B68 156D0003 */ bne $t3, $t5, .L7F0C4B78 -/* 0F969C 7F0C4B6C 00000000 */ nop -/* 0F96A0 7F0C4B70 10000001 */ b .L7F0C4B78 -/* 0F96A4 7F0C4B74 8FA60088 */ lw $a2, 0x88($sp) -.L7F0C4B78: -/* 0F96A8 7F0C4B78 AFA60050 */ sw $a2, 0x50($sp) -.L7F0C4B7C: -/* 0F96AC 7F0C4B7C 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F96B0 7F0C4B80 8FAE0050 */ lw $t6, 0x50($sp) -/* 0F96B4 7F0C4B84 02202025 */ move $a0, $s1 -/* 0F96B8 7F0C4B88 02192821 */ addu $a1, $s0, $t9 -/* 0F96BC 7F0C4B8C 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F96C0 7F0C4B90 24660056 */ addiu $a2, $v1, 0x56 -/* 0F96C4 7F0C4B94 8FA7009C */ lw $a3, 0x9c($sp) -/* 0F96C8 7F0C4B98 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F96CC 7F0C4B9C AFAE0010 */ sw $t6, 0x10($sp) -/* 0F96D0 7F0C4BA0 8FAA00D0 */ lw $t2, 0xd0($sp) -/* 0F96D4 7F0C4BA4 24010004 */ li $at, 4 -/* 0F96D8 7F0C4BA8 00408825 */ move $s1, $v0 -/* 0F96DC 7F0C4BAC 15410028 */ bne $t2, $at, .L7F0C4C50 -/* 0F96E0 7F0C4BB0 00000000 */ nop -/* 0F96E4 7F0C4BB4 0C001145 */ jal viGetViewLeft -/* 0F96E8 7F0C4BB8 00000000 */ nop -/* 0F96EC 7F0C4BBC 00028400 */ sll $s0, $v0, 0x10 -/* 0F96F0 7F0C4BC0 0010C403 */ sra $t8, $s0, 0x10 -/* 0F96F4 7F0C4BC4 0C001149 */ jal viGetViewTop -/* 0F96F8 7F0C4BC8 03008025 */ move $s0, $t8 -/* 0F96FC 7F0C4BCC 8FA400D4 */ lw $a0, 0xd4($sp) -/* 0F9700 7F0C4BD0 00021C00 */ sll $v1, $v0, 0x10 -/* 0F9704 7F0C4BD4 00034C03 */ sra $t1, $v1, 0x10 -/* 0F9708 7F0C4BD8 24010003 */ li $at, 3 -/* 0F970C 7F0C4BDC 14810004 */ bne $a0, $at, .L7F0C4BF0 -/* 0F9710 7F0C4BE0 01201825 */ move $v1, $t1 -/* 0F9714 7F0C4BE4 8FAC008C */ lw $t4, 0x8c($sp) -/* 0F9718 7F0C4BE8 1000000F */ b .L7F0C4C28 -/* 0F971C 7F0C4BEC AFAC0050 */ sw $t4, 0x50($sp) -.L7F0C4BF0: -/* 0F9720 7F0C4BF0 000458C0 */ sll $t3, $a0, 3 -/* 0F9724 7F0C4BF4 01645823 */ subu $t3, $t3, $a0 -/* 0F9728 7F0C4BF8 3C028008 */ lui $v0, %hi(g_playerPlayerData) -/* 0F972C 7F0C4BFC 24429EF0 */ addiu $v0, %lo(g_playerPlayerData) # addiu $v0, $v0, -0x6110 -/* 0F9730 7F0C4C00 000B5900 */ sll $t3, $t3, 4 -/* 0F9734 7F0C4C04 004B6821 */ addu $t5, $v0, $t3 -/* 0F9738 7F0C4C08 91B90069 */ lbu $t9, 0x69($t5) -/* 0F973C 7F0C4C0C 904F01B9 */ lbu $t7, 0x1b9($v0) -/* 0F9740 7F0C4C10 8FA60084 */ lw $a2, 0x84($sp) -/* 0F9744 7F0C4C14 15F90003 */ bne $t7, $t9, .L7F0C4C24 -/* 0F9748 7F0C4C18 00000000 */ nop -/* 0F974C 7F0C4C1C 10000001 */ b .L7F0C4C24 -/* 0F9750 7F0C4C20 8FA60088 */ lw $a2, 0x88($sp) -.L7F0C4C24: -/* 0F9754 7F0C4C24 AFA60050 */ sw $a2, 0x50($sp) -.L7F0C4C28: -/* 0F9758 7F0C4C28 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0F975C 7F0C4C2C 8FAA0050 */ lw $t2, 0x50($sp) -/* 0F9760 7F0C4C30 02202025 */ move $a0, $s1 -/* 0F9764 7F0C4C34 020E2821 */ addu $a1, $s0, $t6 -/* 0F9768 7F0C4C38 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F976C 7F0C4C3C 24660056 */ addiu $a2, $v1, 0x56 -/* 0F9770 7F0C4C40 8FA700A0 */ lw $a3, 0xa0($sp) -/* 0F9774 7F0C4C44 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9778 7F0C4C48 AFAA0010 */ sw $t2, 0x10($sp) -/* 0F977C 7F0C4C4C 00408825 */ move $s1, $v0 -.L7F0C4C50: -/* 0F9780 7F0C4C50 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0F9784 7F0C4C54 100003BB */ b .L7F0C5B44 -/* 0F9788 7F0C4C58 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0F978C 7F0C4C5C 24010002 */ li $at, 2 -.L7F0C4C60: -/* 0F9790 7F0C4C60 1441011C */ bne $v0, $at, .L7F0C50D4 -/* 0F9794 7F0C4C64 3C048009 */ lui $a0, %hi(g_gameOverFlag) -/* 0F9798 7F0C4C68 8C84C704 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0F979C 7F0C4C6C 2C980001 */ sltiu $t8, $a0, 1 -/* 0F97A0 7F0C4C70 13000005 */ beqz $t8, .L7F0C4C88 -/* 0F97A4 7F0C4C74 03002025 */ move $a0, $t8 -/* 0F97A8 7F0C4C78 3C048009 */ lui $a0, %hi(g_stopPlayFlag) -/* 0F97AC 7F0C4C7C 8C84C700 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0F97B0 7F0C4C80 2C890001 */ sltiu $t1, $a0, 1 -/* 0F97B4 7F0C4C84 01202025 */ move $a0, $t1 -.L7F0C4C88: -/* 0F97B8 7F0C4C88 0FC30FD7 */ jal mpwatchShouldDisplayRank -/* 0F97BC 7F0C4C8C 00000000 */ nop -/* 0F97C0 7F0C4C90 10400034 */ beqz $v0, .L7F0C4D64 -/* 0F97C4 7F0C4C94 27A400AC */ addiu $a0, $sp, 0xac -/* 0F97C8 7F0C4C98 0FC30F25 */ jal write_playerrank_to_buffer -/* 0F97CC 7F0C4C9C 8FA500D4 */ lw $a1, 0xd4($sp) -/* 0F97D0 7F0C4CA0 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) -/* 0F97D4 7F0C4CA4 8D8C0EAC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0F97D8 7F0C4CA8 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0F97DC 7F0C4CAC 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F97E0 7F0C4CB0 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F97E4 7F0C4CB4 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F97E8 7F0C4CB8 27A600AC */ addiu $a2, $sp, 0xac -/* 0F97EC 7F0C4CBC AFA00014 */ sw $zero, 0x14($sp) -/* 0F97F0 7F0C4CC0 0FC2BA63 */ jal textMeasure -/* 0F97F4 7F0C4CC4 AFAC0010 */ sw $t4, 0x10($sp) -/* 0F97F8 7F0C4CC8 0C001145 */ jal viGetViewLeft -/* 0F97FC 7F0C4CCC 00000000 */ nop -/* 0F9800 7F0C4CD0 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0F9804 7F0C4CD4 8FAF00C0 */ lw $t7, 0xc0($sp) -/* 0F9808 7F0C4CD8 004B6821 */ addu $t5, $v0, $t3 -/* 0F980C 7F0C4CDC 000FC843 */ sra $t9, $t7, 1 -/* 0F9810 7F0C4CE0 01B92023 */ subu $a0, $t5, $t9 -/* 0F9814 7F0C4CE4 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9818 7F0C4CE8 0C001149 */ jal viGetViewTop -/* 0F981C 7F0C4CEC AFA400CC */ sw $a0, 0xcc($sp) -/* 0F9820 7F0C4CF0 8FAE00BC */ lw $t6, 0xbc($sp) -/* 0F9824 7F0C4CF4 000E5043 */ sra $t2, $t6, 1 -/* 0F9828 7F0C4CF8 004AC023 */ subu $t8, $v0, $t2 -/* 0F982C 7F0C4CFC 27090025 */ addiu $t1, $t8, 0x25 -/* 0F9830 7F0C4D00 0C001107 */ jal viGetX -/* 0F9834 7F0C4D04 AFA900C8 */ sw $t1, 0xc8($sp) -/* 0F9838 7F0C4D08 00028400 */ sll $s0, $v0, 0x10 -/* 0F983C 7F0C4D0C 00106403 */ sra $t4, $s0, 0x10 -/* 0F9840 7F0C4D10 0C00110B */ jal viGetY -/* 0F9844 7F0C4D14 01808025 */ move $s0, $t4 -/* 0F9848 7F0C4D18 3C0B8004 */ lui $t3, %hi(ptrFontBankGothicChars) -/* 0F984C 7F0C4D1C 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) -/* 0F9850 7F0C4D20 8DEF0EAC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F9854 7F0C4D24 8D6B0EB0 */ lw $t3, %lo(ptrFontBankGothicChars)($t3) -/* 0F9858 7F0C4D28 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0F985C 7F0C4D2C 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0F9860 7F0C4D30 AFAD0018 */ sw $t5, 0x18($sp) -/* 0F9864 7F0C4D34 02202025 */ move $a0, $s1 -/* 0F9868 7F0C4D38 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F986C 7F0C4D3C 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9870 7F0C4D40 27A700AC */ addiu $a3, $sp, 0xac -/* 0F9874 7F0C4D44 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F9878 7F0C4D48 AFA20020 */ sw $v0, 0x20($sp) -/* 0F987C 7F0C4D4C AFA00024 */ sw $zero, 0x24($sp) -/* 0F9880 7F0C4D50 AFA00028 */ sw $zero, 0x28($sp) -/* 0F9884 7F0C4D54 AFAF0014 */ sw $t7, 0x14($sp) -/* 0F9888 7F0C4D58 0FC2B6AF */ jal textRender -/* 0F988C 7F0C4D5C AFAB0010 */ sw $t3, 0x10($sp) -/* 0F9890 7F0C4D60 00408825 */ move $s1, $v0 -.L7F0C4D64: -/* 0F9894 7F0C4D64 0FC30776 */ jal langGet -/* 0F9898 7F0C4D68 3404A01C */ li $a0, 40988 -/* 0F989C 7F0C4D6C 3404A01D */ li $a0, 40989 -/* 0F98A0 7F0C4D70 0FC30776 */ jal langGet -/* 0F98A4 7F0C4D74 AFA2004C */ sw $v0, 0x4c($sp) -/* 0F98A8 7F0C4D78 8FA700D4 */ lw $a3, 0xd4($sp) -/* 0F98AC 7F0C4D7C 3C058006 */ lui $a1, %hi(ascii_pnum_KILLS) -/* 0F98B0 7F0C4D80 24A5BC30 */ addiu $a1, %lo(ascii_pnum_KILLS) # addiu $a1, $a1, -0x43d0 -/* 0F98B4 7F0C4D84 8FA6004C */ lw $a2, 0x4c($sp) -/* 0F98B8 7F0C4D88 27A400AC */ addiu $a0, $sp, 0xac -/* 0F98BC 7F0C4D8C AFA20010 */ sw $v0, 0x10($sp) -/* 0F98C0 7F0C4D90 0C002B25 */ jal sprintf -/* 0F98C4 7F0C4D94 24E70001 */ addiu $a3, $a3, 1 -/* 0F98C8 7F0C4D98 3C198004 */ lui $t9, %hi(ptrFontBankGothic) -/* 0F98CC 7F0C4D9C 8F390EAC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0F98D0 7F0C4DA0 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0F98D4 7F0C4DA4 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F98D8 7F0C4DA8 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F98DC 7F0C4DAC 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F98E0 7F0C4DB0 27A600AC */ addiu $a2, $sp, 0xac -/* 0F98E4 7F0C4DB4 AFA00014 */ sw $zero, 0x14($sp) -/* 0F98E8 7F0C4DB8 0FC2BA63 */ jal textMeasure -/* 0F98EC 7F0C4DBC AFB90010 */ sw $t9, 0x10($sp) -/* 0F98F0 7F0C4DC0 0C001145 */ jal viGetViewLeft -/* 0F98F4 7F0C4DC4 00000000 */ nop -/* 0F98F8 7F0C4DC8 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0F98FC 7F0C4DCC 8FB800C0 */ lw $t8, 0xc0($sp) -/* 0F9900 7F0C4DD0 004E5021 */ addu $t2, $v0, $t6 -/* 0F9904 7F0C4DD4 00184843 */ sra $t1, $t8, 1 -/* 0F9908 7F0C4DD8 01492023 */ subu $a0, $t2, $t1 -/* 0F990C 7F0C4DDC 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9910 7F0C4DE0 0C001149 */ jal viGetViewTop -/* 0F9914 7F0C4DE4 AFA400CC */ sw $a0, 0xcc($sp) -/* 0F9918 7F0C4DE8 8FAC00BC */ lw $t4, 0xbc($sp) -/* 0F991C 7F0C4DEC 000C5843 */ sra $t3, $t4, 1 -/* 0F9920 7F0C4DF0 004B7823 */ subu $t7, $v0, $t3 -/* 0F9924 7F0C4DF4 25ED0035 */ addiu $t5, $t7, 0x35 -/* 0F9928 7F0C4DF8 0C001107 */ jal viGetX -/* 0F992C 7F0C4DFC AFAD00C8 */ sw $t5, 0xc8($sp) -/* 0F9930 7F0C4E00 00028400 */ sll $s0, $v0, 0x10 -/* 0F9934 7F0C4E04 0010CC03 */ sra $t9, $s0, 0x10 -/* 0F9938 7F0C4E08 0C00110B */ jal viGetY -/* 0F993C 7F0C4E0C 03208025 */ move $s0, $t9 -/* 0F9940 7F0C4E10 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) -/* 0F9944 7F0C4E14 3C188004 */ lui $t8, %hi(ptrFontBankGothic) -/* 0F9948 7F0C4E18 8F180EAC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0F994C 7F0C4E1C 8DCE0EB0 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0F9950 7F0C4E20 3C0A00FF */ lui $t2, (0x00FF00B0 >> 16) # lui $t2, 0xff -/* 0F9954 7F0C4E24 354A00B0 */ ori $t2, (0x00FF00B0 & 0xFFFF) # ori $t2, $t2, 0xb0 -/* 0F9958 7F0C4E28 AFAA0018 */ sw $t2, 0x18($sp) -/* 0F995C 7F0C4E2C 02202025 */ move $a0, $s1 -/* 0F9960 7F0C4E30 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F9964 7F0C4E34 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9968 7F0C4E38 27A700AC */ addiu $a3, $sp, 0xac -/* 0F996C 7F0C4E3C AFB0001C */ sw $s0, 0x1c($sp) -/* 0F9970 7F0C4E40 AFA20020 */ sw $v0, 0x20($sp) -/* 0F9974 7F0C4E44 AFA00024 */ sw $zero, 0x24($sp) -/* 0F9978 7F0C4E48 AFA00028 */ sw $zero, 0x28($sp) -/* 0F997C 7F0C4E4C AFB80014 */ sw $t8, 0x14($sp) -/* 0F9980 7F0C4E50 0FC2B6AF */ jal textRender -/* 0F9984 7F0C4E54 AFAE0010 */ sw $t6, 0x10($sp) -/* 0F9988 7F0C4E58 8FA900D0 */ lw $t1, 0xd0($sp) -/* 0F998C 7F0C4E5C 00408825 */ move $s1, $v0 -/* 0F9990 7F0C4E60 24010002 */ li $at, 2 -/* 0F9994 7F0C4E64 15210033 */ bne $t1, $at, .L7F0C4F34 -/* 0F9998 7F0C4E68 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0F999C 7F0C4E6C 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0F99A0 7F0C4E70 50400018 */ beql $v0, $zero, .L7F0C4ED4 -/* 0F99A4 7F0C4E74 24010001 */ li $at, 1 -/* 0F99A8 7F0C4E78 0C001145 */ jal viGetViewLeft -/* 0F99AC 7F0C4E7C 00000000 */ nop -/* 0F99B0 7F0C4E80 00028400 */ sll $s0, $v0, 0x10 -/* 0F99B4 7F0C4E84 00106403 */ sra $t4, $s0, 0x10 -/* 0F99B8 7F0C4E88 0C001149 */ jal viGetViewTop -/* 0F99BC 7F0C4E8C 01808025 */ move $s0, $t4 -/* 0F99C0 7F0C4E90 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0F99C4 7F0C4E94 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0F99C8 7F0C4E98 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0F99CC 7F0C4E9C 000F68C0 */ sll $t5, $t7, 3 -/* 0F99D0 7F0C4EA0 01AF6823 */ subu $t5, $t5, $t7 -/* 0F99D4 7F0C4EA4 000D6900 */ sll $t5, $t5, 4 -/* 0F99D8 7F0C4EA8 00ED3821 */ addu $a3, $a3, $t5 -/* 0F99DC 7F0C4EAC 020B2821 */ addu $a1, $s0, $t3 -/* 0F99E0 7F0C4EB0 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F99E4 7F0C4EB4 8CE79F14 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0F99E8 7F0C4EB8 02202025 */ move $a0, $s1 -/* 0F99EC 7F0C4EBC 24460046 */ addiu $a2, $v0, 0x46 -/* 0F99F0 7F0C4EC0 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F99F4 7F0C4EC4 AFA00010 */ sw $zero, 0x10($sp) -/* 0F99F8 7F0C4EC8 00408825 */ move $s1, $v0 -/* 0F99FC 7F0C4ECC 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0F9A00 7F0C4ED0 24010001 */ li $at, 1 -.L7F0C4ED4: -/* 0F9A04 7F0C4ED4 1041007C */ beq $v0, $at, .L7F0C50C8 -/* 0F9A08 7F0C4ED8 0002C8C0 */ sll $t9, $v0, 3 -/* 0F9A0C 7F0C4EDC 0322C823 */ subu $t9, $t9, $v0 -/* 0F9A10 7F0C4EE0 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) -/* 0F9A14 7F0C4EE4 25CE9EF0 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x6110 -/* 0F9A18 7F0C4EE8 0019C900 */ sll $t9, $t9, 4 -/* 0F9A1C 7F0C4EEC 032EC021 */ addu $t8, $t9, $t6 -/* 0F9A20 7F0C4EF0 0C001145 */ jal viGetViewLeft -/* 0F9A24 7F0C4EF4 AFB80044 */ sw $t8, 0x44($sp) -/* 0F9A28 7F0C4EF8 00028400 */ sll $s0, $v0, 0x10 -/* 0F9A2C 7F0C4EFC 00105403 */ sra $t2, $s0, 0x10 -/* 0F9A30 7F0C4F00 0C001149 */ jal viGetViewTop -/* 0F9A34 7F0C4F04 01408025 */ move $s0, $t2 -/* 0F9A38 7F0C4F08 8FA900A8 */ lw $t1, 0xa8($sp) -/* 0F9A3C 7F0C4F0C 8FAC0044 */ lw $t4, 0x44($sp) -/* 0F9A40 7F0C4F10 02202025 */ move $a0, $s1 -/* 0F9A44 7F0C4F14 02092821 */ addu $a1, $s0, $t1 -/* 0F9A48 7F0C4F18 8D870028 */ lw $a3, 0x28($t4) -/* 0F9A4C 7F0C4F1C AFA00010 */ sw $zero, 0x10($sp) -/* 0F9A50 7F0C4F20 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F9A54 7F0C4F24 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9A58 7F0C4F28 24460056 */ addiu $a2, $v0, 0x56 -/* 0F9A5C 7F0C4F2C 10000066 */ b .L7F0C50C8 -/* 0F9A60 7F0C4F30 00408825 */ move $s1, $v0 -.L7F0C4F34: -/* 0F9A64 7F0C4F34 50400018 */ beql $v0, $zero, .L7F0C4F98 -/* 0F9A68 7F0C4F38 24010001 */ li $at, 1 -/* 0F9A6C 7F0C4F3C 0C001145 */ jal viGetViewLeft -/* 0F9A70 7F0C4F40 00000000 */ nop -/* 0F9A74 7F0C4F44 00028400 */ sll $s0, $v0, 0x10 -/* 0F9A78 7F0C4F48 00105C03 */ sra $t3, $s0, 0x10 -/* 0F9A7C 7F0C4F4C 0C001149 */ jal viGetViewTop -/* 0F9A80 7F0C4F50 01608025 */ move $s0, $t3 -/* 0F9A84 7F0C4F54 8FAD00D4 */ lw $t5, 0xd4($sp) -/* 0F9A88 7F0C4F58 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0F9A8C 7F0C4F5C 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0F9A90 7F0C4F60 000DC8C0 */ sll $t9, $t5, 3 -/* 0F9A94 7F0C4F64 032DC823 */ subu $t9, $t9, $t5 -/* 0F9A98 7F0C4F68 0019C900 */ sll $t9, $t9, 4 -/* 0F9A9C 7F0C4F6C 00F93821 */ addu $a3, $a3, $t9 -/* 0F9AA0 7F0C4F70 020F2821 */ addu $a1, $s0, $t7 -/* 0F9AA4 7F0C4F74 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F9AA8 7F0C4F78 8CE79F14 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0F9AAC 7F0C4F7C 02202025 */ move $a0, $s1 -/* 0F9AB0 7F0C4F80 24460046 */ addiu $a2, $v0, 0x46 -/* 0F9AB4 7F0C4F84 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9AB8 7F0C4F88 AFA00010 */ sw $zero, 0x10($sp) -/* 0F9ABC 7F0C4F8C 00408825 */ move $s1, $v0 -/* 0F9AC0 7F0C4F90 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0F9AC4 7F0C4F94 24010001 */ li $at, 1 -.L7F0C4F98: -/* 0F9AC8 7F0C4F98 10410017 */ beq $v0, $at, .L7F0C4FF8 -/* 0F9ACC 7F0C4F9C 000270C0 */ sll $t6, $v0, 3 -/* 0F9AD0 7F0C4FA0 01C27023 */ subu $t6, $t6, $v0 -/* 0F9AD4 7F0C4FA4 3C188008 */ lui $t8, %hi(g_playerPlayerData) -/* 0F9AD8 7F0C4FA8 27189EF0 */ addiu $t8, %lo(g_playerPlayerData) # addiu $t8, $t8, -0x6110 -/* 0F9ADC 7F0C4FAC 000E7100 */ sll $t6, $t6, 4 -/* 0F9AE0 7F0C4FB0 01D85021 */ addu $t2, $t6, $t8 -/* 0F9AE4 7F0C4FB4 0C001145 */ jal viGetViewLeft -/* 0F9AE8 7F0C4FB8 AFAA0044 */ sw $t2, 0x44($sp) -/* 0F9AEC 7F0C4FBC 00028400 */ sll $s0, $v0, 0x10 -/* 0F9AF0 7F0C4FC0 00104C03 */ sra $t1, $s0, 0x10 -/* 0F9AF4 7F0C4FC4 0C001149 */ jal viGetViewTop -/* 0F9AF8 7F0C4FC8 01208025 */ move $s0, $t1 -/* 0F9AFC 7F0C4FCC 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0F9B00 7F0C4FD0 8FAB0044 */ lw $t3, 0x44($sp) -/* 0F9B04 7F0C4FD4 02202025 */ move $a0, $s1 -/* 0F9B08 7F0C4FD8 020C2821 */ addu $a1, $s0, $t4 -/* 0F9B0C 7F0C4FDC 8D670028 */ lw $a3, 0x28($t3) -/* 0F9B10 7F0C4FE0 AFA00010 */ sw $zero, 0x10($sp) -/* 0F9B14 7F0C4FE4 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F9B18 7F0C4FE8 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9B1C 7F0C4FEC 24460046 */ addiu $a2, $v0, 0x46 -/* 0F9B20 7F0C4FF0 00408825 */ move $s1, $v0 -/* 0F9B24 7F0C4FF4 8FA200D4 */ lw $v0, 0xd4($sp) -.L7F0C4FF8: -/* 0F9B28 7F0C4FF8 24010002 */ li $at, 2 -/* 0F9B2C 7F0C4FFC 10410017 */ beq $v0, $at, .L7F0C505C -/* 0F9B30 7F0C5000 000278C0 */ sll $t7, $v0, 3 -/* 0F9B34 7F0C5004 01E27823 */ subu $t7, $t7, $v0 -/* 0F9B38 7F0C5008 3C0D8008 */ lui $t5, %hi(g_playerPlayerData) -/* 0F9B3C 7F0C500C 25AD9EF0 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x6110 -/* 0F9B40 7F0C5010 000F7900 */ sll $t7, $t7, 4 -/* 0F9B44 7F0C5014 01EDC821 */ addu $t9, $t7, $t5 -/* 0F9B48 7F0C5018 0C001145 */ jal viGetViewLeft -/* 0F9B4C 7F0C501C AFB90044 */ sw $t9, 0x44($sp) -/* 0F9B50 7F0C5020 00028400 */ sll $s0, $v0, 0x10 -/* 0F9B54 7F0C5024 00107403 */ sra $t6, $s0, 0x10 -/* 0F9B58 7F0C5028 0C001149 */ jal viGetViewTop -/* 0F9B5C 7F0C502C 01C08025 */ move $s0, $t6 -/* 0F9B60 7F0C5030 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0F9B64 7F0C5034 8FAA0044 */ lw $t2, 0x44($sp) -/* 0F9B68 7F0C5038 02202025 */ move $a0, $s1 -/* 0F9B6C 7F0C503C 02182821 */ addu $a1, $s0, $t8 -/* 0F9B70 7F0C5040 8D47002C */ lw $a3, 0x2c($t2) -/* 0F9B74 7F0C5044 AFA00010 */ sw $zero, 0x10($sp) -/* 0F9B78 7F0C5048 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F9B7C 7F0C504C 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9B80 7F0C5050 24460056 */ addiu $a2, $v0, 0x56 -/* 0F9B84 7F0C5054 00408825 */ move $s1, $v0 -/* 0F9B88 7F0C5058 8FA200D4 */ lw $v0, 0xd4($sp) -.L7F0C505C: -/* 0F9B8C 7F0C505C 8FA900D0 */ lw $t1, 0xd0($sp) -/* 0F9B90 7F0C5060 24010004 */ li $at, 4 -/* 0F9B94 7F0C5064 15210018 */ bne $t1, $at, .L7F0C50C8 -/* 0F9B98 7F0C5068 24010003 */ li $at, 3 -/* 0F9B9C 7F0C506C 10410016 */ beq $v0, $at, .L7F0C50C8 -/* 0F9BA0 7F0C5070 000260C0 */ sll $t4, $v0, 3 -/* 0F9BA4 7F0C5074 01826023 */ subu $t4, $t4, $v0 -/* 0F9BA8 7F0C5078 3C0B8008 */ lui $t3, %hi(g_playerPlayerData) -/* 0F9BAC 7F0C507C 256B9EF0 */ addiu $t3, %lo(g_playerPlayerData) # addiu $t3, $t3, -0x6110 -/* 0F9BB0 7F0C5080 000C6100 */ sll $t4, $t4, 4 -/* 0F9BB4 7F0C5084 018B7821 */ addu $t7, $t4, $t3 -/* 0F9BB8 7F0C5088 0C001145 */ jal viGetViewLeft -/* 0F9BBC 7F0C508C AFAF0044 */ sw $t7, 0x44($sp) -/* 0F9BC0 7F0C5090 00028400 */ sll $s0, $v0, 0x10 -/* 0F9BC4 7F0C5094 00106C03 */ sra $t5, $s0, 0x10 -/* 0F9BC8 7F0C5098 0C001149 */ jal viGetViewTop -/* 0F9BCC 7F0C509C 01A08025 */ move $s0, $t5 -/* 0F9BD0 7F0C50A0 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F9BD4 7F0C50A4 8FAE0044 */ lw $t6, 0x44($sp) -/* 0F9BD8 7F0C50A8 02202025 */ move $a0, $s1 -/* 0F9BDC 7F0C50AC 02192821 */ addu $a1, $s0, $t9 -/* 0F9BE0 7F0C50B0 8DC70030 */ lw $a3, 0x30($t6) -/* 0F9BE4 7F0C50B4 AFA00010 */ sw $zero, 0x10($sp) -/* 0F9BE8 7F0C50B8 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F9BEC 7F0C50BC 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9BF0 7F0C50C0 24460056 */ addiu $a2, $v0, 0x56 -/* 0F9BF4 7F0C50C4 00408825 */ move $s1, $v0 -.L7F0C50C8: -/* 0F9BF8 7F0C50C8 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0F9BFC 7F0C50CC 1000029D */ b .L7F0C5B44 -/* 0F9C00 7F0C50D0 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -.L7F0C50D4: -/* 0F9C04 7F0C50D4 24010001 */ li $at, 1 -/* 0F9C08 7F0C50D8 144101A9 */ bne $v0, $at, .L7F0C5780 -/* 0F9C0C 7F0C50DC 3C048009 */ lui $a0, %hi(g_gameOverFlag) -/* 0F9C10 7F0C50E0 8C84C704 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0F9C14 7F0C50E4 2C980001 */ sltiu $t8, $a0, 1 -/* 0F9C18 7F0C50E8 13000005 */ beqz $t8, .L7F0C5100 -/* 0F9C1C 7F0C50EC 03002025 */ move $a0, $t8 -/* 0F9C20 7F0C50F0 3C048009 */ lui $a0, %hi(g_stopPlayFlag) -/* 0F9C24 7F0C50F4 8C84C700 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0F9C28 7F0C50F8 2C8A0001 */ sltiu $t2, $a0, 1 -/* 0F9C2C 7F0C50FC 01402025 */ move $a0, $t2 -.L7F0C5100: -/* 0F9C30 7F0C5100 0FC30FD7 */ jal mpwatchShouldDisplayRank -/* 0F9C34 7F0C5104 00000000 */ nop -/* 0F9C38 7F0C5108 10400034 */ beqz $v0, .L7F0C51DC -/* 0F9C3C 7F0C510C 27A400AC */ addiu $a0, $sp, 0xac -/* 0F9C40 7F0C5110 0FC30F25 */ jal write_playerrank_to_buffer -/* 0F9C44 7F0C5114 8FA500D4 */ lw $a1, 0xd4($sp) -/* 0F9C48 7F0C5118 3C098004 */ lui $t1, %hi(ptrFontBankGothic) -/* 0F9C4C 7F0C511C 8D290EAC */ lw $t1, %lo(ptrFontBankGothic)($t1) -/* 0F9C50 7F0C5120 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0F9C54 7F0C5124 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F9C58 7F0C5128 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F9C5C 7F0C512C 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F9C60 7F0C5130 27A600AC */ addiu $a2, $sp, 0xac -/* 0F9C64 7F0C5134 AFA00014 */ sw $zero, 0x14($sp) -/* 0F9C68 7F0C5138 0FC2BA63 */ jal textMeasure -/* 0F9C6C 7F0C513C AFA90010 */ sw $t1, 0x10($sp) -/* 0F9C70 7F0C5140 0C001145 */ jal viGetViewLeft -/* 0F9C74 7F0C5144 00000000 */ nop -/* 0F9C78 7F0C5148 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0F9C7C 7F0C514C 8FAF00C0 */ lw $t7, 0xc0($sp) -/* 0F9C80 7F0C5150 004C5821 */ addu $t3, $v0, $t4 -/* 0F9C84 7F0C5154 000F6843 */ sra $t5, $t7, 1 -/* 0F9C88 7F0C5158 016D2023 */ subu $a0, $t3, $t5 -/* 0F9C8C 7F0C515C 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9C90 7F0C5160 0C001149 */ jal viGetViewTop -/* 0F9C94 7F0C5164 AFA400CC */ sw $a0, 0xcc($sp) -/* 0F9C98 7F0C5168 8FB900BC */ lw $t9, 0xbc($sp) -/* 0F9C9C 7F0C516C 00197043 */ sra $t6, $t9, 1 -/* 0F9CA0 7F0C5170 004EC023 */ subu $t8, $v0, $t6 -/* 0F9CA4 7F0C5174 270A0025 */ addiu $t2, $t8, 0x25 -/* 0F9CA8 7F0C5178 0C001107 */ jal viGetX -/* 0F9CAC 7F0C517C AFAA00C8 */ sw $t2, 0xc8($sp) -/* 0F9CB0 7F0C5180 00028400 */ sll $s0, $v0, 0x10 -/* 0F9CB4 7F0C5184 00104C03 */ sra $t1, $s0, 0x10 -/* 0F9CB8 7F0C5188 0C00110B */ jal viGetY -/* 0F9CBC 7F0C518C 01208025 */ move $s0, $t1 -/* 0F9CC0 7F0C5190 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) -/* 0F9CC4 7F0C5194 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) -/* 0F9CC8 7F0C5198 8DEF0EAC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F9CCC 7F0C519C 8D8C0EB0 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F9CD0 7F0C51A0 3C0B00FF */ lui $t3, (0x00FF00B0 >> 16) # lui $t3, 0xff -/* 0F9CD4 7F0C51A4 356B00B0 */ ori $t3, (0x00FF00B0 & 0xFFFF) # ori $t3, $t3, 0xb0 -/* 0F9CD8 7F0C51A8 AFAB0018 */ sw $t3, 0x18($sp) -/* 0F9CDC 7F0C51AC 02202025 */ move $a0, $s1 -/* 0F9CE0 7F0C51B0 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F9CE4 7F0C51B4 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9CE8 7F0C51B8 27A700AC */ addiu $a3, $sp, 0xac -/* 0F9CEC 7F0C51BC AFB0001C */ sw $s0, 0x1c($sp) -/* 0F9CF0 7F0C51C0 AFA20020 */ sw $v0, 0x20($sp) -/* 0F9CF4 7F0C51C4 AFA00024 */ sw $zero, 0x24($sp) -/* 0F9CF8 7F0C51C8 AFA00028 */ sw $zero, 0x28($sp) -/* 0F9CFC 7F0C51CC AFAF0014 */ sw $t7, 0x14($sp) -/* 0F9D00 7F0C51D0 0FC2B6AF */ jal textRender -/* 0F9D04 7F0C51D4 AFAC0010 */ sw $t4, 0x10($sp) -/* 0F9D08 7F0C51D8 00408825 */ move $s1, $v0 -.L7F0C51DC: -/* 0F9D0C 7F0C51DC 0FC30776 */ jal langGet -/* 0F9D10 7F0C51E0 3404A01C */ li $a0, 40988 -/* 0F9D14 7F0C51E4 3404A01E */ li $a0, 40990 -/* 0F9D18 7F0C51E8 0FC30776 */ jal langGet -/* 0F9D1C 7F0C51EC AFA2004C */ sw $v0, 0x4c($sp) -/* 0F9D20 7F0C51F0 8FA700D4 */ lw $a3, 0xd4($sp) -/* 0F9D24 7F0C51F4 3C058006 */ lui $a1, %hi(ascii_pnum_LOSSES) -/* 0F9D28 7F0C51F8 24A5BC38 */ addiu $a1, %lo(ascii_pnum_LOSSES) # addiu $a1, $a1, -0x43c8 -/* 0F9D2C 7F0C51FC 8FA6004C */ lw $a2, 0x4c($sp) -/* 0F9D30 7F0C5200 27A400AC */ addiu $a0, $sp, 0xac -/* 0F9D34 7F0C5204 AFA20010 */ sw $v0, 0x10($sp) -/* 0F9D38 7F0C5208 0C002B25 */ jal sprintf -/* 0F9D3C 7F0C520C 24E70001 */ addiu $a3, $a3, 1 -/* 0F9D40 7F0C5210 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) -/* 0F9D44 7F0C5214 8DAD0EAC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0F9D48 7F0C5218 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0F9D4C 7F0C521C 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F9D50 7F0C5220 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F9D54 7F0C5224 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F9D58 7F0C5228 27A600AC */ addiu $a2, $sp, 0xac -/* 0F9D5C 7F0C522C AFA00014 */ sw $zero, 0x14($sp) -/* 0F9D60 7F0C5230 0FC2BA63 */ jal textMeasure -/* 0F9D64 7F0C5234 AFAD0010 */ sw $t5, 0x10($sp) -/* 0F9D68 7F0C5238 0C001145 */ jal viGetViewLeft -/* 0F9D6C 7F0C523C 00000000 */ nop -/* 0F9D70 7F0C5240 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F9D74 7F0C5244 8FB800C0 */ lw $t8, 0xc0($sp) -/* 0F9D78 7F0C5248 00597021 */ addu $t6, $v0, $t9 -/* 0F9D7C 7F0C524C 00185043 */ sra $t2, $t8, 1 -/* 0F9D80 7F0C5250 01CA2023 */ subu $a0, $t6, $t2 -/* 0F9D84 7F0C5254 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9D88 7F0C5258 0C001149 */ jal viGetViewTop -/* 0F9D8C 7F0C525C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F9D90 7F0C5260 8FA900BC */ lw $t1, 0xbc($sp) -/* 0F9D94 7F0C5264 00096043 */ sra $t4, $t1, 1 -/* 0F9D98 7F0C5268 004C7823 */ subu $t7, $v0, $t4 -/* 0F9D9C 7F0C526C 25EB0035 */ addiu $t3, $t7, 0x35 -/* 0F9DA0 7F0C5270 0C001107 */ jal viGetX -/* 0F9DA4 7F0C5274 AFAB00C8 */ sw $t3, 0xc8($sp) -/* 0F9DA8 7F0C5278 00028400 */ sll $s0, $v0, 0x10 -/* 0F9DAC 7F0C527C 00106C03 */ sra $t5, $s0, 0x10 -/* 0F9DB0 7F0C5280 0C00110B */ jal viGetY -/* 0F9DB4 7F0C5284 01A08025 */ move $s0, $t5 -/* 0F9DB8 7F0C5288 3C198004 */ lui $t9, %hi(ptrFontBankGothicChars) -/* 0F9DBC 7F0C528C 3C188004 */ lui $t8, %hi(ptrFontBankGothic) -/* 0F9DC0 7F0C5290 8F180EAC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0F9DC4 7F0C5294 8F390EB0 */ lw $t9, %lo(ptrFontBankGothicChars)($t9) -/* 0F9DC8 7F0C5298 3C0EFF40 */ lui $t6, (0xFF4040B0 >> 16) # lui $t6, 0xff40 -/* 0F9DCC 7F0C529C 35CE40B0 */ ori $t6, (0xFF4040B0 & 0xFFFF) # ori $t6, $t6, 0x40b0 -/* 0F9DD0 7F0C52A0 AFAE0018 */ sw $t6, 0x18($sp) -/* 0F9DD4 7F0C52A4 02202025 */ move $a0, $s1 -/* 0F9DD8 7F0C52A8 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F9DDC 7F0C52AC 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9DE0 7F0C52B0 27A700AC */ addiu $a3, $sp, 0xac -/* 0F9DE4 7F0C52B4 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F9DE8 7F0C52B8 AFA20020 */ sw $v0, 0x20($sp) -/* 0F9DEC 7F0C52BC AFA00024 */ sw $zero, 0x24($sp) -/* 0F9DF0 7F0C52C0 AFA00028 */ sw $zero, 0x28($sp) -/* 0F9DF4 7F0C52C4 AFB80014 */ sw $t8, 0x14($sp) -/* 0F9DF8 7F0C52C8 0FC2B6AF */ jal textRender -/* 0F9DFC 7F0C52CC AFB90010 */ sw $t9, 0x10($sp) -/* 0F9E00 7F0C52D0 8FAA00D0 */ lw $t2, 0xd0($sp) -/* 0F9E04 7F0C52D4 24010002 */ li $at, 2 -/* 0F9E08 7F0C52D8 00408825 */ move $s1, $v0 -/* 0F9E0C 7F0C52DC 15410062 */ bne $t2, $at, .L7F0C5468 -/* 0F9E10 7F0C52E0 8FB800D4 */ lw $t8, 0xd4($sp) -/* 0F9E14 7F0C52E4 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0F9E18 7F0C52E8 3C0D8008 */ lui $t5, %hi(g_playerPlayerData + 0x24) -/* 0F9E1C 7F0C52EC 10400016 */ beqz $v0, .L7F0C5348 -/* 0F9E20 7F0C52F0 00000000 */ nop -/* 0F9E24 7F0C52F4 0C001145 */ jal viGetViewLeft -/* 0F9E28 7F0C52F8 00000000 */ nop -/* 0F9E2C 7F0C52FC 00028400 */ sll $s0, $v0, 0x10 -/* 0F9E30 7F0C5300 00104C03 */ sra $t1, $s0, 0x10 -/* 0F9E34 7F0C5304 0C001149 */ jal viGetViewTop -/* 0F9E38 7F0C5308 01208025 */ move $s0, $t1 -/* 0F9E3C 7F0C530C 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0F9E40 7F0C5310 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0F9E44 7F0C5314 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0F9E48 7F0C5318 000F5880 */ sll $t3, $t7, 2 -/* 0F9E4C 7F0C531C 00EB3821 */ addu $a3, $a3, $t3 -/* 0F9E50 7F0C5320 020C2821 */ addu $a1, $s0, $t4 -/* 0F9E54 7F0C5324 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F9E58 7F0C5328 8CE79F14 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0F9E5C 7F0C532C 02202025 */ move $a0, $s1 -/* 0F9E60 7F0C5330 24460046 */ addiu $a2, $v0, 0x46 -/* 0F9E64 7F0C5334 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9E68 7F0C5338 AFA00010 */ sw $zero, 0x10($sp) -/* 0F9E6C 7F0C533C 00408825 */ move $s1, $v0 -/* 0F9E70 7F0C5340 10000019 */ b .L7F0C53A8 -/* 0F9E74 7F0C5344 8FA200D4 */ lw $v0, 0xd4($sp) -.L7F0C5348: -/* 0F9E78 7F0C5348 8DAD9F14 */ lw $t5, %lo(g_playerPlayerData + 0x24)($t5) -/* 0F9E7C 7F0C534C 59A00017 */ blezl $t5, .L7F0C53AC -/* 0F9E80 7F0C5350 24010001 */ li $at, 1 -/* 0F9E84 7F0C5354 0C001145 */ jal viGetViewLeft -/* 0F9E88 7F0C5358 00000000 */ nop -/* 0F9E8C 7F0C535C 00028400 */ sll $s0, $v0, 0x10 -/* 0F9E90 7F0C5360 0010CC03 */ sra $t9, $s0, 0x10 -/* 0F9E94 7F0C5364 0C001149 */ jal viGetViewTop -/* 0F9E98 7F0C5368 03208025 */ move $s0, $t9 -/* 0F9E9C 7F0C536C 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0F9EA0 7F0C5370 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0F9EA4 7F0C5374 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0F9EA8 7F0C5378 000E5080 */ sll $t2, $t6, 2 -/* 0F9EAC 7F0C537C 00EA3821 */ addu $a3, $a3, $t2 -/* 0F9EB0 7F0C5380 24090003 */ li $t1, 3 -/* 0F9EB4 7F0C5384 02182821 */ addu $a1, $s0, $t8 -/* 0F9EB8 7F0C5388 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F9EBC 7F0C538C AFA90010 */ sw $t1, 0x10($sp) -/* 0F9EC0 7F0C5390 8CE79F14 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0F9EC4 7F0C5394 02202025 */ move $a0, $s1 -/* 0F9EC8 7F0C5398 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9ECC 7F0C539C 24460046 */ addiu $a2, $v0, 0x46 -/* 0F9ED0 7F0C53A0 00408825 */ move $s1, $v0 -/* 0F9ED4 7F0C53A4 8FA200D4 */ lw $v0, 0xd4($sp) -.L7F0C53A8: -/* 0F9ED8 7F0C53A8 24010001 */ li $at, 1 -.L7F0C53AC: -/* 0F9EDC 7F0C53AC 10410016 */ beq $v0, $at, .L7F0C5408 -/* 0F9EE0 7F0C53B0 3C0E8008 */ lui $t6, %hi(g_playerPlayerData+0x70 + 0x28) -/* 0F9EE4 7F0C53B4 3C0F8008 */ lui $t7, %hi(g_playerPlayerData) -/* 0F9EE8 7F0C53B8 25EF9EF0 */ addiu $t7, %lo(g_playerPlayerData) # addiu $t7, $t7, -0x6110 -/* 0F9EEC 7F0C53BC 00026080 */ sll $t4, $v0, 2 -/* 0F9EF0 7F0C53C0 018F5821 */ addu $t3, $t4, $t7 -/* 0F9EF4 7F0C53C4 0C001145 */ jal viGetViewLeft -/* 0F9EF8 7F0C53C8 AFAB0044 */ sw $t3, 0x44($sp) -/* 0F9EFC 7F0C53CC 00028400 */ sll $s0, $v0, 0x10 -/* 0F9F00 7F0C53D0 00106C03 */ sra $t5, $s0, 0x10 -/* 0F9F04 7F0C53D4 0C001149 */ jal viGetViewTop -/* 0F9F08 7F0C53D8 01A08025 */ move $s0, $t5 -/* 0F9F0C 7F0C53DC 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F9F10 7F0C53E0 8FB80044 */ lw $t8, 0x44($sp) -/* 0F9F14 7F0C53E4 02202025 */ move $a0, $s1 -/* 0F9F18 7F0C53E8 02192821 */ addu $a1, $s0, $t9 -/* 0F9F1C 7F0C53EC 8F070094 */ lw $a3, 0x94($t8) -/* 0F9F20 7F0C53F0 AFA00010 */ sw $zero, 0x10($sp) -/* 0F9F24 7F0C53F4 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F9F28 7F0C53F8 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9F2C 7F0C53FC 24460056 */ addiu $a2, $v0, 0x56 -/* 0F9F30 7F0C5400 100000DC */ b .L7F0C5774 -/* 0F9F34 7F0C5404 00408825 */ move $s1, $v0 -.L7F0C5408: -/* 0F9F38 7F0C5408 8DCE9F88 */ lw $t6, %lo(g_playerPlayerData+0x70 + 0x28)($t6) -/* 0F9F3C 7F0C540C 3C098008 */ lui $t1, %hi(g_playerPlayerData) -/* 0F9F40 7F0C5410 25299EF0 */ addiu $t1, %lo(g_playerPlayerData) # addiu $t1, $t1, -0x6110 -/* 0F9F44 7F0C5414 19C000D7 */ blez $t6, .L7F0C5774 -/* 0F9F48 7F0C5418 00025080 */ sll $t2, $v0, 2 -/* 0F9F4C 7F0C541C 01496021 */ addu $t4, $t2, $t1 -/* 0F9F50 7F0C5420 0C001145 */ jal viGetViewLeft -/* 0F9F54 7F0C5424 AFAC0044 */ sw $t4, 0x44($sp) -/* 0F9F58 7F0C5428 00028400 */ sll $s0, $v0, 0x10 -/* 0F9F5C 7F0C542C 00107C03 */ sra $t7, $s0, 0x10 -/* 0F9F60 7F0C5430 0C001149 */ jal viGetViewTop -/* 0F9F64 7F0C5434 01E08025 */ move $s0, $t7 -/* 0F9F68 7F0C5438 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0F9F6C 7F0C543C 8FAD0044 */ lw $t5, 0x44($sp) -/* 0F9F70 7F0C5440 24190003 */ li $t9, 3 -/* 0F9F74 7F0C5444 020B2821 */ addu $a1, $s0, $t3 -/* 0F9F78 7F0C5448 8DA70094 */ lw $a3, 0x94($t5) -/* 0F9F7C 7F0C544C AFB90010 */ sw $t9, 0x10($sp) -/* 0F9F80 7F0C5450 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F9F84 7F0C5454 02202025 */ move $a0, $s1 -/* 0F9F88 7F0C5458 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9F8C 7F0C545C 24460056 */ addiu $a2, $v0, 0x56 -/* 0F9F90 7F0C5460 100000C4 */ b .L7F0C5774 -/* 0F9F94 7F0C5464 00408825 */ move $s1, $v0 -.L7F0C5468: -/* 0F9F98 7F0C5468 13000015 */ beqz $t8, .L7F0C54C0 -/* 0F9F9C 7F0C546C 3C0F8008 */ lui $t7, %hi(g_playerPlayerData + 0x24) -/* 0F9FA0 7F0C5470 0C001145 */ jal viGetViewLeft -/* 0F9FA4 7F0C5474 00000000 */ nop -/* 0F9FA8 7F0C5478 00028400 */ sll $s0, $v0, 0x10 -/* 0F9FAC 7F0C547C 00107403 */ sra $t6, $s0, 0x10 -/* 0F9FB0 7F0C5480 0C001149 */ jal viGetViewTop -/* 0F9FB4 7F0C5484 01C08025 */ move $s0, $t6 -/* 0F9FB8 7F0C5488 8FA900D4 */ lw $t1, 0xd4($sp) -/* 0F9FBC 7F0C548C 8FAA00A8 */ lw $t2, 0xa8($sp) -/* 0F9FC0 7F0C5490 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0F9FC4 7F0C5494 00096080 */ sll $t4, $t1, 2 -/* 0F9FC8 7F0C5498 00EC3821 */ addu $a3, $a3, $t4 -/* 0F9FCC 7F0C549C 020A2821 */ addu $a1, $s0, $t2 -/* 0F9FD0 7F0C54A0 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F9FD4 7F0C54A4 8CE79F14 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0F9FD8 7F0C54A8 02202025 */ move $a0, $s1 -/* 0F9FDC 7F0C54AC 24460046 */ addiu $a2, $v0, 0x46 -/* 0F9FE0 7F0C54B0 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0F9FE4 7F0C54B4 AFA00010 */ sw $zero, 0x10($sp) -/* 0F9FE8 7F0C54B8 10000018 */ b .L7F0C551C -/* 0F9FEC 7F0C54BC 00408825 */ move $s1, $v0 -.L7F0C54C0: -/* 0F9FF0 7F0C54C0 8DEF9F14 */ lw $t7, %lo(g_playerPlayerData + 0x24)($t7) -/* 0F9FF4 7F0C54C4 59E00016 */ blezl $t7, .L7F0C5520 -/* 0F9FF8 7F0C54C8 8FAA00D4 */ lw $t2, 0xd4($sp) -/* 0F9FFC 7F0C54CC 0C001145 */ jal viGetViewLeft -/* 0FA000 7F0C54D0 00000000 */ nop -/* 0FA004 7F0C54D4 00028400 */ sll $s0, $v0, 0x10 -/* 0FA008 7F0C54D8 00105C03 */ sra $t3, $s0, 0x10 -/* 0FA00C 7F0C54DC 0C001149 */ jal viGetViewTop -/* 0FA010 7F0C54E0 01608025 */ move $s0, $t3 -/* 0FA014 7F0C54E4 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0FA018 7F0C54E8 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0FA01C 7F0C54EC 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0FA020 7F0C54F0 0019C080 */ sll $t8, $t9, 2 -/* 0FA024 7F0C54F4 00F83821 */ addu $a3, $a3, $t8 -/* 0FA028 7F0C54F8 240E0003 */ li $t6, 3 -/* 0FA02C 7F0C54FC 020D2821 */ addu $a1, $s0, $t5 -/* 0FA030 7F0C5500 24A50040 */ addiu $a1, $a1, 0x40 -/* 0FA034 7F0C5504 AFAE0010 */ sw $t6, 0x10($sp) -/* 0FA038 7F0C5508 8CE79F14 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0FA03C 7F0C550C 02202025 */ move $a0, $s1 -/* 0FA040 7F0C5510 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA044 7F0C5514 24460046 */ addiu $a2, $v0, 0x46 -/* 0FA048 7F0C5518 00408825 */ move $s1, $v0 -.L7F0C551C: -/* 0FA04C 7F0C551C 8FAA00D4 */ lw $t2, 0xd4($sp) -.L7F0C5520: -/* 0FA050 7F0C5520 24010001 */ li $at, 1 -/* 0FA054 7F0C5524 3C188008 */ lui $t8, %hi(g_playerPlayerData+0x70 + 0x28) -/* 0FA058 7F0C5528 11410015 */ beq $t2, $at, .L7F0C5580 -/* 0FA05C 7F0C552C 000A4880 */ sll $t1, $t2, 2 -/* 0FA060 7F0C5530 3C0C8008 */ lui $t4, %hi(g_playerPlayerData) -/* 0FA064 7F0C5534 258C9EF0 */ addiu $t4, %lo(g_playerPlayerData) # addiu $t4, $t4, -0x6110 -/* 0FA068 7F0C5538 012C7821 */ addu $t7, $t1, $t4 -/* 0FA06C 7F0C553C 0C001145 */ jal viGetViewLeft -/* 0FA070 7F0C5540 AFAF0044 */ sw $t7, 0x44($sp) -/* 0FA074 7F0C5544 00028400 */ sll $s0, $v0, 0x10 -/* 0FA078 7F0C5548 00105C03 */ sra $t3, $s0, 0x10 -/* 0FA07C 7F0C554C 0C001149 */ jal viGetViewTop -/* 0FA080 7F0C5550 01608025 */ move $s0, $t3 -/* 0FA084 7F0C5554 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0FA088 7F0C5558 8FB90044 */ lw $t9, 0x44($sp) -/* 0FA08C 7F0C555C 02202025 */ move $a0, $s1 -/* 0FA090 7F0C5560 020D2821 */ addu $a1, $s0, $t5 -/* 0FA094 7F0C5564 8F270094 */ lw $a3, 0x94($t9) -/* 0FA098 7F0C5568 AFA00010 */ sw $zero, 0x10($sp) -/* 0FA09C 7F0C556C 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FA0A0 7F0C5570 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA0A4 7F0C5574 24460046 */ addiu $a2, $v0, 0x46 -/* 0FA0A8 7F0C5578 10000019 */ b .L7F0C55E0 -/* 0FA0AC 7F0C557C 00408825 */ move $s1, $v0 -.L7F0C5580: -/* 0FA0B0 7F0C5580 8F189F88 */ lw $t8, %lo(g_playerPlayerData+0x70 + 0x28)($t8) -/* 0FA0B4 7F0C5584 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0FA0B8 7F0C5588 3C098008 */ lui $t1, %hi(g_playerPlayerData) -/* 0FA0BC 7F0C558C 1B000014 */ blez $t8, .L7F0C55E0 -/* 0FA0C0 7F0C5590 000E5080 */ sll $t2, $t6, 2 -/* 0FA0C4 7F0C5594 25299EF0 */ addiu $t1, %lo(g_playerPlayerData) # addiu $t1, $t1, -0x6110 -/* 0FA0C8 7F0C5598 01496021 */ addu $t4, $t2, $t1 -/* 0FA0CC 7F0C559C 0C001145 */ jal viGetViewLeft -/* 0FA0D0 7F0C55A0 AFAC0044 */ sw $t4, 0x44($sp) -/* 0FA0D4 7F0C55A4 00028400 */ sll $s0, $v0, 0x10 -/* 0FA0D8 7F0C55A8 00107C03 */ sra $t7, $s0, 0x10 -/* 0FA0DC 7F0C55AC 0C001149 */ jal viGetViewTop -/* 0FA0E0 7F0C55B0 01E08025 */ move $s0, $t7 -/* 0FA0E4 7F0C55B4 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0FA0E8 7F0C55B8 8FAD0044 */ lw $t5, 0x44($sp) -/* 0FA0EC 7F0C55BC 24190003 */ li $t9, 3 -/* 0FA0F0 7F0C55C0 020B2821 */ addu $a1, $s0, $t3 -/* 0FA0F4 7F0C55C4 8DA70094 */ lw $a3, 0x94($t5) -/* 0FA0F8 7F0C55C8 AFB90010 */ sw $t9, 0x10($sp) -/* 0FA0FC 7F0C55CC 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FA100 7F0C55D0 02202025 */ move $a0, $s1 -/* 0FA104 7F0C55D4 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA108 7F0C55D8 24460046 */ addiu $a2, $v0, 0x46 -/* 0FA10C 7F0C55DC 00408825 */ move $s1, $v0 -.L7F0C55E0: -/* 0FA110 7F0C55E0 8FB800D4 */ lw $t8, 0xd4($sp) -/* 0FA114 7F0C55E4 24010002 */ li $at, 2 -/* 0FA118 7F0C55E8 3C0D8008 */ lui $t5, %hi(g_playerPlayerData+0x70+0x70 + 0x2C) -/* 0FA11C 7F0C55EC 13010015 */ beq $t8, $at, .L7F0C5644 -/* 0FA120 7F0C55F0 00187080 */ sll $t6, $t8, 2 -/* 0FA124 7F0C55F4 3C0A8008 */ lui $t2, %hi(g_playerPlayerData) -/* 0FA128 7F0C55F8 254A9EF0 */ addiu $t2, %lo(g_playerPlayerData) # addiu $t2, $t2, -0x6110 -/* 0FA12C 7F0C55FC 01CA4821 */ addu $t1, $t6, $t2 -/* 0FA130 7F0C5600 0C001145 */ jal viGetViewLeft -/* 0FA134 7F0C5604 AFA90044 */ sw $t1, 0x44($sp) -/* 0FA138 7F0C5608 00028400 */ sll $s0, $v0, 0x10 -/* 0FA13C 7F0C560C 00106403 */ sra $t4, $s0, 0x10 -/* 0FA140 7F0C5610 0C001149 */ jal viGetViewTop -/* 0FA144 7F0C5614 01808025 */ move $s0, $t4 -/* 0FA148 7F0C5618 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0FA14C 7F0C561C 8FAB0044 */ lw $t3, 0x44($sp) -/* 0FA150 7F0C5620 02202025 */ move $a0, $s1 -/* 0FA154 7F0C5624 020F2821 */ addu $a1, $s0, $t7 -/* 0FA158 7F0C5628 8D670104 */ lw $a3, 0x104($t3) -/* 0FA15C 7F0C562C AFA00010 */ sw $zero, 0x10($sp) -/* 0FA160 7F0C5630 24A50040 */ addiu $a1, $a1, 0x40 -/* 0FA164 7F0C5634 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA168 7F0C5638 24460056 */ addiu $a2, $v0, 0x56 -/* 0FA16C 7F0C563C 10000019 */ b .L7F0C56A4 -/* 0FA170 7F0C5640 00408825 */ move $s1, $v0 -.L7F0C5644: -/* 0FA174 7F0C5644 8DAD9FFC */ lw $t5, %lo(g_playerPlayerData+0x70+0x70 + 0x2C)($t5) -/* 0FA178 7F0C5648 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0FA17C 7F0C564C 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) -/* 0FA180 7F0C5650 19A00014 */ blez $t5, .L7F0C56A4 -/* 0FA184 7F0C5654 0019C080 */ sll $t8, $t9, 2 -/* 0FA188 7F0C5658 25CE9EF0 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x6110 -/* 0FA18C 7F0C565C 030E5021 */ addu $t2, $t8, $t6 -/* 0FA190 7F0C5660 0C001145 */ jal viGetViewLeft -/* 0FA194 7F0C5664 AFAA0044 */ sw $t2, 0x44($sp) -/* 0FA198 7F0C5668 00028400 */ sll $s0, $v0, 0x10 -/* 0FA19C 7F0C566C 00104C03 */ sra $t1, $s0, 0x10 -/* 0FA1A0 7F0C5670 0C001149 */ jal viGetViewTop -/* 0FA1A4 7F0C5674 01208025 */ move $s0, $t1 -/* 0FA1A8 7F0C5678 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0FA1AC 7F0C567C 8FAF0044 */ lw $t7, 0x44($sp) -/* 0FA1B0 7F0C5680 240B0003 */ li $t3, 3 -/* 0FA1B4 7F0C5684 020C2821 */ addu $a1, $s0, $t4 -/* 0FA1B8 7F0C5688 8DE70104 */ lw $a3, 0x104($t7) -/* 0FA1BC 7F0C568C AFAB0010 */ sw $t3, 0x10($sp) -/* 0FA1C0 7F0C5690 24A50040 */ addiu $a1, $a1, 0x40 -/* 0FA1C4 7F0C5694 02202025 */ move $a0, $s1 -/* 0FA1C8 7F0C5698 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA1CC 7F0C569C 24460056 */ addiu $a2, $v0, 0x56 -/* 0FA1D0 7F0C56A0 00408825 */ move $s1, $v0 -.L7F0C56A4: -/* 0FA1D4 7F0C56A4 8FAD00D0 */ lw $t5, 0xd0($sp) -/* 0FA1D8 7F0C56A8 24010004 */ li $at, 4 -/* 0FA1DC 7F0C56AC 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0FA1E0 7F0C56B0 15A10030 */ bne $t5, $at, .L7F0C5774 -/* 0FA1E4 7F0C56B4 24010003 */ li $at, 3 -/* 0FA1E8 7F0C56B8 13210016 */ beq $t9, $at, .L7F0C5714 -/* 0FA1EC 7F0C56BC 3C0B8008 */ lui $t3, %hi(g_playerPlayerData+0x70+0x70 + 0x30) -/* 0FA1F0 7F0C56C0 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) -/* 0FA1F4 7F0C56C4 25CE9EF0 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x6110 -/* 0FA1F8 7F0C56C8 0019C080 */ sll $t8, $t9, 2 -/* 0FA1FC 7F0C56CC 030E5021 */ addu $t2, $t8, $t6 -/* 0FA200 7F0C56D0 0C001145 */ jal viGetViewLeft -/* 0FA204 7F0C56D4 AFAA0044 */ sw $t2, 0x44($sp) -/* 0FA208 7F0C56D8 00028400 */ sll $s0, $v0, 0x10 -/* 0FA20C 7F0C56DC 00104C03 */ sra $t1, $s0, 0x10 -/* 0FA210 7F0C56E0 0C001149 */ jal viGetViewTop -/* 0FA214 7F0C56E4 01208025 */ move $s0, $t1 -/* 0FA218 7F0C56E8 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0FA21C 7F0C56EC 8FAF0044 */ lw $t7, 0x44($sp) -/* 0FA220 7F0C56F0 02202025 */ move $a0, $s1 -/* 0FA224 7F0C56F4 020C2821 */ addu $a1, $s0, $t4 -/* 0FA228 7F0C56F8 8DE70174 */ lw $a3, 0x174($t7) -/* 0FA22C 7F0C56FC AFA00010 */ sw $zero, 0x10($sp) -/* 0FA230 7F0C5700 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FA234 7F0C5704 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA238 7F0C5708 24460056 */ addiu $a2, $v0, 0x56 -/* 0FA23C 7F0C570C 10000019 */ b .L7F0C5774 -/* 0FA240 7F0C5710 00408825 */ move $s1, $v0 -.L7F0C5714: -/* 0FA244 7F0C5714 8D6BA070 */ lw $t3, %lo(g_playerPlayerData+0x70+0x70+0x70+0x30)($t3) -/* 0FA248 7F0C5718 8FAD00D4 */ lw $t5, 0xd4($sp) -/* 0FA24C 7F0C571C 3C188008 */ lui $t8, %hi(g_playerPlayerData) -/* 0FA250 7F0C5720 19600014 */ blez $t3, .L7F0C5774 -/* 0FA254 7F0C5724 000DC880 */ sll $t9, $t5, 2 -/* 0FA258 7F0C5728 27189EF0 */ addiu $t8, %lo(g_playerPlayerData) # addiu $t8, $t8, -0x6110 -/* 0FA25C 7F0C572C 03387021 */ addu $t6, $t9, $t8 -/* 0FA260 7F0C5730 0C001145 */ jal viGetViewLeft -/* 0FA264 7F0C5734 AFAE0044 */ sw $t6, 0x44($sp) -/* 0FA268 7F0C5738 00028400 */ sll $s0, $v0, 0x10 -/* 0FA26C 7F0C573C 00105403 */ sra $t2, $s0, 0x10 -/* 0FA270 7F0C5740 0C001149 */ jal viGetViewTop -/* 0FA274 7F0C5744 01408025 */ move $s0, $t2 -/* 0FA278 7F0C5748 8FA900A8 */ lw $t1, 0xa8($sp) -/* 0FA27C 7F0C574C 8FAC0044 */ lw $t4, 0x44($sp) -/* 0FA280 7F0C5750 240F0003 */ li $t7, 3 -/* 0FA284 7F0C5754 02092821 */ addu $a1, $s0, $t1 -/* 0FA288 7F0C5758 8D870174 */ lw $a3, 0x174($t4) -/* 0FA28C 7F0C575C AFAF0010 */ sw $t7, 0x10($sp) -/* 0FA290 7F0C5760 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FA294 7F0C5764 02202025 */ move $a0, $s1 -/* 0FA298 7F0C5768 0FC30D68 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA29C 7F0C576C 24460056 */ addiu $a2, $v0, 0x56 -/* 0FA2A0 7F0C5770 00408825 */ move $s1, $v0 -.L7F0C5774: -/* 0FA2A4 7F0C5774 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0FA2A8 7F0C5778 100000F2 */ b .L7F0C5B44 -/* 0FA2AC 7F0C577C 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -.L7F0C5780: -/* 0FA2B0 7F0C5780 544000F1 */ bnezl $v0, .L7F0C5B48 -/* 0FA2B4 7F0C5784 8C6F29C8 */ lw $t7, 0x29c8($v1) -/* 0FA2B8 7F0C5788 8FAD00D0 */ lw $t5, 0xd0($sp) -/* 0FA2BC 7F0C578C 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0FA2C0 7F0C5790 29A10003 */ slti $at, $t5, 3 -/* 0FA2C4 7F0C5794 1420000A */ bnez $at, .L7F0C57C0 -/* 0FA2C8 7F0C5798 AFAB0074 */ sw $t3, 0x74($sp) -/* 0FA2CC 7F0C579C 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0FA2D0 7F0C57A0 8FAA00A8 */ lw $t2, 0xa8($sp) -/* 0FA2D4 7F0C57A4 256EFFF9 */ addiu $t6, $t3, -7 -/* 0FA2D8 7F0C57A8 33380001 */ andi $t8, $t9, 1 -/* 0FA2DC 7F0C57AC 13000003 */ beqz $t8, .L7F0C57BC -/* 0FA2E0 7F0C57B0 25490007 */ addiu $t1, $t2, 7 -/* 0FA2E4 7F0C57B4 10000002 */ b .L7F0C57C0 -/* 0FA2E8 7F0C57B8 AFAE0074 */ sw $t6, 0x74($sp) -.L7F0C57BC: -/* 0FA2EC 7F0C57BC AFA90074 */ sw $t1, 0x74($sp) -.L7F0C57C0: -/* 0FA2F0 7F0C57C0 0FC30776 */ jal langGet -/* 0FA2F4 7F0C57C4 3404A01F */ li $a0, 40991 -/* 0FA2F8 7F0C57C8 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) -/* 0FA2FC 7F0C57CC 8D8C0EAC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0FA300 7F0C57D0 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0FA304 7F0C57D4 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0FA308 7F0C57D8 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FA30C 7F0C57DC 27A4007C */ addiu $a0, $sp, 0x7c -/* 0FA310 7F0C57E0 27A50078 */ addiu $a1, $sp, 0x78 -/* 0FA314 7F0C57E4 00403025 */ move $a2, $v0 -/* 0FA318 7F0C57E8 AFA00014 */ sw $zero, 0x14($sp) -/* 0FA31C 7F0C57EC 0FC2BA63 */ jal textMeasure -/* 0FA320 7F0C57F0 AFAC0010 */ sw $t4, 0x10($sp) -/* 0FA324 7F0C57F4 0C001145 */ jal viGetViewLeft -/* 0FA328 7F0C57F8 00000000 */ nop -/* 0FA32C 7F0C57FC 8FAF0074 */ lw $t7, 0x74($sp) -/* 0FA330 7F0C5800 8FB90078 */ lw $t9, 0x78($sp) -/* 0FA334 7F0C5804 004F6821 */ addu $t5, $v0, $t7 -/* 0FA338 7F0C5808 0019C043 */ sra $t8, $t9, 1 -/* 0FA33C 7F0C580C 01B82023 */ subu $a0, $t5, $t8 -/* 0FA340 7F0C5810 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA344 7F0C5814 0C001149 */ jal viGetViewTop -/* 0FA348 7F0C5818 AFA400CC */ sw $a0, 0xcc($sp) -/* 0FA34C 7F0C581C 8FAB007C */ lw $t3, 0x7c($sp) -/* 0FA350 7F0C5820 000B7043 */ sra $t6, $t3, 1 -/* 0FA354 7F0C5824 004E5023 */ subu $t2, $v0, $t6 -/* 0FA358 7F0C5828 25490025 */ addiu $t1, $t2, 0x25 -/* 0FA35C 7F0C582C 0C001107 */ jal viGetX -/* 0FA360 7F0C5830 AFA900C8 */ sw $t1, 0xc8($sp) -/* 0FA364 7F0C5834 00028400 */ sll $s0, $v0, 0x10 -/* 0FA368 7F0C5838 00106403 */ sra $t4, $s0, 0x10 -/* 0FA36C 7F0C583C 0C00110B */ jal viGetY -/* 0FA370 7F0C5840 01808025 */ move $s0, $t4 -/* 0FA374 7F0C5844 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) -/* 0FA378 7F0C5848 3C198004 */ lui $t9, %hi(ptrFontBankGothic) -/* 0FA37C 7F0C584C 8F390EAC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0FA380 7F0C5850 8DEF0EB0 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0FA384 7F0C5854 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0FA388 7F0C5858 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0FA38C 7F0C585C AFAD0018 */ sw $t5, 0x18($sp) -/* 0FA390 7F0C5860 02202025 */ move $a0, $s1 -/* 0FA394 7F0C5864 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FA398 7F0C5868 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA39C 7F0C586C 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FA3A0 7F0C5870 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FA3A4 7F0C5874 AFA20020 */ sw $v0, 0x20($sp) -/* 0FA3A8 7F0C5878 AFA00024 */ sw $zero, 0x24($sp) -/* 0FA3AC 7F0C587C AFA00028 */ sw $zero, 0x28($sp) -/* 0FA3B0 7F0C5880 AFB90014 */ sw $t9, 0x14($sp) -/* 0FA3B4 7F0C5884 0FC2B6AF */ jal textRender -/* 0FA3B8 7F0C5888 AFAF0010 */ sw $t7, 0x10($sp) -/* 0FA3BC 7F0C588C 00408825 */ move $s1, $v0 -/* 0FA3C0 7F0C5890 8FA400D4 */ lw $a0, 0xd4($sp) -/* 0FA3C4 7F0C5894 0FC026D4 */ jal frontGetPlayersFavoriteWeaponInHand -/* 0FA3C8 7F0C5898 00002825 */ move $a1, $zero -/* 0FA3CC 7F0C589C 3C188004 */ lui $t8, %hi(ptrFontBankGothic) -/* 0FA3D0 7F0C58A0 8F180EAC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0FA3D4 7F0C58A4 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0FA3D8 7F0C58A8 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0FA3DC 7F0C58AC 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FA3E0 7F0C58B0 27A4007C */ addiu $a0, $sp, 0x7c -/* 0FA3E4 7F0C58B4 27A50078 */ addiu $a1, $sp, 0x78 -/* 0FA3E8 7F0C58B8 00403025 */ move $a2, $v0 -/* 0FA3EC 7F0C58BC AFA00014 */ sw $zero, 0x14($sp) -/* 0FA3F0 7F0C58C0 0FC2BA63 */ jal textMeasure -/* 0FA3F4 7F0C58C4 AFB80010 */ sw $t8, 0x10($sp) -/* 0FA3F8 7F0C58C8 0C001145 */ jal viGetViewLeft -/* 0FA3FC 7F0C58CC 00000000 */ nop -/* 0FA400 7F0C58D0 8FAB0074 */ lw $t3, 0x74($sp) -/* 0FA404 7F0C58D4 8FAA0078 */ lw $t2, 0x78($sp) -/* 0FA408 7F0C58D8 004B7021 */ addu $t6, $v0, $t3 -/* 0FA40C 7F0C58DC 000A4843 */ sra $t1, $t2, 1 -/* 0FA410 7F0C58E0 01C92023 */ subu $a0, $t6, $t1 -/* 0FA414 7F0C58E4 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA418 7F0C58E8 0C001149 */ jal viGetViewTop -/* 0FA41C 7F0C58EC AFA400CC */ sw $a0, 0xcc($sp) -/* 0FA420 7F0C58F0 3C0F8005 */ lui $t7, %hi(j_text_trigger) -/* 0FA424 7F0C58F4 8DEF84D0 */ lw $t7, %lo(j_text_trigger)($t7) -/* 0FA428 7F0C58F8 00021C00 */ sll $v1, $v0, 0x10 -/* 0FA42C 7F0C58FC 00036403 */ sra $t4, $v1, 0x10 -/* 0FA430 7F0C5900 11E00003 */ beqz $t7, .L7F0C5910 -/* 0FA434 7F0C5904 01801825 */ move $v1, $t4 -/* 0FA438 7F0C5908 10000002 */ b .L7F0C5914 -/* 0FA43C 7F0C590C 24040004 */ li $a0, 4 -.L7F0C5910: -/* 0FA440 7F0C5910 00002025 */ move $a0, $zero -.L7F0C5914: -/* 0FA444 7F0C5914 8FAD007C */ lw $t5, 0x7c($sp) -/* 0FA448 7F0C5918 0083C821 */ addu $t9, $a0, $v1 -/* 0FA44C 7F0C591C 000DC043 */ sra $t8, $t5, 1 -/* 0FA450 7F0C5920 03385823 */ subu $t3, $t9, $t8 -/* 0FA454 7F0C5924 256A0035 */ addiu $t2, $t3, 0x35 -/* 0FA458 7F0C5928 0C001107 */ jal viGetX -/* 0FA45C 7F0C592C AFAA00C8 */ sw $t2, 0xc8($sp) -/* 0FA460 7F0C5930 00028400 */ sll $s0, $v0, 0x10 -/* 0FA464 7F0C5934 00107403 */ sra $t6, $s0, 0x10 -/* 0FA468 7F0C5938 0C00110B */ jal viGetY -/* 0FA46C 7F0C593C 01C08025 */ move $s0, $t6 -/* 0FA470 7F0C5940 3C098004 */ lui $t1, %hi(ptrFontBankGothicChars) -/* 0FA474 7F0C5944 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) -/* 0FA478 7F0C5948 8D8C0EAC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0FA47C 7F0C594C 8D290EB0 */ lw $t1, %lo(ptrFontBankGothicChars)($t1) -/* 0FA480 7F0C5950 3C0F00FF */ lui $t7, (0x00FF00B0 >> 16) # lui $t7, 0xff -/* 0FA484 7F0C5954 35EF00B0 */ ori $t7, (0x00FF00B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0FA488 7F0C5958 AFAF0018 */ sw $t7, 0x18($sp) -/* 0FA48C 7F0C595C 02202025 */ move $a0, $s1 -/* 0FA490 7F0C5960 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FA494 7F0C5964 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA498 7F0C5968 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FA49C 7F0C596C AFB0001C */ sw $s0, 0x1c($sp) -/* 0FA4A0 7F0C5970 AFA20020 */ sw $v0, 0x20($sp) -/* 0FA4A4 7F0C5974 AFA00024 */ sw $zero, 0x24($sp) -/* 0FA4A8 7F0C5978 AFA00028 */ sw $zero, 0x28($sp) -/* 0FA4AC 7F0C597C AFAC0014 */ sw $t4, 0x14($sp) -/* 0FA4B0 7F0C5980 0FC2B6AF */ jal textRender -/* 0FA4B4 7F0C5984 AFA90010 */ sw $t1, 0x10($sp) -/* 0FA4B8 7F0C5988 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0FA4BC 7F0C598C 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0FA4C0 7F0C5990 00408825 */ move $s1, $v0 -/* 0FA4C4 7F0C5994 27A4007C */ addiu $a0, $sp, 0x7c -/* 0FA4C8 7F0C5998 8C682A10 */ lw $t0, 0x2a10($v1) -/* 0FA4CC 7F0C599C 27A50078 */ addiu $a1, $sp, 0x78 -/* 0FA4D0 7F0C59A0 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0FA4D4 7F0C59A4 11000031 */ beqz $t0, .L7F0C5A6C -/* 0FA4D8 7F0C59A8 01003025 */ move $a2, $t0 -/* 0FA4DC 7F0C59AC 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) -/* 0FA4E0 7F0C59B0 8DAD0EAC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0FA4E4 7F0C59B4 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FA4E8 7F0C59B8 AFA00014 */ sw $zero, 0x14($sp) -/* 0FA4EC 7F0C59BC AFA800A4 */ sw $t0, 0xa4($sp) -/* 0FA4F0 7F0C59C0 0FC2BA63 */ jal textMeasure -/* 0FA4F4 7F0C59C4 AFAD0010 */ sw $t5, 0x10($sp) -/* 0FA4F8 7F0C59C8 0C001145 */ jal viGetViewLeft -/* 0FA4FC 7F0C59CC 00000000 */ nop -/* 0FA500 7F0C59D0 8FB90074 */ lw $t9, 0x74($sp) -/* 0FA504 7F0C59D4 8FAB0078 */ lw $t3, 0x78($sp) -/* 0FA508 7F0C59D8 0059C021 */ addu $t8, $v0, $t9 -/* 0FA50C 7F0C59DC 000B5043 */ sra $t2, $t3, 1 -/* 0FA510 7F0C59E0 030A2023 */ subu $a0, $t8, $t2 -/* 0FA514 7F0C59E4 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA518 7F0C59E8 0C001149 */ jal viGetViewTop -/* 0FA51C 7F0C59EC AFA400CC */ sw $a0, 0xcc($sp) -/* 0FA520 7F0C59F0 8FAE007C */ lw $t6, 0x7c($sp) -/* 0FA524 7F0C59F4 000E4843 */ sra $t1, $t6, 1 -/* 0FA528 7F0C59F8 00496023 */ subu $t4, $v0, $t1 -/* 0FA52C 7F0C59FC 258F004B */ addiu $t7, $t4, 0x4b -/* 0FA530 7F0C5A00 0C001107 */ jal viGetX -/* 0FA534 7F0C5A04 AFAF00C8 */ sw $t7, 0xc8($sp) -/* 0FA538 7F0C5A08 00028400 */ sll $s0, $v0, 0x10 -/* 0FA53C 7F0C5A0C 00106C03 */ sra $t5, $s0, 0x10 -/* 0FA540 7F0C5A10 0C00110B */ jal viGetY -/* 0FA544 7F0C5A14 01A08025 */ move $s0, $t5 -/* 0FA548 7F0C5A18 3C198004 */ lui $t9, %hi(ptrFontBankGothicChars) -/* 0FA54C 7F0C5A1C 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) -/* 0FA550 7F0C5A20 8D6B0EAC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0FA554 7F0C5A24 8F390EB0 */ lw $t9, %lo(ptrFontBankGothicChars)($t9) -/* 0FA558 7F0C5A28 3C1800FF */ lui $t8, (0x00FF00B0 >> 16) # lui $t8, 0xff -/* 0FA55C 7F0C5A2C 371800B0 */ ori $t8, (0x00FF00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0FA560 7F0C5A30 AFB80018 */ sw $t8, 0x18($sp) -/* 0FA564 7F0C5A34 02202025 */ move $a0, $s1 -/* 0FA568 7F0C5A38 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FA56C 7F0C5A3C 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA570 7F0C5A40 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FA574 7F0C5A44 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FA578 7F0C5A48 AFA20020 */ sw $v0, 0x20($sp) -/* 0FA57C 7F0C5A4C AFA00024 */ sw $zero, 0x24($sp) -/* 0FA580 7F0C5A50 AFA00028 */ sw $zero, 0x28($sp) -/* 0FA584 7F0C5A54 AFAB0014 */ sw $t3, 0x14($sp) -/* 0FA588 7F0C5A58 0FC2B6AF */ jal textRender -/* 0FA58C 7F0C5A5C AFB90010 */ sw $t9, 0x10($sp) -/* 0FA590 7F0C5A60 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0FA594 7F0C5A64 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0FA598 7F0C5A68 00408825 */ move $s1, $v0 -.L7F0C5A6C: -/* 0FA59C 7F0C5A6C 8C622A14 */ lw $v0, 0x2a14($v1) -/* 0FA5A0 7F0C5A70 27A4007C */ addiu $a0, $sp, 0x7c -/* 0FA5A4 7F0C5A74 27A50078 */ addiu $a1, $sp, 0x78 -/* 0FA5A8 7F0C5A78 10400032 */ beqz $v0, .L7F0C5B44 -/* 0FA5AC 7F0C5A7C 00403025 */ move $a2, $v0 -/* 0FA5B0 7F0C5A80 3C0A8004 */ lui $t2, %hi(ptrFontBankGothic) -/* 0FA5B4 7F0C5A84 8D4A0EAC */ lw $t2, %lo(ptrFontBankGothic)($t2) -/* 0FA5B8 7F0C5A88 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0FA5BC 7F0C5A8C 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FA5C0 7F0C5A90 AFA00014 */ sw $zero, 0x14($sp) -/* 0FA5C4 7F0C5A94 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0FA5C8 7F0C5A98 0FC2BA63 */ jal textMeasure -/* 0FA5CC 7F0C5A9C AFAA0010 */ sw $t2, 0x10($sp) -/* 0FA5D0 7F0C5AA0 0C001145 */ jal viGetViewLeft -/* 0FA5D4 7F0C5AA4 00000000 */ nop -/* 0FA5D8 7F0C5AA8 8FAE0074 */ lw $t6, 0x74($sp) -/* 0FA5DC 7F0C5AAC 8FAC0078 */ lw $t4, 0x78($sp) -/* 0FA5E0 7F0C5AB0 004E4821 */ addu $t1, $v0, $t6 -/* 0FA5E4 7F0C5AB4 000C7843 */ sra $t7, $t4, 1 -/* 0FA5E8 7F0C5AB8 012F2023 */ subu $a0, $t1, $t7 -/* 0FA5EC 7F0C5ABC 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA5F0 7F0C5AC0 0C001149 */ jal viGetViewTop -/* 0FA5F4 7F0C5AC4 AFA400CC */ sw $a0, 0xcc($sp) -/* 0FA5F8 7F0C5AC8 8FAD007C */ lw $t5, 0x7c($sp) -/* 0FA5FC 7F0C5ACC 000DC843 */ sra $t9, $t5, 1 -/* 0FA600 7F0C5AD0 00595823 */ subu $t3, $v0, $t9 -/* 0FA604 7F0C5AD4 25780058 */ addiu $t8, $t3, 0x58 -/* 0FA608 7F0C5AD8 0C001107 */ jal viGetX -/* 0FA60C 7F0C5ADC AFB800C8 */ sw $t8, 0xc8($sp) -/* 0FA610 7F0C5AE0 00028400 */ sll $s0, $v0, 0x10 -/* 0FA614 7F0C5AE4 00105403 */ sra $t2, $s0, 0x10 -/* 0FA618 7F0C5AE8 0C00110B */ jal viGetY -/* 0FA61C 7F0C5AEC 01408025 */ move $s0, $t2 -/* 0FA620 7F0C5AF0 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) -/* 0FA624 7F0C5AF4 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) -/* 0FA628 7F0C5AF8 8D8C0EAC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0FA62C 7F0C5AFC 8DCE0EB0 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0FA630 7F0C5B00 3C0900FF */ lui $t1, (0x00FF00B0 >> 16) # lui $t1, 0xff -/* 0FA634 7F0C5B04 352900B0 */ ori $t1, (0x00FF00B0 & 0xFFFF) # ori $t1, $t1, 0xb0 -/* 0FA638 7F0C5B08 AFA90018 */ sw $t1, 0x18($sp) -/* 0FA63C 7F0C5B0C 02202025 */ move $a0, $s1 -/* 0FA640 7F0C5B10 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FA644 7F0C5B14 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA648 7F0C5B18 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FA64C 7F0C5B1C AFB0001C */ sw $s0, 0x1c($sp) -/* 0FA650 7F0C5B20 AFA20020 */ sw $v0, 0x20($sp) -/* 0FA654 7F0C5B24 AFA00024 */ sw $zero, 0x24($sp) -/* 0FA658 7F0C5B28 AFA00028 */ sw $zero, 0x28($sp) -/* 0FA65C 7F0C5B2C AFAC0014 */ sw $t4, 0x14($sp) -/* 0FA660 7F0C5B30 0FC2B6AF */ jal textRender -/* 0FA664 7F0C5B34 AFAE0010 */ sw $t6, 0x10($sp) -/* 0FA668 7F0C5B38 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0FA66C 7F0C5B3C 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0FA670 7F0C5B40 00408825 */ move $s1, $v0 -.L7F0C5B44: -/* 0FA674 7F0C5B44 8C6F29C8 */ lw $t7, 0x29c8($v1) -.L7F0C5B48: -/* 0FA678 7F0C5B48 24010006 */ li $at, 6 -/* 0FA67C 7F0C5B4C 15E100B0 */ bne $t7, $at, .L7F0C5E10 -/* 0FA680 7F0C5B50 00000000 */ nop -/* 0FA684 7F0C5B54 0FC30776 */ jal langGet -/* 0FA688 7F0C5B58 3404A020 */ li $a0, 40992 -/* 0FA68C 7F0C5B5C 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) -/* 0FA690 7F0C5B60 8DAD0EAC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0FA694 7F0C5B64 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0FA698 7F0C5B68 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0FA69C 7F0C5B6C 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FA6A0 7F0C5B70 27A400BC */ addiu $a0, $sp, 0xbc -/* 0FA6A4 7F0C5B74 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0FA6A8 7F0C5B78 00403025 */ move $a2, $v0 -/* 0FA6AC 7F0C5B7C AFA00014 */ sw $zero, 0x14($sp) -/* 0FA6B0 7F0C5B80 0FC2BA63 */ jal textMeasure -/* 0FA6B4 7F0C5B84 AFAD0010 */ sw $t5, 0x10($sp) -/* 0FA6B8 7F0C5B88 0C001145 */ jal viGetViewLeft -/* 0FA6BC 7F0C5B8C 00000000 */ nop -/* 0FA6C0 7F0C5B90 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0FA6C4 7F0C5B94 8FB800C0 */ lw $t8, 0xc0($sp) -/* 0FA6C8 7F0C5B98 00595821 */ addu $t3, $v0, $t9 -/* 0FA6CC 7F0C5B9C 00185043 */ sra $t2, $t8, 1 -/* 0FA6D0 7F0C5BA0 016A2023 */ subu $a0, $t3, $t2 -/* 0FA6D4 7F0C5BA4 24840036 */ addiu $a0, $a0, 0x36 -/* 0FA6D8 7F0C5BA8 0C001149 */ jal viGetViewTop -/* 0FA6DC 7F0C5BAC AFA400CC */ sw $a0, 0xcc($sp) -/* 0FA6E0 7F0C5BB0 8FAE00BC */ lw $t6, 0xbc($sp) -/* 0FA6E4 7F0C5BB4 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) -/* 0FA6E8 7F0C5BB8 8DADA0B0 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 0FA6EC 7F0C5BBC 000E6043 */ sra $t4, $t6, 1 -/* 0FA6F0 7F0C5BC0 004C4823 */ subu $t1, $v0, $t4 -/* 0FA6F4 7F0C5BC4 252F0036 */ addiu $t7, $t1, 0x36 -/* 0FA6F8 7F0C5BC8 AFAF00C8 */ sw $t7, 0xc8($sp) -/* 0FA6FC 7F0C5BCC 8DB929CC */ lw $t9, 0x29cc($t5) -/* 0FA700 7F0C5BD0 1720001E */ bnez $t9, .L7F0C5C4C -/* 0FA704 7F0C5BD4 00000000 */ nop -/* 0FA708 7F0C5BD8 0C001107 */ jal viGetX -/* 0FA70C 7F0C5BDC 00000000 */ nop -/* 0FA710 7F0C5BE0 00028400 */ sll $s0, $v0, 0x10 -/* 0FA714 7F0C5BE4 0010C403 */ sra $t8, $s0, 0x10 -/* 0FA718 7F0C5BE8 0C00110B */ jal viGetY -/* 0FA71C 7F0C5BEC 03008025 */ move $s0, $t8 -/* 0FA720 7F0C5BF0 3C0B8004 */ lui $t3, %hi(ptrFontBankGothicChars) -/* 0FA724 7F0C5BF4 3C0A8004 */ lui $t2, %hi(ptrFontBankGothic) -/* 0FA728 7F0C5BF8 8D4A0EAC */ lw $t2, %lo(ptrFontBankGothic)($t2) -/* 0FA72C 7F0C5BFC 8D6B0EB0 */ lw $t3, %lo(ptrFontBankGothicChars)($t3) -/* 0FA730 7F0C5C00 3C0EA0FF */ lui $t6, (0xA0FFA0F0 >> 16) # lui $t6, 0xa0ff -/* 0FA734 7F0C5C04 3C0C0070 */ lui $t4, (0x007000A0 >> 16) # lui $t4, 0x70 -/* 0FA738 7F0C5C08 358C00A0 */ ori $t4, (0x007000A0 & 0xFFFF) # ori $t4, $t4, 0xa0 -/* 0FA73C 7F0C5C0C 35CEA0F0 */ ori $t6, (0xA0FFA0F0 & 0xFFFF) # ori $t6, $t6, 0xa0f0 -/* 0FA740 7F0C5C10 AFAE0018 */ sw $t6, 0x18($sp) -/* 0FA744 7F0C5C14 AFAC001C */ sw $t4, 0x1c($sp) -/* 0FA748 7F0C5C18 02202025 */ move $a0, $s1 -/* 0FA74C 7F0C5C1C 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FA750 7F0C5C20 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA754 7F0C5C24 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FA758 7F0C5C28 AFB00020 */ sw $s0, 0x20($sp) -/* 0FA75C 7F0C5C2C AFA20024 */ sw $v0, 0x24($sp) -/* 0FA760 7F0C5C30 AFA00028 */ sw $zero, 0x28($sp) -/* 0FA764 7F0C5C34 AFA0002C */ sw $zero, 0x2c($sp) -/* 0FA768 7F0C5C38 AFAA0014 */ sw $t2, 0x14($sp) -/* 0FA76C 7F0C5C3C 0FC2B9BB */ jal textRenderOutlined -/* 0FA770 7F0C5C40 AFAB0010 */ sw $t3, 0x10($sp) -/* 0FA774 7F0C5C44 1000001A */ b .L7F0C5CB0 -/* 0FA778 7F0C5C48 00408825 */ move $s1, $v0 -.L7F0C5C4C: -/* 0FA77C 7F0C5C4C 0C001107 */ jal viGetX -/* 0FA780 7F0C5C50 00000000 */ nop -/* 0FA784 7F0C5C54 00028400 */ sll $s0, $v0, 0x10 -/* 0FA788 7F0C5C58 00104C03 */ sra $t1, $s0, 0x10 -/* 0FA78C 7F0C5C5C 0C00110B */ jal viGetY -/* 0FA790 7F0C5C60 01208025 */ move $s0, $t1 -/* 0FA794 7F0C5C64 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) -/* 0FA798 7F0C5C68 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) -/* 0FA79C 7F0C5C6C 8DAD0EAC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0FA7A0 7F0C5C70 8DEF0EB0 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0FA7A4 7F0C5C74 3C1900FF */ lui $t9, (0x00FF00B0 >> 16) # lui $t9, 0xff -/* 0FA7A8 7F0C5C78 373900B0 */ ori $t9, (0x00FF00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0FA7AC 7F0C5C7C AFB90018 */ sw $t9, 0x18($sp) -/* 0FA7B0 7F0C5C80 02202025 */ move $a0, $s1 -/* 0FA7B4 7F0C5C84 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FA7B8 7F0C5C88 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA7BC 7F0C5C8C 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FA7C0 7F0C5C90 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FA7C4 7F0C5C94 AFA20020 */ sw $v0, 0x20($sp) -/* 0FA7C8 7F0C5C98 AFA00024 */ sw $zero, 0x24($sp) -/* 0FA7CC 7F0C5C9C AFA00028 */ sw $zero, 0x28($sp) -/* 0FA7D0 7F0C5CA0 AFAD0014 */ sw $t5, 0x14($sp) -/* 0FA7D4 7F0C5CA4 0FC2B6AF */ jal textRender -/* 0FA7D8 7F0C5CA8 AFAF0010 */ sw $t7, 0x10($sp) -/* 0FA7DC 7F0C5CAC 00408825 */ move $s1, $v0 -.L7F0C5CB0: -/* 0FA7E0 7F0C5CB0 0FC30776 */ jal langGet -/* 0FA7E4 7F0C5CB4 3404A021 */ li $a0, 40993 -/* 0FA7E8 7F0C5CB8 3C188004 */ lui $t8, %hi(ptrFontBankGothic) -/* 0FA7EC 7F0C5CBC 8F180EAC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0FA7F0 7F0C5CC0 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0FA7F4 7F0C5CC4 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0FA7F8 7F0C5CC8 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FA7FC 7F0C5CCC 27A400BC */ addiu $a0, $sp, 0xbc -/* 0FA800 7F0C5CD0 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0FA804 7F0C5CD4 00403025 */ move $a2, $v0 -/* 0FA808 7F0C5CD8 AFA00014 */ sw $zero, 0x14($sp) -/* 0FA80C 7F0C5CDC 0FC2BA63 */ jal textMeasure -/* 0FA810 7F0C5CE0 AFB80010 */ sw $t8, 0x10($sp) -/* 0FA814 7F0C5CE4 0C001145 */ jal viGetViewLeft -/* 0FA818 7F0C5CE8 00000000 */ nop -/* 0FA81C 7F0C5CEC 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0FA820 7F0C5CF0 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0FA824 7F0C5CF4 004B5021 */ addu $t2, $v0, $t3 -/* 0FA828 7F0C5CF8 000E6043 */ sra $t4, $t6, 1 -/* 0FA82C 7F0C5CFC 014C2023 */ subu $a0, $t2, $t4 -/* 0FA830 7F0C5D00 24840068 */ addiu $a0, $a0, 0x68 -/* 0FA834 7F0C5D04 0C001149 */ jal viGetViewTop -/* 0FA838 7F0C5D08 AFA400CC */ sw $a0, 0xcc($sp) -/* 0FA83C 7F0C5D0C 8FA900BC */ lw $t1, 0xbc($sp) -/* 0FA840 7F0C5D10 3C188008 */ lui $t8, %hi(g_CurrentPlayer) -/* 0FA844 7F0C5D14 8F18A0B0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0FA848 7F0C5D18 00097843 */ sra $t7, $t1, 1 -/* 0FA84C 7F0C5D1C 004F6823 */ subu $t5, $v0, $t7 -/* 0FA850 7F0C5D20 25B90036 */ addiu $t9, $t5, 0x36 -/* 0FA854 7F0C5D24 AFB900C8 */ sw $t9, 0xc8($sp) -/* 0FA858 7F0C5D28 8F0B29CC */ lw $t3, 0x29cc($t8) -/* 0FA85C 7F0C5D2C 24010001 */ li $at, 1 -/* 0FA860 7F0C5D30 1561001E */ bne $t3, $at, .L7F0C5DAC -/* 0FA864 7F0C5D34 00000000 */ nop -/* 0FA868 7F0C5D38 0C001107 */ jal viGetX -/* 0FA86C 7F0C5D3C 00000000 */ nop -/* 0FA870 7F0C5D40 00028400 */ sll $s0, $v0, 0x10 -/* 0FA874 7F0C5D44 00107403 */ sra $t6, $s0, 0x10 -/* 0FA878 7F0C5D48 0C00110B */ jal viGetY -/* 0FA87C 7F0C5D4C 01C08025 */ move $s0, $t6 -/* 0FA880 7F0C5D50 3C0A8004 */ lui $t2, %hi(ptrFontBankGothicChars) -/* 0FA884 7F0C5D54 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) -/* 0FA888 7F0C5D58 8D8C0EAC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0FA88C 7F0C5D5C 8D4A0EB0 */ lw $t2, %lo(ptrFontBankGothicChars)($t2) -/* 0FA890 7F0C5D60 3C09A0FF */ lui $t1, (0xA0FFA0F0 >> 16) # lui $t1, 0xa0ff -/* 0FA894 7F0C5D64 3C0F0070 */ lui $t7, (0x007000A0 >> 16) # lui $t7, 0x70 -/* 0FA898 7F0C5D68 35EF00A0 */ ori $t7, (0x007000A0 & 0xFFFF) # ori $t7, $t7, 0xa0 -/* 0FA89C 7F0C5D6C 3529A0F0 */ ori $t1, (0xA0FFA0F0 & 0xFFFF) # ori $t1, $t1, 0xa0f0 -/* 0FA8A0 7F0C5D70 AFA90018 */ sw $t1, 0x18($sp) -/* 0FA8A4 7F0C5D74 AFAF001C */ sw $t7, 0x1c($sp) -/* 0FA8A8 7F0C5D78 02202025 */ move $a0, $s1 -/* 0FA8AC 7F0C5D7C 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FA8B0 7F0C5D80 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA8B4 7F0C5D84 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FA8B8 7F0C5D88 AFB00020 */ sw $s0, 0x20($sp) -/* 0FA8BC 7F0C5D8C AFA20024 */ sw $v0, 0x24($sp) -/* 0FA8C0 7F0C5D90 AFA00028 */ sw $zero, 0x28($sp) -/* 0FA8C4 7F0C5D94 AFA0002C */ sw $zero, 0x2c($sp) -/* 0FA8C8 7F0C5D98 AFAC0014 */ sw $t4, 0x14($sp) -/* 0FA8CC 7F0C5D9C 0FC2B9BB */ jal textRenderOutlined -/* 0FA8D0 7F0C5DA0 AFAA0010 */ sw $t2, 0x10($sp) -/* 0FA8D4 7F0C5DA4 1000001A */ b .L7F0C5E10 -/* 0FA8D8 7F0C5DA8 00408825 */ move $s1, $v0 -.L7F0C5DAC: -/* 0FA8DC 7F0C5DAC 0C001107 */ jal viGetX -/* 0FA8E0 7F0C5DB0 00000000 */ nop -/* 0FA8E4 7F0C5DB4 00028400 */ sll $s0, $v0, 0x10 -/* 0FA8E8 7F0C5DB8 00106C03 */ sra $t5, $s0, 0x10 -/* 0FA8EC 7F0C5DBC 0C00110B */ jal viGetY -/* 0FA8F0 7F0C5DC0 01A08025 */ move $s0, $t5 -/* 0FA8F4 7F0C5DC4 3C198004 */ lui $t9, %hi(ptrFontBankGothicChars) -/* 0FA8F8 7F0C5DC8 3C188004 */ lui $t8, %hi(ptrFontBankGothic) -/* 0FA8FC 7F0C5DCC 8F180EAC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0FA900 7F0C5DD0 8F390EB0 */ lw $t9, %lo(ptrFontBankGothicChars)($t9) -/* 0FA904 7F0C5DD4 3C0B00FF */ lui $t3, (0x00FF00B0 >> 16) # lui $t3, 0xff -/* 0FA908 7F0C5DD8 356B00B0 */ ori $t3, (0x00FF00B0 & 0xFFFF) # ori $t3, $t3, 0xb0 -/* 0FA90C 7F0C5DDC AFAB0018 */ sw $t3, 0x18($sp) -/* 0FA910 7F0C5DE0 02202025 */ move $a0, $s1 -/* 0FA914 7F0C5DE4 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FA918 7F0C5DE8 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA91C 7F0C5DEC 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FA920 7F0C5DF0 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FA924 7F0C5DF4 AFA20020 */ sw $v0, 0x20($sp) -/* 0FA928 7F0C5DF8 AFA00024 */ sw $zero, 0x24($sp) -/* 0FA92C 7F0C5DFC AFA00028 */ sw $zero, 0x28($sp) -/* 0FA930 7F0C5E00 AFB80014 */ sw $t8, 0x14($sp) -/* 0FA934 7F0C5E04 0FC2B6AF */ jal textRender -/* 0FA938 7F0C5E08 AFB90010 */ sw $t9, 0x10($sp) -/* 0FA93C 7F0C5E0C 00408825 */ move $s1, $v0 -.L7F0C5E10: -/* 0FA940 7F0C5E10 0FC2B3BC */ jal combiner_bayer_lod_perspective -/* 0FA944 7F0C5E14 02202025 */ move $a0, $s1 -/* 0FA948 7F0C5E18 10000085 */ b .L7F0C6030 -/* 0FA94C 7F0C5E1C 00408825 */ move $s1, $v0 -/* 0FA950 7F0C5E20 8C6E00D8 */ lw $t6, 0xd8($v1) -.L7F0C5E24: -/* 0FA954 7F0C5E24 51C00083 */ beql $t6, $zero, .L7F0C6034 -/* 0FA958 7F0C5E28 02201025 */ move $v0, $s1 -/* 0FA95C 7F0C5E2C 8C6A0428 */ lw $t2, 0x428($v1) -/* 0FA960 7F0C5E30 51400080 */ beql $t2, $zero, .L7F0C6034 -/* 0FA964 7F0C5E34 02201025 */ move $v0, $s1 -/* 0FA968 7F0C5E38 8C6C0424 */ lw $t4, 0x424($v1) -/* 0FA96C 7F0C5E3C 3C098009 */ lui $t1, %hi(g_stopPlayFlag) -/* 0FA970 7F0C5E40 5180007C */ beql $t4, $zero, .L7F0C6034 -/* 0FA974 7F0C5E44 02201025 */ move $v0, $s1 -/* 0FA978 7F0C5E48 8D29C700 */ lw $t1, %lo(g_stopPlayFlag)($t1) -/* 0FA97C 7F0C5E4C 3C0F8009 */ lui $t7, %hi(g_gameOverFlag) -/* 0FA980 7F0C5E50 55200078 */ bnezl $t1, .L7F0C6034 -/* 0FA984 7F0C5E54 02201025 */ move $v0, $s1 -/* 0FA988 7F0C5E58 8DEFC704 */ lw $t7, %lo(g_gameOverFlag)($t7) -/* 0FA98C 7F0C5E5C 00002025 */ move $a0, $zero -/* 0FA990 7F0C5E60 55E00074 */ bnezl $t7, .L7F0C6034 -/* 0FA994 7F0C5E64 02201025 */ move $v0, $s1 -/* 0FA998 7F0C5E68 18400028 */ blez $v0, .L7F0C5F0C -/* 0FA99C 7F0C5E6C 00002825 */ move $a1, $zero -/* 0FA9A0 7F0C5E70 30470003 */ andi $a3, $v0, 3 -/* 0FA9A4 7F0C5E74 10E00011 */ beqz $a3, .L7F0C5EBC -/* 0FA9A8 7F0C5E78 00E03025 */ move $a2, $a3 -/* 0FA9AC 7F0C5E7C 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0FA9B0 7F0C5E80 000068C0 */ sll $t5, $zero, 3 -/* 0FA9B4 7F0C5E84 01A06823 */ subu $t5, $t5, $zero -/* 0FA9B8 7F0C5E88 000D6900 */ sll $t5, $t5, 4 -/* 0FA9BC 7F0C5E8C 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) -/* 0FA9C0 7F0C5E90 0019C080 */ sll $t8, $t9, 2 -/* 0FA9C4 7F0C5E94 01B85821 */ addu $t3, $t5, $t8 -/* 0FA9C8 7F0C5E98 25CE9EF0 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x6110 -/* 0FA9CC 7F0C5E9C 016E1821 */ addu $v1, $t3, $t6 -.L7F0C5EA0: -/* 0FA9D0 7F0C5EA0 8C6A0024 */ lw $t2, 0x24($v1) -/* 0FA9D4 7F0C5EA4 24A50001 */ addiu $a1, $a1, 1 -/* 0FA9D8 7F0C5EA8 24630070 */ addiu $v1, $v1, 0x70 -/* 0FA9DC 7F0C5EAC 14C5FFFC */ bne $a2, $a1, .L7F0C5EA0 -/* 0FA9E0 7F0C5EB0 008A2021 */ addu $a0, $a0, $t2 -/* 0FA9E4 7F0C5EB4 10A20015 */ beq $a1, $v0, .L7F0C5F0C -/* 0FA9E8 7F0C5EB8 00000000 */ nop -.L7F0C5EBC: -/* 0FA9EC 7F0C5EBC 8FA900D4 */ lw $t1, 0xd4($sp) -/* 0FA9F0 7F0C5EC0 000560C0 */ sll $t4, $a1, 3 -/* 0FA9F4 7F0C5EC4 01856023 */ subu $t4, $t4, $a1 -/* 0FA9F8 7F0C5EC8 000C6100 */ sll $t4, $t4, 4 -/* 0FA9FC 7F0C5ECC 3C0D8008 */ lui $t5, %hi(g_playerPlayerData) -/* 0FAA00 7F0C5ED0 00097880 */ sll $t7, $t1, 2 -/* 0FAA04 7F0C5ED4 018FC821 */ addu $t9, $t4, $t7 -/* 0FAA08 7F0C5ED8 25AD9EF0 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x6110 -/* 0FAA0C 7F0C5EDC 032D1821 */ addu $v1, $t9, $t5 -.L7F0C5EE0: -/* 0FAA10 7F0C5EE0 8C780024 */ lw $t8, 0x24($v1) -/* 0FAA14 7F0C5EE4 8C6B0094 */ lw $t3, 0x94($v1) -/* 0FAA18 7F0C5EE8 8C6E0104 */ lw $t6, 0x104($v1) -/* 0FAA1C 7F0C5EEC 00982021 */ addu $a0, $a0, $t8 -/* 0FAA20 7F0C5EF0 8C6A0174 */ lw $t2, 0x174($v1) -/* 0FAA24 7F0C5EF4 008B2021 */ addu $a0, $a0, $t3 -/* 0FAA28 7F0C5EF8 24A50004 */ addiu $a1, $a1, 4 -/* 0FAA2C 7F0C5EFC 008E2021 */ addu $a0, $a0, $t6 -/* 0FAA30 7F0C5F00 246301C0 */ addiu $v1, $v1, 0x1c0 -/* 0FAA34 7F0C5F04 14A8FFF6 */ bne $a1, $t0, .L7F0C5EE0 -/* 0FAA38 7F0C5F08 008A2021 */ addu $a0, $a0, $t2 -.L7F0C5F0C: -/* 0FAA3C 7F0C5F0C 0FC051D6 */ jal get_scenario -/* 0FAA40 7F0C5F10 AFA40058 */ sw $a0, 0x58($sp) -/* 0FAA44 7F0C5F14 24010001 */ li $at, 1 -/* 0FAA48 7F0C5F18 14410004 */ bne $v0, $at, .L7F0C5F2C -/* 0FAA4C 7F0C5F1C 8FA40058 */ lw $a0, 0x58($sp) -/* 0FAA50 7F0C5F20 28810002 */ slti $at, $a0, 2 -/* 0FAA54 7F0C5F24 50200043 */ beql $at, $zero, .L7F0C6034 -/* 0FAA58 7F0C5F28 02201025 */ move $v0, $s1 -.L7F0C5F2C: -/* 0FAA5C 7F0C5F2C 0FC2D3ED */ jal bgScissorCurrentPlayerViewDefault -/* 0FAA60 7F0C5F30 02202025 */ move $a0, $s1 -/* 0FAA64 7F0C5F34 0FC2B366 */ jal microcode_constructor -/* 0FAA68 7F0C5F38 00402025 */ move $a0, $v0 -/* 0FAA6C 7F0C5F3C 00408825 */ move $s1, $v0 -/* 0FAA70 7F0C5F40 0FC30776 */ jal langGet -/* 0FAA74 7F0C5F44 3404A022 */ li $a0, 40994 -/* 0FAA78 7F0C5F48 3C098004 */ lui $t1, %hi(ptrFontBankGothic) -/* 0FAA7C 7F0C5F4C 8D290EAC */ lw $t1, %lo(ptrFontBankGothic)($t1) -/* 0FAA80 7F0C5F50 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0FAA84 7F0C5F54 AFA20060 */ sw $v0, 0x60($sp) -/* 0FAA88 7F0C5F58 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FAA8C 7F0C5F5C 27A40064 */ addiu $a0, $sp, 0x64 -/* 0FAA90 7F0C5F60 27A50068 */ addiu $a1, $sp, 0x68 -/* 0FAA94 7F0C5F64 00403025 */ move $a2, $v0 -/* 0FAA98 7F0C5F68 AFA00014 */ sw $zero, 0x14($sp) -/* 0FAA9C 7F0C5F6C 0FC2BA63 */ jal textMeasure -/* 0FAAA0 7F0C5F70 AFA90010 */ sw $t1, 0x10($sp) -/* 0FAAA4 7F0C5F74 0C001145 */ jal viGetViewLeft -/* 0FAAA8 7F0C5F78 00000000 */ nop -/* 0FAAAC 7F0C5F7C 0C001127 */ jal viGetViewWidth -/* 0FAAB0 7F0C5F80 A7A20056 */ sh $v0, 0x56($sp) -/* 0FAAB4 7F0C5F84 87A30056 */ lh $v1, 0x56($sp) -/* 0FAAB8 7F0C5F88 8FAD0068 */ lw $t5, 0x68($sp) -/* 0FAABC 7F0C5F8C 00027843 */ sra $t7, $v0, 1 -/* 0FAAC0 7F0C5F90 01E3C821 */ addu $t9, $t7, $v1 -/* 0FAAC4 7F0C5F94 000DC043 */ sra $t8, $t5, 1 -/* 0FAAC8 7F0C5F98 03385823 */ subu $t3, $t9, $t8 -/* 0FAACC 7F0C5F9C 0C001149 */ jal viGetViewTop -/* 0FAAD0 7F0C5FA0 AFAB0070 */ sw $t3, 0x70($sp) -/* 0FAAD4 7F0C5FA4 0C00112B */ jal viGetViewHeight -/* 0FAAD8 7F0C5FA8 A7A20056 */ sh $v0, 0x56($sp) -/* 0FAADC 7F0C5FAC 87A30056 */ lh $v1, 0x56($sp) -/* 0FAAE0 7F0C5FB0 8FAC0064 */ lw $t4, 0x64($sp) -/* 0FAAE4 7F0C5FB4 00025043 */ sra $t2, $v0, 1 -/* 0FAAE8 7F0C5FB8 01434821 */ addu $t1, $t2, $v1 -/* 0FAAEC 7F0C5FBC 000C7843 */ sra $t7, $t4, 1 -/* 0FAAF0 7F0C5FC0 012F6823 */ subu $t5, $t1, $t7 -/* 0FAAF4 7F0C5FC4 0C001107 */ jal viGetX -/* 0FAAF8 7F0C5FC8 AFAD006C */ sw $t5, 0x6c($sp) -/* 0FAAFC 7F0C5FCC 00028400 */ sll $s0, $v0, 0x10 -/* 0FAB00 7F0C5FD0 0010CC03 */ sra $t9, $s0, 0x10 -/* 0FAB04 7F0C5FD4 0C00110B */ jal viGetY -/* 0FAB08 7F0C5FD8 03208025 */ move $s0, $t9 -/* 0FAB0C 7F0C5FDC 3C188004 */ lui $t8, %hi(ptrFontBankGothicChars) -/* 0FAB10 7F0C5FE0 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) -/* 0FAB14 7F0C5FE4 8D6B0EAC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0FAB18 7F0C5FE8 8F180EB0 */ lw $t8, %lo(ptrFontBankGothicChars)($t8) -/* 0FAB1C 7F0C5FEC 3C0E00FF */ lui $t6, (0x00FF00B0 >> 16) # lui $t6, 0xff -/* 0FAB20 7F0C5FF0 35CE00B0 */ ori $t6, (0x00FF00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0FAB24 7F0C5FF4 AFAE0018 */ sw $t6, 0x18($sp) -/* 0FAB28 7F0C5FF8 02202025 */ move $a0, $s1 -/* 0FAB2C 7F0C5FFC 27A50070 */ addiu $a1, $sp, 0x70 -/* 0FAB30 7F0C6000 27A6006C */ addiu $a2, $sp, 0x6c -/* 0FAB34 7F0C6004 8FA70060 */ lw $a3, 0x60($sp) -/* 0FAB38 7F0C6008 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FAB3C 7F0C600C AFA20020 */ sw $v0, 0x20($sp) -/* 0FAB40 7F0C6010 AFA00024 */ sw $zero, 0x24($sp) -/* 0FAB44 7F0C6014 AFA00028 */ sw $zero, 0x28($sp) -/* 0FAB48 7F0C6018 AFAB0014 */ sw $t3, 0x14($sp) -/* 0FAB4C 7F0C601C 0FC2B6AF */ jal textRender -/* 0FAB50 7F0C6020 AFB80010 */ sw $t8, 0x10($sp) -/* 0FAB54 7F0C6024 0FC2B3BC */ jal combiner_bayer_lod_perspective -/* 0FAB58 7F0C6028 00402025 */ move $a0, $v0 -/* 0FAB5C 7F0C602C 00408825 */ move $s1, $v0 -.L7F0C6030: -/* 0FAB60 7F0C6030 02201025 */ move $v0, $s1 -.L7F0C6034: -/* 0FAB64 7F0C6034 8FBF003C */ lw $ra, 0x3c($sp) -/* 0FAB68 7F0C6038 8FB00034 */ lw $s0, 0x34($sp) -/* 0FAB6C 7F0C603C 8FB10038 */ lw $s1, 0x38($sp) -/* 0FAB70 7F0C6040 03E00008 */ jr $ra -/* 0FAB74 7F0C6044 27BD00D8 */ addiu $sp, $sp, 0xd8 -.size mp_watch_menu_display, . - mp_watch_menu_display -) -#endif - -#ifdef VERSION_JP -GLOBAL_ASM( -.late_rodata - -/*D:8005BD00*/ -glabel jpt_MP_menu_window_text -.word text_play -.word text_play -.word text_play -.word text_play -.word text_pause_unpause -.word text_exit -.word text_exit -.word text_blank - -.text -glabel mp_watch_menu_display -/* 0F9844 7F0C4CD4 27BDFF28 */ addiu $sp, $sp, -0xd8 -/* 0F9848 7F0C4CD8 AFBF003C */ sw $ra, 0x3c($sp) -/* 0F984C 7F0C4CDC AFB10038 */ sw $s1, 0x38($sp) -/* 0F9850 7F0C4CE0 00808825 */ move $s1, $a0 -/* 0F9854 7F0C4CE4 0FC26F3C */ jal get_cur_playernum -/* 0F9858 7F0C4CE8 AFB00034 */ sw $s0, 0x34($sp) -/* 0F985C 7F0C4CEC 0FC26C01 */ jal getPlayerCount -/* 0F9860 7F0C4CF0 AFA200D4 */ sw $v0, 0xd4($sp) -/* 0F9864 7F0C4CF4 24010001 */ li $at, 1 -/* 0F9868 7F0C4CF8 00404025 */ move $t0, $v0 -/* 0F986C 7F0C4CFC 14410003 */ bne $v0, $at, .Ljp7F0C4D0C -/* 0F9870 7F0C4D00 00008025 */ move $s0, $zero -/* 0F9874 7F0C4D04 10000804 */ b .Ljp7F0C6D18 -/* 0F9878 7F0C4D08 02201025 */ move $v0, $s1 -.Ljp7F0C4D0C: -/* 0F987C 7F0C4D0C 3C038008 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8008 -/* 0F9880 7F0C4D10 8C63A120 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0F9884 7F0C4D14 02202025 */ move $a0, $s1 -/* 0F9888 7F0C4D18 8C6E29C4 */ lw $t6, 0x29c4($v1) -/* 0F988C 7F0C4D1C 51C0076D */ beql $t6, $zero, .Ljp7F0C6AD4 -/* 0F9890 7F0C4D20 8C6C00D8 */ lw $t4, 0xd8($v1) -/* 0F9894 7F0C4D24 0FC2B652 */ jal microcode_constructor -/* 0F9898 7F0C4D28 AFA800D0 */ sw $t0, 0xd0($sp) -/* 0F989C 7F0C4D2C 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0F98A0 7F0C4D30 24010002 */ li $at, 2 -/* 0F98A4 7F0C4D34 00408825 */ move $s1, $v0 -/* 0F98A8 7F0C4D38 15E10004 */ bne $t7, $at, .Ljp7F0C4D4C -/* 0F98AC 7F0C4D3C 3C198008 */ lui $t9, %hi(g_CurrentPlayer) # $t9, 0x8008 -/* 0F98B0 7F0C4D40 24180050 */ li $t8, 80 -/* 0F98B4 7F0C4D44 10000002 */ b .Ljp7F0C4D50 -/* 0F98B8 7F0C4D48 AFB800A8 */ sw $t8, 0xa8($sp) -.Ljp7F0C4D4C: -/* 0F98BC 7F0C4D4C AFA000A8 */ sw $zero, 0xa8($sp) -.Ljp7F0C4D50: -/* 0F98C0 7F0C4D50 8F39A120 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0F98C4 7F0C4D54 8F2B29C8 */ lw $t3, 0x29c8($t9) -/* 0F98C8 7F0C4D58 2D610008 */ sltiu $at, $t3, 8 -/* 0F98CC 7F0C4D5C 10200038 */ beqz $at, .Ljp7F0C4E40 -/* 0F98D0 7F0C4D60 000B5880 */ sll $t3, $t3, 2 -/* 0F98D4 7F0C4D64 3C018006 */ lui $at, %hi(jpt_MP_menu_window_text) -/* 0F98D8 7F0C4D68 002B0821 */ addu $at, $at, $t3 -/* 0F98DC 7F0C4D6C 8C2BBD40 */ lw $t3, %lo(jpt_MP_menu_window_text)($at) -/* 0F98E0 7F0C4D70 01600008 */ jr $t3 -/* 0F98E4 7F0C4D74 00000000 */ nop -text_play: -/* 0F98E8 7F0C4D78 3C0C8009 */ lui $t4, %hi(g_gameOverFlag) # $t4, 0x8009 -/* 0F98EC 7F0C4D7C 8D8CC774 */ lw $t4, %lo(g_gameOverFlag)($t4) -/* 0F98F0 7F0C4D80 3C0D8009 */ lui $t5, %hi(time_trigger_alt_gameover_msg) # $t5, 0x8009 -/* 0F98F4 7F0C4D84 15800005 */ bnez $t4, .Ljp7F0C4D9C -/* 0F98F8 7F0C4D88 00000000 */ nop -/* 0F98FC 7F0C4D8C 0FC30AA2 */ jal langGet -/* 0F9900 7F0C4D90 3404A015 */ li $a0, 40981 -/* 0F9904 7F0C4D94 1000002A */ b .Ljp7F0C4E40 -/* 0F9908 7F0C4D98 AFA200A4 */ sw $v0, 0xa4($sp) -.Ljp7F0C4D9C: -/* 0F990C 7F0C4D9C 8DADC780 */ lw $t5, %lo(time_trigger_alt_gameover_msg)($t5) -/* 0F9910 7F0C4DA0 11A00005 */ beqz $t5, .Ljp7F0C4DB8 -/* 0F9914 7F0C4DA4 00000000 */ nop -/* 0F9918 7F0C4DA8 0FC30AA2 */ jal langGet -/* 0F991C 7F0C4DAC 3404A016 */ li $a0, 40982 -/* 0F9920 7F0C4DB0 10000023 */ b .Ljp7F0C4E40 -/* 0F9924 7F0C4DB4 AFA200A4 */ sw $v0, 0xa4($sp) -.Ljp7F0C4DB8: -/* 0F9928 7F0C4DB8 0FC30AA2 */ jal langGet -/* 0F992C 7F0C4DBC 3404A017 */ li $a0, 40983 -/* 0F9930 7F0C4DC0 1000001F */ b .Ljp7F0C4E40 -/* 0F9934 7F0C4DC4 AFA200A4 */ sw $v0, 0xa4($sp) -text_blank: -/* 0F9938 7F0C4DC8 3C0E8006 */ lui $t6, %hi(ascii_MP_watch_menu_BLANK) # $t6, 0x8006 -/* 0F993C 7F0C4DCC 25CEBC64 */ addiu $t6, %lo(ascii_MP_watch_menu_BLANK) # addiu $t6, $t6, -0x439c -/* 0F9940 7F0C4DD0 1000001B */ b .Ljp7F0C4E40 -/* 0F9944 7F0C4DD4 AFAE00A4 */ sw $t6, 0xa4($sp) -text_pause_unpause: -/* 0F9948 7F0C4DD8 3C0F8009 */ lui $t7, %hi(g_pausedFlag) # $t7, 0x8009 -/* 0F994C 7F0C4DDC 8DEFC788 */ lw $t7, %lo(g_pausedFlag)($t7) -/* 0F9950 7F0C4DE0 11E0000B */ beqz $t7, .Ljp7F0C4E10 -/* 0F9954 7F0C4DE4 00000000 */ nop -/* 0F9958 7F0C4DE8 0FC30AA2 */ jal langGet -/* 0F995C 7F0C4DEC 3404A018 */ li $a0, 40984 -/* 0F9960 7F0C4DF0 0FC26F3C */ jal get_cur_playernum -/* 0F9964 7F0C4DF4 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F9968 7F0C4DF8 3C188009 */ lui $t8, %hi(who_paused) # $t8, 0x8009 -/* 0F996C 7F0C4DFC 8F18C78C */ lw $t8, %lo(who_paused)($t8) -/* 0F9970 7F0C4E00 1458000F */ bne $v0, $t8, .Ljp7F0C4E40 -/* 0F9974 7F0C4E04 00000000 */ nop -/* 0F9978 7F0C4E08 1000000D */ b .Ljp7F0C4E40 -/* 0F997C 7F0C4E0C 24100001 */ li $s0, 1 -.Ljp7F0C4E10: -/* 0F9980 7F0C4E10 0FC30AA2 */ jal langGet -/* 0F9984 7F0C4E14 3404A019 */ li $a0, 40985 -/* 0F9988 7F0C4E18 10000009 */ b .Ljp7F0C4E40 -/* 0F998C 7F0C4E1C AFA200A4 */ sw $v0, 0xa4($sp) -text_exit: -/* 0F9990 7F0C4E20 0FC30AA2 */ jal langGet -/* 0F9994 7F0C4E24 3404A01A */ li $a0, 40986 -/* 0F9998 7F0C4E28 0C001145 */ jal viGetViewLeft -/* 0F999C 7F0C4E2C AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F99A0 7F0C4E30 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F99A4 7F0C4E34 00592021 */ addu $a0, $v0, $t9 -/* 0F99A8 7F0C4E38 24840041 */ addiu $a0, $a0, 0x41 -/* 0F99AC 7F0C4E3C AFA400CC */ sw $a0, 0xcc($sp) -def_7F0C40C0: -.Ljp7F0C4E40: -/* 0F99B0 7F0C4E40 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0F99B4 7F0C4E44 8D6B0EDC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0F99B8 7F0C4E48 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F99BC 7F0C4E4C 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F99C0 7F0C4E50 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F99C4 7F0C4E54 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F99C8 7F0C4E58 8FA600A4 */ lw $a2, 0xa4($sp) -/* 0F99CC 7F0C4E5C AFA00014 */ sw $zero, 0x14($sp) -/* 0F99D0 7F0C4E60 0FC2BD4F */ jal textMeasure -/* 0F99D4 7F0C4E64 AFAB0010 */ sw $t3, 0x10($sp) -/* 0F99D8 7F0C4E68 0C001145 */ jal viGetViewLeft -/* 0F99DC 7F0C4E6C 00000000 */ nop -/* 0F99E0 7F0C4E70 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0F99E4 7F0C4E74 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0F99E8 7F0C4E78 004C6821 */ addu $t5, $v0, $t4 -/* 0F99EC 7F0C4E7C 000E7843 */ sra $t7, $t6, 1 -/* 0F99F0 7F0C4E80 01AF2023 */ subu $a0, $t5, $t7 -/* 0F99F4 7F0C4E84 24840050 */ addiu $a0, $a0, 0x50 -/* 0F99F8 7F0C4E88 0C001149 */ jal viGetViewTop -/* 0F99FC 7F0C4E8C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F9A00 7F0C4E90 8FB800BC */ lw $t8, 0xbc($sp) -/* 0F9A04 7F0C4E94 0018C843 */ sra $t9, $t8, 1 -/* 0F9A08 7F0C4E98 00595823 */ subu $t3, $v0, $t9 -/* 0F9A0C 7F0C4E9C 256C0016 */ addiu $t4, $t3, 0x16 -/* 0F9A10 7F0C4EA0 1200001E */ beqz $s0, .Ljp7F0C4F1C -/* 0F9A14 7F0C4EA4 AFAC00C8 */ sw $t4, 0xc8($sp) -/* 0F9A18 7F0C4EA8 0C001107 */ jal viGetX -/* 0F9A1C 7F0C4EAC 00000000 */ nop -/* 0F9A20 7F0C4EB0 00028400 */ sll $s0, $v0, 0x10 -/* 0F9A24 7F0C4EB4 00107403 */ sra $t6, $s0, 0x10 -/* 0F9A28 7F0C4EB8 0C00110B */ jal viGetY -/* 0F9A2C 7F0C4EBC 01C08025 */ move $s0, $t6 -/* 0F9A30 7F0C4EC0 3C0D8004 */ lui $t5, %hi(ptrFontBankGothicChars) # $t5, 0x8004 -/* 0F9A34 7F0C4EC4 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0F9A38 7F0C4EC8 8DEF0EDC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F9A3C 7F0C4ECC 8DAD0EE0 */ lw $t5, %lo(ptrFontBankGothicChars)($t5) -/* 0F9A40 7F0C4ED0 3C18A0FF */ lui $t8, (0xA0FFA0F0 >> 16) # lui $t8, 0xa0ff -/* 0F9A44 7F0C4ED4 3C190070 */ lui $t9, (0x007000A0 >> 16) # lui $t9, 0x70 -/* 0F9A48 7F0C4ED8 373900A0 */ ori $t9, (0x007000A0 & 0xFFFF) # ori $t9, $t9, 0xa0 -/* 0F9A4C 7F0C4EDC 3718A0F0 */ ori $t8, (0xA0FFA0F0 & 0xFFFF) # ori $t8, $t8, 0xa0f0 -/* 0F9A50 7F0C4EE0 AFB80018 */ sw $t8, 0x18($sp) -/* 0F9A54 7F0C4EE4 AFB9001C */ sw $t9, 0x1c($sp) -/* 0F9A58 7F0C4EE8 02202025 */ move $a0, $s1 -/* 0F9A5C 7F0C4EEC 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F9A60 7F0C4EF0 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9A64 7F0C4EF4 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F9A68 7F0C4EF8 AFB00020 */ sw $s0, 0x20($sp) -/* 0F9A6C 7F0C4EFC AFA20024 */ sw $v0, 0x24($sp) -/* 0F9A70 7F0C4F00 AFA00028 */ sw $zero, 0x28($sp) -/* 0F9A74 7F0C4F04 AFA0002C */ sw $zero, 0x2c($sp) -/* 0F9A78 7F0C4F08 AFAF0014 */ sw $t7, 0x14($sp) -/* 0F9A7C 7F0C4F0C 0FC2BCA7 */ jal textRenderOutlined -/* 0F9A80 7F0C4F10 AFAD0010 */ sw $t5, 0x10($sp) -/* 0F9A84 7F0C4F14 1000001A */ b .Ljp7F0C4F80 -/* 0F9A88 7F0C4F18 00408825 */ move $s1, $v0 -.Ljp7F0C4F1C: -/* 0F9A8C 7F0C4F1C 0C001107 */ jal viGetX -/* 0F9A90 7F0C4F20 00000000 */ nop -/* 0F9A94 7F0C4F24 00028400 */ sll $s0, $v0, 0x10 -/* 0F9A98 7F0C4F28 00105C03 */ sra $t3, $s0, 0x10 -/* 0F9A9C 7F0C4F2C 0C00110B */ jal viGetY -/* 0F9AA0 7F0C4F30 01608025 */ move $s0, $t3 -/* 0F9AA4 7F0C4F34 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0F9AA8 7F0C4F38 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) # $t6, 0x8004 -/* 0F9AAC 7F0C4F3C 8DCE0EDC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0F9AB0 7F0C4F40 8D8C0EE0 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F9AB4 7F0C4F44 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0F9AB8 7F0C4F48 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0F9ABC 7F0C4F4C AFAD0018 */ sw $t5, 0x18($sp) -/* 0F9AC0 7F0C4F50 02202025 */ move $a0, $s1 -/* 0F9AC4 7F0C4F54 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F9AC8 7F0C4F58 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9ACC 7F0C4F5C 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F9AD0 7F0C4F60 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F9AD4 7F0C4F64 AFA20020 */ sw $v0, 0x20($sp) -/* 0F9AD8 7F0C4F68 AFA00024 */ sw $zero, 0x24($sp) -/* 0F9ADC 7F0C4F6C AFA00028 */ sw $zero, 0x28($sp) -/* 0F9AE0 7F0C4F70 AFAE0014 */ sw $t6, 0x14($sp) -/* 0F9AE4 7F0C4F74 0FC2B99B */ jal textRender -/* 0F9AE8 7F0C4F78 AFAC0010 */ sw $t4, 0x10($sp) -/* 0F9AEC 7F0C4F7C 00408825 */ move $s1, $v0 -.Ljp7F0C4F80: -/* 0F9AF0 7F0C4F80 0FC30ACF */ jal mpwatchMenuCanGoLeft -/* 0F9AF4 7F0C4F84 00000000 */ nop -/* 0F9AF8 7F0C4F88 10400056 */ beqz $v0, .Ljp7F0C50E4 -/* 0F9AFC 7F0C4F8C 00000000 */ nop -/* 0F9B00 7F0C4F90 0C001145 */ jal viGetViewLeft -/* 0F9B04 7F0C4F94 00000000 */ nop -/* 0F9B08 7F0C4F98 3C038009 */ lui $v1, %hi(g_gameOverFlag) # $v1, 0x8009 -/* 0F9B0C 7F0C4F9C 8C63C774 */ lw $v1, %lo(g_gameOverFlag)($v1) -/* 0F9B10 7F0C4FA0 0002C400 */ sll $t8, $v0, 0x10 -/* 0F9B14 7F0C4FA4 240F000A */ li $t7, 10 -/* 0F9B18 7F0C4FA8 50600004 */ beql $v1, $zero, .Ljp7F0C4FBC -/* 0F9B1C 7F0C4FAC AFA00050 */ sw $zero, 0x50($sp) -/* 0F9B20 7F0C4FB0 10000002 */ b .Ljp7F0C4FBC -/* 0F9B24 7F0C4FB4 AFAF0050 */ sw $t7, 0x50($sp) -/* 0F9B28 7F0C4FB8 AFA00050 */ sw $zero, 0x50($sp) -.Ljp7F0C4FBC: -/* 0F9B2C 7F0C4FBC 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0F9B30 7F0C4FC0 8FAE0050 */ lw $t6, 0x50($sp) -/* 0F9B34 7F0C4FC4 0018CC03 */ sra $t9, $t8, 0x10 -/* 0F9B38 7F0C4FC8 032B6021 */ addu $t4, $t9, $t3 -/* 0F9B3C 7F0C4FCC 018E2023 */ subu $a0, $t4, $t6 -/* 0F9B40 7F0C4FD0 24840028 */ addiu $a0, $a0, 0x28 -/* 0F9B44 7F0C4FD4 10600003 */ beqz $v1, .Ljp7F0C4FE4 -/* 0F9B48 7F0C4FD8 AFA400CC */ sw $a0, 0xcc($sp) -/* 0F9B4C 7F0C4FDC 2484FFF8 */ addiu $a0, $a0, -8 -/* 0F9B50 7F0C4FE0 AFA400CC */ sw $a0, 0xcc($sp) -.Ljp7F0C4FE4: -/* 0F9B54 7F0C4FE4 0C001149 */ jal viGetViewTop -/* 0F9B58 7F0C4FE8 00000000 */ nop -/* 0F9B5C 7F0C4FEC 3C0F8009 */ lui $t7, %hi(dword_CODE_bss_8008C708) # $t7, 0x8009 -/* 0F9B60 7F0C4FF0 8DEFC778 */ lw $t7, %lo(dword_CODE_bss_8008C708)($t7) -/* 0F9B64 7F0C4FF4 244D0016 */ addiu $t5, $v0, 0x16 -/* 0F9B68 7F0C4FF8 AFAD00C8 */ sw $t5, 0xc8($sp) -/* 0F9B6C 7F0C4FFC 15E0001C */ bnez $t7, .Ljp7F0C5070 -/* 0F9B70 7F0C5000 00000000 */ nop -/* 0F9B74 7F0C5004 0C001107 */ jal viGetX -/* 0F9B78 7F0C5008 00000000 */ nop -/* 0F9B7C 7F0C500C 00028400 */ sll $s0, $v0, 0x10 -/* 0F9B80 7F0C5010 0010C403 */ sra $t8, $s0, 0x10 -/* 0F9B84 7F0C5014 0C00110B */ jal viGetY -/* 0F9B88 7F0C5018 03008025 */ move $s0, $t8 -/* 0F9B8C 7F0C501C 3C198004 */ lui $t9, %hi(ptrFontBankGothicChars) # $t9, 0x8004 -/* 0F9B90 7F0C5020 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0F9B94 7F0C5024 8D6B0EDC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0F9B98 7F0C5028 8F390EE0 */ lw $t9, %lo(ptrFontBankGothicChars)($t9) -/* 0F9B9C 7F0C502C 3C0C00FF */ lui $t4, (0x00FF00B0 >> 16) # lui $t4, 0xff -/* 0F9BA0 7F0C5030 358C00B0 */ ori $t4, (0x00FF00B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0F9BA4 7F0C5034 3C078006 */ lui $a3, %hi(ascii_MP_watch_menu_left_chevron) # $a3, 0x8006 -/* 0F9BA8 7F0C5038 24E7BC68 */ addiu $a3, %lo(ascii_MP_watch_menu_left_chevron) # addiu $a3, $a3, -0x4398 -/* 0F9BAC 7F0C503C AFAC0018 */ sw $t4, 0x18($sp) -/* 0F9BB0 7F0C5040 02202025 */ move $a0, $s1 -/* 0F9BB4 7F0C5044 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F9BB8 7F0C5048 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9BBC 7F0C504C AFB0001C */ sw $s0, 0x1c($sp) -/* 0F9BC0 7F0C5050 AFA20020 */ sw $v0, 0x20($sp) -/* 0F9BC4 7F0C5054 AFA00024 */ sw $zero, 0x24($sp) -/* 0F9BC8 7F0C5058 AFA00028 */ sw $zero, 0x28($sp) -/* 0F9BCC 7F0C505C AFAB0014 */ sw $t3, 0x14($sp) -/* 0F9BD0 7F0C5060 0FC2B99B */ jal textRender -/* 0F9BD4 7F0C5064 AFB90010 */ sw $t9, 0x10($sp) -/* 0F9BD8 7F0C5068 1000001E */ b .Ljp7F0C50E4 -/* 0F9BDC 7F0C506C 00408825 */ move $s1, $v0 -.Ljp7F0C5070: -/* 0F9BE0 7F0C5070 0C001107 */ jal viGetX -/* 0F9BE4 7F0C5074 00000000 */ nop -/* 0F9BE8 7F0C5078 00028400 */ sll $s0, $v0, 0x10 -/* 0F9BEC 7F0C507C 00107403 */ sra $t6, $s0, 0x10 -/* 0F9BF0 7F0C5080 0C00110B */ jal viGetY -/* 0F9BF4 7F0C5084 01C08025 */ move $s0, $t6 -/* 0F9BF8 7F0C5088 3C0D8004 */ lui $t5, %hi(ptrFontBankGothicChars) # $t5, 0x8004 -/* 0F9BFC 7F0C508C 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0F9C00 7F0C5090 8DEF0EDC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F9C04 7F0C5094 8DAD0EE0 */ lw $t5, %lo(ptrFontBankGothicChars)($t5) -/* 0F9C08 7F0C5098 3C18A0FF */ lui $t8, (0xA0FFA0F0 >> 16) # lui $t8, 0xa0ff -/* 0F9C0C 7F0C509C 3C190070 */ lui $t9, (0x007000A0 >> 16) # lui $t9, 0x70 -/* 0F9C10 7F0C50A0 373900A0 */ ori $t9, (0x007000A0 & 0xFFFF) # ori $t9, $t9, 0xa0 -/* 0F9C14 7F0C50A4 3718A0F0 */ ori $t8, (0xA0FFA0F0 & 0xFFFF) # ori $t8, $t8, 0xa0f0 -/* 0F9C18 7F0C50A8 3C078006 */ lui $a3, %hi(ascii_MP_watch_menu_left_chevron) # $a3, 0x8006 -/* 0F9C1C 7F0C50AC 24E7BC68 */ addiu $a3, %lo(ascii_MP_watch_menu_left_chevron) # addiu $a3, $a3, -0x4398 -/* 0F9C20 7F0C50B0 AFB80018 */ sw $t8, 0x18($sp) -/* 0F9C24 7F0C50B4 AFB9001C */ sw $t9, 0x1c($sp) -/* 0F9C28 7F0C50B8 02202025 */ move $a0, $s1 -/* 0F9C2C 7F0C50BC 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F9C30 7F0C50C0 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9C34 7F0C50C4 AFB00020 */ sw $s0, 0x20($sp) -/* 0F9C38 7F0C50C8 AFA20024 */ sw $v0, 0x24($sp) -/* 0F9C3C 7F0C50CC AFA00028 */ sw $zero, 0x28($sp) -/* 0F9C40 7F0C50D0 AFA0002C */ sw $zero, 0x2c($sp) -/* 0F9C44 7F0C50D4 AFAF0014 */ sw $t7, 0x14($sp) -/* 0F9C48 7F0C50D8 0FC2BCA7 */ jal textRenderOutlined -/* 0F9C4C 7F0C50DC AFAD0010 */ sw $t5, 0x10($sp) -/* 0F9C50 7F0C50E0 00408825 */ move $s1, $v0 -.Ljp7F0C50E4: -/* 0F9C54 7F0C50E4 0FC30AB4 */ jal mpwatchMenuCanGoRight -/* 0F9C58 7F0C50E8 00000000 */ nop -/* 0F9C5C 7F0C50EC 10400056 */ beqz $v0, .Ljp7F0C5248 -/* 0F9C60 7F0C50F0 00000000 */ nop -/* 0F9C64 7F0C50F4 0C001145 */ jal viGetViewLeft -/* 0F9C68 7F0C50F8 00000000 */ nop -/* 0F9C6C 7F0C50FC 3C038009 */ lui $v1, %hi(g_gameOverFlag) # $v1, 0x8009 -/* 0F9C70 7F0C5100 8C63C774 */ lw $v1, %lo(g_gameOverFlag)($v1) -/* 0F9C74 7F0C5104 00027400 */ sll $t6, $v0, 0x10 -/* 0F9C78 7F0C5108 240B000A */ li $t3, 10 -/* 0F9C7C 7F0C510C 50600004 */ beql $v1, $zero, .Ljp7F0C5120 -/* 0F9C80 7F0C5110 AFA00050 */ sw $zero, 0x50($sp) -/* 0F9C84 7F0C5114 10000002 */ b .Ljp7F0C5120 -/* 0F9C88 7F0C5118 AFAB0050 */ sw $t3, 0x50($sp) -/* 0F9C8C 7F0C511C AFA00050 */ sw $zero, 0x50($sp) -.Ljp7F0C5120: -/* 0F9C90 7F0C5120 8FAC0050 */ lw $t4, 0x50($sp) -/* 0F9C94 7F0C5124 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0F9C98 7F0C5128 000E6C03 */ sra $t5, $t6, 0x10 -/* 0F9C9C 7F0C512C 018D7821 */ addu $t7, $t4, $t5 -/* 0F9CA0 7F0C5130 01F82021 */ addu $a0, $t7, $t8 -/* 0F9CA4 7F0C5134 24840070 */ addiu $a0, $a0, 0x70 -/* 0F9CA8 7F0C5138 10600003 */ beqz $v1, .Ljp7F0C5148 -/* 0F9CAC 7F0C513C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F9CB0 7F0C5140 24840008 */ addiu $a0, $a0, 8 -/* 0F9CB4 7F0C5144 AFA400CC */ sw $a0, 0xcc($sp) -.Ljp7F0C5148: -/* 0F9CB8 7F0C5148 0C001149 */ jal viGetViewTop -/* 0F9CBC 7F0C514C 00000000 */ nop -/* 0F9CC0 7F0C5150 3C0B8009 */ lui $t3, %hi(dword_CODE_bss_8008C708) # $t3, 0x8009 -/* 0F9CC4 7F0C5154 8D6BC778 */ lw $t3, %lo(dword_CODE_bss_8008C708)($t3) -/* 0F9CC8 7F0C5158 24590016 */ addiu $t9, $v0, 0x16 -/* 0F9CCC 7F0C515C AFB900C8 */ sw $t9, 0xc8($sp) -/* 0F9CD0 7F0C5160 1560001C */ bnez $t3, .Ljp7F0C51D4 -/* 0F9CD4 7F0C5164 00000000 */ nop -/* 0F9CD8 7F0C5168 0C001107 */ jal viGetX -/* 0F9CDC 7F0C516C 00000000 */ nop -/* 0F9CE0 7F0C5170 00028400 */ sll $s0, $v0, 0x10 -/* 0F9CE4 7F0C5174 00107403 */ sra $t6, $s0, 0x10 -/* 0F9CE8 7F0C5178 0C00110B */ jal viGetY -/* 0F9CEC 7F0C517C 01C08025 */ move $s0, $t6 -/* 0F9CF0 7F0C5180 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0F9CF4 7F0C5184 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0F9CF8 7F0C5188 8DAD0EDC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0F9CFC 7F0C518C 8D8C0EE0 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F9D00 7F0C5190 3C0F00FF */ lui $t7, (0x00FF00B0 >> 16) # lui $t7, 0xff -/* 0F9D04 7F0C5194 35EF00B0 */ ori $t7, (0x00FF00B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0F9D08 7F0C5198 3C078006 */ lui $a3, %hi(ascii_MP_watch_menu_right_chevron) # $a3, 0x8006 -/* 0F9D0C 7F0C519C 24E7BC6C */ addiu $a3, %lo(ascii_MP_watch_menu_right_chevron) # addiu $a3, $a3, -0x4394 -/* 0F9D10 7F0C51A0 AFAF0018 */ sw $t7, 0x18($sp) -/* 0F9D14 7F0C51A4 02202025 */ move $a0, $s1 -/* 0F9D18 7F0C51A8 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F9D1C 7F0C51AC 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9D20 7F0C51B0 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F9D24 7F0C51B4 AFA20020 */ sw $v0, 0x20($sp) -/* 0F9D28 7F0C51B8 AFA00024 */ sw $zero, 0x24($sp) -/* 0F9D2C 7F0C51BC AFA00028 */ sw $zero, 0x28($sp) -/* 0F9D30 7F0C51C0 AFAD0014 */ sw $t5, 0x14($sp) -/* 0F9D34 7F0C51C4 0FC2B99B */ jal textRender -/* 0F9D38 7F0C51C8 AFAC0010 */ sw $t4, 0x10($sp) -/* 0F9D3C 7F0C51CC 1000001E */ b .Ljp7F0C5248 -/* 0F9D40 7F0C51D0 00408825 */ move $s1, $v0 -.Ljp7F0C51D4: -/* 0F9D44 7F0C51D4 0C001107 */ jal viGetX -/* 0F9D48 7F0C51D8 00000000 */ nop -/* 0F9D4C 7F0C51DC 00028400 */ sll $s0, $v0, 0x10 -/* 0F9D50 7F0C51E0 0010C403 */ sra $t8, $s0, 0x10 -/* 0F9D54 7F0C51E4 0C00110B */ jal viGetY -/* 0F9D58 7F0C51E8 03008025 */ move $s0, $t8 -/* 0F9D5C 7F0C51EC 3C198004 */ lui $t9, %hi(ptrFontBankGothicChars) # $t9, 0x8004 -/* 0F9D60 7F0C51F0 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0F9D64 7F0C51F4 8D6B0EDC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0F9D68 7F0C51F8 8F390EE0 */ lw $t9, %lo(ptrFontBankGothicChars)($t9) -/* 0F9D6C 7F0C51FC 3C0EA0FF */ lui $t6, (0xA0FFA0F0 >> 16) # lui $t6, 0xa0ff -/* 0F9D70 7F0C5200 3C0C0070 */ lui $t4, (0x007000A0 >> 16) # lui $t4, 0x70 -/* 0F9D74 7F0C5204 358C00A0 */ ori $t4, (0x007000A0 & 0xFFFF) # ori $t4, $t4, 0xa0 -/* 0F9D78 7F0C5208 35CEA0F0 */ ori $t6, (0xA0FFA0F0 & 0xFFFF) # ori $t6, $t6, 0xa0f0 -/* 0F9D7C 7F0C520C 3C078006 */ lui $a3, %hi(ascii_MP_watch_menu_right_chevron) # $a3, 0x8006 -/* 0F9D80 7F0C5210 24E7BC6C */ addiu $a3, %lo(ascii_MP_watch_menu_right_chevron) # addiu $a3, $a3, -0x4394 -/* 0F9D84 7F0C5214 AFAE0018 */ sw $t6, 0x18($sp) -/* 0F9D88 7F0C5218 AFAC001C */ sw $t4, 0x1c($sp) -/* 0F9D8C 7F0C521C 02202025 */ move $a0, $s1 -/* 0F9D90 7F0C5220 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F9D94 7F0C5224 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9D98 7F0C5228 AFB00020 */ sw $s0, 0x20($sp) -/* 0F9D9C 7F0C522C AFA20024 */ sw $v0, 0x24($sp) -/* 0F9DA0 7F0C5230 AFA00028 */ sw $zero, 0x28($sp) -/* 0F9DA4 7F0C5234 AFA0002C */ sw $zero, 0x2c($sp) -/* 0F9DA8 7F0C5238 AFAB0014 */ sw $t3, 0x14($sp) -/* 0F9DAC 7F0C523C 0FC2BCA7 */ jal textRenderOutlined -/* 0F9DB0 7F0C5240 AFB90010 */ sw $t9, 0x10($sp) -/* 0F9DB4 7F0C5244 00408825 */ move $s1, $v0 -.Ljp7F0C5248: -/* 0F9DB8 7F0C5248 3C038008 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8008 -/* 0F9DBC 7F0C524C 8C63A120 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0F9DC0 7F0C5250 24010003 */ li $at, 3 -/* 0F9DC4 7F0C5254 8FAD00D0 */ lw $t5, 0xd0($sp) -/* 0F9DC8 7F0C5258 8C6229C8 */ lw $v0, 0x29c8($v1) -/* 0F9DCC 7F0C525C 10410003 */ beq $v0, $at, .Ljp7F0C526C -/* 0F9DD0 7F0C5260 24010004 */ li $at, 4 -/* 0F9DD4 7F0C5264 544101AA */ bnel $v0, $at, .Ljp7F0C5910 -/* 0F9DD8 7F0C5268 24010002 */ li $at, 2 -.Ljp7F0C526C: -/* 0F9DDC 7F0C526C 19A0000D */ blez $t5, .Ljp7F0C52A4 -/* 0F9DE0 7F0C5270 00002025 */ move $a0, $zero -/* 0F9DE4 7F0C5274 27A30094 */ addiu $v1, $sp, 0x94 -/* 0F9DE8 7F0C5278 AFA30044 */ sw $v1, 0x44($sp) -.Ljp7F0C527C: -/* 0F9DEC 7F0C527C 0FC31162 */ jal get_points_for_mp_player -/* 0F9DF0 7F0C5280 AFA40090 */ sw $a0, 0x90($sp) -/* 0F9DF4 7F0C5284 8FA30044 */ lw $v1, 0x44($sp) -/* 0F9DF8 7F0C5288 8FA40090 */ lw $a0, 0x90($sp) -/* 0F9DFC 7F0C528C AC620000 */ sw $v0, ($v1) -/* 0F9E00 7F0C5290 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0F9E04 7F0C5294 24840001 */ addiu $a0, $a0, 1 -/* 0F9E08 7F0C5298 24630004 */ addiu $v1, $v1, 4 -/* 0F9E0C 7F0C529C 548FFFF7 */ bnel $a0, $t7, .Ljp7F0C527C -/* 0F9E10 7F0C52A0 AFA30044 */ sw $v1, 0x44($sp) -.Ljp7F0C52A4: -/* 0F9E14 7F0C52A4 3C048009 */ lui $a0, %hi(g_gameOverFlag) # $a0, 0x8009 -/* 0F9E18 7F0C52A8 8C84C774 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0F9E1C 7F0C52AC 2C980001 */ sltiu $t8, $a0, 1 -/* 0F9E20 7F0C52B0 13000005 */ beqz $t8, .Ljp7F0C52C8 -/* 0F9E24 7F0C52B4 03002025 */ move $a0, $t8 -/* 0F9E28 7F0C52B8 3C048009 */ lui $a0, %hi(g_stopPlayFlag) # $a0, 0x8009 -/* 0F9E2C 7F0C52BC 8C84C770 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0F9E30 7F0C52C0 2C990001 */ sltiu $t9, $a0, 1 -/* 0F9E34 7F0C52C4 03202025 */ move $a0, $t9 -.Ljp7F0C52C8: -/* 0F9E38 7F0C52C8 0FC31303 */ jal mpwatchShouldDisplayRank -/* 0F9E3C 7F0C52CC 00000000 */ nop -/* 0F9E40 7F0C52D0 10400034 */ beqz $v0, .Ljp7F0C53A4 -/* 0F9E44 7F0C52D4 27A400AC */ addiu $a0, $sp, 0xac -/* 0F9E48 7F0C52D8 0FC31251 */ jal write_playerrank_to_buffer -/* 0F9E4C 7F0C52DC 8FA500D4 */ lw $a1, 0xd4($sp) -/* 0F9E50 7F0C52E0 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0F9E54 7F0C52E4 8D6B0EDC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0F9E58 7F0C52E8 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F9E5C 7F0C52EC 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F9E60 7F0C52F0 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F9E64 7F0C52F4 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F9E68 7F0C52F8 27A600AC */ addiu $a2, $sp, 0xac -/* 0F9E6C 7F0C52FC AFA00014 */ sw $zero, 0x14($sp) -/* 0F9E70 7F0C5300 0FC2BD4F */ jal textMeasure -/* 0F9E74 7F0C5304 AFAB0010 */ sw $t3, 0x10($sp) -/* 0F9E78 7F0C5308 0C001145 */ jal viGetViewLeft -/* 0F9E7C 7F0C530C 00000000 */ nop -/* 0F9E80 7F0C5310 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0F9E84 7F0C5314 8FAD00C0 */ lw $t5, 0xc0($sp) -/* 0F9E88 7F0C5318 004E6021 */ addu $t4, $v0, $t6 -/* 0F9E8C 7F0C531C 000D7843 */ sra $t7, $t5, 1 -/* 0F9E90 7F0C5320 018F2023 */ subu $a0, $t4, $t7 -/* 0F9E94 7F0C5324 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9E98 7F0C5328 0C001149 */ jal viGetViewTop -/* 0F9E9C 7F0C532C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F9EA0 7F0C5330 8FB800BC */ lw $t8, 0xbc($sp) -/* 0F9EA4 7F0C5334 0018C843 */ sra $t9, $t8, 1 -/* 0F9EA8 7F0C5338 00595823 */ subu $t3, $v0, $t9 -/* 0F9EAC 7F0C533C 256E0025 */ addiu $t6, $t3, 0x25 -/* 0F9EB0 7F0C5340 0C001107 */ jal viGetX -/* 0F9EB4 7F0C5344 AFAE00C8 */ sw $t6, 0xc8($sp) -/* 0F9EB8 7F0C5348 00028400 */ sll $s0, $v0, 0x10 -/* 0F9EBC 7F0C534C 00106C03 */ sra $t5, $s0, 0x10 -/* 0F9EC0 7F0C5350 0C00110B */ jal viGetY -/* 0F9EC4 7F0C5354 01A08025 */ move $s0, $t5 -/* 0F9EC8 7F0C5358 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0F9ECC 7F0C535C 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0F9ED0 7F0C5360 8DEF0EDC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F9ED4 7F0C5364 8D8C0EE0 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F9ED8 7F0C5368 3C1800FF */ lui $t8, (0x00FF00B0 >> 16) # lui $t8, 0xff -/* 0F9EDC 7F0C536C 371800B0 */ ori $t8, (0x00FF00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0F9EE0 7F0C5370 AFB80018 */ sw $t8, 0x18($sp) -/* 0F9EE4 7F0C5374 02202025 */ move $a0, $s1 -/* 0F9EE8 7F0C5378 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F9EEC 7F0C537C 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F9EF0 7F0C5380 27A700AC */ addiu $a3, $sp, 0xac -/* 0F9EF4 7F0C5384 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F9EF8 7F0C5388 AFA20020 */ sw $v0, 0x20($sp) -/* 0F9EFC 7F0C538C AFA00024 */ sw $zero, 0x24($sp) -/* 0F9F00 7F0C5390 AFA00028 */ sw $zero, 0x28($sp) -/* 0F9F04 7F0C5394 AFAF0014 */ sw $t7, 0x14($sp) -/* 0F9F08 7F0C5398 0FC2B99B */ jal textRender -/* 0F9F0C 7F0C539C AFAC0010 */ sw $t4, 0x10($sp) -/* 0F9F10 7F0C53A0 00408825 */ move $s1, $v0 -.Ljp7F0C53A4: -/* 0F9F14 7F0C53A4 3C048009 */ lui $a0, %hi(g_gameOverFlag) # $a0, 0x8009 -/* 0F9F18 7F0C53A8 8C84C774 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0F9F1C 7F0C53AC 2C990001 */ sltiu $t9, $a0, 1 -/* 0F9F20 7F0C53B0 13200005 */ beqz $t9, .Ljp7F0C53C8 -/* 0F9F24 7F0C53B4 03202025 */ move $a0, $t9 -/* 0F9F28 7F0C53B8 3C048009 */ lui $a0, %hi(g_stopPlayFlag) # $a0, 0x8009 -/* 0F9F2C 7F0C53BC 8C84C770 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0F9F30 7F0C53C0 2C8B0001 */ sltiu $t3, $a0, 1 -/* 0F9F34 7F0C53C4 01602025 */ move $a0, $t3 -.Ljp7F0C53C8: -/* 0F9F38 7F0C53C8 0FC3131F */ jal mpwatchShouldDisplayScore -/* 0F9F3C 7F0C53CC 00000000 */ nop -/* 0F9F40 7F0C53D0 1040014B */ beqz $v0, .Ljp7F0C5900 -/* 0F9F44 7F0C53D4 00000000 */ nop -/* 0F9F48 7F0C53D8 0FC05202 */ jal get_scenario -/* 0F9F4C 7F0C53DC 00000000 */ nop -/* 0F9F50 7F0C53E0 AFA20080 */ sw $v0, 0x80($sp) -/* 0F9F54 7F0C53E4 0FC30AA2 */ jal langGet -/* 0F9F58 7F0C53E8 3404A01B */ li $a0, 40987 -/* 0F9F5C 7F0C53EC 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) # $t6, 0x8004 -/* 0F9F60 7F0C53F0 8DCE0EDC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0F9F64 7F0C53F4 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F9F68 7F0C53F8 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F9F6C 7F0C53FC 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F9F70 7F0C5400 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F9F74 7F0C5404 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F9F78 7F0C5408 00403025 */ move $a2, $v0 -/* 0F9F7C 7F0C540C AFA00014 */ sw $zero, 0x14($sp) -/* 0F9F80 7F0C5410 0FC2BD4F */ jal textMeasure -/* 0F9F84 7F0C5414 AFAE0010 */ sw $t6, 0x10($sp) -/* 0F9F88 7F0C5418 0C001145 */ jal viGetViewLeft -/* 0F9F8C 7F0C541C 00000000 */ nop -/* 0F9F90 7F0C5420 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0F9F94 7F0C5424 8FAF00C0 */ lw $t7, 0xc0($sp) -/* 0F9F98 7F0C5428 004D6021 */ addu $t4, $v0, $t5 -/* 0F9F9C 7F0C542C 000FC043 */ sra $t8, $t7, 1 -/* 0F9FA0 7F0C5430 01982023 */ subu $a0, $t4, $t8 -/* 0F9FA4 7F0C5434 24840050 */ addiu $a0, $a0, 0x50 -/* 0F9FA8 7F0C5438 0C001149 */ jal viGetViewTop -/* 0F9FAC 7F0C543C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F9FB0 7F0C5440 8FB900BC */ lw $t9, 0xbc($sp) -/* 0F9FB4 7F0C5444 00195843 */ sra $t3, $t9, 1 -/* 0F9FB8 7F0C5448 004B7023 */ subu $t6, $v0, $t3 -/* 0F9FBC 7F0C544C 25CD0035 */ addiu $t5, $t6, 0x35 -/* 0F9FC0 7F0C5450 0C001107 */ jal viGetX -/* 0F9FC4 7F0C5454 AFAD00C8 */ sw $t5, 0xc8($sp) -/* 0F9FC8 7F0C5458 00028400 */ sll $s0, $v0, 0x10 -/* 0F9FCC 7F0C545C 00107C03 */ sra $t7, $s0, 0x10 -/* 0F9FD0 7F0C5460 0C00110B */ jal viGetY -/* 0F9FD4 7F0C5464 01E08025 */ move $s0, $t7 -/* 0F9FD8 7F0C5468 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0F9FDC 7F0C546C 3C188004 */ lui $t8, %hi(ptrFontBankGothic) # $t8, 0x8004 -/* 0F9FE0 7F0C5470 8F180EDC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0F9FE4 7F0C5474 8D8C0EE0 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F9FE8 7F0C5478 3C1900FF */ lui $t9, (0x00FF00B0 >> 16) # lui $t9, 0xff -/* 0F9FEC 7F0C547C 373900B0 */ ori $t9, (0x00FF00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0F9FF0 7F0C5480 AFB90018 */ sw $t9, 0x18($sp) -/* 0F9FF4 7F0C5484 02202025 */ move $a0, $s1 -/* 0F9FF8 7F0C5488 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F9FFC 7F0C548C 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA000 7F0C5490 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FA004 7F0C5494 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FA008 7F0C5498 AFA20020 */ sw $v0, 0x20($sp) -/* 0FA00C 7F0C549C AFA00024 */ sw $zero, 0x24($sp) -/* 0FA010 7F0C54A0 AFA00028 */ sw $zero, 0x28($sp) -/* 0FA014 7F0C54A4 AFB80014 */ sw $t8, 0x14($sp) -/* 0FA018 7F0C54A8 0FC2B99B */ jal textRender -/* 0FA01C 7F0C54AC AFAC0010 */ sw $t4, 0x10($sp) -/* 0FA020 7F0C54B0 8FA30080 */ lw $v1, 0x80($sp) -/* 0FA024 7F0C54B4 24010005 */ li $at, 5 -/* 0FA028 7F0C54B8 00408825 */ move $s1, $v0 -/* 0FA02C 7F0C54BC 1061000A */ beq $v1, $at, .Ljp7F0C54E8 -/* 0FA030 7F0C54C0 8FAB00D4 */ lw $t3, 0xd4($sp) -/* 0FA034 7F0C54C4 24010006 */ li $at, 6 -/* 0FA038 7F0C54C8 10610007 */ beq $v1, $at, .Ljp7F0C54E8 -/* 0FA03C 7F0C54CC 24010007 */ li $at, 7 -/* 0FA040 7F0C54D0 10610005 */ beq $v1, $at, .Ljp7F0C54E8 -/* 0FA044 7F0C54D4 24010002 */ li $at, 2 -/* 0FA048 7F0C54D8 10610003 */ beq $v1, $at, .Ljp7F0C54E8 -/* 0FA04C 7F0C54DC 24010003 */ li $at, 3 -/* 0FA050 7F0C54E0 14610016 */ bne $v1, $at, .Ljp7F0C553C -/* 0FA054 7F0C54E4 240D0001 */ li $t5, 1 -.Ljp7F0C54E8: -/* 0FA058 7F0C54E8 000B70C0 */ sll $t6, $t3, 3 -/* 0FA05C 7F0C54EC 01CB7023 */ subu $t6, $t6, $t3 -/* 0FA060 7F0C54F0 000E7100 */ sll $t6, $t6, 4 -/* 0FA064 7F0C54F4 3C0D8008 */ lui $t5, %hi(g_playerPlayerData+105) -/* 0FA068 7F0C54F8 01AE6821 */ addu $t5, $t5, $t6 -/* 0FA06C 7F0C54FC 91AD9FC9 */ lbu $t5, %lo(g_playerPlayerData+105)($t5) -/* 0FA070 7F0C5500 24190005 */ li $t9, 5 -/* 0FA074 7F0C5504 240B0004 */ li $t3, 4 -/* 0FA078 7F0C5508 15A00008 */ bnez $t5, .Ljp7F0C552C -/* 0FA07C 7F0C550C 240E0002 */ li $t6, 2 -/* 0FA080 7F0C5510 240F0003 */ li $t7, 3 -/* 0FA084 7F0C5514 240C0002 */ li $t4, 2 -/* 0FA088 7F0C5518 24180004 */ li $t8, 4 -/* 0FA08C 7F0C551C AFAF008C */ sw $t7, 0x8c($sp) -/* 0FA090 7F0C5520 AFAC0088 */ sw $t4, 0x88($sp) -/* 0FA094 7F0C5524 10000008 */ b .Ljp7F0C5548 -/* 0FA098 7F0C5528 AFB80084 */ sw $t8, 0x84($sp) -.Ljp7F0C552C: -/* 0FA09C 7F0C552C AFB9008C */ sw $t9, 0x8c($sp) -/* 0FA0A0 7F0C5530 AFAB0088 */ sw $t3, 0x88($sp) -/* 0FA0A4 7F0C5534 10000004 */ b .Ljp7F0C5548 -/* 0FA0A8 7F0C5538 AFAE0084 */ sw $t6, 0x84($sp) -.Ljp7F0C553C: -/* 0FA0AC 7F0C553C AFAD008C */ sw $t5, 0x8c($sp) -/* 0FA0B0 7F0C5540 AFA00088 */ sw $zero, 0x88($sp) -/* 0FA0B4 7F0C5544 AFA00084 */ sw $zero, 0x84($sp) -.Ljp7F0C5548: -/* 0FA0B8 7F0C5548 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0FA0BC 7F0C554C 24010002 */ li $at, 2 -/* 0FA0C0 7F0C5550 15E1004E */ bne $t7, $at, .Ljp7F0C568C -/* 0FA0C4 7F0C5554 00000000 */ nop -/* 0FA0C8 7F0C5558 0C001145 */ jal viGetViewLeft -/* 0FA0CC 7F0C555C 00000000 */ nop -/* 0FA0D0 7F0C5560 00028400 */ sll $s0, $v0, 0x10 -/* 0FA0D4 7F0C5564 00106403 */ sra $t4, $s0, 0x10 -/* 0FA0D8 7F0C5568 0C001149 */ jal viGetViewTop -/* 0FA0DC 7F0C556C 01808025 */ move $s0, $t4 -/* 0FA0E0 7F0C5570 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0FA0E4 7F0C5574 00024400 */ sll $t0, $v0, 0x10 -/* 0FA0E8 7F0C5578 0008C403 */ sra $t8, $t0, 0x10 -/* 0FA0EC 7F0C557C 14600004 */ bnez $v1, .Ljp7F0C5590 -/* 0FA0F0 7F0C5580 03004025 */ move $t0, $t8 -/* 0FA0F4 7F0C5584 8FB9008C */ lw $t9, 0x8c($sp) -/* 0FA0F8 7F0C5588 1000000F */ b .Ljp7F0C55C8 -/* 0FA0FC 7F0C558C AFB90050 */ sw $t9, 0x50($sp) -.Ljp7F0C5590: -/* 0FA100 7F0C5590 000370C0 */ sll $t6, $v1, 3 -/* 0FA104 7F0C5594 01C37023 */ subu $t6, $t6, $v1 -/* 0FA108 7F0C5598 000E7100 */ sll $t6, $t6, 4 -/* 0FA10C 7F0C559C 3C0D8008 */ lui $t5, %hi(g_playerPlayerData + 0x69) -/* 0FA110 7F0C55A0 01AE6821 */ addu $t5, $t5, $t6 -/* 0FA114 7F0C55A4 3C0B8008 */ lui $t3, %hi(g_playerPlayerData + 0x69) # $t3, 0x8008 -/* 0FA118 7F0C55A8 916B9FC9 */ lbu $t3, %lo(g_playerPlayerData + 0x69)($t3) -/* 0FA11C 7F0C55AC 91AD9FC9 */ lbu $t5, %lo(g_playerPlayerData + 0x69)($t5) -/* 0FA120 7F0C55B0 8FA60084 */ lw $a2, 0x84($sp) -/* 0FA124 7F0C55B4 156D0003 */ bne $t3, $t5, .Ljp7F0C55C4 -/* 0FA128 7F0C55B8 00000000 */ nop -/* 0FA12C 7F0C55BC 10000001 */ b .Ljp7F0C55C4 -/* 0FA130 7F0C55C0 8FA60088 */ lw $a2, 0x88($sp) -.Ljp7F0C55C4: -/* 0FA134 7F0C55C4 AFA60050 */ sw $a2, 0x50($sp) -.Ljp7F0C55C8: -/* 0FA138 7F0C55C8 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0FA13C 7F0C55CC 8FAC0050 */ lw $t4, 0x50($sp) -/* 0FA140 7F0C55D0 02202025 */ move $a0, $s1 -/* 0FA144 7F0C55D4 020F2821 */ addu $a1, $s0, $t7 -/* 0FA148 7F0C55D8 24A50050 */ addiu $a1, $a1, 0x50 -/* 0FA14C 7F0C55DC 25060046 */ addiu $a2, $t0, 0x46 -/* 0FA150 7F0C55E0 8FA70094 */ lw $a3, 0x94($sp) -/* 0FA154 7F0C55E4 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA158 7F0C55E8 AFAC0010 */ sw $t4, 0x10($sp) -/* 0FA15C 7F0C55EC 0C001145 */ jal viGetViewLeft -/* 0FA160 7F0C55F0 00408825 */ move $s1, $v0 -/* 0FA164 7F0C55F4 00028400 */ sll $s0, $v0, 0x10 -/* 0FA168 7F0C55F8 0010C403 */ sra $t8, $s0, 0x10 -/* 0FA16C 7F0C55FC 0C001149 */ jal viGetViewTop -/* 0FA170 7F0C5600 03008025 */ move $s0, $t8 -/* 0FA174 7F0C5604 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0FA178 7F0C5608 00024400 */ sll $t0, $v0, 0x10 -/* 0FA17C 7F0C560C 0008CC03 */ sra $t9, $t0, 0x10 -/* 0FA180 7F0C5610 24010001 */ li $at, 1 -/* 0FA184 7F0C5614 14610004 */ bne $v1, $at, .Ljp7F0C5628 -/* 0FA188 7F0C5618 03204025 */ move $t0, $t9 -/* 0FA18C 7F0C561C 8FAE008C */ lw $t6, 0x8c($sp) -/* 0FA190 7F0C5620 1000000F */ b .Ljp7F0C5660 -/* 0FA194 7F0C5624 AFAE0050 */ sw $t6, 0x50($sp) -.Ljp7F0C5628: -/* 0FA198 7F0C5628 000368C0 */ sll $t5, $v1, 3 -/* 0FA19C 7F0C562C 01A36823 */ subu $t5, $t5, $v1 -/* 0FA1A0 7F0C5630 3C028008 */ lui $v0, %hi(g_playerPlayerData) # $v0, 0x8008 -/* 0FA1A4 7F0C5634 24429F60 */ addiu $v0, %lo(g_playerPlayerData) # addiu $v0, $v0, -0x60a0 -/* 0FA1A8 7F0C5638 000D6900 */ sll $t5, $t5, 4 -/* 0FA1AC 7F0C563C 004D7821 */ addu $t7, $v0, $t5 -/* 0FA1B0 7F0C5640 91EC0069 */ lbu $t4, 0x69($t7) -/* 0FA1B4 7F0C5644 904B00D9 */ lbu $t3, 0xd9($v0) -/* 0FA1B8 7F0C5648 8FA60084 */ lw $a2, 0x84($sp) -/* 0FA1BC 7F0C564C 156C0003 */ bne $t3, $t4, .Ljp7F0C565C -/* 0FA1C0 7F0C5650 00000000 */ nop -/* 0FA1C4 7F0C5654 10000001 */ b .Ljp7F0C565C -/* 0FA1C8 7F0C5658 8FA60088 */ lw $a2, 0x88($sp) -.Ljp7F0C565C: -/* 0FA1CC 7F0C565C AFA60050 */ sw $a2, 0x50($sp) -.Ljp7F0C5660: -/* 0FA1D0 7F0C5660 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0FA1D4 7F0C5664 8FB90050 */ lw $t9, 0x50($sp) -/* 0FA1D8 7F0C5668 02202025 */ move $a0, $s1 -/* 0FA1DC 7F0C566C 02182821 */ addu $a1, $s0, $t8 -/* 0FA1E0 7F0C5670 24A50050 */ addiu $a1, $a1, 0x50 -/* 0FA1E4 7F0C5674 25060056 */ addiu $a2, $t0, 0x56 -/* 0FA1E8 7F0C5678 8FA70098 */ lw $a3, 0x98($sp) -/* 0FA1EC 7F0C567C 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA1F0 7F0C5680 AFB90010 */ sw $t9, 0x10($sp) -/* 0FA1F4 7F0C5684 1000009E */ b .Ljp7F0C5900 -/* 0FA1F8 7F0C5688 00408825 */ move $s1, $v0 -.Ljp7F0C568C: -/* 0FA1FC 7F0C568C 0C001145 */ jal viGetViewLeft -/* 0FA200 7F0C5690 00000000 */ nop -/* 0FA204 7F0C5694 00028400 */ sll $s0, $v0, 0x10 -/* 0FA208 7F0C5698 00107403 */ sra $t6, $s0, 0x10 -/* 0FA20C 7F0C569C 0C001149 */ jal viGetViewTop -/* 0FA210 7F0C56A0 01C08025 */ move $s0, $t6 -/* 0FA214 7F0C56A4 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0FA218 7F0C56A8 00024400 */ sll $t0, $v0, 0x10 -/* 0FA21C 7F0C56AC 00086C03 */ sra $t5, $t0, 0x10 -/* 0FA220 7F0C56B0 14600004 */ bnez $v1, .Ljp7F0C56C4 -/* 0FA224 7F0C56B4 01A04025 */ move $t0, $t5 -/* 0FA228 7F0C56B8 8FAF008C */ lw $t7, 0x8c($sp) -/* 0FA22C 7F0C56BC 1000000F */ b .Ljp7F0C56FC -/* 0FA230 7F0C56C0 AFAF0050 */ sw $t7, 0x50($sp) -.Ljp7F0C56C4: -/* 0FA234 7F0C56C4 000360C0 */ sll $t4, $v1, 3 -/* 0FA238 7F0C56C8 01836023 */ subu $t4, $t4, $v1 -/* 0FA23C 7F0C56CC 000C6100 */ sll $t4, $t4, 4 -/* 0FA240 7F0C56D0 3C188008 */ lui $t8, %hi(g_playerPlayerData + 0x69) -/* 0FA244 7F0C56D4 030CC021 */ addu $t8, $t8, $t4 -/* 0FA248 7F0C56D8 3C0B8008 */ lui $t3, %hi(g_playerPlayerData + 0x69) # $t3, 0x8008 -/* 0FA24C 7F0C56DC 916B9FC9 */ lbu $t3, %lo(g_playerPlayerData + 0x69)($t3) -/* 0FA250 7F0C56E0 93189FC9 */ lbu $t8, %lo(g_playerPlayerData + 0x69)($t8) -/* 0FA254 7F0C56E4 8FA60084 */ lw $a2, 0x84($sp) -/* 0FA258 7F0C56E8 15780003 */ bne $t3, $t8, .Ljp7F0C56F8 -/* 0FA25C 7F0C56EC 00000000 */ nop -/* 0FA260 7F0C56F0 10000001 */ b .Ljp7F0C56F8 -/* 0FA264 7F0C56F4 8FA60088 */ lw $a2, 0x88($sp) -.Ljp7F0C56F8: -/* 0FA268 7F0C56F8 AFA60050 */ sw $a2, 0x50($sp) -.Ljp7F0C56FC: -/* 0FA26C 7F0C56FC 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0FA270 7F0C5700 8FAE0050 */ lw $t6, 0x50($sp) -/* 0FA274 7F0C5704 02202025 */ move $a0, $s1 -/* 0FA278 7F0C5708 02192821 */ addu $a1, $s0, $t9 -/* 0FA27C 7F0C570C 24A50040 */ addiu $a1, $a1, 0x40 -/* 0FA280 7F0C5710 25060046 */ addiu $a2, $t0, 0x46 -/* 0FA284 7F0C5714 8FA70094 */ lw $a3, 0x94($sp) -/* 0FA288 7F0C5718 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA28C 7F0C571C AFAE0010 */ sw $t6, 0x10($sp) -/* 0FA290 7F0C5720 0C001145 */ jal viGetViewLeft -/* 0FA294 7F0C5724 00408825 */ move $s1, $v0 -/* 0FA298 7F0C5728 00028400 */ sll $s0, $v0, 0x10 -/* 0FA29C 7F0C572C 00106C03 */ sra $t5, $s0, 0x10 -/* 0FA2A0 7F0C5730 0C001149 */ jal viGetViewTop -/* 0FA2A4 7F0C5734 01A08025 */ move $s0, $t5 -/* 0FA2A8 7F0C5738 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0FA2AC 7F0C573C 00024400 */ sll $t0, $v0, 0x10 -/* 0FA2B0 7F0C5740 00087C03 */ sra $t7, $t0, 0x10 -/* 0FA2B4 7F0C5744 24010001 */ li $at, 1 -/* 0FA2B8 7F0C5748 14610004 */ bne $v1, $at, .Ljp7F0C575C -/* 0FA2BC 7F0C574C 01E04025 */ move $t0, $t7 -/* 0FA2C0 7F0C5750 8FAC008C */ lw $t4, 0x8c($sp) -/* 0FA2C4 7F0C5754 1000000F */ b .Ljp7F0C5794 -/* 0FA2C8 7F0C5758 AFAC0050 */ sw $t4, 0x50($sp) -.Ljp7F0C575C: -/* 0FA2CC 7F0C575C 0003C0C0 */ sll $t8, $v1, 3 -/* 0FA2D0 7F0C5760 0303C023 */ subu $t8, $t8, $v1 -/* 0FA2D4 7F0C5764 0018C100 */ sll $t8, $t8, 4 -/* 0FA2D8 7F0C5768 3C198008 */ lui $t9, %hi(g_playerPlayerData + 0x69) -/* 0FA2DC 7F0C576C 0338C821 */ addu $t9, $t9, $t8 -/* 0FA2E0 7F0C5770 3C0B8008 */ lui $t3, %hi(g_playerPlayerData+0x70 + 0x69) # $t3, 0x8008 -/* 0FA2E4 7F0C5774 916BA039 */ lbu $t3, %lo(g_playerPlayerData+0x70 + 0x69)($t3) -/* 0FA2E8 7F0C5778 93399FC9 */ lbu $t9, %lo(g_playerPlayerData + 0x69)($t9) -/* 0FA2EC 7F0C577C 8FA60084 */ lw $a2, 0x84($sp) -/* 0FA2F0 7F0C5780 15790003 */ bne $t3, $t9, .Ljp7F0C5790 -/* 0FA2F4 7F0C5784 00000000 */ nop -/* 0FA2F8 7F0C5788 10000001 */ b .Ljp7F0C5790 -/* 0FA2FC 7F0C578C 8FA60088 */ lw $a2, 0x88($sp) -.Ljp7F0C5790: -/* 0FA300 7F0C5790 AFA60050 */ sw $a2, 0x50($sp) -.Ljp7F0C5794: -/* 0FA304 7F0C5794 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0FA308 7F0C5798 8FAD0050 */ lw $t5, 0x50($sp) -/* 0FA30C 7F0C579C 02202025 */ move $a0, $s1 -/* 0FA310 7F0C57A0 020E2821 */ addu $a1, $s0, $t6 -/* 0FA314 7F0C57A4 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FA318 7F0C57A8 25060046 */ addiu $a2, $t0, 0x46 -/* 0FA31C 7F0C57AC 8FA70098 */ lw $a3, 0x98($sp) -/* 0FA320 7F0C57B0 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA324 7F0C57B4 AFAD0010 */ sw $t5, 0x10($sp) -/* 0FA328 7F0C57B8 0C001145 */ jal viGetViewLeft -/* 0FA32C 7F0C57BC 00408825 */ move $s1, $v0 -/* 0FA330 7F0C57C0 00028400 */ sll $s0, $v0, 0x10 -/* 0FA334 7F0C57C4 00107C03 */ sra $t7, $s0, 0x10 -/* 0FA338 7F0C57C8 0C001149 */ jal viGetViewTop -/* 0FA33C 7F0C57CC 01E08025 */ move $s0, $t7 -/* 0FA340 7F0C57D0 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0FA344 7F0C57D4 00024400 */ sll $t0, $v0, 0x10 -/* 0FA348 7F0C57D8 00086403 */ sra $t4, $t0, 0x10 -/* 0FA34C 7F0C57DC 24010002 */ li $at, 2 -/* 0FA350 7F0C57E0 14610004 */ bne $v1, $at, .Ljp7F0C57F4 -/* 0FA354 7F0C57E4 01804025 */ move $t0, $t4 -/* 0FA358 7F0C57E8 8FB8008C */ lw $t8, 0x8c($sp) -/* 0FA35C 7F0C57EC 1000000F */ b .Ljp7F0C582C -/* 0FA360 7F0C57F0 AFB80050 */ sw $t8, 0x50($sp) -.Ljp7F0C57F4: -/* 0FA364 7F0C57F4 0003C8C0 */ sll $t9, $v1, 3 -/* 0FA368 7F0C57F8 0323C823 */ subu $t9, $t9, $v1 -/* 0FA36C 7F0C57FC 0019C900 */ sll $t9, $t9, 4 -/* 0FA370 7F0C5800 3C0E8008 */ lui $t6, %hi(g_playerPlayerData + 0x69) -/* 0FA374 7F0C5804 01D97021 */ addu $t6, $t6, $t9 -/* 0FA378 7F0C5808 3C0B8008 */ lui $t3, %hi(g_playerPlayerData+0x70+0x70 + 0x69) # $t3, 0x8008 -/* 0FA37C 7F0C580C 916BA0A9 */ lbu $t3, %lo(g_playerPlayerData+0x70+0x70 + 0x69)($t3) -/* 0FA380 7F0C5810 91CE9FC9 */ lbu $t6, %lo(g_playerPlayerData + 0x69)($t6) -/* 0FA384 7F0C5814 8FA60084 */ lw $a2, 0x84($sp) -/* 0FA388 7F0C5818 156E0003 */ bne $t3, $t6, .Ljp7F0C5828 -/* 0FA38C 7F0C581C 00000000 */ nop -/* 0FA390 7F0C5820 10000001 */ b .Ljp7F0C5828 -/* 0FA394 7F0C5824 8FA60088 */ lw $a2, 0x88($sp) -.Ljp7F0C5828: -/* 0FA398 7F0C5828 AFA60050 */ sw $a2, 0x50($sp) -.Ljp7F0C582C: -/* 0FA39C 7F0C582C 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0FA3A0 7F0C5830 8FAF0050 */ lw $t7, 0x50($sp) -/* 0FA3A4 7F0C5834 02202025 */ move $a0, $s1 -/* 0FA3A8 7F0C5838 020D2821 */ addu $a1, $s0, $t5 -/* 0FA3AC 7F0C583C 24A50040 */ addiu $a1, $a1, 0x40 -/* 0FA3B0 7F0C5840 25060056 */ addiu $a2, $t0, 0x56 -/* 0FA3B4 7F0C5844 8FA7009C */ lw $a3, 0x9c($sp) -/* 0FA3B8 7F0C5848 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA3BC 7F0C584C AFAF0010 */ sw $t7, 0x10($sp) -/* 0FA3C0 7F0C5850 8FAC00D0 */ lw $t4, 0xd0($sp) -/* 0FA3C4 7F0C5854 24010004 */ li $at, 4 -/* 0FA3C8 7F0C5858 00408825 */ move $s1, $v0 -/* 0FA3CC 7F0C585C 15810028 */ bne $t4, $at, .Ljp7F0C5900 -/* 0FA3D0 7F0C5860 00000000 */ nop -/* 0FA3D4 7F0C5864 0C001145 */ jal viGetViewLeft -/* 0FA3D8 7F0C5868 00000000 */ nop -/* 0FA3DC 7F0C586C 00028400 */ sll $s0, $v0, 0x10 -/* 0FA3E0 7F0C5870 0010C403 */ sra $t8, $s0, 0x10 -/* 0FA3E4 7F0C5874 0C001149 */ jal viGetViewTop -/* 0FA3E8 7F0C5878 03008025 */ move $s0, $t8 -/* 0FA3EC 7F0C587C 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0FA3F0 7F0C5880 00024400 */ sll $t0, $v0, 0x10 -/* 0FA3F4 7F0C5884 0008CC03 */ sra $t9, $t0, 0x10 -/* 0FA3F8 7F0C5888 24010003 */ li $at, 3 -/* 0FA3FC 7F0C588C 14610004 */ bne $v1, $at, .Ljp7F0C58A0 -/* 0FA400 7F0C5890 03204025 */ move $t0, $t9 -/* 0FA404 7F0C5894 8FAB008C */ lw $t3, 0x8c($sp) -/* 0FA408 7F0C5898 1000000F */ b .Ljp7F0C58D8 -/* 0FA40C 7F0C589C AFAB0050 */ sw $t3, 0x50($sp) -.Ljp7F0C58A0: -/* 0FA410 7F0C58A0 000368C0 */ sll $t5, $v1, 3 -/* 0FA414 7F0C58A4 01A36823 */ subu $t5, $t5, $v1 -/* 0FA418 7F0C58A8 3C028008 */ lui $v0, %hi(g_playerPlayerData) # $v0, 0x8008 -/* 0FA41C 7F0C58AC 24429F60 */ addiu $v0, %lo(g_playerPlayerData) # addiu $v0, $v0, -0x60a0 -/* 0FA420 7F0C58B0 000D6900 */ sll $t5, $t5, 4 -/* 0FA424 7F0C58B4 004D7821 */ addu $t7, $v0, $t5 -/* 0FA428 7F0C58B8 91EC0069 */ lbu $t4, 0x69($t7) -/* 0FA42C 7F0C58BC 904E01B9 */ lbu $t6, 0x1b9($v0) -/* 0FA430 7F0C58C0 8FA60084 */ lw $a2, 0x84($sp) -/* 0FA434 7F0C58C4 15CC0003 */ bne $t6, $t4, .Ljp7F0C58D4 -/* 0FA438 7F0C58C8 00000000 */ nop -/* 0FA43C 7F0C58CC 10000001 */ b .Ljp7F0C58D4 -/* 0FA440 7F0C58D0 8FA60088 */ lw $a2, 0x88($sp) -.Ljp7F0C58D4: -/* 0FA444 7F0C58D4 AFA60050 */ sw $a2, 0x50($sp) -.Ljp7F0C58D8: -/* 0FA448 7F0C58D8 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0FA44C 7F0C58DC 8FB90050 */ lw $t9, 0x50($sp) -/* 0FA450 7F0C58E0 02202025 */ move $a0, $s1 -/* 0FA454 7F0C58E4 02182821 */ addu $a1, $s0, $t8 -/* 0FA458 7F0C58E8 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FA45C 7F0C58EC 25060056 */ addiu $a2, $t0, 0x56 -/* 0FA460 7F0C58F0 8FA700A0 */ lw $a3, 0xa0($sp) -/* 0FA464 7F0C58F4 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA468 7F0C58F8 AFB90010 */ sw $t9, 0x10($sp) -/* 0FA46C 7F0C58FC 00408825 */ move $s1, $v0 -.Ljp7F0C5900: -/* 0FA470 7F0C5900 3C038008 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8008 -/* 0FA474 7F0C5904 100003BB */ b .Ljp7F0C67F4 -/* 0FA478 7F0C5908 8C63A120 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0FA47C 7F0C590C 24010002 */ li $at, 2 -.Ljp7F0C5910: -/* 0FA480 7F0C5910 1441011C */ bne $v0, $at, .Ljp7F0C5D84 -/* 0FA484 7F0C5914 3C048009 */ lui $a0, %hi(g_gameOverFlag) # $a0, 0x8009 -/* 0FA488 7F0C5918 8C84C774 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0FA48C 7F0C591C 2C8B0001 */ sltiu $t3, $a0, 1 -/* 0FA490 7F0C5920 11600005 */ beqz $t3, .Ljp7F0C5938 -/* 0FA494 7F0C5924 01602025 */ move $a0, $t3 -/* 0FA498 7F0C5928 3C048009 */ lui $a0, %hi(g_stopPlayFlag) # $a0, 0x8009 -/* 0FA49C 7F0C592C 8C84C770 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0FA4A0 7F0C5930 2C8D0001 */ sltiu $t5, $a0, 1 -/* 0FA4A4 7F0C5934 01A02025 */ move $a0, $t5 -.Ljp7F0C5938: -/* 0FA4A8 7F0C5938 0FC31303 */ jal mpwatchShouldDisplayRank -/* 0FA4AC 7F0C593C 00000000 */ nop -/* 0FA4B0 7F0C5940 10400034 */ beqz $v0, .Ljp7F0C5A14 -/* 0FA4B4 7F0C5944 27A400AC */ addiu $a0, $sp, 0xac -/* 0FA4B8 7F0C5948 0FC31251 */ jal write_playerrank_to_buffer -/* 0FA4BC 7F0C594C 8FA500D4 */ lw $a1, 0xd4($sp) -/* 0FA4C0 7F0C5950 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0FA4C4 7F0C5954 8DEF0EDC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0FA4C8 7F0C5958 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0FA4CC 7F0C595C 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FA4D0 7F0C5960 27A400BC */ addiu $a0, $sp, 0xbc -/* 0FA4D4 7F0C5964 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0FA4D8 7F0C5968 27A600AC */ addiu $a2, $sp, 0xac -/* 0FA4DC 7F0C596C AFA00014 */ sw $zero, 0x14($sp) -/* 0FA4E0 7F0C5970 0FC2BD4F */ jal textMeasure -/* 0FA4E4 7F0C5974 AFAF0010 */ sw $t7, 0x10($sp) -/* 0FA4E8 7F0C5978 0C001145 */ jal viGetViewLeft -/* 0FA4EC 7F0C597C 00000000 */ nop -/* 0FA4F0 7F0C5980 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0FA4F4 7F0C5984 8FB800C0 */ lw $t8, 0xc0($sp) -/* 0FA4F8 7F0C5988 004E6021 */ addu $t4, $v0, $t6 -/* 0FA4FC 7F0C598C 0018C843 */ sra $t9, $t8, 1 -/* 0FA500 7F0C5990 01992023 */ subu $a0, $t4, $t9 -/* 0FA504 7F0C5994 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA508 7F0C5998 0C001149 */ jal viGetViewTop -/* 0FA50C 7F0C599C AFA400CC */ sw $a0, 0xcc($sp) -/* 0FA510 7F0C59A0 8FAB00BC */ lw $t3, 0xbc($sp) -/* 0FA514 7F0C59A4 000B6843 */ sra $t5, $t3, 1 -/* 0FA518 7F0C59A8 004D7823 */ subu $t7, $v0, $t5 -/* 0FA51C 7F0C59AC 25EE0025 */ addiu $t6, $t7, 0x25 -/* 0FA520 7F0C59B0 0C001107 */ jal viGetX -/* 0FA524 7F0C59B4 AFAE00C8 */ sw $t6, 0xc8($sp) -/* 0FA528 7F0C59B8 00028400 */ sll $s0, $v0, 0x10 -/* 0FA52C 7F0C59BC 0010C403 */ sra $t8, $s0, 0x10 -/* 0FA530 7F0C59C0 0C00110B */ jal viGetY -/* 0FA534 7F0C59C4 03008025 */ move $s0, $t8 -/* 0FA538 7F0C59C8 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0FA53C 7F0C59CC 3C198004 */ lui $t9, %hi(ptrFontBankGothic) # $t9, 0x8004 -/* 0FA540 7F0C59D0 8F390EDC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0FA544 7F0C59D4 8D8C0EE0 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0FA548 7F0C59D8 3C0B00FF */ lui $t3, (0x00FF00B0 >> 16) # lui $t3, 0xff -/* 0FA54C 7F0C59DC 356B00B0 */ ori $t3, (0x00FF00B0 & 0xFFFF) # ori $t3, $t3, 0xb0 -/* 0FA550 7F0C59E0 AFAB0018 */ sw $t3, 0x18($sp) -/* 0FA554 7F0C59E4 02202025 */ move $a0, $s1 -/* 0FA558 7F0C59E8 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FA55C 7F0C59EC 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA560 7F0C59F0 27A700AC */ addiu $a3, $sp, 0xac -/* 0FA564 7F0C59F4 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FA568 7F0C59F8 AFA20020 */ sw $v0, 0x20($sp) -/* 0FA56C 7F0C59FC AFA00024 */ sw $zero, 0x24($sp) -/* 0FA570 7F0C5A00 AFA00028 */ sw $zero, 0x28($sp) -/* 0FA574 7F0C5A04 AFB90014 */ sw $t9, 0x14($sp) -/* 0FA578 7F0C5A08 0FC2B99B */ jal textRender -/* 0FA57C 7F0C5A0C AFAC0010 */ sw $t4, 0x10($sp) -/* 0FA580 7F0C5A10 00408825 */ move $s1, $v0 -.Ljp7F0C5A14: -/* 0FA584 7F0C5A14 0FC30AA2 */ jal langGet -/* 0FA588 7F0C5A18 3404A01C */ li $a0, 40988 -/* 0FA58C 7F0C5A1C 3404A01D */ li $a0, 40989 -/* 0FA590 7F0C5A20 0FC30AA2 */ jal langGet -/* 0FA594 7F0C5A24 AFA2004C */ sw $v0, 0x4c($sp) -/* 0FA598 7F0C5A28 8FA700D4 */ lw $a3, 0xd4($sp) -/* 0FA59C 7F0C5A2C 3C058006 */ lui $a1, %hi(ascii_pnum_KILLS) # $a1, 0x8006 -/* 0FA5A0 7F0C5A30 24A5BC70 */ addiu $a1, %lo(ascii_pnum_KILLS) # addiu $a1, $a1, -0x4390 -/* 0FA5A4 7F0C5A34 8FA6004C */ lw $a2, 0x4c($sp) -/* 0FA5A8 7F0C5A38 27A400AC */ addiu $a0, $sp, 0xac -/* 0FA5AC 7F0C5A3C AFA20010 */ sw $v0, 0x10($sp) -/* 0FA5B0 7F0C5A40 0C002B29 */ jal sprintf -/* 0FA5B4 7F0C5A44 24E70001 */ addiu $a3, $a3, 1 -/* 0FA5B8 7F0C5A48 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0FA5BC 7F0C5A4C 8DAD0EDC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0FA5C0 7F0C5A50 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0FA5C4 7F0C5A54 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FA5C8 7F0C5A58 27A400BC */ addiu $a0, $sp, 0xbc -/* 0FA5CC 7F0C5A5C 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0FA5D0 7F0C5A60 27A600AC */ addiu $a2, $sp, 0xac -/* 0FA5D4 7F0C5A64 AFA00014 */ sw $zero, 0x14($sp) -/* 0FA5D8 7F0C5A68 0FC2BD4F */ jal textMeasure -/* 0FA5DC 7F0C5A6C AFAD0010 */ sw $t5, 0x10($sp) -/* 0FA5E0 7F0C5A70 0C001145 */ jal viGetViewLeft -/* 0FA5E4 7F0C5A74 00000000 */ nop -/* 0FA5E8 7F0C5A78 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0FA5EC 7F0C5A7C 8FB800C0 */ lw $t8, 0xc0($sp) -/* 0FA5F0 7F0C5A80 004F7021 */ addu $t6, $v0, $t7 -/* 0FA5F4 7F0C5A84 00186043 */ sra $t4, $t8, 1 -/* 0FA5F8 7F0C5A88 01CC2023 */ subu $a0, $t6, $t4 -/* 0FA5FC 7F0C5A8C 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA600 7F0C5A90 0C001149 */ jal viGetViewTop -/* 0FA604 7F0C5A94 AFA400CC */ sw $a0, 0xcc($sp) -/* 0FA608 7F0C5A98 8FB900BC */ lw $t9, 0xbc($sp) -/* 0FA60C 7F0C5A9C 00195843 */ sra $t3, $t9, 1 -/* 0FA610 7F0C5AA0 004B6823 */ subu $t5, $v0, $t3 -/* 0FA614 7F0C5AA4 25AF0035 */ addiu $t7, $t5, 0x35 -/* 0FA618 7F0C5AA8 0C001107 */ jal viGetX -/* 0FA61C 7F0C5AAC AFAF00C8 */ sw $t7, 0xc8($sp) -/* 0FA620 7F0C5AB0 00028400 */ sll $s0, $v0, 0x10 -/* 0FA624 7F0C5AB4 0010C403 */ sra $t8, $s0, 0x10 -/* 0FA628 7F0C5AB8 0C00110B */ jal viGetY -/* 0FA62C 7F0C5ABC 03008025 */ move $s0, $t8 -/* 0FA630 7F0C5AC0 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) # $t6, 0x8004 -/* 0FA634 7F0C5AC4 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) # $t4, 0x8004 -/* 0FA638 7F0C5AC8 8D8C0EDC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0FA63C 7F0C5ACC 8DCE0EE0 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0FA640 7F0C5AD0 3C1900FF */ lui $t9, (0x00FF00B0 >> 16) # lui $t9, 0xff -/* 0FA644 7F0C5AD4 373900B0 */ ori $t9, (0x00FF00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0FA648 7F0C5AD8 AFB90018 */ sw $t9, 0x18($sp) -/* 0FA64C 7F0C5ADC 02202025 */ move $a0, $s1 -/* 0FA650 7F0C5AE0 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FA654 7F0C5AE4 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA658 7F0C5AE8 27A700AC */ addiu $a3, $sp, 0xac -/* 0FA65C 7F0C5AEC AFB0001C */ sw $s0, 0x1c($sp) -/* 0FA660 7F0C5AF0 AFA20020 */ sw $v0, 0x20($sp) -/* 0FA664 7F0C5AF4 AFA00024 */ sw $zero, 0x24($sp) -/* 0FA668 7F0C5AF8 AFA00028 */ sw $zero, 0x28($sp) -/* 0FA66C 7F0C5AFC AFAC0014 */ sw $t4, 0x14($sp) -/* 0FA670 7F0C5B00 0FC2B99B */ jal textRender -/* 0FA674 7F0C5B04 AFAE0010 */ sw $t6, 0x10($sp) -/* 0FA678 7F0C5B08 8FAB00D0 */ lw $t3, 0xd0($sp) -/* 0FA67C 7F0C5B0C 00408825 */ move $s1, $v0 -/* 0FA680 7F0C5B10 24010002 */ li $at, 2 -/* 0FA684 7F0C5B14 15610033 */ bne $t3, $at, .Ljp7F0C5BE4 -/* 0FA688 7F0C5B18 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0FA68C 7F0C5B1C 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0FA690 7F0C5B20 50400018 */ beql $v0, $zero, .Ljp7F0C5B84 -/* 0FA694 7F0C5B24 24010001 */ li $at, 1 -/* 0FA698 7F0C5B28 0C001145 */ jal viGetViewLeft -/* 0FA69C 7F0C5B2C 00000000 */ nop -/* 0FA6A0 7F0C5B30 00028400 */ sll $s0, $v0, 0x10 -/* 0FA6A4 7F0C5B34 00106C03 */ sra $t5, $s0, 0x10 -/* 0FA6A8 7F0C5B38 0C001149 */ jal viGetViewTop -/* 0FA6AC 7F0C5B3C 01A08025 */ move $s0, $t5 -/* 0FA6B0 7F0C5B40 8FB800D4 */ lw $t8, 0xd4($sp) -/* 0FA6B4 7F0C5B44 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0FA6B8 7F0C5B48 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0FA6BC 7F0C5B4C 001870C0 */ sll $t6, $t8, 3 -/* 0FA6C0 7F0C5B50 01D87023 */ subu $t6, $t6, $t8 -/* 0FA6C4 7F0C5B54 000E7100 */ sll $t6, $t6, 4 -/* 0FA6C8 7F0C5B58 00EE3821 */ addu $a3, $a3, $t6 -/* 0FA6CC 7F0C5B5C 020F2821 */ addu $a1, $s0, $t7 -/* 0FA6D0 7F0C5B60 24A50050 */ addiu $a1, $a1, 0x50 -/* 0FA6D4 7F0C5B64 8CE79F84 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0FA6D8 7F0C5B68 02202025 */ move $a0, $s1 -/* 0FA6DC 7F0C5B6C 24460046 */ addiu $a2, $v0, 0x46 -/* 0FA6E0 7F0C5B70 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA6E4 7F0C5B74 AFA00010 */ sw $zero, 0x10($sp) -/* 0FA6E8 7F0C5B78 00408825 */ move $s1, $v0 -/* 0FA6EC 7F0C5B7C 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0FA6F0 7F0C5B80 24010001 */ li $at, 1 -.Ljp7F0C5B84: -/* 0FA6F4 7F0C5B84 1041007C */ beq $v0, $at, .Ljp7F0C5D78 -/* 0FA6F8 7F0C5B88 000260C0 */ sll $t4, $v0, 3 -/* 0FA6FC 7F0C5B8C 01826023 */ subu $t4, $t4, $v0 -/* 0FA700 7F0C5B90 3C198008 */ lui $t9, %hi(g_playerPlayerData) # $t9, 0x8008 -/* 0FA704 7F0C5B94 27399F60 */ addiu $t9, %lo(g_playerPlayerData) # addiu $t9, $t9, -0x60a0 -/* 0FA708 7F0C5B98 000C6100 */ sll $t4, $t4, 4 -/* 0FA70C 7F0C5B9C 01995821 */ addu $t3, $t4, $t9 -/* 0FA710 7F0C5BA0 0C001145 */ jal viGetViewLeft -/* 0FA714 7F0C5BA4 AFAB0044 */ sw $t3, 0x44($sp) -/* 0FA718 7F0C5BA8 00028400 */ sll $s0, $v0, 0x10 -/* 0FA71C 7F0C5BAC 00106C03 */ sra $t5, $s0, 0x10 -/* 0FA720 7F0C5BB0 0C001149 */ jal viGetViewTop -/* 0FA724 7F0C5BB4 01A08025 */ move $s0, $t5 -/* 0FA728 7F0C5BB8 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0FA72C 7F0C5BBC 8FB80044 */ lw $t8, 0x44($sp) -/* 0FA730 7F0C5BC0 02202025 */ move $a0, $s1 -/* 0FA734 7F0C5BC4 020F2821 */ addu $a1, $s0, $t7 -/* 0FA738 7F0C5BC8 8F070028 */ lw $a3, 0x28($t8) -/* 0FA73C 7F0C5BCC AFA00010 */ sw $zero, 0x10($sp) -/* 0FA740 7F0C5BD0 24A50050 */ addiu $a1, $a1, 0x50 -/* 0FA744 7F0C5BD4 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA748 7F0C5BD8 24460056 */ addiu $a2, $v0, 0x56 -/* 0FA74C 7F0C5BDC 10000066 */ b .Ljp7F0C5D78 -/* 0FA750 7F0C5BE0 00408825 */ move $s1, $v0 -.Ljp7F0C5BE4: -/* 0FA754 7F0C5BE4 50400018 */ beql $v0, $zero, .Ljp7F0C5C48 -/* 0FA758 7F0C5BE8 24010001 */ li $at, 1 -/* 0FA75C 7F0C5BEC 0C001145 */ jal viGetViewLeft -/* 0FA760 7F0C5BF0 00000000 */ nop -/* 0FA764 7F0C5BF4 00028400 */ sll $s0, $v0, 0x10 -/* 0FA768 7F0C5BF8 00107403 */ sra $t6, $s0, 0x10 -/* 0FA76C 7F0C5BFC 0C001149 */ jal viGetViewTop -/* 0FA770 7F0C5C00 01C08025 */ move $s0, $t6 -/* 0FA774 7F0C5C04 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0FA778 7F0C5C08 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0FA77C 7F0C5C0C 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0FA780 7F0C5C10 001958C0 */ sll $t3, $t9, 3 -/* 0FA784 7F0C5C14 01795823 */ subu $t3, $t3, $t9 -/* 0FA788 7F0C5C18 000B5900 */ sll $t3, $t3, 4 -/* 0FA78C 7F0C5C1C 00EB3821 */ addu $a3, $a3, $t3 -/* 0FA790 7F0C5C20 020C2821 */ addu $a1, $s0, $t4 -/* 0FA794 7F0C5C24 24A50040 */ addiu $a1, $a1, 0x40 -/* 0FA798 7F0C5C28 8CE79F84 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0FA79C 7F0C5C2C 02202025 */ move $a0, $s1 -/* 0FA7A0 7F0C5C30 24460046 */ addiu $a2, $v0, 0x46 -/* 0FA7A4 7F0C5C34 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA7A8 7F0C5C38 AFA00010 */ sw $zero, 0x10($sp) -/* 0FA7AC 7F0C5C3C 00408825 */ move $s1, $v0 -/* 0FA7B0 7F0C5C40 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0FA7B4 7F0C5C44 24010001 */ li $at, 1 -.Ljp7F0C5C48: -/* 0FA7B8 7F0C5C48 10410017 */ beq $v0, $at, .Ljp7F0C5CA8 -/* 0FA7BC 7F0C5C4C 000268C0 */ sll $t5, $v0, 3 -/* 0FA7C0 7F0C5C50 01A26823 */ subu $t5, $t5, $v0 -/* 0FA7C4 7F0C5C54 3C0F8008 */ lui $t7, %hi(g_playerPlayerData) # $t7, 0x8008 -/* 0FA7C8 7F0C5C58 25EF9F60 */ addiu $t7, %lo(g_playerPlayerData) # addiu $t7, $t7, -0x60a0 -/* 0FA7CC 7F0C5C5C 000D6900 */ sll $t5, $t5, 4 -/* 0FA7D0 7F0C5C60 01AFC021 */ addu $t8, $t5, $t7 -/* 0FA7D4 7F0C5C64 0C001145 */ jal viGetViewLeft -/* 0FA7D8 7F0C5C68 AFB80044 */ sw $t8, 0x44($sp) -/* 0FA7DC 7F0C5C6C 00028400 */ sll $s0, $v0, 0x10 -/* 0FA7E0 7F0C5C70 00107403 */ sra $t6, $s0, 0x10 -/* 0FA7E4 7F0C5C74 0C001149 */ jal viGetViewTop -/* 0FA7E8 7F0C5C78 01C08025 */ move $s0, $t6 -/* 0FA7EC 7F0C5C7C 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0FA7F0 7F0C5C80 8FB90044 */ lw $t9, 0x44($sp) -/* 0FA7F4 7F0C5C84 02202025 */ move $a0, $s1 -/* 0FA7F8 7F0C5C88 020C2821 */ addu $a1, $s0, $t4 -/* 0FA7FC 7F0C5C8C 8F270028 */ lw $a3, 0x28($t9) -/* 0FA800 7F0C5C90 AFA00010 */ sw $zero, 0x10($sp) -/* 0FA804 7F0C5C94 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FA808 7F0C5C98 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA80C 7F0C5C9C 24460046 */ addiu $a2, $v0, 0x46 -/* 0FA810 7F0C5CA0 00408825 */ move $s1, $v0 -/* 0FA814 7F0C5CA4 8FA200D4 */ lw $v0, 0xd4($sp) -.Ljp7F0C5CA8: -/* 0FA818 7F0C5CA8 24010002 */ li $at, 2 -/* 0FA81C 7F0C5CAC 10410017 */ beq $v0, $at, .Ljp7F0C5D0C -/* 0FA820 7F0C5CB0 000258C0 */ sll $t3, $v0, 3 -/* 0FA824 7F0C5CB4 01625823 */ subu $t3, $t3, $v0 -/* 0FA828 7F0C5CB8 3C0D8008 */ lui $t5, %hi(g_playerPlayerData) # $t5, 0x8008 -/* 0FA82C 7F0C5CBC 25AD9F60 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x60a0 -/* 0FA830 7F0C5CC0 000B5900 */ sll $t3, $t3, 4 -/* 0FA834 7F0C5CC4 016D7821 */ addu $t7, $t3, $t5 -/* 0FA838 7F0C5CC8 0C001145 */ jal viGetViewLeft -/* 0FA83C 7F0C5CCC AFAF0044 */ sw $t7, 0x44($sp) -/* 0FA840 7F0C5CD0 00028400 */ sll $s0, $v0, 0x10 -/* 0FA844 7F0C5CD4 0010C403 */ sra $t8, $s0, 0x10 -/* 0FA848 7F0C5CD8 0C001149 */ jal viGetViewTop -/* 0FA84C 7F0C5CDC 03008025 */ move $s0, $t8 -/* 0FA850 7F0C5CE0 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0FA854 7F0C5CE4 8FAC0044 */ lw $t4, 0x44($sp) -/* 0FA858 7F0C5CE8 02202025 */ move $a0, $s1 -/* 0FA85C 7F0C5CEC 020E2821 */ addu $a1, $s0, $t6 -/* 0FA860 7F0C5CF0 8D87002C */ lw $a3, 0x2c($t4) -/* 0FA864 7F0C5CF4 AFA00010 */ sw $zero, 0x10($sp) -/* 0FA868 7F0C5CF8 24A50040 */ addiu $a1, $a1, 0x40 -/* 0FA86C 7F0C5CFC 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA870 7F0C5D00 24460056 */ addiu $a2, $v0, 0x56 -/* 0FA874 7F0C5D04 00408825 */ move $s1, $v0 -/* 0FA878 7F0C5D08 8FA200D4 */ lw $v0, 0xd4($sp) -.Ljp7F0C5D0C: -/* 0FA87C 7F0C5D0C 8FB900D0 */ lw $t9, 0xd0($sp) -/* 0FA880 7F0C5D10 24010004 */ li $at, 4 -/* 0FA884 7F0C5D14 17210018 */ bne $t9, $at, .Ljp7F0C5D78 -/* 0FA888 7F0C5D18 24010003 */ li $at, 3 -/* 0FA88C 7F0C5D1C 10410016 */ beq $v0, $at, .Ljp7F0C5D78 -/* 0FA890 7F0C5D20 000258C0 */ sll $t3, $v0, 3 -/* 0FA894 7F0C5D24 01625823 */ subu $t3, $t3, $v0 -/* 0FA898 7F0C5D28 3C0D8008 */ lui $t5, %hi(g_playerPlayerData) # $t5, 0x8008 -/* 0FA89C 7F0C5D2C 25AD9F60 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x60a0 -/* 0FA8A0 7F0C5D30 000B5900 */ sll $t3, $t3, 4 -/* 0FA8A4 7F0C5D34 016D7821 */ addu $t7, $t3, $t5 -/* 0FA8A8 7F0C5D38 0C001145 */ jal viGetViewLeft -/* 0FA8AC 7F0C5D3C AFAF0044 */ sw $t7, 0x44($sp) -/* 0FA8B0 7F0C5D40 00028400 */ sll $s0, $v0, 0x10 -/* 0FA8B4 7F0C5D44 0010C403 */ sra $t8, $s0, 0x10 -/* 0FA8B8 7F0C5D48 0C001149 */ jal viGetViewTop -/* 0FA8BC 7F0C5D4C 03008025 */ move $s0, $t8 -/* 0FA8C0 7F0C5D50 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0FA8C4 7F0C5D54 8FAC0044 */ lw $t4, 0x44($sp) -/* 0FA8C8 7F0C5D58 02202025 */ move $a0, $s1 -/* 0FA8CC 7F0C5D5C 020E2821 */ addu $a1, $s0, $t6 -/* 0FA8D0 7F0C5D60 8D870030 */ lw $a3, 0x30($t4) -/* 0FA8D4 7F0C5D64 AFA00010 */ sw $zero, 0x10($sp) -/* 0FA8D8 7F0C5D68 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FA8DC 7F0C5D6C 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FA8E0 7F0C5D70 24460056 */ addiu $a2, $v0, 0x56 -/* 0FA8E4 7F0C5D74 00408825 */ move $s1, $v0 -.Ljp7F0C5D78: -/* 0FA8E8 7F0C5D78 3C038008 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8008 -/* 0FA8EC 7F0C5D7C 1000029D */ b .Ljp7F0C67F4 -/* 0FA8F0 7F0C5D80 8C63A120 */ lw $v1, %lo(g_CurrentPlayer)($v1) -.Ljp7F0C5D84: -/* 0FA8F4 7F0C5D84 24010001 */ li $at, 1 -/* 0FA8F8 7F0C5D88 144101A9 */ bne $v0, $at, .Ljp7F0C6430 -/* 0FA8FC 7F0C5D8C 3C048009 */ lui $a0, %hi(g_gameOverFlag) # $a0, 0x8009 -/* 0FA900 7F0C5D90 8C84C774 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0FA904 7F0C5D94 2C990001 */ sltiu $t9, $a0, 1 -/* 0FA908 7F0C5D98 13200005 */ beqz $t9, .Ljp7F0C5DB0 -/* 0FA90C 7F0C5D9C 03202025 */ move $a0, $t9 -/* 0FA910 7F0C5DA0 3C048009 */ lui $a0, %hi(g_stopPlayFlag) # $a0, 0x8009 -/* 0FA914 7F0C5DA4 8C84C770 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0FA918 7F0C5DA8 2C8B0001 */ sltiu $t3, $a0, 1 -/* 0FA91C 7F0C5DAC 01602025 */ move $a0, $t3 -.Ljp7F0C5DB0: -/* 0FA920 7F0C5DB0 0FC31303 */ jal mpwatchShouldDisplayRank -/* 0FA924 7F0C5DB4 00000000 */ nop -/* 0FA928 7F0C5DB8 10400034 */ beqz $v0, .Ljp7F0C5E8C -/* 0FA92C 7F0C5DBC 27A400AC */ addiu $a0, $sp, 0xac -/* 0FA930 7F0C5DC0 0FC31251 */ jal write_playerrank_to_buffer -/* 0FA934 7F0C5DC4 8FA500D4 */ lw $a1, 0xd4($sp) -/* 0FA938 7F0C5DC8 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0FA93C 7F0C5DCC 8DAD0EDC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0FA940 7F0C5DD0 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0FA944 7F0C5DD4 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FA948 7F0C5DD8 27A400BC */ addiu $a0, $sp, 0xbc -/* 0FA94C 7F0C5DDC 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0FA950 7F0C5DE0 27A600AC */ addiu $a2, $sp, 0xac -/* 0FA954 7F0C5DE4 AFA00014 */ sw $zero, 0x14($sp) -/* 0FA958 7F0C5DE8 0FC2BD4F */ jal textMeasure -/* 0FA95C 7F0C5DEC AFAD0010 */ sw $t5, 0x10($sp) -/* 0FA960 7F0C5DF0 0C001145 */ jal viGetViewLeft -/* 0FA964 7F0C5DF4 00000000 */ nop -/* 0FA968 7F0C5DF8 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0FA96C 7F0C5DFC 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0FA970 7F0C5E00 004FC021 */ addu $t8, $v0, $t7 -/* 0FA974 7F0C5E04 000E6043 */ sra $t4, $t6, 1 -/* 0FA978 7F0C5E08 030C2023 */ subu $a0, $t8, $t4 -/* 0FA97C 7F0C5E0C 24840050 */ addiu $a0, $a0, 0x50 -/* 0FA980 7F0C5E10 0C001149 */ jal viGetViewTop -/* 0FA984 7F0C5E14 AFA400CC */ sw $a0, 0xcc($sp) -/* 0FA988 7F0C5E18 8FB900BC */ lw $t9, 0xbc($sp) -/* 0FA98C 7F0C5E1C 00195843 */ sra $t3, $t9, 1 -/* 0FA990 7F0C5E20 004B6823 */ subu $t5, $v0, $t3 -/* 0FA994 7F0C5E24 25AF0025 */ addiu $t7, $t5, 0x25 -/* 0FA998 7F0C5E28 0C001107 */ jal viGetX -/* 0FA99C 7F0C5E2C AFAF00C8 */ sw $t7, 0xc8($sp) -/* 0FA9A0 7F0C5E30 00028400 */ sll $s0, $v0, 0x10 -/* 0FA9A4 7F0C5E34 00107403 */ sra $t6, $s0, 0x10 -/* 0FA9A8 7F0C5E38 0C00110B */ jal viGetY -/* 0FA9AC 7F0C5E3C 01C08025 */ move $s0, $t6 -/* 0FA9B0 7F0C5E40 3C188004 */ lui $t8, %hi(ptrFontBankGothicChars) # $t8, 0x8004 -/* 0FA9B4 7F0C5E44 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) # $t4, 0x8004 -/* 0FA9B8 7F0C5E48 8D8C0EDC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0FA9BC 7F0C5E4C 8F180EE0 */ lw $t8, %lo(ptrFontBankGothicChars)($t8) -/* 0FA9C0 7F0C5E50 3C1900FF */ lui $t9, (0x00FF00B0 >> 16) # lui $t9, 0xff -/* 0FA9C4 7F0C5E54 373900B0 */ ori $t9, (0x00FF00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0FA9C8 7F0C5E58 AFB90018 */ sw $t9, 0x18($sp) -/* 0FA9CC 7F0C5E5C 02202025 */ move $a0, $s1 -/* 0FA9D0 7F0C5E60 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FA9D4 7F0C5E64 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FA9D8 7F0C5E68 27A700AC */ addiu $a3, $sp, 0xac -/* 0FA9DC 7F0C5E6C AFB0001C */ sw $s0, 0x1c($sp) -/* 0FA9E0 7F0C5E70 AFA20020 */ sw $v0, 0x20($sp) -/* 0FA9E4 7F0C5E74 AFA00024 */ sw $zero, 0x24($sp) -/* 0FA9E8 7F0C5E78 AFA00028 */ sw $zero, 0x28($sp) -/* 0FA9EC 7F0C5E7C AFAC0014 */ sw $t4, 0x14($sp) -/* 0FA9F0 7F0C5E80 0FC2B99B */ jal textRender -/* 0FA9F4 7F0C5E84 AFB80010 */ sw $t8, 0x10($sp) -/* 0FA9F8 7F0C5E88 00408825 */ move $s1, $v0 -.Ljp7F0C5E8C: -/* 0FA9FC 7F0C5E8C 0FC30AA2 */ jal langGet -/* 0FAA00 7F0C5E90 3404A01C */ li $a0, 40988 -/* 0FAA04 7F0C5E94 3404A01E */ li $a0, 40990 -/* 0FAA08 7F0C5E98 0FC30AA2 */ jal langGet -/* 0FAA0C 7F0C5E9C AFA2004C */ sw $v0, 0x4c($sp) -/* 0FAA10 7F0C5EA0 8FA700D4 */ lw $a3, 0xd4($sp) -/* 0FAA14 7F0C5EA4 3C058006 */ lui $a1, %hi(ascii_pnum_LOSSES) # $a1, 0x8006 -/* 0FAA18 7F0C5EA8 24A5BC78 */ addiu $a1, %lo(ascii_pnum_LOSSES) # addiu $a1, $a1, -0x4388 -/* 0FAA1C 7F0C5EAC 8FA6004C */ lw $a2, 0x4c($sp) -/* 0FAA20 7F0C5EB0 27A400AC */ addiu $a0, $sp, 0xac -/* 0FAA24 7F0C5EB4 AFA20010 */ sw $v0, 0x10($sp) -/* 0FAA28 7F0C5EB8 0C002B29 */ jal sprintf -/* 0FAA2C 7F0C5EBC 24E70001 */ addiu $a3, $a3, 1 -/* 0FAA30 7F0C5EC0 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0FAA34 7F0C5EC4 8D6B0EDC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0FAA38 7F0C5EC8 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0FAA3C 7F0C5ECC 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FAA40 7F0C5ED0 27A400BC */ addiu $a0, $sp, 0xbc -/* 0FAA44 7F0C5ED4 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0FAA48 7F0C5ED8 27A600AC */ addiu $a2, $sp, 0xac -/* 0FAA4C 7F0C5EDC AFA00014 */ sw $zero, 0x14($sp) -/* 0FAA50 7F0C5EE0 0FC2BD4F */ jal textMeasure -/* 0FAA54 7F0C5EE4 AFAB0010 */ sw $t3, 0x10($sp) -/* 0FAA58 7F0C5EE8 0C001145 */ jal viGetViewLeft -/* 0FAA5C 7F0C5EEC 00000000 */ nop -/* 0FAA60 7F0C5EF0 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0FAA64 7F0C5EF4 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0FAA68 7F0C5EF8 004D7821 */ addu $t7, $v0, $t5 -/* 0FAA6C 7F0C5EFC 000EC043 */ sra $t8, $t6, 1 -/* 0FAA70 7F0C5F00 01F82023 */ subu $a0, $t7, $t8 -/* 0FAA74 7F0C5F04 24840050 */ addiu $a0, $a0, 0x50 -/* 0FAA78 7F0C5F08 0C001149 */ jal viGetViewTop -/* 0FAA7C 7F0C5F0C AFA400CC */ sw $a0, 0xcc($sp) -/* 0FAA80 7F0C5F10 8FAC00BC */ lw $t4, 0xbc($sp) -/* 0FAA84 7F0C5F14 000CC843 */ sra $t9, $t4, 1 -/* 0FAA88 7F0C5F18 00595823 */ subu $t3, $v0, $t9 -/* 0FAA8C 7F0C5F1C 256D0035 */ addiu $t5, $t3, 0x35 -/* 0FAA90 7F0C5F20 0C001107 */ jal viGetX -/* 0FAA94 7F0C5F24 AFAD00C8 */ sw $t5, 0xc8($sp) -/* 0FAA98 7F0C5F28 00028400 */ sll $s0, $v0, 0x10 -/* 0FAA9C 7F0C5F2C 00107403 */ sra $t6, $s0, 0x10 -/* 0FAAA0 7F0C5F30 0C00110B */ jal viGetY -/* 0FAAA4 7F0C5F34 01C08025 */ move $s0, $t6 -/* 0FAAA8 7F0C5F38 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) # $t7, 0x8004 -/* 0FAAAC 7F0C5F3C 3C188004 */ lui $t8, %hi(ptrFontBankGothic) # $t8, 0x8004 -/* 0FAAB0 7F0C5F40 8F180EDC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0FAAB4 7F0C5F44 8DEF0EE0 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0FAAB8 7F0C5F48 3C0CFF40 */ lui $t4, (0xFF4040B0 >> 16) # lui $t4, 0xff40 -/* 0FAABC 7F0C5F4C 358C40B0 */ ori $t4, (0xFF4040B0 & 0xFFFF) # ori $t4, $t4, 0x40b0 -/* 0FAAC0 7F0C5F50 AFAC0018 */ sw $t4, 0x18($sp) -/* 0FAAC4 7F0C5F54 02202025 */ move $a0, $s1 -/* 0FAAC8 7F0C5F58 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FAACC 7F0C5F5C 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FAAD0 7F0C5F60 27A700AC */ addiu $a3, $sp, 0xac -/* 0FAAD4 7F0C5F64 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FAAD8 7F0C5F68 AFA20020 */ sw $v0, 0x20($sp) -/* 0FAADC 7F0C5F6C AFA00024 */ sw $zero, 0x24($sp) -/* 0FAAE0 7F0C5F70 AFA00028 */ sw $zero, 0x28($sp) -/* 0FAAE4 7F0C5F74 AFB80014 */ sw $t8, 0x14($sp) -/* 0FAAE8 7F0C5F78 0FC2B99B */ jal textRender -/* 0FAAEC 7F0C5F7C AFAF0010 */ sw $t7, 0x10($sp) -/* 0FAAF0 7F0C5F80 8FB900D0 */ lw $t9, 0xd0($sp) -/* 0FAAF4 7F0C5F84 24010002 */ li $at, 2 -/* 0FAAF8 7F0C5F88 00408825 */ move $s1, $v0 -/* 0FAAFC 7F0C5F8C 17210062 */ bne $t9, $at, .Ljp7F0C6118 -/* 0FAB00 7F0C5F90 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0FAB04 7F0C5F94 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0FAB08 7F0C5F98 3C188008 */ lui $t8, %hi(g_playerPlayerData + 0x24) # $t8, 0x8008 -/* 0FAB0C 7F0C5F9C 10400016 */ beqz $v0, .Ljp7F0C5FF8 -/* 0FAB10 7F0C5FA0 00000000 */ nop -/* 0FAB14 7F0C5FA4 0C001145 */ jal viGetViewLeft -/* 0FAB18 7F0C5FA8 00000000 */ nop -/* 0FAB1C 7F0C5FAC 00028400 */ sll $s0, $v0, 0x10 -/* 0FAB20 7F0C5FB0 00105C03 */ sra $t3, $s0, 0x10 -/* 0FAB24 7F0C5FB4 0C001149 */ jal viGetViewTop -/* 0FAB28 7F0C5FB8 01608025 */ move $s0, $t3 -/* 0FAB2C 7F0C5FBC 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0FAB30 7F0C5FC0 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0FAB34 7F0C5FC4 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0FAB38 7F0C5FC8 000E7880 */ sll $t7, $t6, 2 -/* 0FAB3C 7F0C5FCC 00EF3821 */ addu $a3, $a3, $t7 -/* 0FAB40 7F0C5FD0 020D2821 */ addu $a1, $s0, $t5 -/* 0FAB44 7F0C5FD4 24A50050 */ addiu $a1, $a1, 0x50 -/* 0FAB48 7F0C5FD8 8CE79F84 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0FAB4C 7F0C5FDC 02202025 */ move $a0, $s1 -/* 0FAB50 7F0C5FE0 24460046 */ addiu $a2, $v0, 0x46 -/* 0FAB54 7F0C5FE4 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FAB58 7F0C5FE8 AFA00010 */ sw $zero, 0x10($sp) -/* 0FAB5C 7F0C5FEC 00408825 */ move $s1, $v0 -/* 0FAB60 7F0C5FF0 10000019 */ b .Ljp7F0C6058 -/* 0FAB64 7F0C5FF4 8FA200D4 */ lw $v0, 0xd4($sp) -.Ljp7F0C5FF8: -/* 0FAB68 7F0C5FF8 8F189F84 */ lw $t8, %lo(g_playerPlayerData + 0x24)($t8) -/* 0FAB6C 7F0C5FFC 5B000017 */ blezl $t8, .Ljp7F0C605C -/* 0FAB70 7F0C6000 24010001 */ li $at, 1 -/* 0FAB74 7F0C6004 0C001145 */ jal viGetViewLeft -/* 0FAB78 7F0C6008 00000000 */ nop -/* 0FAB7C 7F0C600C 00028400 */ sll $s0, $v0, 0x10 -/* 0FAB80 7F0C6010 00106403 */ sra $t4, $s0, 0x10 -/* 0FAB84 7F0C6014 0C001149 */ jal viGetViewTop -/* 0FAB88 7F0C6018 01808025 */ move $s0, $t4 -/* 0FAB8C 7F0C601C 8FAB00D4 */ lw $t3, 0xd4($sp) -/* 0FAB90 7F0C6020 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0FAB94 7F0C6024 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0FAB98 7F0C6028 000B6880 */ sll $t5, $t3, 2 -/* 0FAB9C 7F0C602C 00ED3821 */ addu $a3, $a3, $t5 -/* 0FABA0 7F0C6030 240E0003 */ li $t6, 3 -/* 0FABA4 7F0C6034 02192821 */ addu $a1, $s0, $t9 -/* 0FABA8 7F0C6038 24A50050 */ addiu $a1, $a1, 0x50 -/* 0FABAC 7F0C603C AFAE0010 */ sw $t6, 0x10($sp) -/* 0FABB0 7F0C6040 8CE79F84 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0FABB4 7F0C6044 02202025 */ move $a0, $s1 -/* 0FABB8 7F0C6048 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FABBC 7F0C604C 24460046 */ addiu $a2, $v0, 0x46 -/* 0FABC0 7F0C6050 00408825 */ move $s1, $v0 -/* 0FABC4 7F0C6054 8FA200D4 */ lw $v0, 0xd4($sp) -.Ljp7F0C6058: -/* 0FABC8 7F0C6058 24010001 */ li $at, 1 -.Ljp7F0C605C: -/* 0FABCC 7F0C605C 10410016 */ beq $v0, $at, .Ljp7F0C60B8 -/* 0FABD0 7F0C6060 3C0E8008 */ lui $t6, %hi(g_playerPlayerData+0x70 + 0x28) # $t6, 0x8008 -/* 0FABD4 7F0C6064 3C188008 */ lui $t8, %hi(g_playerPlayerData) # $t8, 0x8008 -/* 0FABD8 7F0C6068 27189F60 */ addiu $t8, %lo(g_playerPlayerData) # addiu $t8, $t8, -0x60a0 -/* 0FABDC 7F0C606C 00027880 */ sll $t7, $v0, 2 -/* 0FABE0 7F0C6070 01F86021 */ addu $t4, $t7, $t8 -/* 0FABE4 7F0C6074 0C001145 */ jal viGetViewLeft -/* 0FABE8 7F0C6078 AFAC0044 */ sw $t4, 0x44($sp) -/* 0FABEC 7F0C607C 00028400 */ sll $s0, $v0, 0x10 -/* 0FABF0 7F0C6080 0010CC03 */ sra $t9, $s0, 0x10 -/* 0FABF4 7F0C6084 0C001149 */ jal viGetViewTop -/* 0FABF8 7F0C6088 03208025 */ move $s0, $t9 -/* 0FABFC 7F0C608C 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0FAC00 7F0C6090 8FAD0044 */ lw $t5, 0x44($sp) -/* 0FAC04 7F0C6094 02202025 */ move $a0, $s1 -/* 0FAC08 7F0C6098 020B2821 */ addu $a1, $s0, $t3 -/* 0FAC0C 7F0C609C 8DA70094 */ lw $a3, 0x94($t5) -/* 0FAC10 7F0C60A0 AFA00010 */ sw $zero, 0x10($sp) -/* 0FAC14 7F0C60A4 24A50050 */ addiu $a1, $a1, 0x50 -/* 0FAC18 7F0C60A8 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FAC1C 7F0C60AC 24460056 */ addiu $a2, $v0, 0x56 -/* 0FAC20 7F0C60B0 100000DC */ b .Ljp7F0C6424 -/* 0FAC24 7F0C60B4 00408825 */ move $s1, $v0 -.Ljp7F0C60B8: -/* 0FAC28 7F0C60B8 8DCE9FF8 */ lw $t6, %lo(g_playerPlayerData+0x70 + 0x28)($t6) -/* 0FAC2C 7F0C60BC 3C188008 */ lui $t8, %hi(g_playerPlayerData) # $t8, 0x8008 -/* 0FAC30 7F0C60C0 27189F60 */ addiu $t8, %lo(g_playerPlayerData) # addiu $t8, $t8, -0x60a0 -/* 0FAC34 7F0C60C4 19C000D7 */ blez $t6, .Ljp7F0C6424 -/* 0FAC38 7F0C60C8 00027880 */ sll $t7, $v0, 2 -/* 0FAC3C 7F0C60CC 01F86021 */ addu $t4, $t7, $t8 -/* 0FAC40 7F0C60D0 0C001145 */ jal viGetViewLeft -/* 0FAC44 7F0C60D4 AFAC0044 */ sw $t4, 0x44($sp) -/* 0FAC48 7F0C60D8 00028400 */ sll $s0, $v0, 0x10 -/* 0FAC4C 7F0C60DC 0010CC03 */ sra $t9, $s0, 0x10 -/* 0FAC50 7F0C60E0 0C001149 */ jal viGetViewTop -/* 0FAC54 7F0C60E4 03208025 */ move $s0, $t9 -/* 0FAC58 7F0C60E8 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0FAC5C 7F0C60EC 8FAD0044 */ lw $t5, 0x44($sp) -/* 0FAC60 7F0C60F0 240E0003 */ li $t6, 3 -/* 0FAC64 7F0C60F4 020B2821 */ addu $a1, $s0, $t3 -/* 0FAC68 7F0C60F8 8DA70094 */ lw $a3, 0x94($t5) -/* 0FAC6C 7F0C60FC AFAE0010 */ sw $t6, 0x10($sp) -/* 0FAC70 7F0C6100 24A50050 */ addiu $a1, $a1, 0x50 -/* 0FAC74 7F0C6104 02202025 */ move $a0, $s1 -/* 0FAC78 7F0C6108 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FAC7C 7F0C610C 24460056 */ addiu $a2, $v0, 0x56 -/* 0FAC80 7F0C6110 100000C4 */ b .Ljp7F0C6424 -/* 0FAC84 7F0C6114 00408825 */ move $s1, $v0 -.Ljp7F0C6118: -/* 0FAC88 7F0C6118 11E00015 */ beqz $t7, .Ljp7F0C6170 -/* 0FAC8C 7F0C611C 3C0D8008 */ lui $t5, %hi(g_playerPlayerData + 0x24) # $t5, 0x8008 -/* 0FAC90 7F0C6120 0C001145 */ jal viGetViewLeft -/* 0FAC94 7F0C6124 00000000 */ nop -/* 0FAC98 7F0C6128 00028400 */ sll $s0, $v0, 0x10 -/* 0FAC9C 7F0C612C 0010C403 */ sra $t8, $s0, 0x10 -/* 0FACA0 7F0C6130 0C001149 */ jal viGetViewTop -/* 0FACA4 7F0C6134 03008025 */ move $s0, $t8 -/* 0FACA8 7F0C6138 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0FACAC 7F0C613C 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0FACB0 7F0C6140 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0FACB4 7F0C6144 00195880 */ sll $t3, $t9, 2 -/* 0FACB8 7F0C6148 00EB3821 */ addu $a3, $a3, $t3 -/* 0FACBC 7F0C614C 020C2821 */ addu $a1, $s0, $t4 -/* 0FACC0 7F0C6150 24A50040 */ addiu $a1, $a1, 0x40 -/* 0FACC4 7F0C6154 8CE79F84 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0FACC8 7F0C6158 02202025 */ move $a0, $s1 -/* 0FACCC 7F0C615C 24460046 */ addiu $a2, $v0, 0x46 -/* 0FACD0 7F0C6160 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FACD4 7F0C6164 AFA00010 */ sw $zero, 0x10($sp) -/* 0FACD8 7F0C6168 10000018 */ b .Ljp7F0C61CC -/* 0FACDC 7F0C616C 00408825 */ move $s1, $v0 -.Ljp7F0C6170: -/* 0FACE0 7F0C6170 8DAD9F84 */ lw $t5, %lo(g_playerPlayerData + 0x24)($t5) -/* 0FACE4 7F0C6174 59A00016 */ blezl $t5, .Ljp7F0C61D0 -/* 0FACE8 7F0C6178 8FAB00D4 */ lw $t3, 0xd4($sp) -/* 0FACEC 7F0C617C 0C001145 */ jal viGetViewLeft -/* 0FACF0 7F0C6180 00000000 */ nop -/* 0FACF4 7F0C6184 00028400 */ sll $s0, $v0, 0x10 -/* 0FACF8 7F0C6188 00107403 */ sra $t6, $s0, 0x10 -/* 0FACFC 7F0C618C 0C001149 */ jal viGetViewTop -/* 0FAD00 7F0C6190 01C08025 */ move $s0, $t6 -/* 0FAD04 7F0C6194 8FB800D4 */ lw $t8, 0xd4($sp) -/* 0FAD08 7F0C6198 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0FAD0C 7F0C619C 3C078008 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0FAD10 7F0C61A0 00186080 */ sll $t4, $t8, 2 -/* 0FAD14 7F0C61A4 00EC3821 */ addu $a3, $a3, $t4 -/* 0FAD18 7F0C61A8 24190003 */ li $t9, 3 -/* 0FAD1C 7F0C61AC 020F2821 */ addu $a1, $s0, $t7 -/* 0FAD20 7F0C61B0 24A50040 */ addiu $a1, $a1, 0x40 -/* 0FAD24 7F0C61B4 AFB90010 */ sw $t9, 0x10($sp) -/* 0FAD28 7F0C61B8 8CE79F84 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0FAD2C 7F0C61BC 02202025 */ move $a0, $s1 -/* 0FAD30 7F0C61C0 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FAD34 7F0C61C4 24460046 */ addiu $a2, $v0, 0x46 -/* 0FAD38 7F0C61C8 00408825 */ move $s1, $v0 -.Ljp7F0C61CC: -/* 0FAD3C 7F0C61CC 8FAB00D4 */ lw $t3, 0xd4($sp) -.Ljp7F0C61D0: -/* 0FAD40 7F0C61D0 24010001 */ li $at, 1 -/* 0FAD44 7F0C61D4 3C0E8008 */ lui $t6, %hi(g_playerPlayerData) # $t6, 0x8008 -/* 0FAD48 7F0C61D8 11610014 */ beq $t3, $at, .Ljp7F0C622C -/* 0FAD4C 7F0C61DC 000B6880 */ sll $t5, $t3, 2 -/* 0FAD50 7F0C61E0 25CE9F60 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x60a0 -/* 0FAD54 7F0C61E4 01AE7821 */ addu $t7, $t5, $t6 -/* 0FAD58 7F0C61E8 0C001145 */ jal viGetViewLeft -/* 0FAD5C 7F0C61EC AFAF0044 */ sw $t7, 0x44($sp) -/* 0FAD60 7F0C61F0 00028400 */ sll $s0, $v0, 0x10 -/* 0FAD64 7F0C61F4 0010C403 */ sra $t8, $s0, 0x10 -/* 0FAD68 7F0C61F8 0C001149 */ jal viGetViewTop -/* 0FAD6C 7F0C61FC 03008025 */ move $s0, $t8 -/* 0FAD70 7F0C6200 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0FAD74 7F0C6204 8FB90044 */ lw $t9, 0x44($sp) -/* 0FAD78 7F0C6208 02202025 */ move $a0, $s1 -/* 0FAD7C 7F0C620C 020C2821 */ addu $a1, $s0, $t4 -/* 0FAD80 7F0C6210 8F270094 */ lw $a3, 0x94($t9) -/* 0FAD84 7F0C6214 AFA00010 */ sw $zero, 0x10($sp) -/* 0FAD88 7F0C6218 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FAD8C 7F0C621C 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FAD90 7F0C6220 24460046 */ addiu $a2, $v0, 0x46 -/* 0FAD94 7F0C6224 1000001A */ b .Ljp7F0C6290 -/* 0FAD98 7F0C6228 00408825 */ move $s1, $v0 -.Ljp7F0C622C: -/* 0FAD9C 7F0C622C 3C0B8008 */ lui $t3, %hi(g_playerPlayerData+0x70 + 0x28) # $t3, 0x8008 -/* 0FADA0 7F0C6230 8D6B9FF8 */ lw $t3, %lo(g_playerPlayerData+0x70 + 0x28)($t3) -/* 0FADA4 7F0C6234 8FAD00D4 */ lw $t5, 0xd4($sp) -/* 0FADA8 7F0C6238 3C0F8008 */ lui $t7, %hi(g_playerPlayerData) # $t7, 0x8008 -/* 0FADAC 7F0C623C 19600014 */ blez $t3, .Ljp7F0C6290 -/* 0FADB0 7F0C6240 000D7080 */ sll $t6, $t5, 2 -/* 0FADB4 7F0C6244 25EF9F60 */ addiu $t7, %lo(g_playerPlayerData) # addiu $t7, $t7, -0x60a0 -/* 0FADB8 7F0C6248 01CFC021 */ addu $t8, $t6, $t7 -/* 0FADBC 7F0C624C 0C001145 */ jal viGetViewLeft -/* 0FADC0 7F0C6250 AFB80044 */ sw $t8, 0x44($sp) -/* 0FADC4 7F0C6254 00028400 */ sll $s0, $v0, 0x10 -/* 0FADC8 7F0C6258 00106403 */ sra $t4, $s0, 0x10 -/* 0FADCC 7F0C625C 0C001149 */ jal viGetViewTop -/* 0FADD0 7F0C6260 01808025 */ move $s0, $t4 -/* 0FADD4 7F0C6264 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0FADD8 7F0C6268 8FAB0044 */ lw $t3, 0x44($sp) -/* 0FADDC 7F0C626C 240D0003 */ li $t5, 3 -/* 0FADE0 7F0C6270 02192821 */ addu $a1, $s0, $t9 -/* 0FADE4 7F0C6274 8D670094 */ lw $a3, 0x94($t3) -/* 0FADE8 7F0C6278 AFAD0010 */ sw $t5, 0x10($sp) -/* 0FADEC 7F0C627C 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FADF0 7F0C6280 02202025 */ move $a0, $s1 -/* 0FADF4 7F0C6284 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FADF8 7F0C6288 24460046 */ addiu $a2, $v0, 0x46 -/* 0FADFC 7F0C628C 00408825 */ move $s1, $v0 -.Ljp7F0C6290: -/* 0FAE00 7F0C6290 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0FAE04 7F0C6294 24010002 */ li $at, 2 -/* 0FAE08 7F0C6298 3C188008 */ lui $t8, %hi(g_playerPlayerData) # $t8, 0x8008 -/* 0FAE0C 7F0C629C 11C10014 */ beq $t6, $at, .Ljp7F0C62F0 -/* 0FAE10 7F0C62A0 000E7880 */ sll $t7, $t6, 2 -/* 0FAE14 7F0C62A4 27189F60 */ addiu $t8, %lo(g_playerPlayerData) # addiu $t8, $t8, -0x60a0 -/* 0FAE18 7F0C62A8 01F86021 */ addu $t4, $t7, $t8 -/* 0FAE1C 7F0C62AC 0C001145 */ jal viGetViewLeft -/* 0FAE20 7F0C62B0 AFAC0044 */ sw $t4, 0x44($sp) -/* 0FAE24 7F0C62B4 00028400 */ sll $s0, $v0, 0x10 -/* 0FAE28 7F0C62B8 0010CC03 */ sra $t9, $s0, 0x10 -/* 0FAE2C 7F0C62BC 0C001149 */ jal viGetViewTop -/* 0FAE30 7F0C62C0 03208025 */ move $s0, $t9 -/* 0FAE34 7F0C62C4 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0FAE38 7F0C62C8 8FAD0044 */ lw $t5, 0x44($sp) -/* 0FAE3C 7F0C62CC 02202025 */ move $a0, $s1 -/* 0FAE40 7F0C62D0 020B2821 */ addu $a1, $s0, $t3 -/* 0FAE44 7F0C62D4 8DA70104 */ lw $a3, 0x104($t5) -/* 0FAE48 7F0C62D8 AFA00010 */ sw $zero, 0x10($sp) -/* 0FAE4C 7F0C62DC 24A50040 */ addiu $a1, $a1, 0x40 -/* 0FAE50 7F0C62E0 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FAE54 7F0C62E4 24460056 */ addiu $a2, $v0, 0x56 -/* 0FAE58 7F0C62E8 1000001A */ b .Ljp7F0C6354 -/* 0FAE5C 7F0C62EC 00408825 */ move $s1, $v0 -.Ljp7F0C62F0: -/* 0FAE60 7F0C62F0 3C0E8008 */ lui $t6, %hi(g_playerPlayerData+0x70+0x70 + 0x2C) # $t6, 0x8008 -/* 0FAE64 7F0C62F4 8DCEA06C */ lw $t6, %lo(g_playerPlayerData+0x70+0x70 + 0x2C)($t6) -/* 0FAE68 7F0C62F8 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0FAE6C 7F0C62FC 3C0C8008 */ lui $t4, %hi(g_playerPlayerData) # $t4, 0x8008 -/* 0FAE70 7F0C6300 19C00014 */ blez $t6, .Ljp7F0C6354 -/* 0FAE74 7F0C6304 000FC080 */ sll $t8, $t7, 2 -/* 0FAE78 7F0C6308 258C9F60 */ addiu $t4, %lo(g_playerPlayerData) # addiu $t4, $t4, -0x60a0 -/* 0FAE7C 7F0C630C 030CC821 */ addu $t9, $t8, $t4 -/* 0FAE80 7F0C6310 0C001145 */ jal viGetViewLeft -/* 0FAE84 7F0C6314 AFB90044 */ sw $t9, 0x44($sp) -/* 0FAE88 7F0C6318 00028400 */ sll $s0, $v0, 0x10 -/* 0FAE8C 7F0C631C 00105C03 */ sra $t3, $s0, 0x10 -/* 0FAE90 7F0C6320 0C001149 */ jal viGetViewTop -/* 0FAE94 7F0C6324 01608025 */ move $s0, $t3 -/* 0FAE98 7F0C6328 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0FAE9C 7F0C632C 8FAE0044 */ lw $t6, 0x44($sp) -/* 0FAEA0 7F0C6330 240F0003 */ li $t7, 3 -/* 0FAEA4 7F0C6334 020D2821 */ addu $a1, $s0, $t5 -/* 0FAEA8 7F0C6338 8DC70104 */ lw $a3, 0x104($t6) -/* 0FAEAC 7F0C633C AFAF0010 */ sw $t7, 0x10($sp) -/* 0FAEB0 7F0C6340 24A50040 */ addiu $a1, $a1, 0x40 -/* 0FAEB4 7F0C6344 02202025 */ move $a0, $s1 -/* 0FAEB8 7F0C6348 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FAEBC 7F0C634C 24460056 */ addiu $a2, $v0, 0x56 -/* 0FAEC0 7F0C6350 00408825 */ move $s1, $v0 -.Ljp7F0C6354: -/* 0FAEC4 7F0C6354 8FB800D0 */ lw $t8, 0xd0($sp) -/* 0FAEC8 7F0C6358 24010004 */ li $at, 4 -/* 0FAECC 7F0C635C 8FAC00D4 */ lw $t4, 0xd4($sp) -/* 0FAED0 7F0C6360 17010030 */ bne $t8, $at, .Ljp7F0C6424 -/* 0FAED4 7F0C6364 24010003 */ li $at, 3 -/* 0FAED8 7F0C6368 11810015 */ beq $t4, $at, .Ljp7F0C63C0 -/* 0FAEDC 7F0C636C 000CC880 */ sll $t9, $t4, 2 -/* 0FAEE0 7F0C6370 3C0B8008 */ lui $t3, %hi(g_playerPlayerData) # $t3, 0x8008 -/* 0FAEE4 7F0C6374 256B9F60 */ addiu $t3, %lo(g_playerPlayerData) # addiu $t3, $t3, -0x60a0 -/* 0FAEE8 7F0C6378 032B6821 */ addu $t5, $t9, $t3 -/* 0FAEEC 7F0C637C 0C001145 */ jal viGetViewLeft -/* 0FAEF0 7F0C6380 AFAD0044 */ sw $t5, 0x44($sp) -/* 0FAEF4 7F0C6384 00028400 */ sll $s0, $v0, 0x10 -/* 0FAEF8 7F0C6388 00107403 */ sra $t6, $s0, 0x10 -/* 0FAEFC 7F0C638C 0C001149 */ jal viGetViewTop -/* 0FAF00 7F0C6390 01C08025 */ move $s0, $t6 -/* 0FAF04 7F0C6394 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0FAF08 7F0C6398 8FB80044 */ lw $t8, 0x44($sp) -/* 0FAF0C 7F0C639C 02202025 */ move $a0, $s1 -/* 0FAF10 7F0C63A0 020F2821 */ addu $a1, $s0, $t7 -/* 0FAF14 7F0C63A4 8F070174 */ lw $a3, 0x174($t8) -/* 0FAF18 7F0C63A8 AFA00010 */ sw $zero, 0x10($sp) -/* 0FAF1C 7F0C63AC 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FAF20 7F0C63B0 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FAF24 7F0C63B4 24460056 */ addiu $a2, $v0, 0x56 -/* 0FAF28 7F0C63B8 1000001A */ b .Ljp7F0C6424 -/* 0FAF2C 7F0C63BC 00408825 */ move $s1, $v0 -.Ljp7F0C63C0: -/* 0FAF30 7F0C63C0 3C0C8008 */ lui $t4, %hi(g_playerPlayerData+0x70+0x70+0x70+0x30) # $t4, 0x8008 -/* 0FAF34 7F0C63C4 8D8CA0E0 */ lw $t4, %lo(g_playerPlayerData+0x70+0x70+0x70+0x30)($t4) -/* 0FAF38 7F0C63C8 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0FAF3C 7F0C63CC 3C0D8008 */ lui $t5, %hi(g_playerPlayerData) # $t5, 0x8008 -/* 0FAF40 7F0C63D0 19800014 */ blez $t4, .Ljp7F0C6424 -/* 0FAF44 7F0C63D4 00195880 */ sll $t3, $t9, 2 -/* 0FAF48 7F0C63D8 25AD9F60 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x60a0 -/* 0FAF4C 7F0C63DC 016D7021 */ addu $t6, $t3, $t5 -/* 0FAF50 7F0C63E0 0C001145 */ jal viGetViewLeft -/* 0FAF54 7F0C63E4 AFAE0044 */ sw $t6, 0x44($sp) -/* 0FAF58 7F0C63E8 00028400 */ sll $s0, $v0, 0x10 -/* 0FAF5C 7F0C63EC 00107C03 */ sra $t7, $s0, 0x10 -/* 0FAF60 7F0C63F0 0C001149 */ jal viGetViewTop -/* 0FAF64 7F0C63F4 01E08025 */ move $s0, $t7 -/* 0FAF68 7F0C63F8 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0FAF6C 7F0C63FC 8FAC0044 */ lw $t4, 0x44($sp) -/* 0FAF70 7F0C6400 24190003 */ li $t9, 3 -/* 0FAF74 7F0C6404 02182821 */ addu $a1, $s0, $t8 -/* 0FAF78 7F0C6408 8D870174 */ lw $a3, 0x174($t4) -/* 0FAF7C 7F0C640C AFB90010 */ sw $t9, 0x10($sp) -/* 0FAF80 7F0C6410 24A50060 */ addiu $a1, $a1, 0x60 -/* 0FAF84 7F0C6414 02202025 */ move $a0, $s1 -/* 0FAF88 7F0C6418 0FC31094 */ jal display_text_for_playerdata_on_MP_menu -/* 0FAF8C 7F0C641C 24460056 */ addiu $a2, $v0, 0x56 -/* 0FAF90 7F0C6420 00408825 */ move $s1, $v0 -.Ljp7F0C6424: -/* 0FAF94 7F0C6424 3C038008 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8008 -/* 0FAF98 7F0C6428 100000F2 */ b .Ljp7F0C67F4 -/* 0FAF9C 7F0C642C 8C63A120 */ lw $v1, %lo(g_CurrentPlayer)($v1) -.Ljp7F0C6430: -/* 0FAFA0 7F0C6430 544000F1 */ bnezl $v0, .Ljp7F0C67F8 -/* 0FAFA4 7F0C6434 8C6D29C8 */ lw $t5, 0x29c8($v1) -/* 0FAFA8 7F0C6438 8FAD00D0 */ lw $t5, 0xd0($sp) -/* 0FAFAC 7F0C643C 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0FAFB0 7F0C6440 29A10003 */ slti $at, $t5, 3 -/* 0FAFB4 7F0C6444 1420000A */ bnez $at, .Ljp7F0C6470 -/* 0FAFB8 7F0C6448 AFAB0074 */ sw $t3, 0x74($sp) -/* 0FAFBC 7F0C644C 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0FAFC0 7F0C6450 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0FAFC4 7F0C6454 2578FFF9 */ addiu $t8, $t3, -7 -/* 0FAFC8 7F0C6458 31CF0001 */ andi $t7, $t6, 1 -/* 0FAFCC 7F0C645C 11E00003 */ beqz $t7, .Ljp7F0C646C -/* 0FAFD0 7F0C6460 25990007 */ addiu $t9, $t4, 7 -/* 0FAFD4 7F0C6464 10000002 */ b .Ljp7F0C6470 -/* 0FAFD8 7F0C6468 AFB80074 */ sw $t8, 0x74($sp) -.Ljp7F0C646C: -/* 0FAFDC 7F0C646C AFB90074 */ sw $t9, 0x74($sp) -.Ljp7F0C6470: -/* 0FAFE0 7F0C6470 0FC30AA2 */ jal langGet -/* 0FAFE4 7F0C6474 3404A01F */ li $a0, 40991 -/* 0FAFE8 7F0C6478 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0FAFEC 7F0C647C 8DAD0EDC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0FAFF0 7F0C6480 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0FAFF4 7F0C6484 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0FAFF8 7F0C6488 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FAFFC 7F0C648C 27A4007C */ addiu $a0, $sp, 0x7c -/* 0FB000 7F0C6490 27A50078 */ addiu $a1, $sp, 0x78 -/* 0FB004 7F0C6494 00403025 */ move $a2, $v0 -/* 0FB008 7F0C6498 AFA00014 */ sw $zero, 0x14($sp) -/* 0FB00C 7F0C649C 0FC2BD4F */ jal textMeasure -/* 0FB010 7F0C64A0 AFAD0010 */ sw $t5, 0x10($sp) -/* 0FB014 7F0C64A4 0C001145 */ jal viGetViewLeft -/* 0FB018 7F0C64A8 00000000 */ nop -/* 0FB01C 7F0C64AC 8FAE0074 */ lw $t6, 0x74($sp) -/* 0FB020 7F0C64B0 8FAB0078 */ lw $t3, 0x78($sp) -/* 0FB024 7F0C64B4 004E7821 */ addu $t7, $v0, $t6 -/* 0FB028 7F0C64B8 000BC043 */ sra $t8, $t3, 1 -/* 0FB02C 7F0C64BC 01F82023 */ subu $a0, $t7, $t8 -/* 0FB030 7F0C64C0 24840050 */ addiu $a0, $a0, 0x50 -/* 0FB034 7F0C64C4 0C001149 */ jal viGetViewTop -/* 0FB038 7F0C64C8 AFA400CC */ sw $a0, 0xcc($sp) -/* 0FB03C 7F0C64CC 8FAC007C */ lw $t4, 0x7c($sp) -/* 0FB040 7F0C64D0 000CC843 */ sra $t9, $t4, 1 -/* 0FB044 7F0C64D4 00596823 */ subu $t5, $v0, $t9 -/* 0FB048 7F0C64D8 25AE0025 */ addiu $t6, $t5, 0x25 -/* 0FB04C 7F0C64DC 0C001107 */ jal viGetX -/* 0FB050 7F0C64E0 AFAE00C8 */ sw $t6, 0xc8($sp) -/* 0FB054 7F0C64E4 00028400 */ sll $s0, $v0, 0x10 -/* 0FB058 7F0C64E8 00105C03 */ sra $t3, $s0, 0x10 -/* 0FB05C 7F0C64EC 0C00110B */ jal viGetY -/* 0FB060 7F0C64F0 01608025 */ move $s0, $t3 -/* 0FB064 7F0C64F4 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) # $t7, 0x8004 -/* 0FB068 7F0C64F8 3C188004 */ lui $t8, %hi(ptrFontBankGothic) # $t8, 0x8004 -/* 0FB06C 7F0C64FC 8F180EDC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0FB070 7F0C6500 8DEF0EE0 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0FB074 7F0C6504 3C0C00FF */ lui $t4, (0x00FF00B0 >> 16) # lui $t4, 0xff -/* 0FB078 7F0C6508 358C00B0 */ ori $t4, (0x00FF00B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0FB07C 7F0C650C AFAC0018 */ sw $t4, 0x18($sp) -/* 0FB080 7F0C6510 02202025 */ move $a0, $s1 -/* 0FB084 7F0C6514 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FB088 7F0C6518 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FB08C 7F0C651C 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FB090 7F0C6520 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FB094 7F0C6524 AFA20020 */ sw $v0, 0x20($sp) -/* 0FB098 7F0C6528 AFA00024 */ sw $zero, 0x24($sp) -/* 0FB09C 7F0C652C AFA00028 */ sw $zero, 0x28($sp) -/* 0FB0A0 7F0C6530 AFB80014 */ sw $t8, 0x14($sp) -/* 0FB0A4 7F0C6534 0FC2B99B */ jal textRender -/* 0FB0A8 7F0C6538 AFAF0010 */ sw $t7, 0x10($sp) -/* 0FB0AC 7F0C653C 00408825 */ move $s1, $v0 -/* 0FB0B0 7F0C6540 8FA400D4 */ lw $a0, 0xd4($sp) -/* 0FB0B4 7F0C6544 0FC026DC */ jal frontGetPlayersFavoriteWeaponInHand -/* 0FB0B8 7F0C6548 00002825 */ move $a1, $zero -/* 0FB0BC 7F0C654C 3C198004 */ lui $t9, %hi(ptrFontBankGothic) # $t9, 0x8004 -/* 0FB0C0 7F0C6550 8F390EDC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0FB0C4 7F0C6554 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0FB0C8 7F0C6558 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0FB0CC 7F0C655C 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FB0D0 7F0C6560 27A4007C */ addiu $a0, $sp, 0x7c -/* 0FB0D4 7F0C6564 27A50078 */ addiu $a1, $sp, 0x78 -/* 0FB0D8 7F0C6568 00403025 */ move $a2, $v0 -/* 0FB0DC 7F0C656C AFA00014 */ sw $zero, 0x14($sp) -/* 0FB0E0 7F0C6570 0FC2BD4F */ jal textMeasure -/* 0FB0E4 7F0C6574 AFB90010 */ sw $t9, 0x10($sp) -/* 0FB0E8 7F0C6578 0C001145 */ jal viGetViewLeft -/* 0FB0EC 7F0C657C 00000000 */ nop -/* 0FB0F0 7F0C6580 8FAD0074 */ lw $t5, 0x74($sp) -/* 0FB0F4 7F0C6584 8FAB0078 */ lw $t3, 0x78($sp) -/* 0FB0F8 7F0C6588 004D7021 */ addu $t6, $v0, $t5 -/* 0FB0FC 7F0C658C 000B7843 */ sra $t7, $t3, 1 -/* 0FB100 7F0C6590 01CF2023 */ subu $a0, $t6, $t7 -/* 0FB104 7F0C6594 24840050 */ addiu $a0, $a0, 0x50 -/* 0FB108 7F0C6598 0C001149 */ jal viGetViewTop -/* 0FB10C 7F0C659C AFA400CC */ sw $a0, 0xcc($sp) -/* 0FB110 7F0C65A0 3C0C8005 */ lui $t4, %hi(j_text_trigger) # $t4, 0x8005 -/* 0FB114 7F0C65A4 8D8C8500 */ lw $t4, %lo(j_text_trigger)($t4) -/* 0FB118 7F0C65A8 00024400 */ sll $t0, $v0, 0x10 -/* 0FB11C 7F0C65AC 0008C403 */ sra $t8, $t0, 0x10 -/* 0FB120 7F0C65B0 11800003 */ beqz $t4, .Ljp7F0C65C0 -/* 0FB124 7F0C65B4 03004025 */ move $t0, $t8 -/* 0FB128 7F0C65B8 10000002 */ b .Ljp7F0C65C4 -/* 0FB12C 7F0C65BC 24040004 */ li $a0, 4 -.Ljp7F0C65C0: -/* 0FB130 7F0C65C0 00002025 */ move $a0, $zero -.Ljp7F0C65C4: -/* 0FB134 7F0C65C4 8FAD007C */ lw $t5, 0x7c($sp) -/* 0FB138 7F0C65C8 0088C821 */ addu $t9, $a0, $t0 -/* 0FB13C 7F0C65CC 000D5843 */ sra $t3, $t5, 1 -/* 0FB140 7F0C65D0 032B7023 */ subu $t6, $t9, $t3 -/* 0FB144 7F0C65D4 25CF0035 */ addiu $t7, $t6, 0x35 -/* 0FB148 7F0C65D8 0C001107 */ jal viGetX -/* 0FB14C 7F0C65DC AFAF00C8 */ sw $t7, 0xc8($sp) -/* 0FB150 7F0C65E0 00028400 */ sll $s0, $v0, 0x10 -/* 0FB154 7F0C65E4 0010C403 */ sra $t8, $s0, 0x10 -/* 0FB158 7F0C65E8 0C00110B */ jal viGetY -/* 0FB15C 7F0C65EC 03008025 */ move $s0, $t8 -/* 0FB160 7F0C65F0 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0FB164 7F0C65F4 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0FB168 7F0C65F8 8DAD0EDC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0FB16C 7F0C65FC 8D8C0EE0 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0FB170 7F0C6600 3C1900FF */ lui $t9, (0x00FF00B0 >> 16) # lui $t9, 0xff -/* 0FB174 7F0C6604 373900B0 */ ori $t9, (0x00FF00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0FB178 7F0C6608 AFB90018 */ sw $t9, 0x18($sp) -/* 0FB17C 7F0C660C 02202025 */ move $a0, $s1 -/* 0FB180 7F0C6610 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FB184 7F0C6614 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FB188 7F0C6618 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FB18C 7F0C661C AFB0001C */ sw $s0, 0x1c($sp) -/* 0FB190 7F0C6620 AFA20020 */ sw $v0, 0x20($sp) -/* 0FB194 7F0C6624 AFA00024 */ sw $zero, 0x24($sp) -/* 0FB198 7F0C6628 AFA00028 */ sw $zero, 0x28($sp) -/* 0FB19C 7F0C662C AFAD0014 */ sw $t5, 0x14($sp) -/* 0FB1A0 7F0C6630 0FC2B99B */ jal textRender -/* 0FB1A4 7F0C6634 AFAC0010 */ sw $t4, 0x10($sp) -/* 0FB1A8 7F0C6638 3C038008 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8008 -/* 0FB1AC 7F0C663C 8C63A120 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0FB1B0 7F0C6640 00408825 */ move $s1, $v0 -/* 0FB1B4 7F0C6644 27A4007C */ addiu $a0, $sp, 0x7c -/* 0FB1B8 7F0C6648 8C682A10 */ lw $t0, 0x2a10($v1) -/* 0FB1BC 7F0C664C 27A50078 */ addiu $a1, $sp, 0x78 -/* 0FB1C0 7F0C6650 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0FB1C4 7F0C6654 11000031 */ beqz $t0, .Ljp7F0C671C -/* 0FB1C8 7F0C6658 01003025 */ move $a2, $t0 -/* 0FB1CC 7F0C665C 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0FB1D0 7F0C6660 8D6B0EDC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0FB1D4 7F0C6664 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FB1D8 7F0C6668 AFA00014 */ sw $zero, 0x14($sp) -/* 0FB1DC 7F0C666C AFA800A4 */ sw $t0, 0xa4($sp) -/* 0FB1E0 7F0C6670 0FC2BD4F */ jal textMeasure -/* 0FB1E4 7F0C6674 AFAB0010 */ sw $t3, 0x10($sp) -/* 0FB1E8 7F0C6678 0C001145 */ jal viGetViewLeft -/* 0FB1EC 7F0C667C 00000000 */ nop -/* 0FB1F0 7F0C6680 8FAE0074 */ lw $t6, 0x74($sp) -/* 0FB1F4 7F0C6684 8FB80078 */ lw $t8, 0x78($sp) -/* 0FB1F8 7F0C6688 004E7821 */ addu $t7, $v0, $t6 -/* 0FB1FC 7F0C668C 00186043 */ sra $t4, $t8, 1 -/* 0FB200 7F0C6690 01EC2023 */ subu $a0, $t7, $t4 -/* 0FB204 7F0C6694 24840050 */ addiu $a0, $a0, 0x50 -/* 0FB208 7F0C6698 0C001149 */ jal viGetViewTop -/* 0FB20C 7F0C669C AFA400CC */ sw $a0, 0xcc($sp) -/* 0FB210 7F0C66A0 8FAD007C */ lw $t5, 0x7c($sp) -/* 0FB214 7F0C66A4 000DC843 */ sra $t9, $t5, 1 -/* 0FB218 7F0C66A8 00595823 */ subu $t3, $v0, $t9 -/* 0FB21C 7F0C66AC 256E004B */ addiu $t6, $t3, 0x4b -/* 0FB220 7F0C66B0 0C001107 */ jal viGetX -/* 0FB224 7F0C66B4 AFAE00C8 */ sw $t6, 0xc8($sp) -/* 0FB228 7F0C66B8 00028400 */ sll $s0, $v0, 0x10 -/* 0FB22C 7F0C66BC 0010C403 */ sra $t8, $s0, 0x10 -/* 0FB230 7F0C66C0 0C00110B */ jal viGetY -/* 0FB234 7F0C66C4 03008025 */ move $s0, $t8 -/* 0FB238 7F0C66C8 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) # $t7, 0x8004 -/* 0FB23C 7F0C66CC 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) # $t4, 0x8004 -/* 0FB240 7F0C66D0 8D8C0EDC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0FB244 7F0C66D4 8DEF0EE0 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0FB248 7F0C66D8 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0FB24C 7F0C66DC 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0FB250 7F0C66E0 AFAD0018 */ sw $t5, 0x18($sp) -/* 0FB254 7F0C66E4 02202025 */ move $a0, $s1 -/* 0FB258 7F0C66E8 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FB25C 7F0C66EC 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FB260 7F0C66F0 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FB264 7F0C66F4 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FB268 7F0C66F8 AFA20020 */ sw $v0, 0x20($sp) -/* 0FB26C 7F0C66FC AFA00024 */ sw $zero, 0x24($sp) -/* 0FB270 7F0C6700 AFA00028 */ sw $zero, 0x28($sp) -/* 0FB274 7F0C6704 AFAC0014 */ sw $t4, 0x14($sp) -/* 0FB278 7F0C6708 0FC2B99B */ jal textRender -/* 0FB27C 7F0C670C AFAF0010 */ sw $t7, 0x10($sp) -/* 0FB280 7F0C6710 3C038008 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8008 -/* 0FB284 7F0C6714 8C63A120 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0FB288 7F0C6718 00408825 */ move $s1, $v0 -.Ljp7F0C671C: -/* 0FB28C 7F0C671C 8C622A14 */ lw $v0, 0x2a14($v1) -/* 0FB290 7F0C6720 27A4007C */ addiu $a0, $sp, 0x7c -/* 0FB294 7F0C6724 27A50078 */ addiu $a1, $sp, 0x78 -/* 0FB298 7F0C6728 10400032 */ beqz $v0, .Ljp7F0C67F4 -/* 0FB29C 7F0C672C 00403025 */ move $a2, $v0 -/* 0FB2A0 7F0C6730 3C198004 */ lui $t9, %hi(ptrFontBankGothic) # $t9, 0x8004 -/* 0FB2A4 7F0C6734 8F390EDC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0FB2A8 7F0C6738 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0FB2AC 7F0C673C 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FB2B0 7F0C6740 AFA00014 */ sw $zero, 0x14($sp) -/* 0FB2B4 7F0C6744 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0FB2B8 7F0C6748 0FC2BD4F */ jal textMeasure -/* 0FB2BC 7F0C674C AFB90010 */ sw $t9, 0x10($sp) -/* 0FB2C0 7F0C6750 0C001145 */ jal viGetViewLeft -/* 0FB2C4 7F0C6754 00000000 */ nop -/* 0FB2C8 7F0C6758 8FAB0074 */ lw $t3, 0x74($sp) -/* 0FB2CC 7F0C675C 8FB80078 */ lw $t8, 0x78($sp) -/* 0FB2D0 7F0C6760 004B7021 */ addu $t6, $v0, $t3 -/* 0FB2D4 7F0C6764 00187843 */ sra $t7, $t8, 1 -/* 0FB2D8 7F0C6768 01CF2023 */ subu $a0, $t6, $t7 -/* 0FB2DC 7F0C676C 24840050 */ addiu $a0, $a0, 0x50 -/* 0FB2E0 7F0C6770 0C001149 */ jal viGetViewTop -/* 0FB2E4 7F0C6774 AFA400CC */ sw $a0, 0xcc($sp) -/* 0FB2E8 7F0C6778 8FAC007C */ lw $t4, 0x7c($sp) -/* 0FB2EC 7F0C677C 000C6843 */ sra $t5, $t4, 1 -/* 0FB2F0 7F0C6780 004DC823 */ subu $t9, $v0, $t5 -/* 0FB2F4 7F0C6784 272B0058 */ addiu $t3, $t9, 0x58 -/* 0FB2F8 7F0C6788 0C001107 */ jal viGetX -/* 0FB2FC 7F0C678C AFAB00C8 */ sw $t3, 0xc8($sp) -/* 0FB300 7F0C6790 00028400 */ sll $s0, $v0, 0x10 -/* 0FB304 7F0C6794 0010C403 */ sra $t8, $s0, 0x10 -/* 0FB308 7F0C6798 0C00110B */ jal viGetY -/* 0FB30C 7F0C679C 03008025 */ move $s0, $t8 -/* 0FB310 7F0C67A0 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) # $t6, 0x8004 -/* 0FB314 7F0C67A4 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0FB318 7F0C67A8 8DEF0EDC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0FB31C 7F0C67AC 8DCE0EE0 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0FB320 7F0C67B0 3C0C00FF */ lui $t4, (0x00FF00B0 >> 16) # lui $t4, 0xff -/* 0FB324 7F0C67B4 358C00B0 */ ori $t4, (0x00FF00B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0FB328 7F0C67B8 AFAC0018 */ sw $t4, 0x18($sp) -/* 0FB32C 7F0C67BC 02202025 */ move $a0, $s1 -/* 0FB330 7F0C67C0 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FB334 7F0C67C4 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FB338 7F0C67C8 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FB33C 7F0C67CC AFB0001C */ sw $s0, 0x1c($sp) -/* 0FB340 7F0C67D0 AFA20020 */ sw $v0, 0x20($sp) -/* 0FB344 7F0C67D4 AFA00024 */ sw $zero, 0x24($sp) -/* 0FB348 7F0C67D8 AFA00028 */ sw $zero, 0x28($sp) -/* 0FB34C 7F0C67DC AFAF0014 */ sw $t7, 0x14($sp) -/* 0FB350 7F0C67E0 0FC2B99B */ jal textRender -/* 0FB354 7F0C67E4 AFAE0010 */ sw $t6, 0x10($sp) -/* 0FB358 7F0C67E8 3C038008 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8008 -/* 0FB35C 7F0C67EC 8C63A120 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0FB360 7F0C67F0 00408825 */ move $s1, $v0 -.Ljp7F0C67F4: -/* 0FB364 7F0C67F4 8C6D29C8 */ lw $t5, 0x29c8($v1) -.Ljp7F0C67F8: -/* 0FB368 7F0C67F8 24010006 */ li $at, 6 -/* 0FB36C 7F0C67FC 15A100B0 */ bne $t5, $at, .Ljp7F0C6AC0 -/* 0FB370 7F0C6800 00000000 */ nop -/* 0FB374 7F0C6804 0FC30AA2 */ jal langGet -/* 0FB378 7F0C6808 3404A020 */ li $a0, 40992 -/* 0FB37C 7F0C680C 3C198004 */ lui $t9, %hi(ptrFontBankGothic) # $t9, 0x8004 -/* 0FB380 7F0C6810 8F390EDC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0FB384 7F0C6814 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0FB388 7F0C6818 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0FB38C 7F0C681C 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FB390 7F0C6820 27A400BC */ addiu $a0, $sp, 0xbc -/* 0FB394 7F0C6824 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0FB398 7F0C6828 00403025 */ move $a2, $v0 -/* 0FB39C 7F0C682C AFA00014 */ sw $zero, 0x14($sp) -/* 0FB3A0 7F0C6830 0FC2BD4F */ jal textMeasure -/* 0FB3A4 7F0C6834 AFB90010 */ sw $t9, 0x10($sp) -/* 0FB3A8 7F0C6838 0C001145 */ jal viGetViewLeft -/* 0FB3AC 7F0C683C 00000000 */ nop -/* 0FB3B0 7F0C6840 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0FB3B4 7F0C6844 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0FB3B8 7F0C6848 004BC021 */ addu $t8, $v0, $t3 -/* 0FB3BC 7F0C684C 000E7843 */ sra $t7, $t6, 1 -/* 0FB3C0 7F0C6850 030F2023 */ subu $a0, $t8, $t7 -/* 0FB3C4 7F0C6854 24840036 */ addiu $a0, $a0, 0x36 -/* 0FB3C8 7F0C6858 0C001149 */ jal viGetViewTop -/* 0FB3CC 7F0C685C AFA400CC */ sw $a0, 0xcc($sp) -/* 0FB3D0 7F0C6860 8FAC00BC */ lw $t4, 0xbc($sp) -/* 0FB3D4 7F0C6864 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8008 -/* 0FB3D8 7F0C6868 8DCEA120 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0FB3DC 7F0C686C 000C6843 */ sra $t5, $t4, 1 -/* 0FB3E0 7F0C6870 004DC823 */ subu $t9, $v0, $t5 -/* 0FB3E4 7F0C6874 272B0036 */ addiu $t3, $t9, 0x36 -/* 0FB3E8 7F0C6878 AFAB00C8 */ sw $t3, 0xc8($sp) -/* 0FB3EC 7F0C687C 8DD829CC */ lw $t8, 0x29cc($t6) -/* 0FB3F0 7F0C6880 1700001E */ bnez $t8, .Ljp7F0C68FC -/* 0FB3F4 7F0C6884 00000000 */ nop -/* 0FB3F8 7F0C6888 0C001107 */ jal viGetX -/* 0FB3FC 7F0C688C 00000000 */ nop -/* 0FB400 7F0C6890 00028400 */ sll $s0, $v0, 0x10 -/* 0FB404 7F0C6894 00107C03 */ sra $t7, $s0, 0x10 -/* 0FB408 7F0C6898 0C00110B */ jal viGetY -/* 0FB40C 7F0C689C 01E08025 */ move $s0, $t7 -/* 0FB410 7F0C68A0 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0FB414 7F0C68A4 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0FB418 7F0C68A8 8DAD0EDC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0FB41C 7F0C68AC 8D8C0EE0 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0FB420 7F0C68B0 3C19A0FF */ lui $t9, (0xA0FFA0F0 >> 16) # lui $t9, 0xa0ff -/* 0FB424 7F0C68B4 3C0B0070 */ lui $t3, (0x007000A0 >> 16) # lui $t3, 0x70 -/* 0FB428 7F0C68B8 356B00A0 */ ori $t3, (0x007000A0 & 0xFFFF) # ori $t3, $t3, 0xa0 -/* 0FB42C 7F0C68BC 3739A0F0 */ ori $t9, (0xA0FFA0F0 & 0xFFFF) # ori $t9, $t9, 0xa0f0 -/* 0FB430 7F0C68C0 AFB90018 */ sw $t9, 0x18($sp) -/* 0FB434 7F0C68C4 AFAB001C */ sw $t3, 0x1c($sp) -/* 0FB438 7F0C68C8 02202025 */ move $a0, $s1 -/* 0FB43C 7F0C68CC 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FB440 7F0C68D0 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FB444 7F0C68D4 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FB448 7F0C68D8 AFB00020 */ sw $s0, 0x20($sp) -/* 0FB44C 7F0C68DC AFA20024 */ sw $v0, 0x24($sp) -/* 0FB450 7F0C68E0 AFA00028 */ sw $zero, 0x28($sp) -/* 0FB454 7F0C68E4 AFA0002C */ sw $zero, 0x2c($sp) -/* 0FB458 7F0C68E8 AFAD0014 */ sw $t5, 0x14($sp) -/* 0FB45C 7F0C68EC 0FC2BCA7 */ jal textRenderOutlined -/* 0FB460 7F0C68F0 AFAC0010 */ sw $t4, 0x10($sp) -/* 0FB464 7F0C68F4 1000001A */ b .Ljp7F0C6960 -/* 0FB468 7F0C68F8 00408825 */ move $s1, $v0 -.Ljp7F0C68FC: -/* 0FB46C 7F0C68FC 0C001107 */ jal viGetX -/* 0FB470 7F0C6900 00000000 */ nop -/* 0FB474 7F0C6904 00028400 */ sll $s0, $v0, 0x10 -/* 0FB478 7F0C6908 00107403 */ sra $t6, $s0, 0x10 -/* 0FB47C 7F0C690C 0C00110B */ jal viGetY -/* 0FB480 7F0C6910 01C08025 */ move $s0, $t6 -/* 0FB484 7F0C6914 3C188004 */ lui $t8, %hi(ptrFontBankGothicChars) # $t8, 0x8004 -/* 0FB488 7F0C6918 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0FB48C 7F0C691C 8DEF0EDC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0FB490 7F0C6920 8F180EE0 */ lw $t8, %lo(ptrFontBankGothicChars)($t8) -/* 0FB494 7F0C6924 3C0C00FF */ lui $t4, (0x00FF00B0 >> 16) # lui $t4, 0xff -/* 0FB498 7F0C6928 358C00B0 */ ori $t4, (0x00FF00B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0FB49C 7F0C692C AFAC0018 */ sw $t4, 0x18($sp) -/* 0FB4A0 7F0C6930 02202025 */ move $a0, $s1 -/* 0FB4A4 7F0C6934 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FB4A8 7F0C6938 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FB4AC 7F0C693C 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FB4B0 7F0C6940 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FB4B4 7F0C6944 AFA20020 */ sw $v0, 0x20($sp) -/* 0FB4B8 7F0C6948 AFA00024 */ sw $zero, 0x24($sp) -/* 0FB4BC 7F0C694C AFA00028 */ sw $zero, 0x28($sp) -/* 0FB4C0 7F0C6950 AFAF0014 */ sw $t7, 0x14($sp) -/* 0FB4C4 7F0C6954 0FC2B99B */ jal textRender -/* 0FB4C8 7F0C6958 AFB80010 */ sw $t8, 0x10($sp) -/* 0FB4CC 7F0C695C 00408825 */ move $s1, $v0 -.Ljp7F0C6960: -/* 0FB4D0 7F0C6960 0FC30AA2 */ jal langGet -/* 0FB4D4 7F0C6964 3404A021 */ li $a0, 40993 -/* 0FB4D8 7F0C6968 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0FB4DC 7F0C696C 8DAD0EDC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0FB4E0 7F0C6970 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0FB4E4 7F0C6974 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0FB4E8 7F0C6978 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FB4EC 7F0C697C 27A400BC */ addiu $a0, $sp, 0xbc -/* 0FB4F0 7F0C6980 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0FB4F4 7F0C6984 00403025 */ move $a2, $v0 -/* 0FB4F8 7F0C6988 AFA00014 */ sw $zero, 0x14($sp) -/* 0FB4FC 7F0C698C 0FC2BD4F */ jal textMeasure -/* 0FB500 7F0C6990 AFAD0010 */ sw $t5, 0x10($sp) -/* 0FB504 7F0C6994 0C001145 */ jal viGetViewLeft -/* 0FB508 7F0C6998 00000000 */ nop -/* 0FB50C 7F0C699C 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0FB510 7F0C69A0 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0FB514 7F0C69A4 00595821 */ addu $t3, $v0, $t9 -/* 0FB518 7F0C69A8 000EC043 */ sra $t8, $t6, 1 -/* 0FB51C 7F0C69AC 01782023 */ subu $a0, $t3, $t8 -/* 0FB520 7F0C69B0 24840068 */ addiu $a0, $a0, 0x68 -/* 0FB524 7F0C69B4 0C001149 */ jal viGetViewTop -/* 0FB528 7F0C69B8 AFA400CC */ sw $a0, 0xcc($sp) -/* 0FB52C 7F0C69BC 8FAF00BC */ lw $t7, 0xbc($sp) -/* 0FB530 7F0C69C0 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8008 -/* 0FB534 7F0C69C4 8DCEA120 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0FB538 7F0C69C8 000F6043 */ sra $t4, $t7, 1 -/* 0FB53C 7F0C69CC 004C6823 */ subu $t5, $v0, $t4 -/* 0FB540 7F0C69D0 25B90036 */ addiu $t9, $t5, 0x36 -/* 0FB544 7F0C69D4 AFB900C8 */ sw $t9, 0xc8($sp) -/* 0FB548 7F0C69D8 8DCB29CC */ lw $t3, 0x29cc($t6) -/* 0FB54C 7F0C69DC 24010001 */ li $at, 1 -/* 0FB550 7F0C69E0 1561001E */ bne $t3, $at, .Ljp7F0C6A5C -/* 0FB554 7F0C69E4 00000000 */ nop -/* 0FB558 7F0C69E8 0C001107 */ jal viGetX -/* 0FB55C 7F0C69EC 00000000 */ nop -/* 0FB560 7F0C69F0 00028400 */ sll $s0, $v0, 0x10 -/* 0FB564 7F0C69F4 0010C403 */ sra $t8, $s0, 0x10 -/* 0FB568 7F0C69F8 0C00110B */ jal viGetY -/* 0FB56C 7F0C69FC 03008025 */ move $s0, $t8 -/* 0FB570 7F0C6A00 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) # $t7, 0x8004 -/* 0FB574 7F0C6A04 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) # $t4, 0x8004 -/* 0FB578 7F0C6A08 8D8C0EDC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0FB57C 7F0C6A0C 8DEF0EE0 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0FB580 7F0C6A10 3C0DA0FF */ lui $t5, (0xA0FFA0F0 >> 16) # lui $t5, 0xa0ff -/* 0FB584 7F0C6A14 3C190070 */ lui $t9, (0x007000A0 >> 16) # lui $t9, 0x70 -/* 0FB588 7F0C6A18 373900A0 */ ori $t9, (0x007000A0 & 0xFFFF) # ori $t9, $t9, 0xa0 -/* 0FB58C 7F0C6A1C 35ADA0F0 */ ori $t5, (0xA0FFA0F0 & 0xFFFF) # ori $t5, $t5, 0xa0f0 -/* 0FB590 7F0C6A20 AFAD0018 */ sw $t5, 0x18($sp) -/* 0FB594 7F0C6A24 AFB9001C */ sw $t9, 0x1c($sp) -/* 0FB598 7F0C6A28 02202025 */ move $a0, $s1 -/* 0FB59C 7F0C6A2C 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FB5A0 7F0C6A30 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FB5A4 7F0C6A34 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FB5A8 7F0C6A38 AFB00020 */ sw $s0, 0x20($sp) -/* 0FB5AC 7F0C6A3C AFA20024 */ sw $v0, 0x24($sp) -/* 0FB5B0 7F0C6A40 AFA00028 */ sw $zero, 0x28($sp) -/* 0FB5B4 7F0C6A44 AFA0002C */ sw $zero, 0x2c($sp) -/* 0FB5B8 7F0C6A48 AFAC0014 */ sw $t4, 0x14($sp) -/* 0FB5BC 7F0C6A4C 0FC2BCA7 */ jal textRenderOutlined -/* 0FB5C0 7F0C6A50 AFAF0010 */ sw $t7, 0x10($sp) -/* 0FB5C4 7F0C6A54 1000001A */ b .Ljp7F0C6AC0 -/* 0FB5C8 7F0C6A58 00408825 */ move $s1, $v0 -.Ljp7F0C6A5C: -/* 0FB5CC 7F0C6A5C 0C001107 */ jal viGetX -/* 0FB5D0 7F0C6A60 00000000 */ nop -/* 0FB5D4 7F0C6A64 00028400 */ sll $s0, $v0, 0x10 -/* 0FB5D8 7F0C6A68 00107403 */ sra $t6, $s0, 0x10 -/* 0FB5DC 7F0C6A6C 0C00110B */ jal viGetY -/* 0FB5E0 7F0C6A70 01C08025 */ move $s0, $t6 -/* 0FB5E4 7F0C6A74 3C0B8004 */ lui $t3, %hi(ptrFontBankGothicChars) # $t3, 0x8004 -/* 0FB5E8 7F0C6A78 3C188004 */ lui $t8, %hi(ptrFontBankGothic) # $t8, 0x8004 -/* 0FB5EC 7F0C6A7C 8F180EDC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0FB5F0 7F0C6A80 8D6B0EE0 */ lw $t3, %lo(ptrFontBankGothicChars)($t3) -/* 0FB5F4 7F0C6A84 3C0F00FF */ lui $t7, (0x00FF00B0 >> 16) # lui $t7, 0xff -/* 0FB5F8 7F0C6A88 35EF00B0 */ ori $t7, (0x00FF00B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0FB5FC 7F0C6A8C AFAF0018 */ sw $t7, 0x18($sp) -/* 0FB600 7F0C6A90 02202025 */ move $a0, $s1 -/* 0FB604 7F0C6A94 27A500CC */ addiu $a1, $sp, 0xcc -/* 0FB608 7F0C6A98 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0FB60C 7F0C6A9C 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0FB610 7F0C6AA0 AFB0001C */ sw $s0, 0x1c($sp) -/* 0FB614 7F0C6AA4 AFA20020 */ sw $v0, 0x20($sp) -/* 0FB618 7F0C6AA8 AFA00024 */ sw $zero, 0x24($sp) -/* 0FB61C 7F0C6AAC AFA00028 */ sw $zero, 0x28($sp) -/* 0FB620 7F0C6AB0 AFB80014 */ sw $t8, 0x14($sp) -/* 0FB624 7F0C6AB4 0FC2B99B */ jal textRender -/* 0FB628 7F0C6AB8 AFAB0010 */ sw $t3, 0x10($sp) -/* 0FB62C 7F0C6ABC 00408825 */ move $s1, $v0 -.Ljp7F0C6AC0: -/* 0FB630 7F0C6AC0 0FC2B6A8 */ jal combiner_bayer_lod_perspective -/* 0FB634 7F0C6AC4 02202025 */ move $a0, $s1 -/* 0FB638 7F0C6AC8 10000092 */ b .Ljp7F0C6D14 -/* 0FB63C 7F0C6ACC 00408825 */ move $s1, $v0 -/* 0FB640 7F0C6AD0 8C6C00D8 */ lw $t4, 0xd8($v1) -.Ljp7F0C6AD4: -/* 0FB644 7F0C6AD4 51800090 */ beql $t4, $zero, .Ljp7F0C6D18 -/* 0FB648 7F0C6AD8 02201025 */ move $v0, $s1 -/* 0FB64C 7F0C6ADC 8C6D0428 */ lw $t5, 0x428($v1) -/* 0FB650 7F0C6AE0 51A0008D */ beql $t5, $zero, .Ljp7F0C6D18 -/* 0FB654 7F0C6AE4 02201025 */ move $v0, $s1 -/* 0FB658 7F0C6AE8 8C790424 */ lw $t9, 0x424($v1) -/* 0FB65C 7F0C6AEC 3C0E8009 */ lui $t6, %hi(g_stopPlayFlag) # $t6, 0x8009 -/* 0FB660 7F0C6AF0 53200089 */ beql $t9, $zero, .Ljp7F0C6D18 -/* 0FB664 7F0C6AF4 02201025 */ move $v0, $s1 -/* 0FB668 7F0C6AF8 8DCEC770 */ lw $t6, %lo(g_stopPlayFlag)($t6) -/* 0FB66C 7F0C6AFC 3C0B8009 */ lui $t3, %hi(g_gameOverFlag) # $t3, 0x8009 -/* 0FB670 7F0C6B00 55C00085 */ bnezl $t6, .Ljp7F0C6D18 -/* 0FB674 7F0C6B04 02201025 */ move $v0, $s1 -/* 0FB678 7F0C6B08 8D6BC774 */ lw $t3, %lo(g_gameOverFlag)($t3) -/* 0FB67C 7F0C6B0C 00002025 */ move $a0, $zero -/* 0FB680 7F0C6B10 55600081 */ bnezl $t3, .Ljp7F0C6D18 -/* 0FB684 7F0C6B14 02201025 */ move $v0, $s1 -/* 0FB688 7F0C6B18 18400028 */ blez $v0, .Ljp7F0C6BBC -/* 0FB68C 7F0C6B1C 00002825 */ move $a1, $zero -/* 0FB690 7F0C6B20 30470003 */ andi $a3, $v0, 3 -/* 0FB694 7F0C6B24 10E00011 */ beqz $a3, .Ljp7F0C6B6C -/* 0FB698 7F0C6B28 00E03025 */ move $a2, $a3 -/* 0FB69C 7F0C6B2C 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0FB6A0 7F0C6B30 0000C0C0 */ sll $t8, $zero, 3 -/* 0FB6A4 7F0C6B34 0300C023 */ subu $t8, $t8, $zero -/* 0FB6A8 7F0C6B38 0018C100 */ sll $t8, $t8, 4 -/* 0FB6AC 7F0C6B3C 3C198008 */ lui $t9, %hi(g_playerPlayerData) # $t9, 0x8008 -/* 0FB6B0 7F0C6B40 000F6080 */ sll $t4, $t7, 2 -/* 0FB6B4 7F0C6B44 030C6821 */ addu $t5, $t8, $t4 -/* 0FB6B8 7F0C6B48 27399F60 */ addiu $t9, %lo(g_playerPlayerData) # addiu $t9, $t9, -0x60a0 -/* 0FB6BC 7F0C6B4C 01B91821 */ addu $v1, $t5, $t9 -.Ljp7F0C6B50: -/* 0FB6C0 7F0C6B50 8C6E0024 */ lw $t6, 0x24($v1) -/* 0FB6C4 7F0C6B54 24A50001 */ addiu $a1, $a1, 1 -/* 0FB6C8 7F0C6B58 24630070 */ addiu $v1, $v1, 0x70 -/* 0FB6CC 7F0C6B5C 14C5FFFC */ bne $a2, $a1, .Ljp7F0C6B50 -/* 0FB6D0 7F0C6B60 008E2021 */ addu $a0, $a0, $t6 -/* 0FB6D4 7F0C6B64 10A20015 */ beq $a1, $v0, .Ljp7F0C6BBC -/* 0FB6D8 7F0C6B68 00000000 */ nop -.Ljp7F0C6B6C: -/* 0FB6DC 7F0C6B6C 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0FB6E0 7F0C6B70 000558C0 */ sll $t3, $a1, 3 -/* 0FB6E4 7F0C6B74 01655823 */ subu $t3, $t3, $a1 -/* 0FB6E8 7F0C6B78 000B5900 */ sll $t3, $t3, 4 -/* 0FB6EC 7F0C6B7C 3C0D8008 */ lui $t5, %hi(g_playerPlayerData) # $t5, 0x8008 -/* 0FB6F0 7F0C6B80 000FC080 */ sll $t8, $t7, 2 -/* 0FB6F4 7F0C6B84 01786021 */ addu $t4, $t3, $t8 -/* 0FB6F8 7F0C6B88 25AD9F60 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x60a0 -/* 0FB6FC 7F0C6B8C 018D1821 */ addu $v1, $t4, $t5 -.Ljp7F0C6B90: -/* 0FB700 7F0C6B90 8C790024 */ lw $t9, 0x24($v1) -/* 0FB704 7F0C6B94 8C6E0094 */ lw $t6, 0x94($v1) -/* 0FB708 7F0C6B98 8C6F0104 */ lw $t7, 0x104($v1) -/* 0FB70C 7F0C6B9C 00992021 */ addu $a0, $a0, $t9 -/* 0FB710 7F0C6BA0 8C6B0174 */ lw $t3, 0x174($v1) -/* 0FB714 7F0C6BA4 008E2021 */ addu $a0, $a0, $t6 -/* 0FB718 7F0C6BA8 24A50004 */ addiu $a1, $a1, 4 -/* 0FB71C 7F0C6BAC 008F2021 */ addu $a0, $a0, $t7 -/* 0FB720 7F0C6BB0 246301C0 */ addiu $v1, $v1, 0x1c0 -/* 0FB724 7F0C6BB4 14A8FFF6 */ bne $a1, $t0, .Ljp7F0C6B90 -/* 0FB728 7F0C6BB8 008B2021 */ addu $a0, $a0, $t3 -.Ljp7F0C6BBC: -/* 0FB72C 7F0C6BBC 0FC05202 */ jal get_scenario -/* 0FB730 7F0C6BC0 AFA40058 */ sw $a0, 0x58($sp) -/* 0FB734 7F0C6BC4 24010001 */ li $at, 1 -/* 0FB738 7F0C6BC8 14410004 */ bne $v0, $at, .Ljp7F0C6BDC -/* 0FB73C 7F0C6BCC 8FA40058 */ lw $a0, 0x58($sp) -/* 0FB740 7F0C6BD0 28810002 */ slti $at, $a0, 2 -/* 0FB744 7F0C6BD4 50200050 */ beql $at, $zero, .Ljp7F0C6D18 -/* 0FB748 7F0C6BD8 02201025 */ move $v0, $s1 -.Ljp7F0C6BDC: -/* 0FB74C 7F0C6BDC 0FC2D6D9 */ jal bgScissorCurrentPlayerViewDefault -/* 0FB750 7F0C6BE0 02202025 */ move $a0, $s1 -/* 0FB754 7F0C6BE4 0FC2B652 */ jal microcode_constructor -/* 0FB758 7F0C6BE8 00402025 */ move $a0, $v0 -/* 0FB75C 7F0C6BEC 00408825 */ move $s1, $v0 -/* 0FB760 7F0C6BF0 0FC30AA2 */ jal langGet -/* 0FB764 7F0C6BF4 3404A022 */ li $a0, 40994 -/* 0FB768 7F0C6BF8 3C188004 */ lui $t8, %hi(ptrFontBankGothic) # $t8, 0x8004 -/* 0FB76C 7F0C6BFC 8F180EDC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0FB770 7F0C6C00 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0FB774 7F0C6C04 AFA20060 */ sw $v0, 0x60($sp) -/* 0FB778 7F0C6C08 8CE70EE0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0FB77C 7F0C6C0C 27A40064 */ addiu $a0, $sp, 0x64 -/* 0FB780 7F0C6C10 27A50068 */ addiu $a1, $sp, 0x68 -/* 0FB784 7F0C6C14 00403025 */ move $a2, $v0 -/* 0FB788 7F0C6C18 AFA00014 */ sw $zero, 0x14($sp) -/* 0FB78C 7F0C6C1C 0FC2BD4F */ jal textMeasure -/* 0FB790 7F0C6C20 AFB80010 */ sw $t8, 0x10($sp) -/* 0FB794 7F0C6C24 0C001145 */ jal viGetViewLeft -/* 0FB798 7F0C6C28 00000000 */ nop -/* 0FB79C 7F0C6C2C 0C001127 */ jal viGetViewWidth -/* 0FB7A0 7F0C6C30 A7A20056 */ sh $v0, 0x56($sp) -/* 0FB7A4 7F0C6C34 87A80056 */ lh $t0, 0x56($sp) -/* 0FB7A8 7F0C6C38 8FAE0068 */ lw $t6, 0x68($sp) -/* 0FB7AC 7F0C6C3C 00026843 */ sra $t5, $v0, 1 -/* 0FB7B0 7F0C6C40 01A8C821 */ addu $t9, $t5, $t0 -/* 0FB7B4 7F0C6C44 000E7843 */ sra $t7, $t6, 1 -/* 0FB7B8 7F0C6C48 032F5023 */ subu $t2, $t9, $t7 -/* 0FB7BC 7F0C6C4C 0C001149 */ jal viGetViewTop -/* 0FB7C0 7F0C6C50 AFAA0070 */ sw $t2, 0x70($sp) -/* 0FB7C4 7F0C6C54 0C00112B */ jal viGetViewHeight -/* 0FB7C8 7F0C6C58 A7A20056 */ sh $v0, 0x56($sp) -/* 0FB7CC 7F0C6C5C 87A80056 */ lh $t0, 0x56($sp) -/* 0FB7D0 7F0C6C60 8FA90064 */ lw $t1, 0x64($sp) -/* 0FB7D4 7F0C6C64 0002C043 */ sra $t8, $v0, 1 -/* 0FB7D8 7F0C6C68 8FAA0070 */ lw $t2, 0x70($sp) -/* 0FB7DC 7F0C6C6C 8FAE0068 */ lw $t6, 0x68($sp) -/* 0FB7E0 7F0C6C70 03086021 */ addu $t4, $t8, $t0 -/* 0FB7E4 7F0C6C74 00096843 */ sra $t5, $t1, 1 -/* 0FB7E8 7F0C6C78 018D1823 */ subu $v1, $t4, $t5 -/* 0FB7EC 7F0C6C7C 0069C821 */ addu $t9, $v1, $t1 -/* 0FB7F0 7F0C6C80 272F0001 */ addiu $t7, $t9, 1 -/* 0FB7F4 7F0C6C84 014E3821 */ addu $a3, $t2, $t6 -/* 0FB7F8 7F0C6C88 24E70001 */ addiu $a3, $a3, 1 -/* 0FB7FC 7F0C6C8C AFAF0010 */ sw $t7, 0x10($sp) -/* 0FB800 7F0C6C90 2466FFFF */ addiu $a2, $v1, -1 -/* 0FB804 7F0C6C94 AFA3006C */ sw $v1, 0x6c($sp) -/* 0FB808 7F0C6C98 02202025 */ move $a0, $s1 -/* 0FB80C 7F0C6C9C AFA00014 */ sw $zero, 0x14($sp) -/* 0FB810 7F0C6CA0 0FC2B6F1 */ jal microcode_constructor_related_to_menus -/* 0FB814 7F0C6CA4 2545FFFF */ addiu $a1, $t2, -1 -/* 0FB818 7F0C6CA8 0C001107 */ jal viGetX -/* 0FB81C 7F0C6CAC 00408825 */ move $s1, $v0 -/* 0FB820 7F0C6CB0 00028400 */ sll $s0, $v0, 0x10 -/* 0FB824 7F0C6CB4 00105C03 */ sra $t3, $s0, 0x10 -/* 0FB828 7F0C6CB8 0C00110B */ jal viGetY -/* 0FB82C 7F0C6CBC 01608025 */ move $s0, $t3 -/* 0FB830 7F0C6CC0 3C188004 */ lui $t8, %hi(ptrFontBankGothicChars) # $t8, 0x8004 -/* 0FB834 7F0C6CC4 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) # $t4, 0x8004 -/* 0FB838 7F0C6CC8 8D8C0EDC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0FB83C 7F0C6CCC 8F180EE0 */ lw $t8, %lo(ptrFontBankGothicChars)($t8) -/* 0FB840 7F0C6CD0 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0FB844 7F0C6CD4 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0FB848 7F0C6CD8 AFAD0018 */ sw $t5, 0x18($sp) -/* 0FB84C 7F0C6CDC 02202025 */ move $a0, $s1 -/* 0FB850 7F0C6CE0 27A50070 */ addiu $a1, $sp, 0x70 -/* 0FB854 7F0C6CE4 27A6006C */ addiu $a2, $sp, 0x6c -/* 0FB858 7F0C6CE8 8FA70060 */ lw $a3, 0x60($sp) -/* 0FB85C 7F0C6CEC AFB0001C */ sw $s0, 0x1c($sp) -/* 0FB860 7F0C6CF0 AFA20020 */ sw $v0, 0x20($sp) -/* 0FB864 7F0C6CF4 AFA00024 */ sw $zero, 0x24($sp) -/* 0FB868 7F0C6CF8 AFA00028 */ sw $zero, 0x28($sp) -/* 0FB86C 7F0C6CFC AFAC0014 */ sw $t4, 0x14($sp) -/* 0FB870 7F0C6D00 0FC2B99B */ jal textRender -/* 0FB874 7F0C6D04 AFB80010 */ sw $t8, 0x10($sp) -/* 0FB878 7F0C6D08 0FC2B6A8 */ jal combiner_bayer_lod_perspective -/* 0FB87C 7F0C6D0C 00402025 */ move $a0, $v0 -/* 0FB880 7F0C6D10 00408825 */ move $s1, $v0 -.Ljp7F0C6D14: -/* 0FB884 7F0C6D14 02201025 */ move $v0, $s1 -.Ljp7F0C6D18: -/* 0FB888 7F0C6D18 8FBF003C */ lw $ra, 0x3c($sp) -/* 0FB88C 7F0C6D1C 8FB00034 */ lw $s0, 0x34($sp) -/* 0FB890 7F0C6D20 8FB10038 */ lw $s1, 0x38($sp) -/* 0FB894 7F0C6D24 03E00008 */ jr $ra -/* 0FB898 7F0C6D28 27BD00D8 */ addiu $sp, $sp, 0xd8 -) -#endif - -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata - -/*D:8005BD00*/ -glabel jpt_MP_menu_window_text -.word text_play -.word text_play -.word text_play -.word text_play -.word text_pause_unpause -.word text_exit -.word text_exit -.word text_blank - -.text -glabel mp_watch_menu_display -/* 0F5EF4 7F0C3504 27BDFF28 */ addiu $sp, $sp, -0xd8 -/* 0F5EF8 7F0C3508 AFBF003C */ sw $ra, 0x3c($sp) -/* 0F5EFC 7F0C350C AFB10038 */ sw $s1, 0x38($sp) -/* 0F5F00 7F0C3510 00808825 */ move $s1, $a0 -/* 0F5F04 7F0C3514 0FC269A4 */ jal get_cur_playernum -/* 0F5F08 7F0C3518 AFB00034 */ sw $s0, 0x34($sp) -/* 0F5F0C 7F0C351C 0FC26669 */ jal getPlayerCount -/* 0F5F10 7F0C3520 AFA200D4 */ sw $v0, 0xd4($sp) -/* 0F5F14 7F0C3524 24010001 */ li $at, 1 -/* 0F5F18 7F0C3528 00404025 */ move $t0, $v0 -/* 0F5F1C 7F0C352C 14410003 */ bne $v0, $at, .L7F0C353C -/* 0F5F20 7F0C3530 00008025 */ move $s0, $zero -/* 0F5F24 7F0C3534 10000804 */ b .L7F0C5548 -/* 0F5F28 7F0C3538 02201025 */ move $v0, $s1 -.L7F0C353C: -/* 0F5F2C 7F0C353C 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0F5F30 7F0C3540 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0F5F34 7F0C3544 02202025 */ move $a0, $s1 -/* 0F5F38 7F0C3548 8C6E29BC */ lw $t6, 0x29bc($v1) -/* 0F5F3C 7F0C354C 51C0076D */ beql $t6, $zero, .L7F0C5304 -/* 0F5F40 7F0C3550 8C6C00D8 */ lw $t4, 0xd8($v1) -/* 0F5F44 7F0C3554 0FC2B016 */ jal microcode_constructor -/* 0F5F48 7F0C3558 AFA800D0 */ sw $t0, 0xd0($sp) -/* 0F5F4C 7F0C355C 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0F5F50 7F0C3560 24010002 */ li $at, 2 -/* 0F5F54 7F0C3564 00408825 */ move $s1, $v0 -/* 0F5F58 7F0C3568 15E10004 */ bne $t7, $at, .L7F0C357C -/* 0F5F5C 7F0C356C 3C198007 */ lui $t9, %hi(g_CurrentPlayer) # $t9, 0x8007 -/* 0F5F60 7F0C3570 24180050 */ li $t8, 80 -/* 0F5F64 7F0C3574 10000002 */ b .L7F0C3580 -/* 0F5F68 7F0C3578 AFB800A8 */ sw $t8, 0xa8($sp) -.L7F0C357C: -/* 0F5F6C 7F0C357C AFA000A8 */ sw $zero, 0xa8($sp) -.L7F0C3580: -/* 0F5F70 7F0C3580 8F398BC0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0F5F74 7F0C3584 8F2B29C0 */ lw $t3, 0x29c0($t9) -/* 0F5F78 7F0C3588 2D610008 */ sltiu $at, $t3, 8 -/* 0F5F7C 7F0C358C 10200038 */ beqz $at, .L7F0C3670 -/* 0F5F80 7F0C3590 000B5880 */ sll $t3, $t3, 2 -/* 0F5F84 7F0C3594 3C018005 */ lui $at, %hi(jpt_MP_menu_window_text) -/* 0F5F88 7F0C3598 002B0821 */ addu $at, $at, $t3 -/* 0F5F8C 7F0C359C 8C2B08C0 */ lw $t3, %lo(jpt_MP_menu_window_text)($at) -/* 0F5F90 7F0C35A0 01600008 */ jr $t3 -/* 0F5F94 7F0C35A4 00000000 */ nop -text_play: -/* 0F5F98 7F0C35A8 3C0C8007 */ lui $t4, %hi(g_gameOverFlag) # $t4, 0x8007 -/* 0F5F9C 7F0C35AC 8D8C3AE4 */ lw $t4, %lo(g_gameOverFlag)($t4) -/* 0F5FA0 7F0C35B0 3C0D8007 */ lui $t5, %hi(time_trigger_alt_gameover_msg) # $t5, 0x8007 -/* 0F5FA4 7F0C35B4 15800005 */ bnez $t4, .L7F0C35CC -/* 0F5FA8 7F0C35B8 00000000 */ nop -/* 0F5FAC 7F0C35BC 0FC304AE */ jal langGet -/* 0F5FB0 7F0C35C0 3404A015 */ li $a0, 40981 -/* 0F5FB4 7F0C35C4 1000002A */ b .L7F0C3670 -/* 0F5FB8 7F0C35C8 AFA200A4 */ sw $v0, 0xa4($sp) -.L7F0C35CC: -/* 0F5FBC 7F0C35CC 8DAD3AF0 */ lw $t5, %lo(time_trigger_alt_gameover_msg)($t5) -/* 0F5FC0 7F0C35D0 11A00005 */ beqz $t5, .L7F0C35E8 -/* 0F5FC4 7F0C35D4 00000000 */ nop -/* 0F5FC8 7F0C35D8 0FC304AE */ jal langGet -/* 0F5FCC 7F0C35DC 3404A016 */ li $a0, 40982 -/* 0F5FD0 7F0C35E0 10000023 */ b .L7F0C3670 -/* 0F5FD4 7F0C35E4 AFA200A4 */ sw $v0, 0xa4($sp) -.L7F0C35E8: -/* 0F5FD8 7F0C35E8 0FC304AE */ jal langGet -/* 0F5FDC 7F0C35EC 3404A017 */ li $a0, 40983 -/* 0F5FE0 7F0C35F0 1000001F */ b .L7F0C3670 -/* 0F5FE4 7F0C35F4 AFA200A4 */ sw $v0, 0xa4($sp) -text_blank: -/* 0F5FE8 7F0C35F8 3C0E8005 */ lui $t6, %hi(ascii_MP_watch_menu_BLANK) # $t6, 0x8005 -/* 0F5FEC 7F0C35FC 25CE07E4 */ addiu $t6, %lo(ascii_MP_watch_menu_BLANK) # addiu $t6, $t6, 0x7e4 -/* 0F5FF0 7F0C3600 1000001B */ b .L7F0C3670 -/* 0F5FF4 7F0C3604 AFAE00A4 */ sw $t6, 0xa4($sp) -text_pause_unpause: -/* 0F5FF8 7F0C3608 3C0F8007 */ lui $t7, %hi(g_pausedFlag) # $t7, 0x8007 -/* 0F5FFC 7F0C360C 8DEF3AF8 */ lw $t7, %lo(g_pausedFlag)($t7) -/* 0F6000 7F0C3610 11E0000B */ beqz $t7, .L7F0C3640 -/* 0F6004 7F0C3614 00000000 */ nop -/* 0F6008 7F0C3618 0FC304AE */ jal langGet -/* 0F600C 7F0C361C 3404A018 */ li $a0, 40984 -/* 0F6010 7F0C3620 0FC269A4 */ jal get_cur_playernum -/* 0F6014 7F0C3624 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F6018 7F0C3628 3C188007 */ lui $t8, %hi(who_paused) # $t8, 0x8007 -/* 0F601C 7F0C362C 8F183AFC */ lw $t8, %lo(who_paused)($t8) -/* 0F6020 7F0C3630 1458000F */ bne $v0, $t8, .L7F0C3670 -/* 0F6024 7F0C3634 00000000 */ nop -/* 0F6028 7F0C3638 1000000D */ b .L7F0C3670 -/* 0F602C 7F0C363C 24100001 */ li $s0, 1 -.L7F0C3640: -/* 0F6030 7F0C3640 0FC304AE */ jal langGet -/* 0F6034 7F0C3644 3404A019 */ li $a0, 40985 -/* 0F6038 7F0C3648 10000009 */ b .L7F0C3670 -/* 0F603C 7F0C364C AFA200A4 */ sw $v0, 0xa4($sp) -text_exit: -/* 0F6040 7F0C3650 0FC304AE */ jal langGet -/* 0F6044 7F0C3654 3404A01A */ li $a0, 40986 -/* 0F6048 7F0C3658 0C000FD9 */ jal viGetViewLeft -/* 0F604C 7F0C365C AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F6050 7F0C3660 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F6054 7F0C3664 00592021 */ addu $a0, $v0, $t9 -/* 0F6058 7F0C3668 24840041 */ addiu $a0, $a0, 0x41 -/* 0F605C 7F0C366C AFA400CC */ sw $a0, 0xcc($sp) -.L7F0C3670: -/* 0F6060 7F0C3670 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0F6064 7F0C3674 8D6BAAFC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0F6068 7F0C3678 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F606C 7F0C367C 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F6070 7F0C3680 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F6074 7F0C3684 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F6078 7F0C3688 8FA600A4 */ lw $a2, 0xa4($sp) -/* 0F607C 7F0C368C AFA00014 */ sw $zero, 0x14($sp) -/* 0F6080 7F0C3690 0FC2B713 */ jal textMeasure -/* 0F6084 7F0C3694 AFAB0010 */ sw $t3, 0x10($sp) -/* 0F6088 7F0C3698 0C000FD9 */ jal viGetViewLeft -/* 0F608C 7F0C369C 00000000 */ nop -/* 0F6090 7F0C36A0 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0F6094 7F0C36A4 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0F6098 7F0C36A8 004C6821 */ addu $t5, $v0, $t4 -/* 0F609C 7F0C36AC 000E7843 */ sra $t7, $t6, 1 -/* 0F60A0 7F0C36B0 01AF2023 */ subu $a0, $t5, $t7 -/* 0F60A4 7F0C36B4 24840050 */ addiu $a0, $a0, 0x50 -/* 0F60A8 7F0C36B8 0C000FDD */ jal viGetViewTop -/* 0F60AC 7F0C36BC AFA400CC */ sw $a0, 0xcc($sp) -/* 0F60B0 7F0C36C0 8FB800BC */ lw $t8, 0xbc($sp) -/* 0F60B4 7F0C36C4 0018C843 */ sra $t9, $t8, 1 -/* 0F60B8 7F0C36C8 00595823 */ subu $t3, $v0, $t9 -/* 0F60BC 7F0C36CC 256C001E */ addiu $t4, $t3, 0x1e -/* 0F60C0 7F0C36D0 1200001E */ beqz $s0, .L7F0C374C -/* 0F60C4 7F0C36D4 AFAC00C8 */ sw $t4, 0xc8($sp) -/* 0F60C8 7F0C36D8 0C000F9B */ jal viGetX -/* 0F60CC 7F0C36DC 00000000 */ nop -/* 0F60D0 7F0C36E0 00028400 */ sll $s0, $v0, 0x10 -/* 0F60D4 7F0C36E4 00107403 */ sra $t6, $s0, 0x10 -/* 0F60D8 7F0C36E8 0C000F9F */ jal viGetY -/* 0F60DC 7F0C36EC 01C08025 */ move $s0, $t6 -/* 0F60E0 7F0C36F0 3C0D8004 */ lui $t5, %hi(ptrFontBankGothicChars) # $t5, 0x8004 -/* 0F60E4 7F0C36F4 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0F60E8 7F0C36F8 8DEFAAFC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F60EC 7F0C36FC 8DADAB00 */ lw $t5, %lo(ptrFontBankGothicChars)($t5) -/* 0F60F0 7F0C3700 3C18A0FF */ lui $t8, (0xA0FFA0F0 >> 16) # lui $t8, 0xa0ff -/* 0F60F4 7F0C3704 3C190070 */ lui $t9, (0x007000A0 >> 16) # lui $t9, 0x70 -/* 0F60F8 7F0C3708 373900A0 */ ori $t9, (0x007000A0 & 0xFFFF) # ori $t9, $t9, 0xa0 -/* 0F60FC 7F0C370C 3718A0F0 */ ori $t8, (0xA0FFA0F0 & 0xFFFF) # ori $t8, $t8, 0xa0f0 -/* 0F6100 7F0C3710 AFB80018 */ sw $t8, 0x18($sp) -/* 0F6104 7F0C3714 AFB9001C */ sw $t9, 0x1c($sp) -/* 0F6108 7F0C3718 02202025 */ move $a0, $s1 -/* 0F610C 7F0C371C 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F6110 7F0C3720 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F6114 7F0C3724 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F6118 7F0C3728 AFB00020 */ sw $s0, 0x20($sp) -/* 0F611C 7F0C372C AFA20024 */ sw $v0, 0x24($sp) -/* 0F6120 7F0C3730 AFA00028 */ sw $zero, 0x28($sp) -/* 0F6124 7F0C3734 AFA0002C */ sw $zero, 0x2c($sp) -/* 0F6128 7F0C3738 AFAF0014 */ sw $t7, 0x14($sp) -/* 0F612C 7F0C373C 0FC2B66B */ jal textRenderOutlined -/* 0F6130 7F0C3740 AFAD0010 */ sw $t5, 0x10($sp) -/* 0F6134 7F0C3744 1000001A */ b .L7F0C37B0 -/* 0F6138 7F0C3748 00408825 */ move $s1, $v0 -.L7F0C374C: -/* 0F613C 7F0C374C 0C000F9B */ jal viGetX -/* 0F6140 7F0C3750 00000000 */ nop -/* 0F6144 7F0C3754 00028400 */ sll $s0, $v0, 0x10 -/* 0F6148 7F0C3758 00105C03 */ sra $t3, $s0, 0x10 -/* 0F614C 7F0C375C 0C000F9F */ jal viGetY -/* 0F6150 7F0C3760 01608025 */ move $s0, $t3 -/* 0F6154 7F0C3764 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0F6158 7F0C3768 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) # $t6, 0x8004 -/* 0F615C 7F0C376C 8DCEAAFC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0F6160 7F0C3770 8D8CAB00 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F6164 7F0C3774 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0F6168 7F0C3778 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0F616C 7F0C377C AFAD0018 */ sw $t5, 0x18($sp) -/* 0F6170 7F0C3780 02202025 */ move $a0, $s1 -/* 0F6174 7F0C3784 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F6178 7F0C3788 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F617C 7F0C378C 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F6180 7F0C3790 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F6184 7F0C3794 AFA20020 */ sw $v0, 0x20($sp) -/* 0F6188 7F0C3798 AFA00024 */ sw $zero, 0x24($sp) -/* 0F618C 7F0C379C AFA00028 */ sw $zero, 0x28($sp) -/* 0F6190 7F0C37A0 AFAE0014 */ sw $t6, 0x14($sp) -/* 0F6194 7F0C37A4 0FC2B35F */ jal textRender -/* 0F6198 7F0C37A8 AFAC0010 */ sw $t4, 0x10($sp) -/* 0F619C 7F0C37AC 00408825 */ move $s1, $v0 -.L7F0C37B0: -/* 0F61A0 7F0C37B0 0FC304DB */ jal mpwatchMenuCanGoLeft -/* 0F61A4 7F0C37B4 00000000 */ nop -/* 0F61A8 7F0C37B8 10400056 */ beqz $v0, .L7F0C3914 -/* 0F61AC 7F0C37BC 00000000 */ nop -/* 0F61B0 7F0C37C0 0C000FD9 */ jal viGetViewLeft -/* 0F61B4 7F0C37C4 00000000 */ nop -/* 0F61B8 7F0C37C8 3C038007 */ lui $v1, %hi(g_gameOverFlag) # $v1, 0x8007 -/* 0F61BC 7F0C37CC 8C633AE4 */ lw $v1, %lo(g_gameOverFlag)($v1) -/* 0F61C0 7F0C37D0 0002C400 */ sll $t8, $v0, 0x10 -/* 0F61C4 7F0C37D4 240F000A */ li $t7, 10 -/* 0F61C8 7F0C37D8 50600004 */ beql $v1, $zero, .L7F0C37EC -/* 0F61CC 7F0C37DC AFA00050 */ sw $zero, 0x50($sp) -/* 0F61D0 7F0C37E0 10000002 */ b .L7F0C37EC -/* 0F61D4 7F0C37E4 AFAF0050 */ sw $t7, 0x50($sp) -/* 0F61D8 7F0C37E8 AFA00050 */ sw $zero, 0x50($sp) -.L7F0C37EC: -/* 0F61DC 7F0C37EC 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0F61E0 7F0C37F0 8FAE0050 */ lw $t6, 0x50($sp) -/* 0F61E4 7F0C37F4 0018CC03 */ sra $t9, $t8, 0x10 -/* 0F61E8 7F0C37F8 032B6021 */ addu $t4, $t9, $t3 -/* 0F61EC 7F0C37FC 018E2023 */ subu $a0, $t4, $t6 -/* 0F61F0 7F0C3800 24840028 */ addiu $a0, $a0, 0x28 -/* 0F61F4 7F0C3804 10600003 */ beqz $v1, .L7F0C3814 -/* 0F61F8 7F0C3808 AFA400CC */ sw $a0, 0xcc($sp) -/* 0F61FC 7F0C380C 2484FFF8 */ addiu $a0, $a0, -8 -/* 0F6200 7F0C3810 AFA400CC */ sw $a0, 0xcc($sp) -.L7F0C3814: -/* 0F6204 7F0C3814 0C000FDD */ jal viGetViewTop -/* 0F6208 7F0C3818 00000000 */ nop -/* 0F620C 7F0C381C 3C0F8007 */ lui $t7, %hi(dword_CODE_bss_8008C708) # $t7, 0x8007 -/* 0F6210 7F0C3820 8DEF3AE8 */ lw $t7, %lo(dword_CODE_bss_8008C708)($t7) -/* 0F6214 7F0C3824 244D001E */ addiu $t5, $v0, 0x1e -/* 0F6218 7F0C3828 AFAD00C8 */ sw $t5, 0xc8($sp) -/* 0F621C 7F0C382C 15E0001C */ bnez $t7, .L7F0C38A0 -/* 0F6220 7F0C3830 00000000 */ nop -/* 0F6224 7F0C3834 0C000F9B */ jal viGetX -/* 0F6228 7F0C3838 00000000 */ nop -/* 0F622C 7F0C383C 00028400 */ sll $s0, $v0, 0x10 -/* 0F6230 7F0C3840 0010C403 */ sra $t8, $s0, 0x10 -/* 0F6234 7F0C3844 0C000F9F */ jal viGetY -/* 0F6238 7F0C3848 03008025 */ move $s0, $t8 -/* 0F623C 7F0C384C 3C198004 */ lui $t9, %hi(ptrFontBankGothicChars) # $t9, 0x8004 -/* 0F6240 7F0C3850 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0F6244 7F0C3854 8D6BAAFC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0F6248 7F0C3858 8F39AB00 */ lw $t9, %lo(ptrFontBankGothicChars)($t9) -/* 0F624C 7F0C385C 3C0C00FF */ lui $t4, (0x00FF00B0 >> 16) # lui $t4, 0xff -/* 0F6250 7F0C3860 358C00B0 */ ori $t4, (0x00FF00B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0F6254 7F0C3864 3C078005 */ lui $a3, %hi(ascii_MP_watch_menu_left_chevron) # $a3, 0x8005 -/* 0F6258 7F0C3868 24E707E8 */ addiu $a3, %lo(ascii_MP_watch_menu_left_chevron) # addiu $a3, $a3, 0x7e8 -/* 0F625C 7F0C386C AFAC0018 */ sw $t4, 0x18($sp) -/* 0F6260 7F0C3870 02202025 */ move $a0, $s1 -/* 0F6264 7F0C3874 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F6268 7F0C3878 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F626C 7F0C387C AFB0001C */ sw $s0, 0x1c($sp) -/* 0F6270 7F0C3880 AFA20020 */ sw $v0, 0x20($sp) -/* 0F6274 7F0C3884 AFA00024 */ sw $zero, 0x24($sp) -/* 0F6278 7F0C3888 AFA00028 */ sw $zero, 0x28($sp) -/* 0F627C 7F0C388C AFAB0014 */ sw $t3, 0x14($sp) -/* 0F6280 7F0C3890 0FC2B35F */ jal textRender -/* 0F6284 7F0C3894 AFB90010 */ sw $t9, 0x10($sp) -/* 0F6288 7F0C3898 1000001E */ b .L7F0C3914 -/* 0F628C 7F0C389C 00408825 */ move $s1, $v0 -.L7F0C38A0: -/* 0F6290 7F0C38A0 0C000F9B */ jal viGetX -/* 0F6294 7F0C38A4 00000000 */ nop -/* 0F6298 7F0C38A8 00028400 */ sll $s0, $v0, 0x10 -/* 0F629C 7F0C38AC 00107403 */ sra $t6, $s0, 0x10 -/* 0F62A0 7F0C38B0 0C000F9F */ jal viGetY -/* 0F62A4 7F0C38B4 01C08025 */ move $s0, $t6 -/* 0F62A8 7F0C38B8 3C0D8004 */ lui $t5, %hi(ptrFontBankGothicChars) # $t5, 0x8004 -/* 0F62AC 7F0C38BC 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0F62B0 7F0C38C0 8DEFAAFC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F62B4 7F0C38C4 8DADAB00 */ lw $t5, %lo(ptrFontBankGothicChars)($t5) -/* 0F62B8 7F0C38C8 3C18A0FF */ lui $t8, (0xA0FFA0F0 >> 16) # lui $t8, 0xa0ff -/* 0F62BC 7F0C38CC 3C190070 */ lui $t9, (0x007000A0 >> 16) # lui $t9, 0x70 -/* 0F62C0 7F0C38D0 373900A0 */ ori $t9, (0x007000A0 & 0xFFFF) # ori $t9, $t9, 0xa0 -/* 0F62C4 7F0C38D4 3718A0F0 */ ori $t8, (0xA0FFA0F0 & 0xFFFF) # ori $t8, $t8, 0xa0f0 -/* 0F62C8 7F0C38D8 3C078005 */ lui $a3, %hi(ascii_MP_watch_menu_left_chevron) # $a3, 0x8005 -/* 0F62CC 7F0C38DC 24E707E8 */ addiu $a3, %lo(ascii_MP_watch_menu_left_chevron) # addiu $a3, $a3, 0x7e8 -/* 0F62D0 7F0C38E0 AFB80018 */ sw $t8, 0x18($sp) -/* 0F62D4 7F0C38E4 AFB9001C */ sw $t9, 0x1c($sp) -/* 0F62D8 7F0C38E8 02202025 */ move $a0, $s1 -/* 0F62DC 7F0C38EC 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F62E0 7F0C38F0 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F62E4 7F0C38F4 AFB00020 */ sw $s0, 0x20($sp) -/* 0F62E8 7F0C38F8 AFA20024 */ sw $v0, 0x24($sp) -/* 0F62EC 7F0C38FC AFA00028 */ sw $zero, 0x28($sp) -/* 0F62F0 7F0C3900 AFA0002C */ sw $zero, 0x2c($sp) -/* 0F62F4 7F0C3904 AFAF0014 */ sw $t7, 0x14($sp) -/* 0F62F8 7F0C3908 0FC2B66B */ jal textRenderOutlined -/* 0F62FC 7F0C390C AFAD0010 */ sw $t5, 0x10($sp) -/* 0F6300 7F0C3910 00408825 */ move $s1, $v0 -.L7F0C3914: -/* 0F6304 7F0C3914 0FC304C0 */ jal mpwatchMenuCanGoRight -/* 0F6308 7F0C3918 00000000 */ nop -/* 0F630C 7F0C391C 10400056 */ beqz $v0, .L7F0C3A78 -/* 0F6310 7F0C3920 00000000 */ nop -/* 0F6314 7F0C3924 0C000FD9 */ jal viGetViewLeft -/* 0F6318 7F0C3928 00000000 */ nop -/* 0F631C 7F0C392C 3C038007 */ lui $v1, %hi(g_gameOverFlag) # $v1, 0x8007 -/* 0F6320 7F0C3930 8C633AE4 */ lw $v1, %lo(g_gameOverFlag)($v1) -/* 0F6324 7F0C3934 00027400 */ sll $t6, $v0, 0x10 -/* 0F6328 7F0C3938 240B000A */ li $t3, 10 -/* 0F632C 7F0C393C 50600004 */ beql $v1, $zero, .L7F0C3950 -/* 0F6330 7F0C3940 AFA00050 */ sw $zero, 0x50($sp) -/* 0F6334 7F0C3944 10000002 */ b .L7F0C3950 -/* 0F6338 7F0C3948 AFAB0050 */ sw $t3, 0x50($sp) -/* 0F633C 7F0C394C AFA00050 */ sw $zero, 0x50($sp) -.L7F0C3950: -/* 0F6340 7F0C3950 8FAC0050 */ lw $t4, 0x50($sp) -/* 0F6344 7F0C3954 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0F6348 7F0C3958 000E6C03 */ sra $t5, $t6, 0x10 -/* 0F634C 7F0C395C 018D7821 */ addu $t7, $t4, $t5 -/* 0F6350 7F0C3960 01F82021 */ addu $a0, $t7, $t8 -/* 0F6354 7F0C3964 24840070 */ addiu $a0, $a0, 0x70 -/* 0F6358 7F0C3968 10600003 */ beqz $v1, .L7F0C3978 -/* 0F635C 7F0C396C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F6360 7F0C3970 24840008 */ addiu $a0, $a0, 8 -/* 0F6364 7F0C3974 AFA400CC */ sw $a0, 0xcc($sp) -.L7F0C3978: -/* 0F6368 7F0C3978 0C000FDD */ jal viGetViewTop -/* 0F636C 7F0C397C 00000000 */ nop -/* 0F6370 7F0C3980 3C0B8007 */ lui $t3, %hi(dword_CODE_bss_8008C708) # $t3, 0x8007 -/* 0F6374 7F0C3984 8D6B3AE8 */ lw $t3, %lo(dword_CODE_bss_8008C708)($t3) -/* 0F6378 7F0C3988 2459001E */ addiu $t9, $v0, 0x1e -/* 0F637C 7F0C398C AFB900C8 */ sw $t9, 0xc8($sp) -/* 0F6380 7F0C3990 1560001C */ bnez $t3, .L7F0C3A04 -/* 0F6384 7F0C3994 00000000 */ nop -/* 0F6388 7F0C3998 0C000F9B */ jal viGetX -/* 0F638C 7F0C399C 00000000 */ nop -/* 0F6390 7F0C39A0 00028400 */ sll $s0, $v0, 0x10 -/* 0F6394 7F0C39A4 00107403 */ sra $t6, $s0, 0x10 -/* 0F6398 7F0C39A8 0C000F9F */ jal viGetY -/* 0F639C 7F0C39AC 01C08025 */ move $s0, $t6 -/* 0F63A0 7F0C39B0 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0F63A4 7F0C39B4 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0F63A8 7F0C39B8 8DADAAFC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0F63AC 7F0C39BC 8D8CAB00 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F63B0 7F0C39C0 3C0F00FF */ lui $t7, (0x00FF00B0 >> 16) # lui $t7, 0xff -/* 0F63B4 7F0C39C4 35EF00B0 */ ori $t7, (0x00FF00B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0F63B8 7F0C39C8 3C078005 */ lui $a3, %hi(ascii_MP_watch_menu_right_chevron) # $a3, 0x8005 -/* 0F63BC 7F0C39CC 24E707EC */ addiu $a3, %lo(ascii_MP_watch_menu_right_chevron) # addiu $a3, $a3, 0x7ec -/* 0F63C0 7F0C39D0 AFAF0018 */ sw $t7, 0x18($sp) -/* 0F63C4 7F0C39D4 02202025 */ move $a0, $s1 -/* 0F63C8 7F0C39D8 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F63CC 7F0C39DC 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F63D0 7F0C39E0 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F63D4 7F0C39E4 AFA20020 */ sw $v0, 0x20($sp) -/* 0F63D8 7F0C39E8 AFA00024 */ sw $zero, 0x24($sp) -/* 0F63DC 7F0C39EC AFA00028 */ sw $zero, 0x28($sp) -/* 0F63E0 7F0C39F0 AFAD0014 */ sw $t5, 0x14($sp) -/* 0F63E4 7F0C39F4 0FC2B35F */ jal textRender -/* 0F63E8 7F0C39F8 AFAC0010 */ sw $t4, 0x10($sp) -/* 0F63EC 7F0C39FC 1000001E */ b .L7F0C3A78 -/* 0F63F0 7F0C3A00 00408825 */ move $s1, $v0 -.L7F0C3A04: -/* 0F63F4 7F0C3A04 0C000F9B */ jal viGetX -/* 0F63F8 7F0C3A08 00000000 */ nop -/* 0F63FC 7F0C3A0C 00028400 */ sll $s0, $v0, 0x10 -/* 0F6400 7F0C3A10 0010C403 */ sra $t8, $s0, 0x10 -/* 0F6404 7F0C3A14 0C000F9F */ jal viGetY -/* 0F6408 7F0C3A18 03008025 */ move $s0, $t8 -/* 0F640C 7F0C3A1C 3C198004 */ lui $t9, %hi(ptrFontBankGothicChars) # $t9, 0x8004 -/* 0F6410 7F0C3A20 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0F6414 7F0C3A24 8D6BAAFC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0F6418 7F0C3A28 8F39AB00 */ lw $t9, %lo(ptrFontBankGothicChars)($t9) -/* 0F641C 7F0C3A2C 3C0EA0FF */ lui $t6, (0xA0FFA0F0 >> 16) # lui $t6, 0xa0ff -/* 0F6420 7F0C3A30 3C0C0070 */ lui $t4, (0x007000A0 >> 16) # lui $t4, 0x70 -/* 0F6424 7F0C3A34 358C00A0 */ ori $t4, (0x007000A0 & 0xFFFF) # ori $t4, $t4, 0xa0 -/* 0F6428 7F0C3A38 35CEA0F0 */ ori $t6, (0xA0FFA0F0 & 0xFFFF) # ori $t6, $t6, 0xa0f0 -/* 0F642C 7F0C3A3C 3C078005 */ lui $a3, %hi(ascii_MP_watch_menu_right_chevron) # $a3, 0x8005 -/* 0F6430 7F0C3A40 24E707EC */ addiu $a3, %lo(ascii_MP_watch_menu_right_chevron) # addiu $a3, $a3, 0x7ec -/* 0F6434 7F0C3A44 AFAE0018 */ sw $t6, 0x18($sp) -/* 0F6438 7F0C3A48 AFAC001C */ sw $t4, 0x1c($sp) -/* 0F643C 7F0C3A4C 02202025 */ move $a0, $s1 -/* 0F6440 7F0C3A50 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F6444 7F0C3A54 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F6448 7F0C3A58 AFB00020 */ sw $s0, 0x20($sp) -/* 0F644C 7F0C3A5C AFA20024 */ sw $v0, 0x24($sp) -/* 0F6450 7F0C3A60 AFA00028 */ sw $zero, 0x28($sp) -/* 0F6454 7F0C3A64 AFA0002C */ sw $zero, 0x2c($sp) -/* 0F6458 7F0C3A68 AFAB0014 */ sw $t3, 0x14($sp) -/* 0F645C 7F0C3A6C 0FC2B66B */ jal textRenderOutlined -/* 0F6460 7F0C3A70 AFB90010 */ sw $t9, 0x10($sp) -/* 0F6464 7F0C3A74 00408825 */ move $s1, $v0 -.L7F0C3A78: -/* 0F6468 7F0C3A78 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0F646C 7F0C3A7C 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0F6470 7F0C3A80 24010003 */ li $at, 3 -/* 0F6474 7F0C3A84 8FAD00D0 */ lw $t5, 0xd0($sp) -/* 0F6478 7F0C3A88 8C6229C0 */ lw $v0, 0x29c0($v1) -/* 0F647C 7F0C3A8C 10410003 */ beq $v0, $at, .L7F0C3A9C -/* 0F6480 7F0C3A90 24010004 */ li $at, 4 -/* 0F6484 7F0C3A94 544101AA */ bnel $v0, $at, .L7F0C4140 -/* 0F6488 7F0C3A98 24010002 */ li $at, 2 -.L7F0C3A9C: -/* 0F648C 7F0C3A9C 19A0000D */ blez $t5, .L7F0C3AD4 -/* 0F6490 7F0C3AA0 00002025 */ move $a0, $zero -/* 0F6494 7F0C3AA4 27A30094 */ addiu $v1, $sp, 0x94 -/* 0F6498 7F0C3AA8 AFA30044 */ sw $v1, 0x44($sp) -.L7F0C3AAC: -/* 0F649C 7F0C3AAC 0FC30B6E */ jal get_points_for_mp_player -/* 0F64A0 7F0C3AB0 AFA40090 */ sw $a0, 0x90($sp) -/* 0F64A4 7F0C3AB4 8FA30044 */ lw $v1, 0x44($sp) -/* 0F64A8 7F0C3AB8 8FA40090 */ lw $a0, 0x90($sp) -/* 0F64AC 7F0C3ABC AC620000 */ sw $v0, ($v1) -/* 0F64B0 7F0C3AC0 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0F64B4 7F0C3AC4 24840001 */ addiu $a0, $a0, 1 -/* 0F64B8 7F0C3AC8 24630004 */ addiu $v1, $v1, 4 -/* 0F64BC 7F0C3ACC 548FFFF7 */ bnel $a0, $t7, .L7F0C3AAC -/* 0F64C0 7F0C3AD0 AFA30044 */ sw $v1, 0x44($sp) -.L7F0C3AD4: -/* 0F64C4 7F0C3AD4 3C048007 */ lui $a0, %hi(g_gameOverFlag) # $a0, 0x8007 -/* 0F64C8 7F0C3AD8 8C843AE4 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0F64CC 7F0C3ADC 2C980001 */ sltiu $t8, $a0, 1 -/* 0F64D0 7F0C3AE0 13000005 */ beqz $t8, .Leu7F0C3AF8 -/* 0F64D4 7F0C3AE4 03002025 */ move $a0, $t8 -/* 0F64D8 7F0C3AE8 3C048007 */ lui $a0, %hi(g_stopPlayFlag) # $a0, 0x8007 -/* 0F64DC 7F0C3AEC 8C843AE0 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0F64E0 7F0C3AF0 2C990001 */ sltiu $t9, $a0, 1 -/* 0F64E4 7F0C3AF4 03202025 */ move $a0, $t9 -.Leu7F0C3AF8: -/* 0F64E8 7F0C3AF8 0FC30D0F */ jal mpwatchShouldDisplayRank -/* 0F64EC 7F0C3AFC 00000000 */ nop -/* 0F64F0 7F0C3B00 10400034 */ beqz $v0, .L7F0C3BD4 -/* 0F64F4 7F0C3B04 27A400AC */ addiu $a0, $sp, 0xac -/* 0F64F8 7F0C3B08 0FC30C5D */ jal write_playerrank_to_buffer -/* 0F64FC 7F0C3B0C 8FA500D4 */ lw $a1, 0xd4($sp) -/* 0F6500 7F0C3B10 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0F6504 7F0C3B14 8D6BAAFC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0F6508 7F0C3B18 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F650C 7F0C3B1C 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F6510 7F0C3B20 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F6514 7F0C3B24 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F6518 7F0C3B28 27A600AC */ addiu $a2, $sp, 0xac -/* 0F651C 7F0C3B2C AFA00014 */ sw $zero, 0x14($sp) -/* 0F6520 7F0C3B30 0FC2B713 */ jal textMeasure -/* 0F6524 7F0C3B34 AFAB0010 */ sw $t3, 0x10($sp) -/* 0F6528 7F0C3B38 0C000FD9 */ jal viGetViewLeft -/* 0F652C 7F0C3B3C 00000000 */ nop -/* 0F6530 7F0C3B40 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0F6534 7F0C3B44 8FAD00C0 */ lw $t5, 0xc0($sp) -/* 0F6538 7F0C3B48 004E6021 */ addu $t4, $v0, $t6 -/* 0F653C 7F0C3B4C 000D7843 */ sra $t7, $t5, 1 -/* 0F6540 7F0C3B50 018F2023 */ subu $a0, $t4, $t7 -/* 0F6544 7F0C3B54 24840050 */ addiu $a0, $a0, 0x50 -/* 0F6548 7F0C3B58 0C000FDD */ jal viGetViewTop -/* 0F654C 7F0C3B5C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F6550 7F0C3B60 8FB800BC */ lw $t8, 0xbc($sp) -/* 0F6554 7F0C3B64 0018C843 */ sra $t9, $t8, 1 -/* 0F6558 7F0C3B68 00595823 */ subu $t3, $v0, $t9 -/* 0F655C 7F0C3B6C 256E002D */ addiu $t6, $t3, 0x2d -/* 0F6560 7F0C3B70 0C000F9B */ jal viGetX -/* 0F6564 7F0C3B74 AFAE00C8 */ sw $t6, 0xc8($sp) -/* 0F6568 7F0C3B78 00028400 */ sll $s0, $v0, 0x10 -/* 0F656C 7F0C3B7C 00106C03 */ sra $t5, $s0, 0x10 -/* 0F6570 7F0C3B80 0C000F9F */ jal viGetY -/* 0F6574 7F0C3B84 01A08025 */ move $s0, $t5 -/* 0F6578 7F0C3B88 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0F657C 7F0C3B8C 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0F6580 7F0C3B90 8DEFAAFC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F6584 7F0C3B94 8D8CAB00 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F6588 7F0C3B98 3C1800FF */ lui $t8, (0x00FF00B0 >> 16) # lui $t8, 0xff -/* 0F658C 7F0C3B9C 371800B0 */ ori $t8, (0x00FF00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0F6590 7F0C3BA0 AFB80018 */ sw $t8, 0x18($sp) -/* 0F6594 7F0C3BA4 02202025 */ move $a0, $s1 -/* 0F6598 7F0C3BA8 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F659C 7F0C3BAC 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F65A0 7F0C3BB0 27A700AC */ addiu $a3, $sp, 0xac -/* 0F65A4 7F0C3BB4 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F65A8 7F0C3BB8 AFA20020 */ sw $v0, 0x20($sp) -/* 0F65AC 7F0C3BBC AFA00024 */ sw $zero, 0x24($sp) -/* 0F65B0 7F0C3BC0 AFA00028 */ sw $zero, 0x28($sp) -/* 0F65B4 7F0C3BC4 AFAF0014 */ sw $t7, 0x14($sp) -/* 0F65B8 7F0C3BC8 0FC2B35F */ jal textRender -/* 0F65BC 7F0C3BCC AFAC0010 */ sw $t4, 0x10($sp) -/* 0F65C0 7F0C3BD0 00408825 */ move $s1, $v0 -.L7F0C3BD4: -/* 0F65C4 7F0C3BD4 3C048007 */ lui $a0, %hi(g_gameOverFlag) # $a0, 0x8007 -/* 0F65C8 7F0C3BD8 8C843AE4 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0F65CC 7F0C3BDC 2C990001 */ sltiu $t9, $a0, 1 -/* 0F65D0 7F0C3BE0 13200005 */ beqz $t9, .L7F0C3BF8 -/* 0F65D4 7F0C3BE4 03202025 */ move $a0, $t9 -/* 0F65D8 7F0C3BE8 3C048007 */ lui $a0, %hi(g_stopPlayFlag) # $a0, 0x8007 -/* 0F65DC 7F0C3BEC 8C843AE0 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0F65E0 7F0C3BF0 2C8B0001 */ sltiu $t3, $a0, 1 -/* 0F65E4 7F0C3BF4 01602025 */ move $a0, $t3 -.L7F0C3BF8: -/* 0F65E8 7F0C3BF8 0FC30D2B */ jal mpwatchShouldDisplayScore -/* 0F65EC 7F0C3BFC 00000000 */ nop -/* 0F65F0 7F0C3C00 1040014B */ beqz $v0, .L7F0C4130 -/* 0F65F4 7F0C3C04 00000000 */ nop -/* 0F65F8 7F0C3C08 0FC051B2 */ jal get_scenario -/* 0F65FC 7F0C3C0C 00000000 */ nop -/* 0F6600 7F0C3C10 AFA20080 */ sw $v0, 0x80($sp) -/* 0F6604 7F0C3C14 0FC304AE */ jal langGet -/* 0F6608 7F0C3C18 3404A01B */ li $a0, 40987 -/* 0F660C 7F0C3C1C 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) # $t6, 0x8004 -/* 0F6610 7F0C3C20 8DCEAAFC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0F6614 7F0C3C24 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F6618 7F0C3C28 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F661C 7F0C3C2C 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F6620 7F0C3C30 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F6624 7F0C3C34 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F6628 7F0C3C38 00403025 */ move $a2, $v0 -/* 0F662C 7F0C3C3C AFA00014 */ sw $zero, 0x14($sp) -/* 0F6630 7F0C3C40 0FC2B713 */ jal textMeasure -/* 0F6634 7F0C3C44 AFAE0010 */ sw $t6, 0x10($sp) -/* 0F6638 7F0C3C48 0C000FD9 */ jal viGetViewLeft -/* 0F663C 7F0C3C4C 00000000 */ nop -/* 0F6640 7F0C3C50 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0F6644 7F0C3C54 8FAF00C0 */ lw $t7, 0xc0($sp) -/* 0F6648 7F0C3C58 004D6021 */ addu $t4, $v0, $t5 -/* 0F664C 7F0C3C5C 000FC043 */ sra $t8, $t7, 1 -/* 0F6650 7F0C3C60 01982023 */ subu $a0, $t4, $t8 -/* 0F6654 7F0C3C64 24840050 */ addiu $a0, $a0, 0x50 -/* 0F6658 7F0C3C68 0C000FDD */ jal viGetViewTop -/* 0F665C 7F0C3C6C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F6660 7F0C3C70 8FB900BC */ lw $t9, 0xbc($sp) -/* 0F6664 7F0C3C74 00195843 */ sra $t3, $t9, 1 -/* 0F6668 7F0C3C78 004B7023 */ subu $t6, $v0, $t3 -/* 0F666C 7F0C3C7C 25CD003D */ addiu $t5, $t6, 0x3d -/* 0F6670 7F0C3C80 0C000F9B */ jal viGetX -/* 0F6674 7F0C3C84 AFAD00C8 */ sw $t5, 0xc8($sp) -/* 0F6678 7F0C3C88 00028400 */ sll $s0, $v0, 0x10 -/* 0F667C 7F0C3C8C 00107C03 */ sra $t7, $s0, 0x10 -/* 0F6680 7F0C3C90 0C000F9F */ jal viGetY -/* 0F6684 7F0C3C94 01E08025 */ move $s0, $t7 -/* 0F6688 7F0C3C98 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0F668C 7F0C3C9C 3C188004 */ lui $t8, %hi(ptrFontBankGothic) # $t8, 0x8004 -/* 0F6690 7F0C3CA0 8F18AAFC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0F6694 7F0C3CA4 8D8CAB00 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F6698 7F0C3CA8 3C1900FF */ lui $t9, (0x00FF00B0 >> 16) # lui $t9, 0xff -/* 0F669C 7F0C3CAC 373900B0 */ ori $t9, (0x00FF00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0F66A0 7F0C3CB0 AFB90018 */ sw $t9, 0x18($sp) -/* 0F66A4 7F0C3CB4 02202025 */ move $a0, $s1 -/* 0F66A8 7F0C3CB8 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F66AC 7F0C3CBC 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F66B0 7F0C3CC0 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F66B4 7F0C3CC4 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F66B8 7F0C3CC8 AFA20020 */ sw $v0, 0x20($sp) -/* 0F66BC 7F0C3CCC AFA00024 */ sw $zero, 0x24($sp) -/* 0F66C0 7F0C3CD0 AFA00028 */ sw $zero, 0x28($sp) -/* 0F66C4 7F0C3CD4 AFB80014 */ sw $t8, 0x14($sp) -/* 0F66C8 7F0C3CD8 0FC2B35F */ jal textRender -/* 0F66CC 7F0C3CDC AFAC0010 */ sw $t4, 0x10($sp) -/* 0F66D0 7F0C3CE0 8FA30080 */ lw $v1, 0x80($sp) -/* 0F66D4 7F0C3CE4 24010005 */ li $at, 5 -/* 0F66D8 7F0C3CE8 00408825 */ move $s1, $v0 -/* 0F66DC 7F0C3CEC 1061000A */ beq $v1, $at, .L7F0C3D18 -/* 0F66E0 7F0C3CF0 8FAB00D4 */ lw $t3, 0xd4($sp) -/* 0F66E4 7F0C3CF4 24010006 */ li $at, 6 -/* 0F66E8 7F0C3CF8 10610007 */ beq $v1, $at, .L7F0C3D18 -/* 0F66EC 7F0C3CFC 24010007 */ li $at, 7 -/* 0F66F0 7F0C3D00 10610005 */ beq $v1, $at, .L7F0C3D18 -/* 0F66F4 7F0C3D04 24010002 */ li $at, 2 -/* 0F66F8 7F0C3D08 10610003 */ beq $v1, $at, .L7F0C3D18 -/* 0F66FC 7F0C3D0C 24010003 */ li $at, 3 -/* 0F6700 7F0C3D10 14610016 */ bne $v1, $at, .L7F0C3D6C -/* 0F6704 7F0C3D14 240D0001 */ li $t5, 1 -.L7F0C3D18: -/* 0F6708 7F0C3D18 000B70C0 */ sll $t6, $t3, 3 -/* 0F670C 7F0C3D1C 01CB7023 */ subu $t6, $t6, $t3 -/* 0F6710 7F0C3D20 000E7100 */ sll $t6, $t6, 4 -/* 0F6714 7F0C3D24 3C0D8007 */ lui $t5, %hi(g_playerPlayerData+105) -/* 0F6718 7F0C3D28 01AE6821 */ addu $t5, $t5, $t6 -/* 0F671C 7F0C3D2C 91AD8A69 */ lbu $t5, %lo(g_playerPlayerData+105)($t5) -/* 0F6720 7F0C3D30 24190005 */ li $t9, 5 -/* 0F6724 7F0C3D34 240B0004 */ li $t3, 4 -/* 0F6728 7F0C3D38 15A00008 */ bnez $t5, .Leu7F0C3D5C -/* 0F672C 7F0C3D3C 240E0002 */ li $t6, 2 -/* 0F6730 7F0C3D40 240F0003 */ li $t7, 3 -/* 0F6734 7F0C3D44 240C0002 */ li $t4, 2 -/* 0F6738 7F0C3D48 24180004 */ li $t8, 4 -/* 0F673C 7F0C3D4C AFAF008C */ sw $t7, 0x8c($sp) -/* 0F6740 7F0C3D50 AFAC0088 */ sw $t4, 0x88($sp) -/* 0F6744 7F0C3D54 10000008 */ b .L7F0C3D78 -/* 0F6748 7F0C3D58 AFB80084 */ sw $t8, 0x84($sp) -.Leu7F0C3D5C: -/* 0F674C 7F0C3D5C AFB9008C */ sw $t9, 0x8c($sp) -/* 0F6750 7F0C3D60 AFAB0088 */ sw $t3, 0x88($sp) -/* 0F6754 7F0C3D64 10000004 */ b .L7F0C3D78 -/* 0F6758 7F0C3D68 AFAE0084 */ sw $t6, 0x84($sp) -.L7F0C3D6C: -/* 0F675C 7F0C3D6C AFAD008C */ sw $t5, 0x8c($sp) -/* 0F6760 7F0C3D70 AFA00088 */ sw $zero, 0x88($sp) -/* 0F6764 7F0C3D74 AFA00084 */ sw $zero, 0x84($sp) -.L7F0C3D78: -/* 0F6768 7F0C3D78 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0F676C 7F0C3D7C 24010002 */ li $at, 2 -/* 0F6770 7F0C3D80 15E1004E */ bne $t7, $at, .L7F0C3EBC -/* 0F6774 7F0C3D84 00000000 */ nop -/* 0F6778 7F0C3D88 0C000FD9 */ jal viGetViewLeft -/* 0F677C 7F0C3D8C 00000000 */ nop -/* 0F6780 7F0C3D90 00028400 */ sll $s0, $v0, 0x10 -/* 0F6784 7F0C3D94 00106403 */ sra $t4, $s0, 0x10 -/* 0F6788 7F0C3D98 0C000FDD */ jal viGetViewTop -/* 0F678C 7F0C3D9C 01808025 */ move $s0, $t4 -/* 0F6790 7F0C3DA0 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0F6794 7F0C3DA4 00024400 */ sll $t0, $v0, 0x10 -/* 0F6798 7F0C3DA8 0008C403 */ sra $t8, $t0, 0x10 -/* 0F679C 7F0C3DAC 14600004 */ bnez $v1, .L7F0C3DC0 -/* 0F67A0 7F0C3DB0 03004025 */ move $t0, $t8 -/* 0F67A4 7F0C3DB4 8FB9008C */ lw $t9, 0x8c($sp) -/* 0F67A8 7F0C3DB8 1000000F */ b .L7F0C3DF8 -/* 0F67AC 7F0C3DBC AFB90050 */ sw $t9, 0x50($sp) -.L7F0C3DC0: -/* 0F67B0 7F0C3DC0 000370C0 */ sll $t6, $v1, 3 -/* 0F67B4 7F0C3DC4 01C37023 */ subu $t6, $t6, $v1 -/* 0F67B8 7F0C3DC8 000E7100 */ sll $t6, $t6, 4 -/* 0F67BC 7F0C3DCC 3C0D8007 */ lui $t5, %hi(g_playerPlayerData + 0x69) -/* 0F67C0 7F0C3DD0 01AE6821 */ addu $t5, $t5, $t6 -/* 0F67C4 7F0C3DD4 3C0B8007 */ lui $t3, %hi(g_playerPlayerData + 0x69) # $t3, 0x8007 -/* 0F67C8 7F0C3DD8 916B8A69 */ lbu $t3, %lo(g_playerPlayerData + 0x69)($t3) -/* 0F67CC 7F0C3DDC 91AD8A69 */ lbu $t5, %lo(g_playerPlayerData + 0x69)($t5) -/* 0F67D0 7F0C3DE0 8FA60084 */ lw $a2, 0x84($sp) -/* 0F67D4 7F0C3DE4 156D0003 */ bne $t3, $t5, .Leu7F0C3DF4 -/* 0F67D8 7F0C3DE8 00000000 */ nop -/* 0F67DC 7F0C3DEC 10000001 */ b .Leu7F0C3DF4 -/* 0F67E0 7F0C3DF0 8FA60088 */ lw $a2, 0x88($sp) -.Leu7F0C3DF4: -/* 0F67E4 7F0C3DF4 AFA60050 */ sw $a2, 0x50($sp) -.L7F0C3DF8: -/* 0F67E8 7F0C3DF8 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0F67EC 7F0C3DFC 8FAC0050 */ lw $t4, 0x50($sp) -/* 0F67F0 7F0C3E00 02202025 */ move $a0, $s1 -/* 0F67F4 7F0C3E04 020F2821 */ addu $a1, $s0, $t7 -/* 0F67F8 7F0C3E08 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F67FC 7F0C3E0C 2506004E */ addiu $a2, $t0, 0x4e -/* 0F6800 7F0C3E10 8FA70094 */ lw $a3, 0x94($sp) -/* 0F6804 7F0C3E14 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F6808 7F0C3E18 AFAC0010 */ sw $t4, 0x10($sp) -/* 0F680C 7F0C3E1C 0C000FD9 */ jal viGetViewLeft -/* 0F6810 7F0C3E20 00408825 */ move $s1, $v0 -/* 0F6814 7F0C3E24 00028400 */ sll $s0, $v0, 0x10 -/* 0F6818 7F0C3E28 0010C403 */ sra $t8, $s0, 0x10 -/* 0F681C 7F0C3E2C 0C000FDD */ jal viGetViewTop -/* 0F6820 7F0C3E30 03008025 */ move $s0, $t8 -/* 0F6824 7F0C3E34 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0F6828 7F0C3E38 00024400 */ sll $t0, $v0, 0x10 -/* 0F682C 7F0C3E3C 0008CC03 */ sra $t9, $t0, 0x10 -/* 0F6830 7F0C3E40 24010001 */ li $at, 1 -/* 0F6834 7F0C3E44 14610004 */ bne $v1, $at, .L7F0C3E58 -/* 0F6838 7F0C3E48 03204025 */ move $t0, $t9 -/* 0F683C 7F0C3E4C 8FAE008C */ lw $t6, 0x8c($sp) -/* 0F6840 7F0C3E50 1000000F */ b .L7F0C3E90 -/* 0F6844 7F0C3E54 AFAE0050 */ sw $t6, 0x50($sp) -.L7F0C3E58: -/* 0F6848 7F0C3E58 000368C0 */ sll $t5, $v1, 3 -/* 0F684C 7F0C3E5C 01A36823 */ subu $t5, $t5, $v1 -/* 0F6850 7F0C3E60 3C028007 */ lui $v0, %hi(g_playerPlayerData) # $v0, 0x8007 -/* 0F6854 7F0C3E64 24428A00 */ addiu $v0, %lo(g_playerPlayerData) # addiu $v0, $v0, -0x7600 -/* 0F6858 7F0C3E68 000D6900 */ sll $t5, $t5, 4 -/* 0F685C 7F0C3E6C 004D7821 */ addu $t7, $v0, $t5 -/* 0F6860 7F0C3E70 91EC0069 */ lbu $t4, 0x69($t7) -/* 0F6864 7F0C3E74 904B00D9 */ lbu $t3, 0xd9($v0) -/* 0F6868 7F0C3E78 8FA60084 */ lw $a2, 0x84($sp) -/* 0F686C 7F0C3E7C 156C0003 */ bne $t3, $t4, .L7F0C3E8C -/* 0F6870 7F0C3E80 00000000 */ nop -/* 0F6874 7F0C3E84 10000001 */ b .L7F0C3E8C -/* 0F6878 7F0C3E88 8FA60088 */ lw $a2, 0x88($sp) -.L7F0C3E8C: -/* 0F687C 7F0C3E8C AFA60050 */ sw $a2, 0x50($sp) -.L7F0C3E90: -/* 0F6880 7F0C3E90 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0F6884 7F0C3E94 8FB90050 */ lw $t9, 0x50($sp) -/* 0F6888 7F0C3E98 02202025 */ move $a0, $s1 -/* 0F688C 7F0C3E9C 02182821 */ addu $a1, $s0, $t8 -/* 0F6890 7F0C3EA0 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F6894 7F0C3EA4 2506005E */ addiu $a2, $t0, 0x5e -/* 0F6898 7F0C3EA8 8FA70098 */ lw $a3, 0x98($sp) -/* 0F689C 7F0C3EAC 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F68A0 7F0C3EB0 AFB90010 */ sw $t9, 0x10($sp) -/* 0F68A4 7F0C3EB4 1000009E */ b .L7F0C4130 -/* 0F68A8 7F0C3EB8 00408825 */ move $s1, $v0 -.L7F0C3EBC: -/* 0F68AC 7F0C3EBC 0C000FD9 */ jal viGetViewLeft -/* 0F68B0 7F0C3EC0 00000000 */ nop -/* 0F68B4 7F0C3EC4 00028400 */ sll $s0, $v0, 0x10 -/* 0F68B8 7F0C3EC8 00107403 */ sra $t6, $s0, 0x10 -/* 0F68BC 7F0C3ECC 0C000FDD */ jal viGetViewTop -/* 0F68C0 7F0C3ED0 01C08025 */ move $s0, $t6 -/* 0F68C4 7F0C3ED4 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0F68C8 7F0C3ED8 00024400 */ sll $t0, $v0, 0x10 -/* 0F68CC 7F0C3EDC 00086C03 */ sra $t5, $t0, 0x10 -/* 0F68D0 7F0C3EE0 14600004 */ bnez $v1, .L7F0C3EF4 -/* 0F68D4 7F0C3EE4 01A04025 */ move $t0, $t5 -/* 0F68D8 7F0C3EE8 8FAF008C */ lw $t7, 0x8c($sp) -/* 0F68DC 7F0C3EEC 1000000F */ b .L7F0C3F2C -/* 0F68E0 7F0C3EF0 AFAF0050 */ sw $t7, 0x50($sp) -.L7F0C3EF4: -/* 0F68E4 7F0C3EF4 000360C0 */ sll $t4, $v1, 3 -/* 0F68E8 7F0C3EF8 01836023 */ subu $t4, $t4, $v1 -/* 0F68EC 7F0C3EFC 000C6100 */ sll $t4, $t4, 4 -/* 0F68F0 7F0C3F00 3C188007 */ lui $t8, %hi(g_playerPlayerData + 0x69) -/* 0F68F4 7F0C3F04 030CC021 */ addu $t8, $t8, $t4 -/* 0F68F8 7F0C3F08 3C0B8007 */ lui $t3, %hi(g_playerPlayerData + 0x69) # $t3, 0x8007 -/* 0F68FC 7F0C3F0C 916B8A69 */ lbu $t3, %lo(g_playerPlayerData + 0x69)($t3) -/* 0F6900 7F0C3F10 93188A69 */ lbu $t8, %lo(g_playerPlayerData + 0x69)($t8) -/* 0F6904 7F0C3F14 8FA60084 */ lw $a2, 0x84($sp) -/* 0F6908 7F0C3F18 15780003 */ bne $t3, $t8, .L7F0C3F28 -/* 0F690C 7F0C3F1C 00000000 */ nop -/* 0F6910 7F0C3F20 10000001 */ b .L7F0C3F28 -/* 0F6914 7F0C3F24 8FA60088 */ lw $a2, 0x88($sp) -.L7F0C3F28: -/* 0F6918 7F0C3F28 AFA60050 */ sw $a2, 0x50($sp) -.L7F0C3F2C: -/* 0F691C 7F0C3F2C 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F6920 7F0C3F30 8FAE0050 */ lw $t6, 0x50($sp) -/* 0F6924 7F0C3F34 02202025 */ move $a0, $s1 -/* 0F6928 7F0C3F38 02192821 */ addu $a1, $s0, $t9 -/* 0F692C 7F0C3F3C 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F6930 7F0C3F40 2506004E */ addiu $a2, $t0, 0x4e -/* 0F6934 7F0C3F44 8FA70094 */ lw $a3, 0x94($sp) -/* 0F6938 7F0C3F48 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F693C 7F0C3F4C AFAE0010 */ sw $t6, 0x10($sp) -/* 0F6940 7F0C3F50 0C000FD9 */ jal viGetViewLeft -/* 0F6944 7F0C3F54 00408825 */ move $s1, $v0 -/* 0F6948 7F0C3F58 00028400 */ sll $s0, $v0, 0x10 -/* 0F694C 7F0C3F5C 00106C03 */ sra $t5, $s0, 0x10 -/* 0F6950 7F0C3F60 0C000FDD */ jal viGetViewTop -/* 0F6954 7F0C3F64 01A08025 */ move $s0, $t5 -/* 0F6958 7F0C3F68 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0F695C 7F0C3F6C 00024400 */ sll $t0, $v0, 0x10 -/* 0F6960 7F0C3F70 00087C03 */ sra $t7, $t0, 0x10 -/* 0F6964 7F0C3F74 24010001 */ li $at, 1 -/* 0F6968 7F0C3F78 14610004 */ bne $v1, $at, .L7F0C3F8C -/* 0F696C 7F0C3F7C 01E04025 */ move $t0, $t7 -/* 0F6970 7F0C3F80 8FAC008C */ lw $t4, 0x8c($sp) -/* 0F6974 7F0C3F84 1000000F */ b .L7F0C3FC4 -/* 0F6978 7F0C3F88 AFAC0050 */ sw $t4, 0x50($sp) -.L7F0C3F8C: -/* 0F697C 7F0C3F8C 0003C0C0 */ sll $t8, $v1, 3 -/* 0F6980 7F0C3F90 0303C023 */ subu $t8, $t8, $v1 -/* 0F6984 7F0C3F94 0018C100 */ sll $t8, $t8, 4 -/* 0F6988 7F0C3F98 3C198007 */ lui $t9, %hi(g_playerPlayerData + 0x69) -/* 0F698C 7F0C3F9C 0338C821 */ addu $t9, $t9, $t8 -/* 0F6990 7F0C3FA0 3C0B8007 */ lui $t3, %hi(g_playerPlayerData+0x70 + 0x69) # $t3, 0x8007 -/* 0F6994 7F0C3FA4 916B8AD9 */ lbu $t3, %lo(g_playerPlayerData+0x70 + 0x69)($t3) -/* 0F6998 7F0C3FA8 93398A69 */ lbu $t9, %lo(g_playerPlayerData + 0x69)($t9) -/* 0F699C 7F0C3FAC 8FA60084 */ lw $a2, 0x84($sp) -/* 0F69A0 7F0C3FB0 15790003 */ bne $t3, $t9, .L7F0C3FC0 -/* 0F69A4 7F0C3FB4 00000000 */ nop -/* 0F69A8 7F0C3FB8 10000001 */ b .L7F0C3FC0 -/* 0F69AC 7F0C3FBC 8FA60088 */ lw $a2, 0x88($sp) -.L7F0C3FC0: -/* 0F69B0 7F0C3FC0 AFA60050 */ sw $a2, 0x50($sp) -.L7F0C3FC4: -/* 0F69B4 7F0C3FC4 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0F69B8 7F0C3FC8 8FAD0050 */ lw $t5, 0x50($sp) -/* 0F69BC 7F0C3FCC 02202025 */ move $a0, $s1 -/* 0F69C0 7F0C3FD0 020E2821 */ addu $a1, $s0, $t6 -/* 0F69C4 7F0C3FD4 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F69C8 7F0C3FD8 2506004E */ addiu $a2, $t0, 0x4e -/* 0F69CC 7F0C3FDC 8FA70098 */ lw $a3, 0x98($sp) -/* 0F69D0 7F0C3FE0 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F69D4 7F0C3FE4 AFAD0010 */ sw $t5, 0x10($sp) -/* 0F69D8 7F0C3FE8 0C000FD9 */ jal viGetViewLeft -/* 0F69DC 7F0C3FEC 00408825 */ move $s1, $v0 -/* 0F69E0 7F0C3FF0 00028400 */ sll $s0, $v0, 0x10 -/* 0F69E4 7F0C3FF4 00107C03 */ sra $t7, $s0, 0x10 -/* 0F69E8 7F0C3FF8 0C000FDD */ jal viGetViewTop -/* 0F69EC 7F0C3FFC 01E08025 */ move $s0, $t7 -/* 0F69F0 7F0C4000 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0F69F4 7F0C4004 00024400 */ sll $t0, $v0, 0x10 -/* 0F69F8 7F0C4008 00086403 */ sra $t4, $t0, 0x10 -/* 0F69FC 7F0C400C 24010002 */ li $at, 2 -/* 0F6A00 7F0C4010 14610004 */ bne $v1, $at, .L7F0C4024 -/* 0F6A04 7F0C4014 01804025 */ move $t0, $t4 -/* 0F6A08 7F0C4018 8FB8008C */ lw $t8, 0x8c($sp) -/* 0F6A0C 7F0C401C 1000000F */ b .L7F0C405C -/* 0F6A10 7F0C4020 AFB80050 */ sw $t8, 0x50($sp) -.L7F0C4024: -/* 0F6A14 7F0C4024 0003C8C0 */ sll $t9, $v1, 3 -/* 0F6A18 7F0C4028 0323C823 */ subu $t9, $t9, $v1 -/* 0F6A1C 7F0C402C 0019C900 */ sll $t9, $t9, 4 -/* 0F6A20 7F0C4030 3C0E8007 */ lui $t6, %hi(g_playerPlayerData + 0x69) -/* 0F6A24 7F0C4034 01D97021 */ addu $t6, $t6, $t9 -/* 0F6A28 7F0C4038 3C0B8007 */ lui $t3, %hi(g_playerPlayerData+0x70+0x70 + 0x69) # $t3, 0x8007 -/* 0F6A2C 7F0C403C 916B8B49 */ lbu $t3, %lo(g_playerPlayerData+0x70+0x70 + 0x69)($t3) -/* 0F6A30 7F0C4040 91CE8A69 */ lbu $t6, %lo(g_playerPlayerData + 0x69)($t6) -/* 0F6A34 7F0C4044 8FA60084 */ lw $a2, 0x84($sp) -/* 0F6A38 7F0C4048 156E0003 */ bne $t3, $t6, .L7F0C4058 -/* 0F6A3C 7F0C404C 00000000 */ nop -/* 0F6A40 7F0C4050 10000001 */ b .L7F0C4058 -/* 0F6A44 7F0C4054 8FA60088 */ lw $a2, 0x88($sp) -.L7F0C4058: -/* 0F6A48 7F0C4058 AFA60050 */ sw $a2, 0x50($sp) -.L7F0C405C: -/* 0F6A4C 7F0C405C 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0F6A50 7F0C4060 8FAF0050 */ lw $t7, 0x50($sp) -/* 0F6A54 7F0C4064 02202025 */ move $a0, $s1 -/* 0F6A58 7F0C4068 020D2821 */ addu $a1, $s0, $t5 -/* 0F6A5C 7F0C406C 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F6A60 7F0C4070 2506005E */ addiu $a2, $t0, 0x5e -/* 0F6A64 7F0C4074 8FA7009C */ lw $a3, 0x9c($sp) -/* 0F6A68 7F0C4078 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F6A6C 7F0C407C AFAF0010 */ sw $t7, 0x10($sp) -/* 0F6A70 7F0C4080 8FAC00D0 */ lw $t4, 0xd0($sp) -/* 0F6A74 7F0C4084 24010004 */ li $at, 4 -/* 0F6A78 7F0C4088 00408825 */ move $s1, $v0 -/* 0F6A7C 7F0C408C 15810028 */ bne $t4, $at, .L7F0C4130 -/* 0F6A80 7F0C4090 00000000 */ nop -/* 0F6A84 7F0C4094 0C000FD9 */ jal viGetViewLeft -/* 0F6A88 7F0C4098 00000000 */ nop -/* 0F6A8C 7F0C409C 00028400 */ sll $s0, $v0, 0x10 -/* 0F6A90 7F0C40A0 0010C403 */ sra $t8, $s0, 0x10 -/* 0F6A94 7F0C40A4 0C000FDD */ jal viGetViewTop -/* 0F6A98 7F0C40A8 03008025 */ move $s0, $t8 -/* 0F6A9C 7F0C40AC 8FA300D4 */ lw $v1, 0xd4($sp) -/* 0F6AA0 7F0C40B0 00024400 */ sll $t0, $v0, 0x10 -/* 0F6AA4 7F0C40B4 0008CC03 */ sra $t9, $t0, 0x10 -/* 0F6AA8 7F0C40B8 24010003 */ li $at, 3 -/* 0F6AAC 7F0C40BC 14610004 */ bne $v1, $at, .L7F0C40D0 -/* 0F6AB0 7F0C40C0 03204025 */ move $t0, $t9 -/* 0F6AB4 7F0C40C4 8FAB008C */ lw $t3, 0x8c($sp) -/* 0F6AB8 7F0C40C8 1000000F */ b .L7F0C4108 -/* 0F6ABC 7F0C40CC AFAB0050 */ sw $t3, 0x50($sp) -.L7F0C40D0: -/* 0F6AC0 7F0C40D0 000368C0 */ sll $t5, $v1, 3 -/* 0F6AC4 7F0C40D4 01A36823 */ subu $t5, $t5, $v1 -/* 0F6AC8 7F0C40D8 3C028007 */ lui $v0, %hi(g_playerPlayerData) # $v0, 0x8007 -/* 0F6ACC 7F0C40DC 24428A00 */ addiu $v0, %lo(g_playerPlayerData) # addiu $v0, $v0, -0x7600 -/* 0F6AD0 7F0C40E0 000D6900 */ sll $t5, $t5, 4 -/* 0F6AD4 7F0C40E4 004D7821 */ addu $t7, $v0, $t5 -/* 0F6AD8 7F0C40E8 91EC0069 */ lbu $t4, 0x69($t7) -/* 0F6ADC 7F0C40EC 904E01B9 */ lbu $t6, 0x1b9($v0) -/* 0F6AE0 7F0C40F0 8FA60084 */ lw $a2, 0x84($sp) -/* 0F6AE4 7F0C40F4 15CC0003 */ bne $t6, $t4, .L7F0C4104 -/* 0F6AE8 7F0C40F8 00000000 */ nop -/* 0F6AEC 7F0C40FC 10000001 */ b .L7F0C4104 -/* 0F6AF0 7F0C4100 8FA60088 */ lw $a2, 0x88($sp) -.L7F0C4104: -/* 0F6AF4 7F0C4104 AFA60050 */ sw $a2, 0x50($sp) -.L7F0C4108: -/* 0F6AF8 7F0C4108 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0F6AFC 7F0C410C 8FB90050 */ lw $t9, 0x50($sp) -/* 0F6B00 7F0C4110 02202025 */ move $a0, $s1 -/* 0F6B04 7F0C4114 02182821 */ addu $a1, $s0, $t8 -/* 0F6B08 7F0C4118 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F6B0C 7F0C411C 2506005E */ addiu $a2, $t0, 0x5e -/* 0F6B10 7F0C4120 8FA700A0 */ lw $a3, 0xa0($sp) -/* 0F6B14 7F0C4124 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F6B18 7F0C4128 AFB90010 */ sw $t9, 0x10($sp) -/* 0F6B1C 7F0C412C 00408825 */ move $s1, $v0 -.L7F0C4130: -/* 0F6B20 7F0C4130 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0F6B24 7F0C4134 100003BB */ b .L7F0C5024 -/* 0F6B28 7F0C4138 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0F6B2C 7F0C413C 24010002 */ li $at, 2 -.L7F0C4140: -/* 0F6B30 7F0C4140 1441011C */ bne $v0, $at, .L7F0C45B4 -/* 0F6B34 7F0C4144 3C048007 */ lui $a0, %hi(g_gameOverFlag) # $a0, 0x8007 -/* 0F6B38 7F0C4148 8C843AE4 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0F6B3C 7F0C414C 2C8B0001 */ sltiu $t3, $a0, 1 -/* 0F6B40 7F0C4150 11600005 */ beqz $t3, .L7F0C4168 -/* 0F6B44 7F0C4154 01602025 */ move $a0, $t3 -/* 0F6B48 7F0C4158 3C048007 */ lui $a0, %hi(g_stopPlayFlag) # $a0, 0x8007 -/* 0F6B4C 7F0C415C 8C843AE0 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0F6B50 7F0C4160 2C8D0001 */ sltiu $t5, $a0, 1 -/* 0F6B54 7F0C4164 01A02025 */ move $a0, $t5 -.L7F0C4168: -/* 0F6B58 7F0C4168 0FC30D0F */ jal mpwatchShouldDisplayRank -/* 0F6B5C 7F0C416C 00000000 */ nop -/* 0F6B60 7F0C4170 10400034 */ beqz $v0, .L7F0C4244 -/* 0F6B64 7F0C4174 27A400AC */ addiu $a0, $sp, 0xac -/* 0F6B68 7F0C4178 0FC30C5D */ jal write_playerrank_to_buffer -/* 0F6B6C 7F0C417C 8FA500D4 */ lw $a1, 0xd4($sp) -/* 0F6B70 7F0C4180 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0F6B74 7F0C4184 8DEFAAFC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F6B78 7F0C4188 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F6B7C 7F0C418C 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F6B80 7F0C4190 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F6B84 7F0C4194 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F6B88 7F0C4198 27A600AC */ addiu $a2, $sp, 0xac -/* 0F6B8C 7F0C419C AFA00014 */ sw $zero, 0x14($sp) -/* 0F6B90 7F0C41A0 0FC2B713 */ jal textMeasure -/* 0F6B94 7F0C41A4 AFAF0010 */ sw $t7, 0x10($sp) -/* 0F6B98 7F0C41A8 0C000FD9 */ jal viGetViewLeft -/* 0F6B9C 7F0C41AC 00000000 */ nop -/* 0F6BA0 7F0C41B0 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0F6BA4 7F0C41B4 8FB800C0 */ lw $t8, 0xc0($sp) -/* 0F6BA8 7F0C41B8 004E6021 */ addu $t4, $v0, $t6 -/* 0F6BAC 7F0C41BC 0018C843 */ sra $t9, $t8, 1 -/* 0F6BB0 7F0C41C0 01992023 */ subu $a0, $t4, $t9 -/* 0F6BB4 7F0C41C4 24840050 */ addiu $a0, $a0, 0x50 -/* 0F6BB8 7F0C41C8 0C000FDD */ jal viGetViewTop -/* 0F6BBC 7F0C41CC AFA400CC */ sw $a0, 0xcc($sp) -/* 0F6BC0 7F0C41D0 8FAB00BC */ lw $t3, 0xbc($sp) -/* 0F6BC4 7F0C41D4 000B6843 */ sra $t5, $t3, 1 -/* 0F6BC8 7F0C41D8 004D7823 */ subu $t7, $v0, $t5 -/* 0F6BCC 7F0C41DC 25EE002D */ addiu $t6, $t7, 0x2d -/* 0F6BD0 7F0C41E0 0C000F9B */ jal viGetX -/* 0F6BD4 7F0C41E4 AFAE00C8 */ sw $t6, 0xc8($sp) -/* 0F6BD8 7F0C41E8 00028400 */ sll $s0, $v0, 0x10 -/* 0F6BDC 7F0C41EC 0010C403 */ sra $t8, $s0, 0x10 -/* 0F6BE0 7F0C41F0 0C000F9F */ jal viGetY -/* 0F6BE4 7F0C41F4 03008025 */ move $s0, $t8 -/* 0F6BE8 7F0C41F8 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0F6BEC 7F0C41FC 3C198004 */ lui $t9, %hi(ptrFontBankGothic) # $t9, 0x8004 -/* 0F6BF0 7F0C4200 8F39AAFC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0F6BF4 7F0C4204 8D8CAB00 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F6BF8 7F0C4208 3C0B00FF */ lui $t3, (0x00FF00B0 >> 16) # lui $t3, 0xff -/* 0F6BFC 7F0C420C 356B00B0 */ ori $t3, (0x00FF00B0 & 0xFFFF) # ori $t3, $t3, 0xb0 -/* 0F6C00 7F0C4210 AFAB0018 */ sw $t3, 0x18($sp) -/* 0F6C04 7F0C4214 02202025 */ move $a0, $s1 -/* 0F6C08 7F0C4218 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F6C0C 7F0C421C 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F6C10 7F0C4220 27A700AC */ addiu $a3, $sp, 0xac -/* 0F6C14 7F0C4224 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F6C18 7F0C4228 AFA20020 */ sw $v0, 0x20($sp) -/* 0F6C1C 7F0C422C AFA00024 */ sw $zero, 0x24($sp) -/* 0F6C20 7F0C4230 AFA00028 */ sw $zero, 0x28($sp) -/* 0F6C24 7F0C4234 AFB90014 */ sw $t9, 0x14($sp) -/* 0F6C28 7F0C4238 0FC2B35F */ jal textRender -/* 0F6C2C 7F0C423C AFAC0010 */ sw $t4, 0x10($sp) -/* 0F6C30 7F0C4240 00408825 */ move $s1, $v0 -.L7F0C4244: -/* 0F6C34 7F0C4244 0FC304AE */ jal langGet -/* 0F6C38 7F0C4248 3404A01C */ li $a0, 40988 -/* 0F6C3C 7F0C424C 3404A01D */ li $a0, 40989 -/* 0F6C40 7F0C4250 0FC304AE */ jal langGet -/* 0F6C44 7F0C4254 AFA2004C */ sw $v0, 0x4c($sp) -/* 0F6C48 7F0C4258 8FA700D4 */ lw $a3, 0xd4($sp) -/* 0F6C4C 7F0C425C 3C058005 */ lui $a1, %hi(ascii_pnum_KILLS) # $a1, 0x8005 -/* 0F6C50 7F0C4260 24A507F0 */ addiu $a1, %lo(ascii_pnum_KILLS) # addiu $a1, $a1, 0x7f0 -/* 0F6C54 7F0C4264 8FA6004C */ lw $a2, 0x4c($sp) -/* 0F6C58 7F0C4268 27A400AC */ addiu $a0, $sp, 0xac -/* 0F6C5C 7F0C426C AFA20010 */ sw $v0, 0x10($sp) -/* 0F6C60 7F0C4270 0C00283D */ jal sprintf -/* 0F6C64 7F0C4274 24E70001 */ addiu $a3, $a3, 1 -/* 0F6C68 7F0C4278 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0F6C6C 7F0C427C 8DADAAFC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0F6C70 7F0C4280 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F6C74 7F0C4284 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F6C78 7F0C4288 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F6C7C 7F0C428C 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F6C80 7F0C4290 27A600AC */ addiu $a2, $sp, 0xac -/* 0F6C84 7F0C4294 AFA00014 */ sw $zero, 0x14($sp) -/* 0F6C88 7F0C4298 0FC2B713 */ jal textMeasure -/* 0F6C8C 7F0C429C AFAD0010 */ sw $t5, 0x10($sp) -/* 0F6C90 7F0C42A0 0C000FD9 */ jal viGetViewLeft -/* 0F6C94 7F0C42A4 00000000 */ nop -/* 0F6C98 7F0C42A8 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0F6C9C 7F0C42AC 8FB800C0 */ lw $t8, 0xc0($sp) -/* 0F6CA0 7F0C42B0 004F7021 */ addu $t6, $v0, $t7 -/* 0F6CA4 7F0C42B4 00186043 */ sra $t4, $t8, 1 -/* 0F6CA8 7F0C42B8 01CC2023 */ subu $a0, $t6, $t4 -/* 0F6CAC 7F0C42BC 24840050 */ addiu $a0, $a0, 0x50 -/* 0F6CB0 7F0C42C0 0C000FDD */ jal viGetViewTop -/* 0F6CB4 7F0C42C4 AFA400CC */ sw $a0, 0xcc($sp) -/* 0F6CB8 7F0C42C8 8FB900BC */ lw $t9, 0xbc($sp) -/* 0F6CBC 7F0C42CC 00195843 */ sra $t3, $t9, 1 -/* 0F6CC0 7F0C42D0 004B6823 */ subu $t5, $v0, $t3 -/* 0F6CC4 7F0C42D4 25AF003D */ addiu $t7, $t5, 0x3d -/* 0F6CC8 7F0C42D8 0C000F9B */ jal viGetX -/* 0F6CCC 7F0C42DC AFAF00C8 */ sw $t7, 0xc8($sp) -/* 0F6CD0 7F0C42E0 00028400 */ sll $s0, $v0, 0x10 -/* 0F6CD4 7F0C42E4 0010C403 */ sra $t8, $s0, 0x10 -/* 0F6CD8 7F0C42E8 0C000F9F */ jal viGetY -/* 0F6CDC 7F0C42EC 03008025 */ move $s0, $t8 -/* 0F6CE0 7F0C42F0 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) # $t6, 0x8004 -/* 0F6CE4 7F0C42F4 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) # $t4, 0x8004 -/* 0F6CE8 7F0C42F8 8D8CAAFC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0F6CEC 7F0C42FC 8DCEAB00 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0F6CF0 7F0C4300 3C1900FF */ lui $t9, (0x00FF00B0 >> 16) # lui $t9, 0xff -/* 0F6CF4 7F0C4304 373900B0 */ ori $t9, (0x00FF00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0F6CF8 7F0C4308 AFB90018 */ sw $t9, 0x18($sp) -/* 0F6CFC 7F0C430C 02202025 */ move $a0, $s1 -/* 0F6D00 7F0C4310 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F6D04 7F0C4314 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F6D08 7F0C4318 27A700AC */ addiu $a3, $sp, 0xac -/* 0F6D0C 7F0C431C AFB0001C */ sw $s0, 0x1c($sp) -/* 0F6D10 7F0C4320 AFA20020 */ sw $v0, 0x20($sp) -/* 0F6D14 7F0C4324 AFA00024 */ sw $zero, 0x24($sp) -/* 0F6D18 7F0C4328 AFA00028 */ sw $zero, 0x28($sp) -/* 0F6D1C 7F0C432C AFAC0014 */ sw $t4, 0x14($sp) -/* 0F6D20 7F0C4330 0FC2B35F */ jal textRender -/* 0F6D24 7F0C4334 AFAE0010 */ sw $t6, 0x10($sp) -/* 0F6D28 7F0C4338 8FAB00D0 */ lw $t3, 0xd0($sp) -/* 0F6D2C 7F0C433C 00408825 */ move $s1, $v0 -/* 0F6D30 7F0C4340 24010002 */ li $at, 2 -/* 0F6D34 7F0C4344 15610033 */ bne $t3, $at, .L7F0C4414 -/* 0F6D38 7F0C4348 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0F6D3C 7F0C434C 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0F6D40 7F0C4350 50400018 */ beql $v0, $zero, .L7F0C43B4 -/* 0F6D44 7F0C4354 24010001 */ li $at, 1 -/* 0F6D48 7F0C4358 0C000FD9 */ jal viGetViewLeft -/* 0F6D4C 7F0C435C 00000000 */ nop -/* 0F6D50 7F0C4360 00028400 */ sll $s0, $v0, 0x10 -/* 0F6D54 7F0C4364 00106C03 */ sra $t5, $s0, 0x10 -/* 0F6D58 7F0C4368 0C000FDD */ jal viGetViewTop -/* 0F6D5C 7F0C436C 01A08025 */ move $s0, $t5 -/* 0F6D60 7F0C4370 8FB800D4 */ lw $t8, 0xd4($sp) -/* 0F6D64 7F0C4374 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0F6D68 7F0C4378 3C078007 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0F6D6C 7F0C437C 001870C0 */ sll $t6, $t8, 3 -/* 0F6D70 7F0C4380 01D87023 */ subu $t6, $t6, $t8 -/* 0F6D74 7F0C4384 000E7100 */ sll $t6, $t6, 4 -/* 0F6D78 7F0C4388 00EE3821 */ addu $a3, $a3, $t6 -/* 0F6D7C 7F0C438C 020F2821 */ addu $a1, $s0, $t7 -/* 0F6D80 7F0C4390 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F6D84 7F0C4394 8CE78A24 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0F6D88 7F0C4398 02202025 */ move $a0, $s1 -/* 0F6D8C 7F0C439C 2446004E */ addiu $a2, $v0, 0x4e -/* 0F6D90 7F0C43A0 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F6D94 7F0C43A4 AFA00010 */ sw $zero, 0x10($sp) -/* 0F6D98 7F0C43A8 00408825 */ move $s1, $v0 -/* 0F6D9C 7F0C43AC 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0F6DA0 7F0C43B0 24010001 */ li $at, 1 -.L7F0C43B4: -/* 0F6DA4 7F0C43B4 1041007C */ beq $v0, $at, .L7F0C45A8 -/* 0F6DA8 7F0C43B8 000260C0 */ sll $t4, $v0, 3 -/* 0F6DAC 7F0C43BC 01826023 */ subu $t4, $t4, $v0 -/* 0F6DB0 7F0C43C0 3C198007 */ lui $t9, %hi(g_playerPlayerData) # $t9, 0x8007 -/* 0F6DB4 7F0C43C4 27398A00 */ addiu $t9, %lo(g_playerPlayerData) # addiu $t9, $t9, -0x7600 -/* 0F6DB8 7F0C43C8 000C6100 */ sll $t4, $t4, 4 -/* 0F6DBC 7F0C43CC 01995821 */ addu $t3, $t4, $t9 -/* 0F6DC0 7F0C43D0 0C000FD9 */ jal viGetViewLeft -/* 0F6DC4 7F0C43D4 AFAB0044 */ sw $t3, 0x44($sp) -/* 0F6DC8 7F0C43D8 00028400 */ sll $s0, $v0, 0x10 -/* 0F6DCC 7F0C43DC 00106C03 */ sra $t5, $s0, 0x10 -/* 0F6DD0 7F0C43E0 0C000FDD */ jal viGetViewTop -/* 0F6DD4 7F0C43E4 01A08025 */ move $s0, $t5 -/* 0F6DD8 7F0C43E8 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0F6DDC 7F0C43EC 8FB80044 */ lw $t8, 0x44($sp) -/* 0F6DE0 7F0C43F0 02202025 */ move $a0, $s1 -/* 0F6DE4 7F0C43F4 020F2821 */ addu $a1, $s0, $t7 -/* 0F6DE8 7F0C43F8 8F070028 */ lw $a3, 0x28($t8) -/* 0F6DEC 7F0C43FC AFA00010 */ sw $zero, 0x10($sp) -/* 0F6DF0 7F0C4400 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F6DF4 7F0C4404 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F6DF8 7F0C4408 2446005E */ addiu $a2, $v0, 0x5e -/* 0F6DFC 7F0C440C 10000066 */ b .L7F0C45A8 -/* 0F6E00 7F0C4410 00408825 */ move $s1, $v0 -.L7F0C4414: -/* 0F6E04 7F0C4414 50400018 */ beql $v0, $zero, .L7F0C4478 -/* 0F6E08 7F0C4418 24010001 */ li $at, 1 -/* 0F6E0C 7F0C441C 0C000FD9 */ jal viGetViewLeft -/* 0F6E10 7F0C4420 00000000 */ nop -/* 0F6E14 7F0C4424 00028400 */ sll $s0, $v0, 0x10 -/* 0F6E18 7F0C4428 00107403 */ sra $t6, $s0, 0x10 -/* 0F6E1C 7F0C442C 0C000FDD */ jal viGetViewTop -/* 0F6E20 7F0C4430 01C08025 */ move $s0, $t6 -/* 0F6E24 7F0C4434 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0F6E28 7F0C4438 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0F6E2C 7F0C443C 3C078007 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0F6E30 7F0C4440 001958C0 */ sll $t3, $t9, 3 -/* 0F6E34 7F0C4444 01795823 */ subu $t3, $t3, $t9 -/* 0F6E38 7F0C4448 000B5900 */ sll $t3, $t3, 4 -/* 0F6E3C 7F0C444C 00EB3821 */ addu $a3, $a3, $t3 -/* 0F6E40 7F0C4450 020C2821 */ addu $a1, $s0, $t4 -/* 0F6E44 7F0C4454 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F6E48 7F0C4458 8CE78A24 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0F6E4C 7F0C445C 02202025 */ move $a0, $s1 -/* 0F6E50 7F0C4460 2446004E */ addiu $a2, $v0, 0x4e -/* 0F6E54 7F0C4464 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F6E58 7F0C4468 AFA00010 */ sw $zero, 0x10($sp) -/* 0F6E5C 7F0C446C 00408825 */ move $s1, $v0 -/* 0F6E60 7F0C4470 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0F6E64 7F0C4474 24010001 */ li $at, 1 -.L7F0C4478: -/* 0F6E68 7F0C4478 10410017 */ beq $v0, $at, .L7F0C44D8 -/* 0F6E6C 7F0C447C 000268C0 */ sll $t5, $v0, 3 -/* 0F6E70 7F0C4480 01A26823 */ subu $t5, $t5, $v0 -/* 0F6E74 7F0C4484 3C0F8007 */ lui $t7, %hi(g_playerPlayerData) # $t7, 0x8007 -/* 0F6E78 7F0C4488 25EF8A00 */ addiu $t7, %lo(g_playerPlayerData) # addiu $t7, $t7, -0x7600 -/* 0F6E7C 7F0C448C 000D6900 */ sll $t5, $t5, 4 -/* 0F6E80 7F0C4490 01AFC021 */ addu $t8, $t5, $t7 -/* 0F6E84 7F0C4494 0C000FD9 */ jal viGetViewLeft -/* 0F6E88 7F0C4498 AFB80044 */ sw $t8, 0x44($sp) -/* 0F6E8C 7F0C449C 00028400 */ sll $s0, $v0, 0x10 -/* 0F6E90 7F0C44A0 00107403 */ sra $t6, $s0, 0x10 -/* 0F6E94 7F0C44A4 0C000FDD */ jal viGetViewTop -/* 0F6E98 7F0C44A8 01C08025 */ move $s0, $t6 -/* 0F6E9C 7F0C44AC 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0F6EA0 7F0C44B0 8FB90044 */ lw $t9, 0x44($sp) -/* 0F6EA4 7F0C44B4 02202025 */ move $a0, $s1 -/* 0F6EA8 7F0C44B8 020C2821 */ addu $a1, $s0, $t4 -/* 0F6EAC 7F0C44BC 8F270028 */ lw $a3, 0x28($t9) -/* 0F6EB0 7F0C44C0 AFA00010 */ sw $zero, 0x10($sp) -/* 0F6EB4 7F0C44C4 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F6EB8 7F0C44C8 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F6EBC 7F0C44CC 2446004E */ addiu $a2, $v0, 0x4e -/* 0F6EC0 7F0C44D0 00408825 */ move $s1, $v0 -/* 0F6EC4 7F0C44D4 8FA200D4 */ lw $v0, 0xd4($sp) -.L7F0C44D8: -/* 0F6EC8 7F0C44D8 24010002 */ li $at, 2 -/* 0F6ECC 7F0C44DC 10410017 */ beq $v0, $at, .L7F0C453C -/* 0F6ED0 7F0C44E0 000258C0 */ sll $t3, $v0, 3 -/* 0F6ED4 7F0C44E4 01625823 */ subu $t3, $t3, $v0 -/* 0F6ED8 7F0C44E8 3C0D8007 */ lui $t5, %hi(g_playerPlayerData) # $t5, 0x8007 -/* 0F6EDC 7F0C44EC 25AD8A00 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x7600 -/* 0F6EE0 7F0C44F0 000B5900 */ sll $t3, $t3, 4 -/* 0F6EE4 7F0C44F4 016D7821 */ addu $t7, $t3, $t5 -/* 0F6EE8 7F0C44F8 0C000FD9 */ jal viGetViewLeft -/* 0F6EEC 7F0C44FC AFAF0044 */ sw $t7, 0x44($sp) -/* 0F6EF0 7F0C4500 00028400 */ sll $s0, $v0, 0x10 -/* 0F6EF4 7F0C4504 0010C403 */ sra $t8, $s0, 0x10 -/* 0F6EF8 7F0C4508 0C000FDD */ jal viGetViewTop -/* 0F6EFC 7F0C450C 03008025 */ move $s0, $t8 -/* 0F6F00 7F0C4510 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0F6F04 7F0C4514 8FAC0044 */ lw $t4, 0x44($sp) -/* 0F6F08 7F0C4518 02202025 */ move $a0, $s1 -/* 0F6F0C 7F0C451C 020E2821 */ addu $a1, $s0, $t6 -/* 0F6F10 7F0C4520 8D87002C */ lw $a3, 0x2c($t4) -/* 0F6F14 7F0C4524 AFA00010 */ sw $zero, 0x10($sp) -/* 0F6F18 7F0C4528 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F6F1C 7F0C452C 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F6F20 7F0C4530 2446005E */ addiu $a2, $v0, 0x5e -/* 0F6F24 7F0C4534 00408825 */ move $s1, $v0 -/* 0F6F28 7F0C4538 8FA200D4 */ lw $v0, 0xd4($sp) -.L7F0C453C: -/* 0F6F2C 7F0C453C 8FB900D0 */ lw $t9, 0xd0($sp) -/* 0F6F30 7F0C4540 24010004 */ li $at, 4 -/* 0F6F34 7F0C4544 17210018 */ bne $t9, $at, .L7F0C45A8 -/* 0F6F38 7F0C4548 24010003 */ li $at, 3 -/* 0F6F3C 7F0C454C 10410016 */ beq $v0, $at, .L7F0C45A8 -/* 0F6F40 7F0C4550 000258C0 */ sll $t3, $v0, 3 -/* 0F6F44 7F0C4554 01625823 */ subu $t3, $t3, $v0 -/* 0F6F48 7F0C4558 3C0D8007 */ lui $t5, %hi(g_playerPlayerData) # $t5, 0x8007 -/* 0F6F4C 7F0C455C 25AD8A00 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x7600 -/* 0F6F50 7F0C4560 000B5900 */ sll $t3, $t3, 4 -/* 0F6F54 7F0C4564 016D7821 */ addu $t7, $t3, $t5 -/* 0F6F58 7F0C4568 0C000FD9 */ jal viGetViewLeft -/* 0F6F5C 7F0C456C AFAF0044 */ sw $t7, 0x44($sp) -/* 0F6F60 7F0C4570 00028400 */ sll $s0, $v0, 0x10 -/* 0F6F64 7F0C4574 0010C403 */ sra $t8, $s0, 0x10 -/* 0F6F68 7F0C4578 0C000FDD */ jal viGetViewTop -/* 0F6F6C 7F0C457C 03008025 */ move $s0, $t8 -/* 0F6F70 7F0C4580 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 0F6F74 7F0C4584 8FAC0044 */ lw $t4, 0x44($sp) -/* 0F6F78 7F0C4588 02202025 */ move $a0, $s1 -/* 0F6F7C 7F0C458C 020E2821 */ addu $a1, $s0, $t6 -/* 0F6F80 7F0C4590 8D870030 */ lw $a3, 0x30($t4) -/* 0F6F84 7F0C4594 AFA00010 */ sw $zero, 0x10($sp) -/* 0F6F88 7F0C4598 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F6F8C 7F0C459C 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F6F90 7F0C45A0 2446005E */ addiu $a2, $v0, 0x5e -/* 0F6F94 7F0C45A4 00408825 */ move $s1, $v0 -.L7F0C45A8: -/* 0F6F98 7F0C45A8 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0F6F9C 7F0C45AC 1000029D */ b .L7F0C5024 -/* 0F6FA0 7F0C45B0 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -.L7F0C45B4: -/* 0F6FA4 7F0C45B4 24010001 */ li $at, 1 -/* 0F6FA8 7F0C45B8 144101A9 */ bne $v0, $at, .L7F0C4C60 -/* 0F6FAC 7F0C45BC 3C048007 */ lui $a0, %hi(g_gameOverFlag) # $a0, 0x8007 -/* 0F6FB0 7F0C45C0 8C843AE4 */ lw $a0, %lo(g_gameOverFlag)($a0) -/* 0F6FB4 7F0C45C4 2C990001 */ sltiu $t9, $a0, 1 -/* 0F6FB8 7F0C45C8 13200005 */ beqz $t9, .L7F0C45E0 -/* 0F6FBC 7F0C45CC 03202025 */ move $a0, $t9 -/* 0F6FC0 7F0C45D0 3C048007 */ lui $a0, %hi(g_stopPlayFlag) # $a0, 0x8007 -/* 0F6FC4 7F0C45D4 8C843AE0 */ lw $a0, %lo(g_stopPlayFlag)($a0) -/* 0F6FC8 7F0C45D8 2C8B0001 */ sltiu $t3, $a0, 1 -/* 0F6FCC 7F0C45DC 01602025 */ move $a0, $t3 -.L7F0C45E0: -/* 0F6FD0 7F0C45E0 0FC30D0F */ jal mpwatchShouldDisplayRank -/* 0F6FD4 7F0C45E4 00000000 */ nop -/* 0F6FD8 7F0C45E8 10400034 */ beqz $v0, .L7F0C46BC -/* 0F6FDC 7F0C45EC 27A400AC */ addiu $a0, $sp, 0xac -/* 0F6FE0 7F0C45F0 0FC30C5D */ jal write_playerrank_to_buffer -/* 0F6FE4 7F0C45F4 8FA500D4 */ lw $a1, 0xd4($sp) -/* 0F6FE8 7F0C45F8 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0F6FEC 7F0C45FC 8DADAAFC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0F6FF0 7F0C4600 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F6FF4 7F0C4604 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F6FF8 7F0C4608 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F6FFC 7F0C460C 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F7000 7F0C4610 27A600AC */ addiu $a2, $sp, 0xac -/* 0F7004 7F0C4614 AFA00014 */ sw $zero, 0x14($sp) -/* 0F7008 7F0C4618 0FC2B713 */ jal textMeasure -/* 0F700C 7F0C461C AFAD0010 */ sw $t5, 0x10($sp) -/* 0F7010 7F0C4620 0C000FD9 */ jal viGetViewLeft -/* 0F7014 7F0C4624 00000000 */ nop -/* 0F7018 7F0C4628 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0F701C 7F0C462C 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0F7020 7F0C4630 004FC021 */ addu $t8, $v0, $t7 -/* 0F7024 7F0C4634 000E6043 */ sra $t4, $t6, 1 -/* 0F7028 7F0C4638 030C2023 */ subu $a0, $t8, $t4 -/* 0F702C 7F0C463C 24840050 */ addiu $a0, $a0, 0x50 -/* 0F7030 7F0C4640 0C000FDD */ jal viGetViewTop -/* 0F7034 7F0C4644 AFA400CC */ sw $a0, 0xcc($sp) -/* 0F7038 7F0C4648 8FB900BC */ lw $t9, 0xbc($sp) -/* 0F703C 7F0C464C 00195843 */ sra $t3, $t9, 1 -/* 0F7040 7F0C4650 004B6823 */ subu $t5, $v0, $t3 -/* 0F7044 7F0C4654 25AF002D */ addiu $t7, $t5, 0x2d -/* 0F7048 7F0C4658 0C000F9B */ jal viGetX -/* 0F704C 7F0C465C AFAF00C8 */ sw $t7, 0xc8($sp) -/* 0F7050 7F0C4660 00028400 */ sll $s0, $v0, 0x10 -/* 0F7054 7F0C4664 00107403 */ sra $t6, $s0, 0x10 -/* 0F7058 7F0C4668 0C000F9F */ jal viGetY -/* 0F705C 7F0C466C 01C08025 */ move $s0, $t6 -/* 0F7060 7F0C4670 3C188004 */ lui $t8, %hi(ptrFontBankGothicChars) # $t8, 0x8004 -/* 0F7064 7F0C4674 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) # $t4, 0x8004 -/* 0F7068 7F0C4678 8D8CAAFC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0F706C 7F0C467C 8F18AB00 */ lw $t8, %lo(ptrFontBankGothicChars)($t8) -/* 0F7070 7F0C4680 3C1900FF */ lui $t9, (0x00FF00B0 >> 16) # lui $t9, 0xff -/* 0F7074 7F0C4684 373900B0 */ ori $t9, (0x00FF00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0F7078 7F0C4688 AFB90018 */ sw $t9, 0x18($sp) -/* 0F707C 7F0C468C 02202025 */ move $a0, $s1 -/* 0F7080 7F0C4690 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F7084 7F0C4694 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F7088 7F0C4698 27A700AC */ addiu $a3, $sp, 0xac -/* 0F708C 7F0C469C AFB0001C */ sw $s0, 0x1c($sp) -/* 0F7090 7F0C46A0 AFA20020 */ sw $v0, 0x20($sp) -/* 0F7094 7F0C46A4 AFA00024 */ sw $zero, 0x24($sp) -/* 0F7098 7F0C46A8 AFA00028 */ sw $zero, 0x28($sp) -/* 0F709C 7F0C46AC AFAC0014 */ sw $t4, 0x14($sp) -/* 0F70A0 7F0C46B0 0FC2B35F */ jal textRender -/* 0F70A4 7F0C46B4 AFB80010 */ sw $t8, 0x10($sp) -/* 0F70A8 7F0C46B8 00408825 */ move $s1, $v0 -.L7F0C46BC: -/* 0F70AC 7F0C46BC 0FC304AE */ jal langGet -/* 0F70B0 7F0C46C0 3404A01C */ li $a0, 40988 -/* 0F70B4 7F0C46C4 3404A01E */ li $a0, 40990 -/* 0F70B8 7F0C46C8 0FC304AE */ jal langGet -/* 0F70BC 7F0C46CC AFA2004C */ sw $v0, 0x4c($sp) -/* 0F70C0 7F0C46D0 8FA700D4 */ lw $a3, 0xd4($sp) -/* 0F70C4 7F0C46D4 3C058005 */ lui $a1, %hi(ascii_pnum_LOSSES) # $a1, 0x8005 -/* 0F70C8 7F0C46D8 24A507F8 */ addiu $a1, %lo(ascii_pnum_LOSSES) # addiu $a1, $a1, 0x7f8 -/* 0F70CC 7F0C46DC 8FA6004C */ lw $a2, 0x4c($sp) -/* 0F70D0 7F0C46E0 27A400AC */ addiu $a0, $sp, 0xac -/* 0F70D4 7F0C46E4 AFA20010 */ sw $v0, 0x10($sp) -/* 0F70D8 7F0C46E8 0C00283D */ jal sprintf -/* 0F70DC 7F0C46EC 24E70001 */ addiu $a3, $a3, 1 -/* 0F70E0 7F0C46F0 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0F70E4 7F0C46F4 8D6BAAFC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0F70E8 7F0C46F8 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F70EC 7F0C46FC 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F70F0 7F0C4700 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F70F4 7F0C4704 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F70F8 7F0C4708 27A600AC */ addiu $a2, $sp, 0xac -/* 0F70FC 7F0C470C AFA00014 */ sw $zero, 0x14($sp) -/* 0F7100 7F0C4710 0FC2B713 */ jal textMeasure -/* 0F7104 7F0C4714 AFAB0010 */ sw $t3, 0x10($sp) -/* 0F7108 7F0C4718 0C000FD9 */ jal viGetViewLeft -/* 0F710C 7F0C471C 00000000 */ nop -/* 0F7110 7F0C4720 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0F7114 7F0C4724 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0F7118 7F0C4728 004D7821 */ addu $t7, $v0, $t5 -/* 0F711C 7F0C472C 000EC043 */ sra $t8, $t6, 1 -/* 0F7120 7F0C4730 01F82023 */ subu $a0, $t7, $t8 -/* 0F7124 7F0C4734 24840050 */ addiu $a0, $a0, 0x50 -/* 0F7128 7F0C4738 0C000FDD */ jal viGetViewTop -/* 0F712C 7F0C473C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F7130 7F0C4740 8FAC00BC */ lw $t4, 0xbc($sp) -/* 0F7134 7F0C4744 000CC843 */ sra $t9, $t4, 1 -/* 0F7138 7F0C4748 00595823 */ subu $t3, $v0, $t9 -/* 0F713C 7F0C474C 256D003D */ addiu $t5, $t3, 0x3d -/* 0F7140 7F0C4750 0C000F9B */ jal viGetX -/* 0F7144 7F0C4754 AFAD00C8 */ sw $t5, 0xc8($sp) -/* 0F7148 7F0C4758 00028400 */ sll $s0, $v0, 0x10 -/* 0F714C 7F0C475C 00107403 */ sra $t6, $s0, 0x10 -/* 0F7150 7F0C4760 0C000F9F */ jal viGetY -/* 0F7154 7F0C4764 01C08025 */ move $s0, $t6 -/* 0F7158 7F0C4768 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) # $t7, 0x8004 -/* 0F715C 7F0C476C 3C188004 */ lui $t8, %hi(ptrFontBankGothic) # $t8, 0x8004 -/* 0F7160 7F0C4770 8F18AAFC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0F7164 7F0C4774 8DEFAB00 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0F7168 7F0C4778 3C0CFF40 */ lui $t4, (0xFF4040B0 >> 16) # lui $t4, 0xff40 -/* 0F716C 7F0C477C 358C40B0 */ ori $t4, (0xFF4040B0 & 0xFFFF) # ori $t4, $t4, 0x40b0 -/* 0F7170 7F0C4780 AFAC0018 */ sw $t4, 0x18($sp) -/* 0F7174 7F0C4784 02202025 */ move $a0, $s1 -/* 0F7178 7F0C4788 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F717C 7F0C478C 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F7180 7F0C4790 27A700AC */ addiu $a3, $sp, 0xac -/* 0F7184 7F0C4794 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F7188 7F0C4798 AFA20020 */ sw $v0, 0x20($sp) -/* 0F718C 7F0C479C AFA00024 */ sw $zero, 0x24($sp) -/* 0F7190 7F0C47A0 AFA00028 */ sw $zero, 0x28($sp) -/* 0F7194 7F0C47A4 AFB80014 */ sw $t8, 0x14($sp) -/* 0F7198 7F0C47A8 0FC2B35F */ jal textRender -/* 0F719C 7F0C47AC AFAF0010 */ sw $t7, 0x10($sp) -/* 0F71A0 7F0C47B0 8FB900D0 */ lw $t9, 0xd0($sp) -/* 0F71A4 7F0C47B4 24010002 */ li $at, 2 -/* 0F71A8 7F0C47B8 00408825 */ move $s1, $v0 -/* 0F71AC 7F0C47BC 17210062 */ bne $t9, $at, .L7F0C4948 -/* 0F71B0 7F0C47C0 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0F71B4 7F0C47C4 8FA200D4 */ lw $v0, 0xd4($sp) -/* 0F71B8 7F0C47C8 3C188007 */ lui $t8, %hi(g_playerPlayerData + 0x24) # $t8, 0x8007 -/* 0F71BC 7F0C47CC 10400016 */ beqz $v0, .L7F0C4828 -/* 0F71C0 7F0C47D0 00000000 */ nop -/* 0F71C4 7F0C47D4 0C000FD9 */ jal viGetViewLeft -/* 0F71C8 7F0C47D8 00000000 */ nop -/* 0F71CC 7F0C47DC 00028400 */ sll $s0, $v0, 0x10 -/* 0F71D0 7F0C47E0 00105C03 */ sra $t3, $s0, 0x10 -/* 0F71D4 7F0C47E4 0C000FDD */ jal viGetViewTop -/* 0F71D8 7F0C47E8 01608025 */ move $s0, $t3 -/* 0F71DC 7F0C47EC 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0F71E0 7F0C47F0 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0F71E4 7F0C47F4 3C078007 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0F71E8 7F0C47F8 000E7880 */ sll $t7, $t6, 2 -/* 0F71EC 7F0C47FC 00EF3821 */ addu $a3, $a3, $t7 -/* 0F71F0 7F0C4800 020D2821 */ addu $a1, $s0, $t5 -/* 0F71F4 7F0C4804 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F71F8 7F0C4808 8CE78A24 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0F71FC 7F0C480C 02202025 */ move $a0, $s1 -/* 0F7200 7F0C4810 2446004E */ addiu $a2, $v0, 0x4e -/* 0F7204 7F0C4814 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F7208 7F0C4818 AFA00010 */ sw $zero, 0x10($sp) -/* 0F720C 7F0C481C 00408825 */ move $s1, $v0 -/* 0F7210 7F0C4820 10000019 */ b .L7F0C4888 -/* 0F7214 7F0C4824 8FA200D4 */ lw $v0, 0xd4($sp) -.L7F0C4828: -/* 0F7218 7F0C4828 8F188A24 */ lw $t8, %lo(g_playerPlayerData + 0x24)($t8) -/* 0F721C 7F0C482C 5B000017 */ blezl $t8, .L7F0C488C -/* 0F7220 7F0C4830 24010001 */ li $at, 1 -/* 0F7224 7F0C4834 0C000FD9 */ jal viGetViewLeft -/* 0F7228 7F0C4838 00000000 */ nop -/* 0F722C 7F0C483C 00028400 */ sll $s0, $v0, 0x10 -/* 0F7230 7F0C4840 00106403 */ sra $t4, $s0, 0x10 -/* 0F7234 7F0C4844 0C000FDD */ jal viGetViewTop -/* 0F7238 7F0C4848 01808025 */ move $s0, $t4 -/* 0F723C 7F0C484C 8FAB00D4 */ lw $t3, 0xd4($sp) -/* 0F7240 7F0C4850 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F7244 7F0C4854 3C078007 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0F7248 7F0C4858 000B6880 */ sll $t5, $t3, 2 -/* 0F724C 7F0C485C 00ED3821 */ addu $a3, $a3, $t5 -/* 0F7250 7F0C4860 240E0003 */ li $t6, 3 -/* 0F7254 7F0C4864 02192821 */ addu $a1, $s0, $t9 -/* 0F7258 7F0C4868 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F725C 7F0C486C AFAE0010 */ sw $t6, 0x10($sp) -/* 0F7260 7F0C4870 8CE78A24 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0F7264 7F0C4874 02202025 */ move $a0, $s1 -/* 0F7268 7F0C4878 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F726C 7F0C487C 2446004E */ addiu $a2, $v0, 0x4e -/* 0F7270 7F0C4880 00408825 */ move $s1, $v0 -/* 0F7274 7F0C4884 8FA200D4 */ lw $v0, 0xd4($sp) -.L7F0C4888: -/* 0F7278 7F0C4888 24010001 */ li $at, 1 -.L7F0C488C: -/* 0F727C 7F0C488C 10410016 */ beq $v0, $at, .L7F0C48E8 -/* 0F7280 7F0C4890 3C0E8007 */ lui $t6, %hi(g_playerPlayerData+0x70 + 0x28) # $t6, 0x8007 -/* 0F7284 7F0C4894 3C188007 */ lui $t8, %hi(g_playerPlayerData) # $t8, 0x8007 -/* 0F7288 7F0C4898 27188A00 */ addiu $t8, %lo(g_playerPlayerData) # addiu $t8, $t8, -0x7600 -/* 0F728C 7F0C489C 00027880 */ sll $t7, $v0, 2 -/* 0F7290 7F0C48A0 01F86021 */ addu $t4, $t7, $t8 -/* 0F7294 7F0C48A4 0C000FD9 */ jal viGetViewLeft -/* 0F7298 7F0C48A8 AFAC0044 */ sw $t4, 0x44($sp) -/* 0F729C 7F0C48AC 00028400 */ sll $s0, $v0, 0x10 -/* 0F72A0 7F0C48B0 0010CC03 */ sra $t9, $s0, 0x10 -/* 0F72A4 7F0C48B4 0C000FDD */ jal viGetViewTop -/* 0F72A8 7F0C48B8 03208025 */ move $s0, $t9 -/* 0F72AC 7F0C48BC 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0F72B0 7F0C48C0 8FAD0044 */ lw $t5, 0x44($sp) -/* 0F72B4 7F0C48C4 02202025 */ move $a0, $s1 -/* 0F72B8 7F0C48C8 020B2821 */ addu $a1, $s0, $t3 -/* 0F72BC 7F0C48CC 8DA70094 */ lw $a3, 0x94($t5) -/* 0F72C0 7F0C48D0 AFA00010 */ sw $zero, 0x10($sp) -/* 0F72C4 7F0C48D4 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F72C8 7F0C48D8 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F72CC 7F0C48DC 2446005E */ addiu $a2, $v0, 0x5e -/* 0F72D0 7F0C48E0 100000DC */ b .L7F0C4C54 -/* 0F72D4 7F0C48E4 00408825 */ move $s1, $v0 -.L7F0C48E8: -/* 0F72D8 7F0C48E8 8DCE8A98 */ lw $t6, %lo(g_playerPlayerData+0x70 + 0x28)($t6) -/* 0F72DC 7F0C48EC 3C188007 */ lui $t8, %hi(g_playerPlayerData) # $t8, 0x8007 -/* 0F72E0 7F0C48F0 27188A00 */ addiu $t8, %lo(g_playerPlayerData) # addiu $t8, $t8, -0x7600 -/* 0F72E4 7F0C48F4 19C000D7 */ blez $t6, .L7F0C4C54 -/* 0F72E8 7F0C48F8 00027880 */ sll $t7, $v0, 2 -/* 0F72EC 7F0C48FC 01F86021 */ addu $t4, $t7, $t8 -/* 0F72F0 7F0C4900 0C000FD9 */ jal viGetViewLeft -/* 0F72F4 7F0C4904 AFAC0044 */ sw $t4, 0x44($sp) -/* 0F72F8 7F0C4908 00028400 */ sll $s0, $v0, 0x10 -/* 0F72FC 7F0C490C 0010CC03 */ sra $t9, $s0, 0x10 -/* 0F7300 7F0C4910 0C000FDD */ jal viGetViewTop -/* 0F7304 7F0C4914 03208025 */ move $s0, $t9 -/* 0F7308 7F0C4918 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0F730C 7F0C491C 8FAD0044 */ lw $t5, 0x44($sp) -/* 0F7310 7F0C4920 240E0003 */ li $t6, 3 -/* 0F7314 7F0C4924 020B2821 */ addu $a1, $s0, $t3 -/* 0F7318 7F0C4928 8DA70094 */ lw $a3, 0x94($t5) -/* 0F731C 7F0C492C AFAE0010 */ sw $t6, 0x10($sp) -/* 0F7320 7F0C4930 24A50050 */ addiu $a1, $a1, 0x50 -/* 0F7324 7F0C4934 02202025 */ move $a0, $s1 -/* 0F7328 7F0C4938 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F732C 7F0C493C 2446005E */ addiu $a2, $v0, 0x5e -/* 0F7330 7F0C4940 100000C4 */ b .L7F0C4C54 -/* 0F7334 7F0C4944 00408825 */ move $s1, $v0 -.L7F0C4948: -/* 0F7338 7F0C4948 11E00015 */ beqz $t7, .L7F0C49A0 -/* 0F733C 7F0C494C 3C0D8007 */ lui $t5, %hi(g_playerPlayerData + 0x24) # $t5, 0x8007 -/* 0F7340 7F0C4950 0C000FD9 */ jal viGetViewLeft -/* 0F7344 7F0C4954 00000000 */ nop -/* 0F7348 7F0C4958 00028400 */ sll $s0, $v0, 0x10 -/* 0F734C 7F0C495C 0010C403 */ sra $t8, $s0, 0x10 -/* 0F7350 7F0C4960 0C000FDD */ jal viGetViewTop -/* 0F7354 7F0C4964 03008025 */ move $s0, $t8 -/* 0F7358 7F0C4968 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0F735C 7F0C496C 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0F7360 7F0C4970 3C078007 */ lui $a3, %hi(g_playerPlayerData+36) -/* 0F7364 7F0C4974 00195880 */ sll $t3, $t9, 2 -/* 0F7368 7F0C4978 00EB3821 */ addu $a3, $a3, $t3 -/* 0F736C 7F0C497C 020C2821 */ addu $a1, $s0, $t4 -/* 0F7370 7F0C4980 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F7374 7F0C4984 8CE78A24 */ lw $a3, %lo(g_playerPlayerData+36)($a3) -/* 0F7378 7F0C4988 02202025 */ move $a0, $s1 -/* 0F737C 7F0C498C 2446004E */ addiu $a2, $v0, 0x4e -/* 0F7380 7F0C4990 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F7384 7F0C4994 AFA00010 */ sw $zero, 0x10($sp) -/* 0F7388 7F0C4998 10000018 */ b .L7F0C49FC -/* 0F738C 7F0C499C 00408825 */ move $s1, $v0 -.L7F0C49A0: -/* 0F7390 7F0C49A0 8DAD8A24 */ lw $t5, %lo(g_playerPlayerData + 0x24)($t5) -/* 0F7394 7F0C49A4 59A00016 */ blezl $t5, .L7F0C4A00 -/* 0F7398 7F0C49A8 8FAB00D4 */ lw $t3, 0xd4($sp) -/* 0F739C 7F0C49AC 0C000FD9 */ jal viGetViewLeft -/* 0F73A0 7F0C49B0 00000000 */ nop -/* 0F73A4 7F0C49B4 00028400 */ sll $s0, $v0, 0x10 -/* 0F73A8 7F0C49B8 00107403 */ sra $t6, $s0, 0x10 -/* 0F73AC 7F0C49BC 0C000FDD */ jal viGetViewTop -/* 0F73B0 7F0C49C0 01C08025 */ move $s0, $t6 -/* 0F73B4 7F0C49C4 8FB800D4 */ lw $t8, 0xd4($sp) -/* 0F73B8 7F0C49C8 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0F73BC 7F0C49CC 3C078007 */ lui $a3, 0x8007 -/* 0F73C0 7F0C49D0 00186080 */ sll $t4, $t8, 2 -/* 0F73C4 7F0C49D4 00EC3821 */ addu $a3, $a3, $t4 -/* 0F73C8 7F0C49D8 24190003 */ li $t9, 3 -/* 0F73CC 7F0C49DC 020F2821 */ addu $a1, $s0, $t7 -/* 0F73D0 7F0C49E0 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F73D4 7F0C49E4 AFB90010 */ sw $t9, 0x10($sp) -/* 0F73D8 7F0C49E8 8CE78A24 */ lw $a3, -0x75dc($a3) -/* 0F73DC 7F0C49EC 02202025 */ move $a0, $s1 -/* 0F73E0 7F0C49F0 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F73E4 7F0C49F4 2446004E */ addiu $a2, $v0, 0x4e -/* 0F73E8 7F0C49F8 00408825 */ move $s1, $v0 -.L7F0C49FC: -/* 0F73EC 7F0C49FC 8FAB00D4 */ lw $t3, 0xd4($sp) -.L7F0C4A00: -/* 0F73F0 7F0C4A00 24010001 */ li $at, 1 -/* 0F73F4 7F0C4A04 3C0E8007 */ lui $t6, %hi(g_playerPlayerData) # $t6, 0x8007 -/* 0F73F8 7F0C4A08 11610014 */ beq $t3, $at, .L7F0C4A5C -/* 0F73FC 7F0C4A0C 000B6880 */ sll $t5, $t3, 2 -/* 0F7400 7F0C4A10 25CE8A00 */ addiu $t6, %lo(g_playerPlayerData) # addiu $t6, $t6, -0x7600 -/* 0F7404 7F0C4A14 01AE7821 */ addu $t7, $t5, $t6 -/* 0F7408 7F0C4A18 0C000FD9 */ jal viGetViewLeft -/* 0F740C 7F0C4A1C AFAF0044 */ sw $t7, 0x44($sp) -/* 0F7410 7F0C4A20 00028400 */ sll $s0, $v0, 0x10 -/* 0F7414 7F0C4A24 0010C403 */ sra $t8, $s0, 0x10 -/* 0F7418 7F0C4A28 0C000FDD */ jal viGetViewTop -/* 0F741C 7F0C4A2C 03008025 */ move $s0, $t8 -/* 0F7420 7F0C4A30 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0F7424 7F0C4A34 8FB90044 */ lw $t9, 0x44($sp) -/* 0F7428 7F0C4A38 02202025 */ move $a0, $s1 -/* 0F742C 7F0C4A3C 020C2821 */ addu $a1, $s0, $t4 -/* 0F7430 7F0C4A40 8F270094 */ lw $a3, 0x94($t9) -/* 0F7434 7F0C4A44 AFA00010 */ sw $zero, 0x10($sp) -/* 0F7438 7F0C4A48 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F743C 7F0C4A4C 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F7440 7F0C4A50 2446004E */ addiu $a2, $v0, 0x4e -/* 0F7444 7F0C4A54 1000001A */ b .L7F0C4AC0 -/* 0F7448 7F0C4A58 00408825 */ move $s1, $v0 -.L7F0C4A5C: -/* 0F744C 7F0C4A5C 3C0B8007 */ lui $t3, %hi(g_playerPlayerData + 0x98) # $t3, 0x8007 -/* 0F7450 7F0C4A60 8D6B8A98 */ lw $t3, %lo(g_playerPlayerData + 0x98)($t3) -/* 0F7454 7F0C4A64 8FAD00D4 */ lw $t5, 0xd4($sp) -/* 0F7458 7F0C4A68 3C0F8007 */ lui $t7, %hi(g_playerPlayerData) # $t7, 0x8007 -/* 0F745C 7F0C4A6C 19600014 */ blez $t3, .L7F0C4AC0 -/* 0F7460 7F0C4A70 000D7080 */ sll $t6, $t5, 2 -/* 0F7464 7F0C4A74 25EF8A00 */ addiu $t7, %lo(g_playerPlayerData) # addiu $t7, $t7, -0x7600 -/* 0F7468 7F0C4A78 01CFC021 */ addu $t8, $t6, $t7 -/* 0F746C 7F0C4A7C 0C000FD9 */ jal viGetViewLeft -/* 0F7470 7F0C4A80 AFB80044 */ sw $t8, 0x44($sp) -/* 0F7474 7F0C4A84 00028400 */ sll $s0, $v0, 0x10 -/* 0F7478 7F0C4A88 00106403 */ sra $t4, $s0, 0x10 -/* 0F747C 7F0C4A8C 0C000FDD */ jal viGetViewTop -/* 0F7480 7F0C4A90 01808025 */ move $s0, $t4 -/* 0F7484 7F0C4A94 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F7488 7F0C4A98 8FAB0044 */ lw $t3, 0x44($sp) -/* 0F748C 7F0C4A9C 240D0003 */ li $t5, 3 -/* 0F7490 7F0C4AA0 02192821 */ addu $a1, $s0, $t9 -/* 0F7494 7F0C4AA4 8D670094 */ lw $a3, 0x94($t3) -/* 0F7498 7F0C4AA8 AFAD0010 */ sw $t5, 0x10($sp) -/* 0F749C 7F0C4AAC 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F74A0 7F0C4AB0 02202025 */ move $a0, $s1 -/* 0F74A4 7F0C4AB4 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F74A8 7F0C4AB8 2446004E */ addiu $a2, $v0, 0x4e -/* 0F74AC 7F0C4ABC 00408825 */ move $s1, $v0 -.L7F0C4AC0: -/* 0F74B0 7F0C4AC0 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0F74B4 7F0C4AC4 24010002 */ li $at, 2 -/* 0F74B8 7F0C4AC8 3C188007 */ lui $t8, %hi(g_playerPlayerData) # $t8, 0x8007 -/* 0F74BC 7F0C4ACC 11C10014 */ beq $t6, $at, .L7F0C4B20 -/* 0F74C0 7F0C4AD0 000E7880 */ sll $t7, $t6, 2 -/* 0F74C4 7F0C4AD4 27188A00 */ addiu $t8, %lo(g_playerPlayerData) # addiu $t8, $t8, -0x7600 -/* 0F74C8 7F0C4AD8 01F86021 */ addu $t4, $t7, $t8 -/* 0F74CC 7F0C4ADC 0C000FD9 */ jal viGetViewLeft -/* 0F74D0 7F0C4AE0 AFAC0044 */ sw $t4, 0x44($sp) -/* 0F74D4 7F0C4AE4 00028400 */ sll $s0, $v0, 0x10 -/* 0F74D8 7F0C4AE8 0010CC03 */ sra $t9, $s0, 0x10 -/* 0F74DC 7F0C4AEC 0C000FDD */ jal viGetViewTop -/* 0F74E0 7F0C4AF0 03208025 */ move $s0, $t9 -/* 0F74E4 7F0C4AF4 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0F74E8 7F0C4AF8 8FAD0044 */ lw $t5, 0x44($sp) -/* 0F74EC 7F0C4AFC 02202025 */ move $a0, $s1 -/* 0F74F0 7F0C4B00 020B2821 */ addu $a1, $s0, $t3 -/* 0F74F4 7F0C4B04 8DA70104 */ lw $a3, 0x104($t5) -/* 0F74F8 7F0C4B08 AFA00010 */ sw $zero, 0x10($sp) -/* 0F74FC 7F0C4B0C 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F7500 7F0C4B10 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F7504 7F0C4B14 2446005E */ addiu $a2, $v0, 0x5e -/* 0F7508 7F0C4B18 1000001A */ b .L7F0C4B84 -/* 0F750C 7F0C4B1C 00408825 */ move $s1, $v0 -.L7F0C4B20: -/* 0F7510 7F0C4B20 3C0E8007 */ lui $t6, %hi(g_playerPlayerData+0x70+0x70 + 0x2C) # $t6, 0x8007 -/* 0F7514 7F0C4B24 8DCE8B0C */ lw $t6, %lo(g_playerPlayerData+0x70+0x70 + 0x2C)($t6) -/* 0F7518 7F0C4B28 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0F751C 7F0C4B2C 3C0C8007 */ lui $t4, %hi(g_playerPlayerData) # $t4, 0x8007 -/* 0F7520 7F0C4B30 19C00014 */ blez $t6, .L7F0C4B84 -/* 0F7524 7F0C4B34 000FC080 */ sll $t8, $t7, 2 -/* 0F7528 7F0C4B38 258C8A00 */ addiu $t4, %lo(g_playerPlayerData) # addiu $t4, $t4, -0x7600 -/* 0F752C 7F0C4B3C 030CC821 */ addu $t9, $t8, $t4 -/* 0F7530 7F0C4B40 0C000FD9 */ jal viGetViewLeft -/* 0F7534 7F0C4B44 AFB90044 */ sw $t9, 0x44($sp) -/* 0F7538 7F0C4B48 00028400 */ sll $s0, $v0, 0x10 -/* 0F753C 7F0C4B4C 00105C03 */ sra $t3, $s0, 0x10 -/* 0F7540 7F0C4B50 0C000FDD */ jal viGetViewTop -/* 0F7544 7F0C4B54 01608025 */ move $s0, $t3 -/* 0F7548 7F0C4B58 8FAD00A8 */ lw $t5, 0xa8($sp) -/* 0F754C 7F0C4B5C 8FAE0044 */ lw $t6, 0x44($sp) -/* 0F7550 7F0C4B60 240F0003 */ li $t7, 3 -/* 0F7554 7F0C4B64 020D2821 */ addu $a1, $s0, $t5 -/* 0F7558 7F0C4B68 8DC70104 */ lw $a3, 0x104($t6) -/* 0F755C 7F0C4B6C AFAF0010 */ sw $t7, 0x10($sp) -/* 0F7560 7F0C4B70 24A50040 */ addiu $a1, $a1, 0x40 -/* 0F7564 7F0C4B74 02202025 */ move $a0, $s1 -/* 0F7568 7F0C4B78 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F756C 7F0C4B7C 2446005E */ addiu $a2, $v0, 0x5e -/* 0F7570 7F0C4B80 00408825 */ move $s1, $v0 -.L7F0C4B84: -/* 0F7574 7F0C4B84 8FB800D0 */ lw $t8, 0xd0($sp) -/* 0F7578 7F0C4B88 24010004 */ li $at, 4 -/* 0F757C 7F0C4B8C 8FAC00D4 */ lw $t4, 0xd4($sp) -/* 0F7580 7F0C4B90 17010030 */ bne $t8, $at, .L7F0C4C54 -/* 0F7584 7F0C4B94 24010003 */ li $at, 3 -/* 0F7588 7F0C4B98 11810015 */ beq $t4, $at, .L7F0C4BF0 -/* 0F758C 7F0C4B9C 000CC880 */ sll $t9, $t4, 2 -/* 0F7590 7F0C4BA0 3C0B8007 */ lui $t3, %hi(g_playerPlayerData) # $t3, 0x8007 -/* 0F7594 7F0C4BA4 256B8A00 */ addiu $t3, %lo(g_playerPlayerData) # addiu $t3, $t3, -0x7600 -/* 0F7598 7F0C4BA8 032B6821 */ addu $t5, $t9, $t3 -/* 0F759C 7F0C4BAC 0C000FD9 */ jal viGetViewLeft -/* 0F75A0 7F0C4BB0 AFAD0044 */ sw $t5, 0x44($sp) -/* 0F75A4 7F0C4BB4 00028400 */ sll $s0, $v0, 0x10 -/* 0F75A8 7F0C4BB8 00107403 */ sra $t6, $s0, 0x10 -/* 0F75AC 7F0C4BBC 0C000FDD */ jal viGetViewTop -/* 0F75B0 7F0C4BC0 01C08025 */ move $s0, $t6 -/* 0F75B4 7F0C4BC4 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0F75B8 7F0C4BC8 8FB80044 */ lw $t8, 0x44($sp) -/* 0F75BC 7F0C4BCC 02202025 */ move $a0, $s1 -/* 0F75C0 7F0C4BD0 020F2821 */ addu $a1, $s0, $t7 -/* 0F75C4 7F0C4BD4 8F070174 */ lw $a3, 0x174($t8) -/* 0F75C8 7F0C4BD8 AFA00010 */ sw $zero, 0x10($sp) -/* 0F75CC 7F0C4BDC 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F75D0 7F0C4BE0 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F75D4 7F0C4BE4 2446005E */ addiu $a2, $v0, 0x5e -/* 0F75D8 7F0C4BE8 1000001A */ b .L7F0C4C54 -/* 0F75DC 7F0C4BEC 00408825 */ move $s1, $v0 -.L7F0C4BF0: -/* 0F75E0 7F0C4BF0 3C0C8007 */ lui $t4, %hi(g_playerPlayerData+0x70+0x70+0x70+0x30) # $t4, 0x8007 -/* 0F75E4 7F0C4BF4 8D8C8B80 */ lw $t4, %lo(g_playerPlayerData+0x70+0x70+0x70+0x30)($t4) -/* 0F75E8 7F0C4BF8 8FB900D4 */ lw $t9, 0xd4($sp) -/* 0F75EC 7F0C4BFC 3C0D8007 */ lui $t5, %hi(g_playerPlayerData) # $t5, 0x8007 -/* 0F75F0 7F0C4C00 19800014 */ blez $t4, .L7F0C4C54 -/* 0F75F4 7F0C4C04 00195880 */ sll $t3, $t9, 2 -/* 0F75F8 7F0C4C08 25AD8A00 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x7600 -/* 0F75FC 7F0C4C0C 016D7021 */ addu $t6, $t3, $t5 -/* 0F7600 7F0C4C10 0C000FD9 */ jal viGetViewLeft -/* 0F7604 7F0C4C14 AFAE0044 */ sw $t6, 0x44($sp) -/* 0F7608 7F0C4C18 00028400 */ sll $s0, $v0, 0x10 -/* 0F760C 7F0C4C1C 00107C03 */ sra $t7, $s0, 0x10 -/* 0F7610 7F0C4C20 0C000FDD */ jal viGetViewTop -/* 0F7614 7F0C4C24 01E08025 */ move $s0, $t7 -/* 0F7618 7F0C4C28 8FB800A8 */ lw $t8, 0xa8($sp) -/* 0F761C 7F0C4C2C 8FAC0044 */ lw $t4, 0x44($sp) -/* 0F7620 7F0C4C30 24190003 */ li $t9, 3 -/* 0F7624 7F0C4C34 02182821 */ addu $a1, $s0, $t8 -/* 0F7628 7F0C4C38 8D870174 */ lw $a3, 0x174($t4) -/* 0F762C 7F0C4C3C AFB90010 */ sw $t9, 0x10($sp) -/* 0F7630 7F0C4C40 24A50060 */ addiu $a1, $a1, 0x60 -/* 0F7634 7F0C4C44 02202025 */ move $a0, $s1 -/* 0F7638 7F0C4C48 0FC30AA0 */ jal display_text_for_playerdata_on_MP_menu -/* 0F763C 7F0C4C4C 2446005E */ addiu $a2, $v0, 0x5e -/* 0F7640 7F0C4C50 00408825 */ move $s1, $v0 -.L7F0C4C54: -/* 0F7644 7F0C4C54 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0F7648 7F0C4C58 100000F2 */ b .L7F0C5024 -/* 0F764C 7F0C4C5C 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -.L7F0C4C60: -/* 0F7650 7F0C4C60 544000F1 */ bnezl $v0, .L7F0C5028 -/* 0F7654 7F0C4C64 8C6D29C0 */ lw $t5, 0x29c0($v1) -/* 0F7658 7F0C4C68 8FAD00D0 */ lw $t5, 0xd0($sp) -/* 0F765C 7F0C4C6C 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0F7660 7F0C4C70 29A10003 */ slti $at, $t5, 3 -/* 0F7664 7F0C4C74 1420000A */ bnez $at, .L7F0C4CA0 -/* 0F7668 7F0C4C78 AFAB0074 */ sw $t3, 0x74($sp) -/* 0F766C 7F0C4C7C 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 0F7670 7F0C4C80 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 0F7674 7F0C4C84 2578FFF9 */ addiu $t8, $t3, -7 -/* 0F7678 7F0C4C88 31CF0001 */ andi $t7, $t6, 1 -/* 0F767C 7F0C4C8C 11E00003 */ beqz $t7, .L7F0C4C9C -/* 0F7680 7F0C4C90 25990007 */ addiu $t9, $t4, 7 -/* 0F7684 7F0C4C94 10000002 */ b .L7F0C4CA0 -/* 0F7688 7F0C4C98 AFB80074 */ sw $t8, 0x74($sp) -.L7F0C4C9C: -/* 0F768C 7F0C4C9C AFB90074 */ sw $t9, 0x74($sp) -.L7F0C4CA0: -/* 0F7690 7F0C4CA0 0FC304AE */ jal langGet -/* 0F7694 7F0C4CA4 3404A01F */ li $a0, 40991 -/* 0F7698 7F0C4CA8 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0F769C 7F0C4CAC 8DADAAFC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0F76A0 7F0C4CB0 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F76A4 7F0C4CB4 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F76A8 7F0C4CB8 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F76AC 7F0C4CBC 27A4007C */ addiu $a0, $sp, 0x7c -/* 0F76B0 7F0C4CC0 27A50078 */ addiu $a1, $sp, 0x78 -/* 0F76B4 7F0C4CC4 00403025 */ move $a2, $v0 -/* 0F76B8 7F0C4CC8 AFA00014 */ sw $zero, 0x14($sp) -/* 0F76BC 7F0C4CCC 0FC2B713 */ jal textMeasure -/* 0F76C0 7F0C4CD0 AFAD0010 */ sw $t5, 0x10($sp) -/* 0F76C4 7F0C4CD4 0C000FD9 */ jal viGetViewLeft -/* 0F76C8 7F0C4CD8 00000000 */ nop -/* 0F76CC 7F0C4CDC 8FAE0074 */ lw $t6, 0x74($sp) -/* 0F76D0 7F0C4CE0 8FAB0078 */ lw $t3, 0x78($sp) -/* 0F76D4 7F0C4CE4 004E7821 */ addu $t7, $v0, $t6 -/* 0F76D8 7F0C4CE8 000BC043 */ sra $t8, $t3, 1 -/* 0F76DC 7F0C4CEC 01F82023 */ subu $a0, $t7, $t8 -/* 0F76E0 7F0C4CF0 24840050 */ addiu $a0, $a0, 0x50 -/* 0F76E4 7F0C4CF4 0C000FDD */ jal viGetViewTop -/* 0F76E8 7F0C4CF8 AFA400CC */ sw $a0, 0xcc($sp) -/* 0F76EC 7F0C4CFC 8FAC007C */ lw $t4, 0x7c($sp) -/* 0F76F0 7F0C4D00 000CC843 */ sra $t9, $t4, 1 -/* 0F76F4 7F0C4D04 00596823 */ subu $t5, $v0, $t9 -/* 0F76F8 7F0C4D08 25AE002D */ addiu $t6, $t5, 0x2d -/* 0F76FC 7F0C4D0C 0C000F9B */ jal viGetX -/* 0F7700 7F0C4D10 AFAE00C8 */ sw $t6, 0xc8($sp) -/* 0F7704 7F0C4D14 00028400 */ sll $s0, $v0, 0x10 -/* 0F7708 7F0C4D18 00105C03 */ sra $t3, $s0, 0x10 -/* 0F770C 7F0C4D1C 0C000F9F */ jal viGetY -/* 0F7710 7F0C4D20 01608025 */ move $s0, $t3 -/* 0F7714 7F0C4D24 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) # $t7, 0x8004 -/* 0F7718 7F0C4D28 3C188004 */ lui $t8, %hi(ptrFontBankGothic) # $t8, 0x8004 -/* 0F771C 7F0C4D2C 8F18AAFC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0F7720 7F0C4D30 8DEFAB00 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0F7724 7F0C4D34 3C0C00FF */ lui $t4, (0x00FF00B0 >> 16) # lui $t4, 0xff -/* 0F7728 7F0C4D38 358C00B0 */ ori $t4, (0x00FF00B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0F772C 7F0C4D3C AFAC0018 */ sw $t4, 0x18($sp) -/* 0F7730 7F0C4D40 02202025 */ move $a0, $s1 -/* 0F7734 7F0C4D44 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F7738 7F0C4D48 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F773C 7F0C4D4C 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F7740 7F0C4D50 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F7744 7F0C4D54 AFA20020 */ sw $v0, 0x20($sp) -/* 0F7748 7F0C4D58 AFA00024 */ sw $zero, 0x24($sp) -/* 0F774C 7F0C4D5C AFA00028 */ sw $zero, 0x28($sp) -/* 0F7750 7F0C4D60 AFB80014 */ sw $t8, 0x14($sp) -/* 0F7754 7F0C4D64 0FC2B35F */ jal textRender -/* 0F7758 7F0C4D68 AFAF0010 */ sw $t7, 0x10($sp) -/* 0F775C 7F0C4D6C 00408825 */ move $s1, $v0 -/* 0F7760 7F0C4D70 8FA400D4 */ lw $a0, 0xd4($sp) -/* 0F7764 7F0C4D74 0FC02694 */ jal frontGetPlayersFavoriteWeaponInHand -/* 0F7768 7F0C4D78 00002825 */ move $a1, $zero -/* 0F776C 7F0C4D7C 3C198004 */ lui $t9, %hi(ptrFontBankGothic) # $t9, 0x8004 -/* 0F7770 7F0C4D80 8F39AAFC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0F7774 7F0C4D84 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F7778 7F0C4D88 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F777C 7F0C4D8C 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F7780 7F0C4D90 27A4007C */ addiu $a0, $sp, 0x7c -/* 0F7784 7F0C4D94 27A50078 */ addiu $a1, $sp, 0x78 -/* 0F7788 7F0C4D98 00403025 */ move $a2, $v0 -/* 0F778C 7F0C4D9C AFA00014 */ sw $zero, 0x14($sp) -/* 0F7790 7F0C4DA0 0FC2B713 */ jal textMeasure -/* 0F7794 7F0C4DA4 AFB90010 */ sw $t9, 0x10($sp) -/* 0F7798 7F0C4DA8 0C000FD9 */ jal viGetViewLeft -/* 0F779C 7F0C4DAC 00000000 */ nop -/* 0F77A0 7F0C4DB0 8FAD0074 */ lw $t5, 0x74($sp) -/* 0F77A4 7F0C4DB4 8FAB0078 */ lw $t3, 0x78($sp) -/* 0F77A8 7F0C4DB8 004D7021 */ addu $t6, $v0, $t5 -/* 0F77AC 7F0C4DBC 000B7843 */ sra $t7, $t3, 1 -/* 0F77B0 7F0C4DC0 01CF2023 */ subu $a0, $t6, $t7 -/* 0F77B4 7F0C4DC4 24840050 */ addiu $a0, $a0, 0x50 -/* 0F77B8 7F0C4DC8 0C000FDD */ jal viGetViewTop -/* 0F77BC 7F0C4DCC AFA400CC */ sw $a0, 0xcc($sp) -/* 0F77C0 7F0C4DD0 3C0C8004 */ lui $t4, %hi(j_text_trigger) # $t4, 0x8004 -/* 0F77C4 7F0C4DD4 8D8C1150 */ lw $t4, %lo(j_text_trigger)($t4) -/* 0F77C8 7F0C4DD8 00024400 */ sll $t0, $v0, 0x10 -/* 0F77CC 7F0C4DDC 0008C403 */ sra $t8, $t0, 0x10 -/* 0F77D0 7F0C4DE0 11800003 */ beqz $t4, .L7F0C4DF0 -/* 0F77D4 7F0C4DE4 03004025 */ move $t0, $t8 -/* 0F77D8 7F0C4DE8 10000002 */ b .L7F0C4DF4 -/* 0F77DC 7F0C4DEC 24040004 */ li $a0, 4 -.L7F0C4DF0: -/* 0F77E0 7F0C4DF0 00002025 */ move $a0, $zero -.L7F0C4DF4: -/* 0F77E4 7F0C4DF4 8FAD007C */ lw $t5, 0x7c($sp) -/* 0F77E8 7F0C4DF8 0088C821 */ addu $t9, $a0, $t0 -/* 0F77EC 7F0C4DFC 000D5843 */ sra $t3, $t5, 1 -/* 0F77F0 7F0C4E00 032B7023 */ subu $t6, $t9, $t3 -/* 0F77F4 7F0C4E04 25CF003D */ addiu $t7, $t6, 0x3d -/* 0F77F8 7F0C4E08 0C000F9B */ jal viGetX -/* 0F77FC 7F0C4E0C AFAF00C8 */ sw $t7, 0xc8($sp) -/* 0F7800 7F0C4E10 00028400 */ sll $s0, $v0, 0x10 -/* 0F7804 7F0C4E14 0010C403 */ sra $t8, $s0, 0x10 -/* 0F7808 7F0C4E18 0C000F9F */ jal viGetY -/* 0F780C 7F0C4E1C 03008025 */ move $s0, $t8 -/* 0F7810 7F0C4E20 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0F7814 7F0C4E24 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0F7818 7F0C4E28 8DADAAFC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0F781C 7F0C4E2C 8D8CAB00 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F7820 7F0C4E30 3C1900FF */ lui $t9, (0x00FF00B0 >> 16) # lui $t9, 0xff -/* 0F7824 7F0C4E34 373900B0 */ ori $t9, (0x00FF00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0F7828 7F0C4E38 AFB90018 */ sw $t9, 0x18($sp) -/* 0F782C 7F0C4E3C 02202025 */ move $a0, $s1 -/* 0F7830 7F0C4E40 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F7834 7F0C4E44 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F7838 7F0C4E48 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F783C 7F0C4E4C AFB0001C */ sw $s0, 0x1c($sp) -/* 0F7840 7F0C4E50 AFA20020 */ sw $v0, 0x20($sp) -/* 0F7844 7F0C4E54 AFA00024 */ sw $zero, 0x24($sp) -/* 0F7848 7F0C4E58 AFA00028 */ sw $zero, 0x28($sp) -/* 0F784C 7F0C4E5C AFAD0014 */ sw $t5, 0x14($sp) -/* 0F7850 7F0C4E60 0FC2B35F */ jal textRender -/* 0F7854 7F0C4E64 AFAC0010 */ sw $t4, 0x10($sp) -/* 0F7858 7F0C4E68 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0F785C 7F0C4E6C 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0F7860 7F0C4E70 00408825 */ move $s1, $v0 -/* 0F7864 7F0C4E74 27A4007C */ addiu $a0, $sp, 0x7c -/* 0F7868 7F0C4E78 8C682A08 */ lw $t0, 0x2a08($v1) -/* 0F786C 7F0C4E7C 27A50078 */ addiu $a1, $sp, 0x78 -/* 0F7870 7F0C4E80 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F7874 7F0C4E84 11000031 */ beqz $t0, .L7F0C4F4C -/* 0F7878 7F0C4E88 01003025 */ move $a2, $t0 -/* 0F787C 7F0C4E8C 3C0B8004 */ lui $t3, %hi(ptrFontBankGothic) # $t3, 0x8004 -/* 0F7880 7F0C4E90 8D6BAAFC */ lw $t3, %lo(ptrFontBankGothic)($t3) -/* 0F7884 7F0C4E94 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F7888 7F0C4E98 AFA00014 */ sw $zero, 0x14($sp) -/* 0F788C 7F0C4E9C AFA800A4 */ sw $t0, 0xa4($sp) -/* 0F7890 7F0C4EA0 0FC2B713 */ jal textMeasure -/* 0F7894 7F0C4EA4 AFAB0010 */ sw $t3, 0x10($sp) -/* 0F7898 7F0C4EA8 0C000FD9 */ jal viGetViewLeft -/* 0F789C 7F0C4EAC 00000000 */ nop -/* 0F78A0 7F0C4EB0 8FAE0074 */ lw $t6, 0x74($sp) -/* 0F78A4 7F0C4EB4 8FB80078 */ lw $t8, 0x78($sp) -/* 0F78A8 7F0C4EB8 004E7821 */ addu $t7, $v0, $t6 -/* 0F78AC 7F0C4EBC 00186043 */ sra $t4, $t8, 1 -/* 0F78B0 7F0C4EC0 01EC2023 */ subu $a0, $t7, $t4 -/* 0F78B4 7F0C4EC4 24840050 */ addiu $a0, $a0, 0x50 -/* 0F78B8 7F0C4EC8 0C000FDD */ jal viGetViewTop -/* 0F78BC 7F0C4ECC AFA400CC */ sw $a0, 0xcc($sp) -/* 0F78C0 7F0C4ED0 8FAD007C */ lw $t5, 0x7c($sp) -/* 0F78C4 7F0C4ED4 000DC843 */ sra $t9, $t5, 1 -/* 0F78C8 7F0C4ED8 00595823 */ subu $t3, $v0, $t9 -/* 0F78CC 7F0C4EDC 256E0053 */ addiu $t6, $t3, 0x53 -/* 0F78D0 7F0C4EE0 0C000F9B */ jal viGetX -/* 0F78D4 7F0C4EE4 AFAE00C8 */ sw $t6, 0xc8($sp) -/* 0F78D8 7F0C4EE8 00028400 */ sll $s0, $v0, 0x10 -/* 0F78DC 7F0C4EEC 0010C403 */ sra $t8, $s0, 0x10 -/* 0F78E0 7F0C4EF0 0C000F9F */ jal viGetY -/* 0F78E4 7F0C4EF4 03008025 */ move $s0, $t8 -/* 0F78E8 7F0C4EF8 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) # $t7, 0x8004 -/* 0F78EC 7F0C4EFC 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) # $t4, 0x8004 -/* 0F78F0 7F0C4F00 8D8CAAFC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0F78F4 7F0C4F04 8DEFAB00 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0F78F8 7F0C4F08 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0F78FC 7F0C4F0C 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0F7900 7F0C4F10 AFAD0018 */ sw $t5, 0x18($sp) -/* 0F7904 7F0C4F14 02202025 */ move $a0, $s1 -/* 0F7908 7F0C4F18 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F790C 7F0C4F1C 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F7910 7F0C4F20 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F7914 7F0C4F24 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F7918 7F0C4F28 AFA20020 */ sw $v0, 0x20($sp) -/* 0F791C 7F0C4F2C AFA00024 */ sw $zero, 0x24($sp) -/* 0F7920 7F0C4F30 AFA00028 */ sw $zero, 0x28($sp) -/* 0F7924 7F0C4F34 AFAC0014 */ sw $t4, 0x14($sp) -/* 0F7928 7F0C4F38 0FC2B35F */ jal textRender -/* 0F792C 7F0C4F3C AFAF0010 */ sw $t7, 0x10($sp) -/* 0F7930 7F0C4F40 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0F7934 7F0C4F44 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0F7938 7F0C4F48 00408825 */ move $s1, $v0 -.L7F0C4F4C: -/* 0F793C 7F0C4F4C 8C622A0C */ lw $v0, 0x2a0c($v1) -/* 0F7940 7F0C4F50 27A4007C */ addiu $a0, $sp, 0x7c -/* 0F7944 7F0C4F54 27A50078 */ addiu $a1, $sp, 0x78 -/* 0F7948 7F0C4F58 10400032 */ beqz $v0, .L7F0C5024 -/* 0F794C 7F0C4F5C 00403025 */ move $a2, $v0 -/* 0F7950 7F0C4F60 3C198004 */ lui $t9, %hi(ptrFontBankGothic) # $t9, 0x8004 -/* 0F7954 7F0C4F64 8F39AAFC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0F7958 7F0C4F68 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F795C 7F0C4F6C 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F7960 7F0C4F70 AFA00014 */ sw $zero, 0x14($sp) -/* 0F7964 7F0C4F74 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F7968 7F0C4F78 0FC2B713 */ jal textMeasure -/* 0F796C 7F0C4F7C AFB90010 */ sw $t9, 0x10($sp) -/* 0F7970 7F0C4F80 0C000FD9 */ jal viGetViewLeft -/* 0F7974 7F0C4F84 00000000 */ nop -/* 0F7978 7F0C4F88 8FAB0074 */ lw $t3, 0x74($sp) -/* 0F797C 7F0C4F8C 8FB80078 */ lw $t8, 0x78($sp) -/* 0F7980 7F0C4F90 004B7021 */ addu $t6, $v0, $t3 -/* 0F7984 7F0C4F94 00187843 */ sra $t7, $t8, 1 -/* 0F7988 7F0C4F98 01CF2023 */ subu $a0, $t6, $t7 -/* 0F798C 7F0C4F9C 24840050 */ addiu $a0, $a0, 0x50 -/* 0F7990 7F0C4FA0 0C000FDD */ jal viGetViewTop -/* 0F7994 7F0C4FA4 AFA400CC */ sw $a0, 0xcc($sp) -/* 0F7998 7F0C4FA8 8FAC007C */ lw $t4, 0x7c($sp) -/* 0F799C 7F0C4FAC 000C6843 */ sra $t5, $t4, 1 -/* 0F79A0 7F0C4FB0 004DC823 */ subu $t9, $v0, $t5 -/* 0F79A4 7F0C4FB4 272B0060 */ addiu $t3, $t9, 0x60 -/* 0F79A8 7F0C4FB8 0C000F9B */ jal viGetX -/* 0F79AC 7F0C4FBC AFAB00C8 */ sw $t3, 0xc8($sp) -/* 0F79B0 7F0C4FC0 00028400 */ sll $s0, $v0, 0x10 -/* 0F79B4 7F0C4FC4 0010C403 */ sra $t8, $s0, 0x10 -/* 0F79B8 7F0C4FC8 0C000F9F */ jal viGetY -/* 0F79BC 7F0C4FCC 03008025 */ move $s0, $t8 -/* 0F79C0 7F0C4FD0 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) # $t6, 0x8004 -/* 0F79C4 7F0C4FD4 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0F79C8 7F0C4FD8 8DEFAAFC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F79CC 7F0C4FDC 8DCEAB00 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0F79D0 7F0C4FE0 3C0C00FF */ lui $t4, (0x00FF00B0 >> 16) # lui $t4, 0xff -/* 0F79D4 7F0C4FE4 358C00B0 */ ori $t4, (0x00FF00B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0F79D8 7F0C4FE8 AFAC0018 */ sw $t4, 0x18($sp) -/* 0F79DC 7F0C4FEC 02202025 */ move $a0, $s1 -/* 0F79E0 7F0C4FF0 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F79E4 7F0C4FF4 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F79E8 7F0C4FF8 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F79EC 7F0C4FFC AFB0001C */ sw $s0, 0x1c($sp) -/* 0F79F0 7F0C5000 AFA20020 */ sw $v0, 0x20($sp) -/* 0F79F4 7F0C5004 AFA00024 */ sw $zero, 0x24($sp) -/* 0F79F8 7F0C5008 AFA00028 */ sw $zero, 0x28($sp) -/* 0F79FC 7F0C500C AFAF0014 */ sw $t7, 0x14($sp) -/* 0F7A00 7F0C5010 0FC2B35F */ jal textRender -/* 0F7A04 7F0C5014 AFAE0010 */ sw $t6, 0x10($sp) -/* 0F7A08 7F0C5018 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0F7A0C 7F0C501C 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0F7A10 7F0C5020 00408825 */ move $s1, $v0 -.L7F0C5024: -/* 0F7A14 7F0C5024 8C6D29C0 */ lw $t5, 0x29c0($v1) -.L7F0C5028: -/* 0F7A18 7F0C5028 24010006 */ li $at, 6 -/* 0F7A1C 7F0C502C 15A100B0 */ bne $t5, $at, .L7F0C52F0 -/* 0F7A20 7F0C5030 00000000 */ nop -/* 0F7A24 7F0C5034 0FC304AE */ jal langGet -/* 0F7A28 7F0C5038 3404A020 */ li $a0, 40992 -/* 0F7A2C 7F0C503C 3C198004 */ lui $t9, %hi(ptrFontBankGothic) # $t9, 0x8004 -/* 0F7A30 7F0C5040 8F39AAFC */ lw $t9, %lo(ptrFontBankGothic)($t9) -/* 0F7A34 7F0C5044 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F7A38 7F0C5048 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F7A3C 7F0C504C 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F7A40 7F0C5050 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F7A44 7F0C5054 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F7A48 7F0C5058 00403025 */ move $a2, $v0 -/* 0F7A4C 7F0C505C AFA00014 */ sw $zero, 0x14($sp) -/* 0F7A50 7F0C5060 0FC2B713 */ jal textMeasure -/* 0F7A54 7F0C5064 AFB90010 */ sw $t9, 0x10($sp) -/* 0F7A58 7F0C5068 0C000FD9 */ jal viGetViewLeft -/* 0F7A5C 7F0C506C 00000000 */ nop -/* 0F7A60 7F0C5070 8FAB00A8 */ lw $t3, 0xa8($sp) -/* 0F7A64 7F0C5074 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0F7A68 7F0C5078 004BC021 */ addu $t8, $v0, $t3 -/* 0F7A6C 7F0C507C 000E7843 */ sra $t7, $t6, 1 -/* 0F7A70 7F0C5080 030F2023 */ subu $a0, $t8, $t7 -/* 0F7A74 7F0C5084 24840036 */ addiu $a0, $a0, 0x36 -/* 0F7A78 7F0C5088 0C000FDD */ jal viGetViewTop -/* 0F7A7C 7F0C508C AFA400CC */ sw $a0, 0xcc($sp) -/* 0F7A80 7F0C5090 8FAC00BC */ lw $t4, 0xbc($sp) -/* 0F7A84 7F0C5094 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 0F7A88 7F0C5098 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0F7A8C 7F0C509C 000C6843 */ sra $t5, $t4, 1 -/* 0F7A90 7F0C50A0 004DC823 */ subu $t9, $v0, $t5 -/* 0F7A94 7F0C50A4 272B003E */ addiu $t3, $t9, 0x3e -/* 0F7A98 7F0C50A8 AFAB00C8 */ sw $t3, 0xc8($sp) -/* 0F7A9C 7F0C50AC 8DD829C4 */ lw $t8, 0x29c4($t6) -/* 0F7AA0 7F0C50B0 1700001E */ bnez $t8, .L7F0C512C -/* 0F7AA4 7F0C50B4 00000000 */ nop -/* 0F7AA8 7F0C50B8 0C000F9B */ jal viGetX -/* 0F7AAC 7F0C50BC 00000000 */ nop -/* 0F7AB0 7F0C50C0 00028400 */ sll $s0, $v0, 0x10 -/* 0F7AB4 7F0C50C4 00107C03 */ sra $t7, $s0, 0x10 -/* 0F7AB8 7F0C50C8 0C000F9F */ jal viGetY -/* 0F7ABC 7F0C50CC 01E08025 */ move $s0, $t7 -/* 0F7AC0 7F0C50D0 3C0C8004 */ lui $t4, %hi(ptrFontBankGothicChars) # $t4, 0x8004 -/* 0F7AC4 7F0C50D4 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0F7AC8 7F0C50D8 8DADAAFC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0F7ACC 7F0C50DC 8D8CAB00 */ lw $t4, %lo(ptrFontBankGothicChars)($t4) -/* 0F7AD0 7F0C50E0 3C19A0FF */ lui $t9, (0xA0FFA0F0 >> 16) # lui $t9, 0xa0ff -/* 0F7AD4 7F0C50E4 3C0B0070 */ lui $t3, (0x007000A0 >> 16) # lui $t3, 0x70 -/* 0F7AD8 7F0C50E8 356B00A0 */ ori $t3, (0x007000A0 & 0xFFFF) # ori $t3, $t3, 0xa0 -/* 0F7ADC 7F0C50EC 3739A0F0 */ ori $t9, (0xA0FFA0F0 & 0xFFFF) # ori $t9, $t9, 0xa0f0 -/* 0F7AE0 7F0C50F0 AFB90018 */ sw $t9, 0x18($sp) -/* 0F7AE4 7F0C50F4 AFAB001C */ sw $t3, 0x1c($sp) -/* 0F7AE8 7F0C50F8 02202025 */ move $a0, $s1 -/* 0F7AEC 7F0C50FC 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F7AF0 7F0C5100 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F7AF4 7F0C5104 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F7AF8 7F0C5108 AFB00020 */ sw $s0, 0x20($sp) -/* 0F7AFC 7F0C510C AFA20024 */ sw $v0, 0x24($sp) -/* 0F7B00 7F0C5110 AFA00028 */ sw $zero, 0x28($sp) -/* 0F7B04 7F0C5114 AFA0002C */ sw $zero, 0x2c($sp) -/* 0F7B08 7F0C5118 AFAD0014 */ sw $t5, 0x14($sp) -/* 0F7B0C 7F0C511C 0FC2B66B */ jal textRenderOutlined -/* 0F7B10 7F0C5120 AFAC0010 */ sw $t4, 0x10($sp) -/* 0F7B14 7F0C5124 1000001A */ b .L7F0C5190 -/* 0F7B18 7F0C5128 00408825 */ move $s1, $v0 -.L7F0C512C: -/* 0F7B1C 7F0C512C 0C000F9B */ jal viGetX -/* 0F7B20 7F0C5130 00000000 */ nop -/* 0F7B24 7F0C5134 00028400 */ sll $s0, $v0, 0x10 -/* 0F7B28 7F0C5138 00107403 */ sra $t6, $s0, 0x10 -/* 0F7B2C 7F0C513C 0C000F9F */ jal viGetY -/* 0F7B30 7F0C5140 01C08025 */ move $s0, $t6 -/* 0F7B34 7F0C5144 3C188004 */ lui $t8, %hi(ptrFontBankGothicChars) # $t8, 0x8004 -/* 0F7B38 7F0C5148 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0F7B3C 7F0C514C 8DEFAAFC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0F7B40 7F0C5150 8F18AB00 */ lw $t8, %lo(ptrFontBankGothicChars)($t8) -/* 0F7B44 7F0C5154 3C0C00FF */ lui $t4, (0x00FF00B0 >> 16) # lui $t4, 0xff -/* 0F7B48 7F0C5158 358C00B0 */ ori $t4, (0x00FF00B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0F7B4C 7F0C515C AFAC0018 */ sw $t4, 0x18($sp) -/* 0F7B50 7F0C5160 02202025 */ move $a0, $s1 -/* 0F7B54 7F0C5164 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F7B58 7F0C5168 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F7B5C 7F0C516C 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F7B60 7F0C5170 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F7B64 7F0C5174 AFA20020 */ sw $v0, 0x20($sp) -/* 0F7B68 7F0C5178 AFA00024 */ sw $zero, 0x24($sp) -/* 0F7B6C 7F0C517C AFA00028 */ sw $zero, 0x28($sp) -/* 0F7B70 7F0C5180 AFAF0014 */ sw $t7, 0x14($sp) -/* 0F7B74 7F0C5184 0FC2B35F */ jal textRender -/* 0F7B78 7F0C5188 AFB80010 */ sw $t8, 0x10($sp) -/* 0F7B7C 7F0C518C 00408825 */ move $s1, $v0 -.L7F0C5190: -/* 0F7B80 7F0C5190 0FC304AE */ jal langGet -/* 0F7B84 7F0C5194 3404A021 */ li $a0, 40993 -/* 0F7B88 7F0C5198 3C0D8004 */ lui $t5, %hi(ptrFontBankGothic) # $t5, 0x8004 -/* 0F7B8C 7F0C519C 8DADAAFC */ lw $t5, %lo(ptrFontBankGothic)($t5) -/* 0F7B90 7F0C51A0 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F7B94 7F0C51A4 AFA200A4 */ sw $v0, 0xa4($sp) -/* 0F7B98 7F0C51A8 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F7B9C 7F0C51AC 27A400BC */ addiu $a0, $sp, 0xbc -/* 0F7BA0 7F0C51B0 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0F7BA4 7F0C51B4 00403025 */ move $a2, $v0 -/* 0F7BA8 7F0C51B8 AFA00014 */ sw $zero, 0x14($sp) -/* 0F7BAC 7F0C51BC 0FC2B713 */ jal textMeasure -/* 0F7BB0 7F0C51C0 AFAD0010 */ sw $t5, 0x10($sp) -/* 0F7BB4 7F0C51C4 0C000FD9 */ jal viGetViewLeft -/* 0F7BB8 7F0C51C8 00000000 */ nop -/* 0F7BBC 7F0C51CC 8FB900A8 */ lw $t9, 0xa8($sp) -/* 0F7BC0 7F0C51D0 8FAE00C0 */ lw $t6, 0xc0($sp) -/* 0F7BC4 7F0C51D4 00595821 */ addu $t3, $v0, $t9 -/* 0F7BC8 7F0C51D8 000EC043 */ sra $t8, $t6, 1 -/* 0F7BCC 7F0C51DC 01782023 */ subu $a0, $t3, $t8 -/* 0F7BD0 7F0C51E0 24840068 */ addiu $a0, $a0, 0x68 -/* 0F7BD4 7F0C51E4 0C000FDD */ jal viGetViewTop -/* 0F7BD8 7F0C51E8 AFA400CC */ sw $a0, 0xcc($sp) -/* 0F7BDC 7F0C51EC 8FAF00BC */ lw $t7, 0xbc($sp) -/* 0F7BE0 7F0C51F0 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 0F7BE4 7F0C51F4 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0F7BE8 7F0C51F8 000F6043 */ sra $t4, $t7, 1 -/* 0F7BEC 7F0C51FC 004C6823 */ subu $t5, $v0, $t4 -/* 0F7BF0 7F0C5200 25B9003E */ addiu $t9, $t5, 0x3e -/* 0F7BF4 7F0C5204 AFB900C8 */ sw $t9, 0xc8($sp) -/* 0F7BF8 7F0C5208 8DCB29C4 */ lw $t3, 0x29c4($t6) -/* 0F7BFC 7F0C520C 24010001 */ li $at, 1 -/* 0F7C00 7F0C5210 1561001E */ bne $t3, $at, .L7F0C528C -/* 0F7C04 7F0C5214 00000000 */ nop -/* 0F7C08 7F0C5218 0C000F9B */ jal viGetX -/* 0F7C0C 7F0C521C 00000000 */ nop -/* 0F7C10 7F0C5220 00028400 */ sll $s0, $v0, 0x10 -/* 0F7C14 7F0C5224 0010C403 */ sra $t8, $s0, 0x10 -/* 0F7C18 7F0C5228 0C000F9F */ jal viGetY -/* 0F7C1C 7F0C522C 03008025 */ move $s0, $t8 -/* 0F7C20 7F0C5230 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) # $t7, 0x8004 -/* 0F7C24 7F0C5234 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) # $t4, 0x8004 -/* 0F7C28 7F0C5238 8D8CAAFC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0F7C2C 7F0C523C 8DEFAB00 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0F7C30 7F0C5240 3C0DA0FF */ lui $t5, (0xA0FFA0F0 >> 16) # lui $t5, 0xa0ff -/* 0F7C34 7F0C5244 3C190070 */ lui $t9, (0x007000A0 >> 16) # lui $t9, 0x70 -/* 0F7C38 7F0C5248 373900A0 */ ori $t9, (0x007000A0 & 0xFFFF) # ori $t9, $t9, 0xa0 -/* 0F7C3C 7F0C524C 35ADA0F0 */ ori $t5, (0xA0FFA0F0 & 0xFFFF) # ori $t5, $t5, 0xa0f0 -/* 0F7C40 7F0C5250 AFAD0018 */ sw $t5, 0x18($sp) -/* 0F7C44 7F0C5254 AFB9001C */ sw $t9, 0x1c($sp) -/* 0F7C48 7F0C5258 02202025 */ move $a0, $s1 -/* 0F7C4C 7F0C525C 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F7C50 7F0C5260 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F7C54 7F0C5264 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F7C58 7F0C5268 AFB00020 */ sw $s0, 0x20($sp) -/* 0F7C5C 7F0C526C AFA20024 */ sw $v0, 0x24($sp) -/* 0F7C60 7F0C5270 AFA00028 */ sw $zero, 0x28($sp) -/* 0F7C64 7F0C5274 AFA0002C */ sw $zero, 0x2c($sp) -/* 0F7C68 7F0C5278 AFAC0014 */ sw $t4, 0x14($sp) -/* 0F7C6C 7F0C527C 0FC2B66B */ jal textRenderOutlined -/* 0F7C70 7F0C5280 AFAF0010 */ sw $t7, 0x10($sp) -/* 0F7C74 7F0C5284 1000001A */ b .L7F0C52F0 -/* 0F7C78 7F0C5288 00408825 */ move $s1, $v0 -.L7F0C528C: -/* 0F7C7C 7F0C528C 0C000F9B */ jal viGetX -/* 0F7C80 7F0C5290 00000000 */ nop -/* 0F7C84 7F0C5294 00028400 */ sll $s0, $v0, 0x10 -/* 0F7C88 7F0C5298 00107403 */ sra $t6, $s0, 0x10 -/* 0F7C8C 7F0C529C 0C000F9F */ jal viGetY -/* 0F7C90 7F0C52A0 01C08025 */ move $s0, $t6 -/* 0F7C94 7F0C52A4 3C0B8004 */ lui $t3, %hi(ptrFontBankGothicChars) # $t3, 0x8004 -/* 0F7C98 7F0C52A8 3C188004 */ lui $t8, %hi(ptrFontBankGothic) # $t8, 0x8004 -/* 0F7C9C 7F0C52AC 8F18AAFC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0F7CA0 7F0C52B0 8D6BAB00 */ lw $t3, %lo(ptrFontBankGothicChars)($t3) -/* 0F7CA4 7F0C52B4 3C0F00FF */ lui $t7, (0x00FF00B0 >> 16) # lui $t7, 0xff -/* 0F7CA8 7F0C52B8 35EF00B0 */ ori $t7, (0x00FF00B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0F7CAC 7F0C52BC AFAF0018 */ sw $t7, 0x18($sp) -/* 0F7CB0 7F0C52C0 02202025 */ move $a0, $s1 -/* 0F7CB4 7F0C52C4 27A500CC */ addiu $a1, $sp, 0xcc -/* 0F7CB8 7F0C52C8 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 0F7CBC 7F0C52CC 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0F7CC0 7F0C52D0 AFB0001C */ sw $s0, 0x1c($sp) -/* 0F7CC4 7F0C52D4 AFA20020 */ sw $v0, 0x20($sp) -/* 0F7CC8 7F0C52D8 AFA00024 */ sw $zero, 0x24($sp) -/* 0F7CCC 7F0C52DC AFA00028 */ sw $zero, 0x28($sp) -/* 0F7CD0 7F0C52E0 AFB80014 */ sw $t8, 0x14($sp) -/* 0F7CD4 7F0C52E4 0FC2B35F */ jal textRender -/* 0F7CD8 7F0C52E8 AFAB0010 */ sw $t3, 0x10($sp) -/* 0F7CDC 7F0C52EC 00408825 */ move $s1, $v0 -.L7F0C52F0: -/* 0F7CE0 7F0C52F0 0FC2B06C */ jal combiner_bayer_lod_perspective -/* 0F7CE4 7F0C52F4 02202025 */ move $a0, $s1 -/* 0F7CE8 7F0C52F8 10000092 */ b .L7F0C5544 -/* 0F7CEC 7F0C52FC 00408825 */ move $s1, $v0 -/* 0F7CF0 7F0C5300 8C6C00D8 */ lw $t4, 0xd8($v1) -.L7F0C5304: -/* 0F7CF4 7F0C5304 51800090 */ beql $t4, $zero, .L7F0C5548 -/* 0F7CF8 7F0C5308 02201025 */ move $v0, $s1 -/* 0F7CFC 7F0C530C 8C6D0428 */ lw $t5, 0x428($v1) -/* 0F7D00 7F0C5310 51A0008D */ beql $t5, $zero, .L7F0C5548 -/* 0F7D04 7F0C5314 02201025 */ move $v0, $s1 -/* 0F7D08 7F0C5318 8C790424 */ lw $t9, 0x424($v1) -/* 0F7D0C 7F0C531C 3C0E8007 */ lui $t6, %hi(g_stopPlayFlag) # $t6, 0x8007 -/* 0F7D10 7F0C5320 53200089 */ beql $t9, $zero, .L7F0C5548 -/* 0F7D14 7F0C5324 02201025 */ move $v0, $s1 -/* 0F7D18 7F0C5328 8DCE3AE0 */ lw $t6, %lo(g_stopPlayFlag)($t6) -/* 0F7D1C 7F0C532C 3C0B8007 */ lui $t3, %hi(g_gameOverFlag) # $t3, 0x8007 -/* 0F7D20 7F0C5330 55C00085 */ bnezl $t6, .L7F0C5548 -/* 0F7D24 7F0C5334 02201025 */ move $v0, $s1 -/* 0F7D28 7F0C5338 8D6B3AE4 */ lw $t3, %lo(g_gameOverFlag)($t3) -/* 0F7D2C 7F0C533C 00002025 */ move $a0, $zero -/* 0F7D30 7F0C5340 55600081 */ bnezl $t3, .L7F0C5548 -/* 0F7D34 7F0C5344 02201025 */ move $v0, $s1 -/* 0F7D38 7F0C5348 18400028 */ blez $v0, .L7F0C53EC -/* 0F7D3C 7F0C534C 00002825 */ move $a1, $zero -/* 0F7D40 7F0C5350 30470003 */ andi $a3, $v0, 3 -/* 0F7D44 7F0C5354 10E00011 */ beqz $a3, .L7F0C539C -/* 0F7D48 7F0C5358 00E03025 */ move $a2, $a3 -/* 0F7D4C 7F0C535C 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0F7D50 7F0C5360 0000C0C0 */ sll $t8, $zero, 3 -/* 0F7D54 7F0C5364 0300C023 */ subu $t8, $t8, $zero -/* 0F7D58 7F0C5368 0018C100 */ sll $t8, $t8, 4 -/* 0F7D5C 7F0C536C 3C198007 */ lui $t9, %hi(g_playerPlayerData) # $t9, 0x8007 -/* 0F7D60 7F0C5370 000F6080 */ sll $t4, $t7, 2 -/* 0F7D64 7F0C5374 030C6821 */ addu $t5, $t8, $t4 -/* 0F7D68 7F0C5378 27398A00 */ addiu $t9, %lo(g_playerPlayerData) # addiu $t9, $t9, -0x7600 -/* 0F7D6C 7F0C537C 01B91821 */ addu $v1, $t5, $t9 -.L7F0C5380: -/* 0F7D70 7F0C5380 8C6E0024 */ lw $t6, 0x24($v1) -/* 0F7D74 7F0C5384 24A50001 */ addiu $a1, $a1, 1 -/* 0F7D78 7F0C5388 24630070 */ addiu $v1, $v1, 0x70 -/* 0F7D7C 7F0C538C 14C5FFFC */ bne $a2, $a1, .L7F0C5380 -/* 0F7D80 7F0C5390 008E2021 */ addu $a0, $a0, $t6 -/* 0F7D84 7F0C5394 10A20015 */ beq $a1, $v0, .L7F0C53EC -/* 0F7D88 7F0C5398 00000000 */ nop -.L7F0C539C: -/* 0F7D8C 7F0C539C 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 0F7D90 7F0C53A0 000558C0 */ sll $t3, $a1, 3 -/* 0F7D94 7F0C53A4 01655823 */ subu $t3, $t3, $a1 -/* 0F7D98 7F0C53A8 000B5900 */ sll $t3, $t3, 4 -/* 0F7D9C 7F0C53AC 3C0D8007 */ lui $t5, %hi(g_playerPlayerData) # $t5, 0x8007 -/* 0F7DA0 7F0C53B0 000FC080 */ sll $t8, $t7, 2 -/* 0F7DA4 7F0C53B4 01786021 */ addu $t4, $t3, $t8 -/* 0F7DA8 7F0C53B8 25AD8A00 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x7600 -/* 0F7DAC 7F0C53BC 018D1821 */ addu $v1, $t4, $t5 -.L7F0C53C0: -/* 0F7DB0 7F0C53C0 8C790024 */ lw $t9, 0x24($v1) -/* 0F7DB4 7F0C53C4 8C6E0094 */ lw $t6, 0x94($v1) -/* 0F7DB8 7F0C53C8 8C6F0104 */ lw $t7, 0x104($v1) -/* 0F7DBC 7F0C53CC 00992021 */ addu $a0, $a0, $t9 -/* 0F7DC0 7F0C53D0 8C6B0174 */ lw $t3, 0x174($v1) -/* 0F7DC4 7F0C53D4 008E2021 */ addu $a0, $a0, $t6 -/* 0F7DC8 7F0C53D8 24A50004 */ addiu $a1, $a1, 4 -/* 0F7DCC 7F0C53DC 008F2021 */ addu $a0, $a0, $t7 -/* 0F7DD0 7F0C53E0 246301C0 */ addiu $v1, $v1, 0x1c0 -/* 0F7DD4 7F0C53E4 14A8FFF6 */ bne $a1, $t0, .L7F0C53C0 -/* 0F7DD8 7F0C53E8 008B2021 */ addu $a0, $a0, $t3 -.L7F0C53EC: -/* 0F7DDC 7F0C53EC 0FC051B2 */ jal get_scenario -/* 0F7DE0 7F0C53F0 AFA40058 */ sw $a0, 0x58($sp) -/* 0F7DE4 7F0C53F4 24010001 */ li $at, 1 -/* 0F7DE8 7F0C53F8 14410004 */ bne $v0, $at, .L7F0C540C -/* 0F7DEC 7F0C53FC 8FA40058 */ lw $a0, 0x58($sp) -/* 0F7DF0 7F0C5400 28810002 */ slti $at, $a0, 2 -/* 0F7DF4 7F0C5404 50200050 */ beql $at, $zero, .L7F0C5548 -/* 0F7DF8 7F0C5408 02201025 */ move $v0, $s1 -.L7F0C540C: -/* 0F7DFC 7F0C540C 0FC2D0BC */ jal bgScissorCurrentPlayerViewDefault -/* 0F7E00 7F0C5410 02202025 */ move $a0, $s1 -/* 0F7E04 7F0C5414 0FC2B016 */ jal microcode_constructor -/* 0F7E08 7F0C5418 00402025 */ move $a0, $v0 -/* 0F7E0C 7F0C541C 00408825 */ move $s1, $v0 -/* 0F7E10 7F0C5420 0FC304AE */ jal langGet -/* 0F7E14 7F0C5424 3404A022 */ li $a0, 40994 -/* 0F7E18 7F0C5428 3C188004 */ lui $t8, %hi(ptrFontBankGothic) # $t8, 0x8004 -/* 0F7E1C 7F0C542C 8F18AAFC */ lw $t8, %lo(ptrFontBankGothic)($t8) -/* 0F7E20 7F0C5430 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) # $a3, 0x8004 -/* 0F7E24 7F0C5434 AFA20060 */ sw $v0, 0x60($sp) -/* 0F7E28 7F0C5438 8CE7AB00 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0F7E2C 7F0C543C 27A40064 */ addiu $a0, $sp, 0x64 -/* 0F7E30 7F0C5440 27A50068 */ addiu $a1, $sp, 0x68 -/* 0F7E34 7F0C5444 00403025 */ move $a2, $v0 -/* 0F7E38 7F0C5448 AFA00014 */ sw $zero, 0x14($sp) -/* 0F7E3C 7F0C544C 0FC2B713 */ jal textMeasure -/* 0F7E40 7F0C5450 AFB80010 */ sw $t8, 0x10($sp) -/* 0F7E44 7F0C5454 0C000FD9 */ jal viGetViewLeft -/* 0F7E48 7F0C5458 00000000 */ nop -/* 0F7E4C 7F0C545C 0C000FBB */ jal viGetViewWidth -/* 0F7E50 7F0C5460 A7A20056 */ sh $v0, 0x56($sp) -/* 0F7E54 7F0C5464 87A80056 */ lh $t0, 0x56($sp) -/* 0F7E58 7F0C5468 8FAE0068 */ lw $t6, 0x68($sp) -/* 0F7E5C 7F0C546C 00026843 */ sra $t5, $v0, 1 -/* 0F7E60 7F0C5470 01A8C821 */ addu $t9, $t5, $t0 -/* 0F7E64 7F0C5474 000E7843 */ sra $t7, $t6, 1 -/* 0F7E68 7F0C5478 032F5023 */ subu $t2, $t9, $t7 -/* 0F7E6C 7F0C547C 0C000FDD */ jal viGetViewTop -/* 0F7E70 7F0C5480 AFAA0070 */ sw $t2, 0x70($sp) -/* 0F7E74 7F0C5484 0C000FBF */ jal viGetViewHeight -/* 0F7E78 7F0C5488 A7A20056 */ sh $v0, 0x56($sp) -/* 0F7E7C 7F0C548C 87A80056 */ lh $t0, 0x56($sp) -/* 0F7E80 7F0C5490 8FA90064 */ lw $t1, 0x64($sp) -/* 0F7E84 7F0C5494 0002C043 */ sra $t8, $v0, 1 -/* 0F7E88 7F0C5498 8FAA0070 */ lw $t2, 0x70($sp) -/* 0F7E8C 7F0C549C 8FAE0068 */ lw $t6, 0x68($sp) -/* 0F7E90 7F0C54A0 03086021 */ addu $t4, $t8, $t0 -/* 0F7E94 7F0C54A4 00096843 */ sra $t5, $t1, 1 -/* 0F7E98 7F0C54A8 018D1823 */ subu $v1, $t4, $t5 -/* 0F7E9C 7F0C54AC 0069C821 */ addu $t9, $v1, $t1 -/* 0F7EA0 7F0C54B0 272F0001 */ addiu $t7, $t9, 1 -/* 0F7EA4 7F0C54B4 014E3821 */ addu $a3, $t2, $t6 -/* 0F7EA8 7F0C54B8 24E70001 */ addiu $a3, $a3, 1 -/* 0F7EAC 7F0C54BC AFAF0010 */ sw $t7, 0x10($sp) -/* 0F7EB0 7F0C54C0 2466FFFF */ addiu $a2, $v1, -1 -/* 0F7EB4 7F0C54C4 AFA3006C */ sw $v1, 0x6c($sp) -/* 0F7EB8 7F0C54C8 02202025 */ move $a0, $s1 -/* 0F7EBC 7F0C54CC AFA00014 */ sw $zero, 0x14($sp) -/* 0F7EC0 7F0C54D0 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 0F7EC4 7F0C54D4 2545FFFF */ addiu $a1, $t2, -1 -/* 0F7EC8 7F0C54D8 0C000F9B */ jal viGetX -/* 0F7ECC 7F0C54DC 00408825 */ move $s1, $v0 -/* 0F7ED0 7F0C54E0 00028400 */ sll $s0, $v0, 0x10 -/* 0F7ED4 7F0C54E4 00105C03 */ sra $t3, $s0, 0x10 -/* 0F7ED8 7F0C54E8 0C000F9F */ jal viGetY -/* 0F7EDC 7F0C54EC 01608025 */ move $s0, $t3 -/* 0F7EE0 7F0C54F0 3C188004 */ lui $t8, %hi(ptrFontBankGothicChars) # $t8, 0x8004 -/* 0F7EE4 7F0C54F4 3C0C8004 */ lui $t4, %hi(ptrFontBankGothic) # $t4, 0x8004 -/* 0F7EE8 7F0C54F8 8D8CAAFC */ lw $t4, %lo(ptrFontBankGothic)($t4) -/* 0F7EEC 7F0C54FC 8F18AB00 */ lw $t8, %lo(ptrFontBankGothicChars)($t8) -/* 0F7EF0 7F0C5500 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0F7EF4 7F0C5504 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0F7EF8 7F0C5508 AFAD0018 */ sw $t5, 0x18($sp) -/* 0F7EFC 7F0C550C 02202025 */ move $a0, $s1 -/* 0F7F00 7F0C5510 27A50070 */ addiu $a1, $sp, 0x70 -/* 0F7F04 7F0C5514 27A6006C */ addiu $a2, $sp, 0x6c -/* 0F7F08 7F0C5518 8FA70060 */ lw $a3, 0x60($sp) -/* 0F7F0C 7F0C551C AFB0001C */ sw $s0, 0x1c($sp) -/* 0F7F10 7F0C5520 AFA20020 */ sw $v0, 0x20($sp) -/* 0F7F14 7F0C5524 AFA00024 */ sw $zero, 0x24($sp) -/* 0F7F18 7F0C5528 AFA00028 */ sw $zero, 0x28($sp) -/* 0F7F1C 7F0C552C AFAC0014 */ sw $t4, 0x14($sp) -/* 0F7F20 7F0C5530 0FC2B35F */ jal textRender -/* 0F7F24 7F0C5534 AFB80010 */ sw $t8, 0x10($sp) -/* 0F7F28 7F0C5538 0FC2B06C */ jal combiner_bayer_lod_perspective -/* 0F7F2C 7F0C553C 00402025 */ move $a0, $v0 -/* 0F7F30 7F0C5540 00408825 */ move $s1, $v0 -.L7F0C5544: -/* 0F7F34 7F0C5544 02201025 */ move $v0, $s1 -.L7F0C5548: -/* 0F7F38 7F0C5548 8FBF003C */ lw $ra, 0x3c($sp) -/* 0F7F3C 7F0C554C 8FB00034 */ lw $s0, 0x34($sp) -/* 0F7F40 7F0C5550 8FB10038 */ lw $s1, 0x38($sp) -/* 0F7F44 7F0C5554 03E00008 */ jr $ra -/* 0F7F48 7F0C5558 27BD00D8 */ addiu $sp, $sp, 0xd8 -) -#endif - -#endif -s32 sub_GAME_7F0C6048(void) +s32 mpwatchShouldDisplayGauges(void) { return g_gameOverFlag ? FALSE : (g_CurrentPlayer->mpmenuon | (g_CurrentPlayer->healthdisplaytime > 0)); } -s32 checkGamePaused(void) { + +s32 checkGamePaused(void) +{ return g_pausedFlag; } diff --git a/src/game/mpmenu.h b/src/game/mpmenu.h index 590d8f22..d797d1f1 100644 --- a/src/game/mpmenu.h +++ b/src/game/mpmenu.h @@ -31,19 +31,16 @@ struct AwardMetrics { extern s32 g_stopPlayFlag; extern s32 g_gameOverFlag; -s32 mpFindMaxInt(int param_1, int param_2, int param_3, int param_4, int param_5); - -s32 mpFindMinInt(int param_1, int param_2, int param_3, int param_4, int param_5); - void mpwatchUnpauseGame(void); -Gfx *display_text_for_playerdata_on_MP_menu(Gfx *gdl, s32 x, s32 y, u16* arg3, TEXTCOLORS text_color); +Gfx *display_text_for_playerdata_on_MP_menu(Gfx *gdl, s32 x, s32 y, s32 points, TEXTCOLORS text_color); s32 checkGamePaused(void); -void mpCalculateAwards(int arg0); +void mpCalculateAwards(bool gameoverdelay); s32 get_points_for_mp_player(s32 arg0); void mpwatchSetStopPlayFlag(void); Gfx * mp_watch_menu_display(Gfx *arg0); s32 disablePlayerActionsWhenPausedOrInMpMenu(void); +s32 mpwatchShouldDisplayGauges(void); #endif diff --git a/src/game/ob.h b/src/game/ob.h index e034f9ac..50989180 100644 --- a/src/game/ob.h +++ b/src/game/ob.h @@ -44,10 +44,10 @@ void *_fileIndexLoadToAddr(int index, FILELOADMETHOD param_2, u8 *ptrdata, int s void *_fileIndexLoadToBank(s32 index, FILELOADMETHOD param_2, s32 size, u8 bank); #endif +void fileSetSize(s32 filenum, u8* ptr, u32 size, s32 reallocate); s32 get_pc_buffer_remaining_value(u8 *name); s32 get_rom_remaining_buffer_for_index(s32 index); s32 get_pc_remaining_buffer_for_index(s32 index); s32 fileGetIndex(char *resname); -s32 get_pc_remaining_buffer_for_index(s32 index); #endif diff --git a/src/game/objecthandler.c b/src/game/objecthandler.c index 0c7d8ad1..ef7a5bd2 100644 --- a/src/game/objecthandler.c +++ b/src/game/objecthandler.c @@ -5,7 +5,7 @@ // bss //CODE.bss:80076A50 -char dword_CODE_bss_80076A50[0xC]; +char g_ModelHitEntries[0xC]; //CODE.bss:80076A5C u32 dword_CODE_bss_80076A5C; //CODE.bss:80076A60 @@ -49,21 +49,21 @@ char dword_CODE_bss_80076ADE; char dword_CODE_bss_80076ADF; char dword_CODE_bss_80076AE0[0x2E28]; //CODE.bss:80079908 -char dword_CODE_bss_80079908[0x28]; +char g_ModelHitEntriesPenultimate[0x28]; //CODE.bss:80079930 -struct ptr_0_s *ptr_allocation_0; +struct AnimModelSlot *g_AnimModelSlots; //CODE.bss:80079934 -struct ptr_1_s *ptr_allocation_1; +struct ModelSlot *g_ModelSlots; // data //D:80036070 -u32 D_80036070 = 0; +s32 g_MaxAnimModelSlots = 0; //D:80036074 -u32 D_80036074 = 0; +s32 g_MaxModelSlots = 0; //D:80036078 -u32 D_80036078 = 0; +s32 g_ModelIsLvResetting = 0; //D:8003607C u32 D_8003607C = 0; //D:80036080 @@ -75,31 +75,15 @@ f32 g_ModelDistanceScale = 1.0; //D:8003608C struct Vertex* (*vtxallocator)(s32 numvertices) = NULL; //D:80036090 -u32 D_80036090 = 0; +void (*g_ModelJointPositionedFunc)(s32 mtxindex, Mtxf *mtx) = NULL; //D:80036094 -u32 D_80036094 = 0; -//D:80036098 -u32 D_80036098 = 0; -//D:8003609C -u32 D_8003609C = 0; +coord3d D_80036094 = {0}; //D:800360A0 -u32 D_800360A0 = 0; -//D:800360A4 -u32 D_800360A4 = 0; -//D:800360A8 -u32 D_800360A8 = 0; +coord3d D_800360A0 = {0}; //D:800360AC -u32 D_800360AC = 0; -//D:800360B0 -u32 D_800360B0 = 0; -//D:800360B4 -u32 D_800360B4 = 0; +coord3d D_800360AC = {0}; //D:800360B8 -u32 D_800360B8 = 0; -//D:800360BC -u32 D_800360BC = 0; -//D:800360C0 -u32 D_800360C0 = 0; +coord3d D_800360B8 = {0}; //D:800360C4 struct bondstruct_unk_op07_related D_800360C4[32] = { { 0, 0, 0x10 }, @@ -137,19 +121,12 @@ struct bondstruct_unk_op07_related D_800360C4[32] = { }; //D:80036244 -u32 D_80036244 = 0; -//D:80036248 -u32 D_80036248 = 0; -//D:8003624C -u32 D_8003624C = 0; +coord3d D_80036244 = { 0 }; //D:80036250 u32 g_ModelAnimMergingEnabled = 1; //D:80036254 -u32 D_80036254 = 0; -//D:80036258 -u32 D_80036258 = 0; -//D:8003625C -u32 D_8003625C = 0; +coord3d D_80036254 = { 0 }; + //D:80036260 u32 D_80036260 = 0; //D:80036264 @@ -266,19 +243,16 @@ u32 D_800363F0 = 0x50; //D:800363F4 u32 D_800363F4 = 0; //D:800363F8 -u32 D_800363F8 = 0; -//D:800363FC -u32 D_800363FC = 0; -//D:80036400 -u32 D_80036400 = 0; -//D:80036404 -u32 D_80036404 = 0xFFFFFF50; +Vtx D_800363F8 = { + { + { 0, 0, 0 }, + 0, + { 0, 0 }, + { 0xFF, 0xFF, 0xFF, 0x50 } + } +}; //D:80036408 -f32 D_80036408 = 1.0f; -//D:8003640C -u32 D_8003640C = 0; -//D:80036410 -s32 D_80036410 = 0; +coord3d D_80036408 = { 1.0f, 0.0f, 0.0f }; //D:80036414 struct bondstruct_unk_animation_related* D_80036414 = 0; //D:80036418 @@ -292,1972 +266,973 @@ s32 D_8003641C = 0; /* */ +ModelHitEntry* sub_GAME_7F06B120(ModelHitEntry* head, Model* context) { + ModelHitEntry* freeListCursor; + ModelNode* sceneCursor; + ModelNode* childPtr; + s32 nodeType; + + sceneCursor = context->obj->RootNode; + freeListCursor = g_ModelHitFreeList; + + while ((sceneCursor != NULL) && (freeListCursor != NULL)) { + nodeType = sceneCursor->Opcode & 0xFF; + + switch (nodeType) { + case 1: + case 2: + case 3: + case 0xb: + case 0xc: + case 0xd: + case 0xe: + case 0xf: + case 0x10: + case 0x15: + freeListCursor->model = context; + freeListCursor->rootnode = sceneCursor; + freeListCursor = freeListCursor->next; + break; + + default: + break; + } + + childPtr = sceneCursor->Child; + if (childPtr != NULL) { + sceneCursor = childPtr; + continue; + } + + while (sceneCursor != NULL) { + childPtr = sceneCursor->Next; + if (childPtr != NULL) { + sceneCursor = childPtr; + break; + } + sceneCursor = sceneCursor->Parent; + } + } + + if (freeListCursor != g_ModelHitFreeList) { + if (head != NULL) { + ModelHitEntry *tail = head; + + while (tail->next != NULL) { + tail = tail->next; + } + + tail->next = g_ModelHitFreeList; + g_ModelHitFreeList->prev = tail; + } else { + head = g_ModelHitFreeList; + } + + if (freeListCursor != NULL) { + ModelHitEntry* prevNode = freeListCursor->prev; + if (prevNode != NULL) { + prevNode->next = NULL; + freeListCursor->prev = NULL; + } + } + + g_ModelHitFreeList = freeListCursor; + } + + return head; +} -#ifdef NONMATCHING -*makejointlist * / - void sub_GAME_7F06B120(void) +void sub_GAME_7F06B248(ModelHitEntry *entry) { - local_20 = **(param_2 + 8); - local_1c = freedist; - do - { - while (true) + ModelHitEntry *oldhead; + ModelHitEntry *tail; + + if (entry != NULL) { + oldhead = g_ModelHitFreeList; + if (oldhead != NULL) { + tail = entry; + while (tail->next != NULL) { + tail = tail->next; + } + tail->next = oldhead; + g_ModelHitFreeList->prev = tail; + } + g_ModelHitFreeList = entry; + } +} + + +#define OP16_NODEINDEX_0C(data) (((ModelNode_Op16Record *)(data))->nodeindex0c) +#define OP16_NODEINDEX_0E(data) (((ModelNode_Op16Record *)(data))->nodeindex0e) +#define OP16_NODEINDEX_10(data) (((ModelNode_Op16Record *)(data))->nodeindex10) + +#define OP16_POS_X_VOL(data) (((volatile ModelNode_Op16Record *)(data))->pos.f[0]) +#define OP16_POS_Y_VOL(data) (((volatile ModelNode_Op16Record *)(data))->pos.f[1]) +#define OP16_POS_Z_VOL(data) (((volatile ModelNode_Op16Record *)(data))->pos.f[2]) + +/** + * Address: 7F06B29C + */ +void sub_GAME_7F06B29C(ModelHitEntry *arg0) +{ + ModelHitEntry *entry; + ModelHitEntry *special; + + entry = arg0; + special = NULL; + + while (arg0 != NULL) { + ModelNode *node = arg0->rootnode; + u16 opcode = node->Opcode; + + switch (opcode & 0xFF) { - if ((local_20 == NULL) || (local_1c == NULL)) + case MODELNODE_OPCODE_HEADER: { - param_11 = param_1; - if (local_1c != freedist) + union ModelRoData *data; + ModelNode *othernode; + Mtxf *mtx; + + data = node->Data; + othernode = data->Header.FirstGroupNode; + + mtx = modelFindNodeMtx(arg0->model, node, 0); + + if (othernode != NULL) { - piStack_14 = param_1; - if (param_1 == NULL) + Mtxf *othermtx; + + othermtx = modelFindNodeMtx(arg0->model, othernode, 0); + arg0->sortvalue = -(mtx->m[3][2] + othermtx->m[3][2]) * 0.5f; + } + else + { + arg0->sortvalue = -mtx->m[3][2]; + } + break; + } + + case MODELNODE_OPCODE_GROUP: + { + union ModelRoData *data; + ModelNode *othernode; + Mtxf *mtx; + + data = node->Data; + othernode = data->Group.ChildGroupNode; + + mtx = modelFindNodeMtx(arg0->model, node, 0); + + if (othernode != NULL) + { + Mtxf *othermtx; + + othermtx = modelFindNodeMtx(arg0->model, othernode, 0); + arg0->sortvalue = -(mtx->m[3][2] + othermtx->m[3][2]) * 0.5f; + } + else + { + arg0->sortvalue = -mtx->m[3][2]; + } + break; + } + + case MODELNODE_OPCODE_OP03: + { + union ModelRoData *data; + ModelNode *othernode; + Mtxf *mtx; + + data = node->Data; + othernode = data->Group.ChildGroupNode; + + mtx = modelFindNodeMtx(arg0->model, node, 0); + + if (othernode != NULL) + { + Mtxf *othermtx; + + othermtx = modelFindNodeMtx(arg0->model, othernode, 0); + arg0->sortvalue = -(mtx->m[3][2] + othermtx->m[3][2]) * 0.5f; + } + else + { + arg0->sortvalue = -mtx->m[3][2]; + } + break; + } + + case MODELNODE_OPCODE_GROUPSIMPLE: + { + Mtxf *mtx; + + mtx = modelFindNodeMtx(arg0->model, node, 0); + arg0->sortvalue = -mtx->m[3][2]; + break; + } + + case MODELNODE_OPCODE_OP14: + { + Mtxf *mtx; + f32 *data; + + mtx = modelFindNodeMtx(arg0->model, node, 0); + data = (f32 *)node->Data; + + arg0->sortvalue = -(data[0] * mtx->m[0][2] + + data[1] * mtx->m[1][2] + + data[2] * mtx->m[2][2] + + mtx->m[3][2]); + break; + } + + case MODELNODE_OPCODE_INTERLINK: + { + Mtxf *mtx; + ModelRoData_InterlinkageRecord *interlinkage; + f32 sortvalue1; + f32 sortvalue2; + + mtx = modelFindNodeMtx(arg0->model, node, 0); + interlinkage = &node->Data->Interlinkage; + + sortvalue1 = -(interlinkage->pos.x * mtx->m[0][2] + + interlinkage->pos.y * mtx->m[1][2] + + interlinkage->pos.z * mtx->m[2][2] + + mtx->m[3][2]); + + sortvalue2 = -(interlinkage->pos2.x * mtx->m[0][2] + + interlinkage->pos2.y * mtx->m[1][2] + + interlinkage->pos2.z * mtx->m[2][2] + + mtx->m[3][2]); + + if (sortvalue1 < sortvalue2) + { + arg0->sortvalue = sortvalue1; + } + else + { + arg0->sortvalue = sortvalue2; + } + break; + } + + case MODELNODE_OPCODE_OP16: + { + Mtxf *mtx; + f32 *data; + + mtx = modelFindNodeMtx(arg0->model, node, 0); + data = (f32 *)node->Data; + + arg0->sortvalue = -(data[0] * mtx->m[0][2] + + data[1] * mtx->m[1][2] + + data[2] * mtx->m[2][2] + + mtx->m[3][2]); + + special = arg0; + break; + } + + case MODELNODE_OPCODE_OP11: + { + Mtxf *mtx; + ModelRoData_Op11Record *op11; + + mtx = modelFindNodeMtx(arg0->model, node, 0); + op11 = &node->Data->Op11; + + arg0->sortvalue = -(op11->pos.x * mtx->m[0][2] + + op11->pos.y * mtx->m[1][2] + + op11->pos.z * mtx->m[2][2] + + mtx->m[3][2]); + break; + } + + case MODELNODE_OPCODE_GUNFIRE: + { + Mtxf *mtx; + f32 *data; + + mtx = modelFindNodeMtx(arg0->model, node, 0); + data = (f32 *)node->Data; + + arg0->sortvalue = -(data[0] * mtx->m[0][2] + + data[1] * mtx->m[1][2] + + data[2] * mtx->m[2][2] + + mtx->m[3][2]); + break; + } + + case MODELNODE_OPCODE_SHADOW: + { + Mtxf *mtx; + ModelRoData_ShadowRecord *shadow; + union ModelRwData *rwdata; + + mtx = modelFindNodeMtx(arg0->model, node, 0); + shadow = &node->Data->Shadow; + + rwdata = modelGetNodeRwData(arg0->model, shadow->HeaderNode); + + arg0->sortvalue = -(shadow->pos.x * mtx->m[0][2] + + (rwdata->Header.ground - rwdata->Header.pos.y) * mtx->m[1][2] + + shadow->pos.y * mtx->m[2][2] + + mtx->m[3][2]); + break; + } + } + + arg0 = arg0->next; + } + + if (special != NULL) + { + Model *model = special->model; + + if (model->attachedto != NULL) + { + ModelNode **switches; + ModelNode *node0e; + ModelNode *specialnode; + void *op16data; + ModelNode *node0c; + ModelNode *node10; + ModelHitEntry *entry0e; + ModelHitEntry *entry0c; + ModelHitEntry *entry10; + Mtxf *mtx; + f32 axis2dot; + f32 axis1dot; + f32 sort0e; + coord3d axis2; + coord3d axis1; + f32 sort0c; + f32 sort10; + coord3d transformed; + ModelHitEntry *scan; + f32 tempf; + + tempf = special->sortvalue; + specialnode = special->rootnode; + op16data = specialnode->Data; + + switches = model->attachedto->obj->Switches; + + node0e = switches[OP16_NODEINDEX_0E(op16data)]; + node0c = switches[OP16_NODEINDEX_0C(op16data)]; + node10 = switches[OP16_NODEINDEX_10(op16data)]; + + entry10 = NULL; + entry0e = NULL; + entry0c = NULL; + + + mtx = modelFindNodeMtx(model, specialnode, 0); + scan = entry; + + while (scan != NULL) + { + if (node0e == scan->rootnode) + { + entry0e = scan; + } + + if (node0c == scan->rootnode) + { + entry0c = scan; + } + + if (node10 == scan->rootnode) + { + entry10 = scan; + } + + scan = scan->next; + } + + axis2.f[0] = mtx->m[2][0]; + axis2.f[1] = mtx->m[2][1]; + axis2.f[2] = mtx->m[2][2]; + + axis1.f[0] = mtx->m[1][0]; + axis1.f[1] = mtx->m[1][1]; + axis1.f[2] = mtx->m[1][2]; + + transformed.f[0] = OP16_POS_X_VOL(op16data) * mtx->m[0][0] + + OP16_POS_Y_VOL(op16data) * mtx->m[1][0] + + OP16_POS_Z_VOL(op16data) * mtx->m[2][0] + + mtx->m[3][0]; + + transformed.f[1] = OP16_POS_X_VOL(op16data) * mtx->m[0][1] + + OP16_POS_Y_VOL(op16data) * mtx->m[1][1] + + OP16_POS_Z_VOL(op16data) * mtx->m[2][1] + + mtx->m[3][1]; + + transformed.f[2] = OP16_POS_X_VOL(op16data) * mtx->m[0][2] + + OP16_POS_Y_VOL(op16data) * mtx->m[1][2] + + OP16_POS_Z_VOL(op16data) * mtx->m[2][2] + + mtx->m[3][2]; + + axis2dot = axis2.f[0] * transformed.f[0] + + axis2.f[1] * transformed.f[1] + + axis2.f[2] * transformed.f[2]; + axis1dot = axis1.f[0] * transformed.f[0] + + axis1.f[1] * transformed.f[1] + + axis1.f[2] * transformed.f[2]; + + + sort0e = entry0e->sortvalue; + sort0c = entry0c->sortvalue; + sort10 = entry10->sortvalue; + if (axis2dot < 0.0f) + { + if (sort10 < sort0e) + { + if (sort10 < tempf) { - param_11 = freedist; + special->sortvalue = sort10 - 0.000030517578125f; // 2/65536 + } + } + else + { + if (sort0e < tempf) + { + special->sortvalue = sort0e - 0.000030517578125f; // 2/65536 + } + } + } + else if (0.0f <= axis2dot) + { + if (tempf < sort0e) + { + entry0e->sortvalue = tempf - 0.00006103515625f; // 4/65536 + } + + if (tempf < sort10) + { + if (sort10 < sort0e) + { + entry10->sortvalue = tempf - 0.000091552734375f; // 6/65536 } else { - for (; piStack_14[3] != 0; piStack_14 = piStack_14[3]) + entry10->sortvalue = tempf - 0.000030517578125f; // 2/65536 + } + } + } + + if (axis1dot < 0.0f) + { + if (sort0c < special->sortvalue) + { + if (entry0e->sortvalue < special->sortvalue && sort0c < entry0e->sortvalue) + { + entry0e->sortvalue = sort0c - 0.00006103515625f; // 4/65536 + } + + if (entry10->sortvalue < special->sortvalue && sort0c < entry10->sortvalue) + { + if (sort10 < sort0e) { - } - piStack_14[3] = freedist; - freedist[4] = piStack_14; - } - if ((local_1c != NULL) && (local_1c[4] != 0)) - { - *(local_1c[4] + 0xc) = 0; - local_1c[4] = 0; - } - freedist = local_1c; - } - if (freedist == NULL) - { - piVar1 = osSyncPrintf("makejointlist: freedist is NULL!\n", param_2, param_3, param_4, param_5, param_6, param_7); - return piVar1; - } - return param_11; - } - switch (*local_20 & 0xff) - { - case 1: - case 2: - case 3: - case 0xb: - case 0xc: - case 0xd: - case 0xe: - case 0xf: - case 0x10: - case 0x15: - *local_1c = param_2; - local_1c[1] = local_20; - local_1c = local_1c[3]; - } - if (*(local_20 + 10) == 0) break; - local_20 = *(local_20 + 10); - } - for (; local_20 != NULL; local_20 = *(local_20 + 4)) - { - if (*(local_20 + 6) != 0) - { - local_20 = *(local_20 + 6); - break; - } - } - } while (true); -} -#else - -GLOBAL_ASM( -.late_rodata -/*D:80054490*/ -glabel jpt_80054490 -.word loc_CODE_7F06B174 -.word loc_CODE_7F06B174 -.word loc_CODE_7F06B174 -.word def_7F06B16C -.word def_7F06B16C -.word def_7F06B16C -.word def_7F06B16C -.word def_7F06B16C -.word def_7F06B16C -.word def_7F06B16C -.word loc_CODE_7F06B174 -.word loc_CODE_7F06B174 -.word loc_CODE_7F06B174 -.word loc_CODE_7F06B174 -.word loc_CODE_7F06B174 -.word loc_CODE_7F06B174 -.word def_7F06B16C -.word def_7F06B16C -.word def_7F06B16C -.word def_7F06B16C -.word loc_CODE_7F06B174 - -.text -glabel sub_GAME_7F06B120 -/* 09FC50 7F06B120 8CAE0008 */ lw $t6, 8($a1) -/* 09FC54 7F06B124 3C078003 */ lui $a3, %hi(D_80036060) -/* 09FC58 7F06B128 24E76060 */ addiu $a3, %lo(D_80036060) # addiu $a3, $a3, 0x6060 -/* 09FC5C 7F06B12C 8DC20000 */ lw $v0, ($t6) -/* 09FC60 7F06B130 00803025 */ move $a2, $a0 -/* 09FC64 7F06B134 8CE30000 */ lw $v1, ($a3) -/* 09FC68 7F06B138 50400027 */ beql $v0, $zero, .L7F06B1D8 -/* 09FC6C 7F06B13C 8CE20000 */ lw $v0, ($a3) -/* 09FC70 7F06B140 50600025 */ beql $v1, $zero, .L7F06B1D8 -/* 09FC74 7F06B144 8CE20000 */ lw $v0, ($a3) -/* 09FC78 7F06B148 94440000 */ lhu $a0, ($v0) -.L7F06B14C: -/* 09FC7C 7F06B14C 308F00FF */ andi $t7, $a0, 0xff -/* 09FC80 7F06B150 25F8FFFF */ addiu $t8, $t7, -1 -/* 09FC84 7F06B154 2F010015 */ sltiu $at, $t8, 0x15 -/* 09FC88 7F06B158 1020000B */ beqz $at, .L7F06B188 -/* 09FC8C 7F06B15C 0018C080 */ sll $t8, $t8, 2 -/* 09FC90 7F06B160 3C018005 */ lui $at, %hi(jpt_80054490) -/* 09FC94 7F06B164 00380821 */ addu $at, $at, $t8 -/* 09FC98 7F06B168 8C384490 */ lw $t8, %lo(jpt_80054490)($at) -/* 09FC9C 7F06B16C 03000008 */ jr $t8 -/* 09FCA0 7F06B170 00000000 */ nop -loc_CODE_7F06B174: -/* 09FCA4 7F06B174 AC650000 */ sw $a1, ($v1) -/* 09FCA8 7F06B178 AC620004 */ sw $v0, 4($v1) -/* 09FCAC 7F06B17C 8C63000C */ lw $v1, 0xc($v1) -/* 09FCB0 7F06B180 10000002 */ b .L7F06B18C -/* 09FCB4 7F06B184 8C440014 */ lw $a0, 0x14($v0) -def_7F06B16C: -.L7F06B188: -/* 09FCB8 7F06B188 8C440014 */ lw $a0, 0x14($v0) -.L7F06B18C: -/* 09FCBC 7F06B18C 10800003 */ beqz $a0, .L7F06B19C -/* 09FCC0 7F06B190 00000000 */ nop -/* 09FCC4 7F06B194 1000000B */ b .L7F06B1C4 -/* 09FCC8 7F06B198 00801025 */ move $v0, $a0 -.L7F06B19C: -/* 09FCCC 7F06B19C 10400009 */ beqz $v0, .L7F06B1C4 -/* 09FCD0 7F06B1A0 00000000 */ nop -/* 09FCD4 7F06B1A4 8C44000C */ lw $a0, 0xc($v0) -.L7F06B1A8: -/* 09FCD8 7F06B1A8 50800004 */ beql $a0, $zero, .L7F06B1BC -/* 09FCDC 7F06B1AC 8C420008 */ lw $v0, 8($v0) -/* 09FCE0 7F06B1B0 10000004 */ b .L7F06B1C4 -/* 09FCE4 7F06B1B4 00801025 */ move $v0, $a0 -/* 09FCE8 7F06B1B8 8C420008 */ lw $v0, 8($v0) -.L7F06B1BC: -/* 09FCEC 7F06B1BC 5440FFFA */ bnezl $v0, .L7F06B1A8 -/* 09FCF0 7F06B1C0 8C44000C */ lw $a0, 0xc($v0) -.L7F06B1C4: -/* 09FCF4 7F06B1C4 50400004 */ beql $v0, $zero, .L7F06B1D8 -/* 09FCF8 7F06B1C8 8CE20000 */ lw $v0, ($a3) -/* 09FCFC 7F06B1CC 5460FFDF */ bnezl $v1, .L7F06B14C -/* 09FD00 7F06B1D0 94440000 */ lhu $a0, ($v0) -/* 09FD04 7F06B1D4 8CE20000 */ lw $v0, ($a3) -.L7F06B1D8: -/* 09FD08 7F06B1D8 10620019 */ beq $v1, $v0, .L7F06B240 -/* 09FD0C 7F06B1DC 00000000 */ nop -/* 09FD10 7F06B1E0 50C0000F */ beql $a2, $zero, .L7F06B220 -/* 09FD14 7F06B1E4 00403025 */ move $a2, $v0 -/* 09FD18 7F06B1E8 8CD9000C */ lw $t9, 0xc($a2) -/* 09FD1C 7F06B1EC 00C02025 */ move $a0, $a2 -/* 09FD20 7F06B1F0 53200007 */ beql $t9, $zero, .L7F06B210 -/* 09FD24 7F06B1F4 AC82000C */ sw $v0, 0xc($a0) -/* 09FD28 7F06B1F8 8C85000C */ lw $a1, 0xc($a0) -/* 09FD2C 7F06B1FC 00A02025 */ move $a0, $a1 -.L7F06B200: -/* 09FD30 7F06B200 8CA5000C */ lw $a1, 0xc($a1) -/* 09FD34 7F06B204 54A0FFFE */ bnezl $a1, .L7F06B200 -/* 09FD38 7F06B208 00A02025 */ move $a0, $a1 -/* 09FD3C 7F06B20C AC82000C */ sw $v0, 0xc($a0) -.L7F06B210: -/* 09FD40 7F06B210 8CE80000 */ lw $t0, ($a3) -/* 09FD44 7F06B214 10000002 */ b .L7F06B220 -/* 09FD48 7F06B218 AD040010 */ sw $a0, 0x10($t0) -/* 09FD4C 7F06B21C 00403025 */ move $a2, $v0 -.L7F06B220: -/* 09FD50 7F06B220 50600007 */ beql $v1, $zero, .L7F06B240 -/* 09FD54 7F06B224 ACE30000 */ sw $v1, ($a3) -/* 09FD58 7F06B228 8C620010 */ lw $v0, 0x10($v1) -/* 09FD5C 7F06B22C 50400004 */ beql $v0, $zero, .L7F06B240 -/* 09FD60 7F06B230 ACE30000 */ sw $v1, ($a3) -/* 09FD64 7F06B234 AC40000C */ sw $zero, 0xc($v0) -/* 09FD68 7F06B238 AC600010 */ sw $zero, 0x10($v1) -/* 09FD6C 7F06B23C ACE30000 */ sw $v1, ($a3) -.L7F06B240: -/* 09FD70 7F06B240 03E00008 */ jr $ra -/* 09FD74 7F06B244 00C01025 */ move $v0, $a2 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F06B248(void) -{ - int iVar1; - int local_10; - - iVar1 = freedist; - if ((param_1 != 0) && (iVar1 = param_1, local_10 = param_1, freedist != 0)) - { - for (; *(local_10 + 0xc) != 0; local_10 = *(local_10 + 0xc)) - { - } - *(local_10 + 0xc) = freedist; - *(freedist + 0x10) = local_10; - iVar1 = param_1; - } - freedist = iVar1; - return; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F06B248 -/* 09FD78 7F06B248 10800012 */ beqz $a0, .L7F06B294 -/* 09FD7C 7F06B24C 3C068003 */ lui $a2, %hi(D_80036060) -/* 09FD80 7F06B250 24C66060 */ addiu $a2, %lo(D_80036060) # addiu $a2, $a2, 0x6060 -/* 09FD84 7F06B254 8CC20000 */ lw $v0, ($a2) -/* 09FD88 7F06B258 5040000E */ beql $v0, $zero, .L7F06B294 -/* 09FD8C 7F06B25C ACC40000 */ sw $a0, ($a2) -/* 09FD90 7F06B260 8C8E000C */ lw $t6, 0xc($a0) -/* 09FD94 7F06B264 00801825 */ move $v1, $a0 -/* 09FD98 7F06B268 51C00007 */ beql $t6, $zero, .L7F06B288 -/* 09FD9C 7F06B26C AC62000C */ sw $v0, 0xc($v1) -/* 09FDA0 7F06B270 8C65000C */ lw $a1, 0xc($v1) -/* 09FDA4 7F06B274 00A01825 */ move $v1, $a1 -.L7F06B278: -/* 09FDA8 7F06B278 8CA5000C */ lw $a1, 0xc($a1) -/* 09FDAC 7F06B27C 54A0FFFE */ bnezl $a1, .L7F06B278 -/* 09FDB0 7F06B280 00A01825 */ move $v1, $a1 -/* 09FDB4 7F06B284 AC62000C */ sw $v0, 0xc($v1) -.L7F06B288: -/* 09FDB8 7F06B288 8CCF0000 */ lw $t7, ($a2) -/* 09FDBC 7F06B28C ADE30010 */ sw $v1, 0x10($t7) -/* 09FDC0 7F06B290 ACC40000 */ sw $a0, ($a2) -.L7F06B294: -/* 09FDC4 7F06B294 03E00008 */ jr $ra -/* 09FDC8 7F06B298 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F06B29C(void) -{ - local_10c = NULL; - piStack_34 = param_1; - for (param_11 = piStack_34; param_11 != NULL; param_11 = param_11[3]) - { - puVar5 = param_11[1]; - switch (*puVar5 & 0xff) - { - case 1: - iVar14 = *(*(puVar5 + 2) + 4); - lVar13 = modelFindNodeMtx(*param_11, puVar5, 0); - if (iVar14 == 0) - { - param_11[2] = -*(lVar13 + 0x38); - } - else - { - lVar12 = modelFindNodeMtx(*param_11, iVar14, 0); - param_11[2] = -(*(lVar13 + 0x38) + *(lVar12 + 0x38)) * 0.5; - } - break; - case 2: - iVar14 = *(*(puVar5 + 2) + 0x14); - lVar13 = modelFindNodeMtx(*param_11, puVar5, 0); - if (iVar14 == 0) - { - param_11[2] = -*(lVar13 + 0x38); - } - else - { - lVar12 = modelFindNodeMtx(*param_11, iVar14, 0); - param_11[2] = -(*(lVar13 + 0x38) + *(lVar12 + 0x38)) * 0.5; - } - break; - case 3: - iVar14 = *(*(puVar5 + 2) + 0x14); - lVar13 = modelFindNodeMtx(*param_11, puVar5, 0); - if (iVar14 == 0) - { - param_11[2] = -*(lVar13 + 0x38); - } - else - { - lVar12 = modelFindNodeMtx(*param_11, iVar14, 0); - param_11[2] = -(*(lVar13 + 0x38) + *(lVar12 + 0x38)) * 0.5; - } - break; - case 0xb: - lVar13 = modelFindNodeMtx(*param_11, puVar5, 0); - iVar14 = lVar13; - pfVar6 = *(puVar5 + 2); - param_11[2] = -(*pfVar6 * *(iVar14 + 8) + pfVar6[1] * *(iVar14 + 0x18) + - pfVar6[2] * *(iVar14 + 0x28) + *(iVar14 + 0x38)); - break; - case 0xc: - lVar13 = modelFindNodeMtx(*param_11, puVar5, 0); - iVar14 = lVar13; - pfVar6 = *(puVar5 + 2); - param_11[2] = -(*pfVar6 * *(iVar14 + 8) + pfVar6[1] * *(iVar14 + 0x18) + - pfVar6[2] * *(iVar14 + 0x28) + *(iVar14 + 0x38)); - break; - case 0xd: - lVar13 = modelFindNodeMtx(*param_11, puVar5, 0); - iVar14 = lVar13; - pfVar6 = *(puVar5 + 2); - lVar13 = modelGetNodeRwData(*param_11, pfVar6[4]); - param_11[2] = -(*pfVar6 * *(iVar14 + 8) + (*(lVar13 + 4) - *(lVar13 + 0xc)) * *(iVar14 + 0x18) + pfVar6[1] * *(iVar14 + 0x28) + *(iVar14 + 0x38)); - break; - case 0xe: - lVar13 = modelFindNodeMtx(*param_11, puVar5, 0); - iVar14 = lVar13; - pfVar6 = *(puVar5 + 2); - param_11[2] = -(*pfVar6 * *(iVar14 + 8) + pfVar6[1] * *(iVar14 + 0x18) + - pfVar6[2] * *(iVar14 + 0x28) + *(iVar14 + 0x38)); - break; - case 0xf: - lVar13 = modelFindNodeMtx(*param_11, puVar5, 0); - iVar14 = lVar13; - pfVar6 = *(puVar5 + 2); - fVar1 = -(*pfVar6 * *(iVar14 + 8) + pfVar6[1] * *(iVar14 + 0x18) + - pfVar6[2] * *(iVar14 + 0x28) + *(iVar14 + 0x38)); - fStack_18 = -(pfVar6[3] * *(iVar14 + 8) + pfVar6[4] * *(iVar14 + 0x18) + - pfVar6[5] * *(iVar14 + 0x28) + *(iVar14 + 0x38)); - if (fVar1 < fStack_18) - { - fStack_18 = fVar1; - } - param_11[2] = fStack_18; - break; - case 0x10: - lVar13 = modelFindNodeMtx(*param_11, puVar5, 0); - iVar14 = lVar13; - pfVar6 = *(puVar5 + 2); - param_11[2] = -(*pfVar6 * *(iVar14 + 8) + pfVar6[1] * *(iVar14 + 0x18) + - pfVar6[2] * *(iVar14 + 0x28) + *(iVar14 + 0x38)); - local_10c = param_11; - break; - case 0x15: - lVar13 = modelFindNodeMtx(*param_11, puVar5, 0); - param_11[2] = -*(lVar13 + 0x38); - } - } - if ((local_10c != NULL) && (iVar14 = *local_10c, *(iVar14 + 0x18) != 0)) - { - fVar1 = local_10c[2]; - pfVar6 = *(local_10c[1] + 4); - iVar7 = *(*(*(*(iVar14 + 0x18) + 8) + 8) + *(pfVar6 + 0xe) * 4); - iVar8 = *(*(*(*(iVar14 + 0x18) + 8) + 8) + *(pfVar6 + 3) * 4); - iVar9 = *(*(*(*(iVar14 + 0x18) + 8) + 8) + *(pfVar6 + 4) * 4); - piStack_64 = NULL; - piStack_2c = NULL; - piStack_30 = NULL; - lVar13 = modelFindNodeMtx(iVar14, local_10c[1], 0); - pfVar15 = lVar13; - for (; piStack_34 != NULL; piStack_34 = piStack_34[3]) - { - if (piStack_34[1] == iVar7) - { - piStack_64 = piStack_34; - } - if (piStack_34[1] == iVar8) - { - piStack_2c = piStack_34; - } - if (piStack_34[1] == iVar9) - { - piStack_30 = piStack_34; - } - } - fVar2 = *pfVar6 * *pfVar15 + pfVar6[1] * pfVar15[4] + pfVar6[2] * pfVar15[8] + pfVar15[0xc]; - fVar3 = *pfVar6 * pfVar15[1] + pfVar6[1] * pfVar15[5] + pfVar6[2] * pfVar15[9] + pfVar15[0xd]; - fVar4 = *pfVar6 * pfVar15[2] + pfVar6[1] * pfVar15[6] + pfVar6[2] * pfVar15[10] + pfVar15[0xe]; - fVar10 = pfVar15[8] * fVar2 + pfVar15[9] * fVar3 + pfVar15[10] * fVar4; - fVar11 = pfVar15[4] * fVar2 + pfVar15[5] * fVar3 + pfVar15[6] * fVar4; - fVar2 = piStack_64[2]; - fVar3 = piStack_2c[2]; - fVar4 = piStack_30[2]; - if (0.0 <= fVar10) - { - if (0.0 <= fVar10) - { - if (fVar1 < fVar2) - { - piStack_64[2] = fVar1 - 6.103516e-05; - } - if (fVar1 < fVar4) - { - if (fVar2 <= fVar4) - { - piStack_30[2] = fVar1 - 3.051758e-05; - } - else - { - piStack_30[2] = fVar1 - 9.155273e-05; - } - } - } - } - else if (fVar2 <= fVar4) - { - if (fVar2 < fVar1) - { - local_10c[2] = fVar2 - 3.051758e-05; - } - } - else if (fVar4 < fVar1) - { - local_10c[2] = fVar4 - 3.051758e-05; - } - if (0.0 <= fVar11) - { - if ((0.0 <= fVar11) && (local_10c[2] < fVar3)) - { - piStack_2c[2] = local_10c[2] - 1.525879e-05; - if ((fVar3 < fVar2) && (piStack_64[2] < piStack_2c[2])) - { - piStack_2c[2] = piStack_64[2] - 1.525879e-05; - } - if ((fVar3 < fVar4) && (piStack_30[2] < piStack_2c[2])) - { - piStack_2c[2] = piStack_30[2] - 1.525879e-05; - } - } - } - else if (fVar3 < local_10c[2]) - { - if ((piStack_64[2] < local_10c[2]) && (fVar3 < piStack_64[2])) - { - piStack_64[2] = fVar3 - 6.103516e-05; - } - if ((piStack_30[2] < local_10c[2]) && (fVar3 < piStack_30[2])) - { - if (fVar2 <= fVar4) - { - piStack_30[2] = fVar3 - 3.051758e-05; - } - else - { - piStack_30[2] = fVar3 - 9.155273e-05; - } - } - local_10c[2] = fVar3 - 1.525879e-05; - } - } -} -#else -GLOBAL_ASM( -.late_rodata -/*D:800544E4*/ -glabel jpt_800544E4 -.word .L7F06B2FC -.word .L7F06B360 -.word .L7F06B3C4 -.word .L7F06B6A4 -.word .L7F06B6A4 -.word .L7F06B6A4 -.word .L7F06B6A4 -.word .L7F06B6A4 -.word .L7F06B6A4 -.word .L7F06B6A4 -.word .L7F06B588 -.word .L7F06B5DC -.word .L7F06B630 -.word .L7F06B448 -.word .L7F06B49C -.word .L7F06B530 -.word .L7F06B6A4 -.word .L7F06B6A4 -.word .L7F06B6A4 -.word .L7F06B6A4 -.word .L7F06B428 -.size jpt_800544E4, . - jpt_800544E4 - -.text -glabel sub_GAME_7F06B29C -/* 09FDCC 7F06B29C 27BDFEE8 */ addiu $sp, $sp, -0x118 -/* 09FDD0 7F06B2A0 AFB10020 */ sw $s1, 0x20($sp) -/* 09FDD4 7F06B2A4 00808825 */ move $s1, $a0 -/* 09FDD8 7F06B2A8 AFBF0024 */ sw $ra, 0x24($sp) -/* 09FDDC 7F06B2AC AFB0001C */ sw $s0, 0x1c($sp) -/* 09FDE0 7F06B2B0 F7B40010 */ sdc1 $f20, 0x10($sp) -/* 09FDE4 7F06B2B4 AFA40114 */ sw $a0, 0x114($sp) -/* 09FDE8 7F06B2B8 108000FD */ beqz $a0, .L7F06B6B0 -/* 09FDEC 7F06B2BC AFA00110 */ sw $zero, 0x110($sp) -/* 09FDF0 7F06B2C0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 09FDF4 7F06B2C4 4481A000 */ mtc1 $at, $f20 -/* 09FDF8 7F06B2C8 00000000 */ nop -/* 09FDFC 7F06B2CC 8E300004 */ lw $s0, 4($s1) -.L7F06B2D0: -/* 09FE00 7F06B2D0 96020000 */ lhu $v0, ($s0) -/* 09FE04 7F06B2D4 305800FF */ andi $t8, $v0, 0xff -/* 09FE08 7F06B2D8 2719FFFF */ addiu $t9, $t8, -1 -/* 09FE0C 7F06B2DC 2F210015 */ sltiu $at, $t9, 0x15 -/* 09FE10 7F06B2E0 102000F0 */ beqz $at, .L7F06B6A4 -/* 09FE14 7F06B2E4 0019C880 */ sll $t9, $t9, 2 -/* 09FE18 7F06B2E8 3C018005 */ lui $at, %hi(jpt_800544E4) # -0.000000 -/* 09FE1C 7F06B2EC 00390821 */ addu $at, $at, $t9 -/* 09FE20 7F06B2F0 8C3944E4 */ lw $t9, %lo(jpt_800544E4)($at) -.L7F06B2F4: -/* 09FE24 7F06B2F4 03200008 */ jr $t9 -/* 09FE28 7F06B2F8 00000000 */ nop -.L7F06B2FC: -/* 09FE2C 7F06B2FC 8E020004 */ lw $v0, 4($s0) -/* 09FE30 7F06B300 8E240000 */ lw $a0, ($s1) -/* 09FE34 7F06B304 02002825 */ move $a1, $s0 -/* 09FE38 7F06B308 8C470004 */ lw $a3, 4($v0) -/* 09FE3C 7F06B30C 00003025 */ move $a2, $zero -/* 09FE40 7F06B310 0FC1B198 */ jal modelFindNodeMtx -/* 09FE44 7F06B314 AFA70100 */ sw $a3, 0x100($sp) -/* 09FE48 7F06B318 8FA70100 */ lw $a3, 0x100($sp) -/* 09FE4C 7F06B31C 00408025 */ move $s0, $v0 -/* 09FE50 7F06B320 00003025 */ move $a2, $zero -/* 09FE54 7F06B324 10E0000A */ beqz $a3, .L7F06B350 -/* 09FE58 7F06B328 00E02825 */ move $a1, $a3 -/* 09FE5C 7F06B32C 0FC1B198 */ jal modelFindNodeMtx -/* 09FE60 7F06B330 8E240000 */ lw $a0, ($s1) -/* 09FE64 7F06B334 C44A0038 */ lwc1 $f10, 0x38($v0) -/* 09FE68 7F06B338 C6040038 */ lwc1 $f4, 0x38($s0) -/* 09FE6C 7F06B33C 46045180 */ add.s $f6, $f10, $f4 -/* 09FE70 7F06B340 46003207 */ neg.s $f8, $f6 -/* 09FE74 7F06B344 46144282 */ mul.s $f10, $f8, $f20 -/* 09FE78 7F06B348 100000D6 */ b .L7F06B6A4 -/* 09FE7C 7F06B34C E62A0008 */ swc1 $f10, 8($s1) -.L7F06B350: -/* 09FE80 7F06B350 C4440038 */ lwc1 $f4, 0x38($v0) -/* 09FE84 7F06B354 46002187 */ neg.s $f6, $f4 -/* 09FE88 7F06B358 100000D2 */ b .L7F06B6A4 -/* 09FE8C 7F06B35C E6260008 */ swc1 $f6, 8($s1) -.L7F06B360: -/* 09FE90 7F06B360 8E020004 */ lw $v0, 4($s0) -/* 09FE94 7F06B364 8E240000 */ lw $a0, ($s1) -/* 09FE98 7F06B368 02002825 */ move $a1, $s0 -/* 09FE9C 7F06B36C 8C470014 */ lw $a3, 0x14($v0) -/* 09FEA0 7F06B370 00003025 */ move $a2, $zero -/* 09FEA4 7F06B374 0FC1B198 */ jal modelFindNodeMtx -/* 09FEA8 7F06B378 AFA700F0 */ sw $a3, 0xf0($sp) -/* 09FEAC 7F06B37C 8FA700F0 */ lw $a3, 0xf0($sp) -/* 09FEB0 7F06B380 00408025 */ move $s0, $v0 -/* 09FEB4 7F06B384 00003025 */ move $a2, $zero -/* 09FEB8 7F06B388 10E0000A */ beqz $a3, .L7F06B3B4 -/* 09FEBC 7F06B38C 00E02825 */ move $a1, $a3 -/* 09FEC0 7F06B390 0FC1B198 */ jal modelFindNodeMtx -/* 09FEC4 7F06B394 8E240000 */ lw $a0, ($s1) -/* 09FEC8 7F06B398 C4480038 */ lwc1 $f8, 0x38($v0) -/* 09FECC 7F06B39C C60A0038 */ lwc1 $f10, 0x38($s0) -/* 09FED0 7F06B3A0 460A4100 */ add.s $f4, $f8, $f10 -/* 09FED4 7F06B3A4 46002187 */ neg.s $f6, $f4 -/* 09FED8 7F06B3A8 46143202 */ mul.s $f8, $f6, $f20 -/* 09FEDC 7F06B3AC 100000BD */ b .L7F06B6A4 -/* 09FEE0 7F06B3B0 E6280008 */ swc1 $f8, 8($s1) -.L7F06B3B4: -/* 09FEE4 7F06B3B4 C44A0038 */ lwc1 $f10, 0x38($v0) -/* 09FEE8 7F06B3B8 46005107 */ neg.s $f4, $f10 -/* 09FEEC 7F06B3BC 100000B9 */ b .L7F06B6A4 -/* 09FEF0 7F06B3C0 E6240008 */ swc1 $f4, 8($s1) -.L7F06B3C4: -/* 09FEF4 7F06B3C4 8E020004 */ lw $v0, 4($s0) -/* 09FEF8 7F06B3C8 8E240000 */ lw $a0, ($s1) -/* 09FEFC 7F06B3CC 02002825 */ move $a1, $s0 -/* 09FF00 7F06B3D0 8C470014 */ lw $a3, 0x14($v0) -/* 09FF04 7F06B3D4 00003025 */ move $a2, $zero -/* 09FF08 7F06B3D8 0FC1B198 */ jal modelFindNodeMtx -/* 09FF0C 7F06B3DC AFA700E0 */ sw $a3, 0xe0($sp) -/* 09FF10 7F06B3E0 8FA700E0 */ lw $a3, 0xe0($sp) -/* 09FF14 7F06B3E4 00408025 */ move $s0, $v0 -/* 09FF18 7F06B3E8 00003025 */ move $a2, $zero -/* 09FF1C 7F06B3EC 10E0000A */ beqz $a3, .L7F06B418 -/* 09FF20 7F06B3F0 00E02825 */ move $a1, $a3 -/* 09FF24 7F06B3F4 0FC1B198 */ jal modelFindNodeMtx -/* 09FF28 7F06B3F8 8E240000 */ lw $a0, ($s1) -/* 09FF2C 7F06B3FC C4460038 */ lwc1 $f6, 0x38($v0) -/* 09FF30 7F06B400 C6080038 */ lwc1 $f8, 0x38($s0) -/* 09FF34 7F06B404 46083280 */ add.s $f10, $f6, $f8 -/* 09FF38 7F06B408 46005107 */ neg.s $f4, $f10 -/* 09FF3C 7F06B40C 46142182 */ mul.s $f6, $f4, $f20 -/* 09FF40 7F06B410 100000A4 */ b .L7F06B6A4 -/* 09FF44 7F06B414 E6260008 */ swc1 $f6, 8($s1) -.L7F06B418: -/* 09FF48 7F06B418 C4480038 */ lwc1 $f8, 0x38($v0) -/* 09FF4C 7F06B41C 46004287 */ neg.s $f10, $f8 -/* 09FF50 7F06B420 100000A0 */ b .L7F06B6A4 -/* 09FF54 7F06B424 E62A0008 */ swc1 $f10, 8($s1) -.L7F06B428: -/* 09FF58 7F06B428 8E240000 */ lw $a0, ($s1) -/* 09FF5C 7F06B42C 02002825 */ move $a1, $s0 -/* 09FF60 7F06B430 0FC1B198 */ jal modelFindNodeMtx -/* 09FF64 7F06B434 00003025 */ move $a2, $zero -/* 09FF68 7F06B438 C4440038 */ lwc1 $f4, 0x38($v0) -/* 09FF6C 7F06B43C 46002187 */ neg.s $f6, $f4 -/* 09FF70 7F06B440 10000098 */ b .L7F06B6A4 -/* 09FF74 7F06B444 E6260008 */ swc1 $f6, 8($s1) -.L7F06B448: -/* 09FF78 7F06B448 8E240000 */ lw $a0, ($s1) -/* 09FF7C 7F06B44C 02002825 */ move $a1, $s0 -/* 09FF80 7F06B450 0FC1B198 */ jal modelFindNodeMtx -/* 09FF84 7F06B454 00003025 */ move $a2, $zero -/* 09FF88 7F06B458 8E030004 */ lw $v1, 4($s0) -/* 09FF8C 7F06B45C C44A0008 */ lwc1 $f10, 8($v0) -/* 09FF90 7F06B460 C4680000 */ lwc1 $f8, ($v1) -/* 09FF94 7F06B464 C4660004 */ lwc1 $f6, 4($v1) -/* 09FF98 7F06B468 460A4102 */ mul.s $f4, $f8, $f10 -/* 09FF9C 7F06B46C C4480018 */ lwc1 $f8, 0x18($v0) -/* 09FFA0 7F06B470 46083282 */ mul.s $f10, $f6, $f8 -/* 09FFA4 7F06B474 C4680008 */ lwc1 $f8, 8($v1) -/* 09FFA8 7F06B478 460A2180 */ add.s $f6, $f4, $f10 -/* 09FFAC 7F06B47C C4440028 */ lwc1 $f4, 0x28($v0) -/* 09FFB0 7F06B480 46044282 */ mul.s $f10, $f8, $f4 -/* 09FFB4 7F06B484 C4440038 */ lwc1 $f4, 0x38($v0) -/* 09FFB8 7F06B488 460A3200 */ add.s $f8, $f6, $f10 -/* 09FFBC 7F06B48C 46082180 */ add.s $f6, $f4, $f8 -/* 09FFC0 7F06B490 46003287 */ neg.s $f10, $f6 -/* 09FFC4 7F06B494 10000083 */ b .L7F06B6A4 -/* 09FFC8 7F06B498 E62A0008 */ swc1 $f10, 8($s1) -.L7F06B49C: -/* 09FFCC 7F06B49C 8E240000 */ lw $a0, ($s1) -/* 09FFD0 7F06B4A0 02002825 */ move $a1, $s0 -/* 09FFD4 7F06B4A4 0FC1B198 */ jal modelFindNodeMtx -/* 09FFD8 7F06B4A8 00003025 */ move $a2, $zero -/* 09FFDC 7F06B4AC 8E030004 */ lw $v1, 4($s0) -/* 09FFE0 7F06B4B0 C4420008 */ lwc1 $f2, 8($v0) -/* 09FFE4 7F06B4B4 C44C0018 */ lwc1 $f12, 0x18($v0) -/* 09FFE8 7F06B4B8 C4640000 */ lwc1 $f4, ($v1) -/* 09FFEC 7F06B4BC C4660004 */ lwc1 $f6, 4($v1) -/* 09FFF0 7F06B4C0 C44E0028 */ lwc1 $f14, 0x28($v0) -/* 09FFF4 7F06B4C4 46022202 */ mul.s $f8, $f4, $f2 -/* 09FFF8 7F06B4C8 C4400038 */ lwc1 $f0, 0x38($v0) -/* 09FFFC 7F06B4CC 460C3282 */ mul.s $f10, $f6, $f12 -/* 0A0000 7F06B4D0 C4660008 */ lwc1 $f6, 8($v1) -/* 0A0004 7F06B4D4 460A4100 */ add.s $f4, $f8, $f10 -/* 0A0008 7F06B4D8 460E3202 */ mul.s $f8, $f6, $f14 -/* 0A000C 7F06B4DC C466000C */ lwc1 $f6, 0xc($v1) -/* 0A0010 7F06B4E0 46082280 */ add.s $f10, $f4, $f8 -/* 0A0014 7F06B4E4 46023102 */ mul.s $f4, $f6, $f2 -/* 0A0018 7F06B4E8 C4680010 */ lwc1 $f8, 0x10($v1) -/* 0A001C 7F06B4EC 460A0400 */ add.s $f16, $f0, $f10 -/* 0A0020 7F06B4F0 460C4282 */ mul.s $f10, $f8, $f12 -/* 0A0024 7F06B4F4 C4680014 */ lwc1 $f8, 0x14($v1) -/* 0A0028 7F06B4F8 46008407 */ neg.s $f16, $f16 -/* 0A002C 7F06B4FC 460A2180 */ add.s $f6, $f4, $f10 -/* 0A0030 7F06B500 460E4102 */ mul.s $f4, $f8, $f14 -/* 0A0034 7F06B504 46043280 */ add.s $f10, $f6, $f4 -/* 0A0038 7F06B508 460A0480 */ add.s $f18, $f0, $f10 -/* 0A003C 7F06B50C 46009487 */ neg.s $f18, $f18 -/* 0A0040 7F06B510 4612803C */ c.lt.s $f16, $f18 -/* 0A0044 7F06B514 00000000 */ nop -/* 0A0048 7F06B518 45000003 */ bc1f .L7F06B528 -/* 0A004C 7F06B51C 00000000 */ nop -/* 0A0050 7F06B520 10000060 */ b .L7F06B6A4 -/* 0A0054 7F06B524 E6300008 */ swc1 $f16, 8($s1) -.L7F06B528: -/* 0A0058 7F06B528 1000005E */ b .L7F06B6A4 -/* 0A005C 7F06B52C E6320008 */ swc1 $f18, 8($s1) -.L7F06B530: -/* 0A0060 7F06B530 8E240000 */ lw $a0, ($s1) -/* 0A0064 7F06B534 02002825 */ move $a1, $s0 -/* 0A0068 7F06B538 0FC1B198 */ jal modelFindNodeMtx -/* 0A006C 7F06B53C 00003025 */ move $a2, $zero -/* 0A0070 7F06B540 8E030004 */ lw $v1, 4($s0) -/* 0A0074 7F06B544 C4460008 */ lwc1 $f6, 8($v0) -/* 0A0078 7F06B548 C4680000 */ lwc1 $f8, ($v1) -/* 0A007C 7F06B54C C46A0004 */ lwc1 $f10, 4($v1) -/* 0A0080 7F06B550 46064102 */ mul.s $f4, $f8, $f6 -/* 0A0084 7F06B554 C4480018 */ lwc1 $f8, 0x18($v0) -/* 0A0088 7F06B558 46085182 */ mul.s $f6, $f10, $f8 -/* 0A008C 7F06B55C C4680008 */ lwc1 $f8, 8($v1) -/* 0A0090 7F06B560 46062280 */ add.s $f10, $f4, $f6 -/* 0A0094 7F06B564 C4440028 */ lwc1 $f4, 0x28($v0) -/* 0A0098 7F06B568 46044182 */ mul.s $f6, $f8, $f4 -/* 0A009C 7F06B56C C4440038 */ lwc1 $f4, 0x38($v0) -/* 0A00A0 7F06B570 46065200 */ add.s $f8, $f10, $f6 -/* 0A00A4 7F06B574 46082280 */ add.s $f10, $f4, $f8 -/* 0A00A8 7F06B578 46005187 */ neg.s $f6, $f10 -/* 0A00AC 7F06B57C E6260008 */ swc1 $f6, 8($s1) -/* 0A00B0 7F06B580 10000048 */ b .L7F06B6A4 -/* 0A00B4 7F06B584 AFB10110 */ sw $s1, 0x110($sp) -.L7F06B588: -/* 0A00B8 7F06B588 8E240000 */ lw $a0, ($s1) -/* 0A00BC 7F06B58C 02002825 */ move $a1, $s0 -/* 0A00C0 7F06B590 0FC1B198 */ jal modelFindNodeMtx -/* 0A00C4 7F06B594 00003025 */ move $a2, $zero -/* 0A00C8 7F06B598 8E030004 */ lw $v1, 4($s0) -/* 0A00CC 7F06B59C C4480008 */ lwc1 $f8, 8($v0) -/* 0A00D0 7F06B5A0 C4640000 */ lwc1 $f4, ($v1) -/* 0A00D4 7F06B5A4 C4660004 */ lwc1 $f6, 4($v1) -/* 0A00D8 7F06B5A8 46082282 */ mul.s $f10, $f4, $f8 -/* 0A00DC 7F06B5AC C4440018 */ lwc1 $f4, 0x18($v0) -/* 0A00E0 7F06B5B0 46043202 */ mul.s $f8, $f6, $f4 -/* 0A00E4 7F06B5B4 C4640008 */ lwc1 $f4, 8($v1) -/* 0A00E8 7F06B5B8 46085180 */ add.s $f6, $f10, $f8 -/* 0A00EC 7F06B5BC C44A0028 */ lwc1 $f10, 0x28($v0) -/* 0A00F0 7F06B5C0 460A2202 */ mul.s $f8, $f4, $f10 -/* 0A00F4 7F06B5C4 C44A0038 */ lwc1 $f10, 0x38($v0) -/* 0A00F8 7F06B5C8 46083100 */ add.s $f4, $f6, $f8 -/* 0A00FC 7F06B5CC 46045180 */ add.s $f6, $f10, $f4 -/* 0A0100 7F06B5D0 46003207 */ neg.s $f8, $f6 -/* 0A0104 7F06B5D4 10000033 */ b .L7F06B6A4 -/* 0A0108 7F06B5D8 E6280008 */ swc1 $f8, 8($s1) -.L7F06B5DC: -/* 0A010C 7F06B5DC 8E240000 */ lw $a0, ($s1) -/* 0A0110 7F06B5E0 02002825 */ move $a1, $s0 -/* 0A0114 7F06B5E4 0FC1B198 */ jal modelFindNodeMtx -/* 0A0118 7F06B5E8 00003025 */ move $a2, $zero -/* 0A011C 7F06B5EC 8E030004 */ lw $v1, 4($s0) -/* 0A0120 7F06B5F0 C4440008 */ lwc1 $f4, 8($v0) -/* 0A0124 7F06B5F4 C46A0000 */ lwc1 $f10, ($v1) -/* 0A0128 7F06B5F8 C4680004 */ lwc1 $f8, 4($v1) -/* 0A012C 7F06B5FC 46045182 */ mul.s $f6, $f10, $f4 -/* 0A0130 7F06B600 C44A0018 */ lwc1 $f10, 0x18($v0) -/* 0A0134 7F06B604 460A4102 */ mul.s $f4, $f8, $f10 -/* 0A0138 7F06B608 C46A0008 */ lwc1 $f10, 8($v1) -/* 0A013C 7F06B60C 46043200 */ add.s $f8, $f6, $f4 -/* 0A0140 7F06B610 C4460028 */ lwc1 $f6, 0x28($v0) -/* 0A0144 7F06B614 46065102 */ mul.s $f4, $f10, $f6 -/* 0A0148 7F06B618 C4460038 */ lwc1 $f6, 0x38($v0) -/* 0A014C 7F06B61C 46044280 */ add.s $f10, $f8, $f4 -/* 0A0150 7F06B620 460A3200 */ add.s $f8, $f6, $f10 -/* 0A0154 7F06B624 46004107 */ neg.s $f4, $f8 -/* 0A0158 7F06B628 1000001E */ b .L7F06B6A4 -/* 0A015C 7F06B62C E6240008 */ swc1 $f4, 8($s1) -.L7F06B630: -/* 0A0160 7F06B630 8E240000 */ lw $a0, ($s1) -/* 0A0164 7F06B634 02002825 */ move $a1, $s0 -/* 0A0168 7F06B638 0FC1B198 */ jal modelFindNodeMtx -/* 0A016C 7F06B63C 00003025 */ move $a2, $zero -/* 0A0170 7F06B640 8E060004 */ lw $a2, 4($s0) -/* 0A0174 7F06B644 8E240000 */ lw $a0, ($s1) -/* 0A0178 7F06B648 8CC50014 */ lw $a1, 0x14($a2) -/* 0A017C 7F06B64C AFA200A0 */ sw $v0, 0xa0($sp) -/* 0A0180 7F06B650 0FC1B1E7 */ jal modelGetNodeRwData -/* 0A0184 7F06B654 AFA6009C */ sw $a2, 0x9c($sp) -/* 0A0188 7F06B658 8FA300A0 */ lw $v1, 0xa0($sp) -/* 0A018C 7F06B65C 8FA6009C */ lw $a2, 0x9c($sp) -/* 0A0190 7F06B660 C4440004 */ lwc1 $f4, 4($v0) -/* 0A0194 7F06B664 C46A0008 */ lwc1 $f10, 8($v1) -/* 0A0198 7F06B668 C4C60000 */ lwc1 $f6, ($a2) -/* 0A019C 7F06B66C 460A3202 */ mul.s $f8, $f6, $f10 -/* 0A01A0 7F06B670 C446000C */ lwc1 $f6, 0xc($v0) -/* 0A01A4 7F06B674 46062281 */ sub.s $f10, $f4, $f6 -/* 0A01A8 7F06B678 C4640018 */ lwc1 $f4, 0x18($v1) -/* 0A01AC 7F06B67C 46045182 */ mul.s $f6, $f10, $f4 -/* 0A01B0 7F06B680 C4C40004 */ lwc1 $f4, 4($a2) -/* 0A01B4 7F06B684 46064280 */ add.s $f10, $f8, $f6 -/* 0A01B8 7F06B688 C4680028 */ lwc1 $f8, 0x28($v1) -/* 0A01BC 7F06B68C 46082182 */ mul.s $f6, $f4, $f8 -/* 0A01C0 7F06B690 C4680038 */ lwc1 $f8, 0x38($v1) -/* 0A01C4 7F06B694 46065100 */ add.s $f4, $f10, $f6 -/* 0A01C8 7F06B698 46044280 */ add.s $f10, $f8, $f4 -/* 0A01CC 7F06B69C 46005187 */ neg.s $f6, $f10 -/* 0A01D0 7F06B6A0 E6260008 */ swc1 $f6, 8($s1) -def_7F06B2F4: -.L7F06B6A4: -/* 0A01D4 7F06B6A4 8E31000C */ lw $s1, 0xc($s1) -/* 0A01D8 7F06B6A8 5620FF09 */ bnezl $s1, .L7F06B2D0 -/* 0A01DC 7F06B6AC 8E300004 */ lw $s0, 4($s1) -.L7F06B6B0: -/* 0A01E0 7F06B6B0 8FAC0110 */ lw $t4, 0x110($sp) -/* 0A01E4 7F06B6B4 51800117 */ beql $t4, $zero, .L7F06BB14 -/* 0A01E8 7F06B6B8 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A01EC 7F06B6BC 8D840000 */ lw $a0, ($t4) -/* 0A01F0 7F06B6C0 8C830018 */ lw $v1, 0x18($a0) -/* 0A01F4 7F06B6C4 50600113 */ beql $v1, $zero, .L7F06BB14 -/* 0A01F8 7F06B6C8 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A01FC 7F06B6CC 8D850004 */ lw $a1, 4($t4) -/* 0A0200 7F06B6D0 8C6D0008 */ lw $t5, 8($v1) -/* 0A0204 7F06B6D4 C5940008 */ lwc1 $f20, 8($t4) -/* 0A0208 7F06B6D8 8CB00004 */ lw $s0, 4($a1) -/* 0A020C 7F06B6DC 8DA20008 */ lw $v0, 8($t5) -/* 0A0210 7F06B6E0 00003025 */ move $a2, $zero -/* 0A0214 7F06B6E4 860E000E */ lh $t6, 0xe($s0) -/* 0A0218 7F06B6E8 8619000C */ lh $t9, 0xc($s0) -/* 0A021C 7F06B6EC 000E7880 */ sll $t7, $t6, 2 -/* 0A0220 7F06B6F0 860E0010 */ lh $t6, 0x10($s0) -/* 0A0224 7F06B6F4 004FC021 */ addu $t8, $v0, $t7 -/* 0A0228 7F06B6F8 8F110000 */ lw $s1, ($t8) -/* 0A022C 7F06B6FC 00196080 */ sll $t4, $t9, 2 -/* 0A0230 7F06B700 000E7880 */ sll $t7, $t6, 2 -/* 0A0234 7F06B704 004C6821 */ addu $t5, $v0, $t4 -/* 0A0238 7F06B708 004FC021 */ addu $t8, $v0, $t7 -/* 0A023C 7F06B70C 8DA70000 */ lw $a3, ($t5) -/* 0A0240 7F06B710 8F080000 */ lw $t0, ($t8) -/* 0A0244 7F06B714 AFA00070 */ sw $zero, 0x70($sp) -/* 0A0248 7F06B718 AFA00078 */ sw $zero, 0x78($sp) -/* 0A024C 7F06B71C AFA00074 */ sw $zero, 0x74($sp) -/* 0A0250 7F06B720 AFA70080 */ sw $a3, 0x80($sp) -/* 0A0254 7F06B724 0FC1B198 */ jal modelFindNodeMtx -/* 0A0258 7F06B728 AFA8007C */ sw $t0, 0x7c($sp) -/* 0A025C 7F06B72C 8FA30114 */ lw $v1, 0x114($sp) -/* 0A0260 7F06B730 8FA70080 */ lw $a3, 0x80($sp) -/* 0A0264 7F06B734 8FA8007C */ lw $t0, 0x7c($sp) -/* 0A0268 7F06B738 8FA90074 */ lw $t1, 0x74($sp) -/* 0A026C 7F06B73C 8FAA0078 */ lw $t2, 0x78($sp) -/* 0A0270 7F06B740 1060000E */ beqz $v1, .L7F06B77C -/* 0A0274 7F06B744 8FAB0070 */ lw $t3, 0x70($sp) -/* 0A0278 7F06B748 8C640004 */ lw $a0, 4($v1) -.L7F06B74C: -/* 0A027C 7F06B74C 16240002 */ bne $s1, $a0, .L7F06B758 -/* 0A0280 7F06B750 00000000 */ nop -/* 0A0284 7F06B754 00605025 */ move $t2, $v1 -.L7F06B758: -/* 0A0288 7F06B758 14E40002 */ bne $a3, $a0, .L7F06B764 -/* 0A028C 7F06B75C 00000000 */ nop -/* 0A0290 7F06B760 00604825 */ move $t1, $v1 -.L7F06B764: -/* 0A0294 7F06B764 55040003 */ bnel $t0, $a0, .L7F06B774 -/* 0A0298 7F06B768 8C63000C */ lw $v1, 0xc($v1) -/* 0A029C 7F06B76C 00605825 */ move $t3, $v1 -/* 0A02A0 7F06B770 8C63000C */ lw $v1, 0xc($v1) -.L7F06B774: -/* 0A02A4 7F06B774 5460FFF5 */ bnezl $v1, .L7F06B74C -/* 0A02A8 7F06B778 8C640004 */ lw $a0, 4($v1) -.L7F06B77C: -/* 0A02AC 7F06B77C C4480020 */ lwc1 $f8, 0x20($v0) -/* 0A02B0 7F06B780 E7A80054 */ swc1 $f8, 0x54($sp) -/* 0A02B4 7F06B784 C4440024 */ lwc1 $f4, 0x24($v0) -/* 0A02B8 7F06B788 E7A40058 */ swc1 $f4, 0x58($sp) -/* 0A02BC 7F06B78C C44A0028 */ lwc1 $f10, 0x28($v0) -/* 0A02C0 7F06B790 E7AA005C */ swc1 $f10, 0x5c($sp) -/* 0A02C4 7F06B794 C4460010 */ lwc1 $f6, 0x10($v0) -/* 0A02C8 7F06B798 E7A60048 */ swc1 $f6, 0x48($sp) -/* 0A02CC 7F06B79C C4480014 */ lwc1 $f8, 0x14($v0) -/* 0A02D0 7F06B7A0 E7A8004C */ swc1 $f8, 0x4c($sp) -/* 0A02D4 7F06B7A4 C4440018 */ lwc1 $f4, 0x18($v0) -/* 0A02D8 7F06B7A8 E7A40050 */ swc1 $f4, 0x50($sp) -/* 0A02DC 7F06B7AC C60A0000 */ lwc1 $f10, ($s0) -/* 0A02E0 7F06B7B0 C4460000 */ lwc1 $f6, ($v0) -/* 0A02E4 7F06B7B4 C6040004 */ lwc1 $f4, 4($s0) -/* 0A02E8 7F06B7B8 46065202 */ mul.s $f8, $f10, $f6 -/* 0A02EC 7F06B7BC C44A0010 */ lwc1 $f10, 0x10($v0) -/* 0A02F0 7F06B7C0 460A2182 */ mul.s $f6, $f4, $f10 -/* 0A02F4 7F06B7C4 C60A0008 */ lwc1 $f10, 8($s0) -/* 0A02F8 7F06B7C8 46064100 */ add.s $f4, $f8, $f6 -/* 0A02FC 7F06B7CC C4480020 */ lwc1 $f8, 0x20($v0) -/* 0A0300 7F06B7D0 46085182 */ mul.s $f6, $f10, $f8 -/* 0A0304 7F06B7D4 C4480030 */ lwc1 $f8, 0x30($v0) -/* 0A0308 7F06B7D8 46062280 */ add.s $f10, $f4, $f6 -/* 0A030C 7F06B7DC 460A4100 */ add.s $f4, $f8, $f10 -/* 0A0310 7F06B7E0 E7A40034 */ swc1 $f4, 0x34($sp) -/* 0A0314 7F06B7E4 C6060000 */ lwc1 $f6, ($s0) -/* 0A0318 7F06B7E8 C4480004 */ lwc1 $f8, 4($v0) -/* 0A031C 7F06B7EC C6040004 */ lwc1 $f4, 4($s0) -/* 0A0320 7F06B7F0 46083282 */ mul.s $f10, $f6, $f8 -/* 0A0324 7F06B7F4 C4460014 */ lwc1 $f6, 0x14($v0) -/* 0A0328 7F06B7F8 46062202 */ mul.s $f8, $f4, $f6 -/* 0A032C 7F06B7FC C6060008 */ lwc1 $f6, 8($s0) -/* 0A0330 7F06B800 46085100 */ add.s $f4, $f10, $f8 -/* 0A0334 7F06B804 C44A0024 */ lwc1 $f10, 0x24($v0) -/* 0A0338 7F06B808 460A3202 */ mul.s $f8, $f6, $f10 -/* 0A033C 7F06B80C C44A0034 */ lwc1 $f10, 0x34($v0) -/* 0A0340 7F06B810 46082180 */ add.s $f6, $f4, $f8 -/* 0A0344 7F06B814 46065100 */ add.s $f4, $f10, $f6 -/* 0A0348 7F06B818 E7A40038 */ swc1 $f4, 0x38($sp) -/* 0A034C 7F06B81C C44A0008 */ lwc1 $f10, 8($v0) -/* 0A0350 7F06B820 C6080000 */ lwc1 $f8, ($s0) -/* 0A0354 7F06B824 C6040004 */ lwc1 $f4, 4($s0) -/* 0A0358 7F06B828 460A4182 */ mul.s $f6, $f8, $f10 -/* 0A035C 7F06B82C C4480018 */ lwc1 $f8, 0x18($v0) -/* 0A0360 7F06B830 46082282 */ mul.s $f10, $f4, $f8 -/* 0A0364 7F06B834 C6080008 */ lwc1 $f8, 8($s0) -/* 0A0368 7F06B838 460A3100 */ add.s $f4, $f6, $f10 -/* 0A036C 7F06B83C C4460028 */ lwc1 $f6, 0x28($v0) -/* 0A0370 7F06B840 46064282 */ mul.s $f10, $f8, $f6 -/* 0A0374 7F06B844 C4460038 */ lwc1 $f6, 0x38($v0) -/* 0A0378 7F06B848 460A2200 */ add.s $f8, $f4, $f10 -/* 0A037C 7F06B84C C7AA0054 */ lwc1 $f10, 0x54($sp) -/* 0A0380 7F06B850 46083100 */ add.s $f4, $f6, $f8 -/* 0A0384 7F06B854 C7A60034 */ lwc1 $f6, 0x34($sp) -/* 0A0388 7F06B858 46065202 */ mul.s $f8, $f10, $f6 -/* 0A038C 7F06B85C E7A4003C */ swc1 $f4, 0x3c($sp) -/* 0A0390 7F06B860 C7A40058 */ lwc1 $f4, 0x58($sp) -/* 0A0394 7F06B864 C7AA0038 */ lwc1 $f10, 0x38($sp) -/* 0A0398 7F06B868 E7A60028 */ swc1 $f6, 0x28($sp) -/* 0A039C 7F06B86C C7A6005C */ lwc1 $f6, 0x5c($sp) -/* 0A03A0 7F06B870 460A2102 */ mul.s $f4, $f4, $f10 -/* 0A03A4 7F06B874 C54E0008 */ lwc1 $f14, 8($t2) -/* 0A03A8 7F06B878 C52C0008 */ lwc1 $f12, 8($t1) -/* 0A03AC 7F06B87C C5700008 */ lwc1 $f16, 8($t3) -/* 0A03B0 7F06B880 46044200 */ add.s $f8, $f8, $f4 -/* 0A03B4 7F06B884 C7A4003C */ lwc1 $f4, 0x3c($sp) -/* 0A03B8 7F06B888 46062182 */ mul.s $f6, $f4, $f6 -/* 0A03BC 7F06B88C 46083080 */ add.s $f2, $f6, $f8 -/* 0A03C0 7F06B890 C7A80028 */ lwc1 $f8, 0x28($sp) -/* 0A03C4 7F06B894 C7A60048 */ lwc1 $f6, 0x48($sp) -/* 0A03C8 7F06B898 46083182 */ mul.s $f6, $f6, $f8 -/* 0A03CC 7F06B89C C7A8004C */ lwc1 $f8, 0x4c($sp) -/* 0A03D0 7F06B8A0 460A4202 */ mul.s $f8, $f8, $f10 -/* 0A03D4 7F06B8A4 46083280 */ add.s $f10, $f6, $f8 -/* 0A03D8 7F06B8A8 C7A60050 */ lwc1 $f6, 0x50($sp) -/* 0A03DC 7F06B8AC 46062202 */ mul.s $f8, $f4, $f6 -/* 0A03E0 7F06B8B0 44802000 */ mtc1 $zero, $f4 -/* 0A03E4 7F06B8B4 00000000 */ nop -/* 0A03E8 7F06B8B8 4604103C */ c.lt.s $f2, $f4 -/* 0A03EC 7F06B8BC 460A4480 */ add.s $f18, $f8, $f10 -/* 0A03F0 7F06B8C0 45020018 */ bc1fl .L7F06B924 -/* 0A03F4 7F06B8C4 44803000 */ mtc1 $zero, $f6 -/* 0A03F8 7F06B8C8 460E803C */ c.lt.s $f16, $f14 -/* 0A03FC 7F06B8CC 00000000 */ nop -/* 0A0400 7F06B8D0 4502000B */ bc1fl .L7F06B900 -/* 0A0404 7F06B8D4 4614703C */ c.lt.s $f14, $f20 -/* 0A0408 7F06B8D8 4614803C */ c.lt.s $f16, $f20 -/* 0A040C 7F06B8DC 3C013800 */ li $at, 0x38000000 # 0.000031 -/* 0A0410 7F06B8E0 45020030 */ bc1fl .L7F06B9A4 -/* 0A0414 7F06B8E4 44802000 */ mtc1 $zero, $f4 -/* 0A0418 7F06B8E8 44813000 */ mtc1 $at, $f6 -/* 0A041C 7F06B8EC 8FAC0110 */ lw $t4, 0x110($sp) -/* 0A0420 7F06B8F0 46068201 */ sub.s $f8, $f16, $f6 -/* 0A0424 7F06B8F4 1000002A */ b .L7F06B9A0 -/* 0A0428 7F06B8F8 E5880008 */ swc1 $f8, 8($t4) -/* 0A042C 7F06B8FC 4614703C */ c.lt.s $f14, $f20 -.L7F06B900: -/* 0A0430 7F06B900 3C013800 */ li $at, 0x38000000 # 0.000031 -/* 0A0434 7F06B904 45020027 */ bc1fl .L7F06B9A4 -/* 0A0438 7F06B908 44802000 */ mtc1 $zero, $f4 -/* 0A043C 7F06B90C 44815000 */ mtc1 $at, $f10 -/* 0A0440 7F06B910 8FAD0110 */ lw $t5, 0x110($sp) -/* 0A0444 7F06B914 460A7101 */ sub.s $f4, $f14, $f10 -/* 0A0448 7F06B918 10000021 */ b .L7F06B9A0 -/* 0A044C 7F06B91C E5A40008 */ swc1 $f4, 8($t5) -/* 0A0450 7F06B920 44803000 */ mtc1 $zero, $f6 -.L7F06B924: -/* 0A0454 7F06B924 00000000 */ nop -/* 0A0458 7F06B928 4602303E */ c.le.s $f6, $f2 -/* 0A045C 7F06B92C 00000000 */ nop -/* 0A0460 7F06B930 4502001C */ bc1fl .L7F06B9A4 -/* 0A0464 7F06B934 44802000 */ mtc1 $zero, $f4 -/* 0A0468 7F06B938 460EA03C */ c.lt.s $f20, $f14 -/* 0A046C 7F06B93C 3C013880 */ li $at, 0x38800000 # 0.000061 -/* 0A0470 7F06B940 45020006 */ bc1fl .L7F06B95C -/* 0A0474 7F06B944 4610A03C */ c.lt.s $f20, $f16 -/* 0A0478 7F06B948 44814000 */ mtc1 $at, $f8 -/* 0A047C 7F06B94C 00000000 */ nop -/* 0A0480 7F06B950 4608A281 */ sub.s $f10, $f20, $f8 -/* 0A0484 7F06B954 E54A0008 */ swc1 $f10, 8($t2) -/* 0A0488 7F06B958 4610A03C */ c.lt.s $f20, $f16 -.L7F06B95C: -/* 0A048C 7F06B95C 00000000 */ nop -/* 0A0490 7F06B960 45020010 */ bc1fl .L7F06B9A4 -/* 0A0494 7F06B964 44802000 */ mtc1 $zero, $f4 -/* 0A0498 7F06B968 460E803C */ c.lt.s $f16, $f14 -/* 0A049C 7F06B96C 3C013800 */ li $at, 0x38000000 # 0.000031 -/* 0A04A0 7F06B970 45020008 */ bc1fl .L7F06B994 -/* 0A04A4 7F06B974 44814000 */ mtc1 $at, $f8 -/* 0A04A8 7F06B978 3C0138C0 */ li $at, 0x38C00000 # 0.000092 -/* 0A04AC 7F06B97C 44812000 */ mtc1 $at, $f4 -/* 0A04B0 7F06B980 00000000 */ nop -/* 0A04B4 7F06B984 4604A181 */ sub.s $f6, $f20, $f4 -/* 0A04B8 7F06B988 10000005 */ b .L7F06B9A0 -/* 0A04BC 7F06B98C E5660008 */ swc1 $f6, 8($t3) -/* 0A04C0 7F06B990 44814000 */ mtc1 $at, $f8 -.L7F06B994: -/* 0A04C4 7F06B994 00000000 */ nop -/* 0A04C8 7F06B998 4608A281 */ sub.s $f10, $f20, $f8 -/* 0A04CC 7F06B99C E56A0008 */ swc1 $f10, 8($t3) -.L7F06B9A0: -/* 0A04D0 7F06B9A0 44802000 */ mtc1 $zero, $f4 -.L7F06B9A4: -/* 0A04D4 7F06B9A4 8FAE0110 */ lw $t6, 0x110($sp) -/* 0A04D8 7F06B9A8 4604903C */ c.lt.s $f18, $f4 -/* 0A04DC 7F06B9AC 00000000 */ nop -/* 0A04E0 7F06B9B0 45020033 */ bc1fl .L7F06BA80 -/* 0A04E4 7F06B9B4 44802000 */ mtc1 $zero, $f4 -/* 0A04E8 7F06B9B8 C5C20008 */ lwc1 $f2, 8($t6) -/* 0A04EC 7F06B9BC 4602603C */ c.lt.s $f12, $f2 -/* 0A04F0 7F06B9C0 00000000 */ nop -/* 0A04F4 7F06B9C4 45020053 */ bc1fl .L7F06BB14 -/* 0A04F8 7F06B9C8 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A04FC 7F06B9CC C5400008 */ lwc1 $f0, 8($t2) -/* 0A0500 7F06B9D0 4602003C */ c.lt.s $f0, $f2 -/* 0A0504 7F06B9D4 00000000 */ nop -/* 0A0508 7F06B9D8 4502000C */ bc1fl .L7F06BA0C -/* 0A050C 7F06B9DC C5600008 */ lwc1 $f0, 8($t3) -/* 0A0510 7F06B9E0 4600603C */ c.lt.s $f12, $f0 -/* 0A0514 7F06B9E4 3C013880 */ li $at, 0x38800000 # 0.000061 -/* 0A0518 7F06B9E8 45020008 */ bc1fl .L7F06BA0C -/* 0A051C 7F06B9EC C5600008 */ lwc1 $f0, 8($t3) -/* 0A0520 7F06B9F0 44813000 */ mtc1 $at, $f6 -/* 0A0524 7F06B9F4 00000000 */ nop -/* 0A0528 7F06B9F8 46066201 */ sub.s $f8, $f12, $f6 -/* 0A052C 7F06B9FC E5480008 */ swc1 $f8, 8($t2) -/* 0A0530 7F06BA00 8FAF0110 */ lw $t7, 0x110($sp) -/* 0A0534 7F06BA04 C5E20008 */ lwc1 $f2, 8($t7) -/* 0A0538 7F06BA08 C5600008 */ lwc1 $f0, 8($t3) -.L7F06BA0C: -/* 0A053C 7F06BA0C 4602003C */ c.lt.s $f0, $f2 -/* 0A0540 7F06BA10 00000000 */ nop -/* 0A0544 7F06BA14 45020014 */ bc1fl .L7F06BA68 -/* 0A0548 7F06BA18 3C013780 */ lui $at, 0x3780 -/* 0A054C 7F06BA1C 4600603C */ c.lt.s $f12, $f0 -/* 0A0550 7F06BA20 00000000 */ nop -/* 0A0554 7F06BA24 45020010 */ bc1fl .L7F06BA68 -/* 0A0558 7F06BA28 3C013780 */ li $at, 0x37800000 # 0.000015 -/* 0A055C 7F06BA2C 460E803C */ c.lt.s $f16, $f14 -/* 0A0560 7F06BA30 3C013800 */ li $at, 0x38000000 # 0.000031 -/* 0A0564 7F06BA34 45020008 */ bc1fl .L7F06BA58 -/* 0A0568 7F06BA38 44813000 */ mtc1 $at, $f6 -/* 0A056C 7F06BA3C 3C0138C0 */ li $at, 0x38C00000 # 0.000092 -/* 0A0570 7F06BA40 44815000 */ mtc1 $at, $f10 -/* 0A0574 7F06BA44 00000000 */ nop -/* 0A0578 7F06BA48 460A6101 */ sub.s $f4, $f12, $f10 -/* 0A057C 7F06BA4C 10000005 */ b .L7F06BA64 -/* 0A0580 7F06BA50 E5640008 */ swc1 $f4, 8($t3) -/* 0A0584 7F06BA54 44813000 */ mtc1 $at, $f6 -.L7F06BA58: -/* 0A0588 7F06BA58 00000000 */ nop -/* 0A058C 7F06BA5C 46066201 */ sub.s $f8, $f12, $f6 -/* 0A0590 7F06BA60 E5680008 */ swc1 $f8, 8($t3) -.L7F06BA64: -/* 0A0594 7F06BA64 3C013780 */ li $at, 0x37800000 # 0.000015 -.L7F06BA68: -/* 0A0598 7F06BA68 44819000 */ mtc1 $at, $f18 -/* 0A059C 7F06BA6C 8FB80110 */ lw $t8, 0x110($sp) -/* 0A05A0 7F06BA70 46126281 */ sub.s $f10, $f12, $f18 -/* 0A05A4 7F06BA74 10000026 */ b .L7F06BB10 -/* 0A05A8 7F06BA78 E70A0008 */ swc1 $f10, 8($t8) -/* 0A05AC 7F06BA7C 44802000 */ mtc1 $zero, $f4 -.L7F06BA80: -/* 0A05B0 7F06BA80 8FB90110 */ lw $t9, 0x110($sp) -/* 0A05B4 7F06BA84 4612203E */ c.le.s $f4, $f18 -/* 0A05B8 7F06BA88 00000000 */ nop -/* 0A05BC 7F06BA8C 45020021 */ bc1fl .L7F06BB14 -/* 0A05C0 7F06BA90 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A05C4 7F06BA94 C7220008 */ lwc1 $f2, 8($t9) -/* 0A05C8 7F06BA98 3C013780 */ li $at, 0x37800000 # 0.000015 -/* 0A05CC 7F06BA9C 460C103C */ c.lt.s $f2, $f12 -/* 0A05D0 7F06BAA0 00000000 */ nop -/* 0A05D4 7F06BAA4 4502001B */ bc1fl .L7F06BB14 -/* 0A05D8 7F06BAA8 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A05DC 7F06BAAC 44819000 */ mtc1 $at, $f18 -/* 0A05E0 7F06BAB0 460E603C */ c.lt.s $f12, $f14 -/* 0A05E4 7F06BAB4 46121181 */ sub.s $f6, $f2, $f18 -/* 0A05E8 7F06BAB8 45000009 */ bc1f .L7F06BAE0 -/* 0A05EC 7F06BABC E5260008 */ swc1 $f6, 8($t1) -/* 0A05F0 7F06BAC0 C5400008 */ lwc1 $f0, 8($t2) -/* 0A05F4 7F06BAC4 C5280008 */ lwc1 $f8, 8($t1) -/* 0A05F8 7F06BAC8 4608003C */ c.lt.s $f0, $f8 -/* 0A05FC 7F06BACC 00000000 */ nop -/* 0A0600 7F06BAD0 45020004 */ bc1fl .L7F06BAE4 -/* 0A0604 7F06BAD4 4610603C */ c.lt.s $f12, $f16 -/* 0A0608 7F06BAD8 46120281 */ sub.s $f10, $f0, $f18 -/* 0A060C 7F06BADC E52A0008 */ swc1 $f10, 8($t1) -.L7F06BAE0: -/* 0A0610 7F06BAE0 4610603C */ c.lt.s $f12, $f16 -.L7F06BAE4: -/* 0A0614 7F06BAE4 00000000 */ nop -/* 0A0618 7F06BAE8 4502000A */ bc1fl .L7F06BB14 -/* 0A061C 7F06BAEC 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A0620 7F06BAF0 C5600008 */ lwc1 $f0, 8($t3) -/* 0A0624 7F06BAF4 C5240008 */ lwc1 $f4, 8($t1) -/* 0A0628 7F06BAF8 4604003C */ c.lt.s $f0, $f4 -/* 0A062C 7F06BAFC 00000000 */ nop -/* 0A0630 7F06BB00 45020004 */ bc1fl .L7F06BB14 -/* 0A0634 7F06BB04 8FBF0024 */ lw $ra, 0x24($sp) -/* 0A0638 7F06BB08 46120181 */ sub.s $f6, $f0, $f18 -/* 0A063C 7F06BB0C E5260008 */ swc1 $f6, 8($t1) -.L7F06BB10: -/* 0A0640 7F06BB10 8FBF0024 */ lw $ra, 0x24($sp) -.L7F06BB14: -/* 0A0644 7F06BB14 D7B40010 */ ldc1 $f20, 0x10($sp) -/* 0A0648 7F06BB18 8FB0001C */ lw $s0, 0x1c($sp) -/* 0A064C 7F06BB1C 8FB10020 */ lw $s1, 0x20($sp) -/* 0A0650 7F06BB20 03E00008 */ jr $ra -/* 0A0654 7F06BB24 27BD0118 */ addiu $sp, $sp, 0x118 -) -#endif - - - - - -#ifdef NONMATCHING -int sub_GAME_7F06BB28(double param_1, undefined param_2, undefined param_3, ModelNode *param_4, ModelNode *param_5, ModelNode *param_6, ModelNode *param_7, ModelNode *param_8, ModelNode *param_9, undefined4 param_10, undefined4 param_11) - -{ - while (param_6 = param_6->Next, param_6 != ¶m_3) - { - param_7 = NULL; - param_9 = 0xcf800000; - for (param_8 = param_6->Next; param_8 != ¶m_3; param_8 = param_8->Next) - { - if (param_9 < param_8->Parent) - { - param_9 = param_8->Parent; - param_7 = param_8; - } - } - if (param_7 != NULL) - { - *(param_7->Next + 0x10) = param_7->Prev; - *(param_7->Prev + 0xc) = param_7->Next; - param_7->Prev = param_6; - param_7->Next = param_6->Next; - *(param_6->Next + 0x10) = param_7; - param_6->Next = param_7; - } - } - param_5->Prev = NULL; - param_4->Next = NULL; - return param_5; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F06BB28 -/* 0A0658 7F06BB28 10800035 */ beqz $a0, .L7F06BC00 -/* 0A065C 7F06BB2C 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0A0660 7F06BB30 8C8E000C */ lw $t6, 0xc($a0) -/* 0A0664 7F06BB34 00801025 */ move $v0, $a0 -/* 0A0668 7F06BB38 27A60020 */ addiu $a2, $sp, 0x20 -/* 0A066C 7F06BB3C 11C00006 */ beqz $t6, .L7F06BB58 -/* 0A0670 7F06BB40 3C01CF80 */ li $at, 0xCF800000 # -4294967296.000000 -/* 0A0674 7F06BB44 8C43000C */ lw $v1, 0xc($v0) -/* 0A0678 7F06BB48 00601025 */ move $v0, $v1 -.L7F06BB4C: -/* 0A067C 7F06BB4C 8C63000C */ lw $v1, 0xc($v1) -/* 0A0680 7F06BB50 5460FFFE */ bnezl $v1, .L7F06BB4C -/* 0A0684 7F06BB54 00601025 */ move $v0, $v1 -.L7F06BB58: -/* 0A0688 7F06BB58 27A30034 */ addiu $v1, $sp, 0x34 -/* 0A068C 7F06BB5C AFA40040 */ sw $a0, 0x40($sp) -/* 0A0690 7F06BB60 AC830010 */ sw $v1, 0x10($a0) -/* 0A0694 7F06BB64 AFA20030 */ sw $v0, 0x30($sp) -/* 0A0698 7F06BB68 44816000 */ mtc1 $at, $f12 -/* 0A069C 7F06BB6C AC46000C */ sw $a2, 0xc($v0) -.L7F06BB70: -/* 0A06A0 7F06BB70 8C65000C */ lw $a1, 0xc($v1) -/* 0A06A4 7F06BB74 00001025 */ move $v0, $zero -/* 0A06A8 7F06BB78 46006006 */ mov.s $f0, $f12 -/* 0A06AC 7F06BB7C 10A6000B */ beq $a1, $a2, .L7F06BBAC -/* 0A06B0 7F06BB80 00A02025 */ move $a0, $a1 -/* 0A06B4 7F06BB84 C4820008 */ lwc1 $f2, 8($a0) -.L7F06BB88: -/* 0A06B8 7F06BB88 4602003C */ c.lt.s $f0, $f2 -/* 0A06BC 7F06BB8C 00000000 */ nop -/* 0A06C0 7F06BB90 45020004 */ bc1fl .L7F06BBA4 -/* 0A06C4 7F06BB94 8C84000C */ lw $a0, 0xc($a0) -/* 0A06C8 7F06BB98 46001006 */ mov.s $f0, $f2 -/* 0A06CC 7F06BB9C 00801025 */ move $v0, $a0 -/* 0A06D0 7F06BBA0 8C84000C */ lw $a0, 0xc($a0) -.L7F06BBA4: -/* 0A06D4 7F06BBA4 5486FFF8 */ bnel $a0, $a2, .L7F06BB88 -/* 0A06D8 7F06BBA8 C4820008 */ lwc1 $f2, 8($a0) -.L7F06BBAC: -/* 0A06DC 7F06BBAC 1040000E */ beqz $v0, .L7F06BBE8 -/* 0A06E0 7F06BBB0 00000000 */ nop -/* 0A06E4 7F06BBB4 8C4F0010 */ lw $t7, 0x10($v0) -/* 0A06E8 7F06BBB8 8C58000C */ lw $t8, 0xc($v0) -/* 0A06EC 7F06BBBC 00402825 */ move $a1, $v0 -/* 0A06F0 7F06BBC0 AF0F0010 */ sw $t7, 0x10($t8) -/* 0A06F4 7F06BBC4 8C59000C */ lw $t9, 0xc($v0) -/* 0A06F8 7F06BBC8 8C480010 */ lw $t0, 0x10($v0) -/* 0A06FC 7F06BBCC AD19000C */ sw $t9, 0xc($t0) -/* 0A0700 7F06BBD0 AC430010 */ sw $v1, 0x10($v0) -/* 0A0704 7F06BBD4 8C69000C */ lw $t1, 0xc($v1) -/* 0A0708 7F06BBD8 AC49000C */ sw $t1, 0xc($v0) -/* 0A070C 7F06BBDC 8C6A000C */ lw $t2, 0xc($v1) -/* 0A0710 7F06BBE0 AD420010 */ sw $v0, 0x10($t2) -/* 0A0714 7F06BBE4 AC62000C */ sw $v0, 0xc($v1) -.L7F06BBE8: -/* 0A0718 7F06BBE8 14A6FFE1 */ bne $a1, $a2, .L7F06BB70 -/* 0A071C 7F06BBEC 00A01825 */ move $v1, $a1 -/* 0A0720 7F06BBF0 8FA40040 */ lw $a0, 0x40($sp) -/* 0A0724 7F06BBF4 AC800010 */ sw $zero, 0x10($a0) -/* 0A0728 7F06BBF8 8FAC0030 */ lw $t4, 0x30($sp) -/* 0A072C 7F06BBFC AD80000C */ sw $zero, 0xc($t4) -.L7F06BC00: -/* 0A0730 7F06BC00 00801025 */ move $v0, $a0 -/* 0A0734 7F06BC04 03E00008 */ jr $ra -/* 0A0738 7F06BC08 27BD0048 */ addiu $sp, $sp, 0x48 -) -#endif - - - - -#if defined(LEFTOVERDEBUG) -// rodata -//D:80054420 -const char aDrawjointlistNoGfxlist[] = "drawjointlist: no gfxlist!\n"; -//D:8005443C -const char aDrawjointlistNoObject0xX[] = "drawjointlist: no object! (0x%X)\n"; -//D:80054460 -const char aDrawjointlistObjectNotInitialised0[] = "drawjointlist: object not initialised! (0x%X)\n"; -#endif - -#ifdef NONMATCHING -void drawjointlist(ModelRenderData *mrData, void *field_20) -{ - Model *temp_a2; - ModelFileHeader *mfhModel; - ModelNode *temp_s1; - ModelNode *temp_v0_2; - ModelNode *temp_v0_3; - ModelNode *var_s0; - s32 temp_t3; - s32 var_s2; - u64 *temp_v0; - - - - if (mrData->gdl == NULL) - { - osSyncPrintf(&aDrawjointlistNoGfxlist); - exit(); - } - if (field_20 != NULL) - { - do - { - temp_a2 = field_20->unk0; - temp_s1 = field_20->unk4; - mfhModel = temp_a2->obj; - var_s0 = temp_s1; - if (mfhModel == NULL) - { - osSyncPrintf(&aDrawjointlistNoObject0xX, temp_a2, temp_a2); - exit(); - mfhModel = field_20->unk0->obj; - } - if (mfhModel->isLoaded == 0) - { - osSyncPrintf(&aDrawjointlistObjectNotInitialised0, mfhModel); - exit(); - } - if (mrData->unk18 != 0) - { - if (field_20->unk8 < getjointsize(field_20->unk0, temp_s1)) - { - var_s0 = NULL; - } - } - else - { - temp_v0 = mrData->gdl; - mrData->gdl = temp_v0 + 8; - temp_v0->unk0 = 0xBC000C06; - temp_v0->unk4 = osVirtualToPhysical(field_20->unk0->unk0c, temp_s1); - } - if (var_s0 != NULL) - { - do - { - var_s2 = 1; - temp_t3 = var_s0->Opcode & 0xFF; - switch (temp_t3) - { - case 1: - case 2: - case 3: - case 11: - case 12: - case 13: - case 14: - case 15: - case 16: - case 21: - if (var_s0 == temp_s1) - { - sub_GAME_7F074534(mrData, field_20->unk0, var_s0); - } - else - { - var_s2 = 0; - } - break; - default: - sub_GAME_7F074534(mrData, field_20->unk0, var_s0); - break; - } - if ((var_s2 != 0) && (temp_v0_2 = var_s0->Child, (temp_v0_2 != NULL))) - { - var_s0 = temp_v0_2; - } - else if (var_s0 != NULL) - { -loop_22: - if (var_s0 == temp_s1) - { - var_s0 = NULL; + entry10->sortvalue = sort0c - 0.000091552734375f; // 6/65536 } else { - temp_v0_3 = var_s0->Next; - if (temp_v0_3 != NULL) - { - var_s0 = temp_v0_3; - } - else - { - var_s0 = var_s0->Parent; - if (var_s0 != NULL) - { - goto loop_22; - } - } + entry10->sortvalue = sort0c - 0.000030517578125f; // 2/65536 } } - } while (var_s0 != NULL); + + special->sortvalue = sort0c - 0.0000152587890625f; // 1/65536 + } } - field_20 = field_20->unkC; - } while (field_20 != NULL); + else if (0.0f <= axis1dot) + { + if (special->sortvalue < sort0c) + { + entry0c->sortvalue = special->sortvalue - 0.0000152587890625f; // 1/65536 + + if (sort0c < sort0e) + { + if (entry0e->sortvalue < entry0c->sortvalue) + { + entry0c->sortvalue = entry0e->sortvalue - 0.0000152587890625f; // 1/65536 + } + } + + if (sort0c < sort10) + { + if (entry10->sortvalue < entry0c->sortvalue) + { + entry0c->sortvalue = entry10->sortvalue - 0.0000152587890625f; // 1/65536 + } + } + } + } + } } } -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.late_rodata -/*D:80054538*/ -glabel obj_table_jointlist -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD44 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 - -.text -glabel drawjointlist -/* 0A073C 7F06BC0C 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0A0740 7F06BC10 AFBF002C */ sw $ra, 0x2c($sp) -/* 0A0744 7F06BC14 AFB40028 */ sw $s4, 0x28($sp) -/* 0A0748 7F06BC18 AFB30024 */ sw $s3, 0x24($sp) -/* 0A074C 7F06BC1C AFB20020 */ sw $s2, 0x20($sp) -/* 0A0750 7F06BC20 AFB1001C */ sw $s1, 0x1c($sp) -/* 0A0754 7F06BC24 AFB00018 */ sw $s0, 0x18($sp) -/* 0A0758 7F06BC28 8C8E000C */ lw $t6, 0xc($a0) -/* 0A075C 7F06BC2C 0080A025 */ move $s4, $a0 -/* 0A0760 7F06BC30 00A09825 */ move $s3, $a1 -/* 0A0764 7F06BC34 15C00005 */ bnez $t6, .L7F06BC4C -/* 0A0768 7F06BC38 3C048005 */ lui $a0, %hi(aDrawjointlistNoGfxlist) -/* 0A076C 7F06BC3C 0C0033D1 */ jal osSyncPrintf -/* 0A0770 7F06BC40 24844420 */ addiu $a0, %lo(aDrawjointlistNoGfxlist) # addiu $a0, $a0, 0x4420 -/* 0A0774 7F06BC44 0FC1B11B */ jal return_null -/* 0A0778 7F06BC48 00000000 */ nop -.L7F06BC4C: -/* 0A077C 7F06BC4C 52600065 */ beql $s3, $zero, .L7F06BDE4 -/* 0A0780 7F06BC50 8FBF002C */ lw $ra, 0x2c($sp) -/* 0A0784 7F06BC54 8E660000 */ lw $a2, ($s3) -.L7F06BC58: -/* 0A0788 7F06BC58 8E710004 */ lw $s1, 4($s3) -/* 0A078C 7F06BC5C 3C048005 */ lui $a0, %hi(aDrawjointlistNoObject0xX) -/* 0A0790 7F06BC60 8CC50008 */ lw $a1, 8($a2) -/* 0A0794 7F06BC64 2484443C */ addiu $a0, %lo(aDrawjointlistNoObject0xX) # addiu $a0, $a0, 0x443c -/* 0A0798 7F06BC68 02208025 */ move $s0, $s1 -/* 0A079C 7F06BC6C 54A00008 */ bnezl $a1, .L7F06BC90 -/* 0A07A0 7F06BC70 8CB8001C */ lw $t8, 0x1c($a1) -/* 0A07A4 7F06BC74 0C0033D1 */ jal osSyncPrintf -/* 0A07A8 7F06BC78 00C02825 */ move $a1, $a2 -/* 0A07AC 7F06BC7C 0FC1B11B */ jal return_null -/* 0A07B0 7F06BC80 00000000 */ nop -/* 0A07B4 7F06BC84 8E6F0000 */ lw $t7, ($s3) -/* 0A07B8 7F06BC88 8DE50008 */ lw $a1, 8($t7) -/* 0A07BC 7F06BC8C 8CB8001C */ lw $t8, 0x1c($a1) -.L7F06BC90: -/* 0A07C0 7F06BC90 3C048005 */ lui $a0, %hi(aDrawjointlistObjectNotInitialised0) -/* 0A07C4 7F06BC94 57000006 */ bnezl $t8, .L7F06BCB0 -/* 0A07C8 7F06BC98 8E990018 */ lw $t9, 0x18($s4) -/* 0A07CC 7F06BC9C 0C0033D1 */ jal osSyncPrintf -/* 0A07D0 7F06BCA0 24844460 */ addiu $a0, %lo(aDrawjointlistObjectNotInitialised0) # addiu $a0, $a0, 0x4460 -/* 0A07D4 7F06BCA4 0FC1B11B */ jal return_null -/* 0A07D8 7F06BCA8 00000000 */ nop -/* 0A07DC 7F06BCAC 8E990018 */ lw $t9, 0x18($s4) -.L7F06BCB0: -/* 0A07E0 7F06BCB0 02202825 */ move $a1, $s1 -/* 0A07E4 7F06BCB4 5320000B */ beql $t9, $zero, .L7F06BCE4 -/* 0A07E8 7F06BCB8 8E82000C */ lw $v0, 0xc($s4) -/* 0A07EC 7F06BCBC 0FC1B3A4 */ jal getjointsize -/* 0A07F0 7F06BCC0 8E640000 */ lw $a0, ($s3) -/* 0A07F4 7F06BCC4 C6640008 */ lwc1 $f4, 8($s3) -/* 0A07F8 7F06BCC8 4600203C */ c.lt.s $f4, $f0 -/* 0A07FC 7F06BCCC 00000000 */ nop -/* 0A0800 7F06BCD0 4500000E */ bc1f .L7F06BD0C -/* 0A0804 7F06BCD4 00000000 */ nop -/* 0A0808 7F06BCD8 1000000C */ b .L7F06BD0C -/* 0A080C 7F06BCDC 00008025 */ move $s0, $zero -/* 0A0810 7F06BCE0 8E82000C */ lw $v0, 0xc($s4) -.L7F06BCE4: -/* 0A0814 7F06BCE4 3C09BC00 */ lui $t1, (0xBC000C06 >> 16) # lui $t1, 0xbc00 -/* 0A0818 7F06BCE8 35290C06 */ ori $t1, (0xBC000C06 & 0xFFFF) # ori $t1, $t1, 0xc06 -/* 0A081C 7F06BCEC 24480008 */ addiu $t0, $v0, 8 -/* 0A0820 7F06BCF0 AE88000C */ sw $t0, 0xc($s4) -/* 0A0824 7F06BCF4 AC490000 */ sw $t1, ($v0) -/* 0A0828 7F06BCF8 8E6A0000 */ lw $t2, ($s3) -/* 0A082C 7F06BCFC 00409025 */ move $s2, $v0 -/* 0A0830 7F06BD00 0C003A2C */ jal osVirtualToPhysical -/* 0A0834 7F06BD04 8D44000C */ lw $a0, 0xc($t2) -/* 0A0838 7F06BD08 AE420004 */ sw $v0, 4($s2) -.L7F06BD0C: -/* 0A083C 7F06BD0C 52000032 */ beql $s0, $zero, .L7F06BDD8 -/* 0A0840 7F06BD10 8E73000C */ lw $s3, 0xc($s3) -/* 0A0844 7F06BD14 96020000 */ lhu $v0, ($s0) -.L7F06BD18: -/* 0A0848 7F06BD18 24120001 */ li $s2, 1 -/* 0A084C 7F06BD1C 304B00FF */ andi $t3, $v0, 0xff -/* 0A0850 7F06BD20 256CFFFF */ addiu $t4, $t3, -1 -/* 0A0854 7F06BD24 2D810018 */ sltiu $at, $t4, 0x18 -/* 0A0858 7F06BD28 1020000F */ beqz $at, .L7F06BD68 -/* 0A085C 7F06BD2C 000C6080 */ sll $t4, $t4, 2 -/* 0A0860 7F06BD30 3C018005 */ lui $at, %hi(obj_table_jointlist) -/* 0A0864 7F06BD34 002C0821 */ addu $at, $at, $t4 -/* 0A0868 7F06BD38 8C2C4538 */ lw $t4, %lo(obj_table_jointlist)($at) -.L7F06BD3C: -/* 0A086C 7F06BD3C 01800008 */ jr $t4 -/* 0A0870 7F06BD40 00000000 */ nop -.L7F06BD44: -/* 0A0874 7F06BD44 16110006 */ bne $s0, $s1, .L7F06BD60 -/* 0A0878 7F06BD48 02802025 */ move $a0, $s4 -/* 0A087C 7F06BD4C 8E650000 */ lw $a1, ($s3) -/* 0A0880 7F06BD50 0FC1D14D */ jal sub_GAME_7F074534 -/* 0A0884 7F06BD54 02003025 */ move $a2, $s0 -/* 0A0888 7F06BD58 10000007 */ b .L7F06BD78 -/* 0A088C 7F06BD5C 00000000 */ nop -.L7F06BD60: -/* 0A0890 7F06BD60 10000005 */ b .L7F06BD78 -/* 0A0894 7F06BD64 00009025 */ move $s2, $zero -def_7F06BD3C: -.L7F06BD68: -/* 0A0898 7F06BD68 02802025 */ move $a0, $s4 -/* 0A089C 7F06BD6C 8E650000 */ lw $a1, ($s3) -/* 0A08A0 7F06BD70 0FC1D14D */ jal sub_GAME_7F074534 -/* 0A08A4 7F06BD74 02003025 */ move $a2, $s0 -.L7F06BD78: -/* 0A08A8 7F06BD78 12400006 */ beqz $s2, .L7F06BD94 -/* 0A08AC 7F06BD7C 00000000 */ nop -/* 0A08B0 7F06BD80 8E020014 */ lw $v0, 0x14($s0) -/* 0A08B4 7F06BD84 10400003 */ beqz $v0, .L7F06BD94 -/* 0A08B8 7F06BD88 00000000 */ nop -/* 0A08BC 7F06BD8C 1000000F */ b .L7F06BDCC -/* 0A08C0 7F06BD90 00408025 */ move $s0, $v0 -.L7F06BD94: -/* 0A08C4 7F06BD94 1200000D */ beqz $s0, .L7F06BDCC -/* 0A08C8 7F06BD98 00000000 */ nop -.L7F06BD9C: -/* 0A08CC 7F06BD9C 56110004 */ bnel $s0, $s1, .L7F06BDB0 -/* 0A08D0 7F06BDA0 8E02000C */ lw $v0, 0xc($s0) -/* 0A08D4 7F06BDA4 10000009 */ b .L7F06BDCC -/* 0A08D8 7F06BDA8 00008025 */ move $s0, $zero -/* 0A08DC 7F06BDAC 8E02000C */ lw $v0, 0xc($s0) -.L7F06BDB0: -/* 0A08E0 7F06BDB0 50400004 */ beql $v0, $zero, .L7F06BDC4 -/* 0A08E4 7F06BDB4 8E100008 */ lw $s0, 8($s0) -/* 0A08E8 7F06BDB8 10000004 */ b .L7F06BDCC -/* 0A08EC 7F06BDBC 00408025 */ move $s0, $v0 -/* 0A08F0 7F06BDC0 8E100008 */ lw $s0, 8($s0) -.L7F06BDC4: -/* 0A08F4 7F06BDC4 1600FFF5 */ bnez $s0, .L7F06BD9C -/* 0A08F8 7F06BDC8 00000000 */ nop -.L7F06BDCC: -/* 0A08FC 7F06BDCC 5600FFD2 */ bnezl $s0, .L7F06BD18 -/* 0A0900 7F06BDD0 96020000 */ lhu $v0, ($s0) -/* 0A0904 7F06BDD4 8E73000C */ lw $s3, 0xc($s3) -.L7F06BDD8: -/* 0A0908 7F06BDD8 5660FF9F */ bnezl $s3, .L7F06BC58 -/* 0A090C 7F06BDDC 8E660000 */ lw $a2, ($s3) -/* 0A0910 7F06BDE0 8FBF002C */ lw $ra, 0x2c($sp) -.L7F06BDE4: -/* 0A0914 7F06BDE4 8FB00018 */ lw $s0, 0x18($sp) -/* 0A0918 7F06BDE8 8FB1001C */ lw $s1, 0x1c($sp) -/* 0A091C 7F06BDEC 8FB20020 */ lw $s2, 0x20($sp) -/* 0A0920 7F06BDF0 8FB30024 */ lw $s3, 0x24($sp) -/* 0A0924 7F06BDF4 8FB40028 */ lw $s4, 0x28($sp) -/* 0A0928 7F06BDF8 03E00008 */ jr $ra -/* 0A092C 7F06BDFC 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif - -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -/*D:80054538*/ -glabel obj_table_jointlist -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD44 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD44 -.word .L7F06BD68 -.word .L7F06BD68 -.word .L7F06BD68 - -.text -glabel drawjointlist -/* 09EDAC 7F06C3BC 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 09EDB0 7F06C3C0 AFB40028 */ sw $s4, 0x28($sp) -/* 09EDB4 7F06C3C4 AFB30024 */ sw $s3, 0x24($sp) -/* 09EDB8 7F06C3C8 00A09825 */ move $s3, $a1 -/* 09EDBC 7F06C3CC 0080A025 */ move $s4, $a0 -/* 09EDC0 7F06C3D0 AFBF002C */ sw $ra, 0x2c($sp) -/* 09EDC4 7F06C3D4 AFB20020 */ sw $s2, 0x20($sp) -/* 09EDC8 7F06C3D8 AFB1001C */ sw $s1, 0x1c($sp) -/* 09EDCC 7F06C3DC 10A0004F */ beqz $a1, .L7F06C51C -/* 09EDD0 7F06C3E0 AFB00018 */ sw $s0, 0x18($sp) -/* 09EDD4 7F06C3E4 8E8E0018 */ lw $t6, 0x18($s4) -.L7F06C3E8: -/* 09EDD8 7F06C3E8 8E710004 */ lw $s1, 4($s3) -/* 09EDDC 7F06C3EC 11C0000B */ beqz $t6, .L7F06C41C -/* 09EDE0 7F06C3F0 02208025 */ move $s0, $s1 -/* 09EDE4 7F06C3F4 8E640000 */ lw $a0, ($s3) -/* 09EDE8 7F06C3F8 0FC1B4D5 */ jal getjointsize -/* 09EDEC 7F06C3FC 02202825 */ move $a1, $s1 -/* 09EDF0 7F06C400 C6640008 */ lwc1 $f4, 8($s3) -/* 09EDF4 7F06C404 4600203C */ c.lt.s $f4, $f0 -/* 09EDF8 7F06C408 00000000 */ nop -/* 09EDFC 7F06C40C 4500000E */ bc1f .L7F06C448 -/* 09EE00 7F06C410 00000000 */ nop -/* 09EE04 7F06C414 1000000C */ b .L7F06C448 -/* 09EE08 7F06C418 00008025 */ move $s0, $zero -.L7F06C41C: -/* 09EE0C 7F06C41C 8E82000C */ lw $v0, 0xc($s4) -/* 09EE10 7F06C420 3C18BC00 */ lui $t8, (0xBC000C06 >> 16) # lui $t8, 0xbc00 -/* 09EE14 7F06C424 37180C06 */ ori $t8, (0xBC000C06 & 0xFFFF) # ori $t8, $t8, 0xc06 -/* 09EE18 7F06C428 244F0008 */ addiu $t7, $v0, 8 -/* 09EE1C 7F06C42C AE8F000C */ sw $t7, 0xc($s4) -/* 09EE20 7F06C430 AC580000 */ sw $t8, ($v0) -/* 09EE24 7F06C434 8E790000 */ lw $t9, ($s3) -/* 09EE28 7F06C438 00409025 */ move $s2, $v0 -/* 09EE2C 7F06C43C 0C003838 */ jal osVirtualToPhysical -/* 09EE30 7F06C440 8F24000C */ lw $a0, 0xc($t9) -/* 09EE34 7F06C444 AE420004 */ sw $v0, 4($s2) -.L7F06C448: -/* 09EE38 7F06C448 52000032 */ beql $s0, $zero, .L7F06C514 -/* 09EE3C 7F06C44C 8E73000C */ lw $s3, 0xc($s3) -/* 09EE40 7F06C450 96020000 */ lhu $v0, ($s0) -.L7F06C454: -/* 09EE44 7F06C454 24120001 */ li $s2, 1 -/* 09EE48 7F06C458 304800FF */ andi $t0, $v0, 0xff -/* 09EE4C 7F06C45C 2509FFFF */ addiu $t1, $t0, -1 -/* 09EE50 7F06C460 2D210018 */ sltiu $at, $t1, 0x18 -/* 09EE54 7F06C464 1020000F */ beqz $at, .L7F06C4A4 -/* 09EE58 7F06C468 00094880 */ sll $t1, $t1, 2 -/* 09EE5C 7F06C46C 3C018005 */ lui $at, %hi(obj_table_jointlist) -/* 09EE60 7F06C470 00290821 */ addu $at, $at, $t1 -/* 09EE64 7F06C474 8C29A608 */ lw $t1, %lo(obj_table_jointlist)($at) -.L7F06BD3C: -/* 09EE68 7F06C478 01200008 */ jr $t1 -/* 09EE6C 7F06C47C 00000000 */ nop -.L7F06BD44: -/* 09EE70 7F06C480 16110006 */ bne $s0, $s1, .L7F06C49C -/* 09EE74 7F06C484 02802025 */ move $a0, $s4 -/* 09EE78 7F06C488 8E650000 */ lw $a1, ($s3) -/* 09EE7C 7F06C48C 0FC1D182 */ jal sub_GAME_7F074534 -/* 09EE80 7F06C490 02003025 */ move $a2, $s0 -/* 09EE84 7F06C494 10000007 */ b .L7F06C4B4 -/* 09EE88 7F06C498 00000000 */ nop -.L7F06C49C: -/* 09EE8C 7F06C49C 10000005 */ b .L7F06C4B4 -/* 09EE90 7F06C4A0 00009025 */ move $s2, $zero -.L7F06BD68: -.L7F06C4A4: -/* 09EE94 7F06C4A4 02802025 */ move $a0, $s4 -/* 09EE98 7F06C4A8 8E650000 */ lw $a1, ($s3) -/* 09EE9C 7F06C4AC 0FC1D182 */ jal sub_GAME_7F074534 -/* 09EEA0 7F06C4B0 02003025 */ move $a2, $s0 -.L7F06C4B4: -/* 09EEA4 7F06C4B4 12400006 */ beqz $s2, .L7F06C4D0 -/* 09EEA8 7F06C4B8 00000000 */ nop -/* 09EEAC 7F06C4BC 8E020014 */ lw $v0, 0x14($s0) -/* 09EEB0 7F06C4C0 10400003 */ beqz $v0, .L7F06C4D0 -/* 09EEB4 7F06C4C4 00000000 */ nop -/* 09EEB8 7F06C4C8 1000000F */ b .L7F06C508 -/* 09EEBC 7F06C4CC 00408025 */ move $s0, $v0 -.L7F06C4D0: -/* 09EEC0 7F06C4D0 1200000D */ beqz $s0, .L7F06C508 -/* 09EEC4 7F06C4D4 00000000 */ nop -.L7F06C4D8: -/* 09EEC8 7F06C4D8 56110004 */ bnel $s0, $s1, .L7F06C4EC -/* 09EECC 7F06C4DC 8E02000C */ lw $v0, 0xc($s0) -/* 09EED0 7F06C4E0 10000009 */ b .L7F06C508 -/* 09EED4 7F06C4E4 00008025 */ move $s0, $zero -/* 09EED8 7F06C4E8 8E02000C */ lw $v0, 0xc($s0) -.L7F06C4EC: -/* 09EEDC 7F06C4EC 50400004 */ beql $v0, $zero, .L7F06C500 -/* 09EEE0 7F06C4F0 8E100008 */ lw $s0, 8($s0) -/* 09EEE4 7F06C4F4 10000004 */ b .L7F06C508 -/* 09EEE8 7F06C4F8 00408025 */ move $s0, $v0 -/* 09EEEC 7F06C4FC 8E100008 */ lw $s0, 8($s0) -.L7F06C500: -/* 09EEF0 7F06C500 1600FFF5 */ bnez $s0, .L7F06C4D8 -/* 09EEF4 7F06C504 00000000 */ nop -.L7F06C508: -/* 09EEF8 7F06C508 5600FFD2 */ bnezl $s0, .L7F06C454 -/* 09EEFC 7F06C50C 96020000 */ lhu $v0, ($s0) -/* 09EF00 7F06C510 8E73000C */ lw $s3, 0xc($s3) -.L7F06C514: -/* 09EF04 7F06C514 5660FFB4 */ bnezl $s3, .L7F06C3E8 -/* 09EF08 7F06C518 8E8E0018 */ lw $t6, 0x18($s4) -.L7F06C51C: -/* 09EF0C 7F06C51C 8FBF002C */ lw $ra, 0x2c($sp) -/* 09EF10 7F06C520 8FB00018 */ lw $s0, 0x18($sp) -/* 09EF14 7F06C524 8FB1001C */ lw $s1, 0x1c($sp) -/* 09EF18 7F06C528 8FB20020 */ lw $s2, 0x20($sp) -/* 09EF1C 7F06C52C 8FB30024 */ lw $s3, 0x24($sp) -/* 09EF20 7F06C530 8FB40028 */ lw $s4, 0x28($sp) -/* 09EF24 7F06C534 03E00008 */ jr $ra -/* 09EF28 7F06C538 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif -#endif +#undef OP16_NODEINDEX_0C +#undef OP16_NODEINDEX_0E +#undef OP16_NODEINDEX_10 +#undef OP16_POS_X_VOL +#undef OP16_POS_Y_VOL +#undef OP16_POS_Z_VOL - -f32 probably_damage_detail_blood_effect_related(ModelFileHeader *head, s32 unused, s32 unused2, s32 *arg3, s32 *arg4); -#ifdef NONMATCHING -/* DISPLAY WARNING: Type casts are NOT being printed */ - -void *probably_damage_detail_blood_effect_related(ModelFileHeader *node, Coord3d *param_2, Coord3d *param_3, ulonglong param_4, ModelFileHeader *param_5) - +/** + * Address: 7F06BB28 + */ +ModelHitEntry *sub_GAME_7F06BB28(ModelHitEntry *modelhit) { - bool bVar1; - void *pvVar4; - undefined8 uVar2; - double dVar3; - ModelNode *rootNode; - ModelNode *chrNode; - ModelNode *chr; + ModelHitEntry stacknodes[2]; + ModelHitEntry *last; + ModelHitEntry *current; + ModelHitEntry *next; + ModelHitEntry *scan; + ModelHitEntry *best; + f32 bestvalue; - rootNode = node->RootNode; - do + if (modelhit != NULL) { - if (rootNode == NULL) + last = modelhit; + + if (last->next != NULL) { - node->RootNode = NULL; - dVar3 = 0.0; -LAB_8239ec34: - return dVar3; - } - bVar1 = true; - chr = rootNode->Data; - chrNode = chr; - if (param_5->RootNode != NULL) - { - chrNode = param_5->RootNode; - param_5->RootNode = NULL; - } - while (chrNode != NULL) - { - if ((bVar1) && (chrNode->Child != NULL)) + do { - chrNode = chrNode->Child; + last = last->next; + + if (next); } - else + while (last->next != NULL); + } + + stacknodes[1].next = modelhit; + modelhit->prev = &stacknodes[1]; + + stacknodes[0].prev = last; + last->next = &stacknodes[0]; + + current = &stacknodes[1]; + + do + { + next = current->next; + best = NULL; + bestvalue = -M_U32_MAX_VALUE_F; + + if (next != &stacknodes[0]) { - for (; chrNode != NULL; chrNode = chrNode->Parent) + scan = next; + + do { - if (chrNode == chr) + if (bestvalue < scan->sortvalue) { - chrNode = NULL; - break; + bestvalue = scan->sortvalue; + best = scan; } - if (chrNode->Next != NULL) + + scan = scan->next; + } + while (scan != &stacknodes[0]); + } + + if (best != NULL) + { + best->next->prev = best->prev; + best->prev->next = best->next; + + best->prev = current; + best->next = current->next; + + current->next->prev = best; + current->next = best; + + next = best; + } + + current = next; + } + while (next != &stacknodes[0]); + + modelhit = stacknodes[1].next; + stacknodes[1].next->prev = NULL; + stacknodes[0].prev->next = NULL; + } + + return modelhit; +} + + +#if defined(VERSION_US) || defined(VERSION_JP) +void drawjointlist(ModelRenderData *data, ModelHitEntry *entry) +{ + ModelNode *root; + ModelNode *node; + s32 descend; + Gfx *gdl; + s32 opcode; + + if (data->gdl == NULL) + { + osSyncPrintf("drawjointlist: no gfxlist!\n"); + return_null(); + } + + while (entry != NULL) + { + root = entry->rootnode; + node = root; + + if (entry->model->obj == NULL) + { + osSyncPrintf("drawjointlist: no object! (0x%X)\n", entry->model); + return_null(); + } + + if (!entry->model->obj->isLoaded) + { + osSyncPrintf("drawjointlist: object not initialised! (0x%X)\n", entry->model->obj); + return_null(); + } + + if (data->unk18 != 0) + { + if (entry->sortvalue < getjointsize(entry->model, root)) + { + node = NULL; + } + } + else + { + gdl = data->gdl++; + gSPSegment(gdl, SPSEGMENT_MODEL_MTX, osVirtualToPhysical(entry->model->render_pos)); + } + + if (node != NULL) + { + do + { + descend = 1; + opcode = node->Opcode & 0xff; + + switch (opcode) + { + case MODELNODE_OPCODE_HEADER: + case MODELNODE_OPCODE_GROUP: + case MODELNODE_OPCODE_OP03: + case MODELNODE_OPCODE_OP11: + case MODELNODE_OPCODE_GUNFIRE: + case MODELNODE_OPCODE_SHADOW: + case MODELNODE_OPCODE_OP14: + case MODELNODE_OPCODE_INTERLINK: + case MODELNODE_OPCODE_OP16: + case MODELNODE_OPCODE_GROUPSIMPLE: + if (node == root) { - chrNode = chrNode->Next; - break; + sub_GAME_7F074534(data, entry->model, node); + } + else + { + descend = 0; + } + break; + + case MODELNODE_OPCODE_DL: + case MODELNODE_OPCODE_OP05: + case MODELNODE_OPCODE_OP06: + case MODELNODE_OPCODE_OP07: + case MODELNODE_OPCODE_LOD: + case MODELNODE_OPCODE_BSP: + case MODELNODE_OPCODE_BBOX: + case MODELNODE_OPCODE_OP17: + case MODELNODE_OPCODE_SWITCH: + case MODELNODE_OPCODE_OP19: + case MODELNODE_OPCODE_OP20: + case MODELNODE_OPCODE_DLPRIMARY: + case MODELNODE_OPCODE_HEAD: + case MODELNODE_OPCODE_DLCOLLISION: + default: + sub_GAME_7F074534(data, entry->model, node); + break; + } + + if (descend && node->Child != NULL) + { + node = node->Child; + } + else if (node != NULL) + { + do + { + if (node == root) + { + node = NULL; + break; + } + + if (node->Next != NULL) + { + node = node->Next; + break; + } + + node = node->Parent; + } + while (node != NULL); + } + } + while (node != NULL); + } + + entry = entry->next; + } +} +#endif + + +#if defined(VERSION_EU) +void drawjointlist(ModelRenderData *data, ModelHitEntry *entry) +{ + ModelNode *root; + ModelNode *node; + s32 descend; + Gfx *gdl; + s32 opcode; + + while (entry != NULL) + { + root = entry->rootnode; + node = root; + + if (data->unk18 != 0) + { + if (entry->sortvalue < getjointsize(entry->model, root)) + { + node = NULL; + } + } + else + { + gdl = data->gdl++; + gSPSegment(gdl, SPSEGMENT_MODEL_MTX, osVirtualToPhysical(entry->model->render_pos)); + } + + if (node != NULL) + { + do + { + descend = 1; + opcode = node->Opcode & 0xff; + + switch (opcode) + { + case MODELNODE_OPCODE_HEADER: + case MODELNODE_OPCODE_GROUP: + case MODELNODE_OPCODE_OP03: + case MODELNODE_OPCODE_OP11: + case MODELNODE_OPCODE_GUNFIRE: + case MODELNODE_OPCODE_SHADOW: + case MODELNODE_OPCODE_OP14: + case MODELNODE_OPCODE_INTERLINK: + case MODELNODE_OPCODE_OP16: + case MODELNODE_OPCODE_GROUPSIMPLE: + if (node == root) + { + sub_GAME_7F074534(data, entry->model, node); + } + else + { + descend = 0; + } + break; + + case MODELNODE_OPCODE_DL: + case MODELNODE_OPCODE_OP05: + case MODELNODE_OPCODE_OP06: + case MODELNODE_OPCODE_OP07: + case MODELNODE_OPCODE_LOD: + case MODELNODE_OPCODE_BSP: + case MODELNODE_OPCODE_BBOX: + case MODELNODE_OPCODE_OP17: + case MODELNODE_OPCODE_SWITCH: + case MODELNODE_OPCODE_OP19: + case MODELNODE_OPCODE_OP20: + case MODELNODE_OPCODE_DLPRIMARY: + case MODELNODE_OPCODE_HEAD: + case MODELNODE_OPCODE_DLCOLLISION: + default: + sub_GAME_7F074534(data, entry->model, node); + break; + } + + if (descend && node->Child != NULL) + { + node = node->Child; + } + else if (node != NULL) + { + do + { + if (node == root) + { + node = NULL; + break; + } + + if (node->Next != NULL) + { + node = node->Next; + break; + } + + node = node->Parent; + } + while (node != NULL); + } + } + while (node != NULL); + } + + entry = entry->next; + } +} +#endif + + +s32 probably_damage_detail_blood_effect_related(ModelHitEntry **entryptr, coord3d *raypos, coord3d *raydir, Model **outModel, ModelNode **inoutNode) +{ + ModelHitEntry *entry = *entryptr; + ModelNode *node; + s32 descend; + ModelNode *root; + ModelNode *next; + + while (entry != NULL) { + ModelNode *resume = *inoutNode; + + root = entry->rootnode; + descend = TRUE; + + if (resume != NULL) { + node = resume; + *inoutNode = NULL; + } else { + node = root; + } + + while (node != NULL) { + if (descend && node->Child != NULL) { + node = node->Child; + } else { + if (node != NULL) { +walk_node: + if (node == root) { + node = NULL; + } else { + next = node->Next; + + if (next != NULL) { + node = next; + } else { + node = node->Parent; + + if (node != NULL) { + goto walk_node; + } + } } } - if (chrNode == NULL) break; + + if (node == NULL) { + break; + } } - bVar1 = true; - switch (*&chrNode->Opcode & 0xff) + + descend = TRUE; + { - case 1: - case 2: - case 3: - case 0x15: - bVar1 = false; + u16 opcode = node->Opcode; + + descend = TRUE; + + switch (opcode & 0xff) { + case MODELNODE_OPCODE_HEADER: + case MODELNODE_OPCODE_GROUP: + case MODELNODE_OPCODE_OP03: + case MODELNODE_OPCODE_GROUPSIMPLE: + descend = FALSE; break; - case 8: - modelApplyDistanceRelations(rootNode->Opcode, chrNode); + + case MODELNODE_OPCODE_OP11: + case MODELNODE_OPCODE_GUNFIRE: + case MODELNODE_OPCODE_SHADOW: + case MODELNODE_OPCODE_OP14: + case MODELNODE_OPCODE_INTERLINK: + case MODELNODE_OPCODE_OP16: + descend = FALSE; break; - case 10: - pvVar4 = sub_GAME_7F074C68(rootNode->Opcode, chrNode, param_2, param_3); - if (pvVar4 != NULL) - { - *param_4 = rootNode->Opcode; - param_5->RootNode = chrNode; - node->RootNode = rootNode; - /* WARNING: Load size is inaccurate */ - dVar3 = *chrNode->Data; - goto LAB_8239ec34; + + case MODELNODE_OPCODE_BBOX: + if (modelTestRayIntersectsNodeBBox(entry->model, node, raypos, raydir)) { + *outModel = entry->model; + *inoutNode = node; + *entryptr = entry; + + return *(s32 *)node->Data; } - bVar1 = false; + + descend = FALSE; break; - case 0xb: - case 0xc: - case 0xd: - case 0xe: - case 0xf: - case 0x10: - bVar1 = false; - break; - case 0x11: - uVar2 = sub_GAME_7F074CAC(rootNode->Opcode, chrNode, ¶m_2->x, ¶m_3->x); - if (uVar2 != 0) - { - *param_4 = rootNode->Opcode; - param_5->RootNode = chrNode; - node->RootNode = rootNode; - /* WARNING: Load size is inaccurate */ - dVar3 = *chrNode->Data; - goto LAB_8239ec34; + + case MODELNODE_OPCODE_OP17: + if (sub_GAME_7F074CAC(entry->model, node, raypos, raydir)) { + *outModel = entry->model; + *inoutNode = node; + *entryptr = entry; + + return *(s32 *)node->Data; } - bVar1 = false; + + descend = FALSE; break; - case 0x12: - modelApplyToggleRelations(rootNode->Opcode, chrNode); + + case MODELNODE_OPCODE_LOD: + modelApplyDistanceRelations(entry->model, node); break; - case 0x17: - modelApplyHeadRelations(rootNode->Opcode, chrNode); + + case MODELNODE_OPCODE_SWITCH: + modelApplyToggleRelations(entry->model, node); + break; + + case MODELNODE_OPCODE_HEAD: + modelApplyHeadRelations(entry->model, node); + break; + + case MODELNODE_OPCODE_DLCOLLISION: + default: + break; + } } } - rootNode = rootNode->Prev; - } while (true); + + entry = entry->prev; + } + + *entryptr = NULL; + return 0; } -#else -GLOBAL_ASM( -.late_rodata -/*D:80054598*/ -glabel jpt_damage_detail -.word .L7F06BEF4 -.word .L7F06BEF4 -.word .L7F06BEF4 -.word .L7F06BFC8 -.word .L7F06BFC8 -.word .L7F06BFC8 -.word .L7F06BFC8 -.word .L7F06BF94 -.word .L7F06BFC8 -.word .L7F06BF04 -.word .L7F06BEFC -.word .L7F06BEFC -.word .L7F06BEFC -.word .L7F06BEFC -.word .L7F06BEFC -.word .L7F06BEFC -.word .L7F06BF4C -.word .L7F06BFA8 -.word .L7F06BFC8 -.word .L7F06BFC8 -.word .L7F06BEF4 -.word .L7F06BFC8 -.word .L7F06BFBC -.word .L7F06BFC8 -.size jpt_damage_detail, . - jpt_damage_detail - -/*D:800545F8*/ -glabel D_800545F8 -.word 0,0 - -.text -glabel probably_damage_detail_blood_effect_related -/* 0A0930 7F06BE00 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0A0934 7F06BE04 AFBF0034 */ sw $ra, 0x34($sp) -/* 0A0938 7F06BE08 AFB60030 */ sw $s6, 0x30($sp) -/* 0A093C 7F06BE0C AFB5002C */ sw $s5, 0x2c($sp) -/* 0A0940 7F06BE10 AFB40028 */ sw $s4, 0x28($sp) -/* 0A0944 7F06BE14 AFB30024 */ sw $s3, 0x24($sp) -/* 0A0948 7F06BE18 AFB20020 */ sw $s2, 0x20($sp) -/* 0A094C 7F06BE1C AFB1001C */ sw $s1, 0x1c($sp) -/* 0A0950 7F06BE20 AFB00018 */ sw $s0, 0x18($sp) -/* 0A0954 7F06BE24 AFA40038 */ sw $a0, 0x38($sp) -/* 0A0958 7F06BE28 AFA70044 */ sw $a3, 0x44($sp) -/* 0A095C 7F06BE2C 8C930000 */ lw $s3, ($a0) -/* 0A0960 7F06BE30 00A0A025 */ move $s4, $a1 -/* 0A0964 7F06BE34 00C0A825 */ move $s5, $a2 -/* 0A0968 7F06BE38 12600068 */ beqz $s3, .L7F06BFDC -/* 0A096C 7F06BE3C 8FB60048 */ lw $s6, 0x48($sp) -/* 0A0970 7F06BE40 8EC20000 */ lw $v0, ($s6) -.L7F06BE44: -/* 0A0974 7F06BE44 8E720004 */ lw $s2, 4($s3) -/* 0A0978 7F06BE48 24110001 */ li $s1, 1 -/* 0A097C 7F06BE4C 10400004 */ beqz $v0, .L7F06BE60 -/* 0A0980 7F06BE50 02408025 */ move $s0, $s2 -/* 0A0984 7F06BE54 00408025 */ move $s0, $v0 -/* 0A0988 7F06BE58 10000001 */ b .L7F06BE60 -/* 0A098C 7F06BE5C AEC00000 */ sw $zero, ($s6) -.L7F06BE60: -/* 0A0990 7F06BE60 5200005C */ beql $s0, $zero, .L7F06BFD4 -/* 0A0994 7F06BE64 8E730010 */ lw $s3, 0x10($s3) -.L7F06BE68: -/* 0A0998 7F06BE68 12200006 */ beqz $s1, .L7F06BE84 -/* 0A099C 7F06BE6C 00000000 */ nop -/* 0A09A0 7F06BE70 8E020014 */ lw $v0, 0x14($s0) -/* 0A09A4 7F06BE74 10400003 */ beqz $v0, .L7F06BE84 -/* 0A09A8 7F06BE78 00000000 */ nop -/* 0A09AC 7F06BE7C 10000011 */ b .L7F06BEC4 -/* 0A09B0 7F06BE80 00408025 */ move $s0, $v0 -.L7F06BE84: -/* 0A09B4 7F06BE84 1200000D */ beqz $s0, .L7F06BEBC -/* 0A09B8 7F06BE88 00000000 */ nop -.L7F06BE8C: -/* 0A09BC 7F06BE8C 56120004 */ bnel $s0, $s2, .L7F06BEA0 -/* 0A09C0 7F06BE90 8E02000C */ lw $v0, 0xc($s0) -/* 0A09C4 7F06BE94 10000009 */ b .L7F06BEBC -/* 0A09C8 7F06BE98 00008025 */ move $s0, $zero -/* 0A09CC 7F06BE9C 8E02000C */ lw $v0, 0xc($s0) -.L7F06BEA0: -/* 0A09D0 7F06BEA0 50400004 */ beql $v0, $zero, .L7F06BEB4 -/* 0A09D4 7F06BEA4 8E100008 */ lw $s0, 8($s0) -/* 0A09D8 7F06BEA8 10000004 */ b .L7F06BEBC -/* 0A09DC 7F06BEAC 00408025 */ move $s0, $v0 -/* 0A09E0 7F06BEB0 8E100008 */ lw $s0, 8($s0) -.L7F06BEB4: -/* 0A09E4 7F06BEB4 1600FFF5 */ bnez $s0, .L7F06BE8C -/* 0A09E8 7F06BEB8 00000000 */ nop -.L7F06BEBC: -/* 0A09EC 7F06BEBC 52000045 */ beql $s0, $zero, .L7F06BFD4 -/* 0A09F0 7F06BEC0 8E730010 */ lw $s3, 0x10($s3) -.L7F06BEC4: -/* 0A09F4 7F06BEC4 96020000 */ lhu $v0, ($s0) -/* 0A09F8 7F06BEC8 24110001 */ li $s1, 1 -/* 0A09FC 7F06BECC 304F00FF */ andi $t7, $v0, 0xff -/* 0A0A00 7F06BED0 25F8FFFF */ addiu $t8, $t7, -1 -/* 0A0A04 7F06BED4 2F010018 */ sltiu $at, $t8, 0x18 -/* 0A0A08 7F06BED8 1020003B */ beqz $at, .L7F06BFC8 -/* 0A0A0C 7F06BEDC 0018C080 */ sll $t8, $t8, 2 -/* 0A0A10 7F06BEE0 3C018005 */ lui $at, %hi(jpt_damage_detail) -/* 0A0A14 7F06BEE4 00380821 */ addu $at, $at, $t8 -/* 0A0A18 7F06BEE8 8C384598 */ lw $t8, %lo(jpt_damage_detail)($at) -.L7F06BEEC: -/* 0A0A1C 7F06BEEC 03000008 */ jr $t8 -/* 0A0A20 7F06BEF0 00000000 */ nop -.L7F06BEF4: -/* 0A0A24 7F06BEF4 10000034 */ b .L7F06BFC8 -/* 0A0A28 7F06BEF8 00008825 */ move $s1, $zero -.L7F06BEFC: -/* 0A0A2C 7F06BEFC 10000032 */ b .L7F06BFC8 -/* 0A0A30 7F06BF00 00008825 */ move $s1, $zero -.L7F06BF04: -/* 0A0A34 7F06BF04 8E640000 */ lw $a0, ($s3) -/* 0A0A38 7F06BF08 02002825 */ move $a1, $s0 -/* 0A0A3C 7F06BF0C 02803025 */ move $a2, $s4 -/* 0A0A40 7F06BF10 0FC1D31A */ jal sub_GAME_7F074C68 -/* 0A0A44 7F06BF14 02A03825 */ move $a3, $s5 -/* 0A0A48 7F06BF18 1040000A */ beqz $v0, .L7F06BF44 -/* 0A0A4C 7F06BF1C 00000000 */ nop -/* 0A0A50 7F06BF20 8E790000 */ lw $t9, ($s3) -/* 0A0A54 7F06BF24 8FA80044 */ lw $t0, 0x44($sp) -/* 0A0A58 7F06BF28 AD190000 */ sw $t9, ($t0) -/* 0A0A5C 7F06BF2C AED00000 */ sw $s0, ($s6) -/* 0A0A60 7F06BF30 8FA90038 */ lw $t1, 0x38($sp) -/* 0A0A64 7F06BF34 AD330000 */ sw $s3, ($t1) -/* 0A0A68 7F06BF38 8E0A0004 */ lw $t2, 4($s0) -/* 0A0A6C 7F06BF3C 1000002A */ b .L7F06BFE8 -/* 0A0A70 7F06BF40 8D420000 */ lw $v0, ($t2) -.L7F06BF44: -/* 0A0A74 7F06BF44 10000020 */ b .L7F06BFC8 -/* 0A0A78 7F06BF48 00008825 */ move $s1, $zero -.L7F06BF4C: -/* 0A0A7C 7F06BF4C 8E640000 */ lw $a0, ($s3) -/* 0A0A80 7F06BF50 02002825 */ move $a1, $s0 -/* 0A0A84 7F06BF54 02803025 */ move $a2, $s4 -/* 0A0A88 7F06BF58 0FC1D32B */ jal sub_GAME_7F074CAC -/* 0A0A8C 7F06BF5C 02A03825 */ move $a3, $s5 -/* 0A0A90 7F06BF60 1040000A */ beqz $v0, .L7F06BF8C -/* 0A0A94 7F06BF64 00000000 */ nop -/* 0A0A98 7F06BF68 8E6B0000 */ lw $t3, ($s3) -/* 0A0A9C 7F06BF6C 8FAC0044 */ lw $t4, 0x44($sp) -/* 0A0AA0 7F06BF70 AD8B0000 */ sw $t3, ($t4) -/* 0A0AA4 7F06BF74 AED00000 */ sw $s0, ($s6) -/* 0A0AA8 7F06BF78 8FAD0038 */ lw $t5, 0x38($sp) -/* 0A0AAC 7F06BF7C ADB30000 */ sw $s3, ($t5) -/* 0A0AB0 7F06BF80 8E0E0004 */ lw $t6, 4($s0) -/* 0A0AB4 7F06BF84 10000018 */ b .L7F06BFE8 -/* 0A0AB8 7F06BF88 8DC20000 */ lw $v0, ($t6) -.L7F06BF8C: -/* 0A0ABC 7F06BF8C 1000000E */ b .L7F06BFC8 -/* 0A0AC0 7F06BF90 00008825 */ move $s1, $zero -.L7F06BF94: -/* 0A0AC4 7F06BF94 8E640000 */ lw $a0, ($s3) -/* 0A0AC8 7F06BF98 0FC1BA5C */ jal modelApplyDistanceRelations -/* 0A0ACC 7F06BF9C 02002825 */ move $a1, $s0 -/* 0A0AD0 7F06BFA0 10000009 */ b .L7F06BFC8 -/* 0A0AD4 7F06BFA4 00000000 */ nop -.L7F06BFA8: -/* 0A0AD8 7F06BFA8 8E640000 */ lw $a0, ($s3) -/* 0A0ADC 7F06BFAC 0FC1BA6F */ jal modelApplyToggleRelations -/* 0A0AE0 7F06BFB0 02002825 */ move $a1, $s0 -/* 0A0AE4 7F06BFB4 10000004 */ b .L7F06BFC8 -/* 0A0AE8 7F06BFB8 00000000 */ nop -.L7F06BFBC: -/* 0A0AEC 7F06BFBC 8E640000 */ lw $a0, ($s3) -/* 0A0AF0 7F06BFC0 0FC1BA82 */ jal modelApplyHeadRelations -/* 0A0AF4 7F06BFC4 02002825 */ move $a1, $s0 -def_7F06BEEC: -.L7F06BFC8: -/* 0A0AF8 7F06BFC8 1600FFA7 */ bnez $s0, .L7F06BE68 -/* 0A0AFC 7F06BFCC 00000000 */ nop -/* 0A0B00 7F06BFD0 8E730010 */ lw $s3, 0x10($s3) -.L7F06BFD4: -/* 0A0B04 7F06BFD4 5660FF9B */ bnezl $s3, .L7F06BE44 -/* 0A0B08 7F06BFD8 8EC20000 */ lw $v0, ($s6) -.L7F06BFDC: -/* 0A0B0C 7F06BFDC 8FAF0038 */ lw $t7, 0x38($sp) -/* 0A0B10 7F06BFE0 00001025 */ move $v0, $zero -/* 0A0B14 7F06BFE4 ADE00000 */ sw $zero, ($t7) -.L7F06BFE8: -/* 0A0B18 7F06BFE8 8FBF0034 */ lw $ra, 0x34($sp) -/* 0A0B1C 7F06BFEC 8FB00018 */ lw $s0, 0x18($sp) -/* 0A0B20 7F06BFF0 8FB1001C */ lw $s1, 0x1c($sp) -/* 0A0B24 7F06BFF4 8FB20020 */ lw $s2, 0x20($sp) -/* 0A0B28 7F06BFF8 8FB30024 */ lw $s3, 0x24($sp) -/* 0A0B2C 7F06BFFC 8FB40028 */ lw $s4, 0x28($sp) -/* 0A0B30 7F06C000 8FB5002C */ lw $s5, 0x2c($sp) -/* 0A0B34 7F06C004 8FB60030 */ lw $s6, 0x30($sp) -/* 0A0B38 7F06C008 03E00008 */ jr $ra -/* 0A0B3C 7F06C00C 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif - - - -#if 1 -/* -* Address: 0x7F06C010 +/** + * Address: 0x7F06C010 * https://decomp.me/scratch/IDiXU * #MATCH! Unlikley match, not sure why we are setting the root node to the last node. - */ + f32 sub_GAME_7F06C010(ModelFileHeader *head, s32 unused, s32 unused2, s32 *arg3, s32 *arg4) { ModelNode *lastnode = head->RootNode; @@ -2271,36 +1246,28 @@ f32 sub_GAME_7F06C010(ModelFileHeader *head, s32 unused, s32 unused2, s32 *arg3, *arg3 = 0; *arg4 = 0; return probably_damage_detail_blood_effect_related(head, unused, unused2, arg3, arg4); +}*/ + + +/** + * Address: 7F06C010 + * + * Update: decompiling probably_damage_detail_blood_effect_related revealed that the first argument for this function is a ModelHitEntry. + * The previous function matched because both ModelNode and ModelHitEntry happen to have a normal 32 bit field at offset 0x0c. + */ +s32 sub_GAME_7F06C010(ModelHitEntry **entryptr, coord3d *modelRayStart, coord3d *modelRayDir, Model **outModel, ModelNode **outNode) +{ + ModelHitEntry *entry = *entryptr; + + while (entry->next != NULL) + { + entry = entry->next; + } + + *entryptr = entry; + *outModel = NULL; + *outNode = NULL; + + return probably_damage_detail_blood_effect_related( entryptr, modelRayStart, modelRayDir, outModel, outNode); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F06C010 -/* 0A0B40 7F06C010 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0A0B44 7F06C014 AFBF001C */ sw $ra, 0x1c($sp) -/* 0A0B48 7F06C018 8C830000 */ lw $v1, ($a0) -/* 0A0B4C 7F06C01C 8C62000C */ lw $v0, 0xc($v1) -/* 0A0B50 7F06C020 50400006 */ beql $v0, $zero, .L7F06C03C -/* 0A0B54 7F06C024 8FA20030 */ lw $v0, 0x30($sp) -/* 0A0B58 7F06C028 00401825 */ move $v1, $v0 -.L7F06C02C: -/* 0A0B5C 7F06C02C 8C42000C */ lw $v0, 0xc($v0) -/* 0A0B60 7F06C030 5440FFFE */ bnezl $v0, .L7F06C02C -/* 0A0B64 7F06C034 00401825 */ move $v1, $v0 -/* 0A0B68 7F06C038 8FA20030 */ lw $v0, 0x30($sp) -.L7F06C03C: -/* 0A0B6C 7F06C03C AC830000 */ sw $v1, ($a0) -/* 0A0B70 7F06C040 ACE00000 */ sw $zero, ($a3) -/* 0A0B74 7F06C044 AC400000 */ sw $zero, ($v0) -/* 0A0B78 7F06C048 0FC1AF80 */ jal probably_damage_detail_blood_effect_related -/* 0A0B7C 7F06C04C AFA20010 */ sw $v0, 0x10($sp) -/* 0A0B80 7F06C050 8FBF001C */ lw $ra, 0x1c($sp) -/* 0A0B84 7F06C054 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0A0B88 7F06C058 03E00008 */ jr $ra -/* 0A0B8C 7F06C05C 00000000 */ nop -) -#endif - - - diff --git a/src/game/objecthandler.h b/src/game/objecthandler.h index 93f85ee2..04e5a5a6 100644 --- a/src/game/objecthandler.h +++ b/src/game/objecthandler.h @@ -16,7 +16,7 @@ struct bondstruct_unk_op07_related { s32 unk0C; }; -struct ptr_0_s { +struct AnimModelSlot { s16 unk00; s16 unk02; s32 unk04; @@ -70,7 +70,7 @@ struct ptr_0_s { //s32 unkbc; }; -struct ptr_1_s { +struct ModelSlot { s16 unk00; s16 unk02; s32 unk04; @@ -82,9 +82,10 @@ struct ptr_1_s { s32 unk1c; }; -extern struct ptr_0_s *ptr_allocation_0; -extern struct ptr_1_s *ptr_allocation_1; +extern struct AnimModelSlot *g_AnimModelSlots; +extern struct ModelSlot *g_ModelSlots; +extern struct ModelHitEntry *g_ModelHitFreeList; extern s32 g_ModelDistanceDisabled; extern f32 g_ModelDistanceScale; extern u32 g_ModelAnimMergingEnabled; @@ -93,9 +94,20 @@ extern struct bondstruct_unk_animation_related* D_80036414; extern s32 D_80036418; extern s32 D_8003641C; extern u32 D_800363F0; + +extern coord3d D_80036094; +extern coord3d D_800360A0; +extern coord3d D_800360AC; +extern coord3d D_800360B8; +extern coord3d D_80036244; +extern coord3d D_80036254; + extern struct Vertex* (*vtxallocator)(s32 numvertices); +extern void (*g_ModelJointPositionedFunc)(s32 mtxindex, Mtxf *mtx); extern struct bondstruct_unk_op07_related D_800360C4[]; extern Vertex D_800363E0; +extern Vtx D_800363F8; +extern coord3d D_80036408; void fileLoad(ModelFileHeader *header,char *name); void load_object_into_memory_unused_maybe(ModelFileHeader *header,int *recallstring,int *targetloc,int sizeleft); @@ -104,11 +116,15 @@ void load_object_into_memory_unused_maybe(ModelFileHeader *header,int *recallstr PropRecord *chrGiveWeapon(ChrRecord *self, s32 PropID, ITEM_IDS ItemID, s32 flags); // called with struct ChrRecord->field_20 -void sub_GAME_7F06B248(void *arg0); -void drawjointlist(ModelRenderData *arg0, void* arg1); +ModelHitEntry* sub_GAME_7F06B120(ModelHitEntry* head, Model* context); +void sub_GAME_7F06B248(ModelHitEntry *entry); +void drawjointlist(ModelRenderData *arg0, ModelHitEntry *entry); +void sub_GAME_7F06B29C(ModelHitEntry *arg0); +ModelHitEntry *sub_GAME_7F06BB28(ModelHitEntry *modelhit); +s32 probably_damage_detail_blood_effect_related(ModelHitEntry **entryptr, coord3d *raypos, coord3d *raydir, Model **outModel, ModelNode **inoutNode); +s32 sub_GAME_7F06C010(ModelHitEntry **entryptr, coord3d *modelRayStart, coord3d *modelRayDir, Model **outModel, ModelNode **outNode); void load_object_fill_header(struct ModelFileHeader *objheader, u8 *name, u8* dst, s32 size, struct texpool * buffer); -void modelApplyDistanceRelations(Model* model, ModelNode* node); #endif diff --git a/src/game/objecthandler_2.c b/src/game/objecthandler_2.c index 16ced754..e033dfe7 100644 --- a/src/game/objecthandler_2.c +++ b/src/game/objecthandler_2.c @@ -1,18 +1,16 @@ #include -#include "math_floor.h" -#include "math_ceil.h" -#include "quaternion.h" -#include "math_asinfacosf.h" -#include "math_unk_05A9E0.h" #include "chrobjdata.h" +#include "image.h" +#include "math_asinfacosf.h" +#include "math_ceil.h" +#include "math_floor.h" +#include "math_unk_05A9E0.h" +#include "model.h" #include "ob.h" #include "objecthandler.h" +#include "quaternion.h" #include "tex.h" -#include "image.h" -#include "model.h" -//file split per EU -#ifdef NONMATCHING /*** * Perfect Dark: @@ -20,202 +18,69 @@ * * NTSC address 0x7F0762E0. */ -// https://decomp.me/scratch/9a4EO 69.88 -void sub_GAME_7F0762E0(ModelFileHeader *arg0, char *arg1, void *arg2, s32 arg3) +void sub_GAME_7F0762E0(ModelFileHeader *objheader, u8 *name, u8 *dst, struct texpool *buffer) { - ModelNode *sp74; - uintptr_t gdl; // sp6C - uintptr_t sp58; - ModelNode **sp54; - s32 sp50; - s32 temp_fp; - s32 temp_s0; - Gfx *var_s3; - Gfx *temp_a0; - uintptr_t temp_a2; - uintptr_t temp_a1; - s32 var_s1; - s32 var_s2; - - sp54 = arg0->Switches; - sp50 = fileGetIndex(arg1); - temp_s0 = get_rom_remaining_buffer_for_index(sp50); - temp_fp = get_pc_remaining_buffer_for_index(sp50); - sp74 = NULL; - modelIterateDisplayLists(arg0, &sp74, (Gfx**)&gdl); + ModelNode *node; + s32 romremaining; + Gfx *gdl; + s32 pcremaining; + u32 replacementgdl; + ModelNode *curnode; + Gfx *curgdl; + s32 delta; + s32 filedata; + s32 filenum; - if (gdl) + filedata = (s32) objheader->Switches; + filenum = fileGetIndex((char *) name); + + romremaining = get_rom_remaining_buffer_for_index(filenum); + pcremaining = get_pc_remaining_buffer_for_index(filenum); + node = 0; + modelIterateDisplayLists(objheader, &node, &gdl); + + if (gdl != 0) { - var_s3 = gdl; - - //temp_a0 = ((s32)arg0->Switches + ((s32) gdl & 0xFFFFFF)); - temp_a2 = ((s32)temp_fp - (s32)((s32)arg0->Switches + ((s32) gdl & 0xFFFFFF))) + (s32)sp54; - temp_a1 = ((s32)temp_s0 + (s32)sp54) - (s32)temp_a2; - - sp58 = (s32)temp_a1 - (s32)((s32)arg0->Switches + ((s32) gdl & 0xFFFFFF)); + name = (u8 *) ((pcremaining - ((s32) (((u8 *) objheader->Switches) + (((u32) gdl) & 0x00ffffff)))) + ((s32) filedata)); - // texCopyGdls - sub_GAME_7F0CE794(((s32)arg0->Switches + ((s32) gdl & 0xFFFFFF)), temp_a1, (s32) temp_a2); + /* The signed lvalue cast is required for the compiler to choose the target registers. */ + replacementgdl = (u32)*(s32 *)&gdl; - texLoadFromModelFileHeader(arg0, arg3); + delta = ((s32) ((romremaining + filedata) - (s32) name)) - ((s32) (((u8 *) objheader->Switches) + (((u32) gdl) & 0x00ffffff))); + + texCopyGdls((Gfx *) (((u8 *) objheader->Switches) + (((u32) gdl) & 0x00ffffff)), (Gfx *) ((romremaining + filedata) - (s32) name), (s32) name); - while (sp74 != NULL) + texLoadFromModelFileHeader(objheader, buffer); + + if (node != 0) { - modelIterateDisplayLists(arg0, &sp74, (Gfx**)&gdl); - - if (gdl) + do { - var_s2 = (s32) gdl * 0; - var_s1 = (s32) gdl & 0xFFFFFF; - } - else - { - var_s1 = (s32) gdl & 0xFFFFFF; - var_s2 = (temp_fp + (s32)arg0->Switches - (s32)arg0->Switches) - (var_s1); - } - - modelNodeReplaceGdl((u32) arg0, sp74, gdl, var_s3); - - var_s3 += texLoadFromGdl( - (Gfx *)((uintptr_t)arg0->Switches + ((s32)(var_s1) + (s32)sp58)), - var_s2, - (Gfx *)((uintptr_t)arg0->Switches + ((s32) var_s3 & 0xFFFFFF)), - arg3); + curnode = node; + curgdl = gdl; + modelIterateDisplayLists(objheader, &node, &gdl); + + if (gdl != 0) + { + name = (u8 *) (((s32) gdl) - ((s32) curgdl)); + } + else + { + name = (u8 *) ((((s32) (filedata + pcremaining)) - ((s32) objheader->Switches)) - (((u32) curgdl) & 0x00ffffff)); + } + + modelNodeReplaceGdl((u32) objheader, curnode, curgdl, (Gfx *) replacementgdl); + + replacementgdl += texLoadFromGdl( (Gfx *) ((((u8 *) objheader->Switches) + (((u32) curgdl) & 0x00ffffff)) + delta), (s32) name, (Gfx *) (((u8 *) objheader->Switches) + (replacementgdl & 0x00ffffff)), buffer); + } + while (node != 0); } - fileSetSize( - sp50, - (u8*)sp54, - (((u32)((s32)arg0->Switches + ((s32) var_s3 & 0xFFFFFF)) - (u32)sp54) + 0xf) & ~0xf, - arg2 == NULL); + name = (u8 *) (((s32) (((u8 *) objheader->Switches) + (replacementgdl & 0x00ffffff))) - filedata); + + fileSetSize(filenum, (u8 *) filedata, (((s32) name + 0xf) & (~0xf)), dst == 0); } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0762E0 -/* 0AAE10 7F0762E0 27BDFF88 */ addiu $sp, $sp, -0x78 -/* 0AAE14 7F0762E4 AFBF003C */ sw $ra, 0x3c($sp) -/* 0AAE18 7F0762E8 AFBE0038 */ sw $fp, 0x38($sp) -/* 0AAE1C 7F0762EC AFB70034 */ sw $s7, 0x34($sp) -/* 0AAE20 7F0762F0 AFB60030 */ sw $s6, 0x30($sp) -/* 0AAE24 7F0762F4 AFB5002C */ sw $s5, 0x2c($sp) -/* 0AAE28 7F0762F8 AFB40028 */ sw $s4, 0x28($sp) -/* 0AAE2C 7F0762FC AFB30024 */ sw $s3, 0x24($sp) -/* 0AAE30 7F076300 AFB20020 */ sw $s2, 0x20($sp) -/* 0AAE34 7F076304 AFB1001C */ sw $s1, 0x1c($sp) -/* 0AAE38 7F076308 AFB00018 */ sw $s0, 0x18($sp) -/* 0AAE3C 7F07630C AFA60080 */ sw $a2, 0x80($sp) -/* 0AAE40 7F076310 AFA70084 */ sw $a3, 0x84($sp) -/* 0AAE44 7F076314 8C8E0008 */ lw $t6, 8($a0) -/* 0AAE48 7F076318 0080A825 */ move $s5, $a0 -/* 0AAE4C 7F07631C 00A02025 */ move $a0, $a1 -/* 0AAE50 7F076320 0FC2F495 */ jal fileGetIndex -/* 0AAE54 7F076324 AFAE0054 */ sw $t6, 0x54($sp) -/* 0AAE58 7F076328 AFA20050 */ sw $v0, 0x50($sp) -/* 0AAE5C 7F07632C 0FC2F447 */ jal get_rom_remaining_buffer_for_index -/* 0AAE60 7F076330 00402025 */ move $a0, $v0 -/* 0AAE64 7F076334 00408025 */ move $s0, $v0 -/* 0AAE68 7F076338 0FC2F440 */ jal get_pc_remaining_buffer_for_index -/* 0AAE6C 7F07633C 8FA40050 */ lw $a0, 0x50($sp) -/* 0AAE70 7F076340 0040F025 */ move $fp, $v0 -/* 0AAE74 7F076344 AFA00074 */ sw $zero, 0x74($sp) -/* 0AAE78 7F076348 02A02025 */ move $a0, $s5 -/* 0AAE7C 7F07634C 27A50074 */ addiu $a1, $sp, 0x74 -/* 0AAE80 7F076350 0FC1D831 */ jal modelIterateDisplayLists -/* 0AAE84 7F076354 27A6006C */ addiu $a2, $sp, 0x6c -/* 0AAE88 7F076358 8FB7006C */ lw $s7, 0x6c($sp) -/* 0AAE8C 7F07635C 3C1600FF */ lui $s6, (0x00FFFFFF >> 16) # lui $s6, 0xff -/* 0AAE90 7F076360 36D6FFFF */ ori $s6, (0x00FFFFFF & 0xFFFF) # ori $s6, $s6, 0xffff -/* 0AAE94 7F076364 12E00043 */ beqz $s7, .L7F076474 -/* 0AAE98 7F076368 8FA70054 */ lw $a3, 0x54($sp) -/* 0AAE9C 7F07636C 8EAF0008 */ lw $t7, 8($s5) -/* 0AAEA0 7F076370 02F6C824 */ and $t9, $s7, $s6 -/* 0AAEA4 7F076374 02074821 */ addu $t1, $s0, $a3 -/* 0AAEA8 7F076378 01F92021 */ addu $a0, $t7, $t9 -/* 0AAEAC 7F07637C 03C44023 */ subu $t0, $fp, $a0 -/* 0AAEB0 7F076380 01073021 */ addu $a2, $t0, $a3 -/* 0AAEB4 7F076384 01262823 */ subu $a1, $t1, $a2 -/* 0AAEB8 7F076388 00A45023 */ subu $t2, $a1, $a0 -/* 0AAEBC 7F07638C 02E09825 */ move $s3, $s7 -/* 0AAEC0 7F076390 0FC339E5 */ jal texCopyGdls -/* 0AAEC4 7F076394 AFAA0058 */ sw $t2, 0x58($sp) -/* 0AAEC8 7F076398 02A02025 */ move $a0, $s5 -/* 0AAECC 7F07639C 0FC32F94 */ jal texLoadFromModelFileHeader -/* 0AAED0 7F0763A0 8FA50084 */ lw $a1, 0x84($sp) -/* 0AAED4 7F0763A4 8FAB0074 */ lw $t3, 0x74($sp) -/* 0AAED8 7F0763A8 51600025 */ beql $t3, $zero, .L7F076440 -/* 0AAEDC 7F0763AC 8EAA0008 */ lw $t2, 8($s5) -/* 0AAEE0 7F0763B0 8FB0006C */ lw $s0, 0x6c($sp) -.L7F0763B4: -/* 0AAEE4 7F0763B4 8FB40074 */ lw $s4, 0x74($sp) -/* 0AAEE8 7F0763B8 02A02025 */ move $a0, $s5 -/* 0AAEEC 7F0763BC 27A50074 */ addiu $a1, $sp, 0x74 -/* 0AAEF0 7F0763C0 0FC1D831 */ jal modelIterateDisplayLists -/* 0AAEF4 7F0763C4 27A6006C */ addiu $a2, $sp, 0x6c -/* 0AAEF8 7F0763C8 8FB7006C */ lw $s7, 0x6c($sp) -/* 0AAEFC 7F0763CC 02A02025 */ move $a0, $s5 -/* 0AAF00 7F0763D0 02802825 */ move $a1, $s4 -/* 0AAF04 7F0763D4 12E00004 */ beqz $s7, .L7F0763E8 -/* 0AAF08 7F0763D8 02003025 */ move $a2, $s0 -/* 0AAF0C 7F0763DC 02F09023 */ subu $s2, $s7, $s0 -/* 0AAF10 7F0763E0 10000007 */ b .L7F076400 -/* 0AAF14 7F0763E4 02168824 */ and $s1, $s0, $s6 -.L7F0763E8: -/* 0AAF18 7F0763E8 8FAC0054 */ lw $t4, 0x54($sp) -/* 0AAF1C 7F0763EC 8EAE0008 */ lw $t6, 8($s5) -/* 0AAF20 7F0763F0 02168824 */ and $s1, $s0, $s6 -/* 0AAF24 7F0763F4 019E6821 */ addu $t5, $t4, $fp -/* 0AAF28 7F0763F8 01AEC023 */ subu $t8, $t5, $t6 -/* 0AAF2C 7F0763FC 03119023 */ subu $s2, $t8, $s1 -.L7F076400: -/* 0AAF30 7F076400 0FC1D88F */ jal modelNodeReplaceGdl -/* 0AAF34 7F076404 02603825 */ move $a3, $s3 -/* 0AAF38 7F076408 8EA20008 */ lw $v0, 8($s5) -/* 0AAF3C 7F07640C 8FB90058 */ lw $t9, 0x58($sp) -/* 0AAF40 7F076410 02764024 */ and $t0, $s3, $s6 -/* 0AAF44 7F076414 00517821 */ addu $t7, $v0, $s1 -/* 0AAF48 7F076418 02402825 */ move $a1, $s2 -/* 0AAF4C 7F07641C 8FA70084 */ lw $a3, 0x84($sp) -/* 0AAF50 7F076420 00483021 */ addu $a2, $v0, $t0 -/* 0AAF54 7F076424 0FC33846 */ jal texLoadFromGdl -/* 0AAF58 7F076428 01F92021 */ addu $a0, $t7, $t9 -/* 0AAF5C 7F07642C 8FA90074 */ lw $t1, 0x74($sp) -/* 0AAF60 7F076430 02629821 */ addu $s3, $s3, $v0 -/* 0AAF64 7F076434 5520FFDF */ bnezl $t1, .L7F0763B4 -/* 0AAF68 7F076438 8FB0006C */ lw $s0, 0x6c($sp) -/* 0AAF6C 7F07643C 8EAA0008 */ lw $t2, 8($s5) -.L7F076440: -/* 0AAF70 7F076440 8FA50054 */ lw $a1, 0x54($sp) -/* 0AAF74 7F076444 02765824 */ and $t3, $s3, $s6 -/* 0AAF78 7F076448 8FA70080 */ lw $a3, 0x80($sp) -/* 0AAF7C 7F07644C 014B6021 */ addu $t4, $t2, $t3 -/* 0AAF80 7F076450 01859023 */ subu $s2, $t4, $a1 -/* 0AAF84 7F076454 2646000F */ addiu $a2, $s2, 0xf -/* 0AAF88 7F076458 2401FFF0 */ li $at, -16 -/* 0AAF8C 7F07645C 00C16824 */ and $t5, $a2, $at -/* 0AAF90 7F076460 2CEE0001 */ sltiu $t6, $a3, 1 -/* 0AAF94 7F076464 01C03825 */ move $a3, $t6 -/* 0AAF98 7F076468 01A03025 */ move $a2, $t5 -/* 0AAF9C 7F07646C 0FC2F44E */ jal fileSetSize -/* 0AAFA0 7F076470 8FA40050 */ lw $a0, 0x50($sp) -.L7F076474: -/* 0AAFA4 7F076474 8FBF003C */ lw $ra, 0x3c($sp) -/* 0AAFA8 7F076478 8FB00018 */ lw $s0, 0x18($sp) -/* 0AAFAC 7F07647C 8FB1001C */ lw $s1, 0x1c($sp) -/* 0AAFB0 7F076480 8FB20020 */ lw $s2, 0x20($sp) -/* 0AAFB4 7F076484 8FB30024 */ lw $s3, 0x24($sp) -/* 0AAFB8 7F076488 8FB40028 */ lw $s4, 0x28($sp) -/* 0AAFBC 7F07648C 8FB5002C */ lw $s5, 0x2c($sp) -/* 0AAFC0 7F076490 8FB60030 */ lw $s6, 0x30($sp) -/* 0AAFC4 7F076494 8FB70034 */ lw $s7, 0x34($sp) -/* 0AAFC8 7F076498 8FBE0038 */ lw $fp, 0x38($sp) -/* 0AAFCC 7F07649C 03E00008 */ jr $ra -/* 0AAFD0 7F0764A0 27BD0078 */ addiu $sp, $sp, 0x78 -) -#endif - - /*** diff --git a/src/game/objective.h b/src/game/objective.h index 576616bb..babf30c4 100644 --- a/src/game/objective.h +++ b/src/game/objective.h @@ -9,5 +9,6 @@ void setup_briefing_text_entry_parent(struct setup_objective_text *arg0); void set_parent_cur_obj_enter_room(struct criteria_roomentered *arg0); void set_parent_cur_obj_deposited_in_room(struct criteria_deposit *arg0); void set_parent_cur_obj_photograph(struct criteria_picture *arg0); +void add_ptr_to_objective(struct objective_entry* objective); #endif diff --git a/src/game/objective_status.c b/src/game/objective_status.c index 3a1ed855..4ebf14b1 100644 --- a/src/game/objective_status.c +++ b/src/game/objective_status.c @@ -338,7 +338,8 @@ void objectivestatusDisableStatusDisplay(void) #endif -void display_objective_status_text_on_status_change(void) { +void display_objective_status_text_on_status_change(void) +{ s32 i; s32 availableindex = 0; char buffer[50] = ""; @@ -494,9 +495,9 @@ void objectiveTakePictureHandler(void) && (target_prop->flags & PROPFLAG_ONSCREEN) && (target_prop->zDepth >= 0.0f) // draw/render distance && (objIsHealthy(target_object) != 0) - && (sub_GAME_7F050D30(target_object->prop, &sp84, &sp7C, &sp74) != 0)) + && (objGetOnscreenRenderBounds(target_object->prop, &sp84, &sp7C, &sp74) != 0)) { - sub_GAME_7F03F948(&sp84, &sp7C, &sp74, &sp64.right, &sp64.left); + projectRectCornersTo2D(&sp84, &sp7C, &sp74, &sp64.right, &sp64.left); if (getPlayer_c_screenleft() < sp64.right) { diff --git a/src/game/objective_status.h b/src/game/objective_status.h index f9049188..2e96e4df 100644 --- a/src/game/objective_status.h +++ b/src/game/objective_status.h @@ -23,4 +23,6 @@ ObjectRecord * objFindByTagId(s32 TagID); OBJECTIVESTATUS get_status_of_objective(s32 objectiveNum); void sub_GAME_7F057C14(coord3d *coord, Mtxf *mtx); void objectivestatusCheckDeposit(s32 weaponnum, s32 roomid); +void sub_GAME_7F057D88(f32 *arg0, f32 *arg1, f32 arg2); +void display_objective_status_text_on_status_change(void); #endif diff --git a/src/game/options.c b/src/game/options.c index cc782846..a38897e9 100644 --- a/src/game/options.c +++ b/src/game/options.c @@ -20,12 +20,40 @@ #define WATCH_BACKGROUND_VERTEX_COUNT 30 +#define WATCH_VOL_ADJUST_STEP 1024 + +#if defined(VERSION_US) +#define WATCH_ROTATION_FRAMES speedgraphframes +#else +#define WATCH_ROTATION_FRAMES jpD_800484D0 +#endif + +#if defined(VERSION_EU) +#define WATCH_PERSPECTIVE_FOVY 52.5f +#define WATCH_PERSPECTIVE_ASPECT 1.283847f +#else +#define WATCH_PERSPECTIVE_FOVY 50.5f +#define WATCH_PERSPECTIVE_ASPECT 1.3333334f +#endif + +#if defined(VERSION_EU) +#define OPTLABELS_ROW1_Y 0x5c +#define OPTLABELS_ROW2_Y 0x7a +#define OPTLABELS_ROW_PITCH 0x1e +#define OPTLABELS_COL_RET 0x5a +#define OPTLABELS_HINT_Y 0xe1 +#else +#define OPTLABELS_ROW1_Y 0x52 +#define OPTLABELS_ROW2_Y 0x6b +#define OPTLABELS_ROW_PITCH 0x19 +#define OPTLABELS_COL_RET 0x4b +#define OPTLABELS_HINT_Y 0xc3 +#endif + // bss Mtx gfx_background_8007B0A0; Mtx gfx_background_8007B0E0; - - u32 D_80040990 = 0; u32 watch_screen_index = 0; u32 controller_options_index = 0; @@ -40,15 +68,15 @@ s32 watch_item_is_actively_selected = 0; //D:800409AC s32 D_800409AC = 0; //D:800409B0 -s32 D_800409B0 = 0; +s32 watch_inventory_text_y = 0; //D:800409B4 -s32 D_800409B4 = 0; +s32 watch_inventory_text_target_y = 0; //D:800409B8 s32 g_curWatchItemIndex = 0; //D:800409BC -f32 D_800409BC = 0.0f; +f32 watch_inventory_cursor_pos = 0.0f; //D:800409C0 -s32 D_800409C0 = 0; +bool watch_inventory_text_is_settled = FALSE; //D:800409C4 s32 D_800409C4 = 0; //D:800409C8 @@ -62,7 +90,7 @@ f32 D_800409D4 = 0.0f; //D:800409D8 s32 D_800409D8 = 8; //D:800409DC -u16 D_800409DC[] = { +u16 game_control_styles[] = { /*1.1 honey*/ getStringID(LOPTIONS, OPTION_STR_09_11HONEY_LF), /*weapon*/getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF), /*action*/getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF), /*fire*/getStringID(LOPTIONS, OPTION_STR_00_FIRE_LF), /*aim*/getStringID(LOPTIONS, OPTION_STR_01_AIM_LF), /*aim*/getStringID(LOPTIONS, OPTION_STR_01_AIM_LF), /*look*/getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF), /*look*/getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF), /*pause*/getStringID(LOPTIONS, OPTION_STR_04_PAUSE_LF), /*move*/getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF), /*1.2 solitaire*/getStringID(LOPTIONS, OPTION_STR_0A_12SOLITAIRE_LF), /*weapon*/getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF), /*action*/getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF), /*fire*/getStringID(LOPTIONS, OPTION_STR_00_FIRE_LF), /*aim*/getStringID(LOPTIONS, OPTION_STR_01_AIM_LF), /*aim*/getStringID(LOPTIONS, OPTION_STR_01_AIM_LF), /*move*/getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF), /*move*/getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF), /*pause*/getStringID(LOPTIONS, OPTION_STR_04_PAUSE_LF), /*look*/getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF), /*1.3 kissy*/ getStringID(LOPTIONS, OPTION_STR_0B_13KISSY_LF), /*fire*/getStringID(LOPTIONS, OPTION_STR_00_FIRE_LF), /*action*/getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF), /*aim*/getStringID(LOPTIONS, OPTION_STR_01_AIM_LF), /*weapon*/getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF), /*weapon*/getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF), /*look*/getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF), /*look*/getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF), /*pause*/getStringID(LOPTIONS, OPTION_STR_04_PAUSE_LF), /*move*/getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF), @@ -87,9 +115,9 @@ struct game_options game_options_entries[] = { //D:80040ADC u32 controlstick_lr_enabled = 0; //D:80040AE0 -u32 D_80040AE0 = 0; +u32 watch_stick_y_nav_ready = 0; //D:80040AE4 -u32 D_80040AE4 = 0; +u32 watch_stick_y_prev_active = 0; //D:80040AE8 f32 D_80040AE8 = 0.0f; //D:80040AEC @@ -110,7 +138,7 @@ u32 D_80040B00 = 0xA; s32 g_WatchBackgroundGreen = 0xE0; //D:80040B08 -u32 D_80040B08 = 0; +u32 g_WatchStaticScanlineAlpha = 0; //D:80040B0C u32 D_80040B0C = 0xFFA0; @@ -123,13 +151,13 @@ f32 D_80040B18 = 0.0f; //D:80040B1C f32 D_80040B1C = 2.5f; //D:80040B20 -f32 D_80040B20 = 0.0f; +f32 g_WatchControllerPitch = 0.0f; //D:80040B24 -f32 D_80040B24 = 0.0f; +f32 g_WatchControllerSpinAngle = 0.0f; //D:80040B28 -f32 D_80040B28 = 0.0f; +f32 g_WatchControllerSpinSpeed = 0.0f; //D:80040B2C -u32 D_80040B2C = 0; +s32 D_80040B2C = 0; //D:80040B30 f32 D_80040B30 = 0.0f; //D:80040B34 @@ -137,9 +165,9 @@ f32 D_80040B34 = 0.0f; //D:80040B38 f32 D_80040B38 = 0.0f; //D:80040B3C -u32 D_80040B3C = 0; +s32 D_80040B3C = 0; //D:80040B40 -s32 D_80040B40 = 0; +s32 g_WatchStaticScanlineY = 0; //D:80040B44 u16 D_80040B44 = 0x1; //D:80040B48 @@ -154,15 +182,15 @@ u32 D_80040B54 = 0x32; u16 mTrack2Vol = 0x7FFF; //D:80040B5C -f32 D_80040B5C = 0.0f; -//D:80040B60 -f32 D_80040B60 = 200.0f; -//D:80040B64 -f32 D_80040B64 = -200.0f; +coord3d g_ControllerPos = {0.0f, 200.0f, -200.0f}; +typedef struct WatchContButtonPositions { + f32 words[55]; /* 0xdc bytes */ +} WatchContButtonPositions; //D:80040B68 -f32 D_80040B68[] = { +// 3D positions for the buttons at the sides of the screen for the 1x control styles. +WatchContButtonPositions g_1ContButtonPositions[] = {{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, @@ -170,22 +198,23 @@ f32 D_80040B68[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, - -900.0f, 200.0f, -45.0f, - 715.0f, 200.0f, 393.0f, - -875.0f, 200.0f, -210.0f, - 900.0f, 200.0f, -260.0f, - 900.0f, 200.0f, -160.0f, - 850.0f, 200.0f, -210.0f, - 950.0f, 200.0f, -210.0f, - 900.0f, 200.0f, 128.0f, - 900.0f, 200.0f, -45.0f, - -820.0f, 200.0f, -389.0f, - 820.0f, 200.0f, -389.0f, - -830.0f, 200.0f, 78.0f -}; + -900.0f, 200.0f, -45.0f, // Start + 715.0f, 200.0f, 393.0f, // Joy Stick + -875.0f, 200.0f, -210.0f, // D-Pad + 900.0f, 200.0f, -260.0f, // C-Up + 900.0f, 200.0f, -160.0f, // C-Down + 850.0f, 200.0f, -210.0f, // C-Left + 950.0f, 200.0f, -210.0f, // C-Right + 900.0f, 200.0f, 128.0f, // A + 900.0f, 200.0f, -45.0f, // B + -820.0f, 200.0f, -389.0f, // L + 820.0f, 200.0f, -389.0f, // R + -830.0f, 200.0f, 78.0f // Z +}}; //D:80040C44 -f32 D_80040C44[] = { +// 3D positions for the buttons of the left controller for the 2x control styles. +WatchContButtonPositions g_2ContLeftButtonPositions[] = {{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, @@ -205,10 +234,11 @@ f32 D_80040C44[] = { 2000.0f, 2000.0f, 0.0f, 2000.0f, -600.0f, 200.0f, 320.0f -}; +}}; //D:80040D20 -f32 D_80040D20[] = { +// 3D positions for the buttons of the right controller for the 2x control styles. +WatchContButtonPositions g_2ContRightButtonPositions[] = {{ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, @@ -223,26 +253,22 @@ f32 D_80040D20[] = { 200.0f, 110.0f, 2000.0f, 0.0f, 2000.0f, 2000.0f, 0.0f, 2000.0f, 600.0f, 200.0f, 320.0f -}; - -//D:80040DFC -s32 D_80040DFC[] = {0x34, 0x2F, 0x2D, 0x2A, 0x28, 0x25, 0x25, 0x28, 0x2A, 0x2D, 0x2F, 0x34, 0x37, 0x40, 0xFFFFFFFF}; - -//D:80040E38 -s32 D_80040E38 = 0x4B; -//D:80040E3C -s32 D_80040E3C = 0xFFFFFFFF; - -//D:80040E40 -s32 D_80040E40[] = {0x10E, 0x113, 0x116, 0x119, 0x11A, 0x11B, 0x11B, 0x11A, 0x119, 0x116, 0x113, 0x10E, 0x108, 0xFE, 0xFFFFFFFF}; -//D:80040E7C -s32 D_80040E7C = 0; - +}}; +//D:80058440 +const char D_80058440[]; +//D:80058444 +const char D_80058444[]; +//D:80058448 +const char aC_2[]; +//D:80058450 +const char D_80058450[]; +//D:80058454 +const char D_80058454[]; // forward declarations -void set_page_rectangle_colors(s32 watch_screen_index, struct WatchVertex *arg2); +void set_page_rectangle_colors(s32 watch_screen_index, struct WatchVertex *vertices); Gfx *draw_watch_mission_status_page(Gfx *gdl, Mtx *param_2); Gfx *unused_draw_watch_inventory_page(Gfx *gdl, Mtx *param_2); Gfx *draw_watch_inventory_page(Gfx *gdl, Mtx *param_2); @@ -251,8 +277,13 @@ Gfx *draw_watch_game_options_page(Gfx *gdl, Mtx *param_2); Gfx *draw_watch_mission_briefing_page(Gfx *gdl, Mtx *param_2); Gfx *draw_background_health_and_armor_transitioning(Gfx *gdl, Mtx *param_2); Gfx *draw_background_health_and_armor(Gfx *gdl, Mtx *arg1, s32 zoom_squish); -void sub_GAME_7F0A68D8(s32 *arg0); void game_option_select_value(u32 *param_1, u32 param_2); +void watch_adjust_volume_slider(u16* arg0); +Gfx *sub_GAME_7F0A3B40(Gfx *gdl, s32 *arg1); +void update_volume_slider_verts(struct WatchVertex *verts, f32 fill_amount, s32 transition_width); +void sub_GAME_7F0A9684(s8 contpadnum, s32 *counter, f32 *value, f32 *step); +Gfx *display_text_buttons_dual_control(Gfx *gdl); +Gfx *sub_GAME_7F0A9AB8(Gfx *gdl); // end forward declarations @@ -273,11 +304,11 @@ void init_watch_at_start_of_stage(int stage) D_800409A4 = 0; watch_item_is_actively_selected = 0; D_800409AC = 0; - D_800409B0 = 0; - D_800409B4 = 0; + watch_inventory_text_y = 0; + watch_inventory_text_target_y = 0; g_curWatchItemIndex = 0; - D_800409BC = 0.0f; - D_800409C0 = 0; + watch_inventory_cursor_pos = 0.0f; + watch_inventory_text_is_settled = FALSE; D_800409C4 = 0; D_800409C8 = 0.0f; D_800409CC = 0.0f; @@ -296,8 +327,8 @@ void init_watch_at_start_of_stage(int stage) D_800409D8 = 8; controlstick_lr_enabled = 0; - D_80040AE0 = 0; - D_80040AE4 = 0; + watch_stick_y_nav_ready = 0; + watch_stick_y_prev_active = 0; D_80040AE8 = 0.0f; D_80040AEC = 0.0f; D_80040AF0 = 45.0f; @@ -306,21 +337,21 @@ void init_watch_at_start_of_stage(int stage) D_80040AFC = 0xff; D_80040B00 = 10; g_WatchBackgroundGreen = 0xe0; - D_80040B08 = 0; + g_WatchStaticScanlineAlpha = 0; D_80040B0C = 0xffa0; D_80040B10 = 0xf800; D_80040B14 = 0.0f; D_80040B18 = 0.0f; D_80040B1C = 2.5f; - D_80040B20 = 0.0f; - D_80040B24 = 0.0f; - D_80040B28 = 0.0f; + g_WatchControllerPitch = 0.0f; + g_WatchControllerSpinAngle = 0.0f; + g_WatchControllerSpinSpeed = 0.0f; D_80040B2C = 0; D_80040B30 = 0.0f; D_80040B34 = 0.0f; D_80040B38 = 0.0f; D_80040B3C = 0; - D_80040B40 = 0; + g_WatchStaticScanlineY = 0; D_80040B44 = 1; D_80040B48 = 0x32; D_80040B4C = 0x32; @@ -331,7 +362,6 @@ void init_watch_at_start_of_stage(int stage) } - void controller_deadzone_related(void) { if (10 < joyGetStickX(PLAYER_1)) @@ -353,9 +383,6 @@ void controller_deadzone_related(void) } - - - Gfx * sub_GAME_7F0A4B40(Gfx *DL) { if (10 < joyGetStickX(PLAYER_1)) @@ -406,10 +433,6 @@ Gfx * sub_GAME_7F0A4B40(Gfx *DL) } - - - - u32 controllerCheckDualControllerTypesAllowed(void) { if (joyGetControllerCount() >= 2) @@ -422,6 +445,7 @@ u32 controllerCheckDualControllerTypesAllowed(void) return 0; } + int cur_player_get_control_type(void){ return g_CurrentPlayer->cur_player_control_type_0; } @@ -520,7 +544,6 @@ void set_screen_ratio(SCREEN_RATIO_OPTION ratio_option) } - void watch_play_beep_sound(void) { if (watch_item_is_actively_selected == 1) { @@ -532,97 +555,118 @@ void watch_play_beep_sound(void) { } } + void reset_watch_item_is_actively_selected(void){ watch_item_is_actively_selected = 0; } + u32 is_holding_greater_than_2E_left_on_stick(void) { return (joyGetStickX(PLAYER_1) < -0x2d); } + u32 is_holding_greater_than_2E_right_on_stick(void) { return ((joyGetStickX(PLAYER_1) < 0x2e) ^ 1); } + u32 get_controlstick_lr_enabled(void) { return controlstick_lr_enabled; } + void set_controlstick_lr_disabled(void) { controlstick_lr_enabled = 0; } + s32 sub_GAME_7F0A4FB0(void) { return is_holding_greater_than_2E_left_on_stick() && get_controlstick_lr_enabled(); } + s32 sub_GAME_7F0A4FEC(void) { return is_holding_greater_than_2E_right_on_stick() && get_controlstick_lr_enabled(); } + u32 is_holding_greater_than_2E_up_on_stick(void) { - return (joyGetStickY(PLAYER_1) < 0x2e) ^ 1; + return (joyGetStickY(PLAYER_1) < 0x2e) ^ 1; } + u32 is_holding_greater_than_2E_down_on_stick(void) { - return (joyGetStickY(PLAYER_1) < -0x2d); + return (joyGetStickY(PLAYER_1) < -0x2d); } -u32 get_D_80040AE0(void) + +u32 get_watch_stick_y_nav_ready(void) { - return D_80040AE0; + return watch_stick_y_nav_ready; } -void set_D_80040AE0_0(void) + +void disable_watch_stick_y_nav_ready(void) { - D_80040AE0 = 0; + watch_stick_y_nav_ready = 0; } + s32 sub_GAME_7F0A5088(void) { - return is_holding_greater_than_2E_up_on_stick() && get_D_80040AE0(); + return is_holding_greater_than_2E_up_on_stick() && get_watch_stick_y_nav_ready(); } + s32 sub_GAME_7F0A50C4(void) { - return is_holding_greater_than_2E_down_on_stick() && get_D_80040AE0(); + return is_holding_greater_than_2E_down_on_stick() && get_watch_stick_y_nav_ready(); } + u32 is_holding_less_than_10_up_on_stick(void) { - return (joyGetStickY(PLAYER_1) < 0x10) ^ 1; + return (joyGetStickY(PLAYER_1) < 0x10) ^ 1; } + u32 is_holding_less_than_10_down_on_stick(void) { - return (joyGetStickY(PLAYER_1) < -0xf); -} - -u32 get_D_80040AE4(void) { - return D_80040AE4; -} - -void set_D_80040AE4_0(void) { - D_80040AE4 = 0; + return (joyGetStickY(PLAYER_1) < -0xf); } -s32 sub_GAME_7F0A5160(void) +u32 watch_stick_y_was_active(void) { - return is_holding_less_than_10_up_on_stick() && get_D_80040AE4() == 0; + return watch_stick_y_prev_active; } -s32 sub_GAME_7F0A519C(void) + +void reset_watch_stick_y_latch(void) { - return is_holding_less_than_10_down_on_stick() && get_D_80040AE4() == 0; + watch_stick_y_prev_active = 0; } + +s32 watch_stick_y_pressed_up(void) +{ + return is_holding_less_than_10_up_on_stick() && !watch_stick_y_was_active(); +} + + +s32 watch_stick_y_pressed_down(void) +{ + return is_holding_less_than_10_down_on_stick() && !watch_stick_y_was_active(); +} + + void sub_GAME_7F0A51D8(void) { g_WatchBackgroundGreen = 0x80; @@ -630,6 +674,7 @@ void sub_GAME_7F0A51D8(void) return; } + void sub_GAME_7F0A5210(void) { set_controlstick_lr_disabled(); @@ -640,6 +685,7 @@ void sub_GAME_7F0A5210(void) return; } + // initial pause screen: WATCH_INDEX_MISSION_STATUS void watch_screen0_navigation(void) { @@ -662,12 +708,7 @@ void watch_screen0_navigation(void) goto_watch_screen_index_1 = TRUE; } } - #ifdef DEBUG - else - { - osSyncPrintf("gun watch pos x=%f[CL,CR] y=%f[CD,CU] z=%f[TL,TR] "); - } - #endif + if ((joyGetButtonsPressedThisFrame(PLAYER_1, L_JPAD)) || (sub_GAME_7F0A4FB0())) { @@ -704,6 +745,7 @@ void watch_screen0_navigation(void) } } + // pause screen: WATCH_INDEX_INVENTORY void watch_screen1_navigation(void) { @@ -780,6 +822,7 @@ void unused_watch_screen_navigation(void) { } } + // WATCH_INDEX_CONTROL_OPTIONS void watch_screen2_navigation(void) { @@ -804,6 +847,7 @@ void watch_screen2_navigation(void) { } } + // WATCH_INDEX_GAME_OPTIONS void watch_screen3_navigation(void) { @@ -828,6 +872,7 @@ void watch_screen3_navigation(void) { } } + // WATCH_INDEX_MISSION_BRIEFING void watch_screen4_navigation(void) { @@ -862,7 +907,7 @@ void controller_options_controlstyle_navigation(void) if (watch_item_is_actively_selected == 0) { controller_options_index = CONTROLLER_OPTIONS_INDEX_INPUTS; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); return; } } @@ -871,11 +916,12 @@ void controller_options_controlstyle_navigation(void) if (watch_item_is_actively_selected == 0) { controller_options_index = CONTROLLER_OPTIONS_INDEX_INPUTS; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); } } } + void controller_options_inputs_navigation(void) { if ((joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS|U_JPAD)) || (sub_GAME_7F0A5088())) @@ -883,7 +929,7 @@ void controller_options_inputs_navigation(void) if (watch_item_is_actively_selected == 0) { controller_options_index = CONTROLLER_OPTIONS_INDEX_STYLE; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); return; } } @@ -892,11 +938,12 @@ void controller_options_inputs_navigation(void) if (watch_item_is_actively_selected == 0) { controller_options_index = CONTROLLER_OPTIONS_INDEX_STYLE; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); } } } + void sub_GAME_7F0A5998(void) { s32 aux; @@ -904,13 +951,13 @@ void sub_GAME_7F0A5998(void) if ((joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS|U_JPAD)) || (sub_GAME_7F0A5088())) { game_options_index = game_options_index - 1; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); } else if ((joyGetButtonsPressedThisFrame(PLAYER_1, D_CBUTTONS|D_JPAD)) || (sub_GAME_7F0A50C4())) { game_options_index = game_options_index + 1; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); } @@ -928,12 +975,13 @@ void sub_GAME_7F0A5998(void) } } + void game_options_music_volume_navigation(void) { if (joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) { game_options_index = GAME_OPTIONS_INDEX_RATIO; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); return; } @@ -941,17 +989,18 @@ void game_options_music_volume_navigation(void) if (joyGetButtonsPressedThisFrame(PLAYER_1, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) { game_options_index = GAME_OPTIONS_INDEX_FX; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); } } + void game_options_fx_volume_navigation(void) { if (joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) { game_options_index = GAME_OPTIONS_INDEX_MUSIC; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); return; } @@ -959,910 +1008,257 @@ void game_options_fx_volume_navigation(void) if (joyGetButtonsPressedThisFrame(PLAYER_1, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) { game_options_index = GAME_OPTIONS_INDEX_LOOK_UPDOWN; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); } } -#ifdef NONMATCHING -//logically this is close, likely just finish reordering the if logic -void sub_GAME_7F0A5B80(void) +void game_options_inventory_navigation(void) { - f32 fVar1; - int invItems; - int watchDebugFlag; + s32 count; + s32 item_line_height; + s32 selected_item_line_height; - invItems = bondinvCountTotalItemsInInv(); - watchDebugFlag = get_debug_gunwatchpos_flag(); - if (watchDebugFlag == 0) + count = bondinvCountTotalItemsInInv(); + + if (!get_debug_gunwatchpos_flag()) { - if ((joyGetButtonsPressedThisFrame(PLAYER_1,U_CBUTTONS|U_JPAD) != 0) && (joyGetStickY(PLAYER_1) >= 0x47)) + if (joyGetButtonsPressedThisFrame(PLAYER_1, U_JPAD | U_CBUTTONS) || joyGetStickY(PLAYER_1) >= 0x47) { - if ((D_800409BC > 0) && (watch_item_is_actively_selected == 0)) + if (((s32) watch_inventory_cursor_pos > 0) && !watch_item_is_actively_selected) { - D_800409BC -= 1.0f; + watch_inventory_cursor_pos -= 1.0f; } } else { - if ((((joyGetButtonsPressedThisFrame(PLAYER_1,D_CBUTTONS|D_JPAD) != 0) || (joyGetStickY(PLAYER_1) < -0x46)) && (D_800409BC < invItems - 1)) && (watch_item_is_actively_selected == 0)) + if (joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD | D_CBUTTONS) || joyGetStickY(PLAYER_1) < -0x46) { - D_800409BC += 1.0f; + goto down_body; } + + goto after_updown; + +down_body: + if (((s32) watch_inventory_cursor_pos < count - 1) && !watch_item_is_actively_selected) + { + watch_inventory_cursor_pos += 1.0f; + } + +after_updown: + ; } - - if (joyGetButtons(PLAYER_1,U_CBUTTONS|U_JPAD) != 0) + if (joyGetButtons(PLAYER_1, U_JPAD | U_CBUTTONS)) { - if ((0 < D_800409BC) && (watch_item_is_actively_selected == 0)) + if (((s32) watch_inventory_cursor_pos > 0) && !watch_item_is_actively_selected) { - D_800409BC -= 0.1f; + watch_inventory_cursor_pos -= 0.1f; } } - else + else if (joyGetButtons(PLAYER_1, D_JPAD | D_CBUTTONS)) { - if (((joyGetButtons(PLAYER_1,D_CBUTTONS|D_JPAD) != 0) && (D_800409BC < invItems + -1)) && (watch_item_is_actively_selected == 0)) + if (((s32) watch_inventory_cursor_pos < count - 1) && !watch_item_is_actively_selected) { - D_800409BC += 0.1f; + watch_inventory_cursor_pos += 0.1f; } } } - - - if ((joyGetStickY(PLAYER_1) >= 0x1F) && (joyGetStickY(PLAYER_1) < 0x46) && (g_curWatchItemIndex > 0) && (watch_item_is_actively_selected == 0)) + if (joyGetStickY(PLAYER_1) >= 0x1f + && joyGetStickY(PLAYER_1) < 0x46 + && g_curWatchItemIndex > 0 + && !watch_item_is_actively_selected) { - D_800409BC -= joyGetStickY(PLAYER_1) / 300.0f; + watch_inventory_cursor_pos -= (f32) joyGetStickY(PLAYER_1) / 300.0f; } - else if ((joyGetStickY(PLAYER_1) < -0x1E) && (joyGetStickY(PLAYER_1) >= -0x45) && (D_800409BC < (invItems - 1)) && (watch_item_is_actively_selected == 0)) + else if (joyGetStickY(PLAYER_1) < -0x1e + && joyGetStickY(PLAYER_1) >= -0x45 + && (s32) watch_inventory_cursor_pos < count - 1 + && !watch_item_is_actively_selected) { - D_800409BC -= joyGetStickY(PLAYER_1) / 300.0f; + watch_inventory_cursor_pos -= (f32) joyGetStickY(PLAYER_1) / 300.0f; } - - if ((sub_GAME_7F0A5160() != 0) && (g_curWatchItemIndex > 0) && (watch_item_is_actively_selected == 0)) + if (watch_stick_y_pressed_up() && g_curWatchItemIndex > 0 && !watch_item_is_actively_selected) { - D_800409BC -= 1.0f; + watch_inventory_cursor_pos -= 1.0f; } - else if ((sub_GAME_7F0A519C() != 0) && (g_curWatchItemIndex < (invItems - 1)) && (watch_item_is_actively_selected == 0)) + else if (watch_stick_y_pressed_down() && g_curWatchItemIndex < count - 1 && !watch_item_is_actively_selected) { - D_800409BC += 1.0f; + watch_inventory_cursor_pos += 1.0f; } - - - if ((is_holding_less_than_10_up_on_stick() == 0) && (is_holding_less_than_10_down_on_stick() == 0)) + if (is_holding_less_than_10_up_on_stick() || is_holding_less_than_10_down_on_stick()) { - D_80040AE4 = 0; + watch_stick_y_prev_active = 1; } else { - D_80040AE4 = 1; + watch_stick_y_prev_active = 0; } - fVar1 = invItems - 0.5f; - if (D_800409BC <= invItems - 0.5f) + + if ((f32) count - 0.5f < watch_inventory_cursor_pos) { - fVar1 = D_800409BC; + watch_inventory_cursor_pos = (f32) count - 0.5f; } - D_800409BC = fVar1; - if (D_800409BC < -0.5f) + + if (watch_inventory_cursor_pos < -0.5f) { - D_800409BC = -0.5f; + watch_inventory_cursor_pos = -0.5f; } - g_curWatchItemIndex = D_800409BC; - if (j_text_trigger == 0) + + // The current item is determined by the integer part of the cursor's position. + g_curWatchItemIndex = (s32) watch_inventory_cursor_pos; + + if (j_text_trigger) { - invItems = 0xc; - watchDebugFlag = 0xc; + item_line_height = 14; } - else { - invItems = 0xe; - watchDebugFlag = 0xe; - } - D_800409B4 = watchDebugFlag * 2 + -g_curWatchItemIndex * invItems; - if (D_800409B4 < D_800409B0) { - D_800409B0 = (D_800409B0 - (D_800409B0 - D_800409B4) / 3) + -1; - D_800409C0 = 0; - } - else { - if (D_800409B0 < D_800409B4) { - D_800409B0 = D_800409B0 + (D_800409B4 - D_800409B0) / 3 + 1; - D_800409C0 = 0; - } - else { - D_800409C0 = 1; - } - } - if ((D_800409BC <= g_curWatchItemIndex + 0.55f) || (joyGetButtons(PLAYER_1,ANY_BUTTON) != 0)) + else { - if ((D_800409BC <= g_curWatchItemIndex + 0.45f) && (joyGetButtons(PLAYER_1,ANY_BUTTON) == 0)) + item_line_height = 12; + } + + selected_item_line_height = j_text_trigger ? 14 : 12; + watch_inventory_text_target_y = (2 * selected_item_line_height) + (-g_curWatchItemIndex * item_line_height); + + if (watch_inventory_text_target_y < watch_inventory_text_y) + { + watch_inventory_text_y = (watch_inventory_text_y - ((watch_inventory_text_y - watch_inventory_text_target_y) / 3)) - 1; + watch_inventory_text_is_settled = FALSE; + } + else if (watch_inventory_text_y < watch_inventory_text_target_y) + { + watch_inventory_text_y = (watch_inventory_text_y + ((watch_inventory_text_target_y - watch_inventory_text_y) / 3)) + ((0, 1)); + watch_inventory_text_is_settled = FALSE; + } + else + { + watch_inventory_text_is_settled = TRUE; + } + + if (((f32) g_curWatchItemIndex + 0.55f < watch_inventory_cursor_pos) + && !joyGetButtons(PLAYER_1, 0xffff)) // Any button + { + watch_inventory_cursor_pos -= 0.1f; + } + else if (watch_inventory_cursor_pos <= (f32) g_curWatchItemIndex + 0.45f + && !joyGetButtons(PLAYER_1, 0xffff)) // Any button + { + watch_inventory_cursor_pos += 0.1f; + } +} + + +void sub_GAME_7F0A611C(f32 *arg0, s32 *arg1, s32 arg2, s32 *arg3, s32 *arg4, s32 *arg5, s32 arg6, s32 arg7, s32 arg8) +{ + if (!get_debug_gunwatchpos_flag()) + { + if (joyGetButtonsPressedThisFrame(PLAYER_1, U_JPAD | U_CBUTTONS) || joyGetStickY(PLAYER_1) >= 0x47) { - D_800409BC = D_800409BC + 0.1f; + if ((s32)*arg0 > 0 && arg7) + { + *arg0 -= 1.0f; + } + } + else if (joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD | D_CBUTTONS) || joyGetStickY(PLAYER_1) < -0x46) + { + if ((s32)*arg0 < arg2 - 1 && arg7) + { + *arg0 += 1.0f; + } + } + + if (joyGetButtons(PLAYER_1, U_JPAD | U_CBUTTONS)) + { + if ((s32)*arg0 > 0 && arg7) + { + *arg0 -= 0.1f; + } + } + else if (joyGetButtons(PLAYER_1, D_JPAD | D_CBUTTONS)) + { + if ((s32)*arg0 < arg2 - 1 && arg7) + { + *arg0 += 0.1f; + } } } - else { - D_800409BC = D_800409BC - 0.1f; + + if (joyGetStickY(PLAYER_1) >= 0x1f && joyGetStickY(PLAYER_1) < 0x46 && *arg1 > 0 && arg7) + { + *arg0 -= (f32)joyGetStickY(PLAYER_1) / 300.0f; + } + else if (joyGetStickY(PLAYER_1) < -0x1e && joyGetStickY(PLAYER_1) >= -0x45 && (s32)*arg0 < arg2 - 1 && arg7) + { + *arg0 -= (f32)joyGetStickY(PLAYER_1) / 300.0f; + } + + if (watch_stick_y_pressed_up() && *arg1 > 0 && arg7) + { + *arg0 -= 1.0f; + } + else if (watch_stick_y_pressed_down() && *arg1 < arg2 - 1 && arg7) + { + *arg0 += 1.0f; + } + + if (is_holding_less_than_10_up_on_stick() || is_holding_less_than_10_down_on_stick()) + { + watch_stick_y_prev_active = 1; + } + else + { + watch_stick_y_prev_active = 0; + } + + if ((f32)arg2 - 0.5f < *arg0) + { + *arg0 = (f32)arg2 - 0.5f; + } + + if (*arg0 < -0.5f) + { + *arg0 = -0.5f; + } + + *arg1 = (s32)*arg0; + *arg4 = (arg6 * arg8) + (-*arg1 * arg8); + + if (*arg4 < *arg3) + { + *arg3 = (*arg3 - ((*arg3 - *arg4) / 3)) - 1; + *arg5 = 0; + } + else if (*arg3 < *arg4) + { + *arg3 = (((*arg4 - *arg3) / 3) + *arg3) + 1; + *arg5 = 0; + } + else + { + *arg5 = 1; + } + + if ((f32)*arg1 + 0.55f < *arg0) + { + if (!joyGetButtons(PLAYER_1, ANY_BUTTON)) + { + *arg0 -= 0.1f; + return; + } + } + + if (*arg0 <= (f32)*arg1 + 0.45f) + { + if (!joyGetButtons(PLAYER_1, ANY_BUTTON)) + { + *arg0 += 0.1f; + } } - return; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_8005847C -.word 0x3dcccccd /*0.1*/ -glabel D_80058480 -.word 0x3dcccccd /*0.1*/ -glabel D_80058484 -.word 0x3f0ccccd /*0.55000001*/ -glabel D_80058488 -.word 0x3dcccccd /*0.1*/ -glabel D_8005848C -.word 0x3ee66666 /*0.44999999*/ -glabel D_80058490 -.word 0x3dcccccd /*0.1*/ -.text -glabel sub_GAME_7F0A5B80 -/* 0DA6B0 7F0A5B80 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0DA6B4 7F0A5B84 AFBF0014 */ sw $ra, 0x14($sp) -/* 0DA6B8 7F0A5B88 0FC2340E */ jal bondinvCountTotalItemsInInv -/* 0DA6BC 7F0A5B8C 00000000 */ nop -/* 0DA6C0 7F0A5B90 0FC24415 */ jal get_debug_gunwatchpos_flag -/* 0DA6C4 7F0A5B94 AFA2001C */ sw $v0, 0x1c($sp) -/* 0DA6C8 7F0A5B98 14400067 */ bnez $v0, .L7F0A5D38 -/* 0DA6CC 7F0A5B9C 00002025 */ move $a0, $zero -/* 0DA6D0 7F0A5BA0 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0DA6D4 7F0A5BA4 24050808 */ li $a1, 2056 -/* 0DA6D8 7F0A5BA8 14400005 */ bnez $v0, .L7F0A5BC0 -/* 0DA6DC 7F0A5BAC 00000000 */ nop -/* 0DA6E0 7F0A5BB0 0C00307F */ jal joyGetStickY -/* 0DA6E4 7F0A5BB4 00002025 */ move $a0, $zero -/* 0DA6E8 7F0A5BB8 28410047 */ slti $at, $v0, 0x47 -/* 0DA6EC 7F0A5BBC 14200012 */ bnez $at, .L7F0A5C08 -.L7F0A5BC0: -/* 0DA6F0 7F0A5BC0 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DA6F4 7F0A5BC4 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DA6F8 7F0A5BC8 C4C00000 */ lwc1 $f0, ($a2) -/* 0DA6FC 7F0A5BCC 3C188004 */ lui $t8, %hi(watch_item_is_actively_selected) -/* 0DA700 7F0A5BD0 4600010D */ trunc.w.s $f4, $f0 -/* 0DA704 7F0A5BD4 440F2000 */ mfc1 $t7, $f4 -/* 0DA708 7F0A5BD8 00000000 */ nop -/* 0DA70C 7F0A5BDC 59E0002B */ blezl $t7, .L7F0A5C8C -/* 0DA710 7F0A5BE0 00002025 */ move $a0, $zero -/* 0DA714 7F0A5BE4 8F1809A8 */ lw $t8, %lo(watch_item_is_actively_selected)($t8) -/* 0DA718 7F0A5BE8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DA71C 7F0A5BEC 57000027 */ bnezl $t8, .L7F0A5C8C -/* 0DA720 7F0A5BF0 00002025 */ move $a0, $zero -/* 0DA724 7F0A5BF4 44813000 */ mtc1 $at, $f6 -/* 0DA728 7F0A5BF8 00000000 */ nop -/* 0DA72C 7F0A5BFC 46060201 */ sub.s $f8, $f0, $f6 -/* 0DA730 7F0A5C00 10000021 */ b .L7F0A5C88 -/* 0DA734 7F0A5C04 E4C80000 */ swc1 $f8, ($a2) -.L7F0A5C08: -/* 0DA738 7F0A5C08 00002025 */ move $a0, $zero -/* 0DA73C 7F0A5C0C 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0DA740 7F0A5C10 24050404 */ li $a1, 1028 -/* 0DA744 7F0A5C14 14400008 */ bnez $v0, .L7F0A5C38 -/* 0DA748 7F0A5C18 00000000 */ nop -/* 0DA74C 7F0A5C1C 0C00307F */ jal joyGetStickY -/* 0DA750 7F0A5C20 00002025 */ move $a0, $zero -/* 0DA754 7F0A5C24 2841FFBA */ slti $at, $v0, -0x46 -/* 0DA758 7F0A5C28 14200003 */ bnez $at, .L7F0A5C38 -/* 0DA75C 7F0A5C2C 00000000 */ nop -/* 0DA760 7F0A5C30 10000016 */ b .L7F0A5C8C -/* 0DA764 7F0A5C34 00002025 */ move $a0, $zero -.L7F0A5C38: -/* 0DA768 7F0A5C38 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DA76C 7F0A5C3C 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DA770 7F0A5C40 C4C00000 */ lwc1 $f0, ($a2) -/* 0DA774 7F0A5C44 8FAB001C */ lw $t3, 0x1c($sp) -/* 0DA778 7F0A5C48 3C0D8004 */ lui $t5, %hi(watch_item_is_actively_selected) -/* 0DA77C 7F0A5C4C 4600028D */ trunc.w.s $f10, $f0 -/* 0DA780 7F0A5C50 256CFFFF */ addiu $t4, $t3, -1 -/* 0DA784 7F0A5C54 440A5000 */ mfc1 $t2, $f10 -/* 0DA788 7F0A5C58 00000000 */ nop -/* 0DA78C 7F0A5C5C 014C082A */ slt $at, $t2, $t4 -/* 0DA790 7F0A5C60 5020000A */ beql $at, $zero, .L7F0A5C8C -/* 0DA794 7F0A5C64 00002025 */ move $a0, $zero -/* 0DA798 7F0A5C68 8DAD09A8 */ lw $t5, %lo(watch_item_is_actively_selected)($t5) -/* 0DA79C 7F0A5C6C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DA7A0 7F0A5C70 55A00006 */ bnezl $t5, .L7F0A5C8C -/* 0DA7A4 7F0A5C74 00002025 */ move $a0, $zero -/* 0DA7A8 7F0A5C78 44818000 */ mtc1 $at, $f16 -/* 0DA7AC 7F0A5C7C 00000000 */ nop -/* 0DA7B0 7F0A5C80 46100480 */ add.s $f18, $f0, $f16 -/* 0DA7B4 7F0A5C84 E4D20000 */ swc1 $f18, ($a2) -.L7F0A5C88: -/* 0DA7B8 7F0A5C88 00002025 */ move $a0, $zero -.L7F0A5C8C: -/* 0DA7BC 7F0A5C8C 0C0030C3 */ jal joyGetButtons -/* 0DA7C0 7F0A5C90 24050808 */ li $a1, 2056 -/* 0DA7C4 7F0A5C94 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DA7C8 7F0A5C98 10400010 */ beqz $v0, .L7F0A5CDC -/* 0DA7CC 7F0A5C9C 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DA7D0 7F0A5CA0 C4C00000 */ lwc1 $f0, ($a2) -/* 0DA7D4 7F0A5CA4 3C188004 */ lui $t8, %hi(watch_item_is_actively_selected) -/* 0DA7D8 7F0A5CA8 4600010D */ trunc.w.s $f4, $f0 -/* 0DA7DC 7F0A5CAC 440F2000 */ mfc1 $t7, $f4 -/* 0DA7E0 7F0A5CB0 00000000 */ nop -/* 0DA7E4 7F0A5CB4 19E00020 */ blez $t7, .L7F0A5D38 -/* 0DA7E8 7F0A5CB8 00000000 */ nop -/* 0DA7EC 7F0A5CBC 8F1809A8 */ lw $t8, %lo(watch_item_is_actively_selected)($t8) -/* 0DA7F0 7F0A5CC0 3C018006 */ lui $at, %hi(D_8005847C) -/* 0DA7F4 7F0A5CC4 1700001C */ bnez $t8, .L7F0A5D38 -/* 0DA7F8 7F0A5CC8 00000000 */ nop -/* 0DA7FC 7F0A5CCC C426847C */ lwc1 $f6, %lo(D_8005847C)($at) -/* 0DA800 7F0A5CD0 46060201 */ sub.s $f8, $f0, $f6 -/* 0DA804 7F0A5CD4 10000018 */ b .L7F0A5D38 -/* 0DA808 7F0A5CD8 E4C80000 */ swc1 $f8, ($a2) -.L7F0A5CDC: -/* 0DA80C 7F0A5CDC 00002025 */ move $a0, $zero -/* 0DA810 7F0A5CE0 0C0030C3 */ jal joyGetButtons -/* 0DA814 7F0A5CE4 24050404 */ li $a1, 1028 -/* 0DA818 7F0A5CE8 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DA81C 7F0A5CEC 10400012 */ beqz $v0, .L7F0A5D38 -/* 0DA820 7F0A5CF0 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DA824 7F0A5CF4 C4C00000 */ lwc1 $f0, ($a2) -/* 0DA828 7F0A5CF8 8FAA001C */ lw $t2, 0x1c($sp) -/* 0DA82C 7F0A5CFC 3C0D8004 */ lui $t5, %hi(watch_item_is_actively_selected) -/* 0DA830 7F0A5D00 4600028D */ trunc.w.s $f10, $f0 -/* 0DA834 7F0A5D04 254CFFFF */ addiu $t4, $t2, -1 -/* 0DA838 7F0A5D08 440B5000 */ mfc1 $t3, $f10 -/* 0DA83C 7F0A5D0C 00000000 */ nop -/* 0DA840 7F0A5D10 016C082A */ slt $at, $t3, $t4 -/* 0DA844 7F0A5D14 10200008 */ beqz $at, .L7F0A5D38 -/* 0DA848 7F0A5D18 00000000 */ nop -/* 0DA84C 7F0A5D1C 8DAD09A8 */ lw $t5, %lo(watch_item_is_actively_selected)($t5) -/* 0DA850 7F0A5D20 3C018006 */ lui $at, %hi(D_80058480) -/* 0DA854 7F0A5D24 15A00004 */ bnez $t5, .L7F0A5D38 -/* 0DA858 7F0A5D28 00000000 */ nop -/* 0DA85C 7F0A5D2C C4308480 */ lwc1 $f16, %lo(D_80058480)($at) -/* 0DA860 7F0A5D30 46100480 */ add.s $f18, $f0, $f16 -/* 0DA864 7F0A5D34 E4D20000 */ swc1 $f18, ($a2) -.L7F0A5D38: -/* 0DA868 7F0A5D38 0C00307F */ jal joyGetStickY -/* 0DA86C 7F0A5D3C 00002025 */ move $a0, $zero -/* 0DA870 7F0A5D40 2841001F */ slti $at, $v0, 0x1f -/* 0DA874 7F0A5D44 1420001A */ bnez $at, .L7F0A5DB0 -/* 0DA878 7F0A5D48 00000000 */ nop -/* 0DA87C 7F0A5D4C 0C00307F */ jal joyGetStickY -/* 0DA880 7F0A5D50 00002025 */ move $a0, $zero -/* 0DA884 7F0A5D54 28410046 */ slti $at, $v0, 0x46 -/* 0DA888 7F0A5D58 10200015 */ beqz $at, .L7F0A5DB0 -/* 0DA88C 7F0A5D5C 3C0E8004 */ lui $t6, %hi(g_curWatchItemIndex) -/* 0DA890 7F0A5D60 8DCE09B8 */ lw $t6, %lo(g_curWatchItemIndex)($t6) -/* 0DA894 7F0A5D64 3C0F8004 */ lui $t7, %hi(watch_item_is_actively_selected) -/* 0DA898 7F0A5D68 19C00011 */ blez $t6, .L7F0A5DB0 -/* 0DA89C 7F0A5D6C 00000000 */ nop -/* 0DA8A0 7F0A5D70 8DEF09A8 */ lw $t7, %lo(watch_item_is_actively_selected)($t7) -/* 0DA8A4 7F0A5D74 15E0000E */ bnez $t7, .L7F0A5DB0 -/* 0DA8A8 7F0A5D78 00000000 */ nop -/* 0DA8AC 7F0A5D7C 0C00307F */ jal joyGetStickY -/* 0DA8B0 7F0A5D80 00002025 */ move $a0, $zero -/* 0DA8B4 7F0A5D84 44822000 */ mtc1 $v0, $f4 -/* 0DA8B8 7F0A5D88 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0DA8BC 7F0A5D8C 44814000 */ mtc1 $at, $f8 -/* 0DA8C0 7F0A5D90 468021A0 */ cvt.s.w $f6, $f4 -/* 0DA8C4 7F0A5D94 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DA8C8 7F0A5D98 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DA8CC 7F0A5D9C C4D00000 */ lwc1 $f16, ($a2) -/* 0DA8D0 7F0A5DA0 46083283 */ div.s $f10, $f6, $f8 -/* 0DA8D4 7F0A5DA4 460A8481 */ sub.s $f18, $f16, $f10 -/* 0DA8D8 7F0A5DA8 10000025 */ b .L7F0A5E40 -/* 0DA8DC 7F0A5DAC E4D20000 */ swc1 $f18, ($a2) -.L7F0A5DB0: -/* 0DA8E0 7F0A5DB0 0C00307F */ jal joyGetStickY -/* 0DA8E4 7F0A5DB4 00002025 */ move $a0, $zero -/* 0DA8E8 7F0A5DB8 2841FFE2 */ slti $at, $v0, -0x1e -/* 0DA8EC 7F0A5DBC 10200020 */ beqz $at, .L7F0A5E40 -/* 0DA8F0 7F0A5DC0 00000000 */ nop -/* 0DA8F4 7F0A5DC4 0C00307F */ jal joyGetStickY -/* 0DA8F8 7F0A5DC8 00002025 */ move $a0, $zero -/* 0DA8FC 7F0A5DCC 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DA900 7F0A5DD0 2841FFBB */ slti $at, $v0, -0x45 -/* 0DA904 7F0A5DD4 1420001A */ bnez $at, .L7F0A5E40 -/* 0DA908 7F0A5DD8 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DA90C 7F0A5DDC C4C40000 */ lwc1 $f4, ($a2) -/* 0DA910 7F0A5DE0 8FAA001C */ lw $t2, 0x1c($sp) -/* 0DA914 7F0A5DE4 3C0C8004 */ lui $t4, %hi(watch_item_is_actively_selected) -/* 0DA918 7F0A5DE8 4600218D */ trunc.w.s $f6, $f4 -/* 0DA91C 7F0A5DEC 254BFFFF */ addiu $t3, $t2, -1 -/* 0DA920 7F0A5DF0 44193000 */ mfc1 $t9, $f6 -/* 0DA924 7F0A5DF4 00000000 */ nop -/* 0DA928 7F0A5DF8 032B082A */ slt $at, $t9, $t3 -/* 0DA92C 7F0A5DFC 10200010 */ beqz $at, .L7F0A5E40 -/* 0DA930 7F0A5E00 00000000 */ nop -/* 0DA934 7F0A5E04 8D8C09A8 */ lw $t4, %lo(watch_item_is_actively_selected)($t4) -/* 0DA938 7F0A5E08 1580000D */ bnez $t4, .L7F0A5E40 -/* 0DA93C 7F0A5E0C 00000000 */ nop -/* 0DA940 7F0A5E10 0C00307F */ jal joyGetStickY -/* 0DA944 7F0A5E14 00002025 */ move $a0, $zero -/* 0DA948 7F0A5E18 44824000 */ mtc1 $v0, $f8 -/* 0DA94C 7F0A5E1C 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0DA950 7F0A5E20 44815000 */ mtc1 $at, $f10 -/* 0DA954 7F0A5E24 46804420 */ cvt.s.w $f16, $f8 -/* 0DA958 7F0A5E28 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DA95C 7F0A5E2C 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DA960 7F0A5E30 C4C40000 */ lwc1 $f4, ($a2) -/* 0DA964 7F0A5E34 460A8483 */ div.s $f18, $f16, $f10 -/* 0DA968 7F0A5E38 46122181 */ sub.s $f6, $f4, $f18 -/* 0DA96C 7F0A5E3C E4C60000 */ swc1 $f6, ($a2) -.L7F0A5E40: -/* 0DA970 7F0A5E40 0FC29458 */ jal sub_GAME_7F0A5160 -/* 0DA974 7F0A5E44 00000000 */ nop -/* 0DA978 7F0A5E48 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DA97C 7F0A5E4C 10400010 */ beqz $v0, .L7F0A5E90 -/* 0DA980 7F0A5E50 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DA984 7F0A5E54 3C0D8004 */ lui $t5, %hi(g_curWatchItemIndex) -/* 0DA988 7F0A5E58 8DAD09B8 */ lw $t5, %lo(g_curWatchItemIndex)($t5) -/* 0DA98C 7F0A5E5C 3C0E8004 */ lui $t6, %hi(watch_item_is_actively_selected) -/* 0DA990 7F0A5E60 19A0000B */ blez $t5, .L7F0A5E90 -/* 0DA994 7F0A5E64 00000000 */ nop -/* 0DA998 7F0A5E68 8DCE09A8 */ lw $t6, %lo(watch_item_is_actively_selected)($t6) -/* 0DA99C 7F0A5E6C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DA9A0 7F0A5E70 15C00007 */ bnez $t6, .L7F0A5E90 -/* 0DA9A4 7F0A5E74 00000000 */ nop -/* 0DA9A8 7F0A5E78 C4C80000 */ lwc1 $f8, ($a2) -/* 0DA9AC 7F0A5E7C 44818000 */ mtc1 $at, $f16 -/* 0DA9B0 7F0A5E80 00000000 */ nop -/* 0DA9B4 7F0A5E84 46104281 */ sub.s $f10, $f8, $f16 -/* 0DA9B8 7F0A5E88 10000017 */ b .L7F0A5EE8 -/* 0DA9BC 7F0A5E8C E4CA0000 */ swc1 $f10, ($a2) -.L7F0A5E90: -/* 0DA9C0 7F0A5E90 0FC29467 */ jal sub_GAME_7F0A519C -/* 0DA9C4 7F0A5E94 00000000 */ nop -/* 0DA9C8 7F0A5E98 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DA9CC 7F0A5E9C 10400012 */ beqz $v0, .L7F0A5EE8 -/* 0DA9D0 7F0A5EA0 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DA9D4 7F0A5EA4 8FB8001C */ lw $t8, 0x1c($sp) -/* 0DA9D8 7F0A5EA8 3C0F8004 */ lui $t7, %hi(g_curWatchItemIndex) -/* 0DA9DC 7F0A5EAC 8DEF09B8 */ lw $t7, %lo(g_curWatchItemIndex)($t7) -/* 0DA9E0 7F0A5EB0 270AFFFF */ addiu $t2, $t8, -1 -/* 0DA9E4 7F0A5EB4 3C198004 */ lui $t9, %hi(watch_item_is_actively_selected) -/* 0DA9E8 7F0A5EB8 01EA082A */ slt $at, $t7, $t2 -/* 0DA9EC 7F0A5EBC 1020000A */ beqz $at, .L7F0A5EE8 -/* 0DA9F0 7F0A5EC0 00000000 */ nop -/* 0DA9F4 7F0A5EC4 8F3909A8 */ lw $t9, %lo(watch_item_is_actively_selected)($t9) -/* 0DA9F8 7F0A5EC8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DA9FC 7F0A5ECC 17200006 */ bnez $t9, .L7F0A5EE8 -/* 0DAA00 7F0A5ED0 00000000 */ nop -/* 0DAA04 7F0A5ED4 C4C40000 */ lwc1 $f4, ($a2) -/* 0DAA08 7F0A5ED8 44819000 */ mtc1 $at, $f18 -/* 0DAA0C 7F0A5EDC 00000000 */ nop -/* 0DAA10 7F0A5EE0 46122180 */ add.s $f6, $f4, $f18 -/* 0DAA14 7F0A5EE4 E4C60000 */ swc1 $f6, ($a2) -.L7F0A5EE8: -/* 0DAA18 7F0A5EE8 0FC29440 */ jal is_holding_less_than_10_up_on_stick -/* 0DAA1C 7F0A5EEC 00000000 */ nop -/* 0DAA20 7F0A5EF0 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DAA24 7F0A5EF4 14400006 */ bnez $v0, .L7F0A5F10 -/* 0DAA28 7F0A5EF8 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DAA2C 7F0A5EFC 0FC29449 */ jal is_holding_less_than_10_down_on_stick -/* 0DAA30 7F0A5F00 00000000 */ nop -/* 0DAA34 7F0A5F04 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DAA38 7F0A5F08 10400005 */ beqz $v0, .L7F0A5F20 -/* 0DAA3C 7F0A5F0C 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -.L7F0A5F10: -/* 0DAA40 7F0A5F10 240B0001 */ li $t3, 1 -/* 0DAA44 7F0A5F14 3C018004 */ lui $at, %hi(D_80040AE4) -/* 0DAA48 7F0A5F18 10000003 */ b .L7F0A5F28 -/* 0DAA4C 7F0A5F1C AC2B0AE4 */ sw $t3, %lo(D_80040AE4)($at) -.L7F0A5F20: -/* 0DAA50 7F0A5F20 3C018004 */ lui $at, %hi(D_80040AE4) -/* 0DAA54 7F0A5F24 AC200AE4 */ sw $zero, %lo(D_80040AE4)($at) -.L7F0A5F28: -/* 0DAA58 7F0A5F28 8FAC001C */ lw $t4, 0x1c($sp) -/* 0DAA5C 7F0A5F2C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0DAA60 7F0A5F30 44815000 */ mtc1 $at, $f10 -/* 0DAA64 7F0A5F34 448C4000 */ mtc1 $t4, $f8 -/* 0DAA68 7F0A5F38 C4C00000 */ lwc1 $f0, ($a2) -/* 0DAA6C 7F0A5F3C 3C01BF00 */ li $at, 0xBF000000 # -0.500000 -/* 0DAA70 7F0A5F40 46804420 */ cvt.s.w $f16, $f8 -/* 0DAA74 7F0A5F44 3C058004 */ lui $a1, %hi(g_curWatchItemIndex) -/* 0DAA78 7F0A5F48 460A8081 */ sub.s $f2, $f16, $f10 -/* 0DAA7C 7F0A5F4C 4600103C */ c.lt.s $f2, $f0 -/* 0DAA80 7F0A5F50 00000000 */ nop -/* 0DAA84 7F0A5F54 45020004 */ bc1fl .L7F0A5F68 -/* 0DAA88 7F0A5F58 44811000 */ mtc1 $at, $f2 -/* 0DAA8C 7F0A5F5C E4C20000 */ swc1 $f2, ($a2) -/* 0DAA90 7F0A5F60 C4C00000 */ lwc1 $f0, ($a2) -/* 0DAA94 7F0A5F64 44811000 */ mtc1 $at, $f2 -.L7F0A5F68: -/* 0DAA98 7F0A5F68 00000000 */ nop -/* 0DAA9C 7F0A5F6C 4602003C */ c.lt.s $f0, $f2 -/* 0DAAA0 7F0A5F70 00000000 */ nop -/* 0DAAA4 7F0A5F74 45020004 */ bc1fl .L7F0A5F88 -/* 0DAAA8 7F0A5F78 4600010D */ trunc.w.s $f4, $f0 -/* 0DAAAC 7F0A5F7C E4C20000 */ swc1 $f2, ($a2) -/* 0DAAB0 7F0A5F80 C4C00000 */ lwc1 $f0, ($a2) -/* 0DAAB4 7F0A5F84 4600010D */ trunc.w.s $f4, $f0 -.L7F0A5F88: -/* 0DAAB8 7F0A5F88 3C028005 */ lui $v0, %hi(j_text_trigger) -/* 0DAABC 7F0A5F8C 8C4284D0 */ lw $v0, %lo(j_text_trigger)($v0) -/* 0DAAC0 7F0A5F90 3C018004 */ lui $at, %hi(g_curWatchItemIndex) -/* 0DAAC4 7F0A5F94 440E2000 */ mfc1 $t6, $f4 -/* 0DAAC8 7F0A5F98 10400003 */ beqz $v0, .L7F0A5FA8 -/* 0DAACC 7F0A5F9C AC2E09B8 */ sw $t6, %lo(g_curWatchItemIndex)($at) -/* 0DAAD0 7F0A5FA0 10000002 */ b .L7F0A5FAC -/* 0DAAD4 7F0A5FA4 2407000E */ li $a3, 14 -.L7F0A5FA8: -/* 0DAAD8 7F0A5FA8 2407000C */ li $a3, 12 -.L7F0A5FAC: -/* 0DAADC 7F0A5FAC 50400004 */ beql $v0, $zero, .L7F0A5FC0 -/* 0DAAE0 7F0A5FB0 2404000C */ li $a0, 12 -/* 0DAAE4 7F0A5FB4 10000002 */ b .L7F0A5FC0 -/* 0DAAE8 7F0A5FB8 2404000E */ li $a0, 14 -/* 0DAAEC 7F0A5FBC 2404000C */ li $a0, 12 -.L7F0A5FC0: -/* 0DAAF0 7F0A5FC0 8CA509B8 */ lw $a1, %lo(g_curWatchItemIndex)($a1) -/* 0DAAF4 7F0A5FC4 3C098004 */ lui $t1, %hi(D_800409B0) -/* 0DAAF8 7F0A5FC8 252909B0 */ addiu $t1, %lo(D_800409B0) # addiu $t1, $t1, 0x9b0 -/* 0DAAFC 7F0A5FCC 00057823 */ negu $t7, $a1 -/* 0DAB00 7F0A5FD0 01E70019 */ multu $t7, $a3 -/* 0DAB04 7F0A5FD4 8D220000 */ lw $v0, ($t1) -/* 0DAB08 7F0A5FD8 0004C040 */ sll $t8, $a0, 1 -/* 0DAB0C 7F0A5FDC 3C088004 */ lui $t0, %hi(D_800409B4) -/* 0DAB10 7F0A5FE0 250809B4 */ addiu $t0, %lo(D_800409B4) # addiu $t0, $t0, 0x9b4 -/* 0DAB14 7F0A5FE4 00005012 */ mflo $t2 -/* 0DAB18 7F0A5FE8 030AC821 */ addu $t9, $t8, $t2 -/* 0DAB1C 7F0A5FEC 0322082A */ slt $at, $t9, $v0 -/* 0DAB20 7F0A5FF0 AD190000 */ sw $t9, ($t0) -/* 0DAB24 7F0A5FF4 1020000B */ beqz $at, .L7F0A6024 -/* 0DAB28 7F0A5FF8 03201825 */ move $v1, $t9 -/* 0DAB2C 7F0A5FFC 00595823 */ subu $t3, $v0, $t9 -/* 0DAB30 7F0A6000 24010003 */ li $at, 3 -/* 0DAB34 7F0A6004 0161001A */ div $zero, $t3, $at -/* 0DAB38 7F0A6008 00006012 */ mflo $t4 -/* 0DAB3C 7F0A600C 004C6823 */ subu $t5, $v0, $t4 -/* 0DAB40 7F0A6010 25AEFFFF */ addiu $t6, $t5, -1 -/* 0DAB44 7F0A6014 AD2E0000 */ sw $t6, ($t1) -/* 0DAB48 7F0A6018 3C018004 */ lui $at, %hi(D_800409C0) -/* 0DAB4C 7F0A601C 10000010 */ b .L7F0A6060 -/* 0DAB50 7F0A6020 AC2009C0 */ sw $zero, %lo(D_800409C0)($at) -.L7F0A6024: -/* 0DAB54 7F0A6024 0043082A */ slt $at, $v0, $v1 -/* 0DAB58 7F0A6028 1020000A */ beqz $at, .L7F0A6054 -/* 0DAB5C 7F0A602C 00627823 */ subu $t7, $v1, $v0 -/* 0DAB60 7F0A6030 24010003 */ li $at, 3 -/* 0DAB64 7F0A6034 01E1001A */ div $zero, $t7, $at -/* 0DAB68 7F0A6038 0000C012 */ mflo $t8 -/* 0DAB6C 7F0A603C 00585021 */ addu $t2, $v0, $t8 -/* 0DAB70 7F0A6040 25590001 */ addiu $t9, $t2, 1 -/* 0DAB74 7F0A6044 AD390000 */ sw $t9, ($t1) -/* 0DAB78 7F0A6048 3C018004 */ lui $at, %hi(D_800409C0) -/* 0DAB7C 7F0A604C 10000004 */ b .L7F0A6060 -/* 0DAB80 7F0A6050 AC2009C0 */ sw $zero, %lo(D_800409C0)($at) -.L7F0A6054: -/* 0DAB84 7F0A6054 240B0001 */ li $t3, 1 -/* 0DAB88 7F0A6058 3C018004 */ lui $at, %hi(D_800409C0) -/* 0DAB8C 7F0A605C AC2B09C0 */ sw $t3, %lo(D_800409C0)($at) -.L7F0A6060: -/* 0DAB90 7F0A6060 44859000 */ mtc1 $a1, $f18 -/* 0DAB94 7F0A6064 3C018006 */ lui $at, %hi(D_80058484) -/* 0DAB98 7F0A6068 C4288484 */ lwc1 $f8, %lo(D_80058484)($at) -/* 0DAB9C 7F0A606C 468091A0 */ cvt.s.w $f6, $f18 -/* 0DABA0 7F0A6070 46083400 */ add.s $f16, $f6, $f8 -/* 0DABA4 7F0A6074 4600803C */ c.lt.s $f16, $f0 -/* 0DABA8 7F0A6078 00000000 */ nop -/* 0DABAC 7F0A607C 4500000C */ bc1f .L7F0A60B0 -/* 0DABB0 7F0A6080 00002025 */ move $a0, $zero -/* 0DABB4 7F0A6084 0C0030C3 */ jal joyGetButtons -/* 0DABB8 7F0A6088 3405FFFF */ li $a1, 65535 -/* 0DABBC 7F0A608C 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DABC0 7F0A6090 14400007 */ bnez $v0, .L7F0A60B0 -/* 0DABC4 7F0A6094 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DABC8 7F0A6098 3C018006 */ lui $at, %hi(D_80058488) -/* 0DABCC 7F0A609C C4248488 */ lwc1 $f4, %lo(D_80058488)($at) -/* 0DABD0 7F0A60A0 C4CA0000 */ lwc1 $f10, ($a2) -/* 0DABD4 7F0A60A4 46045481 */ sub.s $f18, $f10, $f4 -/* 0DABD8 7F0A60A8 10000018 */ b .L7F0A610C -/* 0DABDC 7F0A60AC E4D20000 */ swc1 $f18, ($a2) -.L7F0A60B0: -/* 0DABE0 7F0A60B0 3C0C8004 */ lui $t4, %hi(g_curWatchItemIndex) -/* 0DABE4 7F0A60B4 8D8C09B8 */ lw $t4, %lo(g_curWatchItemIndex)($t4) -/* 0DABE8 7F0A60B8 3C018006 */ lui $at, %hi(D_8005848C) -/* 0DABEC 7F0A60BC C430848C */ lwc1 $f16, %lo(D_8005848C)($at) -/* 0DABF0 7F0A60C0 448C3000 */ mtc1 $t4, $f6 -/* 0DABF4 7F0A60C4 C4C40000 */ lwc1 $f4, ($a2) -/* 0DABF8 7F0A60C8 00002025 */ move $a0, $zero -/* 0DABFC 7F0A60CC 46803220 */ cvt.s.w $f8, $f6 -/* 0DAC00 7F0A60D0 46104280 */ add.s $f10, $f8, $f16 -/* 0DAC04 7F0A60D4 460A203E */ c.le.s $f4, $f10 -/* 0DAC08 7F0A60D8 00000000 */ nop -/* 0DAC0C 7F0A60DC 4502000C */ bc1fl .L7F0A6110 -/* 0DAC10 7F0A60E0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0DAC14 7F0A60E4 0C0030C3 */ jal joyGetButtons -/* 0DAC18 7F0A60E8 3405FFFF */ li $a1, 65535 -/* 0DAC1C 7F0A60EC 3C068004 */ lui $a2, %hi(D_800409BC) -/* 0DAC20 7F0A60F0 14400006 */ bnez $v0, .L7F0A610C -/* 0DAC24 7F0A60F4 24C609BC */ addiu $a2, %lo(D_800409BC) # addiu $a2, $a2, 0x9bc -/* 0DAC28 7F0A60F8 3C018006 */ lui $at, %hi(D_80058490) -/* 0DAC2C 7F0A60FC C4268490 */ lwc1 $f6, %lo(D_80058490)($at) -/* 0DAC30 7F0A6100 C4D20000 */ lwc1 $f18, ($a2) -/* 0DAC34 7F0A6104 46069200 */ add.s $f8, $f18, $f6 -/* 0DAC38 7F0A6108 E4C80000 */ swc1 $f8, ($a2) -.L7F0A610C: -/* 0DAC3C 7F0A610C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A6110: -/* 0DAC40 7F0A6110 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0DAC44 7F0A6114 03E00008 */ jr $ra -/* 0DAC48 7F0A6118 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A611C(void) { - -} -#else -GLOBAL_ASM( -.late_rodata -glabel D_80058494 -.word 0x3dcccccd /*0.1*/ -glabel D_80058498 -.word 0x3dcccccd /*0.1*/ -glabel D_8005849C -.word 0x3f0ccccd /*0.55000001*/ -glabel D_800584A0 -.word 0x3dcccccd /*0.1*/ -glabel D_800584A4 -.word 0x3ee66666 /*0.44999999*/ -glabel D_800584A8 -.word 0x3dcccccd /*0.1*/ -.text -glabel sub_GAME_7F0A611C -/* 0DAC4C 7F0A611C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0DAC50 7F0A6120 AFBF001C */ sw $ra, 0x1c($sp) -/* 0DAC54 7F0A6124 AFB00018 */ sw $s0, 0x18($sp) -/* 0DAC58 7F0A6128 00808025 */ move $s0, $a0 -/* 0DAC5C 7F0A612C AFA50024 */ sw $a1, 0x24($sp) -/* 0DAC60 7F0A6130 AFA60028 */ sw $a2, 0x28($sp) -/* 0DAC64 7F0A6134 0FC24415 */ jal get_debug_gunwatchpos_flag -/* 0DAC68 7F0A6138 AFA7002C */ sw $a3, 0x2c($sp) -/* 0DAC6C 7F0A613C 14400056 */ bnez $v0, .L7F0A6298 -/* 0DAC70 7F0A6140 00002025 */ move $a0, $zero -/* 0DAC74 7F0A6144 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0DAC78 7F0A6148 24050808 */ li $a1, 2056 -/* 0DAC7C 7F0A614C 54400007 */ bnezl $v0, .L7F0A616C -/* 0DAC80 7F0A6150 C6000000 */ lwc1 $f0, ($s0) -/* 0DAC84 7F0A6154 0C00307F */ jal joyGetStickY -/* 0DAC88 7F0A6158 00002025 */ move $a0, $zero -/* 0DAC8C 7F0A615C 28410047 */ slti $at, $v0, 0x47 -/* 0DAC90 7F0A6160 1420000F */ bnez $at, .L7F0A61A0 -/* 0DAC94 7F0A6164 00002025 */ move $a0, $zero -/* 0DAC98 7F0A6168 C6000000 */ lwc1 $f0, ($s0) -.L7F0A616C: -/* 0DAC9C 7F0A616C 8FB8003C */ lw $t8, 0x3c($sp) -/* 0DACA0 7F0A6170 4600010D */ trunc.w.s $f4, $f0 -/* 0DACA4 7F0A6174 440F2000 */ mfc1 $t7, $f4 -/* 0DACA8 7F0A6178 00000000 */ nop -/* 0DACAC 7F0A617C 59E00022 */ blezl $t7, .L7F0A6208 -/* 0DACB0 7F0A6180 00002025 */ move $a0, $zero -/* 0DACB4 7F0A6184 1300001F */ beqz $t8, .L7F0A6204 -/* 0DACB8 7F0A6188 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DACBC 7F0A618C 44813000 */ mtc1 $at, $f6 -/* 0DACC0 7F0A6190 00000000 */ nop -/* 0DACC4 7F0A6194 46060201 */ sub.s $f8, $f0, $f6 -/* 0DACC8 7F0A6198 1000001A */ b .L7F0A6204 -/* 0DACCC 7F0A619C E6080000 */ swc1 $f8, ($s0) -.L7F0A61A0: -/* 0DACD0 7F0A61A0 0C0030EB */ jal joyGetButtonsPressedThisFrame -/* 0DACD4 7F0A61A4 24050404 */ li $a1, 1028 -/* 0DACD8 7F0A61A8 54400007 */ bnezl $v0, .L7F0A61C8 -/* 0DACDC 7F0A61AC C6000000 */ lwc1 $f0, ($s0) -/* 0DACE0 7F0A61B0 0C00307F */ jal joyGetStickY -/* 0DACE4 7F0A61B4 00002025 */ move $a0, $zero -/* 0DACE8 7F0A61B8 2841FFBA */ slti $at, $v0, -0x46 -/* 0DACEC 7F0A61BC 50200012 */ beql $at, $zero, .L7F0A6208 -/* 0DACF0 7F0A61C0 00002025 */ move $a0, $zero -/* 0DACF4 7F0A61C4 C6000000 */ lwc1 $f0, ($s0) -.L7F0A61C8: -/* 0DACF8 7F0A61C8 8FA90028 */ lw $t1, 0x28($sp) -/* 0DACFC 7F0A61CC 8FAB003C */ lw $t3, 0x3c($sp) -/* 0DAD00 7F0A61D0 4600028D */ trunc.w.s $f10, $f0 -/* 0DAD04 7F0A61D4 252AFFFF */ addiu $t2, $t1, -1 -/* 0DAD08 7F0A61D8 44085000 */ mfc1 $t0, $f10 -/* 0DAD0C 7F0A61DC 00000000 */ nop -/* 0DAD10 7F0A61E0 010A082A */ slt $at, $t0, $t2 -/* 0DAD14 7F0A61E4 50200008 */ beql $at, $zero, .L7F0A6208 -/* 0DAD18 7F0A61E8 00002025 */ move $a0, $zero -/* 0DAD1C 7F0A61EC 11600005 */ beqz $t3, .L7F0A6204 -/* 0DAD20 7F0A61F0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DAD24 7F0A61F4 44818000 */ mtc1 $at, $f16 -/* 0DAD28 7F0A61F8 00000000 */ nop -/* 0DAD2C 7F0A61FC 46100480 */ add.s $f18, $f0, $f16 -/* 0DAD30 7F0A6200 E6120000 */ swc1 $f18, ($s0) -.L7F0A6204: -/* 0DAD34 7F0A6204 00002025 */ move $a0, $zero -.L7F0A6208: -/* 0DAD38 7F0A6208 0C0030C3 */ jal joyGetButtons -/* 0DAD3C 7F0A620C 24050808 */ li $a1, 2056 -/* 0DAD40 7F0A6210 1040000E */ beqz $v0, .L7F0A624C -/* 0DAD44 7F0A6214 00002025 */ move $a0, $zero -/* 0DAD48 7F0A6218 C6000000 */ lwc1 $f0, ($s0) -/* 0DAD4C 7F0A621C 8FAE003C */ lw $t6, 0x3c($sp) -/* 0DAD50 7F0A6220 4600010D */ trunc.w.s $f4, $f0 -/* 0DAD54 7F0A6224 440D2000 */ mfc1 $t5, $f4 -/* 0DAD58 7F0A6228 00000000 */ nop -/* 0DAD5C 7F0A622C 19A0001A */ blez $t5, .L7F0A6298 -/* 0DAD60 7F0A6230 00000000 */ nop -/* 0DAD64 7F0A6234 11C00018 */ beqz $t6, .L7F0A6298 -/* 0DAD68 7F0A6238 3C018006 */ lui $at, %hi(D_80058494) -/* 0DAD6C 7F0A623C C4268494 */ lwc1 $f6, %lo(D_80058494)($at) -/* 0DAD70 7F0A6240 46060201 */ sub.s $f8, $f0, $f6 -/* 0DAD74 7F0A6244 10000014 */ b .L7F0A6298 -/* 0DAD78 7F0A6248 E6080000 */ swc1 $f8, ($s0) -.L7F0A624C: -/* 0DAD7C 7F0A624C 0C0030C3 */ jal joyGetButtons -/* 0DAD80 7F0A6250 24050404 */ li $a1, 1028 -/* 0DAD84 7F0A6254 10400010 */ beqz $v0, .L7F0A6298 -/* 0DAD88 7F0A6258 00000000 */ nop -/* 0DAD8C 7F0A625C C6000000 */ lwc1 $f0, ($s0) -/* 0DAD90 7F0A6260 8FB90028 */ lw $t9, 0x28($sp) -/* 0DAD94 7F0A6264 8FA8003C */ lw $t0, 0x3c($sp) -/* 0DAD98 7F0A6268 4600028D */ trunc.w.s $f10, $f0 -/* 0DAD9C 7F0A626C 2729FFFF */ addiu $t1, $t9, -1 -/* 0DADA0 7F0A6270 44185000 */ mfc1 $t8, $f10 -/* 0DADA4 7F0A6274 00000000 */ nop -/* 0DADA8 7F0A6278 0309082A */ slt $at, $t8, $t1 -/* 0DADAC 7F0A627C 10200006 */ beqz $at, .L7F0A6298 -/* 0DADB0 7F0A6280 00000000 */ nop -/* 0DADB4 7F0A6284 11000004 */ beqz $t0, .L7F0A6298 -/* 0DADB8 7F0A6288 3C018006 */ lui $at, %hi(D_80058498) -/* 0DADBC 7F0A628C C4308498 */ lwc1 $f16, %lo(D_80058498)($at) -/* 0DADC0 7F0A6290 46100480 */ add.s $f18, $f0, $f16 -/* 0DADC4 7F0A6294 E6120000 */ swc1 $f18, ($s0) -.L7F0A6298: -/* 0DADC8 7F0A6298 0C00307F */ jal joyGetStickY -/* 0DADCC 7F0A629C 00002025 */ move $a0, $zero -/* 0DADD0 7F0A62A0 2841001F */ slti $at, $v0, 0x1f -/* 0DADD4 7F0A62A4 14200017 */ bnez $at, .L7F0A6304 -/* 0DADD8 7F0A62A8 00000000 */ nop -/* 0DADDC 7F0A62AC 0C00307F */ jal joyGetStickY -/* 0DADE0 7F0A62B0 00002025 */ move $a0, $zero -/* 0DADE4 7F0A62B4 28410046 */ slti $at, $v0, 0x46 -/* 0DADE8 7F0A62B8 10200012 */ beqz $at, .L7F0A6304 -/* 0DADEC 7F0A62BC 8FAA0024 */ lw $t2, 0x24($sp) -/* 0DADF0 7F0A62C0 8D4B0000 */ lw $t3, ($t2) -/* 0DADF4 7F0A62C4 8FAC003C */ lw $t4, 0x3c($sp) -/* 0DADF8 7F0A62C8 1960000E */ blez $t3, .L7F0A6304 -/* 0DADFC 7F0A62CC 00000000 */ nop -/* 0DAE00 7F0A62D0 1180000C */ beqz $t4, .L7F0A6304 -/* 0DAE04 7F0A62D4 00000000 */ nop -/* 0DAE08 7F0A62D8 0C00307F */ jal joyGetStickY -/* 0DAE0C 7F0A62DC 00002025 */ move $a0, $zero -/* 0DAE10 7F0A62E0 44822000 */ mtc1 $v0, $f4 -/* 0DAE14 7F0A62E4 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0DAE18 7F0A62E8 44814000 */ mtc1 $at, $f8 -/* 0DAE1C 7F0A62EC 468021A0 */ cvt.s.w $f6, $f4 -/* 0DAE20 7F0A62F0 C6100000 */ lwc1 $f16, ($s0) -/* 0DAE24 7F0A62F4 46083283 */ div.s $f10, $f6, $f8 -/* 0DAE28 7F0A62F8 460A8481 */ sub.s $f18, $f16, $f10 -/* 0DAE2C 7F0A62FC 10000021 */ b .L7F0A6384 -/* 0DAE30 7F0A6300 E6120000 */ swc1 $f18, ($s0) -.L7F0A6304: -/* 0DAE34 7F0A6304 0C00307F */ jal joyGetStickY -/* 0DAE38 7F0A6308 00002025 */ move $a0, $zero -/* 0DAE3C 7F0A630C 2841FFE2 */ slti $at, $v0, -0x1e -/* 0DAE40 7F0A6310 1020001C */ beqz $at, .L7F0A6384 -/* 0DAE44 7F0A6314 00000000 */ nop -/* 0DAE48 7F0A6318 0C00307F */ jal joyGetStickY -/* 0DAE4C 7F0A631C 00002025 */ move $a0, $zero -/* 0DAE50 7F0A6320 2841FFBB */ slti $at, $v0, -0x45 -/* 0DAE54 7F0A6324 14200017 */ bnez $at, .L7F0A6384 -/* 0DAE58 7F0A6328 00000000 */ nop -/* 0DAE5C 7F0A632C C6040000 */ lwc1 $f4, ($s0) -/* 0DAE60 7F0A6330 8FAF0028 */ lw $t7, 0x28($sp) -/* 0DAE64 7F0A6334 8FB8003C */ lw $t8, 0x3c($sp) -/* 0DAE68 7F0A6338 4600218D */ trunc.w.s $f6, $f4 -/* 0DAE6C 7F0A633C 25F9FFFF */ addiu $t9, $t7, -1 -/* 0DAE70 7F0A6340 440E3000 */ mfc1 $t6, $f6 -/* 0DAE74 7F0A6344 00000000 */ nop -/* 0DAE78 7F0A6348 01D9082A */ slt $at, $t6, $t9 -/* 0DAE7C 7F0A634C 1020000D */ beqz $at, .L7F0A6384 -/* 0DAE80 7F0A6350 00000000 */ nop -/* 0DAE84 7F0A6354 1300000B */ beqz $t8, .L7F0A6384 -/* 0DAE88 7F0A6358 00000000 */ nop -/* 0DAE8C 7F0A635C 0C00307F */ jal joyGetStickY -/* 0DAE90 7F0A6360 00002025 */ move $a0, $zero -/* 0DAE94 7F0A6364 44824000 */ mtc1 $v0, $f8 -/* 0DAE98 7F0A6368 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0DAE9C 7F0A636C 44815000 */ mtc1 $at, $f10 -/* 0DAEA0 7F0A6370 46804420 */ cvt.s.w $f16, $f8 -/* 0DAEA4 7F0A6374 C6040000 */ lwc1 $f4, ($s0) -/* 0DAEA8 7F0A6378 460A8483 */ div.s $f18, $f16, $f10 -/* 0DAEAC 7F0A637C 46122181 */ sub.s $f6, $f4, $f18 -/* 0DAEB0 7F0A6380 E6060000 */ swc1 $f6, ($s0) -.L7F0A6384: -/* 0DAEB4 7F0A6384 0FC29458 */ jal sub_GAME_7F0A5160 -/* 0DAEB8 7F0A6388 00000000 */ nop -/* 0DAEBC 7F0A638C 1040000D */ beqz $v0, .L7F0A63C4 -/* 0DAEC0 7F0A6390 8FA90024 */ lw $t1, 0x24($sp) -/* 0DAEC4 7F0A6394 8D280000 */ lw $t0, ($t1) -/* 0DAEC8 7F0A6398 8FAA003C */ lw $t2, 0x3c($sp) -/* 0DAECC 7F0A639C 19000009 */ blez $t0, .L7F0A63C4 -/* 0DAED0 7F0A63A0 00000000 */ nop -/* 0DAED4 7F0A63A4 11400007 */ beqz $t2, .L7F0A63C4 -/* 0DAED8 7F0A63A8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DAEDC 7F0A63AC C6080000 */ lwc1 $f8, ($s0) -/* 0DAEE0 7F0A63B0 44818000 */ mtc1 $at, $f16 -/* 0DAEE4 7F0A63B4 00000000 */ nop -/* 0DAEE8 7F0A63B8 46104281 */ sub.s $f10, $f8, $f16 -/* 0DAEEC 7F0A63BC 10000013 */ b .L7F0A640C -/* 0DAEF0 7F0A63C0 E60A0000 */ swc1 $f10, ($s0) -.L7F0A63C4: -/* 0DAEF4 7F0A63C4 0FC29467 */ jal sub_GAME_7F0A519C -/* 0DAEF8 7F0A63C8 00000000 */ nop -/* 0DAEFC 7F0A63CC 1040000F */ beqz $v0, .L7F0A640C -/* 0DAF00 7F0A63D0 8FAB0024 */ lw $t3, 0x24($sp) -/* 0DAF04 7F0A63D4 8FAD0028 */ lw $t5, 0x28($sp) -/* 0DAF08 7F0A63D8 8D6C0000 */ lw $t4, ($t3) -/* 0DAF0C 7F0A63DC 8FAE003C */ lw $t6, 0x3c($sp) -/* 0DAF10 7F0A63E0 25AFFFFF */ addiu $t7, $t5, -1 -/* 0DAF14 7F0A63E4 018F082A */ slt $at, $t4, $t7 -/* 0DAF18 7F0A63E8 10200008 */ beqz $at, .L7F0A640C -/* 0DAF1C 7F0A63EC 00000000 */ nop -/* 0DAF20 7F0A63F0 11C00006 */ beqz $t6, .L7F0A640C -/* 0DAF24 7F0A63F4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DAF28 7F0A63F8 C6040000 */ lwc1 $f4, ($s0) -/* 0DAF2C 7F0A63FC 44819000 */ mtc1 $at, $f18 -/* 0DAF30 7F0A6400 00000000 */ nop -/* 0DAF34 7F0A6404 46122180 */ add.s $f6, $f4, $f18 -/* 0DAF38 7F0A6408 E6060000 */ swc1 $f6, ($s0) -.L7F0A640C: -/* 0DAF3C 7F0A640C 0FC29440 */ jal is_holding_less_than_10_up_on_stick -/* 0DAF40 7F0A6410 00000000 */ nop -/* 0DAF44 7F0A6414 54400006 */ bnezl $v0, .L7F0A6430 -/* 0DAF48 7F0A6418 24190001 */ li $t9, 1 -/* 0DAF4C 7F0A641C 0FC29449 */ jal is_holding_less_than_10_down_on_stick -/* 0DAF50 7F0A6420 00000000 */ nop -/* 0DAF54 7F0A6424 10400005 */ beqz $v0, .L7F0A643C -/* 0DAF58 7F0A6428 3C018004 */ lui $at, %hi(D_80040AE4) -/* 0DAF5C 7F0A642C 24190001 */ li $t9, 1 -.L7F0A6430: -/* 0DAF60 7F0A6430 3C018004 */ lui $at, %hi(D_80040AE4) -/* 0DAF64 7F0A6434 10000002 */ b .L7F0A6440 -/* 0DAF68 7F0A6438 AC390AE4 */ sw $t9, %lo(D_80040AE4)($at) -.L7F0A643C: -/* 0DAF6C 7F0A643C AC200AE4 */ sw $zero, %lo(D_80040AE4)($at) -.L7F0A6440: -/* 0DAF70 7F0A6440 8FB80028 */ lw $t8, 0x28($sp) -/* 0DAF74 7F0A6444 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0DAF78 7F0A6448 44815000 */ mtc1 $at, $f10 -/* 0DAF7C 7F0A644C 44984000 */ mtc1 $t8, $f8 -/* 0DAF80 7F0A6450 C6000000 */ lwc1 $f0, ($s0) -/* 0DAF84 7F0A6454 3C01BF00 */ li $at, 0xBF000000 # -0.500000 -/* 0DAF88 7F0A6458 46804420 */ cvt.s.w $f16, $f8 -/* 0DAF8C 7F0A645C 460A8081 */ sub.s $f2, $f16, $f10 -/* 0DAF90 7F0A6460 4600103C */ c.lt.s $f2, $f0 -/* 0DAF94 7F0A6464 00000000 */ nop -/* 0DAF98 7F0A6468 45020004 */ bc1fl .L7F0A647C -/* 0DAF9C 7F0A646C 44811000 */ mtc1 $at, $f2 -/* 0DAFA0 7F0A6470 E6020000 */ swc1 $f2, ($s0) -/* 0DAFA4 7F0A6474 C6000000 */ lwc1 $f0, ($s0) -/* 0DAFA8 7F0A6478 44811000 */ mtc1 $at, $f2 -.L7F0A647C: -/* 0DAFAC 7F0A647C 00000000 */ nop -/* 0DAFB0 7F0A6480 4602003C */ c.lt.s $f0, $f2 -/* 0DAFB4 7F0A6484 00000000 */ nop -/* 0DAFB8 7F0A6488 45020004 */ bc1fl .L7F0A649C -/* 0DAFBC 7F0A648C 4600010D */ trunc.w.s $f4, $f0 -/* 0DAFC0 7F0A6490 E6020000 */ swc1 $f2, ($s0) -/* 0DAFC4 7F0A6494 C6000000 */ lwc1 $f0, ($s0) -/* 0DAFC8 7F0A6498 4600010D */ trunc.w.s $f4, $f0 -.L7F0A649C: -/* 0DAFCC 7F0A649C 8FA50040 */ lw $a1, 0x40($sp) -/* 0DAFD0 7F0A64A0 8FAA0024 */ lw $t2, 0x24($sp) -/* 0DAFD4 7F0A64A4 8FA40030 */ lw $a0, 0x30($sp) -/* 0DAFD8 7F0A64A8 44082000 */ mfc1 $t0, $f4 -/* 0DAFDC 7F0A64AC 8FA6002C */ lw $a2, 0x2c($sp) -/* 0DAFE0 7F0A64B0 00085823 */ negu $t3, $t0 -/* 0DAFE4 7F0A64B4 01650019 */ multu $t3, $a1 -/* 0DAFE8 7F0A64B8 AD480000 */ sw $t0, ($t2) -/* 0DAFEC 7F0A64BC 8FAC0038 */ lw $t4, 0x38($sp) -/* 0DAFF0 7F0A64C0 00006812 */ mflo $t5 -/* 0DAFF4 7F0A64C4 00000000 */ nop -/* 0DAFF8 7F0A64C8 00000000 */ nop -/* 0DAFFC 7F0A64CC 01850019 */ multu $t4, $a1 -/* 0DB000 7F0A64D0 00007812 */ mflo $t7 -/* 0DB004 7F0A64D4 01AF7021 */ addu $t6, $t5, $t7 -/* 0DB008 7F0A64D8 AC8E0000 */ sw $t6, ($a0) -/* 0DB00C 7F0A64DC 8CC20000 */ lw $v0, ($a2) -/* 0DB010 7F0A64E0 01C01825 */ move $v1, $t6 -/* 0DB014 7F0A64E4 00002025 */ move $a0, $zero -/* 0DB018 7F0A64E8 01C2082A */ slt $at, $t6, $v0 -/* 0DB01C 7F0A64EC 1020000A */ beqz $at, .L7F0A6518 -/* 0DB020 7F0A64F0 004EC823 */ subu $t9, $v0, $t6 -/* 0DB024 7F0A64F4 24010003 */ li $at, 3 -/* 0DB028 7F0A64F8 0321001A */ div $zero, $t9, $at -/* 0DB02C 7F0A64FC 0000C012 */ mflo $t8 -/* 0DB030 7F0A6500 00584823 */ subu $t1, $v0, $t8 -/* 0DB034 7F0A6504 252AFFFF */ addiu $t2, $t1, -1 -/* 0DB038 7F0A6508 ACCA0000 */ sw $t2, ($a2) -/* 0DB03C 7F0A650C 8FA80034 */ lw $t0, 0x34($sp) -/* 0DB040 7F0A6510 10000010 */ b .L7F0A6554 -/* 0DB044 7F0A6514 AD000000 */ sw $zero, ($t0) -.L7F0A6518: -/* 0DB048 7F0A6518 0043082A */ slt $at, $v0, $v1 -/* 0DB04C 7F0A651C 1020000B */ beqz $at, .L7F0A654C -/* 0DB050 7F0A6520 8FB80034 */ lw $t8, 0x34($sp) -/* 0DB054 7F0A6524 00625823 */ subu $t3, $v1, $v0 -/* 0DB058 7F0A6528 24010003 */ li $at, 3 -/* 0DB05C 7F0A652C 0161001A */ div $zero, $t3, $at -/* 0DB060 7F0A6530 00006012 */ mflo $t4 -/* 0DB064 7F0A6534 004C6821 */ addu $t5, $v0, $t4 -/* 0DB068 7F0A6538 25AF0001 */ addiu $t7, $t5, 1 -/* 0DB06C 7F0A653C ACCF0000 */ sw $t7, ($a2) -/* 0DB070 7F0A6540 8FAE0034 */ lw $t6, 0x34($sp) -/* 0DB074 7F0A6544 10000003 */ b .L7F0A6554 -/* 0DB078 7F0A6548 ADC00000 */ sw $zero, ($t6) -.L7F0A654C: -/* 0DB07C 7F0A654C 24190001 */ li $t9, 1 -/* 0DB080 7F0A6550 AF190000 */ sw $t9, ($t8) -.L7F0A6554: -/* 0DB084 7F0A6554 8FA90024 */ lw $t1, 0x24($sp) -/* 0DB088 7F0A6558 3C018006 */ lui $at, %hi(D_8005849C) -/* 0DB08C 7F0A655C C428849C */ lwc1 $f8, %lo(D_8005849C)($at) -/* 0DB090 7F0A6560 8D2A0000 */ lw $t2, ($t1) -/* 0DB094 7F0A6564 C60A0000 */ lwc1 $f10, ($s0) -/* 0DB098 7F0A6568 448A9000 */ mtc1 $t2, $f18 -/* 0DB09C 7F0A656C 00000000 */ nop -/* 0DB0A0 7F0A6570 468091A0 */ cvt.s.w $f6, $f18 -/* 0DB0A4 7F0A6574 46083400 */ add.s $f16, $f6, $f8 -/* 0DB0A8 7F0A6578 460A803C */ c.lt.s $f16, $f10 -/* 0DB0AC 7F0A657C 00000000 */ nop -/* 0DB0B0 7F0A6580 4502000B */ bc1fl .L7F0A65B0 -/* 0DB0B4 7F0A6584 8FA80024 */ lw $t0, 0x24($sp) -/* 0DB0B8 7F0A6588 0C0030C3 */ jal joyGetButtons -/* 0DB0BC 7F0A658C 3405FFFF */ li $a1, 65535 -/* 0DB0C0 7F0A6590 14400006 */ bnez $v0, .L7F0A65AC -/* 0DB0C4 7F0A6594 3C018006 */ lui $at, %hi(D_800584A0) -/* 0DB0C8 7F0A6598 C6040000 */ lwc1 $f4, ($s0) -/* 0DB0CC 7F0A659C C43284A0 */ lwc1 $f18, %lo(D_800584A0)($at) -/* 0DB0D0 7F0A65A0 46122181 */ sub.s $f6, $f4, $f18 -/* 0DB0D4 7F0A65A4 10000017 */ b .L7F0A6604 -/* 0DB0D8 7F0A65A8 E6060000 */ swc1 $f6, ($s0) -.L7F0A65AC: -/* 0DB0DC 7F0A65AC 8FA80024 */ lw $t0, 0x24($sp) -.L7F0A65B0: -/* 0DB0E0 7F0A65B0 3C018006 */ lui $at, %hi(D_800584A4) -/* 0DB0E4 7F0A65B4 C42A84A4 */ lwc1 $f10, %lo(D_800584A4)($at) -/* 0DB0E8 7F0A65B8 8D0B0000 */ lw $t3, ($t0) -/* 0DB0EC 7F0A65BC C6120000 */ lwc1 $f18, ($s0) -/* 0DB0F0 7F0A65C0 00002025 */ move $a0, $zero -/* 0DB0F4 7F0A65C4 448B4000 */ mtc1 $t3, $f8 -/* 0DB0F8 7F0A65C8 00000000 */ nop -/* 0DB0FC 7F0A65CC 46804420 */ cvt.s.w $f16, $f8 -/* 0DB100 7F0A65D0 460A8100 */ add.s $f4, $f16, $f10 -/* 0DB104 7F0A65D4 4604903E */ c.le.s $f18, $f4 -/* 0DB108 7F0A65D8 00000000 */ nop -/* 0DB10C 7F0A65DC 4502000A */ bc1fl .L7F0A6608 -/* 0DB110 7F0A65E0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0DB114 7F0A65E4 0C0030C3 */ jal joyGetButtons -/* 0DB118 7F0A65E8 3405FFFF */ li $a1, 65535 -/* 0DB11C 7F0A65EC 14400005 */ bnez $v0, .L7F0A6604 -/* 0DB120 7F0A65F0 3C018006 */ lui $at, %hi(D_800584A8) -/* 0DB124 7F0A65F4 C6060000 */ lwc1 $f6, ($s0) -/* 0DB128 7F0A65F8 C42884A8 */ lwc1 $f8, %lo(D_800584A8)($at) -/* 0DB12C 7F0A65FC 46083400 */ add.s $f16, $f6, $f8 -/* 0DB130 7F0A6600 E6100000 */ swc1 $f16, ($s0) -.L7F0A6604: -/* 0DB134 7F0A6604 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0A6608: -/* 0DB138 7F0A6608 8FB00018 */ lw $s0, 0x18($sp) -/* 0DB13C 7F0A660C 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0DB140 7F0A6610 03E00008 */ jr $ra -/* 0DB144 7F0A6614 00000000 */ nop -) -#endif - - - - void mission_brief_background_navigation(void) @@ -1870,14 +1266,14 @@ void mission_brief_background_navigation(void) if ((joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS|U_JPAD)) || (sub_GAME_7F0A5088())) { mission_brief_index = BRIEF_INDEX_OBJECTIVES; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); } if ((joyGetButtonsPressedThisFrame(PLAYER_1, D_CBUTTONS|D_JPAD)) || (sub_GAME_7F0A50C4())) { mission_brief_index = BRIEF_INDEX_M; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); } } @@ -1888,7 +1284,7 @@ void mission_brief_m_briefing_navigation(void) if (joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) { mission_brief_index = BRIEF_INDEX_BACKGROUND; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); return; } @@ -1896,7 +1292,7 @@ void mission_brief_m_briefing_navigation(void) if (joyGetButtonsPressedThisFrame(PLAYER_1, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) { mission_brief_index = BRIEF_INDEX_Q; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); } } @@ -1907,7 +1303,7 @@ void mission_brief_q_branch_navigation(void) if (joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) { mission_brief_index = BRIEF_INDEX_M; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); return; } @@ -1915,7 +1311,7 @@ void mission_brief_q_branch_navigation(void) if (joyGetButtonsPressedThisFrame(PLAYER_1, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) { mission_brief_index = BRIEF_INDEX_MONEYPENNY; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); } } @@ -1925,7 +1321,7 @@ void mission_brief_moneypenny_navigation(void) if (joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) { mission_brief_index = BRIEF_INDEX_Q; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); return; } @@ -1933,7 +1329,7 @@ void mission_brief_moneypenny_navigation(void) if (joyGetButtonsPressedThisFrame(PLAYER_1, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) { mission_brief_index = BRIEF_INDEX_OBJECTIVES; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); } } @@ -1943,7 +1339,7 @@ void mission_brief_objectives_navigation(void) if (joyGetButtonsPressedThisFrame(PLAYER_1, U_CBUTTONS|U_JPAD) || sub_GAME_7F0A5088()) { mission_brief_index = BRIEF_INDEX_MONEYPENNY; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); return; } @@ -1951,79 +1347,48 @@ void mission_brief_objectives_navigation(void) if (joyGetButtonsPressedThisFrame(PLAYER_1, D_CBUTTONS|D_JPAD) || sub_GAME_7F0A50C4()) { mission_brief_index = BRIEF_INDEX_BACKGROUND; - set_D_80040AE0_0(); + disable_watch_stick_y_nav_ready(); reset_watch_item_is_actively_selected(); } } -#ifdef NONMATCHING -void sub_GAME_7F0A68D8(void) { +void build_watch_static_scanline_vertices(Vtx *vertices) +{ + s32 halfWidth; // Half width for the scanline + Vtx *vertex; + s32 zoffs; + s32 greenChannelIndex; + s32 side; + // Fit the width of the scanline to the watch's green circle + halfWidth = sqrtf(213444.0f - ((f32) (g_WatchStaticScanlineY * g_WatchStaticScanlineY))); + + for (zoffs = 0; zoffs != 8; zoffs += 4) + { + for (side = -1; side != 3; side += 2) + { + vertex = vertices; + + vertex->v.ob[0] = halfWidth * side; + vertex->v.ob[1] = 0; + vertex->v.ob[2] = zoffs + g_WatchStaticScanlineY; + + vertex->v.cn[1] = 0xA0; + vertex->v.flag = 0; + vertex->v.tc[0] = 0; + vertex->v.tc[1] = 0; + vertex->v.cn[0] = 0; + + greenChannelIndex = 1; + vertex->v.cn[greenChannelIndex] = 0xA0; + vertex->v.cn[2] = 0; + vertex->v.cn[3] = g_WatchStaticScanlineAlpha; + + vertices++; + } + } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_800584AC -.word 0x48507100 /*213444.0*/ -.text -glabel sub_GAME_7F0A68D8 -/* 0DB408 7F0A68D8 3C098004 */ lui $t1, %hi(D_80040B40) -/* 0DB40C 7F0A68DC 25290B40 */ addiu $t1, %lo(D_80040B40) # addiu $t1, $t1, 0xb40 -/* 0DB410 7F0A68E0 8D220000 */ lw $v0, ($t1) -/* 0DB414 7F0A68E4 3C018006 */ lui $at, %hi(D_800584AC) -/* 0DB418 7F0A68E8 C42484AC */ lwc1 $f4, %lo(D_800584AC)($at) -/* 0DB41C 7F0A68EC 00420019 */ multu $v0, $v0 -/* 0DB420 7F0A68F0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0DB424 7F0A68F4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0DB428 7F0A68F8 AFA40018 */ sw $a0, 0x18($sp) -/* 0DB42C 7F0A68FC 00007012 */ mflo $t6 -/* 0DB430 7F0A6900 448E3000 */ mtc1 $t6, $f6 -/* 0DB434 7F0A6904 00000000 */ nop -/* 0DB438 7F0A6908 46803220 */ cvt.s.w $f8, $f6 -/* 0DB43C 7F0A690C 0C007DF8 */ jal sqrtf -/* 0DB440 7F0A6910 46082301 */ sub.s $f12, $f4, $f8 -/* 0DB444 7F0A6914 4600028D */ trunc.w.s $f10, $f0 -/* 0DB448 7F0A6918 3C098004 */ lui $t1, %hi(D_80040B40) -/* 0DB44C 7F0A691C 3C078004 */ lui $a3, %hi(D_80040B08) -/* 0DB450 7F0A6920 25290B40 */ addiu $t1, %lo(D_80040B40) # addiu $t1, $t1, 0xb40 -/* 0DB454 7F0A6924 44055000 */ mfc1 $a1, $f10 -/* 0DB458 7F0A6928 8FA40018 */ lw $a0, 0x18($sp) -/* 0DB45C 7F0A692C 24E70B08 */ addiu $a3, %lo(D_80040B08) # addiu $a3, $a3, 0xb08 -/* 0DB460 7F0A6930 00001825 */ move $v1, $zero -/* 0DB464 7F0A6934 240A0008 */ li $t2, 8 -/* 0DB468 7F0A6938 24080003 */ li $t0, 3 -/* 0DB46C 7F0A693C 240600A0 */ li $a2, 160 -/* 0DB470 7F0A6940 2402FFFF */ li $v0, -1 -.L7F0A6944: -/* 0DB474 7F0A6944 00A20019 */ multu $a1, $v0 -/* 0DB478 7F0A6948 A4800002 */ sh $zero, 2($a0) -/* 0DB47C 7F0A694C 24420002 */ addiu $v0, $v0, 2 -/* 0DB480 7F0A6950 24840010 */ addiu $a0, $a0, 0x10 -/* 0DB484 7F0A6954 0000C012 */ mflo $t8 -/* 0DB488 7F0A6958 A498FFF0 */ sh $t8, -0x10($a0) -/* 0DB48C 7F0A695C 8D390000 */ lw $t9, ($t1) -/* 0DB490 7F0A6960 A480FFF6 */ sh $zero, -0xa($a0) -/* 0DB494 7F0A6964 A480FFF8 */ sh $zero, -8($a0) -/* 0DB498 7F0A6968 00795821 */ addu $t3, $v1, $t9 -/* 0DB49C 7F0A696C A48BFFF4 */ sh $t3, -0xc($a0) -/* 0DB4A0 7F0A6970 A480FFFA */ sh $zero, -6($a0) -/* 0DB4A4 7F0A6974 A080FFFC */ sb $zero, -4($a0) -/* 0DB4A8 7F0A6978 A086FFFD */ sb $a2, -3($a0) -/* 0DB4AC 7F0A697C A080FFFE */ sb $zero, -2($a0) -/* 0DB4B0 7F0A6980 8CEC0000 */ lw $t4, ($a3) -/* 0DB4B4 7F0A6984 1448FFEF */ bne $v0, $t0, .L7F0A6944 -/* 0DB4B8 7F0A6988 A08CFFFF */ sb $t4, -1($a0) -/* 0DB4BC 7F0A698C 24630004 */ addiu $v1, $v1, 4 -/* 0DB4C0 7F0A6990 546AFFEC */ bnel $v1, $t2, .L7F0A6944 -/* 0DB4C4 7F0A6994 2402FFFF */ li $v0, -1 -/* 0DB4C8 7F0A6998 8FBF0014 */ lw $ra, 0x14($sp) -/* 0DB4CC 7F0A699C 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0DB4D0 7F0A69A0 03E00008 */ jr $ra -/* 0DB4D4 7F0A69A4 00000000 */ nop -) -#endif - void sub_GAME_7F0A69A8(void) @@ -2092,19 +1457,19 @@ void sub_GAME_7F0A6A80(void) } } - if (D_80040AE0 == 0) + if (watch_stick_y_nav_ready == 0) { if ((joyGetStickY(PLAYER_1) >= -0xA) && (joyGetStickY(PLAYER_1) < 0xB)) { - D_80040AE0 = 1; + watch_stick_y_nav_ready = 1; } else if ((joyGetStickY(PLAYER_1) < 0xB) && (joy7000C284(PLAYER_1) >= 0xB)) { - D_80040AE0 = 1; + watch_stick_y_nav_ready = 1; } else if ((joyGetStickY(PLAYER_1) >= -0xA) && (joy7000C284(PLAYER_1) < -0xA)) { - D_80040AE0 = 1; + watch_stick_y_nav_ready = 1; } } @@ -2157,15 +1522,15 @@ void sub_GAME_7F0A6A80(void) g_WatchBackgroundGreen = 0xe0; } - D_80040B08 = ((-g_WatchBackgroundGreen * 4) + 0x380); - D_80040B40 = D_80040B40 - 4; + g_WatchStaticScanlineAlpha = ((-g_WatchBackgroundGreen * 4) + 0x380); + g_WatchStaticScanlineY = g_WatchStaticScanlineY - 4; - if (D_80040B40 >= 0x157) { - D_80040B40 = -0x156; + if (g_WatchStaticScanlineY >= 0x157) { + g_WatchStaticScanlineY = -0x156; } - if (D_80040B40 < -0x156) { - D_80040B40 = 0x156; + if (g_WatchStaticScanlineY < -0x156) { + g_WatchStaticScanlineY = 0x156; } D_80040B44 = (s16)D_80040B44 + 1; @@ -2247,95 +1612,34 @@ Gfx *sub_GAME_7F0A6EE8(Gfx *DL) } -#ifdef NONMATCHING -/** - * Decomp notes: match down to regalloc. -*/ -void set_page_rectangle_colors(s32 watch_screen_index, struct WatchVertex *arg2) +void set_page_rectangle_colors(s32 watch_screen_index, struct WatchVertex *vertices) { s32 i; - s32 limit; - // Default color for rectangle. - for (i=0; i<(4 * WATCH_NUMBER_SCREENS); i++) + // Unselected rectangles. + for (i = 0; i < 20; i++) { - arg2[i].color.r = 0x20; - arg2[i].color.g = 0x70; - arg2[i].color.b = 0x20; + vertices[i].color.r = 0x20; + vertices[i].color.g = 0x70; + vertices[i].color.b = 0x20; } - i = watch_screen_index * 4; - limit = i + 3; - for ( ; i <= limit; i++) + // Currently selected page rectangle. + for (i = watch_screen_index * 4; i <= watch_screen_index * 4 + 3; i++) { - // Color of currently selected screen - arg2[i].color.r = 0x50; - arg2[i].color.g = 0xF0; - arg2[i].color.b = 0x50; + vertices[i].color.r = 0x50; + vertices[i].color.g = 0xF0; + vertices[i].color.b = 0x50; + // Currently selected page rectangle, but something else is in focus e.g. toggling options or manipulating the controller on the controller screen. if (watch_item_is_actively_selected) { - // Color of currently selected screen when a menu option is selected. - // This applies on main screen, game options, controller options, objective status, but not inventory. - arg2[i].color.r = 0x30; - arg2[i].color.g = 0xA0; - arg2[i].color.b = 0x30; + vertices[i].color.r = 0x30; + vertices[i].color.g = 0xA0; + vertices[i].color.b = 0x30; } } } -#else -GLOBAL_ASM( -.text -glabel set_page_rectangle_colors -/* 0DBBDC 7F0A70AC 00001025 */ move $v0, $zero -/* 0DBBE0 7F0A70B0 00A01825 */ move $v1, $a1 -/* 0DBBE4 7F0A70B4 24070070 */ li $a3, 112 -/* 0DBBE8 7F0A70B8 24060020 */ li $a2, 32 -.L7F0A70BC: -/* 0DBBEC 7F0A70BC 24420001 */ addiu $v0, $v0, 1 -/* 0DBBF0 7F0A70C0 28410014 */ slti $at, $v0, 0x14 -/* 0DBBF4 7F0A70C4 24630010 */ addiu $v1, $v1, 0x10 -/* 0DBBF8 7F0A70C8 A066FFFC */ sb $a2, -4($v1) -/* 0DBBFC 7F0A70CC A067FFFD */ sb $a3, -3($v1) -/* 0DBC00 7F0A70D0 1420FFFA */ bnez $at, .L7F0A70BC -/* 0DBC04 7F0A70D4 A066FFFE */ sb $a2, -2($v1) -/* 0DBC08 7F0A70D8 00041880 */ sll $v1, $a0, 2 -/* 0DBC0C 7F0A70DC 24660003 */ addiu $a2, $v1, 3 -/* 0DBC10 7F0A70E0 00C3082A */ slt $at, $a2, $v1 -/* 0DBC14 7F0A70E4 14200017 */ bnez $at, .L7F0A7144 -/* 0DBC18 7F0A70E8 00037100 */ sll $t6, $v1, 4 -/* 0DBC1C 7F0A70EC 00067900 */ sll $t7, $a2, 4 -/* 0DBC20 7F0A70F0 01E52021 */ addu $a0, $t7, $a1 -/* 0DBC24 7F0A70F4 3C068004 */ lui $a2, %hi(watch_item_is_actively_selected) -/* 0DBC28 7F0A70F8 00AE1821 */ addu $v1, $a1, $t6 -/* 0DBC2C 7F0A70FC 240500F0 */ li $a1, 240 -/* 0DBC30 7F0A7100 24C609A8 */ addiu $a2, %lo(watch_item_is_actively_selected) # addiu $a2, $a2, 0x9a8 -/* 0DBC34 7F0A7104 240800A0 */ li $t0, 160 -/* 0DBC38 7F0A7108 24070030 */ li $a3, 48 -/* 0DBC3C 7F0A710C 24020050 */ li $v0, 80 -/* 0DBC40 7F0A7110 A062000C */ sb $v0, 0xc($v1) -.L7F0A7114: -/* 0DBC44 7F0A7114 A065000D */ sb $a1, 0xd($v1) -/* 0DBC48 7F0A7118 A062000E */ sb $v0, 0xe($v1) -/* 0DBC4C 7F0A711C 8CD80000 */ lw $t8, ($a2) -/* 0DBC50 7F0A7120 53000005 */ beql $t8, $zero, .L7F0A7138 -/* 0DBC54 7F0A7124 24630010 */ addiu $v1, $v1, 0x10 -/* 0DBC58 7F0A7128 A067000C */ sb $a3, 0xc($v1) -/* 0DBC5C 7F0A712C A068000D */ sb $t0, 0xd($v1) -/* 0DBC60 7F0A7130 A067000E */ sb $a3, 0xe($v1) -/* 0DBC64 7F0A7134 24630010 */ addiu $v1, $v1, 0x10 -.L7F0A7138: -/* 0DBC68 7F0A7138 0083082B */ sltu $at, $a0, $v1 -/* 0DBC6C 7F0A713C 5020FFF5 */ beql $at, $zero, .L7F0A7114 -/* 0DBC70 7F0A7140 A062000C */ sb $v0, 0xc($v1) -.L7F0A7144: -/* 0DBC74 7F0A7144 03E00008 */ jr $ra -/* 0DBC78 7F0A7148 00000000 */ nop -) -#endif - - - /** @@ -2358,8 +1662,8 @@ Gfx *draw_background_health_and_armor(Gfx *gdl, Mtx *arg1, s32 zoom_squish) f32 scale; - sp48 = dynAllocate7F0BD6C4(WATCH_BACKGROUND_VERTEX_COUNT); - sp44 = dynAllocate7F0BD6C4(WATCH_BACKGROUND_VERTEX_COUNT); + sp48 = dynAllocateVertices(WATCH_BACKGROUND_VERTEX_COUNT); + sp44 = dynAllocateVertices(WATCH_BACKGROUND_VERTEX_COUNT); sp40 = dynAllocate(0xF8); sp3C = dynAllocate(0xF8); @@ -2443,7 +1747,7 @@ Gfx *draw_background_health_and_armor(Gfx *gdl, Mtx *arg1, s32 zoom_squish) */ sub_GAME_7F0A33F8(sp44, WATCH_BACKGROUND_VERTEX_COUNT, 0.92f, 0); - /*sp3C = */sub_GAME_7F0A3978(sp3C, OS_PHYSICAL_TO_K0(sp44), WATCH_BACKGROUND_VERTEX_COUNT, 0); + draw_watch_background(sp3C, OS_PHYSICAL_TO_K0(sp44), WATCH_BACKGROUND_VERTEX_COUNT, 0); gDPPipeSync(gdl++); gDPSetRenderMode(gdl++, G_RM_XLU_SURF, G_RM_XLU_SURF2); @@ -2458,14 +1762,14 @@ Gfx *draw_background_health_and_armor(Gfx *gdl, Mtx *arg1, s32 zoom_squish) if (g_WatchBackgroundGreen < 0xE0) { sub_GAME_7F0A33F8(sp48, WATCH_BACKGROUND_VERTEX_COUNT, 0.899999976158f, 0); - /*sp40 = */sub_GAME_7F0A3978(sp40, OS_PHYSICAL_TO_K0(sp48), WATCH_BACKGROUND_VERTEX_COUNT, 0); + draw_watch_background(sp40, OS_PHYSICAL_TO_K0(sp48), WATCH_BACKGROUND_VERTEX_COUNT, 0); gDPSetRenderMode(gdl++, G_RM_AA_PCL_SURF, G_RM_AA_PCL_SURF2); } else { sub_GAME_7F0A33F8(sp48, WATCH_BACKGROUND_VERTEX_COUNT, 0.899999976158f, 1); - /*sp40 = */sub_GAME_7F0A3978(sp40, OS_PHYSICAL_TO_K0(sp48), WATCH_BACKGROUND_VERTEX_COUNT, 1); + draw_watch_background(sp40, OS_PHYSICAL_TO_K0(sp48), WATCH_BACKGROUND_VERTEX_COUNT, 1); gDPSetRenderMode(gdl++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2); } @@ -2495,7 +1799,8 @@ Gfx *draw_background_health_and_armor(Gfx *gdl, Mtx *arg1, s32 zoom_squish) if (g_WatchBackgroundGreen < 0xE0) { - sub_GAME_7F0A68D8(g_CurrentPlayer->buffer_for_watch_static_vertices); + // Create the thin green scanline that moves up the screen while the watch does static. + build_watch_static_scanline_vertices(g_CurrentPlayer->buffer_for_watch_static_vertices); gDPSetRenderMode(gdl++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2); gSPDisplayList(gdl++, OS_PHYSICAL_TO_K0(g_CurrentPlayer->buffer_for_watch_static_DL)); @@ -2504,6 +1809,7 @@ Gfx *draw_background_health_and_armor(Gfx *gdl, Mtx *arg1, s32 zoom_squish) return gdl; } + Gfx *draw_background_health_and_armor_transitioning(Gfx *gdl, Mtx *param_2) { return draw_background_health_and_armor(gdl, param_2, 1); @@ -2687,8 +1993,29 @@ Gfx *draw_text_q_watch_v201_beta(Gfx *gdl) -#ifdef NONMATCHING -// Matching! +#ifndef _BONDWALK_H_ +#define _BONDWALK_H_ +typedef struct GunModelFileRecord { + void *item_header; + char *item_file_name; + s32 has_no_model; + void *item_weapon_stats; + u16 upper_watch_text; + u16 lower_watch_text; + f32 watch_pos_x, watch_pos_y, watch_pos_z; + f32 x_rotation, y_rotation; + u16 weapon_of_choice_text, watch_equipment_text; + f32 equip_watch_x, equip_watch_y, equip_watch_z; +} GunModelFileRecord; +#endif +extern GunModelFileRecord gitem_structs[]; +/* forward declarations so the compiler uses f32 calling convention ($f0) */ +extern f32 bondinvGetVposWatchForIndex(s32 index); +extern f32 bondinvGetHposWatchForIndex(s32 index); +extern f32 bondinvGetDepthWatchForIndex(s32 index); +extern f32 bondinvGetDifferent45AngleForIndex(s32 index); +extern f32 bondinvGetXrotWatchForIndex(s32 index); +extern f32 bondinvGetYrotWatchForIndex(s32 index); Gfx* draw_current_hand_item_and_ammo(Gfx* gdl) { Mtx* sp114; u16 perspNorm; @@ -2729,7 +2056,7 @@ Gfx* draw_current_hand_item_and_ammo(Gfx* gdl) { roty = bondinvGetYrotWatchForIndex(temp_v0); text = bondinvGetFirstTitlebyIndex(temp_v0); text2 = bondinvGetSecondTitlebyIndex(temp_v0); - + if (get_debug_gunwatchpos_flag() != 0) { gitem = &gitem_structs[getCurrentPlayerWeaponId(0)]; @@ -2750,20 +2077,30 @@ Gfx* draw_current_hand_item_and_ammo(Gfx* gdl) { } if (joyGetButtons(0, 0x20) != 0) { - gitem->watch_pos_z *= D_80058520; + gitem->watch_pos_z *= 0.98000002f; } if (joyGetButtons(0, 0x10) != 0) { - gitem->watch_pos_z *= D_80058524; + gitem->watch_pos_z *= 1.0204082f; } +#ifdef DEBUG + + osSyncPrintf("gun watch pos x=%f[CL,CR] y=%f[CD,CU] z=%f[TL,TR] ", gitem->watch_pos_x, gitem->watch_pos_y, gitem->watch_pos_z); + +#endif } - guPerspective(sp114, &perspNorm, sp60, 1.33333337f, 10.0f, D_80058528, 1.0f); + +#if defined(LEFTOVERDEBUG) + guPerspective(sp114, &perspNorm, sp60, 1.33333337f, 10.0f, 10000.0f, 1.0f); +#else + guPerspective(sp114, &perspNorm, sp60, 1.2838470f, 10.0f, 10000.0f, 1.0f); +#endif gSPMatrix(gdl++, osVirtualToPhysical(sp114), G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH); - matrix_4x4_set_rotation_around_y((roty * D_8005852C) / 360.0f, &matrix2); - matrix_4x4_set_rotation_around_z(D_80058530 - ((rotx * D_80058530) / 360.0f), &matrix); + matrix_4x4_set_rotation_around_y((roty * 6.2831855f) / 360.0f, &matrix2); + matrix_4x4_set_rotation_around_z(6.2831855f - ((rotx * 6.2831855f) / 360.0f), &matrix); matrix_4x4_multiply_in_place(&matrix, &matrix2); matrix_4x4_set_lookat_target(&matrix, sp64, sp6C, sp68, 0.0f, sp6C, sp68, 0.0f, 1.0f, 0.0f); matrix_4x4_multiply_in_place(&matrix, &matrix2); @@ -2776,7 +2113,7 @@ Gfx* draw_current_hand_item_and_ammo(Gfx* gdl) { gdl = set_enviro_fog_for_items_in_solo_watch_menu(gdl, sp70, &matrix2, 0xFF, 0x64DC6428); } - gdl = microcode_constructor(sub_GAME_7F06A334(gdl)); + gdl = microcode_constructor(gunDrawWatchAmmoDisplay(gdl)); sp8C = 0x60; #if defined(LEFTOVERDEBUG) @@ -2797,643 +2134,6 @@ Gfx* draw_current_hand_item_and_ammo(Gfx* gdl) { return gdl; } -#else -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_8005850C -.word 0x3f7ae148 /*0.98000002*/ -glabel D_80058510 -.word 0x3f829cbc /*1.0204082*/ -glabel D_80058514 -.word 0x461c4000 /*10000.0*/ -glabel D_80058518 -.word 0x40c90fdb /*6.2831855*/ -glabel D_8005851C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80058520 -.word 0x3f7ae148 /*0.98000002*/ -glabel D_80058524 -.word 0x3f829cbc /*1.0204082*/ -glabel D_80058528 -.word 0x461c4000 /*10000.0*/ -glabel D_8005852C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80058530 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel draw_current_hand_item_and_ammo -/* 0DC9D8 7F0A7EA8 27BDFEE8 */ addiu $sp, $sp, -0x118 -/* 0DC9DC 7F0A7EAC AFBF003C */ sw $ra, 0x3c($sp) -/* 0DC9E0 7F0A7EB0 AFB00038 */ sw $s0, 0x38($sp) -/* 0DC9E4 7F0A7EB4 0FC2F5B8 */ jal dynAllocateMatrix -/* 0DC9E8 7F0A7EB8 00808025 */ move $s0, $a0 -/* 0DC9EC 7F0A7EBC 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) -/* 0DC9F0 7F0A7EC0 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) -/* 0DC9F4 7F0A7EC4 8DCE0EAC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0DC9F8 7F0A7EC8 8DEF0EB0 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0DC9FC 7F0A7ECC AFA20114 */ sw $v0, 0x114($sp) -/* 0DCA00 7F0A7ED0 AFA00084 */ sw $zero, 0x84($sp) -/* 0DCA04 7F0A7ED4 AFA00080 */ sw $zero, 0x80($sp) -/* 0DCA08 7F0A7ED8 AFAE007C */ sw $t6, 0x7c($sp) -/* 0DCA0C 7F0A7EDC 0FC23630 */ jal bondinvGetCurEquippedItem -/* 0DCA10 7F0A7EE0 AFAF0078 */ sw $t7, 0x78($sp) -/* 0DCA14 7F0A7EE4 AFA20074 */ sw $v0, 0x74($sp) -/* 0DCA18 7F0A7EE8 0FC234AA */ jal bondinvGetTextbyInvIndex -/* 0DCA1C 7F0A7EEC 00402025 */ move $a0, $v0 -/* 0DCA20 7F0A7EF0 AFA20070 */ sw $v0, 0x70($sp) -/* 0DCA24 7F0A7EF4 0FC235F6 */ jal bondinvGetVposWatchForIndex -/* 0DCA28 7F0A7EF8 8FA40074 */ lw $a0, 0x74($sp) -/* 0DCA2C 7F0A7EFC E7A0006C */ swc1 $f0, 0x6c($sp) -/* 0DCA30 7F0A7F00 0FC23600 */ jal bondinvGetHposWatchForIndex -/* 0DCA34 7F0A7F04 8FA40074 */ lw $a0, 0x74($sp) -/* 0DCA38 7F0A7F08 E7A00068 */ swc1 $f0, 0x68($sp) -/* 0DCA3C 7F0A7F0C 0FC2360A */ jal bondinvGetDepthWatchForIndex -/* 0DCA40 7F0A7F10 8FA40074 */ lw $a0, 0x74($sp) -/* 0DCA44 7F0A7F14 E7A00064 */ swc1 $f0, 0x64($sp) -/* 0DCA48 7F0A7F18 0FC235EC */ jal bondinvGetDifferent45AngleForIndex -/* 0DCA4C 7F0A7F1C 8FA40074 */ lw $a0, 0x74($sp) -/* 0DCA50 7F0A7F20 E7A00060 */ swc1 $f0, 0x60($sp) -/* 0DCA54 7F0A7F24 0FC23614 */ jal bondinvGetXrotWatchForIndex -/* 0DCA58 7F0A7F28 8FA40074 */ lw $a0, 0x74($sp) -/* 0DCA5C 7F0A7F2C E7A0005C */ swc1 $f0, 0x5c($sp) -/* 0DCA60 7F0A7F30 0FC2361E */ jal bondinvGetYrotWatchForIndex -/* 0DCA64 7F0A7F34 8FA40074 */ lw $a0, 0x74($sp) -/* 0DCA68 7F0A7F38 E7A00058 */ swc1 $f0, 0x58($sp) -/* 0DCA6C 7F0A7F3C 0FC23572 */ jal bondinvGetFirstTitlebyIndex -/* 0DCA70 7F0A7F40 8FA40074 */ lw $a0, 0x74($sp) -/* 0DCA74 7F0A7F44 AFA20054 */ sw $v0, 0x54($sp) -/* 0DCA78 7F0A7F48 0FC235AF */ jal bondinvGetSecondTitlebyIndex -/* 0DCA7C 7F0A7F4C 8FA40074 */ lw $a0, 0x74($sp) -/* 0DCA80 7F0A7F50 0FC24415 */ jal get_debug_gunwatchpos_flag -/* 0DCA84 7F0A7F54 AFA20050 */ sw $v0, 0x50($sp) -/* 0DCA88 7F0A7F58 5040004C */ beql $v0, $zero, .L7F0A808C -/* 0DCA8C 7F0A7F5C 3C014120 */ lui $at, 0x4120 -/* 0DCA90 7F0A7F60 0FC17674 */ jal getCurrentPlayerWeaponId -/* 0DCA94 7F0A7F64 00002025 */ move $a0, $zero -/* 0DCA98 7F0A7F68 0002C0C0 */ sll $t8, $v0, 3 -/* 0DCA9C 7F0A7F6C 0302C023 */ subu $t8, $t8, $v0 -/* 0DCAA0 7F0A7F70 3C198003 */ lui $t9, %hi(gitem_structs) -/* 0DCAA4 7F0A7F74 27393924 */ addiu $t9, %lo(gitem_structs) # addiu $t9, $t9, 0x3924 -/* 0DCAA8 7F0A7F78 0018C0C0 */ sll $t8, $t8, 3 -/* 0DCAAC 7F0A7F7C 03191821 */ addu $v1, $t8, $t9 -/* 0DCAB0 7F0A7F80 AFA3004C */ sw $v1, 0x4c($sp) -/* 0DCAB4 7F0A7F84 00002025 */ move $a0, $zero -/* 0DCAB8 7F0A7F88 0C0030C3 */ jal joyGetButtons -/* 0DCABC 7F0A7F8C 24050002 */ li $a1, 2 -/* 0DCAC0 7F0A7F90 10400006 */ beqz $v0, .L7F0A7FAC -/* 0DCAC4 7F0A7F94 8FA3004C */ lw $v1, 0x4c($sp) -/* 0DCAC8 7F0A7F98 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DCACC 7F0A7F9C 44813000 */ mtc1 $at, $f6 -/* 0DCAD0 7F0A7FA0 C4640018 */ lwc1 $f4, 0x18($v1) -/* 0DCAD4 7F0A7FA4 46062201 */ sub.s $f8, $f4, $f6 -/* 0DCAD8 7F0A7FA8 E4680018 */ swc1 $f8, 0x18($v1) -.L7F0A7FAC: -/* 0DCADC 7F0A7FAC 00002025 */ move $a0, $zero -/* 0DCAE0 7F0A7FB0 24050001 */ li $a1, 1 -/* 0DCAE4 7F0A7FB4 0C0030C3 */ jal joyGetButtons -/* 0DCAE8 7F0A7FB8 AFA3004C */ sw $v1, 0x4c($sp) -/* 0DCAEC 7F0A7FBC 10400006 */ beqz $v0, .L7F0A7FD8 -/* 0DCAF0 7F0A7FC0 8FA3004C */ lw $v1, 0x4c($sp) -/* 0DCAF4 7F0A7FC4 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DCAF8 7F0A7FC8 44818000 */ mtc1 $at, $f16 -/* 0DCAFC 7F0A7FCC C46A0018 */ lwc1 $f10, 0x18($v1) -/* 0DCB00 7F0A7FD0 46105480 */ add.s $f18, $f10, $f16 -/* 0DCB04 7F0A7FD4 E4720018 */ swc1 $f18, 0x18($v1) -.L7F0A7FD8: -/* 0DCB08 7F0A7FD8 00002025 */ move $a0, $zero -/* 0DCB0C 7F0A7FDC 24050004 */ li $a1, 4 -/* 0DCB10 7F0A7FE0 0C0030C3 */ jal joyGetButtons -/* 0DCB14 7F0A7FE4 AFA3004C */ sw $v1, 0x4c($sp) -/* 0DCB18 7F0A7FE8 10400006 */ beqz $v0, .L7F0A8004 -/* 0DCB1C 7F0A7FEC 8FA3004C */ lw $v1, 0x4c($sp) -/* 0DCB20 7F0A7FF0 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DCB24 7F0A7FF4 44813000 */ mtc1 $at, $f6 -/* 0DCB28 7F0A7FF8 C4640014 */ lwc1 $f4, 0x14($v1) -/* 0DCB2C 7F0A7FFC 46062200 */ add.s $f8, $f4, $f6 -/* 0DCB30 7F0A8000 E4680014 */ swc1 $f8, 0x14($v1) -.L7F0A8004: -/* 0DCB34 7F0A8004 00002025 */ move $a0, $zero -/* 0DCB38 7F0A8008 24050008 */ li $a1, 8 -/* 0DCB3C 7F0A800C 0C0030C3 */ jal joyGetButtons -/* 0DCB40 7F0A8010 AFA3004C */ sw $v1, 0x4c($sp) -/* 0DCB44 7F0A8014 10400006 */ beqz $v0, .L7F0A8030 -/* 0DCB48 7F0A8018 8FA3004C */ lw $v1, 0x4c($sp) -/* 0DCB4C 7F0A801C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DCB50 7F0A8020 44818000 */ mtc1 $at, $f16 -/* 0DCB54 7F0A8024 C46A0014 */ lwc1 $f10, 0x14($v1) -/* 0DCB58 7F0A8028 46105481 */ sub.s $f18, $f10, $f16 -/* 0DCB5C 7F0A802C E4720014 */ swc1 $f18, 0x14($v1) -.L7F0A8030: -/* 0DCB60 7F0A8030 00002025 */ move $a0, $zero -/* 0DCB64 7F0A8034 24050020 */ li $a1, 32 -/* 0DCB68 7F0A8038 0C0030C3 */ jal joyGetButtons -/* 0DCB6C 7F0A803C AFA3004C */ sw $v1, 0x4c($sp) -/* 0DCB70 7F0A8040 10400006 */ beqz $v0, .L7F0A805C -/* 0DCB74 7F0A8044 8FA3004C */ lw $v1, 0x4c($sp) -/* 0DCB78 7F0A8048 3C018006 */ lui $at, %hi(D_8005850C) -/* 0DCB7C 7F0A804C C426850C */ lwc1 $f6, %lo(D_8005850C)($at) -/* 0DCB80 7F0A8050 C464001C */ lwc1 $f4, 0x1c($v1) -/* 0DCB84 7F0A8054 46062202 */ mul.s $f8, $f4, $f6 -/* 0DCB88 7F0A8058 E468001C */ swc1 $f8, 0x1c($v1) -.L7F0A805C: -/* 0DCB8C 7F0A805C 00002025 */ move $a0, $zero -/* 0DCB90 7F0A8060 24050010 */ li $a1, 16 -/* 0DCB94 7F0A8064 0C0030C3 */ jal joyGetButtons -/* 0DCB98 7F0A8068 AFA3004C */ sw $v1, 0x4c($sp) -/* 0DCB9C 7F0A806C 10400006 */ beqz $v0, .L7F0A8088 -/* 0DCBA0 7F0A8070 8FA3004C */ lw $v1, 0x4c($sp) -/* 0DCBA4 7F0A8074 3C018006 */ lui $at, %hi(D_80058510) -/* 0DCBA8 7F0A8078 C4308510 */ lwc1 $f16, %lo(D_80058510)($at) -/* 0DCBAC 7F0A807C C46A001C */ lwc1 $f10, 0x1c($v1) -/* 0DCBB0 7F0A8080 46105482 */ mul.s $f18, $f10, $f16 -/* 0DCBB4 7F0A8084 E472001C */ swc1 $f18, 0x1c($v1) -.L7F0A8088: -/* 0DCBB8 7F0A8088 3C014120 */ li $at, 0x41200000 # 10.000000 -.L7F0A808C: -/* 0DCBBC 7F0A808C 44812000 */ mtc1 $at, $f4 -/* 0DCBC0 7F0A8090 3C018006 */ lui $at, %hi(D_80058514) -/* 0DCBC4 7F0A8094 C4268514 */ lwc1 $f6, %lo(D_80058514)($at) -/* 0DCBC8 7F0A8098 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DCBCC 7F0A809C 44814000 */ mtc1 $at, $f8 -/* 0DCBD0 7F0A80A0 3C073FAA */ lui $a3, (0x3FAAAAAB >> 16) # lui $a3, 0x3faa -/* 0DCBD4 7F0A80A4 34E7AAAB */ ori $a3, (0x3FAAAAAB & 0xFFFF) # ori $a3, $a3, 0xaaab -/* 0DCBD8 7F0A80A8 8FA40114 */ lw $a0, 0x114($sp) -/* 0DCBDC 7F0A80AC 27A50112 */ addiu $a1, $sp, 0x112 -/* 0DCBE0 7F0A80B0 8FA60060 */ lw $a2, 0x60($sp) -/* 0DCBE4 7F0A80B4 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0DCBE8 7F0A80B8 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0DCBEC 7F0A80BC 0C003FAC */ jal guPerspective -/* 0DCBF0 7F0A80C0 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0DCBF4 7F0A80C4 3C080103 */ lui $t0, (0x01030040 >> 16) # lui $t0, 0x103 -/* 0DCBF8 7F0A80C8 35080040 */ ori $t0, (0x01030040 & 0xFFFF) # ori $t0, $t0, 0x40 -/* 0DCBFC 7F0A80CC 02001825 */ move $v1, $s0 -/* 0DCC00 7F0A80D0 AC680000 */ sw $t0, ($v1) -/* 0DCC04 7F0A80D4 AFA30048 */ sw $v1, 0x48($sp) -/* 0DCC08 7F0A80D8 8FA40114 */ lw $a0, 0x114($sp) -/* 0DCC0C 7F0A80DC 0C003A2C */ jal osVirtualToPhysical -/* 0DCC10 7F0A80E0 26100008 */ addiu $s0, $s0, 8 -/* 0DCC14 7F0A80E4 8FA30048 */ lw $v1, 0x48($sp) -/* 0DCC18 7F0A80E8 3C018006 */ lui $at, %hi(D_80058518) -/* 0DCC1C 7F0A80EC 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0DCC20 7F0A80F0 AC620004 */ sw $v0, 4($v1) -/* 0DCC24 7F0A80F4 C4308518 */ lwc1 $f16, %lo(D_80058518)($at) -/* 0DCC28 7F0A80F8 C7AA0058 */ lwc1 $f10, 0x58($sp) -/* 0DCC2C 7F0A80FC 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DCC30 7F0A8100 44812000 */ mtc1 $at, $f4 -/* 0DCC34 7F0A8104 46105482 */ mul.s $f18, $f10, $f16 -/* 0DCC38 7F0A8108 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 0DCC3C 7F0A810C 46049303 */ div.s $f12, $f18, $f4 -/* 0DCC40 7F0A8110 3C018006 */ lui $at, %hi(D_8005851C) -/* 0DCC44 7F0A8114 C420851C */ lwc1 $f0, %lo(D_8005851C)($at) -/* 0DCC48 7F0A8118 C7A6005C */ lwc1 $f6, 0x5c($sp) -/* 0DCC4C 7F0A811C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DCC50 7F0A8120 44815000 */ mtc1 $at, $f10 -/* 0DCC54 7F0A8124 46003202 */ mul.s $f8, $f6, $f0 -/* 0DCC58 7F0A8128 27A50090 */ addiu $a1, $sp, 0x90 -/* 0DCC5C 7F0A812C 460A4403 */ div.s $f16, $f8, $f10 -/* 0DCC60 7F0A8130 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 0DCC64 7F0A8134 46100301 */ sub.s $f12, $f0, $f16 -/* 0DCC68 7F0A8138 27A40090 */ addiu $a0, $sp, 0x90 -/* 0DCC6C 7F0A813C 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 0DCC70 7F0A8140 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0DCC74 7F0A8144 44800000 */ mtc1 $zero, $f0 -/* 0DCC78 7F0A8148 C7A20068 */ lwc1 $f2, 0x68($sp) -/* 0DCC7C 7F0A814C C7AC006C */ lwc1 $f12, 0x6c($sp) -/* 0DCC80 7F0A8150 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DCC84 7F0A8154 44819000 */ mtc1 $at, $f18 -/* 0DCC88 7F0A8158 44071000 */ mfc1 $a3, $f2 -/* 0DCC8C 7F0A815C 44066000 */ mfc1 $a2, $f12 -/* 0DCC90 7F0A8160 27A40090 */ addiu $a0, $sp, 0x90 -/* 0DCC94 7F0A8164 8FA50064 */ lw $a1, 0x64($sp) -/* 0DCC98 7F0A8168 E7A20018 */ swc1 $f2, 0x18($sp) -/* 0DCC9C 7F0A816C E7A00010 */ swc1 $f0, 0x10($sp) -/* 0DCCA0 7F0A8170 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 0DCCA4 7F0A8174 E7A00024 */ swc1 $f0, 0x24($sp) -/* 0DCCA8 7F0A8178 E7AC0014 */ swc1 $f12, 0x14($sp) -/* 0DCCAC 7F0A817C 0FC165A5 */ jal matrix_4x4_set_lookat_target -/* 0DCCB0 7F0A8180 E7B20020 */ swc1 $f18, 0x20($sp) -/* 0DCCB4 7F0A8184 27A40090 */ addiu $a0, $sp, 0x90 -/* 0DCCB8 7F0A8188 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 0DCCBC 7F0A818C 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0DCCC0 7F0A8190 0FC29BBA */ jal sub_GAME_7F0A6EE8 -/* 0DCCC4 7F0A8194 02002025 */ move $a0, $s0 -/* 0DCCC8 7F0A8198 3C038004 */ lui $v1, %hi(g_WatchBackgroundGreen) -/* 0DCCCC 7F0A819C 8C630B04 */ lw $v1, %lo(g_WatchBackgroundGreen)($v1) -/* 0DCCD0 7F0A81A0 00408025 */ move $s0, $v0 -/* 0DCCD4 7F0A81A4 02002025 */ move $a0, $s0 -/* 0DCCD8 7F0A81A8 286100E0 */ slti $at, $v1, 0xe0 -/* 0DCCDC 7F0A81AC 1020000B */ beqz $at, .L7F0A81DC -/* 0DCCE0 7F0A81B0 8FA50070 */ lw $a1, 0x70($sp) -/* 0DCCE4 7F0A81B4 3C0964DC */ lui $t1, (0x64DC6428 >> 16) # lui $t1, 0x64dc -/* 0DCCE8 7F0A81B8 35296428 */ ori $t1, (0x64DC6428 & 0xFFFF) # ori $t1, $t1, 0x6428 -/* 0DCCEC 7F0A81BC AFA90010 */ sw $t1, 0x10($sp) -/* 0DCCF0 7F0A81C0 00402025 */ move $a0, $v0 -/* 0DCCF4 7F0A81C4 8FA50070 */ lw $a1, 0x70($sp) -/* 0DCCF8 7F0A81C8 27A600D0 */ addiu $a2, $sp, 0xd0 -/* 0DCCFC 7F0A81CC 0FC18C01 */ jal set_enviro_fog_for_items_in_solo_watch_menu -/* 0DCD00 7F0A81D0 24670001 */ addiu $a3, $v1, 1 -/* 0DCD04 7F0A81D4 10000008 */ b .L7F0A81F8 -/* 0DCD08 7F0A81D8 00408025 */ move $s0, $v0 -.L7F0A81DC: -/* 0DCD0C 7F0A81DC 3C0A64DC */ lui $t2, (0x64DC6428 >> 16) # lui $t2, 0x64dc -/* 0DCD10 7F0A81E0 354A6428 */ ori $t2, (0x64DC6428 & 0xFFFF) # ori $t2, $t2, 0x6428 -/* 0DCD14 7F0A81E4 AFAA0010 */ sw $t2, 0x10($sp) -/* 0DCD18 7F0A81E8 27A600D0 */ addiu $a2, $sp, 0xd0 -/* 0DCD1C 7F0A81EC 0FC18C01 */ jal set_enviro_fog_for_items_in_solo_watch_menu -/* 0DCD20 7F0A81F0 240700FF */ li $a3, 255 -/* 0DCD24 7F0A81F4 00408025 */ move $s0, $v0 -.L7F0A81F8: -/* 0DCD28 7F0A81F8 0FC1A8CD */ jal sub_GAME_7F06A334 -/* 0DCD2C 7F0A81FC 02002025 */ move $a0, $s0 -/* 0DCD30 7F0A8200 0FC2B366 */ jal microcode_constructor -/* 0DCD34 7F0A8204 00402025 */ move $a0, $v0 -/* 0DCD38 7F0A8208 8FAD007C */ lw $t5, 0x7c($sp) -/* 0DCD3C 7F0A820C 240B0060 */ li $t3, 96 -/* 0DCD40 7F0A8210 240C00A0 */ li $t4, 160 -/* 0DCD44 7F0A8214 00408025 */ move $s0, $v0 -/* 0DCD48 7F0A8218 AFAB008C */ sw $t3, 0x8c($sp) -/* 0DCD4C 7F0A821C AFAC0088 */ sw $t4, 0x88($sp) -/* 0DCD50 7F0A8220 27A40084 */ addiu $a0, $sp, 0x84 -/* 0DCD54 7F0A8224 27A50080 */ addiu $a1, $sp, 0x80 -/* 0DCD58 7F0A8228 8FA60054 */ lw $a2, 0x54($sp) -/* 0DCD5C 7F0A822C 8FA70078 */ lw $a3, 0x78($sp) -/* 0DCD60 7F0A8230 AFA00014 */ sw $zero, 0x14($sp) -/* 0DCD64 7F0A8234 0FC2BA63 */ jal textMeasure -/* 0DCD68 7F0A8238 AFAD0010 */ sw $t5, 0x10($sp) -/* 0DCD6C 7F0A823C 8FAE0078 */ lw $t6, 0x78($sp) -/* 0DCD70 7F0A8240 8FAF007C */ lw $t7, 0x7c($sp) -/* 0DCD74 7F0A8244 8FB90080 */ lw $t9, 0x80($sp) -/* 0DCD78 7F0A8248 8FA80084 */ lw $t0, 0x84($sp) -/* 0DCD7C 7F0A824C 3C1800FF */ lui $t8, (0x00FF00B0 >> 16) # lui $t8, 0xff -/* 0DCD80 7F0A8250 371800B0 */ ori $t8, (0x00FF00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0DCD84 7F0A8254 AFB80018 */ sw $t8, 0x18($sp) -/* 0DCD88 7F0A8258 02002025 */ move $a0, $s0 -/* 0DCD8C 7F0A825C 27A5008C */ addiu $a1, $sp, 0x8c -/* 0DCD90 7F0A8260 27A60088 */ addiu $a2, $sp, 0x88 -/* 0DCD94 7F0A8264 8FA70054 */ lw $a3, 0x54($sp) -/* 0DCD98 7F0A8268 AFA00024 */ sw $zero, 0x24($sp) -/* 0DCD9C 7F0A826C AFA00028 */ sw $zero, 0x28($sp) -/* 0DCDA0 7F0A8270 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DCDA4 7F0A8274 AFAF0014 */ sw $t7, 0x14($sp) -/* 0DCDA8 7F0A8278 AFB9001C */ sw $t9, 0x1c($sp) -/* 0DCDAC 7F0A827C 0FC2B6AF */ jal textRender -/* 0DCDB0 7F0A8280 AFA80020 */ sw $t0, 0x20($sp) -/* 0DCDB4 7F0A8284 8FAA007C */ lw $t2, 0x7c($sp) -/* 0DCDB8 7F0A8288 240900AA */ li $t1, 170 -/* 0DCDBC 7F0A828C 00408025 */ move $s0, $v0 -/* 0DCDC0 7F0A8290 AFA90088 */ sw $t1, 0x88($sp) -/* 0DCDC4 7F0A8294 27A40084 */ addiu $a0, $sp, 0x84 -/* 0DCDC8 7F0A8298 27A50080 */ addiu $a1, $sp, 0x80 -/* 0DCDCC 7F0A829C 8FA60050 */ lw $a2, 0x50($sp) -/* 0DCDD0 7F0A82A0 8FA70078 */ lw $a3, 0x78($sp) -/* 0DCDD4 7F0A82A4 AFA00014 */ sw $zero, 0x14($sp) -/* 0DCDD8 7F0A82A8 0FC2BA63 */ jal textMeasure -/* 0DCDDC 7F0A82AC AFAA0010 */ sw $t2, 0x10($sp) -/* 0DCDE0 7F0A82B0 8FAB0078 */ lw $t3, 0x78($sp) -/* 0DCDE4 7F0A82B4 8FAC007C */ lw $t4, 0x7c($sp) -/* 0DCDE8 7F0A82B8 8FAE0080 */ lw $t6, 0x80($sp) -/* 0DCDEC 7F0A82BC 8FAF0084 */ lw $t7, 0x84($sp) -/* 0DCDF0 7F0A82C0 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0DCDF4 7F0A82C4 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0DCDF8 7F0A82C8 AFAD0018 */ sw $t5, 0x18($sp) -/* 0DCDFC 7F0A82CC 02002025 */ move $a0, $s0 -/* 0DCE00 7F0A82D0 27A5008C */ addiu $a1, $sp, 0x8c -/* 0DCE04 7F0A82D4 27A60088 */ addiu $a2, $sp, 0x88 -/* 0DCE08 7F0A82D8 8FA70050 */ lw $a3, 0x50($sp) -/* 0DCE0C 7F0A82DC AFA00024 */ sw $zero, 0x24($sp) -/* 0DCE10 7F0A82E0 AFA00028 */ sw $zero, 0x28($sp) -/* 0DCE14 7F0A82E4 AFAB0010 */ sw $t3, 0x10($sp) -/* 0DCE18 7F0A82E8 AFAC0014 */ sw $t4, 0x14($sp) -/* 0DCE1C 7F0A82EC AFAE001C */ sw $t6, 0x1c($sp) -/* 0DCE20 7F0A82F0 0FC2B6AF */ jal textRender -/* 0DCE24 7F0A82F4 AFAF0020 */ sw $t7, 0x20($sp) -/* 0DCE28 7F0A82F8 8FBF003C */ lw $ra, 0x3c($sp) -/* 0DCE2C 7F0A82FC 8FB00038 */ lw $s0, 0x38($sp) -/* 0DCE30 7F0A8300 27BD0118 */ addiu $sp, $sp, 0x118 -/* 0DCE34 7F0A8304 03E00008 */ jr $ra -/* 0DCE38 7F0A8308 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_8005850C -.word 0x3f7ae148 /*0.98000002*/ -glabel D_80058510 -.word 0x3f829cbc /*1.0204082*/ -glabel D_80058514 -.word 0x461c4000 /*10000.0*/ -glabel D_80058518 -.word 0x40c90fdb /*6.2831855*/ -glabel D_8005851C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80058520 -.word 0x3f7ae148 /*0.98000002*/ -glabel D_80058524 -.word 0x3f829cbc /*1.0204082*/ -glabel D_80058528 -.word 0x461c4000 /*10000.0*/ -glabel D_8005852C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80058530 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel draw_current_hand_item_and_ammo -/* 0D9BB0 7F0A71C0 27BDFEE8 */ addiu $sp, $sp, -0x118 -/* 0D9BB4 7F0A71C4 AFBF003C */ sw $ra, 0x3c($sp) -/* 0D9BB8 7F0A71C8 AFB00038 */ sw $s0, 0x38($sp) -/* 0D9BBC 7F0A71CC 0FC2F2A4 */ jal dynAllocateMatrix -/* 0D9BC0 7F0A71D0 00808025 */ move $s0, $a0 -/* 0D9BC4 7F0A71D4 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) # $t6, 0x8004 -/* 0D9BC8 7F0A71D8 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) # $t7, 0x8004 -/* 0D9BCC 7F0A71DC 8DCEAAFC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0D9BD0 7F0A71E0 8DEFAB00 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0D9BD4 7F0A71E4 AFA20114 */ sw $v0, 0x114($sp) -/* 0D9BD8 7F0A71E8 AFA00084 */ sw $zero, 0x84($sp) -/* 0D9BDC 7F0A71EC AFA00080 */ sw $zero, 0x80($sp) -/* 0D9BE0 7F0A71F0 AFAE007C */ sw $t6, 0x7c($sp) -/* 0D9BE4 7F0A71F4 0FC2378A */ jal bondinvGetCurEquippedItem -/* 0D9BE8 7F0A71F8 AFAF0078 */ sw $t7, 0x78($sp) -/* 0D9BEC 7F0A71FC AFA20074 */ sw $v0, 0x74($sp) -/* 0D9BF0 7F0A7200 0FC235B6 */ jal bondinvGetTextbyInvIndex -/* 0D9BF4 7F0A7204 00402025 */ move $a0, $v0 -/* 0D9BF8 7F0A7208 AFA20070 */ sw $v0, 0x70($sp) -/* 0D9BFC 7F0A720C 0FC23750 */ jal bondinvGetVposWatchForIndex -/* 0D9C00 7F0A7210 8FA40074 */ lw $a0, 0x74($sp) -/* 0D9C04 7F0A7214 E7A0006C */ swc1 $f0, 0x6c($sp) -/* 0D9C08 7F0A7218 0FC2375A */ jal bondinvGetHposWatchForIndex -/* 0D9C0C 7F0A721C 8FA40074 */ lw $a0, 0x74($sp) -/* 0D9C10 7F0A7220 E7A00068 */ swc1 $f0, 0x68($sp) -/* 0D9C14 7F0A7224 0FC23764 */ jal bondinvGetDepthWatchForIndex -/* 0D9C18 7F0A7228 8FA40074 */ lw $a0, 0x74($sp) -/* 0D9C1C 7F0A722C E7A00064 */ swc1 $f0, 0x64($sp) -/* 0D9C20 7F0A7230 0FC23746 */ jal bondinvGetDifferent45AngleForIndex -/* 0D9C24 7F0A7234 8FA40074 */ lw $a0, 0x74($sp) -/* 0D9C28 7F0A7238 E7A00060 */ swc1 $f0, 0x60($sp) -/* 0D9C2C 7F0A723C 0FC2376E */ jal bondinvGetXrotWatchForIndex -/* 0D9C30 7F0A7240 8FA40074 */ lw $a0, 0x74($sp) -/* 0D9C34 7F0A7244 E7A0005C */ swc1 $f0, 0x5c($sp) -/* 0D9C38 7F0A7248 0FC23778 */ jal bondinvGetYrotWatchForIndex -/* 0D9C3C 7F0A724C 8FA40074 */ lw $a0, 0x74($sp) -/* 0D9C40 7F0A7250 E7A00058 */ swc1 $f0, 0x58($sp) -/* 0D9C44 7F0A7254 0FC236AC */ jal bondinvGetFirstTitlebyIndex -/* 0D9C48 7F0A7258 8FA40074 */ lw $a0, 0x74($sp) -/* 0D9C4C 7F0A725C AFA20054 */ sw $v0, 0x54($sp) -/* 0D9C50 7F0A7260 0FC236F9 */ jal bondinvGetSecondTitlebyIndex -/* 0D9C54 7F0A7264 8FA40074 */ lw $a0, 0x74($sp) -/* 0D9C58 7F0A7268 0FC2412A */ jal get_debug_gunwatchpos_flag -/* 0D9C5C 7F0A726C AFA20050 */ sw $v0, 0x50($sp) -/* 0D9C60 7F0A7270 5040004C */ beql $v0, $zero, .L7F0A73A4 -/* 0D9C64 7F0A7274 3C014120 */ lui $at, 0x4120 -/* 0D9C68 7F0A7278 0FC177A2 */ jal getCurrentPlayerWeaponId -/* 0D9C6C 7F0A727C 00002025 */ move $a0, $zero -/* 0D9C70 7F0A7280 0002C0C0 */ sll $t8, $v0, 3 -/* 0D9C74 7F0A7284 0302C023 */ subu $t8, $t8, $v0 -/* 0D9C78 7F0A7288 3C198003 */ lui $t9, %hi(gitem_structs) # $t9, 0x8003 -/* 0D9C7C 7F0A728C 2739EE74 */ addiu $t9, %lo(gitem_structs) # addiu $t9, $t9, -0x118c -/* 0D9C80 7F0A7290 0018C0C0 */ sll $t8, $t8, 3 -/* 0D9C84 7F0A7294 03191821 */ addu $v1, $t8, $t9 -/* 0D9C88 7F0A7298 AFA3004C */ sw $v1, 0x4c($sp) -/* 0D9C8C 7F0A729C 00002025 */ move $a0, $zero -/* 0D9C90 7F0A72A0 0C002C20 */ jal joyGetButtons -/* 0D9C94 7F0A72A4 24050002 */ li $a1, 2 -/* 0D9C98 7F0A72A8 10400006 */ beqz $v0, .L7F0A72C4 -/* 0D9C9C 7F0A72AC 8FA3004C */ lw $v1, 0x4c($sp) -/* 0D9CA0 7F0A72B0 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0D9CA4 7F0A72B4 44813000 */ mtc1 $at, $f6 -/* 0D9CA8 7F0A72B8 C4640018 */ lwc1 $f4, 0x18($v1) -/* 0D9CAC 7F0A72BC 46062201 */ sub.s $f8, $f4, $f6 -/* 0D9CB0 7F0A72C0 E4680018 */ swc1 $f8, 0x18($v1) -.L7F0A72C4: -/* 0D9CB4 7F0A72C4 00002025 */ move $a0, $zero -/* 0D9CB8 7F0A72C8 24050001 */ li $a1, 1 -/* 0D9CBC 7F0A72CC 0C002C20 */ jal joyGetButtons -/* 0D9CC0 7F0A72D0 AFA3004C */ sw $v1, 0x4c($sp) -/* 0D9CC4 7F0A72D4 10400006 */ beqz $v0, .L7F0A72F0 -/* 0D9CC8 7F0A72D8 8FA3004C */ lw $v1, 0x4c($sp) -/* 0D9CCC 7F0A72DC 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0D9CD0 7F0A72E0 44818000 */ mtc1 $at, $f16 -/* 0D9CD4 7F0A72E4 C46A0018 */ lwc1 $f10, 0x18($v1) -/* 0D9CD8 7F0A72E8 46105480 */ add.s $f18, $f10, $f16 -/* 0D9CDC 7F0A72EC E4720018 */ swc1 $f18, 0x18($v1) -.L7F0A72F0: -/* 0D9CE0 7F0A72F0 00002025 */ move $a0, $zero -/* 0D9CE4 7F0A72F4 24050004 */ li $a1, 4 -/* 0D9CE8 7F0A72F8 0C002C20 */ jal joyGetButtons -/* 0D9CEC 7F0A72FC AFA3004C */ sw $v1, 0x4c($sp) -/* 0D9CF0 7F0A7300 10400006 */ beqz $v0, .L7F0A731C -/* 0D9CF4 7F0A7304 8FA3004C */ lw $v1, 0x4c($sp) -/* 0D9CF8 7F0A7308 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0D9CFC 7F0A730C 44813000 */ mtc1 $at, $f6 -/* 0D9D00 7F0A7310 C4640014 */ lwc1 $f4, 0x14($v1) -/* 0D9D04 7F0A7314 46062200 */ add.s $f8, $f4, $f6 -/* 0D9D08 7F0A7318 E4680014 */ swc1 $f8, 0x14($v1) -.L7F0A731C: -/* 0D9D0C 7F0A731C 00002025 */ move $a0, $zero -/* 0D9D10 7F0A7320 24050008 */ li $a1, 8 -/* 0D9D14 7F0A7324 0C002C20 */ jal joyGetButtons -/* 0D9D18 7F0A7328 AFA3004C */ sw $v1, 0x4c($sp) -/* 0D9D1C 7F0A732C 10400006 */ beqz $v0, .L7F0A7348 -/* 0D9D20 7F0A7330 8FA3004C */ lw $v1, 0x4c($sp) -/* 0D9D24 7F0A7334 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0D9D28 7F0A7338 44818000 */ mtc1 $at, $f16 -/* 0D9D2C 7F0A733C C46A0014 */ lwc1 $f10, 0x14($v1) -/* 0D9D30 7F0A7340 46105481 */ sub.s $f18, $f10, $f16 -/* 0D9D34 7F0A7344 E4720014 */ swc1 $f18, 0x14($v1) -.L7F0A7348: -/* 0D9D38 7F0A7348 00002025 */ move $a0, $zero -/* 0D9D3C 7F0A734C 24050020 */ li $a1, 32 -/* 0D9D40 7F0A7350 0C002C20 */ jal joyGetButtons -/* 0D9D44 7F0A7354 AFA3004C */ sw $v1, 0x4c($sp) -/* 0D9D48 7F0A7358 10400006 */ beqz $v0, .L7F0A7374 -/* 0D9D4C 7F0A735C 8FA3004C */ lw $v1, 0x4c($sp) -/* 0D9D50 7F0A7360 3C018005 */ lui $at, %hi(D_8005850C) # $at, 0x8005 -/* 0D9D54 7F0A7364 C426CF60 */ lwc1 $f6, %lo(D_8005850C)($at) -/* 0D9D58 7F0A7368 C464001C */ lwc1 $f4, 0x1c($v1) -/* 0D9D5C 7F0A736C 46062202 */ mul.s $f8, $f4, $f6 -/* 0D9D60 7F0A7370 E468001C */ swc1 $f8, 0x1c($v1) -.L7F0A7374: -/* 0D9D64 7F0A7374 00002025 */ move $a0, $zero -/* 0D9D68 7F0A7378 24050010 */ li $a1, 16 -/* 0D9D6C 7F0A737C 0C002C20 */ jal joyGetButtons -/* 0D9D70 7F0A7380 AFA3004C */ sw $v1, 0x4c($sp) -/* 0D9D74 7F0A7384 10400006 */ beqz $v0, .L7F0A73A0 -/* 0D9D78 7F0A7388 8FA3004C */ lw $v1, 0x4c($sp) -/* 0D9D7C 7F0A738C 3C018005 */ lui $at, %hi(D_80058510) # $at, 0x8005 -/* 0D9D80 7F0A7390 C430CF64 */ lwc1 $f16, %lo(D_80058510)($at) -/* 0D9D84 7F0A7394 C46A001C */ lwc1 $f10, 0x1c($v1) -/* 0D9D88 7F0A7398 46105482 */ mul.s $f18, $f10, $f16 -/* 0D9D8C 7F0A739C E472001C */ swc1 $f18, 0x1c($v1) -.L7F0A73A0: -/* 0D9D90 7F0A73A0 3C014120 */ li $at, 0x41200000 # 10.000000 -.L7F0A73A4: -/* 0D9D94 7F0A73A4 44812000 */ mtc1 $at, $f4 -/* 0D9D98 7F0A73A8 3C018005 */ lui $at, %hi(D_80058514) # $at, 0x8005 -/* 0D9D9C 7F0A73AC C426CF68 */ lwc1 $f6, %lo(D_80058514)($at) -/* 0D9DA0 7F0A73B0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D9DA4 7F0A73B4 44814000 */ mtc1 $at, $f8 -/* 0D9DA8 7F0A73B8 3C073FA4 */ lui $a3, (0x3FA45519 >> 16) # lui $a3, 0x3fa4 -/* 0D9DAC 7F0A73BC 34E75519 */ ori $a3, (0x3FA45519 & 0xFFFF) # ori $a3, $a3, 0x5519 -/* 0D9DB0 7F0A73C0 8FA40114 */ lw $a0, 0x114($sp) -/* 0D9DB4 7F0A73C4 27A50112 */ addiu $a1, $sp, 0x112 -/* 0D9DB8 7F0A73C8 8FA60060 */ lw $a2, 0x60($sp) -/* 0D9DBC 7F0A73CC E7A40010 */ swc1 $f4, 0x10($sp) -/* 0D9DC0 7F0A73D0 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0D9DC4 7F0A73D4 0C003DB8 */ jal guPerspective -/* 0D9DC8 7F0A73D8 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0D9DCC 7F0A73DC 3C080103 */ lui $t0, (0x01030040 >> 16) # lui $t0, 0x103 -/* 0D9DD0 7F0A73E0 35080040 */ ori $t0, (0x01030040 & 0xFFFF) # ori $t0, $t0, 0x40 -/* 0D9DD4 7F0A73E4 02001825 */ move $v1, $s0 -/* 0D9DD8 7F0A73E8 AC680000 */ sw $t0, ($v1) -/* 0D9DDC 7F0A73EC AFA30048 */ sw $v1, 0x48($sp) -/* 0D9DE0 7F0A73F0 8FA40114 */ lw $a0, 0x114($sp) -/* 0D9DE4 7F0A73F4 0C003838 */ jal osVirtualToPhysical -/* 0D9DE8 7F0A73F8 26100008 */ addiu $s0, $s0, 8 -/* 0D9DEC 7F0A73FC 8FA30048 */ lw $v1, 0x48($sp) -/* 0D9DF0 7F0A7400 3C018005 */ lui $at, %hi(D_80058518) # $at, 0x8005 -/* 0D9DF4 7F0A7404 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0D9DF8 7F0A7408 AC620004 */ sw $v0, 4($v1) -/* 0D9DFC 7F0A740C C430CF6C */ lwc1 $f16, %lo(D_80058518)($at) -/* 0D9E00 7F0A7410 C7AA0058 */ lwc1 $f10, 0x58($sp) -/* 0D9E04 7F0A7414 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0D9E08 7F0A7418 44812000 */ mtc1 $at, $f4 -/* 0D9E0C 7F0A741C 46105482 */ mul.s $f18, $f10, $f16 -/* 0D9E10 7F0A7420 0FC162A9 */ jal matrix_4x4_set_rotation_around_y -/* 0D9E14 7F0A7424 46049303 */ div.s $f12, $f18, $f4 -/* 0D9E18 7F0A7428 3C018005 */ lui $at, %hi(D_8005851C) # $at, 0x8005 -/* 0D9E1C 7F0A742C C420CF70 */ lwc1 $f0, %lo(D_8005851C)($at) -/* 0D9E20 7F0A7430 C7A6005C */ lwc1 $f6, 0x5c($sp) -/* 0D9E24 7F0A7434 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0D9E28 7F0A7438 44815000 */ mtc1 $at, $f10 -/* 0D9E2C 7F0A743C 46003202 */ mul.s $f8, $f6, $f0 -/* 0D9E30 7F0A7440 27A50090 */ addiu $a1, $sp, 0x90 -/* 0D9E34 7F0A7444 460A4403 */ div.s $f16, $f8, $f10 -/* 0D9E38 7F0A7448 0FC162CC */ jal matrix_4x4_set_rotation_around_z -/* 0D9E3C 7F0A744C 46100301 */ sub.s $f12, $f0, $f16 -/* 0D9E40 7F0A7450 27A40090 */ addiu $a0, $sp, 0x90 -/* 0D9E44 7F0A7454 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 0D9E48 7F0A7458 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0D9E4C 7F0A745C 44800000 */ mtc1 $zero, $f0 -/* 0D9E50 7F0A7460 C7A20068 */ lwc1 $f2, 0x68($sp) -/* 0D9E54 7F0A7464 C7AC006C */ lwc1 $f12, 0x6c($sp) -/* 0D9E58 7F0A7468 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D9E5C 7F0A746C 44819000 */ mtc1 $at, $f18 -/* 0D9E60 7F0A7470 44071000 */ mfc1 $a3, $f2 -/* 0D9E64 7F0A7474 44066000 */ mfc1 $a2, $f12 -/* 0D9E68 7F0A7478 27A40090 */ addiu $a0, $sp, 0x90 -/* 0D9E6C 7F0A747C 8FA50064 */ lw $a1, 0x64($sp) -/* 0D9E70 7F0A7480 E7A20018 */ swc1 $f2, 0x18($sp) -/* 0D9E74 7F0A7484 E7A00010 */ swc1 $f0, 0x10($sp) -/* 0D9E78 7F0A7488 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 0D9E7C 7F0A748C E7A00024 */ swc1 $f0, 0x24($sp) -/* 0D9E80 7F0A7490 E7AC0014 */ swc1 $f12, 0x14($sp) -/* 0D9E84 7F0A7494 0FC166CF */ jal matrix_4x4_set_lookat_target -/* 0D9E88 7F0A7498 E7B20020 */ swc1 $f18, 0x20($sp) -/* 0D9E8C 7F0A749C 27A40090 */ addiu $a0, $sp, 0x90 -/* 0D9E90 7F0A74A0 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 0D9E94 7F0A74A4 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 0D9E98 7F0A74A8 0FC29880 */ jal sub_GAME_7F0A6EE8 -/* 0D9E9C 7F0A74AC 02002025 */ move $a0, $s0 -/* 0D9EA0 7F0A74B0 3C038004 */ lui $v1, %hi(g_WatchBackgroundGreen) # $v1, 0x8004 -/* 0D9EA4 7F0A74B4 8C63A754 */ lw $v1, %lo(g_WatchBackgroundGreen)($v1) -/* 0D9EA8 7F0A74B8 00408025 */ move $s0, $v0 -/* 0D9EAC 7F0A74BC 02002025 */ move $a0, $s0 -/* 0D9EB0 7F0A74C0 286100E0 */ slti $at, $v1, 0xe0 -/* 0D9EB4 7F0A74C4 1020000B */ beqz $at, .L7F0A74F4 -/* 0D9EB8 7F0A74C8 8FA50070 */ lw $a1, 0x70($sp) -/* 0D9EBC 7F0A74CC 3C0964DC */ lui $t1, (0x64DC6428 >> 16) # lui $t1, 0x64dc -/* 0D9EC0 7F0A74D0 35296428 */ ori $t1, (0x64DC6428 & 0xFFFF) # ori $t1, $t1, 0x6428 -/* 0D9EC4 7F0A74D4 AFA90010 */ sw $t1, 0x10($sp) -/* 0D9EC8 7F0A74D8 00402025 */ move $a0, $v0 -/* 0D9ECC 7F0A74DC 8FA50070 */ lw $a1, 0x70($sp) -/* 0D9ED0 7F0A74E0 27A600D0 */ addiu $a2, $sp, 0xd0 -/* 0D9ED4 7F0A74E4 0FC18D32 */ jal set_enviro_fog_for_items_in_solo_watch_menu -/* 0D9ED8 7F0A74E8 24670001 */ addiu $a3, $v1, 1 -/* 0D9EDC 7F0A74EC 10000008 */ b .L7F0A7510 -/* 0D9EE0 7F0A74F0 00408025 */ move $s0, $v0 -.L7F0A74F4: -/* 0D9EE4 7F0A74F4 3C0A64DC */ lui $t2, (0x64DC6428 >> 16) # lui $t2, 0x64dc -/* 0D9EE8 7F0A74F8 354A6428 */ ori $t2, (0x64DC6428 & 0xFFFF) # ori $t2, $t2, 0x6428 -/* 0D9EEC 7F0A74FC AFAA0010 */ sw $t2, 0x10($sp) -/* 0D9EF0 7F0A7500 27A600D0 */ addiu $a2, $sp, 0xd0 -/* 0D9EF4 7F0A7504 0FC18D32 */ jal set_enviro_fog_for_items_in_solo_watch_menu -/* 0D9EF8 7F0A7508 240700FF */ li $a3, 255 -/* 0D9EFC 7F0A750C 00408025 */ move $s0, $v0 -.L7F0A7510: -/* 0D9F00 7F0A7510 0FC1AAB2 */ jal sub_GAME_7F06A334 -/* 0D9F04 7F0A7514 02002025 */ move $a0, $s0 -/* 0D9F08 7F0A7518 0FC2B016 */ jal microcode_constructor -/* 0D9F0C 7F0A751C 00402025 */ move $a0, $v0 -/* 0D9F10 7F0A7520 8FAD007C */ lw $t5, 0x7c($sp) -/* 0D9F14 7F0A7524 240B0060 */ li $t3, 96 -/* 0D9F18 7F0A7528 240C00BC */ li $t4, 188 -/* 0D9F1C 7F0A752C 00408025 */ move $s0, $v0 -/* 0D9F20 7F0A7530 AFAB008C */ sw $t3, 0x8c($sp) -/* 0D9F24 7F0A7534 AFAC0088 */ sw $t4, 0x88($sp) -/* 0D9F28 7F0A7538 27A40084 */ addiu $a0, $sp, 0x84 -/* 0D9F2C 7F0A753C 27A50080 */ addiu $a1, $sp, 0x80 -/* 0D9F30 7F0A7540 8FA60054 */ lw $a2, 0x54($sp) -/* 0D9F34 7F0A7544 8FA70078 */ lw $a3, 0x78($sp) -/* 0D9F38 7F0A7548 AFA00014 */ sw $zero, 0x14($sp) -/* 0D9F3C 7F0A754C 0FC2B713 */ jal textMeasure -/* 0D9F40 7F0A7550 AFAD0010 */ sw $t5, 0x10($sp) -/* 0D9F44 7F0A7554 8FAE0078 */ lw $t6, 0x78($sp) -/* 0D9F48 7F0A7558 8FAF007C */ lw $t7, 0x7c($sp) -/* 0D9F4C 7F0A755C 8FB90080 */ lw $t9, 0x80($sp) -/* 0D9F50 7F0A7560 8FA80084 */ lw $t0, 0x84($sp) -/* 0D9F54 7F0A7564 3C1800FF */ lui $t8, (0x00FF00B0 >> 16) # lui $t8, 0xff -/* 0D9F58 7F0A7568 371800B0 */ ori $t8, (0x00FF00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0D9F5C 7F0A756C AFB80018 */ sw $t8, 0x18($sp) -/* 0D9F60 7F0A7570 02002025 */ move $a0, $s0 -/* 0D9F64 7F0A7574 27A5008C */ addiu $a1, $sp, 0x8c -/* 0D9F68 7F0A7578 27A60088 */ addiu $a2, $sp, 0x88 -/* 0D9F6C 7F0A757C 8FA70054 */ lw $a3, 0x54($sp) -/* 0D9F70 7F0A7580 AFA00024 */ sw $zero, 0x24($sp) -/* 0D9F74 7F0A7584 AFA00028 */ sw $zero, 0x28($sp) -/* 0D9F78 7F0A7588 AFAE0010 */ sw $t6, 0x10($sp) -/* 0D9F7C 7F0A758C AFAF0014 */ sw $t7, 0x14($sp) -/* 0D9F80 7F0A7590 AFB9001C */ sw $t9, 0x1c($sp) -/* 0D9F84 7F0A7594 0FC2B35F */ jal textRender -/* 0D9F88 7F0A7598 AFA80020 */ sw $t0, 0x20($sp) -/* 0D9F8C 7F0A759C 8FAA007C */ lw $t2, 0x7c($sp) -/* 0D9F90 7F0A75A0 240900C6 */ li $t1, 198 -/* 0D9F94 7F0A75A4 00408025 */ move $s0, $v0 -/* 0D9F98 7F0A75A8 AFA90088 */ sw $t1, 0x88($sp) -/* 0D9F9C 7F0A75AC 27A40084 */ addiu $a0, $sp, 0x84 -/* 0D9FA0 7F0A75B0 27A50080 */ addiu $a1, $sp, 0x80 -/* 0D9FA4 7F0A75B4 8FA60050 */ lw $a2, 0x50($sp) -/* 0D9FA8 7F0A75B8 8FA70078 */ lw $a3, 0x78($sp) -/* 0D9FAC 7F0A75BC AFA00014 */ sw $zero, 0x14($sp) -/* 0D9FB0 7F0A75C0 0FC2B713 */ jal textMeasure -/* 0D9FB4 7F0A75C4 AFAA0010 */ sw $t2, 0x10($sp) -/* 0D9FB8 7F0A75C8 8FAB0078 */ lw $t3, 0x78($sp) -/* 0D9FBC 7F0A75CC 8FAC007C */ lw $t4, 0x7c($sp) -/* 0D9FC0 7F0A75D0 8FAE0080 */ lw $t6, 0x80($sp) -/* 0D9FC4 7F0A75D4 8FAF0084 */ lw $t7, 0x84($sp) -/* 0D9FC8 7F0A75D8 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0D9FCC 7F0A75DC 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0D9FD0 7F0A75E0 AFAD0018 */ sw $t5, 0x18($sp) -/* 0D9FD4 7F0A75E4 02002025 */ move $a0, $s0 -/* 0D9FD8 7F0A75E8 27A5008C */ addiu $a1, $sp, 0x8c -/* 0D9FDC 7F0A75EC 27A60088 */ addiu $a2, $sp, 0x88 -/* 0D9FE0 7F0A75F0 8FA70050 */ lw $a3, 0x50($sp) -/* 0D9FE4 7F0A75F4 AFA00024 */ sw $zero, 0x24($sp) -/* 0D9FE8 7F0A75F8 AFA00028 */ sw $zero, 0x28($sp) -/* 0D9FEC 7F0A75FC AFAB0010 */ sw $t3, 0x10($sp) -/* 0D9FF0 7F0A7600 AFAC0014 */ sw $t4, 0x14($sp) -/* 0D9FF4 7F0A7604 AFAE001C */ sw $t6, 0x1c($sp) -/* 0D9FF8 7F0A7608 0FC2B35F */ jal textRender -/* 0D9FFC 7F0A760C AFAF0020 */ sw $t7, 0x20($sp) -/* 0DA000 7F0A7610 8FBF003C */ lw $ra, 0x3c($sp) -/* 0DA004 7F0A7614 8FB00038 */ lw $s0, 0x38($sp) -/* 0DA008 7F0A7618 27BD0118 */ addiu $sp, $sp, 0x118 -/* 0DA00C 7F0A761C 03E00008 */ jr $ra -/* 0DA010 7F0A7620 00000000 */ nop -) -#endif -#endif Gfx *draw_watch_mission_status_page(Gfx *gdl, Mtx *param_2) @@ -3477,10 +2177,34 @@ void sub_GAME_7F0A8378(void) } -#ifdef NONMATCHING -// Matching! -Gfx* draw_watch_inventory_page(Gfx *gdl, Mtx *param_2) { - Mtx* sp924; +#ifndef _BONDWALK_H_ +typedef struct GunModelFileRecord { + void *item_header; + char *item_file_name; + s32 has_no_model; + void *item_weapon_stats; + u16 upper_watch_text; + u16 lower_watch_text; + f32 watch_pos_x, watch_pos_y, watch_pos_z; + f32 x_rotation, y_rotation; + u16 weapon_of_choice_text, watch_equipment_text; + f32 equip_watch_x, equip_watch_y, equip_watch_z; +} GunModelFileRecord; +#endif +extern GunModelFileRecord gitem_structs[]; +/* forward declarations so the compiler uses f32 calling convention ($f0) */ +extern f32 bondinvGet45AngleForIndex(s32 index); +extern f32 bondinvGetHoffsetForIndex(s32 index); +extern f32 bondinvGetVoffsetForIndex(s32 index); +extern f32 bondinvGetDepthForIndex(s32 index); +extern f32 bondinvGetXrotWatchForIndex(s32 index); +extern f32 bondinvGetYrotWatchForIndex(s32 index); +extern u16 *bondinvGetNameByIndex(s32 index); + + +Gfx *draw_watch_inventory_page(Gfx *gdl, Mtx *param_2) +{ + Mtx *sp924; u16 perspNorm; Mtxf sp8E0; Mtxf sp8A0; @@ -3497,10 +2221,11 @@ Gfx* draw_watch_inventory_page(Gfx *gdl, Mtx *param_2) { GunModelFileRecord *gitem; s32 x1; s32 y1; - + gdl = draw_background_health_and_armor(gdl, param_2, 0); - if (check_watch_page_transistion_running() != 1) { + if (check_watch_page_transistion_running() != 1) + { sp924 = dynAllocateMatrix(); sp894 = bondinvGet45AngleForIndex(g_curWatchItemIndex); sp890 = bondinvGetHoffsetForIndex(g_curWatchItemIndex); @@ -3510,39 +2235,64 @@ Gfx* draw_watch_inventory_page(Gfx *gdl, Mtx *param_2) { sp880 = bondinvGetXrotWatchForIndex(g_curWatchItemIndex); sp87C = bondinvGetYrotWatchForIndex(g_curWatchItemIndex); - if (get_debug_gunwatchpos_flag() != 0) { - //temp_s0 = (getCurrentPlayerWeaponId(0) * 0x38) + &gitem_structs; + if (get_debug_gunwatchpos_flag() != 0) + { gitem = &gitem_structs[getCurrentPlayerWeaponId(0)]; - if (joyGetButtons(0, 2) != 0) { + if (joyGetButtons(0, L_CBUTTONS) != 0) + { gitem->equip_watch_x -= 2.0f; } - if (joyGetButtons(0, 1) != 0) { + + if (joyGetButtons(0, R_CBUTTONS) != 0) + { gitem->equip_watch_x += 2.0f; } - if (joyGetButtons(0, 4) != 0) { + + if (joyGetButtons(0, D_CBUTTONS) != 0) + { gitem->equip_watch_y += 2.0f; } - if (joyGetButtons(0, 8) != 0) { + + if (joyGetButtons(0, U_CBUTTONS) != 0) + { gitem->equip_watch_y -= 2.0f; } - if (joyGetButtons(0, 0x20) != 0) { - gitem->equip_watch_z *= D_80058520; + + if (joyGetButtons(0, L_TRIG) != 0) + { + gitem->equip_watch_z *= 0.98000002f; } - if (joyGetButtons(0, 0x10) != 0) { - gitem->equip_watch_z *= D_80058524; + + if (joyGetButtons(0, R_TRIG) != 0) + { + gitem->equip_watch_z *= 1.0204082f; } + +#if defined(VERSION_US) && defined(DEBUG) + osSyncPrintf( + "gun list pos x=%f[CL,CR] y=%f[CD,CU] z=%f[TL,TR] ", + gitem->equip_watch_x, + gitem->equip_watch_y, + gitem->equip_watch_z); +#endif } - guPerspective(sp924, &perspNorm, sp894, 1.3333333730698, 10.0f, D_80058528, 1.0f); + guPerspective(sp924, &perspNorm, sp894, WATCH_PERSPECTIVE_ASPECT, 10.0f, 10000.0f, 1.0f); + +#undef WATCH_INV_ASPECT_RATIO + gSPMatrix(gdl++, osVirtualToPhysical(sp924), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); - matrix_4x4_set_rotation_around_y((sp87C * D_8005852C) / 360.0f, &sp8E0); - matrix_4x4_set_rotation_around_z(D_80058530 - ((sp880 * D_80058530) / 360.0f), &sp8A0); + matrix_4x4_set_rotation_around_y((sp87C * M_TAU_F) / 360.0f, &sp8E0); + matrix_4x4_set_rotation_around_z(M_TAU_F - ((sp880 * M_TAU_F) / 360.0f), &sp8A0); matrix_4x4_multiply_in_place(&sp8A0, &sp8E0); + temp_cos = cosf(D_80040B14) * sp888; temp_sin = sinf(D_80040B14) * sp888; + matrix_4x4_set_lookat_target(&sp8A0, temp_cos, sp88C, temp_sin + sp890, 0.0f, sp88C, sp890, 0.0f, 1.0f, 0.0f); + matrix_4x4_multiply_in_place(&sp8A0, &sp8E0); gdl = set_enviro_fog_for_items_in_solo_watch_menu(sub_GAME_7F0A6EE8(gdl), sp884, &sp8E0, 0x40, 0xA0FFA03C); @@ -3554,1549 +2304,117 @@ Gfx* draw_watch_inventory_page(Gfx *gdl, Mtx *param_2) { s32 pFontFile2; s32 pFontChars2; char string_builder_allocation[2000]; - + +#if defined(VERSION_JP) || defined(VERSION_EU) + s32 pFontFile; + s32 base_y; + char formattedString[32]; +#endif + +#define LINEHEIGHT() (j_text_trigger ? 14 : 12) + +#if defined(VERSION_JP) || defined(VERSION_EU) +#define WATCH_INV_BASE_Y() base_y +#else +#define WATCH_INV_BASE_Y() 0x8C +#endif + textheight = 0; textwidth = 0; + +#if defined(VERSION_EU) + pFontFile2 = ptrFontBankGothic; + pFontChars2 = ptrFontBankGothicChars; + base_y = (j_text_trigger) ? (0x82) : (0xAA); + string_builder_allocation[0] = 0; +#elif defined(VERSION_JP) + pFontFile2 = ptrFontBankGothic; + pFontChars2 = ptrFontBankGothicChars; + base_y = (j_text_trigger) ? (0x82) : (0x8C); + string_builder_allocation[0] = 0; +#else string_builder_allocation[0] = 0; pFontFile2 = ptrFontBankGothic; pFontChars2 = ptrFontBankGothicChars; - - // Build a large string - for (i = 0; i < bondinvCountTotalItemsInInv(); i++) { - char* name = bondinvGetNameByIndex(i); +#endif + + for (i = 0; i < bondinvCountTotalItemsInInv(); i++) + { + char *name = bondinvGetNameByIndex(i); + strcat(string_builder_allocation, name); } - - if (D_800409C4 > 0) { + + if (D_800409C4 > 0) + { D_800409C4--; } - - sub_GAME_7F0A5B80(); - + + game_options_inventory_navigation(); + x1 = 0x4E; - y1 = 0x8C; - -#define LINEHEIGHT() (j_text_trigger ? 14 : 12) - - temp_s0_3 = (LINEHEIGHT() * 2) + 0x8D; - + y1 = WATCH_INV_BASE_Y(); + + temp_s0_3 = 1; + temp_s0_3 = (LINEHEIGHT() * 2) + WATCH_INV_BASE_Y() + temp_s0_3; + gdl = microcode_constructor(gdl); + textMeasure(&textheight, &textwidth, string_builder_allocation, pFontChars2, pFontFile2, LINEHEIGHT()); - gdl = microcode_constructor_related_to_menus(gdl, 0x4E, 0x8C, textwidth + 0x4E, (LINEHEIGHT() * 5) + 0x8C, 0); - gdl = textRender(gdl, &x1, &y1, string_builder_allocation, pFontChars2, pFontFile2, 0xAA00B0, textwidth + 1, LINEHEIGHT() * 5, D_800409B0, LINEHEIGHT()); + + gdl = microcode_constructor_related_to_menus(gdl, 0x4E, WATCH_INV_BASE_Y(), textwidth + 0x4E, (LINEHEIGHT() * 5) + WATCH_INV_BASE_Y(), 0); + + gdl = textRender(gdl, &x1, &y1, string_builder_allocation, pFontChars2, pFontFile2, 0xAA00B0, textwidth + 1, LINEHEIGHT() * 5, watch_inventory_text_y, LINEHEIGHT()); + gdl = microcode_constructor_related_to_menus(gdl, 0x4B, temp_s0_3, textwidth + 0x52, (LINEHEIGHT() + temp_s0_3) - 2, 0x800050); { +#if !defined(VERSION_JP) && !defined(VERSION_EU) char formattedString[32]; s32 pFontFile; +#endif s32 pFontChars; s32 x2; s32 y2; - char* invItemName; + char *invItemName; pFontFile = ptrFontBankGothic; pFontChars = ptrFontBankGothicChars; invItemName = bondinvGetNameByIndex(g_curWatchItemIndex); - sprintf(formattedString, "%d, %d\n%d %f\n", D_800409B0, D_800409B4, g_curWatchItemIndex, (f64) D_800409BC); + + sprintf(formattedString, "%d, %d\n%d %f\n", watch_inventory_text_y, watch_inventory_text_target_y, g_curWatchItemIndex, (f64) watch_inventory_cursor_pos); + gdl = microcode_constructor(gdl); - + textMeasure(&y2, &x2, formattedString, pFontChars, pFontFile, 0); - - if (D_800409C0 != 0) { + + if (watch_inventory_text_is_settled != 0) + { textMeasure(&y2, &x2, invItemName, pFontChars, pFontFile, LINEHEIGHT()); + x1 = 0x4E; - y1 = (LINEHEIGHT() * 2) + 0x8C; - if (D_800409C4 == 0) { + y1 = (LINEHEIGHT() * 2) + WATCH_INV_BASE_Y(); + + if (D_800409C4 == 0) + { gdl = textRender(gdl, &x1, &y1, invItemName, pFontChars, pFontFile, 0xA0FFA0F0, x2, 0x64, 0, LINEHEIGHT()); - } else { + } + else + { gdl = textRenderOutlined(gdl, &x1, &y1, invItemName, pFontChars, pFontFile, -1, 0x7000A0, x2 + 1, 0x64, 0, LINEHEIGHT()); } - + sub_GAME_7F0A8378(); } } + +#undef WATCH_INV_BASE_Y +#undef LINEHEIGHT } } + return gdl; } -#else -//D:80057768 -const char aDDDF[] = "%d, %d\n%d %f\n"; - -#ifdef VERSION_US -GLOBAL_ASM( -.text -glabel draw_watch_inventory_page -/* 0DCF54 7F0A8424 27BDF6D8 */ addiu $sp, $sp, -0x928 -/* 0DCF58 7F0A8428 AFBF003C */ sw $ra, 0x3c($sp) -/* 0DCF5C 7F0A842C AFB00038 */ sw $s0, 0x38($sp) -/* 0DCF60 7F0A8430 0FC29C53 */ jal draw_background_health_and_armor -/* 0DCF64 7F0A8434 00003025 */ move $a2, $zero -/* 0DCF68 7F0A8438 0FC1F97F */ jal check_watch_page_transistion_running -/* 0DCF6C 7F0A843C AFA20928 */ sw $v0, 0x928($sp) -/* 0DCF70 7F0A8440 24010001 */ li $at, 1 -/* 0DCF74 7F0A8444 504101AE */ beql $v0, $at, .L7F0A8B00 -/* 0DCF78 7F0A8448 8FBF003C */ lw $ra, 0x3c($sp) -/* 0DCF7C 7F0A844C 0FC2F5B8 */ jal dynAllocateMatrix -/* 0DCF80 7F0A8450 00000000 */ nop -/* 0DCF84 7F0A8454 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) -/* 0DCF88 7F0A8458 AFA20924 */ sw $v0, 0x924($sp) -/* 0DCF8C 7F0A845C 0FC2354A */ jal bondinvGet45AngleForIndex -/* 0DCF90 7F0A8460 8C8409B8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DCF94 7F0A8464 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) -/* 0DCF98 7F0A8468 E7A00894 */ swc1 $f0, 0x894($sp) -/* 0DCF9C 7F0A846C 0FC23554 */ jal bondinvGetHoffsetForIndex -/* 0DCFA0 7F0A8470 8C8409B8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DCFA4 7F0A8474 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) -/* 0DCFA8 7F0A8478 E7A00890 */ swc1 $f0, 0x890($sp) -/* 0DCFAC 7F0A847C 0FC2355E */ jal bondinvGetVoffsetForIndex -/* 0DCFB0 7F0A8480 8C8409B8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DCFB4 7F0A8484 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) -/* 0DCFB8 7F0A8488 E7A0088C */ swc1 $f0, 0x88c($sp) -/* 0DCFBC 7F0A848C 0FC23568 */ jal bondinvGetDepthForIndex -/* 0DCFC0 7F0A8490 8C8409B8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DCFC4 7F0A8494 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) -/* 0DCFC8 7F0A8498 E7A00888 */ swc1 $f0, 0x888($sp) -/* 0DCFCC 7F0A849C 0FC234AA */ jal bondinvGetTextbyInvIndex -/* 0DCFD0 7F0A84A0 8C8409B8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DCFD4 7F0A84A4 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) -/* 0DCFD8 7F0A84A8 AFA20884 */ sw $v0, 0x884($sp) -/* 0DCFDC 7F0A84AC 0FC23614 */ jal bondinvGetXrotWatchForIndex -/* 0DCFE0 7F0A84B0 8C8409B8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DCFE4 7F0A84B4 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) -/* 0DCFE8 7F0A84B8 E7A00880 */ swc1 $f0, 0x880($sp) -/* 0DCFEC 7F0A84BC 0FC2361E */ jal bondinvGetYrotWatchForIndex -/* 0DCFF0 7F0A84C0 8C8409B8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DCFF4 7F0A84C4 0FC24415 */ jal get_debug_gunwatchpos_flag -/* 0DCFF8 7F0A84C8 E7A0087C */ swc1 $f0, 0x87c($sp) -/* 0DCFFC 7F0A84CC 50400040 */ beql $v0, $zero, .L7F0A85D0 -/* 0DD000 7F0A84D0 3C014120 */ lui $at, 0x4120 -/* 0DD004 7F0A84D4 0FC17674 */ jal getCurrentPlayerWeaponId -/* 0DD008 7F0A84D8 00002025 */ move $a0, $zero -/* 0DD00C 7F0A84DC 000270C0 */ sll $t6, $v0, 3 -/* 0DD010 7F0A84E0 01C27023 */ subu $t6, $t6, $v0 -/* 0DD014 7F0A84E4 3C0F8003 */ lui $t7, %hi(gitem_structs) -/* 0DD018 7F0A84E8 25EF3924 */ addiu $t7, %lo(gitem_structs) # addiu $t7, $t7, 0x3924 -/* 0DD01C 7F0A84EC 000E70C0 */ sll $t6, $t6, 3 -/* 0DD020 7F0A84F0 01CF8021 */ addu $s0, $t6, $t7 -/* 0DD024 7F0A84F4 00002025 */ move $a0, $zero -/* 0DD028 7F0A84F8 0C0030C3 */ jal joyGetButtons -/* 0DD02C 7F0A84FC 24050002 */ li $a1, 2 -/* 0DD030 7F0A8500 10400006 */ beqz $v0, .L7F0A851C -/* 0DD034 7F0A8504 00002025 */ move $a0, $zero -/* 0DD038 7F0A8508 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DD03C 7F0A850C 44813000 */ mtc1 $at, $f6 -/* 0DD040 7F0A8510 C604002C */ lwc1 $f4, 0x2c($s0) -/* 0DD044 7F0A8514 46062201 */ sub.s $f8, $f4, $f6 -/* 0DD048 7F0A8518 E608002C */ swc1 $f8, 0x2c($s0) -.L7F0A851C: -/* 0DD04C 7F0A851C 0C0030C3 */ jal joyGetButtons -/* 0DD050 7F0A8520 24050001 */ li $a1, 1 -/* 0DD054 7F0A8524 10400006 */ beqz $v0, .L7F0A8540 -/* 0DD058 7F0A8528 00002025 */ move $a0, $zero -/* 0DD05C 7F0A852C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DD060 7F0A8530 44818000 */ mtc1 $at, $f16 -/* 0DD064 7F0A8534 C60A002C */ lwc1 $f10, 0x2c($s0) -/* 0DD068 7F0A8538 46105480 */ add.s $f18, $f10, $f16 -/* 0DD06C 7F0A853C E612002C */ swc1 $f18, 0x2c($s0) -.L7F0A8540: -/* 0DD070 7F0A8540 0C0030C3 */ jal joyGetButtons -/* 0DD074 7F0A8544 24050004 */ li $a1, 4 -/* 0DD078 7F0A8548 10400006 */ beqz $v0, .L7F0A8564 -/* 0DD07C 7F0A854C 00002025 */ move $a0, $zero -/* 0DD080 7F0A8550 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DD084 7F0A8554 44813000 */ mtc1 $at, $f6 -/* 0DD088 7F0A8558 C6040030 */ lwc1 $f4, 0x30($s0) -/* 0DD08C 7F0A855C 46062200 */ add.s $f8, $f4, $f6 -/* 0DD090 7F0A8560 E6080030 */ swc1 $f8, 0x30($s0) -.L7F0A8564: -/* 0DD094 7F0A8564 0C0030C3 */ jal joyGetButtons -/* 0DD098 7F0A8568 24050008 */ li $a1, 8 -/* 0DD09C 7F0A856C 10400006 */ beqz $v0, .L7F0A8588 -/* 0DD0A0 7F0A8570 00002025 */ move $a0, $zero -/* 0DD0A4 7F0A8574 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DD0A8 7F0A8578 44818000 */ mtc1 $at, $f16 -/* 0DD0AC 7F0A857C C60A0030 */ lwc1 $f10, 0x30($s0) -/* 0DD0B0 7F0A8580 46105481 */ sub.s $f18, $f10, $f16 -/* 0DD0B4 7F0A8584 E6120030 */ swc1 $f18, 0x30($s0) -.L7F0A8588: -/* 0DD0B8 7F0A8588 0C0030C3 */ jal joyGetButtons -/* 0DD0BC 7F0A858C 24050020 */ li $a1, 32 -/* 0DD0C0 7F0A8590 10400006 */ beqz $v0, .L7F0A85AC -/* 0DD0C4 7F0A8594 00002025 */ move $a0, $zero -/* 0DD0C8 7F0A8598 3C018006 */ lui $at, %hi(D_80058520) -/* 0DD0CC 7F0A859C C4268520 */ lwc1 $f6, %lo(D_80058520)($at) -/* 0DD0D0 7F0A85A0 C6040034 */ lwc1 $f4, 0x34($s0) -/* 0DD0D4 7F0A85A4 46062202 */ mul.s $f8, $f4, $f6 -/* 0DD0D8 7F0A85A8 E6080034 */ swc1 $f8, 0x34($s0) -.L7F0A85AC: -/* 0DD0DC 7F0A85AC 0C0030C3 */ jal joyGetButtons -/* 0DD0E0 7F0A85B0 24050010 */ li $a1, 16 -/* 0DD0E4 7F0A85B4 10400005 */ beqz $v0, .L7F0A85CC -/* 0DD0E8 7F0A85B8 3C018006 */ lui $at, %hi(D_80058524) -/* 0DD0EC 7F0A85BC C60A0034 */ lwc1 $f10, 0x34($s0) -/* 0DD0F0 7F0A85C0 C4308524 */ lwc1 $f16, %lo(D_80058524)($at) -/* 0DD0F4 7F0A85C4 46105482 */ mul.s $f18, $f10, $f16 -/* 0DD0F8 7F0A85C8 E6120034 */ swc1 $f18, 0x34($s0) -.L7F0A85CC: -/* 0DD0FC 7F0A85CC 3C014120 */ li $at, 0x41200000 # 10.000000 -.L7F0A85D0: -/* 0DD100 7F0A85D0 44812000 */ mtc1 $at, $f4 -/* 0DD104 7F0A85D4 3C018006 */ lui $at, %hi(D_80058528) -/* 0DD108 7F0A85D8 C4268528 */ lwc1 $f6, %lo(D_80058528)($at) -/* 0DD10C 7F0A85DC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DD110 7F0A85E0 44814000 */ mtc1 $at, $f8 -/* 0DD114 7F0A85E4 3C073FAA */ lui $a3, (0x3FAAAAAB >> 16) # lui $a3, 0x3faa -/* 0DD118 7F0A85E8 34E7AAAB */ ori $a3, (0x3FAAAAAB & 0xFFFF) # ori $a3, $a3, 0xaaab -/* 0DD11C 7F0A85EC 8FA40924 */ lw $a0, 0x924($sp) -/* 0DD120 7F0A85F0 27A50922 */ addiu $a1, $sp, 0x922 -/* 0DD124 7F0A85F4 8FA60894 */ lw $a2, 0x894($sp) -/* 0DD128 7F0A85F8 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0DD12C 7F0A85FC E7A60014 */ swc1 $f6, 0x14($sp) -/* 0DD130 7F0A8600 0C003FAC */ jal guPerspective -/* 0DD134 7F0A8604 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0DD138 7F0A8608 8FA20928 */ lw $v0, 0x928($sp) -/* 0DD13C 7F0A860C 3C180103 */ lui $t8, (0x01030040 >> 16) # lui $t8, 0x103 -/* 0DD140 7F0A8610 37180040 */ ori $t8, (0x01030040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 0DD144 7F0A8614 00408025 */ move $s0, $v0 -/* 0DD148 7F0A8618 AE180000 */ sw $t8, ($s0) -/* 0DD14C 7F0A861C 24420008 */ addiu $v0, $v0, 8 -/* 0DD150 7F0A8620 AFA20928 */ sw $v0, 0x928($sp) -/* 0DD154 7F0A8624 0C003A2C */ jal osVirtualToPhysical -/* 0DD158 7F0A8628 8FA40924 */ lw $a0, 0x924($sp) -/* 0DD15C 7F0A862C AE020004 */ sw $v0, 4($s0) -/* 0DD160 7F0A8630 3C018006 */ lui $at, %hi(D_8005852C) -/* 0DD164 7F0A8634 C430852C */ lwc1 $f16, %lo(D_8005852C)($at) -/* 0DD168 7F0A8638 C7AA087C */ lwc1 $f10, 0x87c($sp) -/* 0DD16C 7F0A863C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DD170 7F0A8640 44812000 */ mtc1 $at, $f4 -/* 0DD174 7F0A8644 46105482 */ mul.s $f18, $f10, $f16 -/* 0DD178 7F0A8648 27A508E0 */ addiu $a1, $sp, 0x8e0 -/* 0DD17C 7F0A864C 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 0DD180 7F0A8650 46049303 */ div.s $f12, $f18, $f4 -/* 0DD184 7F0A8654 3C018006 */ lui $at, %hi(D_80058530) -/* 0DD188 7F0A8658 C4208530 */ lwc1 $f0, %lo(D_80058530)($at) -/* 0DD18C 7F0A865C C7A60880 */ lwc1 $f6, 0x880($sp) -/* 0DD190 7F0A8660 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DD194 7F0A8664 44815000 */ mtc1 $at, $f10 -/* 0DD198 7F0A8668 46003202 */ mul.s $f8, $f6, $f0 -/* 0DD19C 7F0A866C 27B008A0 */ addiu $s0, $sp, 0x8a0 -/* 0DD1A0 7F0A8670 02002825 */ move $a1, $s0 -/* 0DD1A4 7F0A8674 460A4403 */ div.s $f16, $f8, $f10 -/* 0DD1A8 7F0A8678 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 0DD1AC 7F0A867C 46100301 */ sub.s $f12, $f0, $f16 -/* 0DD1B0 7F0A8680 02002025 */ move $a0, $s0 -/* 0DD1B4 7F0A8684 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 0DD1B8 7F0A8688 27A508E0 */ addiu $a1, $sp, 0x8e0 -/* 0DD1BC 7F0A868C 3C018004 */ lui $at, %hi(D_80040B14) -/* 0DD1C0 7F0A8690 0FC15FA8 */ jal cosf -/* 0DD1C4 7F0A8694 C42C0B14 */ lwc1 $f12, %lo(D_80040B14)($at) -/* 0DD1C8 7F0A8698 C7B20888 */ lwc1 $f18, 0x888($sp) -/* 0DD1CC 7F0A869C 3C018004 */ lui $at, %hi(D_80040B14) -/* 0DD1D0 7F0A86A0 C42C0B14 */ lwc1 $f12, %lo(D_80040B14)($at) -/* 0DD1D4 7F0A86A4 46120102 */ mul.s $f4, $f0, $f18 -/* 0DD1D8 7F0A86A8 0FC15FAB */ jal sinf -/* 0DD1DC 7F0A86AC E7A4089C */ swc1 $f4, 0x89c($sp) -/* 0DD1E0 7F0A86B0 C7A60888 */ lwc1 $f6, 0x888($sp) -/* 0DD1E4 7F0A86B4 C7AE0890 */ lwc1 $f14, 0x890($sp) -/* 0DD1E8 7F0A86B8 44801000 */ mtc1 $zero, $f2 -/* 0DD1EC 7F0A86BC 46060202 */ mul.s $f8, $f0, $f6 -/* 0DD1F0 7F0A86C0 C7AC088C */ lwc1 $f12, 0x88c($sp) -/* 0DD1F4 7F0A86C4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DD1F8 7F0A86C8 44818000 */ mtc1 $at, $f16 -/* 0DD1FC 7F0A86CC 44066000 */ mfc1 $a2, $f12 -/* 0DD200 7F0A86D0 02002025 */ move $a0, $s0 -/* 0DD204 7F0A86D4 8FA5089C */ lw $a1, 0x89c($sp) -/* 0DD208 7F0A86D8 460E4280 */ add.s $f10, $f8, $f14 -/* 0DD20C 7F0A86DC E7AE0018 */ swc1 $f14, 0x18($sp) -/* 0DD210 7F0A86E0 E7A20010 */ swc1 $f2, 0x10($sp) -/* 0DD214 7F0A86E4 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 0DD218 7F0A86E8 44075000 */ mfc1 $a3, $f10 -/* 0DD21C 7F0A86EC E7A20024 */ swc1 $f2, 0x24($sp) -/* 0DD220 7F0A86F0 E7AC0014 */ swc1 $f12, 0x14($sp) -/* 0DD224 7F0A86F4 0FC165A5 */ jal matrix_4x4_set_lookat_target -/* 0DD228 7F0A86F8 E7B00020 */ swc1 $f16, 0x20($sp) -/* 0DD22C 7F0A86FC 02002025 */ move $a0, $s0 -/* 0DD230 7F0A8700 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 0DD234 7F0A8704 27A508E0 */ addiu $a1, $sp, 0x8e0 -/* 0DD238 7F0A8708 0FC29BBA */ jal sub_GAME_7F0A6EE8 -/* 0DD23C 7F0A870C 8FA40928 */ lw $a0, 0x928($sp) -/* 0DD240 7F0A8710 3C19A0FF */ lui $t9, (0xA0FFA03C >> 16) # lui $t9, 0xa0ff -/* 0DD244 7F0A8714 3739A03C */ ori $t9, (0xA0FFA03C & 0xFFFF) # ori $t9, $t9, 0xa03c -/* 0DD248 7F0A8718 AFB90010 */ sw $t9, 0x10($sp) -/* 0DD24C 7F0A871C 00402025 */ move $a0, $v0 -/* 0DD250 7F0A8720 8FA50884 */ lw $a1, 0x884($sp) -/* 0DD254 7F0A8724 27A608E0 */ addiu $a2, $sp, 0x8e0 -/* 0DD258 7F0A8728 0FC18C01 */ jal set_enviro_fog_for_items_in_solo_watch_menu -/* 0DD25C 7F0A872C 24070040 */ li $a3, 64 -/* 0DD260 7F0A8730 3C098004 */ lui $t1, %hi(ptrFontBankGothic) -/* 0DD264 7F0A8734 3C0A8004 */ lui $t2, %hi(ptrFontBankGothicChars) -/* 0DD268 7F0A8738 8D290EAC */ lw $t1, %lo(ptrFontBankGothic)($t1) -/* 0DD26C 7F0A873C 8D4A0EB0 */ lw $t2, %lo(ptrFontBankGothicChars)($t2) -/* 0DD270 7F0A8740 AFA20928 */ sw $v0, 0x928($sp) -/* 0DD274 7F0A8744 AFA00860 */ sw $zero, 0x860($sp) -/* 0DD278 7F0A8748 AFA0085C */ sw $zero, 0x85c($sp) -/* 0DD27C 7F0A874C A3A00084 */ sb $zero, 0x84($sp) -/* 0DD280 7F0A8750 00008025 */ move $s0, $zero -/* 0DD284 7F0A8754 AFA90858 */ sw $t1, 0x858($sp) -/* 0DD288 7F0A8758 0FC2340E */ jal bondinvCountTotalItemsInInv -/* 0DD28C 7F0A875C AFAA0854 */ sw $t2, 0x854($sp) -/* 0DD290 7F0A8760 1840000B */ blez $v0, .L7F0A8790 -/* 0DD294 7F0A8764 00000000 */ nop -.L7F0A8768: -/* 0DD298 7F0A8768 0FC234D0 */ jal bondinvGetNameByIndex -/* 0DD29C 7F0A876C 02002025 */ move $a0, $s0 -/* 0DD2A0 7F0A8770 27A40084 */ addiu $a0, $sp, 0x84 -/* 0DD2A4 7F0A8774 0C0029FF */ jal strcat -/* 0DD2A8 7F0A8778 00402825 */ move $a1, $v0 -/* 0DD2AC 7F0A877C 0FC2340E */ jal bondinvCountTotalItemsInInv -/* 0DD2B0 7F0A8780 26100001 */ addiu $s0, $s0, 1 -/* 0DD2B4 7F0A8784 0202082A */ slt $at, $s0, $v0 -/* 0DD2B8 7F0A8788 1420FFF7 */ bnez $at, .L7F0A8768 -/* 0DD2BC 7F0A878C 00000000 */ nop -.L7F0A8790: -/* 0DD2C0 7F0A8790 3C038004 */ lui $v1, %hi(D_800409C4) -/* 0DD2C4 7F0A8794 246309C4 */ addiu $v1, %lo(D_800409C4) # addiu $v1, $v1, 0x9c4 -/* 0DD2C8 7F0A8798 8C620000 */ lw $v0, ($v1) -/* 0DD2CC 7F0A879C 18400002 */ blez $v0, .L7F0A87A8 -/* 0DD2D0 7F0A87A0 244BFFFF */ addiu $t3, $v0, -1 -/* 0DD2D4 7F0A87A4 AC6B0000 */ sw $t3, ($v1) -.L7F0A87A8: -/* 0DD2D8 7F0A87A8 0FC296E0 */ jal sub_GAME_7F0A5B80 -/* 0DD2DC 7F0A87AC 00000000 */ nop -/* 0DD2E0 7F0A87B0 3C0E8005 */ lui $t6, %hi(j_text_trigger) -/* 0DD2E4 7F0A87B4 8DCE84D0 */ lw $t6, %lo(j_text_trigger)($t6) -/* 0DD2E8 7F0A87B8 240C004E */ li $t4, 78 -/* 0DD2EC 7F0A87BC 240D008C */ li $t5, 140 -/* 0DD2F0 7F0A87C0 AFAC0870 */ sw $t4, 0x870($sp) -/* 0DD2F4 7F0A87C4 11C00003 */ beqz $t6, .L7F0A87D4 -/* 0DD2F8 7F0A87C8 AFAD086C */ sw $t5, 0x86c($sp) -/* 0DD2FC 7F0A87CC 10000002 */ b .L7F0A87D8 -/* 0DD300 7F0A87D0 2402000E */ li $v0, 14 -.L7F0A87D4: -/* 0DD304 7F0A87D4 2402000C */ li $v0, 12 -.L7F0A87D8: -/* 0DD308 7F0A87D8 00028040 */ sll $s0, $v0, 1 -/* 0DD30C 7F0A87DC 2610008D */ addiu $s0, $s0, 0x8d -/* 0DD310 7F0A87E0 0FC2B366 */ jal microcode_constructor -/* 0DD314 7F0A87E4 8FA40928 */ lw $a0, 0x928($sp) -/* 0DD318 7F0A87E8 3C0F8005 */ lui $t7, %hi(j_text_trigger) -/* 0DD31C 7F0A87EC 8DEF84D0 */ lw $t7, %lo(j_text_trigger)($t7) -/* 0DD320 7F0A87F0 AFA20928 */ sw $v0, 0x928($sp) -/* 0DD324 7F0A87F4 27A40860 */ addiu $a0, $sp, 0x860 -/* 0DD328 7F0A87F8 11E00003 */ beqz $t7, .L7F0A8808 -/* 0DD32C 7F0A87FC 27A5085C */ addiu $a1, $sp, 0x85c -/* 0DD330 7F0A8800 10000002 */ b .L7F0A880C -/* 0DD334 7F0A8804 2402000E */ li $v0, 14 -.L7F0A8808: -/* 0DD338 7F0A8808 2402000C */ li $v0, 12 -.L7F0A880C: -/* 0DD33C 7F0A880C 8FB80858 */ lw $t8, 0x858($sp) -/* 0DD340 7F0A8810 27A60084 */ addiu $a2, $sp, 0x84 -/* 0DD344 7F0A8814 8FA70854 */ lw $a3, 0x854($sp) -/* 0DD348 7F0A8818 AFA20014 */ sw $v0, 0x14($sp) -/* 0DD34C 7F0A881C 0FC2BA63 */ jal textMeasure -/* 0DD350 7F0A8820 AFB80010 */ sw $t8, 0x10($sp) -/* 0DD354 7F0A8824 3C198005 */ lui $t9, %hi(j_text_trigger) -/* 0DD358 7F0A8828 8F3984D0 */ lw $t9, %lo(j_text_trigger)($t9) -/* 0DD35C 7F0A882C 8FA40928 */ lw $a0, 0x928($sp) -/* 0DD360 7F0A8830 2405004E */ li $a1, 78 -/* 0DD364 7F0A8834 13200003 */ beqz $t9, .L7F0A8844 -/* 0DD368 7F0A8838 2406008C */ li $a2, 140 -/* 0DD36C 7F0A883C 10000002 */ b .L7F0A8848 -/* 0DD370 7F0A8840 2402000E */ li $v0, 14 -.L7F0A8844: -/* 0DD374 7F0A8844 2402000C */ li $v0, 12 -.L7F0A8848: -/* 0DD378 7F0A8848 00024880 */ sll $t1, $v0, 2 -/* 0DD37C 7F0A884C 8FA7085C */ lw $a3, 0x85c($sp) -/* 0DD380 7F0A8850 01224821 */ addu $t1, $t1, $v0 -/* 0DD384 7F0A8854 252A008C */ addiu $t2, $t1, 0x8c -/* 0DD388 7F0A8858 AFAA0010 */ sw $t2, 0x10($sp) -/* 0DD38C 7F0A885C AFA00014 */ sw $zero, 0x14($sp) -/* 0DD390 7F0A8860 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0DD394 7F0A8864 24E7004E */ addiu $a3, $a3, 0x4e -/* 0DD398 7F0A8868 3C038005 */ lui $v1, %hi(j_text_trigger) -/* 0DD39C 7F0A886C 8C6384D0 */ lw $v1, %lo(j_text_trigger)($v1) -/* 0DD3A0 7F0A8870 00402025 */ move $a0, $v0 -/* 0DD3A4 7F0A8874 27A50870 */ addiu $a1, $sp, 0x870 -/* 0DD3A8 7F0A8878 10600003 */ beqz $v1, .L7F0A8888 -/* 0DD3AC 7F0A887C 27A6086C */ addiu $a2, $sp, 0x86c -/* 0DD3B0 7F0A8880 10000002 */ b .L7F0A888C -/* 0DD3B4 7F0A8884 2408000E */ li $t0, 14 -.L7F0A8888: -/* 0DD3B8 7F0A8888 2408000C */ li $t0, 12 -.L7F0A888C: -/* 0DD3BC 7F0A888C 10600003 */ beqz $v1, .L7F0A889C -/* 0DD3C0 7F0A8890 27A70084 */ addiu $a3, $sp, 0x84 -/* 0DD3C4 7F0A8894 10000002 */ b .L7F0A88A0 -/* 0DD3C8 7F0A8898 2402000E */ li $v0, 14 -.L7F0A889C: -/* 0DD3CC 7F0A889C 2402000C */ li $v0, 12 -.L7F0A88A0: -/* 0DD3D0 7F0A88A0 8FAE085C */ lw $t6, 0x85c($sp) -/* 0DD3D4 7F0A88A4 3C198004 */ lui $t9, %hi(D_800409B0) -/* 0DD3D8 7F0A88A8 8F3909B0 */ lw $t9, %lo(D_800409B0)($t9) -/* 0DD3DC 7F0A88AC 8FAB0854 */ lw $t3, 0x854($sp) -/* 0DD3E0 7F0A88B0 8FAC0858 */ lw $t4, 0x858($sp) -/* 0DD3E4 7F0A88B4 3C0D00AA */ lui $t5, (0x00AA00B0 >> 16) # lui $t5, 0xaa -/* 0DD3E8 7F0A88B8 0008C080 */ sll $t8, $t0, 2 -/* 0DD3EC 7F0A88BC 0308C021 */ addu $t8, $t8, $t0 -/* 0DD3F0 7F0A88C0 35AD00B0 */ ori $t5, (0x00AA00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0DD3F4 7F0A88C4 25CF0001 */ addiu $t7, $t6, 1 -/* 0DD3F8 7F0A88C8 AFAF001C */ sw $t7, 0x1c($sp) -/* 0DD3FC 7F0A88CC AFAD0018 */ sw $t5, 0x18($sp) -/* 0DD400 7F0A88D0 AFB80020 */ sw $t8, 0x20($sp) -/* 0DD404 7F0A88D4 AFA20028 */ sw $v0, 0x28($sp) -/* 0DD408 7F0A88D8 AFB90024 */ sw $t9, 0x24($sp) -/* 0DD40C 7F0A88DC AFAB0010 */ sw $t3, 0x10($sp) -/* 0DD410 7F0A88E0 0FC2B6AF */ jal textRender -/* 0DD414 7F0A88E4 AFAC0014 */ sw $t4, 0x14($sp) -/* 0DD418 7F0A88E8 3C098005 */ lui $t1, %hi(j_text_trigger) -/* 0DD41C 7F0A88EC 8D2984D0 */ lw $t1, %lo(j_text_trigger)($t1) -/* 0DD420 7F0A88F0 00402025 */ move $a0, $v0 -/* 0DD424 7F0A88F4 2405004B */ li $a1, 75 -/* 0DD428 7F0A88F8 11200003 */ beqz $t1, .L7F0A8908 -/* 0DD42C 7F0A88FC 02003025 */ move $a2, $s0 -/* 0DD430 7F0A8900 10000002 */ b .L7F0A890C -/* 0DD434 7F0A8904 2402000E */ li $v0, 14 -.L7F0A8908: -/* 0DD438 7F0A8908 2402000C */ li $v0, 12 -.L7F0A890C: -/* 0DD43C 7F0A890C 8FA7085C */ lw $a3, 0x85c($sp) -/* 0DD440 7F0A8910 00505021 */ addu $t2, $v0, $s0 -/* 0DD444 7F0A8914 3C0C0080 */ lui $t4, (0x00800050 >> 16) # lui $t4, 0x80 -/* 0DD448 7F0A8918 358C0050 */ ori $t4, (0x00800050 & 0xFFFF) # ori $t4, $t4, 0x50 -/* 0DD44C 7F0A891C 254BFFFE */ addiu $t3, $t2, -2 -/* 0DD450 7F0A8920 AFAB0010 */ sw $t3, 0x10($sp) -/* 0DD454 7F0A8924 AFAC0014 */ sw $t4, 0x14($sp) -/* 0DD458 7F0A8928 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0DD45C 7F0A892C 24E70052 */ addiu $a3, $a3, 0x52 -/* 0DD460 7F0A8930 3C0D8004 */ lui $t5, %hi(ptrFontBankGothicChars) -/* 0DD464 7F0A8934 8DAD0EB0 */ lw $t5, %lo(ptrFontBankGothicChars)($t5) -/* 0DD468 7F0A8938 3C108004 */ lui $s0, %hi(ptrFontBankGothic) -/* 0DD46C 7F0A893C 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) -/* 0DD470 7F0A8940 AFA20928 */ sw $v0, 0x928($sp) -/* 0DD474 7F0A8944 8E100EAC */ lw $s0, %lo(ptrFontBankGothic)($s0) -/* 0DD478 7F0A8948 8C8409B8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DD47C 7F0A894C 0FC234D0 */ jal bondinvGetNameByIndex -/* 0DD480 7F0A8950 AFAD0058 */ sw $t5, 0x58($sp) -/* 0DD484 7F0A8954 3C018004 */ lui $at, %hi(D_800409BC) -/* 0DD488 7F0A8958 C43209BC */ lwc1 $f18, %lo(D_800409BC)($at) -/* 0DD48C 7F0A895C 3C0E8004 */ lui $t6, %hi(g_curWatchItemIndex) -/* 0DD490 7F0A8960 8DCE09B8 */ lw $t6, %lo(g_curWatchItemIndex)($t6) -/* 0DD494 7F0A8964 46009121 */ cvt.d.s $f4, $f18 -/* 0DD498 7F0A8968 3C058005 */ lui $a1, %hi(aDDDF) -/* 0DD49C 7F0A896C 3C068004 */ lui $a2, %hi(D_800409B0) -/* 0DD4A0 7F0A8970 3C078004 */ lui $a3, %hi(D_800409B4) -/* 0DD4A4 7F0A8974 AFA2004C */ sw $v0, 0x4c($sp) -/* 0DD4A8 7F0A8978 8CE709B4 */ lw $a3, %lo(D_800409B4)($a3) -/* 0DD4AC 7F0A897C 8CC609B0 */ lw $a2, %lo(D_800409B0)($a2) -/* 0DD4B0 7F0A8980 24A57768 */ addiu $a1, %lo(aDDDF) # addiu $a1, $a1, 0x7768 -/* 0DD4B4 7F0A8984 F7A40018 */ sdc1 $f4, 0x18($sp) -/* 0DD4B8 7F0A8988 27A40060 */ addiu $a0, $sp, 0x60 -/* 0DD4BC 7F0A898C 0C002B25 */ jal sprintf -/* 0DD4C0 7F0A8990 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DD4C4 7F0A8994 0FC2B366 */ jal microcode_constructor -/* 0DD4C8 7F0A8998 8FA40928 */ lw $a0, 0x928($sp) -/* 0DD4CC 7F0A899C AFA20928 */ sw $v0, 0x928($sp) -/* 0DD4D0 7F0A89A0 27A40050 */ addiu $a0, $sp, 0x50 -/* 0DD4D4 7F0A89A4 27A50054 */ addiu $a1, $sp, 0x54 -/* 0DD4D8 7F0A89A8 27A60060 */ addiu $a2, $sp, 0x60 -/* 0DD4DC 7F0A89AC 8FA70058 */ lw $a3, 0x58($sp) -/* 0DD4E0 7F0A89B0 AFB00010 */ sw $s0, 0x10($sp) -/* 0DD4E4 7F0A89B4 0FC2BA63 */ jal textMeasure -/* 0DD4E8 7F0A89B8 AFA00014 */ sw $zero, 0x14($sp) -/* 0DD4EC 7F0A89BC 3C0F8004 */ lui $t7, %hi(D_800409C0) -/* 0DD4F0 7F0A89C0 8DEF09C0 */ lw $t7, %lo(D_800409C0)($t7) -/* 0DD4F4 7F0A89C4 3C188005 */ lui $t8, %hi(j_text_trigger) -/* 0DD4F8 7F0A89C8 27A40050 */ addiu $a0, $sp, 0x50 -/* 0DD4FC 7F0A89CC 11E0004B */ beqz $t7, .L7F0A8AFC -/* 0DD500 7F0A89D0 27A50054 */ addiu $a1, $sp, 0x54 -/* 0DD504 7F0A89D4 8F1884D0 */ lw $t8, %lo(j_text_trigger)($t8) -/* 0DD508 7F0A89D8 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DD50C 7F0A89DC 8FA70058 */ lw $a3, 0x58($sp) -/* 0DD510 7F0A89E0 13000003 */ beqz $t8, .L7F0A89F0 -/* 0DD514 7F0A89E4 2402000C */ li $v0, 12 -/* 0DD518 7F0A89E8 10000001 */ b .L7F0A89F0 -/* 0DD51C 7F0A89EC 2402000E */ li $v0, 14 -.L7F0A89F0: -/* 0DD520 7F0A89F0 AFB00010 */ sw $s0, 0x10($sp) -/* 0DD524 7F0A89F4 0FC2BA63 */ jal textMeasure -/* 0DD528 7F0A89F8 AFA20014 */ sw $v0, 0x14($sp) -/* 0DD52C 7F0A89FC 3C038005 */ lui $v1, %hi(j_text_trigger) -/* 0DD530 7F0A8A00 8C6384D0 */ lw $v1, %lo(j_text_trigger)($v1) -/* 0DD534 7F0A8A04 2419004E */ li $t9, 78 -/* 0DD538 7F0A8A08 AFB90870 */ sw $t9, 0x870($sp) -/* 0DD53C 7F0A8A0C 10600003 */ beqz $v1, .L7F0A8A1C -/* 0DD540 7F0A8A10 3C0B8004 */ lui $t3, %hi(D_800409C4) -/* 0DD544 7F0A8A14 10000002 */ b .L7F0A8A20 -/* 0DD548 7F0A8A18 2402000E */ li $v0, 14 -.L7F0A8A1C: -/* 0DD54C 7F0A8A1C 2402000C */ li $v0, 12 -.L7F0A8A20: -/* 0DD550 7F0A8A20 8D6B09C4 */ lw $t3, %lo(D_800409C4)($t3) -/* 0DD554 7F0A8A24 00024840 */ sll $t1, $v0, 1 -/* 0DD558 7F0A8A28 252A008C */ addiu $t2, $t1, 0x8c -/* 0DD55C 7F0A8A2C 15600018 */ bnez $t3, .L7F0A8A90 -/* 0DD560 7F0A8A30 AFAA086C */ sw $t2, 0x86c($sp) -/* 0DD564 7F0A8A34 10600003 */ beqz $v1, .L7F0A8A44 -/* 0DD568 7F0A8A38 8FA40928 */ lw $a0, 0x928($sp) -/* 0DD56C 7F0A8A3C 10000002 */ b .L7F0A8A48 -/* 0DD570 7F0A8A40 2402000E */ li $v0, 14 -.L7F0A8A44: -/* 0DD574 7F0A8A44 2402000C */ li $v0, 12 -.L7F0A8A48: -/* 0DD578 7F0A8A48 8FAC0058 */ lw $t4, 0x58($sp) -/* 0DD57C 7F0A8A4C 8FAE0054 */ lw $t6, 0x54($sp) -/* 0DD580 7F0A8A50 3C0DA0FF */ lui $t5, (0xA0FFA0F0 >> 16) # lui $t5, 0xa0ff -/* 0DD584 7F0A8A54 35ADA0F0 */ ori $t5, (0xA0FFA0F0 & 0xFFFF) # ori $t5, $t5, 0xa0f0 -/* 0DD588 7F0A8A58 240F0064 */ li $t7, 100 -/* 0DD58C 7F0A8A5C AFAF0020 */ sw $t7, 0x20($sp) -/* 0DD590 7F0A8A60 AFAD0018 */ sw $t5, 0x18($sp) -/* 0DD594 7F0A8A64 27A50870 */ addiu $a1, $sp, 0x870 -/* 0DD598 7F0A8A68 27A6086C */ addiu $a2, $sp, 0x86c -/* 0DD59C 7F0A8A6C 8FA7004C */ lw $a3, 0x4c($sp) -/* 0DD5A0 7F0A8A70 AFB00014 */ sw $s0, 0x14($sp) -/* 0DD5A4 7F0A8A74 AFA00024 */ sw $zero, 0x24($sp) -/* 0DD5A8 7F0A8A78 AFA20028 */ sw $v0, 0x28($sp) -/* 0DD5AC 7F0A8A7C AFAC0010 */ sw $t4, 0x10($sp) -/* 0DD5B0 7F0A8A80 0FC2B6AF */ jal textRender -/* 0DD5B4 7F0A8A84 AFAE001C */ sw $t6, 0x1c($sp) -/* 0DD5B8 7F0A8A88 1000001A */ b .L7F0A8AF4 -/* 0DD5BC 7F0A8A8C AFA20928 */ sw $v0, 0x928($sp) -.L7F0A8A90: -/* 0DD5C0 7F0A8A90 10600003 */ beqz $v1, .L7F0A8AA0 -/* 0DD5C4 7F0A8A94 8FA40928 */ lw $a0, 0x928($sp) -/* 0DD5C8 7F0A8A98 10000002 */ b .L7F0A8AA4 -/* 0DD5CC 7F0A8A9C 2402000E */ li $v0, 14 -.L7F0A8AA0: -/* 0DD5D0 7F0A8AA0 2402000C */ li $v0, 12 -.L7F0A8AA4: -/* 0DD5D4 7F0A8AA4 8FAA0054 */ lw $t2, 0x54($sp) -/* 0DD5D8 7F0A8AA8 8FB80058 */ lw $t8, 0x58($sp) -/* 0DD5DC 7F0A8AAC 3C090070 */ lui $t1, (0x007000A0 >> 16) # lui $t1, 0x70 -/* 0DD5E0 7F0A8AB0 352900A0 */ ori $t1, (0x007000A0 & 0xFFFF) # ori $t1, $t1, 0xa0 -/* 0DD5E4 7F0A8AB4 2419FFFF */ li $t9, -1 -/* 0DD5E8 7F0A8AB8 240C0064 */ li $t4, 100 -/* 0DD5EC 7F0A8ABC 254B0001 */ addiu $t3, $t2, 1 -/* 0DD5F0 7F0A8AC0 AFAB0020 */ sw $t3, 0x20($sp) -/* 0DD5F4 7F0A8AC4 AFAC0024 */ sw $t4, 0x24($sp) -/* 0DD5F8 7F0A8AC8 AFB90018 */ sw $t9, 0x18($sp) -/* 0DD5FC 7F0A8ACC AFA9001C */ sw $t1, 0x1c($sp) -/* 0DD600 7F0A8AD0 27A50870 */ addiu $a1, $sp, 0x870 -/* 0DD604 7F0A8AD4 27A6086C */ addiu $a2, $sp, 0x86c -/* 0DD608 7F0A8AD8 8FA7004C */ lw $a3, 0x4c($sp) -/* 0DD60C 7F0A8ADC AFB00014 */ sw $s0, 0x14($sp) -/* 0DD610 7F0A8AE0 AFA00028 */ sw $zero, 0x28($sp) -/* 0DD614 7F0A8AE4 AFA2002C */ sw $v0, 0x2c($sp) -/* 0DD618 7F0A8AE8 0FC2B9BB */ jal textRenderOutlined -/* 0DD61C 7F0A8AEC AFB80010 */ sw $t8, 0x10($sp) -/* 0DD620 7F0A8AF0 AFA20928 */ sw $v0, 0x928($sp) -.L7F0A8AF4: -/* 0DD624 7F0A8AF4 0FC2A0DE */ jal sub_GAME_7F0A8378 -/* 0DD628 7F0A8AF8 00000000 */ nop -.L7F0A8AFC: -/* 0DD62C 7F0A8AFC 8FBF003C */ lw $ra, 0x3c($sp) -.L7F0A8B00: -/* 0DD630 7F0A8B00 8FA20928 */ lw $v0, 0x928($sp) -/* 0DD634 7F0A8B04 8FB00038 */ lw $s0, 0x38($sp) -/* 0DD638 7F0A8B08 03E00008 */ jr $ra -/* 0DD63C 7F0A8B0C 27BD0928 */ addiu $sp, $sp, 0x928 -) -#endif - -#ifdef VERSION_JP -GLOBAL_ASM( -.text -glabel draw_watch_inventory_page -/* 0DDB2C 7F0A8FBC 27BDF6D0 */ addiu $sp, $sp, -0x930 -/* 0DDB30 7F0A8FC0 AFBF003C */ sw $ra, 0x3c($sp) -/* 0DDB34 7F0A8FC4 AFB00038 */ sw $s0, 0x38($sp) -/* 0DDB38 7F0A8FC8 0FC29F39 */ jal draw_background_health_and_armor -/* 0DDB3C 7F0A8FCC 00003025 */ move $a2, $zero -/* 0DDB40 7F0A8FD0 0FC1FB08 */ jal check_watch_page_transistion_running -/* 0DDB44 7F0A8FD4 AFA20930 */ sw $v0, 0x930($sp) -/* 0DDB48 7F0A8FD8 24010001 */ li $at, 1 -/* 0DDB4C 7F0A8FDC 504101B8 */ beql $v0, $at, .Ljp7F0A96C0 -/* 0DDB50 7F0A8FE0 8FBF003C */ lw $ra, 0x3c($sp) -/* 0DDB54 7F0A8FE4 0FC2F8A4 */ jal dynAllocateMatrix -/* 0DDB58 7F0A8FE8 00000000 */ nop -/* 0DDB5C 7F0A8FEC 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DDB60 7F0A8FF0 AFA2092C */ sw $v0, 0x92c($sp) -/* 0DDB64 7F0A8FF4 0FC237E4 */ jal bondinvGet45AngleForIndex -/* 0DDB68 7F0A8FF8 8C8409E8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DDB6C 7F0A8FFC 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DDB70 7F0A9000 E7A0089C */ swc1 $f0, 0x89c($sp) -/* 0DDB74 7F0A9004 0FC237EE */ jal bondinvGetHoffsetForIndex -/* 0DDB78 7F0A9008 8C8409E8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DDB7C 7F0A900C 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DDB80 7F0A9010 E7A00898 */ swc1 $f0, 0x898($sp) -/* 0DDB84 7F0A9014 0FC237F8 */ jal bondinvGetVoffsetForIndex -/* 0DDB88 7F0A9018 8C8409E8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DDB8C 7F0A901C 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DDB90 7F0A9020 E7A00894 */ swc1 $f0, 0x894($sp) -/* 0DDB94 7F0A9024 0FC23802 */ jal bondinvGetDepthForIndex -/* 0DDB98 7F0A9028 8C8409E8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DDB9C 7F0A902C 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DDBA0 7F0A9030 E7A00890 */ swc1 $f0, 0x890($sp) -/* 0DDBA4 7F0A9034 0FC23716 */ jal bondinvGetTextbyInvIndex -/* 0DDBA8 7F0A9038 8C8409E8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DDBAC 7F0A903C 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DDBB0 7F0A9040 AFA2088C */ sw $v0, 0x88c($sp) -/* 0DDBB4 7F0A9044 0FC238CE */ jal bondinvGetXrotWatchForIndex -/* 0DDBB8 7F0A9048 8C8409E8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DDBBC 7F0A904C 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DDBC0 7F0A9050 E7A00888 */ swc1 $f0, 0x888($sp) -/* 0DDBC4 7F0A9054 0FC238D8 */ jal bondinvGetYrotWatchForIndex -/* 0DDBC8 7F0A9058 8C8409E8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DDBCC 7F0A905C 0FC246CD */ jal get_debug_gunwatchpos_flag -/* 0DDBD0 7F0A9060 E7A00884 */ swc1 $f0, 0x884($sp) -/* 0DDBD4 7F0A9064 50400040 */ beql $v0, $zero, .Ljp7F0A9168 -/* 0DDBD8 7F0A9068 3C014120 */ lui $at, 0x4120 -/* 0DDBDC 7F0A906C 0FC177BC */ jal getCurrentPlayerWeaponId -/* 0DDBE0 7F0A9070 00002025 */ move $a0, $zero -/* 0DDBE4 7F0A9074 000270C0 */ sll $t6, $v0, 3 -/* 0DDBE8 7F0A9078 01C27023 */ subu $t6, $t6, $v0 -/* 0DDBEC 7F0A907C 3C0F8003 */ lui $t7, %hi(gitem_structs) # $t7, 0x8003 -/* 0DDBF0 7F0A9080 25EF3964 */ addiu $t7, %lo(gitem_structs) # addiu $t7, $t7, 0x3964 -/* 0DDBF4 7F0A9084 000E70C0 */ sll $t6, $t6, 3 -/* 0DDBF8 7F0A9088 01CF8021 */ addu $s0, $t6, $t7 -/* 0DDBFC 7F0A908C 00002025 */ move $a0, $zero -/* 0DDC00 7F0A9090 0C0030DC */ jal joyGetButtons -/* 0DDC04 7F0A9094 24050002 */ li $a1, 2 -/* 0DDC08 7F0A9098 10400006 */ beqz $v0, .Ljp7F0A90B4 -/* 0DDC0C 7F0A909C 00002025 */ move $a0, $zero -/* 0DDC10 7F0A90A0 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DDC14 7F0A90A4 44813000 */ mtc1 $at, $f6 -/* 0DDC18 7F0A90A8 C604002C */ lwc1 $f4, 0x2c($s0) -/* 0DDC1C 7F0A90AC 46062201 */ sub.s $f8, $f4, $f6 -/* 0DDC20 7F0A90B0 E608002C */ swc1 $f8, 0x2c($s0) -.Ljp7F0A90B4: -/* 0DDC24 7F0A90B4 0C0030DC */ jal joyGetButtons -/* 0DDC28 7F0A90B8 24050001 */ li $a1, 1 -/* 0DDC2C 7F0A90BC 10400006 */ beqz $v0, .Ljp7F0A90D8 -/* 0DDC30 7F0A90C0 00002025 */ move $a0, $zero -/* 0DDC34 7F0A90C4 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DDC38 7F0A90C8 44818000 */ mtc1 $at, $f16 -/* 0DDC3C 7F0A90CC C60A002C */ lwc1 $f10, 0x2c($s0) -/* 0DDC40 7F0A90D0 46105480 */ add.s $f18, $f10, $f16 -/* 0DDC44 7F0A90D4 E612002C */ swc1 $f18, 0x2c($s0) -.Ljp7F0A90D8: -/* 0DDC48 7F0A90D8 0C0030DC */ jal joyGetButtons -/* 0DDC4C 7F0A90DC 24050004 */ li $a1, 4 -/* 0DDC50 7F0A90E0 10400006 */ beqz $v0, .Ljp7F0A90FC -/* 0DDC54 7F0A90E4 00002025 */ move $a0, $zero -/* 0DDC58 7F0A90E8 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DDC5C 7F0A90EC 44813000 */ mtc1 $at, $f6 -/* 0DDC60 7F0A90F0 C6040030 */ lwc1 $f4, 0x30($s0) -/* 0DDC64 7F0A90F4 46062200 */ add.s $f8, $f4, $f6 -/* 0DDC68 7F0A90F8 E6080030 */ swc1 $f8, 0x30($s0) -.Ljp7F0A90FC: -/* 0DDC6C 7F0A90FC 0C0030DC */ jal joyGetButtons -/* 0DDC70 7F0A9100 24050008 */ li $a1, 8 -/* 0DDC74 7F0A9104 10400006 */ beqz $v0, .Ljp7F0A9120 -/* 0DDC78 7F0A9108 00002025 */ move $a0, $zero -/* 0DDC7C 7F0A910C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DDC80 7F0A9110 44818000 */ mtc1 $at, $f16 -/* 0DDC84 7F0A9114 C60A0030 */ lwc1 $f10, 0x30($s0) -/* 0DDC88 7F0A9118 46105481 */ sub.s $f18, $f10, $f16 -/* 0DDC8C 7F0A911C E6120030 */ swc1 $f18, 0x30($s0) -.Ljp7F0A9120: -/* 0DDC90 7F0A9120 0C0030DC */ jal joyGetButtons -/* 0DDC94 7F0A9124 24050020 */ li $a1, 32 -/* 0DDC98 7F0A9128 10400006 */ beqz $v0, .Ljp7F0A9144 -/* 0DDC9C 7F0A912C 00002025 */ move $a0, $zero -/* 0DDCA0 7F0A9130 3C018006 */ lui $at, %hi(D_80058520) # $at, 0x8006 -/* 0DDCA4 7F0A9134 C4268560 */ lwc1 $f6, %lo(D_80058520)($at) -/* 0DDCA8 7F0A9138 C6040034 */ lwc1 $f4, 0x34($s0) -/* 0DDCAC 7F0A913C 46062202 */ mul.s $f8, $f4, $f6 -/* 0DDCB0 7F0A9140 E6080034 */ swc1 $f8, 0x34($s0) -.Ljp7F0A9144: -/* 0DDCB4 7F0A9144 0C0030DC */ jal joyGetButtons -/* 0DDCB8 7F0A9148 24050010 */ li $a1, 16 -/* 0DDCBC 7F0A914C 10400005 */ beqz $v0, .Ljp7F0A9164 -/* 0DDCC0 7F0A9150 3C018006 */ lui $at, %hi(D_80058524) # $at, 0x8006 -/* 0DDCC4 7F0A9154 C60A0034 */ lwc1 $f10, 0x34($s0) -/* 0DDCC8 7F0A9158 C4308564 */ lwc1 $f16, %lo(D_80058524)($at) -/* 0DDCCC 7F0A915C 46105482 */ mul.s $f18, $f10, $f16 -/* 0DDCD0 7F0A9160 E6120034 */ swc1 $f18, 0x34($s0) -.Ljp7F0A9164: -/* 0DDCD4 7F0A9164 3C014120 */ li $at, 0x41200000 # 10.000000 -.Ljp7F0A9168: -/* 0DDCD8 7F0A9168 44812000 */ mtc1 $at, $f4 -/* 0DDCDC 7F0A916C 3C018006 */ lui $at, %hi(D_80058528) # $at, 0x8006 -/* 0DDCE0 7F0A9170 C4268568 */ lwc1 $f6, %lo(D_80058528)($at) -/* 0DDCE4 7F0A9174 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DDCE8 7F0A9178 44814000 */ mtc1 $at, $f8 -/* 0DDCEC 7F0A917C 3C073FAA */ lui $a3, (0x3FAAAAAB >> 16) # lui $a3, 0x3faa -/* 0DDCF0 7F0A9180 34E7AAAB */ ori $a3, (0x3FAAAAAB & 0xFFFF) # ori $a3, $a3, 0xaaab -/* 0DDCF4 7F0A9184 8FA4092C */ lw $a0, 0x92c($sp) -/* 0DDCF8 7F0A9188 27A5092A */ addiu $a1, $sp, 0x92a -/* 0DDCFC 7F0A918C 8FA6089C */ lw $a2, 0x89c($sp) -/* 0DDD00 7F0A9190 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0DDD04 7F0A9194 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0DDD08 7F0A9198 0C003FBC */ jal guPerspective -/* 0DDD0C 7F0A919C E7A80018 */ swc1 $f8, 0x18($sp) -/* 0DDD10 7F0A91A0 8FA20930 */ lw $v0, 0x930($sp) -/* 0DDD14 7F0A91A4 3C180103 */ lui $t8, (0x01030040 >> 16) # lui $t8, 0x103 -/* 0DDD18 7F0A91A8 37180040 */ ori $t8, (0x01030040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 0DDD1C 7F0A91AC 00408025 */ move $s0, $v0 -/* 0DDD20 7F0A91B0 AE180000 */ sw $t8, ($s0) -/* 0DDD24 7F0A91B4 24420008 */ addiu $v0, $v0, 8 -/* 0DDD28 7F0A91B8 AFA20930 */ sw $v0, 0x930($sp) -/* 0DDD2C 7F0A91BC 0C003A3C */ jal osVirtualToPhysical -/* 0DDD30 7F0A91C0 8FA4092C */ lw $a0, 0x92c($sp) -/* 0DDD34 7F0A91C4 AE020004 */ sw $v0, 4($s0) -/* 0DDD38 7F0A91C8 3C018006 */ lui $at, %hi(D_8005852C) # $at, 0x8006 -/* 0DDD3C 7F0A91CC C430856C */ lwc1 $f16, %lo(D_8005852C)($at) -/* 0DDD40 7F0A91D0 C7AA0884 */ lwc1 $f10, 0x884($sp) -/* 0DDD44 7F0A91D4 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DDD48 7F0A91D8 44812000 */ mtc1 $at, $f4 -/* 0DDD4C 7F0A91DC 46105482 */ mul.s $f18, $f10, $f16 -/* 0DDD50 7F0A91E0 27A508E8 */ addiu $a1, $sp, 0x8e8 -/* 0DDD54 7F0A91E4 0FC162C7 */ jal matrix_4x4_set_rotation_around_y -/* 0DDD58 7F0A91E8 46049303 */ div.s $f12, $f18, $f4 -/* 0DDD5C 7F0A91EC 3C018006 */ lui $at, %hi(D_80058530) # $at, 0x8006 -/* 0DDD60 7F0A91F0 C4208570 */ lwc1 $f0, %lo(D_80058530)($at) -/* 0DDD64 7F0A91F4 C7A60888 */ lwc1 $f6, 0x888($sp) -/* 0DDD68 7F0A91F8 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DDD6C 7F0A91FC 44815000 */ mtc1 $at, $f10 -/* 0DDD70 7F0A9200 46003202 */ mul.s $f8, $f6, $f0 -/* 0DDD74 7F0A9204 27B008A8 */ addiu $s0, $sp, 0x8a8 -/* 0DDD78 7F0A9208 02002825 */ move $a1, $s0 -/* 0DDD7C 7F0A920C 460A4403 */ div.s $f16, $f8, $f10 -/* 0DDD80 7F0A9210 0FC162EA */ jal matrix_4x4_set_rotation_around_z -/* 0DDD84 7F0A9214 46100301 */ sub.s $f12, $f0, $f16 -/* 0DDD88 7F0A9218 02002025 */ move $a0, $s0 -/* 0DDD8C 7F0A921C 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 0DDD90 7F0A9220 27A508E8 */ addiu $a1, $sp, 0x8e8 -/* 0DDD94 7F0A9224 3C018004 */ lui $at, %hi(D_80040B14) # $at, 0x8004 -/* 0DDD98 7F0A9228 0FC160F0 */ jal cosf -/* 0DDD9C 7F0A922C C42C0B44 */ lwc1 $f12, %lo(D_80040B14)($at) -/* 0DDDA0 7F0A9230 C7B20890 */ lwc1 $f18, 0x890($sp) -/* 0DDDA4 7F0A9234 3C018004 */ lui $at, %hi(D_80040B14) # $at, 0x8004 -/* 0DDDA8 7F0A9238 C42C0B44 */ lwc1 $f12, %lo(D_80040B14)($at) -/* 0DDDAC 7F0A923C 46120102 */ mul.s $f4, $f0, $f18 -/* 0DDDB0 7F0A9240 0FC160F3 */ jal sinf -/* 0DDDB4 7F0A9244 E7A408A4 */ swc1 $f4, 0x8a4($sp) -/* 0DDDB8 7F0A9248 C7A60890 */ lwc1 $f6, 0x890($sp) -/* 0DDDBC 7F0A924C C7AE0898 */ lwc1 $f14, 0x898($sp) -/* 0DDDC0 7F0A9250 44801000 */ mtc1 $zero, $f2 -/* 0DDDC4 7F0A9254 46060202 */ mul.s $f8, $f0, $f6 -/* 0DDDC8 7F0A9258 C7AC0894 */ lwc1 $f12, 0x894($sp) -/* 0DDDCC 7F0A925C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DDDD0 7F0A9260 44818000 */ mtc1 $at, $f16 -/* 0DDDD4 7F0A9264 44066000 */ mfc1 $a2, $f12 -/* 0DDDD8 7F0A9268 02002025 */ move $a0, $s0 -/* 0DDDDC 7F0A926C 8FA508A4 */ lw $a1, 0x8a4($sp) -/* 0DDDE0 7F0A9270 460E4280 */ add.s $f10, $f8, $f14 -/* 0DDDE4 7F0A9274 E7AE0018 */ swc1 $f14, 0x18($sp) -/* 0DDDE8 7F0A9278 E7A20010 */ swc1 $f2, 0x10($sp) -/* 0DDDEC 7F0A927C E7A2001C */ swc1 $f2, 0x1c($sp) -/* 0DDDF0 7F0A9280 44075000 */ mfc1 $a3, $f10 -/* 0DDDF4 7F0A9284 E7A20024 */ swc1 $f2, 0x24($sp) -/* 0DDDF8 7F0A9288 E7AC0014 */ swc1 $f12, 0x14($sp) -/* 0DDDFC 7F0A928C 0FC166ED */ jal matrix_4x4_set_lookat_target -/* 0DDE00 7F0A9290 E7B00020 */ swc1 $f16, 0x20($sp) -/* 0DDE04 7F0A9294 02002025 */ move $a0, $s0 -/* 0DDE08 7F0A9298 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 0DDE0C 7F0A929C 27A508E8 */ addiu $a1, $sp, 0x8e8 -/* 0DDE10 7F0A92A0 0FC29EA0 */ jal sub_GAME_7F0A6EE8 -/* 0DDE14 7F0A92A4 8FA40930 */ lw $a0, 0x930($sp) -/* 0DDE18 7F0A92A8 3C19A0FF */ lui $t9, (0xA0FFA03C >> 16) # lui $t9, 0xa0ff -/* 0DDE1C 7F0A92AC 3739A03C */ ori $t9, (0xA0FFA03C & 0xFFFF) # ori $t9, $t9, 0xa03c -/* 0DDE20 7F0A92B0 AFB90010 */ sw $t9, 0x10($sp) -/* 0DDE24 7F0A92B4 00402025 */ move $a0, $v0 -/* 0DDE28 7F0A92B8 8FA5088C */ lw $a1, 0x88c($sp) -/* 0DDE2C 7F0A92BC 27A608E8 */ addiu $a2, $sp, 0x8e8 -/* 0DDE30 7F0A92C0 0FC18D4C */ jal set_enviro_fog_for_items_in_solo_watch_menu -/* 0DDE34 7F0A92C4 24070040 */ li $a3, 64 -/* 0DDE38 7F0A92C8 3C0B8005 */ lui $t3, %hi(j_text_trigger) # $t3, 0x8005 -/* 0DDE3C 7F0A92CC 8D6B8500 */ lw $t3, %lo(j_text_trigger)($t3) -/* 0DDE40 7F0A92D0 3C098004 */ lui $t1, %hi(ptrFontBankGothic) # $t1, 0x8004 -/* 0DDE44 7F0A92D4 3C0A8004 */ lui $t2, %hi(ptrFontBankGothicChars) # $t2, 0x8004 -/* 0DDE48 7F0A92D8 8D290EDC */ lw $t1, %lo(ptrFontBankGothic)($t1) -/* 0DDE4C 7F0A92DC 8D4A0EE0 */ lw $t2, %lo(ptrFontBankGothicChars)($t2) -/* 0DDE50 7F0A92E0 AFA20930 */ sw $v0, 0x930($sp) -/* 0DDE54 7F0A92E4 AFA00868 */ sw $zero, 0x868($sp) -/* 0DDE58 7F0A92E8 AFA00864 */ sw $zero, 0x864($sp) -/* 0DDE5C 7F0A92EC AFA90860 */ sw $t1, 0x860($sp) -/* 0DDE60 7F0A92F0 11600004 */ beqz $t3, .Ljp7F0A9304 -/* 0DDE64 7F0A92F4 AFAA085C */ sw $t2, 0x85c($sp) -/* 0DDE68 7F0A92F8 240C0082 */ li $t4, 130 -/* 0DDE6C 7F0A92FC 10000003 */ b .Ljp7F0A930C -/* 0DDE70 7F0A9300 AFAC0084 */ sw $t4, 0x84($sp) -.Ljp7F0A9304: -/* 0DDE74 7F0A9304 240D008C */ li $t5, 140 -/* 0DDE78 7F0A9308 AFAD0084 */ sw $t5, 0x84($sp) -.Ljp7F0A930C: -/* 0DDE7C 7F0A930C A3A0008C */ sb $zero, 0x8c($sp) -/* 0DDE80 7F0A9310 0FC23667 */ jal bondinvCountTotalItemsInInv -/* 0DDE84 7F0A9314 00008025 */ move $s0, $zero -/* 0DDE88 7F0A9318 1840000B */ blez $v0, .Ljp7F0A9348 -/* 0DDE8C 7F0A931C 00000000 */ nop -.Ljp7F0A9320: -/* 0DDE90 7F0A9320 0FC2374A */ jal bondinvGetNameByIndex -/* 0DDE94 7F0A9324 02002025 */ move $a0, $s0 -/* 0DDE98 7F0A9328 27A4008C */ addiu $a0, $sp, 0x8c -/* 0DDE9C 7F0A932C 0C002A03 */ jal strcat -/* 0DDEA0 7F0A9330 00402825 */ move $a1, $v0 -/* 0DDEA4 7F0A9334 0FC23667 */ jal bondinvCountTotalItemsInInv -/* 0DDEA8 7F0A9338 26100001 */ addiu $s0, $s0, 1 -/* 0DDEAC 7F0A933C 0202082A */ slt $at, $s0, $v0 -/* 0DDEB0 7F0A9340 1420FFF7 */ bnez $at, .Ljp7F0A9320 -/* 0DDEB4 7F0A9344 00000000 */ nop -.Ljp7F0A9348: -/* 0DDEB8 7F0A9348 3C038004 */ lui $v1, %hi(D_800409C4) # $v1, 0x8004 -/* 0DDEBC 7F0A934C 246309F4 */ addiu $v1, %lo(D_800409C4) # addiu $v1, $v1, 0x9f4 -/* 0DDEC0 7F0A9350 8C620000 */ lw $v0, ($v1) -/* 0DDEC4 7F0A9354 18400002 */ blez $v0, .Ljp7F0A9360 -/* 0DDEC8 7F0A9358 244EFFFF */ addiu $t6, $v0, -1 -/* 0DDECC 7F0A935C AC6E0000 */ sw $t6, ($v1) -.Ljp7F0A9360: -/* 0DDED0 7F0A9360 0FC299C8 */ jal sub_GAME_7F0A5B80 -/* 0DDED4 7F0A9364 00000000 */ nop -/* 0DDED8 7F0A9368 3C188005 */ lui $t8, %hi(j_text_trigger) # $t8, 0x8005 -/* 0DDEDC 7F0A936C 8F188500 */ lw $t8, %lo(j_text_trigger)($t8) -/* 0DDEE0 7F0A9370 8FA30084 */ lw $v1, 0x84($sp) -/* 0DDEE4 7F0A9374 240F004E */ li $t7, 78 -/* 0DDEE8 7F0A9378 AFAF0878 */ sw $t7, 0x878($sp) -/* 0DDEEC 7F0A937C 13000003 */ beqz $t8, .Ljp7F0A938C -/* 0DDEF0 7F0A9380 AFA30874 */ sw $v1, 0x874($sp) -/* 0DDEF4 7F0A9384 10000002 */ b .Ljp7F0A9390 -/* 0DDEF8 7F0A9388 2402000E */ li $v0, 14 -.Ljp7F0A938C: -/* 0DDEFC 7F0A938C 2402000C */ li $v0, 12 -.Ljp7F0A9390: -/* 0DDF00 7F0A9390 0002C840 */ sll $t9, $v0, 1 -/* 0DDF04 7F0A9394 03238021 */ addu $s0, $t9, $v1 -/* 0DDF08 7F0A9398 26100001 */ addiu $s0, $s0, 1 -/* 0DDF0C 7F0A939C 0FC2B652 */ jal microcode_constructor -/* 0DDF10 7F0A93A0 8FA40930 */ lw $a0, 0x930($sp) -/* 0DDF14 7F0A93A4 3C098005 */ lui $t1, %hi(j_text_trigger) # $t1, 0x8005 -/* 0DDF18 7F0A93A8 8D298500 */ lw $t1, %lo(j_text_trigger)($t1) -/* 0DDF1C 7F0A93AC AFA20930 */ sw $v0, 0x930($sp) -/* 0DDF20 7F0A93B0 27A40868 */ addiu $a0, $sp, 0x868 -/* 0DDF24 7F0A93B4 11200003 */ beqz $t1, .Ljp7F0A93C4 -/* 0DDF28 7F0A93B8 27A50864 */ addiu $a1, $sp, 0x864 -/* 0DDF2C 7F0A93BC 10000002 */ b .Ljp7F0A93C8 -/* 0DDF30 7F0A93C0 2402000E */ li $v0, 14 -.Ljp7F0A93C4: -/* 0DDF34 7F0A93C4 2402000C */ li $v0, 12 -.Ljp7F0A93C8: -/* 0DDF38 7F0A93C8 8FAA0860 */ lw $t2, 0x860($sp) -/* 0DDF3C 7F0A93CC 27A6008C */ addiu $a2, $sp, 0x8c -/* 0DDF40 7F0A93D0 8FA7085C */ lw $a3, 0x85c($sp) -/* 0DDF44 7F0A93D4 AFA20014 */ sw $v0, 0x14($sp) -/* 0DDF48 7F0A93D8 0FC2BD4F */ jal textMeasure -/* 0DDF4C 7F0A93DC AFAA0010 */ sw $t2, 0x10($sp) -/* 0DDF50 7F0A93E0 3C0B8005 */ lui $t3, %hi(j_text_trigger) # $t3, 0x8005 -/* 0DDF54 7F0A93E4 8D6B8500 */ lw $t3, %lo(j_text_trigger)($t3) -/* 0DDF58 7F0A93E8 8FA60084 */ lw $a2, 0x84($sp) -/* 0DDF5C 7F0A93EC 8FA40930 */ lw $a0, 0x930($sp) -/* 0DDF60 7F0A93F0 11600003 */ beqz $t3, .Ljp7F0A9400 -/* 0DDF64 7F0A93F4 2405004E */ li $a1, 78 -/* 0DDF68 7F0A93F8 10000002 */ b .Ljp7F0A9404 -/* 0DDF6C 7F0A93FC 2402000E */ li $v0, 14 -.Ljp7F0A9400: -/* 0DDF70 7F0A9400 2402000C */ li $v0, 12 -.Ljp7F0A9404: -/* 0DDF74 7F0A9404 00026080 */ sll $t4, $v0, 2 -/* 0DDF78 7F0A9408 8FA70864 */ lw $a3, 0x864($sp) -/* 0DDF7C 7F0A940C 01826021 */ addu $t4, $t4, $v0 -/* 0DDF80 7F0A9410 01866821 */ addu $t5, $t4, $a2 -/* 0DDF84 7F0A9414 AFAD0010 */ sw $t5, 0x10($sp) -/* 0DDF88 7F0A9418 AFA00014 */ sw $zero, 0x14($sp) -/* 0DDF8C 7F0A941C 0FC2B6F1 */ jal microcode_constructor_related_to_menus -/* 0DDF90 7F0A9420 24E7004E */ addiu $a3, $a3, 0x4e -/* 0DDF94 7F0A9424 3C038005 */ lui $v1, %hi(j_text_trigger) # $v1, 0x8005 -/* 0DDF98 7F0A9428 8C638500 */ lw $v1, %lo(j_text_trigger)($v1) -/* 0DDF9C 7F0A942C 00402025 */ move $a0, $v0 -/* 0DDFA0 7F0A9430 27A50878 */ addiu $a1, $sp, 0x878 -/* 0DDFA4 7F0A9434 10600003 */ beqz $v1, .Ljp7F0A9444 -/* 0DDFA8 7F0A9438 27A60874 */ addiu $a2, $sp, 0x874 -/* 0DDFAC 7F0A943C 10000002 */ b .Ljp7F0A9448 -/* 0DDFB0 7F0A9440 2408000E */ li $t0, 14 -.Ljp7F0A9444: -/* 0DDFB4 7F0A9444 2408000C */ li $t0, 12 -.Ljp7F0A9448: -/* 0DDFB8 7F0A9448 10600003 */ beqz $v1, .Ljp7F0A9458 -/* 0DDFBC 7F0A944C 27A7008C */ addiu $a3, $sp, 0x8c -/* 0DDFC0 7F0A9450 10000002 */ b .Ljp7F0A945C -/* 0DDFC4 7F0A9454 2402000E */ li $v0, 14 -.Ljp7F0A9458: -/* 0DDFC8 7F0A9458 2402000C */ li $v0, 12 -.Ljp7F0A945C: -/* 0DDFCC 7F0A945C 8FB90864 */ lw $t9, 0x864($sp) -/* 0DDFD0 7F0A9460 3C0B8004 */ lui $t3, %hi(D_800409B0) # $t3, 0x8004 -/* 0DDFD4 7F0A9464 8D6B09E0 */ lw $t3, %lo(D_800409B0)($t3) -/* 0DDFD8 7F0A9468 8FAE085C */ lw $t6, 0x85c($sp) -/* 0DDFDC 7F0A946C 8FAF0860 */ lw $t7, 0x860($sp) -/* 0DDFE0 7F0A9470 3C1800AA */ lui $t8, (0x00AA00B0 >> 16) # lui $t8, 0xaa -/* 0DDFE4 7F0A9474 00085080 */ sll $t2, $t0, 2 -/* 0DDFE8 7F0A9478 01485021 */ addu $t2, $t2, $t0 -/* 0DDFEC 7F0A947C 371800B0 */ ori $t8, (0x00AA00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0DDFF0 7F0A9480 27290001 */ addiu $t1, $t9, 1 -/* 0DDFF4 7F0A9484 AFA9001C */ sw $t1, 0x1c($sp) -/* 0DDFF8 7F0A9488 AFB80018 */ sw $t8, 0x18($sp) -/* 0DDFFC 7F0A948C AFAA0020 */ sw $t2, 0x20($sp) -/* 0DE000 7F0A9490 AFA20028 */ sw $v0, 0x28($sp) -/* 0DE004 7F0A9494 AFAB0024 */ sw $t3, 0x24($sp) -/* 0DE008 7F0A9498 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DE00C 7F0A949C 0FC2B99B */ jal textRender -/* 0DE010 7F0A94A0 AFAF0014 */ sw $t7, 0x14($sp) -/* 0DE014 7F0A94A4 3C0C8005 */ lui $t4, %hi(j_text_trigger) # $t4, 0x8005 -/* 0DE018 7F0A94A8 8D8C8500 */ lw $t4, %lo(j_text_trigger)($t4) -/* 0DE01C 7F0A94AC 00402025 */ move $a0, $v0 -/* 0DE020 7F0A94B0 2405004B */ li $a1, 75 -/* 0DE024 7F0A94B4 11800003 */ beqz $t4, .Ljp7F0A94C4 -/* 0DE028 7F0A94B8 02003025 */ move $a2, $s0 -/* 0DE02C 7F0A94BC 10000002 */ b .Ljp7F0A94C8 -/* 0DE030 7F0A94C0 2402000E */ li $v0, 14 -.Ljp7F0A94C4: -/* 0DE034 7F0A94C4 2402000C */ li $v0, 12 -.Ljp7F0A94C8: -/* 0DE038 7F0A94C8 8FA70864 */ lw $a3, 0x864($sp) -/* 0DE03C 7F0A94CC 00506821 */ addu $t5, $v0, $s0 -/* 0DE040 7F0A94D0 3C0F0080 */ lui $t7, (0x00800050 >> 16) # lui $t7, 0x80 -/* 0DE044 7F0A94D4 35EF0050 */ ori $t7, (0x00800050 & 0xFFFF) # ori $t7, $t7, 0x50 -/* 0DE048 7F0A94D8 25AEFFFE */ addiu $t6, $t5, -2 -/* 0DE04C 7F0A94DC AFAE0010 */ sw $t6, 0x10($sp) -/* 0DE050 7F0A94E0 AFAF0014 */ sw $t7, 0x14($sp) -/* 0DE054 7F0A94E4 0FC2B6F1 */ jal microcode_constructor_related_to_menus -/* 0DE058 7F0A94E8 24E70052 */ addiu $a3, $a3, 0x52 -/* 0DE05C 7F0A94EC 3C188004 */ lui $t8, %hi(ptrFontBankGothicChars) # $t8, 0x8004 -/* 0DE060 7F0A94F0 8F180EE0 */ lw $t8, %lo(ptrFontBankGothicChars)($t8) -/* 0DE064 7F0A94F4 3C108004 */ lui $s0, %hi(ptrFontBankGothic) # $s0, 0x8004 -/* 0DE068 7F0A94F8 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DE06C 7F0A94FC AFA20930 */ sw $v0, 0x930($sp) -/* 0DE070 7F0A9500 8E100EDC */ lw $s0, %lo(ptrFontBankGothic)($s0) -/* 0DE074 7F0A9504 8C8409E8 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DE078 7F0A9508 0FC2374A */ jal bondinvGetNameByIndex -/* 0DE07C 7F0A950C AFB8005C */ sw $t8, 0x5c($sp) -/* 0DE080 7F0A9510 3C018004 */ lui $at, %hi(D_800409BC) # $at, 0x8004 -/* 0DE084 7F0A9514 C43209EC */ lwc1 $f18, %lo(D_800409BC)($at) -/* 0DE088 7F0A9518 3C198004 */ lui $t9, %hi(g_curWatchItemIndex) # $t9, 0x8004 -/* 0DE08C 7F0A951C 8F3909E8 */ lw $t9, %lo(g_curWatchItemIndex)($t9) -/* 0DE090 7F0A9520 46009121 */ cvt.d.s $f4, $f18 -/* 0DE094 7F0A9524 3C058005 */ lui $a1, %hi(aDDDF) # $a1, 0x8005 -/* 0DE098 7F0A9528 3C068004 */ lui $a2, %hi(D_800409B0) # $a2, 0x8004 -/* 0DE09C 7F0A952C 3C078004 */ lui $a3, %hi(D_800409B4) # $a3, 0x8004 -/* 0DE0A0 7F0A9530 AFA20050 */ sw $v0, 0x50($sp) -/* 0DE0A4 7F0A9534 8CE709E4 */ lw $a3, %lo(D_800409B4)($a3) -/* 0DE0A8 7F0A9538 8CC609E0 */ lw $a2, %lo(D_800409B0)($a2) -/* 0DE0AC 7F0A953C 24A577A8 */ addiu $a1, %lo(aDDDF) # addiu $a1, $a1, 0x77a8 -/* 0DE0B0 7F0A9540 F7A40018 */ sdc1 $f4, 0x18($sp) -/* 0DE0B4 7F0A9544 27A40064 */ addiu $a0, $sp, 0x64 -/* 0DE0B8 7F0A9548 0C002B29 */ jal sprintf -/* 0DE0BC 7F0A954C AFB90010 */ sw $t9, 0x10($sp) -/* 0DE0C0 7F0A9550 0FC2B652 */ jal microcode_constructor -/* 0DE0C4 7F0A9554 8FA40930 */ lw $a0, 0x930($sp) -/* 0DE0C8 7F0A9558 AFA20930 */ sw $v0, 0x930($sp) -/* 0DE0CC 7F0A955C 27A40054 */ addiu $a0, $sp, 0x54 -/* 0DE0D0 7F0A9560 27A50058 */ addiu $a1, $sp, 0x58 -/* 0DE0D4 7F0A9564 27A60064 */ addiu $a2, $sp, 0x64 -/* 0DE0D8 7F0A9568 8FA7005C */ lw $a3, 0x5c($sp) -/* 0DE0DC 7F0A956C AFB00010 */ sw $s0, 0x10($sp) -/* 0DE0E0 7F0A9570 0FC2BD4F */ jal textMeasure -/* 0DE0E4 7F0A9574 AFA00014 */ sw $zero, 0x14($sp) -/* 0DE0E8 7F0A9578 3C098004 */ lui $t1, %hi(D_800409C0) # $t1, 0x8004 -/* 0DE0EC 7F0A957C 8D2909F0 */ lw $t1, %lo(D_800409C0)($t1) -/* 0DE0F0 7F0A9580 3C0A8005 */ lui $t2, %hi(j_text_trigger) # $t2, 0x8005 -/* 0DE0F4 7F0A9584 27A40054 */ addiu $a0, $sp, 0x54 -/* 0DE0F8 7F0A9588 1120004C */ beqz $t1, .Ljp7F0A96BC -/* 0DE0FC 7F0A958C 27A50058 */ addiu $a1, $sp, 0x58 -/* 0DE100 7F0A9590 8D4A8500 */ lw $t2, %lo(j_text_trigger)($t2) -/* 0DE104 7F0A9594 8FA60050 */ lw $a2, 0x50($sp) -/* 0DE108 7F0A9598 8FA7005C */ lw $a3, 0x5c($sp) -/* 0DE10C 7F0A959C 11400003 */ beqz $t2, .Ljp7F0A95AC -/* 0DE110 7F0A95A0 2402000C */ li $v0, 12 -/* 0DE114 7F0A95A4 10000001 */ b .Ljp7F0A95AC -/* 0DE118 7F0A95A8 2402000E */ li $v0, 14 -.Ljp7F0A95AC: -/* 0DE11C 7F0A95AC AFB00010 */ sw $s0, 0x10($sp) -/* 0DE120 7F0A95B0 0FC2BD4F */ jal textMeasure -/* 0DE124 7F0A95B4 AFA20014 */ sw $v0, 0x14($sp) -/* 0DE128 7F0A95B8 3C038005 */ lui $v1, %hi(j_text_trigger) # $v1, 0x8005 -/* 0DE12C 7F0A95BC 8C638500 */ lw $v1, %lo(j_text_trigger)($v1) -/* 0DE130 7F0A95C0 240B004E */ li $t3, 78 -/* 0DE134 7F0A95C4 AFAB0878 */ sw $t3, 0x878($sp) -/* 0DE138 7F0A95C8 10600003 */ beqz $v1, .Ljp7F0A95D8 -/* 0DE13C 7F0A95CC 8FAD0084 */ lw $t5, 0x84($sp) -/* 0DE140 7F0A95D0 10000002 */ b .Ljp7F0A95DC -/* 0DE144 7F0A95D4 2402000E */ li $v0, 14 -.Ljp7F0A95D8: -/* 0DE148 7F0A95D8 2402000C */ li $v0, 12 -.Ljp7F0A95DC: -/* 0DE14C 7F0A95DC 3C0F8004 */ lui $t7, %hi(D_800409C4) # $t7, 0x8004 -/* 0DE150 7F0A95E0 8DEF09F4 */ lw $t7, %lo(D_800409C4)($t7) -/* 0DE154 7F0A95E4 00026040 */ sll $t4, $v0, 1 -/* 0DE158 7F0A95E8 018D7021 */ addu $t6, $t4, $t5 -/* 0DE15C 7F0A95EC 15E00018 */ bnez $t7, .Ljp7F0A9650 -/* 0DE160 7F0A95F0 AFAE0874 */ sw $t6, 0x874($sp) -/* 0DE164 7F0A95F4 10600003 */ beqz $v1, .Ljp7F0A9604 -/* 0DE168 7F0A95F8 8FA40930 */ lw $a0, 0x930($sp) -/* 0DE16C 7F0A95FC 10000002 */ b .Ljp7F0A9608 -/* 0DE170 7F0A9600 2402000E */ li $v0, 14 -.Ljp7F0A9604: -/* 0DE174 7F0A9604 2402000C */ li $v0, 12 -.Ljp7F0A9608: -/* 0DE178 7F0A9608 8FB8005C */ lw $t8, 0x5c($sp) -/* 0DE17C 7F0A960C 8FA90058 */ lw $t1, 0x58($sp) -/* 0DE180 7F0A9610 3C19A0FF */ lui $t9, (0xA0FFA0F0 >> 16) # lui $t9, 0xa0ff -/* 0DE184 7F0A9614 3739A0F0 */ ori $t9, (0xA0FFA0F0 & 0xFFFF) # ori $t9, $t9, 0xa0f0 -/* 0DE188 7F0A9618 240A0064 */ li $t2, 100 -/* 0DE18C 7F0A961C AFAA0020 */ sw $t2, 0x20($sp) -/* 0DE190 7F0A9620 AFB90018 */ sw $t9, 0x18($sp) -/* 0DE194 7F0A9624 27A50878 */ addiu $a1, $sp, 0x878 -/* 0DE198 7F0A9628 27A60874 */ addiu $a2, $sp, 0x874 -/* 0DE19C 7F0A962C 8FA70050 */ lw $a3, 0x50($sp) -/* 0DE1A0 7F0A9630 AFB00014 */ sw $s0, 0x14($sp) -/* 0DE1A4 7F0A9634 AFA00024 */ sw $zero, 0x24($sp) -/* 0DE1A8 7F0A9638 AFA20028 */ sw $v0, 0x28($sp) -/* 0DE1AC 7F0A963C AFB80010 */ sw $t8, 0x10($sp) -/* 0DE1B0 7F0A9640 0FC2B99B */ jal textRender -/* 0DE1B4 7F0A9644 AFA9001C */ sw $t1, 0x1c($sp) -/* 0DE1B8 7F0A9648 1000001A */ b .Ljp7F0A96B4 -/* 0DE1BC 7F0A964C AFA20930 */ sw $v0, 0x930($sp) -.Ljp7F0A9650: -/* 0DE1C0 7F0A9650 10600003 */ beqz $v1, .Ljp7F0A9660 -/* 0DE1C4 7F0A9654 8FA40930 */ lw $a0, 0x930($sp) -/* 0DE1C8 7F0A9658 10000002 */ b .Ljp7F0A9664 -/* 0DE1CC 7F0A965C 2402000E */ li $v0, 14 -.Ljp7F0A9660: -/* 0DE1D0 7F0A9660 2402000C */ li $v0, 12 -.Ljp7F0A9664: -/* 0DE1D4 7F0A9664 8FAE0058 */ lw $t6, 0x58($sp) -/* 0DE1D8 7F0A9668 8FAB005C */ lw $t3, 0x5c($sp) -/* 0DE1DC 7F0A966C 3C0D0070 */ lui $t5, (0x007000A0 >> 16) # lui $t5, 0x70 -/* 0DE1E0 7F0A9670 35AD00A0 */ ori $t5, (0x007000A0 & 0xFFFF) # ori $t5, $t5, 0xa0 -/* 0DE1E4 7F0A9674 240CFFFF */ li $t4, -1 -/* 0DE1E8 7F0A9678 24180064 */ li $t8, 100 -/* 0DE1EC 7F0A967C 25CF0001 */ addiu $t7, $t6, 1 -/* 0DE1F0 7F0A9680 AFAF0020 */ sw $t7, 0x20($sp) -/* 0DE1F4 7F0A9684 AFB80024 */ sw $t8, 0x24($sp) -/* 0DE1F8 7F0A9688 AFAC0018 */ sw $t4, 0x18($sp) -/* 0DE1FC 7F0A968C AFAD001C */ sw $t5, 0x1c($sp) -/* 0DE200 7F0A9690 27A50878 */ addiu $a1, $sp, 0x878 -/* 0DE204 7F0A9694 27A60874 */ addiu $a2, $sp, 0x874 -/* 0DE208 7F0A9698 8FA70050 */ lw $a3, 0x50($sp) -/* 0DE20C 7F0A969C AFB00014 */ sw $s0, 0x14($sp) -/* 0DE210 7F0A96A0 AFA00028 */ sw $zero, 0x28($sp) -/* 0DE214 7F0A96A4 AFA2002C */ sw $v0, 0x2c($sp) -/* 0DE218 7F0A96A8 0FC2BCA7 */ jal textRenderOutlined -/* 0DE21C 7F0A96AC AFAB0010 */ sw $t3, 0x10($sp) -/* 0DE220 7F0A96B0 AFA20930 */ sw $v0, 0x930($sp) -.Ljp7F0A96B4: -/* 0DE224 7F0A96B4 0FC2A3C4 */ jal sub_GAME_7F0A8378 -/* 0DE228 7F0A96B8 00000000 */ nop -.Ljp7F0A96BC: -/* 0DE22C 7F0A96BC 8FBF003C */ lw $ra, 0x3c($sp) -.Ljp7F0A96C0: -/* 0DE230 7F0A96C0 8FA20930 */ lw $v0, 0x930($sp) -/* 0DE234 7F0A96C4 8FB00038 */ lw $s0, 0x38($sp) -/* 0DE238 7F0A96C8 03E00008 */ jr $ra -/* 0DE23C 7F0A96CC 27BD0930 */ addiu $sp, $sp, 0x930 -) -#endif - -#ifdef VERSION_EU -GLOBAL_ASM( -.text -glabel draw_watch_inventory_page -/* 0DA12C 7F0A773C 27BDF6D0 */ addiu $sp, $sp, -0x930 -/* 0DA130 7F0A7740 AFBF003C */ sw $ra, 0x3c($sp) -/* 0DA134 7F0A7744 AFB00038 */ sw $s0, 0x38($sp) -/* 0DA138 7F0A7748 0FC29919 */ jal draw_background_health_and_armor -/* 0DA13C 7F0A774C 00003025 */ move $a2, $zero -/* 0DA140 7F0A7750 0FC1F9B4 */ jal check_watch_page_transistion_running -/* 0DA144 7F0A7754 AFA20930 */ sw $v0, 0x930($sp) -/* 0DA148 7F0A7758 24010001 */ li $at, 1 -/* 0DA14C 7F0A775C 504101B8 */ beql $v0, $at, .L7F0A7E40 -/* 0DA150 7F0A7760 8FBF003C */ lw $ra, 0x3c($sp) -/* 0DA154 7F0A7764 0FC2F2A4 */ jal dynAllocateMatrix -/* 0DA158 7F0A7768 00000000 */ nop -/* 0DA15C 7F0A776C 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DA160 7F0A7770 AFA2092C */ sw $v0, 0x92c($sp) -/* 0DA164 7F0A7774 0FC23684 */ jal bondinvGet45AngleForIndex -/* 0DA168 7F0A7778 8C84A608 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DA16C 7F0A777C 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DA170 7F0A7780 E7A0089C */ swc1 $f0, 0x89c($sp) -/* 0DA174 7F0A7784 0FC2368E */ jal bondinvGetHoffsetForIndex -/* 0DA178 7F0A7788 8C84A608 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DA17C 7F0A778C 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DA180 7F0A7790 E7A00898 */ swc1 $f0, 0x898($sp) -/* 0DA184 7F0A7794 0FC23698 */ jal bondinvGetVoffsetForIndex -/* 0DA188 7F0A7798 8C84A608 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DA18C 7F0A779C 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DA190 7F0A77A0 E7A00894 */ swc1 $f0, 0x894($sp) -/* 0DA194 7F0A77A4 0FC236A2 */ jal bondinvGetDepthForIndex -/* 0DA198 7F0A77A8 8C84A608 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DA19C 7F0A77AC 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DA1A0 7F0A77B0 E7A00890 */ swc1 $f0, 0x890($sp) -/* 0DA1A4 7F0A77B4 0FC235B6 */ jal bondinvGetTextbyInvIndex -/* 0DA1A8 7F0A77B8 8C84A608 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DA1AC 7F0A77BC 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DA1B0 7F0A77C0 AFA2088C */ sw $v0, 0x88c($sp) -/* 0DA1B4 7F0A77C4 0FC2376E */ jal bondinvGetXrotWatchForIndex -/* 0DA1B8 7F0A77C8 8C84A608 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DA1BC 7F0A77CC 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DA1C0 7F0A77D0 E7A00888 */ swc1 $f0, 0x888($sp) -/* 0DA1C4 7F0A77D4 0FC23778 */ jal bondinvGetYrotWatchForIndex -/* 0DA1C8 7F0A77D8 8C84A608 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DA1CC 7F0A77DC 0FC2412A */ jal get_debug_gunwatchpos_flag -/* 0DA1D0 7F0A77E0 E7A00884 */ swc1 $f0, 0x884($sp) -/* 0DA1D4 7F0A77E4 50400040 */ beql $v0, $zero, .Leu7F0A78E8 -/* 0DA1D8 7F0A77E8 3C014120 */ lui $at, 0x4120 -/* 0DA1DC 7F0A77EC 0FC177A2 */ jal getCurrentPlayerWeaponId -/* 0DA1E0 7F0A77F0 00002025 */ move $a0, $zero -/* 0DA1E4 7F0A77F4 000270C0 */ sll $t6, $v0, 3 -/* 0DA1E8 7F0A77F8 01C27023 */ subu $t6, $t6, $v0 -/* 0DA1EC 7F0A77FC 3C0F8003 */ lui $t7, %hi(gitem_structs) # $t7, 0x8003 -/* 0DA1F0 7F0A7800 25EFEE74 */ addiu $t7, %lo(gitem_structs) # addiu $t7, $t7, -0x118c -/* 0DA1F4 7F0A7804 000E70C0 */ sll $t6, $t6, 3 -/* 0DA1F8 7F0A7808 01CF8021 */ addu $s0, $t6, $t7 -/* 0DA1FC 7F0A780C 00002025 */ move $a0, $zero -/* 0DA200 7F0A7810 0C002C20 */ jal joyGetButtons -/* 0DA204 7F0A7814 24050002 */ li $a1, 2 -/* 0DA208 7F0A7818 10400006 */ beqz $v0, .Leu7F0A7834 -/* 0DA20C 7F0A781C 00002025 */ move $a0, $zero -/* 0DA210 7F0A7820 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DA214 7F0A7824 44813000 */ mtc1 $at, $f6 -/* 0DA218 7F0A7828 C604002C */ lwc1 $f4, 0x2c($s0) -/* 0DA21C 7F0A782C 46062201 */ sub.s $f8, $f4, $f6 -/* 0DA220 7F0A7830 E608002C */ swc1 $f8, 0x2c($s0) -.Leu7F0A7834: -/* 0DA224 7F0A7834 0C002C20 */ jal joyGetButtons -/* 0DA228 7F0A7838 24050001 */ li $a1, 1 -/* 0DA22C 7F0A783C 10400006 */ beqz $v0, .L7F0A7858 -/* 0DA230 7F0A7840 00002025 */ move $a0, $zero -/* 0DA234 7F0A7844 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DA238 7F0A7848 44818000 */ mtc1 $at, $f16 -/* 0DA23C 7F0A784C C60A002C */ lwc1 $f10, 0x2c($s0) -/* 0DA240 7F0A7850 46105480 */ add.s $f18, $f10, $f16 -/* 0DA244 7F0A7854 E612002C */ swc1 $f18, 0x2c($s0) -.L7F0A7858: -/* 0DA248 7F0A7858 0C002C20 */ jal joyGetButtons -/* 0DA24C 7F0A785C 24050004 */ li $a1, 4 -/* 0DA250 7F0A7860 10400006 */ beqz $v0, .L7F0A787C -/* 0DA254 7F0A7864 00002025 */ move $a0, $zero -/* 0DA258 7F0A7868 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DA25C 7F0A786C 44813000 */ mtc1 $at, $f6 -/* 0DA260 7F0A7870 C6040030 */ lwc1 $f4, 0x30($s0) -/* 0DA264 7F0A7874 46062200 */ add.s $f8, $f4, $f6 -/* 0DA268 7F0A7878 E6080030 */ swc1 $f8, 0x30($s0) -.L7F0A787C: -/* 0DA26C 7F0A787C 0C002C20 */ jal joyGetButtons -/* 0DA270 7F0A7880 24050008 */ li $a1, 8 -/* 0DA274 7F0A7884 10400006 */ beqz $v0, .L7F0A78A0 -/* 0DA278 7F0A7888 00002025 */ move $a0, $zero -/* 0DA27C 7F0A788C 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0DA280 7F0A7890 44818000 */ mtc1 $at, $f16 -/* 0DA284 7F0A7894 C60A0030 */ lwc1 $f10, 0x30($s0) -/* 0DA288 7F0A7898 46105481 */ sub.s $f18, $f10, $f16 -/* 0DA28C 7F0A789C E6120030 */ swc1 $f18, 0x30($s0) -.L7F0A78A0: -/* 0DA290 7F0A78A0 0C002C20 */ jal joyGetButtons -/* 0DA294 7F0A78A4 24050020 */ li $a1, 32 -/* 0DA298 7F0A78A8 10400006 */ beqz $v0, .L7F0A78C4 -/* 0DA29C 7F0A78AC 00002025 */ move $a0, $zero -/* 0DA2A0 7F0A78B0 3C018005 */ lui $at, %hi(D_80058520) # $at, 0x8005 -/* 0DA2A4 7F0A78B4 C426CF74 */ lwc1 $f6, %lo(D_80058520)($at) -/* 0DA2A8 7F0A78B8 C6040034 */ lwc1 $f4, 0x34($s0) -/* 0DA2AC 7F0A78BC 46062202 */ mul.s $f8, $f4, $f6 -/* 0DA2B0 7F0A78C0 E6080034 */ swc1 $f8, 0x34($s0) -.L7F0A78C4: -/* 0DA2B4 7F0A78C4 0C002C20 */ jal joyGetButtons -/* 0DA2B8 7F0A78C8 24050010 */ li $a1, 16 -/* 0DA2BC 7F0A78CC 10400005 */ beqz $v0, .L7F0A78E4 -/* 0DA2C0 7F0A78D0 3C018005 */ lui $at, %hi(D_80058524) # $at, 0x8005 -/* 0DA2C4 7F0A78D4 C60A0034 */ lwc1 $f10, 0x34($s0) -/* 0DA2C8 7F0A78D8 C430CF78 */ lwc1 $f16, %lo(D_80058524)($at) -/* 0DA2CC 7F0A78DC 46105482 */ mul.s $f18, $f10, $f16 -/* 0DA2D0 7F0A78E0 E6120034 */ swc1 $f18, 0x34($s0) -.L7F0A78E4: -/* 0DA2D4 7F0A78E4 3C014120 */ li $at, 0x41200000 # 10.000000 -.Leu7F0A78E8: -/* 0DA2D8 7F0A78E8 44812000 */ mtc1 $at, $f4 -/* 0DA2DC 7F0A78EC 3C018005 */ lui $at, %hi(D_80058528) # $at, 0x8005 -/* 0DA2E0 7F0A78F0 C426CF7C */ lwc1 $f6, %lo(D_80058528)($at) -/* 0DA2E4 7F0A78F4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DA2E8 7F0A78F8 44814000 */ mtc1 $at, $f8 -/* 0DA2EC 7F0A78FC 3C073FA4 */ lui $a3, (0x3FA45519 >> 16) # lui $a3, 0x3fa4 -/* 0DA2F0 7F0A7900 34E75519 */ ori $a3, (0x3FA45519 & 0xFFFF) # ori $a3, $a3, 0x5519 -/* 0DA2F4 7F0A7904 8FA4092C */ lw $a0, 0x92c($sp) -/* 0DA2F8 7F0A7908 27A5092A */ addiu $a1, $sp, 0x92a -/* 0DA2FC 7F0A790C 8FA6089C */ lw $a2, 0x89c($sp) -/* 0DA300 7F0A7910 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0DA304 7F0A7914 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0DA308 7F0A7918 0C003DB8 */ jal guPerspective -/* 0DA30C 7F0A791C E7A80018 */ swc1 $f8, 0x18($sp) -/* 0DA310 7F0A7920 8FA20930 */ lw $v0, 0x930($sp) -/* 0DA314 7F0A7924 3C180103 */ lui $t8, (0x01030040 >> 16) # lui $t8, 0x103 -/* 0DA318 7F0A7928 37180040 */ ori $t8, (0x01030040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 0DA31C 7F0A792C 00408025 */ move $s0, $v0 -/* 0DA320 7F0A7930 AE180000 */ sw $t8, ($s0) -/* 0DA324 7F0A7934 24420008 */ addiu $v0, $v0, 8 -/* 0DA328 7F0A7938 AFA20930 */ sw $v0, 0x930($sp) -/* 0DA32C 7F0A793C 0C003838 */ jal osVirtualToPhysical -/* 0DA330 7F0A7940 8FA4092C */ lw $a0, 0x92c($sp) -/* 0DA334 7F0A7944 AE020004 */ sw $v0, 4($s0) -/* 0DA338 7F0A7948 3C018005 */ lui $at, %hi(D_8005852C) # $at, 0x8005 -/* 0DA33C 7F0A794C C430CF80 */ lwc1 $f16, %lo(D_8005852C)($at) -/* 0DA340 7F0A7950 C7AA0884 */ lwc1 $f10, 0x884($sp) -/* 0DA344 7F0A7954 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DA348 7F0A7958 44812000 */ mtc1 $at, $f4 -/* 0DA34C 7F0A795C 46105482 */ mul.s $f18, $f10, $f16 -/* 0DA350 7F0A7960 27A508E8 */ addiu $a1, $sp, 0x8e8 -/* 0DA354 7F0A7964 0FC162A9 */ jal matrix_4x4_set_rotation_around_y -/* 0DA358 7F0A7968 46049303 */ div.s $f12, $f18, $f4 -/* 0DA35C 7F0A796C 3C018005 */ lui $at, %hi(D_80058530) # $at, 0x8005 -/* 0DA360 7F0A7970 C420CF84 */ lwc1 $f0, %lo(D_80058530)($at) -/* 0DA364 7F0A7974 C7A60888 */ lwc1 $f6, 0x888($sp) -/* 0DA368 7F0A7978 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DA36C 7F0A797C 44815000 */ mtc1 $at, $f10 -/* 0DA370 7F0A7980 46003202 */ mul.s $f8, $f6, $f0 -/* 0DA374 7F0A7984 27B008A8 */ addiu $s0, $sp, 0x8a8 -/* 0DA378 7F0A7988 02002825 */ move $a1, $s0 -/* 0DA37C 7F0A798C 460A4403 */ div.s $f16, $f8, $f10 -/* 0DA380 7F0A7990 0FC162CC */ jal matrix_4x4_set_rotation_around_z -/* 0DA384 7F0A7994 46100301 */ sub.s $f12, $f0, $f16 -/* 0DA388 7F0A7998 02002025 */ move $a0, $s0 -/* 0DA38C 7F0A799C 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 0DA390 7F0A79A0 27A508E8 */ addiu $a1, $sp, 0x8e8 -/* 0DA394 7F0A79A4 3C018004 */ lui $at, %hi(D_80040B14) # $at, 0x8004 -/* 0DA398 7F0A79A8 0FC16068 */ jal cosf -/* 0DA39C 7F0A79AC C42CA764 */ lwc1 $f12, %lo(D_80040B14)($at) -/* 0DA3A0 7F0A79B0 C7B20890 */ lwc1 $f18, 0x890($sp) -/* 0DA3A4 7F0A79B4 3C018004 */ lui $at, %hi(D_80040B14) # $at, 0x8004 -/* 0DA3A8 7F0A79B8 C42CA764 */ lwc1 $f12, %lo(D_80040B14)($at) -/* 0DA3AC 7F0A79BC 46120102 */ mul.s $f4, $f0, $f18 -/* 0DA3B0 7F0A79C0 0FC1606B */ jal sinf -/* 0DA3B4 7F0A79C4 E7A408A4 */ swc1 $f4, 0x8a4($sp) -/* 0DA3B8 7F0A79C8 C7A60890 */ lwc1 $f6, 0x890($sp) -/* 0DA3BC 7F0A79CC C7AE0898 */ lwc1 $f14, 0x898($sp) -/* 0DA3C0 7F0A79D0 44801000 */ mtc1 $zero, $f2 -/* 0DA3C4 7F0A79D4 46060202 */ mul.s $f8, $f0, $f6 -/* 0DA3C8 7F0A79D8 C7AC0894 */ lwc1 $f12, 0x894($sp) -/* 0DA3CC 7F0A79DC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DA3D0 7F0A79E0 44818000 */ mtc1 $at, $f16 -/* 0DA3D4 7F0A79E4 44066000 */ mfc1 $a2, $f12 -/* 0DA3D8 7F0A79E8 02002025 */ move $a0, $s0 -/* 0DA3DC 7F0A79EC 8FA508A4 */ lw $a1, 0x8a4($sp) -/* 0DA3E0 7F0A79F0 460E4280 */ add.s $f10, $f8, $f14 -/* 0DA3E4 7F0A79F4 E7AE0018 */ swc1 $f14, 0x18($sp) -/* 0DA3E8 7F0A79F8 E7A20010 */ swc1 $f2, 0x10($sp) -/* 0DA3EC 7F0A79FC E7A2001C */ swc1 $f2, 0x1c($sp) -/* 0DA3F0 7F0A7A00 44075000 */ mfc1 $a3, $f10 -/* 0DA3F4 7F0A7A04 E7A20024 */ swc1 $f2, 0x24($sp) -/* 0DA3F8 7F0A7A08 E7AC0014 */ swc1 $f12, 0x14($sp) -/* 0DA3FC 7F0A7A0C 0FC166CF */ jal matrix_4x4_set_lookat_target -/* 0DA400 7F0A7A10 E7B00020 */ swc1 $f16, 0x20($sp) -/* 0DA404 7F0A7A14 02002025 */ move $a0, $s0 -/* 0DA408 7F0A7A18 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 0DA40C 7F0A7A1C 27A508E8 */ addiu $a1, $sp, 0x8e8 -/* 0DA410 7F0A7A20 0FC29880 */ jal sub_GAME_7F0A6EE8 -/* 0DA414 7F0A7A24 8FA40930 */ lw $a0, 0x930($sp) -/* 0DA418 7F0A7A28 3C19A0FF */ lui $t9, (0xA0FFA03C >> 16) # lui $t9, 0xa0ff -/* 0DA41C 7F0A7A2C 3739A03C */ ori $t9, (0xA0FFA03C & 0xFFFF) # ori $t9, $t9, 0xa03c -/* 0DA420 7F0A7A30 AFB90010 */ sw $t9, 0x10($sp) -/* 0DA424 7F0A7A34 00402025 */ move $a0, $v0 -/* 0DA428 7F0A7A38 8FA5088C */ lw $a1, 0x88c($sp) -/* 0DA42C 7F0A7A3C 27A608E8 */ addiu $a2, $sp, 0x8e8 -/* 0DA430 7F0A7A40 0FC18D32 */ jal set_enviro_fog_for_items_in_solo_watch_menu -/* 0DA434 7F0A7A44 24070040 */ li $a3, 64 -/* 0DA438 7F0A7A48 3C0B8004 */ lui $t3, %hi(j_text_trigger) # $t3, 0x8004 -/* 0DA43C 7F0A7A4C 8D6B1150 */ lw $t3, %lo(j_text_trigger)($t3) -/* 0DA440 7F0A7A50 3C098004 */ lui $t1, %hi(ptrFontBankGothic) # $t1, 0x8004 -/* 0DA444 7F0A7A54 3C0A8004 */ lui $t2, %hi(ptrFontBankGothicChars) # $t2, 0x8004 -/* 0DA448 7F0A7A58 8D29AAFC */ lw $t1, %lo(ptrFontBankGothic)($t1) -/* 0DA44C 7F0A7A5C 8D4AAB00 */ lw $t2, %lo(ptrFontBankGothicChars)($t2) -/* 0DA450 7F0A7A60 AFA20930 */ sw $v0, 0x930($sp) -/* 0DA454 7F0A7A64 AFA00868 */ sw $zero, 0x868($sp) -/* 0DA458 7F0A7A68 AFA00864 */ sw $zero, 0x864($sp) -/* 0DA45C 7F0A7A6C AFA90860 */ sw $t1, 0x860($sp) -/* 0DA460 7F0A7A70 11600004 */ beqz $t3, .L7F0A7A84 -/* 0DA464 7F0A7A74 AFAA085C */ sw $t2, 0x85c($sp) -/* 0DA468 7F0A7A78 240C0082 */ li $t4, 130 -/* 0DA46C 7F0A7A7C 10000003 */ b .L7F0A7A8C -/* 0DA470 7F0A7A80 AFAC0084 */ sw $t4, 0x84($sp) -.L7F0A7A84: -/* 0DA474 7F0A7A84 240D00AA */ li $t5, 170 -/* 0DA478 7F0A7A88 AFAD0084 */ sw $t5, 0x84($sp) -.L7F0A7A8C: -/* 0DA47C 7F0A7A8C A3A0008C */ sb $zero, 0x8c($sp) -/* 0DA480 7F0A7A90 0FC23507 */ jal bondinvCountTotalItemsInInv -/* 0DA484 7F0A7A94 00008025 */ move $s0, $zero -/* 0DA488 7F0A7A98 1840000B */ blez $v0, .L7F0A7AC8 -/* 0DA48C 7F0A7A9C 00000000 */ nop -.L7F0A7AA0: -/* 0DA490 7F0A7AA0 0FC235EA */ jal bondinvGetNameByIndex -/* 0DA494 7F0A7AA4 02002025 */ move $a0, $s0 -/* 0DA498 7F0A7AA8 27A4008C */ addiu $a0, $sp, 0x8c -/* 0DA49C 7F0A7AAC 0C002717 */ jal strcat -/* 0DA4A0 7F0A7AB0 00402825 */ move $a1, $v0 -/* 0DA4A4 7F0A7AB4 0FC23507 */ jal bondinvCountTotalItemsInInv -/* 0DA4A8 7F0A7AB8 26100001 */ addiu $s0, $s0, 1 -/* 0DA4AC 7F0A7ABC 0202082A */ slt $at, $s0, $v0 -/* 0DA4B0 7F0A7AC0 1420FFF7 */ bnez $at, .L7F0A7AA0 -/* 0DA4B4 7F0A7AC4 00000000 */ nop -.L7F0A7AC8: -/* 0DA4B8 7F0A7AC8 3C038004 */ lui $v1, %hi(D_800409C4) # $v1, 0x8004 -/* 0DA4BC 7F0A7ACC 2463A614 */ addiu $v1, %lo(D_800409C4) # addiu $v1, $v1, -0x59ec -/* 0DA4C0 7F0A7AD0 8C620000 */ lw $v0, ($v1) -/* 0DA4C4 7F0A7AD4 18400002 */ blez $v0, .L7F0A7AE0 -/* 0DA4C8 7F0A7AD8 244EFFFF */ addiu $t6, $v0, -1 -/* 0DA4CC 7F0A7ADC AC6E0000 */ sw $t6, ($v1) -.L7F0A7AE0: -/* 0DA4D0 7F0A7AE0 0FC293A8 */ jal sub_GAME_7F0A5B80 -/* 0DA4D4 7F0A7AE4 00000000 */ nop -/* 0DA4D8 7F0A7AE8 3C188004 */ lui $t8, %hi(j_text_trigger) # $t8, 0x8004 -/* 0DA4DC 7F0A7AEC 8F181150 */ lw $t8, %lo(j_text_trigger)($t8) -/* 0DA4E0 7F0A7AF0 8FA30084 */ lw $v1, 0x84($sp) -/* 0DA4E4 7F0A7AF4 240F004E */ li $t7, 78 -/* 0DA4E8 7F0A7AF8 AFAF0878 */ sw $t7, 0x878($sp) -/* 0DA4EC 7F0A7AFC 13000003 */ beqz $t8, .L7F0A7B0C -/* 0DA4F0 7F0A7B00 AFA30874 */ sw $v1, 0x874($sp) -/* 0DA4F4 7F0A7B04 10000002 */ b .L7F0A7B10 -/* 0DA4F8 7F0A7B08 2402000E */ li $v0, 14 -.L7F0A7B0C: -/* 0DA4FC 7F0A7B0C 2402000C */ li $v0, 12 -.L7F0A7B10: -/* 0DA500 7F0A7B10 0002C840 */ sll $t9, $v0, 1 -/* 0DA504 7F0A7B14 03238021 */ addu $s0, $t9, $v1 -/* 0DA508 7F0A7B18 26100001 */ addiu $s0, $s0, 1 -/* 0DA50C 7F0A7B1C 0FC2B016 */ jal microcode_constructor -/* 0DA510 7F0A7B20 8FA40930 */ lw $a0, 0x930($sp) -/* 0DA514 7F0A7B24 3C098004 */ lui $t1, %hi(j_text_trigger) # $t1, 0x8004 -/* 0DA518 7F0A7B28 8D291150 */ lw $t1, %lo(j_text_trigger)($t1) -/* 0DA51C 7F0A7B2C AFA20930 */ sw $v0, 0x930($sp) -/* 0DA520 7F0A7B30 27A40868 */ addiu $a0, $sp, 0x868 -/* 0DA524 7F0A7B34 11200003 */ beqz $t1, .L7F0A7B44 -/* 0DA528 7F0A7B38 27A50864 */ addiu $a1, $sp, 0x864 -/* 0DA52C 7F0A7B3C 10000002 */ b .L7F0A7B48 -/* 0DA530 7F0A7B40 2402000E */ li $v0, 14 -.L7F0A7B44: -/* 0DA534 7F0A7B44 2402000C */ li $v0, 12 -.L7F0A7B48: -/* 0DA538 7F0A7B48 8FAA0860 */ lw $t2, 0x860($sp) -/* 0DA53C 7F0A7B4C 27A6008C */ addiu $a2, $sp, 0x8c -/* 0DA540 7F0A7B50 8FA7085C */ lw $a3, 0x85c($sp) -/* 0DA544 7F0A7B54 AFA20014 */ sw $v0, 0x14($sp) -/* 0DA548 7F0A7B58 0FC2B713 */ jal textMeasure -/* 0DA54C 7F0A7B5C AFAA0010 */ sw $t2, 0x10($sp) -/* 0DA550 7F0A7B60 3C0B8004 */ lui $t3, %hi(j_text_trigger) # $t3, 0x8004 -/* 0DA554 7F0A7B64 8D6B1150 */ lw $t3, %lo(j_text_trigger)($t3) -/* 0DA558 7F0A7B68 8FA60084 */ lw $a2, 0x84($sp) -/* 0DA55C 7F0A7B6C 8FA40930 */ lw $a0, 0x930($sp) -/* 0DA560 7F0A7B70 11600003 */ beqz $t3, .L7F0A7B80 -/* 0DA564 7F0A7B74 2405004E */ li $a1, 78 -/* 0DA568 7F0A7B78 10000002 */ b .L7F0A7B84 -/* 0DA56C 7F0A7B7C 2402000E */ li $v0, 14 -.L7F0A7B80: -/* 0DA570 7F0A7B80 2402000C */ li $v0, 12 -.L7F0A7B84: -/* 0DA574 7F0A7B84 00026080 */ sll $t4, $v0, 2 -/* 0DA578 7F0A7B88 8FA70864 */ lw $a3, 0x864($sp) -/* 0DA57C 7F0A7B8C 01826021 */ addu $t4, $t4, $v0 -/* 0DA580 7F0A7B90 01866821 */ addu $t5, $t4, $a2 -/* 0DA584 7F0A7B94 AFAD0010 */ sw $t5, 0x10($sp) -/* 0DA588 7F0A7B98 AFA00014 */ sw $zero, 0x14($sp) -/* 0DA58C 7F0A7B9C 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 0DA590 7F0A7BA0 24E7004E */ addiu $a3, $a3, 0x4e -/* 0DA594 7F0A7BA4 3C038004 */ lui $v1, %hi(j_text_trigger) # $v1, 0x8004 -/* 0DA598 7F0A7BA8 8C631150 */ lw $v1, %lo(j_text_trigger)($v1) -/* 0DA59C 7F0A7BAC 00402025 */ move $a0, $v0 -/* 0DA5A0 7F0A7BB0 27A50878 */ addiu $a1, $sp, 0x878 -/* 0DA5A4 7F0A7BB4 10600003 */ beqz $v1, .L7F0A7BC4 -/* 0DA5A8 7F0A7BB8 27A60874 */ addiu $a2, $sp, 0x874 -/* 0DA5AC 7F0A7BBC 10000002 */ b .L7F0A7BC8 -/* 0DA5B0 7F0A7BC0 2408000E */ li $t0, 14 -.L7F0A7BC4: -/* 0DA5B4 7F0A7BC4 2408000C */ li $t0, 12 -.L7F0A7BC8: -/* 0DA5B8 7F0A7BC8 10600003 */ beqz $v1, .L7F0A7BD8 -/* 0DA5BC 7F0A7BCC 27A7008C */ addiu $a3, $sp, 0x8c -/* 0DA5C0 7F0A7BD0 10000002 */ b .L7F0A7BDC -/* 0DA5C4 7F0A7BD4 2402000E */ li $v0, 14 -.L7F0A7BD8: -/* 0DA5C8 7F0A7BD8 2402000C */ li $v0, 12 -.L7F0A7BDC: -/* 0DA5CC 7F0A7BDC 8FB90864 */ lw $t9, 0x864($sp) -/* 0DA5D0 7F0A7BE0 3C0B8004 */ lui $t3, %hi(D_800409B0) # $t3, 0x8004 -/* 0DA5D4 7F0A7BE4 8D6BA600 */ lw $t3, %lo(D_800409B0)($t3) -/* 0DA5D8 7F0A7BE8 8FAE085C */ lw $t6, 0x85c($sp) -/* 0DA5DC 7F0A7BEC 8FAF0860 */ lw $t7, 0x860($sp) -/* 0DA5E0 7F0A7BF0 3C1800AA */ lui $t8, (0x00AA00B0 >> 16) # lui $t8, 0xaa -/* 0DA5E4 7F0A7BF4 00085080 */ sll $t2, $t0, 2 -/* 0DA5E8 7F0A7BF8 01485021 */ addu $t2, $t2, $t0 -/* 0DA5EC 7F0A7BFC 371800B0 */ ori $t8, (0x00AA00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0DA5F0 7F0A7C00 27290001 */ addiu $t1, $t9, 1 -/* 0DA5F4 7F0A7C04 AFA9001C */ sw $t1, 0x1c($sp) -/* 0DA5F8 7F0A7C08 AFB80018 */ sw $t8, 0x18($sp) -/* 0DA5FC 7F0A7C0C AFAA0020 */ sw $t2, 0x20($sp) -/* 0DA600 7F0A7C10 AFA20028 */ sw $v0, 0x28($sp) -/* 0DA604 7F0A7C14 AFAB0024 */ sw $t3, 0x24($sp) -/* 0DA608 7F0A7C18 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DA60C 7F0A7C1C 0FC2B35F */ jal textRender -/* 0DA610 7F0A7C20 AFAF0014 */ sw $t7, 0x14($sp) -/* 0DA614 7F0A7C24 3C0C8004 */ lui $t4, %hi(j_text_trigger) # $t4, 0x8004 -/* 0DA618 7F0A7C28 8D8C1150 */ lw $t4, %lo(j_text_trigger)($t4) -/* 0DA61C 7F0A7C2C 00402025 */ move $a0, $v0 -/* 0DA620 7F0A7C30 2405004B */ li $a1, 75 -/* 0DA624 7F0A7C34 11800003 */ beqz $t4, .L7F0A7C44 -/* 0DA628 7F0A7C38 02003025 */ move $a2, $s0 -/* 0DA62C 7F0A7C3C 10000002 */ b .L7F0A7C48 -/* 0DA630 7F0A7C40 2402000E */ li $v0, 14 -.L7F0A7C44: -/* 0DA634 7F0A7C44 2402000C */ li $v0, 12 -.L7F0A7C48: -/* 0DA638 7F0A7C48 8FA70864 */ lw $a3, 0x864($sp) -/* 0DA63C 7F0A7C4C 00506821 */ addu $t5, $v0, $s0 -/* 0DA640 7F0A7C50 3C0F0080 */ lui $t7, (0x00800050 >> 16) # lui $t7, 0x80 -/* 0DA644 7F0A7C54 35EF0050 */ ori $t7, (0x00800050 & 0xFFFF) # ori $t7, $t7, 0x50 -/* 0DA648 7F0A7C58 25AEFFFE */ addiu $t6, $t5, -2 -/* 0DA64C 7F0A7C5C AFAE0010 */ sw $t6, 0x10($sp) -/* 0DA650 7F0A7C60 AFAF0014 */ sw $t7, 0x14($sp) -/* 0DA654 7F0A7C64 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 0DA658 7F0A7C68 24E70052 */ addiu $a3, $a3, 0x52 -/* 0DA65C 7F0A7C6C 3C188004 */ lui $t8, %hi(ptrFontBankGothicChars) # $t8, 0x8004 -/* 0DA660 7F0A7C70 8F18AB00 */ lw $t8, %lo(ptrFontBankGothicChars)($t8) -/* 0DA664 7F0A7C74 3C108004 */ lui $s0, %hi(ptrFontBankGothic) # $s0, 0x8004 -/* 0DA668 7F0A7C78 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 -/* 0DA66C 7F0A7C7C AFA20930 */ sw $v0, 0x930($sp) -/* 0DA670 7F0A7C80 8E10AAFC */ lw $s0, %lo(ptrFontBankGothic)($s0) -/* 0DA674 7F0A7C84 8C84A608 */ lw $a0, %lo(g_curWatchItemIndex)($a0) -/* 0DA678 7F0A7C88 0FC235EA */ jal bondinvGetNameByIndex -/* 0DA67C 7F0A7C8C AFB8005C */ sw $t8, 0x5c($sp) -/* 0DA680 7F0A7C90 3C018004 */ lui $at, %hi(D_800409BC) # $at, 0x8004 -/* 0DA684 7F0A7C94 C432A60C */ lwc1 $f18, %lo(D_800409BC)($at) -/* 0DA688 7F0A7C98 3C198004 */ lui $t9, %hi(g_curWatchItemIndex) # $t9, 0x8004 -/* 0DA68C 7F0A7C9C 8F39A608 */ lw $t9, %lo(g_curWatchItemIndex)($t9) -/* 0DA690 7F0A7CA0 46009121 */ cvt.d.s $f4, $f18 -/* 0DA694 7F0A7CA4 3C058005 */ lui $a1, %hi(aDDDF) # $a1, 0x8005 -/* 0DA698 7F0A7CA8 3C068004 */ lui $a2, %hi(D_800409B0) # $a2, 0x8004 -/* 0DA69C 7F0A7CAC 3C078004 */ lui $a3, %hi(D_800409B4) # $a3, 0x8004 -/* 0DA6A0 7F0A7CB0 AFA20050 */ sw $v0, 0x50($sp) -/* 0DA6A4 7F0A7CB4 8CE7A604 */ lw $a3, %lo(D_800409B4)($a3) -/* 0DA6A8 7F0A7CB8 8CC6A600 */ lw $a2, %lo(D_800409B0)($a2) -/* 0DA6AC 7F0A7CBC 24A5CE38 */ addiu $a1, %lo(aDDDF) # addiu $a1, $a1, -0x31c8 -/* 0DA6B0 7F0A7CC0 F7A40018 */ sdc1 $f4, 0x18($sp) -/* 0DA6B4 7F0A7CC4 27A40064 */ addiu $a0, $sp, 0x64 -/* 0DA6B8 7F0A7CC8 0C00283D */ jal sprintf -/* 0DA6BC 7F0A7CCC AFB90010 */ sw $t9, 0x10($sp) -/* 0DA6C0 7F0A7CD0 0FC2B016 */ jal microcode_constructor -/* 0DA6C4 7F0A7CD4 8FA40930 */ lw $a0, 0x930($sp) -/* 0DA6C8 7F0A7CD8 AFA20930 */ sw $v0, 0x930($sp) -/* 0DA6CC 7F0A7CDC 27A40054 */ addiu $a0, $sp, 0x54 -/* 0DA6D0 7F0A7CE0 27A50058 */ addiu $a1, $sp, 0x58 -/* 0DA6D4 7F0A7CE4 27A60064 */ addiu $a2, $sp, 0x64 -/* 0DA6D8 7F0A7CE8 8FA7005C */ lw $a3, 0x5c($sp) -/* 0DA6DC 7F0A7CEC AFB00010 */ sw $s0, 0x10($sp) -/* 0DA6E0 7F0A7CF0 0FC2B713 */ jal textMeasure -/* 0DA6E4 7F0A7CF4 AFA00014 */ sw $zero, 0x14($sp) -/* 0DA6E8 7F0A7CF8 3C098004 */ lui $t1, %hi(D_800409C0) # $t1, 0x8004 -/* 0DA6EC 7F0A7CFC 8D29A610 */ lw $t1, %lo(D_800409C0)($t1) -/* 0DA6F0 7F0A7D00 3C0A8004 */ lui $t2, %hi(j_text_trigger) # $t2, 0x8004 -/* 0DA6F4 7F0A7D04 27A40054 */ addiu $a0, $sp, 0x54 -/* 0DA6F8 7F0A7D08 1120004C */ beqz $t1, .L7F0A7E3C -/* 0DA6FC 7F0A7D0C 27A50058 */ addiu $a1, $sp, 0x58 -/* 0DA700 7F0A7D10 8D4A1150 */ lw $t2, %lo(j_text_trigger)($t2) -/* 0DA704 7F0A7D14 8FA60050 */ lw $a2, 0x50($sp) -/* 0DA708 7F0A7D18 8FA7005C */ lw $a3, 0x5c($sp) -/* 0DA70C 7F0A7D1C 11400003 */ beqz $t2, .L7F0A7D2C -/* 0DA710 7F0A7D20 2402000C */ li $v0, 12 -/* 0DA714 7F0A7D24 10000001 */ b .L7F0A7D2C -/* 0DA718 7F0A7D28 2402000E */ li $v0, 14 -.L7F0A7D2C: -/* 0DA71C 7F0A7D2C AFB00010 */ sw $s0, 0x10($sp) -/* 0DA720 7F0A7D30 0FC2B713 */ jal textMeasure -/* 0DA724 7F0A7D34 AFA20014 */ sw $v0, 0x14($sp) -/* 0DA728 7F0A7D38 3C038004 */ lui $v1, %hi(j_text_trigger) # $v1, 0x8004 -/* 0DA72C 7F0A7D3C 8C631150 */ lw $v1, %lo(j_text_trigger)($v1) -/* 0DA730 7F0A7D40 240B004E */ li $t3, 78 -/* 0DA734 7F0A7D44 AFAB0878 */ sw $t3, 0x878($sp) -/* 0DA738 7F0A7D48 10600003 */ beqz $v1, .L7F0A7D58 -/* 0DA73C 7F0A7D4C 8FAD0084 */ lw $t5, 0x84($sp) -/* 0DA740 7F0A7D50 10000002 */ b .L7F0A7D5C -/* 0DA744 7F0A7D54 2402000E */ li $v0, 14 -.L7F0A7D58: -/* 0DA748 7F0A7D58 2402000C */ li $v0, 12 -.L7F0A7D5C: -/* 0DA74C 7F0A7D5C 3C0F8004 */ lui $t7, %hi(D_800409C4) # $t7, 0x8004 -/* 0DA750 7F0A7D60 8DEFA614 */ lw $t7, %lo(D_800409C4)($t7) -/* 0DA754 7F0A7D64 00026040 */ sll $t4, $v0, 1 -/* 0DA758 7F0A7D68 018D7021 */ addu $t6, $t4, $t5 -/* 0DA75C 7F0A7D6C 15E00018 */ bnez $t7, .L7F0A7DD0 -/* 0DA760 7F0A7D70 AFAE0874 */ sw $t6, 0x874($sp) -/* 0DA764 7F0A7D74 10600003 */ beqz $v1, .L7F0A7D84 -/* 0DA768 7F0A7D78 8FA40930 */ lw $a0, 0x930($sp) -/* 0DA76C 7F0A7D7C 10000002 */ b .L7F0A7D88 -/* 0DA770 7F0A7D80 2402000E */ li $v0, 14 -.L7F0A7D84: -/* 0DA774 7F0A7D84 2402000C */ li $v0, 12 -.L7F0A7D88: -/* 0DA778 7F0A7D88 8FB8005C */ lw $t8, 0x5c($sp) -/* 0DA77C 7F0A7D8C 8FA90058 */ lw $t1, 0x58($sp) -/* 0DA780 7F0A7D90 3C19A0FF */ lui $t9, (0xA0FFA0F0 >> 16) # lui $t9, 0xa0ff -/* 0DA784 7F0A7D94 3739A0F0 */ ori $t9, (0xA0FFA0F0 & 0xFFFF) # ori $t9, $t9, 0xa0f0 -/* 0DA788 7F0A7D98 240A0064 */ li $t2, 100 -/* 0DA78C 7F0A7D9C AFAA0020 */ sw $t2, 0x20($sp) -/* 0DA790 7F0A7DA0 AFB90018 */ sw $t9, 0x18($sp) -/* 0DA794 7F0A7DA4 27A50878 */ addiu $a1, $sp, 0x878 -/* 0DA798 7F0A7DA8 27A60874 */ addiu $a2, $sp, 0x874 -/* 0DA79C 7F0A7DAC 8FA70050 */ lw $a3, 0x50($sp) -/* 0DA7A0 7F0A7DB0 AFB00014 */ sw $s0, 0x14($sp) -/* 0DA7A4 7F0A7DB4 AFA00024 */ sw $zero, 0x24($sp) -/* 0DA7A8 7F0A7DB8 AFA20028 */ sw $v0, 0x28($sp) -/* 0DA7AC 7F0A7DBC AFB80010 */ sw $t8, 0x10($sp) -/* 0DA7B0 7F0A7DC0 0FC2B35F */ jal textRender -/* 0DA7B4 7F0A7DC4 AFA9001C */ sw $t1, 0x1c($sp) -/* 0DA7B8 7F0A7DC8 1000001A */ b .L7F0A7E34 -/* 0DA7BC 7F0A7DCC AFA20930 */ sw $v0, 0x930($sp) -.L7F0A7DD0: -/* 0DA7C0 7F0A7DD0 10600003 */ beqz $v1, .L7F0A7DE0 -/* 0DA7C4 7F0A7DD4 8FA40930 */ lw $a0, 0x930($sp) -/* 0DA7C8 7F0A7DD8 10000002 */ b .L7F0A7DE4 -/* 0DA7CC 7F0A7DDC 2402000E */ li $v0, 14 -.L7F0A7DE0: -/* 0DA7D0 7F0A7DE0 2402000C */ li $v0, 12 -.L7F0A7DE4: -/* 0DA7D4 7F0A7DE4 8FAE0058 */ lw $t6, 0x58($sp) -/* 0DA7D8 7F0A7DE8 8FAB005C */ lw $t3, 0x5c($sp) -/* 0DA7DC 7F0A7DEC 3C0D0070 */ lui $t5, (0x007000A0 >> 16) # lui $t5, 0x70 -/* 0DA7E0 7F0A7DF0 35AD00A0 */ ori $t5, (0x007000A0 & 0xFFFF) # ori $t5, $t5, 0xa0 -/* 0DA7E4 7F0A7DF4 240CFFFF */ li $t4, -1 -/* 0DA7E8 7F0A7DF8 24180064 */ li $t8, 100 -/* 0DA7EC 7F0A7DFC 25CF0001 */ addiu $t7, $t6, 1 -/* 0DA7F0 7F0A7E00 AFAF0020 */ sw $t7, 0x20($sp) -/* 0DA7F4 7F0A7E04 AFB80024 */ sw $t8, 0x24($sp) -/* 0DA7F8 7F0A7E08 AFAC0018 */ sw $t4, 0x18($sp) -/* 0DA7FC 7F0A7E0C AFAD001C */ sw $t5, 0x1c($sp) -/* 0DA800 7F0A7E10 27A50878 */ addiu $a1, $sp, 0x878 -/* 0DA804 7F0A7E14 27A60874 */ addiu $a2, $sp, 0x874 -/* 0DA808 7F0A7E18 8FA70050 */ lw $a3, 0x50($sp) -/* 0DA80C 7F0A7E1C AFB00014 */ sw $s0, 0x14($sp) -/* 0DA810 7F0A7E20 AFA00028 */ sw $zero, 0x28($sp) -/* 0DA814 7F0A7E24 AFA2002C */ sw $v0, 0x2c($sp) -/* 0DA818 7F0A7E28 0FC2B66B */ jal textRenderOutlined -/* 0DA81C 7F0A7E2C AFAB0010 */ sw $t3, 0x10($sp) -/* 0DA820 7F0A7E30 AFA20930 */ sw $v0, 0x930($sp) -.L7F0A7E34: -/* 0DA824 7F0A7E34 0FC29DA4 */ jal sub_GAME_7F0A8378 -/* 0DA828 7F0A7E38 00000000 */ nop -.L7F0A7E3C: -/* 0DA82C 7F0A7E3C 8FBF003C */ lw $ra, 0x3c($sp) -.L7F0A7E40: -/* 0DA830 7F0A7E40 8FA20930 */ lw $v0, 0x930($sp) -/* 0DA834 7F0A7E44 8FB00038 */ lw $s0, 0x38($sp) -/* 0DA838 7F0A7E48 03E00008 */ jr $ra -/* 0DA83C 7F0A7E4C 27BD0930 */ addiu $sp, $sp, 0x930 -) -#endif - -#endif Gfx *unused_draw_watch_inventory_page(Gfx *gdl, Mtx *param_2) { @@ -5132,7 +2450,7 @@ Gfx *unused_draw_watch_inventory_page(Gfx *gdl, Mtx *param_2) { D_800409C4 = temp_1 - 1; } - sub_GAME_7F0A5B80(); + game_options_inventory_navigation(); gdl = microcode_constructor(gdl); textMeasure(&sp58, &sp54, long_name, pFontChars, pFontFile, 0); @@ -5143,7 +2461,7 @@ Gfx *unused_draw_watch_inventory_page(Gfx *gdl, Mtx *param_2) { sp6C = 0x1E; gdl = microcode_constructor_related_to_menus(gdl, temp_2, 0x1E, sp60, sp5C, 0x800050); - if (D_800409C0 != 0) + if (watch_inventory_text_is_settled) { sub_GAME_7F0A8378(); if (D_800409C4 == 0) @@ -5166,279 +2484,174 @@ Gfx *unused_draw_watch_inventory_page(Gfx *gdl, Mtx *param_2) { } -#ifdef NONMATCHING -void sub_GAME_7F0A8D40(void) { +/** + * Address: 7F0A8D40 + */ +void update_volume_slider_verts(struct WatchVertex *verts, f32 fill_amount, s32 transition_width) +{ + s32 i; + struct WatchVertex *vtx; + s32 xdiff; + s32 filledrightx; + xdiff = verts[2].coord1.x - verts[4].coord1.x; + transition_width = (s32) (((f32) transition_width) * (1.2f - fill_amount)); + i = 0; + vtx = verts; + + /** + * Verts 0-3: unfilled right section. + * Dark green. + */ + do + { + i++; + vtx++; + vtx[-1].color.r = 0x20; + vtx[-1].color.g = 0x40; + vtx[-1].color.b = 0x20; + vtx[-1].color.a = 0xE0; + } while (i < 4); + + i = 4; + vtx = &verts[4]; + + /** + * Verts 4-9: filled left section and transition. + * Verts 10 and 11: moving boundary between transition and unfilled section. + */ + do + { + filledrightx = xdiff + transition_width; + + if (i < 10) + { + // The filled section gets brighter as the volume increases. + s32 rb; + s32 g; + rb = ((s32) (48.0f * fill_amount)) + 0x40; + g = ((s32) (96.0f * fill_amount)) + 0x80; + vtx->color.r = rb; + vtx->color.g = g; + vtx->color.b = rb; + + // Left edge of the transition band. + if (i >= 6) + { + vtx->coord1.x = (s32) ((((f32) verts[4].coord1.x) + ((((f32) xdiff) + ((f32) transition_width)) * fill_amount)) - ((f32) transition_width)); + if (vtx->coord1.x < verts[4].coord1.x) + { + vtx->coord1.x = verts[4].coord1.x; + } + } + } + else + { + // Right edge of the transition band. + vtx->coord1.x = (s32) ((((f32) verts[4].coord1.x) + (((f32) filledrightx) * fill_amount)) + ((f32) transition_width)); + if (verts[2].coord1.x < vtx->coord1.x) + { + vtx->coord1.x = verts[2].coord1.x; + } + } + + i++; + vtx++; + + } while (i != 12); + + // Make the unfilled section begin at the right edge of the transition area. + filledrightx = verts[10].coord1.x; + verts[1].coord1.x = filledrightx; + verts[0].coord1.x = filledrightx; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80058534 -.word 0x3f99999a /*1.2*/ -.text -glabel sub_GAME_7F0A8D40 -/* 0DD870 7F0A8D40 44862000 */ mtc1 $a2, $f4 -/* 0DD874 7F0A8D44 3C018006 */ lui $at, %hi(D_80058534) -/* 0DD878 7F0A8D48 44856000 */ mtc1 $a1, $f12 -/* 0DD87C 7F0A8D4C C4288534 */ lwc1 $f8, %lo(D_80058534)($at) -/* 0DD880 7F0A8D50 468021A0 */ cvt.s.w $f6, $f4 -/* 0DD884 7F0A8D54 848E0020 */ lh $t6, 0x20($a0) -/* 0DD888 7F0A8D58 848F0040 */ lh $t7, 0x40($a0) -/* 0DD88C 7F0A8D5C 00002825 */ move $a1, $zero -/* 0DD890 7F0A8D60 00803825 */ move $a3, $a0 -/* 0DD894 7F0A8D64 460C4281 */ sub.s $f10, $f8, $f12 -/* 0DD898 7F0A8D68 240900E0 */ li $t1, 224 -/* 0DD89C 7F0A8D6C 24080040 */ li $t0, 64 -/* 0DD8A0 7F0A8D70 24030020 */ li $v1, 32 -/* 0DD8A4 7F0A8D74 460A3402 */ mul.s $f16, $f6, $f10 -/* 0DD8A8 7F0A8D78 01CF1023 */ subu $v0, $t6, $t7 -/* 0DD8AC 7F0A8D7C 4600848D */ trunc.w.s $f18, $f16 -/* 0DD8B0 7F0A8D80 44069000 */ mfc1 $a2, $f18 -/* 0DD8B4 7F0A8D84 00000000 */ nop -.L7F0A8D88: -/* 0DD8B8 7F0A8D88 24A50001 */ addiu $a1, $a1, 1 -/* 0DD8BC 7F0A8D8C 28A10004 */ slti $at, $a1, 4 -/* 0DD8C0 7F0A8D90 24E70010 */ addiu $a3, $a3, 0x10 -/* 0DD8C4 7F0A8D94 A0E3FFFC */ sb $v1, -4($a3) -/* 0DD8C8 7F0A8D98 A0E8FFFD */ sb $t0, -3($a3) -/* 0DD8CC 7F0A8D9C A0E3FFFE */ sb $v1, -2($a3) -/* 0DD8D0 7F0A8DA0 1420FFF9 */ bnez $at, .L7F0A8D88 -/* 0DD8D4 7F0A8DA4 A0E9FFFF */ sb $t1, -1($a3) -/* 0DD8D8 7F0A8DA8 3C0142C0 */ li $at, 0x42C00000 # 96.000000 -/* 0DD8DC 7F0A8DAC 44817000 */ mtc1 $at, $f14 -/* 0DD8E0 7F0A8DB0 3C014240 */ li $at, 0x42400000 # 48.000000 -/* 0DD8E4 7F0A8DB4 44811000 */ mtc1 $at, $f2 -/* 0DD8E8 7F0A8DB8 24050004 */ li $a1, 4 -/* 0DD8EC 7F0A8DBC 24870040 */ addiu $a3, $a0, 0x40 -/* 0DD8F0 7F0A8DC0 2408000C */ li $t0, 12 -.L7F0A8DC4: -/* 0DD8F4 7F0A8DC4 28A1000A */ slti $at, $a1, 0xa -/* 0DD8F8 7F0A8DC8 10200024 */ beqz $at, .L7F0A8E5C -/* 0DD8FC 7F0A8DCC 00465021 */ addu $t2, $v0, $a2 -/* 0DD900 7F0A8DD0 460C1102 */ mul.s $f4, $f2, $f12 -/* 0DD904 7F0A8DD4 28A10006 */ slti $at, $a1, 6 -/* 0DD908 7F0A8DD8 460C7182 */ mul.s $f6, $f14, $f12 -/* 0DD90C 7F0A8DDC 4600220D */ trunc.w.s $f8, $f4 -/* 0DD910 7F0A8DE0 4600328D */ trunc.w.s $f10, $f6 -/* 0DD914 7F0A8DE4 44034000 */ mfc1 $v1, $f8 -/* 0DD918 7F0A8DE8 440B5000 */ mfc1 $t3, $f10 -/* 0DD91C 7F0A8DEC 24630040 */ addiu $v1, $v1, 0x40 -/* 0DD920 7F0A8DF0 A0E3000C */ sb $v1, 0xc($a3) -/* 0DD924 7F0A8DF4 256C0080 */ addiu $t4, $t3, 0x80 -/* 0DD928 7F0A8DF8 A0EC000D */ sb $t4, 0xd($a3) -/* 0DD92C 7F0A8DFC 1420002D */ bnez $at, .L7F0A8EB4 -/* 0DD930 7F0A8E00 A0E3000E */ sb $v1, 0xe($a3) -/* 0DD934 7F0A8E04 44868000 */ mtc1 $a2, $f16 -/* 0DD938 7F0A8E08 44824000 */ mtc1 $v0, $f8 -/* 0DD93C 7F0A8E0C 848D0040 */ lh $t5, 0x40($a0) -/* 0DD940 7F0A8E10 46808020 */ cvt.s.w $f0, $f16 -/* 0DD944 7F0A8E14 448D9000 */ mtc1 $t5, $f18 -/* 0DD948 7F0A8E18 468041A0 */ cvt.s.w $f6, $f8 -/* 0DD94C 7F0A8E1C 46809120 */ cvt.s.w $f4, $f18 -/* 0DD950 7F0A8E20 46003280 */ add.s $f10, $f6, $f0 -/* 0DD954 7F0A8E24 460C5402 */ mul.s $f16, $f10, $f12 -/* 0DD958 7F0A8E28 46102480 */ add.s $f18, $f4, $f16 -/* 0DD95C 7F0A8E2C 46009201 */ sub.s $f8, $f18, $f0 -/* 0DD960 7F0A8E30 4600418D */ trunc.w.s $f6, $f8 -/* 0DD964 7F0A8E34 440F3000 */ mfc1 $t7, $f6 -/* 0DD968 7F0A8E38 00000000 */ nop -/* 0DD96C 7F0A8E3C A4EF0000 */ sh $t7, ($a3) -/* 0DD970 7F0A8E40 84F80000 */ lh $t8, ($a3) -/* 0DD974 7F0A8E44 84830040 */ lh $v1, 0x40($a0) -/* 0DD978 7F0A8E48 0303082A */ slt $at, $t8, $v1 -/* 0DD97C 7F0A8E4C 5020001A */ beql $at, $zero, .L7F0A8EB8 -/* 0DD980 7F0A8E50 24A50001 */ addiu $a1, $a1, 1 -/* 0DD984 7F0A8E54 10000017 */ b .L7F0A8EB4 -/* 0DD988 7F0A8E58 A4E30000 */ sh $v1, ($a3) -.L7F0A8E5C: -/* 0DD98C 7F0A8E5C 448A8000 */ mtc1 $t2, $f16 -/* 0DD990 7F0A8E60 84990040 */ lh $t9, 0x40($a0) -/* 0DD994 7F0A8E64 468084A0 */ cvt.s.w $f18, $f16 -/* 0DD998 7F0A8E68 44995000 */ mtc1 $t9, $f10 -/* 0DD99C 7F0A8E6C 00000000 */ nop -/* 0DD9A0 7F0A8E70 46805120 */ cvt.s.w $f4, $f10 -/* 0DD9A4 7F0A8E74 460C9202 */ mul.s $f8, $f18, $f12 -/* 0DD9A8 7F0A8E78 44865000 */ mtc1 $a2, $f10 -/* 0DD9AC 7F0A8E7C 00000000 */ nop -/* 0DD9B0 7F0A8E80 46805420 */ cvt.s.w $f16, $f10 -/* 0DD9B4 7F0A8E84 46082180 */ add.s $f6, $f4, $f8 -/* 0DD9B8 7F0A8E88 46103480 */ add.s $f18, $f6, $f16 -/* 0DD9BC 7F0A8E8C 4600910D */ trunc.w.s $f4, $f18 -/* 0DD9C0 7F0A8E90 440C2000 */ mfc1 $t4, $f4 -/* 0DD9C4 7F0A8E94 00000000 */ nop -/* 0DD9C8 7F0A8E98 A4EC0000 */ sh $t4, ($a3) -/* 0DD9CC 7F0A8E9C 84ED0000 */ lh $t5, ($a3) -/* 0DD9D0 7F0A8EA0 84830020 */ lh $v1, 0x20($a0) -/* 0DD9D4 7F0A8EA4 006D082A */ slt $at, $v1, $t5 -/* 0DD9D8 7F0A8EA8 50200003 */ beql $at, $zero, .L7F0A8EB8 -/* 0DD9DC 7F0A8EAC 24A50001 */ addiu $a1, $a1, 1 -/* 0DD9E0 7F0A8EB0 A4E30000 */ sh $v1, ($a3) -.L7F0A8EB4: -/* 0DD9E4 7F0A8EB4 24A50001 */ addiu $a1, $a1, 1 -.L7F0A8EB8: -/* 0DD9E8 7F0A8EB8 14A8FFC2 */ bne $a1, $t0, .L7F0A8DC4 -/* 0DD9EC 7F0A8EBC 24E70010 */ addiu $a3, $a3, 0x10 -/* 0DD9F0 7F0A8EC0 848200A0 */ lh $v0, 0xa0($a0) -/* 0DD9F4 7F0A8EC4 A4820010 */ sh $v0, 0x10($a0) -/* 0DD9F8 7F0A8EC8 03E00008 */ jr $ra -/* 0DD9FC 7F0A8ECC A4820000 */ sh $v0, ($a0) -) -#endif -void sub_GAME_7F0A8ED0(u16* arg0) { - s32 sp1C; - s32 temp_v1; - sp1C = joyGetStickX(PLAYER_1); - temp_v1 = *arg0; + +/** + * Address: 7F0A8ED0 + */ +void watch_adjust_volume_slider(u16* outVolume) { + s32 joy_x; + s32 adjusted_volume; + + joy_x = joyGetStickX(PLAYER_1); + adjusted_volume = *outVolume; if (joyGetButtons(PLAYER_1, R_CBUTTONS|R_TRIG|R_JPAD)) { - temp_v1 = temp_v1 + 0x400; + adjusted_volume = adjusted_volume + WATCH_VOL_ADJUST_STEP; } else if (joyGetButtons(PLAYER_1, L_CBUTTONS|L_TRIG|L_JPAD)) { - temp_v1 = temp_v1 - 0x400; + adjusted_volume = adjusted_volume - WATCH_VOL_ADJUST_STEP; } - if (sp1C >= 0x47) { - sp1C = 0x46; - } else if (sp1C < -0x46) { - sp1C = -0x46; + // Clamp stick deflection + if (joy_x >= 0x47) { + joy_x = 0x46; + } else if (joy_x < -0x46) { + joy_x = -0x46; } - if (sp1C >= 8) { - temp_v1 += (sp1C * 0x800 + -0x3800) / 0x46; - } else if (sp1C < -7) { - temp_v1 += (sp1C * 0x800 + 0x3800) / 0x46; + // Increase volume + if (joy_x >= 8) { + adjusted_volume += (joy_x * 0x800 + -0x3800) / 0x46; + // Decrease volume + } else if (joy_x < -7) { + adjusted_volume += (joy_x * 0x800 + 0x3800) / 0x46; } - if (temp_v1 >= 0x8000) { - *arg0 = 0x7FFF; - } else if (temp_v1 < 0) { - *arg0 = 0; + // Clamp volume between min and max allowed volume. + if (adjusted_volume >= VOLUME_MAX + 1) { + *outVolume = VOLUME_MAX; + } else if (adjusted_volume < 0) { + *outVolume = 0; } else { - *arg0 = temp_v1; + *outVolume = adjusted_volume; } } +/** + * Address: 7F0A8FEC + */ +Gfx *draw_fx_volume_slider(Gfx *gdl) +{ + u16 volume; + f32 fvolume; + struct WatchVertex *vtx1; + struct WatchVertex *vtx; + Gfx *cmd; + vtx1 = (struct WatchVertex *)dynAllocateVertices(12); + volume = sndGetSfxSlotFirstNaturalVolume(); -#ifdef NONMATCHING -void sub_GAME_7F0A8FEC(void) { + if (watch_item_is_actively_selected && game_options_index == 1) + { + watch_adjust_volume_slider(&volume); + } + fvolume = (f32)(u32)volume / 32767.0f; + + sndApplyVolumeAllSfxSlot(volume); + + if (1); + + cmd = gdl++; + gDPSetRenderMode(cmd, G_RM_XLU_SURF, G_RM_XLU_SURF2); + + gdl = sub_GAME_7F0A3B40(gdl, OS_K0_TO_PHYSICAL(vtx1)); + vtx = setup_watch_rectangles(vtx1, 0, 0, 600, 20, -299, -205); + + gdl = sub_GAME_7F0A3B40(gdl, OS_K0_TO_PHYSICAL(vtx)); + vtx = setup_watch_rectangles(vtx, 0, 0, 600, 20, -299, -205); + + gdl = sub_GAME_7F0A3B40(gdl, OS_K0_TO_PHYSICAL(vtx)); + setup_watch_rectangles(vtx, 0, 0, 600, 20, -299, -205); + + update_volume_slider_verts(vtx1, fvolume, 30); + + return gdl; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80058538 -.word 0x46fffe00 /*32767.0*/ -.text -glabel sub_GAME_7F0A8FEC -/* 0DDB1C 7F0A8FEC 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0DDB20 7F0A8FF0 AFB00028 */ sw $s0, 0x28($sp) -/* 0DDB24 7F0A8FF4 00808025 */ move $s0, $a0 -/* 0DDB28 7F0A8FF8 AFBF002C */ sw $ra, 0x2c($sp) -/* 0DDB2C 7F0A8FFC 0FC2F5B1 */ jal dynAllocate7F0BD6C4 -/* 0DDB30 7F0A9000 2404000C */ li $a0, 12 -/* 0DDB34 7F0A9004 0C002472 */ jal sndGetSfxSlotFirstNaturalVolume -/* 0DDB38 7F0A9008 AFA2003C */ sw $v0, 0x3c($sp) -/* 0DDB3C 7F0A900C 3C0E8004 */ lui $t6, %hi(watch_item_is_actively_selected) -/* 0DDB40 7F0A9010 8DCE09A8 */ lw $t6, %lo(watch_item_is_actively_selected)($t6) -/* 0DDB44 7F0A9014 A7A20046 */ sh $v0, 0x46($sp) -/* 0DDB48 7F0A9018 3C0F8004 */ lui $t7, %hi(game_options_index) -/* 0DDB4C 7F0A901C 51C00008 */ beql $t6, $zero, .L7F0A9040 -/* 0DDB50 7F0A9020 97B80046 */ lhu $t8, 0x46($sp) -/* 0DDB54 7F0A9024 8DEF099C */ lw $t7, %lo(game_options_index)($t7) -/* 0DDB58 7F0A9028 24010001 */ li $at, 1 -/* 0DDB5C 7F0A902C 55E10004 */ bnel $t7, $at, .L7F0A9040 -/* 0DDB60 7F0A9030 97B80046 */ lhu $t8, 0x46($sp) -/* 0DDB64 7F0A9034 0FC2A3B4 */ jal sub_GAME_7F0A8ED0 -/* 0DDB68 7F0A9038 27A40046 */ addiu $a0, $sp, 0x46 -/* 0DDB6C 7F0A903C 97B80046 */ lhu $t8, 0x46($sp) -.L7F0A9040: -/* 0DDB70 7F0A9040 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0DDB74 7F0A9044 44982000 */ mtc1 $t8, $f4 -/* 0DDB78 7F0A9048 07010004 */ bgez $t8, .L7F0A905C -/* 0DDB7C 7F0A904C 468021A0 */ cvt.s.w $f6, $f4 -/* 0DDB80 7F0A9050 44814000 */ mtc1 $at, $f8 -/* 0DDB84 7F0A9054 00000000 */ nop -/* 0DDB88 7F0A9058 46083180 */ add.s $f6, $f6, $f8 -.L7F0A905C: -/* 0DDB8C 7F0A905C 3C018006 */ lui $at, %hi(D_80058538) -/* 0DDB90 7F0A9060 C42A8538 */ lwc1 $f10, %lo(D_80058538)($at) -/* 0DDB94 7F0A9064 03002025 */ move $a0, $t8 -/* 0DDB98 7F0A9068 460A3403 */ div.s $f16, $f6, $f10 -/* 0DDB9C 7F0A906C 0C00247A */ jal sndApplyVolumeAllSfxSlot -/* 0DDBA0 7F0A9070 E7B00040 */ swc1 $f16, 0x40($sp) -/* 0DDBA4 7F0A9074 02001025 */ move $v0, $s0 -/* 0DDBA8 7F0A9078 3C19B900 */ lui $t9, (0xB900031D >> 16) # lui $t9, 0xb900 -/* 0DDBAC 7F0A907C 3C080050 */ lui $t0, (0x00504240 >> 16) # lui $t0, 0x50 -/* 0DDBB0 7F0A9080 35084240 */ ori $t0, (0x00504240 & 0xFFFF) # ori $t0, $t0, 0x4240 -/* 0DDBB4 7F0A9084 3739031D */ ori $t9, (0xB900031D & 0xFFFF) # ori $t9, $t9, 0x31d -/* 0DDBB8 7F0A9088 AC590000 */ sw $t9, ($v0) -/* 0DDBBC 7F0A908C AC480004 */ sw $t0, 4($v0) -/* 0DDBC0 7F0A9090 8FA5003C */ lw $a1, 0x3c($sp) -/* 0DDBC4 7F0A9094 3C018000 */ lui $at, 0x8000 -/* 0DDBC8 7F0A9098 26040008 */ addiu $a0, $s0, 8 -/* 0DDBCC 7F0A909C 0FC28ED0 */ jal sub_GAME_7F0A3B40 -/* 0DDBD0 7F0A90A0 00A12821 */ addu $a1, $a1, $at -/* 0DDBD4 7F0A90A4 24090014 */ li $t1, 20 -/* 0DDBD8 7F0A90A8 240AFED5 */ li $t2, -299 -/* 0DDBDC 7F0A90AC 240BFF33 */ li $t3, -205 -/* 0DDBE0 7F0A90B0 00408025 */ move $s0, $v0 -/* 0DDBE4 7F0A90B4 AFAB0018 */ sw $t3, 0x18($sp) -/* 0DDBE8 7F0A90B8 AFAA0014 */ sw $t2, 0x14($sp) -/* 0DDBEC 7F0A90BC AFA90010 */ sw $t1, 0x10($sp) -/* 0DDBF0 7F0A90C0 8FA4003C */ lw $a0, 0x3c($sp) -/* 0DDBF4 7F0A90C4 00002825 */ move $a1, $zero -/* 0DDBF8 7F0A90C8 00003025 */ move $a2, $zero -/* 0DDBFC 7F0A90CC 0FC28EAE */ jal setup_watch_rectangles -/* 0DDC00 7F0A90D0 24070258 */ li $a3, 600 -/* 0DDC04 7F0A90D4 3C018000 */ lui $at, 0x8000 -/* 0DDC08 7F0A90D8 AFA20038 */ sw $v0, 0x38($sp) -/* 0DDC0C 7F0A90DC 00412821 */ addu $a1, $v0, $at -/* 0DDC10 7F0A90E0 0FC28ED0 */ jal sub_GAME_7F0A3B40 -/* 0DDC14 7F0A90E4 02002025 */ move $a0, $s0 -/* 0DDC18 7F0A90E8 240C0014 */ li $t4, 20 -/* 0DDC1C 7F0A90EC 240DFED5 */ li $t5, -299 -/* 0DDC20 7F0A90F0 240EFF33 */ li $t6, -205 -/* 0DDC24 7F0A90F4 00408025 */ move $s0, $v0 -/* 0DDC28 7F0A90F8 AFAE0018 */ sw $t6, 0x18($sp) -/* 0DDC2C 7F0A90FC AFAD0014 */ sw $t5, 0x14($sp) -/* 0DDC30 7F0A9100 AFAC0010 */ sw $t4, 0x10($sp) -/* 0DDC34 7F0A9104 8FA40038 */ lw $a0, 0x38($sp) -/* 0DDC38 7F0A9108 00002825 */ move $a1, $zero -/* 0DDC3C 7F0A910C 00003025 */ move $a2, $zero -/* 0DDC40 7F0A9110 0FC28EAE */ jal setup_watch_rectangles -/* 0DDC44 7F0A9114 24070258 */ li $a3, 600 -/* 0DDC48 7F0A9118 3C018000 */ lui $at, 0x8000 -/* 0DDC4C 7F0A911C AFA20038 */ sw $v0, 0x38($sp) -/* 0DDC50 7F0A9120 00412821 */ addu $a1, $v0, $at -/* 0DDC54 7F0A9124 0FC28ED0 */ jal sub_GAME_7F0A3B40 -/* 0DDC58 7F0A9128 02002025 */ move $a0, $s0 -/* 0DDC5C 7F0A912C 240F0014 */ li $t7, 20 -/* 0DDC60 7F0A9130 2418FED5 */ li $t8, -299 -/* 0DDC64 7F0A9134 2419FF33 */ li $t9, -205 -/* 0DDC68 7F0A9138 00408025 */ move $s0, $v0 -/* 0DDC6C 7F0A913C AFB90018 */ sw $t9, 0x18($sp) -/* 0DDC70 7F0A9140 AFB80014 */ sw $t8, 0x14($sp) -/* 0DDC74 7F0A9144 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DDC78 7F0A9148 8FA40038 */ lw $a0, 0x38($sp) -/* 0DDC7C 7F0A914C 00002825 */ move $a1, $zero -/* 0DDC80 7F0A9150 00003025 */ move $a2, $zero -/* 0DDC84 7F0A9154 0FC28EAE */ jal setup_watch_rectangles -/* 0DDC88 7F0A9158 24070258 */ li $a3, 600 -/* 0DDC8C 7F0A915C 8FA4003C */ lw $a0, 0x3c($sp) -/* 0DDC90 7F0A9160 8FA50040 */ lw $a1, 0x40($sp) -/* 0DDC94 7F0A9164 0FC2A350 */ jal sub_GAME_7F0A8D40 -/* 0DDC98 7F0A9168 2406001E */ li $a2, 30 -/* 0DDC9C 7F0A916C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0DDCA0 7F0A9170 02001025 */ move $v0, $s0 -/* 0DDCA4 7F0A9174 8FB00028 */ lw $s0, 0x28($sp) -/* 0DDCA8 7F0A9178 03E00008 */ jr $ra -/* 0DDCAC 7F0A917C 27BD0048 */ addiu $sp, $sp, 0x48 -) -#endif u16 call_sndGetSfxSlotFirstNaturalVolume(void) { @@ -5451,121 +2664,46 @@ void sub_GAME_7F0A91A0(u16 arg0) { } -#ifdef NONMATCHING -void sub_GAME_7F0A91C8(void) { +/** + * Address: 7F0A91C8 + */ +Gfx *draw_music_volume_slider(Gfx *gdl) +{ + u16 volume; + f32 fvolume; + struct WatchVertex *vtx1; + struct WatchVertex *vtx; + Gfx *cmd; + vtx1 = (struct WatchVertex *)dynAllocateVertices(12); + volume = get_mTrack2Vol(); + + if (watch_item_is_actively_selected && game_options_index == 0) { + watch_adjust_volume_slider(&volume); + } + + fvolume = (f32)(u32)volume / 32767.0f; + set_mTrack2Vol(volume); + + if(1); + + cmd = gdl++; + gDPSetRenderMode(cmd, G_RM_XLU_SURF, G_RM_XLU_SURF2); + + gdl = sub_GAME_7F0A3B40(gdl, OS_K0_TO_PHYSICAL(vtx1)); + vtx = setup_watch_rectangles(vtx1, 0, 0, 600, 20, -299, -275); + + + gdl = sub_GAME_7F0A3B40(gdl, OS_K0_TO_PHYSICAL(vtx)); + vtx = setup_watch_rectangles(vtx, 0, 0, 600, 20, -299, -275); + + gdl = sub_GAME_7F0A3B40(gdl, OS_K0_TO_PHYSICAL(vtx)); + setup_watch_rectangles(vtx, 0, 0, 600, 20, -299, -275); + + update_volume_slider_verts(vtx1, fvolume, 30); + + return gdl; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_8005853C -.word 0x46fffe00 /*32767.0*/ -.text -glabel sub_GAME_7F0A91C8 -/* 0DDCF8 7F0A91C8 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0DDCFC 7F0A91CC AFB00028 */ sw $s0, 0x28($sp) -/* 0DDD00 7F0A91D0 00808025 */ move $s0, $a0 -/* 0DDD04 7F0A91D4 AFBF002C */ sw $ra, 0x2c($sp) -/* 0DDD08 7F0A91D8 0FC2F5B1 */ jal dynAllocate7F0BD6C4 -/* 0DDD0C 7F0A91DC 2404000C */ li $a0, 12 -/* 0DDD10 7F0A91E0 0FC2A4D6 */ jal get_mTrack2Vol -/* 0DDD14 7F0A91E4 AFA2003C */ sw $v0, 0x3c($sp) -/* 0DDD18 7F0A91E8 3C0E8004 */ lui $t6, %hi(watch_item_is_actively_selected) -/* 0DDD1C 7F0A91EC 8DCE09A8 */ lw $t6, %lo(watch_item_is_actively_selected)($t6) -/* 0DDD20 7F0A91F0 A7A20046 */ sh $v0, 0x46($sp) -/* 0DDD24 7F0A91F4 3C0F8004 */ lui $t7, %hi(game_options_index) -/* 0DDD28 7F0A91F8 51C00007 */ beql $t6, $zero, .L7F0A9218 -/* 0DDD2C 7F0A91FC 97B80046 */ lhu $t8, 0x46($sp) -/* 0DDD30 7F0A9200 8DEF099C */ lw $t7, %lo(game_options_index)($t7) -/* 0DDD34 7F0A9204 55E00004 */ bnezl $t7, .L7F0A9218 -/* 0DDD38 7F0A9208 97B80046 */ lhu $t8, 0x46($sp) -/* 0DDD3C 7F0A920C 0FC2A3B4 */ jal sub_GAME_7F0A8ED0 -/* 0DDD40 7F0A9210 27A40046 */ addiu $a0, $sp, 0x46 -/* 0DDD44 7F0A9214 97B80046 */ lhu $t8, 0x46($sp) -.L7F0A9218: -/* 0DDD48 7F0A9218 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0DDD4C 7F0A921C 44982000 */ mtc1 $t8, $f4 -/* 0DDD50 7F0A9220 07010004 */ bgez $t8, .L7F0A9234 -/* 0DDD54 7F0A9224 468021A0 */ cvt.s.w $f6, $f4 -/* 0DDD58 7F0A9228 44814000 */ mtc1 $at, $f8 -/* 0DDD5C 7F0A922C 00000000 */ nop -/* 0DDD60 7F0A9230 46083180 */ add.s $f6, $f6, $f8 -.L7F0A9234: -/* 0DDD64 7F0A9234 3C018006 */ lui $at, %hi(D_8005853C) -/* 0DDD68 7F0A9238 C42A853C */ lwc1 $f10, %lo(D_8005853C)($at) -/* 0DDD6C 7F0A923C 03002025 */ move $a0, $t8 -/* 0DDD70 7F0A9240 460A3403 */ div.s $f16, $f6, $f10 -/* 0DDD74 7F0A9244 0FC2A4D9 */ jal set_mTrack2Vol -/* 0DDD78 7F0A9248 E7B00040 */ swc1 $f16, 0x40($sp) -/* 0DDD7C 7F0A924C 02001025 */ move $v0, $s0 -/* 0DDD80 7F0A9250 3C19B900 */ lui $t9, (0xB900031D >> 16) # lui $t9, 0xb900 -/* 0DDD84 7F0A9254 3C080050 */ lui $t0, (0x00504240 >> 16) # lui $t0, 0x50 -/* 0DDD88 7F0A9258 35084240 */ ori $t0, (0x00504240 & 0xFFFF) # ori $t0, $t0, 0x4240 -/* 0DDD8C 7F0A925C 3739031D */ ori $t9, (0xB900031D & 0xFFFF) # ori $t9, $t9, 0x31d -/* 0DDD90 7F0A9260 AC590000 */ sw $t9, ($v0) -/* 0DDD94 7F0A9264 AC480004 */ sw $t0, 4($v0) -/* 0DDD98 7F0A9268 8FA5003C */ lw $a1, 0x3c($sp) -/* 0DDD9C 7F0A926C 3C018000 */ lui $at, 0x8000 -/* 0DDDA0 7F0A9270 26040008 */ addiu $a0, $s0, 8 -/* 0DDDA4 7F0A9274 0FC28ED0 */ jal sub_GAME_7F0A3B40 -/* 0DDDA8 7F0A9278 00A12821 */ addu $a1, $a1, $at -/* 0DDDAC 7F0A927C 24090014 */ li $t1, 20 -/* 0DDDB0 7F0A9280 240AFED5 */ li $t2, -299 -/* 0DDDB4 7F0A9284 240BFEED */ li $t3, -275 -/* 0DDDB8 7F0A9288 00408025 */ move $s0, $v0 -/* 0DDDBC 7F0A928C AFAB0018 */ sw $t3, 0x18($sp) -/* 0DDDC0 7F0A9290 AFAA0014 */ sw $t2, 0x14($sp) -/* 0DDDC4 7F0A9294 AFA90010 */ sw $t1, 0x10($sp) -/* 0DDDC8 7F0A9298 8FA4003C */ lw $a0, 0x3c($sp) -/* 0DDDCC 7F0A929C 00002825 */ move $a1, $zero -/* 0DDDD0 7F0A92A0 00003025 */ move $a2, $zero -/* 0DDDD4 7F0A92A4 0FC28EAE */ jal setup_watch_rectangles -/* 0DDDD8 7F0A92A8 24070258 */ li $a3, 600 -/* 0DDDDC 7F0A92AC 3C018000 */ lui $at, 0x8000 -/* 0DDDE0 7F0A92B0 AFA20038 */ sw $v0, 0x38($sp) -/* 0DDDE4 7F0A92B4 00412821 */ addu $a1, $v0, $at -/* 0DDDE8 7F0A92B8 0FC28ED0 */ jal sub_GAME_7F0A3B40 -/* 0DDDEC 7F0A92BC 02002025 */ move $a0, $s0 -/* 0DDDF0 7F0A92C0 240C0014 */ li $t4, 20 -/* 0DDDF4 7F0A92C4 240DFED5 */ li $t5, -299 -/* 0DDDF8 7F0A92C8 240EFEED */ li $t6, -275 -/* 0DDDFC 7F0A92CC 00408025 */ move $s0, $v0 -/* 0DDE00 7F0A92D0 AFAE0018 */ sw $t6, 0x18($sp) -/* 0DDE04 7F0A92D4 AFAD0014 */ sw $t5, 0x14($sp) -/* 0DDE08 7F0A92D8 AFAC0010 */ sw $t4, 0x10($sp) -/* 0DDE0C 7F0A92DC 8FA40038 */ lw $a0, 0x38($sp) -/* 0DDE10 7F0A92E0 00002825 */ move $a1, $zero -/* 0DDE14 7F0A92E4 00003025 */ move $a2, $zero -/* 0DDE18 7F0A92E8 0FC28EAE */ jal setup_watch_rectangles -/* 0DDE1C 7F0A92EC 24070258 */ li $a3, 600 -/* 0DDE20 7F0A92F0 3C018000 */ lui $at, 0x8000 -/* 0DDE24 7F0A92F4 AFA20038 */ sw $v0, 0x38($sp) -/* 0DDE28 7F0A92F8 00412821 */ addu $a1, $v0, $at -/* 0DDE2C 7F0A92FC 0FC28ED0 */ jal sub_GAME_7F0A3B40 -/* 0DDE30 7F0A9300 02002025 */ move $a0, $s0 -/* 0DDE34 7F0A9304 240F0014 */ li $t7, 20 -/* 0DDE38 7F0A9308 2418FED5 */ li $t8, -299 -/* 0DDE3C 7F0A930C 2419FEED */ li $t9, -275 -/* 0DDE40 7F0A9310 00408025 */ move $s0, $v0 -/* 0DDE44 7F0A9314 AFB90018 */ sw $t9, 0x18($sp) -/* 0DDE48 7F0A9318 AFB80014 */ sw $t8, 0x14($sp) -/* 0DDE4C 7F0A931C AFAF0010 */ sw $t7, 0x10($sp) -/* 0DDE50 7F0A9320 8FA40038 */ lw $a0, 0x38($sp) -/* 0DDE54 7F0A9324 00002825 */ move $a1, $zero -/* 0DDE58 7F0A9328 00003025 */ move $a2, $zero -/* 0DDE5C 7F0A932C 0FC28EAE */ jal setup_watch_rectangles -/* 0DDE60 7F0A9330 24070258 */ li $a3, 600 -/* 0DDE64 7F0A9334 8FA4003C */ lw $a0, 0x3c($sp) -/* 0DDE68 7F0A9338 8FA50040 */ lw $a1, 0x40($sp) -/* 0DDE6C 7F0A933C 0FC2A350 */ jal sub_GAME_7F0A8D40 -/* 0DDE70 7F0A9340 2406001E */ li $a2, 30 -/* 0DDE74 7F0A9344 8FBF002C */ lw $ra, 0x2c($sp) -/* 0DDE78 7F0A9348 02001025 */ move $v0, $s0 -/* 0DDE7C 7F0A934C 8FB00028 */ lw $s0, 0x28($sp) -/* 0DDE80 7F0A9350 03E00008 */ jr $ra -/* 0DDE84 7F0A9354 27BD0048 */ addiu $sp, $sp, 0x48 -) -#endif u16 get_mTrack2Vol(void) @@ -5573,6 +2711,7 @@ u16 get_mTrack2Vol(void) return mTrack2Vol; } + void set_mTrack2Vol(u16 param_1) { mTrack2Vol = param_1; @@ -5580,164 +2719,75 @@ void set_mTrack2Vol(u16 param_1) } -#ifdef NONMATCHING -void sub_GAME_7F0A9398(void) { +/** + * Address: 7F0A9398 + * + * This draws the text for the toggle options (both option titles and values). + * It also draws button names and the actions mapped to them on the controller screen. + */ +Gfx *draw_options_labels(Gfx *gdl, s32 x, s32 y, char *text, u32 colour, s32 outlined, u32 outlinecolour, s32 centre, s32 drawbg, u32 bgcolour, s32 rightalign) +{ + s32 textx; + s32 textright; + s32 textbottom; + s32 textwidth; + s32 textheight; + struct font *font; + struct fontchar *chars; + font = ptrFontBankGothic; + chars = ptrFontBankGothicChars; + + textMeasure(&textheight, &textwidth, text, chars, font, 10); + + if (centre) + { + textx = x - (textwidth / 2); + } + else if (rightalign) + { + textx = x - textwidth; + } + else + { + textx = x; + } + + textright = textx + textwidth; + textbottom = y + textheight; + + if (g_WatchBackgroundGreen < 0xe0) + { + /** + * Increases the effect of fuzzy static mode on the text, + * making text pixels more subject to disappearing or almost disappearing. + */ + gDPSetRenderMode(gdl++, G_RM_AA_PCL_SURF, G_RM_AA_PCL_SURF2); + } + else + { + gDPSetRenderMode(gdl++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2); + } + + if (drawbg) + { + gdl = microcode_constructor_related_to_menus(gdl, textx - 1, (y + outlined) + 1, textright + 1, textbottom + 1, bgcolour); + } + + gDPSetRenderMode(gdl++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2); + + if (!outlined) + { + gdl = textRender(gdl, &textx, &y, text, chars, font, colour, textwidth, textheight, 0, 10); + } + + if (outlined) + { + gdl = textRenderOutlined(gdl, &textx, &y, text, chars, font, colour, outlinecolour, textwidth + 1, textheight, 0, 10); + } + + return gdl; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A9398 -/* 0DDEC8 7F0A9398 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 0DDECC 7F0A939C AFA70074 */ sw $a3, 0x74($sp) -/* 0DDED0 7F0A93A0 3C028004 */ lui $v0, %hi(ptrFontBankGothic) -/* 0DDED4 7F0A93A4 8C420EAC */ lw $v0, %lo(ptrFontBankGothic)($v0) -/* 0DDED8 7F0A93A8 3C078004 */ lui $a3, %hi(ptrFontBankGothicChars) -/* 0DDEDC 7F0A93AC 8CE70EB0 */ lw $a3, %lo(ptrFontBankGothicChars)($a3) -/* 0DDEE0 7F0A93B0 AFB00038 */ sw $s0, 0x38($sp) -/* 0DDEE4 7F0A93B4 00808025 */ move $s0, $a0 -/* 0DDEE8 7F0A93B8 AFBF003C */ sw $ra, 0x3c($sp) -/* 0DDEEC 7F0A93BC AFA5006C */ sw $a1, 0x6c($sp) -/* 0DDEF0 7F0A93C0 AFA60070 */ sw $a2, 0x70($sp) -/* 0DDEF4 7F0A93C4 240E000A */ li $t6, 10 -/* 0DDEF8 7F0A93C8 AFAE0014 */ sw $t6, 0x14($sp) -/* 0DDEFC 7F0A93CC 8FA60074 */ lw $a2, 0x74($sp) -/* 0DDF00 7F0A93D0 27A50058 */ addiu $a1, $sp, 0x58 -/* 0DDF04 7F0A93D4 27A40054 */ addiu $a0, $sp, 0x54 -/* 0DDF08 7F0A93D8 AFA20010 */ sw $v0, 0x10($sp) -/* 0DDF0C 7F0A93DC AFA20050 */ sw $v0, 0x50($sp) -/* 0DDF10 7F0A93E0 0FC2BA63 */ jal textMeasure -/* 0DDF14 7F0A93E4 AFA7004C */ sw $a3, 0x4c($sp) -/* 0DDF18 7F0A93E8 8FAF0084 */ lw $t7, 0x84($sp) -/* 0DDF1C 7F0A93EC 8FA2006C */ lw $v0, 0x6c($sp) -/* 0DDF20 7F0A93F0 8FAC0058 */ lw $t4, 0x58($sp) -/* 0DDF24 7F0A93F4 11E00008 */ beqz $t7, .L7F0A9418 -/* 0DDF28 7F0A93F8 8FAD0070 */ lw $t5, 0x70($sp) -/* 0DDF2C 7F0A93FC 8FB80058 */ lw $t8, 0x58($sp) -/* 0DDF30 7F0A9400 07010003 */ bgez $t8, .L7F0A9410 -/* 0DDF34 7F0A9404 0018C843 */ sra $t9, $t8, 1 -/* 0DDF38 7F0A9408 27010001 */ addiu $at, $t8, 1 -/* 0DDF3C 7F0A940C 0001C843 */ sra $t9, $at, 1 -.L7F0A9410: -/* 0DDF40 7F0A9410 10000008 */ b .L7F0A9434 -/* 0DDF44 7F0A9414 00594823 */ subu $t1, $v0, $t9 -.L7F0A9418: -/* 0DDF48 7F0A9418 8FAA0090 */ lw $t2, 0x90($sp) -/* 0DDF4C 7F0A941C 8FAB0058 */ lw $t3, 0x58($sp) -/* 0DDF50 7F0A9420 00404825 */ move $t1, $v0 -/* 0DDF54 7F0A9424 11400003 */ beqz $t2, .L7F0A9434 -/* 0DDF58 7F0A9428 00000000 */ nop -/* 0DDF5C 7F0A942C 10000001 */ b .L7F0A9434 -/* 0DDF60 7F0A9430 004B4823 */ subu $t1, $v0, $t3 -.L7F0A9434: -/* 0DDF64 7F0A9434 3C0F8004 */ lui $t7, %hi(g_WatchBackgroundGreen) -/* 0DDF68 7F0A9438 8DEF0B04 */ lw $t7, %lo(g_WatchBackgroundGreen)($t7) -/* 0DDF6C 7F0A943C 8FAE0054 */ lw $t6, 0x54($sp) -/* 0DDF70 7F0A9440 012C1821 */ addu $v1, $t1, $t4 -/* 0DDF74 7F0A9444 29E100E0 */ slti $at, $t7, 0xe0 -/* 0DDF78 7F0A9448 AFA90064 */ sw $t1, 0x64($sp) -/* 0DDF7C 7F0A944C 1020000A */ beqz $at, .L7F0A9478 -/* 0DDF80 7F0A9450 01AE4021 */ addu $t0, $t5, $t6 -/* 0DDF84 7F0A9454 02001025 */ move $v0, $s0 -/* 0DDF88 7F0A9458 3C18B900 */ lui $t8, (0xB900031D >> 16) # lui $t8, 0xb900 -/* 0DDF8C 7F0A945C 3C190050 */ lui $t9, (0x0050004B >> 16) # lui $t9, 0x50 -/* 0DDF90 7F0A9460 3739004B */ ori $t9, (0x0050004B & 0xFFFF) # ori $t9, $t9, 0x4b -/* 0DDF94 7F0A9464 3718031D */ ori $t8, (0xB900031D & 0xFFFF) # ori $t8, $t8, 0x31d -/* 0DDF98 7F0A9468 AC580000 */ sw $t8, ($v0) -/* 0DDF9C 7F0A946C AC590004 */ sw $t9, 4($v0) -/* 0DDFA0 7F0A9470 10000009 */ b .L7F0A9498 -/* 0DDFA4 7F0A9474 26100008 */ addiu $s0, $s0, 8 -.L7F0A9478: -/* 0DDFA8 7F0A9478 02001025 */ move $v0, $s0 -/* 0DDFAC 7F0A947C 3C0AB900 */ lui $t2, (0xB900031D >> 16) # lui $t2, 0xb900 -/* 0DDFB0 7F0A9480 3C0B0050 */ lui $t3, (0x005041C8 >> 16) # lui $t3, 0x50 -/* 0DDFB4 7F0A9484 356B41C8 */ ori $t3, (0x005041C8 & 0xFFFF) # ori $t3, $t3, 0x41c8 -/* 0DDFB8 7F0A9488 354A031D */ ori $t2, (0xB900031D & 0xFFFF) # ori $t2, $t2, 0x31d -/* 0DDFBC 7F0A948C AC4A0000 */ sw $t2, ($v0) -/* 0DDFC0 7F0A9490 AC4B0004 */ sw $t3, 4($v0) -/* 0DDFC4 7F0A9494 26100008 */ addiu $s0, $s0, 8 -.L7F0A9498: -/* 0DDFC8 7F0A9498 8FAC0088 */ lw $t4, 0x88($sp) -/* 0DDFCC 7F0A949C 8FA90064 */ lw $t1, 0x64($sp) -/* 0DDFD0 7F0A94A0 02002025 */ move $a0, $s0 -/* 0DDFD4 7F0A94A4 1180000D */ beqz $t4, .L7F0A94DC -/* 0DDFD8 7F0A94A8 2525FFFF */ addiu $a1, $t1, -1 -/* 0DDFDC 7F0A94AC 8FAD0070 */ lw $t5, 0x70($sp) -/* 0DDFE0 7F0A94B0 8FAE007C */ lw $t6, 0x7c($sp) -/* 0DDFE4 7F0A94B4 8FB8008C */ lw $t8, 0x8c($sp) -/* 0DDFE8 7F0A94B8 250F0001 */ addiu $t7, $t0, 1 -/* 0DDFEC 7F0A94BC 01AE3021 */ addu $a2, $t5, $t6 -/* 0DDFF0 7F0A94C0 24C60001 */ addiu $a2, $a2, 1 -/* 0DDFF4 7F0A94C4 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DDFF8 7F0A94C8 24670001 */ addiu $a3, $v1, 1 -/* 0DDFFC 7F0A94CC AFA90064 */ sw $t1, 0x64($sp) -/* 0DE000 7F0A94D0 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0DE004 7F0A94D4 AFB80014 */ sw $t8, 0x14($sp) -/* 0DE008 7F0A94D8 00408025 */ move $s0, $v0 -.L7F0A94DC: -/* 0DE00C 7F0A94DC 02001025 */ move $v0, $s0 -/* 0DE010 7F0A94E0 3C19B900 */ lui $t9, (0xB900031D >> 16) # lui $t9, 0xb900 -/* 0DE014 7F0A94E4 3C0A0050 */ lui $t2, (0x005041C8 >> 16) # lui $t2, 0x50 -/* 0DE018 7F0A94E8 354A41C8 */ ori $t2, (0x005041C8 & 0xFFFF) # ori $t2, $t2, 0x41c8 -/* 0DE01C 7F0A94EC 3739031D */ ori $t9, (0xB900031D & 0xFFFF) # ori $t9, $t9, 0x31d -/* 0DE020 7F0A94F0 AC590000 */ sw $t9, ($v0) -/* 0DE024 7F0A94F4 AC4A0004 */ sw $t2, 4($v0) -/* 0DE028 7F0A94F8 8FAB007C */ lw $t3, 0x7c($sp) -/* 0DE02C 7F0A94FC 26100008 */ addiu $s0, $s0, 8 -/* 0DE030 7F0A9500 02002025 */ move $a0, $s0 -/* 0DE034 7F0A9504 15600012 */ bnez $t3, .L7F0A9550 -/* 0DE038 7F0A9508 27A50064 */ addiu $a1, $sp, 0x64 -/* 0DE03C 7F0A950C 8FAC004C */ lw $t4, 0x4c($sp) -/* 0DE040 7F0A9510 8FAD0050 */ lw $t5, 0x50($sp) -/* 0DE044 7F0A9514 8FAE0078 */ lw $t6, 0x78($sp) -/* 0DE048 7F0A9518 8FAF0058 */ lw $t7, 0x58($sp) -/* 0DE04C 7F0A951C 8FB80054 */ lw $t8, 0x54($sp) -/* 0DE050 7F0A9520 2419000A */ li $t9, 10 -/* 0DE054 7F0A9524 AFB90028 */ sw $t9, 0x28($sp) -/* 0DE058 7F0A9528 27A60070 */ addiu $a2, $sp, 0x70 -/* 0DE05C 7F0A952C 8FA70074 */ lw $a3, 0x74($sp) -/* 0DE060 7F0A9530 AFA00024 */ sw $zero, 0x24($sp) -/* 0DE064 7F0A9534 AFAC0010 */ sw $t4, 0x10($sp) -/* 0DE068 7F0A9538 AFAD0014 */ sw $t5, 0x14($sp) -/* 0DE06C 7F0A953C AFAE0018 */ sw $t6, 0x18($sp) -/* 0DE070 7F0A9540 AFAF001C */ sw $t7, 0x1c($sp) -/* 0DE074 7F0A9544 0FC2B6AF */ jal textRender -/* 0DE078 7F0A9548 AFB80020 */ sw $t8, 0x20($sp) -/* 0DE07C 7F0A954C 00408025 */ move $s0, $v0 -.L7F0A9550: -/* 0DE080 7F0A9550 8FAA007C */ lw $t2, 0x7c($sp) -/* 0DE084 7F0A9554 02002025 */ move $a0, $s0 -/* 0DE088 7F0A9558 27A50064 */ addiu $a1, $sp, 0x64 -/* 0DE08C 7F0A955C 11400014 */ beqz $t2, .L7F0A95B0 -/* 0DE090 7F0A9560 27A60070 */ addiu $a2, $sp, 0x70 -/* 0DE094 7F0A9564 8FAF0058 */ lw $t7, 0x58($sp) -/* 0DE098 7F0A9568 8FAB004C */ lw $t3, 0x4c($sp) -/* 0DE09C 7F0A956C 8FAC0050 */ lw $t4, 0x50($sp) -/* 0DE0A0 7F0A9570 8FAD0078 */ lw $t5, 0x78($sp) -/* 0DE0A4 7F0A9574 8FAE0080 */ lw $t6, 0x80($sp) -/* 0DE0A8 7F0A9578 8FB90054 */ lw $t9, 0x54($sp) -/* 0DE0AC 7F0A957C 240A000A */ li $t2, 10 -/* 0DE0B0 7F0A9580 25F80001 */ addiu $t8, $t7, 1 -/* 0DE0B4 7F0A9584 AFB80020 */ sw $t8, 0x20($sp) -/* 0DE0B8 7F0A9588 AFAA002C */ sw $t2, 0x2c($sp) -/* 0DE0BC 7F0A958C 8FA70074 */ lw $a3, 0x74($sp) -/* 0DE0C0 7F0A9590 AFA00028 */ sw $zero, 0x28($sp) -/* 0DE0C4 7F0A9594 AFAB0010 */ sw $t3, 0x10($sp) -/* 0DE0C8 7F0A9598 AFAC0014 */ sw $t4, 0x14($sp) -/* 0DE0CC 7F0A959C AFAD0018 */ sw $t5, 0x18($sp) -/* 0DE0D0 7F0A95A0 AFAE001C */ sw $t6, 0x1c($sp) -/* 0DE0D4 7F0A95A4 0FC2B9BB */ jal textRenderOutlined -/* 0DE0D8 7F0A95A8 AFB90024 */ sw $t9, 0x24($sp) -/* 0DE0DC 7F0A95AC 00408025 */ move $s0, $v0 -.L7F0A95B0: -/* 0DE0E0 7F0A95B0 8FBF003C */ lw $ra, 0x3c($sp) -/* 0DE0E4 7F0A95B4 02001025 */ move $v0, $s0 -/* 0DE0E8 7F0A95B8 8FB00038 */ lw $s0, 0x38($sp) -/* 0DE0EC 7F0A95BC 03E00008 */ jr $ra -/* 0DE0F0 7F0A95C0 27BD0068 */ addiu $sp, $sp, 0x68 -) -#endif - f32 sub_GAME_7F0A95C4(f32 param_1, f32 param_2, f32 param_3) @@ -5754,10 +2804,10 @@ f32 sub_GAME_7F0A95C4(f32 param_1, f32 param_2, f32 param_3) s32 sub_GAME_7F0A9610(void) { - if ((D_80040B24 < 0.1f) && - (D_80040B24 > -0.1f) && - (D_80040B20 < 0.1f) && - (D_80040B20 > -0.1f)) + if ((g_WatchControllerSpinAngle < 0.1f) && + (g_WatchControllerSpinAngle > -0.1f) && + (g_WatchControllerPitch < 0.1f) && + (g_WatchControllerPitch > -0.1f)) { return 1; @@ -5766,2330 +2816,345 @@ s32 sub_GAME_7F0A9610(void) { return 0; } -#ifdef NONMATCHING -void sub_GAME_7F0A9684(void) { +void sub_GAME_7F0A9684(s8 contpadnum, s32 *counter, f32 *value, f32 *step) +{ + s32 count; + + if ((joyGetStickX(contpadnum) >= 10) || (joyGetStickX(contpadnum) < -9)) + { + if (watch_item_is_actively_selected) + { + count = 0; + + if (controller_options_index == 1) + { + goto zero_done; + } + } + } + + count = *counter; + + if (count < 100) + { + count = (*counter = count + 1); + count = *counter; + } + + goto counter_done; + +zero_done: + *counter = 0; + +counter_done: + if (count >= 100) + { + *value = sub_GAME_7F0A95C4(*value, (-(*step)) / 10.0f, 4.0f); + } + else if (watch_item_is_actively_selected && (controller_options_index == 1)) + { + *value = sub_GAME_7F0A95C4(*value, (((-((f32) joyGetStickX(contpadnum))) * 0.2f) * M_TAU_F) / 360.0f, 4.0f); + } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80058548 -.word 0x3e4ccccd /*0.2*/ -glabel D_8005854C -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F0A9684 -/* 0DE1B4 7F0A9684 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0DE1B8 7F0A9688 AFBF0014 */ sw $ra, 0x14($sp) -/* 0DE1BC 7F0A968C AFA40018 */ sw $a0, 0x18($sp) -/* 0DE1C0 7F0A9690 AFA60020 */ sw $a2, 0x20($sp) -/* 0DE1C4 7F0A9694 AFA70024 */ sw $a3, 0x24($sp) -/* 0DE1C8 7F0A9698 83A4001B */ lb $a0, 0x1b($sp) -/* 0DE1CC 7F0A969C 0C00303B */ jal joyGetStickX -/* 0DE1D0 7F0A96A0 AFA5001C */ sw $a1, 0x1c($sp) -/* 0DE1D4 7F0A96A4 2841000A */ slti $at, $v0, 0xa -/* 0DE1D8 7F0A96A8 10200007 */ beqz $at, .L7F0A96C8 -/* 0DE1DC 7F0A96AC 8FA5001C */ lw $a1, 0x1c($sp) -/* 0DE1E0 7F0A96B0 83A4001B */ lb $a0, 0x1b($sp) -/* 0DE1E4 7F0A96B4 0C00303B */ jal joyGetStickX -/* 0DE1E8 7F0A96B8 AFA5001C */ sw $a1, 0x1c($sp) -/* 0DE1EC 7F0A96BC 2841FFF7 */ slti $at, $v0, -9 -/* 0DE1F0 7F0A96C0 1020000B */ beqz $at, .L7F0A96F0 -/* 0DE1F4 7F0A96C4 8FA5001C */ lw $a1, 0x1c($sp) -.L7F0A96C8: -/* 0DE1F8 7F0A96C8 3C0E8004 */ lui $t6, %hi(watch_item_is_actively_selected) -/* 0DE1FC 7F0A96CC 8DCE09A8 */ lw $t6, %lo(watch_item_is_actively_selected)($t6) -/* 0DE200 7F0A96D0 3C0F8004 */ lui $t7, %hi(controller_options_index) -/* 0DE204 7F0A96D4 51C00007 */ beql $t6, $zero, .L7F0A96F4 -/* 0DE208 7F0A96D8 8CA20000 */ lw $v0, ($a1) -/* 0DE20C 7F0A96DC 8DEF0998 */ lw $t7, %lo(controller_options_index)($t7) -/* 0DE210 7F0A96E0 24010001 */ li $at, 1 -/* 0DE214 7F0A96E4 00001025 */ move $v0, $zero -/* 0DE218 7F0A96E8 51E10009 */ beql $t7, $at, .L7F0A9710 -/* 0DE21C 7F0A96EC ACA00000 */ sw $zero, ($a1) -.L7F0A96F0: -/* 0DE220 7F0A96F0 8CA20000 */ lw $v0, ($a1) -.L7F0A96F4: -/* 0DE224 7F0A96F4 28410064 */ slti $at, $v0, 0x64 -/* 0DE228 7F0A96F8 10200005 */ beqz $at, .L7F0A9710 -/* 0DE22C 7F0A96FC 24580001 */ addiu $t8, $v0, 1 -/* 0DE230 7F0A9700 ACB80000 */ sw $t8, ($a1) -/* 0DE234 7F0A9704 10000002 */ b .L7F0A9710 -/* 0DE238 7F0A9708 03001025 */ move $v0, $t8 -/* 0DE23C 7F0A970C ACA00000 */ sw $zero, ($a1) -.L7F0A9710: -/* 0DE240 7F0A9710 28410064 */ slti $at, $v0, 0x64 -/* 0DE244 7F0A9714 1420000E */ bnez $at, .L7F0A9750 -/* 0DE248 7F0A9718 3C0A8004 */ lui $t2, %hi(watch_item_is_actively_selected) -/* 0DE24C 7F0A971C 8FA80024 */ lw $t0, 0x24($sp) -/* 0DE250 7F0A9720 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 0DE254 7F0A9724 44814000 */ mtc1 $at, $f8 -/* 0DE258 7F0A9728 C5040000 */ lwc1 $f4, ($t0) -/* 0DE25C 7F0A972C 8FB90020 */ lw $t9, 0x20($sp) -/* 0DE260 7F0A9730 3C064080 */ lui $a2, 0x4080 -/* 0DE264 7F0A9734 46002187 */ neg.s $f6, $f4 -/* 0DE268 7F0A9738 C72C0000 */ lwc1 $f12, ($t9) -/* 0DE26C 7F0A973C 0FC2A571 */ jal sub_GAME_7F0A95C4 -/* 0DE270 7F0A9740 46083383 */ div.s $f14, $f6, $f8 -/* 0DE274 7F0A9744 8FA90020 */ lw $t1, 0x20($sp) -/* 0DE278 7F0A9748 1000001D */ b .L7F0A97C0 -/* 0DE27C 7F0A974C E5200000 */ swc1 $f0, ($t1) -.L7F0A9750: -/* 0DE280 7F0A9750 8D4A09A8 */ lw $t2, %lo(watch_item_is_actively_selected)($t2) -/* 0DE284 7F0A9754 3C0B8004 */ lui $t3, %hi(controller_options_index) -/* 0DE288 7F0A9758 5140001A */ beql $t2, $zero, .L7F0A97C4 -/* 0DE28C 7F0A975C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0DE290 7F0A9760 8D6B0998 */ lw $t3, %lo(controller_options_index)($t3) -/* 0DE294 7F0A9764 24010001 */ li $at, 1 -/* 0DE298 7F0A9768 55610016 */ bnel $t3, $at, .L7F0A97C4 -/* 0DE29C 7F0A976C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0DE2A0 7F0A9770 0C00303B */ jal joyGetStickX -/* 0DE2A4 7F0A9774 83A4001B */ lb $a0, 0x1b($sp) -/* 0DE2A8 7F0A9778 44825000 */ mtc1 $v0, $f10 -/* 0DE2AC 7F0A977C 3C018006 */ lui $at, %hi(D_80058548) -/* 0DE2B0 7F0A9780 C4248548 */ lwc1 $f4, %lo(D_80058548)($at) -/* 0DE2B4 7F0A9784 46805420 */ cvt.s.w $f16, $f10 -/* 0DE2B8 7F0A9788 3C018006 */ lui $at, %hi(D_8005854C) -/* 0DE2BC 7F0A978C C428854C */ lwc1 $f8, %lo(D_8005854C)($at) -/* 0DE2C0 7F0A9790 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DE2C4 7F0A9794 8FAC0020 */ lw $t4, 0x20($sp) -/* 0DE2C8 7F0A9798 3C064080 */ lui $a2, 0x4080 -/* 0DE2CC 7F0A979C 46008487 */ neg.s $f18, $f16 -/* 0DE2D0 7F0A97A0 44818000 */ mtc1 $at, $f16 -/* 0DE2D4 7F0A97A4 46049182 */ mul.s $f6, $f18, $f4 -/* 0DE2D8 7F0A97A8 C58C0000 */ lwc1 $f12, ($t4) -/* 0DE2DC 7F0A97AC 46083282 */ mul.s $f10, $f6, $f8 -/* 0DE2E0 7F0A97B0 0FC2A571 */ jal sub_GAME_7F0A95C4 -/* 0DE2E4 7F0A97B4 46105383 */ div.s $f14, $f10, $f16 -/* 0DE2E8 7F0A97B8 8FAD0020 */ lw $t5, 0x20($sp) -/* 0DE2EC 7F0A97BC E5A00000 */ swc1 $f0, ($t5) -.L7F0A97C0: -/* 0DE2F0 7F0A97C0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0A97C4: -/* 0DE2F4 7F0A97C4 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0DE2F8 7F0A97C8 03E00008 */ jr $ra -/* 0DE2FC 7F0A97CC 00000000 */ nop -) -#endif +/** + * Address: 7F0A97D0 + */ +Gfx *draw_controller_style_text(Gfx *gdl) +{ + char pad[12]; + char text[2000]; + s32 x; + s32 y; + s32 i; + u16 *stringids; + s32 textheight; + s32 textwidth; + struct font *font; + struct fontchar *chars; + s32 tmp; + u8 *selectedtext; + font = ptrFontBankGothic; + chars = ptrFontBankGothicChars; + textheight = 0; + textwidth = 0; + text[0] = '\0'; + i = 0; + if (D_800409D8 > 0) + { + stringids = game_control_styles; -#ifdef NONMATCHING -void sub_GAME_7F0A97D0(void) { + do + { + strcat(text, langGet(*stringids)); + i++; + stringids += 10; + if (i); + } + while (i < D_800409D8); + } + if (watch_item_is_actively_selected) + { + if (controller_options_index == CONTROLLER_OPTIONS_INDEX_STYLE) + { + sub_GAME_7F0A611C(&g_CurrentPlayer->cur_player_control_type_2, &g_CurrentPlayer->cur_player_control_type_0, D_800409D8, &g_CurrentPlayer->neg_vspacing_for_control_type_entry, &g_CurrentPlayer->cur_player_control_type_1, (s32 *) (&g_CurrentPlayer->has_set_control_type_data), 0, 1, (j_text_trigger) ? (0xe) : (0xa)); + } + } + + x = 0xaa; + tmp = j_text_trigger; + y = 0x1a; + + textMeasure(&textheight, &textwidth, text, chars, font, (tmp) ? (0xe) : (0xa)); + + i = (j_text_trigger) ? (0xe) : (0xa); + + gdl = textRender(gdl, &x, &y, text, chars, font, 0x00aa00b0, textwidth, i, g_CurrentPlayer->neg_vspacing_for_control_type_entry, (j_text_trigger) ? (0xe) : (0xa)); + + if (g_CurrentPlayer->has_set_control_type_data != 0) + { + selectedtext = langGet(*(u16 *)((u8 *) game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20))); + + textMeasure(&textheight, &textwidth, selectedtext, chars, font, (j_text_trigger) ? (0xe) : (0xa)); + + x = 0xaa; + + if (j_text_trigger ? 1 : 0) + { + goto selected_y_set; + } + + goto selected_y_set; + +selected_y_set: + y = 0x1a; + + selectedtext = langGet(*(u16 *)((u8 *) game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20))); + + gdl = textRender(gdl, &x, &y, selectedtext, chars, font, 0xa0ffa0f0, textwidth, 0x64, 0, (j_text_trigger) ? (0xe) : (0xa)); + } + + return gdl; } -#else -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A97D0 -/* 0DE300 7F0A97D0 27BDF7B0 */ addiu $sp, $sp, -0x850 -/* 0DE304 7F0A97D4 3C068004 */ lui $a2, %hi(D_800409D8) -/* 0DE308 7F0A97D8 8CC609D8 */ lw $a2, %lo(D_800409D8)($a2) -/* 0DE30C 7F0A97DC 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) -/* 0DE310 7F0A97E0 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) -/* 0DE314 7F0A97E4 8DCE0EAC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0DE318 7F0A97E8 8DEF0EB0 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0DE31C 7F0A97EC AFB00034 */ sw $s0, 0x34($sp) -/* 0DE320 7F0A97F0 AFBF003C */ sw $ra, 0x3c($sp) -/* 0DE324 7F0A97F4 AFB10038 */ sw $s1, 0x38($sp) -/* 0DE328 7F0A97F8 AFA40850 */ sw $a0, 0x850($sp) -/* 0DE32C 7F0A97FC AFA00060 */ sw $zero, 0x60($sp) -/* 0DE330 7F0A9800 AFA0005C */ sw $zero, 0x5c($sp) -/* 0DE334 7F0A9804 A3A00074 */ sb $zero, 0x74($sp) -/* 0DE338 7F0A9808 00008025 */ move $s0, $zero -/* 0DE33C 7F0A980C AFAE0058 */ sw $t6, 0x58($sp) -/* 0DE340 7F0A9810 18C0000F */ blez $a2, .L7F0A9850 -/* 0DE344 7F0A9814 AFAF0054 */ sw $t7, 0x54($sp) -/* 0DE348 7F0A9818 3C118004 */ lui $s1, %hi(D_800409DC) -/* 0DE34C 7F0A981C 263109DC */ addiu $s1, %lo(D_800409DC) # addiu $s1, $s1, 0x9dc -.L7F0A9820: -/* 0DE350 7F0A9820 0FC30776 */ jal langGet -/* 0DE354 7F0A9824 96240000 */ lhu $a0, ($s1) -/* 0DE358 7F0A9828 27A40074 */ addiu $a0, $sp, 0x74 -/* 0DE35C 7F0A982C 0C0029FF */ jal strcat -/* 0DE360 7F0A9830 00402825 */ move $a1, $v0 -/* 0DE364 7F0A9834 3C068004 */ lui $a2, %hi(D_800409D8) -/* 0DE368 7F0A9838 8CC609D8 */ lw $a2, %lo(D_800409D8)($a2) -/* 0DE36C 7F0A983C 26100001 */ addiu $s0, $s0, 1 -/* 0DE370 7F0A9840 26310014 */ addiu $s1, $s1, 0x14 -/* 0DE374 7F0A9844 0206082A */ slt $at, $s0, $a2 -/* 0DE378 7F0A9848 1420FFF5 */ bnez $at, .L7F0A9820 -/* 0DE37C 7F0A984C 00000000 */ nop -.L7F0A9850: -/* 0DE380 7F0A9850 3C188004 */ lui $t8, %hi(watch_item_is_actively_selected) -/* 0DE384 7F0A9854 8F1809A8 */ lw $t8, %lo(watch_item_is_actively_selected)($t8) -/* 0DE388 7F0A9858 3C198004 */ lui $t9, %hi(controller_options_index) -/* 0DE38C 7F0A985C 13000019 */ beqz $t8, .L7F0A98C4 -/* 0DE390 7F0A9860 00000000 */ nop -/* 0DE394 7F0A9864 8F390998 */ lw $t9, %lo(controller_options_index)($t9) -/* 0DE398 7F0A9868 3C118005 */ lui $s1, %hi(j_text_trigger) -/* 0DE39C 7F0A986C 263184D0 */ addiu $s1, %lo(j_text_trigger) # addiu $s1, $s1, -0x7b30 -/* 0DE3A0 7F0A9870 17200014 */ bnez $t9, .L7F0A98C4 -/* 0DE3A4 7F0A9874 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0DE3A8 7F0A9878 8E280000 */ lw $t0, ($s1) -/* 0DE3AC 7F0A987C 240B0001 */ li $t3, 1 -/* 0DE3B0 7F0A9880 2402000A */ li $v0, 10 -/* 0DE3B4 7F0A9884 11000003 */ beqz $t0, .L7F0A9894 -/* 0DE3B8 7F0A9888 00000000 */ nop -/* 0DE3BC 7F0A988C 10000001 */ b .L7F0A9894 -/* 0DE3C0 7F0A9890 2402000E */ li $v0, 14 -.L7F0A9894: -/* 0DE3C4 7F0A9894 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0DE3C8 7F0A9898 AFA00018 */ sw $zero, 0x18($sp) -/* 0DE3CC 7F0A989C AFAB001C */ sw $t3, 0x1c($sp) -/* 0DE3D0 7F0A98A0 24692A5C */ addiu $t1, $v1, 0x2a5c -/* 0DE3D4 7F0A98A4 246A2A68 */ addiu $t2, $v1, 0x2a68 -/* 0DE3D8 7F0A98A8 AFAA0014 */ sw $t2, 0x14($sp) -/* 0DE3DC 7F0A98AC AFA90010 */ sw $t1, 0x10($sp) -/* 0DE3E0 7F0A98B0 AFA20020 */ sw $v0, 0x20($sp) -/* 0DE3E4 7F0A98B4 24642A60 */ addiu $a0, $v1, 0x2a60 -/* 0DE3E8 7F0A98B8 24652A58 */ addiu $a1, $v1, 0x2a58 -/* 0DE3EC 7F0A98BC 0FC29847 */ jal sub_GAME_7F0A611C -/* 0DE3F0 7F0A98C0 24672A64 */ addiu $a3, $v1, 0x2a64 -.L7F0A98C4: -/* 0DE3F4 7F0A98C4 3C118005 */ lui $s1, %hi(j_text_trigger) -/* 0DE3F8 7F0A98C8 263184D0 */ addiu $s1, %lo(j_text_trigger) # addiu $s1, $s1, -0x7b30 -/* 0DE3FC 7F0A98CC 8E220000 */ lw $v0, ($s1) -/* 0DE400 7F0A98D0 240C00AA */ li $t4, 170 -/* 0DE404 7F0A98D4 240D001A */ li $t5, 26 -/* 0DE408 7F0A98D8 AFAC0070 */ sw $t4, 0x70($sp) -/* 0DE40C 7F0A98DC 10400003 */ beqz $v0, .L7F0A98EC -/* 0DE410 7F0A98E0 AFAD006C */ sw $t5, 0x6c($sp) -/* 0DE414 7F0A98E4 10000002 */ b .L7F0A98F0 -/* 0DE418 7F0A98E8 2402000E */ li $v0, 14 -.L7F0A98EC: -/* 0DE41C 7F0A98EC 2402000A */ li $v0, 10 -.L7F0A98F0: -/* 0DE420 7F0A98F0 8FAE0058 */ lw $t6, 0x58($sp) -/* 0DE424 7F0A98F4 27A40060 */ addiu $a0, $sp, 0x60 -/* 0DE428 7F0A98F8 27A5005C */ addiu $a1, $sp, 0x5c -/* 0DE42C 7F0A98FC 27A60074 */ addiu $a2, $sp, 0x74 -/* 0DE430 7F0A9900 8FA70054 */ lw $a3, 0x54($sp) -/* 0DE434 7F0A9904 AFA20014 */ sw $v0, 0x14($sp) -/* 0DE438 7F0A9908 0FC2BA63 */ jal textMeasure -/* 0DE43C 7F0A990C AFAE0010 */ sw $t6, 0x10($sp) -/* 0DE440 7F0A9910 8E220000 */ lw $v0, ($s1) -/* 0DE444 7F0A9914 8FA40850 */ lw $a0, 0x850($sp) -/* 0DE448 7F0A9918 27A50070 */ addiu $a1, $sp, 0x70 -/* 0DE44C 7F0A991C 10400003 */ beqz $v0, .L7F0A992C -/* 0DE450 7F0A9920 27A6006C */ addiu $a2, $sp, 0x6c -/* 0DE454 7F0A9924 10000002 */ b .L7F0A9930 -/* 0DE458 7F0A9928 2410000E */ li $s0, 14 -.L7F0A992C: -/* 0DE45C 7F0A992C 2410000A */ li $s0, 10 -.L7F0A9930: -/* 0DE460 7F0A9930 10400003 */ beqz $v0, .L7F0A9940 -/* 0DE464 7F0A9934 27A70074 */ addiu $a3, $sp, 0x74 -/* 0DE468 7F0A9938 10000002 */ b .L7F0A9944 -/* 0DE46C 7F0A993C 2402000E */ li $v0, 14 -.L7F0A9940: -/* 0DE470 7F0A9940 2402000A */ li $v0, 10 -.L7F0A9944: -/* 0DE474 7F0A9944 8FAF0054 */ lw $t7, 0x54($sp) -/* 0DE478 7F0A9948 8FB80058 */ lw $t8, 0x58($sp) -/* 0DE47C 7F0A994C 8FA8005C */ lw $t0, 0x5c($sp) -/* 0DE480 7F0A9950 3C098008 */ lui $t1, %hi(g_CurrentPlayer) -/* 0DE484 7F0A9954 8D29A0B0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0DE488 7F0A9958 3C1900AA */ lui $t9, (0x00AA00B0 >> 16) # lui $t9, 0xaa -/* 0DE48C 7F0A995C 373900B0 */ ori $t9, (0x00AA00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DE490 7F0A9960 AFB90018 */ sw $t9, 0x18($sp) -/* 0DE494 7F0A9964 AFB00020 */ sw $s0, 0x20($sp) -/* 0DE498 7F0A9968 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DE49C 7F0A996C AFB80014 */ sw $t8, 0x14($sp) -/* 0DE4A0 7F0A9970 AFA8001C */ sw $t0, 0x1c($sp) -/* 0DE4A4 7F0A9974 8D2A2A64 */ lw $t2, 0x2a64($t1) -/* 0DE4A8 7F0A9978 AFA20028 */ sw $v0, 0x28($sp) -/* 0DE4AC 7F0A997C 0FC2B6AF */ jal textRender -/* 0DE4B0 7F0A9980 AFAA0024 */ sw $t2, 0x24($sp) -/* 0DE4B4 7F0A9984 3C038008 */ lui $v1, %hi(g_CurrentPlayer) -/* 0DE4B8 7F0A9988 8C63A0B0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0DE4BC 7F0A998C AFA20850 */ sw $v0, 0x850($sp) -/* 0DE4C0 7F0A9990 8C6B2A68 */ lw $t3, 0x2a68($v1) -/* 0DE4C4 7F0A9994 51600043 */ beql $t3, $zero, .L7F0A9AA4 -/* 0DE4C8 7F0A9998 8FBF003C */ lw $ra, 0x3c($sp) -/* 0DE4CC 7F0A999C 8C6C2A58 */ lw $t4, 0x2a58($v1) -/* 0DE4D0 7F0A99A0 3C048004 */ lui $a0, %hi(D_800409DC) -/* 0DE4D4 7F0A99A4 000C6880 */ sll $t5, $t4, 2 -/* 0DE4D8 7F0A99A8 01AC6821 */ addu $t5, $t5, $t4 -/* 0DE4DC 7F0A99AC 000D6880 */ sll $t5, $t5, 2 -/* 0DE4E0 7F0A99B0 008D2021 */ addu $a0, $a0, $t5 -/* 0DE4E4 7F0A99B4 0FC30776 */ jal langGet -/* 0DE4E8 7F0A99B8 948409DC */ lhu $a0, %lo(D_800409DC)($a0) -/* 0DE4EC 7F0A99BC 8E2E0000 */ lw $t6, ($s1) -/* 0DE4F0 7F0A99C0 00408025 */ move $s0, $v0 -/* 0DE4F4 7F0A99C4 27A40060 */ addiu $a0, $sp, 0x60 -/* 0DE4F8 7F0A99C8 11C00003 */ beqz $t6, .L7F0A99D8 -/* 0DE4FC 7F0A99CC 27A5005C */ addiu $a1, $sp, 0x5c -/* 0DE500 7F0A99D0 10000002 */ b .L7F0A99DC -/* 0DE504 7F0A99D4 2402000E */ li $v0, 14 -.L7F0A99D8: -/* 0DE508 7F0A99D8 2402000A */ li $v0, 10 -.L7F0A99DC: -/* 0DE50C 7F0A99DC 8FAF0058 */ lw $t7, 0x58($sp) -/* 0DE510 7F0A99E0 02003025 */ move $a2, $s0 -/* 0DE514 7F0A99E4 8FA70054 */ lw $a3, 0x54($sp) -/* 0DE518 7F0A99E8 AFA20014 */ sw $v0, 0x14($sp) -/* 0DE51C 7F0A99EC 0FC2BA63 */ jal textMeasure -/* 0DE520 7F0A99F0 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DE524 7F0A99F4 8E390000 */ lw $t9, ($s1) -/* 0DE528 7F0A99F8 241800AA */ li $t8, 170 -/* 0DE52C 7F0A99FC AFB80070 */ sw $t8, 0x70($sp) -/* 0DE530 7F0A9A00 13200003 */ beqz $t9, .L7F0A9A10 -/* 0DE534 7F0A9A04 3C098008 */ lui $t1, %hi(g_CurrentPlayer) -/* 0DE538 7F0A9A08 10000001 */ b .L7F0A9A10 -/* 0DE53C 7F0A9A0C 00000000 */ nop -.L7F0A9A10: -/* 0DE540 7F0A9A10 8D29A0B0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0DE544 7F0A9A14 2408001A */ li $t0, 26 -/* 0DE548 7F0A9A18 AFA8006C */ sw $t0, 0x6c($sp) -/* 0DE54C 7F0A9A1C 8D2A2A58 */ lw $t2, 0x2a58($t1) -/* 0DE550 7F0A9A20 3C048004 */ lui $a0, %hi(D_800409DC) -/* 0DE554 7F0A9A24 000A5880 */ sll $t3, $t2, 2 -/* 0DE558 7F0A9A28 016A5821 */ addu $t3, $t3, $t2 -/* 0DE55C 7F0A9A2C 000B5880 */ sll $t3, $t3, 2 -/* 0DE560 7F0A9A30 008B2021 */ addu $a0, $a0, $t3 -/* 0DE564 7F0A9A34 0FC30776 */ jal langGet -/* 0DE568 7F0A9A38 948409DC */ lhu $a0, %lo(D_800409DC)($a0) -/* 0DE56C 7F0A9A3C 8E2C0000 */ lw $t4, ($s1) -/* 0DE570 7F0A9A40 00408025 */ move $s0, $v0 -/* 0DE574 7F0A9A44 8FA40850 */ lw $a0, 0x850($sp) -/* 0DE578 7F0A9A48 11800003 */ beqz $t4, .L7F0A9A58 -/* 0DE57C 7F0A9A4C 27A50070 */ addiu $a1, $sp, 0x70 -/* 0DE580 7F0A9A50 10000002 */ b .L7F0A9A5C -/* 0DE584 7F0A9A54 2402000E */ li $v0, 14 -.L7F0A9A58: -/* 0DE588 7F0A9A58 2402000A */ li $v0, 10 -.L7F0A9A5C: -/* 0DE58C 7F0A9A5C 8FAD0054 */ lw $t5, 0x54($sp) -/* 0DE590 7F0A9A60 8FAE0058 */ lw $t6, 0x58($sp) -/* 0DE594 7F0A9A64 8FB8005C */ lw $t8, 0x5c($sp) -/* 0DE598 7F0A9A68 3C0FA0FF */ lui $t7, (0xA0FFA0F0 >> 16) # lui $t7, 0xa0ff -/* 0DE59C 7F0A9A6C 35EFA0F0 */ ori $t7, (0xA0FFA0F0 & 0xFFFF) # ori $t7, $t7, 0xa0f0 -/* 0DE5A0 7F0A9A70 24190064 */ li $t9, 100 -/* 0DE5A4 7F0A9A74 AFB90020 */ sw $t9, 0x20($sp) -/* 0DE5A8 7F0A9A78 AFAF0018 */ sw $t7, 0x18($sp) -/* 0DE5AC 7F0A9A7C 27A6006C */ addiu $a2, $sp, 0x6c -/* 0DE5B0 7F0A9A80 02003825 */ move $a3, $s0 -/* 0DE5B4 7F0A9A84 AFA00024 */ sw $zero, 0x24($sp) -/* 0DE5B8 7F0A9A88 AFA20028 */ sw $v0, 0x28($sp) -/* 0DE5BC 7F0A9A8C AFAD0010 */ sw $t5, 0x10($sp) -/* 0DE5C0 7F0A9A90 AFAE0014 */ sw $t6, 0x14($sp) -/* 0DE5C4 7F0A9A94 0FC2B6AF */ jal textRender -/* 0DE5C8 7F0A9A98 AFB8001C */ sw $t8, 0x1c($sp) -/* 0DE5CC 7F0A9A9C AFA20850 */ sw $v0, 0x850($sp) -/* 0DE5D0 7F0A9AA0 8FBF003C */ lw $ra, 0x3c($sp) -.L7F0A9AA4: -/* 0DE5D4 7F0A9AA4 8FA20850 */ lw $v0, 0x850($sp) -/* 0DE5D8 7F0A9AA8 8FB00034 */ lw $s0, 0x34($sp) -/* 0DE5DC 7F0A9AAC 8FB10038 */ lw $s1, 0x38($sp) -/* 0DE5E0 7F0A9AB0 03E00008 */ jr $ra -/* 0DE5E4 7F0A9AB4 27BD0850 */ addiu $sp, $sp, 0x850 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A97D0 -/* 0DB500 7F0A8B10 27BDF7B0 */ addiu $sp, $sp, -0x850 -/* 0DB504 7F0A8B14 3C068004 */ lui $a2, %hi(D_800409D8) # $a2, 0x8004 -/* 0DB508 7F0A8B18 8CC6A628 */ lw $a2, %lo(D_800409D8)($a2) -/* 0DB50C 7F0A8B1C 3C0E8004 */ lui $t6, %hi(ptrFontBankGothic) # $t6, 0x8004 -/* 0DB510 7F0A8B20 3C0F8004 */ lui $t7, %hi(ptrFontBankGothicChars) # $t7, 0x8004 -/* 0DB514 7F0A8B24 8DCEAAFC */ lw $t6, %lo(ptrFontBankGothic)($t6) -/* 0DB518 7F0A8B28 8DEFAB00 */ lw $t7, %lo(ptrFontBankGothicChars)($t7) -/* 0DB51C 7F0A8B2C AFB00034 */ sw $s0, 0x34($sp) -/* 0DB520 7F0A8B30 AFBF003C */ sw $ra, 0x3c($sp) -/* 0DB524 7F0A8B34 AFB10038 */ sw $s1, 0x38($sp) -/* 0DB528 7F0A8B38 AFA40850 */ sw $a0, 0x850($sp) -/* 0DB52C 7F0A8B3C AFA00060 */ sw $zero, 0x60($sp) -/* 0DB530 7F0A8B40 AFA0005C */ sw $zero, 0x5c($sp) -/* 0DB534 7F0A8B44 A3A00074 */ sb $zero, 0x74($sp) -/* 0DB538 7F0A8B48 00008025 */ move $s0, $zero -/* 0DB53C 7F0A8B4C AFAE0058 */ sw $t6, 0x58($sp) -/* 0DB540 7F0A8B50 18C0000F */ blez $a2, .L7F0A8B90 -/* 0DB544 7F0A8B54 AFAF0054 */ sw $t7, 0x54($sp) -/* 0DB548 7F0A8B58 3C118004 */ lui $s1, %hi(D_800409DC) # $s1, 0x8004 -/* 0DB54C 7F0A8B5C 2631A62C */ addiu $s1, %lo(D_800409DC) # addiu $s1, $s1, -0x59d4 -.L7F0A8B60: -/* 0DB550 7F0A8B60 0FC304AE */ jal langGet -/* 0DB554 7F0A8B64 96240000 */ lhu $a0, ($s1) -/* 0DB558 7F0A8B68 27A40074 */ addiu $a0, $sp, 0x74 -/* 0DB55C 7F0A8B6C 0C002717 */ jal strcat -/* 0DB560 7F0A8B70 00402825 */ move $a1, $v0 -/* 0DB564 7F0A8B74 3C068004 */ lui $a2, %hi(D_800409D8) # $a2, 0x8004 -/* 0DB568 7F0A8B78 8CC6A628 */ lw $a2, %lo(D_800409D8)($a2) -/* 0DB56C 7F0A8B7C 26100001 */ addiu $s0, $s0, 1 -/* 0DB570 7F0A8B80 26310014 */ addiu $s1, $s1, 0x14 -/* 0DB574 7F0A8B84 0206082A */ slt $at, $s0, $a2 -/* 0DB578 7F0A8B88 1420FFF5 */ bnez $at, .L7F0A8B60 -/* 0DB57C 7F0A8B8C 00000000 */ nop -.L7F0A8B90: -/* 0DB580 7F0A8B90 3C188004 */ lui $t8, %hi(watch_item_is_actively_selected) # $t8, 0x8004 -/* 0DB584 7F0A8B94 8F18A5F8 */ lw $t8, %lo(watch_item_is_actively_selected)($t8) -/* 0DB588 7F0A8B98 3C198004 */ lui $t9, %hi(controller_options_index) # $t9, 0x8004 -/* 0DB58C 7F0A8B9C 13000019 */ beqz $t8, .L7F0A8C04 -/* 0DB590 7F0A8BA0 00000000 */ nop -/* 0DB594 7F0A8BA4 8F39A5E8 */ lw $t9, %lo(controller_options_index)($t9) -/* 0DB598 7F0A8BA8 3C118004 */ lui $s1, %hi(j_text_trigger) # $s1, 0x8004 -/* 0DB59C 7F0A8BAC 26311150 */ addiu $s1, %lo(j_text_trigger) # addiu $s1, $s1, 0x1150 -/* 0DB5A0 7F0A8BB0 17200014 */ bnez $t9, .L7F0A8C04 -/* 0DB5A4 7F0A8BB4 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0DB5A8 7F0A8BB8 8E280000 */ lw $t0, ($s1) -/* 0DB5AC 7F0A8BBC 240B0001 */ li $t3, 1 -/* 0DB5B0 7F0A8BC0 2402000A */ li $v0, 10 -/* 0DB5B4 7F0A8BC4 11000003 */ beqz $t0, .L7F0A8BD4 -/* 0DB5B8 7F0A8BC8 00000000 */ nop -/* 0DB5BC 7F0A8BCC 10000001 */ b .L7F0A8BD4 -/* 0DB5C0 7F0A8BD0 2402000E */ li $v0, 14 -.L7F0A8BD4: -/* 0DB5C4 7F0A8BD4 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0DB5C8 7F0A8BD8 AFA00018 */ sw $zero, 0x18($sp) -/* 0DB5CC 7F0A8BDC AFAB001C */ sw $t3, 0x1c($sp) -/* 0DB5D0 7F0A8BE0 24692A54 */ addiu $t1, $v1, 0x2a54 -/* 0DB5D4 7F0A8BE4 246A2A60 */ addiu $t2, $v1, 0x2a60 -/* 0DB5D8 7F0A8BE8 AFAA0014 */ sw $t2, 0x14($sp) -/* 0DB5DC 7F0A8BEC AFA90010 */ sw $t1, 0x10($sp) -/* 0DB5E0 7F0A8BF0 AFA20020 */ sw $v0, 0x20($sp) -/* 0DB5E4 7F0A8BF4 24642A58 */ addiu $a0, $v1, 0x2a58 -/* 0DB5E8 7F0A8BF8 24652A50 */ addiu $a1, $v1, 0x2a50 -/* 0DB5EC 7F0A8BFC 0FC2950F */ jal sub_GAME_7F0A611C -/* 0DB5F0 7F0A8C00 24672A5C */ addiu $a3, $v1, 0x2a5c -.L7F0A8C04: -/* 0DB5F4 7F0A8C04 3C118004 */ lui $s1, %hi(j_text_trigger) # $s1, 0x8004 -/* 0DB5F8 7F0A8C08 26311150 */ addiu $s1, %lo(j_text_trigger) # addiu $s1, $s1, 0x1150 -/* 0DB5FC 7F0A8C0C 8E220000 */ lw $v0, ($s1) -/* 0DB600 7F0A8C10 240C00AA */ li $t4, 170 -/* 0DB604 7F0A8C14 240D001A */ li $t5, 26 -/* 0DB608 7F0A8C18 AFAC0070 */ sw $t4, 0x70($sp) -/* 0DB60C 7F0A8C1C 10400003 */ beqz $v0, .L7F0A8C2C -/* 0DB610 7F0A8C20 AFAD006C */ sw $t5, 0x6c($sp) -/* 0DB614 7F0A8C24 10000002 */ b .L7F0A8C30 -/* 0DB618 7F0A8C28 2402000E */ li $v0, 14 -.L7F0A8C2C: -/* 0DB61C 7F0A8C2C 2402000A */ li $v0, 10 -.L7F0A8C30: -/* 0DB620 7F0A8C30 8FAE0058 */ lw $t6, 0x58($sp) -/* 0DB624 7F0A8C34 27A40060 */ addiu $a0, $sp, 0x60 -/* 0DB628 7F0A8C38 27A5005C */ addiu $a1, $sp, 0x5c -/* 0DB62C 7F0A8C3C 27A60074 */ addiu $a2, $sp, 0x74 -/* 0DB630 7F0A8C40 8FA70054 */ lw $a3, 0x54($sp) -/* 0DB634 7F0A8C44 AFA20014 */ sw $v0, 0x14($sp) -/* 0DB638 7F0A8C48 0FC2B713 */ jal textMeasure -/* 0DB63C 7F0A8C4C AFAE0010 */ sw $t6, 0x10($sp) -/* 0DB640 7F0A8C50 8E220000 */ lw $v0, ($s1) -/* 0DB644 7F0A8C54 8FA40850 */ lw $a0, 0x850($sp) -/* 0DB648 7F0A8C58 27A50070 */ addiu $a1, $sp, 0x70 -/* 0DB64C 7F0A8C5C 10400003 */ beqz $v0, .L7F0A8C6C -/* 0DB650 7F0A8C60 27A6006C */ addiu $a2, $sp, 0x6c -/* 0DB654 7F0A8C64 10000002 */ b .L7F0A8C70 -/* 0DB658 7F0A8C68 2410000E */ li $s0, 14 -.L7F0A8C6C: -/* 0DB65C 7F0A8C6C 2410000A */ li $s0, 10 -.L7F0A8C70: -/* 0DB660 7F0A8C70 10400003 */ beqz $v0, .L7F0A8C80 -/* 0DB664 7F0A8C74 27A70074 */ addiu $a3, $sp, 0x74 -/* 0DB668 7F0A8C78 10000002 */ b .L7F0A8C84 -/* 0DB66C 7F0A8C7C 2402000E */ li $v0, 14 -.L7F0A8C80: -/* 0DB670 7F0A8C80 2402000A */ li $v0, 10 -.L7F0A8C84: -/* 0DB674 7F0A8C84 8FAF0054 */ lw $t7, 0x54($sp) -/* 0DB678 7F0A8C88 8FB80058 */ lw $t8, 0x58($sp) -/* 0DB67C 7F0A8C8C 8FA8005C */ lw $t0, 0x5c($sp) -/* 0DB680 7F0A8C90 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 -/* 0DB684 7F0A8C94 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0DB688 7F0A8C98 3C1900AA */ lui $t9, (0x00AA00B0 >> 16) # lui $t9, 0xaa -/* 0DB68C 7F0A8C9C 373900B0 */ ori $t9, (0x00AA00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DB690 7F0A8CA0 AFB90018 */ sw $t9, 0x18($sp) -/* 0DB694 7F0A8CA4 AFB00020 */ sw $s0, 0x20($sp) -/* 0DB698 7F0A8CA8 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DB69C 7F0A8CAC AFB80014 */ sw $t8, 0x14($sp) -/* 0DB6A0 7F0A8CB0 AFA8001C */ sw $t0, 0x1c($sp) -/* 0DB6A4 7F0A8CB4 8D2A2A5C */ lw $t2, 0x2a5c($t1) -/* 0DB6A8 7F0A8CB8 AFA20028 */ sw $v0, 0x28($sp) -/* 0DB6AC 7F0A8CBC 0FC2B35F */ jal textRender -/* 0DB6B0 7F0A8CC0 AFAA0024 */ sw $t2, 0x24($sp) -/* 0DB6B4 7F0A8CC4 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 -/* 0DB6B8 7F0A8CC8 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) -/* 0DB6BC 7F0A8CCC AFA20850 */ sw $v0, 0x850($sp) -/* 0DB6C0 7F0A8CD0 8C6B2A60 */ lw $t3, 0x2a60($v1) -/* 0DB6C4 7F0A8CD4 51600043 */ beql $t3, $zero, .L7F0A8DE4 -/* 0DB6C8 7F0A8CD8 8FBF003C */ lw $ra, 0x3c($sp) -/* 0DB6CC 7F0A8CDC 8C6C2A50 */ lw $t4, 0x2a50($v1) -/* 0DB6D0 7F0A8CE0 3C048004 */ lui $a0, %hi(D_800409DC) -/* 0DB6D4 7F0A8CE4 000C6880 */ sll $t5, $t4, 2 -/* 0DB6D8 7F0A8CE8 01AC6821 */ addu $t5, $t5, $t4 -/* 0DB6DC 7F0A8CEC 000D6880 */ sll $t5, $t5, 2 -/* 0DB6E0 7F0A8CF0 008D2021 */ addu $a0, $a0, $t5 -/* 0DB6E4 7F0A8CF4 0FC304AE */ jal langGet -/* 0DB6E8 7F0A8CF8 9484A62C */ lhu $a0, %lo(D_800409DC)($a0) -/* 0DB6EC 7F0A8CFC 8E2E0000 */ lw $t6, ($s1) -/* 0DB6F0 7F0A8D00 00408025 */ move $s0, $v0 -/* 0DB6F4 7F0A8D04 27A40060 */ addiu $a0, $sp, 0x60 -/* 0DB6F8 7F0A8D08 11C00003 */ beqz $t6, .L7F0A8D18 -/* 0DB6FC 7F0A8D0C 27A5005C */ addiu $a1, $sp, 0x5c -/* 0DB700 7F0A8D10 10000002 */ b .L7F0A8D1C -/* 0DB704 7F0A8D14 2402000E */ li $v0, 14 -.L7F0A8D18: -/* 0DB708 7F0A8D18 2402000A */ li $v0, 10 -.L7F0A8D1C: -/* 0DB70C 7F0A8D1C 8FAF0058 */ lw $t7, 0x58($sp) -/* 0DB710 7F0A8D20 02003025 */ move $a2, $s0 -/* 0DB714 7F0A8D24 8FA70054 */ lw $a3, 0x54($sp) -/* 0DB718 7F0A8D28 AFA20014 */ sw $v0, 0x14($sp) -/* 0DB71C 7F0A8D2C 0FC2B713 */ jal textMeasure -/* 0DB720 7F0A8D30 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DB724 7F0A8D34 8E390000 */ lw $t9, ($s1) -/* 0DB728 7F0A8D38 241800AA */ li $t8, 170 -/* 0DB72C 7F0A8D3C AFB80070 */ sw $t8, 0x70($sp) -/* 0DB730 7F0A8D40 13200003 */ beqz $t9, .L7F0A8D50 -/* 0DB734 7F0A8D44 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 -/* 0DB738 7F0A8D48 10000001 */ b .L7F0A8D50 -/* 0DB73C 7F0A8D4C 00000000 */ nop -.L7F0A8D50: -/* 0DB740 7F0A8D50 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0DB744 7F0A8D54 2408001A */ li $t0, 26 -/* 0DB748 7F0A8D58 AFA8006C */ sw $t0, 0x6c($sp) -/* 0DB74C 7F0A8D5C 8D2A2A50 */ lw $t2, 0x2a50($t1) -/* 0DB750 7F0A8D60 3C048004 */ lui $a0, %hi(D_800409DC) -/* 0DB754 7F0A8D64 000A5880 */ sll $t3, $t2, 2 -/* 0DB758 7F0A8D68 016A5821 */ addu $t3, $t3, $t2 -/* 0DB75C 7F0A8D6C 000B5880 */ sll $t3, $t3, 2 -/* 0DB760 7F0A8D70 008B2021 */ addu $a0, $a0, $t3 -/* 0DB764 7F0A8D74 0FC304AE */ jal langGet -/* 0DB768 7F0A8D78 9484A62C */ lhu $a0, %lo(D_800409DC)($a0) -/* 0DB76C 7F0A8D7C 8E2C0000 */ lw $t4, ($s1) -/* 0DB770 7F0A8D80 00408025 */ move $s0, $v0 -/* 0DB774 7F0A8D84 8FA40850 */ lw $a0, 0x850($sp) -/* 0DB778 7F0A8D88 11800003 */ beqz $t4, .L7F0A8D98 -/* 0DB77C 7F0A8D8C 27A50070 */ addiu $a1, $sp, 0x70 -/* 0DB780 7F0A8D90 10000002 */ b .L7F0A8D9C -/* 0DB784 7F0A8D94 2402000E */ li $v0, 14 -.L7F0A8D98: -/* 0DB788 7F0A8D98 2402000A */ li $v0, 10 -.L7F0A8D9C: -/* 0DB78C 7F0A8D9C 8FAD0054 */ lw $t5, 0x54($sp) -/* 0DB790 7F0A8DA0 8FAE0058 */ lw $t6, 0x58($sp) -/* 0DB794 7F0A8DA4 8FB8005C */ lw $t8, 0x5c($sp) -/* 0DB798 7F0A8DA8 3C0FA0FF */ lui $t7, (0xA0FFA0F0 >> 16) # lui $t7, 0xa0ff -/* 0DB79C 7F0A8DAC 35EFA0F0 */ ori $t7, (0xA0FFA0F0 & 0xFFFF) # ori $t7, $t7, 0xa0f0 -/* 0DB7A0 7F0A8DB0 24190064 */ li $t9, 100 -/* 0DB7A4 7F0A8DB4 AFB90020 */ sw $t9, 0x20($sp) -/* 0DB7A8 7F0A8DB8 AFAF0018 */ sw $t7, 0x18($sp) -/* 0DB7AC 7F0A8DBC 27A6006C */ addiu $a2, $sp, 0x6c -/* 0DB7B0 7F0A8DC0 02003825 */ move $a3, $s0 -/* 0DB7B4 7F0A8DC4 AFA00024 */ sw $zero, 0x24($sp) -/* 0DB7B8 7F0A8DC8 AFA20028 */ sw $v0, 0x28($sp) -/* 0DB7BC 7F0A8DCC AFAD0010 */ sw $t5, 0x10($sp) -/* 0DB7C0 7F0A8DD0 AFAE0014 */ sw $t6, 0x14($sp) -/* 0DB7C4 7F0A8DD4 0FC2B35F */ jal textRender -/* 0DB7C8 7F0A8DD8 AFB8001C */ sw $t8, 0x1c($sp) -/* 0DB7CC 7F0A8DDC AFA20850 */ sw $v0, 0x850($sp) -/* 0DB7D0 7F0A8DE0 8FBF003C */ lw $ra, 0x3c($sp) -.L7F0A8DE4: -/* 0DB7D4 7F0A8DE4 8FA20850 */ lw $v0, 0x850($sp) -/* 0DB7D8 7F0A8DE8 8FB00034 */ lw $s0, 0x34($sp) -/* 0DB7DC 7F0A8DEC 8FB10038 */ lw $s1, 0x38($sp) -/* 0DB7E0 7F0A8DF0 03E00008 */ jr $ra -/* 0DB7E4 7F0A8DF4 27BD0850 */ addiu $sp, $sp, 0x850 -) -#endif -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0A9AB8(void) { + +Gfx *sub_GAME_7F0A9AB8(Gfx *gdl) +{ + u8 *dirtext1; + u8 *dirtext2; + + if (game_options_entries[0].current_value == 1) + { + dirtext1 = langGet(getStringID(LOPTIONS, OPTION_STR_2D_UP_LF)); + dirtext2 = langGet(getStringID(LOPTIONS, OPTION_STR_2C_DOWN_LF)); + } + else + { + dirtext1 = langGet(getStringID(LOPTIONS, OPTION_STR_2C_DOWN_LF)); + dirtext2 = langGet(getStringID(LOPTIONS, OPTION_STR_2D_UP_LF)); + } + + { + char strA[] = "(A)\n"; + char strB[] = "(B)\n"; + char strZ[] = "(Z)\n"; + char strL[] = "(L)\n"; + char strR[] = "(R)\n"; + char strC[] = "(C)\n"; + char strPlus[] = "(+)\n"; + char strS[] = "(S)\n"; + char str3D[] = "(3D)\n"; + u8 *ctext; + u8 *dpadtext; + s32 buttons; + s32 showmovesight; + volatile unsigned int y; + u8 pad[8]; + + showmovesight = 0; + gdl = microcode_constructor(gdl); + + if (joyGetButtons(PLAYER_1, L_TRIG)) + { + gdl = draw_options_labels(gdl, 0x32, OPTLABELS_ROW1_Y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 8)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); + + if (*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 8) == getStringID(LOPTIONS, OPTION_STR_01_AIM_LF)) + { + showmovesight = 1; + } + } + else + { + gdl = draw_options_labels(gdl, 0x32, OPTLABELS_ROW1_Y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 8)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); + } + + y = OPTLABELS_ROW2_Y; + + if (controller_options_index != 1 || !watch_item_is_actively_selected || !joyGetButtons(PLAYER_1, U_JPAD | D_JPAD | L_JPAD | R_JPAD)) + { + gdl = draw_options_labels(gdl, 0x32, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 14)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); + } + else + { + if (joyGetButtons(PLAYER_1, U_JPAD)) + { + if (*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 14) == getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF)) + { + dpadtext = langGet(getStringID(LOPTIONS, OPTION_STR_30_FORWARD_LF)); + } + else + { + dpadtext = dirtext1; + } + } + else if (joyGetButtons(PLAYER_1, D_JPAD)) + { + if (*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 14) == getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF)) + { + dpadtext = langGet(getStringID(LOPTIONS, OPTION_STR_31_BACK_LF)); + } + else + { + dpadtext = dirtext2; + } + } + else if (joyGetButtons(PLAYER_1, L_JPAD)) + { + dpadtext = langGet(getStringID(LOPTIONS, OPTION_STR_2F_SIDESTEP_LF)); + } + else if (joyGetButtons(PLAYER_1, R_JPAD)) + { + dpadtext = langGet(getStringID(LOPTIONS, OPTION_STR_2E_SIDESTEP_LF)); + } + + gdl = draw_options_labels(gdl, 0x32, y, dpadtext, -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); + } + + y += OPTLABELS_ROW_PITCH; + gdl = draw_options_labels(gdl, 0x32, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 16)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); + y += OPTLABELS_ROW_PITCH; + + if (joyGetButtons(PLAYER_1, Z_TRIG)) + { + gdl = draw_options_labels(gdl, 0x32, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 6)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); + + if (*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 6) == getStringID(LOPTIONS, OPTION_STR_01_AIM_LF)) + { + showmovesight = 1; + } + } + else + { + gdl = draw_options_labels(gdl, 0x32, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 6)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); + } + + y -= OPTLABELS_COL_RET; + + if (joyGetButtons(PLAYER_1, R_TRIG)) + { + gdl = draw_options_labels(gdl, 0x10e, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 10)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); + + if (*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 10) == getStringID(LOPTIONS, OPTION_STR_01_AIM_LF)) + { + showmovesight = 1; + } + } + else + { + gdl = draw_options_labels(gdl, 0x10e, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 10)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); + } + + y += OPTLABELS_ROW_PITCH; + + if (controller_options_index != 1 || !watch_item_is_actively_selected || !joyGetButtons(PLAYER_1, U_CBUTTONS | D_CBUTTONS | L_CBUTTONS | R_CBUTTONS)) + { + gdl = draw_options_labels(gdl, 0x10e, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 12)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); + } + else + { + buttons = joyGetButtons(PLAYER_1, U_CBUTTONS | D_CBUTTONS | L_CBUTTONS | R_CBUTTONS); + + /* power-of-two test: exactly one C button held */ + if ((buttons & (buttons - 1U)) == 0) + { + if (joyGetButtons(PLAYER_1, U_CBUTTONS)) + { + if (*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 12) == getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF)) + { + ctext = langGet(getStringID(LOPTIONS, OPTION_STR_30_FORWARD_LF)); + } + else + { + ctext = dirtext1; + } + } + else if (joyGetButtons(PLAYER_1, D_CBUTTONS)) + { + if (*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 12) == getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF)) + { + ctext = langGet(getStringID(LOPTIONS, OPTION_STR_31_BACK_LF)); + } + else + { + ctext = dirtext2; + } + } + else if (joyGetButtons(PLAYER_1, L_CBUTTONS)) + { + ctext = langGet(getStringID(LOPTIONS, OPTION_STR_2F_SIDESTEP_LF)); + } + else if (joyGetButtons(PLAYER_1, R_CBUTTONS)) + { + ctext = langGet(getStringID(LOPTIONS, OPTION_STR_2E_SIDESTEP_LF)); + } + + gdl = draw_options_labels(gdl, 0x10e, y, ctext, -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); + } + else + { + gdl = draw_options_labels(gdl, 0x10e, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 12)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); + } + } + + y += OPTLABELS_ROW_PITCH; + + if (joyGetButtons(PLAYER_1, B_BUTTON)) + { + gdl = draw_options_labels(gdl, 0x10e, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 4)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); + } + else + { + gdl = draw_options_labels(gdl, 0x10e, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 4)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); + } + + y += OPTLABELS_ROW_PITCH; + + if (joyGetButtons(PLAYER_1, A_BUTTON)) + { + gdl = draw_options_labels(gdl, 0x10e, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 2)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); + } + else + { + gdl = draw_options_labels(gdl, 0x10e, y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 2)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); + } + + if (showmovesight) + { + gdl = draw_options_labels(gdl, 0xfa, OPTLABELS_HINT_Y, langGet(getStringID(LOPTIONS, OPTION_STR_08_MOVESIGHT_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); + } + else + { + gdl = draw_options_labels(gdl, 0xfa, OPTLABELS_HINT_Y, langGet(*(u16 *)((u8 *)game_control_styles + (g_CurrentPlayer->cur_player_control_type_0 * 20) + 18)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); + } + + return gdl; + } } -#else -//D:80057778 -const char aA[] = "(A)\n"; -//D:80057780 -const char aB[] = "(B)\n"; -//D:80057788 -const char aZ[] = "(Z)\n"; -//D:80057790 -const char aL[] = "(L)\n"; -//D:80057798 -const char aR[] = "(R)\n"; -//D:800577A0 -const char aC[] = "(C)\n"; -//D:800577A8 -const char D_800577A8[] = "(+)\n"; -//D:800577B0 -const char aS_0[] = "(S)\n"; -//D:800577B8 -const char a3d[] = "(3D)\n"; - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( - -.text -glabel sub_GAME_7F0A9AB8 -/* 0DE5E8 7F0A9AB8 3C0E8004 */ lui $t6, %hi(game_options_entries) -/* 0DE5EC 7F0A9ABC 8DCE0A84 */ lw $t6, %lo(game_options_entries + 0x8)($t6) -/* 0DE5F0 7F0A9AC0 27BDFF50 */ addiu $sp, $sp, -0xb0 -/* 0DE5F4 7F0A9AC4 AFB00038 */ sw $s0, 0x38($sp) -/* 0DE5F8 7F0A9AC8 24010001 */ li $at, 1 -/* 0DE5FC 7F0A9ACC 00808025 */ move $s0, $a0 -/* 0DE600 7F0A9AD0 15C10008 */ bne $t6, $at, .L7F0A9AF4 -/* 0DE604 7F0A9AD4 AFBF003C */ sw $ra, 0x3c($sp) -/* 0DE608 7F0A9AD8 0FC30776 */ jal langGet -/* 0DE60C 7F0A9ADC 3404AC2D */ li $a0, 44077 -/* 0DE610 7F0A9AE0 AFA200AC */ sw $v0, 0xac($sp) -/* 0DE614 7F0A9AE4 0FC30776 */ jal langGet -/* 0DE618 7F0A9AE8 3404AC2C */ li $a0, 44076 -/* 0DE61C 7F0A9AEC 10000007 */ b .L7F0A9B0C -/* 0DE620 7F0A9AF0 AFA200A8 */ sw $v0, 0xa8($sp) -.L7F0A9AF4: -/* 0DE624 7F0A9AF4 0FC30776 */ jal langGet -/* 0DE628 7F0A9AF8 3404AC2C */ li $a0, 44076 -/* 0DE62C 7F0A9AFC AFA200AC */ sw $v0, 0xac($sp) -/* 0DE630 7F0A9B00 0FC30776 */ jal langGet -/* 0DE634 7F0A9B04 3404AC2D */ li $a0, 44077 -/* 0DE638 7F0A9B08 AFA200A8 */ sw $v0, 0xa8($sp) -.L7F0A9B0C: -/* 0DE63C 7F0A9B0C 3C188005 */ lui $t8, %hi(aA) -/* 0DE640 7F0A9B10 27187778 */ addiu $t8, %lo(aA) # addiu $t8, $t8, 0x7778 -/* 0DE644 7F0A9B14 8F010000 */ lw $at, ($t8) -/* 0DE648 7F0A9B18 27AF00A0 */ addiu $t7, $sp, 0xa0 -/* 0DE64C 7F0A9B1C 3C0B8005 */ lui $t3, %hi(aB) -/* 0DE650 7F0A9B20 ADE10000 */ sw $at, ($t7) -/* 0DE654 7F0A9B24 93010004 */ lbu $at, 4($t8) -/* 0DE658 7F0A9B28 256B7780 */ addiu $t3, %lo(aB) # addiu $t3, $t3, 0x7780 -/* 0DE65C 7F0A9B2C 27AA0098 */ addiu $t2, $sp, 0x98 -/* 0DE660 7F0A9B30 A1E10004 */ sb $at, 4($t7) -/* 0DE664 7F0A9B34 8D610000 */ lw $at, ($t3) -/* 0DE668 7F0A9B38 3C198005 */ lui $t9, %hi(aZ) -/* 0DE66C 7F0A9B3C 27397788 */ addiu $t9, %lo(aZ) # addiu $t9, $t9, 0x7788 -/* 0DE670 7F0A9B40 AD410000 */ sw $at, ($t2) -/* 0DE674 7F0A9B44 91610004 */ lbu $at, 4($t3) -/* 0DE678 7F0A9B48 27A80090 */ addiu $t0, $sp, 0x90 -/* 0DE67C 7F0A9B4C 3C0C8005 */ lui $t4, %hi(aL) -/* 0DE680 7F0A9B50 A1410004 */ sb $at, 4($t2) -/* 0DE684 7F0A9B54 8F210000 */ lw $at, ($t9) -/* 0DE688 7F0A9B58 258C7790 */ addiu $t4, %lo(aL) # addiu $t4, $t4, 0x7790 -/* 0DE68C 7F0A9B5C 27AD0088 */ addiu $t5, $sp, 0x88 -/* 0DE690 7F0A9B60 AD010000 */ sw $at, ($t0) -/* 0DE694 7F0A9B64 93210004 */ lbu $at, 4($t9) -/* 0DE698 7F0A9B68 3C0F8005 */ lui $t7, %hi(aR) -/* 0DE69C 7F0A9B6C 25EF7798 */ addiu $t7, %lo(aR) # addiu $t7, $t7, 0x7798 -/* 0DE6A0 7F0A9B70 A1010004 */ sb $at, 4($t0) -/* 0DE6A4 7F0A9B74 8D810000 */ lw $at, ($t4) -/* 0DE6A8 7F0A9B78 27B80080 */ addiu $t8, $sp, 0x80 -/* 0DE6AC 7F0A9B7C 3C0A8005 */ lui $t2, %hi(aC) -/* 0DE6B0 7F0A9B80 ADA10000 */ sw $at, ($t5) -/* 0DE6B4 7F0A9B84 91810004 */ lbu $at, 4($t4) -/* 0DE6B8 7F0A9B88 254A77A0 */ addiu $t2, %lo(aC) # addiu $t2, $t2, 0x77a0 -/* 0DE6BC 7F0A9B8C 27AB0078 */ addiu $t3, $sp, 0x78 -/* 0DE6C0 7F0A9B90 A1A10004 */ sb $at, 4($t5) -/* 0DE6C4 7F0A9B94 8DE10000 */ lw $at, ($t7) -/* 0DE6C8 7F0A9B98 3C088005 */ lui $t0, %hi(D_800577A8) -/* 0DE6CC 7F0A9B9C 250877A8 */ addiu $t0, %lo(D_800577A8) # addiu $t0, $t0, 0x77a8 -/* 0DE6D0 7F0A9BA0 AF010000 */ sw $at, ($t8) -/* 0DE6D4 7F0A9BA4 91E10004 */ lbu $at, 4($t7) -/* 0DE6D8 7F0A9BA8 27B90070 */ addiu $t9, $sp, 0x70 -/* 0DE6DC 7F0A9BAC 3C0D8005 */ lui $t5, %hi(aS_0) -/* 0DE6E0 7F0A9BB0 A3010004 */ sb $at, 4($t8) -/* 0DE6E4 7F0A9BB4 8D410000 */ lw $at, ($t2) -/* 0DE6E8 7F0A9BB8 25AD77B0 */ addiu $t5, %lo(aS_0) # addiu $t5, $t5, 0x77b0 -/* 0DE6EC 7F0A9BBC 27AC0068 */ addiu $t4, $sp, 0x68 -/* 0DE6F0 7F0A9BC0 AD610000 */ sw $at, ($t3) -/* 0DE6F4 7F0A9BC4 91410004 */ lbu $at, 4($t2) -/* 0DE6F8 7F0A9BC8 3C188005 */ lui $t8, %hi(a3d) -/* 0DE6FC 7F0A9BCC 271877B8 */ addiu $t8, %lo(a3d) # addiu $t8, $t8, 0x77b8 -/* 0DE700 7F0A9BD0 A1610004 */ sb $at, 4($t3) -/* 0DE704 7F0A9BD4 8D010000 */ lw $at, ($t0) -/* 0DE708 7F0A9BD8 27AF0060 */ addiu $t7, $sp, 0x60 -/* 0DE70C 7F0A9BDC 02002025 */ move $a0, $s0 -/* 0DE710 7F0A9BE0 AF210000 */ sw $at, ($t9) -/* 0DE714 7F0A9BE4 91010004 */ lbu $at, 4($t0) -/* 0DE718 7F0A9BE8 A3210004 */ sb $at, 4($t9) -/* 0DE71C 7F0A9BEC 8DA10000 */ lw $at, ($t5) -/* 0DE720 7F0A9BF0 AD810000 */ sw $at, ($t4) -/* 0DE724 7F0A9BF4 91A10004 */ lbu $at, 4($t5) -/* 0DE728 7F0A9BF8 A1810004 */ sb $at, 4($t4) -/* 0DE72C 7F0A9BFC 8F010000 */ lw $at, ($t8) -/* 0DE730 7F0A9C00 ADE10000 */ sw $at, ($t7) -/* 0DE734 7F0A9C04 97010004 */ lhu $at, 4($t8) -/* 0DE738 7F0A9C08 A5E10004 */ sh $at, 4($t7) -/* 0DE73C 7F0A9C0C 0FC2B366 */ jal microcode_constructor -/* 0DE740 7F0A9C10 AFA00050 */ sw $zero, 0x50($sp) -/* 0DE744 7F0A9C14 00408025 */ move $s0, $v0 -/* 0DE748 7F0A9C18 00002025 */ move $a0, $zero -/* 0DE74C 7F0A9C1C 0C0030C3 */ jal joyGetButtons -/* 0DE750 7F0A9C20 24050020 */ li $a1, 32 -/* 0DE754 7F0A9C24 1040002C */ beqz $v0, .L7F0A9CD8 -/* 0DE758 7F0A9C28 3C0A8008 */ lui $t2, %hi(g_CurrentPlayer) -/* 0DE75C 7F0A9C2C 8D4AA0B0 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 0DE760 7F0A9C30 3C048004 */ lui $a0, %hi(D_800409DC+8) -/* 0DE764 7F0A9C34 8D4B2A58 */ lw $t3, 0x2a58($t2) -/* 0DE768 7F0A9C38 000B6080 */ sll $t4, $t3, 2 -/* 0DE76C 7F0A9C3C 018B6021 */ addu $t4, $t4, $t3 -/* 0DE770 7F0A9C40 000C6080 */ sll $t4, $t4, 2 -/* 0DE774 7F0A9C44 008C2021 */ addu $a0, $a0, $t4 -/* 0DE778 7F0A9C48 0FC30776 */ jal langGet -/* 0DE77C 7F0A9C4C 948409E4 */ lhu $a0, %lo(D_800409DC+8)($a0) -/* 0DE780 7F0A9C50 3C080070 */ lui $t0, (0x007000A0 >> 16) # lui $t0, 0x70 -/* 0DE784 7F0A9C54 3C190030 */ lui $t9, (0x003000B0 >> 16) # lui $t9, 0x30 -/* 0DE788 7F0A9C58 373900B0 */ ori $t9, (0x003000B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DE78C 7F0A9C5C 350800A0 */ ori $t0, (0x007000A0 & 0xFFFF) # ori $t0, $t0, 0xa0 -/* 0DE790 7F0A9C60 240DFFFF */ li $t5, -1 -/* 0DE794 7F0A9C64 240E0001 */ li $t6, 1 -/* 0DE798 7F0A9C68 AFAE0014 */ sw $t6, 0x14($sp) -/* 0DE79C 7F0A9C6C AFAD0010 */ sw $t5, 0x10($sp) -/* 0DE7A0 7F0A9C70 AFA80018 */ sw $t0, 0x18($sp) -/* 0DE7A4 7F0A9C74 AFB90024 */ sw $t9, 0x24($sp) -/* 0DE7A8 7F0A9C78 02002025 */ move $a0, $s0 -/* 0DE7AC 7F0A9C7C 24050032 */ li $a1, 50 -/* 0DE7B0 7F0A9C80 24060052 */ li $a2, 82 -/* 0DE7B4 7F0A9C84 00403825 */ move $a3, $v0 -/* 0DE7B8 7F0A9C88 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DE7BC 7F0A9C8C AFA00020 */ sw $zero, 0x20($sp) -/* 0DE7C0 7F0A9C90 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DE7C4 7F0A9C94 AFA00028 */ sw $zero, 0x28($sp) -/* 0DE7C8 7F0A9C98 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) -/* 0DE7CC 7F0A9C9C 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0DE7D0 7F0A9CA0 3C0A8004 */ lui $t2, %hi(D_800409DC+9) -/* 0DE7D4 7F0A9CA4 3401AC01 */ li $at, 44033 -/* 0DE7D8 7F0A9CA8 8DF82A58 */ lw $t8, 0x2a58($t7) -/* 0DE7DC 7F0A9CAC 00408025 */ move $s0, $v0 -/* 0DE7E0 7F0A9CB0 240B0001 */ li $t3, 1 -/* 0DE7E4 7F0A9CB4 00184880 */ sll $t1, $t8, 2 -/* 0DE7E8 7F0A9CB8 01384821 */ addu $t1, $t1, $t8 -/* 0DE7EC 7F0A9CBC 00094880 */ sll $t1, $t1, 2 -/* 0DE7F0 7F0A9CC0 01495021 */ addu $t2, $t2, $t1 -/* 0DE7F4 7F0A9CC4 954A09E4 */ lhu $t2, %lo(D_800409DC+8)($t2) -/* 0DE7F8 7F0A9CC8 1541001F */ bne $t2, $at, .L7F0A9D48 -/* 0DE7FC 7F0A9CCC 00000000 */ nop -/* 0DE800 7F0A9CD0 1000001D */ b .L7F0A9D48 -/* 0DE804 7F0A9CD4 AFAB0050 */ sw $t3, 0x50($sp) -.L7F0A9CD8: -/* 0DE808 7F0A9CD8 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) -/* 0DE80C 7F0A9CDC 8D8CA0B0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0DE810 7F0A9CE0 3C048004 */ lui $a0, %hi(D_800409DC+8) -/* 0DE814 7F0A9CE4 8D8D2A58 */ lw $t5, 0x2a58($t4) -/* 0DE818 7F0A9CE8 000D7080 */ sll $t6, $t5, 2 -/* 0DE81C 7F0A9CEC 01CD7021 */ addu $t6, $t6, $t5 -/* 0DE820 7F0A9CF0 000E7080 */ sll $t6, $t6, 2 -/* 0DE824 7F0A9CF4 008E2021 */ addu $a0, $a0, $t6 -/* 0DE828 7F0A9CF8 0FC30776 */ jal langGet -/* 0DE82C 7F0A9CFC 948409E4 */ lhu $a0, %lo(D_800409DC+8)($a0) -/* 0DE830 7F0A9D00 3C0800AA */ lui $t0, (0x00AA00B0 >> 16) # lui $t0, 0xaa -/* 0DE834 7F0A9D04 3C0F0030 */ lui $t7, (0x003000B0 >> 16) # lui $t7, 0x30 -/* 0DE838 7F0A9D08 35EF00B0 */ ori $t7, (0x003000B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DE83C 7F0A9D0C 350800B0 */ ori $t0, (0x00AA00B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DE840 7F0A9D10 2419FFFF */ li $t9, -1 -/* 0DE844 7F0A9D14 AFB90018 */ sw $t9, 0x18($sp) -/* 0DE848 7F0A9D18 AFA80010 */ sw $t0, 0x10($sp) -/* 0DE84C 7F0A9D1C AFAF0024 */ sw $t7, 0x24($sp) -/* 0DE850 7F0A9D20 02002025 */ move $a0, $s0 -/* 0DE854 7F0A9D24 24050032 */ li $a1, 50 -/* 0DE858 7F0A9D28 24060052 */ li $a2, 82 -/* 0DE85C 7F0A9D2C 00403825 */ move $a3, $v0 -/* 0DE860 7F0A9D30 AFA00014 */ sw $zero, 0x14($sp) -/* 0DE864 7F0A9D34 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DE868 7F0A9D38 AFA00020 */ sw $zero, 0x20($sp) -/* 0DE86C 7F0A9D3C 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DE870 7F0A9D40 AFA00028 */ sw $zero, 0x28($sp) -/* 0DE874 7F0A9D44 00408025 */ move $s0, $v0 -.L7F0A9D48: -/* 0DE878 7F0A9D48 3C098004 */ lui $t1, %hi(controller_options_index) -/* 0DE87C 7F0A9D4C 8D290998 */ lw $t1, %lo(controller_options_index)($t1) -/* 0DE880 7F0A9D50 2418006B */ li $t8, 107 -/* 0DE884 7F0A9D54 24010001 */ li $at, 1 -/* 0DE888 7F0A9D58 1521000A */ bne $t1, $at, .L7F0A9D84 -/* 0DE88C 7F0A9D5C AFB8004C */ sw $t8, 0x4c($sp) -/* 0DE890 7F0A9D60 3C0A8004 */ lui $t2, %hi(watch_item_is_actively_selected) -/* 0DE894 7F0A9D64 8D4A09A8 */ lw $t2, %lo(watch_item_is_actively_selected)($t2) -/* 0DE898 7F0A9D68 00002025 */ move $a0, $zero -/* 0DE89C 7F0A9D6C 11400005 */ beqz $t2, .L7F0A9D84 -/* 0DE8A0 7F0A9D70 00000000 */ nop -/* 0DE8A4 7F0A9D74 0C0030C3 */ jal joyGetButtons -/* 0DE8A8 7F0A9D78 24050F00 */ li $a1, 3840 -/* 0DE8AC 7F0A9D7C 1440001E */ bnez $v0, .L7F0A9DF8 -/* 0DE8B0 7F0A9D80 00002025 */ move $a0, $zero -.L7F0A9D84: -/* 0DE8B4 7F0A9D84 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) -/* 0DE8B8 7F0A9D88 8D6BA0B0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0DE8BC 7F0A9D8C 3C048004 */ lui $a0, %hi(D_800409DC+14) -/* 0DE8C0 7F0A9D90 8D6C2A58 */ lw $t4, 0x2a58($t3) -/* 0DE8C4 7F0A9D94 000C6880 */ sll $t5, $t4, 2 -/* 0DE8C8 7F0A9D98 01AC6821 */ addu $t5, $t5, $t4 -/* 0DE8CC 7F0A9D9C 000D6880 */ sll $t5, $t5, 2 -/* 0DE8D0 7F0A9DA0 008D2021 */ addu $a0, $a0, $t5 -/* 0DE8D4 7F0A9DA4 0FC30776 */ jal langGet -/* 0DE8D8 7F0A9DA8 948409EA */ lhu $a0, %lo(D_800409DC+14)($a0) -/* 0DE8DC 7F0A9DAC 3C0E00AA */ lui $t6, (0x00AA00B0 >> 16) # lui $t6, 0xaa -/* 0DE8E0 7F0A9DB0 3C190030 */ lui $t9, (0x003000B0 >> 16) # lui $t9, 0x30 -/* 0DE8E4 7F0A9DB4 373900B0 */ ori $t9, (0x003000B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DE8E8 7F0A9DB8 35CE00B0 */ ori $t6, (0x00AA00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DE8EC 7F0A9DBC 2408FFFF */ li $t0, -1 -/* 0DE8F0 7F0A9DC0 AFA80018 */ sw $t0, 0x18($sp) -/* 0DE8F4 7F0A9DC4 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DE8F8 7F0A9DC8 AFB90024 */ sw $t9, 0x24($sp) -/* 0DE8FC 7F0A9DCC 02002025 */ move $a0, $s0 -/* 0DE900 7F0A9DD0 24050032 */ li $a1, 50 -/* 0DE904 7F0A9DD4 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DE908 7F0A9DD8 00403825 */ move $a3, $v0 -/* 0DE90C 7F0A9DDC AFA00014 */ sw $zero, 0x14($sp) -/* 0DE910 7F0A9DE0 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DE914 7F0A9DE4 AFA00020 */ sw $zero, 0x20($sp) -/* 0DE918 7F0A9DE8 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DE91C 7F0A9DEC AFA00028 */ sw $zero, 0x28($sp) -/* 0DE920 7F0A9DF0 10000051 */ b .L7F0A9F38 -/* 0DE924 7F0A9DF4 00408025 */ move $s0, $v0 -.L7F0A9DF8: -/* 0DE928 7F0A9DF8 0C0030C3 */ jal joyGetButtons -/* 0DE92C 7F0A9DFC 24050800 */ li $a1, 2048 -/* 0DE930 7F0A9E00 10400014 */ beqz $v0, .L7F0A9E54 -/* 0DE934 7F0A9E04 00002025 */ move $a0, $zero -/* 0DE938 7F0A9E08 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) -/* 0DE93C 7F0A9E0C 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0DE940 7F0A9E10 3C0A8004 */ lui $t2, %hi(D_800409DC+14) -/* 0DE944 7F0A9E14 3401AC05 */ li $at, 44037 -/* 0DE948 7F0A9E18 8DF82A58 */ lw $t8, 0x2a58($t7) -/* 0DE94C 7F0A9E1C 8FA700AC */ lw $a3, 0xac($sp) -/* 0DE950 7F0A9E20 00184880 */ sll $t1, $t8, 2 -/* 0DE954 7F0A9E24 01384821 */ addu $t1, $t1, $t8 -/* 0DE958 7F0A9E28 00094880 */ sll $t1, $t1, 2 -/* 0DE95C 7F0A9E2C 01495021 */ addu $t2, $t2, $t1 -/* 0DE960 7F0A9E30 954A09EA */ lhu $t2, %lo(D_800409DC+14)($t2) -/* 0DE964 7F0A9E34 15410005 */ bne $t2, $at, .L7F0A9E4C -/* 0DE968 7F0A9E38 00000000 */ nop -/* 0DE96C 7F0A9E3C 0FC30776 */ jal langGet -/* 0DE970 7F0A9E40 3404AC30 */ li $a0, 44080 -/* 0DE974 7F0A9E44 10000001 */ b .L7F0A9E4C -/* 0DE978 7F0A9E48 00403825 */ move $a3, $v0 -.L7F0A9E4C: -/* 0DE97C 7F0A9E4C 10000027 */ b .L7F0A9EEC -/* 0DE980 7F0A9E50 AFA70058 */ sw $a3, 0x58($sp) -.L7F0A9E54: -/* 0DE984 7F0A9E54 0C0030C3 */ jal joyGetButtons -/* 0DE988 7F0A9E58 24050400 */ li $a1, 1024 -/* 0DE98C 7F0A9E5C 10400014 */ beqz $v0, .L7F0A9EB0 -/* 0DE990 7F0A9E60 00002025 */ move $a0, $zero -/* 0DE994 7F0A9E64 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) -/* 0DE998 7F0A9E68 8D6BA0B0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0DE99C 7F0A9E6C 3C0E8004 */ lui $t6, %hi(D_800409DC+14) -/* 0DE9A0 7F0A9E70 3401AC05 */ li $at, 44037 -/* 0DE9A4 7F0A9E74 8D6C2A58 */ lw $t4, 0x2a58($t3) -/* 0DE9A8 7F0A9E78 8FA700A8 */ lw $a3, 0xa8($sp) -/* 0DE9AC 7F0A9E7C 000C6880 */ sll $t5, $t4, 2 -/* 0DE9B0 7F0A9E80 01AC6821 */ addu $t5, $t5, $t4 -/* 0DE9B4 7F0A9E84 000D6880 */ sll $t5, $t5, 2 -/* 0DE9B8 7F0A9E88 01CD7021 */ addu $t6, $t6, $t5 -/* 0DE9BC 7F0A9E8C 95CE09EA */ lhu $t6, %lo(D_800409DC+14)($t6) -/* 0DE9C0 7F0A9E90 15C10005 */ bne $t6, $at, .L7F0A9EA8 -/* 0DE9C4 7F0A9E94 00000000 */ nop -/* 0DE9C8 7F0A9E98 0FC30776 */ jal langGet -/* 0DE9CC 7F0A9E9C 3404AC31 */ li $a0, 44081 -/* 0DE9D0 7F0A9EA0 10000001 */ b .L7F0A9EA8 -/* 0DE9D4 7F0A9EA4 00403825 */ move $a3, $v0 -.L7F0A9EA8: -/* 0DE9D8 7F0A9EA8 10000010 */ b .L7F0A9EEC -/* 0DE9DC 7F0A9EAC AFA70058 */ sw $a3, 0x58($sp) -.L7F0A9EB0: -/* 0DE9E0 7F0A9EB0 0C0030C3 */ jal joyGetButtons -/* 0DE9E4 7F0A9EB4 24050200 */ li $a1, 512 -/* 0DE9E8 7F0A9EB8 10400005 */ beqz $v0, .L7F0A9ED0 -/* 0DE9EC 7F0A9EBC 00002025 */ move $a0, $zero -/* 0DE9F0 7F0A9EC0 0FC30776 */ jal langGet -/* 0DE9F4 7F0A9EC4 3404AC2F */ li $a0, 44079 -/* 0DE9F8 7F0A9EC8 10000008 */ b .L7F0A9EEC -/* 0DE9FC 7F0A9ECC AFA20058 */ sw $v0, 0x58($sp) -.L7F0A9ED0: -/* 0DEA00 7F0A9ED0 0C0030C3 */ jal joyGetButtons -/* 0DEA04 7F0A9ED4 24050100 */ li $a1, 256 -/* 0DEA08 7F0A9ED8 50400005 */ beql $v0, $zero, .L7F0A9EF0 -/* 0DEA0C 7F0A9EDC 3C0F0070 */ lui $t7, 0x70 -/* 0DEA10 7F0A9EE0 0FC30776 */ jal langGet -/* 0DEA14 7F0A9EE4 3404AC2E */ li $a0, 44078 -/* 0DEA18 7F0A9EE8 AFA20058 */ sw $v0, 0x58($sp) -.L7F0A9EEC: -/* 0DEA1C 7F0A9EEC 3C0F0070 */ lui $t7, (0x007000A0 >> 16) # lui $t7, 0x70 -.L7F0A9EF0: -/* 0DEA20 7F0A9EF0 3C180030 */ lui $t8, (0x003000B0 >> 16) # lui $t8, 0x30 -/* 0DEA24 7F0A9EF4 371800B0 */ ori $t8, (0x003000B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0DEA28 7F0A9EF8 35EF00A0 */ ori $t7, (0x007000A0 & 0xFFFF) # ori $t7, $t7, 0xa0 -/* 0DEA2C 7F0A9EFC 2408FFFF */ li $t0, -1 -/* 0DEA30 7F0A9F00 24190001 */ li $t9, 1 -/* 0DEA34 7F0A9F04 8FA70058 */ lw $a3, 0x58($sp) -/* 0DEA38 7F0A9F08 AFB90014 */ sw $t9, 0x14($sp) -/* 0DEA3C 7F0A9F0C AFA80010 */ sw $t0, 0x10($sp) -/* 0DEA40 7F0A9F10 AFAF0018 */ sw $t7, 0x18($sp) -/* 0DEA44 7F0A9F14 AFB80024 */ sw $t8, 0x24($sp) -/* 0DEA48 7F0A9F18 02002025 */ move $a0, $s0 -/* 0DEA4C 7F0A9F1C 24050032 */ li $a1, 50 -/* 0DEA50 7F0A9F20 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DEA54 7F0A9F24 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DEA58 7F0A9F28 AFA00020 */ sw $zero, 0x20($sp) -/* 0DEA5C 7F0A9F2C 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DEA60 7F0A9F30 AFA00028 */ sw $zero, 0x28($sp) -/* 0DEA64 7F0A9F34 00408025 */ move $s0, $v0 -.L7F0A9F38: -/* 0DEA68 7F0A9F38 8FA9004C */ lw $t1, 0x4c($sp) -/* 0DEA6C 7F0A9F3C 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) -/* 0DEA70 7F0A9F40 8D6BA0B0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0DEA74 7F0A9F44 252A0019 */ addiu $t2, $t1, 0x19 -/* 0DEA78 7F0A9F48 AFAA004C */ sw $t2, 0x4c($sp) -/* 0DEA7C 7F0A9F4C 8D6C2A58 */ lw $t4, 0x2a58($t3) -/* 0DEA80 7F0A9F50 3C048004 */ lui $a0, %hi(D_800409DC+16) -/* 0DEA84 7F0A9F54 000C6880 */ sll $t5, $t4, 2 -/* 0DEA88 7F0A9F58 01AC6821 */ addu $t5, $t5, $t4 -/* 0DEA8C 7F0A9F5C 000D6880 */ sll $t5, $t5, 2 -/* 0DEA90 7F0A9F60 008D2021 */ addu $a0, $a0, $t5 -/* 0DEA94 7F0A9F64 0FC30776 */ jal langGet -/* 0DEA98 7F0A9F68 948409EC */ lhu $a0, %lo(D_800409DC+16)($a0) -/* 0DEA9C 7F0A9F6C 3C0E00AA */ lui $t6, (0x00AA00B0 >> 16) # lui $t6, 0xaa -/* 0DEAA0 7F0A9F70 3C190030 */ lui $t9, (0x003000B0 >> 16) # lui $t9, 0x30 -/* 0DEAA4 7F0A9F74 373900B0 */ ori $t9, (0x003000B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DEAA8 7F0A9F78 35CE00B0 */ ori $t6, (0x00AA00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DEAAC 7F0A9F7C 2408FFFF */ li $t0, -1 -/* 0DEAB0 7F0A9F80 AFA80018 */ sw $t0, 0x18($sp) -/* 0DEAB4 7F0A9F84 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DEAB8 7F0A9F88 AFB90024 */ sw $t9, 0x24($sp) -/* 0DEABC 7F0A9F8C 02002025 */ move $a0, $s0 -/* 0DEAC0 7F0A9F90 24050032 */ li $a1, 50 -/* 0DEAC4 7F0A9F94 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DEAC8 7F0A9F98 00403825 */ move $a3, $v0 -/* 0DEACC 7F0A9F9C AFA00014 */ sw $zero, 0x14($sp) -/* 0DEAD0 7F0A9FA0 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DEAD4 7F0A9FA4 AFA00020 */ sw $zero, 0x20($sp) -/* 0DEAD8 7F0A9FA8 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DEADC 7F0A9FAC AFA00028 */ sw $zero, 0x28($sp) -/* 0DEAE0 7F0A9FB0 8FAF004C */ lw $t7, 0x4c($sp) -/* 0DEAE4 7F0A9FB4 00408025 */ move $s0, $v0 -/* 0DEAE8 7F0A9FB8 00002025 */ move $a0, $zero -/* 0DEAEC 7F0A9FBC 25F80019 */ addiu $t8, $t7, 0x19 -/* 0DEAF0 7F0A9FC0 AFB8004C */ sw $t8, 0x4c($sp) -/* 0DEAF4 7F0A9FC4 0C0030C3 */ jal joyGetButtons -/* 0DEAF8 7F0A9FC8 24052000 */ li $a1, 8192 -/* 0DEAFC 7F0A9FCC 1040002D */ beqz $v0, .L7F0AA084 -/* 0DEB00 7F0A9FD0 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) -/* 0DEB04 7F0A9FD4 3C098008 */ lui $t1, %hi(g_CurrentPlayer) -/* 0DEB08 7F0A9FD8 8D29A0B0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0DEB0C 7F0A9FDC 3C048004 */ lui $a0, %hi(D_800409DC+0x6) -/* 0DEB10 7F0A9FE0 8D2A2A58 */ lw $t2, 0x2a58($t1) -/* 0DEB14 7F0A9FE4 000A5880 */ sll $t3, $t2, 2 -/* 0DEB18 7F0A9FE8 016A5821 */ addu $t3, $t3, $t2 -/* 0DEB1C 7F0A9FEC 000B5880 */ sll $t3, $t3, 2 -/* 0DEB20 7F0A9FF0 008B2021 */ addu $a0, $a0, $t3 -/* 0DEB24 7F0A9FF4 0FC30776 */ jal langGet -/* 0DEB28 7F0A9FF8 948409E2 */ lhu $a0, %lo(D_800409DC+0x6)($a0) -/* 0DEB2C 7F0A9FFC 3C0E0070 */ lui $t6, (0x007000A0 >> 16) # lui $t6, 0x70 -/* 0DEB30 7F0AA000 3C080030 */ lui $t0, (0x003000B0 >> 16) # lui $t0, 0x30 -/* 0DEB34 7F0AA004 350800B0 */ ori $t0, (0x003000B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DEB38 7F0AA008 35CE00A0 */ ori $t6, (0x007000A0 & 0xFFFF) # ori $t6, $t6, 0xa0 -/* 0DEB3C 7F0AA00C 240CFFFF */ li $t4, -1 -/* 0DEB40 7F0AA010 240D0001 */ li $t5, 1 -/* 0DEB44 7F0AA014 AFAD0014 */ sw $t5, 0x14($sp) -/* 0DEB48 7F0AA018 AFAC0010 */ sw $t4, 0x10($sp) -/* 0DEB4C 7F0AA01C AFAE0018 */ sw $t6, 0x18($sp) -/* 0DEB50 7F0AA020 AFA80024 */ sw $t0, 0x24($sp) -/* 0DEB54 7F0AA024 02002025 */ move $a0, $s0 -/* 0DEB58 7F0AA028 24050032 */ li $a1, 50 -/* 0DEB5C 7F0AA02C 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DEB60 7F0AA030 00403825 */ move $a3, $v0 -/* 0DEB64 7F0AA034 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DEB68 7F0AA038 AFA00020 */ sw $zero, 0x20($sp) -/* 0DEB6C 7F0AA03C 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DEB70 7F0AA040 AFA00028 */ sw $zero, 0x28($sp) -/* 0DEB74 7F0AA044 3C198008 */ lui $t9, %hi(g_CurrentPlayer) -/* 0DEB78 7F0AA048 8F39A0B0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0DEB7C 7F0AA04C 3C098004 */ lui $t1, %hi(D_800409DC+6) -/* 0DEB80 7F0AA050 3401AC01 */ li $at, 44033 -/* 0DEB84 7F0AA054 8F2F2A58 */ lw $t7, 0x2a58($t9) -/* 0DEB88 7F0AA058 00408025 */ move $s0, $v0 -/* 0DEB8C 7F0AA05C 240A0001 */ li $t2, 1 -/* 0DEB90 7F0AA060 000FC080 */ sll $t8, $t7, 2 -/* 0DEB94 7F0AA064 030FC021 */ addu $t8, $t8, $t7 -/* 0DEB98 7F0AA068 0018C080 */ sll $t8, $t8, 2 -/* 0DEB9C 7F0AA06C 01384821 */ addu $t1, $t1, $t8 -/* 0DEBA0 7F0AA070 952909E2 */ lhu $t1, %lo(D_800409DC+6)($t1) -/* 0DEBA4 7F0AA074 5521001F */ bnel $t1, $at, .L7F0AA0F4 -/* 0DEBA8 7F0AA078 8FAF004C */ lw $t7, 0x4c($sp) -/* 0DEBAC 7F0AA07C 1000001C */ b .L7F0AA0F0 -/* 0DEBB0 7F0AA080 AFAA0050 */ sw $t2, 0x50($sp) -.L7F0AA084: -/* 0DEBB4 7F0AA084 8D6BA0B0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0DEBB8 7F0AA088 3C048004 */ lui $a0, %hi(D_800409DC+6) -/* 0DEBBC 7F0AA08C 8D6C2A58 */ lw $t4, 0x2a58($t3) -/* 0DEBC0 7F0AA090 000C6880 */ sll $t5, $t4, 2 -/* 0DEBC4 7F0AA094 01AC6821 */ addu $t5, $t5, $t4 -/* 0DEBC8 7F0AA098 000D6880 */ sll $t5, $t5, 2 -/* 0DEBCC 7F0AA09C 008D2021 */ addu $a0, $a0, $t5 -/* 0DEBD0 7F0AA0A0 0FC30776 */ jal langGet -/* 0DEBD4 7F0AA0A4 948409E2 */ lhu $a0, %lo(D_800409DC+6)($a0) -/* 0DEBD8 7F0AA0A8 3C0E00AA */ lui $t6, (0x00AA00B0 >> 16) # lui $t6, 0xaa -/* 0DEBDC 7F0AA0AC 3C190030 */ lui $t9, (0x003000B0 >> 16) # lui $t9, 0x30 -/* 0DEBE0 7F0AA0B0 373900B0 */ ori $t9, (0x003000B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DEBE4 7F0AA0B4 35CE00B0 */ ori $t6, (0x00AA00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DEBE8 7F0AA0B8 2408FFFF */ li $t0, -1 -/* 0DEBEC 7F0AA0BC AFA80018 */ sw $t0, 0x18($sp) -/* 0DEBF0 7F0AA0C0 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DEBF4 7F0AA0C4 AFB90024 */ sw $t9, 0x24($sp) -/* 0DEBF8 7F0AA0C8 02002025 */ move $a0, $s0 -/* 0DEBFC 7F0AA0CC 24050032 */ li $a1, 50 -/* 0DEC00 7F0AA0D0 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DEC04 7F0AA0D4 00403825 */ move $a3, $v0 -/* 0DEC08 7F0AA0D8 AFA00014 */ sw $zero, 0x14($sp) -/* 0DEC0C 7F0AA0DC AFA0001C */ sw $zero, 0x1c($sp) -/* 0DEC10 7F0AA0E0 AFA00020 */ sw $zero, 0x20($sp) -/* 0DEC14 7F0AA0E4 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DEC18 7F0AA0E8 AFA00028 */ sw $zero, 0x28($sp) -/* 0DEC1C 7F0AA0EC 00408025 */ move $s0, $v0 -.L7F0AA0F0: -/* 0DEC20 7F0AA0F0 8FAF004C */ lw $t7, 0x4c($sp) -.L7F0AA0F4: -/* 0DEC24 7F0AA0F4 00002025 */ move $a0, $zero -/* 0DEC28 7F0AA0F8 24050010 */ li $a1, 16 -/* 0DEC2C 7F0AA0FC 25F8FFB5 */ addiu $t8, $t7, -0x4b -/* 0DEC30 7F0AA100 0C0030C3 */ jal joyGetButtons -/* 0DEC34 7F0AA104 AFB8004C */ sw $t8, 0x4c($sp) -/* 0DEC38 7F0AA108 1040002E */ beqz $v0, .L7F0AA1C4 -/* 0DEC3C 7F0AA10C 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) -/* 0DEC40 7F0AA110 3C098008 */ lui $t1, %hi(g_CurrentPlayer) -/* 0DEC44 7F0AA114 8D29A0B0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0DEC48 7F0AA118 3C048004 */ lui $a0, %hi(D_800409DC+10) -/* 0DEC4C 7F0AA11C 8D2A2A58 */ lw $t2, 0x2a58($t1) -/* 0DEC50 7F0AA120 000A5880 */ sll $t3, $t2, 2 -/* 0DEC54 7F0AA124 016A5821 */ addu $t3, $t3, $t2 -/* 0DEC58 7F0AA128 000B5880 */ sll $t3, $t3, 2 -/* 0DEC5C 7F0AA12C 008B2021 */ addu $a0, $a0, $t3 -/* 0DEC60 7F0AA130 0FC30776 */ jal langGet -/* 0DEC64 7F0AA134 948409E6 */ lhu $a0, %lo(D_800409DC+10)($a0) -/* 0DEC68 7F0AA138 3C0E0070 */ lui $t6, (0x007000A0 >> 16) # lui $t6, 0x70 -/* 0DEC6C 7F0AA13C 3C080030 */ lui $t0, (0x003000B0 >> 16) # lui $t0, 0x30 -/* 0DEC70 7F0AA140 350800B0 */ ori $t0, (0x003000B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DEC74 7F0AA144 35CE00A0 */ ori $t6, (0x007000A0 & 0xFFFF) # ori $t6, $t6, 0xa0 -/* 0DEC78 7F0AA148 240CFFFF */ li $t4, -1 -/* 0DEC7C 7F0AA14C 240D0001 */ li $t5, 1 -/* 0DEC80 7F0AA150 24190001 */ li $t9, 1 -/* 0DEC84 7F0AA154 AFB90028 */ sw $t9, 0x28($sp) -/* 0DEC88 7F0AA158 AFAD0014 */ sw $t5, 0x14($sp) -/* 0DEC8C 7F0AA15C AFAC0010 */ sw $t4, 0x10($sp) -/* 0DEC90 7F0AA160 AFAE0018 */ sw $t6, 0x18($sp) -/* 0DEC94 7F0AA164 AFA80024 */ sw $t0, 0x24($sp) -/* 0DEC98 7F0AA168 02002025 */ move $a0, $s0 -/* 0DEC9C 7F0AA16C 2405010E */ li $a1, 270 -/* 0DECA0 7F0AA170 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DECA4 7F0AA174 00403825 */ move $a3, $v0 -/* 0DECA8 7F0AA178 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DECAC 7F0AA17C 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DECB0 7F0AA180 AFA00020 */ sw $zero, 0x20($sp) -/* 0DECB4 7F0AA184 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) -/* 0DECB8 7F0AA188 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0DECBC 7F0AA18C 3C0A8004 */ lui $t2, %hi(D_800409DC+10) -/* 0DECC0 7F0AA190 3401AC01 */ li $at, 44033 -/* 0DECC4 7F0AA194 8DF82A58 */ lw $t8, 0x2a58($t7) -/* 0DECC8 7F0AA198 00408025 */ move $s0, $v0 -/* 0DECCC 7F0AA19C 240B0001 */ li $t3, 1 -/* 0DECD0 7F0AA1A0 00184880 */ sll $t1, $t8, 2 -/* 0DECD4 7F0AA1A4 01384821 */ addu $t1, $t1, $t8 -/* 0DECD8 7F0AA1A8 00094880 */ sll $t1, $t1, 2 -/* 0DECDC 7F0AA1AC 01495021 */ addu $t2, $t2, $t1 -/* 0DECE0 7F0AA1B0 954A09E6 */ lhu $t2, %lo(D_800409DC+10)($t2) -/* 0DECE4 7F0AA1B4 55410020 */ bnel $t2, $at, .L7F0AA238 -/* 0DECE8 7F0AA1B8 8FA9004C */ lw $t1, 0x4c($sp) -/* 0DECEC 7F0AA1BC 1000001D */ b .L7F0AA234 -/* 0DECF0 7F0AA1C0 AFAB0050 */ sw $t3, 0x50($sp) -.L7F0AA1C4: -/* 0DECF4 7F0AA1C4 8D8CA0B0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0DECF8 7F0AA1C8 3C048004 */ lui $a0, %hi(D_800409DC+10) -/* 0DECFC 7F0AA1CC 8D8D2A58 */ lw $t5, 0x2a58($t4) -/* 0DED00 7F0AA1D0 000D7080 */ sll $t6, $t5, 2 -/* 0DED04 7F0AA1D4 01CD7021 */ addu $t6, $t6, $t5 -/* 0DED08 7F0AA1D8 000E7080 */ sll $t6, $t6, 2 -/* 0DED0C 7F0AA1DC 008E2021 */ addu $a0, $a0, $t6 -/* 0DED10 7F0AA1E0 0FC30776 */ jal langGet -/* 0DED14 7F0AA1E4 948409E6 */ lhu $a0, %lo(D_800409DC+10)($a0) -/* 0DED18 7F0AA1E8 3C0800AA */ lui $t0, (0x00AA00B0 >> 16) # lui $t0, 0xaa -/* 0DED1C 7F0AA1EC 3C0F0030 */ lui $t7, (0x003000B0 >> 16) # lui $t7, 0x30 -/* 0DED20 7F0AA1F0 35EF00B0 */ ori $t7, (0x003000B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DED24 7F0AA1F4 350800B0 */ ori $t0, (0x00AA00B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DED28 7F0AA1F8 2419FFFF */ li $t9, -1 -/* 0DED2C 7F0AA1FC 24180001 */ li $t8, 1 -/* 0DED30 7F0AA200 AFB80028 */ sw $t8, 0x28($sp) -/* 0DED34 7F0AA204 AFB90018 */ sw $t9, 0x18($sp) -/* 0DED38 7F0AA208 AFA80010 */ sw $t0, 0x10($sp) -/* 0DED3C 7F0AA20C AFAF0024 */ sw $t7, 0x24($sp) -/* 0DED40 7F0AA210 02002025 */ move $a0, $s0 -/* 0DED44 7F0AA214 2405010E */ li $a1, 270 -/* 0DED48 7F0AA218 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DED4C 7F0AA21C 00403825 */ move $a3, $v0 -/* 0DED50 7F0AA220 AFA00014 */ sw $zero, 0x14($sp) -/* 0DED54 7F0AA224 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DED58 7F0AA228 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DED5C 7F0AA22C AFA00020 */ sw $zero, 0x20($sp) -/* 0DED60 7F0AA230 00408025 */ move $s0, $v0 -.L7F0AA234: -/* 0DED64 7F0AA234 8FA9004C */ lw $t1, 0x4c($sp) -.L7F0AA238: -/* 0DED68 7F0AA238 3C0B8004 */ lui $t3, %hi(controller_options_index) -/* 0DED6C 7F0AA23C 8D6B0998 */ lw $t3, %lo(controller_options_index)($t3) -/* 0DED70 7F0AA240 24010001 */ li $at, 1 -/* 0DED74 7F0AA244 252A0019 */ addiu $t2, $t1, 0x19 -/* 0DED78 7F0AA248 1561000A */ bne $t3, $at, .L7F0AA274 -/* 0DED7C 7F0AA24C AFAA004C */ sw $t2, 0x4c($sp) -/* 0DED80 7F0AA250 3C0C8004 */ lui $t4, %hi(watch_item_is_actively_selected) -/* 0DED84 7F0AA254 8D8C09A8 */ lw $t4, %lo(watch_item_is_actively_selected)($t4) -/* 0DED88 7F0AA258 00002025 */ move $a0, $zero -/* 0DED8C 7F0AA25C 11800005 */ beqz $t4, .L7F0AA274 -/* 0DED90 7F0AA260 00000000 */ nop -/* 0DED94 7F0AA264 0C0030C3 */ jal joyGetButtons -/* 0DED98 7F0AA268 2405000F */ li $a1, 15 -/* 0DED9C 7F0AA26C 1440001F */ bnez $v0, .L7F0AA2EC -/* 0DEDA0 7F0AA270 00002025 */ move $a0, $zero -.L7F0AA274: -/* 0DEDA4 7F0AA274 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) -/* 0DEDA8 7F0AA278 8DADA0B0 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 0DEDAC 7F0AA27C 3C048004 */ lui $a0, %hi(D_800409DC+12) -/* 0DEDB0 7F0AA280 8DAE2A58 */ lw $t6, 0x2a58($t5) -/* 0DEDB4 7F0AA284 000E4080 */ sll $t0, $t6, 2 -/* 0DEDB8 7F0AA288 010E4021 */ addu $t0, $t0, $t6 -/* 0DEDBC 7F0AA28C 00084080 */ sll $t0, $t0, 2 -/* 0DEDC0 7F0AA290 00882021 */ addu $a0, $a0, $t0 -/* 0DEDC4 7F0AA294 0FC30776 */ jal langGet -/* 0DEDC8 7F0AA298 948409E8 */ lhu $a0, %lo(D_800409DC+12)($a0) -/* 0DEDCC 7F0AA29C 3C1900AA */ lui $t9, (0x00AA00B0 >> 16) # lui $t9, 0xaa -/* 0DEDD0 7F0AA2A0 3C180030 */ lui $t8, (0x003000B0 >> 16) # lui $t8, 0x30 -/* 0DEDD4 7F0AA2A4 371800B0 */ ori $t8, (0x003000B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0DEDD8 7F0AA2A8 373900B0 */ ori $t9, (0x00AA00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DEDDC 7F0AA2AC 240FFFFF */ li $t7, -1 -/* 0DEDE0 7F0AA2B0 24090001 */ li $t1, 1 -/* 0DEDE4 7F0AA2B4 AFA90028 */ sw $t1, 0x28($sp) -/* 0DEDE8 7F0AA2B8 AFAF0018 */ sw $t7, 0x18($sp) -/* 0DEDEC 7F0AA2BC AFB90010 */ sw $t9, 0x10($sp) -/* 0DEDF0 7F0AA2C0 AFB80024 */ sw $t8, 0x24($sp) -/* 0DEDF4 7F0AA2C4 02002025 */ move $a0, $s0 -/* 0DEDF8 7F0AA2C8 2405010E */ li $a1, 270 -/* 0DEDFC 7F0AA2CC 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DEE00 7F0AA2D0 00403825 */ move $a3, $v0 -/* 0DEE04 7F0AA2D4 AFA00014 */ sw $zero, 0x14($sp) -/* 0DEE08 7F0AA2D8 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DEE0C 7F0AA2DC 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DEE10 7F0AA2E0 AFA00020 */ sw $zero, 0x20($sp) -/* 0DEE14 7F0AA2E4 10000076 */ b .L7F0AA4C0 -/* 0DEE18 7F0AA2E8 00408025 */ move $s0, $v0 -.L7F0AA2EC: -/* 0DEE1C 7F0AA2EC 0C0030C3 */ jal joyGetButtons -/* 0DEE20 7F0AA2F0 2405000F */ li $a1, 15 -/* 0DEE24 7F0AA2F4 244AFFFF */ addiu $t2, $v0, -1 -/* 0DEE28 7F0AA2F8 004A5824 */ and $t3, $v0, $t2 -/* 0DEE2C 7F0AA2FC 15600054 */ bnez $t3, .L7F0AA450 -/* 0DEE30 7F0AA300 3C088008 */ lui $t0, %hi(g_CurrentPlayer) -/* 0DEE34 7F0AA304 00002025 */ move $a0, $zero -/* 0DEE38 7F0AA308 0C0030C3 */ jal joyGetButtons -/* 0DEE3C 7F0AA30C 24050008 */ li $a1, 8 -/* 0DEE40 7F0AA310 10400014 */ beqz $v0, .L7F0AA364 -/* 0DEE44 7F0AA314 00002025 */ move $a0, $zero -/* 0DEE48 7F0AA318 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) -/* 0DEE4C 7F0AA31C 8D8CA0B0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0DEE50 7F0AA320 3C088004 */ lui $t0, %hi(D_800409DC+12) -/* 0DEE54 7F0AA324 3401AC05 */ li $at, 44037 -/* 0DEE58 7F0AA328 8D8D2A58 */ lw $t5, 0x2a58($t4) -/* 0DEE5C 7F0AA32C 8FA700AC */ lw $a3, 0xac($sp) -/* 0DEE60 7F0AA330 000D7080 */ sll $t6, $t5, 2 -/* 0DEE64 7F0AA334 01CD7021 */ addu $t6, $t6, $t5 -/* 0DEE68 7F0AA338 000E7080 */ sll $t6, $t6, 2 -/* 0DEE6C 7F0AA33C 010E4021 */ addu $t0, $t0, $t6 -/* 0DEE70 7F0AA340 950809E8 */ lhu $t0, %lo(D_800409DC+12)($t0) -/* 0DEE74 7F0AA344 15010005 */ bne $t0, $at, .L7F0AA35C -/* 0DEE78 7F0AA348 00000000 */ nop -/* 0DEE7C 7F0AA34C 0FC30776 */ jal langGet -/* 0DEE80 7F0AA350 3404AC30 */ li $a0, 44080 -/* 0DEE84 7F0AA354 10000001 */ b .L7F0AA35C -/* 0DEE88 7F0AA358 00403825 */ move $a3, $v0 -.L7F0AA35C: -/* 0DEE8C 7F0AA35C 10000027 */ b .L7F0AA3FC -/* 0DEE90 7F0AA360 AFA7005C */ sw $a3, 0x5c($sp) -.L7F0AA364: -/* 0DEE94 7F0AA364 0C0030C3 */ jal joyGetButtons -/* 0DEE98 7F0AA368 24050004 */ li $a1, 4 -/* 0DEE9C 7F0AA36C 10400014 */ beqz $v0, .L7F0AA3C0 -/* 0DEEA0 7F0AA370 00002025 */ move $a0, $zero -/* 0DEEA4 7F0AA374 3C198008 */ lui $t9, %hi(g_CurrentPlayer) -/* 0DEEA8 7F0AA378 8F39A0B0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0DEEAC 7F0AA37C 3C098004 */ lui $t1, %hi(D_800409DC+12) -/* 0DEEB0 7F0AA380 3401AC05 */ li $at, 44037 -/* 0DEEB4 7F0AA384 8F2F2A58 */ lw $t7, 0x2a58($t9) -/* 0DEEB8 7F0AA388 8FA700A8 */ lw $a3, 0xa8($sp) -/* 0DEEBC 7F0AA38C 000FC080 */ sll $t8, $t7, 2 -/* 0DEEC0 7F0AA390 030FC021 */ addu $t8, $t8, $t7 -/* 0DEEC4 7F0AA394 0018C080 */ sll $t8, $t8, 2 -/* 0DEEC8 7F0AA398 01384821 */ addu $t1, $t1, $t8 -/* 0DEECC 7F0AA39C 952909E8 */ lhu $t1, %lo(D_800409DC+12)($t1) -/* 0DEED0 7F0AA3A0 15210005 */ bne $t1, $at, .L7F0AA3B8 -/* 0DEED4 7F0AA3A4 00000000 */ nop -/* 0DEED8 7F0AA3A8 0FC30776 */ jal langGet -/* 0DEEDC 7F0AA3AC 3404AC31 */ li $a0, 44081 -/* 0DEEE0 7F0AA3B0 10000001 */ b .L7F0AA3B8 -/* 0DEEE4 7F0AA3B4 00403825 */ move $a3, $v0 -.L7F0AA3B8: -/* 0DEEE8 7F0AA3B8 10000010 */ b .L7F0AA3FC -/* 0DEEEC 7F0AA3BC AFA7005C */ sw $a3, 0x5c($sp) -.L7F0AA3C0: -/* 0DEEF0 7F0AA3C0 0C0030C3 */ jal joyGetButtons -/* 0DEEF4 7F0AA3C4 24050002 */ li $a1, 2 -/* 0DEEF8 7F0AA3C8 10400005 */ beqz $v0, .L7F0AA3E0 -/* 0DEEFC 7F0AA3CC 00002025 */ move $a0, $zero -/* 0DEF00 7F0AA3D0 0FC30776 */ jal langGet -/* 0DEF04 7F0AA3D4 3404AC2F */ li $a0, 44079 -/* 0DEF08 7F0AA3D8 10000008 */ b .L7F0AA3FC -/* 0DEF0C 7F0AA3DC AFA2005C */ sw $v0, 0x5c($sp) -.L7F0AA3E0: -/* 0DEF10 7F0AA3E0 0C0030C3 */ jal joyGetButtons -/* 0DEF14 7F0AA3E4 24050001 */ li $a1, 1 -/* 0DEF18 7F0AA3E8 50400005 */ beql $v0, $zero, .L7F0AA400 -/* 0DEF1C 7F0AA3EC 3C0C0070 */ lui $t4, 0x70 -/* 0DEF20 7F0AA3F0 0FC30776 */ jal langGet -/* 0DEF24 7F0AA3F4 3404AC2E */ li $a0, 44078 -/* 0DEF28 7F0AA3F8 AFA2005C */ sw $v0, 0x5c($sp) -.L7F0AA3FC: -/* 0DEF2C 7F0AA3FC 3C0C0070 */ lui $t4, (0x007000A0 >> 16) # lui $t4, 0x70 -.L7F0AA400: -/* 0DEF30 7F0AA400 3C0D0030 */ lui $t5, (0x003000B0 >> 16) # lui $t5, 0x30 -/* 0DEF34 7F0AA404 35AD00B0 */ ori $t5, (0x003000B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0DEF38 7F0AA408 358C00A0 */ ori $t4, (0x007000A0 & 0xFFFF) # ori $t4, $t4, 0xa0 -/* 0DEF3C 7F0AA40C 240AFFFF */ li $t2, -1 -/* 0DEF40 7F0AA410 240B0001 */ li $t3, 1 -/* 0DEF44 7F0AA414 240E0001 */ li $t6, 1 -/* 0DEF48 7F0AA418 8FA7005C */ lw $a3, 0x5c($sp) -/* 0DEF4C 7F0AA41C AFAE0028 */ sw $t6, 0x28($sp) -/* 0DEF50 7F0AA420 AFAB0014 */ sw $t3, 0x14($sp) -/* 0DEF54 7F0AA424 AFAA0010 */ sw $t2, 0x10($sp) -/* 0DEF58 7F0AA428 AFAC0018 */ sw $t4, 0x18($sp) -/* 0DEF5C 7F0AA42C AFAD0024 */ sw $t5, 0x24($sp) -/* 0DEF60 7F0AA430 02002025 */ move $a0, $s0 -/* 0DEF64 7F0AA434 2405010E */ li $a1, 270 -/* 0DEF68 7F0AA438 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DEF6C 7F0AA43C AFA0001C */ sw $zero, 0x1c($sp) -/* 0DEF70 7F0AA440 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DEF74 7F0AA444 AFA00020 */ sw $zero, 0x20($sp) -/* 0DEF78 7F0AA448 1000001D */ b .L7F0AA4C0 -/* 0DEF7C 7F0AA44C 00408025 */ move $s0, $v0 -.L7F0AA450: -/* 0DEF80 7F0AA450 8D08A0B0 */ lw $t0, %lo(g_CurrentPlayer)($t0) -/* 0DEF84 7F0AA454 3C048004 */ lui $a0, %hi(D_800409DC+12) -/* 0DEF88 7F0AA458 8D192A58 */ lw $t9, 0x2a58($t0) -/* 0DEF8C 7F0AA45C 00197880 */ sll $t7, $t9, 2 -/* 0DEF90 7F0AA460 01F97821 */ addu $t7, $t7, $t9 -/* 0DEF94 7F0AA464 000F7880 */ sll $t7, $t7, 2 -/* 0DEF98 7F0AA468 008F2021 */ addu $a0, $a0, $t7 -/* 0DEF9C 7F0AA46C 0FC30776 */ jal langGet -/* 0DEFA0 7F0AA470 948409E8 */ lhu $a0, %lo(D_800409DC+12)($a0) -/* 0DEFA4 7F0AA474 3C1800AA */ lui $t8, (0x00AA00B0 >> 16) # lui $t8, 0xaa -/* 0DEFA8 7F0AA478 3C0A0030 */ lui $t2, (0x003000B0 >> 16) # lui $t2, 0x30 -/* 0DEFAC 7F0AA47C 354A00B0 */ ori $t2, (0x003000B0 & 0xFFFF) # ori $t2, $t2, 0xb0 -/* 0DEFB0 7F0AA480 371800B0 */ ori $t8, (0x00AA00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0DEFB4 7F0AA484 2409FFFF */ li $t1, -1 -/* 0DEFB8 7F0AA488 240B0001 */ li $t3, 1 -/* 0DEFBC 7F0AA48C AFAB0028 */ sw $t3, 0x28($sp) -/* 0DEFC0 7F0AA490 AFA90018 */ sw $t1, 0x18($sp) -/* 0DEFC4 7F0AA494 AFB80010 */ sw $t8, 0x10($sp) -/* 0DEFC8 7F0AA498 AFAA0024 */ sw $t2, 0x24($sp) -/* 0DEFCC 7F0AA49C 02002025 */ move $a0, $s0 -/* 0DEFD0 7F0AA4A0 2405010E */ li $a1, 270 -/* 0DEFD4 7F0AA4A4 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DEFD8 7F0AA4A8 00403825 */ move $a3, $v0 -/* 0DEFDC 7F0AA4AC AFA00014 */ sw $zero, 0x14($sp) -/* 0DEFE0 7F0AA4B0 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DEFE4 7F0AA4B4 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DEFE8 7F0AA4B8 AFA00020 */ sw $zero, 0x20($sp) -/* 0DEFEC 7F0AA4BC 00408025 */ move $s0, $v0 -.L7F0AA4C0: -/* 0DEFF0 7F0AA4C0 8FAC004C */ lw $t4, 0x4c($sp) -/* 0DEFF4 7F0AA4C4 00002025 */ move $a0, $zero -/* 0DEFF8 7F0AA4C8 24054000 */ li $a1, 16384 -/* 0DEFFC 7F0AA4CC 258D0019 */ addiu $t5, $t4, 0x19 -/* 0DF000 7F0AA4D0 0C0030C3 */ jal joyGetButtons -/* 0DF004 7F0AA4D4 AFAD004C */ sw $t5, 0x4c($sp) -/* 0DF008 7F0AA4D8 10400020 */ beqz $v0, .L7F0AA55C -/* 0DF00C 7F0AA4DC 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) -/* 0DF010 7F0AA4E0 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 0DF014 7F0AA4E4 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0DF018 7F0AA4E8 3C048004 */ lui $a0, %hi(D_800409DC+4) -/* 0DF01C 7F0AA4EC 8DC82A58 */ lw $t0, 0x2a58($t6) -/* 0DF020 7F0AA4F0 0008C880 */ sll $t9, $t0, 2 -/* 0DF024 7F0AA4F4 0328C821 */ addu $t9, $t9, $t0 -/* 0DF028 7F0AA4F8 0019C880 */ sll $t9, $t9, 2 -/* 0DF02C 7F0AA4FC 00992021 */ addu $a0, $a0, $t9 -/* 0DF030 7F0AA500 0FC30776 */ jal langGet -/* 0DF034 7F0AA504 948409E0 */ lhu $a0, %lo(D_800409DC+4)($a0) -/* 0DF038 7F0AA508 3C090070 */ lui $t1, (0x007000A0 >> 16) # lui $t1, 0x70 -/* 0DF03C 7F0AA50C 3C0A0030 */ lui $t2, (0x003000B0 >> 16) # lui $t2, 0x30 -/* 0DF040 7F0AA510 354A00B0 */ ori $t2, (0x003000B0 & 0xFFFF) # ori $t2, $t2, 0xb0 -/* 0DF044 7F0AA514 352900A0 */ ori $t1, (0x007000A0 & 0xFFFF) # ori $t1, $t1, 0xa0 -/* 0DF048 7F0AA518 240FFFFF */ li $t7, -1 -/* 0DF04C 7F0AA51C 24180001 */ li $t8, 1 -/* 0DF050 7F0AA520 240B0001 */ li $t3, 1 -/* 0DF054 7F0AA524 AFAB0028 */ sw $t3, 0x28($sp) -/* 0DF058 7F0AA528 AFB80014 */ sw $t8, 0x14($sp) -/* 0DF05C 7F0AA52C AFAF0010 */ sw $t7, 0x10($sp) -/* 0DF060 7F0AA530 AFA90018 */ sw $t1, 0x18($sp) -/* 0DF064 7F0AA534 AFAA0024 */ sw $t2, 0x24($sp) -/* 0DF068 7F0AA538 02002025 */ move $a0, $s0 -/* 0DF06C 7F0AA53C 2405010E */ li $a1, 270 -/* 0DF070 7F0AA540 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DF074 7F0AA544 00403825 */ move $a3, $v0 -/* 0DF078 7F0AA548 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF07C 7F0AA54C 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF080 7F0AA550 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF084 7F0AA554 1000001D */ b .L7F0AA5CC -/* 0DF088 7F0AA558 00408025 */ move $s0, $v0 -.L7F0AA55C: -/* 0DF08C 7F0AA55C 8D8CA0B0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0DF090 7F0AA560 3C048004 */ lui $a0, %hi(D_800409DC+4) -/* 0DF094 7F0AA564 8D8D2A58 */ lw $t5, 0x2a58($t4) -/* 0DF098 7F0AA568 000D7080 */ sll $t6, $t5, 2 -/* 0DF09C 7F0AA56C 01CD7021 */ addu $t6, $t6, $t5 -/* 0DF0A0 7F0AA570 000E7080 */ sll $t6, $t6, 2 -/* 0DF0A4 7F0AA574 008E2021 */ addu $a0, $a0, $t6 -/* 0DF0A8 7F0AA578 0FC30776 */ jal langGet -/* 0DF0AC 7F0AA57C 948409E0 */ lhu $a0, %lo(D_800409DC+4)($a0) -/* 0DF0B0 7F0AA580 3C0800AA */ lui $t0, (0x00AA00B0 >> 16) # lui $t0, 0xaa -/* 0DF0B4 7F0AA584 3C0F0030 */ lui $t7, (0x003000B0 >> 16) # lui $t7, 0x30 -/* 0DF0B8 7F0AA588 35EF00B0 */ ori $t7, (0x003000B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DF0BC 7F0AA58C 350800B0 */ ori $t0, (0x00AA00B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DF0C0 7F0AA590 2419FFFF */ li $t9, -1 -/* 0DF0C4 7F0AA594 24180001 */ li $t8, 1 -/* 0DF0C8 7F0AA598 AFB80028 */ sw $t8, 0x28($sp) -/* 0DF0CC 7F0AA59C AFB90018 */ sw $t9, 0x18($sp) -/* 0DF0D0 7F0AA5A0 AFA80010 */ sw $t0, 0x10($sp) -/* 0DF0D4 7F0AA5A4 AFAF0024 */ sw $t7, 0x24($sp) -/* 0DF0D8 7F0AA5A8 02002025 */ move $a0, $s0 -/* 0DF0DC 7F0AA5AC 2405010E */ li $a1, 270 -/* 0DF0E0 7F0AA5B0 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DF0E4 7F0AA5B4 00403825 */ move $a3, $v0 -/* 0DF0E8 7F0AA5B8 AFA00014 */ sw $zero, 0x14($sp) -/* 0DF0EC 7F0AA5BC AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF0F0 7F0AA5C0 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF0F4 7F0AA5C4 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF0F8 7F0AA5C8 00408025 */ move $s0, $v0 -.L7F0AA5CC: -/* 0DF0FC 7F0AA5CC 8FA9004C */ lw $t1, 0x4c($sp) -/* 0DF100 7F0AA5D0 00002025 */ move $a0, $zero -/* 0DF104 7F0AA5D4 34058000 */ li $a1, 32768 -/* 0DF108 7F0AA5D8 252A0019 */ addiu $t2, $t1, 0x19 -/* 0DF10C 7F0AA5DC 0C0030C3 */ jal joyGetButtons -/* 0DF110 7F0AA5E0 AFAA004C */ sw $t2, 0x4c($sp) -/* 0DF114 7F0AA5E4 10400020 */ beqz $v0, .L7F0AA668 -/* 0DF118 7F0AA5E8 3C098008 */ lui $t1, %hi(g_CurrentPlayer) -/* 0DF11C 7F0AA5EC 3C0B8008 */ lui $t3, %hi(g_CurrentPlayer) -/* 0DF120 7F0AA5F0 8D6BA0B0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0DF124 7F0AA5F4 3C048004 */ lui $a0, %hi(D_800409DC+2) -/* 0DF128 7F0AA5F8 8D6C2A58 */ lw $t4, 0x2a58($t3) -/* 0DF12C 7F0AA5FC 000C6880 */ sll $t5, $t4, 2 -/* 0DF130 7F0AA600 01AC6821 */ addu $t5, $t5, $t4 -/* 0DF134 7F0AA604 000D6880 */ sll $t5, $t5, 2 -/* 0DF138 7F0AA608 008D2021 */ addu $a0, $a0, $t5 -/* 0DF13C 7F0AA60C 0FC30776 */ jal langGet -/* 0DF140 7F0AA610 948409DE */ lhu $a0, %lo(D_800409DC+2)($a0) -/* 0DF144 7F0AA614 3C190070 */ lui $t9, (0x007000A0 >> 16) # lui $t9, 0x70 -/* 0DF148 7F0AA618 3C0F0030 */ lui $t7, (0x003000B0 >> 16) # lui $t7, 0x30 -/* 0DF14C 7F0AA61C 35EF00B0 */ ori $t7, (0x003000B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DF150 7F0AA620 373900A0 */ ori $t9, (0x007000A0 & 0xFFFF) # ori $t9, $t9, 0xa0 -/* 0DF154 7F0AA624 240EFFFF */ li $t6, -1 -/* 0DF158 7F0AA628 24080001 */ li $t0, 1 -/* 0DF15C 7F0AA62C 24180001 */ li $t8, 1 -/* 0DF160 7F0AA630 AFB80028 */ sw $t8, 0x28($sp) -/* 0DF164 7F0AA634 AFA80014 */ sw $t0, 0x14($sp) -/* 0DF168 7F0AA638 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DF16C 7F0AA63C AFB90018 */ sw $t9, 0x18($sp) -/* 0DF170 7F0AA640 AFAF0024 */ sw $t7, 0x24($sp) -/* 0DF174 7F0AA644 02002025 */ move $a0, $s0 -/* 0DF178 7F0AA648 2405010E */ li $a1, 270 -/* 0DF17C 7F0AA64C 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DF180 7F0AA650 00403825 */ move $a3, $v0 -/* 0DF184 7F0AA654 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF188 7F0AA658 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF18C 7F0AA65C AFA00020 */ sw $zero, 0x20($sp) -/* 0DF190 7F0AA660 1000001D */ b .L7F0AA6D8 -/* 0DF194 7F0AA664 00408025 */ move $s0, $v0 -.L7F0AA668: -/* 0DF198 7F0AA668 8D29A0B0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0DF19C 7F0AA66C 3C048004 */ lui $a0, %hi(D_800409DC+2) -/* 0DF1A0 7F0AA670 8D2A2A58 */ lw $t2, 0x2a58($t1) -/* 0DF1A4 7F0AA674 000A5880 */ sll $t3, $t2, 2 -/* 0DF1A8 7F0AA678 016A5821 */ addu $t3, $t3, $t2 -/* 0DF1AC 7F0AA67C 000B5880 */ sll $t3, $t3, 2 -/* 0DF1B0 7F0AA680 008B2021 */ addu $a0, $a0, $t3 -/* 0DF1B4 7F0AA684 0FC30776 */ jal langGet -/* 0DF1B8 7F0AA688 948409DE */ lhu $a0, %lo(D_800409DC+2)($a0) -/* 0DF1BC 7F0AA68C 3C0C00AA */ lui $t4, (0x00AA00B0 >> 16) # lui $t4, 0xaa -/* 0DF1C0 7F0AA690 3C0E0030 */ lui $t6, (0x003000B0 >> 16) # lui $t6, 0x30 -/* 0DF1C4 7F0AA694 35CE00B0 */ ori $t6, (0x003000B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DF1C8 7F0AA698 358C00B0 */ ori $t4, (0x00AA00B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0DF1CC 7F0AA69C 240DFFFF */ li $t5, -1 -/* 0DF1D0 7F0AA6A0 24080001 */ li $t0, 1 -/* 0DF1D4 7F0AA6A4 AFA80028 */ sw $t0, 0x28($sp) -/* 0DF1D8 7F0AA6A8 AFAD0018 */ sw $t5, 0x18($sp) -/* 0DF1DC 7F0AA6AC AFAC0010 */ sw $t4, 0x10($sp) -/* 0DF1E0 7F0AA6B0 AFAE0024 */ sw $t6, 0x24($sp) -/* 0DF1E4 7F0AA6B4 02002025 */ move $a0, $s0 -/* 0DF1E8 7F0AA6B8 2405010E */ li $a1, 270 -/* 0DF1EC 7F0AA6BC 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DF1F0 7F0AA6C0 00403825 */ move $a3, $v0 -/* 0DF1F4 7F0AA6C4 AFA00014 */ sw $zero, 0x14($sp) -/* 0DF1F8 7F0AA6C8 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF1FC 7F0AA6CC 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF200 7F0AA6D0 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF204 7F0AA6D4 00408025 */ move $s0, $v0 -.L7F0AA6D8: -/* 0DF208 7F0AA6D8 8FB90050 */ lw $t9, 0x50($sp) -/* 0DF20C 7F0AA6DC 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) -/* 0DF210 7F0AA6E0 13200018 */ beqz $t9, .L7F0AA744 -/* 0DF214 7F0AA6E4 00000000 */ nop -/* 0DF218 7F0AA6E8 0FC30776 */ jal langGet -/* 0DF21C 7F0AA6EC 3404AC08 */ li $a0, 44040 -/* 0DF220 7F0AA6F0 3C090070 */ lui $t1, (0x007000A0 >> 16) # lui $t1, 0x70 -/* 0DF224 7F0AA6F4 3C0A0030 */ lui $t2, (0x003000B0 >> 16) # lui $t2, 0x30 -/* 0DF228 7F0AA6F8 354A00B0 */ ori $t2, (0x003000B0 & 0xFFFF) # ori $t2, $t2, 0xb0 -/* 0DF22C 7F0AA6FC 352900A0 */ ori $t1, (0x007000A0 & 0xFFFF) # ori $t1, $t1, 0xa0 -/* 0DF230 7F0AA700 240FFFFF */ li $t7, -1 -/* 0DF234 7F0AA704 24180001 */ li $t8, 1 -/* 0DF238 7F0AA708 240B0001 */ li $t3, 1 -/* 0DF23C 7F0AA70C AFAB0028 */ sw $t3, 0x28($sp) -/* 0DF240 7F0AA710 AFB80014 */ sw $t8, 0x14($sp) -/* 0DF244 7F0AA714 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DF248 7F0AA718 AFA90018 */ sw $t1, 0x18($sp) -/* 0DF24C 7F0AA71C AFAA0024 */ sw $t2, 0x24($sp) -/* 0DF250 7F0AA720 02002025 */ move $a0, $s0 -/* 0DF254 7F0AA724 240500FA */ li $a1, 250 -/* 0DF258 7F0AA728 240600C3 */ li $a2, 195 -/* 0DF25C 7F0AA72C 00403825 */ move $a3, $v0 -/* 0DF260 7F0AA730 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF264 7F0AA734 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF268 7F0AA738 AFA00020 */ sw $zero, 0x20($sp) -/* 0DF26C 7F0AA73C 1000001D */ b .L7F0AA7B4 -/* 0DF270 7F0AA740 00408025 */ move $s0, $v0 -.L7F0AA744: -/* 0DF274 7F0AA744 8D8CA0B0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0DF278 7F0AA748 3C048004 */ lui $a0, %hi(D_800409DC+18) -/* 0DF27C 7F0AA74C 8D8D2A58 */ lw $t5, 0x2a58($t4) -/* 0DF280 7F0AA750 000D7080 */ sll $t6, $t5, 2 -/* 0DF284 7F0AA754 01CD7021 */ addu $t6, $t6, $t5 -/* 0DF288 7F0AA758 000E7080 */ sll $t6, $t6, 2 -/* 0DF28C 7F0AA75C 008E2021 */ addu $a0, $a0, $t6 -/* 0DF290 7F0AA760 0FC30776 */ jal langGet -/* 0DF294 7F0AA764 948409EE */ lhu $a0, %lo(D_800409DC+18)($a0) -/* 0DF298 7F0AA768 3C0800AA */ lui $t0, (0x00AA00B0 >> 16) # lui $t0, 0xaa -/* 0DF29C 7F0AA76C 3C0F0030 */ lui $t7, (0x003000B0 >> 16) # lui $t7, 0x30 -/* 0DF2A0 7F0AA770 35EF00B0 */ ori $t7, (0x003000B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DF2A4 7F0AA774 350800B0 */ ori $t0, (0x00AA00B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DF2A8 7F0AA778 2419FFFF */ li $t9, -1 -/* 0DF2AC 7F0AA77C 24180001 */ li $t8, 1 -/* 0DF2B0 7F0AA780 AFB80028 */ sw $t8, 0x28($sp) -/* 0DF2B4 7F0AA784 AFB90018 */ sw $t9, 0x18($sp) -/* 0DF2B8 7F0AA788 AFA80010 */ sw $t0, 0x10($sp) -/* 0DF2BC 7F0AA78C AFAF0024 */ sw $t7, 0x24($sp) -/* 0DF2C0 7F0AA790 02002025 */ move $a0, $s0 -/* 0DF2C4 7F0AA794 240500FA */ li $a1, 250 -/* 0DF2C8 7F0AA798 240600C3 */ li $a2, 195 -/* 0DF2CC 7F0AA79C 00403825 */ move $a3, $v0 -/* 0DF2D0 7F0AA7A0 AFA00014 */ sw $zero, 0x14($sp) -/* 0DF2D4 7F0AA7A4 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DF2D8 7F0AA7A8 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0DF2DC 7F0AA7AC AFA00020 */ sw $zero, 0x20($sp) -/* 0DF2E0 7F0AA7B0 00408025 */ move $s0, $v0 -.L7F0AA7B4: -/* 0DF2E4 7F0AA7B4 8FBF003C */ lw $ra, 0x3c($sp) -/* 0DF2E8 7F0AA7B8 02001025 */ move $v0, $s0 -/* 0DF2EC 7F0AA7BC 8FB00038 */ lw $s0, 0x38($sp) -/* 0DF2F0 7F0AA7C0 03E00008 */ jr $ra -/* 0DF2F4 7F0AA7C4 27BD00B0 */ addiu $sp, $sp, 0xb0 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A9AB8 -/* 0DB7E8 7F0A8DF8 3C0E8004 */ lui $t6, %hi(game_options_entries) # $t6, 0x8004 -/* 0DB7EC 7F0A8DFC 8DCEA6D4 */ lw $t6, %lo(game_options_entries + 0x8)($t6) -/* 0DB7F0 7F0A8E00 27BDFF50 */ addiu $sp, $sp, -0xb0 -/* 0DB7F4 7F0A8E04 AFB00038 */ sw $s0, 0x38($sp) -/* 0DB7F8 7F0A8E08 24010001 */ li $at, 1 -/* 0DB7FC 7F0A8E0C 00808025 */ move $s0, $a0 -/* 0DB800 7F0A8E10 15C10008 */ bne $t6, $at, .L7F0A8E34 -/* 0DB804 7F0A8E14 AFBF003C */ sw $ra, 0x3c($sp) -/* 0DB808 7F0A8E18 0FC304AE */ jal langGet -/* 0DB80C 7F0A8E1C 3404AC2D */ li $a0, 44077 -/* 0DB810 7F0A8E20 AFA200AC */ sw $v0, 0xac($sp) -/* 0DB814 7F0A8E24 0FC304AE */ jal langGet -/* 0DB818 7F0A8E28 3404AC2C */ li $a0, 44076 -/* 0DB81C 7F0A8E2C 10000007 */ b .L7F0A8E4C -/* 0DB820 7F0A8E30 AFA200A8 */ sw $v0, 0xa8($sp) -.L7F0A8E34: -/* 0DB824 7F0A8E34 0FC304AE */ jal langGet -/* 0DB828 7F0A8E38 3404AC2C */ li $a0, 44076 -/* 0DB82C 7F0A8E3C AFA200AC */ sw $v0, 0xac($sp) -/* 0DB830 7F0A8E40 0FC304AE */ jal langGet -/* 0DB834 7F0A8E44 3404AC2D */ li $a0, 44077 -/* 0DB838 7F0A8E48 AFA200A8 */ sw $v0, 0xa8($sp) -.L7F0A8E4C: -/* 0DB83C 7F0A8E4C 3C188005 */ lui $t8, %hi(aA) # $t8, 0x8005 -/* 0DB840 7F0A8E50 2718CE48 */ addiu $t8, %lo(aA) # addiu $t8, $t8, -0x31b8 -/* 0DB844 7F0A8E54 8F010000 */ lw $at, ($t8) -/* 0DB848 7F0A8E58 27AF00A0 */ addiu $t7, $sp, 0xa0 -/* 0DB84C 7F0A8E5C 3C0B8005 */ lui $t3, %hi(aB) # $t3, 0x8005 -/* 0DB850 7F0A8E60 ADE10000 */ sw $at, ($t7) -/* 0DB854 7F0A8E64 93010004 */ lbu $at, 4($t8) -/* 0DB858 7F0A8E68 256BCE50 */ addiu $t3, %lo(aB) # addiu $t3, $t3, -0x31b0 -/* 0DB85C 7F0A8E6C 27AA0098 */ addiu $t2, $sp, 0x98 -/* 0DB860 7F0A8E70 A1E10004 */ sb $at, 4($t7) -/* 0DB864 7F0A8E74 8D610000 */ lw $at, ($t3) -/* 0DB868 7F0A8E78 3C198005 */ lui $t9, %hi(aZ) # $t9, 0x8005 -/* 0DB86C 7F0A8E7C 2739CE58 */ addiu $t9, %lo(aZ) # addiu $t9, $t9, -0x31a8 -/* 0DB870 7F0A8E80 AD410000 */ sw $at, ($t2) -/* 0DB874 7F0A8E84 91610004 */ lbu $at, 4($t3) -/* 0DB878 7F0A8E88 27A80090 */ addiu $t0, $sp, 0x90 -/* 0DB87C 7F0A8E8C 3C0C8005 */ lui $t4, %hi(aL) # $t4, 0x8005 -/* 0DB880 7F0A8E90 A1410004 */ sb $at, 4($t2) -/* 0DB884 7F0A8E94 8F210000 */ lw $at, ($t9) -/* 0DB888 7F0A8E98 258CCE60 */ addiu $t4, %lo(aL) # addiu $t4, $t4, -0x31a0 -/* 0DB88C 7F0A8E9C 27AD0088 */ addiu $t5, $sp, 0x88 -/* 0DB890 7F0A8EA0 AD010000 */ sw $at, ($t0) -/* 0DB894 7F0A8EA4 93210004 */ lbu $at, 4($t9) -/* 0DB898 7F0A8EA8 3C0F8005 */ lui $t7, %hi(aR) # $t7, 0x8005 -/* 0DB89C 7F0A8EAC 25EFCE68 */ addiu $t7, %lo(aR) # addiu $t7, $t7, -0x3198 -/* 0DB8A0 7F0A8EB0 A1010004 */ sb $at, 4($t0) -/* 0DB8A4 7F0A8EB4 8D810000 */ lw $at, ($t4) -/* 0DB8A8 7F0A8EB8 27B80080 */ addiu $t8, $sp, 0x80 -/* 0DB8AC 7F0A8EBC 3C0A8005 */ lui $t2, %hi(aC) # $t2, 0x8005 -/* 0DB8B0 7F0A8EC0 ADA10000 */ sw $at, ($t5) -/* 0DB8B4 7F0A8EC4 91810004 */ lbu $at, 4($t4) -/* 0DB8B8 7F0A8EC8 254ACE70 */ addiu $t2, %lo(aC) # addiu $t2, $t2, -0x3190 -/* 0DB8BC 7F0A8ECC 27AB0078 */ addiu $t3, $sp, 0x78 -/* 0DB8C0 7F0A8ED0 A1A10004 */ sb $at, 4($t5) -/* 0DB8C4 7F0A8ED4 8DE10000 */ lw $at, ($t7) -/* 0DB8C8 7F0A8ED8 3C088005 */ lui $t0, %hi(D_800577A8) # $t0, 0x8005 -/* 0DB8CC 7F0A8EDC 2508CE78 */ addiu $t0, %lo(D_800577A8) # addiu $t0, $t0, -0x3188 -/* 0DB8D0 7F0A8EE0 AF010000 */ sw $at, ($t8) -/* 0DB8D4 7F0A8EE4 91E10004 */ lbu $at, 4($t7) -/* 0DB8D8 7F0A8EE8 27B90070 */ addiu $t9, $sp, 0x70 -/* 0DB8DC 7F0A8EEC 3C0D8005 */ lui $t5, %hi(aS_0) # $t5, 0x8005 -/* 0DB8E0 7F0A8EF0 A3010004 */ sb $at, 4($t8) -/* 0DB8E4 7F0A8EF4 8D410000 */ lw $at, ($t2) -/* 0DB8E8 7F0A8EF8 25ADCE80 */ addiu $t5, %lo(aS_0) # addiu $t5, $t5, -0x3180 -/* 0DB8EC 7F0A8EFC 27AC0068 */ addiu $t4, $sp, 0x68 -/* 0DB8F0 7F0A8F00 AD610000 */ sw $at, ($t3) -/* 0DB8F4 7F0A8F04 91410004 */ lbu $at, 4($t2) -/* 0DB8F8 7F0A8F08 3C188005 */ lui $t8, %hi(a3d) # $t8, 0x8005 -/* 0DB8FC 7F0A8F0C 2718CE88 */ addiu $t8, %lo(a3d) # addiu $t8, $t8, -0x3178 -/* 0DB900 7F0A8F10 A1610004 */ sb $at, 4($t3) -/* 0DB904 7F0A8F14 8D010000 */ lw $at, ($t0) -/* 0DB908 7F0A8F18 27AF0060 */ addiu $t7, $sp, 0x60 -/* 0DB90C 7F0A8F1C 02002025 */ move $a0, $s0 -/* 0DB910 7F0A8F20 AF210000 */ sw $at, ($t9) -/* 0DB914 7F0A8F24 91010004 */ lbu $at, 4($t0) -/* 0DB918 7F0A8F28 A3210004 */ sb $at, 4($t9) -/* 0DB91C 7F0A8F2C 8DA10000 */ lw $at, ($t5) -/* 0DB920 7F0A8F30 AD810000 */ sw $at, ($t4) -/* 0DB924 7F0A8F34 91A10004 */ lbu $at, 4($t5) -/* 0DB928 7F0A8F38 A1810004 */ sb $at, 4($t4) -/* 0DB92C 7F0A8F3C 8F010000 */ lw $at, ($t8) -/* 0DB930 7F0A8F40 ADE10000 */ sw $at, ($t7) -/* 0DB934 7F0A8F44 97010004 */ lhu $at, 4($t8) -/* 0DB938 7F0A8F48 A5E10004 */ sh $at, 4($t7) -/* 0DB93C 7F0A8F4C 0FC2B016 */ jal microcode_constructor -/* 0DB940 7F0A8F50 AFA00050 */ sw $zero, 0x50($sp) -/* 0DB944 7F0A8F54 00408025 */ move $s0, $v0 -/* 0DB948 7F0A8F58 00002025 */ move $a0, $zero -/* 0DB94C 7F0A8F5C 0C002C20 */ jal joyGetButtons -/* 0DB950 7F0A8F60 24050020 */ li $a1, 32 -/* 0DB954 7F0A8F64 1040002C */ beqz $v0, .L7F0A9018 -/* 0DB958 7F0A8F68 3C0A8007 */ lui $t2, %hi(g_CurrentPlayer) # $t2, 0x8007 -/* 0DB95C 7F0A8F6C 8D4A8BC0 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 0DB960 7F0A8F70 3C048004 */ lui $a0, %hi(D_800409DC+8) -/* 0DB964 7F0A8F74 8D4B2A50 */ lw $t3, 0x2a50($t2) -/* 0DB968 7F0A8F78 000B6080 */ sll $t4, $t3, 2 -/* 0DB96C 7F0A8F7C 018B6021 */ addu $t4, $t4, $t3 -/* 0DB970 7F0A8F80 000C6080 */ sll $t4, $t4, 2 -/* 0DB974 7F0A8F84 008C2021 */ addu $a0, $a0, $t4 -/* 0DB978 7F0A8F88 0FC304AE */ jal langGet -/* 0DB97C 7F0A8F8C 9484A634 */ lhu $a0, %lo(D_800409DC+8)($a0) -/* 0DB980 7F0A8F90 3C080070 */ lui $t0, (0x007000A0 >> 16) # lui $t0, 0x70 -/* 0DB984 7F0A8F94 3C190030 */ lui $t9, (0x003000B0 >> 16) # lui $t9, 0x30 -/* 0DB988 7F0A8F98 373900B0 */ ori $t9, (0x003000B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DB98C 7F0A8F9C 350800A0 */ ori $t0, (0x007000A0 & 0xFFFF) # ori $t0, $t0, 0xa0 -/* 0DB990 7F0A8FA0 240DFFFF */ li $t5, -1 -/* 0DB994 7F0A8FA4 240E0001 */ li $t6, 1 -/* 0DB998 7F0A8FA8 AFAE0014 */ sw $t6, 0x14($sp) -/* 0DB99C 7F0A8FAC AFAD0010 */ sw $t5, 0x10($sp) -/* 0DB9A0 7F0A8FB0 AFA80018 */ sw $t0, 0x18($sp) -/* 0DB9A4 7F0A8FB4 AFB90024 */ sw $t9, 0x24($sp) -/* 0DB9A8 7F0A8FB8 02002025 */ move $a0, $s0 -/* 0DB9AC 7F0A8FBC 24050032 */ li $a1, 50 -/* 0DB9B0 7F0A8FC0 2406005C */ li $a2, 92 -/* 0DB9B4 7F0A8FC4 00403825 */ move $a3, $v0 -/* 0DB9B8 7F0A8FC8 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DB9BC 7F0A8FCC AFA00020 */ sw $zero, 0x20($sp) -/* 0DB9C0 7F0A8FD0 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DB9C4 7F0A8FD4 AFA00028 */ sw $zero, 0x28($sp) -/* 0DB9C8 7F0A8FD8 3C0F8007 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8007 -/* 0DB9CC 7F0A8FDC 8DEF8BC0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0DB9D0 7F0A8FE0 3C0A8004 */ lui $t2, %hi(D_800409DC+9) -/* 0DB9D4 7F0A8FE4 3401AC01 */ li $at, 44033 -/* 0DB9D8 7F0A8FE8 8DF82A50 */ lw $t8, 0x2a50($t7) -/* 0DB9DC 7F0A8FEC 00408025 */ move $s0, $v0 -/* 0DB9E0 7F0A8FF0 240B0001 */ li $t3, 1 -/* 0DB9E4 7F0A8FF4 00184880 */ sll $t1, $t8, 2 -/* 0DB9E8 7F0A8FF8 01384821 */ addu $t1, $t1, $t8 -/* 0DB9EC 7F0A8FFC 00094880 */ sll $t1, $t1, 2 -/* 0DB9F0 7F0A9000 01495021 */ addu $t2, $t2, $t1 -/* 0DB9F4 7F0A9004 954AA634 */ lhu $t2, %lo(D_800409DC+8)($t2) -/* 0DB9F8 7F0A9008 1541001F */ bne $t2, $at, .L7F0A9088 -/* 0DB9FC 7F0A900C 00000000 */ nop -/* 0DBA00 7F0A9010 1000001D */ b .L7F0A9088 -/* 0DBA04 7F0A9014 AFAB0050 */ sw $t3, 0x50($sp) -.L7F0A9018: -/* 0DBA08 7F0A9018 3C0C8007 */ lui $t4, %hi(g_CurrentPlayer) # $t4, 0x8007 -/* 0DBA0C 7F0A901C 8D8C8BC0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0DBA10 7F0A9020 3C048004 */ lui $a0, %hi(D_800409DC+8) -/* 0DBA14 7F0A9024 8D8D2A50 */ lw $t5, 0x2a50($t4) -/* 0DBA18 7F0A9028 000D7080 */ sll $t6, $t5, 2 -/* 0DBA1C 7F0A902C 01CD7021 */ addu $t6, $t6, $t5 -/* 0DBA20 7F0A9030 000E7080 */ sll $t6, $t6, 2 -/* 0DBA24 7F0A9034 008E2021 */ addu $a0, $a0, $t6 -/* 0DBA28 7F0A9038 0FC304AE */ jal langGet -/* 0DBA2C 7F0A903C 9484A634 */ lhu $a0, %lo(D_800409DC+8)($a0) -/* 0DBA30 7F0A9040 3C0800AA */ lui $t0, (0x00AA00B0 >> 16) # lui $t0, 0xaa -/* 0DBA34 7F0A9044 3C0F0030 */ lui $t7, (0x003000B0 >> 16) # lui $t7, 0x30 -/* 0DBA38 7F0A9048 35EF00B0 */ ori $t7, (0x003000B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DBA3C 7F0A904C 350800B0 */ ori $t0, (0x00AA00B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DBA40 7F0A9050 2419FFFF */ li $t9, -1 -/* 0DBA44 7F0A9054 AFB90018 */ sw $t9, 0x18($sp) -/* 0DBA48 7F0A9058 AFA80010 */ sw $t0, 0x10($sp) -/* 0DBA4C 7F0A905C AFAF0024 */ sw $t7, 0x24($sp) -/* 0DBA50 7F0A9060 02002025 */ move $a0, $s0 -/* 0DBA54 7F0A9064 24050032 */ li $a1, 50 -/* 0DBA58 7F0A9068 2406005C */ li $a2, 92 -/* 0DBA5C 7F0A906C 00403825 */ move $a3, $v0 -/* 0DBA60 7F0A9070 AFA00014 */ sw $zero, 0x14($sp) -/* 0DBA64 7F0A9074 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DBA68 7F0A9078 AFA00020 */ sw $zero, 0x20($sp) -/* 0DBA6C 7F0A907C 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DBA70 7F0A9080 AFA00028 */ sw $zero, 0x28($sp) -/* 0DBA74 7F0A9084 00408025 */ move $s0, $v0 -.L7F0A9088: -/* 0DBA78 7F0A9088 3C098004 */ lui $t1, %hi(controller_options_index) # $t1, 0x8004 -/* 0DBA7C 7F0A908C 8D29A5E8 */ lw $t1, %lo(controller_options_index)($t1) -/* 0DBA80 7F0A9090 2418007A */ li $t8, 122 -/* 0DBA84 7F0A9094 24010001 */ li $at, 1 -/* 0DBA88 7F0A9098 1521000A */ bne $t1, $at, .L7F0A90C4 -/* 0DBA8C 7F0A909C AFB8004C */ sw $t8, 0x4c($sp) -/* 0DBA90 7F0A90A0 3C0A8004 */ lui $t2, %hi(watch_item_is_actively_selected) # $t2, 0x8004 -/* 0DBA94 7F0A90A4 8D4AA5F8 */ lw $t2, %lo(watch_item_is_actively_selected)($t2) -/* 0DBA98 7F0A90A8 00002025 */ move $a0, $zero -/* 0DBA9C 7F0A90AC 11400005 */ beqz $t2, .L7F0A90C4 -/* 0DBAA0 7F0A90B0 00000000 */ nop -/* 0DBAA4 7F0A90B4 0C002C20 */ jal joyGetButtons -/* 0DBAA8 7F0A90B8 24050F00 */ li $a1, 3840 -/* 0DBAAC 7F0A90BC 1440001E */ bnez $v0, .L7F0A9138 -/* 0DBAB0 7F0A90C0 00002025 */ move $a0, $zero -.L7F0A90C4: -/* 0DBAB4 7F0A90C4 3C0B8007 */ lui $t3, %hi(g_CurrentPlayer) # $t3, 0x8007 -/* 0DBAB8 7F0A90C8 8D6B8BC0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0DBABC 7F0A90CC 3C048004 */ lui $a0, %hi(D_800409DC+14) -/* 0DBAC0 7F0A90D0 8D6C2A50 */ lw $t4, 0x2a50($t3) -/* 0DBAC4 7F0A90D4 000C6880 */ sll $t5, $t4, 2 -/* 0DBAC8 7F0A90D8 01AC6821 */ addu $t5, $t5, $t4 -/* 0DBACC 7F0A90DC 000D6880 */ sll $t5, $t5, 2 -/* 0DBAD0 7F0A90E0 008D2021 */ addu $a0, $a0, $t5 -/* 0DBAD4 7F0A90E4 0FC304AE */ jal langGet -/* 0DBAD8 7F0A90E8 9484A63A */ lhu $a0, %lo(D_800409DC+14)($a0) -/* 0DBADC 7F0A90EC 3C0E00AA */ lui $t6, (0x00AA00B0 >> 16) # lui $t6, 0xaa -/* 0DBAE0 7F0A90F0 3C190030 */ lui $t9, (0x003000B0 >> 16) # lui $t9, 0x30 -/* 0DBAE4 7F0A90F4 373900B0 */ ori $t9, (0x003000B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DBAE8 7F0A90F8 35CE00B0 */ ori $t6, (0x00AA00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DBAEC 7F0A90FC 2408FFFF */ li $t0, -1 -/* 0DBAF0 7F0A9100 AFA80018 */ sw $t0, 0x18($sp) -/* 0DBAF4 7F0A9104 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DBAF8 7F0A9108 AFB90024 */ sw $t9, 0x24($sp) -/* 0DBAFC 7F0A910C 02002025 */ move $a0, $s0 -/* 0DBB00 7F0A9110 24050032 */ li $a1, 50 -/* 0DBB04 7F0A9114 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DBB08 7F0A9118 00403825 */ move $a3, $v0 -/* 0DBB0C 7F0A911C AFA00014 */ sw $zero, 0x14($sp) -/* 0DBB10 7F0A9120 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DBB14 7F0A9124 AFA00020 */ sw $zero, 0x20($sp) -/* 0DBB18 7F0A9128 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DBB1C 7F0A912C AFA00028 */ sw $zero, 0x28($sp) -/* 0DBB20 7F0A9130 10000051 */ b .L7F0A9278 -/* 0DBB24 7F0A9134 00408025 */ move $s0, $v0 -.L7F0A9138: -/* 0DBB28 7F0A9138 0C002C20 */ jal joyGetButtons -/* 0DBB2C 7F0A913C 24050800 */ li $a1, 2048 -/* 0DBB30 7F0A9140 10400014 */ beqz $v0, .L7F0A9194 -/* 0DBB34 7F0A9144 00002025 */ move $a0, $zero -/* 0DBB38 7F0A9148 3C0F8007 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8007 -/* 0DBB3C 7F0A914C 8DEF8BC0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0DBB40 7F0A9150 3C0A8004 */ lui $t2, %hi(D_800409DC+14) -/* 0DBB44 7F0A9154 3401AC05 */ li $at, 44037 -/* 0DBB48 7F0A9158 8DF82A50 */ lw $t8, 0x2a50($t7) -/* 0DBB4C 7F0A915C 8FA700AC */ lw $a3, 0xac($sp) -/* 0DBB50 7F0A9160 00184880 */ sll $t1, $t8, 2 -/* 0DBB54 7F0A9164 01384821 */ addu $t1, $t1, $t8 -/* 0DBB58 7F0A9168 00094880 */ sll $t1, $t1, 2 -/* 0DBB5C 7F0A916C 01495021 */ addu $t2, $t2, $t1 -/* 0DBB60 7F0A9170 954AA63A */ lhu $t2, %lo(D_800409DC+14)($t2) -/* 0DBB64 7F0A9174 15410005 */ bne $t2, $at, .L7F0A918C -/* 0DBB68 7F0A9178 00000000 */ nop -/* 0DBB6C 7F0A917C 0FC304AE */ jal langGet -/* 0DBB70 7F0A9180 3404AC30 */ li $a0, 44080 -/* 0DBB74 7F0A9184 10000001 */ b .L7F0A918C -/* 0DBB78 7F0A9188 00403825 */ move $a3, $v0 -.L7F0A918C: -/* 0DBB7C 7F0A918C 10000027 */ b .L7F0A922C -/* 0DBB80 7F0A9190 AFA70058 */ sw $a3, 0x58($sp) -.L7F0A9194: -/* 0DBB84 7F0A9194 0C002C20 */ jal joyGetButtons -/* 0DBB88 7F0A9198 24050400 */ li $a1, 1024 -/* 0DBB8C 7F0A919C 10400014 */ beqz $v0, .L7F0A91F0 -/* 0DBB90 7F0A91A0 00002025 */ move $a0, $zero -/* 0DBB94 7F0A91A4 3C0B8007 */ lui $t3, %hi(g_CurrentPlayer) # $t3, 0x8007 -/* 0DBB98 7F0A91A8 8D6B8BC0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0DBB9C 7F0A91AC 3C0E8004 */ lui $t6, %hi(D_800409DC+14) -/* 0DBBA0 7F0A91B0 3401AC05 */ li $at, 44037 -/* 0DBBA4 7F0A91B4 8D6C2A50 */ lw $t4, 0x2a50($t3) -/* 0DBBA8 7F0A91B8 8FA700A8 */ lw $a3, 0xa8($sp) -/* 0DBBAC 7F0A91BC 000C6880 */ sll $t5, $t4, 2 -/* 0DBBB0 7F0A91C0 01AC6821 */ addu $t5, $t5, $t4 -/* 0DBBB4 7F0A91C4 000D6880 */ sll $t5, $t5, 2 -/* 0DBBB8 7F0A91C8 01CD7021 */ addu $t6, $t6, $t5 -/* 0DBBBC 7F0A91CC 95CEA63A */ lhu $t6, %lo(D_800409DC+14)($t6) -/* 0DBBC0 7F0A91D0 15C10005 */ bne $t6, $at, .L7F0A91E8 -/* 0DBBC4 7F0A91D4 00000000 */ nop -/* 0DBBC8 7F0A91D8 0FC304AE */ jal langGet -/* 0DBBCC 7F0A91DC 3404AC31 */ li $a0, 44081 -/* 0DBBD0 7F0A91E0 10000001 */ b .L7F0A91E8 -/* 0DBBD4 7F0A91E4 00403825 */ move $a3, $v0 -.L7F0A91E8: -/* 0DBBD8 7F0A91E8 10000010 */ b .L7F0A922C -/* 0DBBDC 7F0A91EC AFA70058 */ sw $a3, 0x58($sp) -.L7F0A91F0: -/* 0DBBE0 7F0A91F0 0C002C20 */ jal joyGetButtons -/* 0DBBE4 7F0A91F4 24050200 */ li $a1, 512 -/* 0DBBE8 7F0A91F8 10400005 */ beqz $v0, .L7F0A9210 -/* 0DBBEC 7F0A91FC 00002025 */ move $a0, $zero -/* 0DBBF0 7F0A9200 0FC304AE */ jal langGet -/* 0DBBF4 7F0A9204 3404AC2F */ li $a0, 44079 -/* 0DBBF8 7F0A9208 10000008 */ b .L7F0A922C -/* 0DBBFC 7F0A920C AFA20058 */ sw $v0, 0x58($sp) -.L7F0A9210: -/* 0DBC00 7F0A9210 0C002C20 */ jal joyGetButtons -/* 0DBC04 7F0A9214 24050100 */ li $a1, 256 -/* 0DBC08 7F0A9218 50400005 */ beql $v0, $zero, .L7F0A9230 -/* 0DBC0C 7F0A921C 3C0F0070 */ lui $t7, 0x70 -/* 0DBC10 7F0A9220 0FC304AE */ jal langGet -/* 0DBC14 7F0A9224 3404AC2E */ li $a0, 44078 -/* 0DBC18 7F0A9228 AFA20058 */ sw $v0, 0x58($sp) -.L7F0A922C: -/* 0DBC1C 7F0A922C 3C0F0070 */ lui $t7, (0x007000A0 >> 16) # lui $t7, 0x70 -.L7F0A9230: -/* 0DBC20 7F0A9230 3C180030 */ lui $t8, (0x003000B0 >> 16) # lui $t8, 0x30 -/* 0DBC24 7F0A9234 371800B0 */ ori $t8, (0x003000B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0DBC28 7F0A9238 35EF00A0 */ ori $t7, (0x007000A0 & 0xFFFF) # ori $t7, $t7, 0xa0 -/* 0DBC2C 7F0A923C 2408FFFF */ li $t0, -1 -/* 0DBC30 7F0A9240 24190001 */ li $t9, 1 -/* 0DBC34 7F0A9244 8FA70058 */ lw $a3, 0x58($sp) -/* 0DBC38 7F0A9248 AFB90014 */ sw $t9, 0x14($sp) -/* 0DBC3C 7F0A924C AFA80010 */ sw $t0, 0x10($sp) -/* 0DBC40 7F0A9250 AFAF0018 */ sw $t7, 0x18($sp) -/* 0DBC44 7F0A9254 AFB80024 */ sw $t8, 0x24($sp) -/* 0DBC48 7F0A9258 02002025 */ move $a0, $s0 -/* 0DBC4C 7F0A925C 24050032 */ li $a1, 50 -/* 0DBC50 7F0A9260 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DBC54 7F0A9264 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DBC58 7F0A9268 AFA00020 */ sw $zero, 0x20($sp) -/* 0DBC5C 7F0A926C 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DBC60 7F0A9270 AFA00028 */ sw $zero, 0x28($sp) -/* 0DBC64 7F0A9274 00408025 */ move $s0, $v0 -.L7F0A9278: -/* 0DBC68 7F0A9278 8FA9004C */ lw $t1, 0x4c($sp) -/* 0DBC6C 7F0A927C 3C0B8007 */ lui $t3, %hi(g_CurrentPlayer) # $t3, 0x8007 -/* 0DBC70 7F0A9280 8D6B8BC0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0DBC74 7F0A9284 252A001E */ addiu $t2, $t1, 0x1e -/* 0DBC78 7F0A9288 AFAA004C */ sw $t2, 0x4c($sp) -/* 0DBC7C 7F0A928C 8D6C2A50 */ lw $t4, 0x2a50($t3) -/* 0DBC80 7F0A9290 3C048004 */ lui $a0, %hi(D_800409DC+16) -/* 0DBC84 7F0A9294 000C6880 */ sll $t5, $t4, 2 -/* 0DBC88 7F0A9298 01AC6821 */ addu $t5, $t5, $t4 -/* 0DBC8C 7F0A929C 000D6880 */ sll $t5, $t5, 2 -/* 0DBC90 7F0A92A0 008D2021 */ addu $a0, $a0, $t5 -/* 0DBC94 7F0A92A4 0FC304AE */ jal langGet -/* 0DBC98 7F0A92A8 9484A63C */ lhu $a0, %lo(D_800409DC+16)($a0) -/* 0DBC9C 7F0A92AC 3C0E00AA */ lui $t6, (0x00AA00B0 >> 16) # lui $t6, 0xaa -/* 0DBCA0 7F0A92B0 3C190030 */ lui $t9, (0x003000B0 >> 16) # lui $t9, 0x30 -/* 0DBCA4 7F0A92B4 373900B0 */ ori $t9, (0x003000B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DBCA8 7F0A92B8 35CE00B0 */ ori $t6, (0x00AA00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DBCAC 7F0A92BC 2408FFFF */ li $t0, -1 -/* 0DBCB0 7F0A92C0 AFA80018 */ sw $t0, 0x18($sp) -/* 0DBCB4 7F0A92C4 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DBCB8 7F0A92C8 AFB90024 */ sw $t9, 0x24($sp) -/* 0DBCBC 7F0A92CC 02002025 */ move $a0, $s0 -/* 0DBCC0 7F0A92D0 24050032 */ li $a1, 50 -/* 0DBCC4 7F0A92D4 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DBCC8 7F0A92D8 00403825 */ move $a3, $v0 -/* 0DBCCC 7F0A92DC AFA00014 */ sw $zero, 0x14($sp) -/* 0DBCD0 7F0A92E0 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DBCD4 7F0A92E4 AFA00020 */ sw $zero, 0x20($sp) -/* 0DBCD8 7F0A92E8 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DBCDC 7F0A92EC AFA00028 */ sw $zero, 0x28($sp) -/* 0DBCE0 7F0A92F0 8FAF004C */ lw $t7, 0x4c($sp) -/* 0DBCE4 7F0A92F4 00408025 */ move $s0, $v0 -/* 0DBCE8 7F0A92F8 00002025 */ move $a0, $zero -/* 0DBCEC 7F0A92FC 25F8001E */ addiu $t8, $t7, 0x1e -/* 0DBCF0 7F0A9300 AFB8004C */ sw $t8, 0x4c($sp) -/* 0DBCF4 7F0A9304 0C002C20 */ jal joyGetButtons -/* 0DBCF8 7F0A9308 24052000 */ li $a1, 8192 -/* 0DBCFC 7F0A930C 1040002D */ beqz $v0, .L7F0A93C4 -/* 0DBD00 7F0A9310 3C0B8007 */ lui $t3, %hi(g_CurrentPlayer) -/* 0DBD04 7F0A9314 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 -/* 0DBD08 7F0A9318 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0DBD0C 7F0A931C 3C048004 */ lui $a0, %hi(D_800409DC+0x6) -/* 0DBD10 7F0A9320 8D2A2A50 */ lw $t2, 0x2a50($t1) -/* 0DBD14 7F0A9324 000A5880 */ sll $t3, $t2, 2 -/* 0DBD18 7F0A9328 016A5821 */ addu $t3, $t3, $t2 -/* 0DBD1C 7F0A932C 000B5880 */ sll $t3, $t3, 2 -/* 0DBD20 7F0A9330 008B2021 */ addu $a0, $a0, $t3 -/* 0DBD24 7F0A9334 0FC304AE */ jal langGet -/* 0DBD28 7F0A9338 9484A632 */ lhu $a0, %lo(D_800409DC+0x6)($a0) -/* 0DBD2C 7F0A933C 3C0E0070 */ lui $t6, (0x007000A0 >> 16) # lui $t6, 0x70 -/* 0DBD30 7F0A9340 3C080030 */ lui $t0, (0x003000B0 >> 16) # lui $t0, 0x30 -/* 0DBD34 7F0A9344 350800B0 */ ori $t0, (0x003000B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DBD38 7F0A9348 35CE00A0 */ ori $t6, (0x007000A0 & 0xFFFF) # ori $t6, $t6, 0xa0 -/* 0DBD3C 7F0A934C 240CFFFF */ li $t4, -1 -/* 0DBD40 7F0A9350 240D0001 */ li $t5, 1 -/* 0DBD44 7F0A9354 AFAD0014 */ sw $t5, 0x14($sp) -/* 0DBD48 7F0A9358 AFAC0010 */ sw $t4, 0x10($sp) -/* 0DBD4C 7F0A935C AFAE0018 */ sw $t6, 0x18($sp) -/* 0DBD50 7F0A9360 AFA80024 */ sw $t0, 0x24($sp) -/* 0DBD54 7F0A9364 02002025 */ move $a0, $s0 -/* 0DBD58 7F0A9368 24050032 */ li $a1, 50 -/* 0DBD5C 7F0A936C 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DBD60 7F0A9370 00403825 */ move $a3, $v0 -/* 0DBD64 7F0A9374 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DBD68 7F0A9378 AFA00020 */ sw $zero, 0x20($sp) -/* 0DBD6C 7F0A937C 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DBD70 7F0A9380 AFA00028 */ sw $zero, 0x28($sp) -/* 0DBD74 7F0A9384 3C198007 */ lui $t9, %hi(g_CurrentPlayer) # $t9, 0x8007 -/* 0DBD78 7F0A9388 8F398BC0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0DBD7C 7F0A938C 3C098004 */ lui $t1, %hi(D_800409DC+6) -/* 0DBD80 7F0A9390 3401AC01 */ li $at, 44033 -/* 0DBD84 7F0A9394 8F2F2A50 */ lw $t7, 0x2a50($t9) -/* 0DBD88 7F0A9398 00408025 */ move $s0, $v0 -/* 0DBD8C 7F0A939C 240A0001 */ li $t2, 1 -/* 0DBD90 7F0A93A0 000FC080 */ sll $t8, $t7, 2 -/* 0DBD94 7F0A93A4 030FC021 */ addu $t8, $t8, $t7 -/* 0DBD98 7F0A93A8 0018C080 */ sll $t8, $t8, 2 -/* 0DBD9C 7F0A93AC 01384821 */ addu $t1, $t1, $t8 -/* 0DBDA0 7F0A93B0 9529A632 */ lhu $t1, %lo(D_800409DC+6)($t1) -/* 0DBDA4 7F0A93B4 5521001F */ bnel $t1, $at, .Leu7F0A9434 -/* 0DBDA8 7F0A93B8 8FAF004C */ lw $t7, 0x4c($sp) -/* 0DBDAC 7F0A93BC 1000001C */ b .L7F0A9430 -/* 0DBDB0 7F0A93C0 AFAA0050 */ sw $t2, 0x50($sp) -.L7F0A93C4: -/* 0DBDB4 7F0A93C4 8D6B8BC0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0DBDB8 7F0A93C8 3C048004 */ lui $a0, %hi(D_800409DC+6) -/* 0DBDBC 7F0A93CC 8D6C2A50 */ lw $t4, 0x2a50($t3) -/* 0DBDC0 7F0A93D0 000C6880 */ sll $t5, $t4, 2 -/* 0DBDC4 7F0A93D4 01AC6821 */ addu $t5, $t5, $t4 -/* 0DBDC8 7F0A93D8 000D6880 */ sll $t5, $t5, 2 -/* 0DBDCC 7F0A93DC 008D2021 */ addu $a0, $a0, $t5 -/* 0DBDD0 7F0A93E0 0FC304AE */ jal langGet -/* 0DBDD4 7F0A93E4 9484A632 */ lhu $a0, %lo(D_800409DC+6)($a0) -/* 0DBDD8 7F0A93E8 3C0E00AA */ lui $t6, (0x00AA00B0 >> 16) # lui $t6, 0xaa -/* 0DBDDC 7F0A93EC 3C190030 */ lui $t9, (0x003000B0 >> 16) # lui $t9, 0x30 -/* 0DBDE0 7F0A93F0 373900B0 */ ori $t9, (0x003000B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DBDE4 7F0A93F4 35CE00B0 */ ori $t6, (0x00AA00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DBDE8 7F0A93F8 2408FFFF */ li $t0, -1 -/* 0DBDEC 7F0A93FC AFA80018 */ sw $t0, 0x18($sp) -/* 0DBDF0 7F0A9400 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DBDF4 7F0A9404 AFB90024 */ sw $t9, 0x24($sp) -/* 0DBDF8 7F0A9408 02002025 */ move $a0, $s0 -/* 0DBDFC 7F0A940C 24050032 */ li $a1, 50 -/* 0DBE00 7F0A9410 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DBE04 7F0A9414 00403825 */ move $a3, $v0 -/* 0DBE08 7F0A9418 AFA00014 */ sw $zero, 0x14($sp) -/* 0DBE0C 7F0A941C AFA0001C */ sw $zero, 0x1c($sp) -/* 0DBE10 7F0A9420 AFA00020 */ sw $zero, 0x20($sp) -/* 0DBE14 7F0A9424 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DBE18 7F0A9428 AFA00028 */ sw $zero, 0x28($sp) -/* 0DBE1C 7F0A942C 00408025 */ move $s0, $v0 -.L7F0A9430: -/* 0DBE20 7F0A9430 8FAF004C */ lw $t7, 0x4c($sp) -.Leu7F0A9434: -/* 0DBE24 7F0A9434 00002025 */ move $a0, $zero -/* 0DBE28 7F0A9438 24050010 */ li $a1, 16 -/* 0DBE2C 7F0A943C 25F8FFA6 */ addiu $t8, $t7, -0x5a -/* 0DBE30 7F0A9440 0C002C20 */ jal joyGetButtons -/* 0DBE34 7F0A9444 AFB8004C */ sw $t8, 0x4c($sp) -/* 0DBE38 7F0A9448 1040002E */ beqz $v0, .L7F0A9504 -/* 0DBE3C 7F0A944C 3C0C8007 */ lui $t4, %hi(g_CurrentPlayer) # $t4, 0x8007 -/* 0DBE40 7F0A9450 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 -/* 0DBE44 7F0A9454 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0DBE48 7F0A9458 3C048004 */ lui $a0, %hi(D_800409DC+10) -/* 0DBE4C 7F0A945C 8D2A2A50 */ lw $t2, 0x2a50($t1) -/* 0DBE50 7F0A9460 000A5880 */ sll $t3, $t2, 2 -/* 0DBE54 7F0A9464 016A5821 */ addu $t3, $t3, $t2 -/* 0DBE58 7F0A9468 000B5880 */ sll $t3, $t3, 2 -/* 0DBE5C 7F0A946C 008B2021 */ addu $a0, $a0, $t3 -/* 0DBE60 7F0A9470 0FC304AE */ jal langGet -/* 0DBE64 7F0A9474 9484A636 */ lhu $a0, %lo(D_800409DC+10)($a0) -/* 0DBE68 7F0A9478 3C0E0070 */ lui $t6, (0x007000A0 >> 16) # lui $t6, 0x70 -/* 0DBE6C 7F0A947C 3C080030 */ lui $t0, (0x003000B0 >> 16) # lui $t0, 0x30 -/* 0DBE70 7F0A9480 350800B0 */ ori $t0, (0x003000B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DBE74 7F0A9484 35CE00A0 */ ori $t6, (0x007000A0 & 0xFFFF) # ori $t6, $t6, 0xa0 -/* 0DBE78 7F0A9488 240CFFFF */ li $t4, -1 -/* 0DBE7C 7F0A948C 240D0001 */ li $t5, 1 -/* 0DBE80 7F0A9490 24190001 */ li $t9, 1 -/* 0DBE84 7F0A9494 AFB90028 */ sw $t9, 0x28($sp) -/* 0DBE88 7F0A9498 AFAD0014 */ sw $t5, 0x14($sp) -/* 0DBE8C 7F0A949C AFAC0010 */ sw $t4, 0x10($sp) -/* 0DBE90 7F0A94A0 AFAE0018 */ sw $t6, 0x18($sp) -/* 0DBE94 7F0A94A4 AFA80024 */ sw $t0, 0x24($sp) -/* 0DBE98 7F0A94A8 02002025 */ move $a0, $s0 -/* 0DBE9C 7F0A94AC 2405010E */ li $a1, 270 -/* 0DBEA0 7F0A94B0 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DBEA4 7F0A94B4 00403825 */ move $a3, $v0 -/* 0DBEA8 7F0A94B8 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DBEAC 7F0A94BC 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DBEB0 7F0A94C0 AFA00020 */ sw $zero, 0x20($sp) -/* 0DBEB4 7F0A94C4 3C0F8007 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8007 -/* 0DBEB8 7F0A94C8 8DEF8BC0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0DBEBC 7F0A94CC 3C0A8004 */ lui $t2, %hi(D_800409DC+10) -/* 0DBEC0 7F0A94D0 3401AC01 */ li $at, 44033 -/* 0DBEC4 7F0A94D4 8DF82A50 */ lw $t8, 0x2a50($t7) -/* 0DBEC8 7F0A94D8 00408025 */ move $s0, $v0 -/* 0DBECC 7F0A94DC 240B0001 */ li $t3, 1 -/* 0DBED0 7F0A94E0 00184880 */ sll $t1, $t8, 2 -/* 0DBED4 7F0A94E4 01384821 */ addu $t1, $t1, $t8 -/* 0DBED8 7F0A94E8 00094880 */ sll $t1, $t1, 2 -/* 0DBEDC 7F0A94EC 01495021 */ addu $t2, $t2, $t1 -/* 0DBEE0 7F0A94F0 954AA636 */ lhu $t2, %lo(D_800409DC+10)($t2) -/* 0DBEE4 7F0A94F4 55410020 */ bnel $t2, $at, .L7F0A9578 -/* 0DBEE8 7F0A94F8 8FA9004C */ lw $t1, 0x4c($sp) -/* 0DBEEC 7F0A94FC 1000001D */ b .L7F0A9574 -/* 0DBEF0 7F0A9500 AFAB0050 */ sw $t3, 0x50($sp) -.L7F0A9504: -/* 0DBEF4 7F0A9504 8D8C8BC0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0DBEF8 7F0A9508 3C048004 */ lui $a0, %hi(D_800409DC+10) -/* 0DBEFC 7F0A950C 8D8D2A50 */ lw $t5, 0x2a50($t4) -/* 0DBF00 7F0A9510 000D7080 */ sll $t6, $t5, 2 -/* 0DBF04 7F0A9514 01CD7021 */ addu $t6, $t6, $t5 -/* 0DBF08 7F0A9518 000E7080 */ sll $t6, $t6, 2 -/* 0DBF0C 7F0A951C 008E2021 */ addu $a0, $a0, $t6 -/* 0DBF10 7F0A9520 0FC304AE */ jal langGet -/* 0DBF14 7F0A9524 9484A636 */ lhu $a0, %lo(D_800409DC+10)($a0) -/* 0DBF18 7F0A9528 3C0800AA */ lui $t0, (0x00AA00B0 >> 16) # lui $t0, 0xaa -/* 0DBF1C 7F0A952C 3C0F0030 */ lui $t7, (0x003000B0 >> 16) # lui $t7, 0x30 -/* 0DBF20 7F0A9530 35EF00B0 */ ori $t7, (0x003000B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DBF24 7F0A9534 350800B0 */ ori $t0, (0x00AA00B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DBF28 7F0A9538 2419FFFF */ li $t9, -1 -/* 0DBF2C 7F0A953C 24180001 */ li $t8, 1 -/* 0DBF30 7F0A9540 AFB80028 */ sw $t8, 0x28($sp) -/* 0DBF34 7F0A9544 AFB90018 */ sw $t9, 0x18($sp) -/* 0DBF38 7F0A9548 AFA80010 */ sw $t0, 0x10($sp) -/* 0DBF3C 7F0A954C AFAF0024 */ sw $t7, 0x24($sp) -/* 0DBF40 7F0A9550 02002025 */ move $a0, $s0 -/* 0DBF44 7F0A9554 2405010E */ li $a1, 270 -/* 0DBF48 7F0A9558 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DBF4C 7F0A955C 00403825 */ move $a3, $v0 -/* 0DBF50 7F0A9560 AFA00014 */ sw $zero, 0x14($sp) -/* 0DBF54 7F0A9564 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DBF58 7F0A9568 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DBF5C 7F0A956C AFA00020 */ sw $zero, 0x20($sp) -/* 0DBF60 7F0A9570 00408025 */ move $s0, $v0 -.L7F0A9574: -/* 0DBF64 7F0A9574 8FA9004C */ lw $t1, 0x4c($sp) -.L7F0A9578: -/* 0DBF68 7F0A9578 3C0B8004 */ lui $t3, %hi(controller_options_index) # $t3, 0x8004 -/* 0DBF6C 7F0A957C 8D6BA5E8 */ lw $t3, %lo(controller_options_index)($t3) -/* 0DBF70 7F0A9580 24010001 */ li $at, 1 -/* 0DBF74 7F0A9584 252A001E */ addiu $t2, $t1, 0x1e -/* 0DBF78 7F0A9588 1561000A */ bne $t3, $at, .L7F0A95B4 -/* 0DBF7C 7F0A958C AFAA004C */ sw $t2, 0x4c($sp) -/* 0DBF80 7F0A9590 3C0C8004 */ lui $t4, %hi(watch_item_is_actively_selected) # $t4, 0x8004 -/* 0DBF84 7F0A9594 8D8CA5F8 */ lw $t4, %lo(watch_item_is_actively_selected)($t4) -/* 0DBF88 7F0A9598 00002025 */ move $a0, $zero -/* 0DBF8C 7F0A959C 11800005 */ beqz $t4, .L7F0A95B4 -/* 0DBF90 7F0A95A0 00000000 */ nop -/* 0DBF94 7F0A95A4 0C002C20 */ jal joyGetButtons -/* 0DBF98 7F0A95A8 2405000F */ li $a1, 15 -/* 0DBF9C 7F0A95AC 1440001F */ bnez $v0, .L7F0A962C -/* 0DBFA0 7F0A95B0 00002025 */ move $a0, $zero -.L7F0A95B4: -/* 0DBFA4 7F0A95B4 3C0D8007 */ lui $t5, %hi(g_CurrentPlayer) # $t5, 0x8007 -/* 0DBFA8 7F0A95B8 8DAD8BC0 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 0DBFAC 7F0A95BC 3C048004 */ lui $a0, %hi(D_800409DC+12) -/* 0DBFB0 7F0A95C0 8DAE2A50 */ lw $t6, 0x2a50($t5) -/* 0DBFB4 7F0A95C4 000E4080 */ sll $t0, $t6, 2 -/* 0DBFB8 7F0A95C8 010E4021 */ addu $t0, $t0, $t6 -/* 0DBFBC 7F0A95CC 00084080 */ sll $t0, $t0, 2 -/* 0DBFC0 7F0A95D0 00882021 */ addu $a0, $a0, $t0 -/* 0DBFC4 7F0A95D4 0FC304AE */ jal langGet -/* 0DBFC8 7F0A95D8 9484A638 */ lhu $a0, %lo(D_800409DC+12)($a0) -/* 0DBFCC 7F0A95DC 3C1900AA */ lui $t9, (0x00AA00B0 >> 16) # lui $t9, 0xaa -/* 0DBFD0 7F0A95E0 3C180030 */ lui $t8, (0x003000B0 >> 16) # lui $t8, 0x30 -/* 0DBFD4 7F0A95E4 371800B0 */ ori $t8, (0x003000B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0DBFD8 7F0A95E8 373900B0 */ ori $t9, (0x00AA00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DBFDC 7F0A95EC 240FFFFF */ li $t7, -1 -/* 0DBFE0 7F0A95F0 24090001 */ li $t1, 1 -/* 0DBFE4 7F0A95F4 AFA90028 */ sw $t1, 0x28($sp) -/* 0DBFE8 7F0A95F8 AFAF0018 */ sw $t7, 0x18($sp) -/* 0DBFEC 7F0A95FC AFB90010 */ sw $t9, 0x10($sp) -/* 0DBFF0 7F0A9600 AFB80024 */ sw $t8, 0x24($sp) -/* 0DBFF4 7F0A9604 02002025 */ move $a0, $s0 -/* 0DBFF8 7F0A9608 2405010E */ li $a1, 270 -/* 0DBFFC 7F0A960C 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DC000 7F0A9610 00403825 */ move $a3, $v0 -/* 0DC004 7F0A9614 AFA00014 */ sw $zero, 0x14($sp) -/* 0DC008 7F0A9618 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DC00C 7F0A961C 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DC010 7F0A9620 AFA00020 */ sw $zero, 0x20($sp) -/* 0DC014 7F0A9624 10000076 */ b .L7F0A9800 -/* 0DC018 7F0A9628 00408025 */ move $s0, $v0 -.L7F0A962C: -/* 0DC01C 7F0A962C 0C002C20 */ jal joyGetButtons -/* 0DC020 7F0A9630 2405000F */ li $a1, 15 -/* 0DC024 7F0A9634 244AFFFF */ addiu $t2, $v0, -1 -/* 0DC028 7F0A9638 004A5824 */ and $t3, $v0, $t2 -/* 0DC02C 7F0A963C 15600054 */ bnez $t3, .L7F0A9790 -/* 0DC030 7F0A9640 3C088007 */ lui $t0, %hi(g_CurrentPlayer) -/* 0DC034 7F0A9644 00002025 */ move $a0, $zero -/* 0DC038 7F0A9648 0C002C20 */ jal joyGetButtons -/* 0DC03C 7F0A964C 24050008 */ li $a1, 8 -/* 0DC040 7F0A9650 10400014 */ beqz $v0, .L7F0A96A4 -/* 0DC044 7F0A9654 00002025 */ move $a0, $zero -/* 0DC048 7F0A9658 3C0C8007 */ lui $t4, %hi(g_CurrentPlayer) # $t4, 0x8007 -/* 0DC04C 7F0A965C 8D8C8BC0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0DC050 7F0A9660 3C088004 */ lui $t0, %hi(D_800409DC+12) -/* 0DC054 7F0A9664 3401AC05 */ li $at, 44037 -/* 0DC058 7F0A9668 8D8D2A50 */ lw $t5, 0x2a50($t4) -/* 0DC05C 7F0A966C 8FA700AC */ lw $a3, 0xac($sp) -/* 0DC060 7F0A9670 000D7080 */ sll $t6, $t5, 2 -/* 0DC064 7F0A9674 01CD7021 */ addu $t6, $t6, $t5 -/* 0DC068 7F0A9678 000E7080 */ sll $t6, $t6, 2 -/* 0DC06C 7F0A967C 010E4021 */ addu $t0, $t0, $t6 -/* 0DC070 7F0A9680 9508A638 */ lhu $t0, %lo(D_800409DC+12)($t0) -/* 0DC074 7F0A9684 15010005 */ bne $t0, $at, .L7F0A969C -/* 0DC078 7F0A9688 00000000 */ nop -/* 0DC07C 7F0A968C 0FC304AE */ jal langGet -/* 0DC080 7F0A9690 3404AC30 */ li $a0, 44080 -/* 0DC084 7F0A9694 10000001 */ b .L7F0A969C -/* 0DC088 7F0A9698 00403825 */ move $a3, $v0 -.L7F0A969C: -/* 0DC08C 7F0A969C 10000027 */ b .L7F0A973C -/* 0DC090 7F0A96A0 AFA7005C */ sw $a3, 0x5c($sp) -.L7F0A96A4: -/* 0DC094 7F0A96A4 0C002C20 */ jal joyGetButtons -/* 0DC098 7F0A96A8 24050004 */ li $a1, 4 -/* 0DC09C 7F0A96AC 10400014 */ beqz $v0, .L7F0A9700 -/* 0DC0A0 7F0A96B0 00002025 */ move $a0, $zero -/* 0DC0A4 7F0A96B4 3C198007 */ lui $t9, %hi(g_CurrentPlayer) # $t9, 0x8007 -/* 0DC0A8 7F0A96B8 8F398BC0 */ lw $t9, %lo(g_CurrentPlayer)($t9) -/* 0DC0AC 7F0A96BC 3C098004 */ lui $t1, %hi(D_800409DC+12) -/* 0DC0B0 7F0A96C0 3401AC05 */ li $at, 44037 -/* 0DC0B4 7F0A96C4 8F2F2A50 */ lw $t7, 0x2a50($t9) -/* 0DC0B8 7F0A96C8 8FA700A8 */ lw $a3, 0xa8($sp) -/* 0DC0BC 7F0A96CC 000FC080 */ sll $t8, $t7, 2 -/* 0DC0C0 7F0A96D0 030FC021 */ addu $t8, $t8, $t7 -/* 0DC0C4 7F0A96D4 0018C080 */ sll $t8, $t8, 2 -/* 0DC0C8 7F0A96D8 01384821 */ addu $t1, $t1, $t8 -/* 0DC0CC 7F0A96DC 9529A638 */ lhu $t1, %lo(D_800409DC+12)($t1) -/* 0DC0D0 7F0A96E0 15210005 */ bne $t1, $at, .L7F0A96F8 -/* 0DC0D4 7F0A96E4 00000000 */ nop -/* 0DC0D8 7F0A96E8 0FC304AE */ jal langGet -/* 0DC0DC 7F0A96EC 3404AC31 */ li $a0, 44081 -/* 0DC0E0 7F0A96F0 10000001 */ b .L7F0A96F8 -/* 0DC0E4 7F0A96F4 00403825 */ move $a3, $v0 -.L7F0A96F8: -/* 0DC0E8 7F0A96F8 10000010 */ b .L7F0A973C -/* 0DC0EC 7F0A96FC AFA7005C */ sw $a3, 0x5c($sp) -.L7F0A9700: -/* 0DC0F0 7F0A9700 0C002C20 */ jal joyGetButtons -/* 0DC0F4 7F0A9704 24050002 */ li $a1, 2 -/* 0DC0F8 7F0A9708 10400005 */ beqz $v0, .L7F0A9720 -/* 0DC0FC 7F0A970C 00002025 */ move $a0, $zero -/* 0DC100 7F0A9710 0FC304AE */ jal langGet -/* 0DC104 7F0A9714 3404AC2F */ li $a0, 44079 -/* 0DC108 7F0A9718 10000008 */ b .L7F0A973C -/* 0DC10C 7F0A971C AFA2005C */ sw $v0, 0x5c($sp) -.L7F0A9720: -/* 0DC110 7F0A9720 0C002C20 */ jal joyGetButtons -/* 0DC114 7F0A9724 24050001 */ li $a1, 1 -/* 0DC118 7F0A9728 50400005 */ beql $v0, $zero, .L7F0A9740 -/* 0DC11C 7F0A972C 3C0C0070 */ lui $t4, 0x70 -/* 0DC120 7F0A9730 0FC304AE */ jal langGet -/* 0DC124 7F0A9734 3404AC2E */ li $a0, 44078 -/* 0DC128 7F0A9738 AFA2005C */ sw $v0, 0x5c($sp) -.L7F0A973C: -/* 0DC12C 7F0A973C 3C0C0070 */ lui $t4, (0x007000A0 >> 16) # lui $t4, 0x70 -.L7F0A9740: -/* 0DC130 7F0A9740 3C0D0030 */ lui $t5, (0x003000B0 >> 16) # lui $t5, 0x30 -/* 0DC134 7F0A9744 35AD00B0 */ ori $t5, (0x003000B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0DC138 7F0A9748 358C00A0 */ ori $t4, (0x007000A0 & 0xFFFF) # ori $t4, $t4, 0xa0 -/* 0DC13C 7F0A974C 240AFFFF */ li $t2, -1 -/* 0DC140 7F0A9750 240B0001 */ li $t3, 1 -/* 0DC144 7F0A9754 240E0001 */ li $t6, 1 -/* 0DC148 7F0A9758 8FA7005C */ lw $a3, 0x5c($sp) -/* 0DC14C 7F0A975C AFAE0028 */ sw $t6, 0x28($sp) -/* 0DC150 7F0A9760 AFAB0014 */ sw $t3, 0x14($sp) -/* 0DC154 7F0A9764 AFAA0010 */ sw $t2, 0x10($sp) -/* 0DC158 7F0A9768 AFAC0018 */ sw $t4, 0x18($sp) -/* 0DC15C 7F0A976C AFAD0024 */ sw $t5, 0x24($sp) -/* 0DC160 7F0A9770 02002025 */ move $a0, $s0 -/* 0DC164 7F0A9774 2405010E */ li $a1, 270 -/* 0DC168 7F0A9778 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DC16C 7F0A977C AFA0001C */ sw $zero, 0x1c($sp) -/* 0DC170 7F0A9780 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DC174 7F0A9784 AFA00020 */ sw $zero, 0x20($sp) -/* 0DC178 7F0A9788 1000001D */ b .L7F0A9800 -/* 0DC17C 7F0A978C 00408025 */ move $s0, $v0 -.L7F0A9790: -/* 0DC180 7F0A9790 8D088BC0 */ lw $t0, %lo(g_CurrentPlayer)($t0) -/* 0DC184 7F0A9794 3C048004 */ lui $a0, %hi(D_800409DC+12) -/* 0DC188 7F0A9798 8D192A50 */ lw $t9, 0x2a50($t0) -/* 0DC18C 7F0A979C 00197880 */ sll $t7, $t9, 2 -/* 0DC190 7F0A97A0 01F97821 */ addu $t7, $t7, $t9 -/* 0DC194 7F0A97A4 000F7880 */ sll $t7, $t7, 2 -/* 0DC198 7F0A97A8 008F2021 */ addu $a0, $a0, $t7 -/* 0DC19C 7F0A97AC 0FC304AE */ jal langGet -/* 0DC1A0 7F0A97B0 9484A638 */ lhu $a0, %lo(D_800409DC+12)($a0) -/* 0DC1A4 7F0A97B4 3C1800AA */ lui $t8, (0x00AA00B0 >> 16) # lui $t8, 0xaa -/* 0DC1A8 7F0A97B8 3C0A0030 */ lui $t2, (0x003000B0 >> 16) # lui $t2, 0x30 -/* 0DC1AC 7F0A97BC 354A00B0 */ ori $t2, (0x003000B0 & 0xFFFF) # ori $t2, $t2, 0xb0 -/* 0DC1B0 7F0A97C0 371800B0 */ ori $t8, (0x00AA00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0DC1B4 7F0A97C4 2409FFFF */ li $t1, -1 -/* 0DC1B8 7F0A97C8 240B0001 */ li $t3, 1 -/* 0DC1BC 7F0A97CC AFAB0028 */ sw $t3, 0x28($sp) -/* 0DC1C0 7F0A97D0 AFA90018 */ sw $t1, 0x18($sp) -/* 0DC1C4 7F0A97D4 AFB80010 */ sw $t8, 0x10($sp) -/* 0DC1C8 7F0A97D8 AFAA0024 */ sw $t2, 0x24($sp) -/* 0DC1CC 7F0A97DC 02002025 */ move $a0, $s0 -/* 0DC1D0 7F0A97E0 2405010E */ li $a1, 270 -/* 0DC1D4 7F0A97E4 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DC1D8 7F0A97E8 00403825 */ move $a3, $v0 -/* 0DC1DC 7F0A97EC AFA00014 */ sw $zero, 0x14($sp) -/* 0DC1E0 7F0A97F0 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DC1E4 7F0A97F4 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DC1E8 7F0A97F8 AFA00020 */ sw $zero, 0x20($sp) -/* 0DC1EC 7F0A97FC 00408025 */ move $s0, $v0 -.L7F0A9800: -/* 0DC1F0 7F0A9800 8FAC004C */ lw $t4, 0x4c($sp) -/* 0DC1F4 7F0A9804 00002025 */ move $a0, $zero -/* 0DC1F8 7F0A9808 24054000 */ li $a1, 16384 -/* 0DC1FC 7F0A980C 258D001E */ addiu $t5, $t4, 0x1e -/* 0DC200 7F0A9810 0C002C20 */ jal joyGetButtons -/* 0DC204 7F0A9814 AFAD004C */ sw $t5, 0x4c($sp) -/* 0DC208 7F0A9818 10400020 */ beqz $v0, .L7F0A989C -/* 0DC20C 7F0A981C 3C0C8007 */ lui $t4, %hi(g_CurrentPlayer) # $t4, 0x8007 -/* 0DC210 7F0A9820 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 0DC214 7F0A9824 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0DC218 7F0A9828 3C048004 */ lui $a0, %hi(D_800409DC+4) -/* 0DC21C 7F0A982C 8DC82A50 */ lw $t0, 0x2a50($t6) -/* 0DC220 7F0A9830 0008C880 */ sll $t9, $t0, 2 -/* 0DC224 7F0A9834 0328C821 */ addu $t9, $t9, $t0 -/* 0DC228 7F0A9838 0019C880 */ sll $t9, $t9, 2 -/* 0DC22C 7F0A983C 00992021 */ addu $a0, $a0, $t9 -/* 0DC230 7F0A9840 0FC304AE */ jal langGet -/* 0DC234 7F0A9844 9484A630 */ lhu $a0, %lo(D_800409DC+4)($a0) -/* 0DC238 7F0A9848 3C090070 */ lui $t1, (0x007000A0 >> 16) # lui $t1, 0x70 -/* 0DC23C 7F0A984C 3C0A0030 */ lui $t2, (0x003000B0 >> 16) # lui $t2, 0x30 -/* 0DC240 7F0A9850 354A00B0 */ ori $t2, (0x003000B0 & 0xFFFF) # ori $t2, $t2, 0xb0 -/* 0DC244 7F0A9854 352900A0 */ ori $t1, (0x007000A0 & 0xFFFF) # ori $t1, $t1, 0xa0 -/* 0DC248 7F0A9858 240FFFFF */ li $t7, -1 -/* 0DC24C 7F0A985C 24180001 */ li $t8, 1 -/* 0DC250 7F0A9860 240B0001 */ li $t3, 1 -/* 0DC254 7F0A9864 AFAB0028 */ sw $t3, 0x28($sp) -/* 0DC258 7F0A9868 AFB80014 */ sw $t8, 0x14($sp) -/* 0DC25C 7F0A986C AFAF0010 */ sw $t7, 0x10($sp) -/* 0DC260 7F0A9870 AFA90018 */ sw $t1, 0x18($sp) -/* 0DC264 7F0A9874 AFAA0024 */ sw $t2, 0x24($sp) -/* 0DC268 7F0A9878 02002025 */ move $a0, $s0 -/* 0DC26C 7F0A987C 2405010E */ li $a1, 270 -/* 0DC270 7F0A9880 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DC274 7F0A9884 00403825 */ move $a3, $v0 -/* 0DC278 7F0A9888 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DC27C 7F0A988C 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DC280 7F0A9890 AFA00020 */ sw $zero, 0x20($sp) -/* 0DC284 7F0A9894 1000001D */ b .L7F0A990C -/* 0DC288 7F0A9898 00408025 */ move $s0, $v0 -.L7F0A989C: -/* 0DC28C 7F0A989C 8D8C8BC0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0DC290 7F0A98A0 3C048004 */ lui $a0, %hi(D_800409DC+4) -/* 0DC294 7F0A98A4 8D8D2A50 */ lw $t5, 0x2a50($t4) -/* 0DC298 7F0A98A8 000D7080 */ sll $t6, $t5, 2 -/* 0DC29C 7F0A98AC 01CD7021 */ addu $t6, $t6, $t5 -/* 0DC2A0 7F0A98B0 000E7080 */ sll $t6, $t6, 2 -/* 0DC2A4 7F0A98B4 008E2021 */ addu $a0, $a0, $t6 -/* 0DC2A8 7F0A98B8 0FC304AE */ jal langGet -/* 0DC2AC 7F0A98BC 9484A630 */ lhu $a0, %lo(D_800409DC+4)($a0) -/* 0DC2B0 7F0A98C0 3C0800AA */ lui $t0, (0x00AA00B0 >> 16) # lui $t0, 0xaa -/* 0DC2B4 7F0A98C4 3C0F0030 */ lui $t7, (0x003000B0 >> 16) # lui $t7, 0x30 -/* 0DC2B8 7F0A98C8 35EF00B0 */ ori $t7, (0x003000B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DC2BC 7F0A98CC 350800B0 */ ori $t0, (0x00AA00B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DC2C0 7F0A98D0 2419FFFF */ li $t9, -1 -/* 0DC2C4 7F0A98D4 24180001 */ li $t8, 1 -/* 0DC2C8 7F0A98D8 AFB80028 */ sw $t8, 0x28($sp) -/* 0DC2CC 7F0A98DC AFB90018 */ sw $t9, 0x18($sp) -/* 0DC2D0 7F0A98E0 AFA80010 */ sw $t0, 0x10($sp) -/* 0DC2D4 7F0A98E4 AFAF0024 */ sw $t7, 0x24($sp) -/* 0DC2D8 7F0A98E8 02002025 */ move $a0, $s0 -/* 0DC2DC 7F0A98EC 2405010E */ li $a1, 270 -/* 0DC2E0 7F0A98F0 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DC2E4 7F0A98F4 00403825 */ move $a3, $v0 -/* 0DC2E8 7F0A98F8 AFA00014 */ sw $zero, 0x14($sp) -/* 0DC2EC 7F0A98FC AFA0001C */ sw $zero, 0x1c($sp) -/* 0DC2F0 7F0A9900 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DC2F4 7F0A9904 AFA00020 */ sw $zero, 0x20($sp) -/* 0DC2F8 7F0A9908 00408025 */ move $s0, $v0 -.L7F0A990C: -/* 0DC2FC 7F0A990C 8FA9004C */ lw $t1, 0x4c($sp) -/* 0DC300 7F0A9910 00002025 */ move $a0, $zero -/* 0DC304 7F0A9914 34058000 */ li $a1, 32768 -/* 0DC308 7F0A9918 252A001E */ addiu $t2, $t1, 0x1e -/* 0DC30C 7F0A991C 0C002C20 */ jal joyGetButtons -/* 0DC310 7F0A9920 AFAA004C */ sw $t2, 0x4c($sp) -/* 0DC314 7F0A9924 10400020 */ beqz $v0, .L7F0A99A8 -/* 0DC318 7F0A9928 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 -/* 0DC31C 7F0A992C 3C0B8007 */ lui $t3, %hi(g_CurrentPlayer) # $t3, 0x8007 -/* 0DC320 7F0A9930 8D6B8BC0 */ lw $t3, %lo(g_CurrentPlayer)($t3) -/* 0DC324 7F0A9934 3C048004 */ lui $a0, %hi(D_800409DC+2) -/* 0DC328 7F0A9938 8D6C2A50 */ lw $t4, 0x2a50($t3) -/* 0DC32C 7F0A993C 000C6880 */ sll $t5, $t4, 2 -/* 0DC330 7F0A9940 01AC6821 */ addu $t5, $t5, $t4 -/* 0DC334 7F0A9944 000D6880 */ sll $t5, $t5, 2 -/* 0DC338 7F0A9948 008D2021 */ addu $a0, $a0, $t5 -/* 0DC33C 7F0A994C 0FC304AE */ jal langGet -/* 0DC340 7F0A9950 9484A62E */ lhu $a0, %lo(D_800409DC+2)($a0) -/* 0DC344 7F0A9954 3C190070 */ lui $t9, (0x007000A0 >> 16) # lui $t9, 0x70 -/* 0DC348 7F0A9958 3C0F0030 */ lui $t7, (0x003000B0 >> 16) # lui $t7, 0x30 -/* 0DC34C 7F0A995C 35EF00B0 */ ori $t7, (0x003000B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DC350 7F0A9960 373900A0 */ ori $t9, (0x007000A0 & 0xFFFF) # ori $t9, $t9, 0xa0 -/* 0DC354 7F0A9964 240EFFFF */ li $t6, -1 -/* 0DC358 7F0A9968 24080001 */ li $t0, 1 -/* 0DC35C 7F0A996C 24180001 */ li $t8, 1 -/* 0DC360 7F0A9970 AFB80028 */ sw $t8, 0x28($sp) -/* 0DC364 7F0A9974 AFA80014 */ sw $t0, 0x14($sp) -/* 0DC368 7F0A9978 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DC36C 7F0A997C AFB90018 */ sw $t9, 0x18($sp) -/* 0DC370 7F0A9980 AFAF0024 */ sw $t7, 0x24($sp) -/* 0DC374 7F0A9984 02002025 */ move $a0, $s0 -/* 0DC378 7F0A9988 2405010E */ li $a1, 270 -/* 0DC37C 7F0A998C 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DC380 7F0A9990 00403825 */ move $a3, $v0 -/* 0DC384 7F0A9994 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DC388 7F0A9998 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DC38C 7F0A999C AFA00020 */ sw $zero, 0x20($sp) -/* 0DC390 7F0A99A0 1000001D */ b .L7F0A9A18 -/* 0DC394 7F0A99A4 00408025 */ move $s0, $v0 -.L7F0A99A8: -/* 0DC398 7F0A99A8 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0DC39C 7F0A99AC 3C048004 */ lui $a0, %hi(D_800409DC+2) -/* 0DC3A0 7F0A99B0 8D2A2A50 */ lw $t2, 0x2a50($t1) -/* 0DC3A4 7F0A99B4 000A5880 */ sll $t3, $t2, 2 -/* 0DC3A8 7F0A99B8 016A5821 */ addu $t3, $t3, $t2 -/* 0DC3AC 7F0A99BC 000B5880 */ sll $t3, $t3, 2 -/* 0DC3B0 7F0A99C0 008B2021 */ addu $a0, $a0, $t3 -/* 0DC3B4 7F0A99C4 0FC304AE */ jal langGet -/* 0DC3B8 7F0A99C8 9484A62E */ lhu $a0, %lo(D_800409DC+2)($a0) -/* 0DC3BC 7F0A99CC 3C0C00AA */ lui $t4, (0x00AA00B0 >> 16) # lui $t4, 0xaa -/* 0DC3C0 7F0A99D0 3C0E0030 */ lui $t6, (0x003000B0 >> 16) # lui $t6, 0x30 -/* 0DC3C4 7F0A99D4 35CE00B0 */ ori $t6, (0x003000B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DC3C8 7F0A99D8 358C00B0 */ ori $t4, (0x00AA00B0 & 0xFFFF) # ori $t4, $t4, 0xb0 -/* 0DC3CC 7F0A99DC 240DFFFF */ li $t5, -1 -/* 0DC3D0 7F0A99E0 24080001 */ li $t0, 1 -/* 0DC3D4 7F0A99E4 AFA80028 */ sw $t0, 0x28($sp) -/* 0DC3D8 7F0A99E8 AFAD0018 */ sw $t5, 0x18($sp) -/* 0DC3DC 7F0A99EC AFAC0010 */ sw $t4, 0x10($sp) -/* 0DC3E0 7F0A99F0 AFAE0024 */ sw $t6, 0x24($sp) -/* 0DC3E4 7F0A99F4 02002025 */ move $a0, $s0 -/* 0DC3E8 7F0A99F8 2405010E */ li $a1, 270 -/* 0DC3EC 7F0A99FC 8FA6004C */ lw $a2, 0x4c($sp) -/* 0DC3F0 7F0A9A00 00403825 */ move $a3, $v0 -/* 0DC3F4 7F0A9A04 AFA00014 */ sw $zero, 0x14($sp) -/* 0DC3F8 7F0A9A08 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DC3FC 7F0A9A0C 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DC400 7F0A9A10 AFA00020 */ sw $zero, 0x20($sp) -/* 0DC404 7F0A9A14 00408025 */ move $s0, $v0 -.L7F0A9A18: -/* 0DC408 7F0A9A18 8FB90050 */ lw $t9, 0x50($sp) -/* 0DC40C 7F0A9A1C 3C0C8007 */ lui $t4, %hi(g_CurrentPlayer) # $t4, 0x8007 -/* 0DC410 7F0A9A20 13200018 */ beqz $t9, .L7F0A9A84 -/* 0DC414 7F0A9A24 00000000 */ nop -/* 0DC418 7F0A9A28 0FC304AE */ jal langGet -/* 0DC41C 7F0A9A2C 3404AC08 */ li $a0, 44040 -/* 0DC420 7F0A9A30 3C090070 */ lui $t1, (0x007000A0 >> 16) # lui $t1, 0x70 -/* 0DC424 7F0A9A34 3C0A0030 */ lui $t2, (0x003000B0 >> 16) # lui $t2, 0x30 -/* 0DC428 7F0A9A38 354A00B0 */ ori $t2, (0x003000B0 & 0xFFFF) # ori $t2, $t2, 0xb0 -/* 0DC42C 7F0A9A3C 352900A0 */ ori $t1, (0x007000A0 & 0xFFFF) # ori $t1, $t1, 0xa0 -/* 0DC430 7F0A9A40 240FFFFF */ li $t7, -1 -/* 0DC434 7F0A9A44 24180001 */ li $t8, 1 -/* 0DC438 7F0A9A48 240B0001 */ li $t3, 1 -/* 0DC43C 7F0A9A4C AFAB0028 */ sw $t3, 0x28($sp) -/* 0DC440 7F0A9A50 AFB80014 */ sw $t8, 0x14($sp) -/* 0DC444 7F0A9A54 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DC448 7F0A9A58 AFA90018 */ sw $t1, 0x18($sp) -/* 0DC44C 7F0A9A5C AFAA0024 */ sw $t2, 0x24($sp) -/* 0DC450 7F0A9A60 02002025 */ move $a0, $s0 -/* 0DC454 7F0A9A64 240500FA */ li $a1, 250 -/* 0DC458 7F0A9A68 240600E1 */ li $a2, 225 -/* 0DC45C 7F0A9A6C 00403825 */ move $a3, $v0 -/* 0DC460 7F0A9A70 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DC464 7F0A9A74 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DC468 7F0A9A78 AFA00020 */ sw $zero, 0x20($sp) -/* 0DC46C 7F0A9A7C 1000001D */ b .L7F0A9AF4 -/* 0DC470 7F0A9A80 00408025 */ move $s0, $v0 -.L7F0A9A84: -/* 0DC474 7F0A9A84 8D8C8BC0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0DC478 7F0A9A88 3C048004 */ lui $a0, %hi(D_800409DC+18) -/* 0DC47C 7F0A9A8C 8D8D2A50 */ lw $t5, 0x2a50($t4) -/* 0DC480 7F0A9A90 000D7080 */ sll $t6, $t5, 2 -/* 0DC484 7F0A9A94 01CD7021 */ addu $t6, $t6, $t5 -/* 0DC488 7F0A9A98 000E7080 */ sll $t6, $t6, 2 -/* 0DC48C 7F0A9A9C 008E2021 */ addu $a0, $a0, $t6 -/* 0DC490 7F0A9AA0 0FC304AE */ jal langGet -/* 0DC494 7F0A9AA4 9484A63E */ lhu $a0, %lo(D_800409DC+18)($a0) -/* 0DC498 7F0A9AA8 3C0800AA */ lui $t0, (0x00AA00B0 >> 16) # lui $t0, 0xaa -/* 0DC49C 7F0A9AAC 3C0F0030 */ lui $t7, (0x003000B0 >> 16) # lui $t7, 0x30 -/* 0DC4A0 7F0A9AB0 35EF00B0 */ ori $t7, (0x003000B0 & 0xFFFF) # ori $t7, $t7, 0xb0 -/* 0DC4A4 7F0A9AB4 350800B0 */ ori $t0, (0x00AA00B0 & 0xFFFF) # ori $t0, $t0, 0xb0 -/* 0DC4A8 7F0A9AB8 2419FFFF */ li $t9, -1 -/* 0DC4AC 7F0A9ABC 24180001 */ li $t8, 1 -/* 0DC4B0 7F0A9AC0 AFB80028 */ sw $t8, 0x28($sp) -/* 0DC4B4 7F0A9AC4 AFB90018 */ sw $t9, 0x18($sp) -/* 0DC4B8 7F0A9AC8 AFA80010 */ sw $t0, 0x10($sp) -/* 0DC4BC 7F0A9ACC AFAF0024 */ sw $t7, 0x24($sp) -/* 0DC4C0 7F0A9AD0 02002025 */ move $a0, $s0 -/* 0DC4C4 7F0A9AD4 240500FA */ li $a1, 250 -/* 0DC4C8 7F0A9AD8 240600E1 */ li $a2, 225 -/* 0DC4CC 7F0A9ADC 00403825 */ move $a3, $v0 -/* 0DC4D0 7F0A9AE0 AFA00014 */ sw $zero, 0x14($sp) -/* 0DC4D4 7F0A9AE4 AFA0001C */ sw $zero, 0x1c($sp) -/* 0DC4D8 7F0A9AE8 0FC2A1B6 */ jal sub_GAME_7F0A9398 -/* 0DC4DC 7F0A9AEC AFA00020 */ sw $zero, 0x20($sp) -/* 0DC4E0 7F0A9AF0 00408025 */ move $s0, $v0 -.L7F0A9AF4: -/* 0DC4E4 7F0A9AF4 8FBF003C */ lw $ra, 0x3c($sp) -/* 0DC4E8 7F0A9AF8 02001025 */ move $v0, $s0 -/* 0DC4EC 7F0A9AFC 8FB00038 */ lw $s0, 0x38($sp) -/* 0DC4F0 7F0A9B00 03E00008 */ jr $ra -/* 0DC4F4 7F0A9B04 27BD00B0 */ addiu $sp, $sp, 0xb0 -) -#endif -#endif - Gfx *display_text_buttons_dual_control(Gfx *gdl) @@ -8100,20 +3165,20 @@ Gfx *display_text_buttons_dual_control(Gfx *gdl) if (joyGetButtons(PLAYER_1, A_BUTTON)) { - gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); //weapon + gdl = draw_options_labels(gdl, 0x5A, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); //weapon } else { - gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); //weapon + gdl = draw_options_labels(gdl, 0x5A, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); //weapon } if (joyGetButtons(PLAYER_1, B_BUTTON)) { - gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); //action + gdl = draw_options_labels(gdl, 0x5A, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); //action } else { - gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); //action + gdl = draw_options_labels(gdl, 0x5A, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); //action } if ((g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_PLENTY) || (g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_GALORE)) @@ -8127,11 +3192,11 @@ Gfx *display_text_buttons_dual_control(Gfx *gdl) if (joyGetButtons(PLAYER_1, Z_TRIG)) { - gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_5, textptr_aux, -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); + gdl = draw_options_labels(gdl, 0x5A, YOFFSET_5, textptr_aux, -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); } else { - gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_5, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); + gdl = draw_options_labels(gdl, 0x5A, YOFFSET_5, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); } if ((g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_PLENTY) || (g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_DOMINO)) @@ -8143,24 +3208,24 @@ Gfx *display_text_buttons_dual_control(Gfx *gdl) textptr_aux = langGet(getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF)); //look } - gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_4, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); + gdl = draw_options_labels(gdl, 0x5A, YOFFSET_4, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); if (joyGetButtons(1, A_BUTTON)) { - gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); //weapon + gdl = draw_options_labels(gdl, 0xE6, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); //weapon } else { - gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); //weapon + gdl = draw_options_labels(gdl, 0xE6, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); //weapon } if (joyGetButtons(1, B_BUTTON)) { - gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); //action + gdl = draw_options_labels(gdl, 0xE6, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); //action } else { - gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); //action + gdl = draw_options_labels(gdl, 0xE6, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); //action } if ((g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_PLENTY) || (g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_GALORE)) @@ -8174,11 +3239,11 @@ Gfx *display_text_buttons_dual_control(Gfx *gdl) if (joyGetButtons(1, Z_TRIG)) { - gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_5, textptr_aux, -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); + gdl = draw_options_labels(gdl, 0xE6, YOFFSET_5, textptr_aux, -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); } else { - gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_5, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); + gdl = draw_options_labels(gdl, 0xE6, YOFFSET_5, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); } if ((g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_PLENTY) || (g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_DOMINO)) @@ -8190,1436 +3255,173 @@ Gfx *display_text_buttons_dual_control(Gfx *gdl) textptr_aux = langGet(getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF)); //move } - gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_4, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); + gdl = draw_options_labels(gdl, 0xE6, YOFFSET_4, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); return gdl; } +/** + * Address: 7F0AADC0 + * + * Draw the controller model(s) and the individual buttons. + */ +Gfx *draw_watch_controller(Gfx *gdl) +{ + Mtx *perspmtx; + Mtxf identity; + Mtxf zrotmtx; + Mtxf xrotmtx; + Mtxf tmpmtx1; + Mtxf tmpmtx2; + Mtxf modelmtx; + Mtxf finalmtx; + coord3d pos; + u16 perspNorm; + Mtxf lookat1; + Mtxf lookat2; + void *watchTable; + s32 green; + s8 contpadnum0; + s8 contpadnum1; + WatchContButtonPositions table0; + WatchContButtonPositions table1; + WatchContButtonPositions table2; + Gfx *cmd0; + Gfx *cmd1; + perspmtx = dynAllocateMatrix(); + pos = g_ControllerPos; + contpadnum0 = 0; + contpadnum1 = 1; + table0 = g_1ContButtonPositions[0]; + table1 = g_2ContLeftButtonPositions[0]; + table2 = g_2ContRightButtonPositions[0]; -#ifdef NONMATCHING -void sub_GAME_7F0AADC0(void) { + sub_GAME_7F0A9684(0, &D_80040B2C, &g_WatchControllerSpinSpeed, &g_WatchControllerSpinAngle); + matrix_4x4_set_identity(&identity); + g_WatchControllerSpinAngle += (g_WatchControllerSpinSpeed * ((f32) WATCH_ROTATION_FRAMES)) * 0.5f; + g_WatchControllerSpinAngle = watchWrapAroundPI(g_WatchControllerSpinAngle); + + matrix_4x4_set_rotation_around_z(g_WatchControllerSpinAngle, &zrotmtx); + + if (watch_item_is_actively_selected && (controller_options_index == CONTROLLER_OPTIONS_INDEX_INPUTS)) + { + g_WatchControllerPitch = sub_GAME_7F0A95C4(g_WatchControllerPitch, (((f32) joyGetStickY(PLAYER_1)) * M_TAU_F) / 360.0f, 4.0f); + } + else + { + g_WatchControllerPitch = sub_GAME_7F0A95C4(g_WatchControllerPitch, 0.0f, 4.0f); + } + + matrix_4x4_set_rotation_around_x((-g_WatchControllerPitch) - 0.78539819f, &xrotmtx); + matrix_4x4_multiply(&identity, &zrotmtx, &tmpmtx1); + matrix_4x4_multiply(&tmpmtx1, &xrotmtx, &tmpmtx2); + matrix_4x4_set_identity_and_position(&pos, &tmpmtx1); + matrix_4x4_multiply(&tmpmtx1, &tmpmtx2, &modelmtx); + + if (controllerCheckDualControllerTypesAllowed()) + { + f32 eye = 495.0f; + + watchTable = &table1; + + if (1); + + matrix_4x4_set_lookat_target(&lookat1, eye, 2500.0f, 32.0f, eye, 0.0f, 32.0f, 0.0f, 0.0f, -1.0f); + } + else + { + watchTable = &table0; + matrix_4x4_set_lookat_target(&lookat1, -5.0f, 2000.0f, -168.0f, -5.0f, 0.0f, -168.0f, 0.0f, 0.0f, -1.0f); + } + + matrix_4x4_multiply(&lookat1, &modelmtx, &finalmtx); + + guPerspective(perspmtx, &perspNorm, WATCH_PERSPECTIVE_FOVY, WATCH_PERSPECTIVE_ASPECT, 1000.0f, 3000.0f, 1.0f); + + cmd0 = gdl++; \ + gSPMatrix(cmd0, osVirtualToPhysical(perspmtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + + gdl = sub_GAME_7F0A6EE8(gdl); + green = g_WatchBackgroundGreen; + + if (green < 0xe0) + { + gdl = watchRenderController(gdl, &finalmtx, green - 6, 1, watchTable, &contpadnum0); + } + else + { + gdl = watchRenderControllerOpaque(gdl, &finalmtx, 1, (s32) watchTable, &contpadnum0); + } + + if (controllerCheckDualControllerTypesAllowed()) + { + sub_GAME_7F0A9684(1, &D_80040B3C, &D_80040B38, &D_80040B34); + matrix_4x4_set_identity(&identity); + + D_80040B34 += (D_80040B38 * ((f32) WATCH_ROTATION_FRAMES)) * 0.5f; + D_80040B34 = watchWrapAroundPI(D_80040B34); + + matrix_4x4_set_rotation_around_z(D_80040B34, &zrotmtx); + + if (watch_item_is_actively_selected && (controller_options_index == CONTROLLER_OPTIONS_INDEX_INPUTS)) + { + D_80040B30 = sub_GAME_7F0A95C4(D_80040B30, (((f32) joyGetStickY(PLAYER_2)) * M_TAU_F) / 360.0f, 4.0f); + } + else + { + D_80040B30 = sub_GAME_7F0A95C4(D_80040B30, 0.0f, 4.0f); + } + + matrix_4x4_set_rotation_around_x((-D_80040B30) - 0.78539819f, &xrotmtx); + matrix_4x4_multiply(&identity, &zrotmtx, &tmpmtx1); + matrix_4x4_multiply(&tmpmtx1, &xrotmtx, &tmpmtx2); + matrix_4x4_set_identity_and_position(&pos, &tmpmtx1); + matrix_4x4_multiply(&tmpmtx1, &tmpmtx2, &modelmtx); + matrix_4x4_set_lookat_target(&lookat2, -505.0f, 2500.0f, 32.0f, -505.0f, 0.0f, 32.0f, 0.0f, 0.0f, -1.0f); + matrix_4x4_multiply(&lookat2, &modelmtx, &finalmtx); + + guPerspective(perspmtx, &perspNorm, WATCH_PERSPECTIVE_FOVY, WATCH_PERSPECTIVE_ASPECT, 1000.0f, 3000.0f, 1.0f); + + /** + * This should be something like: + * + * cmd1 = gdl++; + * gSPMatrix(cmd1, osVirtualToPhysical(perspmtx),G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + * + * but it doesn't match for some reason. + */ + cmd1 = gdl++; cmd1->words.w0 = 0x01030040; cmd1->words.w1 = osVirtualToPhysical(perspmtx); + + gdl = sub_GAME_7F0A6EE8(gdl); + green = g_WatchBackgroundGreen; + + if (green < 0xe0) + { + gdl = watchRenderController(gdl, &finalmtx, green - 6, 1, &table2, &contpadnum1); + } + else + { + gdl = watchRenderControllerOpaque(gdl, &finalmtx, 1, (s32) (&table2), &contpadnum1); + } + } + + if (controllerCheckDualControllerTypesAllowed()) + { + gdl = display_text_buttons_dual_control(gdl); + } + else + { + gdl = sub_GAME_7F0A9AB8(gdl); + } + + return gdl; } -#else -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel D_80058550 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80058554 -.word 0x3f490fdb /*0.78539819*/ -glabel D_80058558 -.word 0x43f78000 /*495.0*/ -glabel D_8005855C -.word 0x453b8000 /*3000.0*/ -glabel D_80058560 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80058564 -.word 0x3f490fdb /*0.78539819*/ -glabel D_80058568 -.word 0xc3fc8000 /*-505.0*/ -glabel D_8005856C -.word 0x453b8000 /*3000.0*/ -.text -glabel sub_GAME_7F0AADC0 -/* 0DF8F0 7F0AADC0 27BDFAC0 */ addiu $sp, $sp, -0x540 -/* 0DF8F4 7F0AADC4 AFBF0034 */ sw $ra, 0x34($sp) -/* 0DF8F8 7F0AADC8 AFB00030 */ sw $s0, 0x30($sp) -/* 0DF8FC 7F0AADCC 0FC2F5B8 */ jal dynAllocateMatrix -/* 0DF900 7F0AADD0 00808025 */ move $s0, $a0 -/* 0DF904 7F0AADD4 3C0F8004 */ lui $t7, %hi(D_80040B5C) -/* 0DF908 7F0AADD8 AFA2053C */ sw $v0, 0x53c($sp) -/* 0DF90C 7F0AADDC 25EF0B5C */ addiu $t7, %lo(D_80040B5C) # addiu $t7, $t7, 0xb5c -/* 0DF910 7F0AADE0 8DE10000 */ lw $at, ($t7) -/* 0DF914 7F0AADE4 27AE0370 */ addiu $t6, $sp, 0x370 -/* 0DF918 7F0AADE8 8DE80004 */ lw $t0, 4($t7) -/* 0DF91C 7F0AADEC ADC10000 */ sw $at, ($t6) -/* 0DF920 7F0AADF0 8DE10008 */ lw $at, 8($t7) -/* 0DF924 7F0AADF4 3C0B8004 */ lui $t3, %hi(D_80040B68) -/* 0DF928 7F0AADF8 ADC80004 */ sw $t0, 4($t6) -/* 0DF92C 7F0AADFC ADC10008 */ sw $at, 8($t6) -/* 0DF930 7F0AAE00 24090001 */ li $t1, 1 -/* 0DF934 7F0AAE04 256B0B68 */ addiu $t3, %lo(D_80040B68) # addiu $t3, $t3, 0xb68 -/* 0DF938 7F0AAE08 A3A002E3 */ sb $zero, 0x2e3($sp) -/* 0DF93C 7F0AAE0C A3A902E2 */ sb $t1, 0x2e2($sp) -/* 0DF940 7F0AAE10 257900D8 */ addiu $t9, $t3, 0xd8 -/* 0DF944 7F0AAE14 27AA0204 */ addiu $t2, $sp, 0x204 -.L7F0AAE18: -/* 0DF948 7F0AAE18 8D610000 */ lw $at, ($t3) -/* 0DF94C 7F0AAE1C 256B000C */ addiu $t3, $t3, 0xc -/* 0DF950 7F0AAE20 254A000C */ addiu $t2, $t2, 0xc -/* 0DF954 7F0AAE24 AD41FFF4 */ sw $at, -0xc($t2) -/* 0DF958 7F0AAE28 8D61FFF8 */ lw $at, -8($t3) -/* 0DF95C 7F0AAE2C AD41FFF8 */ sw $at, -8($t2) -/* 0DF960 7F0AAE30 8D61FFFC */ lw $at, -4($t3) -/* 0DF964 7F0AAE34 1579FFF8 */ bne $t3, $t9, .L7F0AAE18 -/* 0DF968 7F0AAE38 AD41FFFC */ sw $at, -4($t2) -/* 0DF96C 7F0AAE3C 8D610000 */ lw $at, ($t3) -/* 0DF970 7F0AAE40 3C0E8004 */ lui $t6, %hi(D_80040C44) -/* 0DF974 7F0AAE44 25CE0C44 */ addiu $t6, %lo(D_80040C44) # addiu $t6, $t6, 0xc44 -/* 0DF978 7F0AAE48 25C900D8 */ addiu $t1, $t6, 0xd8 -/* 0DF97C 7F0AAE4C 27B80128 */ addiu $t8, $sp, 0x128 -/* 0DF980 7F0AAE50 AD410000 */ sw $at, ($t2) -.L7F0AAE54: -/* 0DF984 7F0AAE54 8DC10000 */ lw $at, ($t6) -/* 0DF988 7F0AAE58 25CE000C */ addiu $t6, $t6, 0xc -/* 0DF98C 7F0AAE5C 2718000C */ addiu $t8, $t8, 0xc -/* 0DF990 7F0AAE60 AF01FFF4 */ sw $at, -0xc($t8) -/* 0DF994 7F0AAE64 8DC1FFF8 */ lw $at, -8($t6) -/* 0DF998 7F0AAE68 AF01FFF8 */ sw $at, -8($t8) -/* 0DF99C 7F0AAE6C 8DC1FFFC */ lw $at, -4($t6) -/* 0DF9A0 7F0AAE70 15C9FFF8 */ bne $t6, $t1, .L7F0AAE54 -/* 0DF9A4 7F0AAE74 AF01FFFC */ sw $at, -4($t8) -/* 0DF9A8 7F0AAE78 8DC10000 */ lw $at, ($t6) -/* 0DF9AC 7F0AAE7C 3C0C8004 */ lui $t4, %hi(D_80040D20) -/* 0DF9B0 7F0AAE80 258C0D20 */ addiu $t4, %lo(D_80040D20) # addiu $t4, $t4, 0xd20 -/* 0DF9B4 7F0AAE84 258A00D8 */ addiu $t2, $t4, 0xd8 -/* 0DF9B8 7F0AAE88 27AD004C */ addiu $t5, $sp, 0x4c -/* 0DF9BC 7F0AAE8C AF010000 */ sw $at, ($t8) -.L7F0AAE90: -/* 0DF9C0 7F0AAE90 8D810000 */ lw $at, ($t4) -/* 0DF9C4 7F0AAE94 258C000C */ addiu $t4, $t4, 0xc -/* 0DF9C8 7F0AAE98 25AD000C */ addiu $t5, $t5, 0xc -/* 0DF9CC 7F0AAE9C ADA1FFF4 */ sw $at, -0xc($t5) -/* 0DF9D0 7F0AAEA0 8D81FFF8 */ lw $at, -8($t4) -/* 0DF9D4 7F0AAEA4 ADA1FFF8 */ sw $at, -8($t5) -/* 0DF9D8 7F0AAEA8 8D81FFFC */ lw $at, -4($t4) -/* 0DF9DC 7F0AAEAC 158AFFF8 */ bne $t4, $t2, .L7F0AAE90 -/* 0DF9E0 7F0AAEB0 ADA1FFFC */ sw $at, -4($t5) -/* 0DF9E4 7F0AAEB4 8D810000 */ lw $at, ($t4) -/* 0DF9E8 7F0AAEB8 3C058004 */ lui $a1, %hi(D_80040B2C) -/* 0DF9EC 7F0AAEBC 3C068004 */ lui $a2, %hi(D_80040B28) -/* 0DF9F0 7F0AAEC0 3C078004 */ lui $a3, %hi(D_80040B24) -/* 0DF9F4 7F0AAEC4 24E70B24 */ addiu $a3, %lo(D_80040B24) # addiu $a3, $a3, 0xb24 -/* 0DF9F8 7F0AAEC8 24C60B28 */ addiu $a2, %lo(D_80040B28) # addiu $a2, $a2, 0xb28 -/* 0DF9FC 7F0AAECC 24A50B2C */ addiu $a1, %lo(D_80040B2C) # addiu $a1, $a1, 0xb2c -/* 0DFA00 7F0AAED0 00002025 */ move $a0, $zero -/* 0DFA04 7F0AAED4 0FC2A5A1 */ jal sub_GAME_7F0A9684 -/* 0DFA08 7F0AAED8 ADA10000 */ sw $at, ($t5) -/* 0DFA0C 7F0AAEDC 0FC15FF4 */ jal matrix_4x4_set_identity -/* 0DFA10 7F0AAEE0 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0DFA14 7F0AAEE4 3C088005 */ lui $t0, %hi(speedgraphframes) -/* 0DFA18 7F0AAEE8 8D088498 */ lw $t0, %lo(speedgraphframes)($t0) -/* 0DFA1C 7F0AAEEC 3C018004 */ lui $at, %hi(D_80040B28) -/* 0DFA20 7F0AAEF0 C4240B28 */ lwc1 $f4, %lo(D_80040B28)($at) -/* 0DFA24 7F0AAEF4 44883000 */ mtc1 $t0, $f6 -/* 0DFA28 7F0AAEF8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0DFA2C 7F0AAEFC 44818000 */ mtc1 $at, $f16 -/* 0DFA30 7F0AAF00 46803220 */ cvt.s.w $f8, $f6 -/* 0DFA34 7F0AAF04 3C028004 */ lui $v0, %hi(D_80040B24) -/* 0DFA38 7F0AAF08 24420B24 */ addiu $v0, %lo(D_80040B24) # addiu $v0, $v0, 0xb24 -/* 0DFA3C 7F0AAF0C C4460000 */ lwc1 $f6, ($v0) -/* 0DFA40 7F0AAF10 46082282 */ mul.s $f10, $f4, $f8 -/* 0DFA44 7F0AAF14 00000000 */ nop -/* 0DFA48 7F0AAF18 46105482 */ mul.s $f18, $f10, $f16 -/* 0DFA4C 7F0AAF1C 46123100 */ add.s $f4, $f6, $f18 -/* 0DFA50 7F0AAF20 E4440000 */ swc1 $f4, ($v0) -/* 0DFA54 7F0AAF24 0FC29A8B */ jal watchWrapAroundPI -/* 0DFA58 7F0AAF28 C44C0000 */ lwc1 $f12, ($v0) -/* 0DFA5C 7F0AAF2C 3C018004 */ lui $at, %hi(D_80040B24) -/* 0DFA60 7F0AAF30 E4200B24 */ swc1 $f0, %lo(D_80040B24)($at) -/* 0DFA64 7F0AAF34 C42C0B24 */ lwc1 $f12, %lo(D_80040B24)($at) -/* 0DFA68 7F0AAF38 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 0DFA6C 7F0AAF3C 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0DFA70 7F0AAF40 3C0F8004 */ lui $t7, %hi(watch_item_is_actively_selected) -/* 0DFA74 7F0AAF44 8DEF09A8 */ lw $t7, %lo(watch_item_is_actively_selected)($t7) -/* 0DFA78 7F0AAF48 11E00016 */ beqz $t7, .L7F0AAFA4 -/* 0DFA7C 7F0AAF4C 3C098004 */ lui $t1, %hi(controller_options_index) -/* 0DFA80 7F0AAF50 8D290998 */ lw $t1, %lo(controller_options_index)($t1) -/* 0DFA84 7F0AAF54 24010001 */ li $at, 1 -/* 0DFA88 7F0AAF58 15210012 */ bne $t1, $at, .L7F0AAFA4 -/* 0DFA8C 7F0AAF5C 00000000 */ nop -/* 0DFA90 7F0AAF60 0C00307F */ jal joyGetStickY -/* 0DFA94 7F0AAF64 00002025 */ move $a0, $zero -/* 0DFA98 7F0AAF68 44824000 */ mtc1 $v0, $f8 -/* 0DFA9C 7F0AAF6C 3C018004 */ lui $at, %hi(D_80040B20) -/* 0DFAA0 7F0AAF70 C42C0B20 */ lwc1 $f12, %lo(D_80040B20)($at) -/* 0DFAA4 7F0AAF74 468042A0 */ cvt.s.w $f10, $f8 -/* 0DFAA8 7F0AAF78 3C018006 */ lui $at, %hi(D_80058550) -/* 0DFAAC 7F0AAF7C C4308550 */ lwc1 $f16, %lo(D_80058550)($at) -/* 0DFAB0 7F0AAF80 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DFAB4 7F0AAF84 44819000 */ mtc1 $at, $f18 -/* 0DFAB8 7F0AAF88 3C064080 */ lui $a2, 0x4080 -/* 0DFABC 7F0AAF8C 46105182 */ mul.s $f6, $f10, $f16 -/* 0DFAC0 7F0AAF90 0FC2A571 */ jal sub_GAME_7F0A95C4 -/* 0DFAC4 7F0AAF94 46123383 */ div.s $f14, $f6, $f18 -/* 0DFAC8 7F0AAF98 3C018004 */ lui $at, %hi(D_80040B20) -/* 0DFACC 7F0AAF9C 10000008 */ b .L7F0AAFC0 -/* 0DFAD0 7F0AAFA0 E4200B20 */ swc1 $f0, %lo(D_80040B20)($at) -.L7F0AAFA4: -/* 0DFAD4 7F0AAFA4 3C018004 */ lui $at, %hi(D_80040B20) -/* 0DFAD8 7F0AAFA8 44807000 */ mtc1 $zero, $f14 -/* 0DFADC 7F0AAFAC C42C0B20 */ lwc1 $f12, %lo(D_80040B20)($at) -/* 0DFAE0 7F0AAFB0 0FC2A571 */ jal sub_GAME_7F0A95C4 -/* 0DFAE4 7F0AAFB4 3C064080 */ lui $a2, 0x4080 -/* 0DFAE8 7F0AAFB8 3C018004 */ lui $at, %hi(D_80040B20) -/* 0DFAEC 7F0AAFBC E4200B20 */ swc1 $f0, %lo(D_80040B20)($at) -.L7F0AAFC0: -/* 0DFAF0 7F0AAFC0 3C018004 */ lui $at, %hi(D_80040B20) -/* 0DFAF4 7F0AAFC4 C4240B20 */ lwc1 $f4, %lo(D_80040B20)($at) -/* 0DFAF8 7F0AAFC8 3C018006 */ lui $at, %hi(D_80058554) -/* 0DFAFC 7F0AAFCC C42A8554 */ lwc1 $f10, %lo(D_80058554)($at) -/* 0DFB00 7F0AAFD0 46002207 */ neg.s $f8, $f4 -/* 0DFB04 7F0AAFD4 27A5047C */ addiu $a1, $sp, 0x47c -/* 0DFB08 7F0AAFD8 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 0DFB0C 7F0AAFDC 460A4301 */ sub.s $f12, $f8, $f10 -/* 0DFB10 7F0AAFE0 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0DFB14 7F0AAFE4 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0DFB18 7F0AAFE8 0FC16032 */ jal matrix_4x4_multiply -/* 0DFB1C 7F0AAFEC 27A6043C */ addiu $a2, $sp, 0x43c -/* 0DFB20 7F0AAFF0 27A4043C */ addiu $a0, $sp, 0x43c -/* 0DFB24 7F0AAFF4 27A5047C */ addiu $a1, $sp, 0x47c -/* 0DFB28 7F0AAFF8 0FC16032 */ jal matrix_4x4_multiply -/* 0DFB2C 7F0AAFFC 27A603FC */ addiu $a2, $sp, 0x3fc -/* 0DFB30 7F0AB000 27A40370 */ addiu $a0, $sp, 0x370 -/* 0DFB34 7F0AB004 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 0DFB38 7F0AB008 27A5043C */ addiu $a1, $sp, 0x43c -/* 0DFB3C 7F0AB00C 27A4043C */ addiu $a0, $sp, 0x43c -/* 0DFB40 7F0AB010 27A503FC */ addiu $a1, $sp, 0x3fc -/* 0DFB44 7F0AB014 0FC16032 */ jal matrix_4x4_multiply -/* 0DFB48 7F0AB018 27A603BC */ addiu $a2, $sp, 0x3bc -/* 0DFB4C 7F0AB01C 0FC2935D */ jal controllerCheckDualControllerTypesAllowed -/* 0DFB50 7F0AB020 00000000 */ nop -/* 0DFB54 7F0AB024 10400018 */ beqz $v0, .L7F0AB088 -/* 0DFB58 7F0AB028 3C01C0A0 */ lui $at, 0xc0a0 -/* 0DFB5C 7F0AB02C 3C018006 */ lui $at, %hi(D_80058558) -/* 0DFB60 7F0AB030 C4208558 */ lwc1 $f0, %lo(D_80058558)($at) -/* 0DFB64 7F0AB034 3C014200 */ li $at, 0x42000000 # 32.000000 -/* 0DFB68 7F0AB038 44816000 */ mtc1 $at, $f12 -/* 0DFB6C 7F0AB03C 44801000 */ mtc1 $zero, $f2 -/* 0DFB70 7F0AB040 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0DFB74 7F0AB044 44818000 */ mtc1 $at, $f16 -/* 0DFB78 7F0AB048 27AE0128 */ addiu $t6, $sp, 0x128 -/* 0DFB7C 7F0AB04C 3C06451C */ lui $a2, (0x451C4000 >> 16) # lui $a2, 0x451c -/* 0DFB80 7F0AB050 44050000 */ mfc1 $a1, $f0 -/* 0DFB84 7F0AB054 44076000 */ mfc1 $a3, $f12 -/* 0DFB88 7F0AB058 AFAE02E8 */ sw $t6, 0x2e8($sp) -/* 0DFB8C 7F0AB05C 34C64000 */ ori $a2, (0x451C4000 & 0xFFFF) # ori $a2, $a2, 0x4000 -/* 0DFB90 7F0AB060 27A4032C */ addiu $a0, $sp, 0x32c -/* 0DFB94 7F0AB064 E7A00010 */ swc1 $f0, 0x10($sp) -/* 0DFB98 7F0AB068 E7AC0018 */ swc1 $f12, 0x18($sp) -/* 0DFB9C 7F0AB06C E7A20014 */ swc1 $f2, 0x14($sp) -/* 0DFBA0 7F0AB070 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 0DFBA4 7F0AB074 E7A20020 */ swc1 $f2, 0x20($sp) -/* 0DFBA8 7F0AB078 0FC165A5 */ jal matrix_4x4_set_lookat_target -/* 0DFBAC 7F0AB07C E7B00024 */ swc1 $f16, 0x24($sp) -/* 0DFBB0 7F0AB080 10000017 */ b .L7F0AB0E0 -/* 0DFBB4 7F0AB084 27A4032C */ addiu $a0, $sp, 0x32c -.L7F0AB088: -/* 0DFBB8 7F0AB088 44810000 */ mtc1 $at, $f0 -/* 0DFBBC 7F0AB08C 3C01C328 */ li $at, 0xC3280000 # -168.000000 -/* 0DFBC0 7F0AB090 44811000 */ mtc1 $at, $f2 -/* 0DFBC4 7F0AB094 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0DFBC8 7F0AB098 44814000 */ mtc1 $at, $f8 -/* 0DFBCC 7F0AB09C 44803000 */ mtc1 $zero, $f6 -/* 0DFBD0 7F0AB0A0 44809000 */ mtc1 $zero, $f18 -/* 0DFBD4 7F0AB0A4 44802000 */ mtc1 $zero, $f4 -/* 0DFBD8 7F0AB0A8 27B80204 */ addiu $t8, $sp, 0x204 -/* 0DFBDC 7F0AB0AC 44050000 */ mfc1 $a1, $f0 -/* 0DFBE0 7F0AB0B0 44071000 */ mfc1 $a3, $f2 -/* 0DFBE4 7F0AB0B4 AFB802E8 */ sw $t8, 0x2e8($sp) -/* 0DFBE8 7F0AB0B8 27A4032C */ addiu $a0, $sp, 0x32c -/* 0DFBEC 7F0AB0BC 3C0644FA */ lui $a2, 0x44fa -/* 0DFBF0 7F0AB0C0 E7A00010 */ swc1 $f0, 0x10($sp) -/* 0DFBF4 7F0AB0C4 E7A20018 */ swc1 $f2, 0x18($sp) -/* 0DFBF8 7F0AB0C8 E7A80024 */ swc1 $f8, 0x24($sp) -/* 0DFBFC 7F0AB0CC E7A60014 */ swc1 $f6, 0x14($sp) -/* 0DFC00 7F0AB0D0 E7B2001C */ swc1 $f18, 0x1c($sp) -/* 0DFC04 7F0AB0D4 0FC165A5 */ jal matrix_4x4_set_lookat_target -/* 0DFC08 7F0AB0D8 E7A40020 */ swc1 $f4, 0x20($sp) -/* 0DFC0C 7F0AB0DC 27A4032C */ addiu $a0, $sp, 0x32c -.L7F0AB0E0: -/* 0DFC10 7F0AB0E0 27A503BC */ addiu $a1, $sp, 0x3bc -/* 0DFC14 7F0AB0E4 0FC16032 */ jal matrix_4x4_multiply -/* 0DFC18 7F0AB0E8 27A6037C */ addiu $a2, $sp, 0x37c -/* 0DFC1C 7F0AB0EC 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0DFC20 7F0AB0F0 44815000 */ mtc1 $at, $f10 -/* 0DFC24 7F0AB0F4 3C018006 */ lui $at, %hi(D_8005855C) -/* 0DFC28 7F0AB0F8 C430855C */ lwc1 $f16, %lo(D_8005855C)($at) -/* 0DFC2C 7F0AB0FC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DFC30 7F0AB100 44813000 */ mtc1 $at, $f6 -/* 0DFC34 7F0AB104 3C073FAA */ lui $a3, (0x3FAAAAAB >> 16) # lui $a3, 0x3faa -/* 0DFC38 7F0AB108 34E7AAAB */ ori $a3, (0x3FAAAAAB & 0xFFFF) # ori $a3, $a3, 0xaaab -/* 0DFC3C 7F0AB10C 8FA4053C */ lw $a0, 0x53c($sp) -/* 0DFC40 7F0AB110 27A5036E */ addiu $a1, $sp, 0x36e -/* 0DFC44 7F0AB114 3C06424A */ lui $a2, 0x424a -/* 0DFC48 7F0AB118 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 0DFC4C 7F0AB11C E7B00014 */ swc1 $f16, 0x14($sp) -/* 0DFC50 7F0AB120 0C003FAC */ jal guPerspective -/* 0DFC54 7F0AB124 E7A60018 */ swc1 $f6, 0x18($sp) -/* 0DFC58 7F0AB128 3C0B0103 */ lui $t3, (0x01030040 >> 16) # lui $t3, 0x103 -/* 0DFC5C 7F0AB12C 356B0040 */ ori $t3, (0x01030040 & 0xFFFF) # ori $t3, $t3, 0x40 -/* 0DFC60 7F0AB130 02001825 */ move $v1, $s0 -/* 0DFC64 7F0AB134 AC6B0000 */ sw $t3, ($v1) -/* 0DFC68 7F0AB138 AFA30048 */ sw $v1, 0x48($sp) -/* 0DFC6C 7F0AB13C 8FA4053C */ lw $a0, 0x53c($sp) -/* 0DFC70 7F0AB140 0C003A2C */ jal osVirtualToPhysical -/* 0DFC74 7F0AB144 26100008 */ addiu $s0, $s0, 8 -/* 0DFC78 7F0AB148 8FA30048 */ lw $v1, 0x48($sp) -/* 0DFC7C 7F0AB14C 02002025 */ move $a0, $s0 -/* 0DFC80 7F0AB150 0FC29BBA */ jal sub_GAME_7F0A6EE8 -/* 0DFC84 7F0AB154 AC620004 */ sw $v0, 4($v1) -/* 0DFC88 7F0AB158 3C038004 */ lui $v1, %hi(g_WatchBackgroundGreen) -/* 0DFC8C 7F0AB15C 8C630B04 */ lw $v1, %lo(g_WatchBackgroundGreen)($v1) -/* 0DFC90 7F0AB160 00408025 */ move $s0, $v0 -/* 0DFC94 7F0AB164 02002025 */ move $a0, $s0 -/* 0DFC98 7F0AB168 286100E0 */ slti $at, $v1, 0xe0 -/* 0DFC9C 7F0AB16C 1020000C */ beqz $at, .L7F0AB1A0 -/* 0DFCA0 7F0AB170 27A5037C */ addiu $a1, $sp, 0x37c -/* 0DFCA4 7F0AB174 8FB902E8 */ lw $t9, 0x2e8($sp) -/* 0DFCA8 7F0AB178 27AA02E3 */ addiu $t2, $sp, 0x2e3 -/* 0DFCAC 7F0AB17C AFAA0014 */ sw $t2, 0x14($sp) -/* 0DFCB0 7F0AB180 00402025 */ move $a0, $v0 -/* 0DFCB4 7F0AB184 27A5037C */ addiu $a1, $sp, 0x37c -/* 0DFCB8 7F0AB188 2466FFFA */ addiu $a2, $v1, -6 -/* 0DFCBC 7F0AB18C 24070001 */ li $a3, 1 -/* 0DFCC0 7F0AB190 0FC18D67 */ jal sub_GAME_7F06359C -/* 0DFCC4 7F0AB194 AFB90010 */ sw $t9, 0x10($sp) -/* 0DFCC8 7F0AB198 10000007 */ b .L7F0AB1B8 -/* 0DFCCC 7F0AB19C 00408025 */ move $s0, $v0 -.L7F0AB1A0: -/* 0DFCD0 7F0AB1A0 27AC02E3 */ addiu $t4, $sp, 0x2e3 -/* 0DFCD4 7F0AB1A4 AFAC0010 */ sw $t4, 0x10($sp) -/* 0DFCD8 7F0AB1A8 24060001 */ li $a2, 1 -/* 0DFCDC 7F0AB1AC 0FC190D9 */ jal sub_GAME_7F064364 -/* 0DFCE0 7F0AB1B0 8FA702E8 */ lw $a3, 0x2e8($sp) -/* 0DFCE4 7F0AB1B4 00408025 */ move $s0, $v0 -.L7F0AB1B8: -/* 0DFCE8 7F0AB1B8 0FC2935D */ jal controllerCheckDualControllerTypesAllowed -/* 0DFCEC 7F0AB1BC 00000000 */ nop -/* 0DFCF0 7F0AB1C0 104000A2 */ beqz $v0, .L7F0AB44C -/* 0DFCF4 7F0AB1C4 24040001 */ li $a0, 1 -/* 0DFCF8 7F0AB1C8 3C058004 */ lui $a1, %hi(D_80040B3C) -/* 0DFCFC 7F0AB1CC 3C068004 */ lui $a2, %hi(D_80040B38) -/* 0DFD00 7F0AB1D0 3C078004 */ lui $a3, %hi(D_80040B34) -/* 0DFD04 7F0AB1D4 24E70B34 */ addiu $a3, %lo(D_80040B34) # addiu $a3, $a3, 0xb34 -/* 0DFD08 7F0AB1D8 24C60B38 */ addiu $a2, %lo(D_80040B38) # addiu $a2, $a2, 0xb38 -/* 0DFD0C 7F0AB1DC 0FC2A5A1 */ jal sub_GAME_7F0A9684 -/* 0DFD10 7F0AB1E0 24A50B3C */ addiu $a1, %lo(D_80040B3C) # addiu $a1, $a1, 0xb3c -/* 0DFD14 7F0AB1E4 0FC15FF4 */ jal matrix_4x4_set_identity -/* 0DFD18 7F0AB1E8 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0DFD1C 7F0AB1EC 3C0D8005 */ lui $t5, %hi(speedgraphframes) -/* 0DFD20 7F0AB1F0 8DAD8498 */ lw $t5, %lo(speedgraphframes)($t5) -/* 0DFD24 7F0AB1F4 3C018004 */ lui $at, %hi(D_80040B38) -/* 0DFD28 7F0AB1F8 C4320B38 */ lwc1 $f18, %lo(D_80040B38)($at) -/* 0DFD2C 7F0AB1FC 448D2000 */ mtc1 $t5, $f4 -/* 0DFD30 7F0AB200 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0DFD34 7F0AB204 44818000 */ mtc1 $at, $f16 -/* 0DFD38 7F0AB208 46802220 */ cvt.s.w $f8, $f4 -/* 0DFD3C 7F0AB20C 3C028004 */ lui $v0, %hi(D_80040B34) -/* 0DFD40 7F0AB210 24420B34 */ addiu $v0, %lo(D_80040B34) # addiu $v0, $v0, 0xb34 -/* 0DFD44 7F0AB214 C4440000 */ lwc1 $f4, ($v0) -/* 0DFD48 7F0AB218 46089282 */ mul.s $f10, $f18, $f8 -/* 0DFD4C 7F0AB21C 00000000 */ nop -/* 0DFD50 7F0AB220 46105182 */ mul.s $f6, $f10, $f16 -/* 0DFD54 7F0AB224 46062480 */ add.s $f18, $f4, $f6 -/* 0DFD58 7F0AB228 E4520000 */ swc1 $f18, ($v0) -/* 0DFD5C 7F0AB22C 0FC29A8B */ jal watchWrapAroundPI -/* 0DFD60 7F0AB230 C44C0000 */ lwc1 $f12, ($v0) -/* 0DFD64 7F0AB234 3C018004 */ lui $at, %hi(D_80040B34) -/* 0DFD68 7F0AB238 E4200B34 */ swc1 $f0, %lo(D_80040B34)($at) -/* 0DFD6C 7F0AB23C C42C0B34 */ lwc1 $f12, %lo(D_80040B34)($at) -/* 0DFD70 7F0AB240 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 0DFD74 7F0AB244 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0DFD78 7F0AB248 3C088004 */ lui $t0, %hi(watch_item_is_actively_selected) -/* 0DFD7C 7F0AB24C 8D0809A8 */ lw $t0, %lo(watch_item_is_actively_selected)($t0) -/* 0DFD80 7F0AB250 11000016 */ beqz $t0, .L7F0AB2AC -/* 0DFD84 7F0AB254 3C0F8004 */ lui $t7, %hi(controller_options_index) -/* 0DFD88 7F0AB258 8DEF0998 */ lw $t7, %lo(controller_options_index)($t7) -/* 0DFD8C 7F0AB25C 24010001 */ li $at, 1 -/* 0DFD90 7F0AB260 15E10012 */ bne $t7, $at, .L7F0AB2AC -/* 0DFD94 7F0AB264 00000000 */ nop -/* 0DFD98 7F0AB268 0C00307F */ jal joyGetStickY -/* 0DFD9C 7F0AB26C 24040001 */ li $a0, 1 -/* 0DFDA0 7F0AB270 44824000 */ mtc1 $v0, $f8 -/* 0DFDA4 7F0AB274 3C018004 */ lui $at, %hi(D_80040B30) -/* 0DFDA8 7F0AB278 C42C0B30 */ lwc1 $f12, %lo(D_80040B30)($at) -/* 0DFDAC 7F0AB27C 468042A0 */ cvt.s.w $f10, $f8 -/* 0DFDB0 7F0AB280 3C018006 */ lui $at, %hi(D_80058560) -/* 0DFDB4 7F0AB284 C4308560 */ lwc1 $f16, %lo(D_80058560)($at) -/* 0DFDB8 7F0AB288 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DFDBC 7F0AB28C 44813000 */ mtc1 $at, $f6 -/* 0DFDC0 7F0AB290 3C064080 */ lui $a2, 0x4080 -/* 0DFDC4 7F0AB294 46105102 */ mul.s $f4, $f10, $f16 -/* 0DFDC8 7F0AB298 0FC2A571 */ jal sub_GAME_7F0A95C4 -/* 0DFDCC 7F0AB29C 46062383 */ div.s $f14, $f4, $f6 -/* 0DFDD0 7F0AB2A0 3C018004 */ lui $at, %hi(D_80040B30) -/* 0DFDD4 7F0AB2A4 10000008 */ b .L7F0AB2C8 -/* 0DFDD8 7F0AB2A8 E4200B30 */ swc1 $f0, %lo(D_80040B30)($at) -.L7F0AB2AC: -/* 0DFDDC 7F0AB2AC 3C018004 */ lui $at, %hi(D_80040B30) -/* 0DFDE0 7F0AB2B0 44807000 */ mtc1 $zero, $f14 -/* 0DFDE4 7F0AB2B4 C42C0B30 */ lwc1 $f12, %lo(D_80040B30)($at) -/* 0DFDE8 7F0AB2B8 0FC2A571 */ jal sub_GAME_7F0A95C4 -/* 0DFDEC 7F0AB2BC 3C064080 */ lui $a2, 0x4080 -/* 0DFDF0 7F0AB2C0 3C018004 */ lui $at, %hi(D_80040B30) -/* 0DFDF4 7F0AB2C4 E4200B30 */ swc1 $f0, %lo(D_80040B30)($at) -.L7F0AB2C8: -/* 0DFDF8 7F0AB2C8 3C018004 */ lui $at, %hi(D_80040B30) -/* 0DFDFC 7F0AB2CC C4320B30 */ lwc1 $f18, %lo(D_80040B30)($at) -/* 0DFE00 7F0AB2D0 3C018006 */ lui $at, %hi(D_80058564) -/* 0DFE04 7F0AB2D4 C42A8564 */ lwc1 $f10, %lo(D_80058564)($at) -/* 0DFE08 7F0AB2D8 46009207 */ neg.s $f8, $f18 -/* 0DFE0C 7F0AB2DC 27A5047C */ addiu $a1, $sp, 0x47c -/* 0DFE10 7F0AB2E0 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 0DFE14 7F0AB2E4 460A4301 */ sub.s $f12, $f8, $f10 -/* 0DFE18 7F0AB2E8 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0DFE1C 7F0AB2EC 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0DFE20 7F0AB2F0 0FC16032 */ jal matrix_4x4_multiply -/* 0DFE24 7F0AB2F4 27A6043C */ addiu $a2, $sp, 0x43c -/* 0DFE28 7F0AB2F8 27A4043C */ addiu $a0, $sp, 0x43c -/* 0DFE2C 7F0AB2FC 27A5047C */ addiu $a1, $sp, 0x47c -/* 0DFE30 7F0AB300 0FC16032 */ jal matrix_4x4_multiply -/* 0DFE34 7F0AB304 27A603FC */ addiu $a2, $sp, 0x3fc -/* 0DFE38 7F0AB308 27A40370 */ addiu $a0, $sp, 0x370 -/* 0DFE3C 7F0AB30C 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 0DFE40 7F0AB310 27A5043C */ addiu $a1, $sp, 0x43c -/* 0DFE44 7F0AB314 27A4043C */ addiu $a0, $sp, 0x43c -/* 0DFE48 7F0AB318 27A503FC */ addiu $a1, $sp, 0x3fc -/* 0DFE4C 7F0AB31C 0FC16032 */ jal matrix_4x4_multiply -/* 0DFE50 7F0AB320 27A603BC */ addiu $a2, $sp, 0x3bc -/* 0DFE54 7F0AB324 3C018006 */ lui $at, %hi(D_80058568) -/* 0DFE58 7F0AB328 C4208568 */ lwc1 $f0, %lo(D_80058568)($at) -/* 0DFE5C 7F0AB32C 3C014200 */ li $at, 0x42000000 # 32.000000 -/* 0DFE60 7F0AB330 44801000 */ mtc1 $zero, $f2 -/* 0DFE64 7F0AB334 44818000 */ mtc1 $at, $f16 -/* 0DFE68 7F0AB338 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0DFE6C 7F0AB33C 44812000 */ mtc1 $at, $f4 -/* 0DFE70 7F0AB340 3C06451C */ lui $a2, (0x451C4000 >> 16) # lui $a2, 0x451c -/* 0DFE74 7F0AB344 44050000 */ mfc1 $a1, $f0 -/* 0DFE78 7F0AB348 34C64000 */ ori $a2, (0x451C4000 & 0xFFFF) # ori $a2, $a2, 0x4000 -/* 0DFE7C 7F0AB34C 27A402EC */ addiu $a0, $sp, 0x2ec -/* 0DFE80 7F0AB350 3C074200 */ lui $a3, 0x4200 -/* 0DFE84 7F0AB354 E7A00010 */ swc1 $f0, 0x10($sp) -/* 0DFE88 7F0AB358 E7A20014 */ swc1 $f2, 0x14($sp) -/* 0DFE8C 7F0AB35C E7A2001C */ swc1 $f2, 0x1c($sp) -/* 0DFE90 7F0AB360 E7A20020 */ swc1 $f2, 0x20($sp) -/* 0DFE94 7F0AB364 E7B00018 */ swc1 $f16, 0x18($sp) -/* 0DFE98 7F0AB368 0FC165A5 */ jal matrix_4x4_set_lookat_target -/* 0DFE9C 7F0AB36C E7A40024 */ swc1 $f4, 0x24($sp) -/* 0DFEA0 7F0AB370 27A402EC */ addiu $a0, $sp, 0x2ec -/* 0DFEA4 7F0AB374 27A503BC */ addiu $a1, $sp, 0x3bc -/* 0DFEA8 7F0AB378 0FC16032 */ jal matrix_4x4_multiply -/* 0DFEAC 7F0AB37C 27A6037C */ addiu $a2, $sp, 0x37c -/* 0DFEB0 7F0AB380 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0DFEB4 7F0AB384 44813000 */ mtc1 $at, $f6 -/* 0DFEB8 7F0AB388 3C018006 */ lui $at, %hi(D_8005856C) -/* 0DFEBC 7F0AB38C C432856C */ lwc1 $f18, %lo(D_8005856C)($at) -/* 0DFEC0 7F0AB390 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DFEC4 7F0AB394 44814000 */ mtc1 $at, $f8 -/* 0DFEC8 7F0AB398 3C073FAA */ lui $a3, (0x3FAAAAAB >> 16) # lui $a3, 0x3faa -/* 0DFECC 7F0AB39C 34E7AAAB */ ori $a3, (0x3FAAAAAB & 0xFFFF) # ori $a3, $a3, 0xaaab -/* 0DFED0 7F0AB3A0 8FA4053C */ lw $a0, 0x53c($sp) -/* 0DFED4 7F0AB3A4 27A5036E */ addiu $a1, $sp, 0x36e -/* 0DFED8 7F0AB3A8 3C06424A */ lui $a2, 0x424a -/* 0DFEDC 7F0AB3AC E7A60010 */ swc1 $f6, 0x10($sp) -/* 0DFEE0 7F0AB3B0 E7B20014 */ swc1 $f18, 0x14($sp) -/* 0DFEE4 7F0AB3B4 0C003FAC */ jal guPerspective -/* 0DFEE8 7F0AB3B8 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0DFEEC 7F0AB3BC 3C090103 */ lui $t1, (0x01030040 >> 16) # lui $t1, 0x103 -/* 0DFEF0 7F0AB3C0 35290040 */ ori $t1, (0x01030040 & 0xFFFF) # ori $t1, $t1, 0x40 -/* 0DFEF4 7F0AB3C4 02001825 */ move $v1, $s0 -/* 0DFEF8 7F0AB3C8 AC690000 */ sw $t1, ($v1) -/* 0DFEFC 7F0AB3CC AFA30044 */ sw $v1, 0x44($sp) -/* 0DFF00 7F0AB3D0 8FA4053C */ lw $a0, 0x53c($sp) -/* 0DFF04 7F0AB3D4 0C003A2C */ jal osVirtualToPhysical -/* 0DFF08 7F0AB3D8 26100008 */ addiu $s0, $s0, 8 -/* 0DFF0C 7F0AB3DC 8FA30044 */ lw $v1, 0x44($sp) -/* 0DFF10 7F0AB3E0 02002025 */ move $a0, $s0 -/* 0DFF14 7F0AB3E4 0FC29BBA */ jal sub_GAME_7F0A6EE8 -/* 0DFF18 7F0AB3E8 AC620004 */ sw $v0, 4($v1) -/* 0DFF1C 7F0AB3EC 3C038004 */ lui $v1, %hi(g_WatchBackgroundGreen) -/* 0DFF20 7F0AB3F0 8C630B04 */ lw $v1, %lo(g_WatchBackgroundGreen)($v1) -/* 0DFF24 7F0AB3F4 00408025 */ move $s0, $v0 -/* 0DFF28 7F0AB3F8 02002025 */ move $a0, $s0 -/* 0DFF2C 7F0AB3FC 286100E0 */ slti $at, $v1, 0xe0 -/* 0DFF30 7F0AB400 1020000C */ beqz $at, .L7F0AB434 -/* 0DFF34 7F0AB404 27A5037C */ addiu $a1, $sp, 0x37c -/* 0DFF38 7F0AB408 27AE004C */ addiu $t6, $sp, 0x4c -/* 0DFF3C 7F0AB40C 27B802E2 */ addiu $t8, $sp, 0x2e2 -/* 0DFF40 7F0AB410 AFB80014 */ sw $t8, 0x14($sp) -/* 0DFF44 7F0AB414 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DFF48 7F0AB418 00402025 */ move $a0, $v0 -/* 0DFF4C 7F0AB41C 27A5037C */ addiu $a1, $sp, 0x37c -/* 0DFF50 7F0AB420 2466FFFA */ addiu $a2, $v1, -6 -/* 0DFF54 7F0AB424 0FC18D67 */ jal sub_GAME_7F06359C -/* 0DFF58 7F0AB428 24070001 */ li $a3, 1 -/* 0DFF5C 7F0AB42C 10000007 */ b .L7F0AB44C -/* 0DFF60 7F0AB430 00408025 */ move $s0, $v0 -.L7F0AB434: -/* 0DFF64 7F0AB434 27AB02E2 */ addiu $t3, $sp, 0x2e2 -/* 0DFF68 7F0AB438 AFAB0010 */ sw $t3, 0x10($sp) -/* 0DFF6C 7F0AB43C 24060001 */ li $a2, 1 -/* 0DFF70 7F0AB440 0FC190D9 */ jal sub_GAME_7F064364 -/* 0DFF74 7F0AB444 27A7004C */ addiu $a3, $sp, 0x4c -/* 0DFF78 7F0AB448 00408025 */ move $s0, $v0 -.L7F0AB44C: -/* 0DFF7C 7F0AB44C 0FC2935D */ jal controllerCheckDualControllerTypesAllowed -/* 0DFF80 7F0AB450 00000000 */ nop -/* 0DFF84 7F0AB454 10400005 */ beqz $v0, .L7F0AB46C -/* 0DFF88 7F0AB458 00000000 */ nop -/* 0DFF8C 7F0AB45C 0FC2A9F2 */ jal display_text_buttons_dual_control -/* 0DFF90 7F0AB460 02002025 */ move $a0, $s0 -/* 0DFF94 7F0AB464 10000004 */ b .L7F0AB478 -/* 0DFF98 7F0AB468 00408025 */ move $s0, $v0 -.L7F0AB46C: -/* 0DFF9C 7F0AB46C 0FC2A6AE */ jal sub_GAME_7F0A9AB8 -/* 0DFFA0 7F0AB470 02002025 */ move $a0, $s0 -/* 0DFFA4 7F0AB474 00408025 */ move $s0, $v0 -.L7F0AB478: -/* 0DFFA8 7F0AB478 8FBF0034 */ lw $ra, 0x34($sp) -/* 0DFFAC 7F0AB47C 02001025 */ move $v0, $s0 -/* 0DFFB0 7F0AB480 8FB00030 */ lw $s0, 0x30($sp) -/* 0DFFB4 7F0AB484 03E00008 */ jr $ra -/* 0DFFB8 7F0AB488 27BD0540 */ addiu $sp, $sp, 0x540 -) -#endif - -#ifdef VERSION_JP -GLOBAL_ASM( -.late_rodata -glabel D_80058550 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80058554 -.word 0x3f490fdb /*0.78539819*/ -glabel D_80058558 -.word 0x43f78000 /*495.0*/ -glabel D_8005855C -.word 0x453b8000 /*3000.0*/ -glabel D_80058560 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80058564 -.word 0x3f490fdb /*0.78539819*/ -glabel D_80058568 -.word 0xc3fc8000 /*-505.0*/ -glabel D_8005856C -.word 0x453b8000 /*3000.0*/ -.text -glabel sub_GAME_7F0AADC0 -/* 0E04F0 7F0AB980 27BDFAC0 */ addiu $sp, $sp, -0x540 -/* 0E04F4 7F0AB984 AFBF0034 */ sw $ra, 0x34($sp) -/* 0E04F8 7F0AB988 AFB00030 */ sw $s0, 0x30($sp) -/* 0E04FC 7F0AB98C 0FC2F8A4 */ jal dynAllocateMatrix -/* 0E0500 7F0AB990 00808025 */ move $s0, $a0 -/* 0E0504 7F0AB994 3C0F8004 */ lui $t7, %hi(D_80040B5C) # $t7, 0x8004 -/* 0E0508 7F0AB998 AFA2053C */ sw $v0, 0x53c($sp) -/* 0E050C 7F0AB99C 25EF0B8C */ addiu $t7, %lo(D_80040B5C) # addiu $t7, $t7, 0xb8c -/* 0E0510 7F0AB9A0 8DE10000 */ lw $at, ($t7) -/* 0E0514 7F0AB9A4 27AE0370 */ addiu $t6, $sp, 0x370 -/* 0E0518 7F0AB9A8 8DE80004 */ lw $t0, 4($t7) -/* 0E051C 7F0AB9AC ADC10000 */ sw $at, ($t6) -/* 0E0520 7F0AB9B0 8DE10008 */ lw $at, 8($t7) -/* 0E0524 7F0AB9B4 3C0B8004 */ lui $t3, %hi(D_80040B68) # $t3, 0x8004 -/* 0E0528 7F0AB9B8 ADC80004 */ sw $t0, 4($t6) -/* 0E052C 7F0AB9BC ADC10008 */ sw $at, 8($t6) -/* 0E0530 7F0AB9C0 24090001 */ li $t1, 1 -/* 0E0534 7F0AB9C4 256B0B98 */ addiu $t3, %lo(D_80040B68) # addiu $t3, $t3, 0xb98 -/* 0E0538 7F0AB9C8 A3A002E3 */ sb $zero, 0x2e3($sp) -/* 0E053C 7F0AB9CC A3A902E2 */ sb $t1, 0x2e2($sp) -/* 0E0540 7F0AB9D0 257900D8 */ addiu $t9, $t3, 0xd8 -/* 0E0544 7F0AB9D4 27AA0204 */ addiu $t2, $sp, 0x204 -.Ljp7F0AB9D8: -/* 0E0548 7F0AB9D8 8D610000 */ lw $at, ($t3) -/* 0E054C 7F0AB9DC 256B000C */ addiu $t3, $t3, 0xc -/* 0E0550 7F0AB9E0 254A000C */ addiu $t2, $t2, 0xc -/* 0E0554 7F0AB9E4 AD41FFF4 */ sw $at, -0xc($t2) -/* 0E0558 7F0AB9E8 8D61FFF8 */ lw $at, -8($t3) -/* 0E055C 7F0AB9EC AD41FFF8 */ sw $at, -8($t2) -/* 0E0560 7F0AB9F0 8D61FFFC */ lw $at, -4($t3) -/* 0E0564 7F0AB9F4 1579FFF8 */ bne $t3, $t9, .Ljp7F0AB9D8 -/* 0E0568 7F0AB9F8 AD41FFFC */ sw $at, -4($t2) -/* 0E056C 7F0AB9FC 8D610000 */ lw $at, ($t3) -/* 0E0570 7F0ABA00 3C0E8004 */ lui $t6, %hi(D_80040C44) # $t6, 0x8004 -/* 0E0574 7F0ABA04 25CE0C74 */ addiu $t6, %lo(D_80040C44) # addiu $t6, $t6, 0xc74 -/* 0E0578 7F0ABA08 25C900D8 */ addiu $t1, $t6, 0xd8 -/* 0E057C 7F0ABA0C 27B80128 */ addiu $t8, $sp, 0x128 -/* 0E0580 7F0ABA10 AD410000 */ sw $at, ($t2) -.Ljp7F0ABA14: -/* 0E0584 7F0ABA14 8DC10000 */ lw $at, ($t6) -/* 0E0588 7F0ABA18 25CE000C */ addiu $t6, $t6, 0xc -/* 0E058C 7F0ABA1C 2718000C */ addiu $t8, $t8, 0xc -/* 0E0590 7F0ABA20 AF01FFF4 */ sw $at, -0xc($t8) -/* 0E0594 7F0ABA24 8DC1FFF8 */ lw $at, -8($t6) -/* 0E0598 7F0ABA28 AF01FFF8 */ sw $at, -8($t8) -/* 0E059C 7F0ABA2C 8DC1FFFC */ lw $at, -4($t6) -/* 0E05A0 7F0ABA30 15C9FFF8 */ bne $t6, $t1, .Ljp7F0ABA14 -/* 0E05A4 7F0ABA34 AF01FFFC */ sw $at, -4($t8) -/* 0E05A8 7F0ABA38 8DC10000 */ lw $at, ($t6) -/* 0E05AC 7F0ABA3C 3C0C8004 */ lui $t4, %hi(D_80040D20) # $t4, 0x8004 -/* 0E05B0 7F0ABA40 258C0D50 */ addiu $t4, %lo(D_80040D20) # addiu $t4, $t4, 0xd50 -/* 0E05B4 7F0ABA44 258A00D8 */ addiu $t2, $t4, 0xd8 -/* 0E05B8 7F0ABA48 27AD004C */ addiu $t5, $sp, 0x4c -/* 0E05BC 7F0ABA4C AF010000 */ sw $at, ($t8) -.Ljp7F0ABA50: -/* 0E05C0 7F0ABA50 8D810000 */ lw $at, ($t4) -/* 0E05C4 7F0ABA54 258C000C */ addiu $t4, $t4, 0xc -/* 0E05C8 7F0ABA58 25AD000C */ addiu $t5, $t5, 0xc -/* 0E05CC 7F0ABA5C ADA1FFF4 */ sw $at, -0xc($t5) -/* 0E05D0 7F0ABA60 8D81FFF8 */ lw $at, -8($t4) -/* 0E05D4 7F0ABA64 ADA1FFF8 */ sw $at, -8($t5) -/* 0E05D8 7F0ABA68 8D81FFFC */ lw $at, -4($t4) -/* 0E05DC 7F0ABA6C 158AFFF8 */ bne $t4, $t2, .Ljp7F0ABA50 -/* 0E05E0 7F0ABA70 ADA1FFFC */ sw $at, -4($t5) -/* 0E05E4 7F0ABA74 8D810000 */ lw $at, ($t4) -/* 0E05E8 7F0ABA78 3C058004 */ lui $a1, %hi(D_80040B2C) # $a1, 0x8004 -/* 0E05EC 7F0ABA7C 3C068004 */ lui $a2, %hi(D_80040B28) # $a2, 0x8004 -/* 0E05F0 7F0ABA80 3C078004 */ lui $a3, %hi(D_80040B24) # $a3, 0x8004 -/* 0E05F4 7F0ABA84 24E70B54 */ addiu $a3, %lo(D_80040B24) # addiu $a3, $a3, 0xb54 -/* 0E05F8 7F0ABA88 24C60B58 */ addiu $a2, %lo(D_80040B28) # addiu $a2, $a2, 0xb58 -/* 0E05FC 7F0ABA8C 24A50B5C */ addiu $a1, %lo(D_80040B2C) # addiu $a1, $a1, 0xb5c -/* 0E0600 7F0ABA90 00002025 */ move $a0, $zero -/* 0E0604 7F0ABA94 0FC2A891 */ jal sub_GAME_7F0A9684 -/* 0E0608 7F0ABA98 ADA10000 */ sw $at, ($t5) -/* 0E060C 7F0ABA9C 0FC1613C */ jal matrix_4x4_set_identity -/* 0E0610 7F0ABAA0 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0E0614 7F0ABAA4 3C018004 */ lui $at, %hi(D_80040B28) # $at, 0x8004 -/* 0E0618 7F0ABAA8 C4240B58 */ lwc1 $f4, %lo(D_80040B28)($at) -/* 0E061C 7F0ABAAC 3C018005 */ lui $at, %hi(jpD_800484D0) # $at, 0x8005 -/* 0E0620 7F0ABAB0 C42684D0 */ lwc1 $f6, %lo(jpD_800484D0)($at) -/* 0E0624 7F0ABAB4 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0E0628 7F0ABAB8 44815000 */ mtc1 $at, $f10 -/* 0E062C 7F0ABABC 46062202 */ mul.s $f8, $f4, $f6 -/* 0E0630 7F0ABAC0 3C028004 */ lui $v0, %hi(D_80040B24) # $v0, 0x8004 -/* 0E0634 7F0ABAC4 24420B54 */ addiu $v0, %lo(D_80040B24) # addiu $v0, $v0, 0xb54 -/* 0E0638 7F0ABAC8 C4520000 */ lwc1 $f18, ($v0) -/* 0E063C 7F0ABACC 460A4402 */ mul.s $f16, $f8, $f10 -/* 0E0640 7F0ABAD0 46109100 */ add.s $f4, $f18, $f16 -/* 0E0644 7F0ABAD4 E4440000 */ swc1 $f4, ($v0) -/* 0E0648 7F0ABAD8 0FC29D73 */ jal watchWrapAroundPI -/* 0E064C 7F0ABADC C44C0000 */ lwc1 $f12, ($v0) -/* 0E0650 7F0ABAE0 3C018004 */ lui $at, %hi(D_80040B24) # $at, 0x8004 -/* 0E0654 7F0ABAE4 E4200B54 */ swc1 $f0, %lo(D_80040B24)($at) -/* 0E0658 7F0ABAE8 C42C0B54 */ lwc1 $f12, %lo(D_80040B24)($at) -/* 0E065C 7F0ABAEC 0FC162EA */ jal matrix_4x4_set_rotation_around_z -/* 0E0660 7F0ABAF0 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0E0664 7F0ABAF4 3C088004 */ lui $t0, %hi(watch_item_is_actively_selected) # $t0, 0x8004 -/* 0E0668 7F0ABAF8 8D0809D8 */ lw $t0, %lo(watch_item_is_actively_selected)($t0) -/* 0E066C 7F0ABAFC 11000016 */ beqz $t0, .Ljp7F0ABB58 -/* 0E0670 7F0ABB00 3C0F8004 */ lui $t7, %hi(controller_options_index) # $t7, 0x8004 -/* 0E0674 7F0ABB04 8DEF09C8 */ lw $t7, %lo(controller_options_index)($t7) -/* 0E0678 7F0ABB08 24010001 */ li $at, 1 -/* 0E067C 7F0ABB0C 15E10012 */ bne $t7, $at, .Ljp7F0ABB58 -/* 0E0680 7F0ABB10 00000000 */ nop -/* 0E0684 7F0ABB14 0C003098 */ jal joyGetStickY -/* 0E0688 7F0ABB18 00002025 */ move $a0, $zero -/* 0E068C 7F0ABB1C 44823000 */ mtc1 $v0, $f6 -/* 0E0690 7F0ABB20 3C018004 */ lui $at, %hi(D_80040B20) # $at, 0x8004 -/* 0E0694 7F0ABB24 C42C0B50 */ lwc1 $f12, %lo(D_80040B20)($at) -/* 0E0698 7F0ABB28 46803220 */ cvt.s.w $f8, $f6 -/* 0E069C 7F0ABB2C 3C018006 */ lui $at, %hi(D_80058550) # $at, 0x8006 -/* 0E06A0 7F0ABB30 C42A8590 */ lwc1 $f10, %lo(D_80058550)($at) -/* 0E06A4 7F0ABB34 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0E06A8 7F0ABB38 44818000 */ mtc1 $at, $f16 -/* 0E06AC 7F0ABB3C 3C064080 */ lui $a2, 0x4080 -/* 0E06B0 7F0ABB40 460A4482 */ mul.s $f18, $f8, $f10 -/* 0E06B4 7F0ABB44 0FC2A861 */ jal sub_GAME_7F0A95C4 -/* 0E06B8 7F0ABB48 46109383 */ div.s $f14, $f18, $f16 -/* 0E06BC 7F0ABB4C 3C018004 */ lui $at, %hi(D_80040B20) # $at, 0x8004 -/* 0E06C0 7F0ABB50 10000008 */ b .Ljp7F0ABB74 -/* 0E06C4 7F0ABB54 E4200B50 */ swc1 $f0, %lo(D_80040B20)($at) -.Ljp7F0ABB58: -/* 0E06C8 7F0ABB58 3C018004 */ lui $at, %hi(D_80040B20) # $at, 0x8004 -/* 0E06CC 7F0ABB5C 44807000 */ mtc1 $zero, $f14 -/* 0E06D0 7F0ABB60 C42C0B50 */ lwc1 $f12, %lo(D_80040B20)($at) -/* 0E06D4 7F0ABB64 0FC2A861 */ jal sub_GAME_7F0A95C4 -/* 0E06D8 7F0ABB68 3C064080 */ lui $a2, 0x4080 -/* 0E06DC 7F0ABB6C 3C018004 */ lui $at, %hi(D_80040B20) # $at, 0x8004 -/* 0E06E0 7F0ABB70 E4200B50 */ swc1 $f0, %lo(D_80040B20)($at) -.Ljp7F0ABB74: -/* 0E06E4 7F0ABB74 3C018004 */ lui $at, %hi(D_80040B20) # $at, 0x8004 -/* 0E06E8 7F0ABB78 C4240B50 */ lwc1 $f4, %lo(D_80040B20)($at) -/* 0E06EC 7F0ABB7C 3C018006 */ lui $at, %hi(D_80058554) # $at, 0x8006 -/* 0E06F0 7F0ABB80 C4288594 */ lwc1 $f8, %lo(D_80058554)($at) -/* 0E06F4 7F0ABB84 46002187 */ neg.s $f6, $f4 -/* 0E06F8 7F0ABB88 27A5047C */ addiu $a1, $sp, 0x47c -/* 0E06FC 7F0ABB8C 0FC162A4 */ jal matrix_4x4_set_rotation_around_x -/* 0E0700 7F0ABB90 46083301 */ sub.s $f12, $f6, $f8 -/* 0E0704 7F0ABB94 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0E0708 7F0ABB98 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0E070C 7F0ABB9C 0FC1617A */ jal matrix_4x4_multiply -/* 0E0710 7F0ABBA0 27A6043C */ addiu $a2, $sp, 0x43c -/* 0E0714 7F0ABBA4 27A4043C */ addiu $a0, $sp, 0x43c -/* 0E0718 7F0ABBA8 27A5047C */ addiu $a1, $sp, 0x47c -/* 0E071C 7F0ABBAC 0FC1617A */ jal matrix_4x4_multiply -/* 0E0720 7F0ABBB0 27A603FC */ addiu $a2, $sp, 0x3fc -/* 0E0724 7F0ABBB4 27A40370 */ addiu $a0, $sp, 0x370 -/* 0E0728 7F0ABBB8 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 0E072C 7F0ABBBC 27A5043C */ addiu $a1, $sp, 0x43c -/* 0E0730 7F0ABBC0 27A4043C */ addiu $a0, $sp, 0x43c -/* 0E0734 7F0ABBC4 27A503FC */ addiu $a1, $sp, 0x3fc -/* 0E0738 7F0ABBC8 0FC1617A */ jal matrix_4x4_multiply -/* 0E073C 7F0ABBCC 27A603BC */ addiu $a2, $sp, 0x3bc -/* 0E0740 7F0ABBD0 0FC29645 */ jal controllerCheckDualControllerTypesAllowed -/* 0E0744 7F0ABBD4 00000000 */ nop -/* 0E0748 7F0ABBD8 10400018 */ beqz $v0, .Ljp7F0ABC3C -/* 0E074C 7F0ABBDC 3C01C0A0 */ lui $at, 0xc0a0 -/* 0E0750 7F0ABBE0 3C018006 */ lui $at, %hi(D_80058558) -/* 0E0754 7F0ABBE4 C4208598 */ lwc1 $f0, %lo(D_80058558)($at) -/* 0E0758 7F0ABBE8 3C014200 */ li $at, 0x42000000 # 32.000000 -/* 0E075C 7F0ABBEC 44816000 */ mtc1 $at, $f12 -/* 0E0760 7F0ABBF0 44801000 */ mtc1 $zero, $f2 -/* 0E0764 7F0ABBF4 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0E0768 7F0ABBF8 44815000 */ mtc1 $at, $f10 -/* 0E076C 7F0ABBFC 27A90128 */ addiu $t1, $sp, 0x128 -/* 0E0770 7F0ABC00 3C06451C */ lui $a2, (0x451C4000 >> 16) # lui $a2, 0x451c -/* 0E0774 7F0ABC04 44050000 */ mfc1 $a1, $f0 -/* 0E0778 7F0ABC08 44076000 */ mfc1 $a3, $f12 -/* 0E077C 7F0ABC0C AFA902E8 */ sw $t1, 0x2e8($sp) -/* 0E0780 7F0ABC10 34C64000 */ ori $a2, (0x451C4000 & 0xFFFF) # ori $a2, $a2, 0x4000 -/* 0E0784 7F0ABC14 27A4032C */ addiu $a0, $sp, 0x32c -/* 0E0788 7F0ABC18 E7A00010 */ swc1 $f0, 0x10($sp) -/* 0E078C 7F0ABC1C E7AC0018 */ swc1 $f12, 0x18($sp) -/* 0E0790 7F0ABC20 E7A20014 */ swc1 $f2, 0x14($sp) -/* 0E0794 7F0ABC24 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 0E0798 7F0ABC28 E7A20020 */ swc1 $f2, 0x20($sp) -/* 0E079C 7F0ABC2C 0FC166ED */ jal matrix_4x4_set_lookat_target -/* 0E07A0 7F0ABC30 E7AA0024 */ swc1 $f10, 0x24($sp) -/* 0E07A4 7F0ABC34 10000017 */ b .Ljp7F0ABC94 -/* 0E07A8 7F0ABC38 27A4032C */ addiu $a0, $sp, 0x32c -.Ljp7F0ABC3C: -/* 0E07AC 7F0ABC3C 44810000 */ mtc1 $at, $f0 -/* 0E07B0 7F0ABC40 3C01C328 */ li $at, 0xC3280000 # -168.000000 -/* 0E07B4 7F0ABC44 44811000 */ mtc1 $at, $f2 -/* 0E07B8 7F0ABC48 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0E07BC 7F0ABC4C 44813000 */ mtc1 $at, $f6 -/* 0E07C0 7F0ABC50 44809000 */ mtc1 $zero, $f18 -/* 0E07C4 7F0ABC54 44808000 */ mtc1 $zero, $f16 -/* 0E07C8 7F0ABC58 44802000 */ mtc1 $zero, $f4 -/* 0E07CC 7F0ABC5C 27AE0204 */ addiu $t6, $sp, 0x204 -/* 0E07D0 7F0ABC60 44050000 */ mfc1 $a1, $f0 -/* 0E07D4 7F0ABC64 44071000 */ mfc1 $a3, $f2 -/* 0E07D8 7F0ABC68 AFAE02E8 */ sw $t6, 0x2e8($sp) -/* 0E07DC 7F0ABC6C 27A4032C */ addiu $a0, $sp, 0x32c -/* 0E07E0 7F0ABC70 3C0644FA */ lui $a2, 0x44fa -/* 0E07E4 7F0ABC74 E7A00010 */ swc1 $f0, 0x10($sp) -/* 0E07E8 7F0ABC78 E7A20018 */ swc1 $f2, 0x18($sp) -/* 0E07EC 7F0ABC7C E7A60024 */ swc1 $f6, 0x24($sp) -/* 0E07F0 7F0ABC80 E7B20014 */ swc1 $f18, 0x14($sp) -/* 0E07F4 7F0ABC84 E7B0001C */ swc1 $f16, 0x1c($sp) -/* 0E07F8 7F0ABC88 0FC166ED */ jal matrix_4x4_set_lookat_target -/* 0E07FC 7F0ABC8C E7A40020 */ swc1 $f4, 0x20($sp) -/* 0E0800 7F0ABC90 27A4032C */ addiu $a0, $sp, 0x32c -.Ljp7F0ABC94: -/* 0E0804 7F0ABC94 27A503BC */ addiu $a1, $sp, 0x3bc -/* 0E0808 7F0ABC98 0FC1617A */ jal matrix_4x4_multiply -/* 0E080C 7F0ABC9C 27A6037C */ addiu $a2, $sp, 0x37c -/* 0E0810 7F0ABCA0 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0E0814 7F0ABCA4 44814000 */ mtc1 $at, $f8 -/* 0E0818 7F0ABCA8 3C018006 */ lui $at, %hi(D_8005855C) # $at, 0x8006 -/* 0E081C 7F0ABCAC C42A859C */ lwc1 $f10, %lo(D_8005855C)($at) -/* 0E0820 7F0ABCB0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0E0824 7F0ABCB4 44819000 */ mtc1 $at, $f18 -/* 0E0828 7F0ABCB8 3C073FAA */ lui $a3, (0x3FAAAAAB >> 16) # lui $a3, 0x3faa -/* 0E082C 7F0ABCBC 34E7AAAB */ ori $a3, (0x3FAAAAAB & 0xFFFF) # ori $a3, $a3, 0xaaab -/* 0E0830 7F0ABCC0 8FA4053C */ lw $a0, 0x53c($sp) -/* 0E0834 7F0ABCC4 27A5036E */ addiu $a1, $sp, 0x36e -/* 0E0838 7F0ABCC8 3C06424A */ lui $a2, 0x424a -/* 0E083C 7F0ABCCC E7A80010 */ swc1 $f8, 0x10($sp) -/* 0E0840 7F0ABCD0 E7AA0014 */ swc1 $f10, 0x14($sp) -/* 0E0844 7F0ABCD4 0C003FBC */ jal guPerspective -/* 0E0848 7F0ABCD8 E7B20018 */ swc1 $f18, 0x18($sp) -/* 0E084C 7F0ABCDC 3C180103 */ lui $t8, (0x01030040 >> 16) # lui $t8, 0x103 -/* 0E0850 7F0ABCE0 37180040 */ ori $t8, (0x01030040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 0E0854 7F0ABCE4 02001825 */ move $v1, $s0 -/* 0E0858 7F0ABCE8 AC780000 */ sw $t8, ($v1) -/* 0E085C 7F0ABCEC AFA30048 */ sw $v1, 0x48($sp) -/* 0E0860 7F0ABCF0 8FA4053C */ lw $a0, 0x53c($sp) -/* 0E0864 7F0ABCF4 0C003A3C */ jal osVirtualToPhysical -/* 0E0868 7F0ABCF8 26100008 */ addiu $s0, $s0, 8 -/* 0E086C 7F0ABCFC 8FA30048 */ lw $v1, 0x48($sp) -/* 0E0870 7F0ABD00 02002025 */ move $a0, $s0 -/* 0E0874 7F0ABD04 0FC29EA0 */ jal sub_GAME_7F0A6EE8 -/* 0E0878 7F0ABD08 AC620004 */ sw $v0, 4($v1) -/* 0E087C 7F0ABD0C 3C038004 */ lui $v1, %hi(g_WatchBackgroundGreen) # $v1, 0x8004 -/* 0E0880 7F0ABD10 8C630B34 */ lw $v1, %lo(g_WatchBackgroundGreen)($v1) -/* 0E0884 7F0ABD14 00408025 */ move $s0, $v0 -/* 0E0888 7F0ABD18 02002025 */ move $a0, $s0 -/* 0E088C 7F0ABD1C 286100E0 */ slti $at, $v1, 0xe0 -/* 0E0890 7F0ABD20 1020000C */ beqz $at, .Ljp7F0ABD54 -/* 0E0894 7F0ABD24 27A5037C */ addiu $a1, $sp, 0x37c -/* 0E0898 7F0ABD28 8FAB02E8 */ lw $t3, 0x2e8($sp) -/* 0E089C 7F0ABD2C 27B902E3 */ addiu $t9, $sp, 0x2e3 -/* 0E08A0 7F0ABD30 AFB90014 */ sw $t9, 0x14($sp) -/* 0E08A4 7F0ABD34 00402025 */ move $a0, $v0 -/* 0E08A8 7F0ABD38 27A5037C */ addiu $a1, $sp, 0x37c -/* 0E08AC 7F0ABD3C 2466FFFA */ addiu $a2, $v1, -6 -/* 0E08B0 7F0ABD40 24070001 */ li $a3, 1 -/* 0E08B4 7F0ABD44 0FC18EB2 */ jal sub_GAME_7F06359C -/* 0E08B8 7F0ABD48 AFAB0010 */ sw $t3, 0x10($sp) -/* 0E08BC 7F0ABD4C 10000007 */ b .Ljp7F0ABD6C -/* 0E08C0 7F0ABD50 00408025 */ move $s0, $v0 -.Ljp7F0ABD54: -/* 0E08C4 7F0ABD54 27AA02E3 */ addiu $t2, $sp, 0x2e3 -/* 0E08C8 7F0ABD58 AFAA0010 */ sw $t2, 0x10($sp) -/* 0E08CC 7F0ABD5C 24060001 */ li $a2, 1 -/* 0E08D0 7F0ABD60 0FC19224 */ jal sub_GAME_7F064364 -/* 0E08D4 7F0ABD64 8FA702E8 */ lw $a3, 0x2e8($sp) -/* 0E08D8 7F0ABD68 00408025 */ move $s0, $v0 -.Ljp7F0ABD6C: -/* 0E08DC 7F0ABD6C 0FC29645 */ jal controllerCheckDualControllerTypesAllowed -/* 0E08E0 7F0ABD70 00000000 */ nop -/* 0E08E4 7F0ABD74 1040009F */ beqz $v0, .Ljp7F0ABFF4 -/* 0E08E8 7F0ABD78 24040001 */ li $a0, 1 -/* 0E08EC 7F0ABD7C 3C058004 */ lui $a1, %hi(D_80040B3C) # $a1, 0x8004 -/* 0E08F0 7F0ABD80 3C068004 */ lui $a2, %hi(D_80040B38) # $a2, 0x8004 -/* 0E08F4 7F0ABD84 3C078004 */ lui $a3, %hi(D_80040B34) # $a3, 0x8004 -/* 0E08F8 7F0ABD88 24E70B64 */ addiu $a3, %lo(D_80040B34) # addiu $a3, $a3, 0xb64 -/* 0E08FC 7F0ABD8C 24C60B68 */ addiu $a2, %lo(D_80040B38) # addiu $a2, $a2, 0xb68 -/* 0E0900 7F0ABD90 0FC2A891 */ jal sub_GAME_7F0A9684 -/* 0E0904 7F0ABD94 24A50B6C */ addiu $a1, %lo(D_80040B3C) # addiu $a1, $a1, 0xb6c -/* 0E0908 7F0ABD98 0FC1613C */ jal matrix_4x4_set_identity -/* 0E090C 7F0ABD9C 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0E0910 7F0ABDA0 3C018004 */ lui $at, %hi(D_80040B38) # $at, 0x8004 -/* 0E0914 7F0ABDA4 C4300B68 */ lwc1 $f16, %lo(D_80040B38)($at) -/* 0E0918 7F0ABDA8 3C018005 */ lui $at, %hi(jpD_800484D0) # $at, 0x8005 -/* 0E091C 7F0ABDAC C42484D0 */ lwc1 $f4, %lo(jpD_800484D0)($at) -/* 0E0920 7F0ABDB0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0E0924 7F0ABDB4 44814000 */ mtc1 $at, $f8 -/* 0E0928 7F0ABDB8 46048182 */ mul.s $f6, $f16, $f4 -/* 0E092C 7F0ABDBC 3C028004 */ lui $v0, %hi(D_80040B34) # $v0, 0x8004 -/* 0E0930 7F0ABDC0 24420B64 */ addiu $v0, %lo(D_80040B34) # addiu $v0, $v0, 0xb64 -/* 0E0934 7F0ABDC4 C4520000 */ lwc1 $f18, ($v0) -/* 0E0938 7F0ABDC8 46083282 */ mul.s $f10, $f6, $f8 -/* 0E093C 7F0ABDCC 460A9400 */ add.s $f16, $f18, $f10 -/* 0E0940 7F0ABDD0 E4500000 */ swc1 $f16, ($v0) -/* 0E0944 7F0ABDD4 0FC29D73 */ jal watchWrapAroundPI -/* 0E0948 7F0ABDD8 C44C0000 */ lwc1 $f12, ($v0) -/* 0E094C 7F0ABDDC 3C018004 */ lui $at, %hi(D_80040B34) # $at, 0x8004 -/* 0E0950 7F0ABDE0 E4200B64 */ swc1 $f0, %lo(D_80040B34)($at) -/* 0E0954 7F0ABDE4 C42C0B64 */ lwc1 $f12, %lo(D_80040B34)($at) -/* 0E0958 7F0ABDE8 0FC162EA */ jal matrix_4x4_set_rotation_around_z -/* 0E095C 7F0ABDEC 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0E0960 7F0ABDF0 3C0C8004 */ lui $t4, %hi(watch_item_is_actively_selected) # $t4, 0x8004 -/* 0E0964 7F0ABDF4 8D8C09D8 */ lw $t4, %lo(watch_item_is_actively_selected)($t4) -/* 0E0968 7F0ABDF8 11800016 */ beqz $t4, .Ljp7F0ABE54 -/* 0E096C 7F0ABDFC 3C0D8004 */ lui $t5, %hi(controller_options_index) # $t5, 0x8004 -/* 0E0970 7F0ABE00 8DAD09C8 */ lw $t5, %lo(controller_options_index)($t5) -/* 0E0974 7F0ABE04 24010001 */ li $at, 1 -/* 0E0978 7F0ABE08 15A10012 */ bne $t5, $at, .Ljp7F0ABE54 -/* 0E097C 7F0ABE0C 00000000 */ nop -/* 0E0980 7F0ABE10 0C003098 */ jal joyGetStickY -/* 0E0984 7F0ABE14 24040001 */ li $a0, 1 -/* 0E0988 7F0ABE18 44822000 */ mtc1 $v0, $f4 -/* 0E098C 7F0ABE1C 3C018004 */ lui $at, %hi(D_80040B30) # $at, 0x8004 -/* 0E0990 7F0ABE20 C42C0B60 */ lwc1 $f12, %lo(D_80040B30)($at) -/* 0E0994 7F0ABE24 468021A0 */ cvt.s.w $f6, $f4 -/* 0E0998 7F0ABE28 3C018006 */ lui $at, %hi(D_80058560) # $at, 0x8006 -/* 0E099C 7F0ABE2C C42885A0 */ lwc1 $f8, %lo(D_80058560)($at) -/* 0E09A0 7F0ABE30 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0E09A4 7F0ABE34 44815000 */ mtc1 $at, $f10 -/* 0E09A8 7F0ABE38 3C064080 */ lui $a2, 0x4080 -/* 0E09AC 7F0ABE3C 46083482 */ mul.s $f18, $f6, $f8 -/* 0E09B0 7F0ABE40 0FC2A861 */ jal sub_GAME_7F0A95C4 -/* 0E09B4 7F0ABE44 460A9383 */ div.s $f14, $f18, $f10 -/* 0E09B8 7F0ABE48 3C018004 */ lui $at, %hi(D_80040B30) # $at, 0x8004 -/* 0E09BC 7F0ABE4C 10000008 */ b .Ljp7F0ABE70 -/* 0E09C0 7F0ABE50 E4200B60 */ swc1 $f0, %lo(D_80040B30)($at) -.Ljp7F0ABE54: -/* 0E09C4 7F0ABE54 3C018004 */ lui $at, %hi(D_80040B30) # $at, 0x8004 -/* 0E09C8 7F0ABE58 44807000 */ mtc1 $zero, $f14 -/* 0E09CC 7F0ABE5C C42C0B60 */ lwc1 $f12, %lo(D_80040B30)($at) -/* 0E09D0 7F0ABE60 0FC2A861 */ jal sub_GAME_7F0A95C4 -/* 0E09D4 7F0ABE64 3C064080 */ lui $a2, 0x4080 -/* 0E09D8 7F0ABE68 3C018004 */ lui $at, %hi(D_80040B30) # $at, 0x8004 -/* 0E09DC 7F0ABE6C E4200B60 */ swc1 $f0, %lo(D_80040B30)($at) -.Ljp7F0ABE70: -/* 0E09E0 7F0ABE70 3C018004 */ lui $at, %hi(D_80040B30) # $at, 0x8004 -/* 0E09E4 7F0ABE74 C4300B60 */ lwc1 $f16, %lo(D_80040B30)($at) -/* 0E09E8 7F0ABE78 3C018006 */ lui $at, %hi(D_80058564) # $at, 0x8006 -/* 0E09EC 7F0ABE7C C42685A4 */ lwc1 $f6, %lo(D_80058564)($at) -/* 0E09F0 7F0ABE80 46008107 */ neg.s $f4, $f16 -/* 0E09F4 7F0ABE84 27A5047C */ addiu $a1, $sp, 0x47c -/* 0E09F8 7F0ABE88 0FC162A4 */ jal matrix_4x4_set_rotation_around_x -/* 0E09FC 7F0ABE8C 46062301 */ sub.s $f12, $f4, $f6 -/* 0E0A00 7F0ABE90 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0E0A04 7F0ABE94 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0E0A08 7F0ABE98 0FC1617A */ jal matrix_4x4_multiply -/* 0E0A0C 7F0ABE9C 27A6043C */ addiu $a2, $sp, 0x43c -/* 0E0A10 7F0ABEA0 27A4043C */ addiu $a0, $sp, 0x43c -/* 0E0A14 7F0ABEA4 27A5047C */ addiu $a1, $sp, 0x47c -/* 0E0A18 7F0ABEA8 0FC1617A */ jal matrix_4x4_multiply -/* 0E0A1C 7F0ABEAC 27A603FC */ addiu $a2, $sp, 0x3fc -/* 0E0A20 7F0ABEB0 27A40370 */ addiu $a0, $sp, 0x370 -/* 0E0A24 7F0ABEB4 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 0E0A28 7F0ABEB8 27A5043C */ addiu $a1, $sp, 0x43c -/* 0E0A2C 7F0ABEBC 27A4043C */ addiu $a0, $sp, 0x43c -/* 0E0A30 7F0ABEC0 27A503FC */ addiu $a1, $sp, 0x3fc -/* 0E0A34 7F0ABEC4 0FC1617A */ jal matrix_4x4_multiply -/* 0E0A38 7F0ABEC8 27A603BC */ addiu $a2, $sp, 0x3bc -/* 0E0A3C 7F0ABECC 3C018006 */ lui $at, %hi(D_80058568) # $at, 0x8006 -/* 0E0A40 7F0ABED0 C42085A8 */ lwc1 $f0, %lo(D_80058568)($at) -/* 0E0A44 7F0ABED4 3C014200 */ li $at, 0x42000000 # 32.000000 -/* 0E0A48 7F0ABED8 44801000 */ mtc1 $zero, $f2 -/* 0E0A4C 7F0ABEDC 44814000 */ mtc1 $at, $f8 -/* 0E0A50 7F0ABEE0 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0E0A54 7F0ABEE4 44819000 */ mtc1 $at, $f18 -/* 0E0A58 7F0ABEE8 3C06451C */ lui $a2, (0x451C4000 >> 16) # lui $a2, 0x451c -/* 0E0A5C 7F0ABEEC 44050000 */ mfc1 $a1, $f0 -/* 0E0A60 7F0ABEF0 34C64000 */ ori $a2, (0x451C4000 & 0xFFFF) # ori $a2, $a2, 0x4000 -/* 0E0A64 7F0ABEF4 27A402EC */ addiu $a0, $sp, 0x2ec -/* 0E0A68 7F0ABEF8 3C074200 */ lui $a3, 0x4200 -/* 0E0A6C 7F0ABEFC E7A00010 */ swc1 $f0, 0x10($sp) -/* 0E0A70 7F0ABF00 E7A20014 */ swc1 $f2, 0x14($sp) -/* 0E0A74 7F0ABF04 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 0E0A78 7F0ABF08 E7A20020 */ swc1 $f2, 0x20($sp) -/* 0E0A7C 7F0ABF0C E7A80018 */ swc1 $f8, 0x18($sp) -/* 0E0A80 7F0ABF10 0FC166ED */ jal matrix_4x4_set_lookat_target -/* 0E0A84 7F0ABF14 E7B20024 */ swc1 $f18, 0x24($sp) -/* 0E0A88 7F0ABF18 27A402EC */ addiu $a0, $sp, 0x2ec -/* 0E0A8C 7F0ABF1C 27A503BC */ addiu $a1, $sp, 0x3bc -/* 0E0A90 7F0ABF20 0FC1617A */ jal matrix_4x4_multiply -/* 0E0A94 7F0ABF24 27A6037C */ addiu $a2, $sp, 0x37c -/* 0E0A98 7F0ABF28 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0E0A9C 7F0ABF2C 44815000 */ mtc1 $at, $f10 -/* 0E0AA0 7F0ABF30 3C018006 */ lui $at, %hi(D_8005856C) # $at, 0x8006 -/* 0E0AA4 7F0ABF34 C43085AC */ lwc1 $f16, %lo(D_8005856C)($at) -/* 0E0AA8 7F0ABF38 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0E0AAC 7F0ABF3C 44812000 */ mtc1 $at, $f4 -/* 0E0AB0 7F0ABF40 3C073FAA */ lui $a3, (0x3FAAAAAB >> 16) # lui $a3, 0x3faa -/* 0E0AB4 7F0ABF44 34E7AAAB */ ori $a3, (0x3FAAAAAB & 0xFFFF) # ori $a3, $a3, 0xaaab -/* 0E0AB8 7F0ABF48 8FA4053C */ lw $a0, 0x53c($sp) -/* 0E0ABC 7F0ABF4C 27A5036E */ addiu $a1, $sp, 0x36e -/* 0E0AC0 7F0ABF50 3C06424A */ lui $a2, 0x424a -/* 0E0AC4 7F0ABF54 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 0E0AC8 7F0ABF58 E7B00014 */ swc1 $f16, 0x14($sp) -/* 0E0ACC 7F0ABF5C 0C003FBC */ jal guPerspective -/* 0E0AD0 7F0ABF60 E7A40018 */ swc1 $f4, 0x18($sp) -/* 0E0AD4 7F0ABF64 3C080103 */ lui $t0, (0x01030040 >> 16) # lui $t0, 0x103 -/* 0E0AD8 7F0ABF68 35080040 */ ori $t0, (0x01030040 & 0xFFFF) # ori $t0, $t0, 0x40 -/* 0E0ADC 7F0ABF6C 02001825 */ move $v1, $s0 -/* 0E0AE0 7F0ABF70 AC680000 */ sw $t0, ($v1) -/* 0E0AE4 7F0ABF74 AFA30044 */ sw $v1, 0x44($sp) -/* 0E0AE8 7F0ABF78 8FA4053C */ lw $a0, 0x53c($sp) -/* 0E0AEC 7F0ABF7C 0C003A3C */ jal osVirtualToPhysical -/* 0E0AF0 7F0ABF80 26100008 */ addiu $s0, $s0, 8 -/* 0E0AF4 7F0ABF84 8FA30044 */ lw $v1, 0x44($sp) -/* 0E0AF8 7F0ABF88 02002025 */ move $a0, $s0 -/* 0E0AFC 7F0ABF8C 0FC29EA0 */ jal sub_GAME_7F0A6EE8 -/* 0E0B00 7F0ABF90 AC620004 */ sw $v0, 4($v1) -/* 0E0B04 7F0ABF94 3C038004 */ lui $v1, %hi(g_WatchBackgroundGreen) # $v1, 0x8004 -/* 0E0B08 7F0ABF98 8C630B34 */ lw $v1, %lo(g_WatchBackgroundGreen)($v1) -/* 0E0B0C 7F0ABF9C 00408025 */ move $s0, $v0 -/* 0E0B10 7F0ABFA0 02002025 */ move $a0, $s0 -/* 0E0B14 7F0ABFA4 286100E0 */ slti $at, $v1, 0xe0 -/* 0E0B18 7F0ABFA8 1020000C */ beqz $at, .Ljp7F0ABFDC -/* 0E0B1C 7F0ABFAC 27A5037C */ addiu $a1, $sp, 0x37c -/* 0E0B20 7F0ABFB0 27AF004C */ addiu $t7, $sp, 0x4c -/* 0E0B24 7F0ABFB4 27A902E2 */ addiu $t1, $sp, 0x2e2 -/* 0E0B28 7F0ABFB8 AFA90014 */ sw $t1, 0x14($sp) -/* 0E0B2C 7F0ABFBC AFAF0010 */ sw $t7, 0x10($sp) -/* 0E0B30 7F0ABFC0 00402025 */ move $a0, $v0 -/* 0E0B34 7F0ABFC4 27A5037C */ addiu $a1, $sp, 0x37c -/* 0E0B38 7F0ABFC8 2466FFFA */ addiu $a2, $v1, -6 -/* 0E0B3C 7F0ABFCC 0FC18EB2 */ jal sub_GAME_7F06359C -/* 0E0B40 7F0ABFD0 24070001 */ li $a3, 1 -/* 0E0B44 7F0ABFD4 10000007 */ b .Ljp7F0ABFF4 -/* 0E0B48 7F0ABFD8 00408025 */ move $s0, $v0 -.Ljp7F0ABFDC: -/* 0E0B4C 7F0ABFDC 27AE02E2 */ addiu $t6, $sp, 0x2e2 -/* 0E0B50 7F0ABFE0 AFAE0010 */ sw $t6, 0x10($sp) -/* 0E0B54 7F0ABFE4 24060001 */ li $a2, 1 -/* 0E0B58 7F0ABFE8 0FC19224 */ jal sub_GAME_7F064364 -/* 0E0B5C 7F0ABFEC 27A7004C */ addiu $a3, $sp, 0x4c -/* 0E0B60 7F0ABFF0 00408025 */ move $s0, $v0 -.Ljp7F0ABFF4: -/* 0E0B64 7F0ABFF4 0FC29645 */ jal controllerCheckDualControllerTypesAllowed -/* 0E0B68 7F0ABFF8 00000000 */ nop -/* 0E0B6C 7F0ABFFC 10400005 */ beqz $v0, .Ljp7F0AC014 -/* 0E0B70 7F0AC000 00000000 */ nop -/* 0E0B74 7F0AC004 0FC2ACE2 */ jal display_text_buttons_dual_control -/* 0E0B78 7F0AC008 02002025 */ move $a0, $s0 -/* 0E0B7C 7F0AC00C 10000004 */ b .Ljp7F0AC020 -/* 0E0B80 7F0AC010 00408025 */ move $s0, $v0 -.Ljp7F0AC014: -/* 0E0B84 7F0AC014 0FC2A99E */ jal sub_GAME_7F0A9AB8 -/* 0E0B88 7F0AC018 02002025 */ move $a0, $s0 -/* 0E0B8C 7F0AC01C 00408025 */ move $s0, $v0 -.Ljp7F0AC020: -/* 0E0B90 7F0AC020 8FBF0034 */ lw $ra, 0x34($sp) -/* 0E0B94 7F0AC024 02001025 */ move $v0, $s0 -/* 0E0B98 7F0AC028 8FB00030 */ lw $s0, 0x30($sp) -/* 0E0B9C 7F0AC02C 03E00008 */ jr $ra -/* 0E0BA0 7F0AC030 27BD0540 */ addiu $sp, $sp, 0x540 -) -#endif - -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80058550 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80058554 -.word 0x3f490fdb /*0.78539819*/ -glabel D_80058558 -.word 0x43f78000 /*495.0*/ -glabel D_8005855C -.word 0x453b8000 /*3000.0*/ -glabel D_80058560 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80058564 -.word 0x3f490fdb /*0.78539819*/ -glabel D_80058568 -.word 0xc3fc8000 /*-505.0*/ -glabel D_8005856C -.word 0x453b8000 /*3000.0*/ -.text -glabel sub_GAME_7F0AADC0 -/* 0DCAF0 7F0AA100 27BDFAC0 */ addiu $sp, $sp, -0x540 -/* 0DCAF4 7F0AA104 AFBF0034 */ sw $ra, 0x34($sp) -/* 0DCAF8 7F0AA108 AFB00030 */ sw $s0, 0x30($sp) -/* 0DCAFC 7F0AA10C 0FC2F2A4 */ jal dynAllocateMatrix -/* 0DCB00 7F0AA110 00808025 */ move $s0, $a0 -/* 0DCB04 7F0AA114 3C0F8004 */ lui $t7, %hi(D_80040B5C) # $t7, 0x8004 -/* 0DCB08 7F0AA118 AFA2053C */ sw $v0, 0x53c($sp) -/* 0DCB0C 7F0AA11C 25EFA7AC */ addiu $t7, %lo(D_80040B5C) # addiu $t7, $t7, -0x5854 -/* 0DCB10 7F0AA120 8DE10000 */ lw $at, ($t7) -/* 0DCB14 7F0AA124 27AE0370 */ addiu $t6, $sp, 0x370 -/* 0DCB18 7F0AA128 8DE80004 */ lw $t0, 4($t7) -/* 0DCB1C 7F0AA12C ADC10000 */ sw $at, ($t6) -/* 0DCB20 7F0AA130 8DE10008 */ lw $at, 8($t7) -/* 0DCB24 7F0AA134 3C0B8004 */ lui $t3, %hi(D_80040B68) # $t3, 0x8004 -/* 0DCB28 7F0AA138 ADC80004 */ sw $t0, 4($t6) -/* 0DCB2C 7F0AA13C ADC10008 */ sw $at, 8($t6) -/* 0DCB30 7F0AA140 24090001 */ li $t1, 1 -/* 0DCB34 7F0AA144 256BA7B8 */ addiu $t3, %lo(D_80040B68) # addiu $t3, $t3, -0x5848 -/* 0DCB38 7F0AA148 A3A002E3 */ sb $zero, 0x2e3($sp) -/* 0DCB3C 7F0AA14C A3A902E2 */ sb $t1, 0x2e2($sp) -/* 0DCB40 7F0AA150 257900D8 */ addiu $t9, $t3, 0xd8 -/* 0DCB44 7F0AA154 27AA0204 */ addiu $t2, $sp, 0x204 -.L7F0AA158: -/* 0DCB48 7F0AA158 8D610000 */ lw $at, ($t3) -/* 0DCB4C 7F0AA15C 256B000C */ addiu $t3, $t3, 0xc -/* 0DCB50 7F0AA160 254A000C */ addiu $t2, $t2, 0xc -/* 0DCB54 7F0AA164 AD41FFF4 */ sw $at, -0xc($t2) -/* 0DCB58 7F0AA168 8D61FFF8 */ lw $at, -8($t3) -/* 0DCB5C 7F0AA16C AD41FFF8 */ sw $at, -8($t2) -/* 0DCB60 7F0AA170 8D61FFFC */ lw $at, -4($t3) -/* 0DCB64 7F0AA174 1579FFF8 */ bne $t3, $t9, .L7F0AA158 -/* 0DCB68 7F0AA178 AD41FFFC */ sw $at, -4($t2) -/* 0DCB6C 7F0AA17C 8D610000 */ lw $at, ($t3) -/* 0DCB70 7F0AA180 3C0E8004 */ lui $t6, %hi(D_80040C44) # $t6, 0x8004 -/* 0DCB74 7F0AA184 25CEA894 */ addiu $t6, %lo(D_80040C44) # addiu $t6, $t6, -0x576c -/* 0DCB78 7F0AA188 25C900D8 */ addiu $t1, $t6, 0xd8 -/* 0DCB7C 7F0AA18C 27B80128 */ addiu $t8, $sp, 0x128 -/* 0DCB80 7F0AA190 AD410000 */ sw $at, ($t2) -.L7F0AA194: -/* 0DCB84 7F0AA194 8DC10000 */ lw $at, ($t6) -/* 0DCB88 7F0AA198 25CE000C */ addiu $t6, $t6, 0xc -/* 0DCB8C 7F0AA19C 2718000C */ addiu $t8, $t8, 0xc -/* 0DCB90 7F0AA1A0 AF01FFF4 */ sw $at, -0xc($t8) -/* 0DCB94 7F0AA1A4 8DC1FFF8 */ lw $at, -8($t6) -/* 0DCB98 7F0AA1A8 AF01FFF8 */ sw $at, -8($t8) -/* 0DCB9C 7F0AA1AC 8DC1FFFC */ lw $at, -4($t6) -/* 0DCBA0 7F0AA1B0 15C9FFF8 */ bne $t6, $t1, .L7F0AA194 -/* 0DCBA4 7F0AA1B4 AF01FFFC */ sw $at, -4($t8) -/* 0DCBA8 7F0AA1B8 8DC10000 */ lw $at, ($t6) -/* 0DCBAC 7F0AA1BC 3C0C8004 */ lui $t4, %hi(D_80040D20) # $t4, 0x8004 -/* 0DCBB0 7F0AA1C0 258CA970 */ addiu $t4, %lo(D_80040D20) # addiu $t4, $t4, -0x5690 -/* 0DCBB4 7F0AA1C4 258A00D8 */ addiu $t2, $t4, 0xd8 -/* 0DCBB8 7F0AA1C8 27AD004C */ addiu $t5, $sp, 0x4c -/* 0DCBBC 7F0AA1CC AF010000 */ sw $at, ($t8) -.L7F0AA1D0: -/* 0DCBC0 7F0AA1D0 8D810000 */ lw $at, ($t4) -/* 0DCBC4 7F0AA1D4 258C000C */ addiu $t4, $t4, 0xc -/* 0DCBC8 7F0AA1D8 25AD000C */ addiu $t5, $t5, 0xc -/* 0DCBCC 7F0AA1DC ADA1FFF4 */ sw $at, -0xc($t5) -/* 0DCBD0 7F0AA1E0 8D81FFF8 */ lw $at, -8($t4) -/* 0DCBD4 7F0AA1E4 ADA1FFF8 */ sw $at, -8($t5) -/* 0DCBD8 7F0AA1E8 8D81FFFC */ lw $at, -4($t4) -/* 0DCBDC 7F0AA1EC 158AFFF8 */ bne $t4, $t2, .L7F0AA1D0 -/* 0DCBE0 7F0AA1F0 ADA1FFFC */ sw $at, -4($t5) -/* 0DCBE4 7F0AA1F4 8D810000 */ lw $at, ($t4) -/* 0DCBE8 7F0AA1F8 3C058004 */ lui $a1, %hi(D_80040B2C) # $a1, 0x8004 -/* 0DCBEC 7F0AA1FC 3C068004 */ lui $a2, %hi(D_80040B28) # $a2, 0x8004 -/* 0DCBF0 7F0AA200 3C078004 */ lui $a3, %hi(D_80040B24) # $a3, 0x8004 -/* 0DCBF4 7F0AA204 24E7A774 */ addiu $a3, %lo(D_80040B24) # addiu $a3, $a3, -0x588c -/* 0DCBF8 7F0AA208 24C6A778 */ addiu $a2, %lo(D_80040B28) # addiu $a2, $a2, -0x5888 -/* 0DCBFC 7F0AA20C 24A5A77C */ addiu $a1, %lo(D_80040B2C) # addiu $a1, $a1, -0x5884 -/* 0DCC00 7F0AA210 00002025 */ move $a0, $zero -/* 0DCC04 7F0AA214 0FC2A271 */ jal sub_GAME_7F0A9684 -/* 0DCC08 7F0AA218 ADA10000 */ sw $at, ($t5) -/* 0DCC0C 7F0AA21C 0FC1611E */ jal matrix_4x4_set_identity -/* 0DCC10 7F0AA220 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0DCC14 7F0AA224 3C018004 */ lui $at, %hi(D_80040B28) # $at, 0x8004 -/* 0DCC18 7F0AA228 C424A778 */ lwc1 $f4, %lo(D_80040B28)($at) -/* 0DCC1C 7F0AA22C 3C018004 */ lui $at, %hi(jpD_800484D0) # $at, 0x8004 -/* 0DCC20 7F0AA230 C4261120 */ lwc1 $f6, %lo(jpD_800484D0)($at) -/* 0DCC24 7F0AA234 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0DCC28 7F0AA238 44815000 */ mtc1 $at, $f10 -/* 0DCC2C 7F0AA23C 46062202 */ mul.s $f8, $f4, $f6 -/* 0DCC30 7F0AA240 3C028004 */ lui $v0, %hi(D_80040B24) # $v0, 0x8004 -/* 0DCC34 7F0AA244 2442A774 */ addiu $v0, %lo(D_80040B24) # addiu $v0, $v0, -0x588c -/* 0DCC38 7F0AA248 C4520000 */ lwc1 $f18, ($v0) -/* 0DCC3C 7F0AA24C 460A4402 */ mul.s $f16, $f8, $f10 -/* 0DCC40 7F0AA250 46109100 */ add.s $f4, $f18, $f16 -/* 0DCC44 7F0AA254 E4440000 */ swc1 $f4, ($v0) -/* 0DCC48 7F0AA258 0FC29753 */ jal watchWrapAroundPI -/* 0DCC4C 7F0AA25C C44C0000 */ lwc1 $f12, ($v0) -/* 0DCC50 7F0AA260 3C018004 */ lui $at, %hi(D_80040B24) # $at, 0x8004 -/* 0DCC54 7F0AA264 E420A774 */ swc1 $f0, %lo(D_80040B24)($at) -/* 0DCC58 7F0AA268 C42CA774 */ lwc1 $f12, %lo(D_80040B24)($at) -/* 0DCC5C 7F0AA26C 0FC162CC */ jal matrix_4x4_set_rotation_around_z -/* 0DCC60 7F0AA270 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0DCC64 7F0AA274 3C088004 */ lui $t0, %hi(watch_item_is_actively_selected) # $t0, 0x8004 -/* 0DCC68 7F0AA278 8D08A5F8 */ lw $t0, %lo(watch_item_is_actively_selected)($t0) -/* 0DCC6C 7F0AA27C 11000016 */ beqz $t0, .L7F0AA2D8 -/* 0DCC70 7F0AA280 3C0F8004 */ lui $t7, %hi(controller_options_index) # $t7, 0x8004 -/* 0DCC74 7F0AA284 8DEFA5E8 */ lw $t7, %lo(controller_options_index)($t7) -/* 0DCC78 7F0AA288 24010001 */ li $at, 1 -/* 0DCC7C 7F0AA28C 15E10012 */ bne $t7, $at, .L7F0AA2D8 -/* 0DCC80 7F0AA290 00000000 */ nop -/* 0DCC84 7F0AA294 0C002BDC */ jal joyGetStickY -/* 0DCC88 7F0AA298 00002025 */ move $a0, $zero -/* 0DCC8C 7F0AA29C 44823000 */ mtc1 $v0, $f6 -/* 0DCC90 7F0AA2A0 3C018004 */ lui $at, %hi(D_80040B20) # $at, 0x8004 -/* 0DCC94 7F0AA2A4 C42CA770 */ lwc1 $f12, %lo(D_80040B20)($at) -/* 0DCC98 7F0AA2A8 46803220 */ cvt.s.w $f8, $f6 -/* 0DCC9C 7F0AA2AC 3C018005 */ lui $at, %hi(D_80058550) # $at, 0x8005 -/* 0DCCA0 7F0AA2B0 C42ACFA4 */ lwc1 $f10, %lo(D_80058550)($at) -/* 0DCCA4 7F0AA2B4 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DCCA8 7F0AA2B8 44818000 */ mtc1 $at, $f16 -/* 0DCCAC 7F0AA2BC 3C064080 */ lui $a2, 0x4080 -/* 0DCCB0 7F0AA2C0 460A4482 */ mul.s $f18, $f8, $f10 -/* 0DCCB4 7F0AA2C4 0FC2A241 */ jal sub_GAME_7F0A95C4 -/* 0DCCB8 7F0AA2C8 46109383 */ div.s $f14, $f18, $f16 -/* 0DCCBC 7F0AA2CC 3C018004 */ lui $at, %hi(D_80040B20) # $at, 0x8004 -/* 0DCCC0 7F0AA2D0 10000008 */ b .L7F0AA2F4 -/* 0DCCC4 7F0AA2D4 E420A770 */ swc1 $f0, %lo(D_80040B20)($at) -.L7F0AA2D8: -/* 0DCCC8 7F0AA2D8 3C018004 */ lui $at, %hi(D_80040B20) # $at, 0x8004 -/* 0DCCCC 7F0AA2DC 44807000 */ mtc1 $zero, $f14 -/* 0DCCD0 7F0AA2E0 C42CA770 */ lwc1 $f12, %lo(D_80040B20)($at) -/* 0DCCD4 7F0AA2E4 0FC2A241 */ jal sub_GAME_7F0A95C4 -/* 0DCCD8 7F0AA2E8 3C064080 */ lui $a2, 0x4080 -/* 0DCCDC 7F0AA2EC 3C018004 */ lui $at, %hi(D_80040B20) # $at, 0x8004 -/* 0DCCE0 7F0AA2F0 E420A770 */ swc1 $f0, %lo(D_80040B20)($at) -.L7F0AA2F4: -/* 0DCCE4 7F0AA2F4 3C018004 */ lui $at, %hi(D_80040B20) # $at, 0x8004 -/* 0DCCE8 7F0AA2F8 C424A770 */ lwc1 $f4, %lo(D_80040B20)($at) -/* 0DCCEC 7F0AA2FC 3C018005 */ lui $at, %hi(D_80058554) # $at, 0x8005 -/* 0DCCF0 7F0AA300 C428CFA8 */ lwc1 $f8, %lo(D_80058554)($at) -/* 0DCCF4 7F0AA304 46002187 */ neg.s $f6, $f4 -/* 0DCCF8 7F0AA308 27A5047C */ addiu $a1, $sp, 0x47c -/* 0DCCFC 7F0AA30C 0FC16286 */ jal matrix_4x4_set_rotation_around_x -/* 0DCD00 7F0AA310 46083301 */ sub.s $f12, $f6, $f8 -/* 0DCD04 7F0AA314 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0DCD08 7F0AA318 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0DCD0C 7F0AA31C 0FC1615C */ jal matrix_4x4_multiply -/* 0DCD10 7F0AA320 27A6043C */ addiu $a2, $sp, 0x43c -/* 0DCD14 7F0AA324 27A4043C */ addiu $a0, $sp, 0x43c -/* 0DCD18 7F0AA328 27A5047C */ addiu $a1, $sp, 0x47c -/* 0DCD1C 7F0AA32C 0FC1615C */ jal matrix_4x4_multiply -/* 0DCD20 7F0AA330 27A603FC */ addiu $a2, $sp, 0x3fc -/* 0DCD24 7F0AA334 27A40370 */ addiu $a0, $sp, 0x370 -/* 0DCD28 7F0AA338 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 0DCD2C 7F0AA33C 27A5043C */ addiu $a1, $sp, 0x43c -/* 0DCD30 7F0AA340 27A4043C */ addiu $a0, $sp, 0x43c -/* 0DCD34 7F0AA344 27A503FC */ addiu $a1, $sp, 0x3fc -/* 0DCD38 7F0AA348 0FC1615C */ jal matrix_4x4_multiply -/* 0DCD3C 7F0AA34C 27A603BC */ addiu $a2, $sp, 0x3bc -/* 0DCD40 7F0AA350 0FC29025 */ jal controllerCheckDualControllerTypesAllowed -/* 0DCD44 7F0AA354 00000000 */ nop -/* 0DCD48 7F0AA358 10400018 */ beqz $v0, .L7F0AA3BC -/* 0DCD4C 7F0AA35C 3C01C0A0 */ lui $at, 0xc0a0 -/* 0DCD50 7F0AA360 3C018005 */ li $at, 0x80050000 # -0.000000 -/* 0DCD54 7F0AA364 C420CFAC */ lwc1 $f0, %lo(D_80058558)($at) -/* 0DCD58 7F0AA368 3C014200 */ li $at, 0x42000000 # 32.000000 -/* 0DCD5C 7F0AA36C 44816000 */ mtc1 $at, $f12 -/* 0DCD60 7F0AA370 44801000 */ mtc1 $zero, $f2 -/* 0DCD64 7F0AA374 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0DCD68 7F0AA378 44815000 */ mtc1 $at, $f10 -/* 0DCD6C 7F0AA37C 27A90128 */ addiu $t1, $sp, 0x128 -/* 0DCD70 7F0AA380 3C06451C */ lui $a2, (0x451C4000 >> 16) # lui $a2, 0x451c -/* 0DCD74 7F0AA384 44050000 */ mfc1 $a1, $f0 -/* 0DCD78 7F0AA388 44076000 */ mfc1 $a3, $f12 -/* 0DCD7C 7F0AA38C AFA902E8 */ sw $t1, 0x2e8($sp) -/* 0DCD80 7F0AA390 34C64000 */ ori $a2, (0x451C4000 & 0xFFFF) # ori $a2, $a2, 0x4000 -/* 0DCD84 7F0AA394 27A4032C */ addiu $a0, $sp, 0x32c -/* 0DCD88 7F0AA398 E7A00010 */ swc1 $f0, 0x10($sp) -/* 0DCD8C 7F0AA39C E7AC0018 */ swc1 $f12, 0x18($sp) -/* 0DCD90 7F0AA3A0 E7A20014 */ swc1 $f2, 0x14($sp) -/* 0DCD94 7F0AA3A4 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 0DCD98 7F0AA3A8 E7A20020 */ swc1 $f2, 0x20($sp) -/* 0DCD9C 7F0AA3AC 0FC166CF */ jal matrix_4x4_set_lookat_target -/* 0DCDA0 7F0AA3B0 E7AA0024 */ swc1 $f10, 0x24($sp) -/* 0DCDA4 7F0AA3B4 10000017 */ b .L7F0AA414 -/* 0DCDA8 7F0AA3B8 27A4032C */ addiu $a0, $sp, 0x32c -.L7F0AA3BC: -/* 0DCDAC 7F0AA3BC 44810000 */ mtc1 $at, $f0 -/* 0DCDB0 7F0AA3C0 3C01C328 */ li $at, 0xC3280000 # -168.000000 -/* 0DCDB4 7F0AA3C4 44811000 */ mtc1 $at, $f2 -/* 0DCDB8 7F0AA3C8 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0DCDBC 7F0AA3CC 44813000 */ mtc1 $at, $f6 -/* 0DCDC0 7F0AA3D0 44809000 */ mtc1 $zero, $f18 -/* 0DCDC4 7F0AA3D4 44808000 */ mtc1 $zero, $f16 -/* 0DCDC8 7F0AA3D8 44802000 */ mtc1 $zero, $f4 -/* 0DCDCC 7F0AA3DC 27AE0204 */ addiu $t6, $sp, 0x204 -/* 0DCDD0 7F0AA3E0 44050000 */ mfc1 $a1, $f0 -/* 0DCDD4 7F0AA3E4 44071000 */ mfc1 $a3, $f2 -/* 0DCDD8 7F0AA3E8 AFAE02E8 */ sw $t6, 0x2e8($sp) -/* 0DCDDC 7F0AA3EC 27A4032C */ addiu $a0, $sp, 0x32c -/* 0DCDE0 7F0AA3F0 3C0644FA */ lui $a2, 0x44fa -/* 0DCDE4 7F0AA3F4 E7A00010 */ swc1 $f0, 0x10($sp) -/* 0DCDE8 7F0AA3F8 E7A20018 */ swc1 $f2, 0x18($sp) -/* 0DCDEC 7F0AA3FC E7A60024 */ swc1 $f6, 0x24($sp) -/* 0DCDF0 7F0AA400 E7B20014 */ swc1 $f18, 0x14($sp) -/* 0DCDF4 7F0AA404 E7B0001C */ swc1 $f16, 0x1c($sp) -/* 0DCDF8 7F0AA408 0FC166CF */ jal matrix_4x4_set_lookat_target -/* 0DCDFC 7F0AA40C E7A40020 */ swc1 $f4, 0x20($sp) -/* 0DCE00 7F0AA410 27A4032C */ addiu $a0, $sp, 0x32c -.L7F0AA414: -/* 0DCE04 7F0AA414 27A503BC */ addiu $a1, $sp, 0x3bc -/* 0DCE08 7F0AA418 0FC1615C */ jal matrix_4x4_multiply -/* 0DCE0C 7F0AA41C 27A6037C */ addiu $a2, $sp, 0x37c -/* 0DCE10 7F0AA420 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0DCE14 7F0AA424 44814000 */ mtc1 $at, $f8 -/* 0DCE18 7F0AA428 3C018005 */ lui $at, %hi(D_8005855C) # $at, 0x8005 -/* 0DCE1C 7F0AA42C C42ACFB0 */ lwc1 $f10, %lo(D_8005855C)($at) -/* 0DCE20 7F0AA430 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DCE24 7F0AA434 44819000 */ mtc1 $at, $f18 -/* 0DCE28 7F0AA438 3C073FA4 */ lui $a3, (0x3FA45519 >> 16) # lui $a3, 0x3fa4 -/* 0DCE2C 7F0AA43C 34E75519 */ ori $a3, (0x3FA45519 & 0xFFFF) # ori $a3, $a3, 0x5519 -/* 0DCE30 7F0AA440 8FA4053C */ lw $a0, 0x53c($sp) -/* 0DCE34 7F0AA444 27A5036E */ addiu $a1, $sp, 0x36e -/* 0DCE38 7F0AA448 3C064252 */ lui $a2, 0x4252 -/* 0DCE3C 7F0AA44C E7A80010 */ swc1 $f8, 0x10($sp) -/* 0DCE40 7F0AA450 E7AA0014 */ swc1 $f10, 0x14($sp) -/* 0DCE44 7F0AA454 0C003DB8 */ jal guPerspective -/* 0DCE48 7F0AA458 E7B20018 */ swc1 $f18, 0x18($sp) -/* 0DCE4C 7F0AA45C 3C180103 */ lui $t8, (0x01030040 >> 16) # lui $t8, 0x103 -/* 0DCE50 7F0AA460 37180040 */ ori $t8, (0x01030040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 0DCE54 7F0AA464 02001825 */ move $v1, $s0 -/* 0DCE58 7F0AA468 AC780000 */ sw $t8, ($v1) -/* 0DCE5C 7F0AA46C AFA30048 */ sw $v1, 0x48($sp) -/* 0DCE60 7F0AA470 8FA4053C */ lw $a0, 0x53c($sp) -/* 0DCE64 7F0AA474 0C003838 */ jal osVirtualToPhysical -/* 0DCE68 7F0AA478 26100008 */ addiu $s0, $s0, 8 -/* 0DCE6C 7F0AA47C 8FA30048 */ lw $v1, 0x48($sp) -/* 0DCE70 7F0AA480 02002025 */ move $a0, $s0 -/* 0DCE74 7F0AA484 0FC29880 */ jal sub_GAME_7F0A6EE8 -/* 0DCE78 7F0AA488 AC620004 */ sw $v0, 4($v1) -/* 0DCE7C 7F0AA48C 3C038004 */ lui $v1, %hi(g_WatchBackgroundGreen) # $v1, 0x8004 -/* 0DCE80 7F0AA490 8C63A754 */ lw $v1, %lo(g_WatchBackgroundGreen)($v1) -/* 0DCE84 7F0AA494 00408025 */ move $s0, $v0 -/* 0DCE88 7F0AA498 02002025 */ move $a0, $s0 -/* 0DCE8C 7F0AA49C 286100E0 */ slti $at, $v1, 0xe0 -/* 0DCE90 7F0AA4A0 1020000C */ beqz $at, .L7F0AA4D4 -/* 0DCE94 7F0AA4A4 27A5037C */ addiu $a1, $sp, 0x37c -/* 0DCE98 7F0AA4A8 8FAB02E8 */ lw $t3, 0x2e8($sp) -/* 0DCE9C 7F0AA4AC 27B902E3 */ addiu $t9, $sp, 0x2e3 -/* 0DCEA0 7F0AA4B0 AFB90014 */ sw $t9, 0x14($sp) -/* 0DCEA4 7F0AA4B4 00402025 */ move $a0, $v0 -/* 0DCEA8 7F0AA4B8 27A5037C */ addiu $a1, $sp, 0x37c -/* 0DCEAC 7F0AA4BC 2466FFFA */ addiu $a2, $v1, -6 -/* 0DCEB0 7F0AA4C0 24070001 */ li $a3, 1 -/* 0DCEB4 7F0AA4C4 0FC18E98 */ jal sub_GAME_7F06359C -/* 0DCEB8 7F0AA4C8 AFAB0010 */ sw $t3, 0x10($sp) -/* 0DCEBC 7F0AA4CC 10000007 */ b .L7F0AA4EC -/* 0DCEC0 7F0AA4D0 00408025 */ move $s0, $v0 -.L7F0AA4D4: -/* 0DCEC4 7F0AA4D4 27AA02E3 */ addiu $t2, $sp, 0x2e3 -/* 0DCEC8 7F0AA4D8 AFAA0010 */ sw $t2, 0x10($sp) -/* 0DCECC 7F0AA4DC 24060001 */ li $a2, 1 -/* 0DCED0 7F0AA4E0 0FC1920A */ jal sub_GAME_7F064364 -/* 0DCED4 7F0AA4E4 8FA702E8 */ lw $a3, 0x2e8($sp) -/* 0DCED8 7F0AA4E8 00408025 */ move $s0, $v0 -.L7F0AA4EC: -/* 0DCEDC 7F0AA4EC 0FC29025 */ jal controllerCheckDualControllerTypesAllowed -/* 0DCEE0 7F0AA4F0 00000000 */ nop -/* 0DCEE4 7F0AA4F4 1040009F */ beqz $v0, .L7F0AA774 -/* 0DCEE8 7F0AA4F8 24040001 */ li $a0, 1 -/* 0DCEEC 7F0AA4FC 3C058004 */ lui $a1, %hi(D_80040B3C) # $a1, 0x8004 -/* 0DCEF0 7F0AA500 3C068004 */ lui $a2, %hi(D_80040B38) # $a2, 0x8004 -/* 0DCEF4 7F0AA504 3C078004 */ lui $a3, %hi(D_80040B34) # $a3, 0x8004 -/* 0DCEF8 7F0AA508 24E7A784 */ addiu $a3, %lo(D_80040B34) # addiu $a3, $a3, -0x587c -/* 0DCEFC 7F0AA50C 24C6A788 */ addiu $a2, %lo(D_80040B38) # addiu $a2, $a2, -0x5878 -/* 0DCF00 7F0AA510 0FC2A271 */ jal sub_GAME_7F0A9684 -/* 0DCF04 7F0AA514 24A5A78C */ addiu $a1, %lo(D_80040B3C) # addiu $a1, $a1, -0x5874 -/* 0DCF08 7F0AA518 0FC1611E */ jal matrix_4x4_set_identity -/* 0DCF0C 7F0AA51C 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0DCF10 7F0AA520 3C018004 */ lui $at, %hi(D_80040B38) # $at, 0x8004 -/* 0DCF14 7F0AA524 C430A788 */ lwc1 $f16, %lo(D_80040B38)($at) -/* 0DCF18 7F0AA528 3C018004 */ lui $at, %hi(jpD_800484D0) # $at, 0x8004 -/* 0DCF1C 7F0AA52C C4241120 */ lwc1 $f4, %lo(jpD_800484D0)($at) -/* 0DCF20 7F0AA530 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0DCF24 7F0AA534 44814000 */ mtc1 $at, $f8 -/* 0DCF28 7F0AA538 46048182 */ mul.s $f6, $f16, $f4 -/* 0DCF2C 7F0AA53C 3C028004 */ lui $v0, %hi(D_80040B34) # $v0, 0x8004 -/* 0DCF30 7F0AA540 2442A784 */ addiu $v0, %lo(D_80040B34) # addiu $v0, $v0, -0x587c -/* 0DCF34 7F0AA544 C4520000 */ lwc1 $f18, ($v0) -/* 0DCF38 7F0AA548 46083282 */ mul.s $f10, $f6, $f8 -/* 0DCF3C 7F0AA54C 460A9400 */ add.s $f16, $f18, $f10 -/* 0DCF40 7F0AA550 E4500000 */ swc1 $f16, ($v0) -/* 0DCF44 7F0AA554 0FC29753 */ jal watchWrapAroundPI -/* 0DCF48 7F0AA558 C44C0000 */ lwc1 $f12, ($v0) -/* 0DCF4C 7F0AA55C 3C018004 */ lui $at, %hi(D_80040B34) # $at, 0x8004 -/* 0DCF50 7F0AA560 E420A784 */ swc1 $f0, %lo(D_80040B34)($at) -/* 0DCF54 7F0AA564 C42CA784 */ lwc1 $f12, %lo(D_80040B34)($at) -/* 0DCF58 7F0AA568 0FC162CC */ jal matrix_4x4_set_rotation_around_z -/* 0DCF5C 7F0AA56C 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0DCF60 7F0AA570 3C0C8004 */ lui $t4, %hi(watch_item_is_actively_selected) # $t4, 0x8004 -/* 0DCF64 7F0AA574 8D8CA5F8 */ lw $t4, %lo(watch_item_is_actively_selected)($t4) -/* 0DCF68 7F0AA578 11800016 */ beqz $t4, .L7F0AA5D4 -/* 0DCF6C 7F0AA57C 3C0D8004 */ lui $t5, %hi(controller_options_index) # $t5, 0x8004 -/* 0DCF70 7F0AA580 8DADA5E8 */ lw $t5, %lo(controller_options_index)($t5) -/* 0DCF74 7F0AA584 24010001 */ li $at, 1 -/* 0DCF78 7F0AA588 15A10012 */ bne $t5, $at, .L7F0AA5D4 -/* 0DCF7C 7F0AA58C 00000000 */ nop -/* 0DCF80 7F0AA590 0C002BDC */ jal joyGetStickY -/* 0DCF84 7F0AA594 24040001 */ li $a0, 1 -/* 0DCF88 7F0AA598 44822000 */ mtc1 $v0, $f4 -/* 0DCF8C 7F0AA59C 3C018004 */ lui $at, %hi(D_80040B30) # $at, 0x8004 -/* 0DCF90 7F0AA5A0 C42CA780 */ lwc1 $f12, %lo(D_80040B30)($at) -/* 0DCF94 7F0AA5A4 468021A0 */ cvt.s.w $f6, $f4 -/* 0DCF98 7F0AA5A8 3C018005 */ lui $at, %hi(D_80058560) # $at, 0x8005 -/* 0DCF9C 7F0AA5AC C428CFB4 */ lwc1 $f8, %lo(D_80058560)($at) -/* 0DCFA0 7F0AA5B0 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0DCFA4 7F0AA5B4 44815000 */ mtc1 $at, $f10 -/* 0DCFA8 7F0AA5B8 3C064080 */ lui $a2, 0x4080 -/* 0DCFAC 7F0AA5BC 46083482 */ mul.s $f18, $f6, $f8 -/* 0DCFB0 7F0AA5C0 0FC2A241 */ jal sub_GAME_7F0A95C4 -/* 0DCFB4 7F0AA5C4 460A9383 */ div.s $f14, $f18, $f10 -/* 0DCFB8 7F0AA5C8 3C018004 */ lui $at, %hi(D_80040B30) # $at, 0x8004 -/* 0DCFBC 7F0AA5CC 10000008 */ b .L7F0AA5F0 -/* 0DCFC0 7F0AA5D0 E420A780 */ swc1 $f0, %lo(D_80040B30)($at) -.L7F0AA5D4: -/* 0DCFC4 7F0AA5D4 3C018004 */ lui $at, %hi(D_80040B30) # $at, 0x8004 -/* 0DCFC8 7F0AA5D8 44807000 */ mtc1 $zero, $f14 -/* 0DCFCC 7F0AA5DC C42CA780 */ lwc1 $f12, %lo(D_80040B30)($at) -/* 0DCFD0 7F0AA5E0 0FC2A241 */ jal sub_GAME_7F0A95C4 -/* 0DCFD4 7F0AA5E4 3C064080 */ lui $a2, 0x4080 -/* 0DCFD8 7F0AA5E8 3C018004 */ lui $at, %hi(D_80040B30) # $at, 0x8004 -/* 0DCFDC 7F0AA5EC E420A780 */ swc1 $f0, %lo(D_80040B30)($at) -.L7F0AA5F0: -/* 0DCFE0 7F0AA5F0 3C018004 */ lui $at, %hi(D_80040B30) # $at, 0x8004 -/* 0DCFE4 7F0AA5F4 C430A780 */ lwc1 $f16, %lo(D_80040B30)($at) -/* 0DCFE8 7F0AA5F8 3C018005 */ lui $at, %hi(D_80058564) # $at, 0x8005 -/* 0DCFEC 7F0AA5FC C426CFB8 */ lwc1 $f6, %lo(D_80058564)($at) -/* 0DCFF0 7F0AA600 46008107 */ neg.s $f4, $f16 -/* 0DCFF4 7F0AA604 27A5047C */ addiu $a1, $sp, 0x47c -/* 0DCFF8 7F0AA608 0FC16286 */ jal matrix_4x4_set_rotation_around_x -/* 0DCFFC 7F0AA60C 46062301 */ sub.s $f12, $f4, $f6 -/* 0DD000 7F0AA610 27A404FC */ addiu $a0, $sp, 0x4fc -/* 0DD004 7F0AA614 27A504BC */ addiu $a1, $sp, 0x4bc -/* 0DD008 7F0AA618 0FC1615C */ jal matrix_4x4_multiply -/* 0DD00C 7F0AA61C 27A6043C */ addiu $a2, $sp, 0x43c -/* 0DD010 7F0AA620 27A4043C */ addiu $a0, $sp, 0x43c -/* 0DD014 7F0AA624 27A5047C */ addiu $a1, $sp, 0x47c -/* 0DD018 7F0AA628 0FC1615C */ jal matrix_4x4_multiply -/* 0DD01C 7F0AA62C 27A603FC */ addiu $a2, $sp, 0x3fc -/* 0DD020 7F0AA630 27A40370 */ addiu $a0, $sp, 0x370 -/* 0DD024 7F0AA634 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 0DD028 7F0AA638 27A5043C */ addiu $a1, $sp, 0x43c -/* 0DD02C 7F0AA63C 27A4043C */ addiu $a0, $sp, 0x43c -/* 0DD030 7F0AA640 27A503FC */ addiu $a1, $sp, 0x3fc -/* 0DD034 7F0AA644 0FC1615C */ jal matrix_4x4_multiply -/* 0DD038 7F0AA648 27A603BC */ addiu $a2, $sp, 0x3bc -/* 0DD03C 7F0AA64C 3C018005 */ lui $at, %hi(D_80058568) # $at, 0x8005 -/* 0DD040 7F0AA650 C420CFBC */ lwc1 $f0, %lo(D_80058568)($at) -/* 0DD044 7F0AA654 3C014200 */ li $at, 0x42000000 # 32.000000 -/* 0DD048 7F0AA658 44801000 */ mtc1 $zero, $f2 -/* 0DD04C 7F0AA65C 44814000 */ mtc1 $at, $f8 -/* 0DD050 7F0AA660 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0DD054 7F0AA664 44819000 */ mtc1 $at, $f18 -/* 0DD058 7F0AA668 3C06451C */ lui $a2, (0x451C4000 >> 16) # lui $a2, 0x451c -/* 0DD05C 7F0AA66C 44050000 */ mfc1 $a1, $f0 -/* 0DD060 7F0AA670 34C64000 */ ori $a2, (0x451C4000 & 0xFFFF) # ori $a2, $a2, 0x4000 -/* 0DD064 7F0AA674 27A402EC */ addiu $a0, $sp, 0x2ec -/* 0DD068 7F0AA678 3C074200 */ lui $a3, 0x4200 -/* 0DD06C 7F0AA67C E7A00010 */ swc1 $f0, 0x10($sp) -/* 0DD070 7F0AA680 E7A20014 */ swc1 $f2, 0x14($sp) -/* 0DD074 7F0AA684 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 0DD078 7F0AA688 E7A20020 */ swc1 $f2, 0x20($sp) -/* 0DD07C 7F0AA68C E7A80018 */ swc1 $f8, 0x18($sp) -/* 0DD080 7F0AA690 0FC166CF */ jal matrix_4x4_set_lookat_target -/* 0DD084 7F0AA694 E7B20024 */ swc1 $f18, 0x24($sp) -/* 0DD088 7F0AA698 27A402EC */ addiu $a0, $sp, 0x2ec -/* 0DD08C 7F0AA69C 27A503BC */ addiu $a1, $sp, 0x3bc -/* 0DD090 7F0AA6A0 0FC1615C */ jal matrix_4x4_multiply -/* 0DD094 7F0AA6A4 27A6037C */ addiu $a2, $sp, 0x37c -/* 0DD098 7F0AA6A8 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0DD09C 7F0AA6AC 44815000 */ mtc1 $at, $f10 -/* 0DD0A0 7F0AA6B0 3C018005 */ lui $at, %hi(D_8005856C) # $at, 0x8005 -/* 0DD0A4 7F0AA6B4 C430CFC0 */ lwc1 $f16, %lo(D_8005856C)($at) -/* 0DD0A8 7F0AA6B8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0DD0AC 7F0AA6BC 44812000 */ mtc1 $at, $f4 -/* 0DD0B0 7F0AA6C0 3C073FA4 */ lui $a3, (0x3FA45519 >> 16) # lui $a3, 0x3fa4 -/* 0DD0B4 7F0AA6C4 34E75519 */ ori $a3, (0x3FA45519 & 0xFFFF) # ori $a3, $a3, 0x5519 -/* 0DD0B8 7F0AA6C8 8FA4053C */ lw $a0, 0x53c($sp) -/* 0DD0BC 7F0AA6CC 27A5036E */ addiu $a1, $sp, 0x36e -/* 0DD0C0 7F0AA6D0 3C064252 */ lui $a2, 0x4252 -/* 0DD0C4 7F0AA6D4 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 0DD0C8 7F0AA6D8 E7B00014 */ swc1 $f16, 0x14($sp) -/* 0DD0CC 7F0AA6DC 0C003DB8 */ jal guPerspective -/* 0DD0D0 7F0AA6E0 E7A40018 */ swc1 $f4, 0x18($sp) -/* 0DD0D4 7F0AA6E4 3C080103 */ lui $t0, (0x01030040 >> 16) # lui $t0, 0x103 -/* 0DD0D8 7F0AA6E8 35080040 */ ori $t0, (0x01030040 & 0xFFFF) # ori $t0, $t0, 0x40 -/* 0DD0DC 7F0AA6EC 02001825 */ move $v1, $s0 -/* 0DD0E0 7F0AA6F0 AC680000 */ sw $t0, ($v1) -/* 0DD0E4 7F0AA6F4 AFA30044 */ sw $v1, 0x44($sp) -/* 0DD0E8 7F0AA6F8 8FA4053C */ lw $a0, 0x53c($sp) -/* 0DD0EC 7F0AA6FC 0C003838 */ jal osVirtualToPhysical -/* 0DD0F0 7F0AA700 26100008 */ addiu $s0, $s0, 8 -/* 0DD0F4 7F0AA704 8FA30044 */ lw $v1, 0x44($sp) -/* 0DD0F8 7F0AA708 02002025 */ move $a0, $s0 -/* 0DD0FC 7F0AA70C 0FC29880 */ jal sub_GAME_7F0A6EE8 -/* 0DD100 7F0AA710 AC620004 */ sw $v0, 4($v1) -/* 0DD104 7F0AA714 3C038004 */ lui $v1, %hi(g_WatchBackgroundGreen) # $v1, 0x8004 -/* 0DD108 7F0AA718 8C63A754 */ lw $v1, %lo(g_WatchBackgroundGreen)($v1) -/* 0DD10C 7F0AA71C 00408025 */ move $s0, $v0 -/* 0DD110 7F0AA720 02002025 */ move $a0, $s0 -/* 0DD114 7F0AA724 286100E0 */ slti $at, $v1, 0xe0 -/* 0DD118 7F0AA728 1020000C */ beqz $at, .L7F0AA75C -/* 0DD11C 7F0AA72C 27A5037C */ addiu $a1, $sp, 0x37c -/* 0DD120 7F0AA730 27AF004C */ addiu $t7, $sp, 0x4c -/* 0DD124 7F0AA734 27A902E2 */ addiu $t1, $sp, 0x2e2 -/* 0DD128 7F0AA738 AFA90014 */ sw $t1, 0x14($sp) -/* 0DD12C 7F0AA73C AFAF0010 */ sw $t7, 0x10($sp) -/* 0DD130 7F0AA740 00402025 */ move $a0, $v0 -/* 0DD134 7F0AA744 27A5037C */ addiu $a1, $sp, 0x37c -/* 0DD138 7F0AA748 2466FFFA */ addiu $a2, $v1, -6 -/* 0DD13C 7F0AA74C 0FC18E98 */ jal sub_GAME_7F06359C -/* 0DD140 7F0AA750 24070001 */ li $a3, 1 -/* 0DD144 7F0AA754 10000007 */ b .L7F0AA774 -/* 0DD148 7F0AA758 00408025 */ move $s0, $v0 -.L7F0AA75C: -/* 0DD14C 7F0AA75C 27AE02E2 */ addiu $t6, $sp, 0x2e2 -/* 0DD150 7F0AA760 AFAE0010 */ sw $t6, 0x10($sp) -/* 0DD154 7F0AA764 24060001 */ li $a2, 1 -/* 0DD158 7F0AA768 0FC1920A */ jal sub_GAME_7F064364 -/* 0DD15C 7F0AA76C 27A7004C */ addiu $a3, $sp, 0x4c -/* 0DD160 7F0AA770 00408025 */ move $s0, $v0 -.L7F0AA774: -/* 0DD164 7F0AA774 0FC29025 */ jal controllerCheckDualControllerTypesAllowed -/* 0DD168 7F0AA778 00000000 */ nop -/* 0DD16C 7F0AA77C 10400005 */ beqz $v0, .L7F0AA794 -/* 0DD170 7F0AA780 00000000 */ nop -/* 0DD174 7F0AA784 0FC2A6C2 */ jal display_text_buttons_dual_control -/* 0DD178 7F0AA788 02002025 */ move $a0, $s0 -/* 0DD17C 7F0AA78C 10000004 */ b .L7F0AA7A0 -/* 0DD180 7F0AA790 00408025 */ move $s0, $v0 -.L7F0AA794: -/* 0DD184 7F0AA794 0FC2A37E */ jal sub_GAME_7F0A9AB8 -/* 0DD188 7F0AA798 02002025 */ move $a0, $s0 -/* 0DD18C 7F0AA79C 00408025 */ move $s0, $v0 -.L7F0AA7A0: -/* 0DD190 7F0AA7A0 8FBF0034 */ lw $ra, 0x34($sp) -/* 0DD194 7F0AA7A4 02001025 */ move $v0, $s0 -/* 0DD198 7F0AA7A8 8FB00030 */ lw $s0, 0x30($sp) -/* 0DD19C 7F0AA7AC 03E00008 */ jr $ra -/* 0DD1A0 7F0AA7B0 27BD0540 */ addiu $sp, $sp, 0x540 -) -#endif - -#endif - - - void reset_controller_options_index(void) { - controller_options_index = 0; + controller_options_index = CONTROLLER_OPTIONS_INDEX_STYLE; } @@ -9652,7 +3454,7 @@ Gfx *draw_watch_control_options_page(Gfx *gdl, Mtx *param_2) { if (check_watch_page_transistion_running() != 1) { - gdl = sub_GAME_7F0AADC0(gdl); + gdl = draw_watch_controller(gdl); pFontFile = ptrFontBankGothic; pFontChars = ptrFontBankGothicChars; @@ -9662,7 +3464,7 @@ Gfx *draw_watch_control_options_page(Gfx *gdl, Mtx *param_2) { sp5C = XOFFSET_1; sp58 = 0x1A; phi_s1 = 0xFF00B0; - if (controller_options_index == 0) + if (controller_options_index == CONTROLLER_OPTIONS_INDEX_STYLE) { phi_s1 = 0xA0FFA0F0; if (watch_item_is_actively_selected != 0) @@ -9673,7 +3475,7 @@ Gfx *draw_watch_control_options_page(Gfx *gdl, Mtx *param_2) { textMeasure(&sp50, &sp54, textptr, pFontChars, pFontFile, 0); - if ((watch_item_is_actively_selected != 0) && (controller_options_index == 0)) + if ((watch_item_is_actively_selected != 0) && (controller_options_index == CONTROLLER_OPTIONS_INDEX_STYLE)) { gdl = textRenderOutlined(gdl, &sp5C, &sp58, textptr, pFontChars, pFontFile, phi_s1, 0x7000A0, sp54 + 1, sp50, 0, 0); } else @@ -9681,7 +3483,7 @@ Gfx *draw_watch_control_options_page(Gfx *gdl, Mtx *param_2) { gdl = textRender(gdl, &sp5C, &sp58, textptr, pFontChars, pFontFile, phi_s1, sp54, sp50, 0, 0); } - gdl = sub_GAME_7F0A97D0(gdl); + gdl = draw_controller_style_text(gdl); textptr = langGet(getStringID(LOPTIONS, OPTION_STR_33_CONTROLLER_LF)); //controller; phi_s1 = 0xFF00B0; @@ -9693,7 +3495,7 @@ Gfx *draw_watch_control_options_page(Gfx *gdl, Mtx *param_2) { sp5C = XOFFSET_1; sp58 = 0x2B; - if (controller_options_index == 1) + if (controller_options_index == CONTROLLER_OPTIONS_INDEX_INPUTS) { phi_s1 = 0xA0FFA0F0; if (watch_item_is_actively_selected != 0) @@ -9704,7 +3506,7 @@ Gfx *draw_watch_control_options_page(Gfx *gdl, Mtx *param_2) { textMeasure(&sp50, &sp54, textptr, pFontChars, pFontFile, 0); - if ((watch_item_is_actively_selected != 0) && (controller_options_index == 1)) + if ((watch_item_is_actively_selected != 0) && (controller_options_index == CONTROLLER_OPTIONS_INDEX_INPUTS)) { gdl = textRenderOutlined(gdl, &sp5C, &sp58, textptr, pFontChars, pFontFile, phi_s1, 0x7000A0, sp54 + 1, sp50, 0, 0); } else @@ -9755,382 +3557,154 @@ void game_option_toggle_input(s32 option_index) } - - -#ifdef NONMATCHING -void sub_GAME_7F0AB908(s32 param_1, u32 param_2, int param_3, s32 param_4) +/** + * Address: 7F0AB908 + * + * Set the color and draw the text for the values of the toggle options. + * For example, draw the "ON" and "OFF" text for the Auto-Aim option, + * but not the "AUTO-AIM" text itself. + * + * Options are highlighted by using the controller to advance up and down the toggle options list, + * but options are not selected until the A button is pressed. + */ +Gfx *draw_toggle_option_values(Gfx *gdl, s32 y, s32 option_index, u32 state) { -// u32 uVar1; - u8 pbVar2; - u32 puVar3; - u32 uVar4; + s32 colour1; + s32 colour2; + s32 colour3; + s32 x1; + s32 x2; + struct game_options *entry; + struct game_options *drawentry; - //s32 puVar5; - s32 puVar6; - s32 puVar7; + colour1 = 0x00800080; + colour2 = 0x00800080; + colour3 = 0x00800080; - u32 local_res0; - u32 local_14; - s32 local_c; + entry = &game_options_entries[option_index]; - puVar7 = 0x800080; - puVar6 = 0x800080; - local_c = 0x800080; - - if (j_text_trigger != 0) + if (j_text_trigger) { - uVar4 = 0xAA; + x1 = 0xAA; + if (1); } else { - uVar4 = 0xB4; + x1 = 0xB4; } - if (j_text_trigger != 0) + if (j_text_trigger) { - local_14 = 0xDC; + x2 = 0xDC; } else { - local_14 = 0xE1; + x2 = 0xE1; } - - //L7F0AB958 - GOOD TEXT - if (param_4 != 0) { - - if (param_4 != 1) { - - if (param_4 != 2) { - - // puVar5 = game_options_entries[param_3]; - // puVar6 = puVar7; - - puVar6 = 0x800080; - puVar7 = 0x800080; - - } else { - - game_option_toggle_input(param_3); - - // puVar5 = game_options_entries[param_3]; - // uVar1 = game_options_entries[param_3].current_value; - - puVar6 = 0x800080; - puVar7 = 0x800080; - - if (game_options_entries[param_3].current_value == 0) { - puVar6 = 0xa0ffa0f0; - } - else { - if (game_options_entries[param_3].current_value == 1) { - puVar7 = 0xa0ffa0f0; - } - else { - if (game_options_entries[param_3].current_value == 2) { - local_c = 0xa0ffa0f0; - } - } - } - } - - } - else { - // puVar5 = game_options_entries[param_3].text; - // uVar1 = game_options_entries[param_3].current_value; - if (game_options_entries[param_3].current_value == 0) { - puVar6 = 0xff00b0; - } - else { - if (game_options_entries[param_3].current_value == 1) { - puVar7 = 0xff00b0; - } - else { - if (game_options_entries[param_3].current_value == 2) { - local_c = 0xff00b0; - } - } - } - } - - } else { - // puVar5 = game_options_entries[param_3].text; - // uVar1 = game_options_entries[param_3].current_value; - - if (game_options_entries[param_3].current_value == 0) { - puVar6 = 0xff00b0; - } - - else { - if (game_options_entries[param_3].current_value == 1) { - puVar7 = 0xff00b0; - } - else { - if (game_options_entries[param_3].current_value == 2) { - local_c = 0xff00b0; - } - } - } - } - - - if (game_options_entries[param_3].text[3] == 0) + // Option is unhighlighted + if (state == 0) { - uVar4 = 0xC8; - if (j_text_trigger != 0) - { - uVar4 = 0xBE; - } + goto state_unhighlighted; + } + // Option is highlighted + else if (state == 1) + { + goto state_highlighted; + } + // Option is selected + else if (state == 2) + { + goto state_selected; + } + goto after_state; - if (j_text_trigger != 0) +state_unhighlighted: + entry = &game_options_entries[option_index]; + if (entry->current_value == 0) + { + colour1 = 0x00FF00B0; + } + else if (entry->current_value == 1) + { + colour2 = 0x00FF00B0; + } + else if (entry->current_value == 2) + { + colour3 = 0x00FF00B0; + } + goto after_state; + +/** + * Sets color of the active value of the highlighted option. + * These use the same colors as the active values of the unhighlighted options, + * so changing the highlighted option has no visual effect. + */ +state_highlighted: + entry = &game_options_entries[option_index]; + if (entry->current_value == 0) + { + colour1 = 0x00FF00B0; + } + else if (entry->current_value == 1) + { + colour2 = 0x00FF00B0; + } + else if (entry->current_value == 2) + { + colour3 = 0x00FF00B0; + } + goto after_state; + +/** + * Make the active value of the selected option extra bright. + */ +state_selected: + game_option_toggle_input(option_index); + entry = &game_options_entries[option_index]; + if (entry->current_value == 0) + { + colour1 = 0xA0FFA0F0; + } + else if (entry->current_value == 1) + { + colour2 = 0xA0FFA0F0; + } + else if (entry->current_value == 2) + { + colour3 = 0xA0FFA0F0; + } + +after_state: + if (entry->text[3] == 0) + { + if (j_text_trigger) { - local_14 = 0xFA; + x1 = 0xBE; } else { - local_14 = 0xFA; + x1 = 0xC8; } - } + if (j_text_trigger) + { + // This weird code must be kept on one line for matching. + x2 = 0xFA; } else { x2 = 0xFA; } + } + drawentry = entry; - pbVar2 = langGet(game_options_entries[param_3].text[1]); - puVar3 = proc_7F0A9398(param_1, uVar4, param_2, pbVar2, puVar6, 0, 0xffffffff,1,0, 0x3000B0,0); - //arg0 = sub_GAME_7F0A9398(arg0, phi_a1_2, arg1, langGet(game_options_entries[PLAYER_OPTION_AUTOAIM].text, phi_a1_2, arg2), phi_t1, 0, -1, 1, 0, 0x3000B0, 0); + gdl = draw_options_labels(gdl, x1, y, langGet(drawentry->text[1]), colour1, 0, -1, 1, 0, 0x3000B0, 0); // Draw text of option's first value e.g. "Full" for the Screen option. + gdl = draw_options_labels(gdl, x2, y, langGet(drawentry->text[2]), colour2, 0, -1, 1, 0, 0x3000B0, 0); // Draw text of option's second value e.g. "Wide" for the Screen option. - pbVar2 = langGet(game_options_entries[param_3].text[2]); - local_res0 = proc_7F0A9398(puVar3, local_14, param_2, pbVar2, puVar7,0,0xffffffff,1,0, 0x3000B0, 0); + if (drawentry->text[3]) + { + gdl = draw_options_labels(gdl, 0x10E, y, langGet(drawentry->text[3]), colour3, 0, -1, 1, 0, 0x3000B0, 0); // Draw text of option's third value e.g. "Cinema" for the Screen option. + } - if (game_options_entries[param_3].text[3] != 0) { - pbVar2 = langGet(game_options_entries[param_3].text[3]); - local_res0 = proc_7F0A9398(local_res0, 0x10e, param_2, pbVar2, local_c,0,0xffffffff,1,0, 0x3000B0, 0); - } - - //return local_res0; + return gdl; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AB908 -/* 0E0438 7F0AB908 3C038005 */ lui $v1, %hi(j_text_trigger) -/* 0E043C 7F0AB90C 8C6384D0 */ lw $v1, %lo(j_text_trigger)($v1) -/* 0E0440 7F0AB910 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0E0444 7F0AB914 3C020080 */ lui $v0, 0x80 -/* 0E0448 7F0AB918 344A0080 */ ori $t2, $v0, 0x80 -/* 0E044C 7F0AB91C AFBF0034 */ sw $ra, 0x34($sp) -/* 0E0450 7F0AB920 AFA40060 */ sw $a0, 0x60($sp) -/* 0E0454 7F0AB924 AFA50064 */ sw $a1, 0x64($sp) -/* 0E0458 7F0AB928 01404825 */ move $t1, $t2 -/* 0E045C 7F0AB92C 10600003 */ beqz $v1, .L7F0AB93C -/* 0E0460 7F0AB930 AFAA0054 */ sw $t2, 0x54($sp) -/* 0E0464 7F0AB934 10000002 */ b .L7F0AB940 -/* 0E0468 7F0AB938 240500AA */ li $a1, 170 -.L7F0AB93C: -/* 0E046C 7F0AB93C 240500B4 */ li $a1, 180 -.L7F0AB940: -/* 0E0470 7F0AB940 10600004 */ beqz $v1, .L7F0AB954 -/* 0E0474 7F0AB944 240F00E1 */ li $t7, 225 -/* 0E0478 7F0AB948 240E00DC */ li $t6, 220 -/* 0E047C 7F0AB94C 10000002 */ b .L7F0AB958 -/* 0E0480 7F0AB950 AFAE004C */ sw $t6, 0x4c($sp) -.L7F0AB954: -/* 0E0484 7F0AB954 AFAF004C */ sw $t7, 0x4c($sp) -.L7F0AB958: -/* 0E0488 7F0AB958 10E0000D */ beqz $a3, .L7F0AB990 -/* 0E048C 7F0AB95C 00065880 */ sll $t3, $a2, 2 -/* 0E0490 7F0AB960 24030001 */ li $v1, 1 -/* 0E0494 7F0AB964 10E30020 */ beq $a3, $v1, .L7F0AB9E8 -/* 0E0498 7F0AB968 00067080 */ sll $t6, $a2, 2 -/* 0E049C 7F0AB96C 24010002 */ li $at, 2 -/* 0E04A0 7F0AB970 10E10032 */ beq $a3, $at, .L7F0ABA3C -/* 0E04A4 7F0AB974 0006C080 */ sll $t8, $a2, 2 -/* 0E04A8 7F0AB978 0306C023 */ subu $t8, $t8, $a2 -/* 0E04AC 7F0AB97C 3C198004 */ lui $t9, %hi(game_options_entries) -/* 0E04B0 7F0AB980 27390A7C */ addiu $t9, %lo(game_options_entries) # addiu $t9, $t9, 0xa7c -/* 0E04B4 7F0AB984 0018C080 */ sll $t8, $t8, 2 -/* 0E04B8 7F0AB988 1000004B */ b .L7F0ABAB8 -/* 0E04BC 7F0AB98C 03194021 */ addu $t0, $t8, $t9 -.L7F0AB990: -/* 0E04C0 7F0AB990 01665823 */ subu $t3, $t3, $a2 -/* 0E04C4 7F0AB994 3C0C8004 */ lui $t4, %hi(game_options_entries) -/* 0E04C8 7F0AB998 258C0A7C */ addiu $t4, %lo(game_options_entries) # addiu $t4, $t4, 0xa7c -/* 0E04CC 7F0AB99C 000B5880 */ sll $t3, $t3, 2 -/* 0E04D0 7F0AB9A0 016C4021 */ addu $t0, $t3, $t4 -/* 0E04D4 7F0AB9A4 8D020008 */ lw $v0, 8($t0) -/* 0E04D8 7F0AB9A8 24030001 */ li $v1, 1 -/* 0E04DC 7F0AB9AC 14400004 */ bnez $v0, .L7F0AB9C0 -/* 0E04E0 7F0AB9B0 00000000 */ nop -/* 0E04E4 7F0AB9B4 3C0900FF */ lui $t1, (0x00FF00B0 >> 16) # lui $t1, 0xff -/* 0E04E8 7F0AB9B8 1000003F */ b .L7F0ABAB8 -/* 0E04EC 7F0AB9BC 352900B0 */ ori $t1, (0x00FF00B0 & 0xFFFF) # ori $t1, $t1, 0xb0 -.L7F0AB9C0: -/* 0E04F0 7F0AB9C0 14620004 */ bne $v1, $v0, .L7F0AB9D4 -/* 0E04F4 7F0AB9C4 24010002 */ li $at, 2 -/* 0E04F8 7F0AB9C8 3C0A00FF */ lui $t2, (0x00FF00B0 >> 16) # lui $t2, 0xff -/* 0E04FC 7F0AB9CC 1000003A */ b .L7F0ABAB8 -/* 0E0500 7F0AB9D0 354A00B0 */ ori $t2, (0x00FF00B0 & 0xFFFF) # ori $t2, $t2, 0xb0 -.L7F0AB9D4: -/* 0E0504 7F0AB9D4 14410038 */ bne $v0, $at, .L7F0ABAB8 -/* 0E0508 7F0AB9D8 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0E050C 7F0AB9DC 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0E0510 7F0AB9E0 10000035 */ b .L7F0ABAB8 -/* 0E0514 7F0AB9E4 AFAD0054 */ sw $t5, 0x54($sp) -.L7F0AB9E8: -/* 0E0518 7F0AB9E8 01C67023 */ subu $t6, $t6, $a2 -/* 0E051C 7F0AB9EC 3C0F8004 */ lui $t7, %hi(game_options_entries) -/* 0E0520 7F0AB9F0 25EF0A7C */ addiu $t7, %lo(game_options_entries) # addiu $t7, $t7, 0xa7c -/* 0E0524 7F0AB9F4 000E7080 */ sll $t6, $t6, 2 -/* 0E0528 7F0AB9F8 01CF4021 */ addu $t0, $t6, $t7 -/* 0E052C 7F0AB9FC 8D020008 */ lw $v0, 8($t0) -/* 0E0530 7F0ABA00 14400004 */ bnez $v0, .L7F0ABA14 -/* 0E0534 7F0ABA04 00000000 */ nop -/* 0E0538 7F0ABA08 3C0900FF */ lui $t1, (0x00FF00B0 >> 16) # lui $t1, 0xff -/* 0E053C 7F0ABA0C 1000002A */ b .L7F0ABAB8 -/* 0E0540 7F0ABA10 352900B0 */ ori $t1, (0x00FF00B0 & 0xFFFF) # ori $t1, $t1, 0xb0 -.L7F0ABA14: -/* 0E0544 7F0ABA14 14620004 */ bne $v1, $v0, .L7F0ABA28 -/* 0E0548 7F0ABA18 24010002 */ li $at, 2 -/* 0E054C 7F0ABA1C 3C0A00FF */ lui $t2, (0x00FF00B0 >> 16) # lui $t2, 0xff -/* 0E0550 7F0ABA20 10000025 */ b .L7F0ABAB8 -/* 0E0554 7F0ABA24 354A00B0 */ ori $t2, (0x00FF00B0 & 0xFFFF) # ori $t2, $t2, 0xb0 -.L7F0ABA28: -/* 0E0558 7F0ABA28 14410023 */ bne $v0, $at, .L7F0ABAB8 -/* 0E055C 7F0ABA2C 3C1800FF */ lui $t8, (0x00FF00B0 >> 16) # lui $t8, 0xff -/* 0E0560 7F0ABA30 371800B0 */ ori $t8, (0x00FF00B0 & 0xFFFF) # ori $t8, $t8, 0xb0 -/* 0E0564 7F0ABA34 10000020 */ b .L7F0ABAB8 -/* 0E0568 7F0ABA38 AFB80054 */ sw $t8, 0x54($sp) -.L7F0ABA3C: -/* 0E056C 7F0ABA3C 00C02025 */ move $a0, $a2 -/* 0E0570 7F0ABA40 AFA50050 */ sw $a1, 0x50($sp) -/* 0E0574 7F0ABA44 AFA60068 */ sw $a2, 0x68($sp) -/* 0E0578 7F0ABA48 AFA9005C */ sw $t1, 0x5c($sp) -/* 0E057C 7F0ABA4C 0FC2ADF6 */ jal game_option_toggle_input -/* 0E0580 7F0ABA50 AFAA0058 */ sw $t2, 0x58($sp) -/* 0E0584 7F0ABA54 8FA60068 */ lw $a2, 0x68($sp) -/* 0E0588 7F0ABA58 3C0B8004 */ lui $t3, %hi(game_options_entries) -/* 0E058C 7F0ABA5C 256B0A7C */ addiu $t3, %lo(game_options_entries) # addiu $t3, $t3, 0xa7c -/* 0E0590 7F0ABA60 0006C880 */ sll $t9, $a2, 2 -/* 0E0594 7F0ABA64 0326C823 */ subu $t9, $t9, $a2 -/* 0E0598 7F0ABA68 0019C880 */ sll $t9, $t9, 2 -/* 0E059C 7F0ABA6C 032B4021 */ addu $t0, $t9, $t3 -/* 0E05A0 7F0ABA70 8D020008 */ lw $v0, 8($t0) -/* 0E05A4 7F0ABA74 24030001 */ li $v1, 1 -/* 0E05A8 7F0ABA78 8FA50050 */ lw $a1, 0x50($sp) -/* 0E05AC 7F0ABA7C 8FA9005C */ lw $t1, 0x5c($sp) -/* 0E05B0 7F0ABA80 14400004 */ bnez $v0, .L7F0ABA94 -/* 0E05B4 7F0ABA84 8FAA0058 */ lw $t2, 0x58($sp) -/* 0E05B8 7F0ABA88 3C09A0FF */ lui $t1, (0xA0FFA0F0 >> 16) # lui $t1, 0xa0ff -/* 0E05BC 7F0ABA8C 1000000A */ b .L7F0ABAB8 -/* 0E05C0 7F0ABA90 3529A0F0 */ ori $t1, (0xA0FFA0F0 & 0xFFFF) # ori $t1, $t1, 0xa0f0 -.L7F0ABA94: -/* 0E05C4 7F0ABA94 14620004 */ bne $v1, $v0, .L7F0ABAA8 -/* 0E05C8 7F0ABA98 24010002 */ li $at, 2 -/* 0E05CC 7F0ABA9C 3C0AA0FF */ lui $t2, (0xA0FFA0F0 >> 16) # lui $t2, 0xa0ff -/* 0E05D0 7F0ABAA0 10000005 */ b .L7F0ABAB8 -/* 0E05D4 7F0ABAA4 354AA0F0 */ ori $t2, (0xA0FFA0F0 & 0xFFFF) # ori $t2, $t2, 0xa0f0 -.L7F0ABAA8: -/* 0E05D8 7F0ABAA8 14410003 */ bne $v0, $at, .L7F0ABAB8 -/* 0E05DC 7F0ABAAC 3C0CA0FF */ lui $t4, (0xA0FFA0F0 >> 16) # lui $t4, 0xa0ff -/* 0E05E0 7F0ABAB0 358CA0F0 */ ori $t4, (0xA0FFA0F0 & 0xFFFF) # ori $t4, $t4, 0xa0f0 -/* 0E05E4 7F0ABAB4 AFAC0054 */ sw $t4, 0x54($sp) -.L7F0ABAB8: -/* 0E05E8 7F0ABAB8 950D0006 */ lhu $t5, 6($t0) -/* 0E05EC 7F0ABABC 15A0000D */ bnez $t5, .L7F0ABAF4 -/* 0E05F0 7F0ABAC0 3C038005 */ lui $v1, %hi(j_text_trigger) -/* 0E05F4 7F0ABAC4 8C6384D0 */ lw $v1, %lo(j_text_trigger)($v1) -/* 0E05F8 7F0ABAC8 240500C8 */ li $a1, 200 -/* 0E05FC 7F0ABACC 240F00FA */ li $t7, 250 -/* 0E0600 7F0ABAD0 10600003 */ beqz $v1, .L7F0ABAE0 -/* 0E0604 7F0ABAD4 240E00FA */ li $t6, 250 -/* 0E0608 7F0ABAD8 10000001 */ b .L7F0ABAE0 -/* 0E060C 7F0ABADC 240500BE */ li $a1, 190 -.L7F0ABAE0: -/* 0E0610 7F0ABAE0 50600004 */ beql $v1, $zero, .L7F0ABAF4 -/* 0E0614 7F0ABAE4 AFAF004C */ sw $t7, 0x4c($sp) -/* 0E0618 7F0ABAE8 10000002 */ b .L7F0ABAF4 -/* 0E061C 7F0ABAEC AFAE004C */ sw $t6, 0x4c($sp) -/* 0E0620 7F0ABAF0 AFAF004C */ sw $t7, 0x4c($sp) -.L7F0ABAF4: -/* 0E0624 7F0ABAF4 95040002 */ lhu $a0, 2($t0) -/* 0E0628 7F0ABAF8 AFA50050 */ sw $a1, 0x50($sp) -/* 0E062C 7F0ABAFC AFA8003C */ sw $t0, 0x3c($sp) -/* 0E0630 7F0ABB00 AFA9005C */ sw $t1, 0x5c($sp) -/* 0E0634 7F0ABB04 0FC30776 */ jal langGet -/* 0E0638 7F0ABB08 AFAA0058 */ sw $t2, 0x58($sp) -/* 0E063C 7F0ABB0C 8FA9005C */ lw $t1, 0x5c($sp) -/* 0E0640 7F0ABB10 3C0B0030 */ lui $t3, (0x003000B0 >> 16) # lui $t3, 0x30 -/* 0E0644 7F0ABB14 356B00B0 */ ori $t3, (0x003000B0 & 0xFFFF) # ori $t3, $t3, 0xb0 -/* 0E0648 7F0ABB18 2418FFFF */ li $t8, -1 -/* 0E064C 7F0ABB1C 24190001 */ li $t9, 1 -/* 0E0650 7F0ABB20 AFB9001C */ sw $t9, 0x1c($sp) -/* 0E0654 7F0ABB24 AFB80018 */ sw $t8, 0x18($sp) -/* 0E0658 7F0ABB28 AFAB0024 */ sw $t3, 0x24($sp) -/* 0E065C 7F0ABB2C 8FA50050 */ lw $a1, 0x50($sp) -/* 0E0660 7F0ABB30 8FA40060 */ lw $a0, 0x60($sp) -/* 0E0664 7F0ABB34 8FA60064 */ lw $a2, 0x64($sp) -/* 0E0668 7F0ABB38 00403825 */ move $a3, $v0 -/* 0E066C 7F0ABB3C AFA00014 */ sw $zero, 0x14($sp) -/* 0E0670 7F0ABB40 AFA00020 */ sw $zero, 0x20($sp) -/* 0E0674 7F0ABB44 AFA00028 */ sw $zero, 0x28($sp) -/* 0E0678 7F0ABB48 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0E067C 7F0ABB4C AFA90010 */ sw $t1, 0x10($sp) -/* 0E0680 7F0ABB50 8FA8003C */ lw $t0, 0x3c($sp) -/* 0E0684 7F0ABB54 AFA20060 */ sw $v0, 0x60($sp) -/* 0E0688 7F0ABB58 0FC30776 */ jal langGet -/* 0E068C 7F0ABB5C 95040004 */ lhu $a0, 4($t0) -/* 0E0690 7F0ABB60 8FAA0058 */ lw $t2, 0x58($sp) -/* 0E0694 7F0ABB64 3C0E0030 */ lui $t6, (0x003000B0 >> 16) # lui $t6, 0x30 -/* 0E0698 7F0ABB68 35CE00B0 */ ori $t6, (0x003000B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0E069C 7F0ABB6C 240CFFFF */ li $t4, -1 -/* 0E06A0 7F0ABB70 240D0001 */ li $t5, 1 -/* 0E06A4 7F0ABB74 AFAD001C */ sw $t5, 0x1c($sp) -/* 0E06A8 7F0ABB78 AFAC0018 */ sw $t4, 0x18($sp) -/* 0E06AC 7F0ABB7C AFAE0024 */ sw $t6, 0x24($sp) -/* 0E06B0 7F0ABB80 8FA40060 */ lw $a0, 0x60($sp) -/* 0E06B4 7F0ABB84 8FA5004C */ lw $a1, 0x4c($sp) -/* 0E06B8 7F0ABB88 8FA60064 */ lw $a2, 0x64($sp) -/* 0E06BC 7F0ABB8C 00403825 */ move $a3, $v0 -/* 0E06C0 7F0ABB90 AFA00014 */ sw $zero, 0x14($sp) -/* 0E06C4 7F0ABB94 AFA00020 */ sw $zero, 0x20($sp) -/* 0E06C8 7F0ABB98 AFA00028 */ sw $zero, 0x28($sp) -/* 0E06CC 7F0ABB9C 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0E06D0 7F0ABBA0 AFAA0010 */ sw $t2, 0x10($sp) -/* 0E06D4 7F0ABBA4 8FA8003C */ lw $t0, 0x3c($sp) -/* 0E06D8 7F0ABBA8 AFA20060 */ sw $v0, 0x60($sp) -/* 0E06DC 7F0ABBAC 95030006 */ lhu $v1, 6($t0) -/* 0E06E0 7F0ABBB0 50600016 */ beql $v1, $zero, .L7F0ABC0C -/* 0E06E4 7F0ABBB4 8FBF0034 */ lw $ra, 0x34($sp) -/* 0E06E8 7F0ABBB8 0FC30776 */ jal langGet -/* 0E06EC 7F0ABBBC 00602025 */ move $a0, $v1 -/* 0E06F0 7F0ABBC0 8FAF0054 */ lw $t7, 0x54($sp) -/* 0E06F4 7F0ABBC4 3C0B0030 */ lui $t3, (0x003000B0 >> 16) # lui $t3, 0x30 -/* 0E06F8 7F0ABBC8 356B00B0 */ ori $t3, (0x003000B0 & 0xFFFF) # ori $t3, $t3, 0xb0 -/* 0E06FC 7F0ABBCC 2418FFFF */ li $t8, -1 -/* 0E0700 7F0ABBD0 24190001 */ li $t9, 1 -/* 0E0704 7F0ABBD4 AFB9001C */ sw $t9, 0x1c($sp) -/* 0E0708 7F0ABBD8 AFB80018 */ sw $t8, 0x18($sp) -/* 0E070C 7F0ABBDC AFAB0024 */ sw $t3, 0x24($sp) -/* 0E0710 7F0ABBE0 8FA40060 */ lw $a0, 0x60($sp) -/* 0E0714 7F0ABBE4 2405010E */ li $a1, 270 -/* 0E0718 7F0ABBE8 8FA60064 */ lw $a2, 0x64($sp) -/* 0E071C 7F0ABBEC 00403825 */ move $a3, $v0 -/* 0E0720 7F0ABBF0 AFA00014 */ sw $zero, 0x14($sp) -/* 0E0724 7F0ABBF4 AFA00020 */ sw $zero, 0x20($sp) -/* 0E0728 7F0ABBF8 AFA00028 */ sw $zero, 0x28($sp) -/* 0E072C 7F0ABBFC 0FC2A4E6 */ jal sub_GAME_7F0A9398 -/* 0E0730 7F0ABC00 AFAF0010 */ sw $t7, 0x10($sp) -/* 0E0734 7F0ABC04 AFA20060 */ sw $v0, 0x60($sp) -/* 0E0738 7F0ABC08 8FBF0034 */ lw $ra, 0x34($sp) -.L7F0ABC0C: -/* 0E073C 7F0ABC0C 8FA20060 */ lw $v0, 0x60($sp) -/* 0E0740 7F0ABC10 27BD0060 */ addiu $sp, $sp, 0x60 -/* 0E0744 7F0ABC14 03E00008 */ jr $ra -/* 0E0748 7F0ABC18 00000000 */ nop -) -#endif - - - Gfx *draw_toggle_options(Gfx *gdl) @@ -10144,19 +3718,21 @@ Gfx *draw_toggle_options(Gfx *gdl) if ( i == game_options_index - 2) { + // Draw option that is highlighted and selected, if there is one. if (watch_item_is_actively_selected) { - gdl = sub_GAME_7F0AB908(sub_GAME_7F0A9398(gdl, XOFFSET_1, y_offset, langGet(game_options_entries[i].text[0]), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0), y_offset, i, 2); + gdl = draw_toggle_option_values(draw_options_labels(gdl, XOFFSET_1, y_offset, langGet(game_options_entries[i].text[0]), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0), y_offset, i, 2); } + // Draw option that is highlighted but not selected, if there is one. else { - - gdl = sub_GAME_7F0AB908(sub_GAME_7F0A9398(gdl, XOFFSET_1, y_offset, langGet(game_options_entries[i].text[0]), 0xA0FFA0F0, 0, -1, 0, 0, 0x3000B0, 0), y_offset, i, 1); + gdl = draw_toggle_option_values(draw_options_labels(gdl, XOFFSET_1, y_offset, langGet(game_options_entries[i].text[0]), 0xA0FFA0F0, 0, -1, 0, 0, 0x3000B0, 0), y_offset, i, 1); } } + // Draw the options that are neither highlighted nor selected. else { - gdl = sub_GAME_7F0AB908(sub_GAME_7F0A9398(gdl, XOFFSET_1, y_offset, langGet(game_options_entries[i].text[0]), 0xFF00B0, 0, -1, 0, 0, 0x3000B0, 0), y_offset, i, 0); + gdl = draw_toggle_option_values(draw_options_labels(gdl, XOFFSET_1, y_offset, langGet(game_options_entries[i].text[0]), 0xFF00B0, 0, -1, 0, 0, 0x3000B0, 0), y_offset, i, 0); } } @@ -10180,8 +3756,8 @@ Gfx *draw_watch_game_options_page(Gfx *gdl, Mtx *param_2) { if (check_watch_page_transistion_running() != 1) { - gdl = sub_GAME_7F0A91C8(gdl); - gdl = sub_GAME_7F0A8FEC(gdl); + gdl = draw_music_volume_slider(gdl); + gdl = draw_fx_volume_slider(gdl); pFontFile = ptrFontBankGothic; pFontChars = ptrFontBankGothicChars; gdl = microcode_constructor(gdl); @@ -10297,58 +3873,238 @@ u8 *sub_GAME_7F0AC120(u8 *arg) } -#ifdef NONMATCHING -void draw_watch_mission_briefing_page(void) { - -} -#else +#if defined(VERSION_EU) //D:800577C0 -const char D_800577C0[] = "\n"; -//these 2 blocks are wrong splits most likely, investigate and cleanup -#if defined(LEFTOVERDEBUG) -//D:800577C4 -const u32 D_800577C4[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0 -}; -//D:80057FC0 -const u32 D_80057FC0[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; +const char D_800577C0[] = "\n"; #endif + + +Gfx *draw_watch_mission_briefing_page(Gfx *gdl, Mtx *param_2) +{ + gdl = draw_background_health_and_armor(gdl, param_2, 0); + + if (check_watch_page_transistion_running() != 1) + { + /** + * spDAC, spDA4, spD68 are unused. + * Maybe vestigial tables for formatting the briefings. + */ + s32 spDAC[15] = {0x34, 0x2f, 0x2d, 0x2a, 0x28, 0x25, 0x25, 0x28, 0x2a, 0x2d, 0x2f, 0x34, 0x37, 0x40, -1}; + s32 spDA4[2] = {0x4b, -1}; + s32 spD68[15] = {0x10e, 0x113, 0x116, 0x119, 0x11a, 0x11b, 0x11b, 0x11a, 0x119, 0x116, 0x113, 0x10e, 0x108, 0xfe, -1}; + + s32 boxLeft; + s32 boxTop; + s32 boxRight; + s32 boxBottom; + s32 textHeight = 0; + s32 textWidth = 0; + + struct font *font = ptrFontBankGothic; + struct fontchar *chars = ptrFontBankGothicChars; + +#if defined(VERSION_EU) + char wrappedText[3000]; +#else + char wrappedText[3000] = "\n"; +#endif + + char pageTitle[0x20]; + char *completeText; + char *incompleteText; + char *failedText; + char *titleText; + + s32 lineCount; + s32 objectiveRow; + s32 objY; + s32 objX; + + completeText = langGet(0xac28); + incompleteText = langGet(0xac29); + failedText = langGet(0xac37); + titleText = get_ptr_text_for_watch_breifing_page(BRIEFING_TITLE); + +#if defined(VERSION_EU) + strcpy(wrappedText, D_800577C0); +#endif + + gdl = microcode_constructor(gdl); + textMeasure(&textHeight, &textWidth, titleText, chars, font, 0); + + boxLeft = ((0xaa - textWidth) / 2) + 0x4b; + boxTop = 0x1e; + boxRight = boxLeft + textWidth; + boxBottom = boxTop + textHeight; + + gdl = draw_blackbox_to_screen(gdl, &boxLeft, &boxTop, &boxRight, &boxBottom); + gdl = textRender(gdl, &boxLeft, &boxTop, titleText, chars, font, 0xa0ffa0f0, textWidth, textHeight, 0, 0); + + boxLeft = 0x41; + + switch (mission_brief_index) + { + case BRIEF_INDEX_BACKGROUND: + sprintf(pageTitle, langGet(0xac38)); + textWrap(0xd2, get_ptr_text_for_watch_breifing_page(BRIEFING_OVERVIEW), wrappedText, chars, font); + mission_brief_background_navigation(); + break; + + case BRIEF_INDEX_M: + sprintf(pageTitle, langGet(0xac39)); + textWrap(0xd2, get_ptr_text_for_watch_breifing_page(BRIEFING_M), wrappedText, chars, font); + mission_brief_m_briefing_navigation(); + break; + + case BRIEF_INDEX_Q: + sprintf(pageTitle, langGet(0xac3a)); + textWrap(0xd2, get_ptr_text_for_watch_breifing_page(BRIEFING_Q), wrappedText, chars, font); + mission_brief_q_branch_navigation(); + break; + + case BRIEF_INDEX_MONEYPENNY: + sprintf(pageTitle, langGet(0xac3b)); + textWrap(0xd2, get_ptr_text_for_watch_breifing_page(BRIEFING_MONEYPENNY), wrappedText, chars, font); + mission_brief_moneypenny_navigation(); + break; + + case BRIEF_INDEX_OBJECTIVES: + { +#if defined(VERSION_EU) + char objectiveBuffer[200]; +#else + char objectiveBuffer[200] = ""; +#endif + u32 colour; + s32 i; + s32 j; + char *objectiveText; + s32 visibleObjectiveIndex; + s32 pad; + char *objectiveLetterPtr; + + lineCount = 1; + objectiveRow = 0; + visibleObjectiveIndex = 0; + + setTextOverlapCorrection((j_text_trigger) ? (1) : (5)); + sprintf(pageTitle, langGet(0xac3c)); + + for (i = 0; i < objectiveGetCount(); i++) + { + if (get_difficulty_for_objective(i) <= lvlGetSelectedDifficulty()) + { + objectiveText = get_text_for_objective(i); + objectiveBuffer[0] = '\0'; + + for (j = 0; j < lineCount; j++) + { + strcat(objectiveBuffer, D_80058440); + } + + for (j = 0; j < objectiveRow; j++) + { + strcat(objectiveBuffer, D_80058444); + } + + objectiveLetterPtr = objectiveBuffer + strlen(objectiveBuffer); + + sprintf(objectiveLetterPtr, aC_2, visibleObjectiveIndex + 'a'); + strcat(objectiveBuffer, objectiveText); + + objY = boxTop + ((j_text_trigger) ? (1) : (5)); + objX = 0x3c; + + gdl = textRender(gdl, &objX, &objY, objectiveBuffer, chars, font, 0x00ff00b0, viGetX(), viGetY(), 0, 10); + lineCount += sub_GAME_7F0AC0E8(objectiveLetterPtr); + textMeasure(&textHeight, &textWidth, sub_GAME_7F0AC120(objectiveLetterPtr), chars, font, 10); + + if ((textWidth + 0x3c) < (viGetX() / 2)) + { + lineCount--; + } + + objectiveBuffer[0] = '\0'; + + for (j = 0; j < lineCount; j++) + { + strcat(objectiveBuffer, D_80058450); + } + for (j = 0; j < objectiveRow; j++) + { + strcat(objectiveBuffer, D_80058454); + } + + switch (get_status_of_objective(i)) + { + case OBJECTIVESTATUS_INCOMPLETE: + strcat(objectiveBuffer, incompleteText); + colour = (D_80040AFC << 16) | 0x400040ff; + break; + + case OBJECTIVESTATUS_COMPLETE: + strcat(objectiveBuffer, completeText); + colour = 0xa0ffa0f0; + break; + + case OBJECTIVESTATUS_FAILED: + strcat(objectiveBuffer, failedText); + + if (j_text_trigger) + { + colour = 0xa0ffa0f0; + } + else + { + colour = 0x00ff00b0; + } + break; + + default: + break; + } + + textMeasure(&textHeight, &textWidth, objectiveBuffer, chars, font, 10); + objY = boxTop + ((j_text_trigger) ? (1) : (5)); + + if (j_text_trigger) + { + objX = 0xf5 - textWidth; + } + else + { + objX = 0xaf; + } + + gdl = textRender(gdl, &objX, &objY, objectiveBuffer, chars, font, colour, 0xd2, viGetY(), 0, 10); + + objectiveRow++; + visibleObjectiveIndex++; + } + } + + setTextOverlapCorrection(-1); + mission_brief_objectives_navigation(); + + break; + + } + } + + textMeasure(&textHeight, &textWidth, pageTitle, chars, font, 10); + gdl = textRender(gdl, &boxLeft, &boxTop, pageTitle, chars, font, 0xa0ffa0f0, 0xd2, 0x82, 0, 10); + + boxTop += 5; + boxLeft = 0x3c; + + textMeasure(&textHeight, &textWidth, wrappedText, chars, font, 10); + gdl = textRender(gdl, &boxLeft, &boxTop, wrappedText, chars, font, 0x00ff00b0, viGetX(), viGetY(), 0, 10); + } + + return gdl; +} + + //D:80058440 const char D_80058440[] = " \n"; //D:80058444 @@ -10360,1212 +4116,11 @@ const char D_80058450[] = " \n"; //D:80058454 const char D_80058454[] = " \n\n"; -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -/*D:80058570*/ -glabel jpt_80058570 -.word .L7F0AC3B8 -.word .L7F0AC400 -.word .L7F0AC448 -.word .L7F0AC490 -.word .L7F0AC4D8 - -.text -glabel draw_watch_mission_briefing_page -/* 0E0C98 7F0AC168 27BDF218 */ addiu $sp, $sp, -0xde8 -/* 0E0C9C 7F0AC16C AFBF005C */ sw $ra, 0x5c($sp) -/* 0E0CA0 7F0AC170 AFBE0058 */ sw $fp, 0x58($sp) -/* 0E0CA4 7F0AC174 AFB70054 */ sw $s7, 0x54($sp) -/* 0E0CA8 7F0AC178 AFB60050 */ sw $s6, 0x50($sp) -/* 0E0CAC 7F0AC17C AFB5004C */ sw $s5, 0x4c($sp) -/* 0E0CB0 7F0AC180 AFB40048 */ sw $s4, 0x48($sp) -/* 0E0CB4 7F0AC184 AFB30044 */ sw $s3, 0x44($sp) -/* 0E0CB8 7F0AC188 AFB20040 */ sw $s2, 0x40($sp) -/* 0E0CBC 7F0AC18C AFB1003C */ sw $s1, 0x3c($sp) -/* 0E0CC0 7F0AC190 AFB00038 */ sw $s0, 0x38($sp) -/* 0E0CC4 7F0AC194 0FC29C53 */ jal draw_background_health_and_armor -/* 0E0CC8 7F0AC198 00003025 */ move $a2, $zero -/* 0E0CCC 7F0AC19C 0FC1F97F */ jal check_watch_page_transistion_running -/* 0E0CD0 7F0AC1A0 AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0E0CD4 7F0AC1A4 24010001 */ li $at, 1 -/* 0E0CD8 7F0AC1A8 10410212 */ beq $v0, $at, .L7F0AC9F4 -/* 0E0CDC 7F0AC1AC 27AE0DAC */ addiu $t6, $sp, 0xdac -/* 0E0CE0 7F0AC1B0 3C0F8004 */ lui $t7, %hi(D_80040DFC) -/* 0E0CE4 7F0AC1B4 25EF0DFC */ addiu $t7, %lo(D_80040DFC) # addiu $t7, $t7, 0xdfc -/* 0E0CE8 7F0AC1B8 25F9003C */ addiu $t9, $t7, 0x3c -.L7F0AC1BC: -/* 0E0CEC 7F0AC1BC 8DE10000 */ lw $at, ($t7) -/* 0E0CF0 7F0AC1C0 25EF000C */ addiu $t7, $t7, 0xc -/* 0E0CF4 7F0AC1C4 25CE000C */ addiu $t6, $t6, 0xc -/* 0E0CF8 7F0AC1C8 ADC1FFF4 */ sw $at, -0xc($t6) -/* 0E0CFC 7F0AC1CC 8DE1FFF8 */ lw $at, -8($t7) -/* 0E0D00 7F0AC1D0 ADC1FFF8 */ sw $at, -8($t6) -/* 0E0D04 7F0AC1D4 8DE1FFFC */ lw $at, -4($t7) -/* 0E0D08 7F0AC1D8 15F9FFF8 */ bne $t7, $t9, .L7F0AC1BC -/* 0E0D0C 7F0AC1DC ADC1FFFC */ sw $at, -4($t6) -/* 0E0D10 7F0AC1E0 3C098004 */ lui $t1, %hi(D_80040E38) -/* 0E0D14 7F0AC1E4 25290E38 */ addiu $t1, %lo(D_80040E38) # addiu $t1, $t1, 0xe38 -/* 0E0D18 7F0AC1E8 8D210000 */ lw $at, ($t1) -/* 0E0D1C 7F0AC1EC 8D2B0004 */ lw $t3, 4($t1) -/* 0E0D20 7F0AC1F0 27A80DA4 */ addiu $t0, $sp, 0xda4 -/* 0E0D24 7F0AC1F4 3C0D8004 */ lui $t5, %hi(D_80040E40) -/* 0E0D28 7F0AC1F8 25AD0E40 */ addiu $t5, %lo(D_80040E40) # addiu $t5, $t5, 0xe40 -/* 0E0D2C 7F0AC1FC 25B9003C */ addiu $t9, $t5, 0x3c -/* 0E0D30 7F0AC200 27AC0D68 */ addiu $t4, $sp, 0xd68 -/* 0E0D34 7F0AC204 AD010000 */ sw $at, ($t0) -/* 0E0D38 7F0AC208 AD0B0004 */ sw $t3, 4($t0) -.L7F0AC20C: -/* 0E0D3C 7F0AC20C 8DA10000 */ lw $at, ($t5) -/* 0E0D40 7F0AC210 25AD000C */ addiu $t5, $t5, 0xc -/* 0E0D44 7F0AC214 258C000C */ addiu $t4, $t4, 0xc -/* 0E0D48 7F0AC218 AD81FFF4 */ sw $at, -0xc($t4) -/* 0E0D4C 7F0AC21C 8DA1FFF8 */ lw $at, -8($t5) -/* 0E0D50 7F0AC220 AD81FFF8 */ sw $at, -8($t4) -/* 0E0D54 7F0AC224 8DA1FFFC */ lw $at, -4($t5) -/* 0E0D58 7F0AC228 15B9FFF8 */ bne $t5, $t9, .L7F0AC20C -/* 0E0D5C 7F0AC22C AD81FFFC */ sw $at, -4($t4) -/* 0E0D60 7F0AC230 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) -/* 0E0D64 7F0AC234 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) -/* 0E0D68 7F0AC238 8DEF0EAC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0E0D6C 7F0AC23C 8DCE0EB0 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0E0D70 7F0AC240 3C088005 */ lui $t0, %hi(D_800577C0) -/* 0E0D74 7F0AC244 250877C0 */ addiu $t0, %lo(D_800577C0) # addiu $t0, $t0, 0x77c0 -/* 0E0D78 7F0AC248 AFA00D54 */ sw $zero, 0xd54($sp) -/* 0E0D7C 7F0AC24C AFA00D50 */ sw $zero, 0xd50($sp) -/* 0E0D80 7F0AC250 25180BB8 */ addiu $t8, $t0, 0xbb8 -/* 0E0D84 7F0AC254 27AA0190 */ addiu $t2, $sp, 0x190 -/* 0E0D88 7F0AC258 AFAF0D4C */ sw $t7, 0xd4c($sp) -/* 0E0D8C 7F0AC25C AFAE0D48 */ sw $t6, 0xd48($sp) -.L7F0AC260: -/* 0E0D90 7F0AC260 8D010000 */ lw $at, ($t0) -/* 0E0D94 7F0AC264 2508000C */ addiu $t0, $t0, 0xc -/* 0E0D98 7F0AC268 254A000C */ addiu $t2, $t2, 0xc -/* 0E0D9C 7F0AC26C AD41FFF4 */ sw $at, -0xc($t2) -/* 0E0DA0 7F0AC270 8D01FFF8 */ lw $at, -8($t0) -/* 0E0DA4 7F0AC274 AD41FFF8 */ sw $at, -8($t2) -/* 0E0DA8 7F0AC278 8D01FFFC */ lw $at, -4($t0) -/* 0E0DAC 7F0AC27C 1518FFF8 */ bne $t0, $t8, .L7F0AC260 -/* 0E0DB0 7F0AC280 AD41FFFC */ sw $at, -4($t2) -/* 0E0DB4 7F0AC284 0FC30776 */ jal langGet -/* 0E0DB8 7F0AC288 3404AC28 */ li $a0, 44072 -/* 0E0DBC 7F0AC28C AFA2016C */ sw $v0, 0x16c($sp) -/* 0E0DC0 7F0AC290 0FC30776 */ jal langGet -/* 0E0DC4 7F0AC294 3404AC29 */ li $a0, 44073 -/* 0E0DC8 7F0AC298 AFA20168 */ sw $v0, 0x168($sp) -/* 0E0DCC 7F0AC29C 0FC30776 */ jal langGet -/* 0E0DD0 7F0AC2A0 3404AC37 */ li $a0, 44087 -/* 0E0DD4 7F0AC2A4 AFA20164 */ sw $v0, 0x164($sp) -/* 0E0DD8 7F0AC2A8 0FC15C41 */ jal get_ptr_text_for_watch_breifing_page -/* 0E0DDC 7F0AC2AC 00002025 */ move $a0, $zero -/* 0E0DE0 7F0AC2B0 00408025 */ move $s0, $v0 -/* 0E0DE4 7F0AC2B4 0FC2B366 */ jal microcode_constructor -/* 0E0DE8 7F0AC2B8 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0E0DEC 7F0AC2BC 8FB90D4C */ lw $t9, 0xd4c($sp) -/* 0E0DF0 7F0AC2C0 AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0E0DF4 7F0AC2C4 27A40D54 */ addiu $a0, $sp, 0xd54 -/* 0E0DF8 7F0AC2C8 27A50D50 */ addiu $a1, $sp, 0xd50 -/* 0E0DFC 7F0AC2CC 02003025 */ move $a2, $s0 -/* 0E0E00 7F0AC2D0 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0E0E04 7F0AC2D4 AFA00014 */ sw $zero, 0x14($sp) -/* 0E0E08 7F0AC2D8 0FC2BA63 */ jal textMeasure -/* 0E0E0C 7F0AC2DC AFB90010 */ sw $t9, 0x10($sp) -/* 0E0E10 7F0AC2E0 8FA20D50 */ lw $v0, 0xd50($sp) -/* 0E0E14 7F0AC2E4 240D00AA */ li $t5, 170 -/* 0E0E18 7F0AC2E8 8FAB0D54 */ lw $t3, 0xd54($sp) -/* 0E0E1C 7F0AC2EC 01A21823 */ subu $v1, $t5, $v0 -/* 0E0E20 7F0AC2F0 04610003 */ bgez $v1, .L7F0AC300 -/* 0E0E24 7F0AC2F4 00036043 */ sra $t4, $v1, 1 -/* 0E0E28 7F0AC2F8 24610001 */ addiu $at, $v1, 1 -/* 0E0E2C 7F0AC2FC 00016043 */ sra $t4, $at, 1 -.L7F0AC300: -/* 0E0E30 7F0AC300 2583004B */ addiu $v1, $t4, 0x4b -/* 0E0E34 7F0AC304 240F001E */ li $t7, 30 -/* 0E0E38 7F0AC308 27B80D58 */ addiu $t8, $sp, 0xd58 -/* 0E0E3C 7F0AC30C 00627021 */ addu $t6, $v1, $v0 -/* 0E0E40 7F0AC310 2569001E */ addiu $t1, $t3, 0x1e -/* 0E0E44 7F0AC314 AFAF0D60 */ sw $t7, 0xd60($sp) -/* 0E0E48 7F0AC318 AFAE0D5C */ sw $t6, 0xd5c($sp) -/* 0E0E4C 7F0AC31C AFA90D58 */ sw $t1, 0xd58($sp) -/* 0E0E50 7F0AC320 AFB80010 */ sw $t8, 0x10($sp) -/* 0E0E54 7F0AC324 AFA30D64 */ sw $v1, 0xd64($sp) -/* 0E0E58 7F0AC328 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0E0E5C 7F0AC32C 27A50D64 */ addiu $a1, $sp, 0xd64 -/* 0E0E60 7F0AC330 27A60D60 */ addiu $a2, $sp, 0xd60 -/* 0E0E64 7F0AC334 0FC2B3D3 */ jal draw_blackbox_to_screen -/* 0E0E68 7F0AC338 27A70D5C */ addiu $a3, $sp, 0xd5c -/* 0E0E6C 7F0AC33C 8FA80D48 */ lw $t0, 0xd48($sp) -/* 0E0E70 7F0AC340 8FAA0D4C */ lw $t2, 0xd4c($sp) -/* 0E0E74 7F0AC344 8FAD0D50 */ lw $t5, 0xd50($sp) -/* 0E0E78 7F0AC348 8FAC0D54 */ lw $t4, 0xd54($sp) -/* 0E0E7C 7F0AC34C 3C19A0FF */ lui $t9, (0xA0FFA0F0 >> 16) # lui $t9, 0xa0ff -/* 0E0E80 7F0AC350 3739A0F0 */ ori $t9, (0xA0FFA0F0 & 0xFFFF) # ori $t9, $t9, 0xa0f0 -/* 0E0E84 7F0AC354 AFB90018 */ sw $t9, 0x18($sp) -/* 0E0E88 7F0AC358 00402025 */ move $a0, $v0 -/* 0E0E8C 7F0AC35C 27A50D64 */ addiu $a1, $sp, 0xd64 -/* 0E0E90 7F0AC360 27A60D60 */ addiu $a2, $sp, 0xd60 -/* 0E0E94 7F0AC364 02003825 */ move $a3, $s0 -/* 0E0E98 7F0AC368 AFA00024 */ sw $zero, 0x24($sp) -/* 0E0E9C 7F0AC36C AFA00028 */ sw $zero, 0x28($sp) -/* 0E0EA0 7F0AC370 AFA80010 */ sw $t0, 0x10($sp) -/* 0E0EA4 7F0AC374 AFAA0014 */ sw $t2, 0x14($sp) -/* 0E0EA8 7F0AC378 AFAD001C */ sw $t5, 0x1c($sp) -/* 0E0EAC 7F0AC37C 0FC2B6AF */ jal textRender -/* 0E0EB0 7F0AC380 AFAC0020 */ sw $t4, 0x20($sp) -/* 0E0EB4 7F0AC384 3C0F8004 */ lui $t7, %hi(mission_brief_index) -/* 0E0EB8 7F0AC388 8DEF09A0 */ lw $t7, %lo(mission_brief_index)($t7) -/* 0E0EBC 7F0AC38C 24030041 */ li $v1, 65 -/* 0E0EC0 7F0AC390 AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0E0EC4 7F0AC394 2DE10005 */ sltiu $at, $t7, 5 -/* 0E0EC8 7F0AC398 10200154 */ beqz $at, .L7F0AC8EC -/* 0E0ECC 7F0AC39C AFA30D64 */ sw $v1, 0xd64($sp) -/* 0E0ED0 7F0AC3A0 000F7880 */ sll $t7, $t7, 2 -/* 0E0ED4 7F0AC3A4 3C018006 */ lui $at, %hi(jpt_80058570) -/* 0E0ED8 7F0AC3A8 002F0821 */ addu $at, $at, $t7 -/* 0E0EDC 7F0AC3AC 8C2F8570 */ lw $t7, %lo(jpt_80058570)($at) -/* 0E0EE0 7F0AC3B0 01E00008 */ jr $t7 -/* 0E0EE4 7F0AC3B4 00000000 */ nop -.L7F0AC3B8: -/* 0E0EE8 7F0AC3B8 0FC30776 */ jal langGet -/* 0E0EEC 7F0AC3BC 3404AC38 */ li $a0, 44088 -/* 0E0EF0 7F0AC3C0 27A40170 */ addiu $a0, $sp, 0x170 -/* 0E0EF4 7F0AC3C4 0C002B25 */ jal sprintf -/* 0E0EF8 7F0AC3C8 00402825 */ move $a1, $v0 -/* 0E0EFC 7F0AC3CC 0FC15C41 */ jal get_ptr_text_for_watch_breifing_page -/* 0E0F00 7F0AC3D0 24040001 */ li $a0, 1 -/* 0E0F04 7F0AC3D4 8FAE0D4C */ lw $t6, 0xd4c($sp) -/* 0E0F08 7F0AC3D8 240400D2 */ li $a0, 210 -/* 0E0F0C 7F0AC3DC 00402825 */ move $a1, $v0 -/* 0E0F10 7F0AC3E0 27A60190 */ addiu $a2, $sp, 0x190 -/* 0E0F14 7F0AC3E4 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0E0F18 7F0AC3E8 0FC2BAD9 */ jal textWrap -/* 0E0F1C 7F0AC3EC AFAE0010 */ sw $t6, 0x10($sp) -/* 0E0F20 7F0AC3F0 0FC29986 */ jal mission_brief_background_navigation -/* 0E0F24 7F0AC3F4 00000000 */ nop -/* 0E0F28 7F0AC3F8 1000013D */ b .L7F0AC8F0 -/* 0E0F2C 7F0AC3FC 8FAA0D4C */ lw $t2, 0xd4c($sp) -.L7F0AC400: -/* 0E0F30 7F0AC400 0FC30776 */ jal langGet -/* 0E0F34 7F0AC404 3404AC39 */ li $a0, 44089 -/* 0E0F38 7F0AC408 27A40170 */ addiu $a0, $sp, 0x170 -/* 0E0F3C 7F0AC40C 0C002B25 */ jal sprintf -/* 0E0F40 7F0AC410 00402825 */ move $a1, $v0 -/* 0E0F44 7F0AC414 0FC15C41 */ jal get_ptr_text_for_watch_breifing_page -/* 0E0F48 7F0AC418 24040002 */ li $a0, 2 -/* 0E0F4C 7F0AC41C 8FAB0D4C */ lw $t3, 0xd4c($sp) -/* 0E0F50 7F0AC420 240400D2 */ li $a0, 210 -/* 0E0F54 7F0AC424 00402825 */ move $a1, $v0 -/* 0E0F58 7F0AC428 27A60190 */ addiu $a2, $sp, 0x190 -/* 0E0F5C 7F0AC42C 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0E0F60 7F0AC430 0FC2BAD9 */ jal textWrap -/* 0E0F64 7F0AC434 AFAB0010 */ sw $t3, 0x10($sp) -/* 0E0F68 7F0AC438 0FC299A8 */ jal mission_brief_m_briefing_navigation -/* 0E0F6C 7F0AC43C 00000000 */ nop -/* 0E0F70 7F0AC440 1000012B */ b .L7F0AC8F0 -/* 0E0F74 7F0AC444 8FAA0D4C */ lw $t2, 0xd4c($sp) -.L7F0AC448: -/* 0E0F78 7F0AC448 0FC30776 */ jal langGet -/* 0E0F7C 7F0AC44C 3404AC3A */ li $a0, 44090 -/* 0E0F80 7F0AC450 27A40170 */ addiu $a0, $sp, 0x170 -/* 0E0F84 7F0AC454 0C002B25 */ jal sprintf -/* 0E0F88 7F0AC458 00402825 */ move $a1, $v0 -/* 0E0F8C 7F0AC45C 0FC15C41 */ jal get_ptr_text_for_watch_breifing_page -/* 0E0F90 7F0AC460 24040003 */ li $a0, 3 -/* 0E0F94 7F0AC464 8FA90D4C */ lw $t1, 0xd4c($sp) -/* 0E0F98 7F0AC468 240400D2 */ li $a0, 210 -/* 0E0F9C 7F0AC46C 00402825 */ move $a1, $v0 -/* 0E0FA0 7F0AC470 27A60190 */ addiu $a2, $sp, 0x190 -/* 0E0FA4 7F0AC474 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0E0FA8 7F0AC478 0FC2BAD9 */ jal textWrap -/* 0E0FAC 7F0AC47C AFA90010 */ sw $t1, 0x10($sp) -/* 0E0FB0 7F0AC480 0FC299CB */ jal mission_brief_q_branch_navigation -/* 0E0FB4 7F0AC484 00000000 */ nop -/* 0E0FB8 7F0AC488 10000119 */ b .L7F0AC8F0 -/* 0E0FBC 7F0AC48C 8FAA0D4C */ lw $t2, 0xd4c($sp) -.L7F0AC490: -/* 0E0FC0 7F0AC490 0FC30776 */ jal langGet -/* 0E0FC4 7F0AC494 3404AC3B */ li $a0, 44091 -/* 0E0FC8 7F0AC498 27A40170 */ addiu $a0, $sp, 0x170 -/* 0E0FCC 7F0AC49C 0C002B25 */ jal sprintf -/* 0E0FD0 7F0AC4A0 00402825 */ move $a1, $v0 -/* 0E0FD4 7F0AC4A4 0FC15C41 */ jal get_ptr_text_for_watch_breifing_page -/* 0E0FD8 7F0AC4A8 24040004 */ li $a0, 4 -/* 0E0FDC 7F0AC4AC 8FB80D4C */ lw $t8, 0xd4c($sp) -/* 0E0FE0 7F0AC4B0 240400D2 */ li $a0, 210 -/* 0E0FE4 7F0AC4B4 00402825 */ move $a1, $v0 -/* 0E0FE8 7F0AC4B8 27A60190 */ addiu $a2, $sp, 0x190 -/* 0E0FEC 7F0AC4BC 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0E0FF0 7F0AC4C0 0FC2BAD9 */ jal textWrap -/* 0E0FF4 7F0AC4C4 AFB80010 */ sw $t8, 0x10($sp) -/* 0E0FF8 7F0AC4C8 0FC299EF */ jal mission_brief_moneypenny_navigation -/* 0E0FFC 7F0AC4CC 00000000 */ nop -/* 0E1000 7F0AC4D0 10000107 */ b .L7F0AC8F0 -/* 0E1004 7F0AC4D4 8FAA0D4C */ lw $t2, 0xd4c($sp) -.L7F0AC4D8: -/* 0E1008 7F0AC4D8 3C088006 */ lui $t0, %hi(D_80057FC0+0x3B8) -/* 0E100C 7F0AC4DC 27B10088 */ addiu $s1, $sp, 0x88 -/* 0E1010 7F0AC4E0 25088378 */ addiu $t0, %lo(D_80057FC0+0x3B8) # addiu $t0, $t0, -0x7c88 -/* 0E1014 7F0AC4E4 250D00C0 */ addiu $t5, $t0, 0xc0 -/* 0E1018 7F0AC4E8 02206025 */ move $t4, $s1 -.L7F0AC4EC: -/* 0E101C 7F0AC4EC 8D010000 */ lw $at, ($t0) -/* 0E1020 7F0AC4F0 2508000C */ addiu $t0, $t0, 0xc -/* 0E1024 7F0AC4F4 258C000C */ addiu $t4, $t4, 0xc -/* 0E1028 7F0AC4F8 AD81FFF4 */ sw $at, -0xc($t4) -/* 0E102C 7F0AC4FC 8D01FFF8 */ lw $at, -8($t0) -/* 0E1030 7F0AC500 AD81FFF8 */ sw $at, -8($t4) -/* 0E1034 7F0AC504 8D01FFFC */ lw $at, -4($t0) -/* 0E1038 7F0AC508 150DFFF8 */ bne $t0, $t5, .L7F0AC4EC -/* 0E103C 7F0AC50C AD81FFFC */ sw $at, -4($t4) -/* 0E1040 7F0AC510 8D010000 */ lw $at, ($t0) -/* 0E1044 7F0AC514 3C0F8005 */ lui $t7, %hi(j_text_trigger) -/* 0E1048 7F0AC518 24120001 */ li $s2, 1 -/* 0E104C 7F0AC51C AD810000 */ sw $at, ($t4) -/* 0E1050 7F0AC520 8D0D0004 */ lw $t5, 4($t0) -/* 0E1054 7F0AC524 00009825 */ move $s3, $zero -/* 0E1058 7F0AC528 24040005 */ li $a0, 5 -/* 0E105C 7F0AC52C AD8D0004 */ sw $t5, 4($t4) -/* 0E1060 7F0AC530 8DEF84D0 */ lw $t7, %lo(j_text_trigger)($t7) -/* 0E1064 7F0AC534 AFA00074 */ sw $zero, 0x74($sp) -/* 0E1068 7F0AC538 11E00003 */ beqz $t7, .L7F0AC548 -/* 0E106C 7F0AC53C 00000000 */ nop -/* 0E1070 7F0AC540 10000001 */ b .L7F0AC548 -/* 0E1074 7F0AC544 24040001 */ li $a0, 1 -.L7F0AC548: -/* 0E1078 7F0AC548 0FC2B2E8 */ jal setTextOverlapCorrection -/* 0E107C 7F0AC54C 00000000 */ nop -/* 0E1080 7F0AC550 0FC30776 */ jal langGet -/* 0E1084 7F0AC554 3404AC3C */ li $a0, 44092 -/* 0E1088 7F0AC558 27A40170 */ addiu $a0, $sp, 0x170 -/* 0E108C 7F0AC55C 0C002B25 */ jal sprintf -/* 0E1090 7F0AC560 00402825 */ move $a1, $v0 -/* 0E1094 7F0AC564 0FC15C6A */ jal objectiveGetCount -/* 0E1098 7F0AC568 0000F025 */ move $fp, $zero -/* 0E109C 7F0AC56C 184000DB */ blez $v0, .L7F0AC8DC -/* 0E10A0 7F0AC570 3C178006 */ lui $s7, %hi(D_80058454) -/* 0E10A4 7F0AC574 3C168006 */ lui $s6, %hi(D_80058450) -/* 0E10A8 7F0AC578 3C158006 */ lui $s5, %hi(D_80058444) -/* 0E10AC 7F0AC57C 3C148006 */ lui $s4, %hi(D_80058440) -/* 0E10B0 7F0AC580 26948440 */ addiu $s4, %lo(D_80058440) # addiu $s4, $s4, -0x7bc0 -/* 0E10B4 7F0AC584 26B58444 */ addiu $s5, %lo(D_80058444) # addiu $s5, $s5, -0x7bbc -/* 0E10B8 7F0AC588 26D68450 */ addiu $s6, %lo(D_80058450) # addiu $s6, $s6, -0x7bb0 -/* 0E10BC 7F0AC58C 26F78454 */ addiu $s7, %lo(D_80058454) # addiu $s7, $s7, -0x7bac -.L7F0AC590: -/* 0E10C0 7F0AC590 0FC15C81 */ jal get_difficulty_for_objective -/* 0E10C4 7F0AC594 03C02025 */ move $a0, $fp -/* 0E10C8 7F0AC598 0FC2FF04 */ jal lvlGetSelectedDifficulty -/* 0E10CC 7F0AC59C AFA20068 */ sw $v0, 0x68($sp) -/* 0E10D0 7F0AC5A0 8FA40068 */ lw $a0, 0x68($sp) -/* 0E10D4 7F0AC5A4 0044082A */ slt $at, $v0, $a0 -/* 0E10D8 7F0AC5A8 142000C7 */ bnez $at, .L7F0AC8C8 -/* 0E10DC 7F0AC5AC 03C02025 */ move $a0, $fp -/* 0E10E0 7F0AC5B0 0FC15C6E */ jal get_text_for_objective -/* 0E10E4 7F0AC5B4 00008025 */ move $s0, $zero -/* 0E10E8 7F0AC5B8 AFA20078 */ sw $v0, 0x78($sp) -/* 0E10EC 7F0AC5BC 1A400008 */ blez $s2, .L7F0AC5E0 -/* 0E10F0 7F0AC5C0 A3A00088 */ sb $zero, 0x88($sp) -/* 0E10F4 7F0AC5C4 02202025 */ move $a0, $s1 -.L7F0AC5C8: -/* 0E10F8 7F0AC5C8 0C0029FF */ jal strcat -/* 0E10FC 7F0AC5CC 02802825 */ move $a1, $s4 -/* 0E1100 7F0AC5D0 26100001 */ addiu $s0, $s0, 1 -/* 0E1104 7F0AC5D4 5612FFFC */ bnel $s0, $s2, .L7F0AC5C8 -/* 0E1108 7F0AC5D8 02202025 */ move $a0, $s1 -/* 0E110C 7F0AC5DC 00008025 */ move $s0, $zero -.L7F0AC5E0: -/* 0E1110 7F0AC5E0 1A600007 */ blez $s3, .L7F0AC600 -/* 0E1114 7F0AC5E4 02202025 */ move $a0, $s1 -.L7F0AC5E8: -/* 0E1118 7F0AC5E8 0C0029FF */ jal strcat -/* 0E111C 7F0AC5EC 02A02825 */ move $a1, $s5 -/* 0E1120 7F0AC5F0 26100001 */ addiu $s0, $s0, 1 -/* 0E1124 7F0AC5F4 5613FFFC */ bnel $s0, $s3, .L7F0AC5E8 -/* 0E1128 7F0AC5F8 02202025 */ move $a0, $s1 -/* 0E112C 7F0AC5FC 00008025 */ move $s0, $zero -.L7F0AC600: -/* 0E1130 7F0AC600 0C004E1F */ jal strlen -/* 0E1134 7F0AC604 02202025 */ move $a0, $s1 -/* 0E1138 7F0AC608 8FA60074 */ lw $a2, 0x74($sp) -/* 0E113C 7F0AC60C 00512021 */ addu $a0, $v0, $s1 -/* 0E1140 7F0AC610 3C058006 */ lui $a1, %hi(aC_2) -/* 0E1144 7F0AC614 AFA4006C */ sw $a0, 0x6c($sp) -/* 0E1148 7F0AC618 24A58448 */ addiu $a1, %lo(aC_2) # addiu $a1, $a1, -0x7bb8 -/* 0E114C 7F0AC61C 0C002B25 */ jal sprintf -/* 0E1150 7F0AC620 24C60061 */ addiu $a2, $a2, 0x61 -/* 0E1154 7F0AC624 02202025 */ move $a0, $s1 -/* 0E1158 7F0AC628 0C0029FF */ jal strcat -/* 0E115C 7F0AC62C 8FA50078 */ lw $a1, 0x78($sp) -/* 0E1160 7F0AC630 3C0E8005 */ lui $t6, %hi(j_text_trigger) -/* 0E1164 7F0AC634 8DCE84D0 */ lw $t6, %lo(j_text_trigger)($t6) -/* 0E1168 7F0AC638 8FAB0D60 */ lw $t3, 0xd60($sp) -/* 0E116C 7F0AC63C 24040005 */ li $a0, 5 -/* 0E1170 7F0AC640 11C00003 */ beqz $t6, .L7F0AC650 -/* 0E1174 7F0AC644 2418003C */ li $t8, 60 -/* 0E1178 7F0AC648 10000001 */ b .L7F0AC650 -/* 0E117C 7F0AC64C 24040001 */ li $a0, 1 -.L7F0AC650: -/* 0E1180 7F0AC650 008B4821 */ addu $t1, $a0, $t3 -/* 0E1184 7F0AC654 AFA90154 */ sw $t1, 0x154($sp) -/* 0E1188 7F0AC658 0C001107 */ jal viGetX -/* 0E118C 7F0AC65C AFB80150 */ sw $t8, 0x150($sp) -/* 0E1190 7F0AC660 0C00110B */ jal viGetY -/* 0E1194 7F0AC664 A7A20064 */ sh $v0, 0x64($sp) -/* 0E1198 7F0AC668 8FB90D48 */ lw $t9, 0xd48($sp) -/* 0E119C 7F0AC66C 8FAA0D4C */ lw $t2, 0xd4c($sp) -/* 0E11A0 7F0AC670 87A80064 */ lh $t0, 0x64($sp) -/* 0E11A4 7F0AC674 3C0D00FF */ lui $t5, (0x00FF00B0 >> 16) # lui $t5, 0xff -/* 0E11A8 7F0AC678 35AD00B0 */ ori $t5, (0x00FF00B0 & 0xFFFF) # ori $t5, $t5, 0xb0 -/* 0E11AC 7F0AC67C 240C000A */ li $t4, 10 -/* 0E11B0 7F0AC680 AFAC0028 */ sw $t4, 0x28($sp) -/* 0E11B4 7F0AC684 AFAD0018 */ sw $t5, 0x18($sp) -/* 0E11B8 7F0AC688 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0E11BC 7F0AC68C 27A50150 */ addiu $a1, $sp, 0x150 -/* 0E11C0 7F0AC690 27A60154 */ addiu $a2, $sp, 0x154 -/* 0E11C4 7F0AC694 02203825 */ move $a3, $s1 -/* 0E11C8 7F0AC698 AFA20020 */ sw $v0, 0x20($sp) -/* 0E11CC 7F0AC69C AFA00024 */ sw $zero, 0x24($sp) -/* 0E11D0 7F0AC6A0 AFB90010 */ sw $t9, 0x10($sp) -/* 0E11D4 7F0AC6A4 AFAA0014 */ sw $t2, 0x14($sp) -/* 0E11D8 7F0AC6A8 0FC2B6AF */ jal textRender -/* 0E11DC 7F0AC6AC AFA8001C */ sw $t0, 0x1c($sp) -/* 0E11E0 7F0AC6B0 AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0E11E4 7F0AC6B4 0FC2B03A */ jal sub_GAME_7F0AC0E8 -/* 0E11E8 7F0AC6B8 8FA4006C */ lw $a0, 0x6c($sp) -/* 0E11EC 7F0AC6BC 02429021 */ addu $s2, $s2, $v0 -/* 0E11F0 7F0AC6C0 0FC2B048 */ jal sub_GAME_7F0AC120 -/* 0E11F4 7F0AC6C4 8FA4006C */ lw $a0, 0x6c($sp) -/* 0E11F8 7F0AC6C8 8FAF0D4C */ lw $t7, 0xd4c($sp) -/* 0E11FC 7F0AC6CC 240E000A */ li $t6, 10 -/* 0E1200 7F0AC6D0 AFAE0014 */ sw $t6, 0x14($sp) -/* 0E1204 7F0AC6D4 27A40D54 */ addiu $a0, $sp, 0xd54 -/* 0E1208 7F0AC6D8 27A50D50 */ addiu $a1, $sp, 0xd50 -/* 0E120C 7F0AC6DC 00403025 */ move $a2, $v0 -/* 0E1210 7F0AC6E0 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0E1214 7F0AC6E4 0FC2BA63 */ jal textMeasure -/* 0E1218 7F0AC6E8 AFAF0010 */ sw $t7, 0x10($sp) -/* 0E121C 7F0AC6EC 0C001107 */ jal viGetX -/* 0E1220 7F0AC6F0 00000000 */ nop -/* 0E1224 7F0AC6F4 8FA90D50 */ lw $t1, 0xd50($sp) -/* 0E1228 7F0AC6F8 04410003 */ bgez $v0, .L7F0AC708 -/* 0E122C 7F0AC6FC 00025843 */ sra $t3, $v0, 1 -/* 0E1230 7F0AC700 24410001 */ addiu $at, $v0, 1 -/* 0E1234 7F0AC704 00015843 */ sra $t3, $at, 1 -.L7F0AC708: -/* 0E1238 7F0AC708 2538003C */ addiu $t8, $t1, 0x3c -/* 0E123C 7F0AC70C 030B082A */ slt $at, $t8, $t3 -/* 0E1240 7F0AC710 10200002 */ beqz $at, .L7F0AC71C -/* 0E1244 7F0AC714 00000000 */ nop -/* 0E1248 7F0AC718 2652FFFF */ addiu $s2, $s2, -1 -.L7F0AC71C: -/* 0E124C 7F0AC71C 1A400008 */ blez $s2, .L7F0AC740 -/* 0E1250 7F0AC720 A3A00088 */ sb $zero, 0x88($sp) -/* 0E1254 7F0AC724 02202025 */ move $a0, $s1 -.L7F0AC728: -/* 0E1258 7F0AC728 0C0029FF */ jal strcat -/* 0E125C 7F0AC72C 02C02825 */ move $a1, $s6 -/* 0E1260 7F0AC730 26100001 */ addiu $s0, $s0, 1 -/* 0E1264 7F0AC734 5612FFFC */ bnel $s0, $s2, .L7F0AC728 -/* 0E1268 7F0AC738 02202025 */ move $a0, $s1 -/* 0E126C 7F0AC73C 00008025 */ move $s0, $zero -.L7F0AC740: -/* 0E1270 7F0AC740 1A600006 */ blez $s3, .L7F0AC75C -/* 0E1274 7F0AC744 02202025 */ move $a0, $s1 -.L7F0AC748: -/* 0E1278 7F0AC748 0C0029FF */ jal strcat -/* 0E127C 7F0AC74C 02E02825 */ move $a1, $s7 -/* 0E1280 7F0AC750 26100001 */ addiu $s0, $s0, 1 -/* 0E1284 7F0AC754 5613FFFC */ bnel $s0, $s3, .L7F0AC748 -/* 0E1288 7F0AC758 02202025 */ move $a0, $s1 -.L7F0AC75C: -/* 0E128C 7F0AC75C 0FC15C8E */ jal get_status_of_objective -/* 0E1290 7F0AC760 03C02025 */ move $a0, $fp -/* 0E1294 7F0AC764 10400009 */ beqz $v0, .L7F0AC78C -/* 0E1298 7F0AC768 02202025 */ move $a0, $s1 -/* 0E129C 7F0AC76C 24010001 */ li $at, 1 -/* 0E12A0 7F0AC770 10410010 */ beq $v0, $at, .L7F0AC7B4 -/* 0E12A4 7F0AC774 02202025 */ move $a0, $s1 -/* 0E12A8 7F0AC778 24010002 */ li $at, 2 -/* 0E12AC 7F0AC77C 10410014 */ beq $v0, $at, .L7F0AC7D0 -/* 0E12B0 7F0AC780 02202025 */ move $a0, $s1 -/* 0E12B4 7F0AC784 1000001F */ b .L7F0AC804 -/* 0E12B8 7F0AC788 8FA90D4C */ lw $t1, 0xd4c($sp) -.L7F0AC78C: -/* 0E12BC 7F0AC78C 0C0029FF */ jal strcat -/* 0E12C0 7F0AC790 8FA50168 */ lw $a1, 0x168($sp) -/* 0E12C4 7F0AC794 3C198004 */ lui $t9, %hi(D_80040AFC) -/* 0E12C8 7F0AC798 8F390AFC */ lw $t9, %lo(D_80040AFC)($t9) -/* 0E12CC 7F0AC79C 3C014000 */ lui $at, (0x400040FF >> 16) # lui $at, 0x4000 -/* 0E12D0 7F0AC7A0 342140FF */ ori $at, (0x400040FF & 0xFFFF) # ori $at, $at, 0x40ff -/* 0E12D4 7F0AC7A4 00195400 */ sll $t2, $t9, 0x10 -/* 0E12D8 7F0AC7A8 01416825 */ or $t5, $t2, $at -/* 0E12DC 7F0AC7AC 10000014 */ b .L7F0AC800 -/* 0E12E0 7F0AC7B0 AFAD0084 */ sw $t5, 0x84($sp) -.L7F0AC7B4: -/* 0E12E4 7F0AC7B4 3C08A0FF */ lui $t0, (0xA0FFA0F0 >> 16) # lui $t0, 0xa0ff -/* 0E12E8 7F0AC7B8 3508A0F0 */ ori $t0, (0xA0FFA0F0 & 0xFFFF) # ori $t0, $t0, 0xa0f0 -/* 0E12EC 7F0AC7BC AFA80084 */ sw $t0, 0x84($sp) -/* 0E12F0 7F0AC7C0 0C0029FF */ jal strcat -/* 0E12F4 7F0AC7C4 8FA5016C */ lw $a1, 0x16c($sp) -/* 0E12F8 7F0AC7C8 1000000E */ b .L7F0AC804 -/* 0E12FC 7F0AC7CC 8FA90D4C */ lw $t1, 0xd4c($sp) -.L7F0AC7D0: -/* 0E1300 7F0AC7D0 0C0029FF */ jal strcat -/* 0E1304 7F0AC7D4 8FA50164 */ lw $a1, 0x164($sp) -/* 0E1308 7F0AC7D8 3C0C8005 */ lui $t4, %hi(j_text_trigger) -/* 0E130C 7F0AC7DC 8D8C84D0 */ lw $t4, %lo(j_text_trigger)($t4) -/* 0E1310 7F0AC7E0 3C0E00FF */ lui $t6, (0x00FF00B0 >> 16) # lui $t6, 0xff -/* 0E1314 7F0AC7E4 3C0FA0FF */ lui $t7, (0xA0FFA0F0 >> 16) # lui $t7, 0xa0ff -/* 0E1318 7F0AC7E8 11800004 */ beqz $t4, .L7F0AC7FC -/* 0E131C 7F0AC7EC 35CE00B0 */ ori $t6, (0x00FF00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0E1320 7F0AC7F0 35EFA0F0 */ ori $t7, (0xA0FFA0F0 & 0xFFFF) # ori $t7, $t7, 0xa0f0 -/* 0E1324 7F0AC7F4 10000002 */ b .L7F0AC800 -/* 0E1328 7F0AC7F8 AFAF0084 */ sw $t7, 0x84($sp) -.L7F0AC7FC: -/* 0E132C 7F0AC7FC AFAE0084 */ sw $t6, 0x84($sp) -.L7F0AC800: -/* 0E1330 7F0AC800 8FA90D4C */ lw $t1, 0xd4c($sp) -.L7F0AC804: -/* 0E1334 7F0AC804 240B000A */ li $t3, 10 -/* 0E1338 7F0AC808 AFAB0014 */ sw $t3, 0x14($sp) -/* 0E133C 7F0AC80C 27A40D54 */ addiu $a0, $sp, 0xd54 -/* 0E1340 7F0AC810 27A50D50 */ addiu $a1, $sp, 0xd50 -/* 0E1344 7F0AC814 02203025 */ move $a2, $s1 -/* 0E1348 7F0AC818 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0E134C 7F0AC81C 0FC2BA63 */ jal textMeasure -/* 0E1350 7F0AC820 AFA90010 */ sw $t1, 0x10($sp) -/* 0E1354 7F0AC824 3C028005 */ lui $v0, %hi(j_text_trigger) -/* 0E1358 7F0AC828 8C4284D0 */ lw $v0, %lo(j_text_trigger)($v0) -/* 0E135C 7F0AC82C 8FB80D60 */ lw $t8, 0xd60($sp) -/* 0E1360 7F0AC830 24040005 */ li $a0, 5 -/* 0E1364 7F0AC834 10400003 */ beqz $v0, .L7F0AC844 -/* 0E1368 7F0AC838 240C00AF */ li $t4, 175 -/* 0E136C 7F0AC83C 10000001 */ b .L7F0AC844 -/* 0E1370 7F0AC840 24040001 */ li $a0, 1 -.L7F0AC844: -/* 0E1374 7F0AC844 0098C821 */ addu $t9, $a0, $t8 -/* 0E1378 7F0AC848 10400006 */ beqz $v0, .L7F0AC864 -/* 0E137C 7F0AC84C AFB90154 */ sw $t9, 0x154($sp) -/* 0E1380 7F0AC850 8FAA0D50 */ lw $t2, 0xd50($sp) -/* 0E1384 7F0AC854 240D00F5 */ li $t5, 245 -/* 0E1388 7F0AC858 01AA4023 */ subu $t0, $t5, $t2 -/* 0E138C 7F0AC85C 10000002 */ b .L7F0AC868 -/* 0E1390 7F0AC860 AFA80150 */ sw $t0, 0x150($sp) -.L7F0AC864: -/* 0E1394 7F0AC864 AFAC0150 */ sw $t4, 0x150($sp) -.L7F0AC868: -/* 0E1398 7F0AC868 0C00110B */ jal viGetY -/* 0E139C 7F0AC86C 00000000 */ nop -/* 0E13A0 7F0AC870 8FAF0D48 */ lw $t7, 0xd48($sp) -/* 0E13A4 7F0AC874 8FAE0D4C */ lw $t6, 0xd4c($sp) -/* 0E13A8 7F0AC878 8FA90084 */ lw $t1, 0x84($sp) -/* 0E13AC 7F0AC87C 240B00D2 */ li $t3, 210 -/* 0E13B0 7F0AC880 2418000A */ li $t8, 10 -/* 0E13B4 7F0AC884 AFB80028 */ sw $t8, 0x28($sp) -/* 0E13B8 7F0AC888 AFAB001C */ sw $t3, 0x1c($sp) -/* 0E13BC 7F0AC88C 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0E13C0 7F0AC890 27A50150 */ addiu $a1, $sp, 0x150 -/* 0E13C4 7F0AC894 27A60154 */ addiu $a2, $sp, 0x154 -/* 0E13C8 7F0AC898 02203825 */ move $a3, $s1 -/* 0E13CC 7F0AC89C AFA20020 */ sw $v0, 0x20($sp) -/* 0E13D0 7F0AC8A0 AFA00024 */ sw $zero, 0x24($sp) -/* 0E13D4 7F0AC8A4 AFAF0010 */ sw $t7, 0x10($sp) -/* 0E13D8 7F0AC8A8 AFAE0014 */ sw $t6, 0x14($sp) -/* 0E13DC 7F0AC8AC 0FC2B6AF */ jal textRender -/* 0E13E0 7F0AC8B0 AFA90018 */ sw $t1, 0x18($sp) -/* 0E13E4 7F0AC8B4 8FB90074 */ lw $t9, 0x74($sp) -/* 0E13E8 7F0AC8B8 AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0E13EC 7F0AC8BC 26730001 */ addiu $s3, $s3, 1 -/* 0E13F0 7F0AC8C0 272D0001 */ addiu $t5, $t9, 1 -/* 0E13F4 7F0AC8C4 AFAD0074 */ sw $t5, 0x74($sp) -.L7F0AC8C8: -/* 0E13F8 7F0AC8C8 0FC15C6A */ jal objectiveGetCount -/* 0E13FC 7F0AC8CC 27DE0001 */ addiu $fp, $fp, 1 -/* 0E1400 7F0AC8D0 03C2082A */ slt $at, $fp, $v0 -/* 0E1404 7F0AC8D4 1420FF2E */ bnez $at, .L7F0AC590 -/* 0E1408 7F0AC8D8 00000000 */ nop -.L7F0AC8DC: -/* 0E140C 7F0AC8DC 0FC2B2E8 */ jal setTextOverlapCorrection -/* 0E1410 7F0AC8E0 2404FFFF */ li $a0, -1 -/* 0E1414 7F0AC8E4 0FC29A13 */ jal mission_brief_objectives_navigation -/* 0E1418 7F0AC8E8 00000000 */ nop -.L7F0AC8EC: -/* 0E141C 7F0AC8EC 8FAA0D4C */ lw $t2, 0xd4c($sp) -.L7F0AC8F0: -/* 0E1420 7F0AC8F0 2408000A */ li $t0, 10 -/* 0E1424 7F0AC8F4 AFA80014 */ sw $t0, 0x14($sp) -/* 0E1428 7F0AC8F8 27A40D54 */ addiu $a0, $sp, 0xd54 -/* 0E142C 7F0AC8FC 27A50D50 */ addiu $a1, $sp, 0xd50 -/* 0E1430 7F0AC900 27A60170 */ addiu $a2, $sp, 0x170 -/* 0E1434 7F0AC904 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0E1438 7F0AC908 0FC2BA63 */ jal textMeasure -/* 0E143C 7F0AC90C AFAA0010 */ sw $t2, 0x10($sp) -/* 0E1440 7F0AC910 8FAC0D48 */ lw $t4, 0xd48($sp) -/* 0E1444 7F0AC914 8FAF0D4C */ lw $t7, 0xd4c($sp) -/* 0E1448 7F0AC918 3C0EA0FF */ lui $t6, (0xA0FFA0F0 >> 16) # lui $t6, 0xa0ff -/* 0E144C 7F0AC91C 35CEA0F0 */ ori $t6, (0xA0FFA0F0 & 0xFFFF) # ori $t6, $t6, 0xa0f0 -/* 0E1450 7F0AC920 240900D2 */ li $t1, 210 -/* 0E1454 7F0AC924 240B0082 */ li $t3, 130 -/* 0E1458 7F0AC928 2418000A */ li $t8, 10 -/* 0E145C 7F0AC92C AFB80028 */ sw $t8, 0x28($sp) -/* 0E1460 7F0AC930 AFAB0020 */ sw $t3, 0x20($sp) -/* 0E1464 7F0AC934 AFA9001C */ sw $t1, 0x1c($sp) -/* 0E1468 7F0AC938 AFAE0018 */ sw $t6, 0x18($sp) -/* 0E146C 7F0AC93C 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0E1470 7F0AC940 27A50D64 */ addiu $a1, $sp, 0xd64 -/* 0E1474 7F0AC944 27A60D60 */ addiu $a2, $sp, 0xd60 -/* 0E1478 7F0AC948 27A70170 */ addiu $a3, $sp, 0x170 -/* 0E147C 7F0AC94C AFA00024 */ sw $zero, 0x24($sp) -/* 0E1480 7F0AC950 AFAC0010 */ sw $t4, 0x10($sp) -/* 0E1484 7F0AC954 0FC2B6AF */ jal textRender -/* 0E1488 7F0AC958 AFAF0014 */ sw $t7, 0x14($sp) -/* 0E148C 7F0AC95C 8FB90D60 */ lw $t9, 0xd60($sp) -/* 0E1490 7F0AC960 8FAA0D4C */ lw $t2, 0xd4c($sp) -/* 0E1494 7F0AC964 2403003C */ li $v1, 60 -/* 0E1498 7F0AC968 2408000A */ li $t0, 10 -/* 0E149C 7F0AC96C 272D0005 */ addiu $t5, $t9, 5 -/* 0E14A0 7F0AC970 AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0E14A4 7F0AC974 AFAD0D60 */ sw $t5, 0xd60($sp) -/* 0E14A8 7F0AC978 AFA80014 */ sw $t0, 0x14($sp) -/* 0E14AC 7F0AC97C AFA30D64 */ sw $v1, 0xd64($sp) -/* 0E14B0 7F0AC980 27A40D54 */ addiu $a0, $sp, 0xd54 -/* 0E14B4 7F0AC984 27A50D50 */ addiu $a1, $sp, 0xd50 -/* 0E14B8 7F0AC988 27A60190 */ addiu $a2, $sp, 0x190 -/* 0E14BC 7F0AC98C 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0E14C0 7F0AC990 0FC2BA63 */ jal textMeasure -/* 0E14C4 7F0AC994 AFAA0010 */ sw $t2, 0x10($sp) -/* 0E14C8 7F0AC998 0C001107 */ jal viGetX -/* 0E14CC 7F0AC99C 00000000 */ nop -/* 0E14D0 7F0AC9A0 0C00110B */ jal viGetY -/* 0E14D4 7F0AC9A4 A7A20064 */ sh $v0, 0x64($sp) -/* 0E14D8 7F0AC9A8 8FAC0D48 */ lw $t4, 0xd48($sp) -/* 0E14DC 7F0AC9AC 8FAF0D4C */ lw $t7, 0xd4c($sp) -/* 0E14E0 7F0AC9B0 87A90064 */ lh $t1, 0x64($sp) -/* 0E14E4 7F0AC9B4 3C0E00FF */ lui $t6, (0x00FF00B0 >> 16) # lui $t6, 0xff -/* 0E14E8 7F0AC9B8 35CE00B0 */ ori $t6, (0x00FF00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0E14EC 7F0AC9BC 240B000A */ li $t3, 10 -/* 0E14F0 7F0AC9C0 AFAB0028 */ sw $t3, 0x28($sp) -/* 0E14F4 7F0AC9C4 AFAE0018 */ sw $t6, 0x18($sp) -/* 0E14F8 7F0AC9C8 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0E14FC 7F0AC9CC 27A50D64 */ addiu $a1, $sp, 0xd64 -/* 0E1500 7F0AC9D0 27A60D60 */ addiu $a2, $sp, 0xd60 -/* 0E1504 7F0AC9D4 27A70190 */ addiu $a3, $sp, 0x190 -/* 0E1508 7F0AC9D8 AFA20020 */ sw $v0, 0x20($sp) -/* 0E150C 7F0AC9DC AFA00024 */ sw $zero, 0x24($sp) -/* 0E1510 7F0AC9E0 AFAC0010 */ sw $t4, 0x10($sp) -/* 0E1514 7F0AC9E4 AFAF0014 */ sw $t7, 0x14($sp) -/* 0E1518 7F0AC9E8 0FC2B6AF */ jal textRender -/* 0E151C 7F0AC9EC AFA9001C */ sw $t1, 0x1c($sp) -/* 0E1520 7F0AC9F0 AFA20DE8 */ sw $v0, 0xde8($sp) -.L7F0AC9F4: -/* 0E1524 7F0AC9F4 8FBF005C */ lw $ra, 0x5c($sp) -/* 0E1528 7F0AC9F8 8FA20DE8 */ lw $v0, 0xde8($sp) -/* 0E152C 7F0AC9FC 8FB00038 */ lw $s0, 0x38($sp) -/* 0E1530 7F0ACA00 8FB1003C */ lw $s1, 0x3c($sp) -/* 0E1534 7F0ACA04 8FB20040 */ lw $s2, 0x40($sp) -/* 0E1538 7F0ACA08 8FB30044 */ lw $s3, 0x44($sp) -/* 0E153C 7F0ACA0C 8FB40048 */ lw $s4, 0x48($sp) -/* 0E1540 7F0ACA10 8FB5004C */ lw $s5, 0x4c($sp) -/* 0E1544 7F0ACA14 8FB60050 */ lw $s6, 0x50($sp) -/* 0E1548 7F0ACA18 8FB70054 */ lw $s7, 0x54($sp) -/* 0E154C 7F0ACA1C 8FBE0058 */ lw $fp, 0x58($sp) -/* 0E1550 7F0ACA20 03E00008 */ jr $ra -/* 0E1554 7F0ACA24 27BD0DE8 */ addiu $sp, $sp, 0xde8 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata - -/* .rodata references a variable defined above. */ - -/*D:80058570*/ -glabel jpt_80058570 -.word .L7F0AC3B8 -.word .L7F0AC400 -.word .L7F0AC448 -.word .L7F0AC490 -.word .L7F0AC4D8 - -.text -glabel draw_watch_mission_briefing_page -/* 0DDE84 7F0AB494 27BDF218 */ addiu $sp, $sp, -0xde8 -/* 0DDE88 7F0AB498 AFBF005C */ sw $ra, 0x5c($sp) -/* 0DDE8C 7F0AB49C AFBE0058 */ sw $fp, 0x58($sp) -/* 0DDE90 7F0AB4A0 AFB70054 */ sw $s7, 0x54($sp) -/* 0DDE94 7F0AB4A4 AFB60050 */ sw $s6, 0x50($sp) -/* 0DDE98 7F0AB4A8 AFB5004C */ sw $s5, 0x4c($sp) -/* 0DDE9C 7F0AB4AC AFB40048 */ sw $s4, 0x48($sp) -/* 0DDEA0 7F0AB4B0 AFB30044 */ sw $s3, 0x44($sp) -/* 0DDEA4 7F0AB4B4 AFB20040 */ sw $s2, 0x40($sp) -/* 0DDEA8 7F0AB4B8 AFB1003C */ sw $s1, 0x3c($sp) -/* 0DDEAC 7F0AB4BC AFB00038 */ sw $s0, 0x38($sp) -/* 0DDEB0 7F0AB4C0 0FC29919 */ jal draw_background_health_and_armor -/* 0DDEB4 7F0AB4C4 00003025 */ move $a2, $zero -/* 0DDEB8 7F0AB4C8 0FC1F9B4 */ jal check_watch_page_transistion_running -/* 0DDEBC 7F0AB4CC AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0DDEC0 7F0AB4D0 24010001 */ li $at, 1 -/* 0DDEC4 7F0AB4D4 104101F7 */ beq $v0, $at, .L7F0ABCB4 -/* 0DDEC8 7F0AB4D8 27AE0DAC */ addiu $t6, $sp, 0xdac -/* 0DDECC 7F0AB4DC 3C0F8004 */ lui $t7, %hi(D_80040DFC) # $t7, 0x8004 -/* 0DDED0 7F0AB4E0 25EFAA4C */ addiu $t7, %lo(D_80040DFC) # addiu $t7, $t7, -0x55b4 -/* 0DDED4 7F0AB4E4 25F9003C */ addiu $t9, $t7, 0x3c -.L7F0AB4E8: -/* 0DDED8 7F0AB4E8 8DE10000 */ lw $at, ($t7) -/* 0DDEDC 7F0AB4EC 25EF000C */ addiu $t7, $t7, 0xc -/* 0DDEE0 7F0AB4F0 25CE000C */ addiu $t6, $t6, 0xc -/* 0DDEE4 7F0AB4F4 ADC1FFF4 */ sw $at, -0xc($t6) -/* 0DDEE8 7F0AB4F8 8DE1FFF8 */ lw $at, -8($t7) -/* 0DDEEC 7F0AB4FC ADC1FFF8 */ sw $at, -8($t6) -/* 0DDEF0 7F0AB500 8DE1FFFC */ lw $at, -4($t7) -/* 0DDEF4 7F0AB504 15F9FFF8 */ bne $t7, $t9, .L7F0AB4E8 -/* 0DDEF8 7F0AB508 ADC1FFFC */ sw $at, -4($t6) -/* 0DDEFC 7F0AB50C 3C098004 */ lui $t1, %hi(D_80040E38) # $t1, 0x8004 -/* 0DDF00 7F0AB510 2529AA88 */ addiu $t1, %lo(D_80040E38) # addiu $t1, $t1, -0x5578 -/* 0DDF04 7F0AB514 8D210000 */ lw $at, ($t1) -/* 0DDF08 7F0AB518 8D2B0004 */ lw $t3, 4($t1) -/* 0DDF0C 7F0AB51C 27A80DA4 */ addiu $t0, $sp, 0xda4 -/* 0DDF10 7F0AB520 3C0D8004 */ lui $t5, %hi(D_80040E40) # $t5, 0x8004 -/* 0DDF14 7F0AB524 25ADAA90 */ addiu $t5, %lo(D_80040E40) # addiu $t5, $t5, -0x5570 -/* 0DDF18 7F0AB528 25B9003C */ addiu $t9, $t5, 0x3c -/* 0DDF1C 7F0AB52C 27AC0D68 */ addiu $t4, $sp, 0xd68 -/* 0DDF20 7F0AB530 AD010000 */ sw $at, ($t0) -/* 0DDF24 7F0AB534 AD0B0004 */ sw $t3, 4($t0) -.L7F0AB538: -/* 0DDF28 7F0AB538 8DA10000 */ lw $at, ($t5) -/* 0DDF2C 7F0AB53C 25AD000C */ addiu $t5, $t5, 0xc -/* 0DDF30 7F0AB540 258C000C */ addiu $t4, $t4, 0xc -/* 0DDF34 7F0AB544 AD81FFF4 */ sw $at, -0xc($t4) -/* 0DDF38 7F0AB548 8DA1FFF8 */ lw $at, -8($t5) -/* 0DDF3C 7F0AB54C AD81FFF8 */ sw $at, -8($t4) -/* 0DDF40 7F0AB550 8DA1FFFC */ lw $at, -4($t5) -/* 0DDF44 7F0AB554 15B9FFF8 */ bne $t5, $t9, .L7F0AB538 -/* 0DDF48 7F0AB558 AD81FFFC */ sw $at, -4($t4) -/* 0DDF4C 7F0AB55C 3C0F8004 */ lui $t7, %hi(ptrFontBankGothic) # $t7, 0x8004 -/* 0DDF50 7F0AB560 3C0E8004 */ lui $t6, %hi(ptrFontBankGothicChars) # $t6, 0x8004 -/* 0DDF54 7F0AB564 8DEFAAFC */ lw $t7, %lo(ptrFontBankGothic)($t7) -/* 0DDF58 7F0AB568 8DCEAB00 */ lw $t6, %lo(ptrFontBankGothicChars)($t6) -/* 0DDF5C 7F0AB56C AFA00D54 */ sw $zero, 0xd54($sp) -/* 0DDF60 7F0AB570 AFA00D50 */ sw $zero, 0xd50($sp) -/* 0DDF64 7F0AB574 3404AC28 */ li $a0, 44072 -/* 0DDF68 7F0AB578 AFAF0D4C */ sw $t7, 0xd4c($sp) -/* 0DDF6C 7F0AB57C 0FC304AE */ jal langGet -/* 0DDF70 7F0AB580 AFAE0D48 */ sw $t6, 0xd48($sp) -/* 0DDF74 7F0AB584 AFA2016C */ sw $v0, 0x16c($sp) -/* 0DDF78 7F0AB588 0FC304AE */ jal langGet -/* 0DDF7C 7F0AB58C 3404AC29 */ li $a0, 44073 -/* 0DDF80 7F0AB590 AFA20168 */ sw $v0, 0x168($sp) -/* 0DDF84 7F0AB594 0FC304AE */ jal langGet -/* 0DDF88 7F0AB598 3404AC37 */ li $a0, 44087 -/* 0DDF8C 7F0AB59C AFA20164 */ sw $v0, 0x164($sp) -/* 0DDF90 7F0AB5A0 0FC15CF9 */ jal get_ptr_text_for_watch_breifing_page -/* 0DDF94 7F0AB5A4 00002025 */ move $a0, $zero -/* 0DDF98 7F0AB5A8 3C058005 */ lui $a1, %hi(D_800577C0) # $a1, 0x8005 -/* 0DDF9C 7F0AB5AC 00408025 */ move $s0, $v0 -/* 0DDFA0 7F0AB5B0 24A5CE90 */ addiu $a1, %lo(D_800577C0) # addiu $a1, $a1, -0x3170 -/* 0DDFA4 7F0AB5B4 0C0026F4 */ jal strcpy -/* 0DDFA8 7F0AB5B8 27A40190 */ addiu $a0, $sp, 0x190 -/* 0DDFAC 7F0AB5BC 0FC2B016 */ jal microcode_constructor -/* 0DDFB0 7F0AB5C0 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0DDFB4 7F0AB5C4 8FAA0D4C */ lw $t2, 0xd4c($sp) -/* 0DDFB8 7F0AB5C8 AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0DDFBC 7F0AB5CC 27A40D54 */ addiu $a0, $sp, 0xd54 -/* 0DDFC0 7F0AB5D0 27A50D50 */ addiu $a1, $sp, 0xd50 -/* 0DDFC4 7F0AB5D4 02003025 */ move $a2, $s0 -/* 0DDFC8 7F0AB5D8 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0DDFCC 7F0AB5DC AFA00014 */ sw $zero, 0x14($sp) -/* 0DDFD0 7F0AB5E0 0FC2B713 */ jal textMeasure -/* 0DDFD4 7F0AB5E4 AFAA0010 */ sw $t2, 0x10($sp) -/* 0DDFD8 7F0AB5E8 8FA20D50 */ lw $v0, 0xd50($sp) -/* 0DDFDC 7F0AB5EC 240800AA */ li $t0, 170 -/* 0DDFE0 7F0AB5F0 8FB90D54 */ lw $t9, 0xd54($sp) -/* 0DDFE4 7F0AB5F4 01021823 */ subu $v1, $t0, $v0 -/* 0DDFE8 7F0AB5F8 04610003 */ bgez $v1, .L7F0AB608 -/* 0DDFEC 7F0AB5FC 00034843 */ sra $t1, $v1, 1 -/* 0DDFF0 7F0AB600 24610001 */ addiu $at, $v1, 1 -/* 0DDFF4 7F0AB604 00014843 */ sra $t1, $at, 1 -.L7F0AB608: -/* 0DDFF8 7F0AB608 2523004B */ addiu $v1, $t1, 0x4b -/* 0DDFFC 7F0AB60C 240B001E */ li $t3, 30 -/* 0DE000 7F0AB610 27AC0D58 */ addiu $t4, $sp, 0xd58 -/* 0DE004 7F0AB614 0062C021 */ addu $t8, $v1, $v0 -/* 0DE008 7F0AB618 272D001E */ addiu $t5, $t9, 0x1e -/* 0DE00C 7F0AB61C AFAB0D60 */ sw $t3, 0xd60($sp) -/* 0DE010 7F0AB620 AFB80D5C */ sw $t8, 0xd5c($sp) -/* 0DE014 7F0AB624 AFAD0D58 */ sw $t5, 0xd58($sp) -/* 0DE018 7F0AB628 AFAC0010 */ sw $t4, 0x10($sp) -/* 0DE01C 7F0AB62C AFA30D64 */ sw $v1, 0xd64($sp) -/* 0DE020 7F0AB630 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0DE024 7F0AB634 27A50D64 */ addiu $a1, $sp, 0xd64 -/* 0DE028 7F0AB638 27A60D60 */ addiu $a2, $sp, 0xd60 -/* 0DE02C 7F0AB63C 0FC2B083 */ jal draw_blackbox_to_screen -/* 0DE030 7F0AB640 27A70D5C */ addiu $a3, $sp, 0xd5c -/* 0DE034 7F0AB644 8FAF0D48 */ lw $t7, 0xd48($sp) -/* 0DE038 7F0AB648 8FAE0D4C */ lw $t6, 0xd4c($sp) -/* 0DE03C 7F0AB64C 8FA80D50 */ lw $t0, 0xd50($sp) -/* 0DE040 7F0AB650 8FA90D54 */ lw $t1, 0xd54($sp) -/* 0DE044 7F0AB654 3C0AA0FF */ lui $t2, (0xA0FFA0F0 >> 16) # lui $t2, 0xa0ff -/* 0DE048 7F0AB658 354AA0F0 */ ori $t2, (0xA0FFA0F0 & 0xFFFF) # ori $t2, $t2, 0xa0f0 -/* 0DE04C 7F0AB65C AFAA0018 */ sw $t2, 0x18($sp) -/* 0DE050 7F0AB660 00402025 */ move $a0, $v0 -/* 0DE054 7F0AB664 27A50D64 */ addiu $a1, $sp, 0xd64 -/* 0DE058 7F0AB668 27A60D60 */ addiu $a2, $sp, 0xd60 -/* 0DE05C 7F0AB66C 02003825 */ move $a3, $s0 -/* 0DE060 7F0AB670 AFA00024 */ sw $zero, 0x24($sp) -/* 0DE064 7F0AB674 AFA00028 */ sw $zero, 0x28($sp) -/* 0DE068 7F0AB678 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DE06C 7F0AB67C AFAE0014 */ sw $t6, 0x14($sp) -/* 0DE070 7F0AB680 AFA8001C */ sw $t0, 0x1c($sp) -/* 0DE074 7F0AB684 0FC2B35F */ jal textRender -/* 0DE078 7F0AB688 AFA90020 */ sw $t1, 0x20($sp) -/* 0DE07C 7F0AB68C 3C0B8004 */ lui $t3, %hi(mission_brief_index) # $t3, 0x8004 -/* 0DE080 7F0AB690 8D6BA5F0 */ lw $t3, %lo(mission_brief_index)($t3) -/* 0DE084 7F0AB694 24030041 */ li $v1, 65 -/* 0DE088 7F0AB698 AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0DE08C 7F0AB69C 2D610005 */ sltiu $at, $t3, 5 -/* 0DE090 7F0AB6A0 10200142 */ beqz $at, .L7F0ABBAC -/* 0DE094 7F0AB6A4 AFA30D64 */ sw $v1, 0xd64($sp) -/* 0DE098 7F0AB6A8 000B5880 */ sll $t3, $t3, 2 -/* 0DE09C 7F0AB6AC 3C018005 */ lui $at, %hi(jpt_80058570) -/* 0DE0A0 7F0AB6B0 002B0821 */ addu $at, $at, $t3 -/* 0DE0A4 7F0AB6B4 8C2BCFC4 */ lw $t3, %lo(jpt_80058570)($at) -/* 0DE0A8 7F0AB6B8 01600008 */ jr $t3 -/* 0DE0AC 7F0AB6BC 00000000 */ nop -.L7F0AC3B8: -/* 0DE0B0 7F0AB6C0 0FC304AE */ jal langGet -/* 0DE0B4 7F0AB6C4 3404AC38 */ li $a0, 44088 -/* 0DE0B8 7F0AB6C8 27A40170 */ addiu $a0, $sp, 0x170 -/* 0DE0BC 7F0AB6CC 0C00283D */ jal sprintf -/* 0DE0C0 7F0AB6D0 00402825 */ move $a1, $v0 -/* 0DE0C4 7F0AB6D4 0FC15CF9 */ jal get_ptr_text_for_watch_breifing_page -/* 0DE0C8 7F0AB6D8 24040001 */ li $a0, 1 -/* 0DE0CC 7F0AB6DC 8FB80D4C */ lw $t8, 0xd4c($sp) -/* 0DE0D0 7F0AB6E0 240400D2 */ li $a0, 210 -/* 0DE0D4 7F0AB6E4 00402825 */ move $a1, $v0 -/* 0DE0D8 7F0AB6E8 27A60190 */ addiu $a2, $sp, 0x190 -/* 0DE0DC 7F0AB6EC 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0DE0E0 7F0AB6F0 0FC2B789 */ jal textWrap -/* 0DE0E4 7F0AB6F4 AFB80010 */ sw $t8, 0x10($sp) -/* 0DE0E8 7F0AB6F8 0FC2964E */ jal mission_brief_background_navigation -/* 0DE0EC 7F0AB6FC 00000000 */ nop -/* 0DE0F0 7F0AB700 1000012B */ b .L7F0ABBB0 -/* 0DE0F4 7F0AB704 8FB80D4C */ lw $t8, 0xd4c($sp) -.L7F0AC400: -/* 0DE0F8 7F0AB708 0FC304AE */ jal langGet -/* 0DE0FC 7F0AB70C 3404AC39 */ li $a0, 44089 -/* 0DE100 7F0AB710 27A40170 */ addiu $a0, $sp, 0x170 -/* 0DE104 7F0AB714 0C00283D */ jal sprintf -/* 0DE108 7F0AB718 00402825 */ move $a1, $v0 -/* 0DE10C 7F0AB71C 0FC15CF9 */ jal get_ptr_text_for_watch_breifing_page -/* 0DE110 7F0AB720 24040002 */ li $a0, 2 -/* 0DE114 7F0AB724 8FB90D4C */ lw $t9, 0xd4c($sp) -/* 0DE118 7F0AB728 240400D2 */ li $a0, 210 -/* 0DE11C 7F0AB72C 00402825 */ move $a1, $v0 -/* 0DE120 7F0AB730 27A60190 */ addiu $a2, $sp, 0x190 -/* 0DE124 7F0AB734 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0DE128 7F0AB738 0FC2B789 */ jal textWrap -/* 0DE12C 7F0AB73C AFB90010 */ sw $t9, 0x10($sp) -/* 0DE130 7F0AB740 0FC29670 */ jal mission_brief_m_briefing_navigation -/* 0DE134 7F0AB744 00000000 */ nop -/* 0DE138 7F0AB748 10000119 */ b .L7F0ABBB0 -/* 0DE13C 7F0AB74C 8FB80D4C */ lw $t8, 0xd4c($sp) -.L7F0AC448: -/* 0DE140 7F0AB750 0FC304AE */ jal langGet -/* 0DE144 7F0AB754 3404AC3A */ li $a0, 44090 -/* 0DE148 7F0AB758 27A40170 */ addiu $a0, $sp, 0x170 -/* 0DE14C 7F0AB75C 0C00283D */ jal sprintf -/* 0DE150 7F0AB760 00402825 */ move $a1, $v0 -/* 0DE154 7F0AB764 0FC15CF9 */ jal get_ptr_text_for_watch_breifing_page -/* 0DE158 7F0AB768 24040003 */ li $a0, 3 -/* 0DE15C 7F0AB76C 8FAD0D4C */ lw $t5, 0xd4c($sp) -/* 0DE160 7F0AB770 240400D2 */ li $a0, 210 -/* 0DE164 7F0AB774 00402825 */ move $a1, $v0 -/* 0DE168 7F0AB778 27A60190 */ addiu $a2, $sp, 0x190 -/* 0DE16C 7F0AB77C 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0DE170 7F0AB780 0FC2B789 */ jal textWrap -/* 0DE174 7F0AB784 AFAD0010 */ sw $t5, 0x10($sp) -/* 0DE178 7F0AB788 0FC29693 */ jal mission_brief_q_branch_navigation -/* 0DE17C 7F0AB78C 00000000 */ nop -/* 0DE180 7F0AB790 10000107 */ b .L7F0ABBB0 -/* 0DE184 7F0AB794 8FB80D4C */ lw $t8, 0xd4c($sp) -.L7F0AC490: -/* 0DE188 7F0AB798 0FC304AE */ jal langGet -/* 0DE18C 7F0AB79C 3404AC3B */ li $a0, 44091 -/* 0DE190 7F0AB7A0 27A40170 */ addiu $a0, $sp, 0x170 -/* 0DE194 7F0AB7A4 0C00283D */ jal sprintf -/* 0DE198 7F0AB7A8 00402825 */ move $a1, $v0 -/* 0DE19C 7F0AB7AC 0FC15CF9 */ jal get_ptr_text_for_watch_breifing_page -/* 0DE1A0 7F0AB7B0 24040004 */ li $a0, 4 -/* 0DE1A4 7F0AB7B4 8FAC0D4C */ lw $t4, 0xd4c($sp) -/* 0DE1A8 7F0AB7B8 240400D2 */ li $a0, 210 -/* 0DE1AC 7F0AB7BC 00402825 */ move $a1, $v0 -/* 0DE1B0 7F0AB7C0 27A60190 */ addiu $a2, $sp, 0x190 -/* 0DE1B4 7F0AB7C4 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0DE1B8 7F0AB7C8 0FC2B789 */ jal textWrap -/* 0DE1BC 7F0AB7CC AFAC0010 */ sw $t4, 0x10($sp) -/* 0DE1C0 7F0AB7D0 0FC296B7 */ jal mission_brief_moneypenny_navigation -/* 0DE1C4 7F0AB7D4 00000000 */ nop -/* 0DE1C8 7F0AB7D8 100000F5 */ b .L7F0ABBB0 -/* 0DE1CC 7F0AB7DC 8FB80D4C */ lw $t8, 0xd4c($sp) -.L7F0AC4D8: -/* 0DE1D0 7F0AB7E0 3C0F8004 */ lui $t7, %hi(j_text_trigger) # $t7, 0x8004 -/* 0DE1D4 7F0AB7E4 8DEF1150 */ lw $t7, %lo(j_text_trigger)($t7) -/* 0DE1D8 7F0AB7E8 24120001 */ li $s2, 1 -/* 0DE1DC 7F0AB7EC 00009825 */ move $s3, $zero -/* 0DE1E0 7F0AB7F0 11E00003 */ beqz $t7, .L7F0AB800 -/* 0DE1E4 7F0AB7F4 AFA00074 */ sw $zero, 0x74($sp) -/* 0DE1E8 7F0AB7F8 10000002 */ b .L7F0AB804 -/* 0DE1EC 7F0AB7FC 24040001 */ li $a0, 1 -.L7F0AB800: -/* 0DE1F0 7F0AB800 24040005 */ li $a0, 5 -.L7F0AB804: -/* 0DE1F4 7F0AB804 0FC2AF98 */ jal setTextOverlapCorrection -/* 0DE1F8 7F0AB808 00000000 */ nop -/* 0DE1FC 7F0AB80C 0FC304AE */ jal langGet -/* 0DE200 7F0AB810 3404AC3C */ li $a0, 44092 -/* 0DE204 7F0AB814 27A40170 */ addiu $a0, $sp, 0x170 -/* 0DE208 7F0AB818 0C00283D */ jal sprintf -/* 0DE20C 7F0AB81C 00402825 */ move $a1, $v0 -/* 0DE210 7F0AB820 0FC15D22 */ jal objectiveGetCount -/* 0DE214 7F0AB824 0000F025 */ move $fp, $zero -/* 0DE218 7F0AB828 184000DC */ blez $v0, .L7F0ABB9C -/* 0DE21C 7F0AB82C 3C178005 */ lui $s7, %hi(D_80058454) # $s7, 0x8005 -/* 0DE220 7F0AB830 3C168005 */ lui $s6, %hi(D_80058450) # $s6, 0x8005 -/* 0DE224 7F0AB834 3C158005 */ lui $s5, %hi(D_80058444) # $s5, 0x8005 -/* 0DE228 7F0AB838 3C148005 */ lui $s4, %hi(D_80058440) # $s4, 0x8005 -/* 0DE22C 7F0AB83C 2694CE94 */ addiu $s4, %lo(D_80058440) # addiu $s4, $s4, -0x316c -/* 0DE230 7F0AB840 26B5CE98 */ addiu $s5, %lo(D_80058444) # addiu $s5, $s5, -0x3168 -/* 0DE234 7F0AB844 26D6CEA4 */ addiu $s6, %lo(D_80058450) # addiu $s6, $s6, -0x315c -/* 0DE238 7F0AB848 26F7CEA8 */ addiu $s7, %lo(D_80058454) # addiu $s7, $s7, -0x3158 -/* 0DE23C 7F0AB84C 27B10088 */ addiu $s1, $sp, 0x88 -.L7F0AB850: -/* 0DE240 7F0AB850 0FC15D39 */ jal get_difficulty_for_objective -/* 0DE244 7F0AB854 03C02025 */ move $a0, $fp -/* 0DE248 7F0AB858 0FC2FC21 */ jal lvlGetSelectedDifficulty -/* 0DE24C 7F0AB85C AFA20068 */ sw $v0, 0x68($sp) -/* 0DE250 7F0AB860 8FA40068 */ lw $a0, 0x68($sp) -/* 0DE254 7F0AB864 0044082A */ slt $at, $v0, $a0 -/* 0DE258 7F0AB868 142000C7 */ bnez $at, .L7F0ABB88 -/* 0DE25C 7F0AB86C 03C02025 */ move $a0, $fp -/* 0DE260 7F0AB870 0FC15D26 */ jal get_text_for_objective -/* 0DE264 7F0AB874 00008025 */ move $s0, $zero -/* 0DE268 7F0AB878 AFA20078 */ sw $v0, 0x78($sp) -/* 0DE26C 7F0AB87C 1A400008 */ blez $s2, .L7F0AB8A0 -/* 0DE270 7F0AB880 A3A00088 */ sb $zero, 0x88($sp) -/* 0DE274 7F0AB884 02202025 */ move $a0, $s1 -.L7F0AB888: -/* 0DE278 7F0AB888 0C002717 */ jal strcat -/* 0DE27C 7F0AB88C 02802825 */ move $a1, $s4 -/* 0DE280 7F0AB890 26100001 */ addiu $s0, $s0, 1 -/* 0DE284 7F0AB894 5612FFFC */ bnel $s0, $s2, .L7F0AB888 -/* 0DE288 7F0AB898 02202025 */ move $a0, $s1 -/* 0DE28C 7F0AB89C 00008025 */ move $s0, $zero -.L7F0AB8A0: -/* 0DE290 7F0AB8A0 1A600007 */ blez $s3, .L7F0AB8C0 -/* 0DE294 7F0AB8A4 02202025 */ move $a0, $s1 -.L7F0AB8A8: -/* 0DE298 7F0AB8A8 0C002717 */ jal strcat -/* 0DE29C 7F0AB8AC 02A02825 */ move $a1, $s5 -/* 0DE2A0 7F0AB8B0 26100001 */ addiu $s0, $s0, 1 -/* 0DE2A4 7F0AB8B4 5613FFFC */ bnel $s0, $s3, .L7F0AB8A8 -/* 0DE2A8 7F0AB8B8 02202025 */ move $a0, $s1 -/* 0DE2AC 7F0AB8BC 00008025 */ move $s0, $zero -.L7F0AB8C0: -/* 0DE2B0 7F0AB8C0 0C004C2B */ jal strlen -/* 0DE2B4 7F0AB8C4 02202025 */ move $a0, $s1 -/* 0DE2B8 7F0AB8C8 8FA60074 */ lw $a2, 0x74($sp) -/* 0DE2BC 7F0AB8CC 00512021 */ addu $a0, $v0, $s1 -/* 0DE2C0 7F0AB8D0 3C058005 */ lui $a1, %hi(aC_2) # $a1, 0x8005 -/* 0DE2C4 7F0AB8D4 AFA4006C */ sw $a0, 0x6c($sp) -/* 0DE2C8 7F0AB8D8 24A5CE9C */ addiu $a1, %lo(aC_2) # addiu $a1, $a1, -0x3164 -/* 0DE2CC 7F0AB8DC 0C00283D */ jal sprintf -/* 0DE2D0 7F0AB8E0 24C60061 */ addiu $a2, $a2, 0x61 -/* 0DE2D4 7F0AB8E4 02202025 */ move $a0, $s1 -/* 0DE2D8 7F0AB8E8 0C002717 */ jal strcat -/* 0DE2DC 7F0AB8EC 8FA50078 */ lw $a1, 0x78($sp) -/* 0DE2E0 7F0AB8F0 3C0E8004 */ lui $t6, %hi(j_text_trigger) # $t6, 0x8004 -/* 0DE2E4 7F0AB8F4 8DCE1150 */ lw $t6, %lo(j_text_trigger)($t6) -/* 0DE2E8 7F0AB8F8 8FAA0D60 */ lw $t2, 0xd60($sp) -/* 0DE2EC 7F0AB8FC 24040005 */ li $a0, 5 -/* 0DE2F0 7F0AB900 11C00003 */ beqz $t6, .L7F0AB910 -/* 0DE2F4 7F0AB904 2409003C */ li $t1, 60 -/* 0DE2F8 7F0AB908 10000001 */ b .L7F0AB910 -/* 0DE2FC 7F0AB90C 24040001 */ li $a0, 1 -.L7F0AB910: -/* 0DE300 7F0AB910 008A4021 */ addu $t0, $a0, $t2 -/* 0DE304 7F0AB914 AFA80154 */ sw $t0, 0x154($sp) -/* 0DE308 7F0AB918 0C000F9B */ jal viGetX -/* 0DE30C 7F0AB91C AFA90150 */ sw $t1, 0x150($sp) -/* 0DE310 7F0AB920 0C000F9F */ jal viGetY -/* 0DE314 7F0AB924 A7A20064 */ sh $v0, 0x64($sp) -/* 0DE318 7F0AB928 8FAB0D48 */ lw $t3, 0xd48($sp) -/* 0DE31C 7F0AB92C 8FB80D4C */ lw $t8, 0xd4c($sp) -/* 0DE320 7F0AB930 87AD0064 */ lh $t5, 0x64($sp) -/* 0DE324 7F0AB934 3C1900FF */ lui $t9, (0x00FF00B0 >> 16) # lui $t9, 0xff -/* 0DE328 7F0AB938 373900B0 */ ori $t9, (0x00FF00B0 & 0xFFFF) # ori $t9, $t9, 0xb0 -/* 0DE32C 7F0AB93C 240C000A */ li $t4, 10 -/* 0DE330 7F0AB940 AFAC0028 */ sw $t4, 0x28($sp) -/* 0DE334 7F0AB944 AFB90018 */ sw $t9, 0x18($sp) -/* 0DE338 7F0AB948 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0DE33C 7F0AB94C 27A50150 */ addiu $a1, $sp, 0x150 -/* 0DE340 7F0AB950 27A60154 */ addiu $a2, $sp, 0x154 -/* 0DE344 7F0AB954 02203825 */ move $a3, $s1 -/* 0DE348 7F0AB958 AFA20020 */ sw $v0, 0x20($sp) -/* 0DE34C 7F0AB95C AFA00024 */ sw $zero, 0x24($sp) -/* 0DE350 7F0AB960 AFAB0010 */ sw $t3, 0x10($sp) -/* 0DE354 7F0AB964 AFB80014 */ sw $t8, 0x14($sp) -/* 0DE358 7F0AB968 0FC2B35F */ jal textRender -/* 0DE35C 7F0AB96C AFAD001C */ sw $t5, 0x1c($sp) -/* 0DE360 7F0AB970 AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0DE364 7F0AB974 0FC2AD04 */ jal sub_GAME_7F0AC0E8 -/* 0DE368 7F0AB978 8FA4006C */ lw $a0, 0x6c($sp) -/* 0DE36C 7F0AB97C 02429021 */ addu $s2, $s2, $v0 -/* 0DE370 7F0AB980 0FC2AD12 */ jal sub_GAME_7F0AC120 -/* 0DE374 7F0AB984 8FA4006C */ lw $a0, 0x6c($sp) -/* 0DE378 7F0AB988 8FAF0D4C */ lw $t7, 0xd4c($sp) -/* 0DE37C 7F0AB98C 240E000A */ li $t6, 10 -/* 0DE380 7F0AB990 AFAE0014 */ sw $t6, 0x14($sp) -/* 0DE384 7F0AB994 27A40D54 */ addiu $a0, $sp, 0xd54 -/* 0DE388 7F0AB998 27A50D50 */ addiu $a1, $sp, 0xd50 -/* 0DE38C 7F0AB99C 00403025 */ move $a2, $v0 -/* 0DE390 7F0AB9A0 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0DE394 7F0AB9A4 0FC2B713 */ jal textMeasure -/* 0DE398 7F0AB9A8 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DE39C 7F0AB9AC 0C000F9B */ jal viGetX -/* 0DE3A0 7F0AB9B0 00000000 */ nop -/* 0DE3A4 7F0AB9B4 8FA80D50 */ lw $t0, 0xd50($sp) -/* 0DE3A8 7F0AB9B8 04410003 */ bgez $v0, .L7F0AB9C8 -/* 0DE3AC 7F0AB9BC 00025043 */ sra $t2, $v0, 1 -/* 0DE3B0 7F0AB9C0 24410001 */ addiu $at, $v0, 1 -/* 0DE3B4 7F0AB9C4 00015043 */ sra $t2, $at, 1 -.L7F0AB9C8: -/* 0DE3B8 7F0AB9C8 2509003C */ addiu $t1, $t0, 0x3c -/* 0DE3BC 7F0AB9CC 012A082A */ slt $at, $t1, $t2 -/* 0DE3C0 7F0AB9D0 10200002 */ beqz $at, .L7F0AB9DC -/* 0DE3C4 7F0AB9D4 00000000 */ nop -/* 0DE3C8 7F0AB9D8 2652FFFF */ addiu $s2, $s2, -1 -.L7F0AB9DC: -/* 0DE3CC 7F0AB9DC 1A400008 */ blez $s2, .L7F0ABA00 -/* 0DE3D0 7F0AB9E0 A3A00088 */ sb $zero, 0x88($sp) -/* 0DE3D4 7F0AB9E4 02202025 */ move $a0, $s1 -.Leu7F0AB9E8: -/* 0DE3D8 7F0AB9E8 0C002717 */ jal strcat -/* 0DE3DC 7F0AB9EC 02C02825 */ move $a1, $s6 -/* 0DE3E0 7F0AB9F0 26100001 */ addiu $s0, $s0, 1 -/* 0DE3E4 7F0AB9F4 5612FFFC */ bnel $s0, $s2, .Leu7F0AB9E8 -/* 0DE3E8 7F0AB9F8 02202025 */ move $a0, $s1 -/* 0DE3EC 7F0AB9FC 00008025 */ move $s0, $zero -.L7F0ABA00: -/* 0DE3F0 7F0ABA00 1A600006 */ blez $s3, .L7F0ABA1C -/* 0DE3F4 7F0ABA04 02202025 */ move $a0, $s1 -.L7F0ABA08: -/* 0DE3F8 7F0ABA08 0C002717 */ jal strcat -/* 0DE3FC 7F0ABA0C 02E02825 */ move $a1, $s7 -/* 0DE400 7F0ABA10 26100001 */ addiu $s0, $s0, 1 -/* 0DE404 7F0ABA14 5613FFFC */ bnel $s0, $s3, .L7F0ABA08 -/* 0DE408 7F0ABA18 02202025 */ move $a0, $s1 -.L7F0ABA1C: -/* 0DE40C 7F0ABA1C 0FC15D46 */ jal get_status_of_objective -/* 0DE410 7F0ABA20 03C02025 */ move $a0, $fp -/* 0DE414 7F0ABA24 10400009 */ beqz $v0, .L7F0ABA4C -/* 0DE418 7F0ABA28 02202025 */ move $a0, $s1 -/* 0DE41C 7F0ABA2C 24010001 */ li $at, 1 -/* 0DE420 7F0ABA30 10410010 */ beq $v0, $at, .L7F0ABA74 -/* 0DE424 7F0ABA34 02202025 */ move $a0, $s1 -/* 0DE428 7F0ABA38 24010002 */ li $at, 2 -/* 0DE42C 7F0ABA3C 10410014 */ beq $v0, $at, .L7F0ABA90 -/* 0DE430 7F0ABA40 02202025 */ move $a0, $s1 -/* 0DE434 7F0ABA44 1000001F */ b .L7F0ABAC4 -/* 0DE438 7F0ABA48 8FA80D4C */ lw $t0, 0xd4c($sp) -.L7F0ABA4C: -/* 0DE43C 7F0ABA4C 0C002717 */ jal strcat -/* 0DE440 7F0ABA50 8FA50168 */ lw $a1, 0x168($sp) -/* 0DE444 7F0ABA54 3C0B8004 */ lui $t3, %hi(D_80040AFC) # $t3, 0x8004 -/* 0DE448 7F0ABA58 8D6BA74C */ lw $t3, %lo(D_80040AFC)($t3) -/* 0DE44C 7F0ABA5C 3C014000 */ lui $at, (0x400040FF >> 16) # lui $at, 0x4000 -/* 0DE450 7F0ABA60 342140FF */ ori $at, (0x400040FF & 0xFFFF) # ori $at, $at, 0x40ff -/* 0DE454 7F0ABA64 000BC400 */ sll $t8, $t3, 0x10 -/* 0DE458 7F0ABA68 0301C825 */ or $t9, $t8, $at -/* 0DE45C 7F0ABA6C 10000014 */ b .L7F0ABAC0 -/* 0DE460 7F0ABA70 AFB90084 */ sw $t9, 0x84($sp) -.L7F0ABA74: -/* 0DE464 7F0ABA74 3C0DA0FF */ lui $t5, (0xA0FFA0F0 >> 16) # lui $t5, 0xa0ff -/* 0DE468 7F0ABA78 35ADA0F0 */ ori $t5, (0xA0FFA0F0 & 0xFFFF) # ori $t5, $t5, 0xa0f0 -/* 0DE46C 7F0ABA7C AFAD0084 */ sw $t5, 0x84($sp) -/* 0DE470 7F0ABA80 0C002717 */ jal strcat -/* 0DE474 7F0ABA84 8FA5016C */ lw $a1, 0x16c($sp) -/* 0DE478 7F0ABA88 1000000E */ b .L7F0ABAC4 -/* 0DE47C 7F0ABA8C 8FA80D4C */ lw $t0, 0xd4c($sp) -.L7F0ABA90: -/* 0DE480 7F0ABA90 0C002717 */ jal strcat -/* 0DE484 7F0ABA94 8FA50164 */ lw $a1, 0x164($sp) -/* 0DE488 7F0ABA98 3C0C8004 */ lui $t4, %hi(j_text_trigger) # $t4, 0x8004 -/* 0DE48C 7F0ABA9C 8D8C1150 */ lw $t4, %lo(j_text_trigger)($t4) -/* 0DE490 7F0ABAA0 3C0E00FF */ lui $t6, (0x00FF00B0 >> 16) # lui $t6, 0xff -/* 0DE494 7F0ABAA4 3C0FA0FF */ lui $t7, (0xA0FFA0F0 >> 16) # lui $t7, 0xa0ff -/* 0DE498 7F0ABAA8 11800004 */ beqz $t4, .L7F0ABABC -/* 0DE49C 7F0ABAAC 35CE00B0 */ ori $t6, (0x00FF00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DE4A0 7F0ABAB0 35EFA0F0 */ ori $t7, (0xA0FFA0F0 & 0xFFFF) # ori $t7, $t7, 0xa0f0 -/* 0DE4A4 7F0ABAB4 10000002 */ b .L7F0ABAC0 -/* 0DE4A8 7F0ABAB8 AFAF0084 */ sw $t7, 0x84($sp) -.L7F0ABABC: -/* 0DE4AC 7F0ABABC AFAE0084 */ sw $t6, 0x84($sp) -.L7F0ABAC0: -/* 0DE4B0 7F0ABAC0 8FA80D4C */ lw $t0, 0xd4c($sp) -.L7F0ABAC4: -/* 0DE4B4 7F0ABAC4 240A000A */ li $t2, 10 -/* 0DE4B8 7F0ABAC8 AFAA0014 */ sw $t2, 0x14($sp) -/* 0DE4BC 7F0ABACC 27A40D54 */ addiu $a0, $sp, 0xd54 -/* 0DE4C0 7F0ABAD0 27A50D50 */ addiu $a1, $sp, 0xd50 -/* 0DE4C4 7F0ABAD4 02203025 */ move $a2, $s1 -/* 0DE4C8 7F0ABAD8 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0DE4CC 7F0ABADC 0FC2B713 */ jal textMeasure -/* 0DE4D0 7F0ABAE0 AFA80010 */ sw $t0, 0x10($sp) -/* 0DE4D4 7F0ABAE4 3C028004 */ lui $v0, %hi(j_text_trigger) # $v0, 0x8004 -/* 0DE4D8 7F0ABAE8 8C421150 */ lw $v0, %lo(j_text_trigger)($v0) -/* 0DE4DC 7F0ABAEC 8FA90D60 */ lw $t1, 0xd60($sp) -/* 0DE4E0 7F0ABAF0 24040005 */ li $a0, 5 -/* 0DE4E4 7F0ABAF4 10400003 */ beqz $v0, .L7F0ABB04 -/* 0DE4E8 7F0ABAF8 240C00AF */ li $t4, 175 -/* 0DE4EC 7F0ABAFC 10000001 */ b .L7F0ABB04 -/* 0DE4F0 7F0ABB00 24040001 */ li $a0, 1 -.L7F0ABB04: -/* 0DE4F4 7F0ABB04 00895821 */ addu $t3, $a0, $t1 -/* 0DE4F8 7F0ABB08 10400006 */ beqz $v0, .L7F0ABB24 -/* 0DE4FC 7F0ABB0C AFAB0154 */ sw $t3, 0x154($sp) -/* 0DE500 7F0ABB10 8FB80D50 */ lw $t8, 0xd50($sp) -/* 0DE504 7F0ABB14 241900F5 */ li $t9, 245 -/* 0DE508 7F0ABB18 03386823 */ subu $t5, $t9, $t8 -/* 0DE50C 7F0ABB1C 10000002 */ b .L7F0ABB28 -/* 0DE510 7F0ABB20 AFAD0150 */ sw $t5, 0x150($sp) -.L7F0ABB24: -/* 0DE514 7F0ABB24 AFAC0150 */ sw $t4, 0x150($sp) -.L7F0ABB28: -/* 0DE518 7F0ABB28 0C000F9F */ jal viGetY -/* 0DE51C 7F0ABB2C 00000000 */ nop -/* 0DE520 7F0ABB30 8FAF0D48 */ lw $t7, 0xd48($sp) -/* 0DE524 7F0ABB34 8FAE0D4C */ lw $t6, 0xd4c($sp) -/* 0DE528 7F0ABB38 8FA80084 */ lw $t0, 0x84($sp) -/* 0DE52C 7F0ABB3C 240A00D2 */ li $t2, 210 -/* 0DE530 7F0ABB40 2409000A */ li $t1, 10 -/* 0DE534 7F0ABB44 AFA90028 */ sw $t1, 0x28($sp) -/* 0DE538 7F0ABB48 AFAA001C */ sw $t2, 0x1c($sp) -/* 0DE53C 7F0ABB4C 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0DE540 7F0ABB50 27A50150 */ addiu $a1, $sp, 0x150 -/* 0DE544 7F0ABB54 27A60154 */ addiu $a2, $sp, 0x154 -/* 0DE548 7F0ABB58 02203825 */ move $a3, $s1 -/* 0DE54C 7F0ABB5C AFA20020 */ sw $v0, 0x20($sp) -/* 0DE550 7F0ABB60 AFA00024 */ sw $zero, 0x24($sp) -/* 0DE554 7F0ABB64 AFAF0010 */ sw $t7, 0x10($sp) -/* 0DE558 7F0ABB68 AFAE0014 */ sw $t6, 0x14($sp) -/* 0DE55C 7F0ABB6C 0FC2B35F */ jal textRender -/* 0DE560 7F0ABB70 AFA80018 */ sw $t0, 0x18($sp) -/* 0DE564 7F0ABB74 8FAB0074 */ lw $t3, 0x74($sp) -/* 0DE568 7F0ABB78 AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0DE56C 7F0ABB7C 26730001 */ addiu $s3, $s3, 1 -/* 0DE570 7F0ABB80 25790001 */ addiu $t9, $t3, 1 -/* 0DE574 7F0ABB84 AFB90074 */ sw $t9, 0x74($sp) -.L7F0ABB88: -/* 0DE578 7F0ABB88 0FC15D22 */ jal objectiveGetCount -/* 0DE57C 7F0ABB8C 27DE0001 */ addiu $fp, $fp, 1 -/* 0DE580 7F0ABB90 03C2082A */ slt $at, $fp, $v0 -/* 0DE584 7F0ABB94 1420FF2E */ bnez $at, .L7F0AB850 -/* 0DE588 7F0ABB98 00000000 */ nop -.L7F0ABB9C: -/* 0DE58C 7F0ABB9C 0FC2AF98 */ jal setTextOverlapCorrection -/* 0DE590 7F0ABBA0 2404FFFF */ li $a0, -1 -/* 0DE594 7F0ABBA4 0FC296DB */ jal mission_brief_objectives_navigation -/* 0DE598 7F0ABBA8 00000000 */ nop -.L7F0ABBAC: -/* 0DE59C 7F0ABBAC 8FB80D4C */ lw $t8, 0xd4c($sp) -.L7F0ABBB0: -/* 0DE5A0 7F0ABBB0 240D000A */ li $t5, 10 -/* 0DE5A4 7F0ABBB4 AFAD0014 */ sw $t5, 0x14($sp) -/* 0DE5A8 7F0ABBB8 27A40D54 */ addiu $a0, $sp, 0xd54 -/* 0DE5AC 7F0ABBBC 27A50D50 */ addiu $a1, $sp, 0xd50 -/* 0DE5B0 7F0ABBC0 27A60170 */ addiu $a2, $sp, 0x170 -/* 0DE5B4 7F0ABBC4 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0DE5B8 7F0ABBC8 0FC2B713 */ jal textMeasure -/* 0DE5BC 7F0ABBCC AFB80010 */ sw $t8, 0x10($sp) -/* 0DE5C0 7F0ABBD0 8FAC0D48 */ lw $t4, 0xd48($sp) -/* 0DE5C4 7F0ABBD4 8FAF0D4C */ lw $t7, 0xd4c($sp) -/* 0DE5C8 7F0ABBD8 3C0EA0FF */ lui $t6, (0xA0FFA0F0 >> 16) # lui $t6, 0xa0ff -/* 0DE5CC 7F0ABBDC 35CEA0F0 */ ori $t6, (0xA0FFA0F0 & 0xFFFF) # ori $t6, $t6, 0xa0f0 -/* 0DE5D0 7F0ABBE0 240800D2 */ li $t0, 210 -/* 0DE5D4 7F0ABBE4 240A0082 */ li $t2, 130 -/* 0DE5D8 7F0ABBE8 2409000A */ li $t1, 10 -/* 0DE5DC 7F0ABBEC AFA90028 */ sw $t1, 0x28($sp) -/* 0DE5E0 7F0ABBF0 AFAA0020 */ sw $t2, 0x20($sp) -/* 0DE5E4 7F0ABBF4 AFA8001C */ sw $t0, 0x1c($sp) -/* 0DE5E8 7F0ABBF8 AFAE0018 */ sw $t6, 0x18($sp) -/* 0DE5EC 7F0ABBFC 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0DE5F0 7F0ABC00 27A50D64 */ addiu $a1, $sp, 0xd64 -/* 0DE5F4 7F0ABC04 27A60D60 */ addiu $a2, $sp, 0xd60 -/* 0DE5F8 7F0ABC08 27A70170 */ addiu $a3, $sp, 0x170 -/* 0DE5FC 7F0ABC0C AFA00024 */ sw $zero, 0x24($sp) -/* 0DE600 7F0ABC10 AFAC0010 */ sw $t4, 0x10($sp) -/* 0DE604 7F0ABC14 0FC2B35F */ jal textRender -/* 0DE608 7F0ABC18 AFAF0014 */ sw $t7, 0x14($sp) -/* 0DE60C 7F0ABC1C 8FAB0D60 */ lw $t3, 0xd60($sp) -/* 0DE610 7F0ABC20 8FB80D4C */ lw $t8, 0xd4c($sp) -/* 0DE614 7F0ABC24 2403003C */ li $v1, 60 -/* 0DE618 7F0ABC28 240D000A */ li $t5, 10 -/* 0DE61C 7F0ABC2C 25790005 */ addiu $t9, $t3, 5 -/* 0DE620 7F0ABC30 AFA20DE8 */ sw $v0, 0xde8($sp) -/* 0DE624 7F0ABC34 AFB90D60 */ sw $t9, 0xd60($sp) -/* 0DE628 7F0ABC38 AFAD0014 */ sw $t5, 0x14($sp) -/* 0DE62C 7F0ABC3C AFA30D64 */ sw $v1, 0xd64($sp) -/* 0DE630 7F0ABC40 27A40D54 */ addiu $a0, $sp, 0xd54 -/* 0DE634 7F0ABC44 27A50D50 */ addiu $a1, $sp, 0xd50 -/* 0DE638 7F0ABC48 27A60190 */ addiu $a2, $sp, 0x190 -/* 0DE63C 7F0ABC4C 8FA70D48 */ lw $a3, 0xd48($sp) -/* 0DE640 7F0ABC50 0FC2B713 */ jal textMeasure -/* 0DE644 7F0ABC54 AFB80010 */ sw $t8, 0x10($sp) -/* 0DE648 7F0ABC58 0C000F9B */ jal viGetX -/* 0DE64C 7F0ABC5C 00000000 */ nop -/* 0DE650 7F0ABC60 0C000F9F */ jal viGetY -/* 0DE654 7F0ABC64 A7A20064 */ sh $v0, 0x64($sp) -/* 0DE658 7F0ABC68 8FAC0D48 */ lw $t4, 0xd48($sp) -/* 0DE65C 7F0ABC6C 8FAF0D4C */ lw $t7, 0xd4c($sp) -/* 0DE660 7F0ABC70 87A80064 */ lh $t0, 0x64($sp) -/* 0DE664 7F0ABC74 3C0E00FF */ lui $t6, (0x00FF00B0 >> 16) # lui $t6, 0xff -/* 0DE668 7F0ABC78 35CE00B0 */ ori $t6, (0x00FF00B0 & 0xFFFF) # ori $t6, $t6, 0xb0 -/* 0DE66C 7F0ABC7C 240A000A */ li $t2, 10 -/* 0DE670 7F0ABC80 AFAA0028 */ sw $t2, 0x28($sp) -/* 0DE674 7F0ABC84 AFAE0018 */ sw $t6, 0x18($sp) -/* 0DE678 7F0ABC88 8FA40DE8 */ lw $a0, 0xde8($sp) -/* 0DE67C 7F0ABC8C 27A50D64 */ addiu $a1, $sp, 0xd64 -/* 0DE680 7F0ABC90 27A60D60 */ addiu $a2, $sp, 0xd60 -/* 0DE684 7F0ABC94 27A70190 */ addiu $a3, $sp, 0x190 -/* 0DE688 7F0ABC98 AFA20020 */ sw $v0, 0x20($sp) -/* 0DE68C 7F0ABC9C AFA00024 */ sw $zero, 0x24($sp) -/* 0DE690 7F0ABCA0 AFAC0010 */ sw $t4, 0x10($sp) -/* 0DE694 7F0ABCA4 AFAF0014 */ sw $t7, 0x14($sp) -/* 0DE698 7F0ABCA8 0FC2B35F */ jal textRender -/* 0DE69C 7F0ABCAC AFA8001C */ sw $t0, 0x1c($sp) -/* 0DE6A0 7F0ABCB0 AFA20DE8 */ sw $v0, 0xde8($sp) -.L7F0ABCB4: -/* 0DE6A4 7F0ABCB4 8FBF005C */ lw $ra, 0x5c($sp) -/* 0DE6A8 7F0ABCB8 8FA20DE8 */ lw $v0, 0xde8($sp) -/* 0DE6AC 7F0ABCBC 8FB00038 */ lw $s0, 0x38($sp) -/* 0DE6B0 7F0ABCC0 8FB1003C */ lw $s1, 0x3c($sp) -/* 0DE6B4 7F0ABCC4 8FB20040 */ lw $s2, 0x40($sp) -/* 0DE6B8 7F0ABCC8 8FB30044 */ lw $s3, 0x44($sp) -/* 0DE6BC 7F0ABCCC 8FB40048 */ lw $s4, 0x48($sp) -/* 0DE6C0 7F0ABCD0 8FB5004C */ lw $s5, 0x4c($sp) -/* 0DE6C4 7F0ABCD4 8FB60050 */ lw $s6, 0x50($sp) -/* 0DE6C8 7F0ABCD8 8FB70054 */ lw $s7, 0x54($sp) -/* 0DE6CC 7F0ABCDC 8FBE0058 */ lw $fp, 0x58($sp) -/* 0DE6D0 7F0ABCE0 03E00008 */ jr $ra -/* 0DE6D4 7F0ABCE4 27BD0DE8 */ addiu $sp, $sp, 0xde8 -) -#endif - -#endif - - -Gfx *sub_GAME_7F0ACA28(Gfx *gdl, Mtx *arg1, s32 watch_transitioning) +/** + * Address: 7F0ACA28 + */ +Gfx *draw_watch_current_page(Gfx *gdl, Mtx *arg1, s32 watch_transitioning) { set_page_rectangle_colors(watch_screen_index, (struct WatchVertex *)g_CurrentPlayer->buffer_for_watch_greenbackdrop_vertices); diff --git a/src/game/options.h b/src/game/options.h index eaca02db..cbae4731 100644 --- a/src/game/options.h +++ b/src/game/options.h @@ -147,7 +147,7 @@ void cur_player_set_control_type(int type); // one argument. //void init_watch_at_start_of_stage(int a); -Gfx *sub_GAME_7F0ACA28(Gfx *gdl, Mtx *arg1, s32 watch_transitioning); +Gfx *draw_watch_current_page(Gfx *gdl, Mtx *arg1, s32 watch_transitioning); void sub_GAME_7F0A69A8(void); #endif diff --git a/src/game/othermodemicrocode.c b/src/game/othermodemicrocode.c index e51d1649..b1695502 100644 --- a/src/game/othermodemicrocode.c +++ b/src/game/othermodemicrocode.c @@ -168,7 +168,7 @@ s32 sub_GAME_7F076928(s32 arg0, s32 arg1, s32 arg2) } -void texSetRenderMode(Gfx **gdlptr, s32 arg1, s32 numcycles, s32 arg3) +void texSetRenderMode(Gfx **gdlptr, s32 arg1, s32 numcycles, s32 zbufferMode) { Gfx *gdl = *gdlptr; @@ -181,9 +181,9 @@ void texSetRenderMode(Gfx **gdlptr, s32 arg1, s32 numcycles, s32 arg3) { default: case 1: - if (arg3) + if (zbufferMode) { - if (arg3 >= 2) + if (zbufferMode >= 2) { gDPSetRenderMode(gdl++, G_RM_AA_ZB_OPA_DECAL, G_RM_AA_ZB_OPA_DECAL2); } @@ -199,9 +199,9 @@ void texSetRenderMode(Gfx **gdlptr, s32 arg1, s32 numcycles, s32 arg3) break; case 2: - if (arg3) + if (zbufferMode) { - if (arg3 >= 2) + if (zbufferMode >= 2) { gDPSetRenderMode(gdl++, G_RM_AA_ZB_XLU_DECAL, G_RM_AA_ZB_XLU_DECAL2); } @@ -217,7 +217,7 @@ void texSetRenderMode(Gfx **gdlptr, s32 arg1, s32 numcycles, s32 arg3) break; case 3: - if (arg3) + if (zbufferMode) { gDPSetRenderMode(gdl++, G_RM_AA_ZB_TEX_EDGE, G_RM_AA_ZB_TEX_EDGE2); } @@ -228,7 +228,7 @@ void texSetRenderMode(Gfx **gdlptr, s32 arg1, s32 numcycles, s32 arg3) break; case 4: - if (arg3) + if (zbufferMode) { gDPSetRenderMode(gdl++, G_RM_ZB_CLD_SURF, G_RM_ZB_CLD_SURF2); } @@ -248,9 +248,9 @@ void texSetRenderMode(Gfx **gdlptr, s32 arg1, s32 numcycles, s32 arg3) { default: case 1: - if (arg3) + if (zbufferMode) { - if (arg3 >= 2) + if (zbufferMode >= 2) { gDPSetRenderMode(gdl++, G_RM_PASS, G_RM_AA_ZB_OPA_DECAL2); } @@ -266,9 +266,9 @@ void texSetRenderMode(Gfx **gdlptr, s32 arg1, s32 numcycles, s32 arg3) break; case 2: - if (arg3) + if (zbufferMode) { - if (arg3 >= 2) + if (zbufferMode >= 2) { gDPSetRenderMode(gdl++, G_RM_PASS, G_RM_AA_ZB_XLU_DECAL2); } @@ -284,7 +284,7 @@ void texSetRenderMode(Gfx **gdlptr, s32 arg1, s32 numcycles, s32 arg3) break; case 3: - if (arg3) + if (zbufferMode) { gDPSetRenderMode(gdl++, G_RM_PASS, G_RM_AA_ZB_TEX_EDGE2); } @@ -295,7 +295,7 @@ void texSetRenderMode(Gfx **gdlptr, s32 arg1, s32 numcycles, s32 arg3) break; case 4: - if (arg3) + if (zbufferMode) { gDPSetRenderMode(gdl++, G_RM_PASS, G_RM_ZB_CLD_SURF2); } @@ -517,7 +517,7 @@ void texSelect(Gfx **gdlptr, struct sImageTableEntry *tconfig, u32 arg2, s32 arg depth = tconfig->depth; } - if ((tex != NULL) && (tex->unk0c_02)) + if ((tex != NULL) && (tex->hasExplicitLods)) { texGetDepthAndSize(tex, &depth2, &lrs); } @@ -629,7 +629,7 @@ void texSelect(Gfx **gdlptr, struct sImageTableEntry *tconfig, u32 arg2, s32 arg if (tile > 0) { - if ((tex != NULL) && (tex->unk0c_02)) + if ((tex != NULL) && (tex->hasExplicitLods)) { width = texGetWidthAtLod(tex, tile); height = texGetHeightAtLod(tex, tile); diff --git a/src/game/padhalllv.c b/src/game/padhalllv.c index 594b98f5..70d82ce8 100644 --- a/src/game/padhalllv.c +++ b/src/game/padhalllv.c @@ -4,11 +4,11 @@ #include "chrai.h" #include "random.h" -//pd decomp has a filesplit here -//all ge versions align properly - -waypoint *sub_GAME_7F08EBD0(coord3d *pos, s32 arg1) +/** + * Unreferenced. + */ +waypoint *waypointFindNearestToPos(coord3d *pos, s32 arg1) { waypoint *head; PadRecord *pad; @@ -44,7 +44,10 @@ waypoint *sub_GAME_7F08EBD0(coord3d *pos, s32 arg1) } -waypoint* sub_GAME_7F08EC8C(coord3d* pos, s32 arg1, waypoint* arg2) +/** + * Unreferenced. + */ +waypoint* waypointRefineNearestToPos(coord3d* pos, s32 arg1, waypoint* arg2) { PadRecord* pad; f32 sqrdist2; @@ -83,7 +86,7 @@ waypoint* sub_GAME_7F08EC8C(coord3d* pos, s32 arg1, waypoint* arg2) } -waygroup *sub_GAME_7F08ED60(s32 *groupnums, s32 value) +waygroup *waygroupFindByDist(s32 *groupnums, s32 value) { waygroup *groups = g_CurrentSetup.waypointgroups; @@ -95,7 +98,8 @@ waygroup *sub_GAME_7F08ED60(s32 *groupnums, s32 value) { return group; } - *groupnums++; + + groupnums++; } return NULL; @@ -106,7 +110,7 @@ waygroup *sub_GAME_7F08ED60(s32 *groupnums, s32 value) * For each group number in the given list assign value to their * dist if their dist has no value (ie. is negative). */ -void sub_GAME_7F08EDB4(s32 *groupnums, s32 value) +void waygroupsSetUnvisitedDist(s32 *groupnums, s32 value) { waygroup *groups = g_CurrentSetup.waypointgroups; @@ -125,13 +129,13 @@ void sub_GAME_7F08EDB4(s32 *groupnums, s32 value) /** - * Iterate the given groups and find any with an dist matching arg1. + * Iterate the given groups and find any with a dist matching arg1. * For all groups that match, iterate their neighbouring groups and set their * dist to arg1 + 1, but only if their they have no existing dist value. * * Return true if any matched. */ -bool sub_GAME_7F08EE00(struct waygroup *group, s32 arg1) +bool waygroupsPropagateDist(struct waygroup *group, s32 arg1) { bool result = FALSE; @@ -140,7 +144,7 @@ bool sub_GAME_7F08EE00(struct waygroup *group, s32 arg1) if (group->dist == arg1) { result = TRUE; - sub_GAME_7F08EDB4(group->neighbours, arg1 + 1); + waygroupsSetUnvisitedDist(group->neighbours, arg1 + 1); } group++; @@ -150,7 +154,7 @@ bool sub_GAME_7F08EE00(struct waygroup *group, s32 arg1) } -bool sub_GAME_7F08EE70(struct waygroup *from, struct waygroup *to, struct waygroup *groups, s32 arg3) +bool waygroupsFloodDist(struct waygroup *from, struct waygroup *to, struct waygroup *groups, s32 arg3) { bool result = TRUE; struct waygroup *group; @@ -165,17 +169,17 @@ bool sub_GAME_7F08EE70(struct waygroup *from, struct waygroup *to, struct waygro for (i = 0; (arg3 || to->dist < 0) && result; i++) { - result = sub_GAME_7F08EE00(groups, i); + result = waygroupsPropagateDist(groups, i); } return result; } -bool sub_GAME_7F08EF1C(waygroup *from, waygroup *to, waygroup *groups) +bool waygroupsMarkRoute(waygroup *from, waygroup *to, waygroup *groups) { u32 stack[2]; - bool result = sub_GAME_7F08EE70(from, to, groups, 0); + bool result = waygroupsFloodDist(from, to, groups, 0); if (result) { @@ -185,7 +189,7 @@ bool sub_GAME_7F08EF1C(waygroup *from, waygroup *to, waygroup *groups) while (i >= 0) { curto->dist += 10000; - curto = sub_GAME_7F08ED60(curto->neighbours, i); + curto = waygroupFindByDist(curto->neighbours, i); i--; } @@ -196,13 +200,16 @@ bool sub_GAME_7F08EF1C(waygroup *from, waygroup *to, waygroup *groups) } -s32 sub_GAME_7F08EFA0(waygroup* from, waygroup* to, waygroup** arr, s32 arrlen) +/** + * Unreferenced. + */ +s32 waygroupFindRoute(waygroup* from, waygroup* to, waygroup** arr, s32 arrlen) { waygroup **arrptr = arr; waygroup *curfrom; s32 i; - if (arrlen >= 2 && g_CurrentSetup.waypointgroups && sub_GAME_7F08EF1C(from, to, g_CurrentSetup.waypointgroups) != 0) + if (arrlen >= 2 && g_CurrentSetup.waypointgroups && waygroupsMarkRoute(from, to, g_CurrentSetup.waypointgroups) != 0) { *arr = from; arrptr++; @@ -213,7 +220,7 @@ s32 sub_GAME_7F08EFA0(waygroup* from, waygroup* to, waygroup** arr, s32 arrlen) while (i <= to->dist && i < arrlen) { - curfrom = sub_GAME_7F08ED60(curfrom->neighbours, i); + curfrom = waygroupFindByDist(curfrom->neighbours, i); *arrptr = curfrom; arrptr++; i++; @@ -247,7 +254,7 @@ waypoint *findPadWithDistAndSet(s32 *pointnums, s32 arg1, s32 groupnum) } -void sub_GAME_7F08F0E8(s32 *pointnums, s32 value, s32 groupnum) +void waypointsSetUnvisitedDist(s32 *pointnums, s32 value, s32 groupnum) { waypoint *waypoints = g_CurrentSetup.pathwaypoints; @@ -265,7 +272,7 @@ void sub_GAME_7F08F0E8(s32 *pointnums, s32 value, s32 groupnum) } -bool sub_GAME_7F08F138(s32 *pointnums, s32 arg1, s32 groupnum) +bool waypointsPropagateDist(s32 *pointnums, s32 arg1, s32 groupnum) { bool result = FALSE; waypoint *points = g_CurrentSetup.pathwaypoints; @@ -277,7 +284,7 @@ bool sub_GAME_7F08F138(s32 *pointnums, s32 arg1, s32 groupnum) if (arg1 == point->dist && point->neighbours) { result = TRUE; - sub_GAME_7F08F0E8(point->neighbours, arg1 + 1, groupnum); + waypointsSetUnvisitedDist(point->neighbours, arg1 + 1, groupnum); } pointnums++; @@ -299,7 +306,7 @@ void do_BFS_withinPathSet(waypoint *from, waypoint *to, s32 arg2) while (*pointnums >= 0) { point = &points[*pointnums]; - point->dist = -1; + point->dist = -1; // reset waypoint pointnums++; } @@ -309,12 +316,12 @@ void do_BFS_withinPathSet(waypoint *from, waypoint *to, s32 arg2) for (i = 0; (arg2 || to->dist < 0) && more; i++) { - more = sub_GAME_7F08F138(groups[from->groupNum].waypoints, i, from->groupNum); + more = waypointsPropagateDist(groups[from->groupNum].waypoints, i, from->groupNum); } } -void sub_GAME_7F08F2CC(waypoint *from, waypoint *to) +void waypointMarkRoute(waypoint *from, waypoint *to) { waypoint *curto; s32 value; @@ -336,7 +343,7 @@ void sub_GAME_7F08F2CC(waypoint *from, waypoint *to) } -s32 sub_GAME_7F08F350(waypoint *from, waypoint *to, waypoint **arr, s32 arrlen) +s32 waypointFindRouteInGroup(waypoint *from, waypoint *to, waypoint **arr, s32 arrlen) { waypoint **arrptr = arr; waypoint *curfrom; @@ -344,7 +351,7 @@ s32 sub_GAME_7F08F350(waypoint *from, waypoint *to, waypoint **arr, s32 arrlen) if (arrlen >= 2) { - sub_GAME_7F08F2CC(from, to); + waypointMarkRoute(from, to); *arr = from; arrptr++; @@ -419,7 +426,7 @@ s32 waypointFindRoute(waypoint *frompoint, waypoint *topoint, waypoint **arr, s3 waygroup *fromgroup = &groups[frompoint->groupNum]; waygroup *togroup = &groups[topoint->groupNum]; - if (sub_GAME_7F08EF1C(fromgroup, togroup, groups)) + if (waygroupsMarkRoute(fromgroup, togroup, groups)) { waypoint *curfrompoint = frompoint; waygroup *curfromgroup = fromgroup; @@ -428,12 +435,12 @@ s32 waypointFindRoute(waypoint *frompoint, waypoint *topoint, waypoint **arr, s3 for (i = fromgroup->dist + 1; i <= togroup->dist && arrlen >= 2; i++) { s32 numwritten; - waygroup *nextfromgroup = sub_GAME_7F08ED60(curfromgroup->neighbours, i); + waygroup *nextfromgroup = waygroupFindByDist(curfromgroup->neighbours, i); waypoint *tmppoint; waypoint *nextfrompoint; sub_GAME_7F08F438(curfromgroup, nextfromgroup, &tmppoint, &nextfrompoint); - numwritten = sub_GAME_7F08F350(curfrompoint, tmppoint, arrptr, arrlen) - 1; + numwritten = waypointFindRouteInGroup(curfrompoint, tmppoint, arrptr, arrlen) - 1; arrlen -= numwritten; arrptr += numwritten; @@ -442,7 +449,7 @@ s32 waypointFindRoute(waypoint *frompoint, waypoint *topoint, waypoint **arr, s3 curfromgroup = nextfromgroup; } - arrptr += sub_GAME_7F08F350(curfrompoint, topoint, arrptr, arrlen) - 1; + arrptr += waypointFindRouteInGroup(curfrompoint, topoint, arrptr, arrlen) - 1; } } @@ -453,6 +460,10 @@ s32 waypointFindRoute(waypoint *frompoint, waypoint *topoint, waypoint **arr, s3 } +// Resets waypoint distance, seems useless since +// do_BFS_withinPathSet already does this for its own +// waypoint group. Even if do_BFS_withinPathSet doesn't +// reset waypoints outside of its own group, is that really needed? void resetWaypointDistances(void) { waypoint * waypoint; @@ -466,7 +477,7 @@ void resetWaypointDistances(void) } -waypoint *sub_GAME_7F08F6B0(s32 *pointnums, s32 arg1) +waypoint *waypointFindRandomByDist(s32 *pointnums, s32 dist) { s32 len = 0; s32 randomindex; @@ -489,7 +500,7 @@ waypoint *sub_GAME_7F08F6B0(s32 *pointnums, s32 arg1) { waypoint *point = &g_CurrentSetup.pathwaypoints[pointnums[i]]; - if (point->dist == arg1) + if (point->dist == dist) { return point; } @@ -499,7 +510,7 @@ waypoint *sub_GAME_7F08F6B0(s32 *pointnums, s32 arg1) { waypoint *point = &g_CurrentSetup.pathwaypoints[pointnums[i]]; - if (point->dist == arg1) + if (point->dist == dist) { return point; } @@ -509,7 +520,7 @@ waypoint *sub_GAME_7F08F6B0(s32 *pointnums, s32 arg1) } -waygroup *sub_GAME_7F08F908(s32 *groupnums, s32 arg1) +waygroup *waygroupFindRandomByDist(s32 *groupnums, s32 dist) { s32 len = 0; s32 randomindex; @@ -521,14 +532,14 @@ waygroup *sub_GAME_7F08F908(s32 *groupnums, s32 arg1) } // Similar to the above function, return a random waygroup - // which matches the arg1 criteria. + // which matches the dist criteria. randomindex = randomGetNext() % len; for (i = randomindex; i < len; i++) { waygroup *group = &g_CurrentSetup.waypointgroups[groupnums[i]]; - if (group->dist == arg1) + if (group->dist == dist) { return group; } @@ -538,7 +549,7 @@ waygroup *sub_GAME_7F08F908(s32 *groupnums, s32 arg1) { waygroup *group = &g_CurrentSetup.waypointgroups[groupnums[i]]; - if (group->dist == arg1) + if (group->dist == dist) { return group; } @@ -548,7 +559,7 @@ waygroup *sub_GAME_7F08F908(s32 *groupnums, s32 arg1) } -waypoint *sub_GAME_7F08FB90(waypoint *pointa, waypoint *pointb) +waypoint *waypointFindNextStepToward(waypoint *pointa, waypoint *pointb) { if (g_CurrentSetup.waypointgroups) { @@ -562,14 +573,14 @@ waypoint *sub_GAME_7F08FB90(waypoint *pointa, waypoint *pointb) resetWaypointDistances(); do_BFS_withinPathSet(pointb, pointa, 1); - result = sub_GAME_7F08F6B0(pointa->neighbours, -1); + result = waypointFindRandomByDist(pointa->neighbours, -1); if (result) { return result; } - result = sub_GAME_7F08F6B0(pointa->neighbours, pointa->dist + 1); + result = waypointFindRandomByDist(pointa->neighbours, pointa->dist + 1); if (result) { @@ -578,11 +589,11 @@ waypoint *sub_GAME_7F08FB90(waypoint *pointa, waypoint *pointb) } else { - sub_GAME_7F08EE70(groupb, groupa, g_CurrentSetup.waypointgroups, 0); + waygroupsFloodDist(groupb, groupa, g_CurrentSetup.waypointgroups, 0); if (groupa->dist >= 0) { - waygroup *tmpgroup = sub_GAME_7F08F908(groupa->neighbours, -1); + waygroup *tmpgroup = waygroupFindRandomByDist(groupa->neighbours, -1); if (tmpgroup) { @@ -597,14 +608,14 @@ waypoint *sub_GAME_7F08FB90(waypoint *pointa, waypoint *pointb) return sp44; } - if (sub_GAME_7F08F350(pointa, sp48, arr, 3) >= 3) + if (waypointFindRouteInGroup(pointa, sp48, arr, 3) >= 3) { return arr[1]; } } else { - waygroup *tmpgroup = sub_GAME_7F08ED60(groupa->neighbours, groupa->dist - 1); + waygroup *tmpgroup = waygroupFindByDist(groupa->neighbours, groupa->dist - 1); if (tmpgroup) { @@ -629,7 +640,10 @@ waypoint *sub_GAME_7F08FB90(waypoint *pointa, waypoint *pointb) } -void sub_GAME_7F08FD1C(void) +/** + * Unreferenced + */ +void waypointDebugTestRandomRoute(void) { waypoint* waypoints; s32 count; diff --git a/src/game/player.c b/src/game/player.c index 4975a231..53583db6 100644 --- a/src/game/player.c +++ b/src/game/player.c @@ -122,7 +122,7 @@ void initBONDdataforPlayer(s32 player_num) #ifdef DEBUG assert(players[num]==NULL); //according to assert, this file name is "player.c" #endif - default_hand = *((struct hand*)D_8003FDA0); + default_hand = D_8003FDA0; #if defined(VERSION_US) || defined(VERSION_JP) g_playerPointers[player_num] = mempAllocBytesInBank(0x2A80U, MEMPOOL_STAGE); #elif defined(VERSION_EU) @@ -133,7 +133,7 @@ void initBONDdataforPlayer(s32 player_num) assert(players[num]!=NULL); #endif - g_playerPointers[player_num]->unknown = 0; + g_playerPointers[player_num]->cameramode = 0; g_playerPointers[player_num]->pos.x = 0.0f; g_playerPointers[player_num]->pos.y = 0.0f; g_playerPointers[player_num]->pos.z = 0.0f; @@ -146,7 +146,7 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->pos3.x = 0.0f; g_playerPointers[player_num]->pos3.y = 0.0f; g_playerPointers[player_num]->pos3.z = 0.0f; - g_playerPointers[player_num]->room_pointer = NULL; + g_playerPointers[player_num]->cameratile = NULL; g_playerPointers[player_num]->current_model_pos.x = 0.0f; g_playerPointers[player_num]->current_model_pos.y = 0.0f; g_playerPointers[player_num]->current_model_pos.z = 0.0f; @@ -178,7 +178,7 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->prop = NULL; g_playerPointers[player_num]->field_AC = 1; g_playerPointers[player_num]->field_D0 = 0; - g_playerPointers[player_num]->ptr_char_objectinstance = NULL; + g_playerPointers[player_num]->bodyModel = NULL; g_playerPointers[player_num]->bonddead = FALSE; g_playerPointers[player_num]->bondhealth = 1.0f; g_playerPointers[player_num]->bondarmour = 0.0f; @@ -188,9 +188,9 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->apparentarmour = 0.0f; g_playerPointers[player_num]->damageshowtime = -1; g_playerPointers[player_num]->healthshowtime = -1; - g_playerPointers[player_num]->field_104 = 0; - g_playerPointers[player_num]->field_108 = 0; - g_playerPointers[player_num]->field_10C = 0; + g_playerPointers[player_num]->docentreupdown = FALSE; + g_playerPointers[player_num]->lastupdown60 = 0; + g_playerPointers[player_num]->prevupdown = 0; g_playerPointers[player_num]->movecentrerelease = FALSE; g_playerPointers[player_num]->lookaheadcentreenabled = TRUE; g_playerPointers[player_num]->automovecentreenabled = TRUE; @@ -247,11 +247,11 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->field_1F4 = 1.0f; g_playerPointers[player_num]->pausing_flag = FALSE; g_playerPointers[player_num]->pause_starting_angle = 0.0f; - g_playerPointers[player_num]->pause_related = 0.0f; - g_playerPointers[player_num]->pause_target_angle = 0.0f; - g_playerPointers[player_num]->field_210 = 0.0f; - g_playerPointers[player_num]->field_214 = 0.0f; - g_playerPointers[player_num]->field_218 = 0; + g_playerPointers[player_num]->pause_saved_verta = 0.0f; + g_playerPointers[player_num]->pause_target_verta = 0.0f; + g_playerPointers[player_num]->pause_transition_time = 0.0f; + g_playerPointers[player_num]->pause_transition_duration = 0.0f; + g_playerPointers[player_num]->pause_state = 0; g_playerPointers[player_num]->field_21C = 1; g_playerPointers[player_num]->step_in_view_watch_animation = 0; g_playerPointers[player_num]->pause_animation_counter = 0.0f; @@ -416,7 +416,7 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->field_10C8 = NULL; g_playerPointers[player_num]->field_10CC = NULL; g_playerPointers[player_num]->field_10D0 = 0; - g_playerPointers[player_num]->field_10D4 = NULL; + g_playerPointers[player_num]->viewtoworldmtxf = NULL; g_playerPointers[player_num]->projmatrix = NULL; g_playerPointers[player_num]->projmatrixf = NULL; g_playerPointers[player_num]->field_10E0 = 0; @@ -454,9 +454,9 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->field_1280 = 0.0f; g_playerPointers[player_num]->players_cur_animation = 0; g_playerPointers[player_num]->field_1288 = 0.0f; - g_playerPointers[player_num]->bondinvincible = FALSE; - g_playerPointers[player_num]->healthDamageType = 7; - g_playerPointers[player_num]->field_29BC = 1.0f; + g_playerPointers[player_num]->cheatBondInvincible = FALSE; + g_playerPointers[player_num]->healthdamagetype = 7; + g_playerPointers[player_num]->eyeheight = 1.0f; g_playerPointers[player_num]->field_29C0 = 0.0f; g_playerPointers[player_num]->mpmenuon = FALSE; g_playerPointers[player_num]->damagetype = 7; diff --git a/src/game/prop.c b/src/game/prop.c index 0314b312..8c877b2c 100644 --- a/src/game/prop.c +++ b/src/game/prop.c @@ -25,27 +25,15 @@ #include "prop.h" #include "stan.h" #include "model.h" +#include "token.h" /** * EU .bss 0x80068480 */ ITEM_IDS lastmpweaponnum; -//.section .rodata - -const char aNochr[] = "-nochr"; -const char aNoprop[] = "-noprop"; -const char aNoobj[] = "-noobj"; -const char aNoprop_0[] = "-noprop"; - -const u32 only_read_by_stageload[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -const char aMp_[] = "mp_"; +// redeclare with the element count so ARRAYCOUNT works in proplvreset2 +extern ItemModelFileRecord PitemZ_entries[341]; // forward declarations @@ -304,7 +292,7 @@ void domakedefaultobj(s32 arg0, ObjectRecord *arg1, s32 cmdindex) } } - if (sub_GAME_7F056850(&spD0, spCC, 0.0f, &spE0, &spDC) != 0) + if (getposstan(&spD0, spCC, 0.0f, &spE0, &spDC) != 0) { if (arg1->type == PROP_TYPE_SMOKE) { @@ -984,7 +972,7 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) if ((door->flags & PROPFLAG_CULL_BEHIND_DOOR) && (sp1B0 >= 0) && (sp1AC >= 0)) { - portalnum = sub_GAME_7F0B9CC8(sp1B0, sp1AC, &sp1A0, &sp194); + portalnum = bgGetPortalBetweenRooms(sp1B0, sp1AC, &sp1A0, &sp194); } } @@ -1036,7 +1024,7 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) } } - if (sub_GAME_7F056850(&pad->pos, pad->stan, 0.0f, &sp1B8, &sp1C8_stan) != 0) + if (getposstan(&pad->pos, pad->stan, 0.0f, &sp1B8, &sp1C8_stan) != 0) { matrix_4x4_set_basis_and_position_target(&sp12C, 0, 0, 0, -pad->look.f[0], -pad->look.f[1], -pad->look.f[2], pad->up.f[0], pad->up.f[1], pad->up.f[2]); sp124 = PitemZ_entries[modelnum].header; @@ -1106,7 +1094,7 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) sp118.f[2] = sp1B8.f[2]; } - if ((door->doorType == 4) || (door->doorType == 8)) + if ((door->doorType == DOORTYPE_VERTICAL) || (door->doorType == DOORTYPE_FALLAWAY)) { sp7C.f[0] = pad->look.f[0] * (bb2.xmin - bb2.xmax); sp7C.f[1] = pad->look.f[1] * (bb2.xmin - bb2.xmax); @@ -1225,42 +1213,6 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) } - -#ifdef NONMATCHING - -// https://decomp.me/scratch/abV9k 99.64% - -/* -* mismatch seems to be related to the index variables. -* here are some macros to test theories. -*/ -#define DECLARE_i_01_TOP s32 i1 = 0; -#define DECLARE_i_01_LOCAL -#define V_i_01 i1 -#define DECLARE_i_02_TOP s32 i2 = 0; -#define DECLARE_i_02_LOCAL -#define V_i_02 i2 -#define DECLARE_i_03_TOP s32 i3 = 0; -#define DECLARE_i_03_LOCAL -#define V_i_03 i3 -#define DECLARE_i_04_TOP -#define DECLARE_i_04_LOCAL -#define V_i_04 i1 -#define DECLARE_i_05_TOP s32 i5 = 0; -#define DECLARE_i_05_LOCAL -#define V_i_05 i5 -#define DECLARE_i_06_TOP -#define DECLARE_i_06_LOCAL -#define V_i_06 i1 -#define DECLARE_i_07_TOP -#define DECLARE_i_07_LOCAL -#define V_i_07 i1 -#define DECLARE_i_08_TOP s32 i8; -#define DECLARE_i_08_LOCAL -#define V_i_08 i8 -#define DECLARE_i_09 s32 i9; -#define V_i_09 i9 - // Perfect Dark void setupLoadFiles(s32 stagenum) void proplvreset2(enum LEVELID stageId) { @@ -1268,64 +1220,72 @@ void proplvreset2(enum LEVELID stageId) s32 withchrs; s32 withobjs; - withchrs = (tokenFind(1, "-nochr") == NULL && tokenFind(1, "-noprop") == NULL); - withobjs = (tokenFind(1, "-noobj") == NULL && tokenFind(1, "-noprop") == NULL); + withchrs = (((void *) tokenFind(1, "-nochr")) == NULL) && (((void *) tokenFind(1, "-noprop")) == NULL); + withobjs = (((void *) tokenFind(1, "-noobj")) == NULL) && (((void *) tokenFind(1, "-noprop")) == NULL); g_DoorScale = 1.0f; - for (pitem = PitemZ_entries; pitem < &PitemZ_entries[sizeof(PitemZ_entries) / sizeof(ItemModelFileRecord) -1]; pitem++) + /** + * Mark every prop model as "not resident" so the model loads later in this function actually fetch data. Essentially + * RootNode is doubling as a loaded flag for function modelLoad(). + * + * The last entry in the PitemZ_entries table is a terminator which is why 1 is subtracted from the loop length. + */ + for (pitem = PitemZ_entries; pitem < &PitemZ_entries[ARRAYCOUNT(PitemZ_entries) - 1]; pitem++) { - pitem->header->RootNode = NULL; // modelstate + pitem->header->RootNode = NULL; } - if (stageId <= LEVELID_MAX + 1 && setup_text_pointers[stageId]) + if ((stageId <= (LEVELID_MAX + 1)) && setup_text_pointers[stageId]) { - char strResource[0x100] = ""; // new empty string - s32 guardcount = 0; - s32 collectcount = 0; - - DECLARE_i_01_TOP - DECLARE_i_02_TOP - DECLARE_i_03_TOP - DECLARE_i_04_TOP - f32 roompos_1; // sp 0x15c - DECLARE_i_05_TOP - DECLARE_i_06_TOP - DECLARE_i_07_TOP - DECLARE_i_08_TOP - f32 roompos_2; // sp 0x150 - + char strResource[0x100] = ""; // Scratch buffer for synthesizing the setup file's name at runtime. + s32 numAnimatedObjects = 0; + s32 numObjects = 0; + s32 i1 = 0; + s32 i2 = 0; + s32 i3 = 0; + f32 roompos_1; + s32 i5 = 0; + s32 i8; + f32 roompos_2; struct stagesetup *local_stage; - strResource[0] = setup_text_pointers[stageId][0]; // Get U from "U"setupxxxZ - strResource[1] = 0; // make sure string is terminated + strResource[0] = setup_text_pointers[stageId][0]; // 'U' -> "U" + strResource[1] = 0; // Terminate so strcat has a valid string. + /** + * There are no slots for the mp stages in setup_text_pointers. The name is created + * by adding "mp_" after the "U" e.g. "Ump_setuparchZ" + */ if (getPlayerCount() >= 2) { - strcat(strResource, "mp_"); // U + "mp_" + strcat(strResource, "mp_"); // -> "Ump_" } strcat(strResource, setup_text_pointers[stageId] + 1); // Add remaining text back U[mp_] + setupxxxZ - g_ptrStageSetupFile = _fileNameLoadToBank(strResource, FILELOADMETHOD_DEFAULT, 256, 4); // FILELOADMETHOD_DEFAULT get pointer to setup object (10 words) - local_stage = g_ptrStageSetupFile; + g_ptrStageSetupFile = _fileNameLoadToBank(strResource, FILELOADMETHOD_DEFAULT, 256, MEMPOOL_STAGE); + local_stage = g_ptrStageSetupFile; langLoadToAddr(langGetLangBankIndexFromStagenum(stageId)); - // deep copy struct, need to manually itterate, as g_CurrentSetup = resource doesnt work - // Remember Setups store "Offsets" so we need to convert to RAM Address - g_CurrentSetup.pathwaypoints = TRANSFORM3(pathwaypoints); - g_CurrentSetup.waypointgroups = TRANSFORM3(waypointgroups); - g_CurrentSetup.intro = TRANSFORM3(intro); - g_CurrentSetup.propDefs = TRANSFORM3(propDefs); - g_CurrentSetup.patrolpaths = TRANSFORM3(patrolpaths); - g_CurrentSetup.ailists = TRANSFORM3(ailists); - g_CurrentSetup.pads = TRANSFORM3(pads); - g_CurrentSetup.boundpads = TRANSFORM3(boundpads); + /** + * The setup file stores every internal reference as a byte offset from the start of the file, + * so rebase them all onto the RAM copy at local_stage. + */ + g_CurrentSetup.pathwaypoints = (void *) (((u32) local_stage) + ((u32) local_stage->pathwaypoints)); + g_CurrentSetup.waypointgroups = (void *) (((u32) local_stage) + ((u32) local_stage->waypointgroups)); + g_CurrentSetup.intro = (void *) (((u32) local_stage) + ((u32) local_stage->intro)); + g_CurrentSetup.propDefs = (void *) (((u32) local_stage) + ((u32) local_stage->propDefs)); + g_CurrentSetup.patrolpaths = (void *) (((u32) local_stage) + ((u32) local_stage->patrolpaths)); + g_CurrentSetup.ailists = (void *) (((u32) local_stage) + ((u32) local_stage->ailists)); + g_CurrentSetup.pads = (void *) (((u32) local_stage) + ((u32) local_stage->pads)); + g_CurrentSetup.boundpads = (void *) (((u32) local_stage) + ((u32) local_stage->boundpads)); + // Pad names and bound names are optional. An offset of 0 means absent. if (local_stage->padnames != 0) { - g_CurrentSetup.padnames = TRANSFORM3(padnames); + g_CurrentSetup.padnames = (void *) (((u32) local_stage) + ((u32) local_stage->padnames)); } else { @@ -1334,114 +1294,106 @@ void proplvreset2(enum LEVELID stageId) if (local_stage->boundpadnames != 0) { - g_CurrentSetup.boundpadnames = TRANSFORM3(boundpadnames); + g_CurrentSetup.boundpadnames = (void *) (((u32) local_stage) + ((u32) local_stage->boundpadnames)); } else { g_CurrentSetup.boundpadnames = NULL; } - // -------------------------------- - if (g_CurrentSetup.pathwaypoints) { - DECLARE_i_01_LOCAL - - for (V_i_01 = 0; g_CurrentSetup.pathwaypoints[V_i_01].padID >= 0; V_i_01++) + for (i1 = 0; g_CurrentSetup.pathwaypoints[i1].padID >= 0; i1++) { - g_CurrentSetup.pathwaypoints[V_i_01].neighbours = TRANSFORM4(g_CurrentSetup.pathwaypoints[V_i_01].neighbours); + g_CurrentSetup.pathwaypoints[i1].neighbours = (void *) (((u32) g_CurrentSetup.pathwaypoints[i1].neighbours) + ((u32) local_stage)); } } if (g_CurrentSetup.waypointgroups) { - DECLARE_i_02_LOCAL - - for (V_i_02 = 0; g_CurrentSetup.waypointgroups[V_i_02].neighbours; V_i_02++) + for (i2 = 0; g_CurrentSetup.waypointgroups[i2].neighbours; i2++) { - g_CurrentSetup.waypointgroups[V_i_02].neighbours = TRANSFORM4(g_CurrentSetup.waypointgroups[V_i_02].neighbours); - g_CurrentSetup.waypointgroups[V_i_02].waypoints = TRANSFORM4(g_CurrentSetup.waypointgroups[V_i_02].waypoints); + g_CurrentSetup.waypointgroups[i2].neighbours = (void *) (((u32) g_CurrentSetup.waypointgroups[i2].neighbours) + ((u32) local_stage)); + g_CurrentSetup.waypointgroups[i2].waypoints = (void *) (((u32) g_CurrentSetup.waypointgroups[i2].waypoints) + ((u32) local_stage)); } } - // Convert ailist pointers from file-local to proper pointers - if (g_CurrentSetup.ailists) + // Convert ailist pointers a.k.a. Action Blocks from file-local to proper pointers { - DECLARE_i_03_LOCAL - - for (V_i_03 = 0; g_CurrentSetup.ailists[V_i_03].ailist != 0; V_i_03++) + AIListRecord *ailists = g_CurrentSetup.ailists; + if (ailists) { - g_CurrentSetup.ailists[V_i_03].ailist = TRANSFORM4(g_CurrentSetup.ailists[V_i_03].ailist); + for (i3 = 0; g_CurrentSetup.ailists[i3].ailist != 0; i3++) + { + g_CurrentSetup.ailists[i3].ailist = (void *) (((u32) g_CurrentSetup.ailists[i3].ailist) + ((u32) local_stage)); + } } } if (g_CurrentSetup.patrolpaths) { - DECLARE_i_04_LOCAL - - for (V_i_04 = 0; g_CurrentSetup.patrolpaths[V_i_04].waypoints != NULL; V_i_04++) + for (i3 = 0; g_CurrentSetup.patrolpaths[i3].waypoints != NULL; i3++) { - DECLARE_i_05_LOCAL + g_CurrentSetup.patrolpaths[i3].waypoints = (void *) (((u32) g_CurrentSetup.patrolpaths[i3].waypoints) + ((u32) local_stage)); - g_CurrentSetup.patrolpaths[V_i_04].waypoints = TRANSFORM4(g_CurrentSetup.patrolpaths[V_i_04].waypoints); - - for (V_i_05 = 0; g_CurrentSetup.patrolpaths[V_i_04].waypoints[V_i_05] >= 0; V_i_05++) + for (i5 = 0; g_CurrentSetup.patrolpaths[i3].waypoints[i5] >= 0; i5++) { + // Empty } - g_CurrentSetup.patrolpaths[V_i_04].len = V_i_05; + g_CurrentSetup.patrolpaths[i3].len = i5; } } - // -------------------------------- - if (g_CurrentSetup.pads) { - //f32 roompos_1; // sp 0x15c struct PadRecord *pad; - //s32 uVar3; - + roompos_1 = get_room_data_float2(); pad = g_CurrentSetup.pads; for (; pad->plink != NULL; pad++) { - pad->plink = TRANSFORM4(pad->plink); + pad->plink = (void *) (((u32) local_stage) + ((u32) pad->plink)); pad->pos.f[0] *= roompos_1; pad->pos.f[1] *= roompos_1; pad->pos.f[2] *= roompos_1; - + +#ifdef DEBUG + { + s32 sret = init_pathtable_something(pad, pad->plink, &pad->stan); + if (sret == 0) + { + osSyncPrintf("pad number %d has no stan! (%s)\n", (s32)(pad - g_CurrentSetup.pads), pad->plink); + } + else if (sret == 2) + { + osSyncPrintf("pad number %d changed stan from %s to %s\n", (s32)(pad - g_CurrentSetup.pads), pad->plink, GetStanName(pad->stan)); + } + } +#else init_pathtable_something(pad, pad->plink, &pad->stan); +#endif if (1); - //if(pad); -#ifdef DEBUG - if (uVar3 == 0) - { - osSyncPrintf("pad number %d has no stan! (%s)\n", i, pad[i].plink); - } - else if (uVar3 == 2) - { - osSyncPrintf("pad number %d changed stan from %s to %s\n", i, pad[i].plink, GetStanName(pad[i].stan)); - } -#endif } } - if (g_CurrentSetup.boundpads) { struct BoundPadRecord *vol; - //f32 roompos_2; // sp 0x150 - //s32 uVar3; roompos_2 = get_room_data_float2(); vol = g_CurrentSetup.boundpads; - + for (; vol->plink != NULL; vol++) { - vol->plink = TRANSFORM4(vol->plink); + /** Ugly matching hack. + * TODO: investigate if there's a way to get rid of this. + */ + if ((((u32) local_stage) ^ 0) + ((u32)vol->plink)); + vol->plink = (void *) (((u32) local_stage) + ((u32)vol->plink)); vol->pos.f[0] *= roompos_2; vol->pos.f[1] *= roompos_2; vol->pos.f[2] *= roompos_2; @@ -1452,55 +1404,54 @@ void proplvreset2(enum LEVELID stageId) vol->bbox.zmin *= roompos_2; vol->bbox.zmax *= roompos_2; - init_pathtable_something((struct PadRecord*)vol, vol->plink, &vol->stan); - - if(1); - //if (vol); - #ifdef DEBUG - if (uVar3 == 0) { - osSyncPrintf("vol number %d has no stan! (%s)\n", i, vol[i].plink); - } - else if (uVar3 == 2) - { - osSyncPrintf("vol number %d changed stan from %s to %s\n", i, vol[i].plink, GetStanName(vol[i].stan)); + s32 sret = init_pathtable_something((struct PadRecord *) vol, vol->plink, &vol->stan); + if (sret == 0) + { + osSyncPrintf("vol number %d has no stan! (%s)\n", (s32)(vol - g_CurrentSetup.boundpads), vol->plink); + } + else if (sret == 2) + { + osSyncPrintf("vol number %d changed stan from %s to %s\n", (s32)(vol - g_CurrentSetup.boundpads), vol->plink, GetStanName(vol->stan)); + } } +#else + init_pathtable_something((struct PadRecord *) vol, vol->plink, &vol->stan); #endif + + if (1); } } + if (g_CurrentSetup.padnames) { - DECLARE_i_06_LOCAL - DECLARE_i_07_LOCAL - - if (g_CurrentSetup.padnames) + for (i1 = 0; g_CurrentSetup.padnames[i1].p; i1++) { - for (V_i_06 = 0; g_CurrentSetup.padnames[V_i_06].p; V_i_06++) - { - g_CurrentSetup.padnames[V_i_06].p = TRANSFORM4(g_CurrentSetup.padnames[V_i_06].p); - } + g_CurrentSetup.padnames[i1].p = (void *) (((u32) g_CurrentSetup.padnames[i1].p) + ((u32) local_stage)); } + } - if (g_CurrentSetup.boundpadnames) + if (g_CurrentSetup.boundpadnames) + { + // Required for matching. + if (g_CurrentSetup.ailists && g_CurrentSetup.ailists); + + for (i1 = 0; g_CurrentSetup.boundpadnames[i1].p; i1++) { - for (V_i_07 = 0; g_CurrentSetup.boundpadnames[V_i_07].p; V_i_07++) - { - g_CurrentSetup.boundpadnames[V_i_07].p = TRANSFORM4(g_CurrentSetup.boundpadnames[V_i_07].p); - } + g_CurrentSetup.boundpadnames[i1].p = (void *) (((u32) g_CurrentSetup.boundpadnames[i1].p) + ((u32) local_stage)); } } // PD rejoins here - if (withchrs) { alloc_init_GUARDdata_entries(load_proptype(PROPDEF_GUARD)); - guardcount += load_proptype(PROPDEF_GUARD); - collectcount += load_proptype(PROPDEF_COLLECTABLE); - collectcount += load_proptype(PROPDEF_KEY); - collectcount += load_proptype(PROPDEF_HAT); + numAnimatedObjects += load_proptype(PROPDEF_GUARD); + numObjects += load_proptype(PROPDEF_COLLECTABLE); + numObjects += load_proptype(PROPDEF_KEY); + numObjects += load_proptype(PROPDEF_HAT); } else { @@ -1510,39 +1461,34 @@ void proplvreset2(enum LEVELID stageId) if (withobjs) { // load std props for all stages - collectcount += load_proptype(PROPDEF_DOOR); - collectcount += load_proptype(PROPDEF_CCTV); - collectcount += load_proptype(PROPDEF_AUTOGUN); - collectcount += load_proptype(PROPDEF_RACK); - collectcount += load_proptype(PROPDEF_MONITOR); - collectcount += load_proptype(PROPDEF_MULTI_MONITOR); - collectcount += load_proptype(PROPDEF_ARMOUR); - collectcount += load_proptype(PROPDEF_PROP); - collectcount += load_proptype(PROPDEF_GLASS); - collectcount += load_proptype(PROPDEF_TINTED_GLASS); - collectcount += load_proptype(PROPDEF_SAFE); - collectcount += load_proptype(PROPDEF_UNK41); - collectcount += load_proptype(PROPDEF_GAS_RELEASING); - collectcount += load_proptype(PROPDEF_ALARM); - collectcount += load_proptype(PROPDEF_MAGAZINE); - collectcount += load_proptype(PROPDEF_AMMO); - collectcount += load_proptype(PROPDEF_VEHICHLE); - collectcount += load_proptype(PROPDEF_TANK); - guardcount += load_proptype(PROPDEF_AIRCRAFT); + numObjects += load_proptype(PROPDEF_DOOR); + numObjects += load_proptype(PROPDEF_CCTV); + numObjects += load_proptype(PROPDEF_AUTOGUN); + numObjects += load_proptype(PROPDEF_RACK); + numObjects += load_proptype(PROPDEF_MONITOR); + numObjects += load_proptype(PROPDEF_MULTI_MONITOR); + numObjects += load_proptype(PROPDEF_ARMOUR); + numObjects += load_proptype(PROPDEF_PROP); + numObjects += load_proptype(PROPDEF_GLASS); + numObjects += load_proptype(PROPDEF_TINTED_GLASS); + numObjects += load_proptype(PROPDEF_SAFE); + numObjects += load_proptype(PROPDEF_UNK41); + numObjects += load_proptype(PROPDEF_GAS_RELEASING); + numObjects += load_proptype(PROPDEF_ALARM); + numObjects += load_proptype(PROPDEF_MAGAZINE); + numObjects += load_proptype(PROPDEF_AMMO); + numObjects += load_proptype(PROPDEF_VEHICHLE); + numObjects += load_proptype(PROPDEF_TANK); + numAnimatedObjects += load_proptype(PROPDEF_AIRCRAFT); } - sub_GAME_7F005540(collectcount); // without plane - sub_GAME_7F005624(guardcount); + modelmgrAllocateModelSlots(numObjects); + modelmgrAllocateAnimModelSlots(numAnimatedObjects); - //if (1) + for (i8 = 0; i8 < getPlayerCount(); i8++) { - DECLARE_i_08_LOCAL - - for (V_i_08 = 0; V_i_08 < getPlayerCount(); V_i_08++) - { - set_cur_player(V_i_08); - alloc_additional_item_slots(load_proptype(PROPDEF_LINK)); - } + set_cur_player(i8); + alloc_additional_item_slots(load_proptype(PROPDEF_LINK)); } if (g_CurrentSetup.propDefs) @@ -1550,10 +1496,17 @@ void proplvreset2(enum LEVELID stageId) PropDefHeaderRecord *phead; s32 flags; s32 pdefIndex; - //s32 padding; + // per-difficulty "Don't Load" mask: PROPFLAG2_00000010/20/40 for Agent/Secret/00 flags = 1 << (lvlGetSelectedDifficulty() + 4); + /** + * Complete the skip loading mask started on the line above. Checks for: + * - don't load on 2 players + * - don't load on 3 players + * - don't load on 4 players + * - don't load in multiplayer + */ if (getPlayerCount() >= 2) { flags |= 1 << (getPlayerCount() + 20); @@ -1562,223 +1515,215 @@ void proplvreset2(enum LEVELID stageId) phead = g_CurrentSetup.propDefs; pdefIndex = 0; - while (phead->type != PROPDEF_END) + while ((i1 = phead->type) != PROPDEF_END) { switch (phead->type) { - // switch 1 - case PROPDEF_GUARD_ATTRIBUTE: // switch 1 + case PROPDEF_GUARD_ATTRIBUTE: { GuardAttributeRecord *pdef_guarda; u8 prob; ChrRecord *chr; - - pdef_guarda = (GuardAttributeRecord *)phead; - prob = (u8)pdef_guarda->GrenadeProb; - chr = chrFindByLiteralId(pdef_guarda->chrnum); - - if (chr && chr->prop && chr->model) + pdef_guarda = (GuardAttributeRecord *) phead; + prob = (u8) pdef_guarda->GrenadeProb; + chr = chrFindByLiteralId(pdef_guarda->chrnum); + if ((chr && chr->prop) && chr->model) { chr->grenadeprob = prob; } #ifdef DEBUG else { - osSyncPrintf("grenade prob: no chr number %d for obj number %d! ", phead->unkB, pdefIndex + 1); + osSyncPrintf("grenade prob: no chr number %d for obj number %d! ", pdef_guarda->GrenadeProb, pdefIndex + 1); } #endif break; } - case PROPDEF_GUARD: // switch 1 + case PROPDEF_GUARD: if (withchrs) { - expand_09_characters(stageId, (struct GuardRecord *)phead, pdefIndex); + expand_09_characters(stageId, (struct GuardRecord *) phead, pdefIndex); } break; - case PROPDEF_DOOR: // switch 1 - if (withobjs && !(((struct DoorRecord *)phead)->flags2 & flags)) + case PROPDEF_DOOR: + if (withobjs && (!(((struct DoorRecord *) phead)->flags2 & flags))) { - setupDoor(stageId, (struct DoorRecord *)phead, pdefIndex); + setupDoor(stageId, (struct DoorRecord *) phead, pdefIndex); } break; - case PROPDEF_DOOR_SCALE: // switch 1 - g_DoorScale = ((struct GlobalDoorScaleRecord *)phead)->Scale / 65536.0f; + case PROPDEF_DOOR_SCALE: + g_DoorScale = ((struct GlobalDoorScaleRecord *) phead)->Scale / M_U16_MAX_VALUE_F; break; - case PROPDEF_COLLECTABLE: // switch 1 - if (withchrs && !(((struct WeaponObjRecord *)phead)->flags2 & flags)) + case PROPDEF_COLLECTABLE: + if (withchrs && (!(((struct WeaponObjRecord *) phead)->flags2 & flags))) { - weaponAssignToHome(stageId, (struct WeaponObjRecord *)phead, pdefIndex); + weaponAssignToHome(stageId, (struct WeaponObjRecord *) phead, pdefIndex); } break; - case PROPDEF_KEY: // switch 1 - if (withchrs && !(((struct KeyRecord *)phead)->flags2 & flags)) + case PROPDEF_KEY: + if (withchrs && (!(((struct KeyRecord *) phead)->flags2 & flags))) { - setupKey(stageId, (struct ObjectRecord *)phead, pdefIndex); + setupKey(stageId, (struct ObjectRecord *) phead, pdefIndex); } break; - case PROPDEF_HAT: // switch 1 - if (withchrs && !(((struct ObjectRecord *)phead)->flags2 & flags)) + case PROPDEF_HAT: + if (withchrs && (!(((struct ObjectRecord *) phead)->flags2 & flags))) { - setupHat(stageId, (struct ObjectRecord *)phead, pdefIndex); + setupHat(stageId, (struct ObjectRecord *) phead, pdefIndex); } break; - case PROPDEF_CCTV: // switch 1 - if (withobjs && !(((struct CCTVRecord *)phead)->flags2 & flags)) + case PROPDEF_CCTV: + if (withobjs && (!(((struct CCTVRecord *) phead)->flags2 & flags))) { - setupCctv(stageId, (struct CCTVRecord *)phead, pdefIndex); + setupCctv(stageId, (struct CCTVRecord *) phead, pdefIndex); } break; - case PROPDEF_AUTOGUN: // switch 1 - if (withobjs && !(((struct AutogunRecord *)phead)->flags2 & flags)) + case PROPDEF_AUTOGUN: + if (withobjs && (!(((struct AutogunRecord *) phead)->flags2 & flags))) { - setupAutogun(stageId, (struct AutogunRecord *)phead, pdefIndex); + setupAutogun(stageId, (struct AutogunRecord *) phead, pdefIndex); } break; - case PROPDEF_RACK: // switch 1 - if (withobjs && !(((struct ObjectRecord *)phead)->flags2 & flags)) + case PROPDEF_RACK: + if (withobjs && (!(((struct ObjectRecord *) phead)->flags2 & flags))) { - setupHangingMonitors(stageId, (struct ObjectRecord *)phead, pdefIndex); + setupHangingMonitors(stageId, (struct ObjectRecord *) phead, pdefIndex); } break; - case PROPDEF_MONITOR: // switch 1 - if (withobjs && !(((struct MonitorObjRecord *)phead)->flags2 & flags)) + case PROPDEF_MONITOR: + if (withobjs && (!(((struct MonitorObjRecord *) phead)->flags2 & flags))) { - setupSingleMonitor(stageId, (struct MonitorObjRecord *)phead, pdefIndex); + setupSingleMonitor(stageId, (struct MonitorObjRecord *) phead, pdefIndex); } break; - case PROPDEF_MULTI_MONITOR: // switch 1 - if (withobjs && !(((struct MultiMonitorObjRecord *)phead)->flags2 & flags)) + case PROPDEF_MULTI_MONITOR: + if (withobjs && (!(((struct MultiMonitorObjRecord *) phead)->flags2 & flags))) { - setupMultiMonitor(stageId, (struct MultiMonitorObjRecord *)phead, pdefIndex); + setupMultiMonitor(stageId, (struct MultiMonitorObjRecord *) phead, pdefIndex); } break; - case PROPDEF_ARMOUR: // switch 1 + case PROPDEF_ARMOUR: { - struct BodyArmourRecord *pdef_ba = (struct BodyArmourRecord *)phead; - -#if defined(VERSION_US) - if (withobjs && (pdef_ba->flags2 & flags) == 0) -#elif defined(VERSION_JP) || defined(VERSION_EU) - if (withobjs && ((pdef_ba->flags2 & flags) == 0 || j_text_trigger)) + struct BodyArmourRecord *pdef_ba = (struct BodyArmourRecord *) phead; +#ifndef VERSION_US + if (withobjs && (((pdef_ba->flags2 & flags) == 0) || j_text_trigger)) // JP: armour setup also proceeds when j_text_trigger is set #else - #error version + if (withobjs && ((pdef_ba->flags2 & flags) == 0)) #endif { - pdef_ba->initialamount = *(s32 *)&pdef_ba->initialamount / 65536.0f; - pdef_ba->amount = pdef_ba->initialamount; - - domakedefaultobj(stageId, (struct ObjectRecord *)phead, pdefIndex); + pdef_ba->initialamount = (*((s32 *) (&pdef_ba->initialamount))) / M_U16_MAX_VALUE_F; + pdef_ba->amount = pdef_ba->initialamount; + domakedefaultobj(stageId, (struct ObjectRecord *) phead, pdefIndex); } break; } - case PROPDEF_TINTED_GLASS: // switch 1 + case PROPDEF_TINTED_GLASS: { - struct TintedGlassRecord *pdef_tintg = (struct TintedGlassRecord *)phead; - if (withobjs && !((pdef_tintg)->flags2 & flags)) + if (withobjs && (!(((struct TintedGlassRecord *) phead)->flags2 & flags))) { - if (pdef_tintg->flags & PROPFLAG_GLASS_HASPORTAL) + if (((struct TintedGlassRecord *) phead)->flags & PROPFLAG_GLASS_HASPORTAL) { - if (!(isNotBoundPad(pdef_tintg->pad))) + if (!(((struct TintedGlassRecord *) phead)->pad < 10000)) { struct coord3d up; struct coord3d up2; BoundPadRecord *pad3d; - f32 scale; - - pad3d = &g_CurrentSetup.boundpads[getBoundPadNum(pdef_tintg->pad)]; + pad3d = &g_CurrentSetup.boundpads[((struct TintedGlassRecord *) phead)->pad - 10000]; sub_GAME_7F001BD4(pad3d, &up); + up2.x = (10.0f * pad3d->up.x) + up.x; + up2.y = (10.0f * pad3d->up.y) + up.y; + up2.z = (10.0f * pad3d->up.z) + up.z; + up.x -= 10.0f * pad3d->up.x; + up.y -= 10.0f * pad3d->up.y; + up.z -= 10.0f * pad3d->up.z; - if(pad3d); - - scale = 10.0f; - - up2.x = (scale * pad3d->up.x) + up.x; - up2.y = (scale * pad3d->up.y) + up.y; - up2.z = (scale * pad3d->up.z) + up.z; - up.x -= scale * pad3d->up.x; - up.y -= scale * pad3d->up.y; - up.z -= scale * pad3d->up.z; - pdef_tintg->portalnum = sub_GAME_7F0B9E04(&up, &up2); - pdef_tintg->unk90 = *(s32 *)&pdef_tintg->unk90 / 65536.0f; + ((struct TintedGlassRecord *) phead)->portalnum = sub_GAME_7F0B9E04(&up, &up2); + ((struct TintedGlassRecord *) phead)->unk90 = (*((s32 *) (&((struct TintedGlassRecord *) phead)->unk90))) / M_U16_MAX_VALUE_F; } } - domakedefaultobj(stageId, (struct ObjectRecord *)pdef_tintg, pdefIndex); + domakedefaultobj(stageId, (struct ObjectRecord *) phead, pdefIndex); } break; } - case PROPDEF_PROP: // switch 1 - case PROPDEF_ALARM: // switch 1 - case PROPDEF_MAGAZINE: // switch 1 - case PROPDEF_GAS_RELEASING: // switch 1 - case PROPDEF_UNK41: // switch 1 - case PROPDEF_GLASS: // switch 1 - case PROPDEF_SAFE: // switch 1 - if (withobjs && !(((ObjectRecord *)phead)->flags2 & flags)) + case PROPDEF_PROP: + case PROPDEF_ALARM: + case PROPDEF_MAGAZINE: + case PROPDEF_GAS_RELEASING: + case PROPDEF_UNK41: + case PROPDEF_GLASS: + case PROPDEF_SAFE: + if (withobjs && (!(((ObjectRecord *) phead)->flags2 & flags))) { - domakedefaultobj(stageId, (struct ObjectRecord *)phead, pdefIndex); + domakedefaultobj(stageId, (struct ObjectRecord *) phead, pdefIndex); } break; - case PROPDEF_AMMO: // switch 1 + case PROPDEF_AMMO: { - struct MultiAmmoCrateRecord *pdef_macr = (struct MultiAmmoCrateRecord *)phead; - + struct MultiAmmoCrateRecord *pdef_macr = (struct MultiAmmoCrateRecord *) phead; s32 ammoqty = 1; - DECLARE_i_09 + s32 i9; if (getPlayerCount() >= 2) { struct s_mp_weapon_set *mpweapon = &getPtrMPWeaponSetData()[lastmpweaponnum]; - + ammoqty = mpweapon->ammoamount; - if(mpweapon->ammotype); + if (mpweapon->ammotype); pdef_macr->slots[mpweapon->ammotype - 1].quantity = ammoqty; } - if ((ammoqty > 0) && withobjs && !(pdef_macr->flags2 & flags)) + if (((ammoqty > 0) && withobjs) && (!(pdef_macr->flags2 & flags))) { - for (V_i_09 = 0; V_i_09 < (AMMOTYPE_GLOBAL_MAX ); V_i_09++) + for (i9 = 0; i9 < AMMOTYPE_GLOBAL_MAX; i9++) { - if (pdef_macr->slots[V_i_09].quantity > 0 && pdef_macr->slots[V_i_09].modelnum != 0xFFFF) + if ((pdef_macr->slots[i9].quantity > 0) && (pdef_macr->slots[i9].modelnum != 0xFFFF)) { - modelLoad(pdef_macr->slots[V_i_09].modelnum); + modelLoad(pdef_macr->slots[i9].modelnum); } } - domakedefaultobj(stageId, (struct ObjectRecord *)pdef_macr, pdefIndex); + domakedefaultobj(stageId, (struct ObjectRecord *) pdef_macr, pdefIndex); } break; } - case PROPDEF_TANK: // switch 1 - if (withobjs && !(((struct TankRecord *)phead)->flags2 & flags)) + case PROPDEF_TANK: + if (withobjs && (!(((struct TankRecord *) phead)->flags2 & flags))) { - struct TankRecord *pdef_tank = (struct TankRecord *)phead; + struct TankRecord *pdef_tank = (struct TankRecord *) phead; struct PropRecord *tank_prop; + + s32 padding; f32 stan_y = 0.0f; s32 paddinggg[4]; - weaponLoadProjectileModels(0x20); - domakedefaultobj(stageId, (struct ObjectRecord *)pdef_tank, pdefIndex); + weaponLoadProjectileModels(ITEM_TANKSHELLS); + domakedefaultobj(stageId, (struct ObjectRecord *) pdef_tank, pdefIndex); pdef_tank->turret_vertical_angle = 0.0f; pdef_tank->turret_orientation_angle = 0.0f; pdef_tank->tank_orientation_angle = M_TAU_F - atan2f(pdef_tank->mtx.m[2][0], pdef_tank->mtx.m[2][2]); tank_prop = pdef_tank->prop; + if (tank_prop) { stan_y = stanGetPositionYValue(tank_prop->stan, tank_prop->pos.f[0], tank_prop->pos.f[2]); } + pdef_tank->stan_y = stan_y; - pdef_tank->unkD0 = stan_y / 0.17000002f; +#ifdef VERSION_EU + pdef_tank->unkD0 = stan_y / 0.2004f; // EU-tuned constant +#else + pdef_tank->unkD0 = stan_y / 0.17000002f; +#endif } break; - case PROPDEF_VEHICHLE: // switch 1 - if (withobjs && !(((struct VehichleRecord *)phead)->flags2 & flags)) + case PROPDEF_VEHICHLE: + if (withobjs && (!(((struct VehichleRecord *) phead)->flags2 & flags))) { - struct VehichleRecord *pdef_veh = (struct VehichleRecord *)phead; - //struct Model *model; - domakedefaultobj(stageId, (struct ObjectRecord *)pdef_veh, pdefIndex); + struct VehichleRecord *pdef_veh = (struct VehichleRecord *) phead; + + domakedefaultobj(stageId, (struct ObjectRecord *) pdef_veh, pdefIndex); - //model = pdef_veh->model; if (pdef_veh->model != NULL) { if (pdef_veh->model->obj->Switches[5] != NULL) @@ -1802,11 +1747,12 @@ void proplvreset2(enum LEVELID stageId) pdef_veh->Sound = 0; } break; - case PROPDEF_AIRCRAFT: // switch 1 - if (withobjs && !(((struct AircraftRecord *)phead)->flags2 & flags)) + case PROPDEF_AIRCRAFT: + if (withobjs && (!(((struct AircraftRecord *) phead)->flags2 & flags))) { - struct AircraftRecord *pdef_air = (struct AircraftRecord *)phead; - domakedefaultobj(stageId, (struct ObjectRecord *)pdef_air, pdefIndex); + struct AircraftRecord *pdef_air = (struct AircraftRecord *) phead; + + domakedefaultobj(stageId, (struct ObjectRecord *) pdef_air, pdefIndex); pdef_air->speed = 0.0f; pdef_air->speedaim = 0.0f; pdef_air->rotoryrot = 0.0f; @@ -1823,65 +1769,70 @@ void proplvreset2(enum LEVELID stageId) pdef_air->Sound = 0; } break; - case PROPDEF_TAG: // switch 1 + case PROPDEF_TAG: { struct TagObjectRecord *pdef_tag; struct ObjectRecord *taggedobj; - pdef_tag = (struct TagObjectRecord *)phead; - taggedobj = setupCommandGetObject(stageId, (s32)pdef_tag->OffsetToObj + pdefIndex); + pdef_tag = (struct TagObjectRecord *) phead; + taggedobj = setupCommandGetObject(stageId, pdefIndex + ((s32) pdef_tag->OffsetToObj)); pdef_tag->TaggedObject = taggedobj; + if (taggedobj) { - taggedobj->runtime_bitflags |= 0x10; // RUNTIMEBITFLAG_TAGGED + taggedobj->runtime_bitflags |= RUNTIMEBITFLAG_TAGGED; } + set_parent_cur_tag_entry(pdef_tag); break; } - case PROPDEF_RENAME: // switch 1 + case PROPDEF_RENAME: { struct RenameObjectRecord *pdef_ren; struct ObjectRecord *targetobj; - pdef_ren = (struct RenameObjectRecord *)phead; - targetobj = setupCommandGetObject(stageId, pdef_ren->TagID + pdefIndex); + pdef_ren = (struct RenameObjectRecord *) phead; + i3 = pdef_ren->TagID + pdefIndex; + targetobj = setupCommandGetObject(stageId, i3); pdef_ren->renobj = targetobj; + if (targetobj) { - targetobj->runtime_bitflags |= 0x400; // RUNTIMEBITFLAG_HASTEXTOVERRIDE + targetobj->runtime_bitflags |= RUNTIMEBITFLAG_DESTROYED; } - bondinvAddTextOverride((struct textoverride *)pdef_ren); + + bondinvAddTextOverride((struct textoverride *) pdef_ren); break; } - case PROPDEF_WATCH_MENU_OBJECTIVE_TEXT: // switch 1 - setup_briefing_text_entry_parent((struct setup_objective_text *)phead); + case PROPDEF_WATCH_MENU_OBJECTIVE_TEXT: + setup_briefing_text_entry_parent((struct setup_objective_text *) phead); break; - case PROPDEF_CAMERAPOS: // switch 1 + case PROPDEF_CAMERAPOS: { - struct CutsceneRecord *pdef_cam = (struct CutsceneRecord *)phead; - pdef_cam->pos.f[0] = *(s32 *)&pdef_cam->pos.f[0] / 100.0f; - pdef_cam->pos.f[1] = *(s32 *)&pdef_cam->pos.f[1] / 100.0f; - pdef_cam->pos.f[2] = *(s32 *)&pdef_cam->pos.f[2] / 100.0f; - pdef_cam->theta = *(s32 *)&pdef_cam->theta / 65536.0f; - pdef_cam->verta = *(s32 *)&pdef_cam->verta / 65536.0f; + struct CutsceneRecord *pdef_cam = (struct CutsceneRecord *) phead; + + pdef_cam->pos.f[0] = (*((s32 *) (&pdef_cam->pos.f[0]))) / 100.0f; + pdef_cam->pos.f[1] = (*((s32 *) (&pdef_cam->pos.f[1]))) / 100.0f; + pdef_cam->pos.f[2] = (*((s32 *) (&pdef_cam->pos.f[2]))) / 100.0f; + pdef_cam->theta = (*((s32 *) (&pdef_cam->theta))) / M_U16_MAX_VALUE_F; + pdef_cam->verta = (*((s32 *) (&pdef_cam->verta))) / M_U16_MAX_VALUE_F; break; } - case PROPDEF_OBJECTIVE_START: // switch 1 - add_ptr_to_objective((struct objective_entry*)phead); + case PROPDEF_OBJECTIVE_START: + add_ptr_to_objective((struct objective_entry *) phead); break; - case PROPDEF_OBJECTIVE_ENTER_ROOM: // switch 1 - set_parent_cur_obj_enter_room((struct criteria_roomentered *)phead); + case PROPDEF_OBJECTIVE_ENTER_ROOM: + set_parent_cur_obj_enter_room((struct criteria_roomentered *) phead); break; - case PROPDEF_OBJECTIVE_DEPOSIT_OBJECT_IN_ROOM: // switch 1 - set_parent_cur_obj_deposited_in_room((struct criteria_deposit *)phead); + case PROPDEF_OBJECTIVE_DEPOSIT_OBJECT_IN_ROOM: + set_parent_cur_obj_deposited_in_room((struct criteria_deposit *) phead); break; - case PROPDEF_OBJECTIVE_PHOTOGRAPH: // switch 1 - set_parent_cur_obj_photograph((struct criteria_picture *)phead); + case PROPDEF_OBJECTIVE_PHOTOGRAPH: + set_parent_cur_obj_photograph((struct criteria_picture *) phead); break; } - //phead = sizepropdef(phead) + phead; - phead = (PropDefHeaderRecord *)((u32*)phead + sizepropdef(phead)); + phead = (PropDefHeaderRecord *) (((u32 *) phead) + sizepropdef(phead)); pdefIndex++; } @@ -1905,38 +1856,40 @@ void proplvreset2(enum LEVELID stageId) case PROPDEF_SAFE: case PROPDEF_TINTED_GLASS: { - struct ObjectRecord *pdef_tintg = (struct ObjectRecord *)phead; + struct ObjectRecord *pdef_obj = (struct ObjectRecord *) phead; - if (pdef_tintg->prop && (pdef_tintg->flags & PROPFLAG_INSIDEANOTHEROBJ)) // PROPFLAG_INSIDEANOTHEROBJ + if (pdef_obj->prop && (pdef_obj->flags & PROPFLAG_INSIDEANOTHEROBJ)) { - s32 offset = pdef_tintg->pad; + u32 offset = pdef_obj->pad; struct ObjectRecord *inobj = setupCommandGetObject(stageId, offset + pdefIndex); if (inobj && inobj->prop) { - //struct Model *inobjmdl = pdef_tintg->model; - pdef_tintg->runtime_bitflags |= RUNTIMEBITFLAG_HASOWNER; // RUNTIMEBITFLAG_HASOWNER - modelSetScale(pdef_tintg->model, pdef_tintg->model->scale); - chrpropReparent(pdef_tintg->prop, inobj->prop); + pdef_obj->runtime_bitflags |= RUNTIMEBITFLAG_HASOWNER; + modelSetScale(pdef_obj->model, pdef_obj->model->scale); + chrpropReparent(pdef_obj->prop, inobj->prop); } -#ifdef DEBUG +#ifdef DEBUG + //possibly wrong place else { osSyncPrintf("inobj link not found for object number %d\n", pdefIndex + 1); } #endif + } break; } case PROPDEF_LINK: { - struct LinkRecord *pdef_link = (struct LinkRecord *)phead; - struct WeaponObjRecord *guna = (struct WeaponObjRecord *)setupGetPtrToCommandByIndex(pdef_link->Index1 + pdefIndex); - struct WeaponObjRecord *gunb = (struct WeaponObjRecord *)setupGetPtrToCommandByIndex(pdef_link->Index2 + pdefIndex); + struct LinkRecord *pdef_link = (struct LinkRecord *) phead; + struct WeaponObjRecord *guna = (struct WeaponObjRecord *) setupGetPtrToCommandByIndex(pdef_link->Index1 + pdefIndex); + struct WeaponObjRecord *gunb = (struct WeaponObjRecord *) setupGetPtrToCommandByIndex(pdef_link->Index2 + pdefIndex); + if (guna && gunb) { - if (guna->type == PROPDEF_COLLECTABLE && gunb->type == PROPDEF_COLLECTABLE) + if ((guna->type == PROPDEF_COLLECTABLE) && (gunb->type == PROPDEF_COLLECTABLE)) { propweaponSetDual(guna, gunb); } @@ -1949,9 +1902,10 @@ void proplvreset2(enum LEVELID stageId) else { osSyncPrintf("link not found for doublegun object number %d\n", pdefIndex + 1); - #endif + } + break; } case PROPDEF_SWITCH: @@ -1959,24 +1913,21 @@ void proplvreset2(enum LEVELID stageId) struct LinkRecord *pdef_switch; struct ObjectRecord *doorA; struct ObjectRecord *doorB; - s32 index1; s32 index2; - pdef_switch = (struct LinkRecord *)phead; - + pdef_switch = (struct LinkRecord *) phead; index1 = pdef_switch->Index1; index2 = pdef_switch->Index2; + doorA = (struct ObjectRecord *) setupCommandGetObject(stageId, pdefIndex + index1); + doorB = (struct ObjectRecord *) setupGetPtrToCommandByIndex(pdefIndex + index2); - doorA = (struct ObjectRecord *)setupCommandGetObject(stageId, pdefIndex + index1); - doorB = (struct ObjectRecord *)setupGetPtrToCommandByIndex(pdefIndex + index2); - - if (doorA && doorA->prop && doorB && doorB->type == PROPDEF_DOOR && doorB->prop) + if ((((doorA && doorA->prop) && doorB) && (doorB->type == PROPDEF_DOOR)) && doorB->prop) { pdef_switch->first = doorA->prop; pdef_switch->second = doorB->prop; initSetLevelLoadPropSwitch(pdef_switch); - doorA->runtime_bitflags |= RUNTIMEBITFLAG_00000001; // linkeddoor + doorA->runtime_bitflags |= RUNTIMEBITFLAG_00000001; // linked door } #ifdef DEBUG @@ -1985,11 +1936,11 @@ void proplvreset2(enum LEVELID stageId) osSyncPrintf("doorlink object number %d not initialised\n", pdefIndex + 1); } #endif + break; } case PROPDEF_SAFE_ITEM: { - s32 index1; struct SafeObjectRecord *pdef_safe; s32 index2; @@ -1998,31 +1949,21 @@ void proplvreset2(enum LEVELID stageId) struct SafeRecord *safe; struct DoorRecord *door; - pdef_safe = (struct SafeObjectRecord *)phead; - + pdef_safe = (struct SafeObjectRecord *) phead; index1 = pdef_safe->Index1; index2 = pdef_safe->Index2; index3 = pdef_safe->Index3; - safe_item = setupCommandGetObject(stageId, pdefIndex + index1); - safe = (struct SafeRecord *)setupCommandGetObject(stageId, pdefIndex + index2); - door = (struct DoorRecord *)setupCommandGetObject(stageId, pdefIndex + index3); + safe = (struct SafeRecord *) setupCommandGetObject(stageId, pdefIndex + index2); + door = (struct DoorRecord *) setupCommandGetObject(stageId, pdefIndex + index3); - if (safe_item - && safe_item->prop - && safe - && safe->prop - && safe->type == PROPDEF_SAFE - && door - && door->prop - && door->type == PROPDEF_DOOR) + if (((((((safe_item && safe_item->prop) && safe) && safe->prop) && (safe->type == PROPDEF_SAFE)) && door) && door->prop) && (door->type == PROPDEF_DOOR)) { pdef_safe->item = safe_item; pdef_safe->safe = safe; pdef_safe->door = door; - - initSetLevelLoadPropSafeItem((struct ObjectRecord *)pdef_safe); - safe_item->flags2 |= PROPFLAG2_LINKEDTOSAFE; // OBJFLAG2_LINKEDTOSAFE + initSetLevelLoadPropSafeItem((struct ObjectRecord *) pdef_safe); + safe_item->flags2 |= PROPFLAG2_LINKEDTOSAFE; door->flags2 |= PROPFLAG2_LINKEDTOSAFE; } #ifdef DEBUG @@ -2041,25 +1982,20 @@ void proplvreset2(enum LEVELID stageId) s32 index1; s32 index2; - - pdef_lock_door = (struct LockDoorRecord *)phead; + pdef_lock_door = (struct LockDoorRecord *) phead; index1 = pdef_lock_door->Index1; index2 = pdef_lock_door->Index2; - door = (struct DoorRecord *)setupCommandGetObject(stageId, pdefIndex + index1); + door = (struct DoorRecord *) setupCommandGetObject(stageId, pdefIndex + index1); lock = setupCommandGetObject(stageId, pdefIndex + index2); - if (door - && door->prop - && lock - && lock->prop - && door->type == PROPDEF_DOOR) + if ((((door && door->prop) && lock) && lock->prop) && (door->type == PROPDEF_DOOR)) { pdef_lock_door->door = door; pdef_lock_door->lock = lock; initSetLevelLoadPropLockDoor(pdef_lock_door); - door->runtime_bitflags |= RUNTIMEBITFLAG_PADLOCKEDDOOR; // padlock + door->runtime_bitflags |= RUNTIMEBITFLAG_PADLOCKEDDOOR; } #ifdef DEBUG else @@ -2070,13 +2006,11 @@ void proplvreset2(enum LEVELID stageId) break; } } - //phead = sizepropdef(phead) + phead; - phead = (PropDefHeaderRecord *)((u32*)phead + sizepropdef(phead)); + phead = (PropDefHeaderRecord *) (((u32 *) phead) + sizepropdef(phead)); pdefIndex += 1; - } //while !PDEF_END - - } //if setup.pdef + } + } } else { @@ -2091,4203 +2025,9 @@ void proplvreset2(enum LEVELID stageId) g_CurrentSetup.padnames = NULL; g_CurrentSetup.boundpadnames = NULL; alloc_init_GUARDdata_entries(0); - sub_GAME_7F005540(0); - sub_GAME_7F005624(0); + modelmgrAllocateModelSlots(0); + modelmgrAllocateAnimModelSlots(0); } alloc_false_GUARDdata_to_exec_global_action(); } - -#else - -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel jpt_object_type_expansion -.word door_expand -.word door_scale_expand -.word obj_03_expand -.word key_expand -.word obj_03_expand -.word surv_camera_expand -.word obj_03_expand -.word item_expand -.word actor_expand -.word single_screen_display_expand -.word multi_screen_display_expand -.word rack_expand -.word autogun_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word hat_expand -.word actor_attr_expand -.word other_obj_expand -.word ammo_box_expand -.word body_armor_expand -.word tag_expand -.word type17_objective_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word type1E_subobjective_expand -.word other_obj_expand -.word type20_subobjective_expand -.word type21_subobjective_expand -.word other_obj_expand -.word type23_solo_brief_text -.word obj_03_expand -.word type25_rename -.word other_obj_expand -.word type27_wheeled_vehicle -.word type28_aircraft -.word obj_03_expand -.word obj_03_expand -.word obj_03_expand -.word other_obj_expand -.word type2D_tank -.word type2E_viewport_pos -.word type2F_tinted_glass - -glabel D_8004F024 -.word 0x40c90fdb -glabel D_8004F028 -.word 0x3e2e147c - -glabel jpt_8004F02C -.word .L7F004B6C -.word .L7F004B6C -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004B6C -.word .L7F004B6C -.word .L7F004DE4 -.word .L7F004B6C -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004BD8 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004C2C -.word .L7F004B6C -.word .L7F004B6C -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004B6C -.word .L7F004DE4 -.word .L7F004D70 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004B6C -.word .L7F004B6C -.word .L7F004B6C -.word .L7F004CA4 -.word .L7F004DE4 -.word .L7F004DE4 -.word .L7F004B6C - -.text -glabel proplvreset2 -/* 038720 7F003BF0 27BDFD80 */ addiu $sp, $sp, -0x280 -/* 038724 7F003BF4 AFB50034 */ sw $s5, 0x34($sp) -/* 038728 7F003BF8 0080A825 */ move $s5, $a0 -/* 03872C 7F003BFC AFBF0044 */ sw $ra, 0x44($sp) -/* 038730 7F003C00 3C058005 */ lui $a1, %hi(aNochr) -/* 038734 7F003C04 AFBE0040 */ sw $fp, 0x40($sp) -/* 038738 7F003C08 AFB7003C */ sw $s7, 0x3c($sp) -/* 03873C 7F003C0C AFB60038 */ sw $s6, 0x38($sp) -/* 038740 7F003C10 AFB40030 */ sw $s4, 0x30($sp) -/* 038744 7F003C14 AFB3002C */ sw $s3, 0x2c($sp) -/* 038748 7F003C18 AFB20028 */ sw $s2, 0x28($sp) -/* 03874C 7F003C1C AFB10024 */ sw $s1, 0x24($sp) -/* 038750 7F003C20 AFB00020 */ sw $s0, 0x20($sp) -/* 038754 7F003C24 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 038758 7F003C28 24A5ED90 */ addiu $a1, %lo(aNochr) # addiu $a1, $a1, -0x1270 -/* 03875C 7F003C2C 0C0029A8 */ jal tokenFind -/* 038760 7F003C30 24040001 */ li $a0, 1 -/* 038764 7F003C34 2C460001 */ sltiu $a2, $v0, 1 -/* 038768 7F003C38 10C00005 */ beqz $a2, .L7F003C50 -/* 03876C 7F003C3C 24040001 */ li $a0, 1 -/* 038770 7F003C40 3C058005 */ lui $a1, %hi(aNoprop) -/* 038774 7F003C44 0C0029A8 */ jal tokenFind -/* 038778 7F003C48 24A5ED98 */ addiu $a1, %lo(aNoprop) # addiu $a1, $a1, -0x1268 -/* 03877C 7F003C4C 2C460001 */ sltiu $a2, $v0, 1 -.L7F003C50: -/* 038780 7F003C50 3C058005 */ lui $a1, %hi(aNoobj) -/* 038784 7F003C54 AFA60278 */ sw $a2, 0x278($sp) -/* 038788 7F003C58 24A5EDA0 */ addiu $a1, %lo(aNoobj) # addiu $a1, $a1, -0x1260 -/* 03878C 7F003C5C 0C0029A8 */ jal tokenFind -/* 038790 7F003C60 24040001 */ li $a0, 1 -/* 038794 7F003C64 2C430001 */ sltiu $v1, $v0, 1 -/* 038798 7F003C68 10600005 */ beqz $v1, .L7F003C80 -/* 03879C 7F003C6C 24040001 */ li $a0, 1 -/* 0387A0 7F003C70 3C058005 */ lui $a1, %hi(aNoprop_0) -/* 0387A4 7F003C74 0C0029A8 */ jal tokenFind -/* 0387A8 7F003C78 24A5EDA8 */ addiu $a1, %lo(aNoprop_0) # addiu $a1, $a1, -0x1258 -/* 0387AC 7F003C7C 2C430001 */ sltiu $v1, $v0, 1 -.L7F003C80: -/* 0387B0 7F003C80 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0387B4 7F003C84 44812000 */ mtc1 $at, $f4 -/* 0387B8 7F003C88 0060F025 */ move $fp, $v1 -/* 0387BC 7F003C8C 3C018003 */ lui $at, %hi(g_DoorScale) -/* 0387C0 7F003C90 3C038004 */ lui $v1, %hi(PitemZ_entries+0xFF0) -/* 0387C4 7F003C94 3C028004 */ lui $v0, %hi(PitemZ_entries) -/* 0387C8 7F003C98 2442A228 */ addiu $v0, %lo(PitemZ_entries) # addiu $v0, $v0, -0x5dd8 -/* 0387CC 7F003C9C 2463B218 */ addiu $v1, $v1, %lo(PitemZ_entries+0xFF0) -/* 0387D0 7F003CA0 E424A3C0 */ swc1 $f4, %lo(g_DoorScale)($at) -.L7F003CA4: -/* 0387D4 7F003CA4 8C4E0000 */ lw $t6, ($v0) -/* 0387D8 7F003CA8 2442000C */ addiu $v0, $v0, 0xc -/* 0387DC 7F003CAC 0043082B */ sltu $at, $v0, $v1 -/* 0387E0 7F003CB0 1420FFFC */ bnez $at, .L7F003CA4 -/* 0387E4 7F003CB4 ADC00000 */ sw $zero, ($t6) -/* 0387E8 7F003CB8 2AA1003B */ slti $at, $s5, 0x3b -/* 0387EC 7F003CBC 10200454 */ beqz $at, .L7F004E10 -/* 0387F0 7F003CC0 00157880 */ sll $t7, $s5, 2 -/* 0387F4 7F003CC4 3C188003 */ lui $t8, %hi(setup_text_pointers) -/* 0387F8 7F003CC8 271874E4 */ addiu $t8, %lo(setup_text_pointers) # addiu $t8, $t8, 0x74e4 -/* 0387FC 7F003CCC 01F88021 */ addu $s0, $t7, $t8 -/* 038800 7F003CD0 8E020000 */ lw $v0, ($s0) -/* 038804 7F003CD4 3C198005 */ lui $t9, %hi(only_read_by_stageload) -/* 038808 7F003CD8 27B10174 */ addiu $s1, $sp, 0x174 -/* 03880C 7F003CDC 1040044C */ beqz $v0, .L7F004E10 -/* 038810 7F003CE0 2739EDB0 */ addiu $t9, %lo(only_read_by_stageload) # addiu $t9, $t9, -0x1250 -/* 038814 7F003CE4 02205025 */ move $t2, $s1 -/* 038818 7F003CE8 272900FC */ addiu $t1, $t9, 0xfc -.L7F003CEC: -/* 03881C 7F003CEC 8F210000 */ lw $at, ($t9) -/* 038820 7F003CF0 2739000C */ addiu $t9, $t9, 0xc -/* 038824 7F003CF4 254A000C */ addiu $t2, $t2, 0xc -/* 038828 7F003CF8 AD41FFF4 */ sw $at, -0xc($t2) -/* 03882C 7F003CFC 8F21FFF8 */ lw $at, -8($t9) -/* 038830 7F003D00 AD41FFF8 */ sw $at, -8($t2) -/* 038834 7F003D04 8F21FFFC */ lw $at, -4($t9) -/* 038838 7F003D08 1729FFF8 */ bne $t9, $t1, .L7F003CEC -/* 03883C 7F003D0C AD41FFFC */ sw $at, -4($t2) -/* 038840 7F003D10 8F210000 */ lw $at, ($t9) -/* 038844 7F003D14 0000A025 */ move $s4, $zero -/* 038848 7F003D18 00009825 */ move $s3, $zero -/* 03884C 7F003D1C AD410000 */ sw $at, ($t2) -/* 038850 7F003D20 904B0000 */ lbu $t3, ($v0) -/* 038854 7F003D24 A3A00175 */ sb $zero, 0x175($sp) -/* 038858 7F003D28 0FC26919 */ jal getPlayerCount -/* 03885C 7F003D2C A3AB0174 */ sb $t3, 0x174($sp) -/* 038860 7F003D30 28410002 */ slti $at, $v0, 2 -/* 038864 7F003D34 14200004 */ bnez $at, .L7F003D48 -/* 038868 7F003D38 3C058005 */ lui $a1, %hi(aMp_) -/* 03886C 7F003D3C 24A5EEB0 */ addiu $a1, %lo(aMp_) # addiu $a1, $a1, -0x1150 -/* 038870 7F003D40 0C0029FF */ jal strcat -/* 038874 7F003D44 02202025 */ move $a0, $s1 -.L7F003D48: -/* 038878 7F003D48 8E050000 */ lw $a1, ($s0) -/* 03887C 7F003D4C 02202025 */ move $a0, $s1 -/* 038880 7F003D50 0C0029FF */ jal strcat -/* 038884 7F003D54 24A50001 */ addiu $a1, $a1, 1 -/* 038888 7F003D58 02202025 */ move $a0, $s1 -/* 03888C 7F003D5C 24050001 */ li $a1, 1 -/* 038890 7F003D60 24060100 */ li $a2, 256 -/* 038894 7F003D64 0FC2F341 */ jal _fileNameLoadToBank -/* 038898 7F003D68 24070004 */ li $a3, 4 -/* 03889C 7F003D6C 3C038007 */ lui $v1, %hi(g_ptrStageSetupFile) -/* 0388A0 7F003D70 24635D28 */ addiu $v1, %lo(g_ptrStageSetupFile) # addiu $v1, $v1, 0x5d28 -/* 0388A4 7F003D74 AC620000 */ sw $v0, ($v1) -/* 0388A8 7F003D78 00408825 */ move $s1, $v0 -/* 0388AC 7F003D7C 0FC30578 */ jal langGetLangBankIndexFromStagenum -/* 0388B0 7F003D80 02A02025 */ move $a0, $s5 -/* 0388B4 7F003D84 0FC30742 */ jal langLoadToAddr -/* 0388B8 7F003D88 00402025 */ move $a0, $v0 -/* 0388BC 7F003D8C 8E2C0000 */ lw $t4, ($s1) -/* 0388C0 7F003D90 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) -/* 0388C4 7F003D94 24E75D00 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d00 -/* 0388C8 7F003D98 022C6821 */ addu $t5, $s1, $t4 -/* 0388CC 7F003D9C ACED0000 */ sw $t5, ($a3) -/* 0388D0 7F003DA0 8E2E0004 */ lw $t6, 4($s1) -/* 0388D4 7F003DA4 022E7821 */ addu $t7, $s1, $t6 -/* 0388D8 7F003DA8 ACEF0004 */ sw $t7, 4($a3) -/* 0388DC 7F003DAC 8E380008 */ lw $t8, 8($s1) -/* 0388E0 7F003DB0 02384021 */ addu $t0, $s1, $t8 -/* 0388E4 7F003DB4 ACE80008 */ sw $t0, 8($a3) -/* 0388E8 7F003DB8 8E29000C */ lw $t1, 0xc($s1) -/* 0388EC 7F003DBC 0229C821 */ addu $t9, $s1, $t1 -/* 0388F0 7F003DC0 ACF9000C */ sw $t9, 0xc($a3) -/* 0388F4 7F003DC4 8E2A0010 */ lw $t2, 0x10($s1) -/* 0388F8 7F003DC8 022A5821 */ addu $t3, $s1, $t2 -/* 0388FC 7F003DCC ACEB0010 */ sw $t3, 0x10($a3) -/* 038900 7F003DD0 8E2C0014 */ lw $t4, 0x14($s1) -/* 038904 7F003DD4 022C6821 */ addu $t5, $s1, $t4 -/* 038908 7F003DD8 ACED0014 */ sw $t5, 0x14($a3) -/* 03890C 7F003DDC 8E2E0018 */ lw $t6, 0x18($s1) -/* 038910 7F003DE0 022E7821 */ addu $t7, $s1, $t6 -/* 038914 7F003DE4 ACEF0018 */ sw $t7, 0x18($a3) -/* 038918 7F003DE8 8E38001C */ lw $t8, 0x1c($s1) -/* 03891C 7F003DEC 02384021 */ addu $t0, $s1, $t8 -/* 038920 7F003DF0 ACE8001C */ sw $t0, 0x1c($a3) -/* 038924 7F003DF4 8E220020 */ lw $v0, 0x20($s1) -/* 038928 7F003DF8 10400003 */ beqz $v0, .L7F003E08 -/* 03892C 7F003DFC 02224821 */ addu $t1, $s1, $v0 -/* 038930 7F003E00 10000002 */ b .L7F003E0C -/* 038934 7F003E04 ACE90020 */ sw $t1, 0x20($a3) -.L7F003E08: -/* 038938 7F003E08 ACE00020 */ sw $zero, 0x20($a3) -.L7F003E0C: -/* 03893C 7F003E0C 8E220024 */ lw $v0, 0x24($s1) -/* 038940 7F003E10 10400003 */ beqz $v0, .L7F003E20 -/* 038944 7F003E14 0222C821 */ addu $t9, $s1, $v0 -/* 038948 7F003E18 10000002 */ b .L7F003E24 -/* 03894C 7F003E1C ACF90024 */ sw $t9, 0x24($a3) -.L7F003E20: -/* 038950 7F003E20 ACE00024 */ sw $zero, 0x24($a3) -.L7F003E24: -/* 038954 7F003E24 8CE50000 */ lw $a1, ($a3) -/* 038958 7F003E28 50A00010 */ beql $a1, $zero, .L7F003E6C -/* 03895C 7F003E2C 8CE50004 */ lw $a1, 4($a3) -/* 038960 7F003E30 8CAA0000 */ lw $t2, ($a1) -/* 038964 7F003E34 00001825 */ move $v1, $zero -/* 038968 7F003E38 00A01025 */ move $v0, $a1 -/* 03896C 7F003E3C 0542000B */ bltzl $t2, .L7F003E6C -/* 038970 7F003E40 8CE50004 */ lw $a1, 4($a3) -/* 038974 7F003E44 8C4B0004 */ lw $t3, 4($v0) -.L7F003E48: -/* 038978 7F003E48 24630010 */ addiu $v1, $v1, 0x10 -/* 03897C 7F003E4C 01716021 */ addu $t4, $t3, $s1 -/* 038980 7F003E50 AC4C0004 */ sw $t4, 4($v0) -/* 038984 7F003E54 8CED0000 */ lw $t5, ($a3) -/* 038988 7F003E58 01A31021 */ addu $v0, $t5, $v1 -/* 03898C 7F003E5C 8C4E0000 */ lw $t6, ($v0) -/* 038990 7F003E60 05C3FFF9 */ bgezl $t6, .L7F003E48 -/* 038994 7F003E64 8C4B0004 */ lw $t3, 4($v0) -/* 038998 7F003E68 8CE50004 */ lw $a1, 4($a3) -.L7F003E6C: -/* 03899C 7F003E6C 50A00015 */ beql $a1, $zero, .L7F003EC4 -/* 0389A0 7F003E70 8CE60014 */ lw $a2, 0x14($a3) -/* 0389A4 7F003E74 8CAF0000 */ lw $t7, ($a1) -/* 0389A8 7F003E78 00001825 */ move $v1, $zero -/* 0389AC 7F003E7C 00A01025 */ move $v0, $a1 -/* 0389B0 7F003E80 51E00010 */ beql $t7, $zero, .L7F003EC4 -/* 0389B4 7F003E84 8CE60014 */ lw $a2, 0x14($a3) -/* 0389B8 7F003E88 8CA40000 */ lw $a0, ($a1) -/* 0389BC 7F003E8C 0091C021 */ addu $t8, $a0, $s1 -.L7F003E90: -/* 0389C0 7F003E90 AC580000 */ sw $t8, ($v0) -/* 0389C4 7F003E94 8CE80004 */ lw $t0, 4($a3) -/* 0389C8 7F003E98 01031021 */ addu $v0, $t0, $v1 -/* 0389CC 7F003E9C 8C490004 */ lw $t1, 4($v0) -/* 0389D0 7F003EA0 2463000C */ addiu $v1, $v1, 0xc -/* 0389D4 7F003EA4 0131C821 */ addu $t9, $t1, $s1 -/* 0389D8 7F003EA8 AC590004 */ sw $t9, 4($v0) -/* 0389DC 7F003EAC 8CEA0004 */ lw $t2, 4($a3) -/* 0389E0 7F003EB0 01431021 */ addu $v0, $t2, $v1 -/* 0389E4 7F003EB4 8C440000 */ lw $a0, ($v0) -/* 0389E8 7F003EB8 5480FFF5 */ bnezl $a0, .L7F003E90 -/* 0389EC 7F003EBC 0091C021 */ addu $t8, $a0, $s1 -/* 0389F0 7F003EC0 8CE60014 */ lw $a2, 0x14($a3) -.L7F003EC4: -/* 0389F4 7F003EC4 50C00010 */ beql $a2, $zero, .L7F003F08 -/* 0389F8 7F003EC8 8CE20010 */ lw $v0, 0x10($a3) -/* 0389FC 7F003ECC 8CCB0000 */ lw $t3, ($a2) -/* 038A00 7F003ED0 00002825 */ move $a1, $zero -/* 038A04 7F003ED4 00C01025 */ move $v0, $a2 -/* 038A08 7F003ED8 5160000B */ beql $t3, $zero, .L7F003F08 -/* 038A0C 7F003EDC 8CE20010 */ lw $v0, 0x10($a3) -/* 038A10 7F003EE0 8CC30000 */ lw $v1, ($a2) -/* 038A14 7F003EE4 00716021 */ addu $t4, $v1, $s1 -.L7F003EE8: -/* 038A18 7F003EE8 AC4C0000 */ sw $t4, ($v0) -/* 038A1C 7F003EEC 8CED0014 */ lw $t5, 0x14($a3) -/* 038A20 7F003EF0 24A50008 */ addiu $a1, $a1, 8 -/* 038A24 7F003EF4 01A51021 */ addu $v0, $t5, $a1 -/* 038A28 7F003EF8 8C430000 */ lw $v1, ($v0) -/* 038A2C 7F003EFC 5460FFFA */ bnezl $v1, .L7F003EE8 -/* 038A30 7F003F00 00716021 */ addu $t4, $v1, $s1 -/* 038A34 7F003F04 8CE20010 */ lw $v0, 0x10($a3) -.L7F003F08: -/* 038A38 7F003F08 50400020 */ beql $v0, $zero, .L7F003F8C -/* 038A3C 7F003F0C 8CEA0018 */ lw $t2, 0x18($a3) -/* 038A40 7F003F10 8C4E0000 */ lw $t6, ($v0) -/* 038A44 7F003F14 00002825 */ move $a1, $zero -/* 038A48 7F003F18 00403025 */ move $a2, $v0 -/* 038A4C 7F003F1C 51C0001B */ beql $t6, $zero, .L7F003F8C -/* 038A50 7F003F20 8CEA0018 */ lw $t2, 0x18($a3) -/* 038A54 7F003F24 8C440000 */ lw $a0, ($v0) -/* 038A58 7F003F28 00917821 */ addu $t7, $a0, $s1 -.L7F003F2C: -/* 038A5C 7F003F2C ACCF0000 */ sw $t7, ($a2) -/* 038A60 7F003F30 8CF80010 */ lw $t8, 0x10($a3) -/* 038A64 7F003F34 00001825 */ move $v1, $zero -/* 038A68 7F003F38 03053021 */ addu $a2, $t8, $a1 -/* 038A6C 7F003F3C 8CC40000 */ lw $a0, ($a2) -/* 038A70 7F003F40 8C880000 */ lw $t0, ($a0) -/* 038A74 7F003F44 00801025 */ move $v0, $a0 -/* 038A78 7F003F48 05020009 */ bltzl $t0, .L7F003F70 -/* 038A7C 7F003F4C A4C30006 */ sh $v1, 6($a2) -/* 038A80 7F003F50 8C490004 */ lw $t1, 4($v0) -.L7F003F54: -/* 038A84 7F003F54 24630001 */ addiu $v1, $v1, 1 -/* 038A88 7F003F58 24420004 */ addiu $v0, $v0, 4 -/* 038A8C 7F003F5C 0523FFFD */ bgezl $t1, .L7F003F54 -/* 038A90 7F003F60 8C490004 */ lw $t1, 4($v0) -/* 038A94 7F003F64 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) -/* 038A98 7F003F68 24E75D00 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d00 -/* 038A9C 7F003F6C A4C30006 */ sh $v1, 6($a2) -.L7F003F70: -/* 038AA0 7F003F70 8CF90010 */ lw $t9, 0x10($a3) -/* 038AA4 7F003F74 24A50008 */ addiu $a1, $a1, 8 -/* 038AA8 7F003F78 03253021 */ addu $a2, $t9, $a1 -/* 038AAC 7F003F7C 8CC40000 */ lw $a0, ($a2) -/* 038AB0 7F003F80 5480FFEA */ bnezl $a0, .L7F003F2C -/* 038AB4 7F003F84 00917821 */ addu $t7, $a0, $s1 -/* 038AB8 7F003F88 8CEA0018 */ lw $t2, 0x18($a3) -.L7F003F8C: -/* 038ABC 7F003F8C 1140001D */ beqz $t2, .L7F004004 -/* 038AC0 7F003F90 00000000 */ nop -/* 038AC4 7F003F94 0FC2D20C */ jal get_room_data_float2 -/* 038AC8 7F003F98 00000000 */ nop -/* 038ACC 7F003F9C 3C108007 */ lui $s0, %hi(g_CurrentSetup+0x18) -/* 038AD0 7F003FA0 8E105D18 */ lw $s0, %lo(g_CurrentSetup+0x18)($s0) -/* 038AD4 7F003FA4 46000086 */ mov.s $f2, $f0 -/* 038AD8 7F003FA8 8E020024 */ lw $v0, 0x24($s0) -/* 038ADC 7F003FAC 10400015 */ beqz $v0, .L7F004004 -/* 038AE0 7F003FB0 00000000 */ nop -/* 038AE4 7F003FB4 C6060000 */ lwc1 $f6, ($s0) -.L7F003FB8: -/* 038AE8 7F003FB8 C60A0004 */ lwc1 $f10, 4($s0) -/* 038AEC 7F003FBC C6120008 */ lwc1 $f18, 8($s0) -/* 038AF0 7F003FC0 46023202 */ mul.s $f8, $f6, $f2 -/* 038AF4 7F003FC4 02222821 */ addu $a1, $s1, $v0 -/* 038AF8 7F003FC8 AE050024 */ sw $a1, 0x24($s0) -/* 038AFC 7F003FCC 46025402 */ mul.s $f16, $f10, $f2 -/* 038B00 7F003FD0 02002025 */ move $a0, $s0 -/* 038B04 7F003FD4 26060028 */ addiu $a2, $s0, 0x28 -/* 038B08 7F003FD8 46029102 */ mul.s $f4, $f18, $f2 -/* 038B0C 7F003FDC E6080000 */ swc1 $f8, ($s0) -/* 038B10 7F003FE0 E6100004 */ swc1 $f16, 4($s0) -/* 038B14 7F003FE4 E6040008 */ swc1 $f4, 8($s0) -/* 038B18 7F003FE8 0FC019F0 */ jal init_pathtable_something -/* 038B1C 7F003FEC E7A2015C */ swc1 $f2, 0x15c($sp) -/* 038B20 7F003FF0 8E020050 */ lw $v0, 0x50($s0) -/* 038B24 7F003FF4 2610002C */ addiu $s0, $s0, 0x2c -/* 038B28 7F003FF8 C7A2015C */ lwc1 $f2, 0x15c($sp) -/* 038B2C 7F003FFC 5440FFEE */ bnezl $v0, .L7F003FB8 -/* 038B30 7F004000 C6060000 */ lwc1 $f6, ($s0) -.L7F004004: -/* 038B34 7F004004 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) -/* 038B38 7F004008 24E75D00 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d00 -/* 038B3C 7F00400C 8CEC001C */ lw $t4, 0x1c($a3) -/* 038B40 7F004010 51800033 */ beql $t4, $zero, .L7F0040E0 -/* 038B44 7F004014 8CE50020 */ lw $a1, 0x20($a3) -/* 038B48 7F004018 0FC2D20C */ jal get_room_data_float2 -/* 038B4C 7F00401C 00000000 */ nop -/* 038B50 7F004020 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) -/* 038B54 7F004024 24E75D00 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d00 -/* 038B58 7F004028 8CF0001C */ lw $s0, 0x1c($a3) -/* 038B5C 7F00402C 46000086 */ mov.s $f2, $f0 -/* 038B60 7F004030 8E020024 */ lw $v0, 0x24($s0) -/* 038B64 7F004034 5040002A */ beql $v0, $zero, .L7F0040E0 -/* 038B68 7F004038 8CE50020 */ lw $a1, 0x20($a3) -/* 038B6C 7F00403C C6060000 */ lwc1 $f6, ($s0) -.L7F004040: -/* 038B70 7F004040 C60A0004 */ lwc1 $f10, 4($s0) -/* 038B74 7F004044 C6120008 */ lwc1 $f18, 8($s0) -/* 038B78 7F004048 46023202 */ mul.s $f8, $f6, $f2 -/* 038B7C 7F00404C C606002C */ lwc1 $f6, 0x2c($s0) -/* 038B80 7F004050 02222821 */ addu $a1, $s1, $v0 -/* 038B84 7F004054 46025402 */ mul.s $f16, $f10, $f2 -/* 038B88 7F004058 C60A0030 */ lwc1 $f10, 0x30($s0) -/* 038B8C 7F00405C AE050024 */ sw $a1, 0x24($s0) -/* 038B90 7F004060 46029102 */ mul.s $f4, $f18, $f2 -/* 038B94 7F004064 E6080000 */ swc1 $f8, ($s0) -/* 038B98 7F004068 C6120034 */ lwc1 $f18, 0x34($s0) -/* 038B9C 7F00406C 46023202 */ mul.s $f8, $f6, $f2 -/* 038BA0 7F004070 E6100004 */ swc1 $f16, 4($s0) -/* 038BA4 7F004074 C6060038 */ lwc1 $f6, 0x38($s0) -/* 038BA8 7F004078 46025402 */ mul.s $f16, $f10, $f2 -/* 038BAC 7F00407C E6040008 */ swc1 $f4, 8($s0) -/* 038BB0 7F004080 C60A003C */ lwc1 $f10, 0x3c($s0) -/* 038BB4 7F004084 46029102 */ mul.s $f4, $f18, $f2 -/* 038BB8 7F004088 E608002C */ swc1 $f8, 0x2c($s0) -/* 038BBC 7F00408C C6120040 */ lwc1 $f18, 0x40($s0) -/* 038BC0 7F004090 46023202 */ mul.s $f8, $f6, $f2 -/* 038BC4 7F004094 E6100030 */ swc1 $f16, 0x30($s0) -/* 038BC8 7F004098 02002025 */ move $a0, $s0 -/* 038BCC 7F00409C 46025402 */ mul.s $f16, $f10, $f2 -/* 038BD0 7F0040A0 E6040034 */ swc1 $f4, 0x34($s0) -/* 038BD4 7F0040A4 26060028 */ addiu $a2, $s0, 0x28 -/* 038BD8 7F0040A8 46029102 */ mul.s $f4, $f18, $f2 -/* 038BDC 7F0040AC E6080038 */ swc1 $f8, 0x38($s0) -/* 038BE0 7F0040B0 E610003C */ swc1 $f16, 0x3c($s0) -/* 038BE4 7F0040B4 E6040040 */ swc1 $f4, 0x40($s0) -/* 038BE8 7F0040B8 0FC019F0 */ jal init_pathtable_something -/* 038BEC 7F0040BC E7A20150 */ swc1 $f2, 0x150($sp) -/* 038BF0 7F0040C0 8E020068 */ lw $v0, 0x68($s0) -/* 038BF4 7F0040C4 26100044 */ addiu $s0, $s0, 0x44 -/* 038BF8 7F0040C8 C7A20150 */ lwc1 $f2, 0x150($sp) -/* 038BFC 7F0040CC 5440FFDC */ bnezl $v0, .L7F004040 -/* 038C00 7F0040D0 C6060000 */ lwc1 $f6, ($s0) -/* 038C04 7F0040D4 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) -/* 038C08 7F0040D8 24E75D00 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d00 -/* 038C0C 7F0040DC 8CE50020 */ lw $a1, 0x20($a3) -.L7F0040E0: -/* 038C10 7F0040E0 50A00010 */ beql $a1, $zero, .L7F004124 -/* 038C14 7F0040E4 8CE50024 */ lw $a1, 0x24($a3) -/* 038C18 7F0040E8 8CAE0000 */ lw $t6, ($a1) -/* 038C1C 7F0040EC 00001025 */ move $v0, $zero -/* 038C20 7F0040F0 00A01825 */ move $v1, $a1 -/* 038C24 7F0040F4 51C0000B */ beql $t6, $zero, .L7F004124 -/* 038C28 7F0040F8 8CE50024 */ lw $a1, 0x24($a3) -/* 038C2C 7F0040FC 8CA40000 */ lw $a0, ($a1) -/* 038C30 7F004100 00917821 */ addu $t7, $a0, $s1 -.L7F004104: -/* 038C34 7F004104 AC6F0000 */ sw $t7, ($v1) -/* 038C38 7F004108 8CF80020 */ lw $t8, 0x20($a3) -/* 038C3C 7F00410C 24420004 */ addiu $v0, $v0, 4 -/* 038C40 7F004110 03021821 */ addu $v1, $t8, $v0 -/* 038C44 7F004114 8C640000 */ lw $a0, ($v1) -/* 038C48 7F004118 5480FFFA */ bnezl $a0, .L7F004104 -/* 038C4C 7F00411C 00917821 */ addu $t7, $a0, $s1 -/* 038C50 7F004120 8CE50024 */ lw $a1, 0x24($a3) -.L7F004124: -/* 038C54 7F004124 50A0000F */ beql $a1, $zero, .L7F004164 -/* 038C58 7F004128 8FAA0278 */ lw $t2, 0x278($sp) -/* 038C5C 7F00412C 8CA80000 */ lw $t0, ($a1) -/* 038C60 7F004130 00001025 */ move $v0, $zero -/* 038C64 7F004134 00A01825 */ move $v1, $a1 -/* 038C68 7F004138 11000009 */ beqz $t0, .L7F004160 -/* 038C6C 7F00413C 01002025 */ move $a0, $t0 -/* 038C70 7F004140 00914821 */ addu $t1, $a0, $s1 -.L7F004144: -/* 038C74 7F004144 AC690000 */ sw $t1, ($v1) -/* 038C78 7F004148 8CF90024 */ lw $t9, 0x24($a3) -/* 038C7C 7F00414C 24420004 */ addiu $v0, $v0, 4 -/* 038C80 7F004150 03221821 */ addu $v1, $t9, $v0 -/* 038C84 7F004154 8C640000 */ lw $a0, ($v1) -/* 038C88 7F004158 5480FFFA */ bnezl $a0, .L7F004144 -/* 038C8C 7F00415C 00914821 */ addu $t1, $a0, $s1 -.L7F004160: -/* 038C90 7F004160 8FAA0278 */ lw $t2, 0x278($sp) -.L7F004164: -/* 038C94 7F004164 11400012 */ beqz $t2, .L7F0041B0 -/* 038C98 7F004168 00000000 */ nop -/* 038C9C 7F00416C 0FC006D4 */ jal load_proptype -/* 038CA0 7F004170 24040009 */ li $a0, 9 -/* 038CA4 7F004174 0FC003AE */ jal alloc_init_GUARDdata_entries -/* 038CA8 7F004178 00402025 */ move $a0, $v0 -/* 038CAC 7F00417C 0FC006D4 */ jal load_proptype -/* 038CB0 7F004180 24040009 */ li $a0, 9 -/* 038CB4 7F004184 0040A025 */ move $s4, $v0 -/* 038CB8 7F004188 0FC006D4 */ jal load_proptype -/* 038CBC 7F00418C 24040008 */ li $a0, 8 -/* 038CC0 7F004190 00409825 */ move $s3, $v0 -/* 038CC4 7F004194 0FC006D4 */ jal load_proptype -/* 038CC8 7F004198 24040004 */ li $a0, 4 -/* 038CCC 7F00419C 02629821 */ addu $s3, $s3, $v0 -/* 038CD0 7F0041A0 0FC006D4 */ jal load_proptype -/* 038CD4 7F0041A4 24040011 */ li $a0, 17 -/* 038CD8 7F0041A8 10000003 */ b .L7F0041B8 -/* 038CDC 7F0041AC 02629821 */ addu $s3, $s3, $v0 -.L7F0041B0: -/* 038CE0 7F0041B0 0FC003AE */ jal alloc_init_GUARDdata_entries -/* 038CE4 7F0041B4 00002025 */ move $a0, $zero -.L7F0041B8: -/* 038CE8 7F0041B8 13C0003A */ beqz $fp, .L7F0042A4 -/* 038CEC 7F0041BC 00000000 */ nop -/* 038CF0 7F0041C0 0FC006D4 */ jal load_proptype -/* 038CF4 7F0041C4 24040001 */ li $a0, 1 -/* 038CF8 7F0041C8 02629821 */ addu $s3, $s3, $v0 -/* 038CFC 7F0041CC 0FC006D4 */ jal load_proptype -/* 038D00 7F0041D0 24040006 */ li $a0, 6 -/* 038D04 7F0041D4 02629821 */ addu $s3, $s3, $v0 -/* 038D08 7F0041D8 0FC006D4 */ jal load_proptype -/* 038D0C 7F0041DC 2404000D */ li $a0, 13 -/* 038D10 7F0041E0 02629821 */ addu $s3, $s3, $v0 -/* 038D14 7F0041E4 0FC006D4 */ jal load_proptype -/* 038D18 7F0041E8 2404000C */ li $a0, 12 -/* 038D1C 7F0041EC 02629821 */ addu $s3, $s3, $v0 -/* 038D20 7F0041F0 0FC006D4 */ jal load_proptype -/* 038D24 7F0041F4 2404000A */ li $a0, 10 -/* 038D28 7F0041F8 02629821 */ addu $s3, $s3, $v0 -/* 038D2C 7F0041FC 0FC006D4 */ jal load_proptype -/* 038D30 7F004200 2404000B */ li $a0, 11 -/* 038D34 7F004204 02629821 */ addu $s3, $s3, $v0 -/* 038D38 7F004208 0FC006D4 */ jal load_proptype -/* 038D3C 7F00420C 24040015 */ li $a0, 21 -/* 038D40 7F004210 02629821 */ addu $s3, $s3, $v0 -/* 038D44 7F004214 0FC006D4 */ jal load_proptype -/* 038D48 7F004218 24040003 */ li $a0, 3 -/* 038D4C 7F00421C 02629821 */ addu $s3, $s3, $v0 -/* 038D50 7F004220 0FC006D4 */ jal load_proptype -/* 038D54 7F004224 2404002A */ li $a0, 42 -/* 038D58 7F004228 02629821 */ addu $s3, $s3, $v0 -/* 038D5C 7F00422C 0FC006D4 */ jal load_proptype -/* 038D60 7F004230 2404002F */ li $a0, 47 -/* 038D64 7F004234 02629821 */ addu $s3, $s3, $v0 -/* 038D68 7F004238 0FC006D4 */ jal load_proptype -/* 038D6C 7F00423C 2404002B */ li $a0, 43 -/* 038D70 7F004240 02629821 */ addu $s3, $s3, $v0 -/* 038D74 7F004244 0FC006D4 */ jal load_proptype -/* 038D78 7F004248 24040029 */ li $a0, 41 -/* 038D7C 7F00424C 02629821 */ addu $s3, $s3, $v0 -/* 038D80 7F004250 0FC006D4 */ jal load_proptype -/* 038D84 7F004254 24040024 */ li $a0, 36 -/* 038D88 7F004258 02629821 */ addu $s3, $s3, $v0 -/* 038D8C 7F00425C 0FC006D4 */ jal load_proptype -/* 038D90 7F004260 24040005 */ li $a0, 5 -/* 038D94 7F004264 02629821 */ addu $s3, $s3, $v0 -/* 038D98 7F004268 0FC006D4 */ jal load_proptype -/* 038D9C 7F00426C 24040007 */ li $a0, 7 -/* 038DA0 7F004270 02629821 */ addu $s3, $s3, $v0 -/* 038DA4 7F004274 0FC006D4 */ jal load_proptype -/* 038DA8 7F004278 24040014 */ li $a0, 20 -/* 038DAC 7F00427C 02629821 */ addu $s3, $s3, $v0 -/* 038DB0 7F004280 0FC006D4 */ jal load_proptype -/* 038DB4 7F004284 24040027 */ li $a0, 39 -/* 038DB8 7F004288 02629821 */ addu $s3, $s3, $v0 -/* 038DBC 7F00428C 0FC006D4 */ jal load_proptype -/* 038DC0 7F004290 2404002D */ li $a0, 45 -/* 038DC4 7F004294 02629821 */ addu $s3, $s3, $v0 -/* 038DC8 7F004298 0FC006D4 */ jal load_proptype -/* 038DCC 7F00429C 24040028 */ li $a0, 40 -/* 038DD0 7F0042A0 0282A021 */ addu $s4, $s4, $v0 -.L7F0042A4: -/* 038DD4 7F0042A4 0FC01550 */ jal sub_GAME_7F005540 -/* 038DD8 7F0042A8 02602025 */ move $a0, $s3 -/* 038DDC 7F0042AC 0FC01589 */ jal sub_GAME_7F005624 -/* 038DE0 7F0042B0 02802025 */ move $a0, $s4 -/* 038DE4 7F0042B4 0FC26919 */ jal getPlayerCount -/* 038DE8 7F0042B8 00008025 */ move $s0, $zero -/* 038DEC 7F0042BC 1840000C */ blez $v0, .L7F0042F0 -/* 038DF0 7F0042C0 00000000 */ nop -.L7F0042C4: -/* 038DF4 7F0042C4 0FC26C43 */ jal set_cur_player -/* 038DF8 7F0042C8 02002025 */ move $a0, $s0 -/* 038DFC 7F0042CC 0FC006D4 */ jal load_proptype -/* 038E00 7F0042D0 2404000E */ li $a0, 14 -/* 038E04 7F0042D4 0FC01897 */ jal alloc_additional_item_slots -/* 038E08 7F0042D8 00402025 */ move $a0, $v0 -/* 038E0C 7F0042DC 0FC26919 */ jal getPlayerCount -/* 038E10 7F0042E0 26100001 */ addiu $s0, $s0, 1 -/* 038E14 7F0042E4 0202082A */ slt $at, $s0, $v0 -/* 038E18 7F0042E8 1420FFF6 */ bnez $at, .L7F0042C4 -/* 038E1C 7F0042EC 00000000 */ nop -.L7F0042F0: -/* 038E20 7F0042F0 3C0B8007 */ lui $t3, %hi(g_CurrentSetup+0x0c) -/* 038E24 7F0042F4 8D6B5D0C */ lw $t3, %lo(g_CurrentSetup+0x0c)($t3) -/* 038E28 7F0042F8 116002DF */ beqz $t3, .L7F004E78 -/* 038E2C 7F0042FC 00000000 */ nop -/* 038E30 7F004300 0FC2FF04 */ jal lvlGetSelectedDifficulty -/* 038E34 7F004304 00000000 */ nop -/* 038E38 7F004308 244C0004 */ addiu $t4, $v0, 4 -/* 038E3C 7F00430C 240D0001 */ li $t5, 1 -/* 038E40 7F004310 0FC26919 */ jal getPlayerCount -/* 038E44 7F004314 018DA004 */ sllv $s4, $t5, $t4 -/* 038E48 7F004318 28410002 */ slti $at, $v0, 2 -/* 038E4C 7F00431C 14200007 */ bnez $at, .L7F00433C -/* 038E50 7F004320 00000000 */ nop -/* 038E54 7F004324 0FC26919 */ jal getPlayerCount -/* 038E58 7F004328 00000000 */ nop -/* 038E5C 7F00432C 244E0014 */ addiu $t6, $v0, 0x14 -/* 038E60 7F004330 240F0001 */ li $t7, 1 -/* 038E64 7F004334 01CFC004 */ sllv $t8, $t7, $t6 -/* 038E68 7F004338 0298A025 */ or $s4, $s4, $t8 -.L7F00433C: -/* 038E6C 7F00433C 3C128007 */ lui $s2, %hi(g_CurrentSetup+0x0c) -/* 038E70 7F004340 8E525D0C */ lw $s2, %lo(g_CurrentSetup+0x0c)($s2) -/* 038E74 7F004344 24010030 */ li $at, 48 -/* 038E78 7F004348 00009825 */ move $s3, $zero -/* 038E7C 7F00434C 92430003 */ lbu $v1, 3($s2) -/* 038E80 7F004350 24170034 */ li $s7, 52 -/* 038E84 7F004354 506101F6 */ beql $v1, $at, .L7F004B30 -/* 038E88 7F004358 92430003 */ lbu $v1, 3($s2) -/* 038E8C 7F00435C 4480A000 */ mtc1 $zero, $f20 -/* 038E90 7F004360 3416FFFF */ li $s6, 65535 -/* 038E94 7F004364 2468FFFF */ addiu $t0, $v1, -1 -.L7F004368: -/* 038E98 7F004368 2D01002F */ sltiu $at, $t0, 0x2f -/* 038E9C 7F00436C 102001E3 */ beqz $at, other_obj_expand -/* 038EA0 7F004370 00084080 */ sll $t0, $t0, 2 -/* 038EA4 7F004374 3C018005 */ lui $at, %hi(jpt_object_type_expansion) -/* 038EA8 7F004378 00280821 */ addu $at, $at, $t0 -/* 038EAC 7F00437C 8C28EF68 */ lw $t0, %lo(jpt_object_type_expansion)($at) -/* 038EB0 7F004380 01000008 */ jr $t0 -/* 038EB4 7F004384 00000000 */ nop -actor_attr_expand: -/* 038EB8 7F004388 9250000B */ lbu $s0, 0xb($s2) -/* 038EBC 7F00438C 0FC08BF2 */ jal chrFindByLiteralId -/* 038EC0 7F004390 8E440004 */ lw $a0, 4($s2) -/* 038EC4 7F004394 104001D9 */ beqz $v0, other_obj_expand -/* 038EC8 7F004398 00000000 */ nop -/* 038ECC 7F00439C 8C490018 */ lw $t1, 0x18($v0) -/* 038ED0 7F0043A0 112001D6 */ beqz $t1, other_obj_expand -/* 038ED4 7F0043A4 00000000 */ nop -/* 038ED8 7F0043A8 8C59001C */ lw $t9, 0x1c($v0) -/* 038EDC 7F0043AC 132001D3 */ beqz $t9, other_obj_expand -/* 038EE0 7F0043B0 00000000 */ nop -/* 038EE4 7F0043B4 100001D1 */ b other_obj_expand -/* 038EE8 7F0043B8 A0500010 */ sb $s0, 0x10($v0) -actor_expand: -/* 038EEC 7F0043BC 8FAA0278 */ lw $t2, 0x278($sp) -/* 038EF0 7F0043C0 02A02025 */ move $a0, $s5 -/* 038EF4 7F0043C4 02402825 */ move $a1, $s2 -/* 038EF8 7F0043C8 114001CC */ beqz $t2, other_obj_expand -/* 038EFC 7F0043CC 00000000 */ nop -/* 038F00 7F0043D0 0FC08DC3 */ jal expand_09_characters -/* 038F04 7F0043D4 02603025 */ move $a2, $s3 -/* 038F08 7F0043D8 100001C8 */ b other_obj_expand -/* 038F0C 7F0043DC 00000000 */ nop -door_expand: -/* 038F10 7F0043E0 13C001C6 */ beqz $fp, other_obj_expand -/* 038F14 7F0043E4 00000000 */ nop -/* 038F18 7F0043E8 8E4B000C */ lw $t3, 0xc($s2) -/* 038F1C 7F0043EC 02A02025 */ move $a0, $s5 -/* 038F20 7F0043F0 02402825 */ move $a1, $s2 -/* 038F24 7F0043F4 01746824 */ and $t5, $t3, $s4 -/* 038F28 7F0043F8 15A001C0 */ bnez $t5, other_obj_expand -/* 038F2C 7F0043FC 00000000 */ nop -/* 038F30 7F004400 0FC00D20 */ jal setupDoor -/* 038F34 7F004404 02603025 */ move $a2, $s3 -/* 038F38 7F004408 100001BC */ b other_obj_expand -/* 038F3C 7F00440C 00000000 */ nop -door_scale_expand: -/* 038F40 7F004410 8E4C0004 */ lw $t4, 4($s2) -/* 038F44 7F004414 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 038F48 7F004418 44815000 */ mtc1 $at, $f10 -/* 038F4C 7F00441C 448C3000 */ mtc1 $t4, $f6 -/* 038F50 7F004420 3C018003 */ lui $at, %hi(g_DoorScale) -/* 038F54 7F004424 46803220 */ cvt.s.w $f8, $f6 -/* 038F58 7F004428 460A4403 */ div.s $f16, $f8, $f10 -/* 038F5C 7F00442C 100001B3 */ b other_obj_expand -/* 038F60 7F004430 E430A3C0 */ swc1 $f16, %lo(g_DoorScale)($at) -item_expand: -/* 038F64 7F004434 8FAF0278 */ lw $t7, 0x278($sp) -/* 038F68 7F004438 11E001B0 */ beqz $t7, other_obj_expand -/* 038F6C 7F00443C 00000000 */ nop -/* 038F70 7F004440 8E4E000C */ lw $t6, 0xc($s2) -/* 038F74 7F004444 02A02025 */ move $a0, $s5 -/* 038F78 7F004448 02402825 */ move $a1, $s2 -/* 038F7C 7F00444C 01D4C024 */ and $t8, $t6, $s4 -/* 038F80 7F004450 170001AA */ bnez $t8, other_obj_expand -/* 038F84 7F004454 00000000 */ nop -/* 038F88 7F004458 0FC009CE */ jal weaponAssignToHome -/* 038F8C 7F00445C 02603025 */ move $a2, $s3 -/* 038F90 7F004460 100001A6 */ b other_obj_expand -/* 038F94 7F004464 00000000 */ nop -key_expand: -/* 038F98 7F004468 8FA80278 */ lw $t0, 0x278($sp) -/* 038F9C 7F00446C 110001A3 */ beqz $t0, other_obj_expand -/* 038FA0 7F004470 00000000 */ nop -/* 038FA4 7F004474 8E49000C */ lw $t1, 0xc($s2) -/* 038FA8 7F004478 02A02025 */ move $a0, $s5 -/* 038FAC 7F00447C 02402825 */ move $a1, $s2 -/* 038FB0 7F004480 0134C824 */ and $t9, $t1, $s4 -/* 038FB4 7F004484 1720019D */ bnez $t9, other_obj_expand -/* 038FB8 7F004488 00000000 */ nop -/* 038FBC 7F00448C 0FC00A87 */ jal setupKey -/* 038FC0 7F004490 02603025 */ move $a2, $s3 -/* 038FC4 7F004494 10000199 */ b other_obj_expand -/* 038FC8 7F004498 00000000 */ nop -hat_expand: -/* 038FCC 7F00449C 8FAA0278 */ lw $t2, 0x278($sp) -/* 038FD0 7F0044A0 11400196 */ beqz $t2, other_obj_expand -/* 038FD4 7F0044A4 00000000 */ nop -/* 038FD8 7F0044A8 8E4B000C */ lw $t3, 0xc($s2) -/* 038FDC 7F0044AC 02A02025 */ move $a0, $s5 -/* 038FE0 7F0044B0 02402825 */ move $a1, $s2 -/* 038FE4 7F0044B4 01746824 */ and $t5, $t3, $s4 -/* 038FE8 7F0044B8 15A00190 */ bnez $t5, other_obj_expand -/* 038FEC 7F0044BC 00000000 */ nop -/* 038FF0 7F0044C0 0FC00A6A */ jal setupHat -/* 038FF4 7F0044C4 02603025 */ move $a2, $s3 -/* 038FF8 7F0044C8 1000018C */ b other_obj_expand -/* 038FFC 7F0044CC 00000000 */ nop -surv_camera_expand: -/* 039000 7F0044D0 13C0018A */ beqz $fp, other_obj_expand -/* 039004 7F0044D4 00000000 */ nop -/* 039008 7F0044D8 8E4C000C */ lw $t4, 0xc($s2) -/* 03900C 7F0044DC 02A02025 */ move $a0, $s5 -/* 039010 7F0044E0 02402825 */ move $a1, $s2 -/* 039014 7F0044E4 01947824 */ and $t7, $t4, $s4 -/* 039018 7F0044E8 15E00184 */ bnez $t7, other_obj_expand -/* 03901C 7F0044EC 00000000 */ nop -/* 039020 7F0044F0 0FC00A8F */ jal setupCctv -/* 039024 7F0044F4 02603025 */ move $a2, $s3 -/* 039028 7F0044F8 10000180 */ b other_obj_expand -/* 03902C 7F0044FC 00000000 */ nop -autogun_expand: -/* 039030 7F004500 13C0017E */ beqz $fp, other_obj_expand -/* 039034 7F004504 00000000 */ nop -/* 039038 7F004508 8E4E000C */ lw $t6, 0xc($s2) -/* 03903C 7F00450C 02A02025 */ move $a0, $s5 -/* 039040 7F004510 02402825 */ move $a1, $s2 -/* 039044 7F004514 01D4C024 */ and $t8, $t6, $s4 -/* 039048 7F004518 17000178 */ bnez $t8, other_obj_expand -/* 03904C 7F00451C 00000000 */ nop -/* 039050 7F004520 0FC00B16 */ jal setupAutogun -/* 039054 7F004524 02603025 */ move $a2, $s3 -/* 039058 7F004528 10000174 */ b other_obj_expand -/* 03905C 7F00452C 00000000 */ nop -rack_expand: -/* 039060 7F004530 13C00172 */ beqz $fp, other_obj_expand -/* 039064 7F004534 00000000 */ nop -/* 039068 7F004538 8E48000C */ lw $t0, 0xc($s2) -/* 03906C 7F00453C 02A02025 */ move $a0, $s5 -/* 039070 7F004540 02402825 */ move $a1, $s2 -/* 039074 7F004544 01144824 */ and $t1, $t0, $s4 -/* 039078 7F004548 1520016C */ bnez $t1, other_obj_expand -/* 03907C 7F00454C 00000000 */ nop -/* 039080 7F004550 0FC00B87 */ jal setupHangingMonitors -/* 039084 7F004554 02603025 */ move $a2, $s3 -/* 039088 7F004558 10000168 */ b other_obj_expand -/* 03908C 7F00455C 00000000 */ nop -single_screen_display_expand: -/* 039090 7F004560 13C00166 */ beqz $fp, other_obj_expand -/* 039094 7F004564 00000000 */ nop -/* 039098 7F004568 8E59000C */ lw $t9, 0xc($s2) -/* 03909C 7F00456C 02A02025 */ move $a0, $s5 -/* 0390A0 7F004570 02402825 */ move $a1, $s2 -/* 0390A4 7F004574 03345024 */ and $t2, $t9, $s4 -/* 0390A8 7F004578 15400160 */ bnez $t2, other_obj_expand -/* 0390AC 7F00457C 00000000 */ nop -/* 0390B0 7F004580 0FC00B8F */ jal setupSingleMonitor -/* 0390B4 7F004584 02603025 */ move $a2, $s3 -/* 0390B8 7F004588 1000015C */ b other_obj_expand -/* 0390BC 7F00458C 00000000 */ nop -multi_screen_display_expand: -/* 0390C0 7F004590 13C0015A */ beqz $fp, other_obj_expand -/* 0390C4 7F004594 00000000 */ nop -/* 0390C8 7F004598 8E4B000C */ lw $t3, 0xc($s2) -/* 0390CC 7F00459C 02A02025 */ move $a0, $s5 -/* 0390D0 7F0045A0 02402825 */ move $a1, $s2 -/* 0390D4 7F0045A4 01746824 */ and $t5, $t3, $s4 -/* 0390D8 7F0045A8 15A00154 */ bnez $t5, other_obj_expand -/* 0390DC 7F0045AC 00000000 */ nop -/* 0390E0 7F0045B0 0FC00C34 */ jal setupMultiMonitor -/* 0390E4 7F0045B4 02603025 */ move $a2, $s3 -/* 0390E8 7F0045B8 10000150 */ b other_obj_expand -/* 0390EC 7F0045BC 00000000 */ nop -body_armor_expand: -/* 0390F0 7F0045C0 13C0014E */ beqz $fp, other_obj_expand -/* 0390F4 7F0045C4 00000000 */ nop -/* 0390F8 7F0045C8 8E4C000C */ lw $t4, 0xc($s2) -/* 0390FC 7F0045CC 01947824 */ and $t7, $t4, $s4 -/* 039100 7F0045D0 15E0014A */ bnez $t7, other_obj_expand -/* 039104 7F0045D4 00000000 */ nop -/* 039108 7F0045D8 8E4E0080 */ lw $t6, 0x80($s2) -/* 03910C 7F0045DC 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 039110 7F0045E0 44813000 */ mtc1 $at, $f6 -/* 039114 7F0045E4 448E9000 */ mtc1 $t6, $f18 -/* 039118 7F0045E8 02A02025 */ move $a0, $s5 -/* 03911C 7F0045EC 02402825 */ move $a1, $s2 -/* 039120 7F0045F0 46809120 */ cvt.s.w $f4, $f18 -/* 039124 7F0045F4 02603025 */ move $a2, $s3 -/* 039128 7F0045F8 46062203 */ div.s $f8, $f4, $f6 -/* 03912C 7F0045FC E6480080 */ swc1 $f8, 0x80($s2) -/* 039130 7F004600 C64A0080 */ lwc1 $f10, 0x80($s2) -/* 039134 7F004604 0FC00767 */ jal domakedefaultobj -/* 039138 7F004608 E64A0084 */ swc1 $f10, 0x84($s2) -/* 03913C 7F00460C 1000013B */ b other_obj_expand -/* 039140 7F004610 00000000 */ nop -type2F_tinted_glass: -/* 039144 7F004614 13C00139 */ beqz $fp, other_obj_expand -/* 039148 7F004618 00000000 */ nop -/* 03914C 7F00461C 8E58000C */ lw $t8, 0xc($s2) -/* 039150 7F004620 03144024 */ and $t0, $t8, $s4 -/* 039154 7F004624 15000135 */ bnez $t0, other_obj_expand -/* 039158 7F004628 00000000 */ nop -/* 03915C 7F00462C 8E490008 */ lw $t1, 8($s2) -/* 039160 7F004630 0009C8C0 */ sll $t9, $t1, 3 -/* 039164 7F004634 07230039 */ bgezl $t9, .L7F00471C -/* 039168 7F004638 02A02025 */ move $a0, $s5 -/* 03916C 7F00463C 86420006 */ lh $v0, 6($s2) -/* 039170 7F004640 3C0B8007 */ lui $t3, %hi(g_CurrentSetup+0x1C) -/* 039174 7F004644 27A50118 */ addiu $a1, $sp, 0x118 -/* 039178 7F004648 28412710 */ slti $at, $v0, 0x2710 -/* 03917C 7F00464C 14200032 */ bnez $at, .L7F004718 -/* 039180 7F004650 00025100 */ sll $t2, $v0, 4 -/* 039184 7F004654 8D6B5D1C */ lw $t3, %lo(g_CurrentSetup+0x1C)($t3) -/* 039188 7F004658 01425021 */ addu $t2, $t2, $v0 -/* 03918C 7F00465C 000A5080 */ sll $t2, $t2, 2 -/* 039190 7F004660 3C01FFF5 */ lui $at, (0xFFF59FC0 >> 16) # lui $at, 0xfff5 -/* 039194 7F004664 34219FC0 */ ori $at, (0xFFF59FC0 & 0xFFFF) # ori $at, $at, 0x9fc0 -/* 039198 7F004668 014B8021 */ addu $s0, $t2, $t3 -/* 03919C 7F00466C 02018021 */ addu $s0, $s0, $at -/* 0391A0 7F004670 0FC006F5 */ jal sub_GAME_7F001BD4 -/* 0391A4 7F004674 02002025 */ move $a0, $s0 -/* 0391A8 7F004678 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 0391AC 7F00467C 44810000 */ mtc1 $at, $f0 -/* 0391B0 7F004680 C610000C */ lwc1 $f16, 0xc($s0) -/* 0391B4 7F004684 C7A40118 */ lwc1 $f4, 0x118($sp) -/* 0391B8 7F004688 27A40118 */ addiu $a0, $sp, 0x118 -/* 0391BC 7F00468C 46008482 */ mul.s $f18, $f16, $f0 -/* 0391C0 7F004690 C7B0011C */ lwc1 $f16, 0x11c($sp) -/* 0391C4 7F004694 27A5010C */ addiu $a1, $sp, 0x10c -/* 0391C8 7F004698 46049180 */ add.s $f6, $f18, $f4 -/* 0391CC 7F00469C E7A6010C */ swc1 $f6, 0x10c($sp) -/* 0391D0 7F0046A0 C6080010 */ lwc1 $f8, 0x10($s0) -/* 0391D4 7F0046A4 46004282 */ mul.s $f10, $f8, $f0 -/* 0391D8 7F0046A8 46105480 */ add.s $f18, $f10, $f16 -/* 0391DC 7F0046AC C7AA0120 */ lwc1 $f10, 0x120($sp) -/* 0391E0 7F0046B0 E7B20110 */ swc1 $f18, 0x110($sp) -/* 0391E4 7F0046B4 C6060014 */ lwc1 $f6, 0x14($s0) -/* 0391E8 7F0046B8 46003202 */ mul.s $f8, $f6, $f0 -/* 0391EC 7F0046BC 460A4480 */ add.s $f18, $f8, $f10 -/* 0391F0 7F0046C0 E7B20114 */ swc1 $f18, 0x114($sp) -/* 0391F4 7F0046C4 C606000C */ lwc1 $f6, 0xc($s0) -/* 0391F8 7F0046C8 46060202 */ mul.s $f8, $f0, $f6 -/* 0391FC 7F0046CC 46082481 */ sub.s $f18, $f4, $f8 -/* 039200 7F0046D0 E7B20118 */ swc1 $f18, 0x118($sp) -/* 039204 7F0046D4 C6060010 */ lwc1 $f6, 0x10($s0) -/* 039208 7F0046D8 46060102 */ mul.s $f4, $f0, $f6 -/* 03920C 7F0046DC 46048201 */ sub.s $f8, $f16, $f4 -/* 039210 7F0046E0 E7A8011C */ swc1 $f8, 0x11c($sp) -/* 039214 7F0046E4 C6120014 */ lwc1 $f18, 0x14($s0) -/* 039218 7F0046E8 46120182 */ mul.s $f6, $f0, $f18 -/* 03921C 7F0046EC 46065401 */ sub.s $f16, $f10, $f6 -/* 039220 7F0046F0 0FC2E781 */ jal sub_GAME_7F0B9E04 -/* 039224 7F0046F4 E7B00120 */ swc1 $f16, 0x120($sp) -/* 039228 7F0046F8 8E4D0090 */ lw $t5, 0x90($s2) -/* 03922C 7F0046FC 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 039230 7F004700 44819000 */ mtc1 $at, $f18 -/* 039234 7F004704 448D2000 */ mtc1 $t5, $f4 -/* 039238 7F004708 AE42008C */ sw $v0, 0x8c($s2) -/* 03923C 7F00470C 46802220 */ cvt.s.w $f8, $f4 -/* 039240 7F004710 46124283 */ div.s $f10, $f8, $f18 -/* 039244 7F004714 E64A0090 */ swc1 $f10, 0x90($s2) -.L7F004718: -/* 039248 7F004718 02A02025 */ move $a0, $s5 -.L7F00471C: -/* 03924C 7F00471C 02402825 */ move $a1, $s2 -/* 039250 7F004720 0FC00767 */ jal domakedefaultobj -/* 039254 7F004724 02603025 */ move $a2, $s3 -/* 039258 7F004728 100000F4 */ b other_obj_expand -/* 03925C 7F00472C 00000000 */ nop -obj_03_expand: -/* 039260 7F004730 13C000F2 */ beqz $fp, other_obj_expand -/* 039264 7F004734 00000000 */ nop -/* 039268 7F004738 8E4C000C */ lw $t4, 0xc($s2) -/* 03926C 7F00473C 02A02025 */ move $a0, $s5 -/* 039270 7F004740 02402825 */ move $a1, $s2 -/* 039274 7F004744 01947824 */ and $t7, $t4, $s4 -/* 039278 7F004748 15E000EC */ bnez $t7, other_obj_expand -/* 03927C 7F00474C 00000000 */ nop -/* 039280 7F004750 0FC00767 */ jal domakedefaultobj -/* 039284 7F004754 02603025 */ move $a2, $s3 -/* 039288 7F004758 100000E8 */ b other_obj_expand -/* 03928C 7F00475C 00000000 */ nop -ammo_box_expand: -/* 039290 7F004760 0FC26919 */ jal getPlayerCount -/* 039294 7F004764 24100001 */ li $s0, 1 -/* 039298 7F004768 28410002 */ slti $at, $v0, 2 -/* 03929C 7F00476C 1420000E */ bnez $at, .L7F0047A8 -/* 0392A0 7F004770 00000000 */ nop -/* 0392A4 7F004774 0FC31985 */ jal getPtrMPWeaponSetData -/* 0392A8 7F004778 00000000 */ nop -/* 0392AC 7F00477C 3C0E8007 */ lui $t6, %hi(lastmpweaponnum) -/* 0392B0 7F004780 8DCE9540 */ lw $t6, %lo(lastmpweaponnum)($t6) -/* 0392B4 7F004784 000EC080 */ sll $t8, $t6, 2 -/* 0392B8 7F004788 030EC023 */ subu $t8, $t8, $t6 -/* 0392BC 7F00478C 0018C0C0 */ sll $t8, $t8, 3 -/* 0392C0 7F004790 00581821 */ addu $v1, $v0, $t8 -/* 0392C4 7F004794 8C64000C */ lw $a0, 0xc($v1) -/* 0392C8 7F004798 8C700010 */ lw $s0, 0x10($v1) -/* 0392CC 7F00479C 00044080 */ sll $t0, $a0, 2 -/* 0392D0 7F0047A0 02484821 */ addu $t1, $s2, $t0 -/* 0392D4 7F0047A4 A530007E */ sh $s0, 0x7e($t1) -.L7F0047A8: -/* 0392D8 7F0047A8 1A0000D4 */ blez $s0, other_obj_expand -/* 0392DC 7F0047AC 00000000 */ nop -/* 0392E0 7F0047B0 13C000D2 */ beqz $fp, other_obj_expand -/* 0392E4 7F0047B4 00000000 */ nop -/* 0392E8 7F0047B8 8E59000C */ lw $t9, 0xc($s2) -/* 0392EC 7F0047BC 00008825 */ move $s1, $zero -/* 0392F0 7F0047C0 02408025 */ move $s0, $s2 -/* 0392F4 7F0047C4 03345024 */ and $t2, $t9, $s4 -/* 0392F8 7F0047C8 154000CC */ bnez $t2, other_obj_expand -/* 0392FC 7F0047CC 00000000 */ nop -.L7F0047D0: -/* 039300 7F0047D0 960B0082 */ lhu $t3, 0x82($s0) -/* 039304 7F0047D4 59600007 */ blezl $t3, .L7F0047F4 -/* 039308 7F0047D8 26310004 */ addiu $s1, $s1, 4 -/* 03930C 7F0047DC 96040080 */ lhu $a0, 0x80($s0) -/* 039310 7F0047E0 52C40004 */ beql $s6, $a0, .L7F0047F4 -/* 039314 7F0047E4 26310004 */ addiu $s1, $s1, 4 -/* 039318 7F0047E8 0FC15B0E */ jal modelLoad -/* 03931C 7F0047EC 00000000 */ nop -/* 039320 7F0047F0 26310004 */ addiu $s1, $s1, 4 -.L7F0047F4: -/* 039324 7F0047F4 1637FFF6 */ bne $s1, $s7, .L7F0047D0 -/* 039328 7F0047F8 26100004 */ addiu $s0, $s0, 4 -/* 03932C 7F0047FC 02A02025 */ move $a0, $s5 -/* 039330 7F004800 02402825 */ move $a1, $s2 -/* 039334 7F004804 0FC00767 */ jal domakedefaultobj -/* 039338 7F004808 02603025 */ move $a2, $s3 -/* 03933C 7F00480C 100000BB */ b other_obj_expand -/* 039340 7F004810 00000000 */ nop -type2D_tank: -/* 039344 7F004814 13C000B9 */ beqz $fp, other_obj_expand -/* 039348 7F004818 00000000 */ nop -/* 03934C 7F00481C 8E4D000C */ lw $t5, 0xc($s2) -/* 039350 7F004820 24040020 */ li $a0, 32 -/* 039354 7F004824 01B46024 */ and $t4, $t5, $s4 -/* 039358 7F004828 158000B4 */ bnez $t4, other_obj_expand -/* 03935C 7F00482C 00000000 */ nop -/* 039360 7F004830 0FC015C4 */ jal weaponLoadProjectileModels -/* 039364 7F004834 E7B400E8 */ swc1 $f20, 0xe8($sp) -/* 039368 7F004838 02A02025 */ move $a0, $s5 -/* 03936C 7F00483C 02402825 */ move $a1, $s2 -/* 039370 7F004840 0FC00767 */ jal domakedefaultobj -/* 039374 7F004844 02603025 */ move $a2, $s3 -/* 039378 7F004848 E65400C8 */ swc1 $f20, 0xc8($s2) -/* 03937C 7F00484C E65400CC */ swc1 $f20, 0xcc($s2) -/* 039380 7F004850 C64C0038 */ lwc1 $f12, 0x38($s2) -/* 039384 7F004854 0FC16A8C */ jal atan2f -/* 039388 7F004858 C64E0040 */ lwc1 $f14, 0x40($s2) -/* 03938C 7F00485C 3C018005 */ lui $at, %hi(D_8004F024) -/* 039390 7F004860 C426F024 */ lwc1 $f6, %lo(D_8004F024)($at) -/* 039394 7F004864 8E420010 */ lw $v0, 0x10($s2) -/* 039398 7F004868 46003401 */ sub.s $f16, $f6, $f0 -/* 03939C 7F00486C 10400006 */ beqz $v0, .L7F004888 -/* 0393A0 7F004870 E65000DC */ swc1 $f16, 0xdc($s2) -/* 0393A4 7F004874 8C440014 */ lw $a0, 0x14($v0) -/* 0393A8 7F004878 8C450008 */ lw $a1, 8($v0) -/* 0393AC 7F00487C 0FC2CA5C */ jal stanGetPositionYValue -/* 0393B0 7F004880 8C460010 */ lw $a2, 0x10($v0) -/* 0393B4 7F004884 E7A000E8 */ swc1 $f0, 0xe8($sp) -.L7F004888: -/* 0393B8 7F004888 C7A200E8 */ lwc1 $f2, 0xe8($sp) -/* 0393BC 7F00488C 3C018005 */ lui $at, %hi(D_8004F028) -/* 0393C0 7F004890 E64200D4 */ swc1 $f2, 0xd4($s2) -/* 0393C4 7F004894 C424F028 */ lwc1 $f4, %lo(D_8004F028)($at) -/* 0393C8 7F004898 46041203 */ div.s $f8, $f2, $f4 -/* 0393CC 7F00489C 10000097 */ b other_obj_expand -/* 0393D0 7F0048A0 E64800D0 */ swc1 $f8, 0xd0($s2) -type27_wheeled_vehicle: -/* 0393D4 7F0048A4 13C00095 */ beqz $fp, other_obj_expand -/* 0393D8 7F0048A8 00000000 */ nop -/* 0393DC 7F0048AC 8E4F000C */ lw $t7, 0xc($s2) -/* 0393E0 7F0048B0 02A02025 */ move $a0, $s5 -/* 0393E4 7F0048B4 02402825 */ move $a1, $s2 -/* 0393E8 7F0048B8 01F47024 */ and $t6, $t7, $s4 -/* 0393EC 7F0048BC 15C0008F */ bnez $t6, other_obj_expand -/* 0393F0 7F0048C0 00000000 */ nop -/* 0393F4 7F0048C4 0FC00767 */ jal domakedefaultobj -/* 0393F8 7F0048C8 02603025 */ move $a2, $s3 -/* 0393FC 7F0048CC 8E440014 */ lw $a0, 0x14($s2) -/* 039400 7F0048D0 5080000E */ beql $a0, $zero, .L7F00490C -/* 039404 7F0048D4 3C01BF80 */ lui $at, 0xbf80 -/* 039408 7F0048D8 8C980008 */ lw $t8, 8($a0) -/* 03940C 7F0048DC 8F080008 */ lw $t0, 8($t8) -/* 039410 7F0048E0 8D050014 */ lw $a1, 0x14($t0) -/* 039414 7F0048E4 50A00009 */ beql $a1, $zero, .L7F00490C -/* 039418 7F0048E8 3C01BF80 */ lui $at, 0xbf80 -/* 03941C 7F0048EC 0FC1B1E7 */ jal modelGetNodeRwData -/* 039420 7F0048F0 00000000 */ nop -/* 039424 7F0048F4 8E490008 */ lw $t1, 8($s2) -/* 039428 7F0048F8 3C011000 */ li $at, 0x10000000 # 0.000000 -/* 03942C 7F0048FC 0121C824 */ and $t9, $t1, $at -/* 039430 7F004900 2F2A0001 */ sltiu $t2, $t9, 1 -/* 039434 7F004904 AC4A0000 */ sw $t2, ($v0) -/* 039438 7F004908 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -.L7F00490C: -/* 03943C 7F00490C 44819000 */ mtc1 $at, $f18 -/* 039440 7F004910 E6540088 */ swc1 $f20, 0x88($s2) -/* 039444 7F004914 E654008C */ swc1 $f20, 0x8c($s2) -/* 039448 7F004918 E6540090 */ swc1 $f20, 0x90($s2) -/* 03944C 7F00491C E6540094 */ swc1 $f20, 0x94($s2) -/* 039450 7F004920 E654009C */ swc1 $f20, 0x9c($s2) -/* 039454 7F004924 E65400A0 */ swc1 $f20, 0xa0($s2) -/* 039458 7F004928 8E440080 */ lw $a0, 0x80($s2) -/* 03945C 7F00492C 0FC0D4E6 */ jal ailistFindById -/* 039460 7F004930 E6520098 */ swc1 $f18, 0x98($s2) -/* 039464 7F004934 240BFFFF */ li $t3, -1 -/* 039468 7F004938 AE420080 */ sw $v0, 0x80($s2) -/* 03946C 7F00493C A6400084 */ sh $zero, 0x84($s2) -/* 039470 7F004940 A64B0086 */ sh $t3, 0x86($s2) -/* 039474 7F004944 AE4000A4 */ sw $zero, 0xa4($s2) -/* 039478 7F004948 AE4000A8 */ sw $zero, 0xa8($s2) -/* 03947C 7F00494C 1000006B */ b other_obj_expand -/* 039480 7F004950 AE4000AC */ sw $zero, 0xac($s2) -type28_aircraft: -/* 039484 7F004954 13C00069 */ beqz $fp, other_obj_expand -/* 039488 7F004958 00000000 */ nop -/* 03948C 7F00495C 8E4D000C */ lw $t5, 0xc($s2) -/* 039490 7F004960 02A02025 */ move $a0, $s5 -/* 039494 7F004964 02402825 */ move $a1, $s2 -/* 039498 7F004968 01B46024 */ and $t4, $t5, $s4 -/* 03949C 7F00496C 15800063 */ bnez $t4, other_obj_expand -/* 0394A0 7F004970 00000000 */ nop -/* 0394A4 7F004974 0FC00767 */ jal domakedefaultobj -/* 0394A8 7F004978 02603025 */ move $a2, $s3 -/* 0394AC 7F00497C 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 0394B0 7F004980 44810000 */ mtc1 $at, $f0 -/* 0394B4 7F004984 E6540098 */ swc1 $f20, 0x98($s2) -/* 0394B8 7F004988 E654009C */ swc1 $f20, 0x9c($s2) -/* 0394BC 7F00498C E6540088 */ swc1 $f20, 0x88($s2) -/* 0394C0 7F004990 E654008C */ swc1 $f20, 0x8c($s2) -/* 0394C4 7F004994 E6540090 */ swc1 $f20, 0x90($s2) -/* 0394C8 7F004998 E65400A4 */ swc1 $f20, 0xa4($s2) -/* 0394CC 7F00499C 8E440080 */ lw $a0, 0x80($s2) -/* 0394D0 7F0049A0 E64000A0 */ swc1 $f0, 0xa0($s2) -/* 0394D4 7F0049A4 0FC0D4E6 */ jal ailistFindById -/* 0394D8 7F0049A8 E6400094 */ swc1 $f0, 0x94($s2) -/* 0394DC 7F0049AC 240FFFFF */ li $t7, -1 -/* 0394E0 7F0049B0 AE420080 */ sw $v0, 0x80($s2) -/* 0394E4 7F0049B4 A6400084 */ sh $zero, 0x84($s2) -/* 0394E8 7F0049B8 A64F0086 */ sh $t7, 0x86($s2) -/* 0394EC 7F0049BC AE4000A8 */ sw $zero, 0xa8($s2) -/* 0394F0 7F0049C0 AE4000AC */ sw $zero, 0xac($s2) -/* 0394F4 7F0049C4 1000004D */ b other_obj_expand -/* 0394F8 7F0049C8 AE4000B0 */ sw $zero, 0xb0($s2) -tag_expand: -/* 0394FC 7F0049CC 864E0006 */ lh $t6, 6($s2) -/* 039500 7F0049D0 02A02025 */ move $a0, $s5 -/* 039504 7F0049D4 0FC15BA8 */ jal setupCommandGetObject -/* 039508 7F0049D8 01D32821 */ addu $a1, $t6, $s3 -/* 03950C 7F0049DC 10400004 */ beqz $v0, .L7F0049F0 -/* 039510 7F0049E0 AE42000C */ sw $v0, 0xc($s2) -/* 039514 7F0049E4 8C580064 */ lw $t8, 0x64($v0) -/* 039518 7F0049E8 37080010 */ ori $t0, $t8, 0x10 -/* 03951C 7F0049EC AC480064 */ sw $t0, 0x64($v0) -.L7F0049F0: -/* 039520 7F0049F0 0FC013E2 */ jal set_parent_cur_tag_entry -/* 039524 7F0049F4 02402025 */ move $a0, $s2 -/* 039528 7F0049F8 10000040 */ b other_obj_expand -/* 03952C 7F0049FC 00000000 */ nop -type25_rename: -/* 039530 7F004A00 8E490004 */ lw $t1, 4($s2) -/* 039534 7F004A04 02A02025 */ move $a0, $s5 -/* 039538 7F004A08 0FC15BA8 */ jal setupCommandGetObject -/* 03953C 7F004A0C 01332821 */ addu $a1, $t1, $s3 -/* 039540 7F004A10 10400004 */ beqz $v0, .L7F004A24 -/* 039544 7F004A14 AE420024 */ sw $v0, 0x24($s2) -/* 039548 7F004A18 8C590064 */ lw $t9, 0x64($v0) -/* 03954C 7F004A1C 372A0400 */ ori $t2, $t9, 0x400 -/* 039550 7F004A20 AC4A0064 */ sw $t2, 0x64($v0) -.L7F004A24: -/* 039554 7F004A24 0FC23628 */ jal bondinvAddTextOverride -/* 039558 7F004A28 02402025 */ move $a0, $s2 -/* 03955C 7F004A2C 10000033 */ b other_obj_expand -/* 039560 7F004A30 00000000 */ nop -type23_solo_brief_text: -/* 039564 7F004A34 0FC013E8 */ jal setup_briefing_text_entry_parent -/* 039568 7F004A38 02402025 */ move $a0, $s2 -/* 03956C 7F004A3C 1000002F */ b other_obj_expand -/* 039570 7F004A40 00000000 */ nop -type2E_viewport_pos: -/* 039574 7F004A44 8E4B0004 */ lw $t3, 4($s2) -/* 039578 7F004A48 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 03957C 7F004A4C 44810000 */ mtc1 $at, $f0 -/* 039580 7F004A50 448B5000 */ mtc1 $t3, $f10 -/* 039584 7F004A54 8E4C000C */ lw $t4, 0xc($s2) -/* 039588 7F004A58 8E4D0008 */ lw $t5, 8($s2) -/* 03958C 7F004A5C 468051A0 */ cvt.s.w $f6, $f10 -/* 039590 7F004A60 448C5000 */ mtc1 $t4, $f10 -/* 039594 7F004A64 448D2000 */ mtc1 $t5, $f4 -/* 039598 7F004A68 8E4F0010 */ lw $t7, 0x10($s2) -/* 03959C 7F004A6C 8E4E0014 */ lw $t6, 0x14($s2) -/* 0395A0 7F004A70 46802220 */ cvt.s.w $f8, $f4 -/* 0395A4 7F004A74 448F2000 */ mtc1 $t7, $f4 -/* 0395A8 7F004A78 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0395AC 7F004A7C 46003403 */ div.s $f16, $f6, $f0 -/* 0395B0 7F004A80 468051A0 */ cvt.s.w $f6, $f10 -/* 0395B4 7F004A84 46004483 */ div.s $f18, $f8, $f0 -/* 0395B8 7F004A88 E6500004 */ swc1 $f16, 4($s2) -/* 0395BC 7F004A8C 46802220 */ cvt.s.w $f8, $f4 -/* 0395C0 7F004A90 44812000 */ mtc1 $at, $f4 -/* 0395C4 7F004A94 46003403 */ div.s $f16, $f6, $f0 -/* 0395C8 7F004A98 448E3000 */ mtc1 $t6, $f6 -/* 0395CC 7F004A9C E6520008 */ swc1 $f18, 8($s2) -/* 0395D0 7F004AA0 44819000 */ mtc1 $at, $f18 -/* 0395D4 7F004AA4 00000000 */ nop -/* 0395D8 7F004AA8 46124283 */ div.s $f10, $f8, $f18 -/* 0395DC 7F004AAC E650000C */ swc1 $f16, 0xc($s2) -/* 0395E0 7F004AB0 46803420 */ cvt.s.w $f16, $f6 -/* 0395E4 7F004AB4 46048203 */ div.s $f8, $f16, $f4 -/* 0395E8 7F004AB8 E64A0010 */ swc1 $f10, 0x10($s2) -/* 0395EC 7F004ABC 1000000F */ b other_obj_expand -/* 0395F0 7F004AC0 E6480014 */ swc1 $f8, 0x14($s2) -type17_objective_expand: -/* 0395F4 7F004AC4 0FC013EE */ jal add_ptr_to_objective -/* 0395F8 7F004AC8 02402025 */ move $a0, $s2 -/* 0395FC 7F004ACC 1000000B */ b other_obj_expand -/* 039600 7F004AD0 00000000 */ nop -type20_subobjective_expand: -/* 039604 7F004AD4 0FC013FD */ jal set_parent_cur_obj_enter_room -/* 039608 7F004AD8 02402025 */ move $a0, $s2 -/* 03960C 7F004ADC 10000007 */ b other_obj_expand -/* 039610 7F004AE0 00000000 */ nop -type21_subobjective_expand: -/* 039614 7F004AE4 0FC01403 */ jal set_parent_cur_obj_deposited_in_room -/* 039618 7F004AE8 02402025 */ move $a0, $s2 -/* 03961C 7F004AEC 10000003 */ b other_obj_expand -/* 039620 7F004AF0 00000000 */ nop -type1E_subobjective_expand: -/* 039624 7F004AF4 0FC01409 */ jal set_parent_cur_obj_photograph -/* 039628 7F004AF8 02402025 */ move $a0, $s2 -other_obj_expand: -/* 03962C 7F004AFC 0FC15A3D */ jal sizepropdef -/* 039630 7F004B00 02402025 */ move $a0, $s2 -/* 039634 7F004B04 0002C080 */ sll $t8, $v0, 2 -/* 039638 7F004B08 03129021 */ addu $s2, $t8, $s2 -/* 03963C 7F004B0C 92430003 */ lbu $v1, 3($s2) -/* 039640 7F004B10 24010030 */ li $at, 48 -/* 039644 7F004B14 26730001 */ addiu $s3, $s3, 1 -/* 039648 7F004B18 5461FE13 */ bnel $v1, $at, .L7F004368 -/* 03964C 7F004B1C 2468FFFF */ addiu $t0, $v1, -1 -/* 039650 7F004B20 3C128007 */ lui $s2, %hi(g_CurrentSetup+0x0c) -/* 039654 7F004B24 8E525D0C */ lw $s2, %lo(g_CurrentSetup+0x0c)($s2) -/* 039658 7F004B28 00009825 */ move $s3, $zero -/* 03965C 7F004B2C 92430003 */ lbu $v1, 3($s2) -.L7F004B30: -/* 039660 7F004B30 24010030 */ li $at, 48 -/* 039664 7F004B34 3C170008 */ lui $s7, 8 -/* 039668 7F004B38 106100CF */ beq $v1, $at, .L7F004E78 -/* 03966C 7F004B3C 24160008 */ li $s6, 8 -/* 039670 7F004B40 241E002B */ li $fp, 43 -/* 039674 7F004B44 24140001 */ li $s4, 1 -/* 039678 7F004B48 2468FFFD */ addiu $t0, $v1, -3 -.L7F004B4C: -/* 03967C 7F004B4C 2D01002D */ sltiu $at, $t0, 0x2d -/* 039680 7F004B50 102000A4 */ beqz $at, .L7F004DE4 -/* 039684 7F004B54 00084080 */ sll $t0, $t0, 2 -/* 039688 7F004B58 3C018005 */ lui $at, %hi(jpt_8004F02C) -/* 03968C 7F004B5C 00280821 */ addu $at, $at, $t0 -/* 039690 7F004B60 8C28F02C */ lw $t0, %lo(jpt_8004F02C)($at) -/* 039694 7F004B64 01000008 */ jr $t0 -/* 039698 7F004B68 00000000 */ nop -.L7F004B6C: -/* 03969C 7F004B6C 8E490010 */ lw $t1, 0x10($s2) -/* 0396A0 7F004B70 1120009C */ beqz $t1, .L7F004DE4 -/* 0396A4 7F004B74 00000000 */ nop -/* 0396A8 7F004B78 8E590008 */ lw $t9, 8($s2) -/* 0396AC 7F004B7C 332A8000 */ andi $t2, $t9, 0x8000 -/* 0396B0 7F004B80 11400098 */ beqz $t2, .L7F004DE4 -/* 0396B4 7F004B84 00000000 */ nop -/* 0396B8 7F004B88 86420006 */ lh $v0, 6($s2) -/* 0396BC 7F004B8C 02A02025 */ move $a0, $s5 -/* 0396C0 7F004B90 0FC15BA8 */ jal setupCommandGetObject -/* 0396C4 7F004B94 02622821 */ addu $a1, $s3, $v0 -/* 0396C8 7F004B98 10400092 */ beqz $v0, .L7F004DE4 -/* 0396CC 7F004B9C 00408025 */ move $s0, $v0 -/* 0396D0 7F004BA0 8C4B0010 */ lw $t3, 0x10($v0) -/* 0396D4 7F004BA4 1160008F */ beqz $t3, .L7F004DE4 -/* 0396D8 7F004BA8 00000000 */ nop -/* 0396DC 7F004BAC 8E4D0064 */ lw $t5, 0x64($s2) -/* 0396E0 7F004BB0 8E440014 */ lw $a0, 0x14($s2) -/* 0396E4 7F004BB4 01B76025 */ or $t4, $t5, $s7 -/* 0396E8 7F004BB8 AE4C0064 */ sw $t4, 0x64($s2) -/* 0396EC 7F004BBC 0FC1B39E */ jal modelSetScale -/* 0396F0 7F004BC0 8C850014 */ lw $a1, 0x14($a0) -/* 0396F4 7F004BC4 8E440010 */ lw $a0, 0x10($s2) -/* 0396F8 7F004BC8 0FC0E969 */ jal chrpropReparent -/* 0396FC 7F004BCC 8E050010 */ lw $a1, 0x10($s0) -/* 039700 7F004BD0 10000084 */ b .L7F004DE4 -/* 039704 7F004BD4 00000000 */ nop -.L7F004BD8: -/* 039708 7F004BD8 8E4F0004 */ lw $t7, 4($s2) -/* 03970C 7F004BDC 0FC15AA2 */ jal setupGetPtrToCommandByIndex -/* 039710 7F004BE0 01F32021 */ addu $a0, $t7, $s3 -/* 039714 7F004BE4 8E4E0008 */ lw $t6, 8($s2) -/* 039718 7F004BE8 00408025 */ move $s0, $v0 -/* 03971C 7F004BEC 0FC15AA2 */ jal setupGetPtrToCommandByIndex -/* 039720 7F004BF0 01D32021 */ addu $a0, $t6, $s3 -/* 039724 7F004BF4 1200007B */ beqz $s0, .L7F004DE4 -/* 039728 7F004BF8 00402825 */ move $a1, $v0 -/* 03972C 7F004BFC 10400079 */ beqz $v0, .L7F004DE4 -/* 039730 7F004C00 00000000 */ nop -/* 039734 7F004C04 92180003 */ lbu $t8, 3($s0) -/* 039738 7F004C08 16D80076 */ bne $s6, $t8, .L7F004DE4 -/* 03973C 7F004C0C 00000000 */ nop -/* 039740 7F004C10 90480003 */ lbu $t0, 3($v0) -/* 039744 7F004C14 16C80073 */ bne $s6, $t0, .L7F004DE4 -/* 039748 7F004C18 00000000 */ nop -/* 03974C 7F004C1C 0FC1475D */ jal propweaponSetDual -/* 039750 7F004C20 02002025 */ move $a0, $s0 -/* 039754 7F004C24 1000006F */ b .L7F004DE4 -/* 039758 7F004C28 00000000 */ nop -.L7F004C2C: -/* 03975C 7F004C2C 8E420004 */ lw $v0, 4($s2) -/* 039760 7F004C30 8E510008 */ lw $s1, 8($s2) -/* 039764 7F004C34 02A02025 */ move $a0, $s5 -/* 039768 7F004C38 0FC15BA8 */ jal setupCommandGetObject -/* 03976C 7F004C3C 02622821 */ addu $a1, $s3, $v0 -/* 039770 7F004C40 00408025 */ move $s0, $v0 -/* 039774 7F004C44 0FC15AA2 */ jal setupGetPtrToCommandByIndex -/* 039778 7F004C48 02712021 */ addu $a0, $s3, $s1 -/* 03977C 7F004C4C 12000065 */ beqz $s0, .L7F004DE4 -/* 039780 7F004C50 00000000 */ nop -/* 039784 7F004C54 8E030010 */ lw $v1, 0x10($s0) -/* 039788 7F004C58 10600062 */ beqz $v1, .L7F004DE4 -/* 03978C 7F004C5C 00000000 */ nop -/* 039790 7F004C60 10400060 */ beqz $v0, .L7F004DE4 -/* 039794 7F004C64 00000000 */ nop -/* 039798 7F004C68 90490003 */ lbu $t1, 3($v0) -/* 03979C 7F004C6C 1689005D */ bne $s4, $t1, .L7F004DE4 -/* 0397A0 7F004C70 00000000 */ nop -/* 0397A4 7F004C74 8C590010 */ lw $t9, 0x10($v0) -/* 0397A8 7F004C78 1320005A */ beqz $t9, .L7F004DE4 -/* 0397AC 7F004C7C 00000000 */ nop -/* 0397B0 7F004C80 AE430004 */ sw $v1, 4($s2) -/* 0397B4 7F004C84 8C4A0010 */ lw $t2, 0x10($v0) -/* 0397B8 7F004C88 02402025 */ move $a0, $s2 -/* 0397BC 7F004C8C 0FC00644 */ jal initSetLevelLoadPropSwitch -/* 0397C0 7F004C90 AE4A0008 */ sw $t2, 8($s2) -/* 0397C4 7F004C94 8E0B0064 */ lw $t3, 0x64($s0) -/* 0397C8 7F004C98 356D0001 */ ori $t5, $t3, 1 -/* 0397CC 7F004C9C 10000051 */ b .L7F004DE4 -/* 0397D0 7F004CA0 AE0D0064 */ sw $t5, 0x64($s0) -.L7F004CA4: -/* 0397D4 7F004CA4 8E420004 */ lw $v0, 4($s2) -/* 0397D8 7F004CA8 8E4C000C */ lw $t4, 0xc($s2) -/* 0397DC 7F004CAC 8E510008 */ lw $s1, 8($s2) -/* 0397E0 7F004CB0 02A02025 */ move $a0, $s5 -/* 0397E4 7F004CB4 02622821 */ addu $a1, $s3, $v0 -/* 0397E8 7F004CB8 0FC15BA8 */ jal setupCommandGetObject -/* 0397EC 7F004CBC AFAC0080 */ sw $t4, 0x80($sp) -/* 0397F0 7F004CC0 00408025 */ move $s0, $v0 -/* 0397F4 7F004CC4 02A02025 */ move $a0, $s5 -/* 0397F8 7F004CC8 0FC15BA8 */ jal setupCommandGetObject -/* 0397FC 7F004CCC 02712821 */ addu $a1, $s3, $s1 -/* 039800 7F004CD0 8FAF0080 */ lw $t7, 0x80($sp) -/* 039804 7F004CD4 00408825 */ move $s1, $v0 -/* 039808 7F004CD8 02A02025 */ move $a0, $s5 -/* 03980C 7F004CDC 0FC15BA8 */ jal setupCommandGetObject -/* 039810 7F004CE0 026F2821 */ addu $a1, $s3, $t7 -/* 039814 7F004CE4 1200003F */ beqz $s0, .L7F004DE4 -/* 039818 7F004CE8 00000000 */ nop -/* 03981C 7F004CEC 8E0E0010 */ lw $t6, 0x10($s0) -/* 039820 7F004CF0 11C0003C */ beqz $t6, .L7F004DE4 -/* 039824 7F004CF4 00000000 */ nop -/* 039828 7F004CF8 1220003A */ beqz $s1, .L7F004DE4 -/* 03982C 7F004CFC 00000000 */ nop -/* 039830 7F004D00 8E380010 */ lw $t8, 0x10($s1) -/* 039834 7F004D04 13000037 */ beqz $t8, .L7F004DE4 -/* 039838 7F004D08 00000000 */ nop -/* 03983C 7F004D0C 92280003 */ lbu $t0, 3($s1) -/* 039840 7F004D10 17C80034 */ bne $fp, $t0, .L7F004DE4 -/* 039844 7F004D14 00000000 */ nop -/* 039848 7F004D18 10400032 */ beqz $v0, .L7F004DE4 -/* 03984C 7F004D1C 00000000 */ nop -/* 039850 7F004D20 8C490010 */ lw $t1, 0x10($v0) -/* 039854 7F004D24 1120002F */ beqz $t1, .L7F004DE4 -/* 039858 7F004D28 00000000 */ nop -/* 03985C 7F004D2C 90590003 */ lbu $t9, 3($v0) -/* 039860 7F004D30 02402025 */ move $a0, $s2 -/* 039864 7F004D34 1699002B */ bne $s4, $t9, .L7F004DE4 -/* 039868 7F004D38 00000000 */ nop -/* 03986C 7F004D3C AE500004 */ sw $s0, 4($s2) -/* 039870 7F004D40 AE510008 */ sw $s1, 8($s2) -/* 039874 7F004D44 AE42000C */ sw $v0, 0xc($s2) -/* 039878 7F004D48 0FC00650 */ jal initSetLevelLoadPropSafeItem -/* 03987C 7F004D4C AFA20074 */ sw $v0, 0x74($sp) -/* 039880 7F004D50 8E0A000C */ lw $t2, 0xc($s0) -/* 039884 7F004D54 8FA30074 */ lw $v1, 0x74($sp) -/* 039888 7F004D58 354B0400 */ ori $t3, $t2, 0x400 -/* 03988C 7F004D5C AE0B000C */ sw $t3, 0xc($s0) -/* 039890 7F004D60 8C6D000C */ lw $t5, 0xc($v1) -/* 039894 7F004D64 35AC0400 */ ori $t4, $t5, 0x400 -/* 039898 7F004D68 1000001E */ b .L7F004DE4 -/* 03989C 7F004D6C AC6C000C */ sw $t4, 0xc($v1) -.L7F004D70: -/* 0398A0 7F004D70 8E420004 */ lw $v0, 4($s2) -/* 0398A4 7F004D74 8E510008 */ lw $s1, 8($s2) -/* 0398A8 7F004D78 02A02025 */ move $a0, $s5 -/* 0398AC 7F004D7C 0FC15BA8 */ jal setupCommandGetObject -/* 0398B0 7F004D80 02622821 */ addu $a1, $s3, $v0 -/* 0398B4 7F004D84 00408025 */ move $s0, $v0 -/* 0398B8 7F004D88 02A02025 */ move $a0, $s5 -/* 0398BC 7F004D8C 0FC15BA8 */ jal setupCommandGetObject -/* 0398C0 7F004D90 02712821 */ addu $a1, $s3, $s1 -/* 0398C4 7F004D94 12000013 */ beqz $s0, .L7F004DE4 -/* 0398C8 7F004D98 00000000 */ nop -/* 0398CC 7F004D9C 8E0F0010 */ lw $t7, 0x10($s0) -/* 0398D0 7F004DA0 11E00010 */ beqz $t7, .L7F004DE4 -/* 0398D4 7F004DA4 00000000 */ nop -/* 0398D8 7F004DA8 1040000E */ beqz $v0, .L7F004DE4 -/* 0398DC 7F004DAC 00000000 */ nop -/* 0398E0 7F004DB0 8C4E0010 */ lw $t6, 0x10($v0) -/* 0398E4 7F004DB4 11C0000B */ beqz $t6, .L7F004DE4 -/* 0398E8 7F004DB8 00000000 */ nop -/* 0398EC 7F004DBC 92180003 */ lbu $t8, 3($s0) -/* 0398F0 7F004DC0 02402025 */ move $a0, $s2 -/* 0398F4 7F004DC4 16980007 */ bne $s4, $t8, .L7F004DE4 -/* 0398F8 7F004DC8 00000000 */ nop -/* 0398FC 7F004DCC AE500004 */ sw $s0, 4($s2) -/* 039900 7F004DD0 0FC0064A */ jal initSetLevelLoadPropLockDoor -/* 039904 7F004DD4 AE420008 */ sw $v0, 8($s2) -/* 039908 7F004DD8 8E080064 */ lw $t0, 0x64($s0) -/* 03990C 7F004DDC 35092000 */ ori $t1, $t0, 0x2000 -/* 039910 7F004DE0 AE090064 */ sw $t1, 0x64($s0) -.L7F004DE4: -/* 039914 7F004DE4 0FC15A3D */ jal sizepropdef -/* 039918 7F004DE8 02402025 */ move $a0, $s2 -/* 03991C 7F004DEC 0002C880 */ sll $t9, $v0, 2 -/* 039920 7F004DF0 03329021 */ addu $s2, $t9, $s2 -/* 039924 7F004DF4 92430003 */ lbu $v1, 3($s2) -/* 039928 7F004DF8 24010030 */ li $at, 48 -/* 03992C 7F004DFC 26730001 */ addiu $s3, $s3, 1 -/* 039930 7F004E00 5461FF52 */ bnel $v1, $at, .L7F004B4C -/* 039934 7F004E04 2468FFFD */ addiu $t0, $v1, -3 -/* 039938 7F004E08 1000001B */ b .L7F004E78 -/* 03993C 7F004E0C 00000000 */ nop -.L7F004E10: -/* 039940 7F004E10 3C018007 */ lui $at, %hi(g_CurrentSetup+0) -/* 039944 7F004E14 AC205D00 */ sw $zero, %lo(g_CurrentSetup+0)($at) -/* 039948 7F004E18 3C018007 */ lui $at, %hi(g_CurrentSetup+4) -/* 03994C 7F004E1C AC205D04 */ sw $zero, %lo(g_CurrentSetup+4)($at) -/* 039950 7F004E20 3C018007 */ lui $at, %hi(g_CurrentSetup+8) -/* 039954 7F004E24 AC205D08 */ sw $zero, %lo(g_CurrentSetup+8)($at) -/* 039958 7F004E28 3C018007 */ lui $at, %hi(g_CurrentSetup+0x0c) -/* 03995C 7F004E2C AC205D0C */ sw $zero, %lo(g_CurrentSetup+0x0c)($at) -/* 039960 7F004E30 3C018007 */ lui $at, %hi(g_CurrentSetup+0x10) -/* 039964 7F004E34 AC205D10 */ sw $zero, %lo(g_CurrentSetup+0x10)($at) -/* 039968 7F004E38 3C018007 */ lui $at, %hi(g_CurrentSetup+0x14) -/* 03996C 7F004E3C AC205D14 */ sw $zero, %lo(g_CurrentSetup+0x14)($at) -/* 039970 7F004E40 3C018007 */ lui $at, %hi(g_CurrentSetup+0x18) -/* 039974 7F004E44 AC205D18 */ sw $zero, %lo(g_CurrentSetup+0x18)($at) -/* 039978 7F004E48 3C018007 */ lui $at, %hi(g_CurrentSetup+0x1C) -/* 03997C 7F004E4C AC205D1C */ sw $zero, %lo(g_CurrentSetup+0x1C)($at) -/* 039980 7F004E50 3C018007 */ lui $at, %hi(g_CurrentSetup+0x20) -/* 039984 7F004E54 AC205D20 */ sw $zero, %lo(g_CurrentSetup+0x20)($at) -/* 039988 7F004E58 3C018007 */ lui $at, %hi(g_CurrentSetup+0x24) -/* 03998C 7F004E5C AC205D24 */ sw $zero, %lo(g_CurrentSetup+0x24)($at) -/* 039990 7F004E60 0FC003AE */ jal alloc_init_GUARDdata_entries -/* 039994 7F004E64 00002025 */ move $a0, $zero -/* 039998 7F004E68 0FC01550 */ jal sub_GAME_7F005540 -/* 03999C 7F004E6C 00002025 */ move $a0, $zero -/* 0399A0 7F004E70 0FC01589 */ jal sub_GAME_7F005624 -/* 0399A4 7F004E74 00002025 */ move $a0, $zero -.L7F004E78: -/* 0399A8 7F004E78 0FC00417 */ jal alloc_false_GUARDdata_to_exec_global_action -/* 0399AC 7F004E7C 00000000 */ nop -/* 0399B0 7F004E80 8FBF0044 */ lw $ra, 0x44($sp) -/* 0399B4 7F004E84 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0399B8 7F004E88 8FB00020 */ lw $s0, 0x20($sp) -/* 0399BC 7F004E8C 8FB10024 */ lw $s1, 0x24($sp) -/* 0399C0 7F004E90 8FB20028 */ lw $s2, 0x28($sp) -/* 0399C4 7F004E94 8FB3002C */ lw $s3, 0x2c($sp) -/* 0399C8 7F004E98 8FB40030 */ lw $s4, 0x30($sp) -/* 0399CC 7F004E9C 8FB50034 */ lw $s5, 0x34($sp) -/* 0399D0 7F004EA0 8FB60038 */ lw $s6, 0x38($sp) -/* 0399D4 7F004EA4 8FB7003C */ lw $s7, 0x3c($sp) -/* 0399D8 7F004EA8 8FBE0040 */ lw $fp, 0x40($sp) -/* 0399DC 7F004EAC 03E00008 */ jr $ra -/* 0399E0 7F004EB0 27BD0280 */ addiu $sp, $sp, 0x280 -) -#endif - -#ifdef VERSION_JP - GLOBAL_ASM( -.late_rodata -glabel jpt_object_type_expansion -.word door_expand -.word door_scale_expand -.word obj_03_expand -.word key_expand -.word obj_03_expand -.word surv_camera_expand -.word obj_03_expand -.word item_expand -.word actor_expand -.word single_screen_display_expand -.word multi_screen_display_expand -.word rack_expand -.word autogun_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word hat_expand -.word actor_attr_expand -.word other_obj_expand -.word ammo_box_expand -.word body_armor_expand -.word tag_expand -.word type17_objective_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word type1E_subobjective_expand -.word other_obj_expand -.word type20_subobjective_expand -.word type21_subobjective_expand -.word other_obj_expand -.word type23_solo_brief_text -.word obj_03_expand -.word type25_rename -.word other_obj_expand -.word type27_wheeled_vehicle -.word type28_aircraft -.word obj_03_expand -.word obj_03_expand -.word obj_03_expand -.word other_obj_expand -.word type2D_tank -.word type2E_viewport_pos -.word type2F_tinted_glass - -glabel D_8004F024 -.word 0x40c90fdb -glabel D_8004F028 -.word 0x3e2e147c - -glabel jpt_8004F02C -.word .L7F004B7C -.word .L7F004B7C -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004B7C -.word .L7F004B7C -.word .L7F004DF4 -.word .L7F004B7C -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004BE8 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004C3C -.word .L7F004B7C -.word .L7F004B7C -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004B7C -.word .L7F004DF4 -.word .L7F004D80 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004B7C -.word .L7F004B7C -.word .L7F004B7C -.word .L7F004CB4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004B7C - - - .text - glabel proplvreset2 -/* 038760 7F003BF0 27BDFD80 */ addiu $sp, $sp, -0x280 -/* 038764 7F003BF4 AFB50034 */ sw $s5, 0x34($sp) -/* 038768 7F003BF8 0080A825 */ move $s5, $a0 -/* 03876C 7F003BFC AFBF0044 */ sw $ra, 0x44($sp) -/* 038770 7F003C00 3C058005 */ lui $a1, %hi(aNochr) # $a1, 0x8005 -/* 038774 7F003C04 AFBE0040 */ sw $fp, 0x40($sp) -/* 038778 7F003C08 AFB7003C */ sw $s7, 0x3c($sp) -/* 03877C 7F003C0C AFB60038 */ sw $s6, 0x38($sp) -/* 038780 7F003C10 AFB40030 */ sw $s4, 0x30($sp) -/* 038784 7F003C14 AFB3002C */ sw $s3, 0x2c($sp) -/* 038788 7F003C18 AFB20028 */ sw $s2, 0x28($sp) -/* 03878C 7F003C1C AFB10024 */ sw $s1, 0x24($sp) -/* 038790 7F003C20 AFB00020 */ sw $s0, 0x20($sp) -/* 038794 7F003C24 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 038798 7F003C28 24A5EDC0 */ addiu $a1, %lo(aNochr) # addiu $a1, $a1, -0x1240 -/* 03879C 7F003C2C 0C0029AC */ jal tokenFind -/* 0387A0 7F003C30 24040001 */ li $a0, 1 -/* 0387A4 7F003C34 2C460001 */ sltiu $a2, $v0, 1 -/* 0387A8 7F003C38 10C00005 */ beqz $a2, .L7F003C50 -/* 0387AC 7F003C3C 24040001 */ li $a0, 1 -/* 0387B0 7F003C40 3C058005 */ lui $a1, %hi(aNoprop) # $a1, 0x8005 -/* 0387B4 7F003C44 0C0029AC */ jal tokenFind -/* 0387B8 7F003C48 24A5EDC8 */ addiu $a1, %lo(aNoprop) # addiu $a1, $a1, -0x1238 -/* 0387BC 7F003C4C 2C460001 */ sltiu $a2, $v0, 1 -.L7F003C50: -/* 0387C0 7F003C50 3C058005 */ lui $a1, %hi(aNoobj) # $a1, 0x8005 -/* 0387C4 7F003C54 AFA60278 */ sw $a2, 0x278($sp) -/* 0387C8 7F003C58 24A5EDD0 */ addiu $a1, %lo(aNoobj) # addiu $a1, $a1, -0x1230 -/* 0387CC 7F003C5C 0C0029AC */ jal tokenFind -/* 0387D0 7F003C60 24040001 */ li $a0, 1 -/* 0387D4 7F003C64 2C430001 */ sltiu $v1, $v0, 1 -/* 0387D8 7F003C68 10600005 */ beqz $v1, .L7F003C80 -/* 0387DC 7F003C6C 24040001 */ li $a0, 1 -/* 0387E0 7F003C70 3C058005 */ lui $a1, %hi(aNoprop_0) # $a1, 0x8005 -/* 0387E4 7F003C74 0C0029AC */ jal tokenFind -/* 0387E8 7F003C78 24A5EDD8 */ addiu $a1, %lo(aNoprop_0) # addiu $a1, $a1, -0x1228 -/* 0387EC 7F003C7C 2C430001 */ sltiu $v1, $v0, 1 -.L7F003C80: -/* 0387F0 7F003C80 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0387F4 7F003C84 44812000 */ mtc1 $at, $f4 -/* 0387F8 7F003C88 0060F025 */ move $fp, $v1 -/* 0387FC 7F003C8C 3C018003 */ lui $at, %hi(g_DoorScale) # $at, 0x8003 -/* 038800 7F003C90 3C038004 */ lui $v1, %hi(PitemZ_entries+0xFF0) # $v1, 0x8004 -/* 038804 7F003C94 3C028004 */ lui $v0, %hi(PitemZ_entries) # $v0, 0x8004 -/* 038808 7F003C98 2442A258 */ addiu $v0, %lo(PitemZ_entries) # addiu $v0, $v0, -0x5da8 -/* 03880C 7F003C9C 2463B248 */ addiu $v1, %lo(PitemZ_entries+0xFF0) # addiu $v1, $v1, -0x4db8 -/* 038810 7F003CA0 E424A400 */ swc1 $f4, %lo(g_DoorScale)($at) -.L7F003CA4: -/* 038814 7F003CA4 8C4E0000 */ lw $t6, ($v0) -/* 038818 7F003CA8 2442000C */ addiu $v0, $v0, 0xc -/* 03881C 7F003CAC 0043082B */ sltu $at, $v0, $v1 -/* 038820 7F003CB0 1420FFFC */ bnez $at, .L7F003CA4 -/* 038824 7F003CB4 ADC00000 */ sw $zero, ($t6) -/* 038828 7F003CB8 2AA1003B */ slti $at, $s5, 0x3b -/* 03882C 7F003CBC 10200458 */ beqz $at, .L7F004E20 -/* 038830 7F003CC0 00157880 */ sll $t7, $s5, 2 -/* 038834 7F003CC4 3C188003 */ lui $t8, %hi(setup_text_pointers) # $t8, 0x8003 -/* 038838 7F003CC8 27187514 */ addiu $t8, %lo(setup_text_pointers) # addiu $t8, $t8, 0x7514 -/* 03883C 7F003CCC 01F88021 */ addu $s0, $t7, $t8 -/* 038840 7F003CD0 8E020000 */ lw $v0, ($s0) -/* 038844 7F003CD4 3C198005 */ lui $t9, %hi(only_read_by_stageload) # $t9, 0x8005 -/* 038848 7F003CD8 27B10174 */ addiu $s1, $sp, 0x174 -/* 03884C 7F003CDC 10400450 */ beqz $v0, .L7F004E20 -/* 038850 7F003CE0 2739EDE0 */ addiu $t9, %lo(only_read_by_stageload) # addiu $t9, $t9, -0x1220 -/* 038854 7F003CE4 02205025 */ move $t2, $s1 -/* 038858 7F003CE8 272900FC */ addiu $t1, $t9, 0xfc -.L7F003CEC: -/* 03885C 7F003CEC 8F210000 */ lw $at, ($t9) -/* 038860 7F003CF0 2739000C */ addiu $t9, $t9, 0xc -/* 038864 7F003CF4 254A000C */ addiu $t2, $t2, 0xc -/* 038868 7F003CF8 AD41FFF4 */ sw $at, -0xc($t2) -/* 03886C 7F003CFC 8F21FFF8 */ lw $at, -8($t9) -/* 038870 7F003D00 AD41FFF8 */ sw $at, -8($t2) -/* 038874 7F003D04 8F21FFFC */ lw $at, -4($t9) -/* 038878 7F003D08 1729FFF8 */ bne $t9, $t1, .L7F003CEC -/* 03887C 7F003D0C AD41FFFC */ sw $at, -4($t2) -/* 038880 7F003D10 8F210000 */ lw $at, ($t9) -/* 038884 7F003D14 0000A025 */ move $s4, $zero -/* 038888 7F003D18 00009825 */ move $s3, $zero -/* 03888C 7F003D1C AD410000 */ sw $at, ($t2) -/* 038890 7F003D20 904B0000 */ lbu $t3, ($v0) -/* 038894 7F003D24 A3A00175 */ sb $zero, 0x175($sp) -/* 038898 7F003D28 0FC26C01 */ jal getPlayerCount -/* 03889C 7F003D2C A3AB0174 */ sb $t3, 0x174($sp) -/* 0388A0 7F003D30 28410002 */ slti $at, $v0, 2 -/* 0388A4 7F003D34 14200004 */ bnez $at, .L7F003D48 -/* 0388A8 7F003D38 3C058005 */ lui $a1, %hi(aMp_) # $a1, 0x8005 -/* 0388AC 7F003D3C 24A5EEE0 */ addiu $a1, %lo(aMp_) # addiu $a1, $a1, -0x1120 -/* 0388B0 7F003D40 0C002A03 */ jal strcat -/* 0388B4 7F003D44 02202025 */ move $a0, $s1 -.L7F003D48: -/* 0388B8 7F003D48 8E050000 */ lw $a1, ($s0) -/* 0388BC 7F003D4C 02202025 */ move $a0, $s1 -/* 0388C0 7F003D50 0C002A03 */ jal strcat -/* 0388C4 7F003D54 24A50001 */ addiu $a1, $a1, 1 -/* 0388C8 7F003D58 02202025 */ move $a0, $s1 -/* 0388CC 7F003D5C 24050001 */ li $a1, 1 -/* 0388D0 7F003D60 24060100 */ li $a2, 256 -/* 0388D4 7F003D64 0FC2F62D */ jal _fileNameLoadToBank -/* 0388D8 7F003D68 24070004 */ li $a3, 4 -/* 0388DC 7F003D6C 3C038007 */ lui $v1, %hi(g_ptrStageSetupFile) # $v1, 0x8007 -/* 0388E0 7F003D70 24635D68 */ addiu $v1, %lo(g_ptrStageSetupFile) # addiu $v1, $v1, 0x5d68 -/* 0388E4 7F003D74 AC620000 */ sw $v0, ($v1) -/* 0388E8 7F003D78 00408825 */ move $s1, $v0 -/* 0388EC 7F003D7C 0FC308A4 */ jal langGetLangBankIndexFromStagenum -/* 0388F0 7F003D80 02A02025 */ move $a0, $s5 -/* 0388F4 7F003D84 0FC30A6E */ jal langLoadToAddr -/* 0388F8 7F003D88 00402025 */ move $a0, $v0 -/* 0388FC 7F003D8C 8E2C0000 */ lw $t4, ($s1) -/* 038900 7F003D90 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8007 -/* 038904 7F003D94 24E75D40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d40 -/* 038908 7F003D98 022C6821 */ addu $t5, $s1, $t4 -/* 03890C 7F003D9C ACED0000 */ sw $t5, ($a3) -/* 038910 7F003DA0 8E2E0004 */ lw $t6, 4($s1) -/* 038914 7F003DA4 022E7821 */ addu $t7, $s1, $t6 -/* 038918 7F003DA8 ACEF0004 */ sw $t7, 4($a3) -/* 03891C 7F003DAC 8E380008 */ lw $t8, 8($s1) -/* 038920 7F003DB0 02384021 */ addu $t0, $s1, $t8 -/* 038924 7F003DB4 ACE80008 */ sw $t0, 8($a3) -/* 038928 7F003DB8 8E29000C */ lw $t1, 0xc($s1) -/* 03892C 7F003DBC 0229C821 */ addu $t9, $s1, $t1 -/* 038930 7F003DC0 ACF9000C */ sw $t9, 0xc($a3) -/* 038934 7F003DC4 8E2A0010 */ lw $t2, 0x10($s1) -/* 038938 7F003DC8 022A5821 */ addu $t3, $s1, $t2 -/* 03893C 7F003DCC ACEB0010 */ sw $t3, 0x10($a3) -/* 038940 7F003DD0 8E2C0014 */ lw $t4, 0x14($s1) -/* 038944 7F003DD4 022C6821 */ addu $t5, $s1, $t4 -/* 038948 7F003DD8 ACED0014 */ sw $t5, 0x14($a3) -/* 03894C 7F003DDC 8E2E0018 */ lw $t6, 0x18($s1) -/* 038950 7F003DE0 022E7821 */ addu $t7, $s1, $t6 -/* 038954 7F003DE4 ACEF0018 */ sw $t7, 0x18($a3) -/* 038958 7F003DE8 8E38001C */ lw $t8, 0x1c($s1) -/* 03895C 7F003DEC 02384021 */ addu $t0, $s1, $t8 -/* 038960 7F003DF0 ACE8001C */ sw $t0, 0x1c($a3) -/* 038964 7F003DF4 8E220020 */ lw $v0, 0x20($s1) -/* 038968 7F003DF8 10400003 */ beqz $v0, .L7F003E08 -/* 03896C 7F003DFC 02224821 */ addu $t1, $s1, $v0 -/* 038970 7F003E00 10000002 */ b .L7F003E0C -/* 038974 7F003E04 ACE90020 */ sw $t1, 0x20($a3) -.L7F003E08: -/* 038978 7F003E08 ACE00020 */ sw $zero, 0x20($a3) -.L7F003E0C: -/* 03897C 7F003E0C 8E220024 */ lw $v0, 0x24($s1) -/* 038980 7F003E10 10400003 */ beqz $v0, .L7F003E20 -/* 038984 7F003E14 0222C821 */ addu $t9, $s1, $v0 -/* 038988 7F003E18 10000002 */ b .L7F003E24 -/* 03898C 7F003E1C ACF90024 */ sw $t9, 0x24($a3) -.L7F003E20: -/* 038990 7F003E20 ACE00024 */ sw $zero, 0x24($a3) -.L7F003E24: -/* 038994 7F003E24 8CE50000 */ lw $a1, ($a3) -/* 038998 7F003E28 50A00010 */ beql $a1, $zero, .L7F003E6C -/* 03899C 7F003E2C 8CE50004 */ lw $a1, 4($a3) -/* 0389A0 7F003E30 8CAA0000 */ lw $t2, ($a1) -/* 0389A4 7F003E34 00001825 */ move $v1, $zero -/* 0389A8 7F003E38 00A01025 */ move $v0, $a1 -/* 0389AC 7F003E3C 0542000B */ bltzl $t2, .L7F003E6C -/* 0389B0 7F003E40 8CE50004 */ lw $a1, 4($a3) -/* 0389B4 7F003E44 8C4B0004 */ lw $t3, 4($v0) -.L7F003E48: -/* 0389B8 7F003E48 24630010 */ addiu $v1, $v1, 0x10 -/* 0389BC 7F003E4C 01716021 */ addu $t4, $t3, $s1 -/* 0389C0 7F003E50 AC4C0004 */ sw $t4, 4($v0) -/* 0389C4 7F003E54 8CED0000 */ lw $t5, ($a3) -/* 0389C8 7F003E58 01A31021 */ addu $v0, $t5, $v1 -/* 0389CC 7F003E5C 8C4E0000 */ lw $t6, ($v0) -/* 0389D0 7F003E60 05C3FFF9 */ bgezl $t6, .L7F003E48 -/* 0389D4 7F003E64 8C4B0004 */ lw $t3, 4($v0) -/* 0389D8 7F003E68 8CE50004 */ lw $a1, 4($a3) -.L7F003E6C: -/* 0389DC 7F003E6C 50A00015 */ beql $a1, $zero, .L7F003EC4 -/* 0389E0 7F003E70 8CE60014 */ lw $a2, 0x14($a3) -/* 0389E4 7F003E74 8CAF0000 */ lw $t7, ($a1) -/* 0389E8 7F003E78 00001825 */ move $v1, $zero -/* 0389EC 7F003E7C 00A01025 */ move $v0, $a1 -/* 0389F0 7F003E80 51E00010 */ beql $t7, $zero, .L7F003EC4 -/* 0389F4 7F003E84 8CE60014 */ lw $a2, 0x14($a3) -/* 0389F8 7F003E88 8CA40000 */ lw $a0, ($a1) -/* 0389FC 7F003E8C 0091C021 */ addu $t8, $a0, $s1 -.L7F003E90: -/* 038A00 7F003E90 AC580000 */ sw $t8, ($v0) -/* 038A04 7F003E94 8CE80004 */ lw $t0, 4($a3) -/* 038A08 7F003E98 01031021 */ addu $v0, $t0, $v1 -/* 038A0C 7F003E9C 8C490004 */ lw $t1, 4($v0) -/* 038A10 7F003EA0 2463000C */ addiu $v1, $v1, 0xc -/* 038A14 7F003EA4 0131C821 */ addu $t9, $t1, $s1 -/* 038A18 7F003EA8 AC590004 */ sw $t9, 4($v0) -/* 038A1C 7F003EAC 8CEA0004 */ lw $t2, 4($a3) -/* 038A20 7F003EB0 01431021 */ addu $v0, $t2, $v1 -/* 038A24 7F003EB4 8C440000 */ lw $a0, ($v0) -/* 038A28 7F003EB8 5480FFF5 */ bnezl $a0, .L7F003E90 -/* 038A2C 7F003EBC 0091C021 */ addu $t8, $a0, $s1 -/* 038A30 7F003EC0 8CE60014 */ lw $a2, 0x14($a3) -.L7F003EC4: -/* 038A34 7F003EC4 50C00010 */ beql $a2, $zero, .L7F003F08 -/* 038A38 7F003EC8 8CE20010 */ lw $v0, 0x10($a3) -/* 038A3C 7F003ECC 8CCB0000 */ lw $t3, ($a2) -/* 038A40 7F003ED0 00002825 */ move $a1, $zero -/* 038A44 7F003ED4 00C01025 */ move $v0, $a2 -/* 038A48 7F003ED8 5160000B */ beql $t3, $zero, .L7F003F08 -/* 038A4C 7F003EDC 8CE20010 */ lw $v0, 0x10($a3) -/* 038A50 7F003EE0 8CC30000 */ lw $v1, ($a2) -/* 038A54 7F003EE4 00716021 */ addu $t4, $v1, $s1 -.L7F003EE8: -/* 038A58 7F003EE8 AC4C0000 */ sw $t4, ($v0) -/* 038A5C 7F003EEC 8CED0014 */ lw $t5, 0x14($a3) -/* 038A60 7F003EF0 24A50008 */ addiu $a1, $a1, 8 -/* 038A64 7F003EF4 01A51021 */ addu $v0, $t5, $a1 -/* 038A68 7F003EF8 8C430000 */ lw $v1, ($v0) -/* 038A6C 7F003EFC 5460FFFA */ bnezl $v1, .L7F003EE8 -/* 038A70 7F003F00 00716021 */ addu $t4, $v1, $s1 -/* 038A74 7F003F04 8CE20010 */ lw $v0, 0x10($a3) -.L7F003F08: -/* 038A78 7F003F08 50400020 */ beql $v0, $zero, .L7F003F8C -/* 038A7C 7F003F0C 8CEA0018 */ lw $t2, 0x18($a3) -/* 038A80 7F003F10 8C4E0000 */ lw $t6, ($v0) -/* 038A84 7F003F14 00002825 */ move $a1, $zero -/* 038A88 7F003F18 00403025 */ move $a2, $v0 -/* 038A8C 7F003F1C 51C0001B */ beql $t6, $zero, .L7F003F8C -/* 038A90 7F003F20 8CEA0018 */ lw $t2, 0x18($a3) -/* 038A94 7F003F24 8C440000 */ lw $a0, ($v0) -/* 038A98 7F003F28 00917821 */ addu $t7, $a0, $s1 -.L7F003F2C: -/* 038A9C 7F003F2C ACCF0000 */ sw $t7, ($a2) -/* 038AA0 7F003F30 8CF80010 */ lw $t8, 0x10($a3) -/* 038AA4 7F003F34 00001825 */ move $v1, $zero -/* 038AA8 7F003F38 03053021 */ addu $a2, $t8, $a1 -/* 038AAC 7F003F3C 8CC40000 */ lw $a0, ($a2) -/* 038AB0 7F003F40 8C880000 */ lw $t0, ($a0) -/* 038AB4 7F003F44 00801025 */ move $v0, $a0 -/* 038AB8 7F003F48 05020009 */ bltzl $t0, .L7F003F70 -/* 038ABC 7F003F4C A4C30006 */ sh $v1, 6($a2) -/* 038AC0 7F003F50 8C490004 */ lw $t1, 4($v0) -.L7F003F54: -/* 038AC4 7F003F54 24630001 */ addiu $v1, $v1, 1 -/* 038AC8 7F003F58 24420004 */ addiu $v0, $v0, 4 -/* 038ACC 7F003F5C 0523FFFD */ bgezl $t1, .L7F003F54 -/* 038AD0 7F003F60 8C490004 */ lw $t1, 4($v0) -/* 038AD4 7F003F64 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8007 -/* 038AD8 7F003F68 24E75D40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d40 -/* 038ADC 7F003F6C A4C30006 */ sh $v1, 6($a2) -.L7F003F70: -/* 038AE0 7F003F70 8CF90010 */ lw $t9, 0x10($a3) -/* 038AE4 7F003F74 24A50008 */ addiu $a1, $a1, 8 -/* 038AE8 7F003F78 03253021 */ addu $a2, $t9, $a1 -/* 038AEC 7F003F7C 8CC40000 */ lw $a0, ($a2) -/* 038AF0 7F003F80 5480FFEA */ bnezl $a0, .L7F003F2C -/* 038AF4 7F003F84 00917821 */ addu $t7, $a0, $s1 -/* 038AF8 7F003F88 8CEA0018 */ lw $t2, 0x18($a3) -.L7F003F8C: -/* 038AFC 7F003F8C 1140001D */ beqz $t2, .L7F004004 -/* 038B00 7F003F90 00000000 */ nop -/* 038B04 7F003F94 0FC2D4F8 */ jal get_room_data_float2 -/* 038B08 7F003F98 00000000 */ nop -/* 038B0C 7F003F9C 3C108007 */ lui $s0, %hi(g_CurrentSetup+0x18) # $s0, 0x8007 -/* 038B10 7F003FA0 8E105D58 */ lw $s0, %lo(g_CurrentSetup+0x18)($s0) -/* 038B14 7F003FA4 46000086 */ mov.s $f2, $f0 -/* 038B18 7F003FA8 8E020024 */ lw $v0, 0x24($s0) -/* 038B1C 7F003FAC 10400015 */ beqz $v0, .L7F004004 -/* 038B20 7F003FB0 00000000 */ nop -/* 038B24 7F003FB4 C6060000 */ lwc1 $f6, ($s0) -.L7F003FB8: -/* 038B28 7F003FB8 C60A0004 */ lwc1 $f10, 4($s0) -/* 038B2C 7F003FBC C6120008 */ lwc1 $f18, 8($s0) -/* 038B30 7F003FC0 46023202 */ mul.s $f8, $f6, $f2 -/* 038B34 7F003FC4 02222821 */ addu $a1, $s1, $v0 -/* 038B38 7F003FC8 AE050024 */ sw $a1, 0x24($s0) -/* 038B3C 7F003FCC 46025402 */ mul.s $f16, $f10, $f2 -/* 038B40 7F003FD0 02002025 */ move $a0, $s0 -/* 038B44 7F003FD4 26060028 */ addiu $a2, $s0, 0x28 -/* 038B48 7F003FD8 46029102 */ mul.s $f4, $f18, $f2 -/* 038B4C 7F003FDC E6080000 */ swc1 $f8, ($s0) -/* 038B50 7F003FE0 E6100004 */ swc1 $f16, 4($s0) -/* 038B54 7F003FE4 E6040008 */ swc1 $f4, 8($s0) -/* 038B58 7F003FE8 0FC019F8 */ jal init_pathtable_something -/* 038B5C 7F003FEC E7A2015C */ swc1 $f2, 0x15c($sp) -/* 038B60 7F003FF0 8E020050 */ lw $v0, 0x50($s0) -/* 038B64 7F003FF4 2610002C */ addiu $s0, $s0, 0x2c -/* 038B68 7F003FF8 C7A2015C */ lwc1 $f2, 0x15c($sp) -/* 038B6C 7F003FFC 5440FFEE */ bnezl $v0, .L7F003FB8 -/* 038B70 7F004000 C6060000 */ lwc1 $f6, ($s0) -.L7F004004: -/* 038B74 7F004004 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8007 -/* 038B78 7F004008 24E75D40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d40 -/* 038B7C 7F00400C 8CEC001C */ lw $t4, 0x1c($a3) -/* 038B80 7F004010 51800033 */ beql $t4, $zero, .L7F0040E0 -/* 038B84 7F004014 8CE50020 */ lw $a1, 0x20($a3) -/* 038B88 7F004018 0FC2D4F8 */ jal get_room_data_float2 -/* 038B8C 7F00401C 00000000 */ nop -/* 038B90 7F004020 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8007 -/* 038B94 7F004024 24E75D40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d40 -/* 038B98 7F004028 8CF0001C */ lw $s0, 0x1c($a3) -/* 038B9C 7F00402C 46000086 */ mov.s $f2, $f0 -/* 038BA0 7F004030 8E020024 */ lw $v0, 0x24($s0) -/* 038BA4 7F004034 5040002A */ beql $v0, $zero, .L7F0040E0 -/* 038BA8 7F004038 8CE50020 */ lw $a1, 0x20($a3) -/* 038BAC 7F00403C C6060000 */ lwc1 $f6, ($s0) -.L7F004040: -/* 038BB0 7F004040 C60A0004 */ lwc1 $f10, 4($s0) -/* 038BB4 7F004044 C6120008 */ lwc1 $f18, 8($s0) -/* 038BB8 7F004048 46023202 */ mul.s $f8, $f6, $f2 -/* 038BBC 7F00404C C606002C */ lwc1 $f6, 0x2c($s0) -/* 038BC0 7F004050 02222821 */ addu $a1, $s1, $v0 -/* 038BC4 7F004054 46025402 */ mul.s $f16, $f10, $f2 -/* 038BC8 7F004058 C60A0030 */ lwc1 $f10, 0x30($s0) -/* 038BCC 7F00405C AE050024 */ sw $a1, 0x24($s0) -/* 038BD0 7F004060 46029102 */ mul.s $f4, $f18, $f2 -/* 038BD4 7F004064 E6080000 */ swc1 $f8, ($s0) -/* 038BD8 7F004068 C6120034 */ lwc1 $f18, 0x34($s0) -/* 038BDC 7F00406C 46023202 */ mul.s $f8, $f6, $f2 -/* 038BE0 7F004070 E6100004 */ swc1 $f16, 4($s0) -/* 038BE4 7F004074 C6060038 */ lwc1 $f6, 0x38($s0) -/* 038BE8 7F004078 46025402 */ mul.s $f16, $f10, $f2 -/* 038BEC 7F00407C E6040008 */ swc1 $f4, 8($s0) -/* 038BF0 7F004080 C60A003C */ lwc1 $f10, 0x3c($s0) -/* 038BF4 7F004084 46029102 */ mul.s $f4, $f18, $f2 -/* 038BF8 7F004088 E608002C */ swc1 $f8, 0x2c($s0) -/* 038BFC 7F00408C C6120040 */ lwc1 $f18, 0x40($s0) -/* 038C00 7F004090 46023202 */ mul.s $f8, $f6, $f2 -/* 038C04 7F004094 E6100030 */ swc1 $f16, 0x30($s0) -/* 038C08 7F004098 02002025 */ move $a0, $s0 -/* 038C0C 7F00409C 46025402 */ mul.s $f16, $f10, $f2 -/* 038C10 7F0040A0 E6040034 */ swc1 $f4, 0x34($s0) -/* 038C14 7F0040A4 26060028 */ addiu $a2, $s0, 0x28 -/* 038C18 7F0040A8 46029102 */ mul.s $f4, $f18, $f2 -/* 038C1C 7F0040AC E6080038 */ swc1 $f8, 0x38($s0) -/* 038C20 7F0040B0 E610003C */ swc1 $f16, 0x3c($s0) -/* 038C24 7F0040B4 E6040040 */ swc1 $f4, 0x40($s0) -/* 038C28 7F0040B8 0FC019F8 */ jal init_pathtable_something -/* 038C2C 7F0040BC E7A20150 */ swc1 $f2, 0x150($sp) -/* 038C30 7F0040C0 8E020068 */ lw $v0, 0x68($s0) -/* 038C34 7F0040C4 26100044 */ addiu $s0, $s0, 0x44 -/* 038C38 7F0040C8 C7A20150 */ lwc1 $f2, 0x150($sp) -/* 038C3C 7F0040CC 5440FFDC */ bnezl $v0, .L7F004040 -/* 038C40 7F0040D0 C6060000 */ lwc1 $f6, ($s0) -/* 038C44 7F0040D4 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8007 -/* 038C48 7F0040D8 24E75D40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d40 -/* 038C4C 7F0040DC 8CE50020 */ lw $a1, 0x20($a3) -.L7F0040E0: -/* 038C50 7F0040E0 50A00010 */ beql $a1, $zero, .L7F004124 -/* 038C54 7F0040E4 8CE50024 */ lw $a1, 0x24($a3) -/* 038C58 7F0040E8 8CAE0000 */ lw $t6, ($a1) -/* 038C5C 7F0040EC 00001025 */ move $v0, $zero -/* 038C60 7F0040F0 00A01825 */ move $v1, $a1 -/* 038C64 7F0040F4 51C0000B */ beql $t6, $zero, .L7F004124 -/* 038C68 7F0040F8 8CE50024 */ lw $a1, 0x24($a3) -/* 038C6C 7F0040FC 8CA40000 */ lw $a0, ($a1) -/* 038C70 7F004100 00917821 */ addu $t7, $a0, $s1 -.L7F004104: -/* 038C74 7F004104 AC6F0000 */ sw $t7, ($v1) -/* 038C78 7F004108 8CF80020 */ lw $t8, 0x20($a3) -/* 038C7C 7F00410C 24420004 */ addiu $v0, $v0, 4 -/* 038C80 7F004110 03021821 */ addu $v1, $t8, $v0 -/* 038C84 7F004114 8C640000 */ lw $a0, ($v1) -/* 038C88 7F004118 5480FFFA */ bnezl $a0, .L7F004104 -/* 038C8C 7F00411C 00917821 */ addu $t7, $a0, $s1 -/* 038C90 7F004120 8CE50024 */ lw $a1, 0x24($a3) -.L7F004124: -/* 038C94 7F004124 50A0000F */ beql $a1, $zero, .L7F004164 -/* 038C98 7F004128 8FAA0278 */ lw $t2, 0x278($sp) -/* 038C9C 7F00412C 8CA80000 */ lw $t0, ($a1) -/* 038CA0 7F004130 00001025 */ move $v0, $zero -/* 038CA4 7F004134 00A01825 */ move $v1, $a1 -/* 038CA8 7F004138 11000009 */ beqz $t0, .L7F004160 -/* 038CAC 7F00413C 01002025 */ move $a0, $t0 -/* 038CB0 7F004140 00914821 */ addu $t1, $a0, $s1 -.L7F004144: -/* 038CB4 7F004144 AC690000 */ sw $t1, ($v1) -/* 038CB8 7F004148 8CF90024 */ lw $t9, 0x24($a3) -/* 038CBC 7F00414C 24420004 */ addiu $v0, $v0, 4 -/* 038CC0 7F004150 03221821 */ addu $v1, $t9, $v0 -/* 038CC4 7F004154 8C640000 */ lw $a0, ($v1) -/* 038CC8 7F004158 5480FFFA */ bnezl $a0, .L7F004144 -/* 038CCC 7F00415C 00914821 */ addu $t1, $a0, $s1 -.L7F004160: -/* 038CD0 7F004160 8FAA0278 */ lw $t2, 0x278($sp) -.L7F004164: -/* 038CD4 7F004164 11400012 */ beqz $t2, .L7F0041B0 -/* 038CD8 7F004168 00000000 */ nop -/* 038CDC 7F00416C 0FC006D4 */ jal load_proptype -/* 038CE0 7F004170 24040009 */ li $a0, 9 -/* 038CE4 7F004174 0FC003AE */ jal alloc_init_GUARDdata_entries -/* 038CE8 7F004178 00402025 */ move $a0, $v0 -/* 038CEC 7F00417C 0FC006D4 */ jal load_proptype -/* 038CF0 7F004180 24040009 */ li $a0, 9 -/* 038CF4 7F004184 0040A025 */ move $s4, $v0 -/* 038CF8 7F004188 0FC006D4 */ jal load_proptype -/* 038CFC 7F00418C 24040008 */ li $a0, 8 -/* 038D00 7F004190 00409825 */ move $s3, $v0 -/* 038D04 7F004194 0FC006D4 */ jal load_proptype -/* 038D08 7F004198 24040004 */ li $a0, 4 -/* 038D0C 7F00419C 02629821 */ addu $s3, $s3, $v0 -/* 038D10 7F0041A0 0FC006D4 */ jal load_proptype -/* 038D14 7F0041A4 24040011 */ li $a0, 17 -/* 038D18 7F0041A8 10000003 */ b .L7F0041B8 -/* 038D1C 7F0041AC 02629821 */ addu $s3, $s3, $v0 -.L7F0041B0: -/* 038D20 7F0041B0 0FC003AE */ jal alloc_init_GUARDdata_entries -/* 038D24 7F0041B4 00002025 */ move $a0, $zero -.L7F0041B8: -/* 038D28 7F0041B8 13C0003A */ beqz $fp, .L7F0042A4 -/* 038D2C 7F0041BC 00000000 */ nop -/* 038D30 7F0041C0 0FC006D4 */ jal load_proptype -/* 038D34 7F0041C4 24040001 */ li $a0, 1 -/* 038D38 7F0041C8 02629821 */ addu $s3, $s3, $v0 -/* 038D3C 7F0041CC 0FC006D4 */ jal load_proptype -/* 038D40 7F0041D0 24040006 */ li $a0, 6 -/* 038D44 7F0041D4 02629821 */ addu $s3, $s3, $v0 -/* 038D48 7F0041D8 0FC006D4 */ jal load_proptype -/* 038D4C 7F0041DC 2404000D */ li $a0, 13 -/* 038D50 7F0041E0 02629821 */ addu $s3, $s3, $v0 -/* 038D54 7F0041E4 0FC006D4 */ jal load_proptype -/* 038D58 7F0041E8 2404000C */ li $a0, 12 -/* 038D5C 7F0041EC 02629821 */ addu $s3, $s3, $v0 -/* 038D60 7F0041F0 0FC006D4 */ jal load_proptype -/* 038D64 7F0041F4 2404000A */ li $a0, 10 -/* 038D68 7F0041F8 02629821 */ addu $s3, $s3, $v0 -/* 038D6C 7F0041FC 0FC006D4 */ jal load_proptype -/* 038D70 7F004200 2404000B */ li $a0, 11 -/* 038D74 7F004204 02629821 */ addu $s3, $s3, $v0 -/* 038D78 7F004208 0FC006D4 */ jal load_proptype -/* 038D7C 7F00420C 24040015 */ li $a0, 21 -/* 038D80 7F004210 02629821 */ addu $s3, $s3, $v0 -/* 038D84 7F004214 0FC006D4 */ jal load_proptype -/* 038D88 7F004218 24040003 */ li $a0, 3 -/* 038D8C 7F00421C 02629821 */ addu $s3, $s3, $v0 -/* 038D90 7F004220 0FC006D4 */ jal load_proptype -/* 038D94 7F004224 2404002A */ li $a0, 42 -/* 038D98 7F004228 02629821 */ addu $s3, $s3, $v0 -/* 038D9C 7F00422C 0FC006D4 */ jal load_proptype -/* 038DA0 7F004230 2404002F */ li $a0, 47 -/* 038DA4 7F004234 02629821 */ addu $s3, $s3, $v0 -/* 038DA8 7F004238 0FC006D4 */ jal load_proptype -/* 038DAC 7F00423C 2404002B */ li $a0, 43 -/* 038DB0 7F004240 02629821 */ addu $s3, $s3, $v0 -/* 038DB4 7F004244 0FC006D4 */ jal load_proptype -/* 038DB8 7F004248 24040029 */ li $a0, 41 -/* 038DBC 7F00424C 02629821 */ addu $s3, $s3, $v0 -/* 038DC0 7F004250 0FC006D4 */ jal load_proptype -/* 038DC4 7F004254 24040024 */ li $a0, 36 -/* 038DC8 7F004258 02629821 */ addu $s3, $s3, $v0 -/* 038DCC 7F00425C 0FC006D4 */ jal load_proptype -/* 038DD0 7F004260 24040005 */ li $a0, 5 -/* 038DD4 7F004264 02629821 */ addu $s3, $s3, $v0 -/* 038DD8 7F004268 0FC006D4 */ jal load_proptype -/* 038DDC 7F00426C 24040007 */ li $a0, 7 -/* 038DE0 7F004270 02629821 */ addu $s3, $s3, $v0 -/* 038DE4 7F004274 0FC006D4 */ jal load_proptype -/* 038DE8 7F004278 24040014 */ li $a0, 20 -/* 038DEC 7F00427C 02629821 */ addu $s3, $s3, $v0 -/* 038DF0 7F004280 0FC006D4 */ jal load_proptype -/* 038DF4 7F004284 24040027 */ li $a0, 39 -/* 038DF8 7F004288 02629821 */ addu $s3, $s3, $v0 -/* 038DFC 7F00428C 0FC006D4 */ jal load_proptype -/* 038E00 7F004290 2404002D */ li $a0, 45 -/* 038E04 7F004294 02629821 */ addu $s3, $s3, $v0 -/* 038E08 7F004298 0FC006D4 */ jal load_proptype -/* 038E0C 7F00429C 24040028 */ li $a0, 40 -/* 038E10 7F0042A0 0282A021 */ addu $s4, $s4, $v0 -.L7F0042A4: -/* 038E14 7F0042A4 0FC01558 */ jal sub_GAME_7F005540 -/* 038E18 7F0042A8 02602025 */ move $a0, $s3 -/* 038E1C 7F0042AC 0FC01591 */ jal sub_GAME_7F005624 -/* 038E20 7F0042B0 02802025 */ move $a0, $s4 -/* 038E24 7F0042B4 0FC26C01 */ jal getPlayerCount -/* 038E28 7F0042B8 00008025 */ move $s0, $zero -/* 038E2C 7F0042BC 1840000C */ blez $v0, .L7F0042F0 -/* 038E30 7F0042C0 00000000 */ nop -.L7F0042C4: -/* 038E34 7F0042C4 0FC26F2B */ jal set_cur_player -/* 038E38 7F0042C8 02002025 */ move $a0, $s0 -/* 038E3C 7F0042CC 0FC006D4 */ jal load_proptype -/* 038E40 7F0042D0 2404000E */ li $a0, 14 -/* 038E44 7F0042D4 0FC01897 */ jal alloc_additional_item_slots -/* 038E48 7F0042D8 00402025 */ move $a0, $v0 -/* 038E4C 7F0042DC 0FC26C01 */ jal getPlayerCount -/* 038E50 7F0042E0 26100001 */ addiu $s0, $s0, 1 -/* 038E54 7F0042E4 0202082A */ slt $at, $s0, $v0 -/* 038E58 7F0042E8 1420FFF6 */ bnez $at, .L7F0042C4 -/* 038E5C 7F0042EC 00000000 */ nop -.L7F0042F0: -/* 038E60 7F0042F0 3C0B8007 */ lui $t3, %hi(g_CurrentSetup+0x0c) # $t3, 0x8007 -/* 038E64 7F0042F4 8D6B5D4C */ lw $t3, %lo(g_CurrentSetup+0x0c)($t3) -/* 038E68 7F0042F8 116002E3 */ beqz $t3, .L7F004E88 -/* 038E6C 7F0042FC 00000000 */ nop -/* 038E70 7F004300 0FC3021E */ jal lvlGetSelectedDifficulty -/* 038E74 7F004304 00000000 */ nop -/* 038E78 7F004308 244C0004 */ addiu $t4, $v0, 4 -/* 038E7C 7F00430C 240D0001 */ li $t5, 1 -/* 038E80 7F004310 0FC26C01 */ jal getPlayerCount -/* 038E84 7F004314 018DA004 */ sllv $s4, $t5, $t4 -/* 038E88 7F004318 28410002 */ slti $at, $v0, 2 -/* 038E8C 7F00431C 14200007 */ bnez $at, .L7F00433C -/* 038E90 7F004320 00000000 */ nop -/* 038E94 7F004324 0FC26C01 */ jal getPlayerCount -/* 038E98 7F004328 00000000 */ nop -/* 038E9C 7F00432C 244E0014 */ addiu $t6, $v0, 0x14 -/* 038EA0 7F004330 240F0001 */ li $t7, 1 -/* 038EA4 7F004334 01CFC004 */ sllv $t8, $t7, $t6 -/* 038EA8 7F004338 0298A025 */ or $s4, $s4, $t8 -.L7F00433C: -/* 038EAC 7F00433C 3C128007 */ lui $s2, %hi(g_CurrentSetup+0x0c) # $s2, 0x8007 -/* 038EB0 7F004340 8E525D4C */ lw $s2, %lo(g_CurrentSetup+0x0c)($s2) -/* 038EB4 7F004344 24010030 */ li $at, 48 -/* 038EB8 7F004348 00009825 */ move $s3, $zero -/* 038EBC 7F00434C 92430003 */ lbu $v1, 3($s2) -/* 038EC0 7F004350 24170034 */ li $s7, 52 -/* 038EC4 7F004354 506101FA */ beql $v1, $at, .L7F004B40 -/* 038EC8 7F004358 92430003 */ lbu $v1, 3($s2) -/* 038ECC 7F00435C 4480A000 */ mtc1 $zero, $f20 -/* 038ED0 7F004360 3416FFFF */ li $s6, 65535 -/* 038ED4 7F004364 2468FFFF */ addiu $t0, $v1, -1 -.L7F004368: -/* 038ED8 7F004368 2D01002F */ sltiu $at, $t0, 0x2f -/* 038EDC 7F00436C 102001E7 */ beqz $at, other_obj_expand -/* 038EE0 7F004370 00084080 */ sll $t0, $t0, 2 -/* 038EE4 7F004374 3C018005 */ lui $at, %hi(jpt_object_type_expansion) -/* 038EE8 7F004378 00280821 */ addu $at, $at, $t0 -/* 038EEC 7F00437C 8C28EF98 */ lw $t0, %lo(jpt_object_type_expansion)($at) -/* 038EF0 7F004380 01000008 */ jr $t0 -/* 038EF4 7F004384 00000000 */ nop -actor_attr_expand: -/* 038EF8 7F004388 9250000B */ lbu $s0, 0xb($s2) -/* 038EFC 7F00438C 0FC08CAC */ jal chrFindByLiteralId -/* 038F00 7F004390 8E440004 */ lw $a0, 4($s2) -/* 038F04 7F004394 104001DD */ beqz $v0, other_obj_expand -/* 038F08 7F004398 00000000 */ nop -/* 038F0C 7F00439C 8C490018 */ lw $t1, 0x18($v0) -/* 038F10 7F0043A0 112001DA */ beqz $t1, other_obj_expand -/* 038F14 7F0043A4 00000000 */ nop -/* 038F18 7F0043A8 8C59001C */ lw $t9, 0x1c($v0) -/* 038F1C 7F0043AC 132001D7 */ beqz $t9, other_obj_expand -/* 038F20 7F0043B0 00000000 */ nop -/* 038F24 7F0043B4 100001D5 */ b other_obj_expand -/* 038F28 7F0043B8 A0500010 */ sb $s0, 0x10($v0) -actor_expand: -/* 038F2C 7F0043BC 8FAA0278 */ lw $t2, 0x278($sp) -/* 038F30 7F0043C0 02A02025 */ move $a0, $s5 -/* 038F34 7F0043C4 02402825 */ move $a1, $s2 -/* 038F38 7F0043C8 114001D0 */ beqz $t2, other_obj_expand -/* 038F3C 7F0043CC 00000000 */ nop -/* 038F40 7F0043D0 0FC08E83 */ jal expand_09_characters -/* 038F44 7F0043D4 02603025 */ move $a2, $s3 -/* 038F48 7F0043D8 100001CC */ b other_obj_expand -/* 038F4C 7F0043DC 00000000 */ nop -door_expand: -/* 038F50 7F0043E0 13C001CA */ beqz $fp, other_obj_expand -/* 038F54 7F0043E4 00000000 */ nop -/* 038F58 7F0043E8 8E4B000C */ lw $t3, 0xc($s2) -/* 038F5C 7F0043EC 02A02025 */ move $a0, $s5 -/* 038F60 7F0043F0 02402825 */ move $a1, $s2 -/* 038F64 7F0043F4 01746824 */ and $t5, $t3, $s4 -/* 038F68 7F0043F8 15A001C4 */ bnez $t5, other_obj_expand -/* 038F6C 7F0043FC 00000000 */ nop -/* 038F70 7F004400 0FC00D20 */ jal setupDoor -/* 038F74 7F004404 02603025 */ move $a2, $s3 -/* 038F78 7F004408 100001C0 */ b other_obj_expand -/* 038F7C 7F00440C 00000000 */ nop -door_scale_expand: -/* 038F80 7F004410 8E4C0004 */ lw $t4, 4($s2) -/* 038F84 7F004414 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 038F88 7F004418 44815000 */ mtc1 $at, $f10 -/* 038F8C 7F00441C 448C3000 */ mtc1 $t4, $f6 -/* 038F90 7F004420 3C018003 */ lui $at, %hi(g_DoorScale) # $at, 0x8003 -/* 038F94 7F004424 46803220 */ cvt.s.w $f8, $f6 -/* 038F98 7F004428 460A4403 */ div.s $f16, $f8, $f10 -/* 038F9C 7F00442C 100001B7 */ b other_obj_expand -/* 038FA0 7F004430 E430A400 */ swc1 $f16, %lo(g_DoorScale)($at) -item_expand: -/* 038FA4 7F004434 8FAF0278 */ lw $t7, 0x278($sp) -/* 038FA8 7F004438 11E001B4 */ beqz $t7, other_obj_expand -/* 038FAC 7F00443C 00000000 */ nop -/* 038FB0 7F004440 8E4E000C */ lw $t6, 0xc($s2) -/* 038FB4 7F004444 02A02025 */ move $a0, $s5 -/* 038FB8 7F004448 02402825 */ move $a1, $s2 -/* 038FBC 7F00444C 01D4C024 */ and $t8, $t6, $s4 -/* 038FC0 7F004450 170001AE */ bnez $t8, other_obj_expand -/* 038FC4 7F004454 00000000 */ nop -/* 038FC8 7F004458 0FC009CE */ jal weaponAssignToHome -/* 038FCC 7F00445C 02603025 */ move $a2, $s3 -/* 038FD0 7F004460 100001AA */ b other_obj_expand -/* 038FD4 7F004464 00000000 */ nop -key_expand: -/* 038FD8 7F004468 8FA80278 */ lw $t0, 0x278($sp) -/* 038FDC 7F00446C 110001A7 */ beqz $t0, other_obj_expand -/* 038FE0 7F004470 00000000 */ nop -/* 038FE4 7F004474 8E49000C */ lw $t1, 0xc($s2) -/* 038FE8 7F004478 02A02025 */ move $a0, $s5 -/* 038FEC 7F00447C 02402825 */ move $a1, $s2 -/* 038FF0 7F004480 0134C824 */ and $t9, $t1, $s4 -/* 038FF4 7F004484 172001A1 */ bnez $t9, other_obj_expand -/* 038FF8 7F004488 00000000 */ nop -/* 038FFC 7F00448C 0FC00A87 */ jal setupKey -/* 039000 7F004490 02603025 */ move $a2, $s3 -/* 039004 7F004494 1000019D */ b other_obj_expand -/* 039008 7F004498 00000000 */ nop -hat_expand: -/* 03900C 7F00449C 8FAA0278 */ lw $t2, 0x278($sp) -/* 039010 7F0044A0 1140019A */ beqz $t2, other_obj_expand -/* 039014 7F0044A4 00000000 */ nop -/* 039018 7F0044A8 8E4B000C */ lw $t3, 0xc($s2) -/* 03901C 7F0044AC 02A02025 */ move $a0, $s5 -/* 039020 7F0044B0 02402825 */ move $a1, $s2 -/* 039024 7F0044B4 01746824 */ and $t5, $t3, $s4 -/* 039028 7F0044B8 15A00194 */ bnez $t5, other_obj_expand -/* 03902C 7F0044BC 00000000 */ nop -/* 039030 7F0044C0 0FC00A6A */ jal setupHat -/* 039034 7F0044C4 02603025 */ move $a2, $s3 -/* 039038 7F0044C8 10000190 */ b other_obj_expand -/* 03903C 7F0044CC 00000000 */ nop -surv_camera_expand: -/* 039040 7F0044D0 13C0018E */ beqz $fp, other_obj_expand -/* 039044 7F0044D4 00000000 */ nop -/* 039048 7F0044D8 8E4C000C */ lw $t4, 0xc($s2) -/* 03904C 7F0044DC 02A02025 */ move $a0, $s5 -/* 039050 7F0044E0 02402825 */ move $a1, $s2 -/* 039054 7F0044E4 01947824 */ and $t7, $t4, $s4 -/* 039058 7F0044E8 15E00188 */ bnez $t7, other_obj_expand -/* 03905C 7F0044EC 00000000 */ nop -/* 039060 7F0044F0 0FC00A8F */ jal setupCctv -/* 039064 7F0044F4 02603025 */ move $a2, $s3 -/* 039068 7F0044F8 10000184 */ b other_obj_expand -/* 03906C 7F0044FC 00000000 */ nop -autogun_expand: -/* 039070 7F004500 13C00182 */ beqz $fp, other_obj_expand -/* 039074 7F004504 00000000 */ nop -/* 039078 7F004508 8E4E000C */ lw $t6, 0xc($s2) -/* 03907C 7F00450C 02A02025 */ move $a0, $s5 -/* 039080 7F004510 02402825 */ move $a1, $s2 -/* 039084 7F004514 01D4C024 */ and $t8, $t6, $s4 -/* 039088 7F004518 1700017C */ bnez $t8, other_obj_expand -/* 03908C 7F00451C 00000000 */ nop -/* 039090 7F004520 0FC00B16 */ jal setupAutogun -/* 039094 7F004524 02603025 */ move $a2, $s3 -/* 039098 7F004528 10000178 */ b other_obj_expand -/* 03909C 7F00452C 00000000 */ nop -rack_expand: -/* 0390A0 7F004530 13C00176 */ beqz $fp, other_obj_expand -/* 0390A4 7F004534 00000000 */ nop -/* 0390A8 7F004538 8E48000C */ lw $t0, 0xc($s2) -/* 0390AC 7F00453C 02A02025 */ move $a0, $s5 -/* 0390B0 7F004540 02402825 */ move $a1, $s2 -/* 0390B4 7F004544 01144824 */ and $t1, $t0, $s4 -/* 0390B8 7F004548 15200170 */ bnez $t1, other_obj_expand -/* 0390BC 7F00454C 00000000 */ nop -/* 0390C0 7F004550 0FC00B87 */ jal setupHangingMonitors -/* 0390C4 7F004554 02603025 */ move $a2, $s3 -/* 0390C8 7F004558 1000016C */ b other_obj_expand -/* 0390CC 7F00455C 00000000 */ nop -single_screen_display_expand: -/* 0390D0 7F004560 13C0016A */ beqz $fp, other_obj_expand -/* 0390D4 7F004564 00000000 */ nop -/* 0390D8 7F004568 8E59000C */ lw $t9, 0xc($s2) -/* 0390DC 7F00456C 02A02025 */ move $a0, $s5 -/* 0390E0 7F004570 02402825 */ move $a1, $s2 -/* 0390E4 7F004574 03345024 */ and $t2, $t9, $s4 -/* 0390E8 7F004578 15400164 */ bnez $t2, other_obj_expand -/* 0390EC 7F00457C 00000000 */ nop -/* 0390F0 7F004580 0FC00B8F */ jal setupSingleMonitor -/* 0390F4 7F004584 02603025 */ move $a2, $s3 -/* 0390F8 7F004588 10000160 */ b other_obj_expand -/* 0390FC 7F00458C 00000000 */ nop -multi_screen_display_expand: -/* 039100 7F004590 13C0015E */ beqz $fp, other_obj_expand -/* 039104 7F004594 00000000 */ nop -/* 039108 7F004598 8E4B000C */ lw $t3, 0xc($s2) -/* 03910C 7F00459C 02A02025 */ move $a0, $s5 -/* 039110 7F0045A0 02402825 */ move $a1, $s2 -/* 039114 7F0045A4 01746824 */ and $t5, $t3, $s4 -/* 039118 7F0045A8 15A00158 */ bnez $t5, other_obj_expand -/* 03911C 7F0045AC 00000000 */ nop -/* 039120 7F0045B0 0FC00C34 */ jal setupMultiMonitor -/* 039124 7F0045B4 02603025 */ move $a2, $s3 -/* 039128 7F0045B8 10000154 */ b other_obj_expand -/* 03912C 7F0045BC 00000000 */ nop -body_armor_expand: -/* 039130 7F0045C0 13C00152 */ beqz $fp, other_obj_expand -/* 039134 7F0045C4 00000000 */ nop -/* 039138 7F0045C8 8E4C000C */ lw $t4, 0xc($s2) -/* 03913C 7F0045CC 3C0E8005 */ lui $t6, %hi(j_text_trigger) # $t6, 0x8005 -/* 039140 7F0045D0 01947824 */ and $t7, $t4, $s4 -/* 039144 7F0045D4 51E00005 */ beql $t7, $zero, .L7F0045EC -/* 039148 7F0045D8 8E580080 */ lw $t8, 0x80($s2) -/* 03914C 7F0045DC 8DCE8500 */ lw $t6, %lo(j_text_trigger)($t6) -/* 039150 7F0045E0 11C0014A */ beqz $t6, other_obj_expand -/* 039154 7F0045E4 00000000 */ nop -/* 039158 7F0045E8 8E580080 */ lw $t8, 0x80($s2) -.L7F0045EC: -/* 03915C 7F0045EC 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 039160 7F0045F0 44813000 */ mtc1 $at, $f6 -/* 039164 7F0045F4 44989000 */ mtc1 $t8, $f18 -/* 039168 7F0045F8 02A02025 */ move $a0, $s5 -/* 03916C 7F0045FC 02402825 */ move $a1, $s2 -/* 039170 7F004600 46809120 */ cvt.s.w $f4, $f18 -/* 039174 7F004604 02603025 */ move $a2, $s3 -/* 039178 7F004608 46062203 */ div.s $f8, $f4, $f6 -/* 03917C 7F00460C E6480080 */ swc1 $f8, 0x80($s2) -/* 039180 7F004610 C64A0080 */ lwc1 $f10, 0x80($s2) -/* 039184 7F004614 0FC00767 */ jal domakedefaultobj -/* 039188 7F004618 E64A0084 */ swc1 $f10, 0x84($s2) -/* 03918C 7F00461C 1000013B */ b other_obj_expand -/* 039190 7F004620 00000000 */ nop -type2F_tinted_glass: -/* 039194 7F004624 13C00139 */ beqz $fp, other_obj_expand -/* 039198 7F004628 00000000 */ nop -/* 03919C 7F00462C 8E48000C */ lw $t0, 0xc($s2) -/* 0391A0 7F004630 01144824 */ and $t1, $t0, $s4 -/* 0391A4 7F004634 15200135 */ bnez $t1, other_obj_expand -/* 0391A8 7F004638 00000000 */ nop -/* 0391AC 7F00463C 8E590008 */ lw $t9, 8($s2) -/* 0391B0 7F004640 001950C0 */ sll $t2, $t9, 3 -/* 0391B4 7F004644 05430039 */ bgezl $t2, .L7F00472C -/* 0391B8 7F004648 02A02025 */ move $a0, $s5 -/* 0391BC 7F00464C 86420006 */ lh $v0, 6($s2) -/* 0391C0 7F004650 3C0D8007 */ lui $t5, %hi(g_CurrentSetup+0x1C) # $t5, 0x8007 -/* 0391C4 7F004654 27A50118 */ addiu $a1, $sp, 0x118 -/* 0391C8 7F004658 28412710 */ slti $at, $v0, 0x2710 -/* 0391CC 7F00465C 14200032 */ bnez $at, .L7F004728 -/* 0391D0 7F004660 00025900 */ sll $t3, $v0, 4 -/* 0391D4 7F004664 8DAD5D5C */ lw $t5, %lo(g_CurrentSetup+0x1C)($t5) -/* 0391D8 7F004668 01625821 */ addu $t3, $t3, $v0 -/* 0391DC 7F00466C 000B5880 */ sll $t3, $t3, 2 -/* 0391E0 7F004670 3C01FFF5 */ lui $at, (0xFFF59FC0 >> 16) # lui $at, 0xfff5 -/* 0391E4 7F004674 34219FC0 */ ori $at, (0xFFF59FC0 & 0xFFFF) # ori $at, $at, 0x9fc0 -/* 0391E8 7F004678 016D8021 */ addu $s0, $t3, $t5 -/* 0391EC 7F00467C 02018021 */ addu $s0, $s0, $at -/* 0391F0 7F004680 0FC006F5 */ jal sub_GAME_7F001BD4 -/* 0391F4 7F004684 02002025 */ move $a0, $s0 -/* 0391F8 7F004688 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 0391FC 7F00468C 44810000 */ mtc1 $at, $f0 -/* 039200 7F004690 C610000C */ lwc1 $f16, 0xc($s0) -/* 039204 7F004694 C7A40118 */ lwc1 $f4, 0x118($sp) -/* 039208 7F004698 27A40118 */ addiu $a0, $sp, 0x118 -/* 03920C 7F00469C 46008482 */ mul.s $f18, $f16, $f0 -/* 039210 7F0046A0 C7B0011C */ lwc1 $f16, 0x11c($sp) -/* 039214 7F0046A4 27A5010C */ addiu $a1, $sp, 0x10c -/* 039218 7F0046A8 46049180 */ add.s $f6, $f18, $f4 -/* 03921C 7F0046AC E7A6010C */ swc1 $f6, 0x10c($sp) -/* 039220 7F0046B0 C6080010 */ lwc1 $f8, 0x10($s0) -/* 039224 7F0046B4 46004282 */ mul.s $f10, $f8, $f0 -/* 039228 7F0046B8 46105480 */ add.s $f18, $f10, $f16 -/* 03922C 7F0046BC C7AA0120 */ lwc1 $f10, 0x120($sp) -/* 039230 7F0046C0 E7B20110 */ swc1 $f18, 0x110($sp) -/* 039234 7F0046C4 C6060014 */ lwc1 $f6, 0x14($s0) -/* 039238 7F0046C8 46003202 */ mul.s $f8, $f6, $f0 -/* 03923C 7F0046CC 460A4480 */ add.s $f18, $f8, $f10 -/* 039240 7F0046D0 E7B20114 */ swc1 $f18, 0x114($sp) -/* 039244 7F0046D4 C606000C */ lwc1 $f6, 0xc($s0) -/* 039248 7F0046D8 46060202 */ mul.s $f8, $f0, $f6 -/* 03924C 7F0046DC 46082481 */ sub.s $f18, $f4, $f8 -/* 039250 7F0046E0 E7B20118 */ swc1 $f18, 0x118($sp) -/* 039254 7F0046E4 C6060010 */ lwc1 $f6, 0x10($s0) -/* 039258 7F0046E8 46060102 */ mul.s $f4, $f0, $f6 -/* 03925C 7F0046EC 46048201 */ sub.s $f8, $f16, $f4 -/* 039260 7F0046F0 E7A8011C */ swc1 $f8, 0x11c($sp) -/* 039264 7F0046F4 C6120014 */ lwc1 $f18, 0x14($s0) -/* 039268 7F0046F8 46120182 */ mul.s $f6, $f0, $f18 -/* 03926C 7F0046FC 46065401 */ sub.s $f16, $f10, $f6 -/* 039270 7F004700 0FC2EA6D */ jal sub_GAME_7F0B9E04 -/* 039274 7F004704 E7B00120 */ swc1 $f16, 0x120($sp) -/* 039278 7F004708 8E4C0090 */ lw $t4, 0x90($s2) -/* 03927C 7F00470C 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 039280 7F004710 44819000 */ mtc1 $at, $f18 -/* 039284 7F004714 448C2000 */ mtc1 $t4, $f4 -/* 039288 7F004718 AE42008C */ sw $v0, 0x8c($s2) -/* 03928C 7F00471C 46802220 */ cvt.s.w $f8, $f4 -/* 039290 7F004720 46124283 */ div.s $f10, $f8, $f18 -/* 039294 7F004724 E64A0090 */ swc1 $f10, 0x90($s2) -.L7F004728: -/* 039298 7F004728 02A02025 */ move $a0, $s5 -.L7F00472C: -/* 03929C 7F00472C 02402825 */ move $a1, $s2 -/* 0392A0 7F004730 0FC00767 */ jal domakedefaultobj -/* 0392A4 7F004734 02603025 */ move $a2, $s3 -/* 0392A8 7F004738 100000F4 */ b other_obj_expand -/* 0392AC 7F00473C 00000000 */ nop -obj_03_expand: -/* 0392B0 7F004740 13C000F2 */ beqz $fp, other_obj_expand -/* 0392B4 7F004744 00000000 */ nop -/* 0392B8 7F004748 8E4F000C */ lw $t7, 0xc($s2) -/* 0392BC 7F00474C 02A02025 */ move $a0, $s5 -/* 0392C0 7F004750 02402825 */ move $a1, $s2 -/* 0392C4 7F004754 01F47024 */ and $t6, $t7, $s4 -/* 0392C8 7F004758 15C000EC */ bnez $t6, other_obj_expand -/* 0392CC 7F00475C 00000000 */ nop -/* 0392D0 7F004760 0FC00767 */ jal domakedefaultobj -/* 0392D4 7F004764 02603025 */ move $a2, $s3 -/* 0392D8 7F004768 100000E8 */ b other_obj_expand -/* 0392DC 7F00476C 00000000 */ nop -ammo_box_expand: -/* 0392E0 7F004770 0FC26C01 */ jal getPlayerCount -/* 0392E4 7F004774 24100001 */ li $s0, 1 -/* 0392E8 7F004778 28410002 */ slti $at, $v0, 2 -/* 0392EC 7F00477C 1420000E */ bnez $at, .L7F0047B8 -/* 0392F0 7F004780 00000000 */ nop -/* 0392F4 7F004784 0FC31CBD */ jal getPtrMPWeaponSetData -/* 0392F8 7F004788 00000000 */ nop -/* 0392FC 7F00478C 3C188007 */ lui $t8, %hi(lastmpweaponnum) # $t8, 0x8007 -/* 039300 7F004790 8F189580 */ lw $t8, %lo(lastmpweaponnum)($t8) -/* 039304 7F004794 00184080 */ sll $t0, $t8, 2 -/* 039308 7F004798 01184023 */ subu $t0, $t0, $t8 -/* 03930C 7F00479C 000840C0 */ sll $t0, $t0, 3 -/* 039310 7F0047A0 00481821 */ addu $v1, $v0, $t0 -/* 039314 7F0047A4 8C64000C */ lw $a0, 0xc($v1) -/* 039318 7F0047A8 8C700010 */ lw $s0, 0x10($v1) -/* 03931C 7F0047AC 00044880 */ sll $t1, $a0, 2 -/* 039320 7F0047B0 0249C821 */ addu $t9, $s2, $t1 -/* 039324 7F0047B4 A730007E */ sh $s0, 0x7e($t9) -.L7F0047B8: -/* 039328 7F0047B8 1A0000D4 */ blez $s0, other_obj_expand -/* 03932C 7F0047BC 00000000 */ nop -/* 039330 7F0047C0 13C000D2 */ beqz $fp, other_obj_expand -/* 039334 7F0047C4 00000000 */ nop -/* 039338 7F0047C8 8E4A000C */ lw $t2, 0xc($s2) -/* 03933C 7F0047CC 00008825 */ move $s1, $zero -/* 039340 7F0047D0 02408025 */ move $s0, $s2 -/* 039344 7F0047D4 01545824 */ and $t3, $t2, $s4 -/* 039348 7F0047D8 156000CC */ bnez $t3, other_obj_expand -/* 03934C 7F0047DC 00000000 */ nop -.L7F0047E0: -/* 039350 7F0047E0 960D0082 */ lhu $t5, 0x82($s0) -/* 039354 7F0047E4 59A00007 */ blezl $t5, .L7F004804 -/* 039358 7F0047E8 26310004 */ addiu $s1, $s1, 4 -/* 03935C 7F0047EC 96040080 */ lhu $a0, 0x80($s0) -/* 039360 7F0047F0 52C40004 */ beql $s6, $a0, .L7F004804 -/* 039364 7F0047F4 26310004 */ addiu $s1, $s1, 4 -/* 039368 7F0047F8 0FC15C4E */ jal modelLoad -/* 03936C 7F0047FC 00000000 */ nop -/* 039370 7F004800 26310004 */ addiu $s1, $s1, 4 -.L7F004804: -/* 039374 7F004804 1637FFF6 */ bne $s1, $s7, .L7F0047E0 -/* 039378 7F004808 26100004 */ addiu $s0, $s0, 4 -/* 03937C 7F00480C 02A02025 */ move $a0, $s5 -/* 039380 7F004810 02402825 */ move $a1, $s2 -/* 039384 7F004814 0FC00767 */ jal domakedefaultobj -/* 039388 7F004818 02603025 */ move $a2, $s3 -/* 03938C 7F00481C 100000BB */ b other_obj_expand -/* 039390 7F004820 00000000 */ nop -type2D_tank: -/* 039394 7F004824 13C000B9 */ beqz $fp, other_obj_expand -/* 039398 7F004828 00000000 */ nop -/* 03939C 7F00482C 8E4C000C */ lw $t4, 0xc($s2) -/* 0393A0 7F004830 24040020 */ li $a0, 32 -/* 0393A4 7F004834 01947824 */ and $t7, $t4, $s4 -/* 0393A8 7F004838 15E000B4 */ bnez $t7, other_obj_expand -/* 0393AC 7F00483C 00000000 */ nop -/* 0393B0 7F004840 0FC015CC */ jal weaponLoadProjectileModels -/* 0393B4 7F004844 E7B400E8 */ swc1 $f20, 0xe8($sp) -/* 0393B8 7F004848 02A02025 */ move $a0, $s5 -/* 0393BC 7F00484C 02402825 */ move $a1, $s2 -/* 0393C0 7F004850 0FC00767 */ jal domakedefaultobj -/* 0393C4 7F004854 02603025 */ move $a2, $s3 -/* 0393C8 7F004858 E65400C8 */ swc1 $f20, 0xc8($s2) -/* 0393CC 7F00485C E65400CC */ swc1 $f20, 0xcc($s2) -/* 0393D0 7F004860 C64C0038 */ lwc1 $f12, 0x38($s2) -/* 0393D4 7F004864 0FC16BD4 */ jal atan2f -/* 0393D8 7F004868 C64E0040 */ lwc1 $f14, 0x40($s2) -/* 0393DC 7F00486C 3C018005 */ lui $at, %hi(D_8004F024) # $at, 0x8005 -/* 0393E0 7F004870 C426F054 */ lwc1 $f6, %lo(D_8004F024)($at) -/* 0393E4 7F004874 8E420010 */ lw $v0, 0x10($s2) -/* 0393E8 7F004878 46003401 */ sub.s $f16, $f6, $f0 -/* 0393EC 7F00487C 10400006 */ beqz $v0, .L7F004898 -/* 0393F0 7F004880 E65000DC */ swc1 $f16, 0xdc($s2) -/* 0393F4 7F004884 8C440014 */ lw $a0, 0x14($v0) -/* 0393F8 7F004888 8C450008 */ lw $a1, 8($v0) -/* 0393FC 7F00488C 0FC2CD48 */ jal stanGetPositionYValue -/* 039400 7F004890 8C460010 */ lw $a2, 0x10($v0) -/* 039404 7F004894 E7A000E8 */ swc1 $f0, 0xe8($sp) -.L7F004898: -/* 039408 7F004898 C7A200E8 */ lwc1 $f2, 0xe8($sp) -/* 03940C 7F00489C 3C018005 */ lui $at, %hi(D_8004F028) # $at, 0x8005 -/* 039410 7F0048A0 E64200D4 */ swc1 $f2, 0xd4($s2) -/* 039414 7F0048A4 C424F058 */ lwc1 $f4, %lo(D_8004F028)($at) -/* 039418 7F0048A8 46041203 */ div.s $f8, $f2, $f4 -/* 03941C 7F0048AC 10000097 */ b other_obj_expand -/* 039420 7F0048B0 E64800D0 */ swc1 $f8, 0xd0($s2) -type27_wheeled_vehicle: -/* 039424 7F0048B4 13C00095 */ beqz $fp, other_obj_expand -/* 039428 7F0048B8 00000000 */ nop -/* 03942C 7F0048BC 8E4E000C */ lw $t6, 0xc($s2) -/* 039430 7F0048C0 02A02025 */ move $a0, $s5 -/* 039434 7F0048C4 02402825 */ move $a1, $s2 -/* 039438 7F0048C8 01D4C024 */ and $t8, $t6, $s4 -/* 03943C 7F0048CC 1700008F */ bnez $t8, other_obj_expand -/* 039440 7F0048D0 00000000 */ nop -/* 039444 7F0048D4 0FC00767 */ jal domakedefaultobj -/* 039448 7F0048D8 02603025 */ move $a2, $s3 -/* 03944C 7F0048DC 8E440014 */ lw $a0, 0x14($s2) -/* 039450 7F0048E0 5080000E */ beql $a0, $zero, .L7F00491C -/* 039454 7F0048E4 3C01BF80 */ lui $at, 0xbf80 -/* 039458 7F0048E8 8C880008 */ lw $t0, 8($a0) -/* 03945C 7F0048EC 8D090008 */ lw $t1, 8($t0) -/* 039460 7F0048F0 8D250014 */ lw $a1, 0x14($t1) -/* 039464 7F0048F4 50A00009 */ beql $a1, $zero, .L7F00491C -/* 039468 7F0048F8 3C01BF80 */ lui $at, 0xbf80 -/* 03946C 7F0048FC 0FC1B363 */ jal modelGetNodeRwData -/* 039470 7F004900 00000000 */ nop -/* 039474 7F004904 8E590008 */ lw $t9, 8($s2) -/* 039478 7F004908 3C011000 */ li $at, 0x10000000 # 0.000000 -/* 03947C 7F00490C 03215024 */ and $t2, $t9, $at -/* 039480 7F004910 2D4B0001 */ sltiu $t3, $t2, 1 -/* 039484 7F004914 AC4B0000 */ sw $t3, ($v0) -/* 039488 7F004918 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -.L7F00491C: -/* 03948C 7F00491C 44819000 */ mtc1 $at, $f18 -/* 039490 7F004920 E6540088 */ swc1 $f20, 0x88($s2) -/* 039494 7F004924 E654008C */ swc1 $f20, 0x8c($s2) -/* 039498 7F004928 E6540090 */ swc1 $f20, 0x90($s2) -/* 03949C 7F00492C E6540094 */ swc1 $f20, 0x94($s2) -/* 0394A0 7F004930 E654009C */ swc1 $f20, 0x9c($s2) -/* 0394A4 7F004934 E65400A0 */ swc1 $f20, 0xa0($s2) -/* 0394A8 7F004938 8E440080 */ lw $a0, 0x80($s2) -/* 0394AC 7F00493C 0FC0D5A6 */ jal ailistFindById -/* 0394B0 7F004940 E6520098 */ swc1 $f18, 0x98($s2) -/* 0394B4 7F004944 240DFFFF */ li $t5, -1 -/* 0394B8 7F004948 AE420080 */ sw $v0, 0x80($s2) -/* 0394BC 7F00494C A6400084 */ sh $zero, 0x84($s2) -/* 0394C0 7F004950 A64D0086 */ sh $t5, 0x86($s2) -/* 0394C4 7F004954 AE4000A4 */ sw $zero, 0xa4($s2) -/* 0394C8 7F004958 AE4000A8 */ sw $zero, 0xa8($s2) -/* 0394CC 7F00495C 1000006B */ b other_obj_expand -/* 0394D0 7F004960 AE4000AC */ sw $zero, 0xac($s2) -type28_aircraft: -/* 0394D4 7F004964 13C00069 */ beqz $fp, other_obj_expand -/* 0394D8 7F004968 00000000 */ nop -/* 0394DC 7F00496C 8E4C000C */ lw $t4, 0xc($s2) -/* 0394E0 7F004970 02A02025 */ move $a0, $s5 -/* 0394E4 7F004974 02402825 */ move $a1, $s2 -/* 0394E8 7F004978 01947824 */ and $t7, $t4, $s4 -/* 0394EC 7F00497C 15E00063 */ bnez $t7, other_obj_expand -/* 0394F0 7F004980 00000000 */ nop -/* 0394F4 7F004984 0FC00767 */ jal domakedefaultobj -/* 0394F8 7F004988 02603025 */ move $a2, $s3 -/* 0394FC 7F00498C 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 039500 7F004990 44810000 */ mtc1 $at, $f0 -/* 039504 7F004994 E6540098 */ swc1 $f20, 0x98($s2) -/* 039508 7F004998 E654009C */ swc1 $f20, 0x9c($s2) -/* 03950C 7F00499C E6540088 */ swc1 $f20, 0x88($s2) -/* 039510 7F0049A0 E654008C */ swc1 $f20, 0x8c($s2) -/* 039514 7F0049A4 E6540090 */ swc1 $f20, 0x90($s2) -/* 039518 7F0049A8 E65400A4 */ swc1 $f20, 0xa4($s2) -/* 03951C 7F0049AC 8E440080 */ lw $a0, 0x80($s2) -/* 039520 7F0049B0 E64000A0 */ swc1 $f0, 0xa0($s2) -/* 039524 7F0049B4 0FC0D5A6 */ jal ailistFindById -/* 039528 7F0049B8 E6400094 */ swc1 $f0, 0x94($s2) -/* 03952C 7F0049BC 240EFFFF */ li $t6, -1 -/* 039530 7F0049C0 AE420080 */ sw $v0, 0x80($s2) -/* 039534 7F0049C4 A6400084 */ sh $zero, 0x84($s2) -/* 039538 7F0049C8 A64E0086 */ sh $t6, 0x86($s2) -/* 03953C 7F0049CC AE4000A8 */ sw $zero, 0xa8($s2) -/* 039540 7F0049D0 AE4000AC */ sw $zero, 0xac($s2) -/* 039544 7F0049D4 1000004D */ b other_obj_expand -/* 039548 7F0049D8 AE4000B0 */ sw $zero, 0xb0($s2) -tag_expand: -/* 03954C 7F0049DC 86580006 */ lh $t8, 6($s2) -/* 039550 7F0049E0 02A02025 */ move $a0, $s5 -/* 039554 7F0049E4 0FC15CE8 */ jal setupCommandGetObject -/* 039558 7F0049E8 03132821 */ addu $a1, $t8, $s3 -/* 03955C 7F0049EC 10400004 */ beqz $v0, .L7F004A00 -/* 039560 7F0049F0 AE42000C */ sw $v0, 0xc($s2) -/* 039564 7F0049F4 8C480064 */ lw $t0, 0x64($v0) -/* 039568 7F0049F8 35090010 */ ori $t1, $t0, 0x10 -/* 03956C 7F0049FC AC490064 */ sw $t1, 0x64($v0) -.L7F004A00: -/* 039570 7F004A00 0FC013E8 */ jal set_parent_cur_tag_entry -/* 039574 7F004A04 02402025 */ move $a0, $s2 -/* 039578 7F004A08 10000040 */ b other_obj_expand -/* 03957C 7F004A0C 00000000 */ nop -type25_rename: -/* 039580 7F004A10 8E590004 */ lw $t9, 4($s2) -/* 039584 7F004A14 02A02025 */ move $a0, $s5 -/* 039588 7F004A18 0FC15CE8 */ jal setupCommandGetObject -/* 03958C 7F004A1C 03332821 */ addu $a1, $t9, $s3 -/* 039590 7F004A20 10400004 */ beqz $v0, .L7F004A34 -/* 039594 7F004A24 AE420024 */ sw $v0, 0x24($s2) -/* 039598 7F004A28 8C4A0064 */ lw $t2, 0x64($v0) -/* 03959C 7F004A2C 354B0400 */ ori $t3, $t2, 0x400 -/* 0395A0 7F004A30 AC4B0064 */ sw $t3, 0x64($v0) -.L7F004A34: -/* 0395A4 7F004A34 0FC238E2 */ jal bondinvAddTextOverride -/* 0395A8 7F004A38 02402025 */ move $a0, $s2 -/* 0395AC 7F004A3C 10000033 */ b other_obj_expand -/* 0395B0 7F004A40 00000000 */ nop -type23_solo_brief_text: -/* 0395B4 7F004A44 0FC013EE */ jal setup_briefing_text_entry_parent -/* 0395B8 7F004A48 02402025 */ move $a0, $s2 -/* 0395BC 7F004A4C 1000002F */ b other_obj_expand -/* 0395C0 7F004A50 00000000 */ nop -type2E_viewport_pos: -/* 0395C4 7F004A54 8E4D0004 */ lw $t5, 4($s2) -/* 0395C8 7F004A58 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 0395CC 7F004A5C 44810000 */ mtc1 $at, $f0 -/* 0395D0 7F004A60 448D5000 */ mtc1 $t5, $f10 -/* 0395D4 7F004A64 8E4F000C */ lw $t7, 0xc($s2) -/* 0395D8 7F004A68 8E4C0008 */ lw $t4, 8($s2) -/* 0395DC 7F004A6C 468051A0 */ cvt.s.w $f6, $f10 -/* 0395E0 7F004A70 448F5000 */ mtc1 $t7, $f10 -/* 0395E4 7F004A74 448C2000 */ mtc1 $t4, $f4 -/* 0395E8 7F004A78 8E4E0010 */ lw $t6, 0x10($s2) -/* 0395EC 7F004A7C 8E580014 */ lw $t8, 0x14($s2) -/* 0395F0 7F004A80 46802220 */ cvt.s.w $f8, $f4 -/* 0395F4 7F004A84 448E2000 */ mtc1 $t6, $f4 -/* 0395F8 7F004A88 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0395FC 7F004A8C 46003403 */ div.s $f16, $f6, $f0 -/* 039600 7F004A90 468051A0 */ cvt.s.w $f6, $f10 -/* 039604 7F004A94 46004483 */ div.s $f18, $f8, $f0 -/* 039608 7F004A98 E6500004 */ swc1 $f16, 4($s2) -/* 03960C 7F004A9C 46802220 */ cvt.s.w $f8, $f4 -/* 039610 7F004AA0 44812000 */ mtc1 $at, $f4 -/* 039614 7F004AA4 46003403 */ div.s $f16, $f6, $f0 -/* 039618 7F004AA8 44983000 */ mtc1 $t8, $f6 -/* 03961C 7F004AAC E6520008 */ swc1 $f18, 8($s2) -/* 039620 7F004AB0 44819000 */ mtc1 $at, $f18 -/* 039624 7F004AB4 00000000 */ nop -/* 039628 7F004AB8 46124283 */ div.s $f10, $f8, $f18 -/* 03962C 7F004ABC E650000C */ swc1 $f16, 0xc($s2) -/* 039630 7F004AC0 46803420 */ cvt.s.w $f16, $f6 -/* 039634 7F004AC4 46048203 */ div.s $f8, $f16, $f4 -/* 039638 7F004AC8 E64A0010 */ swc1 $f10, 0x10($s2) -/* 03963C 7F004ACC 1000000F */ b other_obj_expand -/* 039640 7F004AD0 E6480014 */ swc1 $f8, 0x14($s2) -type17_objective_expand: -/* 039644 7F004AD4 0FC013F4 */ jal add_ptr_to_objective -/* 039648 7F004AD8 02402025 */ move $a0, $s2 -/* 03964C 7F004ADC 1000000B */ b other_obj_expand -/* 039650 7F004AE0 00000000 */ nop -type20_subobjective_expand: -/* 039654 7F004AE4 0FC01403 */ jal set_parent_cur_obj_enter_room -/* 039658 7F004AE8 02402025 */ move $a0, $s2 -/* 03965C 7F004AEC 10000007 */ b other_obj_expand -/* 039660 7F004AF0 00000000 */ nop -type21_subobjective_expand: -/* 039664 7F004AF4 0FC01409 */ jal set_parent_cur_obj_deposited_in_room -/* 039668 7F004AF8 02402025 */ move $a0, $s2 -/* 03966C 7F004AFC 10000003 */ b other_obj_expand -/* 039670 7F004B00 00000000 */ nop -type1E_subobjective_expand: -/* 039674 7F004B04 0FC0140F */ jal set_parent_cur_obj_photograph -/* 039678 7F004B08 02402025 */ move $a0, $s2 -other_obj_expand: -/* 03967C 7F004B0C 0FC15B7D */ jal sizepropdef -/* 039680 7F004B10 02402025 */ move $a0, $s2 -/* 039684 7F004B14 00024080 */ sll $t0, $v0, 2 -/* 039688 7F004B18 01129021 */ addu $s2, $t0, $s2 -/* 03968C 7F004B1C 92430003 */ lbu $v1, 3($s2) -/* 039690 7F004B20 24010030 */ li $at, 48 -/* 039694 7F004B24 26730001 */ addiu $s3, $s3, 1 -/* 039698 7F004B28 5461FE0F */ bnel $v1, $at, .L7F004368 -/* 03969C 7F004B2C 2468FFFF */ addiu $t0, $v1, -1 -/* 0396A0 7F004B30 3C128007 */ lui $s2, %hi(g_CurrentSetup+0x0c) # $s2, 0x8007 -/* 0396A4 7F004B34 8E525D4C */ lw $s2, %lo(g_CurrentSetup+0x0c)($s2) -/* 0396A8 7F004B38 00009825 */ move $s3, $zero -/* 0396AC 7F004B3C 92430003 */ lbu $v1, 3($s2) -.L7F004B40: -/* 0396B0 7F004B40 24010030 */ li $at, 48 -/* 0396B4 7F004B44 3C170008 */ lui $s7, 8 -/* 0396B8 7F004B48 106100CF */ beq $v1, $at, .L7F004E88 -/* 0396BC 7F004B4C 24160008 */ li $s6, 8 -/* 0396C0 7F004B50 241E002B */ li $fp, 43 -/* 0396C4 7F004B54 24140001 */ li $s4, 1 -/* 0396C8 7F004B58 2469FFFD */ addiu $t1, $v1, -3 -.L7F004B5C: -/* 0396CC 7F004B5C 2D21002D */ sltiu $at, $t1, 0x2d -/* 0396D0 7F004B60 102000A4 */ beqz $at, .L7F004DF4 -/* 0396D4 7F004B64 00094880 */ sll $t1, $t1, 2 -/* 0396D8 7F004B68 3C018005 */ lui $at, %hi(jpt_8004F02C) -/* 0396DC 7F004B6C 00290821 */ addu $at, $at, $t1 -/* 0396E0 7F004B70 8C29F05C */ lw $t1, %lo(jpt_8004F02C)($at) -/* 0396E4 7F004B74 01200008 */ jr $t1 -/* 0396E8 7F004B78 00000000 */ nop -.L7F004B7C: -/* 0396EC 7F004B7C 8E590010 */ lw $t9, 0x10($s2) -/* 0396F0 7F004B80 1320009C */ beqz $t9, .L7F004DF4 -/* 0396F4 7F004B84 00000000 */ nop -/* 0396F8 7F004B88 8E4A0008 */ lw $t2, 8($s2) -/* 0396FC 7F004B8C 314B8000 */ andi $t3, $t2, 0x8000 -/* 039700 7F004B90 11600098 */ beqz $t3, .L7F004DF4 -/* 039704 7F004B94 00000000 */ nop -/* 039708 7F004B98 86420006 */ lh $v0, 6($s2) -/* 03970C 7F004B9C 02A02025 */ move $a0, $s5 -/* 039710 7F004BA0 0FC15CE8 */ jal setupCommandGetObject -/* 039714 7F004BA4 02622821 */ addu $a1, $s3, $v0 -/* 039718 7F004BA8 10400092 */ beqz $v0, .L7F004DF4 -/* 03971C 7F004BAC 00408025 */ move $s0, $v0 -/* 039720 7F004BB0 8C4D0010 */ lw $t5, 0x10($v0) -/* 039724 7F004BB4 11A0008F */ beqz $t5, .L7F004DF4 -/* 039728 7F004BB8 00000000 */ nop -/* 03972C 7F004BBC 8E4C0064 */ lw $t4, 0x64($s2) -/* 039730 7F004BC0 8E440014 */ lw $a0, 0x14($s2) -/* 039734 7F004BC4 01977825 */ or $t7, $t4, $s7 -/* 039738 7F004BC8 AE4F0064 */ sw $t7, 0x64($s2) -/* 03973C 7F004BCC 0FC1B51A */ jal modelSetScale -/* 039740 7F004BD0 8C850014 */ lw $a1, 0x14($a0) -/* 039744 7F004BD4 8E440010 */ lw $a0, 0x10($s2) -/* 039748 7F004BD8 0FC0EA29 */ jal chrpropReparent -/* 03974C 7F004BDC 8E050010 */ lw $a1, 0x10($s0) -/* 039750 7F004BE0 10000084 */ b .L7F004DF4 -/* 039754 7F004BE4 00000000 */ nop -.L7F004BE8: -/* 039758 7F004BE8 8E4E0004 */ lw $t6, 4($s2) -/* 03975C 7F004BEC 0FC15BE2 */ jal setupGetPtrToCommandByIndex -/* 039760 7F004BF0 01D32021 */ addu $a0, $t6, $s3 -/* 039764 7F004BF4 8E580008 */ lw $t8, 8($s2) -/* 039768 7F004BF8 00408025 */ move $s0, $v0 -/* 03976C 7F004BFC 0FC15BE2 */ jal setupGetPtrToCommandByIndex -/* 039770 7F004C00 03132021 */ addu $a0, $t8, $s3 -/* 039774 7F004C04 1200007B */ beqz $s0, .L7F004DF4 -/* 039778 7F004C08 00402825 */ move $a1, $v0 -/* 03977C 7F004C0C 10400079 */ beqz $v0, .L7F004DF4 -/* 039780 7F004C10 00000000 */ nop -/* 039784 7F004C14 92080003 */ lbu $t0, 3($s0) -/* 039788 7F004C18 16C80076 */ bne $s6, $t0, .L7F004DF4 -/* 03978C 7F004C1C 00000000 */ nop -/* 039790 7F004C20 90490003 */ lbu $t1, 3($v0) -/* 039794 7F004C24 16C90073 */ bne $s6, $t1, .L7F004DF4 -/* 039798 7F004C28 00000000 */ nop -/* 03979C 7F004C2C 0FC1489C */ jal propweaponSetDual -/* 0397A0 7F004C30 02002025 */ move $a0, $s0 -/* 0397A4 7F004C34 1000006F */ b .L7F004DF4 -/* 0397A8 7F004C38 00000000 */ nop -.L7F004C3C: -/* 0397AC 7F004C3C 8E420004 */ lw $v0, 4($s2) -/* 0397B0 7F004C40 8E510008 */ lw $s1, 8($s2) -/* 0397B4 7F004C44 02A02025 */ move $a0, $s5 -/* 0397B8 7F004C48 0FC15CE8 */ jal setupCommandGetObject -/* 0397BC 7F004C4C 02622821 */ addu $a1, $s3, $v0 -/* 0397C0 7F004C50 00408025 */ move $s0, $v0 -/* 0397C4 7F004C54 0FC15BE2 */ jal setupGetPtrToCommandByIndex -/* 0397C8 7F004C58 02712021 */ addu $a0, $s3, $s1 -/* 0397CC 7F004C5C 12000065 */ beqz $s0, .L7F004DF4 -/* 0397D0 7F004C60 00000000 */ nop -/* 0397D4 7F004C64 8E030010 */ lw $v1, 0x10($s0) -/* 0397D8 7F004C68 10600062 */ beqz $v1, .L7F004DF4 -/* 0397DC 7F004C6C 00000000 */ nop -/* 0397E0 7F004C70 10400060 */ beqz $v0, .L7F004DF4 -/* 0397E4 7F004C74 00000000 */ nop -/* 0397E8 7F004C78 90590003 */ lbu $t9, 3($v0) -/* 0397EC 7F004C7C 1699005D */ bne $s4, $t9, .L7F004DF4 -/* 0397F0 7F004C80 00000000 */ nop -/* 0397F4 7F004C84 8C4A0010 */ lw $t2, 0x10($v0) -/* 0397F8 7F004C88 1140005A */ beqz $t2, .L7F004DF4 -/* 0397FC 7F004C8C 00000000 */ nop -/* 039800 7F004C90 AE430004 */ sw $v1, 4($s2) -/* 039804 7F004C94 8C4B0010 */ lw $t3, 0x10($v0) -/* 039808 7F004C98 02402025 */ move $a0, $s2 -/* 03980C 7F004C9C 0FC00644 */ jal initSetLevelLoadPropSwitch -/* 039810 7F004CA0 AE4B0008 */ sw $t3, 8($s2) -/* 039814 7F004CA4 8E0D0064 */ lw $t5, 0x64($s0) -/* 039818 7F004CA8 35AC0001 */ ori $t4, $t5, 1 -/* 03981C 7F004CAC 10000051 */ b .L7F004DF4 -/* 039820 7F004CB0 AE0C0064 */ sw $t4, 0x64($s0) -.L7F004CB4: -/* 039824 7F004CB4 8E420004 */ lw $v0, 4($s2) -/* 039828 7F004CB8 8E4F000C */ lw $t7, 0xc($s2) -/* 03982C 7F004CBC 8E510008 */ lw $s1, 8($s2) -/* 039830 7F004CC0 02A02025 */ move $a0, $s5 -/* 039834 7F004CC4 02622821 */ addu $a1, $s3, $v0 -/* 039838 7F004CC8 0FC15CE8 */ jal setupCommandGetObject -/* 03983C 7F004CCC AFAF0080 */ sw $t7, 0x80($sp) -/* 039840 7F004CD0 00408025 */ move $s0, $v0 -/* 039844 7F004CD4 02A02025 */ move $a0, $s5 -/* 039848 7F004CD8 0FC15CE8 */ jal setupCommandGetObject -/* 03984C 7F004CDC 02712821 */ addu $a1, $s3, $s1 -/* 039850 7F004CE0 8FAE0080 */ lw $t6, 0x80($sp) -/* 039854 7F004CE4 00408825 */ move $s1, $v0 -/* 039858 7F004CE8 02A02025 */ move $a0, $s5 -/* 03985C 7F004CEC 0FC15CE8 */ jal setupCommandGetObject -/* 039860 7F004CF0 026E2821 */ addu $a1, $s3, $t6 -/* 039864 7F004CF4 1200003F */ beqz $s0, .L7F004DF4 -/* 039868 7F004CF8 00000000 */ nop -/* 03986C 7F004CFC 8E180010 */ lw $t8, 0x10($s0) -/* 039870 7F004D00 1300003C */ beqz $t8, .L7F004DF4 -/* 039874 7F004D04 00000000 */ nop -/* 039878 7F004D08 1220003A */ beqz $s1, .L7F004DF4 -/* 03987C 7F004D0C 00000000 */ nop -/* 039880 7F004D10 8E280010 */ lw $t0, 0x10($s1) -/* 039884 7F004D14 11000037 */ beqz $t0, .L7F004DF4 -/* 039888 7F004D18 00000000 */ nop -/* 03988C 7F004D1C 92290003 */ lbu $t1, 3($s1) -/* 039890 7F004D20 17C90034 */ bne $fp, $t1, .L7F004DF4 -/* 039894 7F004D24 00000000 */ nop -/* 039898 7F004D28 10400032 */ beqz $v0, .L7F004DF4 -/* 03989C 7F004D2C 00000000 */ nop -/* 0398A0 7F004D30 8C590010 */ lw $t9, 0x10($v0) -/* 0398A4 7F004D34 1320002F */ beqz $t9, .L7F004DF4 -/* 0398A8 7F004D38 00000000 */ nop -/* 0398AC 7F004D3C 904A0003 */ lbu $t2, 3($v0) -/* 0398B0 7F004D40 02402025 */ move $a0, $s2 -/* 0398B4 7F004D44 168A002B */ bne $s4, $t2, .L7F004DF4 -/* 0398B8 7F004D48 00000000 */ nop -/* 0398BC 7F004D4C AE500004 */ sw $s0, 4($s2) -/* 0398C0 7F004D50 AE510008 */ sw $s1, 8($s2) -/* 0398C4 7F004D54 AE42000C */ sw $v0, 0xc($s2) -/* 0398C8 7F004D58 0FC00650 */ jal initSetLevelLoadPropSafeItem -/* 0398CC 7F004D5C AFA20074 */ sw $v0, 0x74($sp) -/* 0398D0 7F004D60 8E0B000C */ lw $t3, 0xc($s0) -/* 0398D4 7F004D64 8FA30074 */ lw $v1, 0x74($sp) -/* 0398D8 7F004D68 356D0400 */ ori $t5, $t3, 0x400 -/* 0398DC 7F004D6C AE0D000C */ sw $t5, 0xc($s0) -/* 0398E0 7F004D70 8C6C000C */ lw $t4, 0xc($v1) -/* 0398E4 7F004D74 358F0400 */ ori $t7, $t4, 0x400 -/* 0398E8 7F004D78 1000001E */ b .L7F004DF4 -/* 0398EC 7F004D7C AC6F000C */ sw $t7, 0xc($v1) -.L7F004D80: -/* 0398F0 7F004D80 8E420004 */ lw $v0, 4($s2) -/* 0398F4 7F004D84 8E510008 */ lw $s1, 8($s2) -/* 0398F8 7F004D88 02A02025 */ move $a0, $s5 -/* 0398FC 7F004D8C 0FC15CE8 */ jal setupCommandGetObject -/* 039900 7F004D90 02622821 */ addu $a1, $s3, $v0 -/* 039904 7F004D94 00408025 */ move $s0, $v0 -/* 039908 7F004D98 02A02025 */ move $a0, $s5 -/* 03990C 7F004D9C 0FC15CE8 */ jal setupCommandGetObject -/* 039910 7F004DA0 02712821 */ addu $a1, $s3, $s1 -/* 039914 7F004DA4 12000013 */ beqz $s0, .L7F004DF4 -/* 039918 7F004DA8 00000000 */ nop -/* 03991C 7F004DAC 8E0E0010 */ lw $t6, 0x10($s0) -/* 039920 7F004DB0 11C00010 */ beqz $t6, .L7F004DF4 -/* 039924 7F004DB4 00000000 */ nop -/* 039928 7F004DB8 1040000E */ beqz $v0, .L7F004DF4 -/* 03992C 7F004DBC 00000000 */ nop -/* 039930 7F004DC0 8C580010 */ lw $t8, 0x10($v0) -/* 039934 7F004DC4 1300000B */ beqz $t8, .L7F004DF4 -/* 039938 7F004DC8 00000000 */ nop -/* 03993C 7F004DCC 92080003 */ lbu $t0, 3($s0) -/* 039940 7F004DD0 02402025 */ move $a0, $s2 -/* 039944 7F004DD4 16880007 */ bne $s4, $t0, .L7F004DF4 -/* 039948 7F004DD8 00000000 */ nop -/* 03994C 7F004DDC AE500004 */ sw $s0, 4($s2) -/* 039950 7F004DE0 0FC0064A */ jal initSetLevelLoadPropLockDoor -/* 039954 7F004DE4 AE420008 */ sw $v0, 8($s2) -/* 039958 7F004DE8 8E090064 */ lw $t1, 0x64($s0) -/* 03995C 7F004DEC 35392000 */ ori $t9, $t1, 0x2000 -/* 039960 7F004DF0 AE190064 */ sw $t9, 0x64($s0) -.L7F004DF4: -/* 039964 7F004DF4 0FC15B7D */ jal sizepropdef -/* 039968 7F004DF8 02402025 */ move $a0, $s2 -/* 03996C 7F004DFC 00025080 */ sll $t2, $v0, 2 -/* 039970 7F004E00 01529021 */ addu $s2, $t2, $s2 -/* 039974 7F004E04 92430003 */ lbu $v1, 3($s2) -/* 039978 7F004E08 24010030 */ li $at, 48 -/* 03997C 7F004E0C 26730001 */ addiu $s3, $s3, 1 -/* 039980 7F004E10 5461FF52 */ bnel $v1, $at, .L7F004B5C -/* 039984 7F004E14 2469FFFD */ addiu $t1, $v1, -3 -/* 039988 7F004E18 1000001B */ b .L7F004E88 -/* 03998C 7F004E1C 00000000 */ nop -.L7F004E20: -/* 039990 7F004E20 3C018007 */ lui $at, %hi(g_CurrentSetup+0) # $at, 0x8007 -/* 039994 7F004E24 AC205D40 */ sw $zero, %lo(g_CurrentSetup+0)($at) -/* 039998 7F004E28 3C018007 */ lui $at, %hi(g_CurrentSetup+4) # $at, 0x8007 -/* 03999C 7F004E2C AC205D44 */ sw $zero, %lo(g_CurrentSetup+4)($at) -/* 0399A0 7F004E30 3C018007 */ lui $at, %hi(g_CurrentSetup+8) # $at, 0x8007 -/* 0399A4 7F004E34 AC205D48 */ sw $zero, %lo(g_CurrentSetup+8)($at) -/* 0399A8 7F004E38 3C018007 */ lui $at, %hi(g_CurrentSetup+0x0c) # $at, 0x8007 -/* 0399AC 7F004E3C AC205D4C */ sw $zero, %lo(g_CurrentSetup+0x0c)($at) -/* 0399B0 7F004E40 3C018007 */ lui $at, %hi(g_CurrentSetup+0x10) # $at, 0x8007 -/* 0399B4 7F004E44 AC205D50 */ sw $zero, %lo(g_CurrentSetup+0x10)($at) -/* 0399B8 7F004E48 3C018007 */ lui $at, %hi(g_CurrentSetup+0x14) # $at, 0x8007 -/* 0399BC 7F004E4C AC205D54 */ sw $zero, %lo(g_CurrentSetup+0x14)($at) -/* 0399C0 7F004E50 3C018007 */ lui $at, %hi(g_CurrentSetup+0x18) # $at, 0x8007 -/* 0399C4 7F004E54 AC205D58 */ sw $zero, %lo(g_CurrentSetup+0x18)($at) -/* 0399C8 7F004E58 3C018007 */ lui $at, %hi(g_CurrentSetup+0x1C) # $at, 0x8007 -/* 0399CC 7F004E5C AC205D5C */ sw $zero, %lo(g_CurrentSetup+0x1C)($at) -/* 0399D0 7F004E60 3C018007 */ lui $at, %hi(g_CurrentSetup+0x20) # $at, 0x8007 -/* 0399D4 7F004E64 AC205D60 */ sw $zero, %lo(g_CurrentSetup+0x20)($at) -/* 0399D8 7F004E68 3C018007 */ lui $at, %hi(g_CurrentSetup+0x24) # $at, 0x8007 -/* 0399DC 7F004E6C AC205D64 */ sw $zero, %lo(g_CurrentSetup+0x24)($at) -/* 0399E0 7F004E70 0FC003AE */ jal alloc_init_GUARDdata_entries -/* 0399E4 7F004E74 00002025 */ move $a0, $zero -/* 0399E8 7F004E78 0FC01558 */ jal sub_GAME_7F005540 -/* 0399EC 7F004E7C 00002025 */ move $a0, $zero -/* 0399F0 7F004E80 0FC01591 */ jal sub_GAME_7F005624 -/* 0399F4 7F004E84 00002025 */ move $a0, $zero -.L7F004E88: -/* 0399F8 7F004E88 0FC00417 */ jal alloc_false_GUARDdata_to_exec_global_action -/* 0399FC 7F004E8C 00000000 */ nop -/* 039A00 7F004E90 8FBF0044 */ lw $ra, 0x44($sp) -/* 039A04 7F004E94 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 039A08 7F004E98 8FB00020 */ lw $s0, 0x20($sp) -/* 039A0C 7F004E9C 8FB10024 */ lw $s1, 0x24($sp) -/* 039A10 7F004EA0 8FB20028 */ lw $s2, 0x28($sp) -/* 039A14 7F004EA4 8FB3002C */ lw $s3, 0x2c($sp) -/* 039A18 7F004EA8 8FB40030 */ lw $s4, 0x30($sp) -/* 039A1C 7F004EAC 8FB50034 */ lw $s5, 0x34($sp) -/* 039A20 7F004EB0 8FB60038 */ lw $s6, 0x38($sp) -/* 039A24 7F004EB4 8FB7003C */ lw $s7, 0x3c($sp) -/* 039A28 7F004EB8 8FBE0040 */ lw $fp, 0x40($sp) -/* 039A2C 7F004EBC 03E00008 */ jr $ra -/* 039A30 7F004EC0 27BD0280 */ addiu $sp, $sp, 0x280 - ) -#endif - -#ifdef VERSION_EU - GLOBAL_ASM( -.late_rodata -glabel jpt_object_type_expansion -.word door_expand -.word door_scale_expand -.word obj_03_expand -.word key_expand -.word obj_03_expand -.word surv_camera_expand -.word obj_03_expand -.word item_expand -.word actor_expand -.word single_screen_display_expand -.word multi_screen_display_expand -.word rack_expand -.word autogun_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word hat_expand -.word actor_attr_expand -.word other_obj_expand -.word ammo_box_expand -.word .L7F00454C -.word tag_expand -.word type17_objective_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word other_obj_expand -.word type1E_subobjective_expand -.word other_obj_expand -.word type20_subobjective_expand -.word type21_subobjective_expand -.word other_obj_expand -.word type23_solo_brief_text -.word obj_03_expand -.word type25_rename -.word other_obj_expand -.word type27_wheeled_vehicle -.word type28_aircraft -.word obj_03_expand -.word obj_03_expand -.word obj_03_expand -.word other_obj_expand -.word type2D_tank -.word type2E_viewport_pos -.word type2F_tinted_glass - -glabel D_8004F024 -.word 0x40c90fdb -glabel D_8004F028 -.word 0x3e4d35a8 - -glabel jpt_8004F02C -.word .L7F004B7C -.word .L7F004B7C -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004B7C -.word .L7F004B7C -.word .L7F004DF4 -.word .L7F004B7C -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004BE8 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004C3C -.word .L7F004B7C -.word .L7F004B7C -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004B7C -.word .L7F004DF4 -.word .L7F004D80 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004B7C -.word .L7F004B7C -.word .L7F004B7C -.word .L7F004CB4 -.word .L7F004DF4 -.word .L7F004DF4 -.word .L7F004B7C - - - .text -glabel proplvreset2 -/* 03656C 7F003B7C 27BDFD80 */ addiu $sp, $sp, -0x280 -/* 036570 7F003B80 AFB50034 */ sw $s5, 0x34($sp) -/* 036574 7F003B84 0080A825 */ move $s5, $a0 -/* 036578 7F003B88 AFBF0044 */ sw $ra, 0x44($sp) -/* 03657C 7F003B8C 3C058004 */ lui $a1, %hi(aNochr) # $a1, 0x8004 -/* 036580 7F003B90 AFBE0040 */ sw $fp, 0x40($sp) -/* 036584 7F003B94 AFB7003C */ sw $s7, 0x3c($sp) -/* 036588 7F003B98 AFB60038 */ sw $s6, 0x38($sp) -/* 03658C 7F003B9C AFB40030 */ sw $s4, 0x30($sp) -/* 036590 7F003BA0 AFB3002C */ sw $s3, 0x2c($sp) -/* 036594 7F003BA4 AFB20028 */ sw $s2, 0x28($sp) -/* 036598 7F003BA8 AFB10024 */ sw $s1, 0x24($sp) -/* 03659C 7F003BAC AFB00020 */ sw $s0, 0x20($sp) -/* 0365A0 7F003BB0 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0365A4 7F003BB4 24A571D0 */ addiu $a1, %lo(aNochr) # addiu $a1, $a1, 0x71d0 -/* 0365A8 7F003BB8 0C0026C0 */ jal tokenFind -/* 0365AC 7F003BBC 24040001 */ li $a0, 1 -/* 0365B0 7F003BC0 2C460001 */ sltiu $a2, $v0, 1 -/* 0365B4 7F003BC4 10C00005 */ beqz $a2, .L7F003BDC -/* 0365B8 7F003BC8 24040001 */ li $a0, 1 -/* 0365BC 7F003BCC 3C058004 */ lui $a1, %hi(aNoprop) # $a1, 0x8004 -/* 0365C0 7F003BD0 0C0026C0 */ jal tokenFind -/* 0365C4 7F003BD4 24A571D8 */ addiu $a1, %lo(aNoprop) # addiu $a1, $a1, 0x71d8 -/* 0365C8 7F003BD8 2C460001 */ sltiu $a2, $v0, 1 -.L7F003BDC: -/* 0365CC 7F003BDC 3C058004 */ lui $a1, %hi(aNoobj) # $a1, 0x8004 -/* 0365D0 7F003BE0 AFA60278 */ sw $a2, 0x278($sp) -/* 0365D4 7F003BE4 24A571E0 */ addiu $a1, %lo(aNoobj) # addiu $a1, $a1, 0x71e0 -/* 0365D8 7F003BE8 0C0026C0 */ jal tokenFind -/* 0365DC 7F003BEC 24040001 */ li $a0, 1 -/* 0365E0 7F003BF0 2C430001 */ sltiu $v1, $v0, 1 -/* 0365E4 7F003BF4 10600005 */ beqz $v1, .L7F003C0C -/* 0365E8 7F003BF8 24040001 */ li $a0, 1 -/* 0365EC 7F003BFC 3C058004 */ lui $a1, %hi(aNoprop_0) # $a1, 0x8004 -/* 0365F0 7F003C00 0C0026C0 */ jal tokenFind -/* 0365F4 7F003C04 24A571E8 */ addiu $a1, %lo(aNoprop_0) # addiu $a1, $a1, 0x71e8 -/* 0365F8 7F003C08 2C430001 */ sltiu $v1, $v0, 1 -.L7F003C0C: -/* 0365FC 7F003C0C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 036600 7F003C10 44812000 */ mtc1 $at, $f4 -/* 036604 7F003C14 0060F025 */ move $fp, $v1 -/* 036608 7F003C18 3C018002 */ lui $at, %hi(g_DoorScale) # $at, 0x8002 -/* 03660C 7F003C1C 3C038003 */ lui $v1, %hi(PitemZ_entries+0xFF0) # $v1, 0x8003 -/* 036610 7F003C20 3C028003 */ lui $v0, %hi(PitemZ_entries) # $v0, 0x8003 -/* 036614 7F003C24 24424D88 */ addiu $v0, %lo(PitemZ_entries) # addiu $v0, $v0, 0x4d88 -/* 036618 7F003C28 24635D78 */ addiu $v1, %lo(PitemZ_entries+0xFF0) # addiu $v1, $v1, 0x5d78 -/* 03661C 7F003C2C E4245910 */ swc1 $f4, %lo(g_DoorScale)($at) -.L7F003C30: -/* 036620 7F003C30 8C4E0000 */ lw $t6, ($v0) -/* 036624 7F003C34 2442000C */ addiu $v0, $v0, 0xc -/* 036628 7F003C38 0043082B */ sltu $at, $v0, $v1 -/* 03662C 7F003C3C 1420FFFC */ bnez $at, .L7F003C30 -/* 036630 7F003C40 ADC00000 */ sw $zero, ($t6) -/* 036634 7F003C44 2AA1003B */ slti $at, $s5, 0x3b -/* 036638 7F003C48 10200456 */ beqz $at, .L7F004E20 -/* 03663C 7F003C4C 00157880 */ sll $t7, $s5, 2 -/* 036640 7F003C50 3C188003 */ lui $t8, %hi(setup_text_pointers) # $t8, 0x8003 -/* 036644 7F003C54 27182594 */ addiu $t8, %lo(setup_text_pointers) # addiu $t8, $t8, 0x2594 -/* 036648 7F003C58 01F88021 */ addu $s0, $t7, $t8 -/* 03664C 7F003C5C 8E020000 */ lw $v0, ($s0) -/* 036650 7F003C60 3C198004 */ lui $t9, %hi(only_read_by_stageload) # $t9, 0x8004 -/* 036654 7F003C64 27B10174 */ addiu $s1, $sp, 0x174 -/* 036658 7F003C68 1040044E */ beqz $v0, .L7F004E20 -/* 03665C 7F003C6C 273971F0 */ addiu $t9, %lo(only_read_by_stageload) # addiu $t9, $t9, 0x71f0 -/* 036660 7F003C70 02205025 */ move $t2, $s1 -/* 036664 7F003C74 272900FC */ addiu $t1, $t9, 0xfc -.L7F003C78: -/* 036668 7F003C78 8F210000 */ lw $at, ($t9) -/* 03666C 7F003C7C 2739000C */ addiu $t9, $t9, 0xc -/* 036670 7F003C80 254A000C */ addiu $t2, $t2, 0xc -/* 036674 7F003C84 AD41FFF4 */ sw $at, -0xc($t2) -/* 036678 7F003C88 8F21FFF8 */ lw $at, -8($t9) -/* 03667C 7F003C8C AD41FFF8 */ sw $at, -8($t2) -/* 036680 7F003C90 8F21FFFC */ lw $at, -4($t9) -/* 036684 7F003C94 1729FFF8 */ bne $t9, $t1, .L7F003C78 -/* 036688 7F003C98 AD41FFFC */ sw $at, -4($t2) -/* 03668C 7F003C9C 8F210000 */ lw $at, ($t9) -/* 036690 7F003CA0 0000A025 */ move $s4, $zero -/* 036694 7F003CA4 00009825 */ move $s3, $zero -/* 036698 7F003CA8 AD410000 */ sw $at, ($t2) -/* 03669C 7F003CAC 904B0000 */ lbu $t3, ($v0) -/* 0366A0 7F003CB0 A3A00175 */ sb $zero, 0x175($sp) -/* 0366A4 7F003CB4 0FC26669 */ jal getPlayerCount -/* 0366A8 7F003CB8 A3AB0174 */ sb $t3, 0x174($sp) -/* 0366AC 7F003CBC 28410002 */ slti $at, $v0, 2 -/* 0366B0 7F003CC0 14200004 */ bnez $at, .L7F003CD4 -/* 0366B4 7F003CC4 3C058004 */ lui $a1, %hi(aMp_) # $a1, 0x8004 -/* 0366B8 7F003CC8 24A572F0 */ addiu $a1, %lo(aMp_) # addiu $a1, $a1, 0x72f0 -/* 0366BC 7F003CCC 0C002717 */ jal strcat -/* 0366C0 7F003CD0 02202025 */ move $a0, $s1 -.L7F003CD4: -/* 0366C4 7F003CD4 8E050000 */ lw $a1, ($s0) -/* 0366C8 7F003CD8 02202025 */ move $a0, $s1 -/* 0366CC 7F003CDC 0C002717 */ jal strcat -/* 0366D0 7F003CE0 24A50001 */ addiu $a1, $a1, 1 -/* 0366D4 7F003CE4 02202025 */ move $a0, $s1 -/* 0366D8 7F003CE8 24050001 */ li $a1, 1 -/* 0366DC 7F003CEC 24060100 */ li $a2, 256 -/* 0366E0 7F003CF0 0FC2F053 */ jal _fileNameLoadToBank -/* 0366E4 7F003CF4 24070004 */ li $a3, 4 -/* 0366E8 7F003CF8 3C038006 */ lui $v1, %hi(g_ptrStageSetupFile) # $v1, 0x8006 -/* 0366EC 7F003CFC 24634C68 */ addiu $v1, %lo(g_ptrStageSetupFile) # addiu $v1, $v1, 0x4c68 -/* 0366F0 7F003D00 AC620000 */ sw $v0, ($v1) -/* 0366F4 7F003D04 00408825 */ move $s1, $v0 -/* 0366F8 7F003D08 0FC302B0 */ jal langGetLangBankIndexFromStagenum -/* 0366FC 7F003D0C 02A02025 */ move $a0, $s5 -/* 036700 7F003D10 0FC3047A */ jal langLoadToAddr -/* 036704 7F003D14 00402025 */ move $a0, $v0 -/* 036708 7F003D18 8E2C0000 */ lw $t4, ($s1) -/* 03670C 7F003D1C 3C078006 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8006 -/* 036710 7F003D20 24E74C40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x4c40 -/* 036714 7F003D24 022C6821 */ addu $t5, $s1, $t4 -/* 036718 7F003D28 ACED0000 */ sw $t5, ($a3) -/* 03671C 7F003D2C 8E2E0004 */ lw $t6, 4($s1) -/* 036720 7F003D30 022E7821 */ addu $t7, $s1, $t6 -/* 036724 7F003D34 ACEF0004 */ sw $t7, 4($a3) -/* 036728 7F003D38 8E380008 */ lw $t8, 8($s1) -/* 03672C 7F003D3C 02384021 */ addu $t0, $s1, $t8 -/* 036730 7F003D40 ACE80008 */ sw $t0, 8($a3) -/* 036734 7F003D44 8E29000C */ lw $t1, 0xc($s1) -/* 036738 7F003D48 0229C821 */ addu $t9, $s1, $t1 -/* 03673C 7F003D4C ACF9000C */ sw $t9, 0xc($a3) -/* 036740 7F003D50 8E2A0010 */ lw $t2, 0x10($s1) -/* 036744 7F003D54 022A5821 */ addu $t3, $s1, $t2 -/* 036748 7F003D58 ACEB0010 */ sw $t3, 0x10($a3) -/* 03674C 7F003D5C 8E2C0014 */ lw $t4, 0x14($s1) -/* 036750 7F003D60 022C6821 */ addu $t5, $s1, $t4 -/* 036754 7F003D64 ACED0014 */ sw $t5, 0x14($a3) -/* 036758 7F003D68 8E2E0018 */ lw $t6, 0x18($s1) -/* 03675C 7F003D6C 022E7821 */ addu $t7, $s1, $t6 -/* 036760 7F003D70 ACEF0018 */ sw $t7, 0x18($a3) -/* 036764 7F003D74 8E38001C */ lw $t8, 0x1c($s1) -/* 036768 7F003D78 02384021 */ addu $t0, $s1, $t8 -/* 03676C 7F003D7C ACE8001C */ sw $t0, 0x1c($a3) -/* 036770 7F003D80 8E220020 */ lw $v0, 0x20($s1) -/* 036774 7F003D84 10400003 */ beqz $v0, .L7F003D94 -/* 036778 7F003D88 02224821 */ addu $t1, $s1, $v0 -/* 03677C 7F003D8C 10000002 */ b .L7F003D98 -/* 036780 7F003D90 ACE90020 */ sw $t1, 0x20($a3) -.L7F003D94: -/* 036784 7F003D94 ACE00020 */ sw $zero, 0x20($a3) -.L7F003D98: -/* 036788 7F003D98 8E220024 */ lw $v0, 0x24($s1) -/* 03678C 7F003D9C 10400003 */ beqz $v0, .L7F003DAC -/* 036790 7F003DA0 0222C821 */ addu $t9, $s1, $v0 -/* 036794 7F003DA4 10000002 */ b .L7F003DB0 -/* 036798 7F003DA8 ACF90024 */ sw $t9, 0x24($a3) -.L7F003DAC: -/* 03679C 7F003DAC ACE00024 */ sw $zero, 0x24($a3) -.L7F003DB0: -/* 0367A0 7F003DB0 8CE50000 */ lw $a1, ($a3) -/* 0367A4 7F003DB4 50A00010 */ beql $a1, $zero, .L7F003DF8 -/* 0367A8 7F003DB8 8CE50004 */ lw $a1, 4($a3) -/* 0367AC 7F003DBC 8CAA0000 */ lw $t2, ($a1) -/* 0367B0 7F003DC0 00001825 */ move $v1, $zero -/* 0367B4 7F003DC4 00A01025 */ move $v0, $a1 -/* 0367B8 7F003DC8 0542000B */ bltzl $t2, .L7F003DF8 -/* 0367BC 7F003DCC 8CE50004 */ lw $a1, 4($a3) -/* 0367C0 7F003DD0 8C4B0004 */ lw $t3, 4($v0) -.L7F003DD4: -/* 0367C4 7F003DD4 24630010 */ addiu $v1, $v1, 0x10 -/* 0367C8 7F003DD8 01716021 */ addu $t4, $t3, $s1 -/* 0367CC 7F003DDC AC4C0004 */ sw $t4, 4($v0) -/* 0367D0 7F003DE0 8CED0000 */ lw $t5, ($a3) -/* 0367D4 7F003DE4 01A31021 */ addu $v0, $t5, $v1 -/* 0367D8 7F003DE8 8C4E0000 */ lw $t6, ($v0) -/* 0367DC 7F003DEC 05C3FFF9 */ bgezl $t6, .L7F003DD4 -/* 0367E0 7F003DF0 8C4B0004 */ lw $t3, 4($v0) -/* 0367E4 7F003DF4 8CE50004 */ lw $a1, 4($a3) -.L7F003DF8: -/* 0367E8 7F003DF8 50A00015 */ beql $a1, $zero, .L7F003E50 -/* 0367EC 7F003DFC 8CE60014 */ lw $a2, 0x14($a3) -/* 0367F0 7F003E00 8CAF0000 */ lw $t7, ($a1) -/* 0367F4 7F003E04 00001825 */ move $v1, $zero -/* 0367F8 7F003E08 00A01025 */ move $v0, $a1 -/* 0367FC 7F003E0C 51E00010 */ beql $t7, $zero, .L7F003E50 -/* 036800 7F003E10 8CE60014 */ lw $a2, 0x14($a3) -/* 036804 7F003E14 8CA40000 */ lw $a0, ($a1) -/* 036808 7F003E18 0091C021 */ addu $t8, $a0, $s1 -.L7F003E1C: -/* 03680C 7F003E1C AC580000 */ sw $t8, ($v0) -/* 036810 7F003E20 8CE80004 */ lw $t0, 4($a3) -/* 036814 7F003E24 01031021 */ addu $v0, $t0, $v1 -/* 036818 7F003E28 8C490004 */ lw $t1, 4($v0) -/* 03681C 7F003E2C 2463000C */ addiu $v1, $v1, 0xc -/* 036820 7F003E30 0131C821 */ addu $t9, $t1, $s1 -/* 036824 7F003E34 AC590004 */ sw $t9, 4($v0) -/* 036828 7F003E38 8CEA0004 */ lw $t2, 4($a3) -/* 03682C 7F003E3C 01431021 */ addu $v0, $t2, $v1 -/* 036830 7F003E40 8C440000 */ lw $a0, ($v0) -/* 036834 7F003E44 5480FFF5 */ bnezl $a0, .L7F003E1C -/* 036838 7F003E48 0091C021 */ addu $t8, $a0, $s1 -/* 03683C 7F003E4C 8CE60014 */ lw $a2, 0x14($a3) -.L7F003E50: -/* 036840 7F003E50 50C00010 */ beql $a2, $zero, .L7F003E94 -/* 036844 7F003E54 8CE20010 */ lw $v0, 0x10($a3) -/* 036848 7F003E58 8CCB0000 */ lw $t3, ($a2) -/* 03684C 7F003E5C 00002825 */ move $a1, $zero -/* 036850 7F003E60 00C01025 */ move $v0, $a2 -/* 036854 7F003E64 5160000B */ beql $t3, $zero, .L7F003E94 -/* 036858 7F003E68 8CE20010 */ lw $v0, 0x10($a3) -/* 03685C 7F003E6C 8CC30000 */ lw $v1, ($a2) -/* 036860 7F003E70 00716021 */ addu $t4, $v1, $s1 -.L7F003E74: -/* 036864 7F003E74 AC4C0000 */ sw $t4, ($v0) -/* 036868 7F003E78 8CED0014 */ lw $t5, 0x14($a3) -/* 03686C 7F003E7C 24A50008 */ addiu $a1, $a1, 8 -/* 036870 7F003E80 01A51021 */ addu $v0, $t5, $a1 -/* 036874 7F003E84 8C430000 */ lw $v1, ($v0) -/* 036878 7F003E88 5460FFFA */ bnezl $v1, .L7F003E74 -/* 03687C 7F003E8C 00716021 */ addu $t4, $v1, $s1 -/* 036880 7F003E90 8CE20010 */ lw $v0, 0x10($a3) -.L7F003E94: -/* 036884 7F003E94 50400020 */ beql $v0, $zero, .L7F003F18 -/* 036888 7F003E98 8CEA0018 */ lw $t2, 0x18($a3) -/* 03688C 7F003E9C 8C4E0000 */ lw $t6, ($v0) -/* 036890 7F003EA0 00002825 */ move $a1, $zero -/* 036894 7F003EA4 00403025 */ move $a2, $v0 -/* 036898 7F003EA8 51C0001B */ beql $t6, $zero, .L7F003F18 -/* 03689C 7F003EAC 8CEA0018 */ lw $t2, 0x18($a3) -/* 0368A0 7F003EB0 8C440000 */ lw $a0, ($v0) -/* 0368A4 7F003EB4 00917821 */ addu $t7, $a0, $s1 -.L7F003EB8: -/* 0368A8 7F003EB8 ACCF0000 */ sw $t7, ($a2) -/* 0368AC 7F003EBC 8CF80010 */ lw $t8, 0x10($a3) -/* 0368B0 7F003EC0 00001825 */ move $v1, $zero -/* 0368B4 7F003EC4 03053021 */ addu $a2, $t8, $a1 -/* 0368B8 7F003EC8 8CC40000 */ lw $a0, ($a2) -/* 0368BC 7F003ECC 8C880000 */ lw $t0, ($a0) -/* 0368C0 7F003ED0 00801025 */ move $v0, $a0 -/* 0368C4 7F003ED4 05020009 */ bltzl $t0, .L7F003EFC -/* 0368C8 7F003ED8 A4C30006 */ sh $v1, 6($a2) -/* 0368CC 7F003EDC 8C490004 */ lw $t1, 4($v0) -.L7F003EE0: -/* 0368D0 7F003EE0 24630001 */ addiu $v1, $v1, 1 -/* 0368D4 7F003EE4 24420004 */ addiu $v0, $v0, 4 -/* 0368D8 7F003EE8 0523FFFD */ bgezl $t1, .L7F003EE0 -/* 0368DC 7F003EEC 8C490004 */ lw $t1, 4($v0) -/* 0368E0 7F003EF0 3C078006 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8006 -/* 0368E4 7F003EF4 24E74C40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x4c40 -/* 0368E8 7F003EF8 A4C30006 */ sh $v1, 6($a2) -.L7F003EFC: -/* 0368EC 7F003EFC 8CF90010 */ lw $t9, 0x10($a3) -/* 0368F0 7F003F00 24A50008 */ addiu $a1, $a1, 8 -/* 0368F4 7F003F04 03253021 */ addu $a2, $t9, $a1 -/* 0368F8 7F003F08 8CC40000 */ lw $a0, ($a2) -/* 0368FC 7F003F0C 5480FFEA */ bnezl $a0, .L7F003EB8 -/* 036900 7F003F10 00917821 */ addu $t7, $a0, $s1 -/* 036904 7F003F14 8CEA0018 */ lw $t2, 0x18($a3) -.L7F003F18: -/* 036908 7F003F18 1140001D */ beqz $t2, .L7F003F90 -/* 03690C 7F003F1C 00000000 */ nop -/* 036910 7F003F20 0FC2CEDB */ jal get_room_data_float2 -/* 036914 7F003F24 00000000 */ nop -/* 036918 7F003F28 3C108006 */ lui $s0, %hi(g_CurrentSetup+0x18) # $s0, 0x8006 -/* 03691C 7F003F2C 8E104C58 */ lw $s0, %lo(g_CurrentSetup+0x18)($s0) -/* 036920 7F003F30 46000086 */ mov.s $f2, $f0 -/* 036924 7F003F34 8E020024 */ lw $v0, 0x24($s0) -/* 036928 7F003F38 10400015 */ beqz $v0, .L7F003F90 -/* 03692C 7F003F3C 00000000 */ nop -/* 036930 7F003F40 C6060000 */ lwc1 $f6, ($s0) -.L7F003F44: -/* 036934 7F003F44 C60A0004 */ lwc1 $f10, 4($s0) -/* 036938 7F003F48 C6120008 */ lwc1 $f18, 8($s0) -/* 03693C 7F003F4C 46023202 */ mul.s $f8, $f6, $f2 -/* 036940 7F003F50 02222821 */ addu $a1, $s1, $v0 -/* 036944 7F003F54 AE050024 */ sw $a1, 0x24($s0) -/* 036948 7F003F58 46025402 */ mul.s $f16, $f10, $f2 -/* 03694C 7F003F5C 02002025 */ move $a0, $s0 -/* 036950 7F003F60 26060028 */ addiu $a2, $s0, 0x28 -/* 036954 7F003F64 46029102 */ mul.s $f4, $f18, $f2 -/* 036958 7F003F68 E6080000 */ swc1 $f8, ($s0) -/* 03695C 7F003F6C E6100004 */ swc1 $f16, 4($s0) -/* 036960 7F003F70 E6040008 */ swc1 $f4, 8($s0) -/* 036964 7F003F74 0FC019D0 */ jal init_pathtable_something -/* 036968 7F003F78 E7A2015C */ swc1 $f2, 0x15c($sp) -/* 03696C 7F003F7C 8E020050 */ lw $v0, 0x50($s0) -/* 036970 7F003F80 2610002C */ addiu $s0, $s0, 0x2c -/* 036974 7F003F84 C7A2015C */ lwc1 $f2, 0x15c($sp) -/* 036978 7F003F88 5440FFEE */ bnezl $v0, .L7F003F44 -/* 03697C 7F003F8C C6060000 */ lwc1 $f6, ($s0) -.L7F003F90: -/* 036980 7F003F90 3C078006 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8006 -/* 036984 7F003F94 24E74C40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x4c40 -/* 036988 7F003F98 8CEC001C */ lw $t4, 0x1c($a3) -/* 03698C 7F003F9C 51800033 */ beql $t4, $zero, .L7F00406C -/* 036990 7F003FA0 8CE50020 */ lw $a1, 0x20($a3) -/* 036994 7F003FA4 0FC2CEDB */ jal get_room_data_float2 -/* 036998 7F003FA8 00000000 */ nop -/* 03699C 7F003FAC 3C078006 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8006 -/* 0369A0 7F003FB0 24E74C40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x4c40 -/* 0369A4 7F003FB4 8CF0001C */ lw $s0, 0x1c($a3) -/* 0369A8 7F003FB8 46000086 */ mov.s $f2, $f0 -/* 0369AC 7F003FBC 8E020024 */ lw $v0, 0x24($s0) -/* 0369B0 7F003FC0 5040002A */ beql $v0, $zero, .L7F00406C -/* 0369B4 7F003FC4 8CE50020 */ lw $a1, 0x20($a3) -/* 0369B8 7F003FC8 C6060000 */ lwc1 $f6, ($s0) -.L7F003FCC: -/* 0369BC 7F003FCC C60A0004 */ lwc1 $f10, 4($s0) -/* 0369C0 7F003FD0 C6120008 */ lwc1 $f18, 8($s0) -/* 0369C4 7F003FD4 46023202 */ mul.s $f8, $f6, $f2 -/* 0369C8 7F003FD8 C606002C */ lwc1 $f6, 0x2c($s0) -/* 0369CC 7F003FDC 02222821 */ addu $a1, $s1, $v0 -/* 0369D0 7F003FE0 46025402 */ mul.s $f16, $f10, $f2 -/* 0369D4 7F003FE4 C60A0030 */ lwc1 $f10, 0x30($s0) -/* 0369D8 7F003FE8 AE050024 */ sw $a1, 0x24($s0) -/* 0369DC 7F003FEC 46029102 */ mul.s $f4, $f18, $f2 -/* 0369E0 7F003FF0 E6080000 */ swc1 $f8, ($s0) -/* 0369E4 7F003FF4 C6120034 */ lwc1 $f18, 0x34($s0) -/* 0369E8 7F003FF8 46023202 */ mul.s $f8, $f6, $f2 -/* 0369EC 7F003FFC E6100004 */ swc1 $f16, 4($s0) -/* 0369F0 7F004000 C6060038 */ lwc1 $f6, 0x38($s0) -/* 0369F4 7F004004 46025402 */ mul.s $f16, $f10, $f2 -/* 0369F8 7F004008 E6040008 */ swc1 $f4, 8($s0) -/* 0369FC 7F00400C C60A003C */ lwc1 $f10, 0x3c($s0) -/* 036A00 7F004010 46029102 */ mul.s $f4, $f18, $f2 -/* 036A04 7F004014 E608002C */ swc1 $f8, 0x2c($s0) -/* 036A08 7F004018 C6120040 */ lwc1 $f18, 0x40($s0) -/* 036A0C 7F00401C 46023202 */ mul.s $f8, $f6, $f2 -/* 036A10 7F004020 E6100030 */ swc1 $f16, 0x30($s0) -/* 036A14 7F004024 02002025 */ move $a0, $s0 -/* 036A18 7F004028 46025402 */ mul.s $f16, $f10, $f2 -/* 036A1C 7F00402C E6040034 */ swc1 $f4, 0x34($s0) -/* 036A20 7F004030 26060028 */ addiu $a2, $s0, 0x28 -/* 036A24 7F004034 46029102 */ mul.s $f4, $f18, $f2 -/* 036A28 7F004038 E6080038 */ swc1 $f8, 0x38($s0) -/* 036A2C 7F00403C E610003C */ swc1 $f16, 0x3c($s0) -/* 036A30 7F004040 E6040040 */ swc1 $f4, 0x40($s0) -/* 036A34 7F004044 0FC019D0 */ jal init_pathtable_something -/* 036A38 7F004048 E7A20150 */ swc1 $f2, 0x150($sp) -/* 036A3C 7F00404C 8E020068 */ lw $v0, 0x68($s0) -/* 036A40 7F004050 26100044 */ addiu $s0, $s0, 0x44 -/* 036A44 7F004054 C7A20150 */ lwc1 $f2, 0x150($sp) -/* 036A48 7F004058 5440FFDC */ bnezl $v0, .L7F003FCC -/* 036A4C 7F00405C C6060000 */ lwc1 $f6, ($s0) -/* 036A50 7F004060 3C078006 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8006 -/* 036A54 7F004064 24E74C40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x4c40 -/* 036A58 7F004068 8CE50020 */ lw $a1, 0x20($a3) -.L7F00406C: -/* 036A5C 7F00406C 50A00010 */ beql $a1, $zero, .L7F0040B0 -/* 036A60 7F004070 8CE50024 */ lw $a1, 0x24($a3) -/* 036A64 7F004074 8CAE0000 */ lw $t6, ($a1) -/* 036A68 7F004078 00001025 */ move $v0, $zero -/* 036A6C 7F00407C 00A01825 */ move $v1, $a1 -/* 036A70 7F004080 51C0000B */ beql $t6, $zero, .L7F0040B0 -/* 036A74 7F004084 8CE50024 */ lw $a1, 0x24($a3) -/* 036A78 7F004088 8CA40000 */ lw $a0, ($a1) -/* 036A7C 7F00408C 00917821 */ addu $t7, $a0, $s1 -.L7F004090: -/* 036A80 7F004090 AC6F0000 */ sw $t7, ($v1) -/* 036A84 7F004094 8CF80020 */ lw $t8, 0x20($a3) -/* 036A88 7F004098 24420004 */ addiu $v0, $v0, 4 -/* 036A8C 7F00409C 03021821 */ addu $v1, $t8, $v0 -/* 036A90 7F0040A0 8C640000 */ lw $a0, ($v1) -/* 036A94 7F0040A4 5480FFFA */ bnezl $a0, .L7F004090 -/* 036A98 7F0040A8 00917821 */ addu $t7, $a0, $s1 -/* 036A9C 7F0040AC 8CE50024 */ lw $a1, 0x24($a3) -.L7F0040B0: -/* 036AA0 7F0040B0 50A0000F */ beql $a1, $zero, .L7F0040F0 -/* 036AA4 7F0040B4 8FAA0278 */ lw $t2, 0x278($sp) -/* 036AA8 7F0040B8 8CA80000 */ lw $t0, ($a1) -/* 036AAC 7F0040BC 00001025 */ move $v0, $zero -/* 036AB0 7F0040C0 00A01825 */ move $v1, $a1 -/* 036AB4 7F0040C4 11000009 */ beqz $t0, .L7F0040EC -/* 036AB8 7F0040C8 01002025 */ move $a0, $t0 -/* 036ABC 7F0040CC 00914821 */ addu $t1, $a0, $s1 -.L7F0040D0: -/* 036AC0 7F0040D0 AC690000 */ sw $t1, ($v1) -/* 036AC4 7F0040D4 8CF90024 */ lw $t9, 0x24($a3) -/* 036AC8 7F0040D8 24420004 */ addiu $v0, $v0, 4 -/* 036ACC 7F0040DC 03221821 */ addu $v1, $t9, $v0 -/* 036AD0 7F0040E0 8C640000 */ lw $a0, ($v1) -/* 036AD4 7F0040E4 5480FFFA */ bnezl $a0, .L7F0040D0 -/* 036AD8 7F0040E8 00914821 */ addu $t1, $a0, $s1 -.L7F0040EC: -/* 036ADC 7F0040EC 8FAA0278 */ lw $t2, 0x278($sp) -.L7F0040F0: -/* 036AE0 7F0040F0 11400012 */ beqz $t2, .L7F00413C -/* 036AE4 7F0040F4 00000000 */ nop -/* 036AE8 7F0040F8 0FC006D4 */ jal load_proptype -/* 036AEC 7F0040FC 24040009 */ li $a0, 9 -/* 036AF0 7F004100 0FC003AE */ jal alloc_init_GUARDdata_entries -/* 036AF4 7F004104 00402025 */ move $a0, $v0 -/* 036AF8 7F004108 0FC006D4 */ jal load_proptype -/* 036AFC 7F00410C 24040009 */ li $a0, 9 -/* 036B00 7F004110 0040A025 */ move $s4, $v0 -/* 036B04 7F004114 0FC006D4 */ jal load_proptype -/* 036B08 7F004118 24040008 */ li $a0, 8 -/* 036B0C 7F00411C 00409825 */ move $s3, $v0 -/* 036B10 7F004120 0FC006D4 */ jal load_proptype -/* 036B14 7F004124 24040004 */ li $a0, 4 -/* 036B18 7F004128 02629821 */ addu $s3, $s3, $v0 -/* 036B1C 7F00412C 0FC006D4 */ jal load_proptype -/* 036B20 7F004130 24040011 */ li $a0, 17 -/* 036B24 7F004134 10000003 */ b .L7F004144 -/* 036B28 7F004138 02629821 */ addu $s3, $s3, $v0 -.L7F00413C: -/* 036B2C 7F00413C 0FC003AE */ jal alloc_init_GUARDdata_entries -/* 036B30 7F004140 00002025 */ move $a0, $zero -.L7F004144: -/* 036B34 7F004144 13C0003A */ beqz $fp, .L7F004230 -/* 036B38 7F004148 00000000 */ nop -/* 036B3C 7F00414C 0FC006D4 */ jal load_proptype -/* 036B40 7F004150 24040001 */ li $a0, 1 -/* 036B44 7F004154 02629821 */ addu $s3, $s3, $v0 -/* 036B48 7F004158 0FC006D4 */ jal load_proptype -/* 036B4C 7F00415C 24040006 */ li $a0, 6 -/* 036B50 7F004160 02629821 */ addu $s3, $s3, $v0 -/* 036B54 7F004164 0FC006D4 */ jal load_proptype -/* 036B58 7F004168 2404000D */ li $a0, 13 -/* 036B5C 7F00416C 02629821 */ addu $s3, $s3, $v0 -/* 036B60 7F004170 0FC006D4 */ jal load_proptype -/* 036B64 7F004174 2404000C */ li $a0, 12 -/* 036B68 7F004178 02629821 */ addu $s3, $s3, $v0 -/* 036B6C 7F00417C 0FC006D4 */ jal load_proptype -/* 036B70 7F004180 2404000A */ li $a0, 10 -/* 036B74 7F004184 02629821 */ addu $s3, $s3, $v0 -/* 036B78 7F004188 0FC006D4 */ jal load_proptype -/* 036B7C 7F00418C 2404000B */ li $a0, 11 -/* 036B80 7F004190 02629821 */ addu $s3, $s3, $v0 -/* 036B84 7F004194 0FC006D4 */ jal load_proptype -/* 036B88 7F004198 24040015 */ li $a0, 21 -/* 036B8C 7F00419C 02629821 */ addu $s3, $s3, $v0 -/* 036B90 7F0041A0 0FC006D4 */ jal load_proptype -/* 036B94 7F0041A4 24040003 */ li $a0, 3 -/* 036B98 7F0041A8 02629821 */ addu $s3, $s3, $v0 -/* 036B9C 7F0041AC 0FC006D4 */ jal load_proptype -/* 036BA0 7F0041B0 2404002A */ li $a0, 42 -/* 036BA4 7F0041B4 02629821 */ addu $s3, $s3, $v0 -/* 036BA8 7F0041B8 0FC006D4 */ jal load_proptype -/* 036BAC 7F0041BC 2404002F */ li $a0, 47 -/* 036BB0 7F0041C0 02629821 */ addu $s3, $s3, $v0 -/* 036BB4 7F0041C4 0FC006D4 */ jal load_proptype -/* 036BB8 7F0041C8 2404002B */ li $a0, 43 -/* 036BBC 7F0041CC 02629821 */ addu $s3, $s3, $v0 -/* 036BC0 7F0041D0 0FC006D4 */ jal load_proptype -/* 036BC4 7F0041D4 24040029 */ li $a0, 41 -/* 036BC8 7F0041D8 02629821 */ addu $s3, $s3, $v0 -/* 036BCC 7F0041DC 0FC006D4 */ jal load_proptype -/* 036BD0 7F0041E0 24040024 */ li $a0, 36 -/* 036BD4 7F0041E4 02629821 */ addu $s3, $s3, $v0 -/* 036BD8 7F0041E8 0FC006D4 */ jal load_proptype -/* 036BDC 7F0041EC 24040005 */ li $a0, 5 -/* 036BE0 7F0041F0 02629821 */ addu $s3, $s3, $v0 -/* 036BE4 7F0041F4 0FC006D4 */ jal load_proptype -/* 036BE8 7F0041F8 24040007 */ li $a0, 7 -/* 036BEC 7F0041FC 02629821 */ addu $s3, $s3, $v0 -/* 036BF0 7F004200 0FC006D4 */ jal load_proptype -/* 036BF4 7F004204 24040014 */ li $a0, 20 -/* 036BF8 7F004208 02629821 */ addu $s3, $s3, $v0 -/* 036BFC 7F00420C 0FC006D4 */ jal load_proptype -/* 036C00 7F004210 24040027 */ li $a0, 39 -/* 036C04 7F004214 02629821 */ addu $s3, $s3, $v0 -/* 036C08 7F004218 0FC006D4 */ jal load_proptype -/* 036C0C 7F00421C 2404002D */ li $a0, 45 -/* 036C10 7F004220 02629821 */ addu $s3, $s3, $v0 -/* 036C14 7F004224 0FC006D4 */ jal load_proptype -/* 036C18 7F004228 24040028 */ li $a0, 40 -/* 036C1C 7F00422C 0282A021 */ addu $s4, $s4, $v0 -.L7F004230: -/* 036C20 7F004230 0FC01538 */ jal sub_GAME_7F005540 -/* 036C24 7F004234 02602025 */ move $a0, $s3 -/* 036C28 7F004238 0FC01571 */ jal sub_GAME_7F005624 -/* 036C2C 7F00423C 02802025 */ move $a0, $s4 -/* 036C30 7F004240 0FC26669 */ jal getPlayerCount -/* 036C34 7F004244 00008025 */ move $s0, $zero -/* 036C38 7F004248 1840000C */ blez $v0, .L7F00427C -/* 036C3C 7F00424C 00000000 */ nop -.L7F004250: -/* 036C40 7F004250 0FC26993 */ jal set_cur_player -/* 036C44 7F004254 02002025 */ move $a0, $s0 -/* 036C48 7F004258 0FC006D4 */ jal load_proptype -/* 036C4C 7F00425C 2404000E */ li $a0, 14 -/* 036C50 7F004260 0FC01877 */ jal alloc_additional_item_slots -/* 036C54 7F004264 00402025 */ move $a0, $v0 -/* 036C58 7F004268 0FC26669 */ jal getPlayerCount -/* 036C5C 7F00426C 26100001 */ addiu $s0, $s0, 1 -/* 036C60 7F004270 0202082A */ slt $at, $s0, $v0 -/* 036C64 7F004274 1420FFF6 */ bnez $at, .L7F004250 -/* 036C68 7F004278 00000000 */ nop -.L7F00427C: -/* 036C6C 7F00427C 3C0B8006 */ lui $t3, %hi(g_CurrentSetup+0x0c) # $t3, 0x8006 -/* 036C70 7F004280 8D6B4C4C */ lw $t3, %lo(g_CurrentSetup+0x0c)($t3) -/* 036C74 7F004284 116002E1 */ beqz $t3, .L7F004E88 -/* 036C78 7F004288 00000000 */ nop -/* 036C7C 7F00428C 0FC2FC21 */ jal lvlGetSelectedDifficulty -/* 036C80 7F004290 00000000 */ nop -/* 036C84 7F004294 244C0004 */ addiu $t4, $v0, 4 -/* 036C88 7F004298 240D0001 */ li $t5, 1 -/* 036C8C 7F00429C 0FC26669 */ jal getPlayerCount -/* 036C90 7F0042A0 018DA004 */ sllv $s4, $t5, $t4 -/* 036C94 7F0042A4 28410002 */ slti $at, $v0, 2 -/* 036C98 7F0042A8 14200007 */ bnez $at, .L7F0042C8 -/* 036C9C 7F0042AC 00000000 */ nop -/* 036CA0 7F0042B0 0FC26669 */ jal getPlayerCount -/* 036CA4 7F0042B4 00000000 */ nop -/* 036CA8 7F0042B8 244E0014 */ addiu $t6, $v0, 0x14 -/* 036CAC 7F0042BC 240F0001 */ li $t7, 1 -/* 036CB0 7F0042C0 01CFC004 */ sllv $t8, $t7, $t6 -/* 036CB4 7F0042C4 0298A025 */ or $s4, $s4, $t8 -.L7F0042C8: -/* 036CB8 7F0042C8 3C128006 */ lui $s2, %hi(g_CurrentSetup+0x0c) # $s2, 0x8006 -/* 036CBC 7F0042CC 8E524C4C */ lw $s2, %lo(g_CurrentSetup+0x0c)($s2) -/* 036CC0 7F0042D0 24010030 */ li $at, 48 -/* 036CC4 7F0042D4 00009825 */ move $s3, $zero -/* 036CC8 7F0042D8 92430003 */ lbu $v1, 3($s2) -/* 036CCC 7F0042DC 24170034 */ li $s7, 52 -/* 036CD0 7F0042E0 506101F8 */ beql $v1, $at, .L7F004B40 -/* 036CD4 7F0042E4 92430003 */ lbu $v1, 3($s2) -/* 036CD8 7F0042E8 4480A000 */ mtc1 $zero, $f20 -/* 036CDC 7F0042EC 3416FFFF */ li $s6, 65535 -/* 036CE0 7F0042F0 2468FFFF */ addiu $t0, $v1, -1 -.L7F0042F4: -/* 036CE4 7F0042F4 2D01002F */ sltiu $at, $t0, 0x2f -/* 036CE8 7F0042F8 102001E5 */ beqz $at, other_obj_expand -/* 036CEC 7F0042FC 00084080 */ sll $t0, $t0, 2 -/* 036CF0 7F004300 3C018004 */ lui $at, %hi(jpt_object_type_expansion) -/* 036CF4 7F004304 00280821 */ addu $at, $at, $t0 -/* 036CF8 7F004308 8C2873B0 */ lw $t0, %lo(jpt_object_type_expansion)($at) -/* 036CFC 7F00430C 01000008 */ jr $t0 -/* 036D00 7F004310 00000000 */ nop -actor_attr_expand: -/* 036D04 7F004314 9250000B */ lbu $s0, 0xb($s2) -/* 036D08 7F004318 0FC08BE4 */ jal chrFindByLiteralId -/* 036D0C 7F00431C 8E440004 */ lw $a0, 4($s2) -/* 036D10 7F004320 104001DB */ beqz $v0, other_obj_expand -/* 036D14 7F004324 00000000 */ nop -/* 036D18 7F004328 8C490018 */ lw $t1, 0x18($v0) -/* 036D1C 7F00432C 112001D8 */ beqz $t1, other_obj_expand -/* 036D20 7F004330 00000000 */ nop -/* 036D24 7F004334 8C59001C */ lw $t9, 0x1c($v0) -/* 036D28 7F004338 132001D5 */ beqz $t9, other_obj_expand -/* 036D2C 7F00433C 00000000 */ nop -/* 036D30 7F004340 100001D3 */ b other_obj_expand -/* 036D34 7F004344 A0500010 */ sb $s0, 0x10($v0) -actor_expand: -/* 036D38 7F004348 8FAA0278 */ lw $t2, 0x278($sp) -/* 036D3C 7F00434C 02A02025 */ move $a0, $s5 -/* 036D40 7F004350 02402825 */ move $a1, $s2 -/* 036D44 7F004354 114001CE */ beqz $t2, other_obj_expand -/* 036D48 7F004358 00000000 */ nop -/* 036D4C 7F00435C 0FC08DBB */ jal expand_09_characters -/* 036D50 7F004360 02603025 */ move $a2, $s3 -/* 036D54 7F004364 100001CA */ b other_obj_expand -/* 036D58 7F004368 00000000 */ nop -door_expand: -/* 036D5C 7F00436C 13C001C8 */ beqz $fp, other_obj_expand -/* 036D60 7F004370 00000000 */ nop -/* 036D64 7F004374 8E4B000C */ lw $t3, 0xc($s2) -/* 036D68 7F004378 02A02025 */ move $a0, $s5 -/* 036D6C 7F00437C 02402825 */ move $a1, $s2 -/* 036D70 7F004380 01746824 */ and $t5, $t3, $s4 -/* 036D74 7F004384 15A001C2 */ bnez $t5, other_obj_expand -/* 036D78 7F004388 00000000 */ nop -/* 036D7C 7F00438C 0FC00CFC */ jal setupDoor -/* 036D80 7F004390 02603025 */ move $a2, $s3 -/* 036D84 7F004394 100001BE */ b other_obj_expand -/* 036D88 7F004398 00000000 */ nop -door_scale_expand: -/* 036D8C 7F00439C 8E4C0004 */ lw $t4, 4($s2) -/* 036D90 7F0043A0 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 036D94 7F0043A4 44815000 */ mtc1 $at, $f10 -/* 036D98 7F0043A8 448C3000 */ mtc1 $t4, $f6 -/* 036D9C 7F0043AC 3C018002 */ lui $at, %hi(g_DoorScale) # $at, 0x8002 -/* 036DA0 7F0043B0 46803220 */ cvt.s.w $f8, $f6 -/* 036DA4 7F0043B4 460A4403 */ div.s $f16, $f8, $f10 -/* 036DA8 7F0043B8 100001B5 */ b other_obj_expand -/* 036DAC 7F0043BC E4305910 */ swc1 $f16, %lo(g_DoorScale)($at) -item_expand: -/* 036DB0 7F0043C0 8FAF0278 */ lw $t7, 0x278($sp) -/* 036DB4 7F0043C4 11E001B2 */ beqz $t7, other_obj_expand -/* 036DB8 7F0043C8 00000000 */ nop -/* 036DBC 7F0043CC 8E4E000C */ lw $t6, 0xc($s2) -/* 036DC0 7F0043D0 02A02025 */ move $a0, $s5 -/* 036DC4 7F0043D4 02402825 */ move $a1, $s2 -/* 036DC8 7F0043D8 01D4C024 */ and $t8, $t6, $s4 -/* 036DCC 7F0043DC 170001AC */ bnez $t8, other_obj_expand -/* 036DD0 7F0043E0 00000000 */ nop -/* 036DD4 7F0043E4 0FC009CE */ jal weaponAssignToHome -/* 036DD8 7F0043E8 02603025 */ move $a2, $s3 -/* 036DDC 7F0043EC 100001A8 */ b other_obj_expand -/* 036DE0 7F0043F0 00000000 */ nop -key_expand: -/* 036DE4 7F0043F4 8FA80278 */ lw $t0, 0x278($sp) -/* 036DE8 7F0043F8 110001A5 */ beqz $t0, other_obj_expand -/* 036DEC 7F0043FC 00000000 */ nop -/* 036DF0 7F004400 8E49000C */ lw $t1, 0xc($s2) -/* 036DF4 7F004404 02A02025 */ move $a0, $s5 -/* 036DF8 7F004408 02402825 */ move $a1, $s2 -/* 036DFC 7F00440C 0134C824 */ and $t9, $t1, $s4 -/* 036E00 7F004410 1720019F */ bnez $t9, other_obj_expand -/* 036E04 7F004414 00000000 */ nop -/* 036E08 7F004418 0FC00A61 */ jal setupKey -/* 036E0C 7F00441C 02603025 */ move $a2, $s3 -/* 036E10 7F004420 1000019B */ b other_obj_expand -/* 036E14 7F004424 00000000 */ nop -hat_expand: -/* 036E18 7F004428 8FAA0278 */ lw $t2, 0x278($sp) -/* 036E1C 7F00442C 11400198 */ beqz $t2, other_obj_expand -/* 036E20 7F004430 00000000 */ nop -/* 036E24 7F004434 8E4B000C */ lw $t3, 0xc($s2) -/* 036E28 7F004438 02A02025 */ move $a0, $s5 -/* 036E2C 7F00443C 02402825 */ move $a1, $s2 -/* 036E30 7F004440 01746824 */ and $t5, $t3, $s4 -/* 036E34 7F004444 15A00192 */ bnez $t5, other_obj_expand -/* 036E38 7F004448 00000000 */ nop -/* 036E3C 7F00444C 0FC00A44 */ jal setupHat -/* 036E40 7F004450 02603025 */ move $a2, $s3 -/* 036E44 7F004454 1000018E */ b other_obj_expand -/* 036E48 7F004458 00000000 */ nop -surv_camera_expand: -/* 036E4C 7F00445C 13C0018C */ beqz $fp, other_obj_expand -/* 036E50 7F004460 00000000 */ nop -/* 036E54 7F004464 8E4C000C */ lw $t4, 0xc($s2) -/* 036E58 7F004468 02A02025 */ move $a0, $s5 -/* 036E5C 7F00446C 02402825 */ move $a1, $s2 -/* 036E60 7F004470 01947824 */ and $t7, $t4, $s4 -/* 036E64 7F004474 15E00186 */ bnez $t7, other_obj_expand -/* 036E68 7F004478 00000000 */ nop -/* 036E6C 7F00447C 0FC00A69 */ jal setupCctv -/* 036E70 7F004480 02603025 */ move $a2, $s3 -/* 036E74 7F004484 10000182 */ b other_obj_expand -/* 036E78 7F004488 00000000 */ nop -autogun_expand: -/* 036E7C 7F00448C 13C00180 */ beqz $fp, other_obj_expand -/* 036E80 7F004490 00000000 */ nop -/* 036E84 7F004494 8E4E000C */ lw $t6, 0xc($s2) -/* 036E88 7F004498 02A02025 */ move $a0, $s5 -/* 036E8C 7F00449C 02402825 */ move $a1, $s2 -/* 036E90 7F0044A0 01D4C024 */ and $t8, $t6, $s4 -/* 036E94 7F0044A4 1700017A */ bnez $t8, other_obj_expand -/* 036E98 7F0044A8 00000000 */ nop -/* 036E9C 7F0044AC 0FC00AF0 */ jal setupAutogun -/* 036EA0 7F0044B0 02603025 */ move $a2, $s3 -/* 036EA4 7F0044B4 10000176 */ b other_obj_expand -/* 036EA8 7F0044B8 00000000 */ nop -rack_expand: -/* 036EAC 7F0044BC 13C00174 */ beqz $fp, other_obj_expand -/* 036EB0 7F0044C0 00000000 */ nop -/* 036EB4 7F0044C4 8E48000C */ lw $t0, 0xc($s2) -/* 036EB8 7F0044C8 02A02025 */ move $a0, $s5 -/* 036EBC 7F0044CC 02402825 */ move $a1, $s2 -/* 036EC0 7F0044D0 01144824 */ and $t1, $t0, $s4 -/* 036EC4 7F0044D4 1520016E */ bnez $t1, other_obj_expand -/* 036EC8 7F0044D8 00000000 */ nop -/* 036ECC 7F0044DC 0FC00B63 */ jal setupHangingMonitors -/* 036ED0 7F0044E0 02603025 */ move $a2, $s3 -/* 036ED4 7F0044E4 1000016A */ b other_obj_expand -/* 036ED8 7F0044E8 00000000 */ nop -single_screen_display_expand: -/* 036EDC 7F0044EC 13C00168 */ beqz $fp, other_obj_expand -/* 036EE0 7F0044F0 00000000 */ nop -/* 036EE4 7F0044F4 8E59000C */ lw $t9, 0xc($s2) -/* 036EE8 7F0044F8 02A02025 */ move $a0, $s5 -/* 036EEC 7F0044FC 02402825 */ move $a1, $s2 -/* 036EF0 7F004500 03345024 */ and $t2, $t9, $s4 -/* 036EF4 7F004504 15400162 */ bnez $t2, other_obj_expand -/* 036EF8 7F004508 00000000 */ nop -/* 036EFC 7F00450C 0FC00B6B */ jal setupSingleMonitor -/* 036F00 7F004510 02603025 */ move $a2, $s3 -/* 036F04 7F004514 1000015E */ b other_obj_expand -/* 036F08 7F004518 00000000 */ nop -multi_screen_display_expand: -/* 036F0C 7F00451C 13C0015C */ beqz $fp, other_obj_expand -/* 036F10 7F004520 00000000 */ nop -/* 036F14 7F004524 8E4B000C */ lw $t3, 0xc($s2) -/* 036F18 7F004528 02A02025 */ move $a0, $s5 -/* 036F1C 7F00452C 02402825 */ move $a1, $s2 -/* 036F20 7F004530 01746824 */ and $t5, $t3, $s4 -/* 036F24 7F004534 15A00156 */ bnez $t5, other_obj_expand -/* 036F28 7F004538 00000000 */ nop -/* 036F2C 7F00453C 0FC00C10 */ jal setupMultiMonitor -/* 036F30 7F004540 02603025 */ move $a2, $s3 -/* 036F34 7F004544 10000152 */ b other_obj_expand -/* 036F38 7F004548 00000000 */ nop -.L7F00454C: -/* 036F3C 7F00454C 13C00150 */ beqz $fp, other_obj_expand -/* 036F40 7F004550 00000000 */ nop -body_armor_expand: -/* 036F44 7F004554 8E4C000C */ lw $t4, 0xc($s2) -/* 036F48 7F004558 3C0E8004 */ lui $t6, %hi(j_text_trigger) # $t6, 0x8004 -/* 036F4C 7F00455C 01947824 */ and $t7, $t4, $s4 -/* 036F50 7F004560 51E00005 */ beql $t7, $zero, .L7F0045EC -/* 036F54 7F004564 8E580080 */ lw $t8, 0x80($s2) -/* 036F58 7F004568 8DCE1150 */ lw $t6, %lo(j_text_trigger)($t6) -/* 036F5C 7F00456C 11C00148 */ beqz $t6, other_obj_expand -/* 036F60 7F004570 00000000 */ nop -/* 036F64 7F004574 8E580080 */ lw $t8, 0x80($s2) -.L7F0045EC: -/* 036F68 7F004578 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 036F6C 7F00457C 44813000 */ mtc1 $at, $f6 -/* 036F70 7F004580 44989000 */ mtc1 $t8, $f18 -/* 036F74 7F004584 02A02025 */ move $a0, $s5 -/* 036F78 7F004588 02402825 */ move $a1, $s2 -/* 036F7C 7F00458C 46809120 */ cvt.s.w $f4, $f18 -/* 036F80 7F004590 02603025 */ move $a2, $s3 -/* 036F84 7F004594 46062203 */ div.s $f8, $f4, $f6 -/* 036F88 7F004598 E6480080 */ swc1 $f8, 0x80($s2) -/* 036F8C 7F00459C C64A0080 */ lwc1 $f10, 0x80($s2) -/* 036F90 7F0045A0 0FC00767 */ jal domakedefaultobj -/* 036F94 7F0045A4 E64A0084 */ swc1 $f10, 0x84($s2) -/* 036F98 7F0045A8 10000139 */ b other_obj_expand -/* 036F9C 7F0045AC 00000000 */ nop -type2F_tinted_glass: -/* 036FA0 7F0045B0 13C00137 */ beqz $fp, other_obj_expand -/* 036FA4 7F0045B4 00000000 */ nop -/* 036FA8 7F0045B8 8E48000C */ lw $t0, 0xc($s2) -/* 036FAC 7F0045BC 01144824 */ and $t1, $t0, $s4 -/* 036FB0 7F0045C0 15200133 */ bnez $t1, other_obj_expand -/* 036FB4 7F0045C4 00000000 */ nop -/* 036FB8 7F0045C8 8E590008 */ lw $t9, 8($s2) -/* 036FBC 7F0045CC 001950C0 */ sll $t2, $t9, 3 -/* 036FC0 7F0045D0 05430039 */ bgezl $t2, .L7F0046B8 -/* 036FC4 7F0045D4 02A02025 */ move $a0, $s5 -/* 036FC8 7F0045D8 86420006 */ lh $v0, 6($s2) -/* 036FCC 7F0045DC 3C0D8006 */ lui $t5, %hi(g_CurrentSetup+0x1C) # $t5, 0x8006 -/* 036FD0 7F0045E0 27A50118 */ addiu $a1, $sp, 0x118 -/* 036FD4 7F0045E4 28412710 */ slti $at, $v0, 0x2710 -/* 036FD8 7F0045E8 14200032 */ bnez $at, .L7F0046B4 -/* 036FDC 7F0045EC 00025900 */ sll $t3, $v0, 4 -/* 036FE0 7F0045F0 8DAD4C5C */ lw $t5, %lo(g_CurrentSetup+0x1C)($t5) -/* 036FE4 7F0045F4 01625821 */ addu $t3, $t3, $v0 -/* 036FE8 7F0045F8 000B5880 */ sll $t3, $t3, 2 -/* 036FEC 7F0045FC 3C01FFF5 */ lui $at, (0xFFF59FC0 >> 16) # lui $at, 0xfff5 -/* 036FF0 7F004600 34219FC0 */ ori $at, (0xFFF59FC0 & 0xFFFF) # ori $at, $at, 0x9fc0 -/* 036FF4 7F004604 016D8021 */ addu $s0, $t3, $t5 -/* 036FF8 7F004608 02018021 */ addu $s0, $s0, $at -/* 036FFC 7F00460C 0FC006F5 */ jal sub_GAME_7F001BD4 -/* 037000 7F004610 02002025 */ move $a0, $s0 -/* 037004 7F004614 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 037008 7F004618 44810000 */ mtc1 $at, $f0 -/* 03700C 7F00461C C610000C */ lwc1 $f16, 0xc($s0) -/* 037010 7F004620 C7A40118 */ lwc1 $f4, 0x118($sp) -/* 037014 7F004624 27A40118 */ addiu $a0, $sp, 0x118 -/* 037018 7F004628 46008482 */ mul.s $f18, $f16, $f0 -/* 03701C 7F00462C C7B0011C */ lwc1 $f16, 0x11c($sp) -/* 037020 7F004630 27A5010C */ addiu $a1, $sp, 0x10c -/* 037024 7F004634 46049180 */ add.s $f6, $f18, $f4 -/* 037028 7F004638 E7A6010C */ swc1 $f6, 0x10c($sp) -/* 03702C 7F00463C C6080010 */ lwc1 $f8, 0x10($s0) -/* 037030 7F004640 46004282 */ mul.s $f10, $f8, $f0 -/* 037034 7F004644 46105480 */ add.s $f18, $f10, $f16 -/* 037038 7F004648 C7AA0120 */ lwc1 $f10, 0x120($sp) -/* 03703C 7F00464C E7B20110 */ swc1 $f18, 0x110($sp) -/* 037040 7F004650 C6060014 */ lwc1 $f6, 0x14($s0) -/* 037044 7F004654 46003202 */ mul.s $f8, $f6, $f0 -/* 037048 7F004658 460A4480 */ add.s $f18, $f8, $f10 -/* 03704C 7F00465C E7B20114 */ swc1 $f18, 0x114($sp) -/* 037050 7F004660 C606000C */ lwc1 $f6, 0xc($s0) -/* 037054 7F004664 46060202 */ mul.s $f8, $f0, $f6 -/* 037058 7F004668 46082481 */ sub.s $f18, $f4, $f8 -/* 03705C 7F00466C E7B20118 */ swc1 $f18, 0x118($sp) -/* 037060 7F004670 C6060010 */ lwc1 $f6, 0x10($s0) -/* 037064 7F004674 46060102 */ mul.s $f4, $f0, $f6 -/* 037068 7F004678 46048201 */ sub.s $f8, $f16, $f4 -/* 03706C 7F00467C E7A8011C */ swc1 $f8, 0x11c($sp) -/* 037070 7F004680 C6120014 */ lwc1 $f18, 0x14($s0) -/* 037074 7F004684 46120182 */ mul.s $f6, $f0, $f18 -/* 037078 7F004688 46065401 */ sub.s $f16, $f10, $f6 -/* 03707C 7F00468C 0FC2E428 */ jal sub_GAME_7F0B9E04 -/* 037080 7F004690 E7B00120 */ swc1 $f16, 0x120($sp) -/* 037084 7F004694 8E4C0090 */ lw $t4, 0x90($s2) -/* 037088 7F004698 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 03708C 7F00469C 44819000 */ mtc1 $at, $f18 -/* 037090 7F0046A0 448C2000 */ mtc1 $t4, $f4 -/* 037094 7F0046A4 AE42008C */ sw $v0, 0x8c($s2) -/* 037098 7F0046A8 46802220 */ cvt.s.w $f8, $f4 -/* 03709C 7F0046AC 46124283 */ div.s $f10, $f8, $f18 -/* 0370A0 7F0046B0 E64A0090 */ swc1 $f10, 0x90($s2) -.L7F0046B4: -/* 0370A4 7F0046B4 02A02025 */ move $a0, $s5 -.L7F0046B8: -/* 0370A8 7F0046B8 02402825 */ move $a1, $s2 -/* 0370AC 7F0046BC 0FC00767 */ jal domakedefaultobj -/* 0370B0 7F0046C0 02603025 */ move $a2, $s3 -/* 0370B4 7F0046C4 100000F2 */ b other_obj_expand -/* 0370B8 7F0046C8 00000000 */ nop -obj_03_expand: -/* 0370BC 7F0046CC 13C000F0 */ beqz $fp, other_obj_expand -/* 0370C0 7F0046D0 00000000 */ nop -/* 0370C4 7F0046D4 8E4F000C */ lw $t7, 0xc($s2) -/* 0370C8 7F0046D8 02A02025 */ move $a0, $s5 -/* 0370CC 7F0046DC 02402825 */ move $a1, $s2 -/* 0370D0 7F0046E0 01F47024 */ and $t6, $t7, $s4 -/* 0370D4 7F0046E4 15C000EA */ bnez $t6, other_obj_expand -/* 0370D8 7F0046E8 00000000 */ nop -/* 0370DC 7F0046EC 0FC00767 */ jal domakedefaultobj -/* 0370E0 7F0046F0 02603025 */ move $a2, $s3 -/* 0370E4 7F0046F4 100000E6 */ b other_obj_expand -/* 0370E8 7F0046F8 00000000 */ nop -ammo_box_expand: -/* 0370EC 7F0046FC 0FC26669 */ jal getPlayerCount -/* 0370F0 7F004700 24100001 */ li $s0, 1 -/* 0370F4 7F004704 28410002 */ slti $at, $v0, 2 -/* 0370F8 7F004708 1420000C */ bnez $at, .L7F0047B8 -/* 0370FC 7F00470C 00000000 */ nop -/* 037100 7F004710 0FC316CD */ jal getPtrMPWeaponSetData -/* 037104 7F004714 00000000 */ nop -/* 037108 7F004718 3C188006 */ lui $t8, %hi(lastmpweaponnum) # $t8, 0x8006 -/* 03710C 7F00471C 8F188480 */ lw $t8, %lo(lastmpweaponnum)($t8) -/* 037110 7F004720 001840C0 */ sll $t0, $t8, 3 -/* 037114 7F004724 00481821 */ addu $v1, $v0, $t0 -/* 037118 7F004728 80640001 */ lb $a0, 1($v1) -/* 03711C 7F00472C 80700002 */ lb $s0, 2($v1) -/* 037120 7F004730 00044880 */ sll $t1, $a0, 2 -/* 037124 7F004734 0249C821 */ addu $t9, $s2, $t1 -/* 037128 7F004738 A730007E */ sh $s0, 0x7e($t9) -.L7F0047B8: -/* 03712C 7F00473C 1A0000D4 */ blez $s0, other_obj_expand -/* 037130 7F004740 00000000 */ nop -/* 037134 7F004744 13C000D2 */ beqz $fp, other_obj_expand -/* 037138 7F004748 00000000 */ nop -/* 03713C 7F00474C 8E4A000C */ lw $t2, 0xc($s2) -/* 037140 7F004750 00008825 */ move $s1, $zero -/* 037144 7F004754 02408025 */ move $s0, $s2 -/* 037148 7F004758 01545824 */ and $t3, $t2, $s4 -/* 03714C 7F00475C 156000CC */ bnez $t3, other_obj_expand -/* 037150 7F004760 00000000 */ nop -.L7F0047E0: -/* 037154 7F004764 960D0082 */ lhu $t5, 0x82($s0) -/* 037158 7F004768 59A00007 */ blezl $t5, .L7F004804 -/* 03715C 7F00476C 26310004 */ addiu $s1, $s1, 4 -/* 037160 7F004770 96040080 */ lhu $a0, 0x80($s0) -/* 037164 7F004774 52C40004 */ beql $s6, $a0, .L7F004804 -/* 037168 7F004778 26310004 */ addiu $s1, $s1, 4 -/* 03716C 7F00477C 0FC15BC6 */ jal modelLoad -/* 037170 7F004780 00000000 */ nop -/* 037174 7F004784 26310004 */ addiu $s1, $s1, 4 -.L7F004804: -/* 037178 7F004788 1637FFF6 */ bne $s1, $s7, .L7F0047E0 -/* 03717C 7F00478C 26100004 */ addiu $s0, $s0, 4 -/* 037180 7F004790 02A02025 */ move $a0, $s5 -/* 037184 7F004794 02402825 */ move $a1, $s2 -/* 037188 7F004798 0FC00767 */ jal domakedefaultobj -/* 03718C 7F00479C 02603025 */ move $a2, $s3 -/* 037190 7F0047A0 100000BB */ b other_obj_expand -/* 037194 7F0047A4 00000000 */ nop -type2D_tank: -/* 037198 7F0047A8 13C000B9 */ beqz $fp, other_obj_expand -/* 03719C 7F0047AC 00000000 */ nop -/* 0371A0 7F0047B0 8E4C000C */ lw $t4, 0xc($s2) -/* 0371A4 7F0047B4 24040020 */ li $a0, 32 -/* 0371A8 7F0047B8 01947824 */ and $t7, $t4, $s4 -/* 0371AC 7F0047BC 15E000B4 */ bnez $t7, other_obj_expand -/* 0371B0 7F0047C0 00000000 */ nop -/* 0371B4 7F0047C4 0FC015AC */ jal weaponLoadProjectileModels -/* 0371B8 7F0047C8 E7B400E8 */ swc1 $f20, 0xe8($sp) -/* 0371BC 7F0047CC 02A02025 */ move $a0, $s5 -/* 0371C0 7F0047D0 02402825 */ move $a1, $s2 -/* 0371C4 7F0047D4 0FC00767 */ jal domakedefaultobj -/* 0371C8 7F0047D8 02603025 */ move $a2, $s3 -/* 0371CC 7F0047DC E65400C8 */ swc1 $f20, 0xc8($s2) -/* 0371D0 7F0047E0 E65400CC */ swc1 $f20, 0xcc($s2) -/* 0371D4 7F0047E4 C64C0038 */ lwc1 $f12, 0x38($s2) -/* 0371D8 7F0047E8 0FC16BB8 */ jal atan2f -/* 0371DC 7F0047EC C64E0040 */ lwc1 $f14, 0x40($s2) -/* 0371E0 7F0047F0 3C018004 */ lui $at, %hi(D_8004F024) # $at, 0x8004 -/* 0371E4 7F0047F4 C426746C */ lwc1 $f6, %lo(D_8004F024)($at) -/* 0371E8 7F0047F8 8E420010 */ lw $v0, 0x10($s2) -/* 0371EC 7F0047FC 46003401 */ sub.s $f16, $f6, $f0 -/* 0371F0 7F004800 10400006 */ beqz $v0, .L7F004898 -/* 0371F4 7F004804 E65000DC */ swc1 $f16, 0xdc($s2) -/* 0371F8 7F004808 8C440014 */ lw $a0, 0x14($v0) -/* 0371FC 7F00480C 8C450008 */ lw $a1, 8($v0) -/* 037200 7F004810 0FC2C70C */ jal stanGetPositionYValue -/* 037204 7F004814 8C460010 */ lw $a2, 0x10($v0) -/* 037208 7F004818 E7A000E8 */ swc1 $f0, 0xe8($sp) -.L7F004898: -/* 03720C 7F00481C C7A200E8 */ lwc1 $f2, 0xe8($sp) -/* 037210 7F004820 3C018004 */ lui $at, %hi(D_8004F028) # $at, 0x8004 -/* 037214 7F004824 E64200D4 */ swc1 $f2, 0xd4($s2) -/* 037218 7F004828 C4247470 */ lwc1 $f4, %lo(D_8004F028)($at) -/* 03721C 7F00482C 46041203 */ div.s $f8, $f2, $f4 -/* 037220 7F004830 10000097 */ b other_obj_expand -/* 037224 7F004834 E64800D0 */ swc1 $f8, 0xd0($s2) -type27_wheeled_vehicle: -/* 037228 7F004838 13C00095 */ beqz $fp, other_obj_expand -/* 03722C 7F00483C 00000000 */ nop -/* 037230 7F004840 8E4E000C */ lw $t6, 0xc($s2) -/* 037234 7F004844 02A02025 */ move $a0, $s5 -/* 037238 7F004848 02402825 */ move $a1, $s2 -/* 03723C 7F00484C 01D4C024 */ and $t8, $t6, $s4 -/* 037240 7F004850 1700008F */ bnez $t8, other_obj_expand -/* 037244 7F004854 00000000 */ nop -/* 037248 7F004858 0FC00767 */ jal domakedefaultobj -/* 03724C 7F00485C 02603025 */ move $a2, $s3 -/* 037250 7F004860 8E440014 */ lw $a0, 0x14($s2) -/* 037254 7F004864 5080000E */ beql $a0, $zero, .L7F00491C -/* 037258 7F004868 3C01BF80 */ lui $at, 0xbf80 -/* 03725C 7F00486C 8C880008 */ lw $t0, 8($a0) -/* 037260 7F004870 8D090008 */ lw $t1, 8($t0) -/* 037264 7F004874 8D250014 */ lw $a1, 0x14($t1) -/* 037268 7F004878 50A00009 */ beql $a1, $zero, .L7F00491C -/* 03726C 7F00487C 3C01BF80 */ lui $at, 0xbf80 -/* 037270 7F004880 0FC1B3A3 */ jal modelGetNodeRwData -/* 037274 7F004884 00000000 */ nop -/* 037278 7F004888 8E590008 */ lw $t9, 8($s2) -/* 03727C 7F00488C 3C011000 */ li $at, 0x10000000 # 0.000000 -/* 037280 7F004890 03215024 */ and $t2, $t9, $at -/* 037284 7F004894 2D4B0001 */ sltiu $t3, $t2, 1 -/* 037288 7F004898 AC4B0000 */ sw $t3, ($v0) -/* 03728C 7F00489C 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -.L7F00491C: -/* 037290 7F0048A0 44819000 */ mtc1 $at, $f18 -/* 037294 7F0048A4 E6540088 */ swc1 $f20, 0x88($s2) -/* 037298 7F0048A8 E654008C */ swc1 $f20, 0x8c($s2) -/* 03729C 7F0048AC E6540090 */ swc1 $f20, 0x90($s2) -/* 0372A0 7F0048B0 E6540094 */ swc1 $f20, 0x94($s2) -/* 0372A4 7F0048B4 E654009C */ swc1 $f20, 0x9c($s2) -/* 0372A8 7F0048B8 E65400A0 */ swc1 $f20, 0xa0($s2) -/* 0372AC 7F0048BC 8E440080 */ lw $a0, 0x80($s2) -/* 0372B0 7F0048C0 0FC0D4F6 */ jal ailistFindById -/* 0372B4 7F0048C4 E6520098 */ swc1 $f18, 0x98($s2) -/* 0372B8 7F0048C8 240DFFFF */ li $t5, -1 -/* 0372BC 7F0048CC AE420080 */ sw $v0, 0x80($s2) -/* 0372C0 7F0048D0 A6400084 */ sh $zero, 0x84($s2) -/* 0372C4 7F0048D4 A64D0086 */ sh $t5, 0x86($s2) -/* 0372C8 7F0048D8 AE4000A4 */ sw $zero, 0xa4($s2) -/* 0372CC 7F0048DC AE4000A8 */ sw $zero, 0xa8($s2) -/* 0372D0 7F0048E0 1000006B */ b other_obj_expand -/* 0372D4 7F0048E4 AE4000AC */ sw $zero, 0xac($s2) -type28_aircraft: -/* 0372D8 7F0048E8 13C00069 */ beqz $fp, other_obj_expand -/* 0372DC 7F0048EC 00000000 */ nop -/* 0372E0 7F0048F0 8E4C000C */ lw $t4, 0xc($s2) -/* 0372E4 7F0048F4 02A02025 */ move $a0, $s5 -/* 0372E8 7F0048F8 02402825 */ move $a1, $s2 -/* 0372EC 7F0048FC 01947824 */ and $t7, $t4, $s4 -/* 0372F0 7F004900 15E00063 */ bnez $t7, other_obj_expand -/* 0372F4 7F004904 00000000 */ nop -/* 0372F8 7F004908 0FC00767 */ jal domakedefaultobj -/* 0372FC 7F00490C 02603025 */ move $a2, $s3 -/* 037300 7F004910 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 037304 7F004914 44810000 */ mtc1 $at, $f0 -/* 037308 7F004918 E6540098 */ swc1 $f20, 0x98($s2) -/* 03730C 7F00491C E654009C */ swc1 $f20, 0x9c($s2) -/* 037310 7F004920 E6540088 */ swc1 $f20, 0x88($s2) -/* 037314 7F004924 E654008C */ swc1 $f20, 0x8c($s2) -/* 037318 7F004928 E6540090 */ swc1 $f20, 0x90($s2) -/* 03731C 7F00492C E65400A4 */ swc1 $f20, 0xa4($s2) -/* 037320 7F004930 8E440080 */ lw $a0, 0x80($s2) -/* 037324 7F004934 E64000A0 */ swc1 $f0, 0xa0($s2) -/* 037328 7F004938 0FC0D4F6 */ jal ailistFindById -/* 03732C 7F00493C E6400094 */ swc1 $f0, 0x94($s2) -/* 037330 7F004940 240EFFFF */ li $t6, -1 -/* 037334 7F004944 AE420080 */ sw $v0, 0x80($s2) -/* 037338 7F004948 A6400084 */ sh $zero, 0x84($s2) -/* 03733C 7F00494C A64E0086 */ sh $t6, 0x86($s2) -/* 037340 7F004950 AE4000A8 */ sw $zero, 0xa8($s2) -/* 037344 7F004954 AE4000AC */ sw $zero, 0xac($s2) -/* 037348 7F004958 1000004D */ b other_obj_expand -/* 03734C 7F00495C AE4000B0 */ sw $zero, 0xb0($s2) -tag_expand: -/* 037350 7F004960 86580006 */ lh $t8, 6($s2) -/* 037354 7F004964 02A02025 */ move $a0, $s5 -/* 037358 7F004968 0FC15C60 */ jal setupCommandGetObject -/* 03735C 7F00496C 03132821 */ addu $a1, $t8, $s3 -/* 037360 7F004970 10400004 */ beqz $v0, .L7F004A00 -/* 037364 7F004974 AE42000C */ sw $v0, 0xc($s2) -/* 037368 7F004978 8C480064 */ lw $t0, 0x64($v0) -/* 03736C 7F00497C 35090010 */ ori $t1, $t0, 0x10 -/* 037370 7F004980 AC490064 */ sw $t1, 0x64($v0) -.L7F004A00: -/* 037374 7F004984 0FC013C8 */ jal set_parent_cur_tag_entry -/* 037378 7F004988 02402025 */ move $a0, $s2 -/* 03737C 7F00498C 10000040 */ b other_obj_expand -/* 037380 7F004990 00000000 */ nop -type25_rename: -/* 037384 7F004994 8E590004 */ lw $t9, 4($s2) -/* 037388 7F004998 02A02025 */ move $a0, $s5 -/* 03738C 7F00499C 0FC15C60 */ jal setupCommandGetObject -/* 037390 7F0049A0 03332821 */ addu $a1, $t9, $s3 -/* 037394 7F0049A4 10400004 */ beqz $v0, .L7F004A34 -/* 037398 7F0049A8 AE420024 */ sw $v0, 0x24($s2) -/* 03739C 7F0049AC 8C4A0064 */ lw $t2, 0x64($v0) -/* 0373A0 7F0049B0 354B0400 */ ori $t3, $t2, 0x400 -/* 0373A4 7F0049B4 AC4B0064 */ sw $t3, 0x64($v0) -.L7F004A34: -/* 0373A8 7F0049B8 0FC23782 */ jal bondinvAddTextOverride -/* 0373AC 7F0049BC 02402025 */ move $a0, $s2 -/* 0373B0 7F0049C0 10000033 */ b other_obj_expand -/* 0373B4 7F0049C4 00000000 */ nop -type23_solo_brief_text: -/* 0373B8 7F0049C8 0FC013CE */ jal setup_briefing_text_entry_parent -/* 0373BC 7F0049CC 02402025 */ move $a0, $s2 -/* 0373C0 7F0049D0 1000002F */ b other_obj_expand -/* 0373C4 7F0049D4 00000000 */ nop -type2E_viewport_pos: -/* 0373C8 7F0049D8 8E4D0004 */ lw $t5, 4($s2) -/* 0373CC 7F0049DC 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 0373D0 7F0049E0 44810000 */ mtc1 $at, $f0 -/* 0373D4 7F0049E4 448D5000 */ mtc1 $t5, $f10 -/* 0373D8 7F0049E8 8E4F000C */ lw $t7, 0xc($s2) -/* 0373DC 7F0049EC 8E4C0008 */ lw $t4, 8($s2) -/* 0373E0 7F0049F0 468051A0 */ cvt.s.w $f6, $f10 -/* 0373E4 7F0049F4 448F5000 */ mtc1 $t7, $f10 -/* 0373E8 7F0049F8 448C2000 */ mtc1 $t4, $f4 -/* 0373EC 7F0049FC 8E4E0010 */ lw $t6, 0x10($s2) -/* 0373F0 7F004A00 8E580014 */ lw $t8, 0x14($s2) -/* 0373F4 7F004A04 46802220 */ cvt.s.w $f8, $f4 -/* 0373F8 7F004A08 448E2000 */ mtc1 $t6, $f4 -/* 0373FC 7F004A0C 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 037400 7F004A10 46003403 */ div.s $f16, $f6, $f0 -/* 037404 7F004A14 468051A0 */ cvt.s.w $f6, $f10 -/* 037408 7F004A18 46004483 */ div.s $f18, $f8, $f0 -/* 03740C 7F004A1C E6500004 */ swc1 $f16, 4($s2) -/* 037410 7F004A20 46802220 */ cvt.s.w $f8, $f4 -/* 037414 7F004A24 44812000 */ mtc1 $at, $f4 -/* 037418 7F004A28 46003403 */ div.s $f16, $f6, $f0 -/* 03741C 7F004A2C 44983000 */ mtc1 $t8, $f6 -/* 037420 7F004A30 E6520008 */ swc1 $f18, 8($s2) -/* 037424 7F004A34 44819000 */ mtc1 $at, $f18 -/* 037428 7F004A38 00000000 */ nop -/* 03742C 7F004A3C 46124283 */ div.s $f10, $f8, $f18 -/* 037430 7F004A40 E650000C */ swc1 $f16, 0xc($s2) -/* 037434 7F004A44 46803420 */ cvt.s.w $f16, $f6 -/* 037438 7F004A48 46048203 */ div.s $f8, $f16, $f4 -/* 03743C 7F004A4C E64A0010 */ swc1 $f10, 0x10($s2) -/* 037440 7F004A50 1000000F */ b other_obj_expand -/* 037444 7F004A54 E6480014 */ swc1 $f8, 0x14($s2) -type17_objective_expand: -/* 037448 7F004A58 0FC013D4 */ jal add_ptr_to_objective -/* 03744C 7F004A5C 02402025 */ move $a0, $s2 -/* 037450 7F004A60 1000000B */ b other_obj_expand -/* 037454 7F004A64 00000000 */ nop -type20_subobjective_expand: -/* 037458 7F004A68 0FC013E3 */ jal set_parent_cur_obj_enter_room -/* 03745C 7F004A6C 02402025 */ move $a0, $s2 -/* 037460 7F004A70 10000007 */ b other_obj_expand -/* 037464 7F004A74 00000000 */ nop -type21_subobjective_expand: -/* 037468 7F004A78 0FC013E9 */ jal set_parent_cur_obj_deposited_in_room -/* 03746C 7F004A7C 02402025 */ move $a0, $s2 -/* 037470 7F004A80 10000003 */ b other_obj_expand -/* 037474 7F004A84 00000000 */ nop -type1E_subobjective_expand: -/* 037478 7F004A88 0FC013EF */ jal set_parent_cur_obj_photograph -/* 03747C 7F004A8C 02402025 */ move $a0, $s2 -other_obj_expand: -/* 037480 7F004A90 0FC15AF5 */ jal sizepropdef -/* 037484 7F004A94 02402025 */ move $a0, $s2 -/* 037488 7F004A98 00024080 */ sll $t0, $v0, 2 -/* 03748C 7F004A9C 01129021 */ addu $s2, $t0, $s2 -/* 037490 7F004AA0 92430003 */ lbu $v1, 3($s2) -/* 037494 7F004AA4 24010030 */ li $at, 48 -/* 037498 7F004AA8 26730001 */ addiu $s3, $s3, 1 -/* 03749C 7F004AAC 5461FE11 */ bnel $v1, $at, .L7F0042F4 -/* 0374A0 7F004AB0 2468FFFF */ addiu $t0, $v1, -1 -/* 0374A4 7F004AB4 3C128006 */ lui $s2, %hi(g_CurrentSetup+0x0c) # $s2, 0x8006 -/* 0374A8 7F004AB8 8E524C4C */ lw $s2, %lo(g_CurrentSetup+0x0c)($s2) -/* 0374AC 7F004ABC 00009825 */ move $s3, $zero -/* 0374B0 7F004AC0 92430003 */ lbu $v1, 3($s2) -.L7F004B40: -/* 0374B4 7F004AC4 24010030 */ li $at, 48 -/* 0374B8 7F004AC8 3C170008 */ lui $s7, 8 -/* 0374BC 7F004ACC 106100CF */ beq $v1, $at, .L7F004E88 -/* 0374C0 7F004AD0 24160008 */ li $s6, 8 -/* 0374C4 7F004AD4 241E002B */ li $fp, 43 -/* 0374C8 7F004AD8 24140001 */ li $s4, 1 -/* 0374CC 7F004ADC 2469FFFD */ addiu $t1, $v1, -3 -.L7F004B5C: -/* 0374D0 7F004AE0 2D21002D */ sltiu $at, $t1, 0x2d -/* 0374D4 7F004AE4 102000A4 */ beqz $at, .L7F004DF4 -/* 0374D8 7F004AE8 00094880 */ sll $t1, $t1, 2 -/* 0374DC 7F004AEC 3C018004 */ lui $at, %hi(jpt_8004F02C) -/* 0374E0 7F004AF0 00290821 */ addu $at, $at, $t1 -/* 0374E4 7F004AF4 8C297474 */ lw $t1, %lo(jpt_8004F02C)($at) -/* 0374E8 7F004AF8 01200008 */ jr $t1 -/* 0374EC 7F004AFC 00000000 */ nop -.L7F004B7C: -/* 0374F0 7F004B00 8E590010 */ lw $t9, 0x10($s2) -/* 0374F4 7F004B04 1320009C */ beqz $t9, .L7F004DF4 -/* 0374F8 7F004B08 00000000 */ nop -/* 0374FC 7F004B0C 8E4A0008 */ lw $t2, 8($s2) -/* 037500 7F004B10 314B8000 */ andi $t3, $t2, 0x8000 -/* 037504 7F004B14 11600098 */ beqz $t3, .L7F004DF4 -/* 037508 7F004B18 00000000 */ nop -/* 03750C 7F004B1C 86420006 */ lh $v0, 6($s2) -/* 037510 7F004B20 02A02025 */ move $a0, $s5 -/* 037514 7F004B24 0FC15C60 */ jal setupCommandGetObject -/* 037518 7F004B28 02622821 */ addu $a1, $s3, $v0 -/* 03751C 7F004B2C 10400092 */ beqz $v0, .L7F004DF4 -/* 037520 7F004B30 00408025 */ move $s0, $v0 -/* 037524 7F004B34 8C4D0010 */ lw $t5, 0x10($v0) -/* 037528 7F004B38 11A0008F */ beqz $t5, .L7F004DF4 -/* 03752C 7F004B3C 00000000 */ nop -/* 037530 7F004B40 8E4C0064 */ lw $t4, 0x64($s2) -/* 037534 7F004B44 8E440014 */ lw $a0, 0x14($s2) -/* 037538 7F004B48 01977825 */ or $t7, $t4, $s7 -/* 03753C 7F004B4C AE4F0064 */ sw $t7, 0x64($s2) -/* 037540 7F004B50 0FC1B4CF */ jal modelSetScale -/* 037544 7F004B54 8C850014 */ lw $a1, 0x14($a0) -/* 037548 7F004B58 8E440010 */ lw $a0, 0x10($s2) -/* 03754C 7F004B5C 0FC0E999 */ jal chrpropReparent -/* 037550 7F004B60 8E050010 */ lw $a1, 0x10($s0) -/* 037554 7F004B64 10000084 */ b .L7F004DF4 -/* 037558 7F004B68 00000000 */ nop -.L7F004BE8: -/* 03755C 7F004B6C 8E4E0004 */ lw $t6, 4($s2) -/* 037560 7F004B70 0FC15B5A */ jal setupGetPtrToCommandByIndex -/* 037564 7F004B74 01D32021 */ addu $a0, $t6, $s3 -/* 037568 7F004B78 8E580008 */ lw $t8, 8($s2) -/* 03756C 7F004B7C 00408025 */ move $s0, $v0 -/* 037570 7F004B80 0FC15B5A */ jal setupGetPtrToCommandByIndex -/* 037574 7F004B84 03132021 */ addu $a0, $t8, $s3 -/* 037578 7F004B88 1200007B */ beqz $s0, .L7F004DF4 -/* 03757C 7F004B8C 00402825 */ move $a1, $v0 -/* 037580 7F004B90 10400079 */ beqz $v0, .L7F004DF4 -/* 037584 7F004B94 00000000 */ nop -/* 037588 7F004B98 92080003 */ lbu $t0, 3($s0) -/* 03758C 7F004B9C 16C80076 */ bne $s6, $t0, .L7F004DF4 -/* 037590 7F004BA0 00000000 */ nop -/* 037594 7F004BA4 90490003 */ lbu $t1, 3($v0) -/* 037598 7F004BA8 16C90073 */ bne $s6, $t1, .L7F004DF4 -/* 03759C 7F004BAC 00000000 */ nop -/* 0375A0 7F004BB0 0FC14815 */ jal propweaponSetDual -/* 0375A4 7F004BB4 02002025 */ move $a0, $s0 -/* 0375A8 7F004BB8 1000006F */ b .L7F004DF4 -/* 0375AC 7F004BBC 00000000 */ nop -.L7F004C3C: -/* 0375B0 7F004BC0 8E420004 */ lw $v0, 4($s2) -/* 0375B4 7F004BC4 8E510008 */ lw $s1, 8($s2) -/* 0375B8 7F004BC8 02A02025 */ move $a0, $s5 -/* 0375BC 7F004BCC 0FC15C60 */ jal setupCommandGetObject -/* 0375C0 7F004BD0 02622821 */ addu $a1, $s3, $v0 -/* 0375C4 7F004BD4 00408025 */ move $s0, $v0 -/* 0375C8 7F004BD8 0FC15B5A */ jal setupGetPtrToCommandByIndex -/* 0375CC 7F004BDC 02712021 */ addu $a0, $s3, $s1 -/* 0375D0 7F004BE0 12000065 */ beqz $s0, .L7F004DF4 -/* 0375D4 7F004BE4 00000000 */ nop -/* 0375D8 7F004BE8 8E030010 */ lw $v1, 0x10($s0) -/* 0375DC 7F004BEC 10600062 */ beqz $v1, .L7F004DF4 -/* 0375E0 7F004BF0 00000000 */ nop -/* 0375E4 7F004BF4 10400060 */ beqz $v0, .L7F004DF4 -/* 0375E8 7F004BF8 00000000 */ nop -/* 0375EC 7F004BFC 90590003 */ lbu $t9, 3($v0) -/* 0375F0 7F004C00 1699005D */ bne $s4, $t9, .L7F004DF4 -/* 0375F4 7F004C04 00000000 */ nop -/* 0375F8 7F004C08 8C4A0010 */ lw $t2, 0x10($v0) -/* 0375FC 7F004C0C 1140005A */ beqz $t2, .L7F004DF4 -/* 037600 7F004C10 00000000 */ nop -/* 037604 7F004C14 AE430004 */ sw $v1, 4($s2) -/* 037608 7F004C18 8C4B0010 */ lw $t3, 0x10($v0) -/* 03760C 7F004C1C 02402025 */ move $a0, $s2 -/* 037610 7F004C20 0FC00644 */ jal initSetLevelLoadPropSwitch -/* 037614 7F004C24 AE4B0008 */ sw $t3, 8($s2) -/* 037618 7F004C28 8E0D0064 */ lw $t5, 0x64($s0) -/* 03761C 7F004C2C 35AC0001 */ ori $t4, $t5, 1 -/* 037620 7F004C30 10000051 */ b .L7F004DF4 -/* 037624 7F004C34 AE0C0064 */ sw $t4, 0x64($s0) -.L7F004CB4: -/* 037628 7F004C38 8E420004 */ lw $v0, 4($s2) -/* 03762C 7F004C3C 8E4F000C */ lw $t7, 0xc($s2) -/* 037630 7F004C40 8E510008 */ lw $s1, 8($s2) -/* 037634 7F004C44 02A02025 */ move $a0, $s5 -/* 037638 7F004C48 02622821 */ addu $a1, $s3, $v0 -/* 03763C 7F004C4C 0FC15C60 */ jal setupCommandGetObject -/* 037640 7F004C50 AFAF0080 */ sw $t7, 0x80($sp) -/* 037644 7F004C54 00408025 */ move $s0, $v0 -/* 037648 7F004C58 02A02025 */ move $a0, $s5 -/* 03764C 7F004C5C 0FC15C60 */ jal setupCommandGetObject -/* 037650 7F004C60 02712821 */ addu $a1, $s3, $s1 -/* 037654 7F004C64 8FAE0080 */ lw $t6, 0x80($sp) -/* 037658 7F004C68 00408825 */ move $s1, $v0 -/* 03765C 7F004C6C 02A02025 */ move $a0, $s5 -/* 037660 7F004C70 0FC15C60 */ jal setupCommandGetObject -/* 037664 7F004C74 026E2821 */ addu $a1, $s3, $t6 -/* 037668 7F004C78 1200003F */ beqz $s0, .L7F004DF4 -/* 03766C 7F004C7C 00000000 */ nop -/* 037670 7F004C80 8E180010 */ lw $t8, 0x10($s0) -/* 037674 7F004C84 1300003C */ beqz $t8, .L7F004DF4 -/* 037678 7F004C88 00000000 */ nop -/* 03767C 7F004C8C 1220003A */ beqz $s1, .L7F004DF4 -/* 037680 7F004C90 00000000 */ nop -/* 037684 7F004C94 8E280010 */ lw $t0, 0x10($s1) -/* 037688 7F004C98 11000037 */ beqz $t0, .L7F004DF4 -/* 03768C 7F004C9C 00000000 */ nop -/* 037690 7F004CA0 92290003 */ lbu $t1, 3($s1) -/* 037694 7F004CA4 17C90034 */ bne $fp, $t1, .L7F004DF4 -/* 037698 7F004CA8 00000000 */ nop -/* 03769C 7F004CAC 10400032 */ beqz $v0, .L7F004DF4 -/* 0376A0 7F004CB0 00000000 */ nop -/* 0376A4 7F004CB4 8C590010 */ lw $t9, 0x10($v0) -/* 0376A8 7F004CB8 1320002F */ beqz $t9, .L7F004DF4 -/* 0376AC 7F004CBC 00000000 */ nop -/* 0376B0 7F004CC0 904A0003 */ lbu $t2, 3($v0) -/* 0376B4 7F004CC4 02402025 */ move $a0, $s2 -/* 0376B8 7F004CC8 168A002B */ bne $s4, $t2, .L7F004DF4 -/* 0376BC 7F004CCC 00000000 */ nop -/* 0376C0 7F004CD0 AE500004 */ sw $s0, 4($s2) -/* 0376C4 7F004CD4 AE510008 */ sw $s1, 8($s2) -/* 0376C8 7F004CD8 AE42000C */ sw $v0, 0xc($s2) -/* 0376CC 7F004CDC 0FC00650 */ jal initSetLevelLoadPropSafeItem -/* 0376D0 7F004CE0 AFA20074 */ sw $v0, 0x74($sp) -/* 0376D4 7F004CE4 8E0B000C */ lw $t3, 0xc($s0) -/* 0376D8 7F004CE8 8FA30074 */ lw $v1, 0x74($sp) -/* 0376DC 7F004CEC 356D0400 */ ori $t5, $t3, 0x400 -/* 0376E0 7F004CF0 AE0D000C */ sw $t5, 0xc($s0) -/* 0376E4 7F004CF4 8C6C000C */ lw $t4, 0xc($v1) -/* 0376E8 7F004CF8 358F0400 */ ori $t7, $t4, 0x400 -/* 0376EC 7F004CFC 1000001E */ b .L7F004DF4 -/* 0376F0 7F004D00 AC6F000C */ sw $t7, 0xc($v1) -.L7F004D80: -/* 0376F4 7F004D04 8E420004 */ lw $v0, 4($s2) -/* 0376F8 7F004D08 8E510008 */ lw $s1, 8($s2) -/* 0376FC 7F004D0C 02A02025 */ move $a0, $s5 -/* 037700 7F004D10 0FC15C60 */ jal setupCommandGetObject -/* 037704 7F004D14 02622821 */ addu $a1, $s3, $v0 -/* 037708 7F004D18 00408025 */ move $s0, $v0 -/* 03770C 7F004D1C 02A02025 */ move $a0, $s5 -/* 037710 7F004D20 0FC15C60 */ jal setupCommandGetObject -/* 037714 7F004D24 02712821 */ addu $a1, $s3, $s1 -/* 037718 7F004D28 12000013 */ beqz $s0, .L7F004DF4 -/* 03771C 7F004D2C 00000000 */ nop -/* 037720 7F004D30 8E0E0010 */ lw $t6, 0x10($s0) -/* 037724 7F004D34 11C00010 */ beqz $t6, .L7F004DF4 -/* 037728 7F004D38 00000000 */ nop -/* 03772C 7F004D3C 1040000E */ beqz $v0, .L7F004DF4 -/* 037730 7F004D40 00000000 */ nop -/* 037734 7F004D44 8C580010 */ lw $t8, 0x10($v0) -/* 037738 7F004D48 1300000B */ beqz $t8, .L7F004DF4 -/* 03773C 7F004D4C 00000000 */ nop -/* 037740 7F004D50 92080003 */ lbu $t0, 3($s0) -/* 037744 7F004D54 02402025 */ move $a0, $s2 -/* 037748 7F004D58 16880007 */ bne $s4, $t0, .L7F004DF4 -/* 03774C 7F004D5C 00000000 */ nop -/* 037750 7F004D60 AE500004 */ sw $s0, 4($s2) -/* 037754 7F004D64 0FC0064A */ jal initSetLevelLoadPropLockDoor -/* 037758 7F004D68 AE420008 */ sw $v0, 8($s2) -/* 03775C 7F004D6C 8E090064 */ lw $t1, 0x64($s0) -/* 037760 7F004D70 35392000 */ ori $t9, $t1, 0x2000 -/* 037764 7F004D74 AE190064 */ sw $t9, 0x64($s0) -.L7F004DF4: -/* 037768 7F004D78 0FC15AF5 */ jal sizepropdef -/* 03776C 7F004D7C 02402025 */ move $a0, $s2 -/* 037770 7F004D80 00025080 */ sll $t2, $v0, 2 -/* 037774 7F004D84 01529021 */ addu $s2, $t2, $s2 -/* 037778 7F004D88 92430003 */ lbu $v1, 3($s2) -/* 03777C 7F004D8C 24010030 */ li $at, 48 -/* 037780 7F004D90 26730001 */ addiu $s3, $s3, 1 -/* 037784 7F004D94 5461FF52 */ bnel $v1, $at, .L7F004B5C -/* 037788 7F004D98 2469FFFD */ addiu $t1, $v1, -3 -/* 03778C 7F004D9C 1000001B */ b .L7F004E88 -/* 037790 7F004DA0 00000000 */ nop -.L7F004E20: -/* 037794 7F004DA4 3C018006 */ lui $at, %hi(g_CurrentSetup+0) # $at, 0x8006 -/* 037798 7F004DA8 AC204C40 */ sw $zero, %lo(g_CurrentSetup+0)($at) -/* 03779C 7F004DAC 3C018006 */ lui $at, %hi(g_CurrentSetup+4) # $at, 0x8006 -/* 0377A0 7F004DB0 AC204C44 */ sw $zero, %lo(g_CurrentSetup+4)($at) -/* 0377A4 7F004DB4 3C018006 */ lui $at, %hi(g_CurrentSetup+8) # $at, 0x8006 -/* 0377A8 7F004DB8 AC204C48 */ sw $zero, %lo(g_CurrentSetup+8)($at) -/* 0377AC 7F004DBC 3C018006 */ lui $at, %hi(g_CurrentSetup+0x0c) # $at, 0x8006 -/* 0377B0 7F004DC0 AC204C4C */ sw $zero, %lo(g_CurrentSetup+0x0c)($at) -/* 0377B4 7F004DC4 3C018006 */ lui $at, %hi(g_CurrentSetup+0x10) # $at, 0x8006 -/* 0377B8 7F004DC8 AC204C50 */ sw $zero, %lo(g_CurrentSetup+0x10)($at) -/* 0377BC 7F004DCC 3C018006 */ lui $at, %hi(g_CurrentSetup+0x14) # $at, 0x8006 -/* 0377C0 7F004DD0 AC204C54 */ sw $zero, %lo(g_CurrentSetup+0x14)($at) -/* 0377C4 7F004DD4 3C018006 */ lui $at, %hi(g_CurrentSetup+0x18) # $at, 0x8006 -/* 0377C8 7F004DD8 AC204C58 */ sw $zero, %lo(g_CurrentSetup+0x18)($at) -/* 0377CC 7F004DDC 3C018006 */ lui $at, %hi(g_CurrentSetup+0x1C) # $at, 0x8006 -/* 0377D0 7F004DE0 AC204C5C */ sw $zero, %lo(g_CurrentSetup+0x1C)($at) -/* 0377D4 7F004DE4 3C018006 */ lui $at, %hi(g_CurrentSetup+0x20) # $at, 0x8006 -/* 0377D8 7F004DE8 AC204C60 */ sw $zero, %lo(g_CurrentSetup+0x20)($at) -/* 0377DC 7F004DEC 3C018006 */ lui $at, %hi(g_CurrentSetup+0x24) # $at, 0x8006 -/* 0377E0 7F004DF0 AC204C64 */ sw $zero, %lo(g_CurrentSetup+0x24)($at) -/* 0377E4 7F004DF4 0FC003AE */ jal alloc_init_GUARDdata_entries -/* 0377E8 7F004DF8 00002025 */ move $a0, $zero -/* 0377EC 7F004DFC 0FC01538 */ jal sub_GAME_7F005540 -/* 0377F0 7F004E00 00002025 */ move $a0, $zero -/* 0377F4 7F004E04 0FC01571 */ jal sub_GAME_7F005624 -/* 0377F8 7F004E08 00002025 */ move $a0, $zero -.L7F004E88: -/* 0377FC 7F004E0C 0FC00417 */ jal alloc_false_GUARDdata_to_exec_global_action -/* 037800 7F004E10 00000000 */ nop -/* 037804 7F004E14 8FBF0044 */ lw $ra, 0x44($sp) -/* 037808 7F004E18 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 03780C 7F004E1C 8FB00020 */ lw $s0, 0x20($sp) -/* 037810 7F004E20 8FB10024 */ lw $s1, 0x24($sp) -/* 037814 7F004E24 8FB20028 */ lw $s2, 0x28($sp) -/* 037818 7F004E28 8FB3002C */ lw $s3, 0x2c($sp) -/* 03781C 7F004E2C 8FB40030 */ lw $s4, 0x30($sp) -/* 037820 7F004E30 8FB50034 */ lw $s5, 0x34($sp) -/* 037824 7F004E34 8FB60038 */ lw $s6, 0x38($sp) -/* 037828 7F004E38 8FB7003C */ lw $s7, 0x3c($sp) -/* 03782C 7F004E3C 8FBE0040 */ lw $fp, 0x40($sp) -/* 037830 7F004E40 03E00008 */ jr $ra -/* 037834 7F004E44 27BD0280 */ addiu $sp, $sp, 0x280 - ) -#endif - - -#endif - - diff --git a/src/game/prop.h b/src/game/prop.h index 80a27be6..75935171 100644 --- a/src/game/prop.h +++ b/src/game/prop.h @@ -4,6 +4,6 @@ extern const u32 only_read_by_stageload[]; -void proplvreset2(s32); +void proplvreset2(enum LEVELID stageId); #endif diff --git a/src/game/propobj.c b/src/game/propobj.c index ee39b5fe..0ae7a3f4 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -12,67 +12,151 @@ #include #include #include -#include +#include #include #include #include #include +#include "propobj.h" +#include "assets/obseg/text/LpropobjE.h" #include "bg.h" -#include "bondview.h" +#include "bgfog.h" +#include "bondaicommands.h" #include "bondinv.h" +#include "bondview.h" #include "chr.h" #include "chrai.h" #include "chraction.h" #include "chrobjdata.h" -#include "propobj.h" #include "explosion.h" -#include "bgfog.h" +#include "fr.h" +#include "glass.h" +#include "gun.h" +#include "image_bank.h" #include "lv.h" #include "language.h" #include "math_floor.h" #include "math_asinfacosf.h" #include "math_atan2f.h" #include "matrixmath.h" +#include "model.h" #include "objecthandler.h" +#include "objective_status.h" #include "player.h" #include "quaternion.h" -#include -#include "stan.h" -#include "assets/obseg/text/LpropobjE.h" -#include "explosion.h" -#include "image_bank.h" #include "random.h" +#include "stan.h" #include "stanintersection.h" +#include "tex.h" #include "textrelated.h" -#include "gun.h" -#include "fr.h" -#include "objective_status.h" -#include "model.h" +#include "vtxstore.h" -#ifdef VERSION_EU +#if defined(VERSION_JP) || defined(VERSION_EU) +#define MONITOR_TIMER_DELTA g_JP_GlobalTimerDelta +#else +#define MONITOR_TIMER_DELTA g_GlobalTimerDelta +#endif -#define CHROBJ_TIMETOREGEN 50 -#define CHROBJ_TIMETOREGEN_F 50.0f -#define CHROBJ_GAS_TIMER 0x5dc /* 1500 */ +#if defined(VERSION_JP) +#define OBJECT_INTERACTION_TIMER_DELTA g_JP_GlobalTimerDelta +#else +#define OBJECT_INTERACTION_TIMER_DELTA g_GlobalTimerDelta +#endif -#define PLASTIQUE_EXPLOSION_DELAY_TICKS 100 +#define PROXIMITY_MINE_TRIGGER_DISTANCE 62500.0f + +// aprox 135 deg/s/s divided by 60fps +// (135/60/60/(180/M_PI_F)) +#define CAM_ACCEL 0.00065449846f + +// 34.3 deg/s/s +#define AUTOGUN_SPIN_ACCEL_PER_FRAME 0.009973311f + +// 2058 deg/s or 5.7 rotations per second +#define AUTOGUN_SPIN_MAX_SPEED 0.5983986f + +//If squared speed exceeds this, the rocket stops accelerating. This corresponds to ~166.6 units/s. +#define ROCKET_SPEED_BREAK_THRESHOLD 27777.773f + +//Horizontal friction applied when projectile is sliding. +#define PROJECTILE_FRICTION_FACTOR 0.9f + +#if defined(VERSION_EU) + +#define AUTOGUN_YAW_MAX_SPEED 0.0008377581f + +#define AUTOGUN_YAW_ACCEL_PER_FRAME 0.0000139626345f + +#define AUTOGUN_PITCH_ACCEL_PER_FRAME 0.0000069813173f + +#define AUTOGUN_PITCH_MAX_SPEED 0.00041887906f + +#define AUTOGUN_ALERT_ACCEL_PER_FRAME 0.0010471976f + +#define AUTOGUN_TRACKING_FRAMES 100 + +#define TRUCK_TURN_ACCEL_PER_FRAME 0.0001308997f + +#define TRUCK_TURN_DECEL_PER_FRAME 0.0002617994f + +#define TRUCK_TURN_MAX_SPEED 0.007853982f + +#define PROJECTILE_LIFETIME_FRAMES 2000 + +#define GRENADE_SMOKE_FRAMES 0xFB + +#define CCTV_ALARM_FRAMES 250.0f #else -#define CHROBJ_TIMETOREGEN 60 -#define CHROBJ_TIMETOREGEN_F 60.0f -#define CHROBJ_GAS_TIMER 0x708 /* 1800 */ -#define PLASTIQUE_EXPLOSION_DELAY_TICKS 120 +// 2.4 deg/s (2.4/60/(180/M_PI_F})) +#define AUTOGUN_YAW_MAX_SPEED 0.00069813174f + +// 2.4 deg/s/s (2.4/60/60/(180/M_PI_F)) +#define AUTOGUN_YAW_ACCEL_PER_FRAME 0.000011635529f + +// 1.2 deg/s +#define AUTOGUN_PITCH_ACCEL_PER_FRAME 0.0000058177643f + +// 1.2 deg/s/s +#define AUTOGUN_PITCH_MAX_SPEED 0.00034906587f + +//Faster rotation when autogun is actively tracking. 3 deg/s +#define AUTOGUN_ALERT_ACCEL_PER_FRAME 0.0008726647f + +#define AUTOGUN_TRACKING_FRAMES 120 + +//0.375 deg/s/s - hmm, wheels maybe? +#define TRUCK_TURN_ACCEL_PER_FRAME 0.000109083085f + +//0.75 deg/s/s +#define TRUCK_TURN_DECEL_PER_FRAME 0.00021816617f + +// 22.5 deg/s +#define TRUCK_TURN_MAX_SPEED 0.006544985f + +// 40 seconds +#define PROJECTILE_LIFETIME_FRAMES 2400 + +#define GRENADE_SMOKE_FRAMES 301 + +#define CCTV_ALARM_FRAMES 300.0f #endif +/* From the decomp.me ctx -- not present in any repo header. Without the macro, + * C89 turns U32_TO_F32(...) into an implicit function call (5 sites, ~31 insns + * short, wrong FP allocation everywhere downstream). */ +#define U32MAX 4294967295 +#define U32_TO_F32(x) (x*(1.0f/U32MAX)) -#define PROXIMITY_MINE_TRIGGER_DISTANCE 62500.0f - - - +/* The two named pool constants from the retired GLOBAL_ASM block. Both are the + * compiler's own literal pool regenerated from these literals (menu18 precedent); + * value 0x3e8e38e4 = 0.27777779f in both slots of the shipped pool. */ +#define ROCKET_INITIAL_GRAVITY_MODIFIER 0.27777779f +#define PROP_PROJECTILE_GRAVITY_MODIFIER 0.27777779f /* 0x80030AC8 */ s32 alarm_timer = 0; /* 0x80030ACC */ s32 *ptr_alarm_sfx = 0; @@ -104,7 +188,2199 @@ */ f32 g_SoloAmmoMultiplier = 1.0; -s16 Throwing_knife_SFX[] = {0x5F, 0x60, 0x61}; +extern struct ModelAnimation *animation_table_ptrs2[]; + +struct tvcmd { + u32 type; + s32 time; + u32 arg2; +}; + +// Forward declarations. + +s32 updateDoorDisplacement(DoorRecord* door); +s32 objGetShotsTaken(ObjectRecord *); +void sub_GAME_7F04AC20(PropRecord *prop, ModelRenderData *, s32 arg2); +bool chrobjSeparatingAxisTheorem(rect4f* rect1, s32 numvertices0, rect4f* rect2, s32 numvertices1); +void chrobjSndCreatePostEvent(ALSoundState *state, coord3d *pos, f32 low, f32 high); +void remove_obj_from_temp_proxmine_table(WeaponObjRecord* proxy); +void add_obj_to_temp_proxmine_table(WeaponObjRecord* proxy); +s32 sub_GAME_7F042EB4(struct ObjectRecord *arg0, f32 *arg1, struct coord3d *arg2, struct coord3d *arg3, s32 arg4, s32 arg5); +s32 objTryMovePropWithCollision(ObjectRecord *obj, coord3d *arg1, coord3d *arg2, coord3d *arg3, s32 arg4); +s32 handles_projectile_motion(struct ObjectRecord *arg0, coord3d *arg1, coord3d *arg2, coord3d *arg3, s32 arg4, s32 arg5); +void objSettle(struct ObjectRecord *arg0, struct coord3d *arg1); +void door7F054FB4(struct DoorRecord *arg0); +void door7F0526EC(DoorRecord *door, Mtxf *rhs); +void objBreakCCTVGlass(ObjectRecord *obj); +void save_img_index_to_obj_ani_slot(MonitorRecord *mon, void *unk88); +void save_ptr_monitor_ani_code_to_obj_ani_slot(MonitorRecord *mon, void *image); +s32 sub_GAME_7F06C010(ModelHitEntry **entryptr, coord3d *modelRayStart, coord3d *modelRayDir, Model **outModel, ModelNode **outNode); +AmmoCrateRecord *ammocrateAllocate(void); +ModelNode* sub_GAME_7F04B478(ObjectRecord* obj); +bool sub_GAME_7F04B590(ModelFileHeader* arg0, ModelNode* arg1); +void detonate_proxmine_In_range(coord3d *pos); +void doorDeactivatePortal(DoorRecord *door); +void doorSetOpenState(DoorRecord *door, s32 state); +s32 sub_GAME_7F053894(coord3d *pos, f32 low, f32 high); +void sub_GAME_7F053A3C(DoorRecord *door); + +// End forward declarations. + +u32 chrObjRandomGetNext(void); + +/* PD: projectileFree (similar but not the same structure) */ +void projectileFree(Projectile* projectile) +{ + ALSoundState* sound1; + ALSoundState* sound2; + + if (projectile->flags & PROJECTILEFLAG_LAUNCHING) + { + sound1 = projectile->sounds[0]; + if ((sound1 != 0) && (sndGetPlayingState((ALSoundState* ) sound1) != 0)) + { + sndDeactivate((ALSoundState* ) projectile->sounds[0]); + } + + sound2 = projectile->sounds[1]; + if ((sound2 != 0) && (sndGetPlayingState((ALSoundState* ) sound2) != 0)) + { + sndDeactivate((ALSoundState* ) projectile->sounds[1]); + } + } + projectile->flags |= PROJECTILEFLAG_FREE; +} + + +void projectileReset(Projectile *projectile) +{ + projectile->flags = 0; + + projectile->speed.x = 0.0f; + projectile->speed.y = 0.0f; + projectile->speed.z = 0.0f; + + projectile->unk10.x = 0.0f; + projectile->unk10.y = 0.0f; + projectile->unk10.z = 0.0f; + + projectile->unk1C = 0.0f; + + projectile->unk60 = 1.0f; + projectile->ownerprop = NULL; + projectile->unk8C = 0.05f; + projectile->unk90 = 0; + projectile->unk94 = 0.0f; + projectile->lastSfxTimer = -1; + projectile->soundSlot = 0; + projectile->unkA8 = 0; + projectile->unkAC = -1; + projectile->droptype = DROPTYPE_DEFAULT; + projectile->refreshrate = 0; + projectile->unkC0 = 1.0f; + projectile->unkC4 = 1.0f; + projectile->unkC8 = 1.0f; + projectile->age = 0; + projectile->obj = 0; + projectile->unkE8 = 0; +} + + +Projectile *projectileAllocate(void) +{ + s32 bestindex; + s32 i; + + bestindex = -1; + + // Happy path - find one that is already free + for (i = 0; i < PROJECTILES_ARR_MAX; i++) + { + if (g_Projectiles[i].flags & PROJECTILEFLAG_FREE) + { + projectileReset(g_Projectiles + i); + return (g_Projectiles + i); + } + } + + // Find one with the lowest unkE8 (some kind of age/timer?) + // and some other conditions + for (i = 0; i < PROJECTILES_ARR_MAX; i++) + { + if (g_Projectiles[i].obj && (bestindex < 0 || g_Projectiles[i].unkE8 < g_Projectiles[bestindex].unkE8)) + { + bestindex = i; + } + } + + if (bestindex >= 0) + { + // Reset and return it + objFreeEmbedmentOrProjectile(g_Projectiles[bestindex].obj->prop); + g_Projectiles[bestindex].obj->runtime_bitflags |= RUNTIMEBITFLAG_REMOVE; + + projectileReset(g_Projectiles + bestindex); + return (g_Projectiles + bestindex); + } + else + { + return NULL; + } +} + + +void sub_GAME_7F03FDA8(PropRecord *prop) +{ + ObjectRecord *po = prop->obj; //canonical name + if (po->runtime_bitflags & RUNTIMEBITFLAG_EMBEDDED) + { + #ifdef DEBUG + assert(po->move.attach->fallinfo==NULL); + #endif + po->embedment->projectile = projectileAllocate(); + } + else if ((po->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) == 0) + { + po->projectile = projectileAllocate(); + + if (po->projectile) + { + po->runtime_bitflags |= RUNTIMEBITFLAG_HASPROJECTILE; + } + } +} + + +void projectileSetSticky(PropRecord *prop) +{ + ObjectRecord *obj = prop->obj; + Projectile *projectile = NULL; + + if (obj->runtime_bitflags & RUNTIMEBITFLAG_EMBEDDED) + { + projectile = obj->embedment->projectile; + } + else if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) + { + projectile = obj->projectile; + } + + if (projectile) + { + projectile->flags |= PROJECTILEFLAG_STICKY; + if (prop->stan) + { + projectile->unkCC[0] = prop->stan->room; + projectile->unkCC[1] = 0xFF; + return; + } + projectile->unkCC[0] = 0xFFU; + } +} + + +void embedmentFree(Embedment *embedment) +{ + embedment->flags |= EMBEDMENTFLAG_FREE; +} + + +Embedment *embedmentAllocate(void) +{ + s32 i; + + for (i = 0; i < EMBEDMENT_ARR_MAX; i++) + { + if (g_Embedments[i].flags & 1) + { + g_Embedments[i].flags = 0; + g_Embedments[i].projectile = NULL; + return &g_Embedments[(u32)i]; + } + } + + return NULL; +} + + +/** + * This doesn't exactly return the number of shots taken but it's the best way + * to describe the behaviour of the function without writing a novel into the + * function's name. + * + * The number returned is 0 when at full health and only ever increments as the + * object takes damage. While healthy, the number scales from 0 to 4 based on + * how close it is to being destroyed, where 4 is destroyed. After being + * destroyed, the number increments at 1 per shot up to a max of 12. + */ + +s32 objGetShotsTaken(ObjectRecord *obj) +{ + if (!(obj->state & PROPSTATE_DESTROYED)) + { + return (obj->maxdamage * 3.0f) / obj->damage; + } + + return obj->maxdamage + 4.0f; +} + + +/** + * Return 0 if not destroyed + * Return 1 if at destroyed level 1 + * Return 2 if at destroyed level 2 + * Return 3 if at destroyed level 3 + * + * Each destroyed level is a new phase of visual brokenness. Typically the + * object is destroyed and it looks broken (level 1), then after a couple of + * shots it enters level 2, and a few shots later level 3. + * + * While healthy, damage goes from 0 to maxdamage (eg. 1000) but this function + * returns 0 due to the if statement. + * + * When destroyed, damage is reset to 0 then incremented at one unit per shot, + * so four shots causes it to enter a new destroyed level. + */ + +s32 objGetDestroyedLevel(ObjectRecord *obj) +{ + if (!(obj->state & PROPSTATE_DESTROYED)) + { + return 0; //if Not Dead + } + return ((s32) obj->maxdamage >> 2) + 1; +} + + +ModelRoData_BoundingBoxRecord *chrobjGetBboxFromObjFile(ModelFileHeader *obj) +{ + ModelNode *mdlnext; + + if (obj->RootNode->Child) + { + //for each next node, check for BBox + for (mdlnext = obj->RootNode->Child; mdlnext; mdlnext = mdlnext->Next) + { + if (mdlnext->Opcode == MODELNODE_OPCODE_BBOX) + { + return mdlnext->Data; + } + } + + //none found, check FIRST child + if (obj->RootNode->Child->Child) + { + //for each next node, check for BBox + for (mdlnext = obj->RootNode->Child->Child; mdlnext; mdlnext = mdlnext->Next) + { + if (mdlnext->Opcode == MODELNODE_OPCODE_BBOX) + { + return mdlnext->Data; + } + } + } + } + return NULL; +} + + +struct ModelRoData_BoundingBoxRecord* chrobjGetBboxFromObjectRecord(ObjectRecord *arg0) +{ + return (struct ModelRoData_BoundingBoxRecord *)chrobjGetBboxFromObjFile(arg0->model->obj); +} + + +void set_color_shading_from_tile(PropRecord *prop, u8 col[4]) +{ + s32 tmp; + s32 min; + s32 med; + s32 max; + s32 tmp2; + s32 range; + + copy_tile_RGB_as_24bit(prop->stan, prop->pos.x, prop->pos.z, col); + + tmp = (col[0] * 79 + col[1] * 156 + col[2] * 21) >> 8; + col[3] = (255 - tmp) * 0.75f; + + max = 0; + min = 0; + med = 0; + + if (col[1] > col[0]) { + max = 1; + } else { + min = 1; + } + + if (col[2] > col[max]) { + med = max; + max = 2; + } else if (col[2] > col[min]) { + med = 2; + } else { + med = min; + min = 2; + } + + if (col[max] > 0) { + tmp2 = col[med] * (col[max] - col[min]) / col[max]; + range = col[max] - col[min]; + col[min] = 0; + col[med] = tmp2; + col[max] = range; + } + + col[0] >>= 1; + col[1] >>= 1; + col[2] >>= 1; +} + + +/* + * Address: 0x7F0402B4 +*/ +void sub_GAME_7F0402B4(PropRecord *prop, rgba_u8 *color) +{ + struct DoorRecord *door = prop->door; + if (door->flags & 0x400 ){ return; } + + set_color_shading_from_tile(prop, color); + color->r >>= 1; + color->g >>= 1; + color->b >>= 1; +} + + +void update_color_shading(rgba_u8 *dest, rgba_u8 *src) +{ + s32 val_diff; + s32 val_new; + s32 i; + + for (i = 0; i < 4; i++) + { + val_diff = (src->rgba[i] - dest->rgba[i]); + val_new = dest->rgba[i] + ((val_diff + 7) >> 3); + dest->rgba[i] = val_new; + } +} + + +/* + * Address: 0x7F040384 +*/ +void lerp_rgba_s32_with_rgba_f32(rgba_s32* dest, s32 enable, rgba_f32* src) +{ + if (enable == 1) + { + src->r *= 255.0f; + src->g *= 255.0f; + src->b *= 255.0f; + + if (1) { dest->r = (s32)((src->a * (src->r - dest->r)) + dest->r); } + if (1) { dest->g = (s32)((src->a * (src->g - dest->g)) + dest->g); } + if (1) { dest->b = (s32)((src->a * (src->b - dest->b)) + dest->b); } + dest->a = (s32)((src->a * (255.0f - dest->a)) + dest->a); + } +} + + +/** + * Address 0x7F040484. +*/ +void chrobjCollisionRelated(ObjectRecord *obj) +{ + struct ModelRoData_BoundingBoxRecord *bbox; + Mtxf sp24; + + if (obj->ptr_allocated_collisiondata_block != NULL) + { + bbox = chrobjGetBboxFromObjectRecord(obj); + matrix_4x4_copy(&obj->mtx, &sp24); + matrix_4x4_set_position(&obj->runtime_pos, &sp24); + sub_GAME_7F03F540(bbox, &sp24, &obj->ptr_allocated_collisiondata_block->polygon, obj->ptr_allocated_collisiondata_block); + + obj->ptr_allocated_collisiondata_block->bottom = obj->runtime_pos.f[1] + chrpropSumMatrixPosY(bbox, &sp24); + obj->ptr_allocated_collisiondata_block->top = obj->runtime_pos.f[1] + chrpropSumMatrixNegY(bbox, &sp24); + + if (obj->type == PROPDEF_AIRCRAFT) + { + obj->ptr_allocated_collisiondata_block->bottom -= 200.0f; + } + } +} + + +PropRecord* objInit(ObjectRecord* obj, ModelFileHeader* model_header, PropRecord* prop, Model* model) +{ + if (prop == NULL) + { + prop = chrpropAllocate(); + } + + if (model == NULL) + { + if (obj->type == PROPDEF_AIRCRAFT) + { + model = modelmgrInstantiateModelWithAnim(model_header); + } + else + { + model = modelmgrInstantiateModel(model_header); + } + } + + if ((prop != NULL) && (model != NULL)) + { + obj->model = model; + obj->ptr_allocated_collisiondata_block = NULL; + + if (obj->flags & 0x100) + { + obj->ptr_allocated_collisiondata_block = mempAllocBytesInBank(0x50U, MEMPOOL_STAGE); + obj->state = (u8) (obj->state | PROPSTATE_EXT_COLISION_BLOCK); + } + else + { + obj->state = (u8) (obj->state & 0xFFF7); + } + + obj->prop = prop; + obj->projectile = NULL; + + obj->shadecol.r = 0; + obj->shadecol.g = 0; + obj->shadecol.b = 0; + obj->shadecol.a = 0; + + obj->nextcol.r = 0; + obj->nextcol.g = 0; + obj->nextcol.b = 0; + obj->nextcol.a = 0; + + obj->maxdamage = 0.0f; + *((s16*)&obj->model->unk00) = -1; + obj->model->chr = NULL; + modelSetScale(obj->model, PitemZ_entries[obj->obj].scale); + prop->type = 1; + prop->obj = obj; + prop->pos.x = 0.0f; + obj->runtime_pos.x = 0.0f; + prop->pos.y = 0.0f; + obj->runtime_pos.y = 0.0f; + prop->pos.z = 0.0f; + obj->runtime_pos.z = 0.0f; + prop->stan = NULL; + } + else + { + if (model != NULL) + { + if (obj->type == PROPDEF_AIRCRAFT) + { + clear_aircraft_model_obj(model); + } + else + { + clear_model_obj(model); + } + } + + if (prop != NULL) + { + chrpropFree(prop); + prop = NULL; + } + } + + return prop; +} + + +PropRecord* objInitWithModelDef(ObjectRecord* object, ModelFileHeader* header) +{ + return objInit(object, header, 0, 0); +} + + +PropRecord* objInitWithAutoModel(ObjectRecord* obj) +{ + return objInitWithModelDef(obj, PitemZ_entries[obj->obj].header); +} + + +// Changes the color shade on the object, e.g. when walking in a darker area or under a colored light. +void objChangeShading(ObjectRecord* obj, coord3d* pos, Mtxf* matrix, StandTile* stan) { + + PropRecord *prop = obj->prop; + + matrix_4x4_copy(matrix, &obj->mtx); + + obj->runtime_pos.x = prop->pos.x = pos->x; + obj->runtime_pos.y = prop->pos.y = pos->y; + obj->runtime_pos.z = prop->pos.z = pos->z; + + prop->stan = stan; + + sub_GAME_7F0402B4(obj->prop, &obj->nextcol); + + obj->shadecol.r = obj->nextcol.r; + obj->shadecol.g = obj->nextcol.g; + obj->shadecol.b = obj->nextcol.b; + obj->shadecol.a = obj->nextcol.a; +} + + +// Unreferenced function (unused) +void sub_GAME_7F0407F4(ObjectRecord* obj, coord3d* pos, Mtxf* matrix, StandTile* stan) +{ + u32 a; // Adds 4 bytes to the stack so it matches. Could be anything 4 bytes long. + struct ModelRoData_BoundingBoxRecord *modelunk = chrobjGetBboxFromObjFile(obj->model->obj); + + pos->y = stanGetPositionYValue(stan, pos->x, pos->z) + 4.0f; + pos->y = pos->y - chrpropSumMatrixPosY(modelunk, matrix); + + objChangeShading(obj, pos, matrix, stan); + chrobjCollisionRelated(obj); +} + + +//moveToPad +void sub_GAME_7F04088C(ObjectRecord *baseobj, struct coord3d *pos, Mtxf *matrix, StandTile *stan, struct coord3d *pos2) +{ + int padd[1]; + ModelRoData_BoundingBoxRecord *modelBoundingBox; + f32 xmax; + f32 ymin; + coord3d newPos; + StandTile *mStan; + Mtxf mtxcopy; + + modelBoundingBox = chrobjGetBboxFromObjFile(baseobj->model->obj); + xmax = chrpropBBOXGetYmin(modelBoundingBox); + ymin = chrpropBBOXGetYmax(modelBoundingBox); + mStan = stan; + + if (baseobj->flags & 4) + { + matrix_4x4_set_rotation_around_z(M_PI, &mtxcopy); + matrix_4x4_multiply_in_place(matrix, &mtxcopy); + newPos.x = pos2->f[0] - (mtxcopy.m[1][0] * ymin); + newPos.y = pos2->f[1] - (mtxcopy.m[1][1] * ymin); + newPos.z = pos2->f[2] - (mtxcopy.m[1][2] * ymin); + } + else if (baseobj->flags & 8) + { + matrix_4x4_copy(matrix, &mtxcopy); + newPos.x = pos2->f[0] - (mtxcopy.m[1][0] * xmax); + newPos.y = pos2->f[1] - (mtxcopy.m[1][1] * xmax); + newPos.z = pos2->f[2] - (mtxcopy.m[1][2] * xmax); + } + else + { + ObjectRecord *roomObj; + f32 distfromTileCenter; + f32 byrefA; + f32 byrefB; + f32 byrefC; + f32 byrefD; + + distfromTileCenter = stanGetPositionYValue(mStan, pos->f[0], pos->f[2]); + + matrix_4x4_copy(matrix, &mtxcopy); + newPos.x = pos2->f[0] - (mtxcopy.m[1][0] * xmax); + newPos.z = pos2->f[2] - (mtxcopy.m[1][2] * xmax); + roomObj = sub_GAME_7F03FAB0(pos, stan->room); + + if (roomObj) + { + PropRecord *roomObjProp = roomObj->prop; + chraiGetCollisionBounds(roomObjProp, &byrefA, &byrefB, &byrefC, &byrefD); + + if ((distfromTileCenter < byrefC) && (byrefD < ((mtxcopy.m[1][1] * (ymin - xmax)) + distfromTileCenter + 4.0f))) + { + newPos.y = byrefC - (mtxcopy.m[1][1] * xmax); + baseobj->runtime_bitflags |= RUNTIMEBITFLAG_00008000; + } + else + { + newPos.y = (distfromTileCenter - (mtxcopy.m[1][1] * xmax)) + 4.0f; + } + } + else + { + newPos.y = (distfromTileCenter - (mtxcopy.m[1][1] * xmax)) + 4.0f; + } + } + + if (!(baseobj->flags2 & 1) && walkTilesBetweenPoints_NoCallback(&mStan, pos->f[0], pos->f[2], newPos.x, newPos.z)) + { + objChangeShading(baseobj, &newPos, &mtxcopy, mStan); + } + else + { + objChangeShading(baseobj, pos, &mtxcopy, stan); + if ((baseobj->flags2 & 1) || (baseobj->flags & 0x1000)) + { + baseobj->runtime_pos.x = newPos.x; + baseobj->runtime_pos.y = newPos.y; + baseobj->runtime_pos.z = newPos.z; + } + #ifdef DEBUG + else + { + osSyncPrintf("prop not positioned correctly!\n"); + } + #endif + } + + chrobjCollisionRelated(baseobj); +} + + +void sub_GAME_7F040BA0(ObjectRecord *obj, coord3d *pos, Mtxf *arg2, StandTile *stan2, coord3d *pos2) +{ + Mtxf *sp6C_ptr; + f32 (*sp6Cm_ptr)[4]; + f32 spBC; + coord3d posdiff; + StandTile *stan; + Mtxf matrix; + Mtxf sp2C; + + spBC = chrpropBBOXGetZmin(chrobjGetBboxFromObjFile(obj->model->obj)); + stan = stan2; + sp6C_ptr = &matrix; + + matrix_4x4_set_rotation_around_x(4.712389f, sp6C_ptr); + + sp6Cm_ptr = matrix.m; + + matrix_4x4_set_rotation_around_y(M_PI_F, &sp2C); + matrix_4x4_multiply_in_place(&sp2C, sp6C_ptr); + matrix_4x4_multiply_in_place(arg2, &matrix); + + posdiff.x = pos2->x - (sp6Cm_ptr[2][0] * spBC); + posdiff.y = pos2->y - (sp6Cm_ptr[2][1] * spBC); + posdiff.z = pos2->z - (sp6Cm_ptr[2][2] * spBC); + + if ((!(((s32) obj->flags2) & 1)) && (walkTilesBetweenPoints_NoCallback(&stan, pos->x, pos->z, posdiff.x, posdiff.z) != 0)) + { + objChangeShading(obj, &posdiff, &matrix, stan); + } + else + { + objChangeShading(obj, pos, &matrix, stan2); + obj->runtime_pos.x = posdiff.x; + obj->runtime_pos.y = posdiff.y; + obj->runtime_pos.z = posdiff.z; + } + + chrobjCollisionRelated(obj); +} + + +void objFreeEmbedmentOrProjectile(PropRecord *prop) +{ + ObjectRecord *obj = prop->obj; + if (obj->runtime_bitflags & RUNTIMEBITFLAG_EMBEDDED) + { + if (obj->embedment) + { + if (obj->embedment->projectile) + { + projectileFree(obj->embedment->projectile); + } + #ifdef DEBUG + else + { + osSyncPrintf("ERROR: PROPHIDD_ATTACHED was, but move.attach was NULL\a\n"); + osSyncPrintf("po->obj=%d\n", obj->obj); + osSyncPrintf("p->flags=%08x\n", prop->flags); + osSyncPrintf("po->flags2=%08x\n", obj->flags2); + osSyncPrintf("p->timetoregen=%d\n", prop->timetoregen); + } + #endif + + embedmentFree(obj->embedment); + } + obj->embedment = NULL; + obj->runtime_bitflags &= ~RUNTIMEBITFLAG_EMBEDDED; + } + else if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) + { + projectileFree(obj->projectile); + obj->projectile = NULL; + obj->runtime_bitflags &= ~RUNTIMEBITFLAG_HASPROJECTILE; + } +} + + +void objFree(ObjectRecord* obj, s32 freeprop, s32 canregen) +{ + PropRecord *child; + + if (obj->type == PROPDEF_AUTOGUN) + { + AutogunRecord* record = (AutogunRecord*)obj; + if ((record->unkC4 != NULL) && (sndGetPlayingState(record->unkC4) != 0)) + { + sndDeactivate(record->unkC4); + } + + if ((record->unkC8 != NULL) && (sndGetPlayingState(record->unkC8) != 0)) + { + sndDeactivate(record->unkC8); + } + } + else if (obj->type == PROPDEF_COLLECTABLE) + { + WeaponObjRecord* record = (WeaponObjRecord*) obj; + WeaponObjRecord* record2 = record->dualweapon; + if (record2 != NULL) + { + record2->dualweapon = NULL; + record->dualweapon = NULL; + } + } + else if (obj->type == PROPDEF_DOOR) + { + DoorRecord* record = (DoorRecord*) obj; + if ((record->openSoundState != NULL) && (sndGetPlayingState(record->openSoundState) != 0)) + { + sndDeactivate(record->openSoundState); + } + + if ((record->closeSoundState != NULL) && (sndGetPlayingState(record->closeSoundState) != 0)) + { + sndDeactivate(record->closeSoundState); + } + } + else if (obj->type == PROPDEF_TINTED_GLASS) + { + TintedGlassRecord* record = (TintedGlassRecord*) obj; + if (record->portalnum >= 0) + { + bgToggleDataPortalsContrlBytes1Bit1(record->portalnum, 1); + } + } + else if (obj->type == PROPDEF_AIRCRAFT) + { + AircraftRecord* record = (AircraftRecord*) obj; + if ((record->Sound != NULL) && (sndGetPlayingState(record->Sound) != 0)) + { + sndDeactivate(record->Sound); + } + } + else if (obj->type == PROPDEF_VEHICHLE) + { + VehichleRecord* record = (VehichleRecord*) obj; + if ((record->Sound != NULL) && (sndGetPlayingState(record->Sound) != 0)) + { + sndDeactivate(record->Sound); + } + } + + if (obj->prop != NULL) + { + explosionClearBulletImpactRoomByFlag(obj->prop, FALSE); + explosionClearBulletImpactRoomByFlag(obj->prop, TRUE); + + if (canregen == 0) + { + objFreeEmbedmentOrProjectile(obj->prop); + + if (obj->prop->parent != NULL) + { + objDetach(obj->prop); + } + + chrpropDeregisterRooms(obj->prop); + + child = obj->prop->child; + while (child) + { + PropRecord* next = child->prev; + objFreePermanently(child->obj, TRUE); + child = next; + } + + if (obj->prop->type != PROP_TYPE_DOOR) + { + sub_GAME_7F050DE8(obj->model); + } + + if (obj->type == PROPDEF_AIRCRAFT) + { + clear_aircraft_model_obj(obj->model); + } + else + { + clear_model_obj(obj->model); + } + + if (freeprop != 0) + { + chrpropDelist(obj->prop); + chrpropDisable(obj->prop); + chrpropFree(obj->prop); + } + + obj->prop = NULL; + } + } +} + + +void objFreePermanently(struct ObjectRecord * obj, bool freeprop) +{ + objFree(obj, freeprop, 0); +} + + +float objGetWidth(struct ObjectRecord * obj) +{ + if (obj->type == PROP_TYPE_WEAPON) + { + return 20.0f; + } + return 10.0f; +} + + +/** + * Address: 7F041074 + */ +bool projectileTestPropBoundingSphere(coord3d *zeropos, coord3d *pos, coord3d *vec, f32 scale) +{ + vec3d vector; + f32 dist2rd; + + vector.x = vec->x - zeropos->x; + vector.y = vec->y - zeropos->y; + vector.z = vec->z - zeropos->z; + + dist2rd = pos->f[0] * vector.f[0] + pos->f[1] * vector.f[1] + pos->f[2] * vector.f[2]; + + if (dist2rd > 0) { + f32 a = pos->f[0] * pos->f[0] + pos->f[1] * pos->f[1] + pos->f[2] * pos->f[2]; + f32 b = vector.f[0] * vector.f[0] + vector.f[1] * vector.f[1] + vector.f[2] * vector.f[2]; + + if ((b - scale * scale) * a <= dist2rd * dist2rd) { + return TRUE; + } + } + + return FALSE; +} + + +/** + * Address: 7F041160 + */ +bool projectileLineTestModel(ObjectRecord *obj, coord3d *modelRayOrigin, coord3d *modelRayDir, coord3d *hitPos, coord3d *hitNormal, Model **hitModel, ModelNode **hitNode) +{ + bool found; + Mtxf *mtx; + ModelNode *node; + struct HitThing hitthing; + s32 mtxindex; + ModelNode *hitnode; + Model *model; + + model = obj->model; + found = 0; + node = NULL; + hitnode = NULL; + + // Fast path: test door bounding box. + if (obj->type == PROPDEF_DOOR) + { + found = modelTestRayIntersectsTransformedBBox(&((DoorRecord *)obj)->bbox, &model->render_pos[0].pos, modelRayOrigin, modelRayDir); + node = model->obj->RootNode; + if (found > 0) + { + if (propobjFindHit(model, node, modelRayOrigin, modelRayDir, &hitthing, &mtxindex, &hitnode) == 0) + { + found = 0; + } + } + // General case: traverse model's nodes for collision. + } + else + { + do + { + found = modelFindNextProjectileHitCandidate(model, modelRayOrigin, modelRayDir, &node); + + if (found > 0) + { + bool hit = propobjFindHit(model, node, modelRayOrigin, modelRayDir, &hitthing, &mtxindex, &hitnode); + if (hit != 0) + { + break; + } + } + } while (found > 0); + } + + if (found > 0) + { + mtx = &model->render_pos[mtxindex].pos; + + hitPos->x = hitthing.hitpos.x; + hitPos->y = hitthing.hitpos.y; + hitPos->z = hitthing.hitpos.z; + + mtx4TransformVecInPlace(mtx, hitPos); + mtx4TransformVecInPlace(currentPlayerGetViewToWorldMtxf(), hitPos); + + hitNormal->x = hitthing.normal.x; + hitNormal->y = hitthing.normal.y; + hitNormal->z = hitthing.normal.z; + + mtx4RotateVecInPlace(mtx, hitNormal); + + if (hitNormal->f[0] * modelRayDir->f[0] + hitNormal->f[1] * modelRayDir->f[1] + hitNormal->f[2] * modelRayDir->f[2] > 0.0f) + { + hitNormal->x = -hitNormal->x; + hitNormal->y = -hitNormal->y; + hitNormal->z = -hitNormal->z; + } + + mtx4RotateVecInPlace(currentPlayerGetViewToWorldMtxf(), hitNormal); + + if (hitNormal->x != 0.0f || hitNormal->y != 0.0f || hitNormal->z != 0.0f) + { + guNormalize(&hitNormal->x, &hitNormal->y, &hitNormal->z); + } + else + { + hitNormal->z = 1.0f; + } + + *hitModel = model; + *hitNode = hitnode; + return TRUE; + } + + return FALSE; +} + + +bool sub_GAME_7F041400(PropRecord *prop, coord3d *rayStart, coord3d *rayEnd, coord3d *rayDir, coord3d *hitPos, coord3d *hitNormal, f32 *hitDist) +{ + struct rect4f *polygon; + s32 numedges; + f32 ymax; + f32 ymin; + s32 pad; + s32 pad2; + s32 i; + f32 bestfrac; + coord2d edgeStart2d; + coord2d edgeEnd2d; + coord2d rayStart2d; + coord2d rayEnd2d; + s32 bestedge; + coord3d edgeStart3d; + coord3d edgeEnd3d; + f32 dist; + coord3d intersection; + s32 next; + + bestfrac = 1.0f; + bestedge = -1; + chraiGetCollisionBounds(prop, &polygon, &numedges, &ymax, &ymin); + + if (numedges > 0) + { + if (!(((ymax < rayStart->y) && (ymax < rayEnd->y)) || ((rayStart->y < ymin) && (rayEnd->y < ymin)))) + { + rayStart2d.x = rayStart->x; + rayStart2d.y = rayStart->z; + rayEnd2d.x = rayEnd->x; + rayEnd2d.y = rayEnd->z; + for (i = 0; i < numedges; i++) + { + next = (i + 1) % numedges; + if (doSegmentsIntersect(rayStart->x, rayStart->z, rayEnd->x, rayEnd->z, polygon->points[i].x, polygon->points[i].y, polygon->points[next].x, polygon->points[next].y)) + { + edgeStart2d.x = polygon->points[i].x; + edgeStart2d.y = polygon->points[i].y; + edgeEnd2d.x = polygon->points[next].x; + edgeEnd2d.y = polygon->points[next].y; + dist = calculateSegmentIntersectionFraction(&rayStart2d, &rayEnd2d, &edgeStart2d, &edgeEnd2d); + + if (dist < bestfrac) + { + bestfrac = dist; + bestedge = i; + } + } + } + if (bestedge > 0) + { + next = (bestedge + 1) % numedges; + edgeStart3d.x = polygon->points[bestedge].x; + edgeStart3d.y = 0.0f; + edgeStart3d.z = polygon->points[bestedge].y; + edgeEnd3d.x = polygon->points[next].x; + edgeEnd3d.y = 0.0f; + edgeEnd3d.z = polygon->points[next].y; + + chrlvLineLineIntersection(&edgeStart3d, &edgeEnd3d, rayStart, rayDir, &intersection); + dist = (rayDir->z * (intersection.z - rayStart->z)) + (((intersection.x - rayStart->x) * rayDir->x) + ((intersection.y - rayStart->y) * rayDir->y)); + + if (dist < (*hitDist)) + { + *hitDist = dist; + hitPos->x = intersection.x; + hitPos->y = intersection.y; + hitPos->z = intersection.z; + hitNormal->x = -rayDir->x; + hitNormal->y = 0.0f; + hitNormal->z = -rayDir->z; + + if ((hitNormal->x != 0.0f) || (hitNormal->z != 0.0f)) + { + guNormalize(&hitNormal->x, &hitNormal->y, &hitNormal->z); + } else + { + hitNormal->z = 1.0f; + } + + D_80030B0C = prop; + bodypartshot = HIT_NULL_PART; + g_CurrentProjectileModel = NULL; + dword_CODE_bss_80075B74 = NULL; + return TRUE; + } + } + } + } + return FALSE; +} + + +/** + * Address: 7F0417DC + * + * Test a single object for collision between the object and a projectile. + * If there is a collision, update hit parameters with collision data. + * @return TRUE if the object and projectile collide, FALSE otherwise. + */ +bool projectileTestObjectCollision(ObjectRecord *obj, coord3d *worldRayOrigin, coord3d *worldRayEnd, coord3d *worldRayDir, f32 maxDist, coord3d *modelRayOrigin, coord3d *modelRayDir, coord3d *hitPos, coord3d *hitNormal, f32 *hitDist, Model **hitModel, ModelNode **hitNode) +{ + Model *modelstack[1]; + f32 instsize; + f32 value; + f32 dx; + f32 dy; + f32 dz; + PropRecord *prop; + + instsize = getinstsize(modelstack[0] = obj->model); + prop = obj->prop; + value = 0.0f; + + if (prop->parent == NULL) { + dx = obj->runtime_pos.x - worldRayOrigin->x; + dy = obj->runtime_pos.y - worldRayOrigin->y; + dz = obj->runtime_pos.z - worldRayOrigin->z; + value = (dz * worldRayDir->z) + ((dx * worldRayDir->x) + (dy * worldRayDir->y)); + } + + if (-instsize <= value) { + if (value <= maxDist + instsize) { + // Precise line test for on screen props. + if (prop->flags & PROPFLAG_ONSCREEN) { + if (projectileLineTestModel(obj, modelRayOrigin, modelRayDir, hitPos, hitNormal, hitModel, hitNode)) { + dx = hitPos->x - worldRayOrigin->x; + dy = hitPos->y - worldRayOrigin->y; + dz = hitPos->z - worldRayOrigin->z; + value = (dz * worldRayDir->z) + ((dx * worldRayDir->x) + (dy * worldRayDir->y)); + + if (0.0f <= value) { + if (value <= maxDist) { + *hitDist = value; + return TRUE; + } + } + } + // Cheaper bounds test for off screen props. + } else { + prop = obj->prop; + instsize = getinstsize(modelstack[0]); + + if (projectileTestPropBoundingSphere(worldRayOrigin, worldRayDir, &obj->runtime_pos, instsize)) { + *hitDist = maxDist; + + if (sub_GAME_7F041400(prop, worldRayOrigin, worldRayEnd, worldRayDir, hitPos, hitNormal, hitDist)) + { + *hitModel = modelstack[0]; + *hitNode = *(ModelNode **)modelstack[0]->obj; + return TRUE; + } + } + } + } + } + + return FALSE; +} + + +/** + * Address: 7F0419E4 + * + * Tests an object and its on screen child hierarchy for projectile collision. + * If a closer hit is found, updates the caller's hit collision data. + * @returns TRUE if this object or one of its recursive children produced a closer hit, FALSE otherwise. + */ +bool projectileTestObjectCollisionRecursive(ObjectRecord *obj, coord3d *worldRayOrigin, coord3d *worldRayEnd, coord3d *worldRayDir, f32 maxDist, coord3d *modelRayOrigin, coord3d *modelRayDir, coord3d *bestHitPos, coord3d *bestHitNormal, f32 *bestHitDist) +{ + coord3d hitPos; + coord3d hitNormal; + f32 hitDist; + Model *hitModel; + ModelNode *hitNode; + bool found; + PropRecord *prop; + PropRecord *child; + + prop = obj->prop; + found = FALSE; + + if (projectileTestObjectCollision(obj, worldRayOrigin, worldRayEnd, worldRayDir, maxDist, modelRayOrigin, modelRayDir, &hitPos, &hitNormal, &hitDist, &hitModel, &hitNode)) + { + if (hitDist < *bestHitDist) + { + *bestHitDist = hitDist; + + bestHitPos->x = hitPos.x; + bestHitPos->y = hitPos.y; + bestHitPos->z = hitPos.z; + + bestHitNormal->x = hitNormal.x; + bestHitNormal->y = hitNormal.y; + bestHitNormal->z = hitNormal.z; + + D_80030B0C = obj->prop; + bodypartshot = -1; + g_CurrentProjectileModel = hitModel; + dword_CODE_bss_80075B74 = hitNode; + + found = TRUE; + } + } + + if (prop->flags & PROPFLAG_ONSCREEN) + { + child = prop->child; + + while (child != NULL) + { + if (child->flags & PROPFLAG_ONSCREEN) + { + if (projectileTestObjectCollisionRecursive(child->obj, worldRayOrigin, worldRayEnd, worldRayDir, maxDist, modelRayOrigin, modelRayDir, bestHitPos, bestHitNormal, bestHitDist)) + { + found = TRUE; + } + } + + child = child->prev; + } + } + + return found; +} + + + + +bool sub_GAME_7F041BB8(ChrRecord *chr, coord3d *arg1, coord3d *arg2, f32 arg3, coord3d *arg4, coord3d *arg5, coord3d *arg6, coord3d *arg7, f32 *arg8) { + f32 instSize; + f32 dx; + f32 dy; + f32 dz; + f32 planeDist; + f32 *new_var2; + f32 hitDist; + f32 pad; + s32 bodyPart; + Model *model; + ModelNode *node; + ModelHitEntry *entry; + Mtxf *mtx; + PropRecord *prop; + + prop = chr->prop; + instSize = getinstsize(chr->model); + dx = prop->pos.x - arg1->x; + dy = prop->pos.y - arg1->y; + dz = prop->pos.z - arg1->z; + planeDist = (dz * arg2->z) + ((dx * arg2->x) + (dy * arg2->y)); + + if ((-instSize <= planeDist) && (planeDist <= (arg3 + instSize)) && (prop->flags & PROPFLAG_ONSCREEN)) { + entry = chr->field_20; + bodyPart = sub_GAME_7F06C010(&entry, arg4, arg5, &model, &node); + if (bodyPart > 0) { + mtx = modelFindNodeMtx(model, node, 0); + dx = mtx->m[3][0] - arg4->x; + dy = mtx->m[3][1] - arg4->y; + new_var2 = mtx->m[3]; + dz = new_var2[2] - arg4->z; + hitDist = (dz * arg5->z) + ((dx * arg5->x) + (dy * arg5->y)); + if (hitDist < *arg8) { + *arg8 = hitDist; + arg6->x = (arg2->x * hitDist) + arg1->x; + arg6->y = (arg2->y * hitDist) + arg1->y; + arg6->z = (arg2->z * hitDist) + arg1->z; + arg7->x = -arg2->x; + arg7->y = 0.0f; + arg7->z = -arg2->z; + if ((arg7->x != 0.0f) || (arg7->z != 0.0f)) { + guNormalize(&arg7->x, &arg7->y, &arg7->z); + } else { + arg7->z = 1.0f; + } + D_80030B0C = prop; + bodypartshot = bodyPart; + g_CurrentProjectileModel = model; + dword_CODE_bss_80075B74 = node; + return 1; + } + } + } + return 0; +} + + +bool projectileFindCollidingProp(PropRecord *ignoreProp, coord3d *worldRayStart, coord3d *worldRayEnd, u32 cdtypes, coord3d *outHitPos, coord3d *outHitNormal, s32 *rooms) +{ + bool result; + f32 dist; + s16 *propnumptr; + f32 spa8; + bool found_collision; + coord3d sp98; + ChrRecord *chr; + coord3d sp88; + coord3d sp7c; + PropRecord *iterprop; + PropRecord *playerstank; + ObjectRecord *obj; + s32 unused; + + result = FALSE; + found_collision = FALSE; + playerstank = get_ptr_for_players_tank(); + + sp98.x = worldRayEnd->x - worldRayStart->x; + sp98.y = worldRayEnd->y - worldRayStart->y; + sp98.z = worldRayEnd->z - worldRayStart->z; + + dist = sqrtf(sp98.f[0] * sp98.f[0] + sp98.f[1] * sp98.f[1] + sp98.f[2] * sp98.f[2]); + + if (dist == 0.0f) + { + return FALSE; + } + + sp98.x *= (1.0f / dist); + sp98.y *= (1.0f / dist); + sp98.z *= (1.0f / dist); + + sp88.x = worldRayStart->x; + sp88.y = worldRayStart->y; + sp88.z = worldRayStart->z; + + mtx4TransformVecInPlace(camGetWorldToScreenMtxf(), &sp88); + + sp7c.x = sp98.x; + sp7c.y = sp98.y; + sp7c.z = sp98.z; + + mtx4RotateVecInPlace(camGetWorldToScreenMtxf(), sp7c.f); + + spa8 = dist; + + if (cdtypes != 0) + { + roomGetProps(rooms); + + for (propnumptr = ptr_list_object_lookup_indices; *propnumptr >= 0; propnumptr++) + { + iterprop = &g_Props[*propnumptr]; + + if (iterprop != ignoreProp) + { + if (iterprop->type == PROP_TYPE_OBJ + || iterprop->type == PROP_TYPE_WEAPON + || iterprop->type == PROP_TYPE_DOOR) + { + obj = iterprop->obj; + + if ((obj->runtime_bitflags & RUNTIMEBITFLAG_ISRETICK) == 0 && (obj->flags2 & PROPFLAG2_THROWTHROUGH) == 0) { + if (iterprop->type == PROP_TYPE_DOOR) + { + if ((cdtypes & CDTYPE_DOORS) == 0 && (propDoorGetCdTypes(iterprop) & cdtypes) == 0) + { + continue; + } + } + else + { + if ((cdtypes & CDTYPE_OBJS) == 0) + { + continue; + } + } + + if ((iterprop != playerstank) || !(obj->state & PROPSTATE_20)) + { + if (projectileTestObjectCollisionRecursive(obj, worldRayStart, worldRayEnd, &sp98, dist, &sp88, &sp7c, outHitPos, outHitNormal, &spa8)) + { + found_collision = TRUE; + } + } + } + } else if (iterprop->type == PROP_TYPE_CHR + || (iterprop->type == PROP_TYPE_VIEWER && iterprop->chr)) + { + chr = iterprop->chr; + + if (iterprop->type == PROP_TYPE_VIEWER) + { + if (!g_playerPointers[getPlayerPointerIndex(iterprop)]->field_AC || (cdtypes & CDTYPE_PLAYERS) == 0) + { + continue; + } + } + else if (iterprop->type == PROP_TYPE_CHR) + { + if ((chr->hidden & CHRHIDDEN_MOVING) || (cdtypes & CDTYPE_CHRS) == 0) + { + continue; + } + } + + if (sub_GAME_7F041BB8(chr, worldRayStart, &sp98, dist, &sp88, &sp7c, outHitPos, outHitNormal, &spa8)) + { + found_collision = TRUE; + } + } + else if (iterprop->type == PROP_TYPE_VIEWER && g_playerPointers[getPlayerPointerIndex(iterprop)]->field_AC) + { + if (sub_GAME_7F041400(iterprop, worldRayStart, worldRayEnd, &sp98, outHitPos, outHitNormal, &spa8)) + { + found_collision = TRUE; + } + } + } + } + } + + if (found_collision) + { + result = TRUE; + + flt_CODE_bss_80075B78.x = sp98.x; + flt_CODE_bss_80075B78.y = sp98.y; + flt_CODE_bss_80075B78.z = sp98.z; + + flt_CODE_bss_80075B88.x = sp7c.x; + flt_CODE_bss_80075B88.y = sp7c.y; + flt_CODE_bss_80075B88.z = sp7c.z; + + } + + return result; +} + + +/** + * this function contains + * osSyncPrintf("stanLineObjGfx: %d rooms is more than %d\n",arg0+0x58,20); + */ +s32 handles_projectile_motion(struct ObjectRecord *arg0, coord3d *arg1, coord3d *arg2, coord3d *arg3, s32 arg4, s32 arg5) +{ + PropRecord *prop; + StandTile *tile; + s32 result; + HitThing hit; + coord3d endpos; + s32 i; + s32 roomCount; + s32 roomNums[121]; + u8 roomSet[8]; + coord3d *hitpos; + coord3d diff; + struct ObjectRecord *obj; + s32 *roomPtr; + f32 dist; + f32 factor; + f32 scale; + + prop = arg0->prop; + tile = prop->stan; + result = 1; + D_80030B0C = NULL; + obj = arg0; + hitpos = arg2; + + if (((obj->runtime_pos.x == arg1->x) && (obj->runtime_pos.y == arg1->y)) && (obj->runtime_pos.z == arg1->z)) + { + goto end; + } + + endpos.x = arg1->x; + endpos.y = arg1->y; + endpos.z = arg1->z; + + if ((!(obj->runtime_bitflags & RUNTIMEBITFLAG_00000080)) || (!(obj->projectile->flags & PROPFLAG_ENABLED))) + { + goto end; + } + + roomCount = 0; + bgFindRoomsAlongSegment(&obj->runtime_pos, &endpos, obj->projectile->unkCC, roomSet, roomNums, &roomCount, 20); + + if (roomCount > 20) + { + roomCount = 20; + } + + i = bgCopyVisibleRoomsToList(&roomNums[roomCount], 100); + roomCount = roomCount + i; + roomNums[roomCount] = -1; + + if (roomNums[0] < 0) + { + goto after_bg_loop; + } + + roomPtr = roomNums; + +bg_loop: + if (bgTestBulletHitBackground(&arg0->runtime_pos, &endpos, *roomPtr, &hit)) + { + scale = get_room_data_float2(); + + // Keep this for matching. + if (roomPtr && roomPtr && roomPtr); + + hit.hitpos.x *= scale; + hit.hitpos.y *= scale; + hit.hitpos.z *= scale; + + if ((((((arg0->runtime_pos.x <= endpos.x) && (hit.hitpos.x <= endpos.x)) && (arg0->runtime_pos.x <= hit.hitpos.x)) + || (((endpos.x <= obj->runtime_pos.x) && (endpos.x <= hit.hitpos.x)) && (hit.hitpos.x <= obj->runtime_pos.x))) + && ((((obj->runtime_pos.y <= endpos.y) && (hit.hitpos.y <= endpos.y)) && (arg0->runtime_pos.y <= hit.hitpos.y)) + || (((endpos.y <= obj->runtime_pos.y) && (endpos.y <= hit.hitpos.y)) && (arg0->runtime_pos.y >= hit.hitpos.y)))) + && ((((obj->runtime_pos.z <= endpos.z) && (hit.hitpos.z <= endpos.z)) && (arg0->runtime_pos.z <= hit.hitpos.z)) + || (((endpos.z <= arg0->runtime_pos.z) && (endpos.z <= hit.hitpos.z)) && (hit.hitpos.z <= obj->runtime_pos.z)))) + { + if (!(((arg0->runtime_pos.x == ((0, hit.hitpos)).x) && (obj->runtime_pos.y == ((0, hit.hitpos)).y)) && (arg0->runtime_pos.z == ((0, hit.hitpos)).z))) + { + result = 0; + + hitpos->x = hit.hitpos.x; + hitpos->y = hit.hitpos.y; + hitpos->z = hit.hitpos.z; + + arg3->x = hit.normal.x; + arg3->y = hit.normal.y; + arg3->z = hit.normal.z; + + if (((arg3->x != 0.0f) || (arg3->y != 0.0f)) || (arg3->z != 0.0f)) + { + guNormalize(&arg3->x, &arg3->y, &arg3->z); + } + else + { + arg3->z = 1.0f; + } + } + } + } + + roomPtr++; + + if ((*roomPtr) >= 0) + { + goto bg_loop; + } + +after_bg_loop: + if (result == 0) + { + diff.x = arg1->x - arg0->runtime_pos.x; + diff.y = arg1->y - arg0->runtime_pos.y; + diff.z = arg1->z - arg0->runtime_pos.z; + + dist = sqrtf((diff.z * diff.z) + ((diff.x * diff.x) + (diff.y * diff.y))); + + if (&diff); + + if (0.1f < dist) + { + factor = 0.1f; + factor = factor / dist; + } + else + { + factor = 0.5f; + } + + hitpos->x -= factor * diff.x; + hitpos->y -= factor * diff.y; + hitpos->z -= factor * diff.z; + + endpos.x = hitpos->x; + endpos.y = hitpos->y; + endpos.z = hitpos->z; + } + + if (!projectileFindCollidingProp(prop, &obj->runtime_pos, &endpos, CDTYPE_ALL & ~CDTYPE_BG, hitpos, arg3, roomNums)) + { + if ((result == 0) && (arg4 != 0)) + { + result = 2; + + if (arg5 == 0) + { + bgFindRoomsAlongSegment(&arg0->runtime_pos, hitpos, obj->projectile->unkCC, roomSet, roomNums, &roomCount, 20); + } + } + else if ((result == 1) || (arg5 == 0)) + { + if (result != 1) + { + bgFindRoomsAlongSegment(&arg0->runtime_pos, &endpos, obj->projectile->unkCC, roomSet, roomNums, &roomCount, 20); + } + + obj->runtime_pos.x = endpos.x; + obj->runtime_pos.z = endpos.z; + prop->pos.y = (dist = ((0, endpos)).y); + arg0->runtime_pos.y = dist; + } + } + else if (arg5 == 0) + { + // Keep if (1) for matching. + if (1) + { + endpos.x = obj->runtime_pos.x; + endpos.z = arg0->runtime_pos.z; + + bgFindRoomsAlongSegment(&arg0->runtime_pos, &endpos, obj->projectile->unkCC, roomSet, roomNums, &roomCount, 20); + + dist = endpos.y; + } + + prop->pos.y = dist; + obj->runtime_pos.y = dist; + + if (arg4) + { + result = 2; + } + else + { + result = 0; + } + } + + if ((result != 1) && (arg5 != 0)) + { + goto end; + } + + i = 0; + + if (!(obj->projectile->flags & PROPFLAG_00000008)) + { + tile = prop->stan; + + if ((walkTilesBetweenPoints_NoCallback(&tile, prop->pos.x, prop->pos.z, obj->runtime_pos.x, arg0->runtime_pos.z) == TRUE) && (tile != NULL)) + { + prop->stan = tile; + prop->pos.x = arg0->runtime_pos.x; + prop->pos.z = obj->runtime_pos.z; + } + else + { + obj->projectile->flags |= PROPFLAG_00000008; + prop->flags |= PROPFLAG_00000008; + } + } + + if (obj->projectile->flags & PROPFLAG_00000008) + { + tile = stanFindTileBelowPos(&obj->runtime_pos, roomSet, NULL); + + if (tile != NULL) + { + prop->stan = tile; + prop->pos.x = obj->runtime_pos.x; + prop->pos.z = obj->runtime_pos.z; + obj->projectile->flags &= ~PROPFLAG_00000008; + prop->flags &= ~PROPFLAG_00000008; + } + } + + if (roomSet[0] != 0xff) + { + do + { + obj->projectile->unkCC[i] = roomSet[i]; + i++; + } + while ((roomSet[i] != 0xff) && (i != 7)); + } + + arg0->projectile->unkCC[i] = 0xff; + +end: + return result; +} + + +/** + * Address: 7F042A0C + */ +s32 objTryMovePropWithCollision(ObjectRecord *obj, coord3d *targetpos, coord3d *arg2, coord3d *arg3, s32 arg4) +{ + PropRecord *prop; + StandTile *stan; + f32 width; + s32 result; + coord3d dir; + coord3d target; + f32 tmp; + f32 ymax; + f32 ymin; + coord3d edgeA; + coord3d edgeB; + coord3d partialpos; + coord3d rayinfo; + coord2d edgeStart; + coord2d edgeEnd; + coord2d dir2d; + f32 *new_var; + s32 pad; + + prop = obj->prop; + stan = prop->stan; + width = objGetWidth(obj); + result = 1; + D_80030B0C = NULL; + + // Early return if target position and object's current position are the same. + if (((targetpos->f[0] == prop->pos.f[0]) && (targetpos->f[1] == prop->pos.f[1])) && (targetpos->f[2] == prop->pos.f[2])) + { + goto done; + } + + target.f[0] = targetpos->f[0]; + target.f[1] = targetpos->f[1]; + target.f[2] = targetpos->f[2]; + + if ((obj->runtime_bitflags & RUNTIMEBITFLAG_00000080) == 0) + { + goto done; + } + + tmp = stanGetPositionYValue(prop->stan, prop->pos.x, prop->pos.z); + + if ((obj->embedment->flags & PROJECTILEFLAG_00000040) == 0) + { + ymax = 0.0f; + ymin = 1.0f; + } + else if (target.f[1] < prop->pos.y) + { + ymax = prop->pos.y - tmp; + ymin = target.f[1] - tmp; + } + else + { + ymax = target.f[1] - tmp; + ymin = prop->pos.y - tmp; + } + + stanResetHits(); + + if ((stanTestLineUnobstructed(&stan, prop->pos.x, prop->pos.z, target.f[0], target.f[2], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, ymax, ymin, 0.0f, 1.0f) != 0) && (stan != NULL)) + { + if (stanTestVolume(&stan, target.f[0], target.f[2], width, 0x1f, ymax, ymin) < 0) + { + obj->runtime_pos.x = target.f[0]; + obj->runtime_pos.z = target.f[2]; + prop->stan = stan; + prop->pos.x = target.f[0]; + prop->pos.z = target.f[2]; + tmp = target.f[1]; + prop->pos.y = tmp; + obj->runtime_pos.y = tmp; + goto done; + } + } + + getCollisionEdge_maybe(&edgeA, &edgeB); + + arg3->x = edgeB.z - edgeA.z; + arg3->y = 0.0f; + arg3->z = edgeA.x - edgeB.x; + + if (arg3->x != 0.0f) + { + goto normalize; + } + + if (arg3->z == 0.0f) + { + goto unitz; + } + +normalize: + guNormalize(&arg3->x, &arg3->y, &arg3->z); + goto normaldone; + +unitz: + arg3->z = 1.0f; + +normaldone: + if (((target.f[0] != prop->pos.f[0]) || (target.f[1] != prop->pos.f[1])) || (target.f[2] != prop->pos.f[2])) + { + dir.x = target.f[0] - prop->pos.x; + dir.y = target.f[1] - prop->pos.y; + dir.z = target.f[2] - prop->pos.z; + + chrlvStanLineDirIntersection(&prop->pos, &dir, arg2); + + rayinfo.x = width; + rayinfo.y = prop->pos.x; + rayinfo.z = prop->pos.z; + + edgeStart.x = edgeA.x; + edgeStart.y = edgeA.z; + edgeEnd.x = edgeB.x; + edgeEnd.y = edgeB.z; + + dir2d.x = target.f[0] - prop->pos.x; + dir2d.y = target.f[2] - prop->pos.z; + + new_var = &partialpos.z; + tmp = calculateRayToSegmentIntersectionNormalized(&rayinfo, &edgeStart, &edgeEnd, &dir2d); + + stan = prop->stan; + + partialpos.x = prop->pos.x + ((dir2d.x * tmp) * 0.99000001f); + partialpos.y = target.f[1]; + partialpos.z = prop->pos.z + ((dir2d.y * tmp) * 0.99000001f); + + if ((stanTestLineUnobstructed(&stan, prop->pos.x, prop->pos.z, partialpos.x, *new_var, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, ymax, ymin, 0.0f, 1.0f) != 0) && (stan != NULL)) + { + if (stanTestVolume(&stan, partialpos.x, partialpos.z, width, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, ymax, ymin) < 0) + { + obj->runtime_pos.x = partialpos.x; + obj->runtime_pos.z = partialpos.z; + prop->stan = stan; + prop->pos.x = partialpos.x; + prop->pos.z = partialpos.z; + } + } + } + else + { + arg2->x = target.f[0]; + arg2->y = target.f[1]; + arg2->z = target.f[2]; + } + + tmp = partialpos.y; + prop->pos.y = tmp; + obj->runtime_pos.y = tmp; + result = 0; + +done: + return result; +} + + +/** + * US address 7F042EB4. +*/ +s32 sub_GAME_7F042EB4(struct ObjectRecord *arg0, f32 *arg1, struct coord3d *arg2, struct coord3d *arg3, s32 arg4, s32 arg5) +{ + if ((arg0->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) && (arg0->projectile->flags & PROJECTILEFLAG_STICKY)) + { + return handles_projectile_motion(arg0, arg1, arg2, arg3, arg4, arg5); + } + + return objTryMovePropWithCollision(arg0, arg1, arg2, arg3, arg4); +} + + +/** + * Update a speed and distance travelled, factoring in acceleration, + * deceleration and the global update multiplier. + * + * The new speed and distance done are written back to those pointers. + * + * offsets: 077A48, 7F042F18 + * (copied from Perfect Dark) + */ +void chrobjApplySpeed(f32 *openPosition, f32 maxFrac, f32 *speedPtr, f32 accel, f32 decel, f32 maxSpeed) +{ + f32 speed = *speedPtr; + s32 i; + + for (i = 0; i < g_ClockTimer; i++) + { + f32 limit = speed * speed * 0.5f / decel; + f32 distRemaining = maxFrac - *openPosition; + if (distRemaining > 0.0f) + { + if (speed > 0.0f && distRemaining <= limit) + { + // Slow down for end + speed -= decel; + + if (speed < decel) + { + speed = decel; + } + } + else if (speed < maxSpeed) + { + // Accelerate + if (speed < 0.0f) + { + speed += decel; + } + else + { + speed += accel; + } + + if (speed > maxSpeed) + { + speed = maxSpeed; + } + } + + if (speed >= distRemaining) + { + *openPosition = maxFrac; + break; + } + + *openPosition += speed; + } + else + { + if (speed < 0.0f && -distRemaining <= limit) + { + speed += decel; + + if (speed > -decel) + { + speed = -decel; + } + } + else if (speed > -maxSpeed) + { + if (speed > 0.0f) + { + speed -= decel; + } + else + { + speed -= accel; + } + + if (speed < -maxSpeed) + { + speed = -maxSpeed; + } + } + + if (speed <= distRemaining) + { + *openPosition = maxFrac; + break; + } + + *openPosition += speed; + } + } + *speedPtr = speed; +} + + + + + +/** + * Address 0x7F04310C. +*/ +void chrobjCallsApplySpeed(f32 *openPosition, f32 maxFrac, f32 *speedPtr, f32 accel, f32 decel, f32 maxSpeed) +{ + if (maxFrac - *openPosition < -M_PI_F) + { + maxFrac += M_TAU_F; + } + else if (maxFrac - *openPosition >= M_PI_F) + { + maxFrac -= M_TAU_F; + } + + chrobjApplySpeed(openPosition, maxFrac, speedPtr, accel, decel, maxSpeed); + + if (*openPosition < 0.0f) + { + *openPosition = *openPosition + M_TAU_F; + } + + if (*openPosition >= M_TAU_F) + { + *openPosition = *openPosition - M_TAU_F; + } +} + + +/** + * Address: 7F0431E4 + * + * This function handles an object's transition from the bouncing state to the rest state. + */ +void objSettle(ObjectRecord *obj, coord3d *arg1) +{ + coord3d angles; + Mtxf rotmtx; + Mtxf aimmtx; + Mtxf scalemtx; + f32 x; + f32 z; + f32 invlen; + f32 tmp; + f32 modelscale; + s32 pad; + f32 angle; + Projectile *projectile; + + if (((obj->runtime_bitflags &= ~0x00010000) & 0x80) == 0) { + return; + } + + projectile = obj->projectile; + + if (((u8 *)obj)[3] == 1) { + projectileFree(projectile); + obj->projectile = 0; + obj->runtime_bitflags &= ~0x80; + return; + } + + projectile->ownerprop = 0; + projectile->flags &= ~PROJECTILEFLAG_AIRBORNE; + projectile->flags &= ~PROJECTILEFLAG_STICKY; + + matrix_4x4_get_rotation_around_xyz(&obj->mtx, &angles); + matrix_4x4_set_rotation_around_xyz(&angles, &rotmtx); + quaternion_set_rotation_around_xyzf((f32 *)&angles, projectile->unk68); + + matrix_4x4_set_rotation_inverse(&rotmtx, &aimmtx); + matrix_4x4_multiply(&aimmtx, &obj->mtx, &scalemtx); + + projectile->unkC0 = sqrtf( + ((scalemtx.m[0][0] * scalemtx.m[0][0]) + + (scalemtx.m[0][1] * scalemtx.m[0][1])) + + (scalemtx.m[0][2] * scalemtx.m[0][2])); + + projectile->unkC4 = sqrtf( + ((scalemtx.m[1][0] * scalemtx.m[1][0]) + + (scalemtx.m[1][1] * scalemtx.m[1][1])) + + (scalemtx.m[1][2] * scalemtx.m[1][2])); + + projectile->unkC8 = sqrtf( + ((scalemtx.m[2][0] * scalemtx.m[2][0]) + + (scalemtx.m[2][1] * scalemtx.m[2][1])) + + (scalemtx.m[2][2] * scalemtx.m[2][2])); + + x = obj->mtx.m[0][0]; + z = obj->mtx.m[0][2]; + + if ((x != 0.0f) || (z != 0.0f)) { + invlen = 1.0f / sqrtf((x * x) + (z * z)); + x *= invlen; + z *= invlen; + } else { + z = 1.0f; + x = 0.0f; + } + + aimmtx.m[0][0] = x; + aimmtx.m[0][1] = 0.0f; + aimmtx.m[0][2] = z; + aimmtx.m[0][3] = 0.0f; + + if (obj->mtx.m[1][1] >= 0.0f) { + aimmtx.m[1][0] = 0.0f; + aimmtx.m[1][1] = 1.0f; + aimmtx.m[1][2] = 0.0f; + aimmtx.m[1][3] = 0.0f; + + aimmtx.m[2][0] = -z; + aimmtx.m[2][1] = 0.0f; + aimmtx.m[2][2] = x; + aimmtx.m[2][3] = 0.0f; + } else { + aimmtx.m[1][0] = 0.0f; + aimmtx.m[1][1] = -1.0f; + aimmtx.m[1][2] = 0.0f; + aimmtx.m[1][3] = 0.0f; + + aimmtx.m[2][0] = z; + aimmtx.m[2][1] = 0.0f; + aimmtx.m[2][2] = -x; + aimmtx.m[2][3] = 0.0f; + } + + aimmtx.m[3][0] = 0.0f; + aimmtx.m[3][1] = 0.0f; + aimmtx.m[3][2] = 0.0f; + aimmtx.m[3][3] = 1.0f; + + matrix_4x4_get_rotation_around_xyz(&aimmtx, &angles); + quaternion_set_rotation_around_xyzf((f32 *)&angles, projectile->unk78); + quaternion_ensure_shortest_path(projectile->unk68, projectile->unk78); + + projectile->unk60 = 0.0f; + + angle = acosf( + ((aimmtx.m[0][0] * rotmtx.m[0][0]) + + (aimmtx.m[0][1] * rotmtx.m[0][1])) + + (aimmtx.m[0][2] * rotmtx.m[0][2])); + + if (((angle > 0.0f) && (obj->mtx.m[0][1] > 0.0f)) + && (arg1->y < obj->mtx.m[0][1])) + { + projectile->unk64 = 0.050000001f / ((angle * 4.0f) / M_TAU_F); + } else if (((angle > 0.0f) && (obj->mtx.m[0][1] < 0.0f)) + && (obj->mtx.m[0][1] < arg1->y)) + { + projectile->unk64 = 0.050000001f / ((angle * 4.0f) / M_TAU_F); + } else { + modelscale = obj->model->scale; + + tmp = acosf( + (((arg1->x * obj->mtx.m[0][0]) + + (arg1->y * obj->mtx.m[0][1])) + + (obj->mtx.m[0][2] * arg1->z)) + / (modelscale * modelscale)); + + tmp = tmp / g_GlobalTimerDelta; + + if (angle != 0.0f) { + projectile->unk64 = tmp / angle; + } else { + projectile->unk64 = 1.0f; + } + } + + if (projectile->unk64 < 0.0f) { + projectile->unk64 = -projectile->unk64; + } + + if (projectile->unk64 < 0.029999999f) { + projectile->unk64 = 0.029999999f; + } else if (0.15000001f < projectile->unk64) { + projectile->unk64 = 0.15000001f; + } +} + + +/** + * Address: 7F043650 + * + * Plays and maintains the sound of the whoosh of a throwing knife spinning through the air. + */ +void objUpdateThrowKnifeSound(ObjectRecord *obj) +{ + if (!(obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE)) + { + return; + } + + if ((obj->projectile->flags & PROJECTILEFLAG_AIRBORNE) && ((s32)obj->projectile->unk90 <= 0) && (obj->runtime_bitflags & RUNTIMEBITFLAG_THROWING_KNIFE_RELATED)) + { + + s16 Throwing_knife_SFX[] = {0x5F, 0x60, 0x61}; + s32 slot; + s32 sfxindex; + + slot = obj->projectile->soundSlot; + sfxindex = randomGetNext() % 3; + +#if defined(LEFTOVERDEBUG) + if ((s32)obj->projectile->lastSfxTimer < g_GlobalTimer - 6) { +#else + if ((s32)obj->projectile->lastSfxTimer < g_GlobalTimer - 5) + { +#endif + if (obj->projectile->sounds[slot] != NULL) + { + if (sndGetPlayingState(obj->projectile->sounds[slot])) + { + sndDeactivate(obj->projectile->sounds[slot]); + } + } + } + + if (obj->projectile->sounds[slot] != NULL) + { + return; + } + + if (!lvlGetControlsLockedFlag()) + { + sndPlaySfx(g_musicSfxBufferPtr, Throwing_knife_SFX[sfxindex], &obj->projectile->sounds[slot]); + + chrobjSndCreatePostEventDefault(obj->projectile->sounds[slot], &obj->prop->pos); + + obj->projectile->lastSfxTimer = g_GlobalTimer; + obj->projectile->soundSlot = 1 - slot; + } + } + else + { + obj->runtime_bitflags &= ~PROJECTILEFLAG_00000020; + + if (obj->projectile->sounds[0] != NULL) + { + if (sndGetPlayingState(obj->projectile->sounds[0])) + { + sndDeactivate(obj->projectile->sounds[0]); + } + } + + if (obj->projectile->sounds[1] != NULL) + { + if (sndGetPlayingState(obj->projectile->sounds[1])) + { + sndDeactivate(obj->projectile->sounds[1]); + } + } + } +} + ModelRenderData D_80030B34 = {NULL, TRUE, @@ -865,3684 +3141,6 @@ ModelRenderData D_80031FD0 = { NULL, {0,0,0,0}, CULLMODE_BOTH}; - -// Forward declarations. - -s32 updateDoorDisplacement(DoorRecord* door); -s32 objGetShotsTaken(ObjectRecord *); -void sub_GAME_7F04AC20(PropRecord *prop, ModelRenderData *, s32 arg2); -bool chrobjSeparatingAxisTheorem(rect4f* rect1, s32 numvertices0, rect4f* rect2, s32 numvertices1); -void chrobjSndCreatePostEvent(ALSoundState *state, coord3d *pos, f32 low, f32 high); -void sub_GAME_7F050DE8(Model* model); -void remove_obj_from_temp_proxmine_table(WeaponObjRecord* proxy); -void add_obj_to_temp_proxmine_table(WeaponObjRecord* proxy); -s32 sub_GAME_7F042EB4(struct ObjectRecord *arg0, f32 *arg1, struct coord3d *arg2, struct coord3d *arg3, s32 arg4, s32 arg5); -s32 sub_GAME_7F042A0C(struct ObjectRecord *arg0, f32 *arg1, struct coord3d *arg2, struct coord3d *arg3, s32 arg4); -s32 handles_projectile_motion(struct ObjectRecord *arg0, f32 *arg1, struct coord3d *arg2, struct coord3d *arg3, s32 arg4, s32 arg5); -void sub_GAME_7F0431E4(struct ObjectRecord *arg0, struct coord3d *arg1); -void door7F054FB4(struct DoorRecord *arg0); - -/* PD: projectileFree (similar but not the same structure) */ -void projectileFree(Projectile* projectile) -{ - ALSoundState* sound1; - ALSoundState* sound2; - - if (projectile->flags & PROJECTILEFLAG_LAUNCHING) - { - sound1 = projectile->sound1; - if ((sound1 != 0) && (sndGetPlayingState((ALSoundState* ) sound1) != 0)) - { - sndDeactivate((ALSoundState* ) projectile->sound1); - } - - sound2 = projectile->sound2; - if ((sound2 != 0) && (sndGetPlayingState((ALSoundState* ) sound2) != 0)) - { - sndDeactivate((ALSoundState* ) projectile->sound2); - } - } - projectile->flags |= PROJECTILEFLAG_FREE; -} - - -void projectileReset(Projectile *projectile) -{ - projectile->flags = 0; - - projectile->speed.x = 0.0f; - projectile->speed.y = 0.0f; - projectile->speed.z = 0.0f; - - projectile->unk10.x = 0.0f; - projectile->unk10.y = 0.0f; - projectile->unk10.z = 0.0f; - - projectile->unk1C = 0.0f; - - projectile->unk60 = 1.0f; - projectile->ownerprop = NULL; - projectile->unk8C = 0.05f; - projectile->unk90 = 0; - projectile->unk94 = 0.0f; - projectile->unkA0 = -1; - projectile->unkA4 = 0; - projectile->unkA8 = 0; - projectile->unkAC = -1; - projectile->droptype = DROPTYPE_DEFAULT; - projectile->refreshrate = 0; - projectile->unkC0 = 1.0f; - projectile->unkC4 = 1.0f; - projectile->unkC8 = 1.0f; - projectile->unkE0 = 0; - projectile->obj = 0; - projectile->unkE8 = 0; -} - - -Projectile *projectileAllocate(void) -{ - s32 bestindex; - s32 i; - - bestindex = -1; - - // Happy path - find one that is already free - for (i = 0; i < PROJECTILES_ARR_MAX; i++) - { - if (g_Projectiles[i].flags & PROJECTILEFLAG_FREE) - { - projectileReset(g_Projectiles + i); - return (g_Projectiles + i); - } - } - - // Find one with the lowest unkE8 (some kind of age/timer?) - // and some other conditions - for (i = 0; i < PROJECTILES_ARR_MAX; i++) - { - if (g_Projectiles[i].obj && (bestindex < 0 || g_Projectiles[i].unkE8 < g_Projectiles[bestindex].unkE8)) - { - bestindex = i; - } - } - - if (bestindex >= 0) - { - // Reset and return it - objFreeEmbedmentOrProjectile(g_Projectiles[bestindex].obj->prop); - g_Projectiles[bestindex].obj->runtime_bitflags |= RUNTIMEBITFLAG_REMOVE; - - projectileReset(g_Projectiles + bestindex); - return (g_Projectiles + bestindex); - } - else - { - return NULL; - } -} - - -void sub_GAME_7F03FDA8(PropRecord *prop) -{ - ObjectRecord *obj = prop->obj; //po - if (obj->runtime_bitflags & RUNTIMEBITFLAG_EMBEDDED) - { - #ifdef DEBUG - //assert(po->move.attach->fallinfo==NULL); - #endif - obj->embedment->projectile = projectileAllocate(); - } - else if ((obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) == 0) - { - obj->projectile = projectileAllocate(); - - if (obj->projectile) - { - obj->runtime_bitflags |= RUNTIMEBITFLAG_DEPOSIT; - } - } -} - - -void projectileSetSticky(PropRecord *prop) -{ - ObjectRecord *obj = prop->obj; - Projectile *projectile = NULL; - - if (obj->runtime_bitflags & RUNTIMEBITFLAG_EMBEDDED) - { - projectile = obj->embedment->projectile; - } - else if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) - { - projectile = obj->projectile; - } - - if (projectile) - { - projectile->flags |= PROJECTILEFLAG_STICKY; - if (prop->stan) - { - projectile->unkCC[0] = prop->stan->room; - projectile->unkCC[1] = 0xFF; - return; - } - projectile->unkCC[0] = 0xFFU; - } -} - - -void embedmentFree(Embedment *embedment) -{ - embedment->flags |= EMBEDMENTFLAG_FREE; -} - - -Embedment *embedmentAllocate(void) -{ - s32 i; - - for (i = 0; i < EMBEDMENT_ARR_MAX; i++) - { - if (g_Embedments[i].flags & 1) - { - g_Embedments[i].flags = 0; - g_Embedments[i].projectile = NULL; - return &g_Embedments[(u32)i]; - } - } - - return NULL; -} - - -/** - * This doesn't exactly return the number of shots taken but it's the best way - * to describe the behaviour of the function without writing a novel into the - * function's name. - * - * The number returned is 0 when at full health and only ever increments as the - * object takes damage. While healthy, the number scales from 0 to 4 based on - * how close it is to being destroyed, where 4 is destroyed. After being - * destroyed, the number increments at 1 per shot up to a max of 12. - */ - -s32 objGetShotsTaken(ObjectRecord *obj) -{ - if (!(obj->state & PROPSTATE_DESTROYED)) - { - return (obj->maxdamage * 3.0f) / obj->damage; - } - - return obj->maxdamage + 4.0f; -} - - -/** - * Return 0 if not destroyed - * Return 1 if at destroyed level 1 - * Return 2 if at destroyed level 2 - * Return 3 if at destroyed level 3 - * - * Each destroyed level is a new phase of visual brokenness. Typically the - * object is destroyed and it looks broken (level 1), then after a couple of - * shots it enters level 2, and a few shots later level 3. - * - * While healthy, damage goes from 0 to maxdamage (eg. 1000) but this function - * returns 0 due to the if statement. - * - * When destroyed, damage is reset to 0 then incremented at one unit per shot, - * so four shots causes it to enter a new destroyed level. - */ - -s32 objGetDestroyedLevel(ObjectRecord *obj) -{ - if (!(obj->state & PROPSTATE_DESTROYED)) - { - return 0; //if Not Dead - } - return ((s32) obj->maxdamage >> 2) + 1; -} - - -ModelRoData_BoundingBoxRecord *chrobjGetBboxFromObjFile(ModelFileHeader *obj) -{ - ModelNode *mdlnext; - - if (obj->RootNode->Child) - { - //for each next node, check for BBox - for (mdlnext = obj->RootNode->Child; mdlnext; mdlnext = mdlnext->Next) - { - if (mdlnext->Opcode == MODELNODE_OPCODE_BBOX) - { - return mdlnext->Data; - } - } - - //none found, check FIRST child - if (obj->RootNode->Child->Child) - { - //for each next node, check for BBox - for (mdlnext = obj->RootNode->Child->Child; mdlnext; mdlnext = mdlnext->Next) - { - if (mdlnext->Opcode == MODELNODE_OPCODE_BBOX) - { - return mdlnext->Data; - } - } - } - } - return NULL; -} - - -struct ModelRoData_BoundingBoxRecord* chrobjGetBboxFromObjectRecord(ObjectRecord *arg0) -{ - return (struct ModelRoData_BoundingBoxRecord *)chrobjGetBboxFromObjFile(arg0->model->obj); -} - - - - - -#ifdef NONMATCHING -void set_color_shading_from_tile(void) { - -} -#else -GLOBAL_ASM( -.text -glabel set_color_shading_from_tile -/* 074BCC 7F04009C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 074BD0 7F0400A0 AFBF0014 */ sw $ra, 0x14($sp) -/* 074BD4 7F0400A4 AFA40018 */ sw $a0, 0x18($sp) -/* 074BD8 7F0400A8 00807025 */ move $t6, $a0 -/* 074BDC 7F0400AC 00A03825 */ move $a3, $a1 -/* 074BE0 7F0400B0 8DC50008 */ lw $a1, 8($t6) -/* 074BE4 7F0400B4 8DC60010 */ lw $a2, 0x10($t6) -/* 074BE8 7F0400B8 8C840014 */ lw $a0, 0x14($a0) -/* 074BEC 7F0400BC 0FC2CB0B */ jal copy_tile_RGB_as_24bit -/* 074BF0 7F0400C0 AFA7001C */ sw $a3, 0x1c($sp) -/* 074BF4 7F0400C4 8FA7001C */ lw $a3, 0x1c($sp) -/* 074BF8 7F0400C8 3C013F40 */ li $at, 0x3F400000 # 0.750000 -/* 074BFC 7F0400CC 44814000 */ mtc1 $at, $f8 -/* 074C00 7F0400D0 90EB0002 */ lbu $t3, 2($a3) -/* 074C04 7F0400D4 90ED0000 */ lbu $t5, ($a3) -/* 074C08 7F0400D8 90FF0001 */ lbu $ra, 1($a3) -/* 074C0C 7F0400DC 000B7880 */ sll $t7, $t3, 2 -/* 074C10 7F0400E0 000DC080 */ sll $t8, $t5, 2 -/* 074C14 7F0400E4 01EB7821 */ addu $t7, $t7, $t3 -/* 074C18 7F0400E8 030DC021 */ addu $t8, $t8, $t5 -/* 074C1C 7F0400EC 001F7080 */ sll $t6, $ra, 2 -/* 074C20 7F0400F0 0018C100 */ sll $t8, $t8, 4 -/* 074C24 7F0400F4 000F7880 */ sll $t7, $t7, 2 -/* 074C28 7F0400F8 01DF7021 */ addu $t6, $t6, $ra -/* 074C2C 7F0400FC 000E70C0 */ sll $t6, $t6, 3 -/* 074C30 7F040100 01EB7821 */ addu $t7, $t7, $t3 -/* 074C34 7F040104 030DC023 */ subu $t8, $t8, $t5 -/* 074C38 7F040108 01F8C821 */ addu $t9, $t7, $t8 -/* 074C3C 7F04010C 01DF7023 */ subu $t6, $t6, $ra -/* 074C40 7F040110 000E7080 */ sll $t6, $t6, 2 -/* 074C44 7F040114 032E1821 */ addu $v1, $t9, $t6 -/* 074C48 7F040118 00037A03 */ sra $t7, $v1, 8 -/* 074C4C 7F04011C 241800FF */ li $t8, 255 -/* 074C50 7F040120 030FC823 */ subu $t9, $t8, $t7 -/* 074C54 7F040124 44992000 */ mtc1 $t9, $f4 -/* 074C58 7F040128 240F0001 */ li $t7, 1 -/* 074C5C 7F04012C 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 074C60 7F040130 468021A0 */ cvt.s.w $f6, $f4 -/* 074C64 7F040134 00001025 */ move $v0, $zero -/* 074C68 7F040138 00006025 */ move $t4, $zero -/* 074C6C 7F04013C 46083282 */ mul.s $f10, $f6, $f8 -/* 074C70 7F040140 444EF800 */ cfc1 $t6, $31 -/* 074C74 7F040144 44CFF800 */ ctc1 $t7, $31 -/* 074C78 7F040148 00000000 */ nop -/* 074C7C 7F04014C 46005424 */ cvt.w.s $f16, $f10 -/* 074C80 7F040150 444FF800 */ cfc1 $t7, $31 -/* 074C84 7F040154 00000000 */ nop -/* 074C88 7F040158 31EF0078 */ andi $t7, $t7, 0x78 -/* 074C8C 7F04015C 51E00013 */ beql $t7, $zero, .L7F0401AC -/* 074C90 7F040160 440F8000 */ mfc1 $t7, $f16 -/* 074C94 7F040164 44818000 */ mtc1 $at, $f16 -/* 074C98 7F040168 240F0001 */ li $t7, 1 -/* 074C9C 7F04016C 46105401 */ sub.s $f16, $f10, $f16 -/* 074CA0 7F040170 44CFF800 */ ctc1 $t7, $31 -/* 074CA4 7F040174 00000000 */ nop -/* 074CA8 7F040178 46008424 */ cvt.w.s $f16, $f16 -/* 074CAC 7F04017C 444FF800 */ cfc1 $t7, $31 -/* 074CB0 7F040180 00000000 */ nop -/* 074CB4 7F040184 31EF0078 */ andi $t7, $t7, 0x78 -/* 074CB8 7F040188 15E00005 */ bnez $t7, .L7F0401A0 -/* 074CBC 7F04018C 00000000 */ nop -/* 074CC0 7F040190 440F8000 */ mfc1 $t7, $f16 -/* 074CC4 7F040194 3C018000 */ lui $at, 0x8000 -/* 074CC8 7F040198 10000007 */ b .L7F0401B8 -/* 074CCC 7F04019C 01E17825 */ or $t7, $t7, $at -.L7F0401A0: -/* 074CD0 7F0401A0 10000005 */ b .L7F0401B8 -/* 074CD4 7F0401A4 240FFFFF */ li $t7, -1 -/* 074CD8 7F0401A8 440F8000 */ mfc1 $t7, $f16 -.L7F0401AC: -/* 074CDC 7F0401AC 00000000 */ nop -/* 074CE0 7F0401B0 05E0FFFB */ bltz $t7, .L7F0401A0 -/* 074CE4 7F0401B4 00000000 */ nop -.L7F0401B8: -/* 074CE8 7F0401B8 44CEF800 */ ctc1 $t6, $31 -/* 074CEC 7F0401BC 01BF082A */ slt $at, $t5, $ra -/* 074CF0 7F0401C0 10200003 */ beqz $at, .L7F0401D0 -/* 074CF4 7F0401C4 A0EF0003 */ sb $t7, 3($a3) -/* 074CF8 7F0401C8 10000002 */ b .L7F0401D4 -/* 074CFC 7F0401CC 24020001 */ li $v0, 1 -.L7F0401D0: -/* 074D00 7F0401D0 240C0001 */ li $t4, 1 -.L7F0401D4: -/* 074D04 7F0401D4 00E25021 */ addu $t2, $a3, $v0 -/* 074D08 7F0401D8 91460000 */ lbu $a2, ($t2) -/* 074D0C 7F0401DC 00402825 */ move $a1, $v0 -/* 074D10 7F0401E0 00ECC021 */ addu $t8, $a3, $t4 -/* 074D14 7F0401E4 00CB082A */ slt $at, $a2, $t3 -/* 074D18 7F0401E8 50200005 */ beql $at, $zero, .L7F040200 -/* 074D1C 7F0401EC 93190000 */ lbu $t9, ($t8) -/* 074D20 7F0401F0 24EA0002 */ addiu $t2, $a3, 2 -/* 074D24 7F0401F4 10000009 */ b .L7F04021C -/* 074D28 7F0401F8 91460000 */ lbu $a2, ($t2) -/* 074D2C 7F0401FC 93190000 */ lbu $t9, ($t8) -.L7F040200: -/* 074D30 7F040200 01802825 */ move $a1, $t4 -/* 074D34 7F040204 032B082A */ slt $at, $t9, $t3 -/* 074D38 7F040208 50200004 */ beql $at, $zero, .L7F04021C -/* 074D3C 7F04020C 240C0002 */ li $t4, 2 -/* 074D40 7F040210 10000002 */ b .L7F04021C -/* 074D44 7F040214 24050002 */ li $a1, 2 -/* 074D48 7F040218 240C0002 */ li $t4, 2 -.L7F04021C: -/* 074D4C 7F04021C 18C0001B */ blez $a2, .L7F04028C -/* 074D50 7F040220 00E51821 */ addu $v1, $a3, $a1 -/* 074D54 7F040224 00EC1021 */ addu $v0, $a3, $t4 -/* 074D58 7F040228 904E0000 */ lbu $t6, ($v0) -/* 074D5C 7F04022C 906F0000 */ lbu $t7, ($v1) -/* 074D60 7F040230 A0400000 */ sb $zero, ($v0) -/* 074D64 7F040234 00CE2023 */ subu $a0, $a2, $t6 -/* 074D68 7F040238 01E40019 */ multu $t7, $a0 -/* 074D6C 7F04023C 00804825 */ move $t1, $a0 -/* 074D70 7F040240 0000C012 */ mflo $t8 -/* 074D74 7F040244 00000000 */ nop -/* 074D78 7F040248 00000000 */ nop -/* 074D7C 7F04024C 0306001A */ div $zero, $t8, $a2 -/* 074D80 7F040250 00004012 */ mflo $t0 -/* 074D84 7F040254 A0680000 */ sb $t0, ($v1) -/* 074D88 7F040258 A1440000 */ sb $a0, ($t2) -/* 074D8C 7F04025C 14C00002 */ bnez $a2, .L7F040268 -/* 074D90 7F040260 00000000 */ nop -/* 074D94 7F040264 0007000D */ break 7 -.L7F040268: -/* 074D98 7F040268 2401FFFF */ li $at, -1 -/* 074D9C 7F04026C 14C10004 */ bne $a2, $at, .L7F040280 -/* 074DA0 7F040270 3C018000 */ lui $at, 0x8000 -/* 074DA4 7F040274 17010002 */ bne $t8, $at, .L7F040280 -/* 074DA8 7F040278 00000000 */ nop -/* 074DAC 7F04027C 0006000D */ break 6 -.L7F040280: -/* 074DB0 7F040280 90FF0001 */ lbu $ra, 1($a3) -/* 074DB4 7F040284 90ED0000 */ lbu $t5, ($a3) -/* 074DB8 7F040288 90EB0002 */ lbu $t3, 2($a3) -.L7F04028C: -/* 074DBC 7F04028C 000DC842 */ srl $t9, $t5, 1 -/* 074DC0 7F040290 001F7042 */ srl $t6, $ra, 1 -/* 074DC4 7F040294 000B7842 */ srl $t7, $t3, 1 -/* 074DC8 7F040298 A0F90000 */ sb $t9, ($a3) -/* 074DCC 7F04029C A0EE0001 */ sb $t6, 1($a3) -/* 074DD0 7F0402A0 A0EF0002 */ sb $t7, 2($a3) -/* 074DD4 7F0402A4 8FBF0014 */ lw $ra, 0x14($sp) -/* 074DD8 7F0402A8 27BD0018 */ addiu $sp, $sp, 0x18 -/* 074DDC 7F0402AC 03E00008 */ jr $ra -/* 074DE0 7F0402B0 00000000 */ nop -) -#endif - - -/* - * Address: 0x7F0402B4 -*/ -void sub_GAME_7F0402B4(PropRecord *prop, rgba_u8 *color) -{ - struct DoorRecord *door = prop->door; - if (door->flags & 0x400 ){ return; } - - set_color_shading_from_tile(prop, color); - color->r >>= 1; - color->g >>= 1; - color->b >>= 1; -} - - -void update_color_shading(rgba_u8 *dest, rgba_u8 *src) -{ - s32 val_diff; - s32 val_new; - s32 i; - - for (i = 0; i < 4; i++) - { - val_diff = (src->rgba[i] - dest->rgba[i]); - val_new = dest->rgba[i] + ((val_diff + 7) >> 3); - dest->rgba[i] = val_new; - } -} - - -/* - * Address: 0x7F040384 -*/ -void lerp_rgba_s32_with_rgba_f32(rgba_s32* dest, s32 enable, rgba_f32* src) -{ - if (enable == 1) - { - src->r *= 255.0f; - src->g *= 255.0f; - src->b *= 255.0f; - - if (1) { dest->r = (s32)((src->a * (src->r - dest->r)) + dest->r); } - if (1) { dest->g = (s32)((src->a * (src->g - dest->g)) + dest->g); } - if (1) { dest->b = (s32)((src->a * (src->b - dest->b)) + dest->b); } - dest->a = (s32)((src->a * (255.0f - dest->a)) + dest->a); - } -} - - -/** - * Address 0x7F040484. -*/ -void chrobjCollisionRelated(ObjectRecord *obj) -{ - struct ModelRoData_BoundingBoxRecord *bbox; - Mtxf sp24; - - if (obj->ptr_allocated_collisiondata_block != NULL) - { - bbox = chrobjGetBboxFromObjectRecord(obj); - matrix_4x4_copy(&obj->mtx, &sp24); - matrix_4x4_set_position(&obj->runtime_pos, &sp24); - sub_GAME_7F03F540(bbox, &sp24, &obj->ptr_allocated_collisiondata_block->polygon, obj->ptr_allocated_collisiondata_block); - - obj->ptr_allocated_collisiondata_block->bottom = obj->runtime_pos.f[1] + chrpropSumMatrixPosY(bbox, &sp24); - obj->ptr_allocated_collisiondata_block->top = obj->runtime_pos.f[1] + chrpropSumMatrixNegY(bbox, &sp24); - - if (obj->type == PROPDEF_AIRCRAFT) - { - obj->ptr_allocated_collisiondata_block->bottom -= 200.0f; - } - } -} - - -PropRecord* objInit(ObjectRecord* obj, ModelFileHeader* model_header, PropRecord* prop, Model* model) -{ - if (prop == NULL) - { - prop = chrpropAllocate(); - } - - if (model == NULL) - { - if (obj->type == PROPDEF_AIRCRAFT) - { - model = get_aircraft_obj_instance_controller(model_header); - } - else - { - model = get_obj_instance_controller_for_header(model_header); - } - } - - if ((prop != NULL) && (model != NULL)) - { - obj->model = model; - obj->ptr_allocated_collisiondata_block = NULL; - - if (obj->flags & 0x100) - { - obj->ptr_allocated_collisiondata_block = mempAllocBytesInBank(0x50U, MEMPOOL_STAGE); - obj->state = (u8) (obj->state | PROPSTATE_EXT_COLISION_BLOCK); - } - else - { - obj->state = (u8) (obj->state & 0xFFF7); - } - - obj->prop = prop; - obj->projectile = NULL; - - obj->shadecol.r = 0; - obj->shadecol.g = 0; - obj->shadecol.b = 0; - obj->shadecol.a = 0; - - obj->nextcol.r = 0; - obj->nextcol.g = 0; - obj->nextcol.b = 0; - obj->nextcol.a = 0; - - obj->maxdamage = 0.0f; - *((s16*)&obj->model->unk00) = -1; - obj->model->chr = NULL; - modelSetScale(obj->model, PitemZ_entries[obj->obj].scale); - prop->type = 1; - prop->obj = obj; - prop->pos.x = 0.0f; - obj->runtime_pos.x = 0.0f; - prop->pos.y = 0.0f; - obj->runtime_pos.y = 0.0f; - prop->pos.z = 0.0f; - obj->runtime_pos.z = 0.0f; - prop->stan = NULL; - } - else - { - if (model != NULL) - { - if (obj->type == PROPDEF_AIRCRAFT) - { - clear_aircraft_model_obj(model); - } - else - { - clear_model_obj(model); - } - } - - if (prop != NULL) - { - chrpropFree(prop); - prop = NULL; - } - } - - return prop; -} - - -PropRecord* objInitWithModelDef(ObjectRecord* object, ModelFileHeader* header) -{ - return objInit(object, header, 0, 0); -} - - -PropRecord* objInitWithAutoModel(ObjectRecord* obj) -{ - return objInitWithModelDef(obj, PitemZ_entries[obj->obj].header); -} - - -// Changes the color shade on the object, e.g. when walking in a darker area or under a colored light. -void objChangeShading(ObjectRecord* obj, coord3d* pos, Mtxf* matrix, StandTile* stan) { - - PropRecord *prop = obj->prop; - - matrix_4x4_copy(matrix, &obj->mtx); - - obj->runtime_pos.x = prop->pos.x = pos->x; - obj->runtime_pos.y = prop->pos.y = pos->y; - obj->runtime_pos.z = prop->pos.z = pos->z; - - prop->stan = stan; - - sub_GAME_7F0402B4(obj->prop, &obj->nextcol); - - obj->shadecol.r = obj->nextcol.r; - obj->shadecol.g = obj->nextcol.g; - obj->shadecol.b = obj->nextcol.b; - obj->shadecol.a = obj->nextcol.a; -} - - -// Unreferenced function (unused) -void sub_GAME_7F0407F4(ObjectRecord* obj, coord3d* pos, Mtxf* matrix, StandTile* stan) -{ - u32 a; // Adds 4 bytes to the stack so it matches. Could be anything 4 bytes long. - struct ModelRoData_BoundingBoxRecord *modelunk = chrobjGetBboxFromObjFile(obj->model->obj); - - pos->y = stanGetPositionYValue(stan, pos->x, pos->z) + 4.0f; - pos->y = pos->y - chrpropSumMatrixPosY(modelunk, matrix); - - objChangeShading(obj, pos, matrix, stan); - chrobjCollisionRelated(obj); -} - - -//moveToPad -void sub_GAME_7F04088C(ObjectRecord *baseobj, struct coord3d *pos, Mtxf *matrix, StandTile *stan, struct coord3d *pos2) -{ - int padd[1]; - ModelRoData_BoundingBoxRecord *modelBoundingBox; - f32 xmax; - f32 ymin; - coord3d newPos; - StandTile *mStan; - Mtxf mtxcopy; - - modelBoundingBox = chrobjGetBboxFromObjFile(baseobj->model->obj); - xmax = chrpropBBOXGetYmin(modelBoundingBox); - ymin = chrpropBBOXGetYmax(modelBoundingBox); - mStan = stan; - - if (baseobj->flags & 4) - { - matrix_4x4_set_rotation_around_z(M_PI, &mtxcopy); - matrix_4x4_multiply_in_place(matrix, &mtxcopy); - newPos.x = pos2->f[0] - (mtxcopy.m[1][0] * ymin); - newPos.y = pos2->f[1] - (mtxcopy.m[1][1] * ymin); - newPos.z = pos2->f[2] - (mtxcopy.m[1][2] * ymin); - } - else if (baseobj->flags & 8) - { - matrix_4x4_copy(matrix, &mtxcopy); - newPos.x = pos2->f[0] - (mtxcopy.m[1][0] * xmax); - newPos.y = pos2->f[1] - (mtxcopy.m[1][1] * xmax); - newPos.z = pos2->f[2] - (mtxcopy.m[1][2] * xmax); - } - else - { - ObjectRecord *roomObj; - f32 distfromTileCenter; - f32 byrefA; - f32 byrefB; - f32 byrefC; - f32 byrefD; - - distfromTileCenter = stanGetPositionYValue(mStan, pos->f[0], pos->f[2]); - - matrix_4x4_copy(matrix, &mtxcopy); - newPos.x = pos2->f[0] - (mtxcopy.m[1][0] * xmax); - newPos.z = pos2->f[2] - (mtxcopy.m[1][2] * xmax); - roomObj = sub_GAME_7F03FAB0(pos, stan->room); - - if (roomObj) - { - PropRecord *roomObjProp = roomObj->prop; - chraiGetCollisionBounds(roomObjProp, &byrefA, &byrefB, &byrefC, &byrefD); - - if ((distfromTileCenter < byrefC) && (byrefD < ((mtxcopy.m[1][1] * (ymin - xmax)) + distfromTileCenter + 4.0f))) - { - newPos.y = byrefC - (mtxcopy.m[1][1] * xmax); - baseobj->runtime_bitflags |= RUNTIMEBITFLAG_00008000; - } - else - { - newPos.y = (distfromTileCenter - (mtxcopy.m[1][1] * xmax)) + 4.0f; - } - } - else - { - newPos.y = (distfromTileCenter - (mtxcopy.m[1][1] * xmax)) + 4.0f; - } - } - - if (!(baseobj->flags2 & 1) && walkTilesBetweenPoints_NoCallback(&mStan, pos->f[0], pos->f[2], newPos.x, newPos.z)) - { - objChangeShading(baseobj, &newPos, &mtxcopy, mStan); - } - else - { - objChangeShading(baseobj, pos, &mtxcopy, stan); - if ((baseobj->flags2 & 1) || (baseobj->flags & 0x1000)) - { - baseobj->runtime_pos.x = newPos.x; - baseobj->runtime_pos.y = newPos.y; - baseobj->runtime_pos.z = newPos.z; - } - #ifdef DEBUG - else - { - osSyncPrintf("prop not positioned correctly!\n"); - } - #endif - } - - chrobjCollisionRelated(baseobj); -} - - -void sub_GAME_7F040BA0(ObjectRecord *obj, coord3d *pos, Mtxf *arg2, StandTile *stan2, coord3d *pos2) -{ - Mtxf *sp6C_ptr; - f32 (*sp6Cm_ptr)[4]; - f32 spBC; - coord3d posdiff; - StandTile *stan; - Mtxf matrix; - Mtxf sp2C; - - spBC = chrpropBBOXGetZmin(chrobjGetBboxFromObjFile(obj->model->obj)); - stan = stan2; - sp6C_ptr = &matrix; - - matrix_4x4_set_rotation_around_x(4.712389f, sp6C_ptr); - - sp6Cm_ptr = matrix.m; - - matrix_4x4_set_rotation_around_y(M_PI_F, &sp2C); - matrix_4x4_multiply_in_place(&sp2C, sp6C_ptr); - matrix_4x4_multiply_in_place(arg2, &matrix); - - posdiff.x = pos2->x - (sp6Cm_ptr[2][0] * spBC); - posdiff.y = pos2->y - (sp6Cm_ptr[2][1] * spBC); - posdiff.z = pos2->z - (sp6Cm_ptr[2][2] * spBC); - - if ((!(((s32) obj->flags2) & 1)) && (walkTilesBetweenPoints_NoCallback(&stan, pos->x, pos->z, posdiff.x, posdiff.z) != 0)) - { - objChangeShading(obj, &posdiff, &matrix, stan); - } - else - { - objChangeShading(obj, pos, &matrix, stan2); - obj->runtime_pos.x = posdiff.x; - obj->runtime_pos.y = posdiff.y; - obj->runtime_pos.z = posdiff.z; - } - - chrobjCollisionRelated(obj); -} - - -void objFreeEmbedmentOrProjectile(PropRecord *prop) -{ - ObjectRecord *obj = prop->obj; - if (obj->runtime_bitflags & RUNTIMEBITFLAG_EMBEDDED) - { - if (obj->embedment) - { - if (obj->embedment->projectile) - { - projectileFree(obj->embedment->projectile); - } - #ifdef DEBUG - else - { - osSyncPrintf("ERROR: PROPHIDD_ATTACHED was, but move.attach was NULL\a\n"); - osSyncPrintf("po->obj=%d\n", obj->obj); - osSyncPrintf("p->flags=%08x\n", prop->flags); - osSyncPrintf("po->flags2=%08x\n", obj->flags2); - osSyncPrintf("p->timetoregen=%d\n", prop->timetoregen); - } - #endif - - embedmentFree(obj->embedment); - } - obj->embedment = NULL; - obj->runtime_bitflags &= ~RUNTIMEBITFLAG_EMBEDDED; - } - else if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) - { - projectileFree(obj->projectile); - obj->projectile = NULL; - obj->runtime_bitflags &= ~RUNTIMEBITFLAG_DEPOSIT; - } -} - - -void objFree(ObjectRecord* obj, s32 freeprop, s32 canregen) -{ - PropRecord *child; - - if (obj->type == PROPDEF_AUTOGUN) - { - AutogunRecord* record = (AutogunRecord*)obj; - if ((record->unkC4 != NULL) && (sndGetPlayingState(record->unkC4) != 0)) - { - sndDeactivate(record->unkC4); - } - - if ((record->unkC8 != NULL) && (sndGetPlayingState(record->unkC8) != 0)) - { - sndDeactivate(record->unkC8); - } - } - else if (obj->type == PROPDEF_COLLECTABLE) - { - WeaponObjRecord* record = (WeaponObjRecord*) obj; - WeaponObjRecord* record2 = record->dualweapon; - if (record2 != NULL) - { - record2->dualweapon = NULL; - record->dualweapon = NULL; - } - } - else if (obj->type == PROPDEF_DOOR) - { - DoorRecord* record = (DoorRecord*) obj; - if ((record->openSoundState != NULL) && (sndGetPlayingState(record->openSoundState) != 0)) - { - sndDeactivate(record->openSoundState); - } - - if ((record->closeSoundState != NULL) && (sndGetPlayingState(record->closeSoundState) != 0)) - { - sndDeactivate(record->closeSoundState); - } - } - else if (obj->type == PROPDEF_TINTED_GLASS) - { - TintedGlassRecord* record = (TintedGlassRecord*) obj; - if (record->portalnum >= 0) - { - bgToggleDataPortalsContrlBytes1Bit1(record->portalnum, 1); - } - } - else if (obj->type == PROPDEF_AIRCRAFT) - { - AircraftRecord* record = (AircraftRecord*) obj; - if ((record->Sound != NULL) && (sndGetPlayingState(record->Sound) != 0)) - { - sndDeactivate(record->Sound); - } - } - else if (obj->type == PROPDEF_VEHICHLE) - { - VehichleRecord* record = (VehichleRecord*) obj; - if ((record->Sound != NULL) && (sndGetPlayingState(record->Sound) != 0)) - { - sndDeactivate(record->Sound); - } - } - - if (obj->prop != NULL) - { - explosionClearBulletImpactRoomByFlag(obj->prop, FALSE); - explosionClearBulletImpactRoomByFlag(obj->prop, TRUE); - - if (canregen == 0) - { - objFreeEmbedmentOrProjectile(obj->prop); - - if (obj->prop->parent != NULL) - { - objDetach(obj->prop); - } - - chrpropDeregisterRooms(obj->prop); - - child = obj->prop->child; - while (child) - { - PropRecord* next = child->prev; - objFreePermanently(child->obj, TRUE); - child = next; - } - - if (obj->prop->type != PROP_TYPE_DOOR) - { - sub_GAME_7F050DE8(obj->model); - } - - if (obj->type == PROPDEF_AIRCRAFT) - { - clear_aircraft_model_obj(obj->model); - } - else - { - clear_model_obj(obj->model); - } - - if (freeprop != 0) - { - chrpropDelist(obj->prop); - chrpropDisable(obj->prop); - chrpropFree(obj->prop); - } - - obj->prop = NULL; - } - } -} - - -void objFreePermanently(struct ObjectRecord * obj, bool freeprop) -{ - objFree(obj, freeprop, 0); -} - - -float objGetWidth(struct ObjectRecord * obj) -{ - if (obj->type == PROP_TYPE_WEAPON) - { - return 20.0f; - } - return 10.0f; -} - - -bool sub_GAME_7F041074(coord3d *zeropos, coord3d *pos, coord3d *vec, f32 scale) -{ - vec3d vector; - f32 dist2rd; - - vector.x = vec->x - zeropos->x; - vector.y = vec->y - zeropos->y; - vector.z = vec->z - zeropos->z; - - dist2rd = pos->f[0] * vector.f[0] + pos->f[1] * vector.f[1] + pos->f[2] * vector.f[2]; - - if (dist2rd > 0) { - f32 a = pos->f[0] * pos->f[0] + pos->f[1] * pos->f[1] + pos->f[2] * pos->f[2]; - f32 b = vector.f[0] * vector.f[0] + vector.f[1] * vector.f[1] + vector.f[2] * vector.f[2]; - - if ((b - scale * scale) * a <= dist2rd * dist2rd) { - return 1; - } - } - - return 0; -} - - - - - -#ifdef NONMATCHING -void sub_GAME_7F041160(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F041160 -/* 075C90 7F041160 27BDFF58 */ addiu $sp, $sp, -0xa8 -/* 075C94 7F041164 AFBF0044 */ sw $ra, 0x44($sp) -/* 075C98 7F041168 AFB70040 */ sw $s7, 0x40($sp) -/* 075C9C 7F04116C AFB6003C */ sw $s6, 0x3c($sp) -/* 075CA0 7F041170 AFB50038 */ sw $s5, 0x38($sp) -/* 075CA4 7F041174 AFB40034 */ sw $s4, 0x34($sp) -/* 075CA8 7F041178 AFB30030 */ sw $s3, 0x30($sp) -/* 075CAC 7F04117C AFB2002C */ sw $s2, 0x2c($sp) -/* 075CB0 7F041180 AFB10028 */ sw $s1, 0x28($sp) -/* 075CB4 7F041184 AFB00024 */ sw $s0, 0x24($sp) -/* 075CB8 7F041188 AFA700B4 */ sw $a3, 0xb4($sp) -/* 075CBC 7F04118C 8C970014 */ lw $s7, 0x14($a0) -/* 075CC0 7F041190 AFA0009C */ sw $zero, 0x9c($sp) -/* 075CC4 7F041194 AFA00064 */ sw $zero, 0x64($sp) -/* 075CC8 7F041198 908E0003 */ lbu $t6, 3($a0) -/* 075CCC 7F04119C 24010001 */ li $at, 1 -/* 075CD0 7F0411A0 00A08825 */ move $s1, $a1 -/* 075CD4 7F0411A4 15C1001A */ bne $t6, $at, .L7F041210 -/* 075CD8 7F0411A8 00C09825 */ move $s3, $a2 -/* 075CDC 7F0411AC 248400D0 */ addiu $a0, $a0, 0xd0 -/* 075CE0 7F0411B0 8EE5000C */ lw $a1, 0xc($s7) -/* 075CE4 7F0411B4 02203025 */ move $a2, $s1 -/* 075CE8 7F0411B8 0FC1D1F4 */ jal sub_GAME_7F0747D0 -/* 075CEC 7F0411BC 02603825 */ move $a3, $s3 -/* 075CF0 7F0411C0 8EEF0008 */ lw $t7, 8($s7) -/* 075CF4 7F0411C4 00408025 */ move $s0, $v0 -/* 075CF8 7F0411C8 27B4006C */ addiu $s4, $sp, 0x6c -/* 075CFC 7F0411CC 8DF80000 */ lw $t8, ($t7) -/* 075D00 7F0411D0 27B50068 */ addiu $s5, $sp, 0x68 -/* 075D04 7F0411D4 18400025 */ blez $v0, .L7F04126C -/* 075D08 7F0411D8 AFB8009C */ sw $t8, 0x9c($sp) -/* 075D0C 7F0411DC 27B60064 */ addiu $s6, $sp, 0x64 -/* 075D10 7F0411E0 AFB60018 */ sw $s6, 0x18($sp) -/* 075D14 7F0411E4 02E02025 */ move $a0, $s7 -/* 075D18 7F0411E8 03002825 */ move $a1, $t8 -/* 075D1C 7F0411EC 02203025 */ move $a2, $s1 -/* 075D20 7F0411F0 02603825 */ move $a3, $s3 -/* 075D24 7F0411F4 AFB40010 */ sw $s4, 0x10($sp) -/* 075D28 7F0411F8 0FC1366C */ jal sub_GAME_7F04D9B0 -/* 075D2C 7F0411FC AFB50014 */ sw $s5, 0x14($sp) -/* 075D30 7F041200 1440001A */ bnez $v0, .L7F04126C -/* 075D34 7F041204 00000000 */ nop -/* 075D38 7F041208 10000018 */ b .L7F04126C -/* 075D3C 7F04120C 00008025 */ move $s0, $zero -.L7F041210: -/* 075D40 7F041210 27B60064 */ addiu $s6, $sp, 0x64 -/* 075D44 7F041214 27B50068 */ addiu $s5, $sp, 0x68 -/* 075D48 7F041218 27B4006C */ addiu $s4, $sp, 0x6c -/* 075D4C 7F04121C 27B2009C */ addiu $s2, $sp, 0x9c -/* 075D50 7F041220 02E02025 */ move $a0, $s7 -.L7F041224: -/* 075D54 7F041224 02202825 */ move $a1, $s1 -/* 075D58 7F041228 02603025 */ move $a2, $s3 -/* 075D5C 7F04122C 0FC1D4BF */ jal sub_GAME_7F0752FC -/* 075D60 7F041230 02403825 */ move $a3, $s2 -/* 075D64 7F041234 1840000B */ blez $v0, .L7F041264 -/* 075D68 7F041238 00408025 */ move $s0, $v0 -/* 075D6C 7F04123C 02E02025 */ move $a0, $s7 -/* 075D70 7F041240 8FA5009C */ lw $a1, 0x9c($sp) -/* 075D74 7F041244 02203025 */ move $a2, $s1 -/* 075D78 7F041248 02603825 */ move $a3, $s3 -/* 075D7C 7F04124C AFB40010 */ sw $s4, 0x10($sp) -/* 075D80 7F041250 AFB50014 */ sw $s5, 0x14($sp) -/* 075D84 7F041254 0FC1366C */ jal sub_GAME_7F04D9B0 -/* 075D88 7F041258 AFB60018 */ sw $s6, 0x18($sp) -/* 075D8C 7F04125C 14400003 */ bnez $v0, .L7F04126C -/* 075D90 7F041260 00000000 */ nop -.L7F041264: -/* 075D94 7F041264 5E00FFEF */ bgtzl $s0, .L7F041224 -/* 075D98 7F041268 02E02025 */ move $a0, $s7 -.L7F04126C: -/* 075D9C 7F04126C 1A000059 */ blez $s0, .L7F0413D4 -/* 075DA0 7F041270 00001025 */ move $v0, $zero -/* 075DA4 7F041274 C7A4006C */ lwc1 $f4, 0x6c($sp) -/* 075DA8 7F041278 8FA500B4 */ lw $a1, 0xb4($sp) -/* 075DAC 7F04127C 8EF9000C */ lw $t9, 0xc($s7) -/* 075DB0 7F041280 8FA80068 */ lw $t0, 0x68($sp) -/* 075DB4 7F041284 E4A40000 */ swc1 $f4, ($a1) -/* 075DB8 7F041288 C7A60070 */ lwc1 $f6, 0x70($sp) -/* 075DBC 7F04128C 00084980 */ sll $t1, $t0, 6 -/* 075DC0 7F041290 03298821 */ addu $s1, $t9, $t1 -/* 075DC4 7F041294 E4A60004 */ swc1 $f6, 4($a1) -/* 075DC8 7F041298 C7A80074 */ lwc1 $f8, 0x74($sp) -/* 075DCC 7F04129C 02202025 */ move $a0, $s1 -/* 075DD0 7F0412A0 0FC1611D */ jal mtx4TransformVecInPlace -/* 075DD4 7F0412A4 E4A80008 */ swc1 $f8, 8($a1) -/* 075DD8 7F0412A8 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 075DDC 7F0412AC 00000000 */ nop -/* 075DE0 7F0412B0 00402025 */ move $a0, $v0 -/* 075DE4 7F0412B4 0FC1611D */ jal mtx4TransformVecInPlace -/* 075DE8 7F0412B8 8FA500B4 */ lw $a1, 0xb4($sp) -/* 075DEC 7F0412BC 8FB000B8 */ lw $s0, 0xb8($sp) -/* 075DF0 7F0412C0 C7AA0078 */ lwc1 $f10, 0x78($sp) -/* 075DF4 7F0412C4 02202025 */ move $a0, $s1 -/* 075DF8 7F0412C8 02002825 */ move $a1, $s0 -/* 075DFC 7F0412CC E60A0000 */ swc1 $f10, ($s0) -/* 075E00 7F0412D0 C7B0007C */ lwc1 $f16, 0x7c($sp) -/* 075E04 7F0412D4 E6100004 */ swc1 $f16, 4($s0) -/* 075E08 7F0412D8 C7B20080 */ lwc1 $f18, 0x80($sp) -/* 075E0C 7F0412DC 0FC160F6 */ jal mtx4RotateVecInPlace -/* 075E10 7F0412E0 E6120008 */ swc1 $f18, 8($s0) -/* 075E14 7F0412E4 C6020000 */ lwc1 $f2, ($s0) -/* 075E18 7F0412E8 C6640000 */ lwc1 $f4, ($s3) -/* 075E1C 7F0412EC C60C0004 */ lwc1 $f12, 4($s0) -/* 075E20 7F0412F0 C6680004 */ lwc1 $f8, 4($s3) -/* 075E24 7F0412F4 46041182 */ mul.s $f6, $f2, $f4 -/* 075E28 7F0412F8 C6000008 */ lwc1 $f0, 8($s0) -/* 075E2C 7F0412FC C6720008 */ lwc1 $f18, 8($s3) -/* 075E30 7F041300 46086282 */ mul.s $f10, $f12, $f8 -/* 075E34 7F041304 44807000 */ mtc1 $zero, $f14 -/* 075E38 7F041308 46009102 */ mul.s $f4, $f18, $f0 -/* 075E3C 7F04130C 460A3400 */ add.s $f16, $f6, $f10 -/* 075E40 7F041310 46102200 */ add.s $f8, $f4, $f16 -/* 075E44 7F041314 4608703C */ c.lt.s $f14, $f8 -/* 075E48 7F041318 00000000 */ nop -/* 075E4C 7F04131C 45000007 */ bc1f .L7F04133C -/* 075E50 7F041320 00000000 */ nop -/* 075E54 7F041324 46001187 */ neg.s $f6, $f2 -/* 075E58 7F041328 46006287 */ neg.s $f10, $f12 -/* 075E5C 7F04132C 46000487 */ neg.s $f18, $f0 -/* 075E60 7F041330 E6060000 */ swc1 $f6, ($s0) -/* 075E64 7F041334 E60A0004 */ swc1 $f10, 4($s0) -/* 075E68 7F041338 E6120008 */ swc1 $f18, 8($s0) -.L7F04133C: -/* 075E6C 7F04133C 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 075E70 7F041340 00000000 */ nop -/* 075E74 7F041344 00402025 */ move $a0, $v0 -/* 075E78 7F041348 0FC160F6 */ jal mtx4RotateVecInPlace -/* 075E7C 7F04134C 02002825 */ move $a1, $s0 -/* 075E80 7F041350 44807000 */ mtc1 $zero, $f14 -/* 075E84 7F041354 C6040000 */ lwc1 $f4, ($s0) -/* 075E88 7F041358 02002025 */ move $a0, $s0 -/* 075E8C 7F04135C 26050004 */ addiu $a1, $s0, 4 -/* 075E90 7F041360 46047032 */ c.eq.s $f14, $f4 -/* 075E94 7F041364 00000000 */ nop -/* 075E98 7F041368 4500000C */ bc1f .L7F04139C -/* 075E9C 7F04136C 00000000 */ nop -/* 075EA0 7F041370 C6100004 */ lwc1 $f16, 4($s0) -/* 075EA4 7F041374 46107032 */ c.eq.s $f14, $f16 -/* 075EA8 7F041378 00000000 */ nop -/* 075EAC 7F04137C 45000007 */ bc1f .L7F04139C -/* 075EB0 7F041380 00000000 */ nop -/* 075EB4 7F041384 C6080008 */ lwc1 $f8, 8($s0) -/* 075EB8 7F041388 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 075EBC 7F04138C 46087032 */ c.eq.s $f14, $f8 -/* 075EC0 7F041390 00000000 */ nop -/* 075EC4 7F041394 45030006 */ bc1tl .L7F0413B0 -/* 075EC8 7F041398 44813000 */ mtc1 $at, $f6 -.L7F04139C: -/* 075ECC 7F04139C 0C007DD4 */ jal guNormalize -/* 075ED0 7F0413A0 26060008 */ addiu $a2, $s0, 8 -/* 075ED4 7F0413A4 10000005 */ b .L7F0413BC -/* 075ED8 7F0413A8 8FAB00BC */ lw $t3, 0xbc($sp) -/* 075EDC 7F0413AC 44813000 */ mtc1 $at, $f6 -.L7F0413B0: -/* 075EE0 7F0413B0 00000000 */ nop -/* 075EE4 7F0413B4 E6060008 */ swc1 $f6, 8($s0) -/* 075EE8 7F0413B8 8FAB00BC */ lw $t3, 0xbc($sp) -.L7F0413BC: -/* 075EEC 7F0413BC 24020001 */ li $v0, 1 -/* 075EF0 7F0413C0 AD770000 */ sw $s7, ($t3) -/* 075EF4 7F0413C4 8FAD00C0 */ lw $t5, 0xc0($sp) -/* 075EF8 7F0413C8 8FAC0064 */ lw $t4, 0x64($sp) -/* 075EFC 7F0413CC 10000001 */ b .L7F0413D4 -/* 075F00 7F0413D0 ADAC0000 */ sw $t4, ($t5) -.L7F0413D4: -/* 075F04 7F0413D4 8FBF0044 */ lw $ra, 0x44($sp) -/* 075F08 7F0413D8 8FB00024 */ lw $s0, 0x24($sp) -/* 075F0C 7F0413DC 8FB10028 */ lw $s1, 0x28($sp) -/* 075F10 7F0413E0 8FB2002C */ lw $s2, 0x2c($sp) -/* 075F14 7F0413E4 8FB30030 */ lw $s3, 0x30($sp) -/* 075F18 7F0413E8 8FB40034 */ lw $s4, 0x34($sp) -/* 075F1C 7F0413EC 8FB50038 */ lw $s5, 0x38($sp) -/* 075F20 7F0413F0 8FB6003C */ lw $s6, 0x3c($sp) -/* 075F24 7F0413F4 8FB70040 */ lw $s7, 0x40($sp) -/* 075F28 7F0413F8 03E00008 */ jr $ra -/* 075F2C 7F0413FC 27BD00A8 */ addiu $sp, $sp, 0xa8 -) -#endif - - - - - -#ifdef NONMATCHING -// PD: func0f06b488 -bool sub_GAME_7F041400(PropRecord *prop, coord3d *arg1, coord3d *arg2, coord3d *arg3, coord3d *arg4, coord3d *arg5, f32 *arg6) { - -} -#else -bool sub_GAME_7F041400(PropRecord *prop, coord3d *arg1, coord3d *arg2, coord3d *arg3, coord3d *arg4, coord3d *arg5, f32 *arg6); -GLOBAL_ASM( -.text -glabel sub_GAME_7F041400 -/* 075F30 7F041400 27BDFF28 */ addiu $sp, $sp, -0xd8 -/* 075F34 7F041404 AFB50044 */ sw $s5, 0x44($sp) -/* 075F38 7F041408 AFB40040 */ sw $s4, 0x40($sp) -/* 075F3C 7F04140C F7B40028 */ sdc1 $f20, 0x28($sp) -/* 075F40 7F041410 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 075F44 7F041414 00C0A025 */ move $s4, $a2 -/* 075F48 7F041418 00A0A825 */ move $s5, $a1 -/* 075F4C 7F04141C AFBF0054 */ sw $ra, 0x54($sp) -/* 075F50 7F041420 AFA700E4 */ sw $a3, 0xe4($sp) -/* 075F54 7F041424 4481A000 */ mtc1 $at, $f20 -/* 075F58 7F041428 240EFFFF */ li $t6, -1 -/* 075F5C 7F04142C 27AF00C8 */ addiu $t7, $sp, 0xc8 -/* 075F60 7F041430 AFBE0050 */ sw $fp, 0x50($sp) -/* 075F64 7F041434 AFB7004C */ sw $s7, 0x4c($sp) -/* 075F68 7F041438 AFB60048 */ sw $s6, 0x48($sp) -/* 075F6C 7F04143C AFB3003C */ sw $s3, 0x3c($sp) -/* 075F70 7F041440 AFB20038 */ sw $s2, 0x38($sp) -/* 075F74 7F041444 AFB10034 */ sw $s1, 0x34($sp) -/* 075F78 7F041448 AFB00030 */ sw $s0, 0x30($sp) -/* 075F7C 7F04144C AFA400D8 */ sw $a0, 0xd8($sp) -/* 075F80 7F041450 AFAE0094 */ sw $t6, 0x94($sp) -/* 075F84 7F041454 AFAF0010 */ sw $t7, 0x10($sp) -/* 075F88 7F041458 27A700CC */ addiu $a3, $sp, 0xcc -/* 075F8C 7F04145C 27A500D4 */ addiu $a1, $sp, 0xd4 -/* 075F90 7F041460 0FC0F308 */ jal chraiGetCollisionBounds -/* 075F94 7F041464 27A600D0 */ addiu $a2, $sp, 0xd0 -/* 075F98 7F041468 8FB800D0 */ lw $t8, 0xd0($sp) -/* 075F9C 7F04146C C7A400CC */ lwc1 $f4, 0xcc($sp) -/* 075FA0 7F041470 5B0000CD */ blezl $t8, .L7F0417A8 -/* 075FA4 7F041474 00001025 */ move $v0, $zero -/* 075FA8 7F041478 C6A00004 */ lwc1 $f0, 4($s5) -/* 075FAC 7F04147C C7A800C8 */ lwc1 $f8, 0xc8($sp) -/* 075FB0 7F041480 4600203C */ c.lt.s $f4, $f0 -/* 075FB4 7F041484 00000000 */ nop -/* 075FB8 7F041488 45020007 */ bc1fl .L7F0414A8 -/* 075FBC 7F04148C 4608003C */ c.lt.s $f0, $f8 -/* 075FC0 7F041490 C6860004 */ lwc1 $f6, 4($s4) -/* 075FC4 7F041494 4606203C */ c.lt.s $f4, $f6 -/* 075FC8 7F041498 00000000 */ nop -/* 075FCC 7F04149C 450300C2 */ bc1tl .L7F0417A8 -/* 075FD0 7F0414A0 00001025 */ move $v0, $zero -/* 075FD4 7F0414A4 4608003C */ c.lt.s $f0, $f8 -.L7F0414A8: -/* 075FD8 7F0414A8 00000000 */ nop -/* 075FDC 7F0414AC 45020007 */ bc1fl .L7F0414CC -/* 075FE0 7F0414B0 C6B00000 */ lwc1 $f16, ($s5) -/* 075FE4 7F0414B4 C68A0004 */ lwc1 $f10, 4($s4) -/* 075FE8 7F0414B8 4608503C */ c.lt.s $f10, $f8 -/* 075FEC 7F0414BC 00000000 */ nop -/* 075FF0 7F0414C0 450300B9 */ bc1tl .L7F0417A8 -/* 075FF4 7F0414C4 00001025 */ move $v0, $zero -/* 075FF8 7F0414C8 C6B00000 */ lwc1 $f16, ($s5) -.L7F0414CC: -/* 075FFC 7F0414CC 8FB900D0 */ lw $t9, 0xd0($sp) -/* 076000 7F0414D0 00008025 */ move $s0, $zero -/* 076004 7F0414D4 E7B000A0 */ swc1 $f16, 0xa0($sp) -/* 076008 7F0414D8 C6B20008 */ lwc1 $f18, 8($s5) -/* 07600C 7F0414DC E7B200A4 */ swc1 $f18, 0xa4($sp) -/* 076010 7F0414E0 C6840000 */ lwc1 $f4, ($s4) -/* 076014 7F0414E4 E7A40098 */ swc1 $f4, 0x98($sp) -/* 076018 7F0414E8 C6860008 */ lwc1 $f6, 8($s4) -/* 07601C 7F0414EC 1B200043 */ blez $t9, .L7F0415FC -/* 076020 7F0414F0 E7A6009C */ swc1 $f6, 0x9c($sp) -/* 076024 7F0414F4 00008825 */ move $s1, $zero -/* 076028 7F0414F8 27BE00B0 */ addiu $fp, $sp, 0xb0 -/* 07602C 7F0414FC 27B70098 */ addiu $s7, $sp, 0x98 -/* 076030 7F041500 27B600A0 */ addiu $s6, $sp, 0xa0 -/* 076034 7F041504 8FA800D0 */ lw $t0, 0xd0($sp) -.L7F041508: -/* 076038 7F041508 26130001 */ addiu $s3, $s0, 1 -/* 07603C 7F04150C 8FA900D4 */ lw $t1, 0xd4($sp) -/* 076040 7F041510 0268001A */ div $zero, $s3, $t0 -/* 076044 7F041514 01311821 */ addu $v1, $t1, $s1 -/* 076048 7F041518 C46A0000 */ lwc1 $f10, ($v1) -/* 07604C 7F04151C C6AC0000 */ lwc1 $f12, ($s5) -/* 076050 7F041520 C6AE0008 */ lwc1 $f14, 8($s5) -/* 076054 7F041524 8E860000 */ lw $a2, ($s4) -/* 076058 7F041528 8E870008 */ lw $a3, 8($s4) -/* 07605C 7F04152C E7AA0010 */ swc1 $f10, 0x10($sp) -/* 076060 7F041530 C4680004 */ lwc1 $f8, 4($v1) -/* 076064 7F041534 00001010 */ mfhi $v0 -/* 076068 7F041538 000250C0 */ sll $t2, $v0, 3 -/* 07606C 7F04153C 012A2021 */ addu $a0, $t1, $t2 -/* 076070 7F041540 E7A80014 */ swc1 $f8, 0x14($sp) -/* 076074 7F041544 C4900000 */ lwc1 $f16, ($a0) -/* 076078 7F041548 15000002 */ bnez $t0, .L7F041554 -/* 07607C 7F04154C 00000000 */ nop -/* 076080 7F041550 0007000D */ break 7 -.L7F041554: -/* 076084 7F041554 2401FFFF */ li $at, -1 -/* 076088 7F041558 15010004 */ bne $t0, $at, .L7F04156C -/* 07608C 7F04155C 3C018000 */ lui $at, 0x8000 -/* 076090 7F041560 16610002 */ bne $s3, $at, .L7F04156C -/* 076094 7F041564 00000000 */ nop -/* 076098 7F041568 0006000D */ break 6 -.L7F04156C: -/* 07609C 7F04156C E7B00018 */ swc1 $f16, 0x18($sp) -/* 0760A0 7F041570 C4920004 */ lwc1 $f18, 4($a0) -/* 0760A4 7F041574 00409025 */ move $s2, $v0 -/* 0760A8 7F041578 0FC2C1A2 */ jal sub_GAME_7F0B0688 -/* 0760AC 7F04157C E7B2001C */ swc1 $f18, 0x1c($sp) -/* 0760B0 7F041580 50400019 */ beql $v0, $zero, .L7F0415E8 -/* 0760B4 7F041584 8FAD00D0 */ lw $t5, 0xd0($sp) -/* 0760B8 7F041588 8FAB00D4 */ lw $t3, 0xd4($sp) -/* 0760BC 7F04158C 001260C0 */ sll $t4, $s2, 3 -/* 0760C0 7F041590 02C02025 */ move $a0, $s6 -/* 0760C4 7F041594 01711821 */ addu $v1, $t3, $s1 -/* 0760C8 7F041598 C4640000 */ lwc1 $f4, ($v1) -/* 0760CC 7F04159C 016C1021 */ addu $v0, $t3, $t4 -/* 0760D0 7F0415A0 02E02825 */ move $a1, $s7 -/* 0760D4 7F0415A4 E7A400B0 */ swc1 $f4, 0xb0($sp) -/* 0760D8 7F0415A8 C4660004 */ lwc1 $f6, 4($v1) -/* 0760DC 7F0415AC 03C03025 */ move $a2, $fp -/* 0760E0 7F0415B0 27A700A8 */ addiu $a3, $sp, 0xa8 -/* 0760E4 7F0415B4 E7A600B4 */ swc1 $f6, 0xb4($sp) -/* 0760E8 7F0415B8 C44A0000 */ lwc1 $f10, ($v0) -/* 0760EC 7F0415BC E7AA00A8 */ swc1 $f10, 0xa8($sp) -/* 0760F0 7F0415C0 C4480004 */ lwc1 $f8, 4($v0) -/* 0760F4 7F0415C4 0FC2CC80 */ jal calculateSegmentIntersectionFraction -/* 0760F8 7F0415C8 E7A800AC */ swc1 $f8, 0xac($sp) -/* 0760FC 7F0415CC 4614003C */ c.lt.s $f0, $f20 -/* 076100 7F0415D0 00000000 */ nop -/* 076104 7F0415D4 45020004 */ bc1fl .L7F0415E8 -/* 076108 7F0415D8 8FAD00D0 */ lw $t5, 0xd0($sp) -/* 07610C 7F0415DC 46000506 */ mov.s $f20, $f0 -/* 076110 7F0415E0 AFB00094 */ sw $s0, 0x94($sp) -/* 076114 7F0415E4 8FAD00D0 */ lw $t5, 0xd0($sp) -.L7F0415E8: -/* 076118 7F0415E8 02608025 */ move $s0, $s3 -/* 07611C 7F0415EC 26310008 */ addiu $s1, $s1, 8 -/* 076120 7F0415F0 026D082A */ slt $at, $s3, $t5 -/* 076124 7F0415F4 5420FFC4 */ bnezl $at, .L7F041508 -/* 076128 7F0415F8 8FA800D0 */ lw $t0, 0xd0($sp) -.L7F0415FC: -/* 07612C 7F0415FC 8FAE0094 */ lw $t6, 0x94($sp) -/* 076130 7F041600 8FAF00D4 */ lw $t7, 0xd4($sp) -/* 076134 7F041604 27A40088 */ addiu $a0, $sp, 0x88 -/* 076138 7F041608 19C00066 */ blez $t6, .L7F0417A4 -/* 07613C 7F04160C 000EC0C0 */ sll $t8, $t6, 3 -/* 076140 7F041610 8FA800D0 */ lw $t0, 0xd0($sp) -/* 076144 7F041614 25D90001 */ addiu $t9, $t6, 1 -/* 076148 7F041618 01F81021 */ addu $v0, $t7, $t8 -/* 07614C 7F04161C 0328001A */ div $zero, $t9, $t0 -/* 076150 7F041620 4480A000 */ mtc1 $zero, $f20 -/* 076154 7F041624 C4500000 */ lwc1 $f16, ($v0) -/* 076158 7F041628 00004810 */ mfhi $t1 -/* 07615C 7F04162C E7B4008C */ swc1 $f20, 0x8c($sp) -/* 076160 7F041630 E7B00088 */ swc1 $f16, 0x88($sp) -/* 076164 7F041634 C4520004 */ lwc1 $f18, 4($v0) -/* 076168 7F041638 000950C0 */ sll $t2, $t1, 3 -/* 07616C 7F04163C 01EA1821 */ addu $v1, $t7, $t2 -/* 076170 7F041640 E7B20090 */ swc1 $f18, 0x90($sp) -/* 076174 7F041644 C4640000 */ lwc1 $f4, ($v1) -/* 076178 7F041648 E7B40080 */ swc1 $f20, 0x80($sp) -/* 07617C 7F04164C 27AB006C */ addiu $t3, $sp, 0x6c -/* 076180 7F041650 E7A4007C */ swc1 $f4, 0x7c($sp) -/* 076184 7F041654 C4660004 */ lwc1 $f6, 4($v1) -/* 076188 7F041658 15000002 */ bnez $t0, .L7F041664 -/* 07618C 7F04165C 00000000 */ nop -/* 076190 7F041660 0007000D */ break 7 -.L7F041664: -/* 076194 7F041664 2401FFFF */ li $at, -1 -/* 076198 7F041668 15010004 */ bne $t0, $at, .L7F04167C -/* 07619C 7F04166C 3C018000 */ li $at, 0x80000000 # -0.000000 -/* 0761A0 7F041670 17210002 */ bne $t9, $at, .L7F04167C -/* 0761A4 7F041674 00000000 */ nop -/* 0761A8 7F041678 0006000D */ break 6 -.L7F04167C: -/* 0761AC 7F04167C AFAB0010 */ sw $t3, 0x10($sp) -/* 0761B0 7F041680 27A5007C */ addiu $a1, $sp, 0x7c -/* 0761B4 7F041684 02A03025 */ move $a2, $s5 -/* 0761B8 7F041688 8FA700E4 */ lw $a3, 0xe4($sp) -/* 0761BC 7F04168C 0FC0984C */ jal chrlvLineLineIntersection -/* 0761C0 7F041690 E7A60084 */ swc1 $f6, 0x84($sp) -/* 0761C4 7F041694 C7AA006C */ lwc1 $f10, 0x6c($sp) -/* 0761C8 7F041698 C6A80000 */ lwc1 $f8, ($s5) -/* 0761CC 7F04169C 8FA500E4 */ lw $a1, 0xe4($sp) -/* 0761D0 7F0416A0 C7A60070 */ lwc1 $f6, 0x70($sp) -/* 0761D4 7F0416A4 46085401 */ sub.s $f16, $f10, $f8 -/* 0761D8 7F0416A8 C6AA0004 */ lwc1 $f10, 4($s5) -/* 0761DC 7F0416AC C4B20000 */ lwc1 $f18, ($a1) -/* 0761E0 7F0416B0 8FA300F0 */ lw $v1, 0xf0($sp) -/* 0761E4 7F0416B4 460A3201 */ sub.s $f8, $f6, $f10 -/* 0761E8 7F0416B8 46128102 */ mul.s $f4, $f16, $f18 -/* 0761EC 7F0416BC C4B00004 */ lwc1 $f16, 4($a1) -/* 0761F0 7F0416C0 C7AA0074 */ lwc1 $f10, 0x74($sp) -/* 0761F4 7F0416C4 8FA200E8 */ lw $v0, 0xe8($sp) -/* 0761F8 7F0416C8 46104482 */ mul.s $f18, $f8, $f16 -/* 0761FC 7F0416CC C6A80008 */ lwc1 $f8, 8($s5) -/* 076200 7F0416D0 8FA400EC */ lw $a0, 0xec($sp) -/* 076204 7F0416D4 46085401 */ sub.s $f16, $f10, $f8 -/* 076208 7F0416D8 C46A0000 */ lwc1 $f10, ($v1) -/* 07620C 7F0416DC 46122180 */ add.s $f6, $f4, $f18 -/* 076210 7F0416E0 C4A40008 */ lwc1 $f4, 8($a1) -/* 076214 7F0416E4 46102482 */ mul.s $f18, $f4, $f16 -/* 076218 7F0416E8 46069000 */ add.s $f0, $f18, $f6 -/* 07621C 7F0416EC 460A003C */ c.lt.s $f0, $f10 -/* 076220 7F0416F0 00000000 */ nop -/* 076224 7F0416F4 4502002C */ bc1fl .L7F0417A8 -/* 076228 7F0416F8 00001025 */ move $v0, $zero -/* 07622C 7F0416FC E4600000 */ swc1 $f0, ($v1) -/* 076230 7F041700 C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 076234 7F041704 E4480000 */ swc1 $f8, ($v0) -/* 076238 7F041708 C7A40070 */ lwc1 $f4, 0x70($sp) -/* 07623C 7F04170C E4440004 */ swc1 $f4, 4($v0) -/* 076240 7F041710 C7B00074 */ lwc1 $f16, 0x74($sp) -/* 076244 7F041714 E4500008 */ swc1 $f16, 8($v0) -/* 076248 7F041718 C4B20000 */ lwc1 $f18, ($a1) -/* 07624C 7F04171C E4940004 */ swc1 $f20, 4($a0) -/* 076250 7F041720 46009187 */ neg.s $f6, $f18 -/* 076254 7F041724 E4860000 */ swc1 $f6, ($a0) -/* 076258 7F041728 C4840000 */ lwc1 $f4, ($a0) -/* 07625C 7F04172C C4AA0008 */ lwc1 $f10, 8($a1) -/* 076260 7F041730 24850004 */ addiu $a1, $a0, 4 -/* 076264 7F041734 4604A032 */ c.eq.s $f20, $f4 -/* 076268 7F041738 46005207 */ neg.s $f8, $f10 -/* 07626C 7F04173C 45000007 */ bc1f .L7F04175C -/* 076270 7F041740 E4880008 */ swc1 $f8, 8($a0) -/* 076274 7F041744 C4900008 */ lwc1 $f16, 8($a0) -/* 076278 7F041748 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07627C 7F04174C 4610A032 */ c.eq.s $f20, $f16 -/* 076280 7F041750 00000000 */ nop -/* 076284 7F041754 45030006 */ bc1tl .L7F041770 -/* 076288 7F041758 44819000 */ mtc1 $at, $f18 -.L7F04175C: -/* 07628C 7F04175C 0C007DD4 */ jal guNormalize -/* 076290 7F041760 24860008 */ addiu $a2, $a0, 8 -/* 076294 7F041764 10000005 */ b .L7F04177C -/* 076298 7F041768 8FAC00D8 */ lw $t4, 0xd8($sp) -/* 07629C 7F04176C 44819000 */ mtc1 $at, $f18 -.L7F041770: -/* 0762A0 7F041770 00000000 */ nop -/* 0762A4 7F041774 E4920008 */ swc1 $f18, 8($a0) -/* 0762A8 7F041778 8FAC00D8 */ lw $t4, 0xd8($sp) -.L7F04177C: -/* 0762AC 7F04177C 3C018003 */ lui $at, %hi(D_80030B0C) -/* 0762B0 7F041780 24020001 */ li $v0, 1 -/* 0762B4 7F041784 AC2C0B0C */ sw $t4, %lo(D_80030B0C)($at) -/* 0762B8 7F041788 3C018003 */ lui $at, %hi(bodypartshot) -/* 0762BC 7F04178C AC200B10 */ sw $zero, %lo(bodypartshot)($at) -/* 0762C0 7F041790 3C018007 */ lui $at, %hi(g_CurrentProjectileModel) -/* 0762C4 7F041794 AC205B70 */ sw $zero, %lo(g_CurrentProjectileModel)($at) -/* 0762C8 7F041798 3C018007 */ lui $at, %hi(dword_CODE_bss_80075B74) -/* 0762CC 7F04179C 10000002 */ b .L7F0417A8 -/* 0762D0 7F0417A0 AC205B74 */ sw $zero, %lo(dword_CODE_bss_80075B74)($at) -.L7F0417A4: -/* 0762D4 7F0417A4 00001025 */ move $v0, $zero -.L7F0417A8: -/* 0762D8 7F0417A8 8FBF0054 */ lw $ra, 0x54($sp) -/* 0762DC 7F0417AC D7B40028 */ ldc1 $f20, 0x28($sp) -/* 0762E0 7F0417B0 8FB00030 */ lw $s0, 0x30($sp) -/* 0762E4 7F0417B4 8FB10034 */ lw $s1, 0x34($sp) -/* 0762E8 7F0417B8 8FB20038 */ lw $s2, 0x38($sp) -/* 0762EC 7F0417BC 8FB3003C */ lw $s3, 0x3c($sp) -/* 0762F0 7F0417C0 8FB40040 */ lw $s4, 0x40($sp) -/* 0762F4 7F0417C4 8FB50044 */ lw $s5, 0x44($sp) -/* 0762F8 7F0417C8 8FB60048 */ lw $s6, 0x48($sp) -/* 0762FC 7F0417CC 8FB7004C */ lw $s7, 0x4c($sp) -/* 076300 7F0417D0 8FBE0050 */ lw $fp, 0x50($sp) -/* 076304 7F0417D4 03E00008 */ jr $ra -/* 076308 7F0417D8 27BD00D8 */ addiu $sp, $sp, 0xd8 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0417DC(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0417DC -/* 07630C 7F0417DC 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 076310 7F0417E0 AFB00028 */ sw $s0, 0x28($sp) -/* 076314 7F0417E4 00808025 */ move $s0, $a0 -/* 076318 7F0417E8 AFBF0034 */ sw $ra, 0x34($sp) -/* 07631C 7F0417EC AFB20030 */ sw $s2, 0x30($sp) -/* 076320 7F0417F0 AFB1002C */ sw $s1, 0x2c($sp) -/* 076324 7F0417F4 AFA60060 */ sw $a2, 0x60($sp) -/* 076328 7F0417F8 8C840014 */ lw $a0, 0x14($a0) -/* 07632C 7F0417FC 00A08825 */ move $s1, $a1 -/* 076330 7F041800 00E09025 */ move $s2, $a3 -/* 076334 7F041804 0FC1B403 */ jal getinstsize -/* 076338 7F041808 AFA40054 */ sw $a0, 0x54($sp) -/* 07633C 7F04180C 8E020010 */ lw $v0, 0x10($s0) -/* 076340 7F041810 44801000 */ mtc1 $zero, $f2 -/* 076344 7F041814 8C4E001C */ lw $t6, 0x1c($v0) -/* 076348 7F041818 55C00013 */ bnezl $t6, .L7F041868 -/* 07634C 7F04181C 46000207 */ neg.s $f8, $f0 -/* 076350 7F041820 C6040058 */ lwc1 $f4, 0x58($s0) -/* 076354 7F041824 C6260000 */ lwc1 $f6, ($s1) -/* 076358 7F041828 C608005C */ lwc1 $f8, 0x5c($s0) -/* 07635C 7F04182C C62A0004 */ lwc1 $f10, 4($s1) -/* 076360 7F041830 46062301 */ sub.s $f12, $f4, $f6 -/* 076364 7F041834 C6460000 */ lwc1 $f6, ($s2) -/* 076368 7F041838 C6240008 */ lwc1 $f4, 8($s1) -/* 07636C 7F04183C 460A4381 */ sub.s $f14, $f8, $f10 -/* 076370 7F041840 C6120060 */ lwc1 $f18, 0x60($s0) -/* 076374 7F041844 46066202 */ mul.s $f8, $f12, $f6 -/* 076378 7F041848 C64A0004 */ lwc1 $f10, 4($s2) -/* 07637C 7F04184C 46049401 */ sub.s $f16, $f18, $f4 -/* 076380 7F041850 C6460008 */ lwc1 $f6, 8($s2) -/* 076384 7F041854 460A7482 */ mul.s $f18, $f14, $f10 -/* 076388 7F041858 46124100 */ add.s $f4, $f8, $f18 -/* 07638C 7F04185C 46103282 */ mul.s $f10, $f6, $f16 -/* 076390 7F041860 46045080 */ add.s $f2, $f10, $f4 -/* 076394 7F041864 46000207 */ neg.s $f8, $f0 -.L7F041868: -/* 076398 7F041868 C7B20068 */ lwc1 $f18, 0x68($sp) -/* 07639C 7F04186C 4602403E */ c.le.s $f8, $f2 -/* 0763A0 7F041870 00000000 */ nop -/* 0763A4 7F041874 45020055 */ bc1fl .L7F0419CC -/* 0763A8 7F041878 00001025 */ move $v0, $zero -/* 0763AC 7F04187C 46009180 */ add.s $f6, $f18, $f0 -/* 0763B0 7F041880 4606103E */ c.le.s $f2, $f6 -/* 0763B4 7F041884 00000000 */ nop -/* 0763B8 7F041888 45020050 */ bc1fl .L7F0419CC -/* 0763BC 7F04188C 00001025 */ move $v0, $zero -/* 0763C0 7F041890 904F0001 */ lbu $t7, 1($v0) -/* 0763C4 7F041894 8FA5006C */ lw $a1, 0x6c($sp) -/* 0763C8 7F041898 8FA60070 */ lw $a2, 0x70($sp) -/* 0763CC 7F04189C 31F80002 */ andi $t8, $t7, 2 -/* 0763D0 7F0418A0 1300002A */ beqz $t8, .L7F04194C -/* 0763D4 7F0418A4 8FA40054 */ lw $a0, 0x54($sp) -/* 0763D8 7F0418A8 8FB90078 */ lw $t9, 0x78($sp) -/* 0763DC 7F0418AC 8FA90080 */ lw $t1, 0x80($sp) -/* 0763E0 7F0418B0 8FAA0084 */ lw $t2, 0x84($sp) -/* 0763E4 7F0418B4 02002025 */ move $a0, $s0 -/* 0763E8 7F0418B8 8FA70074 */ lw $a3, 0x74($sp) -/* 0763EC 7F0418BC AFB90010 */ sw $t9, 0x10($sp) -/* 0763F0 7F0418C0 AFA90014 */ sw $t1, 0x14($sp) -/* 0763F4 7F0418C4 0FC10458 */ jal sub_GAME_7F041160 -/* 0763F8 7F0418C8 AFAA0018 */ sw $t2, 0x18($sp) -/* 0763FC 7F0418CC 1040003E */ beqz $v0, .L7F0419C8 -/* 076400 7F0418D0 8FA30074 */ lw $v1, 0x74($sp) -/* 076404 7F0418D4 C46A0000 */ lwc1 $f10, ($v1) -/* 076408 7F0418D8 C6240000 */ lwc1 $f4, ($s1) -/* 07640C 7F0418DC C4680004 */ lwc1 $f8, 4($v1) -/* 076410 7F0418E0 C6320004 */ lwc1 $f18, 4($s1) -/* 076414 7F0418E4 46045301 */ sub.s $f12, $f10, $f4 -/* 076418 7F0418E8 C6440000 */ lwc1 $f4, ($s2) -/* 07641C 7F0418EC C62A0008 */ lwc1 $f10, 8($s1) -/* 076420 7F0418F0 46124381 */ sub.s $f14, $f8, $f18 -/* 076424 7F0418F4 C4660008 */ lwc1 $f6, 8($v1) -/* 076428 7F0418F8 46046202 */ mul.s $f8, $f12, $f4 -/* 07642C 7F0418FC C6520004 */ lwc1 $f18, 4($s2) -/* 076430 7F041900 460A3401 */ sub.s $f16, $f6, $f10 -/* 076434 7F041904 C6440008 */ lwc1 $f4, 8($s2) -/* 076438 7F041908 46127182 */ mul.s $f6, $f14, $f18 -/* 07643C 7F04190C 46064280 */ add.s $f10, $f8, $f6 -/* 076440 7F041910 46102482 */ mul.s $f18, $f4, $f16 -/* 076444 7F041914 44804000 */ mtc1 $zero, $f8 -/* 076448 7F041918 C7A60068 */ lwc1 $f6, 0x68($sp) -/* 07644C 7F04191C 460A9080 */ add.s $f2, $f18, $f10 -/* 076450 7F041920 4602403E */ c.le.s $f8, $f2 -/* 076454 7F041924 00000000 */ nop -/* 076458 7F041928 45020028 */ bc1fl .L7F0419CC -/* 07645C 7F04192C 00001025 */ move $v0, $zero -/* 076460 7F041930 4606103E */ c.le.s $f2, $f6 -/* 076464 7F041934 8FA8007C */ lw $t0, 0x7c($sp) -/* 076468 7F041938 24020001 */ li $v0, 1 -/* 07646C 7F04193C 45020023 */ bc1fl .L7F0419CC -/* 076470 7F041940 00001025 */ move $v0, $zero -/* 076474 7F041944 10000021 */ b .L7F0419CC -/* 076478 7F041948 E5020000 */ swc1 $f2, ($t0) -.L7F04194C: -/* 07647C 7F04194C 0FC1B403 */ jal getinstsize -/* 076480 7F041950 AFA2003C */ sw $v0, 0x3c($sp) -/* 076484 7F041954 44070000 */ mfc1 $a3, $f0 -/* 076488 7F041958 02202025 */ move $a0, $s1 -/* 07648C 7F04195C 02402825 */ move $a1, $s2 -/* 076490 7F041960 0FC1041D */ jal sub_GAME_7F041074 -/* 076494 7F041964 26060058 */ addiu $a2, $s0, 0x58 -/* 076498 7F041968 10400017 */ beqz $v0, .L7F0419C8 -/* 07649C 7F04196C 8FA30074 */ lw $v1, 0x74($sp) -/* 0764A0 7F041970 8FA8007C */ lw $t0, 0x7c($sp) -/* 0764A4 7F041974 C7A40068 */ lwc1 $f4, 0x68($sp) -/* 0764A8 7F041978 02202825 */ move $a1, $s1 -/* 0764AC 7F04197C 02403825 */ move $a3, $s2 -/* 0764B0 7F041980 E5040000 */ swc1 $f4, ($t0) -/* 0764B4 7F041984 8FAB0078 */ lw $t3, 0x78($sp) -/* 0764B8 7F041988 AFA30010 */ sw $v1, 0x10($sp) -/* 0764BC 7F04198C 8FA60060 */ lw $a2, 0x60($sp) -/* 0764C0 7F041990 8FA4003C */ lw $a0, 0x3c($sp) -/* 0764C4 7F041994 AFA80018 */ sw $t0, 0x18($sp) -/* 0764C8 7F041998 0FC10500 */ jal sub_GAME_7F041400 -/* 0764CC 7F04199C AFAB0014 */ sw $t3, 0x14($sp) -/* 0764D0 7F0419A0 10400009 */ beqz $v0, .L7F0419C8 -/* 0764D4 7F0419A4 8FAC0054 */ lw $t4, 0x54($sp) -/* 0764D8 7F0419A8 8FAD0080 */ lw $t5, 0x80($sp) -/* 0764DC 7F0419AC 24020001 */ li $v0, 1 -/* 0764E0 7F0419B0 ADAC0000 */ sw $t4, ($t5) -/* 0764E4 7F0419B4 8D8E0008 */ lw $t6, 8($t4) -/* 0764E8 7F0419B8 8FB80084 */ lw $t8, 0x84($sp) -/* 0764EC 7F0419BC 8DCF0000 */ lw $t7, ($t6) -/* 0764F0 7F0419C0 10000002 */ b .L7F0419CC -/* 0764F4 7F0419C4 AF0F0000 */ sw $t7, ($t8) -.L7F0419C8: -/* 0764F8 7F0419C8 00001025 */ move $v0, $zero -.L7F0419CC: -/* 0764FC 7F0419CC 8FBF0034 */ lw $ra, 0x34($sp) -/* 076500 7F0419D0 8FB00028 */ lw $s0, 0x28($sp) -/* 076504 7F0419D4 8FB1002C */ lw $s1, 0x2c($sp) -/* 076508 7F0419D8 8FB20030 */ lw $s2, 0x30($sp) -/* 07650C 7F0419DC 03E00008 */ jr $ra -/* 076510 7F0419E0 27BD0058 */ addiu $sp, $sp, 0x58 -) -#endif - - - - - -#ifdef NONMATCHING -// PD: func0f06b610 -bool sub_GAME_7F0419E4(ObjectRecord *obj, coord3d *arg1, coord3d *arg2, coord3d *arg3, f32 arg4, coord3d *arg5, coord3d *arg6, coord3d *arg7, coord3d *arg8, f32 *arg9) { - -} -#else -bool sub_GAME_7F0419E4(ObjectRecord *obj, coord3d *arg1, coord3d *arg2, coord3d *arg3, f32 arg4, coord3d *arg5, coord3d *arg6, coord3d *arg7, coord3d *arg8, f32 *arg9); -GLOBAL_ASM( -.text -glabel sub_GAME_7F0419E4 -/* 076514 7F0419E4 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 076518 7F0419E8 AFBF0064 */ sw $ra, 0x64($sp) -/* 07651C 7F0419EC AFBE0060 */ sw $fp, 0x60($sp) -/* 076520 7F0419F0 AFB7005C */ sw $s7, 0x5c($sp) -/* 076524 7F0419F4 AFB60058 */ sw $s6, 0x58($sp) -/* 076528 7F0419F8 AFB50054 */ sw $s5, 0x54($sp) -/* 07652C 7F0419FC AFB40050 */ sw $s4, 0x50($sp) -/* 076530 7F041A00 AFB3004C */ sw $s3, 0x4c($sp) -/* 076534 7F041A04 AFB20048 */ sw $s2, 0x48($sp) -/* 076538 7F041A08 AFB10044 */ sw $s1, 0x44($sp) -/* 07653C 7F041A0C AFB00040 */ sw $s0, 0x40($sp) -/* 076540 7F041A10 F7B40038 */ sdc1 $f20, 0x38($sp) -/* 076544 7F041A14 8C830010 */ lw $v1, 0x10($a0) -/* 076548 7F041A18 C7B400A8 */ lwc1 $f20, 0xa8($sp) -/* 07654C 7F041A1C 8FB700AC */ lw $s7, 0xac($sp) -/* 076550 7F041A20 8FBE00B0 */ lw $fp, 0xb0($sp) -/* 076554 7F041A24 27AE008C */ addiu $t6, $sp, 0x8c -/* 076558 7F041A28 27AF0080 */ addiu $t7, $sp, 0x80 -/* 07655C 7F041A2C 27B8007C */ addiu $t8, $sp, 0x7c -/* 076560 7F041A30 27B90078 */ addiu $t9, $sp, 0x78 -/* 076564 7F041A34 27A80074 */ addiu $t0, $sp, 0x74 -/* 076568 7F041A38 00808025 */ move $s0, $a0 -/* 07656C 7F041A3C 00A09825 */ move $s3, $a1 -/* 076570 7F041A40 00C0A025 */ move $s4, $a2 -/* 076574 7F041A44 00E0A825 */ move $s5, $a3 -/* 076578 7F041A48 0000B025 */ move $s6, $zero -/* 07657C 7F041A4C AFA8002C */ sw $t0, 0x2c($sp) -/* 076580 7F041A50 AFB90028 */ sw $t9, 0x28($sp) -/* 076584 7F041A54 AFB80024 */ sw $t8, 0x24($sp) -/* 076588 7F041A58 AFAF0020 */ sw $t7, 0x20($sp) -/* 07658C 7F041A5C AFAE001C */ sw $t6, 0x1c($sp) -/* 076590 7F041A60 AFA3006C */ sw $v1, 0x6c($sp) -/* 076594 7F041A64 E7B40010 */ swc1 $f20, 0x10($sp) -/* 076598 7F041A68 AFB70014 */ sw $s7, 0x14($sp) -/* 07659C 7F041A6C 0FC105F7 */ jal sub_GAME_7F0417DC -/* 0765A0 7F041A70 AFBE0018 */ sw $fp, 0x18($sp) -/* 0765A4 7F041A74 10400024 */ beqz $v0, .L7F041B08 -/* 0765A8 7F041A78 8FA3006C */ lw $v1, 0x6c($sp) -/* 0765AC 7F041A7C 8FA900BC */ lw $t1, 0xbc($sp) -/* 0765B0 7F041A80 C7A4007C */ lwc1 $f4, 0x7c($sp) -/* 0765B4 7F041A84 8FB100B4 */ lw $s1, 0xb4($sp) -/* 0765B8 7F041A88 C5260000 */ lwc1 $f6, ($t1) -/* 0765BC 7F041A8C 8FB200B8 */ lw $s2, 0xb8($sp) -/* 0765C0 7F041A90 4606203C */ c.lt.s $f4, $f6 -/* 0765C4 7F041A94 00000000 */ nop -/* 0765C8 7F041A98 4502001C */ bc1fl .L7F041B0C -/* 0765CC 7F041A9C 906E0001 */ lbu $t6, 1($v1) -/* 0765D0 7F041AA0 E5240000 */ swc1 $f4, ($t1) -/* 0765D4 7F041AA4 C7A8008C */ lwc1 $f8, 0x8c($sp) -/* 0765D8 7F041AA8 3C018003 */ lui $at, %hi(D_80030B0C) -/* 0765DC 7F041AAC 240BFFFF */ li $t3, -1 -/* 0765E0 7F041AB0 E6280000 */ swc1 $f8, ($s1) -/* 0765E4 7F041AB4 C7AA0090 */ lwc1 $f10, 0x90($sp) -/* 0765E8 7F041AB8 24160001 */ li $s6, 1 -/* 0765EC 7F041ABC E62A0004 */ swc1 $f10, 4($s1) -/* 0765F0 7F041AC0 C7B00094 */ lwc1 $f16, 0x94($sp) -/* 0765F4 7F041AC4 E6300008 */ swc1 $f16, 8($s1) -/* 0765F8 7F041AC8 C7B20080 */ lwc1 $f18, 0x80($sp) -/* 0765FC 7F041ACC E6520000 */ swc1 $f18, ($s2) -/* 076600 7F041AD0 C7A60084 */ lwc1 $f6, 0x84($sp) -/* 076604 7F041AD4 E6460004 */ swc1 $f6, 4($s2) -/* 076608 7F041AD8 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 07660C 7F041ADC E6440008 */ swc1 $f4, 8($s2) -/* 076610 7F041AE0 8E0A0010 */ lw $t2, 0x10($s0) -/* 076614 7F041AE4 8FAC0078 */ lw $t4, 0x78($sp) -/* 076618 7F041AE8 8FAD0074 */ lw $t5, 0x74($sp) -/* 07661C 7F041AEC AC2A0B0C */ sw $t2, %lo(D_80030B0C)($at) -/* 076620 7F041AF0 3C018003 */ lui $at, %hi(bodypartshot) -/* 076624 7F041AF4 AC2B0B10 */ sw $t3, %lo(bodypartshot)($at) -/* 076628 7F041AF8 3C018007 */ lui $at, %hi(g_CurrentProjectileModel) -/* 07662C 7F041AFC AC2C5B70 */ sw $t4, %lo(g_CurrentProjectileModel)($at) -/* 076630 7F041B00 3C018007 */ lui $at, %hi(dword_CODE_bss_80075B74) -/* 076634 7F041B04 AC2D5B74 */ sw $t5, %lo(dword_CODE_bss_80075B74)($at) -.L7F041B08: -/* 076638 7F041B08 906E0001 */ lbu $t6, 1($v1) -.L7F041B0C: -/* 07663C 7F041B0C 8FB100B4 */ lw $s1, 0xb4($sp) -/* 076640 7F041B10 8FB200B8 */ lw $s2, 0xb8($sp) -/* 076644 7F041B14 31CF0002 */ andi $t7, $t6, 2 -/* 076648 7F041B18 51E0001A */ beql $t7, $zero, .L7F041B84 -/* 07664C 7F041B1C 8FBF0064 */ lw $ra, 0x64($sp) -/* 076650 7F041B20 8C700020 */ lw $s0, 0x20($v1) -/* 076654 7F041B24 52000017 */ beql $s0, $zero, .L7F041B84 -/* 076658 7F041B28 8FBF0064 */ lw $ra, 0x64($sp) -/* 07665C 7F041B2C 92180001 */ lbu $t8, 1($s0) -.L7F041B30: -/* 076660 7F041B30 02602825 */ move $a1, $s3 -/* 076664 7F041B34 02803025 */ move $a2, $s4 -/* 076668 7F041B38 33190002 */ andi $t9, $t8, 2 -/* 07666C 7F041B3C 1320000D */ beqz $t9, .L7F041B74 -/* 076670 7F041B40 02A03825 */ move $a3, $s5 -/* 076674 7F041B44 8E040004 */ lw $a0, 4($s0) -/* 076678 7F041B48 8FA800BC */ lw $t0, 0xbc($sp) -/* 07667C 7F041B4C AFB20020 */ sw $s2, 0x20($sp) -/* 076680 7F041B50 AFB1001C */ sw $s1, 0x1c($sp) -/* 076684 7F041B54 AFBE0018 */ sw $fp, 0x18($sp) -/* 076688 7F041B58 AFB70014 */ sw $s7, 0x14($sp) -/* 07668C 7F041B5C E7B40010 */ swc1 $f20, 0x10($sp) -/* 076690 7F041B60 0FC10679 */ jal sub_GAME_7F0419E4 -/* 076694 7F041B64 AFA80024 */ sw $t0, 0x24($sp) -/* 076698 7F041B68 50400003 */ beql $v0, $zero, .L7F041B78 -/* 07669C 7F041B6C 8E100024 */ lw $s0, 0x24($s0) -/* 0766A0 7F041B70 24160001 */ li $s6, 1 -.L7F041B74: -/* 0766A4 7F041B74 8E100024 */ lw $s0, 0x24($s0) -.L7F041B78: -/* 0766A8 7F041B78 5600FFED */ bnezl $s0, .L7F041B30 -/* 0766AC 7F041B7C 92180001 */ lbu $t8, 1($s0) -/* 0766B0 7F041B80 8FBF0064 */ lw $ra, 0x64($sp) -.L7F041B84: -/* 0766B4 7F041B84 02C01025 */ move $v0, $s6 -/* 0766B8 7F041B88 8FB60058 */ lw $s6, 0x58($sp) -/* 0766BC 7F041B8C D7B40038 */ ldc1 $f20, 0x38($sp) -/* 0766C0 7F041B90 8FB00040 */ lw $s0, 0x40($sp) -/* 0766C4 7F041B94 8FB10044 */ lw $s1, 0x44($sp) -/* 0766C8 7F041B98 8FB20048 */ lw $s2, 0x48($sp) -/* 0766CC 7F041B9C 8FB3004C */ lw $s3, 0x4c($sp) -/* 0766D0 7F041BA0 8FB40050 */ lw $s4, 0x50($sp) -/* 0766D4 7F041BA4 8FB50054 */ lw $s5, 0x54($sp) -/* 0766D8 7F041BA8 8FB7005C */ lw $s7, 0x5c($sp) -/* 0766DC 7F041BAC 8FBE0060 */ lw $fp, 0x60($sp) -/* 0766E0 7F041BB0 03E00008 */ jr $ra -/* 0766E4 7F041BB4 27BD0098 */ addiu $sp, $sp, 0x98 -) -#endif - - - - - -#ifdef NONMATCHING -// PD: func0f06c28c -bool sub_GAME_7F041BB8(ChrRecord *chr, coord3d *arg1, coord3d *arg2, f32 arg3, coord3d *arg4, coord3d *arg5, coord3d *arg6, coord3d *arg7, f32 *arg8) { - -} -#else -bool sub_GAME_7F041BB8(ChrRecord *chr, coord3d *arg1, coord3d *arg2, f32 arg3, coord3d *arg4, coord3d *arg5, coord3d *arg6, coord3d *arg7, f32 *arg8); -GLOBAL_ASM( -.text -glabel sub_GAME_7F041BB8 -/* 0766E8 7F041BB8 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 0766EC 7F041BBC AFA70074 */ sw $a3, 0x74($sp) -/* 0766F0 7F041BC0 AFBF002C */ sw $ra, 0x2c($sp) -/* 0766F4 7F041BC4 AFB20028 */ sw $s2, 0x28($sp) -/* 0766F8 7F041BC8 AFB10024 */ sw $s1, 0x24($sp) -/* 0766FC 7F041BCC AFB00020 */ sw $s0, 0x20($sp) -/* 076700 7F041BD0 AFA40068 */ sw $a0, 0x68($sp) -/* 076704 7F041BD4 00803825 */ move $a3, $a0 -/* 076708 7F041BD8 8C920018 */ lw $s2, 0x18($a0) -/* 07670C 7F041BDC 8C84001C */ lw $a0, 0x1c($a0) -/* 076710 7F041BE0 00C08025 */ move $s0, $a2 -/* 076714 7F041BE4 00A08825 */ move $s1, $a1 -/* 076718 7F041BE8 0FC1B403 */ jal getinstsize -/* 07671C 7F041BEC AFA70068 */ sw $a3, 0x68($sp) -/* 076720 7F041BF0 C6440008 */ lwc1 $f4, 8($s2) -/* 076724 7F041BF4 C6260000 */ lwc1 $f6, ($s1) -/* 076728 7F041BF8 C648000C */ lwc1 $f8, 0xc($s2) -/* 07672C 7F041BFC C62A0004 */ lwc1 $f10, 4($s1) -/* 076730 7F041C00 46062081 */ sub.s $f2, $f4, $f6 -/* 076734 7F041C04 C6060000 */ lwc1 $f6, ($s0) -/* 076738 7F041C08 C6240008 */ lwc1 $f4, 8($s1) -/* 07673C 7F041C0C 460A4301 */ sub.s $f12, $f8, $f10 -/* 076740 7F041C10 C6520010 */ lwc1 $f18, 0x10($s2) -/* 076744 7F041C14 46061202 */ mul.s $f8, $f2, $f6 -/* 076748 7F041C18 C60A0004 */ lwc1 $f10, 4($s0) -/* 07674C 7F041C1C 46049381 */ sub.s $f14, $f18, $f4 -/* 076750 7F041C20 C6060008 */ lwc1 $f6, 8($s0) -/* 076754 7F041C24 460A6482 */ mul.s $f18, $f12, $f10 -/* 076758 7F041C28 46124100 */ add.s $f4, $f8, $f18 -/* 07675C 7F041C2C 460E3282 */ mul.s $f10, $f6, $f14 -/* 076760 7F041C30 C7B20074 */ lwc1 $f18, 0x74($sp) -/* 076764 7F041C34 46000207 */ neg.s $f8, $f0 -/* 076768 7F041C38 46045400 */ add.s $f16, $f10, $f4 -/* 07676C 7F041C3C 4610403E */ c.le.s $f8, $f16 -/* 076770 7F041C40 00000000 */ nop -/* 076774 7F041C44 4502006B */ bc1fl .L7F041DF4 -/* 076778 7F041C48 00001025 */ move $v0, $zero -/* 07677C 7F041C4C 46009180 */ add.s $f6, $f18, $f0 -/* 076780 7F041C50 4606803E */ c.le.s $f16, $f6 -/* 076784 7F041C54 00000000 */ nop -/* 076788 7F041C58 45020066 */ bc1fl .L7F041DF4 -/* 07678C 7F041C5C 00001025 */ move $v0, $zero -/* 076790 7F041C60 924E0001 */ lbu $t6, 1($s2) -/* 076794 7F041C64 8FB80068 */ lw $t8, 0x68($sp) -/* 076798 7F041C68 27A40038 */ addiu $a0, $sp, 0x38 -/* 07679C 7F041C6C 31CF0002 */ andi $t7, $t6, 2 -/* 0767A0 7F041C70 11E0005F */ beqz $t7, .L7F041DF0 -/* 0767A4 7F041C74 27A70040 */ addiu $a3, $sp, 0x40 -/* 0767A8 7F041C78 8F190020 */ lw $t9, 0x20($t8) -/* 0767AC 7F041C7C 27A8003C */ addiu $t0, $sp, 0x3c -/* 0767B0 7F041C80 AFA80010 */ sw $t0, 0x10($sp) -/* 0767B4 7F041C84 8FA50078 */ lw $a1, 0x78($sp) -/* 0767B8 7F041C88 8FA6007C */ lw $a2, 0x7c($sp) -/* 0767BC 7F041C8C 0FC1B004 */ jal sub_GAME_7F06C010 -/* 0767C0 7F041C90 AFB90038 */ sw $t9, 0x38($sp) -/* 0767C4 7F041C94 18400056 */ blez $v0, .L7F041DF0 -/* 0767C8 7F041C98 AFA20044 */ sw $v0, 0x44($sp) -/* 0767CC 7F041C9C 8FA40040 */ lw $a0, 0x40($sp) -/* 0767D0 7F041CA0 8FA5003C */ lw $a1, 0x3c($sp) -/* 0767D4 7F041CA4 0FC1B198 */ jal modelFindNodeMtx -/* 0767D8 7F041CA8 00003025 */ move $a2, $zero -/* 0767DC 7F041CAC 8FA30078 */ lw $v1, 0x78($sp) -/* 0767E0 7F041CB0 C44A0030 */ lwc1 $f10, 0x30($v0) -/* 0767E4 7F041CB4 8FA7007C */ lw $a3, 0x7c($sp) -/* 0767E8 7F041CB8 C4640000 */ lwc1 $f4, ($v1) -/* 0767EC 7F041CBC C4480034 */ lwc1 $f8, 0x34($v0) -/* 0767F0 7F041CC0 C4720004 */ lwc1 $f18, 4($v1) -/* 0767F4 7F041CC4 46045081 */ sub.s $f2, $f10, $f4 -/* 0767F8 7F041CC8 C4E40000 */ lwc1 $f4, ($a3) -/* 0767FC 7F041CCC C4460038 */ lwc1 $f6, 0x38($v0) -/* 076800 7F041CD0 46124301 */ sub.s $f12, $f8, $f18 -/* 076804 7F041CD4 C46A0008 */ lwc1 $f10, 8($v1) -/* 076808 7F041CD8 46041202 */ mul.s $f8, $f2, $f4 -/* 07680C 7F041CDC C4F20004 */ lwc1 $f18, 4($a3) -/* 076810 7F041CE0 460A3381 */ sub.s $f14, $f6, $f10 -/* 076814 7F041CE4 C4E40008 */ lwc1 $f4, 8($a3) -/* 076818 7F041CE8 46126182 */ mul.s $f6, $f12, $f18 -/* 07681C 7F041CEC 8FA50088 */ lw $a1, 0x88($sp) -/* 076820 7F041CF0 8FA20080 */ lw $v0, 0x80($sp) -/* 076824 7F041CF4 460E2482 */ mul.s $f18, $f4, $f14 -/* 076828 7F041CF8 8FA40084 */ lw $a0, 0x84($sp) -/* 07682C 7F041CFC 46064280 */ add.s $f10, $f8, $f6 -/* 076830 7F041D00 C4A80000 */ lwc1 $f8, ($a1) -/* 076834 7F041D04 460A9000 */ add.s $f0, $f18, $f10 -/* 076838 7F041D08 4608003C */ c.lt.s $f0, $f8 -/* 07683C 7F041D0C 00000000 */ nop -/* 076840 7F041D10 45020038 */ bc1fl .L7F041DF4 -/* 076844 7F041D14 00001025 */ move $v0, $zero -/* 076848 7F041D18 E4A00000 */ swc1 $f0, ($a1) -/* 07684C 7F041D1C C6060000 */ lwc1 $f6, ($s0) -/* 076850 7F041D20 C6320000 */ lwc1 $f18, ($s1) -/* 076854 7F041D24 44801000 */ mtc1 $zero, $f2 -/* 076858 7F041D28 46003102 */ mul.s $f4, $f6, $f0 -/* 07685C 7F041D2C 24850004 */ addiu $a1, $a0, 4 -/* 076860 7F041D30 46122280 */ add.s $f10, $f4, $f18 -/* 076864 7F041D34 E44A0000 */ swc1 $f10, ($v0) -/* 076868 7F041D38 C6080004 */ lwc1 $f8, 4($s0) -/* 07686C 7F041D3C C6240004 */ lwc1 $f4, 4($s1) -/* 076870 7F041D40 46004182 */ mul.s $f6, $f8, $f0 -/* 076874 7F041D44 46043480 */ add.s $f18, $f6, $f4 -/* 076878 7F041D48 E4520004 */ swc1 $f18, 4($v0) -/* 07687C 7F041D4C C60A0008 */ lwc1 $f10, 8($s0) -/* 076880 7F041D50 C6260008 */ lwc1 $f6, 8($s1) -/* 076884 7F041D54 46005202 */ mul.s $f8, $f10, $f0 -/* 076888 7F041D58 46064100 */ add.s $f4, $f8, $f6 -/* 07688C 7F041D5C E4440008 */ swc1 $f4, 8($v0) -/* 076890 7F041D60 C6120000 */ lwc1 $f18, ($s0) -/* 076894 7F041D64 E4820004 */ swc1 $f2, 4($a0) -/* 076898 7F041D68 46009287 */ neg.s $f10, $f18 -/* 07689C 7F041D6C E48A0000 */ swc1 $f10, ($a0) -/* 0768A0 7F041D70 C4840000 */ lwc1 $f4, ($a0) -/* 0768A4 7F041D74 C6080008 */ lwc1 $f8, 8($s0) -/* 0768A8 7F041D78 46041032 */ c.eq.s $f2, $f4 -/* 0768AC 7F041D7C 46004187 */ neg.s $f6, $f8 -/* 0768B0 7F041D80 45000007 */ bc1f .L7F041DA0 -/* 0768B4 7F041D84 E4860008 */ swc1 $f6, 8($a0) -/* 0768B8 7F041D88 C4920008 */ lwc1 $f18, 8($a0) -/* 0768BC 7F041D8C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0768C0 7F041D90 46121032 */ c.eq.s $f2, $f18 -/* 0768C4 7F041D94 00000000 */ nop -/* 0768C8 7F041D98 45030006 */ bc1tl .L7F041DB4 -/* 0768CC 7F041D9C 44815000 */ mtc1 $at, $f10 -.L7F041DA0: -/* 0768D0 7F041DA0 0C007DD4 */ jal guNormalize -/* 0768D4 7F041DA4 24860008 */ addiu $a2, $a0, 8 -/* 0768D8 7F041DA8 10000005 */ b .L7F041DC0 -/* 0768DC 7F041DAC 8FA90044 */ lw $t1, 0x44($sp) -/* 0768E0 7F041DB0 44815000 */ mtc1 $at, $f10 -.L7F041DB4: -/* 0768E4 7F041DB4 00000000 */ nop -/* 0768E8 7F041DB8 E48A0008 */ swc1 $f10, 8($a0) -/* 0768EC 7F041DBC 8FA90044 */ lw $t1, 0x44($sp) -.L7F041DC0: -/* 0768F0 7F041DC0 3C018003 */ lui $at, %hi(D_80030B0C) -/* 0768F4 7F041DC4 AC320B0C */ sw $s2, %lo(D_80030B0C)($at) -/* 0768F8 7F041DC8 8FAA0040 */ lw $t2, 0x40($sp) -/* 0768FC 7F041DCC 3C018003 */ lui $at, %hi(bodypartshot) -/* 076900 7F041DD0 AC290B10 */ sw $t1, %lo(bodypartshot)($at) -/* 076904 7F041DD4 3C018007 */ lui $at, %hi(g_CurrentProjectileModel) -/* 076908 7F041DD8 8FAB003C */ lw $t3, 0x3c($sp) -/* 07690C 7F041DDC AC2A5B70 */ sw $t2, %lo(g_CurrentProjectileModel)($at) -/* 076910 7F041DE0 3C018007 */ lui $at, %hi(dword_CODE_bss_80075B74) -/* 076914 7F041DE4 24020001 */ li $v0, 1 -/* 076918 7F041DE8 10000002 */ b .L7F041DF4 -/* 07691C 7F041DEC AC2B5B74 */ sw $t3, %lo(dword_CODE_bss_80075B74)($at) -.L7F041DF0: -/* 076920 7F041DF0 00001025 */ move $v0, $zero -.L7F041DF4: -/* 076924 7F041DF4 8FBF002C */ lw $ra, 0x2c($sp) -/* 076928 7F041DF8 8FB00020 */ lw $s0, 0x20($sp) -/* 07692C 7F041DFC 8FB10024 */ lw $s1, 0x24($sp) -/* 076930 7F041E00 8FB20028 */ lw $s2, 0x28($sp) -/* 076934 7F041E04 03E00008 */ jr $ra -/* 076938 7F041E08 27BD0068 */ addiu $sp, $sp, 0x68 -) -#endif - - -bool projectileFindCollidingProp(PropRecord *prop, coord3d *pos1, coord3d *pos2, u32 cdtypes, coord3d *arg4, coord3d *arg5, s32 *rooms) -{ - bool result; - f32 dist; - s16 *propnumptr; - f32 spa8; - bool spa4; - coord3d sp98; - ChrRecord *chr; - coord3d sp88; - coord3d sp7c; - PropRecord *iterprop; - PropRecord *playerstank; - ObjectRecord *obj; - s32 unused; - - result = FALSE; - spa4 = FALSE; - playerstank = get_ptr_for_players_tank(); - - sp98.x = pos2->x - pos1->x; - sp98.y = pos2->y - pos1->y; - sp98.z = pos2->z - pos1->z; - - dist = sqrtf(sp98.f[0] * sp98.f[0] + sp98.f[1] * sp98.f[1] + sp98.f[2] * sp98.f[2]); - - if (dist == 0.0f) - { - return FALSE; - } - - sp98.x *= (1.0f / dist); - sp98.y *= (1.0f / dist); - sp98.z *= (1.0f / dist); - - sp88.x = pos1->x; - sp88.y = pos1->y; - sp88.z = pos1->z; - - mtx4TransformVecInPlace(camGetWorldToScreenMtxf(), &sp88); - - sp7c.x = sp98.x; - sp7c.y = sp98.y; - sp7c.z = sp98.z; - - mtx4RotateVecInPlace(camGetWorldToScreenMtxf(), sp7c.f); - - spa8 = dist; - - if (cdtypes != 0) - { - roomGetProps(rooms); - - for (propnumptr = ptr_list_object_lookup_indices; *propnumptr >= 0; propnumptr++) - { - iterprop = &pos_data_entry[*propnumptr]; - - if (iterprop != prop) - { - if (iterprop->type == PROP_TYPE_OBJ - || iterprop->type == PROP_TYPE_WEAPON - || iterprop->type == PROP_TYPE_DOOR) - { - obj = iterprop->obj; - - if ((obj->runtime_bitflags & RUNTIMEBITFLAG_ISRETICK) == 0 && (obj->flags2 & PROPFLAG2_THROWTHROUGH) == 0) { - if (iterprop->type == PROP_TYPE_DOOR) - { - if ((cdtypes & CDTYPE_DOORS) == 0 && (propDoorGetCdTypes(iterprop) & cdtypes) == 0) - { - continue; - } - } - else - { - if ((cdtypes & CDTYPE_OBJS) == 0) - { - continue; - } - } - - if ((iterprop != playerstank) || !(obj->state & PROPSTATE_20)) - { - if (sub_GAME_7F0419E4(obj, pos1, pos2, &sp98, dist, &sp88, &sp7c, arg4, arg5, &spa8)) - { - spa4 = TRUE; - } - } - } - } else if (iterprop->type == PROP_TYPE_CHR - || (iterprop->type == PROP_TYPE_VIEWER && iterprop->chr)) - { - chr = iterprop->chr; - - if (iterprop->type == PROP_TYPE_VIEWER) - { - if (!g_playerPointers[getPlayerPointerIndex(iterprop)]->field_AC || (cdtypes & CDTYPE_PLAYERS) == 0) - { - continue; - } - } - else if (iterprop->type == PROP_TYPE_CHR) - { - if ((chr->hidden & CHRHIDDEN_MOVING) || (cdtypes & CDTYPE_CHRS) == 0) - { - continue; - } - } - - if (sub_GAME_7F041BB8(chr, pos1, &sp98, dist, &sp88, &sp7c, arg4, arg5, &spa8)) - { - spa4 = TRUE; - } - } else if (iterprop->type == PROP_TYPE_VIEWER - && g_playerPointers[getPlayerPointerIndex(iterprop)]->field_AC) - { - if (sub_GAME_7F041400(iterprop, pos1, pos2, &sp98, arg4, arg5, &spa8)) - { - spa4 = TRUE; - } - } - } - } - } - - if (spa4) - { - result = TRUE; - - flt_CODE_bss_80075B78.x = sp98.x; - flt_CODE_bss_80075B78.y = sp98.y; - flt_CODE_bss_80075B78.z = sp98.z; - - flt_CODE_bss_80075B88.x = sp7c.x; - flt_CODE_bss_80075B88.y = sp7c.y; - flt_CODE_bss_80075B88.z = sp7c.z; - - } - - return result; -} - - -#ifdef NONMATCHING -void handles_projectile_motion(void) { - //this function contains - // // sub_GAME_7F0B4AB4(); - // osSyncPrintf("stanLineObjGfx: %d rooms is more than %d\n",arg0+0x58,20); -} -#else -GLOBAL_ASM( -.late_rodata -glabel D_80052A58 -.word 0x3dcccccd /*0.1*/ -.text -glabel handles_projectile_motion -/* 076D7C 7F04224C 27BDFD50 */ addiu $sp, $sp, -0x2b0 -/* 076D80 7F042250 AFBF003C */ sw $ra, 0x3c($sp) -/* 076D84 7F042254 AFB30038 */ sw $s3, 0x38($sp) -/* 076D88 7F042258 AFB20034 */ sw $s2, 0x34($sp) -/* 076D8C 7F04225C AFB10030 */ sw $s1, 0x30($sp) -/* 076D90 7F042260 AFB0002C */ sw $s0, 0x2c($sp) -/* 076D94 7F042264 F7B40020 */ sdc1 $f20, 0x20($sp) -/* 076D98 7F042268 8C820010 */ lw $v0, 0x10($a0) -/* 076D9C 7F04226C 240F0001 */ li $t7, 1 -/* 076DA0 7F042270 3C018003 */ lui $at, %hi(D_80030B0C) -/* 076DA4 7F042274 8C4E0014 */ lw $t6, 0x14($v0) -/* 076DA8 7F042278 AFAF02A4 */ sw $t7, 0x2a4($sp) -/* 076DAC 7F04227C AC200B0C */ sw $zero, %lo(D_80030B0C)($at) -/* 076DB0 7F042280 AFAE02A8 */ sw $t6, 0x2a8($sp) -/* 076DB4 7F042284 C4840058 */ lwc1 $f4, 0x58($a0) -/* 076DB8 7F042288 C4A00000 */ lwc1 $f0, ($a1) -/* 076DBC 7F04228C 00E08025 */ move $s0, $a3 -/* 076DC0 7F042290 00A08825 */ move $s1, $a1 -/* 076DC4 7F042294 46040032 */ c.eq.s $f0, $f4 -/* 076DC8 7F042298 00809025 */ move $s2, $a0 -/* 076DCC 7F04229C 00C09825 */ move $s3, $a2 -/* 076DD0 7F0422A0 4502000E */ bc1fl .L7F0422DC -/* 076DD4 7F0422A4 E7A00268 */ swc1 $f0, 0x268($sp) -/* 076DD8 7F0422A8 C4A60004 */ lwc1 $f6, 4($a1) -/* 076DDC 7F0422AC C488005C */ lwc1 $f8, 0x5c($a0) -/* 076DE0 7F0422B0 46083032 */ c.eq.s $f6, $f8 -/* 076DE4 7F0422B4 00000000 */ nop -/* 076DE8 7F0422B8 45020008 */ bc1fl .L7F0422DC -/* 076DEC 7F0422BC E7A00268 */ swc1 $f0, 0x268($sp) -/* 076DF0 7F0422C0 C4AA0008 */ lwc1 $f10, 8($a1) -/* 076DF4 7F0422C4 C4900060 */ lwc1 $f16, 0x60($a0) -/* 076DF8 7F0422C8 46105032 */ c.eq.s $f10, $f16 -/* 076DFC 7F0422CC 00000000 */ nop -/* 076E00 7F0422D0 450301C6 */ bc1tl .L7F0429EC -/* 076E04 7F0422D4 8FBF003C */ lw $ra, 0x3c($sp) -/* 076E08 7F0422D8 E7A00268 */ swc1 $f0, 0x268($sp) -.L7F0422DC: -/* 076E0C 7F0422DC C6320004 */ lwc1 $f18, 4($s1) -/* 076E10 7F0422E0 E7B2026C */ swc1 $f18, 0x26c($sp) -/* 076E14 7F0422E4 C6240008 */ lwc1 $f4, 8($s1) -/* 076E18 7F0422E8 E7A40270 */ swc1 $f4, 0x270($sp) -/* 076E1C 7F0422EC 8E580064 */ lw $t8, 0x64($s2) -/* 076E20 7F0422F0 33190080 */ andi $t9, $t8, 0x80 -/* 076E24 7F0422F4 532001BD */ beql $t9, $zero, .L7F0429EC -/* 076E28 7F0422F8 8FBF003C */ lw $ra, 0x3c($sp) -/* 076E2C 7F0422FC 8E49006C */ lw $t1, 0x6c($s2) -/* 076E30 7F042300 26440058 */ addiu $a0, $s2, 0x58 -/* 076E34 7F042304 27A50268 */ addiu $a1, $sp, 0x268 -/* 076E38 7F042308 8D2A0000 */ lw $t2, ($t1) -/* 076E3C 7F04230C 27A70074 */ addiu $a3, $sp, 0x74 -/* 076E40 7F042310 27AC007C */ addiu $t4, $sp, 0x7c -/* 076E44 7F042314 314B0004 */ andi $t3, $t2, 4 -/* 076E48 7F042318 116001B3 */ beqz $t3, .L7F0429E8 -/* 076E4C 7F04231C 27AD0260 */ addiu $t5, $sp, 0x260 -/* 076E50 7F042320 AFA00260 */ sw $zero, 0x260($sp) -/* 076E54 7F042324 8E46006C */ lw $a2, 0x6c($s2) -/* 076E58 7F042328 240E0014 */ li $t6, 20 -/* 076E5C 7F04232C AFAE0018 */ sw $t6, 0x18($sp) -/* 076E60 7F042330 AFB102B4 */ sw $s1, 0x2b4($sp) -/* 076E64 7F042334 AFA40048 */ sw $a0, 0x48($sp) -/* 076E68 7F042338 AFA202AC */ sw $v0, 0x2ac($sp) -/* 076E6C 7F04233C AFAD0014 */ sw $t5, 0x14($sp) -/* 076E70 7F042340 AFAC0010 */ sw $t4, 0x10($sp) -/* 076E74 7F042344 0FC2D2AD */ jal sub_GAME_7F0B4AB4 -/* 076E78 7F042348 24C600CC */ addiu $a2, $a2, 0xcc -/* 076E7C 7F04234C 8FA30260 */ lw $v1, 0x260($sp) -/* 076E80 7F042350 27B8007C */ addiu $t8, $sp, 0x7c -/* 076E84 7F042354 24050064 */ li $a1, 100 -/* 076E88 7F042358 28610015 */ slti $at, $v1, 0x15 -/* 076E8C 7F04235C 54200003 */ bnezl $at, .L7F04236C -/* 076E90 7F042360 00037880 */ sll $t7, $v1, 2 -/* 076E94 7F042364 24030014 */ li $v1, 20 -/* 076E98 7F042368 00037880 */ sll $t7, $v1, 2 -.L7F04236C: -/* 076E9C 7F04236C 01F82021 */ addu $a0, $t7, $t8 -/* 076EA0 7F042370 0FC2E3A6 */ jal bgCopyVisibleRoomsToList -/* 076EA4 7F042374 AFA30260 */ sw $v1, 0x260($sp) -/* 076EA8 7F042378 8FA30260 */ lw $v1, 0x260($sp) -/* 076EAC 7F04237C 2419FFFF */ li $t9, -1 -/* 076EB0 7F042380 27B1007C */ addiu $s1, $sp, 0x7c -/* 076EB4 7F042384 00621821 */ addu $v1, $v1, $v0 -/* 076EB8 7F042388 00034880 */ sll $t1, $v1, 2 -/* 076EBC 7F04238C 03A95021 */ addu $t2, $sp, $t1 -/* 076EC0 7F042390 AD59007C */ sw $t9, 0x7c($t2) -/* 076EC4 7F042394 8FAB007C */ lw $t3, 0x7c($sp) -/* 076EC8 7F042398 AFA30260 */ sw $v1, 0x260($sp) -/* 076ECC 7F04239C 0562009E */ bltzl $t3, .L7F042618 -/* 076ED0 7F0423A0 8FAD02A4 */ lw $t5, 0x2a4($sp) -/* 076ED4 7F0423A4 4480A000 */ mtc1 $zero, $f20 -/* 076ED8 7F0423A8 8E260000 */ lw $a2, ($s1) -/* 076EDC 7F0423AC 8FA40048 */ lw $a0, 0x48($sp) -.L7F0423B0: -/* 076EE0 7F0423B0 27A50268 */ addiu $a1, $sp, 0x268 -/* 076EE4 7F0423B4 0FC2DE9E */ jal bgTestBulletHitBackground -/* 076EE8 7F0423B8 27A70274 */ addiu $a3, $sp, 0x274 -/* 076EEC 7F0423BC 50400092 */ beql $v0, $zero, .L7F042608 -/* 076EF0 7F0423C0 8E260004 */ lw $a2, 4($s1) -/* 076EF4 7F0423C4 0FC2D20C */ jal get_room_data_float2 -/* 076EF8 7F0423C8 00000000 */ nop -/* 076EFC 7F0423CC C7A60274 */ lwc1 $f6, 0x274($sp) -/* 076F00 7F0423D0 C7AA0278 */ lwc1 $f10, 0x278($sp) -/* 076F04 7F0423D4 C7B2027C */ lwc1 $f18, 0x27c($sp) -/* 076F08 7F0423D8 46003202 */ mul.s $f8, $f6, $f0 -/* 076F0C 7F0423DC C7A60268 */ lwc1 $f6, 0x268($sp) -/* 076F10 7F0423E0 46005402 */ mul.s $f16, $f10, $f0 -/* 076F14 7F0423E4 C7AA0268 */ lwc1 $f10, 0x268($sp) -/* 076F18 7F0423E8 46009102 */ mul.s $f4, $f18, $f0 -/* 076F1C 7F0423EC E7A80274 */ swc1 $f8, 0x274($sp) -/* 076F20 7F0423F0 E7B00278 */ swc1 $f16, 0x278($sp) -/* 076F24 7F0423F4 E7A4027C */ swc1 $f4, 0x27c($sp) -/* 076F28 7F0423F8 C64C0058 */ lwc1 $f12, 0x58($s2) -/* 076F2C 7F0423FC 4606603E */ c.le.s $f12, $f6 -/* 076F30 7F042400 00000000 */ nop -/* 076F34 7F042404 4502000A */ bc1fl .L7F042430 -/* 076F38 7F042408 460C503E */ c.le.s $f10, $f12 -/* 076F3C 7F04240C 4606403E */ c.le.s $f8, $f6 -/* 076F40 7F042410 00000000 */ nop -/* 076F44 7F042414 45020006 */ bc1fl .L7F042430 -/* 076F48 7F042418 460C503E */ c.le.s $f10, $f12 -/* 076F4C 7F04241C 4608603E */ c.le.s $f12, $f8 -/* 076F50 7F042420 00000000 */ nop -/* 076F54 7F042424 4503000E */ bc1tl .L7F042460 -/* 076F58 7F042428 C642005C */ lwc1 $f2, 0x5c($s2) -/* 076F5C 7F04242C 460C503E */ c.le.s $f10, $f12 -.L7F042430: -/* 076F60 7F042430 C7B00274 */ lwc1 $f16, 0x274($sp) -/* 076F64 7F042434 45020074 */ bc1fl .L7F042608 -/* 076F68 7F042438 8E260004 */ lw $a2, 4($s1) -/* 076F6C 7F04243C 4610503E */ c.le.s $f10, $f16 -/* 076F70 7F042440 00000000 */ nop -/* 076F74 7F042444 45020070 */ bc1fl .L7F042608 -/* 076F78 7F042448 8E260004 */ lw $a2, 4($s1) -/* 076F7C 7F04244C 460C803E */ c.le.s $f16, $f12 -/* 076F80 7F042450 00000000 */ nop -/* 076F84 7F042454 4502006C */ bc1fl .L7F042608 -/* 076F88 7F042458 8E260004 */ lw $a2, 4($s1) -/* 076F8C 7F04245C C642005C */ lwc1 $f2, 0x5c($s2) -.L7F042460: -/* 076F90 7F042460 C7B2026C */ lwc1 $f18, 0x26c($sp) -/* 076F94 7F042464 C7A40278 */ lwc1 $f4, 0x278($sp) -/* 076F98 7F042468 C7A6026C */ lwc1 $f6, 0x26c($sp) -/* 076F9C 7F04246C 4612103E */ c.le.s $f2, $f18 -/* 076FA0 7F042470 00000000 */ nop -/* 076FA4 7F042474 4502000A */ bc1fl .L7F0424A0 -/* 076FA8 7F042478 4602303E */ c.le.s $f6, $f2 -/* 076FAC 7F04247C 4612203E */ c.le.s $f4, $f18 -/* 076FB0 7F042480 00000000 */ nop -/* 076FB4 7F042484 45020006 */ bc1fl .L7F0424A0 -/* 076FB8 7F042488 4602303E */ c.le.s $f6, $f2 -/* 076FBC 7F04248C 4604103E */ c.le.s $f2, $f4 -/* 076FC0 7F042490 00000000 */ nop -/* 076FC4 7F042494 4503000E */ bc1tl .L7F0424D0 -/* 076FC8 7F042498 C6400060 */ lwc1 $f0, 0x60($s2) -/* 076FCC 7F04249C 4602303E */ c.le.s $f6, $f2 -.L7F0424A0: -/* 076FD0 7F0424A0 C7A80278 */ lwc1 $f8, 0x278($sp) -/* 076FD4 7F0424A4 45020058 */ bc1fl .L7F042608 -/* 076FD8 7F0424A8 8E260004 */ lw $a2, 4($s1) -/* 076FDC 7F0424AC 4608303E */ c.le.s $f6, $f8 -/* 076FE0 7F0424B0 00000000 */ nop -/* 076FE4 7F0424B4 45020054 */ bc1fl .L7F042608 -/* 076FE8 7F0424B8 8E260004 */ lw $a2, 4($s1) -/* 076FEC 7F0424BC 4602403E */ c.le.s $f8, $f2 -/* 076FF0 7F0424C0 00000000 */ nop -/* 076FF4 7F0424C4 45020050 */ bc1fl .L7F042608 -/* 076FF8 7F0424C8 8E260004 */ lw $a2, 4($s1) -/* 076FFC 7F0424CC C6400060 */ lwc1 $f0, 0x60($s2) -.L7F0424D0: -/* 077000 7F0424D0 C7AA0270 */ lwc1 $f10, 0x270($sp) -/* 077004 7F0424D4 C7B0027C */ lwc1 $f16, 0x27c($sp) -/* 077008 7F0424D8 C7B20270 */ lwc1 $f18, 0x270($sp) -/* 07700C 7F0424DC 460A003E */ c.le.s $f0, $f10 -/* 077010 7F0424E0 00000000 */ nop -/* 077014 7F0424E4 4502000A */ bc1fl .L7F042510 -/* 077018 7F0424E8 4600903E */ c.le.s $f18, $f0 -/* 07701C 7F0424EC 460A803E */ c.le.s $f16, $f10 -/* 077020 7F0424F0 00000000 */ nop -/* 077024 7F0424F4 45020006 */ bc1fl .L7F042510 -/* 077028 7F0424F8 4600903E */ c.le.s $f18, $f0 -/* 07702C 7F0424FC 4610003E */ c.le.s $f0, $f16 -/* 077030 7F042500 00000000 */ nop -/* 077034 7F042504 4503000E */ bc1tl .L7F042540 -/* 077038 7F042508 C7A60274 */ lwc1 $f6, 0x274($sp) -/* 07703C 7F04250C 4600903E */ c.le.s $f18, $f0 -.L7F042510: -/* 077040 7F042510 C7A4027C */ lwc1 $f4, 0x27c($sp) -/* 077044 7F042514 4502003C */ bc1fl .L7F042608 -/* 077048 7F042518 8E260004 */ lw $a2, 4($s1) -/* 07704C 7F04251C 4604903E */ c.le.s $f18, $f4 -/* 077050 7F042520 00000000 */ nop -/* 077054 7F042524 45020038 */ bc1fl .L7F042608 -/* 077058 7F042528 8E260004 */ lw $a2, 4($s1) -/* 07705C 7F04252C 4600203E */ c.le.s $f4, $f0 -/* 077060 7F042530 00000000 */ nop -/* 077064 7F042534 45020034 */ bc1fl .L7F042608 -/* 077068 7F042538 8E260004 */ lw $a2, 4($s1) -/* 07706C 7F04253C C7A60274 */ lwc1 $f6, 0x274($sp) -.L7F042540: -/* 077070 7F042540 C7A80278 */ lwc1 $f8, 0x278($sp) -/* 077074 7F042544 46066032 */ c.eq.s $f12, $f6 -/* 077078 7F042548 00000000 */ nop -/* 07707C 7F04254C 4502000A */ bc1fl .L7F042578 -/* 077080 7F042550 C7B00274 */ lwc1 $f16, 0x274($sp) -/* 077084 7F042554 46081032 */ c.eq.s $f2, $f8 -/* 077088 7F042558 C7AA027C */ lwc1 $f10, 0x27c($sp) -/* 07708C 7F04255C 45020006 */ bc1fl .L7F042578 -/* 077090 7F042560 C7B00274 */ lwc1 $f16, 0x274($sp) -/* 077094 7F042564 460A0032 */ c.eq.s $f0, $f10 -/* 077098 7F042568 00000000 */ nop -/* 07709C 7F04256C 45030026 */ bc1tl .L7F042608 -/* 0770A0 7F042570 8E260004 */ lw $a2, 4($s1) -/* 0770A4 7F042574 C7B00274 */ lwc1 $f16, 0x274($sp) -.L7F042578: -/* 0770A8 7F042578 AFA002A4 */ sw $zero, 0x2a4($sp) -/* 0770AC 7F04257C 02002025 */ move $a0, $s0 -/* 0770B0 7F042580 E6700000 */ swc1 $f16, ($s3) -/* 0770B4 7F042584 C7B20278 */ lwc1 $f18, 0x278($sp) -/* 0770B8 7F042588 26050004 */ addiu $a1, $s0, 4 -/* 0770BC 7F04258C E6720004 */ swc1 $f18, 4($s3) -/* 0770C0 7F042590 C7A4027C */ lwc1 $f4, 0x27c($sp) -/* 0770C4 7F042594 E6640008 */ swc1 $f4, 8($s3) -/* 0770C8 7F042598 C7A60280 */ lwc1 $f6, 0x280($sp) -/* 0770CC 7F04259C E6060000 */ swc1 $f6, ($s0) -/* 0770D0 7F0425A0 C6100000 */ lwc1 $f16, ($s0) -/* 0770D4 7F0425A4 C7A80284 */ lwc1 $f8, 0x284($sp) -/* 0770D8 7F0425A8 4610A032 */ c.eq.s $f20, $f16 -/* 0770DC 7F0425AC E6080004 */ swc1 $f8, 4($s0) -/* 0770E0 7F0425B0 C7AA0288 */ lwc1 $f10, 0x288($sp) -/* 0770E4 7F0425B4 4500000C */ bc1f .L7F0425E8 -/* 0770E8 7F0425B8 E60A0008 */ swc1 $f10, 8($s0) -/* 0770EC 7F0425BC C6120004 */ lwc1 $f18, 4($s0) -/* 0770F0 7F0425C0 4612A032 */ c.eq.s $f20, $f18 -/* 0770F4 7F0425C4 00000000 */ nop -/* 0770F8 7F0425C8 45000007 */ bc1f .L7F0425E8 -/* 0770FC 7F0425CC 00000000 */ nop -/* 077100 7F0425D0 C6040008 */ lwc1 $f4, 8($s0) -/* 077104 7F0425D4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 077108 7F0425D8 4604A032 */ c.eq.s $f20, $f4 -/* 07710C 7F0425DC 00000000 */ nop -/* 077110 7F0425E0 45030006 */ bc1tl .L7F0425FC -/* 077114 7F0425E4 44813000 */ mtc1 $at, $f6 -.L7F0425E8: -/* 077118 7F0425E8 0C007DD4 */ jal guNormalize -/* 07711C 7F0425EC 26060008 */ addiu $a2, $s0, 8 -/* 077120 7F0425F0 10000005 */ b .L7F042608 -/* 077124 7F0425F4 8E260004 */ lw $a2, 4($s1) -/* 077128 7F0425F8 44813000 */ mtc1 $at, $f6 -.L7F0425FC: -/* 07712C 7F0425FC 00000000 */ nop -/* 077130 7F042600 E6060008 */ swc1 $f6, 8($s0) -/* 077134 7F042604 8E260004 */ lw $a2, 4($s1) -.L7F042608: -/* 077138 7F042608 26310004 */ addiu $s1, $s1, 4 -/* 07713C 7F04260C 04C3FF68 */ bgezl $a2, .L7F0423B0 -/* 077140 7F042610 8FA40048 */ lw $a0, 0x48($sp) -/* 077144 7F042614 8FAD02A4 */ lw $t5, 0x2a4($sp) -.L7F042618: -/* 077148 7F042618 8FA202B4 */ lw $v0, 0x2b4($sp) -/* 07714C 7F04261C 55A00037 */ bnezl $t5, .L7F0426FC -/* 077150 7F042620 27AE007C */ addiu $t6, $sp, 0x7c -/* 077154 7F042624 C4480000 */ lwc1 $f8, ($v0) -/* 077158 7F042628 C64A0058 */ lwc1 $f10, 0x58($s2) -/* 07715C 7F04262C 460A4401 */ sub.s $f16, $f8, $f10 -/* 077160 7F042630 E7B00064 */ swc1 $f16, 0x64($sp) -/* 077164 7F042634 C644005C */ lwc1 $f4, 0x5c($s2) -/* 077168 7F042638 C4520004 */ lwc1 $f18, 4($v0) -/* 07716C 7F04263C 46049181 */ sub.s $f6, $f18, $f4 -/* 077170 7F042640 C7B20064 */ lwc1 $f18, 0x64($sp) -/* 077174 7F042644 E7A60068 */ swc1 $f6, 0x68($sp) -/* 077178 7F042648 C64A0060 */ lwc1 $f10, 0x60($s2) -/* 07717C 7F04264C C4480008 */ lwc1 $f8, 8($v0) -/* 077180 7F042650 46129102 */ mul.s $f4, $f18, $f18 -/* 077184 7F042654 C7A60068 */ lwc1 $f6, 0x68($sp) -/* 077188 7F042658 460A4401 */ sub.s $f16, $f8, $f10 -/* 07718C 7F04265C 46063202 */ mul.s $f8, $f6, $f6 -/* 077190 7F042660 E7B0006C */ swc1 $f16, 0x6c($sp) -/* 077194 7F042664 C7B0006C */ lwc1 $f16, 0x6c($sp) -/* 077198 7F042668 46108482 */ mul.s $f18, $f16, $f16 -/* 07719C 7F04266C 46082280 */ add.s $f10, $f4, $f8 -/* 0771A0 7F042670 0C007DF8 */ jal sqrtf -/* 0771A4 7F042674 460A9300 */ add.s $f12, $f18, $f10 -/* 0771A8 7F042678 3C018005 */ lui $at, %hi(D_80052A58) # -0.000000 -/* 0771AC 7F04267C C42C2A58 */ lwc1 $f12, %lo(D_80052A58)($at) -/* 0771B0 7F042680 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0771B4 7F042684 C7A40064 */ lwc1 $f4, 0x64($sp) -/* 0771B8 7F042688 4600603C */ c.lt.s $f12, $f0 -/* 0771BC 7F04268C 00000000 */ nop -/* 0771C0 7F042690 45020004 */ bc1fl .L7F0426A4 -/* 0771C4 7F042694 44811000 */ mtc1 $at, $f2 -/* 0771C8 7F042698 10000003 */ b .L7F0426A8 -/* 0771CC 7F04269C 46006083 */ div.s $f2, $f12, $f0 -/* 0771D0 7F0426A0 44811000 */ mtc1 $at, $f2 -.L7F0426A4: -/* 0771D4 7F0426A4 00000000 */ nop -.L7F0426A8: -/* 0771D8 7F0426A8 46041202 */ mul.s $f8, $f2, $f4 -/* 0771DC 7F0426AC C6660000 */ lwc1 $f6, ($s3) -/* 0771E0 7F0426B0 C6720004 */ lwc1 $f18, 4($s3) -/* 0771E4 7F0426B4 46083401 */ sub.s $f16, $f6, $f8 -/* 0771E8 7F0426B8 C6680008 */ lwc1 $f8, 8($s3) -/* 0771EC 7F0426BC E6700000 */ swc1 $f16, ($s3) -/* 0771F0 7F0426C0 C7AA0068 */ lwc1 $f10, 0x68($sp) -/* 0771F4 7F0426C4 460A1102 */ mul.s $f4, $f2, $f10 -/* 0771F8 7F0426C8 46049181 */ sub.s $f6, $f18, $f4 -/* 0771FC 7F0426CC C6640000 */ lwc1 $f4, ($s3) -/* 077200 7F0426D0 E6660004 */ swc1 $f6, 4($s3) -/* 077204 7F0426D4 C7B0006C */ lwc1 $f16, 0x6c($sp) -/* 077208 7F0426D8 46101282 */ mul.s $f10, $f2, $f16 -/* 07720C 7F0426DC 460A4481 */ sub.s $f18, $f8, $f10 -/* 077210 7F0426E0 E6720008 */ swc1 $f18, 8($s3) -/* 077214 7F0426E4 E7A40268 */ swc1 $f4, 0x268($sp) -/* 077218 7F0426E8 C6660004 */ lwc1 $f6, 4($s3) -/* 07721C 7F0426EC E7A6026C */ swc1 $f6, 0x26c($sp) -/* 077220 7F0426F0 C6700008 */ lwc1 $f16, 8($s3) -/* 077224 7F0426F4 E7B00270 */ swc1 $f16, 0x270($sp) -/* 077228 7F0426F8 27AE007C */ addiu $t6, $sp, 0x7c -.L7F0426FC: -/* 07722C 7F0426FC AFAE0018 */ sw $t6, 0x18($sp) -/* 077230 7F042700 8FA402AC */ lw $a0, 0x2ac($sp) -/* 077234 7F042704 8FA50048 */ lw $a1, 0x48($sp) -/* 077238 7F042708 27A60268 */ addiu $a2, $sp, 0x268 -/* 07723C 7F04270C 2407001F */ li $a3, 31 -/* 077240 7F042710 AFB30010 */ sw $s3, 0x10($sp) -/* 077244 7F042714 0FC10783 */ jal projectileFindCollidingProp -/* 077248 7F042718 AFB00014 */ sw $s0, 0x14($sp) -/* 07724C 7F04271C 14400036 */ bnez $v0, .L7F0427F8 -/* 077250 7F042720 8FAB02C4 */ lw $t3, 0x2c4($sp) -/* 077254 7F042724 8FAF02A4 */ lw $t7, 0x2a4($sp) -/* 077258 7F042728 8FB802C0 */ lw $t8, 0x2c0($sp) -/* 07725C 7F04272C 8FAD02A4 */ lw $t5, 0x2a4($sp) -/* 077260 7F042730 55E00016 */ bnezl $t7, .L7F04278C -/* 077264 7F042734 24100001 */ li $s0, 1 -/* 077268 7F042738 53000014 */ beql $t8, $zero, .L7F04278C -/* 07726C 7F04273C 24100001 */ li $s0, 1 -/* 077270 7F042740 8FA902C4 */ lw $t1, 0x2c4($sp) -/* 077274 7F042744 24190002 */ li $t9, 2 -/* 077278 7F042748 AFB902A4 */ sw $t9, 0x2a4($sp) -/* 07727C 7F04274C 1520000C */ bnez $t1, .L7F042780 -/* 077280 7F042750 8FA40048 */ lw $a0, 0x48($sp) -/* 077284 7F042754 8E46006C */ lw $a2, 0x6c($s2) -/* 077288 7F042758 27AA007C */ addiu $t2, $sp, 0x7c -/* 07728C 7F04275C 27AB0260 */ addiu $t3, $sp, 0x260 -/* 077290 7F042760 240C0014 */ li $t4, 20 -/* 077294 7F042764 AFAC0018 */ sw $t4, 0x18($sp) -/* 077298 7F042768 AFAB0014 */ sw $t3, 0x14($sp) -/* 07729C 7F04276C AFAA0010 */ sw $t2, 0x10($sp) -/* 0772A0 7F042770 02602825 */ move $a1, $s3 -/* 0772A4 7F042774 27A70074 */ addiu $a3, $sp, 0x74 -/* 0772A8 7F042778 0FC2D2AD */ jal sub_GAME_7F0B4AB4 -/* 0772AC 7F04277C 24C600CC */ addiu $a2, $a2, 0xcc -.L7F042780: -/* 0772B0 7F042780 1000003A */ b .L7F04286C -/* 0772B4 7F042784 8FA902A4 */ lw $t1, 0x2a4($sp) -/* 0772B8 7F042788 24100001 */ li $s0, 1 -.L7F04278C: -/* 0772BC 7F04278C 11B00003 */ beq $t5, $s0, .L7F04279C -/* 0772C0 7F042790 8FAE02C4 */ lw $t6, 0x2c4($sp) -/* 0772C4 7F042794 55C00035 */ bnezl $t6, .L7F04286C -/* 0772C8 7F042798 8FA902A4 */ lw $t1, 0x2a4($sp) -.L7F04279C: -/* 0772CC 7F04279C 8FAF02A4 */ lw $t7, 0x2a4($sp) -/* 0772D0 7F0427A0 8FA40048 */ lw $a0, 0x48($sp) -/* 0772D4 7F0427A4 27A50268 */ addiu $a1, $sp, 0x268 -/* 0772D8 7F0427A8 11F0000A */ beq $t7, $s0, .L7F0427D4 -/* 0772DC 7F0427AC 27A70074 */ addiu $a3, $sp, 0x74 -/* 0772E0 7F0427B0 8E46006C */ lw $a2, 0x6c($s2) -/* 0772E4 7F0427B4 27B8007C */ addiu $t8, $sp, 0x7c -/* 0772E8 7F0427B8 27B90260 */ addiu $t9, $sp, 0x260 -/* 0772EC 7F0427BC 24090014 */ li $t1, 20 -/* 0772F0 7F0427C0 AFA90018 */ sw $t1, 0x18($sp) -/* 0772F4 7F0427C4 AFB90014 */ sw $t9, 0x14($sp) -/* 0772F8 7F0427C8 AFB80010 */ sw $t8, 0x10($sp) -/* 0772FC 7F0427CC 0FC2D2AD */ jal sub_GAME_7F0B4AB4 -/* 077300 7F0427D0 24C600CC */ addiu $a2, $a2, 0xcc -.L7F0427D4: -/* 077304 7F0427D4 C7A80268 */ lwc1 $f8, 0x268($sp) -/* 077308 7F0427D8 E6480058 */ swc1 $f8, 0x58($s2) -/* 07730C 7F0427DC C7AA0270 */ lwc1 $f10, 0x270($sp) -/* 077310 7F0427E0 E64A0060 */ swc1 $f10, 0x60($s2) -/* 077314 7F0427E4 8FAA02AC */ lw $t2, 0x2ac($sp) -/* 077318 7F0427E8 C7A0026C */ lwc1 $f0, 0x26c($sp) -/* 07731C 7F0427EC E540000C */ swc1 $f0, 0xc($t2) -/* 077320 7F0427F0 1000001D */ b .L7F042868 -/* 077324 7F0427F4 E640005C */ swc1 $f0, 0x5c($s2) -.L7F0427F8: -/* 077328 7F0427F8 1560001B */ bnez $t3, .L7F042868 -/* 07732C 7F0427FC 27A50268 */ addiu $a1, $sp, 0x268 -/* 077330 7F042800 C6520058 */ lwc1 $f18, 0x58($s2) -/* 077334 7F042804 27AC007C */ addiu $t4, $sp, 0x7c -/* 077338 7F042808 27AD0260 */ addiu $t5, $sp, 0x260 -/* 07733C 7F04280C E7B20268 */ swc1 $f18, 0x268($sp) -/* 077340 7F042810 C6440060 */ lwc1 $f4, 0x60($s2) -/* 077344 7F042814 240E0014 */ li $t6, 20 -/* 077348 7F042818 8FA40048 */ lw $a0, 0x48($sp) -/* 07734C 7F04281C E7A40270 */ swc1 $f4, 0x270($sp) -/* 077350 7F042820 8E46006C */ lw $a2, 0x6c($s2) -/* 077354 7F042824 AFAE0018 */ sw $t6, 0x18($sp) -/* 077358 7F042828 AFAD0014 */ sw $t5, 0x14($sp) -/* 07735C 7F04282C AFAC0010 */ sw $t4, 0x10($sp) -/* 077360 7F042830 27A70074 */ addiu $a3, $sp, 0x74 -/* 077364 7F042834 0FC2D2AD */ jal sub_GAME_7F0B4AB4 -/* 077368 7F042838 24C600CC */ addiu $a2, $a2, 0xcc -/* 07736C 7F04283C C7A0026C */ lwc1 $f0, 0x26c($sp) -/* 077370 7F042840 8FAF02AC */ lw $t7, 0x2ac($sp) -/* 077374 7F042844 24190002 */ li $t9, 2 -/* 077378 7F042848 E5E0000C */ swc1 $f0, 0xc($t7) -/* 07737C 7F04284C E640005C */ swc1 $f0, 0x5c($s2) -/* 077380 7F042850 8FB802C0 */ lw $t8, 0x2c0($sp) -/* 077384 7F042854 53000004 */ beql $t8, $zero, .L7F042868 -/* 077388 7F042858 AFA002A4 */ sw $zero, 0x2a4($sp) -/* 07738C 7F04285C 10000002 */ b .L7F042868 -/* 077390 7F042860 AFB902A4 */ sw $t9, 0x2a4($sp) -/* 077394 7F042864 AFA002A4 */ sw $zero, 0x2a4($sp) -.L7F042868: -/* 077398 7F042868 8FA902A4 */ lw $t1, 0x2a4($sp) -.L7F04286C: -/* 07739C 7F04286C 24100001 */ li $s0, 1 -/* 0773A0 7F042870 8FAA02C4 */ lw $t2, 0x2c4($sp) -/* 0773A4 7F042874 51300004 */ beql $t1, $s0, .L7F042888 -/* 0773A8 7F042878 8E4B006C */ lw $t3, 0x6c($s2) -/* 0773AC 7F04287C 5540005B */ bnezl $t2, .L7F0429EC -/* 0773B0 7F042880 8FBF003C */ lw $ra, 0x3c($sp) -/* 0773B4 7F042884 8E4B006C */ lw $t3, 0x6c($s2) -.L7F042888: -/* 0773B8 7F042888 00004025 */ move $t0, $zero -/* 0773BC 7F04288C 8D620000 */ lw $v0, ($t3) -/* 0773C0 7F042890 304C0008 */ andi $t4, $v0, 8 -/* 0773C4 7F042894 15800028 */ bnez $t4, .L7F042938 -/* 0773C8 7F042898 01801025 */ move $v0, $t4 -/* 0773CC 7F04289C 8FA202AC */ lw $v0, 0x2ac($sp) -/* 0773D0 7F0428A0 27A402A8 */ addiu $a0, $sp, 0x2a8 -/* 0773D4 7F0428A4 8C4D0014 */ lw $t5, 0x14($v0) -/* 0773D8 7F0428A8 AFAD02A8 */ sw $t5, 0x2a8($sp) -/* 0773DC 7F0428AC C6460060 */ lwc1 $f6, 0x60($s2) -/* 0773E0 7F0428B0 8E470058 */ lw $a3, 0x58($s2) -/* 0773E4 7F0428B4 8C460010 */ lw $a2, 0x10($v0) -/* 0773E8 7F0428B8 8C450008 */ lw $a1, 8($v0) -/* 0773EC 7F0428BC AFA00264 */ sw $zero, 0x264($sp) -/* 0773F0 7F0428C0 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 0773F4 7F0428C4 E7A60010 */ swc1 $f6, 0x10($sp) -/* 0773F8 7F0428C8 1450000F */ bne $v0, $s0, .L7F042908 -/* 0773FC 7F0428CC 8FA80264 */ lw $t0, 0x264($sp) -/* 077400 7F0428D0 8FAE02A8 */ lw $t6, 0x2a8($sp) -/* 077404 7F0428D4 8FA302AC */ lw $v1, 0x2ac($sp) -/* 077408 7F0428D8 51C0000C */ beql $t6, $zero, .L7F04290C -/* 07740C 7F0428DC 8E43006C */ lw $v1, 0x6c($s2) -/* 077410 7F0428E0 AC6E0014 */ sw $t6, 0x14($v1) -/* 077414 7F0428E4 C6500058 */ lwc1 $f16, 0x58($s2) -/* 077418 7F0428E8 E4700008 */ swc1 $f16, 8($v1) -/* 07741C 7F0428EC C6480060 */ lwc1 $f8, 0x60($s2) -/* 077420 7F0428F0 E4680010 */ swc1 $f8, 0x10($v1) -/* 077424 7F0428F4 8E4F006C */ lw $t7, 0x6c($s2) -/* 077428 7F0428F8 8DE20000 */ lw $v0, ($t7) -/* 07742C 7F0428FC 30580008 */ andi $t8, $v0, 8 -/* 077430 7F042900 1000000D */ b .L7F042938 -/* 077434 7F042904 03001025 */ move $v0, $t8 -.L7F042908: -/* 077438 7F042908 8E43006C */ lw $v1, 0x6c($s2) -.L7F04290C: -/* 07743C 7F04290C 8C790000 */ lw $t9, ($v1) -/* 077440 7F042910 37290008 */ ori $t1, $t9, 8 -/* 077444 7F042914 AC690000 */ sw $t1, ($v1) -/* 077448 7F042918 8FAA02AC */ lw $t2, 0x2ac($sp) -/* 07744C 7F04291C 914B0001 */ lbu $t3, 1($t2) -/* 077450 7F042920 356C0008 */ ori $t4, $t3, 8 -/* 077454 7F042924 A14C0001 */ sb $t4, 1($t2) -/* 077458 7F042928 8E4D006C */ lw $t5, 0x6c($s2) -/* 07745C 7F04292C 8DA20000 */ lw $v0, ($t5) -/* 077460 7F042930 304E0008 */ andi $t6, $v0, 8 -/* 077464 7F042934 01C01025 */ move $v0, $t6 -.L7F042938: -/* 077468 7F042938 10400016 */ beqz $v0, .L7F042994 -/* 07746C 7F04293C 8FA40048 */ lw $a0, 0x48($sp) -/* 077470 7F042940 27A50074 */ addiu $a1, $sp, 0x74 -/* 077474 7F042944 00003025 */ move $a2, $zero -/* 077478 7F042948 0FC2BC83 */ jal sub_GAME_7F0AF20C -/* 07747C 7F04294C AFA80264 */ sw $t0, 0x264($sp) -/* 077480 7F042950 8FA80264 */ lw $t0, 0x264($sp) -/* 077484 7F042954 1040000F */ beqz $v0, .L7F042994 -/* 077488 7F042958 AFA202A8 */ sw $v0, 0x2a8($sp) -/* 07748C 7F04295C 8FA402AC */ lw $a0, 0x2ac($sp) -/* 077490 7F042960 2401FFF7 */ li $at, -9 -/* 077494 7F042964 AC820014 */ sw $v0, 0x14($a0) -/* 077498 7F042968 C64A0058 */ lwc1 $f10, 0x58($s2) -/* 07749C 7F04296C E48A0008 */ swc1 $f10, 8($a0) -/* 0774A0 7F042970 C6520060 */ lwc1 $f18, 0x60($s2) -/* 0774A4 7F042974 E4920010 */ swc1 $f18, 0x10($a0) -/* 0774A8 7F042978 8E43006C */ lw $v1, 0x6c($s2) -/* 0774AC 7F04297C 8C6F0000 */ lw $t7, ($v1) -/* 0774B0 7F042980 01E1C024 */ and $t8, $t7, $at -/* 0774B4 7F042984 AC780000 */ sw $t8, ($v1) -/* 0774B8 7F042988 90990001 */ lbu $t9, 1($a0) -/* 0774BC 7F04298C 03214824 */ and $t1, $t9, $at -/* 0774C0 7F042990 A0890001 */ sb $t1, 1($a0) -.L7F042994: -/* 0774C4 7F042994 93AB0074 */ lbu $t3, 0x74($sp) -/* 0774C8 7F042998 240400FF */ li $a0, 255 -/* 0774CC 7F04299C 27AC0074 */ addiu $t4, $sp, 0x74 -/* 0774D0 7F0429A0 108B000D */ beq $a0, $t3, .L7F0429D8 -/* 0774D4 7F0429A4 010C1021 */ addu $v0, $t0, $t4 -/* 0774D8 7F0429A8 90430000 */ lbu $v1, ($v0) -/* 0774DC 7F0429AC 24050007 */ li $a1, 7 -/* 0774E0 7F0429B0 8E4A006C */ lw $t2, 0x6c($s2) -.L7F0429B4: -/* 0774E4 7F0429B4 24420001 */ addiu $v0, $v0, 1 -/* 0774E8 7F0429B8 01486821 */ addu $t5, $t2, $t0 -/* 0774EC 7F0429BC A1A300CC */ sb $v1, 0xcc($t5) -/* 0774F0 7F0429C0 90430000 */ lbu $v1, ($v0) -/* 0774F4 7F0429C4 25080001 */ addiu $t0, $t0, 1 -/* 0774F8 7F0429C8 50830004 */ beql $a0, $v1, .L7F0429DC -/* 0774FC 7F0429CC 8E4F006C */ lw $t7, 0x6c($s2) -/* 077500 7F0429D0 5505FFF8 */ bnel $t0, $a1, .L7F0429B4 -/* 077504 7F0429D4 8E4A006C */ lw $t2, 0x6c($s2) -.L7F0429D8: -/* 077508 7F0429D8 8E4F006C */ lw $t7, 0x6c($s2) -.L7F0429DC: -/* 07750C 7F0429DC 240E00FF */ li $t6, 255 -/* 077510 7F0429E0 01E8C021 */ addu $t8, $t7, $t0 -/* 077514 7F0429E4 A30E00CC */ sb $t6, 0xcc($t8) -.L7F0429E8: -/* 077518 7F0429E8 8FBF003C */ lw $ra, 0x3c($sp) -.L7F0429EC: -/* 07751C 7F0429EC 8FA202A4 */ lw $v0, 0x2a4($sp) -/* 077520 7F0429F0 D7B40020 */ ldc1 $f20, 0x20($sp) -/* 077524 7F0429F4 8FB0002C */ lw $s0, 0x2c($sp) -/* 077528 7F0429F8 8FB10030 */ lw $s1, 0x30($sp) -/* 07752C 7F0429FC 8FB20034 */ lw $s2, 0x34($sp) -/* 077530 7F042A00 8FB30038 */ lw $s3, 0x38($sp) -/* 077534 7F042A04 03E00008 */ jr $ra -/* 077538 7F042A08 27BD02B0 */ addiu $sp, $sp, 0x2b0 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F042A0C(void) { - -} -#else -GLOBAL_ASM( -.late_rodata -glabel D_80052A5C -.word 0x3f7d70a4 /*0.99000001*/ -.text -glabel sub_GAME_7F042A0C -/* 07753C 7F042A0C 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 077540 7F042A10 AFBF0034 */ sw $ra, 0x34($sp) -/* 077544 7F042A14 AFB00030 */ sw $s0, 0x30($sp) -/* 077548 7F042A18 AFA600C8 */ sw $a2, 0xc8($sp) -/* 07754C 7F042A1C AFA700CC */ sw $a3, 0xcc($sp) -/* 077550 7F042A20 8C900010 */ lw $s0, 0x10($a0) -/* 077554 7F042A24 8E0E0014 */ lw $t6, 0x14($s0) -/* 077558 7F042A28 AFA500C4 */ sw $a1, 0xc4($sp) -/* 07755C 7F042A2C AFA400C0 */ sw $a0, 0xc0($sp) -/* 077560 7F042A30 0FC10411 */ jal objGetWidth -/* 077564 7F042A34 AFAE00B8 */ sw $t6, 0xb8($sp) -/* 077568 7F042A38 8FA500C4 */ lw $a1, 0xc4($sp) -/* 07756C 7F042A3C 240F0001 */ li $t7, 1 -/* 077570 7F042A40 3C018003 */ lui $at, %hi(D_80030B0C) -/* 077574 7F042A44 E7A000B4 */ swc1 $f0, 0xb4($sp) -/* 077578 7F042A48 AFAF00B0 */ sw $t7, 0xb0($sp) -/* 07757C 7F042A4C AC200B0C */ sw $zero, %lo(D_80030B0C)($at) -/* 077580 7F042A50 C6040008 */ lwc1 $f4, 8($s0) -/* 077584 7F042A54 C4A20000 */ lwc1 $f2, ($a1) -/* 077588 7F042A58 46041032 */ c.eq.s $f2, $f4 -/* 07758C 7F042A5C 00000000 */ nop -/* 077590 7F042A60 4502000E */ bc1fl .L7F042A9C -/* 077594 7F042A64 E7A20098 */ swc1 $f2, 0x98($sp) -/* 077598 7F042A68 C4A60004 */ lwc1 $f6, 4($a1) -/* 07759C 7F042A6C C608000C */ lwc1 $f8, 0xc($s0) -/* 0775A0 7F042A70 46083032 */ c.eq.s $f6, $f8 -/* 0775A4 7F042A74 00000000 */ nop -/* 0775A8 7F042A78 45020008 */ bc1fl .L7F042A9C -/* 0775AC 7F042A7C E7A20098 */ swc1 $f2, 0x98($sp) -/* 0775B0 7F042A80 C4AA0008 */ lwc1 $f10, 8($a1) -/* 0775B4 7F042A84 C6100010 */ lwc1 $f16, 0x10($s0) -/* 0775B8 7F042A88 46105032 */ c.eq.s $f10, $f16 -/* 0775BC 7F042A8C 00000000 */ nop -/* 0775C0 7F042A90 45030104 */ bc1tl .L7F042EA4 -/* 0775C4 7F042A94 8FBF0034 */ lw $ra, 0x34($sp) -/* 0775C8 7F042A98 E7A20098 */ swc1 $f2, 0x98($sp) -.L7F042A9C: -/* 0775CC 7F042A9C C4B20004 */ lwc1 $f18, 4($a1) -/* 0775D0 7F042AA0 8FB800C0 */ lw $t8, 0xc0($sp) -/* 0775D4 7F042AA4 E7B2009C */ swc1 $f18, 0x9c($sp) -/* 0775D8 7F042AA8 C4A40008 */ lwc1 $f4, 8($a1) -/* 0775DC 7F042AAC E7A400A0 */ swc1 $f4, 0xa0($sp) -/* 0775E0 7F042AB0 8F190064 */ lw $t9, 0x64($t8) -/* 0775E4 7F042AB4 33280080 */ andi $t0, $t9, 0x80 -/* 0775E8 7F042AB8 510000FA */ beql $t0, $zero, .L7F042EA4 -/* 0775EC 7F042ABC 8FBF0034 */ lw $ra, 0x34($sp) -/* 0775F0 7F042AC0 8E040014 */ lw $a0, 0x14($s0) -/* 0775F4 7F042AC4 8E050008 */ lw $a1, 8($s0) -/* 0775F8 7F042AC8 0FC2CA5C */ jal stanGetPositionYValue -/* 0775FC 7F042ACC 8E060010 */ lw $a2, 0x10($s0) -/* 077600 7F042AD0 8FA900C0 */ lw $t1, 0xc0($sp) -/* 077604 7F042AD4 C7AA009C */ lwc1 $f10, 0x9c($sp) -/* 077608 7F042AD8 8D2A006C */ lw $t2, 0x6c($t1) -/* 07760C 7F042ADC 8D4B0000 */ lw $t3, ($t2) -/* 077610 7F042AE0 316C0040 */ andi $t4, $t3, 0x40 -/* 077614 7F042AE4 55800008 */ bnezl $t4, .L7F042B08 -/* 077618 7F042AE8 C602000C */ lwc1 $f2, 0xc($s0) -/* 07761C 7F042AEC 44809000 */ mtc1 $zero, $f18 -/* 077620 7F042AF0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 077624 7F042AF4 44818000 */ mtc1 $at, $f16 -/* 077628 7F042AF8 E7B20090 */ swc1 $f18, 0x90($sp) -/* 07762C 7F042AFC 10000010 */ b .L7F042B40 -/* 077630 7F042B00 E7B0008C */ swc1 $f16, 0x8c($sp) -/* 077634 7F042B04 C602000C */ lwc1 $f2, 0xc($s0) -.L7F042B08: -/* 077638 7F042B08 C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 07763C 7F042B0C 4602503C */ c.lt.s $f10, $f2 -/* 077640 7F042B10 00000000 */ nop -/* 077644 7F042B14 45020007 */ bc1fl .L7F042B34 -/* 077648 7F042B18 46002181 */ sub.s $f6, $f4, $f0 -/* 07764C 7F042B1C 46001401 */ sub.s $f16, $f2, $f0 -/* 077650 7F042B20 46005481 */ sub.s $f18, $f10, $f0 -/* 077654 7F042B24 E7B00090 */ swc1 $f16, 0x90($sp) -/* 077658 7F042B28 10000005 */ b .L7F042B40 -/* 07765C 7F042B2C E7B2008C */ swc1 $f18, 0x8c($sp) -/* 077660 7F042B30 46002181 */ sub.s $f6, $f4, $f0 -.L7F042B34: -/* 077664 7F042B34 46001201 */ sub.s $f8, $f2, $f0 -/* 077668 7F042B38 E7A60090 */ swc1 $f6, 0x90($sp) -/* 07766C 7F042B3C E7A8008C */ swc1 $f8, 0x8c($sp) -.L7F042B40: -/* 077670 7F042B40 0FC2C731 */ jal sub_GAME_7F0B1CC4 -/* 077674 7F042B44 00000000 */ nop -/* 077678 7F042B48 8E050008 */ lw $a1, 8($s0) -/* 07767C 7F042B4C 8E060010 */ lw $a2, 0x10($s0) -/* 077680 7F042B50 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 077684 7F042B54 44813000 */ mtc1 $at, $f6 -/* 077688 7F042B58 C7B000A0 */ lwc1 $f16, 0xa0($sp) -/* 07768C 7F042B5C C7AA0090 */ lwc1 $f10, 0x90($sp) -/* 077690 7F042B60 C7B2008C */ lwc1 $f18, 0x8c($sp) -/* 077694 7F042B64 44802000 */ mtc1 $zero, $f4 -/* 077698 7F042B68 240D001F */ li $t5, 31 -/* 07769C 7F042B6C AFAD0014 */ sw $t5, 0x14($sp) -/* 0776A0 7F042B70 27A400B8 */ addiu $a0, $sp, 0xb8 -/* 0776A4 7F042B74 8FA70098 */ lw $a3, 0x98($sp) -/* 0776A8 7F042B78 E7B00010 */ swc1 $f16, 0x10($sp) -/* 0776AC 7F042B7C E7A60024 */ swc1 $f6, 0x24($sp) -/* 0776B0 7F042B80 E7AA0018 */ swc1 $f10, 0x18($sp) -/* 0776B4 7F042B84 E7B2001C */ swc1 $f18, 0x1c($sp) -/* 0776B8 7F042B88 0FC2C389 */ jal stanTestLineUnobstructed -/* 0776BC 7F042B8C E7A40020 */ swc1 $f4, 0x20($sp) -/* 0776C0 7F042B90 1040001D */ beqz $v0, .L7F042C08 -/* 0776C4 7F042B94 8FAE00B8 */ lw $t6, 0xb8($sp) -/* 0776C8 7F042B98 11C0001B */ beqz $t6, .L7F042C08 -/* 0776CC 7F042B9C 27A400B8 */ addiu $a0, $sp, 0xb8 -/* 0776D0 7F042BA0 C7A80090 */ lwc1 $f8, 0x90($sp) -/* 0776D4 7F042BA4 C7B0008C */ lwc1 $f16, 0x8c($sp) -/* 0776D8 7F042BA8 240F001F */ li $t7, 31 -/* 0776DC 7F042BAC AFAF0010 */ sw $t7, 0x10($sp) -/* 0776E0 7F042BB0 8FA50098 */ lw $a1, 0x98($sp) -/* 0776E4 7F042BB4 8FA600A0 */ lw $a2, 0xa0($sp) -/* 0776E8 7F042BB8 8FA700B4 */ lw $a3, 0xb4($sp) -/* 0776EC 7F042BBC E7A80014 */ swc1 $f8, 0x14($sp) -/* 0776F0 7F042BC0 0FC2C62E */ jal stanTestVolume -/* 0776F4 7F042BC4 E7B00018 */ swc1 $f16, 0x18($sp) -/* 0776F8 7F042BC8 0441000F */ bgez $v0, .L7F042C08 -/* 0776FC 7F042BCC C7AA0098 */ lwc1 $f10, 0x98($sp) -/* 077700 7F042BD0 8FA200C0 */ lw $v0, 0xc0($sp) -/* 077704 7F042BD4 E44A0058 */ swc1 $f10, 0x58($v0) -/* 077708 7F042BD8 C7B200A0 */ lwc1 $f18, 0xa0($sp) -/* 07770C 7F042BDC E4520060 */ swc1 $f18, 0x60($v0) -/* 077710 7F042BE0 8FB800B8 */ lw $t8, 0xb8($sp) -/* 077714 7F042BE4 AE180014 */ sw $t8, 0x14($s0) -/* 077718 7F042BE8 C7A40098 */ lwc1 $f4, 0x98($sp) -/* 07771C 7F042BEC E6040008 */ swc1 $f4, 8($s0) -/* 077720 7F042BF0 C7A600A0 */ lwc1 $f6, 0xa0($sp) -/* 077724 7F042BF4 E6060010 */ swc1 $f6, 0x10($s0) -/* 077728 7F042BF8 C7A0009C */ lwc1 $f0, 0x9c($sp) -/* 07772C 7F042BFC E600000C */ swc1 $f0, 0xc($s0) -/* 077730 7F042C00 100000A7 */ b .L7F042EA0 -/* 077734 7F042C04 E440005C */ swc1 $f0, 0x5c($v0) -.L7F042C08: -/* 077738 7F042C08 27A40080 */ addiu $a0, $sp, 0x80 -/* 07773C 7F042C0C 0FC2CA2C */ jal getCollisionEdge_maybe -/* 077740 7F042C10 27A50074 */ addiu $a1, $sp, 0x74 -/* 077744 7F042C14 C7A8007C */ lwc1 $f8, 0x7c($sp) -/* 077748 7F042C18 C7B00088 */ lwc1 $f16, 0x88($sp) -/* 07774C 7F042C1C 8FA400CC */ lw $a0, 0xcc($sp) -/* 077750 7F042C20 44801000 */ mtc1 $zero, $f2 -/* 077754 7F042C24 46104281 */ sub.s $f10, $f8, $f16 -/* 077758 7F042C28 24850004 */ addiu $a1, $a0, 4 -/* 07775C 7F042C2C E4820004 */ swc1 $f2, 4($a0) -/* 077760 7F042C30 E48A0000 */ swc1 $f10, ($a0) -/* 077764 7F042C34 C4880000 */ lwc1 $f8, ($a0) -/* 077768 7F042C38 C7A40074 */ lwc1 $f4, 0x74($sp) -/* 07776C 7F042C3C C7B20080 */ lwc1 $f18, 0x80($sp) -/* 077770 7F042C40 46081032 */ c.eq.s $f2, $f8 -/* 077774 7F042C44 46049181 */ sub.s $f6, $f18, $f4 -/* 077778 7F042C48 45000007 */ bc1f .L7F042C68 -/* 07777C 7F042C4C E4860008 */ swc1 $f6, 8($a0) -/* 077780 7F042C50 C4900008 */ lwc1 $f16, 8($a0) -/* 077784 7F042C54 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 077788 7F042C58 46101032 */ c.eq.s $f2, $f16 -/* 07778C 7F042C5C 00000000 */ nop -/* 077790 7F042C60 45030006 */ bc1tl .L7F042C7C -/* 077794 7F042C64 44815000 */ mtc1 $at, $f10 -.L7F042C68: -/* 077798 7F042C68 0C007DD4 */ jal guNormalize -/* 07779C 7F042C6C 24860008 */ addiu $a2, $a0, 8 -/* 0777A0 7F042C70 10000005 */ b .L7F042C88 -/* 0777A4 7F042C74 C6000008 */ lwc1 $f0, 8($s0) -/* 0777A8 7F042C78 44815000 */ mtc1 $at, $f10 -.L7F042C7C: -/* 0777AC 7F042C7C 00000000 */ nop -/* 0777B0 7F042C80 E48A0008 */ swc1 $f10, 8($a0) -/* 0777B4 7F042C84 C6000008 */ lwc1 $f0, 8($s0) -.L7F042C88: -/* 0777B8 7F042C88 C7B20098 */ lwc1 $f18, 0x98($sp) -/* 0777BC 7F042C8C C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 0777C0 7F042C90 C7AA0098 */ lwc1 $f10, 0x98($sp) -/* 0777C4 7F042C94 46009032 */ c.eq.s $f18, $f0 -/* 0777C8 7F042C98 00000000 */ nop -/* 0777CC 7F042C9C 4502000F */ bc1fl .L7F042CDC -/* 0777D0 7F042CA0 46005481 */ sub.s $f18, $f10, $f0 -/* 0777D4 7F042CA4 C606000C */ lwc1 $f6, 0xc($s0) -/* 0777D8 7F042CA8 C7A800A0 */ lwc1 $f8, 0xa0($sp) -/* 0777DC 7F042CAC 46062032 */ c.eq.s $f4, $f6 -/* 0777E0 7F042CB0 00000000 */ nop -/* 0777E4 7F042CB4 45020009 */ bc1fl .L7F042CDC -/* 0777E8 7F042CB8 46005481 */ sub.s $f18, $f10, $f0 -/* 0777EC 7F042CBC C6100010 */ lwc1 $f16, 0x10($s0) -/* 0777F0 7F042CC0 8FA200C8 */ lw $v0, 0xc8($sp) -/* 0777F4 7F042CC4 C7B20098 */ lwc1 $f18, 0x98($sp) -/* 0777F8 7F042CC8 46104032 */ c.eq.s $f8, $f16 -/* 0777FC 7F042CCC 00000000 */ nop -/* 077800 7F042CD0 4503006A */ bc1tl .L7F042E7C -/* 077804 7F042CD4 E4520000 */ swc1 $f18, ($v0) -/* 077808 7F042CD8 46005481 */ sub.s $f18, $f10, $f0 -.L7F042CDC: -/* 07780C 7F042CDC C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 077810 7F042CE0 C7B000A0 */ lwc1 $f16, 0xa0($sp) -/* 077814 7F042CE4 26040008 */ addiu $a0, $s0, 8 -/* 077818 7F042CE8 E7B200A4 */ swc1 $f18, 0xa4($sp) -/* 07781C 7F042CEC C606000C */ lwc1 $f6, 0xc($s0) -/* 077820 7F042CF0 27A500A4 */ addiu $a1, $sp, 0xa4 -/* 077824 7F042CF4 8FA600C8 */ lw $a2, 0xc8($sp) -/* 077828 7F042CF8 46062201 */ sub.s $f8, $f4, $f6 -/* 07782C 7F042CFC E7A800A8 */ swc1 $f8, 0xa8($sp) -/* 077830 7F042D00 C60A0010 */ lwc1 $f10, 0x10($s0) -/* 077834 7F042D04 460A8481 */ sub.s $f18, $f16, $f10 -/* 077838 7F042D08 0FC09893 */ jal chrlvStanLineDirIntersection -/* 07783C 7F042D0C E7B200AC */ swc1 $f18, 0xac($sp) -/* 077840 7F042D10 C7A400B4 */ lwc1 $f4, 0xb4($sp) -/* 077844 7F042D14 C7B00080 */ lwc1 $f16, 0x80($sp) -/* 077848 7F042D18 C7AA0088 */ lwc1 $f10, 0x88($sp) -/* 07784C 7F042D1C E7A4005C */ swc1 $f4, 0x5c($sp) -/* 077850 7F042D20 C6060008 */ lwc1 $f6, 8($s0) -/* 077854 7F042D24 C7B20074 */ lwc1 $f18, 0x74($sp) -/* 077858 7F042D28 C7A4007C */ lwc1 $f4, 0x7c($sp) -/* 07785C 7F042D2C E7A60060 */ swc1 $f6, 0x60($sp) -/* 077860 7F042D30 C6080010 */ lwc1 $f8, 0x10($s0) -/* 077864 7F042D34 E7B00054 */ swc1 $f16, 0x54($sp) -/* 077868 7F042D38 E7AA0058 */ swc1 $f10, 0x58($sp) -/* 07786C 7F042D3C E7B2004C */ swc1 $f18, 0x4c($sp) -/* 077870 7F042D40 E7A40050 */ swc1 $f4, 0x50($sp) -/* 077874 7F042D44 E7A80064 */ swc1 $f8, 0x64($sp) -/* 077878 7F042D48 C6080008 */ lwc1 $f8, 8($s0) -/* 07787C 7F042D4C C7A60098 */ lwc1 $f6, 0x98($sp) -/* 077880 7F042D50 C7AA00A0 */ lwc1 $f10, 0xa0($sp) -/* 077884 7F042D54 27A4005C */ addiu $a0, $sp, 0x5c -/* 077888 7F042D58 46083401 */ sub.s $f16, $f6, $f8 -/* 07788C 7F042D5C 27A50054 */ addiu $a1, $sp, 0x54 -/* 077890 7F042D60 27A6004C */ addiu $a2, $sp, 0x4c -/* 077894 7F042D64 27A70044 */ addiu $a3, $sp, 0x44 -/* 077898 7F042D68 E7B00044 */ swc1 $f16, 0x44($sp) -/* 07789C 7F042D6C C6120010 */ lwc1 $f18, 0x10($s0) -/* 0778A0 7F042D70 46125101 */ sub.s $f4, $f10, $f18 -/* 0778A4 7F042D74 0FC2CCF7 */ jal calculateRayToSegmentIntersectionNormalized -/* 0778A8 7F042D78 E7A40048 */ swc1 $f4, 0x48($sp) -/* 0778AC 7F042D7C C7A80044 */ lwc1 $f8, 0x44($sp) -/* 0778B0 7F042D80 3C018005 */ lui $at, %hi(D_80052A5C) -/* 0778B4 7F042D84 C4222A5C */ lwc1 $f2, %lo(D_80052A5C)($at) -/* 0778B8 7F042D88 46004402 */ mul.s $f16, $f8, $f0 -/* 0778BC 7F042D8C 8E190014 */ lw $t9, 0x14($s0) -/* 0778C0 7F042D90 C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 0778C4 7F042D94 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0778C8 7F042D98 AFB900B8 */ sw $t9, 0xb8($sp) -/* 0778CC 7F042D9C C6060008 */ lwc1 $f6, 8($s0) -/* 0778D0 7F042DA0 E7A4006C */ swc1 $f4, 0x6c($sp) -/* 0778D4 7F042DA4 46028282 */ mul.s $f10, $f16, $f2 -/* 0778D8 7F042DA8 C7B00048 */ lwc1 $f16, 0x48($sp) -/* 0778DC 7F042DAC 2408001F */ li $t0, 31 -/* 0778E0 7F042DB0 27A400B8 */ addiu $a0, $sp, 0xb8 -/* 0778E4 7F042DB4 460A3480 */ add.s $f18, $f6, $f10 -/* 0778E8 7F042DB8 46008182 */ mul.s $f6, $f16, $f0 -/* 0778EC 7F042DBC C7B00090 */ lwc1 $f16, 0x90($sp) -/* 0778F0 7F042DC0 E7B20068 */ swc1 $f18, 0x68($sp) -/* 0778F4 7F042DC4 C6080010 */ lwc1 $f8, 0x10($s0) -/* 0778F8 7F042DC8 8FA70068 */ lw $a3, 0x68($sp) -/* 0778FC 7F042DCC 46023282 */ mul.s $f10, $f6, $f2 -/* 077900 7F042DD0 C7A6008C */ lwc1 $f6, 0x8c($sp) -/* 077904 7F042DD4 460A4480 */ add.s $f18, $f8, $f10 -/* 077908 7F042DD8 44815000 */ mtc1 $at, $f10 -/* 07790C 7F042DDC 44804000 */ mtc1 $zero, $f8 -/* 077910 7F042DE0 E7B20070 */ swc1 $f18, 0x70($sp) -/* 077914 7F042DE4 8E060010 */ lw $a2, 0x10($s0) -/* 077918 7F042DE8 8E050008 */ lw $a1, 8($s0) -/* 07791C 7F042DEC C7A40070 */ lwc1 $f4, 0x70($sp) -/* 077920 7F042DF0 AFA80014 */ sw $t0, 0x14($sp) -/* 077924 7F042DF4 E7B00018 */ swc1 $f16, 0x18($sp) -/* 077928 7F042DF8 E7A6001C */ swc1 $f6, 0x1c($sp) -/* 07792C 7F042DFC E7AA0024 */ swc1 $f10, 0x24($sp) -/* 077930 7F042E00 E7A80020 */ swc1 $f8, 0x20($sp) -/* 077934 7F042E04 0FC2C389 */ jal stanTestLineUnobstructed -/* 077938 7F042E08 E7A40010 */ swc1 $f4, 0x10($sp) -/* 07793C 7F042E0C 1040001F */ beqz $v0, .L7F042E8C -/* 077940 7F042E10 8FA900B8 */ lw $t1, 0xb8($sp) -/* 077944 7F042E14 1120001D */ beqz $t1, .L7F042E8C -/* 077948 7F042E18 27A400B8 */ addiu $a0, $sp, 0xb8 -/* 07794C 7F042E1C C7B20090 */ lwc1 $f18, 0x90($sp) -/* 077950 7F042E20 C7A4008C */ lwc1 $f4, 0x8c($sp) -/* 077954 7F042E24 240A001F */ li $t2, 31 -/* 077958 7F042E28 AFAA0010 */ sw $t2, 0x10($sp) -/* 07795C 7F042E2C 8FA50068 */ lw $a1, 0x68($sp) -/* 077960 7F042E30 8FA60070 */ lw $a2, 0x70($sp) -/* 077964 7F042E34 8FA700B4 */ lw $a3, 0xb4($sp) -/* 077968 7F042E38 E7B20014 */ swc1 $f18, 0x14($sp) -/* 07796C 7F042E3C 0FC2C62E */ jal stanTestVolume -/* 077970 7F042E40 E7A40018 */ swc1 $f4, 0x18($sp) -/* 077974 7F042E44 04410011 */ bgez $v0, .L7F042E8C -/* 077978 7F042E48 C7B00068 */ lwc1 $f16, 0x68($sp) -/* 07797C 7F042E4C 8FAB00C0 */ lw $t3, 0xc0($sp) -/* 077980 7F042E50 E5700058 */ swc1 $f16, 0x58($t3) -/* 077984 7F042E54 C7A60070 */ lwc1 $f6, 0x70($sp) -/* 077988 7F042E58 E5660060 */ swc1 $f6, 0x60($t3) -/* 07798C 7F042E5C 8FAC00B8 */ lw $t4, 0xb8($sp) -/* 077990 7F042E60 AE0C0014 */ sw $t4, 0x14($s0) -/* 077994 7F042E64 C7A80068 */ lwc1 $f8, 0x68($sp) -/* 077998 7F042E68 E6080008 */ swc1 $f8, 8($s0) -/* 07799C 7F042E6C C7AA0070 */ lwc1 $f10, 0x70($sp) -/* 0779A0 7F042E70 10000006 */ b .L7F042E8C -/* 0779A4 7F042E74 E60A0010 */ swc1 $f10, 0x10($s0) -/* 0779A8 7F042E78 E4520000 */ swc1 $f18, ($v0) -.L7F042E7C: -/* 0779AC 7F042E7C C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 0779B0 7F042E80 E4440004 */ swc1 $f4, 4($v0) -/* 0779B4 7F042E84 C7B000A0 */ lwc1 $f16, 0xa0($sp) -/* 0779B8 7F042E88 E4500008 */ swc1 $f16, 8($v0) -.L7F042E8C: -/* 0779BC 7F042E8C C7A0006C */ lwc1 $f0, 0x6c($sp) -/* 0779C0 7F042E90 E600000C */ swc1 $f0, 0xc($s0) -/* 0779C4 7F042E94 8FAD00C0 */ lw $t5, 0xc0($sp) -/* 0779C8 7F042E98 E5A0005C */ swc1 $f0, 0x5c($t5) -/* 0779CC 7F042E9C AFA000B0 */ sw $zero, 0xb0($sp) -.L7F042EA0: -/* 0779D0 7F042EA0 8FBF0034 */ lw $ra, 0x34($sp) -.L7F042EA4: -/* 0779D4 7F042EA4 8FA200B0 */ lw $v0, 0xb0($sp) -/* 0779D8 7F042EA8 8FB00030 */ lw $s0, 0x30($sp) -/* 0779DC 7F042EAC 03E00008 */ jr $ra -/* 0779E0 7F042EB0 27BD00C0 */ addiu $sp, $sp, 0xc0 -) -#endif - - - - -/** - * US address 7F042EB4. -*/ -s32 sub_GAME_7F042EB4(struct ObjectRecord *arg0, f32 *arg1, struct coord3d *arg2, struct coord3d *arg3, s32 arg4, s32 arg5) -{ - if ((arg0->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) && arg0->projectile->flags & 4) - { - return handles_projectile_motion(arg0, arg1, arg2, arg3, arg4, arg5); - } - - return sub_GAME_7F042A0C(arg0, arg1, arg2, arg3, arg4); -} - - - - -/** - * Update a speed and distance travelled, factoring in acceleration, - * deceleration and the global update multiplier. - * - * The new speed and distance done are written back to those pointers. - * - * offsets: 077A48, 7F042F18 - * (copied from Perfect Dark) - */ -void chrobjApplySpeed(f32 *openPosition, f32 maxFrac, f32 *speedPtr, f32 accel, f32 decel, f32 maxSpeed) -{ - f32 speed = *speedPtr; - s32 i; - - for (i = 0; i < g_ClockTimer; i++) - { - f32 limit = speed * speed * 0.5f / decel; - f32 distRemaining = maxFrac - *openPosition; - if (distRemaining > 0.0f) - { - if (speed > 0.0f && distRemaining <= limit) - { - // Slow down for end - speed -= decel; - - if (speed < decel) - { - speed = decel; - } - } - else if (speed < maxSpeed) - { - // Accelerate - if (speed < 0.0f) - { - speed += decel; - } - else - { - speed += accel; - } - - if (speed > maxSpeed) - { - speed = maxSpeed; - } - } - - if (speed >= distRemaining) - { - *openPosition = maxFrac; - break; - } - - *openPosition += speed; - } - else - { - if (speed < 0.0f && -distRemaining <= limit) - { - speed += decel; - - if (speed > -decel) - { - speed = -decel; - } - } - else if (speed > -maxSpeed) - { - if (speed > 0.0f) - { - speed -= decel; - } - else - { - speed -= accel; - } - - if (speed < -maxSpeed) - { - speed = -maxSpeed; - } - } - - if (speed <= distRemaining) - { - *openPosition = maxFrac; - break; - } - - *openPosition += speed; - } - } - *speedPtr = speed; -} - - - - - -/** - * Address 0x7F04310C. -*/ -void chrobjCallsApplySpeed(f32 *openPosition, f32 maxFrac, f32 *speedPtr, f32 accel, f32 decel, f32 maxSpeed) -{ - if (maxFrac - *openPosition < -M_PI_F) - { - maxFrac += M_TAU_F; - } - else if (maxFrac - *openPosition >= M_PI_F) - { - maxFrac -= M_TAU_F; - } - - chrobjApplySpeed(openPosition, maxFrac, speedPtr, accel, decel, maxSpeed); - - if (*openPosition < 0.0f) - { - *openPosition = *openPosition + M_TAU_F; - } - - if (*openPosition >= M_TAU_F) - { - *openPosition = *openPosition - M_TAU_F; - } -} - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0431E4(void) { - -} -#else -GLOBAL_ASM( -.late_rodata -glabel D_80052A74 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052A78 -.word 0x3d4ccccd /*0.050000001*/ -glabel D_80052A7C -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052A80 -.word 0x3d4ccccd /*0.050000001*/ -glabel D_80052A84 -.word 0x3cf5c28f /*0.029999999*/ -glabel D_80052A88 -.word 0x3e19999a /*0.15000001*/ -.text -glabel sub_GAME_7F0431E4 -/* 077D14 7F0431E4 27BDFEE8 */ addiu $sp, $sp, -0x118 -/* 077D18 7F0431E8 AFBF001C */ sw $ra, 0x1c($sp) -/* 077D1C 7F0431EC AFB10018 */ sw $s1, 0x18($sp) -/* 077D20 7F0431F0 AFB00014 */ sw $s0, 0x14($sp) -/* 077D24 7F0431F4 AFA5011C */ sw $a1, 0x11c($sp) -/* 077D28 7F0431F8 8C8E0064 */ lw $t6, 0x64($a0) -/* 077D2C 7F0431FC 3C01FFFE */ li $at, 0xFFFE0000 # -nan -/* 077D30 7F043200 3421FFFF */ ori $at, (0xFFFEFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 077D34 7F043204 01C17824 */ and $t7, $t6, $at -/* 077D38 7F043208 31F90080 */ andi $t9, $t7, 0x80 -/* 077D3C 7F04320C 00808825 */ move $s1, $a0 -/* 077D40 7F043210 1320010A */ beqz $t9, .L7F04363C -/* 077D44 7F043214 AC8F0064 */ sw $t7, 0x64($a0) -/* 077D48 7F043218 90880003 */ lbu $t0, 3($a0) -/* 077D4C 7F04321C 8C90006C */ lw $s0, 0x6c($a0) -/* 077D50 7F043220 24010001 */ li $at, 1 -/* 077D54 7F043224 15010009 */ bne $t0, $at, .L7F04324C -/* 077D58 7F043228 26240018 */ addiu $a0, $s1, 0x18 -/* 077D5C 7F04322C 0FC0FEDC */ jal projectileFree -/* 077D60 7F043230 02002025 */ move $a0, $s0 -/* 077D64 7F043234 8E290064 */ lw $t1, 0x64($s1) -/* 077D68 7F043238 2401FF7F */ li $at, -129 -/* 077D6C 7F04323C AE20006C */ sw $zero, 0x6c($s1) -/* 077D70 7F043240 01215024 */ and $t2, $t1, $at -/* 077D74 7F043244 100000FD */ b .L7F04363C -/* 077D78 7F043248 AE2A0064 */ sw $t2, 0x64($s1) -.L7F04324C: -/* 077D7C 7F04324C 8E0B0000 */ lw $t3, ($s0) -/* 077D80 7F043250 2401FFFE */ li $at, -2 -/* 077D84 7F043254 AE000088 */ sw $zero, 0x88($s0) -/* 077D88 7F043258 01616024 */ and $t4, $t3, $at -/* 077D8C 7F04325C 2401FFFB */ li $at, -5 -/* 077D90 7F043260 AE0C0000 */ sw $t4, ($s0) -/* 077D94 7F043264 01817024 */ and $t6, $t4, $at -/* 077D98 7F043268 AE0E0000 */ sw $t6, ($s0) -/* 077D9C 7F04326C AFA40028 */ sw $a0, 0x28($sp) -/* 077DA0 7F043270 0FC16218 */ jal matrix_4x4_get_rotation_around_xyz -/* 077DA4 7F043274 27A5010C */ addiu $a1, $sp, 0x10c -/* 077DA8 7F043278 27A4010C */ addiu $a0, $sp, 0x10c -/* 077DAC 7F04327C 0FC161C5 */ jal matrix_4x4_set_rotation_around_xyz -/* 077DB0 7F043280 27A500CC */ addiu $a1, $sp, 0xcc -/* 077DB4 7F043284 26050068 */ addiu $a1, $s0, 0x68 -/* 077DB8 7F043288 AFA50024 */ sw $a1, 0x24($sp) -/* 077DBC 7F04328C 0FC16CFD */ jal quaternion_set_rotation_around_xyzf -/* 077DC0 7F043290 27A4010C */ addiu $a0, $sp, 0x10c -/* 077DC4 7F043294 27A400CC */ addiu $a0, $sp, 0xcc -/* 077DC8 7F043298 0FC1674E */ jal matrix_4x4_set_rotation_inverse -/* 077DCC 7F04329C 27A5008C */ addiu $a1, $sp, 0x8c -/* 077DD0 7F0432A0 27A4008C */ addiu $a0, $sp, 0x8c -/* 077DD4 7F0432A4 8FA50028 */ lw $a1, 0x28($sp) -/* 077DD8 7F0432A8 0FC16032 */ jal matrix_4x4_multiply -/* 077DDC 7F0432AC 27A6004C */ addiu $a2, $sp, 0x4c -/* 077DE0 7F0432B0 C7A2004C */ lwc1 $f2, 0x4c($sp) -/* 077DE4 7F0432B4 C7AE0050 */ lwc1 $f14, 0x50($sp) -/* 077DE8 7F0432B8 C7A00054 */ lwc1 $f0, 0x54($sp) -/* 077DEC 7F0432BC 46021102 */ mul.s $f4, $f2, $f2 -/* 077DF0 7F0432C0 00000000 */ nop -/* 077DF4 7F0432C4 460E7182 */ mul.s $f6, $f14, $f14 -/* 077DF8 7F0432C8 46062200 */ add.s $f8, $f4, $f6 -/* 077DFC 7F0432CC 46000282 */ mul.s $f10, $f0, $f0 -/* 077E00 7F0432D0 0C007DF8 */ jal sqrtf -/* 077E04 7F0432D4 46085300 */ add.s $f12, $f10, $f8 -/* 077E08 7F0432D8 E60000C0 */ swc1 $f0, 0xc0($s0) -/* 077E0C 7F0432DC C7A4005C */ lwc1 $f4, 0x5c($sp) -/* 077E10 7F0432E0 C7AA0060 */ lwc1 $f10, 0x60($sp) -/* 077E14 7F0432E4 46042182 */ mul.s $f6, $f4, $f4 -/* 077E18 7F0432E8 00000000 */ nop -/* 077E1C 7F0432EC 460A5202 */ mul.s $f8, $f10, $f10 -/* 077E20 7F0432F0 C7AA0064 */ lwc1 $f10, 0x64($sp) -/* 077E24 7F0432F4 46083100 */ add.s $f4, $f6, $f8 -/* 077E28 7F0432F8 460A5182 */ mul.s $f6, $f10, $f10 -/* 077E2C 7F0432FC 0C007DF8 */ jal sqrtf -/* 077E30 7F043300 46043300 */ add.s $f12, $f6, $f4 -/* 077E34 7F043304 E60000C4 */ swc1 $f0, 0xc4($s0) -/* 077E38 7F043308 C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 077E3C 7F04330C C7A60070 */ lwc1 $f6, 0x70($sp) -/* 077E40 7F043310 46084282 */ mul.s $f10, $f8, $f8 -/* 077E44 7F043314 00000000 */ nop -/* 077E48 7F043318 46063102 */ mul.s $f4, $f6, $f6 -/* 077E4C 7F04331C C7A60074 */ lwc1 $f6, 0x74($sp) -/* 077E50 7F043320 46045200 */ add.s $f8, $f10, $f4 -/* 077E54 7F043324 46063282 */ mul.s $f10, $f6, $f6 -/* 077E58 7F043328 0C007DF8 */ jal sqrtf -/* 077E5C 7F04332C 46085300 */ add.s $f12, $f10, $f8 -/* 077E60 7F043330 E60000C8 */ swc1 $f0, 0xc8($s0) -/* 077E64 7F043334 44808000 */ mtc1 $zero, $f16 -/* 077E68 7F043338 C6220018 */ lwc1 $f2, 0x18($s1) -/* 077E6C 7F04333C C62E0020 */ lwc1 $f14, 0x20($s1) -/* 077E70 7F043340 46101032 */ c.eq.s $f2, $f16 -/* 077E74 7F043344 00000000 */ nop -/* 077E78 7F043348 45000005 */ bc1f .L7F043360 -/* 077E7C 7F04334C 00000000 */ nop -/* 077E80 7F043350 46107032 */ c.eq.s $f14, $f16 -/* 077E84 7F043354 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 077E88 7F043358 45030013 */ bc1tl .L7F0433A8 -/* 077E8C 7F04335C 44817000 */ mtc1 $at, $f14 -.L7F043360: -/* 077E90 7F043360 46021102 */ mul.s $f4, $f2, $f2 -/* 077E94 7F043364 E7A20048 */ swc1 $f2, 0x48($sp) -/* 077E98 7F043368 E7AE0044 */ swc1 $f14, 0x44($sp) -/* 077E9C 7F04336C 460E7182 */ mul.s $f6, $f14, $f14 -/* 077EA0 7F043370 0C007DF8 */ jal sqrtf -/* 077EA4 7F043374 46062300 */ add.s $f12, $f4, $f6 -/* 077EA8 7F043378 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 077EAC 7F04337C 44819000 */ mtc1 $at, $f18 -/* 077EB0 7F043380 C7A20048 */ lwc1 $f2, 0x48($sp) -/* 077EB4 7F043384 C7AE0044 */ lwc1 $f14, 0x44($sp) -/* 077EB8 7F043388 46009303 */ div.s $f12, $f18, $f0 -/* 077EBC 7F04338C 44808000 */ mtc1 $zero, $f16 -/* 077EC0 7F043390 460C1082 */ mul.s $f2, $f2, $f12 -/* 077EC4 7F043394 00000000 */ nop -/* 077EC8 7F043398 460C7382 */ mul.s $f14, $f14, $f12 -/* 077ECC 7F04339C 10000004 */ b .L7F0433B0 -/* 077ED0 7F0433A0 00000000 */ nop -/* 077ED4 7F0433A4 44817000 */ mtc1 $at, $f14 -.L7F0433A8: -/* 077ED8 7F0433A8 44819000 */ mtc1 $at, $f18 -/* 077EDC 7F0433AC 46008086 */ mov.s $f2, $f16 -.L7F0433B0: -/* 077EE0 7F0433B0 E7A2008C */ swc1 $f2, 0x8c($sp) -/* 077EE4 7F0433B4 E7B00090 */ swc1 $f16, 0x90($sp) -/* 077EE8 7F0433B8 E7AE0094 */ swc1 $f14, 0x94($sp) -/* 077EEC 7F0433BC E7B00098 */ swc1 $f16, 0x98($sp) -/* 077EF0 7F0433C0 C62A002C */ lwc1 $f10, 0x2c($s1) -/* 077EF4 7F0433C4 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 077EF8 7F0433C8 27A4008C */ addiu $a0, $sp, 0x8c -/* 077EFC 7F0433CC 460A803E */ c.le.s $f16, $f10 -/* 077F00 7F0433D0 27A5010C */ addiu $a1, $sp, 0x10c -/* 077F04 7F0433D4 4502000C */ bc1fl .L7F043408 -/* 077F08 7F0433D8 44812000 */ mtc1 $at, $f4 -/* 077F0C 7F0433DC 46007207 */ neg.s $f8, $f14 -/* 077F10 7F0433E0 E7B0009C */ swc1 $f16, 0x9c($sp) -/* 077F14 7F0433E4 E7B200A0 */ swc1 $f18, 0xa0($sp) -/* 077F18 7F0433E8 E7B000A4 */ swc1 $f16, 0xa4($sp) -/* 077F1C 7F0433EC E7B000A8 */ swc1 $f16, 0xa8($sp) -/* 077F20 7F0433F0 E7A800AC */ swc1 $f8, 0xac($sp) -/* 077F24 7F0433F4 E7B000B0 */ swc1 $f16, 0xb0($sp) -/* 077F28 7F0433F8 E7A200B4 */ swc1 $f2, 0xb4($sp) -/* 077F2C 7F0433FC 1000000B */ b .L7F04342C -/* 077F30 7F043400 E7B000B8 */ swc1 $f16, 0xb8($sp) -/* 077F34 7F043404 44812000 */ mtc1 $at, $f4 -.L7F043408: -/* 077F38 7F043408 46001187 */ neg.s $f6, $f2 -/* 077F3C 7F04340C E7B0009C */ swc1 $f16, 0x9c($sp) -/* 077F40 7F043410 E7B000A4 */ swc1 $f16, 0xa4($sp) -/* 077F44 7F043414 E7B000A8 */ swc1 $f16, 0xa8($sp) -/* 077F48 7F043418 E7AE00AC */ swc1 $f14, 0xac($sp) -/* 077F4C 7F04341C E7B000B0 */ swc1 $f16, 0xb0($sp) -/* 077F50 7F043420 E7A600B4 */ swc1 $f6, 0xb4($sp) -/* 077F54 7F043424 E7B000B8 */ swc1 $f16, 0xb8($sp) -/* 077F58 7F043428 E7A400A0 */ swc1 $f4, 0xa0($sp) -.L7F04342C: -/* 077F5C 7F04342C E7B000BC */ swc1 $f16, 0xbc($sp) -/* 077F60 7F043430 E7B000C0 */ swc1 $f16, 0xc0($sp) -/* 077F64 7F043434 E7B000C4 */ swc1 $f16, 0xc4($sp) -/* 077F68 7F043438 0FC16218 */ jal matrix_4x4_get_rotation_around_xyz -/* 077F6C 7F04343C E7B200C8 */ swc1 $f18, 0xc8($sp) -/* 077F70 7F043440 26050078 */ addiu $a1, $s0, 0x78 -/* 077F74 7F043444 AFA50028 */ sw $a1, 0x28($sp) -/* 077F78 7F043448 0FC16CFD */ jal quaternion_set_rotation_around_xyzf -/* 077F7C 7F04344C 27A4010C */ addiu $a0, $sp, 0x10c -/* 077F80 7F043450 8FA50028 */ lw $a1, 0x28($sp) -/* 077F84 7F043454 0FC16F84 */ jal quaternion_ensure_shortest_path -/* 077F88 7F043458 8FA40024 */ lw $a0, 0x24($sp) -/* 077F8C 7F04345C 44808000 */ mtc1 $zero, $f16 -/* 077F90 7F043460 00000000 */ nop -/* 077F94 7F043464 E6100060 */ swc1 $f16, 0x60($s0) -/* 077F98 7F043468 C7A800CC */ lwc1 $f8, 0xcc($sp) -/* 077F9C 7F04346C C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 077FA0 7F043470 C7A60090 */ lwc1 $f6, 0x90($sp) -/* 077FA4 7F043474 46085102 */ mul.s $f4, $f10, $f8 -/* 077FA8 7F043478 C7AA00D0 */ lwc1 $f10, 0xd0($sp) -/* 077FAC 7F04347C 460A3202 */ mul.s $f8, $f6, $f10 -/* 077FB0 7F043480 C7AA00D4 */ lwc1 $f10, 0xd4($sp) -/* 077FB4 7F043484 46082180 */ add.s $f6, $f4, $f8 -/* 077FB8 7F043488 C7A40094 */ lwc1 $f4, 0x94($sp) -/* 077FBC 7F04348C 46045202 */ mul.s $f8, $f10, $f4 -/* 077FC0 7F043490 0FC16B2C */ jal acosf -/* 077FC4 7F043494 46064300 */ add.s $f12, $f8, $f6 -/* 077FC8 7F043498 44808000 */ mtc1 $zero, $f16 -/* 077FCC 7F04349C 46000486 */ mov.s $f18, $f0 -/* 077FD0 7F0434A0 4600803C */ c.lt.s $f16, $f0 -/* 077FD4 7F0434A4 00000000 */ nop -/* 077FD8 7F0434A8 45020018 */ bc1fl .L7F04350C -/* 077FDC 7F0434AC 4600803C */ c.lt.s $f16, $f0 -/* 077FE0 7F0434B0 C622001C */ lwc1 $f2, 0x1c($s1) -/* 077FE4 7F0434B4 8FA2011C */ lw $v0, 0x11c($sp) -/* 077FE8 7F0434B8 4602803C */ c.lt.s $f16, $f2 -/* 077FEC 7F0434BC 00000000 */ nop -/* 077FF0 7F0434C0 45020012 */ bc1fl .L7F04350C -/* 077FF4 7F0434C4 4600803C */ c.lt.s $f16, $f0 -/* 077FF8 7F0434C8 C44A0004 */ lwc1 $f10, 4($v0) -/* 077FFC 7F0434CC 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 078000 7F0434D0 4602503C */ c.lt.s $f10, $f2 -/* 078004 7F0434D4 00000000 */ nop -/* 078008 7F0434D8 4502000C */ bc1fl .L7F04350C -/* 07800C 7F0434DC 4600803C */ c.lt.s $f16, $f0 -/* 078010 7F0434E0 44812000 */ mtc1 $at, $f4 -/* 078014 7F0434E4 3C018005 */ lui $at, %hi(D_80052A74) -/* 078018 7F0434E8 C4262A74 */ lwc1 $f6, %lo(D_80052A74)($at) -/* 07801C 7F0434EC 46040202 */ mul.s $f8, $f0, $f4 -/* 078020 7F0434F0 3C018005 */ lui $at, %hi(D_80052A78) -/* 078024 7F0434F4 C4242A78 */ lwc1 $f4, %lo(D_80052A78)($at) -/* 078028 7F0434F8 46064283 */ div.s $f10, $f8, $f6 -/* 07802C 7F0434FC 460A2203 */ div.s $f8, $f4, $f10 -/* 078030 7F043500 10000037 */ b .L7F0435E0 -/* 078034 7F043504 E6080064 */ swc1 $f8, 0x64($s0) -/* 078038 7F043508 4600803C */ c.lt.s $f16, $f0 -.L7F04350C: -/* 07803C 7F04350C 8FA2011C */ lw $v0, 0x11c($sp) -/* 078040 7F043510 C622001C */ lwc1 $f2, 0x1c($s1) -/* 078044 7F043514 45000013 */ bc1f .L7F043564 -/* 078048 7F043518 C44E0004 */ lwc1 $f14, 4($v0) -/* 07804C 7F04351C 4610103C */ c.lt.s $f2, $f16 -/* 078050 7F043520 00000000 */ nop -/* 078054 7F043524 45020010 */ bc1fl .L7F043568 -/* 078058 7F043528 C62A0020 */ lwc1 $f10, 0x20($s1) -/* 07805C 7F04352C 460E103C */ c.lt.s $f2, $f14 -/* 078060 7F043530 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 078064 7F043534 4502000C */ bc1fl .L7F043568 -/* 078068 7F043538 C62A0020 */ lwc1 $f10, 0x20($s1) -/* 07806C 7F04353C 44813000 */ mtc1 $at, $f6 -/* 078070 7F043540 3C018005 */ lui $at, %hi(D_80052A7C) -/* 078074 7F043544 C42A2A7C */ lwc1 $f10, %lo(D_80052A7C)($at) -/* 078078 7F043548 46060102 */ mul.s $f4, $f0, $f6 -/* 07807C 7F04354C 3C018005 */ lui $at, %hi(D_80052A80) -/* 078080 7F043550 C4262A80 */ lwc1 $f6, %lo(D_80052A80)($at) -/* 078084 7F043554 460A2203 */ div.s $f8, $f4, $f10 -/* 078088 7F043558 46083103 */ div.s $f4, $f6, $f8 -/* 07808C 7F04355C 10000020 */ b .L7F0435E0 -/* 078090 7F043560 E6040064 */ swc1 $f4, 0x64($s0) -.L7F043564: -/* 078094 7F043564 C62A0020 */ lwc1 $f10, 0x20($s1) -.L7F043568: -/* 078098 7F043568 C4460008 */ lwc1 $f6, 8($v0) -/* 07809C 7F04356C C4440000 */ lwc1 $f4, ($v0) -/* 0780A0 7F043570 8E2F0014 */ lw $t7, 0x14($s1) -/* 0780A4 7F043574 46065202 */ mul.s $f8, $f10, $f6 -/* 0780A8 7F043578 C62A0018 */ lwc1 $f10, 0x18($s1) -/* 0780AC 7F04357C C5E00014 */ lwc1 $f0, 0x14($t7) -/* 0780B0 7F043580 E7B20030 */ swc1 $f18, 0x30($sp) -/* 0780B4 7F043584 460A2182 */ mul.s $f6, $f4, $f10 -/* 0780B8 7F043588 00000000 */ nop -/* 0780BC 7F04358C 46027102 */ mul.s $f4, $f14, $f2 -/* 0780C0 7F043590 46043280 */ add.s $f10, $f6, $f4 -/* 0780C4 7F043594 46000102 */ mul.s $f4, $f0, $f0 -/* 0780C8 7F043598 460A4180 */ add.s $f6, $f8, $f10 -/* 0780CC 7F04359C 0FC16B2C */ jal acosf -/* 0780D0 7F0435A0 46043303 */ div.s $f12, $f6, $f4 -/* 0780D4 7F0435A4 44808000 */ mtc1 $zero, $f16 -/* 0780D8 7F0435A8 C7B20030 */ lwc1 $f18, 0x30($sp) -/* 0780DC 7F0435AC 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 0780E0 7F0435B0 C4288378 */ lwc1 $f8, %lo(g_GlobalTimerDelta)($at) -/* 0780E4 7F0435B4 46109032 */ c.eq.s $f18, $f16 -/* 0780E8 7F0435B8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0780EC 7F0435BC 46080083 */ div.s $f2, $f0, $f8 -/* 0780F0 7F0435C0 45030005 */ bc1tl .L7F0435D8 -/* 0780F4 7F0435C4 44813000 */ mtc1 $at, $f6 -/* 0780F8 7F0435C8 46121283 */ div.s $f10, $f2, $f18 -/* 0780FC 7F0435CC 10000004 */ b .L7F0435E0 -/* 078100 7F0435D0 E60A0064 */ swc1 $f10, 0x64($s0) -/* 078104 7F0435D4 44813000 */ mtc1 $at, $f6 -.L7F0435D8: -/* 078108 7F0435D8 00000000 */ nop -/* 07810C 7F0435DC E6060064 */ swc1 $f6, 0x64($s0) -.L7F0435E0: -/* 078110 7F0435E0 C6000064 */ lwc1 $f0, 0x64($s0) -/* 078114 7F0435E4 3C018005 */ lui $at, %hi(D_80052A84) -/* 078118 7F0435E8 4610003C */ c.lt.s $f0, $f16 -/* 07811C 7F0435EC 00000000 */ nop -/* 078120 7F0435F0 45000004 */ bc1f .L7F043604 -/* 078124 7F0435F4 00000000 */ nop -/* 078128 7F0435F8 46000107 */ neg.s $f4, $f0 -/* 07812C 7F0435FC E6040064 */ swc1 $f4, 0x64($s0) -/* 078130 7F043600 C6000064 */ lwc1 $f0, 0x64($s0) -.L7F043604: -/* 078134 7F043604 C4222A84 */ lwc1 $f2, %lo(D_80052A84)($at) -/* 078138 7F043608 3C018005 */ lui $at, %hi(D_80052A88) -/* 07813C 7F04360C 4602003C */ c.lt.s $f0, $f2 -/* 078140 7F043610 00000000 */ nop -/* 078144 7F043614 45000003 */ bc1f .L7F043624 -/* 078148 7F043618 00000000 */ nop -/* 07814C 7F04361C 10000007 */ b .L7F04363C -/* 078150 7F043620 E6020064 */ swc1 $f2, 0x64($s0) -.L7F043624: -/* 078154 7F043624 C4222A88 */ lwc1 $f2, %lo(D_80052A88)($at) -/* 078158 7F043628 4600103C */ c.lt.s $f2, $f0 -/* 07815C 7F04362C 00000000 */ nop -/* 078160 7F043630 45020003 */ bc1fl .L7F043640 -/* 078164 7F043634 8FBF001C */ lw $ra, 0x1c($sp) -/* 078168 7F043638 E6020064 */ swc1 $f2, 0x64($s0) -.L7F04363C: -/* 07816C 7F04363C 8FBF001C */ lw $ra, 0x1c($sp) -.L7F043640: -/* 078170 7F043640 8FB00014 */ lw $s0, 0x14($sp) -/* 078174 7F043644 8FB10018 */ lw $s1, 0x18($sp) -/* 078178 7F043648 03E00008 */ jr $ra -/* 07817C 7F04364C 27BD0118 */ addiu $sp, $sp, 0x118 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F043650(void) { - -} -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F043650 -/* 078180 7F043650 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 078184 7F043654 AFBF001C */ sw $ra, 0x1c($sp) -/* 078188 7F043658 AFB00018 */ sw $s0, 0x18($sp) -/* 07818C 7F04365C 8C820064 */ lw $v0, 0x64($a0) -/* 078190 7F043660 00808025 */ move $s0, $a0 -/* 078194 7F043664 304E0080 */ andi $t6, $v0, 0x80 -/* 078198 7F043668 51C0006F */ beql $t6, $zero, .L7F043828 -/* 07819C 7F04366C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0781A0 7F043670 8C83006C */ lw $v1, 0x6c($a0) -/* 0781A4 7F043674 2401FFDF */ li $at, -33 -/* 0781A8 7F043678 8C6F0000 */ lw $t7, ($v1) -/* 0781AC 7F04367C 31F80001 */ andi $t8, $t7, 1 -/* 0781B0 7F043680 53000052 */ beql $t8, $zero, .L7F0437CC -/* 0781B4 7F043684 00414024 */ and $t0, $v0, $at -/* 0781B8 7F043688 8C790090 */ lw $t9, 0x90($v1) -/* 0781BC 7F04368C 30480020 */ andi $t0, $v0, 0x20 -/* 0781C0 7F043690 5F20004E */ bgtzl $t9, .L7F0437CC -/* 0781C4 7F043694 00414024 */ and $t0, $v0, $at -/* 0781C8 7F043698 1100004B */ beqz $t0, .L7F0437C8 -/* 0781CC 7F04369C 3C0A8003 */ lui $t2, %hi(Throwing_knife_SFX) -/* 0781D0 7F0436A0 254A0B2C */ addiu $t2, %lo(Throwing_knife_SFX) # addiu $t2, $t2, 0xb2c -/* 0781D4 7F0436A4 8D410000 */ lw $at, ($t2) -/* 0781D8 7F0436A8 27A90038 */ addiu $t1, $sp, 0x38 -/* 0781DC 7F0436AC AD210000 */ sw $at, ($t1) -/* 0781E0 7F0436B0 95410004 */ lhu $at, 4($t2) -/* 0781E4 7F0436B4 A5210004 */ sh $at, 4($t1) -/* 0781E8 7F0436B8 8C8D006C */ lw $t5, 0x6c($a0) -/* 0781EC 7F0436BC 8DAE00A4 */ lw $t6, 0xa4($t5) -/* 0781F0 7F0436C0 0C002914 */ jal randomGetNext -/* 0781F4 7F0436C4 AFAE0034 */ sw $t6, 0x34($sp) -/* 0781F8 7F0436C8 24010003 */ li $at, 3 -/* 0781FC 7F0436CC 0041001B */ divu $zero, $v0, $at -/* 078200 7F0436D0 00007810 */ mfhi $t7 -/* 078204 7F0436D4 AFAF0030 */ sw $t7, 0x30($sp) -/* 078208 7F0436D8 8E03006C */ lw $v1, 0x6c($s0) -/* 07820C 7F0436DC 3C198005 */ lui $t9, %hi(g_GlobalTimer) -/* 078210 7F0436E0 8F39837C */ lw $t9, %lo(g_GlobalTimer)($t9) -/* 078214 7F0436E4 8C7800A0 */ lw $t8, 0xa0($v1) -/* 078218 7F0436E8 8FA70034 */ lw $a3, 0x34($sp) -/* 07821C 7F0436EC 2728FFFA */ addiu $t0, $t9, -6 -/* 078220 7F0436F0 0308082A */ slt $at, $t8, $t0 -/* 078224 7F0436F4 1020000D */ beqz $at, .L7F04372C -/* 078228 7F0436F8 00075880 */ sll $t3, $a3, 2 -/* 07822C 7F0436FC 006B4821 */ addu $t1, $v1, $t3 -/* 078230 7F043700 8D240098 */ lw $a0, 0x98($t1) -/* 078234 7F043704 5080000A */ beql $a0, $zero, .L7F043730 -/* 078238 7F043708 8FA70034 */ lw $a3, 0x34($sp) -/* 07823C 7F04370C 0C00237C */ jal sndGetPlayingState -/* 078240 7F043710 AFAB002C */ sw $t3, 0x2c($sp) -/* 078244 7F043714 10400005 */ beqz $v0, .L7F04372C -/* 078248 7F043718 8FA7002C */ lw $a3, 0x2c($sp) -/* 07824C 7F04371C 8E0A006C */ lw $t2, 0x6c($s0) -/* 078250 7F043720 01476021 */ addu $t4, $t2, $a3 -/* 078254 7F043724 0C002408 */ jal sndDeactivate -/* 078258 7F043728 8D840098 */ lw $a0, 0x98($t4) -.L7F04372C: -/* 07825C 7F04372C 8FA70034 */ lw $a3, 0x34($sp) -.L7F043730: -/* 078260 7F043730 8E0E006C */ lw $t6, 0x6c($s0) -/* 078264 7F043734 00076880 */ sll $t5, $a3, 2 -/* 078268 7F043738 01CD7821 */ addu $t7, $t6, $t5 -/* 07826C 7F04373C 8DF90098 */ lw $t9, 0x98($t7) -/* 078270 7F043740 57200039 */ bnezl $t9, .L7F043828 -/* 078274 7F043744 8FBF001C */ lw $ra, 0x1c($sp) -/* 078278 7F043748 0FC2FF01 */ jal lvlGetControlsLockedFlag -/* 07827C 7F04374C AFAD002C */ sw $t5, 0x2c($sp) -/* 078280 7F043750 14400034 */ bnez $v0, .L7F043824 -/* 078284 7F043754 8FA7002C */ lw $a3, 0x2c($sp) -/* 078288 7F043758 8FB80030 */ lw $t8, 0x30($sp) -/* 07828C 7F04375C 8E0B006C */ lw $t3, 0x6c($s0) -/* 078290 7F043760 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 078294 7F043764 00184040 */ sll $t0, $t8, 1 -/* 078298 7F043768 03A82821 */ addu $a1, $sp, $t0 -/* 07829C 7F04376C 84A50038 */ lh $a1, 0x38($a1) -/* 0782A0 7F043770 01673021 */ addu $a2, $t3, $a3 -/* 0782A4 7F043774 24C60098 */ addiu $a2, $a2, 0x98 -/* 0782A8 7F043778 AFA7002C */ sw $a3, 0x2c($sp) -/* 0782AC 7F04377C 0C002382 */ jal sndPlaySfx -/* 0782B0 7F043780 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0782B4 7F043784 8FA7002C */ lw $a3, 0x2c($sp) -/* 0782B8 7F043788 8E09006C */ lw $t1, 0x6c($s0) -/* 0782BC 7F04378C 8E050010 */ lw $a1, 0x10($s0) -/* 0782C0 7F043790 01275021 */ addu $t2, $t1, $a3 -/* 0782C4 7F043794 8D440098 */ lw $a0, 0x98($t2) -/* 0782C8 7F043798 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 0782CC 7F04379C 24A50008 */ addiu $a1, $a1, 8 -/* 0782D0 7F0437A0 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) -/* 0782D4 7F0437A4 8D8C837C */ lw $t4, %lo(g_GlobalTimer)($t4) -/* 0782D8 7F0437A8 8E0D006C */ lw $t5, 0x6c($s0) -/* 0782DC 7F0437AC 240F0001 */ li $t7, 1 -/* 0782E0 7F0437B0 ADAC00A0 */ sw $t4, 0xa0($t5) -/* 0782E4 7F0437B4 8FAE0034 */ lw $t6, 0x34($sp) -/* 0782E8 7F0437B8 8E18006C */ lw $t8, 0x6c($s0) -/* 0782EC 7F0437BC 01EEC823 */ subu $t9, $t7, $t6 -/* 0782F0 7F0437C0 10000018 */ b .L7F043824 -/* 0782F4 7F0437C4 AF1900A4 */ sw $t9, 0xa4($t8) -.L7F0437C8: -/* 0782F8 7F0437C8 00414024 */ and $t0, $v0, $at -.L7F0437CC: -/* 0782FC 7F0437CC AE080064 */ sw $t0, 0x64($s0) -/* 078300 7F0437D0 8C640098 */ lw $a0, 0x98($v1) -/* 078304 7F0437D4 50800009 */ beql $a0, $zero, .L7F0437FC -/* 078308 7F0437D8 8E09006C */ lw $t1, 0x6c($s0) -/* 07830C 7F0437DC 0C00237C */ jal sndGetPlayingState -/* 078310 7F0437E0 00000000 */ nop -/* 078314 7F0437E4 50400005 */ beql $v0, $zero, .L7F0437FC -/* 078318 7F0437E8 8E09006C */ lw $t1, 0x6c($s0) -/* 07831C 7F0437EC 8E0B006C */ lw $t3, 0x6c($s0) -/* 078320 7F0437F0 0C002408 */ jal sndDeactivate -/* 078324 7F0437F4 8D640098 */ lw $a0, 0x98($t3) -/* 078328 7F0437F8 8E09006C */ lw $t1, 0x6c($s0) -.L7F0437FC: -/* 07832C 7F0437FC 8D24009C */ lw $a0, 0x9c($t1) -/* 078330 7F043800 50800009 */ beql $a0, $zero, .L7F043828 -/* 078334 7F043804 8FBF001C */ lw $ra, 0x1c($sp) -/* 078338 7F043808 0C00237C */ jal sndGetPlayingState -/* 07833C 7F04380C 00000000 */ nop -/* 078340 7F043810 50400005 */ beql $v0, $zero, .L7F043828 -/* 078344 7F043814 8FBF001C */ lw $ra, 0x1c($sp) -/* 078348 7F043818 8E0A006C */ lw $t2, 0x6c($s0) -/* 07834C 7F04381C 0C002408 */ jal sndDeactivate -/* 078350 7F043820 8D44009C */ lw $a0, 0x9c($t2) -.L7F043824: -/* 078354 7F043824 8FBF001C */ lw $ra, 0x1c($sp) -.L7F043828: -/* 078358 7F043828 8FB00018 */ lw $s0, 0x18($sp) -/* 07835C 7F04382C 27BD0040 */ addiu $sp, $sp, 0x40 -/* 078360 7F043830 03E00008 */ jr $ra -/* 078364 7F043834 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F043650 -/* 076100 7F043710 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 076104 7F043714 AFBF001C */ sw $ra, 0x1c($sp) -/* 076108 7F043718 AFB00018 */ sw $s0, 0x18($sp) -/* 07610C 7F04371C 8C820064 */ lw $v0, 0x64($a0) -/* 076110 7F043720 00808025 */ move $s0, $a0 -/* 076114 7F043724 304E0080 */ andi $t6, $v0, 0x80 -/* 076118 7F043728 51C0006F */ beql $t6, $zero, .L7F0438E8 -/* 07611C 7F04372C 8FBF001C */ lw $ra, 0x1c($sp) -/* 076120 7F043730 8C83006C */ lw $v1, 0x6c($a0) -/* 076124 7F043734 2401FFDF */ li $at, -33 -/* 076128 7F043738 8C6F0000 */ lw $t7, ($v1) -/* 07612C 7F04373C 31F80001 */ andi $t8, $t7, 1 -/* 076130 7F043740 53000052 */ beql $t8, $zero, .L7F04388C -/* 076134 7F043744 00414024 */ and $t0, $v0, $at -/* 076138 7F043748 8C790090 */ lw $t9, 0x90($v1) -/* 07613C 7F04374C 30480020 */ andi $t0, $v0, 0x20 -/* 076140 7F043750 5F20004E */ bgtzl $t9, .L7F04388C -/* 076144 7F043754 00414024 */ and $t0, $v0, $at -/* 076148 7F043758 1100004B */ beqz $t0, .L7F043888 -/* 07614C 7F04375C 3C0A8003 */ lui $t2, %hi(Throwing_knife_SFX) # $t2, 0x8003 -/* 076150 7F043760 254AC07C */ addiu $t2, %lo(Throwing_knife_SFX) # addiu $t2, $t2, -0x3f84 -/* 076154 7F043764 8D410000 */ lw $at, ($t2) -/* 076158 7F043768 27A90038 */ addiu $t1, $sp, 0x38 -/* 07615C 7F04376C AD210000 */ sw $at, ($t1) -/* 076160 7F043770 95410004 */ lhu $at, 4($t2) -/* 076164 7F043774 A5210004 */ sh $at, 4($t1) -/* 076168 7F043778 8C8D006C */ lw $t5, 0x6c($a0) -/* 07616C 7F04377C 8DAE00A4 */ lw $t6, 0xa4($t5) -/* 076170 7F043780 0C00262C */ jal randomGetNext -/* 076174 7F043784 AFAE0034 */ sw $t6, 0x34($sp) -/* 076178 7F043788 24010003 */ li $at, 3 -/* 07617C 7F04378C 0041001B */ divu $zero, $v0, $at -/* 076180 7F043790 00007810 */ mfhi $t7 -/* 076184 7F043794 AFAF0030 */ sw $t7, 0x30($sp) -/* 076188 7F043798 8E03006C */ lw $v1, 0x6c($s0) -/* 07618C 7F04379C 3C198004 */ lui $t9, %hi(g_GlobalTimer) # $t9, 0x8004 -/* 076190 7F0437A0 8F390FFC */ lw $t9, %lo(g_GlobalTimer)($t9) -/* 076194 7F0437A4 8C7800A0 */ lw $t8, 0xa0($v1) -/* 076198 7F0437A8 8FA70034 */ lw $a3, 0x34($sp) -/* 07619C 7F0437AC 2728FFFB */ addiu $t0, $t9, -5 -/* 0761A0 7F0437B0 0308082A */ slt $at, $t8, $t0 -/* 0761A4 7F0437B4 1020000D */ beqz $at, .L7F0437EC -/* 0761A8 7F0437B8 00075880 */ sll $t3, $a3, 2 -/* 0761AC 7F0437BC 006B4821 */ addu $t1, $v1, $t3 -/* 0761B0 7F0437C0 8D240098 */ lw $a0, 0x98($t1) -/* 0761B4 7F0437C4 5080000A */ beql $a0, $zero, .L7F0437F0 -/* 0761B8 7F0437C8 8FA70034 */ lw $a3, 0x34($sp) -/* 0761BC 7F0437CC 0C002094 */ jal sndGetPlayingState -/* 0761C0 7F0437D0 AFAB002C */ sw $t3, 0x2c($sp) -/* 0761C4 7F0437D4 10400005 */ beqz $v0, .L7F0437EC -/* 0761C8 7F0437D8 8FA7002C */ lw $a3, 0x2c($sp) -/* 0761CC 7F0437DC 8E0A006C */ lw $t2, 0x6c($s0) -/* 0761D0 7F0437E0 01476021 */ addu $t4, $t2, $a3 -/* 0761D4 7F0437E4 0C002120 */ jal sndDeactivate -/* 0761D8 7F0437E8 8D840098 */ lw $a0, 0x98($t4) -.L7F0437EC: -/* 0761DC 7F0437EC 8FA70034 */ lw $a3, 0x34($sp) -.L7F0437F0: -/* 0761E0 7F0437F0 8E0E006C */ lw $t6, 0x6c($s0) -/* 0761E4 7F0437F4 00076880 */ sll $t5, $a3, 2 -/* 0761E8 7F0437F8 01CD7821 */ addu $t7, $t6, $t5 -/* 0761EC 7F0437FC 8DF90098 */ lw $t9, 0x98($t7) -/* 0761F0 7F043800 57200039 */ bnezl $t9, .L7F0438E8 -/* 0761F4 7F043804 8FBF001C */ lw $ra, 0x1c($sp) -/* 0761F8 7F043808 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 0761FC 7F04380C AFAD002C */ sw $t5, 0x2c($sp) -/* 076200 7F043810 14400034 */ bnez $v0, .L7F0438E4 -/* 076204 7F043814 8FA7002C */ lw $a3, 0x2c($sp) -/* 076208 7F043818 8FB80030 */ lw $t8, 0x30($sp) -/* 07620C 7F04381C 8E0B006C */ lw $t3, 0x6c($s0) -/* 076210 7F043820 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 076214 7F043824 00184040 */ sll $t0, $t8, 1 -/* 076218 7F043828 03A82821 */ addu $a1, $sp, $t0 -/* 07621C 7F04382C 84A50038 */ lh $a1, 0x38($a1) -/* 076220 7F043830 01673021 */ addu $a2, $t3, $a3 -/* 076224 7F043834 24C60098 */ addiu $a2, $a2, 0x98 -/* 076228 7F043838 AFA7002C */ sw $a3, 0x2c($sp) -/* 07622C 7F04383C 0C00209A */ jal sndPlaySfx -/* 076230 7F043840 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 076234 7F043844 8FA7002C */ lw $a3, 0x2c($sp) -/* 076238 7F043848 8E09006C */ lw $t1, 0x6c($s0) -/* 07623C 7F04384C 8E050010 */ lw $a1, 0x10($s0) -/* 076240 7F043850 01275021 */ addu $t2, $t1, $a3 -/* 076244 7F043854 8D440098 */ lw $a0, 0x98($t2) -/* 076248 7F043858 0FC14F3C */ jal chrobjSndCreatePostEventDefault -/* 07624C 7F04385C 24A50008 */ addiu $a1, $a1, 8 -/* 076250 7F043860 3C0C8004 */ lui $t4, %hi(g_GlobalTimer) # $t4, 0x8004 -/* 076254 7F043864 8D8C0FFC */ lw $t4, %lo(g_GlobalTimer)($t4) -/* 076258 7F043868 8E0D006C */ lw $t5, 0x6c($s0) -/* 07625C 7F04386C 240F0001 */ li $t7, 1 -/* 076260 7F043870 ADAC00A0 */ sw $t4, 0xa0($t5) -/* 076264 7F043874 8FAE0034 */ lw $t6, 0x34($sp) -/* 076268 7F043878 8E18006C */ lw $t8, 0x6c($s0) -/* 07626C 7F04387C 01EEC823 */ subu $t9, $t7, $t6 -/* 076270 7F043880 10000018 */ b .L7F0438E4 -/* 076274 7F043884 AF1900A4 */ sw $t9, 0xa4($t8) -.L7F043888: -/* 076278 7F043888 00414024 */ and $t0, $v0, $at -.L7F04388C: -/* 07627C 7F04388C AE080064 */ sw $t0, 0x64($s0) -/* 076280 7F043890 8C640098 */ lw $a0, 0x98($v1) -/* 076284 7F043894 50800009 */ beql $a0, $zero, .L7F0438BC -/* 076288 7F043898 8E09006C */ lw $t1, 0x6c($s0) -/* 07628C 7F04389C 0C002094 */ jal sndGetPlayingState -/* 076290 7F0438A0 00000000 */ nop -/* 076294 7F0438A4 50400005 */ beql $v0, $zero, .L7F0438BC -/* 076298 7F0438A8 8E09006C */ lw $t1, 0x6c($s0) -/* 07629C 7F0438AC 8E0B006C */ lw $t3, 0x6c($s0) -/* 0762A0 7F0438B0 0C002120 */ jal sndDeactivate -/* 0762A4 7F0438B4 8D640098 */ lw $a0, 0x98($t3) -/* 0762A8 7F0438B8 8E09006C */ lw $t1, 0x6c($s0) -.L7F0438BC: -/* 0762AC 7F0438BC 8D24009C */ lw $a0, 0x9c($t1) -/* 0762B0 7F0438C0 50800009 */ beql $a0, $zero, .L7F0438E8 -/* 0762B4 7F0438C4 8FBF001C */ lw $ra, 0x1c($sp) -/* 0762B8 7F0438C8 0C002094 */ jal sndGetPlayingState -/* 0762BC 7F0438CC 00000000 */ nop -/* 0762C0 7F0438D0 50400005 */ beql $v0, $zero, .L7F0438E8 -/* 0762C4 7F0438D4 8FBF001C */ lw $ra, 0x1c($sp) -/* 0762C8 7F0438D8 8E0A006C */ lw $t2, 0x6c($s0) -/* 0762CC 7F0438DC 0C002120 */ jal sndDeactivate -/* 0762D0 7F0438E0 8D44009C */ lw $a0, 0x9c($t2) -.L7F0438E4: -/* 0762D4 7F0438E4 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0438E8: -/* 0762D8 7F0438E8 8FB00018 */ lw $s0, 0x18($sp) -/* 0762DC 7F0438EC 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0762E0 7F0438F0 03E00008 */ jr $ra -/* 0762E4 7F0438F4 00000000 */ nop -) -#endif -#endif - - void sub_GAME_7F043838(coord3d *arg0, Mtxf *arg1) { f32 sp124; @@ -4609,7 +3207,6 @@ void sub_GAME_7F043838(coord3d *arg0, Mtxf *arg1) matrix_4x4_multiply(&sp70, &sp30, arg1); } - void sub_GAME_7F0439B8(ObjectRecord* obj, coord3d* pos, StandTile* stan, coord3d* arg3) { Mtxf matrix; @@ -4659,7 +3256,7 @@ bool objEmbed(PropRecord *prop, PropRecord *parent, Model *model, ModelNode *nod matrix_4x4_copy(&obj->mtx, &mtx1); matrix_4x4_set_position(&obj->runtime_pos, &mtx1); - matrix_4x4_multiply_homogeneous(currentPlayerGetMatrix10D4(), nodemtx, &mtx2); + matrix_4x4_multiply_homogeneous(currentPlayerGetViewToWorldMtxf(), nodemtx, &mtx2); matrix_4x4_invert_affine((f32 (*)[4]) &mtx2.m, (f32 (*)[4]) &mtx3.m); matrix_4x4_multiply_homogeneous((Mtxf* ) &mtx3.m, &mtx1, &obj->embedment->matrix); @@ -4712,7 +3309,7 @@ void propExplode(PropRecord *prop, s32 /* enum EXPLOSION_DEF */ explosionType) pos.y = mtx->m[3][1]; pos.z = mtx->m[3][2]; - mtx4TransformVecInPlace(currentPlayerGetMatrix10D4(), &pos); + mtx4TransformVecInPlace(currentPlayerGetViewToWorldMtxf(), &pos); } else { @@ -4931,7 +3528,7 @@ void chrobjWeaponTick(struct PropRecord* prop) } else if (weapon->timer == 1) { - player_prop = get_curplayer_positiondata(); + player_prop = getCurrentPlayerProp(); diff_x = player_prop->pos.f[0] - prop->pos.f[0]; diff_y = player_prop->pos.f[1] - prop->pos.f[1]; @@ -5221,7 +3818,7 @@ s32 chrobjTestPointPolygonCollision(struct coord3d *point, f32 collision_radius, { temp_s0 = &polygon->points[(i+1) % edges]; - temp_f0 = sub_GAME_7F0B16C4(polygon->points[i].f[0], polygon->points[i].f[1], temp_s0->f[0], temp_s0->f[1], px, pz); + temp_f0 = stanGetSignedPointLineDistance(polygon->points[i].f[0], polygon->points[i].f[1], temp_s0->f[0], temp_s0->f[1], px, pz); if (temp_f0 < 0.0f) { @@ -5234,7 +3831,7 @@ s32 chrobjTestPointPolygonCollision(struct coord3d *point, f32 collision_radius, if ((temp_f0 < collision_radius) && ((temp_f26 < collision_radius) || (temp_f30 < collision_radius) - || sub_GAME_7F0B17E4(polygon->points[i].f[0], polygon->points[i].f[1], temp_s0->f[0], temp_s0->f[1], px, pz) + || stanPointProjectsOntoEdge(polygon->points[i].f[0], polygon->points[i].f[1], temp_s0->f[0], temp_s0->f[1], px, pz) ) ) { @@ -5279,7 +3876,7 @@ s32 sub_GAME_7F0448A8(struct PropRecord *argProp) chraiGetPropRoomIds(argProp, (s32*)&roomids); roomGetProps((s32*)&roomids); - propss = (PropRecord *)&pos_data_entry; + propss = (PropRecord *)&g_Props; for (temp_s0 = ptr_list_object_lookup_indices; *temp_s0 >= 0; temp_s0++) { @@ -5351,464 +3948,222 @@ s32 sub_GAME_7F0448A8(struct PropRecord *argProp) } +/** + * Address: 7F044B38 + */ +s32 sub_GAME_7F044B38(ObjectRecord *obj) +{ + Model *model; + PropRecord *prop; + f32 *normalzptr; + coord3d *modelpoint0; + coord3d *modelpoint1; + coord3d *modelpoint2; + coord3d *modelpoint3; + coord3d point0; + coord3d point1; + coord3d point2; + coord3d point3; + s32 result; + Mtxf mtx; + StandTile *tile; + ModelRoData_BoundingBoxRecord *bbox; + coord3d edge0; + coord3d edge1; + coord3d edge2; + coord3d edge3; + f32 cross2y; + f32 cross0y; + f32 cross1y; + f32 cross3y; + coord3d normal; + coord3d yawvec; + f32 ypos; + model = obj->model; + prop = obj->prop; + modelpoint0 = (coord3d *) model->obj->Switches[1]->Data; + modelpoint1 = (coord3d *) model->obj->Switches[2]->Data; + modelpoint2 = (coord3d *) model->obj->Switches[3]->Data; + modelpoint3 = (coord3d *) model->obj->Switches[4]->Data; + result = 1; + bbox = (ModelRoData_BoundingBoxRecord *) model->obj->Switches[6]->Data; + matrix_4x4_set_rotation_around_y(((VehichleRecord *)obj)->roty, &mtx); + matrix_scalar_multiply(model->scale, (f32 *) (&mtx)); + matrix_4x4_set_position(&obj->runtime_pos, &mtx); -#ifdef NONMATCHING -void sub_GAME_7F044B38(void) { + matrix_4x4_transform_vector(&mtx, modelpoint0, &point0); + matrix_4x4_transform_vector(&mtx, modelpoint1, &point1); + matrix_4x4_transform_vector(&mtx, modelpoint2, &point2); + matrix_4x4_transform_vector(&mtx, modelpoint3, &point3); + tile = prop->stan; + if (walkTilesBetweenPoints_NoCallback(&tile, prop->pos.x, prop->pos.z, point0.x, point0.z)) + { + point0.y = stanGetPositionYValue(tile, point0.x, point0.z); + } + else + { + result = 0; + } + + tile = prop->stan; + if (walkTilesBetweenPoints_NoCallback(&tile, prop->pos.x, prop->pos.z, point1.x, point1.z)) + { + point1.y = stanGetPositionYValue(tile, point1.x, point1.z); + } + else + { + result = 0; + } + + tile = prop->stan; + if (walkTilesBetweenPoints_NoCallback(&tile, prop->pos.x, prop->pos.z, point2.x, point2.z)) + { + point2.y = stanGetPositionYValue(tile, point2.x, point2.z); + } + else + { + result = 0; + } + + tile = prop->stan; + if (walkTilesBetweenPoints_NoCallback(&tile, prop->pos.x, prop->pos.z, point3.x, point3.z)) + { + point3.y = stanGetPositionYValue(tile, point3.x, point3.z); + } + else + { + result = 0; + } + + if (result) + { + edge0.x = point1.x - point0.x; + edge0.y = point1.y - point0.y; + edge0.z = point1.z - point0.z; + guNormalize(&edge0.x, &edge0.y, &edge0.z); + + edge1.x = point3.x - point1.x; + edge1.y = point3.y - point1.y; + edge1.z = point3.z - point1.z; + guNormalize(&edge1.x, &edge1.y, &edge1.z); + + edge2.x = point2.x - point3.x; + edge2.y = point2.y - point3.y; + edge2.z = point2.z - point3.z; + guNormalize(&edge2.x, &edge2.y, &edge2.z); + + edge3.x = point0.x - point2.x; + edge3.y = point0.y - point2.y; + edge3.z = point0.z - point2.z; + guNormalize(&edge3.x, &edge3.y, &edge3.z); + + normalzptr = &edge1.z; + + cross0y = (edge0.z * edge1.x) - ((*normalzptr) * edge0.x); + cross1y = ((*normalzptr) * edge2.x) - (edge2.z * edge1.x); + cross2y = (edge2.z * edge3.x) - (edge3.z * edge2.x); + cross3y = (edge3.z * edge0.x) - (edge0.z * edge3.x); + + if (((cross1y <= cross0y) && (cross2y <= cross0y)) && (cross3y <= cross0y)) + { + normal.x = (edge0.y * edge1.z) - (edge1.y * edge0.z); + normal.y = cross0y; + normal.z = (edge0.x * edge1.y) - (edge1.x * edge0.y); + } + else if ((cross2y <= cross1y) && (cross3y <= cross1y)) + { + normal.x = (edge1.y * edge2.z) - (edge2.y * edge1.z); + normal.y = cross1y; + normal.z = (edge1.x * edge2.y) - (edge2.x * edge1.y); + } + else if (cross3y <= cross2y) + { + normal.x = (edge2.y * edge3.z) - (edge3.y * edge2.z); + normal.y = cross2y; + normal.z = (edge2.x * edge3.y) - (edge3.x * edge2.y); + } + else + { + normal.x = (edge3.y * edge0.z) - (edge0.y * edge3.z); + normal.y = cross3y; + normal.z = (edge3.x * edge0.y) - (edge0.x * edge3.y); + } + + normalzptr = &normal.z; + + yawvec.x = sinf(((VehichleRecord *)obj)->roty); + yawvec.y = 0.0f; + yawvec.z = cosf(((VehichleRecord *)obj)->roty); + + matrix_4x4_set_identity(&obj->mtx); + + if (obj->mtx.m[0][0]) + { + // empty + } + + if (obj->mtx.m[1][1]) + { + // empty + } + + obj->mtx.m[1][0] = normal.x; + + if (obj->mtx.m[1][0]) + { + // empty + } + + obj->mtx.m[1][1] = normal.y; + + if ((&yawvec) && (&yawvec)) + { + // empty + } + + obj->mtx.m[1][2] = ((f32*)&normal)[2]; + + if (normal.x) + { + // empty + } + + obj->mtx.m[0][0] = (obj->mtx.m[1][1] * yawvec.f[2]) - (obj->mtx.m[1][2] * yawvec.f[1]); + obj->mtx.m[0][1] = (obj->mtx.m[1][2] * yawvec.f[0]) - (obj->mtx.m[1][0] * yawvec.f[2]); + obj->mtx.m[0][2] = (obj->mtx.m[1][0] * (f32)(yawvec.y)) - (obj->mtx.m[1][1] * yawvec.f[0]); + + obj->mtx.m[2][0] = (((f32 *)(&obj->mtx))[1] * ((f32 *)(&obj->mtx))[6]) - (((f32 *)(&obj->mtx))[2] * obj->mtx.m[1][1]); + obj->mtx.m[2][1] = (((f32 *)(&obj->mtx))[2] * ((f32 *)(&obj->mtx))[4]) - (((f32 *)(&obj->mtx))[0] * ((f32 *)(&obj->mtx))[6]); + obj->mtx.m[2][2] = (((f32 *)(&obj->mtx))[0] * obj->mtx.m[1][1]) - (((f32 *)(&obj->mtx))[1] * ((f32 *)(&obj->mtx))[4]); + + matrix_scalar_multiply(model->scale, (f32 *) (&obj->mtx)); + matrix_4x4_transform_vector(&obj->mtx, modelpoint0, &point1); + + ypos = (point0.y - (chrpropBBOXGetYmin(bbox) * model->scale)) - point1.y; + prop->pos.y = ypos; + obj->runtime_pos.y = ypos; + } + else + { + matrix_4x4_set_rotation_around_y(((VehichleRecord *)obj)->roty, &obj->mtx); + matrix_scalar_multiply(model->scale, (f32 *) (&obj->mtx)); + + ypos = stanGetPositionYValue(prop->stan, prop->pos.x, prop->pos.z) - ((chrpropBBOXGetYmin(bbox) + modelpoint0->f[1]) * model->scale); + + prop->pos.y = ypos; + obj->runtime_pos.y = ypos; + } + + return result; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F044B38 -/* 079668 7F044B38 27BDFEA8 */ addiu $sp, $sp, -0x158 -/* 07966C 7F044B3C AFBF0024 */ sw $ra, 0x24($sp) -/* 079670 7F044B40 AFB10020 */ sw $s1, 0x20($sp) -/* 079674 7F044B44 AFB0001C */ sw $s0, 0x1c($sp) -/* 079678 7F044B48 8C830014 */ lw $v1, 0x14($a0) -/* 07967C 7F044B4C 8C910010 */ lw $s1, 0x10($a0) -/* 079680 7F044B50 24180001 */ li $t8, 1 -/* 079684 7F044B54 8C790008 */ lw $t9, 8($v1) -/* 079688 7F044B58 00808025 */ move $s0, $a0 -/* 07968C 7F044B5C 27A500C8 */ addiu $a1, $sp, 0xc8 -/* 079690 7F044B60 8F220008 */ lw $v0, 8($t9) -/* 079694 7F044B64 8C480004 */ lw $t0, 4($v0) -/* 079698 7F044B68 8D090004 */ lw $t1, 4($t0) -/* 07969C 7F044B6C AFA90148 */ sw $t1, 0x148($sp) -/* 0796A0 7F044B70 8C4A0008 */ lw $t2, 8($v0) -/* 0796A4 7F044B74 8D4B0004 */ lw $t3, 4($t2) -/* 0796A8 7F044B78 AFAB0144 */ sw $t3, 0x144($sp) -/* 0796AC 7F044B7C 8C4C000C */ lw $t4, 0xc($v0) -/* 0796B0 7F044B80 8D8D0004 */ lw $t5, 4($t4) -/* 0796B4 7F044B84 AFAD0140 */ sw $t5, 0x140($sp) -/* 0796B8 7F044B88 8C4E0010 */ lw $t6, 0x10($v0) -/* 0796BC 7F044B8C 8DCF0004 */ lw $t7, 4($t6) -/* 0796C0 7F044B90 AFB80108 */ sw $t8, 0x108($sp) -/* 0796C4 7F044B94 AFAF013C */ sw $t7, 0x13c($sp) -/* 0796C8 7F044B98 8C590018 */ lw $t9, 0x18($v0) -/* 0796CC 7F044B9C 8F280004 */ lw $t0, 4($t9) -/* 0796D0 7F044BA0 AFA800C0 */ sw $t0, 0xc0($sp) -/* 0796D4 7F044BA4 C48C00A0 */ lwc1 $f12, 0xa0($a0) -/* 0796D8 7F044BA8 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 0796DC 7F044BAC AFA30154 */ sw $v1, 0x154($sp) -/* 0796E0 7F044BB0 8FA90154 */ lw $t1, 0x154($sp) -/* 0796E4 7F044BB4 27A500C8 */ addiu $a1, $sp, 0xc8 -/* 0796E8 7F044BB8 0FC1629F */ jal matrix_scalar_multiply -/* 0796EC 7F044BBC C52C0014 */ lwc1 $f12, 0x14($t1) -/* 0796F0 7F044BC0 26040058 */ addiu $a0, $s0, 0x58 -/* 0796F4 7F044BC4 0FC16266 */ jal matrix_4x4_set_position -/* 0796F8 7F044BC8 27A500C8 */ addiu $a1, $sp, 0xc8 -/* 0796FC 7F044BCC 27A400C8 */ addiu $a0, $sp, 0xc8 -/* 079700 7F044BD0 8FA50148 */ lw $a1, 0x148($sp) -/* 079704 7F044BD4 0FC16106 */ jal matrix_4x4_transform_vector -/* 079708 7F044BD8 27A60130 */ addiu $a2, $sp, 0x130 -/* 07970C 7F044BDC 27A400C8 */ addiu $a0, $sp, 0xc8 -/* 079710 7F044BE0 8FA50144 */ lw $a1, 0x144($sp) -/* 079714 7F044BE4 0FC16106 */ jal matrix_4x4_transform_vector -/* 079718 7F044BE8 27A60124 */ addiu $a2, $sp, 0x124 -/* 07971C 7F044BEC 27A400C8 */ addiu $a0, $sp, 0xc8 -/* 079720 7F044BF0 8FA50140 */ lw $a1, 0x140($sp) -/* 079724 7F044BF4 0FC16106 */ jal matrix_4x4_transform_vector -/* 079728 7F044BF8 27A60118 */ addiu $a2, $sp, 0x118 -/* 07972C 7F044BFC 27A400C8 */ addiu $a0, $sp, 0xc8 -/* 079730 7F044C00 8FA5013C */ lw $a1, 0x13c($sp) -/* 079734 7F044C04 0FC16106 */ jal matrix_4x4_transform_vector -/* 079738 7F044C08 27A6010C */ addiu $a2, $sp, 0x10c -/* 07973C 7F044C0C 8E2A0014 */ lw $t2, 0x14($s1) -/* 079740 7F044C10 C7A80138 */ lwc1 $f8, 0x138($sp) -/* 079744 7F044C14 27A400C4 */ addiu $a0, $sp, 0xc4 -/* 079748 7F044C18 AFAA00C4 */ sw $t2, 0xc4($sp) -/* 07974C 7F044C1C 8E260010 */ lw $a2, 0x10($s1) -/* 079750 7F044C20 8E250008 */ lw $a1, 8($s1) -/* 079754 7F044C24 8FA70130 */ lw $a3, 0x130($sp) -/* 079758 7F044C28 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 07975C 7F044C2C E7A80010 */ swc1 $f8, 0x10($sp) -/* 079760 7F044C30 10400006 */ beqz $v0, .L7F044C4C -/* 079764 7F044C34 8FA400C4 */ lw $a0, 0xc4($sp) -/* 079768 7F044C38 8FA50130 */ lw $a1, 0x130($sp) -/* 07976C 7F044C3C 0FC2CA5C */ jal stanGetPositionYValue -/* 079770 7F044C40 8FA60138 */ lw $a2, 0x138($sp) -/* 079774 7F044C44 10000002 */ b .L7F044C50 -/* 079778 7F044C48 E7A00134 */ swc1 $f0, 0x134($sp) -.L7F044C4C: -/* 07977C 7F044C4C AFA00108 */ sw $zero, 0x108($sp) -.L7F044C50: -/* 079780 7F044C50 8E2B0014 */ lw $t3, 0x14($s1) -/* 079784 7F044C54 C7A6012C */ lwc1 $f6, 0x12c($sp) -/* 079788 7F044C58 27A400C4 */ addiu $a0, $sp, 0xc4 -/* 07978C 7F044C5C AFAB00C4 */ sw $t3, 0xc4($sp) -/* 079790 7F044C60 8E260010 */ lw $a2, 0x10($s1) -/* 079794 7F044C64 8E250008 */ lw $a1, 8($s1) -/* 079798 7F044C68 8FA70124 */ lw $a3, 0x124($sp) -/* 07979C 7F044C6C 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 0797A0 7F044C70 E7A60010 */ swc1 $f6, 0x10($sp) -/* 0797A4 7F044C74 10400006 */ beqz $v0, .L7F044C90 -/* 0797A8 7F044C78 8FA400C4 */ lw $a0, 0xc4($sp) -/* 0797AC 7F044C7C 8FA50124 */ lw $a1, 0x124($sp) -/* 0797B0 7F044C80 0FC2CA5C */ jal stanGetPositionYValue -/* 0797B4 7F044C84 8FA6012C */ lw $a2, 0x12c($sp) -/* 0797B8 7F044C88 10000002 */ b .L7F044C94 -/* 0797BC 7F044C8C E7A00128 */ swc1 $f0, 0x128($sp) -.L7F044C90: -/* 0797C0 7F044C90 AFA00108 */ sw $zero, 0x108($sp) -.L7F044C94: -/* 0797C4 7F044C94 8E2C0014 */ lw $t4, 0x14($s1) -/* 0797C8 7F044C98 C7A40120 */ lwc1 $f4, 0x120($sp) -/* 0797CC 7F044C9C 27A400C4 */ addiu $a0, $sp, 0xc4 -/* 0797D0 7F044CA0 AFAC00C4 */ sw $t4, 0xc4($sp) -/* 0797D4 7F044CA4 8E260010 */ lw $a2, 0x10($s1) -/* 0797D8 7F044CA8 8E250008 */ lw $a1, 8($s1) -/* 0797DC 7F044CAC 8FA70118 */ lw $a3, 0x118($sp) -/* 0797E0 7F044CB0 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 0797E4 7F044CB4 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0797E8 7F044CB8 10400006 */ beqz $v0, .L7F044CD4 -/* 0797EC 7F044CBC 8FA400C4 */ lw $a0, 0xc4($sp) -/* 0797F0 7F044CC0 8FA50118 */ lw $a1, 0x118($sp) -/* 0797F4 7F044CC4 0FC2CA5C */ jal stanGetPositionYValue -/* 0797F8 7F044CC8 8FA60120 */ lw $a2, 0x120($sp) -/* 0797FC 7F044CCC 10000002 */ b .L7F044CD8 -/* 079800 7F044CD0 E7A0011C */ swc1 $f0, 0x11c($sp) -.L7F044CD4: -/* 079804 7F044CD4 AFA00108 */ sw $zero, 0x108($sp) -.L7F044CD8: -/* 079808 7F044CD8 8E2D0014 */ lw $t5, 0x14($s1) -/* 07980C 7F044CDC C7AA0114 */ lwc1 $f10, 0x114($sp) -/* 079810 7F044CE0 27A400C4 */ addiu $a0, $sp, 0xc4 -/* 079814 7F044CE4 AFAD00C4 */ sw $t5, 0xc4($sp) -/* 079818 7F044CE8 8E260010 */ lw $a2, 0x10($s1) -/* 07981C 7F044CEC 8E250008 */ lw $a1, 8($s1) -/* 079820 7F044CF0 8FA7010C */ lw $a3, 0x10c($sp) -/* 079824 7F044CF4 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 079828 7F044CF8 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07982C 7F044CFC 10400006 */ beqz $v0, .L7F044D18 -/* 079830 7F044D00 8FA400C4 */ lw $a0, 0xc4($sp) -/* 079834 7F044D04 8FA5010C */ lw $a1, 0x10c($sp) -/* 079838 7F044D08 0FC2CA5C */ jal stanGetPositionYValue -/* 07983C 7F044D0C 8FA60114 */ lw $a2, 0x114($sp) -/* 079840 7F044D10 10000002 */ b .L7F044D1C -/* 079844 7F044D14 E7A00110 */ swc1 $f0, 0x110($sp) -.L7F044D18: -/* 079848 7F044D18 AFA00108 */ sw $zero, 0x108($sp) -.L7F044D1C: -/* 07984C 7F044D1C 8FAE0108 */ lw $t6, 0x108($sp) -/* 079850 7F044D20 26040018 */ addiu $a0, $s0, 0x18 -/* 079854 7F044D24 27A600BC */ addiu $a2, $sp, 0xbc -/* 079858 7F044D28 11C0010E */ beqz $t6, .L7F045164 -/* 07985C 7F044D2C 00802825 */ move $a1, $a0 -/* 079860 7F044D30 C7B20124 */ lwc1 $f18, 0x124($sp) -/* 079864 7F044D34 C7B00130 */ lwc1 $f16, 0x130($sp) -/* 079868 7F044D38 C7AE0128 */ lwc1 $f14, 0x128($sp) -/* 07986C 7F044D3C C7AC0134 */ lwc1 $f12, 0x134($sp) -/* 079870 7F044D40 46109401 */ sub.s $f16, $f18, $f16 -/* 079874 7F044D44 C7B2012C */ lwc1 $f18, 0x12c($sp) -/* 079878 7F044D48 C7AA0138 */ lwc1 $f10, 0x138($sp) -/* 07987C 7F044D4C 460C7301 */ sub.s $f12, $f14, $f12 -/* 079880 7F044D50 E7B000B4 */ swc1 $f16, 0xb4($sp) -/* 079884 7F044D54 27A400B4 */ addiu $a0, $sp, 0xb4 -/* 079888 7F044D58 460A9281 */ sub.s $f10, $f18, $f10 -/* 07988C 7F044D5C E7AC00B8 */ swc1 $f12, 0xb8($sp) -/* 079890 7F044D60 27A500B8 */ addiu $a1, $sp, 0xb8 -/* 079894 7F044D64 0C007DD4 */ jal guNormalize -/* 079898 7F044D68 E7AA00BC */ swc1 $f10, 0xbc($sp) -/* 07989C 7F044D6C C7B2010C */ lwc1 $f18, 0x10c($sp) -/* 0798A0 7F044D70 C7B00124 */ lwc1 $f16, 0x124($sp) -/* 0798A4 7F044D74 C7AE0110 */ lwc1 $f14, 0x110($sp) -/* 0798A8 7F044D78 C7AC0128 */ lwc1 $f12, 0x128($sp) -/* 0798AC 7F044D7C 46109401 */ sub.s $f16, $f18, $f16 -/* 0798B0 7F044D80 C7B20114 */ lwc1 $f18, 0x114($sp) -/* 0798B4 7F044D84 C7AA012C */ lwc1 $f10, 0x12c($sp) -/* 0798B8 7F044D88 460C7301 */ sub.s $f12, $f14, $f12 -/* 0798BC 7F044D8C E7B000A8 */ swc1 $f16, 0xa8($sp) -/* 0798C0 7F044D90 27A400A8 */ addiu $a0, $sp, 0xa8 -/* 0798C4 7F044D94 460A9281 */ sub.s $f10, $f18, $f10 -/* 0798C8 7F044D98 E7AC00AC */ swc1 $f12, 0xac($sp) -/* 0798CC 7F044D9C 27A500AC */ addiu $a1, $sp, 0xac -/* 0798D0 7F044DA0 27A600B0 */ addiu $a2, $sp, 0xb0 -/* 0798D4 7F044DA4 0C007DD4 */ jal guNormalize -/* 0798D8 7F044DA8 E7AA00B0 */ swc1 $f10, 0xb0($sp) -/* 0798DC 7F044DAC C7B20118 */ lwc1 $f18, 0x118($sp) -/* 0798E0 7F044DB0 C7B0010C */ lwc1 $f16, 0x10c($sp) -/* 0798E4 7F044DB4 C7AE011C */ lwc1 $f14, 0x11c($sp) -/* 0798E8 7F044DB8 C7AC0110 */ lwc1 $f12, 0x110($sp) -/* 0798EC 7F044DBC 46109401 */ sub.s $f16, $f18, $f16 -/* 0798F0 7F044DC0 C7B20120 */ lwc1 $f18, 0x120($sp) -/* 0798F4 7F044DC4 C7AA0114 */ lwc1 $f10, 0x114($sp) -/* 0798F8 7F044DC8 460C7301 */ sub.s $f12, $f14, $f12 -/* 0798FC 7F044DCC E7B0009C */ swc1 $f16, 0x9c($sp) -/* 079900 7F044DD0 27A4009C */ addiu $a0, $sp, 0x9c -/* 079904 7F044DD4 460A9281 */ sub.s $f10, $f18, $f10 -/* 079908 7F044DD8 E7AC00A0 */ swc1 $f12, 0xa0($sp) -/* 07990C 7F044DDC 27A500A0 */ addiu $a1, $sp, 0xa0 -/* 079910 7F044DE0 27A600A4 */ addiu $a2, $sp, 0xa4 -/* 079914 7F044DE4 0C007DD4 */ jal guNormalize -/* 079918 7F044DE8 E7AA00A4 */ swc1 $f10, 0xa4($sp) -/* 07991C 7F044DEC C7B20130 */ lwc1 $f18, 0x130($sp) -/* 079920 7F044DF0 C7B00118 */ lwc1 $f16, 0x118($sp) -/* 079924 7F044DF4 C7AE0134 */ lwc1 $f14, 0x134($sp) -/* 079928 7F044DF8 C7AC011C */ lwc1 $f12, 0x11c($sp) -/* 07992C 7F044DFC 46109401 */ sub.s $f16, $f18, $f16 -/* 079930 7F044E00 C7B20138 */ lwc1 $f18, 0x138($sp) -/* 079934 7F044E04 C7AA0120 */ lwc1 $f10, 0x120($sp) -/* 079938 7F044E08 460C7301 */ sub.s $f12, $f14, $f12 -/* 07993C 7F044E0C E7B00090 */ swc1 $f16, 0x90($sp) -/* 079940 7F044E10 27A40090 */ addiu $a0, $sp, 0x90 -/* 079944 7F044E14 460A9281 */ sub.s $f10, $f18, $f10 -/* 079948 7F044E18 E7AC0094 */ swc1 $f12, 0x94($sp) -/* 07994C 7F044E1C 27A50094 */ addiu $a1, $sp, 0x94 -/* 079950 7F044E20 27A60098 */ addiu $a2, $sp, 0x98 -/* 079954 7F044E24 0C007DD4 */ jal guNormalize -/* 079958 7F044E28 E7AA0098 */ swc1 $f10, 0x98($sp) -/* 07995C 7F044E2C C7A800BC */ lwc1 $f8, 0xbc($sp) -/* 079960 7F044E30 C7A600A8 */ lwc1 $f6, 0xa8($sp) -/* 079964 7F044E34 C7AA00B0 */ lwc1 $f10, 0xb0($sp) -/* 079968 7F044E38 E7A80028 */ swc1 $f8, 0x28($sp) -/* 07996C 7F044E3C 46064102 */ mul.s $f4, $f8, $f6 -/* 079970 7F044E40 C7A800B4 */ lwc1 $f8, 0xb4($sp) -/* 079974 7F044E44 E7A6002C */ swc1 $f6, 0x2c($sp) -/* 079978 7F044E48 E7AA0034 */ swc1 $f10, 0x34($sp) -/* 07997C 7F044E4C 46085182 */ mul.s $f6, $f10, $f8 -/* 079980 7F044E50 E7A80030 */ swc1 $f8, 0x30($sp) -/* 079984 7F044E54 C7A800A4 */ lwc1 $f8, 0xa4($sp) -/* 079988 7F044E58 46062001 */ sub.s $f0, $f4, $f6 -/* 07998C 7F044E5C C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 079990 7F044E60 46045182 */ mul.s $f6, $f10, $f4 -/* 079994 7F044E64 C7AA002C */ lwc1 $f10, 0x2c($sp) -/* 079998 7F044E68 E7A4002C */ swc1 $f4, 0x2c($sp) -/* 07999C 7F044E6C 460A4102 */ mul.s $f4, $f8, $f10 -/* 0799A0 7F044E70 46043381 */ sub.s $f14, $f6, $f4 -/* 0799A4 7F044E74 C7A60090 */ lwc1 $f6, 0x90($sp) -/* 0799A8 7F044E78 4600703E */ c.le.s $f14, $f0 -/* 0799AC 7F044E7C 00000000 */ nop -/* 0799B0 7F044E80 45020023 */ bc1fl .L7F044F10 -/* 0799B4 7F044E84 C7A600A4 */ lwc1 $f6, 0xa4($sp) -/* 0799B8 7F044E88 46064102 */ mul.s $f4, $f8, $f6 -/* 0799BC 7F044E8C E7AA0038 */ swc1 $f10, 0x38($sp) -/* 0799C0 7F044E90 C7AA002C */ lwc1 $f10, 0x2c($sp) -/* 0799C4 7F044E94 C7A80098 */ lwc1 $f8, 0x98($sp) -/* 0799C8 7F044E98 460A4282 */ mul.s $f10, $f8, $f10 -/* 0799CC 7F044E9C 460A2101 */ sub.s $f4, $f4, $f10 -/* 0799D0 7F044EA0 C7AA0030 */ lwc1 $f10, 0x30($sp) -/* 0799D4 7F044EA4 4600203E */ c.le.s $f4, $f0 -/* 0799D8 7F044EA8 00000000 */ nop -/* 0799DC 7F044EAC 45020018 */ bc1fl .L7F044F10 -/* 0799E0 7F044EB0 C7A600A4 */ lwc1 $f6, 0xa4($sp) -/* 0799E4 7F044EB4 460A4102 */ mul.s $f4, $f8, $f10 -/* 0799E8 7F044EB8 C7A80028 */ lwc1 $f8, 0x28($sp) -/* 0799EC 7F044EBC C7AC00B8 */ lwc1 $f12, 0xb8($sp) -/* 0799F0 7F044EC0 46064182 */ mul.s $f6, $f8, $f6 -/* 0799F4 7F044EC4 46062101 */ sub.s $f4, $f4, $f6 -/* 0799F8 7F044EC8 C7A60034 */ lwc1 $f6, 0x34($sp) -/* 0799FC 7F044ECC 4600203E */ c.le.s $f4, $f0 -/* 079A00 7F044ED0 00000000 */ nop -/* 079A04 7F044ED4 4502000E */ bc1fl .L7F044F10 -/* 079A08 7F044ED8 C7A600A4 */ lwc1 $f6, 0xa4($sp) -/* 079A0C 7F044EDC 46066102 */ mul.s $f4, $f12, $f6 -/* 079A10 7F044EE0 C7A200AC */ lwc1 $f2, 0xac($sp) -/* 079A14 7F044EE4 E7A00078 */ swc1 $f0, 0x78($sp) -/* 079A18 7F044EE8 46081182 */ mul.s $f6, $f2, $f8 -/* 079A1C 7F044EEC 46062201 */ sub.s $f8, $f4, $f6 -/* 079A20 7F044EF0 46025102 */ mul.s $f4, $f10, $f2 -/* 079A24 7F044EF4 C7A60038 */ lwc1 $f6, 0x38($sp) -/* 079A28 7F044EF8 E7A80074 */ swc1 $f8, 0x74($sp) -/* 079A2C 7F044EFC 460C3202 */ mul.s $f8, $f6, $f12 -/* 079A30 7F044F00 46082281 */ sub.s $f10, $f4, $f8 -/* 079A34 7F044F04 10000045 */ b .L7F04501C -/* 079A38 7F044F08 E7AA007C */ swc1 $f10, 0x7c($sp) -/* 079A3C 7F044F0C C7A600A4 */ lwc1 $f6, 0xa4($sp) -.L7F044F10: -/* 079A40 7F044F10 C7A40090 */ lwc1 $f4, 0x90($sp) -/* 079A44 7F044F14 C7AA0098 */ lwc1 $f10, 0x98($sp) -/* 079A48 7F044F18 E7A60038 */ swc1 $f6, 0x38($sp) -/* 079A4C 7F044F1C 46043202 */ mul.s $f8, $f6, $f4 -/* 079A50 7F044F20 C7A6009C */ lwc1 $f6, 0x9c($sp) -/* 079A54 7F044F24 E7A40034 */ swc1 $f4, 0x34($sp) -/* 079A58 7F044F28 46065102 */ mul.s $f4, $f10, $f6 -/* 079A5C 7F044F2C 46044001 */ sub.s $f0, $f8, $f4 -/* 079A60 7F044F30 C7A800B4 */ lwc1 $f8, 0xb4($sp) -/* 079A64 7F044F34 46085102 */ mul.s $f4, $f10, $f8 -/* 079A68 7F044F38 C7A80034 */ lwc1 $f8, 0x34($sp) -/* 079A6C 7F044F3C C7AA00BC */ lwc1 $f10, 0xbc($sp) -/* 079A70 7F044F40 460E003E */ c.le.s $f0, $f14 -/* 079A74 7F044F44 46085282 */ mul.s $f10, $f10, $f8 -/* 079A78 7F044F48 45000013 */ bc1f .L7F044F98 -/* 079A7C 7F044F4C 460A2081 */ sub.s $f2, $f4, $f10 -/* 079A80 7F044F50 460E103E */ c.le.s $f2, $f14 -/* 079A84 7F044F54 C7A80038 */ lwc1 $f8, 0x38($sp) -/* 079A88 7F044F58 45020010 */ bc1fl .L7F044F9C -/* 079A8C 7F044F5C 4600103E */ c.le.s $f2, $f0 -/* 079A90 7F044F60 C7A200AC */ lwc1 $f2, 0xac($sp) -/* 079A94 7F044F64 C7AC00A0 */ lwc1 $f12, 0xa0($sp) -/* 079A98 7F044F68 C7AA00B0 */ lwc1 $f10, 0xb0($sp) -/* 079A9C 7F044F6C 46081102 */ mul.s $f4, $f2, $f8 -/* 079AA0 7F044F70 E7AE0078 */ swc1 $f14, 0x78($sp) -/* 079AA4 7F044F74 460A6202 */ mul.s $f8, $f12, $f10 -/* 079AA8 7F044F78 46082281 */ sub.s $f10, $f4, $f8 -/* 079AAC 7F044F7C C7A400A8 */ lwc1 $f4, 0xa8($sp) -/* 079AB0 7F044F80 460C2202 */ mul.s $f8, $f4, $f12 -/* 079AB4 7F044F84 E7AA0074 */ swc1 $f10, 0x74($sp) -/* 079AB8 7F044F88 46023282 */ mul.s $f10, $f6, $f2 -/* 079ABC 7F044F8C 460A4101 */ sub.s $f4, $f8, $f10 -/* 079AC0 7F044F90 10000022 */ b .L7F04501C -/* 079AC4 7F044F94 E7A4007C */ swc1 $f4, 0x7c($sp) -.L7F044F98: -/* 079AC8 7F044F98 4600103E */ c.le.s $f2, $f0 -.L7F044F9C: -/* 079ACC 7F044F9C C7AC00A0 */ lwc1 $f12, 0xa0($sp) -/* 079AD0 7F044FA0 C7AE0094 */ lwc1 $f14, 0x94($sp) -/* 079AD4 7F044FA4 C7A400BC */ lwc1 $f4, 0xbc($sp) -/* 079AD8 7F044FA8 45000010 */ bc1f .L7F044FEC -/* 079ADC 7F044FAC C7A60098 */ lwc1 $f6, 0x98($sp) -/* 079AE0 7F044FB0 C7A60098 */ lwc1 $f6, 0x98($sp) -/* 079AE4 7F044FB4 C7AE0094 */ lwc1 $f14, 0x94($sp) -/* 079AE8 7F044FB8 C7AA00A4 */ lwc1 $f10, 0xa4($sp) -/* 079AEC 7F044FBC 46066202 */ mul.s $f8, $f12, $f6 -/* 079AF0 7F044FC0 E7A00078 */ swc1 $f0, 0x78($sp) -/* 079AF4 7F044FC4 460A7102 */ mul.s $f4, $f14, $f10 -/* 079AF8 7F044FC8 C7AA009C */ lwc1 $f10, 0x9c($sp) -/* 079AFC 7F044FCC 46044181 */ sub.s $f6, $f8, $f4 -/* 079B00 7F044FD0 460E5202 */ mul.s $f8, $f10, $f14 -/* 079B04 7F044FD4 C7A40090 */ lwc1 $f4, 0x90($sp) -/* 079B08 7F044FD8 E7A60074 */ swc1 $f6, 0x74($sp) -/* 079B0C 7F044FDC 460C2182 */ mul.s $f6, $f4, $f12 -/* 079B10 7F044FE0 46064281 */ sub.s $f10, $f8, $f6 -/* 079B14 7F044FE4 1000000D */ b .L7F04501C -/* 079B18 7F044FE8 E7AA007C */ swc1 $f10, 0x7c($sp) -.L7F044FEC: -/* 079B1C 7F044FEC 46047202 */ mul.s $f8, $f14, $f4 -/* 079B20 7F044FF0 C7AC00B8 */ lwc1 $f12, 0xb8($sp) -/* 079B24 7F044FF4 E7A20078 */ swc1 $f2, 0x78($sp) -/* 079B28 7F044FF8 46066282 */ mul.s $f10, $f12, $f6 -/* 079B2C 7F044FFC C7A60090 */ lwc1 $f6, 0x90($sp) -/* 079B30 7F045000 460A4101 */ sub.s $f4, $f8, $f10 -/* 079B34 7F045004 460C3202 */ mul.s $f8, $f6, $f12 -/* 079B38 7F045008 C7AA00B4 */ lwc1 $f10, 0xb4($sp) -/* 079B3C 7F04500C E7A40074 */ swc1 $f4, 0x74($sp) -/* 079B40 7F045010 460E5102 */ mul.s $f4, $f10, $f14 -/* 079B44 7F045014 46044181 */ sub.s $f6, $f8, $f4 -/* 079B48 7F045018 E7A6007C */ swc1 $f6, 0x7c($sp) -.L7F04501C: -/* 079B4C 7F04501C 0FC15FAB */ jal sinf -/* 079B50 7F045020 C60C00A0 */ lwc1 $f12, 0xa0($s0) -/* 079B54 7F045024 44805000 */ mtc1 $zero, $f10 -/* 079B58 7F045028 E7A00068 */ swc1 $f0, 0x68($sp) -/* 079B5C 7F04502C E7AA006C */ swc1 $f10, 0x6c($sp) -/* 079B60 7F045030 0FC15FA8 */ jal cosf -/* 079B64 7F045034 C60C00A0 */ lwc1 $f12, 0xa0($s0) -/* 079B68 7F045038 26040018 */ addiu $a0, $s0, 0x18 -/* 079B6C 7F04503C E7A00070 */ swc1 $f0, 0x70($sp) -/* 079B70 7F045040 0FC15FF4 */ jal matrix_4x4_set_identity -/* 079B74 7F045044 AFA40058 */ sw $a0, 0x58($sp) -/* 079B78 7F045048 C7A80074 */ lwc1 $f8, 0x74($sp) -/* 079B7C 7F04504C 8FA50058 */ lw $a1, 0x58($sp) -/* 079B80 7F045050 E6080028 */ swc1 $f8, 0x28($s0) -/* 079B84 7F045054 C7A40078 */ lwc1 $f4, 0x78($sp) -/* 079B88 7F045058 C6100028 */ lwc1 $f16, 0x28($s0) -/* 079B8C 7F04505C E604002C */ swc1 $f4, 0x2c($s0) -/* 079B90 7F045060 C7A6007C */ lwc1 $f6, 0x7c($sp) -/* 079B94 7F045064 C60E002C */ lwc1 $f14, 0x2c($s0) -/* 079B98 7F045068 E6060030 */ swc1 $f6, 0x30($s0) -/* 079B9C 7F04506C C7AA0070 */ lwc1 $f10, 0x70($sp) -/* 079BA0 7F045070 C7A4006C */ lwc1 $f4, 0x6c($sp) -/* 079BA4 7F045074 C6000030 */ lwc1 $f0, 0x30($s0) -/* 079BA8 7F045078 460A7202 */ mul.s $f8, $f14, $f10 -/* 079BAC 7F04507C 00000000 */ nop -/* 079BB0 7F045080 46002182 */ mul.s $f6, $f4, $f0 -/* 079BB4 7F045084 46064281 */ sub.s $f10, $f8, $f6 -/* 079BB8 7F045088 E60A0018 */ swc1 $f10, 0x18($s0) -/* 079BBC 7F04508C C7A40068 */ lwc1 $f4, 0x68($sp) -/* 079BC0 7F045090 C7A60070 */ lwc1 $f6, 0x70($sp) -/* 079BC4 7F045094 46040202 */ mul.s $f8, $f0, $f4 -/* 079BC8 7F045098 00000000 */ nop -/* 079BCC 7F04509C 46103282 */ mul.s $f10, $f6, $f16 -/* 079BD0 7F0450A0 460A4101 */ sub.s $f4, $f8, $f10 -/* 079BD4 7F0450A4 E604001C */ swc1 $f4, 0x1c($s0) -/* 079BD8 7F0450A8 C7A6006C */ lwc1 $f6, 0x6c($sp) -/* 079BDC 7F0450AC C7AA0068 */ lwc1 $f10, 0x68($sp) -/* 079BE0 7F0450B0 46068202 */ mul.s $f8, $f16, $f6 -/* 079BE4 7F0450B4 00000000 */ nop -/* 079BE8 7F0450B8 460E5102 */ mul.s $f4, $f10, $f14 -/* 079BEC 7F0450BC C60A001C */ lwc1 $f10, 0x1c($s0) -/* 079BF0 7F0450C0 46044181 */ sub.s $f6, $f8, $f4 -/* 079BF4 7F0450C4 E6060020 */ swc1 $f6, 0x20($s0) -/* 079BF8 7F0450C8 E7AA0048 */ swc1 $f10, 0x48($sp) -/* 079BFC 7F0450CC C7A80048 */ lwc1 $f8, 0x48($sp) -/* 079C00 7F0450D0 C6020020 */ lwc1 $f2, 0x20($s0) -/* 079C04 7F0450D4 C6120018 */ lwc1 $f18, 0x18($s0) -/* 079C08 7F0450D8 46004102 */ mul.s $f4, $f8, $f0 -/* 079C0C 7F0450DC 00000000 */ nop -/* 079C10 7F0450E0 46027182 */ mul.s $f6, $f14, $f2 -/* 079C14 7F0450E4 46062281 */ sub.s $f10, $f4, $f6 -/* 079C18 7F0450E8 46101202 */ mul.s $f8, $f2, $f16 -/* 079C1C 7F0450EC 00000000 */ nop -/* 079C20 7F0450F0 46120102 */ mul.s $f4, $f0, $f18 -/* 079C24 7F0450F4 E60A0038 */ swc1 $f10, 0x38($s0) -/* 079C28 7F0450F8 460E9282 */ mul.s $f10, $f18, $f14 -/* 079C2C 7F0450FC 46044181 */ sub.s $f6, $f8, $f4 -/* 079C30 7F045100 E606003C */ swc1 $f6, 0x3c($s0) -/* 079C34 7F045104 C7A80048 */ lwc1 $f8, 0x48($sp) -/* 079C38 7F045108 46088102 */ mul.s $f4, $f16, $f8 -/* 079C3C 7F04510C 46045181 */ sub.s $f6, $f10, $f4 -/* 079C40 7F045110 E6060040 */ swc1 $f6, 0x40($s0) -/* 079C44 7F045114 8FAF0154 */ lw $t7, 0x154($sp) -/* 079C48 7F045118 C5EC0014 */ lwc1 $f12, 0x14($t7) -/* 079C4C 7F04511C 0FC1629F */ jal matrix_scalar_multiply -/* 079C50 7F045120 AFA50058 */ sw $a1, 0x58($sp) -/* 079C54 7F045124 8FA40058 */ lw $a0, 0x58($sp) -/* 079C58 7F045128 8FA50148 */ lw $a1, 0x148($sp) -/* 079C5C 7F04512C 0FC16106 */ jal matrix_4x4_transform_vector -/* 079C60 7F045130 27A60124 */ addiu $a2, $sp, 0x124 -/* 079C64 7F045134 0FC0FA19 */ jal chrpropBBOXGetYmin -/* 079C68 7F045138 8FA400C0 */ lw $a0, 0xc0($sp) -/* 079C6C 7F04513C 8FB80154 */ lw $t8, 0x154($sp) -/* 079C70 7F045140 C7A80134 */ lwc1 $f8, 0x134($sp) -/* 079C74 7F045144 C70A0014 */ lwc1 $f10, 0x14($t8) -/* 079C78 7F045148 460A0102 */ mul.s $f4, $f0, $f10 -/* 079C7C 7F04514C C7AA0128 */ lwc1 $f10, 0x128($sp) -/* 079C80 7F045150 46044181 */ sub.s $f6, $f8, $f4 -/* 079C84 7F045154 460A3081 */ sub.s $f2, $f6, $f10 -/* 079C88 7F045158 E622000C */ swc1 $f2, 0xc($s1) -/* 079C8C 7F04515C 10000019 */ b .L7F0451C4 -/* 079C90 7F045160 E602005C */ swc1 $f2, 0x5c($s0) -.L7F045164: -/* 079C94 7F045164 C60C00A0 */ lwc1 $f12, 0xa0($s0) -/* 079C98 7F045168 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 079C9C 7F04516C AFA40058 */ sw $a0, 0x58($sp) -/* 079CA0 7F045170 8FB90154 */ lw $t9, 0x154($sp) -/* 079CA4 7F045174 8FA50058 */ lw $a1, 0x58($sp) -/* 079CA8 7F045178 0FC1629F */ jal matrix_scalar_multiply -/* 079CAC 7F04517C C72C0014 */ lwc1 $f12, 0x14($t9) -/* 079CB0 7F045180 8E240014 */ lw $a0, 0x14($s1) -/* 079CB4 7F045184 8E250008 */ lw $a1, 8($s1) -/* 079CB8 7F045188 0FC2CA5C */ jal stanGetPositionYValue -/* 079CBC 7F04518C 8E260010 */ lw $a2, 0x10($s1) -/* 079CC0 7F045190 E7A0005C */ swc1 $f0, 0x5c($sp) -/* 079CC4 7F045194 0FC0FA19 */ jal chrpropBBOXGetYmin -/* 079CC8 7F045198 8FA400C0 */ lw $a0, 0xc0($sp) -/* 079CCC 7F04519C 8FA80148 */ lw $t0, 0x148($sp) -/* 079CD0 7F0451A0 8FA90154 */ lw $t1, 0x154($sp) -/* 079CD4 7F0451A4 C5080004 */ lwc1 $f8, 4($t0) -/* 079CD8 7F0451A8 C5260014 */ lwc1 $f6, 0x14($t1) -/* 079CDC 7F0451AC 46004100 */ add.s $f4, $f8, $f0 -/* 079CE0 7F0451B0 C7A8005C */ lwc1 $f8, 0x5c($sp) -/* 079CE4 7F0451B4 46062282 */ mul.s $f10, $f4, $f6 -/* 079CE8 7F0451B8 460A4081 */ sub.s $f2, $f8, $f10 -/* 079CEC 7F0451BC E622000C */ swc1 $f2, 0xc($s1) -/* 079CF0 7F0451C0 E602005C */ swc1 $f2, 0x5c($s0) -.L7F0451C4: -/* 079CF4 7F0451C4 8FBF0024 */ lw $ra, 0x24($sp) -/* 079CF8 7F0451C8 8FA20108 */ lw $v0, 0x108($sp) -/* 079CFC 7F0451CC 8FB0001C */ lw $s0, 0x1c($sp) -/* 079D00 7F0451D0 8FB10020 */ lw $s1, 0x20($sp) -/* 079D04 7F0451D4 03E00008 */ jr $ra -/* 079D08 7F0451D8 27BD0158 */ addiu $sp, $sp, 0x158 -) -#endif s32 glassCalculateOpacity(coord3d *pos, f32 xludist, f32 opadist, f32 arg3) { - coord3d *campos = &get_curplayer_positiondata()->pos; + coord3d *campos = &getCurrentPlayerProp()->pos; s32 opacity; f32 xdiff = pos->x - campos->x; f32 ydiff = pos->y - campos->y; @@ -5832,17881 +4187,2403 @@ s32 glassCalculateOpacity(coord3d *pos, f32 xludist, f32 opadist, f32 arg3) } -#ifdef NONMATCHING - - -// version US defines - -#define AUTOGUN_P1_ACCEL 0.000011635529f -#define AUTOGUN_P1_DECEL AUTOGUN_P1_ACCEL -#define AUTOGUN_P1_MAXSPEED 0.00069813174f - -#define AUTOGUN_P2_ACCEL 0.0000058177643f -#define AUTOGUN_P2_DECEL AUTOGUN_P1_ACCEL -#define AUTOGUN_P2_MAXSPEED 0.00034906587f - -// https://decomp.me/scratch/c9RKZ 65.91% -// PD name: objTick -// Address: 7F0452D4 -s32 object_interaction(struct PropRecord *arg0) +s32 objTick(struct PropRecord *prop) { - struct coord3d sp694; - s32 sp690; - struct PropRecord *sp684; - s32 sp680; - f32 sp67C; - s32 sp674; - s32 sp670; - s32 sp678; - s32 sp664; - struct coord3d sp658; - struct coord3d sp64C; - struct WeaponObjRecord *sp648; - struct ModelRoData_BoundingBoxRecord * sp640; - f32 sp63C; - f32 sp638; - struct coord3d sp62C; - struct coord3d sp620; - struct coord3d sp614; - s32 sp610; - s32 sp60C; - // missing: sp608 - s32 sp604; - struct coord3d sp5CC; - Mtxf *sp58C; - struct coord3d sp564; - f32 sp550[4]; //quatf - struct ModelRoData_BoundingBoxRecord *sp54C; - s32 sp548; - struct coord3d sp53C; - struct coord3d sp530; - f32 sp518; - struct PropRecord* sp514; - struct coord3d sp5xx; // temp variable, unknown stack position - struct StandTile *sp4F0; - f32 sp4D8; - f32 sp4D4; - struct coord3d sp4BC; - f32 sp4B8; - f32 sp4B4; - f32 sp4B0; - s32 sp4AC; - s32 sp4A8; - s32 sp4A4; - f32 sp4A0; - f32 sp49C; - f32 sp498; - f32 sp494; - struct StandTile *sp490; - - f32 sp47C; - struct coord3d *sp478; - struct StandTile *sp468; - f32 sp460; - struct coord3d sp450; - struct StandTile *sp44C; - f32 sp444; - f32 sp440; - f32 sp43C; - f32 sp438; - f32 sp434; - f32 sp430; - f32 sp42C; - f32 sp424; - f32 sp420; - f32 sp418; - f32 sp414; - f32 sp40C; - f32 sp408; - f32 sp400; - Mtxf sp3A4; - struct DoorRecord *sp39C; - f32 sp394; - Mtxf *sp390; - s32 sp38C; - f32 sp384; - f32 sp380; - struct CCTVRecord *sp370; - struct coord3d sp360; - Mtxf sp320; - struct AutogunRecord *sp318; - struct coord3d sp308; - f32 sp304; - f32 sp300; - Mtxf *sp2FC; - s32 sp2F8; - Mtxf sp2AC; - Mtxf sp26C; - struct coord3d *sp260; - struct coord3d *sp25C; - struct coord3d *sp258; - struct coord3d *sp254; - f32 sp250; - f32 sp24C; - f32 sp248; - Mtxf sp200; - struct coord3d *sp1FC; - ModelRenderData sp1B0; - Mtxf sp16C; - struct coord3d *sp168; - struct coord3d *sp164; - struct coord3d *sp160; - struct coord3d *sp15C; - struct ModelRoData_BoundingBoxRecord *sp158; - f32 sp154; - s32 sp13C; - s32 sp138; - struct coord3d sp12C; - struct coord3d sp120; - s32 sp11C; - struct coord3d sp110; - struct StandTile *sp10C; - struct StandTile *sp108; - s32 sp104; - struct PropRecord* sp100; - Mtxf spB8; - f32 sp94; - struct beam *beam; //sp90 - - Mtxf *sp70; /* compiler-managed */ - Mtxf *sp6C; - - struct ObjectRecord *obj; - struct Model *model; - - f32 temp_f12; - s32 var_s2_2; - s32 var_a0; - struct StandTile *temp_s2; - f32 temp_f14_2; - Mtxf *temp_s2_4; - f32 temp_f14_3; - f32 temp_f20; - f32 temp_f14_4; - struct ALSoundState * sfx_state; - s32 var_s2_3; - f32 temp_f12_5; - s32 var_v1_3; - f32 temp_f0_13; // ~ sp510 - s32 var_s2_4; - f32 var_f2; - f32 temp_f0_14; - f32 var_f12; - f32 var_f2_3; - struct PropRecord *temp_v0_19; - f32 var_f12_3; - s32 var_v0_3; - f32 var_f0_2; - f32 var_f12_5; - f32 var_f2_6; - f32 temp_f0_22; - s32 var_v1_5; - s32 var_s0; - f32 *temp_s0_5; - f32 *temp_v0_25; - s32 var_s2_5; - f32 var_f12_6; - s32 var_s0_2; - struct Model *temp_s0_6; - struct PadRecord *var_v1_4; - struct ModelFileHeader *temp_v0_29; - s32 var_s2_6; - struct ModelFileHeader *temp_v0_31; - Mtxf *temp_a1_4; - Mtxf *temp_s0_10; - f32 temp_f0_31; - s32 temp_v0_32; - Mtxf *temp_a1_6; - f32 var_f12_7; - struct coord3d *temp_s0_13; - struct coord3d *temp_s0_14; - struct ModelNode** temp_v1_7; - f32 var_f0_3; - f32 *temp_v0_40; - ModelNode **var_v1_7; - Mtxf *temp_s0_21; - ModelNode **temp_v1_8; - f32 var_f12_9; - s32 var_a0_6; - ModelNode **temp_v1_10; - Mtxf *temp_s2_7; - struct coord3d *temp_v1_11; - struct coord3d temp_fc3d_a; - struct coord3d temp_fc3d_b; - f32 temp_f20_4; - f32 temp_f0_35; - f32 var_f2_7; - f32 temp_f2_23; - f32 var_f4; - - obj = arg0->obj; - model = obj->model; - - sp690 = 0; - sp680 = 0; - sp67C = 0.0f; - sp674 = getPlayerCount(); - sp670 = 1; - - if (obj->runtime_bitflags & RUNTIMEBITFLAG_REMOVE) - { - objFree(obj, 0, obj->state & RUNTIMEBITFLAG_REMOVE); - - return 1; - } - else if (obj->runtime_bitflags & RUNTIMEBITFLAG_ISRETICK) - { - obj->runtime_bitflags &= ~RUNTIMEBITFLAG_ISRETICK; - } - else if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) - { - arg0->flags &= 0xFFFD; - obj->runtime_bitflags |= RUNTIMEBITFLAG_ISRETICK; - - return 3; - } - - if (sp674 == 1) - { - sp678 = 1; - } - else - { - sp678 = get_player_position_in_shuffled(get_cur_playernum()) == 0; - - if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) - { - if (obj->projectile->ownerprop != NULL) - { - sp678 = g_CurrentPlayer->prop == obj->projectile->ownerprop; - } - } - } - - // mips2c line 559 - if (sp678) - { - if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) - { - struct Projectile *temp_s0 = obj->projectile; - - temp_s0->unkE0 += g_ClockTimer; - - if (temp_s0->unkE0 > 2400) - { - obj->runtime_bitflags |= RUNTIMEBITFLAG_REMOVE; - } - - if (temp_s0->flags & 0x100) - { - struct PropRecord *projectile_prop; - - s32 var_s2 = 1; - - sp648 = (struct WeaponObjRecord *)obj; - - if (obj->type == PROPDEF_COLLECTABLE && sp648->weaponnum == ITEM_ROCKETROUND) - { - var_s2 = 0; - } - - projectile_prop = temp_s0->ownerprop; - - if (projectile_prop != NULL) - { - sub_GAME_7F03D058(projectile_prop, 0); - } - - sp664 = sub_GAME_7F042EB4(obj, &temp_s0->unkd4, &sp64C, &sp658, 0, var_s2); - - if (projectile_prop != NULL) - { - sub_GAME_7F03D058(projectile_prop, 1); - } - - if ((sp664 != 1) && (sp648 != NULL) && sp648->weaponnum == ITEM_ROCKETROUND) - { - sp648->timer = 0; - } - - temp_s0->flags &= ~0x100; - } - - sp694.f[0] = obj->runtime_pos.f[0]; - sp694.f[1] = obj->runtime_pos.f[1]; - sp694.f[2] = obj->runtime_pos.f[2]; - - if (temp_s0->refreshrate > 0) - { - temp_s0->refreshrate -= g_ClockTimer; - } - - // mips2c line 608 - if (obj->projectile->flags & 1) - { - struct WeaponObjRecord *temp_s1 = (struct WeaponObjRecord *)obj; - - sp640 = sub_GAME_7F040078(obj); - sp610 = 0; - sp60C = 0; - sp604 = 0; - sp638 = 1.0f; - temp_f20 = obj->runtime_pos.f[1]; - - var_s2_2 = 0; - - temp_s0->unkA8 += g_ClockTimer; - - sp62C.f[0] = obj->mtx.m[0][0]; - sp62C.f[1] = obj->mtx.m[0][1]; - sp62C.f[2] = obj->mtx.m[0][2]; - - if (temp_s0->flags & 0x20) - { - if (temp_s0->unk1C < (10.0f/360.0f)) - { - temp_s0->unkB4 += temp_s0->unk10.f[1] * g_GlobalTimerDelta; - temp_s0->unkB0 += temp_s0->unkB4 * g_GlobalTimerDelta; - temp_s0->unk1C += ((1.0f/90.0f) * g_GlobalTimerDelta); - - if (temp_s0->unk1C > (10.0f/360.0f)) - { - temp_s0->unk1C = (10.0f/360.0f); - } - } - else - { - if (sp694.f[1] < temp_s0->unkB0) - { - temp_s0->unkB4 += temp_s0->unk10.f[1] * g_GlobalTimerDelta; - temp_s0->unkB0 += (temp_s0->unkB4 * g_GlobalTimerDelta); - sp694.f[1] += 0.07f * (temp_s0->unkB0 - sp694.f[1]) * g_GlobalTimerDelta; - } - else - { - sp694.f[1] = temp_s0->unkB0; - temp_s0->flags &= ~0x20; - temp_s0->flags |= 0x10; - temp_s0->unk1C = 0.0f; - temp_s0->speed.f[1] = temp_s0->unkB4; - } - } - } - - if (!(temp_s0->flags & 0x10)) - { - temp_s0->speed.f[1] += (temp_s0->unk10.f[1] + temp_s0->unk1C) * g_GlobalTimerDelta; - temp_f12 = temp_s0->speed.f[1]; - temp_s0->speed.f[1] -= (0.2777778f * g_GlobalTimerDelta); - sp694.f[1] += g_GlobalTimerDelta * (temp_f12 + temp_s0->speed.f[1]) * 0.5f; - } - else - { - temp_s0->speed.f[1] += (temp_s0->unk10.f[1] + temp_s0->unk1C) * g_GlobalTimerDelta; - sp694.f[1] += temp_s0->speed.f[1] * g_GlobalTimerDelta; - } - - sp70 = &obj->mtx; - sp6C = &obj->mtx; - - temp_s0->speed.f[0] += temp_s0->unk10.f[0] * g_GlobalTimerDelta; - temp_s0->speed.f[2] += temp_s0->unk10.f[2] * g_GlobalTimerDelta; - - sp694.f[0] += temp_s0->speed.f[0] * g_GlobalTimerDelta; - sp694.f[2] += temp_s0->speed.f[2] * g_GlobalTimerDelta; - - sub_GAME_7F057DF8(sp70, sp6C, g_ClockTimer, &g_ClockTimer); - - if ((obj->type == PROPDEF_COLLECTABLE) && (((temp_s1->weaponnum == 0x1D)) || (temp_s1->weaponnum == 0x1B) || (temp_s1->weaponnum == 0x1C) || (temp_s1->weaponnum == 0x21) || (temp_s1->weaponnum == 0x2F) || (temp_s1->weaponnum == 0x30) || (temp_s1->weaponnum == 0x22))) - { - var_s2_2 = 1; - } - - if (temp_s0->ownerprop != NULL) - { - sub_GAME_7F03D058(temp_s0->ownerprop, 0); - } - - sp664 = sub_GAME_7F042EB4(obj, &sp694.f[0], &sp614, &sp620, var_s2_2, 0); - - if (temp_s0->ownerprop != NULL) - { - sub_GAME_7F03D058(temp_s0->ownerprop, 1); - } - - sp690 = 1; - - // mps2c line 696 - if ((sp664 == 2) && ((D_80030B0C == NULL) || (((D_80030B0C->type != 3)) && (D_80030B0C->type != 6)))) - { - var_a0 = 0; - - if ((D_80030B0C != NULL) && (D_80030B0C->obj->runtime_bitflags & 0x80)) - { - var_a0 = 1; - } - - if (var_a0 == 0) - { - projectileFree(temp_s0); - - obj->projectile = NULL; - obj->runtime_bitflags &= ~0x80; - - if (arg0->flags & 8) - { - arg0->flags |= 0x10; - } - - chrobjSndCreatePostEventDefault(sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, ATTACH_MINE_SFX, NULL), &arg0->pos); - sub_GAME_7F0577E8(((struct WeaponObjRecord *)obj)->weaponnum, arg0->stan->room); - sub_GAME_7F0439B8(obj, &sp614, arg0->stan, &sp620); - - if (D_80030B0C != NULL) - { - temp_s2 = arg0->stan; - - if (objEmbed(arg0, D_80030B0C, objinst, dword_CODE_bss_80075B74) != 0) - { - arg0->stan = temp_s2; - sp680 = 5; - sp604 = 1; - } - } - } - } - - // mpis2c line 728 - if (sp604 == 0) - { - if ((D_80030B0C != NULL) && (obj->type == PROPDEF_COLLECTABLE)) - { - struct WeaponObjRecord *temp_weap = (struct WeaponObjRecord *)obj; - - if (temp_weap->weaponnum == ITEM_THROWKNIFE) - { - if (D_80030B0C->type != 3) - { - if (D_80030B0C->type == 6 && D_80030B0C->obj != NULL) - { - if (getPlayerPointerIndex(D_80030B0C) != get_cur_playernum()) - { - //goto block_77; - } - } - } - else - { -//block_77:; - struct Projectile *temp_v0_8 = obj->projectile; - - if ((temp_v0_8->flags & 1) - && ((s32) temp_v0_8->unk90 <= 0) - && (obj->runtime_bitflags & 0x20) - && (handles_shot_actors(D_80030B0C->chr, bodypartshot, &flt_CODE_bss_80075B78, ((struct WeaponObjRecord *)obj)->weaponnum, 1) != 0)) - { - sp604 = 1; - - if (temp_s0->unk8C > 0.0f) - { - temp_f14_2 = ((sp620.f[2] * temp_s0->speed.f[2]) + ((temp_s0->speed.f[0] * sp620.f[0]) + (temp_s0->speed.f[1] * sp620.f[1]))) * -(temp_s0->unk8C + 1.0f); - temp_s0->speed.f[0] = temp_s0->speed.f[0] + (temp_f14_2 * sp620.f[0]); - temp_s0->speed.f[1] = temp_s0->speed.f[1] + (temp_f14_2 * sp620.f[1]); - temp_s0->speed.f[2] = temp_s0->speed.f[2] + (temp_f14_2 * sp620.f[2]); - } - - if (!(temp_s0->flags & 0x200)) - { - mtxLoadRandomRotation(sp6C); - } - - temp_s0->unk90 += 1; - recall_joy2_hits_edit_detail_edit_flag(((struct WeaponObjRecord *)obj)->weaponnum, D_80030B0C, -1); - - if ((D_80030B0C->flags & 2) && (bodypartshot != 0x64) && (bodypartshot != 0x6E)) - { - temp_s2_4 = modelFindNodeMtx(objinst, dword_CODE_bss_80075B74, 0); - - sp5CC.f[0] = sp614.f[0]; - sp5CC.f[1] = sp614.f[1]; - sp5CC.f[2] = sp614.f[2]; - mtx4TransformVecInPlace(camGetWorldToScreenMtxf(), &sp5CC); - - sp5CC.f[0] += ((sp5CC.f[0] - temp_s2_4->m[3][0]) * 0.5f); - sp5CC.f[1] += ((sp5CC.f[1] - temp_s2_4->m[3][1]) * 0.5f); - sp5CC.f[2] += ((sp5CC.f[2] - temp_s2_4->m[3][2]) * 0.5f); - - sp5CC.f[0] -= (getjointsize(objinst, dword_CODE_bss_80075B74) * 0.5f * flt_CODE_bss_80075B88.f[0]); - sp5CC.f[1] -= (getjointsize(objinst, dword_CODE_bss_80075B74) * 0.5f * flt_CODE_bss_80075B78.f[0]); - sp5CC.f[2] -= (getjointsize(objinst, dword_CODE_bss_80075B74) * 0.5f * flt_CODE_bss_80075B88.f[0]); - - matrix_4x4_set_inverse_rotation_and_translation(temp_s2_4, sp58C); - mtx4TransformVecInPlace(sp58C, &sp5CC); - sub_GAME_7F0221DC(objinst, bodypartshot, dword_CODE_bss_80075B74, &sp5CC); - } - } - } - } - // mips2c line 795 - else if (temp_weap->weaponnum == ITEM_ROCKETROUND) - { - if (D_80030B0C->type == PROP_TYPE_CHR) - { - sp604 = 1; - chrlvExplosionDamage((ChrRecord *) D_80030B0C->chr, &obj->runtime_pos, 2.0f, 1); - } - else if ((D_80030B0C->type == PROP_TYPE_OBJ) || (D_80030B0C->type == PROP_TYPE_WEAPON)) - { - maybe_detonate_object(D_80030B0C->obj, 100.0f, &obj->runtime_pos, ITEM_ROCKETROUND, (s32) ((u32) (obj->runtime_bitflags & RUNTIMEBITFLAG_OWNER) >> RUNTIMEBITSHIFT_OWNER)); - } - - ((struct WeaponObjRecord *)obj)->timer = 0; - } - } - } - - // mips2c line 811 - if (sp604 == 0) - { - if (sp664 == 0) - { - if (temp_s0->unk8C > 0.0f) - { - temp_f14_3 = ((sp620.f[2] * temp_s0->speed.f[2]) + ((temp_s0->speed.f[0] * sp620.f[0]) + (temp_s0->speed.f[1] * sp620.f[1]))) * -(temp_s0->unk8C + 1.0f); - - temp_s0->speed.f[0] += (temp_f14_3 * sp620.f[0]); - temp_s0->speed.f[1] += (temp_f14_3 * sp620.f[1]); - temp_s0->speed.f[2] += (temp_f14_3 * sp620.f[2]); - - if ((temp_s0->speed.f[1] <= 0.0f) && ((temp_s0->speed.f[1] >= 0.0f) || (temp_f20 <= obj->runtime_pos.f[1]))) - { - sp60C = 1; - } - } - } - - // mips2c line 832 - if (!(temp_s0->flags & 8)) - { - sp63C = stanGetPositionYValue(arg0->stan, arg0->pos.f[0], arg0->pos.f[2]); - sp638 = chrpropSumMatrixPosY(sp640, &sp70[0]); - sp610 = (arg0->pos.f[1] < (sp63C - sp638)); - } - - if ((sp610 != 0) || (sp664 == 0)) - { - if (!(temp_s0->flags & 0x200)) - { - mtxLoadRandomRotation(sp6C); - } - - temp_s0->unk90 += 1; - } - - if ((sp610 != 0) || (sp60C != 0)) - { - if (sp610 != 0) - { - arg0->pos.f[1] = (sp63C - sp638) + 4.0f; - obj->runtime_pos.f[1] = arg0->pos.f[1]; - } - else - { - arg0->pos.f[1] = (sp614.f[1] - sp638) + 4.0f; - obj->runtime_pos.f[1] = arg0->pos.f[1]; - } - - if (!(obj->runtime_bitflags & 0x10000)) - { - obj->runtime_bitflags |= 0x100; - } - - if (temp_s0->unk8C > 0.0f) - { - temp_s0->speed.f[1] *= -temp_s0->unk8C; - if (temp_s0->speed.f[1] < 2.2222223f) - { - if ((temp_s0->flags & 2) && (temp_s0->unk90 == 1)) - { - temp_s0->speed.f[1] = 2.2222223f; - } - else - { - sub_GAME_7F0431E4(obj, &sp62C); - } - } - } - else - { - sub_GAME_7F0431E4(obj, &sp62C); - } - } - - //mips2c line 892 - if (obj->type == 8) - { - if (temp_s1->weaponnum == 3) - { - sub_GAME_7F043650(temp_s1); - } - else if (temp_s1->weaponnum == 0x56) - { - if ((sp664 == 0) || (sp610 != 0)) - { - temp_s1->timer = 0; - } - else - { - temp_f14_4 = (temp_s0->speed.f[2] * temp_s0->speed.f[2]) + ((temp_s0->speed.f[0] * temp_s0->speed.f[0]) + (temp_s0->speed.f[1] * temp_s0->speed.f[1])); - if (temp_f14_4 > 27777.773f) - { - temp_s0->unk10.f[0] = 0.0f; - temp_s0->unk10.f[1] = 0.0f; - temp_s0->unk10.f[2] = 0.0f; - } - if ((s32) temp_s0->unkA8 >= 0x12D) - { - temp_s0->unk1C = 0.0f; - temp_s0->flags &= ~0x30; - } - else - { - explosionCreateSmoke(&temp_s1->runtime_pos, arg0->stan, 8, arg0->rooms, (arg0->flags & 8) != 0); - } - } - } - else if (temp_s1->weaponnum == 0x57) - { - if ((sp610 != 0) || (sp60C != 0)) - { - temp_s1->timer = 0; - } - else - { - explosionCreateSmoke(&obj->runtime_pos, arg0->stan, 9, arg0->rooms, (arg0->flags & 8) != 0); - } - } - - if ((sp664 == 0) || (sp610 != 0)) - { - if (temp_s0->unkAC < (D_80048380 - 2)) - { - if ((temp_s1->weaponnum == 3) || (temp_s1->weaponnum == 2)) - { - sfx_state = sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, KNIFE_HIT_WALL_SFX, NULL); - } - else - { - sfx_state = sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, DROP_GUN_SFX, NULL); - } - - chrobjSndCreatePostEventDefault(sfx_state, &arg0->pos); - } - - temp_s0->unkAC = D_80048380; - } - } - } - - // mips2c line 960 - if ((temp_s1->runtime_bitflags & 0x80) && (temp_s0->flags & 0x400) && !(D_80048380 & 7)) - { - struct PropRecord *temp_v0_13 = temp_s1->prop; - - sp564.f[0] = temp_s1->runtime_pos.f[0] + 400.0f; - sp564.f[1] = temp_s1->runtime_pos.f[1] - 1800.0f; - sp564.f[2] = temp_s1->runtime_pos.f[2]; - - if (!(D_80048380 & 0xF)) - { - sp564.f[2] += 400.0f; - } - else - { - sp564.f[2] -= 400.0f; - } - - - // void explosionCreate(void *, struct coord3d *pos, struct StandTile *stan, s16 /* enum EXPLOSION_DEF */ explosionType, s32 flag, s32 playernum, u8 *rooms, s32 flag2); - explosionCreate(NULL, &sp564, temp_v0_13->stan, 0x14, 0, 0, temp_v0_13->rooms, 0); - if (((s32) D_80048380 % 40) == 0) - { - // void explosionCreateSmoke(coord3d *pos, StandTile *stan, s16 arg2, u8 *rooms, s32 arg4); - explosionCreateSmoke(&sp564, temp_v0_13->stan, 0xA, temp_v0_13->rooms, 1); - } - } - } - // mips2c line 982 - else - { - var_s2_3 = 1; - - if (temp_s0->unk60 < 1.0f) - { - temp_s0->unk60 += (temp_s0->unk64 * g_GlobalTimerDelta); - - if (g_ClockTimer > 0) - { - temp_s0->unk64 *= 1.1f; - } - - if ((temp_s0->unk60 > 1.0f) || (temp_s0->flags & 8)) - { - temp_s0->unk60 = 1.0f; - } - - //void quaternion_slerp(quatf q1, quatf q2, f32 t, quatf result); - quaternion_slerp((f32*)&temp_s0->unk68, (f32*)&temp_s0->unk78, temp_s0->unk60, (f32*)&sp550); - sp70 = &obj->mtx; - - // void quaternion_to_matrix(quatf q, mat44f matrix); - quaternion_to_matrix((f32*)&sp550, (f32*)&obj->mtx); - matrix_column_1_scalar_multiply(temp_s0->unkC0, (f32*)sp70); - matrix_column_2_scalar_multiply(temp_s0->unkC4, (f32*)sp70); - matrix_column_3_scalar_multiply_2(temp_s0->unkC8, (f32*)sp70); - var_s2_3 = 0; - } - - if (((temp_s0->speed.f[0] != 0.0f) || (temp_s0->speed.f[2] != 0.0f) || (temp_s0->unk60 < 1.0f)) && !(temp_s0->flags & 8)) - { - sp70 = &obj->mtx; - var_s2_3 = 0; - sp54C = sub_GAME_7F040078(obj); - - for (sp548 = 0; sp548 < g_ClockTimer; sp548++) - { - sp694.f[0] += temp_s0->speed.f[0]; - sp694.f[2] += temp_s0->speed.f[2]; - - if (temp_s0->unk60 >= 1.0f) - { - if (temp_s0->unk94 > 0.0f) - { - temp_f12_5 = (temp_s0->unk94 * g_GlobalTimerDelta) / sqrtf((temp_s0->speed.f[2] * temp_s0->speed.f[2]) + (temp_s0->speed.f[0] * temp_s0->speed.f[0])); - - if (temp_f12_5 >= 1.0f) - { - temp_s0->speed.f[0] = 0.0f; - temp_s0->speed.f[2] = 0.0f; - } - else - { - temp_s0->speed.f[0] -= (temp_s0->speed.f[0] * temp_f12_5); - temp_s0->speed.f[2] -= (temp_s0->speed.f[2] * temp_f12_5); - } - } - else - { - temp_s0->speed.f[0] *= 0.9f; - temp_s0->speed.f[2] *= 0.9f; - } - } - } - - // s32 sub_GAME_7F042EB4(struct ObjectRecord *arg0, f32 *arg1, struct coord3d *arg2, struct coord3d *arg3, s32 arg4, s32 arg5); - sub_GAME_7F042EB4(obj, &sp694.f[0], &sp530, &sp53C, 0, 0); - sp690 = 1; - - arg0->pos.f[1] = stanGetPositionYValue(arg0->stan, arg0->pos.f[0], arg0->pos.f[2]) - (chrpropSumMatrixPosY(sp54C, sp70) + 4.0f); - obj->runtime_pos.f[1] = arg0->pos.f[1]; - - - if ((temp_s0->speed.f[0] < 0.1f) && (temp_s0->speed.f[0] > -0.1f)) - { - if ((temp_s0->speed.f[2] < 0.1f) && (temp_s0->speed.f[2] > -0.1f)) - { - temp_s0->speed.f[2] = 0.0f; - temp_s0->speed.f[0] = 0.0f; - } - } - } - - if ((var_s2_3 != 0) || (temp_s0->flags & 8)) - { - projectileFree(temp_s0); - - obj->projectile = NULL; - obj->runtime_bitflags &= ~0x80; - - if (arg0->flags & 8) - { - arg0->flags |= 0x10; - } - } - } - } - - // mips2c line 1081 - if (sp690 != 0) - { - sp70 = (Mtxf *)&obj->runtime_pos; - chrobjCollisionRelated(obj); - setupUpdateObjectRoomPosition(obj); - sub_GAME_7F0402B4(obj->prop, &obj->nextcol); - detonate_proxmine_In_range((struct coord3d *)sp70); - } - - // mips2c line 1090 - if (obj->type == PROPDEF_DOOR) - { - struct DoorRecord *door = (struct DoorRecord *)arg0->obj; - - sp67C = door->openPosition; - - if ((door->openedTime > 0) && (door->openedTime < (g_GlobalTimer - door->autoCloseFrames)) && (door->openstate == DOORSTATE_STATIONARY) && !(door->flags & 0x80000000)) - { - doorActivate(door, DOORSTATE_CLOSING); - } - - if (door->openstate == DOORSTATE_WAITING) - { - struct DoorRecord *linked_door = door->linkedDoor; - - var_v1_3 = 1; - - while ((linked_door != NULL) && (linked_door != door)) - { - if ((linked_door->openstate != DOORSTATE_STATIONARY) || (linked_door->openPosition > 0.0f)) - { - var_v1_3 = 0; - } - - linked_door = linked_door->linkedDoor; - } - - if (var_v1_3 != 0) - { - doorSetOpenState(door, DOORSTATE_OPENING); - } - } - - if ((door->doorType == 8) && (doorIsClosed(door) != 0) && (doorIsPadlockFree(door) != 0)) - { - doorActivateWrapper(arg0); - } - - if ((door->timer < g_GlobalTimer) || (g_ClockTimer == 0)) - { - door7F054FB4(door); - } - } - // mips2c line 1130 - else if (obj->type == PROPDEF_CCTV && !(obj->flags & PROPFLAG_CCTV_DISABLED)) - { - struct CCTVRecord *camera = (struct CCTVRecord *)arg0->obj; - // camera is temp_s0_3 - - if (camera->unkD4 != 0) - { - sp518 = camera->unkCC; - } - else - { - sp518 = camera->unkD0; - } - - sp514 = get_curplayer_positiondata(); - - temp_f0_13 = camera->unkE8; - var_s2_4 = 1; - sp5xx.f[0] = sp514->pos.f[0] - obj->runtime_pos.f[0]; - sp5xx.f[1] = sp514->pos.f[1] - obj->runtime_pos.f[1]; - sp5xx.f[2] = sp514->pos.f[2] - obj->runtime_pos.f[2]; - - if ((temp_f0_13 > 0.0f) && ((temp_f0_13 * temp_f0_13) < ((sp5xx.f[0] * sp5xx.f[0]) + (sp5xx.f[1] * sp5xx.f[1]) + (sp5xx.f[2] * sp5xx.f[2])))) - { - var_s2_4 = 0; - } - - if (obj->flags & 0x20000000) - { - var_s2_4 = 0; - } - - if (var_s2_4 != 0) - { - temp_f0_14 = atan2f(sp5xx.f[0], sp5xx.f[2]); - - var_f2 = camera->unkC8; - - if ( var_f2 < 0.0f) - { - var_f2 += 6.2831855f; - } - else if (var_f2 >= 6.2831855f) - { - var_f2 -= 6.2831855f; - } - - var_f2 += camera->unkC4; - if (var_f2 >= 6.2831855f) - { - var_f2 -= 6.2831855f; - } - - var_f12 = temp_f0_14 - var_f2; - - if (temp_f0_14 < var_f2) - { - var_f12 += 6.2831855f; - } - - var_f12 -= 3.1415927f; - - if (var_f12 < 0.0f) - { - var_f12 += 6.2831855f; - } - - if (var_f12 > 3.1415927f) - { - var_f12 -= 6.2831855f; - } - - if ((var_f12 > 0.7853982f) || (var_f12 < -0.7853982f)) - { - var_s2_4 = 0; - } - } - - if (var_s2_4 != 0) - { - sp4F0 = arg0->stan; - bondviewUpdateGuardTankFlagsRelated(sp514, 0); - - if (stanTestLineUnobstructed(&sp4F0, arg0->pos.f[0], arg0->pos.f[2], sp514->pos.f[0], sp514->pos.f[2], 0x1B, 100.0f, 100.0f, 0.0f, 1.0f) != 0) - { - camera->timer += g_ClockTimer; - - if (camera->timer >= (s32) (300.0f * F_80030B14)) - { - alarmActivate(); - camera->timer = 0; - } - } - - bondviewUpdateGuardTankFlagsRelated(sp514, 1); - } - - if (camera->unkC8 < sp518) - { - if ((sp518 - ((camera->unkD8 * camera->unkD8 * 0.5f) / 0.00065449846f)) <= camera->unkC8) - { - camera->unkD8 = (f32) (camera->unkD8 - (0.00065449846f * g_GlobalTimerDelta)); - - if (camera->unkD8 < 0.00065449846f) - { - camera->unkD8 = 0.00065449846f; - } - } - else - { - if (camera->unkD8 < camera->unkDC) - { - var_f2_3 = camera->unkD8 + (0.00065449846f * g_GlobalTimerDelta); - - if (camera->unkDC < var_f2_3) - { - var_f2_3 = camera->unkDC; - } - - if (camera->unkC8 < (sp518 - ((var_f2_3 * var_f2_3 * 0.5f) / 0.00065449846f))) - { - camera->unkD8 = var_f2_3; - } - } - } - - camera->unkC8 += (camera->unkD8 * g_GlobalTimerDelta); - - if (sp518 <= camera->unkC8) - { - camera->unkC8 = sp518; - camera->unkD8 = 0.0f; - camera->unkD4 = 0; - } - } - else - { - if (camera->unkC8 <= (sp518 + ((camera->unkD8 * camera->unkD8 * 0.5f) / 0.00065449846f))) - { - camera->unkD8 = (f32) (camera->unkD8 - (0.00065449846f * g_GlobalTimerDelta)); - - if (camera->unkD8 < 0.00065449846f) - { - camera->unkD8 = 0.00065449846f; - } - } - else - { - if (camera->unkD8 < camera->unkDC) - { - var_f2_3 = camera->unkD8 + (0.00065449846f * g_GlobalTimerDelta); - - if (camera->unkDC < var_f2_3) - { - var_f2_3 = camera->unkDC; - } - - if ((sp518 + ((var_f2_3 * var_f2_3 * 0.5f) / 0.00065449846f)) < camera->unkC8) - { - camera->unkD8 = var_f2_3; - } - } - } - - camera->unkC8 -= (camera->unkD8 * g_GlobalTimerDelta); - - if (camera->unkC8 <= sp518) - { - camera->unkC8 = sp518; - camera->unkD8 = 0.0f; - camera->unkD4 = 1; - } - } - } - // mips2c line 1286 - else if (obj->type == PROPDEF_AUTOGUN && !(obj->flags & PROPFLAG_IS_DRONE_GUN)) - { - struct AutogunRecord *autogun = (struct AutogunRecord*)arg0->obj; - // autogun is temp_s0_4 - - temp_v0_19 = get_curplayer_positiondata(); - sp4AC = 0; - sp4A8 = 0; - sp4A4 = 0; - - if (obj->flags2 & 0x80000000) - { - if (obj->flags2 & 0x40000000) - { - autogun->rot_related = autogun->unk90; - autogun->unk98 = autogun->unk9C; - } - else if ((autogun->rot_related == autogun->unk90) && (autogun->unk98 == autogun->unk9C)) - { - autogun->unk98 = (((( RANDOMGETNEXT_F32() * 39.0f) + 1.0f) * 6.2831855f) / 360.0f); - autogun->rot_related = (RANDOMGETNEXT_F32() * 6.2831855f); - } - - chrobjCallsApplySpeed(&autogun->unk90, autogun->rot_related, &autogun->unk94, AUTOGUN_P1_ACCEL, AUTOGUN_P1_DECEL, AUTOGUN_P1_MAXSPEED); - chrobjCallsApplySpeed(&autogun->unk9C, autogun->unk98, &autogun->unkA0, AUTOGUN_P2_ACCEL, AUTOGUN_P2_DECEL, AUTOGUN_P2_MAXSPEED); - } - else - { - // mips2c line 1317 - sp4BC.f[2] = temp_v0_19->pos.f[0] - obj->runtime_pos.f[0]; - sp4BC.f[1] = (temp_v0_19->pos.f[1] - obj->runtime_pos.f[1]) - 20.0f; - sp4BC.f[0] = temp_v0_19->pos.f[2] - obj->runtime_pos.f[2]; - - sp4B8 = (sp4BC.f[2] * sp4BC.f[2]) + (sp4BC.f[0] * sp4BC.f[0]); - - sp4B0 = sqrtf(sp4B8); - - if (obj->flags & 0x08000000) - { - sp4B8 += (sp4BC.f[1] * sp4BC.f[1]); - sp4B0 = sqrtf(sp4B8); - } - - sp4B4 = sp4B0; - - sp4A0 = chrlvGetAimLimitAngle(sp4B8); - sp4D8 = autogun->rot_related; - sp4D4 = autogun->unk98; - - if (sp4B4 <= autogun->aimdist) - { - // mips2c line 1339 - sp49C = atan2f(sp4BC.f[2], sp4BC.f[0]); - sp498 = atan2f(sp4BC.f[1], sp4B0); - - if ((obj->flags & 0x40000000) || (obj->flags & 0x20000000)) - { - sp4AC = 1; - } - else - { - var_f12_3 = sp49C - autogun->unk90; - - if (var_f12_3 < 0.0f) - { - var_f12_3 += 6.2831855f; - } - - if (var_f12_3 > 3.1415927f) - { - var_f12_3 -= 6.2831855f; - } - - if ((sp498 - autogun->unk9C) < 0.0f) - { - // empty - } - - if ((var_f12_3 < 1.2217306f) && (var_f12_3 > -1.2217306f)) - { - sp4AC = 1; - } - } - - if (sp4AC != 0) - { - sp494 = sp49C - autogun->rot_related; - sp490 = arg0->stan; - if (sp494 < -3.1415927f) - { - sp494 += 6.2831855f; - } - else if (sp494 >= 3.1415927f) - { - sp494 -= 6.2831855f; - } - - bondviewUpdateGuardTankFlagsRelated(temp_v0_19, 0); - - if ((sp494 <= autogun->unk88) - && (autogun->unk8C <= sp494) - && (sub_GAME_7F0B0E24(&sp490, arg0->pos.f[0], arg0->pos.f[2], temp_v0_19->pos.f[0], temp_v0_19->pos.f[2], 0x1B, arg0->pos.f[1], arg0->pos.f[1], temp_v0_19->pos.f[1], temp_v0_19->pos.f[1]) != 0) - && (sp490 == temp_v0_19->stan)) - { - obj->flags |= 0x20000000; - sp4A4 = 1; - sp4D8 = sp49C; - sp4D4 = sp498; - } - else - { - if ((autogun->unkB8 >= 0) && ((g_GlobalTimer - 0x78) < autogun->unkB8)) - { - sp4D8 = autogun->unk90; - sp4D4 = autogun->unk9C; - } - else - { - sp4AC = 0; - } - } - - bondviewUpdateGuardTankFlagsRelated(temp_v0_19, 1); - } - } - - if (sp4AC != 0) - { - sp4A0 = chrlvGetAimLimitAngle(sp4B8); - } - - if (autogun->is_active != 0) - { - sp4D8 += sp4A0 * 0.8f * sinf(((f32) ((s32) g_GlobalTimer % 120) * 6.2831855f) / 120.0f); - - if (sp4D8 < 0.0f) - { - sp4D8 += 6.2831855f; - } - - if (sp4D8 >= 6.2831855f) - { - sp4D8 -= 6.2831855f; - } - } - - // mips2c linee 1427 - - var_f0_2 = sp4D8 - autogun->rot_related; - - if (var_f0_2 < -3.1415927f) - { - var_f0_2 += 6.2831855f; - } - else if (var_f0_2 >= 3.1415927f) - { - var_f0_2 -= 6.2831855f; - } - - if (autogun->unk88 < var_f0_2 || var_f0_2 < autogun->unk8C) - { - sp4D8 = autogun->rot_related + autogun->unk8C; - } - - if (sp4D8 < 0.0f) - { - sp4D8 += 6.2831855f; - } - - if (sp4D8 >= 6.2831855f) - { - sp4D8 -= 6.2831855f; - } - - chrobjCallsApplySpeed(&autogun->unk90, sp4D8, &autogun->unk94, 0.0008726647f, 0.0008726647f, autogun->speed); - chrobjCallsApplySpeed(&autogun->unk9C, sp4D4, &autogun->unkA0, 0.0008726647f, 0.0008726647f, autogun->speed); - - var_f12_5 = sp4D8 - autogun->unk90; - - if (var_f12_5 < 0.0f) - { - var_f12_5 += 6.2831855f; - } - - if (var_f12_5 > 3.1415927f) - { - var_f12_5 -= 6.2831855f; - } - - var_f2_6 = sp4D4 - autogun->unk9C; - - if (var_f2_6 < 0.0f) - { - var_f2_6 += 6.2831855f; - } - - if (var_f2_6 > 3.1415927f) - { - var_f2_6 -= 6.2831855f; - } - - autogun->is_active = 0; - - if (sp4AC != 0) - { - if ((var_f12_5 < sp4A0) - && (-sp4A0 < var_f12_5) - && (var_f2_6 < sp4A0) - && (-sp4A0 < var_f2_6)) - { - autogun->is_active = 1; - sp4A8 = 1; - - if (sp4A4 != 0) - { - autogun->unkB8 = (s32) g_GlobalTimer; - autogun->unkBC = (s32) g_GlobalTimer; - } - } - else - { - temp_f0_22 = 2.0f * sp4A0; - - if ((var_f12_5 < temp_f0_22) - && (-temp_f0_22 < var_f12_5) - && (var_f2_6 < temp_f0_22) - && (-temp_f0_22 < var_f2_6)) - { - autogun->is_active = 1; - sp4A8 = 1; - if (sp4A4 != 0) - { - autogun->unkB8 = (s32) g_GlobalTimer; - } - } - else - { - if ((autogun->unkB8 >= 0) && ((g_GlobalTimer - 0x78) < autogun->unkB8)) - { - autogun->is_active = 1; - sp4A8 = 1; - } - } - } - } - if (sp4A8 != 0) - { - autogun->unkB0 += (0.009973311f * g_GlobalTimerDelta); - - if (autogun->unkB0 > 0.5983986f) - { - autogun->unkB0 = 0.5983986f; - } - } - else if (autogun->unkB0 > 0.0f) - { - for (var_v0_3 = 0; var_v0_3 < g_ClockTimer; var_v0_3++) - { - autogun->unkB0 *= 0.99f; - } - - if (autogun->unkB0 <= 0.0001f) - { - autogun->unkB0 = 0.0f; - } - } - if (autogun->unkB0 > 0.0f) - { - autogun->unkB4 += (autogun->unkB0 * g_GlobalTimerDelta); - - while (autogun->unkB4 >= 6.2831855f) - { - autogun->unkB4 -= 6.2831855f; - } - } - } - } - // mips2c line 1550 - else if (obj->type == PROPDEF_VEHICHLE) - { - struct VehichleRecord *temp_s1 = (struct VehichleRecord *)obj; - - sp478 = NULL; - sp47C = temp_s1->roty; - - ai((PropDefHeaderRecord*)temp_s1, 1); - - if (temp_s1->speedtime60 >= 0.0f) - { - if (temp_s1->speedtime60 <= g_GlobalTimerDelta) - { - temp_s1->speed = temp_s1->speedaim; - } - else - { - temp_s1->speed += (((temp_s1->speedaim - temp_s1->speed) * g_GlobalTimerDelta) / temp_s1->speedtime60); - } - - temp_s1->speedtime60 -= g_GlobalTimerDelta; - } - - var_s0 = 0; - - // mips2c line 1570 - - if (!(obj->flags2 & 0x80000) && (objIsHealthy(obj) != 0) && ((temp_s1->speed > 0.0f) || (temp_s1->speedaim > 0.0f))) - { - var_s0 = sub_GAME_7F053894(&temp_s1->runtime_pos, 2000.0f, 3000.0f); - } - - if (var_s0 > 0) - { - if (((temp_s1->Sound == NULL) || (sndGetPlayingState(temp_s1->Sound) == 0)) && (lvlGetControlsLockedFlag() == 0)) - { - sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, TRUCK_RUN_SFX, temp_s1->Sound); - } - - if (temp_s1->Sound != NULL) - { - sndCreatePostEvent(temp_s1->Sound, 8, var_s0); - } - } - else - { - if ((temp_s1->Sound != NULL) && (sndGetPlayingState(temp_s1->Sound) != 0)) - { - sndDeactivate(temp_s1->Sound); - } - } - - // mips2c line 1595 - - if (temp_s1->path != NULL) - { - sp478 = &g_CurrentSetup.pads[g_CurrentSetup.pathwaypoints[temp_s1->path->waypoints[temp_s1->nextstep]].padID].pos; - - sp47C = atan2f(sp478->f[0] - temp_s1->runtime_pos.f[0], sp478->f[2] - temp_s1->runtime_pos.f[2]); - - if (temp_s1->flags & 0x20000000) - { - temp_s1->roty = sp47C; - temp_s1->flags &= 0xDFFFFFFF; - sub_GAME_7F044B38(temp_s1); - } - } - else if (temp_s1->flags & 0x20000000) - { - temp_s1->roty = atan2f(temp_s1->mtx.m[2][0], temp_s1->mtx.m[2][2]); - temp_s1->flags &= 0xDFFFFFFF; - sub_GAME_7F044B38(temp_s1); - } - - // mips2c line 1614 - if (temp_s1->speed > 0.0f) - { - sp430 = 0.0f; - - sp468 = arg0->stan; - sp438 = temp_s1->roty; - sp434 = temp_s1->turnrot60; - - if (sp478 != NULL) - { - sp430 = 0.0f; - sp43C = sinf(sp438); - sp440 = 0.0f; - sp444 = cosf(temp_s1->roty); - - if (chrlvGeometryRelated7F02FC34(&temp_s1->runtime_pos, (struct coord3d *) &sp43C, sp478, 10.0f) != 0) - { - sp47C = temp_s1->roty; - } - } - - chrobjCallsApplySpeed(&temp_s1->roty, sp47C, &temp_s1->turnrot60, 0.000109083085f, 0.00021816617f, 0.006544985f); - - while (temp_s1->roty >= 6.2831855f) - { - temp_s1->roty -= 6.2831855f; - } - - while (temp_s1->roty < 0.0f) - { - temp_s1->roty += 6.2831855f; - } - - if (sp47C == temp_s1->roty) - { - if ((temp_s1->turnrot60 <= 0.00021816617f) && (temp_s1->turnrot60 >= -0.00021816617f)) - { - temp_s1->turnrot60 = 0.0f; - } - } - - temp_s0_5 = (f32*)model->obj->Switches[3]->Data; - - if (g_GlobalTimerDelta > 0.0f) - { - sp430 = (temp_s1->roty - sp438) / g_GlobalTimerDelta; - } - if (sp430 < 0.0f) - { - sp430 += 6.2831855f; - } - - sp460 = sinf(sp430) * (temp_s0_5[2] * model->scale) * g_GlobalTimerDelta; - sp43C = sinf(temp_s1->roty); - sp440 = 0.0f; - sp444 = cosf(temp_s1->roty); - sp694.f[0] = (temp_s1->runtime_pos.f[0] + (temp_s1->speed * g_GlobalTimerDelta * sp43C)) - (sp444 * sp460); - sp694.f[1] = temp_s1->runtime_pos.f[1]; - sp694.f[2] = (sp43C * sp460) + (temp_s1->runtime_pos.f[2] + (temp_s1->speed * g_GlobalTimerDelta * sp444)); - - if ((sub_GAME_7F0B0E24(&sp468, arg0->pos.f[0], arg0->pos.f[2], sp694.f[0], sp694.f[2], 0x1F, 0.0f, 1.0f, 0.0f, 1.0f) != 0) - && (sub_GAME_7F0B18B8(&sp468, sp694.f[0], sp694.f[2], 10.0f, 0x1F, 0.0f, 1.0f) < 0)) - { - sp44C = arg0->stan; - sp450.f[0] = arg0->pos.f[0]; - sp450.f[1] = arg0->pos.f[1]; - sp450.f[2] = arg0->pos.f[2]; - arg0->stan = sp468; - arg0->pos.f[0] = sp694.f[0]; - temp_s1->runtime_pos.f[0] = sp694.f[0]; - arg0->pos.f[2] = sp694.f[2]; - temp_s1->runtime_pos.f[2] = sp694.f[2]; - chrobjCollisionRelated(obj); - setupUpdateObjectRoomPosition(obj); - var_s2_5 = sub_GAME_7F0448A8(arg0); - - if (var_s2_5 != 0) - { - temp_v0_25 = (f32*)model->obj->Switches[7]->Data; - sp424 = temp_s1->mtx.m[0][0] * temp_v0_25[1]; - sp42C = temp_s1->mtx.m[0][2] * temp_v0_25[1]; - sp418 = temp_s1->mtx.m[0][0] * temp_v0_25[2]; - sp420 = temp_s1->mtx.m[0][2] * temp_v0_25[2]; - sp40C = temp_s1->mtx.m[2][0] * temp_v0_25[5]; - sp414 = temp_s1->mtx.m[2][2] * temp_v0_25[5]; - sp400 = temp_s1->mtx.m[2][0] * temp_v0_25[6]; - sp408 = temp_s1->mtx.m[2][2] * temp_v0_25[6]; - sp468 = arg0->stan; - // temp_f0_25 = arg0->pos.f[0] - //temp_f2_13 = arg0->pos.f[2] - - // temp_f0_26 = arg0->pos.f[0]; - // temp_f2_14 = arg0->pos.f[2] - // temp_f0_27 = arg0->pos.f[0] + sp418, - // temp_f2_15 = arg0->pos.f[2] + sp420 - // temp_f0_28 = arg0->pos.f[0], - // temp_f2_16 = arg0->pos.f[2] - // temp_f0_29 = arg0->pos.f[0] + sp424, - // temp_f2_17 = arg0->pos.f[2] + sp42C, - - if ((walkTilesBetweenPoints_NoCallback(&sp468, arg0->pos.f[0], arg0->pos.f[2], sp40C + (arg0->pos.f[0] + sp424), sp414 + (arg0->pos.f[2] + sp42C)) == 0) - || (walkTilesBetweenPoints_NoCallback(&sp468, sp40C + (arg0->pos.f[0] + sp424), sp414 + (arg0->pos.f[2] + sp42C), sp40C + (arg0->pos.f[0] + sp418), sp414 + (arg0->pos.f[2] + sp420)) == 0) - || (walkTilesBetweenPoints_NoCallback(&sp468, sp40C + arg0->pos.f[0] + sp418, sp414 + arg0->pos.f[2] + sp420, sp400 + arg0->pos.f[0] + sp418, sp408 + arg0->pos.f[2] + sp420) == 0) - || (walkTilesBetweenPoints_NoCallback(&sp468, sp400 + (arg0->pos.f[0] + sp418), sp408 + (arg0->pos.f[2] + sp420), sp400 + (arg0->pos.f[0] + sp424), sp408 + (arg0->pos.f[2] + sp42C)) == 0) - || (walkTilesBetweenPoints_NoCallback(&sp468, sp400 + arg0->pos.f[0] + sp424, sp408 + arg0->pos.f[2] + sp42C, sp40C + arg0->pos.f[0] + sp424, sp414 + arg0->pos.f[2] + sp42C) == 0)) - { - var_s2_5 = 0; - } - } - - if (var_s2_5 != 0) - { - sub_GAME_7F044B38(temp_s1); - sub_GAME_7F0402B4(arg0, &temp_s1->nextcol); - detonate_proxmine_In_range(&temp_s1->runtime_pos); - - if ((sp478 != NULL) - && (chrlvIsArrivingLaterallyAtPos(&sp450, &sp694, sp478, 100.0f) != 0)) - { - temp_s1->nextstep++; - if (temp_s1->path[temp_s1->nextstep].waypoints[0] < 0) - { - temp_s1->path = NULL; - temp_s1->speedaim = 0.0f; - temp_s1->speedtime60 = 60.0f; - } - } - } - else - { - if (temp_s1->speedtime60 < 0.0f) - { - temp_s1->speedaim = (f32) temp_s1->speed; - temp_s1->speedtime60 = 60.0f; - } - - temp_s1->speed = 0.0f; - temp_s1->roty = sp438; - temp_s1->turnrot60 = sp434; - arg0->stan = sp44C; - arg0->pos.f[0] = sp450.f[0]; - obj->runtime_pos.f[0] = sp450.f[0]; - arg0->pos.f[1] = sp450.f[1]; - obj->runtime_pos.f[1] = sp450.f[1]; - arg0->pos.f[2] = sp450.f[2]; - obj->runtime_pos.f[2] = sp450.f[2]; - - chrobjCollisionRelated(obj); - setupUpdateObjectRoomPosition(obj); - } - } - else - { - if (temp_s1->speedtime60 < 0.0f) - { - temp_s1->speedaim = (f32) temp_s1->speed; - temp_s1->speedtime60 = 60.0f; - } - - temp_s1->speed = 0.0f; - temp_s1->roty = sp438; - temp_s1->turnrot60 = sp434; - } - } - else if (temp_s1->flags & 0x20000000) - { - temp_s1->roty = atan2f(temp_s1->mtx.m[2][0], temp_s1->mtx.m[2][2]); - temp_s1->flags &= 0xDFFFFFFF; - sub_GAME_7F044B38(temp_s1); - } - } - // mips2c line 1754 - else if (obj->type == PROPDEF_AIRCRAFT) - { - struct AircraftRecord *temp_s1 = (struct AircraftRecord*)obj; - - ai((PropDefHeaderRecord*)temp_s1, 1); - - temp_s0_6 = temp_s1->model; - - if (temp_s0_6->anim != NULL) - { - setsuboffset(temp_s0_6, &temp_s1->runtime_pos); - - if (temp_s0_6->anim == animation_table_ptrs2[AIRCRAFT_ANIMATION_plane_runway]) - { - sub_GAME_7F06CE84(temp_s0_6, 10.438f); - setsubroty(temp_s1->model, 3.1415927f); - } - else if (bossGetStageNum() == LEVELID_STATUE) - { - sub_GAME_7F06CE84(temp_s1->model, 1.0438f); - setsubroty(temp_s1->model, 2.3561945f); - } - else if (bossGetStageNum() == LEVELID_FRIGATE) - { - sub_GAME_7F06CE84(temp_s1->model, 1.0438f); - setsubroty(temp_s1->model, 3.9269907f); - } - else - { - sub_GAME_7F06CE84(temp_s1->model, 1.0438f); - setsubroty(temp_s1->model, 0.0f); - } - - modelTickAnimQuarterSpeed(temp_s1->model, g_ClockTimer, 1); - subcalcpos(temp_s1->model); - getsuboffset(temp_s1->model, &temp_s1->runtime_pos); - arg0->pos.f[0] = temp_s1->runtime_pos.f[0]; - arg0->pos.f[2] = temp_s1->runtime_pos.f[2]; - - if (isNotBoundPad(temp_s1->pad)) - { - var_v1_4 = &g_CurrentSetup.pads[temp_s1->pad]; - } - else - { - var_v1_4 = (PadRecord *)&g_CurrentSetup.boundpads[getBoundPadNum(temp_s1->pad)]; - } - - arg0->pos.f[1] = temp_s1->runtime_pos.f[1] + var_v1_4->pos.f[1]; - temp_s1->runtime_pos.f[1] = arg0->pos.f[1]; - setsuboffset(temp_s1->model, &temp_s1->runtime_pos); - } - - var_f12_6 = temp_s1->speedtime60; - - if (var_f12_6 >= 0.0f) - { - if (var_f12_6 <= g_GlobalTimerDelta) - { - var_f12_6 = temp_s1->speedtime60; - temp_s1->speed = (f32) temp_s1->speedaim; - } - else - { - temp_s1->speed += (((temp_s1->speedaim - temp_s1->speed) * g_GlobalTimerDelta) / var_f12_6); - } - temp_s1->speedtime60 = (f32) (var_f12_6 - g_GlobalTimerDelta); - } - - if (temp_s1->rotaryspeedtime >= 0.0f) - { - if (temp_s1->rotaryspeedtime <= g_GlobalTimerDelta) - { - temp_s1->rotaryspeed = (f32) temp_s1->rotaryspeedaim; - } - else - { - var_f12_6 = temp_s1->rotaryspeed; - temp_s1->rotaryspeed += (((temp_s1->rotaryspeedaim - temp_s1->rotaryspeed) * g_GlobalTimerDelta) / temp_s1->rotaryspeedtime); - } - - temp_s1->rotaryspeedtime -= g_GlobalTimerDelta; - } - - var_s0_2 = 0; - - if (!(temp_s1->flags2 & 0x80000) - && (objIsHealthy(obj) != 0) - && (temp_s1->rotaryspeed != 0.0f) - && !(temp_s1->flags & 0x20000000)) - { - var_s0_2 = sub_GAME_7F053894(&temp_s1->runtime_pos, 5000.0f, 6000.0f); - } - - if (var_s0_2 > 0) - { - if (((temp_s1->Sound == NULL) || (sndGetPlayingState(temp_s1->Sound) == 0)) && (lvlGetControlsLockedFlag() == 0)) - { - sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, HELI_RUN_SFX, temp_s1->Sound); - } - - if (temp_s1->Sound != NULL) - { - sndCreatePostEvent(temp_s1->Sound, 8, var_s0_2); - } - } - else - { - if ((temp_s1->Sound != NULL) && (sndGetPlayingState(temp_s1->Sound) != 0)) - { - sndDeactivate(temp_s1->Sound); - } - } - } - } - - // mips2c line 1860 - if (obj->type == PROPDEF_TINTED_GLASS) - { - struct TintedGlassRecord *tinted_glass = (struct TintedGlassRecord *)arg0->obj; - - tinted_glass->calculatedopacity = glassCalculateOpacity( - &obj->runtime_pos, - tinted_glass->TintDist, - tinted_glass->CullDist, - tinted_glass->unk90); - - if ((tinted_glass->unk8C >= 0) && (sp674 == 1)) - { - if (tinted_glass->calculatedopacity == 0xFF) - { - bgToggleDataPortalsContrlBytes1Bit1(tinted_glass->unk8C, 0); - } - else - { - bgToggleDataPortalsContrlBytes1Bit1(tinted_glass->unk8C, 1); - } - } - - sp670 = 0; - } - // mips2c line 1879 - else if (obj->type == PROPDEF_DOOR && ((struct DoorRecord*)obj)->doorFlags & 0x2) - { - struct DoorRecord *door = (struct DoorRecord *)arg0->obj; - - var_s2_6 = 1; - door->calculatedopacity = glassCalculateOpacity(&obj->runtime_pos, door->TintDist, door->CullDist, 0.0f); - - if (sp674 == 1) - { - if ((door->calculatedopacity != 0xFF) || (door->openPosition > 0.0f)) - { - var_s2_6 = 0; - } - - temp_v0_29 = model->obj; - - if ((&skeleton_door == temp_v0_29->Skeleton) - && ((modelGetNodeRwData(model, temp_v0_29->Switches[0]))->Header.unk00 == 0)) - { - var_s2_6 = 0; - } - - if (var_s2_6 != 0) - { - doorDeactivatePortal(door); - } - else - { - doorActivatePortal(door); - } - } - } - - // mips2c line 1905 - if (obj->type == PROPDEF_TANK && (get_ptr_for_players_tank() == arg0)) - { - var_v1_5 = 1; - } - else - { - if (obj->flags2 & 0x04000000) - { - var_v1_5 = 1; - } - else - { - var_v1_5 = 0; - - if (!(obj->runtime_bitflags & 0x800) && !(obj->flags2 & 0x80000)) - { - var_v1_5 = sub_GAME_7F054D6C(arg0, &obj->runtime_pos, getinstsize(model), sp670); - } - } - } - - // mips2c line 1926 - if (var_v1_5 != 0) - { - if (sp678 != 0) - { - update_color_shading(&obj->shadecol, &obj->nextcol); - } - - arg0->flags |= 2; - model->render_pos = dynAllocate(model->obj->numMatrices << 6); - // model->render_pos = temp_v0_30 - - if (obj->type == PROPDEF_DOOR) - { - sp39C = (struct DoorRecord *)arg0->obj; - - door7F0526EC(sp39C, (Mtxf *)model->render_pos); - matrix_4x4_multiply_homogeneous_in_place(camGetWorldToScreenMtxf(), (Mtxf *)model->render_pos); - - temp_v0_31 = model->obj; - - if (&skeleton_eyelid_door == temp_v0_31->Skeleton) - { - temp_a1_4 = &model->render_pos[1].pos; - temp_s0_10 = (Mtxf *)temp_v0_31->Switches[0]->Data; - - sp394 = 6.2831855f - ((sp39C->openPosition * 6.2831855f) / 360.0f); - - matrix_4x4_set_rotation_around_x(sp394, temp_a1_4); - matrix_4x4_set_position((struct coord3d *)temp_s0_10, temp_a1_4); - matrix_4x4_multiply_in_place((Mtxf *)model->render_pos, temp_a1_4); - - temp_a1_4 = &model->render_pos[2].pos; - temp_s0_10 = (Mtxf *)temp_v0_31->Switches[1]->Data; - - matrix_4x4_set_rotation_around_x(6.2831855f - sp394, temp_a1_4); - matrix_4x4_set_position((struct coord3d *)temp_s0_10, temp_a1_4); - matrix_4x4_multiply_in_place((Mtxf *)model->render_pos, temp_a1_4); - } - else if (&skeleton_iris_door == temp_v0_31->Skeleton) - { - sp384 = (sp39C->openPosition * 6.2831855f) / 360.0f; - - temp_f0_31 = sp39C->maxFrac * 0.3f; - if (temp_f0_31 < sp39C->openPosition) - { - sp380 = (((sp39C->maxFrac * (sp39C->openPosition - temp_f0_31)) / (sp39C->maxFrac - temp_f0_31)) * 6.2831855f) / 360.0f; - - if (sp678 != 0) - { - if (sp67C <= temp_f0_31) - { - chrobjSndCreatePostEventDefault(sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, METAL_SLIDE_OPEN_SFX, NULL), &arg0->pos); - } - } - } - else - { - sp380 = 0.0f; - - if (sp678 != 0) - { - if (temp_f0_31 < sp67C) - { - chrobjSndCreatePostEventDefault(sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, METAL_SLIDE_CLOSE_SFX, NULL), &arg0->pos); - } - } - } - - for (sp38C = 0; sp38C < 6; sp38C++) - { - temp_v0_32 = sp38C * 2; - - sp390 = (Mtxf *)model->obj->Switches[temp_v0_32 + 1]->Data; - temp_a1_6 = &model->render_pos[temp_v0_32 + 1].pos; - matrix_4x4_set_rotation_around_z(sp380, temp_a1_6); - matrix_4x4_set_position((struct coord3d *)sp390, temp_a1_6); - matrix_4x4_multiply_in_place((Mtxf *)model->render_pos, temp_a1_6); - - sp390 = (Mtxf *)model->obj->Switches[temp_v0_32 + 2]->Data; - temp_a1_6 = &model->render_pos[temp_v0_32 + 2].pos; - matrix_4x4_set_rotation_around_z(sp384, temp_a1_6); - matrix_4x4_set_position((struct coord3d *)sp390, temp_a1_6); - matrix_4x4_multiply_in_place(temp_a1_6, temp_a1_6); - } - } - } - // mips2c line 2018 - else - { - matrix_4x4_copy(&obj->mtx, &sp3A4); - matrix_4x4_set_position(&obj->runtime_pos, &sp3A4); - matrix_4x4_multiply_homogeneous(camGetWorldToScreenMtxf(), &sp3A4, model->render_pos); - - if (obj->type == PROPDEF_CCTV) - { - struct CCTVRecord *sp370 = (struct CCTVRecord *)arg0->obj; - - var_f12_7 = sp370->unkC8; - temp_s0_13 = (struct coord3d *)model->obj->Switches[0]->Data; - - if (var_f12_7 < 0.0f) - { - var_f12_7 += 6.2831855f; - } - else if (var_f12_7 >= 6.2831855f) - { - var_f12_7 -= 6.2831855f; - } - - matrix_4x4_set_rotation_around_y(var_f12_7, &sp320); - - matrix_4x4_multiply(&sp320, &sp370->unk84, &model->render_pos[1].pos); - - sp360.f[0] = temp_s0_13->f[0]; - sp360.f[1] = temp_s0_13->f[1]; - sp360.f[2] = temp_s0_13->f[2]; - - mtx4TransformVecInPlace(&sp3A4, &sp360); - matrix_4x4_set_position(&sp360, &model->render_pos[1].pos); - matrix_4x4_multiply_homogeneous_in_place(camGetWorldToScreenMtxf(), &model->render_pos[1].pos); - } - // mips2c line 2050 - else if (obj->type == PROPDEF_AUTOGUN) - { - struct AutogunRecord *sp318 = (struct AutogunRecord *)arg0->obj; - - sp304 = sp318->unk90 + 1.5707964f; - sp300 = -sp318->unk9C; - if (sp304 >= 6.2831855f) - { - sp304 -= 6.2831855f; - } - - temp_s0_14 = model->obj->Switches[1]->Data; - sp308.f[0] = temp_s0_14->f[0]; - sp308.f[1] = temp_s0_14->f[1]; - sp308.f[2] = temp_s0_14->f[2]; - mtx4TransformVecInPlace(&sp3A4, &sp308); - matrix_4x4_set_rotation_around_y(sp304, &model->render_pos[1].pos); - matrix_4x4_set_position(&sp308, &model->render_pos[1].pos); - matrix_scalar_multiply(sp318->model->scale, sp6C->m[0]); - matrix_4x4_multiply_homogeneous_in_place(camGetWorldToScreenMtxf(), sp6C); - - matrix_4x4_set_rotation_around_z(sp300, &model->render_pos[2].pos); - matrix_4x4_set_position((struct coord3d*)model->obj->Switches[2]->Data, &model->render_pos[2].pos); - matrix_4x4_multiply_homogeneous_in_place(sp6C, &model->render_pos[2].pos); - - if (model->obj->Switches[3] != NULL) - { - sp2FC = modelFindNodeMtx(model, model->obj->Switches[3], 0); - matrix_4x4_set_rotation_around_x(sp318->unkB4, sp2FC); - matrix_4x4_set_position(model->obj->Switches[3]->Data, sp2FC); - matrix_4x4_multiply_homogeneous_in_place(model->obj->Switches[2]->Data, sp2FC); - } - - if (model->obj->Switches[4] != NULL) - { - sp2FC = modelFindNodeMtx(model, model->obj->Switches[4], 0); - matrix_4x4_set_identity_and_position(model->obj->Switches[4]->Data, sp2FC); - matrix_4x4_multiply_homogeneous_in_place(model->obj->Switches[2]->Data, sp2FC); - } - - if (model->obj->Switches[7] != NULL) - { - sp2FC = modelFindNodeMtx(model, model->obj->Switches[7], 0); - matrix_4x4_set_rotation_around_x(sp318->unkB4, sp2FC); - matrix_4x4_set_position(model->obj->Switches[7]->Data, sp2FC); - matrix_4x4_multiply_homogeneous_in_place(model->obj->Switches[2]->Data, sp2FC); - } - } - // mips2c line 2065 - else if (obj->type == PROPDEF_COLLECTABLE) - { - for (sp2F8 = 1; sp2F8 < model->obj->numMatrices; sp2F8++) - { - matrix_4x4_set_identity(&model->render_pos[sp2F8].pos); - } - } - // mips2c line 2081 - else if (obj->type == PROPDEF_RACK) - { - matrix_4x4_set_identity_and_position(model->obj->Switches[0]->Data, &model->render_pos[1].pos); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[0].pos, &model->render_pos[1].pos); - - matrix_4x4_set_identity_and_position(model->obj->Switches[1]->Data, &model->render_pos[2].pos); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[0].pos, &model->render_pos[2].pos); - - matrix_4x4_set_identity_and_position(model->obj->Switches[2]->Data, &model->render_pos[3].pos); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[0].pos, &model->render_pos[3].pos); - - matrix_4x4_set_identity_and_position(model->obj->Switches[3]->Data, &model->render_pos[4].pos); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[0].pos, &model->render_pos[4].pos); - } - // mips2c line 2099 - else if (obj->type == PROPDEF_VEHICHLE) - { - struct VehichleRecord *temp_s1 = (struct VehichleRecord *)obj; - - var_f0_3 = 0.0f; - - temp_v1_7 = model->obj->Switches; - sp260 = temp_v1_7[1]->Data; - sp25C = temp_v1_7[2]->Data; - sp258 = temp_v1_7[3]->Data; - sp254 = temp_v1_7[4]->Data; - temp_v0_40 = temp_v1_7[5]->Data; - - if (sp678 != 0) - { - var_f0_3 = (temp_s1->speed * g_GlobalTimerDelta * 6.2831855f) / ((temp_v0_40[4] - temp_v0_40[3]) * model->scale * 6.2831855f * 0.5f); - - temp_s1->wheelxrot += var_f0_3; - - while (temp_s1->wheelxrot >= 6.2831855f) - { - temp_s1->wheelxrot -= 6.2831855f; - } - - while (temp_s1->wheelxrot < 0.0f) - { - temp_s1->wheelxrot += 6.2831855f; - } - } - - temp_s1->wheelxrot += var_f0_3; - - while (temp_s1->wheelxrot >= 6.2831855f) - { - temp_s1->wheelxrot -= 6.2831855f; - } - - while (temp_s1->wheelxrot < 0.0f) - { - temp_s1->wheelxrot += 6.2831855f; - } - - matrix_4x4_set_rotation_around_x(temp_s1->wheelxrot, &sp2AC); - - if (temp_s1->speed > 0.0f) - { - sp24C = temp_s1->turnrot60; - sp250 = (sp258->f[2] - sp260->f[2]) * model->scale; - if (sp24C < 0.0f) - { - sp24C = -sp24C; - } - - sp248 = sinf(sp24C) * sp250; - temp_s1->wheelyrot = atan2f(sp248, (cosf(sp24C) * sp250) - (sp250 - temp_s1->speed)); - - if (temp_s1->wheelyrot < sp24C) - { - temp_s1->wheelyrot = sp24C; - } - - if (temp_s1->turnrot60 > 0.0f) - { - temp_s1->wheelyrot = (6.2831855f - temp_s1->wheelyrot); - } - } - - matrix_4x4_set_rotation_around_y(temp_s1->wheelyrot, &sp26C); - matrix_4x4_copy(&sp2AC, &model->render_pos[3].pos); - matrix_4x4_set_position(sp258, &model->render_pos[3].pos); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[0].pos, &model->render_pos[3].pos); - - matrix_4x4_copy(&sp2AC, &model->render_pos[4].pos); - matrix_4x4_set_position(sp254, &model->render_pos[4].pos); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[0].pos, &model->render_pos[4].pos); - matrix_4x4_multiply_homogeneous_in_place(&sp26C, &sp2AC); - - matrix_4x4_copy(&sp2AC, &model->render_pos[1].pos); - matrix_4x4_set_position(sp260, &model->render_pos[1].pos); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[0].pos, &model->render_pos[1].pos); - - matrix_4x4_copy(&sp2AC, &model->render_pos[2].pos); - matrix_4x4_set_position(sp25C, &model->render_pos[2].pos); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[0].pos, &model->render_pos[2].pos); - } - // mips2c line 2187 - else if (obj->type == PROPDEF_AIRCRAFT) - { - struct AircraftRecord *temp_s1 = (struct AircraftRecord*)obj; - - //temp_a1_19 = model->render_pos[1]; - sp1FC = model->obj->Switches[2]->Data; - - if ((g_ClockTimer > 0) && (sp678 != 0)) - { - temp_s1->rotoryrot += temp_s1->rotaryspeed; - - while (temp_s1->rotoryrot >= 6.2831855f) - { - temp_s1->rotoryrot -= 6.2831855f; - } - - while (temp_s1->rotoryrot < 0.0f) - { - temp_s1->rotoryrot += 6.2831855f; - } - } - - if (temp_s1->model->anim != NULL) - { - sp1B0 = D_80030B34; - - sp1B0.unk_matrix = camGetWorldToScreenMtxf(); - sp1B0.mtxlist = &model->render_pos[0].pos; - subcalcmatrices(&sp1B0, temp_s1->model); - } - else - { - matrix_4x4_copy(&model->render_pos[0].pos, &model->render_pos[1].pos); - } - - if (temp_s1->flags & 0x20000000) - { - matrix_4x4_set_rotation_around_z(temp_s1->rotoryrot, &sp200); - } - else - { - matrix_4x4_set_rotation_around_y(temp_s1->rotoryrot, &sp200); - } - - matrix_4x4_copy(&sp200, &model->render_pos[2].pos); - matrix_4x4_set_position(sp1FC, &model->render_pos[2].pos); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[1].pos, &model->render_pos[2].pos); - - var_v1_7 = model->obj->Switches; - - if (var_v1_7[3] != NULL) - { - temp_s0_21 = modelFindNodeMtx(model, var_v1_7[3], 0); - matrix_4x4_set_rotation_around_x(temp_s1->rotoryrot, &sp200); - matrix_4x4_copy(&sp200, temp_s0_21); - matrix_4x4_set_position(var_v1_7[3]->Data, temp_s0_21); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[1].pos, temp_s0_21); - } - - if (var_v1_7[4] != NULL) - { - temp_s0_21 = modelFindNodeMtx(model, var_v1_7[4], 0); - matrix_4x4_set_identity_and_position(var_v1_7[4]->Data, temp_s0_21); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[1].pos, temp_s0_21); - } - } - // mips2c line 2258 - else - { - if (obj->type == PROPDEF_TANK) - { - struct TankRecord *temp_s1 = (struct TankRecord*)obj; - - temp_v1_8 = model->obj->Switches; - - sp168 = temp_v1_8[1]->Data; - sp164 = temp_v1_8[3]->Data; - sp160 = temp_v1_8[4]->Data; - sp15C = temp_v1_8[2]->Data; - sp158 = temp_v1_8[6]->Data; - - sp154 = -temp_s1->turret_vertical_angle; - if (sp154 < 0.0f) - { - sp154 += 6.2831855f; - } - - var_f12_9 = -temp_s1->turret_orientation_angle; - if (var_f12_9 < 0.0f) - { - var_f12_9 += 6.2831855f; - } - - matrix_4x4_set_rotation_around_y(var_f12_9, &model->render_pos[1].pos); - matrix_4x4_set_position(sp168, &model->render_pos[1].pos); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[0].pos, &model->render_pos[1].pos); - - matrix_4x4_set_rotation_around_x(sp154, &model->render_pos[3].pos); - matrix_4x4_set_position(sp164, &model->render_pos[3].pos); - matrix_4x4_multiply_homogeneous_in_place(sp6C, &model->render_pos[3].pos); - - matrix_4x4_set_rotation_around_y(1.5707964f, &model->render_pos[4].pos); - matrix_4x4_set_position(sp160, &model->render_pos[4].pos); - matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[3].pos, &model->render_pos[4].pos); - - matrix_4x4_set_identity_and_position(sp15C, &model->render_pos[2].pos); - matrix_4x4_multiply_homogeneous_in_place(sp6C, &model->render_pos[2].pos); - matrix_4x4_multiply_homogeneous(currentPlayerGetMatrix10D4(), &model->render_pos[1].pos, &sp16C); - - sub_GAME_7F03F540(sp158, &sp16C, &temp_s1->rect, temp_s1->unk80); - - if (model->obj->Switches[7] != NULL) - { - modelGetNodeRwData(model, model->obj->Switches[7])->Header.unk00 = (s16) temp_s1->is_firing_tank; - } - - if (model->obj->Switches[8] != NULL) - { - modelGetNodeRwData(model, model->obj->Switches[8])->Header.unk00 = 0; - } - } - } - } - - modelUpdateRelationsQuick(model, model->obj->RootNode); - arg0->Unk18 = -model->render_pos[0].pos.m[3][2]; - - chrobjWeaponTick(arg0); - - sp684 = arg0->child; - - while (sp684 != NULL) - { - sub_GAME_7F0442DC(sp684); - sp684 = sp684->prev; - } - } - else - { - arg0->flags &= 0xFFFD; - - chrobjWeaponTick(arg0); - - sp684 = arg0->child; - - while (sp684 != NULL) - { - sub_GAME_7F04424C(sp684); - sp684 = sp684->prev; - } - } - - if (obj->runtime_bitflags & 0x100) - { - obj->runtime_bitflags &= ~0x100; - - maybe_detonate_object( - obj, - (RANDOMGETNEXT_F32() * 4.0f) + 2.0f, - &arg0->pos, - ITEM_UNARMED, - (s32) ((u32) (obj->runtime_bitflags & RUNTIMEBITFLAG_OWNER) >> RUNTIMEBITSHIFT_OWNER)); - } - - if (sp678 != 0) - { - if (obj->type == PROPDEF_DOOR) - { - sub_GAME_7F053A3C((struct DoorRecord *)arg0->obj); - } - // mimps2c line 2355 - else if ((obj->type == PROPDEF_AUTOGUN) && (lvlGetControlsLockedFlag() == 0)) - { - struct AutogunRecord *autogun = (struct AutogunRecord*)arg0->obj; - // autogun is temp_s0_24 - - sp13C = 0; - sp138 = 0; - - if ((autogun->is_active != 0) && !(obj->flags & 0x10000000)) - { - autogun->unkAC = (autogun->unkAC + 1) & 1; - - sp13C = autogun->unkAC == 0; - - if (model->obj->Switches[5] != 0) - { - sp138 = autogun->unkAC == 1; - } - - if (autogun->unkC0 < g_GlobalTimer) - { - if ((autogun->unkC4 != NULL) && (sndGetPlayingState(autogun->unkC4) != 0)) - { - sndDeactivate(autogun->unkC4); - } - - if ((autogun->unkC8 != NULL) && (sndGetPlayingState(autogun->unkC8) != 0)) - { - sndDeactivate(autogun->unkC8); - } - - if (autogun->unkC4 == NULL) - { - sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, GUN_B9_CANNON_SHORT_SFX, autogun->unkC4); - chrobjSndCreatePostEventDefault(autogun->unkC4, &arg0->pos); - } - else if (autogun->unkC8 == NULL) - { - sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, GUN_B9_CANNON_SHORT_SFX, autogun->unkC8); - chrobjSndCreatePostEventDefault(autogun->unkC8, &arg0->pos); - } - - autogun->unkC0 = (s32) (g_GlobalTimer + 2); - } - - // mmips2c line 2396 - if ((sp13C != 0) || (sp138 != 0)) - { - sp11C = 1; - sp10C = NULL; - sp108 = arg0->stan; - sp104 = (autogun->unkAC & 3) == 0; - sp100 = get_curplayer_positiondata(); - var_a0_6 = 5; - temp_v1_10 = model->obj->Switches; - - if ((model->obj->Switches[7] != 0) && !(autogun->unkAC & 7)) - { - var_a0_6 = 7; - } - - if ((arg0->flags & 2) && temp_v1_10[var_a0_6] != NULL) - { - temp_s2_7 = modelFindNodeMtx(model, temp_v1_10[var_a0_6], 0); - temp_v1_11 = model->obj->Switches[var_a0_6]->Data; - sp12C.f[0] = temp_v1_11->f[0]; - sp12C.f[1] = temp_v1_11->f[1]; - sp12C.f[2] = temp_v1_11->f[2]; - matrix_4x4_multiply_homogeneous(currentPlayerGetMatrix10D4(), temp_s2_7, &spB8); - mtx4TransformVecInPlace(&spB8, &sp12C); - if (walkTilesBetweenPoints_NoCallback(&sp108, arg0->pos.f[0], arg0->pos.f[2], sp12C.f[0], sp12C.f[2]) == 0) - { - sp12C.f[0] = arg0->pos.f[0]; - sp12C.f[1] = arg0->pos.f[1]; - sp12C.f[2] = arg0->pos.f[2]; - } - } - else - { - sp12C.f[0] = arg0->pos.f[0]; - sp12C.f[1] = arg0->pos.f[1]; - sp12C.f[2] = arg0->pos.f[2]; - } - - sp120.f[0] = cosf(autogun->unk9C) * sinf(autogun->unk90); - sp120.f[1] = sinf(autogun->unk9C); - sp120.f[2] = cosf(autogun->unk9C) * cosf(autogun->unk90); - - sp110.f[0] = (sp120.f[0] * 65536.0f) + sp12C.f[0]; - sp110.f[1] = (sp120.f[1] * 65536.0f) + sp12C.f[1]; - sp110.f[2] = (sp120.f[2] * 65536.0f) + sp12C.f[2]; - - sub_GAME_7F0B1CC4(); - - // mmips2c line 2441 - if (sub_GAME_7F0B0E24(&sp108, sp12C.f[0], sp12C.f[2], sp110.f[0], sp110.f[2], 2, 100.0f, 100.0f, 0.0f, 1.0f) == 0) - { - chrlvStanLineDirIntersection(&sp12C, &sp120, &sp110); - sp10C = sp108; - sp110.f[0] -= 26.0f * sp120.f[0]; - sp110.f[1] -= 26.0f * sp120.f[1]; - sp110.f[2] -= 26.0f * sp120.f[2]; - } - - if (g_GlobalTimer == (s32) autogun->unkBC) - { - temp_fc3d_a.f[0] = sp100->pos.f[0] - sp12C.f[0]; - temp_fc3d_a.f[1] = sp100->pos.f[1] - sp12C.f[1]; - temp_fc3d_a.f[2] = sp100->pos.f[2] - sp12C.f[2]; - - temp_f20_4 = (temp_fc3d_a.f[0] * temp_fc3d_a.f[0]) + (temp_fc3d_a.f[1] * temp_fc3d_a.f[1]) + (temp_fc3d_a.f[2] * temp_fc3d_a.f[2]); - - temp_fc3d_b.f[0] = sp110.f[0] - sp12C.f[0]; - temp_fc3d_b.f[1] = sp110.f[1] - sp12C.f[1]; - temp_fc3d_b.f[2] = sp110.f[2] - sp12C.f[2]; - - if ((temp_f20_4 <= ((temp_fc3d_b.f[0] * temp_fc3d_b.f[0]) + (temp_fc3d_b.f[1] * temp_fc3d_b.f[1]) + (temp_fc3d_b.f[2] * temp_fc3d_b.f[2]))) - && (bondviewGetIfCurrentPlayerDamageShowTime() == 0)) - { - temp_f0_35 = sqrtf(temp_f20_4); - var_f2_7 = 0.16f * g_GlobalTimerDelta * F_80030B1C; - - if (temp_f0_35 > 200.0f) - { - var_f2_7 *= 200.0f / temp_f0_35; - } - - autogun->unkD4 += var_f2_7; - - if (autogun->unkD4 >= 1.0f) - { - bondviewCallRecordDamageKills(bondwalkItemGetDestructionAmount(ITEM_FNP90) * 0.125f * F_80030B20, autogun->unk90, -1, 1); - - autogun->unkD4 = 0.0f; - - if (bondviewGetIfCurrentPlayerDamageShowTime() != 0) - { - sp11C = 0; - } - } - } - } - - // mips2c line 2479 - if (sp11C != 0) - { - if (sp10C != NULL) - { - sub_GAME_7F0A3E1C(&sp110, 1, 26.0f, (s16) sp10C->room); - } - - recall_joy2_hits_edit_flag(ITEM_FNP90, &sp110, -1); - } - else - { - sp110.f[0] = sp100->pos.f[0]; - sp110.f[1] = sp100->pos.f[1]; - sp110.f[2] = sp100->pos.f[2]; - - recall_joy2_hits_edit_detail_edit_flag(ITEM_FNP90, sp100, -1); - } - - // mips2c line 2494 - if (sp104 != 0) - { - beam = autogun->beam; - - beam->from.f[0] = sp12C.f[0]; - beam->from.f[1] = sp12C.f[1]; - beam->from.f[2] = sp12C.f[2]; - - beam->dir.f[0] = sp110.f[0] - beam->from.f[0]; - beam->dir.f[1] = sp110.f[1] - beam->from.f[1]; - beam->dir.f[2] = sp110.f[2] - beam->from.f[2]; - - sp94 = sqrtf((beam->dir.f[2] * beam->dir.f[2]) + ((beam->from.f[0] * beam->from.f[0]) + (beam->from.f[1] * beam->from.f[1]))); - - temp_f2_23 = 1.0f / sp94; - - beam->dir.f[0] = (f32) (beam->dir.f[0] * temp_f2_23); - beam->dir.f[1] = (f32) (beam->dir.f[1] * temp_f2_23); - beam->dir.f[2] = (f32) (beam->dir.f[2] * temp_f2_23); - - if (sp94 > 10000.0f) - { - sp94 = 10000.0f; - } - - beam->age = 0; - beam->weaponnum = ITEM_FNP90; - beam->maxdist = sp94; - - if (sp94 < 500.0f) - { - sp94 = 500.0f; - } - - /* At some point the developers where exploring a laser auto turret */ - if (beam->weaponnum == ITEM_LASER) - { - beam->speed = 0.25f * sp94; - beam->mindist = 0.6f * sp94; - - if (beam->mindist > 3000.0f) - { - beam->mindist = 3000.0f; - } - - var_f4 = (-0.1f - (RANDOMGETNEXT_F32() * 0.3f)) * sp94; - } - else - { - beam->speed = 0.2f * sp94; - beam->mindist = 0.2f * sp94; - - if (beam->mindist > 3000.0f) - { - beam->mindist = 3000.0f; - } - - var_f4 = ((2.0f * RANDOMGETNEXT_F32()) - 1.0f) * beam->speed; - } - - beam->dist = var_f4; - } - } - } - - // mmips2c line 2553 - if (model->obj->Switches[5] != NULL) - { - modelGetNodeRwData(model, model->obj->Switches[5])->Header.unk00 = (s16) sp13C; - } - - if (model->obj->Switches[7] != NULL) - { - modelGetNodeRwData(model, model->obj->Switches[7])->Header.unk00 = (s16) sp138; - } - } - - objDropRecursively(arg0); - } - - if (sp680 == 5) - { - arg0->stan = NULL; - } - - return sp680; -} + Mtxf *mtxs; + f32 temp_f14_3; + struct coord3d RocketCurrent; + s32 objMovedThisFrame; + f32 temp_f20; + f32 nextVerticalSpeed; + struct PropRecord *sp684; + TICKOP tickop; + f32 previousOpenPosition; // Start-of-tick snapshot for how open a door is. + + /** + * Relevant only for MP. TRUE on the one pass per frame that advances this object's + * shared state (projectile physics, door sounds) -- things you want to calculate + * only once per frame, not for every player per frame. Normally applies to + * first player in the shuffled order determined by get_player_position_in_shuffled(). + * But for an in-flight projectile it applies to the player who fired it. + * Code outside this guard is per-viewport render setup and runs every pass. + */ + bool isSimOwner; + + s32 playerCount; + bool applyFogCull; + struct ALSoundState *sfx_state; + s32 projectileAlive; + + /** + * 0 - the move was blocked by geometry + * 1 - the move completed unobstructed + * 2 - the move was blocked and the caller asked for embedding + */ + s32 moveResult; + + struct coord3d sp658; + struct coord3d sp64C; + struct WeaponObjRecord *weaponObj; + f32 temp_f12_5; + struct ModelRoData_BoundingBoxRecord *projectileBBox; + f32 sp63C; + f32 bboxBottomOffset; + struct coord3d previousXAxis; // snapshot of the object's local X axis before this tick's rotation + struct coord3d collisionNormal; + struct coord3d collisionPoint; + s32 hitGround; + s32 bounceCondition; + struct Projectile *projectile; + s32 projectileStopped; + struct coord3d pad5F8; + struct coord3d pad5EC; + f32 temp_f0_13; + s32 cctvSeesPlayer; + f32 var_f2; + f32 temp_f0_14; + f32 angleDelta; + struct coord3d bloodStainPos; + Mtxf inverseNodeMatrix; + Mtxf *temp_s0_10; + f32 previousVerticalSpeed; + struct PropRecord *playerProp2; + f32 yawError; + s32 var_v0_3; + f32 var_f0_2; + f32 m_PropGravity; + struct coord3d sp564; + f32 temp_f0_31; + f32 sp550[4]; + struct ModelRoData_BoundingBoxRecord *objectBBox; + s32 sp548; + struct coord3d sp53C; + struct coord3d sp530; +#if defined(VERSION_JP) || defined(VERSION_EU) + u32 jp_stack_pad[1]; +#endif + s32 temp_v0_32; + s32 *temp_a1_6; + f32 angleDelta_7; + struct coord3d *temp_s0_13; + struct coord3d *temp_s0_14; + f32 m_RocketGravity; + struct PropRecord *playerProp; + f32 xdiff; + f32 ydiff; + struct ModelNode **temp_v1_7; + f32 var_f0_3; + struct Projectile *temp_v0_40; + waypoint *currentWaypoint; + Mtxf *temp_s0_21; + struct WeaponObjRecord *airborneWeapon; + struct StandTile *sp4F0; + f32 angleDelta_9; + s32 var_a0_6; + struct WeaponObjRecord * temp_v1_10; + Mtxf *temp_s2_7; + struct Projectile * Rocket; + f32 sp4D8; + f32 targetPitch; + struct coord3d *temp_v1_11; + f32 temp_f20_4; + f32 temp_f0_35; + struct coord3d playerDirVec; + f32 horizontalDistSq; + f32 distanceToPlayer; + f32 horizontalDist; + s32 AutogunSeesPlayer; + s32 isTracking; + s32 hasLineOfSight; + f32 sp4A0; + f32 playerYaw; + f32 playerPitch; + f32 sp494; + struct StandTile *collisionTile; + f32 angleDelta_6; + f32 var_f2_7; + f32 temp_f2_23; + struct ObjectRecord *obj; + f32 targetYaw; + struct coord3d *waypointPosition; + struct Model *model; + f32 temp_f12; + bool canEmbed; + struct StandTile *currentTile; + s32 var_a0; + f32 sp460; + struct StandTile *temp_s2; + struct coord3d sp450; + struct StandTile *nextTile; + f32 temp_f14_2; + struct coord3d forwardDir; + f32 previousYaw; + f32 sp434; + f32 truckAngularVelocity; + struct coord3d vec424; + struct coord3d vec418; + struct coord3d vec40C; + struct coord3d vec400; + struct ObjectRecord *temp_v0_31; + struct CCTVRecord * bottom_pad; + Mtxf *objectMatrix; + Mtxf *projectileMatrix; + u32 pad3E4[3]; + Mtxf tempMatrix2; + u32 pad3A0; + struct DoorRecord *sp39C; + u32 render_pad398; + f32 sp394; + Mtxf *sp390; + s32 sp38C; + Mtxf * render_pad388; + f32 sp384; + f32 sp380; + u32 tempMatrix_head[3]; + struct CCTVRecord *sp370; + struct DoorRecord * pad36C; + struct coord3d sp360; + Mtxf tempMatrix; + struct AutogunRecord * poAGun; + struct AutogunRecord *sp318; + struct VehichleRecord * poTruck; + struct coord3d sp308; + f32 sp304; + f32 sp300; + Mtxf *sp2FC; + s32 sp2F8; + struct AircraftRecord * render_pad2F4; + u32 pad2EC[2]; + Mtxf sp2AC; + Mtxf sp26C; + struct TintedGlassRecord * pad268; + f32 var_f2_6; + struct coord3d *sp260; + struct coord3d *sp25C; + struct coord3d *sp258; + struct coord3d *sp254; + f32 sp250; + f32 sp24C; + f32 sp248; + s32 var_v1_5; + s32 truckShouldPlayEngineSound; + Mtxf sp200; + struct coord3d *sp1FC; + struct PadRecord *var_v1_4; + struct ModelFileHeader *temp_v0_29; + s32 var_s2_6; + ModelRenderData sp1B0; + struct DoorRecord * pad1AC; + Mtxf sp16C; + struct DoorRecord * door; + struct coord3d *sp164; + struct coord3d *sp160; + struct coord3d *sp15C; + struct ModelRoData_BoundingBoxRecord *sp158; + f32 sp154; + bool moveOnlyIfPathClear; + struct Model *temp_s0_6; + f32 *temp_v0_25; + struct coord3d *sp168; + f32 *temp_s0_5; + s32 sp13C; + s32 sp138; + struct coord3d sp12C; + struct coord3d sp120; + s32 sp11C; + struct coord3d sp110; + struct StandTile *sp10C; + struct StandTile *sp108; + s32 sp104; + struct PropRecord *sp100; + struct beam *beam; + s32 var_s2_5; + Mtxf spB8; + + obj = prop->obj; + model = obj->model; + + objMovedThisFrame = 0; + tickop = TICKOP_NONE; + + /** + * Since objMovedThisFrame and tickop are both set to 0 right above here, + * this condition can never be true. previousOpenPosition is unitialized so even if this did execute + * it would subtract from garbage. But that wouldn't matter since previousOpenPosition is set 0.0f right after this anyway. + */ + if (objMovedThisFrame > tickop) + { + previousOpenPosition -= (getjointsize(g_CurrentProjectileModel, dword_CODE_bss_80075B74) * 0.5f) * flt_CODE_bss_80075B88.f[0]; + } + + previousOpenPosition = 0.0f; + playerCount = getPlayerCount(); + applyFogCull = TRUE; + + if (obj->runtime_bitflags & RUNTIMEBITFLAG_REMOVE) + { + objFree(obj, 0, obj->state & PROPSTATE_RESPAWN); + return 1; + } + else if (obj->runtime_bitflags & RUNTIMEBITFLAG_ISRETICK) + { + obj->runtime_bitflags &= ~RUNTIMEBITFLAG_ISRETICK; + } + else if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) + { + prop->flags &= 0xFFFD; + obj->runtime_bitflags |= RUNTIMEBITFLAG_ISRETICK; + return 3; + } + + if (playerCount == 1) + { + isSimOwner = TRUE; + } + else + { + isSimOwner = get_player_position_in_shuffled(get_cur_playernum()) == 0; + + if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) + { + projectile = obj->projectile; + + if (projectile->ownerprop != NULL +#if defined(VERSION_JP) || defined(VERSION_EU) + && getPlayerPointerIndex(projectile->ownerprop) >= 0 +#endif + ) + + isSimOwner = projectile->ownerprop == g_CurrentPlayer->prop; + + } + } + + /** + * sp100 is a PropRecord* but is used to store a color here. It should really be two + * separate variables, and probably was, but got merged during decompilation. + */ +#if !defined(VERSION_EU) + sp100 = (struct PropRecord *) &obj->nextcol; +#endif + if (isSimOwner) + { + if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) + { + Rocket = obj->projectile; + Rocket->age += g_ClockTimer; + + if (((s32) Rocket->age) > PROJECTILE_LIFETIME_FRAMES) + { + obj->runtime_bitflags |= RUNTIMEBITFLAG_REMOVE; + } + + if (Rocket->flags & PROJECTILEFLAG_00000100) + { + moveOnlyIfPathClear = TRUE; + + if (obj->type == PROPDEF_COLLECTABLE) + { + weaponObj = (struct WeaponObjRecord *) obj; + + if (weaponObj->weaponnum == ITEM_ROCKETROUND) + { + moveOnlyIfPathClear = FALSE; + } + } + + if (Rocket->ownerprop != NULL) + { + sub_GAME_7F03D058(Rocket->ownerprop, 0); + } + + moveResult = sub_GAME_7F042EB4(obj, &Rocket->unkd4, &sp64C, &sp658, 0, moveOnlyIfPathClear); + + if (Rocket->ownerprop != NULL) + { + sub_GAME_7F03D058(Rocket->ownerprop, 1); + } + + /* + * Fragile code: PROJECTILEFLAG_00000100 is only set by gunInitProjectileFromPlayer() + * whose callers always pass a PROPDEF_COLLECTABLE WeaponObjRecord. + * Therefore weaponObj is initialized above on every valid path reaching this point. + * But if this flag is ever used with another object type, the NULL check + * below would read an uninitialized pointer. + */ + if (((moveResult != 1) && (weaponObj != NULL)) && (weaponObj->weaponnum == ITEM_ROCKETROUND)) + { + weaponObj->timer = 0; + } + + Rocket->flags &= ~PROJECTILEFLAG_00000100; + } + + RocketCurrent.f[0] = obj->runtime_pos.f[0]; + RocketCurrent.f[1] = obj->runtime_pos.f[1]; + RocketCurrent.f[2] = obj->runtime_pos.f[2]; + + if (Rocket->refreshrate > 0) + { + Rocket->refreshrate -= g_ClockTimer; + } + + if (obj->projectile->flags & PROJECTILEFLAG_AIRBORNE) + { + airborneWeapon = (struct WeaponObjRecord *) obj; + projectileBBox = chrobjGetBboxFromObjectRecord(obj); + hitGround = 0; + bounceCondition = 0; + projectileStopped = 0; + bboxBottomOffset = 1.0f; + temp_f20 = obj->runtime_pos.f[1]; + canEmbed = FALSE; + Rocket->unkA8 += g_ClockTimer; + previousXAxis.f[0] = obj->mtx.m[0][0]; + previousXAxis.f[1] = obj->mtx.m[0][1]; + previousXAxis.f[2] = obj->mtx.m[0][2]; + + if (Rocket->flags & PROJECTILEFLAG_00000020) + { + m_RocketGravity = ROCKET_INITIAL_GRAVITY_MODIFIER; + if (Rocket->unk1C < m_RocketGravity) + { + Rocket->unkB4 += Rocket->unk10.f[1] * g_GlobalTimerDelta; + Rocket->unkB0 += Rocket->unkB4 * g_GlobalTimerDelta; + // Gravity modifier increases at 1/90 per frame until reaching ROCKET_INITIAL_GRAVITY_MODIFIER + // I would have thought this is somehow related to turning 9.8m/s/s into per frame accel? + Rocket->unk1C += (1.0f / 90.0f) * g_GlobalTimerDelta; + if (Rocket->unk1C > m_RocketGravity) + { + Rocket->unk1C = m_RocketGravity; + } + } + else if (RocketCurrent.f[1] < Rocket->unkB0) + { + Rocket->unkB4 += Rocket->unk10.f[1] * g_GlobalTimerDelta; + Rocket->unkB0 += Rocket->unkB4 * g_GlobalTimerDelta; + //Smooth vertical interpolation when rocket is rising toward its ballistic apex. + RocketCurrent.f[1] += (0.07f * (Rocket->unkB0 - RocketCurrent.f[1])) * g_GlobalTimerDelta; + } + else + { + RocketCurrent.f[1] = Rocket->unkB0; + Rocket->flags &= ~PROJECTILEFLAG_00000020; + Rocket->unk1C = 0.0f; + Rocket->flags |= PROJECTILEFLAG_POWERED; + Rocket->speed.f[1] = Rocket->unkB4; + } + } + + m_PropGravity = PROP_PROJECTILE_GRAVITY_MODIFIER; + + if (!(Rocket->flags & PROJECTILEFLAG_POWERED)) + { + Rocket->speed.f[1] += (Rocket->unk10.f[1] + Rocket->unk1C) * g_GlobalTimerDelta; + temp_f12 = Rocket->speed.f[1]; + nextVerticalSpeed = temp_f12 - (m_PropGravity * g_GlobalTimerDelta); + //apparently Standard trapezoidal integrator. (y += (dt * (v + v_next)) * 0.5f) + RocketCurrent.f[1] += (g_GlobalTimerDelta * (temp_f12 + nextVerticalSpeed)) * 0.5f; + Rocket->speed.f[1] = nextVerticalSpeed; + } + else + { + Rocket->speed.f[1] += (Rocket->unk10.f[1] + Rocket->unk1C) * g_GlobalTimerDelta; + RocketCurrent.f[1] += Rocket->speed.f[1] * g_GlobalTimerDelta; + } + + objectMatrix = &obj->mtx; + projectileMatrix = &Rocket->mtx; + Rocket->speed.f[0] += Rocket->unk10.f[0] * g_GlobalTimerDelta; + Rocket->speed.f[2] += Rocket->unk10.f[2] * g_GlobalTimerDelta; + RocketCurrent.f[0] += Rocket->speed.f[0] * g_GlobalTimerDelta; + RocketCurrent.f[2] += Rocket->speed.f[2] * g_GlobalTimerDelta; + sub_GAME_7F057DF8(objectMatrix, projectileMatrix, g_ClockTimer); + + // Determine which projectiles can stick to surfaces. + if ((obj->type == PROPDEF_COLLECTABLE) && (((((((airborneWeapon->weaponnum == ITEM_REMOTEMINE) || (airborneWeapon->weaponnum == ITEM_TIMEDMINE)) || (airborneWeapon->weaponnum == ITEM_PROXIMITYMINE)) || (airborneWeapon->weaponnum == ITEM_BOMBCASE)) || (airborneWeapon->weaponnum == ITEM_BUG)) || (airborneWeapon->weaponnum == ITEM_MICROCAMERA)) || (airborneWeapon->weaponnum == ITEM_PLASTIQUE))) + { + canEmbed = TRUE; + } + + if (Rocket->ownerprop != NULL) + { + sub_GAME_7F03D058(Rocket->ownerprop, 0); + } + + moveResult = sub_GAME_7F042EB4(obj, &RocketCurrent.f[0], &collisionPoint, &collisionNormal, canEmbed, 0); + + if (Rocket->ownerprop != NULL) + { + sub_GAME_7F03D058(Rocket->ownerprop, 1); + } + + objMovedThisFrame = 1; + + if ((moveResult == 2) && (((temp_v1_11 = (struct coord3d *) D_80030B0C) == NULL) || ((((struct PropRecord *) temp_v1_11)->type != PROP_TYPE_CHR) && (((struct PropRecord *) temp_v1_11)->type != PROP_TYPE_VIEWER)))) + { + sp548 = 0; + if ((temp_v1_11 != NULL) && ((temp_v0_31 = ((struct PropRecord *) temp_v1_11)->obj)->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE)) + { + sp548 = 1; + } + + if (sp548 == 0) + { + projectileFree(Rocket); + obj->projectile = NULL; + obj->runtime_bitflags &= ~RUNTIMEBITFLAG_HASPROJECTILE; + if (prop->flags & PROPFLAG_00000008) + { + prop->flags |= PROPFLAG_00000010; + } + + chrobjSndCreatePostEventDefault(sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, ATTACH_MINE_SFX, NULL), &prop->pos); + objectivestatusCheckDeposit(((struct WeaponObjRecord *) obj)->weaponnum, prop->stan->room); + sub_GAME_7F0439B8(obj, &collisionPoint, prop->stan, &collisionNormal); + if (D_80030B0C != NULL) + { + temp_s2 = prop->stan; + if (objEmbed(prop, D_80030B0C, g_CurrentProjectileModel, dword_CODE_bss_80075B74) != 0) + { + prop->stan = temp_s2; + tickop = TICKOP_CHANGEDLIST; + projectileStopped = 1; + } + } + } + } + + if (projectileStopped == 0) + { + playerProp2 = D_80030B0C; + + if ((playerProp2 != NULL) && (obj->type == PROPDEF_COLLECTABLE)) + { + temp_v1_10 = (struct WeaponObjRecord *) obj; + + if (temp_v1_10->weaponnum == ITEM_THROWKNIFE) + { + if ((playerProp2->type == PROP_TYPE_CHR) || (((playerProp2->type == PROP_TYPE_VIEWER) && (playerProp2->obj != NULL)) && (getPlayerPointerIndex(playerProp2) != get_cur_playernum()))) + { + playerProp2 = D_80030B0C; + temp_v0_40 = obj->projectile; + temp_s0_13 = (struct coord3d *) playerProp2->chr; + + if ((((temp_v0_40->flags & PROJECTILEFLAG_AIRBORNE) && (((s32) temp_v0_40->unk90) <= 0)) && (obj->runtime_bitflags & RUNTIMEBITFLAG_THROWING_KNIFE_RELATED)) && (handles_shot_actors((struct ChrRecord *) temp_s0_13, bodypartshot, &flt_CODE_bss_80075B78, ((struct WeaponObjRecord *) obj)->weaponnum, 1) != 0)) + { + projectileStopped = 1; + + if (Rocket->unk8C > 0.0f) + { + temp_f14_3 = ((Rocket->speed.f[0] * collisionNormal.f[0]) + (Rocket->speed.f[1] * collisionNormal.f[1])) + (Rocket->speed.f[2] * collisionNormal.f[2]); + temp_f14_3 *= -(Rocket->unk8C + 1.0f); + Rocket->speed.f[0] += temp_f14_3 * collisionNormal.f[0]; + Rocket->speed.f[1] += temp_f14_3 * collisionNormal.f[1]; + Rocket->speed.f[2] += temp_f14_3 * collisionNormal.f[2]; + } + + if (!(Rocket->flags & PROJECTILEFLAG_00000200)) + { + mtxLoadRandomRotation(projectileMatrix); + } + + Rocket->unk90 += 1; + recall_joy2_hits_edit_detail_edit_flag(((struct WeaponObjRecord *) obj)->weaponnum, D_80030B0C, -1); + + if (((D_80030B0C->flags & PROPFLAG_ONSCREEN) && (bodypartshot != HIT_GUN)) && (bodypartshot != HIT_HAT)) + { + playerProp2 = (struct PropRecord *) modelFindNodeMtx(g_CurrentProjectileModel, dword_CODE_bss_80075B74, 0); + + bloodStainPos.f[0] = collisionPoint.f[0]; + bloodStainPos.f[1] = collisionPoint.f[1]; + bloodStainPos.f[2] = collisionPoint.f[2]; + + mtx4TransformVecInPlace(camGetWorldToScreenMtxf(), &bloodStainPos); + + bloodStainPos.f[0] += (bloodStainPos.f[0] - ((Mtxf *) playerProp2)->m[3][0]) * 0.5f; + bloodStainPos.f[1] += (bloodStainPos.f[1] - ((Mtxf *) playerProp2)->m[3][1]) * 0.5f; + bloodStainPos.f[2] += (bloodStainPos.f[2] - ((Mtxf *) playerProp2)->m[3][2]) * 0.5f; + + bloodStainPos.f[0] -= (getjointsize(g_CurrentProjectileModel, dword_CODE_bss_80075B74) * 0.5f) * flt_CODE_bss_80075B88.f[0]; + bloodStainPos.f[1] -= (getjointsize(g_CurrentProjectileModel, dword_CODE_bss_80075B74) * 0.5f) * flt_CODE_bss_80075B88.f[1]; + bloodStainPos.f[2] -= (getjointsize(g_CurrentProjectileModel, dword_CODE_bss_80075B74) * 0.5f) * flt_CODE_bss_80075B88.f[2]; + + matrix_4x4_set_inverse_rotation_and_translation((Mtxf *) playerProp2, &inverseNodeMatrix); + mtx4TransformVecInPlace(&inverseNodeMatrix, &bloodStainPos); + chrCreateBloodStain(g_CurrentProjectileModel, bodypartshot, dword_CODE_bss_80075B74, &bloodStainPos); + } + } + } + } + else if (temp_v1_10->weaponnum == ITEM_ROCKETROUND) + { + var_v0_3 = playerProp2->type; + projectileStopped = 1; + if (var_v0_3 == 3) + { + chrlvExplosionDamage((ChrRecord *) playerProp2->chr, &obj->runtime_pos, 2.0f, 1); + } + else if ((var_v0_3 == 1) || (var_v0_3 == 4)) + { + var_a0 = obj->runtime_bitflags; + objApplyDamage(playerProp2->obj, 100.0f, &obj->runtime_pos, ITEM_ROCKETROUND, (s32) (((u32) (var_a0 & RUNTIMEBITFLAG_OWNER)) >> RUNTIMEBITSHIFT_OWNER)); + } + + ((struct WeaponObjRecord *) obj)->timer = 0; + } + } + } + + if (projectileStopped == 0) + { + if (moveResult == 0) + { + if (Rocket->unk8C > 0.0f) + { + previousVerticalSpeed = Rocket->speed.f[1]; + temp_f14_3 = ((Rocket->speed.f[0] * collisionNormal.f[0]) + (Rocket->speed.f[1] * collisionNormal.f[1])) + (Rocket->speed.f[2] * collisionNormal.f[2]); + temp_f14_3 *= -(Rocket->unk8C + 1.0f); + Rocket->speed.f[0] += temp_f14_3 * collisionNormal.f[0]; + Rocket->speed.f[1] += temp_f14_3 * collisionNormal.f[1]; + Rocket->speed.f[2] += temp_f14_3 * collisionNormal.f[2]; + + if ((previousVerticalSpeed <= 0.0f) && ((Rocket->speed.f[1] >= 0.0f) || (temp_f20 <= obj->runtime_pos.f[1]))) + { + bounceCondition = 1; + } + } + } + + /** + * sp63C is never written anywhere in this function, so this loads an uninitialised stack + * word albeit harmlessly. Either the block below overwrites temp_f20 with the stan floor + * height, or it does not run and hitGround stays 0, leaving temp_f20 unread. Likely the + * original had a separate uninitialised local for the floor height and the compiler + * materialised its home here. + * Note temp_f20 changes meaning at this point: above it is the Y at the start of the + * tick (used by the bounce test), below it's the stan floor height. + */ + temp_f20 = sp63C; + + if (!(Rocket->flags & PROJECTILEFLAG_00000008)) + { + temp_f20 = stanGetPositionYValue(prop->stan, prop->pos.f[0], prop->pos.f[2]); + bboxBottomOffset = chrpropSumMatrixPosY(projectileBBox, &objectMatrix[0]); + hitGround = (prop->pos.f[1] < (temp_f20 - bboxBottomOffset)); + } + else + { + if (Rocket && Rocket && Rocket); + } + + if ((hitGround) || (moveResult == 0)) + { + if (!(Rocket->flags & PROJECTILEFLAG_00000200)) + { + mtxLoadRandomRotation(projectileMatrix); + } + + Rocket->unk90 += 1; + } + + if ((hitGround) || (bounceCondition)) + { + if (hitGround) + { + // The projectile has hit the ground so raise it 4 units above the ground. + obj->runtime_pos.f[1] = (prop->pos.f[1] = (temp_f20 - bboxBottomOffset) + 4.0f); + } + else + { + var_f2 = (collisionPoint.f[1] - bboxBottomOffset) + 4.0f; + obj->runtime_pos.f[1] = (prop->pos.f[1] = var_f2); + } + + if (!(obj->runtime_bitflags & RUNTIMEBITFLAG_00010000)) + { + obj->runtime_bitflags |= RUNTIMEBITFLAG_00000100; + } + + if (Rocket->unk8C > 0.0f) + { + Rocket->speed.f[1] *= -Rocket->unk8C; + + if (Rocket->speed.f[1] < 2.2222223f) + { + if ((Rocket->flags & PROJECTILEFLAG_00000002) && (Rocket->unk90 == 1)) + { + Rocket->speed.f[1] = 2.2222223f; + } + else + { + objSettle(obj, &previousXAxis); + } + } + } + else + { + objSettle(obj, &previousXAxis); + } + } + + if (obj->type == PROPDEF_COLLECTABLE) + { + if (airborneWeapon->weaponnum == ITEM_THROWKNIFE) + { + objUpdateThrowKnifeSound(airborneWeapon); + } + else if (airborneWeapon->weaponnum == ITEM_ROCKETROUND) + { + if ((moveResult == 0) || (hitGround)) + { + airborneWeapon->timer = 0; + } + else + { + nextVerticalSpeed = ((Rocket->speed.f[0] * Rocket->speed.f[0]) + (Rocket->speed.f[1] * Rocket->speed.f[1])) + (Rocket->speed.f[2] * Rocket->speed.f[2]); + + if (nextVerticalSpeed > ROCKET_SPEED_BREAK_THRESHOLD) + { + Rocket->unk10.f[0] = 0.0f; + Rocket->unk10.f[1] = 0.0f; + Rocket->unk10.f[2] = 0.0f; + } + + if (((s32) Rocket->unkA8) >= GRENADE_SMOKE_FRAMES) + { + Rocket->unk1C = 0.0f; + Rocket->flags &= ~(PROJECTILEFLAG_POWERED | PROJECTILEFLAG_00000020); + } + else + { + explosionCreateSmoke(&airborneWeapon->runtime_pos, prop->stan, 8, prop->rooms, (prop->flags & PROPFLAG_00000008) != 0); + } + } + } + else if (airborneWeapon->weaponnum == ITEM_GRENADEROUND) + { + if ((hitGround != 0) || (bounceCondition != 0)) + { + airborneWeapon->timer = 0; + } + else + { + explosionCreateSmoke(&obj->runtime_pos, prop->stan, 9, prop->rooms, (prop->flags & PROPFLAG_00000008) != 0); + } + } + + if ((moveResult == 0) || (hitGround != 0)) + { + if (((s32) Rocket->unkAC) < (((s32) D_80048380) - 2)) + { + if ((airborneWeapon->weaponnum == ITEM_THROWKNIFE) || (airborneWeapon->weaponnum == ITEM_KNIFE)) + { + sfx_state = sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, KNIFE_HIT_WALL_SFX, NULL); + } + else + { + sfx_state = sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, DROP_GUN_SFX, NULL); + } + + chrobjSndCreatePostEventDefault(sfx_state, &prop->pos); + } + + Rocket->unkAC = D_80048380; + } + } + } + + if (((airborneWeapon->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) && (Rocket->flags & PROJECTILEFLAG_FALLING)) && (!(D_80048380 & 7))) + { + sp564.f[0] = airborneWeapon->runtime_pos.f[0] + 400.0f; + sp564.f[1] = airborneWeapon->runtime_pos.f[1] - 1800.0f; + sp564.f[2] = airborneWeapon->runtime_pos.f[2]; + + if (!(D_80048380 & 0xF)) + { + sp564.f[2] += 400.0f; + } + else + { + sp564.f[2] -= 400.0f; + } + + explosionCreate(NULL, &sp564, airborneWeapon->prop->stan, 0x14, 0, 0, airborneWeapon->prop->rooms, 0); + //Spawn smoke every 40 frames + if ((((s32) D_80048380) % 40) == 0) + { + explosionCreateSmoke(&sp564, airborneWeapon->prop->stan, 0xA, airborneWeapon->prop->rooms, 1); + } + } + } + else + { + projectileAlive = 1; + + if (Rocket->unk60 < 1.0f) + { + Rocket->unk60 += Rocket->unk64 * g_GlobalTimerDelta; + + if (g_ClockTimer > 0) + { + Rocket->unk64 *= 1.1f; + } + + if ((Rocket->unk60 > 1.0f) || (Rocket->flags & PROJECTILEFLAG_00000008)) + { + Rocket->unk60 = 1.0f; + } + + quaternion_slerp((f32 *) (&Rocket->unk68), (f32 *) (&Rocket->unk78), Rocket->unk60, (f32 *) (&sp550)); + objectMatrix = &obj->mtx; + quaternion_to_matrix((f32 *) (&sp550), (f32 *) (&obj->mtx)); + matrix_column_1_scalar_multiply(Rocket->unkC0, (f32 *) objectMatrix); + matrix_column_2_scalar_multiply(Rocket->unkC4, (f32 *) objectMatrix); + matrix_column_3_scalar_multiply_2(Rocket->unkC8, (f32 *) objectMatrix); + projectileAlive = 0; + } + + // Apply horizontal slide and friction to a projectile that has landed. + if ((((Rocket->speed.f[0] != 0.0f) || (Rocket->speed.f[2] != 0.0f)) || (Rocket->unk60 < 1.0f)) && (!(Rocket->flags & PROJECTILEFLAG_00000008))) + { + objectMatrix = &obj->mtx; + objectBBox = chrobjGetBboxFromObjectRecord(obj); + projectileAlive = 0; + + for (sp548 = 0; sp548 < g_ClockTimer; sp548++) + { + RocketCurrent.f[0] += Rocket->speed.f[0]; + RocketCurrent.f[2] += Rocket->speed.f[2]; + if (Rocket->unk60 >= 1.0f) + { + if (Rocket->unk94 > 0.0f) + { + temp_f12_5 = (Rocket->unk94 * g_GlobalTimerDelta) / sqrtf((Rocket->speed.f[0] * Rocket->speed.f[0]) + (Rocket->speed.f[2] * Rocket->speed.f[2])); + if (temp_f12_5 >= 1.0f) + { + Rocket->speed.f[0] = 0.0f; + Rocket->speed.f[2] = 0.0f; + } + else + { + Rocket->speed.f[0] -= Rocket->speed.f[0] * temp_f12_5; + Rocket->speed.f[2] -= Rocket->speed.f[2] * temp_f12_5; + } + } + else + { + Rocket->speed.f[0] *= PROJECTILE_FRICTION_FACTOR; + Rocket->speed.f[2] *= PROJECTILE_FRICTION_FACTOR; + } + } + } + + sub_GAME_7F042EB4(obj, &RocketCurrent.f[0], &sp530, &sp53C, 0, 0); + objMovedThisFrame = 1; + temp_f20 = stanGetPositionYValue(prop->stan, prop->pos.f[0], prop->pos.f[2]); + angleDelta = (temp_f20 - chrpropSumMatrixPosY(objectBBox, objectMatrix)) + 4.0f; + prop->pos.f[1] = angleDelta; + obj->runtime_pos.f[1] = angleDelta; + if ((Rocket->speed.f[0] < 0.1f) && (Rocket->speed.f[0] > (-0.1f))) + { + if ((Rocket->speed.f[2] < 0.1f) && (Rocket->speed.f[2] > (-0.1f))) + { + Rocket->speed.f[2] = 0.0f; + Rocket->speed.f[0] = 0.0f; + } + } + } + + if ((projectileAlive != 0) || (Rocket->flags & PROJECTILEFLAG_00000008)) + { + projectileFree(Rocket); + obj->projectile = NULL; + obj->runtime_bitflags &= ~RUNTIMEBITFLAG_HASPROJECTILE; + if (prop->flags & PROPFLAG_00000008) + { + prop->flags |= PROPFLAG_00000010; + } + +#if defined(VERSION_JP) || defined(VERSION_EU) + if (obj->type == PROPDEF_COLLECTABLE) + { + objectivestatusCheckDeposit(((struct WeaponObjRecord *) obj)->weaponnum, prop->stan->room); + } +#endif + } + } + } + + if (objMovedThisFrame != 0) + { + objectMatrix = (Mtxf *) (&obj->runtime_pos); + + chrobjCollisionRelated(obj); + setupUpdateObjectRoomPosition(obj); +#if defined(VERSION_EU) + sub_GAME_7F0402B4(obj->prop, &obj->nextcol); #else - -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel rocket_initial_gravity_modifier -.word 0x3e8e38e4 /*0.27777779*/ -glabel D_80052A9C -.word 0x3c360b61 /*0.011111111*/ -glabel D_80052AA0 -.word 0x3d8f5c29 /*0.07*/ -glabel prop_projectile_gravity_modifier -.word 0x3e8e38e4 /*0.27777779*/ -glabel D_80052AA8 -.word 0x400e38e4 /*2.2222223*/ -glabel D_80052AAC -.word 0x46d9038c /*27777.773*/ -glabel D_80052AB0 -.word 0x3f8ccccd /*1.1*/ -glabel D_80052AB4 -.word 0x3f666666 /*0.89999998*/ -glabel D_80052AB8 -.word 0x3f666666 /*0.89999998*/ -glabel D_80052ABC -.word 0x3dcccccd /*0.1*/ -glabel D_80052AC0 -.word 0xbdcccccd /*-0.1*/ -glabel D_80052AC4 -.word 0xbdcccccd /*-0.1*/ -glabel D_80052AC8 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052ACC -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AD0 -.word 0x40490fdb /*3.1415927*/ -glabel D_80052AD4 -.word 0x3f490fdb /*0.78539819*/ -glabel D_80052AD8 -.word 0xbf490fdb /*-0.78539819*/ -glabel D_80052ADC -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AE0 -.word 0x3a2b92a6 /*0.00065449846*/ -glabel D_80052AE4 -.word 0x3a2b92a6 /*0.00065449846*/ -glabel D_80052AE8 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AEC -.word 0x37433637 /*0.000011635529*/ -glabel D_80052AF0 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AF4 -.word 0x3a3702d4 /*0.00069813174*/ -glabel D_80052AF8 -.word 0x36c33637 /*0.0000058177643*/ -glabel D_80052AFC -.word 0x39b702d4 /*0.00034906587*/ -glabel D_80052B00 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B04 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B08 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B0C -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B10 -.word 0x3f9c61ab /*1.2217306*/ -glabel D_80052B14 -.word 0xbf9c61ab /*-1.2217306*/ -glabel D_80052B18 -.word 0xc0490fdb /*-3.1415927*/ -glabel D_80052B1C -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B20 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B24 -.word 0x3f4ccccd /*0.80000001*/ -glabel D_80052B28 -.word 0xc0490fdb /*-3.1415927*/ -glabel D_80052B2C -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B30 -.word 0x3a64c389 /*0.00087266468*/ -glabel D_80052B34 -.word 0x3a64c389 /*0.00087266468*/ -glabel D_80052B38 -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B3C -.word 0x3f1930a7 /*0.59839863*/ -glabel D_80052B40 -.word 0x3c236719 /*0.0099733109*/ -glabel D_80052B44 -.word 0x3f7d70a4 /*0.99000001*/ -glabel D_80052B48 -.word 0x38d1b717 /*0.000099999997*/ -glabel D_80052B4C -.word 0x3964c389 /*0.00021816617*/ -glabel D_80052B50 -.word 0x3bd67750 /*0.0065449849*/ -glabel D_80052B54 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B58 -.word 0x3964c389 /*0.00021816617*/ -glabel D_80052B5C -.word 0xb964c389 /*-0.00021816617*/ -glabel D_80052B60 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B64 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B68 -.word 0x3e99999a /*0.30000001*/ -glabel D_80052B6C -.word 0x3fc90fdb /*1.5707964*/ -glabel D_80052B70 -.word 0x3fc90fdb /*1.5707964*/ -glabel D_80052B74 -.word 0x3e23d70a /*0.16*/ -glabel D_80052B78 -.word 0x461c4000 /*10000.0*/ -glabel D_80052B7C -.word 0x453b8000 /*3000.0*/ -glabel D_80052B80 -.word 0x3f19999a /*0.60000002*/ -glabel D_80052B84 -.word 0x3e99999a /*0.30000001*/ -glabel D_80052B88 -.word 0xbdcccccd /*-0.1*/ -glabel D_80052B8C -.word 0x3e4ccccd /*0.2*/ -glabel D_80052B90 -.word 0x453b8000 /*3000.0*/ -glabel D_80052B94 -.word 0x453b8000 /*3000.0*/ -.text -glabel object_interaction -/* 079E04 7F0452D4 27BDF958 */ addiu $sp, $sp, -0x6a8 -/* 079E08 7F0452D8 AFBF0054 */ sw $ra, 0x54($sp) -/* 079E0C 7F0452DC AFB40050 */ sw $s4, 0x50($sp) -/* 079E10 7F0452E0 AFB3004C */ sw $s3, 0x4c($sp) -/* 079E14 7F0452E4 AFB20048 */ sw $s2, 0x48($sp) -/* 079E18 7F0452E8 AFB10044 */ sw $s1, 0x44($sp) -/* 079E1C 7F0452EC AFB00040 */ sw $s0, 0x40($sp) -/* 079E20 7F0452F0 F7B60038 */ sdc1 $f22, 0x38($sp) -/* 079E24 7F0452F4 F7B40030 */ sdc1 $f20, 0x30($sp) -/* 079E28 7F0452F8 8C910004 */ lw $s1, 4($a0) -/* 079E2C 7F0452FC 4480B000 */ mtc1 $zero, $f22 -/* 079E30 7F045300 00809825 */ move $s3, $a0 -/* 079E34 7F045304 8E340014 */ lw $s4, 0x14($s1) -/* 079E38 7F045308 AFA00690 */ sw $zero, 0x690($sp) -/* 079E3C 7F04530C AFA00680 */ sw $zero, 0x680($sp) -/* 079E40 7F045310 0FC26919 */ jal getPlayerCount -/* 079E44 7F045314 E7B6067C */ swc1 $f22, 0x67c($sp) -/* 079E48 7F045318 240C0001 */ li $t4, 1 -/* 079E4C 7F04531C AFA20674 */ sw $v0, 0x674($sp) -/* 079E50 7F045320 AFAC0670 */ sw $t4, 0x670($sp) -/* 079E54 7F045324 8E230064 */ lw $v1, 0x64($s1) -/* 079E58 7F045328 306E0004 */ andi $t6, $v1, 4 -/* 079E5C 7F04532C 11C00009 */ beqz $t6, .L7F045354 -/* 079E60 7F045330 306F0008 */ andi $t7, $v1, 8 -/* 079E64 7F045334 92260002 */ lbu $a2, 2($s1) -/* 079E68 7F045338 02202025 */ move $a0, $s1 -/* 079E6C 7F04533C 00002825 */ move $a1, $zero -/* 079E70 7F045340 30CD0004 */ andi $t5, $a2, 4 -/* 079E74 7F045344 0FC10366 */ jal objFree -/* 079E78 7F045348 01A03025 */ move $a2, $t5 -/* 079E7C 7F04534C 100011F8 */ b .L7F049B30 -/* 079E80 7F045350 24020001 */ li $v0, 1 -.L7F045354: -/* 079E84 7F045354 11E00005 */ beqz $t7, .L7F04536C -/* 079E88 7F045358 30680080 */ andi $t0, $v1, 0x80 -/* 079E8C 7F04535C 2401FFF7 */ li $at, -9 -/* 079E90 7F045360 0061C024 */ and $t8, $v1, $at -/* 079E94 7F045364 1000000B */ b .L7F045394 -/* 079E98 7F045368 AE380064 */ sw $t8, 0x64($s1) -.L7F04536C: -/* 079E9C 7F04536C 5100000A */ beql $t0, $zero, .L7F045398 -/* 079EA0 7F045370 24010001 */ li $at, 1 -/* 079EA4 7F045374 92690001 */ lbu $t1, 1($s3) -/* 079EA8 7F045378 24020003 */ li $v0, 3 -/* 079EAC 7F04537C 312BFFFD */ andi $t3, $t1, 0xfffd -/* 079EB0 7F045380 A26B0001 */ sb $t3, 1($s3) -/* 079EB4 7F045384 8E390064 */ lw $t9, 0x64($s1) -/* 079EB8 7F045388 372A0008 */ ori $t2, $t9, 8 -/* 079EBC 7F04538C 100011E8 */ b .L7F049B30 -/* 079EC0 7F045390 AE2A0064 */ sw $t2, 0x64($s1) -.L7F045394: -/* 079EC4 7F045394 24010001 */ li $at, 1 -.L7F045398: -/* 079EC8 7F045398 14410003 */ bne $v0, $at, .L7F0453A8 -/* 079ECC 7F04539C 240C0001 */ li $t4, 1 -/* 079ED0 7F0453A0 10000015 */ b .L7F0453F8 -/* 079ED4 7F0453A4 AFAC0678 */ sw $t4, 0x678($sp) -.L7F0453A8: -/* 079ED8 7F0453A8 0FC26C54 */ jal get_cur_playernum -/* 079EDC 7F0453AC 00000000 */ nop -/* 079EE0 7F0453B0 0FC26D36 */ jal get_player_position_in_shuffled -/* 079EE4 7F0453B4 00402025 */ move $a0, $v0 -/* 079EE8 7F0453B8 2C4E0001 */ sltiu $t6, $v0, 1 -/* 079EEC 7F0453BC AFAE0678 */ sw $t6, 0x678($sp) -/* 079EF0 7F0453C0 8E2D0064 */ lw $t5, 0x64($s1) -/* 079EF4 7F0453C4 31AF0080 */ andi $t7, $t5, 0x80 -/* 079EF8 7F0453C8 51E0000C */ beql $t7, $zero, .L7F0453FC -/* 079EFC 7F0453CC 8FAB0678 */ lw $t3, 0x678($sp) -/* 079F00 7F0453D0 8E22006C */ lw $v0, 0x6c($s1) -/* 079F04 7F0453D4 3C188008 */ lui $t8, %hi(g_CurrentPlayer) -/* 079F08 7F0453D8 8C430088 */ lw $v1, 0x88($v0) -/* 079F0C 7F0453DC 50600007 */ beql $v1, $zero, .L7F0453FC -/* 079F10 7F0453E0 8FAB0678 */ lw $t3, 0x678($sp) -/* 079F14 7F0453E4 8F18A0B0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 079F18 7F0453E8 8F0800A8 */ lw $t0, 0xa8($t8) -/* 079F1C 7F0453EC 01034826 */ xor $t1, $t0, $v1 -/* 079F20 7F0453F0 2D290001 */ sltiu $t1, $t1, 1 -/* 079F24 7F0453F4 AFA90678 */ sw $t1, 0x678($sp) -.L7F0453F8: -/* 079F28 7F0453F8 8FAB0678 */ lw $t3, 0x678($sp) -.L7F0453FC: -/* 079F2C 7F0453FC 51600B8C */ beql $t3, $zero, .L7F048230 -/* 079F30 7F045400 92220003 */ lbu $v0, 3($s1) -/* 079F34 7F045404 8E390064 */ lw $t9, 0x64($s1) -/* 079F38 7F045408 332A0080 */ andi $t2, $t9, 0x80 -/* 079F3C 7F04540C 51400483 */ beql $t2, $zero, .L7F04661C -/* 079F40 7F045410 8FAD0690 */ lw $t5, 0x690($sp) -/* 079F44 7F045414 8E30006C */ lw $s0, 0x6c($s1) -/* 079F48 7F045418 3C0E8005 */ lui $t6, %hi(g_ClockTimer) -/* 079F4C 7F04541C 8DCE8374 */ lw $t6, %lo(g_ClockTimer)($t6) -/* 079F50 7F045420 8E0C00E0 */ lw $t4, 0xe0($s0) -/* 079F54 7F045424 018E6821 */ addu $t5, $t4, $t6 -/* 079F58 7F045428 29A10961 */ slti $at, $t5, 0x961 -/* 079F5C 7F04542C 14200004 */ bnez $at, .L7F045440 -/* 079F60 7F045430 AE0D00E0 */ sw $t5, 0xe0($s0) -/* 079F64 7F045434 8E380064 */ lw $t8, 0x64($s1) -/* 079F68 7F045438 37080004 */ ori $t0, $t8, 4 -/* 079F6C 7F04543C AE280064 */ sw $t0, 0x64($s1) -.L7F045440: -/* 079F70 7F045440 8E090000 */ lw $t1, ($s0) -/* 079F74 7F045444 312B0100 */ andi $t3, $t1, 0x100 -/* 079F78 7F045448 5160002F */ beql $t3, $zero, .L7F045508 -/* 079F7C 7F04544C C6260058 */ lwc1 $f6, 0x58($s1) -/* 079F80 7F045450 92390003 */ lbu $t9, 3($s1) -/* 079F84 7F045454 24010008 */ li $at, 8 -/* 079F88 7F045458 24120001 */ li $s2, 1 -/* 079F8C 7F04545C 57210008 */ bnel $t9, $at, .L7F045480 -/* 079F90 7F045460 8E040088 */ lw $a0, 0x88($s0) -/* 079F94 7F045464 AFB10648 */ sw $s1, 0x648($sp) -/* 079F98 7F045468 822A0080 */ lb $t2, 0x80($s1) -/* 079F9C 7F04546C 24010056 */ li $at, 86 -/* 079FA0 7F045470 55410003 */ bnel $t2, $at, .L7F045480 -/* 079FA4 7F045474 8E040088 */ lw $a0, 0x88($s0) -/* 079FA8 7F045478 00009025 */ move $s2, $zero -/* 079FAC 7F04547C 8E040088 */ lw $a0, 0x88($s0) -.L7F045480: -/* 079FB0 7F045480 50800004 */ beql $a0, $zero, .L7F045494 -/* 079FB4 7F045484 02202025 */ move $a0, $s1 -/* 079FB8 7F045488 0FC0F416 */ jal sub_GAME_7F03D058 -/* 079FBC 7F04548C 00002825 */ move $a1, $zero -/* 079FC0 7F045490 02202025 */ move $a0, $s1 -.L7F045494: -/* 079FC4 7F045494 260500D4 */ addiu $a1, $s0, 0xd4 -/* 079FC8 7F045498 27A6064C */ addiu $a2, $sp, 0x64c -/* 079FCC 7F04549C 27A70658 */ addiu $a3, $sp, 0x658 -/* 079FD0 7F0454A0 AFA00010 */ sw $zero, 0x10($sp) -/* 079FD4 7F0454A4 0FC10BAD */ jal sub_GAME_7F042EB4 -/* 079FD8 7F0454A8 AFB20014 */ sw $s2, 0x14($sp) -/* 079FDC 7F0454AC AFA20664 */ sw $v0, 0x664($sp) -/* 079FE0 7F0454B0 8E040088 */ lw $a0, 0x88($s0) -/* 079FE4 7F0454B4 50800004 */ beql $a0, $zero, .L7F0454C8 -/* 079FE8 7F0454B8 8FAC0664 */ lw $t4, 0x664($sp) -/* 079FEC 7F0454BC 0FC0F416 */ jal sub_GAME_7F03D058 -/* 079FF0 7F0454C0 24050001 */ li $a1, 1 -/* 079FF4 7F0454C4 8FAC0664 */ lw $t4, 0x664($sp) -.L7F0454C8: -/* 079FF8 7F0454C8 24010001 */ li $at, 1 -/* 079FFC 7F0454CC 8FA20648 */ lw $v0, 0x648($sp) -/* 07A000 7F0454D0 51810009 */ beql $t4, $at, .L7F0454F8 -/* 07A004 7F0454D4 8E0D0000 */ lw $t5, ($s0) -/* 07A008 7F0454D8 50400007 */ beql $v0, $zero, .L7F0454F8 -/* 07A00C 7F0454DC 8E0D0000 */ lw $t5, ($s0) -/* 07A010 7F0454E0 804E0080 */ lb $t6, 0x80($v0) -/* 07A014 7F0454E4 24010056 */ li $at, 86 -/* 07A018 7F0454E8 55C10003 */ bnel $t6, $at, .L7F0454F8 -/* 07A01C 7F0454EC 8E0D0000 */ lw $t5, ($s0) -/* 07A020 7F0454F0 A4400082 */ sh $zero, 0x82($v0) -/* 07A024 7F0454F4 8E0D0000 */ lw $t5, ($s0) -.L7F0454F8: -/* 07A028 7F0454F8 2401FEFF */ li $at, -257 -/* 07A02C 7F0454FC 01A17824 */ and $t7, $t5, $at -/* 07A030 7F045500 AE0F0000 */ sw $t7, ($s0) -/* 07A034 7F045504 C6260058 */ lwc1 $f6, 0x58($s1) -.L7F045508: -/* 07A038 7F045508 3C188005 */ lui $t8, %hi(g_ClockTimer) -/* 07A03C 7F04550C 3C013F80 */ lui $at, 0x3f80 -/* 07A040 7F045510 E7A60694 */ swc1 $f6, 0x694($sp) -/* 07A044 7F045514 C62A005C */ lwc1 $f10, 0x5c($s1) -/* 07A048 7F045518 E7AA0698 */ swc1 $f10, 0x698($sp) -/* 07A04C 7F04551C C6240060 */ lwc1 $f4, 0x60($s1) -/* 07A050 7F045520 E7A4069C */ swc1 $f4, 0x69c($sp) -/* 07A054 7F045524 8E0200BC */ lw $v0, 0xbc($s0) -/* 07A058 7F045528 58400005 */ blezl $v0, .L7F045540 -/* 07A05C 7F04552C 8E29006C */ lw $t1, 0x6c($s1) -/* 07A060 7F045530 8F188374 */ lw $t8, %lo(g_ClockTimer)($t8) -/* 07A064 7F045534 00584023 */ subu $t0, $v0, $t8 -/* 07A068 7F045538 AE0800BC */ sw $t0, 0xbc($s0) -/* 07A06C 7F04553C 8E29006C */ lw $t1, 0x6c($s1) -.L7F045540: -/* 07A070 7F045540 8D2B0000 */ lw $t3, ($t1) -/* 07A074 7F045544 31790001 */ andi $t9, $t3, 1 -/* 07A078 7F045548 53200351 */ beql $t9, $zero, .L7F046290 -/* 07A07C 7F04554C C6000060 */ lwc1 $f0, 0x60($s0) -/* 07A080 7F045550 0FC1001E */ jal chrobjGetBboxFromObjectRecord -/* 07A084 7F045554 02202025 */ move $a0, $s1 -/* 07A088 7F045558 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07A08C 7F04555C 44814000 */ mtc1 $at, $f8 -/* 07A090 7F045560 3C078005 */ lui $a3, %hi(g_ClockTimer) -/* 07A094 7F045564 24E78374 */ addiu $a3, %lo(g_ClockTimer) # addiu $a3, $a3, -0x7c8c -/* 07A098 7F045568 AFA20640 */ sw $v0, 0x640($sp) -/* 07A09C 7F04556C AFA00610 */ sw $zero, 0x610($sp) -/* 07A0A0 7F045570 AFA0060C */ sw $zero, 0x60c($sp) -/* 07A0A4 7F045574 AFA00604 */ sw $zero, 0x604($sp) -/* 07A0A8 7F045578 E7A80638 */ swc1 $f8, 0x638($sp) -/* 07A0AC 7F04557C 8E0A00A8 */ lw $t2, 0xa8($s0) -/* 07A0B0 7F045580 8CEC0000 */ lw $t4, ($a3) -/* 07A0B4 7F045584 C634005C */ lwc1 $f20, 0x5c($s1) -/* 07A0B8 7F045588 00009025 */ move $s2, $zero -/* 07A0BC 7F04558C 014C7021 */ addu $t6, $t2, $t4 -/* 07A0C0 7F045590 AE0E00A8 */ sw $t6, 0xa8($s0) -/* 07A0C4 7F045594 C6260018 */ lwc1 $f6, 0x18($s1) -/* 07A0C8 7F045598 3C018005 */ lui $at, %hi(rocket_initial_gravity_modifier) -/* 07A0CC 7F04559C E7A6062C */ swc1 $f6, 0x62c($sp) -/* 07A0D0 7F0455A0 C62A001C */ lwc1 $f10, 0x1c($s1) -/* 07A0D4 7F0455A4 E7AA0630 */ swc1 $f10, 0x630($sp) -/* 07A0D8 7F0455A8 C6240020 */ lwc1 $f4, 0x20($s1) -/* 07A0DC 7F0455AC E7A40634 */ swc1 $f4, 0x634($sp) -/* 07A0E0 7F0455B0 8E030000 */ lw $v1, ($s0) -/* 07A0E4 7F0455B4 306D0020 */ andi $t5, $v1, 0x20 -/* 07A0E8 7F0455B8 11A0004B */ beqz $t5, .L7F0456E8 -/* 07A0EC 7F0455BC 00000000 */ nop -/* 07A0F0 7F0455C0 C4322A98 */ lwc1 $f18, %lo(rocket_initial_gravity_modifier)($at) -/* 07A0F4 7F0455C4 C600001C */ lwc1 $f0, 0x1c($s0) -/* 07A0F8 7F0455C8 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) -/* 07A0FC 7F0455CC 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 07A100 7F0455D0 4612003C */ c.lt.s $f0, $f18 -/* 07A104 7F0455D4 00000000 */ nop -/* 07A108 7F0455D8 4502001C */ bc1fl .L7F04564C -/* 07A10C 7F0455DC C60000B0 */ lwc1 $f0, 0xb0($s0) -/* 07A110 7F0455E0 C6080014 */ lwc1 $f8, 0x14($s0) -/* 07A114 7F0455E4 C4460000 */ lwc1 $f6, ($v0) -/* 07A118 7F0455E8 C60400B4 */ lwc1 $f4, 0xb4($s0) -/* 07A11C 7F0455EC 3C018005 */ lui $at, %hi(D_80052A9C) -/* 07A120 7F0455F0 46064282 */ mul.s $f10, $f8, $f6 -/* 07A124 7F0455F4 460A2200 */ add.s $f8, $f4, $f10 -/* 07A128 7F0455F8 E60800B4 */ swc1 $f8, 0xb4($s0) -/* 07A12C 7F0455FC C4440000 */ lwc1 $f4, ($v0) -/* 07A130 7F045600 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07A134 7F045604 C60800B0 */ lwc1 $f8, 0xb0($s0) -/* 07A138 7F045608 46043282 */ mul.s $f10, $f6, $f4 -/* 07A13C 7F04560C 460A4180 */ add.s $f6, $f8, $f10 -/* 07A140 7F045610 E60600B0 */ swc1 $f6, 0xb0($s0) -/* 07A144 7F045614 C4480000 */ lwc1 $f8, ($v0) -/* 07A148 7F045618 C4242A9C */ lwc1 $f4, %lo(D_80052A9C)($at) -/* 07A14C 7F04561C 46082282 */ mul.s $f10, $f4, $f8 -/* 07A150 7F045620 460A0180 */ add.s $f6, $f0, $f10 -/* 07A154 7F045624 E606001C */ swc1 $f6, 0x1c($s0) -/* 07A158 7F045628 C604001C */ lwc1 $f4, 0x1c($s0) -/* 07A15C 7F04562C 4604903C */ c.lt.s $f18, $f4 -/* 07A160 7F045630 00000000 */ nop -/* 07A164 7F045634 45000002 */ bc1f .L7F045640 -/* 07A168 7F045638 00000000 */ nop -/* 07A16C 7F04563C E612001C */ swc1 $f18, 0x1c($s0) -.L7F045640: -/* 07A170 7F045640 10000029 */ b .L7F0456E8 -/* 07A174 7F045644 8E030000 */ lw $v1, ($s0) -/* 07A178 7F045648 C60000B0 */ lwc1 $f0, 0xb0($s0) -.L7F04564C: -/* 07A17C 7F04564C C7A80698 */ lwc1 $f8, 0x698($sp) -/* 07A180 7F045650 4600403C */ c.lt.s $f8, $f0 -/* 07A184 7F045654 00000000 */ nop -/* 07A188 7F045658 45000019 */ bc1f .L7F0456C0 -/* 07A18C 7F04565C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07A190 7F045660 C4268378 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) -/* 07A194 7F045664 C60A0014 */ lwc1 $f10, 0x14($s0) -/* 07A198 7F045668 C60800B4 */ lwc1 $f8, 0xb4($s0) -/* 07A19C 7F04566C 46065102 */ mul.s $f4, $f10, $f6 -/* 07A1A0 7F045670 46044280 */ add.s $f10, $f8, $f4 -/* 07A1A4 7F045674 E60A00B4 */ swc1 $f10, 0xb4($s0) -/* 07A1A8 7F045678 C4288378 */ lwc1 $f8, %lo(g_GlobalTimerDelta)($at) -/* 07A1AC 7F04567C C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07A1B0 7F045680 3C018005 */ lui $at, %hi(D_80052AA0) -/* 07A1B4 7F045684 46083102 */ mul.s $f4, $f6, $f8 -/* 07A1B8 7F045688 46040280 */ add.s $f10, $f0, $f4 -/* 07A1BC 7F04568C E60A00B0 */ swc1 $f10, 0xb0($s0) -/* 07A1C0 7F045690 C7A80698 */ lwc1 $f8, 0x698($sp) -/* 07A1C4 7F045694 C60600B0 */ lwc1 $f6, 0xb0($s0) -/* 07A1C8 7F045698 C42A2AA0 */ lwc1 $f10, %lo(D_80052AA0)($at) -/* 07A1CC 7F04569C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07A1D0 7F0456A0 46083101 */ sub.s $f4, $f6, $f8 -/* 07A1D4 7F0456A4 46045182 */ mul.s $f6, $f10, $f4 -/* 07A1D8 7F0456A8 C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07A1DC 7F0456AC 460A3102 */ mul.s $f4, $f6, $f10 -/* 07A1E0 7F0456B0 46044180 */ add.s $f6, $f8, $f4 -/* 07A1E4 7F0456B4 E7A60698 */ swc1 $f6, 0x698($sp) -/* 07A1E8 7F0456B8 1000000B */ b .L7F0456E8 -/* 07A1EC 7F0456BC 8E030000 */ lw $v1, ($s0) -.L7F0456C0: -/* 07A1F0 7F0456C0 E7A00698 */ swc1 $f0, 0x698($sp) -/* 07A1F4 7F0456C4 8E0F0000 */ lw $t7, ($s0) -/* 07A1F8 7F0456C8 2401FFDF */ li $at, -33 -/* 07A1FC 7F0456CC C60A00B4 */ lwc1 $f10, 0xb4($s0) -/* 07A200 7F0456D0 01E1C024 */ and $t8, $t7, $at -/* 07A204 7F0456D4 AE180000 */ sw $t8, ($s0) -/* 07A208 7F0456D8 37030010 */ ori $v1, $t8, 0x10 -/* 07A20C 7F0456DC E616001C */ swc1 $f22, 0x1c($s0) -/* 07A210 7F0456E0 AE030000 */ sw $v1, ($s0) -/* 07A214 7F0456E4 E60A0008 */ swc1 $f10, 8($s0) -.L7F0456E8: -/* 07A218 7F0456E8 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) -/* 07A21C 7F0456EC 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 07A220 7F0456F0 3C018005 */ lui $at, %hi(prop_projectile_gravity_modifier) -/* 07A224 7F0456F4 306B0010 */ andi $t3, $v1, 0x10 -/* 07A228 7F0456F8 C4322AA4 */ lwc1 $f18, %lo(prop_projectile_gravity_modifier)($at) -/* 07A22C 7F0456FC C4420000 */ lwc1 $f2, ($v0) -/* 07A230 7F045700 C600001C */ lwc1 $f0, 0x1c($s0) -/* 07A234 7F045704 15600015 */ bnez $t3, .L7F04575C -/* 07A238 7F045708 C6100014 */ lwc1 $f16, 0x14($s0) -/* 07A23C 7F04570C 46008100 */ add.s $f4, $f16, $f0 -/* 07A240 7F045710 C6080008 */ lwc1 $f8, 8($s0) -/* 07A244 7F045714 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07A248 7F045718 46022182 */ mul.s $f6, $f4, $f2 -/* 07A24C 7F04571C 46064280 */ add.s $f10, $f8, $f6 -/* 07A250 7F045720 E60A0008 */ swc1 $f10, 8($s0) -/* 07A254 7F045724 C4420000 */ lwc1 $f2, ($v0) -/* 07A258 7F045728 C60C0008 */ lwc1 $f12, 8($s0) -/* 07A25C 7F04572C 44815000 */ mtc1 $at, $f10 -/* 07A260 7F045730 46029102 */ mul.s $f4, $f18, $f2 -/* 07A264 7F045734 46046381 */ sub.s $f14, $f12, $f4 -/* 07A268 7F045738 460E6200 */ add.s $f8, $f12, $f14 -/* 07A26C 7F04573C 46081182 */ mul.s $f6, $f2, $f8 -/* 07A270 7F045740 C7A80698 */ lwc1 $f8, 0x698($sp) -/* 07A274 7F045744 460A3102 */ mul.s $f4, $f6, $f10 -/* 07A278 7F045748 46044180 */ add.s $f6, $f8, $f4 -/* 07A27C 7F04574C E7A60698 */ swc1 $f6, 0x698($sp) -/* 07A280 7F045750 E60E0008 */ swc1 $f14, 8($s0) -/* 07A284 7F045754 1000000C */ b .L7F045788 -/* 07A288 7F045758 C4420000 */ lwc1 $f2, ($v0) -.L7F04575C: -/* 07A28C 7F04575C 46008200 */ add.s $f8, $f16, $f0 -/* 07A290 7F045760 C60A0008 */ lwc1 $f10, 8($s0) -/* 07A294 7F045764 46024102 */ mul.s $f4, $f8, $f2 -/* 07A298 7F045768 46045180 */ add.s $f6, $f10, $f4 -/* 07A29C 7F04576C E6060008 */ swc1 $f6, 8($s0) -/* 07A2A0 7F045770 C60A0008 */ lwc1 $f10, 8($s0) -/* 07A2A4 7F045774 C4420000 */ lwc1 $f2, ($v0) -/* 07A2A8 7F045778 C7A80698 */ lwc1 $f8, 0x698($sp) -/* 07A2AC 7F04577C 46025102 */ mul.s $f4, $f10, $f2 -/* 07A2B0 7F045780 46044180 */ add.s $f6, $f8, $f4 -/* 07A2B4 7F045784 E7A60698 */ swc1 $f6, 0x698($sp) -.L7F045788: -/* 07A2B8 7F045788 C6080010 */ lwc1 $f8, 0x10($s0) -/* 07A2BC 7F04578C C60A0004 */ lwc1 $f10, 4($s0) -/* 07A2C0 7F045790 26240018 */ addiu $a0, $s1, 0x18 -/* 07A2C4 7F045794 46024102 */ mul.s $f4, $f8, $f2 -/* 07A2C8 7F045798 C6080018 */ lwc1 $f8, 0x18($s0) -/* 07A2CC 7F04579C 26050020 */ addiu $a1, $s0, 0x20 -/* 07A2D0 7F0457A0 46045180 */ add.s $f6, $f10, $f4 -/* 07A2D4 7F0457A4 E6060004 */ swc1 $f6, 4($s0) -/* 07A2D8 7F0457A8 C44A0000 */ lwc1 $f10, ($v0) -/* 07A2DC 7F0457AC C606000C */ lwc1 $f6, 0xc($s0) -/* 07A2E0 7F0457B0 460A4102 */ mul.s $f4, $f8, $f10 -/* 07A2E4 7F0457B4 46043200 */ add.s $f8, $f6, $f4 -/* 07A2E8 7F0457B8 C6060004 */ lwc1 $f6, 4($s0) -/* 07A2EC 7F0457BC E608000C */ swc1 $f8, 0xc($s0) -/* 07A2F0 7F0457C0 C4420000 */ lwc1 $f2, ($v0) -/* 07A2F4 7F0457C4 C7AA0694 */ lwc1 $f10, 0x694($sp) -/* 07A2F8 7F0457C8 8CE60000 */ lw $a2, ($a3) -/* 07A2FC 7F0457CC 46023102 */ mul.s $f4, $f6, $f2 -/* 07A300 7F0457D0 C7A6069C */ lwc1 $f6, 0x69c($sp) -/* 07A304 7F0457D4 46045200 */ add.s $f8, $f10, $f4 -/* 07A308 7F0457D8 E7A80694 */ swc1 $f8, 0x694($sp) -/* 07A30C 7F0457DC C60A000C */ lwc1 $f10, 0xc($s0) -/* 07A310 7F0457E0 AFA5006C */ sw $a1, 0x6c($sp) -/* 07A314 7F0457E4 AFA40070 */ sw $a0, 0x70($sp) -/* 07A318 7F0457E8 46025102 */ mul.s $f4, $f10, $f2 -/* 07A31C 7F0457EC 46043200 */ add.s $f8, $f6, $f4 -/* 07A320 7F0457F0 0FC15F7E */ jal sub_GAME_7F057DF8 -/* 07A324 7F0457F4 E7A8069C */ swc1 $f8, 0x69c($sp) -/* 07A328 7F0457F8 92390003 */ lbu $t9, 3($s1) -/* 07A32C 7F0457FC 24010008 */ li $at, 8 -/* 07A330 7F045800 57210013 */ bnel $t9, $at, .L7F045850 -/* 07A334 7F045804 8E040088 */ lw $a0, 0x88($s0) -/* 07A338 7F045808 82220080 */ lb $v0, 0x80($s1) -/* 07A33C 7F04580C 2401001D */ li $at, 29 -/* 07A340 7F045810 1041000D */ beq $v0, $at, .L7F045848 -/* 07A344 7F045814 2401001B */ li $at, 27 -/* 07A348 7F045818 1041000B */ beq $v0, $at, .L7F045848 -/* 07A34C 7F04581C 2401001C */ li $at, 28 -/* 07A350 7F045820 10410009 */ beq $v0, $at, .L7F045848 -/* 07A354 7F045824 24010021 */ li $at, 33 -/* 07A358 7F045828 10410007 */ beq $v0, $at, .L7F045848 -/* 07A35C 7F04582C 2401002F */ li $at, 47 -/* 07A360 7F045830 10410005 */ beq $v0, $at, .L7F045848 -/* 07A364 7F045834 24010030 */ li $at, 48 -/* 07A368 7F045838 10410003 */ beq $v0, $at, .L7F045848 -/* 07A36C 7F04583C 24010022 */ li $at, 34 -/* 07A370 7F045840 54410003 */ bnel $v0, $at, .L7F045850 -/* 07A374 7F045844 8E040088 */ lw $a0, 0x88($s0) -.L7F045848: -/* 07A378 7F045848 24120001 */ li $s2, 1 -/* 07A37C 7F04584C 8E040088 */ lw $a0, 0x88($s0) -.L7F045850: -/* 07A380 7F045850 50800004 */ beql $a0, $zero, .L7F045864 -/* 07A384 7F045854 02202025 */ move $a0, $s1 -/* 07A388 7F045858 0FC0F416 */ jal sub_GAME_7F03D058 -/* 07A38C 7F04585C 00002825 */ move $a1, $zero -/* 07A390 7F045860 02202025 */ move $a0, $s1 -.L7F045864: -/* 07A394 7F045864 27A50694 */ addiu $a1, $sp, 0x694 -/* 07A398 7F045868 27A60614 */ addiu $a2, $sp, 0x614 -/* 07A39C 7F04586C 27A70620 */ addiu $a3, $sp, 0x620 -/* 07A3A0 7F045870 AFB20010 */ sw $s2, 0x10($sp) -/* 07A3A4 7F045874 0FC10BAD */ jal sub_GAME_7F042EB4 -/* 07A3A8 7F045878 AFA00014 */ sw $zero, 0x14($sp) -/* 07A3AC 7F04587C AFA20664 */ sw $v0, 0x664($sp) -/* 07A3B0 7F045880 8E040088 */ lw $a0, 0x88($s0) -/* 07A3B4 7F045884 50800004 */ beql $a0, $zero, .L7F045898 -/* 07A3B8 7F045888 8FAC0664 */ lw $t4, 0x664($sp) -/* 07A3BC 7F04588C 0FC0F416 */ jal sub_GAME_7F03D058 -/* 07A3C0 7F045890 24050001 */ li $a1, 1 -/* 07A3C4 7F045894 8FAC0664 */ lw $t4, 0x664($sp) -.L7F045898: -/* 07A3C8 7F045898 240A0001 */ li $t2, 1 -/* 07A3CC 7F04589C 24010002 */ li $at, 2 -/* 07A3D0 7F0458A0 15810042 */ bne $t4, $at, .L7F0459AC -/* 07A3D4 7F0458A4 AFAA0690 */ sw $t2, 0x690($sp) -/* 07A3D8 7F0458A8 3C038003 */ lui $v1, %hi(D_80030B0C) -/* 07A3DC 7F0458AC 8C630B0C */ lw $v1, %lo(D_80030B0C)($v1) -/* 07A3E0 7F0458B0 10600007 */ beqz $v1, .L7F0458D0 -/* 07A3E4 7F0458B4 00000000 */ nop -/* 07A3E8 7F0458B8 90620000 */ lbu $v0, ($v1) -/* 07A3EC 7F0458BC 24010003 */ li $at, 3 -/* 07A3F0 7F0458C0 1041003A */ beq $v0, $at, .L7F0459AC -/* 07A3F4 7F0458C4 24010006 */ li $at, 6 -/* 07A3F8 7F0458C8 50410039 */ beql $v0, $at, .L7F0459B0 -/* 07A3FC 7F0458CC 8FAC0604 */ lw $t4, 0x604($sp) -.L7F0458D0: -/* 07A400 7F0458D0 10600007 */ beqz $v1, .L7F0458F0 -/* 07A404 7F0458D4 00002025 */ move $a0, $zero -/* 07A408 7F0458D8 8C620004 */ lw $v0, 4($v1) -/* 07A40C 7F0458DC 8C4E0064 */ lw $t6, 0x64($v0) -/* 07A410 7F0458E0 31CD0080 */ andi $t5, $t6, 0x80 -/* 07A414 7F0458E4 11A00002 */ beqz $t5, .L7F0458F0 -/* 07A418 7F0458E8 00000000 */ nop -/* 07A41C 7F0458EC 24040001 */ li $a0, 1 -.L7F0458F0: -/* 07A420 7F0458F0 5480002F */ bnezl $a0, .L7F0459B0 -/* 07A424 7F0458F4 8FAC0604 */ lw $t4, 0x604($sp) -/* 07A428 7F0458F8 0FC0FEDC */ jal projectileFree -/* 07A42C 7F0458FC 02002025 */ move $a0, $s0 -/* 07A430 7F045900 8E2F0064 */ lw $t7, 0x64($s1) -/* 07A434 7F045904 2401FF7F */ li $at, -129 -/* 07A438 7F045908 AE20006C */ sw $zero, 0x6c($s1) -/* 07A43C 7F04590C 01E1C024 */ and $t8, $t7, $at -/* 07A440 7F045910 AE380064 */ sw $t8, 0x64($s1) -/* 07A444 7F045914 92620001 */ lbu $v0, 1($s3) -/* 07A448 7F045918 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 07A44C 7F04591C 240500F1 */ li $a1, 241 -/* 07A450 7F045920 30480008 */ andi $t0, $v0, 8 -/* 07A454 7F045924 11000003 */ beqz $t0, .L7F045934 -/* 07A458 7F045928 00003025 */ move $a2, $zero -/* 07A45C 7F04592C 34490010 */ ori $t1, $v0, 0x10 -/* 07A460 7F045930 A2690001 */ sb $t1, 1($s3) -.L7F045934: -/* 07A464 7F045934 0C002382 */ jal sndPlaySfx -/* 07A468 7F045938 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07A46C 7F04593C 00402025 */ move $a0, $v0 -/* 07A470 7F045940 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 07A474 7F045944 26650008 */ addiu $a1, $s3, 8 -/* 07A478 7F045948 8E6B0014 */ lw $t3, 0x14($s3) -/* 07A47C 7F04594C 82240080 */ lb $a0, 0x80($s1) -/* 07A480 7F045950 0FC15DFA */ jal objectivestatusCheckDeposit -/* 07A484 7F045954 91650003 */ lbu $a1, 3($t3) -/* 07A488 7F045958 02202025 */ move $a0, $s1 -/* 07A48C 7F04595C 27A50614 */ addiu $a1, $sp, 0x614 -/* 07A490 7F045960 8E660014 */ lw $a2, 0x14($s3) -/* 07A494 7F045964 0FC10E6E */ jal sub_GAME_7F0439B8 -/* 07A498 7F045968 27A70620 */ addiu $a3, $sp, 0x620 -/* 07A49C 7F04596C 3C058003 */ lui $a1, %hi(D_80030B0C) -/* 07A4A0 7F045970 8CA50B0C */ lw $a1, %lo(D_80030B0C)($a1) -/* 07A4A4 7F045974 02602025 */ move $a0, $s3 -/* 07A4A8 7F045978 3C068007 */ lui $a2, %hi(g_CurrentProjectileModel) -/* 07A4AC 7F04597C 10A0000B */ beqz $a1, .L7F0459AC -/* 07A4B0 7F045980 3C078007 */ lui $a3, %hi(dword_CODE_bss_80075B74) -/* 07A4B4 7F045984 8E720014 */ lw $s2, 0x14($s3) -/* 07A4B8 7F045988 8CC65B70 */ lw $a2, %lo(g_CurrentProjectileModel)($a2) -/* 07A4BC 7F04598C 0FC10E9B */ jal objEmbed -/* 07A4C0 7F045990 8CE75B74 */ lw $a3, %lo(dword_CODE_bss_80075B74)($a3) -/* 07A4C4 7F045994 10400005 */ beqz $v0, .L7F0459AC -/* 07A4C8 7F045998 24190005 */ li $t9, 5 -/* 07A4CC 7F04599C AE720014 */ sw $s2, 0x14($s3) -/* 07A4D0 7F0459A0 240A0001 */ li $t2, 1 -/* 07A4D4 7F0459A4 AFB90680 */ sw $t9, 0x680($sp) -/* 07A4D8 7F0459A8 AFAA0604 */ sw $t2, 0x604($sp) -.L7F0459AC: -/* 07A4DC 7F0459AC 8FAC0604 */ lw $t4, 0x604($sp) -.L7F0459B0: -/* 07A4E0 7F0459B0 158000EC */ bnez $t4, .L7F045D64 -/* 07A4E4 7F0459B4 3C128003 */ lui $s2, %hi(D_80030B0C) -/* 07A4E8 7F0459B8 8E520B0C */ lw $s2, %lo(D_80030B0C)($s2) -/* 07A4EC 7F0459BC 524000EA */ beql $s2, $zero, .L7F045D68 -/* 07A4F0 7F0459C0 8FAC0604 */ lw $t4, 0x604($sp) -/* 07A4F4 7F0459C4 922E0003 */ lbu $t6, 3($s1) -/* 07A4F8 7F0459C8 24010008 */ li $at, 8 -/* 07A4FC 7F0459CC 55C100E6 */ bnel $t6, $at, .L7F045D68 -/* 07A500 7F0459D0 8FAC0604 */ lw $t4, 0x604($sp) -/* 07A504 7F0459D4 82220080 */ lb $v0, 0x80($s1) -/* 07A508 7F0459D8 24010003 */ li $at, 3 -/* 07A50C 7F0459DC 544100C3 */ bnel $v0, $at, .L7F045CEC -/* 07A510 7F0459E0 24010056 */ li $at, 86 -/* 07A514 7F0459E4 92420000 */ lbu $v0, ($s2) -/* 07A518 7F0459E8 24010003 */ li $at, 3 -/* 07A51C 7F0459EC 1041000D */ beq $v0, $at, .L7F045A24 -/* 07A520 7F0459F0 24010006 */ li $at, 6 -/* 07A524 7F0459F4 544100DC */ bnel $v0, $at, .L7F045D68 -/* 07A528 7F0459F8 8FAC0604 */ lw $t4, 0x604($sp) -/* 07A52C 7F0459FC 8E4D0004 */ lw $t5, 4($s2) -/* 07A530 7F045A00 51A000D9 */ beql $t5, $zero, .L7F045D68 -/* 07A534 7F045A04 8FAC0604 */ lw $t4, 0x604($sp) -/* 07A538 7F045A08 0FC26C57 */ jal getPlayerPointerIndex -/* 07A53C 7F045A0C 02402025 */ move $a0, $s2 -/* 07A540 7F045A10 0FC26C54 */ jal get_cur_playernum -/* 07A544 7F045A14 00409025 */ move $s2, $v0 -/* 07A548 7F045A18 105200D2 */ beq $v0, $s2, .L7F045D64 -/* 07A54C 7F045A1C 3C128003 */ lui $s2, %hi(D_80030B0C) -/* 07A550 7F045A20 8E520B0C */ lw $s2, %lo(D_80030B0C)($s2) -.L7F045A24: -/* 07A554 7F045A24 8E22006C */ lw $v0, 0x6c($s1) -/* 07A558 7F045A28 8E440004 */ lw $a0, 4($s2) -/* 07A55C 7F045A2C 8C4F0000 */ lw $t7, ($v0) -/* 07A560 7F045A30 31F80001 */ andi $t8, $t7, 1 -/* 07A564 7F045A34 530000CC */ beql $t8, $zero, .L7F045D68 -/* 07A568 7F045A38 8FAC0604 */ lw $t4, 0x604($sp) -/* 07A56C 7F045A3C 8C480090 */ lw $t0, 0x90($v0) -/* 07A570 7F045A40 5D0000C9 */ bgtzl $t0, .L7F045D68 -/* 07A574 7F045A44 8FAC0604 */ lw $t4, 0x604($sp) -/* 07A578 7F045A48 8E290064 */ lw $t1, 0x64($s1) -/* 07A57C 7F045A4C 3C068007 */ lui $a2, %hi(flt_CODE_bss_80075B78) -/* 07A580 7F045A50 24C65B78 */ addiu $a2, %lo(flt_CODE_bss_80075B78) # addiu $a2, $a2, 0x5b78 -/* 07A584 7F045A54 312B0020 */ andi $t3, $t1, 0x20 -/* 07A588 7F045A58 116000C2 */ beqz $t3, .L7F045D64 -/* 07A58C 7F045A5C 3C058003 */ lui $a1, %hi(bodypartshot) -/* 07A590 7F045A60 82270080 */ lb $a3, 0x80($s1) -/* 07A594 7F045A64 24190001 */ li $t9, 1 -/* 07A598 7F045A68 AFB90010 */ sw $t9, 0x10($sp) -/* 07A59C 7F045A6C 0FC09C9F */ jal handles_shot_actors -/* 07A5A0 7F045A70 8CA50B10 */ lw $a1, %lo(bodypartshot)($a1) -/* 07A5A4 7F045A74 104000BB */ beqz $v0, .L7F045D64 -/* 07A5A8 7F045A78 240A0001 */ li $t2, 1 -/* 07A5AC 7F045A7C AFAA0604 */ sw $t2, 0x604($sp) -/* 07A5B0 7F045A80 C610008C */ lwc1 $f16, 0x8c($s0) -/* 07A5B4 7F045A84 C7AA0620 */ lwc1 $f10, 0x620($sp) -/* 07A5B8 7F045A88 4610B03C */ c.lt.s $f22, $f16 -/* 07A5BC 7F045A8C 00000000 */ nop -/* 07A5C0 7F045A90 4502001D */ bc1fl .L7F045B08 -/* 07A5C4 7F045A94 8E0C0000 */ lw $t4, ($s0) -/* 07A5C8 7F045A98 C6020004 */ lwc1 $f2, 4($s0) -/* 07A5CC 7F045A9C C60C0008 */ lwc1 $f12, 8($s0) -/* 07A5D0 7F045AA0 C7A40624 */ lwc1 $f4, 0x624($sp) -/* 07A5D4 7F045AA4 460A1182 */ mul.s $f6, $f2, $f10 -/* 07A5D8 7F045AA8 C600000C */ lwc1 $f0, 0xc($s0) -/* 07A5DC 7F045AAC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07A5E0 7F045AB0 46046202 */ mul.s $f8, $f12, $f4 -/* 07A5E4 7F045AB4 46083100 */ add.s $f4, $f6, $f8 -/* 07A5E8 7F045AB8 C7A60628 */ lwc1 $f6, 0x628($sp) -/* 07A5EC 7F045ABC 46003202 */ mul.s $f8, $f6, $f0 -/* 07A5F0 7F045AC0 44813000 */ mtc1 $at, $f6 -/* 07A5F4 7F045AC4 46044380 */ add.s $f14, $f8, $f4 -/* 07A5F8 7F045AC8 46068200 */ add.s $f8, $f16, $f6 -/* 07A5FC 7F045ACC 46004107 */ neg.s $f4, $f8 -/* 07A600 7F045AD0 46047382 */ mul.s $f14, $f14, $f4 -/* 07A604 7F045AD4 00000000 */ nop -/* 07A608 7F045AD8 460A7182 */ mul.s $f6, $f14, $f10 -/* 07A60C 7F045ADC 46061200 */ add.s $f8, $f2, $f6 -/* 07A610 7F045AE0 E6080004 */ swc1 $f8, 4($s0) -/* 07A614 7F045AE4 C7A40624 */ lwc1 $f4, 0x624($sp) -/* 07A618 7F045AE8 46047282 */ mul.s $f10, $f14, $f4 -/* 07A61C 7F045AEC 460A6180 */ add.s $f6, $f12, $f10 -/* 07A620 7F045AF0 E6060008 */ swc1 $f6, 8($s0) -/* 07A624 7F045AF4 C7A80628 */ lwc1 $f8, 0x628($sp) -/* 07A628 7F045AF8 46087102 */ mul.s $f4, $f14, $f8 -/* 07A62C 7F045AFC 46040280 */ add.s $f10, $f0, $f4 -/* 07A630 7F045B00 E60A000C */ swc1 $f10, 0xc($s0) -/* 07A634 7F045B04 8E0C0000 */ lw $t4, ($s0) -.L7F045B08: -/* 07A638 7F045B08 318E0200 */ andi $t6, $t4, 0x200 -/* 07A63C 7F045B0C 55C00004 */ bnezl $t6, .L7F045B20 -/* 07A640 7F045B10 8E0D0090 */ lw $t5, 0x90($s0) -/* 07A644 7F045B14 0FC15EB0 */ jal mtxLoadRandomRotation -/* 07A648 7F045B18 8FA4006C */ lw $a0, 0x6c($sp) -/* 07A64C 7F045B1C 8E0D0090 */ lw $t5, 0x90($s0) -.L7F045B20: -/* 07A650 7F045B20 3C058003 */ lui $a1, %hi(D_80030B0C) -/* 07A654 7F045B24 2406FFFF */ li $a2, -1 -/* 07A658 7F045B28 25AF0001 */ addiu $t7, $t5, 1 -/* 07A65C 7F045B2C AE0F0090 */ sw $t7, 0x90($s0) -/* 07A660 7F045B30 8CA50B0C */ lw $a1, %lo(D_80030B0C)($a1) -/* 07A664 7F045B34 0FC19107 */ jal recall_joy2_hits_edit_detail_edit_flag -/* 07A668 7F045B38 82240080 */ lb $a0, 0x80($s1) -/* 07A66C 7F045B3C 3C188003 */ lui $t8, %hi(D_80030B0C) -/* 07A670 7F045B40 8F180B0C */ lw $t8, %lo(D_80030B0C)($t8) -/* 07A674 7F045B44 3C028003 */ lui $v0, %hi(bodypartshot) -/* 07A678 7F045B48 93080001 */ lbu $t0, 1($t8) -/* 07A67C 7F045B4C 31090002 */ andi $t1, $t0, 2 -/* 07A680 7F045B50 51200085 */ beql $t1, $zero, .L7F045D68 -/* 07A684 7F045B54 8FAC0604 */ lw $t4, 0x604($sp) -/* 07A688 7F045B58 8C420B10 */ lw $v0, %lo(bodypartshot)($v0) -/* 07A68C 7F045B5C 24010064 */ li $at, 100 -/* 07A690 7F045B60 10410080 */ beq $v0, $at, .L7F045D64 -/* 07A694 7F045B64 2401006E */ li $at, 110 -/* 07A698 7F045B68 1041007E */ beq $v0, $at, .L7F045D64 -/* 07A69C 7F045B6C 3C048007 */ lui $a0, %hi(g_CurrentProjectileModel) -/* 07A6A0 7F045B70 3C058007 */ lui $a1, %hi(dword_CODE_bss_80075B74) -/* 07A6A4 7F045B74 8CA55B74 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 07A6A8 7F045B78 8C845B70 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 07A6AC 7F045B7C 0FC1B198 */ jal modelFindNodeMtx -/* 07A6B0 7F045B80 00003025 */ move $a2, $zero -/* 07A6B4 7F045B84 C7A60614 */ lwc1 $f6, 0x614($sp) -/* 07A6B8 7F045B88 C7A80618 */ lwc1 $f8, 0x618($sp) -/* 07A6BC 7F045B8C C7A4061C */ lwc1 $f4, 0x61c($sp) -/* 07A6C0 7F045B90 00409025 */ move $s2, $v0 -/* 07A6C4 7F045B94 E7A605CC */ swc1 $f6, 0x5cc($sp) -/* 07A6C8 7F045B98 E7A805D0 */ swc1 $f8, 0x5d0($sp) -/* 07A6CC 7F045B9C 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 07A6D0 7F045BA0 E7A405D4 */ swc1 $f4, 0x5d4($sp) -/* 07A6D4 7F045BA4 00402025 */ move $a0, $v0 -/* 07A6D8 7F045BA8 0FC1611D */ jal mtx4TransformVecInPlace -/* 07A6DC 7F045BAC 27A505CC */ addiu $a1, $sp, 0x5cc -/* 07A6E0 7F045BB0 C7AA05CC */ lwc1 $f10, 0x5cc($sp) -/* 07A6E4 7F045BB4 C6460030 */ lwc1 $f6, 0x30($s2) -/* 07A6E8 7F045BB8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07A6EC 7F045BBC 44810000 */ mtc1 $at, $f0 -/* 07A6F0 7F045BC0 46065201 */ sub.s $f8, $f10, $f6 -/* 07A6F4 7F045BC4 3C048007 */ lui $a0, %hi(g_CurrentProjectileModel) -/* 07A6F8 7F045BC8 3C058007 */ lui $a1, %hi(dword_CODE_bss_80075B74) -/* 07A6FC 7F045BCC 8CA55B74 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 07A700 7F045BD0 46004102 */ mul.s $f4, $f8, $f0 -/* 07A704 7F045BD4 C7A805D0 */ lwc1 $f8, 0x5d0($sp) -/* 07A708 7F045BD8 8C845B70 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 07A70C 7F045BDC 46045180 */ add.s $f6, $f10, $f4 -/* 07A710 7F045BE0 E7A605CC */ swc1 $f6, 0x5cc($sp) -/* 07A714 7F045BE4 C64A0034 */ lwc1 $f10, 0x34($s2) -/* 07A718 7F045BE8 460A4101 */ sub.s $f4, $f8, $f10 -/* 07A71C 7F045BEC 46002182 */ mul.s $f6, $f4, $f0 -/* 07A720 7F045BF0 C7A405D4 */ lwc1 $f4, 0x5d4($sp) -/* 07A724 7F045BF4 46064280 */ add.s $f10, $f8, $f6 -/* 07A728 7F045BF8 E7AA05D0 */ swc1 $f10, 0x5d0($sp) -/* 07A72C 7F045BFC C6480038 */ lwc1 $f8, 0x38($s2) -/* 07A730 7F045C00 46082181 */ sub.s $f6, $f4, $f8 -/* 07A734 7F045C04 46003282 */ mul.s $f10, $f6, $f0 -/* 07A738 7F045C08 460A2200 */ add.s $f8, $f4, $f10 -/* 07A73C 7F045C0C 0FC1B3A4 */ jal getjointsize -/* 07A740 7F045C10 E7A805D4 */ swc1 $f8, 0x5d4($sp) -/* 07A744 7F045C14 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07A748 7F045C18 44813000 */ mtc1 $at, $f6 -/* 07A74C 7F045C1C 3C018007 */ lui $at, %hi(flt_CODE_bss_80075B88) -/* 07A750 7F045C20 C42A5B88 */ lwc1 $f10, %lo(flt_CODE_bss_80075B88)($at) -/* 07A754 7F045C24 46060102 */ mul.s $f4, $f0, $f6 -/* 07A758 7F045C28 C7A605CC */ lwc1 $f6, 0x5cc($sp) -/* 07A75C 7F045C2C 3C048007 */ lui $a0, %hi(g_CurrentProjectileModel) -/* 07A760 7F045C30 3C058007 */ lui $a1, %hi(dword_CODE_bss_80075B74) -/* 07A764 7F045C34 8CA55B74 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 07A768 7F045C38 8C845B70 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 07A76C 7F045C3C 460A2202 */ mul.s $f8, $f4, $f10 -/* 07A770 7F045C40 46083101 */ sub.s $f4, $f6, $f8 -/* 07A774 7F045C44 0FC1B3A4 */ jal getjointsize -/* 07A778 7F045C48 E7A405CC */ swc1 $f4, 0x5cc($sp) -/* 07A77C 7F045C4C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07A780 7F045C50 44815000 */ mtc1 $at, $f10 -/* 07A784 7F045C54 3C018007 */ lui $at, %hi(flt_CODE_bss_80075B78) -/* 07A788 7F045C58 C4285B8C */ lwc1 $f8, %lo(flt_CODE_bss_80075B78+0x14)($at) -/* 07A78C 7F045C5C 460A0182 */ mul.s $f6, $f0, $f10 -/* 07A790 7F045C60 C7AA05D0 */ lwc1 $f10, 0x5d0($sp) -/* 07A794 7F045C64 3C048007 */ lui $a0, %hi(g_CurrentProjectileModel) -/* 07A798 7F045C68 3C058007 */ lui $a1, %hi(dword_CODE_bss_80075B74) -/* 07A79C 7F045C6C 8CA55B74 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 07A7A0 7F045C70 8C845B70 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 07A7A4 7F045C74 46083102 */ mul.s $f4, $f6, $f8 -/* 07A7A8 7F045C78 46045181 */ sub.s $f6, $f10, $f4 -/* 07A7AC 7F045C7C 0FC1B3A4 */ jal getjointsize -/* 07A7B0 7F045C80 E7A605D0 */ swc1 $f6, 0x5d0($sp) -/* 07A7B4 7F045C84 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07A7B8 7F045C88 44814000 */ mtc1 $at, $f8 -/* 07A7BC 7F045C8C 3C018007 */ lui $at, %hi(flt_CODE_bss_80075B88) -/* 07A7C0 7F045C90 C4245B90 */ lwc1 $f4, %lo(flt_CODE_bss_80075B88+0x8)($at) -/* 07A7C4 7F045C94 46080282 */ mul.s $f10, $f0, $f8 -/* 07A7C8 7F045C98 C7A805D4 */ lwc1 $f8, 0x5d4($sp) -/* 07A7CC 7F045C9C 02402025 */ move $a0, $s2 -/* 07A7D0 7F045CA0 27A5058C */ addiu $a1, $sp, 0x58c -/* 07A7D4 7F045CA4 46045182 */ mul.s $f6, $f10, $f4 -/* 07A7D8 7F045CA8 46064281 */ sub.s $f10, $f8, $f6 -/* 07A7DC 7F045CAC 0FC16799 */ jal matrix_4x4_set_inverse_rotation_and_translation -/* 07A7E0 7F045CB0 E7AA05D4 */ swc1 $f10, 0x5d4($sp) -/* 07A7E4 7F045CB4 27A4058C */ addiu $a0, $sp, 0x58c -/* 07A7E8 7F045CB8 0FC1611D */ jal mtx4TransformVecInPlace -/* 07A7EC 7F045CBC 27A505CC */ addiu $a1, $sp, 0x5cc -/* 07A7F0 7F045CC0 3C048007 */ lui $a0, %hi(g_CurrentProjectileModel) -/* 07A7F4 7F045CC4 3C058003 */ lui $a1, %hi(bodypartshot) -/* 07A7F8 7F045CC8 3C068007 */ lui $a2, %hi(dword_CODE_bss_80075B74) -/* 07A7FC 7F045CCC 8CC65B74 */ lw $a2, %lo(dword_CODE_bss_80075B74)($a2) -/* 07A800 7F045CD0 8CA50B10 */ lw $a1, %lo(bodypartshot)($a1) -/* 07A804 7F045CD4 8C845B70 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 07A808 7F045CD8 0FC08877 */ jal sub_GAME_7F0221DC -/* 07A80C 7F045CDC 27A705CC */ addiu $a3, $sp, 0x5cc -/* 07A810 7F045CE0 10000021 */ b .L7F045D68 -/* 07A814 7F045CE4 8FAC0604 */ lw $t4, 0x604($sp) -/* 07A818 7F045CE8 24010056 */ li $at, 86 -.L7F045CEC: -/* 07A81C 7F045CEC 5441001E */ bnel $v0, $at, .L7F045D68 -/* 07A820 7F045CF0 8FAC0604 */ lw $t4, 0x604($sp) -/* 07A824 7F045CF4 92420000 */ lbu $v0, ($s2) -/* 07A828 7F045CF8 240B0001 */ li $t3, 1 -/* 07A82C 7F045CFC 24010003 */ li $at, 3 -/* 07A830 7F045D00 14410008 */ bne $v0, $at, .L7F045D24 -/* 07A834 7F045D04 AFAB0604 */ sw $t3, 0x604($sp) -/* 07A838 7F045D08 8E440004 */ lw $a0, 4($s2) -/* 07A83C 7F045D0C 26250058 */ addiu $a1, $s1, 0x58 -/* 07A840 7F045D10 3C064000 */ lui $a2, 0x4000 -/* 07A844 7F045D14 0FC09E01 */ jal chrlvExplosionDamage -/* 07A848 7F045D18 24070001 */ li $a3, 1 -/* 07A84C 7F045D1C 10000011 */ b .L7F045D64 -/* 07A850 7F045D20 A6200082 */ sh $zero, 0x82($s1) -.L7F045D24: -/* 07A854 7F045D24 24010001 */ li $at, 1 -/* 07A858 7F045D28 10410004 */ beq $v0, $at, .L7F045D3C -/* 07A85C 7F045D2C 3C0542C8 */ lui $a1, 0x42c8 -/* 07A860 7F045D30 24010004 */ li $at, 4 -/* 07A864 7F045D34 5441000B */ bnel $v0, $at, .L7F045D64 -/* 07A868 7F045D38 A6200082 */ sh $zero, 0x82($s1) -.L7F045D3C: -/* 07A86C 7F045D3C 8E220064 */ lw $v0, 0x64($s1) -/* 07A870 7F045D40 3C010006 */ lui $at, 6 -/* 07A874 7F045D44 8E440004 */ lw $a0, 4($s2) -/* 07A878 7F045D48 0041C824 */ and $t9, $v0, $at -/* 07A87C 7F045D4C 00195442 */ srl $t2, $t9, 0x11 -/* 07A880 7F045D50 AFAA0010 */ sw $t2, 0x10($sp) -/* 07A884 7F045D54 26260058 */ addiu $a2, $s1, 0x58 -/* 07A888 7F045D58 0FC13842 */ jal maybe_detonate_object -/* 07A88C 7F045D5C 24070056 */ li $a3, 86 -/* 07A890 7F045D60 A6200082 */ sh $zero, 0x82($s1) -.L7F045D64: -/* 07A894 7F045D64 8FAC0604 */ lw $t4, 0x604($sp) -.L7F045D68: -/* 07A898 7F045D68 5580010B */ bnezl $t4, .L7F046198 -/* 07A89C 7F045D6C 8E2A0064 */ lw $t2, 0x64($s1) -/* 07A8A0 7F045D70 8FAE0664 */ lw $t6, 0x664($sp) -/* 07A8A4 7F045D74 55C00031 */ bnezl $t6, .L7F045E3C -/* 07A8A8 7F045D78 8E0F0000 */ lw $t7, ($s0) -/* 07A8AC 7F045D7C C610008C */ lwc1 $f16, 0x8c($s0) -/* 07A8B0 7F045D80 C7A40620 */ lwc1 $f4, 0x620($sp) -/* 07A8B4 7F045D84 4610B03C */ c.lt.s $f22, $f16 -/* 07A8B8 7F045D88 00000000 */ nop -/* 07A8BC 7F045D8C 4502002B */ bc1fl .L7F045E3C -/* 07A8C0 7F045D90 8E0F0000 */ lw $t7, ($s0) -/* 07A8C4 7F045D94 C6020004 */ lwc1 $f2, 4($s0) -/* 07A8C8 7F045D98 C60C0008 */ lwc1 $f12, 8($s0) -/* 07A8CC 7F045D9C C7A60624 */ lwc1 $f6, 0x624($sp) -/* 07A8D0 7F045DA0 46041202 */ mul.s $f8, $f2, $f4 -/* 07A8D4 7F045DA4 C600000C */ lwc1 $f0, 0xc($s0) -/* 07A8D8 7F045DA8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07A8DC 7F045DAC 46066282 */ mul.s $f10, $f12, $f6 -/* 07A8E0 7F045DB0 4616603E */ c.le.s $f12, $f22 -/* 07A8E4 7F045DB4 460A4180 */ add.s $f6, $f8, $f10 -/* 07A8E8 7F045DB8 C7A80628 */ lwc1 $f8, 0x628($sp) -/* 07A8EC 7F045DBC 46004282 */ mul.s $f10, $f8, $f0 -/* 07A8F0 7F045DC0 44814000 */ mtc1 $at, $f8 -/* 07A8F4 7F045DC4 46065380 */ add.s $f14, $f10, $f6 -/* 07A8F8 7F045DC8 46088280 */ add.s $f10, $f16, $f8 -/* 07A8FC 7F045DCC 46005187 */ neg.s $f6, $f10 -/* 07A900 7F045DD0 46067382 */ mul.s $f14, $f14, $f6 -/* 07A904 7F045DD4 00000000 */ nop -/* 07A908 7F045DD8 46047202 */ mul.s $f8, $f14, $f4 -/* 07A90C 7F045DDC 46081280 */ add.s $f10, $f2, $f8 -/* 07A910 7F045DE0 E60A0004 */ swc1 $f10, 4($s0) -/* 07A914 7F045DE4 C7A60624 */ lwc1 $f6, 0x624($sp) -/* 07A918 7F045DE8 46067102 */ mul.s $f4, $f14, $f6 -/* 07A91C 7F045DEC 46046200 */ add.s $f8, $f12, $f4 -/* 07A920 7F045DF0 E6080008 */ swc1 $f8, 8($s0) -/* 07A924 7F045DF4 C7AA0628 */ lwc1 $f10, 0x628($sp) -/* 07A928 7F045DF8 460A7182 */ mul.s $f6, $f14, $f10 -/* 07A92C 7F045DFC 46060100 */ add.s $f4, $f0, $f6 -/* 07A930 7F045E00 4500000D */ bc1f .L7F045E38 -/* 07A934 7F045E04 E604000C */ swc1 $f4, 0xc($s0) -/* 07A938 7F045E08 C6080008 */ lwc1 $f8, 8($s0) -/* 07A93C 7F045E0C 240D0001 */ li $t5, 1 -/* 07A940 7F045E10 4608B03E */ c.le.s $f22, $f8 -/* 07A944 7F045E14 00000000 */ nop -/* 07A948 7F045E18 45030007 */ bc1tl .L7F045E38 -/* 07A94C 7F045E1C AFAD060C */ sw $t5, 0x60c($sp) -/* 07A950 7F045E20 C62A005C */ lwc1 $f10, 0x5c($s1) -/* 07A954 7F045E24 460AA03E */ c.le.s $f20, $f10 -/* 07A958 7F045E28 00000000 */ nop -/* 07A95C 7F045E2C 45020003 */ bc1fl .L7F045E3C -/* 07A960 7F045E30 8E0F0000 */ lw $t7, ($s0) -/* 07A964 7F045E34 AFAD060C */ sw $t5, 0x60c($sp) -.L7F045E38: -/* 07A968 7F045E38 8E0F0000 */ lw $t7, ($s0) -.L7F045E3C: -/* 07A96C 7F045E3C C7B4063C */ lwc1 $f20, 0x63c($sp) -/* 07A970 7F045E40 31F80008 */ andi $t8, $t7, 8 -/* 07A974 7F045E44 17000014 */ bnez $t8, .L7F045E98 -/* 07A978 7F045E48 00000000 */ nop -/* 07A97C 7F045E4C 8E640014 */ lw $a0, 0x14($s3) -/* 07A980 7F045E50 8E650008 */ lw $a1, 8($s3) -/* 07A984 7F045E54 0FC2CA5C */ jal stanGetPositionYValue -/* 07A988 7F045E58 8E660010 */ lw $a2, 0x10($s3) -/* 07A98C 7F045E5C 46000506 */ mov.s $f20, $f0 -/* 07A990 7F045E60 8FA40640 */ lw $a0, 0x640($sp) -/* 07A994 7F045E64 0FC0FA6F */ jal chrpropSumMatrixPosY -/* 07A998 7F045E68 8FA50070 */ lw $a1, 0x70($sp) -/* 07A99C 7F045E6C 4600A101 */ sub.s $f4, $f20, $f0 -/* 07A9A0 7F045E70 E7A00638 */ swc1 $f0, 0x638($sp) -/* 07A9A4 7F045E74 C666000C */ lwc1 $f6, 0xc($s3) -/* 07A9A8 7F045E78 00004025 */ move $t0, $zero -/* 07A9AC 7F045E7C 4604303C */ c.lt.s $f6, $f4 -/* 07A9B0 7F045E80 00000000 */ nop -/* 07A9B4 7F045E84 45000002 */ bc1f .L7F045E90 -/* 07A9B8 7F045E88 00000000 */ nop -/* 07A9BC 7F045E8C 24080001 */ li $t0, 1 -.L7F045E90: -/* 07A9C0 7F045E90 10000001 */ b .L7F045E98 -/* 07A9C4 7F045E94 AFA80610 */ sw $t0, 0x610($sp) -.L7F045E98: -/* 07A9C8 7F045E98 8FA90610 */ lw $t1, 0x610($sp) -/* 07A9CC 7F045E9C 8FAB0664 */ lw $t3, 0x664($sp) -/* 07A9D0 7F045EA0 55200004 */ bnezl $t1, .L7F045EB4 -/* 07A9D4 7F045EA4 8E190000 */ lw $t9, ($s0) -/* 07A9D8 7F045EA8 5560000B */ bnezl $t3, .L7F045ED8 -/* 07A9DC 7F045EAC 8FAD0610 */ lw $t5, 0x610($sp) -/* 07A9E0 7F045EB0 8E190000 */ lw $t9, ($s0) -.L7F045EB4: -/* 07A9E4 7F045EB4 332A0200 */ andi $t2, $t9, 0x200 -/* 07A9E8 7F045EB8 55400004 */ bnezl $t2, .L7F045ECC -/* 07A9EC 7F045EBC 8E0C0090 */ lw $t4, 0x90($s0) -/* 07A9F0 7F045EC0 0FC15EB0 */ jal mtxLoadRandomRotation -/* 07A9F4 7F045EC4 8FA4006C */ lw $a0, 0x6c($sp) -/* 07A9F8 7F045EC8 8E0C0090 */ lw $t4, 0x90($s0) -.L7F045ECC: -/* 07A9FC 7F045ECC 258E0001 */ addiu $t6, $t4, 1 -/* 07AA00 7F045ED0 AE0E0090 */ sw $t6, 0x90($s0) -/* 07AA04 7F045ED4 8FAD0610 */ lw $t5, 0x610($sp) -.L7F045ED8: -/* 07AA08 7F045ED8 8FAF060C */ lw $t7, 0x60c($sp) -/* 07AA0C 7F045EDC 8FB80610 */ lw $t8, 0x610($sp) -/* 07AA10 7F045EE0 15A00003 */ bnez $t5, .L7F045EF0 -/* 07AA14 7F045EE4 00000000 */ nop -/* 07AA18 7F045EE8 51E0003A */ beql $t7, $zero, .L7F045FD4 -/* 07AA1C 7F045EEC 922C0003 */ lbu $t4, 3($s1) -.L7F045EF0: -/* 07AA20 7F045EF0 13000009 */ beqz $t8, .L7F045F18 -/* 07AA24 7F045EF4 C7A40618 */ lwc1 $f4, 0x618($sp) -/* 07AA28 7F045EF8 C7A80638 */ lwc1 $f8, 0x638($sp) -/* 07AA2C 7F045EFC 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 07AA30 7F045F00 44813000 */ mtc1 $at, $f6 -/* 07AA34 7F045F04 4608A281 */ sub.s $f10, $f20, $f8 -/* 07AA38 7F045F08 46065000 */ add.s $f0, $f10, $f6 -/* 07AA3C 7F045F0C E660000C */ swc1 $f0, 0xc($s3) -/* 07AA40 7F045F10 10000008 */ b .L7F045F34 -/* 07AA44 7F045F14 E620005C */ swc1 $f0, 0x5c($s1) -.L7F045F18: -/* 07AA48 7F045F18 C7A80638 */ lwc1 $f8, 0x638($sp) -/* 07AA4C 7F045F1C 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 07AA50 7F045F20 44813000 */ mtc1 $at, $f6 -/* 07AA54 7F045F24 46082281 */ sub.s $f10, $f4, $f8 -/* 07AA58 7F045F28 46065080 */ add.s $f2, $f10, $f6 -/* 07AA5C 7F045F2C E662000C */ swc1 $f2, 0xc($s3) -/* 07AA60 7F045F30 E622005C */ swc1 $f2, 0x5c($s1) -.L7F045F34: -/* 07AA64 7F045F34 8E230064 */ lw $v1, 0x64($s1) -/* 07AA68 7F045F38 02202025 */ move $a0, $s1 -/* 07AA6C 7F045F3C 000343C0 */ sll $t0, $v1, 0xf -/* 07AA70 7F045F40 05000002 */ bltz $t0, .L7F045F4C -/* 07AA74 7F045F44 34690100 */ ori $t1, $v1, 0x100 -/* 07AA78 7F045F48 AE290064 */ sw $t1, 0x64($s1) -.L7F045F4C: -/* 07AA7C 7F045F4C C610008C */ lwc1 $f16, 0x8c($s0) -/* 07AA80 7F045F50 4610B03C */ c.lt.s $f22, $f16 -/* 07AA84 7F045F54 00000000 */ nop -/* 07AA88 7F045F58 4500001B */ bc1f .L7F045FC8 -/* 07AA8C 7F045F5C 00000000 */ nop -/* 07AA90 7F045F60 C6040008 */ lwc1 $f4, 8($s0) -/* 07AA94 7F045F64 46008207 */ neg.s $f8, $f16 -/* 07AA98 7F045F68 3C018005 */ lui $at, %hi(D_80052AA8) -/* 07AA9C 7F045F6C 46082282 */ mul.s $f10, $f4, $f8 -/* 07AAA0 7F045F70 C4202AA8 */ lwc1 $f0, %lo(D_80052AA8)($at) -/* 07AAA4 7F045F74 E60A0008 */ swc1 $f10, 8($s0) -/* 07AAA8 7F045F78 C6060008 */ lwc1 $f6, 8($s0) -/* 07AAAC 7F045F7C 4600303C */ c.lt.s $f6, $f0 -/* 07AAB0 7F045F80 00000000 */ nop -/* 07AAB4 7F045F84 45020013 */ bc1fl .L7F045FD4 -/* 07AAB8 7F045F88 922C0003 */ lbu $t4, 3($s1) -/* 07AABC 7F045F8C 8E0B0000 */ lw $t3, ($s0) -/* 07AAC0 7F045F90 02202025 */ move $a0, $s1 -/* 07AAC4 7F045F94 31790002 */ andi $t9, $t3, 2 -/* 07AAC8 7F045F98 13200007 */ beqz $t9, .L7F045FB8 -/* 07AACC 7F045F9C 00000000 */ nop -/* 07AAD0 7F045FA0 8E0A0090 */ lw $t2, 0x90($s0) -/* 07AAD4 7F045FA4 24010001 */ li $at, 1 -/* 07AAD8 7F045FA8 15410003 */ bne $t2, $at, .L7F045FB8 -/* 07AADC 7F045FAC 00000000 */ nop -/* 07AAE0 7F045FB0 10000007 */ b .L7F045FD0 -/* 07AAE4 7F045FB4 E6000008 */ swc1 $f0, 8($s0) -.L7F045FB8: -/* 07AAE8 7F045FB8 0FC10C79 */ jal sub_GAME_7F0431E4 -/* 07AAEC 7F045FBC 27A5062C */ addiu $a1, $sp, 0x62c -/* 07AAF0 7F045FC0 10000004 */ b .L7F045FD4 -/* 07AAF4 7F045FC4 922C0003 */ lbu $t4, 3($s1) -.L7F045FC8: -/* 07AAF8 7F045FC8 0FC10C79 */ jal sub_GAME_7F0431E4 -/* 07AAFC 7F045FCC 27A5062C */ addiu $a1, $sp, 0x62c -.L7F045FD0: -/* 07AB00 7F045FD0 922C0003 */ lbu $t4, 3($s1) -.L7F045FD4: -/* 07AB04 7F045FD4 24010008 */ li $at, 8 -/* 07AB08 7F045FD8 5581006F */ bnel $t4, $at, .L7F046198 -/* 07AB0C 7F045FDC 8E2A0064 */ lw $t2, 0x64($s1) -/* 07AB10 7F045FE0 82220080 */ lb $v0, 0x80($s1) -/* 07AB14 7F045FE4 24010003 */ li $at, 3 -/* 07AB18 7F045FE8 54410006 */ bnel $v0, $at, .L7F046004 -/* 07AB1C 7F045FEC 24010056 */ li $at, 86 -/* 07AB20 7F045FF0 0FC10D94 */ jal sub_GAME_7F043650 -/* 07AB24 7F045FF4 02202025 */ move $a0, $s1 -/* 07AB28 7F045FF8 10000042 */ b .L7F046104 -/* 07AB2C 7F045FFC 8FB80664 */ lw $t8, 0x664($sp) -/* 07AB30 7F046000 24010056 */ li $at, 86 -.L7F046004: -/* 07AB34 7F046004 1441002D */ bne $v0, $at, .L7F0460BC -/* 07AB38 7F046008 8FAE0664 */ lw $t6, 0x664($sp) -/* 07AB3C 7F04600C 11C00003 */ beqz $t6, .L7F04601C -/* 07AB40 7F046010 8FAD0610 */ lw $t5, 0x610($sp) -/* 07AB44 7F046014 51A00004 */ beql $t5, $zero, .L7F046028 -/* 07AB48 7F046018 C6020004 */ lwc1 $f2, 4($s0) -.L7F04601C: -/* 07AB4C 7F04601C 10000038 */ b .L7F046100 -/* 07AB50 7F046020 A6200082 */ sh $zero, 0x82($s1) -/* 07AB54 7F046024 C6020004 */ lwc1 $f2, 4($s0) -.L7F046028: -/* 07AB58 7F046028 C60C0008 */ lwc1 $f12, 8($s0) -/* 07AB5C 7F04602C C600000C */ lwc1 $f0, 0xc($s0) -/* 07AB60 7F046030 46021102 */ mul.s $f4, $f2, $f2 -/* 07AB64 7F046034 3C018005 */ lui $at, %hi(D_80052AAC) -/* 07AB68 7F046038 26240058 */ addiu $a0, $s1, 0x58 -/* 07AB6C 7F04603C 460C6202 */ mul.s $f8, $f12, $f12 -/* 07AB70 7F046040 24060008 */ li $a2, 8 -/* 07AB74 7F046044 46000182 */ mul.s $f6, $f0, $f0 -/* 07AB78 7F046048 46082280 */ add.s $f10, $f4, $f8 -/* 07AB7C 7F04604C C4242AAC */ lwc1 $f4, %lo(D_80052AAC)($at) -/* 07AB80 7F046050 460A3380 */ add.s $f14, $f6, $f10 -/* 07AB84 7F046054 460E203C */ c.lt.s $f4, $f14 -/* 07AB88 7F046058 00000000 */ nop -/* 07AB8C 7F04605C 45020005 */ bc1fl .L7F046074 -/* 07AB90 7F046060 8E0F00A8 */ lw $t7, 0xa8($s0) -/* 07AB94 7F046064 E6160010 */ swc1 $f22, 0x10($s0) -/* 07AB98 7F046068 E6160014 */ swc1 $f22, 0x14($s0) -/* 07AB9C 7F04606C E6160018 */ swc1 $f22, 0x18($s0) -/* 07ABA0 7F046070 8E0F00A8 */ lw $t7, 0xa8($s0) -.L7F046074: -/* 07ABA4 7F046074 29E1012D */ slti $at, $t7, 0x12d -/* 07ABA8 7F046078 54200008 */ bnezl $at, .L7F04609C -/* 07ABAC 7F04607C 92690001 */ lbu $t1, 1($s3) -/* 07ABB0 7F046080 8E180000 */ lw $t8, ($s0) -/* 07ABB4 7F046084 2401FFCF */ li $at, -49 -/* 07ABB8 7F046088 E616001C */ swc1 $f22, 0x1c($s0) -/* 07ABBC 7F04608C 03014024 */ and $t0, $t8, $at -/* 07ABC0 7F046090 1000001B */ b .L7F046100 -/* 07ABC4 7F046094 AE080000 */ sw $t0, ($s0) -/* 07ABC8 7F046098 92690001 */ lbu $t1, 1($s3) -.L7F04609C: -/* 07ABCC 7F04609C 8E650014 */ lw $a1, 0x14($s3) -/* 07ABD0 7F0460A0 2667002C */ addiu $a3, $s3, 0x2c -/* 07ABD4 7F0460A4 312B0008 */ andi $t3, $t1, 8 -/* 07ABD8 7F0460A8 000BC82B */ sltu $t9, $zero, $t3 -/* 07ABDC 7F0460AC 0FC279C0 */ jal explosionCreateSmoke -/* 07ABE0 7F0460B0 AFB90010 */ sw $t9, 0x10($sp) -/* 07ABE4 7F0460B4 10000013 */ b .L7F046104 -/* 07ABE8 7F0460B8 8FB80664 */ lw $t8, 0x664($sp) -.L7F0460BC: -/* 07ABEC 7F0460BC 24010057 */ li $at, 87 -/* 07ABF0 7F0460C0 1441000F */ bne $v0, $at, .L7F046100 -/* 07ABF4 7F0460C4 8FAA0610 */ lw $t2, 0x610($sp) -/* 07ABF8 7F0460C8 15400003 */ bnez $t2, .L7F0460D8 -/* 07ABFC 7F0460CC 8FAC060C */ lw $t4, 0x60c($sp) -/* 07AC00 7F0460D0 11800003 */ beqz $t4, .L7F0460E0 -/* 07AC04 7F0460D4 26240058 */ addiu $a0, $s1, 0x58 -.L7F0460D8: -/* 07AC08 7F0460D8 10000009 */ b .L7F046100 -/* 07AC0C 7F0460DC A6200082 */ sh $zero, 0x82($s1) -.L7F0460E0: -/* 07AC10 7F0460E0 926E0001 */ lbu $t6, 1($s3) -/* 07AC14 7F0460E4 8E650014 */ lw $a1, 0x14($s3) -/* 07AC18 7F0460E8 24060009 */ li $a2, 9 -/* 07AC1C 7F0460EC 31CD0008 */ andi $t5, $t6, 8 -/* 07AC20 7F0460F0 000D782B */ sltu $t7, $zero, $t5 -/* 07AC24 7F0460F4 AFAF0010 */ sw $t7, 0x10($sp) -/* 07AC28 7F0460F8 0FC279C0 */ jal explosionCreateSmoke -/* 07AC2C 7F0460FC 2667002C */ addiu $a3, $s3, 0x2c -.L7F046100: -/* 07AC30 7F046100 8FB80664 */ lw $t8, 0x664($sp) -.L7F046104: -/* 07AC34 7F046104 3C128005 */ lui $s2, %hi(D_80048380) -/* 07AC38 7F046108 26528380 */ addiu $s2, %lo(D_80048380) # addiu $s2, $s2, -0x7c80 -/* 07AC3C 7F04610C 13000003 */ beqz $t8, .L7F04611C -/* 07AC40 7F046110 8FA80610 */ lw $t0, 0x610($sp) -/* 07AC44 7F046114 51000020 */ beql $t0, $zero, .L7F046198 -/* 07AC48 7F046118 8E2A0064 */ lw $t2, 0x64($s1) -.L7F04611C: -/* 07AC4C 7F04611C 8E420000 */ lw $v0, ($s2) -/* 07AC50 7F046120 8E0900AC */ lw $t1, 0xac($s0) -/* 07AC54 7F046124 244BFFFE */ addiu $t3, $v0, -2 -/* 07AC58 7F046128 012B082A */ slt $at, $t1, $t3 -/* 07AC5C 7F04612C 50200019 */ beql $at, $zero, .L7F046194 -/* 07AC60 7F046130 AE0200AC */ sw $v0, 0xac($s0) -/* 07AC64 7F046134 82220080 */ lb $v0, 0x80($s1) -/* 07AC68 7F046138 26790008 */ addiu $t9, $s3, 8 -/* 07AC6C 7F04613C 24010003 */ li $at, 3 -/* 07AC70 7F046140 10410004 */ beq $v0, $at, .L7F046154 -/* 07AC74 7F046144 AFB90070 */ sw $t9, 0x70($sp) -/* 07AC78 7F046148 24010002 */ li $at, 2 -/* 07AC7C 7F04614C 14410008 */ bne $v0, $at, .L7F046170 -/* 07AC80 7F046150 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -.L7F046154: -/* 07AC84 7F046154 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 07AC88 7F046158 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07AC8C 7F04615C 24050003 */ li $a1, 3 -/* 07AC90 7F046160 0C002382 */ jal sndPlaySfx -/* 07AC94 7F046164 00003025 */ move $a2, $zero -/* 07AC98 7F046168 10000006 */ b .L7F046184 -/* 07AC9C 7F04616C 00402025 */ move $a0, $v0 -.L7F046170: -/* 07ACA0 7F046170 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07ACA4 7F046174 2405002D */ li $a1, 45 -/* 07ACA8 7F046178 0C002382 */ jal sndPlaySfx -/* 07ACAC 7F04617C 00003025 */ move $a2, $zero -/* 07ACB0 7F046180 00402025 */ move $a0, $v0 -.L7F046184: -/* 07ACB4 7F046184 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 07ACB8 7F046188 8FA50070 */ lw $a1, 0x70($sp) -/* 07ACBC 7F04618C 8E420000 */ lw $v0, ($s2) -/* 07ACC0 7F046190 AE0200AC */ sw $v0, 0xac($s0) -.L7F046194: -/* 07ACC4 7F046194 8E2A0064 */ lw $t2, 0x64($s1) -.L7F046198: -/* 07ACC8 7F046198 3C128005 */ lui $s2, %hi(D_80048380) -/* 07ACCC 7F04619C 26528380 */ addiu $s2, %lo(D_80048380) # addiu $s2, $s2, -0x7c80 -/* 07ACD0 7F0461A0 314C0080 */ andi $t4, $t2, 0x80 -/* 07ACD4 7F0461A4 5180011D */ beql $t4, $zero, .L7F04661C -/* 07ACD8 7F0461A8 8FAD0690 */ lw $t5, 0x690($sp) -/* 07ACDC 7F0461AC 8E0E0000 */ lw $t6, ($s0) -/* 07ACE0 7F0461B0 31CD0400 */ andi $t5, $t6, 0x400 -/* 07ACE4 7F0461B4 51A00119 */ beql $t5, $zero, .L7F04661C -/* 07ACE8 7F0461B8 8FAD0690 */ lw $t5, 0x690($sp) -/* 07ACEC 7F0461BC 8E420000 */ lw $v0, ($s2) -/* 07ACF0 7F0461C0 3C0143C8 */ li $at, 0x43C80000 # 400.000000 -/* 07ACF4 7F0461C4 27B00564 */ addiu $s0, $sp, 0x564 -/* 07ACF8 7F0461C8 304F0007 */ andi $t7, $v0, 7 -/* 07ACFC 7F0461CC 15E00112 */ bnez $t7, .L7F046618 -/* 07AD00 7F0461D0 00002025 */ move $a0, $zero -/* 07AD04 7F0461D4 44810000 */ mtc1 $at, $f0 -/* 07AD08 7F0461D8 C6280058 */ lwc1 $f8, 0x58($s1) -/* 07AD0C 7F0461DC 3C0144E1 */ li $at, 0x44E10000 # 1800.000000 -/* 07AD10 7F0461E0 44812000 */ mtc1 $at, $f4 -/* 07AD14 7F0461E4 46004180 */ add.s $f6, $f8, $f0 -/* 07AD18 7F0461E8 3058000F */ andi $t8, $v0, 0xf -/* 07AD1C 7F0461EC E7A60564 */ swc1 $f6, 0x564($sp) -/* 07AD20 7F0461F0 C62A005C */ lwc1 $f10, 0x5c($s1) -/* 07AD24 7F0461F4 46045201 */ sub.s $f8, $f10, $f4 -/* 07AD28 7F0461F8 E7A80568 */ swc1 $f8, 0x568($sp) -/* 07AD2C 7F0461FC C6260060 */ lwc1 $f6, 0x60($s1) -/* 07AD30 7F046200 17000005 */ bnez $t8, .L7F046218 -/* 07AD34 7F046204 E7A6056C */ swc1 $f6, 0x56c($sp) -/* 07AD38 7F046208 C7AA056C */ lwc1 $f10, 0x56c($sp) -/* 07AD3C 7F04620C 46005100 */ add.s $f4, $f10, $f0 -/* 07AD40 7F046210 10000004 */ b .L7F046224 -/* 07AD44 7F046214 E7A4056C */ swc1 $f4, 0x56c($sp) -.L7F046218: -/* 07AD48 7F046218 C7A8056C */ lwc1 $f8, 0x56c($sp) -/* 07AD4C 7F04621C 46004181 */ sub.s $f6, $f8, $f0 -/* 07AD50 7F046220 E7A6056C */ swc1 $f6, 0x56c($sp) -.L7F046224: -/* 07AD54 7F046224 8E220010 */ lw $v0, 0x10($s1) -/* 07AD58 7F046228 02002825 */ move $a1, $s0 -/* 07AD5C 7F04622C 24070014 */ li $a3, 20 -/* 07AD60 7F046230 8C460014 */ lw $a2, 0x14($v0) -/* 07AD64 7F046234 2448002C */ addiu $t0, $v0, 0x2c -/* 07AD68 7F046238 AFA80018 */ sw $t0, 0x18($sp) -/* 07AD6C 7F04623C AFA0001C */ sw $zero, 0x1c($sp) -/* 07AD70 7F046240 AFA00014 */ sw $zero, 0x14($sp) -/* 07AD74 7F046244 0FC27094 */ jal explosionCreate -/* 07AD78 7F046248 AFA00010 */ sw $zero, 0x10($sp) -/* 07AD7C 7F04624C 8E490000 */ lw $t1, ($s2) -/* 07AD80 7F046250 24010028 */ li $at, 40 -/* 07AD84 7F046254 02002025 */ move $a0, $s0 -/* 07AD88 7F046258 0121001A */ div $zero, $t1, $at -/* 07AD8C 7F04625C 00005810 */ mfhi $t3 -/* 07AD90 7F046260 556000EE */ bnezl $t3, .L7F04661C -/* 07AD94 7F046264 8FAD0690 */ lw $t5, 0x690($sp) -/* 07AD98 7F046268 8E220010 */ lw $v0, 0x10($s1) -/* 07AD9C 7F04626C 24190001 */ li $t9, 1 -/* 07ADA0 7F046270 2406000A */ li $a2, 10 -/* 07ADA4 7F046274 8C450014 */ lw $a1, 0x14($v0) -/* 07ADA8 7F046278 AFB90010 */ sw $t9, 0x10($sp) -/* 07ADAC 7F04627C 0FC279C0 */ jal explosionCreateSmoke -/* 07ADB0 7F046280 2447002C */ addiu $a3, $v0, 0x2c -/* 07ADB4 7F046284 100000E5 */ b .L7F04661C -/* 07ADB8 7F046288 8FAD0690 */ lw $t5, 0x690($sp) -/* 07ADBC 7F04628C C6000060 */ lwc1 $f0, 0x60($s0) -.L7F046290: -/* 07ADC0 7F046290 44815000 */ mtc1 $at, $f10 -/* 07ADC4 7F046294 24120001 */ li $s2, 1 -/* 07ADC8 7F046298 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07ADCC 7F04629C 460A003C */ c.lt.s $f0, $f10 -/* 07ADD0 7F0462A0 26040068 */ addiu $a0, $s0, 0x68 -/* 07ADD4 7F0462A4 26050078 */ addiu $a1, $s0, 0x78 -/* 07ADD8 7F0462A8 45020031 */ bc1fl .L7F046370 -/* 07ADDC 7F0462AC C60A0004 */ lwc1 $f10, 4($s0) -/* 07ADE0 7F0462B0 C6020064 */ lwc1 $f2, 0x64($s0) -/* 07ADE4 7F0462B4 C4248378 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07ADE8 7F0462B8 3C0A8005 */ lui $t2, %hi(g_ClockTimer) -/* 07ADEC 7F0462BC 3C018005 */ lui $at, %hi(D_80052AB0) -/* 07ADF0 7F0462C0 46041202 */ mul.s $f8, $f2, $f4 -/* 07ADF4 7F0462C4 27B20550 */ addiu $s2, $sp, 0x550 -/* 07ADF8 7F0462C8 46080180 */ add.s $f6, $f0, $f8 -/* 07ADFC 7F0462CC E6060060 */ swc1 $f6, 0x60($s0) -/* 07AE00 7F0462D0 8D4A8374 */ lw $t2, %lo(g_ClockTimer)($t2) -/* 07AE04 7F0462D4 59400005 */ blezl $t2, .L7F0462EC -/* 07AE08 7F0462D8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07AE0C 7F0462DC C42A2AB0 */ lwc1 $f10, %lo(D_80052AB0)($at) -/* 07AE10 7F0462E0 460A1102 */ mul.s $f4, $f2, $f10 -/* 07AE14 7F0462E4 E6040064 */ swc1 $f4, 0x64($s0) -/* 07AE18 7F0462E8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -.L7F0462EC: -/* 07AE1C 7F0462EC 44814000 */ mtc1 $at, $f8 -/* 07AE20 7F0462F0 C6000060 */ lwc1 $f0, 0x60($s0) -/* 07AE24 7F0462F4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07AE28 7F0462F8 4600403C */ c.lt.s $f8, $f0 -/* 07AE2C 7F0462FC 00000000 */ nop -/* 07AE30 7F046300 45030006 */ bc1tl .L7F04631C -/* 07AE34 7F046304 44813000 */ mtc1 $at, $f6 -/* 07AE38 7F046308 8E0C0000 */ lw $t4, ($s0) -/* 07AE3C 7F04630C 318E0008 */ andi $t6, $t4, 8 -/* 07AE40 7F046310 51C00006 */ beql $t6, $zero, .L7F04632C -/* 07AE44 7F046314 44060000 */ mfc1 $a2, $f0 -/* 07AE48 7F046318 44813000 */ mtc1 $at, $f6 -.L7F04631C: -/* 07AE4C 7F04631C 00000000 */ nop -/* 07AE50 7F046320 E6060060 */ swc1 $f6, 0x60($s0) -/* 07AE54 7F046324 C6000060 */ lwc1 $f0, 0x60($s0) -/* 07AE58 7F046328 44060000 */ mfc1 $a2, $f0 -.L7F04632C: -/* 07AE5C 7F04632C 0FC16E82 */ jal quaternion_slerp -/* 07AE60 7F046330 02403825 */ move $a3, $s2 -/* 07AE64 7F046334 26250018 */ addiu $a1, $s1, 0x18 -/* 07AE68 7F046338 AFA50070 */ sw $a1, 0x70($sp) -/* 07AE6C 7F04633C 0FC16D8A */ jal quaternion_to_matrix -/* 07AE70 7F046340 02402025 */ move $a0, $s2 -/* 07AE74 7F046344 C60C00C0 */ lwc1 $f12, 0xc0($s0) -/* 07AE78 7F046348 0FC1626D */ jal matrix_column_1_scalar_multiply -/* 07AE7C 7F04634C 8FA50070 */ lw $a1, 0x70($sp) -/* 07AE80 7F046350 C60C00C4 */ lwc1 $f12, 0xc4($s0) -/* 07AE84 7F046354 0FC16279 */ jal matrix_column_2_scalar_multiply -/* 07AE88 7F046358 8FA50070 */ lw $a1, 0x70($sp) -/* 07AE8C 7F04635C C60C00C8 */ lwc1 $f12, 0xc8($s0) -/* 07AE90 7F046360 0FC16293 */ jal matrix_column_3_scalar_multiply_2 -/* 07AE94 7F046364 8FA50070 */ lw $a1, 0x70($sp) -/* 07AE98 7F046368 00009025 */ move $s2, $zero -/* 07AE9C 7F04636C C60A0004 */ lwc1 $f10, 4($s0) -.L7F046370: -/* 07AEA0 7F046370 460AB032 */ c.eq.s $f22, $f10 -/* 07AEA4 7F046374 00000000 */ nop -/* 07AEA8 7F046378 4502000F */ bc1fl .L7F0463B8 -/* 07AEAC 7F04637C 8E0D0000 */ lw $t5, ($s0) -/* 07AEB0 7F046380 C604000C */ lwc1 $f4, 0xc($s0) -/* 07AEB4 7F046384 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07AEB8 7F046388 4604B032 */ c.eq.s $f22, $f4 -/* 07AEBC 7F04638C 00000000 */ nop -/* 07AEC0 7F046390 45020009 */ bc1fl .L7F0463B8 -/* 07AEC4 7F046394 8E0D0000 */ lw $t5, ($s0) -/* 07AEC8 7F046398 C6080060 */ lwc1 $f8, 0x60($s0) -/* 07AECC 7F04639C 44813000 */ mtc1 $at, $f6 -/* 07AED0 7F0463A0 00000000 */ nop -/* 07AED4 7F0463A4 4606403C */ c.lt.s $f8, $f6 -/* 07AED8 7F0463A8 00000000 */ nop -/* 07AEDC 7F0463AC 45000088 */ bc1f .L7F0465D0 -/* 07AEE0 7F0463B0 00000000 */ nop -/* 07AEE4 7F0463B4 8E0D0000 */ lw $t5, ($s0) -.L7F0463B8: -/* 07AEE8 7F0463B8 02202025 */ move $a0, $s1 -/* 07AEEC 7F0463BC 26380018 */ addiu $t8, $s1, 0x18 -/* 07AEF0 7F0463C0 31AF0008 */ andi $t7, $t5, 8 -/* 07AEF4 7F0463C4 15E00082 */ bnez $t7, .L7F0465D0 -/* 07AEF8 7F0463C8 00000000 */ nop -/* 07AEFC 7F0463CC AFB80070 */ sw $t8, 0x70($sp) -/* 07AF00 7F0463D0 0FC1001E */ jal chrobjGetBboxFromObjectRecord -/* 07AF04 7F0463D4 00009025 */ move $s2, $zero -/* 07AF08 7F0463D8 3C038005 */ lui $v1, %hi(g_ClockTimer) -/* 07AF0C 7F0463DC 8C638374 */ lw $v1, %lo(g_ClockTimer)($v1) -/* 07AF10 7F0463E0 AFA2054C */ sw $v0, 0x54c($sp) -/* 07AF14 7F0463E4 00002025 */ move $a0, $zero -/* 07AF18 7F0463E8 18600048 */ blez $v1, .L7F04650C -/* 07AF1C 7F0463EC 3C018005 */ lui $at, %hi(D_80052AB4) -/* 07AF20 7F0463F0 C42E2AB4 */ lwc1 $f14, %lo(D_80052AB4)($at) -/* 07AF24 7F0463F4 C7AA0694 */ lwc1 $f10, 0x694($sp) -.L7F0463F8: -/* 07AF28 7F0463F8 C6040004 */ lwc1 $f4, 4($s0) -/* 07AF2C 7F0463FC C7A6069C */ lwc1 $f6, 0x69c($sp) -/* 07AF30 7F046400 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07AF34 7F046404 46045200 */ add.s $f8, $f10, $f4 -/* 07AF38 7F046408 E7A80694 */ swc1 $f8, 0x694($sp) -/* 07AF3C 7F04640C C60A000C */ lwc1 $f10, 0xc($s0) -/* 07AF40 7F046410 460A3100 */ add.s $f4, $f6, $f10 -/* 07AF44 7F046414 44813000 */ mtc1 $at, $f6 -/* 07AF48 7F046418 E7A4069C */ swc1 $f4, 0x69c($sp) -/* 07AF4C 7F04641C C6080060 */ lwc1 $f8, 0x60($s0) -/* 07AF50 7F046420 4608303E */ c.le.s $f6, $f8 -/* 07AF54 7F046424 00000000 */ nop -/* 07AF58 7F046428 45020035 */ bc1fl .L7F046500 -/* 07AF5C 7F04642C 24840001 */ addiu $a0, $a0, 1 -/* 07AF60 7F046430 C60A0094 */ lwc1 $f10, 0x94($s0) -/* 07AF64 7F046434 460AB03C */ c.lt.s $f22, $f10 -/* 07AF68 7F046438 00000000 */ nop -/* 07AF6C 7F04643C 45020027 */ bc1fl .L7F0464DC -/* 07AF70 7F046440 C6060004 */ lwc1 $f6, 4($s0) -/* 07AF74 7F046444 C600000C */ lwc1 $f0, 0xc($s0) -/* 07AF78 7F046448 C6020004 */ lwc1 $f2, 4($s0) -/* 07AF7C 7F04644C AFA40548 */ sw $a0, 0x548($sp) -/* 07AF80 7F046450 46000102 */ mul.s $f4, $f0, $f0 -/* 07AF84 7F046454 00000000 */ nop -/* 07AF88 7F046458 46021202 */ mul.s $f8, $f2, $f2 -/* 07AF8C 7F04645C 0C007DF8 */ jal sqrtf -/* 07AF90 7F046460 46082300 */ add.s $f12, $f4, $f8 -/* 07AF94 7F046464 3C018005 */ lui $at, %hi(D_80052AB8) -/* 07AF98 7F046468 C42E2AB8 */ lwc1 $f14, %lo(D_80052AB8)($at) -/* 07AF9C 7F04646C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07AFA0 7F046470 C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07AFA4 7F046474 C6060094 */ lwc1 $f6, 0x94($s0) -/* 07AFA8 7F046478 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07AFAC 7F04647C 44814000 */ mtc1 $at, $f8 -/* 07AFB0 7F046480 460A3102 */ mul.s $f4, $f6, $f10 -/* 07AFB4 7F046484 8FA40548 */ lw $a0, 0x548($sp) -/* 07AFB8 7F046488 3C038005 */ lui $v1, %hi(g_ClockTimer) -/* 07AFBC 7F04648C 46002303 */ div.s $f12, $f4, $f0 -/* 07AFC0 7F046490 460C403E */ c.le.s $f8, $f12 -/* 07AFC4 7F046494 00000000 */ nop -/* 07AFC8 7F046498 45020005 */ bc1fl .L7F0464B0 -/* 07AFCC 7F04649C C6020004 */ lwc1 $f2, 4($s0) -/* 07AFD0 7F0464A0 E6160004 */ swc1 $f22, 4($s0) -/* 07AFD4 7F0464A4 1000000A */ b .L7F0464D0 -/* 07AFD8 7F0464A8 E616000C */ swc1 $f22, 0xc($s0) -/* 07AFDC 7F0464AC C6020004 */ lwc1 $f2, 4($s0) -.L7F0464B0: -/* 07AFE0 7F0464B0 C600000C */ lwc1 $f0, 0xc($s0) -/* 07AFE4 7F0464B4 460C1182 */ mul.s $f6, $f2, $f12 -/* 07AFE8 7F0464B8 00000000 */ nop -/* 07AFEC 7F0464BC 460C0102 */ mul.s $f4, $f0, $f12 -/* 07AFF0 7F0464C0 46061281 */ sub.s $f10, $f2, $f6 -/* 07AFF4 7F0464C4 46040201 */ sub.s $f8, $f0, $f4 -/* 07AFF8 7F0464C8 E60A0004 */ swc1 $f10, 4($s0) -/* 07AFFC 7F0464CC E608000C */ swc1 $f8, 0xc($s0) -.L7F0464D0: -/* 07B000 7F0464D0 1000000A */ b .L7F0464FC -/* 07B004 7F0464D4 8C638374 */ lw $v1, %lo(g_ClockTimer)($v1) -/* 07B008 7F0464D8 C6060004 */ lwc1 $f6, 4($s0) -.L7F0464DC: -/* 07B00C 7F0464DC C604000C */ lwc1 $f4, 0xc($s0) -/* 07B010 7F0464E0 3C038005 */ lui $v1, %hi(g_ClockTimer) -/* 07B014 7F0464E4 460E3282 */ mul.s $f10, $f6, $f14 -/* 07B018 7F0464E8 00000000 */ nop -/* 07B01C 7F0464EC 460E2202 */ mul.s $f8, $f4, $f14 -/* 07B020 7F0464F0 E60A0004 */ swc1 $f10, 4($s0) -/* 07B024 7F0464F4 E608000C */ swc1 $f8, 0xc($s0) -/* 07B028 7F0464F8 8C638374 */ lw $v1, %lo(g_ClockTimer)($v1) -.L7F0464FC: -/* 07B02C 7F0464FC 24840001 */ addiu $a0, $a0, 1 -.L7F046500: -/* 07B030 7F046500 0083082A */ slt $at, $a0, $v1 -/* 07B034 7F046504 5420FFBC */ bnezl $at, .L7F0463F8 -/* 07B038 7F046508 C7AA0694 */ lwc1 $f10, 0x694($sp) -.L7F04650C: -/* 07B03C 7F04650C 02202025 */ move $a0, $s1 -/* 07B040 7F046510 27A50694 */ addiu $a1, $sp, 0x694 -/* 07B044 7F046514 27A60530 */ addiu $a2, $sp, 0x530 -/* 07B048 7F046518 27A7053C */ addiu $a3, $sp, 0x53c -/* 07B04C 7F04651C AFA00010 */ sw $zero, 0x10($sp) -/* 07B050 7F046520 0FC10BAD */ jal sub_GAME_7F042EB4 -/* 07B054 7F046524 AFA00014 */ sw $zero, 0x14($sp) -/* 07B058 7F046528 24080001 */ li $t0, 1 -/* 07B05C 7F04652C AFA80690 */ sw $t0, 0x690($sp) -/* 07B060 7F046530 8E660010 */ lw $a2, 0x10($s3) -/* 07B064 7F046534 8E650008 */ lw $a1, 8($s3) -/* 07B068 7F046538 0FC2CA5C */ jal stanGetPositionYValue -/* 07B06C 7F04653C 8E640014 */ lw $a0, 0x14($s3) -/* 07B070 7F046540 46000506 */ mov.s $f20, $f0 -/* 07B074 7F046544 8FA4054C */ lw $a0, 0x54c($sp) -/* 07B078 7F046548 0FC0FA6F */ jal chrpropSumMatrixPosY -/* 07B07C 7F04654C 8FA50070 */ lw $a1, 0x70($sp) -/* 07B080 7F046550 3C018005 */ lui $at, %hi(D_80052ABC) -/* 07B084 7F046554 C42E2ABC */ lwc1 $f14, %lo(D_80052ABC)($at) -/* 07B088 7F046558 4600A181 */ sub.s $f6, $f20, $f0 -/* 07B08C 7F04655C 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 07B090 7F046560 44815000 */ mtc1 $at, $f10 -/* 07B094 7F046564 3C018005 */ lui $at, %hi(D_80052AC0) -/* 07B098 7F046568 460A3300 */ add.s $f12, $f6, $f10 -/* 07B09C 7F04656C E66C000C */ swc1 $f12, 0xc($s3) -/* 07B0A0 7F046570 E62C005C */ swc1 $f12, 0x5c($s1) -/* 07B0A4 7F046574 C6020004 */ lwc1 $f2, 4($s0) -/* 07B0A8 7F046578 460E103C */ c.lt.s $f2, $f14 -/* 07B0AC 7F04657C 00000000 */ nop -/* 07B0B0 7F046580 45000013 */ bc1f .L7F0465D0 -/* 07B0B4 7F046584 00000000 */ nop -/* 07B0B8 7F046588 C4242AC0 */ lwc1 $f4, %lo(D_80052AC0)($at) -/* 07B0BC 7F04658C 4602203C */ c.lt.s $f4, $f2 -/* 07B0C0 7F046590 00000000 */ nop -/* 07B0C4 7F046594 4500000E */ bc1f .L7F0465D0 -/* 07B0C8 7F046598 00000000 */ nop -/* 07B0CC 7F04659C C600000C */ lwc1 $f0, 0xc($s0) -/* 07B0D0 7F0465A0 3C018005 */ lui $at, %hi(D_80052AC4) -/* 07B0D4 7F0465A4 460E003C */ c.lt.s $f0, $f14 -/* 07B0D8 7F0465A8 00000000 */ nop -/* 07B0DC 7F0465AC 45000008 */ bc1f .L7F0465D0 -/* 07B0E0 7F0465B0 00000000 */ nop -/* 07B0E4 7F0465B4 C4282AC4 */ lwc1 $f8, %lo(D_80052AC4)($at) -/* 07B0E8 7F0465B8 4600403C */ c.lt.s $f8, $f0 -/* 07B0EC 7F0465BC 00000000 */ nop -/* 07B0F0 7F0465C0 45000003 */ bc1f .L7F0465D0 -/* 07B0F4 7F0465C4 00000000 */ nop -/* 07B0F8 7F0465C8 E616000C */ swc1 $f22, 0xc($s0) -/* 07B0FC 7F0465CC E6160004 */ swc1 $f22, 4($s0) -.L7F0465D0: -/* 07B100 7F0465D0 16400005 */ bnez $s2, .L7F0465E8 -/* 07B104 7F0465D4 00000000 */ nop -/* 07B108 7F0465D8 8E090000 */ lw $t1, ($s0) -/* 07B10C 7F0465DC 312B0008 */ andi $t3, $t1, 8 -/* 07B110 7F0465E0 5160000E */ beql $t3, $zero, .L7F04661C -/* 07B114 7F0465E4 8FAD0690 */ lw $t5, 0x690($sp) -.L7F0465E8: -/* 07B118 7F0465E8 0FC0FEDC */ jal projectileFree -/* 07B11C 7F0465EC 02002025 */ move $a0, $s0 -/* 07B120 7F0465F0 8E390064 */ lw $t9, 0x64($s1) -/* 07B124 7F0465F4 2401FF7F */ li $at, -129 -/* 07B128 7F0465F8 AE20006C */ sw $zero, 0x6c($s1) -/* 07B12C 7F0465FC 03215024 */ and $t2, $t9, $at -/* 07B130 7F046600 AE2A0064 */ sw $t2, 0x64($s1) -/* 07B134 7F046604 92620001 */ lbu $v0, 1($s3) -/* 07B138 7F046608 304C0008 */ andi $t4, $v0, 8 -/* 07B13C 7F04660C 11800002 */ beqz $t4, .L7F046618 -/* 07B140 7F046610 344E0010 */ ori $t6, $v0, 0x10 -/* 07B144 7F046614 A26E0001 */ sb $t6, 1($s3) -.L7F046618: -/* 07B148 7F046618 8FAD0690 */ lw $t5, 0x690($sp) -.L7F04661C: -/* 07B14C 7F04661C 11A0000B */ beqz $t5, .L7F04664C -/* 07B150 7F046620 262F0058 */ addiu $t7, $s1, 0x58 -/* 07B154 7F046624 AFAF0070 */ sw $t7, 0x70($sp) -/* 07B158 7F046628 0FC10121 */ jal chrobjCollisionRelated -/* 07B15C 7F04662C 02202025 */ move $a0, $s1 -/* 07B160 7F046630 0FC15B28 */ jal setupUpdateObjectRoomPosition -/* 07B164 7F046634 02202025 */ move $a0, $s1 -/* 07B168 7F046638 8E240010 */ lw $a0, 0x10($s1) -/* 07B16C 7F04663C 0FC100AD */ jal sub_GAME_7F0402B4 -/* 07B170 7F046640 2625007C */ addiu $a1, $s1, 0x7c -/* 07B174 7F046644 0FC146F3 */ jal detonate_proxmine_In_range -/* 07B178 7F046648 8FA40070 */ lw $a0, 0x70($sp) -.L7F04664C: -/* 07B17C 7F04664C 92220003 */ lbu $v0, 3($s1) -/* 07B180 7F046650 24010001 */ li $at, 1 -/* 07B184 7F046654 54410052 */ bnel $v0, $at, .L7F0467A0 -/* 07B188 7F046658 24010006 */ li $at, 6 -/* 07B18C 7F04665C 8E700004 */ lw $s0, 4($s3) -/* 07B190 7F046660 3C188005 */ lui $t8, %hi(g_GlobalTimer) -/* 07B194 7F046664 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07B198 7F046668 E7A6067C */ swc1 $f6, 0x67c($sp) -/* 07B19C 7F04666C 8E0200EC */ lw $v0, 0xec($s0) -/* 07B1A0 7F046670 58400012 */ blezl $v0, .L7F0466BC -/* 07B1A4 7F046674 820C00BC */ lb $t4, 0xbc($s0) -/* 07B1A8 7F046678 8F18837C */ lw $t8, %lo(g_GlobalTimer)($t8) -/* 07B1AC 7F04667C 8E0800A0 */ lw $t0, 0xa0($s0) -/* 07B1B0 7F046680 03084823 */ subu $t1, $t8, $t0 -/* 07B1B4 7F046684 0049082A */ slt $at, $v0, $t1 -/* 07B1B8 7F046688 5020000C */ beql $at, $zero, .L7F0466BC -/* 07B1BC 7F04668C 820C00BC */ lb $t4, 0xbc($s0) -/* 07B1C0 7F046690 820B00BC */ lb $t3, 0xbc($s0) -/* 07B1C4 7F046694 55600009 */ bnezl $t3, .L7F0466BC -/* 07B1C8 7F046698 820C00BC */ lb $t4, 0xbc($s0) -/* 07B1CC 7F04669C 8E190008 */ lw $t9, 8($s0) -/* 07B1D0 7F0466A0 02002025 */ move $a0, $s0 -/* 07B1D4 7F0466A4 00195000 */ sll $t2, $t9, 0 -/* 07B1D8 7F0466A8 05420004 */ bltzl $t2, .L7F0466BC -/* 07B1DC 7F0466AC 820C00BC */ lb $t4, 0xbc($s0) -/* 07B1E0 7F0466B0 0FC15262 */ jal doorActivate -/* 07B1E4 7F0466B4 24050002 */ li $a1, 2 -/* 07B1E8 7F0466B8 820C00BC */ lb $t4, 0xbc($s0) -.L7F0466BC: -/* 07B1EC 7F0466BC 24010003 */ li $at, 3 -/* 07B1F0 7F0466C0 5581001B */ bnel $t4, $at, .L7F046730 -/* 07B1F4 7F0466C4 960D009A */ lhu $t5, 0x9a($s0) -/* 07B1F8 7F0466C8 8E0200C8 */ lw $v0, 0xc8($s0) -/* 07B1FC 7F0466CC 24030001 */ li $v1, 1 -/* 07B200 7F0466D0 02002025 */ move $a0, $s0 -/* 07B204 7F0466D4 10400011 */ beqz $v0, .L7F04671C -/* 07B208 7F0466D8 00000000 */ nop -/* 07B20C 7F0466DC 1050000F */ beq $v0, $s0, .L7F04671C -/* 07B210 7F0466E0 00000000 */ nop -/* 07B214 7F0466E4 804E00BC */ lb $t6, 0xbc($v0) -.L7F0466E8: -/* 07B218 7F0466E8 55C00007 */ bnezl $t6, .L7F046708 -/* 07B21C 7F0466EC 00001825 */ move $v1, $zero -/* 07B220 7F0466F0 C44A00B4 */ lwc1 $f10, 0xb4($v0) -/* 07B224 7F0466F4 460AB03C */ c.lt.s $f22, $f10 -/* 07B228 7F0466F8 00000000 */ nop -/* 07B22C 7F0466FC 45020003 */ bc1fl .L7F04670C -/* 07B230 7F046700 8C4200C8 */ lw $v0, 0xc8($v0) -/* 07B234 7F046704 00001825 */ move $v1, $zero -.L7F046708: -/* 07B238 7F046708 8C4200C8 */ lw $v0, 0xc8($v0) -.L7F04670C: -/* 07B23C 7F04670C 10400003 */ beqz $v0, .L7F04671C -/* 07B240 7F046710 00000000 */ nop -/* 07B244 7F046714 5450FFF4 */ bnel $v0, $s0, .L7F0466E8 -/* 07B248 7F046718 804E00BC */ lb $t6, 0xbc($v0) -.L7F04671C: -/* 07B24C 7F04671C 50600004 */ beql $v1, $zero, .L7F046730 -/* 07B250 7F046720 960D009A */ lhu $t5, 0x9a($s0) -/* 07B254 7F046724 0FC15229 */ jal doorSetOpenState -/* 07B258 7F046728 24050001 */ li $a1, 1 -/* 07B25C 7F04672C 960D009A */ lhu $t5, 0x9a($s0) -.L7F046730: -/* 07B260 7F046730 24010008 */ li $at, 8 -/* 07B264 7F046734 15A1000B */ bne $t5, $at, .L7F046764 -/* 07B268 7F046738 00000000 */ nop -/* 07B26C 7F04673C 0FC15288 */ jal doorIsClosed -/* 07B270 7F046740 02002025 */ move $a0, $s0 -/* 07B274 7F046744 10400007 */ beqz $v0, .L7F046764 -/* 07B278 7F046748 00000000 */ nop -/* 07B27C 7F04674C 0FC0F9C6 */ jal doorIsPadlockFree -/* 07B280 7F046750 02002025 */ move $a0, $s0 -/* 07B284 7F046754 10400003 */ beqz $v0, .L7F046764 -/* 07B288 7F046758 00000000 */ nop -/* 07B28C 7F04675C 0FC15667 */ jal doorActivateWrapper -/* 07B290 7F046760 02602025 */ move $a0, $s3 -.L7F046764: -/* 07B294 7F046764 3C188005 */ lui $t8, %hi(g_GlobalTimer) -/* 07B298 7F046768 8F18837C */ lw $t8, %lo(g_GlobalTimer)($t8) -/* 07B29C 7F04676C 8E0F00FC */ lw $t7, 0xfc($s0) -/* 07B2A0 7F046770 3C088005 */ lui $t0, %hi(g_ClockTimer) -/* 07B2A4 7F046774 01F8082A */ slt $at, $t7, $t8 -/* 07B2A8 7F046778 14200004 */ bnez $at, .L7F04678C -/* 07B2AC 7F04677C 00000000 */ nop -/* 07B2B0 7F046780 8D088374 */ lw $t0, %lo(g_ClockTimer)($t0) -/* 07B2B4 7F046784 550006AA */ bnezl $t0, .L7F048230 -/* 07B2B8 7F046788 92220003 */ lbu $v0, 3($s1) -.L7F04678C: -/* 07B2BC 7F04678C 0FC153ED */ jal door7F054FB4 -/* 07B2C0 7F046790 02002025 */ move $a0, $s0 -/* 07B2C4 7F046794 100006A6 */ b .L7F048230 -/* 07B2C8 7F046798 92220003 */ lbu $v0, 3($s1) -/* 07B2CC 7F04679C 24010006 */ li $at, 6 -.L7F0467A0: -/* 07B2D0 7F0467A0 54410130 */ bnel $v0, $at, .L7F046C64 -/* 07B2D4 7F0467A4 2401000D */ li $at, 13 -/* 07B2D8 7F0467A8 8E290008 */ lw $t1, 8($s1) -/* 07B2DC 7F0467AC 000958C0 */ sll $t3, $t1, 3 -/* 07B2E0 7F0467B0 0562012C */ bltzl $t3, .L7F046C64 -/* 07B2E4 7F0467B4 2401000D */ li $at, 13 -/* 07B2E8 7F0467B8 8E700004 */ lw $s0, 4($s3) -/* 07B2EC 7F0467BC 8E1900D4 */ lw $t9, 0xd4($s0) -/* 07B2F0 7F0467C0 53200004 */ beql $t9, $zero, .L7F0467D4 -/* 07B2F4 7F0467C4 C61200D0 */ lwc1 $f18, 0xd0($s0) -/* 07B2F8 7F0467C8 10000002 */ b .L7F0467D4 -/* 07B2FC 7F0467CC C61200CC */ lwc1 $f18, 0xcc($s0) -/* 07B300 7F0467D0 C61200D0 */ lwc1 $f18, 0xd0($s0) -.L7F0467D4: -/* 07B304 7F0467D4 0FC225E6 */ jal get_curplayer_positiondata -/* 07B308 7F0467D8 E7B20518 */ swc1 $f18, 0x518($sp) -/* 07B30C 7F0467DC AFA20514 */ sw $v0, 0x514($sp) -/* 07B310 7F0467E0 C6280058 */ lwc1 $f8, 0x58($s1) -/* 07B314 7F0467E4 C4440008 */ lwc1 $f4, 8($v0) -/* 07B318 7F0467E8 C60000E8 */ lwc1 $f0, 0xe8($s0) -/* 07B31C 7F0467EC C62A005C */ lwc1 $f10, 0x5c($s1) -/* 07B320 7F0467F0 46082301 */ sub.s $f12, $f4, $f8 -/* 07B324 7F0467F4 C446000C */ lwc1 $f6, 0xc($v0) -/* 07B328 7F0467F8 C6280060 */ lwc1 $f8, 0x60($s1) -/* 07B32C 7F0467FC 4600B03C */ c.lt.s $f22, $f0 -/* 07B330 7F046800 C4440010 */ lwc1 $f4, 0x10($v0) -/* 07B334 7F046804 C7B20518 */ lwc1 $f18, 0x518($sp) -/* 07B338 7F046808 24120001 */ li $s2, 1 -/* 07B33C 7F04680C 460A3081 */ sub.s $f2, $f6, $f10 -/* 07B340 7F046810 4500000E */ bc1f .L7F04684C -/* 07B344 7F046814 46082381 */ sub.s $f14, $f4, $f8 -/* 07B348 7F046818 46000182 */ mul.s $f6, $f0, $f0 -/* 07B34C 7F04681C 00000000 */ nop -/* 07B350 7F046820 460C6282 */ mul.s $f10, $f12, $f12 -/* 07B354 7F046824 00000000 */ nop -/* 07B358 7F046828 46021102 */ mul.s $f4, $f2, $f2 -/* 07B35C 7F04682C 46045200 */ add.s $f8, $f10, $f4 -/* 07B360 7F046830 460E7282 */ mul.s $f10, $f14, $f14 -/* 07B364 7F046834 460A4100 */ add.s $f4, $f8, $f10 -/* 07B368 7F046838 4604303C */ c.lt.s $f6, $f4 -/* 07B36C 7F04683C 00000000 */ nop -/* 07B370 7F046840 45000002 */ bc1f .L7F04684C -/* 07B374 7F046844 00000000 */ nop -/* 07B378 7F046848 00009025 */ move $s2, $zero -.L7F04684C: -/* 07B37C 7F04684C 8E2A0008 */ lw $t2, 8($s1) -/* 07B380 7F046850 000A6080 */ sll $t4, $t2, 2 -/* 07B384 7F046854 05810002 */ bgez $t4, .L7F046860 -/* 07B388 7F046858 00000000 */ nop -/* 07B38C 7F04685C 00009025 */ move $s2, $zero -.L7F046860: -/* 07B390 7F046860 1240003A */ beqz $s2, .L7F04694C -/* 07B394 7F046864 00000000 */ nop -/* 07B398 7F046868 0FC16A8C */ jal atan2f -/* 07B39C 7F04686C E7B20518 */ swc1 $f18, 0x518($sp) -/* 07B3A0 7F046870 C60200C8 */ lwc1 $f2, 0xc8($s0) -/* 07B3A4 7F046874 C7B20518 */ lwc1 $f18, 0x518($sp) -/* 07B3A8 7F046878 3C018005 */ lui $at, %hi(D_80052ACC) -/* 07B3AC 7F04687C 4616103C */ c.lt.s $f2, $f22 -/* 07B3B0 7F046880 00000000 */ nop -/* 07B3B4 7F046884 45000005 */ bc1f .L7F04689C -/* 07B3B8 7F046888 00000000 */ nop -/* 07B3BC 7F04688C 3C018005 */ lui $at, %hi(D_80052AC8) -/* 07B3C0 7F046890 C4342AC8 */ lwc1 $f20, %lo(D_80052AC8)($at) -/* 07B3C4 7F046894 10000007 */ b .L7F0468B4 -/* 07B3C8 7F046898 46141080 */ add.s $f2, $f2, $f20 -.L7F04689C: -/* 07B3CC 7F04689C C4342ACC */ lwc1 $f20, %lo(D_80052ACC)($at) -/* 07B3D0 7F0468A0 4602A03E */ c.le.s $f20, $f2 -/* 07B3D4 7F0468A4 00000000 */ nop -/* 07B3D8 7F0468A8 45020003 */ bc1fl .L7F0468B8 -/* 07B3DC 7F0468AC C60800C4 */ lwc1 $f8, 0xc4($s0) -/* 07B3E0 7F0468B0 46141081 */ sub.s $f2, $f2, $f20 -.L7F0468B4: -/* 07B3E4 7F0468B4 C60800C4 */ lwc1 $f8, 0xc4($s0) -.L7F0468B8: -/* 07B3E8 7F0468B8 3C018005 */ lui $at, %hi(D_80052AD0) -/* 07B3EC 7F0468BC 46081080 */ add.s $f2, $f2, $f8 -/* 07B3F0 7F0468C0 4602A03E */ c.le.s $f20, $f2 -/* 07B3F4 7F0468C4 00000000 */ nop -/* 07B3F8 7F0468C8 45020003 */ bc1fl .L7F0468D8 -/* 07B3FC 7F0468CC 4602003C */ c.lt.s $f0, $f2 -/* 07B400 7F0468D0 46141081 */ sub.s $f2, $f2, $f20 -/* 07B404 7F0468D4 4602003C */ c.lt.s $f0, $f2 -.L7F0468D8: -/* 07B408 7F0468D8 46020381 */ sub.s $f14, $f0, $f2 -/* 07B40C 7F0468DC 45000002 */ bc1f .L7F0468E8 -/* 07B410 7F0468E0 46007306 */ mov.s $f12, $f14 -/* 07B414 7F0468E4 46147300 */ add.s $f12, $f14, $f20 -.L7F0468E8: -/* 07B418 7F0468E8 C4202AD0 */ lwc1 $f0, %lo(D_80052AD0)($at) -/* 07B41C 7F0468EC 3C018005 */ lui $at, %hi(D_80052AD4) -/* 07B420 7F0468F0 46006301 */ sub.s $f12, $f12, $f0 -/* 07B424 7F0468F4 4616603C */ c.lt.s $f12, $f22 -/* 07B428 7F0468F8 00000000 */ nop -/* 07B42C 7F0468FC 45020003 */ bc1fl .L7F04690C -/* 07B430 7F046900 460C003C */ c.lt.s $f0, $f12 -/* 07B434 7F046904 46146300 */ add.s $f12, $f12, $f20 -/* 07B438 7F046908 460C003C */ c.lt.s $f0, $f12 -.L7F04690C: -/* 07B43C 7F04690C 00000000 */ nop -/* 07B440 7F046910 45000002 */ bc1f .L7F04691C -/* 07B444 7F046914 00000000 */ nop -/* 07B448 7F046918 46146301 */ sub.s $f12, $f12, $f20 -.L7F04691C: -/* 07B44C 7F04691C C42A2AD4 */ lwc1 $f10, %lo(D_80052AD4)($at) -/* 07B450 7F046920 3C018005 */ lui $at, %hi(D_80052AD8) -/* 07B454 7F046924 460C503C */ c.lt.s $f10, $f12 -/* 07B458 7F046928 00000000 */ nop -/* 07B45C 7F04692C 45030007 */ bc1tl .L7F04694C -/* 07B460 7F046930 00009025 */ move $s2, $zero -/* 07B464 7F046934 C4262AD8 */ lwc1 $f6, %lo(D_80052AD8)($at) -/* 07B468 7F046938 4606603C */ c.lt.s $f12, $f6 -/* 07B46C 7F04693C 00000000 */ nop -/* 07B470 7F046940 45000002 */ bc1f .L7F04694C -/* 07B474 7F046944 00000000 */ nop -/* 07B478 7F046948 00009025 */ move $s2, $zero -.L7F04694C: -/* 07B47C 7F04694C 12400034 */ beqz $s2, .L7F046A20 -/* 07B480 7F046950 00002825 */ move $a1, $zero -/* 07B484 7F046954 8E6E0014 */ lw $t6, 0x14($s3) -/* 07B488 7F046958 E7B20518 */ swc1 $f18, 0x518($sp) -/* 07B48C 7F04695C 8FA40514 */ lw $a0, 0x514($sp) -/* 07B490 7F046960 0FC2280F */ jal bondviewUpdateGuardTankFlagsRelated -/* 07B494 7F046964 AFAE04F0 */ sw $t6, 0x4f0($sp) -/* 07B498 7F046968 8FA20514 */ lw $v0, 0x514($sp) -/* 07B49C 7F04696C 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 07B4A0 7F046970 8E650008 */ lw $a1, 8($s3) -/* 07B4A4 7F046974 C4440010 */ lwc1 $f4, 0x10($v0) -/* 07B4A8 7F046978 8E660010 */ lw $a2, 0x10($s3) -/* 07B4AC 7F04697C 8C470008 */ lw $a3, 8($v0) -/* 07B4B0 7F046980 44814000 */ mtc1 $at, $f8 -/* 07B4B4 7F046984 44815000 */ mtc1 $at, $f10 -/* 07B4B8 7F046988 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07B4BC 7F04698C 44813000 */ mtc1 $at, $f6 -/* 07B4C0 7F046990 240D001B */ li $t5, 27 -/* 07B4C4 7F046994 AFAD0014 */ sw $t5, 0x14($sp) -/* 07B4C8 7F046998 E7B60020 */ swc1 $f22, 0x20($sp) -/* 07B4CC 7F04699C 27A404F0 */ addiu $a0, $sp, 0x4f0 -/* 07B4D0 7F0469A0 E7A40010 */ swc1 $f4, 0x10($sp) -/* 07B4D4 7F0469A4 E7A80018 */ swc1 $f8, 0x18($sp) -/* 07B4D8 7F0469A8 E7AA001C */ swc1 $f10, 0x1c($sp) -/* 07B4DC 7F0469AC 0FC2C389 */ jal stanTestLineUnobstructed -/* 07B4E0 7F0469B0 E7A60024 */ swc1 $f6, 0x24($sp) -/* 07B4E4 7F0469B4 10400015 */ beqz $v0, .L7F046A0C -/* 07B4E8 7F0469B8 C7B20518 */ lwc1 $f18, 0x518($sp) -/* 07B4EC 7F0469BC 3C188005 */ lui $t8, %hi(g_ClockTimer) -/* 07B4F0 7F0469C0 8F188374 */ lw $t8, %lo(g_ClockTimer)($t8) -/* 07B4F4 7F0469C4 8E0F00E0 */ lw $t7, 0xe0($s0) -/* 07B4F8 7F0469C8 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 07B4FC 7F0469CC 44812000 */ mtc1 $at, $f4 -/* 07B500 7F0469D0 01F84021 */ addu $t0, $t7, $t8 -/* 07B504 7F0469D4 AE0800E0 */ sw $t0, 0xe0($s0) -/* 07B508 7F0469D8 3C018003 */ lui $at, %hi(F_80030B14) -/* 07B50C 7F0469DC C4280B14 */ lwc1 $f8, %lo(F_80030B14)($at) -/* 07B510 7F0469E0 46082282 */ mul.s $f10, $f4, $f8 -/* 07B514 7F0469E4 4600518D */ trunc.w.s $f6, $f10 -/* 07B518 7F0469E8 44193000 */ mfc1 $t9, $f6 -/* 07B51C 7F0469EC 00000000 */ nop -/* 07B520 7F0469F0 0119082A */ slt $at, $t0, $t9 -/* 07B524 7F0469F4 54200006 */ bnezl $at, .L7F046A10 -/* 07B528 7F0469F8 8FA40514 */ lw $a0, 0x514($sp) -/* 07B52C 7F0469FC 0FC15772 */ jal alarmActivate -/* 07B530 7F046A00 E7B20518 */ swc1 $f18, 0x518($sp) -/* 07B534 7F046A04 C7B20518 */ lwc1 $f18, 0x518($sp) -/* 07B538 7F046A08 AE0000E0 */ sw $zero, 0xe0($s0) -.L7F046A0C: -/* 07B53C 7F046A0C 8FA40514 */ lw $a0, 0x514($sp) -.L7F046A10: -/* 07B540 7F046A10 24050001 */ li $a1, 1 -/* 07B544 7F046A14 0FC2280F */ jal bondviewUpdateGuardTankFlagsRelated -/* 07B548 7F046A18 E7B20518 */ swc1 $f18, 0x518($sp) -/* 07B54C 7F046A1C C7B20518 */ lwc1 $f18, 0x518($sp) -.L7F046A20: -/* 07B550 7F046A20 C60E00C8 */ lwc1 $f14, 0xc8($s0) -/* 07B554 7F046A24 4612703C */ c.lt.s $f14, $f18 -/* 07B558 7F046A28 00000000 */ nop -/* 07B55C 7F046A2C 45020047 */ bc1fl .L7F046B4C -/* 07B560 7F046A30 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07B564 7F046A34 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07B568 7F046A38 3C018005 */ lui $at, %hi(D_80052AE0) -/* 07B56C 7F046A3C C4302AE0 */ lwc1 $f16, %lo(D_80052AE0)($at) -/* 07B570 7F046A40 46000102 */ mul.s $f4, $f0, $f0 -/* 07B574 7F046A44 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07B578 7F046A48 44814000 */ mtc1 $at, $f8 -/* 07B57C 7F046A4C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07B580 7F046A50 46082282 */ mul.s $f10, $f4, $f8 -/* 07B584 7F046A54 46105083 */ div.s $f2, $f10, $f16 -/* 07B588 7F046A58 46029181 */ sub.s $f6, $f18, $f2 -/* 07B58C 7F046A5C 460E303E */ c.le.s $f6, $f14 -/* 07B590 7F046A60 00000000 */ nop -/* 07B594 7F046A64 4502000F */ bc1fl .L7F046AA4 -/* 07B598 7F046A68 C60C00DC */ lwc1 $f12, 0xdc($s0) -/* 07B59C 7F046A6C C4248378 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07B5A0 7F046A70 46048202 */ mul.s $f8, $f16, $f4 -/* 07B5A4 7F046A74 46080281 */ sub.s $f10, $f0, $f8 -/* 07B5A8 7F046A78 E60A00D8 */ swc1 $f10, 0xd8($s0) -/* 07B5AC 7F046A7C C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07B5B0 7F046A80 4610003C */ c.lt.s $f0, $f16 -/* 07B5B4 7F046A84 00000000 */ nop -/* 07B5B8 7F046A88 45000003 */ bc1f .L7F046A98 -/* 07B5BC 7F046A8C 00000000 */ nop -/* 07B5C0 7F046A90 E61000D8 */ swc1 $f16, 0xd8($s0) -/* 07B5C4 7F046A94 C60000D8 */ lwc1 $f0, 0xd8($s0) -.L7F046A98: -/* 07B5C8 7F046A98 1000001D */ b .L7F046B10 -/* 07B5CC 7F046A9C C60E00C8 */ lwc1 $f14, 0xc8($s0) -/* 07B5D0 7F046AA0 C60C00DC */ lwc1 $f12, 0xdc($s0) -.L7F046AA4: -/* 07B5D4 7F046AA4 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07B5D8 7F046AA8 460C003C */ c.lt.s $f0, $f12 -/* 07B5DC 7F046AAC 00000000 */ nop -/* 07B5E0 7F046AB0 45000017 */ bc1f .L7F046B10 -/* 07B5E4 7F046AB4 00000000 */ nop -/* 07B5E8 7F046AB8 C4268378 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) -/* 07B5EC 7F046ABC 46068102 */ mul.s $f4, $f16, $f6 -/* 07B5F0 7F046AC0 46040080 */ add.s $f2, $f0, $f4 -/* 07B5F4 7F046AC4 4602603C */ c.lt.s $f12, $f2 -/* 07B5F8 7F046AC8 00000000 */ nop -/* 07B5FC 7F046ACC 45000002 */ bc1f .L7F046AD8 -/* 07B600 7F046AD0 00000000 */ nop -/* 07B604 7F046AD4 46006086 */ mov.s $f2, $f12 -.L7F046AD8: -/* 07B608 7F046AD8 46021202 */ mul.s $f8, $f2, $f2 -/* 07B60C 7F046ADC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07B610 7F046AE0 44815000 */ mtc1 $at, $f10 -/* 07B614 7F046AE4 00000000 */ nop -/* 07B618 7F046AE8 460A4182 */ mul.s $f6, $f8, $f10 -/* 07B61C 7F046AEC 46103103 */ div.s $f4, $f6, $f16 -/* 07B620 7F046AF0 46049201 */ sub.s $f8, $f18, $f4 -/* 07B624 7F046AF4 4608703C */ c.lt.s $f14, $f8 -/* 07B628 7F046AF8 00000000 */ nop -/* 07B62C 7F046AFC 45000004 */ bc1f .L7F046B10 -/* 07B630 7F046B00 00000000 */ nop -/* 07B634 7F046B04 E60200D8 */ swc1 $f2, 0xd8($s0) -/* 07B638 7F046B08 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07B63C 7F046B0C C60E00C8 */ lwc1 $f14, 0xc8($s0) -.L7F046B10: -/* 07B640 7F046B10 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07B644 7F046B14 C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07B648 7F046B18 460A0182 */ mul.s $f6, $f0, $f10 -/* 07B64C 7F046B1C 46067100 */ add.s $f4, $f14, $f6 -/* 07B650 7F046B20 E60400C8 */ swc1 $f4, 0xc8($s0) -/* 07B654 7F046B24 C60800C8 */ lwc1 $f8, 0xc8($s0) -/* 07B658 7F046B28 4608903E */ c.le.s $f18, $f8 -/* 07B65C 7F046B2C 00000000 */ nop -/* 07B660 7F046B30 450205BF */ bc1fl .L7F048230 -/* 07B664 7F046B34 92220003 */ lbu $v0, 3($s1) -/* 07B668 7F046B38 E61200C8 */ swc1 $f18, 0xc8($s0) -/* 07B66C 7F046B3C E61600D8 */ swc1 $f22, 0xd8($s0) -/* 07B670 7F046B40 100005BA */ b .L7F04822C -/* 07B674 7F046B44 AE0000D4 */ sw $zero, 0xd4($s0) -/* 07B678 7F046B48 C60000D8 */ lwc1 $f0, 0xd8($s0) -.L7F046B4C: -/* 07B67C 7F046B4C 3C018005 */ lui $at, %hi(D_80052AE4) -/* 07B680 7F046B50 C4302AE4 */ lwc1 $f16, %lo(D_80052AE4)($at) -/* 07B684 7F046B54 46000282 */ mul.s $f10, $f0, $f0 -/* 07B688 7F046B58 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07B68C 7F046B5C 44813000 */ mtc1 $at, $f6 -/* 07B690 7F046B60 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07B694 7F046B64 240A0001 */ li $t2, 1 -/* 07B698 7F046B68 46065102 */ mul.s $f4, $f10, $f6 -/* 07B69C 7F046B6C 46102083 */ div.s $f2, $f4, $f16 -/* 07B6A0 7F046B70 46029200 */ add.s $f8, $f18, $f2 -/* 07B6A4 7F046B74 4608703E */ c.le.s $f14, $f8 -/* 07B6A8 7F046B78 00000000 */ nop -/* 07B6AC 7F046B7C 4502000F */ bc1fl .L7F046BBC -/* 07B6B0 7F046B80 C60C00DC */ lwc1 $f12, 0xdc($s0) -/* 07B6B4 7F046B84 C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07B6B8 7F046B88 460A8182 */ mul.s $f6, $f16, $f10 -/* 07B6BC 7F046B8C 46060101 */ sub.s $f4, $f0, $f6 -/* 07B6C0 7F046B90 E60400D8 */ swc1 $f4, 0xd8($s0) -/* 07B6C4 7F046B94 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07B6C8 7F046B98 4610003C */ c.lt.s $f0, $f16 -/* 07B6CC 7F046B9C 00000000 */ nop -/* 07B6D0 7F046BA0 45000003 */ bc1f .L7F046BB0 -/* 07B6D4 7F046BA4 00000000 */ nop -/* 07B6D8 7F046BA8 E61000D8 */ swc1 $f16, 0xd8($s0) -/* 07B6DC 7F046BAC C60000D8 */ lwc1 $f0, 0xd8($s0) -.L7F046BB0: -/* 07B6E0 7F046BB0 1000001D */ b .L7F046C28 -/* 07B6E4 7F046BB4 C60E00C8 */ lwc1 $f14, 0xc8($s0) -/* 07B6E8 7F046BB8 C60C00DC */ lwc1 $f12, 0xdc($s0) -.L7F046BBC: -/* 07B6EC 7F046BBC 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07B6F0 7F046BC0 460C003C */ c.lt.s $f0, $f12 -/* 07B6F4 7F046BC4 00000000 */ nop -/* 07B6F8 7F046BC8 45000017 */ bc1f .L7F046C28 -/* 07B6FC 7F046BCC 00000000 */ nop -/* 07B700 7F046BD0 C4288378 */ lwc1 $f8, %lo(g_GlobalTimerDelta)($at) -/* 07B704 7F046BD4 46088282 */ mul.s $f10, $f16, $f8 -/* 07B708 7F046BD8 460A0080 */ add.s $f2, $f0, $f10 -/* 07B70C 7F046BDC 4602603C */ c.lt.s $f12, $f2 -/* 07B710 7F046BE0 00000000 */ nop -/* 07B714 7F046BE4 45000002 */ bc1f .L7F046BF0 -/* 07B718 7F046BE8 00000000 */ nop -/* 07B71C 7F046BEC 46006086 */ mov.s $f2, $f12 -.L7F046BF0: -/* 07B720 7F046BF0 46021182 */ mul.s $f6, $f2, $f2 -/* 07B724 7F046BF4 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07B728 7F046BF8 44812000 */ mtc1 $at, $f4 -/* 07B72C 7F046BFC 00000000 */ nop -/* 07B730 7F046C00 46043202 */ mul.s $f8, $f6, $f4 -/* 07B734 7F046C04 46104283 */ div.s $f10, $f8, $f16 -/* 07B738 7F046C08 460A9180 */ add.s $f6, $f18, $f10 -/* 07B73C 7F046C0C 460E303C */ c.lt.s $f6, $f14 -/* 07B740 7F046C10 00000000 */ nop -/* 07B744 7F046C14 45000004 */ bc1f .L7F046C28 -/* 07B748 7F046C18 00000000 */ nop -/* 07B74C 7F046C1C E60200D8 */ swc1 $f2, 0xd8($s0) -/* 07B750 7F046C20 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07B754 7F046C24 C60E00C8 */ lwc1 $f14, 0xc8($s0) -.L7F046C28: -/* 07B758 7F046C28 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07B75C 7F046C2C C4248378 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07B760 7F046C30 46040202 */ mul.s $f8, $f0, $f4 -/* 07B764 7F046C34 46087281 */ sub.s $f10, $f14, $f8 -/* 07B768 7F046C38 E60A00C8 */ swc1 $f10, 0xc8($s0) -/* 07B76C 7F046C3C C60600C8 */ lwc1 $f6, 0xc8($s0) -/* 07B770 7F046C40 4612303E */ c.le.s $f6, $f18 -/* 07B774 7F046C44 00000000 */ nop -/* 07B778 7F046C48 45020579 */ bc1fl .L7F048230 -/* 07B77C 7F046C4C 92220003 */ lbu $v0, 3($s1) -/* 07B780 7F046C50 E61200C8 */ swc1 $f18, 0xc8($s0) -/* 07B784 7F046C54 E61600D8 */ swc1 $f22, 0xd8($s0) -/* 07B788 7F046C58 10000574 */ b .L7F04822C -/* 07B78C 7F046C5C AE0A00D4 */ sw $t2, 0xd4($s0) -/* 07B790 7F046C60 2401000D */ li $at, 13 -.L7F046C64: -/* 07B794 7F046C64 5441023F */ bnel $v0, $at, .L7F047564 -/* 07B798 7F046C68 24010027 */ li $at, 39 -/* 07B79C 7F046C6C 8E2C0008 */ lw $t4, 8($s1) -/* 07B7A0 7F046C70 000C70C0 */ sll $t6, $t4, 3 -/* 07B7A4 7F046C74 05C2023B */ bltzl $t6, .L7F047564 -/* 07B7A8 7F046C78 24010027 */ li $at, 39 -/* 07B7AC 7F046C7C 0FC225E6 */ jal get_curplayer_positiondata -/* 07B7B0 7F046C80 8E700004 */ lw $s0, 4($s3) -/* 07B7B4 7F046C84 AFA004AC */ sw $zero, 0x4ac($sp) -/* 07B7B8 7F046C88 AFA004A8 */ sw $zero, 0x4a8($sp) -/* 07B7BC 7F046C8C AFA004A4 */ sw $zero, 0x4a4($sp) -/* 07B7C0 7F046C90 8E23000C */ lw $v1, 0xc($s1) -/* 07B7C4 7F046C94 00409025 */ move $s2, $v0 -/* 07B7C8 7F046C98 00036800 */ sll $t5, $v1, 0 -/* 07B7CC 7F046C9C 05A10056 */ bgez $t5, .L7F046DF8 -/* 07B7D0 7F046CA0 00037840 */ sll $t7, $v1, 1 -/* 07B7D4 7F046CA4 05E30008 */ bgezl $t7, .L7F046CC8 -/* 07B7D8 7F046CA8 C6020084 */ lwc1 $f2, 0x84($s0) -/* 07B7DC 7F046CAC C6080090 */ lwc1 $f8, 0x90($s0) -/* 07B7E0 7F046CB0 C604009C */ lwc1 $f4, 0x9c($s0) -/* 07B7E4 7F046CB4 E6080084 */ swc1 $f8, 0x84($s0) -/* 07B7E8 7F046CB8 C6020084 */ lwc1 $f2, 0x84($s0) -/* 07B7EC 7F046CBC 10000036 */ b .L7F046D98 -/* 07B7F0 7F046CC0 E6040098 */ swc1 $f4, 0x98($s0) -/* 07B7F4 7F046CC4 C6020084 */ lwc1 $f2, 0x84($s0) -.L7F046CC8: -/* 07B7F8 7F046CC8 C60A0090 */ lwc1 $f10, 0x90($s0) -/* 07B7FC 7F046CCC 460A1032 */ c.eq.s $f2, $f10 -/* 07B800 7F046CD0 00000000 */ nop -/* 07B804 7F046CD4 45000030 */ bc1f .L7F046D98 -/* 07B808 7F046CD8 00000000 */ nop -/* 07B80C 7F046CDC C6060098 */ lwc1 $f6, 0x98($s0) -/* 07B810 7F046CE0 C604009C */ lwc1 $f4, 0x9c($s0) -/* 07B814 7F046CE4 46043032 */ c.eq.s $f6, $f4 -/* 07B818 7F046CE8 00000000 */ nop -/* 07B81C 7F046CEC 4500002A */ bc1f .L7F046D98 -/* 07B820 7F046CF0 00000000 */ nop -/* 07B824 7F046CF4 0C002914 */ jal randomGetNext -/* 07B828 7F046CF8 00000000 */ nop -/* 07B82C 7F046CFC 44824000 */ mtc1 $v0, $f8 -/* 07B830 7F046D00 3C018005 */ lui $at, %hi(D_80052AE8) -/* 07B834 7F046D04 C4342AE8 */ lwc1 $f20, %lo(D_80052AE8)($at) -/* 07B838 7F046D08 04410005 */ bgez $v0, .L7F046D20 -/* 07B83C 7F046D0C 468042A0 */ cvt.s.w $f10, $f8 -/* 07B840 7F046D10 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07B844 7F046D14 44813000 */ mtc1 $at, $f6 -/* 07B848 7F046D18 00000000 */ nop -/* 07B84C 7F046D1C 46065280 */ add.s $f10, $f10, $f6 -.L7F046D20: -/* 07B850 7F046D20 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07B854 7F046D24 44812000 */ mtc1 $at, $f4 -/* 07B858 7F046D28 3C01421C */ li $at, 0x421C0000 # 39.000000 -/* 07B85C 7F046D2C 44813000 */ mtc1 $at, $f6 -/* 07B860 7F046D30 46045202 */ mul.s $f8, $f10, $f4 -/* 07B864 7F046D34 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07B868 7F046D38 44812000 */ mtc1 $at, $f4 -/* 07B86C 7F046D3C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07B870 7F046D40 46064282 */ mul.s $f10, $f8, $f6 -/* 07B874 7F046D44 46045200 */ add.s $f8, $f10, $f4 -/* 07B878 7F046D48 44815000 */ mtc1 $at, $f10 -/* 07B87C 7F046D4C 46144182 */ mul.s $f6, $f8, $f20 -/* 07B880 7F046D50 460A3103 */ div.s $f4, $f6, $f10 -/* 07B884 7F046D54 0C002914 */ jal randomGetNext -/* 07B888 7F046D58 E6040098 */ swc1 $f4, 0x98($s0) -/* 07B88C 7F046D5C 44824000 */ mtc1 $v0, $f8 -/* 07B890 7F046D60 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07B894 7F046D64 04410004 */ bgez $v0, .L7F046D78 -/* 07B898 7F046D68 468041A0 */ cvt.s.w $f6, $f8 -/* 07B89C 7F046D6C 44815000 */ mtc1 $at, $f10 -/* 07B8A0 7F046D70 00000000 */ nop -/* 07B8A4 7F046D74 460A3180 */ add.s $f6, $f6, $f10 -.L7F046D78: -/* 07B8A8 7F046D78 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07B8AC 7F046D7C 44812000 */ mtc1 $at, $f4 -/* 07B8B0 7F046D80 00000000 */ nop -/* 07B8B4 7F046D84 46043202 */ mul.s $f8, $f6, $f4 -/* 07B8B8 7F046D88 00000000 */ nop -/* 07B8BC 7F046D8C 46144282 */ mul.s $f10, $f8, $f20 -/* 07B8C0 7F046D90 E60A0084 */ swc1 $f10, 0x84($s0) -/* 07B8C4 7F046D94 C6020084 */ lwc1 $f2, 0x84($s0) -.L7F046D98: -/* 07B8C8 7F046D98 3C018005 */ lui $at, %hi(D_80052AEC) -/* 07B8CC 7F046D9C C4202AEC */ lwc1 $f0, %lo(D_80052AEC)($at) -/* 07B8D0 7F046DA0 3C018005 */ lui $at, %hi(D_80052AF4) -/* 07B8D4 7F046DA4 C4262AF4 */ lwc1 $f6, %lo(D_80052AF4)($at) -/* 07B8D8 7F046DA8 44051000 */ mfc1 $a1, $f2 -/* 07B8DC 7F046DAC 44070000 */ mfc1 $a3, $f0 -/* 07B8E0 7F046DB0 26040090 */ addiu $a0, $s0, 0x90 -/* 07B8E4 7F046DB4 26060094 */ addiu $a2, $s0, 0x94 -/* 07B8E8 7F046DB8 E7A00010 */ swc1 $f0, 0x10($sp) -/* 07B8EC 7F046DBC 0FC10C43 */ jal chrobjCallsApplySpeed -/* 07B8F0 7F046DC0 E7A60014 */ swc1 $f6, 0x14($sp) -/* 07B8F4 7F046DC4 3C018005 */ lui $at, %hi(D_80052AF8) -/* 07B8F8 7F046DC8 C4202AF8 */ lwc1 $f0, %lo(D_80052AF8)($at) -/* 07B8FC 7F046DCC 3C018005 */ lui $at, %hi(D_80052AFC) -/* 07B900 7F046DD0 C4242AFC */ lwc1 $f4, %lo(D_80052AFC)($at) -/* 07B904 7F046DD4 8E050098 */ lw $a1, 0x98($s0) -/* 07B908 7F046DD8 44070000 */ mfc1 $a3, $f0 -/* 07B90C 7F046DDC 2604009C */ addiu $a0, $s0, 0x9c -/* 07B910 7F046DE0 260600A0 */ addiu $a2, $s0, 0xa0 -/* 07B914 7F046DE4 E7A00010 */ swc1 $f0, 0x10($sp) -/* 07B918 7F046DE8 0FC10C43 */ jal chrobjCallsApplySpeed -/* 07B91C 7F046DEC E7A40014 */ swc1 $f4, 0x14($sp) -/* 07B920 7F046DF0 1000050F */ b .L7F048230 -/* 07B924 7F046DF4 92220003 */ lbu $v0, 3($s1) -.L7F046DF8: -/* 07B928 7F046DF8 C6480008 */ lwc1 $f8, 8($s2) -/* 07B92C 7F046DFC C62A0058 */ lwc1 $f10, 0x58($s1) -/* 07B930 7F046E00 C646000C */ lwc1 $f6, 0xc($s2) -/* 07B934 7F046E04 C624005C */ lwc1 $f4, 0x5c($s1) -/* 07B938 7F046E08 460A4001 */ sub.s $f0, $f8, $f10 -/* 07B93C 7F046E0C 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 07B940 7F046E10 44815000 */ mtc1 $at, $f10 -/* 07B944 7F046E14 46043201 */ sub.s $f8, $f6, $f4 -/* 07B948 7F046E18 460A4181 */ sub.s $f6, $f8, $f10 -/* 07B94C 7F046E1C 46000282 */ mul.s $f10, $f0, $f0 -/* 07B950 7F046E20 E7A604C0 */ swc1 $f6, 0x4c0($sp) -/* 07B954 7F046E24 C6280060 */ lwc1 $f8, 0x60($s1) -/* 07B958 7F046E28 C6440010 */ lwc1 $f4, 0x10($s2) -/* 07B95C 7F046E2C E7A004C4 */ swc1 $f0, 0x4c4($sp) -/* 07B960 7F046E30 46082081 */ sub.s $f2, $f4, $f8 -/* 07B964 7F046E34 46021182 */ mul.s $f6, $f2, $f2 -/* 07B968 7F046E38 E7A204BC */ swc1 $f2, 0x4bc($sp) -/* 07B96C 7F046E3C 46065500 */ add.s $f20, $f10, $f6 -/* 07B970 7F046E40 E7B404B8 */ swc1 $f20, 0x4b8($sp) -/* 07B974 7F046E44 0C007DF8 */ jal sqrtf -/* 07B978 7F046E48 4600A306 */ mov.s $f12, $f20 -/* 07B97C 7F046E4C E7A004B0 */ swc1 $f0, 0x4b0($sp) -/* 07B980 7F046E50 8E380008 */ lw $t8, 8($s1) -/* 07B984 7F046E54 46000086 */ mov.s $f2, $f0 -/* 07B988 7F046E58 00184100 */ sll $t0, $t8, 4 -/* 07B98C 7F046E5C 05030008 */ bgezl $t0, .L7F046E80 -/* 07B990 7F046E60 C7AC04B8 */ lwc1 $f12, 0x4b8($sp) -/* 07B994 7F046E64 C7A004C0 */ lwc1 $f0, 0x4c0($sp) -/* 07B998 7F046E68 46000102 */ mul.s $f4, $f0, $f0 -/* 07B99C 7F046E6C 4604A300 */ add.s $f12, $f20, $f4 -/* 07B9A0 7F046E70 0C007DF8 */ jal sqrtf -/* 07B9A4 7F046E74 E7AC04B8 */ swc1 $f12, 0x4b8($sp) -/* 07B9A8 7F046E78 46000086 */ mov.s $f2, $f0 -/* 07B9AC 7F046E7C C7AC04B8 */ lwc1 $f12, 0x4b8($sp) -.L7F046E80: -/* 07B9B0 7F046E80 0FC0B491 */ jal chrlvGetAimLimitAngle -/* 07B9B4 7F046E84 E7A204B4 */ swc1 $f2, 0x4b4($sp) -/* 07B9B8 7F046E88 E7A004A0 */ swc1 $f0, 0x4a0($sp) -/* 07B9BC 7F046E8C C6080098 */ lwc1 $f8, 0x98($s0) -/* 07B9C0 7F046E90 C6100084 */ lwc1 $f16, 0x84($s0) -/* 07B9C4 7F046E94 C7A204B4 */ lwc1 $f2, 0x4b4($sp) -/* 07B9C8 7F046E98 E7A804D4 */ swc1 $f8, 0x4d4($sp) -/* 07B9CC 7F046E9C C60A00A8 */ lwc1 $f10, 0xa8($s0) -/* 07B9D0 7F046EA0 460A103E */ c.le.s $f2, $f10 -/* 07B9D4 7F046EA4 00000000 */ nop -/* 07B9D8 7F046EA8 45020096 */ bc1fl .L7F047104 -/* 07B9DC 7F046EAC 8FAC04AC */ lw $t4, 0x4ac($sp) -/* 07B9E0 7F046EB0 C7AC04C4 */ lwc1 $f12, 0x4c4($sp) -/* 07B9E4 7F046EB4 C7AE04BC */ lwc1 $f14, 0x4bc($sp) -/* 07B9E8 7F046EB8 0FC16A8C */ jal atan2f -/* 07B9EC 7F046EBC E7B004D8 */ swc1 $f16, 0x4d8($sp) -/* 07B9F0 7F046EC0 E7A0049C */ swc1 $f0, 0x49c($sp) -/* 07B9F4 7F046EC4 C7AC04C0 */ lwc1 $f12, 0x4c0($sp) -/* 07B9F8 7F046EC8 0FC16A8C */ jal atan2f -/* 07B9FC 7F046ECC C7AE04B0 */ lwc1 $f14, 0x4b0($sp) -/* 07BA00 7F046ED0 E7A00498 */ swc1 $f0, 0x498($sp) -/* 07BA04 7F046ED4 8E220008 */ lw $v0, 8($s1) -/* 07BA08 7F046ED8 C7B004D8 */ lwc1 $f16, 0x4d8($sp) -/* 07BA0C 7F046EDC 24190001 */ li $t9, 1 -/* 07BA10 7F046EE0 00025840 */ sll $t3, $v0, 1 -/* 07BA14 7F046EE4 05600003 */ bltz $t3, .L7F046EF4 -/* 07BA18 7F046EE8 00024880 */ sll $t1, $v0, 2 -/* 07BA1C 7F046EEC 05210005 */ bgez $t1, .L7F046F04 -/* 07BA20 7F046EF0 C7A6049C */ lwc1 $f6, 0x49c($sp) -.L7F046EF4: -/* 07BA24 7F046EF4 3C018005 */ lui $at, %hi(D_80052B00) -/* 07BA28 7F046EF8 C4342B00 */ lwc1 $f20, %lo(D_80052B00)($at) -/* 07BA2C 7F046EFC 10000027 */ b .L7F046F9C -/* 07BA30 7F046F00 AFB904AC */ sw $t9, 0x4ac($sp) -.L7F046F04: -/* 07BA34 7F046F04 C6040090 */ lwc1 $f4, 0x90($s0) -/* 07BA38 7F046F08 3C018005 */ lui $at, %hi(D_80052B04) -/* 07BA3C 7F046F0C 46043301 */ sub.s $f12, $f6, $f4 -/* 07BA40 7F046F10 4616603C */ c.lt.s $f12, $f22 -/* 07BA44 7F046F14 00000000 */ nop -/* 07BA48 7F046F18 45000003 */ bc1f .L7F046F28 -/* 07BA4C 7F046F1C 00000000 */ nop -/* 07BA50 7F046F20 C4342B04 */ lwc1 $f20, %lo(D_80052B04)($at) -/* 07BA54 7F046F24 46146300 */ add.s $f12, $f12, $f20 -.L7F046F28: -/* 07BA58 7F046F28 3C018005 */ lui $at, %hi(D_80052B08) -/* 07BA5C 7F046F2C C4342B08 */ lwc1 $f20, %lo(D_80052B08)($at) -/* 07BA60 7F046F30 3C018005 */ lui $at, %hi(D_80052B0C) -/* 07BA64 7F046F34 C4282B0C */ lwc1 $f8, %lo(D_80052B0C)($at) -/* 07BA68 7F046F38 3C018005 */ lui $at, %hi(D_80052B10) -/* 07BA6C 7F046F3C 460C403C */ c.lt.s $f8, $f12 -/* 07BA70 7F046F40 00000000 */ nop -/* 07BA74 7F046F44 45020003 */ bc1fl .L7F046F54 -/* 07BA78 7F046F48 C60A009C */ lwc1 $f10, 0x9c($s0) -/* 07BA7C 7F046F4C 46146301 */ sub.s $f12, $f12, $f20 -/* 07BA80 7F046F50 C60A009C */ lwc1 $f10, 0x9c($s0) -.L7F046F54: -/* 07BA84 7F046F54 460A0081 */ sub.s $f2, $f0, $f10 -/* 07BA88 7F046F58 4616103C */ c.lt.s $f2, $f22 -/* 07BA8C 7F046F5C 00000000 */ nop -/* 07BA90 7F046F60 45000001 */ bc1f .L7F046F68 -/* 07BA94 7F046F64 00000000 */ nop -.L7F046F68: -/* 07BA98 7F046F68 C4262B10 */ lwc1 $f6, %lo(D_80052B10)($at) -/* 07BA9C 7F046F6C 3C018005 */ lui $at, %hi(D_80052B14) -/* 07BAA0 7F046F70 4606603C */ c.lt.s $f12, $f6 -/* 07BAA4 7F046F74 00000000 */ nop -/* 07BAA8 7F046F78 45020009 */ bc1fl .L7F046FA0 -/* 07BAAC 7F046F7C 8FAC04AC */ lw $t4, 0x4ac($sp) -/* 07BAB0 7F046F80 C4242B14 */ lwc1 $f4, %lo(D_80052B14)($at) -/* 07BAB4 7F046F84 240A0001 */ li $t2, 1 -/* 07BAB8 7F046F88 460C203C */ c.lt.s $f4, $f12 -/* 07BABC 7F046F8C 00000000 */ nop -/* 07BAC0 7F046F90 45020003 */ bc1fl .L7F046FA0 -/* 07BAC4 7F046F94 8FAC04AC */ lw $t4, 0x4ac($sp) -/* 07BAC8 7F046F98 AFAA04AC */ sw $t2, 0x4ac($sp) -.L7F046F9C: -/* 07BACC 7F046F9C 8FAC04AC */ lw $t4, 0x4ac($sp) -.L7F046FA0: -/* 07BAD0 7F046FA0 C7A8049C */ lwc1 $f8, 0x49c($sp) -/* 07BAD4 7F046FA4 02402025 */ move $a0, $s2 -/* 07BAD8 7F046FA8 11800055 */ beqz $t4, .L7F047100 -/* 07BADC 7F046FAC 00002825 */ move $a1, $zero -/* 07BAE0 7F046FB0 C60A0084 */ lwc1 $f10, 0x84($s0) -/* 07BAE4 7F046FB4 3C018005 */ lui $at, %hi(D_80052B18) -/* 07BAE8 7F046FB8 C4262B18 */ lwc1 $f6, %lo(D_80052B18)($at) -/* 07BAEC 7F046FBC 460A4001 */ sub.s $f0, $f8, $f10 -/* 07BAF0 7F046FC0 8E6E0014 */ lw $t6, 0x14($s3) -/* 07BAF4 7F046FC4 3C018005 */ lui $at, %hi(D_80052B1C) -/* 07BAF8 7F046FC8 4606003C */ c.lt.s $f0, $f6 -/* 07BAFC 7F046FCC AFAE0490 */ sw $t6, 0x490($sp) -/* 07BB00 7F046FD0 45000003 */ bc1f .L7F046FE0 -/* 07BB04 7F046FD4 00000000 */ nop -/* 07BB08 7F046FD8 10000007 */ b .L7F046FF8 -/* 07BB0C 7F046FDC 46140000 */ add.s $f0, $f0, $f20 -.L7F046FE0: -/* 07BB10 7F046FE0 C4242B1C */ lwc1 $f4, %lo(D_80052B1C)($at) -/* 07BB14 7F046FE4 4600203E */ c.le.s $f4, $f0 -/* 07BB18 7F046FE8 00000000 */ nop -/* 07BB1C 7F046FEC 45020003 */ bc1fl .L7F046FFC -/* 07BB20 7F046FF0 E7A00494 */ swc1 $f0, 0x494($sp) -/* 07BB24 7F046FF4 46140001 */ sub.s $f0, $f0, $f20 -.L7F046FF8: -/* 07BB28 7F046FF8 E7A00494 */ swc1 $f0, 0x494($sp) -.L7F046FFC: -/* 07BB2C 7F046FFC 0FC2280F */ jal bondviewUpdateGuardTankFlagsRelated -/* 07BB30 7F047000 E7B004D8 */ swc1 $f16, 0x4d8($sp) -/* 07BB34 7F047004 C7A00494 */ lwc1 $f0, 0x494($sp) -/* 07BB38 7F047008 C6080088 */ lwc1 $f8, 0x88($s0) -/* 07BB3C 7F04700C C7B004D8 */ lwc1 $f16, 0x4d8($sp) -/* 07BB40 7F047010 4608003E */ c.le.s $f0, $f8 -/* 07BB44 7F047014 00000000 */ nop -/* 07BB48 7F047018 45020027 */ bc1fl .L7F0470B8 -/* 07BB4C 7F04701C 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07BB50 7F047020 C60A008C */ lwc1 $f10, 0x8c($s0) -/* 07BB54 7F047024 240D001B */ li $t5, 27 -/* 07BB58 7F047028 4600503E */ c.le.s $f10, $f0 -/* 07BB5C 7F04702C 00000000 */ nop -/* 07BB60 7F047030 45020021 */ bc1fl .L7F0470B8 -/* 07BB64 7F047034 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07BB68 7F047038 C6460010 */ lwc1 $f6, 0x10($s2) -/* 07BB6C 7F04703C 8E650008 */ lw $a1, 8($s3) -/* 07BB70 7F047040 8E660010 */ lw $a2, 0x10($s3) -/* 07BB74 7F047044 8E470008 */ lw $a3, 8($s2) -/* 07BB78 7F047048 AFAD0014 */ sw $t5, 0x14($sp) -/* 07BB7C 7F04704C E7A60010 */ swc1 $f6, 0x10($sp) -/* 07BB80 7F047050 C660000C */ lwc1 $f0, 0xc($s3) -/* 07BB84 7F047054 27A40490 */ addiu $a0, $sp, 0x490 -/* 07BB88 7F047058 E7A00018 */ swc1 $f0, 0x18($sp) -/* 07BB8C 7F04705C E7A0001C */ swc1 $f0, 0x1c($sp) -/* 07BB90 7F047060 C642000C */ lwc1 $f2, 0xc($s2) -/* 07BB94 7F047064 E7B004D8 */ swc1 $f16, 0x4d8($sp) -/* 07BB98 7F047068 E7A20020 */ swc1 $f2, 0x20($sp) -/* 07BB9C 7F04706C 0FC2C389 */ jal stanTestLineUnobstructed -/* 07BBA0 7F047070 E7A20024 */ swc1 $f2, 0x24($sp) -/* 07BBA4 7F047074 1040000F */ beqz $v0, .L7F0470B4 -/* 07BBA8 7F047078 C7B004D8 */ lwc1 $f16, 0x4d8($sp) -/* 07BBAC 7F04707C 8FAF0490 */ lw $t7, 0x490($sp) -/* 07BBB0 7F047080 8E580014 */ lw $t8, 0x14($s2) -/* 07BBB4 7F047084 55F8000C */ bnel $t7, $t8, .L7F0470B8 -/* 07BBB8 7F047088 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07BBBC 7F04708C 8E280008 */ lw $t0, 8($s1) -/* 07BBC0 7F047090 3C012000 */ lui $at, 0x2000 -/* 07BBC4 7F047094 24090001 */ li $t1, 1 -/* 07BBC8 7F047098 01015825 */ or $t3, $t0, $at -/* 07BBCC 7F04709C AE2B0008 */ sw $t3, 8($s1) -/* 07BBD0 7F0470A0 C7A40498 */ lwc1 $f4, 0x498($sp) -/* 07BBD4 7F0470A4 AFA904A4 */ sw $t1, 0x4a4($sp) -/* 07BBD8 7F0470A8 C7B0049C */ lwc1 $f16, 0x49c($sp) -/* 07BBDC 7F0470AC 1000000F */ b .L7F0470EC -/* 07BBE0 7F0470B0 E7A404D4 */ swc1 $f4, 0x4d4($sp) -.L7F0470B4: -/* 07BBE4 7F0470B4 8E0200B8 */ lw $v0, 0xb8($s0) -.L7F0470B8: -/* 07BBE8 7F0470B8 3C198005 */ lui $t9, %hi(g_GlobalTimer) -/* 07BBEC 7F0470BC 0442000B */ bltzl $v0, .L7F0470EC -/* 07BBF0 7F0470C0 AFA004AC */ sw $zero, 0x4ac($sp) -/* 07BBF4 7F0470C4 8F39837C */ lw $t9, %lo(g_GlobalTimer)($t9) -/* 07BBF8 7F0470C8 272AFF88 */ addiu $t2, $t9, -0x78 -/* 07BBFC 7F0470CC 0142082A */ slt $at, $t2, $v0 -/* 07BC00 7F0470D0 50200006 */ beql $at, $zero, .L7F0470EC -/* 07BC04 7F0470D4 AFA004AC */ sw $zero, 0x4ac($sp) -/* 07BC08 7F0470D8 C608009C */ lwc1 $f8, 0x9c($s0) -/* 07BC0C 7F0470DC C6100090 */ lwc1 $f16, 0x90($s0) -/* 07BC10 7F0470E0 10000002 */ b .L7F0470EC -/* 07BC14 7F0470E4 E7A804D4 */ swc1 $f8, 0x4d4($sp) -/* 07BC18 7F0470E8 AFA004AC */ sw $zero, 0x4ac($sp) -.L7F0470EC: -/* 07BC1C 7F0470EC 02402025 */ move $a0, $s2 -/* 07BC20 7F0470F0 24050001 */ li $a1, 1 -/* 07BC24 7F0470F4 0FC2280F */ jal bondviewUpdateGuardTankFlagsRelated -/* 07BC28 7F0470F8 E7B004D8 */ swc1 $f16, 0x4d8($sp) -/* 07BC2C 7F0470FC C7B004D8 */ lwc1 $f16, 0x4d8($sp) -.L7F047100: -/* 07BC30 7F047100 8FAC04AC */ lw $t4, 0x4ac($sp) -.L7F047104: -/* 07BC34 7F047104 3C018005 */ lui $at, %hi(D_80052B20) -/* 07BC38 7F047108 C4342B20 */ lwc1 $f20, %lo(D_80052B20)($at) -/* 07BC3C 7F04710C 51800007 */ beql $t4, $zero, .L7F04712C -/* 07BC40 7F047110 8E0E00D0 */ lw $t6, 0xd0($s0) -/* 07BC44 7F047114 C7AC04B8 */ lwc1 $f12, 0x4b8($sp) -/* 07BC48 7F047118 0FC0B491 */ jal chrlvGetAimLimitAngle -/* 07BC4C 7F04711C E7B004D8 */ swc1 $f16, 0x4d8($sp) -/* 07BC50 7F047120 C7B004D8 */ lwc1 $f16, 0x4d8($sp) -/* 07BC54 7F047124 E7A004A0 */ swc1 $f0, 0x4a0($sp) -/* 07BC58 7F047128 8E0E00D0 */ lw $t6, 0xd0($s0) -.L7F04712C: -/* 07BC5C 7F04712C 11C0001F */ beqz $t6, .L7F0471AC -/* 07BC60 7F047130 3C0D8005 */ lui $t5, %hi(g_GlobalTimer) -/* 07BC64 7F047134 8DAD837C */ lw $t5, %lo(g_GlobalTimer)($t5) -/* 07BC68 7F047138 24010078 */ li $at, 120 -/* 07BC6C 7F04713C E7B004D8 */ swc1 $f16, 0x4d8($sp) -/* 07BC70 7F047140 01A1001A */ div $zero, $t5, $at -/* 07BC74 7F047144 00007810 */ mfhi $t7 -/* 07BC78 7F047148 448F5000 */ mtc1 $t7, $f10 -/* 07BC7C 7F04714C 3C0142F0 */ li $at, 0x42F00000 # 120.000000 -/* 07BC80 7F047150 44814000 */ mtc1 $at, $f8 -/* 07BC84 7F047154 468051A0 */ cvt.s.w $f6, $f10 -/* 07BC88 7F047158 46143102 */ mul.s $f4, $f6, $f20 -/* 07BC8C 7F04715C 0FC15FAB */ jal sinf -/* 07BC90 7F047160 46082303 */ div.s $f12, $f4, $f8 -/* 07BC94 7F047164 3C018005 */ lui $at, %hi(D_80052B24) -/* 07BC98 7F047168 C4262B24 */ lwc1 $f6, %lo(D_80052B24)($at) -/* 07BC9C 7F04716C C7AA04A0 */ lwc1 $f10, 0x4a0($sp) -/* 07BCA0 7F047170 C7B004D8 */ lwc1 $f16, 0x4d8($sp) -/* 07BCA4 7F047174 46065102 */ mul.s $f4, $f10, $f6 -/* 07BCA8 7F047178 00000000 */ nop -/* 07BCAC 7F04717C 46002202 */ mul.s $f8, $f4, $f0 -/* 07BCB0 7F047180 46088400 */ add.s $f16, $f16, $f8 -/* 07BCB4 7F047184 4616803C */ c.lt.s $f16, $f22 -/* 07BCB8 7F047188 00000000 */ nop -/* 07BCBC 7F04718C 45000002 */ bc1f .L7F047198 -/* 07BCC0 7F047190 00000000 */ nop -/* 07BCC4 7F047194 46148400 */ add.s $f16, $f16, $f20 -.L7F047198: -/* 07BCC8 7F047198 4610A03E */ c.le.s $f20, $f16 -/* 07BCCC 7F04719C 00000000 */ nop -/* 07BCD0 7F0471A0 45020003 */ bc1fl .L7F0471B0 -/* 07BCD4 7F0471A4 C6020084 */ lwc1 $f2, 0x84($s0) -/* 07BCD8 7F0471A8 46148401 */ sub.s $f16, $f16, $f20 -.L7F0471AC: -/* 07BCDC 7F0471AC C6020084 */ lwc1 $f2, 0x84($s0) -.L7F0471B0: -/* 07BCE0 7F0471B0 3C018005 */ lui $at, %hi(D_80052B28) -/* 07BCE4 7F0471B4 C42A2B28 */ lwc1 $f10, %lo(D_80052B28)($at) -/* 07BCE8 7F0471B8 46028001 */ sub.s $f0, $f16, $f2 -/* 07BCEC 7F0471BC 26040090 */ addiu $a0, $s0, 0x90 -/* 07BCF0 7F0471C0 460A003C */ c.lt.s $f0, $f10 -/* 07BCF4 7F0471C4 00000000 */ nop -/* 07BCF8 7F0471C8 45000003 */ bc1f .L7F0471D8 -/* 07BCFC 7F0471CC 00000000 */ nop -/* 07BD00 7F0471D0 10000008 */ b .L7F0471F4 -/* 07BD04 7F0471D4 46140000 */ add.s $f0, $f0, $f20 -.L7F0471D8: -/* 07BD08 7F0471D8 3C018005 */ lui $at, %hi(D_80052B2C) -/* 07BD0C 7F0471DC C4262B2C */ lwc1 $f6, %lo(D_80052B2C)($at) -/* 07BD10 7F0471E0 4600303E */ c.le.s $f6, $f0 -/* 07BD14 7F0471E4 00000000 */ nop -/* 07BD18 7F0471E8 45020003 */ bc1fl .L7F0471F8 -/* 07BD1C 7F0471EC C60C0088 */ lwc1 $f12, 0x88($s0) -/* 07BD20 7F0471F0 46140001 */ sub.s $f0, $f0, $f20 -.L7F0471F4: -/* 07BD24 7F0471F4 C60C0088 */ lwc1 $f12, 0x88($s0) -.L7F0471F8: -/* 07BD28 7F0471F8 3C018005 */ lui $at, %hi(D_80052B30) -/* 07BD2C 7F0471FC 4600603C */ c.lt.s $f12, $f0 -/* 07BD30 7F047200 00000000 */ nop -/* 07BD34 7F047204 45020004 */ bc1fl .L7F047218 -/* 07BD38 7F047208 C60C008C */ lwc1 $f12, 0x8c($s0) -/* 07BD3C 7F04720C 10000007 */ b .L7F04722C -/* 07BD40 7F047210 460C1400 */ add.s $f16, $f2, $f12 -/* 07BD44 7F047214 C60C008C */ lwc1 $f12, 0x8c($s0) -.L7F047218: -/* 07BD48 7F047218 460C003C */ c.lt.s $f0, $f12 -/* 07BD4C 7F04721C 00000000 */ nop -/* 07BD50 7F047220 45020003 */ bc1fl .L7F047230 -/* 07BD54 7F047224 4616803C */ c.lt.s $f16, $f22 -/* 07BD58 7F047228 460C1400 */ add.s $f16, $f2, $f12 -.L7F04722C: -/* 07BD5C 7F04722C 4616803C */ c.lt.s $f16, $f22 -.L7F047230: -/* 07BD60 7F047230 00000000 */ nop -/* 07BD64 7F047234 45020003 */ bc1fl .L7F047244 -/* 07BD68 7F047238 4610A03E */ c.le.s $f20, $f16 -/* 07BD6C 7F04723C 46148400 */ add.s $f16, $f16, $f20 -/* 07BD70 7F047240 4610A03E */ c.le.s $f20, $f16 -.L7F047244: -/* 07BD74 7F047244 00000000 */ nop -/* 07BD78 7F047248 45000002 */ bc1f .L7F047254 -/* 07BD7C 7F04724C 00000000 */ nop -/* 07BD80 7F047250 46148401 */ sub.s $f16, $f16, $f20 -.L7F047254: -/* 07BD84 7F047254 C4202B30 */ lwc1 $f0, %lo(D_80052B30)($at) -/* 07BD88 7F047258 44058000 */ mfc1 $a1, $f16 -/* 07BD8C 7F04725C 26060094 */ addiu $a2, $s0, 0x94 -/* 07BD90 7F047260 E7A00010 */ swc1 $f0, 0x10($sp) -/* 07BD94 7F047264 C60400A4 */ lwc1 $f4, 0xa4($s0) -/* 07BD98 7F047268 44070000 */ mfc1 $a3, $f0 -/* 07BD9C 7F04726C E7B004D8 */ swc1 $f16, 0x4d8($sp) -/* 07BDA0 7F047270 0FC10C43 */ jal chrobjCallsApplySpeed -/* 07BDA4 7F047274 E7A40014 */ swc1 $f4, 0x14($sp) -/* 07BDA8 7F047278 3C018005 */ lui $at, %hi(D_80052B34) -/* 07BDAC 7F04727C C4202B34 */ lwc1 $f0, %lo(D_80052B34)($at) -/* 07BDB0 7F047280 2604009C */ addiu $a0, $s0, 0x9c -/* 07BDB4 7F047284 8FA504D4 */ lw $a1, 0x4d4($sp) -/* 07BDB8 7F047288 E7A00010 */ swc1 $f0, 0x10($sp) -/* 07BDBC 7F04728C C60800A4 */ lwc1 $f8, 0xa4($s0) -/* 07BDC0 7F047290 44070000 */ mfc1 $a3, $f0 -/* 07BDC4 7F047294 260600A0 */ addiu $a2, $s0, 0xa0 -/* 07BDC8 7F047298 0FC10C43 */ jal chrobjCallsApplySpeed -/* 07BDCC 7F04729C E7A80014 */ swc1 $f8, 0x14($sp) -/* 07BDD0 7F0472A0 C7B004D8 */ lwc1 $f16, 0x4d8($sp) -/* 07BDD4 7F0472A4 C60A0090 */ lwc1 $f10, 0x90($s0) -/* 07BDD8 7F0472A8 3C018005 */ lui $at, %hi(D_80052B38) -/* 07BDDC 7F0472AC C7A604D4 */ lwc1 $f6, 0x4d4($sp) -/* 07BDE0 7F0472B0 460A8301 */ sub.s $f12, $f16, $f10 -/* 07BDE4 7F0472B4 4616603C */ c.lt.s $f12, $f22 -/* 07BDE8 7F0472B8 00000000 */ nop -/* 07BDEC 7F0472BC 45000002 */ bc1f .L7F0472C8 -/* 07BDF0 7F0472C0 00000000 */ nop -/* 07BDF4 7F0472C4 46146300 */ add.s $f12, $f12, $f20 -.L7F0472C8: -/* 07BDF8 7F0472C8 C4202B38 */ lwc1 $f0, %lo(D_80052B38)($at) -/* 07BDFC 7F0472CC 460C003C */ c.lt.s $f0, $f12 -/* 07BE00 7F0472D0 00000000 */ nop -/* 07BE04 7F0472D4 45020003 */ bc1fl .L7F0472E4 -/* 07BE08 7F0472D8 C604009C */ lwc1 $f4, 0x9c($s0) -/* 07BE0C 7F0472DC 46146301 */ sub.s $f12, $f12, $f20 -/* 07BE10 7F0472E0 C604009C */ lwc1 $f4, 0x9c($s0) -.L7F0472E4: -/* 07BE14 7F0472E4 46043081 */ sub.s $f2, $f6, $f4 -/* 07BE18 7F0472E8 4616103C */ c.lt.s $f2, $f22 -/* 07BE1C 7F0472EC 00000000 */ nop -/* 07BE20 7F0472F0 45020003 */ bc1fl .L7F047300 -/* 07BE24 7F0472F4 4602003C */ c.lt.s $f0, $f2 -/* 07BE28 7F0472F8 46141080 */ add.s $f2, $f2, $f20 -/* 07BE2C 7F0472FC 4602003C */ c.lt.s $f0, $f2 -.L7F047300: -/* 07BE30 7F047300 00000000 */ nop -/* 07BE34 7F047304 45020003 */ bc1fl .L7F047314 -/* 07BE38 7F047308 AE0000D0 */ sw $zero, 0xd0($s0) -/* 07BE3C 7F04730C 46141081 */ sub.s $f2, $f2, $f20 -/* 07BE40 7F047310 AE0000D0 */ sw $zero, 0xd0($s0) -.L7F047314: -/* 07BE44 7F047314 8FB804AC */ lw $t8, 0x4ac($sp) -/* 07BE48 7F047318 C7A804A0 */ lwc1 $f8, 0x4a0($sp) -/* 07BE4C 7F04731C 53000047 */ beql $t8, $zero, .L7F04743C -/* 07BE50 7F047320 8FB904A8 */ lw $t9, 0x4a8($sp) -/* 07BE54 7F047324 4608603C */ c.lt.s $f12, $f8 -/* 07BE58 7F047328 C7AA04A0 */ lwc1 $f10, 0x4a0($sp) -/* 07BE5C 7F04732C 4502001B */ bc1fl .L7F04739C -/* 07BE60 7F047330 460A5000 */ add.s $f0, $f10, $f10 -/* 07BE64 7F047334 46004007 */ neg.s $f0, $f8 -/* 07BE68 7F047338 460C003C */ c.lt.s $f0, $f12 -/* 07BE6C 7F04733C 00000000 */ nop -/* 07BE70 7F047340 45020016 */ bc1fl .L7F04739C -/* 07BE74 7F047344 460A5000 */ add.s $f0, $f10, $f10 -/* 07BE78 7F047348 4608103C */ c.lt.s $f2, $f8 -/* 07BE7C 7F04734C 00000000 */ nop -/* 07BE80 7F047350 45020012 */ bc1fl .L7F04739C -/* 07BE84 7F047354 460A5000 */ add.s $f0, $f10, $f10 -/* 07BE88 7F047358 4602003C */ c.lt.s $f0, $f2 -/* 07BE8C 7F04735C 24080001 */ li $t0, 1 -/* 07BE90 7F047360 4502000E */ bc1fl .L7F04739C -/* 07BE94 7F047364 460A5000 */ add.s $f0, $f10, $f10 -/* 07BE98 7F047368 AE0800D0 */ sw $t0, 0xd0($s0) -/* 07BE9C 7F04736C 8FA904A4 */ lw $t1, 0x4a4($sp) -/* 07BEA0 7F047370 240B0001 */ li $t3, 1 -/* 07BEA4 7F047374 AFAB04A8 */ sw $t3, 0x4a8($sp) -/* 07BEA8 7F047378 1120002F */ beqz $t1, .L7F047438 -/* 07BEAC 7F04737C 3C198005 */ lui $t9, %hi(g_GlobalTimer) -/* 07BEB0 7F047380 8F39837C */ lw $t9, %lo(g_GlobalTimer)($t9) -/* 07BEB4 7F047384 3C0A8005 */ lui $t2, %hi(g_GlobalTimer) -/* 07BEB8 7F047388 AE1900B8 */ sw $t9, 0xb8($s0) -/* 07BEBC 7F04738C 8D4A837C */ lw $t2, %lo(g_GlobalTimer)($t2) -/* 07BEC0 7F047390 10000029 */ b .L7F047438 -/* 07BEC4 7F047394 AE0A00BC */ sw $t2, 0xbc($s0) -/* 07BEC8 7F047398 460A5000 */ add.s $f0, $f10, $f10 -.L7F04739C: -/* 07BECC 7F04739C 4600603C */ c.lt.s $f12, $f0 -/* 07BED0 7F0473A0 00000000 */ nop -/* 07BED4 7F0473A4 45020018 */ bc1fl .L7F047408 -/* 07BED8 7F0473A8 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07BEDC 7F0473AC 46000387 */ neg.s $f14, $f0 -/* 07BEE0 7F0473B0 460C703C */ c.lt.s $f14, $f12 -/* 07BEE4 7F0473B4 00000000 */ nop -/* 07BEE8 7F0473B8 45020013 */ bc1fl .L7F047408 -/* 07BEEC 7F0473BC 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07BEF0 7F0473C0 4600103C */ c.lt.s $f2, $f0 -/* 07BEF4 7F0473C4 00000000 */ nop -/* 07BEF8 7F0473C8 4502000F */ bc1fl .L7F047408 -/* 07BEFC 7F0473CC 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07BF00 7F0473D0 4602703C */ c.lt.s $f14, $f2 -/* 07BF04 7F0473D4 240C0001 */ li $t4, 1 -/* 07BF08 7F0473D8 4502000B */ bc1fl .L7F047408 -/* 07BF0C 7F0473DC 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07BF10 7F0473E0 AE0C00D0 */ sw $t4, 0xd0($s0) -/* 07BF14 7F0473E4 8FAD04A4 */ lw $t5, 0x4a4($sp) -/* 07BF18 7F0473E8 240E0001 */ li $t6, 1 -/* 07BF1C 7F0473EC AFAE04A8 */ sw $t6, 0x4a8($sp) -/* 07BF20 7F0473F0 11A00011 */ beqz $t5, .L7F047438 -/* 07BF24 7F0473F4 3C0F8005 */ lui $t7, %hi(g_GlobalTimer) -/* 07BF28 7F0473F8 8DEF837C */ lw $t7, %lo(g_GlobalTimer)($t7) -/* 07BF2C 7F0473FC 1000000E */ b .L7F047438 -/* 07BF30 7F047400 AE0F00B8 */ sw $t7, 0xb8($s0) -/* 07BF34 7F047404 8E0200B8 */ lw $v0, 0xb8($s0) -.L7F047408: -/* 07BF38 7F047408 3C188005 */ lui $t8, %hi(g_GlobalTimer) -/* 07BF3C 7F04740C 0442000B */ bltzl $v0, .L7F04743C -/* 07BF40 7F047410 8FB904A8 */ lw $t9, 0x4a8($sp) -/* 07BF44 7F047414 8F18837C */ lw $t8, %lo(g_GlobalTimer)($t8) -/* 07BF48 7F047418 240B0001 */ li $t3, 1 -/* 07BF4C 7F04741C 24090001 */ li $t1, 1 -/* 07BF50 7F047420 2708FF88 */ addiu $t0, $t8, -0x78 -/* 07BF54 7F047424 0102082A */ slt $at, $t0, $v0 -/* 07BF58 7F047428 50200004 */ beql $at, $zero, .L7F04743C -/* 07BF5C 7F04742C 8FB904A8 */ lw $t9, 0x4a8($sp) -/* 07BF60 7F047430 AE0B00D0 */ sw $t3, 0xd0($s0) -/* 07BF64 7F047434 AFA904A8 */ sw $t1, 0x4a8($sp) -.L7F047438: -/* 07BF68 7F047438 8FB904A8 */ lw $t9, 0x4a8($sp) -.L7F04743C: -/* 07BF6C 7F04743C 3C018005 */ lui $at, %hi(D_80052B3C) -/* 07BF70 7F047440 53200013 */ beql $t9, $zero, .L7F047490 -/* 07BF74 7F047444 C60200B0 */ lwc1 $f2, 0xb0($s0) -/* 07BF78 7F047448 C4202B3C */ lwc1 $f0, %lo(D_80052B3C)($at) -/* 07BF7C 7F04744C 3C018005 */ lui $at, %hi(D_80052B40) -/* 07BF80 7F047450 C4262B40 */ lwc1 $f6, %lo(D_80052B40)($at) -/* 07BF84 7F047454 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07BF88 7F047458 C4248378 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07BF8C 7F04745C C60A00B0 */ lwc1 $f10, 0xb0($s0) -/* 07BF90 7F047460 46043202 */ mul.s $f8, $f6, $f4 -/* 07BF94 7F047464 46085180 */ add.s $f6, $f10, $f8 -/* 07BF98 7F047468 E60600B0 */ swc1 $f6, 0xb0($s0) -/* 07BF9C 7F04746C C60200B0 */ lwc1 $f2, 0xb0($s0) -/* 07BFA0 7F047470 4602003C */ c.lt.s $f0, $f2 -/* 07BFA4 7F047474 00000000 */ nop -/* 07BFA8 7F047478 45020023 */ bc1fl .L7F047508 -/* 07BFAC 7F04747C 4602B03C */ c.lt.s $f22, $f2 -/* 07BFB0 7F047480 E60000B0 */ swc1 $f0, 0xb0($s0) -/* 07BFB4 7F047484 1000001F */ b .L7F047504 -/* 07BFB8 7F047488 C60200B0 */ lwc1 $f2, 0xb0($s0) -/* 07BFBC 7F04748C C60200B0 */ lwc1 $f2, 0xb0($s0) -.L7F047490: -/* 07BFC0 7F047490 3C0A8005 */ lui $t2, %hi(g_ClockTimer) -/* 07BFC4 7F047494 4602B03C */ c.lt.s $f22, $f2 -/* 07BFC8 7F047498 00000000 */ nop -/* 07BFCC 7F04749C 4502001A */ bc1fl .L7F047508 -/* 07BFD0 7F0474A0 4602B03C */ c.lt.s $f22, $f2 -/* 07BFD4 7F0474A4 8D4A8374 */ lw $t2, %lo(g_ClockTimer)($t2) -/* 07BFD8 7F0474A8 00001025 */ move $v0, $zero -/* 07BFDC 7F0474AC 3C018005 */ lui $at, %hi(D_80052B44) -/* 07BFE0 7F0474B0 1940000C */ blez $t2, .L7F0474E4 -/* 07BFE4 7F0474B4 00000000 */ nop -/* 07BFE8 7F0474B8 C4202B44 */ lwc1 $f0, %lo(D_80052B44)($at) -/* 07BFEC 7F0474BC C60400B0 */ lwc1 $f4, 0xb0($s0) -.L7F0474C0: -/* 07BFF0 7F0474C0 3C0C8005 */ lui $t4, %hi(g_ClockTimer) -/* 07BFF4 7F0474C4 24420001 */ addiu $v0, $v0, 1 -/* 07BFF8 7F0474C8 46002282 */ mul.s $f10, $f4, $f0 -/* 07BFFC 7F0474CC E60A00B0 */ swc1 $f10, 0xb0($s0) -/* 07C000 7F0474D0 8D8C8374 */ lw $t4, %lo(g_ClockTimer)($t4) -/* 07C004 7F0474D4 004C082A */ slt $at, $v0, $t4 -/* 07C008 7F0474D8 5420FFF9 */ bnezl $at, .L7F0474C0 -/* 07C00C 7F0474DC C60400B0 */ lwc1 $f4, 0xb0($s0) -/* 07C010 7F0474E0 C60200B0 */ lwc1 $f2, 0xb0($s0) -.L7F0474E4: -/* 07C014 7F0474E4 3C018005 */ lui $at, %hi(D_80052B48) -/* 07C018 7F0474E8 C4282B48 */ lwc1 $f8, %lo(D_80052B48)($at) -/* 07C01C 7F0474EC 4608103E */ c.le.s $f2, $f8 -/* 07C020 7F0474F0 00000000 */ nop -/* 07C024 7F0474F4 45020004 */ bc1fl .L7F047508 -/* 07C028 7F0474F8 4602B03C */ c.lt.s $f22, $f2 -/* 07C02C 7F0474FC E61600B0 */ swc1 $f22, 0xb0($s0) -/* 07C030 7F047500 C60200B0 */ lwc1 $f2, 0xb0($s0) -.L7F047504: -/* 07C034 7F047504 4602B03C */ c.lt.s $f22, $f2 -.L7F047508: -/* 07C038 7F047508 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07C03C 7F04750C 45020348 */ bc1fl .L7F048230 -/* 07C040 7F047510 92220003 */ lbu $v0, 3($s1) -/* 07C044 7F047514 C4248378 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07C048 7F047518 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07C04C 7F04751C 46041282 */ mul.s $f10, $f2, $f4 -/* 07C050 7F047520 460A3200 */ add.s $f8, $f6, $f10 -/* 07C054 7F047524 E60800B4 */ swc1 $f8, 0xb4($s0) -/* 07C058 7F047528 C60000B4 */ lwc1 $f0, 0xb4($s0) -/* 07C05C 7F04752C 4600A03E */ c.le.s $f20, $f0 -/* 07C060 7F047530 00000000 */ nop -/* 07C064 7F047534 4502033E */ bc1fl .L7F048230 -/* 07C068 7F047538 92220003 */ lbu $v0, 3($s1) -/* 07C06C 7F04753C 46140101 */ sub.s $f4, $f0, $f20 -.L7F047540: -/* 07C070 7F047540 E60400B4 */ swc1 $f4, 0xb4($s0) -/* 07C074 7F047544 C60000B4 */ lwc1 $f0, 0xb4($s0) -/* 07C078 7F047548 4600A03E */ c.le.s $f20, $f0 -/* 07C07C 7F04754C 00000000 */ nop -/* 07C080 7F047550 4503FFFB */ bc1tl .L7F047540 -/* 07C084 7F047554 46140101 */ sub.s $f4, $f0, $f20 -/* 07C088 7F047558 10000335 */ b .L7F048230 -/* 07C08C 7F04755C 92220003 */ lbu $v0, 3($s1) -/* 07C090 7F047560 24010027 */ li $at, 39 -.L7F047564: -/* 07C094 7F047564 14410255 */ bne $v0, $at, .L7F047EBC -/* 07C098 7F047568 02202025 */ move $a0, $s1 -/* 07C09C 7F04756C C62600A0 */ lwc1 $f6, 0xa0($s1) -/* 07C0A0 7F047570 AFA00478 */ sw $zero, 0x478($sp) -/* 07C0A4 7F047574 24050001 */ li $a1, 1 -/* 07C0A8 7F047578 0FC0D521 */ jal ai -/* 07C0AC 7F04757C E7A6047C */ swc1 $f6, 0x47c($sp) -/* 07C0B0 7F047580 C62E0098 */ lwc1 $f14, 0x98($s1) -/* 07C0B4 7F047584 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07C0B8 7F047588 460EB03E */ c.le.s $f22, $f14 -/* 07C0BC 7F04758C 00000000 */ nop -/* 07C0C0 7F047590 45020016 */ bc1fl .L7F0475EC -/* 07C0C4 7F047594 8E2E000C */ lw $t6, 0xc($s1) -/* 07C0C8 7F047598 C4228378 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07C0CC 7F04759C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07C0D0 7F0475A0 4602703E */ c.le.s $f14, $f2 -/* 07C0D4 7F0475A4 00000000 */ nop -/* 07C0D8 7F0475A8 45020006 */ bc1fl .L7F0475C4 -/* 07C0DC 7F0475AC C6200088 */ lwc1 $f0, 0x88($s1) -/* 07C0E0 7F0475B0 C62A0094 */ lwc1 $f10, 0x94($s1) -/* 07C0E4 7F0475B4 C62E0098 */ lwc1 $f14, 0x98($s1) -/* 07C0E8 7F0475B8 10000008 */ b .L7F0475DC -/* 07C0EC 7F0475BC E62A0088 */ swc1 $f10, 0x88($s1) -/* 07C0F0 7F0475C0 C6200088 */ lwc1 $f0, 0x88($s1) -.L7F0475C4: -/* 07C0F4 7F0475C4 C6280094 */ lwc1 $f8, 0x94($s1) -/* 07C0F8 7F0475C8 46004101 */ sub.s $f4, $f8, $f0 -/* 07C0FC 7F0475CC 46022182 */ mul.s $f6, $f4, $f2 -/* 07C100 7F0475D0 460E3283 */ div.s $f10, $f6, $f14 -/* 07C104 7F0475D4 460A0200 */ add.s $f8, $f0, $f10 -/* 07C108 7F0475D8 E6280088 */ swc1 $f8, 0x88($s1) -.L7F0475DC: -/* 07C10C 7F0475DC C4248378 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07C110 7F0475E0 46047181 */ sub.s $f6, $f14, $f4 -/* 07C114 7F0475E4 E6260098 */ swc1 $f6, 0x98($s1) -/* 07C118 7F0475E8 8E2E000C */ lw $t6, 0xc($s1) -.L7F0475EC: -/* 07C11C 7F0475EC 00008025 */ move $s0, $zero -/* 07C120 7F0475F0 000E6B00 */ sll $t5, $t6, 0xc -/* 07C124 7F0475F4 05A00014 */ bltz $t5, .L7F047648 -/* 07C128 7F0475F8 00000000 */ nop -/* 07C12C 7F0475FC 0FC13BCD */ jal objIsHealthy -/* 07C130 7F047600 02202025 */ move $a0, $s1 -/* 07C134 7F047604 10400010 */ beqz $v0, .L7F047648 -/* 07C138 7F047608 00000000 */ nop -/* 07C13C 7F04760C C62A0088 */ lwc1 $f10, 0x88($s1) -/* 07C140 7F047610 26240058 */ addiu $a0, $s1, 0x58 -/* 07C144 7F047614 3C0544FA */ lui $a1, 0x44fa -/* 07C148 7F047618 460AB03C */ c.lt.s $f22, $f10 -/* 07C14C 7F04761C 3C06453B */ lui $a2, (0x453B8000 >> 16) # lui $a2, 0x453b -/* 07C150 7F047620 45010006 */ bc1t .L7F04763C -/* 07C154 7F047624 00000000 */ nop -/* 07C158 7F047628 C6280094 */ lwc1 $f8, 0x94($s1) -/* 07C15C 7F04762C 4608B03C */ c.lt.s $f22, $f8 -/* 07C160 7F047630 00000000 */ nop -/* 07C164 7F047634 45000004 */ bc1f .L7F047648 -/* 07C168 7F047638 00000000 */ nop -.L7F04763C: -/* 07C16C 7F04763C 0FC14E25 */ jal sub_GAME_7F053894 -/* 07C170 7F047640 34C68000 */ ori $a2, (0x453B8000 & 0xFFFF) # ori $a2, $a2, 0x8000 -/* 07C174 7F047644 00408025 */ move $s0, $v0 -.L7F047648: -/* 07C178 7F047648 5A000019 */ blezl $s0, .L7F0476B0 -/* 07C17C 7F04764C 8E2400AC */ lw $a0, 0xac($s1) -/* 07C180 7F047650 8E2400AC */ lw $a0, 0xac($s1) -/* 07C184 7F047654 10800005 */ beqz $a0, .L7F04766C -/* 07C188 7F047658 00000000 */ nop -/* 07C18C 7F04765C 0C00237C */ jal sndGetPlayingState -/* 07C190 7F047660 00000000 */ nop -/* 07C194 7F047664 5440000A */ bnezl $v0, .L7F047690 -/* 07C198 7F047668 8E2400AC */ lw $a0, 0xac($s1) -.L7F04766C: -/* 07C19C 7F04766C 0FC2FF01 */ jal lvlGetControlsLockedFlag -/* 07C1A0 7F047670 00000000 */ nop -/* 07C1A4 7F047674 14400005 */ bnez $v0, .L7F04768C -/* 07C1A8 7F047678 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 07C1AC 7F04767C 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07C1B0 7F047680 24050041 */ li $a1, 65 -/* 07C1B4 7F047684 0C002382 */ jal sndPlaySfx -/* 07C1B8 7F047688 262600AC */ addiu $a2, $s1, 0xac -.L7F04768C: -/* 07C1BC 7F04768C 8E2400AC */ lw $a0, 0xac($s1) -.L7F047690: -/* 07C1C0 7F047690 24050008 */ li $a1, 8 -/* 07C1C4 7F047694 5080000F */ beql $a0, $zero, .L7F0476D4 -/* 07C1C8 7F047698 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07C1CC 7F04769C 0C002461 */ jal sndCreatePostEvent -/* 07C1D0 7F0476A0 02003025 */ move $a2, $s0 -/* 07C1D4 7F0476A4 1000000B */ b .L7F0476D4 -/* 07C1D8 7F0476A8 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07C1DC 7F0476AC 8E2400AC */ lw $a0, 0xac($s1) -.L7F0476B0: -/* 07C1E0 7F0476B0 50800008 */ beql $a0, $zero, .L7F0476D4 -/* 07C1E4 7F0476B4 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07C1E8 7F0476B8 0C00237C */ jal sndGetPlayingState -/* 07C1EC 7F0476BC 00000000 */ nop -/* 07C1F0 7F0476C0 50400004 */ beql $v0, $zero, .L7F0476D4 -/* 07C1F4 7F0476C4 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07C1F8 7F0476C8 0C002408 */ jal sndDeactivate -/* 07C1FC 7F0476CC 8E2400AC */ lw $a0, 0xac($s1) -/* 07C200 7F0476D0 8E2400A4 */ lw $a0, 0xa4($s1) -.L7F0476D4: -/* 07C204 7F0476D4 3C058007 */ lui $a1, %hi(g_CurrentSetup+0) -/* 07C208 7F0476D8 5080002A */ beql $a0, $zero, .L7F047784 -/* 07C20C 7F0476DC 8E2B0008 */ lw $t3, 8($s1) -/* 07C210 7F0476E0 8E3800A8 */ lw $t8, 0xa8($s1) -/* 07C214 7F0476E4 8C8F0000 */ lw $t7, ($a0) -/* 07C218 7F0476E8 24A55D00 */ addiu $a1, %lo(g_CurrentSetup+0) # addiu $a1, $a1, 0x5d00 -/* 07C21C 7F0476EC 00184080 */ sll $t0, $t8, 2 -/* 07C220 7F0476F0 01E81021 */ addu $v0, $t7, $t0 -/* 07C224 7F0476F4 8C4B0000 */ lw $t3, ($v0) -/* 07C228 7F0476F8 8CB90000 */ lw $t9, ($a1) -/* 07C22C 7F0476FC 8CAE0018 */ lw $t6, 0x18($a1) -/* 07C230 7F047700 000B4900 */ sll $t1, $t3, 4 -/* 07C234 7F047704 01391821 */ addu $v1, $t1, $t9 -/* 07C238 7F047708 8C6A0000 */ lw $t2, ($v1) -/* 07C23C 7F04770C C6260058 */ lwc1 $f6, 0x58($s1) -/* 07C240 7F047710 C6280060 */ lwc1 $f8, 0x60($s1) -/* 07C244 7F047714 000A6080 */ sll $t4, $t2, 2 -/* 07C248 7F047718 018A6023 */ subu $t4, $t4, $t2 -/* 07C24C 7F04771C 000C6080 */ sll $t4, $t4, 2 -/* 07C250 7F047720 018A6023 */ subu $t4, $t4, $t2 -/* 07C254 7F047724 000C6080 */ sll $t4, $t4, 2 -/* 07C258 7F047728 018E3021 */ addu $a2, $t4, $t6 -/* 07C25C 7F04772C C4C40000 */ lwc1 $f4, ($a2) -/* 07C260 7F047730 C4CA0008 */ lwc1 $f10, 8($a2) -/* 07C264 7F047734 AFA60478 */ sw $a2, 0x478($sp) -/* 07C268 7F047738 46062301 */ sub.s $f12, $f4, $f6 -/* 07C26C 7F04773C 0FC16A8C */ jal atan2f -/* 07C270 7F047740 46085381 */ sub.s $f14, $f10, $f8 -/* 07C274 7F047744 E7A0047C */ swc1 $f0, 0x47c($sp) -/* 07C278 7F047748 8E2D0008 */ lw $t5, 8($s1) -/* 07C27C 7F04774C 3C01DFFF */ lui $at, (0xDFFFFFFF >> 16) # lui $at, 0xdfff -/* 07C280 7F047750 C7A4047C */ lwc1 $f4, 0x47c($sp) -/* 07C284 7F047754 000DC080 */ sll $t8, $t5, 2 -/* 07C288 7F047758 07010018 */ bgez $t8, .L7F0477BC -/* 07C28C 7F04775C 3421FFFF */ ori $at, (0xDFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 07C290 7F047760 8E2F0008 */ lw $t7, 8($s1) -/* 07C294 7F047764 E62400A0 */ swc1 $f4, 0xa0($s1) -/* 07C298 7F047768 02202025 */ move $a0, $s1 -/* 07C29C 7F04776C 01E14024 */ and $t0, $t7, $at -/* 07C2A0 7F047770 0FC112CE */ jal sub_GAME_7F044B38 -/* 07C2A4 7F047774 AE280008 */ sw $t0, 8($s1) -/* 07C2A8 7F047778 10000011 */ b .L7F0477C0 -/* 07C2AC 7F04777C C6260088 */ lwc1 $f6, 0x88($s1) -/* 07C2B0 7F047780 8E2B0008 */ lw $t3, 8($s1) -.L7F047784: -/* 07C2B4 7F047784 000B4880 */ sll $t1, $t3, 2 -/* 07C2B8 7F047788 0523000D */ bgezl $t1, .L7F0477C0 -/* 07C2BC 7F04778C C6260088 */ lwc1 $f6, 0x88($s1) -/* 07C2C0 7F047790 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 07C2C4 7F047794 0FC16A8C */ jal atan2f -/* 07C2C8 7F047798 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 07C2CC 7F04779C 8E390008 */ lw $t9, 8($s1) -/* 07C2D0 7F0477A0 3C01DFFF */ lui $at, (0xDFFFFFFF >> 16) # lui $at, 0xdfff -/* 07C2D4 7F0477A4 3421FFFF */ ori $at, (0xDFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 07C2D8 7F0477A8 03215024 */ and $t2, $t9, $at -/* 07C2DC 7F0477AC E62000A0 */ swc1 $f0, 0xa0($s1) -/* 07C2E0 7F0477B0 AE2A0008 */ sw $t2, 8($s1) -/* 07C2E4 7F0477B4 0FC112CE */ jal sub_GAME_7F044B38 -/* 07C2E8 7F0477B8 02202025 */ move $a0, $s1 -.L7F0477BC: -/* 07C2EC 7F0477BC C6260088 */ lwc1 $f6, 0x88($s1) -.L7F0477C0: -/* 07C2F0 7F0477C0 4606B03C */ c.lt.s $f22, $f6 -/* 07C2F4 7F0477C4 00000000 */ nop -/* 07C2F8 7F0477C8 450201AC */ bc1fl .L7F047E7C -/* 07C2FC 7F0477CC 8E280008 */ lw $t0, 8($s1) -/* 07C300 7F0477D0 8E6C0014 */ lw $t4, 0x14($s3) -/* 07C304 7F0477D4 8FAE0478 */ lw $t6, 0x478($sp) -/* 07C308 7F0477D8 4600B386 */ mov.s $f14, $f22 -/* 07C30C 7F0477DC AFAC0468 */ sw $t4, 0x468($sp) -/* 07C310 7F0477E0 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C314 7F0477E4 E7AC0438 */ swc1 $f12, 0x438($sp) -/* 07C318 7F0477E8 C62A009C */ lwc1 $f10, 0x9c($s1) -/* 07C31C 7F0477EC 11C00013 */ beqz $t6, .L7F04783C -/* 07C320 7F0477F0 E7AA0434 */ swc1 $f10, 0x434($sp) -/* 07C324 7F0477F4 262D0058 */ addiu $t5, $s1, 0x58 -/* 07C328 7F0477F8 AFAD0070 */ sw $t5, 0x70($sp) -/* 07C32C 7F0477FC 0FC15FAB */ jal sinf -/* 07C330 7F047800 E7AE0430 */ swc1 $f14, 0x430($sp) -/* 07C334 7F047804 E7A0043C */ swc1 $f0, 0x43c($sp) -/* 07C338 7F047808 E7B60440 */ swc1 $f22, 0x440($sp) -/* 07C33C 7F04780C 0FC15FA8 */ jal cosf -/* 07C340 7F047810 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C344 7F047814 E7A00444 */ swc1 $f0, 0x444($sp) -/* 07C348 7F047818 8FA40070 */ lw $a0, 0x70($sp) -/* 07C34C 7F04781C 27A5043C */ addiu $a1, $sp, 0x43c -/* 07C350 7F047820 8FA60478 */ lw $a2, 0x478($sp) -/* 07C354 7F047824 0FC0BF0D */ jal chrlvGeometryRelated7F02FC34 -/* 07C358 7F047828 3C074120 */ lui $a3, 0x4120 -/* 07C35C 7F04782C 10400003 */ beqz $v0, .L7F04783C -/* 07C360 7F047830 C7AE0430 */ lwc1 $f14, 0x430($sp) -/* 07C364 7F047834 C62800A0 */ lwc1 $f8, 0xa0($s1) -/* 07C368 7F047838 E7A8047C */ swc1 $f8, 0x47c($sp) -.L7F04783C: -/* 07C36C 7F04783C 3C018005 */ lui $at, %hi(D_80052B4C) -/* 07C370 7F047840 C4242B4C */ lwc1 $f4, %lo(D_80052B4C)($at) -/* 07C374 7F047844 3C018005 */ lui $at, %hi(D_80052B50) -/* 07C378 7F047848 C4262B50 */ lwc1 $f6, %lo(D_80052B50)($at) -/* 07C37C 7F04784C 3C0738E4 */ lui $a3, (0x38E4C389 >> 16) # lui $a3, 0x38e4 -/* 07C380 7F047850 34E7C389 */ ori $a3, (0x38E4C389 & 0xFFFF) # ori $a3, $a3, 0xc389 -/* 07C384 7F047854 262400A0 */ addiu $a0, $s1, 0xa0 -/* 07C388 7F047858 8FA5047C */ lw $a1, 0x47c($sp) -/* 07C38C 7F04785C 2626009C */ addiu $a2, $s1, 0x9c -/* 07C390 7F047860 E7AE0430 */ swc1 $f14, 0x430($sp) -/* 07C394 7F047864 E7A40010 */ swc1 $f4, 0x10($sp) -/* 07C398 7F047868 0FC10C43 */ jal chrobjCallsApplySpeed -/* 07C39C 7F04786C E7A60014 */ swc1 $f6, 0x14($sp) -/* 07C3A0 7F047870 3C018005 */ lui $at, %hi(D_80052B54) -/* 07C3A4 7F047874 C4342B54 */ lwc1 $f20, %lo(D_80052B54)($at) -/* 07C3A8 7F047878 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C3AC 7F04787C C7AE0430 */ lwc1 $f14, 0x430($sp) -/* 07C3B0 7F047880 3C018005 */ lui $at, %hi(D_80052B58) -/* 07C3B4 7F047884 460CA03E */ c.le.s $f20, $f12 -/* 07C3B8 7F047888 00000000 */ nop -/* 07C3BC 7F04788C 45020009 */ bc1fl .L7F0478B4 -/* 07C3C0 7F047890 4616603C */ c.lt.s $f12, $f22 -/* 07C3C4 7F047894 46146281 */ sub.s $f10, $f12, $f20 -.L7F047898: -/* 07C3C8 7F047898 E62A00A0 */ swc1 $f10, 0xa0($s1) -/* 07C3CC 7F04789C C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C3D0 7F0478A0 460CA03E */ c.le.s $f20, $f12 -/* 07C3D4 7F0478A4 00000000 */ nop -/* 07C3D8 7F0478A8 4503FFFB */ bc1tl .L7F047898 -/* 07C3DC 7F0478AC 46146281 */ sub.s $f10, $f12, $f20 -/* 07C3E0 7F0478B0 4616603C */ c.lt.s $f12, $f22 -.L7F0478B4: -/* 07C3E4 7F0478B4 00000000 */ nop -/* 07C3E8 7F0478B8 45020009 */ bc1fl .L7F0478E0 -/* 07C3EC 7F0478BC C7A4047C */ lwc1 $f4, 0x47c($sp) -/* 07C3F0 7F0478C0 46146200 */ add.s $f8, $f12, $f20 -.L7F0478C4: -/* 07C3F4 7F0478C4 E62800A0 */ swc1 $f8, 0xa0($s1) -/* 07C3F8 7F0478C8 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C3FC 7F0478CC 4616603C */ c.lt.s $f12, $f22 -/* 07C400 7F0478D0 00000000 */ nop -/* 07C404 7F0478D4 4503FFFB */ bc1tl .L7F0478C4 -/* 07C408 7F0478D8 46146200 */ add.s $f8, $f12, $f20 -/* 07C40C 7F0478DC C7A4047C */ lwc1 $f4, 0x47c($sp) -.L7F0478E0: -/* 07C410 7F0478E0 460C2032 */ c.eq.s $f4, $f12 -/* 07C414 7F0478E4 00000000 */ nop -/* 07C418 7F0478E8 4502000F */ bc1fl .L7F047928 -/* 07C41C 7F0478EC 8E980008 */ lw $t8, 8($s4) -/* 07C420 7F0478F0 C620009C */ lwc1 $f0, 0x9c($s1) -/* 07C424 7F0478F4 C4262B58 */ lwc1 $f6, %lo(D_80052B58)($at) -/* 07C428 7F0478F8 3C018005 */ lui $at, %hi(D_80052B5C) -/* 07C42C 7F0478FC 4606003E */ c.le.s $f0, $f6 -/* 07C430 7F047900 00000000 */ nop -/* 07C434 7F047904 45020008 */ bc1fl .L7F047928 -/* 07C438 7F047908 8E980008 */ lw $t8, 8($s4) -/* 07C43C 7F04790C C42A2B5C */ lwc1 $f10, %lo(D_80052B5C)($at) -/* 07C440 7F047910 4600503E */ c.le.s $f10, $f0 -/* 07C444 7F047914 00000000 */ nop -/* 07C448 7F047918 45020003 */ bc1fl .L7F047928 -/* 07C44C 7F04791C 8E980008 */ lw $t8, 8($s4) -/* 07C450 7F047920 E636009C */ swc1 $f22, 0x9c($s1) -/* 07C454 7F047924 8E980008 */ lw $t8, 8($s4) -.L7F047928: -/* 07C458 7F047928 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07C45C 7F04792C C4228378 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07C460 7F047930 8F0F0008 */ lw $t7, 8($t8) -/* 07C464 7F047934 C7A40438 */ lwc1 $f4, 0x438($sp) -/* 07C468 7F047938 4602B03C */ c.lt.s $f22, $f2 -/* 07C46C 7F04793C 8DE8000C */ lw $t0, 0xc($t7) -/* 07C470 7F047940 45000004 */ bc1f .L7F047954 -/* 07C474 7F047944 8D100004 */ lw $s0, 4($t0) -/* 07C478 7F047948 C62800A0 */ lwc1 $f8, 0xa0($s1) -/* 07C47C 7F04794C 46044181 */ sub.s $f6, $f8, $f4 -/* 07C480 7F047950 46023383 */ div.s $f14, $f6, $f2 -.L7F047954: -/* 07C484 7F047954 4616703C */ c.lt.s $f14, $f22 -/* 07C488 7F047958 00000000 */ nop -/* 07C48C 7F04795C 45000002 */ bc1f .L7F047968 -/* 07C490 7F047960 00000000 */ nop -/* 07C494 7F047964 46147380 */ add.s $f14, $f14, $f20 -.L7F047968: -/* 07C498 7F047968 0FC15FAB */ jal sinf -/* 07C49C 7F04796C 46007306 */ mov.s $f12, $f14 -/* 07C4A0 7F047970 C60A0008 */ lwc1 $f10, 8($s0) -/* 07C4A4 7F047974 C6880014 */ lwc1 $f8, 0x14($s4) -/* 07C4A8 7F047978 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07C4AC 7F04797C 46085102 */ mul.s $f4, $f10, $f8 -/* 07C4B0 7F047980 C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07C4B4 7F047984 46040182 */ mul.s $f6, $f0, $f4 -/* 07C4B8 7F047988 00000000 */ nop -/* 07C4BC 7F04798C 460A3202 */ mul.s $f8, $f6, $f10 -/* 07C4C0 7F047990 E7A80460 */ swc1 $f8, 0x460($sp) -/* 07C4C4 7F047994 0FC15FAB */ jal sinf -/* 07C4C8 7F047998 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C4CC 7F04799C E7A0043C */ swc1 $f0, 0x43c($sp) -/* 07C4D0 7F0479A0 E7B60440 */ swc1 $f22, 0x440($sp) -/* 07C4D4 7F0479A4 0FC15FA8 */ jal cosf -/* 07C4D8 7F0479A8 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C4DC 7F0479AC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07C4E0 7F0479B0 44817000 */ mtc1 $at, $f14 -/* 07C4E4 7F0479B4 E7A00444 */ swc1 $f0, 0x444($sp) -/* 07C4E8 7F0479B8 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07C4EC 7F0479BC C4228378 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07C4F0 7F0479C0 C6240088 */ lwc1 $f4, 0x88($s1) -/* 07C4F4 7F0479C4 C7AA043C */ lwc1 $f10, 0x43c($sp) -/* 07C4F8 7F0479C8 C7AC0460 */ lwc1 $f12, 0x460($sp) -/* 07C4FC 7F0479CC 46022182 */ mul.s $f6, $f4, $f2 -/* 07C500 7F0479D0 C6240058 */ lwc1 $f4, 0x58($s1) -/* 07C504 7F0479D4 27B00468 */ addiu $s0, $sp, 0x468 -/* 07C508 7F0479D8 240B001F */ li $t3, 31 -/* 07C50C 7F0479DC 02002025 */ move $a0, $s0 -/* 07C510 7F0479E0 460A3202 */ mul.s $f8, $f6, $f10 -/* 07C514 7F0479E4 46082180 */ add.s $f6, $f4, $f8 -/* 07C518 7F0479E8 C7A40444 */ lwc1 $f4, 0x444($sp) -/* 07C51C 7F0479EC 460C2202 */ mul.s $f8, $f4, $f12 -/* 07C520 7F0479F0 46083181 */ sub.s $f6, $f6, $f8 -/* 07C524 7F0479F4 E7A60694 */ swc1 $f6, 0x694($sp) -/* 07C528 7F0479F8 C628005C */ lwc1 $f8, 0x5c($s1) -/* 07C52C 7F0479FC 44073000 */ mfc1 $a3, $f6 -/* 07C530 7F047A00 E7A80698 */ swc1 $f8, 0x698($sp) -/* 07C534 7F047A04 C6280088 */ lwc1 $f8, 0x88($s1) -/* 07C538 7F047A08 46024202 */ mul.s $f8, $f8, $f2 -/* 07C53C 7F047A0C 00000000 */ nop -/* 07C540 7F047A10 46044202 */ mul.s $f8, $f8, $f4 -/* 07C544 7F047A14 C6240060 */ lwc1 $f4, 0x60($s1) -/* 07C548 7F047A18 46082100 */ add.s $f4, $f4, $f8 -/* 07C54C 7F047A1C 460C5202 */ mul.s $f8, $f10, $f12 -/* 07C550 7F047A20 46044280 */ add.s $f10, $f8, $f4 -/* 07C554 7F047A24 E7AA069C */ swc1 $f10, 0x69c($sp) -/* 07C558 7F047A28 8E660010 */ lw $a2, 0x10($s3) -/* 07C55C 7F047A2C 8E650008 */ lw $a1, 8($s3) -/* 07C560 7F047A30 E7B60020 */ swc1 $f22, 0x20($sp) -/* 07C564 7F047A34 E7B60018 */ swc1 $f22, 0x18($sp) -/* 07C568 7F047A38 AFAB0014 */ sw $t3, 0x14($sp) -/* 07C56C 7F047A3C E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07C570 7F047A40 E7AE0024 */ swc1 $f14, 0x24($sp) -/* 07C574 7F047A44 0FC2C389 */ jal stanTestLineUnobstructed -/* 07C578 7F047A48 E7AE001C */ swc1 $f14, 0x1c($sp) -/* 07C57C 7F047A4C 104000FA */ beqz $v0, .L7F047E38 -/* 07C580 7F047A50 02002025 */ move $a0, $s0 -/* 07C584 7F047A54 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07C588 7F047A58 44814000 */ mtc1 $at, $f8 -/* 07C58C 7F047A5C 2409001F */ li $t1, 31 -/* 07C590 7F047A60 AFA90010 */ sw $t1, 0x10($sp) -/* 07C594 7F047A64 8FA50694 */ lw $a1, 0x694($sp) -/* 07C598 7F047A68 8FA6069C */ lw $a2, 0x69c($sp) -/* 07C59C 7F047A6C 3C074120 */ lui $a3, 0x4120 -/* 07C5A0 7F047A70 E7B60014 */ swc1 $f22, 0x14($sp) -/* 07C5A4 7F047A74 0FC2C62E */ jal stanTestVolume -/* 07C5A8 7F047A78 E7A80018 */ swc1 $f8, 0x18($sp) -/* 07C5AC 7F047A7C 044300EF */ bgezl $v0, .L7F047E3C -/* 07C5B0 7F047A80 C6260098 */ lwc1 $f6, 0x98($s1) -/* 07C5B4 7F047A84 8E790014 */ lw $t9, 0x14($s3) -/* 07C5B8 7F047A88 8FAA0468 */ lw $t2, 0x468($sp) -/* 07C5BC 7F047A8C 02202025 */ move $a0, $s1 -/* 07C5C0 7F047A90 AFB9044C */ sw $t9, 0x44c($sp) -/* 07C5C4 7F047A94 C6640008 */ lwc1 $f4, 8($s3) -/* 07C5C8 7F047A98 E7A40450 */ swc1 $f4, 0x450($sp) -/* 07C5CC 7F047A9C C666000C */ lwc1 $f6, 0xc($s3) -/* 07C5D0 7F047AA0 E7A60454 */ swc1 $f6, 0x454($sp) -/* 07C5D4 7F047AA4 C66A0010 */ lwc1 $f10, 0x10($s3) -/* 07C5D8 7F047AA8 E7AA0458 */ swc1 $f10, 0x458($sp) -/* 07C5DC 7F047AAC AE6A0014 */ sw $t2, 0x14($s3) -/* 07C5E0 7F047AB0 C7A20694 */ lwc1 $f2, 0x694($sp) -/* 07C5E4 7F047AB4 E6620008 */ swc1 $f2, 8($s3) -/* 07C5E8 7F047AB8 E6220058 */ swc1 $f2, 0x58($s1) -/* 07C5EC 7F047ABC C7A2069C */ lwc1 $f2, 0x69c($sp) -/* 07C5F0 7F047AC0 E6620010 */ swc1 $f2, 0x10($s3) -/* 07C5F4 7F047AC4 0FC10121 */ jal chrobjCollisionRelated -/* 07C5F8 7F047AC8 E6220060 */ swc1 $f2, 0x60($s1) -/* 07C5FC 7F047ACC 0FC15B28 */ jal setupUpdateObjectRoomPosition -/* 07C600 7F047AD0 02202025 */ move $a0, $s1 -/* 07C604 7F047AD4 0FC1122A */ jal sub_GAME_7F0448A8 -/* 07C608 7F047AD8 02602025 */ move $a0, $s3 -/* 07C60C 7F047ADC 10400092 */ beqz $v0, .L7F047D28 -/* 07C610 7F047AE0 00409025 */ move $s2, $v0 -/* 07C614 7F047AE4 8E8C0008 */ lw $t4, 8($s4) -/* 07C618 7F047AE8 C6280018 */ lwc1 $f8, 0x18($s1) -/* 07C61C 7F047AEC 02002025 */ move $a0, $s0 -/* 07C620 7F047AF0 8D8E0008 */ lw $t6, 8($t4) -/* 07C624 7F047AF4 8DCD0028 */ lw $t5, 0x28($t6) -/* 07C628 7F047AF8 8DA20004 */ lw $v0, 4($t5) -/* 07C62C 7F047AFC C4440004 */ lwc1 $f4, 4($v0) -/* 07C630 7F047B00 46044182 */ mul.s $f6, $f8, $f4 -/* 07C634 7F047B04 E7A60424 */ swc1 $f6, 0x424($sp) -/* 07C638 7F047B08 C62A0020 */ lwc1 $f10, 0x20($s1) -/* 07C63C 7F047B0C C4480004 */ lwc1 $f8, 4($v0) -/* 07C640 7F047B10 46085102 */ mul.s $f4, $f10, $f8 -/* 07C644 7F047B14 E7A4042C */ swc1 $f4, 0x42c($sp) -/* 07C648 7F047B18 C6260018 */ lwc1 $f6, 0x18($s1) -/* 07C64C 7F047B1C C44A0008 */ lwc1 $f10, 8($v0) -/* 07C650 7F047B20 460A3202 */ mul.s $f8, $f6, $f10 -/* 07C654 7F047B24 E7A80418 */ swc1 $f8, 0x418($sp) -/* 07C658 7F047B28 C6240020 */ lwc1 $f4, 0x20($s1) -/* 07C65C 7F047B2C C4460008 */ lwc1 $f6, 8($v0) -/* 07C660 7F047B30 46062282 */ mul.s $f10, $f4, $f6 -/* 07C664 7F047B34 E7AA0420 */ swc1 $f10, 0x420($sp) -/* 07C668 7F047B38 C6280038 */ lwc1 $f8, 0x38($s1) -/* 07C66C 7F047B3C C4440014 */ lwc1 $f4, 0x14($v0) -/* 07C670 7F047B40 46044182 */ mul.s $f6, $f8, $f4 -/* 07C674 7F047B44 E7A6040C */ swc1 $f6, 0x40c($sp) -/* 07C678 7F047B48 C62A0040 */ lwc1 $f10, 0x40($s1) -/* 07C67C 7F047B4C C4480014 */ lwc1 $f8, 0x14($v0) -/* 07C680 7F047B50 46085102 */ mul.s $f4, $f10, $f8 -/* 07C684 7F047B54 E7A40414 */ swc1 $f4, 0x414($sp) -/* 07C688 7F047B58 C6260038 */ lwc1 $f6, 0x38($s1) -/* 07C68C 7F047B5C C44A0018 */ lwc1 $f10, 0x18($v0) -/* 07C690 7F047B60 460A3202 */ mul.s $f8, $f6, $f10 -/* 07C694 7F047B64 E7A80400 */ swc1 $f8, 0x400($sp) -/* 07C698 7F047B68 C6240040 */ lwc1 $f4, 0x40($s1) -/* 07C69C 7F047B6C C4460018 */ lwc1 $f6, 0x18($v0) -/* 07C6A0 7F047B70 C7A8040C */ lwc1 $f8, 0x40c($sp) -/* 07C6A4 7F047B74 46062282 */ mul.s $f10, $f4, $f6 -/* 07C6A8 7F047B78 C7A40424 */ lwc1 $f4, 0x424($sp) -/* 07C6AC 7F047B7C E7AA0408 */ swc1 $f10, 0x408($sp) -/* 07C6B0 7F047B80 8E780014 */ lw $t8, 0x14($s3) -/* 07C6B4 7F047B84 AFB80468 */ sw $t8, 0x468($sp) -/* 07C6B8 7F047B88 C6600008 */ lwc1 $f0, 8($s3) -/* 07C6BC 7F047B8C C6620010 */ lwc1 $f2, 0x10($s3) -/* 07C6C0 7F047B90 46040180 */ add.s $f6, $f0, $f4 -/* 07C6C4 7F047B94 C7A40414 */ lwc1 $f4, 0x414($sp) -/* 07C6C8 7F047B98 44050000 */ mfc1 $a1, $f0 -/* 07C6CC 7F047B9C 44061000 */ mfc1 $a2, $f2 -/* 07C6D0 7F047BA0 46064280 */ add.s $f10, $f8, $f6 -/* 07C6D4 7F047BA4 C7A8042C */ lwc1 $f8, 0x42c($sp) -/* 07C6D8 7F047BA8 46081180 */ add.s $f6, $f2, $f8 -/* 07C6DC 7F047BAC 44075000 */ mfc1 $a3, $f10 -/* 07C6E0 7F047BB0 46062280 */ add.s $f10, $f4, $f6 -/* 07C6E4 7F047BB4 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 07C6E8 7F047BB8 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07C6EC 7F047BBC 10400059 */ beqz $v0, .L7F047D24 -/* 07C6F0 7F047BC0 C7A40424 */ lwc1 $f4, 0x424($sp) -/* 07C6F4 7F047BC4 C6600008 */ lwc1 $f0, 8($s3) -/* 07C6F8 7F047BC8 C7A8040C */ lwc1 $f8, 0x40c($sp) -/* 07C6FC 7F047BCC C6620010 */ lwc1 $f2, 0x10($s3) -/* 07C700 7F047BD0 46040180 */ add.s $f6, $f0, $f4 -/* 07C704 7F047BD4 C7A40414 */ lwc1 $f4, 0x414($sp) -/* 07C708 7F047BD8 02002025 */ move $a0, $s0 -/* 07C70C 7F047BDC 46064280 */ add.s $f10, $f8, $f6 -/* 07C710 7F047BE0 C7A6042C */ lwc1 $f6, 0x42c($sp) -/* 07C714 7F047BE4 44055000 */ mfc1 $a1, $f10 -/* 07C718 7F047BE8 46061280 */ add.s $f10, $f2, $f6 -/* 07C71C 7F047BEC 460A2180 */ add.s $f6, $f4, $f10 -/* 07C720 7F047BF0 C7AA0418 */ lwc1 $f10, 0x418($sp) -/* 07C724 7F047BF4 44063000 */ mfc1 $a2, $f6 -/* 07C728 7F047BF8 460A0180 */ add.s $f6, $f0, $f10 -/* 07C72C 7F047BFC 46064280 */ add.s $f10, $f8, $f6 -/* 07C730 7F047C00 C7A80420 */ lwc1 $f8, 0x420($sp) -/* 07C734 7F047C04 46081180 */ add.s $f6, $f2, $f8 -/* 07C738 7F047C08 44075000 */ mfc1 $a3, $f10 -/* 07C73C 7F047C0C 46062280 */ add.s $f10, $f4, $f6 -/* 07C740 7F047C10 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 07C744 7F047C14 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07C748 7F047C18 10400042 */ beqz $v0, .L7F047D24 -/* 07C74C 7F047C1C C7A40418 */ lwc1 $f4, 0x418($sp) -/* 07C750 7F047C20 C6680008 */ lwc1 $f8, 8($s3) -/* 07C754 7F047C24 C7A6040C */ lwc1 $f6, 0x40c($sp) -/* 07C758 7F047C28 02002025 */ move $a0, $s0 -/* 07C75C 7F047C2C 46044000 */ add.s $f0, $f8, $f4 -/* 07C760 7F047C30 C7A40420 */ lwc1 $f4, 0x420($sp) -/* 07C764 7F047C34 C6680010 */ lwc1 $f8, 0x10($s3) -/* 07C768 7F047C38 46003280 */ add.s $f10, $f6, $f0 -/* 07C76C 7F047C3C C7A60414 */ lwc1 $f6, 0x414($sp) -/* 07C770 7F047C40 46044080 */ add.s $f2, $f8, $f4 -/* 07C774 7F047C44 44055000 */ mfc1 $a1, $f10 -/* 07C778 7F047C48 C7A80400 */ lwc1 $f8, 0x400($sp) -/* 07C77C 7F047C4C 46023280 */ add.s $f10, $f6, $f2 -/* 07C780 7F047C50 C7A60408 */ lwc1 $f6, 0x408($sp) -/* 07C784 7F047C54 46004100 */ add.s $f4, $f8, $f0 -/* 07C788 7F047C58 44065000 */ mfc1 $a2, $f10 -/* 07C78C 7F047C5C 46023280 */ add.s $f10, $f6, $f2 -/* 07C790 7F047C60 44072000 */ mfc1 $a3, $f4 -/* 07C794 7F047C64 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 07C798 7F047C68 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07C79C 7F047C6C 1040002D */ beqz $v0, .L7F047D24 -/* 07C7A0 7F047C70 C7A40418 */ lwc1 $f4, 0x418($sp) -/* 07C7A4 7F047C74 C6600008 */ lwc1 $f0, 8($s3) -/* 07C7A8 7F047C78 C7A80400 */ lwc1 $f8, 0x400($sp) -/* 07C7AC 7F047C7C C6620010 */ lwc1 $f2, 0x10($s3) -/* 07C7B0 7F047C80 46040180 */ add.s $f6, $f0, $f4 -/* 07C7B4 7F047C84 C7A40408 */ lwc1 $f4, 0x408($sp) -/* 07C7B8 7F047C88 02002025 */ move $a0, $s0 -/* 07C7BC 7F047C8C 46064280 */ add.s $f10, $f8, $f6 -/* 07C7C0 7F047C90 C7A60420 */ lwc1 $f6, 0x420($sp) -/* 07C7C4 7F047C94 44055000 */ mfc1 $a1, $f10 -/* 07C7C8 7F047C98 46061280 */ add.s $f10, $f2, $f6 -/* 07C7CC 7F047C9C 460A2180 */ add.s $f6, $f4, $f10 -/* 07C7D0 7F047CA0 C7AA0424 */ lwc1 $f10, 0x424($sp) -/* 07C7D4 7F047CA4 44063000 */ mfc1 $a2, $f6 -/* 07C7D8 7F047CA8 460A0180 */ add.s $f6, $f0, $f10 -/* 07C7DC 7F047CAC 46064280 */ add.s $f10, $f8, $f6 -/* 07C7E0 7F047CB0 C7A8042C */ lwc1 $f8, 0x42c($sp) -/* 07C7E4 7F047CB4 46081180 */ add.s $f6, $f2, $f8 -/* 07C7E8 7F047CB8 44075000 */ mfc1 $a3, $f10 -/* 07C7EC 7F047CBC 46062280 */ add.s $f10, $f4, $f6 -/* 07C7F0 7F047CC0 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 07C7F4 7F047CC4 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07C7F8 7F047CC8 10400016 */ beqz $v0, .L7F047D24 -/* 07C7FC 7F047CCC C7A40424 */ lwc1 $f4, 0x424($sp) -/* 07C800 7F047CD0 C6680008 */ lwc1 $f8, 8($s3) -/* 07C804 7F047CD4 C7A60400 */ lwc1 $f6, 0x400($sp) -/* 07C808 7F047CD8 02002025 */ move $a0, $s0 -/* 07C80C 7F047CDC 46044000 */ add.s $f0, $f8, $f4 -/* 07C810 7F047CE0 C7A4042C */ lwc1 $f4, 0x42c($sp) -/* 07C814 7F047CE4 C6680010 */ lwc1 $f8, 0x10($s3) -/* 07C818 7F047CE8 46003280 */ add.s $f10, $f6, $f0 -/* 07C81C 7F047CEC C7A60408 */ lwc1 $f6, 0x408($sp) -/* 07C820 7F047CF0 46044080 */ add.s $f2, $f8, $f4 -/* 07C824 7F047CF4 44055000 */ mfc1 $a1, $f10 -/* 07C828 7F047CF8 C7A8040C */ lwc1 $f8, 0x40c($sp) -/* 07C82C 7F047CFC 46023280 */ add.s $f10, $f6, $f2 -/* 07C830 7F047D00 C7A60414 */ lwc1 $f6, 0x414($sp) -/* 07C834 7F047D04 46004100 */ add.s $f4, $f8, $f0 -/* 07C838 7F047D08 44065000 */ mfc1 $a2, $f10 -/* 07C83C 7F047D0C 46023280 */ add.s $f10, $f6, $f2 -/* 07C840 7F047D10 44072000 */ mfc1 $a3, $f4 -/* 07C844 7F047D14 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 07C848 7F047D18 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07C84C 7F047D1C 14400002 */ bnez $v0, .L7F047D28 -/* 07C850 7F047D20 00000000 */ nop -.L7F047D24: -/* 07C854 7F047D24 00009025 */ move $s2, $zero -.L7F047D28: -/* 07C858 7F047D28 12400023 */ beqz $s2, .L7F047DB8 -/* 07C85C 7F047D2C 02202025 */ move $a0, $s1 -/* 07C860 7F047D30 262F0058 */ addiu $t7, $s1, 0x58 -/* 07C864 7F047D34 AFAF0070 */ sw $t7, 0x70($sp) -/* 07C868 7F047D38 0FC112CE */ jal sub_GAME_7F044B38 -/* 07C86C 7F047D3C 2630007C */ addiu $s0, $s1, 0x7c -/* 07C870 7F047D40 02602025 */ move $a0, $s3 -/* 07C874 7F047D44 0FC100AD */ jal sub_GAME_7F0402B4 -/* 07C878 7F047D48 02002825 */ move $a1, $s0 -/* 07C87C 7F047D4C 0FC146F3 */ jal detonate_proxmine_In_range -/* 07C880 7F047D50 8FA40070 */ lw $a0, 0x70($sp) -/* 07C884 7F047D54 8FA80478 */ lw $t0, 0x478($sp) -/* 07C888 7F047D58 27A40450 */ addiu $a0, $sp, 0x450 -/* 07C88C 7F047D5C 27A50694 */ addiu $a1, $sp, 0x694 -/* 07C890 7F047D60 11000054 */ beqz $t0, .L7F047EB4 -/* 07C894 7F047D64 01003025 */ move $a2, $t0 -/* 07C898 7F047D68 0FC0BF54 */ jal chrlvIsArrivingLaterallyAtPos -/* 07C89C 7F047D6C 3C0742C8 */ lui $a3, 0x42c8 -/* 07C8A0 7F047D70 10400050 */ beqz $v0, .L7F047EB4 -/* 07C8A4 7F047D74 00000000 */ nop -/* 07C8A8 7F047D78 8E2B00A8 */ lw $t3, 0xa8($s1) -/* 07C8AC 7F047D7C 8E3900A4 */ lw $t9, 0xa4($s1) -/* 07C8B0 7F047D80 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 07C8B4 7F047D84 25690001 */ addiu $t1, $t3, 1 -/* 07C8B8 7F047D88 AE2900A8 */ sw $t1, 0xa8($s1) -/* 07C8BC 7F047D8C 8F2A0000 */ lw $t2, ($t9) -/* 07C8C0 7F047D90 00097080 */ sll $t6, $t1, 2 -/* 07C8C4 7F047D94 014E6821 */ addu $t5, $t2, $t6 -/* 07C8C8 7F047D98 8DB80000 */ lw $t8, ($t5) -/* 07C8CC 7F047D9C 07010045 */ bgez $t8, .L7F047EB4 -/* 07C8D0 7F047DA0 00000000 */ nop -/* 07C8D4 7F047DA4 44814000 */ mtc1 $at, $f8 -/* 07C8D8 7F047DA8 AE2000A4 */ sw $zero, 0xa4($s1) -/* 07C8DC 7F047DAC E6360094 */ swc1 $f22, 0x94($s1) -/* 07C8E0 7F047DB0 10000040 */ b .L7F047EB4 -/* 07C8E4 7F047DB4 E6280098 */ swc1 $f8, 0x98($s1) -.L7F047DB8: -/* 07C8E8 7F047DB8 C6240098 */ lwc1 $f4, 0x98($s1) -/* 07C8EC 7F047DBC 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 07C8F0 7F047DC0 4616203C */ c.lt.s $f4, $f22 -/* 07C8F4 7F047DC4 00000000 */ nop -/* 07C8F8 7F047DC8 45020006 */ bc1fl .L7F047DE4 -/* 07C8FC 7F047DCC E6360088 */ swc1 $f22, 0x88($s1) -/* 07C900 7F047DD0 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07C904 7F047DD4 44815000 */ mtc1 $at, $f10 -/* 07C908 7F047DD8 E6260094 */ swc1 $f6, 0x94($s1) -/* 07C90C 7F047DDC E62A0098 */ swc1 $f10, 0x98($s1) -/* 07C910 7F047DE0 E6360088 */ swc1 $f22, 0x88($s1) -.L7F047DE4: -/* 07C914 7F047DE4 C7A80438 */ lwc1 $f8, 0x438($sp) -/* 07C918 7F047DE8 02202025 */ move $a0, $s1 -/* 07C91C 7F047DEC E62800A0 */ swc1 $f8, 0xa0($s1) -/* 07C920 7F047DF0 C7A40434 */ lwc1 $f4, 0x434($sp) -/* 07C924 7F047DF4 E624009C */ swc1 $f4, 0x9c($s1) -/* 07C928 7F047DF8 8FAF044C */ lw $t7, 0x44c($sp) -/* 07C92C 7F047DFC AE6F0014 */ sw $t7, 0x14($s3) -/* 07C930 7F047E00 C7A20450 */ lwc1 $f2, 0x450($sp) -/* 07C934 7F047E04 E6620008 */ swc1 $f2, 8($s3) -/* 07C938 7F047E08 E6220058 */ swc1 $f2, 0x58($s1) -/* 07C93C 7F047E0C C7A20454 */ lwc1 $f2, 0x454($sp) -/* 07C940 7F047E10 E662000C */ swc1 $f2, 0xc($s3) -/* 07C944 7F047E14 E622005C */ swc1 $f2, 0x5c($s1) -/* 07C948 7F047E18 C7A20458 */ lwc1 $f2, 0x458($sp) -/* 07C94C 7F047E1C E6620010 */ swc1 $f2, 0x10($s3) -/* 07C950 7F047E20 0FC10121 */ jal chrobjCollisionRelated -/* 07C954 7F047E24 E6220060 */ swc1 $f2, 0x60($s1) -/* 07C958 7F047E28 0FC15B28 */ jal setupUpdateObjectRoomPosition -/* 07C95C 7F047E2C 02202025 */ move $a0, $s1 -/* 07C960 7F047E30 10000020 */ b .L7F047EB4 -/* 07C964 7F047E34 00000000 */ nop -.L7F047E38: -/* 07C968 7F047E38 C6260098 */ lwc1 $f6, 0x98($s1) -.L7F047E3C: -/* 07C96C 7F047E3C 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 07C970 7F047E40 4616303C */ c.lt.s $f6, $f22 -/* 07C974 7F047E44 00000000 */ nop -/* 07C978 7F047E48 45020006 */ bc1fl .L7F047E64 -/* 07C97C 7F047E4C E6360088 */ swc1 $f22, 0x88($s1) -/* 07C980 7F047E50 C62A0088 */ lwc1 $f10, 0x88($s1) -/* 07C984 7F047E54 44814000 */ mtc1 $at, $f8 -/* 07C988 7F047E58 E62A0094 */ swc1 $f10, 0x94($s1) -/* 07C98C 7F047E5C E6280098 */ swc1 $f8, 0x98($s1) -/* 07C990 7F047E60 E6360088 */ swc1 $f22, 0x88($s1) -.L7F047E64: -/* 07C994 7F047E64 C7A40438 */ lwc1 $f4, 0x438($sp) -/* 07C998 7F047E68 E62400A0 */ swc1 $f4, 0xa0($s1) -/* 07C99C 7F047E6C C7A60434 */ lwc1 $f6, 0x434($sp) -/* 07C9A0 7F047E70 10000010 */ b .L7F047EB4 -/* 07C9A4 7F047E74 E626009C */ swc1 $f6, 0x9c($s1) -/* 07C9A8 7F047E78 8E280008 */ lw $t0, 8($s1) -.L7F047E7C: -/* 07C9AC 7F047E7C 00085880 */ sll $t3, $t0, 2 -/* 07C9B0 7F047E80 0561000C */ bgez $t3, .L7F047EB4 -/* 07C9B4 7F047E84 00000000 */ nop -/* 07C9B8 7F047E88 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 07C9BC 7F047E8C 0FC16A8C */ jal atan2f -/* 07C9C0 7F047E90 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 07C9C4 7F047E94 8E290008 */ lw $t1, 8($s1) -/* 07C9C8 7F047E98 3C01DFFF */ lui $at, (0xDFFFFFFF >> 16) # lui $at, 0xdfff -/* 07C9CC 7F047E9C 3421FFFF */ ori $at, (0xDFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 07C9D0 7F047EA0 0121C824 */ and $t9, $t1, $at -/* 07C9D4 7F047EA4 E62000A0 */ swc1 $f0, 0xa0($s1) -/* 07C9D8 7F047EA8 AE390008 */ sw $t9, 8($s1) -/* 07C9DC 7F047EAC 0FC112CE */ jal sub_GAME_7F044B38 -/* 07C9E0 7F047EB0 02202025 */ move $a0, $s1 -.L7F047EB4: -/* 07C9E4 7F047EB4 100000DE */ b .L7F048230 -/* 07C9E8 7F047EB8 92220003 */ lbu $v0, 3($s1) -.L7F047EBC: -/* 07C9EC 7F047EBC 24010028 */ li $at, 40 -/* 07C9F0 7F047EC0 144100DA */ bne $v0, $at, .L7F04822C -/* 07C9F4 7F047EC4 02202025 */ move $a0, $s1 -/* 07C9F8 7F047EC8 0FC0D521 */ jal ai -/* 07C9FC 7F047ECC 24050001 */ li $a1, 1 -/* 07CA00 7F047ED0 8E300014 */ lw $s0, 0x14($s1) -/* 07CA04 7F047ED4 26250058 */ addiu $a1, $s1, 0x58 -/* 07CA08 7F047ED8 8E0C0020 */ lw $t4, 0x20($s0) -/* 07CA0C 7F047EDC 02002025 */ move $a0, $s0 -/* 07CA10 7F047EE0 51800065 */ beql $t4, $zero, .L7F048078 -/* 07CA14 7F047EE4 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07CA18 7F047EE8 0FC1B303 */ jal setsuboffset -/* 07CA1C 7F047EEC AFA50070 */ sw $a1, 0x70($sp) -/* 07CA20 7F047EF0 8E300014 */ lw $s0, 0x14($s1) -/* 07CA24 7F047EF4 3C0E8003 */ lui $t6, %hi(animation_table_ptrs2+4) -/* 07CA28 7F047EF8 8DCEA050 */ lw $t6, %lo(animation_table_ptrs2+4)($t6) -/* 07CA2C 7F047EFC 8E0A0020 */ lw $t2, 0x20($s0) -/* 07CA30 7F047F00 3C054127 */ lui $a1, (0x4127020C >> 16) # lui $a1, 0x4127 -/* 07CA34 7F047F04 02002025 */ move $a0, $s0 -/* 07CA38 7F047F08 154E0009 */ bne $t2, $t6, .L7F047F30 -/* 07CA3C 7F047F0C 00000000 */ nop -/* 07CA40 7F047F10 0FC1B3A1 */ jal sub_GAME_7F06CE84 -/* 07CA44 7F047F14 34A5020C */ ori $a1, (0x4127020C & 0xFFFF) # ori $a1, $a1, 0x20c -/* 07CA48 7F047F18 3C054049 */ lui $a1, (0x40490FDB >> 16) # lui $a1, 0x4049 -/* 07CA4C 7F047F1C 34A50FDB */ ori $a1, (0x40490FDB & 0xFFFF) # ori $a1, $a1, 0xfdb -/* 07CA50 7F047F20 0FC1B34F */ jal setsubroty -/* 07CA54 7F047F24 8E240014 */ lw $a0, 0x14($s1) -/* 07CA58 7F047F28 10000024 */ b .L7F047FBC -/* 07CA5C 7F047F2C 00000000 */ nop -.L7F047F30: -/* 07CA60 7F047F30 0C001A57 */ jal bossGetStageNum -/* 07CA64 7F047F34 00000000 */ nop -/* 07CA68 7F047F38 24010016 */ li $at, 22 -/* 07CA6C 7F047F3C 1441000A */ bne $v0, $at, .L7F047F68 -/* 07CA70 7F047F40 3C053F85 */ lui $a1, (0x3F859B3D >> 16) # lui $a1, 0x3f85 -/* 07CA74 7F047F44 8E240014 */ lw $a0, 0x14($s1) -/* 07CA78 7F047F48 0FC1B3A1 */ jal sub_GAME_7F06CE84 -/* 07CA7C 7F047F4C 34A59B3D */ ori $a1, (0x3F859B3D & 0xFFFF) # ori $a1, $a1, 0x9b3d -/* 07CA80 7F047F50 3C054016 */ lui $a1, (0x4016CBE4 >> 16) # lui $a1, 0x4016 -/* 07CA84 7F047F54 34A5CBE4 */ ori $a1, (0x4016CBE4 & 0xFFFF) # ori $a1, $a1, 0xcbe4 -/* 07CA88 7F047F58 0FC1B34F */ jal setsubroty -/* 07CA8C 7F047F5C 8E240014 */ lw $a0, 0x14($s1) -/* 07CA90 7F047F60 10000016 */ b .L7F047FBC -/* 07CA94 7F047F64 00000000 */ nop -.L7F047F68: -/* 07CA98 7F047F68 0C001A57 */ jal bossGetStageNum -/* 07CA9C 7F047F6C 00000000 */ nop -/* 07CAA0 7F047F70 2401001A */ li $at, 26 -/* 07CAA4 7F047F74 1441000B */ bne $v0, $at, .L7F047FA4 -/* 07CAA8 7F047F78 3C053F85 */ lui $a1, 0x3f85 -/* 07CAAC 7F047F7C 3C053F85 */ lui $a1, (0x3F859B3D >> 16) # lui $a1, 0x3f85 -/* 07CAB0 7F047F80 34A59B3D */ ori $a1, (0x3F859B3D & 0xFFFF) # ori $a1, $a1, 0x9b3d -/* 07CAB4 7F047F84 0FC1B3A1 */ jal sub_GAME_7F06CE84 -/* 07CAB8 7F047F88 8E240014 */ lw $a0, 0x14($s1) -/* 07CABC 7F047F8C 3C05407B */ lui $a1, (0x407B9B3D >> 16) # lui $a1, 0x407b -/* 07CAC0 7F047F90 34A553D1 */ ori $a1, (0x407B53D1 & 0xFFFF) # ori $a1, $a1, 0x53d1 -/* 07CAC4 7F047F94 0FC1B34F */ jal setsubroty -/* 07CAC8 7F047F98 8E240014 */ lw $a0, 0x14($s1) -/* 07CACC 7F047F9C 10000007 */ b .L7F047FBC -/* 07CAD0 7F047FA0 00000000 */ nop -.L7F047FA4: -/* 07CAD4 7F047FA4 8E240014 */ lw $a0, 0x14($s1) -/* 07CAD8 7F047FA8 0FC1B3A1 */ jal sub_GAME_7F06CE84 -/* 07CADC 7F047FAC 34A59B3D */ ori $a1, (0x407B9B3D & 0xFFFF) # ori $a1, $a1, 0x9b3d -/* 07CAE0 7F047FB0 4405B000 */ mfc1 $a1, $f22 -/* 07CAE4 7F047FB4 0FC1B34F */ jal setsubroty -/* 07CAE8 7F047FB8 8E240014 */ lw $a0, 0x14($s1) -.L7F047FBC: -/* 07CAEC 7F047FBC 3C058005 */ lui $a1, %hi(g_ClockTimer) -/* 07CAF0 7F047FC0 8CA58374 */ lw $a1, %lo(g_ClockTimer)($a1) -/* 07CAF4 7F047FC4 8E240014 */ lw $a0, 0x14($s1) -/* 07CAF8 7F047FC8 0FC1C2BB */ jal modelTickAnimQuarterSpeed -/* 07CAFC 7F047FCC 24060001 */ li $a2, 1 -/* 07CB00 7F047FD0 0FC1B5AC */ jal subcalcpos -/* 07CB04 7F047FD4 8E240014 */ lw $a0, 0x14($s1) -/* 07CB08 7F047FD8 8E240014 */ lw $a0, 0x14($s1) -/* 07CB0C 7F047FDC 0FC1B2E6 */ jal getsuboffset -/* 07CB10 7F047FE0 8FA50070 */ lw $a1, 0x70($sp) -/* 07CB14 7F047FE4 C62A0058 */ lwc1 $f10, 0x58($s1) -/* 07CB18 7F047FE8 3C058007 */ lui $a1, %hi(g_CurrentSetup+0) -/* 07CB1C 7F047FEC 24A55D00 */ addiu $a1, %lo(g_CurrentSetup+0) # addiu $a1, $a1, 0x5d00 -/* 07CB20 7F047FF0 E66A0008 */ swc1 $f10, 8($s3) -/* 07CB24 7F047FF4 C6280060 */ lwc1 $f8, 0x60($s1) -/* 07CB28 7F047FF8 E6680010 */ swc1 $f8, 0x10($s3) -/* 07CB2C 7F047FFC 86220006 */ lh $v0, 6($s1) -/* 07CB30 7F048000 28412710 */ slti $at, $v0, 0x2710 -/* 07CB34 7F048004 1020000B */ beqz $at, .L7F048034 -/* 07CB38 7F048008 00027900 */ sll $t7, $v0, 4 -/* 07CB3C 7F04800C 00026880 */ sll $t5, $v0, 2 -/* 07CB40 7F048010 3C058007 */ lui $a1, %hi(g_CurrentSetup+0) -/* 07CB44 7F048014 01A26823 */ subu $t5, $t5, $v0 -/* 07CB48 7F048018 24A55D00 */ addiu $a1, %lo(g_CurrentSetup+0) # addiu $a1, $a1, 0x5d00 -/* 07CB4C 7F04801C 000D6880 */ sll $t5, $t5, 2 -/* 07CB50 7F048020 8CB80018 */ lw $t8, 0x18($a1) -/* 07CB54 7F048024 01A26823 */ subu $t5, $t5, $v0 -/* 07CB58 7F048028 000D6880 */ sll $t5, $t5, 2 -/* 07CB5C 7F04802C 10000008 */ b .L7F048050 -/* 07CB60 7F048030 01B81821 */ addu $v1, $t5, $t8 -.L7F048034: -/* 07CB64 7F048034 8CA8001C */ lw $t0, 0x1c($a1) -/* 07CB68 7F048038 01E27821 */ addu $t7, $t7, $v0 -/* 07CB6C 7F04803C 000F7880 */ sll $t7, $t7, 2 -/* 07CB70 7F048040 3C01FFF5 */ lui $at, (0xFFF59FC0 >> 16) # lui $at, 0xfff5 -/* 07CB74 7F048044 34219FC0 */ ori $at, (0xFFF59FC0 & 0xFFFF) # ori $at, $at, 0x9fc0 -/* 07CB78 7F048048 01E81821 */ addu $v1, $t7, $t0 -/* 07CB7C 7F04804C 00611821 */ addu $v1, $v1, $at -.L7F048050: -/* 07CB80 7F048050 C624005C */ lwc1 $f4, 0x5c($s1) -/* 07CB84 7F048054 C4660004 */ lwc1 $f6, 4($v1) -/* 07CB88 7F048058 46062280 */ add.s $f10, $f4, $f6 -/* 07CB8C 7F04805C E66A000C */ swc1 $f10, 0xc($s3) -/* 07CB90 7F048060 C668000C */ lwc1 $f8, 0xc($s3) -/* 07CB94 7F048064 8E240014 */ lw $a0, 0x14($s1) -/* 07CB98 7F048068 E628005C */ swc1 $f8, 0x5c($s1) -/* 07CB9C 7F04806C 0FC1B303 */ jal setsuboffset -/* 07CBA0 7F048070 8FA50070 */ lw $a1, 0x70($sp) -/* 07CBA4 7F048074 C62C00A0 */ lwc1 $f12, 0xa0($s1) -.L7F048078: -/* 07CBA8 7F048078 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07CBAC 7F04807C 460CB03E */ c.le.s $f22, $f12 -/* 07CBB0 7F048080 00000000 */ nop -/* 07CBB4 7F048084 45020016 */ bc1fl .L7F0480E0 -/* 07CBB8 7F048088 C6200094 */ lwc1 $f0, 0x94($s1) -/* 07CBBC 7F04808C C4228378 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07CBC0 7F048090 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07CBC4 7F048094 4602603E */ c.le.s $f12, $f2 -/* 07CBC8 7F048098 00000000 */ nop -/* 07CBCC 7F04809C 45020006 */ bc1fl .L7F0480B8 -/* 07CBD0 7F0480A0 C62E0098 */ lwc1 $f14, 0x98($s1) -/* 07CBD4 7F0480A4 C624009C */ lwc1 $f4, 0x9c($s1) -/* 07CBD8 7F0480A8 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07CBDC 7F0480AC 10000008 */ b .L7F0480D0 -/* 07CBE0 7F0480B0 E6240098 */ swc1 $f4, 0x98($s1) -/* 07CBE4 7F0480B4 C62E0098 */ lwc1 $f14, 0x98($s1) -.L7F0480B8: -/* 07CBE8 7F0480B8 C626009C */ lwc1 $f6, 0x9c($s1) -/* 07CBEC 7F0480BC 460E3281 */ sub.s $f10, $f6, $f14 -/* 07CBF0 7F0480C0 46025202 */ mul.s $f8, $f10, $f2 -/* 07CBF4 7F0480C4 460C4103 */ div.s $f4, $f8, $f12 -/* 07CBF8 7F0480C8 46047180 */ add.s $f6, $f14, $f4 -/* 07CBFC 7F0480CC E6260098 */ swc1 $f6, 0x98($s1) -.L7F0480D0: -/* 07CC00 7F0480D0 C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07CC04 7F0480D4 460A6201 */ sub.s $f8, $f12, $f10 -/* 07CC08 7F0480D8 E62800A0 */ swc1 $f8, 0xa0($s1) -/* 07CC0C 7F0480DC C6200094 */ lwc1 $f0, 0x94($s1) -.L7F0480E0: -/* 07CC10 7F0480E0 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07CC14 7F0480E4 4600B03E */ c.le.s $f22, $f0 -/* 07CC18 7F0480E8 00000000 */ nop -/* 07CC1C 7F0480EC 45020016 */ bc1fl .L7F048148 -/* 07CC20 7F0480F0 8E2B000C */ lw $t3, 0xc($s1) -/* 07CC24 7F0480F4 C4228378 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07CC28 7F0480F8 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07CC2C 7F0480FC 4602003E */ c.le.s $f0, $f2 -/* 07CC30 7F048100 00000000 */ nop -/* 07CC34 7F048104 45020006 */ bc1fl .L7F048120 -/* 07CC38 7F048108 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07CC3C 7F04810C C6240090 */ lwc1 $f4, 0x90($s1) -/* 07CC40 7F048110 C6200094 */ lwc1 $f0, 0x94($s1) -/* 07CC44 7F048114 10000008 */ b .L7F048138 -/* 07CC48 7F048118 E624008C */ swc1 $f4, 0x8c($s1) -/* 07CC4C 7F04811C C62C008C */ lwc1 $f12, 0x8c($s1) -.L7F048120: -/* 07CC50 7F048120 C6260090 */ lwc1 $f6, 0x90($s1) -/* 07CC54 7F048124 460C3281 */ sub.s $f10, $f6, $f12 -/* 07CC58 7F048128 46025202 */ mul.s $f8, $f10, $f2 -/* 07CC5C 7F04812C 46004103 */ div.s $f4, $f8, $f0 -/* 07CC60 7F048130 46046180 */ add.s $f6, $f12, $f4 -/* 07CC64 7F048134 E626008C */ swc1 $f6, 0x8c($s1) -.L7F048138: -/* 07CC68 7F048138 C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07CC6C 7F04813C 460A0201 */ sub.s $f8, $f0, $f10 -/* 07CC70 7F048140 E6280094 */ swc1 $f8, 0x94($s1) -/* 07CC74 7F048144 8E2B000C */ lw $t3, 0xc($s1) -.L7F048148: -/* 07CC78 7F048148 00008025 */ move $s0, $zero -/* 07CC7C 7F04814C 000B4B00 */ sll $t1, $t3, 0xc -/* 07CC80 7F048150 05200014 */ bltz $t1, .L7F0481A4 -/* 07CC84 7F048154 00000000 */ nop -/* 07CC88 7F048158 0FC13BCD */ jal objIsHealthy -/* 07CC8C 7F04815C 02202025 */ move $a0, $s1 -/* 07CC90 7F048160 10400010 */ beqz $v0, .L7F0481A4 -/* 07CC94 7F048164 00000000 */ nop -/* 07CC98 7F048168 C624008C */ lwc1 $f4, 0x8c($s1) -/* 07CC9C 7F04816C 4604B032 */ c.eq.s $f22, $f4 -/* 07CCA0 7F048170 00000000 */ nop -/* 07CCA4 7F048174 4501000B */ bc1t .L7F0481A4 -/* 07CCA8 7F048178 00000000 */ nop -/* 07CCAC 7F04817C 8E390008 */ lw $t9, 8($s1) -/* 07CCB0 7F048180 3C05459C */ lui $a1, (0x459C4000 >> 16) # lui $a1, 0x459c -/* 07CCB4 7F048184 34A54000 */ ori $a1, (0x459C4000 & 0xFFFF) # ori $a1, $a1, 0x4000 -/* 07CCB8 7F048188 00196080 */ sll $t4, $t9, 2 -/* 07CCBC 7F04818C 05800005 */ bltz $t4, .L7F0481A4 -/* 07CCC0 7F048190 26240058 */ addiu $a0, $s1, 0x58 -/* 07CCC4 7F048194 3C0645BB */ lui $a2, (0x45BB8000 >> 16) # lui $a2, 0x45bb -/* 07CCC8 7F048198 0FC14E25 */ jal sub_GAME_7F053894 -/* 07CCCC 7F04819C 34C68000 */ ori $a2, (0x45BB8000 & 0xFFFF) # ori $a2, $a2, 0x8000 -/* 07CCD0 7F0481A0 00408025 */ move $s0, $v0 -.L7F0481A4: -/* 07CCD4 7F0481A4 5A000019 */ blezl $s0, .L7F04820C -/* 07CCD8 7F0481A8 8E2400B0 */ lw $a0, 0xb0($s1) -/* 07CCDC 7F0481AC 8E2400B0 */ lw $a0, 0xb0($s1) -/* 07CCE0 7F0481B0 10800005 */ beqz $a0, .L7F0481C8 -/* 07CCE4 7F0481B4 00000000 */ nop -/* 07CCE8 7F0481B8 0C00237C */ jal sndGetPlayingState -/* 07CCEC 7F0481BC 00000000 */ nop -/* 07CCF0 7F0481C0 5440000A */ bnezl $v0, .L7F0481EC -/* 07CCF4 7F0481C4 8E2400B0 */ lw $a0, 0xb0($s1) -.L7F0481C8: -/* 07CCF8 7F0481C8 0FC2FF01 */ jal lvlGetControlsLockedFlag -/* 07CCFC 7F0481CC 00000000 */ nop -/* 07CD00 7F0481D0 14400005 */ bnez $v0, .L7F0481E8 -/* 07CD04 7F0481D4 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 07CD08 7F0481D8 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07CD0C 7F0481DC 2405003A */ li $a1, 58 -/* 07CD10 7F0481E0 0C002382 */ jal sndPlaySfx -/* 07CD14 7F0481E4 262600B0 */ addiu $a2, $s1, 0xb0 -.L7F0481E8: -/* 07CD18 7F0481E8 8E2400B0 */ lw $a0, 0xb0($s1) -.L7F0481EC: -/* 07CD1C 7F0481EC 24050008 */ li $a1, 8 -/* 07CD20 7F0481F0 5080000F */ beql $a0, $zero, .L7F048230 -/* 07CD24 7F0481F4 92220003 */ lbu $v0, 3($s1) -/* 07CD28 7F0481F8 0C002461 */ jal sndCreatePostEvent -/* 07CD2C 7F0481FC 02003025 */ move $a2, $s0 -/* 07CD30 7F048200 1000000B */ b .L7F048230 -/* 07CD34 7F048204 92220003 */ lbu $v0, 3($s1) -/* 07CD38 7F048208 8E2400B0 */ lw $a0, 0xb0($s1) -.L7F04820C: -/* 07CD3C 7F04820C 50800008 */ beql $a0, $zero, .L7F048230 -/* 07CD40 7F048210 92220003 */ lbu $v0, 3($s1) -/* 07CD44 7F048214 0C00237C */ jal sndGetPlayingState -/* 07CD48 7F048218 00000000 */ nop -/* 07CD4C 7F04821C 50400004 */ beql $v0, $zero, .L7F048230 -/* 07CD50 7F048220 92220003 */ lbu $v0, 3($s1) -/* 07CD54 7F048224 0C002408 */ jal sndDeactivate -/* 07CD58 7F048228 8E2400B0 */ lw $a0, 0xb0($s1) -.L7F04822C: -/* 07CD5C 7F04822C 92220003 */ lbu $v0, 3($s1) -.L7F048230: -/* 07CD60 7F048230 3C018005 */ lui $at, %hi(D_80052B64) -/* 07CD64 7F048234 C4342B64 */ lwc1 $f20, %lo(D_80052B64)($at) -/* 07CD68 7F048238 2401002F */ li $at, 47 -/* 07CD6C 7F04823C 54410020 */ bnel $v0, $at, .L7F0482C0 -/* 07CD70 7F048240 24010001 */ li $at, 1 -/* 07CD74 7F048244 8E700004 */ lw $s0, 4($s3) -/* 07CD78 7F048248 26240058 */ addiu $a0, $s1, 0x58 -/* 07CD7C 7F04824C 8E0A0080 */ lw $t2, 0x80($s0) -/* 07CD80 7F048250 8E0E0084 */ lw $t6, 0x84($s0) -/* 07CD84 7F048254 8E070090 */ lw $a3, 0x90($s0) -/* 07CD88 7F048258 448A3000 */ mtc1 $t2, $f6 -/* 07CD8C 7F04825C 448E5000 */ mtc1 $t6, $f10 -/* 07CD90 7F048260 468031A0 */ cvt.s.w $f6, $f6 -/* 07CD94 7F048264 468052A0 */ cvt.s.w $f10, $f10 -/* 07CD98 7F048268 44053000 */ mfc1 $a1, $f6 -/* 07CD9C 7F04826C 44065000 */ mfc1 $a2, $f10 -/* 07CDA0 7F048270 0FC11477 */ jal glassCalculateOpacity -/* 07CDA4 7F048274 00000000 */ nop -/* 07CDA8 7F048278 8E04008C */ lw $a0, 0x8c($s0) -/* 07CDAC 7F04827C AE020088 */ sw $v0, 0x88($s0) -/* 07CDB0 7F048280 8FAD0674 */ lw $t5, 0x674($sp) -/* 07CDB4 7F048284 0480000B */ bltz $a0, .L7F0482B4 -/* 07CDB8 7F048288 24010001 */ li $at, 1 -/* 07CDBC 7F04828C 15A10009 */ bne $t5, $at, .L7F0482B4 -/* 07CDC0 7F048290 240100FF */ li $at, 255 -/* 07CDC4 7F048294 14410005 */ bne $v0, $at, .L7F0482AC -/* 07CDC8 7F048298 00000000 */ nop -/* 07CDCC 7F04829C 0FC2E76F */ jal bgToggleDataPortalsContrlBytes1Bit1 -/* 07CDD0 7F0482A0 00002825 */ move $a1, $zero -/* 07CDD4 7F0482A4 10000003 */ b .L7F0482B4 -/* 07CDD8 7F0482A8 00000000 */ nop -.L7F0482AC: -/* 07CDDC 7F0482AC 0FC2E76F */ jal bgToggleDataPortalsContrlBytes1Bit1 -/* 07CDE0 7F0482B0 24050001 */ li $a1, 1 -.L7F0482B4: -/* 07CDE4 7F0482B4 1000003B */ b .L7F0483A4 -/* 07CDE8 7F0482B8 AFA00670 */ sw $zero, 0x670($sp) -/* 07CDEC 7F0482BC 24010001 */ li $at, 1 -.L7F0482C0: -/* 07CDF0 7F0482C0 54410039 */ bnel $v0, $at, .L7F0483A8 -/* 07CDF4 7F0482C4 922F0003 */ lbu $t7, 3($s1) -/* 07CDF8 7F0482C8 962F0098 */ lhu $t7, 0x98($s1) -/* 07CDFC 7F0482CC 31E80002 */ andi $t0, $t7, 2 -/* 07CE00 7F0482D0 51000035 */ beql $t0, $zero, .L7F0483A8 -/* 07CE04 7F0482D4 922F0003 */ lbu $t7, 3($s1) -/* 07CE08 7F0482D8 8E700004 */ lw $s0, 4($s3) -/* 07CE0C 7F0482DC 4407B000 */ mfc1 $a3, $f22 -/* 07CE10 7F0482E0 24120001 */ li $s2, 1 -/* 07CE14 7F0482E4 8E0B00C0 */ lw $t3, 0xc0($s0) -/* 07CE18 7F0482E8 8E0900C4 */ lw $t1, 0xc4($s0) -/* 07CE1C 7F0482EC 26240058 */ addiu $a0, $s1, 0x58 -/* 07CE20 7F0482F0 448B4000 */ mtc1 $t3, $f8 -/* 07CE24 7F0482F4 44892000 */ mtc1 $t1, $f4 -/* 07CE28 7F0482F8 46804220 */ cvt.s.w $f8, $f8 -/* 07CE2C 7F0482FC 46802120 */ cvt.s.w $f4, $f4 -/* 07CE30 7F048300 44054000 */ mfc1 $a1, $f8 -/* 07CE34 7F048304 44062000 */ mfc1 $a2, $f4 -/* 07CE38 7F048308 0FC11477 */ jal glassCalculateOpacity -/* 07CE3C 7F04830C 00000000 */ nop -/* 07CE40 7F048310 A60200BE */ sh $v0, 0xbe($s0) -/* 07CE44 7F048314 8FB90674 */ lw $t9, 0x674($sp) -/* 07CE48 7F048318 24010001 */ li $at, 1 -/* 07CE4C 7F04831C 57210022 */ bnel $t9, $at, .L7F0483A8 -/* 07CE50 7F048320 922F0003 */ lbu $t7, 3($s1) -/* 07CE54 7F048324 860C00BE */ lh $t4, 0xbe($s0) -/* 07CE58 7F048328 240100FF */ li $at, 255 -/* 07CE5C 7F04832C 55810007 */ bnel $t4, $at, .L7F04834C -/* 07CE60 7F048330 00009025 */ move $s2, $zero -/* 07CE64 7F048334 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07CE68 7F048338 4606B03C */ c.lt.s $f22, $f6 -/* 07CE6C 7F04833C 00000000 */ nop -/* 07CE70 7F048340 45020003 */ bc1fl .L7F048350 -/* 07CE74 7F048344 8E820008 */ lw $v0, 8($s4) -/* 07CE78 7F048348 00009025 */ move $s2, $zero -.L7F04834C: -/* 07CE7C 7F04834C 8E820008 */ lw $v0, 8($s4) -.L7F048350: -/* 07CE80 7F048350 3C0A8004 */ lui $t2, %hi(skeleton_door) -/* 07CE84 7F048354 254AA1DC */ addiu $t2, %lo(skeleton_door) # addiu $t2, $t2, -0x5e24 -/* 07CE88 7F048358 8C4E0004 */ lw $t6, 4($v0) -/* 07CE8C 7F04835C 154E0009 */ bne $t2, $t6, .L7F048384 -/* 07CE90 7F048360 00000000 */ nop -/* 07CE94 7F048364 8C4D0008 */ lw $t5, 8($v0) -/* 07CE98 7F048368 02802025 */ move $a0, $s4 -/* 07CE9C 7F04836C 0FC1B1E7 */ jal modelGetNodeRwData -/* 07CEA0 7F048370 8DA50004 */ lw $a1, 4($t5) -/* 07CEA4 7F048374 8C580000 */ lw $t8, ($v0) -/* 07CEA8 7F048378 17000002 */ bnez $t8, .L7F048384 -/* 07CEAC 7F04837C 00000000 */ nop -/* 07CEB0 7F048380 00009025 */ move $s2, $zero -.L7F048384: -/* 07CEB4 7F048384 12400005 */ beqz $s2, .L7F04839C -/* 07CEB8 7F048388 00000000 */ nop -/* 07CEBC 7F04838C 0FC14D71 */ jal doorDeactivatePortal -/* 07CEC0 7F048390 02002025 */ move $a0, $s0 -/* 07CEC4 7F048394 10000004 */ b .L7F0483A8 -/* 07CEC8 7F048398 922F0003 */ lbu $t7, 3($s1) -.L7F04839C: -/* 07CECC 7F04839C 0FC14D66 */ jal doorActivatePortal -/* 07CED0 7F0483A0 02002025 */ move $a0, $s0 -.L7F0483A4: -/* 07CED4 7F0483A4 922F0003 */ lbu $t7, 3($s1) -.L7F0483A8: -/* 07CED8 7F0483A8 2410002D */ li $s0, 45 -/* 07CEDC 7F0483AC 560F0008 */ bnel $s0, $t7, .L7F0483D0 -/* 07CEE0 7F0483B0 8E23000C */ lw $v1, 0xc($s1) -/* 07CEE4 7F0483B4 0FC1F3A1 */ jal get_ptr_for_players_tank -/* 07CEE8 7F0483B8 00000000 */ nop -/* 07CEEC 7F0483BC 54530004 */ bnel $v0, $s3, .L7F0483D0 -/* 07CEF0 7F0483C0 8E23000C */ lw $v1, 0xc($s1) -/* 07CEF4 7F0483C4 10000019 */ b .L7F04842C -/* 07CEF8 7F0483C8 24030001 */ li $v1, 1 -/* 07CEFC 7F0483CC 8E23000C */ lw $v1, 0xc($s1) -.L7F0483D0: -/* 07CF00 7F0483D0 00034140 */ sll $t0, $v1, 5 -/* 07CF04 7F0483D4 05030004 */ bgezl $t0, .L7F0483E8 -/* 07CF08 7F0483D8 8E2B0064 */ lw $t3, 0x64($s1) -/* 07CF0C 7F0483DC 10000013 */ b .L7F04842C -/* 07CF10 7F0483E0 24030001 */ li $v1, 1 -/* 07CF14 7F0483E4 8E2B0064 */ lw $t3, 0x64($s1) -.L7F0483E8: -/* 07CF18 7F0483E8 0003CB00 */ sll $t9, $v1, 0xc -/* 07CF1C 7F0483EC 00001825 */ move $v1, $zero -/* 07CF20 7F0483F0 31690800 */ andi $t1, $t3, 0x800 -/* 07CF24 7F0483F4 1520000D */ bnez $t1, .L7F04842C -/* 07CF28 7F0483F8 00000000 */ nop -/* 07CF2C 7F0483FC 0720000B */ bltz $t9, .L7F04842C -/* 07CF30 7F048400 02802025 */ move $a0, $s4 -/* 07CF34 7F048404 262C0058 */ addiu $t4, $s1, 0x58 -/* 07CF38 7F048408 0FC1B403 */ jal getinstsize -/* 07CF3C 7F04840C AFAC0070 */ sw $t4, 0x70($sp) -/* 07CF40 7F048410 44060000 */ mfc1 $a2, $f0 -/* 07CF44 7F048414 02602025 */ move $a0, $s3 -/* 07CF48 7F048418 8FA50070 */ lw $a1, 0x70($sp) -/* 07CF4C 7F04841C 0FC1535B */ jal sub_GAME_7F054D6C -/* 07CF50 7F048420 8FA70670 */ lw $a3, 0x670($sp) -/* 07CF54 7F048424 10000001 */ b .L7F04842C -/* 07CF58 7F048428 00401825 */ move $v1, $v0 -.L7F04842C: -/* 07CF5C 7F04842C 1060037A */ beqz $v1, .L7F049218 -/* 07CF60 7F048430 8FAA0678 */ lw $t2, 0x678($sp) -/* 07CF64 7F048434 11400003 */ beqz $t2, .L7F048444 -/* 07CF68 7F048438 26240078 */ addiu $a0, $s1, 0x78 -/* 07CF6C 7F04843C 0FC100C4 */ jal update_color_shading -/* 07CF70 7F048440 2625007C */ addiu $a1, $s1, 0x7c -.L7F048444: -/* 07CF74 7F048444 926E0001 */ lbu $t6, 1($s3) -/* 07CF78 7F048448 35CD0002 */ ori $t5, $t6, 2 -/* 07CF7C 7F04844C A26D0001 */ sb $t5, 1($s3) -/* 07CF80 7F048450 8E980008 */ lw $t8, 8($s4) -/* 07CF84 7F048454 8704000E */ lh $a0, 0xe($t8) -/* 07CF88 7F048458 00047980 */ sll $t7, $a0, 6 -/* 07CF8C 7F04845C 0FC2F5C5 */ jal dynAllocate -/* 07CF90 7F048460 01E02025 */ move $a0, $t7 -/* 07CF94 7F048464 AE82000C */ sw $v0, 0xc($s4) -/* 07CF98 7F048468 92280003 */ lbu $t0, 3($s1) -/* 07CF9C 7F04846C 24010001 */ li $at, 1 -/* 07CFA0 7F048470 00409025 */ move $s2, $v0 -/* 07CFA4 7F048474 150100AD */ bne $t0, $at, .L7F04872C -/* 07CFA8 7F048478 26240018 */ addiu $a0, $s1, 0x18 -/* 07CFAC 7F04847C 8E640004 */ lw $a0, 4($s3) -/* 07CFB0 7F048480 00402825 */ move $a1, $v0 -/* 07CFB4 7F048484 0FC149BB */ jal door7F0526EC -/* 07CFB8 7F048488 AFA4039C */ sw $a0, 0x39c($sp) -/* 07CFBC 7F04848C 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 07CFC0 7F048490 00000000 */ nop -/* 07CFC4 7F048494 00402025 */ move $a0, $v0 -/* 07CFC8 7F048498 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07CFCC 7F04849C 02402825 */ move $a1, $s2 -/* 07CFD0 7F0484A0 8E820008 */ lw $v0, 8($s4) -/* 07CFD4 7F0484A4 3C0B8004 */ lui $t3, %hi(skeleton_eyelid_door) -/* 07CFD8 7F0484A8 256BA100 */ addiu $t3, %lo(skeleton_eyelid_door) # addiu $t3, $t3, -0x5f00 -/* 07CFDC 7F0484AC 8C430004 */ lw $v1, 4($v0) -/* 07CFE0 7F0484B0 3C0D8004 */ lui $t5, %hi(skeleton_iris_door) -/* 07CFE4 7F0484B4 8FA6039C */ lw $a2, 0x39c($sp) -/* 07CFE8 7F0484B8 15630025 */ bne $t3, $v1, .L7F048550 -/* 07CFEC 7F0484BC 25ADA15C */ addiu $t5, %lo(skeleton_iris_door) # addiu $t5, $t5, -0x5ea4 -/* 07CFF0 7F0484C0 C4CA00B4 */ lwc1 $f10, 0xb4($a2) -/* 07CFF4 7F0484C4 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07CFF8 7F0484C8 44812000 */ mtc1 $at, $f4 -/* 07CFFC 7F0484CC 46145202 */ mul.s $f8, $f10, $f20 -/* 07D000 7F0484D0 8C490008 */ lw $t1, 8($v0) -/* 07D004 7F0484D4 26450040 */ addiu $a1, $s2, 0x40 -/* 07D008 7F0484D8 8D390004 */ lw $t9, 4($t1) -/* 07D00C 7F0484DC 46044183 */ div.s $f6, $f8, $f4 -/* 07D010 7F0484E0 8F300004 */ lw $s0, 4($t9) -/* 07D014 7F0484E4 AFA5006C */ sw $a1, 0x6c($sp) -/* 07D018 7F0484E8 4606A301 */ sub.s $f12, $f20, $f6 -/* 07D01C 7F0484EC 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 07D020 7F0484F0 E7AC0394 */ swc1 $f12, 0x394($sp) -/* 07D024 7F0484F4 02002025 */ move $a0, $s0 -/* 07D028 7F0484F8 0FC16266 */ jal matrix_4x4_set_position -/* 07D02C 7F0484FC 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D030 7F048500 02402025 */ move $a0, $s2 -/* 07D034 7F048504 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 07D038 7F048508 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D03C 7F04850C 8E8C0008 */ lw $t4, 8($s4) -/* 07D040 7F048510 C7AA0394 */ lwc1 $f10, 0x394($sp) -/* 07D044 7F048514 26450080 */ addiu $a1, $s2, 0x80 -/* 07D048 7F048518 8D8A0008 */ lw $t2, 8($t4) -/* 07D04C 7F04851C 460AA301 */ sub.s $f12, $f20, $f10 -/* 07D050 7F048520 8D4E0008 */ lw $t6, 8($t2) -/* 07D054 7F048524 8DD00004 */ lw $s0, 4($t6) -/* 07D058 7F048528 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 07D05C 7F04852C AFA50068 */ sw $a1, 0x68($sp) -/* 07D060 7F048530 02002025 */ move $a0, $s0 -/* 07D064 7F048534 0FC16266 */ jal matrix_4x4_set_position -/* 07D068 7F048538 8FA50068 */ lw $a1, 0x68($sp) -/* 07D06C 7F04853C 02402025 */ move $a0, $s2 -/* 07D070 7F048540 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 07D074 7F048544 8FA50068 */ lw $a1, 0x68($sp) -/* 07D078 7F048548 1000031F */ b .L7F0491C8 -/* 07D07C 7F04854C 8E8F0008 */ lw $t7, 8($s4) -.L7F048550: -/* 07D080 7F048550 55A3031D */ bnel $t5, $v1, .L7F0491C8 -/* 07D084 7F048554 8E8F0008 */ lw $t7, 8($s4) -/* 07D088 7F048558 C4C200B4 */ lwc1 $f2, 0xb4($a2) -/* 07D08C 7F04855C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07D090 7F048560 44812000 */ mtc1 $at, $f4 -/* 07D094 7F048564 46141202 */ mul.s $f8, $f2, $f20 -/* 07D098 7F048568 3C018005 */ lui $at, %hi(D_80052B68) -/* 07D09C 7F04856C C42A2B68 */ lwc1 $f10, %lo(D_80052B68)($at) -/* 07D0A0 7F048570 4600B386 */ mov.s $f14, $f22 -/* 07D0A4 7F048574 46044183 */ div.s $f6, $f8, $f4 -/* 07D0A8 7F048578 E7A60384 */ swc1 $f6, 0x384($sp) -/* 07D0AC 7F04857C C4CC0084 */ lwc1 $f12, 0x84($a2) -/* 07D0B0 7F048580 460A6002 */ mul.s $f0, $f12, $f10 -/* 07D0B4 7F048584 4602003C */ c.lt.s $f0, $f2 -/* 07D0B8 7F048588 00000000 */ nop -/* 07D0BC 7F04858C 4502001F */ bc1fl .L7F04860C -/* 07D0C0 7F048590 8FA80678 */ lw $t0, 0x678($sp) -/* 07D0C4 7F048594 46001201 */ sub.s $f8, $f2, $f0 -/* 07D0C8 7F048598 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07D0CC 7F04859C 8FB80678 */ lw $t8, 0x678($sp) -/* 07D0D0 7F0485A0 46006181 */ sub.s $f6, $f12, $f0 -/* 07D0D4 7F0485A4 46086102 */ mul.s $f4, $f12, $f8 -/* 07D0D8 7F0485A8 46062283 */ div.s $f10, $f4, $f6 -/* 07D0DC 7F0485AC 44812000 */ mtc1 $at, $f4 -/* 07D0E0 7F0485B0 46145202 */ mul.s $f8, $f10, $f20 -/* 07D0E4 7F0485B4 46044383 */ div.s $f14, $f8, $f4 -/* 07D0E8 7F0485B8 13000011 */ beqz $t8, .L7F048600 -/* 07D0EC 7F0485BC E7AE0380 */ swc1 $f14, 0x380($sp) -/* 07D0F0 7F0485C0 C7A6067C */ lwc1 $f6, 0x67c($sp) -/* 07D0F4 7F0485C4 E7AE0380 */ swc1 $f14, 0x380($sp) -/* 07D0F8 7F0485C8 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 07D0FC 7F0485CC 4600303E */ c.le.s $f6, $f0 -/* 07D100 7F0485D0 240500CA */ li $a1, 202 -/* 07D104 7F0485D4 00003025 */ move $a2, $zero -/* 07D108 7F0485D8 266F0008 */ addiu $t7, $s3, 8 -/* 07D10C 7F0485DC 45000008 */ bc1f .L7F048600 -/* 07D110 7F0485E0 00000000 */ nop -/* 07D114 7F0485E4 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07D118 7F0485E8 AFAF0070 */ sw $t7, 0x70($sp) -/* 07D11C 7F0485EC 0C002382 */ jal sndPlaySfx -/* 07D120 7F0485F0 E7AE0380 */ swc1 $f14, 0x380($sp) -/* 07D124 7F0485F4 00402025 */ move $a0, $v0 -/* 07D128 7F0485F8 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 07D12C 7F0485FC 8FA50070 */ lw $a1, 0x70($sp) -.L7F048600: -/* 07D130 7F048600 10000016 */ b .L7F04865C -/* 07D134 7F048604 AFA0038C */ sw $zero, 0x38c($sp) -/* 07D138 7F048608 8FA80678 */ lw $t0, 0x678($sp) -.L7F04860C: -/* 07D13C 7F04860C E7AE0380 */ swc1 $f14, 0x380($sp) -/* 07D140 7F048610 51000012 */ beql $t0, $zero, .L7F04865C -/* 07D144 7F048614 AFA0038C */ sw $zero, 0x38c($sp) -/* 07D148 7F048618 C7AA067C */ lwc1 $f10, 0x67c($sp) -/* 07D14C 7F04861C E7AE0380 */ swc1 $f14, 0x380($sp) -/* 07D150 7F048620 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 07D154 7F048624 460A003C */ c.lt.s $f0, $f10 -/* 07D158 7F048628 240500CB */ li $a1, 203 -/* 07D15C 7F04862C 00003025 */ move $a2, $zero -/* 07D160 7F048630 266B0008 */ addiu $t3, $s3, 8 -/* 07D164 7F048634 45020009 */ bc1fl .L7F04865C -/* 07D168 7F048638 AFA0038C */ sw $zero, 0x38c($sp) -/* 07D16C 7F04863C 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07D170 7F048640 AFAB0070 */ sw $t3, 0x70($sp) -/* 07D174 7F048644 0C002382 */ jal sndPlaySfx -/* 07D178 7F048648 E7AE0380 */ swc1 $f14, 0x380($sp) -/* 07D17C 7F04864C 00402025 */ move $a0, $v0 -/* 07D180 7F048650 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 07D184 7F048654 8FA50070 */ lw $a1, 0x70($sp) -/* 07D188 7F048658 AFA0038C */ sw $zero, 0x38c($sp) -.L7F04865C: -/* 07D18C 7F04865C 8E890008 */ lw $t1, 8($s4) -/* 07D190 7F048660 8FA3038C */ lw $v1, 0x38c($sp) -/* 07D194 7F048664 C7AC0380 */ lwc1 $f12, 0x380($sp) -/* 07D198 7F048668 8D390008 */ lw $t9, 8($t1) -/* 07D19C 7F04866C 00031040 */ sll $v0, $v1, 1 -/* 07D1A0 7F048670 00026080 */ sll $t4, $v0, 2 -/* 07D1A4 7F048674 032C5021 */ addu $t2, $t9, $t4 -/* 07D1A8 7F048678 8D4E0004 */ lw $t6, 4($t2) -/* 07D1AC 7F04867C 0002C180 */ sll $t8, $v0, 6 -/* 07D1B0 7F048680 02582821 */ addu $a1, $s2, $t8 -/* 07D1B4 7F048684 8DCD0004 */ lw $t5, 4($t6) -/* 07D1B8 7F048688 AFA20074 */ sw $v0, 0x74($sp) -/* 07D1BC 7F04868C 24A50040 */ addiu $a1, $a1, 0x40 -/* 07D1C0 7F048690 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 07D1C4 7F048694 AFAD0390 */ sw $t5, 0x390($sp) -/* 07D1C8 7F048698 8FAF0074 */ lw $t7, 0x74($sp) -/* 07D1CC 7F04869C 8FB0038C */ lw $s0, 0x38c($sp) -/* 07D1D0 7F0486A0 8FA40390 */ lw $a0, 0x390($sp) -/* 07D1D4 7F0486A4 000F4180 */ sll $t0, $t7, 6 -/* 07D1D8 7F0486A8 02482821 */ addu $a1, $s2, $t0 -/* 07D1DC 7F0486AC 24A50040 */ addiu $a1, $a1, 0x40 -/* 07D1E0 7F0486B0 0FC16266 */ jal matrix_4x4_set_position -/* 07D1E4 7F0486B4 AFA50070 */ sw $a1, 0x70($sp) -/* 07D1E8 7F0486B8 02402025 */ move $a0, $s2 -/* 07D1EC 7F0486BC 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 07D1F0 7F0486C0 8FA50070 */ lw $a1, 0x70($sp) -/* 07D1F4 7F0486C4 8E8B0008 */ lw $t3, 8($s4) -/* 07D1F8 7F0486C8 8FA20074 */ lw $v0, 0x74($sp) -/* 07D1FC 7F0486CC C7AC0384 */ lwc1 $f12, 0x384($sp) -/* 07D200 7F0486D0 8D690008 */ lw $t1, 8($t3) -/* 07D204 7F0486D4 24420002 */ addiu $v0, $v0, 2 -/* 07D208 7F0486D8 0002C880 */ sll $t9, $v0, 2 -/* 07D20C 7F0486DC 01396021 */ addu $t4, $t1, $t9 -/* 07D210 7F0486E0 8D8A0000 */ lw $t2, ($t4) -/* 07D214 7F0486E4 00026980 */ sll $t5, $v0, 6 -/* 07D218 7F0486E8 024D2821 */ addu $a1, $s2, $t5 -/* 07D21C 7F0486EC 8D4E0004 */ lw $t6, 4($t2) -/* 07D220 7F0486F0 AFA5006C */ sw $a1, 0x6c($sp) -/* 07D224 7F0486F4 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 07D228 7F0486F8 AFAE0390 */ sw $t6, 0x390($sp) -/* 07D22C 7F0486FC 8FA40390 */ lw $a0, 0x390($sp) -/* 07D230 7F048700 0FC16266 */ jal matrix_4x4_set_position -/* 07D234 7F048704 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D238 7F048708 8FA40070 */ lw $a0, 0x70($sp) -/* 07D23C 7F04870C 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 07D240 7F048710 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D244 7F048714 26100001 */ addiu $s0, $s0, 1 -/* 07D248 7F048718 24010006 */ li $at, 6 -/* 07D24C 7F04871C 1601FFCF */ bne $s0, $at, .L7F04865C -/* 07D250 7F048720 AFB0038C */ sw $s0, 0x38c($sp) -/* 07D254 7F048724 100002A8 */ b .L7F0491C8 -/* 07D258 7F048728 8E8F0008 */ lw $t7, 8($s4) -.L7F04872C: -/* 07D25C 7F04872C 26380058 */ addiu $t8, $s1, 0x58 -/* 07D260 7F048730 AFB80070 */ sw $t8, 0x70($sp) -/* 07D264 7F048734 0FC16008 */ jal matrix_4x4_copy -/* 07D268 7F048738 27A503A4 */ addiu $a1, $sp, 0x3a4 -/* 07D26C 7F04873C 8FA40070 */ lw $a0, 0x70($sp) -/* 07D270 7F048740 0FC16266 */ jal matrix_4x4_set_position -/* 07D274 7F048744 27A503A4 */ addiu $a1, $sp, 0x3a4 -/* 07D278 7F048748 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 07D27C 7F04874C 00000000 */ nop -/* 07D280 7F048750 00402025 */ move $a0, $v0 -/* 07D284 7F048754 27A503A4 */ addiu $a1, $sp, 0x3a4 -/* 07D288 7F048758 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 07D28C 7F04875C 02403025 */ move $a2, $s2 -/* 07D290 7F048760 92220003 */ lbu $v0, 3($s1) -/* 07D294 7F048764 24010006 */ li $at, 6 -/* 07D298 7F048768 27A50320 */ addiu $a1, $sp, 0x320 -/* 07D29C 7F04876C 5441002D */ bnel $v0, $at, .L7F048824 -/* 07D2A0 7F048770 2401000D */ li $at, 13 -/* 07D2A4 7F048774 8E620004 */ lw $v0, 4($s3) -/* 07D2A8 7F048778 8E8F0008 */ lw $t7, 8($s4) -/* 07D2AC 7F04877C C44C00C8 */ lwc1 $f12, 0xc8($v0) -/* 07D2B0 7F048780 8DE80008 */ lw $t0, 8($t7) -/* 07D2B4 7F048784 4616603C */ c.lt.s $f12, $f22 -/* 07D2B8 7F048788 8D0B0000 */ lw $t3, ($t0) -/* 07D2BC 7F04878C 45000003 */ bc1f .L7F04879C -/* 07D2C0 7F048790 8D700004 */ lw $s0, 4($t3) -/* 07D2C4 7F048794 10000006 */ b .L7F0487B0 -/* 07D2C8 7F048798 46146300 */ add.s $f12, $f12, $f20 -.L7F04879C: -/* 07D2CC 7F04879C 460CA03E */ c.le.s $f20, $f12 -/* 07D2D0 7F0487A0 00000000 */ nop -/* 07D2D4 7F0487A4 45000002 */ bc1f .L7F0487B0 -/* 07D2D8 7F0487A8 00000000 */ nop -/* 07D2DC 7F0487AC 46146301 */ sub.s $f12, $f12, $f20 -.L7F0487B0: -/* 07D2E0 7F0487B0 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 07D2E4 7F0487B4 AFA20370 */ sw $v0, 0x370($sp) -/* 07D2E8 7F0487B8 8FA20370 */ lw $v0, 0x370($sp) -/* 07D2EC 7F0487BC 26460040 */ addiu $a2, $s2, 0x40 -/* 07D2F0 7F0487C0 AFA6006C */ sw $a2, 0x6c($sp) -/* 07D2F4 7F0487C4 27A40320 */ addiu $a0, $sp, 0x320 -/* 07D2F8 7F0487C8 0FC16032 */ jal matrix_4x4_multiply -/* 07D2FC 7F0487CC 24450084 */ addiu $a1, $v0, 0x84 -/* 07D300 7F0487D0 C6080000 */ lwc1 $f8, ($s0) -/* 07D304 7F0487D4 27B20360 */ addiu $s2, $sp, 0x360 -/* 07D308 7F0487D8 02402825 */ move $a1, $s2 -/* 07D30C 7F0487DC E7A80360 */ swc1 $f8, 0x360($sp) -/* 07D310 7F0487E0 C6040004 */ lwc1 $f4, 4($s0) -/* 07D314 7F0487E4 27A403A4 */ addiu $a0, $sp, 0x3a4 -/* 07D318 7F0487E8 E7A40364 */ swc1 $f4, 0x364($sp) -/* 07D31C 7F0487EC C6060008 */ lwc1 $f6, 8($s0) -/* 07D320 7F0487F0 0FC1611D */ jal mtx4TransformVecInPlace -/* 07D324 7F0487F4 E7A60368 */ swc1 $f6, 0x368($sp) -/* 07D328 7F0487F8 02402025 */ move $a0, $s2 -/* 07D32C 7F0487FC 0FC16266 */ jal matrix_4x4_set_position -/* 07D330 7F048800 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D334 7F048804 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 07D338 7F048808 00000000 */ nop -/* 07D33C 7F04880C 00402025 */ move $a0, $v0 -/* 07D340 7F048810 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D344 7F048814 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D348 7F048818 1000026B */ b .L7F0491C8 -/* 07D34C 7F04881C 8E8F0008 */ lw $t7, 8($s4) -/* 07D350 7F048820 2401000D */ li $at, 13 -.L7F048824: -/* 07D354 7F048824 5441007F */ bnel $v0, $at, .L7F048A24 -/* 07D358 7F048828 24010008 */ li $at, 8 -/* 07D35C 7F04882C 8E620004 */ lw $v0, 4($s3) -/* 07D360 7F048830 3C018005 */ lui $at, %hi(D_80052B6C) -/* 07D364 7F048834 C4282B6C */ lwc1 $f8, %lo(D_80052B6C)($at) -/* 07D368 7F048838 C44A0090 */ lwc1 $f10, 0x90($v0) -/* 07D36C 7F04883C C444009C */ lwc1 $f4, 0x9c($v0) -/* 07D370 7F048840 46085300 */ add.s $f12, $f10, $f8 -/* 07D374 7F048844 46002187 */ neg.s $f6, $f4 -/* 07D378 7F048848 460CA03E */ c.le.s $f20, $f12 -/* 07D37C 7F04884C E7A60300 */ swc1 $f6, 0x300($sp) -/* 07D380 7F048850 45020003 */ bc1fl .L7F048860 -/* 07D384 7F048854 8E890008 */ lw $t1, 8($s4) -/* 07D388 7F048858 46146301 */ sub.s $f12, $f12, $f20 -/* 07D38C 7F04885C 8E890008 */ lw $t1, 8($s4) -.L7F048860: -/* 07D390 7F048860 27A403A4 */ addiu $a0, $sp, 0x3a4 -/* 07D394 7F048864 27A50308 */ addiu $a1, $sp, 0x308 -/* 07D398 7F048868 8D390008 */ lw $t9, 8($t1) -/* 07D39C 7F04886C 8F2C0004 */ lw $t4, 4($t9) -/* 07D3A0 7F048870 8D900004 */ lw $s0, 4($t4) -/* 07D3A4 7F048874 C60A0000 */ lwc1 $f10, ($s0) -/* 07D3A8 7F048878 E7AA0308 */ swc1 $f10, 0x308($sp) -/* 07D3AC 7F04887C C6080004 */ lwc1 $f8, 4($s0) -/* 07D3B0 7F048880 E7A8030C */ swc1 $f8, 0x30c($sp) -/* 07D3B4 7F048884 C6040008 */ lwc1 $f4, 8($s0) -/* 07D3B8 7F048888 E7AC0304 */ swc1 $f12, 0x304($sp) -/* 07D3BC 7F04888C AFA20318 */ sw $v0, 0x318($sp) -/* 07D3C0 7F048890 0FC1611D */ jal mtx4TransformVecInPlace -/* 07D3C4 7F048894 E7A40310 */ swc1 $f4, 0x310($sp) -/* 07D3C8 7F048898 26450040 */ addiu $a1, $s2, 0x40 -/* 07D3CC 7F04889C C7AC0304 */ lwc1 $f12, 0x304($sp) -/* 07D3D0 7F0488A0 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 07D3D4 7F0488A4 AFA5006C */ sw $a1, 0x6c($sp) -/* 07D3D8 7F0488A8 27A40308 */ addiu $a0, $sp, 0x308 -/* 07D3DC 7F0488AC 0FC16266 */ jal matrix_4x4_set_position -/* 07D3E0 7F0488B0 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D3E4 7F0488B4 8FAA0318 */ lw $t2, 0x318($sp) -/* 07D3E8 7F0488B8 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D3EC 7F0488BC 8D4E0014 */ lw $t6, 0x14($t2) -/* 07D3F0 7F0488C0 0FC1629F */ jal matrix_scalar_multiply -/* 07D3F4 7F0488C4 C5CC0014 */ lwc1 $f12, 0x14($t6) -/* 07D3F8 7F0488C8 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 07D3FC 7F0488CC 00000000 */ nop -/* 07D400 7F0488D0 00402025 */ move $a0, $v0 -/* 07D404 7F0488D4 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D408 7F0488D8 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D40C 7F0488DC 8E8D0008 */ lw $t5, 8($s4) -/* 07D410 7F0488E0 26450080 */ addiu $a1, $s2, 0x80 -/* 07D414 7F0488E4 C7AC0300 */ lwc1 $f12, 0x300($sp) -/* 07D418 7F0488E8 8DB80008 */ lw $t8, 8($t5) -/* 07D41C 7F0488EC 8F0F0008 */ lw $t7, 8($t8) -/* 07D420 7F0488F0 8DF00004 */ lw $s0, 4($t7) -/* 07D424 7F0488F4 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 07D428 7F0488F8 AFA50068 */ sw $a1, 0x68($sp) -/* 07D42C 7F0488FC 02002025 */ move $a0, $s0 -/* 07D430 7F048900 0FC16266 */ jal matrix_4x4_set_position -/* 07D434 7F048904 8FA50068 */ lw $a1, 0x68($sp) -/* 07D438 7F048908 8FA4006C */ lw $a0, 0x6c($sp) -/* 07D43C 7F04890C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D440 7F048910 8FA50068 */ lw $a1, 0x68($sp) -/* 07D444 7F048914 8E880008 */ lw $t0, 8($s4) -/* 07D448 7F048918 02802025 */ move $a0, $s4 -/* 07D44C 7F04891C 8D030008 */ lw $v1, 8($t0) -/* 07D450 7F048920 8C65000C */ lw $a1, 0xc($v1) -/* 07D454 7F048924 50A00016 */ beql $a1, $zero, .L7F048980 -/* 07D458 7F048928 8C650010 */ lw $a1, 0x10($v1) -/* 07D45C 7F04892C 0FC1B198 */ jal modelFindNodeMtx -/* 07D460 7F048930 00003025 */ move $a2, $zero -/* 07D464 7F048934 AFA202FC */ sw $v0, 0x2fc($sp) -/* 07D468 7F048938 8E8B0008 */ lw $t3, 8($s4) -/* 07D46C 7F04893C 8FAC0318 */ lw $t4, 0x318($sp) -/* 07D470 7F048940 00402825 */ move $a1, $v0 -/* 07D474 7F048944 8D690008 */ lw $t1, 8($t3) -/* 07D478 7F048948 C58C00B4 */ lwc1 $f12, 0xb4($t4) -/* 07D47C 7F04894C 8D39000C */ lw $t9, 0xc($t1) -/* 07D480 7F048950 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 07D484 7F048954 8F300004 */ lw $s0, 4($t9) -/* 07D488 7F048958 8FB202FC */ lw $s2, 0x2fc($sp) -/* 07D48C 7F04895C 02002025 */ move $a0, $s0 -/* 07D490 7F048960 0FC16266 */ jal matrix_4x4_set_position -/* 07D494 7F048964 02402825 */ move $a1, $s2 -/* 07D498 7F048968 8FA40068 */ lw $a0, 0x68($sp) -/* 07D49C 7F04896C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D4A0 7F048970 02402825 */ move $a1, $s2 -/* 07D4A4 7F048974 8E8A0008 */ lw $t2, 8($s4) -/* 07D4A8 7F048978 8D430008 */ lw $v1, 8($t2) -/* 07D4AC 7F04897C 8C650010 */ lw $a1, 0x10($v1) -.L7F048980: -/* 07D4B0 7F048980 02802025 */ move $a0, $s4 -/* 07D4B4 7F048984 50A00010 */ beql $a1, $zero, .L7F0489C8 -/* 07D4B8 7F048988 8C650018 */ lw $a1, 0x18($v1) -/* 07D4BC 7F04898C 0FC1B198 */ jal modelFindNodeMtx -/* 07D4C0 7F048990 00003025 */ move $a2, $zero -/* 07D4C4 7F048994 8E8E0008 */ lw $t6, 8($s4) -/* 07D4C8 7F048998 00409025 */ move $s2, $v0 -/* 07D4CC 7F04899C 00402825 */ move $a1, $v0 -/* 07D4D0 7F0489A0 8DCD0008 */ lw $t5, 8($t6) -/* 07D4D4 7F0489A4 8DB80010 */ lw $t8, 0x10($t5) -/* 07D4D8 7F0489A8 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 07D4DC 7F0489AC 8F040004 */ lw $a0, 4($t8) -/* 07D4E0 7F0489B0 8FA40068 */ lw $a0, 0x68($sp) -/* 07D4E4 7F0489B4 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D4E8 7F0489B8 02402825 */ move $a1, $s2 -/* 07D4EC 7F0489BC 8E8F0008 */ lw $t7, 8($s4) -/* 07D4F0 7F0489C0 8DE30008 */ lw $v1, 8($t7) -/* 07D4F4 7F0489C4 8C650018 */ lw $a1, 0x18($v1) -.L7F0489C8: -/* 07D4F8 7F0489C8 02802025 */ move $a0, $s4 -/* 07D4FC 7F0489CC 50A001FE */ beql $a1, $zero, .L7F0491C8 -/* 07D500 7F0489D0 8E8F0008 */ lw $t7, 8($s4) -/* 07D504 7F0489D4 0FC1B198 */ jal modelFindNodeMtx -/* 07D508 7F0489D8 00003025 */ move $a2, $zero -/* 07D50C 7F0489DC 8E880008 */ lw $t0, 8($s4) -/* 07D510 7F0489E0 8FB90318 */ lw $t9, 0x318($sp) -/* 07D514 7F0489E4 00409025 */ move $s2, $v0 -/* 07D518 7F0489E8 8D0B0008 */ lw $t3, 8($t0) -/* 07D51C 7F0489EC 00402825 */ move $a1, $v0 -/* 07D520 7F0489F0 C72C00B4 */ lwc1 $f12, 0xb4($t9) -/* 07D524 7F0489F4 8D690018 */ lw $t1, 0x18($t3) -/* 07D528 7F0489F8 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 07D52C 7F0489FC 8D300004 */ lw $s0, 4($t1) -/* 07D530 7F048A00 02002025 */ move $a0, $s0 -/* 07D534 7F048A04 0FC16266 */ jal matrix_4x4_set_position -/* 07D538 7F048A08 02402825 */ move $a1, $s2 -/* 07D53C 7F048A0C 8FA40068 */ lw $a0, 0x68($sp) -/* 07D540 7F048A10 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D544 7F048A14 02402825 */ move $a1, $s2 -/* 07D548 7F048A18 100001EB */ b .L7F0491C8 -/* 07D54C 7F048A1C 8E8F0008 */ lw $t7, 8($s4) -/* 07D550 7F048A20 24010008 */ li $at, 8 -.L7F048A24: -/* 07D554 7F048A24 54410017 */ bnel $v0, $at, .L7F048A84 -/* 07D558 7F048A28 2401000C */ li $at, 12 -/* 07D55C 7F048A2C 8E8C0008 */ lw $t4, 8($s4) -/* 07D560 7F048A30 24020001 */ li $v0, 1 -/* 07D564 7F048A34 26440040 */ addiu $a0, $s2, 0x40 -/* 07D568 7F048A38 858A000E */ lh $t2, 0xe($t4) -/* 07D56C 7F048A3C 29410002 */ slti $at, $t2, 2 -/* 07D570 7F048A40 542001E1 */ bnezl $at, .L7F0491C8 -/* 07D574 7F048A44 8E8F0008 */ lw $t7, 8($s4) -/* 07D578 7F048A48 AFA202F8 */ sw $v0, 0x2f8($sp) -.L7F048A4C: -/* 07D57C 7F048A4C 0FC15FF4 */ jal matrix_4x4_set_identity -/* 07D580 7F048A50 AFA40074 */ sw $a0, 0x74($sp) -/* 07D584 7F048A54 8E8E0008 */ lw $t6, 8($s4) -/* 07D588 7F048A58 8FA202F8 */ lw $v0, 0x2f8($sp) -/* 07D58C 7F048A5C 8FA40074 */ lw $a0, 0x74($sp) -/* 07D590 7F048A60 85CD000E */ lh $t5, 0xe($t6) -/* 07D594 7F048A64 24420001 */ addiu $v0, $v0, 1 -/* 07D598 7F048A68 24840040 */ addiu $a0, $a0, 0x40 -/* 07D59C 7F048A6C 004D082A */ slt $at, $v0, $t5 -/* 07D5A0 7F048A70 5420FFF6 */ bnezl $at, .L7F048A4C -/* 07D5A4 7F048A74 AFA202F8 */ sw $v0, 0x2f8($sp) -/* 07D5A8 7F048A78 100001D3 */ b .L7F0491C8 -/* 07D5AC 7F048A7C 8E8F0008 */ lw $t7, 8($s4) -/* 07D5B0 7F048A80 2401000C */ li $at, 12 -.L7F048A84: -/* 07D5B4 7F048A84 5441002C */ bnel $v0, $at, .L7F048B38 -/* 07D5B8 7F048A88 24010027 */ li $at, 39 -/* 07D5BC 7F048A8C 8E980008 */ lw $t8, 8($s4) -/* 07D5C0 7F048A90 26450040 */ addiu $a1, $s2, 0x40 -/* 07D5C4 7F048A94 8F0F0008 */ lw $t7, 8($t8) -/* 07D5C8 7F048A98 8DE80000 */ lw $t0, ($t7) -/* 07D5CC 7F048A9C 8D040004 */ lw $a0, 4($t0) -/* 07D5D0 7F048AA0 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 07D5D4 7F048AA4 AFA5006C */ sw $a1, 0x6c($sp) -/* 07D5D8 7F048AA8 02402025 */ move $a0, $s2 -/* 07D5DC 7F048AAC 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D5E0 7F048AB0 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D5E4 7F048AB4 8E8B0008 */ lw $t3, 8($s4) -/* 07D5E8 7F048AB8 26450080 */ addiu $a1, $s2, 0x80 -/* 07D5EC 7F048ABC 8D690008 */ lw $t1, 8($t3) -/* 07D5F0 7F048AC0 8D390004 */ lw $t9, 4($t1) -/* 07D5F4 7F048AC4 8F240004 */ lw $a0, 4($t9) -/* 07D5F8 7F048AC8 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 07D5FC 7F048ACC AFA50068 */ sw $a1, 0x68($sp) -/* 07D600 7F048AD0 02402025 */ move $a0, $s2 -/* 07D604 7F048AD4 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D608 7F048AD8 8FA50068 */ lw $a1, 0x68($sp) -/* 07D60C 7F048ADC 8E8C0008 */ lw $t4, 8($s4) -/* 07D610 7F048AE0 264500C0 */ addiu $a1, $s2, 0xc0 -/* 07D614 7F048AE4 8D8A0008 */ lw $t2, 8($t4) -/* 07D618 7F048AE8 8D4E0008 */ lw $t6, 8($t2) -/* 07D61C 7F048AEC 8DC40004 */ lw $a0, 4($t6) -/* 07D620 7F048AF0 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 07D624 7F048AF4 AFA50074 */ sw $a1, 0x74($sp) -/* 07D628 7F048AF8 02402025 */ move $a0, $s2 -/* 07D62C 7F048AFC 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D630 7F048B00 8FA50074 */ lw $a1, 0x74($sp) -/* 07D634 7F048B04 8E8D0008 */ lw $t5, 8($s4) -/* 07D638 7F048B08 26500100 */ addiu $s0, $s2, 0x100 -/* 07D63C 7F048B0C 02002825 */ move $a1, $s0 -/* 07D640 7F048B10 8DB80008 */ lw $t8, 8($t5) -/* 07D644 7F048B14 8F0F000C */ lw $t7, 0xc($t8) -/* 07D648 7F048B18 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 07D64C 7F048B1C 8DE40004 */ lw $a0, 4($t7) -/* 07D650 7F048B20 02402025 */ move $a0, $s2 -/* 07D654 7F048B24 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D658 7F048B28 02002825 */ move $a1, $s0 -/* 07D65C 7F048B2C 100001A6 */ b .L7F0491C8 -/* 07D660 7F048B30 8E8F0008 */ lw $t7, 8($s4) -/* 07D664 7F048B34 24010027 */ li $at, 39 -.L7F048B38: -/* 07D668 7F048B38 544100B9 */ bnel $v0, $at, .L7F048E20 -/* 07D66C 7F048B3C 24010028 */ li $at, 40 -/* 07D670 7F048B40 8E880008 */ lw $t0, 8($s4) -/* 07D674 7F048B44 8FAF0678 */ lw $t7, 0x678($sp) -/* 07D678 7F048B48 4600B006 */ mov.s $f0, $f22 -/* 07D67C 7F048B4C 8D030008 */ lw $v1, 8($t0) -/* 07D680 7F048B50 8C6B0004 */ lw $t3, 4($v1) -/* 07D684 7F048B54 8D690004 */ lw $t1, 4($t3) -/* 07D688 7F048B58 AFA90260 */ sw $t1, 0x260($sp) -/* 07D68C 7F048B5C 8C790008 */ lw $t9, 8($v1) -/* 07D690 7F048B60 8F2C0004 */ lw $t4, 4($t9) -/* 07D694 7F048B64 AFAC025C */ sw $t4, 0x25c($sp) -/* 07D698 7F048B68 8C6E0010 */ lw $t6, 0x10($v1) -/* 07D69C 7F048B6C 8C6A000C */ lw $t2, 0xc($v1) -/* 07D6A0 7F048B70 8DCD0004 */ lw $t5, 4($t6) -/* 07D6A4 7F048B74 8D500004 */ lw $s0, 4($t2) -/* 07D6A8 7F048B78 AFAD0254 */ sw $t5, 0x254($sp) -/* 07D6AC 7F048B7C 8C780018 */ lw $t8, 0x18($v1) -/* 07D6B0 7F048B80 C6840014 */ lwc1 $f4, 0x14($s4) -/* 07D6B4 7F048B84 8F020004 */ lw $v0, 4($t8) -/* 07D6B8 7F048B88 C4460010 */ lwc1 $f6, 0x10($v0) -/* 07D6BC 7F048B8C C44A000C */ lwc1 $f10, 0xc($v0) -/* 07D6C0 7F048B90 460A3201 */ sub.s $f8, $f6, $f10 -/* 07D6C4 7F048B94 46044082 */ mul.s $f2, $f8, $f4 -/* 07D6C8 7F048B98 11E00026 */ beqz $t7, .L7F048C34 -/* 07D6CC 7F048B9C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07D6D0 7F048BA0 C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07D6D4 7F048BA4 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07D6D8 7F048BA8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07D6DC 7F048BAC 460A3202 */ mul.s $f8, $f6, $f10 -/* 07D6E0 7F048BB0 44815000 */ mtc1 $at, $f10 -/* 07D6E4 7F048BB4 46144102 */ mul.s $f4, $f8, $f20 -/* 07D6E8 7F048BB8 00000000 */ nop -/* 07D6EC 7F048BBC 46141182 */ mul.s $f6, $f2, $f20 -/* 07D6F0 7F048BC0 00000000 */ nop -/* 07D6F4 7F048BC4 460A3202 */ mul.s $f8, $f6, $f10 -/* 07D6F8 7F048BC8 C626008C */ lwc1 $f6, 0x8c($s1) -/* 07D6FC 7F048BCC 46082003 */ div.s $f0, $f4, $f8 -/* 07D700 7F048BD0 46003280 */ add.s $f10, $f6, $f0 -/* 07D704 7F048BD4 E62A008C */ swc1 $f10, 0x8c($s1) -/* 07D708 7F048BD8 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07D70C 7F048BDC 460CA03E */ c.le.s $f20, $f12 -/* 07D710 7F048BE0 00000000 */ nop -/* 07D714 7F048BE4 45000008 */ bc1f .L7F048C08 -/* 07D718 7F048BE8 00000000 */ nop -/* 07D71C 7F048BEC 46146101 */ sub.s $f4, $f12, $f20 -.L7F048BF0: -/* 07D720 7F048BF0 E624008C */ swc1 $f4, 0x8c($s1) -/* 07D724 7F048BF4 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07D728 7F048BF8 460CA03E */ c.le.s $f20, $f12 -/* 07D72C 7F048BFC 00000000 */ nop -/* 07D730 7F048C00 4503FFFB */ bc1tl .L7F048BF0 -/* 07D734 7F048C04 46146101 */ sub.s $f4, $f12, $f20 -.L7F048C08: -/* 07D738 7F048C08 4616603C */ c.lt.s $f12, $f22 -/* 07D73C 7F048C0C 00000000 */ nop -/* 07D740 7F048C10 45020009 */ bc1fl .L7F048C38 -/* 07D744 7F048C14 C626008C */ lwc1 $f6, 0x8c($s1) -/* 07D748 7F048C18 46146200 */ add.s $f8, $f12, $f20 -.L7F048C1C: -/* 07D74C 7F048C1C E628008C */ swc1 $f8, 0x8c($s1) -/* 07D750 7F048C20 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07D754 7F048C24 4616603C */ c.lt.s $f12, $f22 -/* 07D758 7F048C28 00000000 */ nop -/* 07D75C 7F048C2C 4503FFFB */ bc1tl .L7F048C1C -/* 07D760 7F048C30 46146200 */ add.s $f8, $f12, $f20 -.L7F048C34: -/* 07D764 7F048C34 C626008C */ lwc1 $f6, 0x8c($s1) -.L7F048C38: -/* 07D768 7F048C38 46003280 */ add.s $f10, $f6, $f0 -/* 07D76C 7F048C3C E62A008C */ swc1 $f10, 0x8c($s1) -/* 07D770 7F048C40 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07D774 7F048C44 460CA03E */ c.le.s $f20, $f12 -/* 07D778 7F048C48 00000000 */ nop -/* 07D77C 7F048C4C 45020009 */ bc1fl .L7F048C74 -/* 07D780 7F048C50 4616603C */ c.lt.s $f12, $f22 -/* 07D784 7F048C54 46146101 */ sub.s $f4, $f12, $f20 -.L7F048C58: -/* 07D788 7F048C58 E624008C */ swc1 $f4, 0x8c($s1) -/* 07D78C 7F048C5C C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07D790 7F048C60 460CA03E */ c.le.s $f20, $f12 -/* 07D794 7F048C64 00000000 */ nop -/* 07D798 7F048C68 4503FFFB */ bc1tl .L7F048C58 -/* 07D79C 7F048C6C 46146101 */ sub.s $f4, $f12, $f20 -/* 07D7A0 7F048C70 4616603C */ c.lt.s $f12, $f22 -.L7F048C74: -/* 07D7A4 7F048C74 00000000 */ nop -/* 07D7A8 7F048C78 45000008 */ bc1f .L7F048C9C -/* 07D7AC 7F048C7C 00000000 */ nop -/* 07D7B0 7F048C80 46146200 */ add.s $f8, $f12, $f20 -.L7F048C84: -/* 07D7B4 7F048C84 E628008C */ swc1 $f8, 0x8c($s1) -/* 07D7B8 7F048C88 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07D7BC 7F048C8C 4616603C */ c.lt.s $f12, $f22 -/* 07D7C0 7F048C90 00000000 */ nop -/* 07D7C4 7F048C94 4503FFFB */ bc1tl .L7F048C84 -/* 07D7C8 7F048C98 46146200 */ add.s $f8, $f12, $f20 -.L7F048C9C: -/* 07D7CC 7F048C9C 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 07D7D0 7F048CA0 27A502AC */ addiu $a1, $sp, 0x2ac -/* 07D7D4 7F048CA4 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07D7D8 7F048CA8 4606B03C */ c.lt.s $f22, $f6 -/* 07D7DC 7F048CAC 00000000 */ nop -/* 07D7E0 7F048CB0 4502002B */ bc1fl .L7F048D60 -/* 07D7E4 7F048CB4 C62C0090 */ lwc1 $f12, 0x90($s1) -/* 07D7E8 7F048CB8 8FA80260 */ lw $t0, 0x260($sp) -/* 07D7EC 7F048CBC C60A0008 */ lwc1 $f10, 8($s0) -/* 07D7F0 7F048CC0 C62C009C */ lwc1 $f12, 0x9c($s1) -/* 07D7F4 7F048CC4 C5040008 */ lwc1 $f4, 8($t0) -/* 07D7F8 7F048CC8 C6860014 */ lwc1 $f6, 0x14($s4) -/* 07D7FC 7F048CCC 4616603C */ c.lt.s $f12, $f22 -/* 07D800 7F048CD0 46045201 */ sub.s $f8, $f10, $f4 -/* 07D804 7F048CD4 46064082 */ mul.s $f2, $f8, $f6 -/* 07D808 7F048CD8 45020003 */ bc1fl .L7F048CE8 -/* 07D80C 7F048CDC E7A20250 */ swc1 $f2, 0x250($sp) -/* 07D810 7F048CE0 46006307 */ neg.s $f12, $f12 -/* 07D814 7F048CE4 E7A20250 */ swc1 $f2, 0x250($sp) -.L7F048CE8: -/* 07D818 7F048CE8 0FC15FAB */ jal sinf -/* 07D81C 7F048CEC E7AC024C */ swc1 $f12, 0x24c($sp) -/* 07D820 7F048CF0 C7A20250 */ lwc1 $f2, 0x250($sp) -/* 07D824 7F048CF4 C7AC024C */ lwc1 $f12, 0x24c($sp) -/* 07D828 7F048CF8 46020282 */ mul.s $f10, $f0, $f2 -/* 07D82C 7F048CFC 0FC15FA8 */ jal cosf -/* 07D830 7F048D00 E7AA0248 */ swc1 $f10, 0x248($sp) -/* 07D834 7F048D04 C7A20250 */ lwc1 $f2, 0x250($sp) -/* 07D838 7F048D08 C6280088 */ lwc1 $f8, 0x88($s1) -/* 07D83C 7F048D0C C7AC0248 */ lwc1 $f12, 0x248($sp) -/* 07D840 7F048D10 46020102 */ mul.s $f4, $f0, $f2 -/* 07D844 7F048D14 46081181 */ sub.s $f6, $f2, $f8 -/* 07D848 7F048D18 0FC16A8C */ jal atan2f -/* 07D84C 7F048D1C 46062381 */ sub.s $f14, $f4, $f6 -/* 07D850 7F048D20 C7A2024C */ lwc1 $f2, 0x24c($sp) -/* 07D854 7F048D24 E6200090 */ swc1 $f0, 0x90($s1) -/* 07D858 7F048D28 4602003C */ c.lt.s $f0, $f2 -/* 07D85C 7F048D2C 00000000 */ nop -/* 07D860 7F048D30 45020003 */ bc1fl .L7F048D40 -/* 07D864 7F048D34 C62A009C */ lwc1 $f10, 0x9c($s1) -/* 07D868 7F048D38 E6220090 */ swc1 $f2, 0x90($s1) -/* 07D86C 7F048D3C C62A009C */ lwc1 $f10, 0x9c($s1) -.L7F048D40: -/* 07D870 7F048D40 460AB03C */ c.lt.s $f22, $f10 -/* 07D874 7F048D44 00000000 */ nop -/* 07D878 7F048D48 45020005 */ bc1fl .L7F048D60 -/* 07D87C 7F048D4C C62C0090 */ lwc1 $f12, 0x90($s1) -/* 07D880 7F048D50 C6280090 */ lwc1 $f8, 0x90($s1) -/* 07D884 7F048D54 4608A101 */ sub.s $f4, $f20, $f8 -/* 07D888 7F048D58 E6240090 */ swc1 $f4, 0x90($s1) -/* 07D88C 7F048D5C C62C0090 */ lwc1 $f12, 0x90($s1) -.L7F048D60: -/* 07D890 7F048D60 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 07D894 7F048D64 27A5026C */ addiu $a1, $sp, 0x26c -/* 07D898 7F048D68 264500C0 */ addiu $a1, $s2, 0xc0 -/* 07D89C 7F048D6C AFA50074 */ sw $a1, 0x74($sp) -/* 07D8A0 7F048D70 0FC16008 */ jal matrix_4x4_copy -/* 07D8A4 7F048D74 27A402AC */ addiu $a0, $sp, 0x2ac -/* 07D8A8 7F048D78 02002025 */ move $a0, $s0 -/* 07D8AC 7F048D7C 0FC16266 */ jal matrix_4x4_set_position -/* 07D8B0 7F048D80 8FA50074 */ lw $a1, 0x74($sp) -/* 07D8B4 7F048D84 02402025 */ move $a0, $s2 -/* 07D8B8 7F048D88 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D8BC 7F048D8C 8FA50074 */ lw $a1, 0x74($sp) -/* 07D8C0 7F048D90 26500100 */ addiu $s0, $s2, 0x100 -/* 07D8C4 7F048D94 02002825 */ move $a1, $s0 -/* 07D8C8 7F048D98 0FC16008 */ jal matrix_4x4_copy -/* 07D8CC 7F048D9C 27A402AC */ addiu $a0, $sp, 0x2ac -/* 07D8D0 7F048DA0 8FA40254 */ lw $a0, 0x254($sp) -/* 07D8D4 7F048DA4 0FC16266 */ jal matrix_4x4_set_position -/* 07D8D8 7F048DA8 02002825 */ move $a1, $s0 -/* 07D8DC 7F048DAC 02402025 */ move $a0, $s2 -/* 07D8E0 7F048DB0 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D8E4 7F048DB4 02002825 */ move $a1, $s0 -/* 07D8E8 7F048DB8 27A4026C */ addiu $a0, $sp, 0x26c -/* 07D8EC 7F048DBC 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D8F0 7F048DC0 27A502AC */ addiu $a1, $sp, 0x2ac -/* 07D8F4 7F048DC4 26450040 */ addiu $a1, $s2, 0x40 -/* 07D8F8 7F048DC8 AFA5006C */ sw $a1, 0x6c($sp) -/* 07D8FC 7F048DCC 0FC16008 */ jal matrix_4x4_copy -/* 07D900 7F048DD0 27A402AC */ addiu $a0, $sp, 0x2ac -/* 07D904 7F048DD4 8FA40260 */ lw $a0, 0x260($sp) -/* 07D908 7F048DD8 0FC16266 */ jal matrix_4x4_set_position -/* 07D90C 7F048DDC 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D910 7F048DE0 02402025 */ move $a0, $s2 -/* 07D914 7F048DE4 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D918 7F048DE8 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D91C 7F048DEC 26450080 */ addiu $a1, $s2, 0x80 -/* 07D920 7F048DF0 AFA50068 */ sw $a1, 0x68($sp) -/* 07D924 7F048DF4 0FC16008 */ jal matrix_4x4_copy -/* 07D928 7F048DF8 27A402AC */ addiu $a0, $sp, 0x2ac -/* 07D92C 7F048DFC 8FA4025C */ lw $a0, 0x25c($sp) -/* 07D930 7F048E00 0FC16266 */ jal matrix_4x4_set_position -/* 07D934 7F048E04 8FA50068 */ lw $a1, 0x68($sp) -/* 07D938 7F048E08 02402025 */ move $a0, $s2 -/* 07D93C 7F048E0C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D940 7F048E10 8FA50068 */ lw $a1, 0x68($sp) -/* 07D944 7F048E14 100000EC */ b .L7F0491C8 -/* 07D948 7F048E18 8E8F0008 */ lw $t7, 8($s4) -/* 07D94C 7F048E1C 24010028 */ li $at, 40 -.L7F048E20: -/* 07D950 7F048E20 14410086 */ bne $v0, $at, .L7F04903C -/* 07D954 7F048E24 00000000 */ nop -/* 07D958 7F048E28 8E8B0008 */ lw $t3, 8($s4) -/* 07D95C 7F048E2C 3C0A8005 */ lui $t2, %hi(g_ClockTimer) -/* 07D960 7F048E30 8D4A8374 */ lw $t2, %lo(g_ClockTimer)($t2) -/* 07D964 7F048E34 8D690008 */ lw $t1, 8($t3) -/* 07D968 7F048E38 8FAE0678 */ lw $t6, 0x678($sp) -/* 07D96C 7F048E3C 27B001B0 */ addiu $s0, $sp, 0x1b0 -/* 07D970 7F048E40 8D390008 */ lw $t9, 8($t1) -/* 07D974 7F048E44 3C0F8003 */ lui $t7, %hi(D_80030B34) -/* 07D978 7F048E48 02402025 */ move $a0, $s2 -/* 07D97C 7F048E4C 8F2C0004 */ lw $t4, 4($t9) -/* 07D980 7F048E50 26450040 */ addiu $a1, $s2, 0x40 -/* 07D984 7F048E54 1940001E */ blez $t2, .L7F048ED0 -/* 07D988 7F048E58 AFAC01FC */ sw $t4, 0x1fc($sp) -/* 07D98C 7F048E5C 51C0001D */ beql $t6, $zero, .L7F048ED4 -/* 07D990 7F048E60 8E2D0014 */ lw $t5, 0x14($s1) -/* 07D994 7F048E64 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07D998 7F048E68 C62A008C */ lwc1 $f10, 0x8c($s1) -/* 07D99C 7F048E6C 460A3200 */ add.s $f8, $f6, $f10 -/* 07D9A0 7F048E70 E6280088 */ swc1 $f8, 0x88($s1) -/* 07D9A4 7F048E74 C6200088 */ lwc1 $f0, 0x88($s1) -/* 07D9A8 7F048E78 4600A03E */ c.le.s $f20, $f0 -/* 07D9AC 7F048E7C 00000000 */ nop -/* 07D9B0 7F048E80 45020009 */ bc1fl .L7F048EA8 -/* 07D9B4 7F048E84 4616003C */ c.lt.s $f0, $f22 -/* 07D9B8 7F048E88 46140101 */ sub.s $f4, $f0, $f20 -.L7F048E8C: -/* 07D9BC 7F048E8C E6240088 */ swc1 $f4, 0x88($s1) -/* 07D9C0 7F048E90 C6200088 */ lwc1 $f0, 0x88($s1) -/* 07D9C4 7F048E94 4600A03E */ c.le.s $f20, $f0 -/* 07D9C8 7F048E98 00000000 */ nop -/* 07D9CC 7F048E9C 4503FFFB */ bc1tl .L7F048E8C -/* 07D9D0 7F048EA0 46140101 */ sub.s $f4, $f0, $f20 -/* 07D9D4 7F048EA4 4616003C */ c.lt.s $f0, $f22 -.L7F048EA8: -/* 07D9D8 7F048EA8 00000000 */ nop -/* 07D9DC 7F048EAC 45020009 */ bc1fl .L7F048ED4 -/* 07D9E0 7F048EB0 8E2D0014 */ lw $t5, 0x14($s1) -/* 07D9E4 7F048EB4 46140180 */ add.s $f6, $f0, $f20 -.L7F048EB8: -/* 07D9E8 7F048EB8 E6260088 */ swc1 $f6, 0x88($s1) -/* 07D9EC 7F048EBC C6200088 */ lwc1 $f0, 0x88($s1) -/* 07D9F0 7F048EC0 4616003C */ c.lt.s $f0, $f22 -/* 07D9F4 7F048EC4 00000000 */ nop -/* 07D9F8 7F048EC8 4503FFFB */ bc1tl .L7F048EB8 -/* 07D9FC 7F048ECC 46140180 */ add.s $f6, $f0, $f20 -.L7F048ED0: -/* 07DA00 7F048ED0 8E2D0014 */ lw $t5, 0x14($s1) -.L7F048ED4: -/* 07DA04 7F048ED4 25EF0B34 */ addiu $t7, %lo(D_80030B34) # addiu $t7, $t7, 0xb34 -/* 07DA08 7F048ED8 25EB003C */ addiu $t3, $t7, 0x3c -/* 07DA0C 7F048EDC 8DB80020 */ lw $t8, 0x20($t5) -/* 07DA10 7F048EE0 02004825 */ move $t1, $s0 -/* 07DA14 7F048EE4 13000015 */ beqz $t8, .L7F048F3C -/* 07DA18 7F048EE8 00000000 */ nop -.L7F048EEC: -/* 07DA1C 7F048EEC 8DE10000 */ lw $at, ($t7) -/* 07DA20 7F048EF0 25EF000C */ addiu $t7, $t7, 0xc -/* 07DA24 7F048EF4 2529000C */ addiu $t1, $t1, 0xc -/* 07DA28 7F048EF8 AD21FFF4 */ sw $at, -0xc($t1) -/* 07DA2C 7F048EFC 8DE1FFF8 */ lw $at, -8($t7) -/* 07DA30 7F048F00 AD21FFF8 */ sw $at, -8($t1) -/* 07DA34 7F048F04 8DE1FFFC */ lw $at, -4($t7) -/* 07DA38 7F048F08 15EBFFF8 */ bne $t7, $t3, .L7F048EEC -/* 07DA3C 7F048F0C AD21FFFC */ sw $at, -4($t1) -/* 07DA40 7F048F10 8DE10000 */ lw $at, ($t7) -/* 07DA44 7F048F14 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 07DA48 7F048F18 AD210000 */ sw $at, ($t1) -/* 07DA4C 7F048F1C AFA201B0 */ sw $v0, 0x1b0($sp) -/* 07DA50 7F048F20 AFB201C0 */ sw $s2, 0x1c0($sp) -/* 07DA54 7F048F24 8E250014 */ lw $a1, 0x14($s1) -/* 07DA58 7F048F28 0FC1BCBE */ jal subcalcmatrices -/* 07DA5C 7F048F2C 02002025 */ move $a0, $s0 -/* 07DA60 7F048F30 26590040 */ addiu $t9, $s2, 0x40 -/* 07DA64 7F048F34 10000003 */ b .L7F048F44 -/* 07DA68 7F048F38 AFB9006C */ sw $t9, 0x6c($sp) -.L7F048F3C: -/* 07DA6C 7F048F3C 0FC16008 */ jal matrix_4x4_copy -/* 07DA70 7F048F40 AFA5006C */ sw $a1, 0x6c($sp) -.L7F048F44: -/* 07DA74 7F048F44 8E2C0008 */ lw $t4, 8($s1) -/* 07DA78 7F048F48 27A50200 */ addiu $a1, $sp, 0x200 -/* 07DA7C 7F048F4C 000C5080 */ sll $t2, $t4, 2 -/* 07DA80 7F048F50 05410006 */ bgez $t2, .L7F048F6C -/* 07DA84 7F048F54 00000000 */ nop -/* 07DA88 7F048F58 C62C0088 */ lwc1 $f12, 0x88($s1) -/* 07DA8C 7F048F5C 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 07DA90 7F048F60 27A50200 */ addiu $a1, $sp, 0x200 -/* 07DA94 7F048F64 10000004 */ b .L7F048F78 -/* 07DA98 7F048F68 26450080 */ addiu $a1, $s2, 0x80 -.L7F048F6C: -/* 07DA9C 7F048F6C 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 07DAA0 7F048F70 C62C0088 */ lwc1 $f12, 0x88($s1) -/* 07DAA4 7F048F74 26450080 */ addiu $a1, $s2, 0x80 -.L7F048F78: -/* 07DAA8 7F048F78 AFA50068 */ sw $a1, 0x68($sp) -/* 07DAAC 7F048F7C 0FC16008 */ jal matrix_4x4_copy -/* 07DAB0 7F048F80 27A40200 */ addiu $a0, $sp, 0x200 -/* 07DAB4 7F048F84 8FA401FC */ lw $a0, 0x1fc($sp) -/* 07DAB8 7F048F88 0FC16266 */ jal matrix_4x4_set_position -/* 07DABC 7F048F8C 8FA50068 */ lw $a1, 0x68($sp) -/* 07DAC0 7F048F90 8FA4006C */ lw $a0, 0x6c($sp) -/* 07DAC4 7F048F94 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DAC8 7F048F98 8FA50068 */ lw $a1, 0x68($sp) -/* 07DACC 7F048F9C 8E8E0008 */ lw $t6, 8($s4) -/* 07DAD0 7F048FA0 02802025 */ move $a0, $s4 -/* 07DAD4 7F048FA4 00003025 */ move $a2, $zero -/* 07DAD8 7F048FA8 8DC30008 */ lw $v1, 8($t6) -/* 07DADC 7F048FAC 8C65000C */ lw $a1, 0xc($v1) -/* 07DAE0 7F048FB0 50A00013 */ beql $a1, $zero, .L7F049000 -/* 07DAE4 7F048FB4 8C650010 */ lw $a1, 0x10($v1) -/* 07DAE8 7F048FB8 0FC1B198 */ jal modelFindNodeMtx -/* 07DAEC 7F048FBC 8CB20004 */ lw $s2, 4($a1) -/* 07DAF0 7F048FC0 00408025 */ move $s0, $v0 -/* 07DAF4 7F048FC4 C62C0088 */ lwc1 $f12, 0x88($s1) -/* 07DAF8 7F048FC8 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 07DAFC 7F048FCC 27A50200 */ addiu $a1, $sp, 0x200 -/* 07DB00 7F048FD0 27A40200 */ addiu $a0, $sp, 0x200 -/* 07DB04 7F048FD4 0FC16008 */ jal matrix_4x4_copy -/* 07DB08 7F048FD8 02002825 */ move $a1, $s0 -/* 07DB0C 7F048FDC 02402025 */ move $a0, $s2 -/* 07DB10 7F048FE0 0FC16266 */ jal matrix_4x4_set_position -/* 07DB14 7F048FE4 02002825 */ move $a1, $s0 -/* 07DB18 7F048FE8 8FA4006C */ lw $a0, 0x6c($sp) -/* 07DB1C 7F048FEC 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DB20 7F048FF0 02002825 */ move $a1, $s0 -/* 07DB24 7F048FF4 8E8D0008 */ lw $t5, 8($s4) -/* 07DB28 7F048FF8 8DA30008 */ lw $v1, 8($t5) -/* 07DB2C 7F048FFC 8C650010 */ lw $a1, 0x10($v1) -.L7F049000: -/* 07DB30 7F049000 02802025 */ move $a0, $s4 -/* 07DB34 7F049004 00003025 */ move $a2, $zero -/* 07DB38 7F049008 50A0006F */ beql $a1, $zero, .L7F0491C8 -/* 07DB3C 7F04900C 8E8F0008 */ lw $t7, 8($s4) -/* 07DB40 7F049010 0FC1B198 */ jal modelFindNodeMtx -/* 07DB44 7F049014 8CB20004 */ lw $s2, 4($a1) -/* 07DB48 7F049018 00408025 */ move $s0, $v0 -/* 07DB4C 7F04901C 02402025 */ move $a0, $s2 -/* 07DB50 7F049020 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 07DB54 7F049024 00402825 */ move $a1, $v0 -/* 07DB58 7F049028 8FA4006C */ lw $a0, 0x6c($sp) -/* 07DB5C 7F04902C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DB60 7F049030 02002825 */ move $a1, $s0 -/* 07DB64 7F049034 10000064 */ b .L7F0491C8 -/* 07DB68 7F049038 8E8F0008 */ lw $t7, 8($s4) -.L7F04903C: -/* 07DB6C 7F04903C 16020061 */ bne $s0, $v0, .L7F0491C4 -/* 07DB70 7F049040 26450040 */ addiu $a1, $s2, 0x40 -/* 07DB74 7F049044 8E980008 */ lw $t8, 8($s4) -/* 07DB78 7F049048 8F030008 */ lw $v1, 8($t8) -/* 07DB7C 7F04904C 8C6B000C */ lw $t3, 0xc($v1) -/* 07DB80 7F049050 8C680004 */ lw $t0, 4($v1) -/* 07DB84 7F049054 8D6F0004 */ lw $t7, 4($t3) -/* 07DB88 7F049058 8D100004 */ lw $s0, 4($t0) -/* 07DB8C 7F04905C AFAF0164 */ sw $t7, 0x164($sp) -/* 07DB90 7F049060 8C690010 */ lw $t1, 0x10($v1) -/* 07DB94 7F049064 8D390004 */ lw $t9, 4($t1) -/* 07DB98 7F049068 AFB90160 */ sw $t9, 0x160($sp) -/* 07DB9C 7F04906C 8C6C0008 */ lw $t4, 8($v1) -/* 07DBA0 7F049070 8D8A0004 */ lw $t2, 4($t4) -/* 07DBA4 7F049074 AFAA015C */ sw $t2, 0x15c($sp) -/* 07DBA8 7F049078 8C6E0018 */ lw $t6, 0x18($v1) -/* 07DBAC 7F04907C 8DCD0004 */ lw $t5, 4($t6) -/* 07DBB0 7F049080 AFAD0158 */ sw $t5, 0x158($sp) -/* 07DBB4 7F049084 C62E00C8 */ lwc1 $f14, 0xc8($s1) -/* 07DBB8 7F049088 46007387 */ neg.s $f14, $f14 -/* 07DBBC 7F04908C 4616703C */ c.lt.s $f14, $f22 -/* 07DBC0 7F049090 00000000 */ nop -/* 07DBC4 7F049094 45020003 */ bc1fl .L7F0490A4 -/* 07DBC8 7F049098 C62C00CC */ lwc1 $f12, 0xcc($s1) -/* 07DBCC 7F04909C 46147380 */ add.s $f14, $f14, $f20 -/* 07DBD0 7F0490A0 C62C00CC */ lwc1 $f12, 0xcc($s1) -.L7F0490A4: -/* 07DBD4 7F0490A4 46006307 */ neg.s $f12, $f12 -/* 07DBD8 7F0490A8 4616603C */ c.lt.s $f12, $f22 -/* 07DBDC 7F0490AC 00000000 */ nop -/* 07DBE0 7F0490B0 45020003 */ bc1fl .L7F0490C0 -/* 07DBE4 7F0490B4 AFA5006C */ sw $a1, 0x6c($sp) -/* 07DBE8 7F0490B8 46146300 */ add.s $f12, $f12, $f20 -/* 07DBEC 7F0490BC AFA5006C */ sw $a1, 0x6c($sp) -.L7F0490C0: -/* 07DBF0 7F0490C0 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 07DBF4 7F0490C4 E7AE0154 */ swc1 $f14, 0x154($sp) -/* 07DBF8 7F0490C8 02002025 */ move $a0, $s0 -/* 07DBFC 7F0490CC 0FC16266 */ jal matrix_4x4_set_position -/* 07DC00 7F0490D0 8FA5006C */ lw $a1, 0x6c($sp) -/* 07DC04 7F0490D4 02402025 */ move $a0, $s2 -/* 07DC08 7F0490D8 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DC0C 7F0490DC 8FA5006C */ lw $a1, 0x6c($sp) -/* 07DC10 7F0490E0 264500C0 */ addiu $a1, $s2, 0xc0 -/* 07DC14 7F0490E4 C7AC0154 */ lwc1 $f12, 0x154($sp) -/* 07DC18 7F0490E8 0FC1615C */ jal matrix_4x4_set_rotation_around_x -/* 07DC1C 7F0490EC AFA50074 */ sw $a1, 0x74($sp) -/* 07DC20 7F0490F0 8FA40164 */ lw $a0, 0x164($sp) -/* 07DC24 7F0490F4 0FC16266 */ jal matrix_4x4_set_position -/* 07DC28 7F0490F8 8FA50074 */ lw $a1, 0x74($sp) -/* 07DC2C 7F0490FC 8FA4006C */ lw $a0, 0x6c($sp) -/* 07DC30 7F049100 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DC34 7F049104 8FA50074 */ lw $a1, 0x74($sp) -/* 07DC38 7F049108 3C018005 */ lui $at, %hi(D_80052B70) -/* 07DC3C 7F04910C 26500100 */ addiu $s0, $s2, 0x100 -/* 07DC40 7F049110 02002825 */ move $a1, $s0 -/* 07DC44 7F049114 0FC1617F */ jal matrix_4x4_set_rotation_around_y -/* 07DC48 7F049118 C42C2B70 */ lwc1 $f12, %lo(D_80052B70)($at) -/* 07DC4C 7F04911C 8FA40160 */ lw $a0, 0x160($sp) -/* 07DC50 7F049120 0FC16266 */ jal matrix_4x4_set_position -/* 07DC54 7F049124 02002825 */ move $a1, $s0 -/* 07DC58 7F049128 8FA40074 */ lw $a0, 0x74($sp) -/* 07DC5C 7F04912C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DC60 7F049130 02002825 */ move $a1, $s0 -/* 07DC64 7F049134 26450080 */ addiu $a1, $s2, 0x80 -/* 07DC68 7F049138 AFA50068 */ sw $a1, 0x68($sp) -/* 07DC6C 7F04913C 0FC16259 */ jal matrix_4x4_set_identity_and_position -/* 07DC70 7F049140 8FA4015C */ lw $a0, 0x15c($sp) -/* 07DC74 7F049144 8FA4006C */ lw $a0, 0x6c($sp) -/* 07DC78 7F049148 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DC7C 7F04914C 8FA50068 */ lw $a1, 0x68($sp) -/* 07DC80 7F049150 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 07DC84 7F049154 00000000 */ nop -/* 07DC88 7F049158 27B0016C */ addiu $s0, $sp, 0x16c -/* 07DC8C 7F04915C 02003025 */ move $a2, $s0 -/* 07DC90 7F049160 00402025 */ move $a0, $v0 -/* 07DC94 7F049164 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 07DC98 7F049168 8FA5006C */ lw $a1, 0x6c($sp) -/* 07DC9C 7F04916C 8FA40158 */ lw $a0, 0x158($sp) -/* 07DCA0 7F049170 02002825 */ move $a1, $s0 -/* 07DCA4 7F049174 26260084 */ addiu $a2, $s1, 0x84 -/* 07DCA8 7F049178 0FC0FD50 */ jal sub_GAME_7F03F540 -/* 07DCAC 7F04917C 26270080 */ addiu $a3, $s1, 0x80 -/* 07DCB0 7F049180 8E980008 */ lw $t8, 8($s4) -/* 07DCB4 7F049184 8F030008 */ lw $v1, 8($t8) -/* 07DCB8 7F049188 8C65001C */ lw $a1, 0x1c($v1) -/* 07DCBC 7F04918C 50A00008 */ beql $a1, $zero, .L7F0491B0 -/* 07DCC0 7F049190 8C650020 */ lw $a1, 0x20($v1) -/* 07DCC4 7F049194 0FC1B1E7 */ jal modelGetNodeRwData -/* 07DCC8 7F049198 02802025 */ move $a0, $s4 -/* 07DCCC 7F04919C 8E2800C4 */ lw $t0, 0xc4($s1) -/* 07DCD0 7F0491A0 A4480000 */ sh $t0, ($v0) -/* 07DCD4 7F0491A4 8E8B0008 */ lw $t3, 8($s4) -/* 07DCD8 7F0491A8 8D630008 */ lw $v1, 8($t3) -/* 07DCDC 7F0491AC 8C650020 */ lw $a1, 0x20($v1) -.L7F0491B0: -/* 07DCE0 7F0491B0 50A00005 */ beql $a1, $zero, .L7F0491C8 -/* 07DCE4 7F0491B4 8E8F0008 */ lw $t7, 8($s4) -/* 07DCE8 7F0491B8 0FC1B1E7 */ jal modelGetNodeRwData -/* 07DCEC 7F0491BC 02802025 */ move $a0, $s4 -/* 07DCF0 7F0491C0 AC400000 */ sw $zero, ($v0) -.L7F0491C4: -/* 07DCF4 7F0491C4 8E8F0008 */ lw $t7, 8($s4) -.L7F0491C8: -/* 07DCF8 7F0491C8 02802025 */ move $a0, $s4 -/* 07DCFC 7F0491CC 0FC1BBA9 */ jal modelUpdateRelationsQuick -/* 07DD00 7F0491D0 8DE50000 */ lw $a1, ($t7) -/* 07DD04 7F0491D4 8E89000C */ lw $t1, 0xc($s4) -/* 07DD08 7F0491D8 02602025 */ move $a0, $s3 -/* 07DD0C 7F0491DC C52A0038 */ lwc1 $f10, 0x38($t1) -/* 07DD10 7F0491E0 46005207 */ neg.s $f8, $f10 -/* 07DD14 7F0491E4 0FC10F5C */ jal chrobjWeaponTick -/* 07DD18 7F0491E8 E6680018 */ swc1 $f8, 0x18($s3) -/* 07DD1C 7F0491EC 8E640020 */ lw $a0, 0x20($s3) -/* 07DD20 7F0491F0 50800018 */ beql $a0, $zero, .L7F049254 -/* 07DD24 7F0491F4 8E230064 */ lw $v1, 0x64($s1) -/* 07DD28 7F0491F8 8C820024 */ lw $v0, 0x24($a0) -.L7F0491FC: -/* 07DD2C 7F0491FC 0FC110B7 */ jal sub_GAME_7F0442DC -/* 07DD30 7F049200 AFA20684 */ sw $v0, 0x684($sp) -/* 07DD34 7F049204 8FA40684 */ lw $a0, 0x684($sp) -/* 07DD38 7F049208 5480FFFC */ bnezl $a0, .L7F0491FC -/* 07DD3C 7F04920C 8C820024 */ lw $v0, 0x24($a0) -/* 07DD40 7F049210 10000010 */ b .L7F049254 -/* 07DD44 7F049214 8E230064 */ lw $v1, 0x64($s1) -.L7F049218: -/* 07DD48 7F049218 92790001 */ lbu $t9, 1($s3) -/* 07DD4C 7F04921C 02602025 */ move $a0, $s3 -/* 07DD50 7F049220 332CFFFD */ andi $t4, $t9, 0xfffd -/* 07DD54 7F049224 0FC10F5C */ jal chrobjWeaponTick -/* 07DD58 7F049228 A26C0001 */ sb $t4, 1($s3) -/* 07DD5C 7F04922C 8E640020 */ lw $a0, 0x20($s3) -/* 07DD60 7F049230 50800008 */ beql $a0, $zero, .L7F049254 -/* 07DD64 7F049234 8E230064 */ lw $v1, 0x64($s1) -/* 07DD68 7F049238 8C820024 */ lw $v0, 0x24($a0) -.L7F04923C: -/* 07DD6C 7F04923C 0FC11093 */ jal sub_GAME_7F04424C -/* 07DD70 7F049240 AFA20684 */ sw $v0, 0x684($sp) -/* 07DD74 7F049244 8FA40684 */ lw $a0, 0x684($sp) -/* 07DD78 7F049248 5480FFFC */ bnezl $a0, .L7F04923C -/* 07DD7C 7F04924C 8C820024 */ lw $v0, 0x24($a0) -/* 07DD80 7F049250 8E230064 */ lw $v1, 0x64($s1) -.L7F049254: -/* 07DD84 7F049254 2401FEFF */ li $at, -257 -/* 07DD88 7F049258 266D0008 */ addiu $t5, $s3, 8 -/* 07DD8C 7F04925C 306A0100 */ andi $t2, $v1, 0x100 -/* 07DD90 7F049260 1140001F */ beqz $t2, .L7F0492E0 -/* 07DD94 7F049264 00617024 */ and $t6, $v1, $at -/* 07DD98 7F049268 AE2E0064 */ sw $t6, 0x64($s1) -/* 07DD9C 7F04926C 0C002914 */ jal randomGetNext -/* 07DDA0 7F049270 AFAD0070 */ sw $t5, 0x70($sp) -/* 07DDA4 7F049274 44822000 */ mtc1 $v0, $f4 -/* 07DDA8 7F049278 02202025 */ move $a0, $s1 -/* 07DDAC 7F04927C 04410005 */ bgez $v0, .L7F049294 -/* 07DDB0 7F049280 468021A0 */ cvt.s.w $f6, $f4 -/* 07DDB4 7F049284 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07DDB8 7F049288 44815000 */ mtc1 $at, $f10 -/* 07DDBC 7F04928C 00000000 */ nop -/* 07DDC0 7F049290 460A3180 */ add.s $f6, $f6, $f10 -.L7F049294: -/* 07DDC4 7F049294 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07DDC8 7F049298 44814000 */ mtc1 $at, $f8 -/* 07DDCC 7F04929C 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 07DDD0 7F0492A0 44815000 */ mtc1 $at, $f10 -/* 07DDD4 7F0492A4 46083102 */ mul.s $f4, $f6, $f8 -/* 07DDD8 7F0492A8 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 07DDDC 7F0492AC 44814000 */ mtc1 $at, $f8 -/* 07DDE0 7F0492B0 8E380064 */ lw $t8, 0x64($s1) -/* 07DDE4 7F0492B4 3C010006 */ lui $at, 6 -/* 07DDE8 7F0492B8 8FA60070 */ lw $a2, 0x70($sp) -/* 07DDEC 7F0492BC 03014024 */ and $t0, $t8, $at -/* 07DDF0 7F0492C0 460A2182 */ mul.s $f6, $f4, $f10 -/* 07DDF4 7F0492C4 00003825 */ move $a3, $zero -/* 07DDF8 7F0492C8 00085C42 */ srl $t3, $t0, 0x11 -/* 07DDFC 7F0492CC AFAB0010 */ sw $t3, 0x10($sp) -/* 07DE00 7F0492D0 46083100 */ add.s $f4, $f6, $f8 -/* 07DE04 7F0492D4 44052000 */ mfc1 $a1, $f4 -/* 07DE08 7F0492D8 0FC13842 */ jal maybe_detonate_object -/* 07DE0C 7F0492DC 00000000 */ nop -.L7F0492E0: -/* 07DE10 7F0492E0 8FAF0678 */ lw $t7, 0x678($sp) -/* 07DE14 7F0492E4 51E0020D */ beql $t7, $zero, .L7F049B1C -/* 07DE18 7F0492E8 8FA90680 */ lw $t1, 0x680($sp) -/* 07DE1C 7F0492EC 92220003 */ lbu $v0, 3($s1) -/* 07DE20 7F0492F0 24010001 */ li $at, 1 -/* 07DE24 7F0492F4 54410006 */ bnel $v0, $at, .L7F049310 -/* 07DE28 7F0492F8 2401000D */ li $at, 13 -/* 07DE2C 7F0492FC 0FC14E8F */ jal sub_GAME_7F053A3C -/* 07DE30 7F049300 8E640004 */ lw $a0, 4($s3) -/* 07DE34 7F049304 10000202 */ b .L7F049B10 -/* 07DE38 7F049308 00000000 */ nop -/* 07DE3C 7F04930C 2401000D */ li $at, 13 -.L7F049310: -/* 07DE40 7F049310 144101FF */ bne $v0, $at, .L7F049B10 -/* 07DE44 7F049314 00000000 */ nop -/* 07DE48 7F049318 0FC2FF01 */ jal lvlGetControlsLockedFlag -/* 07DE4C 7F04931C 00000000 */ nop -/* 07DE50 7F049320 144001FB */ bnez $v0, .L7F049B10 -/* 07DE54 7F049324 00000000 */ nop -/* 07DE58 7F049328 8E700004 */ lw $s0, 4($s3) -/* 07DE5C 7F04932C AFA0013C */ sw $zero, 0x13c($sp) -/* 07DE60 7F049330 AFA00138 */ sw $zero, 0x138($sp) -/* 07DE64 7F049334 8E0900D0 */ lw $t1, 0xd0($s0) -/* 07DE68 7F049338 512001E4 */ beql $t1, $zero, .L7F049ACC -/* 07DE6C 7F04933C 8E980008 */ lw $t8, 8($s4) -/* 07DE70 7F049340 8E390008 */ lw $t9, 8($s1) -/* 07DE74 7F049344 001960C0 */ sll $t4, $t9, 3 -/* 07DE78 7F049348 058201E0 */ bltzl $t4, .L7F049ACC -/* 07DE7C 7F04934C 8E980008 */ lw $t8, 8($s4) -/* 07DE80 7F049350 8E0A00AC */ lw $t2, 0xac($s0) -/* 07DE84 7F049354 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) -/* 07DE88 7F049358 254E0001 */ addiu $t6, $t2, 1 -/* 07DE8C 7F04935C 31CD0001 */ andi $t5, $t6, 1 -/* 07DE90 7F049360 AE0E00AC */ sw $t6, 0xac($s0) -/* 07DE94 7F049364 2DB80001 */ sltiu $t8, $t5, 1 -/* 07DE98 7F049368 AFB8013C */ sw $t8, 0x13c($sp) -/* 07DE9C 7F04936C 8E880008 */ lw $t0, 8($s4) -/* 07DEA0 7F049370 39A90001 */ xori $t1, $t5, 1 -/* 07DEA4 7F049374 2D290001 */ sltiu $t1, $t1, 1 -/* 07DEA8 7F049378 8D0B0008 */ lw $t3, 8($t0) -/* 07DEAC 7F04937C 8D6F0014 */ lw $t7, 0x14($t3) -/* 07DEB0 7F049380 51E00003 */ beql $t7, $zero, .L7F049390 -/* 07DEB4 7F049384 8E1900C0 */ lw $t9, 0xc0($s0) -/* 07DEB8 7F049388 AFA90138 */ sw $t1, 0x138($sp) -/* 07DEBC 7F04938C 8E1900C0 */ lw $t9, 0xc0($s0) -.L7F049390: -/* 07DEC0 7F049390 8D8C837C */ lw $t4, %lo(g_GlobalTimer)($t4) -/* 07DEC4 7F049394 032C082A */ slt $at, $t9, $t4 -/* 07DEC8 7F049398 50200032 */ beql $at, $zero, .L7F049464 -/* 07DECC 7F04939C 8FAF013C */ lw $t7, 0x13c($sp) -/* 07DED0 7F0493A0 8E0400C4 */ lw $a0, 0xc4($s0) -/* 07DED4 7F0493A4 50800008 */ beql $a0, $zero, .L7F0493C8 -/* 07DED8 7F0493A8 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07DEDC 7F0493AC 0C00237C */ jal sndGetPlayingState -/* 07DEE0 7F0493B0 00000000 */ nop -/* 07DEE4 7F0493B4 50400004 */ beql $v0, $zero, .L7F0493C8 -/* 07DEE8 7F0493B8 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07DEEC 7F0493BC 0C002408 */ jal sndDeactivate -/* 07DEF0 7F0493C0 8E0400C4 */ lw $a0, 0xc4($s0) -/* 07DEF4 7F0493C4 8E0400C8 */ lw $a0, 0xc8($s0) -.L7F0493C8: -/* 07DEF8 7F0493C8 50800008 */ beql $a0, $zero, .L7F0493EC -/* 07DEFC 7F0493CC 8E0A00C4 */ lw $t2, 0xc4($s0) -/* 07DF00 7F0493D0 0C00237C */ jal sndGetPlayingState -/* 07DF04 7F0493D4 00000000 */ nop -/* 07DF08 7F0493D8 50400004 */ beql $v0, $zero, .L7F0493EC -/* 07DF0C 7F0493DC 8E0A00C4 */ lw $t2, 0xc4($s0) -/* 07DF10 7F0493E0 0C002408 */ jal sndDeactivate -/* 07DF14 7F0493E4 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07DF18 7F0493E8 8E0A00C4 */ lw $t2, 0xc4($s0) -.L7F0493EC: -/* 07DF1C 7F0493EC 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 07DF20 7F0493F0 240500FD */ li $a1, 253 -/* 07DF24 7F0493F4 1540000A */ bnez $t2, .L7F049420 -/* 07DF28 7F0493F8 260600C4 */ addiu $a2, $s0, 0xc4 -/* 07DF2C 7F0493FC 266E0008 */ addiu $t6, $s3, 8 -/* 07DF30 7F049400 AFAE0070 */ sw $t6, 0x70($sp) -/* 07DF34 7F049404 0C002382 */ jal sndPlaySfx -/* 07DF38 7F049408 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07DF3C 7F04940C 8E0400C4 */ lw $a0, 0xc4($s0) -/* 07DF40 7F049410 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 07DF44 7F049414 8FA50070 */ lw $a1, 0x70($sp) -/* 07DF48 7F049418 1000000D */ b .L7F049450 -/* 07DF4C 7F04941C 00000000 */ nop -.L7F049420: -/* 07DF50 7F049420 8E0D00C8 */ lw $t5, 0xc8($s0) -/* 07DF54 7F049424 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 07DF58 7F049428 240500FD */ li $a1, 253 -/* 07DF5C 7F04942C 15A00008 */ bnez $t5, .L7F049450 -/* 07DF60 7F049430 260600C8 */ addiu $a2, $s0, 0xc8 -/* 07DF64 7F049434 26780008 */ addiu $t8, $s3, 8 -/* 07DF68 7F049438 AFB80070 */ sw $t8, 0x70($sp) -/* 07DF6C 7F04943C 0C002382 */ jal sndPlaySfx -/* 07DF70 7F049440 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07DF74 7F049444 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07DF78 7F049448 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 07DF7C 7F04944C 8FA50070 */ lw $a1, 0x70($sp) -.L7F049450: -/* 07DF80 7F049450 3C088005 */ lui $t0, %hi(g_GlobalTimer) -/* 07DF84 7F049454 8D08837C */ lw $t0, %lo(g_GlobalTimer)($t0) -/* 07DF88 7F049458 250B0002 */ addiu $t3, $t0, 2 -/* 07DF8C 7F04945C AE0B00C0 */ sw $t3, 0xc0($s0) -/* 07DF90 7F049460 8FAF013C */ lw $t7, 0x13c($sp) -.L7F049464: -/* 07DF94 7F049464 8FA90138 */ lw $t1, 0x138($sp) -/* 07DF98 7F049468 24190001 */ li $t9, 1 -/* 07DF9C 7F04946C 55E00004 */ bnezl $t7, .L7F049480 -/* 07DFA0 7F049470 AFB9011C */ sw $t9, 0x11c($sp) -/* 07DFA4 7F049474 51200195 */ beql $t1, $zero, .L7F049ACC -/* 07DFA8 7F049478 8E980008 */ lw $t8, 8($s4) -/* 07DFAC 7F04947C AFB9011C */ sw $t9, 0x11c($sp) -.L7F049480: -/* 07DFB0 7F049480 AFA0010C */ sw $zero, 0x10c($sp) -/* 07DFB4 7F049484 8E6C0014 */ lw $t4, 0x14($s3) -/* 07DFB8 7F049488 AFAC0108 */ sw $t4, 0x108($sp) -/* 07DFBC 7F04948C 8E0A00AC */ lw $t2, 0xac($s0) -/* 07DFC0 7F049490 314E0003 */ andi $t6, $t2, 3 -/* 07DFC4 7F049494 2DCD0001 */ sltiu $t5, $t6, 1 -/* 07DFC8 7F049498 0FC225E6 */ jal get_curplayer_positiondata -/* 07DFCC 7F04949C AFAD0104 */ sw $t5, 0x104($sp) -/* 07DFD0 7F0494A0 AFA20100 */ sw $v0, 0x100($sp) -/* 07DFD4 7F0494A4 8E980008 */ lw $t8, 8($s4) -/* 07DFD8 7F0494A8 24040005 */ li $a0, 5 -/* 07DFDC 7F0494AC 8F030008 */ lw $v1, 8($t8) -/* 07DFE0 7F0494B0 8C68001C */ lw $t0, 0x1c($v1) -/* 07DFE4 7F0494B4 51000007 */ beql $t0, $zero, .L7F0494D4 -/* 07DFE8 7F0494B8 92690001 */ lbu $t1, 1($s3) -/* 07DFEC 7F0494BC 8E0B00AC */ lw $t3, 0xac($s0) -/* 07DFF0 7F0494C0 316F0007 */ andi $t7, $t3, 7 -/* 07DFF4 7F0494C4 55E00003 */ bnezl $t7, .L7F0494D4 -/* 07DFF8 7F0494C8 92690001 */ lbu $t1, 1($s3) -/* 07DFFC 7F0494CC 24040007 */ li $a0, 7 -/* 07E000 7F0494D0 92690001 */ lbu $t1, 1($s3) -.L7F0494D4: -/* 07E004 7F0494D4 31390002 */ andi $t9, $t1, 2 -/* 07E008 7F0494D8 1320002D */ beqz $t9, .L7F049590 -/* 07E00C 7F0494DC 00048880 */ sll $s1, $a0, 2 -/* 07E010 7F0494E0 00716021 */ addu $t4, $v1, $s1 -/* 07E014 7F0494E4 8D850000 */ lw $a1, ($t4) -/* 07E018 7F0494E8 02802025 */ move $a0, $s4 -/* 07E01C 7F0494EC 50A00029 */ beql $a1, $zero, .L7F049594 -/* 07E020 7F0494F0 C6640008 */ lwc1 $f4, 8($s3) -/* 07E024 7F0494F4 0FC1B198 */ jal modelFindNodeMtx -/* 07E028 7F0494F8 00003025 */ move $a2, $zero -/* 07E02C 7F0494FC 8E8A0008 */ lw $t2, 8($s4) -/* 07E030 7F049500 00409025 */ move $s2, $v0 -/* 07E034 7F049504 8D4E0008 */ lw $t6, 8($t2) -/* 07E038 7F049508 01D16821 */ addu $t5, $t6, $s1 -/* 07E03C 7F04950C 8DB80000 */ lw $t8, ($t5) -/* 07E040 7F049510 8F030004 */ lw $v1, 4($t8) -/* 07E044 7F049514 C46A0000 */ lwc1 $f10, ($v1) -/* 07E048 7F049518 E7AA012C */ swc1 $f10, 0x12c($sp) -/* 07E04C 7F04951C C4660004 */ lwc1 $f6, 4($v1) -/* 07E050 7F049520 E7A60130 */ swc1 $f6, 0x130($sp) -/* 07E054 7F049524 C4680008 */ lwc1 $f8, 8($v1) -/* 07E058 7F049528 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 07E05C 7F04952C E7A80134 */ swc1 $f8, 0x134($sp) -/* 07E060 7F049530 27B100B8 */ addiu $s1, $sp, 0xb8 -/* 07E064 7F049534 02203025 */ move $a2, $s1 -/* 07E068 7F049538 00402025 */ move $a0, $v0 -/* 07E06C 7F04953C 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 07E070 7F049540 02402825 */ move $a1, $s2 -/* 07E074 7F049544 02202025 */ move $a0, $s1 -/* 07E078 7F049548 0FC1611D */ jal mtx4TransformVecInPlace -/* 07E07C 7F04954C 27A5012C */ addiu $a1, $sp, 0x12c -/* 07E080 7F049550 C7A40134 */ lwc1 $f4, 0x134($sp) -/* 07E084 7F049554 8E650008 */ lw $a1, 8($s3) -/* 07E088 7F049558 8E660010 */ lw $a2, 0x10($s3) -/* 07E08C 7F04955C 27A40108 */ addiu $a0, $sp, 0x108 -/* 07E090 7F049560 8FA7012C */ lw $a3, 0x12c($sp) -/* 07E094 7F049564 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 07E098 7F049568 E7A40010 */ swc1 $f4, 0x10($sp) -/* 07E09C 7F04956C 1440000E */ bnez $v0, .L7F0495A8 -/* 07E0A0 7F049570 00000000 */ nop -/* 07E0A4 7F049574 C66A0008 */ lwc1 $f10, 8($s3) -/* 07E0A8 7F049578 E7AA012C */ swc1 $f10, 0x12c($sp) -/* 07E0AC 7F04957C C666000C */ lwc1 $f6, 0xc($s3) -/* 07E0B0 7F049580 E7A60130 */ swc1 $f6, 0x130($sp) -/* 07E0B4 7F049584 C6680010 */ lwc1 $f8, 0x10($s3) -/* 07E0B8 7F049588 10000007 */ b .L7F0495A8 -/* 07E0BC 7F04958C E7A80134 */ swc1 $f8, 0x134($sp) -.L7F049590: -/* 07E0C0 7F049590 C6640008 */ lwc1 $f4, 8($s3) -.L7F049594: -/* 07E0C4 7F049594 E7A4012C */ swc1 $f4, 0x12c($sp) -/* 07E0C8 7F049598 C66A000C */ lwc1 $f10, 0xc($s3) -/* 07E0CC 7F04959C E7AA0130 */ swc1 $f10, 0x130($sp) -/* 07E0D0 7F0495A0 C6660010 */ lwc1 $f6, 0x10($s3) -/* 07E0D4 7F0495A4 E7A60134 */ swc1 $f6, 0x134($sp) -.L7F0495A8: -/* 07E0D8 7F0495A8 0FC15FA8 */ jal cosf -/* 07E0DC 7F0495AC C60C009C */ lwc1 $f12, 0x9c($s0) -/* 07E0E0 7F0495B0 C60C0090 */ lwc1 $f12, 0x90($s0) -/* 07E0E4 7F0495B4 0FC15FAB */ jal sinf -/* 07E0E8 7F0495B8 E7A0007C */ swc1 $f0, 0x7c($sp) -/* 07E0EC 7F0495BC C7A2007C */ lwc1 $f2, 0x7c($sp) -/* 07E0F0 7F0495C0 46020202 */ mul.s $f8, $f0, $f2 -/* 07E0F4 7F0495C4 E7A80120 */ swc1 $f8, 0x120($sp) -/* 07E0F8 7F0495C8 0FC15FAB */ jal sinf -/* 07E0FC 7F0495CC C60C009C */ lwc1 $f12, 0x9c($s0) -/* 07E100 7F0495D0 E7A00124 */ swc1 $f0, 0x124($sp) -/* 07E104 7F0495D4 0FC15FA8 */ jal cosf -/* 07E108 7F0495D8 C60C009C */ lwc1 $f12, 0x9c($s0) -/* 07E10C 7F0495DC C60C0090 */ lwc1 $f12, 0x90($s0) -/* 07E110 7F0495E0 0FC15FA8 */ jal cosf -/* 07E114 7F0495E4 E7A0007C */ swc1 $f0, 0x7c($sp) -/* 07E118 7F0495E8 C7A2007C */ lwc1 $f2, 0x7c($sp) -/* 07E11C 7F0495EC 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07E120 7F0495F0 44816000 */ mtc1 $at, $f12 -/* 07E124 7F0495F4 46020382 */ mul.s $f14, $f0, $f2 -/* 07E128 7F0495F8 C7A40120 */ lwc1 $f4, 0x120($sp) -/* 07E12C 7F0495FC C7A6012C */ lwc1 $f6, 0x12c($sp) -/* 07E130 7F049600 460C2282 */ mul.s $f10, $f4, $f12 -/* 07E134 7F049604 C7A40124 */ lwc1 $f4, 0x124($sp) -/* 07E138 7F049608 E7AE0128 */ swc1 $f14, 0x128($sp) -/* 07E13C 7F04960C 46065200 */ add.s $f8, $f10, $f6 -/* 07E140 7F049610 460C2282 */ mul.s $f10, $f4, $f12 -/* 07E144 7F049614 C7A60130 */ lwc1 $f6, 0x130($sp) -/* 07E148 7F049618 460C7102 */ mul.s $f4, $f14, $f12 -/* 07E14C 7F04961C E7A80110 */ swc1 $f8, 0x110($sp) -/* 07E150 7F049620 46065200 */ add.s $f8, $f10, $f6 -/* 07E154 7F049624 C7AA0134 */ lwc1 $f10, 0x134($sp) -/* 07E158 7F049628 460A2180 */ add.s $f6, $f4, $f10 -/* 07E15C 7F04962C E7A80114 */ swc1 $f8, 0x114($sp) -/* 07E160 7F049630 0FC2C731 */ jal sub_GAME_7F0B1CC4 -/* 07E164 7F049634 E7A60118 */ swc1 $f6, 0x118($sp) -/* 07E168 7F049638 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 07E16C 7F04963C 44810000 */ mtc1 $at, $f0 -/* 07E170 7F049640 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07E174 7F049644 44812000 */ mtc1 $at, $f4 -/* 07E178 7F049648 C7A80118 */ lwc1 $f8, 0x118($sp) -/* 07E17C 7F04964C 24080002 */ li $t0, 2 -/* 07E180 7F049650 AFA80014 */ sw $t0, 0x14($sp) -/* 07E184 7F049654 27A40108 */ addiu $a0, $sp, 0x108 -/* 07E188 7F049658 8FA5012C */ lw $a1, 0x12c($sp) -/* 07E18C 7F04965C 8FA60134 */ lw $a2, 0x134($sp) -/* 07E190 7F049660 8FA70110 */ lw $a3, 0x110($sp) -/* 07E194 7F049664 E7B60020 */ swc1 $f22, 0x20($sp) -/* 07E198 7F049668 E7A00018 */ swc1 $f0, 0x18($sp) -/* 07E19C 7F04966C E7A0001C */ swc1 $f0, 0x1c($sp) -/* 07E1A0 7F049670 E7A80010 */ swc1 $f8, 0x10($sp) -/* 07E1A4 7F049674 0FC2C389 */ jal stanTestLineUnobstructed -/* 07E1A8 7F049678 E7A40024 */ swc1 $f4, 0x24($sp) -/* 07E1AC 7F04967C 14400017 */ bnez $v0, .L7F0496DC -/* 07E1B0 7F049680 27A60110 */ addiu $a2, $sp, 0x110 -/* 07E1B4 7F049684 27A4012C */ addiu $a0, $sp, 0x12c -/* 07E1B8 7F049688 0FC09893 */ jal chrlvStanLineDirIntersection -/* 07E1BC 7F04968C 27A50120 */ addiu $a1, $sp, 0x120 -/* 07E1C0 7F049690 3C0141D0 */ li $at, 0x41D00000 # 26.000000 -/* 07E1C4 7F049694 44818000 */ mtc1 $at, $f16 -/* 07E1C8 7F049698 C7A60120 */ lwc1 $f6, 0x120($sp) -/* 07E1CC 7F04969C C7AA0110 */ lwc1 $f10, 0x110($sp) -/* 07E1D0 7F0496A0 C7AE0128 */ lwc1 $f14, 0x128($sp) -/* 07E1D4 7F0496A4 46068202 */ mul.s $f8, $f16, $f6 -/* 07E1D8 7F0496A8 C7A60114 */ lwc1 $f6, 0x114($sp) -/* 07E1DC 7F0496AC 8FAB0108 */ lw $t3, 0x108($sp) -/* 07E1E0 7F0496B0 AFAB010C */ sw $t3, 0x10c($sp) -/* 07E1E4 7F0496B4 46085101 */ sub.s $f4, $f10, $f8 -/* 07E1E8 7F0496B8 C7AA0124 */ lwc1 $f10, 0x124($sp) -/* 07E1EC 7F0496BC 460A8202 */ mul.s $f8, $f16, $f10 -/* 07E1F0 7F0496C0 E7A40110 */ swc1 $f4, 0x110($sp) -/* 07E1F4 7F0496C4 C7AA0118 */ lwc1 $f10, 0x118($sp) -/* 07E1F8 7F0496C8 46083101 */ sub.s $f4, $f6, $f8 -/* 07E1FC 7F0496CC 460E8182 */ mul.s $f6, $f16, $f14 -/* 07E200 7F0496D0 E7A40114 */ swc1 $f4, 0x114($sp) -/* 07E204 7F0496D4 46065201 */ sub.s $f8, $f10, $f6 -/* 07E208 7F0496D8 E7A80118 */ swc1 $f8, 0x118($sp) -.L7F0496DC: -/* 07E20C 7F0496DC 3C0F8005 */ lui $t7, %hi(g_GlobalTimer) -/* 07E210 7F0496E0 8DEF837C */ lw $t7, %lo(g_GlobalTimer)($t7) -/* 07E214 7F0496E4 8E0900BC */ lw $t1, 0xbc($s0) -/* 07E218 7F0496E8 27B10110 */ addiu $s1, $sp, 0x110 -/* 07E21C 7F0496EC 8FA50100 */ lw $a1, 0x100($sp) -/* 07E220 7F0496F0 15E90052 */ bne $t7, $t1, .L7F04983C -/* 07E224 7F0496F4 C7AA012C */ lwc1 $f10, 0x12c($sp) -/* 07E228 7F0496F8 C4A40008 */ lwc1 $f4, 8($a1) -/* 07E22C 7F0496FC C4A6000C */ lwc1 $f6, 0xc($a1) -/* 07E230 7F049700 C7A80130 */ lwc1 $f8, 0x130($sp) -/* 07E234 7F049704 460A2001 */ sub.s $f0, $f4, $f10 -/* 07E238 7F049708 C4A40010 */ lwc1 $f4, 0x10($a1) -/* 07E23C 7F04970C E7AA0058 */ swc1 $f10, 0x58($sp) -/* 07E240 7F049710 46083081 */ sub.s $f2, $f6, $f8 -/* 07E244 7F049714 C7A60134 */ lwc1 $f6, 0x134($sp) -/* 07E248 7F049718 46062301 */ sub.s $f12, $f4, $f6 -/* 07E24C 7F04971C 46000102 */ mul.s $f4, $f0, $f0 -/* 07E250 7F049720 00000000 */ nop -/* 07E254 7F049724 46021282 */ mul.s $f10, $f2, $f2 -/* 07E258 7F049728 460A2100 */ add.s $f4, $f4, $f10 -/* 07E25C 7F04972C 460C6282 */ mul.s $f10, $f12, $f12 -/* 07E260 7F049730 460A2500 */ add.s $f20, $f4, $f10 -/* 07E264 7F049734 C7AA0058 */ lwc1 $f10, 0x58($sp) -/* 07E268 7F049738 C7A40110 */ lwc1 $f4, 0x110($sp) -/* 07E26C 7F04973C 460A2001 */ sub.s $f0, $f4, $f10 -/* 07E270 7F049740 C7A40114 */ lwc1 $f4, 0x114($sp) -/* 07E274 7F049744 C7AA0118 */ lwc1 $f10, 0x118($sp) -/* 07E278 7F049748 46082081 */ sub.s $f2, $f4, $f8 -/* 07E27C 7F04974C 46000102 */ mul.s $f4, $f0, $f0 -/* 07E280 7F049750 46065301 */ sub.s $f12, $f10, $f6 -/* 07E284 7F049754 46021202 */ mul.s $f8, $f2, $f2 -/* 07E288 7F049758 46082280 */ add.s $f10, $f4, $f8 -/* 07E28C 7F04975C 460C6182 */ mul.s $f6, $f12, $f12 -/* 07E290 7F049760 46065100 */ add.s $f4, $f10, $f6 -/* 07E294 7F049764 4604A03E */ c.le.s $f20, $f4 -/* 07E298 7F049768 00000000 */ nop -/* 07E29C 7F04976C 45000033 */ bc1f .L7F04983C -/* 07E2A0 7F049770 00000000 */ nop -/* 07E2A4 7F049774 0FC227A9 */ jal bondviewGetIfCurrentPlayerDamageShowTime -/* 07E2A8 7F049778 00000000 */ nop -/* 07E2AC 7F04977C 54400030 */ bnezl $v0, .L7F049840 -/* 07E2B0 7F049780 8FB9011C */ lw $t9, 0x11c($sp) -/* 07E2B4 7F049784 0C007DF8 */ jal sqrtf -/* 07E2B8 7F049788 4600A306 */ mov.s $f12, $f20 -/* 07E2BC 7F04978C 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 07E2C0 7F049790 44816000 */ mtc1 $at, $f12 -/* 07E2C4 7F049794 3C018005 */ lui $at, %hi(D_80052B74) -/* 07E2C8 7F049798 C4282B74 */ lwc1 $f8, %lo(D_80052B74)($at) -/* 07E2CC 7F04979C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07E2D0 7F0497A0 C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07E2D4 7F0497A4 3C018003 */ lui $at, %hi(g_AutogunPendingDamageTick) -/* 07E2D8 7F0497A8 4600603C */ c.lt.s $f12, $f0 -/* 07E2DC 7F0497AC 460A4182 */ mul.s $f6, $f8, $f10 -/* 07E2E0 7F0497B0 C4240B1C */ lwc1 $f4, %lo(g_AutogunPendingDamageTick)($at) -/* 07E2E4 7F0497B4 46043082 */ mul.s $f2, $f6, $f4 -/* 07E2E8 7F0497B8 45020005 */ bc1fl .L7F0497D0 -/* 07E2EC 7F0497BC C60A00D4 */ lwc1 $f10, 0xd4($s0) -/* 07E2F0 7F0497C0 46006203 */ div.s $f8, $f12, $f0 -/* 07E2F4 7F0497C4 46081082 */ mul.s $f2, $f2, $f8 -/* 07E2F8 7F0497C8 00000000 */ nop -/* 07E2FC 7F0497CC C60A00D4 */ lwc1 $f10, 0xd4($s0) -.L7F0497D0: -/* 07E300 7F0497D0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07E304 7F0497D4 44814000 */ mtc1 $at, $f8 -/* 07E308 7F0497D8 46025180 */ add.s $f6, $f10, $f2 -/* 07E30C 7F0497DC E60600D4 */ swc1 $f6, 0xd4($s0) -/* 07E310 7F0497E0 C60400D4 */ lwc1 $f4, 0xd4($s0) -/* 07E314 7F0497E4 4604403E */ c.le.s $f8, $f4 -/* 07E318 7F0497E8 00000000 */ nop -/* 07E31C 7F0497EC 45020014 */ bc1fl .L7F049840 -/* 07E320 7F0497F0 8FB9011C */ lw $t9, 0x11c($sp) -/* 07E324 7F0497F4 0FC177E1 */ jal bondwalkItemGetDestructionAmount -/* 07E328 7F0497F8 2404000E */ li $a0, 14 -/* 07E32C 7F0497FC 3C013E00 */ li $at, 0x3E000000 # 0.125000 -/* 07E330 7F049800 44815000 */ mtc1 $at, $f10 -/* 07E334 7F049804 3C018003 */ lui $at, %hi(g_AutogunDamageScalar) -/* 07E338 7F049808 C4240B20 */ lwc1 $f4, %lo(g_AutogunDamageScalar)($at) -/* 07E33C 7F04980C 460A0182 */ mul.s $f6, $f0, $f10 -/* 07E340 7F049810 C60E0090 */ lwc1 $f14, 0x90($s0) -/* 07E344 7F049814 2406FFFF */ li $a2, -1 -/* 07E348 7F049818 24070001 */ li $a3, 1 -/* 07E34C 7F04981C 46043302 */ mul.s $f12, $f6, $f4 -/* 07E350 7F049820 0FC22793 */ jal bondviewCallRecordDamageKills -/* 07E354 7F049824 00000000 */ nop -/* 07E358 7F049828 0FC227A9 */ jal bondviewGetIfCurrentPlayerDamageShowTime -/* 07E35C 7F04982C E61600D4 */ swc1 $f22, 0xd4($s0) -/* 07E360 7F049830 50400003 */ beql $v0, $zero, .L7F049840 -/* 07E364 7F049834 8FB9011C */ lw $t9, 0x11c($sp) -/* 07E368 7F049838 AFA0011C */ sw $zero, 0x11c($sp) -.L7F04983C: -/* 07E36C 7F04983C 8FB9011C */ lw $t9, 0x11c($sp) -.L7F049840: -/* 07E370 7F049840 3C0141D0 */ li $at, 0x41D00000 # 26.000000 -/* 07E374 7F049844 44818000 */ mtc1 $at, $f16 -/* 07E378 7F049848 1320000F */ beqz $t9, .L7F049888 -/* 07E37C 7F04984C 8FA50100 */ lw $a1, 0x100($sp) -/* 07E380 7F049850 8FAC010C */ lw $t4, 0x10c($sp) -/* 07E384 7F049854 02202025 */ move $a0, $s1 -/* 07E388 7F049858 24050001 */ li $a1, 1 -/* 07E38C 7F04985C 51800005 */ beql $t4, $zero, .L7F049874 -/* 07E390 7F049860 2404000E */ li $a0, 14 -/* 07E394 7F049864 44068000 */ mfc1 $a2, $f16 -/* 07E398 7F049868 0FC28F87 */ jal sub_GAME_7F0A3E1C -/* 07E39C 7F04986C 91870003 */ lbu $a3, 3($t4) -/* 07E3A0 7F049870 2404000E */ li $a0, 14 -.L7F049874: -/* 07E3A4 7F049874 02202825 */ move $a1, $s1 -/* 07E3A8 7F049878 0FC191DD */ jal recall_joy2_hits_edit_flag -/* 07E3AC 7F04987C 2406FFFF */ li $a2, -1 -/* 07E3B0 7F049880 1000000B */ b .L7F0498B0 -/* 07E3B4 7F049884 8FAA0104 */ lw $t2, 0x104($sp) -.L7F049888: -/* 07E3B8 7F049888 C4A80008 */ lwc1 $f8, 8($a1) -/* 07E3BC 7F04988C 2404000E */ li $a0, 14 -/* 07E3C0 7F049890 2406FFFF */ li $a2, -1 -/* 07E3C4 7F049894 E7A80110 */ swc1 $f8, 0x110($sp) -/* 07E3C8 7F049898 C4AA000C */ lwc1 $f10, 0xc($a1) -/* 07E3CC 7F04989C E7AA0114 */ swc1 $f10, 0x114($sp) -/* 07E3D0 7F0498A0 C4A60010 */ lwc1 $f6, 0x10($a1) -/* 07E3D4 7F0498A4 0FC19107 */ jal recall_joy2_hits_edit_detail_edit_flag -/* 07E3D8 7F0498A8 E7A60118 */ swc1 $f6, 0x118($sp) -/* 07E3DC 7F0498AC 8FAA0104 */ lw $t2, 0x104($sp) -.L7F0498B0: -/* 07E3E0 7F0498B0 C7A4012C */ lwc1 $f4, 0x12c($sp) -/* 07E3E4 7F0498B4 51400085 */ beql $t2, $zero, .L7F049ACC -/* 07E3E8 7F0498B8 8E980008 */ lw $t8, 8($s4) -/* 07E3EC 7F0498BC 8E0300CC */ lw $v1, 0xcc($s0) -/* 07E3F0 7F0498C0 E4640004 */ swc1 $f4, 4($v1) -/* 07E3F4 7F0498C4 C7A80130 */ lwc1 $f8, 0x130($sp) -/* 07E3F8 7F0498C8 C4640004 */ lwc1 $f4, 4($v1) -/* 07E3FC 7F0498CC E4680008 */ swc1 $f8, 8($v1) -/* 07E400 7F0498D0 C7AA0134 */ lwc1 $f10, 0x134($sp) -/* 07E404 7F0498D4 E46A000C */ swc1 $f10, 0xc($v1) -/* 07E408 7F0498D8 C7A60110 */ lwc1 $f6, 0x110($sp) -/* 07E40C 7F0498DC 46043201 */ sub.s $f8, $f6, $f4 -/* 07E410 7F0498E0 C4660008 */ lwc1 $f6, 8($v1) -/* 07E414 7F0498E4 E4680010 */ swc1 $f8, 0x10($v1) -/* 07E418 7F0498E8 C7AA0114 */ lwc1 $f10, 0x114($sp) -/* 07E41C 7F0498EC C4620010 */ lwc1 $f2, 0x10($v1) -/* 07E420 7F0498F0 46065101 */ sub.s $f4, $f10, $f6 -/* 07E424 7F0498F4 C46A000C */ lwc1 $f10, 0xc($v1) -/* 07E428 7F0498F8 E4640014 */ swc1 $f4, 0x14($v1) -/* 07E42C 7F0498FC C7A80118 */ lwc1 $f8, 0x118($sp) -/* 07E430 7F049900 46021102 */ mul.s $f4, $f2, $f2 -/* 07E434 7F049904 C46E0014 */ lwc1 $f14, 0x14($v1) -/* 07E438 7F049908 460A4181 */ sub.s $f6, $f8, $f10 -/* 07E43C 7F04990C 460E7202 */ mul.s $f8, $f14, $f14 -/* 07E440 7F049910 E4660018 */ swc1 $f6, 0x18($v1) -/* 07E444 7F049914 C4600018 */ lwc1 $f0, 0x18($v1) -/* 07E448 7F049918 AFA30090 */ sw $v1, 0x90($sp) -/* 07E44C 7F04991C 46000182 */ mul.s $f6, $f0, $f0 -/* 07E450 7F049920 46082280 */ add.s $f10, $f4, $f8 -/* 07E454 7F049924 0C007DF8 */ jal sqrtf -/* 07E458 7F049928 460A3300 */ add.s $f12, $f6, $f10 -/* 07E45C 7F04992C 3C018005 */ lui $at, %hi(D_80052B78) -/* 07E460 7F049930 C42E2B78 */ lwc1 $f14, %lo(D_80052B78)($at) -/* 07E464 7F049934 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07E468 7F049938 44812000 */ mtc1 $at, $f4 -/* 07E46C 7F04993C 8FA30090 */ lw $v1, 0x90($sp) -/* 07E470 7F049940 4600703C */ c.lt.s $f14, $f0 -/* 07E474 7F049944 46000306 */ mov.s $f12, $f0 -/* 07E478 7F049948 46002083 */ div.s $f2, $f4, $f0 -/* 07E47C 7F04994C C4680010 */ lwc1 $f8, 0x10($v1) -/* 07E480 7F049950 C46A0014 */ lwc1 $f10, 0x14($v1) -/* 07E484 7F049954 3C0143FA */ li $at, 0x43FA0000 # 500.000000 -/* 07E488 7F049958 44810000 */ mtc1 $at, $f0 -/* 07E48C 7F04995C 46024182 */ mul.s $f6, $f8, $f2 -/* 07E490 7F049960 C4680018 */ lwc1 $f8, 0x18($v1) -/* 07E494 7F049964 46025102 */ mul.s $f4, $f10, $f2 -/* 07E498 7F049968 E4660010 */ swc1 $f6, 0x10($v1) -/* 07E49C 7F04996C 46024182 */ mul.s $f6, $f8, $f2 -/* 07E4A0 7F049970 E4640014 */ swc1 $f4, 0x14($v1) -/* 07E4A4 7F049974 45000002 */ bc1f .L7F049980 -/* 07E4A8 7F049978 E4660018 */ swc1 $f6, 0x18($v1) -/* 07E4AC 7F04997C 46007306 */ mov.s $f12, $f14 -.L7F049980: -/* 07E4B0 7F049980 4600603C */ c.lt.s $f12, $f0 -/* 07E4B4 7F049984 240E000E */ li $t6, 14 -/* 07E4B8 7F049988 A0600000 */ sb $zero, ($v1) -/* 07E4BC 7F04998C A06E0001 */ sb $t6, 1($v1) -/* 07E4C0 7F049990 45000002 */ bc1f .L7F04999C -/* 07E4C4 7F049994 E46C001C */ swc1 $f12, 0x1c($v1) -/* 07E4C8 7F049998 46000306 */ mov.s $f12, $f0 -.L7F04999C: -/* 07E4CC 7F04999C 806D0001 */ lb $t5, 1($v1) -/* 07E4D0 7F0499A0 24010016 */ li $at, 22 -/* 07E4D4 7F0499A4 15A10026 */ bne $t5, $at, .L7F049A40 -/* 07E4D8 7F0499A8 3C018005 */ lui $at, %hi(D_80052B7C) -/* 07E4DC 7F0499AC C4222B7C */ lwc1 $f2, %lo(D_80052B7C)($at) -/* 07E4E0 7F0499B0 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 07E4E4 7F0499B4 44815000 */ mtc1 $at, $f10 -/* 07E4E8 7F0499B8 3C018005 */ lui $at, %hi(D_80052B80) -/* 07E4EC 7F0499BC 460C5102 */ mul.s $f4, $f10, $f12 -/* 07E4F0 7F0499C0 E4640020 */ swc1 $f4, 0x20($v1) -/* 07E4F4 7F0499C4 C4282B80 */ lwc1 $f8, %lo(D_80052B80)($at) -/* 07E4F8 7F0499C8 460C4002 */ mul.s $f0, $f8, $f12 -/* 07E4FC 7F0499CC 4600103C */ c.lt.s $f2, $f0 -/* 07E500 7F0499D0 E4600024 */ swc1 $f0, 0x24($v1) -/* 07E504 7F0499D4 45020003 */ bc1fl .L7F0499E4 -/* 07E508 7F0499D8 AFA30090 */ sw $v1, 0x90($sp) -/* 07E50C 7F0499DC E4620024 */ swc1 $f2, 0x24($v1) -/* 07E510 7F0499E0 AFA30090 */ sw $v1, 0x90($sp) -.L7F0499E4: -/* 07E514 7F0499E4 0C002914 */ jal randomGetNext -/* 07E518 7F0499E8 E7AC0094 */ swc1 $f12, 0x94($sp) -/* 07E51C 7F0499EC 44823000 */ mtc1 $v0, $f6 -/* 07E520 7F0499F0 8FA30090 */ lw $v1, 0x90($sp) -/* 07E524 7F0499F4 C7AC0094 */ lwc1 $f12, 0x94($sp) -/* 07E528 7F0499F8 04410005 */ bgez $v0, .L7F049A10 -/* 07E52C 7F0499FC 468032A0 */ cvt.s.w $f10, $f6 -/* 07E530 7F049A00 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07E534 7F049A04 44812000 */ mtc1 $at, $f4 -/* 07E538 7F049A08 00000000 */ nop -/* 07E53C 7F049A0C 46045280 */ add.s $f10, $f10, $f4 -.L7F049A10: -/* 07E540 7F049A10 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07E544 7F049A14 44814000 */ mtc1 $at, $f8 -/* 07E548 7F049A18 3C018005 */ lui $at, %hi(D_80052B84) -/* 07E54C 7F049A1C C4242B84 */ lwc1 $f4, %lo(D_80052B84)($at) -/* 07E550 7F049A20 46085182 */ mul.s $f6, $f10, $f8 -/* 07E554 7F049A24 3C018005 */ lui $at, %hi(D_80052B88) -/* 07E558 7F049A28 C4282B88 */ lwc1 $f8, %lo(D_80052B88)($at) -/* 07E55C 7F049A2C 46043282 */ mul.s $f10, $f6, $f4 -/* 07E560 7F049A30 460A4181 */ sub.s $f6, $f8, $f10 -/* 07E564 7F049A34 460C3102 */ mul.s $f4, $f6, $f12 -/* 07E568 7F049A38 10000023 */ b .L7F049AC8 -/* 07E56C 7F049A3C E4640028 */ swc1 $f4, 0x28($v1) -.L7F049A40: -/* 07E570 7F049A40 3C018005 */ lui $at, %hi(D_80052B8C) -/* 07E574 7F049A44 C4282B8C */ lwc1 $f8, %lo(D_80052B8C)($at) -/* 07E578 7F049A48 3C018005 */ lui $at, %hi(D_80052B90) -/* 07E57C 7F049A4C 460C4002 */ mul.s $f0, $f8, $f12 -/* 07E580 7F049A50 E4600020 */ swc1 $f0, 0x20($v1) -/* 07E584 7F049A54 E4600024 */ swc1 $f0, 0x24($v1) -/* 07E588 7F049A58 C42A2B90 */ lwc1 $f10, %lo(D_80052B90)($at) -/* 07E58C 7F049A5C 3C018005 */ lui $at, %hi(D_80052B94) -/* 07E590 7F049A60 4600503C */ c.lt.s $f10, $f0 -/* 07E594 7F049A64 00000000 */ nop -/* 07E598 7F049A68 45000003 */ bc1f .L7F049A78 -/* 07E59C 7F049A6C 00000000 */ nop -/* 07E5A0 7F049A70 C4262B94 */ lwc1 $f6, %lo(D_80052B94)($at) -/* 07E5A4 7F049A74 E4660024 */ swc1 $f6, 0x24($v1) -.L7F049A78: -/* 07E5A8 7F049A78 0C002914 */ jal randomGetNext -/* 07E5AC 7F049A7C AFA30090 */ sw $v1, 0x90($sp) -/* 07E5B0 7F049A80 44822000 */ mtc1 $v0, $f4 -/* 07E5B4 7F049A84 8FA30090 */ lw $v1, 0x90($sp) -/* 07E5B8 7F049A88 04410005 */ bgez $v0, .L7F049AA0 -/* 07E5BC 7F049A8C 46802220 */ cvt.s.w $f8, $f4 -/* 07E5C0 7F049A90 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07E5C4 7F049A94 44815000 */ mtc1 $at, $f10 -/* 07E5C8 7F049A98 00000000 */ nop -/* 07E5CC 7F049A9C 460A4200 */ add.s $f8, $f8, $f10 -.L7F049AA0: -/* 07E5D0 7F049AA0 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07E5D4 7F049AA4 44813000 */ mtc1 $at, $f6 -/* 07E5D8 7F049AA8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07E5DC 7F049AAC 44815000 */ mtc1 $at, $f10 -/* 07E5E0 7F049AB0 46064002 */ mul.s $f0, $f8, $f6 -/* 07E5E4 7F049AB4 C4660020 */ lwc1 $f6, 0x20($v1) -/* 07E5E8 7F049AB8 46000100 */ add.s $f4, $f0, $f0 -/* 07E5EC 7F049ABC 460A2201 */ sub.s $f8, $f4, $f10 -/* 07E5F0 7F049AC0 46064102 */ mul.s $f4, $f8, $f6 -/* 07E5F4 7F049AC4 E4640028 */ swc1 $f4, 0x28($v1) -.L7F049AC8: -/* 07E5F8 7F049AC8 8E980008 */ lw $t8, 8($s4) -.L7F049ACC: -/* 07E5FC 7F049ACC 8F030008 */ lw $v1, 8($t8) -/* 07E600 7F049AD0 8C650014 */ lw $a1, 0x14($v1) -/* 07E604 7F049AD4 50A00008 */ beql $a1, $zero, .L7F049AF8 -/* 07E608 7F049AD8 8C65001C */ lw $a1, 0x1c($v1) -/* 07E60C 7F049ADC 0FC1B1E7 */ jal modelGetNodeRwData -/* 07E610 7F049AE0 02802025 */ move $a0, $s4 -/* 07E614 7F049AE4 8FA8013C */ lw $t0, 0x13c($sp) -/* 07E618 7F049AE8 A4480000 */ sh $t0, ($v0) -/* 07E61C 7F049AEC 8E8B0008 */ lw $t3, 8($s4) -/* 07E620 7F049AF0 8D630008 */ lw $v1, 8($t3) -/* 07E624 7F049AF4 8C65001C */ lw $a1, 0x1c($v1) -.L7F049AF8: -/* 07E628 7F049AF8 10A00005 */ beqz $a1, .L7F049B10 -/* 07E62C 7F049AFC 00000000 */ nop -/* 07E630 7F049B00 0FC1B1E7 */ jal modelGetNodeRwData -/* 07E634 7F049B04 02802025 */ move $a0, $s4 -/* 07E638 7F049B08 8FAF0138 */ lw $t7, 0x138($sp) -/* 07E63C 7F049B0C A44F0000 */ sh $t7, ($v0) -.L7F049B10: -/* 07E640 7F049B10 0FC11080 */ jal objDropRecursively -/* 07E644 7F049B14 02602025 */ move $a0, $s3 -/* 07E648 7F049B18 8FA90680 */ lw $t1, 0x680($sp) -.L7F049B1C: -/* 07E64C 7F049B1C 24010005 */ li $at, 5 -/* 07E650 7F049B20 55210003 */ bnel $t1, $at, .L7F049B30 -/* 07E654 7F049B24 8FA20680 */ lw $v0, 0x680($sp) -/* 07E658 7F049B28 AE600014 */ sw $zero, 0x14($s3) -/* 07E65C 7F049B2C 8FA20680 */ lw $v0, 0x680($sp) -.L7F049B30: -/* 07E660 7F049B30 8FBF0054 */ lw $ra, 0x54($sp) -/* 07E664 7F049B34 D7B40030 */ ldc1 $f20, 0x30($sp) -/* 07E668 7F049B38 D7B60038 */ ldc1 $f22, 0x38($sp) -/* 07E66C 7F049B3C 8FB00040 */ lw $s0, 0x40($sp) -/* 07E670 7F049B40 8FB10044 */ lw $s1, 0x44($sp) -/* 07E674 7F049B44 8FB20048 */ lw $s2, 0x48($sp) -/* 07E678 7F049B48 8FB3004C */ lw $s3, 0x4c($sp) -/* 07E67C 7F049B4C 8FB40050 */ lw $s4, 0x50($sp) -/* 07E680 7F049B50 03E00008 */ jr $ra -/* 07E684 7F049B54 27BD06A8 */ addiu $sp, $sp, 0x6a8 -) + sub_GAME_7F0402B4(obj->prop, (rgba_u8 *) sp100); #endif + detonate_proxmine_In_range((struct coord3d *) objectMatrix); + } -#ifdef VERSION_JP -GLOBAL_ASM( -.late_rodata -glabel rocket_initial_gravity_modifier -.word 0x3e8e38e4 /*0.27777779*/ -glabel D_80052A9C -.word 0x3c360b61 /*0.011111111*/ -glabel D_80052AA0 -.word 0x3d8f5c29 /*0.07*/ -glabel prop_projectile_gravity_modifier -.word 0x3e8e38e4 /*0.27777779*/ -glabel D_80052AA8 -.word 0x400e38e4 /*2.2222223*/ -glabel D_80052AAC -.word 0x46d9038c /*27777.773*/ -glabel D_80052AB0 -.word 0x3f8ccccd /*1.1*/ -glabel D_80052AB4 -.word 0x3f666666 /*0.89999998*/ -glabel D_80052AB8 -.word 0x3f666666 /*0.89999998*/ -glabel D_80052ABC -.word 0x3dcccccd /*0.1*/ -glabel D_80052AC0 -.word 0xbdcccccd /*-0.1*/ -glabel D_80052AC4 -.word 0xbdcccccd /*-0.1*/ -glabel D_80052AC8 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052ACC -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AD0 -.word 0x40490fdb /*3.1415927*/ -glabel D_80052AD4 -.word 0x3f490fdb /*0.78539819*/ -glabel D_80052AD8 -.word 0xbf490fdb /*-0.78539819*/ -glabel D_80052ADC -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AE0 -.word 0x3a2b92a6 /*0.00065449846*/ -glabel D_80052AE4 -.word 0x3a2b92a6 /*0.00065449846*/ -glabel D_80052AE8 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AEC -.word 0x37433637 /*0.000011635529*/ -glabel D_80052AF0 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AF4 -.word 0x3a3702d4 /*0.00069813174*/ -glabel D_80052AF8 -.word 0x36c33637 /*0.0000058177643*/ -glabel D_80052AFC -.word 0x39b702d4 /*0.00034906587*/ -glabel D_80052B00 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B04 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B08 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B0C -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B10 -.word 0x3f9c61ab /*1.2217306*/ -glabel D_80052B14 -.word 0xbf9c61ab /*-1.2217306*/ -glabel D_80052B18 -.word 0xc0490fdb /*-3.1415927*/ -glabel D_80052B1C -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B20 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B24 -.word 0x3f4ccccd /*0.80000001*/ -glabel D_80052B28 -.word 0xc0490fdb /*-3.1415927*/ -glabel D_80052B2C -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B30 -.word 0x3a64c389 /*0.00087266468*/ -glabel D_80052B34 -.word 0x3a64c389 /*0.00087266468*/ -glabel D_80052B38 -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B3C -.word 0x3f1930a7 /*0.59839863*/ -glabel D_80052B40 -.word 0x3c236719 /*0.0099733109*/ -glabel D_80052B44 -.word 0x3f7d70a4 /*0.99000001*/ -glabel D_80052B48 -.word 0x38d1b717 /*0.000099999997*/ -glabel D_80052B4C -.word 0x3964c389 /*0.00021816617*/ -glabel D_80052B50 -.word 0x3bd67750 /*0.0065449849*/ -glabel D_80052B54 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B58 -.word 0x3964c389 /*0.00021816617*/ -glabel D_80052B5C -.word 0xb964c389 /*-0.00021816617*/ -glabel D_80052B60 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B64 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B68 -.word 0x3e99999a /*0.30000001*/ -glabel D_80052B6C -.word 0x3fc90fdb /*1.5707964*/ -glabel D_80052B70 -.word 0x3fc90fdb /*1.5707964*/ -glabel D_80052B74 -.word 0x3e23d70a /*0.16*/ -glabel D_80052B78 -.word 0x461c4000 /*10000.0*/ -glabel D_80052B7C -.word 0x453b8000 /*3000.0*/ -glabel D_80052B80 -.word 0x3f19999a /*0.60000002*/ -glabel D_80052B84 -.word 0x3e99999a /*0.30000001*/ -glabel D_80052B88 -.word 0xbdcccccd /*-0.1*/ -glabel D_80052B8C -.word 0x3e4ccccd /*0.2*/ -glabel D_80052B90 -.word 0x453b8000 /*3000.0*/ -glabel D_80052B94 -.word 0x453b8000 /*3000.0*/ -.text -glabel object_interaction -/* 07A218 7F0456A8 27BDF950 */ addiu $sp, $sp, -0x6b0 -/* 07A21C 7F0456AC AFBF0054 */ sw $ra, 0x54($sp) -/* 07A220 7F0456B0 AFB40050 */ sw $s4, 0x50($sp) -/* 07A224 7F0456B4 AFB3004C */ sw $s3, 0x4c($sp) -/* 07A228 7F0456B8 AFB20048 */ sw $s2, 0x48($sp) -/* 07A22C 7F0456BC AFB10044 */ sw $s1, 0x44($sp) -/* 07A230 7F0456C0 AFB00040 */ sw $s0, 0x40($sp) -/* 07A234 7F0456C4 F7B60038 */ sdc1 $f22, 0x38($sp) -/* 07A238 7F0456C8 F7B40030 */ sdc1 $f20, 0x30($sp) -/* 07A23C 7F0456CC 8C910004 */ lw $s1, 4($a0) -/* 07A240 7F0456D0 4480B000 */ mtc1 $zero, $f22 -/* 07A244 7F0456D4 00809825 */ move $s3, $a0 -/* 07A248 7F0456D8 8E340014 */ lw $s4, 0x14($s1) -/* 07A24C 7F0456DC AFA00698 */ sw $zero, 0x698($sp) -/* 07A250 7F0456E0 AFA00688 */ sw $zero, 0x688($sp) -/* 07A254 7F0456E4 0FC26C01 */ jal getPlayerCount -/* 07A258 7F0456E8 E7B60684 */ swc1 $f22, 0x684($sp) -/* 07A25C 7F0456EC 240F0001 */ li $t7, 1 -/* 07A260 7F0456F0 AFA2067C */ sw $v0, 0x67c($sp) -/* 07A264 7F0456F4 AFAF0678 */ sw $t7, 0x678($sp) -/* 07A268 7F0456F8 8E230064 */ lw $v1, 0x64($s1) -/* 07A26C 7F0456FC 30790004 */ andi $t9, $v1, 4 -/* 07A270 7F045700 13200009 */ beqz $t9, .Ljp7F045728 -/* 07A274 7F045704 30680008 */ andi $t0, $v1, 8 -/* 07A278 7F045708 92260002 */ lbu $a2, 2($s1) -/* 07A27C 7F04570C 02202025 */ move $a0, $s1 -/* 07A280 7F045710 00002825 */ move $a1, $zero -/* 07A284 7F045714 30D80004 */ andi $t8, $a2, 4 -/* 07A288 7F045718 0FC10426 */ jal objFree -/* 07A28C 7F04571C 03003025 */ move $a2, $t8 -/* 07A290 7F045720 10001204 */ b .Ljp7F049F34 -/* 07A294 7F045724 24020001 */ li $v0, 1 -.Ljp7F045728: -/* 07A298 7F045728 11000005 */ beqz $t0, .Ljp7F045740 -/* 07A29C 7F04572C 306B0080 */ andi $t3, $v1, 0x80 -/* 07A2A0 7F045730 2401FFF7 */ li $at, -9 -/* 07A2A4 7F045734 00614824 */ and $t1, $v1, $at -/* 07A2A8 7F045738 1000000B */ b .Ljp7F045768 -/* 07A2AC 7F04573C AE290064 */ sw $t1, 0x64($s1) -.Ljp7F045740: -/* 07A2B0 7F045740 5160000A */ beql $t3, $zero, .Ljp7F04576C -/* 07A2B4 7F045744 24010001 */ li $at, 1 -/* 07A2B8 7F045748 926C0001 */ lbu $t4, 1($s3) -/* 07A2BC 7F04574C 24020003 */ li $v0, 3 -/* 07A2C0 7F045750 318EFFFD */ andi $t6, $t4, 0xfffd -/* 07A2C4 7F045754 A26E0001 */ sb $t6, 1($s3) -/* 07A2C8 7F045758 8E2A0064 */ lw $t2, 0x64($s1) -/* 07A2CC 7F04575C 354D0008 */ ori $t5, $t2, 8 -/* 07A2D0 7F045760 100011F4 */ b .Ljp7F049F34 -/* 07A2D4 7F045764 AE2D0064 */ sw $t5, 0x64($s1) -.Ljp7F045768: -/* 07A2D8 7F045768 24010001 */ li $at, 1 -.Ljp7F04576C: -/* 07A2DC 7F04576C 14410003 */ bne $v0, $at, .Ljp7F04577C -/* 07A2E0 7F045770 240F0001 */ li $t7, 1 -/* 07A2E4 7F045774 10000019 */ b .Ljp7F0457DC -/* 07A2E8 7F045778 AFAF0680 */ sw $t7, 0x680($sp) -.Ljp7F04577C: -/* 07A2EC 7F04577C 0FC26F3C */ jal get_cur_playernum -/* 07A2F0 7F045780 00000000 */ nop -/* 07A2F4 7F045784 0FC2701E */ jal get_player_position_in_shuffled -/* 07A2F8 7F045788 00402025 */ move $a0, $v0 -/* 07A2FC 7F04578C 2C590001 */ sltiu $t9, $v0, 1 -/* 07A300 7F045790 AFB90680 */ sw $t9, 0x680($sp) -/* 07A304 7F045794 8E380064 */ lw $t8, 0x64($s1) -/* 07A308 7F045798 33080080 */ andi $t0, $t8, 0x80 -/* 07A30C 7F04579C 51000010 */ beql $t0, $zero, .Ljp7F0457E0 -/* 07A310 7F0457A0 8FAA0680 */ lw $t2, 0x680($sp) -/* 07A314 7F0457A4 8E30006C */ lw $s0, 0x6c($s1) -/* 07A318 7F0457A8 8E040088 */ lw $a0, 0x88($s0) -/* 07A31C 7F0457AC 5080000C */ beql $a0, $zero, .Ljp7F0457E0 -/* 07A320 7F0457B0 8FAA0680 */ lw $t2, 0x680($sp) -/* 07A324 7F0457B4 0FC26F3F */ jal getPlayerPointerIndex -/* 07A328 7F0457B8 00000000 */ nop -/* 07A32C 7F0457BC 04400007 */ bltz $v0, .Ljp7F0457DC -/* 07A330 7F0457C0 3C098008 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8008 -/* 07A334 7F0457C4 8D29A120 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 07A338 7F0457C8 8E0C0088 */ lw $t4, 0x88($s0) -/* 07A33C 7F0457CC 8D2B00A8 */ lw $t3, 0xa8($t1) -/* 07A340 7F0457D0 016C7026 */ xor $t6, $t3, $t4 -/* 07A344 7F0457D4 2DCE0001 */ sltiu $t6, $t6, 1 -/* 07A348 7F0457D8 AFAE0680 */ sw $t6, 0x680($sp) -.Ljp7F0457DC: -/* 07A34C 7F0457DC 8FAA0680 */ lw $t2, 0x680($sp) -.Ljp7F0457E0: -/* 07A350 7F0457E0 51400B94 */ beql $t2, $zero, .Ljp7F048634 -/* 07A354 7F0457E4 92220003 */ lbu $v0, 3($s1) -/* 07A358 7F0457E8 8E2D0064 */ lw $t5, 0x64($s1) -/* 07A35C 7F0457EC 31AF0080 */ andi $t7, $t5, 0x80 -/* 07A360 7F0457F0 51E0048B */ beql $t7, $zero, .Ljp7F046A20 -/* 07A364 7F0457F4 8FAB0698 */ lw $t3, 0x698($sp) -/* 07A368 7F0457F8 8E30006C */ lw $s0, 0x6c($s1) -/* 07A36C 7F0457FC 3C188005 */ lui $t8, %hi(g_ClockTimer) # $t8, 0x8005 -/* 07A370 7F045800 8F1883A4 */ lw $t8, %lo(g_ClockTimer)($t8) -/* 07A374 7F045804 8E1900E0 */ lw $t9, 0xe0($s0) -/* 07A378 7F045808 03384021 */ addu $t0, $t9, $t8 -/* 07A37C 7F04580C 29010961 */ slti $at, $t0, 0x961 -/* 07A380 7F045810 14200004 */ bnez $at, .Ljp7F045824 -/* 07A384 7F045814 AE0800E0 */ sw $t0, 0xe0($s0) -/* 07A388 7F045818 8E2B0064 */ lw $t3, 0x64($s1) -/* 07A38C 7F04581C 356C0004 */ ori $t4, $t3, 4 -/* 07A390 7F045820 AE2C0064 */ sw $t4, 0x64($s1) -.Ljp7F045824: -/* 07A394 7F045824 8E0E0000 */ lw $t6, ($s0) -/* 07A398 7F045828 31CA0100 */ andi $t2, $t6, 0x100 -/* 07A39C 7F04582C 5140002F */ beql $t2, $zero, .Ljp7F0458EC -/* 07A3A0 7F045830 C6260058 */ lwc1 $f6, 0x58($s1) -/* 07A3A4 7F045834 922D0003 */ lbu $t5, 3($s1) -/* 07A3A8 7F045838 24010008 */ li $at, 8 -/* 07A3AC 7F04583C 24120001 */ li $s2, 1 -/* 07A3B0 7F045840 55A10008 */ bnel $t5, $at, .Ljp7F045864 -/* 07A3B4 7F045844 8E040088 */ lw $a0, 0x88($s0) -/* 07A3B8 7F045848 AFB10650 */ sw $s1, 0x650($sp) -/* 07A3BC 7F04584C 822F0080 */ lb $t7, 0x80($s1) -/* 07A3C0 7F045850 24010056 */ li $at, 86 -/* 07A3C4 7F045854 55E10003 */ bnel $t7, $at, .Ljp7F045864 -/* 07A3C8 7F045858 8E040088 */ lw $a0, 0x88($s0) -/* 07A3CC 7F04585C 00009025 */ move $s2, $zero -/* 07A3D0 7F045860 8E040088 */ lw $a0, 0x88($s0) -.Ljp7F045864: -/* 07A3D4 7F045864 50800004 */ beql $a0, $zero, .Ljp7F045878 -/* 07A3D8 7F045868 02202025 */ move $a0, $s1 -/* 07A3DC 7F04586C 0FC0F4D6 */ jal sub_GAME_7F03D058 -/* 07A3E0 7F045870 00002825 */ move $a1, $zero -/* 07A3E4 7F045874 02202025 */ move $a0, $s1 -.Ljp7F045878: -/* 07A3E8 7F045878 260500D4 */ addiu $a1, $s0, 0xd4 -/* 07A3EC 7F04587C 27A60654 */ addiu $a2, $sp, 0x654 -/* 07A3F0 7F045880 27A70660 */ addiu $a3, $sp, 0x660 -/* 07A3F4 7F045884 AFA00010 */ sw $zero, 0x10($sp) -/* 07A3F8 7F045888 0FC10C6D */ jal sub_GAME_7F042EB4 -/* 07A3FC 7F04588C AFB20014 */ sw $s2, 0x14($sp) -/* 07A400 7F045890 AFA2066C */ sw $v0, 0x66c($sp) -/* 07A404 7F045894 8E040088 */ lw $a0, 0x88($s0) -/* 07A408 7F045898 50800004 */ beql $a0, $zero, .Ljp7F0458AC -/* 07A40C 7F04589C 8FB9066C */ lw $t9, 0x66c($sp) -/* 07A410 7F0458A0 0FC0F4D6 */ jal sub_GAME_7F03D058 -/* 07A414 7F0458A4 24050001 */ li $a1, 1 -/* 07A418 7F0458A8 8FB9066C */ lw $t9, 0x66c($sp) -.Ljp7F0458AC: -/* 07A41C 7F0458AC 24010001 */ li $at, 1 -/* 07A420 7F0458B0 8FA20650 */ lw $v0, 0x650($sp) -/* 07A424 7F0458B4 53210009 */ beql $t9, $at, .Ljp7F0458DC -/* 07A428 7F0458B8 8E080000 */ lw $t0, ($s0) -/* 07A42C 7F0458BC 50400007 */ beql $v0, $zero, .Ljp7F0458DC -/* 07A430 7F0458C0 8E080000 */ lw $t0, ($s0) -/* 07A434 7F0458C4 80580080 */ lb $t8, 0x80($v0) -/* 07A438 7F0458C8 24010056 */ li $at, 86 -/* 07A43C 7F0458CC 57010003 */ bnel $t8, $at, .Ljp7F0458DC -/* 07A440 7F0458D0 8E080000 */ lw $t0, ($s0) -/* 07A444 7F0458D4 A4400082 */ sh $zero, 0x82($v0) -/* 07A448 7F0458D8 8E080000 */ lw $t0, ($s0) -.Ljp7F0458DC: -/* 07A44C 7F0458DC 2401FEFF */ li $at, -257 -/* 07A450 7F0458E0 01014824 */ and $t1, $t0, $at -/* 07A454 7F0458E4 AE090000 */ sw $t1, ($s0) -/* 07A458 7F0458E8 C6260058 */ lwc1 $f6, 0x58($s1) -.Ljp7F0458EC: -/* 07A45C 7F0458EC 3C0B8005 */ lui $t3, %hi(g_ClockTimer) # $t3, 0x8005 -/* 07A460 7F0458F0 3C013F80 */ lui $at, 0x3f80 -/* 07A464 7F0458F4 E7A6069C */ swc1 $f6, 0x69c($sp) -/* 07A468 7F0458F8 C62A005C */ lwc1 $f10, 0x5c($s1) -/* 07A46C 7F0458FC E7AA06A0 */ swc1 $f10, 0x6a0($sp) -/* 07A470 7F045900 C6240060 */ lwc1 $f4, 0x60($s1) -/* 07A474 7F045904 E7A406A4 */ swc1 $f4, 0x6a4($sp) -/* 07A478 7F045908 8E0200BC */ lw $v0, 0xbc($s0) -/* 07A47C 7F04590C 58400005 */ blezl $v0, .Ljp7F045924 -/* 07A480 7F045910 8E2E006C */ lw $t6, 0x6c($s1) -/* 07A484 7F045914 8D6B83A4 */ lw $t3, %lo(g_ClockTimer)($t3) -/* 07A488 7F045918 004B6023 */ subu $t4, $v0, $t3 -/* 07A48C 7F04591C AE0C00BC */ sw $t4, 0xbc($s0) -/* 07A490 7F045920 8E2E006C */ lw $t6, 0x6c($s1) -.Ljp7F045924: -/* 07A494 7F045924 8DCA0000 */ lw $t2, ($t6) -/* 07A498 7F045928 314D0001 */ andi $t5, $t2, 1 -/* 07A49C 7F04592C 51A00351 */ beql $t5, $zero, .Ljp7F046674 -/* 07A4A0 7F045930 C6000060 */ lwc1 $f0, 0x60($s0) -/* 07A4A4 7F045934 0FC100DE */ jal chrobjGetBboxFromObjectRecord -/* 07A4A8 7F045938 02202025 */ move $a0, $s1 -/* 07A4AC 7F04593C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07A4B0 7F045940 44814000 */ mtc1 $at, $f8 -/* 07A4B4 7F045944 3C078005 */ lui $a3, %hi(g_ClockTimer) # $a3, 0x8005 -/* 07A4B8 7F045948 24E783A4 */ addiu $a3, %lo(g_ClockTimer) # addiu $a3, $a3, -0x7c5c -/* 07A4BC 7F04594C AFA20648 */ sw $v0, 0x648($sp) -/* 07A4C0 7F045950 AFA00618 */ sw $zero, 0x618($sp) -/* 07A4C4 7F045954 AFA00614 */ sw $zero, 0x614($sp) -/* 07A4C8 7F045958 AFA0060C */ sw $zero, 0x60c($sp) -/* 07A4CC 7F04595C E7A80640 */ swc1 $f8, 0x640($sp) -/* 07A4D0 7F045960 8E0F00A8 */ lw $t7, 0xa8($s0) -/* 07A4D4 7F045964 8CF90000 */ lw $t9, ($a3) -/* 07A4D8 7F045968 C634005C */ lwc1 $f20, 0x5c($s1) -/* 07A4DC 7F04596C 00009025 */ move $s2, $zero -/* 07A4E0 7F045970 01F9C021 */ addu $t8, $t7, $t9 -/* 07A4E4 7F045974 AE1800A8 */ sw $t8, 0xa8($s0) -/* 07A4E8 7F045978 C6260018 */ lwc1 $f6, 0x18($s1) -/* 07A4EC 7F04597C 3C018005 */ lui $at, %hi(rocket_initial_gravity_modifier) # $at, 0x8005 -/* 07A4F0 7F045980 E7A60634 */ swc1 $f6, 0x634($sp) -/* 07A4F4 7F045984 C62A001C */ lwc1 $f10, 0x1c($s1) -/* 07A4F8 7F045988 E7AA0638 */ swc1 $f10, 0x638($sp) -/* 07A4FC 7F04598C C6240020 */ lwc1 $f4, 0x20($s1) -/* 07A500 7F045990 E7A4063C */ swc1 $f4, 0x63c($sp) -/* 07A504 7F045994 8E030000 */ lw $v1, ($s0) -/* 07A508 7F045998 30680020 */ andi $t0, $v1, 0x20 -/* 07A50C 7F04599C 1100004B */ beqz $t0, .Ljp7F045ACC -/* 07A510 7F0459A0 00000000 */ nop -/* 07A514 7F0459A4 C4322AC8 */ lwc1 $f18, %lo(rocket_initial_gravity_modifier)($at) -/* 07A518 7F0459A8 C600001C */ lwc1 $f0, 0x1c($s0) -/* 07A51C 7F0459AC 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) # $v0, 0x8005 -/* 07A520 7F0459B0 244283B4 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c4c -/* 07A524 7F0459B4 4612003C */ c.lt.s $f0, $f18 -/* 07A528 7F0459B8 00000000 */ nop -/* 07A52C 7F0459BC 4502001C */ bc1fl .Ljp7F045A30 -/* 07A530 7F0459C0 C60000B0 */ lwc1 $f0, 0xb0($s0) -/* 07A534 7F0459C4 C6080014 */ lwc1 $f8, 0x14($s0) -/* 07A538 7F0459C8 C4460000 */ lwc1 $f6, ($v0) -/* 07A53C 7F0459CC C60400B4 */ lwc1 $f4, 0xb4($s0) -/* 07A540 7F0459D0 3C018005 */ lui $at, %hi(D_80052A9C) # $at, 0x8005 -/* 07A544 7F0459D4 46064282 */ mul.s $f10, $f8, $f6 -/* 07A548 7F0459D8 460A2200 */ add.s $f8, $f4, $f10 -/* 07A54C 7F0459DC E60800B4 */ swc1 $f8, 0xb4($s0) -/* 07A550 7F0459E0 C4440000 */ lwc1 $f4, ($v0) -/* 07A554 7F0459E4 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07A558 7F0459E8 C60800B0 */ lwc1 $f8, 0xb0($s0) -/* 07A55C 7F0459EC 46043282 */ mul.s $f10, $f6, $f4 -/* 07A560 7F0459F0 460A4180 */ add.s $f6, $f8, $f10 -/* 07A564 7F0459F4 E60600B0 */ swc1 $f6, 0xb0($s0) -/* 07A568 7F0459F8 C4480000 */ lwc1 $f8, ($v0) -/* 07A56C 7F0459FC C4242ACC */ lwc1 $f4, %lo(D_80052A9C)($at) -/* 07A570 7F045A00 46082282 */ mul.s $f10, $f4, $f8 -/* 07A574 7F045A04 460A0180 */ add.s $f6, $f0, $f10 -/* 07A578 7F045A08 E606001C */ swc1 $f6, 0x1c($s0) -/* 07A57C 7F045A0C C604001C */ lwc1 $f4, 0x1c($s0) -/* 07A580 7F045A10 4604903C */ c.lt.s $f18, $f4 -/* 07A584 7F045A14 00000000 */ nop -/* 07A588 7F045A18 45000002 */ bc1f .Ljp7F045A24 -/* 07A58C 7F045A1C 00000000 */ nop -/* 07A590 7F045A20 E612001C */ swc1 $f18, 0x1c($s0) -.Ljp7F045A24: -/* 07A594 7F045A24 10000029 */ b .Ljp7F045ACC -/* 07A598 7F045A28 8E030000 */ lw $v1, ($s0) -/* 07A59C 7F045A2C C60000B0 */ lwc1 $f0, 0xb0($s0) -.Ljp7F045A30: -/* 07A5A0 7F045A30 C7A806A0 */ lwc1 $f8, 0x6a0($sp) -/* 07A5A4 7F045A34 4600403C */ c.lt.s $f8, $f0 -/* 07A5A8 7F045A38 00000000 */ nop -/* 07A5AC 7F045A3C 45000019 */ bc1f .Ljp7F045AA4 -/* 07A5B0 7F045A40 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07A5B4 7F045A44 C42683B4 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) -/* 07A5B8 7F045A48 C60A0014 */ lwc1 $f10, 0x14($s0) -/* 07A5BC 7F045A4C C60800B4 */ lwc1 $f8, 0xb4($s0) -/* 07A5C0 7F045A50 46065102 */ mul.s $f4, $f10, $f6 -/* 07A5C4 7F045A54 46044280 */ add.s $f10, $f8, $f4 -/* 07A5C8 7F045A58 E60A00B4 */ swc1 $f10, 0xb4($s0) -/* 07A5CC 7F045A5C C42883B4 */ lwc1 $f8, %lo(g_GlobalTimerDelta)($at) -/* 07A5D0 7F045A60 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07A5D4 7F045A64 3C018005 */ lui $at, %hi(D_80052AA0) # $at, 0x8005 -/* 07A5D8 7F045A68 46083102 */ mul.s $f4, $f6, $f8 -/* 07A5DC 7F045A6C 46040280 */ add.s $f10, $f0, $f4 -/* 07A5E0 7F045A70 E60A00B0 */ swc1 $f10, 0xb0($s0) -/* 07A5E4 7F045A74 C7A806A0 */ lwc1 $f8, 0x6a0($sp) -/* 07A5E8 7F045A78 C60600B0 */ lwc1 $f6, 0xb0($s0) -/* 07A5EC 7F045A7C C42A2AD0 */ lwc1 $f10, %lo(D_80052AA0)($at) -/* 07A5F0 7F045A80 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07A5F4 7F045A84 46083101 */ sub.s $f4, $f6, $f8 -/* 07A5F8 7F045A88 46045182 */ mul.s $f6, $f10, $f4 -/* 07A5FC 7F045A8C C42A83B4 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07A600 7F045A90 460A3102 */ mul.s $f4, $f6, $f10 -/* 07A604 7F045A94 46044180 */ add.s $f6, $f8, $f4 -/* 07A608 7F045A98 E7A606A0 */ swc1 $f6, 0x6a0($sp) -/* 07A60C 7F045A9C 1000000B */ b .Ljp7F045ACC -/* 07A610 7F045AA0 8E030000 */ lw $v1, ($s0) -.Ljp7F045AA4: -/* 07A614 7F045AA4 E7A006A0 */ swc1 $f0, 0x6a0($sp) -/* 07A618 7F045AA8 8E090000 */ lw $t1, ($s0) -/* 07A61C 7F045AAC 2401FFDF */ li $at, -33 -/* 07A620 7F045AB0 C60A00B4 */ lwc1 $f10, 0xb4($s0) -/* 07A624 7F045AB4 01215824 */ and $t3, $t1, $at -/* 07A628 7F045AB8 AE0B0000 */ sw $t3, ($s0) -/* 07A62C 7F045ABC 35630010 */ ori $v1, $t3, 0x10 -/* 07A630 7F045AC0 E616001C */ swc1 $f22, 0x1c($s0) -/* 07A634 7F045AC4 AE030000 */ sw $v1, ($s0) -/* 07A638 7F045AC8 E60A0008 */ swc1 $f10, 8($s0) -.Ljp7F045ACC: -/* 07A63C 7F045ACC 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) # $v0, 0x8005 -/* 07A640 7F045AD0 244283B4 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c4c -/* 07A644 7F045AD4 3C018005 */ lui $at, %hi(prop_projectile_gravity_modifier) # $at, 0x8005 -/* 07A648 7F045AD8 306A0010 */ andi $t2, $v1, 0x10 -/* 07A64C 7F045ADC C4322AD4 */ lwc1 $f18, %lo(prop_projectile_gravity_modifier)($at) -/* 07A650 7F045AE0 C4420000 */ lwc1 $f2, ($v0) -/* 07A654 7F045AE4 C600001C */ lwc1 $f0, 0x1c($s0) -/* 07A658 7F045AE8 15400015 */ bnez $t2, .Ljp7F045B40 -/* 07A65C 7F045AEC C6100014 */ lwc1 $f16, 0x14($s0) -/* 07A660 7F045AF0 46008100 */ add.s $f4, $f16, $f0 -/* 07A664 7F045AF4 C6080008 */ lwc1 $f8, 8($s0) -/* 07A668 7F045AF8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07A66C 7F045AFC 46022182 */ mul.s $f6, $f4, $f2 -/* 07A670 7F045B00 46064280 */ add.s $f10, $f8, $f6 -/* 07A674 7F045B04 E60A0008 */ swc1 $f10, 8($s0) -/* 07A678 7F045B08 C4420000 */ lwc1 $f2, ($v0) -/* 07A67C 7F045B0C C60C0008 */ lwc1 $f12, 8($s0) -/* 07A680 7F045B10 44815000 */ mtc1 $at, $f10 -/* 07A684 7F045B14 46029102 */ mul.s $f4, $f18, $f2 -/* 07A688 7F045B18 46046381 */ sub.s $f14, $f12, $f4 -/* 07A68C 7F045B1C 460E6200 */ add.s $f8, $f12, $f14 -/* 07A690 7F045B20 46081182 */ mul.s $f6, $f2, $f8 -/* 07A694 7F045B24 C7A806A0 */ lwc1 $f8, 0x6a0($sp) -/* 07A698 7F045B28 460A3102 */ mul.s $f4, $f6, $f10 -/* 07A69C 7F045B2C 46044180 */ add.s $f6, $f8, $f4 -/* 07A6A0 7F045B30 E7A606A0 */ swc1 $f6, 0x6a0($sp) -/* 07A6A4 7F045B34 E60E0008 */ swc1 $f14, 8($s0) -/* 07A6A8 7F045B38 1000000C */ b .Ljp7F045B6C -/* 07A6AC 7F045B3C C4420000 */ lwc1 $f2, ($v0) -.Ljp7F045B40: -/* 07A6B0 7F045B40 46008200 */ add.s $f8, $f16, $f0 -/* 07A6B4 7F045B44 C60A0008 */ lwc1 $f10, 8($s0) -/* 07A6B8 7F045B48 46024102 */ mul.s $f4, $f8, $f2 -/* 07A6BC 7F045B4C 46045180 */ add.s $f6, $f10, $f4 -/* 07A6C0 7F045B50 E6060008 */ swc1 $f6, 8($s0) -/* 07A6C4 7F045B54 C60A0008 */ lwc1 $f10, 8($s0) -/* 07A6C8 7F045B58 C4420000 */ lwc1 $f2, ($v0) -/* 07A6CC 7F045B5C C7A806A0 */ lwc1 $f8, 0x6a0($sp) -/* 07A6D0 7F045B60 46025102 */ mul.s $f4, $f10, $f2 -/* 07A6D4 7F045B64 46044180 */ add.s $f6, $f8, $f4 -/* 07A6D8 7F045B68 E7A606A0 */ swc1 $f6, 0x6a0($sp) -.Ljp7F045B6C: -/* 07A6DC 7F045B6C C6080010 */ lwc1 $f8, 0x10($s0) -/* 07A6E0 7F045B70 C60A0004 */ lwc1 $f10, 4($s0) -/* 07A6E4 7F045B74 26240018 */ addiu $a0, $s1, 0x18 -/* 07A6E8 7F045B78 46024102 */ mul.s $f4, $f8, $f2 -/* 07A6EC 7F045B7C C6080018 */ lwc1 $f8, 0x18($s0) -/* 07A6F0 7F045B80 26050020 */ addiu $a1, $s0, 0x20 -/* 07A6F4 7F045B84 46045180 */ add.s $f6, $f10, $f4 -/* 07A6F8 7F045B88 E6060004 */ swc1 $f6, 4($s0) -/* 07A6FC 7F045B8C C44A0000 */ lwc1 $f10, ($v0) -/* 07A700 7F045B90 C606000C */ lwc1 $f6, 0xc($s0) -/* 07A704 7F045B94 460A4102 */ mul.s $f4, $f8, $f10 -/* 07A708 7F045B98 46043200 */ add.s $f8, $f6, $f4 -/* 07A70C 7F045B9C C6060004 */ lwc1 $f6, 4($s0) -/* 07A710 7F045BA0 E608000C */ swc1 $f8, 0xc($s0) -/* 07A714 7F045BA4 C4420000 */ lwc1 $f2, ($v0) -/* 07A718 7F045BA8 C7AA069C */ lwc1 $f10, 0x69c($sp) -/* 07A71C 7F045BAC 8CE60000 */ lw $a2, ($a3) -/* 07A720 7F045BB0 46023102 */ mul.s $f4, $f6, $f2 -/* 07A724 7F045BB4 C7A606A4 */ lwc1 $f6, 0x6a4($sp) -/* 07A728 7F045BB8 46045200 */ add.s $f8, $f10, $f4 -/* 07A72C 7F045BBC E7A8069C */ swc1 $f8, 0x69c($sp) -/* 07A730 7F045BC0 C60A000C */ lwc1 $f10, 0xc($s0) -/* 07A734 7F045BC4 AFA50070 */ sw $a1, 0x70($sp) -/* 07A738 7F045BC8 AFA40074 */ sw $a0, 0x74($sp) -/* 07A73C 7F045BCC 46025102 */ mul.s $f4, $f10, $f2 -/* 07A740 7F045BD0 46043200 */ add.s $f8, $f6, $f4 -/* 07A744 7F045BD4 0FC160C6 */ jal sub_GAME_7F057DF8 -/* 07A748 7F045BD8 E7A806A4 */ swc1 $f8, 0x6a4($sp) -/* 07A74C 7F045BDC 922D0003 */ lbu $t5, 3($s1) -/* 07A750 7F045BE0 24010008 */ li $at, 8 -/* 07A754 7F045BE4 55A10013 */ bnel $t5, $at, .Ljp7F045C34 -/* 07A758 7F045BE8 8E040088 */ lw $a0, 0x88($s0) -/* 07A75C 7F045BEC 82220080 */ lb $v0, 0x80($s1) -/* 07A760 7F045BF0 2401001D */ li $at, 29 -/* 07A764 7F045BF4 1041000D */ beq $v0, $at, .Ljp7F045C2C -/* 07A768 7F045BF8 2401001B */ li $at, 27 -/* 07A76C 7F045BFC 1041000B */ beq $v0, $at, .Ljp7F045C2C -/* 07A770 7F045C00 2401001C */ li $at, 28 -/* 07A774 7F045C04 10410009 */ beq $v0, $at, .Ljp7F045C2C -/* 07A778 7F045C08 24010021 */ li $at, 33 -/* 07A77C 7F045C0C 10410007 */ beq $v0, $at, .Ljp7F045C2C -/* 07A780 7F045C10 2401002F */ li $at, 47 -/* 07A784 7F045C14 10410005 */ beq $v0, $at, .Ljp7F045C2C -/* 07A788 7F045C18 24010030 */ li $at, 48 -/* 07A78C 7F045C1C 10410003 */ beq $v0, $at, .Ljp7F045C2C -/* 07A790 7F045C20 24010022 */ li $at, 34 -/* 07A794 7F045C24 54410003 */ bnel $v0, $at, .Ljp7F045C34 -/* 07A798 7F045C28 8E040088 */ lw $a0, 0x88($s0) -.Ljp7F045C2C: -/* 07A79C 7F045C2C 24120001 */ li $s2, 1 -/* 07A7A0 7F045C30 8E040088 */ lw $a0, 0x88($s0) -.Ljp7F045C34: -/* 07A7A4 7F045C34 50800004 */ beql $a0, $zero, .Ljp7F045C48 -/* 07A7A8 7F045C38 02202025 */ move $a0, $s1 -/* 07A7AC 7F045C3C 0FC0F4D6 */ jal sub_GAME_7F03D058 -/* 07A7B0 7F045C40 00002825 */ move $a1, $zero -/* 07A7B4 7F045C44 02202025 */ move $a0, $s1 -.Ljp7F045C48: -/* 07A7B8 7F045C48 27A5069C */ addiu $a1, $sp, 0x69c -/* 07A7BC 7F045C4C 27A6061C */ addiu $a2, $sp, 0x61c -/* 07A7C0 7F045C50 27A70628 */ addiu $a3, $sp, 0x628 -/* 07A7C4 7F045C54 AFB20010 */ sw $s2, 0x10($sp) -/* 07A7C8 7F045C58 0FC10C6D */ jal sub_GAME_7F042EB4 -/* 07A7CC 7F045C5C AFA00014 */ sw $zero, 0x14($sp) -/* 07A7D0 7F045C60 AFA2066C */ sw $v0, 0x66c($sp) -/* 07A7D4 7F045C64 8E040088 */ lw $a0, 0x88($s0) -/* 07A7D8 7F045C68 50800004 */ beql $a0, $zero, .Ljp7F045C7C -/* 07A7DC 7F045C6C 8FB9066C */ lw $t9, 0x66c($sp) -/* 07A7E0 7F045C70 0FC0F4D6 */ jal sub_GAME_7F03D058 -/* 07A7E4 7F045C74 24050001 */ li $a1, 1 -/* 07A7E8 7F045C78 8FB9066C */ lw $t9, 0x66c($sp) -.Ljp7F045C7C: -/* 07A7EC 7F045C7C 240F0001 */ li $t7, 1 -/* 07A7F0 7F045C80 24010002 */ li $at, 2 -/* 07A7F4 7F045C84 17210042 */ bne $t9, $at, .Ljp7F045D90 -/* 07A7F8 7F045C88 AFAF0698 */ sw $t7, 0x698($sp) -/* 07A7FC 7F045C8C 3C038003 */ lui $v1, %hi(D_80030B0C) # $v1, 0x8003 -/* 07A800 7F045C90 8C630B4C */ lw $v1, %lo(D_80030B0C)($v1) -/* 07A804 7F045C94 10600007 */ beqz $v1, .Ljp7F045CB4 -/* 07A808 7F045C98 00000000 */ nop -/* 07A80C 7F045C9C 90620000 */ lbu $v0, ($v1) -/* 07A810 7F045CA0 24010003 */ li $at, 3 -/* 07A814 7F045CA4 1041003A */ beq $v0, $at, .Ljp7F045D90 -/* 07A818 7F045CA8 24010006 */ li $at, 6 -/* 07A81C 7F045CAC 50410039 */ beql $v0, $at, .Ljp7F045D94 -/* 07A820 7F045CB0 8FB9060C */ lw $t9, 0x60c($sp) -.Ljp7F045CB4: -/* 07A824 7F045CB4 10600007 */ beqz $v1, .Ljp7F045CD4 -/* 07A828 7F045CB8 00002025 */ move $a0, $zero -/* 07A82C 7F045CBC 8C620004 */ lw $v0, 4($v1) -/* 07A830 7F045CC0 8C580064 */ lw $t8, 0x64($v0) -/* 07A834 7F045CC4 33080080 */ andi $t0, $t8, 0x80 -/* 07A838 7F045CC8 11000002 */ beqz $t0, .Ljp7F045CD4 -/* 07A83C 7F045CCC 00000000 */ nop -/* 07A840 7F045CD0 24040001 */ li $a0, 1 -.Ljp7F045CD4: -/* 07A844 7F045CD4 5480002F */ bnezl $a0, .Ljp7F045D94 -/* 07A848 7F045CD8 8FB9060C */ lw $t9, 0x60c($sp) -/* 07A84C 7F045CDC 0FC0FF9C */ jal projectileFree -/* 07A850 7F045CE0 02002025 */ move $a0, $s0 -/* 07A854 7F045CE4 8E290064 */ lw $t1, 0x64($s1) -/* 07A858 7F045CE8 2401FF7F */ li $at, -129 -/* 07A85C 7F045CEC AE20006C */ sw $zero, 0x6c($s1) -/* 07A860 7F045CF0 01215824 */ and $t3, $t1, $at -/* 07A864 7F045CF4 AE2B0064 */ sw $t3, 0x64($s1) -/* 07A868 7F045CF8 92620001 */ lbu $v0, 1($s3) -/* 07A86C 7F045CFC 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 07A870 7F045D00 240500F1 */ li $a1, 241 -/* 07A874 7F045D04 304C0008 */ andi $t4, $v0, 8 -/* 07A878 7F045D08 11800003 */ beqz $t4, .Ljp7F045D18 -/* 07A87C 7F045D0C 00003025 */ move $a2, $zero -/* 07A880 7F045D10 344E0010 */ ori $t6, $v0, 0x10 -/* 07A884 7F045D14 A26E0001 */ sb $t6, 1($s3) -.Ljp7F045D18: -/* 07A888 7F045D18 0C002386 */ jal sndPlaySfx -/* 07A88C 7F045D1C 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07A890 7F045D20 00402025 */ move $a0, $v0 -/* 07A894 7F045D24 0FC14FC3 */ jal chrobjSndCreatePostEventDefault -/* 07A898 7F045D28 26650008 */ addiu $a1, $s3, 8 -/* 07A89C 7F045D2C 8E6A0014 */ lw $t2, 0x14($s3) -/* 07A8A0 7F045D30 82240080 */ lb $a0, 0x80($s1) -/* 07A8A4 7F045D34 0FC15F41 */ jal objectivestatusCheckDeposit -/* 07A8A8 7F045D38 91450003 */ lbu $a1, 3($t2) -/* 07A8AC 7F045D3C 02202025 */ move $a0, $s1 -/* 07A8B0 7F045D40 27A5061C */ addiu $a1, $sp, 0x61c -/* 07A8B4 7F045D44 8E660014 */ lw $a2, 0x14($s3) -/* 07A8B8 7F045D48 0FC10F2E */ jal sub_GAME_7F0439B8 -/* 07A8BC 7F045D4C 27A70628 */ addiu $a3, $sp, 0x628 -/* 07A8C0 7F045D50 3C058003 */ lui $a1, %hi(D_80030B0C) # $a1, 0x8003 -/* 07A8C4 7F045D54 8CA50B4C */ lw $a1, %lo(D_80030B0C)($a1) -/* 07A8C8 7F045D58 02602025 */ move $a0, $s3 -/* 07A8CC 7F045D5C 3C068007 */ lui $a2, %hi(g_CurrentProjectileModel) # $a2, 0x8007 -/* 07A8D0 7F045D60 10A0000B */ beqz $a1, .Ljp7F045D90 -/* 07A8D4 7F045D64 3C078007 */ lui $a3, %hi(dword_CODE_bss_80075B74) # $a3, 0x8007 -/* 07A8D8 7F045D68 8E720014 */ lw $s2, 0x14($s3) -/* 07A8DC 7F045D6C 8CC65BB0 */ lw $a2, %lo(g_CurrentProjectileModel)($a2) -/* 07A8E0 7F045D70 0FC10F5B */ jal objEmbed -/* 07A8E4 7F045D74 8CE75BB4 */ lw $a3, %lo(dword_CODE_bss_80075B74)($a3) -/* 07A8E8 7F045D78 10400005 */ beqz $v0, .Ljp7F045D90 -/* 07A8EC 7F045D7C 240D0005 */ li $t5, 5 -/* 07A8F0 7F045D80 AE720014 */ sw $s2, 0x14($s3) -/* 07A8F4 7F045D84 240F0001 */ li $t7, 1 -/* 07A8F8 7F045D88 AFAD0688 */ sw $t5, 0x688($sp) -/* 07A8FC 7F045D8C AFAF060C */ sw $t7, 0x60c($sp) -.Ljp7F045D90: -/* 07A900 7F045D90 8FB9060C */ lw $t9, 0x60c($sp) -.Ljp7F045D94: -/* 07A904 7F045D94 172000EC */ bnez $t9, .Ljp7F046148 -/* 07A908 7F045D98 3C128003 */ lui $s2, %hi(D_80030B0C) # $s2, 0x8003 -/* 07A90C 7F045D9C 8E520B4C */ lw $s2, %lo(D_80030B0C)($s2) -/* 07A910 7F045DA0 524000EA */ beql $s2, $zero, .Ljp7F04614C -/* 07A914 7F045DA4 8FB9060C */ lw $t9, 0x60c($sp) -/* 07A918 7F045DA8 92380003 */ lbu $t8, 3($s1) -/* 07A91C 7F045DAC 24010008 */ li $at, 8 -/* 07A920 7F045DB0 570100E6 */ bnel $t8, $at, .Ljp7F04614C -/* 07A924 7F045DB4 8FB9060C */ lw $t9, 0x60c($sp) -/* 07A928 7F045DB8 82220080 */ lb $v0, 0x80($s1) -/* 07A92C 7F045DBC 24010003 */ li $at, 3 -/* 07A930 7F045DC0 544100C3 */ bnel $v0, $at, .Ljp7F0460D0 -/* 07A934 7F045DC4 24010056 */ li $at, 86 -/* 07A938 7F045DC8 92420000 */ lbu $v0, ($s2) -/* 07A93C 7F045DCC 24010003 */ li $at, 3 -/* 07A940 7F045DD0 1041000D */ beq $v0, $at, .Ljp7F045E08 -/* 07A944 7F045DD4 24010006 */ li $at, 6 -/* 07A948 7F045DD8 544100DC */ bnel $v0, $at, .Ljp7F04614C -/* 07A94C 7F045DDC 8FB9060C */ lw $t9, 0x60c($sp) -/* 07A950 7F045DE0 8E480004 */ lw $t0, 4($s2) -/* 07A954 7F045DE4 510000D9 */ beql $t0, $zero, .Ljp7F04614C -/* 07A958 7F045DE8 8FB9060C */ lw $t9, 0x60c($sp) -/* 07A95C 7F045DEC 0FC26F3F */ jal getPlayerPointerIndex -/* 07A960 7F045DF0 02402025 */ move $a0, $s2 -/* 07A964 7F045DF4 0FC26F3C */ jal get_cur_playernum -/* 07A968 7F045DF8 00409025 */ move $s2, $v0 -/* 07A96C 7F045DFC 105200D2 */ beq $v0, $s2, .Ljp7F046148 -/* 07A970 7F045E00 3C128003 */ lui $s2, %hi(D_80030B0C) # $s2, 0x8003 -/* 07A974 7F045E04 8E520B4C */ lw $s2, %lo(D_80030B0C)($s2) -.Ljp7F045E08: -/* 07A978 7F045E08 8E22006C */ lw $v0, 0x6c($s1) -/* 07A97C 7F045E0C 8E440004 */ lw $a0, 4($s2) -/* 07A980 7F045E10 8C490000 */ lw $t1, ($v0) -/* 07A984 7F045E14 312B0001 */ andi $t3, $t1, 1 -/* 07A988 7F045E18 516000CC */ beql $t3, $zero, .Ljp7F04614C -/* 07A98C 7F045E1C 8FB9060C */ lw $t9, 0x60c($sp) -/* 07A990 7F045E20 8C4C0090 */ lw $t4, 0x90($v0) -/* 07A994 7F045E24 5D8000C9 */ bgtzl $t4, .Ljp7F04614C -/* 07A998 7F045E28 8FB9060C */ lw $t9, 0x60c($sp) -/* 07A99C 7F045E2C 8E2E0064 */ lw $t6, 0x64($s1) -/* 07A9A0 7F045E30 3C068007 */ lui $a2, %hi(flt_CODE_bss_80075B78) # $a2, 0x8007 -/* 07A9A4 7F045E34 24C65BB8 */ addiu $a2, %lo(flt_CODE_bss_80075B78) # addiu $a2, $a2, 0x5bb8 -/* 07A9A8 7F045E38 31CA0020 */ andi $t2, $t6, 0x20 -/* 07A9AC 7F045E3C 114000C2 */ beqz $t2, .Ljp7F046148 -/* 07A9B0 7F045E40 3C058003 */ lui $a1, %hi(bodypartshot) # $a1, 0x8003 -/* 07A9B4 7F045E44 82270080 */ lb $a3, 0x80($s1) -/* 07A9B8 7F045E48 240D0001 */ li $t5, 1 -/* 07A9BC 7F045E4C AFAD0010 */ sw $t5, 0x10($sp) -/* 07A9C0 7F045E50 0FC09D61 */ jal handles_shot_actors -/* 07A9C4 7F045E54 8CA50B50 */ lw $a1, %lo(bodypartshot)($a1) -/* 07A9C8 7F045E58 104000BB */ beqz $v0, .Ljp7F046148 -/* 07A9CC 7F045E5C 240F0001 */ li $t7, 1 -/* 07A9D0 7F045E60 AFAF060C */ sw $t7, 0x60c($sp) -/* 07A9D4 7F045E64 C610008C */ lwc1 $f16, 0x8c($s0) -/* 07A9D8 7F045E68 C7AA0628 */ lwc1 $f10, 0x628($sp) -/* 07A9DC 7F045E6C 4610B03C */ c.lt.s $f22, $f16 -/* 07A9E0 7F045E70 00000000 */ nop -/* 07A9E4 7F045E74 4502001D */ bc1fl .Ljp7F045EEC -/* 07A9E8 7F045E78 8E190000 */ lw $t9, ($s0) -/* 07A9EC 7F045E7C C6020004 */ lwc1 $f2, 4($s0) -/* 07A9F0 7F045E80 C60C0008 */ lwc1 $f12, 8($s0) -/* 07A9F4 7F045E84 C7A4062C */ lwc1 $f4, 0x62c($sp) -/* 07A9F8 7F045E88 460A1182 */ mul.s $f6, $f2, $f10 -/* 07A9FC 7F045E8C C600000C */ lwc1 $f0, 0xc($s0) -/* 07AA00 7F045E90 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07AA04 7F045E94 46046202 */ mul.s $f8, $f12, $f4 -/* 07AA08 7F045E98 46083100 */ add.s $f4, $f6, $f8 -/* 07AA0C 7F045E9C C7A60630 */ lwc1 $f6, 0x630($sp) -/* 07AA10 7F045EA0 46003202 */ mul.s $f8, $f6, $f0 -/* 07AA14 7F045EA4 44813000 */ mtc1 $at, $f6 -/* 07AA18 7F045EA8 46044380 */ add.s $f14, $f8, $f4 -/* 07AA1C 7F045EAC 46068200 */ add.s $f8, $f16, $f6 -/* 07AA20 7F045EB0 46004107 */ neg.s $f4, $f8 -/* 07AA24 7F045EB4 46047382 */ mul.s $f14, $f14, $f4 -/* 07AA28 7F045EB8 00000000 */ nop -/* 07AA2C 7F045EBC 460A7182 */ mul.s $f6, $f14, $f10 -/* 07AA30 7F045EC0 46061200 */ add.s $f8, $f2, $f6 -/* 07AA34 7F045EC4 E6080004 */ swc1 $f8, 4($s0) -/* 07AA38 7F045EC8 C7A4062C */ lwc1 $f4, 0x62c($sp) -/* 07AA3C 7F045ECC 46047282 */ mul.s $f10, $f14, $f4 -/* 07AA40 7F045ED0 460A6180 */ add.s $f6, $f12, $f10 -/* 07AA44 7F045ED4 E6060008 */ swc1 $f6, 8($s0) -/* 07AA48 7F045ED8 C7A80630 */ lwc1 $f8, 0x630($sp) -/* 07AA4C 7F045EDC 46087102 */ mul.s $f4, $f14, $f8 -/* 07AA50 7F045EE0 46040280 */ add.s $f10, $f0, $f4 -/* 07AA54 7F045EE4 E60A000C */ swc1 $f10, 0xc($s0) -/* 07AA58 7F045EE8 8E190000 */ lw $t9, ($s0) -.Ljp7F045EEC: -/* 07AA5C 7F045EEC 33380200 */ andi $t8, $t9, 0x200 -/* 07AA60 7F045EF0 57000004 */ bnezl $t8, .Ljp7F045F04 -/* 07AA64 7F045EF4 8E080090 */ lw $t0, 0x90($s0) -/* 07AA68 7F045EF8 0FC15FF8 */ jal mtxLoadRandomRotation -/* 07AA6C 7F045EFC 8FA40070 */ lw $a0, 0x70($sp) -/* 07AA70 7F045F00 8E080090 */ lw $t0, 0x90($s0) -.Ljp7F045F04: -/* 07AA74 7F045F04 3C058003 */ lui $a1, %hi(D_80030B0C) # $a1, 0x8003 -/* 07AA78 7F045F08 2406FFFF */ li $a2, -1 -/* 07AA7C 7F045F0C 25090001 */ addiu $t1, $t0, 1 -/* 07AA80 7F045F10 AE090090 */ sw $t1, 0x90($s0) -/* 07AA84 7F045F14 8CA50B4C */ lw $a1, %lo(D_80030B0C)($a1) -/* 07AA88 7F045F18 0FC19252 */ jal recall_joy2_hits_edit_detail_edit_flag -/* 07AA8C 7F045F1C 82240080 */ lb $a0, 0x80($s1) -/* 07AA90 7F045F20 3C0B8003 */ lui $t3, %hi(D_80030B0C) # $t3, 0x8003 -/* 07AA94 7F045F24 8D6B0B4C */ lw $t3, %lo(D_80030B0C)($t3) -/* 07AA98 7F045F28 3C028003 */ lui $v0, %hi(bodypartshot) # $v0, 0x8003 -/* 07AA9C 7F045F2C 916C0001 */ lbu $t4, 1($t3) -/* 07AAA0 7F045F30 318E0002 */ andi $t6, $t4, 2 -/* 07AAA4 7F045F34 51C00085 */ beql $t6, $zero, .Ljp7F04614C -/* 07AAA8 7F045F38 8FB9060C */ lw $t9, 0x60c($sp) -/* 07AAAC 7F045F3C 8C420B50 */ lw $v0, %lo(bodypartshot)($v0) -/* 07AAB0 7F045F40 24010064 */ li $at, 100 -/* 07AAB4 7F045F44 10410080 */ beq $v0, $at, .Ljp7F046148 -/* 07AAB8 7F045F48 2401006E */ li $at, 110 -/* 07AABC 7F045F4C 1041007E */ beq $v0, $at, .Ljp7F046148 -/* 07AAC0 7F045F50 3C048007 */ lui $a0, %hi(g_CurrentProjectileModel) # $a0, 0x8007 -/* 07AAC4 7F045F54 3C058007 */ lui $a1, %hi(dword_CODE_bss_80075B74) # $a1, 0x8007 -/* 07AAC8 7F045F58 8CA55BB4 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 07AACC 7F045F5C 8C845BB0 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 07AAD0 7F045F60 0FC1B314 */ jal modelFindNodeMtx -/* 07AAD4 7F045F64 00003025 */ move $a2, $zero -/* 07AAD8 7F045F68 C7A6061C */ lwc1 $f6, 0x61c($sp) -/* 07AADC 7F045F6C C7A80620 */ lwc1 $f8, 0x620($sp) -/* 07AAE0 7F045F70 C7A40624 */ lwc1 $f4, 0x624($sp) -/* 07AAE4 7F045F74 00409025 */ move $s2, $v0 -/* 07AAE8 7F045F78 E7A605D4 */ swc1 $f6, 0x5d4($sp) -/* 07AAEC 7F045F7C E7A805D8 */ swc1 $f8, 0x5d8($sp) -/* 07AAF0 7F045F80 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 07AAF4 7F045F84 E7A405DC */ swc1 $f4, 0x5dc($sp) -/* 07AAF8 7F045F88 00402025 */ move $a0, $v0 -/* 07AAFC 7F045F8C 0FC16265 */ jal mtx4TransformVecInPlace -/* 07AB00 7F045F90 27A505D4 */ addiu $a1, $sp, 0x5d4 -/* 07AB04 7F045F94 C7AA05D4 */ lwc1 $f10, 0x5d4($sp) -/* 07AB08 7F045F98 C6460030 */ lwc1 $f6, 0x30($s2) -/* 07AB0C 7F045F9C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07AB10 7F045FA0 44810000 */ mtc1 $at, $f0 -/* 07AB14 7F045FA4 46065201 */ sub.s $f8, $f10, $f6 -/* 07AB18 7F045FA8 3C048007 */ lui $a0, %hi(g_CurrentProjectileModel) # $a0, 0x8007 -/* 07AB1C 7F045FAC 3C058007 */ lui $a1, %hi(dword_CODE_bss_80075B74) # $a1, 0x8007 -/* 07AB20 7F045FB0 8CA55BB4 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 07AB24 7F045FB4 46004102 */ mul.s $f4, $f8, $f0 -/* 07AB28 7F045FB8 C7A805D8 */ lwc1 $f8, 0x5d8($sp) -/* 07AB2C 7F045FBC 8C845BB0 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 07AB30 7F045FC0 46045180 */ add.s $f6, $f10, $f4 -/* 07AB34 7F045FC4 E7A605D4 */ swc1 $f6, 0x5d4($sp) -/* 07AB38 7F045FC8 C64A0034 */ lwc1 $f10, 0x34($s2) -/* 07AB3C 7F045FCC 460A4101 */ sub.s $f4, $f8, $f10 -/* 07AB40 7F045FD0 46002182 */ mul.s $f6, $f4, $f0 -/* 07AB44 7F045FD4 C7A405DC */ lwc1 $f4, 0x5dc($sp) -/* 07AB48 7F045FD8 46064280 */ add.s $f10, $f8, $f6 -/* 07AB4C 7F045FDC E7AA05D8 */ swc1 $f10, 0x5d8($sp) -/* 07AB50 7F045FE0 C6480038 */ lwc1 $f8, 0x38($s2) -/* 07AB54 7F045FE4 46082181 */ sub.s $f6, $f4, $f8 -/* 07AB58 7F045FE8 46003282 */ mul.s $f10, $f6, $f0 -/* 07AB5C 7F045FEC 460A2200 */ add.s $f8, $f4, $f10 -/* 07AB60 7F045FF0 0FC1B520 */ jal getjointsize -/* 07AB64 7F045FF4 E7A805DC */ swc1 $f8, 0x5dc($sp) -/* 07AB68 7F045FF8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07AB6C 7F045FFC 44813000 */ mtc1 $at, $f6 -/* 07AB70 7F046000 3C018007 */ lui $at, %hi(flt_CODE_bss_80075B88) # $at, 0x8007 -/* 07AB74 7F046004 C42A5BC8 */ lwc1 $f10, %lo(flt_CODE_bss_80075B88)($at) -/* 07AB78 7F046008 46060102 */ mul.s $f4, $f0, $f6 -/* 07AB7C 7F04600C C7A605D4 */ lwc1 $f6, 0x5d4($sp) -/* 07AB80 7F046010 3C048007 */ lui $a0, %hi(g_CurrentProjectileModel) # $a0, 0x8007 -/* 07AB84 7F046014 3C058007 */ lui $a1, %hi(dword_CODE_bss_80075B74) # $a1, 0x8007 -/* 07AB88 7F046018 8CA55BB4 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 07AB8C 7F04601C 8C845BB0 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 07AB90 7F046020 460A2202 */ mul.s $f8, $f4, $f10 -/* 07AB94 7F046024 46083101 */ sub.s $f4, $f6, $f8 -/* 07AB98 7F046028 0FC1B520 */ jal getjointsize -/* 07AB9C 7F04602C E7A405D4 */ swc1 $f4, 0x5d4($sp) -/* 07ABA0 7F046030 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07ABA4 7F046034 44815000 */ mtc1 $at, $f10 -/* 07ABA8 7F046038 3C018007 */ lui $at, %hi(flt_CODE_bss_80075B78) # $at, 0x8007 -/* 07ABAC 7F04603C C4285BCC */ lwc1 $f8, %lo(flt_CODE_bss_80075B78+0x14)($at) -/* 07ABB0 7F046040 460A0182 */ mul.s $f6, $f0, $f10 -/* 07ABB4 7F046044 C7AA05D8 */ lwc1 $f10, 0x5d8($sp) -/* 07ABB8 7F046048 3C048007 */ lui $a0, %hi(g_CurrentProjectileModel) # $a0, 0x8007 -/* 07ABBC 7F04604C 3C058007 */ lui $a1, %hi(dword_CODE_bss_80075B74) # $a1, 0x8007 -/* 07ABC0 7F046050 8CA55BB4 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 07ABC4 7F046054 8C845BB0 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 07ABC8 7F046058 46083102 */ mul.s $f4, $f6, $f8 -/* 07ABCC 7F04605C 46045181 */ sub.s $f6, $f10, $f4 -/* 07ABD0 7F046060 0FC1B520 */ jal getjointsize -/* 07ABD4 7F046064 E7A605D8 */ swc1 $f6, 0x5d8($sp) -/* 07ABD8 7F046068 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07ABDC 7F04606C 44814000 */ mtc1 $at, $f8 -/* 07ABE0 7F046070 3C018007 */ lui $at, %hi(flt_CODE_bss_80075B88) # $at, 0x8007 -/* 07ABE4 7F046074 C4245BD0 */ lwc1 $f4, %lo(flt_CODE_bss_80075B88+0x8)($at) -/* 07ABE8 7F046078 46080282 */ mul.s $f10, $f0, $f8 -/* 07ABEC 7F04607C C7A805DC */ lwc1 $f8, 0x5dc($sp) -/* 07ABF0 7F046080 02402025 */ move $a0, $s2 -/* 07ABF4 7F046084 27A50594 */ addiu $a1, $sp, 0x594 -/* 07ABF8 7F046088 46045182 */ mul.s $f6, $f10, $f4 -/* 07ABFC 7F04608C 46064281 */ sub.s $f10, $f8, $f6 -/* 07AC00 7F046090 0FC168E1 */ jal matrix_4x4_set_inverse_rotation_and_translation -/* 07AC04 7F046094 E7AA05DC */ swc1 $f10, 0x5dc($sp) -/* 07AC08 7F046098 27A40594 */ addiu $a0, $sp, 0x594 -/* 07AC0C 7F04609C 0FC16265 */ jal mtx4TransformVecInPlace -/* 07AC10 7F0460A0 27A505D4 */ addiu $a1, $sp, 0x5d4 -/* 07AC14 7F0460A4 3C048007 */ lui $a0, %hi(g_CurrentProjectileModel) # $a0, 0x8007 -/* 07AC18 7F0460A8 3C058003 */ lui $a1, %hi(bodypartshot) # $a1, 0x8003 -/* 07AC1C 7F0460AC 3C068007 */ lui $a2, %hi(dword_CODE_bss_80075B74) # $a2, 0x8007 -/* 07AC20 7F0460B0 8CC65BB4 */ lw $a2, %lo(dword_CODE_bss_80075B74)($a2) -/* 07AC24 7F0460B4 8CA50B50 */ lw $a1, %lo(bodypartshot)($a1) -/* 07AC28 7F0460B8 8C845BB0 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 07AC2C 7F0460BC 0FC08931 */ jal sub_GAME_7F0221DC -/* 07AC30 7F0460C0 27A705D4 */ addiu $a3, $sp, 0x5d4 -/* 07AC34 7F0460C4 10000021 */ b .Ljp7F04614C -/* 07AC38 7F0460C8 8FB9060C */ lw $t9, 0x60c($sp) -/* 07AC3C 7F0460CC 24010056 */ li $at, 86 -.Ljp7F0460D0: -/* 07AC40 7F0460D0 5441001E */ bnel $v0, $at, .Ljp7F04614C -/* 07AC44 7F0460D4 8FB9060C */ lw $t9, 0x60c($sp) -/* 07AC48 7F0460D8 92420000 */ lbu $v0, ($s2) -/* 07AC4C 7F0460DC 240A0001 */ li $t2, 1 -/* 07AC50 7F0460E0 24010003 */ li $at, 3 -/* 07AC54 7F0460E4 14410008 */ bne $v0, $at, .Ljp7F046108 -/* 07AC58 7F0460E8 AFAA060C */ sw $t2, 0x60c($sp) -/* 07AC5C 7F0460EC 8E440004 */ lw $a0, 4($s2) -/* 07AC60 7F0460F0 26250058 */ addiu $a1, $s1, 0x58 -/* 07AC64 7F0460F4 3C064000 */ lui $a2, 0x4000 -/* 07AC68 7F0460F8 0FC09EC3 */ jal chrlvExplosionDamage -/* 07AC6C 7F0460FC 24070001 */ li $a3, 1 -/* 07AC70 7F046100 10000011 */ b .Ljp7F046148 -/* 07AC74 7F046104 A6200082 */ sh $zero, 0x82($s1) -.Ljp7F046108: -/* 07AC78 7F046108 24010001 */ li $at, 1 -/* 07AC7C 7F04610C 10410004 */ beq $v0, $at, .Ljp7F046120 -/* 07AC80 7F046110 3C0542C8 */ lui $a1, 0x42c8 -/* 07AC84 7F046114 24010004 */ li $at, 4 -/* 07AC88 7F046118 5441000B */ bnel $v0, $at, .Ljp7F046148 -/* 07AC8C 7F04611C A6200082 */ sh $zero, 0x82($s1) -.Ljp7F046120: -/* 07AC90 7F046120 8E220064 */ lw $v0, 0x64($s1) -/* 07AC94 7F046124 3C010006 */ lui $at, 6 -/* 07AC98 7F046128 8E440004 */ lw $a0, 4($s2) -/* 07AC9C 7F04612C 00416824 */ and $t5, $v0, $at -/* 07ACA0 7F046130 000D7C42 */ srl $t7, $t5, 0x11 -/* 07ACA4 7F046134 AFAF0010 */ sw $t7, 0x10($sp) -/* 07ACA8 7F046138 26260058 */ addiu $a2, $s1, 0x58 -/* 07ACAC 7F04613C 0FC13943 */ jal maybe_detonate_object -/* 07ACB0 7F046140 24070056 */ li $a3, 86 -/* 07ACB4 7F046144 A6200082 */ sh $zero, 0x82($s1) -.Ljp7F046148: -/* 07ACB8 7F046148 8FB9060C */ lw $t9, 0x60c($sp) -.Ljp7F04614C: -/* 07ACBC 7F04614C 5720010B */ bnezl $t9, .Ljp7F04657C -/* 07ACC0 7F046150 8E2F0064 */ lw $t7, 0x64($s1) -/* 07ACC4 7F046154 8FB8066C */ lw $t8, 0x66c($sp) -/* 07ACC8 7F046158 57000031 */ bnezl $t8, .Ljp7F046220 -/* 07ACCC 7F04615C 8E090000 */ lw $t1, ($s0) -/* 07ACD0 7F046160 C610008C */ lwc1 $f16, 0x8c($s0) -/* 07ACD4 7F046164 C7A40628 */ lwc1 $f4, 0x628($sp) -/* 07ACD8 7F046168 4610B03C */ c.lt.s $f22, $f16 -/* 07ACDC 7F04616C 00000000 */ nop -/* 07ACE0 7F046170 4502002B */ bc1fl .Ljp7F046220 -/* 07ACE4 7F046174 8E090000 */ lw $t1, ($s0) -/* 07ACE8 7F046178 C6020004 */ lwc1 $f2, 4($s0) -/* 07ACEC 7F04617C C60C0008 */ lwc1 $f12, 8($s0) -/* 07ACF0 7F046180 C7A6062C */ lwc1 $f6, 0x62c($sp) -/* 07ACF4 7F046184 46041202 */ mul.s $f8, $f2, $f4 -/* 07ACF8 7F046188 C600000C */ lwc1 $f0, 0xc($s0) -/* 07ACFC 7F04618C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07AD00 7F046190 46066282 */ mul.s $f10, $f12, $f6 -/* 07AD04 7F046194 4616603E */ c.le.s $f12, $f22 -/* 07AD08 7F046198 460A4180 */ add.s $f6, $f8, $f10 -/* 07AD0C 7F04619C C7A80630 */ lwc1 $f8, 0x630($sp) -/* 07AD10 7F0461A0 46004282 */ mul.s $f10, $f8, $f0 -/* 07AD14 7F0461A4 44814000 */ mtc1 $at, $f8 -/* 07AD18 7F0461A8 46065380 */ add.s $f14, $f10, $f6 -/* 07AD1C 7F0461AC 46088280 */ add.s $f10, $f16, $f8 -/* 07AD20 7F0461B0 46005187 */ neg.s $f6, $f10 -/* 07AD24 7F0461B4 46067382 */ mul.s $f14, $f14, $f6 -/* 07AD28 7F0461B8 00000000 */ nop -/* 07AD2C 7F0461BC 46047202 */ mul.s $f8, $f14, $f4 -/* 07AD30 7F0461C0 46081280 */ add.s $f10, $f2, $f8 -/* 07AD34 7F0461C4 E60A0004 */ swc1 $f10, 4($s0) -/* 07AD38 7F0461C8 C7A6062C */ lwc1 $f6, 0x62c($sp) -/* 07AD3C 7F0461CC 46067102 */ mul.s $f4, $f14, $f6 -/* 07AD40 7F0461D0 46046200 */ add.s $f8, $f12, $f4 -/* 07AD44 7F0461D4 E6080008 */ swc1 $f8, 8($s0) -/* 07AD48 7F0461D8 C7AA0630 */ lwc1 $f10, 0x630($sp) -/* 07AD4C 7F0461DC 460A7182 */ mul.s $f6, $f14, $f10 -/* 07AD50 7F0461E0 46060100 */ add.s $f4, $f0, $f6 -/* 07AD54 7F0461E4 4500000D */ bc1f .Ljp7F04621C -/* 07AD58 7F0461E8 E604000C */ swc1 $f4, 0xc($s0) -/* 07AD5C 7F0461EC C6080008 */ lwc1 $f8, 8($s0) -/* 07AD60 7F0461F0 24080001 */ li $t0, 1 -/* 07AD64 7F0461F4 4608B03E */ c.le.s $f22, $f8 -/* 07AD68 7F0461F8 00000000 */ nop -/* 07AD6C 7F0461FC 45030007 */ bc1tl .Ljp7F04621C -/* 07AD70 7F046200 AFA80614 */ sw $t0, 0x614($sp) -/* 07AD74 7F046204 C62A005C */ lwc1 $f10, 0x5c($s1) -/* 07AD78 7F046208 460AA03E */ c.le.s $f20, $f10 -/* 07AD7C 7F04620C 00000000 */ nop -/* 07AD80 7F046210 45020003 */ bc1fl .Ljp7F046220 -/* 07AD84 7F046214 8E090000 */ lw $t1, ($s0) -/* 07AD88 7F046218 AFA80614 */ sw $t0, 0x614($sp) -.Ljp7F04621C: -/* 07AD8C 7F04621C 8E090000 */ lw $t1, ($s0) -.Ljp7F046220: -/* 07AD90 7F046220 C7B40644 */ lwc1 $f20, 0x644($sp) -/* 07AD94 7F046224 312B0008 */ andi $t3, $t1, 8 -/* 07AD98 7F046228 15600014 */ bnez $t3, .Ljp7F04627C -/* 07AD9C 7F04622C 00000000 */ nop -/* 07ADA0 7F046230 8E640014 */ lw $a0, 0x14($s3) -/* 07ADA4 7F046234 8E650008 */ lw $a1, 8($s3) -/* 07ADA8 7F046238 0FC2CD48 */ jal stanGetPositionYValue -/* 07ADAC 7F04623C 8E660010 */ lw $a2, 0x10($s3) -/* 07ADB0 7F046240 46000506 */ mov.s $f20, $f0 -/* 07ADB4 7F046244 8FA40648 */ lw $a0, 0x648($sp) -/* 07ADB8 7F046248 0FC0FB2F */ jal chrpropSumMatrixPosY -/* 07ADBC 7F04624C 8FA50074 */ lw $a1, 0x74($sp) -/* 07ADC0 7F046250 4600A101 */ sub.s $f4, $f20, $f0 -/* 07ADC4 7F046254 E7A00640 */ swc1 $f0, 0x640($sp) -/* 07ADC8 7F046258 C666000C */ lwc1 $f6, 0xc($s3) -/* 07ADCC 7F04625C 00006025 */ move $t4, $zero -/* 07ADD0 7F046260 4604303C */ c.lt.s $f6, $f4 -/* 07ADD4 7F046264 00000000 */ nop -/* 07ADD8 7F046268 45000002 */ bc1f .Ljp7F046274 -/* 07ADDC 7F04626C 00000000 */ nop -/* 07ADE0 7F046270 240C0001 */ li $t4, 1 -.Ljp7F046274: -/* 07ADE4 7F046274 10000001 */ b .Ljp7F04627C -/* 07ADE8 7F046278 AFAC0618 */ sw $t4, 0x618($sp) -.Ljp7F04627C: -/* 07ADEC 7F04627C 8FAE0618 */ lw $t6, 0x618($sp) -/* 07ADF0 7F046280 8FAA066C */ lw $t2, 0x66c($sp) -/* 07ADF4 7F046284 55C00004 */ bnezl $t6, .Ljp7F046298 -/* 07ADF8 7F046288 8E0D0000 */ lw $t5, ($s0) -/* 07ADFC 7F04628C 5540000B */ bnezl $t2, .Ljp7F0462BC -/* 07AE00 7F046290 8FA80618 */ lw $t0, 0x618($sp) -/* 07AE04 7F046294 8E0D0000 */ lw $t5, ($s0) -.Ljp7F046298: -/* 07AE08 7F046298 31AF0200 */ andi $t7, $t5, 0x200 -/* 07AE0C 7F04629C 55E00004 */ bnezl $t7, .Ljp7F0462B0 -/* 07AE10 7F0462A0 8E190090 */ lw $t9, 0x90($s0) -/* 07AE14 7F0462A4 0FC15FF8 */ jal mtxLoadRandomRotation -/* 07AE18 7F0462A8 8FA40070 */ lw $a0, 0x70($sp) -/* 07AE1C 7F0462AC 8E190090 */ lw $t9, 0x90($s0) -.Ljp7F0462B0: -/* 07AE20 7F0462B0 27380001 */ addiu $t8, $t9, 1 -/* 07AE24 7F0462B4 AE180090 */ sw $t8, 0x90($s0) -/* 07AE28 7F0462B8 8FA80618 */ lw $t0, 0x618($sp) -.Ljp7F0462BC: -/* 07AE2C 7F0462BC 8FA90614 */ lw $t1, 0x614($sp) -/* 07AE30 7F0462C0 8FAB0618 */ lw $t3, 0x618($sp) -/* 07AE34 7F0462C4 15000003 */ bnez $t0, .Ljp7F0462D4 -/* 07AE38 7F0462C8 00000000 */ nop -/* 07AE3C 7F0462CC 5120003A */ beql $t1, $zero, .Ljp7F0463B8 -/* 07AE40 7F0462D0 92390003 */ lbu $t9, 3($s1) -.Ljp7F0462D4: -/* 07AE44 7F0462D4 11600009 */ beqz $t3, .Ljp7F0462FC -/* 07AE48 7F0462D8 C7A40620 */ lwc1 $f4, 0x620($sp) -/* 07AE4C 7F0462DC C7A80640 */ lwc1 $f8, 0x640($sp) -/* 07AE50 7F0462E0 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 07AE54 7F0462E4 44813000 */ mtc1 $at, $f6 -/* 07AE58 7F0462E8 4608A281 */ sub.s $f10, $f20, $f8 -/* 07AE5C 7F0462EC 46065000 */ add.s $f0, $f10, $f6 -/* 07AE60 7F0462F0 E660000C */ swc1 $f0, 0xc($s3) -/* 07AE64 7F0462F4 10000008 */ b .Ljp7F046318 -/* 07AE68 7F0462F8 E620005C */ swc1 $f0, 0x5c($s1) -.Ljp7F0462FC: -/* 07AE6C 7F0462FC C7A80640 */ lwc1 $f8, 0x640($sp) -/* 07AE70 7F046300 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 07AE74 7F046304 44813000 */ mtc1 $at, $f6 -/* 07AE78 7F046308 46082281 */ sub.s $f10, $f4, $f8 -/* 07AE7C 7F04630C 46065080 */ add.s $f2, $f10, $f6 -/* 07AE80 7F046310 E662000C */ swc1 $f2, 0xc($s3) -/* 07AE84 7F046314 E622005C */ swc1 $f2, 0x5c($s1) -.Ljp7F046318: -/* 07AE88 7F046318 8E230064 */ lw $v1, 0x64($s1) -/* 07AE8C 7F04631C 02202025 */ move $a0, $s1 -/* 07AE90 7F046320 000363C0 */ sll $t4, $v1, 0xf -/* 07AE94 7F046324 05800002 */ bltz $t4, .Ljp7F046330 -/* 07AE98 7F046328 346E0100 */ ori $t6, $v1, 0x100 -/* 07AE9C 7F04632C AE2E0064 */ sw $t6, 0x64($s1) -.Ljp7F046330: -/* 07AEA0 7F046330 C610008C */ lwc1 $f16, 0x8c($s0) -/* 07AEA4 7F046334 4610B03C */ c.lt.s $f22, $f16 -/* 07AEA8 7F046338 00000000 */ nop -/* 07AEAC 7F04633C 4500001B */ bc1f .Ljp7F0463AC -/* 07AEB0 7F046340 00000000 */ nop -/* 07AEB4 7F046344 C6040008 */ lwc1 $f4, 8($s0) -/* 07AEB8 7F046348 46008207 */ neg.s $f8, $f16 -/* 07AEBC 7F04634C 3C018005 */ lui $at, %hi(D_80052AA8) # $at, 0x8005 -/* 07AEC0 7F046350 46082282 */ mul.s $f10, $f4, $f8 -/* 07AEC4 7F046354 C4202AD8 */ lwc1 $f0, %lo(D_80052AA8)($at) -/* 07AEC8 7F046358 E60A0008 */ swc1 $f10, 8($s0) -/* 07AECC 7F04635C C6060008 */ lwc1 $f6, 8($s0) -/* 07AED0 7F046360 4600303C */ c.lt.s $f6, $f0 -/* 07AED4 7F046364 00000000 */ nop -/* 07AED8 7F046368 45020013 */ bc1fl .Ljp7F0463B8 -/* 07AEDC 7F04636C 92390003 */ lbu $t9, 3($s1) -/* 07AEE0 7F046370 8E0A0000 */ lw $t2, ($s0) -/* 07AEE4 7F046374 02202025 */ move $a0, $s1 -/* 07AEE8 7F046378 314D0002 */ andi $t5, $t2, 2 -/* 07AEEC 7F04637C 11A00007 */ beqz $t5, .Ljp7F04639C -/* 07AEF0 7F046380 00000000 */ nop -/* 07AEF4 7F046384 8E0F0090 */ lw $t7, 0x90($s0) -/* 07AEF8 7F046388 24010001 */ li $at, 1 -/* 07AEFC 7F04638C 15E10003 */ bne $t7, $at, .Ljp7F04639C -/* 07AF00 7F046390 00000000 */ nop -/* 07AF04 7F046394 10000007 */ b .Ljp7F0463B4 -/* 07AF08 7F046398 E6000008 */ swc1 $f0, 8($s0) -.Ljp7F04639C: -/* 07AF0C 7F04639C 0FC10D39 */ jal sub_GAME_7F0431E4 -/* 07AF10 7F0463A0 27A50634 */ addiu $a1, $sp, 0x634 -/* 07AF14 7F0463A4 10000004 */ b .Ljp7F0463B8 -/* 07AF18 7F0463A8 92390003 */ lbu $t9, 3($s1) -.Ljp7F0463AC: -/* 07AF1C 7F0463AC 0FC10D39 */ jal sub_GAME_7F0431E4 -/* 07AF20 7F0463B0 27A50634 */ addiu $a1, $sp, 0x634 -.Ljp7F0463B4: -/* 07AF24 7F0463B4 92390003 */ lbu $t9, 3($s1) -.Ljp7F0463B8: -/* 07AF28 7F0463B8 24010008 */ li $at, 8 -/* 07AF2C 7F0463BC 5721006F */ bnel $t9, $at, .Ljp7F04657C -/* 07AF30 7F0463C0 8E2F0064 */ lw $t7, 0x64($s1) -/* 07AF34 7F0463C4 82220080 */ lb $v0, 0x80($s1) -/* 07AF38 7F0463C8 24010003 */ li $at, 3 -/* 07AF3C 7F0463CC 54410006 */ bnel $v0, $at, .Ljp7F0463E8 -/* 07AF40 7F0463D0 24010056 */ li $at, 86 -/* 07AF44 7F0463D4 0FC10E54 */ jal sub_GAME_7F043650 -/* 07AF48 7F0463D8 02202025 */ move $a0, $s1 -/* 07AF4C 7F0463DC 10000042 */ b .Ljp7F0464E8 -/* 07AF50 7F0463E0 8FAB066C */ lw $t3, 0x66c($sp) -/* 07AF54 7F0463E4 24010056 */ li $at, 86 -.Ljp7F0463E8: -/* 07AF58 7F0463E8 1441002D */ bne $v0, $at, .Ljp7F0464A0 -/* 07AF5C 7F0463EC 8FB8066C */ lw $t8, 0x66c($sp) -/* 07AF60 7F0463F0 13000003 */ beqz $t8, .Ljp7F046400 -/* 07AF64 7F0463F4 8FA80618 */ lw $t0, 0x618($sp) -/* 07AF68 7F0463F8 51000004 */ beql $t0, $zero, .Ljp7F04640C -/* 07AF6C 7F0463FC C6020004 */ lwc1 $f2, 4($s0) -.Ljp7F046400: -/* 07AF70 7F046400 10000038 */ b .Ljp7F0464E4 -/* 07AF74 7F046404 A6200082 */ sh $zero, 0x82($s1) -/* 07AF78 7F046408 C6020004 */ lwc1 $f2, 4($s0) -.Ljp7F04640C: -/* 07AF7C 7F04640C C60C0008 */ lwc1 $f12, 8($s0) -/* 07AF80 7F046410 C600000C */ lwc1 $f0, 0xc($s0) -/* 07AF84 7F046414 46021102 */ mul.s $f4, $f2, $f2 -/* 07AF88 7F046418 3C018005 */ lui $at, %hi(D_80052AAC) -/* 07AF8C 7F04641C 26240058 */ addiu $a0, $s1, 0x58 -/* 07AF90 7F046420 460C6202 */ mul.s $f8, $f12, $f12 -/* 07AF94 7F046424 24060008 */ li $a2, 8 -/* 07AF98 7F046428 46000182 */ mul.s $f6, $f0, $f0 -/* 07AF9C 7F04642C 46082280 */ add.s $f10, $f4, $f8 -/* 07AFA0 7F046430 C4242ADC */ lwc1 $f4, %lo(D_80052AAC)($at) -/* 07AFA4 7F046434 460A3380 */ add.s $f14, $f6, $f10 -/* 07AFA8 7F046438 460E203C */ c.lt.s $f4, $f14 -/* 07AFAC 7F04643C 00000000 */ nop -/* 07AFB0 7F046440 45020005 */ bc1fl .Ljp7F046458 -/* 07AFB4 7F046444 8E0900A8 */ lw $t1, 0xa8($s0) -/* 07AFB8 7F046448 E6160010 */ swc1 $f22, 0x10($s0) -/* 07AFBC 7F04644C E6160014 */ swc1 $f22, 0x14($s0) -/* 07AFC0 7F046450 E6160018 */ swc1 $f22, 0x18($s0) -/* 07AFC4 7F046454 8E0900A8 */ lw $t1, 0xa8($s0) -.Ljp7F046458: -/* 07AFC8 7F046458 2921012D */ slti $at, $t1, 0x12d -/* 07AFCC 7F04645C 54200008 */ bnezl $at, .Ljp7F046480 -/* 07AFD0 7F046460 926E0001 */ lbu $t6, 1($s3) -/* 07AFD4 7F046464 8E0B0000 */ lw $t3, ($s0) -/* 07AFD8 7F046468 2401FFCF */ li $at, -49 -/* 07AFDC 7F04646C E616001C */ swc1 $f22, 0x1c($s0) -/* 07AFE0 7F046470 01616024 */ and $t4, $t3, $at -/* 07AFE4 7F046474 1000001B */ b .Ljp7F0464E4 -/* 07AFE8 7F046478 AE0C0000 */ sw $t4, ($s0) -/* 07AFEC 7F04647C 926E0001 */ lbu $t6, 1($s3) -.Ljp7F046480: -/* 07AFF0 7F046480 8E650014 */ lw $a1, 0x14($s3) -/* 07AFF4 7F046484 2667002C */ addiu $a3, $s3, 0x2c -/* 07AFF8 7F046488 31CA0008 */ andi $t2, $t6, 8 -/* 07AFFC 7F04648C 000A682B */ sltu $t5, $zero, $t2 -/* 07B000 7F046490 0FC27CA9 */ jal explosionCreateSmoke -/* 07B004 7F046494 AFAD0010 */ sw $t5, 0x10($sp) -/* 07B008 7F046498 10000013 */ b .Ljp7F0464E8 -/* 07B00C 7F04649C 8FAB066C */ lw $t3, 0x66c($sp) -.Ljp7F0464A0: -/* 07B010 7F0464A0 24010057 */ li $at, 87 -/* 07B014 7F0464A4 1441000F */ bne $v0, $at, .Ljp7F0464E4 -/* 07B018 7F0464A8 8FAF0618 */ lw $t7, 0x618($sp) -/* 07B01C 7F0464AC 15E00003 */ bnez $t7, .Ljp7F0464BC -/* 07B020 7F0464B0 8FB90614 */ lw $t9, 0x614($sp) -/* 07B024 7F0464B4 13200003 */ beqz $t9, .Ljp7F0464C4 -/* 07B028 7F0464B8 26240058 */ addiu $a0, $s1, 0x58 -.Ljp7F0464BC: -/* 07B02C 7F0464BC 10000009 */ b .Ljp7F0464E4 -/* 07B030 7F0464C0 A6200082 */ sh $zero, 0x82($s1) -.Ljp7F0464C4: -/* 07B034 7F0464C4 92780001 */ lbu $t8, 1($s3) -/* 07B038 7F0464C8 8E650014 */ lw $a1, 0x14($s3) -/* 07B03C 7F0464CC 24060009 */ li $a2, 9 -/* 07B040 7F0464D0 33080008 */ andi $t0, $t8, 8 -/* 07B044 7F0464D4 0008482B */ sltu $t1, $zero, $t0 -/* 07B048 7F0464D8 AFA90010 */ sw $t1, 0x10($sp) -/* 07B04C 7F0464DC 0FC27CA9 */ jal explosionCreateSmoke -/* 07B050 7F0464E0 2667002C */ addiu $a3, $s3, 0x2c -.Ljp7F0464E4: -/* 07B054 7F0464E4 8FAB066C */ lw $t3, 0x66c($sp) -.Ljp7F0464E8: -/* 07B058 7F0464E8 3C128005 */ lui $s2, %hi(D_80048380) # $s2, 0x8005 -/* 07B05C 7F0464EC 265283B0 */ addiu $s2, %lo(D_80048380) # addiu $s2, $s2, -0x7c50 -/* 07B060 7F0464F0 11600003 */ beqz $t3, .Ljp7F046500 -/* 07B064 7F0464F4 8FAC0618 */ lw $t4, 0x618($sp) -/* 07B068 7F0464F8 51800020 */ beql $t4, $zero, .Ljp7F04657C -/* 07B06C 7F0464FC 8E2F0064 */ lw $t7, 0x64($s1) -.Ljp7F046500: -/* 07B070 7F046500 8E420000 */ lw $v0, ($s2) -/* 07B074 7F046504 8E0E00AC */ lw $t6, 0xac($s0) -/* 07B078 7F046508 244AFFFE */ addiu $t2, $v0, -2 -/* 07B07C 7F04650C 01CA082A */ slt $at, $t6, $t2 -/* 07B080 7F046510 50200019 */ beql $at, $zero, .Ljp7F046578 -/* 07B084 7F046514 AE0200AC */ sw $v0, 0xac($s0) -/* 07B088 7F046518 82220080 */ lb $v0, 0x80($s1) -/* 07B08C 7F04651C 266D0008 */ addiu $t5, $s3, 8 -/* 07B090 7F046520 24010003 */ li $at, 3 -/* 07B094 7F046524 10410004 */ beq $v0, $at, .Ljp7F046538 -/* 07B098 7F046528 AFAD0074 */ sw $t5, 0x74($sp) -/* 07B09C 7F04652C 24010002 */ li $at, 2 -/* 07B0A0 7F046530 14410008 */ bne $v0, $at, .Ljp7F046554 -/* 07B0A4 7F046534 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -.Ljp7F046538: -/* 07B0A8 7F046538 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 07B0AC 7F04653C 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07B0B0 7F046540 24050003 */ li $a1, 3 -/* 07B0B4 7F046544 0C002386 */ jal sndPlaySfx -/* 07B0B8 7F046548 00003025 */ move $a2, $zero -/* 07B0BC 7F04654C 10000006 */ b .Ljp7F046568 -/* 07B0C0 7F046550 00402025 */ move $a0, $v0 -.Ljp7F046554: -/* 07B0C4 7F046554 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07B0C8 7F046558 2405002D */ li $a1, 45 -/* 07B0CC 7F04655C 0C002386 */ jal sndPlaySfx -/* 07B0D0 7F046560 00003025 */ move $a2, $zero -/* 07B0D4 7F046564 00402025 */ move $a0, $v0 -.Ljp7F046568: -/* 07B0D8 7F046568 0FC14FC3 */ jal chrobjSndCreatePostEventDefault -/* 07B0DC 7F04656C 8FA50074 */ lw $a1, 0x74($sp) -/* 07B0E0 7F046570 8E420000 */ lw $v0, ($s2) -/* 07B0E4 7F046574 AE0200AC */ sw $v0, 0xac($s0) -.Ljp7F046578: -/* 07B0E8 7F046578 8E2F0064 */ lw $t7, 0x64($s1) -.Ljp7F04657C: -/* 07B0EC 7F04657C 3C128005 */ lui $s2, %hi(D_80048380) # $s2, 0x8005 -/* 07B0F0 7F046580 265283B0 */ addiu $s2, %lo(D_80048380) # addiu $s2, $s2, -0x7c50 -/* 07B0F4 7F046584 31F90080 */ andi $t9, $t7, 0x80 -/* 07B0F8 7F046588 53200125 */ beql $t9, $zero, .Ljp7F046A20 -/* 07B0FC 7F04658C 8FAB0698 */ lw $t3, 0x698($sp) -/* 07B100 7F046590 8E180000 */ lw $t8, ($s0) -/* 07B104 7F046594 33080400 */ andi $t0, $t8, 0x400 -/* 07B108 7F046598 51000121 */ beql $t0, $zero, .Ljp7F046A20 -/* 07B10C 7F04659C 8FAB0698 */ lw $t3, 0x698($sp) -/* 07B110 7F0465A0 8E420000 */ lw $v0, ($s2) -/* 07B114 7F0465A4 3C0143C8 */ li $at, 0x43C80000 # 400.000000 -/* 07B118 7F0465A8 27B0056C */ addiu $s0, $sp, 0x56c -/* 07B11C 7F0465AC 30490007 */ andi $t1, $v0, 7 -/* 07B120 7F0465B0 1520011A */ bnez $t1, .Ljp7F046A1C -/* 07B124 7F0465B4 00002025 */ move $a0, $zero -/* 07B128 7F0465B8 44810000 */ mtc1 $at, $f0 -/* 07B12C 7F0465BC C6280058 */ lwc1 $f8, 0x58($s1) -/* 07B130 7F0465C0 3C0144E1 */ li $at, 0x44E10000 # 1800.000000 -/* 07B134 7F0465C4 44812000 */ mtc1 $at, $f4 -/* 07B138 7F0465C8 46004180 */ add.s $f6, $f8, $f0 -/* 07B13C 7F0465CC 304B000F */ andi $t3, $v0, 0xf -/* 07B140 7F0465D0 E7A6056C */ swc1 $f6, 0x56c($sp) -/* 07B144 7F0465D4 C62A005C */ lwc1 $f10, 0x5c($s1) -/* 07B148 7F0465D8 46045201 */ sub.s $f8, $f10, $f4 -/* 07B14C 7F0465DC E7A80570 */ swc1 $f8, 0x570($sp) -/* 07B150 7F0465E0 C6260060 */ lwc1 $f6, 0x60($s1) -/* 07B154 7F0465E4 15600005 */ bnez $t3, .Ljp7F0465FC -/* 07B158 7F0465E8 E7A60574 */ swc1 $f6, 0x574($sp) -/* 07B15C 7F0465EC C7AA0574 */ lwc1 $f10, 0x574($sp) -/* 07B160 7F0465F0 46005100 */ add.s $f4, $f10, $f0 -/* 07B164 7F0465F4 10000004 */ b .Ljp7F046608 -/* 07B168 7F0465F8 E7A40574 */ swc1 $f4, 0x574($sp) -.Ljp7F0465FC: -/* 07B16C 7F0465FC C7A80574 */ lwc1 $f8, 0x574($sp) -/* 07B170 7F046600 46004181 */ sub.s $f6, $f8, $f0 -/* 07B174 7F046604 E7A60574 */ swc1 $f6, 0x574($sp) -.Ljp7F046608: -/* 07B178 7F046608 8E220010 */ lw $v0, 0x10($s1) -/* 07B17C 7F04660C 02002825 */ move $a1, $s0 -/* 07B180 7F046610 24070014 */ li $a3, 20 -/* 07B184 7F046614 8C460014 */ lw $a2, 0x14($v0) -/* 07B188 7F046618 244C002C */ addiu $t4, $v0, 0x2c -/* 07B18C 7F04661C AFAC0018 */ sw $t4, 0x18($sp) -/* 07B190 7F046620 AFA0001C */ sw $zero, 0x1c($sp) -/* 07B194 7F046624 AFA00014 */ sw $zero, 0x14($sp) -/* 07B198 7F046628 0FC2737C */ jal explosionCreate -/* 07B19C 7F04662C AFA00010 */ sw $zero, 0x10($sp) -/* 07B1A0 7F046630 8E4E0000 */ lw $t6, ($s2) -/* 07B1A4 7F046634 24010028 */ li $at, 40 -/* 07B1A8 7F046638 02002025 */ move $a0, $s0 -/* 07B1AC 7F04663C 01C1001A */ div $zero, $t6, $at -/* 07B1B0 7F046640 00005010 */ mfhi $t2 -/* 07B1B4 7F046644 554000F6 */ bnezl $t2, .Ljp7F046A20 -/* 07B1B8 7F046648 8FAB0698 */ lw $t3, 0x698($sp) -/* 07B1BC 7F04664C 8E220010 */ lw $v0, 0x10($s1) -/* 07B1C0 7F046650 240D0001 */ li $t5, 1 -/* 07B1C4 7F046654 2406000A */ li $a2, 10 -/* 07B1C8 7F046658 8C450014 */ lw $a1, 0x14($v0) -/* 07B1CC 7F04665C AFAD0010 */ sw $t5, 0x10($sp) -/* 07B1D0 7F046660 0FC27CA9 */ jal explosionCreateSmoke -/* 07B1D4 7F046664 2447002C */ addiu $a3, $v0, 0x2c -/* 07B1D8 7F046668 100000ED */ b .Ljp7F046A20 -/* 07B1DC 7F04666C 8FAB0698 */ lw $t3, 0x698($sp) -/* 07B1E0 7F046670 C6000060 */ lwc1 $f0, 0x60($s0) -.Ljp7F046674: -/* 07B1E4 7F046674 44815000 */ mtc1 $at, $f10 -/* 07B1E8 7F046678 24120001 */ li $s2, 1 -/* 07B1EC 7F04667C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07B1F0 7F046680 460A003C */ c.lt.s $f0, $f10 -/* 07B1F4 7F046684 26040068 */ addiu $a0, $s0, 0x68 -/* 07B1F8 7F046688 26050078 */ addiu $a1, $s0, 0x78 -/* 07B1FC 7F04668C 45020031 */ bc1fl .Ljp7F046754 -/* 07B200 7F046690 C60A0004 */ lwc1 $f10, 4($s0) -/* 07B204 7F046694 C6020064 */ lwc1 $f2, 0x64($s0) -/* 07B208 7F046698 C42483B4 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07B20C 7F04669C 3C0F8005 */ lui $t7, %hi(g_ClockTimer) # $t7, 0x8005 -/* 07B210 7F0466A0 3C018005 */ lui $at, %hi(D_80052AB0) -/* 07B214 7F0466A4 46041202 */ mul.s $f8, $f2, $f4 -/* 07B218 7F0466A8 27B20558 */ addiu $s2, $sp, 0x558 -/* 07B21C 7F0466AC 46080180 */ add.s $f6, $f0, $f8 -/* 07B220 7F0466B0 E6060060 */ swc1 $f6, 0x60($s0) -/* 07B224 7F0466B4 8DEF83A4 */ lw $t7, %lo(g_ClockTimer)($t7) -/* 07B228 7F0466B8 59E00005 */ blezl $t7, .Ljp7F0466D0 -/* 07B22C 7F0466BC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07B230 7F0466C0 C42A2AE0 */ lwc1 $f10, %lo(D_80052AB0)($at) -/* 07B234 7F0466C4 460A1102 */ mul.s $f4, $f2, $f10 -/* 07B238 7F0466C8 E6040064 */ swc1 $f4, 0x64($s0) -/* 07B23C 7F0466CC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -.Ljp7F0466D0: -/* 07B240 7F0466D0 44814000 */ mtc1 $at, $f8 -/* 07B244 7F0466D4 C6000060 */ lwc1 $f0, 0x60($s0) -/* 07B248 7F0466D8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07B24C 7F0466DC 4600403C */ c.lt.s $f8, $f0 -/* 07B250 7F0466E0 00000000 */ nop -/* 07B254 7F0466E4 45030006 */ bc1tl .Ljp7F046700 -/* 07B258 7F0466E8 44813000 */ mtc1 $at, $f6 -/* 07B25C 7F0466EC 8E190000 */ lw $t9, ($s0) -/* 07B260 7F0466F0 33380008 */ andi $t8, $t9, 8 -/* 07B264 7F0466F4 53000006 */ beql $t8, $zero, .Ljp7F046710 -/* 07B268 7F0466F8 44060000 */ mfc1 $a2, $f0 -/* 07B26C 7F0466FC 44813000 */ mtc1 $at, $f6 -.Ljp7F046700: -/* 07B270 7F046700 00000000 */ nop -/* 07B274 7F046704 E6060060 */ swc1 $f6, 0x60($s0) -/* 07B278 7F046708 C6000060 */ lwc1 $f0, 0x60($s0) -/* 07B27C 7F04670C 44060000 */ mfc1 $a2, $f0 -.Ljp7F046710: -/* 07B280 7F046710 0FC16FCA */ jal quaternion_slerp -/* 07B284 7F046714 02403825 */ move $a3, $s2 -/* 07B288 7F046718 26250018 */ addiu $a1, $s1, 0x18 -/* 07B28C 7F04671C AFA50074 */ sw $a1, 0x74($sp) -/* 07B290 7F046720 0FC16ED2 */ jal quaternion_to_matrix -/* 07B294 7F046724 02402025 */ move $a0, $s2 -/* 07B298 7F046728 C60C00C0 */ lwc1 $f12, 0xc0($s0) -/* 07B29C 7F04672C 0FC163B5 */ jal matrix_column_1_scalar_multiply -/* 07B2A0 7F046730 8FA50074 */ lw $a1, 0x74($sp) -/* 07B2A4 7F046734 C60C00C4 */ lwc1 $f12, 0xc4($s0) -/* 07B2A8 7F046738 0FC163C1 */ jal matrix_column_2_scalar_multiply -/* 07B2AC 7F04673C 8FA50074 */ lw $a1, 0x74($sp) -/* 07B2B0 7F046740 C60C00C8 */ lwc1 $f12, 0xc8($s0) -/* 07B2B4 7F046744 0FC163DB */ jal matrix_column_3_scalar_multiply_2 -/* 07B2B8 7F046748 8FA50074 */ lw $a1, 0x74($sp) -/* 07B2BC 7F04674C 00009025 */ move $s2, $zero -/* 07B2C0 7F046750 C60A0004 */ lwc1 $f10, 4($s0) -.Ljp7F046754: -/* 07B2C4 7F046754 460AB032 */ c.eq.s $f22, $f10 -/* 07B2C8 7F046758 00000000 */ nop -/* 07B2CC 7F04675C 4502000F */ bc1fl .Ljp7F04679C -/* 07B2D0 7F046760 8E080000 */ lw $t0, ($s0) -/* 07B2D4 7F046764 C604000C */ lwc1 $f4, 0xc($s0) -/* 07B2D8 7F046768 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07B2DC 7F04676C 4604B032 */ c.eq.s $f22, $f4 -/* 07B2E0 7F046770 00000000 */ nop -/* 07B2E4 7F046774 45020009 */ bc1fl .Ljp7F04679C -/* 07B2E8 7F046778 8E080000 */ lw $t0, ($s0) -/* 07B2EC 7F04677C C6080060 */ lwc1 $f8, 0x60($s0) -/* 07B2F0 7F046780 44813000 */ mtc1 $at, $f6 -/* 07B2F4 7F046784 00000000 */ nop -/* 07B2F8 7F046788 4606403C */ c.lt.s $f8, $f6 -/* 07B2FC 7F04678C 00000000 */ nop -/* 07B300 7F046790 45000088 */ bc1f .Ljp7F0469B4 -/* 07B304 7F046794 00000000 */ nop -/* 07B308 7F046798 8E080000 */ lw $t0, ($s0) -.Ljp7F04679C: -/* 07B30C 7F04679C 02202025 */ move $a0, $s1 -/* 07B310 7F0467A0 262B0018 */ addiu $t3, $s1, 0x18 -/* 07B314 7F0467A4 31090008 */ andi $t1, $t0, 8 -/* 07B318 7F0467A8 15200082 */ bnez $t1, .Ljp7F0469B4 -/* 07B31C 7F0467AC 00000000 */ nop -/* 07B320 7F0467B0 AFAB0074 */ sw $t3, 0x74($sp) -/* 07B324 7F0467B4 0FC100DE */ jal chrobjGetBboxFromObjectRecord -/* 07B328 7F0467B8 00009025 */ move $s2, $zero -/* 07B32C 7F0467BC 3C038005 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8005 -/* 07B330 7F0467C0 8C6383A4 */ lw $v1, %lo(g_ClockTimer)($v1) -/* 07B334 7F0467C4 AFA20554 */ sw $v0, 0x554($sp) -/* 07B338 7F0467C8 00002025 */ move $a0, $zero -/* 07B33C 7F0467CC 18600048 */ blez $v1, .Ljp7F0468F0 -/* 07B340 7F0467D0 3C018005 */ lui $at, %hi(D_80052AB4) # $at, 0x8005 -/* 07B344 7F0467D4 C42E2AE4 */ lwc1 $f14, %lo(D_80052AB4)($at) -/* 07B348 7F0467D8 C7AA069C */ lwc1 $f10, 0x69c($sp) -.Ljp7F0467DC: -/* 07B34C 7F0467DC C6040004 */ lwc1 $f4, 4($s0) -/* 07B350 7F0467E0 C7A606A4 */ lwc1 $f6, 0x6a4($sp) -/* 07B354 7F0467E4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07B358 7F0467E8 46045200 */ add.s $f8, $f10, $f4 -/* 07B35C 7F0467EC E7A8069C */ swc1 $f8, 0x69c($sp) -/* 07B360 7F0467F0 C60A000C */ lwc1 $f10, 0xc($s0) -/* 07B364 7F0467F4 460A3100 */ add.s $f4, $f6, $f10 -/* 07B368 7F0467F8 44813000 */ mtc1 $at, $f6 -/* 07B36C 7F0467FC E7A406A4 */ swc1 $f4, 0x6a4($sp) -/* 07B370 7F046800 C6080060 */ lwc1 $f8, 0x60($s0) -/* 07B374 7F046804 4608303E */ c.le.s $f6, $f8 -/* 07B378 7F046808 00000000 */ nop -/* 07B37C 7F04680C 45020035 */ bc1fl .Ljp7F0468E4 -/* 07B380 7F046810 24840001 */ addiu $a0, $a0, 1 -/* 07B384 7F046814 C60A0094 */ lwc1 $f10, 0x94($s0) -/* 07B388 7F046818 460AB03C */ c.lt.s $f22, $f10 -/* 07B38C 7F04681C 00000000 */ nop -/* 07B390 7F046820 45020027 */ bc1fl .Ljp7F0468C0 -/* 07B394 7F046824 C6060004 */ lwc1 $f6, 4($s0) -/* 07B398 7F046828 C600000C */ lwc1 $f0, 0xc($s0) -/* 07B39C 7F04682C C6020004 */ lwc1 $f2, 4($s0) -/* 07B3A0 7F046830 AFA40550 */ sw $a0, 0x550($sp) -/* 07B3A4 7F046834 46000102 */ mul.s $f4, $f0, $f0 -/* 07B3A8 7F046838 00000000 */ nop -/* 07B3AC 7F04683C 46021202 */ mul.s $f8, $f2, $f2 -/* 07B3B0 7F046840 0C007E08 */ jal sqrtf -/* 07B3B4 7F046844 46082300 */ add.s $f12, $f4, $f8 -/* 07B3B8 7F046848 3C018005 */ lui $at, %hi(D_80052AB8) # $at, 0x8005 -/* 07B3BC 7F04684C C42E2AE8 */ lwc1 $f14, %lo(D_80052AB8)($at) -/* 07B3C0 7F046850 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07B3C4 7F046854 C42A83B4 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07B3C8 7F046858 C6060094 */ lwc1 $f6, 0x94($s0) -/* 07B3CC 7F04685C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07B3D0 7F046860 44814000 */ mtc1 $at, $f8 -/* 07B3D4 7F046864 460A3102 */ mul.s $f4, $f6, $f10 -/* 07B3D8 7F046868 8FA40550 */ lw $a0, 0x550($sp) -/* 07B3DC 7F04686C 3C038005 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8005 -/* 07B3E0 7F046870 46002303 */ div.s $f12, $f4, $f0 -/* 07B3E4 7F046874 460C403E */ c.le.s $f8, $f12 -/* 07B3E8 7F046878 00000000 */ nop -/* 07B3EC 7F04687C 45020005 */ bc1fl .Ljp7F046894 -/* 07B3F0 7F046880 C6020004 */ lwc1 $f2, 4($s0) -/* 07B3F4 7F046884 E6160004 */ swc1 $f22, 4($s0) -/* 07B3F8 7F046888 1000000A */ b .Ljp7F0468B4 -/* 07B3FC 7F04688C E616000C */ swc1 $f22, 0xc($s0) -/* 07B400 7F046890 C6020004 */ lwc1 $f2, 4($s0) -.Ljp7F046894: -/* 07B404 7F046894 C600000C */ lwc1 $f0, 0xc($s0) -/* 07B408 7F046898 460C1182 */ mul.s $f6, $f2, $f12 -/* 07B40C 7F04689C 00000000 */ nop -/* 07B410 7F0468A0 460C0102 */ mul.s $f4, $f0, $f12 -/* 07B414 7F0468A4 46061281 */ sub.s $f10, $f2, $f6 -/* 07B418 7F0468A8 46040201 */ sub.s $f8, $f0, $f4 -/* 07B41C 7F0468AC E60A0004 */ swc1 $f10, 4($s0) -/* 07B420 7F0468B0 E608000C */ swc1 $f8, 0xc($s0) -.Ljp7F0468B4: -/* 07B424 7F0468B4 1000000A */ b .Ljp7F0468E0 -/* 07B428 7F0468B8 8C6383A4 */ lw $v1, %lo(g_ClockTimer)($v1) -/* 07B42C 7F0468BC C6060004 */ lwc1 $f6, 4($s0) -.Ljp7F0468C0: -/* 07B430 7F0468C0 C604000C */ lwc1 $f4, 0xc($s0) -/* 07B434 7F0468C4 3C038005 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8005 -/* 07B438 7F0468C8 460E3282 */ mul.s $f10, $f6, $f14 -/* 07B43C 7F0468CC 00000000 */ nop -/* 07B440 7F0468D0 460E2202 */ mul.s $f8, $f4, $f14 -/* 07B444 7F0468D4 E60A0004 */ swc1 $f10, 4($s0) -/* 07B448 7F0468D8 E608000C */ swc1 $f8, 0xc($s0) -/* 07B44C 7F0468DC 8C6383A4 */ lw $v1, %lo(g_ClockTimer)($v1) -.Ljp7F0468E0: -/* 07B450 7F0468E0 24840001 */ addiu $a0, $a0, 1 -.Ljp7F0468E4: -/* 07B454 7F0468E4 0083082A */ slt $at, $a0, $v1 -/* 07B458 7F0468E8 5420FFBC */ bnezl $at, .Ljp7F0467DC -/* 07B45C 7F0468EC C7AA069C */ lwc1 $f10, 0x69c($sp) -.Ljp7F0468F0: -/* 07B460 7F0468F0 02202025 */ move $a0, $s1 -/* 07B464 7F0468F4 27A5069C */ addiu $a1, $sp, 0x69c -/* 07B468 7F0468F8 27A60538 */ addiu $a2, $sp, 0x538 -/* 07B46C 7F0468FC 27A70544 */ addiu $a3, $sp, 0x544 -/* 07B470 7F046900 AFA00010 */ sw $zero, 0x10($sp) -/* 07B474 7F046904 0FC10C6D */ jal sub_GAME_7F042EB4 -/* 07B478 7F046908 AFA00014 */ sw $zero, 0x14($sp) -/* 07B47C 7F04690C 240C0001 */ li $t4, 1 -/* 07B480 7F046910 AFAC0698 */ sw $t4, 0x698($sp) -/* 07B484 7F046914 8E660010 */ lw $a2, 0x10($s3) -/* 07B488 7F046918 8E650008 */ lw $a1, 8($s3) -/* 07B48C 7F04691C 0FC2CD48 */ jal stanGetPositionYValue -/* 07B490 7F046920 8E640014 */ lw $a0, 0x14($s3) -/* 07B494 7F046924 46000506 */ mov.s $f20, $f0 -/* 07B498 7F046928 8FA40554 */ lw $a0, 0x554($sp) -/* 07B49C 7F04692C 0FC0FB2F */ jal chrpropSumMatrixPosY -/* 07B4A0 7F046930 8FA50074 */ lw $a1, 0x74($sp) -/* 07B4A4 7F046934 3C018005 */ lui $at, %hi(D_80052ABC) # $at, 0x8005 -/* 07B4A8 7F046938 C42E2AEC */ lwc1 $f14, %lo(D_80052ABC)($at) -/* 07B4AC 7F04693C 4600A181 */ sub.s $f6, $f20, $f0 -/* 07B4B0 7F046940 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 07B4B4 7F046944 44815000 */ mtc1 $at, $f10 -/* 07B4B8 7F046948 3C018005 */ lui $at, %hi(D_80052AC0) # $at, 0x8005 -/* 07B4BC 7F04694C 460A3300 */ add.s $f12, $f6, $f10 -/* 07B4C0 7F046950 E66C000C */ swc1 $f12, 0xc($s3) -/* 07B4C4 7F046954 E62C005C */ swc1 $f12, 0x5c($s1) -/* 07B4C8 7F046958 C6020004 */ lwc1 $f2, 4($s0) -/* 07B4CC 7F04695C 460E103C */ c.lt.s $f2, $f14 -/* 07B4D0 7F046960 00000000 */ nop -/* 07B4D4 7F046964 45000013 */ bc1f .Ljp7F0469B4 -/* 07B4D8 7F046968 00000000 */ nop -/* 07B4DC 7F04696C C4242AF0 */ lwc1 $f4, %lo(D_80052AC0)($at) -/* 07B4E0 7F046970 4602203C */ c.lt.s $f4, $f2 -/* 07B4E4 7F046974 00000000 */ nop -/* 07B4E8 7F046978 4500000E */ bc1f .Ljp7F0469B4 -/* 07B4EC 7F04697C 00000000 */ nop -/* 07B4F0 7F046980 C600000C */ lwc1 $f0, 0xc($s0) -/* 07B4F4 7F046984 3C018005 */ lui $at, %hi(D_80052AC4) # $at, 0x8005 -/* 07B4F8 7F046988 460E003C */ c.lt.s $f0, $f14 -/* 07B4FC 7F04698C 00000000 */ nop -/* 07B500 7F046990 45000008 */ bc1f .Ljp7F0469B4 -/* 07B504 7F046994 00000000 */ nop -/* 07B508 7F046998 C4282AF4 */ lwc1 $f8, %lo(D_80052AC4)($at) -/* 07B50C 7F04699C 4600403C */ c.lt.s $f8, $f0 -/* 07B510 7F0469A0 00000000 */ nop -/* 07B514 7F0469A4 45000003 */ bc1f .Ljp7F0469B4 -/* 07B518 7F0469A8 00000000 */ nop -/* 07B51C 7F0469AC E616000C */ swc1 $f22, 0xc($s0) -/* 07B520 7F0469B0 E6160004 */ swc1 $f22, 4($s0) -.Ljp7F0469B4: -/* 07B524 7F0469B4 16400005 */ bnez $s2, .Ljp7F0469CC -/* 07B528 7F0469B8 00000000 */ nop -/* 07B52C 7F0469BC 8E0E0000 */ lw $t6, ($s0) -/* 07B530 7F0469C0 31CA0008 */ andi $t2, $t6, 8 -/* 07B534 7F0469C4 51400016 */ beql $t2, $zero, .Ljp7F046A20 -/* 07B538 7F0469C8 8FAB0698 */ lw $t3, 0x698($sp) -.Ljp7F0469CC: -/* 07B53C 7F0469CC 0FC0FF9C */ jal projectileFree -/* 07B540 7F0469D0 02002025 */ move $a0, $s0 -/* 07B544 7F0469D4 8E2D0064 */ lw $t5, 0x64($s1) -/* 07B548 7F0469D8 2401FF7F */ li $at, -129 -/* 07B54C 7F0469DC AE20006C */ sw $zero, 0x6c($s1) -/* 07B550 7F0469E0 01A17824 */ and $t7, $t5, $at -/* 07B554 7F0469E4 AE2F0064 */ sw $t7, 0x64($s1) -/* 07B558 7F0469E8 92620001 */ lbu $v0, 1($s3) -/* 07B55C 7F0469EC 30590008 */ andi $t9, $v0, 8 -/* 07B560 7F0469F0 13200002 */ beqz $t9, .Ljp7F0469FC -/* 07B564 7F0469F4 34580010 */ ori $t8, $v0, 0x10 -/* 07B568 7F0469F8 A2780001 */ sb $t8, 1($s3) -.Ljp7F0469FC: -/* 07B56C 7F0469FC 92280003 */ lbu $t0, 3($s1) -/* 07B570 7F046A00 24010008 */ li $at, 8 -/* 07B574 7F046A04 55010006 */ bnel $t0, $at, .Ljp7F046A20 -/* 07B578 7F046A08 8FAB0698 */ lw $t3, 0x698($sp) -/* 07B57C 7F046A0C 8E690014 */ lw $t1, 0x14($s3) -/* 07B580 7F046A10 82240080 */ lb $a0, 0x80($s1) -/* 07B584 7F046A14 0FC15F41 */ jal objectivestatusCheckDeposit -/* 07B588 7F046A18 91250003 */ lbu $a1, 3($t1) -.Ljp7F046A1C: -/* 07B58C 7F046A1C 8FAB0698 */ lw $t3, 0x698($sp) -.Ljp7F046A20: -/* 07B590 7F046A20 1160000B */ beqz $t3, .Ljp7F046A50 -/* 07B594 7F046A24 262C0058 */ addiu $t4, $s1, 0x58 -/* 07B598 7F046A28 AFAC0074 */ sw $t4, 0x74($sp) -/* 07B59C 7F046A2C 0FC101E1 */ jal chrobjCollisionRelated -/* 07B5A0 7F046A30 02202025 */ move $a0, $s1 -/* 07B5A4 7F046A34 0FC15C68 */ jal setupUpdateObjectRoomPosition -/* 07B5A8 7F046A38 02202025 */ move $a0, $s1 -/* 07B5AC 7F046A3C 8E240010 */ lw $a0, 0x10($s1) -/* 07B5B0 7F046A40 0FC1016D */ jal sub_GAME_7F0402B4 -/* 07B5B4 7F046A44 2625007C */ addiu $a1, $s1, 0x7c -/* 07B5B8 7F046A48 0FC14832 */ jal detonate_proxmine_In_range -/* 07B5BC 7F046A4C 8FA40074 */ lw $a0, 0x74($sp) -.Ljp7F046A50: -/* 07B5C0 7F046A50 92220003 */ lbu $v0, 3($s1) -/* 07B5C4 7F046A54 24010001 */ li $at, 1 -/* 07B5C8 7F046A58 54410052 */ bnel $v0, $at, .Ljp7F046BA4 -/* 07B5CC 7F046A5C 24010006 */ li $at, 6 -/* 07B5D0 7F046A60 8E700004 */ lw $s0, 4($s3) -/* 07B5D4 7F046A64 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07B5D8 7F046A68 E7A60684 */ swc1 $f6, 0x684($sp) -/* 07B5DC 7F046A6C 8E0200EC */ lw $v0, 0xec($s0) -/* 07B5E0 7F046A70 58400013 */ blezl $v0, .Ljp7F046AC0 -/* 07B5E4 7F046A74 820800BC */ lb $t0, 0xbc($s0) -/* 07B5E8 7F046A78 820E00BC */ lb $t6, 0xbc($s0) -/* 07B5EC 7F046A7C 55C00010 */ bnezl $t6, .Ljp7F046AC0 -/* 07B5F0 7F046A80 820800BC */ lb $t0, 0xbc($s0) -/* 07B5F4 7F046A84 8E0A0008 */ lw $t2, 8($s0) -/* 07B5F8 7F046A88 3C0F8005 */ lui $t7, %hi(g_GlobalTimer) # $t7, 0x8005 -/* 07B5FC 7F046A8C 000A6800 */ sll $t5, $t2, 0 -/* 07B600 7F046A90 05A2000B */ bltzl $t5, .Ljp7F046AC0 -/* 07B604 7F046A94 820800BC */ lb $t0, 0xbc($s0) -/* 07B608 7F046A98 8DEF83AC */ lw $t7, %lo(g_GlobalTimer)($t7) -/* 07B60C 7F046A9C 8E1900A0 */ lw $t9, 0xa0($s0) -/* 07B610 7F046AA0 02002025 */ move $a0, $s0 -/* 07B614 7F046AA4 01F9C023 */ subu $t8, $t7, $t9 -/* 07B618 7F046AA8 0058082A */ slt $at, $v0, $t8 -/* 07B61C 7F046AAC 50200004 */ beql $at, $zero, .Ljp7F046AC0 -/* 07B620 7F046AB0 820800BC */ lb $t0, 0xbc($s0) -/* 07B624 7F046AB4 0FC153A1 */ jal doorActivate -/* 07B628 7F046AB8 24050002 */ li $a1, 2 -/* 07B62C 7F046ABC 820800BC */ lb $t0, 0xbc($s0) -.Ljp7F046AC0: -/* 07B630 7F046AC0 24010003 */ li $at, 3 -/* 07B634 7F046AC4 5501001B */ bnel $t0, $at, .Ljp7F046B34 -/* 07B638 7F046AC8 960B009A */ lhu $t3, 0x9a($s0) -/* 07B63C 7F046ACC 8E0200C8 */ lw $v0, 0xc8($s0) -/* 07B640 7F046AD0 24030001 */ li $v1, 1 -/* 07B644 7F046AD4 02002025 */ move $a0, $s0 -/* 07B648 7F046AD8 10400011 */ beqz $v0, .Ljp7F046B20 -/* 07B64C 7F046ADC 00000000 */ nop -/* 07B650 7F046AE0 1050000F */ beq $v0, $s0, .Ljp7F046B20 -/* 07B654 7F046AE4 00000000 */ nop -/* 07B658 7F046AE8 804900BC */ lb $t1, 0xbc($v0) -.Ljp7F046AEC: -/* 07B65C 7F046AEC 55200007 */ bnezl $t1, .Ljp7F046B0C -/* 07B660 7F046AF0 00001825 */ move $v1, $zero -/* 07B664 7F046AF4 C44A00B4 */ lwc1 $f10, 0xb4($v0) -/* 07B668 7F046AF8 460AB03C */ c.lt.s $f22, $f10 -/* 07B66C 7F046AFC 00000000 */ nop -/* 07B670 7F046B00 45020003 */ bc1fl .Ljp7F046B10 -/* 07B674 7F046B04 8C4200C8 */ lw $v0, 0xc8($v0) -/* 07B678 7F046B08 00001825 */ move $v1, $zero -.Ljp7F046B0C: -/* 07B67C 7F046B0C 8C4200C8 */ lw $v0, 0xc8($v0) -.Ljp7F046B10: -/* 07B680 7F046B10 10400003 */ beqz $v0, .Ljp7F046B20 -/* 07B684 7F046B14 00000000 */ nop -/* 07B688 7F046B18 5450FFF4 */ bnel $v0, $s0, .Ljp7F046AEC -/* 07B68C 7F046B1C 804900BC */ lb $t1, 0xbc($v0) -.Ljp7F046B20: -/* 07B690 7F046B20 50600004 */ beql $v1, $zero, .Ljp7F046B34 -/* 07B694 7F046B24 960B009A */ lhu $t3, 0x9a($s0) -/* 07B698 7F046B28 0FC15368 */ jal doorSetOpenState -/* 07B69C 7F046B2C 24050001 */ li $a1, 1 -/* 07B6A0 7F046B30 960B009A */ lhu $t3, 0x9a($s0) -.Ljp7F046B34: -/* 07B6A4 7F046B34 24010008 */ li $at, 8 -/* 07B6A8 7F046B38 1561000B */ bne $t3, $at, .Ljp7F046B68 -/* 07B6AC 7F046B3C 00000000 */ nop -/* 07B6B0 7F046B40 0FC153C7 */ jal doorIsClosed -/* 07B6B4 7F046B44 02002025 */ move $a0, $s0 -/* 07B6B8 7F046B48 10400007 */ beqz $v0, .Ljp7F046B68 -/* 07B6BC 7F046B4C 00000000 */ nop -/* 07B6C0 7F046B50 0FC0FA86 */ jal doorIsPadlockFree -/* 07B6C4 7F046B54 02002025 */ move $a0, $s0 -/* 07B6C8 7F046B58 10400003 */ beqz $v0, .Ljp7F046B68 -/* 07B6CC 7F046B5C 00000000 */ nop -/* 07B6D0 7F046B60 0FC157A6 */ jal doorActivateWrapper -/* 07B6D4 7F046B64 02602025 */ move $a0, $s3 -.Ljp7F046B68: -/* 07B6D8 7F046B68 3C0E8005 */ lui $t6, %hi(g_GlobalTimer) # $t6, 0x8005 -/* 07B6DC 7F046B6C 8DCE83AC */ lw $t6, %lo(g_GlobalTimer)($t6) -/* 07B6E0 7F046B70 8E0C00FC */ lw $t4, 0xfc($s0) -/* 07B6E4 7F046B74 3C0A8005 */ lui $t2, %hi(g_ClockTimer) # $t2, 0x8005 -/* 07B6E8 7F046B78 018E082A */ slt $at, $t4, $t6 -/* 07B6EC 7F046B7C 14200004 */ bnez $at, .Ljp7F046B90 -/* 07B6F0 7F046B80 00000000 */ nop -/* 07B6F4 7F046B84 8D4A83A4 */ lw $t2, %lo(g_ClockTimer)($t2) -/* 07B6F8 7F046B88 554006AA */ bnezl $t2, .Ljp7F048634 -/* 07B6FC 7F046B8C 92220003 */ lbu $v0, 3($s1) -.Ljp7F046B90: -/* 07B700 7F046B90 0FC1552C */ jal door7F054FB4 -/* 07B704 7F046B94 02002025 */ move $a0, $s0 -/* 07B708 7F046B98 100006A6 */ b .Ljp7F048634 -/* 07B70C 7F046B9C 92220003 */ lbu $v0, 3($s1) -/* 07B710 7F046BA0 24010006 */ li $at, 6 -.Ljp7F046BA4: -/* 07B714 7F046BA4 54410130 */ bnel $v0, $at, .Ljp7F047068 -/* 07B718 7F046BA8 2401000D */ li $at, 13 -/* 07B71C 7F046BAC 8E2D0008 */ lw $t5, 8($s1) -/* 07B720 7F046BB0 000D78C0 */ sll $t7, $t5, 3 -/* 07B724 7F046BB4 05E2012C */ bltzl $t7, .Ljp7F047068 -/* 07B728 7F046BB8 2401000D */ li $at, 13 -/* 07B72C 7F046BBC 8E700004 */ lw $s0, 4($s3) -/* 07B730 7F046BC0 8E1900D4 */ lw $t9, 0xd4($s0) -/* 07B734 7F046BC4 53200004 */ beql $t9, $zero, .Ljp7F046BD8 -/* 07B738 7F046BC8 C61200D0 */ lwc1 $f18, 0xd0($s0) -/* 07B73C 7F046BCC 10000002 */ b .Ljp7F046BD8 -/* 07B740 7F046BD0 C61200CC */ lwc1 $f18, 0xcc($s0) -/* 07B744 7F046BD4 C61200D0 */ lwc1 $f18, 0xd0($s0) -.Ljp7F046BD8: -/* 07B748 7F046BD8 0FC2279B */ jal get_curplayer_positiondata -/* 07B74C 7F046BDC E7B2051C */ swc1 $f18, 0x51c($sp) -/* 07B750 7F046BE0 AFA20518 */ sw $v0, 0x518($sp) -/* 07B754 7F046BE4 C6280058 */ lwc1 $f8, 0x58($s1) -/* 07B758 7F046BE8 C4440008 */ lwc1 $f4, 8($v0) -/* 07B75C 7F046BEC C60000E8 */ lwc1 $f0, 0xe8($s0) -/* 07B760 7F046BF0 C62A005C */ lwc1 $f10, 0x5c($s1) -/* 07B764 7F046BF4 46082301 */ sub.s $f12, $f4, $f8 -/* 07B768 7F046BF8 C446000C */ lwc1 $f6, 0xc($v0) -/* 07B76C 7F046BFC C6280060 */ lwc1 $f8, 0x60($s1) -/* 07B770 7F046C00 4600B03C */ c.lt.s $f22, $f0 -/* 07B774 7F046C04 C4440010 */ lwc1 $f4, 0x10($v0) -/* 07B778 7F046C08 C7B2051C */ lwc1 $f18, 0x51c($sp) -/* 07B77C 7F046C0C 24120001 */ li $s2, 1 -/* 07B780 7F046C10 460A3081 */ sub.s $f2, $f6, $f10 -/* 07B784 7F046C14 4500000E */ bc1f .Ljp7F046C50 -/* 07B788 7F046C18 46082381 */ sub.s $f14, $f4, $f8 -/* 07B78C 7F046C1C 46000182 */ mul.s $f6, $f0, $f0 -/* 07B790 7F046C20 00000000 */ nop -/* 07B794 7F046C24 460C6282 */ mul.s $f10, $f12, $f12 -/* 07B798 7F046C28 00000000 */ nop -/* 07B79C 7F046C2C 46021102 */ mul.s $f4, $f2, $f2 -/* 07B7A0 7F046C30 46045200 */ add.s $f8, $f10, $f4 -/* 07B7A4 7F046C34 460E7282 */ mul.s $f10, $f14, $f14 -/* 07B7A8 7F046C38 460A4100 */ add.s $f4, $f8, $f10 -/* 07B7AC 7F046C3C 4604303C */ c.lt.s $f6, $f4 -/* 07B7B0 7F046C40 00000000 */ nop -/* 07B7B4 7F046C44 45000002 */ bc1f .Ljp7F046C50 -/* 07B7B8 7F046C48 00000000 */ nop -/* 07B7BC 7F046C4C 00009025 */ move $s2, $zero -.Ljp7F046C50: -/* 07B7C0 7F046C50 8E380008 */ lw $t8, 8($s1) -/* 07B7C4 7F046C54 00184080 */ sll $t0, $t8, 2 -/* 07B7C8 7F046C58 05010002 */ bgez $t0, .Ljp7F046C64 -/* 07B7CC 7F046C5C 00000000 */ nop -/* 07B7D0 7F046C60 00009025 */ move $s2, $zero -.Ljp7F046C64: -/* 07B7D4 7F046C64 1240003A */ beqz $s2, .Ljp7F046D50 -/* 07B7D8 7F046C68 00000000 */ nop -/* 07B7DC 7F046C6C 0FC16BD4 */ jal atan2f -/* 07B7E0 7F046C70 E7B2051C */ swc1 $f18, 0x51c($sp) -/* 07B7E4 7F046C74 C60200C8 */ lwc1 $f2, 0xc8($s0) -/* 07B7E8 7F046C78 C7B2051C */ lwc1 $f18, 0x51c($sp) -/* 07B7EC 7F046C7C 3C018005 */ lui $at, %hi(D_80052ACC) -/* 07B7F0 7F046C80 4616103C */ c.lt.s $f2, $f22 -/* 07B7F4 7F046C84 00000000 */ nop -/* 07B7F8 7F046C88 45000005 */ bc1f .Ljp7F046CA0 -/* 07B7FC 7F046C8C 00000000 */ nop -/* 07B800 7F046C90 3C018005 */ lui $at, %hi(D_80052AC8) # $at, 0x8005 -/* 07B804 7F046C94 C4342AF8 */ lwc1 $f20, %lo(D_80052AC8)($at) -/* 07B808 7F046C98 10000007 */ b .Ljp7F046CB8 -/* 07B80C 7F046C9C 46141080 */ add.s $f2, $f2, $f20 -.Ljp7F046CA0: -/* 07B810 7F046CA0 C4342AFC */ lwc1 $f20, %lo(D_80052ACC)($at) -/* 07B814 7F046CA4 4602A03E */ c.le.s $f20, $f2 -/* 07B818 7F046CA8 00000000 */ nop -/* 07B81C 7F046CAC 45020003 */ bc1fl .Ljp7F046CBC -/* 07B820 7F046CB0 C60800C4 */ lwc1 $f8, 0xc4($s0) -/* 07B824 7F046CB4 46141081 */ sub.s $f2, $f2, $f20 -.Ljp7F046CB8: -/* 07B828 7F046CB8 C60800C4 */ lwc1 $f8, 0xc4($s0) -.Ljp7F046CBC: -/* 07B82C 7F046CBC 3C018005 */ lui $at, %hi(D_80052AD0) # $at, 0x8005 -/* 07B830 7F046CC0 46081080 */ add.s $f2, $f2, $f8 -/* 07B834 7F046CC4 4602A03E */ c.le.s $f20, $f2 -/* 07B838 7F046CC8 00000000 */ nop -/* 07B83C 7F046CCC 45020003 */ bc1fl .Ljp7F046CDC -/* 07B840 7F046CD0 4602003C */ c.lt.s $f0, $f2 -/* 07B844 7F046CD4 46141081 */ sub.s $f2, $f2, $f20 -/* 07B848 7F046CD8 4602003C */ c.lt.s $f0, $f2 -.Ljp7F046CDC: -/* 07B84C 7F046CDC 46020381 */ sub.s $f14, $f0, $f2 -/* 07B850 7F046CE0 45000002 */ bc1f .Ljp7F046CEC -/* 07B854 7F046CE4 46007306 */ mov.s $f12, $f14 -/* 07B858 7F046CE8 46147300 */ add.s $f12, $f14, $f20 -.Ljp7F046CEC: -/* 07B85C 7F046CEC C4202B00 */ lwc1 $f0, %lo(D_80052AD0)($at) -/* 07B860 7F046CF0 3C018005 */ lui $at, %hi(D_80052AD4) # $at, 0x8005 -/* 07B864 7F046CF4 46006301 */ sub.s $f12, $f12, $f0 -/* 07B868 7F046CF8 4616603C */ c.lt.s $f12, $f22 -/* 07B86C 7F046CFC 00000000 */ nop -/* 07B870 7F046D00 45020003 */ bc1fl .Ljp7F046D10 -/* 07B874 7F046D04 460C003C */ c.lt.s $f0, $f12 -/* 07B878 7F046D08 46146300 */ add.s $f12, $f12, $f20 -/* 07B87C 7F046D0C 460C003C */ c.lt.s $f0, $f12 -.Ljp7F046D10: -/* 07B880 7F046D10 00000000 */ nop -/* 07B884 7F046D14 45000002 */ bc1f .Ljp7F046D20 -/* 07B888 7F046D18 00000000 */ nop -/* 07B88C 7F046D1C 46146301 */ sub.s $f12, $f12, $f20 -.Ljp7F046D20: -/* 07B890 7F046D20 C42A2B04 */ lwc1 $f10, %lo(D_80052AD4)($at) -/* 07B894 7F046D24 3C018005 */ lui $at, %hi(D_80052AD8) -/* 07B898 7F046D28 460C503C */ c.lt.s $f10, $f12 -/* 07B89C 7F046D2C 00000000 */ nop -/* 07B8A0 7F046D30 45030007 */ bc1tl .Ljp7F046D50 -/* 07B8A4 7F046D34 00009025 */ move $s2, $zero -/* 07B8A8 7F046D38 C4262B08 */ lwc1 $f6, %lo(D_80052AD8)($at) -/* 07B8AC 7F046D3C 4606603C */ c.lt.s $f12, $f6 -/* 07B8B0 7F046D40 00000000 */ nop -/* 07B8B4 7F046D44 45000002 */ bc1f .Ljp7F046D50 -/* 07B8B8 7F046D48 00000000 */ nop -/* 07B8BC 7F046D4C 00009025 */ move $s2, $zero -.Ljp7F046D50: -/* 07B8C0 7F046D50 12400034 */ beqz $s2, .Ljp7F046E24 -/* 07B8C4 7F046D54 00002825 */ move $a1, $zero -/* 07B8C8 7F046D58 8E690014 */ lw $t1, 0x14($s3) -/* 07B8CC 7F046D5C E7B2051C */ swc1 $f18, 0x51c($sp) -/* 07B8D0 7F046D60 8FA40518 */ lw $a0, 0x518($sp) -/* 07B8D4 7F046D64 0FC229DD */ jal bondviewUpdateGuardTankFlagsRelated -/* 07B8D8 7F046D68 AFA904F4 */ sw $t1, 0x4f4($sp) -/* 07B8DC 7F046D6C 8FA20518 */ lw $v0, 0x518($sp) -/* 07B8E0 7F046D70 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 07B8E4 7F046D74 8E650008 */ lw $a1, 8($s3) -/* 07B8E8 7F046D78 C4440010 */ lwc1 $f4, 0x10($v0) -/* 07B8EC 7F046D7C 8E660010 */ lw $a2, 0x10($s3) -/* 07B8F0 7F046D80 8C470008 */ lw $a3, 8($v0) -/* 07B8F4 7F046D84 44814000 */ mtc1 $at, $f8 -/* 07B8F8 7F046D88 44815000 */ mtc1 $at, $f10 -/* 07B8FC 7F046D8C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07B900 7F046D90 44813000 */ mtc1 $at, $f6 -/* 07B904 7F046D94 240B001B */ li $t3, 27 -/* 07B908 7F046D98 AFAB0014 */ sw $t3, 0x14($sp) -/* 07B90C 7F046D9C E7B60020 */ swc1 $f22, 0x20($sp) -/* 07B910 7F046DA0 27A404F4 */ addiu $a0, $sp, 0x4f4 -/* 07B914 7F046DA4 E7A40010 */ swc1 $f4, 0x10($sp) -/* 07B918 7F046DA8 E7A80018 */ swc1 $f8, 0x18($sp) -/* 07B91C 7F046DAC E7AA001C */ swc1 $f10, 0x1c($sp) -/* 07B920 7F046DB0 0FC2C675 */ jal stanTestLineUnobstructed -/* 07B924 7F046DB4 E7A60024 */ swc1 $f6, 0x24($sp) -/* 07B928 7F046DB8 10400015 */ beqz $v0, .Ljp7F046E10 -/* 07B92C 7F046DBC C7B2051C */ lwc1 $f18, 0x51c($sp) -/* 07B930 7F046DC0 3C0E8005 */ lui $t6, %hi(g_ClockTimer) # $t6, 0x8005 -/* 07B934 7F046DC4 8DCE83A4 */ lw $t6, %lo(g_ClockTimer)($t6) -/* 07B938 7F046DC8 8E0C00E0 */ lw $t4, 0xe0($s0) -/* 07B93C 7F046DCC 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 07B940 7F046DD0 44812000 */ mtc1 $at, $f4 -/* 07B944 7F046DD4 018E5021 */ addu $t2, $t4, $t6 -/* 07B948 7F046DD8 AE0A00E0 */ sw $t2, 0xe0($s0) -/* 07B94C 7F046DDC 3C018003 */ lui $at, %hi(F_80030B14) # $at, 0x8003 -/* 07B950 7F046DE0 C4280B54 */ lwc1 $f8, %lo(F_80030B14)($at) -/* 07B954 7F046DE4 46082282 */ mul.s $f10, $f4, $f8 -/* 07B958 7F046DE8 4600518D */ trunc.w.s $f6, $f10 -/* 07B95C 7F046DEC 44193000 */ mfc1 $t9, $f6 -/* 07B960 7F046DF0 00000000 */ nop -/* 07B964 7F046DF4 0159082A */ slt $at, $t2, $t9 -/* 07B968 7F046DF8 54200006 */ bnezl $at, .Ljp7F046E14 -/* 07B96C 7F046DFC 8FA40518 */ lw $a0, 0x518($sp) -/* 07B970 7F046E00 0FC158B1 */ jal alarmActivate -/* 07B974 7F046E04 E7B2051C */ swc1 $f18, 0x51c($sp) -/* 07B978 7F046E08 C7B2051C */ lwc1 $f18, 0x51c($sp) -/* 07B97C 7F046E0C AE0000E0 */ sw $zero, 0xe0($s0) -.Ljp7F046E10: -/* 07B980 7F046E10 8FA40518 */ lw $a0, 0x518($sp) -.Ljp7F046E14: -/* 07B984 7F046E14 24050001 */ li $a1, 1 -/* 07B988 7F046E18 0FC229DD */ jal bondviewUpdateGuardTankFlagsRelated -/* 07B98C 7F046E1C E7B2051C */ swc1 $f18, 0x51c($sp) -/* 07B990 7F046E20 C7B2051C */ lwc1 $f18, 0x51c($sp) -.Ljp7F046E24: -/* 07B994 7F046E24 C60E00C8 */ lwc1 $f14, 0xc8($s0) -/* 07B998 7F046E28 4612703C */ c.lt.s $f14, $f18 -/* 07B99C 7F046E2C 00000000 */ nop -/* 07B9A0 7F046E30 45020047 */ bc1fl .Ljp7F046F50 -/* 07B9A4 7F046E34 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07B9A8 7F046E38 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07B9AC 7F046E3C 3C018005 */ lui $at, %hi(D_80052AE0) # $at, 0x8005 -/* 07B9B0 7F046E40 C4302B10 */ lwc1 $f16, %lo(D_80052AE0)($at) -/* 07B9B4 7F046E44 46000102 */ mul.s $f4, $f0, $f0 -/* 07B9B8 7F046E48 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07B9BC 7F046E4C 44814000 */ mtc1 $at, $f8 -/* 07B9C0 7F046E50 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07B9C4 7F046E54 46082282 */ mul.s $f10, $f4, $f8 -/* 07B9C8 7F046E58 46105083 */ div.s $f2, $f10, $f16 -/* 07B9CC 7F046E5C 46029181 */ sub.s $f6, $f18, $f2 -/* 07B9D0 7F046E60 460E303E */ c.le.s $f6, $f14 -/* 07B9D4 7F046E64 00000000 */ nop -/* 07B9D8 7F046E68 4502000F */ bc1fl .Ljp7F046EA8 -/* 07B9DC 7F046E6C C60C00DC */ lwc1 $f12, 0xdc($s0) -/* 07B9E0 7F046E70 C42483B4 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07B9E4 7F046E74 46048202 */ mul.s $f8, $f16, $f4 -/* 07B9E8 7F046E78 46080281 */ sub.s $f10, $f0, $f8 -/* 07B9EC 7F046E7C E60A00D8 */ swc1 $f10, 0xd8($s0) -/* 07B9F0 7F046E80 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07B9F4 7F046E84 4610003C */ c.lt.s $f0, $f16 -/* 07B9F8 7F046E88 00000000 */ nop -/* 07B9FC 7F046E8C 45000003 */ bc1f .Ljp7F046E9C -/* 07BA00 7F046E90 00000000 */ nop -/* 07BA04 7F046E94 E61000D8 */ swc1 $f16, 0xd8($s0) -/* 07BA08 7F046E98 C60000D8 */ lwc1 $f0, 0xd8($s0) -.Ljp7F046E9C: -/* 07BA0C 7F046E9C 1000001D */ b .Ljp7F046F14 -/* 07BA10 7F046EA0 C60E00C8 */ lwc1 $f14, 0xc8($s0) -/* 07BA14 7F046EA4 C60C00DC */ lwc1 $f12, 0xdc($s0) -.Ljp7F046EA8: -/* 07BA18 7F046EA8 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07BA1C 7F046EAC 460C003C */ c.lt.s $f0, $f12 -/* 07BA20 7F046EB0 00000000 */ nop -/* 07BA24 7F046EB4 45000017 */ bc1f .Ljp7F046F14 -/* 07BA28 7F046EB8 00000000 */ nop -/* 07BA2C 7F046EBC C42683B4 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) -/* 07BA30 7F046EC0 46068102 */ mul.s $f4, $f16, $f6 -/* 07BA34 7F046EC4 46040080 */ add.s $f2, $f0, $f4 -/* 07BA38 7F046EC8 4602603C */ c.lt.s $f12, $f2 -/* 07BA3C 7F046ECC 00000000 */ nop -/* 07BA40 7F046ED0 45000002 */ bc1f .Ljp7F046EDC -/* 07BA44 7F046ED4 00000000 */ nop -/* 07BA48 7F046ED8 46006086 */ mov.s $f2, $f12 -.Ljp7F046EDC: -/* 07BA4C 7F046EDC 46021202 */ mul.s $f8, $f2, $f2 -/* 07BA50 7F046EE0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07BA54 7F046EE4 44815000 */ mtc1 $at, $f10 -/* 07BA58 7F046EE8 00000000 */ nop -/* 07BA5C 7F046EEC 460A4182 */ mul.s $f6, $f8, $f10 -/* 07BA60 7F046EF0 46103103 */ div.s $f4, $f6, $f16 -/* 07BA64 7F046EF4 46049201 */ sub.s $f8, $f18, $f4 -/* 07BA68 7F046EF8 4608703C */ c.lt.s $f14, $f8 -/* 07BA6C 7F046EFC 00000000 */ nop -/* 07BA70 7F046F00 45000004 */ bc1f .Ljp7F046F14 -/* 07BA74 7F046F04 00000000 */ nop -/* 07BA78 7F046F08 E60200D8 */ swc1 $f2, 0xd8($s0) -/* 07BA7C 7F046F0C C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07BA80 7F046F10 C60E00C8 */ lwc1 $f14, 0xc8($s0) -.Ljp7F046F14: -/* 07BA84 7F046F14 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07BA88 7F046F18 C42A83B4 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07BA8C 7F046F1C 460A0182 */ mul.s $f6, $f0, $f10 -/* 07BA90 7F046F20 46067100 */ add.s $f4, $f14, $f6 -/* 07BA94 7F046F24 E60400C8 */ swc1 $f4, 0xc8($s0) -/* 07BA98 7F046F28 C60800C8 */ lwc1 $f8, 0xc8($s0) -/* 07BA9C 7F046F2C 4608903E */ c.le.s $f18, $f8 -/* 07BAA0 7F046F30 00000000 */ nop -/* 07BAA4 7F046F34 450205BF */ bc1fl .Ljp7F048634 -/* 07BAA8 7F046F38 92220003 */ lbu $v0, 3($s1) -/* 07BAAC 7F046F3C E61200C8 */ swc1 $f18, 0xc8($s0) -/* 07BAB0 7F046F40 E61600D8 */ swc1 $f22, 0xd8($s0) -/* 07BAB4 7F046F44 100005BA */ b .Ljp7F048630 -/* 07BAB8 7F046F48 AE0000D4 */ sw $zero, 0xd4($s0) -/* 07BABC 7F046F4C C60000D8 */ lwc1 $f0, 0xd8($s0) -.Ljp7F046F50: -/* 07BAC0 7F046F50 3C018005 */ lui $at, %hi(D_80052AE4) # $at, 0x8005 -/* 07BAC4 7F046F54 C4302B14 */ lwc1 $f16, %lo(D_80052AE4)($at) -/* 07BAC8 7F046F58 46000282 */ mul.s $f10, $f0, $f0 -/* 07BACC 7F046F5C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07BAD0 7F046F60 44813000 */ mtc1 $at, $f6 -/* 07BAD4 7F046F64 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07BAD8 7F046F68 24180001 */ li $t8, 1 -/* 07BADC 7F046F6C 46065102 */ mul.s $f4, $f10, $f6 -/* 07BAE0 7F046F70 46102083 */ div.s $f2, $f4, $f16 -/* 07BAE4 7F046F74 46029200 */ add.s $f8, $f18, $f2 -/* 07BAE8 7F046F78 4608703E */ c.le.s $f14, $f8 -/* 07BAEC 7F046F7C 00000000 */ nop -/* 07BAF0 7F046F80 4502000F */ bc1fl .Ljp7F046FC0 -/* 07BAF4 7F046F84 C60C00DC */ lwc1 $f12, 0xdc($s0) -/* 07BAF8 7F046F88 C42A83B4 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07BAFC 7F046F8C 460A8182 */ mul.s $f6, $f16, $f10 -/* 07BB00 7F046F90 46060101 */ sub.s $f4, $f0, $f6 -/* 07BB04 7F046F94 E60400D8 */ swc1 $f4, 0xd8($s0) -/* 07BB08 7F046F98 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07BB0C 7F046F9C 4610003C */ c.lt.s $f0, $f16 -/* 07BB10 7F046FA0 00000000 */ nop -/* 07BB14 7F046FA4 45000003 */ bc1f .Ljp7F046FB4 -/* 07BB18 7F046FA8 00000000 */ nop -/* 07BB1C 7F046FAC E61000D8 */ swc1 $f16, 0xd8($s0) -/* 07BB20 7F046FB0 C60000D8 */ lwc1 $f0, 0xd8($s0) -.Ljp7F046FB4: -/* 07BB24 7F046FB4 1000001D */ b .Ljp7F04702C -/* 07BB28 7F046FB8 C60E00C8 */ lwc1 $f14, 0xc8($s0) -/* 07BB2C 7F046FBC C60C00DC */ lwc1 $f12, 0xdc($s0) -.Ljp7F046FC0: -/* 07BB30 7F046FC0 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07BB34 7F046FC4 460C003C */ c.lt.s $f0, $f12 -/* 07BB38 7F046FC8 00000000 */ nop -/* 07BB3C 7F046FCC 45000017 */ bc1f .Ljp7F04702C -/* 07BB40 7F046FD0 00000000 */ nop -/* 07BB44 7F046FD4 C42883B4 */ lwc1 $f8, %lo(g_GlobalTimerDelta)($at) -/* 07BB48 7F046FD8 46088282 */ mul.s $f10, $f16, $f8 -/* 07BB4C 7F046FDC 460A0080 */ add.s $f2, $f0, $f10 -/* 07BB50 7F046FE0 4602603C */ c.lt.s $f12, $f2 -/* 07BB54 7F046FE4 00000000 */ nop -/* 07BB58 7F046FE8 45000002 */ bc1f .Ljp7F046FF4 -/* 07BB5C 7F046FEC 00000000 */ nop -/* 07BB60 7F046FF0 46006086 */ mov.s $f2, $f12 -.Ljp7F046FF4: -/* 07BB64 7F046FF4 46021182 */ mul.s $f6, $f2, $f2 -/* 07BB68 7F046FF8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07BB6C 7F046FFC 44812000 */ mtc1 $at, $f4 -/* 07BB70 7F047000 00000000 */ nop -/* 07BB74 7F047004 46043202 */ mul.s $f8, $f6, $f4 -/* 07BB78 7F047008 46104283 */ div.s $f10, $f8, $f16 -/* 07BB7C 7F04700C 460A9180 */ add.s $f6, $f18, $f10 -/* 07BB80 7F047010 460E303C */ c.lt.s $f6, $f14 -/* 07BB84 7F047014 00000000 */ nop -/* 07BB88 7F047018 45000004 */ bc1f .Ljp7F04702C -/* 07BB8C 7F04701C 00000000 */ nop -/* 07BB90 7F047020 E60200D8 */ swc1 $f2, 0xd8($s0) -/* 07BB94 7F047024 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07BB98 7F047028 C60E00C8 */ lwc1 $f14, 0xc8($s0) -.Ljp7F04702C: -/* 07BB9C 7F04702C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07BBA0 7F047030 C42483B4 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07BBA4 7F047034 46040202 */ mul.s $f8, $f0, $f4 -/* 07BBA8 7F047038 46087281 */ sub.s $f10, $f14, $f8 -/* 07BBAC 7F04703C E60A00C8 */ swc1 $f10, 0xc8($s0) -/* 07BBB0 7F047040 C60600C8 */ lwc1 $f6, 0xc8($s0) -/* 07BBB4 7F047044 4612303E */ c.le.s $f6, $f18 -/* 07BBB8 7F047048 00000000 */ nop -/* 07BBBC 7F04704C 45020579 */ bc1fl .Ljp7F048634 -/* 07BBC0 7F047050 92220003 */ lbu $v0, 3($s1) -/* 07BBC4 7F047054 E61200C8 */ swc1 $f18, 0xc8($s0) -/* 07BBC8 7F047058 E61600D8 */ swc1 $f22, 0xd8($s0) -/* 07BBCC 7F04705C 10000574 */ b .Ljp7F048630 -/* 07BBD0 7F047060 AE1800D4 */ sw $t8, 0xd4($s0) -/* 07BBD4 7F047064 2401000D */ li $at, 13 -.Ljp7F047068: -/* 07BBD8 7F047068 5441023F */ bnel $v0, $at, .Ljp7F047968 -/* 07BBDC 7F04706C 24010027 */ li $at, 39 -/* 07BBE0 7F047070 8E280008 */ lw $t0, 8($s1) -/* 07BBE4 7F047074 000848C0 */ sll $t1, $t0, 3 -/* 07BBE8 7F047078 0522023B */ bltzl $t1, .Ljp7F047968 -/* 07BBEC 7F04707C 24010027 */ li $at, 39 -/* 07BBF0 7F047080 0FC2279B */ jal get_curplayer_positiondata -/* 07BBF4 7F047084 8E700004 */ lw $s0, 4($s3) -/* 07BBF8 7F047088 AFA004B0 */ sw $zero, 0x4b0($sp) -/* 07BBFC 7F04708C AFA004AC */ sw $zero, 0x4ac($sp) -/* 07BC00 7F047090 AFA004A8 */ sw $zero, 0x4a8($sp) -/* 07BC04 7F047094 8E23000C */ lw $v1, 0xc($s1) -/* 07BC08 7F047098 00409025 */ move $s2, $v0 -/* 07BC0C 7F04709C 00035800 */ sll $t3, $v1, 0 -/* 07BC10 7F0470A0 05610056 */ bgez $t3, .Ljp7F0471FC -/* 07BC14 7F0470A4 00036040 */ sll $t4, $v1, 1 -/* 07BC18 7F0470A8 05830008 */ bgezl $t4, .Ljp7F0470CC -/* 07BC1C 7F0470AC C6020084 */ lwc1 $f2, 0x84($s0) -/* 07BC20 7F0470B0 C6080090 */ lwc1 $f8, 0x90($s0) -/* 07BC24 7F0470B4 C604009C */ lwc1 $f4, 0x9c($s0) -/* 07BC28 7F0470B8 E6080084 */ swc1 $f8, 0x84($s0) -/* 07BC2C 7F0470BC C6020084 */ lwc1 $f2, 0x84($s0) -/* 07BC30 7F0470C0 10000036 */ b .Ljp7F04719C -/* 07BC34 7F0470C4 E6040098 */ swc1 $f4, 0x98($s0) -/* 07BC38 7F0470C8 C6020084 */ lwc1 $f2, 0x84($s0) -.Ljp7F0470CC: -/* 07BC3C 7F0470CC C60A0090 */ lwc1 $f10, 0x90($s0) -/* 07BC40 7F0470D0 460A1032 */ c.eq.s $f2, $f10 -/* 07BC44 7F0470D4 00000000 */ nop -/* 07BC48 7F0470D8 45000030 */ bc1f .Ljp7F04719C -/* 07BC4C 7F0470DC 00000000 */ nop -/* 07BC50 7F0470E0 C6060098 */ lwc1 $f6, 0x98($s0) -/* 07BC54 7F0470E4 C604009C */ lwc1 $f4, 0x9c($s0) -/* 07BC58 7F0470E8 46043032 */ c.eq.s $f6, $f4 -/* 07BC5C 7F0470EC 00000000 */ nop -/* 07BC60 7F0470F0 4500002A */ bc1f .Ljp7F04719C -/* 07BC64 7F0470F4 00000000 */ nop -/* 07BC68 7F0470F8 0C002918 */ jal randomGetNext -/* 07BC6C 7F0470FC 00000000 */ nop -/* 07BC70 7F047100 44824000 */ mtc1 $v0, $f8 -/* 07BC74 7F047104 3C018005 */ lui $at, %hi(D_80052AE8) # $at, 0x8005 -/* 07BC78 7F047108 C4342B18 */ lwc1 $f20, %lo(D_80052AE8)($at) -/* 07BC7C 7F04710C 04410005 */ bgez $v0, .Ljp7F047124 -/* 07BC80 7F047110 468042A0 */ cvt.s.w $f10, $f8 -/* 07BC84 7F047114 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07BC88 7F047118 44813000 */ mtc1 $at, $f6 -/* 07BC8C 7F04711C 00000000 */ nop -/* 07BC90 7F047120 46065280 */ add.s $f10, $f10, $f6 -.Ljp7F047124: -/* 07BC94 7F047124 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07BC98 7F047128 44812000 */ mtc1 $at, $f4 -/* 07BC9C 7F04712C 3C01421C */ li $at, 0x421C0000 # 39.000000 -/* 07BCA0 7F047130 44813000 */ mtc1 $at, $f6 -/* 07BCA4 7F047134 46045202 */ mul.s $f8, $f10, $f4 -/* 07BCA8 7F047138 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07BCAC 7F04713C 44812000 */ mtc1 $at, $f4 -/* 07BCB0 7F047140 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07BCB4 7F047144 46064282 */ mul.s $f10, $f8, $f6 -/* 07BCB8 7F047148 46045200 */ add.s $f8, $f10, $f4 -/* 07BCBC 7F04714C 44815000 */ mtc1 $at, $f10 -/* 07BCC0 7F047150 46144182 */ mul.s $f6, $f8, $f20 -/* 07BCC4 7F047154 460A3103 */ div.s $f4, $f6, $f10 -/* 07BCC8 7F047158 0C002918 */ jal randomGetNext -/* 07BCCC 7F04715C E6040098 */ swc1 $f4, 0x98($s0) -/* 07BCD0 7F047160 44824000 */ mtc1 $v0, $f8 -/* 07BCD4 7F047164 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07BCD8 7F047168 04410004 */ bgez $v0, .Ljp7F04717C -/* 07BCDC 7F04716C 468041A0 */ cvt.s.w $f6, $f8 -/* 07BCE0 7F047170 44815000 */ mtc1 $at, $f10 -/* 07BCE4 7F047174 00000000 */ nop -/* 07BCE8 7F047178 460A3180 */ add.s $f6, $f6, $f10 -.Ljp7F04717C: -/* 07BCEC 7F04717C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07BCF0 7F047180 44812000 */ mtc1 $at, $f4 -/* 07BCF4 7F047184 00000000 */ nop -/* 07BCF8 7F047188 46043202 */ mul.s $f8, $f6, $f4 -/* 07BCFC 7F04718C 00000000 */ nop -/* 07BD00 7F047190 46144282 */ mul.s $f10, $f8, $f20 -/* 07BD04 7F047194 E60A0084 */ swc1 $f10, 0x84($s0) -/* 07BD08 7F047198 C6020084 */ lwc1 $f2, 0x84($s0) -.Ljp7F04719C: -/* 07BD0C 7F04719C 3C018005 */ lui $at, %hi(D_80052AEC) # $at, 0x8005 -/* 07BD10 7F0471A0 C4202B1C */ lwc1 $f0, %lo(D_80052AEC)($at) -/* 07BD14 7F0471A4 3C018005 */ lui $at, %hi(D_80052AF4) # $at, 0x8005 -/* 07BD18 7F0471A8 C4262B24 */ lwc1 $f6, %lo(D_80052AF4)($at) -/* 07BD1C 7F0471AC 44051000 */ mfc1 $a1, $f2 -/* 07BD20 7F0471B0 44070000 */ mfc1 $a3, $f0 -/* 07BD24 7F0471B4 26040090 */ addiu $a0, $s0, 0x90 -/* 07BD28 7F0471B8 26060094 */ addiu $a2, $s0, 0x94 -/* 07BD2C 7F0471BC E7A00010 */ swc1 $f0, 0x10($sp) -/* 07BD30 7F0471C0 0FC10D03 */ jal chrobjCallsApplySpeed -/* 07BD34 7F0471C4 E7A60014 */ swc1 $f6, 0x14($sp) -/* 07BD38 7F0471C8 3C018005 */ lui $at, %hi(D_80052AF8) # $at, 0x8005 -/* 07BD3C 7F0471CC C4202B28 */ lwc1 $f0, %lo(D_80052AF8)($at) -/* 07BD40 7F0471D0 3C018005 */ lui $at, %hi(D_80052AFC) # $at, 0x8005 -/* 07BD44 7F0471D4 C4242B2C */ lwc1 $f4, %lo(D_80052AFC)($at) -/* 07BD48 7F0471D8 8E050098 */ lw $a1, 0x98($s0) -/* 07BD4C 7F0471DC 44070000 */ mfc1 $a3, $f0 -/* 07BD50 7F0471E0 2604009C */ addiu $a0, $s0, 0x9c -/* 07BD54 7F0471E4 260600A0 */ addiu $a2, $s0, 0xa0 -/* 07BD58 7F0471E8 E7A00010 */ swc1 $f0, 0x10($sp) -/* 07BD5C 7F0471EC 0FC10D03 */ jal chrobjCallsApplySpeed -/* 07BD60 7F0471F0 E7A40014 */ swc1 $f4, 0x14($sp) -/* 07BD64 7F0471F4 1000050F */ b .Ljp7F048634 -/* 07BD68 7F0471F8 92220003 */ lbu $v0, 3($s1) -.Ljp7F0471FC: -/* 07BD6C 7F0471FC C6480008 */ lwc1 $f8, 8($s2) -/* 07BD70 7F047200 C62A0058 */ lwc1 $f10, 0x58($s1) -/* 07BD74 7F047204 C646000C */ lwc1 $f6, 0xc($s2) -/* 07BD78 7F047208 C624005C */ lwc1 $f4, 0x5c($s1) -/* 07BD7C 7F04720C 460A4001 */ sub.s $f0, $f8, $f10 -/* 07BD80 7F047210 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 07BD84 7F047214 44815000 */ mtc1 $at, $f10 -/* 07BD88 7F047218 46043201 */ sub.s $f8, $f6, $f4 -/* 07BD8C 7F04721C 460A4181 */ sub.s $f6, $f8, $f10 -/* 07BD90 7F047220 46000282 */ mul.s $f10, $f0, $f0 -/* 07BD94 7F047224 E7A604C4 */ swc1 $f6, 0x4c4($sp) -/* 07BD98 7F047228 C6280060 */ lwc1 $f8, 0x60($s1) -/* 07BD9C 7F04722C C6440010 */ lwc1 $f4, 0x10($s2) -/* 07BDA0 7F047230 E7A004C8 */ swc1 $f0, 0x4c8($sp) -/* 07BDA4 7F047234 46082081 */ sub.s $f2, $f4, $f8 -/* 07BDA8 7F047238 46021182 */ mul.s $f6, $f2, $f2 -/* 07BDAC 7F04723C E7A204C0 */ swc1 $f2, 0x4c0($sp) -/* 07BDB0 7F047240 46065500 */ add.s $f20, $f10, $f6 -/* 07BDB4 7F047244 E7B404BC */ swc1 $f20, 0x4bc($sp) -/* 07BDB8 7F047248 0C007E08 */ jal sqrtf -/* 07BDBC 7F04724C 4600A306 */ mov.s $f12, $f20 -/* 07BDC0 7F047250 E7A004B4 */ swc1 $f0, 0x4b4($sp) -/* 07BDC4 7F047254 8E2E0008 */ lw $t6, 8($s1) -/* 07BDC8 7F047258 46000086 */ mov.s $f2, $f0 -/* 07BDCC 7F04725C 000E5100 */ sll $t2, $t6, 4 -/* 07BDD0 7F047260 05430008 */ bgezl $t2, .Ljp7F047284 -/* 07BDD4 7F047264 C7AC04BC */ lwc1 $f12, 0x4bc($sp) -/* 07BDD8 7F047268 C7A004C4 */ lwc1 $f0, 0x4c4($sp) -/* 07BDDC 7F04726C 46000102 */ mul.s $f4, $f0, $f0 -/* 07BDE0 7F047270 4604A300 */ add.s $f12, $f20, $f4 -/* 07BDE4 7F047274 0C007E08 */ jal sqrtf -/* 07BDE8 7F047278 E7AC04BC */ swc1 $f12, 0x4bc($sp) -/* 07BDEC 7F04727C 46000086 */ mov.s $f2, $f0 -/* 07BDF0 7F047280 C7AC04BC */ lwc1 $f12, 0x4bc($sp) -.Ljp7F047284: -/* 07BDF4 7F047284 0FC0B553 */ jal chrlvGetAimLimitAngle -/* 07BDF8 7F047288 E7A204B8 */ swc1 $f2, 0x4b8($sp) -/* 07BDFC 7F04728C E7A004A4 */ swc1 $f0, 0x4a4($sp) -/* 07BE00 7F047290 C6080098 */ lwc1 $f8, 0x98($s0) -/* 07BE04 7F047294 C6100084 */ lwc1 $f16, 0x84($s0) -/* 07BE08 7F047298 C7A204B8 */ lwc1 $f2, 0x4b8($sp) -/* 07BE0C 7F04729C E7A804D8 */ swc1 $f8, 0x4d8($sp) -/* 07BE10 7F0472A0 C60A00A8 */ lwc1 $f10, 0xa8($s0) -/* 07BE14 7F0472A4 460A103E */ c.le.s $f2, $f10 -/* 07BE18 7F0472A8 00000000 */ nop -/* 07BE1C 7F0472AC 45020096 */ bc1fl .Ljp7F047508 -/* 07BE20 7F0472B0 8FA804B0 */ lw $t0, 0x4b0($sp) -/* 07BE24 7F0472B4 C7AC04C8 */ lwc1 $f12, 0x4c8($sp) -/* 07BE28 7F0472B8 C7AE04C0 */ lwc1 $f14, 0x4c0($sp) -/* 07BE2C 7F0472BC 0FC16BD4 */ jal atan2f -/* 07BE30 7F0472C0 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 07BE34 7F0472C4 E7A004A0 */ swc1 $f0, 0x4a0($sp) -/* 07BE38 7F0472C8 C7AC04C4 */ lwc1 $f12, 0x4c4($sp) -/* 07BE3C 7F0472CC 0FC16BD4 */ jal atan2f -/* 07BE40 7F0472D0 C7AE04B4 */ lwc1 $f14, 0x4b4($sp) -/* 07BE44 7F0472D4 E7A0049C */ swc1 $f0, 0x49c($sp) -/* 07BE48 7F0472D8 8E220008 */ lw $v0, 8($s1) -/* 07BE4C 7F0472DC C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 07BE50 7F0472E0 24190001 */ li $t9, 1 -/* 07BE54 7F0472E4 00027840 */ sll $t7, $v0, 1 -/* 07BE58 7F0472E8 05E00003 */ bltz $t7, .Ljp7F0472F8 -/* 07BE5C 7F0472EC 00026880 */ sll $t5, $v0, 2 -/* 07BE60 7F0472F0 05A10005 */ bgez $t5, .Ljp7F047308 -/* 07BE64 7F0472F4 C7A604A0 */ lwc1 $f6, 0x4a0($sp) -.Ljp7F0472F8: -/* 07BE68 7F0472F8 3C018005 */ lui $at, %hi(D_80052B00) # $at, 0x8005 -/* 07BE6C 7F0472FC C4342B30 */ lwc1 $f20, %lo(D_80052B00)($at) -/* 07BE70 7F047300 10000027 */ b .Ljp7F0473A0 -/* 07BE74 7F047304 AFB904B0 */ sw $t9, 0x4b0($sp) -.Ljp7F047308: -/* 07BE78 7F047308 C6040090 */ lwc1 $f4, 0x90($s0) -/* 07BE7C 7F04730C 3C018005 */ lui $at, %hi(D_80052B04) # $at, 0x8005 -/* 07BE80 7F047310 46043301 */ sub.s $f12, $f6, $f4 -/* 07BE84 7F047314 4616603C */ c.lt.s $f12, $f22 -/* 07BE88 7F047318 00000000 */ nop -/* 07BE8C 7F04731C 45000003 */ bc1f .Ljp7F04732C -/* 07BE90 7F047320 00000000 */ nop -/* 07BE94 7F047324 C4342B34 */ lwc1 $f20, %lo(D_80052B04)($at) -/* 07BE98 7F047328 46146300 */ add.s $f12, $f12, $f20 -.Ljp7F04732C: -/* 07BE9C 7F04732C 3C018005 */ lui $at, %hi(D_80052B08) # $at, 0x8005 -/* 07BEA0 7F047330 C4342B38 */ lwc1 $f20, %lo(D_80052B08)($at) -/* 07BEA4 7F047334 3C018005 */ lui $at, %hi(D_80052B0C) # $at, 0x8005 -/* 07BEA8 7F047338 C4282B3C */ lwc1 $f8, %lo(D_80052B0C)($at) -/* 07BEAC 7F04733C 3C018005 */ lui $at, %hi(D_80052B10) # $at, 0x8005 -/* 07BEB0 7F047340 460C403C */ c.lt.s $f8, $f12 -/* 07BEB4 7F047344 00000000 */ nop -/* 07BEB8 7F047348 45020003 */ bc1fl .Ljp7F047358 -/* 07BEBC 7F04734C C60A009C */ lwc1 $f10, 0x9c($s0) -/* 07BEC0 7F047350 46146301 */ sub.s $f12, $f12, $f20 -/* 07BEC4 7F047354 C60A009C */ lwc1 $f10, 0x9c($s0) -.Ljp7F047358: -/* 07BEC8 7F047358 460A0081 */ sub.s $f2, $f0, $f10 -/* 07BECC 7F04735C 4616103C */ c.lt.s $f2, $f22 -/* 07BED0 7F047360 00000000 */ nop -/* 07BED4 7F047364 45000001 */ bc1f .Ljp7F04736C -/* 07BED8 7F047368 00000000 */ nop -.Ljp7F04736C: -/* 07BEDC 7F04736C C4262B40 */ lwc1 $f6, %lo(D_80052B10)($at) -/* 07BEE0 7F047370 3C018005 */ lui $at, %hi(D_80052B14) # $at, 0x8005 -/* 07BEE4 7F047374 4606603C */ c.lt.s $f12, $f6 -/* 07BEE8 7F047378 00000000 */ nop -/* 07BEEC 7F04737C 45020009 */ bc1fl .Ljp7F0473A4 -/* 07BEF0 7F047380 8FA804B0 */ lw $t0, 0x4b0($sp) -/* 07BEF4 7F047384 C4242B44 */ lwc1 $f4, %lo(D_80052B14)($at) -/* 07BEF8 7F047388 24180001 */ li $t8, 1 -/* 07BEFC 7F04738C 460C203C */ c.lt.s $f4, $f12 -/* 07BF00 7F047390 00000000 */ nop -/* 07BF04 7F047394 45020003 */ bc1fl .Ljp7F0473A4 -/* 07BF08 7F047398 8FA804B0 */ lw $t0, 0x4b0($sp) -/* 07BF0C 7F04739C AFB804B0 */ sw $t8, 0x4b0($sp) -.Ljp7F0473A0: -/* 07BF10 7F0473A0 8FA804B0 */ lw $t0, 0x4b0($sp) -.Ljp7F0473A4: -/* 07BF14 7F0473A4 C7A804A0 */ lwc1 $f8, 0x4a0($sp) -/* 07BF18 7F0473A8 02402025 */ move $a0, $s2 -/* 07BF1C 7F0473AC 11000055 */ beqz $t0, .Ljp7F047504 -/* 07BF20 7F0473B0 00002825 */ move $a1, $zero -/* 07BF24 7F0473B4 C60A0084 */ lwc1 $f10, 0x84($s0) -/* 07BF28 7F0473B8 3C018005 */ lui $at, %hi(D_80052B18) # $at, 0x8005 -/* 07BF2C 7F0473BC C4262B48 */ lwc1 $f6, %lo(D_80052B18)($at) -/* 07BF30 7F0473C0 460A4001 */ sub.s $f0, $f8, $f10 -/* 07BF34 7F0473C4 8E690014 */ lw $t1, 0x14($s3) -/* 07BF38 7F0473C8 3C018005 */ lui $at, %hi(D_80052B1C) # $at, 0x8005 -/* 07BF3C 7F0473CC 4606003C */ c.lt.s $f0, $f6 -/* 07BF40 7F0473D0 AFA90494 */ sw $t1, 0x494($sp) -/* 07BF44 7F0473D4 45000003 */ bc1f .Ljp7F0473E4 -/* 07BF48 7F0473D8 00000000 */ nop -/* 07BF4C 7F0473DC 10000007 */ b .Ljp7F0473FC -/* 07BF50 7F0473E0 46140000 */ add.s $f0, $f0, $f20 -.Ljp7F0473E4: -/* 07BF54 7F0473E4 C4242B4C */ lwc1 $f4, %lo(D_80052B1C)($at) -/* 07BF58 7F0473E8 4600203E */ c.le.s $f4, $f0 -/* 07BF5C 7F0473EC 00000000 */ nop -/* 07BF60 7F0473F0 45020003 */ bc1fl .Ljp7F047400 -/* 07BF64 7F0473F4 E7A00498 */ swc1 $f0, 0x498($sp) -/* 07BF68 7F0473F8 46140001 */ sub.s $f0, $f0, $f20 -.Ljp7F0473FC: -/* 07BF6C 7F0473FC E7A00498 */ swc1 $f0, 0x498($sp) -.Ljp7F047400: -/* 07BF70 7F047400 0FC229DD */ jal bondviewUpdateGuardTankFlagsRelated -/* 07BF74 7F047404 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 07BF78 7F047408 C7A00498 */ lwc1 $f0, 0x498($sp) -/* 07BF7C 7F04740C C6080088 */ lwc1 $f8, 0x88($s0) -/* 07BF80 7F047410 C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 07BF84 7F047414 4608003E */ c.le.s $f0, $f8 -/* 07BF88 7F047418 00000000 */ nop -/* 07BF8C 7F04741C 45020027 */ bc1fl .Ljp7F0474BC -/* 07BF90 7F047420 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07BF94 7F047424 C60A008C */ lwc1 $f10, 0x8c($s0) -/* 07BF98 7F047428 240B001B */ li $t3, 27 -/* 07BF9C 7F04742C 4600503E */ c.le.s $f10, $f0 -/* 07BFA0 7F047430 00000000 */ nop -/* 07BFA4 7F047434 45020021 */ bc1fl .Ljp7F0474BC -/* 07BFA8 7F047438 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07BFAC 7F04743C C6460010 */ lwc1 $f6, 0x10($s2) -/* 07BFB0 7F047440 8E650008 */ lw $a1, 8($s3) -/* 07BFB4 7F047444 8E660010 */ lw $a2, 0x10($s3) -/* 07BFB8 7F047448 8E470008 */ lw $a3, 8($s2) -/* 07BFBC 7F04744C AFAB0014 */ sw $t3, 0x14($sp) -/* 07BFC0 7F047450 E7A60010 */ swc1 $f6, 0x10($sp) -/* 07BFC4 7F047454 C660000C */ lwc1 $f0, 0xc($s3) -/* 07BFC8 7F047458 27A40494 */ addiu $a0, $sp, 0x494 -/* 07BFCC 7F04745C E7A00018 */ swc1 $f0, 0x18($sp) -/* 07BFD0 7F047460 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 07BFD4 7F047464 C642000C */ lwc1 $f2, 0xc($s2) -/* 07BFD8 7F047468 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 07BFDC 7F04746C E7A20020 */ swc1 $f2, 0x20($sp) -/* 07BFE0 7F047470 0FC2C675 */ jal stanTestLineUnobstructed -/* 07BFE4 7F047474 E7A20024 */ swc1 $f2, 0x24($sp) -/* 07BFE8 7F047478 1040000F */ beqz $v0, .Ljp7F0474B8 -/* 07BFEC 7F04747C C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 07BFF0 7F047480 8FAC0494 */ lw $t4, 0x494($sp) -/* 07BFF4 7F047484 8E4E0014 */ lw $t6, 0x14($s2) -/* 07BFF8 7F047488 558E000C */ bnel $t4, $t6, .Ljp7F0474BC -/* 07BFFC 7F04748C 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07C000 7F047490 8E2A0008 */ lw $t2, 8($s1) -/* 07C004 7F047494 3C012000 */ lui $at, 0x2000 -/* 07C008 7F047498 240D0001 */ li $t5, 1 -/* 07C00C 7F04749C 01417825 */ or $t7, $t2, $at -/* 07C010 7F0474A0 AE2F0008 */ sw $t7, 8($s1) -/* 07C014 7F0474A4 C7A4049C */ lwc1 $f4, 0x49c($sp) -/* 07C018 7F0474A8 AFAD04A8 */ sw $t5, 0x4a8($sp) -/* 07C01C 7F0474AC C7B004A0 */ lwc1 $f16, 0x4a0($sp) -/* 07C020 7F0474B0 1000000F */ b .Ljp7F0474F0 -/* 07C024 7F0474B4 E7A404D8 */ swc1 $f4, 0x4d8($sp) -.Ljp7F0474B8: -/* 07C028 7F0474B8 8E0200B8 */ lw $v0, 0xb8($s0) -.Ljp7F0474BC: -/* 07C02C 7F0474BC 3C198005 */ lui $t9, %hi(g_GlobalTimer) # $t9, 0x8005 -/* 07C030 7F0474C0 0442000B */ bltzl $v0, .Ljp7F0474F0 -/* 07C034 7F0474C4 AFA004B0 */ sw $zero, 0x4b0($sp) -/* 07C038 7F0474C8 8F3983AC */ lw $t9, %lo(g_GlobalTimer)($t9) -/* 07C03C 7F0474CC 2738FF88 */ addiu $t8, $t9, -0x78 -/* 07C040 7F0474D0 0302082A */ slt $at, $t8, $v0 -/* 07C044 7F0474D4 50200006 */ beql $at, $zero, .Ljp7F0474F0 -/* 07C048 7F0474D8 AFA004B0 */ sw $zero, 0x4b0($sp) -/* 07C04C 7F0474DC C608009C */ lwc1 $f8, 0x9c($s0) -/* 07C050 7F0474E0 C6100090 */ lwc1 $f16, 0x90($s0) -/* 07C054 7F0474E4 10000002 */ b .Ljp7F0474F0 -/* 07C058 7F0474E8 E7A804D8 */ swc1 $f8, 0x4d8($sp) -/* 07C05C 7F0474EC AFA004B0 */ sw $zero, 0x4b0($sp) -.Ljp7F0474F0: -/* 07C060 7F0474F0 02402025 */ move $a0, $s2 -/* 07C064 7F0474F4 24050001 */ li $a1, 1 -/* 07C068 7F0474F8 0FC229DD */ jal bondviewUpdateGuardTankFlagsRelated -/* 07C06C 7F0474FC E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 07C070 7F047500 C7B004DC */ lwc1 $f16, 0x4dc($sp) -.Ljp7F047504: -/* 07C074 7F047504 8FA804B0 */ lw $t0, 0x4b0($sp) -.Ljp7F047508: -/* 07C078 7F047508 3C018005 */ lui $at, %hi(D_80052B20) # $at, 0x8005 -/* 07C07C 7F04750C C4342B50 */ lwc1 $f20, %lo(D_80052B20)($at) -/* 07C080 7F047510 51000007 */ beql $t0, $zero, .Ljp7F047530 -/* 07C084 7F047514 8E0900D0 */ lw $t1, 0xd0($s0) -/* 07C088 7F047518 C7AC04BC */ lwc1 $f12, 0x4bc($sp) -/* 07C08C 7F04751C 0FC0B553 */ jal chrlvGetAimLimitAngle -/* 07C090 7F047520 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 07C094 7F047524 C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 07C098 7F047528 E7A004A4 */ swc1 $f0, 0x4a4($sp) -/* 07C09C 7F04752C 8E0900D0 */ lw $t1, 0xd0($s0) -.Ljp7F047530: -/* 07C0A0 7F047530 1120001F */ beqz $t1, .Ljp7F0475B0 -/* 07C0A4 7F047534 3C0B8005 */ lui $t3, %hi(g_GlobalTimer) # $t3, 0x8005 -/* 07C0A8 7F047538 8D6B83AC */ lw $t3, %lo(g_GlobalTimer)($t3) -/* 07C0AC 7F04753C 24010078 */ li $at, 120 -/* 07C0B0 7F047540 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 07C0B4 7F047544 0161001A */ div $zero, $t3, $at -/* 07C0B8 7F047548 00006010 */ mfhi $t4 -/* 07C0BC 7F04754C 448C5000 */ mtc1 $t4, $f10 -/* 07C0C0 7F047550 3C0142F0 */ li $at, 0x42F00000 # 120.000000 -/* 07C0C4 7F047554 44814000 */ mtc1 $at, $f8 -/* 07C0C8 7F047558 468051A0 */ cvt.s.w $f6, $f10 -/* 07C0CC 7F04755C 46143102 */ mul.s $f4, $f6, $f20 -/* 07C0D0 7F047560 0FC160F3 */ jal sinf -/* 07C0D4 7F047564 46082303 */ div.s $f12, $f4, $f8 -/* 07C0D8 7F047568 3C018005 */ lui $at, %hi(D_80052B24) # $at, 0x8005 -/* 07C0DC 7F04756C C4262B54 */ lwc1 $f6, %lo(D_80052B24)($at) -/* 07C0E0 7F047570 C7AA04A4 */ lwc1 $f10, 0x4a4($sp) -/* 07C0E4 7F047574 C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 07C0E8 7F047578 46065102 */ mul.s $f4, $f10, $f6 -/* 07C0EC 7F04757C 00000000 */ nop -/* 07C0F0 7F047580 46002202 */ mul.s $f8, $f4, $f0 -/* 07C0F4 7F047584 46088400 */ add.s $f16, $f16, $f8 -/* 07C0F8 7F047588 4616803C */ c.lt.s $f16, $f22 -/* 07C0FC 7F04758C 00000000 */ nop -/* 07C100 7F047590 45000002 */ bc1f .Ljp7F04759C -/* 07C104 7F047594 00000000 */ nop -/* 07C108 7F047598 46148400 */ add.s $f16, $f16, $f20 -.Ljp7F04759C: -/* 07C10C 7F04759C 4610A03E */ c.le.s $f20, $f16 -/* 07C110 7F0475A0 00000000 */ nop -/* 07C114 7F0475A4 45020003 */ bc1fl .Ljp7F0475B4 -/* 07C118 7F0475A8 C6020084 */ lwc1 $f2, 0x84($s0) -/* 07C11C 7F0475AC 46148401 */ sub.s $f16, $f16, $f20 -.Ljp7F0475B0: -/* 07C120 7F0475B0 C6020084 */ lwc1 $f2, 0x84($s0) -.Ljp7F0475B4: -/* 07C124 7F0475B4 3C018005 */ lui $at, %hi(D_80052B28) # $at, 0x8005 -/* 07C128 7F0475B8 C42A2B58 */ lwc1 $f10, %lo(D_80052B28)($at) -/* 07C12C 7F0475BC 46028001 */ sub.s $f0, $f16, $f2 -/* 07C130 7F0475C0 26040090 */ addiu $a0, $s0, 0x90 -/* 07C134 7F0475C4 460A003C */ c.lt.s $f0, $f10 -/* 07C138 7F0475C8 00000000 */ nop -/* 07C13C 7F0475CC 45000003 */ bc1f .Ljp7F0475DC -/* 07C140 7F0475D0 00000000 */ nop -/* 07C144 7F0475D4 10000008 */ b .Ljp7F0475F8 -/* 07C148 7F0475D8 46140000 */ add.s $f0, $f0, $f20 -.Ljp7F0475DC: -/* 07C14C 7F0475DC 3C018005 */ lui $at, %hi(D_80052B2C) # $at, 0x8005 -/* 07C150 7F0475E0 C4262B5C */ lwc1 $f6, %lo(D_80052B2C)($at) -/* 07C154 7F0475E4 4600303E */ c.le.s $f6, $f0 -/* 07C158 7F0475E8 00000000 */ nop -/* 07C15C 7F0475EC 45020003 */ bc1fl .Ljp7F0475FC -/* 07C160 7F0475F0 C60C0088 */ lwc1 $f12, 0x88($s0) -/* 07C164 7F0475F4 46140001 */ sub.s $f0, $f0, $f20 -.Ljp7F0475F8: -/* 07C168 7F0475F8 C60C0088 */ lwc1 $f12, 0x88($s0) -.Ljp7F0475FC: -/* 07C16C 7F0475FC 3C018005 */ lui $at, %hi(D_80052B30) # $at, 0x8005 -/* 07C170 7F047600 4600603C */ c.lt.s $f12, $f0 -/* 07C174 7F047604 00000000 */ nop -/* 07C178 7F047608 45020004 */ bc1fl .Ljp7F04761C -/* 07C17C 7F04760C C60C008C */ lwc1 $f12, 0x8c($s0) -/* 07C180 7F047610 10000007 */ b .Ljp7F047630 -/* 07C184 7F047614 460C1400 */ add.s $f16, $f2, $f12 -/* 07C188 7F047618 C60C008C */ lwc1 $f12, 0x8c($s0) -.Ljp7F04761C: -/* 07C18C 7F04761C 460C003C */ c.lt.s $f0, $f12 -/* 07C190 7F047620 00000000 */ nop -/* 07C194 7F047624 45020003 */ bc1fl .Ljp7F047634 -/* 07C198 7F047628 4616803C */ c.lt.s $f16, $f22 -/* 07C19C 7F04762C 460C1400 */ add.s $f16, $f2, $f12 -.Ljp7F047630: -/* 07C1A0 7F047630 4616803C */ c.lt.s $f16, $f22 -.Ljp7F047634: -/* 07C1A4 7F047634 00000000 */ nop -/* 07C1A8 7F047638 45020003 */ bc1fl .Ljp7F047648 -/* 07C1AC 7F04763C 4610A03E */ c.le.s $f20, $f16 -/* 07C1B0 7F047640 46148400 */ add.s $f16, $f16, $f20 -/* 07C1B4 7F047644 4610A03E */ c.le.s $f20, $f16 -.Ljp7F047648: -/* 07C1B8 7F047648 00000000 */ nop -/* 07C1BC 7F04764C 45000002 */ bc1f .Ljp7F047658 -/* 07C1C0 7F047650 00000000 */ nop -/* 07C1C4 7F047654 46148401 */ sub.s $f16, $f16, $f20 -.Ljp7F047658: -/* 07C1C8 7F047658 C4202B60 */ lwc1 $f0, %lo(D_80052B30)($at) -/* 07C1CC 7F04765C 44058000 */ mfc1 $a1, $f16 -/* 07C1D0 7F047660 26060094 */ addiu $a2, $s0, 0x94 -/* 07C1D4 7F047664 E7A00010 */ swc1 $f0, 0x10($sp) -/* 07C1D8 7F047668 C60400A4 */ lwc1 $f4, 0xa4($s0) -/* 07C1DC 7F04766C 44070000 */ mfc1 $a3, $f0 -/* 07C1E0 7F047670 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 07C1E4 7F047674 0FC10D03 */ jal chrobjCallsApplySpeed -/* 07C1E8 7F047678 E7A40014 */ swc1 $f4, 0x14($sp) -/* 07C1EC 7F04767C 3C018005 */ lui $at, %hi(D_80052B34) # $at, 0x8005 -/* 07C1F0 7F047680 C4202B64 */ lwc1 $f0, %lo(D_80052B34)($at) -/* 07C1F4 7F047684 2604009C */ addiu $a0, $s0, 0x9c -/* 07C1F8 7F047688 8FA504D8 */ lw $a1, 0x4d8($sp) -/* 07C1FC 7F04768C E7A00010 */ swc1 $f0, 0x10($sp) -/* 07C200 7F047690 C60800A4 */ lwc1 $f8, 0xa4($s0) -/* 07C204 7F047694 44070000 */ mfc1 $a3, $f0 -/* 07C208 7F047698 260600A0 */ addiu $a2, $s0, 0xa0 -/* 07C20C 7F04769C 0FC10D03 */ jal chrobjCallsApplySpeed -/* 07C210 7F0476A0 E7A80014 */ swc1 $f8, 0x14($sp) -/* 07C214 7F0476A4 C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 07C218 7F0476A8 C60A0090 */ lwc1 $f10, 0x90($s0) -/* 07C21C 7F0476AC 3C018005 */ lui $at, %hi(D_80052B38) # $at, 0x8005 -/* 07C220 7F0476B0 C7A604D8 */ lwc1 $f6, 0x4d8($sp) -/* 07C224 7F0476B4 460A8301 */ sub.s $f12, $f16, $f10 -/* 07C228 7F0476B8 4616603C */ c.lt.s $f12, $f22 -/* 07C22C 7F0476BC 00000000 */ nop -/* 07C230 7F0476C0 45000002 */ bc1f .Ljp7F0476CC -/* 07C234 7F0476C4 00000000 */ nop -/* 07C238 7F0476C8 46146300 */ add.s $f12, $f12, $f20 -.Ljp7F0476CC: -/* 07C23C 7F0476CC C4202B68 */ lwc1 $f0, %lo(D_80052B38)($at) -/* 07C240 7F0476D0 460C003C */ c.lt.s $f0, $f12 -/* 07C244 7F0476D4 00000000 */ nop -/* 07C248 7F0476D8 45020003 */ bc1fl .Ljp7F0476E8 -/* 07C24C 7F0476DC C604009C */ lwc1 $f4, 0x9c($s0) -/* 07C250 7F0476E0 46146301 */ sub.s $f12, $f12, $f20 -/* 07C254 7F0476E4 C604009C */ lwc1 $f4, 0x9c($s0) -.Ljp7F0476E8: -/* 07C258 7F0476E8 46043081 */ sub.s $f2, $f6, $f4 -/* 07C25C 7F0476EC 4616103C */ c.lt.s $f2, $f22 -/* 07C260 7F0476F0 00000000 */ nop -/* 07C264 7F0476F4 45020003 */ bc1fl .Ljp7F047704 -/* 07C268 7F0476F8 4602003C */ c.lt.s $f0, $f2 -/* 07C26C 7F0476FC 46141080 */ add.s $f2, $f2, $f20 -/* 07C270 7F047700 4602003C */ c.lt.s $f0, $f2 -.Ljp7F047704: -/* 07C274 7F047704 00000000 */ nop -/* 07C278 7F047708 45020003 */ bc1fl .Ljp7F047718 -/* 07C27C 7F04770C AE0000D0 */ sw $zero, 0xd0($s0) -/* 07C280 7F047710 46141081 */ sub.s $f2, $f2, $f20 -/* 07C284 7F047714 AE0000D0 */ sw $zero, 0xd0($s0) -.Ljp7F047718: -/* 07C288 7F047718 8FAE04B0 */ lw $t6, 0x4b0($sp) -/* 07C28C 7F04771C C7A804A4 */ lwc1 $f8, 0x4a4($sp) -/* 07C290 7F047720 51C00047 */ beql $t6, $zero, .Ljp7F047840 -/* 07C294 7F047724 8FB904AC */ lw $t9, 0x4ac($sp) -/* 07C298 7F047728 4608603C */ c.lt.s $f12, $f8 -/* 07C29C 7F04772C C7AA04A4 */ lwc1 $f10, 0x4a4($sp) -/* 07C2A0 7F047730 4502001B */ bc1fl .Ljp7F0477A0 -/* 07C2A4 7F047734 460A5000 */ add.s $f0, $f10, $f10 -/* 07C2A8 7F047738 46004007 */ neg.s $f0, $f8 -/* 07C2AC 7F04773C 460C003C */ c.lt.s $f0, $f12 -/* 07C2B0 7F047740 00000000 */ nop -/* 07C2B4 7F047744 45020016 */ bc1fl .Ljp7F0477A0 -/* 07C2B8 7F047748 460A5000 */ add.s $f0, $f10, $f10 -/* 07C2BC 7F04774C 4608103C */ c.lt.s $f2, $f8 -/* 07C2C0 7F047750 00000000 */ nop -/* 07C2C4 7F047754 45020012 */ bc1fl .Ljp7F0477A0 -/* 07C2C8 7F047758 460A5000 */ add.s $f0, $f10, $f10 -/* 07C2CC 7F04775C 4602003C */ c.lt.s $f0, $f2 -/* 07C2D0 7F047760 240A0001 */ li $t2, 1 -/* 07C2D4 7F047764 4502000E */ bc1fl .Ljp7F0477A0 -/* 07C2D8 7F047768 460A5000 */ add.s $f0, $f10, $f10 -/* 07C2DC 7F04776C AE0A00D0 */ sw $t2, 0xd0($s0) -/* 07C2E0 7F047770 8FAD04A8 */ lw $t5, 0x4a8($sp) -/* 07C2E4 7F047774 240F0001 */ li $t7, 1 -/* 07C2E8 7F047778 AFAF04AC */ sw $t7, 0x4ac($sp) -/* 07C2EC 7F04777C 11A0002F */ beqz $t5, .Ljp7F04783C -/* 07C2F0 7F047780 3C198005 */ lui $t9, %hi(g_GlobalTimer) # $t9, 0x8005 -/* 07C2F4 7F047784 8F3983AC */ lw $t9, %lo(g_GlobalTimer)($t9) -/* 07C2F8 7F047788 3C188005 */ lui $t8, %hi(g_GlobalTimer) # $t8, 0x8005 -/* 07C2FC 7F04778C AE1900B8 */ sw $t9, 0xb8($s0) -/* 07C300 7F047790 8F1883AC */ lw $t8, %lo(g_GlobalTimer)($t8) -/* 07C304 7F047794 10000029 */ b .Ljp7F04783C -/* 07C308 7F047798 AE1800BC */ sw $t8, 0xbc($s0) -/* 07C30C 7F04779C 460A5000 */ add.s $f0, $f10, $f10 -.Ljp7F0477A0: -/* 07C310 7F0477A0 4600603C */ c.lt.s $f12, $f0 -/* 07C314 7F0477A4 00000000 */ nop -/* 07C318 7F0477A8 45020018 */ bc1fl .Ljp7F04780C -/* 07C31C 7F0477AC 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07C320 7F0477B0 46000387 */ neg.s $f14, $f0 -/* 07C324 7F0477B4 460C703C */ c.lt.s $f14, $f12 -/* 07C328 7F0477B8 00000000 */ nop -/* 07C32C 7F0477BC 45020013 */ bc1fl .Ljp7F04780C -/* 07C330 7F0477C0 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07C334 7F0477C4 4600103C */ c.lt.s $f2, $f0 -/* 07C338 7F0477C8 00000000 */ nop -/* 07C33C 7F0477CC 4502000F */ bc1fl .Ljp7F04780C -/* 07C340 7F0477D0 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07C344 7F0477D4 4602703C */ c.lt.s $f14, $f2 -/* 07C348 7F0477D8 24080001 */ li $t0, 1 -/* 07C34C 7F0477DC 4502000B */ bc1fl .Ljp7F04780C -/* 07C350 7F0477E0 8E0200B8 */ lw $v0, 0xb8($s0) -/* 07C354 7F0477E4 AE0800D0 */ sw $t0, 0xd0($s0) -/* 07C358 7F0477E8 8FAB04A8 */ lw $t3, 0x4a8($sp) -/* 07C35C 7F0477EC 24090001 */ li $t1, 1 -/* 07C360 7F0477F0 AFA904AC */ sw $t1, 0x4ac($sp) -/* 07C364 7F0477F4 11600011 */ beqz $t3, .Ljp7F04783C -/* 07C368 7F0477F8 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) # $t4, 0x8005 -/* 07C36C 7F0477FC 8D8C83AC */ lw $t4, %lo(g_GlobalTimer)($t4) -/* 07C370 7F047800 1000000E */ b .Ljp7F04783C -/* 07C374 7F047804 AE0C00B8 */ sw $t4, 0xb8($s0) -/* 07C378 7F047808 8E0200B8 */ lw $v0, 0xb8($s0) -.Ljp7F04780C: -/* 07C37C 7F04780C 3C0E8005 */ lui $t6, %hi(g_GlobalTimer) # $t6, 0x8005 -/* 07C380 7F047810 0442000B */ bltzl $v0, .Ljp7F047840 -/* 07C384 7F047814 8FB904AC */ lw $t9, 0x4ac($sp) -/* 07C388 7F047818 8DCE83AC */ lw $t6, %lo(g_GlobalTimer)($t6) -/* 07C38C 7F04781C 240F0001 */ li $t7, 1 -/* 07C390 7F047820 240D0001 */ li $t5, 1 -/* 07C394 7F047824 25CAFF88 */ addiu $t2, $t6, -0x78 -/* 07C398 7F047828 0142082A */ slt $at, $t2, $v0 -/* 07C39C 7F04782C 50200004 */ beql $at, $zero, .Ljp7F047840 -/* 07C3A0 7F047830 8FB904AC */ lw $t9, 0x4ac($sp) -/* 07C3A4 7F047834 AE0F00D0 */ sw $t7, 0xd0($s0) -/* 07C3A8 7F047838 AFAD04AC */ sw $t5, 0x4ac($sp) -.Ljp7F04783C: -/* 07C3AC 7F04783C 8FB904AC */ lw $t9, 0x4ac($sp) -.Ljp7F047840: -/* 07C3B0 7F047840 3C018005 */ lui $at, %hi(D_80052B3C) # $at, 0x8005 -/* 07C3B4 7F047844 53200013 */ beql $t9, $zero, .Ljp7F047894 -/* 07C3B8 7F047848 C60200B0 */ lwc1 $f2, 0xb0($s0) -/* 07C3BC 7F04784C C4202B6C */ lwc1 $f0, %lo(D_80052B3C)($at) -/* 07C3C0 7F047850 3C018005 */ lui $at, %hi(D_80052B40) # $at, 0x8005 -/* 07C3C4 7F047854 C4262B70 */ lwc1 $f6, %lo(D_80052B40)($at) -/* 07C3C8 7F047858 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07C3CC 7F04785C C42483B4 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07C3D0 7F047860 C60A00B0 */ lwc1 $f10, 0xb0($s0) -/* 07C3D4 7F047864 46043202 */ mul.s $f8, $f6, $f4 -/* 07C3D8 7F047868 46085180 */ add.s $f6, $f10, $f8 -/* 07C3DC 7F04786C E60600B0 */ swc1 $f6, 0xb0($s0) -/* 07C3E0 7F047870 C60200B0 */ lwc1 $f2, 0xb0($s0) -/* 07C3E4 7F047874 4602003C */ c.lt.s $f0, $f2 -/* 07C3E8 7F047878 00000000 */ nop -/* 07C3EC 7F04787C 45020023 */ bc1fl .Ljp7F04790C -/* 07C3F0 7F047880 4602B03C */ c.lt.s $f22, $f2 -/* 07C3F4 7F047884 E60000B0 */ swc1 $f0, 0xb0($s0) -/* 07C3F8 7F047888 1000001F */ b .Ljp7F047908 -/* 07C3FC 7F04788C C60200B0 */ lwc1 $f2, 0xb0($s0) -/* 07C400 7F047890 C60200B0 */ lwc1 $f2, 0xb0($s0) -.Ljp7F047894: -/* 07C404 7F047894 3C188005 */ lui $t8, %hi(g_ClockTimer) # $t8, 0x8005 -/* 07C408 7F047898 4602B03C */ c.lt.s $f22, $f2 -/* 07C40C 7F04789C 00000000 */ nop -/* 07C410 7F0478A0 4502001A */ bc1fl .Ljp7F04790C -/* 07C414 7F0478A4 4602B03C */ c.lt.s $f22, $f2 -/* 07C418 7F0478A8 8F1883A4 */ lw $t8, %lo(g_ClockTimer)($t8) -/* 07C41C 7F0478AC 00001025 */ move $v0, $zero -/* 07C420 7F0478B0 3C018005 */ lui $at, %hi(D_80052B44) # $at, 0x8005 -/* 07C424 7F0478B4 1B00000C */ blez $t8, .Ljp7F0478E8 -/* 07C428 7F0478B8 00000000 */ nop -/* 07C42C 7F0478BC C4202B74 */ lwc1 $f0, %lo(D_80052B44)($at) -/* 07C430 7F0478C0 C60400B0 */ lwc1 $f4, 0xb0($s0) -.Ljp7F0478C4: -/* 07C434 7F0478C4 3C088005 */ lui $t0, %hi(g_ClockTimer) # $t0, 0x8005 -/* 07C438 7F0478C8 24420001 */ addiu $v0, $v0, 1 -/* 07C43C 7F0478CC 46002282 */ mul.s $f10, $f4, $f0 -/* 07C440 7F0478D0 E60A00B0 */ swc1 $f10, 0xb0($s0) -/* 07C444 7F0478D4 8D0883A4 */ lw $t0, %lo(g_ClockTimer)($t0) -/* 07C448 7F0478D8 0048082A */ slt $at, $v0, $t0 -/* 07C44C 7F0478DC 5420FFF9 */ bnezl $at, .Ljp7F0478C4 -/* 07C450 7F0478E0 C60400B0 */ lwc1 $f4, 0xb0($s0) -/* 07C454 7F0478E4 C60200B0 */ lwc1 $f2, 0xb0($s0) -.Ljp7F0478E8: -/* 07C458 7F0478E8 3C018005 */ lui $at, %hi(D_80052B48) # $at, 0x8005 -/* 07C45C 7F0478EC C4282B78 */ lwc1 $f8, %lo(D_80052B48)($at) -/* 07C460 7F0478F0 4608103E */ c.le.s $f2, $f8 -/* 07C464 7F0478F4 00000000 */ nop -/* 07C468 7F0478F8 45020004 */ bc1fl .Ljp7F04790C -/* 07C46C 7F0478FC 4602B03C */ c.lt.s $f22, $f2 -/* 07C470 7F047900 E61600B0 */ swc1 $f22, 0xb0($s0) -/* 07C474 7F047904 C60200B0 */ lwc1 $f2, 0xb0($s0) -.Ljp7F047908: -/* 07C478 7F047908 4602B03C */ c.lt.s $f22, $f2 -.Ljp7F04790C: -/* 07C47C 7F04790C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07C480 7F047910 45020348 */ bc1fl .Ljp7F048634 -/* 07C484 7F047914 92220003 */ lbu $v0, 3($s1) -/* 07C488 7F047918 C42483B4 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07C48C 7F04791C C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07C490 7F047920 46041282 */ mul.s $f10, $f2, $f4 -/* 07C494 7F047924 460A3200 */ add.s $f8, $f6, $f10 -/* 07C498 7F047928 E60800B4 */ swc1 $f8, 0xb4($s0) -/* 07C49C 7F04792C C60000B4 */ lwc1 $f0, 0xb4($s0) -/* 07C4A0 7F047930 4600A03E */ c.le.s $f20, $f0 -/* 07C4A4 7F047934 00000000 */ nop -/* 07C4A8 7F047938 4502033E */ bc1fl .Ljp7F048634 -/* 07C4AC 7F04793C 92220003 */ lbu $v0, 3($s1) -/* 07C4B0 7F047940 46140101 */ sub.s $f4, $f0, $f20 -.Ljp7F047944: -/* 07C4B4 7F047944 E60400B4 */ swc1 $f4, 0xb4($s0) -/* 07C4B8 7F047948 C60000B4 */ lwc1 $f0, 0xb4($s0) -/* 07C4BC 7F04794C 4600A03E */ c.le.s $f20, $f0 -/* 07C4C0 7F047950 00000000 */ nop -/* 07C4C4 7F047954 4503FFFB */ bc1tl .Ljp7F047944 -/* 07C4C8 7F047958 46140101 */ sub.s $f4, $f0, $f20 -/* 07C4CC 7F04795C 10000335 */ b .Ljp7F048634 -/* 07C4D0 7F047960 92220003 */ lbu $v0, 3($s1) -/* 07C4D4 7F047964 24010027 */ li $at, 39 -.Ljp7F047968: -/* 07C4D8 7F047968 14410255 */ bne $v0, $at, .Ljp7F0482C0 -/* 07C4DC 7F04796C 02202025 */ move $a0, $s1 -/* 07C4E0 7F047970 C62600A0 */ lwc1 $f6, 0xa0($s1) -/* 07C4E4 7F047974 AFA0047C */ sw $zero, 0x47c($sp) -/* 07C4E8 7F047978 24050001 */ li $a1, 1 -/* 07C4EC 7F04797C 0FC0D5E1 */ jal ai -/* 07C4F0 7F047980 E7A60480 */ swc1 $f6, 0x480($sp) -/* 07C4F4 7F047984 C62E0098 */ lwc1 $f14, 0x98($s1) -/* 07C4F8 7F047988 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07C4FC 7F04798C 460EB03E */ c.le.s $f22, $f14 -/* 07C500 7F047990 00000000 */ nop -/* 07C504 7F047994 45020016 */ bc1fl .Ljp7F0479F0 -/* 07C508 7F047998 8E29000C */ lw $t1, 0xc($s1) -/* 07C50C 7F04799C C42283B4 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07C510 7F0479A0 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07C514 7F0479A4 4602703E */ c.le.s $f14, $f2 -/* 07C518 7F0479A8 00000000 */ nop -/* 07C51C 7F0479AC 45020006 */ bc1fl .Ljp7F0479C8 -/* 07C520 7F0479B0 C6200088 */ lwc1 $f0, 0x88($s1) -/* 07C524 7F0479B4 C62A0094 */ lwc1 $f10, 0x94($s1) -/* 07C528 7F0479B8 C62E0098 */ lwc1 $f14, 0x98($s1) -/* 07C52C 7F0479BC 10000008 */ b .Ljp7F0479E0 -/* 07C530 7F0479C0 E62A0088 */ swc1 $f10, 0x88($s1) -/* 07C534 7F0479C4 C6200088 */ lwc1 $f0, 0x88($s1) -.Ljp7F0479C8: -/* 07C538 7F0479C8 C6280094 */ lwc1 $f8, 0x94($s1) -/* 07C53C 7F0479CC 46004101 */ sub.s $f4, $f8, $f0 -/* 07C540 7F0479D0 46022182 */ mul.s $f6, $f4, $f2 -/* 07C544 7F0479D4 460E3283 */ div.s $f10, $f6, $f14 -/* 07C548 7F0479D8 460A0200 */ add.s $f8, $f0, $f10 -/* 07C54C 7F0479DC E6280088 */ swc1 $f8, 0x88($s1) -.Ljp7F0479E0: -/* 07C550 7F0479E0 C42483B4 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07C554 7F0479E4 46047181 */ sub.s $f6, $f14, $f4 -/* 07C558 7F0479E8 E6260098 */ swc1 $f6, 0x98($s1) -/* 07C55C 7F0479EC 8E29000C */ lw $t1, 0xc($s1) -.Ljp7F0479F0: -/* 07C560 7F0479F0 00008025 */ move $s0, $zero -/* 07C564 7F0479F4 00095B00 */ sll $t3, $t1, 0xc -/* 07C568 7F0479F8 05600014 */ bltz $t3, .Ljp7F047A4C -/* 07C56C 7F0479FC 00000000 */ nop -/* 07C570 7F047A00 0FC13CCE */ jal objIsHealthy -/* 07C574 7F047A04 02202025 */ move $a0, $s1 -/* 07C578 7F047A08 10400010 */ beqz $v0, .Ljp7F047A4C -/* 07C57C 7F047A0C 00000000 */ nop -/* 07C580 7F047A10 C62A0088 */ lwc1 $f10, 0x88($s1) -/* 07C584 7F047A14 26240058 */ addiu $a0, $s1, 0x58 -/* 07C588 7F047A18 3C0544FA */ lui $a1, 0x44fa -/* 07C58C 7F047A1C 460AB03C */ c.lt.s $f22, $f10 -/* 07C590 7F047A20 3C06453B */ lui $a2, (0x453B8000 >> 16) # lui $a2, 0x453b -/* 07C594 7F047A24 45010006 */ bc1t .Ljp7F047A40 -/* 07C598 7F047A28 00000000 */ nop -/* 07C59C 7F047A2C C6280094 */ lwc1 $f8, 0x94($s1) -/* 07C5A0 7F047A30 4608B03C */ c.lt.s $f22, $f8 -/* 07C5A4 7F047A34 00000000 */ nop -/* 07C5A8 7F047A38 45000004 */ bc1f .Ljp7F047A4C -/* 07C5AC 7F047A3C 00000000 */ nop -.Ljp7F047A40: -/* 07C5B0 7F047A40 0FC14F64 */ jal sub_GAME_7F053894 -/* 07C5B4 7F047A44 34C68000 */ ori $a2, (0x453B8000 & 0xFFFF) # ori $a2, $a2, 0x8000 -/* 07C5B8 7F047A48 00408025 */ move $s0, $v0 -.Ljp7F047A4C: -/* 07C5BC 7F047A4C 5A000019 */ blezl $s0, .Ljp7F047AB4 -/* 07C5C0 7F047A50 8E2400AC */ lw $a0, 0xac($s1) -/* 07C5C4 7F047A54 8E2400AC */ lw $a0, 0xac($s1) -/* 07C5C8 7F047A58 10800005 */ beqz $a0, .Ljp7F047A70 -/* 07C5CC 7F047A5C 00000000 */ nop -/* 07C5D0 7F047A60 0C002380 */ jal sndGetPlayingState -/* 07C5D4 7F047A64 00000000 */ nop -/* 07C5D8 7F047A68 5440000A */ bnezl $v0, .Ljp7F047A94 -/* 07C5DC 7F047A6C 8E2400AC */ lw $a0, 0xac($s1) -.Ljp7F047A70: -/* 07C5E0 7F047A70 0FC3021B */ jal lvlGetControlsLockedFlag -/* 07C5E4 7F047A74 00000000 */ nop -/* 07C5E8 7F047A78 14400005 */ bnez $v0, .Ljp7F047A90 -/* 07C5EC 7F047A7C 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 07C5F0 7F047A80 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07C5F4 7F047A84 24050041 */ li $a1, 65 -/* 07C5F8 7F047A88 0C002386 */ jal sndPlaySfx -/* 07C5FC 7F047A8C 262600AC */ addiu $a2, $s1, 0xac -.Ljp7F047A90: -/* 07C600 7F047A90 8E2400AC */ lw $a0, 0xac($s1) -.Ljp7F047A94: -/* 07C604 7F047A94 24050008 */ li $a1, 8 -/* 07C608 7F047A98 5080000F */ beql $a0, $zero, .Ljp7F047AD8 -/* 07C60C 7F047A9C 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07C610 7F047AA0 0C002465 */ jal sndCreatePostEvent -/* 07C614 7F047AA4 02003025 */ move $a2, $s0 -/* 07C618 7F047AA8 1000000B */ b .Ljp7F047AD8 -/* 07C61C 7F047AAC 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07C620 7F047AB0 8E2400AC */ lw $a0, 0xac($s1) -.Ljp7F047AB4: -/* 07C624 7F047AB4 50800008 */ beql $a0, $zero, .Ljp7F047AD8 -/* 07C628 7F047AB8 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07C62C 7F047ABC 0C002380 */ jal sndGetPlayingState -/* 07C630 7F047AC0 00000000 */ nop -/* 07C634 7F047AC4 50400004 */ beql $v0, $zero, .Ljp7F047AD8 -/* 07C638 7F047AC8 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07C63C 7F047ACC 0C00240C */ jal sndDeactivate -/* 07C640 7F047AD0 8E2400AC */ lw $a0, 0xac($s1) -/* 07C644 7F047AD4 8E2400A4 */ lw $a0, 0xa4($s1) -.Ljp7F047AD8: -/* 07C648 7F047AD8 3C058007 */ lui $a1, %hi(g_CurrentSetup+0) # $a1, 0x8007 -/* 07C64C 7F047ADC 5080002A */ beql $a0, $zero, .Ljp7F047B88 -/* 07C650 7F047AE0 8E2F0008 */ lw $t7, 8($s1) -/* 07C654 7F047AE4 8E2E00A8 */ lw $t6, 0xa8($s1) -/* 07C658 7F047AE8 8C8C0000 */ lw $t4, ($a0) -/* 07C65C 7F047AEC 24A55D40 */ addiu $a1, %lo(g_CurrentSetup+0) # addiu $a1, $a1, 0x5d40 -/* 07C660 7F047AF0 000E5080 */ sll $t2, $t6, 2 -/* 07C664 7F047AF4 018A1021 */ addu $v0, $t4, $t2 -/* 07C668 7F047AF8 8C4F0000 */ lw $t7, ($v0) -/* 07C66C 7F047AFC 8CB90000 */ lw $t9, ($a1) -/* 07C670 7F047B00 8CA90018 */ lw $t1, 0x18($a1) -/* 07C674 7F047B04 000F6900 */ sll $t5, $t7, 4 -/* 07C678 7F047B08 01B91821 */ addu $v1, $t5, $t9 -/* 07C67C 7F047B0C 8C780000 */ lw $t8, ($v1) -/* 07C680 7F047B10 C6260058 */ lwc1 $f6, 0x58($s1) -/* 07C684 7F047B14 C6280060 */ lwc1 $f8, 0x60($s1) -/* 07C688 7F047B18 00184080 */ sll $t0, $t8, 2 -/* 07C68C 7F047B1C 01184023 */ subu $t0, $t0, $t8 -/* 07C690 7F047B20 00084080 */ sll $t0, $t0, 2 -/* 07C694 7F047B24 01184023 */ subu $t0, $t0, $t8 -/* 07C698 7F047B28 00084080 */ sll $t0, $t0, 2 -/* 07C69C 7F047B2C 01093021 */ addu $a2, $t0, $t1 -/* 07C6A0 7F047B30 C4C40000 */ lwc1 $f4, ($a2) -/* 07C6A4 7F047B34 C4CA0008 */ lwc1 $f10, 8($a2) -/* 07C6A8 7F047B38 AFA6047C */ sw $a2, 0x47c($sp) -/* 07C6AC 7F047B3C 46062301 */ sub.s $f12, $f4, $f6 -/* 07C6B0 7F047B40 0FC16BD4 */ jal atan2f -/* 07C6B4 7F047B44 46085381 */ sub.s $f14, $f10, $f8 -/* 07C6B8 7F047B48 E7A00480 */ swc1 $f0, 0x480($sp) -/* 07C6BC 7F047B4C 8E2B0008 */ lw $t3, 8($s1) -/* 07C6C0 7F047B50 3C01DFFF */ lui $at, (0xDFFFFFFF >> 16) # lui $at, 0xdfff -/* 07C6C4 7F047B54 C7A40480 */ lwc1 $f4, 0x480($sp) -/* 07C6C8 7F047B58 000B7080 */ sll $t6, $t3, 2 -/* 07C6CC 7F047B5C 05C10018 */ bgez $t6, .Ljp7F047BC0 -/* 07C6D0 7F047B60 3421FFFF */ ori $at, (0xDFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 07C6D4 7F047B64 8E2C0008 */ lw $t4, 8($s1) -/* 07C6D8 7F047B68 E62400A0 */ swc1 $f4, 0xa0($s1) -/* 07C6DC 7F047B6C 02202025 */ move $a0, $s1 -/* 07C6E0 7F047B70 01815024 */ and $t2, $t4, $at -/* 07C6E4 7F047B74 0FC113C3 */ jal sub_GAME_7F044B38 -/* 07C6E8 7F047B78 AE2A0008 */ sw $t2, 8($s1) -/* 07C6EC 7F047B7C 10000011 */ b .Ljp7F047BC4 -/* 07C6F0 7F047B80 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07C6F4 7F047B84 8E2F0008 */ lw $t7, 8($s1) -.Ljp7F047B88: -/* 07C6F8 7F047B88 000F6880 */ sll $t5, $t7, 2 -/* 07C6FC 7F047B8C 05A3000D */ bgezl $t5, .Ljp7F047BC4 -/* 07C700 7F047B90 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07C704 7F047B94 C62C0038 */ lwc1 $f12, 0x38($s1) -/* 07C708 7F047B98 0FC16BD4 */ jal atan2f -/* 07C70C 7F047B9C C62E0040 */ lwc1 $f14, 0x40($s1) -/* 07C710 7F047BA0 8E390008 */ lw $t9, 8($s1) -/* 07C714 7F047BA4 3C01DFFF */ lui $at, (0xDFFFFFFF >> 16) # lui $at, 0xdfff -/* 07C718 7F047BA8 3421FFFF */ ori $at, (0xDFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 07C71C 7F047BAC 0321C024 */ and $t8, $t9, $at -/* 07C720 7F047BB0 E62000A0 */ swc1 $f0, 0xa0($s1) -/* 07C724 7F047BB4 AE380008 */ sw $t8, 8($s1) -/* 07C728 7F047BB8 0FC113C3 */ jal sub_GAME_7F044B38 -/* 07C72C 7F047BBC 02202025 */ move $a0, $s1 -.Ljp7F047BC0: -/* 07C730 7F047BC0 C6260088 */ lwc1 $f6, 0x88($s1) -.Ljp7F047BC4: -/* 07C734 7F047BC4 4606B03C */ c.lt.s $f22, $f6 -/* 07C738 7F047BC8 00000000 */ nop -/* 07C73C 7F047BCC 450201AC */ bc1fl .Ljp7F048280 -/* 07C740 7F047BD0 8E2A0008 */ lw $t2, 8($s1) -/* 07C744 7F047BD4 8E680014 */ lw $t0, 0x14($s3) -/* 07C748 7F047BD8 8FA9047C */ lw $t1, 0x47c($sp) -/* 07C74C 7F047BDC 4600B386 */ mov.s $f14, $f22 -/* 07C750 7F047BE0 AFA8046C */ sw $t0, 0x46c($sp) -/* 07C754 7F047BE4 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C758 7F047BE8 E7AC043C */ swc1 $f12, 0x43c($sp) -/* 07C75C 7F047BEC C62A009C */ lwc1 $f10, 0x9c($s1) -/* 07C760 7F047BF0 11200013 */ beqz $t1, .Ljp7F047C40 -/* 07C764 7F047BF4 E7AA0438 */ swc1 $f10, 0x438($sp) -/* 07C768 7F047BF8 262B0058 */ addiu $t3, $s1, 0x58 -/* 07C76C 7F047BFC AFAB0074 */ sw $t3, 0x74($sp) -/* 07C770 7F047C00 0FC160F3 */ jal sinf -/* 07C774 7F047C04 E7AE0434 */ swc1 $f14, 0x434($sp) -/* 07C778 7F047C08 E7A00440 */ swc1 $f0, 0x440($sp) -/* 07C77C 7F047C0C E7B60444 */ swc1 $f22, 0x444($sp) -/* 07C780 7F047C10 0FC160F0 */ jal cosf -/* 07C784 7F047C14 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C788 7F047C18 E7A00448 */ swc1 $f0, 0x448($sp) -/* 07C78C 7F047C1C 8FA40074 */ lw $a0, 0x74($sp) -/* 07C790 7F047C20 27A50440 */ addiu $a1, $sp, 0x440 -/* 07C794 7F047C24 8FA6047C */ lw $a2, 0x47c($sp) -/* 07C798 7F047C28 0FC0BFCD */ jal chrlvGeometryRelated7F02FC34 -/* 07C79C 7F047C2C 3C074120 */ lui $a3, 0x4120 -/* 07C7A0 7F047C30 10400003 */ beqz $v0, .Ljp7F047C40 -/* 07C7A4 7F047C34 C7AE0434 */ lwc1 $f14, 0x434($sp) -/* 07C7A8 7F047C38 C62800A0 */ lwc1 $f8, 0xa0($s1) -/* 07C7AC 7F047C3C E7A80480 */ swc1 $f8, 0x480($sp) -.Ljp7F047C40: -/* 07C7B0 7F047C40 3C018005 */ lui $at, %hi(D_80052B4C) # $at, 0x8005 -/* 07C7B4 7F047C44 C4242B7C */ lwc1 $f4, %lo(D_80052B4C)($at) -/* 07C7B8 7F047C48 3C018005 */ lui $at, %hi(D_80052B50) # $at, 0x8005 -/* 07C7BC 7F047C4C C4262B80 */ lwc1 $f6, %lo(D_80052B50)($at) -/* 07C7C0 7F047C50 3C0738E4 */ lui $a3, (0x38E4C389 >> 16) # lui $a3, 0x38e4 -/* 07C7C4 7F047C54 34E7C389 */ ori $a3, (0x38E4C389 & 0xFFFF) # ori $a3, $a3, 0xc389 -/* 07C7C8 7F047C58 262400A0 */ addiu $a0, $s1, 0xa0 -/* 07C7CC 7F047C5C 8FA50480 */ lw $a1, 0x480($sp) -/* 07C7D0 7F047C60 2626009C */ addiu $a2, $s1, 0x9c -/* 07C7D4 7F047C64 E7AE0434 */ swc1 $f14, 0x434($sp) -/* 07C7D8 7F047C68 E7A40010 */ swc1 $f4, 0x10($sp) -/* 07C7DC 7F047C6C 0FC10D03 */ jal chrobjCallsApplySpeed -/* 07C7E0 7F047C70 E7A60014 */ swc1 $f6, 0x14($sp) -/* 07C7E4 7F047C74 3C018005 */ lui $at, %hi(D_80052B54) # $at, 0x8005 -/* 07C7E8 7F047C78 C4342B84 */ lwc1 $f20, %lo(D_80052B54)($at) -/* 07C7EC 7F047C7C C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C7F0 7F047C80 C7AE0434 */ lwc1 $f14, 0x434($sp) -/* 07C7F4 7F047C84 3C018005 */ lui $at, %hi(D_80052B58) # $at, 0x8005 -/* 07C7F8 7F047C88 460CA03E */ c.le.s $f20, $f12 -/* 07C7FC 7F047C8C 00000000 */ nop -/* 07C800 7F047C90 45020009 */ bc1fl .Ljp7F047CB8 -/* 07C804 7F047C94 4616603C */ c.lt.s $f12, $f22 -/* 07C808 7F047C98 46146281 */ sub.s $f10, $f12, $f20 -.Ljp7F047C9C: -/* 07C80C 7F047C9C E62A00A0 */ swc1 $f10, 0xa0($s1) -/* 07C810 7F047CA0 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C814 7F047CA4 460CA03E */ c.le.s $f20, $f12 -/* 07C818 7F047CA8 00000000 */ nop -/* 07C81C 7F047CAC 4503FFFB */ bc1tl .Ljp7F047C9C -/* 07C820 7F047CB0 46146281 */ sub.s $f10, $f12, $f20 -/* 07C824 7F047CB4 4616603C */ c.lt.s $f12, $f22 -.Ljp7F047CB8: -/* 07C828 7F047CB8 00000000 */ nop -/* 07C82C 7F047CBC 45020009 */ bc1fl .Ljp7F047CE4 -/* 07C830 7F047CC0 C7A40480 */ lwc1 $f4, 0x480($sp) -/* 07C834 7F047CC4 46146200 */ add.s $f8, $f12, $f20 -.Ljp7F047CC8: -/* 07C838 7F047CC8 E62800A0 */ swc1 $f8, 0xa0($s1) -/* 07C83C 7F047CCC C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C840 7F047CD0 4616603C */ c.lt.s $f12, $f22 -/* 07C844 7F047CD4 00000000 */ nop -/* 07C848 7F047CD8 4503FFFB */ bc1tl .Ljp7F047CC8 -/* 07C84C 7F047CDC 46146200 */ add.s $f8, $f12, $f20 -/* 07C850 7F047CE0 C7A40480 */ lwc1 $f4, 0x480($sp) -.Ljp7F047CE4: -/* 07C854 7F047CE4 460C2032 */ c.eq.s $f4, $f12 -/* 07C858 7F047CE8 00000000 */ nop -/* 07C85C 7F047CEC 4502000F */ bc1fl .Ljp7F047D2C -/* 07C860 7F047CF0 8E8E0008 */ lw $t6, 8($s4) -/* 07C864 7F047CF4 C620009C */ lwc1 $f0, 0x9c($s1) -/* 07C868 7F047CF8 C4262B88 */ lwc1 $f6, %lo(D_80052B58)($at) -/* 07C86C 7F047CFC 3C018005 */ lui $at, %hi(D_80052B5C) # $at, 0x8005 -/* 07C870 7F047D00 4606003E */ c.le.s $f0, $f6 -/* 07C874 7F047D04 00000000 */ nop -/* 07C878 7F047D08 45020008 */ bc1fl .Ljp7F047D2C -/* 07C87C 7F047D0C 8E8E0008 */ lw $t6, 8($s4) -/* 07C880 7F047D10 C42A2B8C */ lwc1 $f10, %lo(D_80052B5C)($at) -/* 07C884 7F047D14 4600503E */ c.le.s $f10, $f0 -/* 07C888 7F047D18 00000000 */ nop -/* 07C88C 7F047D1C 45020003 */ bc1fl .Ljp7F047D2C -/* 07C890 7F047D20 8E8E0008 */ lw $t6, 8($s4) -/* 07C894 7F047D24 E636009C */ swc1 $f22, 0x9c($s1) -/* 07C898 7F047D28 8E8E0008 */ lw $t6, 8($s4) -.Ljp7F047D2C: -/* 07C89C 7F047D2C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07C8A0 7F047D30 C42283B4 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07C8A4 7F047D34 8DCC0008 */ lw $t4, 8($t6) -/* 07C8A8 7F047D38 C7A4043C */ lwc1 $f4, 0x43c($sp) -/* 07C8AC 7F047D3C 4602B03C */ c.lt.s $f22, $f2 -/* 07C8B0 7F047D40 8D8A000C */ lw $t2, 0xc($t4) -/* 07C8B4 7F047D44 45000004 */ bc1f .Ljp7F047D58 -/* 07C8B8 7F047D48 8D500004 */ lw $s0, 4($t2) -/* 07C8BC 7F047D4C C62800A0 */ lwc1 $f8, 0xa0($s1) -/* 07C8C0 7F047D50 46044181 */ sub.s $f6, $f8, $f4 -/* 07C8C4 7F047D54 46023383 */ div.s $f14, $f6, $f2 -.Ljp7F047D58: -/* 07C8C8 7F047D58 4616703C */ c.lt.s $f14, $f22 -/* 07C8CC 7F047D5C 00000000 */ nop -/* 07C8D0 7F047D60 45000002 */ bc1f .Ljp7F047D6C -/* 07C8D4 7F047D64 00000000 */ nop -/* 07C8D8 7F047D68 46147380 */ add.s $f14, $f14, $f20 -.Ljp7F047D6C: -/* 07C8DC 7F047D6C 0FC160F3 */ jal sinf -/* 07C8E0 7F047D70 46007306 */ mov.s $f12, $f14 -/* 07C8E4 7F047D74 C60A0008 */ lwc1 $f10, 8($s0) -/* 07C8E8 7F047D78 C6880014 */ lwc1 $f8, 0x14($s4) -/* 07C8EC 7F047D7C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07C8F0 7F047D80 46085102 */ mul.s $f4, $f10, $f8 -/* 07C8F4 7F047D84 C42A83B4 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07C8F8 7F047D88 46040182 */ mul.s $f6, $f0, $f4 -/* 07C8FC 7F047D8C 00000000 */ nop -/* 07C900 7F047D90 460A3202 */ mul.s $f8, $f6, $f10 -/* 07C904 7F047D94 E7A80464 */ swc1 $f8, 0x464($sp) -/* 07C908 7F047D98 0FC160F3 */ jal sinf -/* 07C90C 7F047D9C C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C910 7F047DA0 E7A00440 */ swc1 $f0, 0x440($sp) -/* 07C914 7F047DA4 E7B60444 */ swc1 $f22, 0x444($sp) -/* 07C918 7F047DA8 0FC160F0 */ jal cosf -/* 07C91C 7F047DAC C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07C920 7F047DB0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07C924 7F047DB4 44817000 */ mtc1 $at, $f14 -/* 07C928 7F047DB8 E7A00448 */ swc1 $f0, 0x448($sp) -/* 07C92C 7F047DBC 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07C930 7F047DC0 C42283B4 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07C934 7F047DC4 C6240088 */ lwc1 $f4, 0x88($s1) -/* 07C938 7F047DC8 C7AA0440 */ lwc1 $f10, 0x440($sp) -/* 07C93C 7F047DCC C7AC0464 */ lwc1 $f12, 0x464($sp) -/* 07C940 7F047DD0 46022182 */ mul.s $f6, $f4, $f2 -/* 07C944 7F047DD4 C6240058 */ lwc1 $f4, 0x58($s1) -/* 07C948 7F047DD8 27B0046C */ addiu $s0, $sp, 0x46c -/* 07C94C 7F047DDC 240F001F */ li $t7, 31 -/* 07C950 7F047DE0 02002025 */ move $a0, $s0 -/* 07C954 7F047DE4 460A3202 */ mul.s $f8, $f6, $f10 -/* 07C958 7F047DE8 46082180 */ add.s $f6, $f4, $f8 -/* 07C95C 7F047DEC C7A40448 */ lwc1 $f4, 0x448($sp) -/* 07C960 7F047DF0 460C2202 */ mul.s $f8, $f4, $f12 -/* 07C964 7F047DF4 46083181 */ sub.s $f6, $f6, $f8 -/* 07C968 7F047DF8 E7A6069C */ swc1 $f6, 0x69c($sp) -/* 07C96C 7F047DFC C628005C */ lwc1 $f8, 0x5c($s1) -/* 07C970 7F047E00 44073000 */ mfc1 $a3, $f6 -/* 07C974 7F047E04 E7A806A0 */ swc1 $f8, 0x6a0($sp) -/* 07C978 7F047E08 C6280088 */ lwc1 $f8, 0x88($s1) -/* 07C97C 7F047E0C 46024202 */ mul.s $f8, $f8, $f2 -/* 07C980 7F047E10 00000000 */ nop -/* 07C984 7F047E14 46044202 */ mul.s $f8, $f8, $f4 -/* 07C988 7F047E18 C6240060 */ lwc1 $f4, 0x60($s1) -/* 07C98C 7F047E1C 46082100 */ add.s $f4, $f4, $f8 -/* 07C990 7F047E20 460C5202 */ mul.s $f8, $f10, $f12 -/* 07C994 7F047E24 46044280 */ add.s $f10, $f8, $f4 -/* 07C998 7F047E28 E7AA06A4 */ swc1 $f10, 0x6a4($sp) -/* 07C99C 7F047E2C 8E660010 */ lw $a2, 0x10($s3) -/* 07C9A0 7F047E30 8E650008 */ lw $a1, 8($s3) -/* 07C9A4 7F047E34 E7B60020 */ swc1 $f22, 0x20($sp) -/* 07C9A8 7F047E38 E7B60018 */ swc1 $f22, 0x18($sp) -/* 07C9AC 7F047E3C AFAF0014 */ sw $t7, 0x14($sp) -/* 07C9B0 7F047E40 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07C9B4 7F047E44 E7AE0024 */ swc1 $f14, 0x24($sp) -/* 07C9B8 7F047E48 0FC2C675 */ jal stanTestLineUnobstructed -/* 07C9BC 7F047E4C E7AE001C */ swc1 $f14, 0x1c($sp) -/* 07C9C0 7F047E50 104000FA */ beqz $v0, .Ljp7F04823C -/* 07C9C4 7F047E54 02002025 */ move $a0, $s0 -/* 07C9C8 7F047E58 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07C9CC 7F047E5C 44814000 */ mtc1 $at, $f8 -/* 07C9D0 7F047E60 240D001F */ li $t5, 31 -/* 07C9D4 7F047E64 AFAD0010 */ sw $t5, 0x10($sp) -/* 07C9D8 7F047E68 8FA5069C */ lw $a1, 0x69c($sp) -/* 07C9DC 7F047E6C 8FA606A4 */ lw $a2, 0x6a4($sp) -/* 07C9E0 7F047E70 3C074120 */ lui $a3, 0x4120 -/* 07C9E4 7F047E74 E7B60014 */ swc1 $f22, 0x14($sp) -/* 07C9E8 7F047E78 0FC2C91A */ jal stanTestVolume -/* 07C9EC 7F047E7C E7A80018 */ swc1 $f8, 0x18($sp) -/* 07C9F0 7F047E80 044300EF */ bgezl $v0, .Ljp7F048240 -/* 07C9F4 7F047E84 C6260098 */ lwc1 $f6, 0x98($s1) -/* 07C9F8 7F047E88 8E790014 */ lw $t9, 0x14($s3) -/* 07C9FC 7F047E8C 8FB8046C */ lw $t8, 0x46c($sp) -/* 07CA00 7F047E90 02202025 */ move $a0, $s1 -/* 07CA04 7F047E94 AFB90450 */ sw $t9, 0x450($sp) -/* 07CA08 7F047E98 C6640008 */ lwc1 $f4, 8($s3) -/* 07CA0C 7F047E9C E7A40454 */ swc1 $f4, 0x454($sp) -/* 07CA10 7F047EA0 C666000C */ lwc1 $f6, 0xc($s3) -/* 07CA14 7F047EA4 E7A60458 */ swc1 $f6, 0x458($sp) -/* 07CA18 7F047EA8 C66A0010 */ lwc1 $f10, 0x10($s3) -/* 07CA1C 7F047EAC E7AA045C */ swc1 $f10, 0x45c($sp) -/* 07CA20 7F047EB0 AE780014 */ sw $t8, 0x14($s3) -/* 07CA24 7F047EB4 C7A2069C */ lwc1 $f2, 0x69c($sp) -/* 07CA28 7F047EB8 E6620008 */ swc1 $f2, 8($s3) -/* 07CA2C 7F047EBC E6220058 */ swc1 $f2, 0x58($s1) -/* 07CA30 7F047EC0 C7A206A4 */ lwc1 $f2, 0x6a4($sp) -/* 07CA34 7F047EC4 E6620010 */ swc1 $f2, 0x10($s3) -/* 07CA38 7F047EC8 0FC101E1 */ jal chrobjCollisionRelated -/* 07CA3C 7F047ECC E6220060 */ swc1 $f2, 0x60($s1) -/* 07CA40 7F047ED0 0FC15C68 */ jal setupUpdateObjectRoomPosition -/* 07CA44 7F047ED4 02202025 */ move $a0, $s1 -/* 07CA48 7F047ED8 0FC1131F */ jal sub_GAME_7F0448A8 -/* 07CA4C 7F047EDC 02602025 */ move $a0, $s3 -/* 07CA50 7F047EE0 10400092 */ beqz $v0, .Ljp7F04812C -/* 07CA54 7F047EE4 00409025 */ move $s2, $v0 -/* 07CA58 7F047EE8 8E880008 */ lw $t0, 8($s4) -/* 07CA5C 7F047EEC C6280018 */ lwc1 $f8, 0x18($s1) -/* 07CA60 7F047EF0 02002025 */ move $a0, $s0 -/* 07CA64 7F047EF4 8D090008 */ lw $t1, 8($t0) -/* 07CA68 7F047EF8 8D2B0028 */ lw $t3, 0x28($t1) -/* 07CA6C 7F047EFC 8D620004 */ lw $v0, 4($t3) -/* 07CA70 7F047F00 C4440004 */ lwc1 $f4, 4($v0) -/* 07CA74 7F047F04 46044182 */ mul.s $f6, $f8, $f4 -/* 07CA78 7F047F08 E7A60428 */ swc1 $f6, 0x428($sp) -/* 07CA7C 7F047F0C C62A0020 */ lwc1 $f10, 0x20($s1) -/* 07CA80 7F047F10 C4480004 */ lwc1 $f8, 4($v0) -/* 07CA84 7F047F14 46085102 */ mul.s $f4, $f10, $f8 -/* 07CA88 7F047F18 E7A40430 */ swc1 $f4, 0x430($sp) -/* 07CA8C 7F047F1C C6260018 */ lwc1 $f6, 0x18($s1) -/* 07CA90 7F047F20 C44A0008 */ lwc1 $f10, 8($v0) -/* 07CA94 7F047F24 460A3202 */ mul.s $f8, $f6, $f10 -/* 07CA98 7F047F28 E7A8041C */ swc1 $f8, 0x41c($sp) -/* 07CA9C 7F047F2C C6240020 */ lwc1 $f4, 0x20($s1) -/* 07CAA0 7F047F30 C4460008 */ lwc1 $f6, 8($v0) -/* 07CAA4 7F047F34 46062282 */ mul.s $f10, $f4, $f6 -/* 07CAA8 7F047F38 E7AA0424 */ swc1 $f10, 0x424($sp) -/* 07CAAC 7F047F3C C6280038 */ lwc1 $f8, 0x38($s1) -/* 07CAB0 7F047F40 C4440014 */ lwc1 $f4, 0x14($v0) -/* 07CAB4 7F047F44 46044182 */ mul.s $f6, $f8, $f4 -/* 07CAB8 7F047F48 E7A60410 */ swc1 $f6, 0x410($sp) -/* 07CABC 7F047F4C C62A0040 */ lwc1 $f10, 0x40($s1) -/* 07CAC0 7F047F50 C4480014 */ lwc1 $f8, 0x14($v0) -/* 07CAC4 7F047F54 46085102 */ mul.s $f4, $f10, $f8 -/* 07CAC8 7F047F58 E7A40418 */ swc1 $f4, 0x418($sp) -/* 07CACC 7F047F5C C6260038 */ lwc1 $f6, 0x38($s1) -/* 07CAD0 7F047F60 C44A0018 */ lwc1 $f10, 0x18($v0) -/* 07CAD4 7F047F64 460A3202 */ mul.s $f8, $f6, $f10 -/* 07CAD8 7F047F68 E7A80404 */ swc1 $f8, 0x404($sp) -/* 07CADC 7F047F6C C6240040 */ lwc1 $f4, 0x40($s1) -/* 07CAE0 7F047F70 C4460018 */ lwc1 $f6, 0x18($v0) -/* 07CAE4 7F047F74 C7A80410 */ lwc1 $f8, 0x410($sp) -/* 07CAE8 7F047F78 46062282 */ mul.s $f10, $f4, $f6 -/* 07CAEC 7F047F7C C7A40428 */ lwc1 $f4, 0x428($sp) -/* 07CAF0 7F047F80 E7AA040C */ swc1 $f10, 0x40c($sp) -/* 07CAF4 7F047F84 8E6E0014 */ lw $t6, 0x14($s3) -/* 07CAF8 7F047F88 AFAE046C */ sw $t6, 0x46c($sp) -/* 07CAFC 7F047F8C C6600008 */ lwc1 $f0, 8($s3) -/* 07CB00 7F047F90 C6620010 */ lwc1 $f2, 0x10($s3) -/* 07CB04 7F047F94 46040180 */ add.s $f6, $f0, $f4 -/* 07CB08 7F047F98 C7A40418 */ lwc1 $f4, 0x418($sp) -/* 07CB0C 7F047F9C 44050000 */ mfc1 $a1, $f0 -/* 07CB10 7F047FA0 44061000 */ mfc1 $a2, $f2 -/* 07CB14 7F047FA4 46064280 */ add.s $f10, $f8, $f6 -/* 07CB18 7F047FA8 C7A80430 */ lwc1 $f8, 0x430($sp) -/* 07CB1C 7F047FAC 46081180 */ add.s $f6, $f2, $f8 -/* 07CB20 7F047FB0 44075000 */ mfc1 $a3, $f10 -/* 07CB24 7F047FB4 46062280 */ add.s $f10, $f4, $f6 -/* 07CB28 7F047FB8 0FC2C5E5 */ jal walkTilesBetweenPoints_NoCallback -/* 07CB2C 7F047FBC E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07CB30 7F047FC0 10400059 */ beqz $v0, .Ljp7F048128 -/* 07CB34 7F047FC4 C7A40428 */ lwc1 $f4, 0x428($sp) -/* 07CB38 7F047FC8 C6600008 */ lwc1 $f0, 8($s3) -/* 07CB3C 7F047FCC C7A80410 */ lwc1 $f8, 0x410($sp) -/* 07CB40 7F047FD0 C6620010 */ lwc1 $f2, 0x10($s3) -/* 07CB44 7F047FD4 46040180 */ add.s $f6, $f0, $f4 -/* 07CB48 7F047FD8 C7A40418 */ lwc1 $f4, 0x418($sp) -/* 07CB4C 7F047FDC 02002025 */ move $a0, $s0 -/* 07CB50 7F047FE0 46064280 */ add.s $f10, $f8, $f6 -/* 07CB54 7F047FE4 C7A60430 */ lwc1 $f6, 0x430($sp) -/* 07CB58 7F047FE8 44055000 */ mfc1 $a1, $f10 -/* 07CB5C 7F047FEC 46061280 */ add.s $f10, $f2, $f6 -/* 07CB60 7F047FF0 460A2180 */ add.s $f6, $f4, $f10 -/* 07CB64 7F047FF4 C7AA041C */ lwc1 $f10, 0x41c($sp) -/* 07CB68 7F047FF8 44063000 */ mfc1 $a2, $f6 -/* 07CB6C 7F047FFC 460A0180 */ add.s $f6, $f0, $f10 -/* 07CB70 7F048000 46064280 */ add.s $f10, $f8, $f6 -/* 07CB74 7F048004 C7A80424 */ lwc1 $f8, 0x424($sp) -/* 07CB78 7F048008 46081180 */ add.s $f6, $f2, $f8 -/* 07CB7C 7F04800C 44075000 */ mfc1 $a3, $f10 -/* 07CB80 7F048010 46062280 */ add.s $f10, $f4, $f6 -/* 07CB84 7F048014 0FC2C5E5 */ jal walkTilesBetweenPoints_NoCallback -/* 07CB88 7F048018 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07CB8C 7F04801C 10400042 */ beqz $v0, .Ljp7F048128 -/* 07CB90 7F048020 C7A4041C */ lwc1 $f4, 0x41c($sp) -/* 07CB94 7F048024 C6680008 */ lwc1 $f8, 8($s3) -/* 07CB98 7F048028 C7A60410 */ lwc1 $f6, 0x410($sp) -/* 07CB9C 7F04802C 02002025 */ move $a0, $s0 -/* 07CBA0 7F048030 46044000 */ add.s $f0, $f8, $f4 -/* 07CBA4 7F048034 C7A40424 */ lwc1 $f4, 0x424($sp) -/* 07CBA8 7F048038 C6680010 */ lwc1 $f8, 0x10($s3) -/* 07CBAC 7F04803C 46003280 */ add.s $f10, $f6, $f0 -/* 07CBB0 7F048040 C7A60418 */ lwc1 $f6, 0x418($sp) -/* 07CBB4 7F048044 46044080 */ add.s $f2, $f8, $f4 -/* 07CBB8 7F048048 44055000 */ mfc1 $a1, $f10 -/* 07CBBC 7F04804C C7A80404 */ lwc1 $f8, 0x404($sp) -/* 07CBC0 7F048050 46023280 */ add.s $f10, $f6, $f2 -/* 07CBC4 7F048054 C7A6040C */ lwc1 $f6, 0x40c($sp) -/* 07CBC8 7F048058 46004100 */ add.s $f4, $f8, $f0 -/* 07CBCC 7F04805C 44065000 */ mfc1 $a2, $f10 -/* 07CBD0 7F048060 46023280 */ add.s $f10, $f6, $f2 -/* 07CBD4 7F048064 44072000 */ mfc1 $a3, $f4 -/* 07CBD8 7F048068 0FC2C5E5 */ jal walkTilesBetweenPoints_NoCallback -/* 07CBDC 7F04806C E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07CBE0 7F048070 1040002D */ beqz $v0, .Ljp7F048128 -/* 07CBE4 7F048074 C7A4041C */ lwc1 $f4, 0x41c($sp) -/* 07CBE8 7F048078 C6600008 */ lwc1 $f0, 8($s3) -/* 07CBEC 7F04807C C7A80404 */ lwc1 $f8, 0x404($sp) -/* 07CBF0 7F048080 C6620010 */ lwc1 $f2, 0x10($s3) -/* 07CBF4 7F048084 46040180 */ add.s $f6, $f0, $f4 -/* 07CBF8 7F048088 C7A4040C */ lwc1 $f4, 0x40c($sp) -/* 07CBFC 7F04808C 02002025 */ move $a0, $s0 -/* 07CC00 7F048090 46064280 */ add.s $f10, $f8, $f6 -/* 07CC04 7F048094 C7A60424 */ lwc1 $f6, 0x424($sp) -/* 07CC08 7F048098 44055000 */ mfc1 $a1, $f10 -/* 07CC0C 7F04809C 46061280 */ add.s $f10, $f2, $f6 -/* 07CC10 7F0480A0 460A2180 */ add.s $f6, $f4, $f10 -/* 07CC14 7F0480A4 C7AA0428 */ lwc1 $f10, 0x428($sp) -/* 07CC18 7F0480A8 44063000 */ mfc1 $a2, $f6 -/* 07CC1C 7F0480AC 460A0180 */ add.s $f6, $f0, $f10 -/* 07CC20 7F0480B0 46064280 */ add.s $f10, $f8, $f6 -/* 07CC24 7F0480B4 C7A80430 */ lwc1 $f8, 0x430($sp) -/* 07CC28 7F0480B8 46081180 */ add.s $f6, $f2, $f8 -/* 07CC2C 7F0480BC 44075000 */ mfc1 $a3, $f10 -/* 07CC30 7F0480C0 46062280 */ add.s $f10, $f4, $f6 -/* 07CC34 7F0480C4 0FC2C5E5 */ jal walkTilesBetweenPoints_NoCallback -/* 07CC38 7F0480C8 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07CC3C 7F0480CC 10400016 */ beqz $v0, .Ljp7F048128 -/* 07CC40 7F0480D0 C7A40428 */ lwc1 $f4, 0x428($sp) -/* 07CC44 7F0480D4 C6680008 */ lwc1 $f8, 8($s3) -/* 07CC48 7F0480D8 C7A60404 */ lwc1 $f6, 0x404($sp) -/* 07CC4C 7F0480DC 02002025 */ move $a0, $s0 -/* 07CC50 7F0480E0 46044000 */ add.s $f0, $f8, $f4 -/* 07CC54 7F0480E4 C7A40430 */ lwc1 $f4, 0x430($sp) -/* 07CC58 7F0480E8 C6680010 */ lwc1 $f8, 0x10($s3) -/* 07CC5C 7F0480EC 46003280 */ add.s $f10, $f6, $f0 -/* 07CC60 7F0480F0 C7A6040C */ lwc1 $f6, 0x40c($sp) -/* 07CC64 7F0480F4 46044080 */ add.s $f2, $f8, $f4 -/* 07CC68 7F0480F8 44055000 */ mfc1 $a1, $f10 -/* 07CC6C 7F0480FC C7A80410 */ lwc1 $f8, 0x410($sp) -/* 07CC70 7F048100 46023280 */ add.s $f10, $f6, $f2 -/* 07CC74 7F048104 C7A60418 */ lwc1 $f6, 0x418($sp) -/* 07CC78 7F048108 46004100 */ add.s $f4, $f8, $f0 -/* 07CC7C 7F04810C 44065000 */ mfc1 $a2, $f10 -/* 07CC80 7F048110 46023280 */ add.s $f10, $f6, $f2 -/* 07CC84 7F048114 44072000 */ mfc1 $a3, $f4 -/* 07CC88 7F048118 0FC2C5E5 */ jal walkTilesBetweenPoints_NoCallback -/* 07CC8C 7F04811C E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07CC90 7F048120 14400002 */ bnez $v0, .Ljp7F04812C -/* 07CC94 7F048124 00000000 */ nop -.Ljp7F048128: -/* 07CC98 7F048128 00009025 */ move $s2, $zero -.Ljp7F04812C: -/* 07CC9C 7F04812C 12400023 */ beqz $s2, .Ljp7F0481BC -/* 07CCA0 7F048130 02202025 */ move $a0, $s1 -/* 07CCA4 7F048134 262C0058 */ addiu $t4, $s1, 0x58 -/* 07CCA8 7F048138 AFAC0074 */ sw $t4, 0x74($sp) -/* 07CCAC 7F04813C 0FC113C3 */ jal sub_GAME_7F044B38 -/* 07CCB0 7F048140 2630007C */ addiu $s0, $s1, 0x7c -/* 07CCB4 7F048144 02602025 */ move $a0, $s3 -/* 07CCB8 7F048148 0FC1016D */ jal sub_GAME_7F0402B4 -/* 07CCBC 7F04814C 02002825 */ move $a1, $s0 -/* 07CCC0 7F048150 0FC14832 */ jal detonate_proxmine_In_range -/* 07CCC4 7F048154 8FA40074 */ lw $a0, 0x74($sp) -/* 07CCC8 7F048158 8FAA047C */ lw $t2, 0x47c($sp) -/* 07CCCC 7F04815C 27A40454 */ addiu $a0, $sp, 0x454 -/* 07CCD0 7F048160 27A5069C */ addiu $a1, $sp, 0x69c -/* 07CCD4 7F048164 11400054 */ beqz $t2, .Ljp7F0482B8 -/* 07CCD8 7F048168 01403025 */ move $a2, $t2 -/* 07CCDC 7F04816C 0FC0C014 */ jal chrlvIsArrivingLaterallyAtPos -/* 07CCE0 7F048170 3C0742C8 */ lui $a3, 0x42c8 -/* 07CCE4 7F048174 10400050 */ beqz $v0, .Ljp7F0482B8 -/* 07CCE8 7F048178 00000000 */ nop -/* 07CCEC 7F04817C 8E2F00A8 */ lw $t7, 0xa8($s1) -/* 07CCF0 7F048180 8E3900A4 */ lw $t9, 0xa4($s1) -/* 07CCF4 7F048184 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 07CCF8 7F048188 25ED0001 */ addiu $t5, $t7, 1 -/* 07CCFC 7F04818C AE2D00A8 */ sw $t5, 0xa8($s1) -/* 07CD00 7F048190 8F380000 */ lw $t8, ($t9) -/* 07CD04 7F048194 000D4880 */ sll $t1, $t5, 2 -/* 07CD08 7F048198 03095821 */ addu $t3, $t8, $t1 -/* 07CD0C 7F04819C 8D6E0000 */ lw $t6, ($t3) -/* 07CD10 7F0481A0 05C10045 */ bgez $t6, .Ljp7F0482B8 -/* 07CD14 7F0481A4 00000000 */ nop -/* 07CD18 7F0481A8 44814000 */ mtc1 $at, $f8 -/* 07CD1C 7F0481AC AE2000A4 */ sw $zero, 0xa4($s1) -/* 07CD20 7F0481B0 E6360094 */ swc1 $f22, 0x94($s1) -/* 07CD24 7F0481B4 10000040 */ b .Ljp7F0482B8 -/* 07CD28 7F0481B8 E6280098 */ swc1 $f8, 0x98($s1) -.Ljp7F0481BC: -/* 07CD2C 7F0481BC C6240098 */ lwc1 $f4, 0x98($s1) -/* 07CD30 7F0481C0 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 07CD34 7F0481C4 4616203C */ c.lt.s $f4, $f22 -/* 07CD38 7F0481C8 00000000 */ nop -/* 07CD3C 7F0481CC 45020006 */ bc1fl .Ljp7F0481E8 -/* 07CD40 7F0481D0 E6360088 */ swc1 $f22, 0x88($s1) -/* 07CD44 7F0481D4 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07CD48 7F0481D8 44815000 */ mtc1 $at, $f10 -/* 07CD4C 7F0481DC E6260094 */ swc1 $f6, 0x94($s1) -/* 07CD50 7F0481E0 E62A0098 */ swc1 $f10, 0x98($s1) -/* 07CD54 7F0481E4 E6360088 */ swc1 $f22, 0x88($s1) -.Ljp7F0481E8: -/* 07CD58 7F0481E8 C7A8043C */ lwc1 $f8, 0x43c($sp) -/* 07CD5C 7F0481EC 02202025 */ move $a0, $s1 -/* 07CD60 7F0481F0 E62800A0 */ swc1 $f8, 0xa0($s1) -/* 07CD64 7F0481F4 C7A40438 */ lwc1 $f4, 0x438($sp) -/* 07CD68 7F0481F8 E624009C */ swc1 $f4, 0x9c($s1) -/* 07CD6C 7F0481FC 8FAC0450 */ lw $t4, 0x450($sp) -/* 07CD70 7F048200 AE6C0014 */ sw $t4, 0x14($s3) -/* 07CD74 7F048204 C7A20454 */ lwc1 $f2, 0x454($sp) -/* 07CD78 7F048208 E6620008 */ swc1 $f2, 8($s3) -/* 07CD7C 7F04820C E6220058 */ swc1 $f2, 0x58($s1) -/* 07CD80 7F048210 C7A20458 */ lwc1 $f2, 0x458($sp) -/* 07CD84 7F048214 E662000C */ swc1 $f2, 0xc($s3) -/* 07CD88 7F048218 E622005C */ swc1 $f2, 0x5c($s1) -/* 07CD8C 7F04821C C7A2045C */ lwc1 $f2, 0x45c($sp) -/* 07CD90 7F048220 E6620010 */ swc1 $f2, 0x10($s3) -/* 07CD94 7F048224 0FC101E1 */ jal chrobjCollisionRelated -/* 07CD98 7F048228 E6220060 */ swc1 $f2, 0x60($s1) -/* 07CD9C 7F04822C 0FC15C68 */ jal setupUpdateObjectRoomPosition -/* 07CDA0 7F048230 02202025 */ move $a0, $s1 -/* 07CDA4 7F048234 10000020 */ b .Ljp7F0482B8 -/* 07CDA8 7F048238 00000000 */ nop -.Ljp7F04823C: -/* 07CDAC 7F04823C C6260098 */ lwc1 $f6, 0x98($s1) -.Ljp7F048240: -/* 07CDB0 7F048240 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 07CDB4 7F048244 4616303C */ c.lt.s $f6, $f22 -/* 07CDB8 7F048248 00000000 */ nop -/* 07CDBC 7F04824C 45020006 */ bc1fl .Ljp7F048268 -/* 07CDC0 7F048250 E6360088 */ swc1 $f22, 0x88($s1) -/* 07CDC4 7F048254 C62A0088 */ lwc1 $f10, 0x88($s1) -/* 07CDC8 7F048258 44814000 */ mtc1 $at, $f8 -/* 07CDCC 7F04825C E62A0094 */ swc1 $f10, 0x94($s1) -/* 07CDD0 7F048260 E6280098 */ swc1 $f8, 0x98($s1) -/* 07CDD4 7F048264 E6360088 */ swc1 $f22, 0x88($s1) -.Ljp7F048268: -/* 07CDD8 7F048268 C7A4043C */ lwc1 $f4, 0x43c($sp) -/* 07CDDC 7F04826C E62400A0 */ swc1 $f4, 0xa0($s1) -/* 07CDE0 7F048270 C7A60438 */ lwc1 $f6, 0x438($sp) -/* 07CDE4 7F048274 10000010 */ b .Ljp7F0482B8 -/* 07CDE8 7F048278 E626009C */ swc1 $f6, 0x9c($s1) -/* 07CDEC 7F04827C 8E2A0008 */ lw $t2, 8($s1) -.Ljp7F048280: -/* 07CDF0 7F048280 000A7880 */ sll $t7, $t2, 2 -/* 07CDF4 7F048284 05E1000C */ bgez $t7, .Ljp7F0482B8 -/* 07CDF8 7F048288 00000000 */ nop -/* 07CDFC 7F04828C C62C0038 */ lwc1 $f12, 0x38($s1) -/* 07CE00 7F048290 0FC16BD4 */ jal atan2f -/* 07CE04 7F048294 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 07CE08 7F048298 8E2D0008 */ lw $t5, 8($s1) -/* 07CE0C 7F04829C 3C01DFFF */ lui $at, (0xDFFFFFFF >> 16) # lui $at, 0xdfff -/* 07CE10 7F0482A0 3421FFFF */ ori $at, (0xDFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 07CE14 7F0482A4 01A1C824 */ and $t9, $t5, $at -/* 07CE18 7F0482A8 E62000A0 */ swc1 $f0, 0xa0($s1) -/* 07CE1C 7F0482AC AE390008 */ sw $t9, 8($s1) -/* 07CE20 7F0482B0 0FC113C3 */ jal sub_GAME_7F044B38 -/* 07CE24 7F0482B4 02202025 */ move $a0, $s1 -.Ljp7F0482B8: -/* 07CE28 7F0482B8 100000DE */ b .Ljp7F048634 -/* 07CE2C 7F0482BC 92220003 */ lbu $v0, 3($s1) -.Ljp7F0482C0: -/* 07CE30 7F0482C0 24010028 */ li $at, 40 -/* 07CE34 7F0482C4 144100DA */ bne $v0, $at, .Ljp7F048630 -/* 07CE38 7F0482C8 02202025 */ move $a0, $s1 -/* 07CE3C 7F0482CC 0FC0D5E1 */ jal ai -/* 07CE40 7F0482D0 24050001 */ li $a1, 1 -/* 07CE44 7F0482D4 8E300014 */ lw $s0, 0x14($s1) -/* 07CE48 7F0482D8 26250058 */ addiu $a1, $s1, 0x58 -/* 07CE4C 7F0482DC 8E080020 */ lw $t0, 0x20($s0) -/* 07CE50 7F0482E0 02002025 */ move $a0, $s0 -/* 07CE54 7F0482E4 51000065 */ beql $t0, $zero, .Ljp7F04847C -/* 07CE58 7F0482E8 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07CE5C 7F0482EC 0FC1B47F */ jal setsuboffset -/* 07CE60 7F0482F0 AFA50074 */ sw $a1, 0x74($sp) -/* 07CE64 7F0482F4 8E300014 */ lw $s0, 0x14($s1) -/* 07CE68 7F0482F8 3C098003 */ lui $t1, %hi(animation_table_ptrs2+4) # $t1, 0x8003 -/* 07CE6C 7F0482FC 8D29A090 */ lw $t1, %lo(animation_table_ptrs2+4)($t1) -/* 07CE70 7F048300 8E180020 */ lw $t8, 0x20($s0) -/* 07CE74 7F048304 3C054127 */ lui $a1, (0x4127020C >> 16) # lui $a1, 0x4127 -/* 07CE78 7F048308 02002025 */ move $a0, $s0 -/* 07CE7C 7F04830C 17090009 */ bne $t8, $t1, .Ljp7F048334 -/* 07CE80 7F048310 00000000 */ nop -/* 07CE84 7F048314 0FC1B51D */ jal sub_GAME_7F06CE84 -/* 07CE88 7F048318 34A5020C */ ori $a1, (0x4127020C & 0xFFFF) # ori $a1, $a1, 0x20c -/* 07CE8C 7F04831C 3C054049 */ lui $a1, (0x40490FDB >> 16) # lui $a1, 0x4049 -/* 07CE90 7F048320 34A50FDB */ ori $a1, (0x40490FDB & 0xFFFF) # ori $a1, $a1, 0xfdb -/* 07CE94 7F048324 0FC1B4CB */ jal setsubroty -/* 07CE98 7F048328 8E240014 */ lw $a0, 0x14($s1) -/* 07CE9C 7F04832C 10000024 */ b .Ljp7F0483C0 -/* 07CEA0 7F048330 00000000 */ nop -.Ljp7F048334: -/* 07CEA4 7F048334 0C001A57 */ jal bossGetStageNum -/* 07CEA8 7F048338 00000000 */ nop -/* 07CEAC 7F04833C 24010016 */ li $at, 22 -/* 07CEB0 7F048340 1441000A */ bne $v0, $at, .Ljp7F04836C -/* 07CEB4 7F048344 3C053F85 */ lui $a1, (0x3F859B3D >> 16) # lui $a1, 0x3f85 -/* 07CEB8 7F048348 8E240014 */ lw $a0, 0x14($s1) -/* 07CEBC 7F04834C 0FC1B51D */ jal sub_GAME_7F06CE84 -/* 07CEC0 7F048350 34A59B3D */ ori $a1, (0x3F859B3D & 0xFFFF) # ori $a1, $a1, 0x9b3d -/* 07CEC4 7F048354 3C054016 */ lui $a1, (0x4016CBE4 >> 16) # lui $a1, 0x4016 -/* 07CEC8 7F048358 34A5CBE4 */ ori $a1, (0x4016CBE4 & 0xFFFF) # ori $a1, $a1, 0xcbe4 -/* 07CECC 7F04835C 0FC1B4CB */ jal setsubroty -/* 07CED0 7F048360 8E240014 */ lw $a0, 0x14($s1) -/* 07CED4 7F048364 10000016 */ b .Ljp7F0483C0 -/* 07CED8 7F048368 00000000 */ nop -.Ljp7F04836C: -/* 07CEDC 7F04836C 0C001A57 */ jal bossGetStageNum -/* 07CEE0 7F048370 00000000 */ nop -/* 07CEE4 7F048374 2401001A */ li $at, 26 -/* 07CEE8 7F048378 1441000B */ bne $v0, $at, .Ljp7F0483A8 -/* 07CEEC 7F04837C 3C053F85 */ lui $a1, 0x3f85 -/* 07CEF0 7F048380 3C053F85 */ lui $a1, (0x3F859B3D >> 16) # lui $a1, 0x3f85 -/* 07CEF4 7F048384 34A59B3D */ ori $a1, (0x3F859B3D & 0xFFFF) # ori $a1, $a1, 0x9b3d -/* 07CEF8 7F048388 0FC1B51D */ jal sub_GAME_7F06CE84 -/* 07CEFC 7F04838C 8E240014 */ lw $a0, 0x14($s1) -/* 07CF00 7F048390 3C05407B */ lui $a1, (0x407B9B3D >> 16) # lui $a1, 0x407b -/* 07CF04 7F048394 34A553D1 */ ori $a1, (0x407B53D1 & 0xFFFF) # ori $a1, $a1, 0x53d1 -/* 07CF08 7F048398 0FC1B4CB */ jal setsubroty -/* 07CF0C 7F04839C 8E240014 */ lw $a0, 0x14($s1) -/* 07CF10 7F0483A0 10000007 */ b .Ljp7F0483C0 -/* 07CF14 7F0483A4 00000000 */ nop -.Ljp7F0483A8: -/* 07CF18 7F0483A8 8E240014 */ lw $a0, 0x14($s1) -/* 07CF1C 7F0483AC 0FC1B51D */ jal sub_GAME_7F06CE84 -/* 07CF20 7F0483B0 34A59B3D */ ori $a1, (0x407B9B3D & 0xFFFF) # ori $a1, $a1, 0x9b3d -/* 07CF24 7F0483B4 4405B000 */ mfc1 $a1, $f22 -/* 07CF28 7F0483B8 0FC1B4CB */ jal setsubroty -/* 07CF2C 7F0483BC 8E240014 */ lw $a0, 0x14($s1) -.Ljp7F0483C0: -/* 07CF30 7F0483C0 3C058005 */ lui $a1, %hi(g_ClockTimer) # $a1, 0x8005 -/* 07CF34 7F0483C4 8CA583A4 */ lw $a1, %lo(g_ClockTimer)($a1) -/* 07CF38 7F0483C8 8E240014 */ lw $a0, 0x14($s1) -/* 07CF3C 7F0483CC 0FC1C437 */ jal modelTickAnimQuarterSpeed -/* 07CF40 7F0483D0 24060001 */ li $a2, 1 -/* 07CF44 7F0483D4 0FC1B728 */ jal subcalcpos -/* 07CF48 7F0483D8 8E240014 */ lw $a0, 0x14($s1) -/* 07CF4C 7F0483DC 8E240014 */ lw $a0, 0x14($s1) -/* 07CF50 7F0483E0 0FC1B462 */ jal getsuboffset -/* 07CF54 7F0483E4 8FA50074 */ lw $a1, 0x74($sp) -/* 07CF58 7F0483E8 C62A0058 */ lwc1 $f10, 0x58($s1) -/* 07CF5C 7F0483EC 3C058007 */ lui $a1, %hi(g_CurrentSetup+0) # $a1, 0x8007 -/* 07CF60 7F0483F0 24A55D40 */ addiu $a1, %lo(g_CurrentSetup+0) # addiu $a1, $a1, 0x5d40 -/* 07CF64 7F0483F4 E66A0008 */ swc1 $f10, 8($s3) -/* 07CF68 7F0483F8 C6280060 */ lwc1 $f8, 0x60($s1) -/* 07CF6C 7F0483FC E6680010 */ swc1 $f8, 0x10($s3) -/* 07CF70 7F048400 86220006 */ lh $v0, 6($s1) -/* 07CF74 7F048404 28412710 */ slti $at, $v0, 0x2710 -/* 07CF78 7F048408 1020000B */ beqz $at, .Ljp7F048438 -/* 07CF7C 7F04840C 00026100 */ sll $t4, $v0, 4 -/* 07CF80 7F048410 00025880 */ sll $t3, $v0, 2 -/* 07CF84 7F048414 3C058007 */ lui $a1, %hi(g_CurrentSetup+0) # $a1, 0x8007 -/* 07CF88 7F048418 01625823 */ subu $t3, $t3, $v0 -/* 07CF8C 7F04841C 24A55D40 */ addiu $a1, %lo(g_CurrentSetup+0) # addiu $a1, $a1, 0x5d40 -/* 07CF90 7F048420 000B5880 */ sll $t3, $t3, 2 -/* 07CF94 7F048424 8CAE0018 */ lw $t6, 0x18($a1) -/* 07CF98 7F048428 01625823 */ subu $t3, $t3, $v0 -/* 07CF9C 7F04842C 000B5880 */ sll $t3, $t3, 2 -/* 07CFA0 7F048430 10000008 */ b .Ljp7F048454 -/* 07CFA4 7F048434 016E1821 */ addu $v1, $t3, $t6 -.Ljp7F048438: -/* 07CFA8 7F048438 8CAA001C */ lw $t2, 0x1c($a1) -/* 07CFAC 7F04843C 01826021 */ addu $t4, $t4, $v0 -/* 07CFB0 7F048440 000C6080 */ sll $t4, $t4, 2 -/* 07CFB4 7F048444 3C01FFF5 */ lui $at, (0xFFF59FC0 >> 16) # lui $at, 0xfff5 -/* 07CFB8 7F048448 34219FC0 */ ori $at, (0xFFF59FC0 & 0xFFFF) # ori $at, $at, 0x9fc0 -/* 07CFBC 7F04844C 018A1821 */ addu $v1, $t4, $t2 -/* 07CFC0 7F048450 00611821 */ addu $v1, $v1, $at -.Ljp7F048454: -/* 07CFC4 7F048454 C624005C */ lwc1 $f4, 0x5c($s1) -/* 07CFC8 7F048458 C4660004 */ lwc1 $f6, 4($v1) -/* 07CFCC 7F04845C 46062280 */ add.s $f10, $f4, $f6 -/* 07CFD0 7F048460 E66A000C */ swc1 $f10, 0xc($s3) -/* 07CFD4 7F048464 C668000C */ lwc1 $f8, 0xc($s3) -/* 07CFD8 7F048468 8E240014 */ lw $a0, 0x14($s1) -/* 07CFDC 7F04846C E628005C */ swc1 $f8, 0x5c($s1) -/* 07CFE0 7F048470 0FC1B47F */ jal setsuboffset -/* 07CFE4 7F048474 8FA50074 */ lw $a1, 0x74($sp) -/* 07CFE8 7F048478 C62C00A0 */ lwc1 $f12, 0xa0($s1) -.Ljp7F04847C: -/* 07CFEC 7F04847C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07CFF0 7F048480 460CB03E */ c.le.s $f22, $f12 -/* 07CFF4 7F048484 00000000 */ nop -/* 07CFF8 7F048488 45020016 */ bc1fl .Ljp7F0484E4 -/* 07CFFC 7F04848C C6200094 */ lwc1 $f0, 0x94($s1) -/* 07D000 7F048490 C42283B4 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07D004 7F048494 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07D008 7F048498 4602603E */ c.le.s $f12, $f2 -/* 07D00C 7F04849C 00000000 */ nop -/* 07D010 7F0484A0 45020006 */ bc1fl .Ljp7F0484BC -/* 07D014 7F0484A4 C62E0098 */ lwc1 $f14, 0x98($s1) -/* 07D018 7F0484A8 C624009C */ lwc1 $f4, 0x9c($s1) -/* 07D01C 7F0484AC C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07D020 7F0484B0 10000008 */ b .Ljp7F0484D4 -/* 07D024 7F0484B4 E6240098 */ swc1 $f4, 0x98($s1) -/* 07D028 7F0484B8 C62E0098 */ lwc1 $f14, 0x98($s1) -.Ljp7F0484BC: -/* 07D02C 7F0484BC C626009C */ lwc1 $f6, 0x9c($s1) -/* 07D030 7F0484C0 460E3281 */ sub.s $f10, $f6, $f14 -/* 07D034 7F0484C4 46025202 */ mul.s $f8, $f10, $f2 -/* 07D038 7F0484C8 460C4103 */ div.s $f4, $f8, $f12 -/* 07D03C 7F0484CC 46047180 */ add.s $f6, $f14, $f4 -/* 07D040 7F0484D0 E6260098 */ swc1 $f6, 0x98($s1) -.Ljp7F0484D4: -/* 07D044 7F0484D4 C42A83B4 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07D048 7F0484D8 460A6201 */ sub.s $f8, $f12, $f10 -/* 07D04C 7F0484DC E62800A0 */ swc1 $f8, 0xa0($s1) -/* 07D050 7F0484E0 C6200094 */ lwc1 $f0, 0x94($s1) -.Ljp7F0484E4: -/* 07D054 7F0484E4 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07D058 7F0484E8 4600B03E */ c.le.s $f22, $f0 -/* 07D05C 7F0484EC 00000000 */ nop -/* 07D060 7F0484F0 45020016 */ bc1fl .Ljp7F04854C -/* 07D064 7F0484F4 8E2F000C */ lw $t7, 0xc($s1) -/* 07D068 7F0484F8 C42283B4 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07D06C 7F0484FC 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07D070 7F048500 4602003E */ c.le.s $f0, $f2 -/* 07D074 7F048504 00000000 */ nop -/* 07D078 7F048508 45020006 */ bc1fl .Ljp7F048524 -/* 07D07C 7F04850C C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07D080 7F048510 C6240090 */ lwc1 $f4, 0x90($s1) -/* 07D084 7F048514 C6200094 */ lwc1 $f0, 0x94($s1) -/* 07D088 7F048518 10000008 */ b .Ljp7F04853C -/* 07D08C 7F04851C E624008C */ swc1 $f4, 0x8c($s1) -/* 07D090 7F048520 C62C008C */ lwc1 $f12, 0x8c($s1) -.Ljp7F048524: -/* 07D094 7F048524 C6260090 */ lwc1 $f6, 0x90($s1) -/* 07D098 7F048528 460C3281 */ sub.s $f10, $f6, $f12 -/* 07D09C 7F04852C 46025202 */ mul.s $f8, $f10, $f2 -/* 07D0A0 7F048530 46004103 */ div.s $f4, $f8, $f0 -/* 07D0A4 7F048534 46046180 */ add.s $f6, $f12, $f4 -/* 07D0A8 7F048538 E626008C */ swc1 $f6, 0x8c($s1) -.Ljp7F04853C: -/* 07D0AC 7F04853C C42A83B4 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07D0B0 7F048540 460A0201 */ sub.s $f8, $f0, $f10 -/* 07D0B4 7F048544 E6280094 */ swc1 $f8, 0x94($s1) -/* 07D0B8 7F048548 8E2F000C */ lw $t7, 0xc($s1) -.Ljp7F04854C: -/* 07D0BC 7F04854C 00008025 */ move $s0, $zero -/* 07D0C0 7F048550 000F6B00 */ sll $t5, $t7, 0xc -/* 07D0C4 7F048554 05A00014 */ bltz $t5, .Ljp7F0485A8 -/* 07D0C8 7F048558 00000000 */ nop -/* 07D0CC 7F04855C 0FC13CCE */ jal objIsHealthy -/* 07D0D0 7F048560 02202025 */ move $a0, $s1 -/* 07D0D4 7F048564 10400010 */ beqz $v0, .Ljp7F0485A8 -/* 07D0D8 7F048568 00000000 */ nop -/* 07D0DC 7F04856C C624008C */ lwc1 $f4, 0x8c($s1) -/* 07D0E0 7F048570 4604B032 */ c.eq.s $f22, $f4 -/* 07D0E4 7F048574 00000000 */ nop -/* 07D0E8 7F048578 4501000B */ bc1t .Ljp7F0485A8 -/* 07D0EC 7F04857C 00000000 */ nop -/* 07D0F0 7F048580 8E390008 */ lw $t9, 8($s1) -/* 07D0F4 7F048584 3C05459C */ lui $a1, (0x459C4000 >> 16) # lui $a1, 0x459c -/* 07D0F8 7F048588 34A54000 */ ori $a1, (0x459C4000 & 0xFFFF) # ori $a1, $a1, 0x4000 -/* 07D0FC 7F04858C 00194080 */ sll $t0, $t9, 2 -/* 07D100 7F048590 05000005 */ bltz $t0, .Ljp7F0485A8 -/* 07D104 7F048594 26240058 */ addiu $a0, $s1, 0x58 -/* 07D108 7F048598 3C0645BB */ lui $a2, (0x45BB8000 >> 16) # lui $a2, 0x45bb -/* 07D10C 7F04859C 0FC14F64 */ jal sub_GAME_7F053894 -/* 07D110 7F0485A0 34C68000 */ ori $a2, (0x45BB8000 & 0xFFFF) # ori $a2, $a2, 0x8000 -/* 07D114 7F0485A4 00408025 */ move $s0, $v0 -.Ljp7F0485A8: -/* 07D118 7F0485A8 5A000019 */ blezl $s0, .Ljp7F048610 -/* 07D11C 7F0485AC 8E2400B0 */ lw $a0, 0xb0($s1) -/* 07D120 7F0485B0 8E2400B0 */ lw $a0, 0xb0($s1) -/* 07D124 7F0485B4 10800005 */ beqz $a0, .Ljp7F0485CC -/* 07D128 7F0485B8 00000000 */ nop -/* 07D12C 7F0485BC 0C002380 */ jal sndGetPlayingState -/* 07D130 7F0485C0 00000000 */ nop -/* 07D134 7F0485C4 5440000A */ bnezl $v0, .Ljp7F0485F0 -/* 07D138 7F0485C8 8E2400B0 */ lw $a0, 0xb0($s1) -.Ljp7F0485CC: -/* 07D13C 7F0485CC 0FC3021B */ jal lvlGetControlsLockedFlag -/* 07D140 7F0485D0 00000000 */ nop -/* 07D144 7F0485D4 14400005 */ bnez $v0, .Ljp7F0485EC -/* 07D148 7F0485D8 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 07D14C 7F0485DC 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07D150 7F0485E0 2405003A */ li $a1, 58 -/* 07D154 7F0485E4 0C002386 */ jal sndPlaySfx -/* 07D158 7F0485E8 262600B0 */ addiu $a2, $s1, 0xb0 -.Ljp7F0485EC: -/* 07D15C 7F0485EC 8E2400B0 */ lw $a0, 0xb0($s1) -.Ljp7F0485F0: -/* 07D160 7F0485F0 24050008 */ li $a1, 8 -/* 07D164 7F0485F4 5080000F */ beql $a0, $zero, .Ljp7F048634 -/* 07D168 7F0485F8 92220003 */ lbu $v0, 3($s1) -/* 07D16C 7F0485FC 0C002465 */ jal sndCreatePostEvent -/* 07D170 7F048600 02003025 */ move $a2, $s0 -/* 07D174 7F048604 1000000B */ b .Ljp7F048634 -/* 07D178 7F048608 92220003 */ lbu $v0, 3($s1) -/* 07D17C 7F04860C 8E2400B0 */ lw $a0, 0xb0($s1) -.Ljp7F048610: -/* 07D180 7F048610 50800008 */ beql $a0, $zero, .Ljp7F048634 -/* 07D184 7F048614 92220003 */ lbu $v0, 3($s1) -/* 07D188 7F048618 0C002380 */ jal sndGetPlayingState -/* 07D18C 7F04861C 00000000 */ nop -/* 07D190 7F048620 50400004 */ beql $v0, $zero, .Ljp7F048634 -/* 07D194 7F048624 92220003 */ lbu $v0, 3($s1) -/* 07D198 7F048628 0C00240C */ jal sndDeactivate -/* 07D19C 7F04862C 8E2400B0 */ lw $a0, 0xb0($s1) -.Ljp7F048630: -/* 07D1A0 7F048630 92220003 */ lbu $v0, 3($s1) -.Ljp7F048634: -/* 07D1A4 7F048634 3C018005 */ lui $at, %hi(D_80052B64) # $at, 0x8005 -/* 07D1A8 7F048638 C4342B94 */ lwc1 $f20, %lo(D_80052B64)($at) -/* 07D1AC 7F04863C 2401002F */ li $at, 47 -/* 07D1B0 7F048640 54410020 */ bnel $v0, $at, .Ljp7F0486C4 -/* 07D1B4 7F048644 24010001 */ li $at, 1 -/* 07D1B8 7F048648 8E700004 */ lw $s0, 4($s3) -/* 07D1BC 7F04864C 26240058 */ addiu $a0, $s1, 0x58 -/* 07D1C0 7F048650 8E180080 */ lw $t8, 0x80($s0) -/* 07D1C4 7F048654 8E090084 */ lw $t1, 0x84($s0) -/* 07D1C8 7F048658 8E070090 */ lw $a3, 0x90($s0) -/* 07D1CC 7F04865C 44983000 */ mtc1 $t8, $f6 -/* 07D1D0 7F048660 44895000 */ mtc1 $t1, $f10 -/* 07D1D4 7F048664 468031A0 */ cvt.s.w $f6, $f6 -/* 07D1D8 7F048668 468052A0 */ cvt.s.w $f10, $f10 -/* 07D1DC 7F04866C 44053000 */ mfc1 $a1, $f6 -/* 07D1E0 7F048670 44065000 */ mfc1 $a2, $f10 -/* 07D1E4 7F048674 0FC1156C */ jal glassCalculateOpacity -/* 07D1E8 7F048678 00000000 */ nop -/* 07D1EC 7F04867C 8E04008C */ lw $a0, 0x8c($s0) -/* 07D1F0 7F048680 AE020088 */ sw $v0, 0x88($s0) -/* 07D1F4 7F048684 8FAB067C */ lw $t3, 0x67c($sp) -/* 07D1F8 7F048688 0480000B */ bltz $a0, .Ljp7F0486B8 -/* 07D1FC 7F04868C 24010001 */ li $at, 1 -/* 07D200 7F048690 15610009 */ bne $t3, $at, .Ljp7F0486B8 -/* 07D204 7F048694 240100FF */ li $at, 255 -/* 07D208 7F048698 14410005 */ bne $v0, $at, .Ljp7F0486B0 -/* 07D20C 7F04869C 00000000 */ nop -/* 07D210 7F0486A0 0FC2EA5B */ jal bgToggleDataPortalsContrlBytes1Bit1 -/* 07D214 7F0486A4 00002825 */ move $a1, $zero -/* 07D218 7F0486A8 10000003 */ b .Ljp7F0486B8 -/* 07D21C 7F0486AC 00000000 */ nop -.Ljp7F0486B0: -/* 07D220 7F0486B0 0FC2EA5B */ jal bgToggleDataPortalsContrlBytes1Bit1 -/* 07D224 7F0486B4 24050001 */ li $a1, 1 -.Ljp7F0486B8: -/* 07D228 7F0486B8 1000003B */ b .Ljp7F0487A8 -/* 07D22C 7F0486BC AFA00678 */ sw $zero, 0x678($sp) -/* 07D230 7F0486C0 24010001 */ li $at, 1 -.Ljp7F0486C4: -/* 07D234 7F0486C4 54410039 */ bnel $v0, $at, .Ljp7F0487AC -/* 07D238 7F0486C8 922C0003 */ lbu $t4, 3($s1) -/* 07D23C 7F0486CC 962C0098 */ lhu $t4, 0x98($s1) -/* 07D240 7F0486D0 318A0002 */ andi $t2, $t4, 2 -/* 07D244 7F0486D4 51400035 */ beql $t2, $zero, .Ljp7F0487AC -/* 07D248 7F0486D8 922C0003 */ lbu $t4, 3($s1) -/* 07D24C 7F0486DC 8E700004 */ lw $s0, 4($s3) -/* 07D250 7F0486E0 4407B000 */ mfc1 $a3, $f22 -/* 07D254 7F0486E4 24120001 */ li $s2, 1 -/* 07D258 7F0486E8 8E0F00C0 */ lw $t7, 0xc0($s0) -/* 07D25C 7F0486EC 8E0D00C4 */ lw $t5, 0xc4($s0) -/* 07D260 7F0486F0 26240058 */ addiu $a0, $s1, 0x58 -/* 07D264 7F0486F4 448F4000 */ mtc1 $t7, $f8 -/* 07D268 7F0486F8 448D2000 */ mtc1 $t5, $f4 -/* 07D26C 7F0486FC 46804220 */ cvt.s.w $f8, $f8 -/* 07D270 7F048700 46802120 */ cvt.s.w $f4, $f4 -/* 07D274 7F048704 44054000 */ mfc1 $a1, $f8 -/* 07D278 7F048708 44062000 */ mfc1 $a2, $f4 -/* 07D27C 7F04870C 0FC1156C */ jal glassCalculateOpacity -/* 07D280 7F048710 00000000 */ nop -/* 07D284 7F048714 A60200BE */ sh $v0, 0xbe($s0) -/* 07D288 7F048718 8FB9067C */ lw $t9, 0x67c($sp) -/* 07D28C 7F04871C 24010001 */ li $at, 1 -/* 07D290 7F048720 57210022 */ bnel $t9, $at, .Ljp7F0487AC -/* 07D294 7F048724 922C0003 */ lbu $t4, 3($s1) -/* 07D298 7F048728 860800BE */ lh $t0, 0xbe($s0) -/* 07D29C 7F04872C 240100FF */ li $at, 255 -/* 07D2A0 7F048730 55010007 */ bnel $t0, $at, .Ljp7F048750 -/* 07D2A4 7F048734 00009025 */ move $s2, $zero -/* 07D2A8 7F048738 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07D2AC 7F04873C 4606B03C */ c.lt.s $f22, $f6 -/* 07D2B0 7F048740 00000000 */ nop -/* 07D2B4 7F048744 45020003 */ bc1fl .Ljp7F048754 -/* 07D2B8 7F048748 8E820008 */ lw $v0, 8($s4) -/* 07D2BC 7F04874C 00009025 */ move $s2, $zero -.Ljp7F048750: -/* 07D2C0 7F048750 8E820008 */ lw $v0, 8($s4) -.Ljp7F048754: -/* 07D2C4 7F048754 3C188004 */ lui $t8, %hi(skeleton_door) # $t8, 0x8004 -/* 07D2C8 7F048758 2718A20C */ addiu $t8, %lo(skeleton_door) # addiu $t8, $t8, -0x5df4 -/* 07D2CC 7F04875C 8C490004 */ lw $t1, 4($v0) -/* 07D2D0 7F048760 17090009 */ bne $t8, $t1, .Ljp7F048788 -/* 07D2D4 7F048764 00000000 */ nop -/* 07D2D8 7F048768 8C4B0008 */ lw $t3, 8($v0) -/* 07D2DC 7F04876C 02802025 */ move $a0, $s4 -/* 07D2E0 7F048770 0FC1B363 */ jal modelGetNodeRwData -/* 07D2E4 7F048774 8D650004 */ lw $a1, 4($t3) -/* 07D2E8 7F048778 8C4E0000 */ lw $t6, ($v0) -/* 07D2EC 7F04877C 15C00002 */ bnez $t6, .Ljp7F048788 -/* 07D2F0 7F048780 00000000 */ nop -/* 07D2F4 7F048784 00009025 */ move $s2, $zero -.Ljp7F048788: -/* 07D2F8 7F048788 12400005 */ beqz $s2, .Ljp7F0487A0 -/* 07D2FC 7F04878C 00000000 */ nop -/* 07D300 7F048790 0FC14EB0 */ jal doorDeactivatePortal -/* 07D304 7F048794 02002025 */ move $a0, $s0 -/* 07D308 7F048798 10000004 */ b .Ljp7F0487AC -/* 07D30C 7F04879C 922C0003 */ lbu $t4, 3($s1) -.Ljp7F0487A0: -/* 07D310 7F0487A0 0FC14EA5 */ jal doorActivatePortal -/* 07D314 7F0487A4 02002025 */ move $a0, $s0 -.Ljp7F0487A8: -/* 07D318 7F0487A8 922C0003 */ lbu $t4, 3($s1) -.Ljp7F0487AC: -/* 07D31C 7F0487AC 2410002D */ li $s0, 45 -/* 07D320 7F0487B0 560C0008 */ bnel $s0, $t4, .Ljp7F0487D4 -/* 07D324 7F0487B4 8E23000C */ lw $v1, 0xc($s1) -/* 07D328 7F0487B8 0FC1F52A */ jal get_ptr_for_players_tank -/* 07D32C 7F0487BC 00000000 */ nop -/* 07D330 7F0487C0 54530004 */ bnel $v0, $s3, .Ljp7F0487D4 -/* 07D334 7F0487C4 8E23000C */ lw $v1, 0xc($s1) -/* 07D338 7F0487C8 10000019 */ b .Ljp7F048830 -/* 07D33C 7F0487CC 24030001 */ li $v1, 1 -/* 07D340 7F0487D0 8E23000C */ lw $v1, 0xc($s1) -.Ljp7F0487D4: -/* 07D344 7F0487D4 00035140 */ sll $t2, $v1, 5 -/* 07D348 7F0487D8 05430004 */ bgezl $t2, .Ljp7F0487EC -/* 07D34C 7F0487DC 8E2F0064 */ lw $t7, 0x64($s1) -/* 07D350 7F0487E0 10000013 */ b .Ljp7F048830 -/* 07D354 7F0487E4 24030001 */ li $v1, 1 -/* 07D358 7F0487E8 8E2F0064 */ lw $t7, 0x64($s1) -.Ljp7F0487EC: -/* 07D35C 7F0487EC 0003CB00 */ sll $t9, $v1, 0xc -/* 07D360 7F0487F0 00001825 */ move $v1, $zero -/* 07D364 7F0487F4 31ED0800 */ andi $t5, $t7, 0x800 -/* 07D368 7F0487F8 15A0000D */ bnez $t5, .Ljp7F048830 -/* 07D36C 7F0487FC 00000000 */ nop -/* 07D370 7F048800 0720000B */ bltz $t9, .Ljp7F048830 -/* 07D374 7F048804 02802025 */ move $a0, $s4 -/* 07D378 7F048808 26280058 */ addiu $t0, $s1, 0x58 -/* 07D37C 7F04880C 0FC1B57F */ jal getinstsize -/* 07D380 7F048810 AFA80074 */ sw $t0, 0x74($sp) -/* 07D384 7F048814 44060000 */ mfc1 $a2, $f0 -/* 07D388 7F048818 02602025 */ move $a0, $s3 -/* 07D38C 7F04881C 8FA50074 */ lw $a1, 0x74($sp) -/* 07D390 7F048820 0FC1549A */ jal sub_GAME_7F054D6C -/* 07D394 7F048824 8FA70678 */ lw $a3, 0x678($sp) -/* 07D398 7F048828 10000001 */ b .Ljp7F048830 -/* 07D39C 7F04882C 00401825 */ move $v1, $v0 -.Ljp7F048830: -/* 07D3A0 7F048830 1060037A */ beqz $v1, .Ljp7F04961C -/* 07D3A4 7F048834 8FB80680 */ lw $t8, 0x680($sp) -/* 07D3A8 7F048838 13000003 */ beqz $t8, .Ljp7F048848 -/* 07D3AC 7F04883C 26240078 */ addiu $a0, $s1, 0x78 -/* 07D3B0 7F048840 0FC10184 */ jal update_color_shading -/* 07D3B4 7F048844 2625007C */ addiu $a1, $s1, 0x7c -.Ljp7F048848: -/* 07D3B8 7F048848 92690001 */ lbu $t1, 1($s3) -/* 07D3BC 7F04884C 352B0002 */ ori $t3, $t1, 2 -/* 07D3C0 7F048850 A26B0001 */ sb $t3, 1($s3) -/* 07D3C4 7F048854 8E8E0008 */ lw $t6, 8($s4) -/* 07D3C8 7F048858 85C4000E */ lh $a0, 0xe($t6) -/* 07D3CC 7F04885C 00046180 */ sll $t4, $a0, 6 -/* 07D3D0 7F048860 0FC2F8B1 */ jal dynAllocate -/* 07D3D4 7F048864 01802025 */ move $a0, $t4 -/* 07D3D8 7F048868 AE82000C */ sw $v0, 0xc($s4) -/* 07D3DC 7F04886C 922A0003 */ lbu $t2, 3($s1) -/* 07D3E0 7F048870 24010001 */ li $at, 1 -/* 07D3E4 7F048874 00409025 */ move $s2, $v0 -/* 07D3E8 7F048878 154100AD */ bne $t2, $at, .Ljp7F048B30 -/* 07D3EC 7F04887C 26240018 */ addiu $a0, $s1, 0x18 -/* 07D3F0 7F048880 8E640004 */ lw $a0, 4($s3) -/* 07D3F4 7F048884 00402825 */ move $a1, $v0 -/* 07D3F8 7F048888 0FC14AFA */ jal door7F0526EC -/* 07D3FC 7F04888C AFA403A0 */ sw $a0, 0x3a0($sp) -/* 07D400 7F048890 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 07D404 7F048894 00000000 */ nop -/* 07D408 7F048898 00402025 */ move $a0, $v0 -/* 07D40C 7F04889C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D410 7F0488A0 02402825 */ move $a1, $s2 -/* 07D414 7F0488A4 8E820008 */ lw $v0, 8($s4) -/* 07D418 7F0488A8 3C0F8004 */ lui $t7, %hi(skeleton_eyelid_door) # $t7, 0x8004 -/* 07D41C 7F0488AC 25EFA130 */ addiu $t7, %lo(skeleton_eyelid_door) # addiu $t7, $t7, -0x5ed0 -/* 07D420 7F0488B0 8C430004 */ lw $v1, 4($v0) -/* 07D424 7F0488B4 3C0B8004 */ lui $t3, %hi(skeleton_iris_door) # $t3, 0x8004 -/* 07D428 7F0488B8 8FA603A0 */ lw $a2, 0x3a0($sp) -/* 07D42C 7F0488BC 15E30025 */ bne $t7, $v1, .Ljp7F048954 -/* 07D430 7F0488C0 256BA18C */ addiu $t3, %lo(skeleton_iris_door) # addiu $t3, $t3, -0x5e74 -/* 07D434 7F0488C4 C4CA00B4 */ lwc1 $f10, 0xb4($a2) -/* 07D438 7F0488C8 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07D43C 7F0488CC 44812000 */ mtc1 $at, $f4 -/* 07D440 7F0488D0 46145202 */ mul.s $f8, $f10, $f20 -/* 07D444 7F0488D4 8C4D0008 */ lw $t5, 8($v0) -/* 07D448 7F0488D8 26450040 */ addiu $a1, $s2, 0x40 -/* 07D44C 7F0488DC 8DB90004 */ lw $t9, 4($t5) -/* 07D450 7F0488E0 46044183 */ div.s $f6, $f8, $f4 -/* 07D454 7F0488E4 8F300004 */ lw $s0, 4($t9) -/* 07D458 7F0488E8 AFA50070 */ sw $a1, 0x70($sp) -/* 07D45C 7F0488EC 4606A301 */ sub.s $f12, $f20, $f6 -/* 07D460 7F0488F0 0FC162A4 */ jal matrix_4x4_set_rotation_around_x -/* 07D464 7F0488F4 E7AC0398 */ swc1 $f12, 0x398($sp) -/* 07D468 7F0488F8 02002025 */ move $a0, $s0 -/* 07D46C 7F0488FC 0FC163AE */ jal matrix_4x4_set_position -/* 07D470 7F048900 8FA50070 */ lw $a1, 0x70($sp) -/* 07D474 7F048904 02402025 */ move $a0, $s2 -/* 07D478 7F048908 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 07D47C 7F04890C 8FA50070 */ lw $a1, 0x70($sp) -/* 07D480 7F048910 8E880008 */ lw $t0, 8($s4) -/* 07D484 7F048914 C7AA0398 */ lwc1 $f10, 0x398($sp) -/* 07D488 7F048918 26450080 */ addiu $a1, $s2, 0x80 -/* 07D48C 7F04891C 8D180008 */ lw $t8, 8($t0) -/* 07D490 7F048920 460AA301 */ sub.s $f12, $f20, $f10 -/* 07D494 7F048924 8F090008 */ lw $t1, 8($t8) -/* 07D498 7F048928 8D300004 */ lw $s0, 4($t1) -/* 07D49C 7F04892C 0FC162A4 */ jal matrix_4x4_set_rotation_around_x -/* 07D4A0 7F048930 AFA5006C */ sw $a1, 0x6c($sp) -/* 07D4A4 7F048934 02002025 */ move $a0, $s0 -/* 07D4A8 7F048938 0FC163AE */ jal matrix_4x4_set_position -/* 07D4AC 7F04893C 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D4B0 7F048940 02402025 */ move $a0, $s2 -/* 07D4B4 7F048944 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 07D4B8 7F048948 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D4BC 7F04894C 1000031F */ b .Ljp7F0495CC -/* 07D4C0 7F048950 8E8C0008 */ lw $t4, 8($s4) -.Ljp7F048954: -/* 07D4C4 7F048954 5563031D */ bnel $t3, $v1, .Ljp7F0495CC -/* 07D4C8 7F048958 8E8C0008 */ lw $t4, 8($s4) -/* 07D4CC 7F04895C C4C200B4 */ lwc1 $f2, 0xb4($a2) -/* 07D4D0 7F048960 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07D4D4 7F048964 44812000 */ mtc1 $at, $f4 -/* 07D4D8 7F048968 46141202 */ mul.s $f8, $f2, $f20 -/* 07D4DC 7F04896C 3C018005 */ lui $at, %hi(D_80052B68) # $at, 0x8005 -/* 07D4E0 7F048970 C42A2B98 */ lwc1 $f10, %lo(D_80052B68)($at) -/* 07D4E4 7F048974 4600B386 */ mov.s $f14, $f22 -/* 07D4E8 7F048978 46044183 */ div.s $f6, $f8, $f4 -/* 07D4EC 7F04897C E7A60388 */ swc1 $f6, 0x388($sp) -/* 07D4F0 7F048980 C4CC0084 */ lwc1 $f12, 0x84($a2) -/* 07D4F4 7F048984 460A6002 */ mul.s $f0, $f12, $f10 -/* 07D4F8 7F048988 4602003C */ c.lt.s $f0, $f2 -/* 07D4FC 7F04898C 00000000 */ nop -/* 07D500 7F048990 4502001F */ bc1fl .Ljp7F048A10 -/* 07D504 7F048994 8FAA0680 */ lw $t2, 0x680($sp) -/* 07D508 7F048998 46001201 */ sub.s $f8, $f2, $f0 -/* 07D50C 7F04899C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07D510 7F0489A0 8FAE0680 */ lw $t6, 0x680($sp) -/* 07D514 7F0489A4 46006181 */ sub.s $f6, $f12, $f0 -/* 07D518 7F0489A8 46086102 */ mul.s $f4, $f12, $f8 -/* 07D51C 7F0489AC 46062283 */ div.s $f10, $f4, $f6 -/* 07D520 7F0489B0 44812000 */ mtc1 $at, $f4 -/* 07D524 7F0489B4 46145202 */ mul.s $f8, $f10, $f20 -/* 07D528 7F0489B8 46044383 */ div.s $f14, $f8, $f4 -/* 07D52C 7F0489BC 11C00011 */ beqz $t6, .Ljp7F048A04 -/* 07D530 7F0489C0 E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07D534 7F0489C4 C7A60684 */ lwc1 $f6, 0x684($sp) -/* 07D538 7F0489C8 E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07D53C 7F0489CC 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 07D540 7F0489D0 4600303E */ c.le.s $f6, $f0 -/* 07D544 7F0489D4 240500CA */ li $a1, 202 -/* 07D548 7F0489D8 00003025 */ move $a2, $zero -/* 07D54C 7F0489DC 266C0008 */ addiu $t4, $s3, 8 -/* 07D550 7F0489E0 45000008 */ bc1f .Ljp7F048A04 -/* 07D554 7F0489E4 00000000 */ nop -/* 07D558 7F0489E8 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07D55C 7F0489EC AFAC0074 */ sw $t4, 0x74($sp) -/* 07D560 7F0489F0 0C002386 */ jal sndPlaySfx -/* 07D564 7F0489F4 E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07D568 7F0489F8 00402025 */ move $a0, $v0 -/* 07D56C 7F0489FC 0FC14FC3 */ jal chrobjSndCreatePostEventDefault -/* 07D570 7F048A00 8FA50074 */ lw $a1, 0x74($sp) -.Ljp7F048A04: -/* 07D574 7F048A04 10000016 */ b .Ljp7F048A60 -/* 07D578 7F048A08 AFA00390 */ sw $zero, 0x390($sp) -/* 07D57C 7F048A0C 8FAA0680 */ lw $t2, 0x680($sp) -.Ljp7F048A10: -/* 07D580 7F048A10 E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07D584 7F048A14 51400012 */ beql $t2, $zero, .Ljp7F048A60 -/* 07D588 7F048A18 AFA00390 */ sw $zero, 0x390($sp) -/* 07D58C 7F048A1C C7AA0684 */ lwc1 $f10, 0x684($sp) -/* 07D590 7F048A20 E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07D594 7F048A24 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 07D598 7F048A28 460A003C */ c.lt.s $f0, $f10 -/* 07D59C 7F048A2C 240500CB */ li $a1, 203 -/* 07D5A0 7F048A30 00003025 */ move $a2, $zero -/* 07D5A4 7F048A34 266F0008 */ addiu $t7, $s3, 8 -/* 07D5A8 7F048A38 45020009 */ bc1fl .Ljp7F048A60 -/* 07D5AC 7F048A3C AFA00390 */ sw $zero, 0x390($sp) -/* 07D5B0 7F048A40 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07D5B4 7F048A44 AFAF0074 */ sw $t7, 0x74($sp) -/* 07D5B8 7F048A48 0C002386 */ jal sndPlaySfx -/* 07D5BC 7F048A4C E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07D5C0 7F048A50 00402025 */ move $a0, $v0 -/* 07D5C4 7F048A54 0FC14FC3 */ jal chrobjSndCreatePostEventDefault -/* 07D5C8 7F048A58 8FA50074 */ lw $a1, 0x74($sp) -/* 07D5CC 7F048A5C AFA00390 */ sw $zero, 0x390($sp) -.Ljp7F048A60: -/* 07D5D0 7F048A60 8E8D0008 */ lw $t5, 8($s4) -/* 07D5D4 7F048A64 8FA30390 */ lw $v1, 0x390($sp) -/* 07D5D8 7F048A68 C7AC0384 */ lwc1 $f12, 0x384($sp) -/* 07D5DC 7F048A6C 8DB90008 */ lw $t9, 8($t5) -/* 07D5E0 7F048A70 00031040 */ sll $v0, $v1, 1 -/* 07D5E4 7F048A74 00024080 */ sll $t0, $v0, 2 -/* 07D5E8 7F048A78 0328C021 */ addu $t8, $t9, $t0 -/* 07D5EC 7F048A7C 8F090004 */ lw $t1, 4($t8) -/* 07D5F0 7F048A80 00027180 */ sll $t6, $v0, 6 -/* 07D5F4 7F048A84 024E2821 */ addu $a1, $s2, $t6 -/* 07D5F8 7F048A88 8D2B0004 */ lw $t3, 4($t1) -/* 07D5FC 7F048A8C AFA20078 */ sw $v0, 0x78($sp) -/* 07D600 7F048A90 24A50040 */ addiu $a1, $a1, 0x40 -/* 07D604 7F048A94 0FC162EA */ jal matrix_4x4_set_rotation_around_z -/* 07D608 7F048A98 AFAB0394 */ sw $t3, 0x394($sp) -/* 07D60C 7F048A9C 8FAC0078 */ lw $t4, 0x78($sp) -/* 07D610 7F048AA0 8FB00390 */ lw $s0, 0x390($sp) -/* 07D614 7F048AA4 8FA40394 */ lw $a0, 0x394($sp) -/* 07D618 7F048AA8 000C5180 */ sll $t2, $t4, 6 -/* 07D61C 7F048AAC 024A2821 */ addu $a1, $s2, $t2 -/* 07D620 7F048AB0 24A50040 */ addiu $a1, $a1, 0x40 -/* 07D624 7F048AB4 0FC163AE */ jal matrix_4x4_set_position -/* 07D628 7F048AB8 AFA50074 */ sw $a1, 0x74($sp) -/* 07D62C 7F048ABC 02402025 */ move $a0, $s2 -/* 07D630 7F048AC0 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 07D634 7F048AC4 8FA50074 */ lw $a1, 0x74($sp) -/* 07D638 7F048AC8 8E8F0008 */ lw $t7, 8($s4) -/* 07D63C 7F048ACC 8FA20078 */ lw $v0, 0x78($sp) -/* 07D640 7F048AD0 C7AC0388 */ lwc1 $f12, 0x388($sp) -/* 07D644 7F048AD4 8DED0008 */ lw $t5, 8($t7) -/* 07D648 7F048AD8 24420002 */ addiu $v0, $v0, 2 -/* 07D64C 7F048ADC 0002C880 */ sll $t9, $v0, 2 -/* 07D650 7F048AE0 01B94021 */ addu $t0, $t5, $t9 -/* 07D654 7F048AE4 8D180000 */ lw $t8, ($t0) -/* 07D658 7F048AE8 00025980 */ sll $t3, $v0, 6 -/* 07D65C 7F048AEC 024B2821 */ addu $a1, $s2, $t3 -/* 07D660 7F048AF0 8F090004 */ lw $t1, 4($t8) -/* 07D664 7F048AF4 AFA50070 */ sw $a1, 0x70($sp) -/* 07D668 7F048AF8 0FC162EA */ jal matrix_4x4_set_rotation_around_z -/* 07D66C 7F048AFC AFA90394 */ sw $t1, 0x394($sp) -/* 07D670 7F048B00 8FA40394 */ lw $a0, 0x394($sp) -/* 07D674 7F048B04 0FC163AE */ jal matrix_4x4_set_position -/* 07D678 7F048B08 8FA50070 */ lw $a1, 0x70($sp) -/* 07D67C 7F048B0C 8FA40074 */ lw $a0, 0x74($sp) -/* 07D680 7F048B10 0FC16162 */ jal matrix_4x4_multiply_in_place -/* 07D684 7F048B14 8FA50070 */ lw $a1, 0x70($sp) -/* 07D688 7F048B18 26100001 */ addiu $s0, $s0, 1 -/* 07D68C 7F048B1C 24010006 */ li $at, 6 -/* 07D690 7F048B20 1601FFCF */ bne $s0, $at, .Ljp7F048A60 -/* 07D694 7F048B24 AFB00390 */ sw $s0, 0x390($sp) -/* 07D698 7F048B28 100002A8 */ b .Ljp7F0495CC -/* 07D69C 7F048B2C 8E8C0008 */ lw $t4, 8($s4) -.Ljp7F048B30: -/* 07D6A0 7F048B30 262E0058 */ addiu $t6, $s1, 0x58 -/* 07D6A4 7F048B34 AFAE0074 */ sw $t6, 0x74($sp) -/* 07D6A8 7F048B38 0FC16150 */ jal matrix_4x4_copy -/* 07D6AC 7F048B3C 27A503A8 */ addiu $a1, $sp, 0x3a8 -/* 07D6B0 7F048B40 8FA40074 */ lw $a0, 0x74($sp) -/* 07D6B4 7F048B44 0FC163AE */ jal matrix_4x4_set_position -/* 07D6B8 7F048B48 27A503A8 */ addiu $a1, $sp, 0x3a8 -/* 07D6BC 7F048B4C 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 07D6C0 7F048B50 00000000 */ nop -/* 07D6C4 7F048B54 00402025 */ move $a0, $v0 -/* 07D6C8 7F048B58 27A503A8 */ addiu $a1, $sp, 0x3a8 -/* 07D6CC 7F048B5C 0FC161AB */ jal matrix_4x4_multiply_homogeneous -/* 07D6D0 7F048B60 02403025 */ move $a2, $s2 -/* 07D6D4 7F048B64 92220003 */ lbu $v0, 3($s1) -/* 07D6D8 7F048B68 24010006 */ li $at, 6 -/* 07D6DC 7F048B6C 27A50324 */ addiu $a1, $sp, 0x324 -/* 07D6E0 7F048B70 5441002D */ bnel $v0, $at, .Ljp7F048C28 -/* 07D6E4 7F048B74 2401000D */ li $at, 13 -/* 07D6E8 7F048B78 8E620004 */ lw $v0, 4($s3) -/* 07D6EC 7F048B7C 8E8C0008 */ lw $t4, 8($s4) -/* 07D6F0 7F048B80 C44C00C8 */ lwc1 $f12, 0xc8($v0) -/* 07D6F4 7F048B84 8D8A0008 */ lw $t2, 8($t4) -/* 07D6F8 7F048B88 4616603C */ c.lt.s $f12, $f22 -/* 07D6FC 7F048B8C 8D4F0000 */ lw $t7, ($t2) -/* 07D700 7F048B90 45000003 */ bc1f .Ljp7F048BA0 -/* 07D704 7F048B94 8DF00004 */ lw $s0, 4($t7) -/* 07D708 7F048B98 10000006 */ b .Ljp7F048BB4 -/* 07D70C 7F048B9C 46146300 */ add.s $f12, $f12, $f20 -.Ljp7F048BA0: -/* 07D710 7F048BA0 460CA03E */ c.le.s $f20, $f12 -/* 07D714 7F048BA4 00000000 */ nop -/* 07D718 7F048BA8 45000002 */ bc1f .Ljp7F048BB4 -/* 07D71C 7F048BAC 00000000 */ nop -/* 07D720 7F048BB0 46146301 */ sub.s $f12, $f12, $f20 -.Ljp7F048BB4: -/* 07D724 7F048BB4 0FC162C7 */ jal matrix_4x4_set_rotation_around_y -/* 07D728 7F048BB8 AFA20374 */ sw $v0, 0x374($sp) -/* 07D72C 7F048BBC 8FA20374 */ lw $v0, 0x374($sp) -/* 07D730 7F048BC0 26460040 */ addiu $a2, $s2, 0x40 -/* 07D734 7F048BC4 AFA60070 */ sw $a2, 0x70($sp) -/* 07D738 7F048BC8 27A40324 */ addiu $a0, $sp, 0x324 -/* 07D73C 7F048BCC 0FC1617A */ jal matrix_4x4_multiply -/* 07D740 7F048BD0 24450084 */ addiu $a1, $v0, 0x84 -/* 07D744 7F048BD4 C6080000 */ lwc1 $f8, ($s0) -/* 07D748 7F048BD8 27B20364 */ addiu $s2, $sp, 0x364 -/* 07D74C 7F048BDC 02402825 */ move $a1, $s2 -/* 07D750 7F048BE0 E7A80364 */ swc1 $f8, 0x364($sp) -/* 07D754 7F048BE4 C6040004 */ lwc1 $f4, 4($s0) -/* 07D758 7F048BE8 27A403A8 */ addiu $a0, $sp, 0x3a8 -/* 07D75C 7F048BEC E7A40368 */ swc1 $f4, 0x368($sp) -/* 07D760 7F048BF0 C6060008 */ lwc1 $f6, 8($s0) -/* 07D764 7F048BF4 0FC16265 */ jal mtx4TransformVecInPlace -/* 07D768 7F048BF8 E7A6036C */ swc1 $f6, 0x36c($sp) -/* 07D76C 7F048BFC 02402025 */ move $a0, $s2 -/* 07D770 7F048C00 0FC163AE */ jal matrix_4x4_set_position -/* 07D774 7F048C04 8FA50070 */ lw $a1, 0x70($sp) -/* 07D778 7F048C08 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 07D77C 7F048C0C 00000000 */ nop -/* 07D780 7F048C10 00402025 */ move $a0, $v0 -/* 07D784 7F048C14 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D788 7F048C18 8FA50070 */ lw $a1, 0x70($sp) -/* 07D78C 7F048C1C 1000026B */ b .Ljp7F0495CC -/* 07D790 7F048C20 8E8C0008 */ lw $t4, 8($s4) -/* 07D794 7F048C24 2401000D */ li $at, 13 -.Ljp7F048C28: -/* 07D798 7F048C28 5441007F */ bnel $v0, $at, .Ljp7F048E28 -/* 07D79C 7F048C2C 24010008 */ li $at, 8 -/* 07D7A0 7F048C30 8E620004 */ lw $v0, 4($s3) -/* 07D7A4 7F048C34 3C018005 */ lui $at, %hi(D_80052B6C) # $at, 0x8005 -/* 07D7A8 7F048C38 C4282B9C */ lwc1 $f8, %lo(D_80052B6C)($at) -/* 07D7AC 7F048C3C C44A0090 */ lwc1 $f10, 0x90($v0) -/* 07D7B0 7F048C40 C444009C */ lwc1 $f4, 0x9c($v0) -/* 07D7B4 7F048C44 46085300 */ add.s $f12, $f10, $f8 -/* 07D7B8 7F048C48 46002187 */ neg.s $f6, $f4 -/* 07D7BC 7F048C4C 460CA03E */ c.le.s $f20, $f12 -/* 07D7C0 7F048C50 E7A60304 */ swc1 $f6, 0x304($sp) -/* 07D7C4 7F048C54 45020003 */ bc1fl .Ljp7F048C64 -/* 07D7C8 7F048C58 8E8D0008 */ lw $t5, 8($s4) -/* 07D7CC 7F048C5C 46146301 */ sub.s $f12, $f12, $f20 -/* 07D7D0 7F048C60 8E8D0008 */ lw $t5, 8($s4) -.Ljp7F048C64: -/* 07D7D4 7F048C64 27A403A8 */ addiu $a0, $sp, 0x3a8 -/* 07D7D8 7F048C68 27A5030C */ addiu $a1, $sp, 0x30c -/* 07D7DC 7F048C6C 8DB90008 */ lw $t9, 8($t5) -/* 07D7E0 7F048C70 8F280004 */ lw $t0, 4($t9) -/* 07D7E4 7F048C74 8D100004 */ lw $s0, 4($t0) -/* 07D7E8 7F048C78 C60A0000 */ lwc1 $f10, ($s0) -/* 07D7EC 7F048C7C E7AA030C */ swc1 $f10, 0x30c($sp) -/* 07D7F0 7F048C80 C6080004 */ lwc1 $f8, 4($s0) -/* 07D7F4 7F048C84 E7A80310 */ swc1 $f8, 0x310($sp) -/* 07D7F8 7F048C88 C6040008 */ lwc1 $f4, 8($s0) -/* 07D7FC 7F048C8C E7AC0308 */ swc1 $f12, 0x308($sp) -/* 07D800 7F048C90 AFA2031C */ sw $v0, 0x31c($sp) -/* 07D804 7F048C94 0FC16265 */ jal mtx4TransformVecInPlace -/* 07D808 7F048C98 E7A40314 */ swc1 $f4, 0x314($sp) -/* 07D80C 7F048C9C 26450040 */ addiu $a1, $s2, 0x40 -/* 07D810 7F048CA0 C7AC0308 */ lwc1 $f12, 0x308($sp) -/* 07D814 7F048CA4 0FC162C7 */ jal matrix_4x4_set_rotation_around_y -/* 07D818 7F048CA8 AFA50070 */ sw $a1, 0x70($sp) -/* 07D81C 7F048CAC 27A4030C */ addiu $a0, $sp, 0x30c -/* 07D820 7F048CB0 0FC163AE */ jal matrix_4x4_set_position -/* 07D824 7F048CB4 8FA50070 */ lw $a1, 0x70($sp) -/* 07D828 7F048CB8 8FB8031C */ lw $t8, 0x31c($sp) -/* 07D82C 7F048CBC 8FA50070 */ lw $a1, 0x70($sp) -/* 07D830 7F048CC0 8F090014 */ lw $t1, 0x14($t8) -/* 07D834 7F048CC4 0FC163E7 */ jal matrix_scalar_multiply -/* 07D838 7F048CC8 C52C0014 */ lwc1 $f12, 0x14($t1) -/* 07D83C 7F048CCC 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 07D840 7F048CD0 00000000 */ nop -/* 07D844 7F048CD4 00402025 */ move $a0, $v0 -/* 07D848 7F048CD8 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D84C 7F048CDC 8FA50070 */ lw $a1, 0x70($sp) -/* 07D850 7F048CE0 8E8B0008 */ lw $t3, 8($s4) -/* 07D854 7F048CE4 26450080 */ addiu $a1, $s2, 0x80 -/* 07D858 7F048CE8 C7AC0304 */ lwc1 $f12, 0x304($sp) -/* 07D85C 7F048CEC 8D6E0008 */ lw $t6, 8($t3) -/* 07D860 7F048CF0 8DCC0008 */ lw $t4, 8($t6) -/* 07D864 7F048CF4 8D900004 */ lw $s0, 4($t4) -/* 07D868 7F048CF8 0FC162EA */ jal matrix_4x4_set_rotation_around_z -/* 07D86C 7F048CFC AFA5006C */ sw $a1, 0x6c($sp) -/* 07D870 7F048D00 02002025 */ move $a0, $s0 -/* 07D874 7F048D04 0FC163AE */ jal matrix_4x4_set_position -/* 07D878 7F048D08 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D87C 7F048D0C 8FA40070 */ lw $a0, 0x70($sp) -/* 07D880 7F048D10 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D884 7F048D14 8FA5006C */ lw $a1, 0x6c($sp) -/* 07D888 7F048D18 8E8A0008 */ lw $t2, 8($s4) -/* 07D88C 7F048D1C 02802025 */ move $a0, $s4 -/* 07D890 7F048D20 8D430008 */ lw $v1, 8($t2) -/* 07D894 7F048D24 8C65000C */ lw $a1, 0xc($v1) -/* 07D898 7F048D28 50A00016 */ beql $a1, $zero, .Ljp7F048D84 -/* 07D89C 7F048D2C 8C650010 */ lw $a1, 0x10($v1) -/* 07D8A0 7F048D30 0FC1B314 */ jal modelFindNodeMtx -/* 07D8A4 7F048D34 00003025 */ move $a2, $zero -/* 07D8A8 7F048D38 AFA20300 */ sw $v0, 0x300($sp) -/* 07D8AC 7F048D3C 8E8F0008 */ lw $t7, 8($s4) -/* 07D8B0 7F048D40 8FA8031C */ lw $t0, 0x31c($sp) -/* 07D8B4 7F048D44 00402825 */ move $a1, $v0 -/* 07D8B8 7F048D48 8DED0008 */ lw $t5, 8($t7) -/* 07D8BC 7F048D4C C50C00B4 */ lwc1 $f12, 0xb4($t0) -/* 07D8C0 7F048D50 8DB9000C */ lw $t9, 0xc($t5) -/* 07D8C4 7F048D54 0FC162A4 */ jal matrix_4x4_set_rotation_around_x -/* 07D8C8 7F048D58 8F300004 */ lw $s0, 4($t9) -/* 07D8CC 7F048D5C 8FB20300 */ lw $s2, 0x300($sp) -/* 07D8D0 7F048D60 02002025 */ move $a0, $s0 -/* 07D8D4 7F048D64 0FC163AE */ jal matrix_4x4_set_position -/* 07D8D8 7F048D68 02402825 */ move $a1, $s2 -/* 07D8DC 7F048D6C 8FA4006C */ lw $a0, 0x6c($sp) -/* 07D8E0 7F048D70 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D8E4 7F048D74 02402825 */ move $a1, $s2 -/* 07D8E8 7F048D78 8E980008 */ lw $t8, 8($s4) -/* 07D8EC 7F048D7C 8F030008 */ lw $v1, 8($t8) -/* 07D8F0 7F048D80 8C650010 */ lw $a1, 0x10($v1) -.Ljp7F048D84: -/* 07D8F4 7F048D84 02802025 */ move $a0, $s4 -/* 07D8F8 7F048D88 50A00010 */ beql $a1, $zero, .Ljp7F048DCC -/* 07D8FC 7F048D8C 8C650018 */ lw $a1, 0x18($v1) -/* 07D900 7F048D90 0FC1B314 */ jal modelFindNodeMtx -/* 07D904 7F048D94 00003025 */ move $a2, $zero -/* 07D908 7F048D98 8E890008 */ lw $t1, 8($s4) -/* 07D90C 7F048D9C 00409025 */ move $s2, $v0 -/* 07D910 7F048DA0 00402825 */ move $a1, $v0 -/* 07D914 7F048DA4 8D2B0008 */ lw $t3, 8($t1) -/* 07D918 7F048DA8 8D6E0010 */ lw $t6, 0x10($t3) -/* 07D91C 7F048DAC 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 07D920 7F048DB0 8DC40004 */ lw $a0, 4($t6) -/* 07D924 7F048DB4 8FA4006C */ lw $a0, 0x6c($sp) -/* 07D928 7F048DB8 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D92C 7F048DBC 02402825 */ move $a1, $s2 -/* 07D930 7F048DC0 8E8C0008 */ lw $t4, 8($s4) -/* 07D934 7F048DC4 8D830008 */ lw $v1, 8($t4) -/* 07D938 7F048DC8 8C650018 */ lw $a1, 0x18($v1) -.Ljp7F048DCC: -/* 07D93C 7F048DCC 02802025 */ move $a0, $s4 -/* 07D940 7F048DD0 50A001FE */ beql $a1, $zero, .Ljp7F0495CC -/* 07D944 7F048DD4 8E8C0008 */ lw $t4, 8($s4) -/* 07D948 7F048DD8 0FC1B314 */ jal modelFindNodeMtx -/* 07D94C 7F048DDC 00003025 */ move $a2, $zero -/* 07D950 7F048DE0 8E8A0008 */ lw $t2, 8($s4) -/* 07D954 7F048DE4 8FB9031C */ lw $t9, 0x31c($sp) -/* 07D958 7F048DE8 00409025 */ move $s2, $v0 -/* 07D95C 7F048DEC 8D4F0008 */ lw $t7, 8($t2) -/* 07D960 7F048DF0 00402825 */ move $a1, $v0 -/* 07D964 7F048DF4 C72C00B4 */ lwc1 $f12, 0xb4($t9) -/* 07D968 7F048DF8 8DED0018 */ lw $t5, 0x18($t7) -/* 07D96C 7F048DFC 0FC162A4 */ jal matrix_4x4_set_rotation_around_x -/* 07D970 7F048E00 8DB00004 */ lw $s0, 4($t5) -/* 07D974 7F048E04 02002025 */ move $a0, $s0 -/* 07D978 7F048E08 0FC163AE */ jal matrix_4x4_set_position -/* 07D97C 7F048E0C 02402825 */ move $a1, $s2 -/* 07D980 7F048E10 8FA4006C */ lw $a0, 0x6c($sp) -/* 07D984 7F048E14 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07D988 7F048E18 02402825 */ move $a1, $s2 -/* 07D98C 7F048E1C 100001EB */ b .Ljp7F0495CC -/* 07D990 7F048E20 8E8C0008 */ lw $t4, 8($s4) -/* 07D994 7F048E24 24010008 */ li $at, 8 -.Ljp7F048E28: -/* 07D998 7F048E28 54410017 */ bnel $v0, $at, .Ljp7F048E88 -/* 07D99C 7F048E2C 2401000C */ li $at, 12 -/* 07D9A0 7F048E30 8E880008 */ lw $t0, 8($s4) -/* 07D9A4 7F048E34 24020001 */ li $v0, 1 -/* 07D9A8 7F048E38 26440040 */ addiu $a0, $s2, 0x40 -/* 07D9AC 7F048E3C 8518000E */ lh $t8, 0xe($t0) -/* 07D9B0 7F048E40 2B010002 */ slti $at, $t8, 2 -/* 07D9B4 7F048E44 542001E1 */ bnezl $at, .Ljp7F0495CC -/* 07D9B8 7F048E48 8E8C0008 */ lw $t4, 8($s4) -/* 07D9BC 7F048E4C AFA202FC */ sw $v0, 0x2fc($sp) -.Ljp7F048E50: -/* 07D9C0 7F048E50 0FC1613C */ jal matrix_4x4_set_identity -/* 07D9C4 7F048E54 AFA40078 */ sw $a0, 0x78($sp) -/* 07D9C8 7F048E58 8E890008 */ lw $t1, 8($s4) -/* 07D9CC 7F048E5C 8FA202FC */ lw $v0, 0x2fc($sp) -/* 07D9D0 7F048E60 8FA40078 */ lw $a0, 0x78($sp) -/* 07D9D4 7F048E64 852B000E */ lh $t3, 0xe($t1) -/* 07D9D8 7F048E68 24420001 */ addiu $v0, $v0, 1 -/* 07D9DC 7F048E6C 24840040 */ addiu $a0, $a0, 0x40 -/* 07D9E0 7F048E70 004B082A */ slt $at, $v0, $t3 -/* 07D9E4 7F048E74 5420FFF6 */ bnezl $at, .Ljp7F048E50 -/* 07D9E8 7F048E78 AFA202FC */ sw $v0, 0x2fc($sp) -/* 07D9EC 7F048E7C 100001D3 */ b .Ljp7F0495CC -/* 07D9F0 7F048E80 8E8C0008 */ lw $t4, 8($s4) -/* 07D9F4 7F048E84 2401000C */ li $at, 12 -.Ljp7F048E88: -/* 07D9F8 7F048E88 5441002C */ bnel $v0, $at, .Ljp7F048F3C -/* 07D9FC 7F048E8C 24010027 */ li $at, 39 -/* 07DA00 7F048E90 8E8E0008 */ lw $t6, 8($s4) -/* 07DA04 7F048E94 26450040 */ addiu $a1, $s2, 0x40 -/* 07DA08 7F048E98 8DCC0008 */ lw $t4, 8($t6) -/* 07DA0C 7F048E9C 8D8A0000 */ lw $t2, ($t4) -/* 07DA10 7F048EA0 8D440004 */ lw $a0, 4($t2) -/* 07DA14 7F048EA4 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 07DA18 7F048EA8 AFA50070 */ sw $a1, 0x70($sp) -/* 07DA1C 7F048EAC 02402025 */ move $a0, $s2 -/* 07DA20 7F048EB0 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DA24 7F048EB4 8FA50070 */ lw $a1, 0x70($sp) -/* 07DA28 7F048EB8 8E8F0008 */ lw $t7, 8($s4) -/* 07DA2C 7F048EBC 26450080 */ addiu $a1, $s2, 0x80 -/* 07DA30 7F048EC0 8DED0008 */ lw $t5, 8($t7) -/* 07DA34 7F048EC4 8DB90004 */ lw $t9, 4($t5) -/* 07DA38 7F048EC8 8F240004 */ lw $a0, 4($t9) -/* 07DA3C 7F048ECC 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 07DA40 7F048ED0 AFA5006C */ sw $a1, 0x6c($sp) -/* 07DA44 7F048ED4 02402025 */ move $a0, $s2 -/* 07DA48 7F048ED8 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DA4C 7F048EDC 8FA5006C */ lw $a1, 0x6c($sp) -/* 07DA50 7F048EE0 8E880008 */ lw $t0, 8($s4) -/* 07DA54 7F048EE4 264500C0 */ addiu $a1, $s2, 0xc0 -/* 07DA58 7F048EE8 8D180008 */ lw $t8, 8($t0) -/* 07DA5C 7F048EEC 8F090008 */ lw $t1, 8($t8) -/* 07DA60 7F048EF0 8D240004 */ lw $a0, 4($t1) -/* 07DA64 7F048EF4 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 07DA68 7F048EF8 AFA50078 */ sw $a1, 0x78($sp) -/* 07DA6C 7F048EFC 02402025 */ move $a0, $s2 -/* 07DA70 7F048F00 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DA74 7F048F04 8FA50078 */ lw $a1, 0x78($sp) -/* 07DA78 7F048F08 8E8B0008 */ lw $t3, 8($s4) -/* 07DA7C 7F048F0C 26500100 */ addiu $s0, $s2, 0x100 -/* 07DA80 7F048F10 02002825 */ move $a1, $s0 -/* 07DA84 7F048F14 8D6E0008 */ lw $t6, 8($t3) -/* 07DA88 7F048F18 8DCC000C */ lw $t4, 0xc($t6) -/* 07DA8C 7F048F1C 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 07DA90 7F048F20 8D840004 */ lw $a0, 4($t4) -/* 07DA94 7F048F24 02402025 */ move $a0, $s2 -/* 07DA98 7F048F28 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DA9C 7F048F2C 02002825 */ move $a1, $s0 -/* 07DAA0 7F048F30 100001A6 */ b .Ljp7F0495CC -/* 07DAA4 7F048F34 8E8C0008 */ lw $t4, 8($s4) -/* 07DAA8 7F048F38 24010027 */ li $at, 39 -.Ljp7F048F3C: -/* 07DAAC 7F048F3C 544100B9 */ bnel $v0, $at, .Ljp7F049224 -/* 07DAB0 7F048F40 24010028 */ li $at, 40 -/* 07DAB4 7F048F44 8E8A0008 */ lw $t2, 8($s4) -/* 07DAB8 7F048F48 8FAC0680 */ lw $t4, 0x680($sp) -/* 07DABC 7F048F4C 4600B006 */ mov.s $f0, $f22 -/* 07DAC0 7F048F50 8D430008 */ lw $v1, 8($t2) -/* 07DAC4 7F048F54 8C6F0004 */ lw $t7, 4($v1) -/* 07DAC8 7F048F58 8DED0004 */ lw $t5, 4($t7) -/* 07DACC 7F048F5C AFAD0264 */ sw $t5, 0x264($sp) -/* 07DAD0 7F048F60 8C790008 */ lw $t9, 8($v1) -/* 07DAD4 7F048F64 8F280004 */ lw $t0, 4($t9) -/* 07DAD8 7F048F68 AFA80260 */ sw $t0, 0x260($sp) -/* 07DADC 7F048F6C 8C690010 */ lw $t1, 0x10($v1) -/* 07DAE0 7F048F70 8C78000C */ lw $t8, 0xc($v1) -/* 07DAE4 7F048F74 8D2B0004 */ lw $t3, 4($t1) -/* 07DAE8 7F048F78 8F100004 */ lw $s0, 4($t8) -/* 07DAEC 7F048F7C AFAB0258 */ sw $t3, 0x258($sp) -/* 07DAF0 7F048F80 8C6E0018 */ lw $t6, 0x18($v1) -/* 07DAF4 7F048F84 C6840014 */ lwc1 $f4, 0x14($s4) -/* 07DAF8 7F048F88 8DC20004 */ lw $v0, 4($t6) -/* 07DAFC 7F048F8C C4460010 */ lwc1 $f6, 0x10($v0) -/* 07DB00 7F048F90 C44A000C */ lwc1 $f10, 0xc($v0) -/* 07DB04 7F048F94 460A3201 */ sub.s $f8, $f6, $f10 -/* 07DB08 7F048F98 46044082 */ mul.s $f2, $f8, $f4 -/* 07DB0C 7F048F9C 11800026 */ beqz $t4, .Ljp7F049038 -/* 07DB10 7F048FA0 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 -/* 07DB14 7F048FA4 C42A83B4 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07DB18 7F048FA8 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07DB1C 7F048FAC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07DB20 7F048FB0 460A3202 */ mul.s $f8, $f6, $f10 -/* 07DB24 7F048FB4 44815000 */ mtc1 $at, $f10 -/* 07DB28 7F048FB8 46144102 */ mul.s $f4, $f8, $f20 -/* 07DB2C 7F048FBC 00000000 */ nop -/* 07DB30 7F048FC0 46141182 */ mul.s $f6, $f2, $f20 -/* 07DB34 7F048FC4 00000000 */ nop -/* 07DB38 7F048FC8 460A3202 */ mul.s $f8, $f6, $f10 -/* 07DB3C 7F048FCC C626008C */ lwc1 $f6, 0x8c($s1) -/* 07DB40 7F048FD0 46082003 */ div.s $f0, $f4, $f8 -/* 07DB44 7F048FD4 46003280 */ add.s $f10, $f6, $f0 -/* 07DB48 7F048FD8 E62A008C */ swc1 $f10, 0x8c($s1) -/* 07DB4C 7F048FDC C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07DB50 7F048FE0 460CA03E */ c.le.s $f20, $f12 -/* 07DB54 7F048FE4 00000000 */ nop -/* 07DB58 7F048FE8 45000008 */ bc1f .Ljp7F04900C -/* 07DB5C 7F048FEC 00000000 */ nop -/* 07DB60 7F048FF0 46146101 */ sub.s $f4, $f12, $f20 -.Ljp7F048FF4: -/* 07DB64 7F048FF4 E624008C */ swc1 $f4, 0x8c($s1) -/* 07DB68 7F048FF8 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07DB6C 7F048FFC 460CA03E */ c.le.s $f20, $f12 -/* 07DB70 7F049000 00000000 */ nop -/* 07DB74 7F049004 4503FFFB */ bc1tl .Ljp7F048FF4 -/* 07DB78 7F049008 46146101 */ sub.s $f4, $f12, $f20 -.Ljp7F04900C: -/* 07DB7C 7F04900C 4616603C */ c.lt.s $f12, $f22 -/* 07DB80 7F049010 00000000 */ nop -/* 07DB84 7F049014 45020009 */ bc1fl .Ljp7F04903C -/* 07DB88 7F049018 C626008C */ lwc1 $f6, 0x8c($s1) -/* 07DB8C 7F04901C 46146200 */ add.s $f8, $f12, $f20 -.Ljp7F049020: -/* 07DB90 7F049020 E628008C */ swc1 $f8, 0x8c($s1) -/* 07DB94 7F049024 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07DB98 7F049028 4616603C */ c.lt.s $f12, $f22 -/* 07DB9C 7F04902C 00000000 */ nop -/* 07DBA0 7F049030 4503FFFB */ bc1tl .Ljp7F049020 -/* 07DBA4 7F049034 46146200 */ add.s $f8, $f12, $f20 -.Ljp7F049038: -/* 07DBA8 7F049038 C626008C */ lwc1 $f6, 0x8c($s1) -.Ljp7F04903C: -/* 07DBAC 7F04903C 46003280 */ add.s $f10, $f6, $f0 -/* 07DBB0 7F049040 E62A008C */ swc1 $f10, 0x8c($s1) -/* 07DBB4 7F049044 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07DBB8 7F049048 460CA03E */ c.le.s $f20, $f12 -/* 07DBBC 7F04904C 00000000 */ nop -/* 07DBC0 7F049050 45020009 */ bc1fl .Ljp7F049078 -/* 07DBC4 7F049054 4616603C */ c.lt.s $f12, $f22 -/* 07DBC8 7F049058 46146101 */ sub.s $f4, $f12, $f20 -.Ljp7F04905C: -/* 07DBCC 7F04905C E624008C */ swc1 $f4, 0x8c($s1) -/* 07DBD0 7F049060 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07DBD4 7F049064 460CA03E */ c.le.s $f20, $f12 -/* 07DBD8 7F049068 00000000 */ nop -/* 07DBDC 7F04906C 4503FFFB */ bc1tl .Ljp7F04905C -/* 07DBE0 7F049070 46146101 */ sub.s $f4, $f12, $f20 -/* 07DBE4 7F049074 4616603C */ c.lt.s $f12, $f22 -.Ljp7F049078: -/* 07DBE8 7F049078 00000000 */ nop -/* 07DBEC 7F04907C 45000008 */ bc1f .Ljp7F0490A0 -/* 07DBF0 7F049080 00000000 */ nop -/* 07DBF4 7F049084 46146200 */ add.s $f8, $f12, $f20 -.Ljp7F049088: -/* 07DBF8 7F049088 E628008C */ swc1 $f8, 0x8c($s1) -/* 07DBFC 7F04908C C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07DC00 7F049090 4616603C */ c.lt.s $f12, $f22 -/* 07DC04 7F049094 00000000 */ nop -/* 07DC08 7F049098 4503FFFB */ bc1tl .Ljp7F049088 -/* 07DC0C 7F04909C 46146200 */ add.s $f8, $f12, $f20 -.Ljp7F0490A0: -/* 07DC10 7F0490A0 0FC162A4 */ jal matrix_4x4_set_rotation_around_x -/* 07DC14 7F0490A4 27A502B0 */ addiu $a1, $sp, 0x2b0 -/* 07DC18 7F0490A8 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07DC1C 7F0490AC 4606B03C */ c.lt.s $f22, $f6 -/* 07DC20 7F0490B0 00000000 */ nop -/* 07DC24 7F0490B4 4502002B */ bc1fl .Ljp7F049164 -/* 07DC28 7F0490B8 C62C0090 */ lwc1 $f12, 0x90($s1) -/* 07DC2C 7F0490BC 8FAA0264 */ lw $t2, 0x264($sp) -/* 07DC30 7F0490C0 C60A0008 */ lwc1 $f10, 8($s0) -/* 07DC34 7F0490C4 C62C009C */ lwc1 $f12, 0x9c($s1) -/* 07DC38 7F0490C8 C5440008 */ lwc1 $f4, 8($t2) -/* 07DC3C 7F0490CC C6860014 */ lwc1 $f6, 0x14($s4) -/* 07DC40 7F0490D0 4616603C */ c.lt.s $f12, $f22 -/* 07DC44 7F0490D4 46045201 */ sub.s $f8, $f10, $f4 -/* 07DC48 7F0490D8 46064082 */ mul.s $f2, $f8, $f6 -/* 07DC4C 7F0490DC 45020003 */ bc1fl .Ljp7F0490EC -/* 07DC50 7F0490E0 E7A20254 */ swc1 $f2, 0x254($sp) -/* 07DC54 7F0490E4 46006307 */ neg.s $f12, $f12 -/* 07DC58 7F0490E8 E7A20254 */ swc1 $f2, 0x254($sp) -.Ljp7F0490EC: -/* 07DC5C 7F0490EC 0FC160F3 */ jal sinf -/* 07DC60 7F0490F0 E7AC0250 */ swc1 $f12, 0x250($sp) -/* 07DC64 7F0490F4 C7A20254 */ lwc1 $f2, 0x254($sp) -/* 07DC68 7F0490F8 C7AC0250 */ lwc1 $f12, 0x250($sp) -/* 07DC6C 7F0490FC 46020282 */ mul.s $f10, $f0, $f2 -/* 07DC70 7F049100 0FC160F0 */ jal cosf -/* 07DC74 7F049104 E7AA024C */ swc1 $f10, 0x24c($sp) -/* 07DC78 7F049108 C7A20254 */ lwc1 $f2, 0x254($sp) -/* 07DC7C 7F04910C C6280088 */ lwc1 $f8, 0x88($s1) -/* 07DC80 7F049110 C7AC024C */ lwc1 $f12, 0x24c($sp) -/* 07DC84 7F049114 46020102 */ mul.s $f4, $f0, $f2 -/* 07DC88 7F049118 46081181 */ sub.s $f6, $f2, $f8 -/* 07DC8C 7F04911C 0FC16BD4 */ jal atan2f -/* 07DC90 7F049120 46062381 */ sub.s $f14, $f4, $f6 -/* 07DC94 7F049124 C7A20250 */ lwc1 $f2, 0x250($sp) -/* 07DC98 7F049128 E6200090 */ swc1 $f0, 0x90($s1) -/* 07DC9C 7F04912C 4602003C */ c.lt.s $f0, $f2 -/* 07DCA0 7F049130 00000000 */ nop -/* 07DCA4 7F049134 45020003 */ bc1fl .Ljp7F049144 -/* 07DCA8 7F049138 C62A009C */ lwc1 $f10, 0x9c($s1) -/* 07DCAC 7F04913C E6220090 */ swc1 $f2, 0x90($s1) -/* 07DCB0 7F049140 C62A009C */ lwc1 $f10, 0x9c($s1) -.Ljp7F049144: -/* 07DCB4 7F049144 460AB03C */ c.lt.s $f22, $f10 -/* 07DCB8 7F049148 00000000 */ nop -/* 07DCBC 7F04914C 45020005 */ bc1fl .Ljp7F049164 -/* 07DCC0 7F049150 C62C0090 */ lwc1 $f12, 0x90($s1) -/* 07DCC4 7F049154 C6280090 */ lwc1 $f8, 0x90($s1) -/* 07DCC8 7F049158 4608A101 */ sub.s $f4, $f20, $f8 -/* 07DCCC 7F04915C E6240090 */ swc1 $f4, 0x90($s1) -/* 07DCD0 7F049160 C62C0090 */ lwc1 $f12, 0x90($s1) -.Ljp7F049164: -/* 07DCD4 7F049164 0FC162C7 */ jal matrix_4x4_set_rotation_around_y -/* 07DCD8 7F049168 27A50270 */ addiu $a1, $sp, 0x270 -/* 07DCDC 7F04916C 264500C0 */ addiu $a1, $s2, 0xc0 -/* 07DCE0 7F049170 AFA50078 */ sw $a1, 0x78($sp) -/* 07DCE4 7F049174 0FC16150 */ jal matrix_4x4_copy -/* 07DCE8 7F049178 27A402B0 */ addiu $a0, $sp, 0x2b0 -/* 07DCEC 7F04917C 02002025 */ move $a0, $s0 -/* 07DCF0 7F049180 0FC163AE */ jal matrix_4x4_set_position -/* 07DCF4 7F049184 8FA50078 */ lw $a1, 0x78($sp) -/* 07DCF8 7F049188 02402025 */ move $a0, $s2 -/* 07DCFC 7F04918C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DD00 7F049190 8FA50078 */ lw $a1, 0x78($sp) -/* 07DD04 7F049194 26500100 */ addiu $s0, $s2, 0x100 -/* 07DD08 7F049198 02002825 */ move $a1, $s0 -/* 07DD0C 7F04919C 0FC16150 */ jal matrix_4x4_copy -/* 07DD10 7F0491A0 27A402B0 */ addiu $a0, $sp, 0x2b0 -/* 07DD14 7F0491A4 8FA40258 */ lw $a0, 0x258($sp) -/* 07DD18 7F0491A8 0FC163AE */ jal matrix_4x4_set_position -/* 07DD1C 7F0491AC 02002825 */ move $a1, $s0 -/* 07DD20 7F0491B0 02402025 */ move $a0, $s2 -/* 07DD24 7F0491B4 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DD28 7F0491B8 02002825 */ move $a1, $s0 -/* 07DD2C 7F0491BC 27A40270 */ addiu $a0, $sp, 0x270 -/* 07DD30 7F0491C0 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DD34 7F0491C4 27A502B0 */ addiu $a1, $sp, 0x2b0 -/* 07DD38 7F0491C8 26450040 */ addiu $a1, $s2, 0x40 -/* 07DD3C 7F0491CC AFA50070 */ sw $a1, 0x70($sp) -/* 07DD40 7F0491D0 0FC16150 */ jal matrix_4x4_copy -/* 07DD44 7F0491D4 27A402B0 */ addiu $a0, $sp, 0x2b0 -/* 07DD48 7F0491D8 8FA40264 */ lw $a0, 0x264($sp) -/* 07DD4C 7F0491DC 0FC163AE */ jal matrix_4x4_set_position -/* 07DD50 7F0491E0 8FA50070 */ lw $a1, 0x70($sp) -/* 07DD54 7F0491E4 02402025 */ move $a0, $s2 -/* 07DD58 7F0491E8 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DD5C 7F0491EC 8FA50070 */ lw $a1, 0x70($sp) -/* 07DD60 7F0491F0 26450080 */ addiu $a1, $s2, 0x80 -/* 07DD64 7F0491F4 AFA5006C */ sw $a1, 0x6c($sp) -/* 07DD68 7F0491F8 0FC16150 */ jal matrix_4x4_copy -/* 07DD6C 7F0491FC 27A402B0 */ addiu $a0, $sp, 0x2b0 -/* 07DD70 7F049200 8FA40260 */ lw $a0, 0x260($sp) -/* 07DD74 7F049204 0FC163AE */ jal matrix_4x4_set_position -/* 07DD78 7F049208 8FA5006C */ lw $a1, 0x6c($sp) -/* 07DD7C 7F04920C 02402025 */ move $a0, $s2 -/* 07DD80 7F049210 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DD84 7F049214 8FA5006C */ lw $a1, 0x6c($sp) -/* 07DD88 7F049218 100000EC */ b .Ljp7F0495CC -/* 07DD8C 7F04921C 8E8C0008 */ lw $t4, 8($s4) -/* 07DD90 7F049220 24010028 */ li $at, 40 -.Ljp7F049224: -/* 07DD94 7F049224 14410086 */ bne $v0, $at, .Ljp7F049440 -/* 07DD98 7F049228 00000000 */ nop -/* 07DD9C 7F04922C 8E8F0008 */ lw $t7, 8($s4) -/* 07DDA0 7F049230 3C188005 */ lui $t8, %hi(g_ClockTimer) # $t8, 0x8005 -/* 07DDA4 7F049234 8F1883A4 */ lw $t8, %lo(g_ClockTimer)($t8) -/* 07DDA8 7F049238 8DED0008 */ lw $t5, 8($t7) -/* 07DDAC 7F04923C 8FA90680 */ lw $t1, 0x680($sp) -/* 07DDB0 7F049240 27B001B4 */ addiu $s0, $sp, 0x1b4 -/* 07DDB4 7F049244 8DB90008 */ lw $t9, 8($t5) -/* 07DDB8 7F049248 3C0C8003 */ lui $t4, %hi(D_80030B34) # $t4, 0x8003 -/* 07DDBC 7F04924C 02402025 */ move $a0, $s2 -/* 07DDC0 7F049250 8F280004 */ lw $t0, 4($t9) -/* 07DDC4 7F049254 26450040 */ addiu $a1, $s2, 0x40 -/* 07DDC8 7F049258 1B00001E */ blez $t8, .Ljp7F0492D4 -/* 07DDCC 7F04925C AFA80200 */ sw $t0, 0x200($sp) -/* 07DDD0 7F049260 5120001D */ beql $t1, $zero, .Ljp7F0492D8 -/* 07DDD4 7F049264 8E2B0014 */ lw $t3, 0x14($s1) -/* 07DDD8 7F049268 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07DDDC 7F04926C C62A008C */ lwc1 $f10, 0x8c($s1) -/* 07DDE0 7F049270 460A3200 */ add.s $f8, $f6, $f10 -/* 07DDE4 7F049274 E6280088 */ swc1 $f8, 0x88($s1) -/* 07DDE8 7F049278 C6200088 */ lwc1 $f0, 0x88($s1) -/* 07DDEC 7F04927C 4600A03E */ c.le.s $f20, $f0 -/* 07DDF0 7F049280 00000000 */ nop -/* 07DDF4 7F049284 45020009 */ bc1fl .Ljp7F0492AC -/* 07DDF8 7F049288 4616003C */ c.lt.s $f0, $f22 -/* 07DDFC 7F04928C 46140101 */ sub.s $f4, $f0, $f20 -.Ljp7F049290: -/* 07DE00 7F049290 E6240088 */ swc1 $f4, 0x88($s1) -/* 07DE04 7F049294 C6200088 */ lwc1 $f0, 0x88($s1) -/* 07DE08 7F049298 4600A03E */ c.le.s $f20, $f0 -/* 07DE0C 7F04929C 00000000 */ nop -/* 07DE10 7F0492A0 4503FFFB */ bc1tl .Ljp7F049290 -/* 07DE14 7F0492A4 46140101 */ sub.s $f4, $f0, $f20 -/* 07DE18 7F0492A8 4616003C */ c.lt.s $f0, $f22 -.Ljp7F0492AC: -/* 07DE1C 7F0492AC 00000000 */ nop -/* 07DE20 7F0492B0 45020009 */ bc1fl .Ljp7F0492D8 -/* 07DE24 7F0492B4 8E2B0014 */ lw $t3, 0x14($s1) -/* 07DE28 7F0492B8 46140180 */ add.s $f6, $f0, $f20 -.Ljp7F0492BC: -/* 07DE2C 7F0492BC E6260088 */ swc1 $f6, 0x88($s1) -/* 07DE30 7F0492C0 C6200088 */ lwc1 $f0, 0x88($s1) -/* 07DE34 7F0492C4 4616003C */ c.lt.s $f0, $f22 -/* 07DE38 7F0492C8 00000000 */ nop -/* 07DE3C 7F0492CC 4503FFFB */ bc1tl .Ljp7F0492BC -/* 07DE40 7F0492D0 46140180 */ add.s $f6, $f0, $f20 -.Ljp7F0492D4: -/* 07DE44 7F0492D4 8E2B0014 */ lw $t3, 0x14($s1) -.Ljp7F0492D8: -/* 07DE48 7F0492D8 258C0B74 */ addiu $t4, %lo(D_80030B34) # addiu $t4, $t4, 0xb74 -/* 07DE4C 7F0492DC 258F003C */ addiu $t7, $t4, 0x3c -/* 07DE50 7F0492E0 8D6E0020 */ lw $t6, 0x20($t3) -/* 07DE54 7F0492E4 02006825 */ move $t5, $s0 -/* 07DE58 7F0492E8 11C00015 */ beqz $t6, .Ljp7F049340 -/* 07DE5C 7F0492EC 00000000 */ nop -.Ljp7F0492F0: -/* 07DE60 7F0492F0 8D810000 */ lw $at, ($t4) -/* 07DE64 7F0492F4 258C000C */ addiu $t4, $t4, 0xc -/* 07DE68 7F0492F8 25AD000C */ addiu $t5, $t5, 0xc -/* 07DE6C 7F0492FC ADA1FFF4 */ sw $at, -0xc($t5) -/* 07DE70 7F049300 8D81FFF8 */ lw $at, -8($t4) -/* 07DE74 7F049304 ADA1FFF8 */ sw $at, -8($t5) -/* 07DE78 7F049308 8D81FFFC */ lw $at, -4($t4) -/* 07DE7C 7F04930C 158FFFF8 */ bne $t4, $t7, .Ljp7F0492F0 -/* 07DE80 7F049310 ADA1FFFC */ sw $at, -4($t5) -/* 07DE84 7F049314 8D810000 */ lw $at, ($t4) -/* 07DE88 7F049318 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 07DE8C 7F04931C ADA10000 */ sw $at, ($t5) -/* 07DE90 7F049320 AFA201B4 */ sw $v0, 0x1b4($sp) -/* 07DE94 7F049324 AFB201C4 */ sw $s2, 0x1c4($sp) -/* 07DE98 7F049328 8E250014 */ lw $a1, 0x14($s1) -/* 07DE9C 7F04932C 0FC1BE3A */ jal subcalcmatrices -/* 07DEA0 7F049330 02002025 */ move $a0, $s0 -/* 07DEA4 7F049334 26590040 */ addiu $t9, $s2, 0x40 -/* 07DEA8 7F049338 10000003 */ b .Ljp7F049348 -/* 07DEAC 7F04933C AFB90070 */ sw $t9, 0x70($sp) -.Ljp7F049340: -/* 07DEB0 7F049340 0FC16150 */ jal matrix_4x4_copy -/* 07DEB4 7F049344 AFA50070 */ sw $a1, 0x70($sp) -.Ljp7F049348: -/* 07DEB8 7F049348 8E280008 */ lw $t0, 8($s1) -/* 07DEBC 7F04934C 27A50204 */ addiu $a1, $sp, 0x204 -/* 07DEC0 7F049350 0008C080 */ sll $t8, $t0, 2 -/* 07DEC4 7F049354 07010006 */ bgez $t8, .Ljp7F049370 -/* 07DEC8 7F049358 00000000 */ nop -/* 07DECC 7F04935C C62C0088 */ lwc1 $f12, 0x88($s1) -/* 07DED0 7F049360 0FC162EA */ jal matrix_4x4_set_rotation_around_z -/* 07DED4 7F049364 27A50204 */ addiu $a1, $sp, 0x204 -/* 07DED8 7F049368 10000004 */ b .Ljp7F04937C -/* 07DEDC 7F04936C 26450080 */ addiu $a1, $s2, 0x80 -.Ljp7F049370: -/* 07DEE0 7F049370 0FC162C7 */ jal matrix_4x4_set_rotation_around_y -/* 07DEE4 7F049374 C62C0088 */ lwc1 $f12, 0x88($s1) -/* 07DEE8 7F049378 26450080 */ addiu $a1, $s2, 0x80 -.Ljp7F04937C: -/* 07DEEC 7F04937C AFA5006C */ sw $a1, 0x6c($sp) -/* 07DEF0 7F049380 0FC16150 */ jal matrix_4x4_copy -/* 07DEF4 7F049384 27A40204 */ addiu $a0, $sp, 0x204 -/* 07DEF8 7F049388 8FA40200 */ lw $a0, 0x200($sp) -/* 07DEFC 7F04938C 0FC163AE */ jal matrix_4x4_set_position -/* 07DF00 7F049390 8FA5006C */ lw $a1, 0x6c($sp) -/* 07DF04 7F049394 8FA40070 */ lw $a0, 0x70($sp) -/* 07DF08 7F049398 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DF0C 7F04939C 8FA5006C */ lw $a1, 0x6c($sp) -/* 07DF10 7F0493A0 8E890008 */ lw $t1, 8($s4) -/* 07DF14 7F0493A4 02802025 */ move $a0, $s4 -/* 07DF18 7F0493A8 00003025 */ move $a2, $zero -/* 07DF1C 7F0493AC 8D230008 */ lw $v1, 8($t1) -/* 07DF20 7F0493B0 8C65000C */ lw $a1, 0xc($v1) -/* 07DF24 7F0493B4 50A00013 */ beql $a1, $zero, .Ljp7F049404 -/* 07DF28 7F0493B8 8C650010 */ lw $a1, 0x10($v1) -/* 07DF2C 7F0493BC 0FC1B314 */ jal modelFindNodeMtx -/* 07DF30 7F0493C0 8CB20004 */ lw $s2, 4($a1) -/* 07DF34 7F0493C4 00408025 */ move $s0, $v0 -/* 07DF38 7F0493C8 C62C0088 */ lwc1 $f12, 0x88($s1) -/* 07DF3C 7F0493CC 0FC162A4 */ jal matrix_4x4_set_rotation_around_x -/* 07DF40 7F0493D0 27A50204 */ addiu $a1, $sp, 0x204 -/* 07DF44 7F0493D4 27A40204 */ addiu $a0, $sp, 0x204 -/* 07DF48 7F0493D8 0FC16150 */ jal matrix_4x4_copy -/* 07DF4C 7F0493DC 02002825 */ move $a1, $s0 -/* 07DF50 7F0493E0 02402025 */ move $a0, $s2 -/* 07DF54 7F0493E4 0FC163AE */ jal matrix_4x4_set_position -/* 07DF58 7F0493E8 02002825 */ move $a1, $s0 -/* 07DF5C 7F0493EC 8FA40070 */ lw $a0, 0x70($sp) -/* 07DF60 7F0493F0 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DF64 7F0493F4 02002825 */ move $a1, $s0 -/* 07DF68 7F0493F8 8E8B0008 */ lw $t3, 8($s4) -/* 07DF6C 7F0493FC 8D630008 */ lw $v1, 8($t3) -/* 07DF70 7F049400 8C650010 */ lw $a1, 0x10($v1) -.Ljp7F049404: -/* 07DF74 7F049404 02802025 */ move $a0, $s4 -/* 07DF78 7F049408 00003025 */ move $a2, $zero -/* 07DF7C 7F04940C 50A0006F */ beql $a1, $zero, .Ljp7F0495CC -/* 07DF80 7F049410 8E8C0008 */ lw $t4, 8($s4) -/* 07DF84 7F049414 0FC1B314 */ jal modelFindNodeMtx -/* 07DF88 7F049418 8CB20004 */ lw $s2, 4($a1) -/* 07DF8C 7F04941C 00408025 */ move $s0, $v0 -/* 07DF90 7F049420 02402025 */ move $a0, $s2 -/* 07DF94 7F049424 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 07DF98 7F049428 00402825 */ move $a1, $v0 -/* 07DF9C 7F04942C 8FA40070 */ lw $a0, 0x70($sp) -/* 07DFA0 7F049430 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07DFA4 7F049434 02002825 */ move $a1, $s0 -/* 07DFA8 7F049438 10000064 */ b .Ljp7F0495CC -/* 07DFAC 7F04943C 8E8C0008 */ lw $t4, 8($s4) -.Ljp7F049440: -/* 07DFB0 7F049440 16020061 */ bne $s0, $v0, .Ljp7F0495C8 -/* 07DFB4 7F049444 26450040 */ addiu $a1, $s2, 0x40 -/* 07DFB8 7F049448 8E8E0008 */ lw $t6, 8($s4) -/* 07DFBC 7F04944C 8DC30008 */ lw $v1, 8($t6) -/* 07DFC0 7F049450 8C6F000C */ lw $t7, 0xc($v1) -/* 07DFC4 7F049454 8C6A0004 */ lw $t2, 4($v1) -/* 07DFC8 7F049458 8DEC0004 */ lw $t4, 4($t7) -/* 07DFCC 7F04945C 8D500004 */ lw $s0, 4($t2) -/* 07DFD0 7F049460 AFAC0168 */ sw $t4, 0x168($sp) -/* 07DFD4 7F049464 8C6D0010 */ lw $t5, 0x10($v1) -/* 07DFD8 7F049468 8DB90004 */ lw $t9, 4($t5) -/* 07DFDC 7F04946C AFB90164 */ sw $t9, 0x164($sp) -/* 07DFE0 7F049470 8C680008 */ lw $t0, 8($v1) -/* 07DFE4 7F049474 8D180004 */ lw $t8, 4($t0) -/* 07DFE8 7F049478 AFB80160 */ sw $t8, 0x160($sp) -/* 07DFEC 7F04947C 8C690018 */ lw $t1, 0x18($v1) -/* 07DFF0 7F049480 8D2B0004 */ lw $t3, 4($t1) -/* 07DFF4 7F049484 AFAB015C */ sw $t3, 0x15c($sp) -/* 07DFF8 7F049488 C62E00C8 */ lwc1 $f14, 0xc8($s1) -/* 07DFFC 7F04948C 46007387 */ neg.s $f14, $f14 -/* 07E000 7F049490 4616703C */ c.lt.s $f14, $f22 -/* 07E004 7F049494 00000000 */ nop -/* 07E008 7F049498 45020003 */ bc1fl .Ljp7F0494A8 -/* 07E00C 7F04949C C62C00CC */ lwc1 $f12, 0xcc($s1) -/* 07E010 7F0494A0 46147380 */ add.s $f14, $f14, $f20 -/* 07E014 7F0494A4 C62C00CC */ lwc1 $f12, 0xcc($s1) -.Ljp7F0494A8: -/* 07E018 7F0494A8 46006307 */ neg.s $f12, $f12 -/* 07E01C 7F0494AC 4616603C */ c.lt.s $f12, $f22 -/* 07E020 7F0494B0 00000000 */ nop -/* 07E024 7F0494B4 45020003 */ bc1fl .Ljp7F0494C4 -/* 07E028 7F0494B8 AFA50070 */ sw $a1, 0x70($sp) -/* 07E02C 7F0494BC 46146300 */ add.s $f12, $f12, $f20 -/* 07E030 7F0494C0 AFA50070 */ sw $a1, 0x70($sp) -.Ljp7F0494C4: -/* 07E034 7F0494C4 0FC162C7 */ jal matrix_4x4_set_rotation_around_y -/* 07E038 7F0494C8 E7AE0158 */ swc1 $f14, 0x158($sp) -/* 07E03C 7F0494CC 02002025 */ move $a0, $s0 -/* 07E040 7F0494D0 0FC163AE */ jal matrix_4x4_set_position -/* 07E044 7F0494D4 8FA50070 */ lw $a1, 0x70($sp) -/* 07E048 7F0494D8 02402025 */ move $a0, $s2 -/* 07E04C 7F0494DC 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07E050 7F0494E0 8FA50070 */ lw $a1, 0x70($sp) -/* 07E054 7F0494E4 264500C0 */ addiu $a1, $s2, 0xc0 -/* 07E058 7F0494E8 C7AC0158 */ lwc1 $f12, 0x158($sp) -/* 07E05C 7F0494EC 0FC162A4 */ jal matrix_4x4_set_rotation_around_x -/* 07E060 7F0494F0 AFA50078 */ sw $a1, 0x78($sp) -/* 07E064 7F0494F4 8FA40168 */ lw $a0, 0x168($sp) -/* 07E068 7F0494F8 0FC163AE */ jal matrix_4x4_set_position -/* 07E06C 7F0494FC 8FA50078 */ lw $a1, 0x78($sp) -/* 07E070 7F049500 8FA40070 */ lw $a0, 0x70($sp) -/* 07E074 7F049504 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07E078 7F049508 8FA50078 */ lw $a1, 0x78($sp) -/* 07E07C 7F04950C 3C018005 */ lui $at, %hi(D_80052B70) # $at, 0x8005 -/* 07E080 7F049510 26500100 */ addiu $s0, $s2, 0x100 -/* 07E084 7F049514 02002825 */ move $a1, $s0 -/* 07E088 7F049518 0FC162C7 */ jal matrix_4x4_set_rotation_around_y -/* 07E08C 7F04951C C42C2BA0 */ lwc1 $f12, %lo(D_80052B70)($at) -/* 07E090 7F049520 8FA40164 */ lw $a0, 0x164($sp) -/* 07E094 7F049524 0FC163AE */ jal matrix_4x4_set_position -/* 07E098 7F049528 02002825 */ move $a1, $s0 -/* 07E09C 7F04952C 8FA40078 */ lw $a0, 0x78($sp) -/* 07E0A0 7F049530 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07E0A4 7F049534 02002825 */ move $a1, $s0 -/* 07E0A8 7F049538 26450080 */ addiu $a1, $s2, 0x80 -/* 07E0AC 7F04953C AFA5006C */ sw $a1, 0x6c($sp) -/* 07E0B0 7F049540 0FC163A1 */ jal matrix_4x4_set_identity_and_position -/* 07E0B4 7F049544 8FA40160 */ lw $a0, 0x160($sp) -/* 07E0B8 7F049548 8FA40070 */ lw $a0, 0x70($sp) -/* 07E0BC 7F04954C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07E0C0 7F049550 8FA5006C */ lw $a1, 0x6c($sp) -/* 07E0C4 7F049554 0FC1E28D */ jal currentPlayerGetMatrix10D4 -/* 07E0C8 7F049558 00000000 */ nop -/* 07E0CC 7F04955C 27B00170 */ addiu $s0, $sp, 0x170 -/* 07E0D0 7F049560 02003025 */ move $a2, $s0 -/* 07E0D4 7F049564 00402025 */ move $a0, $v0 -/* 07E0D8 7F049568 0FC161AB */ jal matrix_4x4_multiply_homogeneous -/* 07E0DC 7F04956C 8FA50070 */ lw $a1, 0x70($sp) -/* 07E0E0 7F049570 8FA4015C */ lw $a0, 0x15c($sp) -/* 07E0E4 7F049574 02002825 */ move $a1, $s0 -/* 07E0E8 7F049578 26260084 */ addiu $a2, $s1, 0x84 -/* 07E0EC 7F04957C 0FC0FE10 */ jal sub_GAME_7F03F540 -/* 07E0F0 7F049580 26270080 */ addiu $a3, $s1, 0x80 -/* 07E0F4 7F049584 8E8E0008 */ lw $t6, 8($s4) -/* 07E0F8 7F049588 8DC30008 */ lw $v1, 8($t6) -/* 07E0FC 7F04958C 8C65001C */ lw $a1, 0x1c($v1) -/* 07E100 7F049590 50A00008 */ beql $a1, $zero, .Ljp7F0495B4 -/* 07E104 7F049594 8C650020 */ lw $a1, 0x20($v1) -/* 07E108 7F049598 0FC1B363 */ jal modelGetNodeRwData -/* 07E10C 7F04959C 02802025 */ move $a0, $s4 -/* 07E110 7F0495A0 8E2A00C4 */ lw $t2, 0xc4($s1) -/* 07E114 7F0495A4 A44A0000 */ sh $t2, ($v0) -/* 07E118 7F0495A8 8E8F0008 */ lw $t7, 8($s4) -/* 07E11C 7F0495AC 8DE30008 */ lw $v1, 8($t7) -/* 07E120 7F0495B0 8C650020 */ lw $a1, 0x20($v1) -.Ljp7F0495B4: -/* 07E124 7F0495B4 50A00005 */ beql $a1, $zero, .Ljp7F0495CC -/* 07E128 7F0495B8 8E8C0008 */ lw $t4, 8($s4) -/* 07E12C 7F0495BC 0FC1B363 */ jal modelGetNodeRwData -/* 07E130 7F0495C0 02802025 */ move $a0, $s4 -/* 07E134 7F0495C4 AC400000 */ sw $zero, ($v0) -.Ljp7F0495C8: -/* 07E138 7F0495C8 8E8C0008 */ lw $t4, 8($s4) -.Ljp7F0495CC: -/* 07E13C 7F0495CC 02802025 */ move $a0, $s4 -/* 07E140 7F0495D0 0FC1BD25 */ jal modelUpdateRelationsQuick -/* 07E144 7F0495D4 8D850000 */ lw $a1, ($t4) -/* 07E148 7F0495D8 8E8D000C */ lw $t5, 0xc($s4) -/* 07E14C 7F0495DC 02602025 */ move $a0, $s3 -/* 07E150 7F0495E0 C5AA0038 */ lwc1 $f10, 0x38($t5) -/* 07E154 7F0495E4 46005207 */ neg.s $f8, $f10 -/* 07E158 7F0495E8 0FC1101D */ jal chrobjWeaponTick -/* 07E15C 7F0495EC E6680018 */ swc1 $f8, 0x18($s3) -/* 07E160 7F0495F0 8E640020 */ lw $a0, 0x20($s3) -/* 07E164 7F0495F4 50800018 */ beql $a0, $zero, .Ljp7F049658 -/* 07E168 7F0495F8 8E230064 */ lw $v1, 0x64($s1) -/* 07E16C 7F0495FC 8C820024 */ lw $v0, 0x24($a0) -.Ljp7F049600: -/* 07E170 7F049600 0FC11171 */ jal sub_GAME_7F0442DC -/* 07E174 7F049604 AFA2068C */ sw $v0, 0x68c($sp) -/* 07E178 7F049608 8FA4068C */ lw $a0, 0x68c($sp) -/* 07E17C 7F04960C 5480FFFC */ bnezl $a0, .Ljp7F049600 -/* 07E180 7F049610 8C820024 */ lw $v0, 0x24($a0) -/* 07E184 7F049614 10000010 */ b .Ljp7F049658 -/* 07E188 7F049618 8E230064 */ lw $v1, 0x64($s1) -.Ljp7F04961C: -/* 07E18C 7F04961C 92790001 */ lbu $t9, 1($s3) -/* 07E190 7F049620 02602025 */ move $a0, $s3 -/* 07E194 7F049624 3328FFFD */ andi $t0, $t9, 0xfffd -/* 07E198 7F049628 0FC1101D */ jal chrobjWeaponTick -/* 07E19C 7F04962C A2680001 */ sb $t0, 1($s3) -/* 07E1A0 7F049630 8E640020 */ lw $a0, 0x20($s3) -/* 07E1A4 7F049634 50800008 */ beql $a0, $zero, .Ljp7F049658 -/* 07E1A8 7F049638 8E230064 */ lw $v1, 0x64($s1) -/* 07E1AC 7F04963C 8C820024 */ lw $v0, 0x24($a0) -.Ljp7F049640: -/* 07E1B0 7F049640 0FC1114D */ jal sub_GAME_7F04424C -/* 07E1B4 7F049644 AFA2068C */ sw $v0, 0x68c($sp) -/* 07E1B8 7F049648 8FA4068C */ lw $a0, 0x68c($sp) -/* 07E1BC 7F04964C 5480FFFC */ bnezl $a0, .Ljp7F049640 -/* 07E1C0 7F049650 8C820024 */ lw $v0, 0x24($a0) -/* 07E1C4 7F049654 8E230064 */ lw $v1, 0x64($s1) -.Ljp7F049658: -/* 07E1C8 7F049658 2401FEFF */ li $at, -257 -/* 07E1CC 7F04965C 266B0008 */ addiu $t3, $s3, 8 -/* 07E1D0 7F049660 30780100 */ andi $t8, $v1, 0x100 -/* 07E1D4 7F049664 1300001F */ beqz $t8, .Ljp7F0496E4 -/* 07E1D8 7F049668 00614824 */ and $t1, $v1, $at -/* 07E1DC 7F04966C AE290064 */ sw $t1, 0x64($s1) -/* 07E1E0 7F049670 0C002918 */ jal randomGetNext -/* 07E1E4 7F049674 AFAB0074 */ sw $t3, 0x74($sp) -/* 07E1E8 7F049678 44822000 */ mtc1 $v0, $f4 -/* 07E1EC 7F04967C 02202025 */ move $a0, $s1 -/* 07E1F0 7F049680 04410005 */ bgez $v0, .Ljp7F049698 -/* 07E1F4 7F049684 468021A0 */ cvt.s.w $f6, $f4 -/* 07E1F8 7F049688 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07E1FC 7F04968C 44815000 */ mtc1 $at, $f10 -/* 07E200 7F049690 00000000 */ nop -/* 07E204 7F049694 460A3180 */ add.s $f6, $f6, $f10 -.Ljp7F049698: -/* 07E208 7F049698 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07E20C 7F04969C 44814000 */ mtc1 $at, $f8 -/* 07E210 7F0496A0 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 07E214 7F0496A4 44815000 */ mtc1 $at, $f10 -/* 07E218 7F0496A8 46083102 */ mul.s $f4, $f6, $f8 -/* 07E21C 7F0496AC 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 07E220 7F0496B0 44814000 */ mtc1 $at, $f8 -/* 07E224 7F0496B4 8E2E0064 */ lw $t6, 0x64($s1) -/* 07E228 7F0496B8 3C010006 */ lui $at, 6 -/* 07E22C 7F0496BC 8FA60074 */ lw $a2, 0x74($sp) -/* 07E230 7F0496C0 01C15024 */ and $t2, $t6, $at -/* 07E234 7F0496C4 460A2182 */ mul.s $f6, $f4, $f10 -/* 07E238 7F0496C8 00003825 */ move $a3, $zero -/* 07E23C 7F0496CC 000A7C42 */ srl $t7, $t2, 0x11 -/* 07E240 7F0496D0 AFAF0010 */ sw $t7, 0x10($sp) -/* 07E244 7F0496D4 46083100 */ add.s $f4, $f6, $f8 -/* 07E248 7F0496D8 44052000 */ mfc1 $a1, $f4 -/* 07E24C 7F0496DC 0FC13943 */ jal maybe_detonate_object -/* 07E250 7F0496E0 00000000 */ nop -.Ljp7F0496E4: -/* 07E254 7F0496E4 8FAC0680 */ lw $t4, 0x680($sp) -/* 07E258 7F0496E8 5180020D */ beql $t4, $zero, .Ljp7F049F20 -/* 07E25C 7F0496EC 8FAD0688 */ lw $t5, 0x688($sp) -/* 07E260 7F0496F0 92220003 */ lbu $v0, 3($s1) -/* 07E264 7F0496F4 24010001 */ li $at, 1 -/* 07E268 7F0496F8 54410006 */ bnel $v0, $at, .Ljp7F049714 -/* 07E26C 7F0496FC 2401000D */ li $at, 13 -/* 07E270 7F049700 0FC14FCE */ jal sub_GAME_7F053A3C -/* 07E274 7F049704 8E640004 */ lw $a0, 4($s3) -/* 07E278 7F049708 10000202 */ b .Ljp7F049F14 -/* 07E27C 7F04970C 00000000 */ nop -/* 07E280 7F049710 2401000D */ li $at, 13 -.Ljp7F049714: -/* 07E284 7F049714 144101FF */ bne $v0, $at, .Ljp7F049F14 -/* 07E288 7F049718 00000000 */ nop -/* 07E28C 7F04971C 0FC3021B */ jal lvlGetControlsLockedFlag -/* 07E290 7F049720 00000000 */ nop -/* 07E294 7F049724 144001FB */ bnez $v0, .Ljp7F049F14 -/* 07E298 7F049728 00000000 */ nop -/* 07E29C 7F04972C 8E700004 */ lw $s0, 4($s3) -/* 07E2A0 7F049730 AFA00140 */ sw $zero, 0x140($sp) -/* 07E2A4 7F049734 AFA0013C */ sw $zero, 0x13c($sp) -/* 07E2A8 7F049738 8E0D00D0 */ lw $t5, 0xd0($s0) -/* 07E2AC 7F04973C 51A001E4 */ beql $t5, $zero, .Ljp7F049ED0 -/* 07E2B0 7F049740 8E8E0008 */ lw $t6, 8($s4) -/* 07E2B4 7F049744 8E390008 */ lw $t9, 8($s1) -/* 07E2B8 7F049748 001940C0 */ sll $t0, $t9, 3 -/* 07E2BC 7F04974C 050201E0 */ bltzl $t0, .Ljp7F049ED0 -/* 07E2C0 7F049750 8E8E0008 */ lw $t6, 8($s4) -/* 07E2C4 7F049754 8E1800AC */ lw $t8, 0xac($s0) -/* 07E2C8 7F049758 3C088005 */ lui $t0, %hi(g_GlobalTimer) # $t0, 0x8005 -/* 07E2CC 7F04975C 27090001 */ addiu $t1, $t8, 1 -/* 07E2D0 7F049760 312B0001 */ andi $t3, $t1, 1 -/* 07E2D4 7F049764 AE0900AC */ sw $t1, 0xac($s0) -/* 07E2D8 7F049768 2D6E0001 */ sltiu $t6, $t3, 1 -/* 07E2DC 7F04976C AFAE0140 */ sw $t6, 0x140($sp) -/* 07E2E0 7F049770 8E8A0008 */ lw $t2, 8($s4) -/* 07E2E4 7F049774 396D0001 */ xori $t5, $t3, 1 -/* 07E2E8 7F049778 2DAD0001 */ sltiu $t5, $t5, 1 -/* 07E2EC 7F04977C 8D4F0008 */ lw $t7, 8($t2) -/* 07E2F0 7F049780 8DEC0014 */ lw $t4, 0x14($t7) -/* 07E2F4 7F049784 51800003 */ beql $t4, $zero, .Ljp7F049794 -/* 07E2F8 7F049788 8E1900C0 */ lw $t9, 0xc0($s0) -/* 07E2FC 7F04978C AFAD013C */ sw $t5, 0x13c($sp) -/* 07E300 7F049790 8E1900C0 */ lw $t9, 0xc0($s0) -.Ljp7F049794: -/* 07E304 7F049794 8D0883AC */ lw $t0, %lo(g_GlobalTimer)($t0) -/* 07E308 7F049798 0328082A */ slt $at, $t9, $t0 -/* 07E30C 7F04979C 50200032 */ beql $at, $zero, .Ljp7F049868 -/* 07E310 7F0497A0 8FAC0140 */ lw $t4, 0x140($sp) -/* 07E314 7F0497A4 8E0400C4 */ lw $a0, 0xc4($s0) -/* 07E318 7F0497A8 50800008 */ beql $a0, $zero, .Ljp7F0497CC -/* 07E31C 7F0497AC 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07E320 7F0497B0 0C002380 */ jal sndGetPlayingState -/* 07E324 7F0497B4 00000000 */ nop -/* 07E328 7F0497B8 50400004 */ beql $v0, $zero, .Ljp7F0497CC -/* 07E32C 7F0497BC 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07E330 7F0497C0 0C00240C */ jal sndDeactivate -/* 07E334 7F0497C4 8E0400C4 */ lw $a0, 0xc4($s0) -/* 07E338 7F0497C8 8E0400C8 */ lw $a0, 0xc8($s0) -.Ljp7F0497CC: -/* 07E33C 7F0497CC 50800008 */ beql $a0, $zero, .Ljp7F0497F0 -/* 07E340 7F0497D0 8E1800C4 */ lw $t8, 0xc4($s0) -/* 07E344 7F0497D4 0C002380 */ jal sndGetPlayingState -/* 07E348 7F0497D8 00000000 */ nop -/* 07E34C 7F0497DC 50400004 */ beql $v0, $zero, .Ljp7F0497F0 -/* 07E350 7F0497E0 8E1800C4 */ lw $t8, 0xc4($s0) -/* 07E354 7F0497E4 0C00240C */ jal sndDeactivate -/* 07E358 7F0497E8 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07E35C 7F0497EC 8E1800C4 */ lw $t8, 0xc4($s0) -.Ljp7F0497F0: -/* 07E360 7F0497F0 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 07E364 7F0497F4 240500FD */ li $a1, 253 -/* 07E368 7F0497F8 1700000A */ bnez $t8, .Ljp7F049824 -/* 07E36C 7F0497FC 260600C4 */ addiu $a2, $s0, 0xc4 -/* 07E370 7F049800 26690008 */ addiu $t1, $s3, 8 -/* 07E374 7F049804 AFA90074 */ sw $t1, 0x74($sp) -/* 07E378 7F049808 0C002386 */ jal sndPlaySfx -/* 07E37C 7F04980C 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07E380 7F049810 8E0400C4 */ lw $a0, 0xc4($s0) -/* 07E384 7F049814 0FC14FC3 */ jal chrobjSndCreatePostEventDefault -/* 07E388 7F049818 8FA50074 */ lw $a1, 0x74($sp) -/* 07E38C 7F04981C 1000000D */ b .Ljp7F049854 -/* 07E390 7F049820 00000000 */ nop -.Ljp7F049824: -/* 07E394 7F049824 8E0B00C8 */ lw $t3, 0xc8($s0) -/* 07E398 7F049828 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 07E39C 7F04982C 240500FD */ li $a1, 253 -/* 07E3A0 7F049830 15600008 */ bnez $t3, .Ljp7F049854 -/* 07E3A4 7F049834 260600C8 */ addiu $a2, $s0, 0xc8 -/* 07E3A8 7F049838 266E0008 */ addiu $t6, $s3, 8 -/* 07E3AC 7F04983C AFAE0074 */ sw $t6, 0x74($sp) -/* 07E3B0 7F049840 0C002386 */ jal sndPlaySfx -/* 07E3B4 7F049844 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07E3B8 7F049848 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07E3BC 7F04984C 0FC14FC3 */ jal chrobjSndCreatePostEventDefault -/* 07E3C0 7F049850 8FA50074 */ lw $a1, 0x74($sp) -.Ljp7F049854: -/* 07E3C4 7F049854 3C0A8005 */ lui $t2, %hi(g_GlobalTimer) # $t2, 0x8005 -/* 07E3C8 7F049858 8D4A83AC */ lw $t2, %lo(g_GlobalTimer)($t2) -/* 07E3CC 7F04985C 254F0002 */ addiu $t7, $t2, 2 -/* 07E3D0 7F049860 AE0F00C0 */ sw $t7, 0xc0($s0) -/* 07E3D4 7F049864 8FAC0140 */ lw $t4, 0x140($sp) -.Ljp7F049868: -/* 07E3D8 7F049868 8FAD013C */ lw $t5, 0x13c($sp) -/* 07E3DC 7F04986C 24190001 */ li $t9, 1 -/* 07E3E0 7F049870 55800004 */ bnezl $t4, .Ljp7F049884 -/* 07E3E4 7F049874 AFB90120 */ sw $t9, 0x120($sp) -/* 07E3E8 7F049878 51A00195 */ beql $t5, $zero, .Ljp7F049ED0 -/* 07E3EC 7F04987C 8E8E0008 */ lw $t6, 8($s4) -/* 07E3F0 7F049880 AFB90120 */ sw $t9, 0x120($sp) -.Ljp7F049884: -/* 07E3F4 7F049884 AFA00110 */ sw $zero, 0x110($sp) -/* 07E3F8 7F049888 8E680014 */ lw $t0, 0x14($s3) -/* 07E3FC 7F04988C AFA8010C */ sw $t0, 0x10c($sp) -/* 07E400 7F049890 8E1800AC */ lw $t8, 0xac($s0) -/* 07E404 7F049894 33090003 */ andi $t1, $t8, 3 -/* 07E408 7F049898 2D2B0001 */ sltiu $t3, $t1, 1 -/* 07E40C 7F04989C 0FC2279B */ jal get_curplayer_positiondata -/* 07E410 7F0498A0 AFAB0108 */ sw $t3, 0x108($sp) -/* 07E414 7F0498A4 AFA20104 */ sw $v0, 0x104($sp) -/* 07E418 7F0498A8 8E8E0008 */ lw $t6, 8($s4) -/* 07E41C 7F0498AC 24040005 */ li $a0, 5 -/* 07E420 7F0498B0 8DC30008 */ lw $v1, 8($t6) -/* 07E424 7F0498B4 8C6A001C */ lw $t2, 0x1c($v1) -/* 07E428 7F0498B8 51400007 */ beql $t2, $zero, .Ljp7F0498D8 -/* 07E42C 7F0498BC 926D0001 */ lbu $t5, 1($s3) -/* 07E430 7F0498C0 8E0F00AC */ lw $t7, 0xac($s0) -/* 07E434 7F0498C4 31EC0007 */ andi $t4, $t7, 7 -/* 07E438 7F0498C8 55800003 */ bnezl $t4, .Ljp7F0498D8 -/* 07E43C 7F0498CC 926D0001 */ lbu $t5, 1($s3) -/* 07E440 7F0498D0 24040007 */ li $a0, 7 -/* 07E444 7F0498D4 926D0001 */ lbu $t5, 1($s3) -.Ljp7F0498D8: -/* 07E448 7F0498D8 31B90002 */ andi $t9, $t5, 2 -/* 07E44C 7F0498DC 1320002D */ beqz $t9, .Ljp7F049994 -/* 07E450 7F0498E0 00048880 */ sll $s1, $a0, 2 -/* 07E454 7F0498E4 00714021 */ addu $t0, $v1, $s1 -/* 07E458 7F0498E8 8D050000 */ lw $a1, ($t0) -/* 07E45C 7F0498EC 02802025 */ move $a0, $s4 -/* 07E460 7F0498F0 50A00029 */ beql $a1, $zero, .Ljp7F049998 -/* 07E464 7F0498F4 C6640008 */ lwc1 $f4, 8($s3) -/* 07E468 7F0498F8 0FC1B314 */ jal modelFindNodeMtx -/* 07E46C 7F0498FC 00003025 */ move $a2, $zero -/* 07E470 7F049900 8E980008 */ lw $t8, 8($s4) -/* 07E474 7F049904 00409025 */ move $s2, $v0 -/* 07E478 7F049908 8F090008 */ lw $t1, 8($t8) -/* 07E47C 7F04990C 01315821 */ addu $t3, $t1, $s1 -/* 07E480 7F049910 8D6E0000 */ lw $t6, ($t3) -/* 07E484 7F049914 8DC30004 */ lw $v1, 4($t6) -/* 07E488 7F049918 C46A0000 */ lwc1 $f10, ($v1) -/* 07E48C 7F04991C E7AA0130 */ swc1 $f10, 0x130($sp) -/* 07E490 7F049920 C4660004 */ lwc1 $f6, 4($v1) -/* 07E494 7F049924 E7A60134 */ swc1 $f6, 0x134($sp) -/* 07E498 7F049928 C4680008 */ lwc1 $f8, 8($v1) -/* 07E49C 7F04992C 0FC1E28D */ jal currentPlayerGetMatrix10D4 -/* 07E4A0 7F049930 E7A80138 */ swc1 $f8, 0x138($sp) -/* 07E4A4 7F049934 27B100BC */ addiu $s1, $sp, 0xbc -/* 07E4A8 7F049938 02203025 */ move $a2, $s1 -/* 07E4AC 7F04993C 00402025 */ move $a0, $v0 -/* 07E4B0 7F049940 0FC161AB */ jal matrix_4x4_multiply_homogeneous -/* 07E4B4 7F049944 02402825 */ move $a1, $s2 -/* 07E4B8 7F049948 02202025 */ move $a0, $s1 -/* 07E4BC 7F04994C 0FC16265 */ jal mtx4TransformVecInPlace -/* 07E4C0 7F049950 27A50130 */ addiu $a1, $sp, 0x130 -/* 07E4C4 7F049954 C7A40138 */ lwc1 $f4, 0x138($sp) -/* 07E4C8 7F049958 8E650008 */ lw $a1, 8($s3) -/* 07E4CC 7F04995C 8E660010 */ lw $a2, 0x10($s3) -/* 07E4D0 7F049960 27A4010C */ addiu $a0, $sp, 0x10c -/* 07E4D4 7F049964 8FA70130 */ lw $a3, 0x130($sp) -/* 07E4D8 7F049968 0FC2C5E5 */ jal walkTilesBetweenPoints_NoCallback -/* 07E4DC 7F04996C E7A40010 */ swc1 $f4, 0x10($sp) -/* 07E4E0 7F049970 1440000E */ bnez $v0, .Ljp7F0499AC -/* 07E4E4 7F049974 00000000 */ nop -/* 07E4E8 7F049978 C66A0008 */ lwc1 $f10, 8($s3) -/* 07E4EC 7F04997C E7AA0130 */ swc1 $f10, 0x130($sp) -/* 07E4F0 7F049980 C666000C */ lwc1 $f6, 0xc($s3) -/* 07E4F4 7F049984 E7A60134 */ swc1 $f6, 0x134($sp) -/* 07E4F8 7F049988 C6680010 */ lwc1 $f8, 0x10($s3) -/* 07E4FC 7F04998C 10000007 */ b .Ljp7F0499AC -/* 07E500 7F049990 E7A80138 */ swc1 $f8, 0x138($sp) -.Ljp7F049994: -/* 07E504 7F049994 C6640008 */ lwc1 $f4, 8($s3) -.Ljp7F049998: -/* 07E508 7F049998 E7A40130 */ swc1 $f4, 0x130($sp) -/* 07E50C 7F04999C C66A000C */ lwc1 $f10, 0xc($s3) -/* 07E510 7F0499A0 E7AA0134 */ swc1 $f10, 0x134($sp) -/* 07E514 7F0499A4 C6660010 */ lwc1 $f6, 0x10($s3) -/* 07E518 7F0499A8 E7A60138 */ swc1 $f6, 0x138($sp) -.Ljp7F0499AC: -/* 07E51C 7F0499AC 0FC160F0 */ jal cosf -/* 07E520 7F0499B0 C60C009C */ lwc1 $f12, 0x9c($s0) -/* 07E524 7F0499B4 C60C0090 */ lwc1 $f12, 0x90($s0) -/* 07E528 7F0499B8 0FC160F3 */ jal sinf -/* 07E52C 7F0499BC E7A00080 */ swc1 $f0, 0x80($sp) -/* 07E530 7F0499C0 C7A20080 */ lwc1 $f2, 0x80($sp) -/* 07E534 7F0499C4 46020202 */ mul.s $f8, $f0, $f2 -/* 07E538 7F0499C8 E7A80124 */ swc1 $f8, 0x124($sp) -/* 07E53C 7F0499CC 0FC160F3 */ jal sinf -/* 07E540 7F0499D0 C60C009C */ lwc1 $f12, 0x9c($s0) -/* 07E544 7F0499D4 E7A00128 */ swc1 $f0, 0x128($sp) -/* 07E548 7F0499D8 0FC160F0 */ jal cosf -/* 07E54C 7F0499DC C60C009C */ lwc1 $f12, 0x9c($s0) -/* 07E550 7F0499E0 C60C0090 */ lwc1 $f12, 0x90($s0) -/* 07E554 7F0499E4 0FC160F0 */ jal cosf -/* 07E558 7F0499E8 E7A00080 */ swc1 $f0, 0x80($sp) -/* 07E55C 7F0499EC C7A20080 */ lwc1 $f2, 0x80($sp) -/* 07E560 7F0499F0 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07E564 7F0499F4 44816000 */ mtc1 $at, $f12 -/* 07E568 7F0499F8 46020382 */ mul.s $f14, $f0, $f2 -/* 07E56C 7F0499FC C7A40124 */ lwc1 $f4, 0x124($sp) -/* 07E570 7F049A00 C7A60130 */ lwc1 $f6, 0x130($sp) -/* 07E574 7F049A04 460C2282 */ mul.s $f10, $f4, $f12 -/* 07E578 7F049A08 C7A40128 */ lwc1 $f4, 0x128($sp) -/* 07E57C 7F049A0C E7AE012C */ swc1 $f14, 0x12c($sp) -/* 07E580 7F049A10 46065200 */ add.s $f8, $f10, $f6 -/* 07E584 7F049A14 460C2282 */ mul.s $f10, $f4, $f12 -/* 07E588 7F049A18 C7A60134 */ lwc1 $f6, 0x134($sp) -/* 07E58C 7F049A1C 460C7102 */ mul.s $f4, $f14, $f12 -/* 07E590 7F049A20 E7A80114 */ swc1 $f8, 0x114($sp) -/* 07E594 7F049A24 46065200 */ add.s $f8, $f10, $f6 -/* 07E598 7F049A28 C7AA0138 */ lwc1 $f10, 0x138($sp) -/* 07E59C 7F049A2C 460A2180 */ add.s $f6, $f4, $f10 -/* 07E5A0 7F049A30 E7A80118 */ swc1 $f8, 0x118($sp) -/* 07E5A4 7F049A34 0FC2CA1D */ jal sub_GAME_7F0B1CC4 -/* 07E5A8 7F049A38 E7A6011C */ swc1 $f6, 0x11c($sp) -/* 07E5AC 7F049A3C 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 07E5B0 7F049A40 44810000 */ mtc1 $at, $f0 -/* 07E5B4 7F049A44 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07E5B8 7F049A48 44812000 */ mtc1 $at, $f4 -/* 07E5BC 7F049A4C C7A8011C */ lwc1 $f8, 0x11c($sp) -/* 07E5C0 7F049A50 240A0002 */ li $t2, 2 -/* 07E5C4 7F049A54 AFAA0014 */ sw $t2, 0x14($sp) -/* 07E5C8 7F049A58 27A4010C */ addiu $a0, $sp, 0x10c -/* 07E5CC 7F049A5C 8FA50130 */ lw $a1, 0x130($sp) -/* 07E5D0 7F049A60 8FA60138 */ lw $a2, 0x138($sp) -/* 07E5D4 7F049A64 8FA70114 */ lw $a3, 0x114($sp) -/* 07E5D8 7F049A68 E7B60020 */ swc1 $f22, 0x20($sp) -/* 07E5DC 7F049A6C E7A00018 */ swc1 $f0, 0x18($sp) -/* 07E5E0 7F049A70 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 07E5E4 7F049A74 E7A80010 */ swc1 $f8, 0x10($sp) -/* 07E5E8 7F049A78 0FC2C675 */ jal stanTestLineUnobstructed -/* 07E5EC 7F049A7C E7A40024 */ swc1 $f4, 0x24($sp) -/* 07E5F0 7F049A80 14400017 */ bnez $v0, .Ljp7F049AE0 -/* 07E5F4 7F049A84 27A60114 */ addiu $a2, $sp, 0x114 -/* 07E5F8 7F049A88 27A40130 */ addiu $a0, $sp, 0x130 -/* 07E5FC 7F049A8C 0FC09955 */ jal chrlvStanLineDirIntersection -/* 07E600 7F049A90 27A50124 */ addiu $a1, $sp, 0x124 -/* 07E604 7F049A94 3C0141D0 */ li $at, 0x41D00000 # 26.000000 -/* 07E608 7F049A98 44818000 */ mtc1 $at, $f16 -/* 07E60C 7F049A9C C7A60124 */ lwc1 $f6, 0x124($sp) -/* 07E610 7F049AA0 C7AA0114 */ lwc1 $f10, 0x114($sp) -/* 07E614 7F049AA4 C7AE012C */ lwc1 $f14, 0x12c($sp) -/* 07E618 7F049AA8 46068202 */ mul.s $f8, $f16, $f6 -/* 07E61C 7F049AAC C7A60118 */ lwc1 $f6, 0x118($sp) -/* 07E620 7F049AB0 8FAF010C */ lw $t7, 0x10c($sp) -/* 07E624 7F049AB4 AFAF0110 */ sw $t7, 0x110($sp) -/* 07E628 7F049AB8 46085101 */ sub.s $f4, $f10, $f8 -/* 07E62C 7F049ABC C7AA0128 */ lwc1 $f10, 0x128($sp) -/* 07E630 7F049AC0 460A8202 */ mul.s $f8, $f16, $f10 -/* 07E634 7F049AC4 E7A40114 */ swc1 $f4, 0x114($sp) -/* 07E638 7F049AC8 C7AA011C */ lwc1 $f10, 0x11c($sp) -/* 07E63C 7F049ACC 46083101 */ sub.s $f4, $f6, $f8 -/* 07E640 7F049AD0 460E8182 */ mul.s $f6, $f16, $f14 -/* 07E644 7F049AD4 E7A40118 */ swc1 $f4, 0x118($sp) -/* 07E648 7F049AD8 46065201 */ sub.s $f8, $f10, $f6 -/* 07E64C 7F049ADC E7A8011C */ swc1 $f8, 0x11c($sp) -.Ljp7F049AE0: -/* 07E650 7F049AE0 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) # $t4, 0x8005 -/* 07E654 7F049AE4 8D8C83AC */ lw $t4, %lo(g_GlobalTimer)($t4) -/* 07E658 7F049AE8 8E0D00BC */ lw $t5, 0xbc($s0) -/* 07E65C 7F049AEC 27B10114 */ addiu $s1, $sp, 0x114 -/* 07E660 7F049AF0 8FA50104 */ lw $a1, 0x104($sp) -/* 07E664 7F049AF4 158D0052 */ bne $t4, $t5, .Ljp7F049C40 -/* 07E668 7F049AF8 C7AA0130 */ lwc1 $f10, 0x130($sp) -/* 07E66C 7F049AFC C4A40008 */ lwc1 $f4, 8($a1) -/* 07E670 7F049B00 C4A6000C */ lwc1 $f6, 0xc($a1) -/* 07E674 7F049B04 C7A80134 */ lwc1 $f8, 0x134($sp) -/* 07E678 7F049B08 460A2001 */ sub.s $f0, $f4, $f10 -/* 07E67C 7F049B0C C4A40010 */ lwc1 $f4, 0x10($a1) -/* 07E680 7F049B10 E7AA0058 */ swc1 $f10, 0x58($sp) -/* 07E684 7F049B14 46083081 */ sub.s $f2, $f6, $f8 -/* 07E688 7F049B18 C7A60138 */ lwc1 $f6, 0x138($sp) -/* 07E68C 7F049B1C 46062301 */ sub.s $f12, $f4, $f6 -/* 07E690 7F049B20 46000102 */ mul.s $f4, $f0, $f0 -/* 07E694 7F049B24 00000000 */ nop -/* 07E698 7F049B28 46021282 */ mul.s $f10, $f2, $f2 -/* 07E69C 7F049B2C 460A2100 */ add.s $f4, $f4, $f10 -/* 07E6A0 7F049B30 460C6282 */ mul.s $f10, $f12, $f12 -/* 07E6A4 7F049B34 460A2500 */ add.s $f20, $f4, $f10 -/* 07E6A8 7F049B38 C7AA0058 */ lwc1 $f10, 0x58($sp) -/* 07E6AC 7F049B3C C7A40114 */ lwc1 $f4, 0x114($sp) -/* 07E6B0 7F049B40 460A2001 */ sub.s $f0, $f4, $f10 -/* 07E6B4 7F049B44 C7A40118 */ lwc1 $f4, 0x118($sp) -/* 07E6B8 7F049B48 C7AA011C */ lwc1 $f10, 0x11c($sp) -/* 07E6BC 7F049B4C 46082081 */ sub.s $f2, $f4, $f8 -/* 07E6C0 7F049B50 46000102 */ mul.s $f4, $f0, $f0 -/* 07E6C4 7F049B54 46065301 */ sub.s $f12, $f10, $f6 -/* 07E6C8 7F049B58 46021202 */ mul.s $f8, $f2, $f2 -/* 07E6CC 7F049B5C 46082280 */ add.s $f10, $f4, $f8 -/* 07E6D0 7F049B60 460C6182 */ mul.s $f6, $f12, $f12 -/* 07E6D4 7F049B64 46065100 */ add.s $f4, $f10, $f6 -/* 07E6D8 7F049B68 4604A03E */ c.le.s $f20, $f4 -/* 07E6DC 7F049B6C 00000000 */ nop -/* 07E6E0 7F049B70 45000033 */ bc1f .Ljp7F049C40 -/* 07E6E4 7F049B74 00000000 */ nop -/* 07E6E8 7F049B78 0FC2296B */ jal bondviewGetIfCurrentPlayerDamageShowTime -/* 07E6EC 7F049B7C 00000000 */ nop -/* 07E6F0 7F049B80 54400030 */ bnezl $v0, .Ljp7F049C44 -/* 07E6F4 7F049B84 8FB90120 */ lw $t9, 0x120($sp) -/* 07E6F8 7F049B88 0C007E08 */ jal sqrtf -/* 07E6FC 7F049B8C 4600A306 */ mov.s $f12, $f20 -/* 07E700 7F049B90 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 07E704 7F049B94 44816000 */ mtc1 $at, $f12 -/* 07E708 7F049B98 3C018005 */ lui $at, %hi(D_80052B74) # $at, 0x8005 -/* 07E70C 7F049B9C C4282BA4 */ lwc1 $f8, %lo(D_80052B74)($at) -/* 07E710 7F049BA0 3C018005 */ lui $at, %hi(g_JP_GlobalTimerDelta) # $at, 0x8005 -/* 07E714 7F049BA4 C42A83A8 */ lwc1 $f10, %lo(g_JP_GlobalTimerDelta)($at) -/* 07E718 7F049BA8 3C018003 */ lui $at, %hi(g_AutogunPendingDamageTick) # $at, 0x8003 -/* 07E71C 7F049BAC 4600603C */ c.lt.s $f12, $f0 -/* 07E720 7F049BB0 460A4182 */ mul.s $f6, $f8, $f10 -/* 07E724 7F049BB4 C4240B5C */ lwc1 $f4, %lo(g_AutogunPendingDamageTick)($at) -/* 07E728 7F049BB8 46043082 */ mul.s $f2, $f6, $f4 -/* 07E72C 7F049BBC 45020005 */ bc1fl .Ljp7F049BD4 -/* 07E730 7F049BC0 C60A00D4 */ lwc1 $f10, 0xd4($s0) -/* 07E734 7F049BC4 46006203 */ div.s $f8, $f12, $f0 -/* 07E738 7F049BC8 46081082 */ mul.s $f2, $f2, $f8 -/* 07E73C 7F049BCC 00000000 */ nop -/* 07E740 7F049BD0 C60A00D4 */ lwc1 $f10, 0xd4($s0) -.Ljp7F049BD4: -/* 07E744 7F049BD4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07E748 7F049BD8 44814000 */ mtc1 $at, $f8 -/* 07E74C 7F049BDC 46025180 */ add.s $f6, $f10, $f2 -/* 07E750 7F049BE0 E60600D4 */ swc1 $f6, 0xd4($s0) -/* 07E754 7F049BE4 C60400D4 */ lwc1 $f4, 0xd4($s0) -/* 07E758 7F049BE8 4604403E */ c.le.s $f8, $f4 -/* 07E75C 7F049BEC 00000000 */ nop -/* 07E760 7F049BF0 45020014 */ bc1fl .Ljp7F049C44 -/* 07E764 7F049BF4 8FB90120 */ lw $t9, 0x120($sp) -/* 07E768 7F049BF8 0FC17929 */ jal bondwalkItemGetDestructionAmount -/* 07E76C 7F049BFC 2404000E */ li $a0, 14 -/* 07E770 7F049C00 3C013E00 */ li $at, 0x3E000000 # 0.125000 -/* 07E774 7F049C04 44815000 */ mtc1 $at, $f10 -/* 07E778 7F049C08 3C018003 */ lui $at, %hi(g_AutogunDamageScalar) # $at, 0x8003 -/* 07E77C 7F049C0C C4240B60 */ lwc1 $f4, %lo(g_AutogunDamageScalar)($at) -/* 07E780 7F049C10 460A0182 */ mul.s $f6, $f0, $f10 -/* 07E784 7F049C14 C60E0090 */ lwc1 $f14, 0x90($s0) -/* 07E788 7F049C18 2406FFFF */ li $a2, -1 -/* 07E78C 7F049C1C 24070001 */ li $a3, 1 -/* 07E790 7F049C20 46043302 */ mul.s $f12, $f6, $f4 -/* 07E794 7F049C24 0FC22955 */ jal bondviewCallRecordDamageKills -/* 07E798 7F049C28 00000000 */ nop -/* 07E79C 7F049C2C 0FC2296B */ jal bondviewGetIfCurrentPlayerDamageShowTime -/* 07E7A0 7F049C30 E61600D4 */ swc1 $f22, 0xd4($s0) -/* 07E7A4 7F049C34 50400003 */ beql $v0, $zero, .Ljp7F049C44 -/* 07E7A8 7F049C38 8FB90120 */ lw $t9, 0x120($sp) -/* 07E7AC 7F049C3C AFA00120 */ sw $zero, 0x120($sp) -.Ljp7F049C40: -/* 07E7B0 7F049C40 8FB90120 */ lw $t9, 0x120($sp) -.Ljp7F049C44: -/* 07E7B4 7F049C44 3C0141D0 */ li $at, 0x41D00000 # 26.000000 -/* 07E7B8 7F049C48 44818000 */ mtc1 $at, $f16 -/* 07E7BC 7F049C4C 1320000F */ beqz $t9, .Ljp7F049C8C -/* 07E7C0 7F049C50 8FA50104 */ lw $a1, 0x104($sp) -/* 07E7C4 7F049C54 8FA80110 */ lw $t0, 0x110($sp) -/* 07E7C8 7F049C58 02202025 */ move $a0, $s1 -/* 07E7CC 7F049C5C 24050001 */ li $a1, 1 -/* 07E7D0 7F049C60 51000005 */ beql $t0, $zero, .Ljp7F049C78 -/* 07E7D4 7F049C64 2404000E */ li $a0, 14 -/* 07E7D8 7F049C68 44068000 */ mfc1 $a2, $f16 -/* 07E7DC 7F049C6C 0FC2926F */ jal sub_GAME_7F0A3E1C -/* 07E7E0 7F049C70 91070003 */ lbu $a3, 3($t0) -/* 07E7E4 7F049C74 2404000E */ li $a0, 14 -.Ljp7F049C78: -/* 07E7E8 7F049C78 02202825 */ move $a1, $s1 -/* 07E7EC 7F049C7C 0FC1932F */ jal recall_joy2_hits_edit_flag -/* 07E7F0 7F049C80 2406FFFF */ li $a2, -1 -/* 07E7F4 7F049C84 1000000B */ b .Ljp7F049CB4 -/* 07E7F8 7F049C88 8FB80108 */ lw $t8, 0x108($sp) -.Ljp7F049C8C: -/* 07E7FC 7F049C8C C4A80008 */ lwc1 $f8, 8($a1) -/* 07E800 7F049C90 2404000E */ li $a0, 14 -/* 07E804 7F049C94 2406FFFF */ li $a2, -1 -/* 07E808 7F049C98 E7A80114 */ swc1 $f8, 0x114($sp) -/* 07E80C 7F049C9C C4AA000C */ lwc1 $f10, 0xc($a1) -/* 07E810 7F049CA0 E7AA0118 */ swc1 $f10, 0x118($sp) -/* 07E814 7F049CA4 C4A60010 */ lwc1 $f6, 0x10($a1) -/* 07E818 7F049CA8 0FC19252 */ jal recall_joy2_hits_edit_detail_edit_flag -/* 07E81C 7F049CAC E7A6011C */ swc1 $f6, 0x11c($sp) -/* 07E820 7F049CB0 8FB80108 */ lw $t8, 0x108($sp) -.Ljp7F049CB4: -/* 07E824 7F049CB4 C7A40130 */ lwc1 $f4, 0x130($sp) -/* 07E828 7F049CB8 53000085 */ beql $t8, $zero, .Ljp7F049ED0 -/* 07E82C 7F049CBC 8E8E0008 */ lw $t6, 8($s4) -/* 07E830 7F049CC0 8E0300CC */ lw $v1, 0xcc($s0) -/* 07E834 7F049CC4 E4640004 */ swc1 $f4, 4($v1) -/* 07E838 7F049CC8 C7A80134 */ lwc1 $f8, 0x134($sp) -/* 07E83C 7F049CCC C4640004 */ lwc1 $f4, 4($v1) -/* 07E840 7F049CD0 E4680008 */ swc1 $f8, 8($v1) -/* 07E844 7F049CD4 C7AA0138 */ lwc1 $f10, 0x138($sp) -/* 07E848 7F049CD8 E46A000C */ swc1 $f10, 0xc($v1) -/* 07E84C 7F049CDC C7A60114 */ lwc1 $f6, 0x114($sp) -/* 07E850 7F049CE0 46043201 */ sub.s $f8, $f6, $f4 -/* 07E854 7F049CE4 C4660008 */ lwc1 $f6, 8($v1) -/* 07E858 7F049CE8 E4680010 */ swc1 $f8, 0x10($v1) -/* 07E85C 7F049CEC C7AA0118 */ lwc1 $f10, 0x118($sp) -/* 07E860 7F049CF0 C4620010 */ lwc1 $f2, 0x10($v1) -/* 07E864 7F049CF4 46065101 */ sub.s $f4, $f10, $f6 -/* 07E868 7F049CF8 C46A000C */ lwc1 $f10, 0xc($v1) -/* 07E86C 7F049CFC E4640014 */ swc1 $f4, 0x14($v1) -/* 07E870 7F049D00 C7A8011C */ lwc1 $f8, 0x11c($sp) -/* 07E874 7F049D04 46021102 */ mul.s $f4, $f2, $f2 -/* 07E878 7F049D08 C46E0014 */ lwc1 $f14, 0x14($v1) -/* 07E87C 7F049D0C 460A4181 */ sub.s $f6, $f8, $f10 -/* 07E880 7F049D10 460E7202 */ mul.s $f8, $f14, $f14 -/* 07E884 7F049D14 E4660018 */ swc1 $f6, 0x18($v1) -/* 07E888 7F049D18 C4600018 */ lwc1 $f0, 0x18($v1) -/* 07E88C 7F049D1C AFA30094 */ sw $v1, 0x94($sp) -/* 07E890 7F049D20 46000182 */ mul.s $f6, $f0, $f0 -/* 07E894 7F049D24 46082280 */ add.s $f10, $f4, $f8 -/* 07E898 7F049D28 0C007E08 */ jal sqrtf -/* 07E89C 7F049D2C 460A3300 */ add.s $f12, $f6, $f10 -/* 07E8A0 7F049D30 3C018005 */ lui $at, %hi(D_80052B78) # $at, 0x8005 -/* 07E8A4 7F049D34 C42E2BA8 */ lwc1 $f14, %lo(D_80052B78)($at) -/* 07E8A8 7F049D38 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07E8AC 7F049D3C 44812000 */ mtc1 $at, $f4 -/* 07E8B0 7F049D40 8FA30094 */ lw $v1, 0x94($sp) -/* 07E8B4 7F049D44 4600703C */ c.lt.s $f14, $f0 -/* 07E8B8 7F049D48 46000306 */ mov.s $f12, $f0 -/* 07E8BC 7F049D4C 46002083 */ div.s $f2, $f4, $f0 -/* 07E8C0 7F049D50 C4680010 */ lwc1 $f8, 0x10($v1) -/* 07E8C4 7F049D54 C46A0014 */ lwc1 $f10, 0x14($v1) -/* 07E8C8 7F049D58 3C0143FA */ li $at, 0x43FA0000 # 500.000000 -/* 07E8CC 7F049D5C 44810000 */ mtc1 $at, $f0 -/* 07E8D0 7F049D60 46024182 */ mul.s $f6, $f8, $f2 -/* 07E8D4 7F049D64 C4680018 */ lwc1 $f8, 0x18($v1) -/* 07E8D8 7F049D68 46025102 */ mul.s $f4, $f10, $f2 -/* 07E8DC 7F049D6C E4660010 */ swc1 $f6, 0x10($v1) -/* 07E8E0 7F049D70 46024182 */ mul.s $f6, $f8, $f2 -/* 07E8E4 7F049D74 E4640014 */ swc1 $f4, 0x14($v1) -/* 07E8E8 7F049D78 45000002 */ bc1f .Ljp7F049D84 -/* 07E8EC 7F049D7C E4660018 */ swc1 $f6, 0x18($v1) -/* 07E8F0 7F049D80 46007306 */ mov.s $f12, $f14 -.Ljp7F049D84: -/* 07E8F4 7F049D84 4600603C */ c.lt.s $f12, $f0 -/* 07E8F8 7F049D88 2409000E */ li $t1, 14 -/* 07E8FC 7F049D8C A0600000 */ sb $zero, ($v1) -/* 07E900 7F049D90 A0690001 */ sb $t1, 1($v1) -/* 07E904 7F049D94 45000002 */ bc1f .Ljp7F049DA0 -/* 07E908 7F049D98 E46C001C */ swc1 $f12, 0x1c($v1) -/* 07E90C 7F049D9C 46000306 */ mov.s $f12, $f0 -.Ljp7F049DA0: -/* 07E910 7F049DA0 806B0001 */ lb $t3, 1($v1) -/* 07E914 7F049DA4 24010016 */ li $at, 22 -/* 07E918 7F049DA8 15610026 */ bne $t3, $at, .Ljp7F049E44 -/* 07E91C 7F049DAC 3C018005 */ lui $at, %hi(D_80052B7C) # $at, 0x8005 -/* 07E920 7F049DB0 C4222BAC */ lwc1 $f2, %lo(D_80052B7C)($at) -/* 07E924 7F049DB4 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 07E928 7F049DB8 44815000 */ mtc1 $at, $f10 -/* 07E92C 7F049DBC 3C018005 */ lui $at, %hi(D_80052B80) # $at, 0x8005 -/* 07E930 7F049DC0 460C5102 */ mul.s $f4, $f10, $f12 -/* 07E934 7F049DC4 E4640020 */ swc1 $f4, 0x20($v1) -/* 07E938 7F049DC8 C4282BB0 */ lwc1 $f8, %lo(D_80052B80)($at) -/* 07E93C 7F049DCC 460C4002 */ mul.s $f0, $f8, $f12 -/* 07E940 7F049DD0 4600103C */ c.lt.s $f2, $f0 -/* 07E944 7F049DD4 E4600024 */ swc1 $f0, 0x24($v1) -/* 07E948 7F049DD8 45020003 */ bc1fl .Ljp7F049DE8 -/* 07E94C 7F049DDC AFA30094 */ sw $v1, 0x94($sp) -/* 07E950 7F049DE0 E4620024 */ swc1 $f2, 0x24($v1) -/* 07E954 7F049DE4 AFA30094 */ sw $v1, 0x94($sp) -.Ljp7F049DE8: -/* 07E958 7F049DE8 0C002918 */ jal randomGetNext -/* 07E95C 7F049DEC E7AC0098 */ swc1 $f12, 0x98($sp) -/* 07E960 7F049DF0 44823000 */ mtc1 $v0, $f6 -/* 07E964 7F049DF4 8FA30094 */ lw $v1, 0x94($sp) -/* 07E968 7F049DF8 C7AC0098 */ lwc1 $f12, 0x98($sp) -/* 07E96C 7F049DFC 04410005 */ bgez $v0, .Ljp7F049E14 -/* 07E970 7F049E00 468032A0 */ cvt.s.w $f10, $f6 -/* 07E974 7F049E04 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07E978 7F049E08 44812000 */ mtc1 $at, $f4 -/* 07E97C 7F049E0C 00000000 */ nop -/* 07E980 7F049E10 46045280 */ add.s $f10, $f10, $f4 -.Ljp7F049E14: -/* 07E984 7F049E14 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07E988 7F049E18 44814000 */ mtc1 $at, $f8 -/* 07E98C 7F049E1C 3C018005 */ lui $at, %hi(D_80052B84) # $at, 0x8005 -/* 07E990 7F049E20 C4242BB4 */ lwc1 $f4, %lo(D_80052B84)($at) -/* 07E994 7F049E24 46085182 */ mul.s $f6, $f10, $f8 -/* 07E998 7F049E28 3C018005 */ lui $at, %hi(D_80052B88) # $at, 0x8005 -/* 07E99C 7F049E2C C4282BB8 */ lwc1 $f8, %lo(D_80052B88)($at) -/* 07E9A0 7F049E30 46043282 */ mul.s $f10, $f6, $f4 -/* 07E9A4 7F049E34 460A4181 */ sub.s $f6, $f8, $f10 -/* 07E9A8 7F049E38 460C3102 */ mul.s $f4, $f6, $f12 -/* 07E9AC 7F049E3C 10000023 */ b .Ljp7F049ECC -/* 07E9B0 7F049E40 E4640028 */ swc1 $f4, 0x28($v1) -.Ljp7F049E44: -/* 07E9B4 7F049E44 3C018005 */ lui $at, %hi(D_80052B8C) # $at, 0x8005 -/* 07E9B8 7F049E48 C4282BBC */ lwc1 $f8, %lo(D_80052B8C)($at) -/* 07E9BC 7F049E4C 3C018005 */ lui $at, %hi(D_80052B90) # $at, 0x8005 -/* 07E9C0 7F049E50 460C4002 */ mul.s $f0, $f8, $f12 -/* 07E9C4 7F049E54 E4600020 */ swc1 $f0, 0x20($v1) -/* 07E9C8 7F049E58 E4600024 */ swc1 $f0, 0x24($v1) -/* 07E9CC 7F049E5C C42A2BC0 */ lwc1 $f10, %lo(D_80052B90)($at) -/* 07E9D0 7F049E60 3C018005 */ lui $at, %hi(D_80052B94) # $at, 0x8005 -/* 07E9D4 7F049E64 4600503C */ c.lt.s $f10, $f0 -/* 07E9D8 7F049E68 00000000 */ nop -/* 07E9DC 7F049E6C 45000003 */ bc1f .Ljp7F049E7C -/* 07E9E0 7F049E70 00000000 */ nop -/* 07E9E4 7F049E74 C4262BC4 */ lwc1 $f6, %lo(D_80052B94)($at) -/* 07E9E8 7F049E78 E4660024 */ swc1 $f6, 0x24($v1) -.Ljp7F049E7C: -/* 07E9EC 7F049E7C 0C002918 */ jal randomGetNext -/* 07E9F0 7F049E80 AFA30094 */ sw $v1, 0x94($sp) -/* 07E9F4 7F049E84 44822000 */ mtc1 $v0, $f4 -/* 07E9F8 7F049E88 8FA30094 */ lw $v1, 0x94($sp) -/* 07E9FC 7F049E8C 04410005 */ bgez $v0, .Ljp7F049EA4 -/* 07EA00 7F049E90 46802220 */ cvt.s.w $f8, $f4 -/* 07EA04 7F049E94 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EA08 7F049E98 44815000 */ mtc1 $at, $f10 -/* 07EA0C 7F049E9C 00000000 */ nop -/* 07EA10 7F049EA0 460A4200 */ add.s $f8, $f8, $f10 -.Ljp7F049EA4: -/* 07EA14 7F049EA4 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07EA18 7F049EA8 44813000 */ mtc1 $at, $f6 -/* 07EA1C 7F049EAC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07EA20 7F049EB0 44815000 */ mtc1 $at, $f10 -/* 07EA24 7F049EB4 46064002 */ mul.s $f0, $f8, $f6 -/* 07EA28 7F049EB8 C4660020 */ lwc1 $f6, 0x20($v1) -/* 07EA2C 7F049EBC 46000100 */ add.s $f4, $f0, $f0 -/* 07EA30 7F049EC0 460A2201 */ sub.s $f8, $f4, $f10 -/* 07EA34 7F049EC4 46064102 */ mul.s $f4, $f8, $f6 -/* 07EA38 7F049EC8 E4640028 */ swc1 $f4, 0x28($v1) -.Ljp7F049ECC: -/* 07EA3C 7F049ECC 8E8E0008 */ lw $t6, 8($s4) -.Ljp7F049ED0: -/* 07EA40 7F049ED0 8DC30008 */ lw $v1, 8($t6) -/* 07EA44 7F049ED4 8C650014 */ lw $a1, 0x14($v1) -/* 07EA48 7F049ED8 50A00008 */ beql $a1, $zero, .Ljp7F049EFC -/* 07EA4C 7F049EDC 8C65001C */ lw $a1, 0x1c($v1) -/* 07EA50 7F049EE0 0FC1B363 */ jal modelGetNodeRwData -/* 07EA54 7F049EE4 02802025 */ move $a0, $s4 -/* 07EA58 7F049EE8 8FAA0140 */ lw $t2, 0x140($sp) -/* 07EA5C 7F049EEC A44A0000 */ sh $t2, ($v0) -/* 07EA60 7F049EF0 8E8F0008 */ lw $t7, 8($s4) -/* 07EA64 7F049EF4 8DE30008 */ lw $v1, 8($t7) -/* 07EA68 7F049EF8 8C65001C */ lw $a1, 0x1c($v1) -.Ljp7F049EFC: -/* 07EA6C 7F049EFC 10A00005 */ beqz $a1, .Ljp7F049F14 -/* 07EA70 7F049F00 00000000 */ nop -/* 07EA74 7F049F04 0FC1B363 */ jal modelGetNodeRwData -/* 07EA78 7F049F08 02802025 */ move $a0, $s4 -/* 07EA7C 7F049F0C 8FAC013C */ lw $t4, 0x13c($sp) -/* 07EA80 7F049F10 A44C0000 */ sh $t4, ($v0) -.Ljp7F049F14: -/* 07EA84 7F049F14 0FC1113A */ jal objDropRecursively -/* 07EA88 7F049F18 02602025 */ move $a0, $s3 -/* 07EA8C 7F049F1C 8FAD0688 */ lw $t5, 0x688($sp) -.Ljp7F049F20: -/* 07EA90 7F049F20 24010005 */ li $at, 5 -/* 07EA94 7F049F24 55A10003 */ bnel $t5, $at, .Ljp7F049F34 -/* 07EA98 7F049F28 8FA20688 */ lw $v0, 0x688($sp) -/* 07EA9C 7F049F2C AE600014 */ sw $zero, 0x14($s3) -/* 07EAA0 7F049F30 8FA20688 */ lw $v0, 0x688($sp) -.Ljp7F049F34: -/* 07EAA4 7F049F34 8FBF0054 */ lw $ra, 0x54($sp) -/* 07EAA8 7F049F38 D7B40030 */ ldc1 $f20, 0x30($sp) -/* 07EAAC 7F049F3C D7B60038 */ ldc1 $f22, 0x38($sp) -/* 07EAB0 7F049F40 8FB00040 */ lw $s0, 0x40($sp) -/* 07EAB4 7F049F44 8FB10044 */ lw $s1, 0x44($sp) -/* 07EAB8 7F049F48 8FB20048 */ lw $s2, 0x48($sp) -/* 07EABC 7F049F4C 8FB3004C */ lw $s3, 0x4c($sp) -/* 07EAC0 7F049F50 8FB40050 */ lw $s4, 0x50($sp) -/* 07EAC4 7F049F54 03E00008 */ jr $ra -/* 07EAC8 7F049F58 27BD06B0 */ addiu $sp, $sp, 0x6b0 -) -#endif - -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel rocket_initial_gravity_modifier -.word 0x3e8e38e4 /*0.27777779*/ -glabel D_80052A9C -.word 0x3c360b61 /*0.011111111*/ -glabel D_80052AA0 -.word 0x3d8f5c29 /*0.07*/ -glabel prop_projectile_gravity_modifier -.word 0x3e8e38e4 /*0.27777779*/ -glabel D_80052AA8 -.word 0x400e38e4 /*2.2222223*/ -glabel D_80052AAC -.word 0x46d9038c /*27777.773*/ -glabel D_80052AB0 -.word 0x3f8ccccd /*1.1*/ -glabel D_80052AB4 -.word 0x3f666666 /*0.89999998*/ -glabel D_80052AB8 -.word 0x3f666666 /*0.89999998*/ -glabel D_80052ABC -.word 0x3dcccccd /*0.1*/ -glabel D_80052AC0 -.word 0xbdcccccd /*-0.1*/ -glabel D_80052AC4 -.word 0xbdcccccd /*-0.1*/ -glabel D_80052AC8 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052ACC -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AD0 -.word 0x40490fdb /*3.1415927*/ -glabel D_80052AD4 -.word 0x3f490fdb /*0.78539819*/ -glabel D_80052AD8 -.word 0xbf490fdb /*-0.78539819*/ -glabel D_80052ADC -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AE0 -.word 0x3a2b92a6 /*0.00065449846*/ -glabel D_80052AE4 -.word 0x3a2b92a6 /*0.00065449846*/ -glabel D_80052AE8 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AEC -.word 0x376a410f /*0.000039626345*/ -glabel D_80052AF0 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052AF4 -.word 0x3a5b9cff /* 0.000837758125272 */ -glabel D_80052AF8 -.word 0x36ea410f /* 6.98131725585e-06 */ -glabel D_80052AFC -.word 0x39db9cff /* 0.000418879062636 */ -glabel D_80052B00 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B04 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B08 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B0C -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B10 -.word 0x3f9c61ab /*1.2217306*/ -glabel D_80052B14 -.word 0xbf9c61ab /*-1.2217306*/ -glabel D_80052B18 -.word 0xc0490fdb /*-3.1415927*/ -glabel D_80052B1C -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B20 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B24 -.word 0x3f4ccccd /*0.80000001*/ -glabel D_80052B28 -.word 0xc0490fdb /*-3.1415927*/ -glabel D_80052B2C -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B30 -.word 0x3a89421f /* 0.00104719761293 */ -glabel D_80052B34 -.word 0x3a89421f /* 0.00104719761293 */ -glabel D_80052B38 -.word 0x40490fdb /*3.1415927*/ -glabel D_80052B3C -.word 0x3f1930a7 /*0.59839863*/ -glabel D_80052B40 -.word 0x3c236719 /*0.0099733109*/ -glabel D_80052B44 -.word 0x3f7d70a4 /*0.99000001*/ -glabel D_80052B48 -.word 0x38d1b717 /*0.000099999997*/ -glabel D_80052B4C -.word 0x3989421f /* 0.000261799403233 */ -glabel D_80052B50 -.word 0x3c00adfd /* 0.0078539820388 */ -glabel D_80052B54 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B58 -.word 0x3989421f /* 0.000261799403233 */ -glabel D_80052B5C -.word 0xb989421f /* -0.000261799403233 */ -glabel D_80052B60 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B64 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80052B68 -.word 0x3e99999a /*0.30000001*/ -glabel D_80052B6C -.word 0x3fc90fdb /*1.5707964*/ -glabel D_80052B70 -.word 0x3fc90fdb /*1.5707964*/ -glabel D_80052B74 -.word 0x3e23d70a /*0.16*/ -glabel D_80052B78 -.word 0x461c4000 /*10000.0*/ -glabel D_80052B7C -.word 0x453b8000 /*3000.0*/ -glabel D_80052B80 -.word 0x3f19999a /*0.60000002*/ -glabel D_80052B84 -.word 0x3e99999a /*0.30000001*/ -glabel D_80052B88 -.word 0xbdcccccd /*-0.1*/ -glabel D_80052B8C -.word 0x3e4ccccd /*0.2*/ -glabel D_80052B90 -.word 0x453b8000 /*3000.0*/ -glabel D_80052B94 -.word 0x453b8000 /*3000.0*/ -.text -glabel object_interaction -/* 077E58 7F045468 27BDF950 */ addiu $sp, $sp, -0x6b0 -/* 077E5C 7F04546C AFBF0054 */ sw $ra, 0x54($sp) -/* 077E60 7F045470 AFB40050 */ sw $s4, 0x50($sp) -/* 077E64 7F045474 AFB3004C */ sw $s3, 0x4c($sp) -/* 077E68 7F045478 AFB20048 */ sw $s2, 0x48($sp) -/* 077E6C 7F04547C AFB10044 */ sw $s1, 0x44($sp) -/* 077E70 7F045480 AFB00040 */ sw $s0, 0x40($sp) -/* 077E74 7F045484 F7B60038 */ sdc1 $f22, 0x38($sp) -/* 077E78 7F045488 F7B40030 */ sdc1 $f20, 0x30($sp) -/* 077E7C 7F04548C 8C910004 */ lw $s1, 4($a0) -/* 077E80 7F045490 4480B000 */ mtc1 $zero, $f22 -/* 077E84 7F045494 00809825 */ move $s3, $a0 -/* 077E88 7F045498 8E340014 */ lw $s4, 0x14($s1) -/* 077E8C 7F04549C AFA00698 */ sw $zero, 0x698($sp) -/* 077E90 7F0454A0 AFA00688 */ sw $zero, 0x688($sp) -/* 077E94 7F0454A4 0FC26669 */ jal getPlayerCount -/* 077E98 7F0454A8 E7B60684 */ swc1 $f22, 0x684($sp) -/* 077E9C 7F0454AC 240B0001 */ li $t3, 1 -/* 077EA0 7F0454B0 AFA2067C */ sw $v0, 0x67c($sp) -/* 077EA4 7F0454B4 AFAB0678 */ sw $t3, 0x678($sp) -/* 077EA8 7F0454B8 8E230064 */ lw $v1, 0x64($s1) -/* 077EAC 7F0454BC 306E0004 */ andi $t6, $v1, 4 -/* 077EB0 7F0454C0 11C00009 */ beqz $t6, .L7F0454E8 -/* 077EB4 7F0454C4 30780008 */ andi $t8, $v1, 8 -/* 077EB8 7F0454C8 92260002 */ lbu $a2, 2($s1) -/* 077EBC 7F0454CC 02202025 */ move $a0, $s1 -/* 077EC0 7F0454D0 00002825 */ move $a1, $zero -/* 077EC4 7F0454D4 30CD0004 */ andi $t5, $a2, 4 -/* 077EC8 7F0454D8 0FC10396 */ jal objFree -/* 077ECC 7F0454DC 01A03025 */ move $a2, $t5 -/* 077ED0 7F0454E0 1000120A */ b .L7F049D0C -/* 077ED4 7F0454E4 24020001 */ li $v0, 1 -.L7F0454E8: -/* 077ED8 7F0454E8 13000005 */ beqz $t8, .L7F045500 -/* 077EDC 7F0454EC 30790080 */ andi $t9, $v1, 0x80 -/* 077EE0 7F0454F0 2401FFF7 */ li $at, -9 -/* 077EE4 7F0454F4 00617824 */ and $t7, $v1, $at -/* 077EE8 7F0454F8 1000000B */ b .L7F045528 -/* 077EEC 7F0454FC AE2F0064 */ sw $t7, 0x64($s1) -.L7F045500: -/* 077EF0 7F045500 5320000A */ beql $t9, $zero, .L7F04552C -/* 077EF4 7F045504 24010001 */ li $at, 1 -/* 077EF8 7F045508 92690001 */ lbu $t1, 1($s3) -/* 077EFC 7F04550C 24020003 */ li $v0, 3 -/* 077F00 7F045510 312AFFFD */ andi $t2, $t1, 0xfffd -/* 077F04 7F045514 A26A0001 */ sb $t2, 1($s3) -/* 077F08 7F045518 8E280064 */ lw $t0, 0x64($s1) -/* 077F0C 7F04551C 350C0008 */ ori $t4, $t0, 8 -/* 077F10 7F045520 100011FA */ b .L7F049D0C -/* 077F14 7F045524 AE2C0064 */ sw $t4, 0x64($s1) -.L7F045528: -/* 077F18 7F045528 24010001 */ li $at, 1 -.L7F04552C: -/* 077F1C 7F04552C 14410003 */ bne $v0, $at, .L7F04553C -/* 077F20 7F045530 240B0001 */ li $t3, 1 -/* 077F24 7F045534 10000019 */ b .L7F04559C -/* 077F28 7F045538 AFAB0680 */ sw $t3, 0x680($sp) -.L7F04553C: -/* 077F2C 7F04553C 0FC269A4 */ jal get_cur_playernum -/* 077F30 7F045540 00000000 */ nop -/* 077F34 7F045544 0FC26A86 */ jal get_player_position_in_shuffled -/* 077F38 7F045548 00402025 */ move $a0, $v0 -/* 077F3C 7F04554C 2C4E0001 */ sltiu $t6, $v0, 1 -/* 077F40 7F045550 AFAE0680 */ sw $t6, 0x680($sp) -/* 077F44 7F045554 8E2D0064 */ lw $t5, 0x64($s1) -/* 077F48 7F045558 31B80080 */ andi $t8, $t5, 0x80 -/* 077F4C 7F04555C 53000010 */ beql $t8, $zero, .L7F0455A0 -/* 077F50 7F045560 8FA80680 */ lw $t0, 0x680($sp) -/* 077F54 7F045564 8E30006C */ lw $s0, 0x6c($s1) -/* 077F58 7F045568 8E040088 */ lw $a0, 0x88($s0) -/* 077F5C 7F04556C 5080000C */ beql $a0, $zero, .L7F0455A0 -/* 077F60 7F045570 8FA80680 */ lw $t0, 0x680($sp) -/* 077F64 7F045574 0FC269A7 */ jal getPlayerPointerIndex -/* 077F68 7F045578 00000000 */ nop -/* 077F6C 7F04557C 04400007 */ bltz $v0, .L7F04559C -/* 077F70 7F045580 3C0F8007 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8007 -/* 077F74 7F045584 8DEF8BC0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 077F78 7F045588 8E090088 */ lw $t1, 0x88($s0) -/* 077F7C 7F04558C 8DF900A8 */ lw $t9, 0xa8($t7) -/* 077F80 7F045590 03295026 */ xor $t2, $t9, $t1 -/* 077F84 7F045594 2D4A0001 */ sltiu $t2, $t2, 1 -/* 077F88 7F045598 AFAA0680 */ sw $t2, 0x680($sp) -.L7F04559C: -/* 077F8C 7F04559C 8FA80680 */ lw $t0, 0x680($sp) -.L7F0455A0: -/* 077F90 7F0455A0 51000B9B */ beql $t0, $zero, .L7F048410 -/* 077F94 7F0455A4 92220003 */ lbu $v0, 3($s1) -/* 077F98 7F0455A8 8E2C0064 */ lw $t4, 0x64($s1) -/* 077F9C 7F0455AC 318B0080 */ andi $t3, $t4, 0x80 -/* 077FA0 7F0455B0 5160048B */ beql $t3, $zero, .L7F0467E0 -/* 077FA4 7F0455B4 8FB90698 */ lw $t9, 0x698($sp) -/* 077FA8 7F0455B8 8E30006C */ lw $s0, 0x6c($s1) -/* 077FAC 7F0455BC 3C0D8004 */ lui $t5, %hi(g_ClockTimer) # $t5, 0x8004 -/* 077FB0 7F0455C0 8DAD0FF4 */ lw $t5, %lo(g_ClockTimer)($t5) -/* 077FB4 7F0455C4 8E0E00E0 */ lw $t6, 0xe0($s0) -/* 077FB8 7F0455C8 01CDC021 */ addu $t8, $t6, $t5 -/* 077FBC 7F0455CC 2B0107D1 */ slti $at, $t8, 0x7d1 -/* 077FC0 7F0455D0 14200004 */ bnez $at, .L7F0455E4 -/* 077FC4 7F0455D4 AE1800E0 */ sw $t8, 0xe0($s0) -/* 077FC8 7F0455D8 8E390064 */ lw $t9, 0x64($s1) -/* 077FCC 7F0455DC 37290004 */ ori $t1, $t9, 4 -/* 077FD0 7F0455E0 AE290064 */ sw $t1, 0x64($s1) -.L7F0455E4: -/* 077FD4 7F0455E4 8E0A0000 */ lw $t2, ($s0) -/* 077FD8 7F0455E8 31480100 */ andi $t0, $t2, 0x100 -/* 077FDC 7F0455EC 5100002F */ beql $t0, $zero, .L7F0456AC -/* 077FE0 7F0455F0 C6260058 */ lwc1 $f6, 0x58($s1) -/* 077FE4 7F0455F4 922C0003 */ lbu $t4, 3($s1) -/* 077FE8 7F0455F8 24010008 */ li $at, 8 -/* 077FEC 7F0455FC 24120001 */ li $s2, 1 -/* 077FF0 7F045600 55810008 */ bnel $t4, $at, .L7F045624 -/* 077FF4 7F045604 8E040088 */ lw $a0, 0x88($s0) -/* 077FF8 7F045608 AFB10650 */ sw $s1, 0x650($sp) -/* 077FFC 7F04560C 822B0080 */ lb $t3, 0x80($s1) -/* 078000 7F045610 24010056 */ li $at, 86 -/* 078004 7F045614 55610003 */ bnel $t3, $at, .L7F045624 -/* 078008 7F045618 8E040088 */ lw $a0, 0x88($s0) -/* 07800C 7F04561C 00009025 */ move $s2, $zero -/* 078010 7F045620 8E040088 */ lw $a0, 0x88($s0) -.L7F045624: -/* 078014 7F045624 50800004 */ beql $a0, $zero, .L7F045638 -/* 078018 7F045628 02202025 */ move $a0, $s1 -/* 07801C 7F04562C 0FC0F446 */ jal sub_GAME_7F03D058 -/* 078020 7F045630 00002825 */ move $a1, $zero -/* 078024 7F045634 02202025 */ move $a0, $s1 -.L7F045638: -/* 078028 7F045638 260500D4 */ addiu $a1, $s0, 0xd4 -/* 07802C 7F04563C 27A60654 */ addiu $a2, $sp, 0x654 -/* 078030 7F045640 27A70660 */ addiu $a3, $sp, 0x660 -/* 078034 7F045644 AFA00010 */ sw $zero, 0x10($sp) -/* 078038 7F045648 0FC10BDD */ jal sub_GAME_7F042EB4 -/* 07803C 7F04564C AFB20014 */ sw $s2, 0x14($sp) -/* 078040 7F045650 AFA2066C */ sw $v0, 0x66c($sp) -/* 078044 7F045654 8E040088 */ lw $a0, 0x88($s0) -/* 078048 7F045658 50800004 */ beql $a0, $zero, .L7F04566C -/* 07804C 7F04565C 8FAE066C */ lw $t6, 0x66c($sp) -/* 078050 7F045660 0FC0F446 */ jal sub_GAME_7F03D058 -/* 078054 7F045664 24050001 */ li $a1, 1 -/* 078058 7F045668 8FAE066C */ lw $t6, 0x66c($sp) -.L7F04566C: -/* 07805C 7F04566C 24010001 */ li $at, 1 -/* 078060 7F045670 8FA20650 */ lw $v0, 0x650($sp) -/* 078064 7F045674 51C10009 */ beql $t6, $at, .L7F04569C -/* 078068 7F045678 8E180000 */ lw $t8, ($s0) -/* 07806C 7F04567C 50400007 */ beql $v0, $zero, .L7F04569C -/* 078070 7F045680 8E180000 */ lw $t8, ($s0) -/* 078074 7F045684 804D0080 */ lb $t5, 0x80($v0) -/* 078078 7F045688 24010056 */ li $at, 86 -/* 07807C 7F04568C 55A10003 */ bnel $t5, $at, .L7F04569C -/* 078080 7F045690 8E180000 */ lw $t8, ($s0) -/* 078084 7F045694 A4400082 */ sh $zero, 0x82($v0) -/* 078088 7F045698 8E180000 */ lw $t8, ($s0) -.L7F04569C: -/* 07808C 7F04569C 2401FEFF */ li $at, -257 -/* 078090 7F0456A0 03017824 */ and $t7, $t8, $at -/* 078094 7F0456A4 AE0F0000 */ sw $t7, ($s0) -/* 078098 7F0456A8 C6260058 */ lwc1 $f6, 0x58($s1) -.L7F0456AC: -/* 07809C 7F0456AC 3C198004 */ lui $t9, %hi(g_ClockTimer) # $t9, 0x8004 -/* 0780A0 7F0456B0 3C013F80 */ lui $at, 0x3f80 -/* 0780A4 7F0456B4 E7A6069C */ swc1 $f6, 0x69c($sp) -/* 0780A8 7F0456B8 C62A005C */ lwc1 $f10, 0x5c($s1) -/* 0780AC 7F0456BC E7AA06A0 */ swc1 $f10, 0x6a0($sp) -/* 0780B0 7F0456C0 C6240060 */ lwc1 $f4, 0x60($s1) -/* 0780B4 7F0456C4 E7A406A4 */ swc1 $f4, 0x6a4($sp) -/* 0780B8 7F0456C8 8E0200BC */ lw $v0, 0xbc($s0) -/* 0780BC 7F0456CC 58400005 */ blezl $v0, .L7F0456E4 -/* 0780C0 7F0456D0 8E2A006C */ lw $t2, 0x6c($s1) -/* 0780C4 7F0456D4 8F390FF4 */ lw $t9, %lo(g_ClockTimer)($t9) -/* 0780C8 7F0456D8 00594823 */ subu $t1, $v0, $t9 -/* 0780CC 7F0456DC AE0900BC */ sw $t1, 0xbc($s0) -/* 0780D0 7F0456E0 8E2A006C */ lw $t2, 0x6c($s1) -.L7F0456E4: -/* 0780D4 7F0456E4 8D480000 */ lw $t0, ($t2) -/* 0780D8 7F0456E8 310C0001 */ andi $t4, $t0, 1 -/* 0780DC 7F0456EC 51800351 */ beql $t4, $zero, .L7F046434 -/* 0780E0 7F0456F0 C6000060 */ lwc1 $f0, 0x60($s0) -/* 0780E4 7F0456F4 0FC1004E */ jal chrobjGetBboxFromObjectRecord -/* 0780E8 7F0456F8 02202025 */ move $a0, $s1 -/* 0780EC 7F0456FC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0780F0 7F045700 44814000 */ mtc1 $at, $f8 -/* 0780F4 7F045704 3C078004 */ lui $a3, %hi(g_ClockTimer) # $a3, 0x8004 -/* 0780F8 7F045708 24E70FF4 */ addiu $a3, %lo(g_ClockTimer) # addiu $a3, $a3, 0xff4 -/* 0780FC 7F04570C AFA20648 */ sw $v0, 0x648($sp) -/* 078100 7F045710 AFA00618 */ sw $zero, 0x618($sp) -/* 078104 7F045714 AFA00614 */ sw $zero, 0x614($sp) -/* 078108 7F045718 AFA0060C */ sw $zero, 0x60c($sp) -/* 07810C 7F04571C E7A80640 */ swc1 $f8, 0x640($sp) -/* 078110 7F045720 8E0B00A8 */ lw $t3, 0xa8($s0) -/* 078114 7F045724 8CEE0000 */ lw $t6, ($a3) -/* 078118 7F045728 C634005C */ lwc1 $f20, 0x5c($s1) -/* 07811C 7F04572C 00009025 */ move $s2, $zero -/* 078120 7F045730 016E6821 */ addu $t5, $t3, $t6 -/* 078124 7F045734 AE0D00A8 */ sw $t5, 0xa8($s0) -/* 078128 7F045738 C6260018 */ lwc1 $f6, 0x18($s1) -/* 07812C 7F04573C 3C018005 */ lui $at, %hi(rocket_initial_gravity_modifier) # $at, 0x8005 -/* 078130 7F045740 E7A60634 */ swc1 $f6, 0x634($sp) -/* 078134 7F045744 C62A001C */ lwc1 $f10, 0x1c($s1) -/* 078138 7F045748 E7AA0638 */ swc1 $f10, 0x638($sp) -/* 07813C 7F04574C C6240020 */ lwc1 $f4, 0x20($s1) -/* 078140 7F045750 E7A4063C */ swc1 $f4, 0x63c($sp) -/* 078144 7F045754 8E030000 */ lw $v1, ($s0) -/* 078148 7F045758 30780020 */ andi $t8, $v1, 0x20 -/* 07814C 7F04575C 1300004B */ beqz $t8, .L7F04588C -/* 078150 7F045760 00000000 */ nop -/* 078154 7F045764 C4328BD8 */ lwc1 $f18, %lo(rocket_initial_gravity_modifier)($at) -/* 078158 7F045768 C600001C */ lwc1 $f0, 0x1c($s0) -/* 07815C 7F04576C 3C028004 */ lui $v0, %hi(g_GlobalTimerDelta) # $v0, 0x8004 -/* 078160 7F045770 24421004 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, 0x1004 -/* 078164 7F045774 4612003C */ c.lt.s $f0, $f18 -/* 078168 7F045778 00000000 */ nop -/* 07816C 7F04577C 4502001C */ bc1fl .L7F0457F0 -/* 078170 7F045780 C60000B0 */ lwc1 $f0, 0xb0($s0) -/* 078174 7F045784 C6080014 */ lwc1 $f8, 0x14($s0) -/* 078178 7F045788 C4460000 */ lwc1 $f6, ($v0) -/* 07817C 7F04578C C60400B4 */ lwc1 $f4, 0xb4($s0) -/* 078180 7F045790 3C018005 */ lui $at, %hi(D_80052A9C) # $at, 0x8005 -/* 078184 7F045794 46064282 */ mul.s $f10, $f8, $f6 -/* 078188 7F045798 460A2200 */ add.s $f8, $f4, $f10 -/* 07818C 7F04579C E60800B4 */ swc1 $f8, 0xb4($s0) -/* 078190 7F0457A0 C4440000 */ lwc1 $f4, ($v0) -/* 078194 7F0457A4 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 078198 7F0457A8 C60800B0 */ lwc1 $f8, 0xb0($s0) -/* 07819C 7F0457AC 46043282 */ mul.s $f10, $f6, $f4 -/* 0781A0 7F0457B0 460A4180 */ add.s $f6, $f8, $f10 -/* 0781A4 7F0457B4 E60600B0 */ swc1 $f6, 0xb0($s0) -/* 0781A8 7F0457B8 C4480000 */ lwc1 $f8, ($v0) -/* 0781AC 7F0457BC C4248BDC */ lwc1 $f4, %lo(D_80052A9C)($at) -/* 0781B0 7F0457C0 46082282 */ mul.s $f10, $f4, $f8 -/* 0781B4 7F0457C4 460A0180 */ add.s $f6, $f0, $f10 -/* 0781B8 7F0457C8 E606001C */ swc1 $f6, 0x1c($s0) -/* 0781BC 7F0457CC C604001C */ lwc1 $f4, 0x1c($s0) -/* 0781C0 7F0457D0 4604903C */ c.lt.s $f18, $f4 -/* 0781C4 7F0457D4 00000000 */ nop -/* 0781C8 7F0457D8 45000002 */ bc1f .L7F0457E4 -/* 0781CC 7F0457DC 00000000 */ nop -/* 0781D0 7F0457E0 E612001C */ swc1 $f18, 0x1c($s0) -.L7F0457E4: -/* 0781D4 7F0457E4 10000029 */ b .L7F04588C -/* 0781D8 7F0457E8 8E030000 */ lw $v1, ($s0) -/* 0781DC 7F0457EC C60000B0 */ lwc1 $f0, 0xb0($s0) -.L7F0457F0: -/* 0781E0 7F0457F0 C7A806A0 */ lwc1 $f8, 0x6a0($sp) -/* 0781E4 7F0457F4 4600403C */ c.lt.s $f8, $f0 -/* 0781E8 7F0457F8 00000000 */ nop -/* 0781EC 7F0457FC 45000019 */ bc1f .L7F045864 -/* 0781F0 7F045800 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 0781F4 7F045804 C4261004 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) -/* 0781F8 7F045808 C60A0014 */ lwc1 $f10, 0x14($s0) -/* 0781FC 7F04580C C60800B4 */ lwc1 $f8, 0xb4($s0) -/* 078200 7F045810 46065102 */ mul.s $f4, $f10, $f6 -/* 078204 7F045814 46044280 */ add.s $f10, $f8, $f4 -/* 078208 7F045818 E60A00B4 */ swc1 $f10, 0xb4($s0) -/* 07820C 7F04581C C4281004 */ lwc1 $f8, %lo(g_GlobalTimerDelta)($at) -/* 078210 7F045820 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 078214 7F045824 3C018005 */ lui $at, %hi(D_80052AA0) # $at, 0x8005 -/* 078218 7F045828 46083102 */ mul.s $f4, $f6, $f8 -/* 07821C 7F04582C 46040280 */ add.s $f10, $f0, $f4 -/* 078220 7F045830 E60A00B0 */ swc1 $f10, 0xb0($s0) -/* 078224 7F045834 C7A806A0 */ lwc1 $f8, 0x6a0($sp) -/* 078228 7F045838 C60600B0 */ lwc1 $f6, 0xb0($s0) -/* 07822C 7F04583C C42A8BE0 */ lwc1 $f10, %lo(D_80052AA0)($at) -/* 078230 7F045840 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 078234 7F045844 46083101 */ sub.s $f4, $f6, $f8 -/* 078238 7F045848 46045182 */ mul.s $f6, $f10, $f4 -/* 07823C 7F04584C C42A1004 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 078240 7F045850 460A3102 */ mul.s $f4, $f6, $f10 -/* 078244 7F045854 46044180 */ add.s $f6, $f8, $f4 -/* 078248 7F045858 E7A606A0 */ swc1 $f6, 0x6a0($sp) -/* 07824C 7F04585C 1000000B */ b .L7F04588C -/* 078250 7F045860 8E030000 */ lw $v1, ($s0) -.L7F045864: -/* 078254 7F045864 E7A006A0 */ swc1 $f0, 0x6a0($sp) -/* 078258 7F045868 8E0F0000 */ lw $t7, ($s0) -/* 07825C 7F04586C 2401FFDF */ li $at, -33 -/* 078260 7F045870 C60A00B4 */ lwc1 $f10, 0xb4($s0) -/* 078264 7F045874 01E1C824 */ and $t9, $t7, $at -/* 078268 7F045878 AE190000 */ sw $t9, ($s0) -/* 07826C 7F04587C 37230010 */ ori $v1, $t9, 0x10 -/* 078270 7F045880 E616001C */ swc1 $f22, 0x1c($s0) -/* 078274 7F045884 AE030000 */ sw $v1, ($s0) -/* 078278 7F045888 E60A0008 */ swc1 $f10, 8($s0) -.L7F04588C: -/* 07827C 7F04588C 3C028004 */ lui $v0, %hi(g_GlobalTimerDelta) # $v0, 0x8004 -/* 078280 7F045890 24421004 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, 0x1004 -/* 078284 7F045894 3C018005 */ lui $at, %hi(prop_projectile_gravity_modifier) # $at, 0x8005 -/* 078288 7F045898 30680010 */ andi $t0, $v1, 0x10 -/* 07828C 7F04589C C4328BE4 */ lwc1 $f18, %lo(prop_projectile_gravity_modifier)($at) -/* 078290 7F0458A0 C4420000 */ lwc1 $f2, ($v0) -/* 078294 7F0458A4 C600001C */ lwc1 $f0, 0x1c($s0) -/* 078298 7F0458A8 15000015 */ bnez $t0, .L7F045900 -/* 07829C 7F0458AC C6100014 */ lwc1 $f16, 0x14($s0) -/* 0782A0 7F0458B0 46008100 */ add.s $f4, $f16, $f0 -/* 0782A4 7F0458B4 C6080008 */ lwc1 $f8, 8($s0) -/* 0782A8 7F0458B8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0782AC 7F0458BC 46022182 */ mul.s $f6, $f4, $f2 -/* 0782B0 7F0458C0 46064280 */ add.s $f10, $f8, $f6 -/* 0782B4 7F0458C4 E60A0008 */ swc1 $f10, 8($s0) -/* 0782B8 7F0458C8 C4420000 */ lwc1 $f2, ($v0) -/* 0782BC 7F0458CC C60C0008 */ lwc1 $f12, 8($s0) -/* 0782C0 7F0458D0 44815000 */ mtc1 $at, $f10 -/* 0782C4 7F0458D4 46029102 */ mul.s $f4, $f18, $f2 -/* 0782C8 7F0458D8 46046381 */ sub.s $f14, $f12, $f4 -/* 0782CC 7F0458DC 460E6200 */ add.s $f8, $f12, $f14 -/* 0782D0 7F0458E0 46081182 */ mul.s $f6, $f2, $f8 -/* 0782D4 7F0458E4 C7A806A0 */ lwc1 $f8, 0x6a0($sp) -/* 0782D8 7F0458E8 460A3102 */ mul.s $f4, $f6, $f10 -/* 0782DC 7F0458EC 46044180 */ add.s $f6, $f8, $f4 -/* 0782E0 7F0458F0 E7A606A0 */ swc1 $f6, 0x6a0($sp) -/* 0782E4 7F0458F4 E60E0008 */ swc1 $f14, 8($s0) -/* 0782E8 7F0458F8 1000000C */ b .L7F04592C -/* 0782EC 7F0458FC C4420000 */ lwc1 $f2, ($v0) -.L7F045900: -/* 0782F0 7F045900 46008200 */ add.s $f8, $f16, $f0 -/* 0782F4 7F045904 C60A0008 */ lwc1 $f10, 8($s0) -/* 0782F8 7F045908 46024102 */ mul.s $f4, $f8, $f2 -/* 0782FC 7F04590C 46045180 */ add.s $f6, $f10, $f4 -/* 078300 7F045910 E6060008 */ swc1 $f6, 8($s0) -/* 078304 7F045914 C60A0008 */ lwc1 $f10, 8($s0) -/* 078308 7F045918 C4420000 */ lwc1 $f2, ($v0) -/* 07830C 7F04591C C7A806A0 */ lwc1 $f8, 0x6a0($sp) -/* 078310 7F045920 46025102 */ mul.s $f4, $f10, $f2 -/* 078314 7F045924 46044180 */ add.s $f6, $f8, $f4 -/* 078318 7F045928 E7A606A0 */ swc1 $f6, 0x6a0($sp) -.L7F04592C: -/* 07831C 7F04592C C6080010 */ lwc1 $f8, 0x10($s0) -/* 078320 7F045930 C60A0004 */ lwc1 $f10, 4($s0) -/* 078324 7F045934 26240018 */ addiu $a0, $s1, 0x18 -/* 078328 7F045938 46024102 */ mul.s $f4, $f8, $f2 -/* 07832C 7F04593C C6080018 */ lwc1 $f8, 0x18($s0) -/* 078330 7F045940 26050020 */ addiu $a1, $s0, 0x20 -/* 078334 7F045944 46045180 */ add.s $f6, $f10, $f4 -/* 078338 7F045948 E6060004 */ swc1 $f6, 4($s0) -/* 07833C 7F04594C C44A0000 */ lwc1 $f10, ($v0) -/* 078340 7F045950 C606000C */ lwc1 $f6, 0xc($s0) -/* 078344 7F045954 460A4102 */ mul.s $f4, $f8, $f10 -/* 078348 7F045958 46043200 */ add.s $f8, $f6, $f4 -/* 07834C 7F04595C C6060004 */ lwc1 $f6, 4($s0) -/* 078350 7F045960 E608000C */ swc1 $f8, 0xc($s0) -/* 078354 7F045964 C4420000 */ lwc1 $f2, ($v0) -/* 078358 7F045968 C7AA069C */ lwc1 $f10, 0x69c($sp) -/* 07835C 7F04596C 8CE60000 */ lw $a2, ($a3) -/* 078360 7F045970 46023102 */ mul.s $f4, $f6, $f2 -/* 078364 7F045974 C7A606A4 */ lwc1 $f6, 0x6a4($sp) -/* 078368 7F045978 46045200 */ add.s $f8, $f10, $f4 -/* 07836C 7F04597C E7A8069C */ swc1 $f8, 0x69c($sp) -/* 078370 7F045980 C60A000C */ lwc1 $f10, 0xc($s0) -/* 078374 7F045984 AFA50070 */ sw $a1, 0x70($sp) -/* 078378 7F045988 AFA40074 */ sw $a0, 0x74($sp) -/* 07837C 7F04598C 46025102 */ mul.s $f4, $f10, $f2 -/* 078380 7F045990 46043200 */ add.s $f8, $f6, $f4 -/* 078384 7F045994 0FC1603E */ jal sub_GAME_7F057DF8 -/* 078388 7F045998 E7A806A4 */ swc1 $f8, 0x6a4($sp) -/* 07838C 7F04599C 922C0003 */ lbu $t4, 3($s1) -/* 078390 7F0459A0 24010008 */ li $at, 8 -/* 078394 7F0459A4 55810013 */ bnel $t4, $at, .L7F0459F4 -/* 078398 7F0459A8 8E040088 */ lw $a0, 0x88($s0) -/* 07839C 7F0459AC 82220080 */ lb $v0, 0x80($s1) -/* 0783A0 7F0459B0 2401001D */ li $at, 29 -/* 0783A4 7F0459B4 1041000D */ beq $v0, $at, .L7F0459EC -/* 0783A8 7F0459B8 2401001B */ li $at, 27 -/* 0783AC 7F0459BC 1041000B */ beq $v0, $at, .L7F0459EC -/* 0783B0 7F0459C0 2401001C */ li $at, 28 -/* 0783B4 7F0459C4 10410009 */ beq $v0, $at, .L7F0459EC -/* 0783B8 7F0459C8 24010021 */ li $at, 33 -/* 0783BC 7F0459CC 10410007 */ beq $v0, $at, .L7F0459EC -/* 0783C0 7F0459D0 2401002F */ li $at, 47 -/* 0783C4 7F0459D4 10410005 */ beq $v0, $at, .L7F0459EC -/* 0783C8 7F0459D8 24010030 */ li $at, 48 -/* 0783CC 7F0459DC 10410003 */ beq $v0, $at, .L7F0459EC -/* 0783D0 7F0459E0 24010022 */ li $at, 34 -/* 0783D4 7F0459E4 54410003 */ bnel $v0, $at, .L7F0459F4 -/* 0783D8 7F0459E8 8E040088 */ lw $a0, 0x88($s0) -.L7F0459EC: -/* 0783DC 7F0459EC 24120001 */ li $s2, 1 -/* 0783E0 7F0459F0 8E040088 */ lw $a0, 0x88($s0) -.L7F0459F4: -/* 0783E4 7F0459F4 50800004 */ beql $a0, $zero, .L7F045A08 -/* 0783E8 7F0459F8 02202025 */ move $a0, $s1 -/* 0783EC 7F0459FC 0FC0F446 */ jal sub_GAME_7F03D058 -/* 0783F0 7F045A00 00002825 */ move $a1, $zero -/* 0783F4 7F045A04 02202025 */ move $a0, $s1 -.L7F045A08: -/* 0783F8 7F045A08 27A5069C */ addiu $a1, $sp, 0x69c -/* 0783FC 7F045A0C 27A6061C */ addiu $a2, $sp, 0x61c -/* 078400 7F045A10 27A70628 */ addiu $a3, $sp, 0x628 -/* 078404 7F045A14 AFB20010 */ sw $s2, 0x10($sp) -/* 078408 7F045A18 0FC10BDD */ jal sub_GAME_7F042EB4 -/* 07840C 7F045A1C AFA00014 */ sw $zero, 0x14($sp) -/* 078410 7F045A20 AFA2066C */ sw $v0, 0x66c($sp) -/* 078414 7F045A24 8E040088 */ lw $a0, 0x88($s0) -/* 078418 7F045A28 50800004 */ beql $a0, $zero, .L7F045A3C -/* 07841C 7F045A2C 8FAE066C */ lw $t6, 0x66c($sp) -/* 078420 7F045A30 0FC0F446 */ jal sub_GAME_7F03D058 -/* 078424 7F045A34 24050001 */ li $a1, 1 -/* 078428 7F045A38 8FAE066C */ lw $t6, 0x66c($sp) -.L7F045A3C: -/* 07842C 7F045A3C 240B0001 */ li $t3, 1 -/* 078430 7F045A40 24010002 */ li $at, 2 -/* 078434 7F045A44 15C10042 */ bne $t6, $at, .L7F045B50 -/* 078438 7F045A48 AFAB0698 */ sw $t3, 0x698($sp) -/* 07843C 7F045A4C 3C038003 */ lui $v1, %hi(D_80030B0C) # $v1, 0x8003 -/* 078440 7F045A50 8C63C05C */ lw $v1, %lo(D_80030B0C)($v1) -/* 078444 7F045A54 10600007 */ beqz $v1, .L7F045A74 -/* 078448 7F045A58 00000000 */ nop -/* 07844C 7F045A5C 90620000 */ lbu $v0, ($v1) -/* 078450 7F045A60 24010003 */ li $at, 3 -/* 078454 7F045A64 1041003A */ beq $v0, $at, .L7F045B50 -/* 078458 7F045A68 24010006 */ li $at, 6 -/* 07845C 7F045A6C 50410039 */ beql $v0, $at, .L7F045B54 -/* 078460 7F045A70 8FAE060C */ lw $t6, 0x60c($sp) -.L7F045A74: -/* 078464 7F045A74 10600007 */ beqz $v1, .L7F045A94 -/* 078468 7F045A78 00002025 */ move $a0, $zero -/* 07846C 7F045A7C 8C620004 */ lw $v0, 4($v1) -/* 078470 7F045A80 8C4D0064 */ lw $t5, 0x64($v0) -/* 078474 7F045A84 31B80080 */ andi $t8, $t5, 0x80 -/* 078478 7F045A88 13000002 */ beqz $t8, .L7F045A94 -/* 07847C 7F045A8C 00000000 */ nop -/* 078480 7F045A90 24040001 */ li $a0, 1 -.L7F045A94: -/* 078484 7F045A94 5480002F */ bnezl $a0, .L7F045B54 -/* 078488 7F045A98 8FAE060C */ lw $t6, 0x60c($sp) -/* 07848C 7F045A9C 0FC0FF0C */ jal projectileFree -/* 078490 7F045AA0 02002025 */ move $a0, $s0 -/* 078494 7F045AA4 8E2F0064 */ lw $t7, 0x64($s1) -/* 078498 7F045AA8 2401FF7F */ li $at, -129 -/* 07849C 7F045AAC AE20006C */ sw $zero, 0x6c($s1) -/* 0784A0 7F045AB0 01E1C824 */ and $t9, $t7, $at -/* 0784A4 7F045AB4 AE390064 */ sw $t9, 0x64($s1) -/* 0784A8 7F045AB8 92620001 */ lbu $v0, 1($s3) -/* 0784AC 7F045ABC 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 0784B0 7F045AC0 240500F1 */ li $a1, 241 -/* 0784B4 7F045AC4 30490008 */ andi $t1, $v0, 8 -/* 0784B8 7F045AC8 11200003 */ beqz $t1, .L7F045AD8 -/* 0784BC 7F045ACC 00003025 */ move $a2, $zero -/* 0784C0 7F045AD0 344A0010 */ ori $t2, $v0, 0x10 -/* 0784C4 7F045AD4 A26A0001 */ sb $t2, 1($s3) -.L7F045AD8: -/* 0784C8 7F045AD8 0C00209A */ jal sndPlaySfx -/* 0784CC 7F045ADC 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0784D0 7F045AE0 00402025 */ move $a0, $v0 -/* 0784D4 7F045AE4 0FC14F3C */ jal chrobjSndCreatePostEventDefault -/* 0784D8 7F045AE8 26650008 */ addiu $a1, $s3, 8 -/* 0784DC 7F045AEC 8E680014 */ lw $t0, 0x14($s3) -/* 0784E0 7F045AF0 82240080 */ lb $a0, 0x80($s1) -/* 0784E4 7F045AF4 0FC15EB9 */ jal objectivestatusCheckDeposit -/* 0784E8 7F045AF8 91050003 */ lbu $a1, 3($t0) -/* 0784EC 7F045AFC 02202025 */ move $a0, $s1 -/* 0784F0 7F045B00 27A5061C */ addiu $a1, $sp, 0x61c -/* 0784F4 7F045B04 8E660014 */ lw $a2, 0x14($s3) -/* 0784F8 7F045B08 0FC10E9E */ jal sub_GAME_7F0439B8 -/* 0784FC 7F045B0C 27A70628 */ addiu $a3, $sp, 0x628 -/* 078500 7F045B10 3C058003 */ lui $a1, %hi(D_80030B0C) # $a1, 0x8003 -/* 078504 7F045B14 8CA5C05C */ lw $a1, %lo(D_80030B0C)($a1) -/* 078508 7F045B18 02602025 */ move $a0, $s3 -/* 07850C 7F045B1C 3C068006 */ lui $a2, %hi(g_CurrentProjectileModel) # $a2, 0x8006 -/* 078510 7F045B20 10A0000B */ beqz $a1, .L7F045B50 -/* 078514 7F045B24 3C078006 */ lui $a3, %hi(dword_CODE_bss_80075B74) # $a3, 0x8006 -/* 078518 7F045B28 8E720014 */ lw $s2, 0x14($s3) -/* 07851C 7F045B2C 8CC64AB0 */ lw $a2, %lo(g_CurrentProjectileModel)($a2) -/* 078520 7F045B30 0FC10ECB */ jal objEmbed -/* 078524 7F045B34 8CE74AB4 */ lw $a3, %lo(dword_CODE_bss_80075B74)($a3) -/* 078528 7F045B38 10400005 */ beqz $v0, .L7F045B50 -/* 07852C 7F045B3C 240C0005 */ li $t4, 5 -/* 078530 7F045B40 AE720014 */ sw $s2, 0x14($s3) -/* 078534 7F045B44 240B0001 */ li $t3, 1 -/* 078538 7F045B48 AFAC0688 */ sw $t4, 0x688($sp) -/* 07853C 7F045B4C AFAB060C */ sw $t3, 0x60c($sp) -.L7F045B50: -/* 078540 7F045B50 8FAE060C */ lw $t6, 0x60c($sp) -.L7F045B54: -/* 078544 7F045B54 15C000EC */ bnez $t6, .L7F045F08 -/* 078548 7F045B58 3C128003 */ lui $s2, %hi(D_80030B0C) # $s2, 0x8003 -/* 07854C 7F045B5C 8E52C05C */ lw $s2, %lo(D_80030B0C)($s2) -/* 078550 7F045B60 524000EA */ beql $s2, $zero, .L7F045F0C -/* 078554 7F045B64 8FAE060C */ lw $t6, 0x60c($sp) -/* 078558 7F045B68 922D0003 */ lbu $t5, 3($s1) -/* 07855C 7F045B6C 24010008 */ li $at, 8 -/* 078560 7F045B70 55A100E6 */ bnel $t5, $at, .L7F045F0C -/* 078564 7F045B74 8FAE060C */ lw $t6, 0x60c($sp) -/* 078568 7F045B78 82220080 */ lb $v0, 0x80($s1) -/* 07856C 7F045B7C 24010003 */ li $at, 3 -/* 078570 7F045B80 544100C3 */ bnel $v0, $at, .L7F045E90 -/* 078574 7F045B84 24010056 */ li $at, 86 -/* 078578 7F045B88 92420000 */ lbu $v0, ($s2) -/* 07857C 7F045B8C 24010003 */ li $at, 3 -/* 078580 7F045B90 1041000D */ beq $v0, $at, .L7F045BC8 -/* 078584 7F045B94 24010006 */ li $at, 6 -/* 078588 7F045B98 544100DC */ bnel $v0, $at, .L7F045F0C -/* 07858C 7F045B9C 8FAE060C */ lw $t6, 0x60c($sp) -/* 078590 7F045BA0 8E580004 */ lw $t8, 4($s2) -/* 078594 7F045BA4 530000D9 */ beql $t8, $zero, .L7F045F0C -/* 078598 7F045BA8 8FAE060C */ lw $t6, 0x60c($sp) -/* 07859C 7F045BAC 0FC269A7 */ jal getPlayerPointerIndex -/* 0785A0 7F045BB0 02402025 */ move $a0, $s2 -/* 0785A4 7F045BB4 0FC269A4 */ jal get_cur_playernum -/* 0785A8 7F045BB8 00409025 */ move $s2, $v0 -/* 0785AC 7F045BBC 105200D2 */ beq $v0, $s2, .L7F045F08 -/* 0785B0 7F045BC0 3C128003 */ lui $s2, %hi(D_80030B0C) # $s2, 0x8003 -/* 0785B4 7F045BC4 8E52C05C */ lw $s2, %lo(D_80030B0C)($s2) -.L7F045BC8: -/* 0785B8 7F045BC8 8E22006C */ lw $v0, 0x6c($s1) -/* 0785BC 7F045BCC 8E440004 */ lw $a0, 4($s2) -/* 0785C0 7F045BD0 8C4F0000 */ lw $t7, ($v0) -/* 0785C4 7F045BD4 31F90001 */ andi $t9, $t7, 1 -/* 0785C8 7F045BD8 532000CC */ beql $t9, $zero, .L7F045F0C -/* 0785CC 7F045BDC 8FAE060C */ lw $t6, 0x60c($sp) -/* 0785D0 7F045BE0 8C490090 */ lw $t1, 0x90($v0) -/* 0785D4 7F045BE4 5D2000C9 */ bgtzl $t1, .L7F045F0C -/* 0785D8 7F045BE8 8FAE060C */ lw $t6, 0x60c($sp) -/* 0785DC 7F045BEC 8E2A0064 */ lw $t2, 0x64($s1) -/* 0785E0 7F045BF0 3C068006 */ lui $a2, %hi(flt_CODE_bss_80075B78) # $a2, 0x8006 -/* 0785E4 7F045BF4 24C64AB8 */ addiu $a2, %lo(flt_CODE_bss_80075B78) # addiu $a2, $a2, 0x4ab8 -/* 0785E8 7F045BF8 31480020 */ andi $t0, $t2, 0x20 -/* 0785EC 7F045BFC 110000C2 */ beqz $t0, .L7F045F08 -/* 0785F0 7F045C00 3C058003 */ lui $a1, %hi(bodypartshot) # $a1, 0x8003 -/* 0785F4 7F045C04 82270080 */ lb $a3, 0x80($s1) -/* 0785F8 7F045C08 240C0001 */ li $t4, 1 -/* 0785FC 7F045C0C AFAC0010 */ sw $t4, 0x10($sp) -/* 078600 7F045C10 0FC09CA5 */ jal handles_shot_actors -/* 078604 7F045C14 8CA5C060 */ lw $a1, %lo(bodypartshot)($a1) -/* 078608 7F045C18 104000BB */ beqz $v0, .L7F045F08 -/* 07860C 7F045C1C 240B0001 */ li $t3, 1 -/* 078610 7F045C20 AFAB060C */ sw $t3, 0x60c($sp) -/* 078614 7F045C24 C610008C */ lwc1 $f16, 0x8c($s0) -/* 078618 7F045C28 C7AA0628 */ lwc1 $f10, 0x628($sp) -/* 07861C 7F045C2C 4610B03C */ c.lt.s $f22, $f16 -/* 078620 7F045C30 00000000 */ nop -/* 078624 7F045C34 4502001D */ bc1fl .L7F045CAC -/* 078628 7F045C38 8E0E0000 */ lw $t6, ($s0) -/* 07862C 7F045C3C C6020004 */ lwc1 $f2, 4($s0) -/* 078630 7F045C40 C60C0008 */ lwc1 $f12, 8($s0) -/* 078634 7F045C44 C7A4062C */ lwc1 $f4, 0x62c($sp) -/* 078638 7F045C48 460A1182 */ mul.s $f6, $f2, $f10 -/* 07863C 7F045C4C C600000C */ lwc1 $f0, 0xc($s0) -/* 078640 7F045C50 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 078644 7F045C54 46046202 */ mul.s $f8, $f12, $f4 -/* 078648 7F045C58 46083100 */ add.s $f4, $f6, $f8 -/* 07864C 7F045C5C C7A60630 */ lwc1 $f6, 0x630($sp) -/* 078650 7F045C60 46003202 */ mul.s $f8, $f6, $f0 -/* 078654 7F045C64 44813000 */ mtc1 $at, $f6 -/* 078658 7F045C68 46044380 */ add.s $f14, $f8, $f4 -/* 07865C 7F045C6C 46068200 */ add.s $f8, $f16, $f6 -/* 078660 7F045C70 46004107 */ neg.s $f4, $f8 -/* 078664 7F045C74 46047382 */ mul.s $f14, $f14, $f4 -/* 078668 7F045C78 00000000 */ nop -/* 07866C 7F045C7C 460A7182 */ mul.s $f6, $f14, $f10 -/* 078670 7F045C80 46061200 */ add.s $f8, $f2, $f6 -/* 078674 7F045C84 E6080004 */ swc1 $f8, 4($s0) -/* 078678 7F045C88 C7A4062C */ lwc1 $f4, 0x62c($sp) -/* 07867C 7F045C8C 46047282 */ mul.s $f10, $f14, $f4 -/* 078680 7F045C90 460A6180 */ add.s $f6, $f12, $f10 -/* 078684 7F045C94 E6060008 */ swc1 $f6, 8($s0) -/* 078688 7F045C98 C7A80630 */ lwc1 $f8, 0x630($sp) -/* 07868C 7F045C9C 46087102 */ mul.s $f4, $f14, $f8 -/* 078690 7F045CA0 46040280 */ add.s $f10, $f0, $f4 -/* 078694 7F045CA4 E60A000C */ swc1 $f10, 0xc($s0) -/* 078698 7F045CA8 8E0E0000 */ lw $t6, ($s0) -.L7F045CAC: -/* 07869C 7F045CAC 31CD0200 */ andi $t5, $t6, 0x200 -/* 0786A0 7F045CB0 55A00004 */ bnezl $t5, .L7F045CC4 -/* 0786A4 7F045CB4 8E180090 */ lw $t8, 0x90($s0) -/* 0786A8 7F045CB8 0FC15F70 */ jal mtxLoadRandomRotation -/* 0786AC 7F045CBC 8FA40070 */ lw $a0, 0x70($sp) -/* 0786B0 7F045CC0 8E180090 */ lw $t8, 0x90($s0) -.L7F045CC4: -/* 0786B4 7F045CC4 3C058003 */ lui $a1, %hi(D_80030B0C) # $a1, 0x8003 -/* 0786B8 7F045CC8 2406FFFF */ li $a2, -1 -/* 0786BC 7F045CCC 270F0001 */ addiu $t7, $t8, 1 -/* 0786C0 7F045CD0 AE0F0090 */ sw $t7, 0x90($s0) -/* 0786C4 7F045CD4 8CA5C05C */ lw $a1, %lo(D_80030B0C)($a1) -/* 0786C8 7F045CD8 0FC19238 */ jal recall_joy2_hits_edit_detail_edit_flag -/* 0786CC 7F045CDC 82240080 */ lb $a0, 0x80($s1) -/* 0786D0 7F045CE0 3C198003 */ lui $t9, %hi(D_80030B0C) # $t9, 0x8003 -/* 0786D4 7F045CE4 8F39C05C */ lw $t9, %lo(D_80030B0C)($t9) -/* 0786D8 7F045CE8 3C028003 */ lui $v0, %hi(bodypartshot) # $v0, 0x8003 -/* 0786DC 7F045CEC 93290001 */ lbu $t1, 1($t9) -/* 0786E0 7F045CF0 312A0002 */ andi $t2, $t1, 2 -/* 0786E4 7F045CF4 51400085 */ beql $t2, $zero, .L7F045F0C -/* 0786E8 7F045CF8 8FAE060C */ lw $t6, 0x60c($sp) -/* 0786EC 7F045CFC 8C42C060 */ lw $v0, %lo(bodypartshot)($v0) -/* 0786F0 7F045D00 24010064 */ li $at, 100 -/* 0786F4 7F045D04 10410080 */ beq $v0, $at, .L7F045F08 -/* 0786F8 7F045D08 2401006E */ li $at, 110 -/* 0786FC 7F045D0C 1041007E */ beq $v0, $at, .L7F045F08 -/* 078700 7F045D10 3C048006 */ lui $a0, %hi(g_CurrentProjectileModel) # $a0, 0x8006 -/* 078704 7F045D14 3C058006 */ lui $a1, %hi(dword_CODE_bss_80075B74) # $a1, 0x8006 -/* 078708 7F045D18 8CA54AB4 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 07870C 7F045D1C 8C844AB0 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 078710 7F045D20 0FC1B366 */ jal modelFindNodeMtx -/* 078714 7F045D24 00003025 */ move $a2, $zero -/* 078718 7F045D28 C7A6061C */ lwc1 $f6, 0x61c($sp) -/* 07871C 7F045D2C C7A80620 */ lwc1 $f8, 0x620($sp) -/* 078720 7F045D30 C7A40624 */ lwc1 $f4, 0x624($sp) -/* 078724 7F045D34 00409025 */ move $s2, $v0 -/* 078728 7F045D38 E7A605D4 */ swc1 $f6, 0x5d4($sp) -/* 07872C 7F045D3C E7A805D8 */ swc1 $f8, 0x5d8($sp) -/* 078730 7F045D40 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 078734 7F045D44 E7A405DC */ swc1 $f4, 0x5dc($sp) -/* 078738 7F045D48 00402025 */ move $a0, $v0 -/* 07873C 7F045D4C 0FC16247 */ jal mtx4TransformVecInPlace -/* 078740 7F045D50 27A505D4 */ addiu $a1, $sp, 0x5d4 -/* 078744 7F045D54 C7AA05D4 */ lwc1 $f10, 0x5d4($sp) -/* 078748 7F045D58 C6460030 */ lwc1 $f6, 0x30($s2) -/* 07874C 7F045D5C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 078750 7F045D60 44810000 */ mtc1 $at, $f0 -/* 078754 7F045D64 46065201 */ sub.s $f8, $f10, $f6 -/* 078758 7F045D68 3C048006 */ lui $a0, %hi(g_CurrentProjectileModel) # $a0, 0x8006 -/* 07875C 7F045D6C 3C058006 */ lui $a1, %hi(dword_CODE_bss_80075B74) # $a1, 0x8006 -/* 078760 7F045D70 8CA54AB4 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 078764 7F045D74 46004102 */ mul.s $f4, $f8, $f0 -/* 078768 7F045D78 C7A805D8 */ lwc1 $f8, 0x5d8($sp) -/* 07876C 7F045D7C 8C844AB0 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 078770 7F045D80 46045180 */ add.s $f6, $f10, $f4 -/* 078774 7F045D84 E7A605D4 */ swc1 $f6, 0x5d4($sp) -/* 078778 7F045D88 C64A0034 */ lwc1 $f10, 0x34($s2) -/* 07877C 7F045D8C 460A4101 */ sub.s $f4, $f8, $f10 -/* 078780 7F045D90 46002182 */ mul.s $f6, $f4, $f0 -/* 078784 7F045D94 C7A405DC */ lwc1 $f4, 0x5dc($sp) -/* 078788 7F045D98 46064280 */ add.s $f10, $f8, $f6 -/* 07878C 7F045D9C E7AA05D8 */ swc1 $f10, 0x5d8($sp) -/* 078790 7F045DA0 C6480038 */ lwc1 $f8, 0x38($s2) -/* 078794 7F045DA4 46082181 */ sub.s $f6, $f4, $f8 -/* 078798 7F045DA8 46003282 */ mul.s $f10, $f6, $f0 -/* 07879C 7F045DAC 460A2200 */ add.s $f8, $f4, $f10 -/* 0787A0 7F045DB0 0FC1B4D5 */ jal getjointsize -/* 0787A4 7F045DB4 E7A805DC */ swc1 $f8, 0x5dc($sp) -/* 0787A8 7F045DB8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0787AC 7F045DBC 44813000 */ mtc1 $at, $f6 -/* 0787B0 7F045DC0 3C018006 */ lui $at, %hi(flt_CODE_bss_80075B88) # $at, 0x8006 -/* 0787B4 7F045DC4 C42A4AC8 */ lwc1 $f10, %lo(flt_CODE_bss_80075B88)($at) -/* 0787B8 7F045DC8 46060102 */ mul.s $f4, $f0, $f6 -/* 0787BC 7F045DCC C7A605D4 */ lwc1 $f6, 0x5d4($sp) -/* 0787C0 7F045DD0 3C048006 */ lui $a0, %hi(g_CurrentProjectileModel) # $a0, 0x8006 -/* 0787C4 7F045DD4 3C058006 */ lui $a1, %hi(dword_CODE_bss_80075B74) # $a1, 0x8006 -/* 0787C8 7F045DD8 8CA54AB4 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 0787CC 7F045DDC 8C844AB0 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 0787D0 7F045DE0 460A2202 */ mul.s $f8, $f4, $f10 -/* 0787D4 7F045DE4 46083101 */ sub.s $f4, $f6, $f8 -/* 0787D8 7F045DE8 0FC1B4D5 */ jal getjointsize -/* 0787DC 7F045DEC E7A405D4 */ swc1 $f4, 0x5d4($sp) -/* 0787E0 7F045DF0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0787E4 7F045DF4 44815000 */ mtc1 $at, $f10 -/* 0787E8 7F045DF8 3C018006 */ lui $at, %hi(flt_CODE_bss_80075B78) # $at, 0x8006 -/* 0787EC 7F045DFC C4284ACC */ lwc1 $f8, %lo(flt_CODE_bss_80075B78+0x14)($at) -/* 0787F0 7F045E00 460A0182 */ mul.s $f6, $f0, $f10 -/* 0787F4 7F045E04 C7AA05D8 */ lwc1 $f10, 0x5d8($sp) -/* 0787F8 7F045E08 3C048006 */ lui $a0, %hi(g_CurrentProjectileModel) # $a0, 0x8006 -/* 0787FC 7F045E0C 3C058006 */ lui $a1, %hi(dword_CODE_bss_80075B74) # $a1, 0x8006 -/* 078800 7F045E10 8CA54AB4 */ lw $a1, %lo(dword_CODE_bss_80075B74)($a1) -/* 078804 7F045E14 8C844AB0 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 078808 7F045E18 46083102 */ mul.s $f4, $f6, $f8 -/* 07880C 7F045E1C 46045181 */ sub.s $f6, $f10, $f4 -/* 078810 7F045E20 0FC1B4D5 */ jal getjointsize -/* 078814 7F045E24 E7A605D8 */ swc1 $f6, 0x5d8($sp) -/* 078818 7F045E28 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07881C 7F045E2C 44814000 */ mtc1 $at, $f8 -/* 078820 7F045E30 3C018006 */ lui $at, %hi(flt_CODE_bss_80075B88) # $at, 0x8006 -/* 078824 7F045E34 C4244AD0 */ lwc1 $f4, %lo(flt_CODE_bss_80075B88+0x8)($at) -/* 078828 7F045E38 46080282 */ mul.s $f10, $f0, $f8 -/* 07882C 7F045E3C C7A805DC */ lwc1 $f8, 0x5dc($sp) -/* 078830 7F045E40 02402025 */ move $a0, $s2 -/* 078834 7F045E44 27A50594 */ addiu $a1, $sp, 0x594 -/* 078838 7F045E48 46045182 */ mul.s $f6, $f10, $f4 -/* 07883C 7F045E4C 46064281 */ sub.s $f10, $f8, $f6 -/* 078840 7F045E50 0FC168C3 */ jal matrix_4x4_set_inverse_rotation_and_translation -/* 078844 7F045E54 E7AA05DC */ swc1 $f10, 0x5dc($sp) -/* 078848 7F045E58 27A40594 */ addiu $a0, $sp, 0x594 -/* 07884C 7F045E5C 0FC16247 */ jal mtx4TransformVecInPlace -/* 078850 7F045E60 27A505D4 */ addiu $a1, $sp, 0x5d4 -/* 078854 7F045E64 3C048006 */ lui $a0, %hi(g_CurrentProjectileModel) # $a0, 0x8006 -/* 078858 7F045E68 3C058003 */ lui $a1, %hi(bodypartshot) # $a1, 0x8003 -/* 07885C 7F045E6C 3C068006 */ lui $a2, %hi(dword_CODE_bss_80075B74) # $a2, 0x8006 -/* 078860 7F045E70 8CC64AB4 */ lw $a2, %lo(dword_CODE_bss_80075B74)($a2) -/* 078864 7F045E74 8CA5C060 */ lw $a1, %lo(bodypartshot)($a1) -/* 078868 7F045E78 8C844AB0 */ lw $a0, %lo(g_CurrentProjectileModel)($a0) -/* 07886C 7F045E7C 0FC08869 */ jal sub_GAME_7F0221DC -/* 078870 7F045E80 27A705D4 */ addiu $a3, $sp, 0x5d4 -/* 078874 7F045E84 10000021 */ b .L7F045F0C -/* 078878 7F045E88 8FAE060C */ lw $t6, 0x60c($sp) -/* 07887C 7F045E8C 24010056 */ li $at, 86 -.L7F045E90: -/* 078880 7F045E90 5441001E */ bnel $v0, $at, .L7F045F0C -/* 078884 7F045E94 8FAE060C */ lw $t6, 0x60c($sp) -/* 078888 7F045E98 92420000 */ lbu $v0, ($s2) -/* 07888C 7F045E9C 24080001 */ li $t0, 1 -/* 078890 7F045EA0 24010003 */ li $at, 3 -/* 078894 7F045EA4 14410008 */ bne $v0, $at, .L7F045EC8 -/* 078898 7F045EA8 AFA8060C */ sw $t0, 0x60c($sp) -/* 07889C 7F045EAC 8E440004 */ lw $a0, 4($s2) -/* 0788A0 7F045EB0 26250058 */ addiu $a1, $s1, 0x58 -/* 0788A4 7F045EB4 3C064000 */ lui $a2, 0x4000 -/* 0788A8 7F045EB8 0FC09E07 */ jal chrlvExplosionDamage -/* 0788AC 7F045EBC 24070001 */ li $a3, 1 -/* 0788B0 7F045EC0 10000011 */ b .L7F045F08 -/* 0788B4 7F045EC4 A6200082 */ sh $zero, 0x82($s1) -.L7F045EC8: -/* 0788B8 7F045EC8 24010001 */ li $at, 1 -/* 0788BC 7F045ECC 10410004 */ beq $v0, $at, .L7F045EE0 -/* 0788C0 7F045ED0 3C0542C8 */ lui $a1, 0x42c8 -/* 0788C4 7F045ED4 24010004 */ li $at, 4 -/* 0788C8 7F045ED8 5441000B */ bnel $v0, $at, .L7F045F08 -/* 0788CC 7F045EDC A6200082 */ sh $zero, 0x82($s1) -.L7F045EE0: -/* 0788D0 7F045EE0 8E220064 */ lw $v0, 0x64($s1) -/* 0788D4 7F045EE4 3C010006 */ lui $at, 6 -/* 0788D8 7F045EE8 8E440004 */ lw $a0, 4($s2) -/* 0788DC 7F045EEC 00416024 */ and $t4, $v0, $at -/* 0788E0 7F045EF0 000C5C42 */ srl $t3, $t4, 0x11 -/* 0788E4 7F045EF4 AFAB0010 */ sw $t3, 0x10($sp) -/* 0788E8 7F045EF8 26260058 */ addiu $a2, $s1, 0x58 -/* 0788EC 7F045EFC 0FC138BC */ jal maybe_detonate_object -/* 0788F0 7F045F00 24070056 */ li $a3, 86 -/* 0788F4 7F045F04 A6200082 */ sh $zero, 0x82($s1) -.L7F045F08: -/* 0788F8 7F045F08 8FAE060C */ lw $t6, 0x60c($sp) -.L7F045F0C: -/* 0788FC 7F045F0C 55C0010B */ bnezl $t6, .L7F04633C -/* 078900 7F045F10 8E2B0064 */ lw $t3, 0x64($s1) -/* 078904 7F045F14 8FAD066C */ lw $t5, 0x66c($sp) -/* 078908 7F045F18 55A00031 */ bnezl $t5, .L7F045FE0 -/* 07890C 7F045F1C 8E0F0000 */ lw $t7, ($s0) -/* 078910 7F045F20 C610008C */ lwc1 $f16, 0x8c($s0) -/* 078914 7F045F24 C7A40628 */ lwc1 $f4, 0x628($sp) -/* 078918 7F045F28 4610B03C */ c.lt.s $f22, $f16 -/* 07891C 7F045F2C 00000000 */ nop -/* 078920 7F045F30 4502002B */ bc1fl .L7F045FE0 -/* 078924 7F045F34 8E0F0000 */ lw $t7, ($s0) -/* 078928 7F045F38 C6020004 */ lwc1 $f2, 4($s0) -/* 07892C 7F045F3C C60C0008 */ lwc1 $f12, 8($s0) -/* 078930 7F045F40 C7A6062C */ lwc1 $f6, 0x62c($sp) -/* 078934 7F045F44 46041202 */ mul.s $f8, $f2, $f4 -/* 078938 7F045F48 C600000C */ lwc1 $f0, 0xc($s0) -/* 07893C 7F045F4C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 078940 7F045F50 46066282 */ mul.s $f10, $f12, $f6 -/* 078944 7F045F54 4616603E */ c.le.s $f12, $f22 -/* 078948 7F045F58 460A4180 */ add.s $f6, $f8, $f10 -/* 07894C 7F045F5C C7A80630 */ lwc1 $f8, 0x630($sp) -/* 078950 7F045F60 46004282 */ mul.s $f10, $f8, $f0 -/* 078954 7F045F64 44814000 */ mtc1 $at, $f8 -/* 078958 7F045F68 46065380 */ add.s $f14, $f10, $f6 -/* 07895C 7F045F6C 46088280 */ add.s $f10, $f16, $f8 -/* 078960 7F045F70 46005187 */ neg.s $f6, $f10 -/* 078964 7F045F74 46067382 */ mul.s $f14, $f14, $f6 -/* 078968 7F045F78 00000000 */ nop -/* 07896C 7F045F7C 46047202 */ mul.s $f8, $f14, $f4 -/* 078970 7F045F80 46081280 */ add.s $f10, $f2, $f8 -/* 078974 7F045F84 E60A0004 */ swc1 $f10, 4($s0) -/* 078978 7F045F88 C7A6062C */ lwc1 $f6, 0x62c($sp) -/* 07897C 7F045F8C 46067102 */ mul.s $f4, $f14, $f6 -/* 078980 7F045F90 46046200 */ add.s $f8, $f12, $f4 -/* 078984 7F045F94 E6080008 */ swc1 $f8, 8($s0) -/* 078988 7F045F98 C7AA0630 */ lwc1 $f10, 0x630($sp) -/* 07898C 7F045F9C 460A7182 */ mul.s $f6, $f14, $f10 -/* 078990 7F045FA0 46060100 */ add.s $f4, $f0, $f6 -/* 078994 7F045FA4 4500000D */ bc1f .L7F045FDC -/* 078998 7F045FA8 E604000C */ swc1 $f4, 0xc($s0) -/* 07899C 7F045FAC C6080008 */ lwc1 $f8, 8($s0) -/* 0789A0 7F045FB0 24180001 */ li $t8, 1 -/* 0789A4 7F045FB4 4608B03E */ c.le.s $f22, $f8 -/* 0789A8 7F045FB8 00000000 */ nop -/* 0789AC 7F045FBC 45030007 */ bc1tl .L7F045FDC -/* 0789B0 7F045FC0 AFB80614 */ sw $t8, 0x614($sp) -/* 0789B4 7F045FC4 C62A005C */ lwc1 $f10, 0x5c($s1) -/* 0789B8 7F045FC8 460AA03E */ c.le.s $f20, $f10 -/* 0789BC 7F045FCC 00000000 */ nop -/* 0789C0 7F045FD0 45020003 */ bc1fl .L7F045FE0 -/* 0789C4 7F045FD4 8E0F0000 */ lw $t7, ($s0) -/* 0789C8 7F045FD8 AFB80614 */ sw $t8, 0x614($sp) -.L7F045FDC: -/* 0789CC 7F045FDC 8E0F0000 */ lw $t7, ($s0) -.L7F045FE0: -/* 0789D0 7F045FE0 C7B40644 */ lwc1 $f20, 0x644($sp) -/* 0789D4 7F045FE4 31F90008 */ andi $t9, $t7, 8 -/* 0789D8 7F045FE8 17200014 */ bnez $t9, .L7F04603C -/* 0789DC 7F045FEC 00000000 */ nop -/* 0789E0 7F045FF0 8E640014 */ lw $a0, 0x14($s3) -/* 0789E4 7F045FF4 8E650008 */ lw $a1, 8($s3) -/* 0789E8 7F045FF8 0FC2C70C */ jal stanGetPositionYValue -/* 0789EC 7F045FFC 8E660010 */ lw $a2, 0x10($s3) -/* 0789F0 7F046000 46000506 */ mov.s $f20, $f0 -/* 0789F4 7F046004 8FA40648 */ lw $a0, 0x648($sp) -/* 0789F8 7F046008 0FC0FA9F */ jal chrpropSumMatrixPosY -/* 0789FC 7F04600C 8FA50074 */ lw $a1, 0x74($sp) -/* 078A00 7F046010 4600A101 */ sub.s $f4, $f20, $f0 -/* 078A04 7F046014 E7A00640 */ swc1 $f0, 0x640($sp) -/* 078A08 7F046018 C666000C */ lwc1 $f6, 0xc($s3) -/* 078A0C 7F04601C 00004825 */ move $t1, $zero -/* 078A10 7F046020 4604303C */ c.lt.s $f6, $f4 -/* 078A14 7F046024 00000000 */ nop -/* 078A18 7F046028 45000002 */ bc1f .L7F046034 -/* 078A1C 7F04602C 00000000 */ nop -/* 078A20 7F046030 24090001 */ li $t1, 1 -.L7F046034: -/* 078A24 7F046034 10000001 */ b .L7F04603C -/* 078A28 7F046038 AFA90618 */ sw $t1, 0x618($sp) -.L7F04603C: -/* 078A2C 7F04603C 8FAA0618 */ lw $t2, 0x618($sp) -/* 078A30 7F046040 8FA8066C */ lw $t0, 0x66c($sp) -/* 078A34 7F046044 55400004 */ bnezl $t2, .L7F046058 -/* 078A38 7F046048 8E0C0000 */ lw $t4, ($s0) -/* 078A3C 7F04604C 5500000B */ bnezl $t0, .L7F04607C -/* 078A40 7F046050 8FB80618 */ lw $t8, 0x618($sp) -/* 078A44 7F046054 8E0C0000 */ lw $t4, ($s0) -.L7F046058: -/* 078A48 7F046058 318B0200 */ andi $t3, $t4, 0x200 -/* 078A4C 7F04605C 55600004 */ bnezl $t3, .L7F046070 -/* 078A50 7F046060 8E0E0090 */ lw $t6, 0x90($s0) -/* 078A54 7F046064 0FC15F70 */ jal mtxLoadRandomRotation -/* 078A58 7F046068 8FA40070 */ lw $a0, 0x70($sp) -/* 078A5C 7F04606C 8E0E0090 */ lw $t6, 0x90($s0) -.L7F046070: -/* 078A60 7F046070 25CD0001 */ addiu $t5, $t6, 1 -/* 078A64 7F046074 AE0D0090 */ sw $t5, 0x90($s0) -/* 078A68 7F046078 8FB80618 */ lw $t8, 0x618($sp) -.L7F04607C: -/* 078A6C 7F04607C 8FAF0614 */ lw $t7, 0x614($sp) -/* 078A70 7F046080 8FB90618 */ lw $t9, 0x618($sp) -/* 078A74 7F046084 17000003 */ bnez $t8, .L7F046094 -/* 078A78 7F046088 00000000 */ nop -/* 078A7C 7F04608C 51E0003A */ beql $t7, $zero, .L7F046178 -/* 078A80 7F046090 922E0003 */ lbu $t6, 3($s1) -.L7F046094: -/* 078A84 7F046094 13200009 */ beqz $t9, .L7F0460BC -/* 078A88 7F046098 C7A40620 */ lwc1 $f4, 0x620($sp) -/* 078A8C 7F04609C C7A80640 */ lwc1 $f8, 0x640($sp) -/* 078A90 7F0460A0 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 078A94 7F0460A4 44813000 */ mtc1 $at, $f6 -/* 078A98 7F0460A8 4608A281 */ sub.s $f10, $f20, $f8 -/* 078A9C 7F0460AC 46065000 */ add.s $f0, $f10, $f6 -/* 078AA0 7F0460B0 E660000C */ swc1 $f0, 0xc($s3) -/* 078AA4 7F0460B4 10000008 */ b .L7F0460D8 -/* 078AA8 7F0460B8 E620005C */ swc1 $f0, 0x5c($s1) -.L7F0460BC: -/* 078AAC 7F0460BC C7A80640 */ lwc1 $f8, 0x640($sp) -/* 078AB0 7F0460C0 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 078AB4 7F0460C4 44813000 */ mtc1 $at, $f6 -/* 078AB8 7F0460C8 46082281 */ sub.s $f10, $f4, $f8 -/* 078ABC 7F0460CC 46065080 */ add.s $f2, $f10, $f6 -/* 078AC0 7F0460D0 E662000C */ swc1 $f2, 0xc($s3) -/* 078AC4 7F0460D4 E622005C */ swc1 $f2, 0x5c($s1) -.L7F0460D8: -/* 078AC8 7F0460D8 8E230064 */ lw $v1, 0x64($s1) -/* 078ACC 7F0460DC 02202025 */ move $a0, $s1 -/* 078AD0 7F0460E0 00034BC0 */ sll $t1, $v1, 0xf -/* 078AD4 7F0460E4 05200002 */ bltz $t1, .L7F0460F0 -/* 078AD8 7F0460E8 346A0100 */ ori $t2, $v1, 0x100 -/* 078ADC 7F0460EC AE2A0064 */ sw $t2, 0x64($s1) -.L7F0460F0: -/* 078AE0 7F0460F0 C610008C */ lwc1 $f16, 0x8c($s0) -/* 078AE4 7F0460F4 4610B03C */ c.lt.s $f22, $f16 -/* 078AE8 7F0460F8 00000000 */ nop -/* 078AEC 7F0460FC 4500001B */ bc1f .L7F04616C -/* 078AF0 7F046100 00000000 */ nop -/* 078AF4 7F046104 C6040008 */ lwc1 $f4, 8($s0) -/* 078AF8 7F046108 46008207 */ neg.s $f8, $f16 -/* 078AFC 7F04610C 3C018005 */ lui $at, %hi(D_80052AA8) # $at, 0x8005 -/* 078B00 7F046110 46082282 */ mul.s $f10, $f4, $f8 -/* 078B04 7F046114 C4208BE8 */ lwc1 $f0, %lo(D_80052AA8)($at) -/* 078B08 7F046118 E60A0008 */ swc1 $f10, 8($s0) -/* 078B0C 7F04611C C6060008 */ lwc1 $f6, 8($s0) -/* 078B10 7F046120 4600303C */ c.lt.s $f6, $f0 -/* 078B14 7F046124 00000000 */ nop -/* 078B18 7F046128 45020013 */ bc1fl .L7F046178 -/* 078B1C 7F04612C 922E0003 */ lbu $t6, 3($s1) -/* 078B20 7F046130 8E080000 */ lw $t0, ($s0) -/* 078B24 7F046134 02202025 */ move $a0, $s1 -/* 078B28 7F046138 310C0002 */ andi $t4, $t0, 2 -/* 078B2C 7F04613C 11800007 */ beqz $t4, .L7F04615C -/* 078B30 7F046140 00000000 */ nop -/* 078B34 7F046144 8E0B0090 */ lw $t3, 0x90($s0) -/* 078B38 7F046148 24010001 */ li $at, 1 -/* 078B3C 7F04614C 15610003 */ bne $t3, $at, .L7F04615C -/* 078B40 7F046150 00000000 */ nop -/* 078B44 7F046154 10000007 */ b .L7F046174 -/* 078B48 7F046158 E6000008 */ swc1 $f0, 8($s0) -.L7F04615C: -/* 078B4C 7F04615C 0FC10CA9 */ jal sub_GAME_7F0431E4 -/* 078B50 7F046160 27A50634 */ addiu $a1, $sp, 0x634 -/* 078B54 7F046164 10000004 */ b .L7F046178 -/* 078B58 7F046168 922E0003 */ lbu $t6, 3($s1) -.L7F04616C: -/* 078B5C 7F04616C 0FC10CA9 */ jal sub_GAME_7F0431E4 -/* 078B60 7F046170 27A50634 */ addiu $a1, $sp, 0x634 -.L7F046174: -/* 078B64 7F046174 922E0003 */ lbu $t6, 3($s1) -.L7F046178: -/* 078B68 7F046178 24010008 */ li $at, 8 -/* 078B6C 7F04617C 55C1006F */ bnel $t6, $at, .L7F04633C -/* 078B70 7F046180 8E2B0064 */ lw $t3, 0x64($s1) -/* 078B74 7F046184 82220080 */ lb $v0, 0x80($s1) -/* 078B78 7F046188 24010003 */ li $at, 3 -/* 078B7C 7F04618C 54410006 */ bnel $v0, $at, .L7F0461A8 -/* 078B80 7F046190 24010056 */ li $at, 86 -/* 078B84 7F046194 0FC10DC4 */ jal sub_GAME_7F043650 -/* 078B88 7F046198 02202025 */ move $a0, $s1 -/* 078B8C 7F04619C 10000042 */ b .L7F0462A8 -/* 078B90 7F0461A0 8FB9066C */ lw $t9, 0x66c($sp) -/* 078B94 7F0461A4 24010056 */ li $at, 86 -.L7F0461A8: -/* 078B98 7F0461A8 1441002D */ bne $v0, $at, .L7F046260 -/* 078B9C 7F0461AC 8FAD066C */ lw $t5, 0x66c($sp) -/* 078BA0 7F0461B0 11A00003 */ beqz $t5, .L7F0461C0 -/* 078BA4 7F0461B4 8FB80618 */ lw $t8, 0x618($sp) -/* 078BA8 7F0461B8 53000004 */ beql $t8, $zero, .L7F0461CC -/* 078BAC 7F0461BC C6020004 */ lwc1 $f2, 4($s0) -.L7F0461C0: -/* 078BB0 7F0461C0 10000038 */ b .L7F0462A4 -/* 078BB4 7F0461C4 A6200082 */ sh $zero, 0x82($s1) -/* 078BB8 7F0461C8 C6020004 */ lwc1 $f2, 4($s0) -.L7F0461CC: -/* 078BBC 7F0461CC C60C0008 */ lwc1 $f12, 8($s0) -/* 078BC0 7F0461D0 C600000C */ lwc1 $f0, 0xc($s0) -/* 078BC4 7F0461D4 46021102 */ mul.s $f4, $f2, $f2 -/* 078BC8 7F0461D8 3C018005 */ lui $at, %hi(D_80052AAC) -/* 078BCC 7F0461DC 26240058 */ addiu $a0, $s1, 0x58 -/* 078BD0 7F0461E0 460C6202 */ mul.s $f8, $f12, $f12 -/* 078BD4 7F0461E4 24060008 */ li $a2, 8 -/* 078BD8 7F0461E8 46000182 */ mul.s $f6, $f0, $f0 -/* 078BDC 7F0461EC 46082280 */ add.s $f10, $f4, $f8 -/* 078BE0 7F0461F0 C4248BEC */ lwc1 $f4, %lo(D_80052AAC)($at) -/* 078BE4 7F0461F4 460A3380 */ add.s $f14, $f6, $f10 -/* 078BE8 7F0461F8 460E203C */ c.lt.s $f4, $f14 -/* 078BEC 7F0461FC 00000000 */ nop -/* 078BF0 7F046200 45020005 */ bc1fl .L7F046218 -/* 078BF4 7F046204 8E0F00A8 */ lw $t7, 0xa8($s0) -/* 078BF8 7F046208 E6160010 */ swc1 $f22, 0x10($s0) -/* 078BFC 7F04620C E6160014 */ swc1 $f22, 0x14($s0) -/* 078C00 7F046210 E6160018 */ swc1 $f22, 0x18($s0) -/* 078C04 7F046214 8E0F00A8 */ lw $t7, 0xa8($s0) -.L7F046218: -/* 078C08 7F046218 29E100FB */ slti $at, $t7, 0xfb -/* 078C0C 7F04621C 54200008 */ bnezl $at, .L7F046240 -/* 078C10 7F046220 926A0001 */ lbu $t2, 1($s3) -/* 078C14 7F046224 8E190000 */ lw $t9, ($s0) -/* 078C18 7F046228 2401FFCF */ li $at, -49 -/* 078C1C 7F04622C E616001C */ swc1 $f22, 0x1c($s0) -/* 078C20 7F046230 03214824 */ and $t1, $t9, $at -/* 078C24 7F046234 1000001B */ b .L7F0462A4 -/* 078C28 7F046238 AE090000 */ sw $t1, ($s0) -/* 078C2C 7F04623C 926A0001 */ lbu $t2, 1($s3) -.L7F046240: -/* 078C30 7F046240 8E650014 */ lw $a1, 0x14($s3) -/* 078C34 7F046244 2667002C */ addiu $a3, $s3, 0x2c -/* 078C38 7F046248 31480008 */ andi $t0, $t2, 8 -/* 078C3C 7F04624C 0008602B */ sltu $t4, $zero, $t0 -/* 078C40 7F046250 0FC27711 */ jal explosionCreateSmoke -/* 078C44 7F046254 AFAC0010 */ sw $t4, 0x10($sp) -/* 078C48 7F046258 10000013 */ b .L7F0462A8 -/* 078C4C 7F04625C 8FB9066C */ lw $t9, 0x66c($sp) -.L7F046260: -/* 078C50 7F046260 24010057 */ li $at, 87 -/* 078C54 7F046264 1441000F */ bne $v0, $at, .L7F0462A4 -/* 078C58 7F046268 8FAB0618 */ lw $t3, 0x618($sp) -/* 078C5C 7F04626C 15600003 */ bnez $t3, .L7F04627C -/* 078C60 7F046270 8FAE0614 */ lw $t6, 0x614($sp) -/* 078C64 7F046274 11C00003 */ beqz $t6, .L7F046284 -/* 078C68 7F046278 26240058 */ addiu $a0, $s1, 0x58 -.L7F04627C: -/* 078C6C 7F04627C 10000009 */ b .L7F0462A4 -/* 078C70 7F046280 A6200082 */ sh $zero, 0x82($s1) -.L7F046284: -/* 078C74 7F046284 926D0001 */ lbu $t5, 1($s3) -/* 078C78 7F046288 8E650014 */ lw $a1, 0x14($s3) -/* 078C7C 7F04628C 24060009 */ li $a2, 9 -/* 078C80 7F046290 31B80008 */ andi $t8, $t5, 8 -/* 078C84 7F046294 0018782B */ sltu $t7, $zero, $t8 -/* 078C88 7F046298 AFAF0010 */ sw $t7, 0x10($sp) -/* 078C8C 7F04629C 0FC27711 */ jal explosionCreateSmoke -/* 078C90 7F0462A0 2667002C */ addiu $a3, $s3, 0x2c -.L7F0462A4: -/* 078C94 7F0462A4 8FB9066C */ lw $t9, 0x66c($sp) -.L7F0462A8: -/* 078C98 7F0462A8 3C128004 */ lui $s2, %hi(D_80048380) # $s2, 0x8004 -/* 078C9C 7F0462AC 26521000 */ addiu $s2, %lo(D_80048380) # addiu $s2, $s2, 0x1000 -/* 078CA0 7F0462B0 13200003 */ beqz $t9, .L7F0462C0 -/* 078CA4 7F0462B4 8FA90618 */ lw $t1, 0x618($sp) -/* 078CA8 7F0462B8 51200020 */ beql $t1, $zero, .L7F04633C -/* 078CAC 7F0462BC 8E2B0064 */ lw $t3, 0x64($s1) -.L7F0462C0: -/* 078CB0 7F0462C0 8E420000 */ lw $v0, ($s2) -/* 078CB4 7F0462C4 8E0A00AC */ lw $t2, 0xac($s0) -/* 078CB8 7F0462C8 2448FFFE */ addiu $t0, $v0, -2 -/* 078CBC 7F0462CC 0148082A */ slt $at, $t2, $t0 -/* 078CC0 7F0462D0 50200019 */ beql $at, $zero, .L7F046338 -/* 078CC4 7F0462D4 AE0200AC */ sw $v0, 0xac($s0) -/* 078CC8 7F0462D8 82220080 */ lb $v0, 0x80($s1) -/* 078CCC 7F0462DC 266C0008 */ addiu $t4, $s3, 8 -/* 078CD0 7F0462E0 24010003 */ li $at, 3 -/* 078CD4 7F0462E4 10410004 */ beq $v0, $at, .L7F0462F8 -/* 078CD8 7F0462E8 AFAC0074 */ sw $t4, 0x74($sp) -/* 078CDC 7F0462EC 24010002 */ li $at, 2 -/* 078CE0 7F0462F0 14410008 */ bne $v0, $at, .L7F046314 -/* 078CE4 7F0462F4 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) -.L7F0462F8: -/* 078CE8 7F0462F8 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 078CEC 7F0462FC 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 078CF0 7F046300 24050003 */ li $a1, 3 -/* 078CF4 7F046304 0C00209A */ jal sndPlaySfx -/* 078CF8 7F046308 00003025 */ move $a2, $zero -/* 078CFC 7F04630C 10000006 */ b .L7F046328 -/* 078D00 7F046310 00402025 */ move $a0, $v0 -.L7F046314: -/* 078D04 7F046314 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 078D08 7F046318 2405002D */ li $a1, 45 -/* 078D0C 7F04631C 0C00209A */ jal sndPlaySfx -/* 078D10 7F046320 00003025 */ move $a2, $zero -/* 078D14 7F046324 00402025 */ move $a0, $v0 -.L7F046328: -/* 078D18 7F046328 0FC14F3C */ jal chrobjSndCreatePostEventDefault -/* 078D1C 7F04632C 8FA50074 */ lw $a1, 0x74($sp) -/* 078D20 7F046330 8E420000 */ lw $v0, ($s2) -/* 078D24 7F046334 AE0200AC */ sw $v0, 0xac($s0) -.L7F046338: -/* 078D28 7F046338 8E2B0064 */ lw $t3, 0x64($s1) -.L7F04633C: -/* 078D2C 7F04633C 3C128004 */ lui $s2, %hi(D_80048380) # $s2, 0x8004 -/* 078D30 7F046340 26521000 */ addiu $s2, %lo(D_80048380) # addiu $s2, $s2, 0x1000 -/* 078D34 7F046344 316E0080 */ andi $t6, $t3, 0x80 -/* 078D38 7F046348 51C00125 */ beql $t6, $zero, .L7F0467E0 -/* 078D3C 7F04634C 8FB90698 */ lw $t9, 0x698($sp) -/* 078D40 7F046350 8E0D0000 */ lw $t5, ($s0) -/* 078D44 7F046354 31B80400 */ andi $t8, $t5, 0x400 -/* 078D48 7F046358 53000121 */ beql $t8, $zero, .L7F0467E0 -/* 078D4C 7F04635C 8FB90698 */ lw $t9, 0x698($sp) -/* 078D50 7F046360 8E420000 */ lw $v0, ($s2) -/* 078D54 7F046364 3C0143C8 */ li $at, 0x43C80000 # 400.000000 -/* 078D58 7F046368 27B0056C */ addiu $s0, $sp, 0x56c -/* 078D5C 7F04636C 304F0007 */ andi $t7, $v0, 7 -/* 078D60 7F046370 15E0011A */ bnez $t7, .L7F0467DC -/* 078D64 7F046374 00002025 */ move $a0, $zero -/* 078D68 7F046378 44810000 */ mtc1 $at, $f0 -/* 078D6C 7F04637C C6280058 */ lwc1 $f8, 0x58($s1) -/* 078D70 7F046380 3C0144E1 */ li $at, 0x44E10000 # 1800.000000 -/* 078D74 7F046384 44812000 */ mtc1 $at, $f4 -/* 078D78 7F046388 46004180 */ add.s $f6, $f8, $f0 -/* 078D7C 7F04638C 3059000F */ andi $t9, $v0, 0xf -/* 078D80 7F046390 E7A6056C */ swc1 $f6, 0x56c($sp) -/* 078D84 7F046394 C62A005C */ lwc1 $f10, 0x5c($s1) -/* 078D88 7F046398 46045201 */ sub.s $f8, $f10, $f4 -/* 078D8C 7F04639C E7A80570 */ swc1 $f8, 0x570($sp) -/* 078D90 7F0463A0 C6260060 */ lwc1 $f6, 0x60($s1) -/* 078D94 7F0463A4 17200005 */ bnez $t9, .L7F0463BC -/* 078D98 7F0463A8 E7A60574 */ swc1 $f6, 0x574($sp) -/* 078D9C 7F0463AC C7AA0574 */ lwc1 $f10, 0x574($sp) -/* 078DA0 7F0463B0 46005100 */ add.s $f4, $f10, $f0 -/* 078DA4 7F0463B4 10000004 */ b .L7F0463C8 -/* 078DA8 7F0463B8 E7A40574 */ swc1 $f4, 0x574($sp) -.L7F0463BC: -/* 078DAC 7F0463BC C7A80574 */ lwc1 $f8, 0x574($sp) -/* 078DB0 7F0463C0 46004181 */ sub.s $f6, $f8, $f0 -/* 078DB4 7F0463C4 E7A60574 */ swc1 $f6, 0x574($sp) -.L7F0463C8: -/* 078DB8 7F0463C8 8E220010 */ lw $v0, 0x10($s1) -/* 078DBC 7F0463CC 02002825 */ move $a1, $s0 -/* 078DC0 7F0463D0 24070014 */ li $a3, 20 -/* 078DC4 7F0463D4 8C460014 */ lw $a2, 0x14($v0) -/* 078DC8 7F0463D8 2449002C */ addiu $t1, $v0, 0x2c -/* 078DCC 7F0463DC AFA90018 */ sw $t1, 0x18($sp) -/* 078DD0 7F0463E0 AFA0001C */ sw $zero, 0x1c($sp) -/* 078DD4 7F0463E4 AFA00014 */ sw $zero, 0x14($sp) -/* 078DD8 7F0463E8 0FC26DE4 */ jal explosionCreate -/* 078DDC 7F0463EC AFA00010 */ sw $zero, 0x10($sp) -/* 078DE0 7F0463F0 8E4A0000 */ lw $t2, ($s2) -/* 078DE4 7F0463F4 24010028 */ li $at, 40 -/* 078DE8 7F0463F8 02002025 */ move $a0, $s0 -/* 078DEC 7F0463FC 0141001A */ div $zero, $t2, $at -/* 078DF0 7F046400 00004010 */ mfhi $t0 -/* 078DF4 7F046404 550000F6 */ bnezl $t0, .L7F0467E0 -/* 078DF8 7F046408 8FB90698 */ lw $t9, 0x698($sp) -/* 078DFC 7F04640C 8E220010 */ lw $v0, 0x10($s1) -/* 078E00 7F046410 240C0001 */ li $t4, 1 -/* 078E04 7F046414 2406000A */ li $a2, 10 -/* 078E08 7F046418 8C450014 */ lw $a1, 0x14($v0) -/* 078E0C 7F04641C AFAC0010 */ sw $t4, 0x10($sp) -/* 078E10 7F046420 0FC27711 */ jal explosionCreateSmoke -/* 078E14 7F046424 2447002C */ addiu $a3, $v0, 0x2c -/* 078E18 7F046428 100000ED */ b .L7F0467E0 -/* 078E1C 7F04642C 8FB90698 */ lw $t9, 0x698($sp) -/* 078E20 7F046430 C6000060 */ lwc1 $f0, 0x60($s0) -.L7F046434: -/* 078E24 7F046434 44815000 */ mtc1 $at, $f10 -/* 078E28 7F046438 24120001 */ li $s2, 1 -/* 078E2C 7F04643C 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 078E30 7F046440 460A003C */ c.lt.s $f0, $f10 -/* 078E34 7F046444 26040068 */ addiu $a0, $s0, 0x68 -/* 078E38 7F046448 26050078 */ addiu $a1, $s0, 0x78 -/* 078E3C 7F04644C 45020031 */ bc1fl .L7F046514 -/* 078E40 7F046450 C60A0004 */ lwc1 $f10, 4($s0) -/* 078E44 7F046454 C6020064 */ lwc1 $f2, 0x64($s0) -/* 078E48 7F046458 C4241004 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 078E4C 7F04645C 3C0B8004 */ lui $t3, %hi(g_ClockTimer) # $t3, 0x8004 -/* 078E50 7F046460 3C018005 */ lui $at, %hi(D_80052AB0) -/* 078E54 7F046464 46041202 */ mul.s $f8, $f2, $f4 -/* 078E58 7F046468 27B20558 */ addiu $s2, $sp, 0x558 -/* 078E5C 7F04646C 46080180 */ add.s $f6, $f0, $f8 -/* 078E60 7F046470 E6060060 */ swc1 $f6, 0x60($s0) -/* 078E64 7F046474 8D6B0FF4 */ lw $t3, %lo(g_ClockTimer)($t3) -/* 078E68 7F046478 59600005 */ blezl $t3, .L7F046490 -/* 078E6C 7F04647C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 078E70 7F046480 C42A8BF0 */ lwc1 $f10, %lo(D_80052AB0)($at) -/* 078E74 7F046484 460A1102 */ mul.s $f4, $f2, $f10 -/* 078E78 7F046488 E6040064 */ swc1 $f4, 0x64($s0) -/* 078E7C 7F04648C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -.L7F046490: -/* 078E80 7F046490 44814000 */ mtc1 $at, $f8 -/* 078E84 7F046494 C6000060 */ lwc1 $f0, 0x60($s0) -/* 078E88 7F046498 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 078E8C 7F04649C 4600403C */ c.lt.s $f8, $f0 -/* 078E90 7F0464A0 00000000 */ nop -/* 078E94 7F0464A4 45030006 */ bc1tl .L7F0464C0 -/* 078E98 7F0464A8 44813000 */ mtc1 $at, $f6 -/* 078E9C 7F0464AC 8E0E0000 */ lw $t6, ($s0) -/* 078EA0 7F0464B0 31CD0008 */ andi $t5, $t6, 8 -/* 078EA4 7F0464B4 51A00006 */ beql $t5, $zero, .L7F0464D0 -/* 078EA8 7F0464B8 44060000 */ mfc1 $a2, $f0 -/* 078EAC 7F0464BC 44813000 */ mtc1 $at, $f6 -.L7F0464C0: -/* 078EB0 7F0464C0 00000000 */ nop -/* 078EB4 7F0464C4 E6060060 */ swc1 $f6, 0x60($s0) -/* 078EB8 7F0464C8 C6000060 */ lwc1 $f0, 0x60($s0) -/* 078EBC 7F0464CC 44060000 */ mfc1 $a2, $f0 -.L7F0464D0: -/* 078EC0 7F0464D0 0FC16FAE */ jal quaternion_slerp -/* 078EC4 7F0464D4 02403825 */ move $a3, $s2 -/* 078EC8 7F0464D8 26250018 */ addiu $a1, $s1, 0x18 -/* 078ECC 7F0464DC AFA50074 */ sw $a1, 0x74($sp) -/* 078ED0 7F0464E0 0FC16EB6 */ jal quaternion_to_matrix -/* 078ED4 7F0464E4 02402025 */ move $a0, $s2 -/* 078ED8 7F0464E8 C60C00C0 */ lwc1 $f12, 0xc0($s0) -/* 078EDC 7F0464EC 0FC16397 */ jal matrix_column_1_scalar_multiply -/* 078EE0 7F0464F0 8FA50074 */ lw $a1, 0x74($sp) -/* 078EE4 7F0464F4 C60C00C4 */ lwc1 $f12, 0xc4($s0) -/* 078EE8 7F0464F8 0FC163A3 */ jal matrix_column_2_scalar_multiply -/* 078EEC 7F0464FC 8FA50074 */ lw $a1, 0x74($sp) -/* 078EF0 7F046500 C60C00C8 */ lwc1 $f12, 0xc8($s0) -/* 078EF4 7F046504 0FC163BD */ jal matrix_column_3_scalar_multiply_2 -/* 078EF8 7F046508 8FA50074 */ lw $a1, 0x74($sp) -/* 078EFC 7F04650C 00009025 */ move $s2, $zero -/* 078F00 7F046510 C60A0004 */ lwc1 $f10, 4($s0) -.L7F046514: -/* 078F04 7F046514 460AB032 */ c.eq.s $f22, $f10 -/* 078F08 7F046518 00000000 */ nop -/* 078F0C 7F04651C 4502000F */ bc1fl .L7F04655C -/* 078F10 7F046520 8E180000 */ lw $t8, ($s0) -/* 078F14 7F046524 C604000C */ lwc1 $f4, 0xc($s0) -/* 078F18 7F046528 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 078F1C 7F04652C 4604B032 */ c.eq.s $f22, $f4 -/* 078F20 7F046530 00000000 */ nop -/* 078F24 7F046534 45020009 */ bc1fl .L7F04655C -/* 078F28 7F046538 8E180000 */ lw $t8, ($s0) -/* 078F2C 7F04653C C6080060 */ lwc1 $f8, 0x60($s0) -/* 078F30 7F046540 44813000 */ mtc1 $at, $f6 -/* 078F34 7F046544 00000000 */ nop -/* 078F38 7F046548 4606403C */ c.lt.s $f8, $f6 -/* 078F3C 7F04654C 00000000 */ nop -/* 078F40 7F046550 45000088 */ bc1f .L7F046774 -/* 078F44 7F046554 00000000 */ nop -/* 078F48 7F046558 8E180000 */ lw $t8, ($s0) -.L7F04655C: -/* 078F4C 7F04655C 02202025 */ move $a0, $s1 -/* 078F50 7F046560 26390018 */ addiu $t9, $s1, 0x18 -/* 078F54 7F046564 330F0008 */ andi $t7, $t8, 8 -/* 078F58 7F046568 15E00082 */ bnez $t7, .L7F046774 -/* 078F5C 7F04656C 00000000 */ nop -/* 078F60 7F046570 AFB90074 */ sw $t9, 0x74($sp) -/* 078F64 7F046574 0FC1004E */ jal chrobjGetBboxFromObjectRecord -/* 078F68 7F046578 00009025 */ move $s2, $zero -/* 078F6C 7F04657C 3C038004 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8004 -/* 078F70 7F046580 8C630FF4 */ lw $v1, %lo(g_ClockTimer)($v1) -/* 078F74 7F046584 AFA20554 */ sw $v0, 0x554($sp) -/* 078F78 7F046588 00002025 */ move $a0, $zero -/* 078F7C 7F04658C 18600048 */ blez $v1, .L7F0466B0 -/* 078F80 7F046590 3C018005 */ lui $at, %hi(D_80052AB4) # $at, 0x8005 -/* 078F84 7F046594 C42E8BF4 */ lwc1 $f14, %lo(D_80052AB4)($at) -/* 078F88 7F046598 C7AA069C */ lwc1 $f10, 0x69c($sp) -.L7F04659C: -/* 078F8C 7F04659C C6040004 */ lwc1 $f4, 4($s0) -/* 078F90 7F0465A0 C7A606A4 */ lwc1 $f6, 0x6a4($sp) -/* 078F94 7F0465A4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 078F98 7F0465A8 46045200 */ add.s $f8, $f10, $f4 -/* 078F9C 7F0465AC E7A8069C */ swc1 $f8, 0x69c($sp) -/* 078FA0 7F0465B0 C60A000C */ lwc1 $f10, 0xc($s0) -/* 078FA4 7F0465B4 460A3100 */ add.s $f4, $f6, $f10 -/* 078FA8 7F0465B8 44813000 */ mtc1 $at, $f6 -/* 078FAC 7F0465BC E7A406A4 */ swc1 $f4, 0x6a4($sp) -/* 078FB0 7F0465C0 C6080060 */ lwc1 $f8, 0x60($s0) -/* 078FB4 7F0465C4 4608303E */ c.le.s $f6, $f8 -/* 078FB8 7F0465C8 00000000 */ nop -/* 078FBC 7F0465CC 45020035 */ bc1fl .L7F0466A4 -/* 078FC0 7F0465D0 24840001 */ addiu $a0, $a0, 1 -/* 078FC4 7F0465D4 C60A0094 */ lwc1 $f10, 0x94($s0) -/* 078FC8 7F0465D8 460AB03C */ c.lt.s $f22, $f10 -/* 078FCC 7F0465DC 00000000 */ nop -/* 078FD0 7F0465E0 45020027 */ bc1fl .L7F046680 -/* 078FD4 7F0465E4 C6060004 */ lwc1 $f6, 4($s0) -/* 078FD8 7F0465E8 C600000C */ lwc1 $f0, 0xc($s0) -/* 078FDC 7F0465EC C6020004 */ lwc1 $f2, 4($s0) -/* 078FE0 7F0465F0 AFA40550 */ sw $a0, 0x550($sp) -/* 078FE4 7F0465F4 46000102 */ mul.s $f4, $f0, $f0 -/* 078FE8 7F0465F8 00000000 */ nop -/* 078FEC 7F0465FC 46021202 */ mul.s $f8, $f2, $f2 -/* 078FF0 7F046600 0C007614 */ jal sqrtf -/* 078FF4 7F046604 46082300 */ add.s $f12, $f4, $f8 -/* 078FF8 7F046608 3C018005 */ lui $at, %hi(D_80052AB8) # $at, 0x8005 -/* 078FFC 7F04660C C42E8BF8 */ lwc1 $f14, %lo(D_80052AB8)($at) -/* 079000 7F046610 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 079004 7F046614 C42A1004 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 079008 7F046618 C6060094 */ lwc1 $f6, 0x94($s0) -/* 07900C 7F04661C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 079010 7F046620 44814000 */ mtc1 $at, $f8 -/* 079014 7F046624 460A3102 */ mul.s $f4, $f6, $f10 -/* 079018 7F046628 8FA40550 */ lw $a0, 0x550($sp) -/* 07901C 7F04662C 3C038004 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8004 -/* 079020 7F046630 46002303 */ div.s $f12, $f4, $f0 -/* 079024 7F046634 460C403E */ c.le.s $f8, $f12 -/* 079028 7F046638 00000000 */ nop -/* 07902C 7F04663C 45020005 */ bc1fl .L7F046654 -/* 079030 7F046640 C6020004 */ lwc1 $f2, 4($s0) -/* 079034 7F046644 E6160004 */ swc1 $f22, 4($s0) -/* 079038 7F046648 1000000A */ b .L7F046674 -/* 07903C 7F04664C E616000C */ swc1 $f22, 0xc($s0) -/* 079040 7F046650 C6020004 */ lwc1 $f2, 4($s0) -.L7F046654: -/* 079044 7F046654 C600000C */ lwc1 $f0, 0xc($s0) -/* 079048 7F046658 460C1182 */ mul.s $f6, $f2, $f12 -/* 07904C 7F04665C 00000000 */ nop -/* 079050 7F046660 460C0102 */ mul.s $f4, $f0, $f12 -/* 079054 7F046664 46061281 */ sub.s $f10, $f2, $f6 -/* 079058 7F046668 46040201 */ sub.s $f8, $f0, $f4 -/* 07905C 7F04666C E60A0004 */ swc1 $f10, 4($s0) -/* 079060 7F046670 E608000C */ swc1 $f8, 0xc($s0) -.L7F046674: -/* 079064 7F046674 1000000A */ b .L7F0466A0 -/* 079068 7F046678 8C630FF4 */ lw $v1, %lo(g_ClockTimer)($v1) -/* 07906C 7F04667C C6060004 */ lwc1 $f6, 4($s0) -.L7F046680: -/* 079070 7F046680 C604000C */ lwc1 $f4, 0xc($s0) -/* 079074 7F046684 3C038004 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8004 -/* 079078 7F046688 460E3282 */ mul.s $f10, $f6, $f14 -/* 07907C 7F04668C 00000000 */ nop -/* 079080 7F046690 460E2202 */ mul.s $f8, $f4, $f14 -/* 079084 7F046694 E60A0004 */ swc1 $f10, 4($s0) -/* 079088 7F046698 E608000C */ swc1 $f8, 0xc($s0) -/* 07908C 7F04669C 8C630FF4 */ lw $v1, %lo(g_ClockTimer)($v1) -.L7F0466A0: -/* 079090 7F0466A0 24840001 */ addiu $a0, $a0, 1 -.L7F0466A4: -/* 079094 7F0466A4 0083082A */ slt $at, $a0, $v1 -/* 079098 7F0466A8 5420FFBC */ bnezl $at, .L7F04659C -/* 07909C 7F0466AC C7AA069C */ lwc1 $f10, 0x69c($sp) -.L7F0466B0: -/* 0790A0 7F0466B0 02202025 */ move $a0, $s1 -/* 0790A4 7F0466B4 27A5069C */ addiu $a1, $sp, 0x69c -/* 0790A8 7F0466B8 27A60538 */ addiu $a2, $sp, 0x538 -/* 0790AC 7F0466BC 27A70544 */ addiu $a3, $sp, 0x544 -/* 0790B0 7F0466C0 AFA00010 */ sw $zero, 0x10($sp) -/* 0790B4 7F0466C4 0FC10BDD */ jal sub_GAME_7F042EB4 -/* 0790B8 7F0466C8 AFA00014 */ sw $zero, 0x14($sp) -/* 0790BC 7F0466CC 24090001 */ li $t1, 1 -/* 0790C0 7F0466D0 AFA90698 */ sw $t1, 0x698($sp) -/* 0790C4 7F0466D4 8E660010 */ lw $a2, 0x10($s3) -/* 0790C8 7F0466D8 8E650008 */ lw $a1, 8($s3) -/* 0790CC 7F0466DC 0FC2C70C */ jal stanGetPositionYValue -/* 0790D0 7F0466E0 8E640014 */ lw $a0, 0x14($s3) -/* 0790D4 7F0466E4 46000506 */ mov.s $f20, $f0 -/* 0790D8 7F0466E8 8FA40554 */ lw $a0, 0x554($sp) -/* 0790DC 7F0466EC 0FC0FA9F */ jal chrpropSumMatrixPosY -/* 0790E0 7F0466F0 8FA50074 */ lw $a1, 0x74($sp) -/* 0790E4 7F0466F4 3C018005 */ lui $at, %hi(D_80052ABC) # $at, 0x8005 -/* 0790E8 7F0466F8 C42E8BFC */ lwc1 $f14, %lo(D_80052ABC)($at) -/* 0790EC 7F0466FC 4600A181 */ sub.s $f6, $f20, $f0 -/* 0790F0 7F046700 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0790F4 7F046704 44815000 */ mtc1 $at, $f10 -/* 0790F8 7F046708 3C018005 */ lui $at, %hi(D_80052AC0) # $at, 0x8005 -/* 0790FC 7F04670C 460A3300 */ add.s $f12, $f6, $f10 -/* 079100 7F046710 E66C000C */ swc1 $f12, 0xc($s3) -/* 079104 7F046714 E62C005C */ swc1 $f12, 0x5c($s1) -/* 079108 7F046718 C6020004 */ lwc1 $f2, 4($s0) -/* 07910C 7F04671C 460E103C */ c.lt.s $f2, $f14 -/* 079110 7F046720 00000000 */ nop -/* 079114 7F046724 45000013 */ bc1f .L7F046774 -/* 079118 7F046728 00000000 */ nop -/* 07911C 7F04672C C4248C00 */ lwc1 $f4, %lo(D_80052AC0)($at) -/* 079120 7F046730 4602203C */ c.lt.s $f4, $f2 -/* 079124 7F046734 00000000 */ nop -/* 079128 7F046738 4500000E */ bc1f .L7F046774 -/* 07912C 7F04673C 00000000 */ nop -/* 079130 7F046740 C600000C */ lwc1 $f0, 0xc($s0) -/* 079134 7F046744 3C018005 */ lui $at, %hi(D_80052AC4) # $at, 0x8005 -/* 079138 7F046748 460E003C */ c.lt.s $f0, $f14 -/* 07913C 7F04674C 00000000 */ nop -/* 079140 7F046750 45000008 */ bc1f .L7F046774 -/* 079144 7F046754 00000000 */ nop -/* 079148 7F046758 C4288C04 */ lwc1 $f8, %lo(D_80052AC4)($at) -/* 07914C 7F04675C 4600403C */ c.lt.s $f8, $f0 -/* 079150 7F046760 00000000 */ nop -/* 079154 7F046764 45000003 */ bc1f .L7F046774 -/* 079158 7F046768 00000000 */ nop -/* 07915C 7F04676C E616000C */ swc1 $f22, 0xc($s0) -/* 079160 7F046770 E6160004 */ swc1 $f22, 4($s0) -.L7F046774: -/* 079164 7F046774 16400005 */ bnez $s2, .L7F04678C -/* 079168 7F046778 00000000 */ nop -/* 07916C 7F04677C 8E0A0000 */ lw $t2, ($s0) -/* 079170 7F046780 31480008 */ andi $t0, $t2, 8 -/* 079174 7F046784 51000016 */ beql $t0, $zero, .L7F0467E0 -/* 079178 7F046788 8FB90698 */ lw $t9, 0x698($sp) -.L7F04678C: -/* 07917C 7F04678C 0FC0FF0C */ jal projectileFree -/* 079180 7F046790 02002025 */ move $a0, $s0 -/* 079184 7F046794 8E2C0064 */ lw $t4, 0x64($s1) -/* 079188 7F046798 2401FF7F */ li $at, -129 -/* 07918C 7F04679C AE20006C */ sw $zero, 0x6c($s1) -/* 079190 7F0467A0 01815824 */ and $t3, $t4, $at -/* 079194 7F0467A4 AE2B0064 */ sw $t3, 0x64($s1) -/* 079198 7F0467A8 92620001 */ lbu $v0, 1($s3) -/* 07919C 7F0467AC 304E0008 */ andi $t6, $v0, 8 -/* 0791A0 7F0467B0 11C00002 */ beqz $t6, .L7F0467BC -/* 0791A4 7F0467B4 344D0010 */ ori $t5, $v0, 0x10 -/* 0791A8 7F0467B8 A26D0001 */ sb $t5, 1($s3) -.L7F0467BC: -/* 0791AC 7F0467BC 92380003 */ lbu $t8, 3($s1) -/* 0791B0 7F0467C0 24010008 */ li $at, 8 -/* 0791B4 7F0467C4 57010006 */ bnel $t8, $at, .L7F0467E0 -/* 0791B8 7F0467C8 8FB90698 */ lw $t9, 0x698($sp) -/* 0791BC 7F0467CC 8E6F0014 */ lw $t7, 0x14($s3) -/* 0791C0 7F0467D0 82240080 */ lb $a0, 0x80($s1) -/* 0791C4 7F0467D4 0FC15EB9 */ jal objectivestatusCheckDeposit -/* 0791C8 7F0467D8 91E50003 */ lbu $a1, 3($t7) -.L7F0467DC: -/* 0791CC 7F0467DC 8FB90698 */ lw $t9, 0x698($sp) -.L7F0467E0: -/* 0791D0 7F0467E0 1320000A */ beqz $t9, .L7F04680C -/* 0791D4 7F0467E4 02202025 */ move $a0, $s1 -/* 0791D8 7F0467E8 0FC10151 */ jal chrobjCollisionRelated -/* 0791DC 7F0467EC 26300058 */ addiu $s0, $s1, 0x58 -/* 0791E0 7F0467F0 0FC15BE0 */ jal setupUpdateObjectRoomPosition -/* 0791E4 7F0467F4 02202025 */ move $a0, $s1 -/* 0791E8 7F0467F8 8E240010 */ lw $a0, 0x10($s1) -/* 0791EC 7F0467FC 0FC100DD */ jal sub_GAME_7F0402B4 -/* 0791F0 7F046800 2625007C */ addiu $a1, $s1, 0x7c -/* 0791F4 7F046804 0FC147AB */ jal detonate_proxmine_In_range -/* 0791F8 7F046808 02002025 */ move $a0, $s0 -.L7F04680C: -/* 0791FC 7F04680C 92220003 */ lbu $v0, 3($s1) -/* 079200 7F046810 24010001 */ li $at, 1 -/* 079204 7F046814 54410059 */ bnel $v0, $at, .L7F04697C -/* 079208 7F046818 24010006 */ li $at, 6 -/* 07920C 7F04681C 8E700004 */ lw $s0, 4($s3) -/* 079210 7F046820 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 079214 7F046824 E7A60684 */ swc1 $f6, 0x684($sp) -/* 079218 7F046828 8E0200EC */ lw $v0, 0xec($s0) -/* 07921C 7F04682C 5840001A */ blezl $v0, .L7F046898 -/* 079220 7F046830 820F00BC */ lb $t7, 0xbc($s0) -/* 079224 7F046834 820900BC */ lb $t1, 0xbc($s0) -/* 079228 7F046838 55200017 */ bnezl $t1, .L7F046898 -/* 07922C 7F04683C 820F00BC */ lb $t7, 0xbc($s0) -/* 079230 7F046840 8E0A0008 */ lw $t2, 8($s0) -/* 079234 7F046844 3C0C8004 */ lui $t4, %hi(g_GlobalTimer) # $t4, 0x8004 -/* 079238 7F046848 000A4000 */ sll $t0, $t2, 0 -/* 07923C 7F04684C 05020012 */ bltzl $t0, .L7F046898 -/* 079240 7F046850 820F00BC */ lb $t7, 0xbc($s0) -/* 079244 7F046854 8E0B00A0 */ lw $t3, 0xa0($s0) -/* 079248 7F046858 2401003C */ li $at, 60 -/* 07924C 7F04685C 8D8C0FFC */ lw $t4, %lo(g_GlobalTimer)($t4) -/* 079250 7F046860 000B7080 */ sll $t6, $t3, 2 -/* 079254 7F046864 01CB7023 */ subu $t6, $t6, $t3 -/* 079258 7F046868 000E70C0 */ sll $t6, $t6, 3 -/* 07925C 7F04686C 01CB7021 */ addu $t6, $t6, $t3 -/* 079260 7F046870 000E7040 */ sll $t6, $t6, 1 -/* 079264 7F046874 01C1001A */ div $zero, $t6, $at -/* 079268 7F046878 00006812 */ mflo $t5 -/* 07926C 7F04687C 018DC023 */ subu $t8, $t4, $t5 -/* 079270 7F046880 0058082A */ slt $at, $v0, $t8 -/* 079274 7F046884 10200003 */ beqz $at, .L7F046894 -/* 079278 7F046888 02002025 */ move $a0, $s0 -/* 07927C 7F04688C 0FC1531A */ jal doorActivate -/* 079280 7F046890 24050002 */ li $a1, 2 -.L7F046894: -/* 079284 7F046894 820F00BC */ lb $t7, 0xbc($s0) -.L7F046898: -/* 079288 7F046898 24010003 */ li $at, 3 -/* 07928C 7F04689C 55E1001B */ bnel $t7, $at, .L7F04690C -/* 079290 7F0468A0 9609009A */ lhu $t1, 0x9a($s0) -/* 079294 7F0468A4 8E0200C8 */ lw $v0, 0xc8($s0) -/* 079298 7F0468A8 24030001 */ li $v1, 1 -/* 07929C 7F0468AC 02002025 */ move $a0, $s0 -/* 0792A0 7F0468B0 10400011 */ beqz $v0, .L7F0468F8 -/* 0792A4 7F0468B4 00000000 */ nop -/* 0792A8 7F0468B8 1050000F */ beq $v0, $s0, .L7F0468F8 -/* 0792AC 7F0468BC 00000000 */ nop -/* 0792B0 7F0468C0 805900BC */ lb $t9, 0xbc($v0) -.L7F0468C4: -/* 0792B4 7F0468C4 57200007 */ bnezl $t9, .L7F0468E4 -/* 0792B8 7F0468C8 00001825 */ move $v1, $zero -/* 0792BC 7F0468CC C44A00B4 */ lwc1 $f10, 0xb4($v0) -/* 0792C0 7F0468D0 460AB03C */ c.lt.s $f22, $f10 -/* 0792C4 7F0468D4 00000000 */ nop -/* 0792C8 7F0468D8 45020003 */ bc1fl .L7F0468E8 -/* 0792CC 7F0468DC 8C4200C8 */ lw $v0, 0xc8($v0) -/* 0792D0 7F0468E0 00001825 */ move $v1, $zero -.L7F0468E4: -/* 0792D4 7F0468E4 8C4200C8 */ lw $v0, 0xc8($v0) -.L7F0468E8: -/* 0792D8 7F0468E8 10400003 */ beqz $v0, .L7F0468F8 -/* 0792DC 7F0468EC 00000000 */ nop -/* 0792E0 7F0468F0 5450FFF4 */ bnel $v0, $s0, .L7F0468C4 -/* 0792E4 7F0468F4 805900BC */ lb $t9, 0xbc($v0) -.L7F0468F8: -/* 0792E8 7F0468F8 50600004 */ beql $v1, $zero, .L7F04690C -/* 0792EC 7F0468FC 9609009A */ lhu $t1, 0x9a($s0) -/* 0792F0 7F046900 0FC152E1 */ jal doorSetOpenState -/* 0792F4 7F046904 24050001 */ li $a1, 1 -/* 0792F8 7F046908 9609009A */ lhu $t1, 0x9a($s0) -.L7F04690C: -/* 0792FC 7F04690C 24010008 */ li $at, 8 -/* 079300 7F046910 1521000B */ bne $t1, $at, .L7F046940 -/* 079304 7F046914 00000000 */ nop -/* 079308 7F046918 0FC15340 */ jal doorIsClosed -/* 07930C 7F04691C 02002025 */ move $a0, $s0 -/* 079310 7F046920 10400007 */ beqz $v0, .L7F046940 -/* 079314 7F046924 00000000 */ nop -/* 079318 7F046928 0FC0F9F6 */ jal doorIsPadlockFree -/* 07931C 7F04692C 02002025 */ move $a0, $s0 -/* 079320 7F046930 10400003 */ beqz $v0, .L7F046940 -/* 079324 7F046934 00000000 */ nop -/* 079328 7F046938 0FC1571F */ jal doorActivateWrapper -/* 07932C 7F04693C 02602025 */ move $a0, $s3 -.L7F046940: -/* 079330 7F046940 3C088004 */ lui $t0, %hi(g_GlobalTimer) # $t0, 0x8004 -/* 079334 7F046944 8D080FFC */ lw $t0, %lo(g_GlobalTimer)($t0) -/* 079338 7F046948 8E0A00FC */ lw $t2, 0xfc($s0) -/* 07933C 7F04694C 3C0B8004 */ lui $t3, %hi(g_ClockTimer) # $t3, 0x8004 -/* 079340 7F046950 0148082A */ slt $at, $t2, $t0 -/* 079344 7F046954 14200004 */ bnez $at, .L7F046968 -/* 079348 7F046958 00000000 */ nop -/* 07934C 7F04695C 8D6B0FF4 */ lw $t3, %lo(g_ClockTimer)($t3) -/* 079350 7F046960 556006AB */ bnezl $t3, .L7F048410 -/* 079354 7F046964 92220003 */ lbu $v0, 3($s1) -.L7F046968: -/* 079358 7F046968 0FC154A5 */ jal door7F054FB4 -/* 07935C 7F04696C 02002025 */ move $a0, $s0 -/* 079360 7F046970 100006A7 */ b .L7F048410 -/* 079364 7F046974 92220003 */ lbu $v0, 3($s1) -/* 079368 7F046978 24010006 */ li $at, 6 -.L7F04697C: -/* 07936C 7F04697C 54410130 */ bnel $v0, $at, .L7F046E40 -/* 079370 7F046980 2401000D */ li $at, 13 -/* 079374 7F046984 8E2E0008 */ lw $t6, 8($s1) -/* 079378 7F046988 000E60C0 */ sll $t4, $t6, 3 -/* 07937C 7F04698C 0582012C */ bltzl $t4, .L7F046E40 -/* 079380 7F046990 2401000D */ li $at, 13 -/* 079384 7F046994 8E700004 */ lw $s0, 4($s3) -/* 079388 7F046998 8E0D00D4 */ lw $t5, 0xd4($s0) -/* 07938C 7F04699C 51A00004 */ beql $t5, $zero, .L7F0469B0 -/* 079390 7F0469A0 C61200D0 */ lwc1 $f18, 0xd0($s0) -/* 079394 7F0469A4 10000002 */ b .L7F0469B0 -/* 079398 7F0469A8 C61200CC */ lwc1 $f18, 0xcc($s0) -/* 07939C 7F0469AC C61200D0 */ lwc1 $f18, 0xd0($s0) -.L7F0469B0: -/* 0793A0 7F0469B0 0FC22640 */ jal get_curplayer_positiondata -/* 0793A4 7F0469B4 E7B2051C */ swc1 $f18, 0x51c($sp) -/* 0793A8 7F0469B8 AFA20518 */ sw $v0, 0x518($sp) -/* 0793AC 7F0469BC C6280058 */ lwc1 $f8, 0x58($s1) -/* 0793B0 7F0469C0 C4440008 */ lwc1 $f4, 8($v0) -/* 0793B4 7F0469C4 C60000E8 */ lwc1 $f0, 0xe8($s0) -/* 0793B8 7F0469C8 C62A005C */ lwc1 $f10, 0x5c($s1) -/* 0793BC 7F0469CC 46082301 */ sub.s $f12, $f4, $f8 -/* 0793C0 7F0469D0 C446000C */ lwc1 $f6, 0xc($v0) -/* 0793C4 7F0469D4 C6280060 */ lwc1 $f8, 0x60($s1) -/* 0793C8 7F0469D8 4600B03C */ c.lt.s $f22, $f0 -/* 0793CC 7F0469DC C4440010 */ lwc1 $f4, 0x10($v0) -/* 0793D0 7F0469E0 C7B2051C */ lwc1 $f18, 0x51c($sp) -/* 0793D4 7F0469E4 24120001 */ li $s2, 1 -/* 0793D8 7F0469E8 460A3081 */ sub.s $f2, $f6, $f10 -/* 0793DC 7F0469EC 4500000E */ bc1f .L7F046A28 -/* 0793E0 7F0469F0 46082381 */ sub.s $f14, $f4, $f8 -/* 0793E4 7F0469F4 46000182 */ mul.s $f6, $f0, $f0 -/* 0793E8 7F0469F8 00000000 */ nop -/* 0793EC 7F0469FC 460C6282 */ mul.s $f10, $f12, $f12 -/* 0793F0 7F046A00 00000000 */ nop -/* 0793F4 7F046A04 46021102 */ mul.s $f4, $f2, $f2 -/* 0793F8 7F046A08 46045200 */ add.s $f8, $f10, $f4 -/* 0793FC 7F046A0C 460E7282 */ mul.s $f10, $f14, $f14 -/* 079400 7F046A10 460A4100 */ add.s $f4, $f8, $f10 -/* 079404 7F046A14 4604303C */ c.lt.s $f6, $f4 -/* 079408 7F046A18 00000000 */ nop -/* 07940C 7F046A1C 45000002 */ bc1f .L7F046A28 -/* 079410 7F046A20 00000000 */ nop -/* 079414 7F046A24 00009025 */ move $s2, $zero -.L7F046A28: -/* 079418 7F046A28 8E380008 */ lw $t8, 8($s1) -/* 07941C 7F046A2C 00187880 */ sll $t7, $t8, 2 -/* 079420 7F046A30 05E10002 */ bgez $t7, .L7F046A3C -/* 079424 7F046A34 00000000 */ nop -/* 079428 7F046A38 00009025 */ move $s2, $zero -.L7F046A3C: -/* 07942C 7F046A3C 1240003A */ beqz $s2, .L7F046B28 -/* 079430 7F046A40 00000000 */ nop -/* 079434 7F046A44 0FC16BB8 */ jal atan2f -/* 079438 7F046A48 E7B2051C */ swc1 $f18, 0x51c($sp) -/* 07943C 7F046A4C C60200C8 */ lwc1 $f2, 0xc8($s0) -/* 079440 7F046A50 C7B2051C */ lwc1 $f18, 0x51c($sp) -/* 079444 7F046A54 3C018005 */ lui $at, %hi(D_80052ACC) -/* 079448 7F046A58 4616103C */ c.lt.s $f2, $f22 -/* 07944C 7F046A5C 00000000 */ nop -/* 079450 7F046A60 45000005 */ bc1f .L7F046A78 -/* 079454 7F046A64 00000000 */ nop -/* 079458 7F046A68 3C018005 */ lui $at, %hi(D_80052AC8) # $at, 0x8005 -/* 07945C 7F046A6C C4348C08 */ lwc1 $f20, %lo(D_80052AC8)($at) -/* 079460 7F046A70 10000007 */ b .L7F046A90 -/* 079464 7F046A74 46141080 */ add.s $f2, $f2, $f20 -.L7F046A78: -/* 079468 7F046A78 C4348C0C */ lwc1 $f20, %lo(D_80052ACC)($at) -/* 07946C 7F046A7C 4602A03E */ c.le.s $f20, $f2 -/* 079470 7F046A80 00000000 */ nop -/* 079474 7F046A84 45020003 */ bc1fl .L7F046A94 -/* 079478 7F046A88 C60800C4 */ lwc1 $f8, 0xc4($s0) -/* 07947C 7F046A8C 46141081 */ sub.s $f2, $f2, $f20 -.L7F046A90: -/* 079480 7F046A90 C60800C4 */ lwc1 $f8, 0xc4($s0) -.L7F046A94: -/* 079484 7F046A94 3C018005 */ lui $at, %hi(D_80052AD0) # $at, 0x8005 -/* 079488 7F046A98 46081080 */ add.s $f2, $f2, $f8 -/* 07948C 7F046A9C 4602A03E */ c.le.s $f20, $f2 -/* 079490 7F046AA0 00000000 */ nop -/* 079494 7F046AA4 45020003 */ bc1fl .L7F046AB4 -/* 079498 7F046AA8 4602003C */ c.lt.s $f0, $f2 -/* 07949C 7F046AAC 46141081 */ sub.s $f2, $f2, $f20 -/* 0794A0 7F046AB0 4602003C */ c.lt.s $f0, $f2 -.L7F046AB4: -/* 0794A4 7F046AB4 46020381 */ sub.s $f14, $f0, $f2 -/* 0794A8 7F046AB8 45000002 */ bc1f .L7F046AC4 -/* 0794AC 7F046ABC 46007306 */ mov.s $f12, $f14 -/* 0794B0 7F046AC0 46147300 */ add.s $f12, $f14, $f20 -.L7F046AC4: -/* 0794B4 7F046AC4 C4208C10 */ lwc1 $f0, %lo(D_80052AD0)($at) -/* 0794B8 7F046AC8 3C018005 */ lui $at, %hi(D_80052AD4) # $at, 0x8005 -/* 0794BC 7F046ACC 46006301 */ sub.s $f12, $f12, $f0 -/* 0794C0 7F046AD0 4616603C */ c.lt.s $f12, $f22 -/* 0794C4 7F046AD4 00000000 */ nop -/* 0794C8 7F046AD8 45020003 */ bc1fl .L7F046AE8 -/* 0794CC 7F046ADC 460C003C */ c.lt.s $f0, $f12 -/* 0794D0 7F046AE0 46146300 */ add.s $f12, $f12, $f20 -/* 0794D4 7F046AE4 460C003C */ c.lt.s $f0, $f12 -.L7F046AE8: -/* 0794D8 7F046AE8 00000000 */ nop -/* 0794DC 7F046AEC 45000002 */ bc1f .L7F046AF8 -/* 0794E0 7F046AF0 00000000 */ nop -/* 0794E4 7F046AF4 46146301 */ sub.s $f12, $f12, $f20 -.L7F046AF8: -/* 0794E8 7F046AF8 C42A8C14 */ lwc1 $f10, %lo(D_80052AD4)($at) -/* 0794EC 7F046AFC 3C018005 */ lui $at, %hi(D_80052AD8) -/* 0794F0 7F046B00 460C503C */ c.lt.s $f10, $f12 -/* 0794F4 7F046B04 00000000 */ nop -/* 0794F8 7F046B08 45030007 */ bc1tl .L7F046B28 -/* 0794FC 7F046B0C 00009025 */ move $s2, $zero -/* 079500 7F046B10 C4268C18 */ lwc1 $f6, %lo(D_80052AD8)($at) -/* 079504 7F046B14 4606603C */ c.lt.s $f12, $f6 -/* 079508 7F046B18 00000000 */ nop -/* 07950C 7F046B1C 45000002 */ bc1f .L7F046B28 -/* 079510 7F046B20 00000000 */ nop -/* 079514 7F046B24 00009025 */ move $s2, $zero -.L7F046B28: -/* 079518 7F046B28 12400034 */ beqz $s2, .L7F046BFC -/* 07951C 7F046B2C 00002825 */ move $a1, $zero -/* 079520 7F046B30 8E790014 */ lw $t9, 0x14($s3) -/* 079524 7F046B34 E7B2051C */ swc1 $f18, 0x51c($sp) -/* 079528 7F046B38 8FA40518 */ lw $a0, 0x518($sp) -/* 07952C 7F046B3C 0FC22882 */ jal bondviewUpdateGuardTankFlagsRelated -/* 079530 7F046B40 AFB904F4 */ sw $t9, 0x4f4($sp) -/* 079534 7F046B44 8FA20518 */ lw $v0, 0x518($sp) -/* 079538 7F046B48 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 07953C 7F046B4C 8E650008 */ lw $a1, 8($s3) -/* 079540 7F046B50 C4440010 */ lwc1 $f4, 0x10($v0) -/* 079544 7F046B54 8E660010 */ lw $a2, 0x10($s3) -/* 079548 7F046B58 8C470008 */ lw $a3, 8($v0) -/* 07954C 7F046B5C 44814000 */ mtc1 $at, $f8 -/* 079550 7F046B60 44815000 */ mtc1 $at, $f10 -/* 079554 7F046B64 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 079558 7F046B68 44813000 */ mtc1 $at, $f6 -/* 07955C 7F046B6C 2409001B */ li $t1, 27 -/* 079560 7F046B70 AFA90014 */ sw $t1, 0x14($sp) -/* 079564 7F046B74 E7B60020 */ swc1 $f22, 0x20($sp) -/* 079568 7F046B78 27A404F4 */ addiu $a0, $sp, 0x4f4 -/* 07956C 7F046B7C E7A40010 */ swc1 $f4, 0x10($sp) -/* 079570 7F046B80 E7A80018 */ swc1 $f8, 0x18($sp) -/* 079574 7F046B84 E7AA001C */ swc1 $f10, 0x1c($sp) -/* 079578 7F046B88 0FC2C039 */ jal stanTestLineUnobstructed -/* 07957C 7F046B8C E7A60024 */ swc1 $f6, 0x24($sp) -/* 079580 7F046B90 10400015 */ beqz $v0, .L7F046BE8 -/* 079584 7F046B94 C7B2051C */ lwc1 $f18, 0x51c($sp) -/* 079588 7F046B98 3C088004 */ lui $t0, %hi(g_ClockTimer) # $t0, 0x8004 -/* 07958C 7F046B9C 8D080FF4 */ lw $t0, %lo(g_ClockTimer)($t0) -/* 079590 7F046BA0 8E0A00E0 */ lw $t2, 0xe0($s0) -/* 079594 7F046BA4 3C01437A */ li $at, 0x437A0000 # 250.000000 -/* 079598 7F046BA8 44812000 */ mtc1 $at, $f4 -/* 07959C 7F046BAC 01485821 */ addu $t3, $t2, $t0 -/* 0795A0 7F046BB0 AE0B00E0 */ sw $t3, 0xe0($s0) -/* 0795A4 7F046BB4 3C018003 */ lui $at, %hi(F_80030B14) # $at, 0x8003 -/* 0795A8 7F046BB8 C428C064 */ lwc1 $f8, %lo(F_80030B14)($at) -/* 0795AC 7F046BBC 46082282 */ mul.s $f10, $f4, $f8 -/* 0795B0 7F046BC0 4600518D */ trunc.w.s $f6, $f10 -/* 0795B4 7F046BC4 440D3000 */ mfc1 $t5, $f6 -/* 0795B8 7F046BC8 00000000 */ nop -/* 0795BC 7F046BCC 016D082A */ slt $at, $t3, $t5 -/* 0795C0 7F046BD0 54200006 */ bnezl $at, .L7F046BEC -/* 0795C4 7F046BD4 8FA40518 */ lw $a0, 0x518($sp) -/* 0795C8 7F046BD8 0FC1582A */ jal alarmActivate -/* 0795CC 7F046BDC E7B2051C */ swc1 $f18, 0x51c($sp) -/* 0795D0 7F046BE0 C7B2051C */ lwc1 $f18, 0x51c($sp) -/* 0795D4 7F046BE4 AE0000E0 */ sw $zero, 0xe0($s0) -.L7F046BE8: -/* 0795D8 7F046BE8 8FA40518 */ lw $a0, 0x518($sp) -.L7F046BEC: -/* 0795DC 7F046BEC 24050001 */ li $a1, 1 -/* 0795E0 7F046BF0 0FC22882 */ jal bondviewUpdateGuardTankFlagsRelated -/* 0795E4 7F046BF4 E7B2051C */ swc1 $f18, 0x51c($sp) -/* 0795E8 7F046BF8 C7B2051C */ lwc1 $f18, 0x51c($sp) -.L7F046BFC: -/* 0795EC 7F046BFC C60E00C8 */ lwc1 $f14, 0xc8($s0) -/* 0795F0 7F046C00 4612703C */ c.lt.s $f14, $f18 -/* 0795F4 7F046C04 00000000 */ nop -/* 0795F8 7F046C08 45020047 */ bc1fl .L7F046D28 -/* 0795FC 7F046C0C C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 079600 7F046C10 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 079604 7F046C14 3C018005 */ lui $at, %hi(D_80052AE0) # $at, 0x8005 -/* 079608 7F046C18 C4308C20 */ lwc1 $f16, %lo(D_80052AE0)($at) -/* 07960C 7F046C1C 46000102 */ mul.s $f4, $f0, $f0 -/* 079610 7F046C20 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 079614 7F046C24 44814000 */ mtc1 $at, $f8 -/* 079618 7F046C28 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07961C 7F046C2C 46082282 */ mul.s $f10, $f4, $f8 -/* 079620 7F046C30 46105083 */ div.s $f2, $f10, $f16 -/* 079624 7F046C34 46029181 */ sub.s $f6, $f18, $f2 -/* 079628 7F046C38 460E303E */ c.le.s $f6, $f14 -/* 07962C 7F046C3C 00000000 */ nop -/* 079630 7F046C40 4502000F */ bc1fl .L7F046C80 -/* 079634 7F046C44 C60C00DC */ lwc1 $f12, 0xdc($s0) -/* 079638 7F046C48 C4241004 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07963C 7F046C4C 46048202 */ mul.s $f8, $f16, $f4 -/* 079640 7F046C50 46080281 */ sub.s $f10, $f0, $f8 -/* 079644 7F046C54 E60A00D8 */ swc1 $f10, 0xd8($s0) -/* 079648 7F046C58 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 07964C 7F046C5C 4610003C */ c.lt.s $f0, $f16 -/* 079650 7F046C60 00000000 */ nop -/* 079654 7F046C64 45000003 */ bc1f .L7F046C74 -/* 079658 7F046C68 00000000 */ nop -/* 07965C 7F046C6C E61000D8 */ swc1 $f16, 0xd8($s0) -/* 079660 7F046C70 C60000D8 */ lwc1 $f0, 0xd8($s0) -.L7F046C74: -/* 079664 7F046C74 1000001D */ b .L7F046CEC -/* 079668 7F046C78 C60E00C8 */ lwc1 $f14, 0xc8($s0) -/* 07966C 7F046C7C C60C00DC */ lwc1 $f12, 0xdc($s0) -.L7F046C80: -/* 079670 7F046C80 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 079674 7F046C84 460C003C */ c.lt.s $f0, $f12 -/* 079678 7F046C88 00000000 */ nop -/* 07967C 7F046C8C 45000017 */ bc1f .L7F046CEC -/* 079680 7F046C90 00000000 */ nop -/* 079684 7F046C94 C4261004 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) -/* 079688 7F046C98 46068102 */ mul.s $f4, $f16, $f6 -/* 07968C 7F046C9C 46040080 */ add.s $f2, $f0, $f4 -/* 079690 7F046CA0 4602603C */ c.lt.s $f12, $f2 -/* 079694 7F046CA4 00000000 */ nop -/* 079698 7F046CA8 45000002 */ bc1f .L7F046CB4 -/* 07969C 7F046CAC 00000000 */ nop -/* 0796A0 7F046CB0 46006086 */ mov.s $f2, $f12 -.L7F046CB4: -/* 0796A4 7F046CB4 46021202 */ mul.s $f8, $f2, $f2 -/* 0796A8 7F046CB8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0796AC 7F046CBC 44815000 */ mtc1 $at, $f10 -/* 0796B0 7F046CC0 00000000 */ nop -/* 0796B4 7F046CC4 460A4182 */ mul.s $f6, $f8, $f10 -/* 0796B8 7F046CC8 46103103 */ div.s $f4, $f6, $f16 -/* 0796BC 7F046CCC 46049201 */ sub.s $f8, $f18, $f4 -/* 0796C0 7F046CD0 4608703C */ c.lt.s $f14, $f8 -/* 0796C4 7F046CD4 00000000 */ nop -/* 0796C8 7F046CD8 45000004 */ bc1f .L7F046CEC -/* 0796CC 7F046CDC 00000000 */ nop -/* 0796D0 7F046CE0 E60200D8 */ swc1 $f2, 0xd8($s0) -/* 0796D4 7F046CE4 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 0796D8 7F046CE8 C60E00C8 */ lwc1 $f14, 0xc8($s0) -.L7F046CEC: -/* 0796DC 7F046CEC 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 0796E0 7F046CF0 C42A1004 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 0796E4 7F046CF4 460A0182 */ mul.s $f6, $f0, $f10 -/* 0796E8 7F046CF8 46067100 */ add.s $f4, $f14, $f6 -/* 0796EC 7F046CFC E60400C8 */ swc1 $f4, 0xc8($s0) -/* 0796F0 7F046D00 C60800C8 */ lwc1 $f8, 0xc8($s0) -/* 0796F4 7F046D04 4608903E */ c.le.s $f18, $f8 -/* 0796F8 7F046D08 00000000 */ nop -/* 0796FC 7F046D0C 450205C0 */ bc1fl .L7F048410 -/* 079700 7F046D10 92220003 */ lbu $v0, 3($s1) -/* 079704 7F046D14 E61200C8 */ swc1 $f18, 0xc8($s0) -/* 079708 7F046D18 E61600D8 */ swc1 $f22, 0xd8($s0) -/* 07970C 7F046D1C 100005BB */ b .L7F04840C -/* 079710 7F046D20 AE0000D4 */ sw $zero, 0xd4($s0) -/* 079714 7F046D24 C60000D8 */ lwc1 $f0, 0xd8($s0) -.L7F046D28: -/* 079718 7F046D28 3C018005 */ lui $at, %hi(D_80052AE4) # $at, 0x8005 -/* 07971C 7F046D2C C4308C24 */ lwc1 $f16, %lo(D_80052AE4)($at) -/* 079720 7F046D30 46000282 */ mul.s $f10, $f0, $f0 -/* 079724 7F046D34 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 079728 7F046D38 44813000 */ mtc1 $at, $f6 -/* 07972C 7F046D3C 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 079730 7F046D40 24180001 */ li $t8, 1 -/* 079734 7F046D44 46065102 */ mul.s $f4, $f10, $f6 -/* 079738 7F046D48 46102083 */ div.s $f2, $f4, $f16 -/* 07973C 7F046D4C 46029200 */ add.s $f8, $f18, $f2 -/* 079740 7F046D50 4608703E */ c.le.s $f14, $f8 -/* 079744 7F046D54 00000000 */ nop -/* 079748 7F046D58 4502000F */ bc1fl .L7F046D98 -/* 07974C 7F046D5C C60C00DC */ lwc1 $f12, 0xdc($s0) -/* 079750 7F046D60 C42A1004 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 079754 7F046D64 460A8182 */ mul.s $f6, $f16, $f10 -/* 079758 7F046D68 46060101 */ sub.s $f4, $f0, $f6 -/* 07975C 7F046D6C E60400D8 */ swc1 $f4, 0xd8($s0) -/* 079760 7F046D70 C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 079764 7F046D74 4610003C */ c.lt.s $f0, $f16 -/* 079768 7F046D78 00000000 */ nop -/* 07976C 7F046D7C 45000003 */ bc1f .L7F046D8C -/* 079770 7F046D80 00000000 */ nop -/* 079774 7F046D84 E61000D8 */ swc1 $f16, 0xd8($s0) -/* 079778 7F046D88 C60000D8 */ lwc1 $f0, 0xd8($s0) -.L7F046D8C: -/* 07977C 7F046D8C 1000001D */ b .L7F046E04 -/* 079780 7F046D90 C60E00C8 */ lwc1 $f14, 0xc8($s0) -/* 079784 7F046D94 C60C00DC */ lwc1 $f12, 0xdc($s0) -.L7F046D98: -/* 079788 7F046D98 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07978C 7F046D9C 460C003C */ c.lt.s $f0, $f12 -/* 079790 7F046DA0 00000000 */ nop -/* 079794 7F046DA4 45000017 */ bc1f .L7F046E04 -/* 079798 7F046DA8 00000000 */ nop -/* 07979C 7F046DAC C4281004 */ lwc1 $f8, %lo(g_GlobalTimerDelta)($at) -/* 0797A0 7F046DB0 46088282 */ mul.s $f10, $f16, $f8 -/* 0797A4 7F046DB4 460A0080 */ add.s $f2, $f0, $f10 -/* 0797A8 7F046DB8 4602603C */ c.lt.s $f12, $f2 -/* 0797AC 7F046DBC 00000000 */ nop -/* 0797B0 7F046DC0 45000002 */ bc1f .L7F046DCC -/* 0797B4 7F046DC4 00000000 */ nop -/* 0797B8 7F046DC8 46006086 */ mov.s $f2, $f12 -.L7F046DCC: -/* 0797BC 7F046DCC 46021182 */ mul.s $f6, $f2, $f2 -/* 0797C0 7F046DD0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0797C4 7F046DD4 44812000 */ mtc1 $at, $f4 -/* 0797C8 7F046DD8 00000000 */ nop -/* 0797CC 7F046DDC 46043202 */ mul.s $f8, $f6, $f4 -/* 0797D0 7F046DE0 46104283 */ div.s $f10, $f8, $f16 -/* 0797D4 7F046DE4 460A9180 */ add.s $f6, $f18, $f10 -/* 0797D8 7F046DE8 460E303C */ c.lt.s $f6, $f14 -/* 0797DC 7F046DEC 00000000 */ nop -/* 0797E0 7F046DF0 45000004 */ bc1f .L7F046E04 -/* 0797E4 7F046DF4 00000000 */ nop -/* 0797E8 7F046DF8 E60200D8 */ swc1 $f2, 0xd8($s0) -/* 0797EC 7F046DFC C60000D8 */ lwc1 $f0, 0xd8($s0) -/* 0797F0 7F046E00 C60E00C8 */ lwc1 $f14, 0xc8($s0) -.L7F046E04: -/* 0797F4 7F046E04 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 0797F8 7F046E08 C4241004 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 0797FC 7F046E0C 46040202 */ mul.s $f8, $f0, $f4 -/* 079800 7F046E10 46087281 */ sub.s $f10, $f14, $f8 -/* 079804 7F046E14 E60A00C8 */ swc1 $f10, 0xc8($s0) -/* 079808 7F046E18 C60600C8 */ lwc1 $f6, 0xc8($s0) -/* 07980C 7F046E1C 4612303E */ c.le.s $f6, $f18 -/* 079810 7F046E20 00000000 */ nop -/* 079814 7F046E24 4502057A */ bc1fl .L7F048410 -/* 079818 7F046E28 92220003 */ lbu $v0, 3($s1) -/* 07981C 7F046E2C E61200C8 */ swc1 $f18, 0xc8($s0) -/* 079820 7F046E30 E61600D8 */ swc1 $f22, 0xd8($s0) -/* 079824 7F046E34 10000575 */ b .L7F04840C -/* 079828 7F046E38 AE1800D4 */ sw $t8, 0xd4($s0) -/* 07982C 7F046E3C 2401000D */ li $at, 13 -.L7F046E40: -/* 079830 7F046E40 5441023F */ bnel $v0, $at, .L7F047740 -/* 079834 7F046E44 24010027 */ li $at, 39 -/* 079838 7F046E48 8E2F0008 */ lw $t7, 8($s1) -/* 07983C 7F046E4C 000FC8C0 */ sll $t9, $t7, 3 -/* 079840 7F046E50 0722023B */ bltzl $t9, .L7F047740 -/* 079844 7F046E54 24010027 */ li $at, 39 -/* 079848 7F046E58 0FC22640 */ jal get_curplayer_positiondata -/* 07984C 7F046E5C 8E700004 */ lw $s0, 4($s3) -/* 079850 7F046E60 AFA004B0 */ sw $zero, 0x4b0($sp) -/* 079854 7F046E64 AFA004AC */ sw $zero, 0x4ac($sp) -/* 079858 7F046E68 AFA004A8 */ sw $zero, 0x4a8($sp) -/* 07985C 7F046E6C 8E23000C */ lw $v1, 0xc($s1) -/* 079860 7F046E70 00409025 */ move $s2, $v0 -/* 079864 7F046E74 00034800 */ sll $t1, $v1, 0 -/* 079868 7F046E78 05210056 */ bgez $t1, .L7F046FD4 -/* 07986C 7F046E7C 00035040 */ sll $t2, $v1, 1 -/* 079870 7F046E80 05430008 */ bgezl $t2, .L7F046EA4 -/* 079874 7F046E84 C6020084 */ lwc1 $f2, 0x84($s0) -/* 079878 7F046E88 C6080090 */ lwc1 $f8, 0x90($s0) -/* 07987C 7F046E8C C604009C */ lwc1 $f4, 0x9c($s0) -/* 079880 7F046E90 E6080084 */ swc1 $f8, 0x84($s0) -/* 079884 7F046E94 C6020084 */ lwc1 $f2, 0x84($s0) -/* 079888 7F046E98 10000036 */ b .L7F046F74 -/* 07988C 7F046E9C E6040098 */ swc1 $f4, 0x98($s0) -/* 079890 7F046EA0 C6020084 */ lwc1 $f2, 0x84($s0) -.L7F046EA4: -/* 079894 7F046EA4 C60A0090 */ lwc1 $f10, 0x90($s0) -/* 079898 7F046EA8 460A1032 */ c.eq.s $f2, $f10 -/* 07989C 7F046EAC 00000000 */ nop -/* 0798A0 7F046EB0 45000030 */ bc1f .L7F046F74 -/* 0798A4 7F046EB4 00000000 */ nop -/* 0798A8 7F046EB8 C6060098 */ lwc1 $f6, 0x98($s0) -/* 0798AC 7F046EBC C604009C */ lwc1 $f4, 0x9c($s0) -/* 0798B0 7F046EC0 46043032 */ c.eq.s $f6, $f4 -/* 0798B4 7F046EC4 00000000 */ nop -/* 0798B8 7F046EC8 4500002A */ bc1f .L7F046F74 -/* 0798BC 7F046ECC 00000000 */ nop -/* 0798C0 7F046ED0 0C00262C */ jal randomGetNext -/* 0798C4 7F046ED4 00000000 */ nop -/* 0798C8 7F046ED8 44824000 */ mtc1 $v0, $f8 -/* 0798CC 7F046EDC 3C018005 */ lui $at, %hi(D_80052AE8) # $at, 0x8005 -/* 0798D0 7F046EE0 C4348C28 */ lwc1 $f20, %lo(D_80052AE8)($at) -/* 0798D4 7F046EE4 04410005 */ bgez $v0, .L7F046EFC -/* 0798D8 7F046EE8 468042A0 */ cvt.s.w $f10, $f8 -/* 0798DC 7F046EEC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0798E0 7F046EF0 44813000 */ mtc1 $at, $f6 -/* 0798E4 7F046EF4 00000000 */ nop -/* 0798E8 7F046EF8 46065280 */ add.s $f10, $f10, $f6 -.L7F046EFC: -/* 0798EC 7F046EFC 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0798F0 7F046F00 44812000 */ mtc1 $at, $f4 -/* 0798F4 7F046F04 3C01421C */ li $at, 0x421C0000 # 39.000000 -/* 0798F8 7F046F08 44813000 */ mtc1 $at, $f6 -/* 0798FC 7F046F0C 46045202 */ mul.s $f8, $f10, $f4 -/* 079900 7F046F10 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 079904 7F046F14 44812000 */ mtc1 $at, $f4 -/* 079908 7F046F18 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07990C 7F046F1C 46064282 */ mul.s $f10, $f8, $f6 -/* 079910 7F046F20 46045200 */ add.s $f8, $f10, $f4 -/* 079914 7F046F24 44815000 */ mtc1 $at, $f10 -/* 079918 7F046F28 46144182 */ mul.s $f6, $f8, $f20 -/* 07991C 7F046F2C 460A3103 */ div.s $f4, $f6, $f10 -/* 079920 7F046F30 0C00262C */ jal randomGetNext -/* 079924 7F046F34 E6040098 */ swc1 $f4, 0x98($s0) -/* 079928 7F046F38 44824000 */ mtc1 $v0, $f8 -/* 07992C 7F046F3C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 079930 7F046F40 04410004 */ bgez $v0, .L7F046F54 -/* 079934 7F046F44 468041A0 */ cvt.s.w $f6, $f8 -/* 079938 7F046F48 44815000 */ mtc1 $at, $f10 -/* 07993C 7F046F4C 00000000 */ nop -/* 079940 7F046F50 460A3180 */ add.s $f6, $f6, $f10 -.L7F046F54: -/* 079944 7F046F54 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 079948 7F046F58 44812000 */ mtc1 $at, $f4 -/* 07994C 7F046F5C 00000000 */ nop -/* 079950 7F046F60 46043202 */ mul.s $f8, $f6, $f4 -/* 079954 7F046F64 00000000 */ nop -/* 079958 7F046F68 46144282 */ mul.s $f10, $f8, $f20 -/* 07995C 7F046F6C E60A0084 */ swc1 $f10, 0x84($s0) -/* 079960 7F046F70 C6020084 */ lwc1 $f2, 0x84($s0) -.L7F046F74: -/* 079964 7F046F74 3C018005 */ lui $at, %hi(D_80052AEC) # $at, 0x8005 -/* 079968 7F046F78 C4208C2C */ lwc1 $f0, %lo(D_80052AEC)($at) -/* 07996C 7F046F7C 3C018005 */ lui $at, %hi(D_80052AF4) # $at, 0x8005 -/* 079970 7F046F80 C4268C34 */ lwc1 $f6, %lo(D_80052AF4)($at) -/* 079974 7F046F84 44051000 */ mfc1 $a1, $f2 -/* 079978 7F046F88 44070000 */ mfc1 $a3, $f0 -/* 07997C 7F046F8C 26040090 */ addiu $a0, $s0, 0x90 -/* 079980 7F046F90 26060094 */ addiu $a2, $s0, 0x94 -/* 079984 7F046F94 E7A00010 */ swc1 $f0, 0x10($sp) -/* 079988 7F046F98 0FC10C73 */ jal chrobjCallsApplySpeed -/* 07998C 7F046F9C E7A60014 */ swc1 $f6, 0x14($sp) -/* 079990 7F046FA0 3C018005 */ lui $at, %hi(D_80052AF8) # $at, 0x8005 -/* 079994 7F046FA4 C4208C38 */ lwc1 $f0, %lo(D_80052AF8)($at) -/* 079998 7F046FA8 3C018005 */ lui $at, %hi(D_80052AFC) # $at, 0x8005 -/* 07999C 7F046FAC C4248C3C */ lwc1 $f4, %lo(D_80052AFC)($at) -/* 0799A0 7F046FB0 8E050098 */ lw $a1, 0x98($s0) -/* 0799A4 7F046FB4 44070000 */ mfc1 $a3, $f0 -/* 0799A8 7F046FB8 2604009C */ addiu $a0, $s0, 0x9c -/* 0799AC 7F046FBC 260600A0 */ addiu $a2, $s0, 0xa0 -/* 0799B0 7F046FC0 E7A00010 */ swc1 $f0, 0x10($sp) -/* 0799B4 7F046FC4 0FC10C73 */ jal chrobjCallsApplySpeed -/* 0799B8 7F046FC8 E7A40014 */ swc1 $f4, 0x14($sp) -/* 0799BC 7F046FCC 10000510 */ b .L7F048410 -/* 0799C0 7F046FD0 92220003 */ lbu $v0, 3($s1) -.L7F046FD4: -/* 0799C4 7F046FD4 C6480008 */ lwc1 $f8, 8($s2) -/* 0799C8 7F046FD8 C62A0058 */ lwc1 $f10, 0x58($s1) -/* 0799CC 7F046FDC C646000C */ lwc1 $f6, 0xc($s2) -/* 0799D0 7F046FE0 C624005C */ lwc1 $f4, 0x5c($s1) -/* 0799D4 7F046FE4 460A4001 */ sub.s $f0, $f8, $f10 -/* 0799D8 7F046FE8 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 0799DC 7F046FEC 44815000 */ mtc1 $at, $f10 -/* 0799E0 7F046FF0 46043201 */ sub.s $f8, $f6, $f4 -/* 0799E4 7F046FF4 460A4181 */ sub.s $f6, $f8, $f10 -/* 0799E8 7F046FF8 46000282 */ mul.s $f10, $f0, $f0 -/* 0799EC 7F046FFC E7A604C4 */ swc1 $f6, 0x4c4($sp) -/* 0799F0 7F047000 C6280060 */ lwc1 $f8, 0x60($s1) -/* 0799F4 7F047004 C6440010 */ lwc1 $f4, 0x10($s2) -/* 0799F8 7F047008 E7A004C8 */ swc1 $f0, 0x4c8($sp) -/* 0799FC 7F04700C 46082081 */ sub.s $f2, $f4, $f8 -/* 079A00 7F047010 46021182 */ mul.s $f6, $f2, $f2 -/* 079A04 7F047014 E7A204C0 */ swc1 $f2, 0x4c0($sp) -/* 079A08 7F047018 46065500 */ add.s $f20, $f10, $f6 -/* 079A0C 7F04701C E7B404BC */ swc1 $f20, 0x4bc($sp) -/* 079A10 7F047020 0C007614 */ jal sqrtf -/* 079A14 7F047024 4600A306 */ mov.s $f12, $f20 -/* 079A18 7F047028 E7A004B4 */ swc1 $f0, 0x4b4($sp) -/* 079A1C 7F04702C 8E280008 */ lw $t0, 8($s1) -/* 079A20 7F047030 46000086 */ mov.s $f2, $f0 -/* 079A24 7F047034 00085900 */ sll $t3, $t0, 4 -/* 079A28 7F047038 05630008 */ bgezl $t3, .L7F04705C -/* 079A2C 7F04703C C7AC04BC */ lwc1 $f12, 0x4bc($sp) -/* 079A30 7F047040 C7A004C4 */ lwc1 $f0, 0x4c4($sp) -/* 079A34 7F047044 46000102 */ mul.s $f4, $f0, $f0 -/* 079A38 7F047048 4604A300 */ add.s $f12, $f20, $f4 -/* 079A3C 7F04704C 0C007614 */ jal sqrtf -/* 079A40 7F047050 E7AC04BC */ swc1 $f12, 0x4bc($sp) -/* 079A44 7F047054 46000086 */ mov.s $f2, $f0 -/* 079A48 7F047058 C7AC04BC */ lwc1 $f12, 0x4bc($sp) -.L7F04705C: -/* 079A4C 7F04705C 0FC0B49E */ jal chrlvGetAimLimitAngle -/* 079A50 7F047060 E7A204B8 */ swc1 $f2, 0x4b8($sp) -/* 079A54 7F047064 E7A004A4 */ swc1 $f0, 0x4a4($sp) -/* 079A58 7F047068 C6080098 */ lwc1 $f8, 0x98($s0) -/* 079A5C 7F04706C C6100084 */ lwc1 $f16, 0x84($s0) -/* 079A60 7F047070 C7A204B8 */ lwc1 $f2, 0x4b8($sp) -/* 079A64 7F047074 E7A804D8 */ swc1 $f8, 0x4d8($sp) -/* 079A68 7F047078 C60A00A8 */ lwc1 $f10, 0xa8($s0) -/* 079A6C 7F04707C 460A103E */ c.le.s $f2, $f10 -/* 079A70 7F047080 00000000 */ nop -/* 079A74 7F047084 45020096 */ bc1fl .L7F0472E0 -/* 079A78 7F047088 8FAF04B0 */ lw $t7, 0x4b0($sp) -/* 079A7C 7F04708C C7AC04C8 */ lwc1 $f12, 0x4c8($sp) -/* 079A80 7F047090 C7AE04C0 */ lwc1 $f14, 0x4c0($sp) -/* 079A84 7F047094 0FC16BB8 */ jal atan2f -/* 079A88 7F047098 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 079A8C 7F04709C E7A004A0 */ swc1 $f0, 0x4a0($sp) -/* 079A90 7F0470A0 C7AC04C4 */ lwc1 $f12, 0x4c4($sp) -/* 079A94 7F0470A4 0FC16BB8 */ jal atan2f -/* 079A98 7F0470A8 C7AE04B4 */ lwc1 $f14, 0x4b4($sp) -/* 079A9C 7F0470AC E7A0049C */ swc1 $f0, 0x49c($sp) -/* 079AA0 7F0470B0 8E220008 */ lw $v0, 8($s1) -/* 079AA4 7F0470B4 C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 079AA8 7F0470B8 240D0001 */ li $t5, 1 -/* 079AAC 7F0470BC 00026040 */ sll $t4, $v0, 1 -/* 079AB0 7F0470C0 05800003 */ bltz $t4, .L7F0470D0 -/* 079AB4 7F0470C4 00027080 */ sll $t6, $v0, 2 -/* 079AB8 7F0470C8 05C10005 */ bgez $t6, .L7F0470E0 -/* 079ABC 7F0470CC C7A604A0 */ lwc1 $f6, 0x4a0($sp) -.L7F0470D0: -/* 079AC0 7F0470D0 3C018005 */ lui $at, %hi(D_80052B00) # $at, 0x8005 -/* 079AC4 7F0470D4 C4348C40 */ lwc1 $f20, %lo(D_80052B00)($at) -/* 079AC8 7F0470D8 10000027 */ b .L7F047178 -/* 079ACC 7F0470DC AFAD04B0 */ sw $t5, 0x4b0($sp) -.L7F0470E0: -/* 079AD0 7F0470E0 C6040090 */ lwc1 $f4, 0x90($s0) -/* 079AD4 7F0470E4 3C018005 */ lui $at, %hi(D_80052B04) # $at, 0x8005 -/* 079AD8 7F0470E8 46043301 */ sub.s $f12, $f6, $f4 -/* 079ADC 7F0470EC 4616603C */ c.lt.s $f12, $f22 -/* 079AE0 7F0470F0 00000000 */ nop -/* 079AE4 7F0470F4 45000003 */ bc1f .L7F047104 -/* 079AE8 7F0470F8 00000000 */ nop -/* 079AEC 7F0470FC C4348C44 */ lwc1 $f20, %lo(D_80052B04)($at) -/* 079AF0 7F047100 46146300 */ add.s $f12, $f12, $f20 -.L7F047104: -/* 079AF4 7F047104 3C018005 */ lui $at, %hi(D_80052B08) # $at, 0x8005 -/* 079AF8 7F047108 C4348C48 */ lwc1 $f20, %lo(D_80052B08)($at) -/* 079AFC 7F04710C 3C018005 */ lui $at, %hi(D_80052B0C) # $at, 0x8005 -/* 079B00 7F047110 C4288C4C */ lwc1 $f8, %lo(D_80052B0C)($at) -/* 079B04 7F047114 3C018005 */ lui $at, %hi(D_80052B10) # $at, 0x8005 -/* 079B08 7F047118 460C403C */ c.lt.s $f8, $f12 -/* 079B0C 7F04711C 00000000 */ nop -/* 079B10 7F047120 45020003 */ bc1fl .L7F047130 -/* 079B14 7F047124 C60A009C */ lwc1 $f10, 0x9c($s0) -/* 079B18 7F047128 46146301 */ sub.s $f12, $f12, $f20 -/* 079B1C 7F04712C C60A009C */ lwc1 $f10, 0x9c($s0) -.L7F047130: -/* 079B20 7F047130 460A0081 */ sub.s $f2, $f0, $f10 -/* 079B24 7F047134 4616103C */ c.lt.s $f2, $f22 -/* 079B28 7F047138 00000000 */ nop -/* 079B2C 7F04713C 45000001 */ bc1f .L7F047144 -/* 079B30 7F047140 00000000 */ nop -.L7F047144: -/* 079B34 7F047144 C4268C50 */ lwc1 $f6, %lo(D_80052B10)($at) -/* 079B38 7F047148 3C018005 */ lui $at, %hi(D_80052B14) # $at, 0x8005 -/* 079B3C 7F04714C 4606603C */ c.lt.s $f12, $f6 -/* 079B40 7F047150 00000000 */ nop -/* 079B44 7F047154 45020009 */ bc1fl .L7F04717C -/* 079B48 7F047158 8FAF04B0 */ lw $t7, 0x4b0($sp) -/* 079B4C 7F04715C C4248C54 */ lwc1 $f4, %lo(D_80052B14)($at) -/* 079B50 7F047160 24180001 */ li $t8, 1 -/* 079B54 7F047164 460C203C */ c.lt.s $f4, $f12 -/* 079B58 7F047168 00000000 */ nop -/* 079B5C 7F04716C 45020003 */ bc1fl .L7F04717C -/* 079B60 7F047170 8FAF04B0 */ lw $t7, 0x4b0($sp) -/* 079B64 7F047174 AFB804B0 */ sw $t8, 0x4b0($sp) -.L7F047178: -/* 079B68 7F047178 8FAF04B0 */ lw $t7, 0x4b0($sp) -.L7F04717C: -/* 079B6C 7F04717C C7A804A0 */ lwc1 $f8, 0x4a0($sp) -/* 079B70 7F047180 02402025 */ move $a0, $s2 -/* 079B74 7F047184 11E00055 */ beqz $t7, .L7F0472DC -/* 079B78 7F047188 00002825 */ move $a1, $zero -/* 079B7C 7F04718C C60A0084 */ lwc1 $f10, 0x84($s0) -/* 079B80 7F047190 3C018005 */ lui $at, %hi(D_80052B18) # $at, 0x8005 -/* 079B84 7F047194 C4268C58 */ lwc1 $f6, %lo(D_80052B18)($at) -/* 079B88 7F047198 460A4001 */ sub.s $f0, $f8, $f10 -/* 079B8C 7F04719C 8E790014 */ lw $t9, 0x14($s3) -/* 079B90 7F0471A0 3C018005 */ lui $at, %hi(D_80052B1C) # $at, 0x8005 -/* 079B94 7F0471A4 4606003C */ c.lt.s $f0, $f6 -/* 079B98 7F0471A8 AFB90494 */ sw $t9, 0x494($sp) -/* 079B9C 7F0471AC 45000003 */ bc1f .L7F0471BC -/* 079BA0 7F0471B0 00000000 */ nop -/* 079BA4 7F0471B4 10000007 */ b .L7F0471D4 -/* 079BA8 7F0471B8 46140000 */ add.s $f0, $f0, $f20 -.L7F0471BC: -/* 079BAC 7F0471BC C4248C5C */ lwc1 $f4, %lo(D_80052B1C)($at) -/* 079BB0 7F0471C0 4600203E */ c.le.s $f4, $f0 -/* 079BB4 7F0471C4 00000000 */ nop -/* 079BB8 7F0471C8 45020003 */ bc1fl .L7F0471D8 -/* 079BBC 7F0471CC E7A00498 */ swc1 $f0, 0x498($sp) -/* 079BC0 7F0471D0 46140001 */ sub.s $f0, $f0, $f20 -.L7F0471D4: -/* 079BC4 7F0471D4 E7A00498 */ swc1 $f0, 0x498($sp) -.L7F0471D8: -/* 079BC8 7F0471D8 0FC22882 */ jal bondviewUpdateGuardTankFlagsRelated -/* 079BCC 7F0471DC E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 079BD0 7F0471E0 C7A00498 */ lwc1 $f0, 0x498($sp) -/* 079BD4 7F0471E4 C6080088 */ lwc1 $f8, 0x88($s0) -/* 079BD8 7F0471E8 C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 079BDC 7F0471EC 4608003E */ c.le.s $f0, $f8 -/* 079BE0 7F0471F0 00000000 */ nop -/* 079BE4 7F0471F4 45020027 */ bc1fl .L7F047294 -/* 079BE8 7F0471F8 8E0200B8 */ lw $v0, 0xb8($s0) -/* 079BEC 7F0471FC C60A008C */ lwc1 $f10, 0x8c($s0) -/* 079BF0 7F047200 2409001B */ li $t1, 27 -/* 079BF4 7F047204 4600503E */ c.le.s $f10, $f0 -/* 079BF8 7F047208 00000000 */ nop -/* 079BFC 7F04720C 45020021 */ bc1fl .L7F047294 -/* 079C00 7F047210 8E0200B8 */ lw $v0, 0xb8($s0) -/* 079C04 7F047214 C6460010 */ lwc1 $f6, 0x10($s2) -/* 079C08 7F047218 8E650008 */ lw $a1, 8($s3) -/* 079C0C 7F04721C 8E660010 */ lw $a2, 0x10($s3) -/* 079C10 7F047220 8E470008 */ lw $a3, 8($s2) -/* 079C14 7F047224 AFA90014 */ sw $t1, 0x14($sp) -/* 079C18 7F047228 E7A60010 */ swc1 $f6, 0x10($sp) -/* 079C1C 7F04722C C660000C */ lwc1 $f0, 0xc($s3) -/* 079C20 7F047230 27A40494 */ addiu $a0, $sp, 0x494 -/* 079C24 7F047234 E7A00018 */ swc1 $f0, 0x18($sp) -/* 079C28 7F047238 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 079C2C 7F04723C C642000C */ lwc1 $f2, 0xc($s2) -/* 079C30 7F047240 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 079C34 7F047244 E7A20020 */ swc1 $f2, 0x20($sp) -/* 079C38 7F047248 0FC2C039 */ jal stanTestLineUnobstructed -/* 079C3C 7F04724C E7A20024 */ swc1 $f2, 0x24($sp) -/* 079C40 7F047250 1040000F */ beqz $v0, .L7F047290 -/* 079C44 7F047254 C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 079C48 7F047258 8FAA0494 */ lw $t2, 0x494($sp) -/* 079C4C 7F04725C 8E480014 */ lw $t0, 0x14($s2) -/* 079C50 7F047260 5548000C */ bnel $t2, $t0, .L7F047294 -/* 079C54 7F047264 8E0200B8 */ lw $v0, 0xb8($s0) -/* 079C58 7F047268 8E2B0008 */ lw $t3, 8($s1) -/* 079C5C 7F04726C 3C012000 */ lui $at, 0x2000 -/* 079C60 7F047270 240E0001 */ li $t6, 1 -/* 079C64 7F047274 01616025 */ or $t4, $t3, $at -/* 079C68 7F047278 AE2C0008 */ sw $t4, 8($s1) -/* 079C6C 7F04727C C7A4049C */ lwc1 $f4, 0x49c($sp) -/* 079C70 7F047280 AFAE04A8 */ sw $t6, 0x4a8($sp) -/* 079C74 7F047284 C7B004A0 */ lwc1 $f16, 0x4a0($sp) -/* 079C78 7F047288 1000000F */ b .L7F0472C8 -/* 079C7C 7F04728C E7A404D8 */ swc1 $f4, 0x4d8($sp) -.L7F047290: -/* 079C80 7F047290 8E0200B8 */ lw $v0, 0xb8($s0) -.L7F047294: -/* 079C84 7F047294 3C0D8004 */ lui $t5, %hi(g_GlobalTimer) # $t5, 0x8004 -/* 079C88 7F047298 0442000B */ bltzl $v0, .L7F0472C8 -/* 079C8C 7F04729C AFA004B0 */ sw $zero, 0x4b0($sp) -/* 079C90 7F0472A0 8DAD0FFC */ lw $t5, %lo(g_GlobalTimer)($t5) -/* 079C94 7F0472A4 25B8FF9C */ addiu $t8, $t5, -0x64 -/* 079C98 7F0472A8 0302082A */ slt $at, $t8, $v0 -/* 079C9C 7F0472AC 50200006 */ beql $at, $zero, .L7F0472C8 -/* 079CA0 7F0472B0 AFA004B0 */ sw $zero, 0x4b0($sp) -/* 079CA4 7F0472B4 C608009C */ lwc1 $f8, 0x9c($s0) -/* 079CA8 7F0472B8 C6100090 */ lwc1 $f16, 0x90($s0) -/* 079CAC 7F0472BC 10000002 */ b .L7F0472C8 -/* 079CB0 7F0472C0 E7A804D8 */ swc1 $f8, 0x4d8($sp) -/* 079CB4 7F0472C4 AFA004B0 */ sw $zero, 0x4b0($sp) -.L7F0472C8: -/* 079CB8 7F0472C8 02402025 */ move $a0, $s2 -/* 079CBC 7F0472CC 24050001 */ li $a1, 1 -/* 079CC0 7F0472D0 0FC22882 */ jal bondviewUpdateGuardTankFlagsRelated -/* 079CC4 7F0472D4 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 079CC8 7F0472D8 C7B004DC */ lwc1 $f16, 0x4dc($sp) -.L7F0472DC: -/* 079CCC 7F0472DC 8FAF04B0 */ lw $t7, 0x4b0($sp) -.L7F0472E0: -/* 079CD0 7F0472E0 3C018005 */ lui $at, %hi(D_80052B20) # $at, 0x8005 -/* 079CD4 7F0472E4 C4348C60 */ lwc1 $f20, %lo(D_80052B20)($at) -/* 079CD8 7F0472E8 51E00007 */ beql $t7, $zero, .L7F047308 -/* 079CDC 7F0472EC 8E1900D0 */ lw $t9, 0xd0($s0) -/* 079CE0 7F0472F0 C7AC04BC */ lwc1 $f12, 0x4bc($sp) -/* 079CE4 7F0472F4 0FC0B49E */ jal chrlvGetAimLimitAngle -/* 079CE8 7F0472F8 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 079CEC 7F0472FC C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 079CF0 7F047300 E7A004A4 */ swc1 $f0, 0x4a4($sp) -/* 079CF4 7F047304 8E1900D0 */ lw $t9, 0xd0($s0) -.L7F047308: -/* 079CF8 7F047308 1320001F */ beqz $t9, .L7F047388 -/* 079CFC 7F04730C 3C098004 */ lui $t1, %hi(g_GlobalTimer) # $t1, 0x8004 -/* 079D00 7F047310 8D290FFC */ lw $t1, %lo(g_GlobalTimer)($t1) -/* 079D04 7F047314 24010064 */ li $at, 100 -/* 079D08 7F047318 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 079D0C 7F04731C 0121001A */ div $zero, $t1, $at -/* 079D10 7F047320 00005010 */ mfhi $t2 -/* 079D14 7F047324 448A5000 */ mtc1 $t2, $f10 -/* 079D18 7F047328 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 079D1C 7F04732C 44814000 */ mtc1 $at, $f8 -/* 079D20 7F047330 468051A0 */ cvt.s.w $f6, $f10 -/* 079D24 7F047334 46143102 */ mul.s $f4, $f6, $f20 -/* 079D28 7F047338 0FC1606B */ jal sinf -/* 079D2C 7F04733C 46082303 */ div.s $f12, $f4, $f8 -/* 079D30 7F047340 3C018005 */ lui $at, %hi(D_80052B24) # $at, 0x8005 -/* 079D34 7F047344 C4268C64 */ lwc1 $f6, %lo(D_80052B24)($at) -/* 079D38 7F047348 C7AA04A4 */ lwc1 $f10, 0x4a4($sp) -/* 079D3C 7F04734C C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 079D40 7F047350 46065102 */ mul.s $f4, $f10, $f6 -/* 079D44 7F047354 00000000 */ nop -/* 079D48 7F047358 46002202 */ mul.s $f8, $f4, $f0 -/* 079D4C 7F04735C 46088400 */ add.s $f16, $f16, $f8 -/* 079D50 7F047360 4616803C */ c.lt.s $f16, $f22 -/* 079D54 7F047364 00000000 */ nop -/* 079D58 7F047368 45000002 */ bc1f .L7F047374 -/* 079D5C 7F04736C 00000000 */ nop -/* 079D60 7F047370 46148400 */ add.s $f16, $f16, $f20 -.L7F047374: -/* 079D64 7F047374 4610A03E */ c.le.s $f20, $f16 -/* 079D68 7F047378 00000000 */ nop -/* 079D6C 7F04737C 45020003 */ bc1fl .L7F04738C -/* 079D70 7F047380 C6020084 */ lwc1 $f2, 0x84($s0) -/* 079D74 7F047384 46148401 */ sub.s $f16, $f16, $f20 -.L7F047388: -/* 079D78 7F047388 C6020084 */ lwc1 $f2, 0x84($s0) -.L7F04738C: -/* 079D7C 7F04738C 3C018005 */ lui $at, %hi(D_80052B28) # $at, 0x8005 -/* 079D80 7F047390 C42A8C68 */ lwc1 $f10, %lo(D_80052B28)($at) -/* 079D84 7F047394 46028001 */ sub.s $f0, $f16, $f2 -/* 079D88 7F047398 26040090 */ addiu $a0, $s0, 0x90 -/* 079D8C 7F04739C 460A003C */ c.lt.s $f0, $f10 -/* 079D90 7F0473A0 00000000 */ nop -/* 079D94 7F0473A4 45000003 */ bc1f .L7F0473B4 -/* 079D98 7F0473A8 00000000 */ nop -/* 079D9C 7F0473AC 10000008 */ b .L7F0473D0 -/* 079DA0 7F0473B0 46140000 */ add.s $f0, $f0, $f20 -.L7F0473B4: -/* 079DA4 7F0473B4 3C018005 */ lui $at, %hi(D_80052B2C) # $at, 0x8005 -/* 079DA8 7F0473B8 C4268C6C */ lwc1 $f6, %lo(D_80052B2C)($at) -/* 079DAC 7F0473BC 4600303E */ c.le.s $f6, $f0 -/* 079DB0 7F0473C0 00000000 */ nop -/* 079DB4 7F0473C4 45020003 */ bc1fl .L7F0473D4 -/* 079DB8 7F0473C8 C60C0088 */ lwc1 $f12, 0x88($s0) -/* 079DBC 7F0473CC 46140001 */ sub.s $f0, $f0, $f20 -.L7F0473D0: -/* 079DC0 7F0473D0 C60C0088 */ lwc1 $f12, 0x88($s0) -.L7F0473D4: -/* 079DC4 7F0473D4 3C018005 */ lui $at, %hi(D_80052B30) # $at, 0x8005 -/* 079DC8 7F0473D8 4600603C */ c.lt.s $f12, $f0 -/* 079DCC 7F0473DC 00000000 */ nop -/* 079DD0 7F0473E0 45020004 */ bc1fl .L7F0473F4 -/* 079DD4 7F0473E4 C60C008C */ lwc1 $f12, 0x8c($s0) -/* 079DD8 7F0473E8 10000007 */ b .L7F047408 -/* 079DDC 7F0473EC 460C1400 */ add.s $f16, $f2, $f12 -/* 079DE0 7F0473F0 C60C008C */ lwc1 $f12, 0x8c($s0) -.L7F0473F4: -/* 079DE4 7F0473F4 460C003C */ c.lt.s $f0, $f12 -/* 079DE8 7F0473F8 00000000 */ nop -/* 079DEC 7F0473FC 45020003 */ bc1fl .L7F04740C -/* 079DF0 7F047400 4616803C */ c.lt.s $f16, $f22 -/* 079DF4 7F047404 460C1400 */ add.s $f16, $f2, $f12 -.L7F047408: -/* 079DF8 7F047408 4616803C */ c.lt.s $f16, $f22 -.L7F04740C: -/* 079DFC 7F04740C 00000000 */ nop -/* 079E00 7F047410 45020003 */ bc1fl .L7F047420 -/* 079E04 7F047414 4610A03E */ c.le.s $f20, $f16 -/* 079E08 7F047418 46148400 */ add.s $f16, $f16, $f20 -/* 079E0C 7F04741C 4610A03E */ c.le.s $f20, $f16 -.L7F047420: -/* 079E10 7F047420 00000000 */ nop -/* 079E14 7F047424 45000002 */ bc1f .L7F047430 -/* 079E18 7F047428 00000000 */ nop -/* 079E1C 7F04742C 46148401 */ sub.s $f16, $f16, $f20 -.L7F047430: -/* 079E20 7F047430 C4208C70 */ lwc1 $f0, %lo(D_80052B30)($at) -/* 079E24 7F047434 44058000 */ mfc1 $a1, $f16 -/* 079E28 7F047438 26060094 */ addiu $a2, $s0, 0x94 -/* 079E2C 7F04743C E7A00010 */ swc1 $f0, 0x10($sp) -/* 079E30 7F047440 C60400A4 */ lwc1 $f4, 0xa4($s0) -/* 079E34 7F047444 44070000 */ mfc1 $a3, $f0 -/* 079E38 7F047448 E7B004DC */ swc1 $f16, 0x4dc($sp) -/* 079E3C 7F04744C 0FC10C73 */ jal chrobjCallsApplySpeed -/* 079E40 7F047450 E7A40014 */ swc1 $f4, 0x14($sp) -/* 079E44 7F047454 3C018005 */ lui $at, %hi(D_80052B34) # $at, 0x8005 -/* 079E48 7F047458 C4208C74 */ lwc1 $f0, %lo(D_80052B34)($at) -/* 079E4C 7F04745C 2604009C */ addiu $a0, $s0, 0x9c -/* 079E50 7F047460 8FA504D8 */ lw $a1, 0x4d8($sp) -/* 079E54 7F047464 E7A00010 */ swc1 $f0, 0x10($sp) -/* 079E58 7F047468 C60800A4 */ lwc1 $f8, 0xa4($s0) -/* 079E5C 7F04746C 44070000 */ mfc1 $a3, $f0 -/* 079E60 7F047470 260600A0 */ addiu $a2, $s0, 0xa0 -/* 079E64 7F047474 0FC10C73 */ jal chrobjCallsApplySpeed -/* 079E68 7F047478 E7A80014 */ swc1 $f8, 0x14($sp) -/* 079E6C 7F04747C C7B004DC */ lwc1 $f16, 0x4dc($sp) -/* 079E70 7F047480 C60A0090 */ lwc1 $f10, 0x90($s0) -/* 079E74 7F047484 3C018005 */ lui $at, %hi(D_80052B38) # $at, 0x8005 -/* 079E78 7F047488 C7A604D8 */ lwc1 $f6, 0x4d8($sp) -/* 079E7C 7F04748C 460A8301 */ sub.s $f12, $f16, $f10 -/* 079E80 7F047490 4616603C */ c.lt.s $f12, $f22 -/* 079E84 7F047494 00000000 */ nop -/* 079E88 7F047498 45000002 */ bc1f .L7F0474A4 -/* 079E8C 7F04749C 00000000 */ nop -/* 079E90 7F0474A0 46146300 */ add.s $f12, $f12, $f20 -.L7F0474A4: -/* 079E94 7F0474A4 C4208C78 */ lwc1 $f0, %lo(D_80052B38)($at) -/* 079E98 7F0474A8 460C003C */ c.lt.s $f0, $f12 -/* 079E9C 7F0474AC 00000000 */ nop -/* 079EA0 7F0474B0 45020003 */ bc1fl .L7F0474C0 -/* 079EA4 7F0474B4 C604009C */ lwc1 $f4, 0x9c($s0) -/* 079EA8 7F0474B8 46146301 */ sub.s $f12, $f12, $f20 -/* 079EAC 7F0474BC C604009C */ lwc1 $f4, 0x9c($s0) -.L7F0474C0: -/* 079EB0 7F0474C0 46043081 */ sub.s $f2, $f6, $f4 -/* 079EB4 7F0474C4 4616103C */ c.lt.s $f2, $f22 -/* 079EB8 7F0474C8 00000000 */ nop -/* 079EBC 7F0474CC 45020003 */ bc1fl .L7F0474DC -/* 079EC0 7F0474D0 4602003C */ c.lt.s $f0, $f2 -/* 079EC4 7F0474D4 46141080 */ add.s $f2, $f2, $f20 -/* 079EC8 7F0474D8 4602003C */ c.lt.s $f0, $f2 -.L7F0474DC: -/* 079ECC 7F0474DC 00000000 */ nop -/* 079ED0 7F0474E0 45020003 */ bc1fl .L7F0474F0 -/* 079ED4 7F0474E4 AE0000D0 */ sw $zero, 0xd0($s0) -/* 079ED8 7F0474E8 46141081 */ sub.s $f2, $f2, $f20 -/* 079EDC 7F0474EC AE0000D0 */ sw $zero, 0xd0($s0) -.L7F0474F0: -/* 079EE0 7F0474F0 8FA804B0 */ lw $t0, 0x4b0($sp) -/* 079EE4 7F0474F4 C7A804A4 */ lwc1 $f8, 0x4a4($sp) -/* 079EE8 7F0474F8 51000047 */ beql $t0, $zero, .L7F047618 -/* 079EEC 7F0474FC 8FAD04AC */ lw $t5, 0x4ac($sp) -/* 079EF0 7F047500 4608603C */ c.lt.s $f12, $f8 -/* 079EF4 7F047504 C7AA04A4 */ lwc1 $f10, 0x4a4($sp) -/* 079EF8 7F047508 4502001B */ bc1fl .L7F047578 -/* 079EFC 7F04750C 460A5000 */ add.s $f0, $f10, $f10 -/* 079F00 7F047510 46004007 */ neg.s $f0, $f8 -/* 079F04 7F047514 460C003C */ c.lt.s $f0, $f12 -/* 079F08 7F047518 00000000 */ nop -/* 079F0C 7F04751C 45020016 */ bc1fl .L7F047578 -/* 079F10 7F047520 460A5000 */ add.s $f0, $f10, $f10 -/* 079F14 7F047524 4608103C */ c.lt.s $f2, $f8 -/* 079F18 7F047528 00000000 */ nop -/* 079F1C 7F04752C 45020012 */ bc1fl .L7F047578 -/* 079F20 7F047530 460A5000 */ add.s $f0, $f10, $f10 -/* 079F24 7F047534 4602003C */ c.lt.s $f0, $f2 -/* 079F28 7F047538 240B0001 */ li $t3, 1 -/* 079F2C 7F04753C 4502000E */ bc1fl .L7F047578 -/* 079F30 7F047540 460A5000 */ add.s $f0, $f10, $f10 -/* 079F34 7F047544 AE0B00D0 */ sw $t3, 0xd0($s0) -/* 079F38 7F047548 8FAE04A8 */ lw $t6, 0x4a8($sp) -/* 079F3C 7F04754C 240C0001 */ li $t4, 1 -/* 079F40 7F047550 AFAC04AC */ sw $t4, 0x4ac($sp) -/* 079F44 7F047554 11C0002F */ beqz $t6, .L7F047614 -/* 079F48 7F047558 3C0D8004 */ lui $t5, %hi(g_GlobalTimer) # $t5, 0x8004 -/* 079F4C 7F04755C 8DAD0FFC */ lw $t5, %lo(g_GlobalTimer)($t5) -/* 079F50 7F047560 3C188004 */ lui $t8, %hi(g_GlobalTimer) # $t8, 0x8004 -/* 079F54 7F047564 AE0D00B8 */ sw $t5, 0xb8($s0) -/* 079F58 7F047568 8F180FFC */ lw $t8, %lo(g_GlobalTimer)($t8) -/* 079F5C 7F04756C 10000029 */ b .L7F047614 -/* 079F60 7F047570 AE1800BC */ sw $t8, 0xbc($s0) -/* 079F64 7F047574 460A5000 */ add.s $f0, $f10, $f10 -.L7F047578: -/* 079F68 7F047578 4600603C */ c.lt.s $f12, $f0 -/* 079F6C 7F04757C 00000000 */ nop -/* 079F70 7F047580 45020018 */ bc1fl .L7F0475E4 -/* 079F74 7F047584 8E0200B8 */ lw $v0, 0xb8($s0) -/* 079F78 7F047588 46000387 */ neg.s $f14, $f0 -/* 079F7C 7F04758C 460C703C */ c.lt.s $f14, $f12 -/* 079F80 7F047590 00000000 */ nop -/* 079F84 7F047594 45020013 */ bc1fl .L7F0475E4 -/* 079F88 7F047598 8E0200B8 */ lw $v0, 0xb8($s0) -/* 079F8C 7F04759C 4600103C */ c.lt.s $f2, $f0 -/* 079F90 7F0475A0 00000000 */ nop -/* 079F94 7F0475A4 4502000F */ bc1fl .L7F0475E4 -/* 079F98 7F0475A8 8E0200B8 */ lw $v0, 0xb8($s0) -/* 079F9C 7F0475AC 4602703C */ c.lt.s $f14, $f2 -/* 079FA0 7F0475B0 240F0001 */ li $t7, 1 -/* 079FA4 7F0475B4 4502000B */ bc1fl .L7F0475E4 -/* 079FA8 7F0475B8 8E0200B8 */ lw $v0, 0xb8($s0) -/* 079FAC 7F0475BC AE0F00D0 */ sw $t7, 0xd0($s0) -/* 079FB0 7F0475C0 8FA904A8 */ lw $t1, 0x4a8($sp) -/* 079FB4 7F0475C4 24190001 */ li $t9, 1 -/* 079FB8 7F0475C8 AFB904AC */ sw $t9, 0x4ac($sp) -/* 079FBC 7F0475CC 11200011 */ beqz $t1, .L7F047614 -/* 079FC0 7F0475D0 3C0A8004 */ lui $t2, %hi(g_GlobalTimer) # $t2, 0x8004 -/* 079FC4 7F0475D4 8D4A0FFC */ lw $t2, %lo(g_GlobalTimer)($t2) -/* 079FC8 7F0475D8 1000000E */ b .L7F047614 -/* 079FCC 7F0475DC AE0A00B8 */ sw $t2, 0xb8($s0) -/* 079FD0 7F0475E0 8E0200B8 */ lw $v0, 0xb8($s0) -.L7F0475E4: -/* 079FD4 7F0475E4 3C088004 */ lui $t0, %hi(g_GlobalTimer) # $t0, 0x8004 -/* 079FD8 7F0475E8 0442000B */ bltzl $v0, .L7F047618 -/* 079FDC 7F0475EC 8FAD04AC */ lw $t5, 0x4ac($sp) -/* 079FE0 7F0475F0 8D080FFC */ lw $t0, %lo(g_GlobalTimer)($t0) -/* 079FE4 7F0475F4 240C0001 */ li $t4, 1 -/* 079FE8 7F0475F8 240E0001 */ li $t6, 1 -/* 079FEC 7F0475FC 250BFF9C */ addiu $t3, $t0, -0x64 -/* 079FF0 7F047600 0162082A */ slt $at, $t3, $v0 -/* 079FF4 7F047604 50200004 */ beql $at, $zero, .L7F047618 -/* 079FF8 7F047608 8FAD04AC */ lw $t5, 0x4ac($sp) -/* 079FFC 7F04760C AE0C00D0 */ sw $t4, 0xd0($s0) -/* 07A000 7F047610 AFAE04AC */ sw $t6, 0x4ac($sp) -.L7F047614: -/* 07A004 7F047614 8FAD04AC */ lw $t5, 0x4ac($sp) -.L7F047618: -/* 07A008 7F047618 3C018005 */ lui $at, %hi(D_80052B3C) # $at, 0x8005 -/* 07A00C 7F04761C 51A00013 */ beql $t5, $zero, .L7F04766C -/* 07A010 7F047620 C60200B0 */ lwc1 $f2, 0xb0($s0) -/* 07A014 7F047624 C4208C7C */ lwc1 $f0, %lo(D_80052B3C)($at) -/* 07A018 7F047628 3C018005 */ lui $at, %hi(D_80052B40) # $at, 0x8005 -/* 07A01C 7F04762C C4268C80 */ lwc1 $f6, %lo(D_80052B40)($at) -/* 07A020 7F047630 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07A024 7F047634 C4241004 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07A028 7F047638 C60A00B0 */ lwc1 $f10, 0xb0($s0) -/* 07A02C 7F04763C 46043202 */ mul.s $f8, $f6, $f4 -/* 07A030 7F047640 46085180 */ add.s $f6, $f10, $f8 -/* 07A034 7F047644 E60600B0 */ swc1 $f6, 0xb0($s0) -/* 07A038 7F047648 C60200B0 */ lwc1 $f2, 0xb0($s0) -/* 07A03C 7F04764C 4602003C */ c.lt.s $f0, $f2 -/* 07A040 7F047650 00000000 */ nop -/* 07A044 7F047654 45020023 */ bc1fl .L7F0476E4 -/* 07A048 7F047658 4602B03C */ c.lt.s $f22, $f2 -/* 07A04C 7F04765C E60000B0 */ swc1 $f0, 0xb0($s0) -/* 07A050 7F047660 1000001F */ b .L7F0476E0 -/* 07A054 7F047664 C60200B0 */ lwc1 $f2, 0xb0($s0) -/* 07A058 7F047668 C60200B0 */ lwc1 $f2, 0xb0($s0) -.L7F04766C: -/* 07A05C 7F04766C 3C188004 */ lui $t8, %hi(g_ClockTimer) # $t8, 0x8004 -/* 07A060 7F047670 4602B03C */ c.lt.s $f22, $f2 -/* 07A064 7F047674 00000000 */ nop -/* 07A068 7F047678 4502001A */ bc1fl .L7F0476E4 -/* 07A06C 7F04767C 4602B03C */ c.lt.s $f22, $f2 -/* 07A070 7F047680 8F180FF4 */ lw $t8, %lo(g_ClockTimer)($t8) -/* 07A074 7F047684 00001025 */ move $v0, $zero -/* 07A078 7F047688 3C018005 */ lui $at, %hi(D_80052B44) # $at, 0x8005 -/* 07A07C 7F04768C 1B00000C */ blez $t8, .L7F0476C0 -/* 07A080 7F047690 00000000 */ nop -/* 07A084 7F047694 C4208C84 */ lwc1 $f0, %lo(D_80052B44)($at) -/* 07A088 7F047698 C60400B0 */ lwc1 $f4, 0xb0($s0) -.L7F04769C: -/* 07A08C 7F04769C 3C0F8004 */ lui $t7, %hi(g_ClockTimer) # $t7, 0x8004 -/* 07A090 7F0476A0 24420001 */ addiu $v0, $v0, 1 -/* 07A094 7F0476A4 46002282 */ mul.s $f10, $f4, $f0 -/* 07A098 7F0476A8 E60A00B0 */ swc1 $f10, 0xb0($s0) -/* 07A09C 7F0476AC 8DEF0FF4 */ lw $t7, %lo(g_ClockTimer)($t7) -/* 07A0A0 7F0476B0 004F082A */ slt $at, $v0, $t7 -/* 07A0A4 7F0476B4 5420FFF9 */ bnezl $at, .L7F04769C -/* 07A0A8 7F0476B8 C60400B0 */ lwc1 $f4, 0xb0($s0) -/* 07A0AC 7F0476BC C60200B0 */ lwc1 $f2, 0xb0($s0) -.L7F0476C0: -/* 07A0B0 7F0476C0 3C018005 */ lui $at, %hi(D_80052B48) # $at, 0x8005 -/* 07A0B4 7F0476C4 C4288C88 */ lwc1 $f8, %lo(D_80052B48)($at) -/* 07A0B8 7F0476C8 4608103E */ c.le.s $f2, $f8 -/* 07A0BC 7F0476CC 00000000 */ nop -/* 07A0C0 7F0476D0 45020004 */ bc1fl .L7F0476E4 -/* 07A0C4 7F0476D4 4602B03C */ c.lt.s $f22, $f2 -/* 07A0C8 7F0476D8 E61600B0 */ swc1 $f22, 0xb0($s0) -/* 07A0CC 7F0476DC C60200B0 */ lwc1 $f2, 0xb0($s0) -.L7F0476E0: -/* 07A0D0 7F0476E0 4602B03C */ c.lt.s $f22, $f2 -.L7F0476E4: -/* 07A0D4 7F0476E4 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07A0D8 7F0476E8 45020349 */ bc1fl .L7F048410 -/* 07A0DC 7F0476EC 92220003 */ lbu $v0, 3($s1) -/* 07A0E0 7F0476F0 C4241004 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07A0E4 7F0476F4 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07A0E8 7F0476F8 46041282 */ mul.s $f10, $f2, $f4 -/* 07A0EC 7F0476FC 460A3200 */ add.s $f8, $f6, $f10 -/* 07A0F0 7F047700 E60800B4 */ swc1 $f8, 0xb4($s0) -/* 07A0F4 7F047704 C60000B4 */ lwc1 $f0, 0xb4($s0) -/* 07A0F8 7F047708 4600A03E */ c.le.s $f20, $f0 -/* 07A0FC 7F04770C 00000000 */ nop -/* 07A100 7F047710 4502033F */ bc1fl .L7F048410 -/* 07A104 7F047714 92220003 */ lbu $v0, 3($s1) -/* 07A108 7F047718 46140101 */ sub.s $f4, $f0, $f20 -.L7F04771C: -/* 07A10C 7F04771C E60400B4 */ swc1 $f4, 0xb4($s0) -/* 07A110 7F047720 C60000B4 */ lwc1 $f0, 0xb4($s0) -/* 07A114 7F047724 4600A03E */ c.le.s $f20, $f0 -/* 07A118 7F047728 00000000 */ nop -/* 07A11C 7F04772C 4503FFFB */ bc1tl .L7F04771C -/* 07A120 7F047730 46140101 */ sub.s $f4, $f0, $f20 -/* 07A124 7F047734 10000336 */ b .L7F048410 -/* 07A128 7F047738 92220003 */ lbu $v0, 3($s1) -/* 07A12C 7F04773C 24010027 */ li $at, 39 -.L7F047740: -/* 07A130 7F047740 14410253 */ bne $v0, $at, .L7F048090 -/* 07A134 7F047744 02202025 */ move $a0, $s1 -/* 07A138 7F047748 C62600A0 */ lwc1 $f6, 0xa0($s1) -/* 07A13C 7F04774C AFA0047C */ sw $zero, 0x47c($sp) -/* 07A140 7F047750 24050001 */ li $a1, 1 -/* 07A144 7F047754 0FC0D531 */ jal ai -/* 07A148 7F047758 E7A60480 */ swc1 $f6, 0x480($sp) -/* 07A14C 7F04775C C62E0098 */ lwc1 $f14, 0x98($s1) -/* 07A150 7F047760 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07A154 7F047764 460EB03E */ c.le.s $f22, $f14 -/* 07A158 7F047768 00000000 */ nop -/* 07A15C 7F04776C 45020016 */ bc1fl .L7F0477C8 -/* 07A160 7F047770 8E39000C */ lw $t9, 0xc($s1) -/* 07A164 7F047774 C4221004 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07A168 7F047778 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07A16C 7F04777C 4602703E */ c.le.s $f14, $f2 -/* 07A170 7F047780 00000000 */ nop -/* 07A174 7F047784 45020006 */ bc1fl .L7F0477A0 -/* 07A178 7F047788 C6200088 */ lwc1 $f0, 0x88($s1) -/* 07A17C 7F04778C C62A0094 */ lwc1 $f10, 0x94($s1) -/* 07A180 7F047790 C62E0098 */ lwc1 $f14, 0x98($s1) -/* 07A184 7F047794 10000008 */ b .L7F0477B8 -/* 07A188 7F047798 E62A0088 */ swc1 $f10, 0x88($s1) -/* 07A18C 7F04779C C6200088 */ lwc1 $f0, 0x88($s1) -.L7F0477A0: -/* 07A190 7F0477A0 C6280094 */ lwc1 $f8, 0x94($s1) -/* 07A194 7F0477A4 46004101 */ sub.s $f4, $f8, $f0 -/* 07A198 7F0477A8 46022182 */ mul.s $f6, $f4, $f2 -/* 07A19C 7F0477AC 460E3283 */ div.s $f10, $f6, $f14 -/* 07A1A0 7F0477B0 460A0200 */ add.s $f8, $f0, $f10 -/* 07A1A4 7F0477B4 E6280088 */ swc1 $f8, 0x88($s1) -.L7F0477B8: -/* 07A1A8 7F0477B8 C4241004 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07A1AC 7F0477BC 46047181 */ sub.s $f6, $f14, $f4 -/* 07A1B0 7F0477C0 E6260098 */ swc1 $f6, 0x98($s1) -/* 07A1B4 7F0477C4 8E39000C */ lw $t9, 0xc($s1) -.L7F0477C8: -/* 07A1B8 7F0477C8 00008025 */ move $s0, $zero -/* 07A1BC 7F0477CC 00194B00 */ sll $t1, $t9, 0xc -/* 07A1C0 7F0477D0 05200014 */ bltz $t1, .L7F047824 -/* 07A1C4 7F0477D4 00000000 */ nop -/* 07A1C8 7F0477D8 0FC13C47 */ jal objIsHealthy -/* 07A1CC 7F0477DC 02202025 */ move $a0, $s1 -/* 07A1D0 7F0477E0 10400010 */ beqz $v0, .L7F047824 -/* 07A1D4 7F0477E4 00000000 */ nop -/* 07A1D8 7F0477E8 C62A0088 */ lwc1 $f10, 0x88($s1) -/* 07A1DC 7F0477EC 26240058 */ addiu $a0, $s1, 0x58 -/* 07A1E0 7F0477F0 3C0544FA */ lui $a1, 0x44fa -/* 07A1E4 7F0477F4 460AB03C */ c.lt.s $f22, $f10 -/* 07A1E8 7F0477F8 3C06453B */ lui $a2, (0x453B8000 >> 16) # lui $a2, 0x453b -/* 07A1EC 7F0477FC 45010006 */ bc1t .L7F047818 -/* 07A1F0 7F047800 00000000 */ nop -/* 07A1F4 7F047804 C6280094 */ lwc1 $f8, 0x94($s1) -/* 07A1F8 7F047808 4608B03C */ c.lt.s $f22, $f8 -/* 07A1FC 7F04780C 00000000 */ nop -/* 07A200 7F047810 45000004 */ bc1f .L7F047824 -/* 07A204 7F047814 00000000 */ nop -.L7F047818: -/* 07A208 7F047818 0FC14EDD */ jal sub_GAME_7F053894 -/* 07A20C 7F04781C 34C68000 */ ori $a2, (0x453B8000 & 0xFFFF) # ori $a2, $a2, 0x8000 -/* 07A210 7F047820 00408025 */ move $s0, $v0 -.L7F047824: -/* 07A214 7F047824 5A000019 */ blezl $s0, .L7F04788C -/* 07A218 7F047828 8E2400AC */ lw $a0, 0xac($s1) -/* 07A21C 7F04782C 8E2400AC */ lw $a0, 0xac($s1) -/* 07A220 7F047830 10800005 */ beqz $a0, .L7F047848 -/* 07A224 7F047834 00000000 */ nop -/* 07A228 7F047838 0C002094 */ jal sndGetPlayingState -/* 07A22C 7F04783C 00000000 */ nop -/* 07A230 7F047840 5440000A */ bnezl $v0, .L7F04786C -/* 07A234 7F047844 8E2400AC */ lw $a0, 0xac($s1) -.L7F047848: -/* 07A238 7F047848 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 07A23C 7F04784C 00000000 */ nop -/* 07A240 7F047850 14400005 */ bnez $v0, .L7F047868 -/* 07A244 7F047854 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 07A248 7F047858 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07A24C 7F04785C 24050041 */ li $a1, 65 -/* 07A250 7F047860 0C00209A */ jal sndPlaySfx -/* 07A254 7F047864 262600AC */ addiu $a2, $s1, 0xac -.L7F047868: -/* 07A258 7F047868 8E2400AC */ lw $a0, 0xac($s1) -.L7F04786C: -/* 07A25C 7F04786C 24050008 */ li $a1, 8 -/* 07A260 7F047870 5080000F */ beql $a0, $zero, .L7F0478B0 -/* 07A264 7F047874 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07A268 7F047878 0C002179 */ jal sndCreatePostEvent -/* 07A26C 7F04787C 02003025 */ move $a2, $s0 -/* 07A270 7F047880 1000000B */ b .L7F0478B0 -/* 07A274 7F047884 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07A278 7F047888 8E2400AC */ lw $a0, 0xac($s1) -.L7F04788C: -/* 07A27C 7F04788C 50800008 */ beql $a0, $zero, .L7F0478B0 -/* 07A280 7F047890 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07A284 7F047894 0C002094 */ jal sndGetPlayingState -/* 07A288 7F047898 00000000 */ nop -/* 07A28C 7F04789C 50400004 */ beql $v0, $zero, .L7F0478B0 -/* 07A290 7F0478A0 8E2400A4 */ lw $a0, 0xa4($s1) -/* 07A294 7F0478A4 0C002120 */ jal sndDeactivate -/* 07A298 7F0478A8 8E2400AC */ lw $a0, 0xac($s1) -/* 07A29C 7F0478AC 8E2400A4 */ lw $a0, 0xa4($s1) -.L7F0478B0: -/* 07A2A0 7F0478B0 3C058006 */ lui $a1, %hi(g_CurrentSetup+0) # $a1, 0x8006 -/* 07A2A4 7F0478B4 5080002A */ beql $a0, $zero, .L7F047960 -/* 07A2A8 7F0478B8 8E2C0008 */ lw $t4, 8($s1) -/* 07A2AC 7F0478BC 8E2800A8 */ lw $t0, 0xa8($s1) -/* 07A2B0 7F0478C0 8C8A0000 */ lw $t2, ($a0) -/* 07A2B4 7F0478C4 24A54C40 */ addiu $a1, %lo(g_CurrentSetup+0) # addiu $a1, $a1, 0x4c40 -/* 07A2B8 7F0478C8 00085880 */ sll $t3, $t0, 2 -/* 07A2BC 7F0478CC 014B1021 */ addu $v0, $t2, $t3 -/* 07A2C0 7F0478D0 8C4C0000 */ lw $t4, ($v0) -/* 07A2C4 7F0478D4 8CAD0000 */ lw $t5, ($a1) -/* 07A2C8 7F0478D8 8CB90018 */ lw $t9, 0x18($a1) -/* 07A2CC 7F0478DC 000C7100 */ sll $t6, $t4, 4 -/* 07A2D0 7F0478E0 01CD1821 */ addu $v1, $t6, $t5 -/* 07A2D4 7F0478E4 8C780000 */ lw $t8, ($v1) -/* 07A2D8 7F0478E8 C6260058 */ lwc1 $f6, 0x58($s1) -/* 07A2DC 7F0478EC C6280060 */ lwc1 $f8, 0x60($s1) -/* 07A2E0 7F0478F0 00187880 */ sll $t7, $t8, 2 -/* 07A2E4 7F0478F4 01F87823 */ subu $t7, $t7, $t8 -/* 07A2E8 7F0478F8 000F7880 */ sll $t7, $t7, 2 -/* 07A2EC 7F0478FC 01F87823 */ subu $t7, $t7, $t8 -/* 07A2F0 7F047900 000F7880 */ sll $t7, $t7, 2 -/* 07A2F4 7F047904 01F93021 */ addu $a2, $t7, $t9 -/* 07A2F8 7F047908 C4C40000 */ lwc1 $f4, ($a2) -/* 07A2FC 7F04790C C4CA0008 */ lwc1 $f10, 8($a2) -/* 07A300 7F047910 AFA6047C */ sw $a2, 0x47c($sp) -/* 07A304 7F047914 46062301 */ sub.s $f12, $f4, $f6 -/* 07A308 7F047918 0FC16BB8 */ jal atan2f -/* 07A30C 7F04791C 46085381 */ sub.s $f14, $f10, $f8 -/* 07A310 7F047920 E7A00480 */ swc1 $f0, 0x480($sp) -/* 07A314 7F047924 8E290008 */ lw $t1, 8($s1) -/* 07A318 7F047928 3C01DFFF */ lui $at, (0xDFFFFFFF >> 16) # lui $at, 0xdfff -/* 07A31C 7F04792C C7A40480 */ lwc1 $f4, 0x480($sp) -/* 07A320 7F047930 00094080 */ sll $t0, $t1, 2 -/* 07A324 7F047934 05010018 */ bgez $t0, .L7F047998 -/* 07A328 7F047938 3421FFFF */ ori $at, (0xDFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 07A32C 7F04793C 8E2A0008 */ lw $t2, 8($s1) -/* 07A330 7F047940 E62400A0 */ swc1 $f4, 0xa0($s1) -/* 07A334 7F047944 02202025 */ move $a0, $s1 -/* 07A338 7F047948 01415824 */ and $t3, $t2, $at -/* 07A33C 7F04794C 0FC11333 */ jal sub_GAME_7F044B38 -/* 07A340 7F047950 AE2B0008 */ sw $t3, 8($s1) -/* 07A344 7F047954 10000011 */ b .L7F04799C -/* 07A348 7F047958 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07A34C 7F04795C 8E2C0008 */ lw $t4, 8($s1) -.L7F047960: -/* 07A350 7F047960 000C7080 */ sll $t6, $t4, 2 -/* 07A354 7F047964 05C3000D */ bgezl $t6, .L7F04799C -/* 07A358 7F047968 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07A35C 7F04796C C62C0038 */ lwc1 $f12, 0x38($s1) -/* 07A360 7F047970 0FC16BB8 */ jal atan2f -/* 07A364 7F047974 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 07A368 7F047978 8E2D0008 */ lw $t5, 8($s1) -/* 07A36C 7F04797C 3C01DFFF */ lui $at, (0xDFFFFFFF >> 16) # lui $at, 0xdfff -/* 07A370 7F047980 3421FFFF */ ori $at, (0xDFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 07A374 7F047984 01A1C024 */ and $t8, $t5, $at -/* 07A378 7F047988 E62000A0 */ swc1 $f0, 0xa0($s1) -/* 07A37C 7F04798C AE380008 */ sw $t8, 8($s1) -/* 07A380 7F047990 0FC11333 */ jal sub_GAME_7F044B38 -/* 07A384 7F047994 02202025 */ move $a0, $s1 -.L7F047998: -/* 07A388 7F047998 C6260088 */ lwc1 $f6, 0x88($s1) -.L7F04799C: -/* 07A38C 7F04799C 4606B03C */ c.lt.s $f22, $f6 -/* 07A390 7F0479A0 00000000 */ nop -/* 07A394 7F0479A4 450201AA */ bc1fl .L7F048050 -/* 07A398 7F0479A8 8E280008 */ lw $t0, 8($s1) -/* 07A39C 7F0479AC 8E6F0014 */ lw $t7, 0x14($s3) -/* 07A3A0 7F0479B0 8FB9047C */ lw $t9, 0x47c($sp) -/* 07A3A4 7F0479B4 4600B386 */ mov.s $f14, $f22 -/* 07A3A8 7F0479B8 AFAF046C */ sw $t7, 0x46c($sp) -/* 07A3AC 7F0479BC C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07A3B0 7F0479C0 E7AC043C */ swc1 $f12, 0x43c($sp) -/* 07A3B4 7F0479C4 C62A009C */ lwc1 $f10, 0x9c($s1) -/* 07A3B8 7F0479C8 13200012 */ beqz $t9, .L7F047A14 -/* 07A3BC 7F0479CC E7AA0438 */ swc1 $f10, 0x438($sp) -/* 07A3C0 7F0479D0 26300058 */ addiu $s0, $s1, 0x58 -/* 07A3C4 7F0479D4 0FC1606B */ jal sinf -/* 07A3C8 7F0479D8 E7AE0434 */ swc1 $f14, 0x434($sp) -/* 07A3CC 7F0479DC E7A00440 */ swc1 $f0, 0x440($sp) -/* 07A3D0 7F0479E0 E7B60444 */ swc1 $f22, 0x444($sp) -/* 07A3D4 7F0479E4 0FC16068 */ jal cosf -/* 07A3D8 7F0479E8 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07A3DC 7F0479EC E7A00448 */ swc1 $f0, 0x448($sp) -/* 07A3E0 7F0479F0 02002025 */ move $a0, $s0 -/* 07A3E4 7F0479F4 27A50440 */ addiu $a1, $sp, 0x440 -/* 07A3E8 7F0479F8 8FA6047C */ lw $a2, 0x47c($sp) -/* 07A3EC 7F0479FC 0FC0BF1E */ jal chrlvGeometryRelated7F02FC34 -/* 07A3F0 7F047A00 3C074120 */ lui $a3, 0x4120 -/* 07A3F4 7F047A04 10400003 */ beqz $v0, .L7F047A14 -/* 07A3F8 7F047A08 C7AE0434 */ lwc1 $f14, 0x434($sp) -/* 07A3FC 7F047A0C C62800A0 */ lwc1 $f8, 0xa0($s1) -/* 07A400 7F047A10 E7A80480 */ swc1 $f8, 0x480($sp) -.L7F047A14: -/* 07A404 7F047A14 3C018005 */ lui $at, %hi(D_80052B4C) # $at, 0x8005 -/* 07A408 7F047A18 C4248C8C */ lwc1 $f4, %lo(D_80052B4C)($at) -/* 07A40C 7F047A1C 3C018005 */ lui $at, %hi(D_80052B50) # $at, 0x8005 -/* 07A410 7F047A20 C4268C90 */ lwc1 $f6, %lo(D_80052B50)($at) -/* 07A414 7F047A24 3C073909 */ lui $a3, (0x3909421F >> 16) # lui $a3, 0x3909 -/* 07A418 7F047A28 34E7421F */ ori $a3, (0x3909421F & 0xFFFF) # ori $a3, $a3, 0x421f -/* 07A41C 7F047A2C 262400A0 */ addiu $a0, $s1, 0xa0 -/* 07A420 7F047A30 8FA50480 */ lw $a1, 0x480($sp) -/* 07A424 7F047A34 2626009C */ addiu $a2, $s1, 0x9c -/* 07A428 7F047A38 E7AE0434 */ swc1 $f14, 0x434($sp) -/* 07A42C 7F047A3C E7A40010 */ swc1 $f4, 0x10($sp) -/* 07A430 7F047A40 0FC10C73 */ jal chrobjCallsApplySpeed -/* 07A434 7F047A44 E7A60014 */ swc1 $f6, 0x14($sp) -/* 07A438 7F047A48 3C018005 */ lui $at, %hi(D_80052B54) # $at, 0x8005 -/* 07A43C 7F047A4C C4348C94 */ lwc1 $f20, %lo(D_80052B54)($at) -/* 07A440 7F047A50 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07A444 7F047A54 C7AE0434 */ lwc1 $f14, 0x434($sp) -/* 07A448 7F047A58 3C018005 */ lui $at, %hi(D_80052B58) # $at, 0x8005 -/* 07A44C 7F047A5C 460CA03E */ c.le.s $f20, $f12 -/* 07A450 7F047A60 00000000 */ nop -/* 07A454 7F047A64 45020009 */ bc1fl .L7F047A8C -/* 07A458 7F047A68 4616603C */ c.lt.s $f12, $f22 -/* 07A45C 7F047A6C 46146281 */ sub.s $f10, $f12, $f20 -.L7F047A70: -/* 07A460 7F047A70 E62A00A0 */ swc1 $f10, 0xa0($s1) -/* 07A464 7F047A74 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07A468 7F047A78 460CA03E */ c.le.s $f20, $f12 -/* 07A46C 7F047A7C 00000000 */ nop -/* 07A470 7F047A80 4503FFFB */ bc1tl .L7F047A70 -/* 07A474 7F047A84 46146281 */ sub.s $f10, $f12, $f20 -/* 07A478 7F047A88 4616603C */ c.lt.s $f12, $f22 -.L7F047A8C: -/* 07A47C 7F047A8C 00000000 */ nop -/* 07A480 7F047A90 45020009 */ bc1fl .L7F047AB8 -/* 07A484 7F047A94 C7A40480 */ lwc1 $f4, 0x480($sp) -/* 07A488 7F047A98 46146200 */ add.s $f8, $f12, $f20 -.L7F047A9C: -/* 07A48C 7F047A9C E62800A0 */ swc1 $f8, 0xa0($s1) -/* 07A490 7F047AA0 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07A494 7F047AA4 4616603C */ c.lt.s $f12, $f22 -/* 07A498 7F047AA8 00000000 */ nop -/* 07A49C 7F047AAC 4503FFFB */ bc1tl .L7F047A9C -/* 07A4A0 7F047AB0 46146200 */ add.s $f8, $f12, $f20 -/* 07A4A4 7F047AB4 C7A40480 */ lwc1 $f4, 0x480($sp) -.L7F047AB8: -/* 07A4A8 7F047AB8 460C2032 */ c.eq.s $f4, $f12 -/* 07A4AC 7F047ABC 00000000 */ nop -/* 07A4B0 7F047AC0 4502000F */ bc1fl .L7F047B00 -/* 07A4B4 7F047AC4 8E890008 */ lw $t1, 8($s4) -/* 07A4B8 7F047AC8 C620009C */ lwc1 $f0, 0x9c($s1) -/* 07A4BC 7F047ACC C4268C98 */ lwc1 $f6, %lo(D_80052B58)($at) -/* 07A4C0 7F047AD0 3C018005 */ lui $at, %hi(D_80052B5C) # $at, 0x8005 -/* 07A4C4 7F047AD4 4606003E */ c.le.s $f0, $f6 -/* 07A4C8 7F047AD8 00000000 */ nop -/* 07A4CC 7F047ADC 45020008 */ bc1fl .L7F047B00 -/* 07A4D0 7F047AE0 8E890008 */ lw $t1, 8($s4) -/* 07A4D4 7F047AE4 C42A8C9C */ lwc1 $f10, %lo(D_80052B5C)($at) -/* 07A4D8 7F047AE8 4600503E */ c.le.s $f10, $f0 -/* 07A4DC 7F047AEC 00000000 */ nop -/* 07A4E0 7F047AF0 45020003 */ bc1fl .L7F047B00 -/* 07A4E4 7F047AF4 8E890008 */ lw $t1, 8($s4) -/* 07A4E8 7F047AF8 E636009C */ swc1 $f22, 0x9c($s1) -/* 07A4EC 7F047AFC 8E890008 */ lw $t1, 8($s4) -.L7F047B00: -/* 07A4F0 7F047B00 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07A4F4 7F047B04 C4221004 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07A4F8 7F047B08 8D280008 */ lw $t0, 8($t1) -/* 07A4FC 7F047B0C C7A4043C */ lwc1 $f4, 0x43c($sp) -/* 07A500 7F047B10 4602B03C */ c.lt.s $f22, $f2 -/* 07A504 7F047B14 8D0A000C */ lw $t2, 0xc($t0) -/* 07A508 7F047B18 45000004 */ bc1f .L7F047B2C -/* 07A50C 7F047B1C 8D500004 */ lw $s0, 4($t2) -/* 07A510 7F047B20 C62800A0 */ lwc1 $f8, 0xa0($s1) -/* 07A514 7F047B24 46044181 */ sub.s $f6, $f8, $f4 -/* 07A518 7F047B28 46023383 */ div.s $f14, $f6, $f2 -.L7F047B2C: -/* 07A51C 7F047B2C 4616703C */ c.lt.s $f14, $f22 -/* 07A520 7F047B30 00000000 */ nop -/* 07A524 7F047B34 45000002 */ bc1f .L7F047B40 -/* 07A528 7F047B38 00000000 */ nop -/* 07A52C 7F047B3C 46147380 */ add.s $f14, $f14, $f20 -.L7F047B40: -/* 07A530 7F047B40 0FC1606B */ jal sinf -/* 07A534 7F047B44 46007306 */ mov.s $f12, $f14 -/* 07A538 7F047B48 C60A0008 */ lwc1 $f10, 8($s0) -/* 07A53C 7F047B4C C6880014 */ lwc1 $f8, 0x14($s4) -/* 07A540 7F047B50 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07A544 7F047B54 46085102 */ mul.s $f4, $f10, $f8 -/* 07A548 7F047B58 C42A1004 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07A54C 7F047B5C 46040182 */ mul.s $f6, $f0, $f4 -/* 07A550 7F047B60 00000000 */ nop -/* 07A554 7F047B64 460A3202 */ mul.s $f8, $f6, $f10 -/* 07A558 7F047B68 E7A80464 */ swc1 $f8, 0x464($sp) -/* 07A55C 7F047B6C 0FC1606B */ jal sinf -/* 07A560 7F047B70 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07A564 7F047B74 E7A00440 */ swc1 $f0, 0x440($sp) -/* 07A568 7F047B78 E7B60444 */ swc1 $f22, 0x444($sp) -/* 07A56C 7F047B7C 0FC16068 */ jal cosf -/* 07A570 7F047B80 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07A574 7F047B84 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07A578 7F047B88 44817000 */ mtc1 $at, $f14 -/* 07A57C 7F047B8C E7A00448 */ swc1 $f0, 0x448($sp) -/* 07A580 7F047B90 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07A584 7F047B94 C4221004 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07A588 7F047B98 C6240088 */ lwc1 $f4, 0x88($s1) -/* 07A58C 7F047B9C C7AA0440 */ lwc1 $f10, 0x440($sp) -/* 07A590 7F047BA0 C7AC0464 */ lwc1 $f12, 0x464($sp) -/* 07A594 7F047BA4 46022182 */ mul.s $f6, $f4, $f2 -/* 07A598 7F047BA8 C6240058 */ lwc1 $f4, 0x58($s1) -/* 07A59C 7F047BAC 27B0046C */ addiu $s0, $sp, 0x46c -/* 07A5A0 7F047BB0 240B001F */ li $t3, 31 -/* 07A5A4 7F047BB4 02002025 */ move $a0, $s0 -/* 07A5A8 7F047BB8 460A3202 */ mul.s $f8, $f6, $f10 -/* 07A5AC 7F047BBC 46082180 */ add.s $f6, $f4, $f8 -/* 07A5B0 7F047BC0 C7A40448 */ lwc1 $f4, 0x448($sp) -/* 07A5B4 7F047BC4 460C2202 */ mul.s $f8, $f4, $f12 -/* 07A5B8 7F047BC8 46083181 */ sub.s $f6, $f6, $f8 -/* 07A5BC 7F047BCC E7A6069C */ swc1 $f6, 0x69c($sp) -/* 07A5C0 7F047BD0 C628005C */ lwc1 $f8, 0x5c($s1) -/* 07A5C4 7F047BD4 44073000 */ mfc1 $a3, $f6 -/* 07A5C8 7F047BD8 E7A806A0 */ swc1 $f8, 0x6a0($sp) -/* 07A5CC 7F047BDC C6280088 */ lwc1 $f8, 0x88($s1) -/* 07A5D0 7F047BE0 46024202 */ mul.s $f8, $f8, $f2 -/* 07A5D4 7F047BE4 00000000 */ nop -/* 07A5D8 7F047BE8 46044202 */ mul.s $f8, $f8, $f4 -/* 07A5DC 7F047BEC C6240060 */ lwc1 $f4, 0x60($s1) -/* 07A5E0 7F047BF0 46082100 */ add.s $f4, $f4, $f8 -/* 07A5E4 7F047BF4 460C5202 */ mul.s $f8, $f10, $f12 -/* 07A5E8 7F047BF8 46044280 */ add.s $f10, $f8, $f4 -/* 07A5EC 7F047BFC E7AA06A4 */ swc1 $f10, 0x6a4($sp) -/* 07A5F0 7F047C00 8E660010 */ lw $a2, 0x10($s3) -/* 07A5F4 7F047C04 8E650008 */ lw $a1, 8($s3) -/* 07A5F8 7F047C08 E7B60020 */ swc1 $f22, 0x20($sp) -/* 07A5FC 7F047C0C E7B60018 */ swc1 $f22, 0x18($sp) -/* 07A600 7F047C10 AFAB0014 */ sw $t3, 0x14($sp) -/* 07A604 7F047C14 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07A608 7F047C18 E7AE0024 */ swc1 $f14, 0x24($sp) -/* 07A60C 7F047C1C 0FC2C039 */ jal stanTestLineUnobstructed -/* 07A610 7F047C20 E7AE001C */ swc1 $f14, 0x1c($sp) -/* 07A614 7F047C24 104000F9 */ beqz $v0, .L7F04800C -/* 07A618 7F047C28 02002025 */ move $a0, $s0 -/* 07A61C 7F047C2C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07A620 7F047C30 44814000 */ mtc1 $at, $f8 -/* 07A624 7F047C34 240C001F */ li $t4, 31 -/* 07A628 7F047C38 AFAC0010 */ sw $t4, 0x10($sp) -/* 07A62C 7F047C3C 8FA5069C */ lw $a1, 0x69c($sp) -/* 07A630 7F047C40 8FA606A4 */ lw $a2, 0x6a4($sp) -/* 07A634 7F047C44 3C074120 */ lui $a3, 0x4120 -/* 07A638 7F047C48 E7B60014 */ swc1 $f22, 0x14($sp) -/* 07A63C 7F047C4C 0FC2C2DE */ jal stanTestVolume -/* 07A640 7F047C50 E7A80018 */ swc1 $f8, 0x18($sp) -/* 07A644 7F047C54 044300EE */ bgezl $v0, .L7F048010 -/* 07A648 7F047C58 C6260098 */ lwc1 $f6, 0x98($s1) -/* 07A64C 7F047C5C 8E6E0014 */ lw $t6, 0x14($s3) -/* 07A650 7F047C60 8FAD046C */ lw $t5, 0x46c($sp) -/* 07A654 7F047C64 02202025 */ move $a0, $s1 -/* 07A658 7F047C68 AFAE0450 */ sw $t6, 0x450($sp) -/* 07A65C 7F047C6C C6640008 */ lwc1 $f4, 8($s3) -/* 07A660 7F047C70 E7A40454 */ swc1 $f4, 0x454($sp) -/* 07A664 7F047C74 C666000C */ lwc1 $f6, 0xc($s3) -/* 07A668 7F047C78 E7A60458 */ swc1 $f6, 0x458($sp) -/* 07A66C 7F047C7C C66A0010 */ lwc1 $f10, 0x10($s3) -/* 07A670 7F047C80 E7AA045C */ swc1 $f10, 0x45c($sp) -/* 07A674 7F047C84 AE6D0014 */ sw $t5, 0x14($s3) -/* 07A678 7F047C88 C7A2069C */ lwc1 $f2, 0x69c($sp) -/* 07A67C 7F047C8C E6620008 */ swc1 $f2, 8($s3) -/* 07A680 7F047C90 E6220058 */ swc1 $f2, 0x58($s1) -/* 07A684 7F047C94 C7A206A4 */ lwc1 $f2, 0x6a4($sp) -/* 07A688 7F047C98 E6620010 */ swc1 $f2, 0x10($s3) -/* 07A68C 7F047C9C 0FC10151 */ jal chrobjCollisionRelated -/* 07A690 7F047CA0 E6220060 */ swc1 $f2, 0x60($s1) -/* 07A694 7F047CA4 0FC15BE0 */ jal setupUpdateObjectRoomPosition -/* 07A698 7F047CA8 02202025 */ move $a0, $s1 -/* 07A69C 7F047CAC 0FC1128F */ jal sub_GAME_7F0448A8 -/* 07A6A0 7F047CB0 02602025 */ move $a0, $s3 -/* 07A6A4 7F047CB4 10400092 */ beqz $v0, .L7F047F00 -/* 07A6A8 7F047CB8 00409025 */ move $s2, $v0 -/* 07A6AC 7F047CBC 8E980008 */ lw $t8, 8($s4) -/* 07A6B0 7F047CC0 C6280018 */ lwc1 $f8, 0x18($s1) -/* 07A6B4 7F047CC4 02002025 */ move $a0, $s0 -/* 07A6B8 7F047CC8 8F0F0008 */ lw $t7, 8($t8) -/* 07A6BC 7F047CCC 8DF90028 */ lw $t9, 0x28($t7) -/* 07A6C0 7F047CD0 8F220004 */ lw $v0, 4($t9) -/* 07A6C4 7F047CD4 C4440004 */ lwc1 $f4, 4($v0) -/* 07A6C8 7F047CD8 46044182 */ mul.s $f6, $f8, $f4 -/* 07A6CC 7F047CDC E7A60428 */ swc1 $f6, 0x428($sp) -/* 07A6D0 7F047CE0 C62A0020 */ lwc1 $f10, 0x20($s1) -/* 07A6D4 7F047CE4 C4480004 */ lwc1 $f8, 4($v0) -/* 07A6D8 7F047CE8 46085102 */ mul.s $f4, $f10, $f8 -/* 07A6DC 7F047CEC E7A40430 */ swc1 $f4, 0x430($sp) -/* 07A6E0 7F047CF0 C6260018 */ lwc1 $f6, 0x18($s1) -/* 07A6E4 7F047CF4 C44A0008 */ lwc1 $f10, 8($v0) -/* 07A6E8 7F047CF8 460A3202 */ mul.s $f8, $f6, $f10 -/* 07A6EC 7F047CFC E7A8041C */ swc1 $f8, 0x41c($sp) -/* 07A6F0 7F047D00 C6240020 */ lwc1 $f4, 0x20($s1) -/* 07A6F4 7F047D04 C4460008 */ lwc1 $f6, 8($v0) -/* 07A6F8 7F047D08 46062282 */ mul.s $f10, $f4, $f6 -/* 07A6FC 7F047D0C E7AA0424 */ swc1 $f10, 0x424($sp) -/* 07A700 7F047D10 C6280038 */ lwc1 $f8, 0x38($s1) -/* 07A704 7F047D14 C4440014 */ lwc1 $f4, 0x14($v0) -/* 07A708 7F047D18 46044182 */ mul.s $f6, $f8, $f4 -/* 07A70C 7F047D1C E7A60410 */ swc1 $f6, 0x410($sp) -/* 07A710 7F047D20 C62A0040 */ lwc1 $f10, 0x40($s1) -/* 07A714 7F047D24 C4480014 */ lwc1 $f8, 0x14($v0) -/* 07A718 7F047D28 46085102 */ mul.s $f4, $f10, $f8 -/* 07A71C 7F047D2C E7A40418 */ swc1 $f4, 0x418($sp) -/* 07A720 7F047D30 C6260038 */ lwc1 $f6, 0x38($s1) -/* 07A724 7F047D34 C44A0018 */ lwc1 $f10, 0x18($v0) -/* 07A728 7F047D38 460A3202 */ mul.s $f8, $f6, $f10 -/* 07A72C 7F047D3C E7A80404 */ swc1 $f8, 0x404($sp) -/* 07A730 7F047D40 C6240040 */ lwc1 $f4, 0x40($s1) -/* 07A734 7F047D44 C4460018 */ lwc1 $f6, 0x18($v0) -/* 07A738 7F047D48 C7A80410 */ lwc1 $f8, 0x410($sp) -/* 07A73C 7F047D4C 46062282 */ mul.s $f10, $f4, $f6 -/* 07A740 7F047D50 C7A40428 */ lwc1 $f4, 0x428($sp) -/* 07A744 7F047D54 E7AA040C */ swc1 $f10, 0x40c($sp) -/* 07A748 7F047D58 8E690014 */ lw $t1, 0x14($s3) -/* 07A74C 7F047D5C AFA9046C */ sw $t1, 0x46c($sp) -/* 07A750 7F047D60 C6600008 */ lwc1 $f0, 8($s3) -/* 07A754 7F047D64 C6620010 */ lwc1 $f2, 0x10($s3) -/* 07A758 7F047D68 46040180 */ add.s $f6, $f0, $f4 -/* 07A75C 7F047D6C C7A40418 */ lwc1 $f4, 0x418($sp) -/* 07A760 7F047D70 44050000 */ mfc1 $a1, $f0 -/* 07A764 7F047D74 44061000 */ mfc1 $a2, $f2 -/* 07A768 7F047D78 46064280 */ add.s $f10, $f8, $f6 -/* 07A76C 7F047D7C C7A80430 */ lwc1 $f8, 0x430($sp) -/* 07A770 7F047D80 46081180 */ add.s $f6, $f2, $f8 -/* 07A774 7F047D84 44075000 */ mfc1 $a3, $f10 -/* 07A778 7F047D88 46062280 */ add.s $f10, $f4, $f6 -/* 07A77C 7F047D8C 0FC2BFA9 */ jal walkTilesBetweenPoints_NoCallback -/* 07A780 7F047D90 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07A784 7F047D94 10400059 */ beqz $v0, .L7F047EFC -/* 07A788 7F047D98 C7A40428 */ lwc1 $f4, 0x428($sp) -/* 07A78C 7F047D9C C6600008 */ lwc1 $f0, 8($s3) -/* 07A790 7F047DA0 C7A80410 */ lwc1 $f8, 0x410($sp) -/* 07A794 7F047DA4 C6620010 */ lwc1 $f2, 0x10($s3) -/* 07A798 7F047DA8 46040180 */ add.s $f6, $f0, $f4 -/* 07A79C 7F047DAC C7A40418 */ lwc1 $f4, 0x418($sp) -/* 07A7A0 7F047DB0 02002025 */ move $a0, $s0 -/* 07A7A4 7F047DB4 46064280 */ add.s $f10, $f8, $f6 -/* 07A7A8 7F047DB8 C7A60430 */ lwc1 $f6, 0x430($sp) -/* 07A7AC 7F047DBC 44055000 */ mfc1 $a1, $f10 -/* 07A7B0 7F047DC0 46061280 */ add.s $f10, $f2, $f6 -/* 07A7B4 7F047DC4 460A2180 */ add.s $f6, $f4, $f10 -/* 07A7B8 7F047DC8 C7AA041C */ lwc1 $f10, 0x41c($sp) -/* 07A7BC 7F047DCC 44063000 */ mfc1 $a2, $f6 -/* 07A7C0 7F047DD0 460A0180 */ add.s $f6, $f0, $f10 -/* 07A7C4 7F047DD4 46064280 */ add.s $f10, $f8, $f6 -/* 07A7C8 7F047DD8 C7A80424 */ lwc1 $f8, 0x424($sp) -/* 07A7CC 7F047DDC 46081180 */ add.s $f6, $f2, $f8 -/* 07A7D0 7F047DE0 44075000 */ mfc1 $a3, $f10 -/* 07A7D4 7F047DE4 46062280 */ add.s $f10, $f4, $f6 -/* 07A7D8 7F047DE8 0FC2BFA9 */ jal walkTilesBetweenPoints_NoCallback -/* 07A7DC 7F047DEC E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07A7E0 7F047DF0 10400042 */ beqz $v0, .L7F047EFC -/* 07A7E4 7F047DF4 C7A4041C */ lwc1 $f4, 0x41c($sp) -/* 07A7E8 7F047DF8 C6680008 */ lwc1 $f8, 8($s3) -/* 07A7EC 7F047DFC C7A60410 */ lwc1 $f6, 0x410($sp) -/* 07A7F0 7F047E00 02002025 */ move $a0, $s0 -/* 07A7F4 7F047E04 46044000 */ add.s $f0, $f8, $f4 -/* 07A7F8 7F047E08 C7A40424 */ lwc1 $f4, 0x424($sp) -/* 07A7FC 7F047E0C C6680010 */ lwc1 $f8, 0x10($s3) -/* 07A800 7F047E10 46003280 */ add.s $f10, $f6, $f0 -/* 07A804 7F047E14 C7A60418 */ lwc1 $f6, 0x418($sp) -/* 07A808 7F047E18 46044080 */ add.s $f2, $f8, $f4 -/* 07A80C 7F047E1C 44055000 */ mfc1 $a1, $f10 -/* 07A810 7F047E20 C7A80404 */ lwc1 $f8, 0x404($sp) -/* 07A814 7F047E24 46023280 */ add.s $f10, $f6, $f2 -/* 07A818 7F047E28 C7A6040C */ lwc1 $f6, 0x40c($sp) -/* 07A81C 7F047E2C 46004100 */ add.s $f4, $f8, $f0 -/* 07A820 7F047E30 44065000 */ mfc1 $a2, $f10 -/* 07A824 7F047E34 46023280 */ add.s $f10, $f6, $f2 -/* 07A828 7F047E38 44072000 */ mfc1 $a3, $f4 -/* 07A82C 7F047E3C 0FC2BFA9 */ jal walkTilesBetweenPoints_NoCallback -/* 07A830 7F047E40 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07A834 7F047E44 1040002D */ beqz $v0, .L7F047EFC -/* 07A838 7F047E48 C7A4041C */ lwc1 $f4, 0x41c($sp) -/* 07A83C 7F047E4C C6600008 */ lwc1 $f0, 8($s3) -/* 07A840 7F047E50 C7A80404 */ lwc1 $f8, 0x404($sp) -/* 07A844 7F047E54 C6620010 */ lwc1 $f2, 0x10($s3) -/* 07A848 7F047E58 46040180 */ add.s $f6, $f0, $f4 -/* 07A84C 7F047E5C C7A4040C */ lwc1 $f4, 0x40c($sp) -/* 07A850 7F047E60 02002025 */ move $a0, $s0 -/* 07A854 7F047E64 46064280 */ add.s $f10, $f8, $f6 -/* 07A858 7F047E68 C7A60424 */ lwc1 $f6, 0x424($sp) -/* 07A85C 7F047E6C 44055000 */ mfc1 $a1, $f10 -/* 07A860 7F047E70 46061280 */ add.s $f10, $f2, $f6 -/* 07A864 7F047E74 460A2180 */ add.s $f6, $f4, $f10 -/* 07A868 7F047E78 C7AA0428 */ lwc1 $f10, 0x428($sp) -/* 07A86C 7F047E7C 44063000 */ mfc1 $a2, $f6 -/* 07A870 7F047E80 460A0180 */ add.s $f6, $f0, $f10 -/* 07A874 7F047E84 46064280 */ add.s $f10, $f8, $f6 -/* 07A878 7F047E88 C7A80430 */ lwc1 $f8, 0x430($sp) -/* 07A87C 7F047E8C 46081180 */ add.s $f6, $f2, $f8 -/* 07A880 7F047E90 44075000 */ mfc1 $a3, $f10 -/* 07A884 7F047E94 46062280 */ add.s $f10, $f4, $f6 -/* 07A888 7F047E98 0FC2BFA9 */ jal walkTilesBetweenPoints_NoCallback -/* 07A88C 7F047E9C E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07A890 7F047EA0 10400016 */ beqz $v0, .L7F047EFC -/* 07A894 7F047EA4 C7A40428 */ lwc1 $f4, 0x428($sp) -/* 07A898 7F047EA8 C6680008 */ lwc1 $f8, 8($s3) -/* 07A89C 7F047EAC C7A60404 */ lwc1 $f6, 0x404($sp) -/* 07A8A0 7F047EB0 02002025 */ move $a0, $s0 -/* 07A8A4 7F047EB4 46044000 */ add.s $f0, $f8, $f4 -/* 07A8A8 7F047EB8 C7A40430 */ lwc1 $f4, 0x430($sp) -/* 07A8AC 7F047EBC C6680010 */ lwc1 $f8, 0x10($s3) -/* 07A8B0 7F047EC0 46003280 */ add.s $f10, $f6, $f0 -/* 07A8B4 7F047EC4 C7A6040C */ lwc1 $f6, 0x40c($sp) -/* 07A8B8 7F047EC8 46044080 */ add.s $f2, $f8, $f4 -/* 07A8BC 7F047ECC 44055000 */ mfc1 $a1, $f10 -/* 07A8C0 7F047ED0 C7A80410 */ lwc1 $f8, 0x410($sp) -/* 07A8C4 7F047ED4 46023280 */ add.s $f10, $f6, $f2 -/* 07A8C8 7F047ED8 C7A60418 */ lwc1 $f6, 0x418($sp) -/* 07A8CC 7F047EDC 46004100 */ add.s $f4, $f8, $f0 -/* 07A8D0 7F047EE0 44065000 */ mfc1 $a2, $f10 -/* 07A8D4 7F047EE4 46023280 */ add.s $f10, $f6, $f2 -/* 07A8D8 7F047EE8 44072000 */ mfc1 $a3, $f4 -/* 07A8DC 7F047EEC 0FC2BFA9 */ jal walkTilesBetweenPoints_NoCallback -/* 07A8E0 7F047EF0 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07A8E4 7F047EF4 14400002 */ bnez $v0, .L7F047F00 -/* 07A8E8 7F047EF8 00000000 */ nop -.L7F047EFC: -/* 07A8EC 7F047EFC 00009025 */ move $s2, $zero -.L7F047F00: -/* 07A8F0 7F047F00 12400022 */ beqz $s2, .L7F047F8C -/* 07A8F4 7F047F04 02202025 */ move $a0, $s1 -/* 07A8F8 7F047F08 26300058 */ addiu $s0, $s1, 0x58 -/* 07A8FC 7F047F0C 0FC11333 */ jal sub_GAME_7F044B38 -/* 07A900 7F047F10 2632007C */ addiu $s2, $s1, 0x7c -/* 07A904 7F047F14 02602025 */ move $a0, $s3 -/* 07A908 7F047F18 0FC100DD */ jal sub_GAME_7F0402B4 -/* 07A90C 7F047F1C 02402825 */ move $a1, $s2 -/* 07A910 7F047F20 0FC147AB */ jal detonate_proxmine_In_range -/* 07A914 7F047F24 02002025 */ move $a0, $s0 -/* 07A918 7F047F28 8FA8047C */ lw $t0, 0x47c($sp) -/* 07A91C 7F047F2C 27A40454 */ addiu $a0, $sp, 0x454 -/* 07A920 7F047F30 27A5069C */ addiu $a1, $sp, 0x69c -/* 07A924 7F047F34 11000054 */ beqz $t0, .L7F048088 -/* 07A928 7F047F38 01003025 */ move $a2, $t0 -/* 07A92C 7F047F3C 0FC0BF65 */ jal chrlvIsArrivingLaterallyAtPos -/* 07A930 7F047F40 3C0742C8 */ lui $a3, 0x42c8 -/* 07A934 7F047F44 10400050 */ beqz $v0, .L7F048088 -/* 07A938 7F047F48 00000000 */ nop -/* 07A93C 7F047F4C 8E2A00A8 */ lw $t2, 0xa8($s1) -/* 07A940 7F047F50 8E2C00A4 */ lw $t4, 0xa4($s1) -/* 07A944 7F047F54 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 07A948 7F047F58 254B0001 */ addiu $t3, $t2, 1 -/* 07A94C 7F047F5C AE2B00A8 */ sw $t3, 0xa8($s1) -/* 07A950 7F047F60 8D8E0000 */ lw $t6, ($t4) -/* 07A954 7F047F64 000BC080 */ sll $t8, $t3, 2 -/* 07A958 7F047F68 01D87821 */ addu $t7, $t6, $t8 -/* 07A95C 7F047F6C 8DF90000 */ lw $t9, ($t7) -/* 07A960 7F047F70 07210045 */ bgez $t9, .L7F048088 -/* 07A964 7F047F74 00000000 */ nop -/* 07A968 7F047F78 44814000 */ mtc1 $at, $f8 -/* 07A96C 7F047F7C AE2000A4 */ sw $zero, 0xa4($s1) -/* 07A970 7F047F80 E6360094 */ swc1 $f22, 0x94($s1) -/* 07A974 7F047F84 10000040 */ b .L7F048088 -/* 07A978 7F047F88 E6280098 */ swc1 $f8, 0x98($s1) -.L7F047F8C: -/* 07A97C 7F047F8C C6240098 */ lwc1 $f4, 0x98($s1) -/* 07A980 7F047F90 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 07A984 7F047F94 4616203C */ c.lt.s $f4, $f22 -/* 07A988 7F047F98 00000000 */ nop -/* 07A98C 7F047F9C 45020006 */ bc1fl .L7F047FB8 -/* 07A990 7F047FA0 E6360088 */ swc1 $f22, 0x88($s1) -/* 07A994 7F047FA4 C6260088 */ lwc1 $f6, 0x88($s1) -/* 07A998 7F047FA8 44815000 */ mtc1 $at, $f10 -/* 07A99C 7F047FAC E6260094 */ swc1 $f6, 0x94($s1) -/* 07A9A0 7F047FB0 E62A0098 */ swc1 $f10, 0x98($s1) -/* 07A9A4 7F047FB4 E6360088 */ swc1 $f22, 0x88($s1) -.L7F047FB8: -/* 07A9A8 7F047FB8 C7A8043C */ lwc1 $f8, 0x43c($sp) -/* 07A9AC 7F047FBC 02202025 */ move $a0, $s1 -/* 07A9B0 7F047FC0 E62800A0 */ swc1 $f8, 0xa0($s1) -/* 07A9B4 7F047FC4 C7A40438 */ lwc1 $f4, 0x438($sp) -/* 07A9B8 7F047FC8 E624009C */ swc1 $f4, 0x9c($s1) -/* 07A9BC 7F047FCC 8FA90450 */ lw $t1, 0x450($sp) -/* 07A9C0 7F047FD0 AE690014 */ sw $t1, 0x14($s3) -/* 07A9C4 7F047FD4 C7A20454 */ lwc1 $f2, 0x454($sp) -/* 07A9C8 7F047FD8 E6620008 */ swc1 $f2, 8($s3) -/* 07A9CC 7F047FDC E6220058 */ swc1 $f2, 0x58($s1) -/* 07A9D0 7F047FE0 C7A20458 */ lwc1 $f2, 0x458($sp) -/* 07A9D4 7F047FE4 E662000C */ swc1 $f2, 0xc($s3) -/* 07A9D8 7F047FE8 E622005C */ swc1 $f2, 0x5c($s1) -/* 07A9DC 7F047FEC C7A2045C */ lwc1 $f2, 0x45c($sp) -/* 07A9E0 7F047FF0 E6620010 */ swc1 $f2, 0x10($s3) -/* 07A9E4 7F047FF4 0FC10151 */ jal chrobjCollisionRelated -/* 07A9E8 7F047FF8 E6220060 */ swc1 $f2, 0x60($s1) -/* 07A9EC 7F047FFC 0FC15BE0 */ jal setupUpdateObjectRoomPosition -/* 07A9F0 7F048000 02202025 */ move $a0, $s1 -/* 07A9F4 7F048004 10000020 */ b .L7F048088 -/* 07A9F8 7F048008 00000000 */ nop -.L7F04800C: -/* 07A9FC 7F04800C C6260098 */ lwc1 $f6, 0x98($s1) -.L7F048010: -/* 07AA00 7F048010 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 07AA04 7F048014 4616303C */ c.lt.s $f6, $f22 -/* 07AA08 7F048018 00000000 */ nop -/* 07AA0C 7F04801C 45020006 */ bc1fl .L7F048038 -/* 07AA10 7F048020 E6360088 */ swc1 $f22, 0x88($s1) -/* 07AA14 7F048024 C62A0088 */ lwc1 $f10, 0x88($s1) -/* 07AA18 7F048028 44814000 */ mtc1 $at, $f8 -/* 07AA1C 7F04802C E62A0094 */ swc1 $f10, 0x94($s1) -/* 07AA20 7F048030 E6280098 */ swc1 $f8, 0x98($s1) -/* 07AA24 7F048034 E6360088 */ swc1 $f22, 0x88($s1) -.L7F048038: -/* 07AA28 7F048038 C7A4043C */ lwc1 $f4, 0x43c($sp) -/* 07AA2C 7F04803C E62400A0 */ swc1 $f4, 0xa0($s1) -/* 07AA30 7F048040 C7A60438 */ lwc1 $f6, 0x438($sp) -/* 07AA34 7F048044 10000010 */ b .L7F048088 -/* 07AA38 7F048048 E626009C */ swc1 $f6, 0x9c($s1) -/* 07AA3C 7F04804C 8E280008 */ lw $t0, 8($s1) -.L7F048050: -/* 07AA40 7F048050 00085080 */ sll $t2, $t0, 2 -/* 07AA44 7F048054 0541000C */ bgez $t2, .L7F048088 -/* 07AA48 7F048058 00000000 */ nop -/* 07AA4C 7F04805C C62C0038 */ lwc1 $f12, 0x38($s1) -/* 07AA50 7F048060 0FC16BB8 */ jal atan2f -/* 07AA54 7F048064 C62E0040 */ lwc1 $f14, 0x40($s1) -/* 07AA58 7F048068 8E2B0008 */ lw $t3, 8($s1) -/* 07AA5C 7F04806C 3C01DFFF */ lui $at, (0xDFFFFFFF >> 16) # lui $at, 0xdfff -/* 07AA60 7F048070 3421FFFF */ ori $at, (0xDFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 07AA64 7F048074 01616024 */ and $t4, $t3, $at -/* 07AA68 7F048078 E62000A0 */ swc1 $f0, 0xa0($s1) -/* 07AA6C 7F04807C AE2C0008 */ sw $t4, 8($s1) -/* 07AA70 7F048080 0FC11333 */ jal sub_GAME_7F044B38 -/* 07AA74 7F048084 02202025 */ move $a0, $s1 -.L7F048088: -/* 07AA78 7F048088 100000E1 */ b .L7F048410 -/* 07AA7C 7F04808C 92220003 */ lbu $v0, 3($s1) -.L7F048090: -/* 07AA80 7F048090 24010028 */ li $at, 40 -/* 07AA84 7F048094 144100DD */ bne $v0, $at, .L7F04840C -/* 07AA88 7F048098 02202025 */ move $a0, $s1 -/* 07AA8C 7F04809C 0FC0D531 */ jal ai -/* 07AA90 7F0480A0 24050001 */ li $a1, 1 -/* 07AA94 7F0480A4 8E240014 */ lw $a0, 0x14($s1) -/* 07AA98 7F0480A8 26300058 */ addiu $s0, $s1, 0x58 -/* 07AA9C 7F0480AC 8C8D0020 */ lw $t5, 0x20($a0) -/* 07AAA0 7F0480B0 51A00069 */ beql $t5, $zero, .L7F048258 -/* 07AAA4 7F0480B4 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07AAA8 7F0480B8 0FC1B480 */ jal setsuboffset -/* 07AAAC 7F0480BC 02002825 */ move $a1, $s0 -/* 07AAB0 7F0480C0 3C053F99 */ lui $a1, (0x3F99999A >> 16) # lui $a1, 0x3f99 -/* 07AAB4 7F0480C4 4406B000 */ mfc1 $a2, $f22 -/* 07AAB8 7F0480C8 34A5999A */ ori $a1, (0x3F99999A & 0xFFFF) # ori $a1, $a1, 0x999a -/* 07AABC 7F0480CC 0FC1C02E */ jal modelSetAnimPlaySpeed -/* 07AAC0 7F0480D0 8E240014 */ lw $a0, 0x14($s1) -/* 07AAC4 7F0480D4 8E240014 */ lw $a0, 0x14($s1) -/* 07AAC8 7F0480D8 3C188002 */ lui $t8, %hi(animation_table_ptrs2+4) # $t8, 0x8002 -/* 07AACC 7F0480DC 8F1855A0 */ lw $t8, %lo(animation_table_ptrs2+4)($t8) -/* 07AAD0 7F0480E0 8C8E0020 */ lw $t6, 0x20($a0) -/* 07AAD4 7F0480E4 3C054127 */ lui $a1, (0x4127020C >> 16) # lui $a1, 0x4127 -/* 07AAD8 7F0480E8 15D80009 */ bne $t6, $t8, .L7F048110 -/* 07AADC 7F0480EC 00000000 */ nop -/* 07AAE0 7F0480F0 0FC1B4D2 */ jal sub_GAME_7F06CE84 -/* 07AAE4 7F0480F4 34A5020C */ ori $a1, (0x4127020C & 0xFFFF) # ori $a1, $a1, 0x20c -/* 07AAE8 7F0480F8 3C054049 */ lui $a1, (0x40490FDB >> 16) # lui $a1, 0x4049 -/* 07AAEC 7F0480FC 34A50FDB */ ori $a1, (0x40490FDB & 0xFFFF) # ori $a1, $a1, 0xfdb -/* 07AAF0 7F048100 0FC1B49D */ jal setsubroty -/* 07AAF4 7F048104 8E240014 */ lw $a0, 0x14($s1) -/* 07AAF8 7F048108 10000024 */ b .L7F04819C -/* 07AAFC 7F04810C 00000000 */ nop -.L7F048110: -/* 07AB00 7F048110 0C001769 */ jal bossGetStageNum -/* 07AB04 7F048114 00000000 */ nop -/* 07AB08 7F048118 24010016 */ li $at, 22 -/* 07AB0C 7F04811C 1441000A */ bne $v0, $at, .L7F048148 -/* 07AB10 7F048120 3C053F85 */ lui $a1, (0x3F859B3D >> 16) # lui $a1, 0x3f85 -/* 07AB14 7F048124 8E240014 */ lw $a0, 0x14($s1) -/* 07AB18 7F048128 0FC1B4D2 */ jal sub_GAME_7F06CE84 -/* 07AB1C 7F04812C 34A59B3D */ ori $a1, (0x3F859B3D & 0xFFFF) # ori $a1, $a1, 0x9b3d -/* 07AB20 7F048130 3C054016 */ lui $a1, (0x4016CBE4 >> 16) # lui $a1, 0x4016 -/* 07AB24 7F048134 34A5CBE4 */ ori $a1, (0x4016CBE4 & 0xFFFF) # ori $a1, $a1, 0xcbe4 -/* 07AB28 7F048138 0FC1B49D */ jal setsubroty -/* 07AB2C 7F04813C 8E240014 */ lw $a0, 0x14($s1) -/* 07AB30 7F048140 10000016 */ b .L7F04819C -/* 07AB34 7F048144 00000000 */ nop -.L7F048148: -/* 07AB38 7F048148 0C001769 */ jal bossGetStageNum -/* 07AB3C 7F04814C 00000000 */ nop -/* 07AB40 7F048150 2401001A */ li $at, 26 -/* 07AB44 7F048154 1441000B */ bne $v0, $at, .L7F048184 -/* 07AB48 7F048158 3C053F85 */ lui $a1, 0x3f85 -/* 07AB4C 7F04815C 3C053F85 */ lui $a1, (0x3F859B3D >> 16) # lui $a1, 0x3f85 -/* 07AB50 7F048160 34A59B3D */ ori $a1, (0x3F859B3D & 0xFFFF) # ori $a1, $a1, 0x9b3d -/* 07AB54 7F048164 0FC1B4D2 */ jal sub_GAME_7F06CE84 -/* 07AB58 7F048168 8E240014 */ lw $a0, 0x14($s1) -/* 07AB5C 7F04816C 3C05407B */ lui $a1, (0x407B9B3D >> 16) # lui $a1, 0x407b -/* 07AB60 7F048170 34A553D1 */ ori $a1, (0x407B53D1 & 0xFFFF) # ori $a1, $a1, 0x53d1 -/* 07AB64 7F048174 0FC1B49D */ jal setsubroty -/* 07AB68 7F048178 8E240014 */ lw $a0, 0x14($s1) -/* 07AB6C 7F04817C 10000007 */ b .L7F04819C -/* 07AB70 7F048180 00000000 */ nop -.L7F048184: -/* 07AB74 7F048184 8E240014 */ lw $a0, 0x14($s1) -/* 07AB78 7F048188 0FC1B4D2 */ jal sub_GAME_7F06CE84 -/* 07AB7C 7F04818C 34A59B3D */ ori $a1, (0x407B9B3D & 0xFFFF) # ori $a1, $a1, 0x9b3d -/* 07AB80 7F048190 4405B000 */ mfc1 $a1, $f22 -/* 07AB84 7F048194 0FC1B49D */ jal setsubroty -/* 07AB88 7F048198 8E240014 */ lw $a0, 0x14($s1) -.L7F04819C: -/* 07AB8C 7F04819C 3C058004 */ lui $a1, %hi(g_ClockTimer) # $a1, 0x8004 -/* 07AB90 7F0481A0 8CA50FF4 */ lw $a1, %lo(g_ClockTimer)($a1) -/* 07AB94 7F0481A4 8E240014 */ lw $a0, 0x14($s1) -/* 07AB98 7F0481A8 0FC1C323 */ jal modelTickAnimQuarterSpeed -/* 07AB9C 7F0481AC 24060001 */ li $a2, 1 -/* 07ABA0 7F0481B0 0FC1B6B8 */ jal subcalcpos -/* 07ABA4 7F0481B4 8E240014 */ lw $a0, 0x14($s1) -/* 07ABA8 7F0481B8 8E240014 */ lw $a0, 0x14($s1) -/* 07ABAC 7F0481BC 0FC1B476 */ jal getsuboffset -/* 07ABB0 7F0481C0 02002825 */ move $a1, $s0 -/* 07ABB4 7F0481C4 C62A0058 */ lwc1 $f10, 0x58($s1) -/* 07ABB8 7F0481C8 3C058006 */ lui $a1, %hi(g_CurrentSetup+0) # $a1, 0x8006 -/* 07ABBC 7F0481CC 24A54C40 */ addiu $a1, %lo(g_CurrentSetup+0) # addiu $a1, $a1, 0x4c40 -/* 07ABC0 7F0481D0 E66A0008 */ swc1 $f10, 8($s3) -/* 07ABC4 7F0481D4 C6280060 */ lwc1 $f8, 0x60($s1) -/* 07ABC8 7F0481D8 E6680010 */ swc1 $f8, 0x10($s3) -/* 07ABCC 7F0481DC 86220006 */ lh $v0, 6($s1) -/* 07ABD0 7F0481E0 28412710 */ slti $at, $v0, 0x2710 -/* 07ABD4 7F0481E4 1020000B */ beqz $at, .L7F048214 -/* 07ABD8 7F0481E8 00024900 */ sll $t1, $v0, 4 -/* 07ABDC 7F0481EC 00027880 */ sll $t7, $v0, 2 -/* 07ABE0 7F0481F0 3C058006 */ lui $a1, %hi(g_CurrentSetup+0) # $a1, 0x8006 -/* 07ABE4 7F0481F4 01E27823 */ subu $t7, $t7, $v0 -/* 07ABE8 7F0481F8 24A54C40 */ addiu $a1, %lo(g_CurrentSetup+0) # addiu $a1, $a1, 0x4c40 -/* 07ABEC 7F0481FC 000F7880 */ sll $t7, $t7, 2 -/* 07ABF0 7F048200 8CB90018 */ lw $t9, 0x18($a1) -/* 07ABF4 7F048204 01E27823 */ subu $t7, $t7, $v0 -/* 07ABF8 7F048208 000F7880 */ sll $t7, $t7, 2 -/* 07ABFC 7F04820C 10000008 */ b .L7F048230 -/* 07AC00 7F048210 01F91821 */ addu $v1, $t7, $t9 -.L7F048214: -/* 07AC04 7F048214 8CA8001C */ lw $t0, 0x1c($a1) -/* 07AC08 7F048218 01224821 */ addu $t1, $t1, $v0 -/* 07AC0C 7F04821C 00094880 */ sll $t1, $t1, 2 -/* 07AC10 7F048220 3C01FFF5 */ lui $at, (0xFFF59FC0 >> 16) # lui $at, 0xfff5 -/* 07AC14 7F048224 34219FC0 */ ori $at, (0xFFF59FC0 & 0xFFFF) # ori $at, $at, 0x9fc0 -/* 07AC18 7F048228 01281821 */ addu $v1, $t1, $t0 -/* 07AC1C 7F04822C 00611821 */ addu $v1, $v1, $at -.L7F048230: -/* 07AC20 7F048230 C624005C */ lwc1 $f4, 0x5c($s1) -/* 07AC24 7F048234 C4660004 */ lwc1 $f6, 4($v1) -/* 07AC28 7F048238 02002825 */ move $a1, $s0 -/* 07AC2C 7F04823C 46062280 */ add.s $f10, $f4, $f6 -/* 07AC30 7F048240 E66A000C */ swc1 $f10, 0xc($s3) -/* 07AC34 7F048244 C668000C */ lwc1 $f8, 0xc($s3) -/* 07AC38 7F048248 8E240014 */ lw $a0, 0x14($s1) -/* 07AC3C 7F04824C 0FC1B480 */ jal setsuboffset -/* 07AC40 7F048250 E628005C */ swc1 $f8, 0x5c($s1) -/* 07AC44 7F048254 C62C00A0 */ lwc1 $f12, 0xa0($s1) -.L7F048258: -/* 07AC48 7F048258 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07AC4C 7F04825C 460CB03E */ c.le.s $f22, $f12 -/* 07AC50 7F048260 00000000 */ nop -/* 07AC54 7F048264 45020016 */ bc1fl .L7F0482C0 -/* 07AC58 7F048268 C6200094 */ lwc1 $f0, 0x94($s1) -/* 07AC5C 7F04826C C4221004 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07AC60 7F048270 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07AC64 7F048274 4602603E */ c.le.s $f12, $f2 -/* 07AC68 7F048278 00000000 */ nop -/* 07AC6C 7F04827C 45020006 */ bc1fl .L7F048298 -/* 07AC70 7F048280 C62E0098 */ lwc1 $f14, 0x98($s1) -/* 07AC74 7F048284 C624009C */ lwc1 $f4, 0x9c($s1) -/* 07AC78 7F048288 C62C00A0 */ lwc1 $f12, 0xa0($s1) -/* 07AC7C 7F04828C 10000008 */ b .L7F0482B0 -/* 07AC80 7F048290 E6240098 */ swc1 $f4, 0x98($s1) -/* 07AC84 7F048294 C62E0098 */ lwc1 $f14, 0x98($s1) -.L7F048298: -/* 07AC88 7F048298 C626009C */ lwc1 $f6, 0x9c($s1) -/* 07AC8C 7F04829C 460E3281 */ sub.s $f10, $f6, $f14 -/* 07AC90 7F0482A0 46025202 */ mul.s $f8, $f10, $f2 -/* 07AC94 7F0482A4 460C4103 */ div.s $f4, $f8, $f12 -/* 07AC98 7F0482A8 46047180 */ add.s $f6, $f14, $f4 -/* 07AC9C 7F0482AC E6260098 */ swc1 $f6, 0x98($s1) -.L7F0482B0: -/* 07ACA0 7F0482B0 C42A1004 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07ACA4 7F0482B4 460A6201 */ sub.s $f8, $f12, $f10 -/* 07ACA8 7F0482B8 E62800A0 */ swc1 $f8, 0xa0($s1) -/* 07ACAC 7F0482BC C6200094 */ lwc1 $f0, 0x94($s1) -.L7F0482C0: -/* 07ACB0 7F0482C0 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07ACB4 7F0482C4 4600B03E */ c.le.s $f22, $f0 -/* 07ACB8 7F0482C8 00000000 */ nop -/* 07ACBC 7F0482CC 45020016 */ bc1fl .L7F048328 -/* 07ACC0 7F0482D0 8E2A000C */ lw $t2, 0xc($s1) -/* 07ACC4 7F0482D4 C4221004 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) -/* 07ACC8 7F0482D8 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07ACCC 7F0482DC 4602003E */ c.le.s $f0, $f2 -/* 07ACD0 7F0482E0 00000000 */ nop -/* 07ACD4 7F0482E4 45020006 */ bc1fl .L7F048300 -/* 07ACD8 7F0482E8 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07ACDC 7F0482EC C6240090 */ lwc1 $f4, 0x90($s1) -/* 07ACE0 7F0482F0 C6200094 */ lwc1 $f0, 0x94($s1) -/* 07ACE4 7F0482F4 10000008 */ b .L7F048318 -/* 07ACE8 7F0482F8 E624008C */ swc1 $f4, 0x8c($s1) -/* 07ACEC 7F0482FC C62C008C */ lwc1 $f12, 0x8c($s1) -.L7F048300: -/* 07ACF0 7F048300 C6260090 */ lwc1 $f6, 0x90($s1) -/* 07ACF4 7F048304 460C3281 */ sub.s $f10, $f6, $f12 -/* 07ACF8 7F048308 46025202 */ mul.s $f8, $f10, $f2 -/* 07ACFC 7F04830C 46004103 */ div.s $f4, $f8, $f0 -/* 07AD00 7F048310 46046180 */ add.s $f6, $f12, $f4 -/* 07AD04 7F048314 E626008C */ swc1 $f6, 0x8c($s1) -.L7F048318: -/* 07AD08 7F048318 C42A1004 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07AD0C 7F04831C 460A0201 */ sub.s $f8, $f0, $f10 -/* 07AD10 7F048320 E6280094 */ swc1 $f8, 0x94($s1) -/* 07AD14 7F048324 8E2A000C */ lw $t2, 0xc($s1) -.L7F048328: -/* 07AD18 7F048328 00008025 */ move $s0, $zero -/* 07AD1C 7F04832C 000A5B00 */ sll $t3, $t2, 0xc -/* 07AD20 7F048330 05600014 */ bltz $t3, .L7F048384 -/* 07AD24 7F048334 00000000 */ nop -/* 07AD28 7F048338 0FC13C47 */ jal objIsHealthy -/* 07AD2C 7F04833C 02202025 */ move $a0, $s1 -/* 07AD30 7F048340 10400010 */ beqz $v0, .L7F048384 -/* 07AD34 7F048344 00000000 */ nop -/* 07AD38 7F048348 C624008C */ lwc1 $f4, 0x8c($s1) -/* 07AD3C 7F04834C 4604B032 */ c.eq.s $f22, $f4 -/* 07AD40 7F048350 00000000 */ nop -/* 07AD44 7F048354 4501000B */ bc1t .L7F048384 -/* 07AD48 7F048358 00000000 */ nop -/* 07AD4C 7F04835C 8E2C0008 */ lw $t4, 8($s1) -/* 07AD50 7F048360 3C05459C */ lui $a1, (0x459C4000 >> 16) # lui $a1, 0x459c -/* 07AD54 7F048364 34A54000 */ ori $a1, (0x459C4000 & 0xFFFF) # ori $a1, $a1, 0x4000 -/* 07AD58 7F048368 000C6880 */ sll $t5, $t4, 2 -/* 07AD5C 7F04836C 05A00005 */ bltz $t5, .L7F048384 -/* 07AD60 7F048370 26240058 */ addiu $a0, $s1, 0x58 -/* 07AD64 7F048374 3C0645BB */ lui $a2, (0x45BB8000 >> 16) # lui $a2, 0x45bb -/* 07AD68 7F048378 0FC14EDD */ jal sub_GAME_7F053894 -/* 07AD6C 7F04837C 34C68000 */ ori $a2, (0x45BB8000 & 0xFFFF) # ori $a2, $a2, 0x8000 -/* 07AD70 7F048380 00408025 */ move $s0, $v0 -.L7F048384: -/* 07AD74 7F048384 5A000019 */ blezl $s0, .L7F0483EC -/* 07AD78 7F048388 8E2400B0 */ lw $a0, 0xb0($s1) -/* 07AD7C 7F04838C 8E2400B0 */ lw $a0, 0xb0($s1) -/* 07AD80 7F048390 10800005 */ beqz $a0, .L7F0483A8 -/* 07AD84 7F048394 00000000 */ nop -/* 07AD88 7F048398 0C002094 */ jal sndGetPlayingState -/* 07AD8C 7F04839C 00000000 */ nop -/* 07AD90 7F0483A0 5440000A */ bnezl $v0, .L7F0483CC -/* 07AD94 7F0483A4 8E2400B0 */ lw $a0, 0xb0($s1) -.L7F0483A8: -/* 07AD98 7F0483A8 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 07AD9C 7F0483AC 00000000 */ nop -/* 07ADA0 7F0483B0 14400005 */ bnez $v0, .L7F0483C8 -/* 07ADA4 7F0483B4 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 07ADA8 7F0483B8 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07ADAC 7F0483BC 2405003A */ li $a1, 58 -/* 07ADB0 7F0483C0 0C00209A */ jal sndPlaySfx -/* 07ADB4 7F0483C4 262600B0 */ addiu $a2, $s1, 0xb0 -.L7F0483C8: -/* 07ADB8 7F0483C8 8E2400B0 */ lw $a0, 0xb0($s1) -.L7F0483CC: -/* 07ADBC 7F0483CC 24050008 */ li $a1, 8 -/* 07ADC0 7F0483D0 5080000F */ beql $a0, $zero, .L7F048410 -/* 07ADC4 7F0483D4 92220003 */ lbu $v0, 3($s1) -/* 07ADC8 7F0483D8 0C002179 */ jal sndCreatePostEvent -/* 07ADCC 7F0483DC 02003025 */ move $a2, $s0 -/* 07ADD0 7F0483E0 1000000B */ b .L7F048410 -/* 07ADD4 7F0483E4 92220003 */ lbu $v0, 3($s1) -/* 07ADD8 7F0483E8 8E2400B0 */ lw $a0, 0xb0($s1) -.L7F0483EC: -/* 07ADDC 7F0483EC 50800008 */ beql $a0, $zero, .L7F048410 -/* 07ADE0 7F0483F0 92220003 */ lbu $v0, 3($s1) -/* 07ADE4 7F0483F4 0C002094 */ jal sndGetPlayingState -/* 07ADE8 7F0483F8 00000000 */ nop -/* 07ADEC 7F0483FC 50400004 */ beql $v0, $zero, .L7F048410 -/* 07ADF0 7F048400 92220003 */ lbu $v0, 3($s1) -/* 07ADF4 7F048404 0C002120 */ jal sndDeactivate -/* 07ADF8 7F048408 8E2400B0 */ lw $a0, 0xb0($s1) -.L7F04840C: -/* 07ADFC 7F04840C 92220003 */ lbu $v0, 3($s1) -.L7F048410: -/* 07AE00 7F048410 3C018005 */ lui $at, %hi(D_80052B64) # $at, 0x8005 -/* 07AE04 7F048414 C4348CA4 */ lwc1 $f20, %lo(D_80052B64)($at) -/* 07AE08 7F048418 2401002F */ li $at, 47 -/* 07AE0C 7F04841C 54410020 */ bnel $v0, $at, .L7F0484A0 -/* 07AE10 7F048420 24010001 */ li $at, 1 -/* 07AE14 7F048424 8E700004 */ lw $s0, 4($s3) -/* 07AE18 7F048428 26240058 */ addiu $a0, $s1, 0x58 -/* 07AE1C 7F04842C 8E0E0080 */ lw $t6, 0x80($s0) -/* 07AE20 7F048430 8E180084 */ lw $t8, 0x84($s0) -/* 07AE24 7F048434 8E070090 */ lw $a3, 0x90($s0) -/* 07AE28 7F048438 448E3000 */ mtc1 $t6, $f6 -/* 07AE2C 7F04843C 44985000 */ mtc1 $t8, $f10 -/* 07AE30 7F048440 468031A0 */ cvt.s.w $f6, $f6 -/* 07AE34 7F048444 468052A0 */ cvt.s.w $f10, $f10 -/* 07AE38 7F048448 44053000 */ mfc1 $a1, $f6 -/* 07AE3C 7F04844C 44065000 */ mfc1 $a2, $f10 -/* 07AE40 7F048450 0FC114DC */ jal glassCalculateOpacity -/* 07AE44 7F048454 00000000 */ nop -/* 07AE48 7F048458 8E04008C */ lw $a0, 0x8c($s0) -/* 07AE4C 7F04845C AE020088 */ sw $v0, 0x88($s0) -/* 07AE50 7F048460 8FAF067C */ lw $t7, 0x67c($sp) -/* 07AE54 7F048464 0480000B */ bltz $a0, .L7F048494 -/* 07AE58 7F048468 24010001 */ li $at, 1 -/* 07AE5C 7F04846C 15E10009 */ bne $t7, $at, .L7F048494 -/* 07AE60 7F048470 240100FF */ li $at, 255 -/* 07AE64 7F048474 14410005 */ bne $v0, $at, .L7F04848C -/* 07AE68 7F048478 00000000 */ nop -/* 07AE6C 7F04847C 0FC2E416 */ jal bgToggleDataPortalsContrlBytes1Bit1 -/* 07AE70 7F048480 00002825 */ move $a1, $zero -/* 07AE74 7F048484 10000003 */ b .L7F048494 -/* 07AE78 7F048488 00000000 */ nop -.L7F04848C: -/* 07AE7C 7F04848C 0FC2E416 */ jal bgToggleDataPortalsContrlBytes1Bit1 -/* 07AE80 7F048490 24050001 */ li $a1, 1 -.L7F048494: -/* 07AE84 7F048494 1000003B */ b .L7F048584 -/* 07AE88 7F048498 AFA00678 */ sw $zero, 0x678($sp) -/* 07AE8C 7F04849C 24010001 */ li $at, 1 -.L7F0484A0: -/* 07AE90 7F0484A0 54410039 */ bnel $v0, $at, .L7F048588 -/* 07AE94 7F0484A4 92290003 */ lbu $t1, 3($s1) -/* 07AE98 7F0484A8 96290098 */ lhu $t1, 0x98($s1) -/* 07AE9C 7F0484AC 31280002 */ andi $t0, $t1, 2 -/* 07AEA0 7F0484B0 51000035 */ beql $t0, $zero, .L7F048588 -/* 07AEA4 7F0484B4 92290003 */ lbu $t1, 3($s1) -/* 07AEA8 7F0484B8 8E700004 */ lw $s0, 4($s3) -/* 07AEAC 7F0484BC 4407B000 */ mfc1 $a3, $f22 -/* 07AEB0 7F0484C0 24120001 */ li $s2, 1 -/* 07AEB4 7F0484C4 8E0A00C0 */ lw $t2, 0xc0($s0) -/* 07AEB8 7F0484C8 8E0B00C4 */ lw $t3, 0xc4($s0) -/* 07AEBC 7F0484CC 26240058 */ addiu $a0, $s1, 0x58 -/* 07AEC0 7F0484D0 448A4000 */ mtc1 $t2, $f8 -/* 07AEC4 7F0484D4 448B2000 */ mtc1 $t3, $f4 -/* 07AEC8 7F0484D8 46804220 */ cvt.s.w $f8, $f8 -/* 07AECC 7F0484DC 46802120 */ cvt.s.w $f4, $f4 -/* 07AED0 7F0484E0 44054000 */ mfc1 $a1, $f8 -/* 07AED4 7F0484E4 44062000 */ mfc1 $a2, $f4 -/* 07AED8 7F0484E8 0FC114DC */ jal glassCalculateOpacity -/* 07AEDC 7F0484EC 00000000 */ nop -/* 07AEE0 7F0484F0 A60200BE */ sh $v0, 0xbe($s0) -/* 07AEE4 7F0484F4 8FAC067C */ lw $t4, 0x67c($sp) -/* 07AEE8 7F0484F8 24010001 */ li $at, 1 -/* 07AEEC 7F0484FC 55810022 */ bnel $t4, $at, .L7F048588 -/* 07AEF0 7F048500 92290003 */ lbu $t1, 3($s1) -/* 07AEF4 7F048504 860D00BE */ lh $t5, 0xbe($s0) -/* 07AEF8 7F048508 240100FF */ li $at, 255 -/* 07AEFC 7F04850C 55A10007 */ bnel $t5, $at, .L7F04852C -/* 07AF00 7F048510 00009025 */ move $s2, $zero -/* 07AF04 7F048514 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 07AF08 7F048518 4606B03C */ c.lt.s $f22, $f6 -/* 07AF0C 7F04851C 00000000 */ nop -/* 07AF10 7F048520 45020003 */ bc1fl .L7F048530 -/* 07AF14 7F048524 8E820008 */ lw $v0, 8($s4) -/* 07AF18 7F048528 00009025 */ move $s2, $zero -.L7F04852C: -/* 07AF1C 7F04852C 8E820008 */ lw $v0, 8($s4) -.L7F048530: -/* 07AF20 7F048530 3C0E8003 */ lui $t6, %hi(skeleton_door) # $t6, 0x8003 -/* 07AF24 7F048534 25CE4D3C */ addiu $t6, %lo(skeleton_door) # addiu $t6, $t6, 0x4d3c -/* 07AF28 7F048538 8C580004 */ lw $t8, 4($v0) -/* 07AF2C 7F04853C 15D80009 */ bne $t6, $t8, .L7F048564 -/* 07AF30 7F048540 00000000 */ nop -/* 07AF34 7F048544 8C4F0008 */ lw $t7, 8($v0) -/* 07AF38 7F048548 02802025 */ move $a0, $s4 -/* 07AF3C 7F04854C 0FC1B3A3 */ jal modelGetNodeRwData -/* 07AF40 7F048550 8DE50004 */ lw $a1, 4($t7) -/* 07AF44 7F048554 8C590000 */ lw $t9, ($v0) -/* 07AF48 7F048558 17200002 */ bnez $t9, .L7F048564 -/* 07AF4C 7F04855C 00000000 */ nop -/* 07AF50 7F048560 00009025 */ move $s2, $zero -.L7F048564: -/* 07AF54 7F048564 12400005 */ beqz $s2, .L7F04857C -/* 07AF58 7F048568 00000000 */ nop -/* 07AF5C 7F04856C 0FC14E29 */ jal doorDeactivatePortal -/* 07AF60 7F048570 02002025 */ move $a0, $s0 -/* 07AF64 7F048574 10000004 */ b .L7F048588 -/* 07AF68 7F048578 92290003 */ lbu $t1, 3($s1) -.L7F04857C: -/* 07AF6C 7F04857C 0FC14E1E */ jal doorActivatePortal -/* 07AF70 7F048580 02002025 */ move $a0, $s0 -.L7F048584: -/* 07AF74 7F048584 92290003 */ lbu $t1, 3($s1) -.L7F048588: -/* 07AF78 7F048588 2401002D */ li $at, 45 -/* 07AF7C 7F04858C 55210008 */ bnel $t1, $at, .L7F0485B0 -/* 07AF80 7F048590 8E23000C */ lw $v1, 0xc($s1) -/* 07AF84 7F048594 0FC1F3D6 */ jal get_ptr_for_players_tank -/* 07AF88 7F048598 00000000 */ nop -/* 07AF8C 7F04859C 54530004 */ bnel $v0, $s3, .L7F0485B0 -/* 07AF90 7F0485A0 8E23000C */ lw $v1, 0xc($s1) -/* 07AF94 7F0485A4 10000018 */ b .L7F048608 -/* 07AF98 7F0485A8 24030001 */ li $v1, 1 -/* 07AF9C 7F0485AC 8E23000C */ lw $v1, 0xc($s1) -.L7F0485B0: -/* 07AFA0 7F0485B0 00034140 */ sll $t0, $v1, 5 -/* 07AFA4 7F0485B4 05030004 */ bgezl $t0, .L7F0485C8 -/* 07AFA8 7F0485B8 8E2A0064 */ lw $t2, 0x64($s1) -/* 07AFAC 7F0485BC 10000012 */ b .L7F048608 -/* 07AFB0 7F0485C0 24030001 */ li $v1, 1 -/* 07AFB4 7F0485C4 8E2A0064 */ lw $t2, 0x64($s1) -.L7F0485C8: -/* 07AFB8 7F0485C8 00036300 */ sll $t4, $v1, 0xc -/* 07AFBC 7F0485CC 00001825 */ move $v1, $zero -/* 07AFC0 7F0485D0 314B0800 */ andi $t3, $t2, 0x800 -/* 07AFC4 7F0485D4 1560000C */ bnez $t3, .L7F048608 -/* 07AFC8 7F0485D8 00000000 */ nop -/* 07AFCC 7F0485DC 0580000A */ bltz $t4, .L7F048608 -/* 07AFD0 7F0485E0 02802025 */ move $a0, $s4 -/* 07AFD4 7F0485E4 0FC1B525 */ jal getinstsize -/* 07AFD8 7F0485E8 26300058 */ addiu $s0, $s1, 0x58 -/* 07AFDC 7F0485EC 44060000 */ mfc1 $a2, $f0 -/* 07AFE0 7F0485F0 02602025 */ move $a0, $s3 -/* 07AFE4 7F0485F4 02002825 */ move $a1, $s0 -/* 07AFE8 7F0485F8 0FC15413 */ jal sub_GAME_7F054D6C -/* 07AFEC 7F0485FC 8FA70678 */ lw $a3, 0x678($sp) -/* 07AFF0 7F048600 10000001 */ b .L7F048608 -/* 07AFF4 7F048604 00401825 */ move $v1, $v0 -.L7F048608: -/* 07AFF8 7F048608 1060037A */ beqz $v1, .L7F0493F4 -/* 07AFFC 7F04860C 8FAD0680 */ lw $t5, 0x680($sp) -/* 07B000 7F048610 11A00003 */ beqz $t5, .L7F048620 -/* 07B004 7F048614 26240078 */ addiu $a0, $s1, 0x78 -/* 07B008 7F048618 0FC100F4 */ jal update_color_shading -/* 07B00C 7F04861C 2625007C */ addiu $a1, $s1, 0x7c -.L7F048620: -/* 07B010 7F048620 926E0001 */ lbu $t6, 1($s3) -/* 07B014 7F048624 35D80002 */ ori $t8, $t6, 2 -/* 07B018 7F048628 A2780001 */ sb $t8, 1($s3) -/* 07B01C 7F04862C 8E8F0008 */ lw $t7, 8($s4) -/* 07B020 7F048630 85E4000E */ lh $a0, 0xe($t7) -/* 07B024 7F048634 0004C980 */ sll $t9, $a0, 6 -/* 07B028 7F048638 0FC2F2B1 */ jal dynAllocate -/* 07B02C 7F04863C 03202025 */ move $a0, $t9 -/* 07B030 7F048640 AE82000C */ sw $v0, 0xc($s4) -/* 07B034 7F048644 92290003 */ lbu $t1, 3($s1) -/* 07B038 7F048648 24010001 */ li $at, 1 -/* 07B03C 7F04864C 00409025 */ move $s2, $v0 -/* 07B040 7F048650 152100AD */ bne $t1, $at, .L7F048908 -/* 07B044 7F048654 26240018 */ addiu $a0, $s1, 0x18 -/* 07B048 7F048658 8E640004 */ lw $a0, 4($s3) -/* 07B04C 7F04865C 00402825 */ move $a1, $v0 -/* 07B050 7F048660 0FC14A73 */ jal door7F0526EC -/* 07B054 7F048664 AFA403A0 */ sw $a0, 0x3a0($sp) -/* 07B058 7F048668 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 07B05C 7F04866C 00000000 */ nop -/* 07B060 7F048670 00402025 */ move $a0, $v0 -/* 07B064 7F048674 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B068 7F048678 02402825 */ move $a1, $s2 -/* 07B06C 7F04867C 8E820008 */ lw $v0, 8($s4) -/* 07B070 7F048680 3C088003 */ lui $t0, %hi(skeleton_eyelid_door) # $t0, 0x8003 -/* 07B074 7F048684 25084C60 */ addiu $t0, %lo(skeleton_eyelid_door) # addiu $t0, $t0, 0x4c60 -/* 07B078 7F048688 8C430004 */ lw $v1, 4($v0) -/* 07B07C 7F04868C 3C188003 */ lui $t8, %hi(skeleton_iris_door) # $t8, 0x8003 -/* 07B080 7F048690 8FA603A0 */ lw $a2, 0x3a0($sp) -/* 07B084 7F048694 15030025 */ bne $t0, $v1, .L7F04872C -/* 07B088 7F048698 27184CBC */ addiu $t8, %lo(skeleton_iris_door) # addiu $t8, $t8, 0x4cbc -/* 07B08C 7F04869C C4CA00B4 */ lwc1 $f10, 0xb4($a2) -/* 07B090 7F0486A0 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07B094 7F0486A4 44812000 */ mtc1 $at, $f4 -/* 07B098 7F0486A8 46145202 */ mul.s $f8, $f10, $f20 -/* 07B09C 7F0486AC 8C4A0008 */ lw $t2, 8($v0) -/* 07B0A0 7F0486B0 26450040 */ addiu $a1, $s2, 0x40 -/* 07B0A4 7F0486B4 8D4B0004 */ lw $t3, 4($t2) -/* 07B0A8 7F0486B8 46044183 */ div.s $f6, $f8, $f4 -/* 07B0AC 7F0486BC 8D700004 */ lw $s0, 4($t3) -/* 07B0B0 7F0486C0 AFA50070 */ sw $a1, 0x70($sp) -/* 07B0B4 7F0486C4 4606A301 */ sub.s $f12, $f20, $f6 -/* 07B0B8 7F0486C8 0FC16286 */ jal matrix_4x4_set_rotation_around_x -/* 07B0BC 7F0486CC E7AC0398 */ swc1 $f12, 0x398($sp) -/* 07B0C0 7F0486D0 02002025 */ move $a0, $s0 -/* 07B0C4 7F0486D4 0FC16390 */ jal matrix_4x4_set_position -/* 07B0C8 7F0486D8 8FA50070 */ lw $a1, 0x70($sp) -/* 07B0CC 7F0486DC 02402025 */ move $a0, $s2 -/* 07B0D0 7F0486E0 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 07B0D4 7F0486E4 8FA50070 */ lw $a1, 0x70($sp) -/* 07B0D8 7F0486E8 8E8C0008 */ lw $t4, 8($s4) -/* 07B0DC 7F0486EC C7AA0398 */ lwc1 $f10, 0x398($sp) -/* 07B0E0 7F0486F0 26450080 */ addiu $a1, $s2, 0x80 -/* 07B0E4 7F0486F4 8D8D0008 */ lw $t5, 8($t4) -/* 07B0E8 7F0486F8 460AA301 */ sub.s $f12, $f20, $f10 -/* 07B0EC 7F0486FC 8DAE0008 */ lw $t6, 8($t5) -/* 07B0F0 7F048700 8DD00004 */ lw $s0, 4($t6) -/* 07B0F4 7F048704 0FC16286 */ jal matrix_4x4_set_rotation_around_x -/* 07B0F8 7F048708 AFA5006C */ sw $a1, 0x6c($sp) -/* 07B0FC 7F04870C 02002025 */ move $a0, $s0 -/* 07B100 7F048710 0FC16390 */ jal matrix_4x4_set_position -/* 07B104 7F048714 8FA5006C */ lw $a1, 0x6c($sp) -/* 07B108 7F048718 02402025 */ move $a0, $s2 -/* 07B10C 7F04871C 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 07B110 7F048720 8FA5006C */ lw $a1, 0x6c($sp) -/* 07B114 7F048724 1000031F */ b .L7F0493A4 -/* 07B118 7F048728 8E8F0008 */ lw $t7, 8($s4) -.L7F04872C: -/* 07B11C 7F04872C 5703031D */ bnel $t8, $v1, .L7F0493A4 -/* 07B120 7F048730 8E8F0008 */ lw $t7, 8($s4) -/* 07B124 7F048734 C4C200B4 */ lwc1 $f2, 0xb4($a2) -/* 07B128 7F048738 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07B12C 7F04873C 44812000 */ mtc1 $at, $f4 -/* 07B130 7F048740 46141202 */ mul.s $f8, $f2, $f20 -/* 07B134 7F048744 3C018005 */ lui $at, %hi(D_80052B68) # $at, 0x8005 -/* 07B138 7F048748 C42A8CA8 */ lwc1 $f10, %lo(D_80052B68)($at) -/* 07B13C 7F04874C 4600B386 */ mov.s $f14, $f22 -/* 07B140 7F048750 46044183 */ div.s $f6, $f8, $f4 -/* 07B144 7F048754 E7A60388 */ swc1 $f6, 0x388($sp) -/* 07B148 7F048758 C4CC0084 */ lwc1 $f12, 0x84($a2) -/* 07B14C 7F04875C 460A6002 */ mul.s $f0, $f12, $f10 -/* 07B150 7F048760 4602003C */ c.lt.s $f0, $f2 -/* 07B154 7F048764 00000000 */ nop -/* 07B158 7F048768 4502001F */ bc1fl .L7F0487E8 -/* 07B15C 7F04876C 8FA90680 */ lw $t1, 0x680($sp) -/* 07B160 7F048770 46001201 */ sub.s $f8, $f2, $f0 -/* 07B164 7F048774 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 07B168 7F048778 8FAF0680 */ lw $t7, 0x680($sp) -/* 07B16C 7F04877C 46006181 */ sub.s $f6, $f12, $f0 -/* 07B170 7F048780 46086102 */ mul.s $f4, $f12, $f8 -/* 07B174 7F048784 46062283 */ div.s $f10, $f4, $f6 -/* 07B178 7F048788 44812000 */ mtc1 $at, $f4 -/* 07B17C 7F04878C 46145202 */ mul.s $f8, $f10, $f20 -/* 07B180 7F048790 46044383 */ div.s $f14, $f8, $f4 -/* 07B184 7F048794 11E00011 */ beqz $t7, .L7F0487DC -/* 07B188 7F048798 E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07B18C 7F04879C C7A60684 */ lwc1 $f6, 0x684($sp) -/* 07B190 7F0487A0 E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07B194 7F0487A4 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 07B198 7F0487A8 4600303E */ c.le.s $f6, $f0 -/* 07B19C 7F0487AC 240500CA */ li $a1, 202 -/* 07B1A0 7F0487B0 00003025 */ move $a2, $zero -/* 07B1A4 7F0487B4 26790008 */ addiu $t9, $s3, 8 -/* 07B1A8 7F0487B8 45000008 */ bc1f .L7F0487DC -/* 07B1AC 7F0487BC 00000000 */ nop -/* 07B1B0 7F0487C0 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07B1B4 7F0487C4 AFB90074 */ sw $t9, 0x74($sp) -/* 07B1B8 7F0487C8 0C00209A */ jal sndPlaySfx -/* 07B1BC 7F0487CC E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07B1C0 7F0487D0 00402025 */ move $a0, $v0 -/* 07B1C4 7F0487D4 0FC14F3C */ jal chrobjSndCreatePostEventDefault -/* 07B1C8 7F0487D8 8FA50074 */ lw $a1, 0x74($sp) -.L7F0487DC: -/* 07B1CC 7F0487DC 10000016 */ b .L7F048838 -/* 07B1D0 7F0487E0 AFA00390 */ sw $zero, 0x390($sp) -/* 07B1D4 7F0487E4 8FA90680 */ lw $t1, 0x680($sp) -.L7F0487E8: -/* 07B1D8 7F0487E8 E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07B1DC 7F0487EC 51200012 */ beql $t1, $zero, .L7F048838 -/* 07B1E0 7F0487F0 AFA00390 */ sw $zero, 0x390($sp) -/* 07B1E4 7F0487F4 C7AA0684 */ lwc1 $f10, 0x684($sp) -/* 07B1E8 7F0487F8 E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07B1EC 7F0487FC 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 07B1F0 7F048800 460A003C */ c.lt.s $f0, $f10 -/* 07B1F4 7F048804 240500CB */ li $a1, 203 -/* 07B1F8 7F048808 00003025 */ move $a2, $zero -/* 07B1FC 7F04880C 26680008 */ addiu $t0, $s3, 8 -/* 07B200 7F048810 45020009 */ bc1fl .L7F048838 -/* 07B204 7F048814 AFA00390 */ sw $zero, 0x390($sp) -/* 07B208 7F048818 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07B20C 7F04881C AFA80074 */ sw $t0, 0x74($sp) -/* 07B210 7F048820 0C00209A */ jal sndPlaySfx -/* 07B214 7F048824 E7AE0384 */ swc1 $f14, 0x384($sp) -/* 07B218 7F048828 00402025 */ move $a0, $v0 -/* 07B21C 7F04882C 0FC14F3C */ jal chrobjSndCreatePostEventDefault -/* 07B220 7F048830 8FA50074 */ lw $a1, 0x74($sp) -/* 07B224 7F048834 AFA00390 */ sw $zero, 0x390($sp) -.L7F048838: -/* 07B228 7F048838 8E8A0008 */ lw $t2, 8($s4) -/* 07B22C 7F04883C 8FA30390 */ lw $v1, 0x390($sp) -/* 07B230 7F048840 C7AC0384 */ lwc1 $f12, 0x384($sp) -/* 07B234 7F048844 8D4B0008 */ lw $t3, 8($t2) -/* 07B238 7F048848 00031040 */ sll $v0, $v1, 1 -/* 07B23C 7F04884C 00026080 */ sll $t4, $v0, 2 -/* 07B240 7F048850 016C6821 */ addu $t5, $t3, $t4 -/* 07B244 7F048854 8DAE0004 */ lw $t6, 4($t5) -/* 07B248 7F048858 00027980 */ sll $t7, $v0, 6 -/* 07B24C 7F04885C 024F2821 */ addu $a1, $s2, $t7 -/* 07B250 7F048860 8DD80004 */ lw $t8, 4($t6) -/* 07B254 7F048864 AFA20078 */ sw $v0, 0x78($sp) -/* 07B258 7F048868 24A50040 */ addiu $a1, $a1, 0x40 -/* 07B25C 7F04886C 0FC162CC */ jal matrix_4x4_set_rotation_around_z -/* 07B260 7F048870 AFB80394 */ sw $t8, 0x394($sp) -/* 07B264 7F048874 8FB90078 */ lw $t9, 0x78($sp) -/* 07B268 7F048878 8FB00390 */ lw $s0, 0x390($sp) -/* 07B26C 7F04887C 8FA40394 */ lw $a0, 0x394($sp) -/* 07B270 7F048880 00194980 */ sll $t1, $t9, 6 -/* 07B274 7F048884 02492821 */ addu $a1, $s2, $t1 -/* 07B278 7F048888 24A50040 */ addiu $a1, $a1, 0x40 -/* 07B27C 7F04888C 0FC16390 */ jal matrix_4x4_set_position -/* 07B280 7F048890 AFA50074 */ sw $a1, 0x74($sp) -/* 07B284 7F048894 02402025 */ move $a0, $s2 -/* 07B288 7F048898 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 07B28C 7F04889C 8FA50074 */ lw $a1, 0x74($sp) -/* 07B290 7F0488A0 8E880008 */ lw $t0, 8($s4) -/* 07B294 7F0488A4 8FA20078 */ lw $v0, 0x78($sp) -/* 07B298 7F0488A8 C7AC0388 */ lwc1 $f12, 0x388($sp) -/* 07B29C 7F0488AC 8D0A0008 */ lw $t2, 8($t0) -/* 07B2A0 7F0488B0 24420002 */ addiu $v0, $v0, 2 -/* 07B2A4 7F0488B4 00025880 */ sll $t3, $v0, 2 -/* 07B2A8 7F0488B8 014B6021 */ addu $t4, $t2, $t3 -/* 07B2AC 7F0488BC 8D8D0000 */ lw $t5, ($t4) -/* 07B2B0 7F0488C0 0002C180 */ sll $t8, $v0, 6 -/* 07B2B4 7F0488C4 02582821 */ addu $a1, $s2, $t8 -/* 07B2B8 7F0488C8 8DAE0004 */ lw $t6, 4($t5) -/* 07B2BC 7F0488CC AFA50070 */ sw $a1, 0x70($sp) -/* 07B2C0 7F0488D0 0FC162CC */ jal matrix_4x4_set_rotation_around_z -/* 07B2C4 7F0488D4 AFAE0394 */ sw $t6, 0x394($sp) -/* 07B2C8 7F0488D8 8FA40394 */ lw $a0, 0x394($sp) -/* 07B2CC 7F0488DC 0FC16390 */ jal matrix_4x4_set_position -/* 07B2D0 7F0488E0 8FA50070 */ lw $a1, 0x70($sp) -/* 07B2D4 7F0488E4 8FA40074 */ lw $a0, 0x74($sp) -/* 07B2D8 7F0488E8 0FC16144 */ jal matrix_4x4_multiply_in_place -/* 07B2DC 7F0488EC 8FA50070 */ lw $a1, 0x70($sp) -/* 07B2E0 7F0488F0 26100001 */ addiu $s0, $s0, 1 -/* 07B2E4 7F0488F4 24010006 */ li $at, 6 -/* 07B2E8 7F0488F8 1601FFCF */ bne $s0, $at, .L7F048838 -/* 07B2EC 7F0488FC AFB00390 */ sw $s0, 0x390($sp) -/* 07B2F0 7F048900 100002A8 */ b .L7F0493A4 -/* 07B2F4 7F048904 8E8F0008 */ lw $t7, 8($s4) -.L7F048908: -/* 07B2F8 7F048908 27A503A8 */ addiu $a1, $sp, 0x3a8 -/* 07B2FC 7F04890C 0FC16132 */ jal matrix_4x4_copy -/* 07B300 7F048910 26300058 */ addiu $s0, $s1, 0x58 -/* 07B304 7F048914 02002025 */ move $a0, $s0 -/* 07B308 7F048918 0FC16390 */ jal matrix_4x4_set_position -/* 07B30C 7F04891C 27A503A8 */ addiu $a1, $sp, 0x3a8 -/* 07B310 7F048920 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 07B314 7F048924 00000000 */ nop -/* 07B318 7F048928 00402025 */ move $a0, $v0 -/* 07B31C 7F04892C 27A503A8 */ addiu $a1, $sp, 0x3a8 -/* 07B320 7F048930 0FC1618D */ jal matrix_4x4_multiply_homogeneous -/* 07B324 7F048934 02403025 */ move $a2, $s2 -/* 07B328 7F048938 92220003 */ lbu $v0, 3($s1) -/* 07B32C 7F04893C 24010006 */ li $at, 6 -/* 07B330 7F048940 27A50324 */ addiu $a1, $sp, 0x324 -/* 07B334 7F048944 5441002D */ bnel $v0, $at, .L7F0489FC -/* 07B338 7F048948 2401000D */ li $at, 13 -/* 07B33C 7F04894C 8E620004 */ lw $v0, 4($s3) -/* 07B340 7F048950 8E8F0008 */ lw $t7, 8($s4) -/* 07B344 7F048954 C44C00C8 */ lwc1 $f12, 0xc8($v0) -/* 07B348 7F048958 8DF90008 */ lw $t9, 8($t7) -/* 07B34C 7F04895C 4616603C */ c.lt.s $f12, $f22 -/* 07B350 7F048960 8F290000 */ lw $t1, ($t9) -/* 07B354 7F048964 45000003 */ bc1f .L7F048974 -/* 07B358 7F048968 8D300004 */ lw $s0, 4($t1) -/* 07B35C 7F04896C 10000006 */ b .L7F048988 -/* 07B360 7F048970 46146300 */ add.s $f12, $f12, $f20 -.L7F048974: -/* 07B364 7F048974 460CA03E */ c.le.s $f20, $f12 -/* 07B368 7F048978 00000000 */ nop -/* 07B36C 7F04897C 45000002 */ bc1f .L7F048988 -/* 07B370 7F048980 00000000 */ nop -/* 07B374 7F048984 46146301 */ sub.s $f12, $f12, $f20 -.L7F048988: -/* 07B378 7F048988 0FC162A9 */ jal matrix_4x4_set_rotation_around_y -/* 07B37C 7F04898C AFA20374 */ sw $v0, 0x374($sp) -/* 07B380 7F048990 8FA20374 */ lw $v0, 0x374($sp) -/* 07B384 7F048994 26460040 */ addiu $a2, $s2, 0x40 -/* 07B388 7F048998 AFA60070 */ sw $a2, 0x70($sp) -/* 07B38C 7F04899C 27A40324 */ addiu $a0, $sp, 0x324 -/* 07B390 7F0489A0 0FC1615C */ jal matrix_4x4_multiply -/* 07B394 7F0489A4 24450084 */ addiu $a1, $v0, 0x84 -/* 07B398 7F0489A8 C6080000 */ lwc1 $f8, ($s0) -/* 07B39C 7F0489AC 27B20364 */ addiu $s2, $sp, 0x364 -/* 07B3A0 7F0489B0 02402825 */ move $a1, $s2 -/* 07B3A4 7F0489B4 E7A80364 */ swc1 $f8, 0x364($sp) -/* 07B3A8 7F0489B8 C6040004 */ lwc1 $f4, 4($s0) -/* 07B3AC 7F0489BC 27A403A8 */ addiu $a0, $sp, 0x3a8 -/* 07B3B0 7F0489C0 E7A40368 */ swc1 $f4, 0x368($sp) -/* 07B3B4 7F0489C4 C6060008 */ lwc1 $f6, 8($s0) -/* 07B3B8 7F0489C8 0FC16247 */ jal mtx4TransformVecInPlace -/* 07B3BC 7F0489CC E7A6036C */ swc1 $f6, 0x36c($sp) -/* 07B3C0 7F0489D0 02402025 */ move $a0, $s2 -/* 07B3C4 7F0489D4 0FC16390 */ jal matrix_4x4_set_position -/* 07B3C8 7F0489D8 8FA50070 */ lw $a1, 0x70($sp) -/* 07B3CC 7F0489DC 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 07B3D0 7F0489E0 00000000 */ nop -/* 07B3D4 7F0489E4 00402025 */ move $a0, $v0 -/* 07B3D8 7F0489E8 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B3DC 7F0489EC 8FA50070 */ lw $a1, 0x70($sp) -/* 07B3E0 7F0489F0 1000026C */ b .L7F0493A4 -/* 07B3E4 7F0489F4 8E8F0008 */ lw $t7, 8($s4) -/* 07B3E8 7F0489F8 2401000D */ li $at, 13 -.L7F0489FC: -/* 07B3EC 7F0489FC 5441007F */ bnel $v0, $at, .L7F048BFC -/* 07B3F0 7F048A00 24010008 */ li $at, 8 -/* 07B3F4 7F048A04 8E620004 */ lw $v0, 4($s3) -/* 07B3F8 7F048A08 3C018005 */ lui $at, %hi(D_80052B6C) # $at, 0x8005 -/* 07B3FC 7F048A0C C4288CAC */ lwc1 $f8, %lo(D_80052B6C)($at) -/* 07B400 7F048A10 C44A0090 */ lwc1 $f10, 0x90($v0) -/* 07B404 7F048A14 C444009C */ lwc1 $f4, 0x9c($v0) -/* 07B408 7F048A18 46085300 */ add.s $f12, $f10, $f8 -/* 07B40C 7F048A1C 46002187 */ neg.s $f6, $f4 -/* 07B410 7F048A20 460CA03E */ c.le.s $f20, $f12 -/* 07B414 7F048A24 E7A60304 */ swc1 $f6, 0x304($sp) -/* 07B418 7F048A28 45020003 */ bc1fl .L7F048A38 -/* 07B41C 7F048A2C 8E880008 */ lw $t0, 8($s4) -/* 07B420 7F048A30 46146301 */ sub.s $f12, $f12, $f20 -/* 07B424 7F048A34 8E880008 */ lw $t0, 8($s4) -.L7F048A38: -/* 07B428 7F048A38 27A403A8 */ addiu $a0, $sp, 0x3a8 -/* 07B42C 7F048A3C 27A5030C */ addiu $a1, $sp, 0x30c -/* 07B430 7F048A40 8D0A0008 */ lw $t2, 8($t0) -/* 07B434 7F048A44 8D4B0004 */ lw $t3, 4($t2) -/* 07B438 7F048A48 8D700004 */ lw $s0, 4($t3) -/* 07B43C 7F048A4C C60A0000 */ lwc1 $f10, ($s0) -/* 07B440 7F048A50 E7AA030C */ swc1 $f10, 0x30c($sp) -/* 07B444 7F048A54 C6080004 */ lwc1 $f8, 4($s0) -/* 07B448 7F048A58 E7A80310 */ swc1 $f8, 0x310($sp) -/* 07B44C 7F048A5C C6040008 */ lwc1 $f4, 8($s0) -/* 07B450 7F048A60 E7AC0308 */ swc1 $f12, 0x308($sp) -/* 07B454 7F048A64 AFA2031C */ sw $v0, 0x31c($sp) -/* 07B458 7F048A68 0FC16247 */ jal mtx4TransformVecInPlace -/* 07B45C 7F048A6C E7A40314 */ swc1 $f4, 0x314($sp) -/* 07B460 7F048A70 26450040 */ addiu $a1, $s2, 0x40 -/* 07B464 7F048A74 C7AC0308 */ lwc1 $f12, 0x308($sp) -/* 07B468 7F048A78 0FC162A9 */ jal matrix_4x4_set_rotation_around_y -/* 07B46C 7F048A7C AFA50070 */ sw $a1, 0x70($sp) -/* 07B470 7F048A80 27A4030C */ addiu $a0, $sp, 0x30c -/* 07B474 7F048A84 0FC16390 */ jal matrix_4x4_set_position -/* 07B478 7F048A88 8FA50070 */ lw $a1, 0x70($sp) -/* 07B47C 7F048A8C 8FAC031C */ lw $t4, 0x31c($sp) -/* 07B480 7F048A90 8FA50070 */ lw $a1, 0x70($sp) -/* 07B484 7F048A94 8D8D0014 */ lw $t5, 0x14($t4) -/* 07B488 7F048A98 0FC163C9 */ jal matrix_scalar_multiply -/* 07B48C 7F048A9C C5AC0014 */ lwc1 $f12, 0x14($t5) -/* 07B490 7F048AA0 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 07B494 7F048AA4 00000000 */ nop -/* 07B498 7F048AA8 00402025 */ move $a0, $v0 -/* 07B49C 7F048AAC 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B4A0 7F048AB0 8FA50070 */ lw $a1, 0x70($sp) -/* 07B4A4 7F048AB4 8E8E0008 */ lw $t6, 8($s4) -/* 07B4A8 7F048AB8 26450080 */ addiu $a1, $s2, 0x80 -/* 07B4AC 7F048ABC C7AC0304 */ lwc1 $f12, 0x304($sp) -/* 07B4B0 7F048AC0 8DD80008 */ lw $t8, 8($t6) -/* 07B4B4 7F048AC4 8F0F0008 */ lw $t7, 8($t8) -/* 07B4B8 7F048AC8 8DF00004 */ lw $s0, 4($t7) -/* 07B4BC 7F048ACC 0FC162CC */ jal matrix_4x4_set_rotation_around_z -/* 07B4C0 7F048AD0 AFA5006C */ sw $a1, 0x6c($sp) -/* 07B4C4 7F048AD4 02002025 */ move $a0, $s0 -/* 07B4C8 7F048AD8 0FC16390 */ jal matrix_4x4_set_position -/* 07B4CC 7F048ADC 8FA5006C */ lw $a1, 0x6c($sp) -/* 07B4D0 7F048AE0 8FA40070 */ lw $a0, 0x70($sp) -/* 07B4D4 7F048AE4 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B4D8 7F048AE8 8FA5006C */ lw $a1, 0x6c($sp) -/* 07B4DC 7F048AEC 8E990008 */ lw $t9, 8($s4) -/* 07B4E0 7F048AF0 02802025 */ move $a0, $s4 -/* 07B4E4 7F048AF4 8F230008 */ lw $v1, 8($t9) -/* 07B4E8 7F048AF8 8C65000C */ lw $a1, 0xc($v1) -/* 07B4EC 7F048AFC 50A00016 */ beql $a1, $zero, .L7F048B58 -/* 07B4F0 7F048B00 8C650010 */ lw $a1, 0x10($v1) -/* 07B4F4 7F048B04 0FC1B366 */ jal modelFindNodeMtx -/* 07B4F8 7F048B08 00003025 */ move $a2, $zero -/* 07B4FC 7F048B0C AFA20300 */ sw $v0, 0x300($sp) -/* 07B500 7F048B10 8E890008 */ lw $t1, 8($s4) -/* 07B504 7F048B14 8FAB031C */ lw $t3, 0x31c($sp) -/* 07B508 7F048B18 00402825 */ move $a1, $v0 -/* 07B50C 7F048B1C 8D280008 */ lw $t0, 8($t1) -/* 07B510 7F048B20 C56C00B4 */ lwc1 $f12, 0xb4($t3) -/* 07B514 7F048B24 8D0A000C */ lw $t2, 0xc($t0) -/* 07B518 7F048B28 0FC16286 */ jal matrix_4x4_set_rotation_around_x -/* 07B51C 7F048B2C 8D500004 */ lw $s0, 4($t2) -/* 07B520 7F048B30 8FB20300 */ lw $s2, 0x300($sp) -/* 07B524 7F048B34 02002025 */ move $a0, $s0 -/* 07B528 7F048B38 0FC16390 */ jal matrix_4x4_set_position -/* 07B52C 7F048B3C 02402825 */ move $a1, $s2 -/* 07B530 7F048B40 8FA4006C */ lw $a0, 0x6c($sp) -/* 07B534 7F048B44 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B538 7F048B48 02402825 */ move $a1, $s2 -/* 07B53C 7F048B4C 8E8C0008 */ lw $t4, 8($s4) -/* 07B540 7F048B50 8D830008 */ lw $v1, 8($t4) -/* 07B544 7F048B54 8C650010 */ lw $a1, 0x10($v1) -.L7F048B58: -/* 07B548 7F048B58 02802025 */ move $a0, $s4 -/* 07B54C 7F048B5C 50A00010 */ beql $a1, $zero, .L7F048BA0 -/* 07B550 7F048B60 8C650018 */ lw $a1, 0x18($v1) -/* 07B554 7F048B64 0FC1B366 */ jal modelFindNodeMtx -/* 07B558 7F048B68 00003025 */ move $a2, $zero -/* 07B55C 7F048B6C 8E8D0008 */ lw $t5, 8($s4) -/* 07B560 7F048B70 00409025 */ move $s2, $v0 -/* 07B564 7F048B74 00402825 */ move $a1, $v0 -/* 07B568 7F048B78 8DAE0008 */ lw $t6, 8($t5) -/* 07B56C 7F048B7C 8DD80010 */ lw $t8, 0x10($t6) -/* 07B570 7F048B80 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 07B574 7F048B84 8F040004 */ lw $a0, 4($t8) -/* 07B578 7F048B88 8FA4006C */ lw $a0, 0x6c($sp) -/* 07B57C 7F048B8C 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B580 7F048B90 02402825 */ move $a1, $s2 -/* 07B584 7F048B94 8E8F0008 */ lw $t7, 8($s4) -/* 07B588 7F048B98 8DE30008 */ lw $v1, 8($t7) -/* 07B58C 7F048B9C 8C650018 */ lw $a1, 0x18($v1) -.L7F048BA0: -/* 07B590 7F048BA0 02802025 */ move $a0, $s4 -/* 07B594 7F048BA4 50A001FF */ beql $a1, $zero, .L7F0493A4 -/* 07B598 7F048BA8 8E8F0008 */ lw $t7, 8($s4) -/* 07B59C 7F048BAC 0FC1B366 */ jal modelFindNodeMtx -/* 07B5A0 7F048BB0 00003025 */ move $a2, $zero -/* 07B5A4 7F048BB4 8E990008 */ lw $t9, 8($s4) -/* 07B5A8 7F048BB8 8FAA031C */ lw $t2, 0x31c($sp) -/* 07B5AC 7F048BBC 00409025 */ move $s2, $v0 -/* 07B5B0 7F048BC0 8F290008 */ lw $t1, 8($t9) -/* 07B5B4 7F048BC4 00402825 */ move $a1, $v0 -/* 07B5B8 7F048BC8 C54C00B4 */ lwc1 $f12, 0xb4($t2) -/* 07B5BC 7F048BCC 8D280018 */ lw $t0, 0x18($t1) -/* 07B5C0 7F048BD0 0FC16286 */ jal matrix_4x4_set_rotation_around_x -/* 07B5C4 7F048BD4 8D100004 */ lw $s0, 4($t0) -/* 07B5C8 7F048BD8 02002025 */ move $a0, $s0 -/* 07B5CC 7F048BDC 0FC16390 */ jal matrix_4x4_set_position -/* 07B5D0 7F048BE0 02402825 */ move $a1, $s2 -/* 07B5D4 7F048BE4 8FA4006C */ lw $a0, 0x6c($sp) -/* 07B5D8 7F048BE8 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B5DC 7F048BEC 02402825 */ move $a1, $s2 -/* 07B5E0 7F048BF0 100001EC */ b .L7F0493A4 -/* 07B5E4 7F048BF4 8E8F0008 */ lw $t7, 8($s4) -/* 07B5E8 7F048BF8 24010008 */ li $at, 8 -.L7F048BFC: -/* 07B5EC 7F048BFC 54410017 */ bnel $v0, $at, .L7F048C5C -/* 07B5F0 7F048C00 2401000C */ li $at, 12 -/* 07B5F4 7F048C04 8E8B0008 */ lw $t3, 8($s4) -/* 07B5F8 7F048C08 24020001 */ li $v0, 1 -/* 07B5FC 7F048C0C 26440040 */ addiu $a0, $s2, 0x40 -/* 07B600 7F048C10 856C000E */ lh $t4, 0xe($t3) -/* 07B604 7F048C14 29810002 */ slti $at, $t4, 2 -/* 07B608 7F048C18 542001E2 */ bnezl $at, .L7F0493A4 -/* 07B60C 7F048C1C 8E8F0008 */ lw $t7, 8($s4) -/* 07B610 7F048C20 AFA202FC */ sw $v0, 0x2fc($sp) -.L7F048C24: -/* 07B614 7F048C24 0FC1611E */ jal matrix_4x4_set_identity -/* 07B618 7F048C28 AFA40078 */ sw $a0, 0x78($sp) -/* 07B61C 7F048C2C 8E8D0008 */ lw $t5, 8($s4) -/* 07B620 7F048C30 8FA202FC */ lw $v0, 0x2fc($sp) -/* 07B624 7F048C34 8FA40078 */ lw $a0, 0x78($sp) -/* 07B628 7F048C38 85AE000E */ lh $t6, 0xe($t5) -/* 07B62C 7F048C3C 24420001 */ addiu $v0, $v0, 1 -/* 07B630 7F048C40 24840040 */ addiu $a0, $a0, 0x40 -/* 07B634 7F048C44 004E082A */ slt $at, $v0, $t6 -/* 07B638 7F048C48 5420FFF6 */ bnezl $at, .L7F048C24 -/* 07B63C 7F048C4C AFA202FC */ sw $v0, 0x2fc($sp) -/* 07B640 7F048C50 100001D4 */ b .L7F0493A4 -/* 07B644 7F048C54 8E8F0008 */ lw $t7, 8($s4) -/* 07B648 7F048C58 2401000C */ li $at, 12 -.L7F048C5C: -/* 07B64C 7F048C5C 5441002C */ bnel $v0, $at, .L7F048D10 -/* 07B650 7F048C60 24010027 */ li $at, 39 -/* 07B654 7F048C64 8E980008 */ lw $t8, 8($s4) -/* 07B658 7F048C68 26450040 */ addiu $a1, $s2, 0x40 -/* 07B65C 7F048C6C 8F0F0008 */ lw $t7, 8($t8) -/* 07B660 7F048C70 8DF90000 */ lw $t9, ($t7) -/* 07B664 7F048C74 8F240004 */ lw $a0, 4($t9) -/* 07B668 7F048C78 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 07B66C 7F048C7C AFA50070 */ sw $a1, 0x70($sp) -/* 07B670 7F048C80 02402025 */ move $a0, $s2 -/* 07B674 7F048C84 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B678 7F048C88 8FA50070 */ lw $a1, 0x70($sp) -/* 07B67C 7F048C8C 8E890008 */ lw $t1, 8($s4) -/* 07B680 7F048C90 26450080 */ addiu $a1, $s2, 0x80 -/* 07B684 7F048C94 8D280008 */ lw $t0, 8($t1) -/* 07B688 7F048C98 8D0A0004 */ lw $t2, 4($t0) -/* 07B68C 7F048C9C 8D440004 */ lw $a0, 4($t2) -/* 07B690 7F048CA0 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 07B694 7F048CA4 AFA5006C */ sw $a1, 0x6c($sp) -/* 07B698 7F048CA8 02402025 */ move $a0, $s2 -/* 07B69C 7F048CAC 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B6A0 7F048CB0 8FA5006C */ lw $a1, 0x6c($sp) -/* 07B6A4 7F048CB4 8E8B0008 */ lw $t3, 8($s4) -/* 07B6A8 7F048CB8 264500C0 */ addiu $a1, $s2, 0xc0 -/* 07B6AC 7F048CBC 8D6C0008 */ lw $t4, 8($t3) -/* 07B6B0 7F048CC0 8D8D0008 */ lw $t5, 8($t4) -/* 07B6B4 7F048CC4 8DA40004 */ lw $a0, 4($t5) -/* 07B6B8 7F048CC8 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 07B6BC 7F048CCC AFA50078 */ sw $a1, 0x78($sp) -/* 07B6C0 7F048CD0 02402025 */ move $a0, $s2 -/* 07B6C4 7F048CD4 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B6C8 7F048CD8 8FA50078 */ lw $a1, 0x78($sp) -/* 07B6CC 7F048CDC 8E8E0008 */ lw $t6, 8($s4) -/* 07B6D0 7F048CE0 26500100 */ addiu $s0, $s2, 0x100 -/* 07B6D4 7F048CE4 02002825 */ move $a1, $s0 -/* 07B6D8 7F048CE8 8DD80008 */ lw $t8, 8($t6) -/* 07B6DC 7F048CEC 8F0F000C */ lw $t7, 0xc($t8) -/* 07B6E0 7F048CF0 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 07B6E4 7F048CF4 8DE40004 */ lw $a0, 4($t7) -/* 07B6E8 7F048CF8 02402025 */ move $a0, $s2 -/* 07B6EC 7F048CFC 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B6F0 7F048D00 02002825 */ move $a1, $s0 -/* 07B6F4 7F048D04 100001A7 */ b .L7F0493A4 -/* 07B6F8 7F048D08 8E8F0008 */ lw $t7, 8($s4) -/* 07B6FC 7F048D0C 24010027 */ li $at, 39 -.L7F048D10: -/* 07B700 7F048D10 544100B9 */ bnel $v0, $at, .L7F048FF8 -/* 07B704 7F048D14 24010028 */ li $at, 40 -/* 07B708 7F048D18 8E990008 */ lw $t9, 8($s4) -/* 07B70C 7F048D1C 8FAF0680 */ lw $t7, 0x680($sp) -/* 07B710 7F048D20 4600B006 */ mov.s $f0, $f22 -/* 07B714 7F048D24 8F230008 */ lw $v1, 8($t9) -/* 07B718 7F048D28 8C690004 */ lw $t1, 4($v1) -/* 07B71C 7F048D2C 8D280004 */ lw $t0, 4($t1) -/* 07B720 7F048D30 AFA80264 */ sw $t0, 0x264($sp) -/* 07B724 7F048D34 8C6A0008 */ lw $t2, 8($v1) -/* 07B728 7F048D38 8D4B0004 */ lw $t3, 4($t2) -/* 07B72C 7F048D3C AFAB0260 */ sw $t3, 0x260($sp) -/* 07B730 7F048D40 8C6D0010 */ lw $t5, 0x10($v1) -/* 07B734 7F048D44 8C6C000C */ lw $t4, 0xc($v1) -/* 07B738 7F048D48 8DAE0004 */ lw $t6, 4($t5) -/* 07B73C 7F048D4C 8D900004 */ lw $s0, 4($t4) -/* 07B740 7F048D50 AFAE0258 */ sw $t6, 0x258($sp) -/* 07B744 7F048D54 8C780018 */ lw $t8, 0x18($v1) -/* 07B748 7F048D58 C6840014 */ lwc1 $f4, 0x14($s4) -/* 07B74C 7F048D5C 8F020004 */ lw $v0, 4($t8) -/* 07B750 7F048D60 C4460010 */ lwc1 $f6, 0x10($v0) -/* 07B754 7F048D64 C44A000C */ lwc1 $f10, 0xc($v0) -/* 07B758 7F048D68 460A3201 */ sub.s $f8, $f6, $f10 -/* 07B75C 7F048D6C 46044082 */ mul.s $f2, $f8, $f4 -/* 07B760 7F048D70 11E00026 */ beqz $t7, .L7F048E0C -/* 07B764 7F048D74 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07B768 7F048D78 C42A1004 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07B76C 7F048D7C C6260088 */ lwc1 $f6, 0x88($s1) -/* 07B770 7F048D80 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07B774 7F048D84 460A3202 */ mul.s $f8, $f6, $f10 -/* 07B778 7F048D88 44815000 */ mtc1 $at, $f10 -/* 07B77C 7F048D8C 46144102 */ mul.s $f4, $f8, $f20 -/* 07B780 7F048D90 00000000 */ nop -/* 07B784 7F048D94 46141182 */ mul.s $f6, $f2, $f20 -/* 07B788 7F048D98 00000000 */ nop -/* 07B78C 7F048D9C 460A3202 */ mul.s $f8, $f6, $f10 -/* 07B790 7F048DA0 C626008C */ lwc1 $f6, 0x8c($s1) -/* 07B794 7F048DA4 46082003 */ div.s $f0, $f4, $f8 -/* 07B798 7F048DA8 46003280 */ add.s $f10, $f6, $f0 -/* 07B79C 7F048DAC E62A008C */ swc1 $f10, 0x8c($s1) -/* 07B7A0 7F048DB0 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07B7A4 7F048DB4 460CA03E */ c.le.s $f20, $f12 -/* 07B7A8 7F048DB8 00000000 */ nop -/* 07B7AC 7F048DBC 45000008 */ bc1f .L7F048DE0 -/* 07B7B0 7F048DC0 00000000 */ nop -/* 07B7B4 7F048DC4 46146101 */ sub.s $f4, $f12, $f20 -.L7F048DC8: -/* 07B7B8 7F048DC8 E624008C */ swc1 $f4, 0x8c($s1) -/* 07B7BC 7F048DCC C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07B7C0 7F048DD0 460CA03E */ c.le.s $f20, $f12 -/* 07B7C4 7F048DD4 00000000 */ nop -/* 07B7C8 7F048DD8 4503FFFB */ bc1tl .L7F048DC8 -/* 07B7CC 7F048DDC 46146101 */ sub.s $f4, $f12, $f20 -.L7F048DE0: -/* 07B7D0 7F048DE0 4616603C */ c.lt.s $f12, $f22 -/* 07B7D4 7F048DE4 00000000 */ nop -/* 07B7D8 7F048DE8 45020009 */ bc1fl .L7F048E10 -/* 07B7DC 7F048DEC C626008C */ lwc1 $f6, 0x8c($s1) -/* 07B7E0 7F048DF0 46146200 */ add.s $f8, $f12, $f20 -.L7F048DF4: -/* 07B7E4 7F048DF4 E628008C */ swc1 $f8, 0x8c($s1) -/* 07B7E8 7F048DF8 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07B7EC 7F048DFC 4616603C */ c.lt.s $f12, $f22 -/* 07B7F0 7F048E00 00000000 */ nop -/* 07B7F4 7F048E04 4503FFFB */ bc1tl .L7F048DF4 -/* 07B7F8 7F048E08 46146200 */ add.s $f8, $f12, $f20 -.L7F048E0C: -/* 07B7FC 7F048E0C C626008C */ lwc1 $f6, 0x8c($s1) -.L7F048E10: -/* 07B800 7F048E10 46003280 */ add.s $f10, $f6, $f0 -/* 07B804 7F048E14 E62A008C */ swc1 $f10, 0x8c($s1) -/* 07B808 7F048E18 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07B80C 7F048E1C 460CA03E */ c.le.s $f20, $f12 -/* 07B810 7F048E20 00000000 */ nop -/* 07B814 7F048E24 45020009 */ bc1fl .L7F048E4C -/* 07B818 7F048E28 4616603C */ c.lt.s $f12, $f22 -/* 07B81C 7F048E2C 46146101 */ sub.s $f4, $f12, $f20 -.L7F048E30: -/* 07B820 7F048E30 E624008C */ swc1 $f4, 0x8c($s1) -/* 07B824 7F048E34 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07B828 7F048E38 460CA03E */ c.le.s $f20, $f12 -/* 07B82C 7F048E3C 00000000 */ nop -/* 07B830 7F048E40 4503FFFB */ bc1tl .L7F048E30 -/* 07B834 7F048E44 46146101 */ sub.s $f4, $f12, $f20 -/* 07B838 7F048E48 4616603C */ c.lt.s $f12, $f22 -.L7F048E4C: -/* 07B83C 7F048E4C 00000000 */ nop -/* 07B840 7F048E50 45000008 */ bc1f .L7F048E74 -/* 07B844 7F048E54 00000000 */ nop -/* 07B848 7F048E58 46146200 */ add.s $f8, $f12, $f20 -.L7F048E5C: -/* 07B84C 7F048E5C E628008C */ swc1 $f8, 0x8c($s1) -/* 07B850 7F048E60 C62C008C */ lwc1 $f12, 0x8c($s1) -/* 07B854 7F048E64 4616603C */ c.lt.s $f12, $f22 -/* 07B858 7F048E68 00000000 */ nop -/* 07B85C 7F048E6C 4503FFFB */ bc1tl .L7F048E5C -/* 07B860 7F048E70 46146200 */ add.s $f8, $f12, $f20 -.L7F048E74: -/* 07B864 7F048E74 0FC16286 */ jal matrix_4x4_set_rotation_around_x -/* 07B868 7F048E78 27A502B0 */ addiu $a1, $sp, 0x2b0 -/* 07B86C 7F048E7C C6260088 */ lwc1 $f6, 0x88($s1) -/* 07B870 7F048E80 4606B03C */ c.lt.s $f22, $f6 -/* 07B874 7F048E84 00000000 */ nop -/* 07B878 7F048E88 4502002B */ bc1fl .L7F048F38 -/* 07B87C 7F048E8C C62C0090 */ lwc1 $f12, 0x90($s1) -/* 07B880 7F048E90 8FB90264 */ lw $t9, 0x264($sp) -/* 07B884 7F048E94 C60A0008 */ lwc1 $f10, 8($s0) -/* 07B888 7F048E98 C62C009C */ lwc1 $f12, 0x9c($s1) -/* 07B88C 7F048E9C C7240008 */ lwc1 $f4, 8($t9) -/* 07B890 7F048EA0 C6860014 */ lwc1 $f6, 0x14($s4) -/* 07B894 7F048EA4 4616603C */ c.lt.s $f12, $f22 -/* 07B898 7F048EA8 46045201 */ sub.s $f8, $f10, $f4 -/* 07B89C 7F048EAC 46064082 */ mul.s $f2, $f8, $f6 -/* 07B8A0 7F048EB0 45020003 */ bc1fl .L7F048EC0 -/* 07B8A4 7F048EB4 E7A20254 */ swc1 $f2, 0x254($sp) -/* 07B8A8 7F048EB8 46006307 */ neg.s $f12, $f12 -/* 07B8AC 7F048EBC E7A20254 */ swc1 $f2, 0x254($sp) -.L7F048EC0: -/* 07B8B0 7F048EC0 0FC1606B */ jal sinf -/* 07B8B4 7F048EC4 E7AC0250 */ swc1 $f12, 0x250($sp) -/* 07B8B8 7F048EC8 C7A20254 */ lwc1 $f2, 0x254($sp) -/* 07B8BC 7F048ECC C7AC0250 */ lwc1 $f12, 0x250($sp) -/* 07B8C0 7F048ED0 46020282 */ mul.s $f10, $f0, $f2 -/* 07B8C4 7F048ED4 0FC16068 */ jal cosf -/* 07B8C8 7F048ED8 E7AA024C */ swc1 $f10, 0x24c($sp) -/* 07B8CC 7F048EDC C7A20254 */ lwc1 $f2, 0x254($sp) -/* 07B8D0 7F048EE0 C6280088 */ lwc1 $f8, 0x88($s1) -/* 07B8D4 7F048EE4 C7AC024C */ lwc1 $f12, 0x24c($sp) -/* 07B8D8 7F048EE8 46020102 */ mul.s $f4, $f0, $f2 -/* 07B8DC 7F048EEC 46081181 */ sub.s $f6, $f2, $f8 -/* 07B8E0 7F048EF0 0FC16BB8 */ jal atan2f -/* 07B8E4 7F048EF4 46062381 */ sub.s $f14, $f4, $f6 -/* 07B8E8 7F048EF8 C7A20250 */ lwc1 $f2, 0x250($sp) -/* 07B8EC 7F048EFC E6200090 */ swc1 $f0, 0x90($s1) -/* 07B8F0 7F048F00 4602003C */ c.lt.s $f0, $f2 -/* 07B8F4 7F048F04 00000000 */ nop -/* 07B8F8 7F048F08 45020003 */ bc1fl .L7F048F18 -/* 07B8FC 7F048F0C C62A009C */ lwc1 $f10, 0x9c($s1) -/* 07B900 7F048F10 E6220090 */ swc1 $f2, 0x90($s1) -/* 07B904 7F048F14 C62A009C */ lwc1 $f10, 0x9c($s1) -.L7F048F18: -/* 07B908 7F048F18 460AB03C */ c.lt.s $f22, $f10 -/* 07B90C 7F048F1C 00000000 */ nop -/* 07B910 7F048F20 45020005 */ bc1fl .L7F048F38 -/* 07B914 7F048F24 C62C0090 */ lwc1 $f12, 0x90($s1) -/* 07B918 7F048F28 C6280090 */ lwc1 $f8, 0x90($s1) -/* 07B91C 7F048F2C 4608A101 */ sub.s $f4, $f20, $f8 -/* 07B920 7F048F30 E6240090 */ swc1 $f4, 0x90($s1) -/* 07B924 7F048F34 C62C0090 */ lwc1 $f12, 0x90($s1) -.L7F048F38: -/* 07B928 7F048F38 0FC162A9 */ jal matrix_4x4_set_rotation_around_y -/* 07B92C 7F048F3C 27A50270 */ addiu $a1, $sp, 0x270 -/* 07B930 7F048F40 264500C0 */ addiu $a1, $s2, 0xc0 -/* 07B934 7F048F44 AFA50078 */ sw $a1, 0x78($sp) -/* 07B938 7F048F48 0FC16132 */ jal matrix_4x4_copy -/* 07B93C 7F048F4C 27A402B0 */ addiu $a0, $sp, 0x2b0 -/* 07B940 7F048F50 02002025 */ move $a0, $s0 -/* 07B944 7F048F54 0FC16390 */ jal matrix_4x4_set_position -/* 07B948 7F048F58 8FA50078 */ lw $a1, 0x78($sp) -/* 07B94C 7F048F5C 02402025 */ move $a0, $s2 -/* 07B950 7F048F60 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B954 7F048F64 8FA50078 */ lw $a1, 0x78($sp) -/* 07B958 7F048F68 26500100 */ addiu $s0, $s2, 0x100 -/* 07B95C 7F048F6C 02002825 */ move $a1, $s0 -/* 07B960 7F048F70 0FC16132 */ jal matrix_4x4_copy -/* 07B964 7F048F74 27A402B0 */ addiu $a0, $sp, 0x2b0 -/* 07B968 7F048F78 8FA40258 */ lw $a0, 0x258($sp) -/* 07B96C 7F048F7C 0FC16390 */ jal matrix_4x4_set_position -/* 07B970 7F048F80 02002825 */ move $a1, $s0 -/* 07B974 7F048F84 02402025 */ move $a0, $s2 -/* 07B978 7F048F88 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B97C 7F048F8C 02002825 */ move $a1, $s0 -/* 07B980 7F048F90 27A40270 */ addiu $a0, $sp, 0x270 -/* 07B984 7F048F94 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B988 7F048F98 27A502B0 */ addiu $a1, $sp, 0x2b0 -/* 07B98C 7F048F9C 26450040 */ addiu $a1, $s2, 0x40 -/* 07B990 7F048FA0 AFA50070 */ sw $a1, 0x70($sp) -/* 07B994 7F048FA4 0FC16132 */ jal matrix_4x4_copy -/* 07B998 7F048FA8 27A402B0 */ addiu $a0, $sp, 0x2b0 -/* 07B99C 7F048FAC 8FA40264 */ lw $a0, 0x264($sp) -/* 07B9A0 7F048FB0 0FC16390 */ jal matrix_4x4_set_position -/* 07B9A4 7F048FB4 8FA50070 */ lw $a1, 0x70($sp) -/* 07B9A8 7F048FB8 02402025 */ move $a0, $s2 -/* 07B9AC 7F048FBC 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B9B0 7F048FC0 8FA50070 */ lw $a1, 0x70($sp) -/* 07B9B4 7F048FC4 26450080 */ addiu $a1, $s2, 0x80 -/* 07B9B8 7F048FC8 AFA5006C */ sw $a1, 0x6c($sp) -/* 07B9BC 7F048FCC 0FC16132 */ jal matrix_4x4_copy -/* 07B9C0 7F048FD0 27A402B0 */ addiu $a0, $sp, 0x2b0 -/* 07B9C4 7F048FD4 8FA40260 */ lw $a0, 0x260($sp) -/* 07B9C8 7F048FD8 0FC16390 */ jal matrix_4x4_set_position -/* 07B9CC 7F048FDC 8FA5006C */ lw $a1, 0x6c($sp) -/* 07B9D0 7F048FE0 02402025 */ move $a0, $s2 -/* 07B9D4 7F048FE4 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07B9D8 7F048FE8 8FA5006C */ lw $a1, 0x6c($sp) -/* 07B9DC 7F048FEC 100000ED */ b .L7F0493A4 -/* 07B9E0 7F048FF0 8E8F0008 */ lw $t7, 8($s4) -/* 07B9E4 7F048FF4 24010028 */ li $at, 40 -.L7F048FF8: -/* 07B9E8 7F048FF8 54410087 */ bnel $v0, $at, .L7F049218 -/* 07B9EC 7F048FFC 2401002D */ li $at, 45 -/* 07B9F0 7F049000 8E890008 */ lw $t1, 8($s4) -/* 07B9F4 7F049004 3C0C8004 */ lui $t4, %hi(g_ClockTimer) # $t4, 0x8004 -/* 07B9F8 7F049008 8D8C0FF4 */ lw $t4, %lo(g_ClockTimer)($t4) -/* 07B9FC 7F04900C 8D280008 */ lw $t0, 8($t1) -/* 07BA00 7F049010 8FAD0680 */ lw $t5, 0x680($sp) -/* 07BA04 7F049014 27B001B4 */ addiu $s0, $sp, 0x1b4 -/* 07BA08 7F049018 8D0A0008 */ lw $t2, 8($t0) -/* 07BA0C 7F04901C 3C0F8003 */ lui $t7, %hi(D_80030B34) # $t7, 0x8003 -/* 07BA10 7F049020 02402025 */ move $a0, $s2 -/* 07BA14 7F049024 8D4B0004 */ lw $t3, 4($t2) -/* 07BA18 7F049028 26450040 */ addiu $a1, $s2, 0x40 -/* 07BA1C 7F04902C 1980001E */ blez $t4, .L7F0490A8 -/* 07BA20 7F049030 AFAB0200 */ sw $t3, 0x200($sp) -/* 07BA24 7F049034 51A0001D */ beql $t5, $zero, .L7F0490AC -/* 07BA28 7F049038 8E2E0014 */ lw $t6, 0x14($s1) -/* 07BA2C 7F04903C C6260088 */ lwc1 $f6, 0x88($s1) -/* 07BA30 7F049040 C62A008C */ lwc1 $f10, 0x8c($s1) -/* 07BA34 7F049044 460A3200 */ add.s $f8, $f6, $f10 -/* 07BA38 7F049048 E6280088 */ swc1 $f8, 0x88($s1) -/* 07BA3C 7F04904C C6200088 */ lwc1 $f0, 0x88($s1) -/* 07BA40 7F049050 4600A03E */ c.le.s $f20, $f0 -/* 07BA44 7F049054 00000000 */ nop -/* 07BA48 7F049058 45020009 */ bc1fl .L7F049080 -/* 07BA4C 7F04905C 4616003C */ c.lt.s $f0, $f22 -/* 07BA50 7F049060 46140101 */ sub.s $f4, $f0, $f20 -.L7F049064: -/* 07BA54 7F049064 E6240088 */ swc1 $f4, 0x88($s1) -/* 07BA58 7F049068 C6200088 */ lwc1 $f0, 0x88($s1) -/* 07BA5C 7F04906C 4600A03E */ c.le.s $f20, $f0 -/* 07BA60 7F049070 00000000 */ nop -/* 07BA64 7F049074 4503FFFB */ bc1tl .L7F049064 -/* 07BA68 7F049078 46140101 */ sub.s $f4, $f0, $f20 -/* 07BA6C 7F04907C 4616003C */ c.lt.s $f0, $f22 -.L7F049080: -/* 07BA70 7F049080 00000000 */ nop -/* 07BA74 7F049084 45020009 */ bc1fl .L7F0490AC -/* 07BA78 7F049088 8E2E0014 */ lw $t6, 0x14($s1) -/* 07BA7C 7F04908C 46140180 */ add.s $f6, $f0, $f20 -.L7F049090: -/* 07BA80 7F049090 E6260088 */ swc1 $f6, 0x88($s1) -/* 07BA84 7F049094 C6200088 */ lwc1 $f0, 0x88($s1) -/* 07BA88 7F049098 4616003C */ c.lt.s $f0, $f22 -/* 07BA8C 7F04909C 00000000 */ nop -/* 07BA90 7F0490A0 4503FFFB */ bc1tl .L7F049090 -/* 07BA94 7F0490A4 46140180 */ add.s $f6, $f0, $f20 -.L7F0490A8: -/* 07BA98 7F0490A8 8E2E0014 */ lw $t6, 0x14($s1) -.L7F0490AC: -/* 07BA9C 7F0490AC 25EFC084 */ addiu $t7, %lo(D_80030B34) # addiu $t7, $t7, -0x3f7c -/* 07BAA0 7F0490B0 25E9003C */ addiu $t1, $t7, 0x3c -/* 07BAA4 7F0490B4 8DD80020 */ lw $t8, 0x20($t6) -/* 07BAA8 7F0490B8 02004025 */ move $t0, $s0 -/* 07BAAC 7F0490BC 13000015 */ beqz $t8, .L7F049114 -/* 07BAB0 7F0490C0 00000000 */ nop -.L7F0490C4: -/* 07BAB4 7F0490C4 8DE10000 */ lw $at, ($t7) -/* 07BAB8 7F0490C8 25EF000C */ addiu $t7, $t7, 0xc -/* 07BABC 7F0490CC 2508000C */ addiu $t0, $t0, 0xc -/* 07BAC0 7F0490D0 AD01FFF4 */ sw $at, -0xc($t0) -/* 07BAC4 7F0490D4 8DE1FFF8 */ lw $at, -8($t7) -/* 07BAC8 7F0490D8 AD01FFF8 */ sw $at, -8($t0) -/* 07BACC 7F0490DC 8DE1FFFC */ lw $at, -4($t7) -/* 07BAD0 7F0490E0 15E9FFF8 */ bne $t7, $t1, .L7F0490C4 -/* 07BAD4 7F0490E4 AD01FFFC */ sw $at, -4($t0) -/* 07BAD8 7F0490E8 8DE10000 */ lw $at, ($t7) -/* 07BADC 7F0490EC 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 07BAE0 7F0490F0 AD010000 */ sw $at, ($t0) -/* 07BAE4 7F0490F4 AFA201B4 */ sw $v0, 0x1b4($sp) -/* 07BAE8 7F0490F8 AFB201C4 */ sw $s2, 0x1c4($sp) -/* 07BAEC 7F0490FC 8E250014 */ lw $a1, 0x14($s1) -/* 07BAF0 7F049100 0FC1BD9C */ jal subcalcmatrices -/* 07BAF4 7F049104 02002025 */ move $a0, $s0 -/* 07BAF8 7F049108 264A0040 */ addiu $t2, $s2, 0x40 -/* 07BAFC 7F04910C 10000003 */ b .L7F04911C -/* 07BB00 7F049110 AFAA0070 */ sw $t2, 0x70($sp) -.L7F049114: -/* 07BB04 7F049114 0FC16132 */ jal matrix_4x4_copy -/* 07BB08 7F049118 AFA50070 */ sw $a1, 0x70($sp) -.L7F04911C: -/* 07BB0C 7F04911C 8E2B0008 */ lw $t3, 8($s1) -/* 07BB10 7F049120 27A50204 */ addiu $a1, $sp, 0x204 -/* 07BB14 7F049124 000B6080 */ sll $t4, $t3, 2 -/* 07BB18 7F049128 05810006 */ bgez $t4, .L7F049144 -/* 07BB1C 7F04912C 00000000 */ nop -/* 07BB20 7F049130 C62C0088 */ lwc1 $f12, 0x88($s1) -/* 07BB24 7F049134 0FC162CC */ jal matrix_4x4_set_rotation_around_z -/* 07BB28 7F049138 27A50204 */ addiu $a1, $sp, 0x204 -/* 07BB2C 7F04913C 10000004 */ b .L7F049150 -/* 07BB30 7F049140 26450080 */ addiu $a1, $s2, 0x80 -.L7F049144: -/* 07BB34 7F049144 0FC162A9 */ jal matrix_4x4_set_rotation_around_y -/* 07BB38 7F049148 C62C0088 */ lwc1 $f12, 0x88($s1) -/* 07BB3C 7F04914C 26450080 */ addiu $a1, $s2, 0x80 -.L7F049150: -/* 07BB40 7F049150 AFA5006C */ sw $a1, 0x6c($sp) -/* 07BB44 7F049154 0FC16132 */ jal matrix_4x4_copy -/* 07BB48 7F049158 27A40204 */ addiu $a0, $sp, 0x204 -/* 07BB4C 7F04915C 8FA40200 */ lw $a0, 0x200($sp) -/* 07BB50 7F049160 0FC16390 */ jal matrix_4x4_set_position -/* 07BB54 7F049164 8FA5006C */ lw $a1, 0x6c($sp) -/* 07BB58 7F049168 8FA40070 */ lw $a0, 0x70($sp) -/* 07BB5C 7F04916C 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07BB60 7F049170 8FA5006C */ lw $a1, 0x6c($sp) -/* 07BB64 7F049174 8E8D0008 */ lw $t5, 8($s4) -/* 07BB68 7F049178 02802025 */ move $a0, $s4 -/* 07BB6C 7F04917C 00003025 */ move $a2, $zero -/* 07BB70 7F049180 8DA30008 */ lw $v1, 8($t5) -/* 07BB74 7F049184 8C65000C */ lw $a1, 0xc($v1) -/* 07BB78 7F049188 50A00013 */ beql $a1, $zero, .L7F0491D8 -/* 07BB7C 7F04918C 8C650010 */ lw $a1, 0x10($v1) -/* 07BB80 7F049190 0FC1B366 */ jal modelFindNodeMtx -/* 07BB84 7F049194 8CB20004 */ lw $s2, 4($a1) -/* 07BB88 7F049198 00408025 */ move $s0, $v0 -/* 07BB8C 7F04919C C62C0088 */ lwc1 $f12, 0x88($s1) -/* 07BB90 7F0491A0 0FC16286 */ jal matrix_4x4_set_rotation_around_x -/* 07BB94 7F0491A4 27A50204 */ addiu $a1, $sp, 0x204 -/* 07BB98 7F0491A8 27A40204 */ addiu $a0, $sp, 0x204 -/* 07BB9C 7F0491AC 0FC16132 */ jal matrix_4x4_copy -/* 07BBA0 7F0491B0 02002825 */ move $a1, $s0 -/* 07BBA4 7F0491B4 02402025 */ move $a0, $s2 -/* 07BBA8 7F0491B8 0FC16390 */ jal matrix_4x4_set_position -/* 07BBAC 7F0491BC 02002825 */ move $a1, $s0 -/* 07BBB0 7F0491C0 8FA40070 */ lw $a0, 0x70($sp) -/* 07BBB4 7F0491C4 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07BBB8 7F0491C8 02002825 */ move $a1, $s0 -/* 07BBBC 7F0491CC 8E8E0008 */ lw $t6, 8($s4) -/* 07BBC0 7F0491D0 8DC30008 */ lw $v1, 8($t6) -/* 07BBC4 7F0491D4 8C650010 */ lw $a1, 0x10($v1) -.L7F0491D8: -/* 07BBC8 7F0491D8 02802025 */ move $a0, $s4 -/* 07BBCC 7F0491DC 00003025 */ move $a2, $zero -/* 07BBD0 7F0491E0 50A00070 */ beql $a1, $zero, .L7F0493A4 -/* 07BBD4 7F0491E4 8E8F0008 */ lw $t7, 8($s4) -/* 07BBD8 7F0491E8 0FC1B366 */ jal modelFindNodeMtx -/* 07BBDC 7F0491EC 8CB20004 */ lw $s2, 4($a1) -/* 07BBE0 7F0491F0 00408025 */ move $s0, $v0 -/* 07BBE4 7F0491F4 02402025 */ move $a0, $s2 -/* 07BBE8 7F0491F8 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 07BBEC 7F0491FC 00402825 */ move $a1, $v0 -/* 07BBF0 7F049200 8FA40070 */ lw $a0, 0x70($sp) -/* 07BBF4 7F049204 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07BBF8 7F049208 02002825 */ move $a1, $s0 -/* 07BBFC 7F04920C 10000065 */ b .L7F0493A4 -/* 07BC00 7F049210 8E8F0008 */ lw $t7, 8($s4) -/* 07BC04 7F049214 2401002D */ li $at, 45 -.L7F049218: -/* 07BC08 7F049218 14410061 */ bne $v0, $at, .L7F0493A0 -/* 07BC0C 7F04921C 26450040 */ addiu $a1, $s2, 0x40 -/* 07BC10 7F049220 8E980008 */ lw $t8, 8($s4) -/* 07BC14 7F049224 8F030008 */ lw $v1, 8($t8) -/* 07BC18 7F049228 8C69000C */ lw $t1, 0xc($v1) -/* 07BC1C 7F04922C 8C790004 */ lw $t9, 4($v1) -/* 07BC20 7F049230 8D2F0004 */ lw $t7, 4($t1) -/* 07BC24 7F049234 8F300004 */ lw $s0, 4($t9) -/* 07BC28 7F049238 AFAF0168 */ sw $t7, 0x168($sp) -/* 07BC2C 7F04923C 8C680010 */ lw $t0, 0x10($v1) -/* 07BC30 7F049240 8D0A0004 */ lw $t2, 4($t0) -/* 07BC34 7F049244 AFAA0164 */ sw $t2, 0x164($sp) -/* 07BC38 7F049248 8C6B0008 */ lw $t3, 8($v1) -/* 07BC3C 7F04924C 8D6C0004 */ lw $t4, 4($t3) -/* 07BC40 7F049250 AFAC0160 */ sw $t4, 0x160($sp) -/* 07BC44 7F049254 8C6D0018 */ lw $t5, 0x18($v1) -/* 07BC48 7F049258 8DAE0004 */ lw $t6, 4($t5) -/* 07BC4C 7F04925C AFAE015C */ sw $t6, 0x15c($sp) -/* 07BC50 7F049260 C62E00C8 */ lwc1 $f14, 0xc8($s1) -/* 07BC54 7F049264 46007387 */ neg.s $f14, $f14 -/* 07BC58 7F049268 4616703C */ c.lt.s $f14, $f22 -/* 07BC5C 7F04926C 00000000 */ nop -/* 07BC60 7F049270 45020003 */ bc1fl .L7F049280 -/* 07BC64 7F049274 C62C00CC */ lwc1 $f12, 0xcc($s1) -/* 07BC68 7F049278 46147380 */ add.s $f14, $f14, $f20 -/* 07BC6C 7F04927C C62C00CC */ lwc1 $f12, 0xcc($s1) -.L7F049280: -/* 07BC70 7F049280 46006307 */ neg.s $f12, $f12 -/* 07BC74 7F049284 4616603C */ c.lt.s $f12, $f22 -/* 07BC78 7F049288 00000000 */ nop -/* 07BC7C 7F04928C 45020003 */ bc1fl .L7F04929C -/* 07BC80 7F049290 AFA50070 */ sw $a1, 0x70($sp) -/* 07BC84 7F049294 46146300 */ add.s $f12, $f12, $f20 -/* 07BC88 7F049298 AFA50070 */ sw $a1, 0x70($sp) -.L7F04929C: -/* 07BC8C 7F04929C 0FC162A9 */ jal matrix_4x4_set_rotation_around_y -/* 07BC90 7F0492A0 E7AE0158 */ swc1 $f14, 0x158($sp) -/* 07BC94 7F0492A4 02002025 */ move $a0, $s0 -/* 07BC98 7F0492A8 0FC16390 */ jal matrix_4x4_set_position -/* 07BC9C 7F0492AC 8FA50070 */ lw $a1, 0x70($sp) -/* 07BCA0 7F0492B0 02402025 */ move $a0, $s2 -/* 07BCA4 7F0492B4 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07BCA8 7F0492B8 8FA50070 */ lw $a1, 0x70($sp) -/* 07BCAC 7F0492BC 264500C0 */ addiu $a1, $s2, 0xc0 -/* 07BCB0 7F0492C0 C7AC0158 */ lwc1 $f12, 0x158($sp) -/* 07BCB4 7F0492C4 0FC16286 */ jal matrix_4x4_set_rotation_around_x -/* 07BCB8 7F0492C8 AFA50078 */ sw $a1, 0x78($sp) -/* 07BCBC 7F0492CC 8FA40168 */ lw $a0, 0x168($sp) -/* 07BCC0 7F0492D0 0FC16390 */ jal matrix_4x4_set_position -/* 07BCC4 7F0492D4 8FA50078 */ lw $a1, 0x78($sp) -/* 07BCC8 7F0492D8 8FA40070 */ lw $a0, 0x70($sp) -/* 07BCCC 7F0492DC 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07BCD0 7F0492E0 8FA50078 */ lw $a1, 0x78($sp) -/* 07BCD4 7F0492E4 3C018005 */ lui $at, %hi(D_80052B70) # $at, 0x8005 -/* 07BCD8 7F0492E8 26500100 */ addiu $s0, $s2, 0x100 -/* 07BCDC 7F0492EC 02002825 */ move $a1, $s0 -/* 07BCE0 7F0492F0 0FC162A9 */ jal matrix_4x4_set_rotation_around_y -/* 07BCE4 7F0492F4 C42C8CB0 */ lwc1 $f12, %lo(D_80052B70)($at) -/* 07BCE8 7F0492F8 8FA40164 */ lw $a0, 0x164($sp) -/* 07BCEC 7F0492FC 0FC16390 */ jal matrix_4x4_set_position -/* 07BCF0 7F049300 02002825 */ move $a1, $s0 -/* 07BCF4 7F049304 8FA40078 */ lw $a0, 0x78($sp) -/* 07BCF8 7F049308 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07BCFC 7F04930C 02002825 */ move $a1, $s0 -/* 07BD00 7F049310 26450080 */ addiu $a1, $s2, 0x80 -/* 07BD04 7F049314 AFA5006C */ sw $a1, 0x6c($sp) -/* 07BD08 7F049318 0FC16383 */ jal matrix_4x4_set_identity_and_position -/* 07BD0C 7F04931C 8FA40160 */ lw $a0, 0x160($sp) -/* 07BD10 7F049320 8FA40070 */ lw $a0, 0x70($sp) -/* 07BD14 7F049324 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 07BD18 7F049328 8FA5006C */ lw $a1, 0x6c($sp) -/* 07BD1C 7F04932C 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 07BD20 7F049330 00000000 */ nop -/* 07BD24 7F049334 27B00170 */ addiu $s0, $sp, 0x170 -/* 07BD28 7F049338 02003025 */ move $a2, $s0 -/* 07BD2C 7F04933C 00402025 */ move $a0, $v0 -/* 07BD30 7F049340 0FC1618D */ jal matrix_4x4_multiply_homogeneous -/* 07BD34 7F049344 8FA50070 */ lw $a1, 0x70($sp) -/* 07BD38 7F049348 8FA4015C */ lw $a0, 0x15c($sp) -/* 07BD3C 7F04934C 02002825 */ move $a1, $s0 -/* 07BD40 7F049350 26260084 */ addiu $a2, $s1, 0x84 -/* 07BD44 7F049354 0FC0FD80 */ jal sub_GAME_7F03F540 -/* 07BD48 7F049358 26270080 */ addiu $a3, $s1, 0x80 -/* 07BD4C 7F04935C 8E980008 */ lw $t8, 8($s4) -/* 07BD50 7F049360 8F030008 */ lw $v1, 8($t8) -/* 07BD54 7F049364 8C65001C */ lw $a1, 0x1c($v1) -/* 07BD58 7F049368 50A00008 */ beql $a1, $zero, .L7F04938C -/* 07BD5C 7F04936C 8C650020 */ lw $a1, 0x20($v1) -/* 07BD60 7F049370 0FC1B3A3 */ jal modelGetNodeRwData -/* 07BD64 7F049374 02802025 */ move $a0, $s4 -/* 07BD68 7F049378 8E3900C4 */ lw $t9, 0xc4($s1) -/* 07BD6C 7F04937C A4590000 */ sh $t9, ($v0) -/* 07BD70 7F049380 8E890008 */ lw $t1, 8($s4) -/* 07BD74 7F049384 8D230008 */ lw $v1, 8($t1) -/* 07BD78 7F049388 8C650020 */ lw $a1, 0x20($v1) -.L7F04938C: -/* 07BD7C 7F04938C 50A00005 */ beql $a1, $zero, .L7F0493A4 -/* 07BD80 7F049390 8E8F0008 */ lw $t7, 8($s4) -/* 07BD84 7F049394 0FC1B3A3 */ jal modelGetNodeRwData -/* 07BD88 7F049398 02802025 */ move $a0, $s4 -/* 07BD8C 7F04939C AC400000 */ sw $zero, ($v0) -.L7F0493A0: -/* 07BD90 7F0493A0 8E8F0008 */ lw $t7, 8($s4) -.L7F0493A4: -/* 07BD94 7F0493A4 02802025 */ move $a0, $s4 -/* 07BD98 7F0493A8 0FC1BCA4 */ jal modelUpdateRelationsQuick -/* 07BD9C 7F0493AC 8DE50000 */ lw $a1, ($t7) -/* 07BDA0 7F0493B0 8E88000C */ lw $t0, 0xc($s4) -/* 07BDA4 7F0493B4 02602025 */ move $a0, $s3 -/* 07BDA8 7F0493B8 C50A0038 */ lwc1 $f10, 0x38($t0) -/* 07BDAC 7F0493BC 46005207 */ neg.s $f8, $f10 -/* 07BDB0 7F0493C0 0FC10F8D */ jal chrobjWeaponTick -/* 07BDB4 7F0493C4 E6680018 */ swc1 $f8, 0x18($s3) -/* 07BDB8 7F0493C8 8E640020 */ lw $a0, 0x20($s3) -/* 07BDBC 7F0493CC 50800018 */ beql $a0, $zero, .L7F049430 -/* 07BDC0 7F0493D0 8E230064 */ lw $v1, 0x64($s1) -/* 07BDC4 7F0493D4 8C820024 */ lw $v0, 0x24($a0) -.L7F0493D8: -/* 07BDC8 7F0493D8 0FC110E1 */ jal sub_GAME_7F0442DC -/* 07BDCC 7F0493DC AFA2068C */ sw $v0, 0x68c($sp) -/* 07BDD0 7F0493E0 8FA4068C */ lw $a0, 0x68c($sp) -/* 07BDD4 7F0493E4 5480FFFC */ bnezl $a0, .L7F0493D8 -/* 07BDD8 7F0493E8 8C820024 */ lw $v0, 0x24($a0) -/* 07BDDC 7F0493EC 10000010 */ b .L7F049430 -/* 07BDE0 7F0493F0 8E230064 */ lw $v1, 0x64($s1) -.L7F0493F4: -/* 07BDE4 7F0493F4 926A0001 */ lbu $t2, 1($s3) -/* 07BDE8 7F0493F8 02602025 */ move $a0, $s3 -/* 07BDEC 7F0493FC 314BFFFD */ andi $t3, $t2, 0xfffd -/* 07BDF0 7F049400 0FC10F8D */ jal chrobjWeaponTick -/* 07BDF4 7F049404 A26B0001 */ sb $t3, 1($s3) -/* 07BDF8 7F049408 8E640020 */ lw $a0, 0x20($s3) -/* 07BDFC 7F04940C 50800008 */ beql $a0, $zero, .L7F049430 -/* 07BE00 7F049410 8E230064 */ lw $v1, 0x64($s1) -/* 07BE04 7F049414 8C820024 */ lw $v0, 0x24($a0) -.L7F049418: -/* 07BE08 7F049418 0FC110BD */ jal sub_GAME_7F04424C -/* 07BE0C 7F04941C AFA2068C */ sw $v0, 0x68c($sp) -/* 07BE10 7F049420 8FA4068C */ lw $a0, 0x68c($sp) -/* 07BE14 7F049424 5480FFFC */ bnezl $a0, .L7F049418 -/* 07BE18 7F049428 8C820024 */ lw $v0, 0x24($a0) -/* 07BE1C 7F04942C 8E230064 */ lw $v1, 0x64($s1) -.L7F049430: -/* 07BE20 7F049430 2401FEFF */ li $at, -257 -/* 07BE24 7F049434 266E0008 */ addiu $t6, $s3, 8 -/* 07BE28 7F049438 306C0100 */ andi $t4, $v1, 0x100 -/* 07BE2C 7F04943C 1180001F */ beqz $t4, .L7F0494BC -/* 07BE30 7F049440 00616824 */ and $t5, $v1, $at -/* 07BE34 7F049444 AE2D0064 */ sw $t5, 0x64($s1) -/* 07BE38 7F049448 0C00262C */ jal randomGetNext -/* 07BE3C 7F04944C AFAE0074 */ sw $t6, 0x74($sp) -/* 07BE40 7F049450 44822000 */ mtc1 $v0, $f4 -/* 07BE44 7F049454 02202025 */ move $a0, $s1 -/* 07BE48 7F049458 04410005 */ bgez $v0, .L7F049470 -/* 07BE4C 7F04945C 468021A0 */ cvt.s.w $f6, $f4 -/* 07BE50 7F049460 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07BE54 7F049464 44815000 */ mtc1 $at, $f10 -/* 07BE58 7F049468 00000000 */ nop -/* 07BE5C 7F04946C 460A3180 */ add.s $f6, $f6, $f10 -.L7F049470: -/* 07BE60 7F049470 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07BE64 7F049474 44814000 */ mtc1 $at, $f8 -/* 07BE68 7F049478 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 07BE6C 7F04947C 44815000 */ mtc1 $at, $f10 -/* 07BE70 7F049480 46083102 */ mul.s $f4, $f6, $f8 -/* 07BE74 7F049484 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 07BE78 7F049488 44814000 */ mtc1 $at, $f8 -/* 07BE7C 7F04948C 8E380064 */ lw $t8, 0x64($s1) -/* 07BE80 7F049490 3C010006 */ lui $at, 6 -/* 07BE84 7F049494 8FA60074 */ lw $a2, 0x74($sp) -/* 07BE88 7F049498 0301C824 */ and $t9, $t8, $at -/* 07BE8C 7F04949C 460A2182 */ mul.s $f6, $f4, $f10 -/* 07BE90 7F0494A0 00003825 */ move $a3, $zero -/* 07BE94 7F0494A4 00194C42 */ srl $t1, $t9, 0x11 -/* 07BE98 7F0494A8 AFA90010 */ sw $t1, 0x10($sp) -/* 07BE9C 7F0494AC 46083100 */ add.s $f4, $f6, $f8 -/* 07BEA0 7F0494B0 44052000 */ mfc1 $a1, $f4 -/* 07BEA4 7F0494B4 0FC138BC */ jal maybe_detonate_object -/* 07BEA8 7F0494B8 00000000 */ nop -.L7F0494BC: -/* 07BEAC 7F0494BC 8FAF0680 */ lw $t7, 0x680($sp) -/* 07BEB0 7F0494C0 51E0020D */ beql $t7, $zero, .L7F049CF8 -/* 07BEB4 7F0494C4 8FA80688 */ lw $t0, 0x688($sp) -/* 07BEB8 7F0494C8 92220003 */ lbu $v0, 3($s1) -/* 07BEBC 7F0494CC 24010001 */ li $at, 1 -/* 07BEC0 7F0494D0 54410006 */ bnel $v0, $at, .L7F0494EC -/* 07BEC4 7F0494D4 2401000D */ li $at, 13 -/* 07BEC8 7F0494D8 0FC14F47 */ jal sub_GAME_7F053A3C -/* 07BECC 7F0494DC 8E640004 */ lw $a0, 4($s3) -/* 07BED0 7F0494E0 10000202 */ b .L7F049CEC -/* 07BED4 7F0494E4 00000000 */ nop -/* 07BED8 7F0494E8 2401000D */ li $at, 13 -.L7F0494EC: -/* 07BEDC 7F0494EC 144101FF */ bne $v0, $at, .L7F049CEC -/* 07BEE0 7F0494F0 00000000 */ nop -/* 07BEE4 7F0494F4 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 07BEE8 7F0494F8 00000000 */ nop -/* 07BEEC 7F0494FC 144001FB */ bnez $v0, .L7F049CEC -/* 07BEF0 7F049500 00000000 */ nop -/* 07BEF4 7F049504 8E700004 */ lw $s0, 4($s3) -/* 07BEF8 7F049508 AFA00140 */ sw $zero, 0x140($sp) -/* 07BEFC 7F04950C AFA0013C */ sw $zero, 0x13c($sp) -/* 07BF00 7F049510 8E0800D0 */ lw $t0, 0xd0($s0) -/* 07BF04 7F049514 510001E4 */ beql $t0, $zero, .L7F049CA8 -/* 07BF08 7F049518 8E980008 */ lw $t8, 8($s4) -/* 07BF0C 7F04951C 8E2A0008 */ lw $t2, 8($s1) -/* 07BF10 7F049520 000A58C0 */ sll $t3, $t2, 3 -/* 07BF14 7F049524 056201E0 */ bltzl $t3, .L7F049CA8 -/* 07BF18 7F049528 8E980008 */ lw $t8, 8($s4) -/* 07BF1C 7F04952C 8E0C00AC */ lw $t4, 0xac($s0) -/* 07BF20 7F049530 3C0B8004 */ lui $t3, %hi(g_GlobalTimer) # $t3, 0x8004 -/* 07BF24 7F049534 258D0001 */ addiu $t5, $t4, 1 -/* 07BF28 7F049538 31AE0001 */ andi $t6, $t5, 1 -/* 07BF2C 7F04953C AE0D00AC */ sw $t5, 0xac($s0) -/* 07BF30 7F049540 2DD80001 */ sltiu $t8, $t6, 1 -/* 07BF34 7F049544 AFB80140 */ sw $t8, 0x140($sp) -/* 07BF38 7F049548 8E990008 */ lw $t9, 8($s4) -/* 07BF3C 7F04954C 39C80001 */ xori $t0, $t6, 1 -/* 07BF40 7F049550 2D080001 */ sltiu $t0, $t0, 1 -/* 07BF44 7F049554 8F290008 */ lw $t1, 8($t9) -/* 07BF48 7F049558 8D2F0014 */ lw $t7, 0x14($t1) -/* 07BF4C 7F04955C 51E00003 */ beql $t7, $zero, .L7F04956C -/* 07BF50 7F049560 8E0A00C0 */ lw $t2, 0xc0($s0) -/* 07BF54 7F049564 AFA8013C */ sw $t0, 0x13c($sp) -/* 07BF58 7F049568 8E0A00C0 */ lw $t2, 0xc0($s0) -.L7F04956C: -/* 07BF5C 7F04956C 8D6B0FFC */ lw $t3, %lo(g_GlobalTimer)($t3) -/* 07BF60 7F049570 014B082A */ slt $at, $t2, $t3 -/* 07BF64 7F049574 50200032 */ beql $at, $zero, .L7F049640 -/* 07BF68 7F049578 8FAF0140 */ lw $t7, 0x140($sp) -/* 07BF6C 7F04957C 8E0400C4 */ lw $a0, 0xc4($s0) -/* 07BF70 7F049580 50800008 */ beql $a0, $zero, .L7F0495A4 -/* 07BF74 7F049584 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07BF78 7F049588 0C002094 */ jal sndGetPlayingState -/* 07BF7C 7F04958C 00000000 */ nop -/* 07BF80 7F049590 50400004 */ beql $v0, $zero, .L7F0495A4 -/* 07BF84 7F049594 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07BF88 7F049598 0C002120 */ jal sndDeactivate -/* 07BF8C 7F04959C 8E0400C4 */ lw $a0, 0xc4($s0) -/* 07BF90 7F0495A0 8E0400C8 */ lw $a0, 0xc8($s0) -.L7F0495A4: -/* 07BF94 7F0495A4 50800008 */ beql $a0, $zero, .L7F0495C8 -/* 07BF98 7F0495A8 8E0C00C4 */ lw $t4, 0xc4($s0) -/* 07BF9C 7F0495AC 0C002094 */ jal sndGetPlayingState -/* 07BFA0 7F0495B0 00000000 */ nop -/* 07BFA4 7F0495B4 50400004 */ beql $v0, $zero, .L7F0495C8 -/* 07BFA8 7F0495B8 8E0C00C4 */ lw $t4, 0xc4($s0) -/* 07BFAC 7F0495BC 0C002120 */ jal sndDeactivate -/* 07BFB0 7F0495C0 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07BFB4 7F0495C4 8E0C00C4 */ lw $t4, 0xc4($s0) -.L7F0495C8: -/* 07BFB8 7F0495C8 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 07BFBC 7F0495CC 240500FD */ li $a1, 253 -/* 07BFC0 7F0495D0 1580000A */ bnez $t4, .L7F0495FC -/* 07BFC4 7F0495D4 260600C4 */ addiu $a2, $s0, 0xc4 -/* 07BFC8 7F0495D8 266D0008 */ addiu $t5, $s3, 8 -/* 07BFCC 7F0495DC AFAD0074 */ sw $t5, 0x74($sp) -/* 07BFD0 7F0495E0 0C00209A */ jal sndPlaySfx -/* 07BFD4 7F0495E4 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07BFD8 7F0495E8 8E0400C4 */ lw $a0, 0xc4($s0) -/* 07BFDC 7F0495EC 0FC14F3C */ jal chrobjSndCreatePostEventDefault -/* 07BFE0 7F0495F0 8FA50074 */ lw $a1, 0x74($sp) -/* 07BFE4 7F0495F4 1000000D */ b .L7F04962C -/* 07BFE8 7F0495F8 00000000 */ nop -.L7F0495FC: -/* 07BFEC 7F0495FC 8E0E00C8 */ lw $t6, 0xc8($s0) -/* 07BFF0 7F049600 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 07BFF4 7F049604 240500FD */ li $a1, 253 -/* 07BFF8 7F049608 15C00008 */ bnez $t6, .L7F04962C -/* 07BFFC 7F04960C 260600C8 */ addiu $a2, $s0, 0xc8 -/* 07C000 7F049610 26780008 */ addiu $t8, $s3, 8 -/* 07C004 7F049614 AFB80074 */ sw $t8, 0x74($sp) -/* 07C008 7F049618 0C00209A */ jal sndPlaySfx -/* 07C00C 7F04961C 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 07C010 7F049620 8E0400C8 */ lw $a0, 0xc8($s0) -/* 07C014 7F049624 0FC14F3C */ jal chrobjSndCreatePostEventDefault -/* 07C018 7F049628 8FA50074 */ lw $a1, 0x74($sp) -.L7F04962C: -/* 07C01C 7F04962C 3C198004 */ lui $t9, %hi(g_GlobalTimer) # $t9, 0x8004 -/* 07C020 7F049630 8F390FFC */ lw $t9, %lo(g_GlobalTimer)($t9) -/* 07C024 7F049634 27290002 */ addiu $t1, $t9, 2 -/* 07C028 7F049638 AE0900C0 */ sw $t1, 0xc0($s0) -/* 07C02C 7F04963C 8FAF0140 */ lw $t7, 0x140($sp) -.L7F049640: -/* 07C030 7F049640 8FA8013C */ lw $t0, 0x13c($sp) -/* 07C034 7F049644 240A0001 */ li $t2, 1 -/* 07C038 7F049648 55E00004 */ bnezl $t7, .L7F04965C -/* 07C03C 7F04964C AFAA0120 */ sw $t2, 0x120($sp) -/* 07C040 7F049650 51000195 */ beql $t0, $zero, .L7F049CA8 -/* 07C044 7F049654 8E980008 */ lw $t8, 8($s4) -/* 07C048 7F049658 AFAA0120 */ sw $t2, 0x120($sp) -.L7F04965C: -/* 07C04C 7F04965C AFA00110 */ sw $zero, 0x110($sp) -/* 07C050 7F049660 8E6B0014 */ lw $t3, 0x14($s3) -/* 07C054 7F049664 AFAB010C */ sw $t3, 0x10c($sp) -/* 07C058 7F049668 8E0C00AC */ lw $t4, 0xac($s0) -/* 07C05C 7F04966C 318D0003 */ andi $t5, $t4, 3 -/* 07C060 7F049670 2DAE0001 */ sltiu $t6, $t5, 1 -/* 07C064 7F049674 0FC22640 */ jal get_curplayer_positiondata -/* 07C068 7F049678 AFAE0108 */ sw $t6, 0x108($sp) -/* 07C06C 7F04967C AFA20104 */ sw $v0, 0x104($sp) -/* 07C070 7F049680 8E980008 */ lw $t8, 8($s4) -/* 07C074 7F049684 24040005 */ li $a0, 5 -/* 07C078 7F049688 8F030008 */ lw $v1, 8($t8) -/* 07C07C 7F04968C 8C79001C */ lw $t9, 0x1c($v1) -/* 07C080 7F049690 53200007 */ beql $t9, $zero, .L7F0496B0 -/* 07C084 7F049694 92680001 */ lbu $t0, 1($s3) -/* 07C088 7F049698 8E0900AC */ lw $t1, 0xac($s0) -/* 07C08C 7F04969C 312F0007 */ andi $t7, $t1, 7 -/* 07C090 7F0496A0 55E00003 */ bnezl $t7, .L7F0496B0 -/* 07C094 7F0496A4 92680001 */ lbu $t0, 1($s3) -/* 07C098 7F0496A8 24040007 */ li $a0, 7 -/* 07C09C 7F0496AC 92680001 */ lbu $t0, 1($s3) -.L7F0496B0: -/* 07C0A0 7F0496B0 310A0002 */ andi $t2, $t0, 2 -/* 07C0A4 7F0496B4 1140002D */ beqz $t2, .L7F04976C -/* 07C0A8 7F0496B8 00048880 */ sll $s1, $a0, 2 -/* 07C0AC 7F0496BC 00715821 */ addu $t3, $v1, $s1 -/* 07C0B0 7F0496C0 8D650000 */ lw $a1, ($t3) -/* 07C0B4 7F0496C4 02802025 */ move $a0, $s4 -/* 07C0B8 7F0496C8 50A00029 */ beql $a1, $zero, .L7F049770 -/* 07C0BC 7F0496CC C6640008 */ lwc1 $f4, 8($s3) -/* 07C0C0 7F0496D0 0FC1B366 */ jal modelFindNodeMtx -/* 07C0C4 7F0496D4 00003025 */ move $a2, $zero -/* 07C0C8 7F0496D8 8E8C0008 */ lw $t4, 8($s4) -/* 07C0CC 7F0496DC 00409025 */ move $s2, $v0 -/* 07C0D0 7F0496E0 8D8D0008 */ lw $t5, 8($t4) -/* 07C0D4 7F0496E4 01B17021 */ addu $t6, $t5, $s1 -/* 07C0D8 7F0496E8 8DD80000 */ lw $t8, ($t6) -/* 07C0DC 7F0496EC 8F030004 */ lw $v1, 4($t8) -/* 07C0E0 7F0496F0 C46A0000 */ lwc1 $f10, ($v1) -/* 07C0E4 7F0496F4 E7AA0130 */ swc1 $f10, 0x130($sp) -/* 07C0E8 7F0496F8 C4660004 */ lwc1 $f6, 4($v1) -/* 07C0EC 7F0496FC E7A60134 */ swc1 $f6, 0x134($sp) -/* 07C0F0 7F049700 C4680008 */ lwc1 $f8, 8($v1) -/* 07C0F4 7F049704 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 07C0F8 7F049708 E7A80138 */ swc1 $f8, 0x138($sp) -/* 07C0FC 7F04970C 27B100BC */ addiu $s1, $sp, 0xbc -/* 07C100 7F049710 02203025 */ move $a2, $s1 -/* 07C104 7F049714 00402025 */ move $a0, $v0 -/* 07C108 7F049718 0FC1618D */ jal matrix_4x4_multiply_homogeneous -/* 07C10C 7F04971C 02402825 */ move $a1, $s2 -/* 07C110 7F049720 02202025 */ move $a0, $s1 -/* 07C114 7F049724 0FC16247 */ jal mtx4TransformVecInPlace -/* 07C118 7F049728 27A50130 */ addiu $a1, $sp, 0x130 -/* 07C11C 7F04972C C7A40138 */ lwc1 $f4, 0x138($sp) -/* 07C120 7F049730 8E650008 */ lw $a1, 8($s3) -/* 07C124 7F049734 8E660010 */ lw $a2, 0x10($s3) -/* 07C128 7F049738 27A4010C */ addiu $a0, $sp, 0x10c -/* 07C12C 7F04973C 8FA70130 */ lw $a3, 0x130($sp) -/* 07C130 7F049740 0FC2BFA9 */ jal walkTilesBetweenPoints_NoCallback -/* 07C134 7F049744 E7A40010 */ swc1 $f4, 0x10($sp) -/* 07C138 7F049748 1440000E */ bnez $v0, .L7F049784 -/* 07C13C 7F04974C 00000000 */ nop -/* 07C140 7F049750 C66A0008 */ lwc1 $f10, 8($s3) -/* 07C144 7F049754 E7AA0130 */ swc1 $f10, 0x130($sp) -/* 07C148 7F049758 C666000C */ lwc1 $f6, 0xc($s3) -/* 07C14C 7F04975C E7A60134 */ swc1 $f6, 0x134($sp) -/* 07C150 7F049760 C6680010 */ lwc1 $f8, 0x10($s3) -/* 07C154 7F049764 10000007 */ b .L7F049784 -/* 07C158 7F049768 E7A80138 */ swc1 $f8, 0x138($sp) -.L7F04976C: -/* 07C15C 7F04976C C6640008 */ lwc1 $f4, 8($s3) -.L7F049770: -/* 07C160 7F049770 E7A40130 */ swc1 $f4, 0x130($sp) -/* 07C164 7F049774 C66A000C */ lwc1 $f10, 0xc($s3) -/* 07C168 7F049778 E7AA0134 */ swc1 $f10, 0x134($sp) -/* 07C16C 7F04977C C6660010 */ lwc1 $f6, 0x10($s3) -/* 07C170 7F049780 E7A60138 */ swc1 $f6, 0x138($sp) -.L7F049784: -/* 07C174 7F049784 0FC16068 */ jal cosf -/* 07C178 7F049788 C60C009C */ lwc1 $f12, 0x9c($s0) -/* 07C17C 7F04978C C60C0090 */ lwc1 $f12, 0x90($s0) -/* 07C180 7F049790 0FC1606B */ jal sinf -/* 07C184 7F049794 E7A00080 */ swc1 $f0, 0x80($sp) -/* 07C188 7F049798 C7A20080 */ lwc1 $f2, 0x80($sp) -/* 07C18C 7F04979C 46020202 */ mul.s $f8, $f0, $f2 -/* 07C190 7F0497A0 E7A80124 */ swc1 $f8, 0x124($sp) -/* 07C194 7F0497A4 0FC1606B */ jal sinf -/* 07C198 7F0497A8 C60C009C */ lwc1 $f12, 0x9c($s0) -/* 07C19C 7F0497AC E7A00128 */ swc1 $f0, 0x128($sp) -/* 07C1A0 7F0497B0 0FC16068 */ jal cosf -/* 07C1A4 7F0497B4 C60C009C */ lwc1 $f12, 0x9c($s0) -/* 07C1A8 7F0497B8 C60C0090 */ lwc1 $f12, 0x90($s0) -/* 07C1AC 7F0497BC 0FC16068 */ jal cosf -/* 07C1B0 7F0497C0 E7A00080 */ swc1 $f0, 0x80($sp) -/* 07C1B4 7F0497C4 C7A20080 */ lwc1 $f2, 0x80($sp) -/* 07C1B8 7F0497C8 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07C1BC 7F0497CC 44816000 */ mtc1 $at, $f12 -/* 07C1C0 7F0497D0 46020382 */ mul.s $f14, $f0, $f2 -/* 07C1C4 7F0497D4 C7A40124 */ lwc1 $f4, 0x124($sp) -/* 07C1C8 7F0497D8 C7A60130 */ lwc1 $f6, 0x130($sp) -/* 07C1CC 7F0497DC 460C2282 */ mul.s $f10, $f4, $f12 -/* 07C1D0 7F0497E0 C7A40128 */ lwc1 $f4, 0x128($sp) -/* 07C1D4 7F0497E4 E7AE012C */ swc1 $f14, 0x12c($sp) -/* 07C1D8 7F0497E8 46065200 */ add.s $f8, $f10, $f6 -/* 07C1DC 7F0497EC 460C2282 */ mul.s $f10, $f4, $f12 -/* 07C1E0 7F0497F0 C7A60134 */ lwc1 $f6, 0x134($sp) -/* 07C1E4 7F0497F4 460C7102 */ mul.s $f4, $f14, $f12 -/* 07C1E8 7F0497F8 E7A80114 */ swc1 $f8, 0x114($sp) -/* 07C1EC 7F0497FC 46065200 */ add.s $f8, $f10, $f6 -/* 07C1F0 7F049800 C7AA0138 */ lwc1 $f10, 0x138($sp) -/* 07C1F4 7F049804 460A2180 */ add.s $f6, $f4, $f10 -/* 07C1F8 7F049808 E7A80118 */ swc1 $f8, 0x118($sp) -/* 07C1FC 7F04980C 0FC2C3E1 */ jal sub_GAME_7F0B1CC4 -/* 07C200 7F049810 E7A6011C */ swc1 $f6, 0x11c($sp) -/* 07C204 7F049814 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 07C208 7F049818 44810000 */ mtc1 $at, $f0 -/* 07C20C 7F04981C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07C210 7F049820 44812000 */ mtc1 $at, $f4 -/* 07C214 7F049824 C7A8011C */ lwc1 $f8, 0x11c($sp) -/* 07C218 7F049828 24190002 */ li $t9, 2 -/* 07C21C 7F04982C AFB90014 */ sw $t9, 0x14($sp) -/* 07C220 7F049830 27A4010C */ addiu $a0, $sp, 0x10c -/* 07C224 7F049834 8FA50130 */ lw $a1, 0x130($sp) -/* 07C228 7F049838 8FA60138 */ lw $a2, 0x138($sp) -/* 07C22C 7F04983C 8FA70114 */ lw $a3, 0x114($sp) -/* 07C230 7F049840 E7B60020 */ swc1 $f22, 0x20($sp) -/* 07C234 7F049844 E7A00018 */ swc1 $f0, 0x18($sp) -/* 07C238 7F049848 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 07C23C 7F04984C E7A80010 */ swc1 $f8, 0x10($sp) -/* 07C240 7F049850 0FC2C039 */ jal stanTestLineUnobstructed -/* 07C244 7F049854 E7A40024 */ swc1 $f4, 0x24($sp) -/* 07C248 7F049858 14400017 */ bnez $v0, .L7F0498B8 -/* 07C24C 7F04985C 27A60114 */ addiu $a2, $sp, 0x114 -/* 07C250 7F049860 27A40130 */ addiu $a0, $sp, 0x130 -/* 07C254 7F049864 0FC09899 */ jal chrlvStanLineDirIntersection -/* 07C258 7F049868 27A50124 */ addiu $a1, $sp, 0x124 -/* 07C25C 7F04986C 3C0141D0 */ li $at, 0x41D00000 # 26.000000 -/* 07C260 7F049870 44818000 */ mtc1 $at, $f16 -/* 07C264 7F049874 C7A60124 */ lwc1 $f6, 0x124($sp) -/* 07C268 7F049878 C7AA0114 */ lwc1 $f10, 0x114($sp) -/* 07C26C 7F04987C C7AE012C */ lwc1 $f14, 0x12c($sp) -/* 07C270 7F049880 46068202 */ mul.s $f8, $f16, $f6 -/* 07C274 7F049884 C7A60118 */ lwc1 $f6, 0x118($sp) -/* 07C278 7F049888 8FA9010C */ lw $t1, 0x10c($sp) -/* 07C27C 7F04988C AFA90110 */ sw $t1, 0x110($sp) -/* 07C280 7F049890 46085101 */ sub.s $f4, $f10, $f8 -/* 07C284 7F049894 C7AA0128 */ lwc1 $f10, 0x128($sp) -/* 07C288 7F049898 460A8202 */ mul.s $f8, $f16, $f10 -/* 07C28C 7F04989C E7A40114 */ swc1 $f4, 0x114($sp) -/* 07C290 7F0498A0 C7AA011C */ lwc1 $f10, 0x11c($sp) -/* 07C294 7F0498A4 46083101 */ sub.s $f4, $f6, $f8 -/* 07C298 7F0498A8 460E8182 */ mul.s $f6, $f16, $f14 -/* 07C29C 7F0498AC E7A40118 */ swc1 $f4, 0x118($sp) -/* 07C2A0 7F0498B0 46065201 */ sub.s $f8, $f10, $f6 -/* 07C2A4 7F0498B4 E7A8011C */ swc1 $f8, 0x11c($sp) -.L7F0498B8: -/* 07C2A8 7F0498B8 3C0F8004 */ lui $t7, %hi(g_GlobalTimer) # $t7, 0x8004 -/* 07C2AC 7F0498BC 8DEF0FFC */ lw $t7, %lo(g_GlobalTimer)($t7) -/* 07C2B0 7F0498C0 8E0800BC */ lw $t0, 0xbc($s0) -/* 07C2B4 7F0498C4 27B10114 */ addiu $s1, $sp, 0x114 -/* 07C2B8 7F0498C8 8FA50104 */ lw $a1, 0x104($sp) -/* 07C2BC 7F0498CC 15E80052 */ bne $t7, $t0, .L7F049A18 -/* 07C2C0 7F0498D0 C7AA0130 */ lwc1 $f10, 0x130($sp) -/* 07C2C4 7F0498D4 C4A40008 */ lwc1 $f4, 8($a1) -/* 07C2C8 7F0498D8 C4A6000C */ lwc1 $f6, 0xc($a1) -/* 07C2CC 7F0498DC C7A80134 */ lwc1 $f8, 0x134($sp) -/* 07C2D0 7F0498E0 460A2001 */ sub.s $f0, $f4, $f10 -/* 07C2D4 7F0498E4 C4A40010 */ lwc1 $f4, 0x10($a1) -/* 07C2D8 7F0498E8 E7AA0058 */ swc1 $f10, 0x58($sp) -/* 07C2DC 7F0498EC 46083081 */ sub.s $f2, $f6, $f8 -/* 07C2E0 7F0498F0 C7A60138 */ lwc1 $f6, 0x138($sp) -/* 07C2E4 7F0498F4 46062301 */ sub.s $f12, $f4, $f6 -/* 07C2E8 7F0498F8 46000102 */ mul.s $f4, $f0, $f0 -/* 07C2EC 7F0498FC 00000000 */ nop -/* 07C2F0 7F049900 46021282 */ mul.s $f10, $f2, $f2 -/* 07C2F4 7F049904 460A2100 */ add.s $f4, $f4, $f10 -/* 07C2F8 7F049908 460C6282 */ mul.s $f10, $f12, $f12 -/* 07C2FC 7F04990C 460A2500 */ add.s $f20, $f4, $f10 -/* 07C300 7F049910 C7AA0058 */ lwc1 $f10, 0x58($sp) -/* 07C304 7F049914 C7A40114 */ lwc1 $f4, 0x114($sp) -/* 07C308 7F049918 460A2001 */ sub.s $f0, $f4, $f10 -/* 07C30C 7F04991C C7A40118 */ lwc1 $f4, 0x118($sp) -/* 07C310 7F049920 C7AA011C */ lwc1 $f10, 0x11c($sp) -/* 07C314 7F049924 46082081 */ sub.s $f2, $f4, $f8 -/* 07C318 7F049928 46000102 */ mul.s $f4, $f0, $f0 -/* 07C31C 7F04992C 46065301 */ sub.s $f12, $f10, $f6 -/* 07C320 7F049930 46021202 */ mul.s $f8, $f2, $f2 -/* 07C324 7F049934 46082280 */ add.s $f10, $f4, $f8 -/* 07C328 7F049938 460C6182 */ mul.s $f6, $f12, $f12 -/* 07C32C 7F04993C 46065100 */ add.s $f4, $f10, $f6 -/* 07C330 7F049940 4604A03E */ c.le.s $f20, $f4 -/* 07C334 7F049944 00000000 */ nop -/* 07C338 7F049948 45000033 */ bc1f .L7F049A18 -/* 07C33C 7F04994C 00000000 */ nop -/* 07C340 7F049950 0FC22810 */ jal bondviewGetIfCurrentPlayerDamageShowTime -/* 07C344 7F049954 00000000 */ nop -/* 07C348 7F049958 54400030 */ bnezl $v0, .L7F049A1C -/* 07C34C 7F04995C 8FAA0120 */ lw $t2, 0x120($sp) -/* 07C350 7F049960 0C007614 */ jal sqrtf -/* 07C354 7F049964 4600A306 */ mov.s $f12, $f20 -/* 07C358 7F049968 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 07C35C 7F04996C 44816000 */ mtc1 $at, $f12 -/* 07C360 7F049970 3C018005 */ lui $at, %hi(D_80052B74) # $at, 0x8005 -/* 07C364 7F049974 C4288CB4 */ lwc1 $f8, %lo(D_80052B74)($at) -/* 07C368 7F049978 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 07C36C 7F04997C C42A1004 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07C370 7F049980 3C018003 */ lui $at, %hi(g_AutogunPendingDamageTick) # $at, 0x8003 -/* 07C374 7F049984 4600603C */ c.lt.s $f12, $f0 -/* 07C378 7F049988 460A4182 */ mul.s $f6, $f8, $f10 -/* 07C37C 7F04998C C424C06C */ lwc1 $f4, %lo(g_AutogunPendingDamageTick)($at) -/* 07C380 7F049990 46043082 */ mul.s $f2, $f6, $f4 -/* 07C384 7F049994 45020005 */ bc1fl .L7F0499AC -/* 07C388 7F049998 C60A00D4 */ lwc1 $f10, 0xd4($s0) -/* 07C38C 7F04999C 46006203 */ div.s $f8, $f12, $f0 -/* 07C390 7F0499A0 46081082 */ mul.s $f2, $f2, $f8 -/* 07C394 7F0499A4 00000000 */ nop -/* 07C398 7F0499A8 C60A00D4 */ lwc1 $f10, 0xd4($s0) -.L7F0499AC: -/* 07C39C 7F0499AC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07C3A0 7F0499B0 44814000 */ mtc1 $at, $f8 -/* 07C3A4 7F0499B4 46025180 */ add.s $f6, $f10, $f2 -/* 07C3A8 7F0499B8 E60600D4 */ swc1 $f6, 0xd4($s0) -/* 07C3AC 7F0499BC C60400D4 */ lwc1 $f4, 0xd4($s0) -/* 07C3B0 7F0499C0 4604403E */ c.le.s $f8, $f4 -/* 07C3B4 7F0499C4 00000000 */ nop -/* 07C3B8 7F0499C8 45020014 */ bc1fl .L7F049A1C -/* 07C3BC 7F0499CC 8FAA0120 */ lw $t2, 0x120($sp) -/* 07C3C0 7F0499D0 0FC1790F */ jal bondwalkItemGetDestructionAmount -/* 07C3C4 7F0499D4 2404000E */ li $a0, 14 -/* 07C3C8 7F0499D8 3C013E00 */ li $at, 0x3E000000 # 0.125000 -/* 07C3CC 7F0499DC 44815000 */ mtc1 $at, $f10 -/* 07C3D0 7F0499E0 3C018003 */ lui $at, %hi(g_AutogunDamageScalar) # $at, 0x8003 -/* 07C3D4 7F0499E4 C424C070 */ lwc1 $f4, %lo(g_AutogunDamageScalar)($at) -/* 07C3D8 7F0499E8 460A0182 */ mul.s $f6, $f0, $f10 -/* 07C3DC 7F0499EC C60E0090 */ lwc1 $f14, 0x90($s0) -/* 07C3E0 7F0499F0 2406FFFF */ li $a2, -1 -/* 07C3E4 7F0499F4 24070001 */ li $a3, 1 -/* 07C3E8 7F0499F8 46043302 */ mul.s $f12, $f6, $f4 -/* 07C3EC 7F0499FC 0FC227FA */ jal bondviewCallRecordDamageKills -/* 07C3F0 7F049A00 00000000 */ nop -/* 07C3F4 7F049A04 0FC22810 */ jal bondviewGetIfCurrentPlayerDamageShowTime -/* 07C3F8 7F049A08 E61600D4 */ swc1 $f22, 0xd4($s0) -/* 07C3FC 7F049A0C 50400003 */ beql $v0, $zero, .L7F049A1C -/* 07C400 7F049A10 8FAA0120 */ lw $t2, 0x120($sp) -/* 07C404 7F049A14 AFA00120 */ sw $zero, 0x120($sp) -.L7F049A18: -/* 07C408 7F049A18 8FAA0120 */ lw $t2, 0x120($sp) -.L7F049A1C: -/* 07C40C 7F049A1C 3C0141D0 */ li $at, 0x41D00000 # 26.000000 -/* 07C410 7F049A20 44818000 */ mtc1 $at, $f16 -/* 07C414 7F049A24 1140000F */ beqz $t2, .L7F049A64 -/* 07C418 7F049A28 8FA50104 */ lw $a1, 0x104($sp) -/* 07C41C 7F049A2C 8FAB0110 */ lw $t3, 0x110($sp) -/* 07C420 7F049A30 02202025 */ move $a0, $s1 -/* 07C424 7F049A34 24050001 */ li $a1, 1 -/* 07C428 7F049A38 51600005 */ beql $t3, $zero, .L7F049A50 -/* 07C42C 7F049A3C 2404000E */ li $a0, 14 -/* 07C430 7F049A40 44068000 */ mfc1 $a2, $f16 -/* 07C434 7F049A44 0FC28CD7 */ jal sub_GAME_7F0A3E1C -/* 07C438 7F049A48 91670003 */ lbu $a3, 3($t3) -/* 07C43C 7F049A4C 2404000E */ li $a0, 14 -.L7F049A50: -/* 07C440 7F049A50 02202825 */ move $a1, $s1 -/* 07C444 7F049A54 0FC19315 */ jal recall_joy2_hits_edit_flag -/* 07C448 7F049A58 2406FFFF */ li $a2, -1 -/* 07C44C 7F049A5C 1000000B */ b .L7F049A8C -/* 07C450 7F049A60 8FAC0108 */ lw $t4, 0x108($sp) -.L7F049A64: -/* 07C454 7F049A64 C4A80008 */ lwc1 $f8, 8($a1) -/* 07C458 7F049A68 2404000E */ li $a0, 14 -/* 07C45C 7F049A6C 2406FFFF */ li $a2, -1 -/* 07C460 7F049A70 E7A80114 */ swc1 $f8, 0x114($sp) -/* 07C464 7F049A74 C4AA000C */ lwc1 $f10, 0xc($a1) -/* 07C468 7F049A78 E7AA0118 */ swc1 $f10, 0x118($sp) -/* 07C46C 7F049A7C C4A60010 */ lwc1 $f6, 0x10($a1) -/* 07C470 7F049A80 0FC19238 */ jal recall_joy2_hits_edit_detail_edit_flag -/* 07C474 7F049A84 E7A6011C */ swc1 $f6, 0x11c($sp) -/* 07C478 7F049A88 8FAC0108 */ lw $t4, 0x108($sp) -.L7F049A8C: -/* 07C47C 7F049A8C C7A40130 */ lwc1 $f4, 0x130($sp) -/* 07C480 7F049A90 51800085 */ beql $t4, $zero, .L7F049CA8 -/* 07C484 7F049A94 8E980008 */ lw $t8, 8($s4) -/* 07C488 7F049A98 8E0300CC */ lw $v1, 0xcc($s0) -/* 07C48C 7F049A9C E4640004 */ swc1 $f4, 4($v1) -/* 07C490 7F049AA0 C7A80134 */ lwc1 $f8, 0x134($sp) -/* 07C494 7F049AA4 C4640004 */ lwc1 $f4, 4($v1) -/* 07C498 7F049AA8 E4680008 */ swc1 $f8, 8($v1) -/* 07C49C 7F049AAC C7AA0138 */ lwc1 $f10, 0x138($sp) -/* 07C4A0 7F049AB0 E46A000C */ swc1 $f10, 0xc($v1) -/* 07C4A4 7F049AB4 C7A60114 */ lwc1 $f6, 0x114($sp) -/* 07C4A8 7F049AB8 46043201 */ sub.s $f8, $f6, $f4 -/* 07C4AC 7F049ABC C4660008 */ lwc1 $f6, 8($v1) -/* 07C4B0 7F049AC0 E4680010 */ swc1 $f8, 0x10($v1) -/* 07C4B4 7F049AC4 C7AA0118 */ lwc1 $f10, 0x118($sp) -/* 07C4B8 7F049AC8 C4620010 */ lwc1 $f2, 0x10($v1) -/* 07C4BC 7F049ACC 46065101 */ sub.s $f4, $f10, $f6 -/* 07C4C0 7F049AD0 C46A000C */ lwc1 $f10, 0xc($v1) -/* 07C4C4 7F049AD4 E4640014 */ swc1 $f4, 0x14($v1) -/* 07C4C8 7F049AD8 C7A8011C */ lwc1 $f8, 0x11c($sp) -/* 07C4CC 7F049ADC 46021102 */ mul.s $f4, $f2, $f2 -/* 07C4D0 7F049AE0 C46E0014 */ lwc1 $f14, 0x14($v1) -/* 07C4D4 7F049AE4 460A4181 */ sub.s $f6, $f8, $f10 -/* 07C4D8 7F049AE8 460E7202 */ mul.s $f8, $f14, $f14 -/* 07C4DC 7F049AEC E4660018 */ swc1 $f6, 0x18($v1) -/* 07C4E0 7F049AF0 C4600018 */ lwc1 $f0, 0x18($v1) -/* 07C4E4 7F049AF4 AFA30094 */ sw $v1, 0x94($sp) -/* 07C4E8 7F049AF8 46000182 */ mul.s $f6, $f0, $f0 -/* 07C4EC 7F049AFC 46082280 */ add.s $f10, $f4, $f8 -/* 07C4F0 7F049B00 0C007614 */ jal sqrtf -/* 07C4F4 7F049B04 460A3300 */ add.s $f12, $f6, $f10 -/* 07C4F8 7F049B08 3C018005 */ lui $at, %hi(D_80052B78) # $at, 0x8005 -/* 07C4FC 7F049B0C C42E8CB8 */ lwc1 $f14, %lo(D_80052B78)($at) -/* 07C500 7F049B10 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07C504 7F049B14 44812000 */ mtc1 $at, $f4 -/* 07C508 7F049B18 8FA30094 */ lw $v1, 0x94($sp) -/* 07C50C 7F049B1C 4600703C */ c.lt.s $f14, $f0 -/* 07C510 7F049B20 46000306 */ mov.s $f12, $f0 -/* 07C514 7F049B24 46002083 */ div.s $f2, $f4, $f0 -/* 07C518 7F049B28 C4680010 */ lwc1 $f8, 0x10($v1) -/* 07C51C 7F049B2C C46A0014 */ lwc1 $f10, 0x14($v1) -/* 07C520 7F049B30 3C0143FA */ li $at, 0x43FA0000 # 500.000000 -/* 07C524 7F049B34 44810000 */ mtc1 $at, $f0 -/* 07C528 7F049B38 46024182 */ mul.s $f6, $f8, $f2 -/* 07C52C 7F049B3C C4680018 */ lwc1 $f8, 0x18($v1) -/* 07C530 7F049B40 46025102 */ mul.s $f4, $f10, $f2 -/* 07C534 7F049B44 E4660010 */ swc1 $f6, 0x10($v1) -/* 07C538 7F049B48 46024182 */ mul.s $f6, $f8, $f2 -/* 07C53C 7F049B4C E4640014 */ swc1 $f4, 0x14($v1) -/* 07C540 7F049B50 45000002 */ bc1f .L7F049B5C -/* 07C544 7F049B54 E4660018 */ swc1 $f6, 0x18($v1) -/* 07C548 7F049B58 46007306 */ mov.s $f12, $f14 -.L7F049B5C: -/* 07C54C 7F049B5C 4600603C */ c.lt.s $f12, $f0 -/* 07C550 7F049B60 240D000E */ li $t5, 14 -/* 07C554 7F049B64 A0600000 */ sb $zero, ($v1) -/* 07C558 7F049B68 A06D0001 */ sb $t5, 1($v1) -/* 07C55C 7F049B6C 45000002 */ bc1f .L7F049B78 -/* 07C560 7F049B70 E46C001C */ swc1 $f12, 0x1c($v1) -/* 07C564 7F049B74 46000306 */ mov.s $f12, $f0 -.L7F049B78: -/* 07C568 7F049B78 806E0001 */ lb $t6, 1($v1) -/* 07C56C 7F049B7C 24010016 */ li $at, 22 -/* 07C570 7F049B80 15C10026 */ bne $t6, $at, .L7F049C1C -/* 07C574 7F049B84 3C018005 */ lui $at, %hi(D_80052B7C) # $at, 0x8005 -/* 07C578 7F049B88 C4228CBC */ lwc1 $f2, %lo(D_80052B7C)($at) -/* 07C57C 7F049B8C 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 07C580 7F049B90 44815000 */ mtc1 $at, $f10 -/* 07C584 7F049B94 3C018005 */ lui $at, %hi(D_80052B80) # $at, 0x8005 -/* 07C588 7F049B98 460C5102 */ mul.s $f4, $f10, $f12 -/* 07C58C 7F049B9C E4640020 */ swc1 $f4, 0x20($v1) -/* 07C590 7F049BA0 C4288CC0 */ lwc1 $f8, %lo(D_80052B80)($at) -/* 07C594 7F049BA4 460C4002 */ mul.s $f0, $f8, $f12 -/* 07C598 7F049BA8 4600103C */ c.lt.s $f2, $f0 -/* 07C59C 7F049BAC E4600024 */ swc1 $f0, 0x24($v1) -/* 07C5A0 7F049BB0 45020003 */ bc1fl .L7F049BC0 -/* 07C5A4 7F049BB4 AFA30094 */ sw $v1, 0x94($sp) -/* 07C5A8 7F049BB8 E4620024 */ swc1 $f2, 0x24($v1) -/* 07C5AC 7F049BBC AFA30094 */ sw $v1, 0x94($sp) -.L7F049BC0: -/* 07C5B0 7F049BC0 0C00262C */ jal randomGetNext -/* 07C5B4 7F049BC4 E7AC0098 */ swc1 $f12, 0x98($sp) -/* 07C5B8 7F049BC8 44823000 */ mtc1 $v0, $f6 -/* 07C5BC 7F049BCC 8FA30094 */ lw $v1, 0x94($sp) -/* 07C5C0 7F049BD0 C7AC0098 */ lwc1 $f12, 0x98($sp) -/* 07C5C4 7F049BD4 04410005 */ bgez $v0, .L7F049BEC -/* 07C5C8 7F049BD8 468032A0 */ cvt.s.w $f10, $f6 -/* 07C5CC 7F049BDC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07C5D0 7F049BE0 44812000 */ mtc1 $at, $f4 -/* 07C5D4 7F049BE4 00000000 */ nop -/* 07C5D8 7F049BE8 46045280 */ add.s $f10, $f10, $f4 -.L7F049BEC: -/* 07C5DC 7F049BEC 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07C5E0 7F049BF0 44814000 */ mtc1 $at, $f8 -/* 07C5E4 7F049BF4 3C018005 */ lui $at, %hi(D_80052B84) # $at, 0x8005 -/* 07C5E8 7F049BF8 C4248CC4 */ lwc1 $f4, %lo(D_80052B84)($at) -/* 07C5EC 7F049BFC 46085182 */ mul.s $f6, $f10, $f8 -/* 07C5F0 7F049C00 3C018005 */ lui $at, %hi(D_80052B88) # $at, 0x8005 -/* 07C5F4 7F049C04 C4288CC8 */ lwc1 $f8, %lo(D_80052B88)($at) -/* 07C5F8 7F049C08 46043282 */ mul.s $f10, $f6, $f4 -/* 07C5FC 7F049C0C 460A4181 */ sub.s $f6, $f8, $f10 -/* 07C600 7F049C10 460C3102 */ mul.s $f4, $f6, $f12 -/* 07C604 7F049C14 10000023 */ b .L7F049CA4 -/* 07C608 7F049C18 E4640028 */ swc1 $f4, 0x28($v1) -.L7F049C1C: -/* 07C60C 7F049C1C 3C018005 */ lui $at, %hi(D_80052B8C) # $at, 0x8005 -/* 07C610 7F049C20 C4288CCC */ lwc1 $f8, %lo(D_80052B8C)($at) -/* 07C614 7F049C24 3C018005 */ lui $at, %hi(D_80052B90) # $at, 0x8005 -/* 07C618 7F049C28 460C4002 */ mul.s $f0, $f8, $f12 -/* 07C61C 7F049C2C E4600020 */ swc1 $f0, 0x20($v1) -/* 07C620 7F049C30 E4600024 */ swc1 $f0, 0x24($v1) -/* 07C624 7F049C34 C42A8CD0 */ lwc1 $f10, %lo(D_80052B90)($at) -/* 07C628 7F049C38 3C018005 */ lui $at, %hi(D_80052B94) # $at, 0x8005 -/* 07C62C 7F049C3C 4600503C */ c.lt.s $f10, $f0 -/* 07C630 7F049C40 00000000 */ nop -/* 07C634 7F049C44 45000003 */ bc1f .L7F049C54eu -/* 07C638 7F049C48 00000000 */ nop -/* 07C63C 7F049C4C C4268CD4 */ lwc1 $f6, %lo(D_80052B94)($at) -/* 07C640 7F049C50 E4660024 */ swc1 $f6, 0x24($v1) -.L7F049C54eu: -/* 07C644 7F049C54 0C00262C */ jal randomGetNext -/* 07C648 7F049C58 AFA30094 */ sw $v1, 0x94($sp) -/* 07C64C 7F049C5C 44822000 */ mtc1 $v0, $f4 -/* 07C650 7F049C60 8FA30094 */ lw $v1, 0x94($sp) -/* 07C654 7F049C64 04410005 */ bgez $v0, .L7F049C7C -/* 07C658 7F049C68 46802220 */ cvt.s.w $f8, $f4 -/* 07C65C 7F049C6C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07C660 7F049C70 44815000 */ mtc1 $at, $f10 -/* 07C664 7F049C74 00000000 */ nop -/* 07C668 7F049C78 460A4200 */ add.s $f8, $f8, $f10 -.L7F049C7C: -/* 07C66C 7F049C7C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 07C670 7F049C80 44813000 */ mtc1 $at, $f6 -/* 07C674 7F049C84 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07C678 7F049C88 44815000 */ mtc1 $at, $f10 -/* 07C67C 7F049C8C 46064002 */ mul.s $f0, $f8, $f6 -/* 07C680 7F049C90 C4660020 */ lwc1 $f6, 0x20($v1) -/* 07C684 7F049C94 46000100 */ add.s $f4, $f0, $f0 -/* 07C688 7F049C98 460A2201 */ sub.s $f8, $f4, $f10 -/* 07C68C 7F049C9C 46064102 */ mul.s $f4, $f8, $f6 -/* 07C690 7F049CA0 E4640028 */ swc1 $f4, 0x28($v1) -.L7F049CA4: -/* 07C694 7F049CA4 8E980008 */ lw $t8, 8($s4) -.L7F049CA8: -/* 07C698 7F049CA8 8F030008 */ lw $v1, 8($t8) -/* 07C69C 7F049CAC 8C650014 */ lw $a1, 0x14($v1) -/* 07C6A0 7F049CB0 50A00008 */ beql $a1, $zero, .L7F049CD4 -/* 07C6A4 7F049CB4 8C65001C */ lw $a1, 0x1c($v1) -/* 07C6A8 7F049CB8 0FC1B3A3 */ jal modelGetNodeRwData -/* 07C6AC 7F049CBC 02802025 */ move $a0, $s4 -/* 07C6B0 7F049CC0 8FB90140 */ lw $t9, 0x140($sp) -/* 07C6B4 7F049CC4 A4590000 */ sh $t9, ($v0) -/* 07C6B8 7F049CC8 8E890008 */ lw $t1, 8($s4) -/* 07C6BC 7F049CCC 8D230008 */ lw $v1, 8($t1) -/* 07C6C0 7F049CD0 8C65001C */ lw $a1, 0x1c($v1) -.L7F049CD4: -/* 07C6C4 7F049CD4 10A00005 */ beqz $a1, .L7F049CEC -/* 07C6C8 7F049CD8 00000000 */ nop -/* 07C6CC 7F049CDC 0FC1B3A3 */ jal modelGetNodeRwData -/* 07C6D0 7F049CE0 02802025 */ move $a0, $s4 -/* 07C6D4 7F049CE4 8FAF013C */ lw $t7, 0x13c($sp) -/* 07C6D8 7F049CE8 A44F0000 */ sh $t7, ($v0) -.L7F049CEC: -/* 07C6DC 7F049CEC 0FC110AA */ jal objDropRecursively -/* 07C6E0 7F049CF0 02602025 */ move $a0, $s3 -/* 07C6E4 7F049CF4 8FA80688 */ lw $t0, 0x688($sp) -.L7F049CF8: -/* 07C6E8 7F049CF8 24010005 */ li $at, 5 -/* 07C6EC 7F049CFC 55010003 */ bnel $t0, $at, .L7F049D0C -/* 07C6F0 7F049D00 8FA20688 */ lw $v0, 0x688($sp) -/* 07C6F4 7F049D04 AE600014 */ sw $zero, 0x14($s3) -/* 07C6F8 7F049D08 8FA20688 */ lw $v0, 0x688($sp) -.L7F049D0C: -/* 07C6FC 7F049D0C 8FBF0054 */ lw $ra, 0x54($sp) -/* 07C700 7F049D10 D7B40030 */ ldc1 $f20, 0x30($sp) -/* 07C704 7F049D14 D7B60038 */ ldc1 $f22, 0x38($sp) -/* 07C708 7F049D18 8FB00040 */ lw $s0, 0x40($sp) -/* 07C70C 7F049D1C 8FB10044 */ lw $s1, 0x44($sp) -/* 07C710 7F049D20 8FB20048 */ lw $s2, 0x48($sp) -/* 07C714 7F049D24 8FB3004C */ lw $s3, 0x4c($sp) -/* 07C718 7F049D28 8FB40050 */ lw $s4, 0x50($sp) -/* 07C71C 7F049D2C 03E00008 */ jr $ra -/* 07C720 7F049D30 27BD06B0 */ addiu $sp, $sp, 0x6b0 -) -#endif - - -#endif - - -#ifdef NONMATCHING -/* -* https://decomp.me/scratch/WSRxX 82.48% -*/ -Gfx * sub_GAME_7F049B58(Gfx *arg0) { - -} + if (obj->type == PROPDEF_DOOR) + { + door = (struct DoorRecord *) prop->obj; + previousOpenPosition = door->openPosition; +#if defined(VERSION_EU) + if ((((((s32) door->openedTime) > 0) && (door->openstate == DOORSTATE_STATIONARY)) && (!(door->flags & PROPFLAG_DOOR_KEEPOPEN))) && (((s32) door->openedTime) < (((s32) g_GlobalTimer) - ((((s32) door->autoCloseFrames) * 50) / 60)))) +#elif defined(VERSION_JP) + if ((((((s32) door->openedTime) > 0) && (door->openstate == DOORSTATE_STATIONARY)) && (!(door->flags & PROPFLAG_DOOR_KEEPOPEN))) && (((s32) door->openedTime) < (((s32) g_GlobalTimer) - ((s32) door->autoCloseFrames)))) #else -GLOBAL_ASM( -.text -glabel sub_GAME_7F049B58 -/* 07E688 7F049B58 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 07E68C 7F049B5C AFBF0034 */ sw $ra, 0x34($sp) -/* 07E690 7F049B60 AFB20020 */ sw $s2, 0x20($sp) -/* 07E694 7F049B64 00809025 */ move $s2, $a0 -/* 07E698 7F049B68 AFB60030 */ sw $s6, 0x30($sp) -/* 07E69C 7F049B6C AFB5002C */ sw $s5, 0x2c($sp) -/* 07E6A0 7F049B70 AFB40028 */ sw $s4, 0x28($sp) -/* 07E6A4 7F049B74 AFB30024 */ sw $s3, 0x24($sp) -/* 07E6A8 7F049B78 AFB1001C */ sw $s1, 0x1c($sp) -/* 07E6AC 7F049B7C 0FC0E909 */ jal get_ptr_obj_pos_list_current_entry -/* 07E6B0 7F049B80 AFB00018 */ sw $s0, 0x18($sp) -/* 07E6B4 7F049B84 10400036 */ beqz $v0, .L7F049C60 -/* 07E6B8 7F049B88 00408025 */ move $s0, $v0 -/* 07E6BC 7F049B8C 24160006 */ li $s6, 6 -/* 07E6C0 7F049B90 2415000D */ li $s5, 13 -/* 07E6C4 7F049B94 24140001 */ li $s4, 1 -/* 07E6C8 7F049B98 24130003 */ li $s3, 3 -/* 07E6CC 7F049B9C 92020000 */ lbu $v0, ($s0) -.L7F049BA0: -/* 07E6D0 7F049BA0 02402025 */ move $a0, $s2 -/* 07E6D4 7F049BA4 1662000B */ bne $s3, $v0, .L7F049BD4 -/* 07E6D8 7F049BA8 00000000 */ nop -/* 07E6DC 7F049BAC 8E110004 */ lw $s1, 4($s0) -/* 07E6E0 7F049BB0 02803025 */ move $a2, $s4 -/* 07E6E4 7F049BB4 0FC18786 */ jal sub_GAME_7F061E18 -/* 07E6E8 7F049BB8 26250180 */ addiu $a1, $s1, 0x180 -/* 07E6EC 7F049BBC 00402025 */ move $a0, $v0 -/* 07E6F0 7F049BC0 262501AC */ addiu $a1, $s1, 0x1ac -/* 07E6F4 7F049BC4 0FC18786 */ jal sub_GAME_7F061E18 -/* 07E6F8 7F049BC8 02803025 */ move $a2, $s4 -/* 07E6FC 7F049BCC 10000021 */ b .L7F049C54 -/* 07E700 7F049BD0 00409025 */ move $s2, $v0 -.L7F049BD4: -/* 07E704 7F049BD4 1682000B */ bne $s4, $v0, .L7F049C04 -/* 07E708 7F049BD8 00000000 */ nop -/* 07E70C 7F049BDC 8E030004 */ lw $v1, 4($s0) -/* 07E710 7F049BE0 02402025 */ move $a0, $s2 -/* 07E714 7F049BE4 02803025 */ move $a2, $s4 -/* 07E718 7F049BE8 906E0003 */ lbu $t6, 3($v1) -/* 07E71C 7F049BEC 56AE001A */ bnel $s5, $t6, .L7F049C58 -/* 07E720 7F049BF0 8E100024 */ lw $s0, 0x24($s0) -/* 07E724 7F049BF4 0FC18786 */ jal sub_GAME_7F061E18 -/* 07E728 7F049BF8 8C6500CC */ lw $a1, 0xcc($v1) -/* 07E72C 7F049BFC 10000015 */ b .L7F049C54 -/* 07E730 7F049C00 00409025 */ move $s2, $v0 -.L7F049C04: -/* 07E734 7F049C04 56C20014 */ bnel $s6, $v0, .L7F049C58 -/* 07E738 7F049C08 8E100024 */ lw $s0, 0x24($s0) -/* 07E73C 7F049C0C 8E0F0004 */ lw $t7, 4($s0) -/* 07E740 7F049C10 51E00011 */ beql $t7, $zero, .L7F049C58 -/* 07E744 7F049C14 8E100024 */ lw $s0, 0x24($s0) -/* 07E748 7F049C18 0FC26C57 */ jal getPlayerPointerIndex -/* 07E74C 7F049C1C 02002025 */ move $a0, $s0 -/* 07E750 7F049C20 0FC26C54 */ jal get_cur_playernum -/* 07E754 7F049C24 00408825 */ move $s1, $v0 -/* 07E758 7F049C28 1051000A */ beq $v0, $s1, .L7F049C54 -/* 07E75C 7F049C2C 02402025 */ move $a0, $s2 -/* 07E760 7F049C30 8E110004 */ lw $s1, 4($s0) -/* 07E764 7F049C34 02803025 */ move $a2, $s4 -/* 07E768 7F049C38 0FC18786 */ jal sub_GAME_7F061E18 -/* 07E76C 7F049C3C 26250180 */ addiu $a1, $s1, 0x180 -/* 07E770 7F049C40 00402025 */ move $a0, $v0 -/* 07E774 7F049C44 262501AC */ addiu $a1, $s1, 0x1ac -/* 07E778 7F049C48 0FC18786 */ jal sub_GAME_7F061E18 -/* 07E77C 7F049C4C 02803025 */ move $a2, $s4 -/* 07E780 7F049C50 00409025 */ move $s2, $v0 -.L7F049C54: -/* 07E784 7F049C54 8E100024 */ lw $s0, 0x24($s0) -.L7F049C58: -/* 07E788 7F049C58 5600FFD1 */ bnezl $s0, .L7F049BA0 -/* 07E78C 7F049C5C 92020000 */ lbu $v0, ($s0) -.L7F049C60: -/* 07E790 7F049C60 8FBF0034 */ lw $ra, 0x34($sp) -/* 07E794 7F049C64 02401025 */ move $v0, $s2 -/* 07E798 7F049C68 8FB20020 */ lw $s2, 0x20($sp) -/* 07E79C 7F049C6C 8FB00018 */ lw $s0, 0x18($sp) -/* 07E7A0 7F049C70 8FB1001C */ lw $s1, 0x1c($sp) -/* 07E7A4 7F049C74 8FB30024 */ lw $s3, 0x24($sp) -/* 07E7A8 7F049C78 8FB40028 */ lw $s4, 0x28($sp) -/* 07E7AC 7F049C7C 8FB5002C */ lw $s5, 0x2c($sp) -/* 07E7B0 7F049C80 8FB60030 */ lw $s6, 0x30($sp) -/* 07E7B4 7F049C84 03E00008 */ jr $ra -/* 07E7B8 7F049C88 27BD0038 */ addiu $sp, $sp, 0x38 -) + if ((((((s32) door->openedTime) > 0) && (((s32) door->openedTime) < (((s32) g_GlobalTimer) - ((s32) door->autoCloseFrames)))) && (door->openstate == DOORSTATE_STATIONARY)) && (!(door->flags & PROPFLAG_DOOR_KEEPOPEN))) #endif + { + doorActivate(door, DOORSTATE_CLOSING); + } + + if (door->openstate == DOORSTATE_WAITING) + { + pad1AC = door->linkedDoor; + var_v1_5 = 1; + while ((pad1AC != NULL) && (pad1AC != door)) + { + if ((pad1AC->openstate != DOORSTATE_STATIONARY) || (pad1AC->openPosition > 0.0f)) + { + var_v1_5 = 0; + } + + pad1AC = pad1AC->linkedDoor; + } + if (var_v1_5 != 0) + { + doorSetOpenState(door, 1); + } + } + if (((door->doorType == DOORTYPE_FALLAWAY) && (doorIsClosed(door) != 0)) && (doorIsPadlockFree(door) != 0)) + { + doorActivateWrapper(prop); + } + + if ((door->lastcalc60i < g_GlobalTimer) || (g_ClockTimer == 0)) + { + door7F054FB4(door); + } + } + else if ((obj->type == PROPDEF_CCTV) && (!(obj->flags & PROPFLAG_IS_DRONE_GUN))) + { + bottom_pad = (struct CCTVRecord *) prop->obj; + + if (bottom_pad->unkD4 != 0) + { + m_RocketGravity = bottom_pad->unkCC; + } + else + { + m_RocketGravity = bottom_pad->unkD0; + } + + playerProp = getCurrentPlayerProp(); + xdiff = playerProp->pos.f[0] - obj->runtime_pos.f[0]; + temp_f0_13 = bottom_pad->unkE8; + ydiff = playerProp->pos.f[1] - obj->runtime_pos.f[1]; + temp_f14_3 = playerProp->pos.f[2] - obj->runtime_pos.f[2]; + cctvSeesPlayer = 1; + + if ((temp_f0_13 > 0.0f) && ((temp_f0_13 * temp_f0_13) < (((xdiff * xdiff) + (ydiff * ydiff)) + (temp_f14_3 * temp_f14_3)))) + { + cctvSeesPlayer = 0; + } + + if (obj->flags & PROPFLAG_INMOTION) + { + cctvSeesPlayer = 0; + } + + if (cctvSeesPlayer != 0) + { + temp_f0_14 = atan2f(xdiff, temp_f14_3); + var_f2 = bottom_pad->unkC8; + + if (var_f2 < 0.0f) + { + var_f2 += M_TAU_F; + } + else if (var_f2 >= M_TAU_F) + { + var_f2 -= M_TAU_F; + } + + var_f2 += bottom_pad->unkC4; + + if (var_f2 >= M_TAU_F) + { + var_f2 -= M_TAU_F; + } + + angleDelta = temp_f0_14 - var_f2; + + if (temp_f0_14 < var_f2) + { + angleDelta += M_TAU_F; + } + + angleDelta -= M_PI_F; + + if (angleDelta < 0.0f) + { + angleDelta += M_TAU_F; + } + + if (angleDelta > M_PI_F) + { + angleDelta -= M_TAU_F; + } + + if ((angleDelta > DegToRad(45)) || (angleDelta < DegToRad(-45))) + { + cctvSeesPlayer = 0; + } + } + + if (cctvSeesPlayer != 0) + { + sp4F0 = prop->stan; + bondviewUpdateGuardTankFlagsRelated(playerProp, 0); + if (stanTestLineUnobstructed(&sp4F0, prop->pos.f[0], prop->pos.f[2], playerProp->pos.f[0], playerProp->pos.f[2], 0x1B, 100.0f, 100.0f, 0.0f, 1.0f) != 0) + { + bottom_pad->timer += g_ClockTimer; + if (bottom_pad->timer >= ((s32) (CCTV_ALARM_FRAMES * F_80030B14))) + { + alarmActivate(); + bottom_pad->timer = 0; + } + } + + bondviewUpdateGuardTankFlagsRelated(playerProp, 1); + } + + if (bottom_pad->unkC8 < m_RocketGravity) + { + var_f2_6 = ((bottom_pad->unkD8 * bottom_pad->unkD8) * 0.5f) / CAM_ACCEL; if ((m_RocketGravity - var_f2_6) <= bottom_pad->unkC8) + { + bottom_pad->unkD8 = (f32) (bottom_pad->unkD8 - (CAM_ACCEL * g_GlobalTimerDelta)); + if (bottom_pad->unkD8 < CAM_ACCEL) + { + bottom_pad->unkD8 = CAM_ACCEL; + } + } + else if (bottom_pad->unkD8 < bottom_pad->unkDC) + { + var_f2_6 = bottom_pad->unkD8 + (CAM_ACCEL * g_GlobalTimerDelta); + if (bottom_pad->unkDC < var_f2_6) + { + var_f2_6 = bottom_pad->unkDC; + } + + if (bottom_pad->unkC8 < (m_RocketGravity - (((var_f2_6 * var_f2_6) * 0.5f) / CAM_ACCEL))) + { + bottom_pad->unkD8 = var_f2_6; + } + } + + bottom_pad->unkC8 += bottom_pad->unkD8 * g_GlobalTimerDelta; + if (m_RocketGravity <= bottom_pad->unkC8) + { + bottom_pad->unkC8 = m_RocketGravity; + bottom_pad->unkD8 = 0.0f; + bottom_pad->unkD4 = 0; + } + } + else + { + var_f2_6 = ((bottom_pad->unkD8 * bottom_pad->unkD8) * 0.5f) / CAM_ACCEL; if (bottom_pad->unkC8 <= (m_RocketGravity + var_f2_6)) + { + bottom_pad->unkD8 = (f32) (bottom_pad->unkD8 - (CAM_ACCEL * g_GlobalTimerDelta)); + if (bottom_pad->unkD8 < CAM_ACCEL) + { + bottom_pad->unkD8 = CAM_ACCEL; + } + } + else if (bottom_pad->unkD8 < bottom_pad->unkDC) + { + var_f2_6 = bottom_pad->unkD8 + (CAM_ACCEL * g_GlobalTimerDelta); + if (bottom_pad->unkDC < var_f2_6) + { + var_f2_6 = bottom_pad->unkDC; + } + + if (bottom_pad->unkC8 > (m_RocketGravity + (((var_f2_6 * var_f2_6) * 0.5f) / CAM_ACCEL))) + { + bottom_pad->unkD8 = var_f2_6; + } + } + + bottom_pad->unkC8 -= bottom_pad->unkD8 * g_GlobalTimerDelta; + if (bottom_pad->unkC8 <= m_RocketGravity) + { + bottom_pad->unkC8 = m_RocketGravity; + bottom_pad->unkD8 = 0.0f; + bottom_pad->unkD4 = 1; + } + } + } + else if ((obj->type == PROPDEF_AUTOGUN) && (!(obj->flags & PROPFLAG_IS_DRONE_GUN))) + { + poAGun = (struct AutogunRecord *) prop->obj; + playerProp2 = getCurrentPlayerProp(); + AutogunSeesPlayer = 0; + isTracking = 0; + hasLineOfSight = 0; + if (obj->flags2 & PROPFLAG_IS_DOUBLE) + { + if (obj->flags2 & PROPFLAG2_40000000) + { + poAGun->unk98 = poAGun->unk9C; + poAGun->rot_related = poAGun->unk90; + } + else if ((poAGun->unk90 == poAGun->rot_related) && (poAGun->unk9C == poAGun->unk98)) + { + poAGun->unk98 = (((U32_TO_F32(randomGetNext()) * 39.0f) + 1.0f) * M_TAU_F) / 360.0f; //degtorad + poAGun->rot_related = U32_TO_F32(randomGetNext()) * M_TAU_F; + } + + chrobjCallsApplySpeed(&poAGun->unk90, poAGun->rot_related, &poAGun->unk94, AUTOGUN_YAW_ACCEL_PER_FRAME, AUTOGUN_YAW_ACCEL_PER_FRAME, AUTOGUN_YAW_MAX_SPEED); + chrobjCallsApplySpeed(&poAGun->unk9C, poAGun->unk98, &poAGun->unkA0, AUTOGUN_PITCH_ACCEL_PER_FRAME, AUTOGUN_PITCH_ACCEL_PER_FRAME, AUTOGUN_PITCH_MAX_SPEED); + } + else + { + var_f0_2 = playerProp2->pos.f[0] - obj->runtime_pos.f[0]; + playerDirVec.f[1] = (playerProp2->pos.f[1] - obj->runtime_pos.f[1]) - 20.0f;//Aim 20 units below player’s head + temp_f2_23 = playerProp2->pos.f[2] - obj->runtime_pos.f[2]; + horizontalDistSq = (var_f0_2 * var_f0_2) + (temp_f2_23 * temp_f2_23); + playerDirVec.f[2] = var_f0_2; + playerDirVec.f[0] = temp_f2_23; + horizontalDist = sqrtf(horizontalDistSq); + distanceToPlayer = horizontalDist; + if (obj->flags & PROPFLAG_DOOR_TWOWAY) + { + horizontalDistSq += playerDirVec.f[1] * playerDirVec.f[1]; + distanceToPlayer = sqrtf(horizontalDistSq); + } + + sp4A0 = chrlvGetAimLimitAngle(horizontalDistSq); + sp4D8 = poAGun->rot_related; + targetPitch = poAGun->unk98; + if (distanceToPlayer <= poAGun->aimdist) + { + if (sp4A0); + playerYaw = atan2f(playerDirVec.f[2], playerDirVec.f[0]); + playerPitch = atan2f(playerDirVec.f[1], horizontalDist); + if ((obj->flags & PROPFLAG_NO_AMMO) || (obj->flags & PROPFLAG_INMOTION)) + { + AutogunSeesPlayer = 1; + } + else + { + yawError = playerYaw - poAGun->unk90; + if (yawError < 0.0f) + { + yawError += M_TAU_F; + } + + if (yawError > M_PI_F) + { + yawError -= M_TAU_F; + } + + var_f2_6 = playerPitch - poAGun->unk9C; + if (var_f2_6 < 0.0f) + { + if (horizontalDist) + { + horizontalDist = (horizontalDist) ? (horizontalDist) : (horizontalDist); + } + } + + if ((yawError < DegToRad(70)) && (yawError > DegToRad(-70))) + { + AutogunSeesPlayer = 1; + } + } + + if (AutogunSeesPlayer != 0) + { + sp494 = playerYaw - poAGun->rot_related; + collisionTile = prop->stan; + if (sp494 < (-M_PI_F)) + { + sp494 += M_TAU_F; + } + else if (sp494 >= M_PI_F) + { + sp494 -= M_TAU_F; + } + + bondviewUpdateGuardTankFlagsRelated(playerProp2, 0); + if ((((sp494 <= poAGun->unk88) && (poAGun->unk8C <= sp494)) && (stanTestLineUnobstructed(&collisionTile, prop->pos.f[0], prop->pos.f[2], playerProp2->pos.f[0], playerProp2->pos.f[2], 0x1B, prop->pos.f[1], prop->pos.f[1], playerProp2->pos.f[1], playerProp2->pos.f[1]) != 0)) && ((collisionTile) == playerProp2->stan)) + { + obj->flags |= PROPFLAG_INMOTION; + hasLineOfSight = 1; + sp4D8 = playerYaw; + targetPitch = playerPitch; + } + else if ((poAGun->unkB8 >= 0) && ((g_GlobalTimer - AUTOGUN_TRACKING_FRAMES) < poAGun->unkB8)) //cooldown 2 seconds + { + sp4D8 = poAGun->unk90; + targetPitch = poAGun->unk9C; + } + else + { + AutogunSeesPlayer = 0; + } + + bondviewUpdateGuardTankFlagsRelated(playerProp2, 1); + } + } + + if (AutogunSeesPlayer != 0) + { + sp4A0 = chrlvGetAimLimitAngle(horizontalDistSq); + } + + if (poAGun->is_active != 0) + { + //Sway once every 2 seconds while firing + sp4D8 += (sp4A0 * 0.8f) * sinf((((f32) (((s32) g_GlobalTimer) % AUTOGUN_TRACKING_FRAMES)) * M_TAU_F) / (f32) AUTOGUN_TRACKING_FRAMES); + if (sp4D8 < 0.0f) + { + sp4D8 += M_TAU_F; + } + + if (sp4D8 >= M_TAU_F) + { + sp4D8 -= M_TAU_F; + } + } + + var_f0_2 = sp4D8 - poAGun->rot_related; + if (var_f0_2 < (-M_PI_F)) + { + var_f0_2 += M_TAU_F; + } + else if (var_f0_2 >= M_PI_F) + { + var_f0_2 -= M_TAU_F; + } + + if (poAGun->unk88 < var_f0_2) + { + sp4D8 = poAGun->rot_related + poAGun->unk88; + } + else if (var_f0_2 < poAGun->unk8C) + { + sp4D8 = poAGun->rot_related + poAGun->unk8C; + } + + if (sp4D8 < 0.0f) + { + sp4D8 += M_TAU_F; + } + + if (sp4D8 >= M_TAU_F) + { + sp4D8 -= M_TAU_F; + } + + chrobjCallsApplySpeed(&poAGun->unk90, sp4D8, &poAGun->unk94, AUTOGUN_ALERT_ACCEL_PER_FRAME , AUTOGUN_ALERT_ACCEL_PER_FRAME , poAGun->speed); + chrobjCallsApplySpeed(&poAGun->unk9C, targetPitch, &poAGun->unkA0, AUTOGUN_ALERT_ACCEL_PER_FRAME , AUTOGUN_ALERT_ACCEL_PER_FRAME , poAGun->speed); + temp_f12_5 = sp4D8 - poAGun->unk90; + if (temp_f12_5 < 0.0f) + { + temp_f12_5 += M_TAU_F; + } + + if (temp_f12_5 > M_PI_F) + { + temp_f12_5 -= M_TAU_F; + } + + var_f2_6 = targetPitch - poAGun->unk9C; yawError = targetPitch; + if (var_f2_6 < 0.0f) + { + var_f2_6 += M_TAU_F; + } + + if (var_f2_6 > M_PI_F) + { + var_f2_6 -= M_TAU_F; + } + + poAGun->is_active = 0; + if (AutogunSeesPlayer != 0) + { + if ((((temp_f12_5 < sp4A0) && ((-sp4A0) < temp_f12_5)) && (var_f2_6 < sp4A0)) && ((-sp4A0) < var_f2_6)) + { + poAGun->is_active = 1; + isTracking = 1; + if (hasLineOfSight != 0) + { + poAGun->unkB8 = (s32) g_GlobalTimer; + poAGun->unkBC = (s32) g_GlobalTimer; + } + } + else + { + angleDelta_6 = 2.0f * sp4A0; + if ((((temp_f12_5 < angleDelta_6) && ((-angleDelta_6) < temp_f12_5)) && (var_f2_6 < angleDelta_6)) && ((-angleDelta_6) < var_f2_6)) + { + poAGun->is_active = 1; + isTracking = 1; + if (hasLineOfSight != 0) + { + poAGun->unkB8 = (s32) g_GlobalTimer; + } + } + else if ((poAGun->unkB8 >= 0) && ((g_GlobalTimer - AUTOGUN_TRACKING_FRAMES) < poAGun->unkB8)) + { + poAGun->is_active = 1; + isTracking = 1; + } + } + } + + if (isTracking != 0) //firing + { + poAGun->unkB0 += AUTOGUN_SPIN_ACCEL_PER_FRAME * g_GlobalTimerDelta; + if (poAGun->unkB0 > AUTOGUN_SPIN_MAX_SPEED) + { + poAGun->unkB0 = AUTOGUN_SPIN_MAX_SPEED; + } + } + else if (poAGun->unkB0 > 0.0f) + { + for (var_v0_3 = 0; var_v0_3 < g_ClockTimer; var_v0_3++) + { + poAGun->unkB0 *= 0.99f; //barrel loses 45% of its spin per second when idle + } + + + if (poAGun->unkB0 <= 0.0001f) + { + poAGun->unkB0 = 0.0f; + } + } + + if (poAGun->unkB0 > 0.0f) + { + poAGun->unkB4 += poAGun->unkB0 * g_GlobalTimerDelta; + while (poAGun->unkB4 >= M_TAU_F) + { + poAGun->unkB4 -= M_TAU_F; + } + + } + } + } + else if (obj->type == PROPDEF_VEHICHLE) + { + poTruck = (struct VehichleRecord *) obj; + targetYaw = poTruck->roty; + waypointPosition = NULL; + + ai((PropDefHeaderRecord *) poTruck, 1); + + if (poTruck->speedtime60 >= 0.0f) + { + if (poTruck->speedtime60 <= g_GlobalTimerDelta) + { + poTruck->speed = poTruck->speedaim; + } + else + { + poTruck->speed += ((poTruck->speedaim - poTruck->speed) * g_GlobalTimerDelta) / poTruck->speedtime60; + } + + poTruck->speedtime60 -= g_GlobalTimerDelta; + } + + truckShouldPlayEngineSound = 0; + + if (((!(obj->flags2 & PROPFLAG2_00080000)) && (objIsHealthy(obj) != 0)) && ((poTruck->speed > 0.0f) || (poTruck->speedaim > 0.0f))) + { + truckShouldPlayEngineSound = sub_GAME_7F053894(&poTruck->runtime_pos, 2000.0f, 3000.0f); + } + + if (truckShouldPlayEngineSound > 0) + { + if (((poTruck->Sound == NULL) || (sndGetPlayingState(poTruck->Sound) == 0)) && (lvlGetControlsLockedFlag() == 0)) + { + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, TRUCK_RUN_SFX, &poTruck->Sound); + } + + if (poTruck->Sound != NULL) + { + sndCreatePostEvent(poTruck->Sound, 8, truckShouldPlayEngineSound); + } + } + else if ((poTruck->Sound != NULL) && (sndGetPlayingState(poTruck->Sound) != 0)) + { + sndDeactivate(poTruck->Sound); + } + + if (poTruck->path != NULL) + { + temp_a1_6 = &poTruck->path->waypoints[poTruck->nextstep]; + currentWaypoint = &g_CurrentSetup.pathwaypoints[*temp_a1_6]; + waypointPosition = &g_CurrentSetup.pads[currentWaypoint->padID].pos; + targetYaw = atan2f(waypointPosition->f[0] - poTruck->runtime_pos.f[0], waypointPosition->f[2] - poTruck->runtime_pos.f[2]); + if (poTruck->flags & PROPFLAG_INMOTION) + { + poTruck->roty = targetYaw; + obj->flags &= ~PROPFLAG_INMOTION; + sub_GAME_7F044B38(poTruck); + } + } + else if (poTruck->flags & PROPFLAG_INMOTION) + { + poTruck->roty = atan2f(poTruck->mtx.m[2][0], poTruck->mtx.m[2][2]); + poTruck->flags &= ~PROPFLAG_INMOTION; + sub_GAME_7F044B38(poTruck); + } + + if (poTruck->speed > 0.0f) + { + truckAngularVelocity = 0.0f; + currentTile = prop->stan; + previousYaw = poTruck->roty; + sp434 = poTruck->turnrot60; + if (waypointPosition != NULL) + { + truckAngularVelocity = 0.0f; + forwardDir.f[0] = sinf(poTruck->roty); + forwardDir.f[1] = 0.0f; + forwardDir.f[2] = cosf(poTruck->roty); + if (chrlvGeometryRelated7F02FC34(&poTruck->runtime_pos, &forwardDir, waypointPosition, 10.0f) != 0) + { + targetYaw = poTruck->roty; + } + } + + chrobjCallsApplySpeed(&poTruck->roty, targetYaw, &poTruck->turnrot60, TRUCK_TURN_ACCEL_PER_FRAME, TRUCK_TURN_DECEL_PER_FRAME, TRUCK_TURN_MAX_SPEED); + while (poTruck->roty >= M_TAU_F) + { + poTruck->roty -= M_TAU_F; + } + + + while (poTruck->roty < 0.0f) + { + poTruck->roty += M_TAU_F; + } + + + if (targetYaw == poTruck->roty) + { + if ((poTruck->turnrot60 <= TRUCK_TURN_DECEL_PER_FRAME) && (poTruck->turnrot60 >= (-TRUCK_TURN_DECEL_PER_FRAME))) + { + poTruck->turnrot60 = 0.0f; + } + } + + temp_s0_5 = (f32 *) model->obj->Switches[3]->Data; + if (g_GlobalTimerDelta > 0.0f) + { + truckAngularVelocity = (poTruck->roty - previousYaw) / g_GlobalTimerDelta; + } + + if (truckAngularVelocity < 0.0f) + { + truckAngularVelocity += M_TAU_F; + } + + sp460 = ((temp_s0_5[2] * model->scale) * sinf(truckAngularVelocity)) * g_GlobalTimerDelta; + forwardDir.f[0] = sinf(poTruck->roty); + forwardDir.f[1] = 0.0f; + forwardDir.f[2] = cosf(poTruck->roty); + RocketCurrent.f[0] = (poTruck->runtime_pos.f[0] + ((poTruck->speed * g_GlobalTimerDelta) * forwardDir.f[0])) - (forwardDir.f[2] * sp460); + RocketCurrent.f[1] = poTruck->runtime_pos.f[1]; + RocketCurrent.f[2] = (poTruck->runtime_pos.f[2] + ((poTruck->speed * g_GlobalTimerDelta) * forwardDir.f[2])) + (forwardDir.f[0] * sp460); + if ((stanTestLineUnobstructed(¤tTile, prop->pos.f[0], prop->pos.f[2], RocketCurrent.f[0], RocketCurrent.f[2], 0x1F, 0.0f, 1.0f, 0.0f, 1.0f) != 0) && (stanTestVolume(¤tTile, RocketCurrent.f[0], RocketCurrent.f[2], 10.0f, 0x1F, 0.0f, 1.0f) < 0)) + { + nextTile = prop->stan; + sp450.f[0] = prop->pos.f[0]; + sp450.f[1] = prop->pos.f[1]; + sp450.f[2] = prop->pos.f[2]; + prop->stan = currentTile; + poTruck->runtime_pos.f[0] = (prop->pos.f[0] = RocketCurrent.f[0]); + poTruck->runtime_pos.f[2] = (prop->pos.f[2] = RocketCurrent.f[2]); + chrobjCollisionRelated(obj); + setupUpdateObjectRoomPosition(obj); + var_s2_5 = sub_GAME_7F0448A8(prop); + if (var_s2_5 != 0) + { + temp_v0_25 = (f32 *) model->obj->Switches[10]->Data; + vec424.f[0] = temp_v0_25[1] * poTruck->mtx.m[0][0]; + vec424.f[2] = temp_v0_25[1] * poTruck->mtx.m[0][2]; + vec418.f[0] = temp_v0_25[2] * poTruck->mtx.m[0][0]; + vec418.f[2] = temp_v0_25[2] * poTruck->mtx.m[0][2]; + vec40C.f[0] = temp_v0_25[5] * poTruck->mtx.m[2][0]; + vec40C.f[2] = temp_v0_25[5] * poTruck->mtx.m[2][2]; + vec400.f[0] = temp_v0_25[6] * poTruck->mtx.m[2][0]; + vec400.f[2] = temp_v0_25[6] * poTruck->mtx.m[2][2]; + currentTile = prop->stan; + if (((((walkTilesBetweenPoints_NoCallback(¤tTile, prop->pos.f[0], prop->pos.f[2], (prop->pos.f[0] + vec424.f[0]) + vec40C.f[0], (prop->pos.f[2] + vec424.f[2]) + vec40C.f[2]) == 0) || (walkTilesBetweenPoints_NoCallback(¤tTile, (prop->pos.f[0] + vec424.f[0]) + vec40C.f[0], (prop->pos.f[2] + vec424.f[2]) + vec40C.f[2], (prop->pos.f[0] + vec418.f[0]) + vec40C.f[0], (prop->pos.f[2] + vec418.f[2]) + vec40C.f[2]) == 0)) || (walkTilesBetweenPoints_NoCallback(¤tTile, (prop->pos.f[0] + vec418.f[0]) + vec40C.f[0], (prop->pos.f[2] + vec418.f[2]) + vec40C.f[2], (prop->pos.f[0] + vec418.f[0]) + vec400.f[0], (prop->pos.f[2] + vec418.f[2]) + vec400.f[2]) == 0)) || (walkTilesBetweenPoints_NoCallback(¤tTile, (prop->pos.f[0] + vec418.f[0]) + vec400.f[0], (prop->pos.f[2] + vec418.f[2]) + vec400.f[2], (prop->pos.f[0] + vec424.f[0]) + vec400.f[0], (prop->pos.f[2] + vec424.f[2]) + vec400.f[2]) == 0)) || (walkTilesBetweenPoints_NoCallback(¤tTile, (prop->pos.f[0] + vec424.f[0]) + vec400.f[0], (prop->pos.f[2] + vec424.f[2]) + vec400.f[2], (prop->pos.f[0] + vec424.f[0]) + vec40C.f[0], (prop->pos.f[2] + vec424.f[2]) + vec40C.f[2]) == 0)) + { + var_s2_5 = 0; + } + } + + if (var_s2_5 != 0) + { + sub_GAME_7F044B38(poTruck); + sub_GAME_7F0402B4(prop, &poTruck->nextcol); + detonate_proxmine_In_range(&poTruck->runtime_pos); + if ((waypointPosition != NULL) && (chrlvIsArrivingLaterallyAtPos(&sp450, &RocketCurrent, waypointPosition, 100.0f) != 0)) + { + poTruck->nextstep++; + if (poTruck->path->waypoints[poTruck->nextstep] < 0) + { + poTruck->path = NULL; + poTruck->speedaim = 0.0f; + poTruck->speedtime60 = 60.0f; + } + } + } + else + { + if (poTruck->speedtime60 < 0.0f) + { + poTruck->speedaim = (f32) poTruck->speed; + poTruck->speedtime60 = 60.0f; + } + + poTruck->speed = 0.0f; + poTruck->roty = previousYaw; + poTruck->turnrot60 = sp434; + prop->stan = nextTile; + obj->runtime_pos.f[0] = (prop->pos.f[0] = sp450.f[0]); + obj->runtime_pos.f[1] = (prop->pos.f[1] = sp450.f[1]); + obj->runtime_pos.f[2] = (prop->pos.f[2] = sp450.f[2]); + chrobjCollisionRelated(obj); + setupUpdateObjectRoomPosition(obj); + } + } + else + { + if (poTruck->speedtime60 < 0.0f) + { + poTruck->speedaim = (f32) poTruck->speed; + poTruck->speedtime60 = 60.0f; + } + + poTruck->speed = 0.0f; + poTruck->roty = previousYaw; + poTruck->turnrot60 = sp434; + } + } + else if (poTruck->flags & PROPFLAG_INMOTION) + { + poTruck->roty = atan2f(poTruck->mtx.m[2][0], poTruck->mtx.m[2][2]); + poTruck->flags &= ~PROPFLAG_INMOTION; + sub_GAME_7F044B38(poTruck); + } + } + else if (obj->type == PROPDEF_AIRCRAFT) + { + render_pad2F4 = (struct AircraftRecord *) obj; + + ai((PropDefHeaderRecord *) render_pad2F4, 1); + + temp_s0_6 = render_pad2F4->model; + + if (temp_s0_6->anim != NULL) + { + setsuboffset(temp_s0_6, &render_pad2F4->runtime_pos); +#if defined(VERSION_EU) + modelSetAnimPlaySpeed(render_pad2F4->model, 1.2f, 0.0f); +#endif + temp_s0_6 = render_pad2F4->model; + + if (temp_s0_6->anim == animation_table_ptrs2[1]) + { + modelSetAnimTranslationScale(temp_s0_6, 10.438f); + setsubroty(render_pad2F4->model, M_PI_F); + } + else if (bossGetStageNum() == 22) + { + modelSetAnimTranslationScale(render_pad2F4->model, 1.0438f); + setsubroty(render_pad2F4->model, 2.3561945f); + } + else if (bossGetStageNum() == 26) + { + modelSetAnimTranslationScale(render_pad2F4->model, 1.0438f); + setsubroty(render_pad2F4->model, 3.9269907f); + } + else + { + modelSetAnimTranslationScale(render_pad2F4->model, 1.0438f); + setsubroty(render_pad2F4->model, 0.0f); + } + + modelTickAnim(render_pad2F4->model, g_ClockTimer, 1); + subcalcpos(render_pad2F4->model); + getsuboffset(render_pad2F4->model, &render_pad2F4->runtime_pos); + prop->pos.f[0] = render_pad2F4->runtime_pos.f[0]; + prop->pos.f[2] = render_pad2F4->runtime_pos.f[2]; + if (render_pad2F4->pad < 10000) + { + var_v1_4 = &g_CurrentSetup.pads[render_pad2F4->pad]; + } + else + { + var_v1_4 = (PadRecord *) (&g_CurrentSetup.boundpads[render_pad2F4->pad - 10000]); + } + + prop->pos.f[1] = var_v1_4->pos.f[1] + render_pad2F4->runtime_pos.f[1]; + render_pad2F4->runtime_pos.f[1] = prop->pos.f[1]; + setsuboffset(render_pad2F4->model, &render_pad2F4->runtime_pos); + } + + angleDelta = render_pad2F4->speedtime60; + if (angleDelta >= 0.0f) + { + if (angleDelta <= g_GlobalTimerDelta) + { + render_pad2F4->speed = (f32) render_pad2F4->speedaim; + angleDelta = *((volatile f32 *) (&render_pad2F4->speedtime60)); + } + else + { + render_pad2F4->speed += ((render_pad2F4->speedaim - render_pad2F4->speed) * g_GlobalTimerDelta) / angleDelta; + } + + render_pad2F4->speedtime60 = (f32) (angleDelta - g_GlobalTimerDelta); + } + + if (render_pad2F4->rotaryspeedtime >= 0.0f) + { + if (render_pad2F4->rotaryspeedtime <= g_GlobalTimerDelta) + { + render_pad2F4->rotaryspeed = (f32) render_pad2F4->rotaryspeedaim; + } + else + { + angleDelta = render_pad2F4->rotaryspeed; + render_pad2F4->rotaryspeed += ((render_pad2F4->rotaryspeedaim - render_pad2F4->rotaryspeed) * g_GlobalTimerDelta) / render_pad2F4->rotaryspeedtime; + } + + render_pad2F4->rotaryspeedtime -= g_GlobalTimerDelta; + } + + truckShouldPlayEngineSound = 0; + if ((((!(render_pad2F4->flags2 & PROPFLAG2_00080000)) && (objIsHealthy(obj) != 0)) && (render_pad2F4->rotaryspeed != 0.0f)) && (!(render_pad2F4->flags & PROPFLAG_INMOTION))) + { + truckShouldPlayEngineSound = sub_GAME_7F053894(&render_pad2F4->runtime_pos, 5000.0f, 6000.0f); + } + + if (truckShouldPlayEngineSound > 0) + { + if (((render_pad2F4->Sound == NULL) || (sndGetPlayingState(render_pad2F4->Sound) == 0)) && (lvlGetControlsLockedFlag() == 0)) + { + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, HELI_RUN_SFX, &render_pad2F4->Sound); + } + + if (render_pad2F4->Sound != NULL) + { + sndCreatePostEvent(render_pad2F4->Sound, 8, truckShouldPlayEngineSound); + } + } + else if ((render_pad2F4->Sound != NULL) && (sndGetPlayingState(render_pad2F4->Sound) != 0)) + { + sndDeactivate(render_pad2F4->Sound); + } + } + } + + if (obj->type == PROPDEF_TINTED_GLASS) + { + pad268 = (struct TintedGlassRecord *) prop->obj; + pad268->calculatedopacity = glassCalculateOpacity(&obj->runtime_pos, pad268->TintDist, pad268->CullDist, pad268->unk90); + if ((pad268->portalnum >= 0) && (playerCount == 1)) + { + if (pad268->calculatedopacity == 0xFF) + { + bgToggleDataPortalsContrlBytes1Bit1(pad268->portalnum, 0); + } + else + { + bgToggleDataPortalsContrlBytes1Bit1(pad268->portalnum, 1); + } + } + + applyFogCull = FALSE; + } + else if ((obj->type == PROPDEF_DOOR) && (((struct DoorRecord *) obj)->doorFlags & DOORFLAG_WINDOWED)) + { + pad36C = (struct DoorRecord *) prop->obj; + var_s2_6 = 1; + pad36C->calculatedopacity = glassCalculateOpacity(&obj->runtime_pos, pad36C->TintDist, *((s32 *) (((u8 *) pad36C) + 0xC4)), 0.0f); + if (playerCount == 1) + { + if ((pad36C->calculatedopacity != 0xFF) || (pad36C->openPosition > 0.0f)) + { + var_s2_6 = 0; + } + + temp_v0_29 = model->obj; + if ((temp_v0_29->Skeleton == (&skeleton_door)) && (modelGetNodeRwData(model, temp_v0_29->Switches[1])->Switch.visible == 0)) + { + var_s2_6 = 0; + } + + if (var_s2_6 != 0) + { + doorDeactivatePortal(pad36C); + } + else + { + doorActivatePortal(pad36C); + } + } + } + + if ((obj->type == PROPDEF_TANK) && (get_ptr_for_players_tank() == prop)) + { + var_v1_5 = 1; + } + else if (obj->flags2 & PROPFLAG2_04000000) + { + var_v1_5 = 1; + } + else + { + var_v1_5 = ((!(obj->runtime_bitflags & RUNTIMEBITFLAG_00000800)) && (!(obj->flags2 & PROPFLAG2_00080000))) ? (posIsOnScreen(prop, &obj->runtime_pos, getinstsize(model), applyFogCull)) : (0); + } + + if (var_v1_5 != 0) + { + if (isSimOwner) + { + update_color_shading(&obj->shadecol, &obj->nextcol); + } + + prop->flags |= PROPFLAG_ONSCREEN; + mtxs = dynAllocate(model->obj->numMatrices << 6); + model->render_pos = (RenderPosView *) mtxs; + + if (obj->type == PROPDEF_DOOR) + { + sp39C = (struct DoorRecord *) prop->obj; + door7F0526EC(sp39C, mtxs); + matrix_4x4_multiply_homogeneous_in_place(camGetWorldToScreenMtxf(), mtxs); + + if (model->obj->Skeleton == (&skeleton_eyelid_door)) + { + sp394 = M_TAU_F - ((sp39C->openPosition * M_TAU_F) / 360.0f); + render_pad388 = &mtxs[1]; + temp_s0_10 = (Mtxf *) model->obj->Switches[1]->Data; + matrix_4x4_set_rotation_around_x(sp394, render_pad388); + matrix_4x4_set_position((struct coord3d *) temp_s0_10, render_pad388); + matrix_4x4_multiply_in_place(mtxs, render_pad388); + render_pad388 = &mtxs[2]; + temp_s0_10 = (Mtxf *) model->obj->Switches[2]->Data; + matrix_4x4_set_rotation_around_x(M_TAU_F - sp394, render_pad388); + matrix_4x4_set_position((struct coord3d *) temp_s0_10, render_pad388); + matrix_4x4_multiply_in_place(mtxs, render_pad388); + } + else if (model->obj->Skeleton == (&skeleton_iris_door)) + { + sp380 = 0.0f; + sp384 = (sp39C->openPosition * M_TAU_F) / 360.0f; + temp_f0_31 = sp39C->maxFrac * 0.3f; + if (temp_f0_31 < sp39C->openPosition) + { + sp380 = (((sp39C->maxFrac * (sp39C->openPosition - temp_f0_31)) / (sp39C->maxFrac - temp_f0_31)) * M_TAU_F) / 360.0f; + if (isSimOwner) + { + if (previousOpenPosition <= temp_f0_31) + { + chrobjSndCreatePostEventDefault(sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, METAL_SLIDE_OPEN_SFX, NULL), &prop->pos); + } + } + } + else if (isSimOwner) + { + if (temp_f0_31 < previousOpenPosition) + { + chrobjSndCreatePostEventDefault(sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, METAL_SLIDE_CLOSE_SFX, NULL), &prop->pos); + } + } + + sp38C = 0; + do + { + temp_v0_32 = sp38C << 1; + var_v1_5 = temp_v0_32 + 2; + sp390 = (Mtxf *) model->obj->Switches[temp_v0_32 + 1]->Data; + matrix_4x4_set_rotation_around_z(sp380, (Mtxf *) ((((u8 *) mtxs) + (temp_v0_32 * (sizeof(Mtxf)))) + (sizeof(Mtxf)))); + matrix_4x4_set_position((struct coord3d *) sp390, (Mtxf *) ((((u8 *) mtxs) + (temp_v0_32 * (sizeof(Mtxf)))) + (sizeof(Mtxf)))); + matrix_4x4_multiply_in_place(mtxs, (Mtxf *) ((((u8 *) mtxs) + (temp_v0_32 * (sizeof(Mtxf)))) + (sizeof(Mtxf)))); + sp390 = (Mtxf *) model->obj->Switches[var_v1_5]->Data; + matrix_4x4_set_rotation_around_z(sp384, (Mtxf *) (((u8 *) mtxs) + (var_v1_5 << 6))); + matrix_4x4_set_position((struct coord3d *) sp390, &mtxs[var_v1_5]); + matrix_4x4_multiply_in_place((Mtxf *) ((((u8 *) mtxs) + (temp_v0_32 * (sizeof(Mtxf)))) + (sizeof(Mtxf))), &mtxs[var_v1_5]); + sp38C++; + } + + while (sp38C != 6); + } + } + else + { + matrix_4x4_copy(&obj->mtx, &tempMatrix2); + matrix_4x4_set_position(&obj->runtime_pos, &tempMatrix2); + matrix_4x4_multiply_homogeneous(camGetWorldToScreenMtxf(), &tempMatrix2, mtxs); + + if (obj->type == PROPDEF_CCTV) + { + sp370 = (struct CCTVRecord *) prop->obj; + angleDelta_7 = sp370->unkC8; + temp_s0_13 = (struct coord3d *) model->obj->Switches[0]->Data; + + if (angleDelta_7 < 0.0f) + { + angleDelta_7 += M_TAU_F; + } + else if (angleDelta_7 >= M_TAU_F) + { + angleDelta_7 -= M_TAU_F; + } + + matrix_4x4_set_rotation_around_y(angleDelta_7, &tempMatrix); + matrix_4x4_multiply(&tempMatrix, &sp370->unk84, &mtxs[1]); + sp360.f[0] = temp_s0_13->f[0]; + sp360.f[1] = temp_s0_13->f[1]; + sp360.f[2] = temp_s0_13->f[2]; + mtx4TransformVecInPlace(&tempMatrix2, &sp360); + matrix_4x4_set_position(&sp360, &mtxs[1]); + matrix_4x4_multiply_homogeneous_in_place(camGetWorldToScreenMtxf(), &mtxs[1]); + } + else if (obj->type == PROPDEF_AUTOGUN) + { + sp318 = (struct AutogunRecord *) prop->obj; + sp304 = sp318->unk90 + M_PI_2F; + sp300 = -sp318->unk9C; + + if (sp304 >= M_TAU_F) + { + sp304 -= M_TAU_F; + } + + temp_s0_13 = model->obj->Switches[1]->Data; + sp308.f[0] = temp_s0_13->f[0]; + sp308.f[1] = temp_s0_13->f[1]; + sp308.f[2] = temp_s0_13->f[2]; + + mtx4TransformVecInPlace(&tempMatrix2, &sp308); + matrix_4x4_set_rotation_around_y(sp304, &mtxs[1]); + matrix_4x4_set_position(&sp308, &mtxs[1]); + matrix_scalar_multiply(sp318->model->scale, mtxs[1].m[0]); + matrix_4x4_multiply_homogeneous_in_place(camGetWorldToScreenMtxf(), &mtxs[1]); + temp_s0_13 = (struct coord3d *) model->obj->Switches[2]->Data; + matrix_4x4_set_rotation_around_z(sp300, &mtxs[2]); + matrix_4x4_set_position(temp_s0_13, &mtxs[2]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[1], &mtxs[2]); + + if (model->obj->Switches[3] != NULL) + { + sp2FC = modelFindNodeMtx(model, model->obj->Switches[3], 0); + temp_s0_13 = (struct coord3d *) model->obj->Switches[3]->Data; + matrix_4x4_set_rotation_around_x(sp318->unkB4, sp2FC); + matrix_4x4_set_position(temp_s0_13, sp2FC); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[2], sp2FC); + } + + if (model->obj->Switches[4] != NULL) + { + sp2FC = modelFindNodeMtx(model, model->obj->Switches[4], 0); + temp_s0_13 = (struct coord3d *) model->obj->Switches[4]->Data; + matrix_4x4_set_identity_and_position(temp_s0_13, sp2FC); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[2], sp2FC); + } + + if (model->obj->Switches[6] != NULL) + { + sp2FC = modelFindNodeMtx(model, model->obj->Switches[6], 0); + temp_s0_13 = (struct coord3d *) model->obj->Switches[6]->Data; + matrix_4x4_set_rotation_around_x(sp318->unkB4, sp2FC); + matrix_4x4_set_position(temp_s0_13, sp2FC); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[2], sp2FC); + } + } + else if (obj->type == PROPDEF_COLLECTABLE) + { + Mtxf *temp_a1_4; + sp2F8 = 1; + + if (sp2F8 < model->obj->numMatrices) + { + do + { + matrix_4x4_set_identity((Mtxf *) (((u8 *) mtxs) + (sp2F8 * 64))); + sp2F8++; + } + + while (sp2F8 < model->obj->numMatrices); + } + } + else if (obj->type == PROPDEF_RACK) + { + matrix_4x4_set_identity_and_position(model->obj->Switches[0]->Data, &mtxs[1]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[0], &mtxs[1]); + matrix_4x4_set_identity_and_position(model->obj->Switches[1]->Data, &mtxs[2]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[0], &mtxs[2]); + matrix_4x4_set_identity_and_position(model->obj->Switches[2]->Data, &mtxs[3]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[0], &mtxs[3]); + matrix_4x4_set_identity_and_position(model->obj->Switches[3]->Data, &mtxs[4]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[0], &mtxs[4]); + } + else if (obj->type == PROPDEF_VEHICHLE) + { + struct VehichleRecord *vehicle_render = (struct VehichleRecord *) obj; + + var_f0_3 = 0.0f; + temp_v1_7 = model->obj->Switches; + sp260 = temp_v1_7[1]->Data; + sp25C = temp_v1_7[2]->Data; + sp258 = temp_v1_7[3]->Data; + sp254 = temp_v1_7[4]->Data; + temp_v0_25 = temp_v1_7[6]->Data; + sp250 = (temp_v0_25[4] - temp_v0_25[3]) * model->scale; + + if (isSimOwner) + { + var_f0_3 = ((vehicle_render->speed * g_GlobalTimerDelta) * M_TAU_F) / ((sp250 * M_TAU_F) * 0.5f); + vehicle_render->wheelxrot += var_f0_3; + while (vehicle_render->wheelxrot >= M_TAU_F) + { + vehicle_render->wheelxrot -= M_TAU_F; + } + + + while (vehicle_render->wheelxrot < 0.0f) + { + vehicle_render->wheelxrot += M_TAU_F; + } + + } + + vehicle_render->wheelxrot += var_f0_3; + while (vehicle_render->wheelxrot >= M_TAU_F) + { + vehicle_render->wheelxrot -= M_TAU_F; + } + + + while (vehicle_render->wheelxrot < 0.0f) + { + vehicle_render->wheelxrot += M_TAU_F; + } + + + matrix_4x4_set_rotation_around_x(vehicle_render->wheelxrot, &sp2AC); + if (vehicle_render->speed > 0.0f) + { + sp24C = vehicle_render->turnrot60; + sp250 = (sp258->f[2] - sp260->f[2]) * model->scale; + if (sp24C < 0.0f) + { + sp24C = -sp24C; + } + + sp248 = sinf(sp24C) * sp250; + vehicle_render->wheelyrot = atan2f(sp248, (cosf(sp24C) * sp250) - (sp250 - vehicle_render->speed)); + if (vehicle_render->wheelyrot < sp24C) + { + vehicle_render->wheelyrot = sp24C; + } + + if (vehicle_render->turnrot60 > 0.0f) + { + vehicle_render->wheelyrot = M_TAU_F - vehicle_render->wheelyrot; + } + } + + matrix_4x4_set_rotation_around_y(vehicle_render->wheelyrot, &sp26C); + matrix_4x4_copy(&sp2AC, &mtxs[3]); + matrix_4x4_set_position(sp258, &mtxs[3]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[0], &mtxs[3]); + matrix_4x4_copy(&sp2AC, &mtxs[4]); + matrix_4x4_set_position(sp254, &mtxs[4]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[0], &mtxs[4]); + matrix_4x4_multiply_homogeneous_in_place(&sp26C, &sp2AC); + matrix_4x4_copy(&sp2AC, &mtxs[1]); + matrix_4x4_set_position(sp260, &mtxs[1]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[0], &mtxs[1]); + matrix_4x4_copy(&sp2AC, &mtxs[2]); + matrix_4x4_set_position(sp25C, &mtxs[2]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[0], &mtxs[2]); + } + else if (obj->type == PROPDEF_AIRCRAFT) + { + struct AircraftRecord *aircraft_render = (struct AircraftRecord *) obj; + + sp1FC = model->obj->Switches[2]->Data; + + if ((g_ClockTimer > 0) && (isSimOwner)) + { + aircraft_render->rotoryrot += aircraft_render->rotaryspeed; + + while (aircraft_render->rotoryrot >= M_TAU_F) + { + aircraft_render->rotoryrot -= M_TAU_F; + } + + while (aircraft_render->rotoryrot < 0.0f) + { + aircraft_render->rotoryrot += M_TAU_F; + } + } + + if (aircraft_render->model->anim != NULL) + { + sp1B0 = D_80030B34; + sp1B0.basemtx = camGetWorldToScreenMtxf(); + sp1B0.mtxlist = &mtxs[0]; + subcalcmatrices(&sp1B0, aircraft_render->model); + } + else + { + matrix_4x4_copy(&mtxs[0], &mtxs[1]); + } + + if (aircraft_render->flags & PROPFLAG_INMOTION) + { + matrix_4x4_set_rotation_around_z(aircraft_render->rotoryrot, &sp200); + } + else + { + matrix_4x4_set_rotation_around_y(aircraft_render->rotoryrot, &sp200); + } + + matrix_4x4_copy(&sp200, &mtxs[2]); + matrix_4x4_set_position(sp1FC, &mtxs[2]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[1], &mtxs[2]); + + if (model->obj->Switches[3] != NULL) + { + temp_s0_14 = (struct coord3d *) model->obj->Switches[3]->Data; + temp_s0_21 = modelFindNodeMtx(model, model->obj->Switches[3], 0); + matrix_4x4_set_rotation_around_x(aircraft_render->rotoryrot, &sp200); + matrix_4x4_copy(&sp200, temp_s0_21); + matrix_4x4_set_position(temp_s0_14, temp_s0_21); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[1], temp_s0_21); + } + + if (model->obj->Switches[4] != NULL) + { + temp_s0_14 = (struct coord3d *) model->obj->Switches[4]->Data; + temp_s0_21 = modelFindNodeMtx(model, model->obj->Switches[4], 0); + matrix_4x4_set_identity_and_position(temp_s0_14, temp_s0_21); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[1], temp_s0_21); + } + } + else if (obj->type == PROPDEF_TANK) + { + struct TankRecord *tank_render = (struct TankRecord *) obj; + + temp_v1_7 = model->obj->Switches; + sp168 = temp_v1_7[1]->Data; + sp164 = temp_v1_7[3]->Data; + sp160 = temp_v1_7[4]->Data; + sp15C = temp_v1_7[2]->Data; + sp158 = temp_v1_7[6]->Data; + sp154 = -tank_render->turret_vertical_angle; + + if (sp154 < 0.0f) + { + sp154 += M_TAU_F; + } + + angleDelta_9 = -tank_render->turret_orientation_angle; + + if (angleDelta_9 < 0.0f) + { + angleDelta_9 += M_TAU_F; + } + + matrix_4x4_set_rotation_around_y(angleDelta_9, &mtxs[1]); + matrix_4x4_set_position(sp168, &mtxs[1]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[0], &mtxs[1]); + matrix_4x4_set_rotation_around_x(sp154, &mtxs[3]); + matrix_4x4_set_position(sp164, &mtxs[3]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[1], &mtxs[3]); + matrix_4x4_set_rotation_around_y(M_PI_2F, &mtxs[4]); + matrix_4x4_set_position(sp160, &mtxs[4]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[3], &mtxs[4]); + matrix_4x4_set_identity_and_position(sp15C, &mtxs[2]); + matrix_4x4_multiply_homogeneous_in_place(&mtxs[1], &mtxs[2]); + matrix_4x4_multiply_homogeneous(currentPlayerGetViewToWorldMtxf(), &mtxs[1], &sp16C); + sub_GAME_7F03F540(sp158, &sp16C, &tank_render->rect, (struct collision_data *) (&tank_render->collision)); + + if (model->obj->Switches[7] != NULL) + { + modelGetNodeRwData(model, model->obj->Switches[7])->Gunfire.visible = (s16) tank_render->is_firing_tank; + } + + if (model->obj->Switches[8] != NULL) + { + modelGetNodeRwData(model, model->obj->Switches[8])->Switch.visible = 0; + } + } + } + + modelUpdateRelationsQuick(model, model->obj->RootNode); + + prop->zDepth = -((Mtxf *) model->render_pos)[0].m[3][2]; + + chrobjWeaponTick(prop); + + { + struct PropRecord *current = prop->child; + while (current != NULL) + { + sp684 = current->prev; + sub_GAME_7F0442DC(current); + current = sp684; + } + + } + } + else + { + prop->flags &= ~PROPFLAG_ONSCREEN; + chrobjWeaponTick(prop); + { + struct PropRecord *current = prop->child; + while (current != NULL) + { + sp684 = current->prev; + sub_GAME_7F04424C(current); + current = sp684; + } + + } + } + + if (obj->runtime_bitflags & RUNTIMEBITFLAG_00000100) + { + obj->runtime_bitflags &= ~RUNTIMEBITFLAG_00000100; + objApplyDamage(obj, (U32_TO_F32(randomGetNext()) * 4.0f) + 2.0f, &prop->pos, 0, (s32) (((u32) (obj->runtime_bitflags & RUNTIMEBITFLAG_OWNER)) >> RUNTIMEBITSHIFT_OWNER)); + } + + if (isSimOwner) + { + if (obj->type == PROPDEF_DOOR) + { + sub_GAME_7F053A3C((struct DoorRecord *) prop->obj); + } + else if ((obj->type == PROPDEF_AUTOGUN) && (lvlGetControlsLockedFlag() == 0)) + { + struct AutogunRecord *autogun = (struct AutogunRecord *) prop->obj; + f32 beam_xdiff; + f32 dist_local; + struct beam *beam_local; + f32 beam_ydiff; + f32 beam_collisionTile; + u32 beam_pad[2]; + + sp13C = 0; + sp138 = 0; + + if ((autogun->is_active != 0) && (!(obj->flags & PROPFLAG_IS_DRONE_GUN))) + { + autogun->unkAC = autogun->unkAC + 1; + sp13C = (autogun->unkAC & 1) == 0; + + if (model->obj->Switches[5] != 0) + { + sp138 = (autogun->unkAC & 1) == 1; + } + + if (autogun->unkC0 < g_GlobalTimer) + { + if ((autogun->unkC4 != NULL) && (sndGetPlayingState(autogun->unkC4) != 0)) + { + sndDeactivate(autogun->unkC4); + } + + if ((autogun->unkC8 != NULL) && (sndGetPlayingState(autogun->unkC8) != 0)) + { + sndDeactivate(autogun->unkC8); + } + + if (autogun->unkC4 == NULL) + { + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, GUN_B9_CANNON_SHORT_SFX, &autogun->unkC4); + chrobjSndCreatePostEventDefault(autogun->unkC4, &prop->pos); + } + else if (autogun->unkC8 == NULL) + { + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, GUN_B9_CANNON_SHORT_SFX, &autogun->unkC8); + chrobjSndCreatePostEventDefault(autogun->unkC8, &prop->pos); + } + + autogun->unkC0 = (s32) (g_GlobalTimer + 2); + } + + if ((sp13C != 0) || (sp138 != 0)) + { + sp11C = 1; + sp10C = NULL; + sp108 = prop->stan; + sp104 = (autogun->unkAC & 3) == 0; + sp100 = getCurrentPlayerProp(); + var_a0_6 = 5; + + if ((model->obj->Switches[7] != 0) && (!(autogun->unkAC & 7))) + { + var_a0_6 = 7; + } + + if ((prop->flags & PROPFLAG_ONSCREEN) && (model->obj->Switches[var_a0_6] != NULL)) + { + temp_s2_7 = modelFindNodeMtx(model, model->obj->Switches[var_a0_6], 0); + temp_v1_11 = model->obj->Switches[var_a0_6]->Data; + sp12C.f[0] = temp_v1_11->f[0]; + sp12C.f[1] = temp_v1_11->f[1]; + sp12C.f[2] = temp_v1_11->f[2]; + matrix_4x4_multiply_homogeneous(currentPlayerGetViewToWorldMtxf(), temp_s2_7, &spB8); + mtx4TransformVecInPlace(&spB8, &sp12C); + if (walkTilesBetweenPoints_NoCallback(&sp108, prop->pos.f[0], prop->pos.f[2], sp12C.f[0], sp12C.f[2]) == 0) + { + sp12C.f[0] = prop->pos.f[0]; + sp12C.f[1] = prop->pos.f[1]; + sp12C.f[2] = prop->pos.f[2]; + } + } + else + { + sp12C.f[0] = prop->pos.f[0]; + sp12C.f[1] = prop->pos.f[1]; + sp12C.f[2] = prop->pos.f[2]; + } + + sp120.f[0] = cosf(autogun->unk9C) * sinf(autogun->unk90); + sp120.f[1] = sinf(autogun->unk9C); + sp120.f[2] = cosf(autogun->unk9C) * cosf(autogun->unk90); + sp110.f[0] = sp12C.f[0] + (sp120.f[0] * 65536.0f); + sp110.f[1] = sp12C.f[1] + (sp120.f[1] * 65536.0f); + sp110.f[2] = sp12C.f[2] + (sp120.f[2] * 65536.0f); + + stanResetHits(); + + if (stanTestLineUnobstructed(&sp108, sp12C.f[0], sp12C.f[2], sp110.f[0], sp110.f[2], 2, 100.0f, 100.0f, 0.0f, 1.0f) == 0) + { + chrlvStanLineDirIntersection(&sp12C, &sp120, &sp110); + sp10C = sp108; + sp110.f[0] -= 26.0f * sp120.f[0]; + sp110.f[1] -= 26.0f * sp120.f[1]; + sp110.f[2] -= 26.0f * sp120.f[2]; + } + + if (g_GlobalTimer == ((s32) autogun->unkBC)) + { + beam_xdiff = sp100->pos.f[0] - sp12C.f[0]; + beam_ydiff = sp100->pos.f[1] - sp12C.f[1]; + beam_collisionTile = sp100->pos.f[2] - sp12C.f[2]; + temp_f20_4 = ((beam_xdiff * beam_xdiff) + (beam_ydiff * beam_ydiff)) + (beam_collisionTile * beam_collisionTile); + beam_xdiff = sp110.f[0] - sp12C.f[0]; + beam_ydiff = sp110.f[1] - sp12C.f[1]; + beam_collisionTile = sp110.f[2] - sp12C.f[2]; + if ((temp_f20_4 <= (((beam_xdiff * beam_xdiff) + (beam_ydiff * beam_ydiff)) + (beam_collisionTile * beam_collisionTile))) && (bondviewGetIfCurrentPlayerDamageShowTime() == 0)) + { + temp_f0_35 = sqrtf(temp_f20_4); + var_f2_7 = (0.16f * OBJECT_INTERACTION_TIMER_DELTA) * g_AutogunPendingDamageTick; + if (temp_f0_35 > 200.0f) + { + var_f2_7 *= 200.0f / temp_f0_35; + } + + autogun->unkD4 += var_f2_7; + if (autogun->unkD4 >= 1.0f) + { + bondviewCallRecordDamageKills((gunItemGetDestructionAmount(14) * 0.125f) * g_AutogunDamageScalar, autogun->unk90, -1, 1); + autogun->unkD4 = 0.0f; + if (bondviewGetIfCurrentPlayerDamageShowTime() != 0) + { + sp11C = 0; + } + } + } + } + + if (sp11C != 0) + { + if (sp10C != NULL) + { + bullet_spark_create(&sp110, 1, 26.0f, (s16) sp10C->room); + } + + recall_joy2_hits_edit_flag(14, &sp110, -1); + } + else + { + sp110.f[0] = sp100->pos.f[0]; + sp110.f[1] = sp100->pos.f[1]; + sp110.f[2] = sp100->pos.f[2]; + recall_joy2_hits_edit_detail_edit_flag(14, sp100, -1); + } + + if (sp104 != 0) + { + beam_local = autogun->beam; + beam_local->from.f[0] = sp12C.f[0]; + beam_local->from.f[1] = sp12C.f[1]; + beam_local->from.f[2] = sp12C.f[2]; + beam_local->dir.f[0] = sp110.f[0] - beam_local->from.f[0]; + beam_local->dir.f[1] = sp110.f[1] - beam_local->from.f[1]; + beam_local->dir.f[2] = sp110.f[2] - beam_local->from.f[2]; + dist_local = sqrtf(((beam_local->dir.f[0] * beam_local->dir.f[0]) + (beam_local->dir.f[1] * beam_local->dir.f[1])) + (beam_local->dir.f[2] * beam_local->dir.f[2])); + temp_f2_23 = 1.0f / dist_local; + beam_local->dir.f[0] = (f32) (beam_local->dir.f[0] * temp_f2_23); + beam_local->dir.f[1] = (f32) (beam_local->dir.f[1] * temp_f2_23); + beam_local->dir.f[2] = (f32) (beam_local->dir.f[2] * temp_f2_23); + + if (dist_local > 10000.0f) + { + dist_local = 10000.0f; + } + + beam_local->age = 0; + beam_local->weaponnum = ITEM_FNP90; + beam_local->maxdist = dist_local; + + if (dist_local < 500.0f) + { + dist_local = 500.0f; + } + + if (beam_local->weaponnum == ITEM_LASER) + { + beam_local->speed = 0.25f * dist_local; + beam_local->mindist = 0.6f * dist_local; + + if (beam_local->mindist > 3000.0f) + { + beam_local->mindist = 3000.0f; + } + + beam_local->dist = ((-0.1f) - (U32_TO_F32(randomGetNext()) * 0.3f)) * dist_local; + } + else + { + beam_local->speed = 0.2f * dist_local; + beam_local->mindist = 0.2f * dist_local; + + if (beam_local->mindist > 3000.0f) + { + beam_local->mindist = 3000.0f; + } + + beam_local->dist = ((2.0f * U32_TO_F32(randomGetNext())) - 1.0f) * beam_local->speed; + } + } + } + } + + if (model->obj->Switches[5] != NULL) + { + modelGetNodeRwData(model, model->obj->Switches[5])->Gunfire.visible = (s16) sp13C; + } + + if (model->obj->Switches[7] != NULL) + { + modelGetNodeRwData(model, model->obj->Switches[7])->Gunfire.visible = (s16) sp138; + } + } + + objDropRecursively(prop); + } + + if (tickop == TICKOP_CHANGEDLIST) + { + prop->stan = NULL; + } + + return tickop; +} + + +/** + * Address: 7F049B58 + * + * Draws tracers for characters other than the player, and draws tracers for drone guns as well. + */ +Gfx *weaponRenderTracers(Gfx *gdl) +{ + ChrRecord *chr; + ChrRecord *chr2; + PropRecord *prop; + ObjectRecord *obj; + s32 playernum; + s32 type; + s32 type_viewer; + s32 obj_type_0d; + s32 match; + s32 one; + s32 type_chr; + + prop = chrpropGetActiveTail(); + if (prop != NULL) + { + type_viewer = PROP_TYPE_VIEWER; + obj_type_0d = 0x0d; + one = 1; + type_chr = PROP_TYPE_CHR; + + do + { + type = prop->type; + if (type_chr == type) + { + chr = prop->chr; + gdl = sub_GAME_7F061E18(gdl, &chr->beams[0], one); + gdl = sub_GAME_7F061E18(gdl, &chr->beams[1], one); + } + else if (one == type) + { + obj = prop->obj; + match = obj_type_0d == obj->type; + if (match) + { + gdl = sub_GAME_7F061E18(gdl, (BeamRecord *)((AutogunRecord *)obj)->beam, one); + } + } + else if (type_viewer == type) + { + if (prop->voidp != NULL) + { + playernum = getPlayerPointerIndex(prop); + if (get_cur_playernum() != playernum) + { + chr2 = prop->chr; + gdl = sub_GAME_7F061E18(gdl, &chr2->beams[0], one); + gdl = sub_GAME_7F061E18(gdl, &chr2->beams[1], one); + } + } + } + prop = prop->prev; + } + while (prop != NULL); + } + return gdl; +} void save_ptr_monitor_ani_code_to_obj_ani_slot(MonitorRecord *mon, void *image) @@ -23882,41 +6759,29 @@ void monitorSetImageByNum(MonitorRecord *mon, s32 monAnimID) } - - - void save_img_index_to_obj_ani_slot(MonitorRecord *mon, void *unk88) { mon->tconfig = unk88; } - -#ifdef NONMATCHING - -struct tvcmd { - u32 type; - s32 arg1; - u32 arg2; -}; - -// Almost matching - only regalloc issues left (for VERSION_US) -// Called tvscreenRender in PD - Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorRecord *screen, Gfx *gdl, s32 arg4, s32 arg5) { - if (node && (node->Opcode & 0xff) == MODELNODE_OPCODE_DISPLAYLIST_COLLISIONRECORD) { - Vertex *vertices = dynAllocate7F0BD6C4(4); + if (node && (node->Opcode & 0xff) == MODELNODE_OPCODE_DLCOLLISION) + { + Vertex *vertices = dynAllocateVertices(4); Gfx *savedgdl = gdl++; union ModelRoData *rodata = node->Data; union ModelRwData *rwdata = modelGetNodeRwData(model, node); sImageTableEntry *tconfig; bool yielding = FALSE; - while (!yielding) { - struct tvcmd *cmd = (struct tvcmd *) &screen->cmdlist[screen->offset]; + while (!yielding) + { + struct tvcmd *m = (struct tvcmd *) &screen->cmdlist[screen->offset]; - switch (cmd->type) { + switch (m->type) + { case TVCMD_STOPSCROLL: screen->xmidinc = 0.0f; screen->ymidinc = 0.0f; @@ -23924,71 +6789,84 @@ Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorR break; case TVCMD_SCROLLRELX: screen->xmidfrac = 0.0f; - screen->xmidinc = 1.0f / cmd->arg2; + screen->xmidinc = 1.0f / m->arg2; screen->xmidold = screen->xmid; - screen->xmidnew = screen->xmid + cmd->arg1 * (1.0f / 1024.0f); + screen->xmidnew = screen->xmid + m->time * (1.0f / 1024.0f); screen->offset += 3; break; case TVCMD_SCROLLRELY: screen->ymidfrac = 0.0f; - screen->ymidinc = 1.0f / cmd->arg2; + screen->ymidinc = 1.0f / m->arg2; screen->ymidold = screen->ymid; - screen->ymidnew = screen->ymid + cmd->arg1 * (1.0f / 1024.0f); + screen->ymidnew = screen->ymid + m->time * (1.0f / 1024.0f); screen->offset += 3; break; case TVCMD_SCROLLABSX: screen->xmidfrac = 0.0f; - screen->xmidinc = 1.0f / cmd->arg2; + screen->xmidinc = 1.0f / m->arg2; screen->xmidold = screen->xmid; - screen->xmidnew = cmd->arg1 * (1.0f / 1024.0f); + screen->xmidnew = m->time * (1.0f / 1024.0f); screen->offset += 3; break; case TVCMD_SCROLLABSY: screen->ymidfrac = 0.0f; - screen->ymidinc = 1.0f / cmd->arg2; + screen->ymidinc = 1.0f / m->arg2; screen->ymidold = screen->ymid; - screen->ymidnew = cmd->arg1 * (1.0f / 1024.0f); + screen->ymidnew = m->time * (1.0f / 1024.0f); screen->offset += 3; break; case TVCMD_SCALEABSX: screen->xscalefrac = 0.0f; - screen->xscaleinc = 1.0f / cmd->arg2; + screen->xscaleinc = 1.0f / m->arg2; screen->xscaleold = screen->xscale; - screen->xscalenew = cmd->arg1 * (1.0f / 1024.0f); + screen->xscalenew = m->time * (1.0f / 1024.0f); screen->offset += 3; break; case TVCMD_SCALEABSY: screen->yscalefrac = 0.0f; - screen->yscaleinc = 1.0f / cmd->arg2; + screen->yscaleinc = 1.0f / m->arg2; screen->yscaleold = screen->yscale; - screen->yscalenew = cmd->arg1 * (1.0f / 1024.0f); + screen->yscalenew = m->time * (1.0f / 1024.0f); screen->offset += 3; break; case TVCMD_SETTEXTURE: - save_img_index_to_obj_ani_slot(screen, cmd->arg1); + save_img_index_to_obj_ani_slot(screen, m->time); screen->offset += 2; break; case TVCMD_PAUSE: - if (screen->pause60 >= 0) { + if (screen->pause60 >= 0) + { screen->pause60 -= g_ClockTimer; - if (screen->pause60 >= 0) { + if (screen->pause60 >= 0) + { yielding = TRUE; - } else { + } + else + { screen->offset += 2; } - } else { + } + else + { + #ifdef DEBUG + assert(m->time>0); + #endif + yielding = TRUE; - screen->pause60 = cmd->arg1; + screen->pause60 = m->time; } break; case TVCMD_SETCMDLIST: - save_ptr_monitor_ani_code_to_obj_ani_slot(screen, (u32 *) cmd->arg1); + save_ptr_monitor_ani_code_to_obj_ani_slot(screen, (u32 *) m->time); break; case TVCMD_RANDSETCMDLIST: - if ((randomGetNext() >> 16) < cmd->arg2) { - save_ptr_monitor_ani_code_to_obj_ani_slot(screen, (u32 *) cmd->arg1); - } else { + if ((randomGetNext() >> 16) < m->arg2) + { + save_ptr_monitor_ani_code_to_obj_ani_slot(screen, (u32 *) m->time); + } + else + { screen->offset += 3; } break; @@ -24000,34 +6878,36 @@ Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorR break; case TVCMD_SETCOLOUR: screen->colfrac = 0.0f; - screen->colinc = 1.0f / cmd->arg2; + screen->colinc = 1.0f / m->arg2; screen->redold = screen->red; - screen->rednew = ((u32)cmd->arg1 >> 24) & 0xff; + screen->rednew = ((u32)m->time >> 24) & 0xff; screen->greenold = screen->green; - screen->greennew = ((u32)cmd->arg1 >> 16) & 0xff; + screen->greennew = ((u32)m->time >> 16) & 0xff; screen->blueold = screen->blue; - screen->bluenew = ((u32)cmd->arg1 >> 8) & 0xff; + screen->bluenew = ((u32)m->time >> 8) & 0xff; screen->alphaold = screen->alpha; - screen->alphanew = cmd->arg1 & 0xff; + screen->alphanew = m->time & 0xff; screen->offset += 3; break; case TVCMD_ROTATEABS: - screen->rot = cmd->arg1 * M_TAU_F / M_U16_MAX_VALUE_F; + screen->rot = m->time * M_TAU_F / M_U16_MAX_VALUE_F; screen->offset += 2; break; case TVCMD_ROTATEREL: - screen->rot += g_GlobalTimerDelta * cmd->arg1 * M_TAU_F / M_U16_MAX_VALUE_F; + screen->rot += MONITOR_TIMER_DELTA * m->time * M_TAU_F / M_U16_MAX_VALUE_F; - if (screen->rot >= M_TAU_F) { + if (screen->rot >= M_TAU_F) + { screen->rot -= M_TAU_F; } - if (screen->rot < 0.0f) { + if (screen->rot < 0.0f) + { screen->rot += M_TAU_F; } @@ -24036,13 +6916,19 @@ Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorR } } - // Increment X scale - if (screen->xscaleinc > 0.0f) { - screen->xscalefrac += screen->xscaleinc * g_GlobalTimerDelta; + if (screen->rot == (1.0f / 1024.0f)); - if (screen->xscalefrac < 1.0f) { + // Increment X scale + if (screen->xscaleinc > 0.0f) + { + screen->xscalefrac += screen->xscaleinc * MONITOR_TIMER_DELTA; + + if (screen->xscalefrac < 1.0f) + { screen->xscale = screen->xscaleold + (screen->xscalenew - screen->xscaleold) * screen->xscalefrac; - } else { + } + else + { screen->xscalefrac = 1.0f; screen->xscaleinc = 0.0f; screen->xscale = screen->xscalenew; @@ -24050,12 +6936,16 @@ Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorR } // Increment Y scale - if (screen->yscaleinc > 0.0f) { - screen->yscalefrac += screen->yscaleinc * g_GlobalTimerDelta; + if (screen->yscaleinc > 0.0f) + { + screen->yscalefrac += screen->yscaleinc * MONITOR_TIMER_DELTA; - if (screen->yscalefrac < 1.0f) { + if (screen->yscalefrac < 1.0f) + { screen->yscale = screen->yscaleold + (screen->yscalenew - screen->yscaleold) * screen->yscalefrac; - } else { + } + else + { screen->yscalefrac = 1.0f; screen->yscaleinc = 0.0f; screen->yscale = screen->yscalenew; @@ -24063,12 +6953,16 @@ Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorR } // Increment X scroll - if (screen->xmidinc > 0.0f) { - screen->xmidfrac += screen->xmidinc * g_GlobalTimerDelta; + if (screen->xmidinc > 0.0f) + { + screen->xmidfrac += screen->xmidinc * MONITOR_TIMER_DELTA; - if (screen->xmidfrac < 1.0f) { + if (screen->xmidfrac < 1.0f) + { screen->xmid = screen->xmidold + (screen->xmidnew - screen->xmidold) * screen->xmidfrac; - } else { + } + else + { screen->xmidfrac = 1.0f; screen->xmidinc = 0.0f; screen->xmid = screen->xmidnew; @@ -24076,12 +6970,16 @@ Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorR } // Increment Y scroll - if (screen->ymidinc > 0.0f) { - screen->ymidfrac += screen->ymidinc * g_GlobalTimerDelta; + if (screen->ymidinc > 0.0f) + { + screen->ymidfrac += screen->ymidinc * MONITOR_TIMER_DELTA; - if (screen->ymidfrac < 1.0f) { + if (screen->ymidfrac < 1.0f) + { screen->ymid = screen->ymidold + (screen->ymidnew - screen->ymidold) * screen->ymidfrac; - } else { + } + else + { screen->ymidfrac = 1.0f; screen->ymidinc = 0.0f; screen->ymid = screen->ymidnew; @@ -24089,15 +6987,19 @@ Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorR } // Increment colour change - if (screen->colinc > 0.0f) { - screen->colfrac += screen->colinc * g_GlobalTimerDelta; + if (screen->colinc > 0.0f) + { + screen->colfrac += screen->colinc * MONITOR_TIMER_DELTA; - if (screen->colfrac < 1.0f) { + if (screen->colfrac < 1.0f) + { screen->red = screen->redold + (s32) ((screen->rednew - screen->redold) * screen->colfrac); screen->green = screen->greenold + (s32) ((screen->greennew - screen->greenold) * screen->colfrac); screen->blue = screen->blueold + (s32) ((screen->bluenew - screen->blueold) * screen->colfrac); screen->alpha = screen->alphaold + (s32) ((screen->alphanew - screen->alphaold) * screen->colfrac); - } else { + } + else + { screen->colfrac = 1.0f; screen->colinc = 0.0f; screen->red = screen->rednew; @@ -24116,57 +7018,81 @@ Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorR vertices[2] = rodata->DisplayListCollisions.Vertices[2]; vertices[3] = rodata->DisplayListCollisions.Vertices[3]; - if ((u32)screen->tconfig < 100) { + if ((u32)screen->tconfig < 100) + { tconfig = &monitorimages[(s32)screen->tconfig]; - } else { + } + else + { tconfig = screen->tconfig; } - if (tconfig != NULL) { - u32 stack[13]; - f32 f22; // sp54 - f32 f24; // sp50 - f32 f14; - f32 f16; + { + f32 tmp1; + f32 tmp2; - f22 = screen->xscale / 2.0f; - f24 = screen->yscale / 2.0f; - f14 = f22; - f16 = f24; + if (tconfig != NULL) + { + u32 stack[11]; + f32 xfrac1; + f32 yfrac1; + f32 xfrac2; + f32 yfrac2; + f32 cosrot; + f32 sinrot; + f32 rotscale; - if (1); - if (1); - if (1); - if (1); - if (1); + xfrac1 = screen->xscale / 2.0f; + yfrac1 = screen->yscale / 2.0f; + xfrac2 = xfrac1; + yfrac2 = yfrac1; - if (screen->rot != 0.0f) { - f32 f20; - f32 f2_6; + if (xfrac1 || 1); + if (yfrac1 || 1); - f20 = cosf(screen->rot) * 1.4142f; - f2_6 = sinf(screen->rot) * 1.4142f; + tmp1 = 1.5707964f; + if (tmp1 == tmp1); - f22 *= f20; - f24 *= f2_6; - f14 *= f2_6; - f16 *= f20; + if (screen->rot != 0.0f) + { + cosrot = cosf(screen->rot); + rotscale = 1.4141999f; + cosrot *= rotscale; + sinrot = sinf(screen->rot); + + if (rotscale == rotscale); + if (sinrot == sinrot); + if (sinrot == sinrot); + + xfrac1 *= cosrot; + sinrot *= rotscale; + yfrac1 *= sinrot; + xfrac2 *= sinrot; + yfrac2 *= cosrot; + } + + tmp1 = xfrac1 * yfrac1 * xfrac2; + + if (tmp1 * yfrac2); + + vertices[0].s = tconfig->width * (screen->xmid + xfrac1) * 32.0f; + vertices[0].t = tconfig->height * (screen->ymid + yfrac1) * 32.0f; + + vertices[1].s = tconfig->width * (screen->xmid - xfrac2) * 32.0f; + vertices[1].t = tconfig->height * (screen->ymid + yfrac2) * 32.0f; + + vertices[2].s = tconfig->width * (screen->xmid - xfrac1) * 32.0f; + vertices[2].t = tconfig->height * (screen->ymid - yfrac1) * 32.0f; + + vertices[3].s = tconfig->width * (screen->xmid + xfrac2) * 32.0f; + vertices[3].t = tconfig->height * (screen->ymid - yfrac2) * 32.0f; } - vertices[0].s = tconfig->width * (screen->xmid + f22) * 32.0f; - vertices[0].t = tconfig->height * (screen->ymid + f24) * 32.0f; - - vertices[1].s = tconfig->width * (screen->xmid - f14) * 32.0f; - vertices[1].t = tconfig->height * (screen->ymid + f16) * 32.0f; - - vertices[2].s = tconfig->width * (screen->xmid - f22) * 32.0f; - vertices[2].t = tconfig->height * (screen->ymid - f24) * 32.0f; - - vertices[3].s = tconfig->width * (screen->xmid + f14) * 32.0f; - vertices[3].t = tconfig->height * (screen->ymid - f16) * 32.0f; + tmp2 = tmp1; } - if (1) { + if (1) + { u8 tmpc; u8 tmpc2; tmpc = screen->red; @@ -24194,7 +7120,8 @@ Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorR vertices[0].a = tmpc; } - if (screen->alpha < 255) { + if (screen->alpha < 255) + { arg5 = 2; } @@ -24215,3718 +7142,227 @@ Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorR return gdl; } -// keeping old decompilation around for comparison's sake until a match is found: -#if 0 -void *process_monitor_animation_microcode(Model *arg0, ModelNode *arg1, MonitorRecord *arg2, void *arg3, s32 arg4, s32 arg5) + +void sub_GAME_7F04AC20(PropRecord *prop, ModelRenderData *mrData, s32 arg2) { - void *spA8; - void *spA4; - modeldata_root *spA0; - void *sp94; - f32 sp54; - f32 sp50; - Mtxf *temp_s2; - f32 temp_f0; - f32 temp_f0_10; - f32 temp_f0_11; - f32 temp_f0_2; - f32 temp_f0_3; - f32 temp_f0_4; - f32 temp_f0_5; - f32 temp_f0_6; - f32 temp_f0_7; - f32 temp_f0_8; - f32 temp_f0_9; - f32 temp_f10; - f32 temp_f10_2; - f32 temp_f12; - f32 temp_f12_2; - f32 temp_f18; - f32 temp_f18_2; - f32 temp_f18_3; - f32 temp_f18_4; - f32 temp_f20; - f32 temp_f22; - f32 temp_f24; - f32 temp_f2; - f32 temp_f2_2; - f32 temp_f2_3; - f32 temp_f2_4; - f32 temp_f2_5; - f32 temp_f2_6; - f32 temp_f4; - f32 temp_f4_2; - f32 temp_f6; - f32 temp_f6_2; - f32 temp_f6_3; - f32 temp_f6_4; - f32 temp_f6_5; - f32 temp_f6_6; - f32 temp_f8; - f32 temp_v0_4; - s16 temp_v0_2; - s32 temp_t0; - s32 temp_t1; - s32 temp_t4; - s32 temp_t5; - s32 temp_t5_2; - s32 temp_t7; - s32 temp_t8_2; - u16 temp_v0; - u32 temp_t3; - u8 temp_a0; - u8 temp_a1; - u8 temp_t0_2; - u8 temp_t2_2; - u8 temp_t4_2; - u8 temp_t5_3; - u8 temp_t6_2; - u8 temp_t7_2; - u8 temp_t8_3; - u8 temp_t9_2; - u8 temp_v0_3; - u8 temp_v0_5; - u8 temp_v0_6; - u8 temp_v0_7; - u8 temp_v1_2; - u8 temp_v1_3; - void *temp_s0; - void *temp_s1; - void *temp_t0_3; - void *temp_t2; - void *temp_t2_3; - void *temp_t2_4; - void *temp_t3_2; - void *temp_t5_4; - void *temp_t6; - void *temp_t8; - void *temp_t9; - void *temp_v1; - void **temp_a0_2; - f32 phi_f6; - f32 phi_f18; - f32 phi_f6_2; - f32 phi_f18_2; - f32 phi_f6_3; - f32 phi_f18_3; - f32 phi_f6_4; - f32 phi_f2; - s32 phi_s1; - void *phi_s1_2; - f32 phi_f6_5; - f32 phi_f22; - f32 phi_f4; - f32 phi_f24; - f32 phi_f10; - f32 phi_f14; - f32 phi_f18_4; - f32 phi_f16; - f32 phi_f8; - f32 phi_f6_6; - f32 phi_f4_2; - f32 phi_f10_2; - - if ((arg1 != 0) && ((arg1->Opcode & 0xFF) == MODELNODE_OPCODE_DLCOLLISION)) + if (prop->flags & PROPFLAG_ONSCREEN) { - temp_t8 = arg3; - temp_s2 = dynAllocate7F0BD6C4(4); - arg3 = temp_t8 + 8; - spA8 = temp_t8; - spA4 = arg1->Data; - spA0 = modelGetNodeRwData(arg0, arg1); - phi_f2 = M_U16_MAX_VALUE_F; - phi_f2 = M_U16_MAX_VALUE_F; - phi_s1 = 0; - do + ObjectRecord *obj; + Model *model; + s32 alpha; + PropRecord *child; + Gfx *gdl; + s32 mN; + s32 m0; + ObjectRecord *o; + DoorRecord *door; + s32 pad[4]; + s32 recolor; + s32 v; + ModelNode *node; + Gfx *g3; + Gfx *g; + Gfx *g2; + bool destroyed; + union ModelRwData **rwdataSlot; + + obj = prop->obj; + model = obj->model; + destroyed = (obj->flags & PROPFLAG_00000200) != FALSE; + + if (destroyed) { - temp_v0 = arg2->offset; - temp_v1 = arg2->image + (temp_v0 * 4); - temp_t3 = temp_v1->unk0; - switch (temp_t3) + destroyed = get_BONDdata_field_10E0(); + destroyed = destroyed != 0; + } + + gdl = mrData->gdl; + + if (obj->type == PROPDEF_MONITOR) + { + if (mrData->flags & 1) { - case 0: - arg2->xmidinc = 0.0f; - arg2->ymidinc = 0.0f; - arg2->offset = temp_v0 + 1; - break; - case 1: - arg2->xmidfrac = 0.0f; - temp_t5 = temp_v1->unk8; - temp_f6 = temp_t5; - phi_f6 = temp_f6; - if (temp_t5 < 0) - { - phi_f6 = temp_f6 + 4294967296.0f; - } - temp_f0 = arg2->xmid; - arg2->xmidold = temp_f0; - arg2->xmidinc = 1.0f / phi_f6; - arg2->offset = temp_v0 + 3; - arg2->xmidnew = temp_f0 + (temp_v1->unk4 * 0.0009765625f); - break; - case 2: - arg2->ymidfrac = 0.0f; - temp_t8_2 = temp_v1->unk8; - temp_f18 = temp_t8_2; - phi_f18 = temp_f18; - if (temp_t8_2 < 0) - { - phi_f18 = temp_f18 + 4294967296.0f; - } - temp_f0_2 = arg2->ymid; - arg2->ymidold = temp_f0_2; - arg2->ymidinc = 1.0f / phi_f18; - arg2->offset = temp_v0 + 3; - arg2->ymidnew = temp_f0_2 + (temp_v1->unk4 * 0.0009765625f); - break; - case 3: - arg2->xmidfrac = 0.0f; - temp_t1 = temp_v1->unk8; - temp_f6_2 = temp_t1; - phi_f6_2 = temp_f6_2; - if (temp_t1 < 0) - { - phi_f6_2 = temp_f6_2 + 4294967296.0f; - } - arg2->xmidold = arg2->xmid; - arg2->xmidinc = 1.0f / phi_f6_2; - arg2->offset = temp_v0 + 3; - arg2->xmidnew = temp_v1->unk4 * 0.0009765625f; - break; - case 4: - arg2->ymidfrac = 0.0f; - temp_t4 = temp_v1->unk8; - temp_f18_2 = temp_t4; - phi_f18_2 = temp_f18_2; - if (temp_t4 < 0) - { - phi_f18_2 = temp_f18_2 + 4294967296.0f; - } - arg2->ymidold = arg2->ymid; - arg2->ymidinc = 1.0f / phi_f18_2; - arg2->offset = temp_v0 + 3; - arg2->ymidnew = temp_v1->unk4 * 0.0009765625f; - break; - case 5: - arg2->xscalefrac = 0.0f; - temp_t7 = temp_v1->unk8; - temp_f6_3 = temp_t7; - phi_f6_3 = temp_f6_3; - if (temp_t7 < 0) - { - phi_f6_3 = temp_f6_3 + 4294967296.0f; - } - arg2->xscaleold = arg2->xscale; - arg2->xscaleinc = 1.0f / phi_f6_3; - arg2->offset = temp_v0 + 3; - arg2->xscalenew = temp_v1->unk4 * 0.0009765625f; - break; - case 6: - arg2->yscalefrac = 0.0f; - temp_t0 = temp_v1->unk8; - temp_f18_3 = temp_t0; - phi_f18_3 = temp_f18_3; - if (temp_t0 < 0) - { - phi_f18_3 = temp_f18_3 + 4294967296.0f; - } - arg2->yscaleold = arg2->yscale; - arg2->yscaleinc = 1.0f / phi_f18_3; - arg2->offset = temp_v0 + 3; - arg2->yscalenew = temp_v1->unk4 * 0.0009765625f; - break; - case 7: - save_img_index_to_obj_ani_slot(arg2, temp_v1->unk4); - arg2->offset += 2; - break; - case 8: - temp_v0_2 = arg2->pause60; - if (temp_v0_2 >= 0) - { - arg2->pause60 = temp_v0_2 - clock_timer; - if (arg2->pause60 >= 0) - { - phi_s1 = 1; - } - else - { - arg2->offset += 2; - } - } - else - { - arg2->pause60 = temp_v1->unk4; - phi_s1 = 1; - } - break; - case 9: - save_ptr_monitor_ani_code_to_obj_ani_slot(arg2, temp_v1->unk4); - break; - case 10: - sp94 = temp_v1; - if ((randomGetNext() >> 0x10) < temp_v1->unk8) - { - save_ptr_monitor_ani_code_to_obj_ani_slot(arg2, temp_v1->unk4); - } - else - { - arg2->offset += 3; - } - break; - case 11: - arg2->offset = 0; - break; - case 12: - phi_s1 = 1; - break; - case 13: - arg2->colfrac = 0.0f; - temp_t5_2 = temp_v1->unk8; - temp_f6_4 = temp_t5_2; - phi_f6_4 = temp_f6_4; - if (temp_t5_2 < 0) - { - phi_f6_4 = temp_f6_4 + 4294967296.0f; - } - arg2->redold = arg2->red; - arg2->colinc = 1.0f / phi_f6_4; - arg2->greenold = arg2->green; - arg2->rednew = temp_v1->unk4 >> 0x18; - arg2->blueold = arg2->blue; - arg2->greennew = temp_v1->unk4 >> 0x10; - arg2->alphaold = arg2->alpha; - arg2->bluenew = temp_v1->unk4 >> 8; - arg2->offset = temp_v0 + 3; - arg2->alphanew = temp_v1->unk4; - break; - case 14: - arg2->offset = temp_v0 + 2; - arg2->rot = (temp_v1->unk4 * M_TAU_F) / phi_f2; - break; - case 15: - arg2->rot += (g_GlobalTimerDelta * temp_v1->unk4 * M_TAU_F) / phi_f2; - temp_f12 = arg2->rot; - if (temp_f12 >= M_TAU_F) - { - arg2->rot = temp_f12 - M_TAU_F; - } - if (arg2->rot < 0.0f) - { - arg2->rot += M_TAU_F; - } - arg2->offset += 2; - break; + if (obj->flags2 & PROPFLAG2_00010000) + { + mN = 0; + } + else if (obj->flags & PROPFLAG_FIXED_MONITOR) + { + mN = 8; + } + else + { + mN = 1; + } + + gdl = process_monitor_animation_microcode(model, model->obj->Switches[0], &((MonitorObjRecord *)prop->obj)->Monitor, gdl, mN, 1); } - } while (phi_s1 == 0); - temp_f0_3 = arg2->xscaleinc; - if (temp_f0_3 > 0.0f) + } + else if (obj->type == PROPDEF_MULTI_MONITOR) { - arg2->xscalefrac += temp_f0_3 * g_GlobalTimerDelta; - temp_f2 = arg2->xscalefrac; - if (temp_f2 < 1.0f) + if (mrData->flags & 1) { - temp_f0_4 = arg2->xscaleold; - arg2->xscale = temp_f0_4 + ((arg2->xscalenew - temp_f0_4) * temp_f2); + o = prop->obj; + + if (obj->flags2 & PROPFLAG2_00010000) + { + mN = 0; + } + else if (obj->flags & PROPFLAG_FIXED_MONITOR) + { + mN = 8; + } + else + { + mN = 1; + } + + gdl = process_monitor_animation_microcode(model, model->obj->Switches[0], &((MultiMonitorObjRecord *)o)->Monitor[0], gdl, mN, 1); + + if (obj->flags2 & PROPFLAG2_00010000) + { + mN = 0; + } + else if (obj->flags & (PROPFLAG_FIXED_MONITOR | PROPFLAG_SPECIAL_FUNC)) + { + mN = 8; + } + else + { + mN = 1; + } + + gdl = process_monitor_animation_microcode(model, model->obj->Switches[1], &((MultiMonitorObjRecord *)o)->Monitor[1], gdl, mN, 1); + + gdl = process_monitor_animation_microcode(model, model->obj->Switches[2], &((MultiMonitorObjRecord *)o)->Monitor[2], gdl, mN, 1); + + gdl = process_monitor_animation_microcode(model, model->obj->Switches[3], &((MultiMonitorObjRecord *)o)->Monitor[3], gdl, mN, 1); + } + } + + if (obj->type == PROPDEF_DOOR) + { + door = prop->door; + + gSPClearGeometryMode(gdl++, G_CULL_BOTH); + + if (door->doorFlags & DOORFLAG_FLIP) + { + mrData->cullmode = CULLMODE_FRONT; } else { - arg2->xscalefrac = 1.0f; - arg2->xscaleinc = 0.0f; - arg2->xscale = arg2->xscalenew; + mrData->cullmode = CULLMODE_BACK; + } + + if (mrData->PropType == PROP_TYPE_MAX) + { + mrData->envcolour.word &= 0xffffff00; } } - temp_f0_5 = arg2->yscaleinc; - if (temp_f0_5 > 0.0f) + else { - arg2->yscalefrac += temp_f0_5 * g_GlobalTimerDelta; - temp_f2_2 = arg2->yscalefrac; - if (temp_f2_2 < 1.0f) + node = sub_GAME_7F04B478(obj); + recolor = 0; + + if (node != NULL) { - temp_f0_6 = arg2->yscaleold; - arg2->yscale = temp_f0_6 + ((arg2->yscalenew - temp_f0_6) * temp_f2_2); + union ModelRoData *nodedata; + + nodedata = node->Data; + + if (nodedata != NULL) + { + rwdataSlot = &obj->model->datas[nodedata->DisplayListCollisions.RwDataIndex]; + + if (nodedata->DisplayListCollisions.Vertices != (Vertex *)*rwdataSlot) + { + recolor = 1; + } + } + } + + v = objGetDestroyedLevel(obj); + + if ((v == 0) || !recolor) + { + mrData->cullmode = CULLMODE_BACK; + + if (mrData->PropType == PROP_TYPE_MAX) + { + mrData->envcolour.word &= 0xffffff00; + } } else { - arg2->yscalefrac = 1.0f; - arg2->yscaleinc = 0.0f; - arg2->yscale = arg2->yscalenew; + v = objGetDestroyedLevel(obj); + mrData->cullmode = CULLMODE_NONE; + + if (mrData->PropType == PROP_TYPE_MAX) + { + alpha = v * 50 + 100; + + if (alpha >= 256) + { + alpha = 255; + } + + mrData->envcolour.word &= 0xffffff00; + mrData->envcolour.word |= alpha; + } + else if (v > 0) + { + mrData->envcolour.word |= 0xff00; + } } } - temp_f0_7 = arg2->xmidinc; - if (temp_f0_7 > 0.0f) + + if (destroyed) { - arg2->xmidfrac += temp_f0_7 * g_GlobalTimerDelta; - temp_f2_3 = arg2->xmidfrac; - if (temp_f2_3 < 1.0f) + // Keep on one line for matching. + g3 = gdl++; gSPMatrix(g3, get_BONDdata_field_10E0(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + } + + mrData->gdl = gdl; + subdraw(mrData, model); + gdl = mrData->gdl; + + if (obj->type == PROPDEF_DOOR) + { + gSPClearGeometryMode(gdl++, G_CULL_BOTH); + } + + if (obj->state & (1 << arg2)) + { + gdl = explosionRenderBulletImpactOnProp(gdl, prop, arg2); + } + + if (destroyed) + { + // Keep on one line for matching. + g2 = gdl++; gSPMatrix(g2, currentPlayerGetProjectionMatrix(), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + } + + mrData->gdl = gdl; + + for (child = prop->child; child != NULL; child = child->prev) + { + sub_GAME_7F04AC20(child, mrData, arg2); + } + + if (arg2) + { + if (destroyed != FALSE) { - temp_f0_8 = arg2->xmidold; - arg2->xmid = temp_f0_8 + ((arg2->xmidnew - temp_f0_8) * temp_f2_3); + sub_GAME_7F08BEEC((Mtxf *)model->render_pos, model->obj->numMatrices); } else { - arg2->xmidfrac = 1.0f; - arg2->xmidinc = 0.0f; - arg2->xmid = arg2->xmidnew; + bondviewTransformManyPosToViewMatrix(model->render_pos, model->obj->numMatrices); } } - temp_f0_9 = arg2->ymidinc; - if (temp_f0_9 > 0.0f) - { - arg2->ymidfrac += temp_f0_9 * g_GlobalTimerDelta; - temp_f2_4 = arg2->ymidfrac; - if (temp_f2_4 < 1.0f) - { - temp_f0_10 = arg2->ymidold; - arg2->ymid = temp_f0_10 + ((arg2->ymidnew - temp_f0_10) * temp_f2_4); - } - else - { - arg2->ymidfrac = 1.0f; - arg2->ymidinc = 0.0f; - arg2->ymid = arg2->ymidnew; - } - } - temp_f2_5 = arg2->colinc; - if (temp_f2_5 > 0.0f) - { - arg2->colfrac += temp_f2_5 * g_GlobalTimerDelta; - temp_f0_11 = arg2->colfrac; - if (temp_f0_11 < 1.0f) - { - temp_v0_3 = arg2->redold; - temp_v1_2 = arg2->greenold; - temp_a0 = arg2->blueold; - temp_a1 = arg2->alphaold; - arg2->red = temp_v0_3 + ((arg2->rednew - temp_v0_3) * temp_f0_11); - arg2->green = temp_v1_2 + ((arg2->greennew - temp_v1_2) * temp_f0_11); - arg2->blue = temp_a0 + ((arg2->bluenew - temp_a0) * temp_f0_11); - arg2->alpha = temp_a1 + ((arg2->alphanew - temp_a1) * temp_f0_11); - } - else - { - arg2->colfrac = 1.0f; - arg2->colinc = 0.0f; - arg2->red = arg2->rednew; - arg2->green = arg2->greennew; - arg2->blue = arg2->bluenew; - arg2->alpha = arg2->alphanew; - } - } - spA0->unk0 = temp_s2; - spA0->ground = (bitwise f32)arg3; - temp_t3_2 = spA4->unk8; - temp_s2->m[0][0] = temp_t3_2->unk0; - temp_s2->m[0][1] = temp_t3_2->unk4; - temp_s2->m[0][2] = temp_t3_2->unk8; - temp_s2->m[0][3] = temp_t3_2->unkC; - temp_t6 = spA4->unk8; - temp_s2->m[1][0] = temp_t6->unk10; - temp_s2->m[1][1] = temp_t6->unk14; - temp_s2->m[1][2] = temp_t6->unk18; - temp_s2->m[1][3] = temp_t6->unk1C; - temp_t9 = spA4->unk8; - temp_s2->m[2][0] = temp_t9->unk20; - temp_s2->m[2][1] = temp_t9->unk24; - temp_s2->m[2][2] = temp_t9->unk28; - temp_s2->m[2][3] = temp_t9->unk2C; - temp_t2 = spA4->unk8; - temp_s2->m[3][0] = temp_t2->unk30; - temp_s2->m[3][1] = temp_t2->unk34; - temp_s2->m[3][2] = temp_t2->unk38; - temp_s2->m[3][3] = temp_t2->unk3C; - temp_v0_4 = arg2->unk88; - phi_s1_2 = (bitwise void *)temp_v0_4; - if ((bitwise u32)temp_v0_4 < 0x64) - { - phi_s1_2 = ((((bitwise s32)temp_v0_4 * 4) - (bitwise s32)temp_v0_4) * 4) + monitorimages; - } - if (phi_s1_2 != 0) - { - temp_f12_2 = arg2->rot; - temp_f22 = arg2->xscale * 0.5f; - temp_f24 = arg2->yscale * 0.5f; - phi_f22 = temp_f22; - phi_f24 = temp_f24; - phi_f14 = temp_f22; - phi_f16 = temp_f24; - if (temp_f12_2 != 0.0f) - { - sp54 = temp_f22; - sp50 = temp_f24; - temp_f20 = cosf(temp_f12_2, temp_f22) * 1.4142f; - temp_f2_6 = sinf(arg2->rot) * 1.4142f; - phi_f22 = temp_f22 * temp_f20; - phi_f24 = temp_f24 * temp_f2_6; - phi_f14 = temp_f22 * temp_f2_6; - phi_f16 = temp_f24 * temp_f20; - } - temp_t6_2 = phi_s1_2->unk4; - temp_f6_5 = temp_t6_2; - phi_f6_5 = temp_f6_5; - if (temp_t6_2 < 0) - { - phi_f6_5 = temp_f6_5 + 4294967296.0f; - } - temp_s2->unk8 = phi_f6_5 * (arg2->xmid + phi_f22) * 32.0f; - temp_t9_2 = phi_s1_2->unk5; - temp_f4 = temp_t9_2; - phi_f4 = temp_f4; - if (temp_t9_2 < 0) - { - phi_f4 = temp_f4 + 4294967296.0f; - } - temp_s2->unkA = phi_f4 * (arg2->ymid + phi_f24) * 32.0f; - temp_t2_2 = phi_s1_2->unk4; - temp_f10 = temp_t2_2; - phi_f10 = temp_f10; - if (temp_t2_2 < 0) - { - phi_f10 = temp_f10 + 4294967296.0f; - } - temp_s2->unk18 = phi_f10 * (arg2->xmid - phi_f14) * 32.0f; - temp_t7_2 = phi_s1_2->unk5; - temp_f18_4 = temp_t7_2; - phi_f18_4 = temp_f18_4; - if (temp_t7_2 < 0) - { - phi_f18_4 = temp_f18_4 + 4294967296.0f; - } - temp_s2->unk1A = phi_f18_4 * (arg2->ymid + phi_f16) * 32.0f; - temp_t0_2 = phi_s1_2->unk4; - temp_f8 = temp_t0_2; - phi_f8 = temp_f8; - if (temp_t0_2 < 0) - { - phi_f8 = temp_f8 + 4294967296.0f; - } - temp_s2->unk28 = phi_f8 * (arg2->xmid - phi_f22) * 32.0f; - temp_t4_2 = phi_s1_2->unk5; - temp_f6_6 = temp_t4_2; - phi_f6_6 = temp_f6_6; - if (temp_t4_2 < 0) - { - phi_f6_6 = temp_f6_6 + 4294967296.0f; - } - temp_s2->unk2A = phi_f6_6 * (arg2->ymid - phi_f24) * 32.0f; - temp_t5_3 = phi_s1_2->unk4; - temp_f4_2 = temp_t5_3; - phi_f4_2 = temp_f4_2; - if (temp_t5_3 < 0) - { - phi_f4_2 = temp_f4_2 + 4294967296.0f; - } - temp_s2->unk38 = phi_f4_2 * (arg2->xmid + phi_f14) * 32.0f; - temp_t8_3 = phi_s1_2->unk5; - temp_f10_2 = temp_t8_3; - phi_f10_2 = temp_f10_2; - if (temp_t8_3 < 0) - { - phi_f10_2 = temp_f10_2 + 4294967296.0f; - } - temp_s2->unk3A = phi_f10_2 * (arg2->ymid - phi_f16) * 32.0f; - } - temp_v0_5 = arg2->red; - temp_s2->unk3C = temp_v0_5; - temp_s2->unk2C = temp_v0_5; - temp_s2->unk1C = temp_v0_5; - temp_s2->unkC = temp_v0_5; - temp_v0_6 = arg2->green; - temp_a0_2 = &arg3; - temp_s2->unk3D = temp_v0_6; - temp_s2->unk2D = temp_v0_6; - temp_s2->unk1D = temp_v0_6; - temp_s2->unkD = temp_v0_6; - temp_v1_3 = arg2->blue; - temp_s2->unk3E = temp_v1_3; - temp_s2->unk2E = temp_v1_3; - temp_s2->unk1E = temp_v1_3; - temp_s2->unkE = temp_v1_3; - temp_v0_7 = arg2->alpha; - temp_s2->unk3F = temp_v0_7; - temp_s2->unk2F = temp_v0_7; - temp_s2->unk1F = temp_v0_7; - temp_s2->unkF = temp_v0_7; - if (arg2->alpha < 0xFF) - { - arg5 = 2; - } - temp_t2_3 = arg3; - arg3 = temp_t2_3 + 8; - temp_t2_3->unk4 = 0x2000; - temp_t2_3->unk0 = 0xB7000000; - texSelect(temp_a0_2, phi_s1_2, arg5, arg4, 2); - temp_s0 = arg3; - arg3 = temp_s0 + 8; - temp_s0->unk0 = 0x1020040; - temp_s0->unk4 = osVirtualToPhysical(arg0->unk0c); - temp_s1 = arg3; - arg3 = temp_s1 + 8; - temp_s1->unk0 = 0xBC001006; - temp_s1->unk4 = osVirtualToPhysical(temp_s2); - temp_t5_4 = arg3; - arg3 = temp_t5_4 + 8; - temp_t5_4->unk4 = 0x4000000; - temp_t5_4->unk0 = 0x4300040; - temp_t0_3 = arg3; - arg3 = temp_t0_3 + 8; - temp_t0_3->unk4 = 0x2010; - temp_t0_3->unk0 = 0xB1000032; - temp_t2_4 = arg3; - arg3 = temp_t2_4 + 8; - temp_t2_4->unk4 = 0; - temp_t2_4->unk0 = 0xB8000000; - spA8->unk0 = 0x6010000; - spA8->unk4 = arg3; } - return arg3; } -#endif - -#else -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel D_80052C68 -.word 0x40c90fdb /*6.2831855*/ -/*D:80052C6C*/ -glabel jpt_80052C6C -.word command00_reset_scroll_shift -.word command01_horizontal_scroll -.word command02_vertical_scroll -.word command03_horizontal_pos -.word command04_vertical_pos -.word command05_zoomx -.word command06_zoomy -.word command07_use_image_from_global_monitor_table -.word command08_halt_processing_for_time -.word command09_jump -.word command0A_jump_conditional -.word command0B_restart -.word command0C_break -.word command0D_colour_transition -.word command0E_set_rotation -.word command0F_rotate - -glabel D_80052CAC -.word 0x3fc90fdb /*1.5707964*/ -glabel D_80052CB0 -.word 0x3fb50481 /*1.4141999*/ -glabel D_80052CB4 -.word 0x3f59999a /*0.85000002*/ -glabel D_80052CB8 -.word 0x3e19999a /*0.15000001*/ -glabel D_80052CBC -.word 0x3e19999a /*0.15000001*/ -glabel D_80052CC0 -.word 0x3f666666 /*0.89999998*/ -.text -glabel process_monitor_animation_microcode -/* 07EA78 7F049F48 27BDFF50 */ addiu $sp, $sp, -0xb0 -/* 07EA7C 7F049F4C AFB10044 */ sw $s1, 0x44($sp) -/* 07EA80 7F049F50 AFB00040 */ sw $s0, 0x40($sp) -/* 07EA84 7F049F54 00C08025 */ move $s0, $a2 -/* 07EA88 7F049F58 00A08825 */ move $s1, $a1 -/* 07EA8C 7F049F5C AFBF004C */ sw $ra, 0x4c($sp) -/* 07EA90 7F049F60 AFB20048 */ sw $s2, 0x48($sp) -/* 07EA94 7F049F64 F7BA0038 */ sdc1 $f26, 0x38($sp) -/* 07EA98 7F049F68 F7B80030 */ sdc1 $f24, 0x30($sp) -/* 07EA9C 7F049F6C F7B60028 */ sdc1 $f22, 0x28($sp) -/* 07EAA0 7F049F70 F7B40020 */ sdc1 $f20, 0x20($sp) -/* 07EAA4 7F049F74 AFA400B0 */ sw $a0, 0xb0($sp) -/* 07EAA8 7F049F78 10A0031E */ beqz $a1, .L7F04ABF4 -/* 07EAAC 7F049F7C AFA700BC */ sw $a3, 0xbc($sp) -/* 07EAB0 7F049F80 94AE0000 */ lhu $t6, ($a1) -/* 07EAB4 7F049F84 24010018 */ li $at, 24 -/* 07EAB8 7F049F88 31CF00FF */ andi $t7, $t6, 0xff -/* 07EABC 7F049F8C 55E1031A */ bnel $t7, $at, .L7F04ABF8 -/* 07EAC0 7F049F90 8FBF004C */ lw $ra, 0x4c($sp) -/* 07EAC4 7F049F94 0FC2F5B1 */ jal dynAllocate7F0BD6C4 -/* 07EAC8 7F049F98 24040004 */ li $a0, 4 -/* 07EACC 7F049F9C 8FB800BC */ lw $t8, 0xbc($sp) -/* 07EAD0 7F049FA0 00409025 */ move $s2, $v0 -/* 07EAD4 7F049FA4 8FA400B0 */ lw $a0, 0xb0($sp) -/* 07EAD8 7F049FA8 27190008 */ addiu $t9, $t8, 8 -/* 07EADC 7F049FAC AFB900BC */ sw $t9, 0xbc($sp) -/* 07EAE0 7F049FB0 AFB800A8 */ sw $t8, 0xa8($sp) -/* 07EAE4 7F049FB4 8E280004 */ lw $t0, 4($s1) -/* 07EAE8 7F049FB8 02202825 */ move $a1, $s1 -/* 07EAEC 7F049FBC 0FC1B1E7 */ jal modelGetNodeRwData -/* 07EAF0 7F049FC0 AFA800A4 */ sw $t0, 0xa4($sp) -/* 07EAF4 7F049FC4 3C018005 */ lui $at, %hi(D_80052C68) -/* 07EAF8 7F049FC8 C43A2C68 */ lwc1 $f26, %lo(D_80052C68)($at) -/* 07EAFC 7F049FCC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07EB00 7F049FD0 4481C000 */ mtc1 $at, $f24 -/* 07EB04 7F049FD4 3C013A80 */ li $at, 0x3A800000 # 0.000977 -/* 07EB08 7F049FD8 4481B000 */ mtc1 $at, $f22 -/* 07EB0C 7F049FDC 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EB10 7F049FE0 44811000 */ mtc1 $at, $f2 -/* 07EB14 7F049FE4 4480A000 */ mtc1 $zero, $f20 -/* 07EB18 7F049FE8 AFA200A0 */ sw $v0, 0xa0($sp) -/* 07EB1C 7F049FEC 00008825 */ move $s1, $zero -/* 07EB20 7F049FF0 96020004 */ lhu $v0, 4($s0) -.L7F049FF4: -/* 07EB24 7F049FF4 8E090000 */ lw $t1, ($s0) -/* 07EB28 7F049FF8 00025080 */ sll $t2, $v0, 2 -/* 07EB2C 7F049FFC 012A1821 */ addu $v1, $t1, $t2 -/* 07EB30 7F04A000 8C6B0000 */ lw $t3, ($v1) -/* 07EB34 7F04A004 2D610010 */ sltiu $at, $t3, 0x10 -/* 07EB38 7F04A008 10200117 */ beqz $at, .L7F04A468 -/* 07EB3C 7F04A00C 000B5880 */ sll $t3, $t3, 2 -/* 07EB40 7F04A010 3C018005 */ lui $at, %hi(jpt_80052C6C) -/* 07EB44 7F04A014 002B0821 */ addu $at, $at, $t3 -/* 07EB48 7F04A018 8C2B2C6C */ lw $t3, %lo(jpt_80052C6C)($at) -/* 07EB4C 7F04A01C 01600008 */ jr $t3 -/* 07EB50 7F04A020 00000000 */ nop -command00_reset_scroll_shift: -/* 07EB54 7F04A024 244C0001 */ addiu $t4, $v0, 1 -/* 07EB58 7F04A028 E6140040 */ swc1 $f20, 0x40($s0) -/* 07EB5C 7F04A02C E6140054 */ swc1 $f20, 0x54($s0) -/* 07EB60 7F04A030 1000010D */ b .L7F04A468 -/* 07EB64 7F04A034 A60C0004 */ sh $t4, 4($s0) -command01_horizontal_scroll: -/* 07EB68 7F04A038 E614003C */ swc1 $f20, 0x3c($s0) -/* 07EB6C 7F04A03C 8C6D0008 */ lw $t5, 8($v1) -/* 07EB70 7F04A040 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EB74 7F04A044 448D2000 */ mtc1 $t5, $f4 -/* 07EB78 7F04A048 05A10004 */ bgez $t5, .L7F04A05C -/* 07EB7C 7F04A04C 468021A0 */ cvt.s.w $f6, $f4 -/* 07EB80 7F04A050 44814000 */ mtc1 $at, $f8 -/* 07EB84 7F04A054 00000000 */ nop -/* 07EB88 7F04A058 46083180 */ add.s $f6, $f6, $f8 -.L7F04A05C: -/* 07EB8C 7F04A05C 4606C283 */ div.s $f10, $f24, $f6 -/* 07EB90 7F04A060 C6000038 */ lwc1 $f0, 0x38($s0) -/* 07EB94 7F04A064 244F0003 */ addiu $t7, $v0, 3 -/* 07EB98 7F04A068 E6000044 */ swc1 $f0, 0x44($s0) -/* 07EB9C 7F04A06C E60A0040 */ swc1 $f10, 0x40($s0) -/* 07EBA0 7F04A070 8C6E0004 */ lw $t6, 4($v1) -/* 07EBA4 7F04A074 A60F0004 */ sh $t7, 4($s0) -/* 07EBA8 7F04A078 448E9000 */ mtc1 $t6, $f18 -/* 07EBAC 7F04A07C 00000000 */ nop -/* 07EBB0 7F04A080 46809120 */ cvt.s.w $f4, $f18 -/* 07EBB4 7F04A084 46162202 */ mul.s $f8, $f4, $f22 -/* 07EBB8 7F04A088 46080180 */ add.s $f6, $f0, $f8 -/* 07EBBC 7F04A08C 100000F6 */ b .L7F04A468 -/* 07EBC0 7F04A090 E6060048 */ swc1 $f6, 0x48($s0) -command02_vertical_scroll: -/* 07EBC4 7F04A094 E6140050 */ swc1 $f20, 0x50($s0) -/* 07EBC8 7F04A098 8C780008 */ lw $t8, 8($v1) -/* 07EBCC 7F04A09C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EBD0 7F04A0A0 44985000 */ mtc1 $t8, $f10 -/* 07EBD4 7F04A0A4 07010004 */ bgez $t8, .L7F04A0B8 -/* 07EBD8 7F04A0A8 468054A0 */ cvt.s.w $f18, $f10 -/* 07EBDC 7F04A0AC 44812000 */ mtc1 $at, $f4 -/* 07EBE0 7F04A0B0 00000000 */ nop -/* 07EBE4 7F04A0B4 46049480 */ add.s $f18, $f18, $f4 -.L7F04A0B8: -/* 07EBE8 7F04A0B8 4612C203 */ div.s $f8, $f24, $f18 -/* 07EBEC 7F04A0BC C600004C */ lwc1 $f0, 0x4c($s0) -/* 07EBF0 7F04A0C0 24480003 */ addiu $t0, $v0, 3 -/* 07EBF4 7F04A0C4 E6000058 */ swc1 $f0, 0x58($s0) -/* 07EBF8 7F04A0C8 E6080054 */ swc1 $f8, 0x54($s0) -/* 07EBFC 7F04A0CC 8C790004 */ lw $t9, 4($v1) -/* 07EC00 7F04A0D0 A6080004 */ sh $t0, 4($s0) -/* 07EC04 7F04A0D4 44993000 */ mtc1 $t9, $f6 -/* 07EC08 7F04A0D8 00000000 */ nop -/* 07EC0C 7F04A0DC 468032A0 */ cvt.s.w $f10, $f6 -/* 07EC10 7F04A0E0 46165102 */ mul.s $f4, $f10, $f22 -/* 07EC14 7F04A0E4 46040480 */ add.s $f18, $f0, $f4 -/* 07EC18 7F04A0E8 100000DF */ b .L7F04A468 -/* 07EC1C 7F04A0EC E612005C */ swc1 $f18, 0x5c($s0) -command03_horizontal_pos: -/* 07EC20 7F04A0F0 E614003C */ swc1 $f20, 0x3c($s0) -/* 07EC24 7F04A0F4 8C690008 */ lw $t1, 8($v1) -/* 07EC28 7F04A0F8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EC2C 7F04A0FC 44894000 */ mtc1 $t1, $f8 -/* 07EC30 7F04A100 05210004 */ bgez $t1, .L7F04A114 -/* 07EC34 7F04A104 468041A0 */ cvt.s.w $f6, $f8 -/* 07EC38 7F04A108 44815000 */ mtc1 $at, $f10 -/* 07EC3C 7F04A10C 00000000 */ nop -/* 07EC40 7F04A110 460A3180 */ add.s $f6, $f6, $f10 -.L7F04A114: -/* 07EC44 7F04A114 4606C103 */ div.s $f4, $f24, $f6 -/* 07EC48 7F04A118 C6120038 */ lwc1 $f18, 0x38($s0) -/* 07EC4C 7F04A11C 244B0003 */ addiu $t3, $v0, 3 -/* 07EC50 7F04A120 E6120044 */ swc1 $f18, 0x44($s0) -/* 07EC54 7F04A124 E6040040 */ swc1 $f4, 0x40($s0) -/* 07EC58 7F04A128 8C6A0004 */ lw $t2, 4($v1) -/* 07EC5C 7F04A12C A60B0004 */ sh $t3, 4($s0) -/* 07EC60 7F04A130 448A4000 */ mtc1 $t2, $f8 -/* 07EC64 7F04A134 00000000 */ nop -/* 07EC68 7F04A138 468042A0 */ cvt.s.w $f10, $f8 -/* 07EC6C 7F04A13C 46165182 */ mul.s $f6, $f10, $f22 -/* 07EC70 7F04A140 100000C9 */ b .L7F04A468 -/* 07EC74 7F04A144 E6060048 */ swc1 $f6, 0x48($s0) -command04_vertical_pos: -/* 07EC78 7F04A148 E6140050 */ swc1 $f20, 0x50($s0) -/* 07EC7C 7F04A14C 8C6C0008 */ lw $t4, 8($v1) -/* 07EC80 7F04A150 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EC84 7F04A154 448C2000 */ mtc1 $t4, $f4 -/* 07EC88 7F04A158 05810004 */ bgez $t4, .L7F04A16C -/* 07EC8C 7F04A15C 468024A0 */ cvt.s.w $f18, $f4 -/* 07EC90 7F04A160 44814000 */ mtc1 $at, $f8 -/* 07EC94 7F04A164 00000000 */ nop -/* 07EC98 7F04A168 46089480 */ add.s $f18, $f18, $f8 -.L7F04A16C: -/* 07EC9C 7F04A16C 4612C283 */ div.s $f10, $f24, $f18 -/* 07ECA0 7F04A170 C606004C */ lwc1 $f6, 0x4c($s0) -/* 07ECA4 7F04A174 244E0003 */ addiu $t6, $v0, 3 -/* 07ECA8 7F04A178 E6060058 */ swc1 $f6, 0x58($s0) -/* 07ECAC 7F04A17C E60A0054 */ swc1 $f10, 0x54($s0) -/* 07ECB0 7F04A180 8C6D0004 */ lw $t5, 4($v1) -/* 07ECB4 7F04A184 A60E0004 */ sh $t6, 4($s0) -/* 07ECB8 7F04A188 448D2000 */ mtc1 $t5, $f4 -/* 07ECBC 7F04A18C 00000000 */ nop -/* 07ECC0 7F04A190 46802220 */ cvt.s.w $f8, $f4 -/* 07ECC4 7F04A194 46164482 */ mul.s $f18, $f8, $f22 -/* 07ECC8 7F04A198 100000B3 */ b .L7F04A468 -/* 07ECCC 7F04A19C E612005C */ swc1 $f18, 0x5c($s0) -command05_zoomx: -/* 07ECD0 7F04A1A0 E6140014 */ swc1 $f20, 0x14($s0) -/* 07ECD4 7F04A1A4 8C6F0008 */ lw $t7, 8($v1) -/* 07ECD8 7F04A1A8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07ECDC 7F04A1AC 448F5000 */ mtc1 $t7, $f10 -/* 07ECE0 7F04A1B0 05E10004 */ bgez $t7, .L7F04A1C4 -/* 07ECE4 7F04A1B4 468051A0 */ cvt.s.w $f6, $f10 -/* 07ECE8 7F04A1B8 44812000 */ mtc1 $at, $f4 -/* 07ECEC 7F04A1BC 00000000 */ nop -/* 07ECF0 7F04A1C0 46043180 */ add.s $f6, $f6, $f4 -.L7F04A1C4: -/* 07ECF4 7F04A1C4 4606C203 */ div.s $f8, $f24, $f6 -/* 07ECF8 7F04A1C8 C6120010 */ lwc1 $f18, 0x10($s0) -/* 07ECFC 7F04A1CC 24590003 */ addiu $t9, $v0, 3 -/* 07ED00 7F04A1D0 E612001C */ swc1 $f18, 0x1c($s0) -/* 07ED04 7F04A1D4 E6080018 */ swc1 $f8, 0x18($s0) -/* 07ED08 7F04A1D8 8C780004 */ lw $t8, 4($v1) -/* 07ED0C 7F04A1DC A6190004 */ sh $t9, 4($s0) -/* 07ED10 7F04A1E0 44985000 */ mtc1 $t8, $f10 -/* 07ED14 7F04A1E4 00000000 */ nop -/* 07ED18 7F04A1E8 46805120 */ cvt.s.w $f4, $f10 -/* 07ED1C 7F04A1EC 46162182 */ mul.s $f6, $f4, $f22 -/* 07ED20 7F04A1F0 1000009D */ b .L7F04A468 -/* 07ED24 7F04A1F4 E6060020 */ swc1 $f6, 0x20($s0) -command06_zoomy: -/* 07ED28 7F04A1F8 E6140028 */ swc1 $f20, 0x28($s0) -/* 07ED2C 7F04A1FC 8C680008 */ lw $t0, 8($v1) -/* 07ED30 7F04A200 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07ED34 7F04A204 44884000 */ mtc1 $t0, $f8 -/* 07ED38 7F04A208 05010004 */ bgez $t0, .L7F04A21C -/* 07ED3C 7F04A20C 468044A0 */ cvt.s.w $f18, $f8 -/* 07ED40 7F04A210 44815000 */ mtc1 $at, $f10 -/* 07ED44 7F04A214 00000000 */ nop -/* 07ED48 7F04A218 460A9480 */ add.s $f18, $f18, $f10 -.L7F04A21C: -/* 07ED4C 7F04A21C 4612C103 */ div.s $f4, $f24, $f18 -/* 07ED50 7F04A220 C6060024 */ lwc1 $f6, 0x24($s0) -/* 07ED54 7F04A224 244A0003 */ addiu $t2, $v0, 3 -/* 07ED58 7F04A228 E6060030 */ swc1 $f6, 0x30($s0) -/* 07ED5C 7F04A22C E604002C */ swc1 $f4, 0x2c($s0) -/* 07ED60 7F04A230 8C690004 */ lw $t1, 4($v1) -/* 07ED64 7F04A234 A60A0004 */ sh $t2, 4($s0) -/* 07ED68 7F04A238 44894000 */ mtc1 $t1, $f8 -/* 07ED6C 7F04A23C 00000000 */ nop -/* 07ED70 7F04A240 468042A0 */ cvt.s.w $f10, $f8 -/* 07ED74 7F04A244 46165482 */ mul.s $f18, $f10, $f22 -/* 07ED78 7F04A248 10000087 */ b .L7F04A468 -/* 07ED7C 7F04A24C E6120034 */ swc1 $f18, 0x34($s0) -command07_use_image_from_global_monitor_table: -/* 07ED80 7F04A250 02002025 */ move $a0, $s0 -/* 07ED84 7F04A254 0FC127D0 */ jal save_img_index_to_obj_ani_slot -/* 07ED88 7F04A258 8C650004 */ lw $a1, 4($v1) -/* 07ED8C 7F04A25C 960B0004 */ lhu $t3, 4($s0) -/* 07ED90 7F04A260 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07ED94 7F04A264 44811000 */ mtc1 $at, $f2 -/* 07ED98 7F04A268 256C0002 */ addiu $t4, $t3, 2 -/* 07ED9C 7F04A26C 1000007E */ b .L7F04A468 -/* 07EDA0 7F04A270 A60C0004 */ sh $t4, 4($s0) -command08_halt_processing_for_time: -/* 07EDA4 7F04A274 86020006 */ lh $v0, 6($s0) -/* 07EDA8 7F04A278 3C0D8005 */ lui $t5, %hi(g_ClockTimer) -/* 07EDAC 7F04A27C 0442000E */ bltzl $v0, .L7F04A2B8 -/* 07EDB0 7F04A280 8C680004 */ lw $t0, 4($v1) -/* 07EDB4 7F04A284 8DAD8374 */ lw $t5, %lo(g_ClockTimer)($t5) -/* 07EDB8 7F04A288 004D7023 */ subu $t6, $v0, $t5 -/* 07EDBC 7F04A28C A60E0006 */ sh $t6, 6($s0) -/* 07EDC0 7F04A290 860F0006 */ lh $t7, 6($s0) -/* 07EDC4 7F04A294 05E20004 */ bltzl $t7, .L7F04A2A8 -/* 07EDC8 7F04A298 96180004 */ lhu $t8, 4($s0) -/* 07EDCC 7F04A29C 10000072 */ b .L7F04A468 -/* 07EDD0 7F04A2A0 24110001 */ li $s1, 1 -/* 07EDD4 7F04A2A4 96180004 */ lhu $t8, 4($s0) -.L7F04A2A8: -/* 07EDD8 7F04A2A8 27190002 */ addiu $t9, $t8, 2 -/* 07EDDC 7F04A2AC 1000006E */ b .L7F04A468 -/* 07EDE0 7F04A2B0 A6190004 */ sh $t9, 4($s0) -/* 07EDE4 7F04A2B4 8C680004 */ lw $t0, 4($v1) -.L7F04A2B8: -/* 07EDE8 7F04A2B8 24110001 */ li $s1, 1 -/* 07EDEC 7F04A2BC 1000006A */ b .L7F04A468 -/* 07EDF0 7F04A2C0 A6080006 */ sh $t0, 6($s0) -command09_jump: -/* 07EDF4 7F04A2C4 02002025 */ move $a0, $s0 -/* 07EDF8 7F04A2C8 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot -/* 07EDFC 7F04A2CC 8C650004 */ lw $a1, 4($v1) -/* 07EE00 7F04A2D0 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EE04 7F04A2D4 44811000 */ mtc1 $at, $f2 -/* 07EE08 7F04A2D8 10000063 */ b .L7F04A468 -/* 07EE0C 7F04A2DC 00000000 */ nop -command0A_jump_conditional: -/* 07EE10 7F04A2E0 0C002914 */ jal randomGetNext -/* 07EE14 7F04A2E4 AFA30094 */ sw $v1, 0x94($sp) -/* 07EE18 7F04A2E8 8FA30094 */ lw $v1, 0x94($sp) -/* 07EE1C 7F04A2EC 00024C02 */ srl $t1, $v0, 0x10 -/* 07EE20 7F04A2F0 02002025 */ move $a0, $s0 -/* 07EE24 7F04A2F4 8C6A0008 */ lw $t2, 8($v1) -/* 07EE28 7F04A2F8 012A082B */ sltu $at, $t1, $t2 -/* 07EE2C 7F04A2FC 50200008 */ beql $at, $zero, .L7F04A320 -/* 07EE30 7F04A300 960B0004 */ lhu $t3, 4($s0) -/* 07EE34 7F04A304 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot -/* 07EE38 7F04A308 8C650004 */ lw $a1, 4($v1) -/* 07EE3C 7F04A30C 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EE40 7F04A310 44811000 */ mtc1 $at, $f2 -/* 07EE44 7F04A314 10000054 */ b .L7F04A468 -/* 07EE48 7F04A318 00000000 */ nop -/* 07EE4C 7F04A31C 960B0004 */ lhu $t3, 4($s0) -.L7F04A320: -/* 07EE50 7F04A320 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EE54 7F04A324 44811000 */ mtc1 $at, $f2 -/* 07EE58 7F04A328 256C0003 */ addiu $t4, $t3, 3 -/* 07EE5C 7F04A32C A60C0004 */ sh $t4, 4($s0) -/* 07EE60 7F04A330 1000004D */ b .L7F04A468 -/* 07EE64 7F04A334 00000000 */ nop -command0B_restart: -/* 07EE68 7F04A338 1000004B */ b .L7F04A468 -/* 07EE6C 7F04A33C A6000004 */ sh $zero, 4($s0) -command0C_break: -/* 07EE70 7F04A340 10000049 */ b .L7F04A468 -/* 07EE74 7F04A344 24110001 */ li $s1, 1 -command0D_colour_transition: -/* 07EE78 7F04A348 E614006C */ swc1 $f20, 0x6c($s0) -/* 07EE7C 7F04A34C 8C6D0008 */ lw $t5, 8($v1) -/* 07EE80 7F04A350 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EE84 7F04A354 448D2000 */ mtc1 $t5, $f4 -/* 07EE88 7F04A358 05A10004 */ bgez $t5, .L7F04A36C -/* 07EE8C 7F04A35C 468021A0 */ cvt.s.w $f6, $f4 -/* 07EE90 7F04A360 44814000 */ mtc1 $at, $f8 -/* 07EE94 7F04A364 00000000 */ nop -/* 07EE98 7F04A368 46083180 */ add.s $f6, $f6, $f8 -.L7F04A36C: -/* 07EE9C 7F04A36C 4606C283 */ div.s $f10, $f24, $f6 -/* 07EEA0 7F04A370 920E0060 */ lbu $t6, 0x60($s0) -/* 07EEA4 7F04A374 92080063 */ lbu $t0, 0x63($s0) -/* 07EEA8 7F04A378 920C0066 */ lbu $t4, 0x66($s0) -/* 07EEAC 7F04A37C A20E0061 */ sb $t6, 0x61($s0) -/* 07EEB0 7F04A380 92180069 */ lbu $t8, 0x69($s0) -/* 07EEB4 7F04A384 E60A0070 */ swc1 $f10, 0x70($s0) -/* 07EEB8 7F04A388 8C6F0004 */ lw $t7, 4($v1) -/* 07EEBC 7F04A38C A2080064 */ sb $t0, 0x64($s0) -/* 07EEC0 7F04A390 000FCE02 */ srl $t9, $t7, 0x18 -/* 07EEC4 7F04A394 A2190062 */ sb $t9, 0x62($s0) -/* 07EEC8 7F04A398 8C690004 */ lw $t1, 4($v1) -/* 07EECC 7F04A39C A20C0067 */ sb $t4, 0x67($s0) -/* 07EED0 7F04A3A0 00095C02 */ srl $t3, $t1, 0x10 -/* 07EED4 7F04A3A4 A20B0065 */ sb $t3, 0x65($s0) -/* 07EED8 7F04A3A8 8C6D0004 */ lw $t5, 4($v1) -/* 07EEDC 7F04A3AC A218006A */ sb $t8, 0x6a($s0) -/* 07EEE0 7F04A3B0 24490003 */ addiu $t1, $v0, 3 -/* 07EEE4 7F04A3B4 000D7A02 */ srl $t7, $t5, 8 -/* 07EEE8 7F04A3B8 A20F0068 */ sb $t7, 0x68($s0) -/* 07EEEC 7F04A3BC 8C680004 */ lw $t0, 4($v1) -/* 07EEF0 7F04A3C0 A6090004 */ sh $t1, 4($s0) -/* 07EEF4 7F04A3C4 10000028 */ b .L7F04A468 -/* 07EEF8 7F04A3C8 A208006B */ sb $t0, 0x6b($s0) -command0E_set_rotation: -/* 07EEFC 7F04A3CC 8C6A0004 */ lw $t2, 4($v1) -/* 07EF00 7F04A3D0 244B0002 */ addiu $t3, $v0, 2 -/* 07EF04 7F04A3D4 A60B0004 */ sh $t3, 4($s0) -/* 07EF08 7F04A3D8 448A9000 */ mtc1 $t2, $f18 -/* 07EF0C 7F04A3DC 00000000 */ nop -/* 07EF10 7F04A3E0 46809120 */ cvt.s.w $f4, $f18 -/* 07EF14 7F04A3E4 461A2202 */ mul.s $f8, $f4, $f26 -/* 07EF18 7F04A3E8 46024183 */ div.s $f6, $f8, $f2 -/* 07EF1C 7F04A3EC 1000001E */ b .L7F04A468 -/* 07EF20 7F04A3F0 E606000C */ swc1 $f6, 0xc($s0) -command0F_rotate: -/* 07EF24 7F04A3F4 8C6C0004 */ lw $t4, 4($v1) -/* 07EF28 7F04A3F8 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) -/* 07EF2C 7F04A3FC C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) -/* 07EF30 7F04A400 448C9000 */ mtc1 $t4, $f18 -/* 07EF34 7F04A404 00000000 */ nop -/* 07EF38 7F04A408 46809120 */ cvt.s.w $f4, $f18 -/* 07EF3C 7F04A40C 46045202 */ mul.s $f8, $f10, $f4 -/* 07EF40 7F04A410 C60A000C */ lwc1 $f10, 0xc($s0) -/* 07EF44 7F04A414 461A4182 */ mul.s $f6, $f8, $f26 -/* 07EF48 7F04A418 46023483 */ div.s $f18, $f6, $f2 -/* 07EF4C 7F04A41C 46125100 */ add.s $f4, $f10, $f18 -/* 07EF50 7F04A420 E604000C */ swc1 $f4, 0xc($s0) -/* 07EF54 7F04A424 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07EF58 7F04A428 460CD03E */ c.le.s $f26, $f12 -/* 07EF5C 7F04A42C 00000000 */ nop -/* 07EF60 7F04A430 45020005 */ bc1fl .L7F04A448 -/* 07EF64 7F04A434 4614603C */ c.lt.s $f12, $f20 -/* 07EF68 7F04A438 461A6201 */ sub.s $f8, $f12, $f26 -/* 07EF6C 7F04A43C E608000C */ swc1 $f8, 0xc($s0) -/* 07EF70 7F04A440 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07EF74 7F04A444 4614603C */ c.lt.s $f12, $f20 -.L7F04A448: -/* 07EF78 7F04A448 00000000 */ nop -/* 07EF7C 7F04A44C 45020004 */ bc1fl .L7F04A460 -/* 07EF80 7F04A450 960D0004 */ lhu $t5, 4($s0) -/* 07EF84 7F04A454 461A6180 */ add.s $f6, $f12, $f26 -/* 07EF88 7F04A458 E606000C */ swc1 $f6, 0xc($s0) -/* 07EF8C 7F04A45C 960D0004 */ lhu $t5, 4($s0) -.L7F04A460: -/* 07EF90 7F04A460 25AE0002 */ addiu $t6, $t5, 2 -/* 07EF94 7F04A464 A60E0004 */ sh $t6, 4($s0) -def_7F04A01C: -.L7F04A468: -/* 07EF98 7F04A468 5220FEE2 */ beql $s1, $zero, .L7F049FF4 -/* 07EF9C 7F04A46C 96020004 */ lhu $v0, 4($s0) -/* 07EFA0 7F04A470 C6000018 */ lwc1 $f0, 0x18($s0) -/* 07EFA4 7F04A474 4600A03C */ c.lt.s $f20, $f0 -/* 07EFA8 7F04A478 00000000 */ nop -/* 07EFAC 7F04A47C 45000017 */ bc1f .L7F04A4DC -/* 07EFB0 7F04A480 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) -/* 07EFB4 7F04A484 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 07EFB8 7F04A488 C4520000 */ lwc1 $f18, ($v0) -/* 07EFBC 7F04A48C C60A0014 */ lwc1 $f10, 0x14($s0) -/* 07EFC0 7F04A490 46120102 */ mul.s $f4, $f0, $f18 -/* 07EFC4 7F04A494 46045200 */ add.s $f8, $f10, $f4 -/* 07EFC8 7F04A498 E6080014 */ swc1 $f8, 0x14($s0) -/* 07EFCC 7F04A49C C6020014 */ lwc1 $f2, 0x14($s0) -/* 07EFD0 7F04A4A0 4618103C */ c.lt.s $f2, $f24 -/* 07EFD4 7F04A4A4 00000000 */ nop -/* 07EFD8 7F04A4A8 45020009 */ bc1fl .L7F04A4D0 -/* 07EFDC 7F04A4AC C6080020 */ lwc1 $f8, 0x20($s0) -/* 07EFE0 7F04A4B0 C600001C */ lwc1 $f0, 0x1c($s0) -/* 07EFE4 7F04A4B4 C6060020 */ lwc1 $f6, 0x20($s0) -/* 07EFE8 7F04A4B8 46003481 */ sub.s $f18, $f6, $f0 -/* 07EFEC 7F04A4BC 46029282 */ mul.s $f10, $f18, $f2 -/* 07EFF0 7F04A4C0 460A0100 */ add.s $f4, $f0, $f10 -/* 07EFF4 7F04A4C4 10000005 */ b .L7F04A4DC -/* 07EFF8 7F04A4C8 E6040010 */ swc1 $f4, 0x10($s0) -/* 07EFFC 7F04A4CC C6080020 */ lwc1 $f8, 0x20($s0) -.L7F04A4D0: -/* 07F000 7F04A4D0 E6180014 */ swc1 $f24, 0x14($s0) -/* 07F004 7F04A4D4 E6140018 */ swc1 $f20, 0x18($s0) -/* 07F008 7F04A4D8 E6080010 */ swc1 $f8, 0x10($s0) -.L7F04A4DC: -/* 07F00C 7F04A4DC C600002C */ lwc1 $f0, 0x2c($s0) -/* 07F010 7F04A4E0 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) -/* 07F014 7F04A4E4 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 07F018 7F04A4E8 4600A03C */ c.lt.s $f20, $f0 -/* 07F01C 7F04A4EC 00000000 */ nop -/* 07F020 7F04A4F0 45020017 */ bc1fl .L7F04A550 -/* 07F024 7F04A4F4 C6000040 */ lwc1 $f0, 0x40($s0) -/* 07F028 7F04A4F8 C4520000 */ lwc1 $f18, ($v0) -/* 07F02C 7F04A4FC C6060028 */ lwc1 $f6, 0x28($s0) -/* 07F030 7F04A500 46120282 */ mul.s $f10, $f0, $f18 -/* 07F034 7F04A504 460A3100 */ add.s $f4, $f6, $f10 -/* 07F038 7F04A508 E6040028 */ swc1 $f4, 0x28($s0) -/* 07F03C 7F04A50C C6020028 */ lwc1 $f2, 0x28($s0) -/* 07F040 7F04A510 4618103C */ c.lt.s $f2, $f24 -/* 07F044 7F04A514 00000000 */ nop -/* 07F048 7F04A518 45020009 */ bc1fl .L7F04A540 -/* 07F04C 7F04A51C C6040034 */ lwc1 $f4, 0x34($s0) -/* 07F050 7F04A520 C6000030 */ lwc1 $f0, 0x30($s0) -/* 07F054 7F04A524 C6080034 */ lwc1 $f8, 0x34($s0) -/* 07F058 7F04A528 46004481 */ sub.s $f18, $f8, $f0 -/* 07F05C 7F04A52C 46029182 */ mul.s $f6, $f18, $f2 -/* 07F060 7F04A530 46060280 */ add.s $f10, $f0, $f6 -/* 07F064 7F04A534 10000005 */ b .L7F04A54C -/* 07F068 7F04A538 E60A0024 */ swc1 $f10, 0x24($s0) -/* 07F06C 7F04A53C C6040034 */ lwc1 $f4, 0x34($s0) -.L7F04A540: -/* 07F070 7F04A540 E6180028 */ swc1 $f24, 0x28($s0) -/* 07F074 7F04A544 E614002C */ swc1 $f20, 0x2c($s0) -/* 07F078 7F04A548 E6040024 */ swc1 $f4, 0x24($s0) -.L7F04A54C: -/* 07F07C 7F04A54C C6000040 */ lwc1 $f0, 0x40($s0) -.L7F04A550: -/* 07F080 7F04A550 4600A03C */ c.lt.s $f20, $f0 -/* 07F084 7F04A554 00000000 */ nop -/* 07F088 7F04A558 45020017 */ bc1fl .L7F04A5B8 -/* 07F08C 7F04A55C C6000054 */ lwc1 $f0, 0x54($s0) -/* 07F090 7F04A560 C4520000 */ lwc1 $f18, ($v0) -/* 07F094 7F04A564 C608003C */ lwc1 $f8, 0x3c($s0) -/* 07F098 7F04A568 46120182 */ mul.s $f6, $f0, $f18 -/* 07F09C 7F04A56C 46064280 */ add.s $f10, $f8, $f6 -/* 07F0A0 7F04A570 E60A003C */ swc1 $f10, 0x3c($s0) -/* 07F0A4 7F04A574 C602003C */ lwc1 $f2, 0x3c($s0) -/* 07F0A8 7F04A578 4618103C */ c.lt.s $f2, $f24 -/* 07F0AC 7F04A57C 00000000 */ nop -/* 07F0B0 7F04A580 45020009 */ bc1fl .L7F04A5A8 -/* 07F0B4 7F04A584 C60A0048 */ lwc1 $f10, 0x48($s0) -/* 07F0B8 7F04A588 C6000044 */ lwc1 $f0, 0x44($s0) -/* 07F0BC 7F04A58C C6040048 */ lwc1 $f4, 0x48($s0) -/* 07F0C0 7F04A590 46002481 */ sub.s $f18, $f4, $f0 -/* 07F0C4 7F04A594 46029202 */ mul.s $f8, $f18, $f2 -/* 07F0C8 7F04A598 46080180 */ add.s $f6, $f0, $f8 -/* 07F0CC 7F04A59C 10000005 */ b .L7F04A5B4 -/* 07F0D0 7F04A5A0 E6060038 */ swc1 $f6, 0x38($s0) -/* 07F0D4 7F04A5A4 C60A0048 */ lwc1 $f10, 0x48($s0) -.L7F04A5A8: -/* 07F0D8 7F04A5A8 E618003C */ swc1 $f24, 0x3c($s0) -/* 07F0DC 7F04A5AC E6140040 */ swc1 $f20, 0x40($s0) -/* 07F0E0 7F04A5B0 E60A0038 */ swc1 $f10, 0x38($s0) -.L7F04A5B4: -/* 07F0E4 7F04A5B4 C6000054 */ lwc1 $f0, 0x54($s0) -.L7F04A5B8: -/* 07F0E8 7F04A5B8 4600A03C */ c.lt.s $f20, $f0 -/* 07F0EC 7F04A5BC 00000000 */ nop -/* 07F0F0 7F04A5C0 45020017 */ bc1fl .L7F04A620 -/* 07F0F4 7F04A5C4 C6020070 */ lwc1 $f2, 0x70($s0) -/* 07F0F8 7F04A5C8 C4520000 */ lwc1 $f18, ($v0) -/* 07F0FC 7F04A5CC C6040050 */ lwc1 $f4, 0x50($s0) -/* 07F100 7F04A5D0 46120202 */ mul.s $f8, $f0, $f18 -/* 07F104 7F04A5D4 46082180 */ add.s $f6, $f4, $f8 -/* 07F108 7F04A5D8 E6060050 */ swc1 $f6, 0x50($s0) -/* 07F10C 7F04A5DC C6020050 */ lwc1 $f2, 0x50($s0) -/* 07F110 7F04A5E0 4618103C */ c.lt.s $f2, $f24 -/* 07F114 7F04A5E4 00000000 */ nop -/* 07F118 7F04A5E8 45020009 */ bc1fl .L7F04A610 -/* 07F11C 7F04A5EC C606005C */ lwc1 $f6, 0x5c($s0) -/* 07F120 7F04A5F0 C6000058 */ lwc1 $f0, 0x58($s0) -/* 07F124 7F04A5F4 C60A005C */ lwc1 $f10, 0x5c($s0) -/* 07F128 7F04A5F8 46005481 */ sub.s $f18, $f10, $f0 -/* 07F12C 7F04A5FC 46029102 */ mul.s $f4, $f18, $f2 -/* 07F130 7F04A600 46040200 */ add.s $f8, $f0, $f4 -/* 07F134 7F04A604 10000005 */ b .L7F04A61C -/* 07F138 7F04A608 E608004C */ swc1 $f8, 0x4c($s0) -/* 07F13C 7F04A60C C606005C */ lwc1 $f6, 0x5c($s0) -.L7F04A610: -/* 07F140 7F04A610 E6180050 */ swc1 $f24, 0x50($s0) -/* 07F144 7F04A614 E6140054 */ swc1 $f20, 0x54($s0) -/* 07F148 7F04A618 E606004C */ swc1 $f6, 0x4c($s0) -.L7F04A61C: -/* 07F14C 7F04A61C C6020070 */ lwc1 $f2, 0x70($s0) -.L7F04A620: -/* 07F150 7F04A620 4602A03C */ c.lt.s $f20, $f2 -/* 07F154 7F04A624 00000000 */ nop -/* 07F158 7F04A628 4502003F */ bc1fl .L7F04A728 -/* 07F15C 7F04A62C 8FAA00A0 */ lw $t2, 0xa0($sp) -/* 07F160 7F04A630 C4520000 */ lwc1 $f18, ($v0) -/* 07F164 7F04A634 C60A006C */ lwc1 $f10, 0x6c($s0) -/* 07F168 7F04A638 46121102 */ mul.s $f4, $f2, $f18 -/* 07F16C 7F04A63C 46045200 */ add.s $f8, $f10, $f4 -/* 07F170 7F04A640 E608006C */ swc1 $f8, 0x6c($s0) -/* 07F174 7F04A644 C600006C */ lwc1 $f0, 0x6c($s0) -/* 07F178 7F04A648 4618003C */ c.lt.s $f0, $f24 -/* 07F17C 7F04A64C 00000000 */ nop -/* 07F180 7F04A650 4502002B */ bc1fl .L7F04A700 -/* 07F184 7F04A654 920F0062 */ lbu $t7, 0x62($s0) -/* 07F188 7F04A658 92020061 */ lbu $v0, 0x61($s0) -/* 07F18C 7F04A65C 920F0062 */ lbu $t7, 0x62($s0) -/* 07F190 7F04A660 92030064 */ lbu $v1, 0x64($s0) -/* 07F194 7F04A664 920A0065 */ lbu $t2, 0x65($s0) -/* 07F198 7F04A668 01E2C023 */ subu $t8, $t7, $v0 -/* 07F19C 7F04A66C 44983000 */ mtc1 $t8, $f6 -/* 07F1A0 7F04A670 01435823 */ subu $t3, $t2, $v1 -/* 07F1A4 7F04A674 448B4000 */ mtc1 $t3, $f8 -/* 07F1A8 7F04A678 468034A0 */ cvt.s.w $f18, $f6 -/* 07F1AC 7F04A67C 920F0068 */ lbu $t7, 0x68($s0) -/* 07F1B0 7F04A680 92040067 */ lbu $a0, 0x67($s0) -/* 07F1B4 7F04A684 920A006B */ lbu $t2, 0x6b($s0) -/* 07F1B8 7F04A688 9205006A */ lbu $a1, 0x6a($s0) -/* 07F1BC 7F04A68C 468041A0 */ cvt.s.w $f6, $f8 -/* 07F1C0 7F04A690 46009282 */ mul.s $f10, $f18, $f0 -/* 07F1C4 7F04A694 01E4C023 */ subu $t8, $t7, $a0 -/* 07F1C8 7F04A698 01455823 */ subu $t3, $t2, $a1 -/* 07F1CC 7F04A69C 46003482 */ mul.s $f18, $f6, $f0 -/* 07F1D0 7F04A6A0 4600510D */ trunc.w.s $f4, $f10 -/* 07F1D4 7F04A6A4 4600928D */ trunc.w.s $f10, $f18 -/* 07F1D8 7F04A6A8 44082000 */ mfc1 $t0, $f4 -/* 07F1DC 7F04A6AC 44982000 */ mtc1 $t8, $f4 -/* 07F1E0 7F04A6B0 440D5000 */ mfc1 $t5, $f10 -/* 07F1E4 7F04A6B4 46802220 */ cvt.s.w $f8, $f4 -/* 07F1E8 7F04A6B8 448B5000 */ mtc1 $t3, $f10 -/* 07F1EC 7F04A6BC 00484821 */ addu $t1, $v0, $t0 -/* 07F1F0 7F04A6C0 006D7021 */ addu $t6, $v1, $t5 -/* 07F1F4 7F04A6C4 A2090060 */ sb $t1, 0x60($s0) -/* 07F1F8 7F04A6C8 46805120 */ cvt.s.w $f4, $f10 -/* 07F1FC 7F04A6CC 46004182 */ mul.s $f6, $f8, $f0 -/* 07F200 7F04A6D0 A20E0063 */ sb $t6, 0x63($s0) -/* 07F204 7F04A6D4 46002202 */ mul.s $f8, $f4, $f0 -/* 07F208 7F04A6D8 4600348D */ trunc.w.s $f18, $f6 -/* 07F20C 7F04A6DC 4600418D */ trunc.w.s $f6, $f8 -/* 07F210 7F04A6E0 44089000 */ mfc1 $t0, $f18 -/* 07F214 7F04A6E4 440D3000 */ mfc1 $t5, $f6 -/* 07F218 7F04A6E8 00884821 */ addu $t1, $a0, $t0 -/* 07F21C 7F04A6EC A2090066 */ sb $t1, 0x66($s0) -/* 07F220 7F04A6F0 00AD7021 */ addu $t6, $a1, $t5 -/* 07F224 7F04A6F4 1000000B */ b .L7F04A724 -/* 07F228 7F04A6F8 A20E0069 */ sb $t6, 0x69($s0) -/* 07F22C 7F04A6FC 920F0062 */ lbu $t7, 0x62($s0) -.L7F04A700: -/* 07F230 7F04A700 92180065 */ lbu $t8, 0x65($s0) -/* 07F234 7F04A704 92190068 */ lbu $t9, 0x68($s0) -/* 07F238 7F04A708 9208006B */ lbu $t0, 0x6b($s0) -/* 07F23C 7F04A70C E618006C */ swc1 $f24, 0x6c($s0) -/* 07F240 7F04A710 E6140070 */ swc1 $f20, 0x70($s0) -/* 07F244 7F04A714 A20F0060 */ sb $t7, 0x60($s0) -/* 07F248 7F04A718 A2180063 */ sb $t8, 0x63($s0) -/* 07F24C 7F04A71C A2190066 */ sb $t9, 0x66($s0) -/* 07F250 7F04A720 A2080069 */ sb $t0, 0x69($s0) -.L7F04A724: -/* 07F254 7F04A724 8FAA00A0 */ lw $t2, 0xa0($sp) -.L7F04A728: -/* 07F258 7F04A728 8FA300A4 */ lw $v1, 0xa4($sp) -/* 07F25C 7F04A72C 8FA900BC */ lw $t1, 0xbc($sp) -/* 07F260 7F04A730 AD520000 */ sw $s2, ($t2) -/* 07F264 7F04A734 3C0F8009 */ lui $t7, %hi(monitorimages) -/* 07F268 7F04A738 AD490004 */ sw $t1, 4($t2) -/* 07F26C 7F04A73C 8C6B0008 */ lw $t3, 8($v1) -/* 07F270 7F04A740 8D610000 */ lw $at, ($t3) -/* 07F274 7F04A744 AE410000 */ sw $at, ($s2) -/* 07F278 7F04A748 8D6D0004 */ lw $t5, 4($t3) -/* 07F27C 7F04A74C AE4D0004 */ sw $t5, 4($s2) -/* 07F280 7F04A750 8D610008 */ lw $at, 8($t3) -/* 07F284 7F04A754 AE410008 */ sw $at, 8($s2) -/* 07F288 7F04A758 8D6D000C */ lw $t5, 0xc($t3) -/* 07F28C 7F04A75C AE4D000C */ sw $t5, 0xc($s2) -/* 07F290 7F04A760 8C6E0008 */ lw $t6, 8($v1) -/* 07F294 7F04A764 8DC10010 */ lw $at, 0x10($t6) -/* 07F298 7F04A768 AE410010 */ sw $at, 0x10($s2) -/* 07F29C 7F04A76C 8DD80014 */ lw $t8, 0x14($t6) -/* 07F2A0 7F04A770 AE580014 */ sw $t8, 0x14($s2) -/* 07F2A4 7F04A774 8DC10018 */ lw $at, 0x18($t6) -/* 07F2A8 7F04A778 AE410018 */ sw $at, 0x18($s2) -/* 07F2AC 7F04A77C 8DD8001C */ lw $t8, 0x1c($t6) -/* 07F2B0 7F04A780 AE58001C */ sw $t8, 0x1c($s2) -/* 07F2B4 7F04A784 8C790008 */ lw $t9, 8($v1) -/* 07F2B8 7F04A788 8F210020 */ lw $at, 0x20($t9) -/* 07F2BC 7F04A78C AE410020 */ sw $at, 0x20($s2) -/* 07F2C0 7F04A790 8F290024 */ lw $t1, 0x24($t9) -/* 07F2C4 7F04A794 AE490024 */ sw $t1, 0x24($s2) -/* 07F2C8 7F04A798 8F210028 */ lw $at, 0x28($t9) -/* 07F2CC 7F04A79C AE410028 */ sw $at, 0x28($s2) -/* 07F2D0 7F04A7A0 8F29002C */ lw $t1, 0x2c($t9) -/* 07F2D4 7F04A7A4 AE49002C */ sw $t1, 0x2c($s2) -/* 07F2D8 7F04A7A8 8C6A0008 */ lw $t2, 8($v1) -/* 07F2DC 7F04A7AC 8D410030 */ lw $at, 0x30($t2) -/* 07F2E0 7F04A7B0 AE410030 */ sw $at, 0x30($s2) -/* 07F2E4 7F04A7B4 8D4B0034 */ lw $t3, 0x34($t2) -/* 07F2E8 7F04A7B8 AE4B0034 */ sw $t3, 0x34($s2) -/* 07F2EC 7F04A7BC 8D410038 */ lw $at, 0x38($t2) -/* 07F2F0 7F04A7C0 AE410038 */ sw $at, 0x38($s2) -/* 07F2F4 7F04A7C4 8D4B003C */ lw $t3, 0x3c($t2) -/* 07F2F8 7F04A7C8 AE4B003C */ sw $t3, 0x3c($s2) -/* 07F2FC 7F04A7CC 8E020008 */ lw $v0, 8($s0) -/* 07F300 7F04A7D0 2C410064 */ sltiu $at, $v0, 0x64 -/* 07F304 7F04A7D4 10200007 */ beqz $at, .L7F04A7F4 -/* 07F308 7F04A7D8 00408825 */ move $s1, $v0 -/* 07F30C 7F04A7DC 00026880 */ sll $t5, $v0, 2 -/* 07F310 7F04A7E0 8DEFD120 */ lw $t7, %lo(monitorimages)($t7) -/* 07F314 7F04A7E4 01A26823 */ subu $t5, $t5, $v0 -/* 07F318 7F04A7E8 000D6880 */ sll $t5, $t5, 2 -/* 07F31C 7F04A7EC 10000001 */ b .L7F04A7F4 -/* 07F320 7F04A7F0 01AF8821 */ addu $s1, $t5, $t7 -.L7F04A7F4: -/* 07F324 7F04A7F4 122000A9 */ beqz $s1, .L7F04AA9C -/* 07F328 7F04A7F8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07F32C 7F04A7FC 44810000 */ mtc1 $at, $f0 -/* 07F330 7F04A800 C6120010 */ lwc1 $f18, 0x10($s0) -/* 07F334 7F04A804 C60A0024 */ lwc1 $f10, 0x24($s0) -/* 07F338 7F04A808 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07F33C 7F04A80C 46009582 */ mul.s $f22, $f18, $f0 -/* 07F340 7F04A810 460CA032 */ c.eq.s $f20, $f12 -/* 07F344 7F04A814 46005602 */ mul.s $f24, $f10, $f0 -/* 07F348 7F04A818 4600B386 */ mov.s $f14, $f22 -/* 07F34C 7F04A81C 45010015 */ bc1t .L7F04A874 -/* 07F350 7F04A820 4600C406 */ mov.s $f16, $f24 -/* 07F354 7F04A824 E7AE0054 */ swc1 $f14, 0x54($sp) -/* 07F358 7F04A828 0FC15FA8 */ jal cosf -/* 07F35C 7F04A82C E7B00050 */ swc1 $f16, 0x50($sp) -/* 07F360 7F04A830 3C018005 */ lui $at, %hi(D_80052CB0) -/* 07F364 7F04A834 C43A2CB0 */ lwc1 $f26, %lo(D_80052CB0)($at) -/* 07F368 7F04A838 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07F36C 7F04A83C 461A0502 */ mul.s $f20, $f0, $f26 -/* 07F370 7F04A840 0FC15FAB */ jal sinf -/* 07F374 7F04A844 00000000 */ nop -/* 07F378 7F04A848 4614B582 */ mul.s $f22, $f22, $f20 -/* 07F37C 7F04A84C C7AE0054 */ lwc1 $f14, 0x54($sp) -/* 07F380 7F04A850 C7B00050 */ lwc1 $f16, 0x50($sp) -/* 07F384 7F04A854 461A0082 */ mul.s $f2, $f0, $f26 -/* 07F388 7F04A858 00000000 */ nop -/* 07F38C 7F04A85C 4602C602 */ mul.s $f24, $f24, $f2 -/* 07F390 7F04A860 00000000 */ nop -/* 07F394 7F04A864 46027382 */ mul.s $f14, $f14, $f2 -/* 07F398 7F04A868 00000000 */ nop -/* 07F39C 7F04A86C 46148402 */ mul.s $f16, $f16, $f20 -/* 07F3A0 7F04A870 00000000 */ nop -.L7F04A874: -/* 07F3A4 7F04A874 922E0004 */ lbu $t6, 4($s1) -/* 07F3A8 7F04A878 3C014200 */ li $at, 0x42000000 # 32.000000 -/* 07F3AC 7F04A87C 44810000 */ mtc1 $at, $f0 -/* 07F3B0 7F04A880 448E4000 */ mtc1 $t6, $f8 -/* 07F3B4 7F04A884 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F3B8 7F04A888 05C10004 */ bgez $t6, .L7F04A89C -/* 07F3BC 7F04A88C 468041A0 */ cvt.s.w $f6, $f8 -/* 07F3C0 7F04A890 44819000 */ mtc1 $at, $f18 -/* 07F3C4 7F04A894 00000000 */ nop -/* 07F3C8 7F04A898 46123180 */ add.s $f6, $f6, $f18 -.L7F04A89C: -/* 07F3CC 7F04A89C C60A0038 */ lwc1 $f10, 0x38($s0) -/* 07F3D0 7F04A8A0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F3D4 7F04A8A4 46165100 */ add.s $f4, $f10, $f22 -/* 07F3D8 7F04A8A8 46043202 */ mul.s $f8, $f6, $f4 -/* 07F3DC 7F04A8AC 00000000 */ nop -/* 07F3E0 7F04A8B0 46004482 */ mul.s $f18, $f8, $f0 -/* 07F3E4 7F04A8B4 4600928D */ trunc.w.s $f10, $f18 -/* 07F3E8 7F04A8B8 44085000 */ mfc1 $t0, $f10 -/* 07F3EC 7F04A8BC 00000000 */ nop -/* 07F3F0 7F04A8C0 A6480008 */ sh $t0, 8($s2) -/* 07F3F4 7F04A8C4 92390005 */ lbu $t9, 5($s1) -/* 07F3F8 7F04A8C8 44993000 */ mtc1 $t9, $f6 -/* 07F3FC 7F04A8CC 07210004 */ bgez $t9, .L7F04A8E0 -/* 07F400 7F04A8D0 46803120 */ cvt.s.w $f4, $f6 -/* 07F404 7F04A8D4 44814000 */ mtc1 $at, $f8 -/* 07F408 7F04A8D8 00000000 */ nop -/* 07F40C 7F04A8DC 46082100 */ add.s $f4, $f4, $f8 -.L7F04A8E0: -/* 07F410 7F04A8E0 C612004C */ lwc1 $f18, 0x4c($s0) -/* 07F414 7F04A8E4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F418 7F04A8E8 46189280 */ add.s $f10, $f18, $f24 -/* 07F41C 7F04A8EC 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F420 7F04A8F0 00000000 */ nop -/* 07F424 7F04A8F4 46003202 */ mul.s $f8, $f6, $f0 -/* 07F428 7F04A8F8 4600448D */ trunc.w.s $f18, $f8 -/* 07F42C 7F04A8FC 440C9000 */ mfc1 $t4, $f18 -/* 07F430 7F04A900 00000000 */ nop -/* 07F434 7F04A904 A64C000A */ sh $t4, 0xa($s2) -/* 07F438 7F04A908 922A0004 */ lbu $t2, 4($s1) -/* 07F43C 7F04A90C 448A2000 */ mtc1 $t2, $f4 -/* 07F440 7F04A910 05410004 */ bgez $t2, .L7F04A924 -/* 07F444 7F04A914 468022A0 */ cvt.s.w $f10, $f4 -/* 07F448 7F04A918 44813000 */ mtc1 $at, $f6 -/* 07F44C 7F04A91C 00000000 */ nop -/* 07F450 7F04A920 46065280 */ add.s $f10, $f10, $f6 -.L7F04A924: -/* 07F454 7F04A924 C6080038 */ lwc1 $f8, 0x38($s0) -/* 07F458 7F04A928 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F45C 7F04A92C 460E4481 */ sub.s $f18, $f8, $f14 -/* 07F460 7F04A930 46125102 */ mul.s $f4, $f10, $f18 -/* 07F464 7F04A934 00000000 */ nop -/* 07F468 7F04A938 46002182 */ mul.s $f6, $f4, $f0 -/* 07F46C 7F04A93C 4600320D */ trunc.w.s $f8, $f6 -/* 07F470 7F04A940 440D4000 */ mfc1 $t5, $f8 -/* 07F474 7F04A944 00000000 */ nop -/* 07F478 7F04A948 A64D0018 */ sh $t5, 0x18($s2) -/* 07F47C 7F04A94C 922F0005 */ lbu $t7, 5($s1) -/* 07F480 7F04A950 448F5000 */ mtc1 $t7, $f10 -/* 07F484 7F04A954 05E10004 */ bgez $t7, .L7F04A968 -/* 07F488 7F04A958 468054A0 */ cvt.s.w $f18, $f10 -/* 07F48C 7F04A95C 44812000 */ mtc1 $at, $f4 -/* 07F490 7F04A960 00000000 */ nop -/* 07F494 7F04A964 46049480 */ add.s $f18, $f18, $f4 -.L7F04A968: -/* 07F498 7F04A968 C606004C */ lwc1 $f6, 0x4c($s0) -/* 07F49C 7F04A96C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F4A0 7F04A970 46103200 */ add.s $f8, $f6, $f16 -/* 07F4A4 7F04A974 46089282 */ mul.s $f10, $f18, $f8 -/* 07F4A8 7F04A978 00000000 */ nop -/* 07F4AC 7F04A97C 46005102 */ mul.s $f4, $f10, $f0 -/* 07F4B0 7F04A980 4600218D */ trunc.w.s $f6, $f4 -/* 07F4B4 7F04A984 44183000 */ mfc1 $t8, $f6 -/* 07F4B8 7F04A988 00000000 */ nop -/* 07F4BC 7F04A98C A658001A */ sh $t8, 0x1a($s2) -/* 07F4C0 7F04A990 92280004 */ lbu $t0, 4($s1) -/* 07F4C4 7F04A994 44889000 */ mtc1 $t0, $f18 -/* 07F4C8 7F04A998 05010004 */ bgez $t0, .L7F04A9AC -/* 07F4CC 7F04A99C 46809220 */ cvt.s.w $f8, $f18 -/* 07F4D0 7F04A9A0 44815000 */ mtc1 $at, $f10 -/* 07F4D4 7F04A9A4 00000000 */ nop -/* 07F4D8 7F04A9A8 460A4200 */ add.s $f8, $f8, $f10 -.L7F04A9AC: -/* 07F4DC 7F04A9AC C6040038 */ lwc1 $f4, 0x38($s0) -/* 07F4E0 7F04A9B0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F4E4 7F04A9B4 46162181 */ sub.s $f6, $f4, $f22 -/* 07F4E8 7F04A9B8 46064482 */ mul.s $f18, $f8, $f6 -/* 07F4EC 7F04A9BC 00000000 */ nop -/* 07F4F0 7F04A9C0 46009282 */ mul.s $f10, $f18, $f0 -/* 07F4F4 7F04A9C4 4600510D */ trunc.w.s $f4, $f10 -/* 07F4F8 7F04A9C8 44092000 */ mfc1 $t1, $f4 -/* 07F4FC 7F04A9CC 00000000 */ nop -/* 07F500 7F04A9D0 A6490028 */ sh $t1, 0x28($s2) -/* 07F504 7F04A9D4 922C0005 */ lbu $t4, 5($s1) -/* 07F508 7F04A9D8 448C4000 */ mtc1 $t4, $f8 -/* 07F50C 7F04A9DC 05810004 */ bgez $t4, .L7F04A9F0 -/* 07F510 7F04A9E0 468041A0 */ cvt.s.w $f6, $f8 -/* 07F514 7F04A9E4 44819000 */ mtc1 $at, $f18 -/* 07F518 7F04A9E8 00000000 */ nop -/* 07F51C 7F04A9EC 46123180 */ add.s $f6, $f6, $f18 -.L7F04A9F0: -/* 07F520 7F04A9F0 C60A004C */ lwc1 $f10, 0x4c($s0) -/* 07F524 7F04A9F4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F528 7F04A9F8 46185101 */ sub.s $f4, $f10, $f24 -/* 07F52C 7F04A9FC 46043202 */ mul.s $f8, $f6, $f4 -/* 07F530 7F04AA00 00000000 */ nop -/* 07F534 7F04AA04 46004482 */ mul.s $f18, $f8, $f0 -/* 07F538 7F04AA08 4600928D */ trunc.w.s $f10, $f18 -/* 07F53C 7F04AA0C 440B5000 */ mfc1 $t3, $f10 -/* 07F540 7F04AA10 00000000 */ nop -/* 07F544 7F04AA14 A64B002A */ sh $t3, 0x2a($s2) -/* 07F548 7F04AA18 922D0004 */ lbu $t5, 4($s1) -/* 07F54C 7F04AA1C 448D3000 */ mtc1 $t5, $f6 -/* 07F550 7F04AA20 05A10004 */ bgez $t5, .L7F04AA34 -/* 07F554 7F04AA24 46803120 */ cvt.s.w $f4, $f6 -/* 07F558 7F04AA28 44814000 */ mtc1 $at, $f8 -/* 07F55C 7F04AA2C 00000000 */ nop -/* 07F560 7F04AA30 46082100 */ add.s $f4, $f4, $f8 -.L7F04AA34: -/* 07F564 7F04AA34 C6120038 */ lwc1 $f18, 0x38($s0) -/* 07F568 7F04AA38 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F56C 7F04AA3C 460E9280 */ add.s $f10, $f18, $f14 -/* 07F570 7F04AA40 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F574 7F04AA44 00000000 */ nop -/* 07F578 7F04AA48 46003202 */ mul.s $f8, $f6, $f0 -/* 07F57C 7F04AA4C 4600448D */ trunc.w.s $f18, $f8 -/* 07F580 7F04AA50 440E9000 */ mfc1 $t6, $f18 -/* 07F584 7F04AA54 00000000 */ nop -/* 07F588 7F04AA58 A64E0038 */ sh $t6, 0x38($s2) -/* 07F58C 7F04AA5C 92380005 */ lbu $t8, 5($s1) -/* 07F590 7F04AA60 44982000 */ mtc1 $t8, $f4 -/* 07F594 7F04AA64 07010004 */ bgez $t8, .L7F04AA78 -/* 07F598 7F04AA68 468022A0 */ cvt.s.w $f10, $f4 -/* 07F59C 7F04AA6C 44813000 */ mtc1 $at, $f6 -/* 07F5A0 7F04AA70 00000000 */ nop -/* 07F5A4 7F04AA74 46065280 */ add.s $f10, $f10, $f6 -.L7F04AA78: -/* 07F5A8 7F04AA78 C608004C */ lwc1 $f8, 0x4c($s0) -/* 07F5AC 7F04AA7C 46104481 */ sub.s $f18, $f8, $f16 -/* 07F5B0 7F04AA80 46125102 */ mul.s $f4, $f10, $f18 -/* 07F5B4 7F04AA84 00000000 */ nop -/* 07F5B8 7F04AA88 46002182 */ mul.s $f6, $f4, $f0 -/* 07F5BC 7F04AA8C 4600320D */ trunc.w.s $f8, $f6 -/* 07F5C0 7F04AA90 44194000 */ mfc1 $t9, $f8 -/* 07F5C4 7F04AA94 00000000 */ nop -/* 07F5C8 7F04AA98 A659003A */ sh $t9, 0x3a($s2) -.L7F04AA9C: -/* 07F5CC 7F04AA9C 92020060 */ lbu $v0, 0x60($s0) -/* 07F5D0 7F04AAA0 240C0002 */ li $t4, 2 -/* 07F5D4 7F04AAA4 3C0DB700 */ lui $t5, 0xb700 -/* 07F5D8 7F04AAA8 A242003C */ sb $v0, 0x3c($s2) -/* 07F5DC 7F04AAAC A242002C */ sb $v0, 0x2c($s2) -/* 07F5E0 7F04AAB0 A242001C */ sb $v0, 0x1c($s2) -/* 07F5E4 7F04AAB4 A242000C */ sb $v0, 0xc($s2) -/* 07F5E8 7F04AAB8 92020063 */ lbu $v0, 0x63($s0) -/* 07F5EC 7F04AABC 240F2000 */ li $t7, 8192 -/* 07F5F0 7F04AAC0 27A400BC */ addiu $a0, $sp, 0xbc -/* 07F5F4 7F04AAC4 A242003D */ sb $v0, 0x3d($s2) -/* 07F5F8 7F04AAC8 A242002D */ sb $v0, 0x2d($s2) -/* 07F5FC 7F04AACC A242001D */ sb $v0, 0x1d($s2) -/* 07F600 7F04AAD0 A242000D */ sb $v0, 0xd($s2) -/* 07F604 7F04AAD4 92030066 */ lbu $v1, 0x66($s0) -/* 07F608 7F04AAD8 A243003E */ sb $v1, 0x3e($s2) -/* 07F60C 7F04AADC A243002E */ sb $v1, 0x2e($s2) -/* 07F610 7F04AAE0 A243001E */ sb $v1, 0x1e($s2) -/* 07F614 7F04AAE4 A243000E */ sb $v1, 0xe($s2) -/* 07F618 7F04AAE8 92020069 */ lbu $v0, 0x69($s0) -/* 07F61C 7F04AAEC A242003F */ sb $v0, 0x3f($s2) -/* 07F620 7F04AAF0 A242002F */ sb $v0, 0x2f($s2) -/* 07F624 7F04AAF4 A242001F */ sb $v0, 0x1f($s2) -/* 07F628 7F04AAF8 A242000F */ sb $v0, 0xf($s2) -/* 07F62C 7F04AAFC 92090069 */ lbu $t1, 0x69($s0) -/* 07F630 7F04AB00 292100FF */ slti $at, $t1, 0xff -/* 07F634 7F04AB04 50200003 */ beql $at, $zero, .L7F04AB14 -/* 07F638 7F04AB08 8FAA00BC */ lw $t2, 0xbc($sp) -/* 07F63C 7F04AB0C AFAC00C4 */ sw $t4, 0xc4($sp) -/* 07F640 7F04AB10 8FAA00BC */ lw $t2, 0xbc($sp) -.L7F04AB14: -/* 07F644 7F04AB14 240E0002 */ li $t6, 2 -/* 07F648 7F04AB18 02202825 */ move $a1, $s1 -/* 07F64C 7F04AB1C 254B0008 */ addiu $t3, $t2, 8 -/* 07F650 7F04AB20 AFAB00BC */ sw $t3, 0xbc($sp) -/* 07F654 7F04AB24 AD4F0004 */ sw $t7, 4($t2) -/* 07F658 7F04AB28 AD4D0000 */ sw $t5, ($t2) -/* 07F65C 7F04AB2C AFAE0010 */ sw $t6, 0x10($sp) -/* 07F660 7F04AB30 8FA700C0 */ lw $a3, 0xc0($sp) -/* 07F664 7F04AB34 0FC1DB5A */ jal texSelect -/* 07F668 7F04AB38 8FA600C4 */ lw $a2, 0xc4($sp) -/* 07F66C 7F04AB3C 8FB000BC */ lw $s0, 0xbc($sp) -/* 07F670 7F04AB40 3C190102 */ lui $t9, (0x01020040 >> 16) # lui $t9, 0x102 -/* 07F674 7F04AB44 37390040 */ ori $t9, (0x01020040 & 0xFFFF) # ori $t9, $t9, 0x40 -/* 07F678 7F04AB48 26080008 */ addiu $t0, $s0, 8 -/* 07F67C 7F04AB4C AFA800BC */ sw $t0, 0xbc($sp) -/* 07F680 7F04AB50 AE190000 */ sw $t9, ($s0) -/* 07F684 7F04AB54 8FA900B0 */ lw $t1, 0xb0($sp) -/* 07F688 7F04AB58 0C003A2C */ jal osVirtualToPhysical -/* 07F68C 7F04AB5C 8D24000C */ lw $a0, 0xc($t1) -/* 07F690 7F04AB60 AE020004 */ sw $v0, 4($s0) -/* 07F694 7F04AB64 8FB100BC */ lw $s1, 0xbc($sp) -/* 07F698 7F04AB68 3C0BBC00 */ lui $t3, (0xBC001006 >> 16) # lui $t3, 0xbc00 -/* 07F69C 7F04AB6C 356B1006 */ ori $t3, (0xBC001006 & 0xFFFF) # ori $t3, $t3, 0x1006 -/* 07F6A0 7F04AB70 262A0008 */ addiu $t2, $s1, 8 -/* 07F6A4 7F04AB74 AFAA00BC */ sw $t2, 0xbc($sp) -/* 07F6A8 7F04AB78 02402025 */ move $a0, $s2 -/* 07F6AC 7F04AB7C 0C003A2C */ jal osVirtualToPhysical -/* 07F6B0 7F04AB80 AE2B0000 */ sw $t3, ($s1) -/* 07F6B4 7F04AB84 AE220004 */ sw $v0, 4($s1) -/* 07F6B8 7F04AB88 8FAD00BC */ lw $t5, 0xbc($sp) -/* 07F6BC 7F04AB8C 3C0E0430 */ lui $t6, (0x04300040 >> 16) # lui $t6, 0x430 -/* 07F6C0 7F04AB90 35CE0040 */ ori $t6, (0x04300040 & 0xFFFF) # ori $t6, $t6, 0x40 -/* 07F6C4 7F04AB94 25AF0008 */ addiu $t7, $t5, 8 -/* 07F6C8 7F04AB98 AFAF00BC */ sw $t7, 0xbc($sp) -/* 07F6CC 7F04AB9C 3C180400 */ lui $t8, 0x400 -/* 07F6D0 7F04ABA0 ADB80004 */ sw $t8, 4($t5) -/* 07F6D4 7F04ABA4 ADAE0000 */ sw $t6, ($t5) -/* 07F6D8 7F04ABA8 8FA800BC */ lw $t0, 0xbc($sp) -/* 07F6DC 7F04ABAC 3C09B100 */ lui $t1, (0xB1000032 >> 16) # lui $t1, 0xb100 -/* 07F6E0 7F04ABB0 35290032 */ ori $t1, (0xB1000032 & 0xFFFF) # ori $t1, $t1, 0x32 -/* 07F6E4 7F04ABB4 25190008 */ addiu $t9, $t0, 8 -/* 07F6E8 7F04ABB8 AFB900BC */ sw $t9, 0xbc($sp) -/* 07F6EC 7F04ABBC 240C2010 */ li $t4, 8208 -/* 07F6F0 7F04ABC0 AD0C0004 */ sw $t4, 4($t0) -/* 07F6F4 7F04ABC4 AD090000 */ sw $t1, ($t0) -/* 07F6F8 7F04ABC8 8FAA00BC */ lw $t2, 0xbc($sp) -/* 07F6FC 7F04ABCC 3C0DB800 */ lui $t5, 0xb800 -/* 07F700 7F04ABD0 3C0F0601 */ lui $t7, 0x601 -/* 07F704 7F04ABD4 254B0008 */ addiu $t3, $t2, 8 -/* 07F708 7F04ABD8 AFAB00BC */ sw $t3, 0xbc($sp) -/* 07F70C 7F04ABDC AD400004 */ sw $zero, 4($t2) -/* 07F710 7F04ABE0 AD4D0000 */ sw $t5, ($t2) -/* 07F714 7F04ABE4 8FA600A8 */ lw $a2, 0xa8($sp) -/* 07F718 7F04ABE8 ACCF0000 */ sw $t7, ($a2) -/* 07F71C 7F04ABEC 8FAE00BC */ lw $t6, 0xbc($sp) -/* 07F720 7F04ABF0 ACCE0004 */ sw $t6, 4($a2) -.L7F04ABF4: -/* 07F724 7F04ABF4 8FBF004C */ lw $ra, 0x4c($sp) -.L7F04ABF8: -/* 07F728 7F04ABF8 8FA200BC */ lw $v0, 0xbc($sp) -/* 07F72C 7F04ABFC D7B40020 */ ldc1 $f20, 0x20($sp) -/* 07F730 7F04AC00 D7B60028 */ ldc1 $f22, 0x28($sp) -/* 07F734 7F04AC04 D7B80030 */ ldc1 $f24, 0x30($sp) -/* 07F738 7F04AC08 D7BA0038 */ ldc1 $f26, 0x38($sp) -/* 07F73C 7F04AC0C 8FB00040 */ lw $s0, 0x40($sp) -/* 07F740 7F04AC10 8FB10044 */ lw $s1, 0x44($sp) -/* 07F744 7F04AC14 8FB20048 */ lw $s2, 0x48($sp) -/* 07F748 7F04AC18 03E00008 */ jr $ra -/* 07F74C 7F04AC1C 27BD00B0 */ addiu $sp, $sp, 0xb0 -) -#endif -#ifdef VERSION_JP -GLOBAL_ASM( -.late_rodata -glabel D_80052C68 -.word 0x40c90fdb /*6.2831855*/ -/*D:80052C6C*/ -glabel jpt_80052C6C -.word command00_reset_scroll_shift -.word command01_horizontal_scroll -.word command02_vertical_scroll -.word command03_horizontal_pos -.word command04_vertical_pos -.word command05_zoomx -.word command06_zoomy -.word command07_use_image_from_global_monitor_table -.word command08_halt_processing_for_time -.word command09_jump -.word command0A_jump_conditional -.word command0B_restart -.word command0C_break -.word command0D_colour_transition -.word command0E_set_rotation -.word command0F_rotate - -glabel D_80052CAC -.word 0x3fc90fdb /*1.5707964*/ -glabel D_80052CB0 -.word 0x3fb50481 /*1.4141999*/ -glabel D_80052CB4 -.word 0x3f59999a /*0.85000002*/ -glabel D_80052CB8 -.word 0x3e19999a /*0.15000001*/ -glabel D_80052CBC -.word 0x3e19999a /*0.15000001*/ -glabel D_80052CC0 -.word 0x3f666666 /*0.89999998*/ -.text -glabel process_monitor_animation_microcode -/* 07EA78 7F049F48 27BDFF50 */ addiu $sp, $sp, -0xb0 -/* 07EA7C 7F049F4C AFB10044 */ sw $s1, 0x44($sp) -/* 07EA80 7F049F50 AFB00040 */ sw $s0, 0x40($sp) -/* 07EA84 7F049F54 00C08025 */ move $s0, $a2 -/* 07EA88 7F049F58 00A08825 */ move $s1, $a1 -/* 07EA8C 7F049F5C AFBF004C */ sw $ra, 0x4c($sp) -/* 07EA90 7F049F60 AFB20048 */ sw $s2, 0x48($sp) -/* 07EA94 7F049F64 F7BA0038 */ sdc1 $f26, 0x38($sp) -/* 07EA98 7F049F68 F7B80030 */ sdc1 $f24, 0x30($sp) -/* 07EA9C 7F049F6C F7B60028 */ sdc1 $f22, 0x28($sp) -/* 07EAA0 7F049F70 F7B40020 */ sdc1 $f20, 0x20($sp) -/* 07EAA4 7F049F74 AFA400B0 */ sw $a0, 0xb0($sp) -/* 07EAA8 7F049F78 10A0031E */ beqz $a1, .L7F04ABF4 -/* 07EAAC 7F049F7C AFA700BC */ sw $a3, 0xbc($sp) -/* 07EAB0 7F049F80 94AE0000 */ lhu $t6, ($a1) -/* 07EAB4 7F049F84 24010018 */ li $at, 24 -/* 07EAB8 7F049F88 31CF00FF */ andi $t7, $t6, 0xff -/* 07EABC 7F049F8C 55E1031A */ bnel $t7, $at, .L7F04ABF8 -/* 07EAC0 7F049F90 8FBF004C */ lw $ra, 0x4c($sp) -/* 07EAC4 7F049F94 0FC2F5B1 */ jal dynAllocate7F0BD6C4 -/* 07EAC8 7F049F98 24040004 */ li $a0, 4 -/* 07EACC 7F049F9C 8FB800BC */ lw $t8, 0xbc($sp) -/* 07EAD0 7F049FA0 00409025 */ move $s2, $v0 -/* 07EAD4 7F049FA4 8FA400B0 */ lw $a0, 0xb0($sp) -/* 07EAD8 7F049FA8 27190008 */ addiu $t9, $t8, 8 -/* 07EADC 7F049FAC AFB900BC */ sw $t9, 0xbc($sp) -/* 07EAE0 7F049FB0 AFB800A8 */ sw $t8, 0xa8($sp) -/* 07EAE4 7F049FB4 8E280004 */ lw $t0, 4($s1) -/* 07EAE8 7F049FB8 02202825 */ move $a1, $s1 -/* 07EAEC 7F049FBC 0FC1B1E7 */ jal modelGetNodeRwData -/* 07EAF0 7F049FC0 AFA800A4 */ sw $t0, 0xa4($sp) -/* 07EAF4 7F049FC4 3C018005 */ lui $at, %hi(D_80052C68) -/* 07EAF8 7F049FC8 C43A2C68 */ lwc1 $f26, %lo(D_80052C68)($at) -/* 07EAFC 7F049FCC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07EB00 7F049FD0 4481C000 */ mtc1 $at, $f24 -/* 07EB04 7F049FD4 3C013A80 */ li $at, 0x3A800000 # 0.000977 -/* 07EB08 7F049FD8 4481B000 */ mtc1 $at, $f22 -/* 07EB0C 7F049FDC 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EB10 7F049FE0 44811000 */ mtc1 $at, $f2 -/* 07EB14 7F049FE4 4480A000 */ mtc1 $zero, $f20 -/* 07EB18 7F049FE8 AFA200A0 */ sw $v0, 0xa0($sp) -/* 07EB1C 7F049FEC 00008825 */ move $s1, $zero -/* 07EB20 7F049FF0 96020004 */ lhu $v0, 4($s0) -.L7F049FF4: -/* 07EB24 7F049FF4 8E090000 */ lw $t1, ($s0) -/* 07EB28 7F049FF8 00025080 */ sll $t2, $v0, 2 -/* 07EB2C 7F049FFC 012A1821 */ addu $v1, $t1, $t2 -/* 07EB30 7F04A000 8C6B0000 */ lw $t3, ($v1) -/* 07EB34 7F04A004 2D610010 */ sltiu $at, $t3, 0x10 -/* 07EB38 7F04A008 10200117 */ beqz $at, .L7F04A468 -/* 07EB3C 7F04A00C 000B5880 */ sll $t3, $t3, 2 -/* 07EB40 7F04A010 3C018005 */ lui $at, %hi(jpt_80052C6C) -/* 07EB44 7F04A014 002B0821 */ addu $at, $at, $t3 -/* 07EB48 7F04A018 8C2B2C6C */ lw $t3, %lo(jpt_80052C6C)($at) -/* 07EB4C 7F04A01C 01600008 */ jr $t3 -/* 07EB50 7F04A020 00000000 */ nop -command00_reset_scroll_shift: -/* 07EB54 7F04A024 244C0001 */ addiu $t4, $v0, 1 -/* 07EB58 7F04A028 E6140040 */ swc1 $f20, 0x40($s0) -/* 07EB5C 7F04A02C E6140054 */ swc1 $f20, 0x54($s0) -/* 07EB60 7F04A030 1000010D */ b .L7F04A468 -/* 07EB64 7F04A034 A60C0004 */ sh $t4, 4($s0) -command01_horizontal_scroll: -/* 07EB68 7F04A038 E614003C */ swc1 $f20, 0x3c($s0) -/* 07EB6C 7F04A03C 8C6D0008 */ lw $t5, 8($v1) -/* 07EB70 7F04A040 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EB74 7F04A044 448D2000 */ mtc1 $t5, $f4 -/* 07EB78 7F04A048 05A10004 */ bgez $t5, .L7F04A05C -/* 07EB7C 7F04A04C 468021A0 */ cvt.s.w $f6, $f4 -/* 07EB80 7F04A050 44814000 */ mtc1 $at, $f8 -/* 07EB84 7F04A054 00000000 */ nop -/* 07EB88 7F04A058 46083180 */ add.s $f6, $f6, $f8 -.L7F04A05C: -/* 07EB8C 7F04A05C 4606C283 */ div.s $f10, $f24, $f6 -/* 07EB90 7F04A060 C6000038 */ lwc1 $f0, 0x38($s0) -/* 07EB94 7F04A064 244F0003 */ addiu $t7, $v0, 3 -/* 07EB98 7F04A068 E6000044 */ swc1 $f0, 0x44($s0) -/* 07EB9C 7F04A06C E60A0040 */ swc1 $f10, 0x40($s0) -/* 07EBA0 7F04A070 8C6E0004 */ lw $t6, 4($v1) -/* 07EBA4 7F04A074 A60F0004 */ sh $t7, 4($s0) -/* 07EBA8 7F04A078 448E9000 */ mtc1 $t6, $f18 -/* 07EBAC 7F04A07C 00000000 */ nop -/* 07EBB0 7F04A080 46809120 */ cvt.s.w $f4, $f18 -/* 07EBB4 7F04A084 46162202 */ mul.s $f8, $f4, $f22 -/* 07EBB8 7F04A088 46080180 */ add.s $f6, $f0, $f8 -/* 07EBBC 7F04A08C 100000F6 */ b .L7F04A468 -/* 07EBC0 7F04A090 E6060048 */ swc1 $f6, 0x48($s0) -command02_vertical_scroll: -/* 07EBC4 7F04A094 E6140050 */ swc1 $f20, 0x50($s0) -/* 07EBC8 7F04A098 8C780008 */ lw $t8, 8($v1) -/* 07EBCC 7F04A09C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EBD0 7F04A0A0 44985000 */ mtc1 $t8, $f10 -/* 07EBD4 7F04A0A4 07010004 */ bgez $t8, .L7F04A0B8 -/* 07EBD8 7F04A0A8 468054A0 */ cvt.s.w $f18, $f10 -/* 07EBDC 7F04A0AC 44812000 */ mtc1 $at, $f4 -/* 07EBE0 7F04A0B0 00000000 */ nop -/* 07EBE4 7F04A0B4 46049480 */ add.s $f18, $f18, $f4 -.L7F04A0B8: -/* 07EBE8 7F04A0B8 4612C203 */ div.s $f8, $f24, $f18 -/* 07EBEC 7F04A0BC C600004C */ lwc1 $f0, 0x4c($s0) -/* 07EBF0 7F04A0C0 24480003 */ addiu $t0, $v0, 3 -/* 07EBF4 7F04A0C4 E6000058 */ swc1 $f0, 0x58($s0) -/* 07EBF8 7F04A0C8 E6080054 */ swc1 $f8, 0x54($s0) -/* 07EBFC 7F04A0CC 8C790004 */ lw $t9, 4($v1) -/* 07EC00 7F04A0D0 A6080004 */ sh $t0, 4($s0) -/* 07EC04 7F04A0D4 44993000 */ mtc1 $t9, $f6 -/* 07EC08 7F04A0D8 00000000 */ nop -/* 07EC0C 7F04A0DC 468032A0 */ cvt.s.w $f10, $f6 -/* 07EC10 7F04A0E0 46165102 */ mul.s $f4, $f10, $f22 -/* 07EC14 7F04A0E4 46040480 */ add.s $f18, $f0, $f4 -/* 07EC18 7F04A0E8 100000DF */ b .L7F04A468 -/* 07EC1C 7F04A0EC E612005C */ swc1 $f18, 0x5c($s0) -command03_horizontal_pos: -/* 07EC20 7F04A0F0 E614003C */ swc1 $f20, 0x3c($s0) -/* 07EC24 7F04A0F4 8C690008 */ lw $t1, 8($v1) -/* 07EC28 7F04A0F8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EC2C 7F04A0FC 44894000 */ mtc1 $t1, $f8 -/* 07EC30 7F04A100 05210004 */ bgez $t1, .L7F04A114 -/* 07EC34 7F04A104 468041A0 */ cvt.s.w $f6, $f8 -/* 07EC38 7F04A108 44815000 */ mtc1 $at, $f10 -/* 07EC3C 7F04A10C 00000000 */ nop -/* 07EC40 7F04A110 460A3180 */ add.s $f6, $f6, $f10 -.L7F04A114: -/* 07EC44 7F04A114 4606C103 */ div.s $f4, $f24, $f6 -/* 07EC48 7F04A118 C6120038 */ lwc1 $f18, 0x38($s0) -/* 07EC4C 7F04A11C 244B0003 */ addiu $t3, $v0, 3 -/* 07EC50 7F04A120 E6120044 */ swc1 $f18, 0x44($s0) -/* 07EC54 7F04A124 E6040040 */ swc1 $f4, 0x40($s0) -/* 07EC58 7F04A128 8C6A0004 */ lw $t2, 4($v1) -/* 07EC5C 7F04A12C A60B0004 */ sh $t3, 4($s0) -/* 07EC60 7F04A130 448A4000 */ mtc1 $t2, $f8 -/* 07EC64 7F04A134 00000000 */ nop -/* 07EC68 7F04A138 468042A0 */ cvt.s.w $f10, $f8 -/* 07EC6C 7F04A13C 46165182 */ mul.s $f6, $f10, $f22 -/* 07EC70 7F04A140 100000C9 */ b .L7F04A468 -/* 07EC74 7F04A144 E6060048 */ swc1 $f6, 0x48($s0) -command04_vertical_pos: -/* 07EC78 7F04A148 E6140050 */ swc1 $f20, 0x50($s0) -/* 07EC7C 7F04A14C 8C6C0008 */ lw $t4, 8($v1) -/* 07EC80 7F04A150 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EC84 7F04A154 448C2000 */ mtc1 $t4, $f4 -/* 07EC88 7F04A158 05810004 */ bgez $t4, .L7F04A16C -/* 07EC8C 7F04A15C 468024A0 */ cvt.s.w $f18, $f4 -/* 07EC90 7F04A160 44814000 */ mtc1 $at, $f8 -/* 07EC94 7F04A164 00000000 */ nop -/* 07EC98 7F04A168 46089480 */ add.s $f18, $f18, $f8 -.L7F04A16C: -/* 07EC9C 7F04A16C 4612C283 */ div.s $f10, $f24, $f18 -/* 07ECA0 7F04A170 C606004C */ lwc1 $f6, 0x4c($s0) -/* 07ECA4 7F04A174 244E0003 */ addiu $t6, $v0, 3 -/* 07ECA8 7F04A178 E6060058 */ swc1 $f6, 0x58($s0) -/* 07ECAC 7F04A17C E60A0054 */ swc1 $f10, 0x54($s0) -/* 07ECB0 7F04A180 8C6D0004 */ lw $t5, 4($v1) -/* 07ECB4 7F04A184 A60E0004 */ sh $t6, 4($s0) -/* 07ECB8 7F04A188 448D2000 */ mtc1 $t5, $f4 -/* 07ECBC 7F04A18C 00000000 */ nop -/* 07ECC0 7F04A190 46802220 */ cvt.s.w $f8, $f4 -/* 07ECC4 7F04A194 46164482 */ mul.s $f18, $f8, $f22 -/* 07ECC8 7F04A198 100000B3 */ b .L7F04A468 -/* 07ECCC 7F04A19C E612005C */ swc1 $f18, 0x5c($s0) -command05_zoomx: -/* 07ECD0 7F04A1A0 E6140014 */ swc1 $f20, 0x14($s0) -/* 07ECD4 7F04A1A4 8C6F0008 */ lw $t7, 8($v1) -/* 07ECD8 7F04A1A8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07ECDC 7F04A1AC 448F5000 */ mtc1 $t7, $f10 -/* 07ECE0 7F04A1B0 05E10004 */ bgez $t7, .L7F04A1C4 -/* 07ECE4 7F04A1B4 468051A0 */ cvt.s.w $f6, $f10 -/* 07ECE8 7F04A1B8 44812000 */ mtc1 $at, $f4 -/* 07ECEC 7F04A1BC 00000000 */ nop -/* 07ECF0 7F04A1C0 46043180 */ add.s $f6, $f6, $f4 -.L7F04A1C4: -/* 07ECF4 7F04A1C4 4606C203 */ div.s $f8, $f24, $f6 -/* 07ECF8 7F04A1C8 C6120010 */ lwc1 $f18, 0x10($s0) -/* 07ECFC 7F04A1CC 24590003 */ addiu $t9, $v0, 3 -/* 07ED00 7F04A1D0 E612001C */ swc1 $f18, 0x1c($s0) -/* 07ED04 7F04A1D4 E6080018 */ swc1 $f8, 0x18($s0) -/* 07ED08 7F04A1D8 8C780004 */ lw $t8, 4($v1) -/* 07ED0C 7F04A1DC A6190004 */ sh $t9, 4($s0) -/* 07ED10 7F04A1E0 44985000 */ mtc1 $t8, $f10 -/* 07ED14 7F04A1E4 00000000 */ nop -/* 07ED18 7F04A1E8 46805120 */ cvt.s.w $f4, $f10 -/* 07ED1C 7F04A1EC 46162182 */ mul.s $f6, $f4, $f22 -/* 07ED20 7F04A1F0 1000009D */ b .L7F04A468 -/* 07ED24 7F04A1F4 E6060020 */ swc1 $f6, 0x20($s0) -command06_zoomy: -/* 07ED28 7F04A1F8 E6140028 */ swc1 $f20, 0x28($s0) -/* 07ED2C 7F04A1FC 8C680008 */ lw $t0, 8($v1) -/* 07ED30 7F04A200 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07ED34 7F04A204 44884000 */ mtc1 $t0, $f8 -/* 07ED38 7F04A208 05010004 */ bgez $t0, .L7F04A21C -/* 07ED3C 7F04A20C 468044A0 */ cvt.s.w $f18, $f8 -/* 07ED40 7F04A210 44815000 */ mtc1 $at, $f10 -/* 07ED44 7F04A214 00000000 */ nop -/* 07ED48 7F04A218 460A9480 */ add.s $f18, $f18, $f10 -.L7F04A21C: -/* 07ED4C 7F04A21C 4612C103 */ div.s $f4, $f24, $f18 -/* 07ED50 7F04A220 C6060024 */ lwc1 $f6, 0x24($s0) -/* 07ED54 7F04A224 244A0003 */ addiu $t2, $v0, 3 -/* 07ED58 7F04A228 E6060030 */ swc1 $f6, 0x30($s0) -/* 07ED5C 7F04A22C E604002C */ swc1 $f4, 0x2c($s0) -/* 07ED60 7F04A230 8C690004 */ lw $t1, 4($v1) -/* 07ED64 7F04A234 A60A0004 */ sh $t2, 4($s0) -/* 07ED68 7F04A238 44894000 */ mtc1 $t1, $f8 -/* 07ED6C 7F04A23C 00000000 */ nop -/* 07ED70 7F04A240 468042A0 */ cvt.s.w $f10, $f8 -/* 07ED74 7F04A244 46165482 */ mul.s $f18, $f10, $f22 -/* 07ED78 7F04A248 10000087 */ b .L7F04A468 -/* 07ED7C 7F04A24C E6120034 */ swc1 $f18, 0x34($s0) -command07_use_image_from_global_monitor_table: -/* 07ED80 7F04A250 02002025 */ move $a0, $s0 -/* 07ED84 7F04A254 0FC127D0 */ jal save_img_index_to_obj_ani_slot -/* 07ED88 7F04A258 8C650004 */ lw $a1, 4($v1) -/* 07ED8C 7F04A25C 960B0004 */ lhu $t3, 4($s0) -/* 07ED90 7F04A260 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07ED94 7F04A264 44811000 */ mtc1 $at, $f2 -/* 07ED98 7F04A268 256C0002 */ addiu $t4, $t3, 2 -/* 07ED9C 7F04A26C 1000007E */ b .L7F04A468 -/* 07EDA0 7F04A270 A60C0004 */ sh $t4, 4($s0) -command08_halt_processing_for_time: -/* 07EDA4 7F04A274 86020006 */ lh $v0, 6($s0) -/* 07EDA8 7F04A278 3C0D8005 */ lui $t5, %hi(g_ClockTimer) -/* 07EDAC 7F04A27C 0442000E */ bltzl $v0, .L7F04A2B8 -/* 07EDB0 7F04A280 8C680004 */ lw $t0, 4($v1) -/* 07EDB4 7F04A284 8DAD8374 */ lw $t5, %lo(g_ClockTimer)($t5) -/* 07EDB8 7F04A288 004D7023 */ subu $t6, $v0, $t5 -/* 07EDBC 7F04A28C A60E0006 */ sh $t6, 6($s0) -/* 07EDC0 7F04A290 860F0006 */ lh $t7, 6($s0) -/* 07EDC4 7F04A294 05E20004 */ bltzl $t7, .L7F04A2A8 -/* 07EDC8 7F04A298 96180004 */ lhu $t8, 4($s0) -/* 07EDCC 7F04A29C 10000072 */ b .L7F04A468 -/* 07EDD0 7F04A2A0 24110001 */ li $s1, 1 -/* 07EDD4 7F04A2A4 96180004 */ lhu $t8, 4($s0) -.L7F04A2A8: -/* 07EDD8 7F04A2A8 27190002 */ addiu $t9, $t8, 2 -/* 07EDDC 7F04A2AC 1000006E */ b .L7F04A468 -/* 07EDE0 7F04A2B0 A6190004 */ sh $t9, 4($s0) -/* 07EDE4 7F04A2B4 8C680004 */ lw $t0, 4($v1) -.L7F04A2B8: -/* 07EDE8 7F04A2B8 24110001 */ li $s1, 1 -/* 07EDEC 7F04A2BC 1000006A */ b .L7F04A468 -/* 07EDF0 7F04A2C0 A6080006 */ sh $t0, 6($s0) -command09_jump: -/* 07EDF4 7F04A2C4 02002025 */ move $a0, $s0 -/* 07EDF8 7F04A2C8 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot -/* 07EDFC 7F04A2CC 8C650004 */ lw $a1, 4($v1) -/* 07EE00 7F04A2D0 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EE04 7F04A2D4 44811000 */ mtc1 $at, $f2 -/* 07EE08 7F04A2D8 10000063 */ b .L7F04A468 -/* 07EE0C 7F04A2DC 00000000 */ nop -command0A_jump_conditional: -/* 07EE10 7F04A2E0 0C002914 */ jal randomGetNext -/* 07EE14 7F04A2E4 AFA30094 */ sw $v1, 0x94($sp) -/* 07EE18 7F04A2E8 8FA30094 */ lw $v1, 0x94($sp) -/* 07EE1C 7F04A2EC 00024C02 */ srl $t1, $v0, 0x10 -/* 07EE20 7F04A2F0 02002025 */ move $a0, $s0 -/* 07EE24 7F04A2F4 8C6A0008 */ lw $t2, 8($v1) -/* 07EE28 7F04A2F8 012A082B */ sltu $at, $t1, $t2 -/* 07EE2C 7F04A2FC 50200008 */ beql $at, $zero, .L7F04A320 -/* 07EE30 7F04A300 960B0004 */ lhu $t3, 4($s0) -/* 07EE34 7F04A304 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot -/* 07EE38 7F04A308 8C650004 */ lw $a1, 4($v1) -/* 07EE3C 7F04A30C 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EE40 7F04A310 44811000 */ mtc1 $at, $f2 -/* 07EE44 7F04A314 10000054 */ b .L7F04A468 -/* 07EE48 7F04A318 00000000 */ nop -/* 07EE4C 7F04A31C 960B0004 */ lhu $t3, 4($s0) -.L7F04A320: -/* 07EE50 7F04A320 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EE54 7F04A324 44811000 */ mtc1 $at, $f2 -/* 07EE58 7F04A328 256C0003 */ addiu $t4, $t3, 3 -/* 07EE5C 7F04A32C A60C0004 */ sh $t4, 4($s0) -/* 07EE60 7F04A330 1000004D */ b .L7F04A468 -/* 07EE64 7F04A334 00000000 */ nop -command0B_restart: -/* 07EE68 7F04A338 1000004B */ b .L7F04A468 -/* 07EE6C 7F04A33C A6000004 */ sh $zero, 4($s0) -command0C_break: -/* 07EE70 7F04A340 10000049 */ b .L7F04A468 -/* 07EE74 7F04A344 24110001 */ li $s1, 1 -command0D_colour_transition: -/* 07EE78 7F04A348 E614006C */ swc1 $f20, 0x6c($s0) -/* 07EE7C 7F04A34C 8C6D0008 */ lw $t5, 8($v1) -/* 07EE80 7F04A350 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EE84 7F04A354 448D2000 */ mtc1 $t5, $f4 -/* 07EE88 7F04A358 05A10004 */ bgez $t5, .L7F04A36C -/* 07EE8C 7F04A35C 468021A0 */ cvt.s.w $f6, $f4 -/* 07EE90 7F04A360 44814000 */ mtc1 $at, $f8 -/* 07EE94 7F04A364 00000000 */ nop -/* 07EE98 7F04A368 46083180 */ add.s $f6, $f6, $f8 -.L7F04A36C: -/* 07EE9C 7F04A36C 4606C283 */ div.s $f10, $f24, $f6 -/* 07EEA0 7F04A370 920E0060 */ lbu $t6, 0x60($s0) -/* 07EEA4 7F04A374 92080063 */ lbu $t0, 0x63($s0) -/* 07EEA8 7F04A378 920C0066 */ lbu $t4, 0x66($s0) -/* 07EEAC 7F04A37C A20E0061 */ sb $t6, 0x61($s0) -/* 07EEB0 7F04A380 92180069 */ lbu $t8, 0x69($s0) -/* 07EEB4 7F04A384 E60A0070 */ swc1 $f10, 0x70($s0) -/* 07EEB8 7F04A388 8C6F0004 */ lw $t7, 4($v1) -/* 07EEBC 7F04A38C A2080064 */ sb $t0, 0x64($s0) -/* 07EEC0 7F04A390 000FCE02 */ srl $t9, $t7, 0x18 -/* 07EEC4 7F04A394 A2190062 */ sb $t9, 0x62($s0) -/* 07EEC8 7F04A398 8C690004 */ lw $t1, 4($v1) -/* 07EECC 7F04A39C A20C0067 */ sb $t4, 0x67($s0) -/* 07EED0 7F04A3A0 00095C02 */ srl $t3, $t1, 0x10 -/* 07EED4 7F04A3A4 A20B0065 */ sb $t3, 0x65($s0) -/* 07EED8 7F04A3A8 8C6D0004 */ lw $t5, 4($v1) -/* 07EEDC 7F04A3AC A218006A */ sb $t8, 0x6a($s0) -/* 07EEE0 7F04A3B0 24490003 */ addiu $t1, $v0, 3 -/* 07EEE4 7F04A3B4 000D7A02 */ srl $t7, $t5, 8 -/* 07EEE8 7F04A3B8 A20F0068 */ sb $t7, 0x68($s0) -/* 07EEEC 7F04A3BC 8C680004 */ lw $t0, 4($v1) -/* 07EEF0 7F04A3C0 A6090004 */ sh $t1, 4($s0) -/* 07EEF4 7F04A3C4 10000028 */ b .L7F04A468 -/* 07EEF8 7F04A3C8 A208006B */ sb $t0, 0x6b($s0) -command0E_set_rotation: -/* 07EEFC 7F04A3CC 8C6A0004 */ lw $t2, 4($v1) -/* 07EF00 7F04A3D0 244B0002 */ addiu $t3, $v0, 2 -/* 07EF04 7F04A3D4 A60B0004 */ sh $t3, 4($s0) -/* 07EF08 7F04A3D8 448A9000 */ mtc1 $t2, $f18 -/* 07EF0C 7F04A3DC 00000000 */ nop -/* 07EF10 7F04A3E0 46809120 */ cvt.s.w $f4, $f18 -/* 07EF14 7F04A3E4 461A2202 */ mul.s $f8, $f4, $f26 -/* 07EF18 7F04A3E8 46024183 */ div.s $f6, $f8, $f2 -/* 07EF1C 7F04A3EC 1000001E */ b .L7F04A468 -/* 07EF20 7F04A3F0 E606000C */ swc1 $f6, 0xc($s0) -command0F_rotate: -/* 07EF24 7F04A3F4 8C6C0004 */ lw $t4, 4($v1) -/* 07EF28 7F04A3F8 3C018005 */ lui $at, %hi(g_JP_GlobalTimerDelta) -/* 07EF2C 7F04A3FC C42A8378 */ lwc1 $f10, %lo(g_JP_GlobalTimerDelta)($at) -/* 07EF30 7F04A400 448C9000 */ mtc1 $t4, $f18 -/* 07EF34 7F04A404 00000000 */ nop -/* 07EF38 7F04A408 46809120 */ cvt.s.w $f4, $f18 -/* 07EF3C 7F04A40C 46045202 */ mul.s $f8, $f10, $f4 -/* 07EF40 7F04A410 C60A000C */ lwc1 $f10, 0xc($s0) -/* 07EF44 7F04A414 461A4182 */ mul.s $f6, $f8, $f26 -/* 07EF48 7F04A418 46023483 */ div.s $f18, $f6, $f2 -/* 07EF4C 7F04A41C 46125100 */ add.s $f4, $f10, $f18 -/* 07EF50 7F04A420 E604000C */ swc1 $f4, 0xc($s0) -/* 07EF54 7F04A424 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07EF58 7F04A428 460CD03E */ c.le.s $f26, $f12 -/* 07EF5C 7F04A42C 00000000 */ nop -/* 07EF60 7F04A430 45020005 */ bc1fl .L7F04A448 -/* 07EF64 7F04A434 4614603C */ c.lt.s $f12, $f20 -/* 07EF68 7F04A438 461A6201 */ sub.s $f8, $f12, $f26 -/* 07EF6C 7F04A43C E608000C */ swc1 $f8, 0xc($s0) -/* 07EF70 7F04A440 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07EF74 7F04A444 4614603C */ c.lt.s $f12, $f20 -.L7F04A448: -/* 07EF78 7F04A448 00000000 */ nop -/* 07EF7C 7F04A44C 45020004 */ bc1fl .L7F04A460 -/* 07EF80 7F04A450 960D0004 */ lhu $t5, 4($s0) -/* 07EF84 7F04A454 461A6180 */ add.s $f6, $f12, $f26 -/* 07EF88 7F04A458 E606000C */ swc1 $f6, 0xc($s0) -/* 07EF8C 7F04A45C 960D0004 */ lhu $t5, 4($s0) -.L7F04A460: -/* 07EF90 7F04A460 25AE0002 */ addiu $t6, $t5, 2 -/* 07EF94 7F04A464 A60E0004 */ sh $t6, 4($s0) -def_7F04A01C: -.L7F04A468: -/* 07EF98 7F04A468 5220FEE2 */ beql $s1, $zero, .L7F049FF4 -/* 07EF9C 7F04A46C 96020004 */ lhu $v0, 4($s0) -/* 07EFA0 7F04A470 C6000018 */ lwc1 $f0, 0x18($s0) -/* 07EFA4 7F04A474 4600A03C */ c.lt.s $f20, $f0 -/* 07EFA8 7F04A478 00000000 */ nop -/* 07EFAC 7F04A47C 45000017 */ bc1f .L7F04A4DC -/* 07EFB0 7F04A480 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) -/* 07EFB4 7F04A484 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 07EFB8 7F04A488 C4520000 */ lwc1 $f18, ($v0) -/* 07EFBC 7F04A48C C60A0014 */ lwc1 $f10, 0x14($s0) -/* 07EFC0 7F04A490 46120102 */ mul.s $f4, $f0, $f18 -/* 07EFC4 7F04A494 46045200 */ add.s $f8, $f10, $f4 -/* 07EFC8 7F04A498 E6080014 */ swc1 $f8, 0x14($s0) -/* 07EFCC 7F04A49C C6020014 */ lwc1 $f2, 0x14($s0) -/* 07EFD0 7F04A4A0 4618103C */ c.lt.s $f2, $f24 -/* 07EFD4 7F04A4A4 00000000 */ nop -/* 07EFD8 7F04A4A8 45020009 */ bc1fl .L7F04A4D0 -/* 07EFDC 7F04A4AC C6080020 */ lwc1 $f8, 0x20($s0) -/* 07EFE0 7F04A4B0 C600001C */ lwc1 $f0, 0x1c($s0) -/* 07EFE4 7F04A4B4 C6060020 */ lwc1 $f6, 0x20($s0) -/* 07EFE8 7F04A4B8 46003481 */ sub.s $f18, $f6, $f0 -/* 07EFEC 7F04A4BC 46029282 */ mul.s $f10, $f18, $f2 -/* 07EFF0 7F04A4C0 460A0100 */ add.s $f4, $f0, $f10 -/* 07EFF4 7F04A4C4 10000005 */ b .L7F04A4DC -/* 07EFF8 7F04A4C8 E6040010 */ swc1 $f4, 0x10($s0) -/* 07EFFC 7F04A4CC C6080020 */ lwc1 $f8, 0x20($s0) -.L7F04A4D0: -/* 07F000 7F04A4D0 E6180014 */ swc1 $f24, 0x14($s0) -/* 07F004 7F04A4D4 E6140018 */ swc1 $f20, 0x18($s0) -/* 07F008 7F04A4D8 E6080010 */ swc1 $f8, 0x10($s0) -.L7F04A4DC: -/* 07F00C 7F04A4DC C600002C */ lwc1 $f0, 0x2c($s0) -/* 07F010 7F04A4E0 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) -/* 07F014 7F04A4E4 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 07F018 7F04A4E8 4600A03C */ c.lt.s $f20, $f0 -/* 07F01C 7F04A4EC 00000000 */ nop -/* 07F020 7F04A4F0 45020017 */ bc1fl .L7F04A550 -/* 07F024 7F04A4F4 C6000040 */ lwc1 $f0, 0x40($s0) -/* 07F028 7F04A4F8 C4520000 */ lwc1 $f18, ($v0) -/* 07F02C 7F04A4FC C6060028 */ lwc1 $f6, 0x28($s0) -/* 07F030 7F04A500 46120282 */ mul.s $f10, $f0, $f18 -/* 07F034 7F04A504 460A3100 */ add.s $f4, $f6, $f10 -/* 07F038 7F04A508 E6040028 */ swc1 $f4, 0x28($s0) -/* 07F03C 7F04A50C C6020028 */ lwc1 $f2, 0x28($s0) -/* 07F040 7F04A510 4618103C */ c.lt.s $f2, $f24 -/* 07F044 7F04A514 00000000 */ nop -/* 07F048 7F04A518 45020009 */ bc1fl .L7F04A540 -/* 07F04C 7F04A51C C6040034 */ lwc1 $f4, 0x34($s0) -/* 07F050 7F04A520 C6000030 */ lwc1 $f0, 0x30($s0) -/* 07F054 7F04A524 C6080034 */ lwc1 $f8, 0x34($s0) -/* 07F058 7F04A528 46004481 */ sub.s $f18, $f8, $f0 -/* 07F05C 7F04A52C 46029182 */ mul.s $f6, $f18, $f2 -/* 07F060 7F04A530 46060280 */ add.s $f10, $f0, $f6 -/* 07F064 7F04A534 10000005 */ b .L7F04A54C -/* 07F068 7F04A538 E60A0024 */ swc1 $f10, 0x24($s0) -/* 07F06C 7F04A53C C6040034 */ lwc1 $f4, 0x34($s0) -.L7F04A540: -/* 07F070 7F04A540 E6180028 */ swc1 $f24, 0x28($s0) -/* 07F074 7F04A544 E614002C */ swc1 $f20, 0x2c($s0) -/* 07F078 7F04A548 E6040024 */ swc1 $f4, 0x24($s0) -.L7F04A54C: -/* 07F07C 7F04A54C C6000040 */ lwc1 $f0, 0x40($s0) -.L7F04A550: -/* 07F080 7F04A550 4600A03C */ c.lt.s $f20, $f0 -/* 07F084 7F04A554 00000000 */ nop -/* 07F088 7F04A558 45020017 */ bc1fl .L7F04A5B8 -/* 07F08C 7F04A55C C6000054 */ lwc1 $f0, 0x54($s0) -/* 07F090 7F04A560 C4520000 */ lwc1 $f18, ($v0) -/* 07F094 7F04A564 C608003C */ lwc1 $f8, 0x3c($s0) -/* 07F098 7F04A568 46120182 */ mul.s $f6, $f0, $f18 -/* 07F09C 7F04A56C 46064280 */ add.s $f10, $f8, $f6 -/* 07F0A0 7F04A570 E60A003C */ swc1 $f10, 0x3c($s0) -/* 07F0A4 7F04A574 C602003C */ lwc1 $f2, 0x3c($s0) -/* 07F0A8 7F04A578 4618103C */ c.lt.s $f2, $f24 -/* 07F0AC 7F04A57C 00000000 */ nop -/* 07F0B0 7F04A580 45020009 */ bc1fl .L7F04A5A8 -/* 07F0B4 7F04A584 C60A0048 */ lwc1 $f10, 0x48($s0) -/* 07F0B8 7F04A588 C6000044 */ lwc1 $f0, 0x44($s0) -/* 07F0BC 7F04A58C C6040048 */ lwc1 $f4, 0x48($s0) -/* 07F0C0 7F04A590 46002481 */ sub.s $f18, $f4, $f0 -/* 07F0C4 7F04A594 46029202 */ mul.s $f8, $f18, $f2 -/* 07F0C8 7F04A598 46080180 */ add.s $f6, $f0, $f8 -/* 07F0CC 7F04A59C 10000005 */ b .L7F04A5B4 -/* 07F0D0 7F04A5A0 E6060038 */ swc1 $f6, 0x38($s0) -/* 07F0D4 7F04A5A4 C60A0048 */ lwc1 $f10, 0x48($s0) -.L7F04A5A8: -/* 07F0D8 7F04A5A8 E618003C */ swc1 $f24, 0x3c($s0) -/* 07F0DC 7F04A5AC E6140040 */ swc1 $f20, 0x40($s0) -/* 07F0E0 7F04A5B0 E60A0038 */ swc1 $f10, 0x38($s0) -.L7F04A5B4: -/* 07F0E4 7F04A5B4 C6000054 */ lwc1 $f0, 0x54($s0) -.L7F04A5B8: -/* 07F0E8 7F04A5B8 4600A03C */ c.lt.s $f20, $f0 -/* 07F0EC 7F04A5BC 00000000 */ nop -/* 07F0F0 7F04A5C0 45020017 */ bc1fl .L7F04A620 -/* 07F0F4 7F04A5C4 C6020070 */ lwc1 $f2, 0x70($s0) -/* 07F0F8 7F04A5C8 C4520000 */ lwc1 $f18, ($v0) -/* 07F0FC 7F04A5CC C6040050 */ lwc1 $f4, 0x50($s0) -/* 07F100 7F04A5D0 46120202 */ mul.s $f8, $f0, $f18 -/* 07F104 7F04A5D4 46082180 */ add.s $f6, $f4, $f8 -/* 07F108 7F04A5D8 E6060050 */ swc1 $f6, 0x50($s0) -/* 07F10C 7F04A5DC C6020050 */ lwc1 $f2, 0x50($s0) -/* 07F110 7F04A5E0 4618103C */ c.lt.s $f2, $f24 -/* 07F114 7F04A5E4 00000000 */ nop -/* 07F118 7F04A5E8 45020009 */ bc1fl .L7F04A610 -/* 07F11C 7F04A5EC C606005C */ lwc1 $f6, 0x5c($s0) -/* 07F120 7F04A5F0 C6000058 */ lwc1 $f0, 0x58($s0) -/* 07F124 7F04A5F4 C60A005C */ lwc1 $f10, 0x5c($s0) -/* 07F128 7F04A5F8 46005481 */ sub.s $f18, $f10, $f0 -/* 07F12C 7F04A5FC 46029102 */ mul.s $f4, $f18, $f2 -/* 07F130 7F04A600 46040200 */ add.s $f8, $f0, $f4 -/* 07F134 7F04A604 10000005 */ b .L7F04A61C -/* 07F138 7F04A608 E608004C */ swc1 $f8, 0x4c($s0) -/* 07F13C 7F04A60C C606005C */ lwc1 $f6, 0x5c($s0) -.L7F04A610: -/* 07F140 7F04A610 E6180050 */ swc1 $f24, 0x50($s0) -/* 07F144 7F04A614 E6140054 */ swc1 $f20, 0x54($s0) -/* 07F148 7F04A618 E606004C */ swc1 $f6, 0x4c($s0) -.L7F04A61C: -/* 07F14C 7F04A61C C6020070 */ lwc1 $f2, 0x70($s0) -.L7F04A620: -/* 07F150 7F04A620 4602A03C */ c.lt.s $f20, $f2 -/* 07F154 7F04A624 00000000 */ nop -/* 07F158 7F04A628 4502003F */ bc1fl .L7F04A728 -/* 07F15C 7F04A62C 8FAA00A0 */ lw $t2, 0xa0($sp) -/* 07F160 7F04A630 C4520000 */ lwc1 $f18, ($v0) -/* 07F164 7F04A634 C60A006C */ lwc1 $f10, 0x6c($s0) -/* 07F168 7F04A638 46121102 */ mul.s $f4, $f2, $f18 -/* 07F16C 7F04A63C 46045200 */ add.s $f8, $f10, $f4 -/* 07F170 7F04A640 E608006C */ swc1 $f8, 0x6c($s0) -/* 07F174 7F04A644 C600006C */ lwc1 $f0, 0x6c($s0) -/* 07F178 7F04A648 4618003C */ c.lt.s $f0, $f24 -/* 07F17C 7F04A64C 00000000 */ nop -/* 07F180 7F04A650 4502002B */ bc1fl .L7F04A700 -/* 07F184 7F04A654 920F0062 */ lbu $t7, 0x62($s0) -/* 07F188 7F04A658 92020061 */ lbu $v0, 0x61($s0) -/* 07F18C 7F04A65C 920F0062 */ lbu $t7, 0x62($s0) -/* 07F190 7F04A660 92030064 */ lbu $v1, 0x64($s0) -/* 07F194 7F04A664 920A0065 */ lbu $t2, 0x65($s0) -/* 07F198 7F04A668 01E2C023 */ subu $t8, $t7, $v0 -/* 07F19C 7F04A66C 44983000 */ mtc1 $t8, $f6 -/* 07F1A0 7F04A670 01435823 */ subu $t3, $t2, $v1 -/* 07F1A4 7F04A674 448B4000 */ mtc1 $t3, $f8 -/* 07F1A8 7F04A678 468034A0 */ cvt.s.w $f18, $f6 -/* 07F1AC 7F04A67C 920F0068 */ lbu $t7, 0x68($s0) -/* 07F1B0 7F04A680 92040067 */ lbu $a0, 0x67($s0) -/* 07F1B4 7F04A684 920A006B */ lbu $t2, 0x6b($s0) -/* 07F1B8 7F04A688 9205006A */ lbu $a1, 0x6a($s0) -/* 07F1BC 7F04A68C 468041A0 */ cvt.s.w $f6, $f8 -/* 07F1C0 7F04A690 46009282 */ mul.s $f10, $f18, $f0 -/* 07F1C4 7F04A694 01E4C023 */ subu $t8, $t7, $a0 -/* 07F1C8 7F04A698 01455823 */ subu $t3, $t2, $a1 -/* 07F1CC 7F04A69C 46003482 */ mul.s $f18, $f6, $f0 -/* 07F1D0 7F04A6A0 4600510D */ trunc.w.s $f4, $f10 -/* 07F1D4 7F04A6A4 4600928D */ trunc.w.s $f10, $f18 -/* 07F1D8 7F04A6A8 44082000 */ mfc1 $t0, $f4 -/* 07F1DC 7F04A6AC 44982000 */ mtc1 $t8, $f4 -/* 07F1E0 7F04A6B0 440D5000 */ mfc1 $t5, $f10 -/* 07F1E4 7F04A6B4 46802220 */ cvt.s.w $f8, $f4 -/* 07F1E8 7F04A6B8 448B5000 */ mtc1 $t3, $f10 -/* 07F1EC 7F04A6BC 00484821 */ addu $t1, $v0, $t0 -/* 07F1F0 7F04A6C0 006D7021 */ addu $t6, $v1, $t5 -/* 07F1F4 7F04A6C4 A2090060 */ sb $t1, 0x60($s0) -/* 07F1F8 7F04A6C8 46805120 */ cvt.s.w $f4, $f10 -/* 07F1FC 7F04A6CC 46004182 */ mul.s $f6, $f8, $f0 -/* 07F200 7F04A6D0 A20E0063 */ sb $t6, 0x63($s0) -/* 07F204 7F04A6D4 46002202 */ mul.s $f8, $f4, $f0 -/* 07F208 7F04A6D8 4600348D */ trunc.w.s $f18, $f6 -/* 07F20C 7F04A6DC 4600418D */ trunc.w.s $f6, $f8 -/* 07F210 7F04A6E0 44089000 */ mfc1 $t0, $f18 -/* 07F214 7F04A6E4 440D3000 */ mfc1 $t5, $f6 -/* 07F218 7F04A6E8 00884821 */ addu $t1, $a0, $t0 -/* 07F21C 7F04A6EC A2090066 */ sb $t1, 0x66($s0) -/* 07F220 7F04A6F0 00AD7021 */ addu $t6, $a1, $t5 -/* 07F224 7F04A6F4 1000000B */ b .L7F04A724 -/* 07F228 7F04A6F8 A20E0069 */ sb $t6, 0x69($s0) -/* 07F22C 7F04A6FC 920F0062 */ lbu $t7, 0x62($s0) -.L7F04A700: -/* 07F230 7F04A700 92180065 */ lbu $t8, 0x65($s0) -/* 07F234 7F04A704 92190068 */ lbu $t9, 0x68($s0) -/* 07F238 7F04A708 9208006B */ lbu $t0, 0x6b($s0) -/* 07F23C 7F04A70C E618006C */ swc1 $f24, 0x6c($s0) -/* 07F240 7F04A710 E6140070 */ swc1 $f20, 0x70($s0) -/* 07F244 7F04A714 A20F0060 */ sb $t7, 0x60($s0) -/* 07F248 7F04A718 A2180063 */ sb $t8, 0x63($s0) -/* 07F24C 7F04A71C A2190066 */ sb $t9, 0x66($s0) -/* 07F250 7F04A720 A2080069 */ sb $t0, 0x69($s0) -.L7F04A724: -/* 07F254 7F04A724 8FAA00A0 */ lw $t2, 0xa0($sp) -.L7F04A728: -/* 07F258 7F04A728 8FA300A4 */ lw $v1, 0xa4($sp) -/* 07F25C 7F04A72C 8FA900BC */ lw $t1, 0xbc($sp) -/* 07F260 7F04A730 AD520000 */ sw $s2, ($t2) -/* 07F264 7F04A734 3C0F8009 */ lui $t7, %hi(monitorimages) -/* 07F268 7F04A738 AD490004 */ sw $t1, 4($t2) -/* 07F26C 7F04A73C 8C6B0008 */ lw $t3, 8($v1) -/* 07F270 7F04A740 8D610000 */ lw $at, ($t3) -/* 07F274 7F04A744 AE410000 */ sw $at, ($s2) -/* 07F278 7F04A748 8D6D0004 */ lw $t5, 4($t3) -/* 07F27C 7F04A74C AE4D0004 */ sw $t5, 4($s2) -/* 07F280 7F04A750 8D610008 */ lw $at, 8($t3) -/* 07F284 7F04A754 AE410008 */ sw $at, 8($s2) -/* 07F288 7F04A758 8D6D000C */ lw $t5, 0xc($t3) -/* 07F28C 7F04A75C AE4D000C */ sw $t5, 0xc($s2) -/* 07F290 7F04A760 8C6E0008 */ lw $t6, 8($v1) -/* 07F294 7F04A764 8DC10010 */ lw $at, 0x10($t6) -/* 07F298 7F04A768 AE410010 */ sw $at, 0x10($s2) -/* 07F29C 7F04A76C 8DD80014 */ lw $t8, 0x14($t6) -/* 07F2A0 7F04A770 AE580014 */ sw $t8, 0x14($s2) -/* 07F2A4 7F04A774 8DC10018 */ lw $at, 0x18($t6) -/* 07F2A8 7F04A778 AE410018 */ sw $at, 0x18($s2) -/* 07F2AC 7F04A77C 8DD8001C */ lw $t8, 0x1c($t6) -/* 07F2B0 7F04A780 AE58001C */ sw $t8, 0x1c($s2) -/* 07F2B4 7F04A784 8C790008 */ lw $t9, 8($v1) -/* 07F2B8 7F04A788 8F210020 */ lw $at, 0x20($t9) -/* 07F2BC 7F04A78C AE410020 */ sw $at, 0x20($s2) -/* 07F2C0 7F04A790 8F290024 */ lw $t1, 0x24($t9) -/* 07F2C4 7F04A794 AE490024 */ sw $t1, 0x24($s2) -/* 07F2C8 7F04A798 8F210028 */ lw $at, 0x28($t9) -/* 07F2CC 7F04A79C AE410028 */ sw $at, 0x28($s2) -/* 07F2D0 7F04A7A0 8F29002C */ lw $t1, 0x2c($t9) -/* 07F2D4 7F04A7A4 AE49002C */ sw $t1, 0x2c($s2) -/* 07F2D8 7F04A7A8 8C6A0008 */ lw $t2, 8($v1) -/* 07F2DC 7F04A7AC 8D410030 */ lw $at, 0x30($t2) -/* 07F2E0 7F04A7B0 AE410030 */ sw $at, 0x30($s2) -/* 07F2E4 7F04A7B4 8D4B0034 */ lw $t3, 0x34($t2) -/* 07F2E8 7F04A7B8 AE4B0034 */ sw $t3, 0x34($s2) -/* 07F2EC 7F04A7BC 8D410038 */ lw $at, 0x38($t2) -/* 07F2F0 7F04A7C0 AE410038 */ sw $at, 0x38($s2) -/* 07F2F4 7F04A7C4 8D4B003C */ lw $t3, 0x3c($t2) -/* 07F2F8 7F04A7C8 AE4B003C */ sw $t3, 0x3c($s2) -/* 07F2FC 7F04A7CC 8E020008 */ lw $v0, 8($s0) -/* 07F300 7F04A7D0 2C410064 */ sltiu $at, $v0, 0x64 -/* 07F304 7F04A7D4 10200007 */ beqz $at, .L7F04A7F4 -/* 07F308 7F04A7D8 00408825 */ move $s1, $v0 -/* 07F30C 7F04A7DC 00026880 */ sll $t5, $v0, 2 -/* 07F310 7F04A7E0 8DEFD120 */ lw $t7, %lo(monitorimages)($t7) -/* 07F314 7F04A7E4 01A26823 */ subu $t5, $t5, $v0 -/* 07F318 7F04A7E8 000D6880 */ sll $t5, $t5, 2 -/* 07F31C 7F04A7EC 10000001 */ b .L7F04A7F4 -/* 07F320 7F04A7F0 01AF8821 */ addu $s1, $t5, $t7 -.L7F04A7F4: -/* 07F324 7F04A7F4 122000A9 */ beqz $s1, .L7F04AA9C -/* 07F328 7F04A7F8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07F32C 7F04A7FC 44810000 */ mtc1 $at, $f0 -/* 07F330 7F04A800 C6120010 */ lwc1 $f18, 0x10($s0) -/* 07F334 7F04A804 C60A0024 */ lwc1 $f10, 0x24($s0) -/* 07F338 7F04A808 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07F33C 7F04A80C 46009582 */ mul.s $f22, $f18, $f0 -/* 07F340 7F04A810 460CA032 */ c.eq.s $f20, $f12 -/* 07F344 7F04A814 46005602 */ mul.s $f24, $f10, $f0 -/* 07F348 7F04A818 4600B386 */ mov.s $f14, $f22 -/* 07F34C 7F04A81C 45010015 */ bc1t .L7F04A874 -/* 07F350 7F04A820 4600C406 */ mov.s $f16, $f24 -/* 07F354 7F04A824 E7AE0054 */ swc1 $f14, 0x54($sp) -/* 07F358 7F04A828 0FC15FA8 */ jal cosf -/* 07F35C 7F04A82C E7B00050 */ swc1 $f16, 0x50($sp) -/* 07F360 7F04A830 3C018005 */ lui $at, %hi(D_80052CB0) -/* 07F364 7F04A834 C43A2CB0 */ lwc1 $f26, %lo(D_80052CB0)($at) -/* 07F368 7F04A838 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07F36C 7F04A83C 461A0502 */ mul.s $f20, $f0, $f26 -/* 07F370 7F04A840 0FC15FAB */ jal sinf -/* 07F374 7F04A844 00000000 */ nop -/* 07F378 7F04A848 4614B582 */ mul.s $f22, $f22, $f20 -/* 07F37C 7F04A84C C7AE0054 */ lwc1 $f14, 0x54($sp) -/* 07F380 7F04A850 C7B00050 */ lwc1 $f16, 0x50($sp) -/* 07F384 7F04A854 461A0082 */ mul.s $f2, $f0, $f26 -/* 07F388 7F04A858 00000000 */ nop -/* 07F38C 7F04A85C 4602C602 */ mul.s $f24, $f24, $f2 -/* 07F390 7F04A860 00000000 */ nop -/* 07F394 7F04A864 46027382 */ mul.s $f14, $f14, $f2 -/* 07F398 7F04A868 00000000 */ nop -/* 07F39C 7F04A86C 46148402 */ mul.s $f16, $f16, $f20 -/* 07F3A0 7F04A870 00000000 */ nop -.L7F04A874: -/* 07F3A4 7F04A874 922E0004 */ lbu $t6, 4($s1) -/* 07F3A8 7F04A878 3C014200 */ li $at, 0x42000000 # 32.000000 -/* 07F3AC 7F04A87C 44810000 */ mtc1 $at, $f0 -/* 07F3B0 7F04A880 448E4000 */ mtc1 $t6, $f8 -/* 07F3B4 7F04A884 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F3B8 7F04A888 05C10004 */ bgez $t6, .L7F04A89C -/* 07F3BC 7F04A88C 468041A0 */ cvt.s.w $f6, $f8 -/* 07F3C0 7F04A890 44819000 */ mtc1 $at, $f18 -/* 07F3C4 7F04A894 00000000 */ nop -/* 07F3C8 7F04A898 46123180 */ add.s $f6, $f6, $f18 -.L7F04A89C: -/* 07F3CC 7F04A89C C60A0038 */ lwc1 $f10, 0x38($s0) -/* 07F3D0 7F04A8A0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F3D4 7F04A8A4 46165100 */ add.s $f4, $f10, $f22 -/* 07F3D8 7F04A8A8 46043202 */ mul.s $f8, $f6, $f4 -/* 07F3DC 7F04A8AC 00000000 */ nop -/* 07F3E0 7F04A8B0 46004482 */ mul.s $f18, $f8, $f0 -/* 07F3E4 7F04A8B4 4600928D */ trunc.w.s $f10, $f18 -/* 07F3E8 7F04A8B8 44085000 */ mfc1 $t0, $f10 -/* 07F3EC 7F04A8BC 00000000 */ nop -/* 07F3F0 7F04A8C0 A6480008 */ sh $t0, 8($s2) -/* 07F3F4 7F04A8C4 92390005 */ lbu $t9, 5($s1) -/* 07F3F8 7F04A8C8 44993000 */ mtc1 $t9, $f6 -/* 07F3FC 7F04A8CC 07210004 */ bgez $t9, .L7F04A8E0 -/* 07F400 7F04A8D0 46803120 */ cvt.s.w $f4, $f6 -/* 07F404 7F04A8D4 44814000 */ mtc1 $at, $f8 -/* 07F408 7F04A8D8 00000000 */ nop -/* 07F40C 7F04A8DC 46082100 */ add.s $f4, $f4, $f8 -.L7F04A8E0: -/* 07F410 7F04A8E0 C612004C */ lwc1 $f18, 0x4c($s0) -/* 07F414 7F04A8E4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F418 7F04A8E8 46189280 */ add.s $f10, $f18, $f24 -/* 07F41C 7F04A8EC 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F420 7F04A8F0 00000000 */ nop -/* 07F424 7F04A8F4 46003202 */ mul.s $f8, $f6, $f0 -/* 07F428 7F04A8F8 4600448D */ trunc.w.s $f18, $f8 -/* 07F42C 7F04A8FC 440C9000 */ mfc1 $t4, $f18 -/* 07F430 7F04A900 00000000 */ nop -/* 07F434 7F04A904 A64C000A */ sh $t4, 0xa($s2) -/* 07F438 7F04A908 922A0004 */ lbu $t2, 4($s1) -/* 07F43C 7F04A90C 448A2000 */ mtc1 $t2, $f4 -/* 07F440 7F04A910 05410004 */ bgez $t2, .L7F04A924 -/* 07F444 7F04A914 468022A0 */ cvt.s.w $f10, $f4 -/* 07F448 7F04A918 44813000 */ mtc1 $at, $f6 -/* 07F44C 7F04A91C 00000000 */ nop -/* 07F450 7F04A920 46065280 */ add.s $f10, $f10, $f6 -.L7F04A924: -/* 07F454 7F04A924 C6080038 */ lwc1 $f8, 0x38($s0) -/* 07F458 7F04A928 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F45C 7F04A92C 460E4481 */ sub.s $f18, $f8, $f14 -/* 07F460 7F04A930 46125102 */ mul.s $f4, $f10, $f18 -/* 07F464 7F04A934 00000000 */ nop -/* 07F468 7F04A938 46002182 */ mul.s $f6, $f4, $f0 -/* 07F46C 7F04A93C 4600320D */ trunc.w.s $f8, $f6 -/* 07F470 7F04A940 440D4000 */ mfc1 $t5, $f8 -/* 07F474 7F04A944 00000000 */ nop -/* 07F478 7F04A948 A64D0018 */ sh $t5, 0x18($s2) -/* 07F47C 7F04A94C 922F0005 */ lbu $t7, 5($s1) -/* 07F480 7F04A950 448F5000 */ mtc1 $t7, $f10 -/* 07F484 7F04A954 05E10004 */ bgez $t7, .L7F04A968 -/* 07F488 7F04A958 468054A0 */ cvt.s.w $f18, $f10 -/* 07F48C 7F04A95C 44812000 */ mtc1 $at, $f4 -/* 07F490 7F04A960 00000000 */ nop -/* 07F494 7F04A964 46049480 */ add.s $f18, $f18, $f4 -.L7F04A968: -/* 07F498 7F04A968 C606004C */ lwc1 $f6, 0x4c($s0) -/* 07F49C 7F04A96C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F4A0 7F04A970 46103200 */ add.s $f8, $f6, $f16 -/* 07F4A4 7F04A974 46089282 */ mul.s $f10, $f18, $f8 -/* 07F4A8 7F04A978 00000000 */ nop -/* 07F4AC 7F04A97C 46005102 */ mul.s $f4, $f10, $f0 -/* 07F4B0 7F04A980 4600218D */ trunc.w.s $f6, $f4 -/* 07F4B4 7F04A984 44183000 */ mfc1 $t8, $f6 -/* 07F4B8 7F04A988 00000000 */ nop -/* 07F4BC 7F04A98C A658001A */ sh $t8, 0x1a($s2) -/* 07F4C0 7F04A990 92280004 */ lbu $t0, 4($s1) -/* 07F4C4 7F04A994 44889000 */ mtc1 $t0, $f18 -/* 07F4C8 7F04A998 05010004 */ bgez $t0, .L7F04A9AC -/* 07F4CC 7F04A99C 46809220 */ cvt.s.w $f8, $f18 -/* 07F4D0 7F04A9A0 44815000 */ mtc1 $at, $f10 -/* 07F4D4 7F04A9A4 00000000 */ nop -/* 07F4D8 7F04A9A8 460A4200 */ add.s $f8, $f8, $f10 -.L7F04A9AC: -/* 07F4DC 7F04A9AC C6040038 */ lwc1 $f4, 0x38($s0) -/* 07F4E0 7F04A9B0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F4E4 7F04A9B4 46162181 */ sub.s $f6, $f4, $f22 -/* 07F4E8 7F04A9B8 46064482 */ mul.s $f18, $f8, $f6 -/* 07F4EC 7F04A9BC 00000000 */ nop -/* 07F4F0 7F04A9C0 46009282 */ mul.s $f10, $f18, $f0 -/* 07F4F4 7F04A9C4 4600510D */ trunc.w.s $f4, $f10 -/* 07F4F8 7F04A9C8 44092000 */ mfc1 $t1, $f4 -/* 07F4FC 7F04A9CC 00000000 */ nop -/* 07F500 7F04A9D0 A6490028 */ sh $t1, 0x28($s2) -/* 07F504 7F04A9D4 922C0005 */ lbu $t4, 5($s1) -/* 07F508 7F04A9D8 448C4000 */ mtc1 $t4, $f8 -/* 07F50C 7F04A9DC 05810004 */ bgez $t4, .L7F04A9F0 -/* 07F510 7F04A9E0 468041A0 */ cvt.s.w $f6, $f8 -/* 07F514 7F04A9E4 44819000 */ mtc1 $at, $f18 -/* 07F518 7F04A9E8 00000000 */ nop -/* 07F51C 7F04A9EC 46123180 */ add.s $f6, $f6, $f18 -.L7F04A9F0: -/* 07F520 7F04A9F0 C60A004C */ lwc1 $f10, 0x4c($s0) -/* 07F524 7F04A9F4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F528 7F04A9F8 46185101 */ sub.s $f4, $f10, $f24 -/* 07F52C 7F04A9FC 46043202 */ mul.s $f8, $f6, $f4 -/* 07F530 7F04AA00 00000000 */ nop -/* 07F534 7F04AA04 46004482 */ mul.s $f18, $f8, $f0 -/* 07F538 7F04AA08 4600928D */ trunc.w.s $f10, $f18 -/* 07F53C 7F04AA0C 440B5000 */ mfc1 $t3, $f10 -/* 07F540 7F04AA10 00000000 */ nop -/* 07F544 7F04AA14 A64B002A */ sh $t3, 0x2a($s2) -/* 07F548 7F04AA18 922D0004 */ lbu $t5, 4($s1) -/* 07F54C 7F04AA1C 448D3000 */ mtc1 $t5, $f6 -/* 07F550 7F04AA20 05A10004 */ bgez $t5, .L7F04AA34 -/* 07F554 7F04AA24 46803120 */ cvt.s.w $f4, $f6 -/* 07F558 7F04AA28 44814000 */ mtc1 $at, $f8 -/* 07F55C 7F04AA2C 00000000 */ nop -/* 07F560 7F04AA30 46082100 */ add.s $f4, $f4, $f8 -.L7F04AA34: -/* 07F564 7F04AA34 C6120038 */ lwc1 $f18, 0x38($s0) -/* 07F568 7F04AA38 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F56C 7F04AA3C 460E9280 */ add.s $f10, $f18, $f14 -/* 07F570 7F04AA40 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F574 7F04AA44 00000000 */ nop -/* 07F578 7F04AA48 46003202 */ mul.s $f8, $f6, $f0 -/* 07F57C 7F04AA4C 4600448D */ trunc.w.s $f18, $f8 -/* 07F580 7F04AA50 440E9000 */ mfc1 $t6, $f18 -/* 07F584 7F04AA54 00000000 */ nop -/* 07F588 7F04AA58 A64E0038 */ sh $t6, 0x38($s2) -/* 07F58C 7F04AA5C 92380005 */ lbu $t8, 5($s1) -/* 07F590 7F04AA60 44982000 */ mtc1 $t8, $f4 -/* 07F594 7F04AA64 07010004 */ bgez $t8, .L7F04AA78 -/* 07F598 7F04AA68 468022A0 */ cvt.s.w $f10, $f4 -/* 07F59C 7F04AA6C 44813000 */ mtc1 $at, $f6 -/* 07F5A0 7F04AA70 00000000 */ nop -/* 07F5A4 7F04AA74 46065280 */ add.s $f10, $f10, $f6 -.L7F04AA78: -/* 07F5A8 7F04AA78 C608004C */ lwc1 $f8, 0x4c($s0) -/* 07F5AC 7F04AA7C 46104481 */ sub.s $f18, $f8, $f16 -/* 07F5B0 7F04AA80 46125102 */ mul.s $f4, $f10, $f18 -/* 07F5B4 7F04AA84 00000000 */ nop -/* 07F5B8 7F04AA88 46002182 */ mul.s $f6, $f4, $f0 -/* 07F5BC 7F04AA8C 4600320D */ trunc.w.s $f8, $f6 -/* 07F5C0 7F04AA90 44194000 */ mfc1 $t9, $f8 -/* 07F5C4 7F04AA94 00000000 */ nop -/* 07F5C8 7F04AA98 A659003A */ sh $t9, 0x3a($s2) -.L7F04AA9C: -/* 07F5CC 7F04AA9C 92020060 */ lbu $v0, 0x60($s0) -/* 07F5D0 7F04AAA0 240C0002 */ li $t4, 2 -/* 07F5D4 7F04AAA4 3C0DB700 */ lui $t5, 0xb700 -/* 07F5D8 7F04AAA8 A242003C */ sb $v0, 0x3c($s2) -/* 07F5DC 7F04AAAC A242002C */ sb $v0, 0x2c($s2) -/* 07F5E0 7F04AAB0 A242001C */ sb $v0, 0x1c($s2) -/* 07F5E4 7F04AAB4 A242000C */ sb $v0, 0xc($s2) -/* 07F5E8 7F04AAB8 92020063 */ lbu $v0, 0x63($s0) -/* 07F5EC 7F04AABC 240F2000 */ li $t7, 8192 -/* 07F5F0 7F04AAC0 27A400BC */ addiu $a0, $sp, 0xbc -/* 07F5F4 7F04AAC4 A242003D */ sb $v0, 0x3d($s2) -/* 07F5F8 7F04AAC8 A242002D */ sb $v0, 0x2d($s2) -/* 07F5FC 7F04AACC A242001D */ sb $v0, 0x1d($s2) -/* 07F600 7F04AAD0 A242000D */ sb $v0, 0xd($s2) -/* 07F604 7F04AAD4 92030066 */ lbu $v1, 0x66($s0) -/* 07F608 7F04AAD8 A243003E */ sb $v1, 0x3e($s2) -/* 07F60C 7F04AADC A243002E */ sb $v1, 0x2e($s2) -/* 07F610 7F04AAE0 A243001E */ sb $v1, 0x1e($s2) -/* 07F614 7F04AAE4 A243000E */ sb $v1, 0xe($s2) -/* 07F618 7F04AAE8 92020069 */ lbu $v0, 0x69($s0) -/* 07F61C 7F04AAEC A242003F */ sb $v0, 0x3f($s2) -/* 07F620 7F04AAF0 A242002F */ sb $v0, 0x2f($s2) -/* 07F624 7F04AAF4 A242001F */ sb $v0, 0x1f($s2) -/* 07F628 7F04AAF8 A242000F */ sb $v0, 0xf($s2) -/* 07F62C 7F04AAFC 92090069 */ lbu $t1, 0x69($s0) -/* 07F630 7F04AB00 292100FF */ slti $at, $t1, 0xff -/* 07F634 7F04AB04 50200003 */ beql $at, $zero, .L7F04AB14 -/* 07F638 7F04AB08 8FAA00BC */ lw $t2, 0xbc($sp) -/* 07F63C 7F04AB0C AFAC00C4 */ sw $t4, 0xc4($sp) -/* 07F640 7F04AB10 8FAA00BC */ lw $t2, 0xbc($sp) -.L7F04AB14: -/* 07F644 7F04AB14 240E0002 */ li $t6, 2 -/* 07F648 7F04AB18 02202825 */ move $a1, $s1 -/* 07F64C 7F04AB1C 254B0008 */ addiu $t3, $t2, 8 -/* 07F650 7F04AB20 AFAB00BC */ sw $t3, 0xbc($sp) -/* 07F654 7F04AB24 AD4F0004 */ sw $t7, 4($t2) -/* 07F658 7F04AB28 AD4D0000 */ sw $t5, ($t2) -/* 07F65C 7F04AB2C AFAE0010 */ sw $t6, 0x10($sp) -/* 07F660 7F04AB30 8FA700C0 */ lw $a3, 0xc0($sp) -/* 07F664 7F04AB34 0FC1DB5A */ jal texSelect -/* 07F668 7F04AB38 8FA600C4 */ lw $a2, 0xc4($sp) -/* 07F66C 7F04AB3C 8FB000BC */ lw $s0, 0xbc($sp) -/* 07F670 7F04AB40 3C190102 */ lui $t9, (0x01020040 >> 16) # lui $t9, 0x102 -/* 07F674 7F04AB44 37390040 */ ori $t9, (0x01020040 & 0xFFFF) # ori $t9, $t9, 0x40 -/* 07F678 7F04AB48 26080008 */ addiu $t0, $s0, 8 -/* 07F67C 7F04AB4C AFA800BC */ sw $t0, 0xbc($sp) -/* 07F680 7F04AB50 AE190000 */ sw $t9, ($s0) -/* 07F684 7F04AB54 8FA900B0 */ lw $t1, 0xb0($sp) -/* 07F688 7F04AB58 0C003A2C */ jal osVirtualToPhysical -/* 07F68C 7F04AB5C 8D24000C */ lw $a0, 0xc($t1) -/* 07F690 7F04AB60 AE020004 */ sw $v0, 4($s0) -/* 07F694 7F04AB64 8FB100BC */ lw $s1, 0xbc($sp) -/* 07F698 7F04AB68 3C0BBC00 */ lui $t3, (0xBC001006 >> 16) # lui $t3, 0xbc00 -/* 07F69C 7F04AB6C 356B1006 */ ori $t3, (0xBC001006 & 0xFFFF) # ori $t3, $t3, 0x1006 -/* 07F6A0 7F04AB70 262A0008 */ addiu $t2, $s1, 8 -/* 07F6A4 7F04AB74 AFAA00BC */ sw $t2, 0xbc($sp) -/* 07F6A8 7F04AB78 02402025 */ move $a0, $s2 -/* 07F6AC 7F04AB7C 0C003A2C */ jal osVirtualToPhysical -/* 07F6B0 7F04AB80 AE2B0000 */ sw $t3, ($s1) -/* 07F6B4 7F04AB84 AE220004 */ sw $v0, 4($s1) -/* 07F6B8 7F04AB88 8FAD00BC */ lw $t5, 0xbc($sp) -/* 07F6BC 7F04AB8C 3C0E0430 */ lui $t6, (0x04300040 >> 16) # lui $t6, 0x430 -/* 07F6C0 7F04AB90 35CE0040 */ ori $t6, (0x04300040 & 0xFFFF) # ori $t6, $t6, 0x40 -/* 07F6C4 7F04AB94 25AF0008 */ addiu $t7, $t5, 8 -/* 07F6C8 7F04AB98 AFAF00BC */ sw $t7, 0xbc($sp) -/* 07F6CC 7F04AB9C 3C180400 */ lui $t8, 0x400 -/* 07F6D0 7F04ABA0 ADB80004 */ sw $t8, 4($t5) -/* 07F6D4 7F04ABA4 ADAE0000 */ sw $t6, ($t5) -/* 07F6D8 7F04ABA8 8FA800BC */ lw $t0, 0xbc($sp) -/* 07F6DC 7F04ABAC 3C09B100 */ lui $t1, (0xB1000032 >> 16) # lui $t1, 0xb100 -/* 07F6E0 7F04ABB0 35290032 */ ori $t1, (0xB1000032 & 0xFFFF) # ori $t1, $t1, 0x32 -/* 07F6E4 7F04ABB4 25190008 */ addiu $t9, $t0, 8 -/* 07F6E8 7F04ABB8 AFB900BC */ sw $t9, 0xbc($sp) -/* 07F6EC 7F04ABBC 240C2010 */ li $t4, 8208 -/* 07F6F0 7F04ABC0 AD0C0004 */ sw $t4, 4($t0) -/* 07F6F4 7F04ABC4 AD090000 */ sw $t1, ($t0) -/* 07F6F8 7F04ABC8 8FAA00BC */ lw $t2, 0xbc($sp) -/* 07F6FC 7F04ABCC 3C0DB800 */ lui $t5, 0xb800 -/* 07F700 7F04ABD0 3C0F0601 */ lui $t7, 0x601 -/* 07F704 7F04ABD4 254B0008 */ addiu $t3, $t2, 8 -/* 07F708 7F04ABD8 AFAB00BC */ sw $t3, 0xbc($sp) -/* 07F70C 7F04ABDC AD400004 */ sw $zero, 4($t2) -/* 07F710 7F04ABE0 AD4D0000 */ sw $t5, ($t2) -/* 07F714 7F04ABE4 8FA600A8 */ lw $a2, 0xa8($sp) -/* 07F718 7F04ABE8 ACCF0000 */ sw $t7, ($a2) -/* 07F71C 7F04ABEC 8FAE00BC */ lw $t6, 0xbc($sp) -/* 07F720 7F04ABF0 ACCE0004 */ sw $t6, 4($a2) -.L7F04ABF4: -/* 07F724 7F04ABF4 8FBF004C */ lw $ra, 0x4c($sp) -.L7F04ABF8: -/* 07F728 7F04ABF8 8FA200BC */ lw $v0, 0xbc($sp) -/* 07F72C 7F04ABFC D7B40020 */ ldc1 $f20, 0x20($sp) -/* 07F730 7F04AC00 D7B60028 */ ldc1 $f22, 0x28($sp) -/* 07F734 7F04AC04 D7B80030 */ ldc1 $f24, 0x30($sp) -/* 07F738 7F04AC08 D7BA0038 */ ldc1 $f26, 0x38($sp) -/* 07F73C 7F04AC0C 8FB00040 */ lw $s0, 0x40($sp) -/* 07F740 7F04AC10 8FB10044 */ lw $s1, 0x44($sp) -/* 07F744 7F04AC14 8FB20048 */ lw $s2, 0x48($sp) -/* 07F748 7F04AC18 03E00008 */ jr $ra -/* 07F74C 7F04AC1C 27BD00B0 */ addiu $sp, $sp, 0xb0 -) -#endif -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80052C68 -.word 0x40c90fdb /*6.2831855*/ -/*D:80052C6C*/ -glabel jpt_80052C6C -.word command00_reset_scroll_shift -.word command01_horizontal_scroll -.word command02_vertical_scroll -.word command03_horizontal_pos -.word command04_vertical_pos -.word command05_zoomx -.word command06_zoomy -.word command07_use_image_from_global_monitor_table -.word command08_halt_processing_for_time -.word command09_jump -.word command0A_jump_conditional -.word command0B_restart -.word command0C_break -.word command0D_colour_transition -.word command0E_set_rotation -.word command0F_rotate - -glabel D_80052CAC -.word 0x3fc90fdb /*1.5707964*/ -glabel D_80052CB0 -.word 0x3fb50481 /*1.4141999*/ -glabel D_80052CB4 -.word 0x3f59999a /*0.85000002*/ -glabel D_80052CB8 -.word 0x3e19999a /*0.15000001*/ -glabel D_80052CBC -.word 0x3e19999a /*0.15000001*/ -glabel D_80052CC0 -.word 0x3f666666 /*0.89999998*/ -.text -glabel process_monitor_animation_microcode -/* 07EA78 7F049F48 27BDFF50 */ addiu $sp, $sp, -0xb0 -/* 07EA7C 7F049F4C AFB10044 */ sw $s1, 0x44($sp) -/* 07EA80 7F049F50 AFB00040 */ sw $s0, 0x40($sp) -/* 07EA84 7F049F54 00C08025 */ move $s0, $a2 -/* 07EA88 7F049F58 00A08825 */ move $s1, $a1 -/* 07EA8C 7F049F5C AFBF004C */ sw $ra, 0x4c($sp) -/* 07EA90 7F049F60 AFB20048 */ sw $s2, 0x48($sp) -/* 07EA94 7F049F64 F7BA0038 */ sdc1 $f26, 0x38($sp) -/* 07EA98 7F049F68 F7B80030 */ sdc1 $f24, 0x30($sp) -/* 07EA9C 7F049F6C F7B60028 */ sdc1 $f22, 0x28($sp) -/* 07EAA0 7F049F70 F7B40020 */ sdc1 $f20, 0x20($sp) -/* 07EAA4 7F049F74 AFA400B0 */ sw $a0, 0xb0($sp) -/* 07EAA8 7F049F78 10A0031E */ beqz $a1, .L7F04ABF4 -/* 07EAAC 7F049F7C AFA700BC */ sw $a3, 0xbc($sp) -/* 07EAB0 7F049F80 94AE0000 */ lhu $t6, ($a1) -/* 07EAB4 7F049F84 24010018 */ li $at, 24 -/* 07EAB8 7F049F88 31CF00FF */ andi $t7, $t6, 0xff -/* 07EABC 7F049F8C 55E1031A */ bnel $t7, $at, .L7F04ABF8 -/* 07EAC0 7F049F90 8FBF004C */ lw $ra, 0x4c($sp) -/* 07EAC4 7F049F94 0FC2F5B1 */ jal dynAllocate7F0BD6C4 -/* 07EAC8 7F049F98 24040004 */ li $a0, 4 -/* 07EACC 7F049F9C 8FB800BC */ lw $t8, 0xbc($sp) -/* 07EAD0 7F049FA0 00409025 */ move $s2, $v0 -/* 07EAD4 7F049FA4 8FA400B0 */ lw $a0, 0xb0($sp) -/* 07EAD8 7F049FA8 27190008 */ addiu $t9, $t8, 8 -/* 07EADC 7F049FAC AFB900BC */ sw $t9, 0xbc($sp) -/* 07EAE0 7F049FB0 AFB800A8 */ sw $t8, 0xa8($sp) -/* 07EAE4 7F049FB4 8E280004 */ lw $t0, 4($s1) -/* 07EAE8 7F049FB8 02202825 */ move $a1, $s1 -/* 07EAEC 7F049FBC 0FC1B1E7 */ jal modelGetNodeRwData -/* 07EAF0 7F049FC0 AFA800A4 */ sw $t0, 0xa4($sp) -/* 07EAF4 7F049FC4 3C018005 */ lui $at, %hi(D_80052C68) -/* 07EAF8 7F049FC8 C43A2C68 */ lwc1 $f26, %lo(D_80052C68)($at) -/* 07EAFC 7F049FCC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07EB00 7F049FD0 4481C000 */ mtc1 $at, $f24 -/* 07EB04 7F049FD4 3C013A80 */ li $at, 0x3A800000 # 0.000977 -/* 07EB08 7F049FD8 4481B000 */ mtc1 $at, $f22 -/* 07EB0C 7F049FDC 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EB10 7F049FE0 44811000 */ mtc1 $at, $f2 -/* 07EB14 7F049FE4 4480A000 */ mtc1 $zero, $f20 -/* 07EB18 7F049FE8 AFA200A0 */ sw $v0, 0xa0($sp) -/* 07EB1C 7F049FEC 00008825 */ move $s1, $zero -/* 07EB20 7F049FF0 96020004 */ lhu $v0, 4($s0) -.L7F049FF4: -/* 07EB24 7F049FF4 8E090000 */ lw $t1, ($s0) -/* 07EB28 7F049FF8 00025080 */ sll $t2, $v0, 2 -/* 07EB2C 7F049FFC 012A1821 */ addu $v1, $t1, $t2 -/* 07EB30 7F04A000 8C6B0000 */ lw $t3, ($v1) -/* 07EB34 7F04A004 2D610010 */ sltiu $at, $t3, 0x10 -/* 07EB38 7F04A008 10200117 */ beqz $at, .L7F04A468 -/* 07EB3C 7F04A00C 000B5880 */ sll $t3, $t3, 2 -/* 07EB40 7F04A010 3C018005 */ lui $at, %hi(jpt_80052C6C) -/* 07EB44 7F04A014 002B0821 */ addu $at, $at, $t3 -/* 07EB48 7F04A018 8C2B2C6C */ lw $t3, %lo(jpt_80052C6C)($at) -/* 07EB4C 7F04A01C 01600008 */ jr $t3 -/* 07EB50 7F04A020 00000000 */ nop -command00_reset_scroll_shift: -/* 07EB54 7F04A024 244C0001 */ addiu $t4, $v0, 1 -/* 07EB58 7F04A028 E6140040 */ swc1 $f20, 0x40($s0) -/* 07EB5C 7F04A02C E6140054 */ swc1 $f20, 0x54($s0) -/* 07EB60 7F04A030 1000010D */ b .L7F04A468 -/* 07EB64 7F04A034 A60C0004 */ sh $t4, 4($s0) -command01_horizontal_scroll: -/* 07EB68 7F04A038 E614003C */ swc1 $f20, 0x3c($s0) -/* 07EB6C 7F04A03C 8C6D0008 */ lw $t5, 8($v1) -/* 07EB70 7F04A040 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EB74 7F04A044 448D2000 */ mtc1 $t5, $f4 -/* 07EB78 7F04A048 05A10004 */ bgez $t5, .L7F04A05C -/* 07EB7C 7F04A04C 468021A0 */ cvt.s.w $f6, $f4 -/* 07EB80 7F04A050 44814000 */ mtc1 $at, $f8 -/* 07EB84 7F04A054 00000000 */ nop -/* 07EB88 7F04A058 46083180 */ add.s $f6, $f6, $f8 -.L7F04A05C: -/* 07EB8C 7F04A05C 4606C283 */ div.s $f10, $f24, $f6 -/* 07EB90 7F04A060 C6000038 */ lwc1 $f0, 0x38($s0) -/* 07EB94 7F04A064 244F0003 */ addiu $t7, $v0, 3 -/* 07EB98 7F04A068 E6000044 */ swc1 $f0, 0x44($s0) -/* 07EB9C 7F04A06C E60A0040 */ swc1 $f10, 0x40($s0) -/* 07EBA0 7F04A070 8C6E0004 */ lw $t6, 4($v1) -/* 07EBA4 7F04A074 A60F0004 */ sh $t7, 4($s0) -/* 07EBA8 7F04A078 448E9000 */ mtc1 $t6, $f18 -/* 07EBAC 7F04A07C 00000000 */ nop -/* 07EBB0 7F04A080 46809120 */ cvt.s.w $f4, $f18 -/* 07EBB4 7F04A084 46162202 */ mul.s $f8, $f4, $f22 -/* 07EBB8 7F04A088 46080180 */ add.s $f6, $f0, $f8 -/* 07EBBC 7F04A08C 100000F6 */ b .L7F04A468 -/* 07EBC0 7F04A090 E6060048 */ swc1 $f6, 0x48($s0) -command02_vertical_scroll: -/* 07EBC4 7F04A094 E6140050 */ swc1 $f20, 0x50($s0) -/* 07EBC8 7F04A098 8C780008 */ lw $t8, 8($v1) -/* 07EBCC 7F04A09C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EBD0 7F04A0A0 44985000 */ mtc1 $t8, $f10 -/* 07EBD4 7F04A0A4 07010004 */ bgez $t8, .L7F04A0B8 -/* 07EBD8 7F04A0A8 468054A0 */ cvt.s.w $f18, $f10 -/* 07EBDC 7F04A0AC 44812000 */ mtc1 $at, $f4 -/* 07EBE0 7F04A0B0 00000000 */ nop -/* 07EBE4 7F04A0B4 46049480 */ add.s $f18, $f18, $f4 -.L7F04A0B8: -/* 07EBE8 7F04A0B8 4612C203 */ div.s $f8, $f24, $f18 -/* 07EBEC 7F04A0BC C600004C */ lwc1 $f0, 0x4c($s0) -/* 07EBF0 7F04A0C0 24480003 */ addiu $t0, $v0, 3 -/* 07EBF4 7F04A0C4 E6000058 */ swc1 $f0, 0x58($s0) -/* 07EBF8 7F04A0C8 E6080054 */ swc1 $f8, 0x54($s0) -/* 07EBFC 7F04A0CC 8C790004 */ lw $t9, 4($v1) -/* 07EC00 7F04A0D0 A6080004 */ sh $t0, 4($s0) -/* 07EC04 7F04A0D4 44993000 */ mtc1 $t9, $f6 -/* 07EC08 7F04A0D8 00000000 */ nop -/* 07EC0C 7F04A0DC 468032A0 */ cvt.s.w $f10, $f6 -/* 07EC10 7F04A0E0 46165102 */ mul.s $f4, $f10, $f22 -/* 07EC14 7F04A0E4 46040480 */ add.s $f18, $f0, $f4 -/* 07EC18 7F04A0E8 100000DF */ b .L7F04A468 -/* 07EC1C 7F04A0EC E612005C */ swc1 $f18, 0x5c($s0) -command03_horizontal_pos: -/* 07EC20 7F04A0F0 E614003C */ swc1 $f20, 0x3c($s0) -/* 07EC24 7F04A0F4 8C690008 */ lw $t1, 8($v1) -/* 07EC28 7F04A0F8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EC2C 7F04A0FC 44894000 */ mtc1 $t1, $f8 -/* 07EC30 7F04A100 05210004 */ bgez $t1, .L7F04A114 -/* 07EC34 7F04A104 468041A0 */ cvt.s.w $f6, $f8 -/* 07EC38 7F04A108 44815000 */ mtc1 $at, $f10 -/* 07EC3C 7F04A10C 00000000 */ nop -/* 07EC40 7F04A110 460A3180 */ add.s $f6, $f6, $f10 -.L7F04A114: -/* 07EC44 7F04A114 4606C103 */ div.s $f4, $f24, $f6 -/* 07EC48 7F04A118 C6120038 */ lwc1 $f18, 0x38($s0) -/* 07EC4C 7F04A11C 244B0003 */ addiu $t3, $v0, 3 -/* 07EC50 7F04A120 E6120044 */ swc1 $f18, 0x44($s0) -/* 07EC54 7F04A124 E6040040 */ swc1 $f4, 0x40($s0) -/* 07EC58 7F04A128 8C6A0004 */ lw $t2, 4($v1) -/* 07EC5C 7F04A12C A60B0004 */ sh $t3, 4($s0) -/* 07EC60 7F04A130 448A4000 */ mtc1 $t2, $f8 -/* 07EC64 7F04A134 00000000 */ nop -/* 07EC68 7F04A138 468042A0 */ cvt.s.w $f10, $f8 -/* 07EC6C 7F04A13C 46165182 */ mul.s $f6, $f10, $f22 -/* 07EC70 7F04A140 100000C9 */ b .L7F04A468 -/* 07EC74 7F04A144 E6060048 */ swc1 $f6, 0x48($s0) -command04_vertical_pos: -/* 07EC78 7F04A148 E6140050 */ swc1 $f20, 0x50($s0) -/* 07EC7C 7F04A14C 8C6C0008 */ lw $t4, 8($v1) -/* 07EC80 7F04A150 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EC84 7F04A154 448C2000 */ mtc1 $t4, $f4 -/* 07EC88 7F04A158 05810004 */ bgez $t4, .L7F04A16C -/* 07EC8C 7F04A15C 468024A0 */ cvt.s.w $f18, $f4 -/* 07EC90 7F04A160 44814000 */ mtc1 $at, $f8 -/* 07EC94 7F04A164 00000000 */ nop -/* 07EC98 7F04A168 46089480 */ add.s $f18, $f18, $f8 -.L7F04A16C: -/* 07EC9C 7F04A16C 4612C283 */ div.s $f10, $f24, $f18 -/* 07ECA0 7F04A170 C606004C */ lwc1 $f6, 0x4c($s0) -/* 07ECA4 7F04A174 244E0003 */ addiu $t6, $v0, 3 -/* 07ECA8 7F04A178 E6060058 */ swc1 $f6, 0x58($s0) -/* 07ECAC 7F04A17C E60A0054 */ swc1 $f10, 0x54($s0) -/* 07ECB0 7F04A180 8C6D0004 */ lw $t5, 4($v1) -/* 07ECB4 7F04A184 A60E0004 */ sh $t6, 4($s0) -/* 07ECB8 7F04A188 448D2000 */ mtc1 $t5, $f4 -/* 07ECBC 7F04A18C 00000000 */ nop -/* 07ECC0 7F04A190 46802220 */ cvt.s.w $f8, $f4 -/* 07ECC4 7F04A194 46164482 */ mul.s $f18, $f8, $f22 -/* 07ECC8 7F04A198 100000B3 */ b .L7F04A468 -/* 07ECCC 7F04A19C E612005C */ swc1 $f18, 0x5c($s0) -command05_zoomx: -/* 07ECD0 7F04A1A0 E6140014 */ swc1 $f20, 0x14($s0) -/* 07ECD4 7F04A1A4 8C6F0008 */ lw $t7, 8($v1) -/* 07ECD8 7F04A1A8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07ECDC 7F04A1AC 448F5000 */ mtc1 $t7, $f10 -/* 07ECE0 7F04A1B0 05E10004 */ bgez $t7, .L7F04A1C4 -/* 07ECE4 7F04A1B4 468051A0 */ cvt.s.w $f6, $f10 -/* 07ECE8 7F04A1B8 44812000 */ mtc1 $at, $f4 -/* 07ECEC 7F04A1BC 00000000 */ nop -/* 07ECF0 7F04A1C0 46043180 */ add.s $f6, $f6, $f4 -.L7F04A1C4: -/* 07ECF4 7F04A1C4 4606C203 */ div.s $f8, $f24, $f6 -/* 07ECF8 7F04A1C8 C6120010 */ lwc1 $f18, 0x10($s0) -/* 07ECFC 7F04A1CC 24590003 */ addiu $t9, $v0, 3 -/* 07ED00 7F04A1D0 E612001C */ swc1 $f18, 0x1c($s0) -/* 07ED04 7F04A1D4 E6080018 */ swc1 $f8, 0x18($s0) -/* 07ED08 7F04A1D8 8C780004 */ lw $t8, 4($v1) -/* 07ED0C 7F04A1DC A6190004 */ sh $t9, 4($s0) -/* 07ED10 7F04A1E0 44985000 */ mtc1 $t8, $f10 -/* 07ED14 7F04A1E4 00000000 */ nop -/* 07ED18 7F04A1E8 46805120 */ cvt.s.w $f4, $f10 -/* 07ED1C 7F04A1EC 46162182 */ mul.s $f6, $f4, $f22 -/* 07ED20 7F04A1F0 1000009D */ b .L7F04A468 -/* 07ED24 7F04A1F4 E6060020 */ swc1 $f6, 0x20($s0) -command06_zoomy: -/* 07ED28 7F04A1F8 E6140028 */ swc1 $f20, 0x28($s0) -/* 07ED2C 7F04A1FC 8C680008 */ lw $t0, 8($v1) -/* 07ED30 7F04A200 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07ED34 7F04A204 44884000 */ mtc1 $t0, $f8 -/* 07ED38 7F04A208 05010004 */ bgez $t0, .L7F04A21C -/* 07ED3C 7F04A20C 468044A0 */ cvt.s.w $f18, $f8 -/* 07ED40 7F04A210 44815000 */ mtc1 $at, $f10 -/* 07ED44 7F04A214 00000000 */ nop -/* 07ED48 7F04A218 460A9480 */ add.s $f18, $f18, $f10 -.L7F04A21C: -/* 07ED4C 7F04A21C 4612C103 */ div.s $f4, $f24, $f18 -/* 07ED50 7F04A220 C6060024 */ lwc1 $f6, 0x24($s0) -/* 07ED54 7F04A224 244A0003 */ addiu $t2, $v0, 3 -/* 07ED58 7F04A228 E6060030 */ swc1 $f6, 0x30($s0) -/* 07ED5C 7F04A22C E604002C */ swc1 $f4, 0x2c($s0) -/* 07ED60 7F04A230 8C690004 */ lw $t1, 4($v1) -/* 07ED64 7F04A234 A60A0004 */ sh $t2, 4($s0) -/* 07ED68 7F04A238 44894000 */ mtc1 $t1, $f8 -/* 07ED6C 7F04A23C 00000000 */ nop -/* 07ED70 7F04A240 468042A0 */ cvt.s.w $f10, $f8 -/* 07ED74 7F04A244 46165482 */ mul.s $f18, $f10, $f22 -/* 07ED78 7F04A248 10000087 */ b .L7F04A468 -/* 07ED7C 7F04A24C E6120034 */ swc1 $f18, 0x34($s0) -command07_use_image_from_global_monitor_table: -/* 07ED80 7F04A250 02002025 */ move $a0, $s0 -/* 07ED84 7F04A254 0FC127D0 */ jal save_img_index_to_obj_ani_slot -/* 07ED88 7F04A258 8C650004 */ lw $a1, 4($v1) -/* 07ED8C 7F04A25C 960B0004 */ lhu $t3, 4($s0) -/* 07ED90 7F04A260 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07ED94 7F04A264 44811000 */ mtc1 $at, $f2 -/* 07ED98 7F04A268 256C0002 */ addiu $t4, $t3, 2 -/* 07ED9C 7F04A26C 1000007E */ b .L7F04A468 -/* 07EDA0 7F04A270 A60C0004 */ sh $t4, 4($s0) -command08_halt_processing_for_time: -/* 07EDA4 7F04A274 86020006 */ lh $v0, 6($s0) -/* 07EDA8 7F04A278 3C0D8005 */ lui $t5, %hi(g_ClockTimer) -/* 07EDAC 7F04A27C 0442000E */ bltzl $v0, .L7F04A2B8 -/* 07EDB0 7F04A280 8C680004 */ lw $t0, 4($v1) -/* 07EDB4 7F04A284 8DAD8374 */ lw $t5, %lo(g_ClockTimer)($t5) -/* 07EDB8 7F04A288 004D7023 */ subu $t6, $v0, $t5 -/* 07EDBC 7F04A28C A60E0006 */ sh $t6, 6($s0) -/* 07EDC0 7F04A290 860F0006 */ lh $t7, 6($s0) -/* 07EDC4 7F04A294 05E20004 */ bltzl $t7, .L7F04A2A8 -/* 07EDC8 7F04A298 96180004 */ lhu $t8, 4($s0) -/* 07EDCC 7F04A29C 10000072 */ b .L7F04A468 -/* 07EDD0 7F04A2A0 24110001 */ li $s1, 1 -/* 07EDD4 7F04A2A4 96180004 */ lhu $t8, 4($s0) -.L7F04A2A8: -/* 07EDD8 7F04A2A8 27190002 */ addiu $t9, $t8, 2 -/* 07EDDC 7F04A2AC 1000006E */ b .L7F04A468 -/* 07EDE0 7F04A2B0 A6190004 */ sh $t9, 4($s0) -/* 07EDE4 7F04A2B4 8C680004 */ lw $t0, 4($v1) -.L7F04A2B8: -/* 07EDE8 7F04A2B8 24110001 */ li $s1, 1 -/* 07EDEC 7F04A2BC 1000006A */ b .L7F04A468 -/* 07EDF0 7F04A2C0 A6080006 */ sh $t0, 6($s0) -command09_jump: -/* 07EDF4 7F04A2C4 02002025 */ move $a0, $s0 -/* 07EDF8 7F04A2C8 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot -/* 07EDFC 7F04A2CC 8C650004 */ lw $a1, 4($v1) -/* 07EE00 7F04A2D0 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EE04 7F04A2D4 44811000 */ mtc1 $at, $f2 -/* 07EE08 7F04A2D8 10000063 */ b .L7F04A468 -/* 07EE0C 7F04A2DC 00000000 */ nop -command0A_jump_conditional: -/* 07EE10 7F04A2E0 0C002914 */ jal randomGetNext -/* 07EE14 7F04A2E4 AFA30094 */ sw $v1, 0x94($sp) -/* 07EE18 7F04A2E8 8FA30094 */ lw $v1, 0x94($sp) -/* 07EE1C 7F04A2EC 00024C02 */ srl $t1, $v0, 0x10 -/* 07EE20 7F04A2F0 02002025 */ move $a0, $s0 -/* 07EE24 7F04A2F4 8C6A0008 */ lw $t2, 8($v1) -/* 07EE28 7F04A2F8 012A082B */ sltu $at, $t1, $t2 -/* 07EE2C 7F04A2FC 50200008 */ beql $at, $zero, .L7F04A320 -/* 07EE30 7F04A300 960B0004 */ lhu $t3, 4($s0) -/* 07EE34 7F04A304 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot -/* 07EE38 7F04A308 8C650004 */ lw $a1, 4($v1) -/* 07EE3C 7F04A30C 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EE40 7F04A310 44811000 */ mtc1 $at, $f2 -/* 07EE44 7F04A314 10000054 */ b .L7F04A468 -/* 07EE48 7F04A318 00000000 */ nop -/* 07EE4C 7F04A31C 960B0004 */ lhu $t3, 4($s0) -.L7F04A320: -/* 07EE50 7F04A320 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 07EE54 7F04A324 44811000 */ mtc1 $at, $f2 -/* 07EE58 7F04A328 256C0003 */ addiu $t4, $t3, 3 -/* 07EE5C 7F04A32C A60C0004 */ sh $t4, 4($s0) -/* 07EE60 7F04A330 1000004D */ b .L7F04A468 -/* 07EE64 7F04A334 00000000 */ nop -command0B_restart: -/* 07EE68 7F04A338 1000004B */ b .L7F04A468 -/* 07EE6C 7F04A33C A6000004 */ sh $zero, 4($s0) -command0C_break: -/* 07EE70 7F04A340 10000049 */ b .L7F04A468 -/* 07EE74 7F04A344 24110001 */ li $s1, 1 -command0D_colour_transition: -/* 07EE78 7F04A348 E614006C */ swc1 $f20, 0x6c($s0) -/* 07EE7C 7F04A34C 8C6D0008 */ lw $t5, 8($v1) -/* 07EE80 7F04A350 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07EE84 7F04A354 448D2000 */ mtc1 $t5, $f4 -/* 07EE88 7F04A358 05A10004 */ bgez $t5, .L7F04A36C -/* 07EE8C 7F04A35C 468021A0 */ cvt.s.w $f6, $f4 -/* 07EE90 7F04A360 44814000 */ mtc1 $at, $f8 -/* 07EE94 7F04A364 00000000 */ nop -/* 07EE98 7F04A368 46083180 */ add.s $f6, $f6, $f8 -.L7F04A36C: -/* 07EE9C 7F04A36C 4606C283 */ div.s $f10, $f24, $f6 -/* 07EEA0 7F04A370 920E0060 */ lbu $t6, 0x60($s0) -/* 07EEA4 7F04A374 92080063 */ lbu $t0, 0x63($s0) -/* 07EEA8 7F04A378 920C0066 */ lbu $t4, 0x66($s0) -/* 07EEAC 7F04A37C A20E0061 */ sb $t6, 0x61($s0) -/* 07EEB0 7F04A380 92180069 */ lbu $t8, 0x69($s0) -/* 07EEB4 7F04A384 E60A0070 */ swc1 $f10, 0x70($s0) -/* 07EEB8 7F04A388 8C6F0004 */ lw $t7, 4($v1) -/* 07EEBC 7F04A38C A2080064 */ sb $t0, 0x64($s0) -/* 07EEC0 7F04A390 000FCE02 */ srl $t9, $t7, 0x18 -/* 07EEC4 7F04A394 A2190062 */ sb $t9, 0x62($s0) -/* 07EEC8 7F04A398 8C690004 */ lw $t1, 4($v1) -/* 07EECC 7F04A39C A20C0067 */ sb $t4, 0x67($s0) -/* 07EED0 7F04A3A0 00095C02 */ srl $t3, $t1, 0x10 -/* 07EED4 7F04A3A4 A20B0065 */ sb $t3, 0x65($s0) -/* 07EED8 7F04A3A8 8C6D0004 */ lw $t5, 4($v1) -/* 07EEDC 7F04A3AC A218006A */ sb $t8, 0x6a($s0) -/* 07EEE0 7F04A3B0 24490003 */ addiu $t1, $v0, 3 -/* 07EEE4 7F04A3B4 000D7A02 */ srl $t7, $t5, 8 -/* 07EEE8 7F04A3B8 A20F0068 */ sb $t7, 0x68($s0) -/* 07EEEC 7F04A3BC 8C680004 */ lw $t0, 4($v1) -/* 07EEF0 7F04A3C0 A6090004 */ sh $t1, 4($s0) -/* 07EEF4 7F04A3C4 10000028 */ b .L7F04A468 -/* 07EEF8 7F04A3C8 A208006B */ sb $t0, 0x6b($s0) -command0E_set_rotation: -/* 07EEFC 7F04A3CC 8C6A0004 */ lw $t2, 4($v1) -/* 07EF00 7F04A3D0 244B0002 */ addiu $t3, $v0, 2 -/* 07EF04 7F04A3D4 A60B0004 */ sh $t3, 4($s0) -/* 07EF08 7F04A3D8 448A9000 */ mtc1 $t2, $f18 -/* 07EF0C 7F04A3DC 00000000 */ nop -/* 07EF10 7F04A3E0 46809120 */ cvt.s.w $f4, $f18 -/* 07EF14 7F04A3E4 461A2202 */ mul.s $f8, $f4, $f26 -/* 07EF18 7F04A3E8 46024183 */ div.s $f6, $f8, $f2 -/* 07EF1C 7F04A3EC 1000001E */ b .L7F04A468 -/* 07EF20 7F04A3F0 E606000C */ swc1 $f6, 0xc($s0) -command0F_rotate: -/* 07EF24 7F04A3F4 8C6C0004 */ lw $t4, 4($v1) -/* 07EF28 7F04A3F8 3C018005 */ lui $at, %hi(g_JP_GlobalTimerDelta) -/* 07EF2C 7F04A3FC C42A8378 */ lwc1 $f10, %lo(g_JP_GlobalTimerDelta)($at) -/* 07EF30 7F04A400 448C9000 */ mtc1 $t4, $f18 -/* 07EF34 7F04A404 00000000 */ nop -/* 07EF38 7F04A408 46809120 */ cvt.s.w $f4, $f18 -/* 07EF3C 7F04A40C 46045202 */ mul.s $f8, $f10, $f4 -/* 07EF40 7F04A410 C60A000C */ lwc1 $f10, 0xc($s0) -/* 07EF44 7F04A414 461A4182 */ mul.s $f6, $f8, $f26 -/* 07EF48 7F04A418 46023483 */ div.s $f18, $f6, $f2 -/* 07EF4C 7F04A41C 46125100 */ add.s $f4, $f10, $f18 -/* 07EF50 7F04A420 E604000C */ swc1 $f4, 0xc($s0) -/* 07EF54 7F04A424 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07EF58 7F04A428 460CD03E */ c.le.s $f26, $f12 -/* 07EF5C 7F04A42C 00000000 */ nop -/* 07EF60 7F04A430 45020005 */ bc1fl .L7F04A448 -/* 07EF64 7F04A434 4614603C */ c.lt.s $f12, $f20 -/* 07EF68 7F04A438 461A6201 */ sub.s $f8, $f12, $f26 -/* 07EF6C 7F04A43C E608000C */ swc1 $f8, 0xc($s0) -/* 07EF70 7F04A440 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07EF74 7F04A444 4614603C */ c.lt.s $f12, $f20 -.L7F04A448: -/* 07EF78 7F04A448 00000000 */ nop -/* 07EF7C 7F04A44C 45020004 */ bc1fl .L7F04A460 -/* 07EF80 7F04A450 960D0004 */ lhu $t5, 4($s0) -/* 07EF84 7F04A454 461A6180 */ add.s $f6, $f12, $f26 -/* 07EF88 7F04A458 E606000C */ swc1 $f6, 0xc($s0) -/* 07EF8C 7F04A45C 960D0004 */ lhu $t5, 4($s0) -.L7F04A460: -/* 07EF90 7F04A460 25AE0002 */ addiu $t6, $t5, 2 -/* 07EF94 7F04A464 A60E0004 */ sh $t6, 4($s0) -def_7F04A01C: -.L7F04A468: -/* 07EF98 7F04A468 5220FEE2 */ beql $s1, $zero, .L7F049FF4 -/* 07EF9C 7F04A46C 96020004 */ lhu $v0, 4($s0) -/* 07EFA0 7F04A470 C6000018 */ lwc1 $f0, 0x18($s0) -/* 07EFA4 7F04A474 4600A03C */ c.lt.s $f20, $f0 -/* 07EFA8 7F04A478 00000000 */ nop -/* 07EFAC 7F04A47C 45000017 */ bc1f .L7F04A4DC -/* 07EFB0 7F04A480 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) -/* 07EFB4 7F04A484 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 07EFB8 7F04A488 C4520000 */ lwc1 $f18, ($v0) -/* 07EFBC 7F04A48C C60A0014 */ lwc1 $f10, 0x14($s0) -/* 07EFC0 7F04A490 46120102 */ mul.s $f4, $f0, $f18 -/* 07EFC4 7F04A494 46045200 */ add.s $f8, $f10, $f4 -/* 07EFC8 7F04A498 E6080014 */ swc1 $f8, 0x14($s0) -/* 07EFCC 7F04A49C C6020014 */ lwc1 $f2, 0x14($s0) -/* 07EFD0 7F04A4A0 4618103C */ c.lt.s $f2, $f24 -/* 07EFD4 7F04A4A4 00000000 */ nop -/* 07EFD8 7F04A4A8 45020009 */ bc1fl .L7F04A4D0 -/* 07EFDC 7F04A4AC C6080020 */ lwc1 $f8, 0x20($s0) -/* 07EFE0 7F04A4B0 C600001C */ lwc1 $f0, 0x1c($s0) -/* 07EFE4 7F04A4B4 C6060020 */ lwc1 $f6, 0x20($s0) -/* 07EFE8 7F04A4B8 46003481 */ sub.s $f18, $f6, $f0 -/* 07EFEC 7F04A4BC 46029282 */ mul.s $f10, $f18, $f2 -/* 07EFF0 7F04A4C0 460A0100 */ add.s $f4, $f0, $f10 -/* 07EFF4 7F04A4C4 10000005 */ b .L7F04A4DC -/* 07EFF8 7F04A4C8 E6040010 */ swc1 $f4, 0x10($s0) -/* 07EFFC 7F04A4CC C6080020 */ lwc1 $f8, 0x20($s0) -.L7F04A4D0: -/* 07F000 7F04A4D0 E6180014 */ swc1 $f24, 0x14($s0) -/* 07F004 7F04A4D4 E6140018 */ swc1 $f20, 0x18($s0) -/* 07F008 7F04A4D8 E6080010 */ swc1 $f8, 0x10($s0) -.L7F04A4DC: -/* 07F00C 7F04A4DC C600002C */ lwc1 $f0, 0x2c($s0) -/* 07F010 7F04A4E0 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) -/* 07F014 7F04A4E4 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 -/* 07F018 7F04A4E8 4600A03C */ c.lt.s $f20, $f0 -/* 07F01C 7F04A4EC 00000000 */ nop -/* 07F020 7F04A4F0 45020017 */ bc1fl .L7F04A550 -/* 07F024 7F04A4F4 C6000040 */ lwc1 $f0, 0x40($s0) -/* 07F028 7F04A4F8 C4520000 */ lwc1 $f18, ($v0) -/* 07F02C 7F04A4FC C6060028 */ lwc1 $f6, 0x28($s0) -/* 07F030 7F04A500 46120282 */ mul.s $f10, $f0, $f18 -/* 07F034 7F04A504 460A3100 */ add.s $f4, $f6, $f10 -/* 07F038 7F04A508 E6040028 */ swc1 $f4, 0x28($s0) -/* 07F03C 7F04A50C C6020028 */ lwc1 $f2, 0x28($s0) -/* 07F040 7F04A510 4618103C */ c.lt.s $f2, $f24 -/* 07F044 7F04A514 00000000 */ nop -/* 07F048 7F04A518 45020009 */ bc1fl .L7F04A540 -/* 07F04C 7F04A51C C6040034 */ lwc1 $f4, 0x34($s0) -/* 07F050 7F04A520 C6000030 */ lwc1 $f0, 0x30($s0) -/* 07F054 7F04A524 C6080034 */ lwc1 $f8, 0x34($s0) -/* 07F058 7F04A528 46004481 */ sub.s $f18, $f8, $f0 -/* 07F05C 7F04A52C 46029182 */ mul.s $f6, $f18, $f2 -/* 07F060 7F04A530 46060280 */ add.s $f10, $f0, $f6 -/* 07F064 7F04A534 10000005 */ b .L7F04A54C -/* 07F068 7F04A538 E60A0024 */ swc1 $f10, 0x24($s0) -/* 07F06C 7F04A53C C6040034 */ lwc1 $f4, 0x34($s0) -.L7F04A540: -/* 07F070 7F04A540 E6180028 */ swc1 $f24, 0x28($s0) -/* 07F074 7F04A544 E614002C */ swc1 $f20, 0x2c($s0) -/* 07F078 7F04A548 E6040024 */ swc1 $f4, 0x24($s0) -.L7F04A54C: -/* 07F07C 7F04A54C C6000040 */ lwc1 $f0, 0x40($s0) -.L7F04A550: -/* 07F080 7F04A550 4600A03C */ c.lt.s $f20, $f0 -/* 07F084 7F04A554 00000000 */ nop -/* 07F088 7F04A558 45020017 */ bc1fl .L7F04A5B8 -/* 07F08C 7F04A55C C6000054 */ lwc1 $f0, 0x54($s0) -/* 07F090 7F04A560 C4520000 */ lwc1 $f18, ($v0) -/* 07F094 7F04A564 C608003C */ lwc1 $f8, 0x3c($s0) -/* 07F098 7F04A568 46120182 */ mul.s $f6, $f0, $f18 -/* 07F09C 7F04A56C 46064280 */ add.s $f10, $f8, $f6 -/* 07F0A0 7F04A570 E60A003C */ swc1 $f10, 0x3c($s0) -/* 07F0A4 7F04A574 C602003C */ lwc1 $f2, 0x3c($s0) -/* 07F0A8 7F04A578 4618103C */ c.lt.s $f2, $f24 -/* 07F0AC 7F04A57C 00000000 */ nop -/* 07F0B0 7F04A580 45020009 */ bc1fl .L7F04A5A8 -/* 07F0B4 7F04A584 C60A0048 */ lwc1 $f10, 0x48($s0) -/* 07F0B8 7F04A588 C6000044 */ lwc1 $f0, 0x44($s0) -/* 07F0BC 7F04A58C C6040048 */ lwc1 $f4, 0x48($s0) -/* 07F0C0 7F04A590 46002481 */ sub.s $f18, $f4, $f0 -/* 07F0C4 7F04A594 46029202 */ mul.s $f8, $f18, $f2 -/* 07F0C8 7F04A598 46080180 */ add.s $f6, $f0, $f8 -/* 07F0CC 7F04A59C 10000005 */ b .L7F04A5B4 -/* 07F0D0 7F04A5A0 E6060038 */ swc1 $f6, 0x38($s0) -/* 07F0D4 7F04A5A4 C60A0048 */ lwc1 $f10, 0x48($s0) -.L7F04A5A8: -/* 07F0D8 7F04A5A8 E618003C */ swc1 $f24, 0x3c($s0) -/* 07F0DC 7F04A5AC E6140040 */ swc1 $f20, 0x40($s0) -/* 07F0E0 7F04A5B0 E60A0038 */ swc1 $f10, 0x38($s0) -.L7F04A5B4: -/* 07F0E4 7F04A5B4 C6000054 */ lwc1 $f0, 0x54($s0) -.L7F04A5B8: -/* 07F0E8 7F04A5B8 4600A03C */ c.lt.s $f20, $f0 -/* 07F0EC 7F04A5BC 00000000 */ nop -/* 07F0F0 7F04A5C0 45020017 */ bc1fl .L7F04A620 -/* 07F0F4 7F04A5C4 C6020070 */ lwc1 $f2, 0x70($s0) -/* 07F0F8 7F04A5C8 C4520000 */ lwc1 $f18, ($v0) -/* 07F0FC 7F04A5CC C6040050 */ lwc1 $f4, 0x50($s0) -/* 07F100 7F04A5D0 46120202 */ mul.s $f8, $f0, $f18 -/* 07F104 7F04A5D4 46082180 */ add.s $f6, $f4, $f8 -/* 07F108 7F04A5D8 E6060050 */ swc1 $f6, 0x50($s0) -/* 07F10C 7F04A5DC C6020050 */ lwc1 $f2, 0x50($s0) -/* 07F110 7F04A5E0 4618103C */ c.lt.s $f2, $f24 -/* 07F114 7F04A5E4 00000000 */ nop -/* 07F118 7F04A5E8 45020009 */ bc1fl .L7F04A610 -/* 07F11C 7F04A5EC C606005C */ lwc1 $f6, 0x5c($s0) -/* 07F120 7F04A5F0 C6000058 */ lwc1 $f0, 0x58($s0) -/* 07F124 7F04A5F4 C60A005C */ lwc1 $f10, 0x5c($s0) -/* 07F128 7F04A5F8 46005481 */ sub.s $f18, $f10, $f0 -/* 07F12C 7F04A5FC 46029102 */ mul.s $f4, $f18, $f2 -/* 07F130 7F04A600 46040200 */ add.s $f8, $f0, $f4 -/* 07F134 7F04A604 10000005 */ b .L7F04A61C -/* 07F138 7F04A608 E608004C */ swc1 $f8, 0x4c($s0) -/* 07F13C 7F04A60C C606005C */ lwc1 $f6, 0x5c($s0) -.L7F04A610: -/* 07F140 7F04A610 E6180050 */ swc1 $f24, 0x50($s0) -/* 07F144 7F04A614 E6140054 */ swc1 $f20, 0x54($s0) -/* 07F148 7F04A618 E606004C */ swc1 $f6, 0x4c($s0) -.L7F04A61C: -/* 07F14C 7F04A61C C6020070 */ lwc1 $f2, 0x70($s0) -.L7F04A620: -/* 07F150 7F04A620 4602A03C */ c.lt.s $f20, $f2 -/* 07F154 7F04A624 00000000 */ nop -/* 07F158 7F04A628 4502003F */ bc1fl .L7F04A728 -/* 07F15C 7F04A62C 8FAA00A0 */ lw $t2, 0xa0($sp) -/* 07F160 7F04A630 C4520000 */ lwc1 $f18, ($v0) -/* 07F164 7F04A634 C60A006C */ lwc1 $f10, 0x6c($s0) -/* 07F168 7F04A638 46121102 */ mul.s $f4, $f2, $f18 -/* 07F16C 7F04A63C 46045200 */ add.s $f8, $f10, $f4 -/* 07F170 7F04A640 E608006C */ swc1 $f8, 0x6c($s0) -/* 07F174 7F04A644 C600006C */ lwc1 $f0, 0x6c($s0) -/* 07F178 7F04A648 4618003C */ c.lt.s $f0, $f24 -/* 07F17C 7F04A64C 00000000 */ nop -/* 07F180 7F04A650 4502002B */ bc1fl .L7F04A700 -/* 07F184 7F04A654 920F0062 */ lbu $t7, 0x62($s0) -/* 07F188 7F04A658 92020061 */ lbu $v0, 0x61($s0) -/* 07F18C 7F04A65C 920F0062 */ lbu $t7, 0x62($s0) -/* 07F190 7F04A660 92030064 */ lbu $v1, 0x64($s0) -/* 07F194 7F04A664 920A0065 */ lbu $t2, 0x65($s0) -/* 07F198 7F04A668 01E2C023 */ subu $t8, $t7, $v0 -/* 07F19C 7F04A66C 44983000 */ mtc1 $t8, $f6 -/* 07F1A0 7F04A670 01435823 */ subu $t3, $t2, $v1 -/* 07F1A4 7F04A674 448B4000 */ mtc1 $t3, $f8 -/* 07F1A8 7F04A678 468034A0 */ cvt.s.w $f18, $f6 -/* 07F1AC 7F04A67C 920F0068 */ lbu $t7, 0x68($s0) -/* 07F1B0 7F04A680 92040067 */ lbu $a0, 0x67($s0) -/* 07F1B4 7F04A684 920A006B */ lbu $t2, 0x6b($s0) -/* 07F1B8 7F04A688 9205006A */ lbu $a1, 0x6a($s0) -/* 07F1BC 7F04A68C 468041A0 */ cvt.s.w $f6, $f8 -/* 07F1C0 7F04A690 46009282 */ mul.s $f10, $f18, $f0 -/* 07F1C4 7F04A694 01E4C023 */ subu $t8, $t7, $a0 -/* 07F1C8 7F04A698 01455823 */ subu $t3, $t2, $a1 -/* 07F1CC 7F04A69C 46003482 */ mul.s $f18, $f6, $f0 -/* 07F1D0 7F04A6A0 4600510D */ trunc.w.s $f4, $f10 -/* 07F1D4 7F04A6A4 4600928D */ trunc.w.s $f10, $f18 -/* 07F1D8 7F04A6A8 44082000 */ mfc1 $t0, $f4 -/* 07F1DC 7F04A6AC 44982000 */ mtc1 $t8, $f4 -/* 07F1E0 7F04A6B0 440D5000 */ mfc1 $t5, $f10 -/* 07F1E4 7F04A6B4 46802220 */ cvt.s.w $f8, $f4 -/* 07F1E8 7F04A6B8 448B5000 */ mtc1 $t3, $f10 -/* 07F1EC 7F04A6BC 00484821 */ addu $t1, $v0, $t0 -/* 07F1F0 7F04A6C0 006D7021 */ addu $t6, $v1, $t5 -/* 07F1F4 7F04A6C4 A2090060 */ sb $t1, 0x60($s0) -/* 07F1F8 7F04A6C8 46805120 */ cvt.s.w $f4, $f10 -/* 07F1FC 7F04A6CC 46004182 */ mul.s $f6, $f8, $f0 -/* 07F200 7F04A6D0 A20E0063 */ sb $t6, 0x63($s0) -/* 07F204 7F04A6D4 46002202 */ mul.s $f8, $f4, $f0 -/* 07F208 7F04A6D8 4600348D */ trunc.w.s $f18, $f6 -/* 07F20C 7F04A6DC 4600418D */ trunc.w.s $f6, $f8 -/* 07F210 7F04A6E0 44089000 */ mfc1 $t0, $f18 -/* 07F214 7F04A6E4 440D3000 */ mfc1 $t5, $f6 -/* 07F218 7F04A6E8 00884821 */ addu $t1, $a0, $t0 -/* 07F21C 7F04A6EC A2090066 */ sb $t1, 0x66($s0) -/* 07F220 7F04A6F0 00AD7021 */ addu $t6, $a1, $t5 -/* 07F224 7F04A6F4 1000000B */ b .L7F04A724 -/* 07F228 7F04A6F8 A20E0069 */ sb $t6, 0x69($s0) -/* 07F22C 7F04A6FC 920F0062 */ lbu $t7, 0x62($s0) -.L7F04A700: -/* 07F230 7F04A700 92180065 */ lbu $t8, 0x65($s0) -/* 07F234 7F04A704 92190068 */ lbu $t9, 0x68($s0) -/* 07F238 7F04A708 9208006B */ lbu $t0, 0x6b($s0) -/* 07F23C 7F04A70C E618006C */ swc1 $f24, 0x6c($s0) -/* 07F240 7F04A710 E6140070 */ swc1 $f20, 0x70($s0) -/* 07F244 7F04A714 A20F0060 */ sb $t7, 0x60($s0) -/* 07F248 7F04A718 A2180063 */ sb $t8, 0x63($s0) -/* 07F24C 7F04A71C A2190066 */ sb $t9, 0x66($s0) -/* 07F250 7F04A720 A2080069 */ sb $t0, 0x69($s0) -.L7F04A724: -/* 07F254 7F04A724 8FAA00A0 */ lw $t2, 0xa0($sp) -.L7F04A728: -/* 07F258 7F04A728 8FA300A4 */ lw $v1, 0xa4($sp) -/* 07F25C 7F04A72C 8FA900BC */ lw $t1, 0xbc($sp) -/* 07F260 7F04A730 AD520000 */ sw $s2, ($t2) -/* 07F264 7F04A734 3C0F8009 */ lui $t7, %hi(monitorimages) -/* 07F268 7F04A738 AD490004 */ sw $t1, 4($t2) -/* 07F26C 7F04A73C 8C6B0008 */ lw $t3, 8($v1) -/* 07F270 7F04A740 8D610000 */ lw $at, ($t3) -/* 07F274 7F04A744 AE410000 */ sw $at, ($s2) -/* 07F278 7F04A748 8D6D0004 */ lw $t5, 4($t3) -/* 07F27C 7F04A74C AE4D0004 */ sw $t5, 4($s2) -/* 07F280 7F04A750 8D610008 */ lw $at, 8($t3) -/* 07F284 7F04A754 AE410008 */ sw $at, 8($s2) -/* 07F288 7F04A758 8D6D000C */ lw $t5, 0xc($t3) -/* 07F28C 7F04A75C AE4D000C */ sw $t5, 0xc($s2) -/* 07F290 7F04A760 8C6E0008 */ lw $t6, 8($v1) -/* 07F294 7F04A764 8DC10010 */ lw $at, 0x10($t6) -/* 07F298 7F04A768 AE410010 */ sw $at, 0x10($s2) -/* 07F29C 7F04A76C 8DD80014 */ lw $t8, 0x14($t6) -/* 07F2A0 7F04A770 AE580014 */ sw $t8, 0x14($s2) -/* 07F2A4 7F04A774 8DC10018 */ lw $at, 0x18($t6) -/* 07F2A8 7F04A778 AE410018 */ sw $at, 0x18($s2) -/* 07F2AC 7F04A77C 8DD8001C */ lw $t8, 0x1c($t6) -/* 07F2B0 7F04A780 AE58001C */ sw $t8, 0x1c($s2) -/* 07F2B4 7F04A784 8C790008 */ lw $t9, 8($v1) -/* 07F2B8 7F04A788 8F210020 */ lw $at, 0x20($t9) -/* 07F2BC 7F04A78C AE410020 */ sw $at, 0x20($s2) -/* 07F2C0 7F04A790 8F290024 */ lw $t1, 0x24($t9) -/* 07F2C4 7F04A794 AE490024 */ sw $t1, 0x24($s2) -/* 07F2C8 7F04A798 8F210028 */ lw $at, 0x28($t9) -/* 07F2CC 7F04A79C AE410028 */ sw $at, 0x28($s2) -/* 07F2D0 7F04A7A0 8F29002C */ lw $t1, 0x2c($t9) -/* 07F2D4 7F04A7A4 AE49002C */ sw $t1, 0x2c($s2) -/* 07F2D8 7F04A7A8 8C6A0008 */ lw $t2, 8($v1) -/* 07F2DC 7F04A7AC 8D410030 */ lw $at, 0x30($t2) -/* 07F2E0 7F04A7B0 AE410030 */ sw $at, 0x30($s2) -/* 07F2E4 7F04A7B4 8D4B0034 */ lw $t3, 0x34($t2) -/* 07F2E8 7F04A7B8 AE4B0034 */ sw $t3, 0x34($s2) -/* 07F2EC 7F04A7BC 8D410038 */ lw $at, 0x38($t2) -/* 07F2F0 7F04A7C0 AE410038 */ sw $at, 0x38($s2) -/* 07F2F4 7F04A7C4 8D4B003C */ lw $t3, 0x3c($t2) -/* 07F2F8 7F04A7C8 AE4B003C */ sw $t3, 0x3c($s2) -/* 07F2FC 7F04A7CC 8E020008 */ lw $v0, 8($s0) -/* 07F300 7F04A7D0 2C410064 */ sltiu $at, $v0, 0x64 -/* 07F304 7F04A7D4 10200007 */ beqz $at, .L7F04A7F4 -/* 07F308 7F04A7D8 00408825 */ move $s1, $v0 -/* 07F30C 7F04A7DC 00026880 */ sll $t5, $v0, 2 -/* 07F310 7F04A7E0 8DEFD120 */ lw $t7, %lo(monitorimages)($t7) -/* 07F314 7F04A7E4 01A26823 */ subu $t5, $t5, $v0 -/* 07F318 7F04A7E8 000D6880 */ sll $t5, $t5, 2 -/* 07F31C 7F04A7EC 10000001 */ b .L7F04A7F4 -/* 07F320 7F04A7F0 01AF8821 */ addu $s1, $t5, $t7 -.L7F04A7F4: -/* 07F324 7F04A7F4 122000A9 */ beqz $s1, .L7F04AA9C -/* 07F328 7F04A7F8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 07F32C 7F04A7FC 44810000 */ mtc1 $at, $f0 -/* 07F330 7F04A800 C6120010 */ lwc1 $f18, 0x10($s0) -/* 07F334 7F04A804 C60A0024 */ lwc1 $f10, 0x24($s0) -/* 07F338 7F04A808 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07F33C 7F04A80C 46009582 */ mul.s $f22, $f18, $f0 -/* 07F340 7F04A810 460CA032 */ c.eq.s $f20, $f12 -/* 07F344 7F04A814 46005602 */ mul.s $f24, $f10, $f0 -/* 07F348 7F04A818 4600B386 */ mov.s $f14, $f22 -/* 07F34C 7F04A81C 45010015 */ bc1t .L7F04A874 -/* 07F350 7F04A820 4600C406 */ mov.s $f16, $f24 -/* 07F354 7F04A824 E7AE0054 */ swc1 $f14, 0x54($sp) -/* 07F358 7F04A828 0FC15FA8 */ jal cosf -/* 07F35C 7F04A82C E7B00050 */ swc1 $f16, 0x50($sp) -/* 07F360 7F04A830 3C018005 */ lui $at, %hi(D_80052CB0) -/* 07F364 7F04A834 C43A2CB0 */ lwc1 $f26, %lo(D_80052CB0)($at) -/* 07F368 7F04A838 C60C000C */ lwc1 $f12, 0xc($s0) -/* 07F36C 7F04A83C 461A0502 */ mul.s $f20, $f0, $f26 -/* 07F370 7F04A840 0FC15FAB */ jal sinf -/* 07F374 7F04A844 00000000 */ nop -/* 07F378 7F04A848 4614B582 */ mul.s $f22, $f22, $f20 -/* 07F37C 7F04A84C C7AE0054 */ lwc1 $f14, 0x54($sp) -/* 07F380 7F04A850 C7B00050 */ lwc1 $f16, 0x50($sp) -/* 07F384 7F04A854 461A0082 */ mul.s $f2, $f0, $f26 -/* 07F388 7F04A858 00000000 */ nop -/* 07F38C 7F04A85C 4602C602 */ mul.s $f24, $f24, $f2 -/* 07F390 7F04A860 00000000 */ nop -/* 07F394 7F04A864 46027382 */ mul.s $f14, $f14, $f2 -/* 07F398 7F04A868 00000000 */ nop -/* 07F39C 7F04A86C 46148402 */ mul.s $f16, $f16, $f20 -/* 07F3A0 7F04A870 00000000 */ nop -.L7F04A874: -/* 07F3A4 7F04A874 922E0004 */ lbu $t6, 4($s1) -/* 07F3A8 7F04A878 3C014200 */ li $at, 0x42000000 # 32.000000 -/* 07F3AC 7F04A87C 44810000 */ mtc1 $at, $f0 -/* 07F3B0 7F04A880 448E4000 */ mtc1 $t6, $f8 -/* 07F3B4 7F04A884 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F3B8 7F04A888 05C10004 */ bgez $t6, .L7F04A89C -/* 07F3BC 7F04A88C 468041A0 */ cvt.s.w $f6, $f8 -/* 07F3C0 7F04A890 44819000 */ mtc1 $at, $f18 -/* 07F3C4 7F04A894 00000000 */ nop -/* 07F3C8 7F04A898 46123180 */ add.s $f6, $f6, $f18 -.L7F04A89C: -/* 07F3CC 7F04A89C C60A0038 */ lwc1 $f10, 0x38($s0) -/* 07F3D0 7F04A8A0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F3D4 7F04A8A4 46165100 */ add.s $f4, $f10, $f22 -/* 07F3D8 7F04A8A8 46043202 */ mul.s $f8, $f6, $f4 -/* 07F3DC 7F04A8AC 00000000 */ nop -/* 07F3E0 7F04A8B0 46004482 */ mul.s $f18, $f8, $f0 -/* 07F3E4 7F04A8B4 4600928D */ trunc.w.s $f10, $f18 -/* 07F3E8 7F04A8B8 44085000 */ mfc1 $t0, $f10 -/* 07F3EC 7F04A8BC 00000000 */ nop -/* 07F3F0 7F04A8C0 A6480008 */ sh $t0, 8($s2) -/* 07F3F4 7F04A8C4 92390005 */ lbu $t9, 5($s1) -/* 07F3F8 7F04A8C8 44993000 */ mtc1 $t9, $f6 -/* 07F3FC 7F04A8CC 07210004 */ bgez $t9, .L7F04A8E0 -/* 07F400 7F04A8D0 46803120 */ cvt.s.w $f4, $f6 -/* 07F404 7F04A8D4 44814000 */ mtc1 $at, $f8 -/* 07F408 7F04A8D8 00000000 */ nop -/* 07F40C 7F04A8DC 46082100 */ add.s $f4, $f4, $f8 -.L7F04A8E0: -/* 07F410 7F04A8E0 C612004C */ lwc1 $f18, 0x4c($s0) -/* 07F414 7F04A8E4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F418 7F04A8E8 46189280 */ add.s $f10, $f18, $f24 -/* 07F41C 7F04A8EC 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F420 7F04A8F0 00000000 */ nop -/* 07F424 7F04A8F4 46003202 */ mul.s $f8, $f6, $f0 -/* 07F428 7F04A8F8 4600448D */ trunc.w.s $f18, $f8 -/* 07F42C 7F04A8FC 440C9000 */ mfc1 $t4, $f18 -/* 07F430 7F04A900 00000000 */ nop -/* 07F434 7F04A904 A64C000A */ sh $t4, 0xa($s2) -/* 07F438 7F04A908 922A0004 */ lbu $t2, 4($s1) -/* 07F43C 7F04A90C 448A2000 */ mtc1 $t2, $f4 -/* 07F440 7F04A910 05410004 */ bgez $t2, .L7F04A924 -/* 07F444 7F04A914 468022A0 */ cvt.s.w $f10, $f4 -/* 07F448 7F04A918 44813000 */ mtc1 $at, $f6 -/* 07F44C 7F04A91C 00000000 */ nop -/* 07F450 7F04A920 46065280 */ add.s $f10, $f10, $f6 -.L7F04A924: -/* 07F454 7F04A924 C6080038 */ lwc1 $f8, 0x38($s0) -/* 07F458 7F04A928 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F45C 7F04A92C 460E4481 */ sub.s $f18, $f8, $f14 -/* 07F460 7F04A930 46125102 */ mul.s $f4, $f10, $f18 -/* 07F464 7F04A934 00000000 */ nop -/* 07F468 7F04A938 46002182 */ mul.s $f6, $f4, $f0 -/* 07F46C 7F04A93C 4600320D */ trunc.w.s $f8, $f6 -/* 07F470 7F04A940 440D4000 */ mfc1 $t5, $f8 -/* 07F474 7F04A944 00000000 */ nop -/* 07F478 7F04A948 A64D0018 */ sh $t5, 0x18($s2) -/* 07F47C 7F04A94C 922F0005 */ lbu $t7, 5($s1) -/* 07F480 7F04A950 448F5000 */ mtc1 $t7, $f10 -/* 07F484 7F04A954 05E10004 */ bgez $t7, .L7F04A968 -/* 07F488 7F04A958 468054A0 */ cvt.s.w $f18, $f10 -/* 07F48C 7F04A95C 44812000 */ mtc1 $at, $f4 -/* 07F490 7F04A960 00000000 */ nop -/* 07F494 7F04A964 46049480 */ add.s $f18, $f18, $f4 -.L7F04A968: -/* 07F498 7F04A968 C606004C */ lwc1 $f6, 0x4c($s0) -/* 07F49C 7F04A96C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F4A0 7F04A970 46103200 */ add.s $f8, $f6, $f16 -/* 07F4A4 7F04A974 46089282 */ mul.s $f10, $f18, $f8 -/* 07F4A8 7F04A978 00000000 */ nop -/* 07F4AC 7F04A97C 46005102 */ mul.s $f4, $f10, $f0 -/* 07F4B0 7F04A980 4600218D */ trunc.w.s $f6, $f4 -/* 07F4B4 7F04A984 44183000 */ mfc1 $t8, $f6 -/* 07F4B8 7F04A988 00000000 */ nop -/* 07F4BC 7F04A98C A658001A */ sh $t8, 0x1a($s2) -/* 07F4C0 7F04A990 92280004 */ lbu $t0, 4($s1) -/* 07F4C4 7F04A994 44889000 */ mtc1 $t0, $f18 -/* 07F4C8 7F04A998 05010004 */ bgez $t0, .L7F04A9AC -/* 07F4CC 7F04A99C 46809220 */ cvt.s.w $f8, $f18 -/* 07F4D0 7F04A9A0 44815000 */ mtc1 $at, $f10 -/* 07F4D4 7F04A9A4 00000000 */ nop -/* 07F4D8 7F04A9A8 460A4200 */ add.s $f8, $f8, $f10 -.L7F04A9AC: -/* 07F4DC 7F04A9AC C6040038 */ lwc1 $f4, 0x38($s0) -/* 07F4E0 7F04A9B0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F4E4 7F04A9B4 46162181 */ sub.s $f6, $f4, $f22 -/* 07F4E8 7F04A9B8 46064482 */ mul.s $f18, $f8, $f6 -/* 07F4EC 7F04A9BC 00000000 */ nop -/* 07F4F0 7F04A9C0 46009282 */ mul.s $f10, $f18, $f0 -/* 07F4F4 7F04A9C4 4600510D */ trunc.w.s $f4, $f10 -/* 07F4F8 7F04A9C8 44092000 */ mfc1 $t1, $f4 -/* 07F4FC 7F04A9CC 00000000 */ nop -/* 07F500 7F04A9D0 A6490028 */ sh $t1, 0x28($s2) -/* 07F504 7F04A9D4 922C0005 */ lbu $t4, 5($s1) -/* 07F508 7F04A9D8 448C4000 */ mtc1 $t4, $f8 -/* 07F50C 7F04A9DC 05810004 */ bgez $t4, .L7F04A9F0 -/* 07F510 7F04A9E0 468041A0 */ cvt.s.w $f6, $f8 -/* 07F514 7F04A9E4 44819000 */ mtc1 $at, $f18 -/* 07F518 7F04A9E8 00000000 */ nop -/* 07F51C 7F04A9EC 46123180 */ add.s $f6, $f6, $f18 -.L7F04A9F0: -/* 07F520 7F04A9F0 C60A004C */ lwc1 $f10, 0x4c($s0) -/* 07F524 7F04A9F4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F528 7F04A9F8 46185101 */ sub.s $f4, $f10, $f24 -/* 07F52C 7F04A9FC 46043202 */ mul.s $f8, $f6, $f4 -/* 07F530 7F04AA00 00000000 */ nop -/* 07F534 7F04AA04 46004482 */ mul.s $f18, $f8, $f0 -/* 07F538 7F04AA08 4600928D */ trunc.w.s $f10, $f18 -/* 07F53C 7F04AA0C 440B5000 */ mfc1 $t3, $f10 -/* 07F540 7F04AA10 00000000 */ nop -/* 07F544 7F04AA14 A64B002A */ sh $t3, 0x2a($s2) -/* 07F548 7F04AA18 922D0004 */ lbu $t5, 4($s1) -/* 07F54C 7F04AA1C 448D3000 */ mtc1 $t5, $f6 -/* 07F550 7F04AA20 05A10004 */ bgez $t5, .L7F04AA34 -/* 07F554 7F04AA24 46803120 */ cvt.s.w $f4, $f6 -/* 07F558 7F04AA28 44814000 */ mtc1 $at, $f8 -/* 07F55C 7F04AA2C 00000000 */ nop -/* 07F560 7F04AA30 46082100 */ add.s $f4, $f4, $f8 -.L7F04AA34: -/* 07F564 7F04AA34 C6120038 */ lwc1 $f18, 0x38($s0) -/* 07F568 7F04AA38 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 07F56C 7F04AA3C 460E9280 */ add.s $f10, $f18, $f14 -/* 07F570 7F04AA40 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F574 7F04AA44 00000000 */ nop -/* 07F578 7F04AA48 46003202 */ mul.s $f8, $f6, $f0 -/* 07F57C 7F04AA4C 4600448D */ trunc.w.s $f18, $f8 -/* 07F580 7F04AA50 440E9000 */ mfc1 $t6, $f18 -/* 07F584 7F04AA54 00000000 */ nop -/* 07F588 7F04AA58 A64E0038 */ sh $t6, 0x38($s2) -/* 07F58C 7F04AA5C 92380005 */ lbu $t8, 5($s1) -/* 07F590 7F04AA60 44982000 */ mtc1 $t8, $f4 -/* 07F594 7F04AA64 07010004 */ bgez $t8, .L7F04AA78 -/* 07F598 7F04AA68 468022A0 */ cvt.s.w $f10, $f4 -/* 07F59C 7F04AA6C 44813000 */ mtc1 $at, $f6 -/* 07F5A0 7F04AA70 00000000 */ nop -/* 07F5A4 7F04AA74 46065280 */ add.s $f10, $f10, $f6 -.L7F04AA78: -/* 07F5A8 7F04AA78 C608004C */ lwc1 $f8, 0x4c($s0) -/* 07F5AC 7F04AA7C 46104481 */ sub.s $f18, $f8, $f16 -/* 07F5B0 7F04AA80 46125102 */ mul.s $f4, $f10, $f18 -/* 07F5B4 7F04AA84 00000000 */ nop -/* 07F5B8 7F04AA88 46002182 */ mul.s $f6, $f4, $f0 -/* 07F5BC 7F04AA8C 4600320D */ trunc.w.s $f8, $f6 -/* 07F5C0 7F04AA90 44194000 */ mfc1 $t9, $f8 -/* 07F5C4 7F04AA94 00000000 */ nop -/* 07F5C8 7F04AA98 A659003A */ sh $t9, 0x3a($s2) -.L7F04AA9C: -/* 07F5CC 7F04AA9C 92020060 */ lbu $v0, 0x60($s0) -/* 07F5D0 7F04AAA0 240C0002 */ li $t4, 2 -/* 07F5D4 7F04AAA4 3C0DB700 */ lui $t5, 0xb700 -/* 07F5D8 7F04AAA8 A242003C */ sb $v0, 0x3c($s2) -/* 07F5DC 7F04AAAC A242002C */ sb $v0, 0x2c($s2) -/* 07F5E0 7F04AAB0 A242001C */ sb $v0, 0x1c($s2) -/* 07F5E4 7F04AAB4 A242000C */ sb $v0, 0xc($s2) -/* 07F5E8 7F04AAB8 92020063 */ lbu $v0, 0x63($s0) -/* 07F5EC 7F04AABC 240F2000 */ li $t7, 8192 -/* 07F5F0 7F04AAC0 27A400BC */ addiu $a0, $sp, 0xbc -/* 07F5F4 7F04AAC4 A242003D */ sb $v0, 0x3d($s2) -/* 07F5F8 7F04AAC8 A242002D */ sb $v0, 0x2d($s2) -/* 07F5FC 7F04AACC A242001D */ sb $v0, 0x1d($s2) -/* 07F600 7F04AAD0 A242000D */ sb $v0, 0xd($s2) -/* 07F604 7F04AAD4 92030066 */ lbu $v1, 0x66($s0) -/* 07F608 7F04AAD8 A243003E */ sb $v1, 0x3e($s2) -/* 07F60C 7F04AADC A243002E */ sb $v1, 0x2e($s2) -/* 07F610 7F04AAE0 A243001E */ sb $v1, 0x1e($s2) -/* 07F614 7F04AAE4 A243000E */ sb $v1, 0xe($s2) -/* 07F618 7F04AAE8 92020069 */ lbu $v0, 0x69($s0) -/* 07F61C 7F04AAEC A242003F */ sb $v0, 0x3f($s2) -/* 07F620 7F04AAF0 A242002F */ sb $v0, 0x2f($s2) -/* 07F624 7F04AAF4 A242001F */ sb $v0, 0x1f($s2) -/* 07F628 7F04AAF8 A242000F */ sb $v0, 0xf($s2) -/* 07F62C 7F04AAFC 92090069 */ lbu $t1, 0x69($s0) -/* 07F630 7F04AB00 292100FF */ slti $at, $t1, 0xff -/* 07F634 7F04AB04 50200003 */ beql $at, $zero, .L7F04AB14 -/* 07F638 7F04AB08 8FAA00BC */ lw $t2, 0xbc($sp) -/* 07F63C 7F04AB0C AFAC00C4 */ sw $t4, 0xc4($sp) -/* 07F640 7F04AB10 8FAA00BC */ lw $t2, 0xbc($sp) -.L7F04AB14: -/* 07F644 7F04AB14 240E0002 */ li $t6, 2 -/* 07F648 7F04AB18 02202825 */ move $a1, $s1 -/* 07F64C 7F04AB1C 254B0008 */ addiu $t3, $t2, 8 -/* 07F650 7F04AB20 AFAB00BC */ sw $t3, 0xbc($sp) -/* 07F654 7F04AB24 AD4F0004 */ sw $t7, 4($t2) -/* 07F658 7F04AB28 AD4D0000 */ sw $t5, ($t2) -/* 07F65C 7F04AB2C AFAE0010 */ sw $t6, 0x10($sp) -/* 07F660 7F04AB30 8FA700C0 */ lw $a3, 0xc0($sp) -/* 07F664 7F04AB34 0FC1DB5A */ jal texSelect -/* 07F668 7F04AB38 8FA600C4 */ lw $a2, 0xc4($sp) -/* 07F66C 7F04AB3C 8FB000BC */ lw $s0, 0xbc($sp) -/* 07F670 7F04AB40 3C190102 */ lui $t9, (0x01020040 >> 16) # lui $t9, 0x102 -/* 07F674 7F04AB44 37390040 */ ori $t9, (0x01020040 & 0xFFFF) # ori $t9, $t9, 0x40 -/* 07F678 7F04AB48 26080008 */ addiu $t0, $s0, 8 -/* 07F67C 7F04AB4C AFA800BC */ sw $t0, 0xbc($sp) -/* 07F680 7F04AB50 AE190000 */ sw $t9, ($s0) -/* 07F684 7F04AB54 8FA900B0 */ lw $t1, 0xb0($sp) -/* 07F688 7F04AB58 0C003A2C */ jal osVirtualToPhysical -/* 07F68C 7F04AB5C 8D24000C */ lw $a0, 0xc($t1) -/* 07F690 7F04AB60 AE020004 */ sw $v0, 4($s0) -/* 07F694 7F04AB64 8FB100BC */ lw $s1, 0xbc($sp) -/* 07F698 7F04AB68 3C0BBC00 */ lui $t3, (0xBC001006 >> 16) # lui $t3, 0xbc00 -/* 07F69C 7F04AB6C 356B1006 */ ori $t3, (0xBC001006 & 0xFFFF) # ori $t3, $t3, 0x1006 -/* 07F6A0 7F04AB70 262A0008 */ addiu $t2, $s1, 8 -/* 07F6A4 7F04AB74 AFAA00BC */ sw $t2, 0xbc($sp) -/* 07F6A8 7F04AB78 02402025 */ move $a0, $s2 -/* 07F6AC 7F04AB7C 0C003A2C */ jal osVirtualToPhysical -/* 07F6B0 7F04AB80 AE2B0000 */ sw $t3, ($s1) -/* 07F6B4 7F04AB84 AE220004 */ sw $v0, 4($s1) -/* 07F6B8 7F04AB88 8FAD00BC */ lw $t5, 0xbc($sp) -/* 07F6BC 7F04AB8C 3C0E0430 */ lui $t6, (0x04300040 >> 16) # lui $t6, 0x430 -/* 07F6C0 7F04AB90 35CE0040 */ ori $t6, (0x04300040 & 0xFFFF) # ori $t6, $t6, 0x40 -/* 07F6C4 7F04AB94 25AF0008 */ addiu $t7, $t5, 8 -/* 07F6C8 7F04AB98 AFAF00BC */ sw $t7, 0xbc($sp) -/* 07F6CC 7F04AB9C 3C180400 */ lui $t8, 0x400 -/* 07F6D0 7F04ABA0 ADB80004 */ sw $t8, 4($t5) -/* 07F6D4 7F04ABA4 ADAE0000 */ sw $t6, ($t5) -/* 07F6D8 7F04ABA8 8FA800BC */ lw $t0, 0xbc($sp) -/* 07F6DC 7F04ABAC 3C09B100 */ lui $t1, (0xB1000032 >> 16) # lui $t1, 0xb100 -/* 07F6E0 7F04ABB0 35290032 */ ori $t1, (0xB1000032 & 0xFFFF) # ori $t1, $t1, 0x32 -/* 07F6E4 7F04ABB4 25190008 */ addiu $t9, $t0, 8 -/* 07F6E8 7F04ABB8 AFB900BC */ sw $t9, 0xbc($sp) -/* 07F6EC 7F04ABBC 240C2010 */ li $t4, 8208 -/* 07F6F0 7F04ABC0 AD0C0004 */ sw $t4, 4($t0) -/* 07F6F4 7F04ABC4 AD090000 */ sw $t1, ($t0) -/* 07F6F8 7F04ABC8 8FAA00BC */ lw $t2, 0xbc($sp) -/* 07F6FC 7F04ABCC 3C0DB800 */ lui $t5, 0xb800 -/* 07F700 7F04ABD0 3C0F0601 */ lui $t7, 0x601 -/* 07F704 7F04ABD4 254B0008 */ addiu $t3, $t2, 8 -/* 07F708 7F04ABD8 AFAB00BC */ sw $t3, 0xbc($sp) -/* 07F70C 7F04ABDC AD400004 */ sw $zero, 4($t2) -/* 07F710 7F04ABE0 AD4D0000 */ sw $t5, ($t2) -/* 07F714 7F04ABE4 8FA600A8 */ lw $a2, 0xa8($sp) -/* 07F718 7F04ABE8 ACCF0000 */ sw $t7, ($a2) -/* 07F71C 7F04ABEC 8FAE00BC */ lw $t6, 0xbc($sp) -/* 07F720 7F04ABF0 ACCE0004 */ sw $t6, 4($a2) -.L7F04ABF4: -/* 07F724 7F04ABF4 8FBF004C */ lw $ra, 0x4c($sp) -.L7F04ABF8: -/* 07F728 7F04ABF8 8FA200BC */ lw $v0, 0xbc($sp) -/* 07F72C 7F04ABFC D7B40020 */ ldc1 $f20, 0x20($sp) -/* 07F730 7F04AC00 D7B60028 */ ldc1 $f22, 0x28($sp) -/* 07F734 7F04AC04 D7B80030 */ ldc1 $f24, 0x30($sp) -/* 07F738 7F04AC08 D7BA0038 */ ldc1 $f26, 0x38($sp) -/* 07F73C 7F04AC0C 8FB00040 */ lw $s0, 0x40($sp) -/* 07F740 7F04AC10 8FB10044 */ lw $s1, 0x44($sp) -/* 07F744 7F04AC14 8FB20048 */ lw $s2, 0x48($sp) -/* 07F748 7F04AC18 03E00008 */ jr $ra -/* 07F74C 7F04AC1C 27BD00B0 */ addiu $sp, $sp, 0xb0 -) -#endif - -#endif - - - - -#ifdef NONMATCHING -void sub_GAME_7F04AC20(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F04AC20 -/* 07F750 7F04AC20 27BDFF88 */ addiu $sp, $sp, -0x78 -/* 07F754 7F04AC24 AFBF0024 */ sw $ra, 0x24($sp) -/* 07F758 7F04AC28 AFB00020 */ sw $s0, 0x20($sp) -/* 07F75C 7F04AC2C AFA40078 */ sw $a0, 0x78($sp) -/* 07F760 7F04AC30 AFA60080 */ sw $a2, 0x80($sp) -/* 07F764 7F04AC34 908F0001 */ lbu $t7, 1($a0) -/* 07F768 7F04AC38 00A08025 */ move $s0, $a1 -/* 07F76C 7F04AC3C 31F80002 */ andi $t8, $t7, 2 -/* 07F770 7F04AC40 5300013F */ beql $t8, $zero, .L7F04B140 -/* 07F774 7F04AC44 8FBF0024 */ lw $ra, 0x24($sp) -/* 07F778 7F04AC48 8C990004 */ lw $t9, 4($a0) -/* 07F77C 7F04AC4C AFB90074 */ sw $t9, 0x74($sp) -/* 07F780 7F04AC50 8F280014 */ lw $t0, 0x14($t9) -/* 07F784 7F04AC54 AFA80070 */ sw $t0, 0x70($sp) -/* 07F788 7F04AC58 8F290008 */ lw $t1, 8($t9) -/* 07F78C 7F04AC5C 312A0200 */ andi $t2, $t1, 0x200 -/* 07F790 7F04AC60 000A582B */ sltu $t3, $zero, $t2 -/* 07F794 7F04AC64 11600005 */ beqz $t3, .L7F04AC7C -/* 07F798 7F04AC68 AFAB0028 */ sw $t3, 0x28($sp) -/* 07F79C 7F04AC6C 0FC1E0E5 */ jal get_BONDdata_field_10E0 -/* 07F7A0 7F04AC70 00000000 */ nop -/* 07F7A4 7F04AC74 0002602B */ sltu $t4, $zero, $v0 -/* 07F7A8 7F04AC78 AFAC0028 */ sw $t4, 0x28($sp) -.L7F04AC7C: -/* 07F7AC 7F04AC7C 8FAD0074 */ lw $t5, 0x74($sp) -/* 07F7B0 7F04AC80 2401000A */ li $at, 10 -/* 07F7B4 7F04AC84 8E07000C */ lw $a3, 0xc($s0) -/* 07F7B8 7F04AC88 91A30003 */ lbu $v1, 3($t5) -/* 07F7BC 7F04AC8C 54610022 */ bnel $v1, $at, .L7F04AD18 -/* 07F7C0 7F04AC90 2401000B */ li $at, 11 -/* 07F7C4 7F04AC94 8E0F0008 */ lw $t7, 8($s0) -/* 07F7C8 7F04AC98 8FA40070 */ lw $a0, 0x70($sp) -/* 07F7CC 7F04AC9C 31F80001 */ andi $t8, $t7, 1 -/* 07F7D0 7F04ACA0 53000075 */ beql $t8, $zero, .L7F04AE78 -/* 07F7D4 7F04ACA4 24010001 */ li $at, 1 -/* 07F7D8 7F04ACA8 8DA8000C */ lw $t0, 0xc($t5) -/* 07F7DC 7F04ACAC 8FAE0078 */ lw $t6, 0x78($sp) -/* 07F7E0 7F04ACB0 8FA90074 */ lw $t1, 0x74($sp) -/* 07F7E4 7F04ACB4 0008CBC0 */ sll $t9, $t0, 0xf -/* 07F7E8 7F04ACB8 07210003 */ bgez $t9, .L7F04ACC8 -/* 07F7EC 7F04ACBC 8DC20004 */ lw $v0, 4($t6) -/* 07F7F0 7F04ACC0 10000008 */ b .L7F04ACE4 -/* 07F7F4 7F04ACC4 00001825 */ move $v1, $zero -.L7F04ACC8: -/* 07F7F8 7F04ACC8 8D2A0008 */ lw $t2, 8($t1) -/* 07F7FC 7F04ACCC 24030001 */ li $v1, 1 -/* 07F800 7F04ACD0 000A58C0 */ sll $t3, $t2, 3 -/* 07F804 7F04ACD4 05610003 */ bgez $t3, .L7F04ACE4 -/* 07F808 7F04ACD8 00000000 */ nop -/* 07F80C 7F04ACDC 10000001 */ b .L7F04ACE4 -/* 07F810 7F04ACE0 24030008 */ li $v1, 8 -.L7F04ACE4: -/* 07F814 7F04ACE4 8C8F0008 */ lw $t7, 8($a0) -/* 07F818 7F04ACE8 240E0001 */ li $t6, 1 -/* 07F81C 7F04ACEC 24460080 */ addiu $a2, $v0, 0x80 -/* 07F820 7F04ACF0 8DF80008 */ lw $t8, 8($t7) -/* 07F824 7F04ACF4 8F050000 */ lw $a1, ($t8) -/* 07F828 7F04ACF8 AFAE0014 */ sw $t6, 0x14($sp) -/* 07F82C 7F04ACFC 0FC127D2 */ jal process_monitor_animation_microcode -/* 07F830 7F04AD00 AFA30010 */ sw $v1, 0x10($sp) -/* 07F834 7F04AD04 8FAD0074 */ lw $t5, 0x74($sp) -/* 07F838 7F04AD08 00403825 */ move $a3, $v0 -/* 07F83C 7F04AD0C 10000059 */ b .L7F04AE74 -/* 07F840 7F04AD10 91A30003 */ lbu $v1, 3($t5) -/* 07F844 7F04AD14 2401000B */ li $at, 11 -.L7F04AD18: -/* 07F848 7F04AD18 54610057 */ bnel $v1, $at, .L7F04AE78 -/* 07F84C 7F04AD1C 24010001 */ li $at, 1 -/* 07F850 7F04AD20 8E080008 */ lw $t0, 8($s0) -/* 07F854 7F04AD24 8FAA0074 */ lw $t2, 0x74($sp) -/* 07F858 7F04AD28 8FA40070 */ lw $a0, 0x70($sp) -/* 07F85C 7F04AD2C 31190001 */ andi $t9, $t0, 1 -/* 07F860 7F04AD30 53200051 */ beql $t9, $zero, .L7F04AE78 -/* 07F864 7F04AD34 24010001 */ li $at, 1 -/* 07F868 7F04AD38 8D4B000C */ lw $t3, 0xc($t2) -/* 07F86C 7F04AD3C 8FA90078 */ lw $t1, 0x78($sp) -/* 07F870 7F04AD40 8FAF0074 */ lw $t7, 0x74($sp) -/* 07F874 7F04AD44 000B63C0 */ sll $t4, $t3, 0xf -/* 07F878 7F04AD48 05810003 */ bgez $t4, .L7F04AD58 -/* 07F87C 7F04AD4C 8D220004 */ lw $v0, 4($t1) -/* 07F880 7F04AD50 10000008 */ b .L7F04AD74 -/* 07F884 7F04AD54 00001825 */ move $v1, $zero -.L7F04AD58: -/* 07F888 7F04AD58 8DF80008 */ lw $t8, 8($t7) -/* 07F88C 7F04AD5C 24030001 */ li $v1, 1 -/* 07F890 7F04AD60 001870C0 */ sll $t6, $t8, 3 -/* 07F894 7F04AD64 05C10003 */ bgez $t6, .L7F04AD74 -/* 07F898 7F04AD68 00000000 */ nop -/* 07F89C 7F04AD6C 10000001 */ b .L7F04AD74 -/* 07F8A0 7F04AD70 24030008 */ li $v1, 8 -.L7F04AD74: -/* 07F8A4 7F04AD74 8C880008 */ lw $t0, 8($a0) -/* 07F8A8 7F04AD78 24090001 */ li $t1, 1 -/* 07F8AC 7F04AD7C 24460080 */ addiu $a2, $v0, 0x80 -/* 07F8B0 7F04AD80 8D190008 */ lw $t9, 8($t0) -/* 07F8B4 7F04AD84 8F250000 */ lw $a1, ($t9) -/* 07F8B8 7F04AD88 AFA20058 */ sw $v0, 0x58($sp) -/* 07F8BC 7F04AD8C AFA90014 */ sw $t1, 0x14($sp) -/* 07F8C0 7F04AD90 0FC127D2 */ jal process_monitor_animation_microcode -/* 07F8C4 7F04AD94 AFA30010 */ sw $v1, 0x10($sp) -/* 07F8C8 7F04AD98 8FAA0074 */ lw $t2, 0x74($sp) -/* 07F8CC 7F04AD9C 00403825 */ move $a3, $v0 -/* 07F8D0 7F04ADA0 8FAF0074 */ lw $t7, 0x74($sp) -/* 07F8D4 7F04ADA4 8D4B000C */ lw $t3, 0xc($t2) -/* 07F8D8 7F04ADA8 8FA40070 */ lw $a0, 0x70($sp) -/* 07F8DC 7F04ADAC 000B63C0 */ sll $t4, $t3, 0xf -/* 07F8E0 7F04ADB0 05830004 */ bgezl $t4, .L7F04ADC4 -/* 07F8E4 7F04ADB4 8DF80008 */ lw $t8, 8($t7) -/* 07F8E8 7F04ADB8 10000009 */ b .L7F04ADE0 -/* 07F8EC 7F04ADBC 00001825 */ move $v1, $zero -/* 07F8F0 7F04ADC0 8DF80008 */ lw $t8, 8($t7) -.L7F04ADC4: -/* 07F8F4 7F04ADC4 3C013000 */ lui $at, 0x3000 -/* 07F8F8 7F04ADC8 24030001 */ li $v1, 1 -/* 07F8FC 7F04ADCC 03017024 */ and $t6, $t8, $at -/* 07F900 7F04ADD0 11C00003 */ beqz $t6, .L7F04ADE0 -/* 07F904 7F04ADD4 00000000 */ nop -/* 07F908 7F04ADD8 10000001 */ b .L7F04ADE0 -/* 07F90C 7F04ADDC 24030008 */ li $v1, 8 -.L7F04ADE0: -/* 07F910 7F04ADE0 8C880008 */ lw $t0, 8($a0) -/* 07F914 7F04ADE4 8FA60058 */ lw $a2, 0x58($sp) -/* 07F918 7F04ADE8 24090001 */ li $t1, 1 -/* 07F91C 7F04ADEC 8D190008 */ lw $t9, 8($t0) -/* 07F920 7F04ADF0 24C600F4 */ addiu $a2, $a2, 0xf4 -/* 07F924 7F04ADF4 8F250004 */ lw $a1, 4($t9) -/* 07F928 7F04ADF8 AFA30060 */ sw $v1, 0x60($sp) -/* 07F92C 7F04ADFC AFA90014 */ sw $t1, 0x14($sp) -/* 07F930 7F04AE00 0FC127D2 */ jal process_monitor_animation_microcode -/* 07F934 7F04AE04 AFA30010 */ sw $v1, 0x10($sp) -/* 07F938 7F04AE08 8FA40070 */ lw $a0, 0x70($sp) -/* 07F93C 7F04AE0C 8FA30060 */ lw $v1, 0x60($sp) -/* 07F940 7F04AE10 8FA60058 */ lw $a2, 0x58($sp) -/* 07F944 7F04AE14 8C8B0008 */ lw $t3, 8($a0) -/* 07F948 7F04AE18 240F0001 */ li $t7, 1 -/* 07F94C 7F04AE1C 00403825 */ move $a3, $v0 -/* 07F950 7F04AE20 8D6C0008 */ lw $t4, 8($t3) -/* 07F954 7F04AE24 24C60168 */ addiu $a2, $a2, 0x168 -/* 07F958 7F04AE28 8D850008 */ lw $a1, 8($t4) -/* 07F95C 7F04AE2C AFAF0014 */ sw $t7, 0x14($sp) -/* 07F960 7F04AE30 0FC127D2 */ jal process_monitor_animation_microcode -/* 07F964 7F04AE34 AFA30010 */ sw $v1, 0x10($sp) -/* 07F968 7F04AE38 8FA40070 */ lw $a0, 0x70($sp) -/* 07F96C 7F04AE3C 8FA30060 */ lw $v1, 0x60($sp) -/* 07F970 7F04AE40 8FA60058 */ lw $a2, 0x58($sp) -/* 07F974 7F04AE44 8C8E0008 */ lw $t6, 8($a0) -/* 07F978 7F04AE48 24080001 */ li $t0, 1 -/* 07F97C 7F04AE4C 00403825 */ move $a3, $v0 -/* 07F980 7F04AE50 8DCD0008 */ lw $t5, 8($t6) -/* 07F984 7F04AE54 24C601DC */ addiu $a2, $a2, 0x1dc -/* 07F988 7F04AE58 8DA5000C */ lw $a1, 0xc($t5) -/* 07F98C 7F04AE5C AFA80014 */ sw $t0, 0x14($sp) -/* 07F990 7F04AE60 0FC127D2 */ jal process_monitor_animation_microcode -/* 07F994 7F04AE64 AFA30010 */ sw $v1, 0x10($sp) -/* 07F998 7F04AE68 8FB90074 */ lw $t9, 0x74($sp) -/* 07F99C 7F04AE6C 00403825 */ move $a3, $v0 -/* 07F9A0 7F04AE70 93230003 */ lbu $v1, 3($t9) -.L7F04AE74: -/* 07F9A4 7F04AE74 24010001 */ li $at, 1 -.L7F04AE78: -/* 07F9A8 7F04AE78 1461001A */ bne $v1, $at, .L7F04AEE4 -/* 07F9AC 7F04AE7C 8FA40074 */ lw $a0, 0x74($sp) -/* 07F9B0 7F04AE80 8FA90078 */ lw $t1, 0x78($sp) -/* 07F9B4 7F04AE84 00E01025 */ move $v0, $a3 -/* 07F9B8 7F04AE88 3C0AB600 */ lui $t2, 0xb600 -/* 07F9BC 7F04AE8C 8D230004 */ lw $v1, 4($t1) -/* 07F9C0 7F04AE90 240B3000 */ li $t3, 12288 -/* 07F9C4 7F04AE94 AC4B0004 */ sw $t3, 4($v0) -/* 07F9C8 7F04AE98 AC4A0000 */ sw $t2, ($v0) -/* 07F9CC 7F04AE9C 946C0098 */ lhu $t4, 0x98($v1) -/* 07F9D0 7F04AEA0 24E70008 */ addiu $a3, $a3, 8 -/* 07F9D4 7F04AEA4 24180002 */ li $t8, 2 -/* 07F9D8 7F04AEA8 318F0008 */ andi $t7, $t4, 8 -/* 07F9DC 7F04AEAC 11E00003 */ beqz $t7, .L7F04AEBC -/* 07F9E0 7F04AEB0 240E0003 */ li $t6, 3 -/* 07F9E4 7F04AEB4 10000002 */ b .L7F04AEC0 -/* 07F9E8 7F04AEB8 AE18003C */ sw $t8, 0x3c($s0) -.L7F04AEBC: -/* 07F9EC 7F04AEBC AE0E003C */ sw $t6, 0x3c($s0) -.L7F04AEC0: -/* 07F9F0 7F04AEC0 8E0D0030 */ lw $t5, 0x30($s0) -/* 07F9F4 7F04AEC4 24010009 */ li $at, 9 -/* 07F9F8 7F04AEC8 55A1004B */ bnel $t5, $at, .L7F04AFF8 -/* 07F9FC 7F04AECC 8FB90028 */ lw $t9, 0x28($sp) -/* 07FA00 7F04AED0 8E080034 */ lw $t0, 0x34($s0) -/* 07FA04 7F04AED4 2401FF00 */ li $at, -256 -/* 07FA08 7F04AED8 0101C824 */ and $t9, $t0, $at -/* 07FA0C 7F04AEDC 10000045 */ b .L7F04AFF4 -/* 07FA10 7F04AEE0 AE190034 */ sw $t9, 0x34($s0) -.L7F04AEE4: -/* 07FA14 7F04AEE4 0FC12D1E */ jal sub_GAME_7F04B478 -/* 07FA18 7F04AEE8 AFA70064 */ sw $a3, 0x64($sp) -/* 07FA1C 7F04AEEC 8FA70064 */ lw $a3, 0x64($sp) -/* 07FA20 7F04AEF0 1040000F */ beqz $v0, .L7F04AF30 -/* 07FA24 7F04AEF4 00002825 */ move $a1, $zero -/* 07FA28 7F04AEF8 8C430004 */ lw $v1, 4($v0) -/* 07FA2C 7F04AEFC 8FA90074 */ lw $t1, 0x74($sp) -/* 07FA30 7F04AF00 5060000C */ beql $v1, $zero, .L7F04AF34 -/* 07FA34 7F04AF04 8FA40074 */ lw $a0, 0x74($sp) -/* 07FA38 7F04AF08 8D2A0014 */ lw $t2, 0x14($t1) -/* 07FA3C 7F04AF0C 946C001A */ lhu $t4, 0x1a($v1) -/* 07FA40 7F04AF10 8C780008 */ lw $t8, 8($v1) -/* 07FA44 7F04AF14 8D4B0010 */ lw $t3, 0x10($t2) -/* 07FA48 7F04AF18 000C7880 */ sll $t7, $t4, 2 -/* 07FA4C 7F04AF1C 016F1021 */ addu $v0, $t3, $t7 -/* 07FA50 7F04AF20 8C4E0000 */ lw $t6, ($v0) -/* 07FA54 7F04AF24 530E0003 */ beql $t8, $t6, .L7F04AF34 -/* 07FA58 7F04AF28 8FA40074 */ lw $a0, 0x74($sp) -/* 07FA5C 7F04AF2C 24050001 */ li $a1, 1 -.L7F04AF30: -/* 07FA60 7F04AF30 8FA40074 */ lw $a0, 0x74($sp) -.L7F04AF34: -/* 07FA64 7F04AF34 AFA50040 */ sw $a1, 0x40($sp) -/* 07FA68 7F04AF38 0FC0FFF0 */ jal objGetDestroyedLevel -/* 07FA6C 7F04AF3C AFA70064 */ sw $a3, 0x64($sp) -/* 07FA70 7F04AF40 8FA50040 */ lw $a1, 0x40($sp) -/* 07FA74 7F04AF44 10400003 */ beqz $v0, .L7F04AF54 -/* 07FA78 7F04AF48 8FA70064 */ lw $a3, 0x64($sp) -/* 07FA7C 7F04AF4C 14A0000B */ bnez $a1, .L7F04AF7C -/* 07FA80 7F04AF50 8FA40074 */ lw $a0, 0x74($sp) -.L7F04AF54: -/* 07FA84 7F04AF54 8E080030 */ lw $t0, 0x30($s0) -/* 07FA88 7F04AF58 240D0003 */ li $t5, 3 -/* 07FA8C 7F04AF5C 24010009 */ li $at, 9 -/* 07FA90 7F04AF60 15010024 */ bne $t0, $at, .L7F04AFF4 -/* 07FA94 7F04AF64 AE0D003C */ sw $t5, 0x3c($s0) -/* 07FA98 7F04AF68 8E190034 */ lw $t9, 0x34($s0) -/* 07FA9C 7F04AF6C 2401FF00 */ li $at, -256 -/* 07FAA0 7F04AF70 03214824 */ and $t1, $t9, $at -/* 07FAA4 7F04AF74 1000001F */ b .L7F04AFF4 -/* 07FAA8 7F04AF78 AE090034 */ sw $t1, 0x34($s0) -.L7F04AF7C: -/* 07FAAC 7F04AF7C 0FC0FFF0 */ jal objGetDestroyedLevel -/* 07FAB0 7F04AF80 AFA70064 */ sw $a3, 0x64($sp) -/* 07FAB4 7F04AF84 8E0C0030 */ lw $t4, 0x30($s0) -/* 07FAB8 7F04AF88 8FA70064 */ lw $a3, 0x64($sp) -/* 07FABC 7F04AF8C 240A0001 */ li $t2, 1 -/* 07FAC0 7F04AF90 24010009 */ li $at, 9 -/* 07FAC4 7F04AF94 15810012 */ bne $t4, $at, .L7F04AFE0 -/* 07FAC8 7F04AF98 AE0A003C */ sw $t2, 0x3c($s0) -/* 07FACC 7F04AF9C 00021880 */ sll $v1, $v0, 2 -/* 07FAD0 7F04AFA0 00621823 */ subu $v1, $v1, $v0 -/* 07FAD4 7F04AFA4 000318C0 */ sll $v1, $v1, 3 -/* 07FAD8 7F04AFA8 00621821 */ addu $v1, $v1, $v0 -/* 07FADC 7F04AFAC 00031840 */ sll $v1, $v1, 1 -/* 07FAE0 7F04AFB0 24640064 */ addiu $a0, $v1, 0x64 -/* 07FAE4 7F04AFB4 28810100 */ slti $at, $a0, 0x100 -/* 07FAE8 7F04AFB8 54200003 */ bnezl $at, .L7F04AFC8 -/* 07FAEC 7F04AFBC 8E0B0034 */ lw $t3, 0x34($s0) -/* 07FAF0 7F04AFC0 240400FF */ li $a0, 255 -/* 07FAF4 7F04AFC4 8E0B0034 */ lw $t3, 0x34($s0) -.L7F04AFC8: -/* 07FAF8 7F04AFC8 2401FF00 */ li $at, -256 -/* 07FAFC 7F04AFCC 01617824 */ and $t7, $t3, $at -/* 07FB00 7F04AFD0 AE0F0034 */ sw $t7, 0x34($s0) -/* 07FB04 7F04AFD4 01E47025 */ or $t6, $t7, $a0 -/* 07FB08 7F04AFD8 10000006 */ b .L7F04AFF4 -/* 07FB0C 7F04AFDC AE0E0034 */ sw $t6, 0x34($s0) -.L7F04AFE0: -/* 07FB10 7F04AFE0 58400005 */ blezl $v0, .L7F04AFF8 -/* 07FB14 7F04AFE4 8FB90028 */ lw $t9, 0x28($sp) -/* 07FB18 7F04AFE8 8E0D0034 */ lw $t5, 0x34($s0) -/* 07FB1C 7F04AFEC 35A8FF00 */ ori $t0, $t5, 0xff00 -/* 07FB20 7F04AFF0 AE080034 */ sw $t0, 0x34($s0) -.L7F04AFF4: -/* 07FB24 7F04AFF4 8FB90028 */ lw $t9, 0x28($sp) -.L7F04AFF8: -/* 07FB28 7F04AFF8 3C090103 */ lui $t1, (0x01030040 >> 16) # lui $t1, 0x103 -/* 07FB2C 7F04AFFC 35290040 */ ori $t1, (0x01030040 & 0xFFFF) # ori $t1, $t1, 0x40 -/* 07FB30 7F04B000 13200009 */ beqz $t9, .L7F04B028 -/* 07FB34 7F04B004 00E01825 */ move $v1, $a3 -/* 07FB38 7F04B008 24E70008 */ addiu $a3, $a3, 8 -/* 07FB3C 7F04B00C AC690000 */ sw $t1, ($v1) -/* 07FB40 7F04B010 AFA70064 */ sw $a3, 0x64($sp) -/* 07FB44 7F04B014 0FC1E0E5 */ jal get_BONDdata_field_10E0 -/* 07FB48 7F04B018 AFA30034 */ sw $v1, 0x34($sp) -/* 07FB4C 7F04B01C 8FA30034 */ lw $v1, 0x34($sp) -/* 07FB50 7F04B020 8FA70064 */ lw $a3, 0x64($sp) -/* 07FB54 7F04B024 AC620004 */ sw $v0, 4($v1) -.L7F04B028: -/* 07FB58 7F04B028 AE07000C */ sw $a3, 0xc($s0) -/* 07FB5C 7F04B02C 8FA50070 */ lw $a1, 0x70($sp) -/* 07FB60 7F04B030 0FC1D1A1 */ jal subdraw -/* 07FB64 7F04B034 02002025 */ move $a0, $s0 -/* 07FB68 7F04B038 8FA30074 */ lw $v1, 0x74($sp) -/* 07FB6C 7F04B03C 8E07000C */ lw $a3, 0xc($s0) -/* 07FB70 7F04B040 24010001 */ li $at, 1 -/* 07FB74 7F04B044 906A0003 */ lbu $t2, 3($v1) -/* 07FB78 7F04B048 3C0CB600 */ lui $t4, 0xb600 -/* 07FB7C 7F04B04C 240B3000 */ li $t3, 12288 -/* 07FB80 7F04B050 15410004 */ bne $t2, $at, .L7F04B064 -/* 07FB84 7F04B054 00E01025 */ move $v0, $a3 -/* 07FB88 7F04B058 24E70008 */ addiu $a3, $a3, 8 -/* 07FB8C 7F04B05C AC4C0000 */ sw $t4, ($v0) -/* 07FB90 7F04B060 AC4B0004 */ sw $t3, 4($v0) -.L7F04B064: -/* 07FB94 7F04B064 8FA60080 */ lw $a2, 0x80($sp) -/* 07FB98 7F04B068 906F0002 */ lbu $t7, 2($v1) -/* 07FB9C 7F04B06C 24180001 */ li $t8, 1 -/* 07FBA0 7F04B070 00D87004 */ sllv $t6, $t8, $a2 -/* 07FBA4 7F04B074 01EE6824 */ and $t5, $t7, $t6 -/* 07FBA8 7F04B078 11A00005 */ beqz $t5, .L7F04B090 -/* 07FBAC 7F04B07C 00E02025 */ move $a0, $a3 -/* 07FBB0 7F04B080 0FC286A5 */ jal explosionRenderBulletImpactOnProp -/* 07FBB4 7F04B084 8FA50078 */ lw $a1, 0x78($sp) -/* 07FBB8 7F04B088 00403825 */ move $a3, $v0 -/* 07FBBC 7F04B08C 8FA60080 */ lw $a2, 0x80($sp) -.L7F04B090: -/* 07FBC0 7F04B090 8FA80028 */ lw $t0, 0x28($sp) -/* 07FBC4 7F04B094 3C190103 */ lui $t9, (0x01030040 >> 16) # lui $t9, 0x103 -/* 07FBC8 7F04B098 37390040 */ ori $t9, (0x01030040 & 0xFFFF) # ori $t9, $t9, 0x40 -/* 07FBCC 7F04B09C 1100000A */ beqz $t0, .L7F04B0C8 -/* 07FBD0 7F04B0A0 00E01825 */ move $v1, $a3 -/* 07FBD4 7F04B0A4 24E70008 */ addiu $a3, $a3, 8 -/* 07FBD8 7F04B0A8 AC790000 */ sw $t9, ($v1) -/* 07FBDC 7F04B0AC AFA70064 */ sw $a3, 0x64($sp) -/* 07FBE0 7F04B0B0 0FC1E0DD */ jal currentPlayerGetProjectionMatrix -/* 07FBE4 7F04B0B4 AFA3002C */ sw $v1, 0x2c($sp) -/* 07FBE8 7F04B0B8 8FA3002C */ lw $v1, 0x2c($sp) -/* 07FBEC 7F04B0BC 8FA70064 */ lw $a3, 0x64($sp) -/* 07FBF0 7F04B0C0 AC620004 */ sw $v0, 4($v1) -/* 07FBF4 7F04B0C4 8FA60080 */ lw $a2, 0x80($sp) -.L7F04B0C8: -/* 07FBF8 7F04B0C8 AE07000C */ sw $a3, 0xc($s0) -/* 07FBFC 7F04B0CC 8FA90078 */ lw $t1, 0x78($sp) -/* 07FC00 7F04B0D0 8D240020 */ lw $a0, 0x20($t1) -/* 07FC04 7F04B0D4 1080000A */ beqz $a0, .L7F04B100 -/* 07FC08 7F04B0D8 00000000 */ nop -/* 07FC0C 7F04B0DC 8FA60080 */ lw $a2, 0x80($sp) -.L7F04B0E0: -/* 07FC10 7F04B0E0 02002825 */ move $a1, $s0 -/* 07FC14 7F04B0E4 0FC12B08 */ jal sub_GAME_7F04AC20 -/* 07FC18 7F04B0E8 AFA40068 */ sw $a0, 0x68($sp) -/* 07FC1C 7F04B0EC 8FA40068 */ lw $a0, 0x68($sp) -/* 07FC20 7F04B0F0 8C840024 */ lw $a0, 0x24($a0) -/* 07FC24 7F04B0F4 5480FFFA */ bnezl $a0, .L7F04B0E0 -/* 07FC28 7F04B0F8 8FA60080 */ lw $a2, 0x80($sp) -/* 07FC2C 7F04B0FC 8FA60080 */ lw $a2, 0x80($sp) -.L7F04B100: -/* 07FC30 7F04B100 10C0000E */ beqz $a2, .L7F04B13C -/* 07FC34 7F04B104 8FAA0028 */ lw $t2, 0x28($sp) -/* 07FC38 7F04B108 11400008 */ beqz $t2, .L7F04B12C -/* 07FC3C 7F04B10C 8FA20070 */ lw $v0, 0x70($sp) -/* 07FC40 7F04B110 8FA20070 */ lw $v0, 0x70($sp) -/* 07FC44 7F04B114 8C4C0008 */ lw $t4, 8($v0) -/* 07FC48 7F04B118 8C44000C */ lw $a0, 0xc($v0) -/* 07FC4C 7F04B11C 0FC22FBB */ jal sub_GAME_7F08BEEC -/* 07FC50 7F04B120 8585000E */ lh $a1, 0xe($t4) -/* 07FC54 7F04B124 10000006 */ b .L7F04B140 -/* 07FC58 7F04B128 8FBF0024 */ lw $ra, 0x24($sp) -.L7F04B12C: -/* 07FC5C 7F04B12C 8C4B0008 */ lw $t3, 8($v0) -/* 07FC60 7F04B130 8C44000C */ lw $a0, 0xc($v0) -/* 07FC64 7F04B134 0FC22F52 */ jal bondviewTransformManyPosToViewMatrix -/* 07FC68 7F04B138 8565000E */ lh $a1, 0xe($t3) -.L7F04B13C: -/* 07FC6C 7F04B13C 8FBF0024 */ lw $ra, 0x24($sp) -.L7F04B140: -/* 07FC70 7F04B140 8FB00020 */ lw $s0, 0x20($sp) -/* 07FC74 7F04B144 27BD0078 */ addiu $sp, $sp, 0x78 -/* 07FC78 7F04B148 03E00008 */ jr $ra -/* 07FC7C 7F04B14C 00000000 */ nop -) -#endif - - - /** @@ -27992,7 +7428,7 @@ Gfx *chrobjRenderProp(PropRecord *prop, Gfx *gdl, s32 arg2) sp44 = (arg2 == 0) ? 1 : 2; } - if ((sub_GAME_7F054A64(prop, &sp58) > 0) && (((s32)obj->flags2 << 5) >= 0)) + if ((getPropCombinedRoomsBBox2D(prop, &sp58) > 0) && (((s32)obj->flags2 << 5) >= 0)) { gdl = bgScissorCurrentPlayerViewF(gdl, sp58.left, sp58.top, sp58.width, sp58.height); } @@ -28019,7 +7455,7 @@ Gfx *chrobjRenderProp(PropRecord *prop, Gfx *gdl, s32 arg2) { mrData.envcolour.word = ((struct TintedGlassRecord*)obj)->calculatedopacity << 8; } - else if ((obj->type == PROPDEF_DOOR) && ((((struct DoorRecord*)obj)->doorFlags & 2) != 0)) + else if ((obj->type == PROPDEF_DOOR) && (((struct DoorRecord*)obj)->doorFlags & DOORFLAG_WINDOWED)) { mrData.envcolour.word = ((struct DoorRecord*)obj)->calculatedopacity << 8; } @@ -28129,1226 +7565,324 @@ bool sub_GAME_7F04B590(ModelFileHeader* arg0, ModelNode* arg1) } -#ifdef NONMATCHING +typedef struct Word4 { u32 w0; u32 w1; u32 w2; u32 w3; } Word4; + + /* * objDeform - Deform an object due to it being destroyed. * PD has a very similar function of the same name * Address: 7F04B610 */ -void objDeform(ObjectRecord *obj, s32 arg1) { - s32 sp7C; - s32 sp78; - s32 sp70; - f32 sp68; - f32 sp5C; - f32 sp44; - s32 sp40; - ModelNode *temp_v0; - Vertex **temp_s3; - Vertex *temp_a0_2; - Vertex *temp_v0_3; - Vertex *var_s0; - Vertex *var_v1; - Vertex *var_v1_2; - f32 temp_s1; - f32 temp_v0_8; - f32 var_f6; - s16 *temp_s0_2; - s16 temp_a0; - s16 temp_v0_4; - s16 temp_v0_5; - s16 var_s4; - s16 var_s6; - s32 *temp_t4; - s32 *temp_t7; - s32 temp_at; - s32 temp_at_2; - s32 temp_t1; - s32 temp_t3; - s32 temp_v0_2; - s32 temp_v0_6; - s32 temp_v0_9; - s32 var_s0_2; - s32 var_s1; - s32 var_s1_2; - s32 var_s1_3; - s32 var_s1_4; - s32 var_s2; - s32 var_s7; - s32 var_v1_3; - void *temp_s0; - void *temp_s0_3; - void *temp_s0_4; - void *temp_s0_5; - void *temp_s5; - void *temp_v0_10; - void *temp_v0_7; +void objDeform(ObjectRecord *obj, E_EXPLOSIONTYPE explosiontype) +{ + ModelNode *node; + ModelRoData_DisplayList_CollisionRecord *rodata; + Model *model; + Vertex **vtxslot; + Vertex *newverts; + s32 adjust_height; + s32 ymid; + s32 deformseed; + f32 shrink; + bool allow_blackening; + ModelNode *nodeCopy; + f32 yscale; + s32 chance; + s32 i; + f32 modelscale; + s32 offset; + s32 ymin; + s32 ymax; + + model = obj->model; - temp_s1 = obj->mtx.m[0][0]; - var_s6 = 0x1869F; - var_s4 = 0xFFFE7961; - temp_v0 = sub_GAME_7F04B478(obj); - if ((temp_v0 != NULL) && (temp_s5 = temp_v0->Data, (temp_s5 != NULL)) && (sub_GAME_7F04B590(obj->mtx.m[0][0]->unk8, temp_v0) != 0)) { - temp_s3 = temp_s1->unk10 + (temp_s5->unk1A * 4); - temp_t1 = arg1 * 2; - if (randomGetNext() & 1) { - sp40 = temp_t1; - sp78 = (s32) *(object_explosion_details->Seed + ((obj->unk4 * 0xE) + temp_t1)); - } else { - temp_v0_2 = arg1 * 2; - sp40 = temp_v0_2; - sp78 = (s32) *(&object_explosion_details->Seed[3] + ((obj->unk4 * 0xE) + temp_v0_2)); + // Keep on one line for matching. + ymin = 99999; ymax = -99999; + + node = sub_GAME_7F04B478(obj); + nodeCopy = node; + + if (nodeCopy == NULL) + { + return; + } + + rodata = (ModelRoData_DisplayList_CollisionRecord *) nodeCopy->Data; + + if (rodata == NULL) + { + return; + } + + if (!sub_GAME_7F04B590(obj->model->obj, nodeCopy)) + { + return; + } + + vtxslot = (Vertex **) (&model->datas[rodata->RwDataIndex]); + +#ifdef VERSION_EU + if (obj->obj < PROP_WINDOW) + { + if (randomGetNext() & 1) + { + deformseed = (u16) object_explosion_details.seeds[obj->obj].seed[explosiontype]; } - if ((get_debug_explosioninfo_flag() != 0) || (sp78 == 0)) { - get_debug_explosioninfo_flag(); - sp78 = randomGetNext(); - if (get_debug_explosioninfo_flag() != 0) { - sp78 &= 0xFFFF; - } - } - explosionClearBulletImpactRoom((PropRecord *) obj->model); - var_s7 = 1; - if (obj->unk4 == 0x4C) { - var_s7 = 0; - } - temp_v0_3 = sub_GAME_7F09BE4C(temp_s5->unkC, 0xB0B, temp_s1->unk8, objGetDestroyedLevel(obj)); - if (temp_v0_3 != NULL) { - if (temp_s5->unk8 != *temp_s3) { - var_s2 = 0; - var_s1 = 0; - var_v1 = temp_v0_3; - if (temp_s5->unkC > 0) { - do { - var_s2 += 1; - var_v1 += 0x10; - temp_t7 = *temp_s3 + var_s1; - temp_at = temp_t7->unk0; - var_s1 += 0x10; - var_v1->unk-10 = temp_at; - var_v1->unk-C = (s32) temp_t7->unk4; - var_v1->unk-8 = (s32) temp_t7->unk8; - var_v1->unk-4 = (s32) temp_t7->unkC; - } while (var_s2 < temp_s5->unkC); - var_s2 = 0; - } - sub_GAME_7F09C044(*temp_s3); - } else { - var_s2 = 0; - var_s1_2 = 0; - var_v1_2 = temp_v0_3; - if (temp_s5->unkC > 0) { - do { - var_s2 += 1; - var_v1_2 += 0x10; - temp_t4 = temp_s5->unk8 + var_s1_2; - temp_at_2 = temp_t4->unk0; - var_s1_2 += 0x10; - var_v1_2->unk-10 = temp_at_2; - var_v1_2->unk-C = (s32) temp_t4->unk4; - var_v1_2->unk-8 = (s32) temp_t4->unk8; - var_v1_2->unk-4 = (s32) temp_t4->unkC; - } while (var_s2 < temp_s5->unkC); - var_s2 = 0; - } - } - *temp_s3 = temp_v0_3; - temp_v0_4 = obj->unk4; - var_s1_3 = 0; - if ((temp_v0_4 == 0x26) || (temp_v0_4 == 0x27) || (temp_v0_4 == 0x55)) { - sp70 = 0; - } else { - sp70 = 1; - } - temp_a0 = temp_s5->unkC; - if (temp_a0 > 0) { - var_s0 = *temp_s3; - do { - temp_v0_5 = var_s0->coord.AsArray[1]; - var_s1_3 += 0x10; - if (temp_v0_5 < var_s6) { - var_s6 = temp_v0_5; - } - if (var_s4 < temp_v0_5) { - var_s4 = temp_v0_5; - } - var_s0 += 0x10; - } while (var_s1_3 < (temp_a0 * 0x10)); - var_s2 = 0; - } - temp_t3 = (s32) (var_s6 + var_s4) >> 1; - var_v1_3 = temp_t3; - if ((sp40 == 6) && ((temp_t3 - var_s6) >= 0x29)) { - var_v1_3 = var_s6 + 0x28; - } - temp_v0_6 = var_s4 - var_s6; - if (temp_v0_6 >= 0x3D) { - if (sp40 < 6) { - var_f6 = D_80052CC0; - goto block_47; - } - sp68 = (f32) (temp_v0_6 - 0x3C) / (f32) temp_v0_6; - } else { - var_f6 = 1.0f; -block_47: - sp68 = var_f6; - } - if (temp_a0 > 0) { - var_s1_4 = 0; - sp7C = var_v1_3; - sp44 = (f32) var_s6; - do { - temp_v0_7 = temp_s5->unk8 + var_s1_4; - chrObjRandomSetSeed(temp_v0_7->unk4 + temp_v0_7->unk0 + temp_v0_7->unk2 + sp78); - var_s0_2 = 0; - if (sp70 != 0) { - if (obj->mtx.m[1][2] >= 0.0f) { - if ((*temp_s3 + var_s1_4)->unk2 >= sp7C) { - if (var_s7 != 0) { - var_s0_2 = 0x5A; - } else { - var_s0_2 = 0x14; - } - } else if (var_s7 != 0) { - var_s0_2 = 0x14; - } else { - var_s0_2 = 0x5A; - } - } else if (sp7C >= (*temp_s3 + var_s1_4)->unk2) { - if (var_s7 != 0) { - var_s0_2 = 0x5A; - } else { - var_s0_2 = 0x14; - } - } else if (var_s7 != 0) { - var_s0_2 = 0x14; - } else { - var_s0_2 = 0x5A; - } - } - if ((s32) (chrObjRandomGetNext() % 100U) < var_s0_2) { - (*temp_s3 + var_s1_4)->unkC = 0; - (*temp_s3 + var_s1_4)->unkD = 0; - (*temp_s3 + var_s1_4)->unkE = 0; - (*temp_s3 + var_s1_4)->unkF = 0xFF; - } else if (sp40 == 2) { - (*temp_s3 + var_s1_4)->unkF = 0; - } - temp_s0 = *temp_s3 + var_s1_4; - temp_s0->unk2 = (s16) (s32) (((f32) (temp_s0->unk2 - var_s6) * sp68) + sp44); - temp_s0_2 = *temp_s3 + var_s1_4; - *temp_s0_2 = (*temp_s0_2 + (chrObjRandomGetNext() % 80U)) - 0x28; - temp_s0_3 = *temp_s3 + var_s1_4; - temp_s0_3->unk2 = (s16) ((temp_s0_3->unk2 + (chrObjRandomGetNext() % 80U)) - 0x28); - temp_s0_4 = *temp_s3 + var_s1_4; - temp_s0_4->unk4 = (s16) ((temp_s0_4->unk4 + (chrObjRandomGetNext() % 80U)) - 0x28); - temp_s0_5 = *temp_s3 + var_s1_4; - if (temp_s0_5->unk2 < var_s6) { - temp_s0_5->unk2 = var_s6; - } - var_s2 += 1; - var_s1_4 += 0x10; - } while (var_s2 < temp_s5->unkC); - } - } else { - temp_a0_2 = *temp_s3; - if (temp_s5->unk8 != temp_a0_2) { - sub_GAME_7F09C044(temp_a0_2); - *temp_s3 = temp_s5->unk8; - obj->ptr_allocated_collisiondata_block = (struct collision_data *) ((s32) obj->ptr_allocated_collisiondata_block | 4); - } - obj->mtx.m[1][1] *= D_80052CB4; - obj->mtx.m[1][2] *= D_80052CB4; - obj->mtx.m[1][3] *= D_80052CB4; - if (var_s7 != 0) { - temp_v0_8 = obj->mtx.m[0][0]; - sp5C = temp_v0_8->unk14; - temp_v0_9 = chrobjGetBboxFromObjFile(temp_v0_8->unk8); - temp_v0_10 = obj->model; - temp_v0_10->unkC = (f32) (temp_v0_10->unkC + (sp5C * chrpropBBOXGetYmin(temp_v0_9) * D_80052CB8)); - obj->runtime_pos.f[2] += sp5C * chrpropBBOXGetYmin(temp_v0_9) * D_80052CBC; - } + else + { + deformseed = (u16) object_explosion_details.seeds[obj->obj].seed[explosiontype + 3]; } } -} + else + { + deformseed = 0; + } #else -#ifndef VERSION_EU -GLOBAL_ASM( -.text -glabel objDeform -/* 080140 7F04B610 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 080144 7F04B614 AFB60030 */ sw $s6, 0x30($sp) -/* 080148 7F04B618 AFB40028 */ sw $s4, 0x28($sp) -/* 08014C 7F04B61C AFBF003C */ sw $ra, 0x3c($sp) -/* 080150 7F04B620 AFBE0038 */ sw $fp, 0x38($sp) -/* 080154 7F04B624 AFB70034 */ sw $s7, 0x34($sp) -/* 080158 7F04B628 AFB5002C */ sw $s5, 0x2c($sp) -/* 08015C 7F04B62C AFB30024 */ sw $s3, 0x24($sp) -/* 080160 7F04B630 AFB20020 */ sw $s2, 0x20($sp) -/* 080164 7F04B634 AFB1001C */ sw $s1, 0x1c($sp) -/* 080168 7F04B638 AFB00018 */ sw $s0, 0x18($sp) -/* 08016C 7F04B63C 3C14FFFE */ lui $s4, (0xFFFE7961 >> 16) # lui $s4, 0xfffe -/* 080170 7F04B640 3C160001 */ li $s6,0x00010000 # 0.000000 -/* 080174 7F04B644 00A08025 */ move $s0, $a1 -/* 080178 7F04B648 0080F025 */ move $fp, $a0 -/* 08017C 7F04B64C 8C910014 */ lw $s1, 0x14($a0) -/* 080180 7F04B650 36D6869F */ ori $s6, (0x0001869F & 0xFFFF) # ori $s6, $s6, 0x869f -/* 080184 7F04B654 0FC12D1E */ jal sub_GAME_7F04B478 -/* 080188 7F04B658 36947961 */ ori $s4, (0xFFFE7961 & 0xFFFF) # ori $s4, $s4, 0x7961 -/* 08018C 7F04B65C 10400193 */ beqz $v0, .L7F04BCAC -/* 080190 7F04B660 00402825 */ move $a1, $v0 -/* 080194 7F04B664 8C550004 */ lw $s5, 4($v0) -/* 080198 7F04B668 52A00191 */ beql $s5, $zero, .L7F04BCB0 -/* 08019C 7F04B66C 8FBF003C */ lw $ra, 0x3c($sp) -/* 0801A0 7F04B670 8FCE0014 */ lw $t6, 0x14($fp) -/* 0801A4 7F04B674 0FC12D64 */ jal sub_GAME_7F04B590 -/* 0801A8 7F04B678 8DC40008 */ lw $a0, 8($t6) -/* 0801AC 7F04B67C 5040018C */ beql $v0, $zero, .L7F04BCB0 -/* 0801B0 7F04B680 8FBF003C */ lw $ra, 0x3c($sp) -/* 0801B4 7F04B684 96B8001A */ lhu $t8, 0x1a($s5) -/* 0801B8 7F04B688 8E2F0010 */ lw $t7, 0x10($s1) -/* 0801BC 7F04B68C 0018C880 */ sll $t9, $t8, 2 -/* 0801C0 7F04B690 0C002914 */ jal randomGetNext -/* 0801C4 7F04B694 01F99821 */ addu $s3, $t7, $t9 -/* 0801C8 7F04B698 30480001 */ andi $t0, $v0, 1 -/* 0801CC 7F04B69C 1100000C */ beqz $t0, .L7F04B6D0 -/* 0801D0 7F04B6A0 00104840 */ sll $t1, $s0, 1 -/* 0801D4 7F04B6A4 AFA90040 */ sw $t1, 0x40($sp) -/* 0801D8 7F04B6A8 87CA0004 */ lh $t2, 4($fp) -/* 0801DC 7F04B6AC 3C0E8004 */ lui $t6, %hi(object_explosion_details+2) -/* 0801E0 7F04B6B0 000A58C0 */ sll $t3, $t2, 3 -/* 0801E4 7F04B6B4 016A5823 */ subu $t3, $t3, $t2 -/* 0801E8 7F04B6B8 000B5840 */ sll $t3, $t3, 1 -/* 0801EC 7F04B6BC 01696821 */ addu $t5, $t3, $t1 -/* 0801F0 7F04B6C0 01CD7021 */ addu $t6, $t6, $t5 -/* 0801F4 7F04B6C4 95CEB226 */ lhu $t6, %lo(object_explosion_details+2)($t6) -/* 0801F8 7F04B6C8 1000000C */ b .L7F04B6FC -/* 0801FC 7F04B6CC AFAE0078 */ sw $t6, 0x78($sp) -.L7F04B6D0: -/* 080200 7F04B6D0 87D80004 */ lh $t8, 4($fp) -/* 080204 7F04B6D4 00101040 */ sll $v0, $s0, 1 -/* 080208 7F04B6D8 3C088004 */ lui $t0, %hi(object_explosion_details+8) -/* 08020C 7F04B6DC 001878C0 */ sll $t7, $t8, 3 -/* 080210 7F04B6E0 01F87823 */ subu $t7, $t7, $t8 -/* 080214 7F04B6E4 000F7840 */ sll $t7, $t7, 1 -/* 080218 7F04B6E8 01E2C821 */ addu $t9, $t7, $v0 -/* 08021C 7F04B6EC 01194021 */ addu $t0, $t0, $t9 -/* 080220 7F04B6F0 9508B22C */ lhu $t0, %lo(object_explosion_details+8)($t0) -/* 080224 7F04B6F4 AFA20040 */ sw $v0, 0x40($sp) -/* 080228 7F04B6F8 AFA80078 */ sw $t0, 0x78($sp) -.L7F04B6FC: -/* 08022C 7F04B6FC 0FC243F1 */ jal get_debug_explosioninfo_flag -/* 080230 7F04B700 00000000 */ nop -/* 080234 7F04B704 14400003 */ bnez $v0, .L7F04B714 -/* 080238 7F04B708 8FA90078 */ lw $t1, 0x78($sp) -/* 08023C 7F04B70C 1520000B */ bnez $t1, .L7F04B73C -/* 080240 7F04B710 00000000 */ nop -.L7F04B714: -/* 080244 7F04B714 0FC243F1 */ jal get_debug_explosioninfo_flag -/* 080248 7F04B718 00000000 */ nop -/* 08024C 7F04B71C 0C002914 */ jal randomGetNext -/* 080250 7F04B720 00000000 */ nop -/* 080254 7F04B724 0FC243F1 */ jal get_debug_explosioninfo_flag -/* 080258 7F04B728 AFA20078 */ sw $v0, 0x78($sp) -/* 08025C 7F04B72C 10400003 */ beqz $v0, .L7F04B73C -/* 080260 7F04B730 8FAA0078 */ lw $t2, 0x78($sp) -/* 080264 7F04B734 314BFFFF */ andi $t3, $t2, 0xffff -/* 080268 7F04B738 AFAB0078 */ sw $t3, 0x78($sp) -.L7F04B73C: -/* 08026C 7F04B73C 0FC28364 */ jal explosionClearBulletImpactRoom -/* 080270 7F04B740 8FC40010 */ lw $a0, 0x10($fp) -/* 080274 7F04B744 87CC0004 */ lh $t4, 4($fp) -/* 080278 7F04B748 2401004C */ li $at, 76 -/* 08027C 7F04B74C 24170001 */ li $s7, 1 -/* 080280 7F04B750 15810003 */ bne $t4, $at, .L7F04B760 -/* 080284 7F04B754 00000000 */ nop -/* 080288 7F04B758 10000001 */ b .L7F04B760 -/* 08028C 7F04B75C 0000B825 */ move $s7, $zero -.L7F04B760: -/* 080290 7F04B760 0FC0FFF0 */ jal objGetDestroyedLevel -/* 080294 7F04B764 03C02025 */ move $a0, $fp -/* 080298 7F04B768 86A4000C */ lh $a0, 0xc($s5) -/* 08029C 7F04B76C 24050B0B */ li $a1, 2827 -/* 0802A0 7F04B770 8E260008 */ lw $a2, 8($s1) -/* 0802A4 7F04B774 0FC26F93 */ jal sub_GAME_7F09BE4C -/* 0802A8 7F04B778 00403825 */ move $a3, $v0 -/* 0802AC 7F04B77C 1040003A */ beqz $v0, .L7F04B868 -/* 0802B0 7F04B780 00408025 */ move $s0, $v0 -/* 0802B4 7F04B784 8E640000 */ lw $a0, ($s3) -/* 0802B8 7F04B788 8EAD0008 */ lw $t5, 8($s5) -/* 0802BC 7F04B78C 51A4001E */ beql $t5, $a0, .L7F04B808 -/* 0802C0 7F04B790 86AA000C */ lh $t2, 0xc($s5) -/* 0802C4 7F04B794 86AE000C */ lh $t6, 0xc($s5) -/* 0802C8 7F04B798 00009025 */ move $s2, $zero -/* 0802CC 7F04B79C 00008825 */ move $s1, $zero -/* 0802D0 7F04B7A0 19C00014 */ blez $t6, .L7F04B7F4 -/* 0802D4 7F04B7A4 00401825 */ move $v1, $v0 -/* 0802D8 7F04B7A8 8E780000 */ lw $t8, ($s3) -.L7F04B7AC: -/* 0802DC 7F04B7AC 26520001 */ addiu $s2, $s2, 1 -/* 0802E0 7F04B7B0 24630010 */ addiu $v1, $v1, 0x10 -/* 0802E4 7F04B7B4 03117821 */ addu $t7, $t8, $s1 -/* 0802E8 7F04B7B8 8DE10000 */ lw $at, ($t7) -/* 0802EC 7F04B7BC 26310010 */ addiu $s1, $s1, 0x10 -/* 0802F0 7F04B7C0 AC61FFF0 */ sw $at, -0x10($v1) -/* 0802F4 7F04B7C4 8DE80004 */ lw $t0, 4($t7) -/* 0802F8 7F04B7C8 AC68FFF4 */ sw $t0, -0xc($v1) -/* 0802FC 7F04B7CC 8DE10008 */ lw $at, 8($t7) -/* 080300 7F04B7D0 AC61FFF8 */ sw $at, -8($v1) -/* 080304 7F04B7D4 8DE8000C */ lw $t0, 0xc($t7) -/* 080308 7F04B7D8 AC68FFFC */ sw $t0, -4($v1) -/* 08030C 7F04B7DC 86A9000C */ lh $t1, 0xc($s5) -/* 080310 7F04B7E0 0249082A */ slt $at, $s2, $t1 -/* 080314 7F04B7E4 5420FFF1 */ bnezl $at, .L7F04B7AC -/* 080318 7F04B7E8 8E780000 */ lw $t8, ($s3) -/* 08031C 7F04B7EC 8E640000 */ lw $a0, ($s3) -/* 080320 7F04B7F0 00009025 */ move $s2, $zero -.L7F04B7F4: -/* 080324 7F04B7F4 0FC27011 */ jal sub_GAME_7F09C044 -/* 080328 7F04B7F8 00000000 */ nop -/* 08032C 7F04B7FC 10000018 */ b .L7F04B860 -/* 080330 7F04B800 00000000 */ nop -/* 080334 7F04B804 86AA000C */ lh $t2, 0xc($s5) -.L7F04B808: -/* 080338 7F04B808 00009025 */ move $s2, $zero -/* 08033C 7F04B80C 00008825 */ move $s1, $zero -/* 080340 7F04B810 19400013 */ blez $t2, .L7F04B860 -/* 080344 7F04B814 00401825 */ move $v1, $v0 -/* 080348 7F04B818 8EAB0008 */ lw $t3, 8($s5) -.L7F04B81C: -/* 08034C 7F04B81C 26520001 */ addiu $s2, $s2, 1 -/* 080350 7F04B820 24630010 */ addiu $v1, $v1, 0x10 -/* 080354 7F04B824 01716021 */ addu $t4, $t3, $s1 -/* 080358 7F04B828 8D810000 */ lw $at, ($t4) -/* 08035C 7F04B82C 26310010 */ addiu $s1, $s1, 0x10 -/* 080360 7F04B830 AC61FFF0 */ sw $at, -0x10($v1) -/* 080364 7F04B834 8D8E0004 */ lw $t6, 4($t4) -/* 080368 7F04B838 AC6EFFF4 */ sw $t6, -0xc($v1) -/* 08036C 7F04B83C 8D810008 */ lw $at, 8($t4) -/* 080370 7F04B840 AC61FFF8 */ sw $at, -8($v1) -/* 080374 7F04B844 8D8E000C */ lw $t6, 0xc($t4) -/* 080378 7F04B848 AC6EFFFC */ sw $t6, -4($v1) -/* 08037C 7F04B84C 86B8000C */ lh $t8, 0xc($s5) -/* 080380 7F04B850 0258082A */ slt $at, $s2, $t8 -/* 080384 7F04B854 5420FFF1 */ bnezl $at, .L7F04B81C -/* 080388 7F04B858 8EAB0008 */ lw $t3, 8($s5) -/* 08038C 7F04B85C 00009025 */ move $s2, $zero -.L7F04B860: -/* 080390 7F04B860 10000036 */ b .L7F04B93C -/* 080394 7F04B864 AE700000 */ sw $s0, ($s3) -.L7F04B868: -/* 080398 7F04B868 8E640000 */ lw $a0, ($s3) -/* 08039C 7F04B86C 8EB90008 */ lw $t9, 8($s5) -/* 0803A0 7F04B870 13240008 */ beq $t9, $a0, .L7F04B894 -/* 0803A4 7F04B874 00000000 */ nop -/* 0803A8 7F04B878 0FC27011 */ jal sub_GAME_7F09C044 -/* 0803AC 7F04B87C 00000000 */ nop -/* 0803B0 7F04B880 8EAF0008 */ lw $t7, 8($s5) -/* 0803B4 7F04B884 AE6F0000 */ sw $t7, ($s3) -/* 0803B8 7F04B888 8FC80064 */ lw $t0, 0x64($fp) -/* 0803BC 7F04B88C 35090004 */ ori $t1, $t0, 4 -/* 0803C0 7F04B890 AFC90064 */ sw $t1, 0x64($fp) -.L7F04B894: -/* 0803C4 7F04B894 3C018005 */ lui $at, %hi(D_80052CB4) -/* 0803C8 7F04B898 C4202CB4 */ lwc1 $f0, %lo(D_80052CB4)($at) -/* 0803CC 7F04B89C C7C40028 */ lwc1 $f4, 0x28($fp) -/* 0803D0 7F04B8A0 C7C8002C */ lwc1 $f8, 0x2c($fp) -/* 0803D4 7F04B8A4 C7D00030 */ lwc1 $f16, 0x30($fp) -/* 0803D8 7F04B8A8 46002182 */ mul.s $f6, $f4, $f0 -/* 0803DC 7F04B8AC 00000000 */ nop -/* 0803E0 7F04B8B0 46004282 */ mul.s $f10, $f8, $f0 -/* 0803E4 7F04B8B4 00000000 */ nop -/* 0803E8 7F04B8B8 46008482 */ mul.s $f18, $f16, $f0 -/* 0803EC 7F04B8BC E7C60028 */ swc1 $f6, 0x28($fp) -/* 0803F0 7F04B8C0 E7CA002C */ swc1 $f10, 0x2c($fp) -/* 0803F4 7F04B8C4 12E000F9 */ beqz $s7, .L7F04BCAC -/* 0803F8 7F04B8C8 E7D20030 */ swc1 $f18, 0x30($fp) -/* 0803FC 7F04B8CC 8FC20014 */ lw $v0, 0x14($fp) -/* 080400 7F04B8D0 C4440014 */ lwc1 $f4, 0x14($v0) -/* 080404 7F04B8D4 8C440008 */ lw $a0, 8($v0) -/* 080408 7F04B8D8 0FC0FFFE */ jal chrobjGetBboxFromObjFile -/* 08040C 7F04B8DC E7A4005C */ swc1 $f4, 0x5c($sp) -/* 080410 7F04B8E0 00408025 */ move $s0, $v0 -/* 080414 7F04B8E4 0FC0FA19 */ jal chrpropBBOXGetYmin -/* 080418 7F04B8E8 00402025 */ move $a0, $v0 -/* 08041C 7F04B8EC C7A6005C */ lwc1 $f6, 0x5c($sp) -/* 080420 7F04B8F0 3C018005 */ lui $at, %hi(D_80052CB8) -/* 080424 7F04B8F4 C42A2CB8 */ lwc1 $f10, %lo(D_80052CB8)($at) -/* 080428 7F04B8F8 46003202 */ mul.s $f8, $f6, $f0 -/* 08042C 7F04B8FC 8FC20010 */ lw $v0, 0x10($fp) -/* 080430 7F04B900 02002025 */ move $a0, $s0 -/* 080434 7F04B904 C452000C */ lwc1 $f18, 0xc($v0) -/* 080438 7F04B908 460A4402 */ mul.s $f16, $f8, $f10 -/* 08043C 7F04B90C 46109100 */ add.s $f4, $f18, $f16 -/* 080440 7F04B910 0FC0FA19 */ jal chrpropBBOXGetYmin -/* 080444 7F04B914 E444000C */ swc1 $f4, 0xc($v0) -/* 080448 7F04B918 C7A6005C */ lwc1 $f6, 0x5c($sp) -/* 08044C 7F04B91C 3C018005 */ lui $at, %hi(D_80052CBC) -/* 080450 7F04B920 C42A2CBC */ lwc1 $f10, %lo(D_80052CBC)($at) -/* 080454 7F04B924 46003202 */ mul.s $f8, $f6, $f0 -/* 080458 7F04B928 C7D0005C */ lwc1 $f16, 0x5c($fp) -/* 08045C 7F04B92C 460A4482 */ mul.s $f18, $f8, $f10 -/* 080460 7F04B930 46128100 */ add.s $f4, $f16, $f18 -/* 080464 7F04B934 100000DD */ b .L7F04BCAC -/* 080468 7F04B938 E7C4005C */ swc1 $f4, 0x5c($fp) -.L7F04B93C: -/* 08046C 7F04B93C 87C20004 */ lh $v0, 4($fp) -/* 080470 7F04B940 24010026 */ li $at, 38 -/* 080474 7F04B944 00008825 */ move $s1, $zero -/* 080478 7F04B948 10410005 */ beq $v0, $at, .L7F04B960 -/* 08047C 7F04B94C 24010027 */ li $at, 39 -/* 080480 7F04B950 10410003 */ beq $v0, $at, .L7F04B960 -/* 080484 7F04B954 24010055 */ li $at, 85 -/* 080488 7F04B958 14410003 */ bne $v0, $at, .L7F04B968 -/* 08048C 7F04B95C 240A0001 */ li $t2, 1 -.L7F04B960: -/* 080490 7F04B960 10000002 */ b .L7F04B96C -/* 080494 7F04B964 AFA00070 */ sw $zero, 0x70($sp) -.L7F04B968: -/* 080498 7F04B968 AFAA0070 */ sw $t2, 0x70($sp) -.L7F04B96C: -/* 08049C 7F04B96C 86A4000C */ lh $a0, 0xc($s5) -/* 0804A0 7F04B970 8FA50040 */ lw $a1, 0x40($sp) -/* 0804A4 7F04B974 18800010 */ blez $a0, .L7F04B9B8 -/* 0804A8 7F04B978 00041900 */ sll $v1, $a0, 4 -/* 0804AC 7F04B97C 8E700000 */ lw $s0, ($s3) -.L7F04B980: -/* 0804B0 7F04B980 86020002 */ lh $v0, 2($s0) -/* 0804B4 7F04B984 26310010 */ addiu $s1, $s1, 0x10 -/* 0804B8 7F04B988 0056082A */ slt $at, $v0, $s6 -/* 0804BC 7F04B98C 50200003 */ beql $at, $zero, .L7F04B99C -/* 0804C0 7F04B990 0282082A */ slt $at, $s4, $v0 -/* 0804C4 7F04B994 0040B025 */ move $s6, $v0 -/* 0804C8 7F04B998 0282082A */ slt $at, $s4, $v0 -.L7F04B99C: -/* 0804CC 7F04B99C 50200003 */ beql $at, $zero, .L7F04B9AC -/* 0804D0 7F04B9A0 0223082A */ slt $at, $s1, $v1 -/* 0804D4 7F04B9A4 0040A025 */ move $s4, $v0 -/* 0804D8 7F04B9A8 0223082A */ slt $at, $s1, $v1 -.L7F04B9AC: -/* 0804DC 7F04B9AC 1420FFF4 */ bnez $at, .L7F04B980 -/* 0804E0 7F04B9B0 26100010 */ addiu $s0, $s0, 0x10 -/* 0804E4 7F04B9B4 00009025 */ move $s2, $zero -.L7F04B9B8: -/* 0804E8 7F04B9B8 02D41021 */ addu $v0, $s6, $s4 -/* 0804EC 7F04B9BC 00025843 */ sra $t3, $v0, 1 -/* 0804F0 7F04B9C0 24010006 */ li $at, 6 -/* 0804F4 7F04B9C4 14A10006 */ bne $a1, $at, .L7F04B9E0 -/* 0804F8 7F04B9C8 01601825 */ move $v1, $t3 -/* 0804FC 7F04B9CC 01766823 */ subu $t5, $t3, $s6 -/* 080500 7F04B9D0 29A10029 */ slti $at, $t5, 0x29 -/* 080504 7F04B9D4 54200003 */ bnezl $at, .L7F04B9E4 -/* 080508 7F04B9D8 02961023 */ subu $v0, $s4, $s6 -/* 08050C 7F04B9DC 26C30028 */ addiu $v1, $s6, 0x28 -.L7F04B9E0: -/* 080510 7F04B9E0 02961023 */ subu $v0, $s4, $s6 -.L7F04B9E4: -/* 080514 7F04B9E4 2841003D */ slti $at, $v0, 0x3d -/* 080518 7F04B9E8 1420000E */ bnez $at, .L7F04BA24 -/* 08051C 7F04B9EC 28A10006 */ slti $at, $a1, 6 -/* 080520 7F04B9F0 10200005 */ beqz $at, .L7F04BA08 -/* 080524 7F04B9F4 244CFFC4 */ addiu $t4, $v0, -0x3c -/* 080528 7F04B9F8 3C018005 */ lui $at, %hi(D_80052CC0) -/* 08052C 7F04B9FC C4262CC0 */ lwc1 $f6, %lo(D_80052CC0)($at) -/* 080530 7F04BA00 1000000C */ b .L7F04BA34 -/* 080534 7F04BA04 E7A60068 */ swc1 $f6, 0x68($sp) -.L7F04BA08: -/* 080538 7F04BA08 448C4000 */ mtc1 $t4, $f8 -/* 08053C 7F04BA0C 44828000 */ mtc1 $v0, $f16 -/* 080540 7F04BA10 468042A0 */ cvt.s.w $f10, $f8 -/* 080544 7F04BA14 468084A0 */ cvt.s.w $f18, $f16 -/* 080548 7F04BA18 46125103 */ div.s $f4, $f10, $f18 -/* 08054C 7F04BA1C 10000005 */ b .L7F04BA34 -/* 080550 7F04BA20 E7A40068 */ swc1 $f4, 0x68($sp) -.L7F04BA24: -/* 080554 7F04BA24 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 080558 7F04BA28 44813000 */ mtc1 $at, $f6 -/* 08055C 7F04BA2C 00000000 */ nop -/* 080560 7F04BA30 E7A60068 */ swc1 $f6, 0x68($sp) -.L7F04BA34: -/* 080564 7F04BA34 5880009E */ blezl $a0, .L7F04BCB0 -/* 080568 7F04BA38 8FBF003C */ lw $ra, 0x3c($sp) -/* 08056C 7F04BA3C 44964000 */ mtc1 $s6, $f8 -/* 080570 7F04BA40 00008825 */ move $s1, $zero -/* 080574 7F04BA44 AFA3007C */ sw $v1, 0x7c($sp) -/* 080578 7F04BA48 46804420 */ cvt.s.w $f16, $f8 -/* 08057C 7F04BA4C 24140050 */ li $s4, 80 -/* 080580 7F04BA50 E7B00044 */ swc1 $f16, 0x44($sp) -/* 080584 7F04BA54 8EAE0008 */ lw $t6, 8($s5) -.L7F04BA58: -/* 080588 7F04BA58 8FAA0078 */ lw $t2, 0x78($sp) -/* 08058C 7F04BA5C 01D11021 */ addu $v0, $t6, $s1 -/* 080590 7F04BA60 84580004 */ lh $t8, 4($v0) -/* 080594 7F04BA64 84590000 */ lh $t9, ($v0) -/* 080598 7F04BA68 84480002 */ lh $t0, 2($v0) -/* 08059C 7F04BA6C 03197821 */ addu $t7, $t8, $t9 -/* 0805A0 7F04BA70 01E84821 */ addu $t1, $t7, $t0 -/* 0805A4 7F04BA74 0FC26DE2 */ jal chrObjRandomSetSeed -/* 0805A8 7F04BA78 012A2021 */ addu $a0, $t1, $t2 -/* 0805AC 7F04BA7C 8FAB0070 */ lw $t3, 0x70($sp) -/* 0805B0 7F04BA80 00008025 */ move $s0, $zero -/* 0805B4 7F04BA84 1160002E */ beqz $t3, .L7F04BB40 -/* 0805B8 7F04BA88 00000000 */ nop -/* 0805BC 7F04BA8C C7CA002C */ lwc1 $f10, 0x2c($fp) -/* 0805C0 7F04BA90 44809000 */ mtc1 $zero, $f18 -/* 0805C4 7F04BA94 00000000 */ nop -/* 0805C8 7F04BA98 460A903E */ c.le.s $f18, $f10 -/* 0805CC 7F04BA9C 00000000 */ nop -/* 0805D0 7F04BAA0 45020015 */ bc1fl .L7F04BAF8 -/* 0805D4 7F04BAA4 8E6F0000 */ lw $t7, ($s3) -/* 0805D8 7F04BAA8 8E6D0000 */ lw $t5, ($s3) -/* 0805DC 7F04BAAC 8FB8007C */ lw $t8, 0x7c($sp) -/* 0805E0 7F04BAB0 01B16021 */ addu $t4, $t5, $s1 -/* 0805E4 7F04BAB4 858E0002 */ lh $t6, 2($t4) -/* 0805E8 7F04BAB8 01D8082A */ slt $at, $t6, $t8 -/* 0805EC 7F04BABC 14200007 */ bnez $at, .L7F04BADC -/* 0805F0 7F04BAC0 00000000 */ nop -/* 0805F4 7F04BAC4 12E00003 */ beqz $s7, .L7F04BAD4 -/* 0805F8 7F04BAC8 00000000 */ nop -/* 0805FC 7F04BACC 1000001C */ b .L7F04BB40 -/* 080600 7F04BAD0 2410005A */ li $s0, 90 -.L7F04BAD4: -/* 080604 7F04BAD4 1000001A */ b .L7F04BB40 -/* 080608 7F04BAD8 24100014 */ li $s0, 20 -.L7F04BADC: -/* 08060C 7F04BADC 12E00003 */ beqz $s7, .L7F04BAEC -/* 080610 7F04BAE0 00000000 */ nop -/* 080614 7F04BAE4 10000016 */ b .L7F04BB40 -/* 080618 7F04BAE8 24100014 */ li $s0, 20 -.L7F04BAEC: -/* 08061C 7F04BAEC 10000014 */ b .L7F04BB40 -/* 080620 7F04BAF0 2410005A */ li $s0, 90 -/* 080624 7F04BAF4 8E6F0000 */ lw $t7, ($s3) -.L7F04BAF8: -/* 080628 7F04BAF8 8FB9007C */ lw $t9, 0x7c($sp) -/* 08062C 7F04BAFC 01F14021 */ addu $t0, $t7, $s1 -/* 080630 7F04BB00 85090002 */ lh $t1, 2($t0) -/* 080634 7F04BB04 0329082A */ slt $at, $t9, $t1 -/* 080638 7F04BB08 14200007 */ bnez $at, .L7F04BB28 -/* 08063C 7F04BB0C 00000000 */ nop -/* 080640 7F04BB10 12E00003 */ beqz $s7, .L7F04BB20 -/* 080644 7F04BB14 00000000 */ nop -/* 080648 7F04BB18 10000009 */ b .L7F04BB40 -/* 08064C 7F04BB1C 2410005A */ li $s0, 90 -.L7F04BB20: -/* 080650 7F04BB20 10000007 */ b .L7F04BB40 -/* 080654 7F04BB24 24100014 */ li $s0, 20 -.L7F04BB28: -/* 080658 7F04BB28 12E00003 */ beqz $s7, .L7F04BB38 -/* 08065C 7F04BB2C 00000000 */ nop -/* 080660 7F04BB30 10000003 */ b .L7F04BB40 -/* 080664 7F04BB34 24100014 */ li $s0, 20 -.L7F04BB38: -/* 080668 7F04BB38 10000001 */ b .L7F04BB40 -/* 08066C 7F04BB3C 2410005A */ li $s0, 90 -.L7F04BB40: -/* 080670 7F04BB40 0FC26DD0 */ jal chrObjRandomGetNext -/* 080674 7F04BB44 00000000 */ nop -/* 080678 7F04BB48 24010064 */ li $at, 100 -/* 08067C 7F04BB4C 0041001B */ divu $zero, $v0, $at -/* 080680 7F04BB50 00005010 */ mfhi $t2 -/* 080684 7F04BB54 0150082A */ slt $at, $t2, $s0 -/* 080688 7F04BB58 1020000F */ beqz $at, .L7F04BB98 -/* 08068C 7F04BB5C 8FAA0040 */ lw $t2, 0x40($sp) -/* 080690 7F04BB60 8E6B0000 */ lw $t3, ($s3) -/* 080694 7F04BB64 240800FF */ li $t0, 255 -/* 080698 7F04BB68 01716821 */ addu $t5, $t3, $s1 -/* 08069C 7F04BB6C A1A0000C */ sb $zero, 0xc($t5) -/* 0806A0 7F04BB70 8E6C0000 */ lw $t4, ($s3) -/* 0806A4 7F04BB74 01917021 */ addu $t6, $t4, $s1 -/* 0806A8 7F04BB78 A1C0000D */ sb $zero, 0xd($t6) -/* 0806AC 7F04BB7C 8E780000 */ lw $t8, ($s3) -/* 0806B0 7F04BB80 03117821 */ addu $t7, $t8, $s1 -/* 0806B4 7F04BB84 A1E0000E */ sb $zero, 0xe($t7) -/* 0806B8 7F04BB88 8E790000 */ lw $t9, ($s3) -/* 0806BC 7F04BB8C 03314821 */ addu $t1, $t9, $s1 -/* 0806C0 7F04BB90 10000007 */ b .L7F04BBB0 -/* 0806C4 7F04BB94 A128000F */ sb $t0, 0xf($t1) -.L7F04BB98: -/* 0806C8 7F04BB98 24010002 */ li $at, 2 -/* 0806CC 7F04BB9C 55410005 */ bnel $t2, $at, .L7F04BBB4 -/* 0806D0 7F04BBA0 8E6C0000 */ lw $t4, ($s3) -/* 0806D4 7F04BBA4 8E6B0000 */ lw $t3, ($s3) -/* 0806D8 7F04BBA8 01716821 */ addu $t5, $t3, $s1 -/* 0806DC 7F04BBAC A1A0000F */ sb $zero, 0xf($t5) -.L7F04BBB0: -/* 0806E0 7F04BBB0 8E6C0000 */ lw $t4, ($s3) -.L7F04BBB4: -/* 0806E4 7F04BBB4 C7A80068 */ lwc1 $f8, 0x68($sp) -/* 0806E8 7F04BBB8 C7AA0044 */ lwc1 $f10, 0x44($sp) -/* 0806EC 7F04BBBC 01918021 */ addu $s0, $t4, $s1 -/* 0806F0 7F04BBC0 860E0002 */ lh $t6, 2($s0) -/* 0806F4 7F04BBC4 01D6C023 */ subu $t8, $t6, $s6 -/* 0806F8 7F04BBC8 44982000 */ mtc1 $t8, $f4 -/* 0806FC 7F04BBCC 00000000 */ nop -/* 080700 7F04BBD0 468021A0 */ cvt.s.w $f6, $f4 -/* 080704 7F04BBD4 46083402 */ mul.s $f16, $f6, $f8 -/* 080708 7F04BBD8 460A8480 */ add.s $f18, $f16, $f10 -/* 08070C 7F04BBDC 4600910D */ trunc.w.s $f4, $f18 -/* 080710 7F04BBE0 44192000 */ mfc1 $t9, $f4 -/* 080714 7F04BBE4 0FC26DD0 */ jal chrObjRandomGetNext -/* 080718 7F04BBE8 A6190002 */ sh $t9, 2($s0) -/* 08071C 7F04BBEC 0054001B */ divu $zero, $v0, $s4 -/* 080720 7F04BBF0 8E680000 */ lw $t0, ($s3) -/* 080724 7F04BBF4 00005010 */ mfhi $t2 -/* 080728 7F04BBF8 01118021 */ addu $s0, $t0, $s1 -/* 08072C 7F04BBFC 86090000 */ lh $t1, ($s0) -/* 080730 7F04BC00 16800002 */ bnez $s4, .L7F04BC0C -/* 080734 7F04BC04 00000000 */ nop -/* 080738 7F04BC08 0007000D */ break 7 -.L7F04BC0C: -/* 08073C 7F04BC0C 012A5821 */ addu $t3, $t1, $t2 -/* 080740 7F04BC10 256DFFD8 */ addiu $t5, $t3, -0x28 -/* 080744 7F04BC14 0FC26DD0 */ jal chrObjRandomGetNext -/* 080748 7F04BC18 A60D0000 */ sh $t5, ($s0) -/* 08074C 7F04BC1C 0054001B */ divu $zero, $v0, $s4 -/* 080750 7F04BC20 8E6C0000 */ lw $t4, ($s3) -/* 080754 7F04BC24 0000C010 */ mfhi $t8 -/* 080758 7F04BC28 01918021 */ addu $s0, $t4, $s1 -/* 08075C 7F04BC2C 860E0002 */ lh $t6, 2($s0) -/* 080760 7F04BC30 16800002 */ bnez $s4, .L7F04BC3C -/* 080764 7F04BC34 00000000 */ nop -/* 080768 7F04BC38 0007000D */ break 7 -.L7F04BC3C: -/* 08076C 7F04BC3C 01D87821 */ addu $t7, $t6, $t8 -/* 080770 7F04BC40 25F9FFD8 */ addiu $t9, $t7, -0x28 -/* 080774 7F04BC44 0FC26DD0 */ jal chrObjRandomGetNext -/* 080778 7F04BC48 A6190002 */ sh $t9, 2($s0) -/* 08077C 7F04BC4C 0054001B */ divu $zero, $v0, $s4 -/* 080780 7F04BC50 8E680000 */ lw $t0, ($s3) -/* 080784 7F04BC54 00005010 */ mfhi $t2 -/* 080788 7F04BC58 01118021 */ addu $s0, $t0, $s1 -/* 08078C 7F04BC5C 86090004 */ lh $t1, 4($s0) -/* 080790 7F04BC60 16800002 */ bnez $s4, .L7F04BC6C -/* 080794 7F04BC64 00000000 */ nop -/* 080798 7F04BC68 0007000D */ break 7 -.L7F04BC6C: -/* 08079C 7F04BC6C 012A5821 */ addu $t3, $t1, $t2 -/* 0807A0 7F04BC70 256DFFD8 */ addiu $t5, $t3, -0x28 -/* 0807A4 7F04BC74 A60D0004 */ sh $t5, 4($s0) -/* 0807A8 7F04BC78 8E6C0000 */ lw $t4, ($s3) -/* 0807AC 7F04BC7C 01918021 */ addu $s0, $t4, $s1 -/* 0807B0 7F04BC80 860E0002 */ lh $t6, 2($s0) -/* 0807B4 7F04BC84 01D6082A */ slt $at, $t6, $s6 -/* 0807B8 7F04BC88 50200003 */ beql $at, $zero, .L7F04BC98 -/* 0807BC 7F04BC8C 86B8000C */ lh $t8, 0xc($s5) -/* 0807C0 7F04BC90 A6160002 */ sh $s6, 2($s0) -/* 0807C4 7F04BC94 86B8000C */ lh $t8, 0xc($s5) -.L7F04BC98: -/* 0807C8 7F04BC98 26520001 */ addiu $s2, $s2, 1 -/* 0807CC 7F04BC9C 26310010 */ addiu $s1, $s1, 0x10 -/* 0807D0 7F04BCA0 0258082A */ slt $at, $s2, $t8 -/* 0807D4 7F04BCA4 5420FF6C */ bnezl $at, .L7F04BA58 -/* 0807D8 7F04BCA8 8EAE0008 */ lw $t6, 8($s5) -.L7F04BCAC: -/* 0807DC 7F04BCAC 8FBF003C */ lw $ra, 0x3c($sp) -.L7F04BCB0: -/* 0807E0 7F04BCB0 8FB00018 */ lw $s0, 0x18($sp) -/* 0807E4 7F04BCB4 8FB1001C */ lw $s1, 0x1c($sp) -/* 0807E8 7F04BCB8 8FB20020 */ lw $s2, 0x20($sp) -/* 0807EC 7F04BCBC 8FB30024 */ lw $s3, 0x24($sp) -/* 0807F0 7F04BCC0 8FB40028 */ lw $s4, 0x28($sp) -/* 0807F4 7F04BCC4 8FB5002C */ lw $s5, 0x2c($sp) -/* 0807F8 7F04BCC8 8FB60030 */ lw $s6, 0x30($sp) -/* 0807FC 7F04BCCC 8FB70034 */ lw $s7, 0x34($sp) -/* 080800 7F04BCD0 8FBE0038 */ lw $fp, 0x38($sp) -/* 080804 7F04BCD4 03E00008 */ jr $ra -/* 080808 7F04BCD8 27BD0098 */ addiu $sp, $sp, 0x98 -) + if (randomGetNext() & 1) + { + deformseed = (u16) object_explosion_details[obj->obj].Seed[explosiontype]; + } + else + { + deformseed = (u16) object_explosion_details[obj->obj].Seed[ymid = explosiontype + 3]; + } #endif + + if (get_debug_explosioninfo_flag() || (deformseed == 0)) + { + get_debug_explosioninfo_flag(); + deformseed = randomGetNext(); + + if (get_debug_explosioninfo_flag()) + { + deformseed &= 0xffff; + } + } + + explosionClearBulletImpactRoom(obj->prop); + + if (obj->obj == PROP_TV_HOLDER) + { + adjust_height = 0; + } + else + { + adjust_height = 1; + } + + newverts = vtxstore_allocate(rodata->numVertices, 0x0b0b, model->obj, objGetDestroyedLevel(obj)); + + if (newverts != NULL) + { + if ((*vtxslot) != rodata->Vertices) + { + for (i = 0, offset = 0; i < rodata->numVertices; i++, offset += sizeof(Vertex)) + { + *((Word4 *) (((u8 *) newverts) + offset)) = *((Word4 *) (((u8 *) (*vtxslot)) + offset)); + } + + sub_GAME_7F09C044(*vtxslot); + } + else + { + for (i = 0, offset = 0; i < ((0, rodata))->numVertices; i++, offset += sizeof(Vertex)) + { + *((Word4 *) (((u8 *) newverts) + offset)) = *((Word4 *) (((u8 *) rodata->Vertices) + offset)); + } + } + + *vtxslot = newverts; + } + else + { + if ((*vtxslot) != rodata->Vertices) + { + sub_GAME_7F09C044(*vtxslot); + *vtxslot = rodata->Vertices; + obj->runtime_bitflags |= 4; + } + + shrink = 0.85000002f; + obj->mtx.m[1][0] *= shrink; + obj->mtx.m[1][1] *= shrink; + obj->mtx.m[1][2] *= shrink; + + if (!adjust_height) + { + return; + } + + node = (ModelNode *) obj->model->obj; + modelscale = obj->model->scale; + node = (ModelNode *) chrobjGetBboxFromObjFile((ModelFileHeader *) node); + obj->prop->pos.y += (modelscale * chrpropBBOXGetYmin((ModelRoData_BoundingBoxRecord *) node)) * 0.15000001f; + obj->runtime_pos.y += (modelscale * chrpropBBOXGetYmin((ModelRoData_BoundingBoxRecord *) node)) * 0.15000001f; + return; + } + + // The gray desks and wood table are exempt from blackening. DESK2 is not used in the vanilla game. + if (((obj->obj == PROP_DESK1) || (obj->obj == PROP_DESK2)) || (obj->obj == PROP_WOODEN_TABLE1)) + { + allow_blackening = FALSE; + } + else + { + allow_blackening = TRUE; + } + + if (rodata->numVertices > 0) + { + i = 0; + offset = 0; + + do + { + if (((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.y < ymin) + { + ymin = ((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.y; + } + + if (ymax < ((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.y) + { + ymax = ((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.y; + } + + i++; + offset += sizeof(Vertex); + + } while (offset < (rodata->numVertices << 4)); + } + + i = 0; + ymid = (ymin + ymax) >> 1; #ifdef VERSION_EU -GLOBAL_ASM( -.text -glabel objDeform -/* 07E1DC 7F04B7EC 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 07E1E0 7F04B7F0 AFB60030 */ sw $s6, 0x30($sp) -/* 07E1E4 7F04B7F4 AFB40028 */ sw $s4, 0x28($sp) -/* 07E1E8 7F04B7F8 AFBF003C */ sw $ra, 0x3c($sp) -/* 07E1EC 7F04B7FC AFBE0038 */ sw $fp, 0x38($sp) -/* 07E1F0 7F04B800 AFB70034 */ sw $s7, 0x34($sp) -/* 07E1F4 7F04B804 AFB5002C */ sw $s5, 0x2c($sp) -/* 07E1F8 7F04B808 AFB30024 */ sw $s3, 0x24($sp) -/* 07E1FC 7F04B80C AFB20020 */ sw $s2, 0x20($sp) -/* 07E200 7F04B810 AFB1001C */ sw $s1, 0x1c($sp) -/* 07E204 7F04B814 AFB00018 */ sw $s0, 0x18($sp) -/* 07E208 7F04B818 AFA5009C */ sw $a1, 0x9c($sp) -/* 07E20C 7F04B81C 3C14FFFE */ lui $s4, (0xFFFE7961 >> 16) # lui $s4, 0xfffe -/* 07E210 7F04B820 3C160001 */ li $s6, 0x00010000 # 0.000000 -/* 07E214 7F04B824 0080F025 */ move $fp, $a0 -/* 07E218 7F04B828 8C900014 */ lw $s0, 0x14($a0) -/* 07E21C 7F04B82C 36D6869F */ ori $s6, (0x0001869F & 0xFFFF) # ori $s6, $s6, 0x869f -/* 07E220 7F04B830 0FC12D95 */ jal sub_GAME_7F04B478 -/* 07E224 7F04B834 36947961 */ ori $s4, (0xFFFE7961 & 0xFFFF) # ori $s4, $s4, 0x7961 -/* 07E228 7F04B838 10400199 */ beqz $v0, .L7F04BEA0 -/* 07E22C 7F04B83C 00402825 */ move $a1, $v0 -/* 07E230 7F04B840 8C550004 */ lw $s5, 4($v0) -/* 07E234 7F04B844 52A00197 */ beql $s5, $zero, .L7F04BEA4 -/* 07E238 7F04B848 8FBF003C */ lw $ra, 0x3c($sp) -/* 07E23C 7F04B84C 8FCE0014 */ lw $t6, 0x14($fp) -/* 07E240 7F04B850 0FC12DDB */ jal sub_GAME_7F04B590 -/* 07E244 7F04B854 8DC40008 */ lw $a0, 8($t6) -/* 07E248 7F04B858 50400192 */ beql $v0, $zero, .L7F04BEA4 -/* 07E24C 7F04B85C 8FBF003C */ lw $ra, 0x3c($sp) -/* 07E250 7F04B860 96B8001A */ lhu $t8, 0x1a($s5) -/* 07E254 7F04B864 87C80004 */ lh $t0, 4($fp) -/* 07E258 7F04B868 8E0F0010 */ lw $t7, 0x10($s0) -/* 07E25C 7F04B86C 0018C880 */ sll $t9, $t8, 2 -/* 07E260 7F04B870 29010068 */ slti $at, $t0, 0x68 -/* 07E264 7F04B874 1020001D */ beqz $at, .L7F04B8EC -/* 07E268 7F04B878 01F99821 */ addu $s3, $t7, $t9 -/* 07E26C 7F04B87C 0C00262C */ jal randomGetNext -/* 07E270 7F04B880 00000000 */ nop -/* 07E274 7F04B884 30490001 */ andi $t1, $v0, 1 -/* 07E278 7F04B888 1120000D */ beqz $t1, .L7F04B8C0 -/* 07E27C 7F04B88C 8FA8009C */ lw $t0, 0x9c($sp) -/* 07E280 7F04B890 87CA0004 */ lh $t2, 4($fp) -/* 07E284 7F04B894 8FAC009C */ lw $t4, 0x9c($sp) -/* 07E288 7F04B898 3C188003 */ lui $t8, %hi(object_explosion_details+2) -/* 07E28C 7F04B89C 000A5880 */ sll $t3, $t2, 2 -/* 07E290 7F04B8A0 016A5823 */ subu $t3, $t3, $t2 -/* 07E294 7F04B8A4 000B5880 */ sll $t3, $t3, 2 -/* 07E298 7F04B8A8 000C6840 */ sll $t5, $t4, 1 -/* 07E29C 7F04B8AC 016D7021 */ addu $t6, $t3, $t5 -/* 07E2A0 7F04B8B0 030EC021 */ addu $t8, $t8, $t6 -/* 07E2A4 7F04B8B4 97185EDC */ lhu $t8, %lo(object_explosion_details+344)($t8) -/* 07E2A8 7F04B8B8 1000000D */ b .L7F04B8F0 -/* 07E2AC 7F04B8BC AFB80078 */ sw $t8, 0x78($sp) -.L7F04B8C0: -/* 07E2B0 7F04B8C0 87CF0004 */ lh $t7, 4($fp) -/* 07E2B4 7F04B8C4 00084840 */ sll $t1, $t0, 1 -/* 07E2B8 7F04B8C8 3C0C8003 */ lui $t4, %hi(object_explosion_details+8) -/* 07E2BC 7F04B8CC 000FC880 */ sll $t9, $t7, 2 -/* 07E2C0 7F04B8D0 032FC823 */ subu $t9, $t9, $t7 -/* 07E2C4 7F04B8D4 0019C880 */ sll $t9, $t9, 2 -/* 07E2C8 7F04B8D8 03295021 */ addu $t2, $t9, $t1 -/* 07E2CC 7F04B8DC 018A6021 */ addu $t4, $t4, $t2 -/* 07E2D0 7F04B8E0 958C5EE2 */ lhu $t4, %lo(object_explosion_details+350)($t4) -/* 07E2D4 7F04B8E4 10000002 */ b .L7F04B8F0 -/* 07E2D8 7F04B8E8 AFAC0078 */ sw $t4, 0x78($sp) -.L7F04B8EC: -/* 07E2DC 7F04B8EC AFA00078 */ sw $zero, 0x78($sp) -.L7F04B8F0: -/* 07E2E0 7F04B8F0 0FC24118 */ jal get_debug_explosioninfo_flag -/* 07E2E4 7F04B8F4 00000000 */ nop -/* 07E2E8 7F04B8F8 14400003 */ bnez $v0, .L7F04B908 -/* 07E2EC 7F04B8FC 8FAB0078 */ lw $t3, 0x78($sp) -/* 07E2F0 7F04B900 1560000B */ bnez $t3, .L7F04B930 -/* 07E2F4 7F04B904 00000000 */ nop -.L7F04B908: -/* 07E2F8 7F04B908 0FC24118 */ jal get_debug_explosioninfo_flag -/* 07E2FC 7F04B90C 00000000 */ nop -/* 07E300 7F04B910 0C00262C */ jal randomGetNext -/* 07E304 7F04B914 00000000 */ nop -/* 07E308 7F04B918 0FC24118 */ jal get_debug_explosioninfo_flag -/* 07E30C 7F04B91C AFA20078 */ sw $v0, 0x78($sp) -/* 07E310 7F04B920 10400003 */ beqz $v0, .L7F04B930 -/* 07E314 7F04B924 8FAD0078 */ lw $t5, 0x78($sp) -/* 07E318 7F04B928 31AEFFFF */ andi $t6, $t5, 0xffff -/* 07E31C 7F04B92C AFAE0078 */ sw $t6, 0x78($sp) -.L7F04B930: -/* 07E320 7F04B930 0FC280B5 */ jal explosionClearBulletImpactRoom -/* 07E324 7F04B934 8FC40010 */ lw $a0, 0x10($fp) -/* 07E328 7F04B938 87D80004 */ lh $t8, 4($fp) -/* 07E32C 7F04B93C 2401004C */ li $at, 76 -/* 07E330 7F04B940 24170001 */ li $s7, 1 -/* 07E334 7F04B944 17010003 */ bne $t8, $at, .L7F04B954 -/* 07E338 7F04B948 00000000 */ nop -/* 07E33C 7F04B94C 10000001 */ b .L7F04B954 -/* 07E340 7F04B950 0000B825 */ move $s7, $zero -.L7F04B954: -/* 07E344 7F04B954 0FC10020 */ jal objGetDestroyedLevel -/* 07E348 7F04B958 03C02025 */ move $a0, $fp -/* 07E34C 7F04B95C 86A4000C */ lh $a0, 0xc($s5) -/* 07E350 7F04B960 24050B0B */ li $a1, 2827 -/* 07E354 7F04B964 8E060008 */ lw $a2, 8($s0) -/* 07E358 7F04B968 0FC26CE3 */ jal sub_GAME_7F09BE4C -/* 07E35C 7F04B96C 00403825 */ move $a3, $v0 -/* 07E360 7F04B970 1040003A */ beqz $v0, .L7F04BA5C -/* 07E364 7F04B974 00408025 */ move $s0, $v0 -/* 07E368 7F04B978 8E640000 */ lw $a0, ($s3) -/* 07E36C 7F04B97C 8EAF0008 */ lw $t7, 8($s5) -/* 07E370 7F04B980 51E4001E */ beql $t7, $a0, .L7F04B9FC -/* 07E374 7F04B984 86AD000C */ lh $t5, 0xc($s5) -/* 07E378 7F04B988 86A8000C */ lh $t0, 0xc($s5) -/* 07E37C 7F04B98C 00009025 */ move $s2, $zero -/* 07E380 7F04B990 00008825 */ move $s1, $zero -/* 07E384 7F04B994 19000014 */ blez $t0, .L7F04B9E8 -/* 07E388 7F04B998 00401825 */ move $v1, $v0 -/* 07E38C 7F04B99C 8E790000 */ lw $t9, ($s3) -.L7F04B9A0: -/* 07E390 7F04B9A0 26520001 */ addiu $s2, $s2, 1 -/* 07E394 7F04B9A4 24630010 */ addiu $v1, $v1, 0x10 -/* 07E398 7F04B9A8 03314821 */ addu $t1, $t9, $s1 -/* 07E39C 7F04B9AC 8D210000 */ lw $at, ($t1) -/* 07E3A0 7F04B9B0 26310010 */ addiu $s1, $s1, 0x10 -/* 07E3A4 7F04B9B4 AC61FFF0 */ sw $at, -0x10($v1) -/* 07E3A8 7F04B9B8 8D2C0004 */ lw $t4, 4($t1) -/* 07E3AC 7F04B9BC AC6CFFF4 */ sw $t4, -0xc($v1) -/* 07E3B0 7F04B9C0 8D210008 */ lw $at, 8($t1) -/* 07E3B4 7F04B9C4 AC61FFF8 */ sw $at, -8($v1) -/* 07E3B8 7F04B9C8 8D2C000C */ lw $t4, 0xc($t1) -/* 07E3BC 7F04B9CC AC6CFFFC */ sw $t4, -4($v1) -/* 07E3C0 7F04B9D0 86AB000C */ lh $t3, 0xc($s5) -/* 07E3C4 7F04B9D4 024B082A */ slt $at, $s2, $t3 -/* 07E3C8 7F04B9D8 5420FFF1 */ bnezl $at, .L7F04B9A0 -/* 07E3CC 7F04B9DC 8E790000 */ lw $t9, ($s3) -/* 07E3D0 7F04B9E0 8E640000 */ lw $a0, ($s3) -/* 07E3D4 7F04B9E4 00009025 */ move $s2, $zero -.L7F04B9E8: -/* 07E3D8 7F04B9E8 0FC26D61 */ jal sub_GAME_7F09C044 -/* 07E3DC 7F04B9EC 00000000 */ nop -/* 07E3E0 7F04B9F0 10000018 */ b .L7F04BA54 -/* 07E3E4 7F04B9F4 00000000 */ nop -/* 07E3E8 7F04B9F8 86AD000C */ lh $t5, 0xc($s5) -.L7F04B9FC: -/* 07E3EC 7F04B9FC 00009025 */ move $s2, $zero -/* 07E3F0 7F04BA00 00008825 */ move $s1, $zero -/* 07E3F4 7F04BA04 19A00013 */ blez $t5, .L7F04BA54 -/* 07E3F8 7F04BA08 00401825 */ move $v1, $v0 -/* 07E3FC 7F04BA0C 8EAE0008 */ lw $t6, 8($s5) -.L7F04BA10: -/* 07E400 7F04BA10 26520001 */ addiu $s2, $s2, 1 -/* 07E404 7F04BA14 24630010 */ addiu $v1, $v1, 0x10 -/* 07E408 7F04BA18 01D1C021 */ addu $t8, $t6, $s1 -/* 07E40C 7F04BA1C 8F010000 */ lw $at, ($t8) -/* 07E410 7F04BA20 26310010 */ addiu $s1, $s1, 0x10 -/* 07E414 7F04BA24 AC61FFF0 */ sw $at, -0x10($v1) -/* 07E418 7F04BA28 8F080004 */ lw $t0, 4($t8) -/* 07E41C 7F04BA2C AC68FFF4 */ sw $t0, -0xc($v1) -/* 07E420 7F04BA30 8F010008 */ lw $at, 8($t8) -/* 07E424 7F04BA34 AC61FFF8 */ sw $at, -8($v1) -/* 07E428 7F04BA38 8F08000C */ lw $t0, 0xc($t8) -/* 07E42C 7F04BA3C AC68FFFC */ sw $t0, -4($v1) -/* 07E430 7F04BA40 86B9000C */ lh $t9, 0xc($s5) -/* 07E434 7F04BA44 0259082A */ slt $at, $s2, $t9 -/* 07E438 7F04BA48 5420FFF1 */ bnezl $at, .L7F04BA10 -/* 07E43C 7F04BA4C 8EAE0008 */ lw $t6, 8($s5) -/* 07E440 7F04BA50 00009025 */ move $s2, $zero -.L7F04BA54: -/* 07E444 7F04BA54 10000036 */ b .L7F04BB30 -/* 07E448 7F04BA58 AE700000 */ sw $s0, ($s3) -.L7F04BA5C: -/* 07E44C 7F04BA5C 8E640000 */ lw $a0, ($s3) -/* 07E450 7F04BA60 8EAA0008 */ lw $t2, 8($s5) -/* 07E454 7F04BA64 11440008 */ beq $t2, $a0, .L7F04BA88 -/* 07E458 7F04BA68 00000000 */ nop -/* 07E45C 7F04BA6C 0FC26D61 */ jal sub_GAME_7F09C044 -/* 07E460 7F04BA70 00000000 */ nop -/* 07E464 7F04BA74 8EA90008 */ lw $t1, 8($s5) -/* 07E468 7F04BA78 AE690000 */ sw $t1, ($s3) -/* 07E46C 7F04BA7C 8FCC0064 */ lw $t4, 0x64($fp) -/* 07E470 7F04BA80 358B0004 */ ori $t3, $t4, 4 -/* 07E474 7F04BA84 AFCB0064 */ sw $t3, 0x64($fp) -.L7F04BA88: -/* 07E478 7F04BA88 3C018005 */ lui $at, %hi(D_80052CB4) # $at, 0x8005 -/* 07E47C 7F04BA8C C4208DF4 */ lwc1 $f0, %lo(D_80052CB4)($at) -/* 07E480 7F04BA90 C7C40028 */ lwc1 $f4, 0x28($fp) -/* 07E484 7F04BA94 C7C8002C */ lwc1 $f8, 0x2c($fp) -/* 07E488 7F04BA98 C7D00030 */ lwc1 $f16, 0x30($fp) -/* 07E48C 7F04BA9C 46002182 */ mul.s $f6, $f4, $f0 -/* 07E490 7F04BAA0 00000000 */ nop -/* 07E494 7F04BAA4 46004282 */ mul.s $f10, $f8, $f0 -/* 07E498 7F04BAA8 00000000 */ nop -/* 07E49C 7F04BAAC 46008482 */ mul.s $f18, $f16, $f0 -/* 07E4A0 7F04BAB0 E7C60028 */ swc1 $f6, 0x28($fp) -/* 07E4A4 7F04BAB4 E7CA002C */ swc1 $f10, 0x2c($fp) -/* 07E4A8 7F04BAB8 12E000F9 */ beqz $s7, .L7F04BEA0 -/* 07E4AC 7F04BABC E7D20030 */ swc1 $f18, 0x30($fp) -/* 07E4B0 7F04BAC0 8FC20014 */ lw $v0, 0x14($fp) -/* 07E4B4 7F04BAC4 C4440014 */ lwc1 $f4, 0x14($v0) -/* 07E4B8 7F04BAC8 8C440008 */ lw $a0, 8($v0) -/* 07E4BC 7F04BACC 0FC1002E */ jal chrobjGetBboxFromObjFile -/* 07E4C0 7F04BAD0 E7A4005C */ swc1 $f4, 0x5c($sp) -/* 07E4C4 7F04BAD4 00408025 */ move $s0, $v0 -/* 07E4C8 7F04BAD8 0FC0FA49 */ jal chrpropBBOXGetYmin -/* 07E4CC 7F04BADC 00402025 */ move $a0, $v0 -/* 07E4D0 7F04BAE0 C7A6005C */ lwc1 $f6, 0x5c($sp) -/* 07E4D4 7F04BAE4 3C018005 */ lui $at, %hi(D_80052CB8) # $at, 0x8005 -/* 07E4D8 7F04BAE8 C42A8DF8 */ lwc1 $f10, %lo(D_80052CB8)($at) -/* 07E4DC 7F04BAEC 46003202 */ mul.s $f8, $f6, $f0 -/* 07E4E0 7F04BAF0 8FC20010 */ lw $v0, 0x10($fp) -/* 07E4E4 7F04BAF4 02002025 */ move $a0, $s0 -/* 07E4E8 7F04BAF8 C452000C */ lwc1 $f18, 0xc($v0) -/* 07E4EC 7F04BAFC 460A4402 */ mul.s $f16, $f8, $f10 -/* 07E4F0 7F04BB00 46109100 */ add.s $f4, $f18, $f16 -/* 07E4F4 7F04BB04 0FC0FA49 */ jal chrpropBBOXGetYmin -/* 07E4F8 7F04BB08 E444000C */ swc1 $f4, 0xc($v0) -/* 07E4FC 7F04BB0C C7A6005C */ lwc1 $f6, 0x5c($sp) -/* 07E500 7F04BB10 3C018005 */ lui $at, %hi(D_80052CBC) # $at, 0x8005 -/* 07E504 7F04BB14 C42A8DFC */ lwc1 $f10, %lo(D_80052CBC)($at) -/* 07E508 7F04BB18 46003202 */ mul.s $f8, $f6, $f0 -/* 07E50C 7F04BB1C C7D0005C */ lwc1 $f16, 0x5c($fp) -/* 07E510 7F04BB20 460A4482 */ mul.s $f18, $f8, $f10 -/* 07E514 7F04BB24 46128100 */ add.s $f4, $f16, $f18 -/* 07E518 7F04BB28 100000DD */ b .L7F04BEA0 -/* 07E51C 7F04BB2C E7C4005C */ swc1 $f4, 0x5c($fp) -.L7F04BB30: -/* 07E520 7F04BB30 87C20004 */ lh $v0, 4($fp) -/* 07E524 7F04BB34 24010026 */ li $at, 38 -/* 07E528 7F04BB38 00008825 */ move $s1, $zero -/* 07E52C 7F04BB3C 10410005 */ beq $v0, $at, .L7F04BB54 -/* 07E530 7F04BB40 24010027 */ li $at, 39 -/* 07E534 7F04BB44 10410003 */ beq $v0, $at, .L7F04BB54 -/* 07E538 7F04BB48 24010055 */ li $at, 85 -/* 07E53C 7F04BB4C 14410003 */ bne $v0, $at, .L7F04BB5C -/* 07E540 7F04BB50 240D0001 */ li $t5, 1 -.L7F04BB54: -/* 07E544 7F04BB54 10000002 */ b .L7F04BB60 -/* 07E548 7F04BB58 AFA00070 */ sw $zero, 0x70($sp) -.L7F04BB5C: -/* 07E54C 7F04BB5C AFAD0070 */ sw $t5, 0x70($sp) -.L7F04BB60: -/* 07E550 7F04BB60 86A4000C */ lh $a0, 0xc($s5) -/* 07E554 7F04BB64 8FA5009C */ lw $a1, 0x9c($sp) -/* 07E558 7F04BB68 18800010 */ blez $a0, .L7F04BBAC -/* 07E55C 7F04BB6C 00041900 */ sll $v1, $a0, 4 -/* 07E560 7F04BB70 8E700000 */ lw $s0, ($s3) -.L7F04BB74: -/* 07E564 7F04BB74 86020002 */ lh $v0, 2($s0) -/* 07E568 7F04BB78 26310010 */ addiu $s1, $s1, 0x10 -/* 07E56C 7F04BB7C 0056082A */ slt $at, $v0, $s6 -/* 07E570 7F04BB80 50200003 */ beql $at, $zero, .L7F04BB90 -/* 07E574 7F04BB84 0282082A */ slt $at, $s4, $v0 -/* 07E578 7F04BB88 0040B025 */ move $s6, $v0 -/* 07E57C 7F04BB8C 0282082A */ slt $at, $s4, $v0 -.L7F04BB90: -/* 07E580 7F04BB90 50200003 */ beql $at, $zero, .L7F04BBA0 -/* 07E584 7F04BB94 0223082A */ slt $at, $s1, $v1 -/* 07E588 7F04BB98 0040A025 */ move $s4, $v0 -/* 07E58C 7F04BB9C 0223082A */ slt $at, $s1, $v1 -.L7F04BBA0: -/* 07E590 7F04BBA0 1420FFF4 */ bnez $at, .L7F04BB74 -/* 07E594 7F04BBA4 26100010 */ addiu $s0, $s0, 0x10 -/* 07E598 7F04BBA8 00009025 */ move $s2, $zero -.L7F04BBAC: -/* 07E59C 7F04BBAC 02D41021 */ addu $v0, $s6, $s4 -/* 07E5A0 7F04BBB0 00027043 */ sra $t6, $v0, 1 -/* 07E5A4 7F04BBB4 24010003 */ li $at, 3 -/* 07E5A8 7F04BBB8 14A10006 */ bne $a1, $at, .L7F04BBD4 -/* 07E5AC 7F04BBBC 01C01825 */ move $v1, $t6 -/* 07E5B0 7F04BBC0 01D67823 */ subu $t7, $t6, $s6 -/* 07E5B4 7F04BBC4 29E10029 */ slti $at, $t7, 0x29 -/* 07E5B8 7F04BBC8 54200003 */ bnezl $at, .L7F04BBD8 -/* 07E5BC 7F04BBCC 02961023 */ subu $v0, $s4, $s6 -/* 07E5C0 7F04BBD0 26C30028 */ addiu $v1, $s6, 0x28 -.L7F04BBD4: -/* 07E5C4 7F04BBD4 02961023 */ subu $v0, $s4, $s6 -.L7F04BBD8: -/* 07E5C8 7F04BBD8 2841003D */ slti $at, $v0, 0x3d -/* 07E5CC 7F04BBDC 1420000E */ bnez $at, .L7F04BC18 -/* 07E5D0 7F04BBE0 28A10003 */ slti $at, $a1, 3 -/* 07E5D4 7F04BBE4 10200005 */ beqz $at, .L7F04BBFC -/* 07E5D8 7F04BBE8 2458FFC4 */ addiu $t8, $v0, -0x3c -/* 07E5DC 7F04BBEC 3C018005 */ lui $at, %hi(D_80052CC0) # $at, 0x8005 -/* 07E5E0 7F04BBF0 C4268E00 */ lwc1 $f6, %lo(D_80052CC0)($at) -/* 07E5E4 7F04BBF4 1000000C */ b .L7F04BC28 -/* 07E5E8 7F04BBF8 E7A60068 */ swc1 $f6, 0x68($sp) -.L7F04BBFC: -/* 07E5EC 7F04BBFC 44984000 */ mtc1 $t8, $f8 -/* 07E5F0 7F04BC00 44828000 */ mtc1 $v0, $f16 -/* 07E5F4 7F04BC04 468042A0 */ cvt.s.w $f10, $f8 -/* 07E5F8 7F04BC08 468084A0 */ cvt.s.w $f18, $f16 -/* 07E5FC 7F04BC0C 46125103 */ div.s $f4, $f10, $f18 -/* 07E600 7F04BC10 10000005 */ b .L7F04BC28 -/* 07E604 7F04BC14 E7A40068 */ swc1 $f4, 0x68($sp) -.L7F04BC18: -/* 07E608 7F04BC18 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 07E60C 7F04BC1C 44813000 */ mtc1 $at, $f6 -/* 07E610 7F04BC20 00000000 */ nop -/* 07E614 7F04BC24 E7A60068 */ swc1 $f6, 0x68($sp) -.L7F04BC28: -/* 07E618 7F04BC28 5880009E */ blezl $a0, .L7F04BEA4 -/* 07E61C 7F04BC2C 8FBF003C */ lw $ra, 0x3c($sp) -/* 07E620 7F04BC30 44964000 */ mtc1 $s6, $f8 -/* 07E624 7F04BC34 00008825 */ move $s1, $zero -/* 07E628 7F04BC38 AFA3007C */ sw $v1, 0x7c($sp) -/* 07E62C 7F04BC3C 46804420 */ cvt.s.w $f16, $f8 -/* 07E630 7F04BC40 24140050 */ li $s4, 80 -/* 07E634 7F04BC44 E7B00044 */ swc1 $f16, 0x44($sp) -/* 07E638 7F04BC48 8EA80008 */ lw $t0, 8($s5) -.L7F04BC4C: -/* 07E63C 7F04BC4C 8FAD0078 */ lw $t5, 0x78($sp) -/* 07E640 7F04BC50 01111021 */ addu $v0, $t0, $s1 -/* 07E644 7F04BC54 84590004 */ lh $t9, 4($v0) -/* 07E648 7F04BC58 844A0000 */ lh $t2, ($v0) -/* 07E64C 7F04BC5C 844C0002 */ lh $t4, 2($v0) -/* 07E650 7F04BC60 032A4821 */ addu $t1, $t9, $t2 -/* 07E654 7F04BC64 012C5821 */ addu $t3, $t1, $t4 -/* 07E658 7F04BC68 0FC26B32 */ jal chrObjRandomSetSeed -/* 07E65C 7F04BC6C 016D2021 */ addu $a0, $t3, $t5 -/* 07E660 7F04BC70 8FAE0070 */ lw $t6, 0x70($sp) -/* 07E664 7F04BC74 00008025 */ move $s0, $zero -/* 07E668 7F04BC78 11C0002E */ beqz $t6, .L7F04BD34 -/* 07E66C 7F04BC7C 00000000 */ nop -/* 07E670 7F04BC80 C7CA002C */ lwc1 $f10, 0x2c($fp) -/* 07E674 7F04BC84 44809000 */ mtc1 $zero, $f18 -/* 07E678 7F04BC88 00000000 */ nop -/* 07E67C 7F04BC8C 460A903E */ c.le.s $f18, $f10 -/* 07E680 7F04BC90 00000000 */ nop -/* 07E684 7F04BC94 45020015 */ bc1fl .L7F04BCEC -/* 07E688 7F04BC98 8E690000 */ lw $t1, ($s3) -/* 07E68C 7F04BC9C 8E6F0000 */ lw $t7, ($s3) -/* 07E690 7F04BCA0 8FB9007C */ lw $t9, 0x7c($sp) -/* 07E694 7F04BCA4 01F1C021 */ addu $t8, $t7, $s1 -/* 07E698 7F04BCA8 87080002 */ lh $t0, 2($t8) -/* 07E69C 7F04BCAC 0119082A */ slt $at, $t0, $t9 -/* 07E6A0 7F04BCB0 14200007 */ bnez $at, .L7F04BCD0 -/* 07E6A4 7F04BCB4 00000000 */ nop -/* 07E6A8 7F04BCB8 12E00003 */ beqz $s7, .L7F04BCC8 -/* 07E6AC 7F04BCBC 00000000 */ nop -/* 07E6B0 7F04BCC0 1000001C */ b .L7F04BD34 -/* 07E6B4 7F04BCC4 2410005A */ li $s0, 90 -.L7F04BCC8: -/* 07E6B8 7F04BCC8 1000001A */ b .L7F04BD34 -/* 07E6BC 7F04BCCC 24100014 */ li $s0, 20 -.L7F04BCD0: -/* 07E6C0 7F04BCD0 12E00003 */ beqz $s7, .L7F04BCE0 -/* 07E6C4 7F04BCD4 00000000 */ nop -/* 07E6C8 7F04BCD8 10000016 */ b .L7F04BD34 -/* 07E6CC 7F04BCDC 24100014 */ li $s0, 20 -.L7F04BCE0: -/* 07E6D0 7F04BCE0 10000014 */ b .L7F04BD34 -/* 07E6D4 7F04BCE4 2410005A */ li $s0, 90 -/* 07E6D8 7F04BCE8 8E690000 */ lw $t1, ($s3) -.L7F04BCEC: -/* 07E6DC 7F04BCEC 8FAA007C */ lw $t2, 0x7c($sp) -/* 07E6E0 7F04BCF0 01316021 */ addu $t4, $t1, $s1 -/* 07E6E4 7F04BCF4 858B0002 */ lh $t3, 2($t4) -/* 07E6E8 7F04BCF8 014B082A */ slt $at, $t2, $t3 -/* 07E6EC 7F04BCFC 14200007 */ bnez $at, .L7F04BD1C -/* 07E6F0 7F04BD00 00000000 */ nop -/* 07E6F4 7F04BD04 12E00003 */ beqz $s7, .L7F04BD14 -/* 07E6F8 7F04BD08 00000000 */ nop -/* 07E6FC 7F04BD0C 10000009 */ b .L7F04BD34 -/* 07E700 7F04BD10 2410005A */ li $s0, 90 -.L7F04BD14: -/* 07E704 7F04BD14 10000007 */ b .L7F04BD34 -/* 07E708 7F04BD18 24100014 */ li $s0, 20 -.L7F04BD1C: -/* 07E70C 7F04BD1C 12E00003 */ beqz $s7, .L7F04BD2C -/* 07E710 7F04BD20 00000000 */ nop -/* 07E714 7F04BD24 10000003 */ b .L7F04BD34 -/* 07E718 7F04BD28 24100014 */ li $s0, 20 -.L7F04BD2C: -/* 07E71C 7F04BD2C 10000001 */ b .L7F04BD34 -/* 07E720 7F04BD30 2410005A */ li $s0, 90 -.L7F04BD34: -/* 07E724 7F04BD34 0FC26B20 */ jal chrObjRandomGetNext -/* 07E728 7F04BD38 00000000 */ nop -/* 07E72C 7F04BD3C 24010064 */ li $at, 100 -/* 07E730 7F04BD40 0041001B */ divu $zero, $v0, $at -/* 07E734 7F04BD44 00006810 */ mfhi $t5 -/* 07E738 7F04BD48 01B0082A */ slt $at, $t5, $s0 -/* 07E73C 7F04BD4C 1020000F */ beqz $at, .L7F04BD8C -/* 07E740 7F04BD50 8FAD009C */ lw $t5, 0x9c($sp) -/* 07E744 7F04BD54 8E6E0000 */ lw $t6, ($s3) -/* 07E748 7F04BD58 240C00FF */ li $t4, 255 -/* 07E74C 7F04BD5C 01D17821 */ addu $t7, $t6, $s1 -/* 07E750 7F04BD60 A1E0000C */ sb $zero, 0xc($t7) -/* 07E754 7F04BD64 8E780000 */ lw $t8, ($s3) -/* 07E758 7F04BD68 03114021 */ addu $t0, $t8, $s1 -/* 07E75C 7F04BD6C A100000D */ sb $zero, 0xd($t0) -/* 07E760 7F04BD70 8E790000 */ lw $t9, ($s3) -/* 07E764 7F04BD74 03314821 */ addu $t1, $t9, $s1 -/* 07E768 7F04BD78 A120000E */ sb $zero, 0xe($t1) -/* 07E76C 7F04BD7C 8E6A0000 */ lw $t2, ($s3) -/* 07E770 7F04BD80 01515821 */ addu $t3, $t2, $s1 -/* 07E774 7F04BD84 10000007 */ b .L7F04BDA4 -/* 07E778 7F04BD88 A16C000F */ sb $t4, 0xf($t3) -.L7F04BD8C: -/* 07E77C 7F04BD8C 24010001 */ li $at, 1 -/* 07E780 7F04BD90 55A10005 */ bnel $t5, $at, .L7F04BDA8 -/* 07E784 7F04BD94 8E780000 */ lw $t8, ($s3) -/* 07E788 7F04BD98 8E6E0000 */ lw $t6, ($s3) -/* 07E78C 7F04BD9C 01D17821 */ addu $t7, $t6, $s1 -/* 07E790 7F04BDA0 A1E0000F */ sb $zero, 0xf($t7) -.L7F04BDA4: -/* 07E794 7F04BDA4 8E780000 */ lw $t8, ($s3) -.L7F04BDA8: -/* 07E798 7F04BDA8 C7A80068 */ lwc1 $f8, 0x68($sp) -/* 07E79C 7F04BDAC C7AA0044 */ lwc1 $f10, 0x44($sp) -/* 07E7A0 7F04BDB0 03118021 */ addu $s0, $t8, $s1 -/* 07E7A4 7F04BDB4 86080002 */ lh $t0, 2($s0) -/* 07E7A8 7F04BDB8 0116C823 */ subu $t9, $t0, $s6 -/* 07E7AC 7F04BDBC 44992000 */ mtc1 $t9, $f4 -/* 07E7B0 7F04BDC0 00000000 */ nop -/* 07E7B4 7F04BDC4 468021A0 */ cvt.s.w $f6, $f4 -/* 07E7B8 7F04BDC8 46083402 */ mul.s $f16, $f6, $f8 -/* 07E7BC 7F04BDCC 460A8480 */ add.s $f18, $f16, $f10 -/* 07E7C0 7F04BDD0 4600910D */ trunc.w.s $f4, $f18 -/* 07E7C4 7F04BDD4 440A2000 */ mfc1 $t2, $f4 -/* 07E7C8 7F04BDD8 0FC26B20 */ jal chrObjRandomGetNext -/* 07E7CC 7F04BDDC A60A0002 */ sh $t2, 2($s0) -/* 07E7D0 7F04BDE0 0054001B */ divu $zero, $v0, $s4 -/* 07E7D4 7F04BDE4 8E6C0000 */ lw $t4, ($s3) -/* 07E7D8 7F04BDE8 00006810 */ mfhi $t5 -/* 07E7DC 7F04BDEC 01918021 */ addu $s0, $t4, $s1 -/* 07E7E0 7F04BDF0 860B0000 */ lh $t3, ($s0) -/* 07E7E4 7F04BDF4 16800002 */ bnez $s4, .L7F04BE00 -/* 07E7E8 7F04BDF8 00000000 */ nop -/* 07E7EC 7F04BDFC 0007000D */ break 7 -.L7F04BE00: -/* 07E7F0 7F04BE00 016D7021 */ addu $t6, $t3, $t5 -/* 07E7F4 7F04BE04 25CFFFD8 */ addiu $t7, $t6, -0x28 -/* 07E7F8 7F04BE08 0FC26B20 */ jal chrObjRandomGetNext -/* 07E7FC 7F04BE0C A60F0000 */ sh $t7, ($s0) -/* 07E800 7F04BE10 0054001B */ divu $zero, $v0, $s4 -/* 07E804 7F04BE14 8E780000 */ lw $t8, ($s3) -/* 07E808 7F04BE18 0000C810 */ mfhi $t9 -/* 07E80C 7F04BE1C 03118021 */ addu $s0, $t8, $s1 -/* 07E810 7F04BE20 86080002 */ lh $t0, 2($s0) -/* 07E814 7F04BE24 16800002 */ bnez $s4, .L7F04BE30 -/* 07E818 7F04BE28 00000000 */ nop -/* 07E81C 7F04BE2C 0007000D */ break 7 -.L7F04BE30: -/* 07E820 7F04BE30 01194821 */ addu $t1, $t0, $t9 -/* 07E824 7F04BE34 252AFFD8 */ addiu $t2, $t1, -0x28 -/* 07E828 7F04BE38 0FC26B20 */ jal chrObjRandomGetNext -/* 07E82C 7F04BE3C A60A0002 */ sh $t2, 2($s0) -/* 07E830 7F04BE40 0054001B */ divu $zero, $v0, $s4 -/* 07E834 7F04BE44 8E6C0000 */ lw $t4, ($s3) -/* 07E838 7F04BE48 00006810 */ mfhi $t5 -/* 07E83C 7F04BE4C 01918021 */ addu $s0, $t4, $s1 -/* 07E840 7F04BE50 860B0004 */ lh $t3, 4($s0) -/* 07E844 7F04BE54 16800002 */ bnez $s4, .L7F04BE60 -/* 07E848 7F04BE58 00000000 */ nop -/* 07E84C 7F04BE5C 0007000D */ break 7 -.L7F04BE60: -/* 07E850 7F04BE60 016D7021 */ addu $t6, $t3, $t5 -/* 07E854 7F04BE64 25CFFFD8 */ addiu $t7, $t6, -0x28 -/* 07E858 7F04BE68 A60F0004 */ sh $t7, 4($s0) -/* 07E85C 7F04BE6C 8E780000 */ lw $t8, ($s3) -/* 07E860 7F04BE70 03118021 */ addu $s0, $t8, $s1 -/* 07E864 7F04BE74 86080002 */ lh $t0, 2($s0) -/* 07E868 7F04BE78 0116082A */ slt $at, $t0, $s6 -/* 07E86C 7F04BE7C 50200003 */ beql $at, $zero, .L7F04BE8C -/* 07E870 7F04BE80 86B9000C */ lh $t9, 0xc($s5) -/* 07E874 7F04BE84 A6160002 */ sh $s6, 2($s0) -/* 07E878 7F04BE88 86B9000C */ lh $t9, 0xc($s5) -.L7F04BE8C: -/* 07E87C 7F04BE8C 26520001 */ addiu $s2, $s2, 1 -/* 07E880 7F04BE90 26310010 */ addiu $s1, $s1, 0x10 -/* 07E884 7F04BE94 0259082A */ slt $at, $s2, $t9 -/* 07E888 7F04BE98 5420FF6C */ bnezl $at, .L7F04BC4C -/* 07E88C 7F04BE9C 8EA80008 */ lw $t0, 8($s5) -.L7F04BEA0: -/* 07E890 7F04BEA0 8FBF003C */ lw $ra, 0x3c($sp) -.L7F04BEA4: -/* 07E894 7F04BEA4 8FB00018 */ lw $s0, 0x18($sp) -/* 07E898 7F04BEA8 8FB1001C */ lw $s1, 0x1c($sp) -/* 07E89C 7F04BEAC 8FB20020 */ lw $s2, 0x20($sp) -/* 07E8A0 7F04BEB0 8FB30024 */ lw $s3, 0x24($sp) -/* 07E8A4 7F04BEB4 8FB40028 */ lw $s4, 0x28($sp) -/* 07E8A8 7F04BEB8 8FB5002C */ lw $s5, 0x2c($sp) -/* 07E8AC 7F04BEBC 8FB60030 */ lw $s6, 0x30($sp) -/* 07E8B0 7F04BEC0 8FB70034 */ lw $s7, 0x34($sp) -/* 07E8B4 7F04BEC4 8FBE0038 */ lw $fp, 0x38($sp) -/* 07E8B8 7F04BEC8 03E00008 */ jr $ra -/* 07E8BC 7F04BECC 27BD0098 */ addiu $sp, $sp, 0x98 -) + if (explosiontype == EXPLOSION_MEDIUM2) +#else + if ((explosiontype * 2) == EXPLOSION_SMALL) #endif + { + if ((ymid - ymin) >= 41) + { + ymid = ymin + 40; + } + } + if ((ymax - ymin) >= 61) + { +#ifdef VERSION_EU + if (explosiontype < EXPLOSION_MEDIUM2) +#else + if ((explosiontype * 2) < EXPLOSION_SMALL) #endif + { + yscale = 0.89999998f; + } + else + { + yscale = ((f32) ((ymax - ymin) - 60)) / ((f32) (ymax - ymin)); + } + } + else + { + yscale = 1.0f; + } + + if (rodata->numVertices <= 0) + { + return; + } + + offset = 0; + + do + { + chrObjRandomSetSeed(((((Vertex *) (((u8 *) rodata->Vertices) + offset))->coord.z + ((Vertex *) (((u8 *) rodata->Vertices) + offset))->coord.x) + ((Vertex *) (((u8 *) rodata->Vertices) + offset))->coord.y) + deformseed); + chance = 0; + + if (allow_blackening) + { + if (obj->mtx.m[1][1] >= 0.0f) + { + if (((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.y >= ymid) + { + if (adjust_height) + { + chance = 90; + } + else + { + chance = 20; + } + } + else if (adjust_height) + { + chance = 20; + } + else + { + chance = 90; + } + } + else if ((ymid ^ 0) >= ((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.y) + { + if (adjust_height) + { + chance = 90; + } + else + { + chance = 20; + } + } + else if (adjust_height) + { + chance = 20; + } + else + { + chance = 90; + } + } + else + { + chance = 0; + } + + if (1) + { + if (((s32) (chrObjRandomGetNext() % 100)) < chance) + { + ((Vertex *) (((u8 *) (*vtxslot)) + offset))->r = 0; + ((Vertex *) (((u8 *) (*vtxslot)) + offset))->g = 0; + ((Vertex *) (((u8 *) (*vtxslot)) + offset))->b = 0; + ((Vertex *) (((u8 *) (*vtxslot)) + offset))->a = 255; + } + else +#ifdef VERSION_EU + if (explosiontype == EXPLOSION_BREAK_OBJECT2) +#else + if ((explosiontype * 2) == EXPLOSION_MEDIUM) +#endif + { + ((Vertex *) (((u8 *) (*vtxslot)) + offset))->a = 0; + } + + ((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.y = (((f32) (((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.y - ymin)) * yscale) + ((f32) ymin); + ((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.x += (chrObjRandomGetNext() % 80) - 40; + ((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.y += (chrObjRandomGetNext() % 80) - 40; + ((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.z += (chrObjRandomGetNext() % 80) - 40; + + if (((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.y < ymin) + { + ((Vertex *) (((u8 *) (*vtxslot)) + offset))->coord.y = ymin; + } + + i++; + offset += sizeof(Vertex); + } + } while (i < rodata->numVertices); +} void objBounce(ObjectRecord *obj, coord3d *arg1) @@ -29361,7 +7895,7 @@ void objBounce(ObjectRecord *obj, coord3d *arg1) if (obj->runtime_bitflags & RUNTIMEBITFLAG_EMBEDDED) { projectile = obj->embedment->projectile; - } else if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) { + } else if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) { projectile = obj->projectile; } @@ -29388,11 +7922,11 @@ void objBounce(ObjectRecord *obj, coord3d *arg1) dir.y = arg1->y; dir.z = arg1->z; - mtx4RotateVecInPlace(currentPlayerGetMatrix10D4(), (f32*)&dir); + mtx4RotateVecInPlace(currentPlayerGetViewToWorldMtxf(), (f32*)&dir); projectile->speed.x += 3.3333333f * dir.x; projectile->speed.z += 3.3333333f * dir.z; - projectile->ownerprop = get_curplayer_positiondata(); + projectile->ownerprop = getCurrentPlayerProp(); projectile->unk90 = 1; } } @@ -29412,7 +7946,7 @@ void propobjSetDropped(PropRecord *prop, DROPTYPE droptype) { obj->embedment->projectile->droptype = droptype; } - else if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) + else if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) { obj->projectile->droptype = droptype; } @@ -29478,10 +8012,10 @@ s32 objDrop(PropRecord *prop) obj->projectile = projectile2; obj->runtime_bitflags &= ~RUNTIMEBITFLAG_EMBEDDED; - obj->runtime_bitflags |= RUNTIMEBITFLAG_DEPOSIT; + obj->runtime_bitflags |= RUNTIMEBITFLAG_HASPROJECTILE; } - if (parent && (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT)) + if (parent && (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE)) { model = obj->model; projectile = obj->projectile; @@ -29541,7 +8075,7 @@ s32 objDrop(PropRecord *prop) else if (projectile->droptype == DROPTYPE_HAT) { coord3d rot = { 0.0f, 0.0f, 0.0f }; - PropRecord *playerprop = get_curplayer_positiondata(); + PropRecord *playerprop = getCurrentPlayerProp(); f32 x = parent->pos.x - playerprop->pos.x; f32 z = parent->pos.z - playerprop->pos.z; f32 angle = atan2f(x, z); @@ -29582,7 +8116,7 @@ s32 objDrop(PropRecord *prop) Mtxf *sp58 = getsubmatrix(model); s32 cdtypes = CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER; - matrix_4x4_multiply_homogeneous(currentPlayerGetMatrix10D4(), sp58, &spB8); + matrix_4x4_multiply_homogeneous(currentPlayerGetViewToWorldMtxf(), sp58, &spB8); if (projectile->flags & 0x40) { @@ -29631,6 +8165,7 @@ s32 objDrop(PropRecord *prop) spB8.m[3][2] = 0.0f; matrix_4x4_copy(&spB8, &obj->mtx); + sub_GAME_7F0402B4(obj->prop, &obj->nextcol); obj->shadecol.r = obj->nextcol.r; @@ -29658,7 +8193,7 @@ void objFall(ObjectRecord *obj, s32 playernum) if ((obj->flags2 & PROPFLAG2_NOFALL) == 0 && (obj->flags & PROPFLAG_RENDERPOSTBG) - && (obj->runtime_bitflags & (RUNTIMEBITFLAG_EMBEDDED | RUNTIMEBITFLAG_DEPOSIT)) == 0) + && (obj->runtime_bitflags & (RUNTIMEBITFLAG_EMBEDDED | RUNTIMEBITFLAG_HASPROJECTILE)) == 0) { coord3d rot = {0, 0, 0}; @@ -29667,7 +8202,7 @@ void objFall(ObjectRecord *obj, s32 playernum) sub_GAME_7F03FDA8(obj->prop); - if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) + if (obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) { projectile = obj->projectile; } @@ -29724,7 +8259,7 @@ void objDestroySupportedObjects(PropRecord* tableprop, s32 playernum) if (edges > 0) { - prop = get_ptr_obj_pos_list_current_entry(); + prop = chrpropGetActiveTail(); while (prop) { if (((prop->type == PROP_TYPE_OBJ) || (prop->type == PROP_TYPE_WEAPON)) && (prop->stan->room == room)) @@ -29743,1094 +8278,436 @@ void objDestroySupportedObjects(PropRecord* tableprop, s32 playernum) } -#ifdef NONMATCHING -void object_explosion_related(void) { +void objExplode(ObjectRecord *obj, coord3d *target_pos, s32 playernum) +{ + PropRecord *prop; + PropRecord *tailprop; + s16 explosion_type; + StandTile *stan; + s32 shots; -} + if (!(obj->damage < obj->maxdamage)) + { + if (objGetDestroyedLevel(obj) == 0) + { + return; + } + } + + prop = obj->prop; +#if defined(VERSION_EU) + explosion_type = ((s8 *) object_explosion_details.typeids)[obj->obj]; #else -#ifndef VERSION_EU -GLOBAL_ASM( -.text -glabel object_explosion_related -/* 08193C 7F04CE0C 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 081940 7F04CE10 AFBF002C */ sw $ra, 0x2c($sp) -/* 081944 7F04CE14 AFB10028 */ sw $s1, 0x28($sp) -/* 081948 7F04CE18 AFB00024 */ sw $s0, 0x24($sp) -/* 08194C 7F04CE1C AFA5004C */ sw $a1, 0x4c($sp) -/* 081950 7F04CE20 AFA60050 */ sw $a2, 0x50($sp) -/* 081954 7F04CE24 C4860070 */ lwc1 $f6, 0x70($a0) -/* 081958 7F04CE28 C4840074 */ lwc1 $f4, 0x74($a0) -/* 08195C 7F04CE2C 00808825 */ move $s1, $a0 -/* 081960 7F04CE30 4606203C */ c.lt.s $f4, $f6 -/* 081964 7F04CE34 00000000 */ nop -/* 081968 7F04CE38 45030006 */ bc1tl .L7F04CE54 -/* 08196C 7F04CE3C 862E0004 */ lh $t6, 4($s1) -/* 081970 7F04CE40 0FC0FFF0 */ jal objGetDestroyedLevel -/* 081974 7F04CE44 00000000 */ nop -/* 081978 7F04CE48 504000C4 */ beql $v0, $zero, .L7F04D15C -/* 08197C 7F04CE4C 8FBF002C */ lw $ra, 0x2c($sp) -/* 081980 7F04CE50 862E0004 */ lh $t6, 4($s1) -.L7F04CE54: -/* 081984 7F04CE54 3C188004 */ lui $t8, %hi(object_explosion_details) -/* 081988 7F04CE58 8E230010 */ lw $v1, 0x10($s1) -/* 08198C 7F04CE5C 000E78C0 */ sll $t7, $t6, 3 -/* 081990 7F04CE60 01EE7823 */ subu $t7, $t7, $t6 -/* 081994 7F04CE64 000F7840 */ sll $t7, $t7, 1 -/* 081998 7F04CE68 030FC021 */ addu $t8, $t8, $t7 -/* 08199C 7F04CE6C 8718B224 */ lh $t8, %lo(object_explosion_details)($t8) -/* 0819A0 7F04CE70 02202025 */ move $a0, $s1 -/* 0819A4 7F04CE74 00608025 */ move $s0, $v1 -/* 0819A8 7F04CE78 A7B8003E */ sh $t8, 0x3e($sp) -/* 0819AC 7F04CE7C 8C79001C */ lw $t9, 0x1c($v1) -/* 0819B0 7F04CE80 53200007 */ beql $t9, $zero, .L7F04CEA0 -/* 0819B4 7F04CE84 8E080014 */ lw $t0, 0x14($s0) -/* 0819B8 7F04CE88 8E02001C */ lw $v0, 0x1c($s0) -/* 0819BC 7F04CE8C 00408025 */ move $s0, $v0 -.L7F04CE90: -/* 0819C0 7F04CE90 8C42001C */ lw $v0, 0x1c($v0) -/* 0819C4 7F04CE94 5440FFFE */ bnezl $v0, .L7F04CE90 -/* 0819C8 7F04CE98 00408025 */ move $s0, $v0 -/* 0819CC 7F04CE9C 8E080014 */ lw $t0, 0x14($s0) -.L7F04CEA0: -/* 0819D0 7F04CEA0 AFA30044 */ sw $v1, 0x44($sp) -/* 0819D4 7F04CEA4 0FC0FFF0 */ jal objGetDestroyedLevel -/* 0819D8 7F04CEA8 AFA80038 */ sw $t0, 0x38($sp) -/* 0819DC 7F04CEAC 14400056 */ bnez $v0, .L7F04D008 -/* 0819E0 7F04CEB0 00000000 */ nop -/* 0819E4 7F04CEB4 92290002 */ lbu $t1, 2($s1) -/* 0819E8 7F04CEB8 44804000 */ mtc1 $zero, $f8 -/* 0819EC 7F04CEBC 352A0080 */ ori $t2, $t1, 0x80 -/* 0819F0 7F04CEC0 A22A0002 */ sb $t2, 2($s1) -/* 0819F4 7F04CEC4 E6280070 */ swc1 $f8, 0x70($s1) -/* 0819F8 7F04CEC8 8FAB0038 */ lw $t3, 0x38($sp) -/* 0819FC 7F04CECC 5160002B */ beql $t3, $zero, .L7F04CF7C -/* 081A00 7F04CED0 8E2C000C */ lw $t4, 0xc($s1) -/* 081A04 7F04CED4 920C0001 */ lbu $t4, 1($s0) -/* 081A08 7F04CED8 8FA2004C */ lw $v0, 0x4c($sp) -/* 081A0C 7F04CEDC 27A40038 */ addiu $a0, $sp, 0x38 -/* 081A10 7F04CEE0 318D0008 */ andi $t5, $t4, 8 -/* 081A14 7F04CEE4 55A00019 */ bnezl $t5, .L7F04CF4C -/* 081A18 7F04CEE8 8E060014 */ lw $a2, 0x14($s0) -/* 081A1C 7F04CEEC C44A0008 */ lwc1 $f10, 8($v0) -/* 081A20 7F04CEF0 8E050008 */ lw $a1, 8($s0) -/* 081A24 7F04CEF4 8E060010 */ lw $a2, 0x10($s0) -/* 081A28 7F04CEF8 8C470000 */ lw $a3, ($v0) -/* 081A2C 7F04CEFC 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 081A30 7F04CF00 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 081A34 7F04CF04 10400010 */ beqz $v0, .L7F04CF48 -/* 081A38 7F04CF08 8FA40044 */ lw $a0, 0x44($sp) -/* 081A3C 7F04CF0C 8E2E0008 */ lw $t6, 8($s1) -/* 081A40 7F04CF10 8FB90050 */ lw $t9, 0x50($sp) -/* 081A44 7F04CF14 2608002C */ addiu $t0, $s0, 0x2c -/* 081A48 7F04CF18 31CF000E */ andi $t7, $t6, 0xe -/* 081A4C 7F04CF1C 2DF80001 */ sltiu $t8, $t7, 1 -/* 081A50 7F04CF20 AFB80010 */ sw $t8, 0x10($sp) -/* 081A54 7F04CF24 AFA80018 */ sw $t0, 0x18($sp) -/* 081A58 7F04CF28 AFA0001C */ sw $zero, 0x1c($sp) -/* 081A5C 7F04CF2C 8FA5004C */ lw $a1, 0x4c($sp) -/* 081A60 7F04CF30 8FA60038 */ lw $a2, 0x38($sp) -/* 081A64 7F04CF34 87A7003E */ lh $a3, 0x3e($sp) -/* 081A68 7F04CF38 0FC27094 */ jal explosionCreate -/* 081A6C 7F04CF3C AFB90014 */ sw $t9, 0x14($sp) -/* 081A70 7F04CF40 1000000E */ b .L7F04CF7C -/* 081A74 7F04CF44 8E2C000C */ lw $t4, 0xc($s1) -.L7F04CF48: -/* 081A78 7F04CF48 8E060014 */ lw $a2, 0x14($s0) -.L7F04CF4C: -/* 081A7C 7F04CF4C 8FA90050 */ lw $t1, 0x50($sp) -/* 081A80 7F04CF50 260A002C */ addiu $t2, $s0, 0x2c -/* 081A84 7F04CF54 240B0001 */ li $t3, 1 -/* 081A88 7F04CF58 AFAB001C */ sw $t3, 0x1c($sp) -/* 081A8C 7F04CF5C AFAA0018 */ sw $t2, 0x18($sp) -/* 081A90 7F04CF60 AFA00010 */ sw $zero, 0x10($sp) -/* 081A94 7F04CF64 8FA40044 */ lw $a0, 0x44($sp) -/* 081A98 7F04CF68 8FA5004C */ lw $a1, 0x4c($sp) -/* 081A9C 7F04CF6C 87A7003E */ lh $a3, 0x3e($sp) -/* 081AA0 7F04CF70 0FC27094 */ jal explosionCreate -/* 081AA4 7F04CF74 AFA90014 */ sw $t1, 0x14($sp) -/* 081AA8 7F04CF78 8E2C000C */ lw $t4, 0xc($s1) -.L7F04CF7C: -/* 081AAC 7F04CF7C 02202025 */ move $a0, $s1 -/* 081AB0 7F04CF80 318D2000 */ andi $t5, $t4, 0x2000 -/* 081AB4 7F04CF84 11A00005 */ beqz $t5, .L7F04CF9C -/* 081AB8 7F04CF88 00000000 */ nop -/* 081ABC 7F04CF8C 8E2E0064 */ lw $t6, 0x64($s1) -/* 081AC0 7F04CF90 35CF0004 */ ori $t7, $t6, 4 -/* 081AC4 7F04CF94 10000070 */ b .L7F04D158 -/* 081AC8 7F04CF98 AE2F0064 */ sw $t7, 0x64($s1) -.L7F04CF9C: -/* 081ACC 7F04CF9C 0FC12D84 */ jal objDeform -/* 081AD0 7F04CFA0 24050001 */ li $a1, 1 -/* 081AD4 7F04CFA4 8FA40044 */ lw $a0, 0x44($sp) -/* 081AD8 7F04CFA8 5604006C */ bnel $s0, $a0, .L7F04D15C -/* 081ADC 7F04CFAC 8FBF002C */ lw $ra, 0x2c($sp) -/* 081AE0 7F04CFB0 0FC13341 */ jal objDestroySupportedObjects -/* 081AE4 7F04CFB4 8FA50050 */ lw $a1, 0x50($sp) -/* 081AE8 7F04CFB8 8E220064 */ lw $v0, 0x64($s1) -/* 081AEC 7F04CFBC 30588000 */ andi $t8, $v0, 0x8000 -/* 081AF0 7F04CFC0 5300000A */ beql $t8, $zero, .L7F04CFEC -/* 081AF4 7F04CFC4 3C010001 */ lui $at, 1 -/* 081AF8 7F04CFC8 0C002914 */ jal randomGetNext -/* 081AFC 7F04CFCC 00000000 */ nop -/* 081B00 7F04CFD0 24010003 */ li $at, 3 -/* 081B04 7F04CFD4 0041001B */ divu $zero, $v0, $at -/* 081B08 7F04CFD8 0000C810 */ mfhi $t9 -/* 081B0C 7F04CFDC 5720005F */ bnezl $t9, .L7F04D15C -/* 081B10 7F04CFE0 8FBF002C */ lw $ra, 0x2c($sp) -/* 081B14 7F04CFE4 8E220064 */ lw $v0, 0x64($s1) -/* 081B18 7F04CFE8 3C010001 */ lui $at, 1 -.L7F04CFEC: -/* 081B1C 7F04CFEC 00414025 */ or $t0, $v0, $at -/* 081B20 7F04CFF0 AE280064 */ sw $t0, 0x64($s1) -/* 081B24 7F04CFF4 8FA50050 */ lw $a1, 0x50($sp) -/* 081B28 7F04CFF8 0FC13291 */ jal objFall -/* 081B2C 7F04CFFC 02202025 */ move $a0, $s1 -/* 081B30 7F04D000 10000056 */ b .L7F04D15C -/* 081B34 7F04D004 8FBF002C */ lw $ra, 0x2c($sp) -.L7F04D008: -/* 081B38 7F04D008 0FC0FFD8 */ jal objGetShotsTaken -/* 081B3C 7F04D00C 02202025 */ move $a0, $s1 -/* 081B40 7F04D010 30490003 */ andi $t1, $v0, 3 -/* 081B44 7F04D014 15200031 */ bnez $t1, .L7F04D0DC -/* 081B48 7F04D018 AFA20034 */ sw $v0, 0x34($sp) -/* 081B4C 7F04D01C 00025083 */ sra $t2, $v0, 2 -/* 081B50 7F04D020 25450001 */ addiu $a1, $t2, 1 -/* 081B54 7F04D024 0FC12D84 */ jal objDeform -/* 081B58 7F04D028 02202025 */ move $a0, $s1 -/* 081B5C 7F04D02C 8FAB0038 */ lw $t3, 0x38($sp) -/* 081B60 7F04D030 1160002A */ beqz $t3, .L7F04D0DC -/* 081B64 7F04D034 00000000 */ nop -/* 081B68 7F04D038 920C0001 */ lbu $t4, 1($s0) -/* 081B6C 7F04D03C 8FA2004C */ lw $v0, 0x4c($sp) -/* 081B70 7F04D040 27A40038 */ addiu $a0, $sp, 0x38 -/* 081B74 7F04D044 318D0008 */ andi $t5, $t4, 8 -/* 081B78 7F04D048 55A00019 */ bnezl $t5, .L7F04D0B0 -/* 081B7C 7F04D04C 8E060014 */ lw $a2, 0x14($s0) -/* 081B80 7F04D050 C4500008 */ lwc1 $f16, 8($v0) -/* 081B84 7F04D054 8E050008 */ lw $a1, 8($s0) -/* 081B88 7F04D058 8E060010 */ lw $a2, 0x10($s0) -/* 081B8C 7F04D05C 8C470000 */ lw $a3, ($v0) -/* 081B90 7F04D060 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 081B94 7F04D064 E7B00010 */ swc1 $f16, 0x10($sp) -/* 081B98 7F04D068 10400010 */ beqz $v0, .L7F04D0AC -/* 081B9C 7F04D06C 8FA40044 */ lw $a0, 0x44($sp) -/* 081BA0 7F04D070 8E2E0008 */ lw $t6, 8($s1) -/* 081BA4 7F04D074 8FB90050 */ lw $t9, 0x50($sp) -/* 081BA8 7F04D078 2608002C */ addiu $t0, $s0, 0x2c -/* 081BAC 7F04D07C 31CF000E */ andi $t7, $t6, 0xe -/* 081BB0 7F04D080 2DF80001 */ sltiu $t8, $t7, 1 -/* 081BB4 7F04D084 AFB80010 */ sw $t8, 0x10($sp) -/* 081BB8 7F04D088 AFA80018 */ sw $t0, 0x18($sp) -/* 081BBC 7F04D08C AFA0001C */ sw $zero, 0x1c($sp) -/* 081BC0 7F04D090 8FA5004C */ lw $a1, 0x4c($sp) -/* 081BC4 7F04D094 8FA60038 */ lw $a2, 0x38($sp) -/* 081BC8 7F04D098 24070010 */ li $a3, 16 -/* 081BCC 7F04D09C 0FC27094 */ jal explosionCreate -/* 081BD0 7F04D0A0 AFB90014 */ sw $t9, 0x14($sp) -/* 081BD4 7F04D0A4 1000000D */ b .L7F04D0DC -/* 081BD8 7F04D0A8 00000000 */ nop -.L7F04D0AC: -/* 081BDC 7F04D0AC 8E060014 */ lw $a2, 0x14($s0) -.L7F04D0B0: -/* 081BE0 7F04D0B0 8FA90050 */ lw $t1, 0x50($sp) -/* 081BE4 7F04D0B4 260A002C */ addiu $t2, $s0, 0x2c -/* 081BE8 7F04D0B8 240B0001 */ li $t3, 1 -/* 081BEC 7F04D0BC AFAB001C */ sw $t3, 0x1c($sp) -/* 081BF0 7F04D0C0 AFAA0018 */ sw $t2, 0x18($sp) -/* 081BF4 7F04D0C4 AFA00010 */ sw $zero, 0x10($sp) -/* 081BF8 7F04D0C8 8FA40044 */ lw $a0, 0x44($sp) -/* 081BFC 7F04D0CC 8FA5004C */ lw $a1, 0x4c($sp) -/* 081C00 7F04D0D0 24070010 */ li $a3, 16 -/* 081C04 7F04D0D4 0FC27094 */ jal explosionCreate -/* 081C08 7F04D0D8 AFA90014 */ sw $t1, 0x14($sp) -.L7F04D0DC: -/* 081C0C 7F04D0DC 0FC0FFF0 */ jal objGetDestroyedLevel -/* 081C10 7F04D0E0 02202025 */ move $a0, $s1 -/* 081C14 7F04D0E4 58400012 */ blezl $v0, .L7F04D130 -/* 081C18 7F04D0E8 8FA90034 */ lw $t1, 0x34($sp) -/* 081C1C 7F04D0EC 92220002 */ lbu $v0, 2($s1) -/* 081C20 7F04D0F0 304C0004 */ andi $t4, $v0, 4 -/* 081C24 7F04D0F4 5180000E */ beql $t4, $zero, .L7F04D130 -/* 081C28 7F04D0F8 8FA90034 */ lw $t1, 0x34($sp) -/* 081C2C 7F04D0FC 8E2D0064 */ lw $t5, 0x64($s1) -/* 081C30 7F04D100 344F0010 */ ori $t7, $v0, 0x10 -/* 081C34 7F04D104 3058FFEF */ andi $t8, $v0, 0xffef -/* 081C38 7F04D108 31AE1000 */ andi $t6, $t5, 0x1000 -/* 081C3C 7F04D10C 51C00004 */ beql $t6, $zero, .L7F04D120 -/* 081C40 7F04D110 A2380002 */ sb $t8, 2($s1) -/* 081C44 7F04D114 10000002 */ b .L7F04D120 -/* 081C48 7F04D118 A22F0002 */ sb $t7, 2($s1) -/* 081C4C 7F04D11C A2380002 */ sb $t8, 2($s1) -.L7F04D120: -/* 081C50 7F04D120 8FA80044 */ lw $t0, 0x44($sp) -/* 081C54 7F04D124 241904B0 */ li $t9, 1200 -/* 081C58 7F04D128 A5190002 */ sh $t9, 2($t0) -/* 081C5C 7F04D12C 8FA90034 */ lw $t1, 0x34($sp) -.L7F04D130: -/* 081C60 7F04D130 2921000C */ slti $at, $t1, 0xc -/* 081C64 7F04D134 54200009 */ bnezl $at, .L7F04D15C -/* 081C68 7F04D138 8FBF002C */ lw $ra, 0x2c($sp) -/* 081C6C 7F04D13C 8E2A0064 */ lw $t2, 0x64($s1) -/* 081C70 7F04D140 8E2C0008 */ lw $t4, 8($s1) -/* 081C74 7F04D144 2401FEFF */ li $at, -257 -/* 081C78 7F04D148 354B1000 */ ori $t3, $t2, 0x1000 -/* 081C7C 7F04D14C 01816824 */ and $t5, $t4, $at -/* 081C80 7F04D150 AE2B0064 */ sw $t3, 0x64($s1) -/* 081C84 7F04D154 AE2D0008 */ sw $t5, 8($s1) -.L7F04D158: -/* 081C88 7F04D158 8FBF002C */ lw $ra, 0x2c($sp) -.L7F04D15C: -/* 081C8C 7F04D15C 8FB00024 */ lw $s0, 0x24($sp) -/* 081C90 7F04D160 8FB10028 */ lw $s1, 0x28($sp) -/* 081C94 7F04D164 03E00008 */ jr $ra -/* 081C98 7F04D168 27BD0048 */ addiu $sp, $sp, 0x48 -) + explosion_type = object_explosion_details[obj->obj].TypeID; #endif + tailprop = prop; -#ifdef VERSION_EU -GLOBAL_ASM( -.text -glabel object_explosion_related -/* 07F9F0 7F04D000 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 07F9F4 7F04D004 AFBF002C */ sw $ra, 0x2c($sp) -/* 07F9F8 7F04D008 AFB10028 */ sw $s1, 0x28($sp) -/* 07F9FC 7F04D00C AFB00024 */ sw $s0, 0x24($sp) -/* 07FA00 7F04D010 AFA5004C */ sw $a1, 0x4c($sp) -/* 07FA04 7F04D014 AFA60050 */ sw $a2, 0x50($sp) -/* 07FA08 7F04D018 C4860070 */ lwc1 $f6, 0x70($a0) -/* 07FA0C 7F04D01C C4840074 */ lwc1 $f4, 0x74($a0) -/* 07FA10 7F04D020 00808825 */ move $s1, $a0 -/* 07FA14 7F04D024 4606203C */ c.lt.s $f4, $f6 -/* 07FA18 7F04D028 00000000 */ nop -/* 07FA1C 7F04D02C 45030006 */ bc1tl .L7F04D048 -/* 07FA20 7F04D030 862E0004 */ lh $t6, 4($s1) -/* 07FA24 7F04D034 0FC10020 */ jal objGetDestroyedLevel -/* 07FA28 7F04D038 00000000 */ nop -/* 07FA2C 7F04D03C 504000C1 */ beql $v0, $zero, .L7F04D344 -/* 07FA30 7F04D040 8FBF002C */ lw $ra, 0x2c($sp) -/* 07FA34 7F04D044 862E0004 */ lh $t6, 4($s1) -.L7F04D048: -/* 07FA38 7F04D048 3C0F8003 */ lui $t7, %hi(object_explosion_details) -/* 07FA3C 7F04D04C 8E230010 */ lw $v1, 0x10($s1) -/* 07FA40 7F04D050 01EE7821 */ addu $t7, $t7, $t6 -/* 07FA44 7F04D054 81EF5D84 */ lb $t7, %lo(object_explosion_details)($t7) -/* 07FA48 7F04D058 02202025 */ move $a0, $s1 -/* 07FA4C 7F04D05C 00608025 */ move $s0, $v1 -/* 07FA50 7F04D060 A7AF003E */ sh $t7, 0x3e($sp) -/* 07FA54 7F04D064 8C78001C */ lw $t8, 0x1c($v1) -/* 07FA58 7F04D068 53000007 */ beql $t8, $zero, .L7F04D088 -/* 07FA5C 7F04D06C 8E190014 */ lw $t9, 0x14($s0) -/* 07FA60 7F04D070 8E02001C */ lw $v0, 0x1c($s0) -/* 07FA64 7F04D074 00408025 */ move $s0, $v0 -.L7F04D078: -/* 07FA68 7F04D078 8C42001C */ lw $v0, 0x1c($v0) -/* 07FA6C 7F04D07C 5440FFFE */ bnezl $v0, .L7F04D078 -/* 07FA70 7F04D080 00408025 */ move $s0, $v0 -/* 07FA74 7F04D084 8E190014 */ lw $t9, 0x14($s0) -.L7F04D088: -/* 07FA78 7F04D088 AFA30044 */ sw $v1, 0x44($sp) -/* 07FA7C 7F04D08C 0FC10020 */ jal objGetDestroyedLevel -/* 07FA80 7F04D090 AFB90038 */ sw $t9, 0x38($sp) -/* 07FA84 7F04D094 14400056 */ bnez $v0, .L7F04D1F0 -/* 07FA88 7F04D098 00000000 */ nop -/* 07FA8C 7F04D09C 92280002 */ lbu $t0, 2($s1) -/* 07FA90 7F04D0A0 44804000 */ mtc1 $zero, $f8 -/* 07FA94 7F04D0A4 35090080 */ ori $t1, $t0, 0x80 -/* 07FA98 7F04D0A8 A2290002 */ sb $t1, 2($s1) -/* 07FA9C 7F04D0AC E6280070 */ swc1 $f8, 0x70($s1) -/* 07FAA0 7F04D0B0 8FAA0038 */ lw $t2, 0x38($sp) -/* 07FAA4 7F04D0B4 5140002B */ beql $t2, $zero, .L7F04D164 -/* 07FAA8 7F04D0B8 8E2B000C */ lw $t3, 0xc($s1) -/* 07FAAC 7F04D0BC 920B0001 */ lbu $t3, 1($s0) -/* 07FAB0 7F04D0C0 8FA2004C */ lw $v0, 0x4c($sp) -/* 07FAB4 7F04D0C4 27A40038 */ addiu $a0, $sp, 0x38 -/* 07FAB8 7F04D0C8 316C0008 */ andi $t4, $t3, 8 -/* 07FABC 7F04D0CC 55800019 */ bnezl $t4, .L7F04D134 -/* 07FAC0 7F04D0D0 8E060014 */ lw $a2, 0x14($s0) -/* 07FAC4 7F04D0D4 C44A0008 */ lwc1 $f10, 8($v0) -/* 07FAC8 7F04D0D8 8E050008 */ lw $a1, 8($s0) -/* 07FACC 7F04D0DC 8E060010 */ lw $a2, 0x10($s0) -/* 07FAD0 7F04D0E0 8C470000 */ lw $a3, ($v0) -/* 07FAD4 7F04D0E4 0FC2BFA9 */ jal walkTilesBetweenPoints_NoCallback -/* 07FAD8 7F04D0E8 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 07FADC 7F04D0EC 10400010 */ beqz $v0, .L7F04D130 -/* 07FAE0 7F04D0F0 8FA40044 */ lw $a0, 0x44($sp) -/* 07FAE4 7F04D0F4 8E2D0008 */ lw $t5, 8($s1) -/* 07FAE8 7F04D0F8 8FB80050 */ lw $t8, 0x50($sp) -/* 07FAEC 7F04D0FC 2619002C */ addiu $t9, $s0, 0x2c -/* 07FAF0 7F04D100 31AE000E */ andi $t6, $t5, 0xe -/* 07FAF4 7F04D104 2DCF0001 */ sltiu $t7, $t6, 1 -/* 07FAF8 7F04D108 AFAF0010 */ sw $t7, 0x10($sp) -/* 07FAFC 7F04D10C AFB90018 */ sw $t9, 0x18($sp) -/* 07FB00 7F04D110 AFA0001C */ sw $zero, 0x1c($sp) -/* 07FB04 7F04D114 8FA5004C */ lw $a1, 0x4c($sp) -/* 07FB08 7F04D118 8FA60038 */ lw $a2, 0x38($sp) -/* 07FB0C 7F04D11C 87A7003E */ lh $a3, 0x3e($sp) -/* 07FB10 7F04D120 0FC26DE4 */ jal explosionCreate -/* 07FB14 7F04D124 AFB80014 */ sw $t8, 0x14($sp) -/* 07FB18 7F04D128 1000000E */ b .L7F04D164 -/* 07FB1C 7F04D12C 8E2B000C */ lw $t3, 0xc($s1) -.L7F04D130: -/* 07FB20 7F04D130 8E060014 */ lw $a2, 0x14($s0) -.L7F04D134: -/* 07FB24 7F04D134 8FA80050 */ lw $t0, 0x50($sp) -/* 07FB28 7F04D138 2609002C */ addiu $t1, $s0, 0x2c -/* 07FB2C 7F04D13C 240A0001 */ li $t2, 1 -/* 07FB30 7F04D140 AFAA001C */ sw $t2, 0x1c($sp) -/* 07FB34 7F04D144 AFA90018 */ sw $t1, 0x18($sp) -/* 07FB38 7F04D148 AFA00010 */ sw $zero, 0x10($sp) -/* 07FB3C 7F04D14C 8FA40044 */ lw $a0, 0x44($sp) -/* 07FB40 7F04D150 8FA5004C */ lw $a1, 0x4c($sp) -/* 07FB44 7F04D154 87A7003E */ lh $a3, 0x3e($sp) -/* 07FB48 7F04D158 0FC26DE4 */ jal explosionCreate -/* 07FB4C 7F04D15C AFA80014 */ sw $t0, 0x14($sp) -/* 07FB50 7F04D160 8E2B000C */ lw $t3, 0xc($s1) -.L7F04D164: -/* 07FB54 7F04D164 02202025 */ move $a0, $s1 -/* 07FB58 7F04D168 316C2000 */ andi $t4, $t3, 0x2000 -/* 07FB5C 7F04D16C 11800005 */ beqz $t4, .L7F04D184 -/* 07FB60 7F04D170 00000000 */ nop -/* 07FB64 7F04D174 8E2D0064 */ lw $t5, 0x64($s1) -/* 07FB68 7F04D178 35AE0004 */ ori $t6, $t5, 4 -/* 07FB6C 7F04D17C 10000070 */ b .L7F04D340 -/* 07FB70 7F04D180 AE2E0064 */ sw $t6, 0x64($s1) -.L7F04D184: -/* 07FB74 7F04D184 0FC12DFB */ jal objDeform -/* 07FB78 7F04D188 24050001 */ li $a1, 1 -/* 07FB7C 7F04D18C 8FA40044 */ lw $a0, 0x44($sp) -/* 07FB80 7F04D190 5604006C */ bnel $s0, $a0, .L7F04D344 -/* 07FB84 7F04D194 8FBF002C */ lw $ra, 0x2c($sp) -/* 07FB88 7F04D198 0FC133BE */ jal objDestroySupportedObjects -/* 07FB8C 7F04D19C 8FA50050 */ lw $a1, 0x50($sp) -/* 07FB90 7F04D1A0 8E220064 */ lw $v0, 0x64($s1) -/* 07FB94 7F04D1A4 304F8000 */ andi $t7, $v0, 0x8000 -/* 07FB98 7F04D1A8 51E0000A */ beql $t7, $zero, .L7F04D1D4 -/* 07FB9C 7F04D1AC 3C010001 */ lui $at, 1 -/* 07FBA0 7F04D1B0 0C00262C */ jal randomGetNext -/* 07FBA4 7F04D1B4 00000000 */ nop -/* 07FBA8 7F04D1B8 24010003 */ li $at, 3 -/* 07FBAC 7F04D1BC 0041001B */ divu $zero, $v0, $at -/* 07FBB0 7F04D1C0 0000C010 */ mfhi $t8 -/* 07FBB4 7F04D1C4 5700005F */ bnezl $t8, .L7F04D344 -/* 07FBB8 7F04D1C8 8FBF002C */ lw $ra, 0x2c($sp) -/* 07FBBC 7F04D1CC 8E220064 */ lw $v0, 0x64($s1) -/* 07FBC0 7F04D1D0 3C010001 */ lui $at, 1 -.L7F04D1D4: -/* 07FBC4 7F04D1D4 0041C825 */ or $t9, $v0, $at -/* 07FBC8 7F04D1D8 AE390064 */ sw $t9, 0x64($s1) -/* 07FBCC 7F04D1DC 8FA50050 */ lw $a1, 0x50($sp) -/* 07FBD0 7F04D1E0 0FC1330E */ jal objFall -/* 07FBD4 7F04D1E4 02202025 */ move $a0, $s1 -/* 07FBD8 7F04D1E8 10000056 */ b .L7F04D344 -/* 07FBDC 7F04D1EC 8FBF002C */ lw $ra, 0x2c($sp) -.L7F04D1F0: -/* 07FBE0 7F04D1F0 0FC10008 */ jal objGetShotsTaken -/* 07FBE4 7F04D1F4 02202025 */ move $a0, $s1 -/* 07FBE8 7F04D1F8 30480003 */ andi $t0, $v0, 3 -/* 07FBEC 7F04D1FC 15000031 */ bnez $t0, .L7F04D2C4eu -/* 07FBF0 7F04D200 AFA20034 */ sw $v0, 0x34($sp) -/* 07FBF4 7F04D204 00024883 */ sra $t1, $v0, 2 -/* 07FBF8 7F04D208 25250001 */ addiu $a1, $t1, 1 -/* 07FBFC 7F04D20C 0FC12DFB */ jal objDeform -/* 07FC00 7F04D210 02202025 */ move $a0, $s1 -/* 07FC04 7F04D214 8FAA0038 */ lw $t2, 0x38($sp) -/* 07FC08 7F04D218 1140002A */ beqz $t2, .L7F04D2C4eu -/* 07FC0C 7F04D21C 00000000 */ nop -/* 07FC10 7F04D220 920B0001 */ lbu $t3, 1($s0) -/* 07FC14 7F04D224 8FA2004C */ lw $v0, 0x4c($sp) -/* 07FC18 7F04D228 27A40038 */ addiu $a0, $sp, 0x38 -/* 07FC1C 7F04D22C 316C0008 */ andi $t4, $t3, 8 -/* 07FC20 7F04D230 55800019 */ bnezl $t4, .L7F04D298 -/* 07FC24 7F04D234 8E060014 */ lw $a2, 0x14($s0) -/* 07FC28 7F04D238 C4500008 */ lwc1 $f16, 8($v0) -/* 07FC2C 7F04D23C 8E050008 */ lw $a1, 8($s0) -/* 07FC30 7F04D240 8E060010 */ lw $a2, 0x10($s0) -/* 07FC34 7F04D244 8C470000 */ lw $a3, ($v0) -/* 07FC38 7F04D248 0FC2BFA9 */ jal walkTilesBetweenPoints_NoCallback -/* 07FC3C 7F04D24C E7B00010 */ swc1 $f16, 0x10($sp) -/* 07FC40 7F04D250 10400010 */ beqz $v0, .L7F04D294 -/* 07FC44 7F04D254 8FA40044 */ lw $a0, 0x44($sp) -/* 07FC48 7F04D258 8E2D0008 */ lw $t5, 8($s1) -/* 07FC4C 7F04D25C 8FB80050 */ lw $t8, 0x50($sp) -/* 07FC50 7F04D260 2619002C */ addiu $t9, $s0, 0x2c -/* 07FC54 7F04D264 31AE000E */ andi $t6, $t5, 0xe -/* 07FC58 7F04D268 2DCF0001 */ sltiu $t7, $t6, 1 -/* 07FC5C 7F04D26C AFAF0010 */ sw $t7, 0x10($sp) -/* 07FC60 7F04D270 AFB90018 */ sw $t9, 0x18($sp) -/* 07FC64 7F04D274 AFA0001C */ sw $zero, 0x1c($sp) -/* 07FC68 7F04D278 8FA5004C */ lw $a1, 0x4c($sp) -/* 07FC6C 7F04D27C 8FA60038 */ lw $a2, 0x38($sp) -/* 07FC70 7F04D280 24070010 */ li $a3, 16 -/* 07FC74 7F04D284 0FC26DE4 */ jal explosionCreate -/* 07FC78 7F04D288 AFB80014 */ sw $t8, 0x14($sp) -/* 07FC7C 7F04D28C 1000000D */ b .L7F04D2C4eu -/* 07FC80 7F04D290 00000000 */ nop -.L7F04D294: -/* 07FC84 7F04D294 8E060014 */ lw $a2, 0x14($s0) -.L7F04D298: -/* 07FC88 7F04D298 8FA80050 */ lw $t0, 0x50($sp) -/* 07FC8C 7F04D29C 2609002C */ addiu $t1, $s0, 0x2c -/* 07FC90 7F04D2A0 240A0001 */ li $t2, 1 -/* 07FC94 7F04D2A4 AFAA001C */ sw $t2, 0x1c($sp) -/* 07FC98 7F04D2A8 AFA90018 */ sw $t1, 0x18($sp) -/* 07FC9C 7F04D2AC AFA00010 */ sw $zero, 0x10($sp) -/* 07FCA0 7F04D2B0 8FA40044 */ lw $a0, 0x44($sp) -/* 07FCA4 7F04D2B4 8FA5004C */ lw $a1, 0x4c($sp) -/* 07FCA8 7F04D2B8 24070010 */ li $a3, 16 -/* 07FCAC 7F04D2BC 0FC26DE4 */ jal explosionCreate -/* 07FCB0 7F04D2C0 AFA80014 */ sw $t0, 0x14($sp) -.L7F04D2C4eu: -/* 07FCB4 7F04D2C4 0FC10020 */ jal objGetDestroyedLevel -/* 07FCB8 7F04D2C8 02202025 */ move $a0, $s1 -/* 07FCBC 7F04D2CC 58400012 */ blezl $v0, .L7F04D318 -/* 07FCC0 7F04D2D0 8FA80034 */ lw $t0, 0x34($sp) -/* 07FCC4 7F04D2D4 92220002 */ lbu $v0, 2($s1) -/* 07FCC8 7F04D2D8 304B0004 */ andi $t3, $v0, 4 -/* 07FCCC 7F04D2DC 5160000E */ beql $t3, $zero, .L7F04D318 -/* 07FCD0 7F04D2E0 8FA80034 */ lw $t0, 0x34($sp) -/* 07FCD4 7F04D2E4 8E2C0064 */ lw $t4, 0x64($s1) -/* 07FCD8 7F04D2E8 344E0010 */ ori $t6, $v0, 0x10 -/* 07FCDC 7F04D2EC 304FFFEF */ andi $t7, $v0, 0xffef -/* 07FCE0 7F04D2F0 318D1000 */ andi $t5, $t4, 0x1000 -/* 07FCE4 7F04D2F4 51A00004 */ beql $t5, $zero, .L7F04D308 -/* 07FCE8 7F04D2F8 A22F0002 */ sb $t7, 2($s1) -/* 07FCEC 7F04D2FC 10000002 */ b .L7F04D308 -/* 07FCF0 7F04D300 A22E0002 */ sb $t6, 2($s1) -/* 07FCF4 7F04D304 A22F0002 */ sb $t7, 2($s1) -.L7F04D308: -/* 07FCF8 7F04D308 8FB90044 */ lw $t9, 0x44($sp) -/* 07FCFC 7F04D30C 241803E8 */ li $t8, 1000 -/* 07FD00 7F04D310 A7380002 */ sh $t8, 2($t9) -/* 07FD04 7F04D314 8FA80034 */ lw $t0, 0x34($sp) -.L7F04D318: -/* 07FD08 7F04D318 2901000C */ slti $at, $t0, 0xc -/* 07FD0C 7F04D31C 54200009 */ bnezl $at, .L7F04D344 -/* 07FD10 7F04D320 8FBF002C */ lw $ra, 0x2c($sp) -/* 07FD14 7F04D324 8E290064 */ lw $t1, 0x64($s1) -/* 07FD18 7F04D328 8E2B0008 */ lw $t3, 8($s1) -/* 07FD1C 7F04D32C 2401FEFF */ li $at, -257 -/* 07FD20 7F04D330 352A1000 */ ori $t2, $t1, 0x1000 -/* 07FD24 7F04D334 01616024 */ and $t4, $t3, $at -/* 07FD28 7F04D338 AE2A0064 */ sw $t2, 0x64($s1) -/* 07FD2C 7F04D33C AE2C0008 */ sw $t4, 8($s1) -.L7F04D340: -/* 07FD30 7F04D340 8FBF002C */ lw $ra, 0x2c($sp) -.L7F04D344: -/* 07FD34 7F04D344 8FB00024 */ lw $s0, 0x24($sp) -/* 07FD38 7F04D348 8FB10028 */ lw $s1, 0x28($sp) -/* 07FD3C 7F04D34C 03E00008 */ jr $ra -/* 07FD40 7F04D350 27BD0048 */ addiu $sp, $sp, 0x48 -) -#endif -#endif + if (tailprop->parent != (NULL)) + { + do + { + tailprop = tailprop->parent; + } + while (tailprop->parent != NULL); + } + stan = tailprop->stan; + if (objGetDestroyedLevel(obj) == 0) + { + ((PropDefHeaderRecord *)obj)->state |= PROPSTATE_DESTROYED; + obj->maxdamage = 0.0f; + if (stan != NULL) + { + if ((!(tailprop->flags & PROPFLAG_00000008)) && walkTilesBetweenPoints_NoCallback(&stan, tailprop->pos.x, tailprop->pos.z, target_pos->x, target_pos->z)) + { + explosionCreate(prop, target_pos, stan, explosion_type, (obj->flags & 0xe) == 0, playernum, tailprop->rooms, 0); + } + else + { + explosionCreate(prop, target_pos, tailprop->stan, explosion_type, 0, playernum, tailprop->rooms, 1); + } + } -// PD: bg_find_hitthing_by_gfx_tris -#ifdef NONMATCHING -bool bgTestHitOnObj(coord3d *arg0, coord3d *arg1, coord3d *arg2, Gfx *gdl, Gfx *gdl2, Vertex *vertices, struct HitThing *hitthing) { + if (obj->flags2 & PROPFLAG2_00002000) + { + obj->runtime_bitflags |= RUNTIMEBITFLAG_REMOVE; + return; + } -} + objDeform(obj, 1); + + if (tailprop != prop) + { + return; + } + + objDestroySupportedObjects(prop, playernum); + + if (obj->runtime_bitflags & RUNTIMEBITFLAG_00008000) + { + if ((randomGetNext() % 3) != 0) + { + return; + } + if (tailprop && tailprop); + if(1); + } + + obj->runtime_bitflags |= RUNTIMEBITFLAG_00010000; + objFall(obj, playernum); + return; + } + + shots = objGetShotsTaken(obj); + + if ((shots & 3) == 0) + { + objDeform(obj, (shots >> 2) + 1); + + if (stan != NULL) + { + if ((!(tailprop->flags & PROPFLAG_00000008)) && walkTilesBetweenPoints_NoCallback(&stan, tailprop->pos.x, tailprop->pos.z, target_pos->x, target_pos->z)) + { + explosionCreate(prop, target_pos, stan, 0x10, (obj->flags & (PROPFLAG_ONSCREEN | PROPFLAG_ENABLED | PROPFLAG_00000008)) == 0, playernum, tailprop->rooms, 0); + } + else + { + explosionCreate(prop, target_pos, tailprop->stan, 0x10, 0, playernum, tailprop->rooms, 1); + } + } + } + + if ((0 < objGetDestroyedLevel(obj)) && (((PropDefHeaderRecord *)obj)->state & PROPSTATE_RESPAWN)) + { + if (obj->runtime_bitflags & RUNTIMEBITFLAG_00001000) + { + ((PropDefHeaderRecord *)obj)->state |= PROPSTATE_10; + } + else + { + ((PropDefHeaderRecord *)obj)->state &= ~PROPSTATE_10; + } +#if defined(VERSION_EU) + prop->timetoregen = 1000; #else -bool bgTestHitOnObj(coord3d *arg0, coord3d *arg1, coord3d *arg2, Gfx *gdl, Gfx *gdl2, Vertex *vertices, struct HitThing *hitthing); -u32 D_8003204C = 0x7FFF; -u32 D_80032050 = 0x7FFF; -u32 D_80032054 = 0x7FFF; -u32 D_80032058 = 0xFFFF8000; -u32 D_8003205C = 0xFFFF8000; -u32 D_80032060 = 0xFFFF8000; -u32 D_80032064 = 0; -u32 D_80032068 = 0; -u32 D_8003206C = 0; -u32 D_80032070 = 0x7FFF; -u32 D_80032074 = 0x7FFF; -u32 D_80032078 = 0x7FFF; -u32 D_8003207C = 0xFFFF8000; -u32 D_80032080 = 0xFFFF8000; -u32 D_80032084 = 0xFFFF8000; -u32 D_80032088 = 0; -u32 D_8003208C = 0; -u32 D_80032090 = 0; -GLOBAL_ASM( -.text -glabel bgTestHitOnObj -/* 081C9C 7F04D16C 27BDFEB0 */ addiu $sp, $sp, -0x150 -/* 081CA0 7F04D170 F7B40028 */ sdc1 $f20, 0x28($sp) -/* 081CA4 7F04D174 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 081CA8 7F04D178 AFBE0050 */ sw $fp, 0x50($sp) -/* 081CAC 7F04D17C AFB7004C */ sw $s7, 0x4c($sp) -/* 081CB0 7F04D180 AFB60048 */ sw $s6, 0x48($sp) -/* 081CB4 7F04D184 AFB50044 */ sw $s5, 0x44($sp) -/* 081CB8 7F04D188 AFB40040 */ sw $s4, 0x40($sp) -/* 081CBC 7F04D18C AFB3003C */ sw $s3, 0x3c($sp) -/* 081CC0 7F04D190 AFB10034 */ sw $s1, 0x34($sp) -/* 081CC4 7F04D194 AFB00030 */ sw $s0, 0x30($sp) -/* 081CC8 7F04D198 4481A000 */ mtc1 $at, $f20 -/* 081CCC 7F04D19C 00E08825 */ move $s1, $a3 -/* 081CD0 7F04D1A0 0080B825 */ move $s7, $a0 -/* 081CD4 7F04D1A4 00C0F025 */ move $fp, $a2 -/* 081CD8 7F04D1A8 AFBF0054 */ sw $ra, 0x54($sp) -/* 081CDC 7F04D1AC AFB20038 */ sw $s2, 0x38($sp) -/* 081CE0 7F04D1B0 AFA50154 */ sw $a1, 0x154($sp) -/* 081CE4 7F04D1B4 AFA00110 */ sw $zero, 0x110($sp) -/* 081CE8 7F04D1B8 00E09825 */ move $s3, $a3 -/* 081CEC 7F04D1BC 8FB0014C */ lw $s0, 0x14c($sp) -/* 081CF0 7F04D1C0 8FB40168 */ lw $s4, 0x168($sp) -/* 081CF4 7F04D1C4 241500FD */ li $s5, 253 -/* 081CF8 7F04D1C8 27B600B0 */ addiu $s6, $sp, 0xb0 -.L7F04D1CC: -/* 081CFC 7F04D1CC 82220000 */ lb $v0, ($s1) -/* 081D00 7F04D1D0 2401FFB8 */ li $at, -72 -/* 081D04 7F04D1D4 8FAE0160 */ lw $t6, 0x160($sp) -/* 081D08 7F04D1D8 54410007 */ bnel $v0, $at, .L7F04D1F8 -/* 081D0C 7F04D1DC 24010004 */ li $at, 4 -/* 081D10 7F04D1E0 11C001E5 */ beqz $t6, .L7F04D978 -/* 081D14 7F04D1E4 01C09825 */ move $s3, $t6 -/* 081D18 7F04D1E8 01C08825 */ move $s1, $t6 -/* 081D1C 7F04D1EC 1000FFF7 */ b .L7F04D1CC -/* 081D20 7F04D1F0 AFA00160 */ sw $zero, 0x160($sp) -/* 081D24 7F04D1F4 24010004 */ li $at, 4 -.L7F04D1F8: -/* 081D28 7F04D1F8 1441000C */ bne $v0, $at, .L7F04D22C -/* 081D2C 7F04D1FC 8FB90164 */ lw $t9, 0x164($sp) -/* 081D30 7F04D200 92220001 */ lbu $v0, 1($s1) -/* 081D34 7F04D204 8E230004 */ lw $v1, 4($s1) -/* 081D38 7F04D208 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff -/* 081D3C 7F04D20C 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 081D40 7F04D210 304F000F */ andi $t7, $v0, 0xf -/* 081D44 7F04D214 0061C024 */ and $t8, $v1, $at -/* 081D48 7F04D218 03384021 */ addu $t0, $t9, $t8 -/* 081D4C 7F04D21C 000F4900 */ sll $t1, $t7, 4 -/* 081D50 7F04D220 01098023 */ subu $s0, $t0, $t1 -/* 081D54 7F04D224 1000FFE9 */ b .L7F04D1CC -/* 081D58 7F04D228 26310008 */ addiu $s1, $s1, 8 -.L7F04D22C: -/* 081D5C 7F04D22C 2401FFBF */ li $at, -65 -/* 081D60 7F04D230 144100E2 */ bne $v0, $at, .L7F04D5BC -/* 081D64 7F04D234 2403000A */ li $v1, 10 -/* 081D68 7F04D238 3C0B8003 */ lui $t3, %hi(D_8003204C) -/* 081D6C 7F04D23C 256B204C */ addiu $t3, %lo(D_8003204C) # addiu $t3, $t3, 0x204c -/* 081D70 7F04D240 8D610000 */ lw $at, ($t3) -/* 081D74 7F04D244 27AA00E8 */ addiu $t2, $sp, 0xe8 -/* 081D78 7F04D248 8D6D0004 */ lw $t5, 4($t3) -/* 081D7C 7F04D24C AD410000 */ sw $at, ($t2) -/* 081D80 7F04D250 8D610008 */ lw $at, 8($t3) -/* 081D84 7F04D254 3C0F8003 */ lui $t7, %hi(D_80032058) -/* 081D88 7F04D258 25EF2058 */ addiu $t7, %lo(D_80032058) # addiu $t7, $t7, 0x2058 -/* 081D8C 7F04D25C AD4D0004 */ sw $t5, 4($t2) -/* 081D90 7F04D260 AD410008 */ sw $at, 8($t2) -/* 081D94 7F04D264 8DE10000 */ lw $at, ($t7) -/* 081D98 7F04D268 27AE00DC */ addiu $t6, $sp, 0xdc -/* 081D9C 7F04D26C 8DF90004 */ lw $t9, 4($t7) -/* 081DA0 7F04D270 ADC10000 */ sw $at, ($t6) -/* 081DA4 7F04D274 8DE10008 */ lw $at, 8($t7) -/* 081DA8 7F04D278 ADD90004 */ sw $t9, 4($t6) -/* 081DAC 7F04D27C 00001025 */ move $v0, $zero -/* 081DB0 7F04D280 ADC10008 */ sw $at, 8($t6) -/* 081DB4 7F04D284 92280005 */ lbu $t0, 5($s1) -/* 081DB8 7F04D288 27A400F8 */ addiu $a0, $sp, 0xf8 -/* 081DBC 7F04D28C 03C02825 */ move $a1, $fp -/* 081DC0 7F04D290 0103001A */ div $zero, $t0, $v1 -/* 081DC4 7F04D294 00004812 */ mflo $t1 -/* 081DC8 7F04D298 AFA900F8 */ sw $t1, 0xf8($sp) -/* 081DCC 7F04D29C 922C0006 */ lbu $t4, 6($s1) -/* 081DD0 7F04D2A0 14600002 */ bnez $v1, .L7F04D2AC -/* 081DD4 7F04D2A4 00000000 */ nop -/* 081DD8 7F04D2A8 0007000D */ break 7 -.L7F04D2AC: -/* 081DDC 7F04D2AC 2401FFFF */ li $at, -1 -/* 081DE0 7F04D2B0 14610004 */ bne $v1, $at, .L7F04D2C4 -/* 081DE4 7F04D2B4 3C018000 */ lui $at, 0x8000 -/* 081DE8 7F04D2B8 15010002 */ bne $t0, $at, .L7F04D2C4 -/* 081DEC 7F04D2BC 00000000 */ nop -/* 081DF0 7F04D2C0 0006000D */ break 6 -.L7F04D2C4: -/* 081DF4 7F04D2C4 0183001A */ div $zero, $t4, $v1 -/* 081DF8 7F04D2C8 00005012 */ mflo $t2 -/* 081DFC 7F04D2CC AFAA00FC */ sw $t2, 0xfc($sp) -/* 081E00 7F04D2D0 922B0007 */ lbu $t3, 7($s1) -/* 081E04 7F04D2D4 14600002 */ bnez $v1, .L7F04D2E0 -/* 081E08 7F04D2D8 00000000 */ nop -/* 081E0C 7F04D2DC 0007000D */ break 7 -.L7F04D2E0: -/* 081E10 7F04D2E0 2401FFFF */ li $at, -1 -/* 081E14 7F04D2E4 14610004 */ bne $v1, $at, .L7F04D2F8 -/* 081E18 7F04D2E8 3C018000 */ lui $at, 0x8000 -/* 081E1C 7F04D2EC 15810002 */ bne $t4, $at, .L7F04D2F8 -/* 081E20 7F04D2F0 00000000 */ nop -/* 081E24 7F04D2F4 0006000D */ break 6 -.L7F04D2F8: -/* 081E28 7F04D2F8 0163001A */ div $zero, $t3, $v1 -/* 081E2C 7F04D2FC 00006812 */ mflo $t5 -/* 081E30 7F04D300 AFAD0100 */ sw $t5, 0x100($sp) -/* 081E34 7F04D304 14600002 */ bnez $v1, .L7F04D310 -/* 081E38 7F04D308 00000000 */ nop -/* 081E3C 7F04D30C 0007000D */ break 7 -.L7F04D310: -/* 081E40 7F04D310 2401FFFF */ li $at, -1 -/* 081E44 7F04D314 14610004 */ bne $v1, $at, .L7F04D328 -/* 081E48 7F04D318 3C018000 */ lui $at, 0x8000 -/* 081E4C 7F04D31C 15610002 */ bne $t3, $at, .L7F04D328 -/* 081E50 7F04D320 00000000 */ nop -/* 081E54 7F04D324 0006000D */ break 6 -.L7F04D328: -/* 081E58 7F04D328 8C980000 */ lw $t8, ($a0) -.L7F04D32C: -/* 081E5C 7F04D32C 8FAF00E8 */ lw $t7, 0xe8($sp) -/* 081E60 7F04D330 24840004 */ addiu $a0, $a0, 4 -/* 081E64 7F04D334 00187100 */ sll $t6, $t8, 4 -/* 081E68 7F04D338 020E1821 */ addu $v1, $s0, $t6 -/* 081E6C 7F04D33C 84620000 */ lh $v0, ($v1) -/* 081E70 7F04D340 27AB0104 */ addiu $t3, $sp, 0x104 -/* 081E74 7F04D344 004F082A */ slt $at, $v0, $t7 -/* 081E78 7F04D348 50200004 */ beql $at, $zero, .L7F04D35C -/* 081E7C 7F04D34C 8FB900DC */ lw $t9, 0xdc($sp) -/* 081E80 7F04D350 AFA200E8 */ sw $v0, 0xe8($sp) -/* 081E84 7F04D354 84620000 */ lh $v0, ($v1) -/* 081E88 7F04D358 8FB900DC */ lw $t9, 0xdc($sp) -.L7F04D35C: -/* 081E8C 7F04D35C 0322082A */ slt $at, $t9, $v0 -/* 081E90 7F04D360 50200003 */ beql $at, $zero, .L7F04D370 -/* 081E94 7F04D364 84620002 */ lh $v0, 2($v1) -/* 081E98 7F04D368 AFA200DC */ sw $v0, 0xdc($sp) -/* 081E9C 7F04D36C 84620002 */ lh $v0, 2($v1) -.L7F04D370: -/* 081EA0 7F04D370 8FA800EC */ lw $t0, 0xec($sp) -/* 081EA4 7F04D374 0048082A */ slt $at, $v0, $t0 -/* 081EA8 7F04D378 50200004 */ beql $at, $zero, .L7F04D38C -/* 081EAC 7F04D37C 8FA900E0 */ lw $t1, 0xe0($sp) -/* 081EB0 7F04D380 AFA200EC */ sw $v0, 0xec($sp) -/* 081EB4 7F04D384 84620002 */ lh $v0, 2($v1) -/* 081EB8 7F04D388 8FA900E0 */ lw $t1, 0xe0($sp) -.L7F04D38C: -/* 081EBC 7F04D38C 0122082A */ slt $at, $t1, $v0 -/* 081EC0 7F04D390 50200003 */ beql $at, $zero, .L7F04D3A0 -/* 081EC4 7F04D394 84620004 */ lh $v0, 4($v1) -/* 081EC8 7F04D398 AFA200E0 */ sw $v0, 0xe0($sp) -/* 081ECC 7F04D39C 84620004 */ lh $v0, 4($v1) -.L7F04D3A0: -/* 081ED0 7F04D3A0 8FAC00F0 */ lw $t4, 0xf0($sp) -/* 081ED4 7F04D3A4 004C082A */ slt $at, $v0, $t4 -/* 081ED8 7F04D3A8 50200004 */ beql $at, $zero, .L7F04D3BC -/* 081EDC 7F04D3AC 8FAA00E4 */ lw $t2, 0xe4($sp) -/* 081EE0 7F04D3B0 AFA200F0 */ sw $v0, 0xf0($sp) -/* 081EE4 7F04D3B4 84620004 */ lh $v0, 4($v1) -/* 081EE8 7F04D3B8 8FAA00E4 */ lw $t2, 0xe4($sp) -.L7F04D3BC: -/* 081EEC 7F04D3BC 0142082A */ slt $at, $t2, $v0 -/* 081EF0 7F04D3C0 10200002 */ beqz $at, .L7F04D3CC -/* 081EF4 7F04D3C4 00000000 */ nop -/* 081EF8 7F04D3C8 AFA200E4 */ sw $v0, 0xe4($sp) -.L7F04D3CC: -/* 081EFC 7F04D3CC 548BFFD7 */ bnel $a0, $t3, .L7F04D32C -/* 081F00 7F04D3D0 8C980000 */ lw $t8, ($a0) -/* 081F04 7F04D3D4 02E02025 */ move $a0, $s7 -/* 081F08 7F04D3D8 27A600E8 */ addiu $a2, $sp, 0xe8 -/* 081F0C 7F04D3DC 0FC2DB3B */ jal bgTestLineIntersectsBbox -/* 081F10 7F04D3E0 27A700DC */ addiu $a3, $sp, 0xdc -/* 081F14 7F04D3E4 10400162 */ beqz $v0, .L7F04D970 -/* 081F18 7F04D3E8 3C0D8003 */ lui $t5, %hi(D_80032064) -/* 081F1C 7F04D3EC 25AD2064 */ addiu $t5, %lo(D_80032064) # addiu $t5, $t5, 0x2064 -/* 081F20 7F04D3F0 8DA10000 */ lw $at, ($t5) -/* 081F24 7F04D3F4 27A700C4 */ addiu $a3, $sp, 0xc4 -/* 081F28 7F04D3F8 27B8011C */ addiu $t8, $sp, 0x11c -/* 081F2C 7F04D3FC ACE10000 */ sw $at, ($a3) -/* 081F30 7F04D400 8DAE0004 */ lw $t6, 4($t5) -/* 081F34 7F04D404 ACEE0004 */ sw $t6, 4($a3) -/* 081F38 7F04D408 8DA10008 */ lw $at, 8($t5) -/* 081F3C 7F04D40C ACE10008 */ sw $at, 8($a3) -/* 081F40 7F04D410 8FAC0100 */ lw $t4, 0x100($sp) -/* 081F44 7F04D414 8FA800FC */ lw $t0, 0xfc($sp) -/* 081F48 7F04D418 8FAF00F8 */ lw $t7, 0xf8($sp) -/* 081F4C 7F04D41C 8FAB0154 */ lw $t3, 0x154($sp) -/* 081F50 7F04D420 000C5100 */ sll $t2, $t4, 4 -/* 081F54 7F04D424 00084900 */ sll $t1, $t0, 4 -/* 081F58 7F04D428 000FC900 */ sll $t9, $t7, 4 -/* 081F5C 7F04D42C 02192021 */ addu $a0, $s0, $t9 -/* 081F60 7F04D430 02092821 */ addu $a1, $s0, $t1 -/* 081F64 7F04D434 020A3021 */ addu $a2, $s0, $t2 -/* 081F68 7F04D438 AFB8001C */ sw $t8, 0x1c($sp) -/* 081F6C 7F04D43C AFBE0018 */ sw $fp, 0x18($sp) -/* 081F70 7F04D440 AFB70010 */ sw $s7, 0x10($sp) -/* 081F74 7F04D444 0FC24A24 */ jal intersectLineTriangle -/* 081F78 7F04D448 AFAB0014 */ sw $t3, 0x14($sp) -/* 081F7C 7F04D44C 10400148 */ beqz $v0, .L7F04D970 -/* 081F80 7F04D450 00000000 */ nop -/* 081F84 7F04D454 C7A4011C */ lwc1 $f4, 0x11c($sp) -/* 081F88 7F04D458 C6E80000 */ lwc1 $f8, ($s7) -/* 081F8C 7F04D45C C7B20120 */ lwc1 $f18, 0x120($sp) -/* 081F90 7F04D460 4600218D */ trunc.w.s $f6, $f4 -/* 081F94 7F04D464 92290000 */ lbu $t1, ($s1) -/* 081F98 7F04D468 02201025 */ move $v0, $s1 -/* 081F9C 7F04D46C 4600428D */ trunc.w.s $f10, $f8 -/* 081FA0 7F04D470 440E3000 */ mfc1 $t6, $f6 -/* 081FA4 7F04D474 C6E60004 */ lwc1 $f6, 4($s7) -/* 081FA8 7F04D478 4600910D */ trunc.w.s $f4, $f18 -/* 081FAC 7F04D47C 44195000 */ mfc1 $t9, $f10 -/* 081FB0 7F04D480 0271082B */ sltu $at, $s3, $s1 -/* 081FB4 7F04D484 4600320D */ trunc.w.s $f8, $f6 -/* 081FB8 7F04D488 01D94023 */ subu $t0, $t6, $t9 -/* 081FBC 7F04D48C 44888000 */ mtc1 $t0, $f16 -/* 081FC0 7F04D490 440C2000 */ mfc1 $t4, $f4 -/* 081FC4 7F04D494 440B4000 */ mfc1 $t3, $f8 -/* 081FC8 7F04D498 468080A0 */ cvt.s.w $f2, $f16 -/* 081FCC 7F04D49C C7B00124 */ lwc1 $f16, 0x124($sp) -/* 081FD0 7F04D4A0 C6E40008 */ lwc1 $f4, 8($s7) -/* 081FD4 7F04D4A4 018BC023 */ subu $t8, $t4, $t3 -/* 081FD8 7F04D4A8 44985000 */ mtc1 $t8, $f10 -/* 081FDC 7F04D4AC 4600848D */ trunc.w.s $f18, $f16 -/* 081FE0 7F04D4B0 4600218D */ trunc.w.s $f6, $f4 -/* 081FE4 7F04D4B4 440F9000 */ mfc1 $t7, $f18 -/* 081FE8 7F04D4B8 46805320 */ cvt.s.w $f12, $f10 -/* 081FEC 7F04D4BC 44193000 */ mfc1 $t9, $f6 -/* 081FF0 7F04D4C0 46021282 */ mul.s $f10, $f2, $f2 -/* 081FF4 7F04D4C4 01F94023 */ subu $t0, $t7, $t9 -/* 081FF8 7F04D4C8 44884000 */ mtc1 $t0, $f8 -/* 081FFC 7F04D4CC 460C6402 */ mul.s $f16, $f12, $f12 -/* 082000 7F04D4D0 12A9000A */ beq $s5, $t1, .L7F04D4FC -/* 082004 7F04D4D4 468043A0 */ cvt.s.w $f14, $f8 -/* 082008 7F04D4D8 10200008 */ beqz $at, .L7F04D4FC -/* 08200C 7F04D4DC 00000000 */ nop -/* 082010 7F04D4E0 904AFFF8 */ lbu $t2, -8($v0) -.L7F04D4E4: -/* 082014 7F04D4E4 2442FFF8 */ addiu $v0, $v0, -8 -/* 082018 7F04D4E8 0262082B */ sltu $at, $s3, $v0 -/* 08201C 7F04D4EC 12AA0003 */ beq $s5, $t2, .L7F04D4FC -/* 082020 7F04D4F0 00000000 */ nop -/* 082024 7F04D4F4 5420FFFB */ bnezl $at, .L7F04D4E4 -/* 082028 7F04D4F8 904AFFF8 */ lbu $t2, -8($v0) -.L7F04D4FC: -/* 08202C 7F04D4FC 460E7102 */ mul.s $f4, $f14, $f14 -/* 082030 7F04D500 54530004 */ bnel $v0, $s3, .L7F04D514 -/* 082034 7F04D504 8C430004 */ lw $v1, 4($v0) -/* 082038 7F04D508 10000006 */ b .L7F04D524 -/* 08203C 7F04D50C 2404FFFF */ li $a0, -1 -/* 082040 7F04D510 8C430004 */ lw $v1, 4($v0) -.L7F04D514: -/* 082044 7F04D514 3C018000 */ lui $at, 0x8000 -/* 082048 7F04D518 2463FFF8 */ addiu $v1, $v1, -8 -/* 08204C 7F04D51C 00616025 */ or $t4, $v1, $at -/* 082050 7F04D520 95840000 */ lhu $a0, ($t4) -.L7F04D524: -/* 082054 7F04D524 46105480 */ add.s $f18, $f10, $f16 -/* 082058 7F04D528 46049000 */ add.s $f0, $f18, $f4 -/* 08205C 7F04D52C 4614003C */ c.lt.s $f0, $f20 -/* 082060 7F04D530 00000000 */ nop -/* 082064 7F04D534 4500010E */ bc1f .L7F04D970 -/* 082068 7F04D538 00000000 */ nop -/* 08206C 7F04D53C C7A6011C */ lwc1 $f6, 0x11c($sp) -/* 082070 7F04D540 240C0001 */ li $t4, 1 -/* 082074 7F04D544 46000506 */ mov.s $f20, $f0 -/* 082078 7F04D548 E6860000 */ swc1 $f6, ($s4) -/* 08207C 7F04D54C C7A80120 */ lwc1 $f8, 0x120($sp) -/* 082080 7F04D550 E6880004 */ swc1 $f8, 4($s4) -/* 082084 7F04D554 C7AA0124 */ lwc1 $f10, 0x124($sp) -/* 082088 7F04D558 E68A0008 */ swc1 $f10, 8($s4) -/* 08208C 7F04D55C C7B00128 */ lwc1 $f16, 0x128($sp) -/* 082090 7F04D560 E690000C */ swc1 $f16, 0xc($s4) -/* 082094 7F04D564 C7B2012C */ lwc1 $f18, 0x12c($sp) -/* 082098 7F04D568 E6920010 */ swc1 $f18, 0x10($s4) -/* 08209C 7F04D56C C7A40130 */ lwc1 $f4, 0x130($sp) -/* 0820A0 7F04D570 E6840014 */ swc1 $f4, 0x14($s4) -/* 0820A4 7F04D574 8FAB00F8 */ lw $t3, 0xf8($sp) -/* 0820A8 7F04D578 000BC100 */ sll $t8, $t3, 4 -/* 0820AC 7F04D57C 03106821 */ addu $t5, $t8, $s0 -/* 0820B0 7F04D580 AE8D0018 */ sw $t5, 0x18($s4) -/* 0820B4 7F04D584 8FAE00FC */ lw $t6, 0xfc($sp) -/* 0820B8 7F04D588 000E7900 */ sll $t7, $t6, 4 -/* 0820BC 7F04D58C 01F0C821 */ addu $t9, $t7, $s0 -/* 0820C0 7F04D590 AE99001C */ sw $t9, 0x1c($s4) -/* 0820C4 7F04D594 8FA80100 */ lw $t0, 0x100($sp) -/* 0820C8 7F04D598 A684002A */ sh $a0, 0x2a($s4) -/* 0820CC 7F04D59C AE910024 */ sw $s1, 0x24($s4) -/* 0820D0 7F04D5A0 00084900 */ sll $t1, $t0, 4 -/* 0820D4 7F04D5A4 01305021 */ addu $t2, $t1, $s0 -/* 0820D8 7F04D5A8 AE8A0020 */ sw $t2, 0x20($s4) -/* 0820DC 7F04D5AC A6800028 */ sh $zero, 0x28($s4) -/* 0820E0 7F04D5B0 AFAC0110 */ sw $t4, 0x110($sp) -/* 0820E4 7F04D5B4 1000FF05 */ b .L7F04D1CC -/* 0820E8 7F04D5B8 26310008 */ addiu $s1, $s1, 8 -.L7F04D5BC: -/* 0820EC 7F04D5BC 2401FFB1 */ li $at, -79 -/* 0820F0 7F04D5C0 144100EB */ bne $v0, $at, .L7F04D970 -/* 0820F4 7F04D5C4 00000000 */ nop -/* 0820F8 7F04D5C8 00009025 */ move $s2, $zero -.L7F04D5CC: -/* 0820FC 7F04D5CC 3C188003 */ lui $t8, %hi(D_80032070) -/* 082100 7F04D5D0 27182070 */ addiu $t8, %lo(D_80032070) # addiu $t8, $t8, 0x2070 -/* 082104 7F04D5D4 8F010000 */ lw $at, ($t8) -/* 082108 7F04D5D8 27AB0094 */ addiu $t3, $sp, 0x94 -/* 08210C 7F04D5DC 8F0E0004 */ lw $t6, 4($t8) -/* 082110 7F04D5E0 AD610000 */ sw $at, ($t3) -/* 082114 7F04D5E4 8F010008 */ lw $at, 8($t8) -/* 082118 7F04D5E8 3C198003 */ lui $t9, %hi(D_8003207C) -/* 08211C 7F04D5EC 2739207C */ addiu $t9, %lo(D_8003207C) # addiu $t9, $t9, 0x207c -/* 082120 7F04D5F0 AD6E0004 */ sw $t6, 4($t3) -/* 082124 7F04D5F4 AD610008 */ sw $at, 8($t3) -/* 082128 7F04D5F8 8F210000 */ lw $at, ($t9) -/* 08212C 7F04D5FC 27AF0088 */ addiu $t7, $sp, 0x88 -/* 082130 7F04D600 8F290004 */ lw $t1, 4($t9) -/* 082134 7F04D604 ADE10000 */ sw $at, ($t7) -/* 082138 7F04D608 8F210008 */ lw $at, 8($t9) -/* 08213C 7F04D60C ADE90004 */ sw $t1, 4($t7) -/* 082140 7F04D610 1640000B */ bnez $s2, .L7F04D640 -/* 082144 7F04D614 ADE10008 */ sw $at, 8($t7) -/* 082148 7F04D618 8E2A0004 */ lw $t2, 4($s1) -/* 08214C 7F04D61C 314C000F */ andi $t4, $t2, 0xf -/* 082150 7F04D620 AFAC00A4 */ sw $t4, 0xa4($sp) -/* 082154 7F04D624 922D0007 */ lbu $t5, 7($s1) -/* 082158 7F04D628 000D5902 */ srl $t3, $t5, 4 -/* 08215C 7F04D62C AFAB00A8 */ sw $t3, 0xa8($sp) -/* 082160 7F04D630 8E380000 */ lw $t8, ($s1) -/* 082164 7F04D634 330E000F */ andi $t6, $t8, 0xf -/* 082168 7F04D638 10000024 */ b .L7F04D6CC -/* 08216C 7F04D63C AFAE00AC */ sw $t6, 0xac($sp) -.L7F04D640: -/* 082170 7F04D640 24010001 */ li $at, 1 -/* 082174 7F04D644 5641000C */ bnel $s2, $at, .L7F04D678 -/* 082178 7F04D648 24010002 */ li $at, 2 -/* 08217C 7F04D64C 92280006 */ lbu $t0, 6($s1) -/* 082180 7F04D650 310F000F */ andi $t7, $t0, 0xf -/* 082184 7F04D654 AFAF00A4 */ sw $t7, 0xa4($sp) -/* 082188 7F04D658 96390006 */ lhu $t9, 6($s1) -/* 08218C 7F04D65C 00194B02 */ srl $t1, $t9, 0xc -/* 082190 7F04D660 AFA900A8 */ sw $t1, 0xa8($sp) -/* 082194 7F04D664 922A0003 */ lbu $t2, 3($s1) -/* 082198 7F04D668 000A6102 */ srl $t4, $t2, 4 -/* 08219C 7F04D66C 10000017 */ b .L7F04D6CC -/* 0821A0 7F04D670 AFAC00AC */ sw $t4, 0xac($sp) -/* 0821A4 7F04D674 24010002 */ li $at, 2 -.L7F04D678: -/* 0821A8 7F04D678 5641000C */ bnel $s2, $at, .L7F04D6AC -/* 0821AC 7F04D67C 92390004 */ lbu $t9, 4($s1) -/* 0821B0 7F04D680 962D0004 */ lhu $t5, 4($s1) -/* 0821B4 7F04D684 31AB000F */ andi $t3, $t5, 0xf -/* 0821B8 7F04D688 AFAB00A4 */ sw $t3, 0xa4($sp) -/* 0821BC 7F04D68C 92380005 */ lbu $t8, 5($s1) -/* 0821C0 7F04D690 00187102 */ srl $t6, $t8, 4 -/* 0821C4 7F04D694 AFAE00A8 */ sw $t6, 0xa8($sp) -/* 0821C8 7F04D698 92280002 */ lbu $t0, 2($s1) -/* 0821CC 7F04D69C 310F000F */ andi $t7, $t0, 0xf -/* 0821D0 7F04D6A0 1000000A */ b .L7F04D6CC -/* 0821D4 7F04D6A4 AFAF00AC */ sw $t7, 0xac($sp) -/* 0821D8 7F04D6A8 92390004 */ lbu $t9, 4($s1) -.L7F04D6AC: -/* 0821DC 7F04D6AC 3329000F */ andi $t1, $t9, 0xf -/* 0821E0 7F04D6B0 AFA900A4 */ sw $t1, 0xa4($sp) -/* 0821E4 7F04D6B4 8E2A0004 */ lw $t2, 4($s1) -/* 0821E8 7F04D6B8 000A6702 */ srl $t4, $t2, 0x1c -/* 0821EC 7F04D6BC AFAC00A8 */ sw $t4, 0xa8($sp) -/* 0821F0 7F04D6C0 962D0002 */ lhu $t5, 2($s1) -/* 0821F4 7F04D6C4 000D5B02 */ srl $t3, $t5, 0xc -/* 0821F8 7F04D6C8 AFAB00AC */ sw $t3, 0xac($sp) -.L7F04D6CC: -/* 0821FC 7F04D6CC 27A400A4 */ addiu $a0, $sp, 0xa4 -/* 082200 7F04D6D0 8C980000 */ lw $t8, ($a0) -.L7F04D6D4: -/* 082204 7F04D6D4 8FA80094 */ lw $t0, 0x94($sp) -/* 082208 7F04D6D8 24840004 */ addiu $a0, $a0, 4 -/* 08220C 7F04D6DC 00187100 */ sll $t6, $t8, 4 -/* 082210 7F04D6E0 020E1821 */ addu $v1, $s0, $t6 -/* 082214 7F04D6E4 84620000 */ lh $v0, ($v1) -/* 082218 7F04D6E8 0048082A */ slt $at, $v0, $t0 -/* 08221C 7F04D6EC 50200004 */ beql $at, $zero, .L7F04D700 -/* 082220 7F04D6F0 8FAF0088 */ lw $t7, 0x88($sp) -/* 082224 7F04D6F4 AFA20094 */ sw $v0, 0x94($sp) -/* 082228 7F04D6F8 84620000 */ lh $v0, ($v1) -/* 08222C 7F04D6FC 8FAF0088 */ lw $t7, 0x88($sp) -.L7F04D700: -/* 082230 7F04D700 01E2082A */ slt $at, $t7, $v0 -/* 082234 7F04D704 50200003 */ beql $at, $zero, .L7F04D714 -/* 082238 7F04D708 84620002 */ lh $v0, 2($v1) -/* 08223C 7F04D70C AFA20088 */ sw $v0, 0x88($sp) -/* 082240 7F04D710 84620002 */ lh $v0, 2($v1) -.L7F04D714: -/* 082244 7F04D714 8FB90098 */ lw $t9, 0x98($sp) -/* 082248 7F04D718 0059082A */ slt $at, $v0, $t9 -/* 08224C 7F04D71C 50200004 */ beql $at, $zero, .L7F04D730 -/* 082250 7F04D720 8FA9008C */ lw $t1, 0x8c($sp) -/* 082254 7F04D724 AFA20098 */ sw $v0, 0x98($sp) -/* 082258 7F04D728 84620002 */ lh $v0, 2($v1) -/* 08225C 7F04D72C 8FA9008C */ lw $t1, 0x8c($sp) -.L7F04D730: -/* 082260 7F04D730 0122082A */ slt $at, $t1, $v0 -/* 082264 7F04D734 50200003 */ beql $at, $zero, .L7F04D744 -/* 082268 7F04D738 84620004 */ lh $v0, 4($v1) -/* 08226C 7F04D73C AFA2008C */ sw $v0, 0x8c($sp) -/* 082270 7F04D740 84620004 */ lh $v0, 4($v1) -.L7F04D744: -/* 082274 7F04D744 8FAA009C */ lw $t2, 0x9c($sp) -/* 082278 7F04D748 004A082A */ slt $at, $v0, $t2 -/* 08227C 7F04D74C 50200004 */ beql $at, $zero, .L7F04D760 -/* 082280 7F04D750 8FAC0090 */ lw $t4, 0x90($sp) -/* 082284 7F04D754 AFA2009C */ sw $v0, 0x9c($sp) -/* 082288 7F04D758 84620004 */ lh $v0, 4($v1) -/* 08228C 7F04D75C 8FAC0090 */ lw $t4, 0x90($sp) -.L7F04D760: -/* 082290 7F04D760 0182082A */ slt $at, $t4, $v0 -/* 082294 7F04D764 10200002 */ beqz $at, .L7F04D770 -/* 082298 7F04D768 00000000 */ nop -/* 08229C 7F04D76C AFA20090 */ sw $v0, 0x90($sp) -.L7F04D770: -/* 0822A0 7F04D770 5496FFD8 */ bnel $a0, $s6, .L7F04D6D4 -/* 0822A4 7F04D774 8C980000 */ lw $t8, ($a0) -/* 0822A8 7F04D778 02E02025 */ move $a0, $s7 -/* 0822AC 7F04D77C 03C02825 */ move $a1, $fp -/* 0822B0 7F04D780 27A60094 */ addiu $a2, $sp, 0x94 -/* 0822B4 7F04D784 0FC2DB3B */ jal bgTestLineIntersectsBbox -/* 0822B8 7F04D788 27A70088 */ addiu $a3, $sp, 0x88 -/* 0822BC 7F04D78C 10400074 */ beqz $v0, .L7F04D960 -/* 0822C0 7F04D790 3C0D8003 */ lui $t5, %hi(D_80032088) -/* 0822C4 7F04D794 25AD2088 */ addiu $t5, %lo(D_80032088) # addiu $t5, $t5, 0x2088 -/* 0822C8 7F04D798 8DA10000 */ lw $at, ($t5) -/* 0822CC 7F04D79C 27A70070 */ addiu $a3, $sp, 0x70 -/* 0822D0 7F04D7A0 27AB011C */ addiu $t3, $sp, 0x11c -/* 0822D4 7F04D7A4 ACE10000 */ sw $at, ($a3) -/* 0822D8 7F04D7A8 8DB80004 */ lw $t8, 4($t5) -/* 0822DC 7F04D7AC ACF80004 */ sw $t8, 4($a3) -/* 0822E0 7F04D7B0 8DA10008 */ lw $at, 8($t5) -/* 0822E4 7F04D7B4 ACE10008 */ sw $at, 8($a3) -/* 0822E8 7F04D7B8 8FA900AC */ lw $t1, 0xac($sp) -/* 0822EC 7F04D7BC 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 0822F0 7F04D7C0 8FAE00A4 */ lw $t6, 0xa4($sp) -/* 0822F4 7F04D7C4 8FAC0154 */ lw $t4, 0x154($sp) -/* 0822F8 7F04D7C8 00095100 */ sll $t2, $t1, 4 -/* 0822FC 7F04D7CC 000FC900 */ sll $t9, $t7, 4 -/* 082300 7F04D7D0 000E4100 */ sll $t0, $t6, 4 -/* 082304 7F04D7D4 02082021 */ addu $a0, $s0, $t0 -/* 082308 7F04D7D8 02192821 */ addu $a1, $s0, $t9 -/* 08230C 7F04D7DC 020A3021 */ addu $a2, $s0, $t2 -/* 082310 7F04D7E0 AFAB001C */ sw $t3, 0x1c($sp) -/* 082314 7F04D7E4 AFBE0018 */ sw $fp, 0x18($sp) -/* 082318 7F04D7E8 AFB70010 */ sw $s7, 0x10($sp) -/* 08231C 7F04D7EC 0FC24A24 */ jal intersectLineTriangle -/* 082320 7F04D7F0 AFAC0014 */ sw $t4, 0x14($sp) -/* 082324 7F04D7F4 5040005B */ beql $v0, $zero, .L7F04D964 -/* 082328 7F04D7F8 26520001 */ addiu $s2, $s2, 1 -/* 08232C 7F04D7FC C7A6011C */ lwc1 $f6, 0x11c($sp) -/* 082330 7F04D800 C6EA0000 */ lwc1 $f10, ($s7) -/* 082334 7F04D804 C7A40120 */ lwc1 $f4, 0x120($sp) -/* 082338 7F04D808 4600320D */ trunc.w.s $f8, $f6 -/* 08233C 7F04D80C 92390000 */ lbu $t9, ($s1) -/* 082340 7F04D810 02201025 */ move $v0, $s1 -/* 082344 7F04D814 4600540D */ trunc.w.s $f16, $f10 -/* 082348 7F04D818 44184000 */ mfc1 $t8, $f8 -/* 08234C 7F04D81C C6E80004 */ lwc1 $f8, 4($s7) -/* 082350 7F04D820 4600218D */ trunc.w.s $f6, $f4 -/* 082354 7F04D824 44088000 */ mfc1 $t0, $f16 -/* 082358 7F04D828 0271082B */ sltu $at, $s3, $s1 -/* 08235C 7F04D82C 4600428D */ trunc.w.s $f10, $f8 -/* 082360 7F04D830 03087823 */ subu $t7, $t8, $t0 -/* 082364 7F04D834 448F9000 */ mtc1 $t7, $f18 -/* 082368 7F04D838 44093000 */ mfc1 $t1, $f6 -/* 08236C 7F04D83C 440C5000 */ mfc1 $t4, $f10 -/* 082370 7F04D840 468090A0 */ cvt.s.w $f2, $f18 -/* 082374 7F04D844 C7B20124 */ lwc1 $f18, 0x124($sp) -/* 082378 7F04D848 C6E60008 */ lwc1 $f6, 8($s7) -/* 08237C 7F04D84C 012C5823 */ subu $t3, $t1, $t4 -/* 082380 7F04D850 448B8000 */ mtc1 $t3, $f16 -/* 082384 7F04D854 4600910D */ trunc.w.s $f4, $f18 -/* 082388 7F04D858 4600320D */ trunc.w.s $f8, $f6 -/* 08238C 7F04D85C 440E2000 */ mfc1 $t6, $f4 -/* 082390 7F04D860 46808320 */ cvt.s.w $f12, $f16 -/* 082394 7F04D864 44084000 */ mfc1 $t0, $f8 -/* 082398 7F04D868 46021402 */ mul.s $f16, $f2, $f2 -/* 08239C 7F04D86C 01C87823 */ subu $t7, $t6, $t0 -/* 0823A0 7F04D870 448F5000 */ mtc1 $t7, $f10 -/* 0823A4 7F04D874 460C6482 */ mul.s $f18, $f12, $f12 -/* 0823A8 7F04D878 12B9000A */ beq $s5, $t9, .L7F04D8A4 -/* 0823AC 7F04D87C 468053A0 */ cvt.s.w $f14, $f10 -/* 0823B0 7F04D880 10200008 */ beqz $at, .L7F04D8A4 -/* 0823B4 7F04D884 00000000 */ nop -/* 0823B8 7F04D888 904AFFF8 */ lbu $t2, -8($v0) -.L7F04D88C: -/* 0823BC 7F04D88C 2442FFF8 */ addiu $v0, $v0, -8 -/* 0823C0 7F04D890 0262082B */ sltu $at, $s3, $v0 -/* 0823C4 7F04D894 12AA0003 */ beq $s5, $t2, .L7F04D8A4 -/* 0823C8 7F04D898 00000000 */ nop -/* 0823CC 7F04D89C 5420FFFB */ bnezl $at, .L7F04D88C -/* 0823D0 7F04D8A0 904AFFF8 */ lbu $t2, -8($v0) -.L7F04D8A4: -/* 0823D4 7F04D8A4 460E7182 */ mul.s $f6, $f14, $f14 -/* 0823D8 7F04D8A8 54530004 */ bnel $v0, $s3, .L7F04D8BC -/* 0823DC 7F04D8AC 8C430004 */ lw $v1, 4($v0) -/* 0823E0 7F04D8B0 10000006 */ b .L7F04D8CC -/* 0823E4 7F04D8B4 2404FFFF */ li $a0, -1 -/* 0823E8 7F04D8B8 8C430004 */ lw $v1, 4($v0) -.L7F04D8BC: -/* 0823EC 7F04D8BC 3C018000 */ lui $at, 0x8000 -/* 0823F0 7F04D8C0 2463FFF8 */ addiu $v1, $v1, -8 -/* 0823F4 7F04D8C4 00614825 */ or $t1, $v1, $at -/* 0823F8 7F04D8C8 95240000 */ lhu $a0, ($t1) -.L7F04D8CC: -/* 0823FC 7F04D8CC 46128100 */ add.s $f4, $f16, $f18 -/* 082400 7F04D8D0 46062000 */ add.s $f0, $f4, $f6 -/* 082404 7F04D8D4 4614003C */ c.lt.s $f0, $f20 -/* 082408 7F04D8D8 00000000 */ nop -/* 08240C 7F04D8DC 45020021 */ bc1fl .L7F04D964 -/* 082410 7F04D8E0 26520001 */ addiu $s2, $s2, 1 -/* 082414 7F04D8E4 C7A8011C */ lwc1 $f8, 0x11c($sp) -/* 082418 7F04D8E8 26490001 */ addiu $t1, $s2, 1 -/* 08241C 7F04D8EC 46000506 */ mov.s $f20, $f0 -/* 082420 7F04D8F0 E6880000 */ swc1 $f8, ($s4) -/* 082424 7F04D8F4 C7AA0120 */ lwc1 $f10, 0x120($sp) -/* 082428 7F04D8F8 E68A0004 */ swc1 $f10, 4($s4) -/* 08242C 7F04D8FC C7B00124 */ lwc1 $f16, 0x124($sp) -/* 082430 7F04D900 E6900008 */ swc1 $f16, 8($s4) -/* 082434 7F04D904 C7B20128 */ lwc1 $f18, 0x128($sp) -/* 082438 7F04D908 E692000C */ swc1 $f18, 0xc($s4) -/* 08243C 7F04D90C C7A4012C */ lwc1 $f4, 0x12c($sp) -/* 082440 7F04D910 E6840010 */ swc1 $f4, 0x10($s4) -/* 082444 7F04D914 C7A60130 */ lwc1 $f6, 0x130($sp) -/* 082448 7F04D918 E6860014 */ swc1 $f6, 0x14($s4) -/* 08244C 7F04D91C 8FAC00A4 */ lw $t4, 0xa4($sp) -/* 082450 7F04D920 000C5900 */ sll $t3, $t4, 4 -/* 082454 7F04D924 01706821 */ addu $t5, $t3, $s0 -/* 082458 7F04D928 AE8D0018 */ sw $t5, 0x18($s4) -/* 08245C 7F04D92C 8FB800A8 */ lw $t8, 0xa8($sp) -/* 082460 7F04D930 240C0001 */ li $t4, 1 -/* 082464 7F04D934 00187100 */ sll $t6, $t8, 4 -/* 082468 7F04D938 01D04021 */ addu $t0, $t6, $s0 -/* 08246C 7F04D93C AE88001C */ sw $t0, 0x1c($s4) -/* 082470 7F04D940 8FAF00AC */ lw $t7, 0xac($sp) -/* 082474 7F04D944 A684002A */ sh $a0, 0x2a($s4) -/* 082478 7F04D948 AE910024 */ sw $s1, 0x24($s4) -/* 08247C 7F04D94C 000FC900 */ sll $t9, $t7, 4 -/* 082480 7F04D950 03305021 */ addu $t2, $t9, $s0 -/* 082484 7F04D954 AE8A0020 */ sw $t2, 0x20($s4) -/* 082488 7F04D958 A6890028 */ sh $t1, 0x28($s4) -/* 08248C 7F04D95C AFAC0110 */ sw $t4, 0x110($sp) -.L7F04D960: -/* 082490 7F04D960 26520001 */ addiu $s2, $s2, 1 -.L7F04D964: -/* 082494 7F04D964 24010004 */ li $at, 4 -/* 082498 7F04D968 1641FF18 */ bne $s2, $at, .L7F04D5CC -/* 08249C 7F04D96C 00000000 */ nop -.L7F04D970: -/* 0824A0 7F04D970 1000FE16 */ b .L7F04D1CC -/* 0824A4 7F04D974 26310008 */ addiu $s1, $s1, 8 -.L7F04D978: -/* 0824A8 7F04D978 8FBF0054 */ lw $ra, 0x54($sp) -/* 0824AC 7F04D97C 8FA20110 */ lw $v0, 0x110($sp) -/* 0824B0 7F04D980 D7B40028 */ ldc1 $f20, 0x28($sp) -/* 0824B4 7F04D984 8FB00030 */ lw $s0, 0x30($sp) -/* 0824B8 7F04D988 8FB10034 */ lw $s1, 0x34($sp) -/* 0824BC 7F04D98C 8FB20038 */ lw $s2, 0x38($sp) -/* 0824C0 7F04D990 8FB3003C */ lw $s3, 0x3c($sp) -/* 0824C4 7F04D994 8FB40040 */ lw $s4, 0x40($sp) -/* 0824C8 7F04D998 8FB50044 */ lw $s5, 0x44($sp) -/* 0824CC 7F04D99C 8FB60048 */ lw $s6, 0x48($sp) -/* 0824D0 7F04D9A0 8FB7004C */ lw $s7, 0x4c($sp) -/* 0824D4 7F04D9A4 8FBE0050 */ lw $fp, 0x50($sp) -/* 0824D8 7F04D9A8 03E00008 */ jr $ra -/* 0824DC 7F04D9AC 27BD0150 */ addiu $sp, $sp, 0x150 -) + prop->timetoregen = 1200; #endif + } + + if (shots >= 12) + { + obj->runtime_bitflags |= RUNTIMEBITFLAG_00001000; + if(1); + obj->flags &= ~RUNTIMEBITFLAG_00000100; + } +} + + +BoundVec D_8003204C = {0x7FFF, 0x7FFF, 0x7FFF}; +BoundVec D_80032058 = {-0x8000, -0x8000, -0x8000}; +coord3d D_80032064 = {0, 0, 0}; +BoundVec D_80032070 = {0x7FFF, 0x7FFF, 0x7FFF}; +BoundVec D_8003207C = {-0x8000, -0x8000, -0x8000}; +coord3d D_80032088 = {0, 0, 0}; + + +bool bgTestHitOnObj(coord3d *arg0, coord3d *arg1, coord3d *arg2, Gfx *gdl, Gfx *gdl2, Vertex *vertices, struct HitThing *hitthing) +{ + Vertex *vtxbase; + HitThing hitbuf; + Vertex *pt0; + Vertex *pt1; + s32 result[1]; + s32 padB[3]; + s32 idx[3]; + s32 padC; + BoundVec bboxMin; + BoundVec bboxMax; + s32 padD[3]; + coord3d zero; + f32 bestDist; + f32 dx; + f32 dy; + f32 dz; + f32 d; + s32 idx2[3]; + Vertex *pt2; + BoundVec bboxMin2; + BoundVec bboxMax2; + Gfx *cmdStart; + Gfx *tcmd; + Vertex *v; + coord3d zero2; + s32 s2; + s32 i; + s32 op; + s32 texnum; + + bestDist = M_U32_MAX_VALUE_F; + result[0] = 0; + cmdStart = gdl; + + while (1) + { + op = *((s8 *) gdl); + if (op == (s8)G_ENDDL) + { + if (gdl2 == 0) + { + break; + } + + cmdStart = gdl2; + + if (0); + + gdl = gdl2; + gdl2 = 0; + + continue; + } + + if (op == G_VTX) + { + op = ((u8 *) gdl)[1] & 0xf; + padC = ((u32 *) gdl)[1] & 0x00ffffff; + vtxbase = (Vertex *) ((((s32) vertices) + padC) - (op << 4)); + gdl++; + + continue; + } + + if (op == (s8)G_TRI1) + { + bboxMin = D_8003204C; + bboxMax = D_80032058; + + idx[0] = ((u8 *) gdl)[5] / 10; + idx[1] = ((u8 *) gdl)[6] / 10; + idx[2] = ((u8 *) gdl)[7] / 10; + + for (i = 0; i < 3; i++) + { + v = vtxbase; + v += idx[i]; + + if (v->coord.x < bboxMin.x) + { + bboxMin.x = v->coord.x; + } + if (bboxMax.x < v->coord.x) + { + bboxMax.x = v->coord.x; + } + if (v->coord.y < bboxMin.y) + { + bboxMin.y = v->coord.y; + } + if (bboxMax.y < v->coord.y) + { + bboxMax.y = v->coord.y; + } + if (v->coord.z < bboxMin.z) + { + bboxMin.z = v->coord.z; + } + if (bboxMax.z < v->coord.z) + { + bboxMax.z = v->coord.z; + } + } + + if (bgTestRayIntersectsBbox(arg0, arg2, (s32 *) (&bboxMin), (s32 *) (&bboxMax))) + { + zero = D_80032064; + pt0 = vtxbase; pt0 += idx[0]; pt1 = vtxbase; pt1 += idx[1]; pt2 = vtxbase; pt2 += idx[2]; + + if (intersectRayTriangle(pt0, pt1, pt2, &zero, arg0, arg1, arg2, &hitbuf)) + { + dx = (f32) (((s32) hitbuf.hitpos.x) - ((s32) arg0->x)); + dy = (f32) (((s32) hitbuf.hitpos.y) - ((s32) arg0->y)); + dz = (f32) (((s32) hitbuf.hitpos.z) - ((s32) arg0->z)); + tcmd = gdl; + if (((*((u8 *) gdl)) != 253) && (cmdStart < gdl)) + { + do + { + tcmd--; + + if ((*((u8 *) tcmd)) == 253) + { + break; + } + } while (cmdStart < tcmd); + + } + + if (tcmd == cmdStart) + { + texnum = -1; + } + else + { + padC = ((u32 *) tcmd)[1] - 8; + texnum = *((u16 *) (padC | 0x80000000)); + } + + d = ((dx * dx) + (dy * dy)) + (dz * dz); + + if (d < bestDist) + { + bestDist = d; + hitthing->hitpos.x = hitbuf.hitpos.x; + hitthing->hitpos.y = hitbuf.hitpos.y; + hitthing->hitpos.z = hitbuf.hitpos.z; + hitthing->normal.x = hitbuf.normal.x; + hitthing->normal.y = hitbuf.normal.y; + hitthing->normal.z = hitbuf.normal.z; + hitthing->vtx0 = &vtxbase[idx[0]]; + hitthing->vtx1 = &vtxbase[idx[1]]; + hitthing->vtx2 = &vtxbase[idx[2]]; + hitthing->texturenum = texnum; + hitthing->tricmd = gdl; + hitthing->unk28 = 0; + result[0] = 1; + } + } + } + } + else if (op == (s8)G_TRI4) + { + s2 = 0; + do + { + bboxMin2 = D_80032070; + bboxMax2 = D_8003207C; + + if (s2 == 0) + { + idx2[0] = ((u32 *) gdl)[1] & 0xf; + idx2[1] = ((u32) ((u8 *) gdl)[7]) >> 4; + idx2[2] = ((u32 *) gdl)[0] & 0xf; + } + else if (s2 == 1) + { + idx2[0] = ((u8 *) gdl)[6] & 0xf; + idx2[1] = ((u32) ((u16 *) gdl)[3]) >> 12; + idx2[2] = ((u32) ((u8 *) gdl)[3]) >> 4; + } + else if (s2 == 2) + { + idx2[0] = ((u16 *) gdl)[2] & 0xf; + idx2[1] = ((u32) ((u8 *) gdl)[5]) >> 4; + idx2[2] = ((u8 *) gdl)[2] & 0xf; + } + else + { + idx2[0] = ((u8 *) gdl)[4] & 0xf; + idx2[1] = ((u32 *) gdl)[1] >> 28; + idx2[2] = ((u32) ((u16 *) gdl)[1]) >> 12; + } + + for (i = 0; i < 3; i++) + { + v = vtxbase; + v += idx2[i]; + + if (v->coord.x < bboxMin2.x) + { + bboxMin2.x = v->coord.x; + } + if (bboxMax2.x < v->coord.x) + { + bboxMax2.x = v->coord.x; + } + if (v->coord.y < bboxMin2.y) + { + bboxMin2.y = v->coord.y; + } + if (bboxMax2.y < v->coord.y) + { + bboxMax2.y = v->coord.y; + } + if (v->coord.z < bboxMin2.z) + { + bboxMin2.z = v->coord.z; + } + if (bboxMax2.z < v->coord.z) + { + bboxMax2.z = v->coord.z; + } + } + + if (bgTestRayIntersectsBbox(arg0, arg2, (s32 *) (&bboxMin2), (s32 *) (&bboxMax2))) + { + zero2 = D_80032088; + pt0 = vtxbase; pt0 += idx2[0]; pt1 = vtxbase; pt1 += idx2[1]; pt2 = vtxbase; pt2 += idx2[2]; + + if (intersectRayTriangle(pt0, pt1, pt2, &zero2, arg0, arg1, arg2, &hitbuf)) + { + dx = (f32) (((s32) hitbuf.hitpos.x) - ((s32) arg0->x)); + dy = (f32) (((s32) hitbuf.hitpos.y) - ((s32) arg0->y)); + dz = (f32) (((s32) hitbuf.hitpos.z) - ((s32) arg0->z)); + tcmd = gdl; + + if (((*((u8 *) gdl)) != G_SETTIMG) && (cmdStart < gdl)) + { + do + { + tcmd--; + if ((*((u8 *) tcmd)) == G_SETTIMG) + { + break; + } + } while (cmdStart < tcmd); + + } + + if (tcmd == cmdStart) + { + texnum = -1; + } + else + { + padC = ((u32 *) tcmd)[1] - 8; + texnum = *((u16 *) (padC | 0x80000000)); + } + + d = ((dx * dx) + (dy * dy)) + (dz * dz); + + if (d < bestDist) + { + bestDist = d; + hitthing->hitpos.x = hitbuf.hitpos.x; + hitthing->hitpos.y = hitbuf.hitpos.y; + hitthing->hitpos.z = hitbuf.hitpos.z; + hitthing->normal.x = hitbuf.normal.x; + hitthing->normal.y = hitbuf.normal.y; + hitthing->normal.z = hitbuf.normal.z; + hitthing->vtx0 = &vtxbase[idx2[0]]; + hitthing->vtx1 = &vtxbase[idx2[1]]; + hitthing->vtx2 = &vtxbase[idx2[2]]; + hitthing->texturenum = texnum; + hitthing->tricmd = gdl; + hitthing->unk28 = s2 + 1; + result[0] = 1; + } + } + } + s2++; + } while (s2 != 4); + } + gdl++; + } + + return result[0]; +} // PD: obj_find_hitthing_by_gfx_tris -bool sub_GAME_7F04D9B0(Model *model, ModelNode *nodearg, coord3d *arg2, coord3d *arg3, struct HitThing *hitthing, s32 *dstmtxindex, ModelNode **dstnode) +bool propobjFindHit(Model *model, ModelNode *startNode, coord3d *rayPos, coord3d *rayDir, struct HitThing *hitthing, s32 *dstmtxindex, ModelNode **dstnode) { coord3d spec; coord3d spe0; @@ -30842,7 +8719,7 @@ bool sub_GAME_7F04D9B0(Model *model, ModelNode *nodearg, coord3d *arg2, coord3d spd0 = NULL; done = FALSE; - node = nodearg; + node = startNode; vertices = NULL; while (node && !done) @@ -30927,15 +8804,15 @@ bool sub_GAME_7F04D9B0(Model *model, ModelNode *nodearg, coord3d *arg2, coord3d matrix_4x4_invert_affine(mtx->m, sp64.m); - spec.x = arg2->x; - spec.y = arg2->y; - spec.z = arg2->z; + spec.x = rayPos->x; + spec.y = rayPos->y; + spec.z = rayPos->z; mtx4TransformVecInPlace(&sp64, &spec); - spd4.x = arg3->x; - spd4.y = arg3->y; - spd4.z = arg3->z; + spd4.x = rayDir->x; + spd4.y = rayDir->y; + spd4.z = rayDir->z; mtx4RotateVecInPlace(&sp64, &spd4); @@ -30958,7 +8835,7 @@ bool sub_GAME_7F04D9B0(Model *model, ModelNode *nodearg, coord3d *arg2, coord3d } else { while (node) { - if (node == nodearg) + if (node == startNode) { node = NULL; break; @@ -31001,135 +8878,61 @@ void sub_GAME_7F04DCB4(ObjectRecord* obj) } -#ifdef NONMATCHING -void sub_GAME_7F04DD68(void) { +/** + * Address: 7F04DD68 + */ +void sub_GAME_7F04DD68(DoorRecord *door) +{ + PropRecord *prop; + Model *model; + struct ModelRoData_BoundingBoxRecord *bbox; + struct ModelRwData_SwitchRecord *switchdata; + Mtxf mtx; + prop = door->prop; + model = door->model; + bbox = (struct ModelRoData_BoundingBoxRecord *) model->obj->Switches[2]->Data; + + door7F0526EC(door, &mtx); + sub_GAME_7F0A1DA0(&mtx.m[3][0], &mtx.m[0][0], &mtx.m[1][0], &mtx.m[2][0], bbox->Bounds.xmin, bbox->Bounds.xmax, bbox->Bounds.ymin, bbox->Bounds.ymax, bbox->Bounds.zmin, bbox->Bounds.zmax); + + explosionClearBulletImpactRoomByFlag(prop, 1); + + switchdata = (struct ModelRwData_SwitchRecord *)modelGetNodeRwData(model, model->obj->Switches[1]); + switchdata->visible = FALSE; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F04DD68 -/* 082898 7F04DD68 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 08289C 7F04DD6C AFBF002C */ sw $ra, 0x2c($sp) -/* 0828A0 7F04DD70 8C8E0010 */ lw $t6, 0x10($a0) -/* 0828A4 7F04DD74 27A50030 */ addiu $a1, $sp, 0x30 -/* 0828A8 7F04DD78 AFAE007C */ sw $t6, 0x7c($sp) -/* 0828AC 7F04DD7C 8C830014 */ lw $v1, 0x14($a0) -/* 0828B0 7F04DD80 8C6F0008 */ lw $t7, 8($v1) -/* 0828B4 7F04DD84 8DF80008 */ lw $t8, 8($t7) -/* 0828B8 7F04DD88 8F190008 */ lw $t9, 8($t8) -/* 0828BC 7F04DD8C 8F220004 */ lw $v0, 4($t9) -/* 0828C0 7F04DD90 AFA30078 */ sw $v1, 0x78($sp) -/* 0828C4 7F04DD94 0FC149BB */ jal door7F0526EC -/* 0828C8 7F04DD98 AFA20074 */ sw $v0, 0x74($sp) -/* 0828CC 7F04DD9C 8FA20074 */ lw $v0, 0x74($sp) -/* 0828D0 7F04DDA0 27A40060 */ addiu $a0, $sp, 0x60 -/* 0828D4 7F04DDA4 27A50030 */ addiu $a1, $sp, 0x30 -/* 0828D8 7F04DDA8 C4440004 */ lwc1 $f4, 4($v0) -/* 0828DC 7F04DDAC 27A60040 */ addiu $a2, $sp, 0x40 -/* 0828E0 7F04DDB0 27A70050 */ addiu $a3, $sp, 0x50 -/* 0828E4 7F04DDB4 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0828E8 7F04DDB8 C4460008 */ lwc1 $f6, 8($v0) -/* 0828EC 7F04DDBC E7A60014 */ swc1 $f6, 0x14($sp) -/* 0828F0 7F04DDC0 C448000C */ lwc1 $f8, 0xc($v0) -/* 0828F4 7F04DDC4 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0828F8 7F04DDC8 C44A0010 */ lwc1 $f10, 0x10($v0) -/* 0828FC 7F04DDCC E7AA001C */ swc1 $f10, 0x1c($sp) -/* 082900 7F04DDD0 C4500014 */ lwc1 $f16, 0x14($v0) -/* 082904 7F04DDD4 E7B00020 */ swc1 $f16, 0x20($sp) -/* 082908 7F04DDD8 C4520018 */ lwc1 $f18, 0x18($v0) -/* 08290C 7F04DDDC 0FC28768 */ jal sub_GAME_7F0A1DA0 -/* 082910 7F04DDE0 E7B20024 */ swc1 $f18, 0x24($sp) -/* 082914 7F04DDE4 8FA4007C */ lw $a0, 0x7c($sp) -/* 082918 7F04DDE8 0FC28333 */ jal explosionClearBulletImpactRoomByFlag -/* 08291C 7F04DDEC 24050001 */ li $a1, 1 -/* 082920 7F04DDF0 8FA40078 */ lw $a0, 0x78($sp) -/* 082924 7F04DDF4 8C880008 */ lw $t0, 8($a0) -/* 082928 7F04DDF8 8D090008 */ lw $t1, 8($t0) -/* 08292C 7F04DDFC 0FC1B1E7 */ jal modelGetNodeRwData -/* 082930 7F04DE00 8D250004 */ lw $a1, 4($t1) -/* 082934 7F04DE04 AC400000 */ sw $zero, ($v0) -/* 082938 7F04DE08 8FBF002C */ lw $ra, 0x2c($sp) -/* 08293C 7F04DE0C 27BD0080 */ addiu $sp, $sp, 0x80 -/* 082940 7F04DE10 03E00008 */ jr $ra -/* 082944 7F04DE14 00000000 */ nop -) -#endif +/** + * Address: 7F04DE18 + */ +void objBreakCCTVGlass(ObjectRecord *obj) +{ + PropRecord *prop; + s32 unused[2]; + union ModelRoData *rodata; + Mtxf *node_mtx; + Mtxf glassNodeWorldMtx; + Model *model; + prop = obj->prop; + model = obj->model; + if (prop->flags & PROPFLAG_ONSCREEN) + { + rodata = model->obj->Switches[2]->Data; -#ifdef NONMATCHING + node_mtx = modelFindNodeMtx(model, model->obj->Switches[1], 0); -#else -GLOBAL_ASM( - -.text -glabel sub_GAME_7F04DE18 -/* 082948 7F04DE18 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 08294C 7F04DE1C AFBF0034 */ sw $ra, 0x34($sp) -/* 082950 7F04DE20 AFB00030 */ sw $s0, 0x30($sp) -/* 082954 7F04DE24 8C8E0010 */ lw $t6, 0x10($a0) -/* 082958 7F04DE28 AFAE0094 */ sw $t6, 0x94($sp) -/* 08295C 7F04DE2C 91D80001 */ lbu $t8, 1($t6) -/* 082960 7F04DE30 8C900014 */ lw $s0, 0x14($a0) -/* 082964 7F04DE34 33190002 */ andi $t9, $t8, 2 -/* 082968 7F04DE38 53200023 */ beql $t9, $zero, .L7F04DEC8 -/* 08296C 7F04DE3C 8FA40094 */ lw $a0, 0x94($sp) -/* 082970 7F04DE40 8E080008 */ lw $t0, 8($s0) -/* 082974 7F04DE44 02002025 */ move $a0, $s0 -/* 082978 7F04DE48 00003025 */ move $a2, $zero -/* 08297C 7F04DE4C 8D020008 */ lw $v0, 8($t0) -/* 082980 7F04DE50 8C490008 */ lw $t1, 8($v0) -/* 082984 7F04DE54 8C450004 */ lw $a1, 4($v0) -/* 082988 7F04DE58 8D230004 */ lw $v1, 4($t1) -/* 08298C 7F04DE5C 0FC1B198 */ jal modelFindNodeMtx -/* 082990 7F04DE60 AFA30088 */ sw $v1, 0x88($sp) -/* 082994 7F04DE64 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 082998 7F04DE68 AFA20084 */ sw $v0, 0x84($sp) -/* 08299C 7F04DE6C 00402025 */ move $a0, $v0 -/* 0829A0 7F04DE70 8FA50084 */ lw $a1, 0x84($sp) -/* 0829A4 7F04DE74 0FC16063 */ jal matrix_4x4_multiply_homogeneous -/* 0829A8 7F04DE78 27A60044 */ addiu $a2, $sp, 0x44 -/* 0829AC 7F04DE7C 8FA30088 */ lw $v1, 0x88($sp) -/* 0829B0 7F04DE80 27A40074 */ addiu $a0, $sp, 0x74 -/* 0829B4 7F04DE84 27A50044 */ addiu $a1, $sp, 0x44 -/* 0829B8 7F04DE88 C4640004 */ lwc1 $f4, 4($v1) -/* 0829BC 7F04DE8C 27A60054 */ addiu $a2, $sp, 0x54 -/* 0829C0 7F04DE90 27A70064 */ addiu $a3, $sp, 0x64 -/* 0829C4 7F04DE94 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0829C8 7F04DE98 C4660008 */ lwc1 $f6, 8($v1) -/* 0829CC 7F04DE9C E7A60014 */ swc1 $f6, 0x14($sp) -/* 0829D0 7F04DEA0 C468000C */ lwc1 $f8, 0xc($v1) -/* 0829D4 7F04DEA4 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0829D8 7F04DEA8 C46A0010 */ lwc1 $f10, 0x10($v1) -/* 0829DC 7F04DEAC E7AA001C */ swc1 $f10, 0x1c($sp) -/* 0829E0 7F04DEB0 C4700014 */ lwc1 $f16, 0x14($v1) -/* 0829E4 7F04DEB4 E7B00020 */ swc1 $f16, 0x20($sp) -/* 0829E8 7F04DEB8 C4720018 */ lwc1 $f18, 0x18($v1) -/* 0829EC 7F04DEBC 0FC28768 */ jal sub_GAME_7F0A1DA0 -/* 0829F0 7F04DEC0 E7B20024 */ swc1 $f18, 0x24($sp) -/* 0829F4 7F04DEC4 8FA40094 */ lw $a0, 0x94($sp) -.L7F04DEC8: -/* 0829F8 7F04DEC8 0FC28333 */ jal explosionClearBulletImpactRoomByFlag -/* 0829FC 7F04DECC 24050001 */ li $a1, 1 -/* 082A00 7F04DED0 8E0A0008 */ lw $t2, 8($s0) -/* 082A04 7F04DED4 02002025 */ move $a0, $s0 -/* 082A08 7F04DED8 8D4B0008 */ lw $t3, 8($t2) -/* 082A0C 7F04DEDC 0FC1B1E7 */ jal modelGetNodeRwData -/* 082A10 7F04DEE0 8D65000C */ lw $a1, 0xc($t3) -/* 082A14 7F04DEE4 AC400000 */ sw $zero, ($v0) -/* 082A18 7F04DEE8 8FBF0034 */ lw $ra, 0x34($sp) -/* 082A1C 7F04DEEC 8FB00030 */ lw $s0, 0x30($sp) -/* 082A20 7F04DEF0 27BD0098 */ addiu $sp, $sp, 0x98 -/* 082A24 7F04DEF4 03E00008 */ jr $ra -/* 082A28 7F04DEF8 00000000 */ nop -) -#endif + matrix_4x4_multiply_homogeneous(currentPlayerGetViewToWorldMtxf(), node_mtx, &glassNodeWorldMtx); + sub_GAME_7F0A1DA0(glassNodeWorldMtx.m[3], glassNodeWorldMtx.m[0], glassNodeWorldMtx.m[1], glassNodeWorldMtx.m[2], ((f32 *)rodata)[1], ((f32 *)rodata)[2], ((f32 *)rodata)[3], ((f32 *)rodata)[4], ((f32 *)rodata)[5], ((f32 *)rodata)[6]); + } + explosionClearBulletImpactRoomByFlag(prop, 1); + *(s32 *)modelGetNodeRwData(model, model->obj->Switches[3]) = 0; +} /** @@ -31156,7 +8959,7 @@ void maybe_detonate_object_and_its_children(PropRecord *prop, f32 damage, struct node = iter_next; } - maybe_detonate_object(prop->obj, damage, pos, arg3, owner); + objApplyDamage(prop->obj, damage, pos, arg3, owner); } } @@ -31236,15 +9039,11 @@ void chrobjMaybeDetonateObjectIfFlags(ObjectRecord *obj, f32 damage, coord3d *po { if ((obj->flags2 & 0x4000) == 0) { - maybe_detonate_object(obj, damage, pos, item, owner); + objApplyDamage(obj, damage, pos, item, owner); } } - - -#ifdef NONMATCHING -//https://decomp.me/scratch/UWQzo 44% ObjectRecord blank_07_object = { 0x0100, //extrascale 0x0, //state @@ -31270,959 +9069,392 @@ ObjectRecord blank_07_object = { {0xFF, 0xFF, 0xFF, 0x00}, //shadecol {0xFF, 0xFF, 0xFF, 0x00}, //nextcol }; -void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool flag, bool flag2) + + +// Formerly maybe_detonate_object +void objApplyDamage(ObjectRecord *obj, f32 damage, coord3d *pos, ITEM_IDS itemnum, s32 playernum) { - u32 spC8; - s32 randAmmoType;//c4 - int randAmmoType_2; + s32 flags; + s32 shotsmod; + f32 maxdamage; + PropRecord *child; + MultiAmmoCrateRecord *slotview; + s32 startslot; + s32 slot; + AmmoCrateRecord *crate; + PropRecord *nextchild; + ObjectRecord tmpobj; + + /** + * Set the OWNER field (bits 17-18) to the player index; clear-then-set, equivalent to obj->owner = playernum. + * Used to record which player is responsible for the damage. + */ + obj->runtime_bitflags &= ~RUNTIMEBITFLAG_OWNER; + obj->runtime_bitflags |= playernum << RUNTIMEBITSHIFT_OWNER; - s32 sp3C; - PropRecord* sp28; - u16 ammoAmmount;//24 - f32 temp_f0; - f32 temp_f0_2; - f32 temp_f12; - s32 temp_a1; - - s32 temp_t7; - s32 type; - s32* temp_t3; - s32* temp_t5; - s32* temp_t9; - s8 weaponnum; - PropRecord* temp_a0_2; - u16 temp_a3; - u8 temp_v0; - u8 temp_v0_4; - u8 temp_v0_6; - void* temp_a0; - void* temp_a2; - void* temp_t6; - void* temp_v0_5; - - f32 phi_f12; - PropRecord* phi_f12_2; - s32* phi_t9; - s32* phi_t3; - s32* phi_t5; - void* phi_t6; - f32 phi_f0; - struct { - s32 rhgun:1; - s32 noammo:1; - s32 inmotion:1; - s32 lhgun:1; - s32 nocontrol:1; - s32 unk80000:1; - s32 jbush:1; - s32 petegrenade:1; - s32 embedded:1; - s32 normal:1; - s32 unk8000:1; - s32 immobile:1; - s32 dat:1; - s32 uncollectable:1; - s32 unk800:1; - s32 allowpickup:1; - s32 invincible:1; - s32 embeddedin:1; - s32 useguard:1; - s32 forcecollection:1; - s32 posabs:1; - s32 freestand:1; - s32 roadblock:1; - s32 glassimage:1; - s32 forcecollisions:1; - s32 onground:1; - s32 forcedonground:1; - s32 rotate90:1; - s32 upside_down:1; - s32 rightside_up:1; - s32 scalex:1; - s32 scaley:1; - } *flags = &self->flags; - - #define OBJECT_UNTOUCHED 1 - #define OBJECT_DESTROYED 0 - - - temp_t7 = self->runtime_bitflags & ~(RUNTIMEBITFLAG_OWNER); - self->runtime_bitflags = temp_t7; - self->runtime_bitflags = temp_t7 | (flag2 << RUNTIMEBITSHIFT_OWNER); - - - if ((self->Head.type != PROPDEF_GAS_RELEASING) || (objGetDestroyedLevel(self) != OBJECT_UNTOUCHED)) + if (obj->type == PROPDEF_GAS_RELEASING) { - if (!flag) + if (objGetDestroyedLevel(obj) == 1) { - if (objIsCollectable(self)) - { - if (self->flags << 8 >= 0) - { - return; - } - } - else if (flags->petegrenade) //looks like bitfield (sll 7 + bgezl) + return; + } + } + + if (itemnum == ITEM_UNARMED) + { + if (objIsCollectable((PropDefHeaderRecord *)obj)) + { + // Equivalent to: if (!(obj->flags & PROPFLAG_00800000)) keep like this for matching + if ((s32)(obj->flags << 8) >= 0) { return; } - } - else - { - - if (flags->unk800) - { - return; - } - - if (self->Head.type == PROPDEF_COLLECTABLE || PROPDEF_MAGAZINE) - //switch(self->Head.type) - { - if (self->Head.type == PROPDEF_COLLECTABLE ) - { - weaponnum = ((WeaponObjRecord*)self)->weaponnum; - if ((weaponnum == ITEM_GRENADE) || - (weaponnum == ITEM_TIMEDMINE) || - (weaponnum == ITEM_REMOTEMINE) || - (weaponnum == ITEM_PROXIMITYMINE) || - (weaponnum == ITEM_56) || - (weaponnum == ITEM_57) || - (weaponnum == ITEM_BOMBCASE) || - (weaponnum == ITEM_PLASTIQUE)) - { - ((WeaponObjRecord*)self)->timer = 0; - } - return; - } - else if (self->Head.type == PROPDEF_MAGAZINE) - { - type = ((AmmoCrateRecord*)self)->type; - if ((type == AMMO_GRENADE) || - (type == AMMO_ROCKETS) || - (type == AMMO_REMOTEMINE) || - (type == AMMO_PROXMINE) || - (type == AMMO_TIMEDMINE) || - (type == AMMO_GRENADEROUND) || - (type == AMMO_EXPLOSIVEPEN) || - (type == AMMO_BOMBCASE) || - (type == AMMO_DYNAMITE)) - { - self->flags |= 0x10000000; - } - return; - } - } - if (!objIsMortal(damage, self, 8) ) - { - return; - } - - } // if flag - - if (objGetDestroyedLevel(self) == OBJECT_DESTROYED) - { - self->maxdamage += damage * 250.0f; - } - else - { - temp_f0 = 4 - (objGetShotsTaken(damage, self) % 4); - phi_f0 = temp_f0; - if (temp_f0 < damage) - { - damage = phi_f0; - } - phi_f0 = 1.0f; - if (damage < 1.0f) - { - damage = phi_f0; - } - self->maxdamage += damage; - //phi_f12_2 = (bitwise struct PropRecord* ) damage; + goto apply_damage; } - if (( self->Head.type == PROPDEF_GLASS) || ( self->Head.type == PROPDEF_TINTED_GLASS)) + // Equivalent to: if (obj->flags & PROPFLAG_01000000) keep like this for matching + if ((s32)(obj->flags << 7) < 0) { - if (self->damage <= self->maxdamage) - { - sub_GAME_7F04DCB4(phi_f12_2, self); //smash glass? - } + return; } - else + + goto apply_damage; + } + + flags = obj->flags; + + if (flags & PROPFLAG_INVINCIBLE) + { + return; + } + + if (obj->type == PROPDEF_COLLECTABLE) + { + s32 weaponnum = ((WeaponObjRecord *)obj)->weaponnum; + + // For these items, if they take damage, set their timers to 0, effectively causing them to immediately detonate. + if (weaponnum == ITEM_GRENADE + || weaponnum == ITEM_TIMEDMINE + || weaponnum == ITEM_REMOTEMINE + || weaponnum == ITEM_PROXIMITYMINE + || weaponnum == ITEM_ROCKETROUND + || weaponnum == ITEM_GRENADEROUND + || weaponnum == ITEM_BOMBCASE + || weaponnum == ITEM_PLASTIQUE) { - propobjSetDropped(self->prop, 1); - object_explosion_related(self, pos, flag2); + ((WeaponObjRecord *)obj)->timer = 0; } - if ((self->Head.type == PROPDEF_AMMO) && (objGetDestroyedLevel(self) == OBJECT_UNTOUCHED)) + + return; + } + + if (obj->type == PROPDEF_MAGAZINE) + { + s32 ammotype = ((AmmoCrateRecord *)obj)->ammoType; + + // slot and startslot are double purposed here for matching. + slot = AMMO_REMOTEMINE; + startslot = AMMO_PROXMINE; + + if (ammotype == AMMO_GRENADE + || ammotype == AMMO_ROCKETS + || slot == ammotype + || startslot == ammotype + || ammotype == AMMO_TIMEDMINE + || ammotype == AMMO_GRENADEROUND + || ammotype == AMMO_EXPLOSIVEPEN + || ammotype == AMMO_BOMBCASE + || ammotype == AMMO_DYNAMITE) { - randAmmoType = randomGetNext() % 0xD; + obj->flags = flags | 0x10000000; + } + + return; + } + + if (!objIsMortal(obj)) + { + return; + } + +apply_damage: + // If the object is not yet destroyed, accumulate damage into the object's maxdamage field. + if (objGetDestroyedLevel(obj) == 0) + { + obj->maxdamage += damage * 250.0f; + } + /** + * If already destroyed, further damage is based on number of shots taken, not how much damage is taken. + * maxdamage is repurposed to to hold the number of shots the object has taken since it reached the current destroyed level. + * When 4 shots are taken the object moves to the next destroyed level. + */ + else + { + shotsmod = objGetShotsTaken(obj) % 4; + maxdamage = (f32)(4 - shotsmod); + + if (maxdamage < damage) + { + damage = maxdamage; + } + else if (damage < 1.0f) + { + damage = 1.0f; + } + + obj->maxdamage += damage; + } + + if (obj->type == PROPDEF_GLASS || obj->type == PROPDEF_TINTED_GLASS) + { + if (obj->damage <= obj->maxdamage) + { + sub_GAME_7F04DCB4(obj); + } + } + else + { + propobjSetDropped(obj->prop, DROPTYPE_DEFAULT); + objExplode(obj, pos, playernum); + } + + // What is this? + if (obj->type == PROPDEF_AMMO) + { + if (objGetDestroyedLevel(obj) == 1) + { + startslot = randomGetNext() % AMMOTYPE_GLOBAL_MAX; + slot = startslot; + do { - MultiAmmoCrateRecord *ammo = self; - ammoAmmount = ammo->quantities[randAmmoType]; + s32 off = slot * sizeof(struct multiammocrateslot); + slotview = (MultiAmmoCrateRecord *)((u8 *)obj + off); - if (ammoAmmount > 0 && (ammoAmmount != -1) ) + if (slotview->slots[0].quantity > 0 && slotview->slots[0].modelnum != 0xffff) { - temp_v0_5 = ammocrateAllocate(randAmmoType, randAmmoType); - if (temp_v0_5) + crate = ammocrateAllocate(); + + if (crate != NULL) { - //spawn magazine - AmmoCrateRecord NewMag = blank_07_object; //New_AmmoCrateRecord() - AmmoCrateRecord temp_a2 = NewMag; + u16 modelnum = slotview->slots[0].modelnum; - //temp_v0_5->obj = ammo->unk80; - //temp_v0_5->unk80 = randAmmoType + 1; - if (randAmmoType + 1 == 2) - { - //temp_v0_5->unk80 = 1; - } - if (objInitWithModelDef(&temp_a2, *(PitemZ_entries + (temp_a3 * 0xC)), &temp_a2, temp_a3) != 0) - { - //temp_a0 = temp_a2->unk14; + tmpobj = blank_07_object; + *(ObjectRecord *)crate = tmpobj; - modelSetScale(temp_a0, 1);//tempa2 - chrpropReparent(temp_a2.base.prop, self->prop); + // Matching trick. + slotview++; + slotview--; + + crate->obj = modelnum; + crate->ammoType = slot + 1; + + if (crate->ammoType == AMMO_9MM_2) + { + crate->ammoType = AMMO_9MM; } + + if (objInitWithModelDef((ObjectRecord *)crate, PitemZ_entries[modelnum].header) != NULL) + { + modelSetScale(crate->model, crate->model->scale); + chrpropReparent(crate->prop, obj->prop); + } + break; } } - else - { - randAmmoType_2 = (randAmmoType + 1) % 0xD; - randAmmoType = randAmmoType_2; - randAmmoType = randAmmoType; - } - }while (randAmmoType_2 != randAmmoType); + slot++; + slot %= AMMOTYPE_GLOBAL_MAX; + } + while (slot != startslot); } + } - - switch (self->Head.type) - { - case 13: - { - self->flags |= 0x40000000; - if (objGetDestroyedLevel(self) == OBJECT_UNTOUCHED) - { - self->flags |= 0x10000000; - } - } - case 6: - { - if (objGetDestroyedLevel(self) == OBJECT_UNTOUCHED) - { - self->flags |= 0x10000000; - } - } - case 10: - { - if (objGetDestroyedLevel(self) == OBJECT_UNTOUCHED) - { - //save_ptr_monitor_ani_code_to_obj_ani_slot(self + 0x80, &D_80031EE8); - } - } - case 11: - { - if (objGetDestroyedLevel(self) == OBJECT_UNTOUCHED) - { - //save_ptr_monitor_ani_code_to_obj_ani_slot(self + 0x80, &D_80031EE8); - // save_ptr_monitor_ani_code_to_obj_ani_slot(self + 0xF4, &D_80031EE8); - // save_ptr_monitor_ani_code_to_obj_ani_slot(self + 0x168, &D_80031EE8); - // save_ptr_monitor_ani_code_to_obj_ani_slot(self + 0x1DC, &D_80031EE8); - } - } - case 36: - { - if (objGetDestroyedLevel(self) == OBJECT_UNTOUCHED) - { - //init_trigger_toxic_gas_effect(&self->Pos); - } - } - case 21: - { - if (objGetDestroyedLevel(self) == OBJECT_DESTROYED) - { - temp_f0_2 = self->damage; - //self->unk84 = ((bitwise f32) self->unk80 * (temp_f0_2 - self->maxdamage)) / temp_f0_2; - } - else - { - //self->unk84 = 0.0f; - } - } - } - if (objGetDestroyedLevel(self) == OBJECT_UNTOUCHED) - { - PropRecord *temp_a0_2 = self->prop->child; - - if (temp_a0_2 != 0) - { - do - { - temp_a0_2 = temp_a0_2->prev; - propobjSetDropped(temp_a0_2, 1); - - } while (temp_a0_2 != 0); - } - } - } // if PROPDEF_GAS_RELEASING or object not harmed - -} - -#else -ObjectRecord blank_07_object = { - 0x0100, //extrascale - 0x0, //state - 0x07, //type - 0, //obj - 0xFFFF, //pad - 0x00000001, //flags - 0, //flags2 - NULL, //prop - NULL, //model + /** + * For drone guns, CCTV cameras, and monitors, cease unique functionality when destroyed, set monitors to black. + */ + if (obj->type == PROPDEF_AUTOGUN) { - 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f - }, //mtx - {0.0, 0.0, 0.0},//runtime_pos - {0x00000000}, //runtime_bitflags - NULL, //ptr_allocated_collisiondata_block - NULL, //projectile/embedment - 0.0f, //maxdamage - 1000.0f, //damage - {0xFF, 0xFF, 0xFF, 0x00}, //shadecol - {0xFF, 0xFF, 0xFF, 0x00}, //nextcol -}; -GLOBAL_ASM( -.text -glabel maybe_detonate_object -/* 082C38 7F04E108 27BDFF20 */ addiu $sp, $sp, -0xe0 -/* 082C3C 7F04E10C AFBF001C */ sw $ra, 0x1c($sp) -/* 082C40 7F04E110 AFB00018 */ sw $s0, 0x18($sp) -/* 082C44 7F04E114 AFA600E8 */ sw $a2, 0xe8($sp) -/* 082C48 7F04E118 AFA700EC */ sw $a3, 0xec($sp) -/* 082C4C 7F04E11C 8C8E0064 */ lw $t6, 0x64($a0) -/* 082C50 7F04E120 3C01FFF9 */ lui $at, (0xFFF9FFFF >> 16) # lui $at, 0xfff9 -/* 082C54 7F04E124 3421FFFF */ ori $at, (0xFFF9FFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 082C58 7F04E128 01C17824 */ and $t7, $t6, $at -/* 082C5C 7F04E12C AC8F0064 */ sw $t7, 0x64($a0) -/* 082C60 7F04E130 8FB900F0 */ lw $t9, 0xf0($sp) -/* 082C64 7F04E134 908B0003 */ lbu $t3, 3($a0) -/* 082C68 7F04E138 44856000 */ mtc1 $a1, $f12 -/* 082C6C 7F04E13C 00194C40 */ sll $t1, $t9, 0x11 -/* 082C70 7F04E140 01E95025 */ or $t2, $t7, $t1 -/* 082C74 7F04E144 24010024 */ li $at, 36 -/* 082C78 7F04E148 00808025 */ move $s0, $a0 -/* 082C7C 7F04E14C 15610006 */ bne $t3, $at, .L7F04E168 -/* 082C80 7F04E150 AC8A0064 */ sw $t2, 0x64($a0) -/* 082C84 7F04E154 0FC0FFF0 */ jal objGetDestroyedLevel -/* 082C88 7F04E158 E7AC00E4 */ swc1 $f12, 0xe4($sp) -/* 082C8C 7F04E15C 24010001 */ li $at, 1 -/* 082C90 7F04E160 1041016A */ beq $v0, $at, .L7F04E70C -/* 082C94 7F04E164 C7AC00E4 */ lwc1 $f12, 0xe4($sp) -.L7F04E168: -/* 082C98 7F04E168 8FAC00EC */ lw $t4, 0xec($sp) -/* 082C9C 7F04E16C 02002025 */ move $a0, $s0 -/* 082CA0 7F04E170 55800012 */ bnezl $t4, .L7F04E1BC -/* 082CA4 7F04E174 8E030008 */ lw $v1, 8($s0) -/* 082CA8 7F04E178 0FC13803 */ jal objIsCollectable -/* 082CAC 7F04E17C E7AC00E4 */ swc1 $f12, 0xe4($sp) -/* 082CB0 7F04E180 10400007 */ beqz $v0, .L7F04E1A0 -/* 082CB4 7F04E184 C7AC00E4 */ lwc1 $f12, 0xe4($sp) -/* 082CB8 7F04E188 8E0D0008 */ lw $t5, 8($s0) -/* 082CBC 7F04E18C 000D7200 */ sll $t6, $t5, 8 -/* 082CC0 7F04E190 05C20045 */ bltzl $t6, .L7F04E2A8 -/* 082CC4 7F04E194 02002025 */ move $a0, $s0 -/* 082CC8 7F04E198 1000015D */ b .L7F04E710 -/* 082CCC 7F04E19C 8FBF001C */ lw $ra, 0x1c($sp) -.L7F04E1A0: -/* 082CD0 7F04E1A0 8E0F0008 */ lw $t7, 8($s0) -/* 082CD4 7F04E1A4 000FC9C0 */ sll $t9, $t7, 7 -/* 082CD8 7F04E1A8 0723003F */ bgezl $t9, .L7F04E2A8 -/* 082CDC 7F04E1AC 02002025 */ move $a0, $s0 -/* 082CE0 7F04E1B0 10000157 */ b .L7F04E710 -/* 082CE4 7F04E1B4 8FBF001C */ lw $ra, 0x1c($sp) -/* 082CE8 7F04E1B8 8E030008 */ lw $v1, 8($s0) -.L7F04E1BC: -/* 082CEC 7F04E1BC 0003C380 */ sll $t8, $v1, 0xe -/* 082CF0 7F04E1C0 07020153 */ bltzl $t8, .L7F04E710 -/* 082CF4 7F04E1C4 8FBF001C */ lw $ra, 0x1c($sp) -/* 082CF8 7F04E1C8 92020003 */ lbu $v0, 3($s0) -/* 082CFC 7F04E1CC 24050008 */ li $a1, 8 -/* 082D00 7F04E1D0 24040007 */ li $a0, 7 -/* 082D04 7F04E1D4 14A20015 */ bne $a1, $v0, .L7F04E22C -/* 082D08 7F04E1D8 00000000 */ nop -/* 082D0C 7F04E1DC 82020080 */ lb $v0, 0x80($s0) -/* 082D10 7F04E1E0 2401001A */ li $at, 26 -/* 082D14 7F04E1E4 1041000F */ beq $v0, $at, .L7F04E224 -/* 082D18 7F04E1E8 2401001B */ li $at, 27 -/* 082D1C 7F04E1EC 1041000D */ beq $v0, $at, .L7F04E224 -/* 082D20 7F04E1F0 2401001D */ li $at, 29 -/* 082D24 7F04E1F4 1041000B */ beq $v0, $at, .L7F04E224 -/* 082D28 7F04E1F8 2401001C */ li $at, 28 -/* 082D2C 7F04E1FC 10410009 */ beq $v0, $at, .L7F04E224 -/* 082D30 7F04E200 24010056 */ li $at, 86 -/* 082D34 7F04E204 10410007 */ beq $v0, $at, .L7F04E224 -/* 082D38 7F04E208 24010057 */ li $at, 87 -/* 082D3C 7F04E20C 10410005 */ beq $v0, $at, .L7F04E224 -/* 082D40 7F04E210 24010021 */ li $at, 33 -/* 082D44 7F04E214 10410003 */ beq $v0, $at, .L7F04E224 -/* 082D48 7F04E218 24010022 */ li $at, 34 -/* 082D4C 7F04E21C 5441013C */ bnel $v0, $at, .L7F04E710 -/* 082D50 7F04E220 8FBF001C */ lw $ra, 0x1c($sp) -.L7F04E224: -/* 082D54 7F04E224 10000139 */ b .L7F04E70C -/* 082D58 7F04E228 A6000082 */ sh $zero, 0x82($s0) -.L7F04E22C: -/* 082D5C 7F04E22C 54820019 */ bnel $a0, $v0, .L7F04E294 -/* 082D60 7F04E230 02002025 */ move $a0, $s0 -/* 082D64 7F04E234 8E020080 */ lw $v0, 0x80($s0) -/* 082D68 7F04E238 24010005 */ li $at, 5 -/* 082D6C 7F04E23C 10410010 */ beq $v0, $at, .L7F04E280 -/* 082D70 7F04E240 24010006 */ li $at, 6 -/* 082D74 7F04E244 5041000F */ beql $v0, $at, .L7F04E284 -/* 082D78 7F04E248 3C011000 */ lui $at, 0x1000 -/* 082D7C 7F04E24C 5082000D */ beql $a0, $v0, .L7F04E284 -/* 082D80 7F04E250 3C011000 */ lui $at, 0x1000 -/* 082D84 7F04E254 10A2000A */ beq $a1, $v0, .L7F04E280 -/* 082D88 7F04E258 24010009 */ li $at, 9 -/* 082D8C 7F04E25C 10410008 */ beq $v0, $at, .L7F04E280 -/* 082D90 7F04E260 2401000B */ li $at, 11 -/* 082D94 7F04E264 10410006 */ beq $v0, $at, .L7F04E280 -/* 082D98 7F04E268 2401000F */ li $at, 15 -/* 082D9C 7F04E26C 10410004 */ beq $v0, $at, .L7F04E280 -/* 082DA0 7F04E270 24010010 */ li $at, 16 -/* 082DA4 7F04E274 10410002 */ beq $v0, $at, .L7F04E280 -/* 082DA8 7F04E278 24010013 */ li $at, 19 -/* 082DAC 7F04E27C 14410123 */ bne $v0, $at, .L7F04E70C -.L7F04E280: -/* 082DB0 7F04E280 3C011000 */ li $at, 0x10000000 # 0.000000 -.L7F04E284: -/* 082DB4 7F04E284 00614825 */ or $t1, $v1, $at -/* 082DB8 7F04E288 10000120 */ b .L7F04E70C -/* 082DBC 7F04E28C AE090008 */ sw $t1, 8($s0) -/* 082DC0 7F04E290 02002025 */ move $a0, $s0 -.L7F04E294: -/* 082DC4 7F04E294 0FC13812 */ jal objIsMortal -/* 082DC8 7F04E298 E7AC00E4 */ swc1 $f12, 0xe4($sp) -/* 082DCC 7F04E29C 1040011B */ beqz $v0, .L7F04E70C -/* 082DD0 7F04E2A0 C7AC00E4 */ lwc1 $f12, 0xe4($sp) -/* 082DD4 7F04E2A4 02002025 */ move $a0, $s0 -.L7F04E2A8: -/* 082DD8 7F04E2A8 0FC0FFF0 */ jal objGetDestroyedLevel -/* 082DDC 7F04E2AC E7AC00E4 */ swc1 $f12, 0xe4($sp) -/* 082DE0 7F04E2B0 14400008 */ bnez $v0, .L7F04E2D4 -/* 082DE4 7F04E2B4 C7AC00E4 */ lwc1 $f12, 0xe4($sp) -/* 082DE8 7F04E2B8 3C01437A */ li $at, 0x437A0000 # 250.000000 -/* 082DEC 7F04E2BC 44813000 */ mtc1 $at, $f6 -/* 082DF0 7F04E2C0 C6040070 */ lwc1 $f4, 0x70($s0) -/* 082DF4 7F04E2C4 46066202 */ mul.s $f8, $f12, $f6 -/* 082DF8 7F04E2C8 46082280 */ add.s $f10, $f4, $f8 -/* 082DFC 7F04E2CC 1000001F */ b .L7F04E34C -/* 082E00 7F04E2D0 E60A0070 */ swc1 $f10, 0x70($s0) -.L7F04E2D4: -/* 082E04 7F04E2D4 02002025 */ move $a0, $s0 -/* 082E08 7F04E2D8 0FC0FFD8 */ jal objGetShotsTaken -/* 082E0C 7F04E2DC E7AC00E4 */ swc1 $f12, 0xe4($sp) -/* 082E10 7F04E2E0 240B0004 */ li $t3, 4 -/* 082E14 7F04E2E4 C7AC00E4 */ lwc1 $f12, 0xe4($sp) -/* 082E18 7F04E2E8 04410004 */ bgez $v0, .L7F04E2FC -/* 082E1C 7F04E2EC 304A0003 */ andi $t2, $v0, 3 -/* 082E20 7F04E2F0 11400002 */ beqz $t2, .L7F04E2FC -/* 082E24 7F04E2F4 00000000 */ nop -/* 082E28 7F04E2F8 254AFFFC */ addiu $t2, $t2, -4 -.L7F04E2FC: -/* 082E2C 7F04E2FC 016A6023 */ subu $t4, $t3, $t2 -/* 082E30 7F04E300 448C8000 */ mtc1 $t4, $f16 -/* 082E34 7F04E304 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 082E38 7F04E308 46808020 */ cvt.s.w $f0, $f16 -/* 082E3C 7F04E30C 460C003C */ c.lt.s $f0, $f12 -/* 082E40 7F04E310 00000000 */ nop -/* 082E44 7F04E314 45020004 */ bc1fl .L7F04E328 -/* 082E48 7F04E318 44810000 */ mtc1 $at, $f0 -/* 082E4C 7F04E31C 10000008 */ b .L7F04E340 -/* 082E50 7F04E320 46000306 */ mov.s $f12, $f0 -/* 082E54 7F04E324 44810000 */ mtc1 $at, $f0 -.L7F04E328: -/* 082E58 7F04E328 00000000 */ nop -/* 082E5C 7F04E32C 4600603C */ c.lt.s $f12, $f0 -/* 082E60 7F04E330 00000000 */ nop -/* 082E64 7F04E334 45020003 */ bc1fl .L7F04E344 -/* 082E68 7F04E338 C6120070 */ lwc1 $f18, 0x70($s0) -/* 082E6C 7F04E33C 46000306 */ mov.s $f12, $f0 -.L7F04E340: -/* 082E70 7F04E340 C6120070 */ lwc1 $f18, 0x70($s0) -.L7F04E344: -/* 082E74 7F04E344 460C9180 */ add.s $f6, $f18, $f12 -/* 082E78 7F04E348 E6060070 */ swc1 $f6, 0x70($s0) -.L7F04E34C: -/* 082E7C 7F04E34C 92020003 */ lbu $v0, 3($s0) -/* 082E80 7F04E350 2401002A */ li $at, 42 -/* 082E84 7F04E354 10410003 */ beq $v0, $at, .L7F04E364 -/* 082E88 7F04E358 2401002F */ li $at, 47 -/* 082E8C 7F04E35C 1441000B */ bne $v0, $at, .L7F04E38C -/* 082E90 7F04E360 24050001 */ li $a1, 1 -.L7F04E364: -/* 082E94 7F04E364 C6040070 */ lwc1 $f4, 0x70($s0) -/* 082E98 7F04E368 C6080074 */ lwc1 $f8, 0x74($s0) -/* 082E9C 7F04E36C 4604403E */ c.le.s $f8, $f4 -/* 082EA0 7F04E370 00000000 */ nop -/* 082EA4 7F04E374 4502000D */ bc1fl .L7F04E3AC -/* 082EA8 7F04E378 24010014 */ li $at, 20 -/* 082EAC 7F04E37C 0FC1372D */ jal sub_GAME_7F04DCB4 -/* 082EB0 7F04E380 02002025 */ move $a0, $s0 -/* 082EB4 7F04E384 10000008 */ b .L7F04E3A8 -/* 082EB8 7F04E388 92020003 */ lbu $v0, 3($s0) -.L7F04E38C: -/* 082EBC 7F04E38C 0FC12FF4 */ jal propobjSetDropped -/* 082EC0 7F04E390 8E040010 */ lw $a0, 0x10($s0) -/* 082EC4 7F04E394 02002025 */ move $a0, $s0 -/* 082EC8 7F04E398 8FA500E8 */ lw $a1, 0xe8($sp) -/* 082ECC 7F04E39C 0FC13383 */ jal object_explosion_related -/* 082ED0 7F04E3A0 8FA600F0 */ lw $a2, 0xf0($sp) -/* 082ED4 7F04E3A4 92020003 */ lbu $v0, 3($s0) -.L7F04E3A8: -/* 082ED8 7F04E3A8 24010014 */ li $at, 20 -.L7F04E3AC: -/* 082EDC 7F04E3AC 54410065 */ bnel $v0, $at, .L7F04E544 -/* 082EE0 7F04E3B0 92020003 */ lbu $v0, 3($s0) -/* 082EE4 7F04E3B4 0FC0FFF0 */ jal objGetDestroyedLevel -/* 082EE8 7F04E3B8 02002025 */ move $a0, $s0 -/* 082EEC 7F04E3BC 24010001 */ li $at, 1 -/* 082EF0 7F04E3C0 54410060 */ bnel $v0, $at, .L7F04E544 -/* 082EF4 7F04E3C4 92020003 */ lbu $v0, 3($s0) -/* 082EF8 7F04E3C8 0C002914 */ jal randomGetNext -/* 082EFC 7F04E3CC 00000000 */ nop -/* 082F00 7F04E3D0 2401000D */ li $at, 13 -/* 082F04 7F04E3D4 0041001B */ divu $zero, $v0, $at -/* 082F08 7F04E3D8 00002010 */ mfhi $a0 -/* 082F0C 7F04E3DC 00802825 */ move $a1, $a0 -/* 082F10 7F04E3E0 00000000 */ nop -/* 082F14 7F04E3E4 00046880 */ sll $t5, $a0, 2 -.L7F04E3E8: -/* 082F18 7F04E3E8 020D1821 */ addu $v1, $s0, $t5 -/* 082F1C 7F04E3EC 946E0082 */ lhu $t6, 0x82($v1) -/* 082F20 7F04E3F0 59C0004E */ blezl $t6, .L7F04E52C -/* 082F24 7F04E3F4 24840001 */ addiu $a0, $a0, 1 -/* 082F28 7F04E3F8 946F0080 */ lhu $t7, 0x80($v1) -/* 082F2C 7F04E3FC 3401FFFF */ li $at, 65535 -/* 082F30 7F04E400 51E1004A */ beql $t7, $at, .L7F04E52C -/* 082F34 7F04E404 24840001 */ addiu $a0, $a0, 1 -/* 082F38 7F04E408 AFA30024 */ sw $v1, 0x24($sp) -/* 082F3C 7F04E40C AFA400C4 */ sw $a0, 0xc4($sp) -/* 082F40 7F04E410 0FC14634 */ jal ammocrateAllocate -/* 082F44 7F04E414 AFA500C8 */ sw $a1, 0xc8($sp) -/* 082F48 7F04E418 8FA30024 */ lw $v1, 0x24($sp) -/* 082F4C 7F04E41C 8FA400C4 */ lw $a0, 0xc4($sp) -/* 082F50 7F04E420 8FA500C8 */ lw $a1, 0xc8($sp) -/* 082F54 7F04E424 10400040 */ beqz $v0, .L7F04E528 -/* 082F58 7F04E428 00403025 */ move $a2, $v0 -/* 082F5C 7F04E42C 3C198003 */ lui $t9, %hi(blank_07_object) -/* 082F60 7F04E430 27A8003C */ addiu $t0, $sp, 0x3c -/* 082F64 7F04E434 27392094 */ addiu $t9, %lo(blank_07_object) # addiu $t9, $t9, 0x2094 -/* 082F68 7F04E438 94670080 */ lhu $a3, 0x80($v1) -/* 082F6C 7F04E43C 27290078 */ addiu $t1, $t9, 0x78 -/* 082F70 7F04E440 01005825 */ move $t3, $t0 -.L7F04E444: -/* 082F74 7F04E444 8F210000 */ lw $at, ($t9) -/* 082F78 7F04E448 2739000C */ addiu $t9, $t9, 0xc -/* 082F7C 7F04E44C 256B000C */ addiu $t3, $t3, 0xc -/* 082F80 7F04E450 AD61FFF4 */ sw $at, -0xc($t3) -/* 082F84 7F04E454 8F21FFF8 */ lw $at, -8($t9) -/* 082F88 7F04E458 AD61FFF8 */ sw $at, -8($t3) -/* 082F8C 7F04E45C 8F21FFFC */ lw $at, -4($t9) -/* 082F90 7F04E460 1729FFF8 */ bne $t9, $t1, .L7F04E444 -/* 082F94 7F04E464 AD61FFFC */ sw $at, -4($t3) -/* 082F98 7F04E468 8F210000 */ lw $at, ($t9) -/* 082F9C 7F04E46C 01006825 */ move $t5, $t0 -/* 082FA0 7F04E470 00407025 */ move $t6, $v0 -/* 082FA4 7F04E474 AD610000 */ sw $at, ($t3) -/* 082FA8 7F04E478 8F290004 */ lw $t1, 4($t9) -/* 082FAC 7F04E47C 250C0078 */ addiu $t4, $t0, 0x78 -/* 082FB0 7F04E480 0007C080 */ sll $t8, $a3, 2 -/* 082FB4 7F04E484 AD690004 */ sw $t1, 4($t3) -.L7F04E488: -/* 082FB8 7F04E488 8DA10000 */ lw $at, ($t5) -/* 082FBC 7F04E48C 25AD000C */ addiu $t5, $t5, 0xc -/* 082FC0 7F04E490 25CE000C */ addiu $t6, $t6, 0xc -/* 082FC4 7F04E494 ADC1FFF4 */ sw $at, -0xc($t6) -/* 082FC8 7F04E498 8DA1FFF8 */ lw $at, -8($t5) -/* 082FCC 7F04E49C ADC1FFF8 */ sw $at, -8($t6) -/* 082FD0 7F04E4A0 8DA1FFFC */ lw $at, -4($t5) -/* 082FD4 7F04E4A4 15ACFFF8 */ bne $t5, $t4, .L7F04E488 -/* 082FD8 7F04E4A8 ADC1FFFC */ sw $at, -4($t6) -/* 082FDC 7F04E4AC 8DA10000 */ lw $at, ($t5) -/* 082FE0 7F04E4B0 24850001 */ addiu $a1, $a0, 1 -/* 082FE4 7F04E4B4 00C02025 */ move $a0, $a2 -/* 082FE8 7F04E4B8 ADC10000 */ sw $at, ($t6) -/* 082FEC 7F04E4BC 8DAC0004 */ lw $t4, 4($t5) -/* 082FF0 7F04E4C0 24010002 */ li $at, 2 -/* 082FF4 7F04E4C4 0307C023 */ subu $t8, $t8, $a3 -/* 082FF8 7F04E4C8 ADCC0004 */ sw $t4, 4($t6) -/* 082FFC 7F04E4CC A4470004 */ sh $a3, 4($v0) -/* 083000 7F04E4D0 14A10003 */ bne $a1, $at, .L7F04E4E0 -/* 083004 7F04E4D4 AC450080 */ sw $a1, 0x80($v0) -/* 083008 7F04E4D8 240F0001 */ li $t7, 1 -/* 08300C 7F04E4DC AC4F0080 */ sw $t7, 0x80($v0) -.L7F04E4E0: -/* 083010 7F04E4E0 0018C080 */ sll $t8, $t8, 2 -/* 083014 7F04E4E4 3C058004 */ lui $a1, %hi(PitemZ_entries) -/* 083018 7F04E4E8 00B82821 */ addu $a1, $a1, $t8 -/* 08301C 7F04E4EC 8CA5A228 */ lw $a1, %lo(PitemZ_entries)($a1) -/* 083020 7F04E4F0 0FC101BE */ jal objInitWithModelDef -/* 083024 7F04E4F4 AFA600C0 */ sw $a2, 0xc0($sp) -/* 083028 7F04E4F8 10400011 */ beqz $v0, .L7F04E540 -/* 08302C 7F04E4FC 8FA600C0 */ lw $a2, 0xc0($sp) -/* 083030 7F04E500 8CC40014 */ lw $a0, 0x14($a2) -/* 083034 7F04E504 8C850014 */ lw $a1, 0x14($a0) -/* 083038 7F04E508 0FC1B39E */ jal modelSetScale -/* 08303C 7F04E50C AFA600C0 */ sw $a2, 0xc0($sp) -/* 083040 7F04E510 8FA600C0 */ lw $a2, 0xc0($sp) -/* 083044 7F04E514 8E050010 */ lw $a1, 0x10($s0) -/* 083048 7F04E518 0FC0E969 */ jal chrpropReparent -/* 08304C 7F04E51C 8CC40010 */ lw $a0, 0x10($a2) -/* 083050 7F04E520 10000008 */ b .L7F04E544 -/* 083054 7F04E524 92020003 */ lbu $v0, 3($s0) -.L7F04E528: -/* 083058 7F04E528 24840001 */ addiu $a0, $a0, 1 -.L7F04E52C: -/* 08305C 7F04E52C 2401000D */ li $at, 13 -/* 083060 7F04E530 0081001A */ div $zero, $a0, $at -/* 083064 7F04E534 00002010 */ mfhi $a0 -/* 083068 7F04E538 5485FFAB */ bnel $a0, $a1, .L7F04E3E8 -/* 08306C 7F04E53C 00046880 */ sll $t5, $a0, 2 -.L7F04E540: -/* 083070 7F04E540 92020003 */ lbu $v0, 3($s0) -.L7F04E544: -/* 083074 7F04E544 2401000D */ li $at, 13 -/* 083078 7F04E548 54410010 */ bnel $v0, $at, .L7F04E58C -/* 08307C 7F04E54C 24010006 */ li $at, 6 -/* 083080 7F04E550 8E190008 */ lw $t9, 8($s0) -/* 083084 7F04E554 3C014000 */ lui $at, 0x4000 -/* 083088 7F04E558 02002025 */ move $a0, $s0 -/* 08308C 7F04E55C 03215825 */ or $t3, $t9, $at -/* 083090 7F04E560 0FC0FFF0 */ jal objGetDestroyedLevel -/* 083094 7F04E564 AE0B0008 */ sw $t3, 8($s0) -/* 083098 7F04E568 24010001 */ li $at, 1 -/* 08309C 7F04E56C 14410057 */ bne $v0, $at, .L7F04E6CC -/* 0830A0 7F04E570 00000000 */ nop -/* 0830A4 7F04E574 8E0A0008 */ lw $t2, 8($s0) -/* 0830A8 7F04E578 3C011000 */ lui $at, 0x1000 -/* 0830AC 7F04E57C 01416025 */ or $t4, $t2, $at -/* 0830B0 7F04E580 10000052 */ b .L7F04E6CC -/* 0830B4 7F04E584 AE0C0008 */ sw $t4, 8($s0) -/* 0830B8 7F04E588 24010006 */ li $at, 6 -.L7F04E58C: -/* 0830BC 7F04E58C 5441000C */ bnel $v0, $at, .L7F04E5C0 -/* 0830C0 7F04E590 2401000A */ li $at, 10 -/* 0830C4 7F04E594 0FC0FFF0 */ jal objGetDestroyedLevel -/* 0830C8 7F04E598 02002025 */ move $a0, $s0 -/* 0830CC 7F04E59C 24010001 */ li $at, 1 -/* 0830D0 7F04E5A0 1441004A */ bne $v0, $at, .L7F04E6CC -/* 0830D4 7F04E5A4 00000000 */ nop -/* 0830D8 7F04E5A8 8E0D0008 */ lw $t5, 8($s0) -/* 0830DC 7F04E5AC 3C011000 */ lui $at, 0x1000 -/* 0830E0 7F04E5B0 01A17025 */ or $t6, $t5, $at -/* 0830E4 7F04E5B4 10000045 */ b .L7F04E6CC -/* 0830E8 7F04E5B8 AE0E0008 */ sw $t6, 8($s0) -/* 0830EC 7F04E5BC 2401000A */ li $at, 10 -.L7F04E5C0: -/* 0830F0 7F04E5C0 5441000C */ bnel $v0, $at, .L7F04E5F4 -/* 0830F4 7F04E5C4 2401000B */ li $at, 11 -/* 0830F8 7F04E5C8 0FC0FFF0 */ jal objGetDestroyedLevel -/* 0830FC 7F04E5CC 02002025 */ move $a0, $s0 -/* 083100 7F04E5D0 24010001 */ li $at, 1 -/* 083104 7F04E5D4 1441003D */ bne $v0, $at, .L7F04E6CC -/* 083108 7F04E5D8 26040080 */ addiu $a0, $s0, 0x80 -/* 08310C 7F04E5DC 3C058003 */ lui $a1, %hi(monAnim33BlackSolid) -/* 083110 7F04E5E0 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot -/* 083114 7F04E5E4 24A51EE8 */ addiu $a1, %lo(monAnim33BlackSolid) # addiu $a1, $a1, 0x1ee8 -/* 083118 7F04E5E8 10000038 */ b .L7F04E6CC -/* 08311C 7F04E5EC 00000000 */ nop -/* 083120 7F04E5F0 2401000B */ li $at, 11 -.L7F04E5F4: -/* 083124 7F04E5F4 54410018 */ bnel $v0, $at, .L7F04E658 -/* 083128 7F04E5F8 24010024 */ li $at, 36 -/* 08312C 7F04E5FC 0FC0FFF0 */ jal objGetDestroyedLevel -/* 083130 7F04E600 02002025 */ move $a0, $s0 -/* 083134 7F04E604 24010001 */ li $at, 1 -/* 083138 7F04E608 14410030 */ bne $v0, $at, .L7F04E6CC -/* 08313C 7F04E60C 26040080 */ addiu $a0, $s0, 0x80 -/* 083140 7F04E610 3C058003 */ lui $a1, %hi(monAnim33BlackSolid) -/* 083144 7F04E614 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot -/* 083148 7F04E618 24A51EE8 */ addiu $a1, %lo(monAnim33BlackSolid) # addiu $a1, $a1, 0x1ee8 -/* 08314C 7F04E61C 3C058003 */ lui $a1, %hi(monAnim33BlackSolid) -/* 083150 7F04E620 24A51EE8 */ addiu $a1, %lo(monAnim33BlackSolid) # addiu $a1, $a1, 0x1ee8 -/* 083154 7F04E624 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot -/* 083158 7F04E628 260400F4 */ addiu $a0, $s0, 0xf4 -/* 08315C 7F04E62C 3C058003 */ lui $a1, %hi(monAnim33BlackSolid) -/* 083160 7F04E630 24A51EE8 */ addiu $a1, %lo(monAnim33BlackSolid) # addiu $a1, $a1, 0x1ee8 -/* 083164 7F04E634 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot -/* 083168 7F04E638 26040168 */ addiu $a0, $s0, 0x168 -/* 08316C 7F04E63C 3C058003 */ lui $a1, %hi(monAnim33BlackSolid) -/* 083170 7F04E640 24A51EE8 */ addiu $a1, %lo(monAnim33BlackSolid) # addiu $a1, $a1, 0x1ee8 -/* 083174 7F04E644 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot -/* 083178 7F04E648 260401DC */ addiu $a0, $s0, 0x1dc -/* 08317C 7F04E64C 1000001F */ b .L7F04E6CC -/* 083180 7F04E650 00000000 */ nop -/* 083184 7F04E654 24010024 */ li $at, 36 -.L7F04E658: -/* 083188 7F04E658 5441000B */ bnel $v0, $at, .L7F04E688 -/* 08318C 7F04E65C 24010015 */ li $at, 21 -/* 083190 7F04E660 0FC0FFF0 */ jal objGetDestroyedLevel -/* 083194 7F04E664 02002025 */ move $a0, $s0 -/* 083198 7F04E668 24010001 */ li $at, 1 -/* 08319C 7F04E66C 14410017 */ bne $v0, $at, .L7F04E6CC -/* 0831A0 7F04E670 00000000 */ nop -/* 0831A4 7F04E674 0FC15799 */ jal init_trigger_toxic_gas_effect -/* 0831A8 7F04E678 26040058 */ addiu $a0, $s0, 0x58 -/* 0831AC 7F04E67C 10000013 */ b .L7F04E6CC -/* 0831B0 7F04E680 00000000 */ nop -/* 0831B4 7F04E684 24010015 */ li $at, 21 -.L7F04E688: -/* 0831B8 7F04E688 14410010 */ bne $v0, $at, .L7F04E6CC -/* 0831BC 7F04E68C 00000000 */ nop -/* 0831C0 7F04E690 0FC0FFF0 */ jal objGetDestroyedLevel -/* 0831C4 7F04E694 02002025 */ move $a0, $s0 -/* 0831C8 7F04E698 5440000A */ bnezl $v0, .L7F04E6C4 -/* 0831CC 7F04E69C 44804000 */ mtc1 $zero, $f8 -/* 0831D0 7F04E6A0 C6000074 */ lwc1 $f0, 0x74($s0) -/* 0831D4 7F04E6A4 C6100070 */ lwc1 $f16, 0x70($s0) -/* 0831D8 7F04E6A8 C60A0080 */ lwc1 $f10, 0x80($s0) -/* 0831DC 7F04E6AC 46100481 */ sub.s $f18, $f0, $f16 -/* 0831E0 7F04E6B0 46125182 */ mul.s $f6, $f10, $f18 -/* 0831E4 7F04E6B4 46003103 */ div.s $f4, $f6, $f0 -/* 0831E8 7F04E6B8 10000004 */ b .L7F04E6CC -/* 0831EC 7F04E6BC E6040084 */ swc1 $f4, 0x84($s0) -/* 0831F0 7F04E6C0 44804000 */ mtc1 $zero, $f8 -.L7F04E6C4: -/* 0831F4 7F04E6C4 00000000 */ nop -/* 0831F8 7F04E6C8 E6080084 */ swc1 $f8, 0x84($s0) -.L7F04E6CC: -/* 0831FC 7F04E6CC 0FC0FFF0 */ jal objGetDestroyedLevel -/* 083200 7F04E6D0 02002025 */ move $a0, $s0 -/* 083204 7F04E6D4 24010001 */ li $at, 1 -/* 083208 7F04E6D8 5441000D */ bnel $v0, $at, .L7F04E710 -/* 08320C 7F04E6DC 8FBF001C */ lw $ra, 0x1c($sp) -/* 083210 7F04E6E0 8E0F0010 */ lw $t7, 0x10($s0) -/* 083214 7F04E6E4 8DE40020 */ lw $a0, 0x20($t7) -/* 083218 7F04E6E8 50800009 */ beql $a0, $zero, .L7F04E710 -/* 08321C 7F04E6EC 8FBF001C */ lw $ra, 0x1c($sp) -/* 083220 7F04E6F0 8C820024 */ lw $v0, 0x24($a0) -.L7F04E6F4: -/* 083224 7F04E6F4 24050001 */ li $a1, 1 -/* 083228 7F04E6F8 0FC12FF4 */ jal propobjSetDropped -/* 08322C 7F04E6FC AFA20028 */ sw $v0, 0x28($sp) -/* 083230 7F04E700 8FA40028 */ lw $a0, 0x28($sp) -/* 083234 7F04E704 5480FFFB */ bnezl $a0, .L7F04E6F4 -/* 083238 7F04E708 8C820024 */ lw $v0, 0x24($a0) -.L7F04E70C: -/* 08323C 7F04E70C 8FBF001C */ lw $ra, 0x1c($sp) -.L7F04E710: -/* 083240 7F04E710 8FB00018 */ lw $s0, 0x18($sp) -/* 083244 7F04E714 27BD00E0 */ addiu $sp, $sp, 0xe0 -/* 083248 7F04E718 03E00008 */ jr $ra -/* 08324C 7F04E71C 00000000 */ nop -) -#endif + obj->flags |= PROPFLAG_NO_AMMO; + if (objGetDestroyedLevel(obj) == 1) + { + obj->flags |= PROPFLAG_IS_DRONE_GUN; + } + } + else if (obj->type == PROPDEF_CCTV) + { + if (objGetDestroyedLevel(obj) == 1) + { + obj->flags |= PROPFLAG_CCTV_DISABLED; + } + } + else if (obj->type == PROPDEF_MONITOR) + { + if (objGetDestroyedLevel(obj) == 1) + { + save_ptr_monitor_ani_code_to_obj_ani_slot(&((MonitorObjRecord *)obj)->Monitor, monAnim33BlackSolid); + } + } + else if (obj->type == PROPDEF_MULTI_MONITOR) + { + if (objGetDestroyedLevel(obj) == 1) + { + save_ptr_monitor_ani_code_to_obj_ani_slot(&((MultiMonitorObjRecord *)obj)->Monitor[0], monAnim33BlackSolid); + save_ptr_monitor_ani_code_to_obj_ani_slot(&((MultiMonitorObjRecord *)obj)->Monitor[1], monAnim33BlackSolid); + save_ptr_monitor_ani_code_to_obj_ani_slot(&((MultiMonitorObjRecord *)obj)->Monitor[2], monAnim33BlackSolid); + save_ptr_monitor_ani_code_to_obj_ani_slot(&((MultiMonitorObjRecord *)obj)->Monitor[3], monAnim33BlackSolid); + } + } + else if (obj->type == PROPDEF_GAS_RELEASING) + { + if (objGetDestroyedLevel(obj) == 1) + { + init_trigger_toxic_gas_effect(&obj->runtime_pos); + } + } + // Damage done to an armor gets subtracted from the amount of armor it provides when picked up. + else if (obj->type == PROPDEF_ARMOUR) + { + if (objGetDestroyedLevel(obj) == 0) + { + ((BodyArmourRecord *)obj)->amount = ((BodyArmourRecord *)obj)->initialamount + * (obj->damage - obj->maxdamage) / obj->damage; + } + else + { + ((BodyArmourRecord *)obj)->amount = 0.0f; + } + } + // If an object is destroyed drop its children, for example the monitor holders in Bunker. + if (objGetDestroyedLevel(obj) == 1) + { + child = obj->prop->child; + while (child != NULL) + { + PropRecord *nextchild = child->prev; - -#ifdef NONMATCHING -void sub_GAME_7F04E720(PropRecord* prop, struct ShotData* shotdata) { - + propobjSetDropped(child, DROPTYPE_DEFAULT); + child = nextchild; + } + } +} + + +/** + * This is the former non-matching block for sub_GAME_7F04E720. These asserts belong somewhere in sub_GAME_7F04E720 + * + * void sub_GAME_7F04E720(PropRecord* prop, struct ShotData* hitinfo) { + * mtx4TransformVecInPlace(?, hitinfo.hitpos); + * assert(!IsBadVec3d( (vec3d*)hitinfo.hitpos ); + * mtx4TransformVecInPlace(?, hitinfo.normal); + * assert(!IsBadVec3d( (vec3d*)hitinfo.normal ); + * } + */ + +/** + * Address: 7F04E720 + */ +void sub_GAME_7F04E720(PropRecord *prop, struct ShotData *hitinfo) +{ + ObjectRecord *obj = prop->obj; + Model *model; + PropRecord *child; + PropRecord *next; + s32 hitpart; + ModelNode *node; + HitThing hit; + s32 mtxindex; + coord3d pos; + s8 g[4]; + ModelNode *hitnode; + + if (hit.hitpos.z); + + if (((obj->runtime_bitflags & RUNTIMEBITFLAG_00001000) == FALSE) && (prop->flags & PROPFLAG_ONSCREEN)) + { + // Dummy goto is needed for matching. + goto dummy_label_995911; + +dummy_label_995911: + child = prop->child; + + while (child != NULL) + { + next = child->prev; + sub_GAME_7F04E720(child, hitinfo); + child = next; + } + + model = obj->model; + node = NULL; + + if ((obj->type == PROPDEF_DOOR) && (((((DoorRecord *) obj)->doorFlags & DOORFLAG_CLIP_TO_BBOX) || (((DoorRecord *) obj)->doorType == DOORTYPE_EYE)) || (((DoorRecord *) obj)->doorType == DOORTYPE_IRIS))) + { + hitpart = modelTestRayIntersectsTransformedBBox(&((DoorRecord *) obj)->bbox, &model->render_pos->pos, &hitinfo->viewOrigin, &hitinfo->viewDir); + node = model->obj->RootNode; + + if (hitpart > HIT_NULL_PART) + { + if (!propobjFindHit(model, node, &hitinfo->viewOrigin, &hitinfo->viewDir, &hit, &mtxindex, &hitnode)) + { + hitpart = HIT_NULL_PART; + } + } + } + else + { + do + { + hitpart = modelFindNextProjectileHitCandidate(model, &hitinfo->viewOrigin, &hitinfo->viewDir, &node); + + if (hitpart > HIT_NULL_PART) + { + if (propobjFindHit(model, node, &hitinfo->viewOrigin, &hitinfo->viewDir, &hit, &mtxindex, &hitnode)) + { + break; + } + } + } + while (hitpart > HIT_NULL_PART); + } + + if (hitpart > HIT_NULL_PART) + { + bool penetrates; + Mtxf *mtx; + + mtx = &model->render_pos[mtxindex].pos; + pos.x = hit.hitpos.x; + pos.y = hit.hitpos.y; + pos.z = hit.hitpos.z; + + mtx4TransformVecInPlace(mtx, &pos); + + if ((-pos.z) <= hitinfo->maxdist) + { + penetrates = TRUE; + + if ((obj->flags & PROPFLAG2_00020000) == FALSE) + { + if ((obj->type == PROPDEF_GLASS) || (obj->type == PROPDEF_TINTED_GLASS)) + { + penetrates = FALSE; + } + else if ((obj->model->obj->Skeleton == (&skeleton_door)) && (hitnode == obj->model->obj->Switches[3])) + { + penetrates = FALSE; + } + } + + chrpropAddBulletHit(hitinfo, prop, -pos.z, hitpart, node, &hit, mtxindex, (s32) hitnode, model, penetrates, (obj->flags2 & PROPFLAG2_00100000) != FALSE); + } + } + } } -#else -void sub_GAME_7F04E720(PropRecord*, struct ShotData*); -GLOBAL_ASM( -.text -glabel sub_GAME_7F04E720 -/* 083250 7F04E720 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 083254 7F04E724 AFBF004C */ sw $ra, 0x4c($sp) -/* 083258 7F04E728 AFB50048 */ sw $s5, 0x48($sp) -/* 08325C 7F04E72C AFB40044 */ sw $s4, 0x44($sp) -/* 083260 7F04E730 AFB30040 */ sw $s3, 0x40($sp) -/* 083264 7F04E734 AFB2003C */ sw $s2, 0x3c($sp) -/* 083268 7F04E738 AFB10038 */ sw $s1, 0x38($sp) -/* 08326C 7F04E73C AFB00034 */ sw $s0, 0x34($sp) -/* 083270 7F04E740 AFA400C0 */ sw $a0, 0xc0($sp) -/* 083274 7F04E744 8C950004 */ lw $s5, 4($a0) -/* 083278 7F04E748 00A09825 */ move $s3, $a1 -/* 08327C 7F04E74C 8EAF0064 */ lw $t7, 0x64($s5) -/* 083280 7F04E750 31F81000 */ andi $t8, $t7, 0x1000 -/* 083284 7F04E754 57000091 */ bnezl $t8, .L7F04E99C -/* 083288 7F04E758 8FBF004C */ lw $ra, 0x4c($sp) -/* 08328C 7F04E75C 90880001 */ lbu $t0, 1($a0) -/* 083290 7F04E760 31090002 */ andi $t1, $t0, 2 -/* 083294 7F04E764 5120008D */ beql $t1, $zero, .L7F04E99C -/* 083298 7F04E768 8FBF004C */ lw $ra, 0x4c($sp) -/* 08329C 7F04E76C 8C900020 */ lw $s0, 0x20($a0) -/* 0832A0 7F04E770 52000008 */ beql $s0, $zero, .L7F04E794 -/* 0832A4 7F04E774 8EB40014 */ lw $s4, 0x14($s5) -.L7F04E778: -/* 0832A8 7F04E778 8E110024 */ lw $s1, 0x24($s0) -/* 0832AC 7F04E77C 02002025 */ move $a0, $s0 -/* 0832B0 7F04E780 0FC139C8 */ jal sub_GAME_7F04E720 -/* 0832B4 7F04E784 02602825 */ move $a1, $s3 -/* 0832B8 7F04E788 1620FFFB */ bnez $s1, .L7F04E778 -/* 0832BC 7F04E78C 02208025 */ move $s0, $s1 -/* 0832C0 7F04E790 8EB40014 */ lw $s4, 0x14($s5) -.L7F04E794: -/* 0832C4 7F04E794 AFA000A8 */ sw $zero, 0xa8($sp) -/* 0832C8 7F04E798 92AB0003 */ lbu $t3, 3($s5) -/* 0832CC 7F04E79C 24010001 */ li $at, 1 -/* 0832D0 7F04E7A0 2670000C */ addiu $s0, $s3, 0xc -/* 0832D4 7F04E7A4 15610025 */ bne $t3, $at, .L7F04E83C -/* 0832D8 7F04E7A8 27B100A8 */ addiu $s1, $sp, 0xa8 -/* 0832DC 7F04E7AC 96AC0098 */ lhu $t4, 0x98($s5) -/* 0832E0 7F04E7B0 26A400D0 */ addiu $a0, $s5, 0xd0 -/* 0832E4 7F04E7B4 02603025 */ move $a2, $s3 -/* 0832E8 7F04E7B8 318D0004 */ andi $t5, $t4, 4 -/* 0832EC 7F04E7BC 55A00008 */ bnezl $t5, .L7F04E7E0 -/* 0832F0 7F04E7C0 2670000C */ addiu $s0, $s3, 0xc -/* 0832F4 7F04E7C4 96A2009A */ lhu $v0, 0x9a($s5) -/* 0832F8 7F04E7C8 24010006 */ li $at, 6 -/* 0832FC 7F04E7CC 10410003 */ beq $v0, $at, .L7F04E7DC -/* 083300 7F04E7D0 24010007 */ li $at, 7 -/* 083304 7F04E7D4 14410019 */ bne $v0, $at, .L7F04E83C -/* 083308 7F04E7D8 00000000 */ nop -.L7F04E7DC: -/* 08330C 7F04E7DC 2670000C */ addiu $s0, $s3, 0xc -.L7F04E7E0: -/* 083310 7F04E7E0 02003825 */ move $a3, $s0 -/* 083314 7F04E7E4 0FC1D1F4 */ jal sub_GAME_7F0747D0 -/* 083318 7F04E7E8 8E85000C */ lw $a1, 0xc($s4) -/* 08331C 7F04E7EC 8E8E0008 */ lw $t6, 8($s4) -/* 083320 7F04E7F0 00409025 */ move $s2, $v0 -/* 083324 7F04E7F4 02802025 */ move $a0, $s4 -/* 083328 7F04E7F8 8DCF0000 */ lw $t7, ($t6) -/* 08332C 7F04E7FC 02603025 */ move $a2, $s3 -/* 083330 7F04E800 18400024 */ blez $v0, .L7F04E894 -/* 083334 7F04E804 AFAF00A8 */ sw $t7, 0xa8($sp) -/* 083338 7F04E808 27B80078 */ addiu $t8, $sp, 0x78 -/* 08333C 7F04E80C 27B90074 */ addiu $t9, $sp, 0x74 -/* 083340 7F04E810 27A80060 */ addiu $t0, $sp, 0x60 -/* 083344 7F04E814 AFA80018 */ sw $t0, 0x18($sp) -/* 083348 7F04E818 AFB90014 */ sw $t9, 0x14($sp) -/* 08334C 7F04E81C AFB80010 */ sw $t8, 0x10($sp) -/* 083350 7F04E820 01E02825 */ move $a1, $t7 -/* 083354 7F04E824 0FC1366C */ jal sub_GAME_7F04D9B0 -/* 083358 7F04E828 02003825 */ move $a3, $s0 -/* 08335C 7F04E82C 14400019 */ bnez $v0, .L7F04E894 -/* 083360 7F04E830 00000000 */ nop -/* 083364 7F04E834 10000017 */ b .L7F04E894 -/* 083368 7F04E838 00009025 */ move $s2, $zero -.L7F04E83C: -/* 08336C 7F04E83C 02802025 */ move $a0, $s4 -.L7F04E840: -/* 083370 7F04E840 02602825 */ move $a1, $s3 -/* 083374 7F04E844 02003025 */ move $a2, $s0 -/* 083378 7F04E848 0FC1D4BF */ jal sub_GAME_7F0752FC -/* 08337C 7F04E84C 02203825 */ move $a3, $s1 -/* 083380 7F04E850 1840000E */ blez $v0, .L7F04E88C -/* 083384 7F04E854 00409025 */ move $s2, $v0 -/* 083388 7F04E858 27A90078 */ addiu $t1, $sp, 0x78 -/* 08338C 7F04E85C 27AA0074 */ addiu $t2, $sp, 0x74 -/* 083390 7F04E860 27AB0060 */ addiu $t3, $sp, 0x60 -/* 083394 7F04E864 AFAB0018 */ sw $t3, 0x18($sp) -/* 083398 7F04E868 AFAA0014 */ sw $t2, 0x14($sp) -/* 08339C 7F04E86C AFA90010 */ sw $t1, 0x10($sp) -/* 0833A0 7F04E870 02802025 */ move $a0, $s4 -/* 0833A4 7F04E874 8FA500A8 */ lw $a1, 0xa8($sp) -/* 0833A8 7F04E878 02603025 */ move $a2, $s3 -/* 0833AC 7F04E87C 0FC1366C */ jal sub_GAME_7F04D9B0 -/* 0833B0 7F04E880 02003825 */ move $a3, $s0 -/* 0833B4 7F04E884 14400003 */ bnez $v0, .L7F04E894 -/* 0833B8 7F04E888 00000000 */ nop -.L7F04E88C: -/* 0833BC 7F04E88C 5E40FFEC */ bgtzl $s2, .L7F04E840 -/* 0833C0 7F04E890 02802025 */ move $a0, $s4 -.L7F04E894: -/* 0833C4 7F04E894 1A400040 */ blez $s2, .L7F04E998 -/* 0833C8 7F04E898 8FAD0074 */ lw $t5, 0x74($sp) -/* 0833CC 7F04E89C 8E8C000C */ lw $t4, 0xc($s4) -/* 0833D0 7F04E8A0 C7A40078 */ lwc1 $f4, 0x78($sp) -/* 0833D4 7F04E8A4 C7A6007C */ lwc1 $f6, 0x7c($sp) -/* 0833D8 7F04E8A8 C7A80080 */ lwc1 $f8, 0x80($sp) -/* 0833DC 7F04E8AC 000D7180 */ sll $t6, $t5, 6 -/* 0833E0 7F04E8B0 27A50068 */ addiu $a1, $sp, 0x68 -/* 0833E4 7F04E8B4 018E2021 */ addu $a0, $t4, $t6 -/* 0833E8 7F04E8B8 E7A40068 */ swc1 $f4, 0x68($sp) -/* 0833EC 7F04E8BC E7A6006C */ swc1 $f6, 0x6c($sp) -/* 0833F0 7F04E8C0 0FC1611D */ jal mtx4TransformVecInPlace -/* 0833F4 7F04E8C4 E7A80070 */ swc1 $f8, 0x70($sp) -/* 0833F8 7F04E8C8 C7A00070 */ lwc1 $f0, 0x70($sp) -/* 0833FC 7F04E8CC C66A0034 */ lwc1 $f10, 0x34($s3) -/* 083400 7F04E8D0 02602025 */ move $a0, $s3 -/* 083404 7F04E8D4 46000007 */ neg.s $f0, $f0 -/* 083408 7F04E8D8 8FA500C0 */ lw $a1, 0xc0($sp) -/* 08340C 7F04E8DC 460A003E */ c.le.s $f0, $f10 -/* 083410 7F04E8E0 02403825 */ move $a3, $s2 -/* 083414 7F04E8E4 8FAC00A8 */ lw $t4, 0xa8($sp) -/* 083418 7F04E8E8 27AE0078 */ addiu $t6, $sp, 0x78 -/* 08341C 7F04E8EC 4502002B */ bc1fl .L7F04E99C -/* 083420 7F04E8F0 8FBF004C */ lw $ra, 0x4c($sp) -/* 083424 7F04E8F4 8EAF0008 */ lw $t7, 8($s5) -/* 083428 7F04E8F8 24030001 */ li $v1, 1 -/* 08342C 7F04E8FC 000FC380 */ sll $t8, $t7, 0xe -/* 083430 7F04E900 07020017 */ bltzl $t8, .L7F04E960 -/* 083434 7F04E904 8FAF0074 */ lw $t7, 0x74($sp) -/* 083438 7F04E908 92A20003 */ lbu $v0, 3($s5) -/* 08343C 7F04E90C 2401002A */ li $at, 42 -/* 083440 7F04E910 10410003 */ beq $v0, $at, .L7F04E920 -/* 083444 7F04E914 2401002F */ li $at, 47 -/* 083448 7F04E918 54410004 */ bnel $v0, $at, .L7F04E92C -/* 08344C 7F04E91C 8EB90014 */ lw $t9, 0x14($s5) -.L7F04E920: -/* 083450 7F04E920 1000000E */ b .L7F04E95C -/* 083454 7F04E924 00001825 */ move $v1, $zero -/* 083458 7F04E928 8EB90014 */ lw $t9, 0x14($s5) -.L7F04E92C: -/* 08345C 7F04E92C 3C088004 */ lui $t0, %hi(skeleton_door) -/* 083460 7F04E930 2508A1DC */ addiu $t0, %lo(skeleton_door) # addiu $t0, $t0, -0x5e24 -/* 083464 7F04E934 8F220008 */ lw $v0, 8($t9) -/* 083468 7F04E938 8C490004 */ lw $t1, 4($v0) -/* 08346C 7F04E93C 55090008 */ bnel $t0, $t1, .L7F04E960 -/* 083470 7F04E940 8FAF0074 */ lw $t7, 0x74($sp) -/* 083474 7F04E944 8C4B0008 */ lw $t3, 8($v0) -/* 083478 7F04E948 8FAA0060 */ lw $t2, 0x60($sp) -/* 08347C 7F04E94C 8D6D000C */ lw $t5, 0xc($t3) -/* 083480 7F04E950 554D0003 */ bnel $t2, $t5, .L7F04E960 -/* 083484 7F04E954 8FAF0074 */ lw $t7, 0x74($sp) -/* 083488 7F04E958 00001825 */ move $v1, $zero -.L7F04E95C: -/* 08348C 7F04E95C 8FAF0074 */ lw $t7, 0x74($sp) -.L7F04E960: -/* 083490 7F04E960 8FB80060 */ lw $t8, 0x60($sp) -/* 083494 7F04E964 AFAC0010 */ sw $t4, 0x10($sp) -/* 083498 7F04E968 AFAE0014 */ sw $t6, 0x14($sp) -/* 08349C 7F04E96C AFB40020 */ sw $s4, 0x20($sp) -/* 0834A0 7F04E970 AFA30024 */ sw $v1, 0x24($sp) -/* 0834A4 7F04E974 AFAF0018 */ sw $t7, 0x18($sp) -/* 0834A8 7F04E978 AFB8001C */ sw $t8, 0x1c($sp) -/* 0834AC 7F04E97C 8EB9000C */ lw $t9, 0xc($s5) -/* 0834B0 7F04E980 3C010010 */ lui $at, 0x10 -/* 0834B4 7F04E984 44060000 */ mfc1 $a2, $f0 -/* 0834B8 7F04E988 03214024 */ and $t0, $t9, $at -/* 0834BC 7F04E98C 0008482B */ sltu $t1, $zero, $t0 -/* 0834C0 7F04E990 0FC0EE70 */ jal sub_GAME_7F03B9C0 -/* 0834C4 7F04E994 AFA90028 */ sw $t1, 0x28($sp) -.L7F04E998: -/* 0834C8 7F04E998 8FBF004C */ lw $ra, 0x4c($sp) -.L7F04E99C: -/* 0834CC 7F04E99C 8FB00034 */ lw $s0, 0x34($sp) -/* 0834D0 7F04E9A0 8FB10038 */ lw $s1, 0x38($sp) -/* 0834D4 7F04E9A4 8FB2003C */ lw $s2, 0x3c($sp) -/* 0834D8 7F04E9A8 8FB30040 */ lw $s3, 0x40($sp) -/* 0834DC 7F04E9AC 8FB40044 */ lw $s4, 0x44($sp) -/* 0834E0 7F04E9B0 8FB50048 */ lw $s5, 0x48($sp) -/* 0834E4 7F04E9B4 03E00008 */ jr $ra -/* 0834E8 7F04E9B8 27BD00C0 */ addiu $sp, $sp, 0xc0 -) -#endif // PD: obj_test_hit @@ -32242,359 +9474,188 @@ void sub_GAME_7F04E9BC(PropRecord* prop, struct ShotData* shotdata) && (obj->flags2 & PROPFLAG2_SHOOTTHROUGH) == 0) { tmp = -(model->render_pos->pos.m[3][2] + chrpropSumMatrixNegZ(bbox, (Mtxf*)model->render_pos)); - if (tmp <= shotdata->unk34) { + if (tmp <= shotdata->maxdist) { sub_GAME_7F04E720(prop, (void*)shotdata); } } } -// PD: obj_hit -#ifdef NONMATCHING -void sub_GAME_7F04EA68(void) { +/** + * Address: 7F04EA68 + */ +void objHit(ShotData *shotdata, BulletHit *hit) +{ + ObjectRecord *obj; + coord3d pos; + PropRecord *rootprop; + rootprop = hit->prop; + + while (rootprop->parent != NULL) + { + rootprop = rootprop->parent; + } + + obj = hit->prop->obj; + + pos.x = shotdata->viewOrigin.x - ((hit->dist * shotdata->viewDir.x) / shotdata->viewDir.z); + pos.y = shotdata->viewOrigin.y - ((hit->dist * shotdata->viewDir.y) / shotdata->viewDir.z); + pos.z = shotdata->viewOrigin.z - hit->dist; + + pos.x -= 26.0f * shotdata->viewDir.x; + pos.y -= 26.0f * shotdata->viewDir.y; + pos.z -= 26.0f * shotdata->viewDir.z; + + mtx4TransformVecInPlace(currentPlayerGetViewToWorldMtxf(), &pos); + + if (hit->countsAsPenetration != 0) + { + gunSetTracerTarget(&pos); + } + + bullet_spark_create(&pos, 1, 26.0f, rootprop->stan->room); + + if ((objIsHealthy(obj) && objIsMortal(obj)) && (hit->countsAsPenetration != 0)) + { + inc_curplayer_hitcount_with_weapon(shotdata->weapon, SHOT_REGISTER_OBJECT); + } + + if (hit->countsAsPenetration == 0) + { + sub_GAME_7F064720(&hit->prop->pos); + } + else + { + recall_joy2_hits_edit_detail_edit_flag(shotdata->weapon, hit->prop, hit->hit.texturenum); + } + + if (shotdata->weapon != ITEM_WATCHLASER) + { + if (hit->countsAsPenetration == 0) + { + PropRecord *hitprop; + s8 room_clear_flag; + s16 impact_type; + + hitprop = hit->prop; + room_clear_flag = 0; + + if (obj->model->obj->Skeleton == &skeleton_door) + { + room_clear_flag = 1; + } + + impact_type = (randomGetNext() % 3) + 0x11; + + explosionCreateBulletImpact(&hit->hit.hitpos, &hit->hit.normal, impact_type, 1, hitprop, hit->room, room_clear_flag); + } + else + { + struct image_sound *impact_sounds; + s32 thing2_index; + s8 room_clear_flag; + s16 texturenum; + + texturenum = hit->hit.texturenum; + room_clear_flag = 0; + + if (texturenum < 0) + { + impact_sounds = g_HitTypeSounds[0]; + } + else + { + impact_sounds = g_HitTypeSounds[((u8 *)&g_Textures[texturenum])[0] & 0x0f]; + } + + thing2_index = randomGetNext() % impact_sounds->thing2_len; + + if (((obj->model->obj->Skeleton == &skeleton_door) && (hit->unk44 == obj->model->obj->Switches[3])) || ((obj->model->obj->Skeleton == &skeleton_cctv) && (hit->unk44 == obj->model->obj->Switches[1]))) + { + room_clear_flag = 1; + } + + explosionCreateBulletImpact(&hit->hit.hitpos, &hit->hit.normal, impact_sounds->thing2[thing2_index], 1, hit->prop, hit->room, room_clear_flag); + } + } + + { + f32 damage; + + damage = gunItemGetDestructionAmount(shotdata->weapon); + + // On Agent player shots to drone guns do 2x normal damage. + if (obj->type == PROPDEF_AUTOGUN) + { + damage *= F_80030B24; + } + // Shots to CCTV camera glass do 100x normal damage. + else if (obj->type == PROPDEF_CCTV) + { + if (obj->model->obj->Skeleton == &skeleton_cctv) + { + if (hit->unk44 == obj->model->obj->Switches[1]) + { + damage *= 100.0f; + objBreakCCTVGlass(obj); + } + } + + damage *= F_80030B18; + } + + chrobjMaybeDetonateObjectIfFlags(obj, damage, &pos, shotdata->weapon, get_cur_playernum()); + } + + if ((obj->model->obj->Skeleton == &skeleton_door) && (hit->countsAsPenetration == 0)) + { + ((DoorRecord *)obj)->unkbd++; + + if (((DoorRecord *)obj)->unkbd >= 3) + { + sub_GAME_7F04DD68(obj); + } + } + + objDropRecursively(hit->prop); + + { + bool do_bounce; + + do_bounce = FALSE; + + if (objIsCollectable(obj)) + { + if (!(obj->flags & PROPFLAG_00400000)) + { + do_bounce = TRUE; + } + } + else if (obj->flags & PROPFLAG_00200000) + { + do_bounce = TRUE; + } + + if (obj->flags2 & PROPFLAG2_00000002) + { + if (!objIsHealthy(obj)) + { + do_bounce = TRUE; + } + } + + if (obj->flags2 & PROPFLAG2_LINKEDTOSAFE) + { + do_bounce = FALSE; + } + + if (do_bounce) + { + objBounce(obj, &shotdata->viewDir); + } + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F04EA68 -/* 083598 7F04EA68 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 08359C 7F04EA6C AFBF002C */ sw $ra, 0x2c($sp) -/* 0835A0 7F04EA70 AFB10028 */ sw $s1, 0x28($sp) -/* 0835A4 7F04EA74 AFB00024 */ sw $s0, 0x24($sp) -/* 0835A8 7F04EA78 8CA60004 */ lw $a2, 4($a1) -/* 0835AC 7F04EA7C 00A08025 */ move $s0, $a1 -/* 0835B0 7F04EA80 8CC2001C */ lw $v0, 0x1c($a2) -/* 0835B4 7F04EA84 00C01825 */ move $v1, $a2 -/* 0835B8 7F04EA88 50400006 */ beql $v0, $zero, .L7F04EAA4 -/* 0835BC 7F04EA8C C6040000 */ lwc1 $f4, ($s0) -/* 0835C0 7F04EA90 00401825 */ move $v1, $v0 -.L7F04EA94: -/* 0835C4 7F04EA94 8C42001C */ lw $v0, 0x1c($v0) -/* 0835C8 7F04EA98 5440FFFE */ bnezl $v0, .L7F04EA94 -/* 0835CC 7F04EA9C 00401825 */ move $v1, $v0 -/* 0835D0 7F04EAA0 C6040000 */ lwc1 $f4, ($s0) -.L7F04EAA4: -/* 0835D4 7F04EAA4 C486000C */ lwc1 $f6, 0xc($a0) -/* 0835D8 7F04EAA8 C48A0014 */ lwc1 $f10, 0x14($a0) -/* 0835DC 7F04EAAC C4920000 */ lwc1 $f18, ($a0) -/* 0835E0 7F04EAB0 46062202 */ mul.s $f8, $f4, $f6 -/* 0835E4 7F04EAB4 8CD10004 */ lw $s1, 4($a2) -/* 0835E8 7F04EAB8 3C0141D0 */ li $at, 0x41D00000 # 26.000000 -/* 0835EC 7F04EABC 44810000 */ mtc1 $at, $f0 -/* 0835F0 7F04EAC0 460A4403 */ div.s $f16, $f8, $f10 -/* 0835F4 7F04EAC4 46109101 */ sub.s $f4, $f18, $f16 -/* 0835F8 7F04EAC8 E7A40060 */ swc1 $f4, 0x60($sp) -/* 0835FC 7F04EACC C4880010 */ lwc1 $f8, 0x10($a0) -/* 083600 7F04EAD0 C6060000 */ lwc1 $f6, ($s0) -/* 083604 7F04EAD4 C4920014 */ lwc1 $f18, 0x14($a0) -/* 083608 7F04EAD8 C4840004 */ lwc1 $f4, 4($a0) -/* 08360C 7F04EADC 46083282 */ mul.s $f10, $f6, $f8 -/* 083610 7F04EAE0 46125403 */ div.s $f16, $f10, $f18 -/* 083614 7F04EAE4 46102181 */ sub.s $f6, $f4, $f16 -/* 083618 7F04EAE8 C7A40060 */ lwc1 $f4, 0x60($sp) -/* 08361C 7F04EAEC E7A60064 */ swc1 $f6, 0x64($sp) -/* 083620 7F04EAF0 C60A0000 */ lwc1 $f10, ($s0) -/* 083624 7F04EAF4 C4880008 */ lwc1 $f8, 8($a0) -/* 083628 7F04EAF8 460A4481 */ sub.s $f18, $f8, $f10 -/* 08362C 7F04EAFC C7AA0064 */ lwc1 $f10, 0x64($sp) -/* 083630 7F04EB00 E7B20068 */ swc1 $f18, 0x68($sp) -/* 083634 7F04EB04 C490000C */ lwc1 $f16, 0xc($a0) -/* 083638 7F04EB08 46100182 */ mul.s $f6, $f0, $f16 -/* 08363C 7F04EB0C 46062201 */ sub.s $f8, $f4, $f6 -/* 083640 7F04EB10 C7A60068 */ lwc1 $f6, 0x68($sp) -/* 083644 7F04EB14 E7A80060 */ swc1 $f8, 0x60($sp) -/* 083648 7F04EB18 C4920010 */ lwc1 $f18, 0x10($a0) -/* 08364C 7F04EB1C 46120402 */ mul.s $f16, $f0, $f18 -/* 083650 7F04EB20 46105101 */ sub.s $f4, $f10, $f16 -/* 083654 7F04EB24 E7A40064 */ swc1 $f4, 0x64($sp) -/* 083658 7F04EB28 C4880014 */ lwc1 $f8, 0x14($a0) -/* 08365C 7F04EB2C AFA40070 */ sw $a0, 0x70($sp) -/* 083660 7F04EB30 AFA3005C */ sw $v1, 0x5c($sp) -/* 083664 7F04EB34 46080482 */ mul.s $f18, $f0, $f8 -/* 083668 7F04EB38 46123281 */ sub.s $f10, $f6, $f18 -/* 08366C 7F04EB3C 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 083670 7F04EB40 E7AA0068 */ swc1 $f10, 0x68($sp) -/* 083674 7F04EB44 00402025 */ move $a0, $v0 -/* 083678 7F04EB48 0FC1611D */ jal mtx4TransformVecInPlace -/* 08367C 7F04EB4C 27A50060 */ addiu $a1, $sp, 0x60 -/* 083680 7F04EB50 8E0E004C */ lw $t6, 0x4c($s0) -/* 083684 7F04EB54 8FA3005C */ lw $v1, 0x5c($sp) -/* 083688 7F04EB58 11C00004 */ beqz $t6, .L7F04EB6C -/* 08368C 7F04EB5C 27A40060 */ addiu $a0, $sp, 0x60 -/* 083690 7F04EB60 0FC19ED3 */ jal sub_GAME_7F067B4C -/* 083694 7F04EB64 AFA3005C */ sw $v1, 0x5c($sp) -/* 083698 7F04EB68 8FA3005C */ lw $v1, 0x5c($sp) -.L7F04EB6C: -/* 08369C 7F04EB6C 8C6F0014 */ lw $t7, 0x14($v1) -/* 0836A0 7F04EB70 27A40060 */ addiu $a0, $sp, 0x60 -/* 0836A4 7F04EB74 24050001 */ li $a1, 1 -/* 0836A8 7F04EB78 3C0641D0 */ lui $a2, 0x41d0 -/* 0836AC 7F04EB7C 0FC28F87 */ jal sub_GAME_7F0A3E1C -/* 0836B0 7F04EB80 91E70003 */ lbu $a3, 3($t7) -/* 0836B4 7F04EB84 0FC13BCD */ jal objIsHealthy -/* 0836B8 7F04EB88 02202025 */ move $a0, $s1 -/* 0836BC 7F04EB8C 5040000D */ beql $v0, $zero, .L7F04EBC4 -/* 0836C0 7F04EB90 8E0B004C */ lw $t3, 0x4c($s0) -/* 0836C4 7F04EB94 0FC13812 */ jal objIsMortal -/* 0836C8 7F04EB98 02202025 */ move $a0, $s1 -/* 0836CC 7F04EB9C 50400009 */ beql $v0, $zero, .L7F04EBC4 -/* 0836D0 7F04EBA0 8E0B004C */ lw $t3, 0x4c($s0) -/* 0836D4 7F04EBA4 8E18004C */ lw $t8, 0x4c($s0) -/* 0836D8 7F04EBA8 8FB90070 */ lw $t9, 0x70($sp) -/* 0836DC 7F04EBAC 24050006 */ li $a1, 6 -/* 0836E0 7F04EBB0 53000004 */ beql $t8, $zero, .L7F04EBC4 -/* 0836E4 7F04EBB4 8E0B004C */ lw $t3, 0x4c($s0) -/* 0836E8 7F04EBB8 0FC1A9BE */ jal inc_curplayer_hitcount_with_weapon -/* 0836EC 7F04EBBC 8F240018 */ lw $a0, 0x18($t9) -/* 0836F0 7F04EBC0 8E0B004C */ lw $t3, 0x4c($s0) -.L7F04EBC4: -/* 0836F4 7F04EBC4 55600007 */ bnezl $t3, .L7F04EBE4 -/* 0836F8 7F04EBC8 8FAC0070 */ lw $t4, 0x70($sp) -/* 0836FC 7F04EBCC 8E040004 */ lw $a0, 4($s0) -/* 083700 7F04EBD0 0FC191C8 */ jal sub_GAME_7F064720 -/* 083704 7F04EBD4 24840008 */ addiu $a0, $a0, 8 -/* 083708 7F04EBD8 10000007 */ b .L7F04EBF8 -/* 08370C 7F04EBDC 8FAD0070 */ lw $t5, 0x70($sp) -/* 083710 7F04EBE0 8FAC0070 */ lw $t4, 0x70($sp) -.L7F04EBE4: -/* 083714 7F04EBE4 8E050004 */ lw $a1, 4($s0) -/* 083718 7F04EBE8 8606003A */ lh $a2, 0x3a($s0) -/* 08371C 7F04EBEC 0FC19107 */ jal recall_joy2_hits_edit_detail_edit_flag -/* 083720 7F04EBF0 8D840018 */ lw $a0, 0x18($t4) -/* 083724 7F04EBF4 8FAD0070 */ lw $t5, 0x70($sp) -.L7F04EBF8: -/* 083728 7F04EBF8 24010017 */ li $at, 23 -/* 08372C 7F04EBFC 8DA40018 */ lw $a0, 0x18($t5) -/* 083730 7F04EC00 10810060 */ beq $a0, $at, .L7F04ED84 -/* 083734 7F04EC04 00000000 */ nop -/* 083738 7F04EC08 8E0E004C */ lw $t6, 0x4c($s0) -/* 08373C 7F04EC0C 55C00022 */ bnezl $t6, .L7F04EC98 -/* 083740 7F04EC10 8602003A */ lh $v0, 0x3a($s0) -/* 083744 7F04EC14 8E380014 */ lw $t8, 0x14($s1) -/* 083748 7F04EC18 3C0F8004 */ lui $t7, %hi(skeleton_door) -/* 08374C 7F04EC1C 25EFA1DC */ addiu $t7, %lo(skeleton_door) # addiu $t7, $t7, -0x5e24 -/* 083750 7F04EC20 8F190008 */ lw $t9, 8($t8) -/* 083754 7F04EC24 8E080004 */ lw $t0, 4($s0) -/* 083758 7F04EC28 00001825 */ move $v1, $zero -/* 08375C 7F04EC2C 8F2B0004 */ lw $t3, 4($t9) -/* 083760 7F04EC30 55EB0003 */ bnel $t7, $t3, .L7F04EC40 -/* 083764 7F04EC34 A3A30057 */ sb $v1, 0x57($sp) -/* 083768 7F04EC38 24030001 */ li $v1, 1 -/* 08376C 7F04EC3C A3A30057 */ sb $v1, 0x57($sp) -.L7F04EC40: -/* 083770 7F04EC40 0C002914 */ jal randomGetNext -/* 083774 7F04EC44 AFA80058 */ sw $t0, 0x58($sp) -/* 083778 7F04EC48 24010003 */ li $at, 3 -/* 08377C 7F04EC4C 0041001B */ divu $zero, $v0, $at -/* 083780 7F04EC50 8FA80058 */ lw $t0, 0x58($sp) -/* 083784 7F04EC54 00003010 */ mfhi $a2 -/* 083788 7F04EC58 83A30057 */ lb $v1, 0x57($sp) -/* 08378C 7F04EC5C AFA80010 */ sw $t0, 0x10($sp) -/* 083790 7F04EC60 8E0E0040 */ lw $t6, 0x40($s0) -/* 083794 7F04EC64 24C60011 */ addiu $a2, $a2, 0x11 -/* 083798 7F04EC68 00066400 */ sll $t4, $a2, 0x10 -/* 08379C 7F04EC6C 000C3403 */ sra $a2, $t4, 0x10 -/* 0837A0 7F04EC70 26040010 */ addiu $a0, $s0, 0x10 -/* 0837A4 7F04EC74 2605001C */ addiu $a1, $s0, 0x1c -/* 0837A8 7F04EC78 24070001 */ li $a3, 1 -/* 0837AC 7F04EC7C AFA30018 */ sw $v1, 0x18($sp) -/* 0837B0 7F04EC80 0FC28423 */ jal explosionCreateBulletImpact -/* 0837B4 7F04EC84 AFAE0014 */ sw $t6, 0x14($sp) -/* 0837B8 7F04EC88 8FB80070 */ lw $t8, 0x70($sp) -/* 0837BC 7F04EC8C 1000003D */ b .L7F04ED84 -/* 0837C0 7F04EC90 8F040018 */ lw $a0, 0x18($t8) -/* 0837C4 7F04EC94 8602003A */ lh $v0, 0x3a($s0) -.L7F04EC98: -/* 0837C8 7F04EC98 00004825 */ move $t1, $zero -/* 0837CC 7F04EC9C 3C0F8005 */ lui $t7, %hi(g_Textures) -/* 0837D0 7F04ECA0 04410004 */ bgez $v0, .L7F04ECB4 -/* 0837D4 7F04ECA4 0002C8C0 */ sll $t9, $v0, 3 -/* 0837D8 7F04ECA8 3C088005 */ lui $t0, %hi(D_8004E86C) -/* 0837DC 7F04ECAC 10000008 */ b .L7F04ECD0 -/* 0837E0 7F04ECB0 8D08E86C */ lw $t0, %lo(D_8004E86C)($t0) -.L7F04ECB4: -/* 0837E4 7F04ECB4 01F97821 */ addu $t7, $t7, $t9 -/* 0837E8 7F04ECB8 91EF9300 */ lbu $t7, %lo(g_Textures)($t7) -/* 0837EC 7F04ECBC 3C088005 */ lui $t0, %hi(D_8004E86C) -/* 0837F0 7F04ECC0 31EB000F */ andi $t3, $t7, 0xf -/* 0837F4 7F04ECC4 000B6080 */ sll $t4, $t3, 2 -/* 0837F8 7F04ECC8 010C4021 */ addu $t0, $t0, $t4 -/* 0837FC 7F04ECCC 8D08E86C */ lw $t0, %lo(D_8004E86C)($t0) -.L7F04ECD0: -/* 083800 7F04ECD0 AFA80050 */ sw $t0, 0x50($sp) -/* 083804 7F04ECD4 0C002914 */ jal randomGetNext -/* 083808 7F04ECD8 A3A9004B */ sb $t1, 0x4b($sp) -/* 08380C 7F04ECDC 8FA80050 */ lw $t0, 0x50($sp) -/* 083810 7F04ECE0 8E2E0014 */ lw $t6, 0x14($s1) -/* 083814 7F04ECE4 3C188004 */ lui $t8, %hi(skeleton_door) -/* 083818 7F04ECE8 850D000A */ lh $t5, 0xa($t0) -/* 08381C 7F04ECEC 8DC30008 */ lw $v1, 8($t6) -/* 083820 7F04ECF0 2718A1DC */ addiu $t8, %lo(skeleton_door) # addiu $t8, $t8, -0x5e24 -/* 083824 7F04ECF4 004D001B */ divu $zero, $v0, $t5 -/* 083828 7F04ECF8 8C640004 */ lw $a0, 4($v1) -/* 08382C 7F04ECFC 00005010 */ mfhi $t2 -/* 083830 7F04ED00 83A9004B */ lb $t1, 0x4b($sp) -/* 083834 7F04ED04 15A00002 */ bnez $t5, .L7F04ED10 -/* 083838 7F04ED08 00000000 */ nop -/* 08383C 7F04ED0C 0007000D */ break 7 -.L7F04ED10: -/* 083840 7F04ED10 2605001C */ addiu $a1, $s0, 0x1c -/* 083844 7F04ED14 17040005 */ bne $t8, $a0, .L7F04ED2C -/* 083848 7F04ED18 24070001 */ li $a3, 1 -/* 08384C 7F04ED1C 8C6F0008 */ lw $t7, 8($v1) -/* 083850 7F04ED20 8E190044 */ lw $t9, 0x44($s0) -/* 083854 7F04ED24 8DEB000C */ lw $t3, 0xc($t7) -/* 083858 7F04ED28 132B0009 */ beq $t9, $t3, .L7F04ED50 -.L7F04ED2C: -/* 08385C 7F04ED2C 3C0C8004 */ lui $t4, %hi(skeleton_cctv) -/* 083860 7F04ED30 258CA05C */ addiu $t4, %lo(skeleton_cctv) # addiu $t4, $t4, -0x5fa4 -/* 083864 7F04ED34 55840008 */ bnel $t4, $a0, .L7F04ED58 -/* 083868 7F04ED38 8D0F0004 */ lw $t7, 4($t0) -/* 08386C 7F04ED3C 8C6E0008 */ lw $t6, 8($v1) -/* 083870 7F04ED40 8E0D0044 */ lw $t5, 0x44($s0) -/* 083874 7F04ED44 8DD80004 */ lw $t8, 4($t6) -/* 083878 7F04ED48 55B80003 */ bnel $t5, $t8, .L7F04ED58 -/* 08387C 7F04ED4C 8D0F0004 */ lw $t7, 4($t0) -.L7F04ED50: -/* 083880 7F04ED50 24090001 */ li $t1, 1 -/* 083884 7F04ED54 8D0F0004 */ lw $t7, 4($t0) -.L7F04ED58: -/* 083888 7F04ED58 8E0B0004 */ lw $t3, 4($s0) -/* 08388C 7F04ED5C 26040010 */ addiu $a0, $s0, 0x10 -/* 083890 7F04ED60 01EAC821 */ addu $t9, $t7, $t2 -/* 083894 7F04ED64 93260000 */ lbu $a2, ($t9) -/* 083898 7F04ED68 AFAB0010 */ sw $t3, 0x10($sp) -/* 08389C 7F04ED6C 8E0C0040 */ lw $t4, 0x40($s0) -/* 0838A0 7F04ED70 AFA90018 */ sw $t1, 0x18($sp) -/* 0838A4 7F04ED74 0FC28423 */ jal explosionCreateBulletImpact -/* 0838A8 7F04ED78 AFAC0014 */ sw $t4, 0x14($sp) -/* 0838AC 7F04ED7C 8FAE0070 */ lw $t6, 0x70($sp) -/* 0838B0 7F04ED80 8DC40018 */ lw $a0, 0x18($t6) -.L7F04ED84: -/* 0838B4 7F04ED84 0FC177E1 */ jal bondwalkItemGetDestructionAmount -/* 0838B8 7F04ED88 00000000 */ nop -/* 0838BC 7F04ED8C 92220003 */ lbu $v0, 3($s1) -/* 0838C0 7F04ED90 2401000D */ li $at, 13 -/* 0838C4 7F04ED94 46000086 */ mov.s $f2, $f0 -/* 0838C8 7F04ED98 14410005 */ bne $v0, $at, .L7F04EDB0 -/* 0838CC 7F04ED9C 3C018003 */ lui $at, %hi(F_80030B24) -/* 0838D0 7F04EDA0 C4300B24 */ lwc1 $f16, %lo(F_80030B24)($at) -/* 0838D4 7F04EDA4 46100082 */ mul.s $f2, $f0, $f16 -/* 0838D8 7F04EDA8 1000001B */ b .L7F04EE18 -/* 0838DC 7F04EDAC 00000000 */ nop -.L7F04EDB0: -/* 0838E0 7F04EDB0 24010006 */ li $at, 6 -/* 0838E4 7F04EDB4 14410018 */ bne $v0, $at, .L7F04EE18 -/* 0838E8 7F04EDB8 00000000 */ nop -/* 0838EC 7F04EDBC 8E2D0014 */ lw $t5, 0x14($s1) -/* 0838F0 7F04EDC0 3C188004 */ lui $t8, %hi(skeleton_cctv) -/* 0838F4 7F04EDC4 2718A05C */ addiu $t8, %lo(skeleton_cctv) # addiu $t8, $t8, -0x5fa4 -/* 0838F8 7F04EDC8 8DA30008 */ lw $v1, 8($t5) -/* 0838FC 7F04EDCC 8C6F0004 */ lw $t7, 4($v1) -/* 083900 7F04EDD0 170F000D */ bne $t8, $t7, .L7F04EE08 -/* 083904 7F04EDD4 00000000 */ nop -/* 083908 7F04EDD8 8C6B0008 */ lw $t3, 8($v1) -/* 08390C 7F04EDDC 8E190044 */ lw $t9, 0x44($s0) -/* 083910 7F04EDE0 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 083914 7F04EDE4 8D6C0004 */ lw $t4, 4($t3) -/* 083918 7F04EDE8 172C0007 */ bne $t9, $t4, .L7F04EE08 -/* 08391C 7F04EDEC 00000000 */ nop -/* 083920 7F04EDF0 44812000 */ mtc1 $at, $f4 -/* 083924 7F04EDF4 02202025 */ move $a0, $s1 -/* 083928 7F04EDF8 46041082 */ mul.s $f2, $f2, $f4 -/* 08392C 7F04EDFC 0FC13786 */ jal sub_GAME_7F04DE18 -/* 083930 7F04EE00 E7A20044 */ swc1 $f2, 0x44($sp) -/* 083934 7F04EE04 C7A20044 */ lwc1 $f2, 0x44($sp) -.L7F04EE08: -/* 083938 7F04EE08 3C018003 */ lui $at, %hi(F_80030B18) -/* 08393C 7F04EE0C C4280B18 */ lwc1 $f8, %lo(F_80030B18)($at) -/* 083940 7F04EE10 46081082 */ mul.s $f2, $f2, $f8 -/* 083944 7F04EE14 00000000 */ nop -.L7F04EE18: -/* 083948 7F04EE18 0FC26C54 */ jal get_cur_playernum -/* 08394C 7F04EE1C E7A20044 */ swc1 $f2, 0x44($sp) -/* 083950 7F04EE20 C7A20044 */ lwc1 $f2, 0x44($sp) -/* 083954 7F04EE24 8FAE0070 */ lw $t6, 0x70($sp) -/* 083958 7F04EE28 02202025 */ move $a0, $s1 -/* 08395C 7F04EE2C 44051000 */ mfc1 $a1, $f2 -/* 083960 7F04EE30 8DC70018 */ lw $a3, 0x18($t6) -/* 083964 7F04EE34 AFA20010 */ sw $v0, 0x10($sp) -/* 083968 7F04EE38 0FC13833 */ jal chrobjMaybeDetonateObjectIfFlags -/* 08396C 7F04EE3C 27A60060 */ addiu $a2, $sp, 0x60 -/* 083970 7F04EE40 8E380014 */ lw $t8, 0x14($s1) -/* 083974 7F04EE44 3C0D8004 */ lui $t5, %hi(skeleton_door) -/* 083978 7F04EE48 25ADA1DC */ addiu $t5, %lo(skeleton_door) # addiu $t5, $t5, -0x5e24 -/* 08397C 7F04EE4C 8F0F0008 */ lw $t7, 8($t8) -/* 083980 7F04EE50 8DEB0004 */ lw $t3, 4($t7) -/* 083984 7F04EE54 15AB000D */ bne $t5, $t3, .L7F04EE8C -/* 083988 7F04EE58 00000000 */ nop -/* 08398C 7F04EE5C 8E19004C */ lw $t9, 0x4c($s0) -/* 083990 7F04EE60 1720000A */ bnez $t9, .L7F04EE8C -/* 083994 7F04EE64 00000000 */ nop -/* 083998 7F04EE68 822C00BD */ lb $t4, 0xbd($s1) -/* 08399C 7F04EE6C 258E0001 */ addiu $t6, $t4, 1 -/* 0839A0 7F04EE70 A22E00BD */ sb $t6, 0xbd($s1) -/* 0839A4 7F04EE74 823800BD */ lb $t8, 0xbd($s1) -/* 0839A8 7F04EE78 2B010003 */ slti $at, $t8, 3 -/* 0839AC 7F04EE7C 14200003 */ bnez $at, .L7F04EE8C -/* 0839B0 7F04EE80 00000000 */ nop -/* 0839B4 7F04EE84 0FC1375A */ jal sub_GAME_7F04DD68 -/* 0839B8 7F04EE88 02202025 */ move $a0, $s1 -.L7F04EE8C: -/* 0839BC 7F04EE8C 0FC11080 */ jal objDropRecursively -/* 0839C0 7F04EE90 8E040004 */ lw $a0, 4($s0) -/* 0839C4 7F04EE94 00008025 */ move $s0, $zero -/* 0839C8 7F04EE98 0FC13803 */ jal objIsCollectable -/* 0839CC 7F04EE9C 02202025 */ move $a0, $s1 -/* 0839D0 7F04EEA0 50400008 */ beql $v0, $zero, .L7F04EEC4 -/* 0839D4 7F04EEA4 8E2B0008 */ lw $t3, 8($s1) -/* 0839D8 7F04EEA8 8E2F0008 */ lw $t7, 8($s1) -/* 0839DC 7F04EEAC 000F6A40 */ sll $t5, $t7, 9 -/* 0839E0 7F04EEB0 05A20009 */ bltzl $t5, .L7F04EED8 -/* 0839E4 7F04EEB4 8E2C000C */ lw $t4, 0xc($s1) -/* 0839E8 7F04EEB8 10000006 */ b .L7F04EED4 -/* 0839EC 7F04EEBC 24100001 */ li $s0, 1 -/* 0839F0 7F04EEC0 8E2B0008 */ lw $t3, 8($s1) -.L7F04EEC4: -/* 0839F4 7F04EEC4 000BCA80 */ sll $t9, $t3, 0xa -/* 0839F8 7F04EEC8 07230003 */ bgezl $t9, .L7F04EED8 -/* 0839FC 7F04EECC 8E2C000C */ lw $t4, 0xc($s1) -/* 083A00 7F04EED0 24100001 */ li $s0, 1 -.L7F04EED4: -/* 083A04 7F04EED4 8E2C000C */ lw $t4, 0xc($s1) -.L7F04EED8: -/* 083A08 7F04EED8 318E0002 */ andi $t6, $t4, 2 -/* 083A0C 7F04EEDC 51C00007 */ beql $t6, $zero, .L7F04EEFC -/* 083A10 7F04EEE0 8E38000C */ lw $t8, 0xc($s1) -/* 083A14 7F04EEE4 0FC13BCD */ jal objIsHealthy -/* 083A18 7F04EEE8 02202025 */ move $a0, $s1 -/* 083A1C 7F04EEEC 54400003 */ bnezl $v0, .L7F04EEFC -/* 083A20 7F04EEF0 8E38000C */ lw $t8, 0xc($s1) -/* 083A24 7F04EEF4 24100001 */ li $s0, 1 -/* 083A28 7F04EEF8 8E38000C */ lw $t8, 0xc($s1) -.L7F04EEFC: -/* 083A2C 7F04EEFC 8FA50070 */ lw $a1, 0x70($sp) -/* 083A30 7F04EF00 330F0400 */ andi $t7, $t8, 0x400 -/* 083A34 7F04EF04 11E00002 */ beqz $t7, .L7F04EF10 -/* 083A38 7F04EF08 24A5000C */ addiu $a1, $a1, 0xc -/* 083A3C 7F04EF0C 00008025 */ move $s0, $zero -.L7F04EF10: -/* 083A40 7F04EF10 52000004 */ beql $s0, $zero, .L7F04EF24 -/* 083A44 7F04EF14 8FBF002C */ lw $ra, 0x2c($sp) -/* 083A48 7F04EF18 0FC12F37 */ jal objBounce -/* 083A4C 7F04EF1C 02202025 */ move $a0, $s1 -/* 083A50 7F04EF20 8FBF002C */ lw $ra, 0x2c($sp) -.L7F04EF24: -/* 083A54 7F04EF24 8FB00024 */ lw $s0, 0x24($sp) -/* 083A58 7F04EF28 8FB10028 */ lw $s1, 0x28($sp) -/* 083A5C 7F04EF2C 03E00008 */ jr $ra -/* 083A60 7F04EF30 27BD0070 */ addiu $sp, $sp, 0x70 -) -#endif - - - bool objIsHealthy(ObjectRecord *self) //#MATCH @@ -32630,7 +9691,7 @@ bool objTestForInteract(PropRecord* prop) && !(obj->flags & PROPFLAG_CANNOT_ACTIVATE)) { - player = get_curplayer_positiondata(); + player = getCurrentPlayerProp(); xdiff = obj->runtime_pos.x - player->pos.x; ydiff = obj->runtime_pos.y - player->pos.y; @@ -32657,7 +9718,7 @@ bool objTestForInteract(PropRecord* prop) { angle = atan2f(xdiff, zdiff); - playerangle = get_curplay_horizontal_rotation_in_degrees(); + playerangle = bondviewGetPlayerYawRadians(); anglediff = angle - playerangle; if (angle < playerangle) @@ -32687,10 +9748,10 @@ bool objTestForInteract(PropRecord* prop) /* * Return TYPE if Collected or Interacted (except for Alarm which always returns False) */ -INV_ITEM_TYPE propobjInteract(PropRecord *prop) //#MATCH +TICKOP propobjInteract(PropRecord *prop) { ObjectRecord *obj = prop->obj; - INV_ITEM_TYPE colllected = INV_ITEM_NONE; + TICKOP op = TICKOP_NONE; if (obj->type == PROPDEF_ALARM) { @@ -32704,13 +9765,16 @@ INV_ITEM_TYPE propobjInteract(PropRecord *prop) //#MATCH alarmActivate(); } } + if (obj->flags & PROPFLAG_00080000) { - colllected = collect_or_interact_object(prop, TRUE); + op = propPickupByPlayer(prop, TRUE); } + obj->runtime_bitflags |= RUNTIMEBITFLAG_ACTIVATED; sub_GAME_7F03E6A0(prop); - return colllected; + + return op; } @@ -32720,7 +9784,7 @@ void sub_GAME_7F04F218(PropRecord* prop, s32 arg1) { if (arg1 != 0) { - chr->accuracyrating = (u8) chr->accuracyrating & 0xFFDF; + chr->accuracyrating = (u8) chr->accuracyrating & ~0x20; } else { @@ -33381,17 +10445,17 @@ void display_text_for_weapon_in_lower_left_corner(ITEM_IDS weaponid) // Perfect Dark propobj.c: s32 propPickupByPlayer(struct prop *prop, bool showhudmsg) -INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, s32 showstring) +TICKOP propPickupByPlayer(PropRecord *prop, bool showstring) { ObjectRecord *obj; - INV_ITEM_TYPE collectType; + TICKOP op; - collectType = INV_ITEM_NONE; + op = TICKOP_NONE; obj = prop->obj; if (g_CurrentPlayer->bonddead || g_ClockTimer == 0) { - return INV_ITEM_NONE; + return TICKOP_NONE; } switch (obj->type) @@ -33399,9 +10463,11 @@ INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, s32 showstring) case PROPDEF_KEY: { sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, KEYCARD_SFX, 0); + if (showstring) { char *text = bondinvGetActivatedTextObject(obj); + if (text == NULL) { text = langGet(getStringID(LPROPOBJ, PROPOBJ_STR_3C_PICKEDUPAKEY)); // "Picked up a key.\n", @@ -33414,7 +10480,7 @@ INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, s32 showstring) #endif } - collectType = INV_ITEM_PICKUP; + op = INV_ITEM_PICKUP; break; } @@ -33429,7 +10495,7 @@ INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, s32 showstring) amount = get_ammo_in_magazine(crate); add_ammo_to_inventory(crate->ammoType, amount, 1, showstring); - collectType = INV_ITEM_WEAPON; + op = TICKOP_FREE; break; } @@ -33464,7 +10530,7 @@ INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, s32 showstring) sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, PICKUP_AMMO_SFX, 0); - collectType = INV_ITEM_WEAPON; + op = TICKOP_FREE; break; } @@ -33516,7 +10582,7 @@ INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, s32 showstring) collected = 1; } - collectType = INV_ITEM_PICKUP; + op = TICKOP_GIVETOPLAYER; } else { @@ -33545,18 +10611,21 @@ INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, s32 showstring) } } - collectType = INV_ITEM_WEAPON; + op = TICKOP_FREE; } ammo_type = get_ammo_type_for_weapon(wep->weaponnum); + if (ammo_type) { s32 pickupqty = ammo_collected_from_weapon(wep); + if (pickupqty > 0) { if (check_cur_player_ammo_amount_in_inventory(ammo_type) < get_max_ammo_for_type(ammo_type)) { s32 heldqty = check_cur_player_ammo_amount_in_inventory(ammo_type); + give_cur_player_ammo(ammo_type, heldqty + pickupqty); if ((collected == 0) && showstring) @@ -33599,7 +10668,7 @@ INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, s32 showstring) #endif } - collectType = INV_ITEM_WEAPON; + op = TICKOP_FREE; break; } @@ -33663,34 +10732,30 @@ INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, s32 showstring) #endif } - collectType = INV_ITEM_PICKUP; + op = TICKOP_GIVETOPLAYER; break; } } - if ((collectType == INV_ITEM_WEAPON) && ((obj->runtime_bitflags & RUNTIMEBITFLAG_TAGGED) == 0)) + if ((op == TICKOP_FREE) && ((obj->runtime_bitflags & RUNTIMEBITFLAG_TAGGED) == 0)) { objFree(obj, 0, (obj->state & RUNTIMEBITFLAG_REMOVE)); return INV_ITEM_WEAPON; } - if (collectType != INV_ITEM_NONE) + if (op != TICKOP_NONE) { bondinvAddPropToInv(prop); - return INV_ITEM_PICKUP; + return TICKOP_GIVETOPLAYER; } - return INV_ITEM_NONE; + return TICKOP_NONE; } - - -#ifdef VERSION_US - // They're missing from .h associated with them, meaning they're only found in the .c file. // Move them to a .h to fix the issue. This will also fix the issue with other functions // which couldn't be brought from decomp.me @@ -33700,1262 +10765,287 @@ extern s32 bondinvHasInvItem(ITEM_IDS weapon); extern s32 get_ammo_type_for_weapon(ITEM_IDS weapon); extern s32 get_max_ammo_for_weapon(ITEM_IDS weapon); extern s32 get_ammo_count_for_weapon(ITEM_IDS weapon); -extern s32 bondinvHasDualWeapon(ITEM_IDS right, ITEM_IDS left); +extern bool bondinvHasDualWeapon(ITEM_IDS right, ITEM_IDS left); extern s32 check_cur_player_ammo_amount_in_inventory(AMMOTYPE type); -extern f32 get_curplay_vertical_rotation_in_degrees(void); -/* -* US Address: 0x7F0506DC -*/ -s32 object_collectability_routines(struct PropRecord* arg0) { - struct ObjectRecord* var_a0; // sp84 +TICKOP objTickPlayer(struct PropRecord* prop) +{ + struct ObjectRecord* obj; - var_a0 = arg0->obj; // arg0->unk4 + obj = prop->obj; - if ((objIsCollectable(var_a0) != 0) && (var_a0->type != 0x11)) { - if (var_a0->flags & 0x100000) { - return 0; + if ((objIsCollectable(obj) != 0) && (obj->type != PROPDEF_HAT)) + { + if (obj->flags & PROPFLAG_UNCOLLECTABLE) + { + return TICKOP_NONE; } - } else { - - if (!(var_a0->flags & 0x40000)) { - return 0; + } + else + { + if (!(obj->flags & PROPFLAG_00040000)) + { + return TICKOP_NONE; } } - if (var_a0->flags & 0x80000) { - return 0; + if (obj->flags & PROPFLAG_00080000) + { + return TICKOP_NONE; } - if (var_a0->runtime_bitflags & 0x80) { - if (((s32)var_a0->projectile->refreshrate > 0) && (var_a0->projectile->unk90 == 0)) { - return 0; + if (obj->runtime_bitflags & 0x80) + { + if (((s32)obj->projectile->refreshrate > 0) && (obj->projectile->unk90 == 0)) + { + return TICKOP_NONE; } } - if (objCanPickupFromSafe(var_a0) == 0) { - return 0; + if (objCanPickupFromSafe(obj) == 0) + { + return TICKOP_NONE; } - if (var_a0->type == 8) { // PROPDEF_COLLECTABLE - struct WeaponObjRecord* sp80; + if (obj->type == PROPDEF_COLLECTABLE) + { + struct WeaponObjRecord* weaponObj; s32 var_a1; - s32 var_a0_2; - sp80 = (WeaponObjRecord*)arg0->obj; - if (((sp80->weaponnum == 0x1A) || (sp80->weaponnum == 0x57)) && ((sp80->timer >= 0) - || (var_a0->runtime_bitflags & 4))) { - return 0; + s32 obj_2; + + weaponObj = (WeaponObjRecord*)prop->obj; + + if (((weaponObj->weaponnum == ITEM_GRENADE) || (weaponObj->weaponnum == ITEM_GRENADEROUND)) + && ((weaponObj->timer >= 0) || (obj->runtime_bitflags & 4))) + { + return TICKOP_NONE; } - if (((sp80->weaponnum == 0x1D) || (sp80->weaponnum == 0x1C) || (sp80->weaponnum == 0x1B) - || (sp80->weaponnum == 0x21) || (sp80->weaponnum == 0x2F) || (sp80->weaponnum == 0x30) - || (sp80->weaponnum == 0x22)) && ((sp80->timer >= 0) || (var_a0->runtime_bitflags & 4))) { - return 0; + if (((weaponObj->weaponnum == ITEM_REMOTEMINE) + || (weaponObj->weaponnum == ITEM_PROXIMITYMINE) + || (weaponObj->weaponnum == ITEM_TIMEDMINE) + || (weaponObj->weaponnum == ITEM_BOMBCASE) + || (weaponObj->weaponnum == ITEM_BUG) + || (weaponObj->weaponnum == ITEM_MICROCAMERA) + || (weaponObj->weaponnum == ITEM_PLASTIQUE)) + && ((weaponObj->timer >= 0) || (obj->runtime_bitflags & 4))) + { + return TICKOP_NONE; } - if ((sp80->weaponnum == 0x56) && (var_a0->runtime_bitflags & 0x80)) { - return 0; + if ((weaponObj->weaponnum == ITEM_ROCKETROUND) && (obj->runtime_bitflags & 0x80)) + { + return TICKOP_NONE; } - if (bondinvHasInvItem(sp80->weaponnum) != 0) { - if (get_ammo_type_for_weapon(sp80->weaponnum) != 0) { - if (get_ammo_count_for_weapon(sp80->weaponnum) >= get_max_ammo_for_weapon(sp80->weaponnum)) { - if ((sp80->dualweapon != NULL) || (sp80->LinkedWeaponType >= 0)) { - if (sp80->dualweapon != NULL) { - var_a1 = sp80->dualweapon->weaponnum; - var_a0_2 = var_a1; - } else { - var_a1 = sp80->LinkedWeaponType; - var_a0_2 = var_a1; + if (bondinvHasInvItem(weaponObj->weaponnum) != 0) + { + if (get_ammo_type_for_weapon(weaponObj->weaponnum) != 0) + { + if (get_ammo_count_for_weapon(weaponObj->weaponnum) >= get_max_ammo_for_weapon(weaponObj->weaponnum)) + { + if ((weaponObj->dualweapon != NULL) || (weaponObj->LinkedWeaponType >= 0)) + { + if (weaponObj->dualweapon != NULL) + { + var_a1 = weaponObj->dualweapon->weaponnum; + obj_2 = var_a1; + } + else + { + var_a1 = weaponObj->LinkedWeaponType; + obj_2 = var_a1; } - if (sp80->flags & 0x10000000) { - var_a1 = sp80->weaponnum; - } else { - var_a0_2 = sp80->weaponnum; + + if (weaponObj->flags & 0x10000000) + { + var_a1 = weaponObj->weaponnum; + } + else + { + obj_2 = weaponObj->weaponnum; } - if (bondinvHasDualWeapon(var_a0_2, var_a1) != 0) { - return 0; + + if (bondinvHasDualWeapon(obj_2, var_a1) != 0) + { + return TICKOP_NONE; } - } else { - return 0; + } + else + { + return TICKOP_NONE; } } } } - } else if (var_a0->type == 7) { // PROPDEF_MAGAZINE - struct AmmoCrateRecord* sp74; - sp74 = (AmmoCrateRecord*) arg0->obj; - if (check_cur_player_ammo_amount_in_inventory(sp74->ammoType) >= get_max_ammo_for_type(sp74->ammoType)) { - return 0; + } + else if (obj->type == PROPDEF_MAGAZINE) + { + struct AmmoCrateRecord* ammoCrateObj; + + ammoCrateObj = (AmmoCrateRecord*)prop->obj; + +#if defined(VERSION_JP) || defined(VERSION_EU) + if (check_cur_player_ammo_amount_in_inventory(ammoCrateObj->ammoType) >= get_max_ammo_for_type(ammoCrateObj->ammoType) + && !( + ((ammoCrateObj->ammoType == AMMO_GRENADE) && (!bondinvHasInvItem(ITEM_GRENADE))) + || ((ammoCrateObj->ammoType == AMMO_REMOTEMINE) && (!bondinvHasInvItem(ITEM_REMOTEMINE))) + || ((ammoCrateObj->ammoType == AMMO_PROXMINE) && (!bondinvHasInvItem(ITEM_PROXIMITYMINE))) + || ((ammoCrateObj->ammoType == AMMO_TIMEDMINE) && (!bondinvHasInvItem(ITEM_TIMEDMINE))) + || ((ammoCrateObj->ammoType == AMMO_KNIFE) && (!bondinvHasInvItem(ITEM_THROWKNIFE))) + ) + ) { + return TICKOP_NONE; } - } else if (var_a0->type == 0x14) { // PROPDEF_AMMO PD: OBJTYPE_MULTIAMMOCRATE) - struct MultiAmmoCrateRecord* sp70; +#else + if (check_cur_player_ammo_amount_in_inventory(ammoCrateObj->ammoType) >= get_max_ammo_for_type(ammoCrateObj->ammoType)) { + return TICKOP_NONE; + } +#endif + } + else if (obj->type == PROPDEF_AMMO) + { + struct MultiAmmoCrateRecord* multiAmmoCrateObj; s32 sp6C; s32 i; - sp70 = (MultiAmmoCrateRecord*) arg0->obj; + + multiAmmoCrateObj = (MultiAmmoCrateRecord*)prop->obj; sp6C = 1; - if (objGetDestroyedLevel(var_a0) != 0) { + + if (objGetDestroyedLevel(obj) != 0) + { return 0; } - for (i = 0; i < AMMOTYPE_GLOBAL_MAX; i++) { + for (i = 0; i < AMMOTYPE_GLOBAL_MAX; i++) + { s32 sp64; + sp64 = i + 1; + if (i == 1) { sp64 = 1; } - if (sp70->slots[i].quantity > 0) { + + if (multiAmmoCrateObj->slots[i].quantity > 0) { if (check_cur_player_ammo_amount_in_inventory(sp64) < get_max_ammo_for_type(sp64)) { sp6C = 0; break; } + +#if defined(VERSION_JP) || defined(VERSION_EU) + if (((sp64 == AMMO_GRENADE) && (!bondinvHasInvItem(ITEM_GRENADE))) + || ((sp64 == AMMO_REMOTEMINE) && (!bondinvHasInvItem(ITEM_REMOTEMINE))) + || ((sp64 == AMMO_PROXMINE) && (!bondinvHasInvItem(ITEM_PROXIMITYMINE))) + || ((sp64 == AMMO_TIMEDMINE) && (!bondinvHasInvItem(ITEM_TIMEDMINE))) + || ((sp64 == AMMO_KNIFE) && (!bondinvHasInvItem(ITEM_THROWKNIFE)))) + { + sp6C = 0; + break; + } +#endif } } - if (sp6C) { - return 0; + if (sp6C) + { + return TICKOP_NONE; } - } else if (var_a0->type == 0x15) { // PROPDEF_ARMOUR - struct BodyArmourRecord* sp60; + } + else if (obj->type == PROPDEF_ARMOUR) + { + struct BodyArmourRecord* armorObj; s32 ignore; s32 sp58; - sp60 = (BodyArmourRecord* )arg0->obj; + + armorObj = (BodyArmourRecord*)prop->obj; ignore = 0; - if (sp60->amount <= get_BONDdata_watch_armor()) { + if (armorObj->amount <= currentPlayerGetArmor()) + { ignore = 1; - } else if (getPlayerCount() >= 2) { + } + else if (getPlayerCount() >= 2) + { sp58 = get_scenario(); - if ((sp58 == 2) && (bondinvIsAliveWithFlag() != 0)) { + + if ((sp58 == 2) && (bondinvIsAliveWithFlag() != 0)) + { ignore = 1; - } else if ((sp58 == 3) && (bondinvHasGoldenGun() != 0)) { + } + else if ((sp58 == 3) && (bondinvHasGoldenGun() != 0)) + { ignore = 1; } } - if (ignore != 0) { - return 0; + if (ignore != 0) + { + return TICKOP_NONE; } } - if ((get_curplay_vertical_rotation_in_degrees() < -0.7853982f) && (g_CurrentPlayer->magnetattracttime < 0)) { - return 0; + if ((bondviewGetPlayerPitchRadians() < -0.7853982f) && (g_CurrentPlayer->magnetattracttime < 0)) + { + return TICKOP_NONE; } { f32 temp_f0; f32 temp_f12; f32 temp_f2; +#if defined(VERSION_US) s32 var_v0; +#endif struct PropRecord* temp_v0_5; +#if defined(VERSION_JP) || defined(VERSION_EU) + s32 pad; +#endif s32 pickup; - temp_v0_5 = get_curplayer_positiondata(); + temp_v0_5 = getCurrentPlayerProp(); - temp_f0 = var_a0->runtime_pos.x - temp_v0_5->pos.x; - temp_f12 = var_a0->runtime_pos.y - temp_v0_5->pos.y; - temp_f2 = var_a0->runtime_pos.z - temp_v0_5->pos.z; + temp_f0 = obj->runtime_pos.x - temp_v0_5->pos.x; + temp_f12 = obj->runtime_pos.y - temp_v0_5->pos.y; + temp_f2 = obj->runtime_pos.z - temp_v0_5->pos.z; - if (g_CurrentPlayer->magnetattracttime >= 0x3C) { - pickup = (((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) <= 122500.0f) && (temp_f12 >= -500.0f) && (temp_f12 <= 500.0f); - } else { - pickup = (((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) <= 10000.0f) && (temp_f12 >= -200.0f) && (temp_f12 <= 200.0f); + if (g_CurrentPlayer->magnetattracttime >= 0x3C) + { + pickup = (((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) <= 122500.0f) + && (temp_f12 >= -500.0f) + && (temp_f12 <= 500.0f); + } + else + { + pickup = (((temp_f0 * temp_f0) + (temp_f2 * temp_f2)) <= 10000.0f) + && (temp_f12 >= -200.0f) + && (temp_f12 <= 200.0f); } - if ((pickup != 0) && !(var_a0->flags2 & 0x1000)) { + if ((pickup != 0) && !(obj->flags2 & 0x1000)) + { struct StandTile* stan = temp_v0_5->stan; - if ((stanTestLineUnobstructed(&stan, temp_v0_5->pos.x, temp_v0_5->pos.z, arg0->pos.x, arg0->pos.z, - 2, 30.0f, 30.0f, 0.0f, 1.0f) == 0) || (stan != arg0->stan)) { + + if ((stanTestLineUnobstructed(&stan, temp_v0_5->pos.x, temp_v0_5->pos.z, prop->pos.x, prop->pos.z, 2, 30.0f, 30.0f, 0.0f, 1.0f) == 0) || (stan != prop->stan)) + { pickup = 0; } } - if (pickup != 0) { - return collect_or_interact_object(arg0, 1); + if (pickup != 0) + { + return propPickupByPlayer(prop, TRUE); } - return 0; + + return TICKOP_NONE; } } -#else - -#ifdef VERSION_JP -GLOBAL_ASM( -.late_rodata -glabel D_800532E0 -.word 0xbf490fdb /*-0.78539819*/ -glabel D_800532E4 -.word 0x47ef4200 /*122500.0*/ -glabel D_800532E8 -.word 0x461c4000 /*10000.0*/ -.text -glabel object_collectability_routines -/* 085650 7F050AE0 27BDFF70 */ addiu $sp, $sp, -0x90 -/* 085654 7F050AE4 AFBF0034 */ sw $ra, 0x34($sp) -/* 085658 7F050AE8 AFB00030 */ sw $s0, 0x30($sp) -/* 08565C 7F050AEC AFA40090 */ sw $a0, 0x90($sp) -/* 085660 7F050AF0 8C840004 */ lw $a0, 4($a0) -/* 085664 7F050AF4 0FC13904 */ jal objIsCollectable -/* 085668 7F050AF8 AFA4008C */ sw $a0, 0x8c($sp) -/* 08566C 7F050AFC 1040000B */ beqz $v0, .Ljp7F050B2C -/* 085670 7F050B00 8FA4008C */ lw $a0, 0x8c($sp) -/* 085674 7F050B04 908F0003 */ lbu $t7, 3($a0) -/* 085678 7F050B08 24010011 */ li $at, 17 -/* 08567C 7F050B0C 51E10008 */ beql $t7, $at, .Ljp7F050B30 -/* 085680 7F050B10 8FA4008C */ lw $a0, 0x8c($sp) -/* 085684 7F050B14 8C820008 */ lw $v0, 8($a0) -/* 085688 7F050B18 0002C2C0 */ sll $t8, $v0, 0xb -/* 08568C 7F050B1C 0703000B */ bgezl $t8, .Ljp7F050B4C -/* 085690 7F050B20 00024B00 */ sll $t1, $v0, 0xc -/* 085694 7F050B24 100001BC */ b .Ljp7F051218 -/* 085698 7F050B28 00001025 */ move $v0, $zero -.Ljp7F050B2C: -/* 08569C 7F050B2C 8FA4008C */ lw $a0, 0x8c($sp) -.Ljp7F050B30: -/* 0856A0 7F050B30 8C820008 */ lw $v0, 8($a0) -/* 0856A4 7F050B34 0002CB40 */ sll $t9, $v0, 0xd -/* 0856A8 7F050B38 07220004 */ bltzl $t9, .Ljp7F050B4C -/* 0856AC 7F050B3C 00024B00 */ sll $t1, $v0, 0xc -/* 0856B0 7F050B40 100001B5 */ b .Ljp7F051218 -/* 0856B4 7F050B44 00001025 */ move $v0, $zero -/* 0856B8 7F050B48 00024B00 */ sll $t1, $v0, 0xc -.Ljp7F050B4C: -/* 0856BC 7F050B4C 05230004 */ bgezl $t1, .Ljp7F050B60 -/* 0856C0 7F050B50 8C8A0064 */ lw $t2, 0x64($a0) -/* 0856C4 7F050B54 100001B0 */ b .Ljp7F051218 -/* 0856C8 7F050B58 00001025 */ move $v0, $zero -/* 0856CC 7F050B5C 8C8A0064 */ lw $t2, 0x64($a0) -.Ljp7F050B60: -/* 0856D0 7F050B60 314B0080 */ andi $t3, $t2, 0x80 -/* 0856D4 7F050B64 1160000A */ beqz $t3, .Ljp7F050B90 -/* 0856D8 7F050B68 00000000 */ nop -/* 0856DC 7F050B6C 8C82006C */ lw $v0, 0x6c($a0) -/* 0856E0 7F050B70 8C4C00BC */ lw $t4, 0xbc($v0) -/* 0856E4 7F050B74 19800006 */ blez $t4, .Ljp7F050B90 -/* 0856E8 7F050B78 00000000 */ nop -/* 0856EC 7F050B7C 8C4D0090 */ lw $t5, 0x90($v0) -/* 0856F0 7F050B80 15A00003 */ bnez $t5, .Ljp7F050B90 -/* 0856F4 7F050B84 00000000 */ nop -/* 0856F8 7F050B88 100001A3 */ b .Ljp7F051218 -/* 0856FC 7F050B8C 00001025 */ move $v0, $zero -.Ljp7F050B90: -/* 085700 7F050B90 0FC0FAAB */ jal objCanPickupFromSafe -/* 085704 7F050B94 00000000 */ nop -/* 085708 7F050B98 14400003 */ bnez $v0, .Ljp7F050BA8 -/* 08570C 7F050B9C 8FA5008C */ lw $a1, 0x8c($sp) -/* 085710 7F050BA0 1000019D */ b .Ljp7F051218 -/* 085714 7F050BA4 00001025 */ move $v0, $zero -.Ljp7F050BA8: -/* 085718 7F050BA8 90A20003 */ lbu $v0, 3($a1) -/* 08571C 7F050BAC 24010008 */ li $at, 8 -/* 085720 7F050BB0 8FAE0090 */ lw $t6, 0x90($sp) -/* 085724 7F050BB4 54410060 */ bnel $v0, $at, .Ljp7F050D38 -/* 085728 7F050BB8 24010007 */ li $at, 7 -/* 08572C 7F050BBC 8DD00004 */ lw $s0, 4($t6) -/* 085730 7F050BC0 2401001A */ li $at, 26 -/* 085734 7F050BC4 82040080 */ lb $a0, 0x80($s0) -/* 085738 7F050BC8 10810003 */ beq $a0, $at, .Ljp7F050BD8 -/* 08573C 7F050BCC 24010057 */ li $at, 87 -/* 085740 7F050BD0 5481000B */ bnel $a0, $at, .Ljp7F050C00 -/* 085744 7F050BD4 2401001D */ li $at, 29 -.Ljp7F050BD8: -/* 085748 7F050BD8 860F0082 */ lh $t7, 0x82($s0) -/* 08574C 7F050BDC 05E10005 */ bgez $t7, .Ljp7F050BF4 -/* 085750 7F050BE0 00000000 */ nop -/* 085754 7F050BE4 8CB80064 */ lw $t8, 0x64($a1) -/* 085758 7F050BE8 33190004 */ andi $t9, $t8, 4 -/* 08575C 7F050BEC 53200004 */ beql $t9, $zero, .Ljp7F050C00 -/* 085760 7F050BF0 2401001D */ li $at, 29 -.Ljp7F050BF4: -/* 085764 7F050BF4 10000188 */ b .Ljp7F051218 -/* 085768 7F050BF8 00001025 */ move $v0, $zero -/* 08576C 7F050BFC 2401001D */ li $at, 29 -.Ljp7F050C00: -/* 085770 7F050C00 1081000D */ beq $a0, $at, .Ljp7F050C38 -/* 085774 7F050C04 2401001C */ li $at, 28 -/* 085778 7F050C08 1081000B */ beq $a0, $at, .Ljp7F050C38 -/* 08577C 7F050C0C 2401001B */ li $at, 27 -/* 085780 7F050C10 10810009 */ beq $a0, $at, .Ljp7F050C38 -/* 085784 7F050C14 24010021 */ li $at, 33 -/* 085788 7F050C18 10810007 */ beq $a0, $at, .Ljp7F050C38 -/* 08578C 7F050C1C 2401002F */ li $at, 47 -/* 085790 7F050C20 10810005 */ beq $a0, $at, .Ljp7F050C38 -/* 085794 7F050C24 24010030 */ li $at, 48 -/* 085798 7F050C28 10810003 */ beq $a0, $at, .Ljp7F050C38 -/* 08579C 7F050C2C 24010022 */ li $at, 34 -/* 0857A0 7F050C30 5481000B */ bnel $a0, $at, .Ljp7F050C60 -/* 0857A4 7F050C34 24010056 */ li $at, 86 -.Ljp7F050C38: -/* 0857A8 7F050C38 86090082 */ lh $t1, 0x82($s0) -/* 0857AC 7F050C3C 05210005 */ bgez $t1, .Ljp7F050C54 -/* 0857B0 7F050C40 00000000 */ nop -/* 0857B4 7F050C44 8CAA0064 */ lw $t2, 0x64($a1) -/* 0857B8 7F050C48 314B0004 */ andi $t3, $t2, 4 -/* 0857BC 7F050C4C 51600004 */ beql $t3, $zero, .Ljp7F050C60 -/* 0857C0 7F050C50 24010056 */ li $at, 86 -.Ljp7F050C54: -/* 0857C4 7F050C54 10000170 */ b .Ljp7F051218 -/* 0857C8 7F050C58 00001025 */ move $v0, $zero -/* 0857CC 7F050C5C 24010056 */ li $at, 86 -.Ljp7F050C60: -/* 0857D0 7F050C60 14810007 */ bne $a0, $at, .Ljp7F050C80 -/* 0857D4 7F050C64 00000000 */ nop -/* 0857D8 7F050C68 8CAC0064 */ lw $t4, 0x64($a1) -/* 0857DC 7F050C6C 318D0080 */ andi $t5, $t4, 0x80 -/* 0857E0 7F050C70 11A00003 */ beqz $t5, .Ljp7F050C80 -/* 0857E4 7F050C74 00000000 */ nop -/* 0857E8 7F050C78 10000167 */ b .Ljp7F051218 -/* 0857EC 7F050C7C 00001025 */ move $v0, $zero -.Ljp7F050C80: -/* 0857F0 7F050C80 0FC232E9 */ jal bondinvHasInvItem -/* 0857F4 7F050C84 00000000 */ nop -/* 0857F8 7F050C88 104000D9 */ beqz $v0, .Ljp7F050FF0 -/* 0857FC 7F050C8C 00000000 */ nop -/* 085800 7F050C90 0FC1A686 */ jal get_ammo_type_for_weapon -/* 085804 7F050C94 82040080 */ lb $a0, 0x80($s0) -/* 085808 7F050C98 104000D5 */ beqz $v0, .Ljp7F050FF0 -/* 08580C 7F050C9C 00000000 */ nop -/* 085810 7F050CA0 0FC1A68F */ jal get_ammo_count_for_weapon -/* 085814 7F050CA4 82040080 */ lb $a0, 0x80($s0) -/* 085818 7F050CA8 82040080 */ lb $a0, 0x80($s0) -/* 08581C 7F050CAC 0FC1A6A7 */ jal get_max_ammo_for_weapon -/* 085820 7F050CB0 AFA20040 */ sw $v0, 0x40($sp) -/* 085824 7F050CB4 8FA30040 */ lw $v1, 0x40($sp) -/* 085828 7F050CB8 0062082A */ slt $at, $v1, $v0 -/* 08582C 7F050CBC 142000CC */ bnez $at, .Ljp7F050FF0 -/* 085830 7F050CC0 00000000 */ nop -/* 085834 7F050CC4 8E020084 */ lw $v0, 0x84($s0) -/* 085838 7F050CC8 14400004 */ bnez $v0, .Ljp7F050CDC -/* 08583C 7F050CCC 00000000 */ nop -/* 085840 7F050CD0 820E0081 */ lb $t6, 0x81($s0) -/* 085844 7F050CD4 05C00015 */ bltz $t6, .Ljp7F050D2C -/* 085848 7F050CD8 00000000 */ nop -.Ljp7F050CDC: -/* 08584C 7F050CDC 50400005 */ beql $v0, $zero, .Ljp7F050CF4 -/* 085850 7F050CE0 82050081 */ lb $a1, 0x81($s0) -/* 085854 7F050CE4 80450080 */ lb $a1, 0x80($v0) -/* 085858 7F050CE8 10000003 */ b .Ljp7F050CF8 -/* 08585C 7F050CEC 00A02025 */ move $a0, $a1 -/* 085860 7F050CF0 82050081 */ lb $a1, 0x81($s0) -.Ljp7F050CF4: -/* 085864 7F050CF4 00A02025 */ move $a0, $a1 -.Ljp7F050CF8: -/* 085868 7F050CF8 8E0F0008 */ lw $t7, 8($s0) -/* 08586C 7F050CFC 000FC0C0 */ sll $t8, $t7, 3 -/* 085870 7F050D00 07030004 */ bgezl $t8, .Ljp7F050D14 -/* 085874 7F050D04 82040080 */ lb $a0, 0x80($s0) -/* 085878 7F050D08 10000002 */ b .Ljp7F050D14 -/* 08587C 7F050D0C 82050080 */ lb $a1, 0x80($s0) -/* 085880 7F050D10 82040080 */ lb $a0, 0x80($s0) -.Ljp7F050D14: -/* 085884 7F050D14 0FC2330B */ jal bondinvHasDualWeapon -/* 085888 7F050D18 00000000 */ nop -/* 08588C 7F050D1C 104000B4 */ beqz $v0, .Ljp7F050FF0 -/* 085890 7F050D20 00000000 */ nop -/* 085894 7F050D24 1000013C */ b .Ljp7F051218 -/* 085898 7F050D28 00001025 */ move $v0, $zero -.Ljp7F050D2C: -/* 08589C 7F050D2C 1000013A */ b .Ljp7F051218 -/* 0858A0 7F050D30 00001025 */ move $v0, $zero -/* 0858A4 7F050D34 24010007 */ li $at, 7 -.Ljp7F050D38: -/* 0858A8 7F050D38 14410035 */ bne $v0, $at, .Ljp7F050E10 -/* 0858AC 7F050D3C 8FB90090 */ lw $t9, 0x90($sp) -/* 0858B0 7F050D40 8F300004 */ lw $s0, 4($t9) -/* 0858B4 7F050D44 0FC1A60B */ jal check_cur_player_ammo_amount_in_inventory -/* 0858B8 7F050D48 8E040080 */ lw $a0, 0x80($s0) -/* 0858BC 7F050D4C 8E040080 */ lw $a0, 0x80($s0) -/* 0858C0 7F050D50 0FC1A630 */ jal get_max_ammo_for_type -/* 0858C4 7F050D54 AFA20040 */ sw $v0, 0x40($sp) -/* 0858C8 7F050D58 8FA30040 */ lw $v1, 0x40($sp) -/* 0858CC 7F050D5C 0062082A */ slt $at, $v1, $v0 -/* 0858D0 7F050D60 142000A3 */ bnez $at, .Ljp7F050FF0 -/* 0858D4 7F050D64 00000000 */ nop -/* 0858D8 7F050D68 8E020080 */ lw $v0, 0x80($s0) -/* 0858DC 7F050D6C 24010005 */ li $at, 5 -/* 0858E0 7F050D70 54410007 */ bnel $v0, $at, .Ljp7F050D90 -/* 0858E4 7F050D74 24010007 */ li $at, 7 -/* 0858E8 7F050D78 0FC232E9 */ jal bondinvHasInvItem -/* 0858EC 7F050D7C 2404001A */ li $a0, 26 -/* 0858F0 7F050D80 1040009B */ beqz $v0, .Ljp7F050FF0 -/* 0858F4 7F050D84 00000000 */ nop -/* 0858F8 7F050D88 8E020080 */ lw $v0, 0x80($s0) -/* 0858FC 7F050D8C 24010007 */ li $at, 7 -.Ljp7F050D90: -/* 085900 7F050D90 54410007 */ bnel $v0, $at, .Ljp7F050DB0 -/* 085904 7F050D94 24010008 */ li $at, 8 -/* 085908 7F050D98 0FC232E9 */ jal bondinvHasInvItem -/* 08590C 7F050D9C 2404001D */ li $a0, 29 -/* 085910 7F050DA0 10400093 */ beqz $v0, .Ljp7F050FF0 -/* 085914 7F050DA4 00000000 */ nop -/* 085918 7F050DA8 8E020080 */ lw $v0, 0x80($s0) -/* 08591C 7F050DAC 24010008 */ li $at, 8 -.Ljp7F050DB0: -/* 085920 7F050DB0 54410007 */ bnel $v0, $at, .Ljp7F050DD0 -/* 085924 7F050DB4 24010009 */ li $at, 9 -/* 085928 7F050DB8 0FC232E9 */ jal bondinvHasInvItem -/* 08592C 7F050DBC 2404001C */ li $a0, 28 -/* 085930 7F050DC0 1040008B */ beqz $v0, .Ljp7F050FF0 -/* 085934 7F050DC4 00000000 */ nop -/* 085938 7F050DC8 8E020080 */ lw $v0, 0x80($s0) -/* 08593C 7F050DCC 24010009 */ li $at, 9 -.Ljp7F050DD0: -/* 085940 7F050DD0 54410007 */ bnel $v0, $at, .Ljp7F050DF0 -/* 085944 7F050DD4 2401000A */ li $at, 10 -/* 085948 7F050DD8 0FC232E9 */ jal bondinvHasInvItem -/* 08594C 7F050DDC 2404001B */ li $a0, 27 -/* 085950 7F050DE0 10400083 */ beqz $v0, .Ljp7F050FF0 -/* 085954 7F050DE4 00000000 */ nop -/* 085958 7F050DE8 8E020080 */ lw $v0, 0x80($s0) -/* 08595C 7F050DEC 2401000A */ li $at, 10 -.Ljp7F050DF0: -/* 085960 7F050DF0 14410005 */ bne $v0, $at, .Ljp7F050E08 -/* 085964 7F050DF4 00000000 */ nop -/* 085968 7F050DF8 0FC232E9 */ jal bondinvHasInvItem -/* 08596C 7F050DFC 24040003 */ li $a0, 3 -/* 085970 7F050E00 1040007B */ beqz $v0, .Ljp7F050FF0 -/* 085974 7F050E04 00000000 */ nop -.Ljp7F050E08: -/* 085978 7F050E08 10000103 */ b .Ljp7F051218 -/* 08597C 7F050E0C 00001025 */ move $v0, $zero -.Ljp7F050E10: -/* 085980 7F050E10 24010014 */ li $at, 20 -/* 085984 7F050E14 1441004B */ bne $v0, $at, .Ljp7F050F44 -/* 085988 7F050E18 8FA90090 */ lw $t1, 0x90($sp) -/* 08598C 7F050E1C 8D300004 */ lw $s0, 4($t1) -/* 085990 7F050E20 240A0001 */ li $t2, 1 -/* 085994 7F050E24 AFAA0074 */ sw $t2, 0x74($sp) -/* 085998 7F050E28 0FC100B0 */ jal objGetDestroyedLevel -/* 08599C 7F050E2C 00A02025 */ move $a0, $a1 -/* 0859A0 7F050E30 10400003 */ beqz $v0, .Ljp7F050E40 -/* 0859A4 7F050E34 02001825 */ move $v1, $s0 -/* 0859A8 7F050E38 100000F7 */ b .Ljp7F051218 -/* 0859AC 7F050E3C 00001025 */ move $v0, $zero -.Ljp7F050E40: -/* 0859B0 7F050E40 00001025 */ move $v0, $zero -.Ljp7F050E44: -/* 0859B4 7F050E44 24500001 */ addiu $s0, $v0, 1 -/* 0859B8 7F050E48 24010001 */ li $at, 1 -/* 0859BC 7F050E4C 14410002 */ bne $v0, $at, .Ljp7F050E58 -/* 0859C0 7F050E50 AFB0003C */ sw $s0, 0x3c($sp) -/* 0859C4 7F050E54 24100001 */ li $s0, 1 -.Ljp7F050E58: -/* 0859C8 7F050E58 AFA30038 */ sw $v1, 0x38($sp) -/* 0859CC 7F050E5C 946C0082 */ lhu $t4, 0x82($v1) -/* 0859D0 7F050E60 02002025 */ move $a0, $s0 -/* 0859D4 7F050E64 5980002E */ blezl $t4, .Ljp7F050F20 -/* 0859D8 7F050E68 8FA2003C */ lw $v0, 0x3c($sp) -/* 0859DC 7F050E6C 0FC1A60B */ jal check_cur_player_ammo_amount_in_inventory -/* 0859E0 7F050E70 AFA30038 */ sw $v1, 0x38($sp) -/* 0859E4 7F050E74 02002025 */ move $a0, $s0 -/* 0859E8 7F050E78 0FC1A630 */ jal get_max_ammo_for_type -/* 0859EC 7F050E7C AFA20040 */ sw $v0, 0x40($sp) -/* 0859F0 7F050E80 8FA30040 */ lw $v1, 0x40($sp) -/* 0859F4 7F050E84 0062082A */ slt $at, $v1, $v0 -/* 0859F8 7F050E88 50200004 */ beql $at, $zero, .Ljp7F050E9C -/* 0859FC 7F050E8C 24010005 */ li $at, 5 -/* 085A00 7F050E90 10000027 */ b .Ljp7F050F30 -/* 085A04 7F050E94 AFA00074 */ sw $zero, 0x74($sp) -/* 085A08 7F050E98 24010005 */ li $at, 5 -.Ljp7F050E9C: -/* 085A0C 7F050E9C 56010005 */ bnel $s0, $at, .Ljp7F050EB4 -/* 085A10 7F050EA0 24010007 */ li $at, 7 -/* 085A14 7F050EA4 0FC232E9 */ jal bondinvHasInvItem -/* 085A18 7F050EA8 2404001A */ li $a0, 26 -/* 085A1C 7F050EAC 10400019 */ beqz $v0, .Ljp7F050F14 -/* 085A20 7F050EB0 24010007 */ li $at, 7 -.Ljp7F050EB4: -/* 085A24 7F050EB4 56010005 */ bnel $s0, $at, .Ljp7F050ECC -/* 085A28 7F050EB8 24010008 */ li $at, 8 -/* 085A2C 7F050EBC 0FC232E9 */ jal bondinvHasInvItem -/* 085A30 7F050EC0 2404001D */ li $a0, 29 -/* 085A34 7F050EC4 10400013 */ beqz $v0, .Ljp7F050F14 -/* 085A38 7F050EC8 24010008 */ li $at, 8 -.Ljp7F050ECC: -/* 085A3C 7F050ECC 56010005 */ bnel $s0, $at, .Ljp7F050EE4 -/* 085A40 7F050ED0 24010009 */ li $at, 9 -/* 085A44 7F050ED4 0FC232E9 */ jal bondinvHasInvItem -/* 085A48 7F050ED8 2404001C */ li $a0, 28 -/* 085A4C 7F050EDC 1040000D */ beqz $v0, .Ljp7F050F14 -/* 085A50 7F050EE0 24010009 */ li $at, 9 -.Ljp7F050EE4: -/* 085A54 7F050EE4 56010005 */ bnel $s0, $at, .Ljp7F050EFC -/* 085A58 7F050EE8 2401000A */ li $at, 10 -/* 085A5C 7F050EEC 0FC232E9 */ jal bondinvHasInvItem -/* 085A60 7F050EF0 2404001B */ li $a0, 27 -/* 085A64 7F050EF4 10400007 */ beqz $v0, .Ljp7F050F14 -/* 085A68 7F050EF8 2401000A */ li $at, 10 -.Ljp7F050EFC: -/* 085A6C 7F050EFC 56010008 */ bnel $s0, $at, .Ljp7F050F20 -/* 085A70 7F050F00 8FA2003C */ lw $v0, 0x3c($sp) -/* 085A74 7F050F04 0FC232E9 */ jal bondinvHasInvItem -/* 085A78 7F050F08 24040003 */ li $a0, 3 -/* 085A7C 7F050F0C 54400004 */ bnezl $v0, .Ljp7F050F20 -/* 085A80 7F050F10 8FA2003C */ lw $v0, 0x3c($sp) -.Ljp7F050F14: -/* 085A84 7F050F14 10000006 */ b .Ljp7F050F30 -/* 085A88 7F050F18 AFA00074 */ sw $zero, 0x74($sp) -/* 085A8C 7F050F1C 8FA2003C */ lw $v0, 0x3c($sp) -.Ljp7F050F20: -/* 085A90 7F050F20 8FA30038 */ lw $v1, 0x38($sp) -/* 085A94 7F050F24 2401000D */ li $at, 13 -/* 085A98 7F050F28 1441FFC6 */ bne $v0, $at, .Ljp7F050E44 -/* 085A9C 7F050F2C 24630004 */ addiu $v1, $v1, 4 -.Ljp7F050F30: -/* 085AA0 7F050F30 8FAD0074 */ lw $t5, 0x74($sp) -/* 085AA4 7F050F34 11A0002E */ beqz $t5, .Ljp7F050FF0 -/* 085AA8 7F050F38 00000000 */ nop -/* 085AAC 7F050F3C 100000B6 */ b .Ljp7F051218 -/* 085AB0 7F050F40 00001025 */ move $v0, $zero -.Ljp7F050F44: -/* 085AB4 7F050F44 24010015 */ li $at, 21 -/* 085AB8 7F050F48 14410029 */ bne $v0, $at, .Ljp7F050FF0 -/* 085ABC 7F050F4C 8FAE0090 */ lw $t6, 0x90($sp) -/* 085AC0 7F050F50 8DD00004 */ lw $s0, 4($t6) -/* 085AC4 7F050F54 0FC22A8D */ jal get_BONDdata_watch_armor -/* 085AC8 7F050F58 AFA00064 */ sw $zero, 0x64($sp) -/* 085ACC 7F050F5C C6040084 */ lwc1 $f4, 0x84($s0) -/* 085AD0 7F050F60 240F0001 */ li $t7, 1 -/* 085AD4 7F050F64 4600203E */ c.le.s $f4, $f0 -/* 085AD8 7F050F68 00000000 */ nop -/* 085ADC 7F050F6C 45000003 */ bc1f .Ljp7F050F7C -/* 085AE0 7F050F70 00000000 */ nop -/* 085AE4 7F050F74 10000019 */ b .Ljp7F050FDC -/* 085AE8 7F050F78 AFAF0064 */ sw $t7, 0x64($sp) -.Ljp7F050F7C: -/* 085AEC 7F050F7C 0FC26C01 */ jal getPlayerCount -/* 085AF0 7F050F80 00000000 */ nop -/* 085AF4 7F050F84 28410002 */ slti $at, $v0, 2 -/* 085AF8 7F050F88 54200015 */ bnezl $at, .Ljp7F050FE0 -/* 085AFC 7F050F8C 8FA90064 */ lw $t1, 0x64($sp) -/* 085B00 7F050F90 0FC05202 */ jal get_scenario -/* 085B04 7F050F94 00000000 */ nop -/* 085B08 7F050F98 24010002 */ li $at, 2 -/* 085B0C 7F050F9C 14410007 */ bne $v0, $at, .Ljp7F050FBC -/* 085B10 7F050FA0 00408025 */ move $s0, $v0 -/* 085B14 7F050FA4 0FC23639 */ jal bondinvIsAliveWithFlag -/* 085B18 7F050FA8 00000000 */ nop -/* 085B1C 7F050FAC 10400003 */ beqz $v0, .Ljp7F050FBC -/* 085B20 7F050FB0 24180001 */ li $t8, 1 -/* 085B24 7F050FB4 10000009 */ b .Ljp7F050FDC -/* 085B28 7F050FB8 AFB80064 */ sw $t8, 0x64($sp) -.Ljp7F050FBC: -/* 085B2C 7F050FBC 24010003 */ li $at, 3 -/* 085B30 7F050FC0 56010007 */ bnel $s0, $at, .Ljp7F050FE0 -/* 085B34 7F050FC4 8FA90064 */ lw $t1, 0x64($sp) -/* 085B38 7F050FC8 0FC23649 */ jal bondinvHasGoldenGun -/* 085B3C 7F050FCC 00000000 */ nop -/* 085B40 7F050FD0 10400002 */ beqz $v0, .Ljp7F050FDC -/* 085B44 7F050FD4 24190001 */ li $t9, 1 -/* 085B48 7F050FD8 AFB90064 */ sw $t9, 0x64($sp) -.Ljp7F050FDC: -/* 085B4C 7F050FDC 8FA90064 */ lw $t1, 0x64($sp) -.Ljp7F050FE0: -/* 085B50 7F050FE0 11200003 */ beqz $t1, .Ljp7F050FF0 -/* 085B54 7F050FE4 00000000 */ nop -/* 085B58 7F050FE8 1000008B */ b .Ljp7F051218 -/* 085B5C 7F050FEC 00001025 */ move $v0, $zero -.Ljp7F050FF0: -/* 085B60 7F050FF0 0FC22992 */ jal get_curplay_vertical_rotation_in_degrees -/* 085B64 7F050FF4 00000000 */ nop -/* 085B68 7F050FF8 3C018005 */ lui $at, %hi(D_800532E0) # $at, 0x8005 -/* 085B6C 7F050FFC C4263310 */ lwc1 $f6, %lo(D_800532E0)($at) -/* 085B70 7F051000 3C0A8008 */ lui $t2, %hi(g_CurrentPlayer) # $t2, 0x8008 -/* 085B74 7F051004 4606003C */ c.lt.s $f0, $f6 -/* 085B78 7F051008 00000000 */ nop -/* 085B7C 7F05100C 45000007 */ bc1f .Ljp7F05102C -/* 085B80 7F051010 00000000 */ nop -/* 085B84 7F051014 8D4AA120 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 085B88 7F051018 8D4B1270 */ lw $t3, 0x1270($t2) -/* 085B8C 7F05101C 05610003 */ bgez $t3, .Ljp7F05102C -/* 085B90 7F051020 00000000 */ nop -/* 085B94 7F051024 1000007C */ b .Ljp7F051218 -/* 085B98 7F051028 00001025 */ move $v0, $zero -.Ljp7F05102C: -/* 085B9C 7F05102C 0FC2279B */ jal get_curplayer_positiondata -/* 085BA0 7F051030 00000000 */ nop -/* 085BA4 7F051034 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) # $t5, 0x8008 -/* 085BA8 7F051038 8FAC008C */ lw $t4, 0x8c($sp) -/* 085BAC 7F05103C 8DADA120 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 085BB0 7F051040 C44A0008 */ lwc1 $f10, 8($v0) -/* 085BB4 7F051044 C452000C */ lwc1 $f18, 0xc($v0) -/* 085BB8 7F051048 8DAE1270 */ lw $t6, 0x1270($t5) -/* 085BBC 7F05104C C4460010 */ lwc1 $f6, 0x10($v0) -/* 085BC0 7F051050 C5880058 */ lwc1 $f8, 0x58($t4) -/* 085BC4 7F051054 C590005C */ lwc1 $f16, 0x5c($t4) -/* 085BC8 7F051058 C5840060 */ lwc1 $f4, 0x60($t4) -/* 085BCC 7F05105C 29C1003C */ slti $at, $t6, 0x3c -/* 085BD0 7F051060 00404025 */ move $t0, $v0 -/* 085BD4 7F051064 460A4001 */ sub.s $f0, $f8, $f10 -/* 085BD8 7F051068 46128301 */ sub.s $f12, $f16, $f18 -/* 085BDC 7F05106C 14200022 */ bnez $at, .Ljp7F0510F8 -/* 085BE0 7F051070 46062081 */ sub.s $f2, $f4, $f6 -/* 085BE4 7F051074 46000202 */ mul.s $f8, $f0, $f0 -/* 085BE8 7F051078 3C018005 */ lui $at, %hi(D_800532E4) # $at, 0x8005 -/* 085BEC 7F05107C C4323314 */ lwc1 $f18, %lo(D_800532E4)($at) -/* 085BF0 7F051080 46021282 */ mul.s $f10, $f2, $f2 -/* 085BF4 7F051084 3C01C3FA */ li $at, 0xC3FA0000 # -500.000000 -/* 085BF8 7F051088 00001025 */ move $v0, $zero -/* 085BFC 7F05108C 460A4400 */ add.s $f16, $f8, $f10 -/* 085C00 7F051090 4612803E */ c.le.s $f16, $f18 -/* 085C04 7F051094 00000000 */ nop -/* 085C08 7F051098 45000002 */ bc1f .Ljp7F0510A4 -/* 085C0C 7F05109C 00000000 */ nop -/* 085C10 7F0510A0 24020001 */ li $v0, 1 -.Ljp7F0510A4: -/* 085C14 7F0510A4 10400012 */ beqz $v0, .Ljp7F0510F0 -/* 085C18 7F0510A8 00401825 */ move $v1, $v0 -/* 085C1C 7F0510AC 44812000 */ mtc1 $at, $f4 -/* 085C20 7F0510B0 3C0143FA */ li $at, 0x43FA0000 # 500.000000 -/* 085C24 7F0510B4 00001025 */ move $v0, $zero -/* 085C28 7F0510B8 460C203E */ c.le.s $f4, $f12 -/* 085C2C 7F0510BC 00000000 */ nop -/* 085C30 7F0510C0 45000002 */ bc1f .Ljp7F0510CC -/* 085C34 7F0510C4 00000000 */ nop -/* 085C38 7F0510C8 24020001 */ li $v0, 1 -.Ljp7F0510CC: -/* 085C3C 7F0510CC 10400008 */ beqz $v0, .Ljp7F0510F0 -/* 085C40 7F0510D0 00401825 */ move $v1, $v0 -/* 085C44 7F0510D4 44813000 */ mtc1 $at, $f6 -/* 085C48 7F0510D8 00001825 */ move $v1, $zero -/* 085C4C 7F0510DC 4606603E */ c.le.s $f12, $f6 -/* 085C50 7F0510E0 00000000 */ nop -/* 085C54 7F0510E4 45000002 */ bc1f .Ljp7F0510F0 -/* 085C58 7F0510E8 00000000 */ nop -/* 085C5C 7F0510EC 24030001 */ li $v1, 1 -.Ljp7F0510F0: -/* 085C60 7F0510F0 10000021 */ b .Ljp7F051178 -/* 085C64 7F0510F4 00608025 */ move $s0, $v1 -.Ljp7F0510F8: -/* 085C68 7F0510F8 46000202 */ mul.s $f8, $f0, $f0 -/* 085C6C 7F0510FC 3C018005 */ lui $at, %hi(D_800532E8) # $at, 0x8005 -/* 085C70 7F051100 C4303318 */ lwc1 $f16, %lo(D_800532E8)($at) -/* 085C74 7F051104 46021282 */ mul.s $f10, $f2, $f2 -/* 085C78 7F051108 3C01C348 */ li $at, 0xC3480000 # -200.000000 -/* 085C7C 7F05110C 00001025 */ move $v0, $zero -/* 085C80 7F051110 460A4480 */ add.s $f18, $f8, $f10 -/* 085C84 7F051114 4610903E */ c.le.s $f18, $f16 -/* 085C88 7F051118 00000000 */ nop -/* 085C8C 7F05111C 45000002 */ bc1f .Ljp7F051128 -/* 085C90 7F051120 00000000 */ nop -/* 085C94 7F051124 24020001 */ li $v0, 1 -.Ljp7F051128: -/* 085C98 7F051128 10400012 */ beqz $v0, .Ljp7F051174 -/* 085C9C 7F05112C 00401825 */ move $v1, $v0 -/* 085CA0 7F051130 44812000 */ mtc1 $at, $f4 -/* 085CA4 7F051134 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 085CA8 7F051138 00001025 */ move $v0, $zero -/* 085CAC 7F05113C 460C203E */ c.le.s $f4, $f12 -/* 085CB0 7F051140 00000000 */ nop -/* 085CB4 7F051144 45000002 */ bc1f .Ljp7F051150 -/* 085CB8 7F051148 00000000 */ nop -/* 085CBC 7F05114C 24020001 */ li $v0, 1 -.Ljp7F051150: -/* 085CC0 7F051150 10400008 */ beqz $v0, .Ljp7F051174 -/* 085CC4 7F051154 00401825 */ move $v1, $v0 -/* 085CC8 7F051158 44813000 */ mtc1 $at, $f6 -/* 085CCC 7F05115C 00001825 */ move $v1, $zero -/* 085CD0 7F051160 4606603E */ c.le.s $f12, $f6 -/* 085CD4 7F051164 00000000 */ nop -/* 085CD8 7F051168 45020003 */ bc1fl .Ljp7F051178 -/* 085CDC 7F05116C 00608025 */ move $s0, $v1 -/* 085CE0 7F051170 24030001 */ li $v1, 1 -.Ljp7F051174: -/* 085CE4 7F051174 00608025 */ move $s0, $v1 -.Ljp7F051178: -/* 085CE8 7F051178 10600020 */ beqz $v1, .Ljp7F0511FC -/* 085CEC 7F05117C 8FAF008C */ lw $t7, 0x8c($sp) -/* 085CF0 7F051180 8DF8000C */ lw $t8, 0xc($t7) -/* 085CF4 7F051184 8FA20090 */ lw $v0, 0x90($sp) -/* 085CF8 7F051188 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 085CFC 7F05118C 33191000 */ andi $t9, $t8, 0x1000 -/* 085D00 7F051190 1720001A */ bnez $t9, .Ljp7F0511FC -/* 085D04 7F051194 27A40044 */ addiu $a0, $sp, 0x44 -/* 085D08 7F051198 8D090014 */ lw $t1, 0x14($t0) -/* 085D0C 7F05119C 44810000 */ mtc1 $at, $f0 -/* 085D10 7F0511A0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 085D14 7F0511A4 AFA90044 */ sw $t1, 0x44($sp) -/* 085D18 7F0511A8 C4480010 */ lwc1 $f8, 0x10($v0) -/* 085D1C 7F0511AC 8C470008 */ lw $a3, 8($v0) -/* 085D20 7F0511B0 8D060010 */ lw $a2, 0x10($t0) -/* 085D24 7F0511B4 8D050008 */ lw $a1, 8($t0) -/* 085D28 7F0511B8 44818000 */ mtc1 $at, $f16 -/* 085D2C 7F0511BC 44805000 */ mtc1 $zero, $f10 -/* 085D30 7F0511C0 240A0002 */ li $t2, 2 -/* 085D34 7F0511C4 AFAA0014 */ sw $t2, 0x14($sp) -/* 085D38 7F0511C8 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 085D3C 7F0511CC E7A00018 */ swc1 $f0, 0x18($sp) -/* 085D40 7F0511D0 E7A80010 */ swc1 $f8, 0x10($sp) -/* 085D44 7F0511D4 E7B00024 */ swc1 $f16, 0x24($sp) -/* 085D48 7F0511D8 0FC2C675 */ jal stanTestLineUnobstructed -/* 085D4C 7F0511DC E7AA0020 */ swc1 $f10, 0x20($sp) -/* 085D50 7F0511E0 10400005 */ beqz $v0, .Ljp7F0511F8 -/* 085D54 7F0511E4 8FAC0090 */ lw $t4, 0x90($sp) -/* 085D58 7F0511E8 8FAB0044 */ lw $t3, 0x44($sp) -/* 085D5C 7F0511EC 8D8D0014 */ lw $t5, 0x14($t4) -/* 085D60 7F0511F0 116D0002 */ beq $t3, $t5, .Ljp7F0511FC -/* 085D64 7F0511F4 00000000 */ nop -.Ljp7F0511F8: -/* 085D68 7F0511F8 00008025 */ move $s0, $zero -.Ljp7F0511FC: -/* 085D6C 7F0511FC 12000006 */ beqz $s0, .Ljp7F051218 -/* 085D70 7F051200 00001025 */ move $v0, $zero -/* 085D74 7F051204 8FA40090 */ lw $a0, 0x90($sp) -/* 085D78 7F051208 0FC14195 */ jal collect_or_interact_object -/* 085D7C 7F05120C 24050001 */ li $a1, 1 -/* 085D80 7F051210 10000002 */ b .Ljp7F05121C -/* 085D84 7F051214 8FBF0034 */ lw $ra, 0x34($sp) -.Ljp7F051218: -/* 085D88 7F051218 8FBF0034 */ lw $ra, 0x34($sp) -.Ljp7F05121C: -/* 085D8C 7F05121C 8FB00030 */ lw $s0, 0x30($sp) -/* 085D90 7F051220 27BD0090 */ addiu $sp, $sp, 0x90 -/* 085D94 7F051224 03E00008 */ jr $ra -/* 085D98 7F051228 00000000 */ nop -) -#endif - -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_800532E0 -.word 0xbf490fdb /*-0.78539819*/ -glabel D_800532E4 -.word 0x47ef4200 /*122500.0*/ -glabel D_800532E8 -.word 0x461c4000 /*10000.0*/ -.text -glabel object_collectability_routines -/* 085650 7F050AE0 27BDFF70 */ addiu $sp, $sp, -0x90 -/* 085654 7F050AE4 AFBF0034 */ sw $ra, 0x34($sp) -/* 085658 7F050AE8 AFB00030 */ sw $s0, 0x30($sp) -/* 08565C 7F050AEC AFA40090 */ sw $a0, 0x90($sp) -/* 085660 7F050AF0 8C840004 */ lw $a0, 4($a0) -/* 085664 7F050AF4 0FC13904 */ jal objIsCollectable -/* 085668 7F050AF8 AFA4008C */ sw $a0, 0x8c($sp) -/* 08566C 7F050AFC 1040000B */ beqz $v0, .Ljp7F050B2C -/* 085670 7F050B00 8FA4008C */ lw $a0, 0x8c($sp) -/* 085674 7F050B04 908F0003 */ lbu $t7, 3($a0) -/* 085678 7F050B08 24010011 */ li $at, 17 -/* 08567C 7F050B0C 51E10008 */ beql $t7, $at, .Ljp7F050B30 -/* 085680 7F050B10 8FA4008C */ lw $a0, 0x8c($sp) -/* 085684 7F050B14 8C820008 */ lw $v0, 8($a0) -/* 085688 7F050B18 0002C2C0 */ sll $t8, $v0, 0xb -/* 08568C 7F050B1C 0703000B */ bgezl $t8, .Ljp7F050B4C -/* 085690 7F050B20 00024B00 */ sll $t1, $v0, 0xc -/* 085694 7F050B24 100001BC */ b .Ljp7F051218 -/* 085698 7F050B28 00001025 */ move $v0, $zero -.Ljp7F050B2C: -/* 08569C 7F050B2C 8FA4008C */ lw $a0, 0x8c($sp) -.Ljp7F050B30: -/* 0856A0 7F050B30 8C820008 */ lw $v0, 8($a0) -/* 0856A4 7F050B34 0002CB40 */ sll $t9, $v0, 0xd -/* 0856A8 7F050B38 07220004 */ bltzl $t9, .Ljp7F050B4C -/* 0856AC 7F050B3C 00024B00 */ sll $t1, $v0, 0xc -/* 0856B0 7F050B40 100001B5 */ b .Ljp7F051218 -/* 0856B4 7F050B44 00001025 */ move $v0, $zero -/* 0856B8 7F050B48 00024B00 */ sll $t1, $v0, 0xc -.Ljp7F050B4C: -/* 0856BC 7F050B4C 05230004 */ bgezl $t1, .Ljp7F050B60 -/* 0856C0 7F050B50 8C8A0064 */ lw $t2, 0x64($a0) -/* 0856C4 7F050B54 100001B0 */ b .Ljp7F051218 -/* 0856C8 7F050B58 00001025 */ move $v0, $zero -/* 0856CC 7F050B5C 8C8A0064 */ lw $t2, 0x64($a0) -.Ljp7F050B60: -/* 0856D0 7F050B60 314B0080 */ andi $t3, $t2, 0x80 -/* 0856D4 7F050B64 1160000A */ beqz $t3, .Ljp7F050B90 -/* 0856D8 7F050B68 00000000 */ nop -/* 0856DC 7F050B6C 8C82006C */ lw $v0, 0x6c($a0) -/* 0856E0 7F050B70 8C4C00BC */ lw $t4, 0xbc($v0) -/* 0856E4 7F050B74 19800006 */ blez $t4, .Ljp7F050B90 -/* 0856E8 7F050B78 00000000 */ nop -/* 0856EC 7F050B7C 8C4D0090 */ lw $t5, 0x90($v0) -/* 0856F0 7F050B80 15A00003 */ bnez $t5, .Ljp7F050B90 -/* 0856F4 7F050B84 00000000 */ nop -/* 0856F8 7F050B88 100001A3 */ b .Ljp7F051218 -/* 0856FC 7F050B8C 00001025 */ move $v0, $zero -.Ljp7F050B90: -/* 085700 7F050B90 0FC0FAAB */ jal objCanPickupFromSafe -/* 085704 7F050B94 00000000 */ nop -/* 085708 7F050B98 14400003 */ bnez $v0, .Ljp7F050BA8 -/* 08570C 7F050B9C 8FA5008C */ lw $a1, 0x8c($sp) -/* 085710 7F050BA0 1000019D */ b .Ljp7F051218 -/* 085714 7F050BA4 00001025 */ move $v0, $zero -.Ljp7F050BA8: -/* 085718 7F050BA8 90A20003 */ lbu $v0, 3($a1) -/* 08571C 7F050BAC 24010008 */ li $at, 8 -/* 085720 7F050BB0 8FAE0090 */ lw $t6, 0x90($sp) -/* 085724 7F050BB4 54410060 */ bnel $v0, $at, .Ljp7F050D38 -/* 085728 7F050BB8 24010007 */ li $at, 7 -/* 08572C 7F050BBC 8DD00004 */ lw $s0, 4($t6) -/* 085730 7F050BC0 2401001A */ li $at, 26 -/* 085734 7F050BC4 82040080 */ lb $a0, 0x80($s0) -/* 085738 7F050BC8 10810003 */ beq $a0, $at, .Ljp7F050BD8 -/* 08573C 7F050BCC 24010057 */ li $at, 87 -/* 085740 7F050BD0 5481000B */ bnel $a0, $at, .Ljp7F050C00 -/* 085744 7F050BD4 2401001D */ li $at, 29 -.Ljp7F050BD8: -/* 085748 7F050BD8 860F0082 */ lh $t7, 0x82($s0) -/* 08574C 7F050BDC 05E10005 */ bgez $t7, .Ljp7F050BF4 -/* 085750 7F050BE0 00000000 */ nop -/* 085754 7F050BE4 8CB80064 */ lw $t8, 0x64($a1) -/* 085758 7F050BE8 33190004 */ andi $t9, $t8, 4 -/* 08575C 7F050BEC 53200004 */ beql $t9, $zero, .Ljp7F050C00 -/* 085760 7F050BF0 2401001D */ li $at, 29 -.Ljp7F050BF4: -/* 085764 7F050BF4 10000188 */ b .Ljp7F051218 -/* 085768 7F050BF8 00001025 */ move $v0, $zero -/* 08576C 7F050BFC 2401001D */ li $at, 29 -.Ljp7F050C00: -/* 085770 7F050C00 1081000D */ beq $a0, $at, .Ljp7F050C38 -/* 085774 7F050C04 2401001C */ li $at, 28 -/* 085778 7F050C08 1081000B */ beq $a0, $at, .Ljp7F050C38 -/* 08577C 7F050C0C 2401001B */ li $at, 27 -/* 085780 7F050C10 10810009 */ beq $a0, $at, .Ljp7F050C38 -/* 085784 7F050C14 24010021 */ li $at, 33 -/* 085788 7F050C18 10810007 */ beq $a0, $at, .Ljp7F050C38 -/* 08578C 7F050C1C 2401002F */ li $at, 47 -/* 085790 7F050C20 10810005 */ beq $a0, $at, .Ljp7F050C38 -/* 085794 7F050C24 24010030 */ li $at, 48 -/* 085798 7F050C28 10810003 */ beq $a0, $at, .Ljp7F050C38 -/* 08579C 7F050C2C 24010022 */ li $at, 34 -/* 0857A0 7F050C30 5481000B */ bnel $a0, $at, .Ljp7F050C60 -/* 0857A4 7F050C34 24010056 */ li $at, 86 -.Ljp7F050C38: -/* 0857A8 7F050C38 86090082 */ lh $t1, 0x82($s0) -/* 0857AC 7F050C3C 05210005 */ bgez $t1, .Ljp7F050C54 -/* 0857B0 7F050C40 00000000 */ nop -/* 0857B4 7F050C44 8CAA0064 */ lw $t2, 0x64($a1) -/* 0857B8 7F050C48 314B0004 */ andi $t3, $t2, 4 -/* 0857BC 7F050C4C 51600004 */ beql $t3, $zero, .Ljp7F050C60 -/* 0857C0 7F050C50 24010056 */ li $at, 86 -.Ljp7F050C54: -/* 0857C4 7F050C54 10000170 */ b .Ljp7F051218 -/* 0857C8 7F050C58 00001025 */ move $v0, $zero -/* 0857CC 7F050C5C 24010056 */ li $at, 86 -.Ljp7F050C60: -/* 0857D0 7F050C60 14810007 */ bne $a0, $at, .Ljp7F050C80 -/* 0857D4 7F050C64 00000000 */ nop -/* 0857D8 7F050C68 8CAC0064 */ lw $t4, 0x64($a1) -/* 0857DC 7F050C6C 318D0080 */ andi $t5, $t4, 0x80 -/* 0857E0 7F050C70 11A00003 */ beqz $t5, .Ljp7F050C80 -/* 0857E4 7F050C74 00000000 */ nop -/* 0857E8 7F050C78 10000167 */ b .Ljp7F051218 -/* 0857EC 7F050C7C 00001025 */ move $v0, $zero -.Ljp7F050C80: -/* 0857F0 7F050C80 0FC232E9 */ jal bondinvHasInvItem -/* 0857F4 7F050C84 00000000 */ nop -/* 0857F8 7F050C88 104000D9 */ beqz $v0, .Ljp7F050FF0 -/* 0857FC 7F050C8C 00000000 */ nop -/* 085800 7F050C90 0FC1A686 */ jal get_ammo_type_for_weapon -/* 085804 7F050C94 82040080 */ lb $a0, 0x80($s0) -/* 085808 7F050C98 104000D5 */ beqz $v0, .Ljp7F050FF0 -/* 08580C 7F050C9C 00000000 */ nop -/* 085810 7F050CA0 0FC1A68F */ jal get_ammo_count_for_weapon -/* 085814 7F050CA4 82040080 */ lb $a0, 0x80($s0) -/* 085818 7F050CA8 82040080 */ lb $a0, 0x80($s0) -/* 08581C 7F050CAC 0FC1A6A7 */ jal get_max_ammo_for_weapon -/* 085820 7F050CB0 AFA20040 */ sw $v0, 0x40($sp) -/* 085824 7F050CB4 8FA30040 */ lw $v1, 0x40($sp) -/* 085828 7F050CB8 0062082A */ slt $at, $v1, $v0 -/* 08582C 7F050CBC 142000CC */ bnez $at, .Ljp7F050FF0 -/* 085830 7F050CC0 00000000 */ nop -/* 085834 7F050CC4 8E020084 */ lw $v0, 0x84($s0) -/* 085838 7F050CC8 14400004 */ bnez $v0, .Ljp7F050CDC -/* 08583C 7F050CCC 00000000 */ nop -/* 085840 7F050CD0 820E0081 */ lb $t6, 0x81($s0) -/* 085844 7F050CD4 05C00015 */ bltz $t6, .Ljp7F050D2C -/* 085848 7F050CD8 00000000 */ nop -.Ljp7F050CDC: -/* 08584C 7F050CDC 50400005 */ beql $v0, $zero, .Ljp7F050CF4 -/* 085850 7F050CE0 82050081 */ lb $a1, 0x81($s0) -/* 085854 7F050CE4 80450080 */ lb $a1, 0x80($v0) -/* 085858 7F050CE8 10000003 */ b .Ljp7F050CF8 -/* 08585C 7F050CEC 00A02025 */ move $a0, $a1 -/* 085860 7F050CF0 82050081 */ lb $a1, 0x81($s0) -.Ljp7F050CF4: -/* 085864 7F050CF4 00A02025 */ move $a0, $a1 -.Ljp7F050CF8: -/* 085868 7F050CF8 8E0F0008 */ lw $t7, 8($s0) -/* 08586C 7F050CFC 000FC0C0 */ sll $t8, $t7, 3 -/* 085870 7F050D00 07030004 */ bgezl $t8, .Ljp7F050D14 -/* 085874 7F050D04 82040080 */ lb $a0, 0x80($s0) -/* 085878 7F050D08 10000002 */ b .Ljp7F050D14 -/* 08587C 7F050D0C 82050080 */ lb $a1, 0x80($s0) -/* 085880 7F050D10 82040080 */ lb $a0, 0x80($s0) -.Ljp7F050D14: -/* 085884 7F050D14 0FC2330B */ jal bondinvHasDualWeapon -/* 085888 7F050D18 00000000 */ nop -/* 08588C 7F050D1C 104000B4 */ beqz $v0, .Ljp7F050FF0 -/* 085890 7F050D20 00000000 */ nop -/* 085894 7F050D24 1000013C */ b .Ljp7F051218 -/* 085898 7F050D28 00001025 */ move $v0, $zero -.Ljp7F050D2C: -/* 08589C 7F050D2C 1000013A */ b .Ljp7F051218 -/* 0858A0 7F050D30 00001025 */ move $v0, $zero -/* 0858A4 7F050D34 24010007 */ li $at, 7 -.Ljp7F050D38: -/* 0858A8 7F050D38 14410035 */ bne $v0, $at, .Ljp7F050E10 -/* 0858AC 7F050D3C 8FB90090 */ lw $t9, 0x90($sp) -/* 0858B0 7F050D40 8F300004 */ lw $s0, 4($t9) -/* 0858B4 7F050D44 0FC1A60B */ jal check_cur_player_ammo_amount_in_inventory -/* 0858B8 7F050D48 8E040080 */ lw $a0, 0x80($s0) -/* 0858BC 7F050D4C 8E040080 */ lw $a0, 0x80($s0) -/* 0858C0 7F050D50 0FC1A630 */ jal get_max_ammo_for_type -/* 0858C4 7F050D54 AFA20040 */ sw $v0, 0x40($sp) -/* 0858C8 7F050D58 8FA30040 */ lw $v1, 0x40($sp) -/* 0858CC 7F050D5C 0062082A */ slt $at, $v1, $v0 -/* 0858D0 7F050D60 142000A3 */ bnez $at, .Ljp7F050FF0 -/* 0858D4 7F050D64 00000000 */ nop -/* 0858D8 7F050D68 8E020080 */ lw $v0, 0x80($s0) -/* 0858DC 7F050D6C 24010005 */ li $at, 5 -/* 0858E0 7F050D70 54410007 */ bnel $v0, $at, .Ljp7F050D90 -/* 0858E4 7F050D74 24010007 */ li $at, 7 -/* 0858E8 7F050D78 0FC232E9 */ jal bondinvHasInvItem -/* 0858EC 7F050D7C 2404001A */ li $a0, 26 -/* 0858F0 7F050D80 1040009B */ beqz $v0, .Ljp7F050FF0 -/* 0858F4 7F050D84 00000000 */ nop -/* 0858F8 7F050D88 8E020080 */ lw $v0, 0x80($s0) -/* 0858FC 7F050D8C 24010007 */ li $at, 7 -.Ljp7F050D90: -/* 085900 7F050D90 54410007 */ bnel $v0, $at, .Ljp7F050DB0 -/* 085904 7F050D94 24010008 */ li $at, 8 -/* 085908 7F050D98 0FC232E9 */ jal bondinvHasInvItem -/* 08590C 7F050D9C 2404001D */ li $a0, 29 -/* 085910 7F050DA0 10400093 */ beqz $v0, .Ljp7F050FF0 -/* 085914 7F050DA4 00000000 */ nop -/* 085918 7F050DA8 8E020080 */ lw $v0, 0x80($s0) -/* 08591C 7F050DAC 24010008 */ li $at, 8 -.Ljp7F050DB0: -/* 085920 7F050DB0 54410007 */ bnel $v0, $at, .Ljp7F050DD0 -/* 085924 7F050DB4 24010009 */ li $at, 9 -/* 085928 7F050DB8 0FC232E9 */ jal bondinvHasInvItem -/* 08592C 7F050DBC 2404001C */ li $a0, 28 -/* 085930 7F050DC0 1040008B */ beqz $v0, .Ljp7F050FF0 -/* 085934 7F050DC4 00000000 */ nop -/* 085938 7F050DC8 8E020080 */ lw $v0, 0x80($s0) -/* 08593C 7F050DCC 24010009 */ li $at, 9 -.Ljp7F050DD0: -/* 085940 7F050DD0 54410007 */ bnel $v0, $at, .Ljp7F050DF0 -/* 085944 7F050DD4 2401000A */ li $at, 10 -/* 085948 7F050DD8 0FC232E9 */ jal bondinvHasInvItem -/* 08594C 7F050DDC 2404001B */ li $a0, 27 -/* 085950 7F050DE0 10400083 */ beqz $v0, .Ljp7F050FF0 -/* 085954 7F050DE4 00000000 */ nop -/* 085958 7F050DE8 8E020080 */ lw $v0, 0x80($s0) -/* 08595C 7F050DEC 2401000A */ li $at, 10 -.Ljp7F050DF0: -/* 085960 7F050DF0 14410005 */ bne $v0, $at, .Ljp7F050E08 -/* 085964 7F050DF4 00000000 */ nop -/* 085968 7F050DF8 0FC232E9 */ jal bondinvHasInvItem -/* 08596C 7F050DFC 24040003 */ li $a0, 3 -/* 085970 7F050E00 1040007B */ beqz $v0, .Ljp7F050FF0 -/* 085974 7F050E04 00000000 */ nop -.Ljp7F050E08: -/* 085978 7F050E08 10000103 */ b .Ljp7F051218 -/* 08597C 7F050E0C 00001025 */ move $v0, $zero -.Ljp7F050E10: -/* 085980 7F050E10 24010014 */ li $at, 20 -/* 085984 7F050E14 1441004B */ bne $v0, $at, .Ljp7F050F44 -/* 085988 7F050E18 8FA90090 */ lw $t1, 0x90($sp) -/* 08598C 7F050E1C 8D300004 */ lw $s0, 4($t1) -/* 085990 7F050E20 240A0001 */ li $t2, 1 -/* 085994 7F050E24 AFAA0074 */ sw $t2, 0x74($sp) -/* 085998 7F050E28 0FC100B0 */ jal objGetDestroyedLevel -/* 08599C 7F050E2C 00A02025 */ move $a0, $a1 -/* 0859A0 7F050E30 10400003 */ beqz $v0, .Ljp7F050E40 -/* 0859A4 7F050E34 02001825 */ move $v1, $s0 -/* 0859A8 7F050E38 100000F7 */ b .Ljp7F051218 -/* 0859AC 7F050E3C 00001025 */ move $v0, $zero -.Ljp7F050E40: -/* 0859B0 7F050E40 00001025 */ move $v0, $zero -.Ljp7F050E44: -/* 0859B4 7F050E44 24500001 */ addiu $s0, $v0, 1 -/* 0859B8 7F050E48 24010001 */ li $at, 1 -/* 0859BC 7F050E4C 14410002 */ bne $v0, $at, .Ljp7F050E58 -/* 0859C0 7F050E50 AFB0003C */ sw $s0, 0x3c($sp) -/* 0859C4 7F050E54 24100001 */ li $s0, 1 -.Ljp7F050E58: -/* 0859C8 7F050E58 AFA30038 */ sw $v1, 0x38($sp) -/* 0859CC 7F050E5C 946C0082 */ lhu $t4, 0x82($v1) -/* 0859D0 7F050E60 02002025 */ move $a0, $s0 -/* 0859D4 7F050E64 5980002E */ blezl $t4, .Ljp7F050F20 -/* 0859D8 7F050E68 8FA2003C */ lw $v0, 0x3c($sp) -/* 0859DC 7F050E6C 0FC1A60B */ jal check_cur_player_ammo_amount_in_inventory -/* 0859E0 7F050E70 AFA30038 */ sw $v1, 0x38($sp) -/* 0859E4 7F050E74 02002025 */ move $a0, $s0 -/* 0859E8 7F050E78 0FC1A630 */ jal get_max_ammo_for_type -/* 0859EC 7F050E7C AFA20040 */ sw $v0, 0x40($sp) -/* 0859F0 7F050E80 8FA30040 */ lw $v1, 0x40($sp) -/* 0859F4 7F050E84 0062082A */ slt $at, $v1, $v0 -/* 0859F8 7F050E88 50200004 */ beql $at, $zero, .Ljp7F050E9C -/* 0859FC 7F050E8C 24010005 */ li $at, 5 -/* 085A00 7F050E90 10000027 */ b .Ljp7F050F30 -/* 085A04 7F050E94 AFA00074 */ sw $zero, 0x74($sp) -/* 085A08 7F050E98 24010005 */ li $at, 5 -.Ljp7F050E9C: -/* 085A0C 7F050E9C 56010005 */ bnel $s0, $at, .Ljp7F050EB4 -/* 085A10 7F050EA0 24010007 */ li $at, 7 -/* 085A14 7F050EA4 0FC232E9 */ jal bondinvHasInvItem -/* 085A18 7F050EA8 2404001A */ li $a0, 26 -/* 085A1C 7F050EAC 10400019 */ beqz $v0, .Ljp7F050F14 -/* 085A20 7F050EB0 24010007 */ li $at, 7 -.Ljp7F050EB4: -/* 085A24 7F050EB4 56010005 */ bnel $s0, $at, .Ljp7F050ECC -/* 085A28 7F050EB8 24010008 */ li $at, 8 -/* 085A2C 7F050EBC 0FC232E9 */ jal bondinvHasInvItem -/* 085A30 7F050EC0 2404001D */ li $a0, 29 -/* 085A34 7F050EC4 10400013 */ beqz $v0, .Ljp7F050F14 -/* 085A38 7F050EC8 24010008 */ li $at, 8 -.Ljp7F050ECC: -/* 085A3C 7F050ECC 56010005 */ bnel $s0, $at, .Ljp7F050EE4 -/* 085A40 7F050ED0 24010009 */ li $at, 9 -/* 085A44 7F050ED4 0FC232E9 */ jal bondinvHasInvItem -/* 085A48 7F050ED8 2404001C */ li $a0, 28 -/* 085A4C 7F050EDC 1040000D */ beqz $v0, .Ljp7F050F14 -/* 085A50 7F050EE0 24010009 */ li $at, 9 -.Ljp7F050EE4: -/* 085A54 7F050EE4 56010005 */ bnel $s0, $at, .Ljp7F050EFC -/* 085A58 7F050EE8 2401000A */ li $at, 10 -/* 085A5C 7F050EEC 0FC232E9 */ jal bondinvHasInvItem -/* 085A60 7F050EF0 2404001B */ li $a0, 27 -/* 085A64 7F050EF4 10400007 */ beqz $v0, .Ljp7F050F14 -/* 085A68 7F050EF8 2401000A */ li $at, 10 -.Ljp7F050EFC: -/* 085A6C 7F050EFC 56010008 */ bnel $s0, $at, .Ljp7F050F20 -/* 085A70 7F050F00 8FA2003C */ lw $v0, 0x3c($sp) -/* 085A74 7F050F04 0FC232E9 */ jal bondinvHasInvItem -/* 085A78 7F050F08 24040003 */ li $a0, 3 -/* 085A7C 7F050F0C 54400004 */ bnezl $v0, .Ljp7F050F20 -/* 085A80 7F050F10 8FA2003C */ lw $v0, 0x3c($sp) -.Ljp7F050F14: -/* 085A84 7F050F14 10000006 */ b .Ljp7F050F30 -/* 085A88 7F050F18 AFA00074 */ sw $zero, 0x74($sp) -/* 085A8C 7F050F1C 8FA2003C */ lw $v0, 0x3c($sp) -.Ljp7F050F20: -/* 085A90 7F050F20 8FA30038 */ lw $v1, 0x38($sp) -/* 085A94 7F050F24 2401000D */ li $at, 13 -/* 085A98 7F050F28 1441FFC6 */ bne $v0, $at, .Ljp7F050E44 -/* 085A9C 7F050F2C 24630004 */ addiu $v1, $v1, 4 -.Ljp7F050F30: -/* 085AA0 7F050F30 8FAD0074 */ lw $t5, 0x74($sp) -/* 085AA4 7F050F34 11A0002E */ beqz $t5, .Ljp7F050FF0 -/* 085AA8 7F050F38 00000000 */ nop -/* 085AAC 7F050F3C 100000B6 */ b .Ljp7F051218 -/* 085AB0 7F050F40 00001025 */ move $v0, $zero -.Ljp7F050F44: -/* 085AB4 7F050F44 24010015 */ li $at, 21 -/* 085AB8 7F050F48 14410029 */ bne $v0, $at, .Ljp7F050FF0 -/* 085ABC 7F050F4C 8FAE0090 */ lw $t6, 0x90($sp) -/* 085AC0 7F050F50 8DD00004 */ lw $s0, 4($t6) -/* 085AC4 7F050F54 0FC22A8D */ jal get_BONDdata_watch_armor -/* 085AC8 7F050F58 AFA00064 */ sw $zero, 0x64($sp) -/* 085ACC 7F050F5C C6040084 */ lwc1 $f4, 0x84($s0) -/* 085AD0 7F050F60 240F0001 */ li $t7, 1 -/* 085AD4 7F050F64 4600203E */ c.le.s $f4, $f0 -/* 085AD8 7F050F68 00000000 */ nop -/* 085ADC 7F050F6C 45000003 */ bc1f .Ljp7F050F7C -/* 085AE0 7F050F70 00000000 */ nop -/* 085AE4 7F050F74 10000019 */ b .Ljp7F050FDC -/* 085AE8 7F050F78 AFAF0064 */ sw $t7, 0x64($sp) -.Ljp7F050F7C: -/* 085AEC 7F050F7C 0FC26C01 */ jal getPlayerCount -/* 085AF0 7F050F80 00000000 */ nop -/* 085AF4 7F050F84 28410002 */ slti $at, $v0, 2 -/* 085AF8 7F050F88 54200015 */ bnezl $at, .Ljp7F050FE0 -/* 085AFC 7F050F8C 8FA90064 */ lw $t1, 0x64($sp) -/* 085B00 7F050F90 0FC05202 */ jal get_scenario -/* 085B04 7F050F94 00000000 */ nop -/* 085B08 7F050F98 24010002 */ li $at, 2 -/* 085B0C 7F050F9C 14410007 */ bne $v0, $at, .Ljp7F050FBC -/* 085B10 7F050FA0 00408025 */ move $s0, $v0 -/* 085B14 7F050FA4 0FC23639 */ jal bondinvIsAliveWithFlag -/* 085B18 7F050FA8 00000000 */ nop -/* 085B1C 7F050FAC 10400003 */ beqz $v0, .Ljp7F050FBC -/* 085B20 7F050FB0 24180001 */ li $t8, 1 -/* 085B24 7F050FB4 10000009 */ b .Ljp7F050FDC -/* 085B28 7F050FB8 AFB80064 */ sw $t8, 0x64($sp) -.Ljp7F050FBC: -/* 085B2C 7F050FBC 24010003 */ li $at, 3 -/* 085B30 7F050FC0 56010007 */ bnel $s0, $at, .Ljp7F050FE0 -/* 085B34 7F050FC4 8FA90064 */ lw $t1, 0x64($sp) -/* 085B38 7F050FC8 0FC23649 */ jal bondinvHasGoldenGun -/* 085B3C 7F050FCC 00000000 */ nop -/* 085B40 7F050FD0 10400002 */ beqz $v0, .Ljp7F050FDC -/* 085B44 7F050FD4 24190001 */ li $t9, 1 -/* 085B48 7F050FD8 AFB90064 */ sw $t9, 0x64($sp) -.Ljp7F050FDC: -/* 085B4C 7F050FDC 8FA90064 */ lw $t1, 0x64($sp) -.Ljp7F050FE0: -/* 085B50 7F050FE0 11200003 */ beqz $t1, .Ljp7F050FF0 -/* 085B54 7F050FE4 00000000 */ nop -/* 085B58 7F050FE8 1000008B */ b .Ljp7F051218 -/* 085B5C 7F050FEC 00001025 */ move $v0, $zero -.Ljp7F050FF0: -/* 085B60 7F050FF0 0FC22992 */ jal get_curplay_vertical_rotation_in_degrees -/* 085B64 7F050FF4 00000000 */ nop -/* 085B68 7F050FF8 3C018005 */ lui $at, %hi(D_800532E0) # $at, 0x8005 -/* 085B6C 7F050FFC C4263310 */ lwc1 $f6, %lo(D_800532E0)($at) -/* 085B70 7F051000 3C0A8008 */ lui $t2, %hi(g_CurrentPlayer) # $t2, 0x8008 -/* 085B74 7F051004 4606003C */ c.lt.s $f0, $f6 -/* 085B78 7F051008 00000000 */ nop -/* 085B7C 7F05100C 45000007 */ bc1f .Ljp7F05102C -/* 085B80 7F051010 00000000 */ nop -/* 085B84 7F051014 8D4AA120 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 085B88 7F051018 8D4B1270 */ lw $t3, 0x1268($t2) -/* 085B8C 7F05101C 05610003 */ bgez $t3, .Ljp7F05102C -/* 085B90 7F051020 00000000 */ nop -/* 085B94 7F051024 1000007C */ b .Ljp7F051218 -/* 085B98 7F051028 00001025 */ move $v0, $zero -.Ljp7F05102C: -/* 085B9C 7F05102C 0FC2279B */ jal get_curplayer_positiondata -/* 085BA0 7F051030 00000000 */ nop -/* 085BA4 7F051034 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) # $t5, 0x8008 -/* 085BA8 7F051038 8FAC008C */ lw $t4, 0x8c($sp) -/* 085BAC 7F05103C 8DADA120 */ lw $t5, %lo(g_CurrentPlayer)($t5) -/* 085BB0 7F051040 C44A0008 */ lwc1 $f10, 8($v0) -/* 085BB4 7F051044 C452000C */ lwc1 $f18, 0xc($v0) -/* 085BB8 7F051048 8DAE1270 */ lw $t6, 0x1268($t5) -/* 085BBC 7F05104C C4460010 */ lwc1 $f6, 0x10($v0) -/* 085BC0 7F051050 C5880058 */ lwc1 $f8, 0x58($t4) -/* 085BC4 7F051054 C590005C */ lwc1 $f16, 0x5c($t4) -/* 085BC8 7F051058 C5840060 */ lwc1 $f4, 0x60($t4) -/* 085BCC 7F05105C 29C1003C */ slti $at, $t6, 0x3c -/* 085BD0 7F051060 00404025 */ move $t0, $v0 -/* 085BD4 7F051064 460A4001 */ sub.s $f0, $f8, $f10 -/* 085BD8 7F051068 46128301 */ sub.s $f12, $f16, $f18 -/* 085BDC 7F05106C 14200022 */ bnez $at, .Ljp7F0510F8 -/* 085BE0 7F051070 46062081 */ sub.s $f2, $f4, $f6 -/* 085BE4 7F051074 46000202 */ mul.s $f8, $f0, $f0 -/* 085BE8 7F051078 3C018005 */ lui $at, %hi(D_800532E4) # $at, 0x8005 -/* 085BEC 7F05107C C4323314 */ lwc1 $f18, %lo(D_800532E4)($at) -/* 085BF0 7F051080 46021282 */ mul.s $f10, $f2, $f2 -/* 085BF4 7F051084 3C01C3FA */ li $at, 0xC3FA0000 # -500.000000 -/* 085BF8 7F051088 00001025 */ move $v0, $zero -/* 085BFC 7F05108C 460A4400 */ add.s $f16, $f8, $f10 -/* 085C00 7F051090 4612803E */ c.le.s $f16, $f18 -/* 085C04 7F051094 00000000 */ nop -/* 085C08 7F051098 45000002 */ bc1f .Ljp7F0510A4 -/* 085C0C 7F05109C 00000000 */ nop -/* 085C10 7F0510A0 24020001 */ li $v0, 1 -.Ljp7F0510A4: -/* 085C14 7F0510A4 10400012 */ beqz $v0, .Ljp7F0510F0 -/* 085C18 7F0510A8 00401825 */ move $v1, $v0 -/* 085C1C 7F0510AC 44812000 */ mtc1 $at, $f4 -/* 085C20 7F0510B0 3C0143FA */ li $at, 0x43FA0000 # 500.000000 -/* 085C24 7F0510B4 00001025 */ move $v0, $zero -/* 085C28 7F0510B8 460C203E */ c.le.s $f4, $f12 -/* 085C2C 7F0510BC 00000000 */ nop -/* 085C30 7F0510C0 45000002 */ bc1f .Ljp7F0510CC -/* 085C34 7F0510C4 00000000 */ nop -/* 085C38 7F0510C8 24020001 */ li $v0, 1 -.Ljp7F0510CC: -/* 085C3C 7F0510CC 10400008 */ beqz $v0, .Ljp7F0510F0 -/* 085C40 7F0510D0 00401825 */ move $v1, $v0 -/* 085C44 7F0510D4 44813000 */ mtc1 $at, $f6 -/* 085C48 7F0510D8 00001825 */ move $v1, $zero -/* 085C4C 7F0510DC 4606603E */ c.le.s $f12, $f6 -/* 085C50 7F0510E0 00000000 */ nop -/* 085C54 7F0510E4 45000002 */ bc1f .Ljp7F0510F0 -/* 085C58 7F0510E8 00000000 */ nop -/* 085C5C 7F0510EC 24030001 */ li $v1, 1 -.Ljp7F0510F0: -/* 085C60 7F0510F0 10000021 */ b .Ljp7F051178 -/* 085C64 7F0510F4 00608025 */ move $s0, $v1 -.Ljp7F0510F8: -/* 085C68 7F0510F8 46000202 */ mul.s $f8, $f0, $f0 -/* 085C6C 7F0510FC 3C018005 */ lui $at, %hi(D_800532E8) # $at, 0x8005 -/* 085C70 7F051100 C4303318 */ lwc1 $f16, %lo(D_800532E8)($at) -/* 085C74 7F051104 46021282 */ mul.s $f10, $f2, $f2 -/* 085C78 7F051108 3C01C348 */ li $at, 0xC3480000 # -200.000000 -/* 085C7C 7F05110C 00001025 */ move $v0, $zero -/* 085C80 7F051110 460A4480 */ add.s $f18, $f8, $f10 -/* 085C84 7F051114 4610903E */ c.le.s $f18, $f16 -/* 085C88 7F051118 00000000 */ nop -/* 085C8C 7F05111C 45000002 */ bc1f .Ljp7F051128 -/* 085C90 7F051120 00000000 */ nop -/* 085C94 7F051124 24020001 */ li $v0, 1 -.Ljp7F051128: -/* 085C98 7F051128 10400012 */ beqz $v0, .Ljp7F051174 -/* 085C9C 7F05112C 00401825 */ move $v1, $v0 -/* 085CA0 7F051130 44812000 */ mtc1 $at, $f4 -/* 085CA4 7F051134 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 085CA8 7F051138 00001025 */ move $v0, $zero -/* 085CAC 7F05113C 460C203E */ c.le.s $f4, $f12 -/* 085CB0 7F051140 00000000 */ nop -/* 085CB4 7F051144 45000002 */ bc1f .Ljp7F051150 -/* 085CB8 7F051148 00000000 */ nop -/* 085CBC 7F05114C 24020001 */ li $v0, 1 -.Ljp7F051150: -/* 085CC0 7F051150 10400008 */ beqz $v0, .Ljp7F051174 -/* 085CC4 7F051154 00401825 */ move $v1, $v0 -/* 085CC8 7F051158 44813000 */ mtc1 $at, $f6 -/* 085CCC 7F05115C 00001825 */ move $v1, $zero -/* 085CD0 7F051160 4606603E */ c.le.s $f12, $f6 -/* 085CD4 7F051164 00000000 */ nop -/* 085CD8 7F051168 45020003 */ bc1fl .Ljp7F051178 -/* 085CDC 7F05116C 00608025 */ move $s0, $v1 -/* 085CE0 7F051170 24030001 */ li $v1, 1 -.Ljp7F051174: -/* 085CE4 7F051174 00608025 */ move $s0, $v1 -.Ljp7F051178: -/* 085CE8 7F051178 10600020 */ beqz $v1, .Ljp7F0511FC -/* 085CEC 7F05117C 8FAF008C */ lw $t7, 0x8c($sp) -/* 085CF0 7F051180 8DF8000C */ lw $t8, 0xc($t7) -/* 085CF4 7F051184 8FA20090 */ lw $v0, 0x90($sp) -/* 085CF8 7F051188 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -/* 085CFC 7F05118C 33191000 */ andi $t9, $t8, 0x1000 -/* 085D00 7F051190 1720001A */ bnez $t9, .Ljp7F0511FC -/* 085D04 7F051194 27A40044 */ addiu $a0, $sp, 0x44 -/* 085D08 7F051198 8D090014 */ lw $t1, 0x14($t0) -/* 085D0C 7F05119C 44810000 */ mtc1 $at, $f0 -/* 085D10 7F0511A0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 085D14 7F0511A4 AFA90044 */ sw $t1, 0x44($sp) -/* 085D18 7F0511A8 C4480010 */ lwc1 $f8, 0x10($v0) -/* 085D1C 7F0511AC 8C470008 */ lw $a3, 8($v0) -/* 085D20 7F0511B0 8D060010 */ lw $a2, 0x10($t0) -/* 085D24 7F0511B4 8D050008 */ lw $a1, 8($t0) -/* 085D28 7F0511B8 44818000 */ mtc1 $at, $f16 -/* 085D2C 7F0511BC 44805000 */ mtc1 $zero, $f10 -/* 085D30 7F0511C0 240A0002 */ li $t2, 2 -/* 085D34 7F0511C4 AFAA0014 */ sw $t2, 0x14($sp) -/* 085D38 7F0511C8 E7A0001C */ swc1 $f0, 0x1c($sp) -/* 085D3C 7F0511CC E7A00018 */ swc1 $f0, 0x18($sp) -/* 085D40 7F0511D0 E7A80010 */ swc1 $f8, 0x10($sp) -/* 085D44 7F0511D4 E7B00024 */ swc1 $f16, 0x24($sp) -/* 085D48 7F0511D8 0FC2C675 */ jal stanTestLineUnobstructed -/* 085D4C 7F0511DC E7AA0020 */ swc1 $f10, 0x20($sp) -/* 085D50 7F0511E0 10400005 */ beqz $v0, .Ljp7F0511F8 -/* 085D54 7F0511E4 8FAC0090 */ lw $t4, 0x90($sp) -/* 085D58 7F0511E8 8FAB0044 */ lw $t3, 0x44($sp) -/* 085D5C 7F0511EC 8D8D0014 */ lw $t5, 0x14($t4) -/* 085D60 7F0511F0 116D0002 */ beq $t3, $t5, .Ljp7F0511FC -/* 085D64 7F0511F4 00000000 */ nop -.Ljp7F0511F8: -/* 085D68 7F0511F8 00008025 */ move $s0, $zero -.Ljp7F0511FC: -/* 085D6C 7F0511FC 12000006 */ beqz $s0, .Ljp7F051218 -/* 085D70 7F051200 00001025 */ move $v0, $zero -/* 085D74 7F051204 8FA40090 */ lw $a0, 0x90($sp) -/* 085D78 7F051208 0FC14195 */ jal collect_or_interact_object -/* 085D7C 7F05120C 24050001 */ li $a1, 1 -/* 085D80 7F051210 10000002 */ b .Ljp7F05121C -/* 085D84 7F051214 8FBF0034 */ lw $ra, 0x34($sp) -.Ljp7F051218: -/* 085D88 7F051218 8FBF0034 */ lw $ra, 0x34($sp) -.Ljp7F05121C: -/* 085D8C 7F05121C 8FB00030 */ lw $s0, 0x30($sp) -/* 085D90 7F051220 27BD0090 */ addiu $sp, $sp, 0x90 -/* 085D94 7F051224 03E00008 */ jr $ra -/* 085D98 7F051228 00000000 */ nop -) -#endif - -#endif - - -bool sub_GAME_7F050D30(PropRecord *prop, coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3) +/* +* Address: 7F050D30 +*/ +bool objGetOnscreenRenderBounds(PropRecord *prop, coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3) { if (prop->flags & PROPFLAG_ONSCREEN) { @@ -34975,7 +11065,7 @@ bool sub_GAME_7F050D30(PropRecord *prop, coord3d *arg1, struct coord2d *arg2, st arg2->f[0] = 0; arg2->f[1] = 0; - sub_GAME_7F03F90C(obj->model, &arg2->f[1], &arg2->f[0], &arg3->f[1], &arg3->f[0]); + modelGetXYExtents(obj->model, &arg2->f[1], &arg2->f[0], &arg3->f[1], &arg3->f[0]); return TRUE; } @@ -35089,7 +11179,7 @@ PropRecord *hatCreateForChr(ChrRecord *chr, s32 modelnum, u32 flags) modelLoad(modelnum); prop = chrpropAllocate(); - model = get_obj_instance_controller_for_header(modeldef); + model = modelmgrInstantiateModel(modeldef); hat = hatCreate(prop == NULL, model == NULL, modeldef); if (prop == NULL) @@ -35099,7 +11189,7 @@ PropRecord *hatCreateForChr(ChrRecord *chr, s32 modelnum, u32 flags) if (model == NULL) { - model = get_obj_instance_controller_for_header(modeldef); + model = modelmgrInstantiateModel(modeldef); } if (hat && prop && model) @@ -35179,7 +11269,7 @@ WeaponObjRecord* weaponCreate(bool musthaveprop, bool musthavemodel, ModelFileHe sp44 = i; break; } - } else if ((g_WeaponSlots[i].runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) == 0 && (g_WeaponSlots[i].state & PROPSTATE_RESPAWN) == 0) + } else if ((g_WeaponSlots[i].runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) == 0 && (g_WeaponSlots[i].state & PROPSTATE_RESPAWN) == 0) { WeaponObjRecord* slot = &g_WeaponSlots[i]; if (((slot->timer <= 0) && (slot->prop->parent == NULL)) @@ -35294,7 +11384,7 @@ HatRecord *hatCreate(bool musthaveprop, bool musthavemodel, ModelFileHeader *mod break; } } - else if ((g_HatSlots[i].runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) == 0 + else if ((g_HatSlots[i].runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) == 0 && g_HatSlots[i].prop->parent == NULL && (!musthavemodel || modelmgrCanSlotFitRwdata(g_HatSlots[i].model, modeldef))) { @@ -35398,7 +11488,7 @@ AmmoCrateRecord *ammocrateAllocate(void) // Find one that can be freed off-screen for (i = 0; i < MAX_AMMO_CRATES; i++) { - if ((g_AmmoCrates[i].runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) == 0 + if ((g_AmmoCrates[i].runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) == 0 && (g_AmmoCrates[i].state & PROPSTATE_RESPAWN) == 0 && g_AmmoCrates[i].prop->parent == NULL && (g_AmmoCrates[i].prop->flags & 0x02) == 0) @@ -35411,7 +11501,7 @@ AmmoCrateRecord *ammocrateAllocate(void) // Find one that can be freed on-screen for (i = 0; i < MAX_AMMO_CRATES; i++) { - if ((g_AmmoCrates[i].runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) == 0 + if ((g_AmmoCrates[i].runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) == 0 && (g_AmmoCrates[i].state & PROPSTATE_RESPAWN) == 0 && g_AmmoCrates[i].prop->parent == NULL) { @@ -35478,10 +11568,10 @@ KeyRecord *weaponFindThrown(s32 KeyID) //MATCH KeyRecord *obj; PropRecord *prop; - for (prop = get_ptr_obj_pos_list_current_entry(); prop; prop = prop->prev) + for (prop = chrpropGetActiveTail(); prop; prop = prop->prev) { obj = check_if_entry_is_collectable(KeyID, prop); - if (obj && (!(obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT))) + if (obj && (!(obj->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE))) { return obj; } @@ -35495,9 +11585,9 @@ void add_obj_to_temp_proxmine_table(WeaponObjRecord* proxy) s32 i = 0; while (1) { - if (temp_mine_table[i] == NULL) + if (proxy_mine_table[i] == NULL) { - temp_mine_table[i] = proxy; + proxy_mine_table[i] = proxy; #ifdef DEBUG assert(itimer == 1)) { @@ -35551,7 +11643,7 @@ void detonate_proxmine_In_range(coord3d* pos) diff_z = pos->z - obj->runtime_pos.z; dist_sqr = (diff_x * diff_x) + (diff_y * diff_y) + (diff_z * diff_z); - if (dist_sqr < 62500.0f) + if (dist_sqr < PROXIMITY_MINE_TRIGGER_DISTANCE) { obj->timer = 0; } @@ -35704,13 +11796,6 @@ void sub_GAME_7F052030(WeaponObjRecord* arg0, ChrRecord* arg1) } -#ifdef NONMATCHING -/** - * @param arg0: index into PitemZ_entries, which is enum PROP - * @param arg1: object_weapon.gun_pickup value - * - * Address 0x7F05206C. -*/ WeaponObjRecord blank_08_object_preset_1 = { 0x0100, //extrascale 0x0, //state @@ -35740,238 +11825,69 @@ WeaponObjRecord blank_08_object_preset_1 = { -1, //timer NULL //dualweapon }; -WeaponObjRecord *create_new_item_instance_of_model(s32 modelnum, ITEM_IDS weaponid) + + +/** + * Address: 7F05206C + * + * @param modelnum: index into PitemZ_entries, which is enum PROP + * @param weaponid: object_weapon.gun_pickup value + */ +ObjectRecord *create_new_item_instance_of_model(PROP modelnum, s32 weaponid) { - WeaponObjRecord *itemModel; - s32 ObjInst; - s32 sp20; - s32 isObjInstAvailable; - s32 lastObj; - s32 ObjInst; - s32 *temp_t1; - s32 *temp_t4; - s32 *temp_t8; - WeaponObjRecord *NewGun; - void *temp_t5; - s32 lastObj; - s32 ObjInst; - s32 *NewWep; - s32 *phi_t1; - s32 *phi_t4; - void *phi_t5; - WeaponObjRecord *NewGun; + ModelFileHeader *modeldef; + PropRecord *prop; + Model *model; + WeaponObjRecord *obj; - itemModel = PitemZ_entries[modelnum]; - modelLoad(); - lastObj = chrpropAllocate(); - ObjInst = get_obj_instance_controller_for_header(itemModel); - isObjInstAvailable = ObjInst == 0; - ObjInst = ObjInst; - NewGun = weaponCreate(lastObj == 0, isObjInstAvailable, itemModel); - lastObj = lastObj; - NewGun = NewGun; - if (lastObj == 0) - { - ObjInst = ObjInst; - lastObj = chrpropAllocate(); - } - ObjInst = ObjInst; - if (ObjInst == 0) - { - ObjInst = get_obj_instance_controller_for_header(itemModel); - } - if ((NewGun != 0) && (lastObj != 0) && (ObjInst != 0)) - { - //struct copy - // NewWep = New_WeaponObjRecord(); - // t5 = t4; - NewWep = &blank_08_object_preset_1; - phi_t1 = &sp20; - do - { - temp_t8 = NewWep + 0xC; - temp_t1 = phi_t1 + 0xC; - temp_t1->unk - C = *NewWep; - temp_t1->unk - 8 = temp_t8->unk - 8; - temp_t1->unk - 4 = temp_t8->unk - 4; - NewWep = temp_t8; - phi_t1 = temp_t1; - } while (temp_t8 != (&blank_08_object_preset_1 + 0x84)); - temp_t1->unk0 = temp_t8->unk0; - phi_t4 = &sp20; - phi_t5 = NewGun; + modeldef = PitemZ_entries[modelnum].header; - do - { - temp_t4 = phi_t4 + 0xC; - temp_t5 = phi_t5 + 0xC; - temp_t5->unk - C = *phi_t4; - temp_t5->unk - 8 = temp_t4->unk - 8; - temp_t5->unk - 4 = temp_t4->unk - 4; - phi_t4 = temp_t4; - phi_t5 = temp_t5; - } while (temp_t4 != (&sp20 + 0x84)); - temp_t5->unk0 = temp_t4->unk0; - NewGun->unk80 = weaponid; - NewGun->unk4 = modelnum; - complete_object_data_block_return_position_entry(NewGun, itemModel, lastObj, ObjInst); + modelLoad(modelnum); + + prop = chrpropAllocate(); + + model = modelmgrInstantiateModel(modeldef); + + obj = weaponCreate(prop == NULL, model == NULL, modeldef); + + if (prop == NULL) + { + prop = chrpropAllocate(); + } + + if (model == NULL) + { + model = modelmgrInstantiateModel(modeldef); + } + + if (obj != NULL && prop != NULL && model != NULL) + { + WeaponObjRecord tmp = blank_08_object_preset_1; + + *obj = tmp; + + obj->weaponnum = weaponid; + obj->obj = modelnum; + + complete_object_data_block_return_position_entry(obj, modeldef, prop, model); } else { - NewGun = NULL; - if (ObjInst != 0) + obj = NULL; + + if (model != NULL) { - clear_model_obj(ObjInst); + clear_model_obj(model); } - if (lastObj != 0) + + if (prop != NULL) { - chrpropFree(lastObj); + chrpropFree(prop); } } - return NewGun; - // itemModel = PitemZ_entries[arg0].header; - - // (result)->unk80 = (s8) arg1; // should be object_weapon.gun_pickup + return (ObjectRecord *)obj; } -#else -WeaponObjRecord blank_08_object_preset_1 = { - 0x0100, //extrascale - 0x0, //state - 0x08, //type - 0, //obj - 1, //pad - 0x00000000, //flags - 0, //flags2 - NULL, // prop - NULL, // model - { - 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f - }, //mtx - { 0.0, 0.0, 0.0 }, //runtime_pos - {0x00000000 }, //runtime_bitflags - NULL, //ptr_allocated_collisiondata_block - NULL, //projectile/embedment - 0.0f, //maxdamage - 1000.0f,//damage - { 0xFF, 0xFF, 0xFF, 0x00 }, // shadecol - { 0xFF, 0xFF, 0xFF, 0x00 }, // nextcol - ITEM_UNARMED, //weaponnum - -1, //LinkedWeaponType - -1, //timer - NULL //dualweapon -}; -GLOBAL_ASM( -.text -glabel create_new_item_instance_of_model -/* 086B9C 7F05206C 00047080 */ sll $t6, $a0, 2 -/* 086BA0 7F052070 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 086BA4 7F052074 01C47023 */ subu $t6, $t6, $a0 -/* 086BA8 7F052078 000E7080 */ sll $t6, $t6, 2 -/* 086BAC 7F05207C 3C0F8004 */ lui $t7, %hi(PitemZ_entries) -/* 086BB0 7F052080 01EE7821 */ addu $t7, $t7, $t6 -/* 086BB4 7F052084 8DEFA228 */ lw $t7, %lo(PitemZ_entries)($t7) -/* 086BB8 7F052088 AFBF001C */ sw $ra, 0x1c($sp) -/* 086BBC 7F05208C AFB10018 */ sw $s1, 0x18($sp) -/* 086BC0 7F052090 AFB00014 */ sw $s0, 0x14($sp) -/* 086BC4 7F052094 AFA500BC */ sw $a1, 0xbc($sp) -/* 086BC8 7F052098 AFA400B8 */ sw $a0, 0xb8($sp) -/* 086BCC 7F05209C 0FC15B0E */ jal modelLoad -/* 086BD0 7F0520A0 AFAF00B4 */ sw $t7, 0xb4($sp) -/* 086BD4 7F0520A4 0FC0E90C */ jal chrpropAllocate -/* 086BD8 7F0520A8 00000000 */ nop -/* 086BDC 7F0520AC 00408025 */ move $s0, $v0 -/* 086BE0 7F0520B0 0FC1B025 */ jal get_obj_instance_controller_for_header -/* 086BE4 7F0520B4 8FA400B4 */ lw $a0, 0xb4($sp) -/* 086BE8 7F0520B8 2E040001 */ sltiu $a0, $s0, 1 -/* 086BEC 7F0520BC 2C450001 */ sltiu $a1, $v0, 1 -/* 086BF0 7F0520C0 8FA600B4 */ lw $a2, 0xb4($sp) -/* 086BF4 7F0520C4 0FC1449B */ jal weaponCreate -/* 086BF8 7F0520C8 AFA200AC */ sw $v0, 0xac($sp) -/* 086BFC 7F0520CC 8FA700AC */ lw $a3, 0xac($sp) -/* 086C00 7F0520D0 16000005 */ bnez $s0, .L7F0520E8 -/* 086C04 7F0520D4 00408825 */ move $s1, $v0 -/* 086C08 7F0520D8 0FC0E90C */ jal chrpropAllocate -/* 086C0C 7F0520DC AFA700AC */ sw $a3, 0xac($sp) -/* 086C10 7F0520E0 8FA700AC */ lw $a3, 0xac($sp) -/* 086C14 7F0520E4 00408025 */ move $s0, $v0 -.L7F0520E8: -/* 086C18 7F0520E8 14E00004 */ bnez $a3, .L7F0520FC -/* 086C1C 7F0520EC 00000000 */ nop -/* 086C20 7F0520F0 0FC1B025 */ jal get_obj_instance_controller_for_header -/* 086C24 7F0520F4 8FA400B4 */ lw $a0, 0xb4($sp) -/* 086C28 7F0520F8 00403825 */ move $a3, $v0 -.L7F0520FC: -/* 086C2C 7F0520FC 1220002C */ beqz $s1, .L7F0521B0 -/* 086C30 7F052100 00000000 */ nop -/* 086C34 7F052104 1200002A */ beqz $s0, .L7F0521B0 -/* 086C38 7F052108 00000000 */ nop -/* 086C3C 7F05210C 10E00028 */ beqz $a3, .L7F0521B0 -/* 086C40 7F052110 27A20020 */ addiu $v0, $sp, 0x20 -/* 086C44 7F052114 3C188003 */ lui $t8, %hi(blank_08_object_preset_1) -/* 086C48 7F052118 27182194 */ addiu $t8, %lo(blank_08_object_preset_1) # addiu $t8, $t8, 0x2194 -/* 086C4C 7F05211C 27080084 */ addiu $t0, $t8, 0x84 -/* 086C50 7F052120 00404825 */ move $t1, $v0 -.L7F052124: -/* 086C54 7F052124 8F010000 */ lw $at, ($t8) -/* 086C58 7F052128 2718000C */ addiu $t8, $t8, 0xc -/* 086C5C 7F05212C 2529000C */ addiu $t1, $t1, 0xc -/* 086C60 7F052130 AD21FFF4 */ sw $at, -0xc($t1) -/* 086C64 7F052134 8F01FFF8 */ lw $at, -8($t8) -/* 086C68 7F052138 AD21FFF8 */ sw $at, -8($t1) -/* 086C6C 7F05213C 8F01FFFC */ lw $at, -4($t8) -/* 086C70 7F052140 1708FFF8 */ bne $t8, $t0, .L7F052124 -/* 086C74 7F052144 AD21FFFC */ sw $at, -4($t1) -/* 086C78 7F052148 8F010000 */ lw $at, ($t8) -/* 086C7C 7F05214C 00406025 */ move $t4, $v0 -/* 086C80 7F052150 02206825 */ move $t5, $s1 -/* 086C84 7F052154 244B0084 */ addiu $t3, $v0, 0x84 -/* 086C88 7F052158 AD210000 */ sw $at, ($t1) -.L7F05215C: -/* 086C8C 7F05215C 8D810000 */ lw $at, ($t4) -/* 086C90 7F052160 258C000C */ addiu $t4, $t4, 0xc -/* 086C94 7F052164 25AD000C */ addiu $t5, $t5, 0xc -/* 086C98 7F052168 ADA1FFF4 */ sw $at, -0xc($t5) -/* 086C9C 7F05216C 8D81FFF8 */ lw $at, -8($t4) -/* 086CA0 7F052170 ADA1FFF8 */ sw $at, -8($t5) -/* 086CA4 7F052174 8D81FFFC */ lw $at, -4($t4) -/* 086CA8 7F052178 158BFFF8 */ bne $t4, $t3, .L7F05215C -/* 086CAC 7F05217C ADA1FFFC */ sw $at, -4($t5) -/* 086CB0 7F052180 8D810000 */ lw $at, ($t4) -/* 086CB4 7F052184 02202025 */ move $a0, $s1 -/* 086CB8 7F052188 02003025 */ move $a2, $s0 -/* 086CBC 7F05218C ADA10000 */ sw $at, ($t5) -/* 086CC0 7F052190 8FAE00BC */ lw $t6, 0xbc($sp) -/* 086CC4 7F052194 A22E0080 */ sb $t6, 0x80($s1) -/* 086CC8 7F052198 8FAF00B8 */ lw $t7, 0xb8($sp) -/* 086CCC 7F05219C A62F0004 */ sh $t7, 4($s1) -/* 086CD0 7F0521A0 0FC14764 */ jal complete_object_data_block_return_position_entry -/* 086CD4 7F0521A4 8FA500B4 */ lw $a1, 0xb4($sp) -/* 086CD8 7F0521A8 1000000A */ b .L7F0521D4 -/* 086CDC 7F0521AC 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0521B0: -/* 086CE0 7F0521B0 10E00003 */ beqz $a3, .L7F0521C0 -/* 086CE4 7F0521B4 00008825 */ move $s1, $zero -/* 086CE8 7F0521B8 0FC1B08D */ jal clear_model_obj -/* 086CEC 7F0521BC 00E02025 */ move $a0, $a3 -.L7F0521C0: -/* 086CF0 7F0521C0 52000004 */ beql $s0, $zero, .L7F0521D4 -/* 086CF4 7F0521C4 8FBF001C */ lw $ra, 0x1c($sp) -/* 086CF8 7F0521C8 0FC0E921 */ jal chrpropFree -/* 086CFC 7F0521CC 02002025 */ move $a0, $s0 -/* 086D00 7F0521D0 8FBF001C */ lw $ra, 0x1c($sp) -.L7F0521D4: -/* 086D04 7F0521D4 02201025 */ move $v0, $s1 -/* 086D08 7F0521D8 8FB10018 */ lw $s1, 0x18($sp) -/* 086D0C 7F0521DC 8FB00014 */ lw $s0, 0x14($sp) -/* 086D10 7F0521E0 03E00008 */ jr $ra -/* 086D14 7F0521E4 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif - /** @@ -36030,7 +11946,7 @@ PropRecord *something_with_generating_object(ChrRecord *self, s32 propid, ITEM_I } lastobjentry = chrpropAllocate(); - objinst = get_obj_instance_controller_for_header((ModelFileHeader *)prop_header); + objinst = modelmgrInstantiateModel((ModelFileHeader *)prop_header); if (!weapon) { @@ -36044,7 +11960,7 @@ PropRecord *something_with_generating_object(ChrRecord *self, s32 propid, ITEM_I if (!objinst) { - objinst = get_obj_instance_controller_for_header((ModelFileHeader *)prop_header); + objinst = modelmgrInstantiateModel((ModelFileHeader *)prop_header); } if (weapon && lastobjentry && objinst) @@ -36079,10 +11995,6 @@ PropRecord *something_with_generating_object(ChrRecord *self, s32 propid, ITEM_I } - - - - /** * Add New Weapon to chr */ @@ -36092,133 +12004,104 @@ PropRecord *chrGiveWeapon(ChrRecord *self, s32 PropID, ITEM_IDS ItemID, s32 flag } +/** + * Must remain immediately above chrRenderHeldWeapon for matching. +*/ +ModelRenderData D_800322A4 = { + 0, + 1, + 3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + 0 +}; - -#ifdef NONMATCHING -void sub_GAME_7F0523F8(void) { - -} -#else -u32 D_800322A4 = 0; -u32 D_800322A8[] = {1, 3}; -u32 D_800322B0[] = {0, 0, 0, 0}; -u32 D_800322C0[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -GLOBAL_ASM( -.late_rodata -glabel D_800532F0 -.word 0x40490fdb /*3.1415927*/ -.text -glabel sub_GAME_7F0523F8 -/* 086F28 7F0523F8 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 086F2C 7F0523FC AFBF001C */ sw $ra, 0x1c($sp) -/* 086F30 7F052400 AFB10018 */ sw $s1, 0x18($sp) -/* 086F34 7F052404 AFB00014 */ sw $s0, 0x14($sp) -/* 086F38 7F052408 AFA500BC */ sw $a1, 0xbc($sp) -/* 086F3C 7F05240C AFA600C0 */ sw $a2, 0xc0($sp) -/* 086F40 7F052410 8C870004 */ lw $a3, 4($a0) -/* 086F44 7F052414 00E02025 */ move $a0, $a3 -/* 086F48 7F052418 0FC08C0B */ jal chrGetEquippedWeaponProp -/* 086F4C 7F05241C AFA700B4 */ sw $a3, 0xb4($sp) -/* 086F50 7F052420 8FA700B4 */ lw $a3, 0xb4($sp) -/* 086F54 7F052424 10400046 */ beqz $v0, .L7F052540 -/* 086F58 7F052428 00401825 */ move $v1, $v0 -/* 086F5C 7F05242C 8C500004 */ lw $s0, 4($v0) -/* 086F60 7F052430 8E0E0064 */ lw $t6, 0x64($s0) -/* 086F64 7F052434 31CF0800 */ andi $t7, $t6, 0x800 -/* 086F68 7F052438 55E0003F */ bnezl $t7, .L7F052538 -/* 086F6C 7F05243C 90480001 */ lbu $t0, 1($v0) -/* 086F70 7F052440 8E18000C */ lw $t8, 0xc($s0) -/* 086F74 7F052444 3C098003 */ lui $t1, %hi(D_800322A4) -/* 086F78 7F052448 252922A4 */ addiu $t1, %lo(D_800322A4) # addiu $t1, $t1, 0x22a4 -/* 086F7C 7F05244C 0018CB00 */ sll $t9, $t8, 0xc -/* 086F80 7F052450 07200038 */ bltz $t9, .L7F052534 -/* 086F84 7F052454 27A80068 */ addiu $t0, $sp, 0x68 -/* 086F88 7F052458 8E110014 */ lw $s1, 0x14($s0) -/* 086F8C 7F05245C 252B003C */ addiu $t3, $t1, 0x3c -.L7F052460: -/* 086F90 7F052460 8D210000 */ lw $at, ($t1) -/* 086F94 7F052464 2529000C */ addiu $t1, $t1, 0xc -/* 086F98 7F052468 2508000C */ addiu $t0, $t0, 0xc -/* 086F9C 7F05246C AD01FFF4 */ sw $at, -0xc($t0) -/* 086FA0 7F052470 8D21FFF8 */ lw $at, -8($t1) -/* 086FA4 7F052474 AD01FFF8 */ sw $at, -8($t0) -/* 086FA8 7F052478 8D21FFFC */ lw $at, -4($t1) -/* 086FAC 7F05247C 152BFFF8 */ bne $t1, $t3, .L7F052460 -/* 086FB0 7F052480 AD01FFFC */ sw $at, -4($t0) -/* 086FB4 7F052484 8D210000 */ lw $at, ($t1) -/* 086FB8 7F052488 00003025 */ move $a2, $zero -/* 086FBC 7F05248C AD010000 */ sw $at, ($t0) -/* 086FC0 7F052490 906C0001 */ lbu $t4, 1($v1) -/* 086FC4 7F052494 8CE4001C */ lw $a0, 0x1c($a3) -/* 086FC8 7F052498 358D0002 */ ori $t5, $t4, 2 -/* 086FCC 7F05249C A06D0001 */ sb $t5, 1($v1) -/* 086FD0 7F0524A0 0FC1B198 */ jal modelFindNodeMtx -/* 086FD4 7F0524A4 8E25001C */ lw $a1, 0x1c($s1) -/* 086FD8 7F0524A8 8FAE00BC */ lw $t6, 0xbc($sp) -/* 086FDC 7F0524AC 24010001 */ li $at, 1 -/* 086FE0 7F0524B0 AFA20068 */ sw $v0, 0x68($sp) -/* 086FE4 7F0524B4 15C10009 */ bne $t6, $at, .L7F0524DC -/* 086FE8 7F0524B8 27A50020 */ addiu $a1, $sp, 0x20 -/* 086FEC 7F0524BC 3C018005 */ lui $at, %hi(D_800532F0) -/* 086FF0 7F0524C0 0FC161A2 */ jal matrix_4x4_set_rotation_around_z -/* 086FF4 7F0524C4 C42C32F0 */ lwc1 $f12, %lo(D_800532F0)($at) -/* 086FF8 7F0524C8 8FA40068 */ lw $a0, 0x68($sp) -/* 086FFC 7F0524CC 0FC1601A */ jal matrix_4x4_multiply_in_place -/* 087000 7F0524D0 27A50020 */ addiu $a1, $sp, 0x20 -/* 087004 7F0524D4 27AF0020 */ addiu $t7, $sp, 0x20 -/* 087008 7F0524D8 AFAF0068 */ sw $t7, 0x68($sp) -.L7F0524DC: -/* 08700C 7F0524DC 8E380008 */ lw $t8, 8($s1) -/* 087010 7F0524E0 8704000E */ lh $a0, 0xe($t8) -/* 087014 7F0524E4 0004C980 */ sll $t9, $a0, 6 -/* 087018 7F0524E8 0FC2F5C5 */ jal dynAllocate -/* 08701C 7F0524EC 03202025 */ move $a0, $t9 -/* 087020 7F0524F0 AFA20078 */ sw $v0, 0x78($sp) -/* 087024 7F0524F4 27A40068 */ addiu $a0, $sp, 0x68 -/* 087028 7F0524F8 0FC1BC92 */ jal instcalcmatrices -/* 08702C 7F0524FC 02202825 */ move $a1, $s1 -/* 087030 7F052500 8FA200C0 */ lw $v0, 0xc0($sp) -/* 087034 7F052504 5040000F */ beql $v0, $zero, .L7F052544 -/* 087038 7F052508 8FBF001C */ lw $ra, 0x1c($sp) -/* 08703C 7F05250C 8E0A0064 */ lw $t2, 0x64($s0) -/* 087040 7F052510 02202825 */ move $a1, $s1 -/* 087044 7F052514 314B0080 */ andi $t3, $t2, 0x80 -/* 087048 7F052518 5560000A */ bnezl $t3, .L7F052544 -/* 08704C 7F05251C 8FBF001C */ lw $ra, 0x1c($sp) -/* 087050 7F052520 0FC1AC48 */ jal sub_GAME_7F06B120 -/* 087054 7F052524 8C440000 */ lw $a0, ($v0) -/* 087058 7F052528 8FA900C0 */ lw $t1, 0xc0($sp) -/* 08705C 7F05252C 10000004 */ b .L7F052540 -/* 087060 7F052530 AD220000 */ sw $v0, ($t1) -.L7F052534: -/* 087064 7F052534 90480001 */ lbu $t0, 1($v0) -.L7F052538: -/* 087068 7F052538 310CFFFD */ andi $t4, $t0, 0xfffd -/* 08706C 7F05253C A04C0001 */ sb $t4, 1($v0) -.L7F052540: -/* 087070 7F052540 8FBF001C */ lw $ra, 0x1c($sp) -.L7F052544: -/* 087074 7F052544 8FB00014 */ lw $s0, 0x14($sp) -/* 087078 7F052548 8FB10018 */ lw $s1, 0x18($sp) -/* 08707C 7F05254C 03E00008 */ jr $ra -/* 087080 7F052550 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif - - - - - -void redirect_object_collectability_routines(struct PropRecord* arg0) +/** + * Render the weapon(s) characters are holding including the muzzle flash. + * Address: 0x7f0523f8 + */ +void chrRenderHeldWeapon(void *renderContext, GUNHAND hand, Gfx **gdl) { - object_collectability_routines(arg0); + ChrRecord *chr; + PropRecord *prop; + ObjectRecord *weaponObj; + Model *heldModel; + ModelRenderData renderData; + Model *chrModel; + u32 pad; // stack alignment for matching + Mtxf rotationMtx; + + chr = ((ChrRenderContext *)renderContext)->chr; + prop = chrGetEquippedWeaponProp(chr, hand); + + if (prop != NULL) { + + weaponObj = prop->obj; + + if (!(weaponObj->runtime_bitflags & RUNTIMEBITFLAG_00000800)) + { + if ((s32)(weaponObj->flags2 << 12) >= 0) + { + heldModel = weaponObj->model; + renderData = D_800322A4; + + chrModel = chr->model; + prop->flags |= PROPFLAG_ONSCREEN; + + renderData.basemtx = modelFindNodeMtx(chrModel, heldModel->attachedto_objinst, 0); + + if (hand == GUNLEFT) + { + matrix_4x4_set_rotation_around_z(3.1415927f, &rotationMtx); + matrix_4x4_multiply_in_place(renderData.basemtx, &rotationMtx); + renderData.basemtx = &rotationMtx; + } + + renderData.mtxlist = dynAllocate(heldModel->obj->numMatrices * sizeof(Mtxf)); + instcalcmatrices(&renderData, heldModel); + + if (gdl != NULL) + { + if (!(weaponObj->runtime_bitflags & RUNTIMEBITFLAG_00000080)) + { + *gdl = sub_GAME_7F06B120(*gdl, heldModel); + } + } + + return; + } + } + + prop->flags &= ~PROPFLAG_ONSCREEN; + } +} + + +/* +* Address: 0x7f052554 +*/ +TICKOP weaponTickPlayer(struct PropRecord* arg0) +{ + return objTickPlayer(arg0); } - +/* +* Address: 0x7f052574 +*/ void weaponSetGunfireVisible(PropRecord *prop, s32 firing) { ObjectRecord *obj = prop->obj; @@ -36242,6 +12125,9 @@ void weaponSetGunfireVisible(PropRecord *prop, s32 firing) +/* +* Address: 0x7f052604 +*/ s32 weaponIsGunfireVisible(PropRecord *prop) { ObjectRecord *obj = prop->obj; @@ -36268,7 +12154,10 @@ s32 weaponIsGunfireVisible(PropRecord *prop) -// getHatType +/* +* Alternative name: getHatType +* Address: 0x7f052684 +*/ HATTYPE get_hat_model(PropRecord *prop) //#MATCH { ObjectRecord *objinst = prop->obj; @@ -36333,7 +12222,7 @@ void door7F0526EC(DoorRecord *door, Mtxf *rhs) struct coord3d sp38; struct coord3d sp2C; - if ((door->doorType == 5) || (door->doorType == 9)) + if ((door->doorType == DOORTYPE_SWINGING) || (door->doorType == DOORTYPE_AZTECCHAIR)) { temp_v0_2 = &g_CurrentSetup.boundpads[door->pad]; @@ -36345,7 +12234,7 @@ void door7F0526EC(DoorRecord *door, Mtxf *rhs) sp54.f[1] = temp_v0_2->pos.f[1] + (temp_v0_2->up.f[1] * temp_v0_2->bbox.ymin); sp54.f[2] = temp_v0_2->pos.f[2] + (temp_v0_2->up.f[2] * temp_v0_2->bbox.ymin); - if (door->doorType == 9) + if (door->doorType == DOORTYPE_AZTECCHAIR) { sp54.f[0] += sp38.f[0] * temp_v0_2->bbox.xmax; sp54.f[1] += sp38.f[1] * temp_v0_2->bbox.xmax; @@ -36372,7 +12261,7 @@ void door7F0526EC(DoorRecord *door, Mtxf *rhs) matrix_4x4_set_identity_and_position(&sp48, &lhs); matrix_4x4_multiply_in_place(&lhs, rhs); - if (door->doorType == 9) + if (door->doorType == DOORTYPE_AZTECCHAIR) { if (door->flags & PROPFLAG_DOOR_OPENTOFRONT) { @@ -36396,7 +12285,7 @@ void door7F0526EC(DoorRecord *door, Mtxf *rhs) matrix_4x4_set_identity_and_position(&sp54, &lhs); matrix_4x4_multiply_in_place(&lhs, rhs); } - else if ((door->doorType == 6) || (door->doorType == 7)) + else if ((door->doorType == DOORTYPE_EYE) || (door->doorType == DOORTYPE_IRIS)) { matrix_4x4_copy(&door->mtx, rhs); matrix_4x4_set_position(&door->runtime_pos, rhs); @@ -36411,7 +12300,7 @@ void door7F0526EC(DoorRecord *door, Mtxf *rhs) matrix_4x4_set_position(&sp2C, rhs); } - if (door->doorFlags & 8) + if (door->doorFlags & DOORFLAG_FLIP) { matrix_column_3_scalar_multiply_2(-1.0f, rhs); } @@ -36422,7 +12311,7 @@ void door7F0526EC(DoorRecord *door, Mtxf *rhs) /** * NTSC address 0x7F052B00. */ -void door7F052B00(DoorRecord *door) +void doorUpdateBbox(DoorRecord *door) { struct ModelRoData_BoundingBoxRecord *door_bb; Mtxf sp2C; @@ -36432,7 +12321,8 @@ void door7F052B00(DoorRecord *door) // struct copy door->bbox = *door_bb; - if (door->doorFlags & DOORFLAG_0004) + // Resize the door's bounding box. + if (door->doorFlags & DOORFLAG_CLIP_TO_BBOX) { if (door->doorType == DOORTYPE_VERTICAL) { @@ -36466,7 +12356,7 @@ void door7F052B00(DoorRecord *door) { door->ptr_allocated_collisiondata_block->bottom = sp2C.m[3][1] + chrpropSumMatrixPosY(&door->bbox, &sp2C); - if (door->doorFlags & DOORFLAG_0001) + if (door->doorFlags & DOORFLAG_EXTENDEDY) { door->ptr_allocated_collisiondata_block->bottom -= 1000.0f; } @@ -36487,7 +12377,7 @@ void door7F052B00(DoorRecord *door) { door->ptr_allocated_collisiondata_block->top = sp2C.m[3][1] + chrpropSumMatrixNegY(&door->bbox, &sp2C); - if (door->doorFlags & DOORFLAG_0001) + if (door->doorFlags & DOORFLAG_EXTENDEDY) { door->ptr_allocated_collisiondata_block->top += 1000.0f; } @@ -36496,42 +12386,40 @@ void door7F052B00(DoorRecord *door) } - -#ifdef NONMATCHING /** - * NTSC address 0x7F052D8C. - * perfect dark void door0f08cb20(struct doorobj *door, Vtx *src, Vtx *dst, s32 numvertices) - * - * https://decomp.me/scratch/ccGWm -*/ -void sub_GAME_7F052D8C(DoorRecord *door) + * Address: 7F052D8C + * + * This function physically resizes sliding doors with DOORFLAG_CLIP_TO_BBOX as they move. + * When the door is opening, it shrinks. When the door is closing, it expands. + * This prevents z-fighting if the door's face is parallel with the suface it's sliding into. + * Examples include the brown security doors in Facility and the sliding stone doors in Egyptian and Temple. + */ +void doorBuildClippedVertices(DoorRecord *inDoor) { -#define CYCLIC_NEXT1ALT(j) (j + 1) % 4 -#define CYCLIC_NEXT2ALT(j) (j + 2) % 4 -#define CYCLIC_NEXT3ALT(j) (j + 3) % 4 - -#define CYCLIC_NEXT1(j) (j + 1) % 4 -#define CYCLIC_NEXT2(j) (j + 2) % 4 -#define CYCLIC_NEXT3(j) (j + 3) % 4 - - Model *mdl; - ModelNode *mdlDLCNode; + Model *mdl; + ModelNode *mdlDLCNode; struct ModelRoData_DisplayList_CollisionRecord *src; - struct ModelRwData_DisplayList_CollisionRecord *dst; - s16 cutoff; - s32 var_fp; - s32 j; - s32 k; + DoorRecord *door; + s32 k; + s16 cutoff; + s32 i; + s32 j; + Vertex *cur; + Vertex *n1; + Vertex *n2; + Vertex *n3; + Vertex *dcur; + Vertex *d1; + Vertex *d2; + Vertex *d3; - Vertex *psrc; - Vertex *pdst; - - if (door->doorFlags & DOORFLAG_0004) + if (inDoor->doorFlags & DOORFLAG_CLIP_TO_BBOX) { - mdl = door->model; - mdlDLCNode = mdl->obj->RootNode->Child->Child; //Get the DL + door = inDoor; + mdl = inDoor->model; + mdlDLCNode = mdl->obj->RootNode->Child->Child; src = (struct ModelRoData_DisplayList_CollisionRecord *)mdlDLCNode->Data; - dst = (struct ModelRwData_DisplayList_CollisionRecord *)modelGetNodeRwData(mdl, mdlDLCNode); + inDoor = (DoorRecord *)modelGetNodeRwData(mdl, mdlDLCNode); if (door->doorType == DOORTYPE_VERTICAL) { @@ -36542,72 +12430,76 @@ void sub_GAME_7F052D8C(DoorRecord *door) cutoff = door->bbox.Bounds.xmin + 0.5f; } - dst->Vertices = dynAllocate7F0BD6C4(src->numVertices); + ((struct ModelRwData_DisplayList_CollisionRecord *)inDoor)->Vertices = dynAllocateVertices(src->numVertices); - for (var_fp = 0; var_fp < src->numVertices / 4; var_fp++) //block of 4 vertices (quad) + for (i = 0; i < src->numVertices / 4; i++) { - for (j = 0; j < 4; j++) //for each vertex in block, move and clamp to bounding box, if clamped, move texture coords so it doesnt look "squished" + for (j = 0; j < 4; j++) { - psrc = &src->Vertices[var_fp * 4]; - pdst = &dst->Vertices[var_fp * 4]; + dcur = &(&((struct ModelRwData_DisplayList_CollisionRecord *)inDoor)->Vertices[i * 4])[j]; + d1 = &(&((struct ModelRwData_DisplayList_CollisionRecord *)inDoor)->Vertices[i * 4])[(j + 1) % 4]; + d2 = &(&((struct ModelRwData_DisplayList_CollisionRecord *)inDoor)->Vertices[i * 4])[(j + 2) % 4]; + d3 = &(&((struct ModelRwData_DisplayList_CollisionRecord *)inDoor)->Vertices[i * 4])[(j + 3) % 4]; + cur = &(&src->Vertices[i * 4])[j]; + n1 = &(&src->Vertices[i * 4])[(j + 1) % 4]; + n2 = &(&src->Vertices[i * 4])[(j + 2) % 4]; + n3 = &(&src->Vertices[i * 4])[(j + 3) % 4]; if (j == 0) { - pdst[j] = psrc[j]; - pdst[CYCLIC_NEXT1(j)] = psrc[CYCLIC_NEXT1(j)]; - pdst[CYCLIC_NEXT2(j)] = psrc[CYCLIC_NEXT2(j)]; - pdst[CYCLIC_NEXT3(j)] = psrc[CYCLIC_NEXT3(j)]; - // if (1); + *dcur = *cur; + *d1 = *n1; + *d2 = *n2; + *d3 = *n3; + if (1); } + // Rebuild the S/T coords for vertically sliding doors to mask the door's resizing. if (door->doorType == DOORTYPE_VERTICAL) { - //if current vtx is higher than "cutoff", clamp it to cutoff. - if (psrc[j].coord.y >= cutoff) + if (cur->coord.y >= cutoff) { - //if next and current x and z are equal AND y Not equal - Find the "below" vertex in a quad - if (psrc[CYCLIC_NEXT1(j)].coord.x == psrc[j].coord.x && psrc[CYCLIC_NEXT1(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT1(j)].coord.y != psrc[j].coord.y) + if (cur->coord.x == n1->coord.x && cur->coord.z == n1->coord.z && cur->coord.y != n1->coord.y) { - //InterpolatedValue = InitialValue + (Difference1) * (ChangeInValue) / (Difference2); - pdst[j].s = psrc[j].s + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT1(j)].s - psrc[j].s) / (psrc[j].coord.y - psrc[CYCLIC_NEXT1(j)].coord.y); - pdst[j].t = psrc[j].t + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT1(j)].t - psrc[j].t) / (psrc[j].coord.y - psrc[CYCLIC_NEXT1(j)].coord.y); + dcur->s = ((cur->coord.y - cutoff) * (n1->s - cur->s) / (cur->coord.y - n1->coord.y)) + cur->s; + dcur->t = ((cur->coord.y - cutoff) * (n1->t - cur->t) / (cur->coord.y - n1->coord.y)) + cur->t; } - else if (psrc[CYCLIC_NEXT2(j)].coord.x == psrc[j].coord.x && psrc[CYCLIC_NEXT2(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT2(j)].coord.y != psrc[j].coord.y) + else if (cur->coord.x == n2->coord.x && cur->coord.z == n2->coord.z && cur->coord.y != n2->coord.y) { - pdst[j].s = psrc[j].s + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT2(j)].s - psrc[j].s) / (psrc[j].coord.y - psrc[CYCLIC_NEXT2(j)].coord.y); - pdst[j].t = psrc[j].t + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT2(j)].t - psrc[j].t) / (psrc[j].coord.y - psrc[CYCLIC_NEXT2(j)].coord.y); + dcur->s = ((cur->coord.y - cutoff) * (n2->s - cur->s) / (cur->coord.y - n2->coord.y)) + cur->s; + dcur->t = ((cur->coord.y - cutoff) * (n2->t - cur->t) / (cur->coord.y - n2->coord.y)) + cur->t; } - else if (psrc[CYCLIC_NEXT3(j)].coord.x == psrc[j].coord.x && psrc[CYCLIC_NEXT3(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT3(j)].coord.y != psrc[j].coord.y) + else if (cur->coord.x == n3->coord.x && cur->coord.z == n3->coord.z && cur->coord.y != n3->coord.y) { - pdst[j].s = psrc[j].s + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT3(j)].s - psrc[j].s) / (psrc[j].coord.y - psrc[CYCLIC_NEXT3(j)].coord.y); - pdst[j].t = psrc[j].t + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT3(j)].t - psrc[j].t) / (psrc[j].coord.y - psrc[CYCLIC_NEXT3(j)].coord.y); + dcur->s = ((cur->coord.y - cutoff) * (n3->s - cur->s) / (cur->coord.y - n3->coord.y)) + cur->s; + dcur->t = ((cur->coord.y - cutoff) * (n3->t - cur->t) / (cur->coord.y - n3->coord.y)) + cur->t; } - pdst[j].coord.y = cutoff; + dcur->coord.y = cutoff; } } + // Rebuild the S/T coords for horizontally sliding doors. else { - if (psrc[j].coord.x <= cutoff) + if (cur->coord.x <= cutoff) { - //if next and current y and z are equal AND x Not equal - Find the "right" vertex in a quad - if (psrc[CYCLIC_NEXT1(j)].coord.y == psrc[j].coord.y && psrc[CYCLIC_NEXT1(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT1(j)].coord.x != psrc[j].coord.x) + if (cur->coord.y == n1->coord.y && cur->coord.z == n1->coord.z && cur->coord.x != n1->coord.x) { - pdst[j].s = psrc[j].s + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT1(j)].s - psrc[j].s) / (psrc[CYCLIC_NEXT1(j)].coord.x - psrc[j].coord.x); - pdst[j].t = psrc[j].t + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT1(j)].t - psrc[j].t) / (psrc[CYCLIC_NEXT1(j)].coord.x - psrc[j].coord.x); + dcur->s = ((cutoff - cur->coord.x) * (n1->s - cur->s) / (n1->coord.x - cur->coord.x)) + cur->s; + dcur->t = ((cutoff - cur->coord.x) * (n1->t - cur->t) / (n1->coord.x - cur->coord.x)) + cur->t; } - else if (psrc[CYCLIC_NEXT2(j)].coord.y == psrc[j].coord.y && psrc[CYCLIC_NEXT2(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT2(j)].coord.x != psrc[j].coord.x) + else if (cur->coord.y == n2->coord.y && cur->coord.z == n2->coord.z && cur->coord.x != n2->coord.x) { - pdst[j].s = psrc[j].s + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT2(j)].s - psrc[j].s) / (psrc[CYCLIC_NEXT2(j)].coord.x - psrc[j].coord.x); - pdst[j].t = psrc[j].t + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT2(j)].t - psrc[j].t) / (psrc[CYCLIC_NEXT2(j)].coord.x - psrc[j].coord.x); + dcur->s = ((cutoff - cur->coord.x) * (n2->s - cur->s) / (n2->coord.x - cur->coord.x)) + cur->s; + dcur->t = ((cutoff - cur->coord.x) * (n2->t - cur->t) / (n2->coord.x - cur->coord.x)) + cur->t; } - else if (psrc[CYCLIC_NEXT3(j)].coord.y == psrc[j].coord.y && psrc[CYCLIC_NEXT3(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT3(j)].coord.x != psrc[j].coord.x) + else if (cur->coord.y == n3->coord.y && cur->coord.z == n3->coord.z && cur->coord.x != n3->coord.x) { - pdst[j].s = psrc[j].s + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT3(j)].s - psrc[j].s) / (psrc[CYCLIC_NEXT3(j)].coord.x - psrc[j].coord.x); - pdst[j].t = psrc[j].t + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT3(j)].t - psrc[j].t) / (psrc[CYCLIC_NEXT3(j)].coord.x - psrc[j].coord.x); + dcur->s = ((cutoff - cur->coord.x) * (n3->s - cur->s) / (n3->coord.x - cur->coord.x)) + cur->s; + dcur->t = ((cutoff - cur->coord.x) * (n3->t - cur->t) / (n3->coord.x - cur->coord.x)) + cur->t; } - pdst[j].coord.x = cutoff; + dcur->coord.x = cutoff; } } } @@ -36615,571 +12507,6 @@ void sub_GAME_7F052D8C(DoorRecord *door) } } -#else -void sub_GAME_7F052D8C(DoorRecord*); -GLOBAL_ASM( -.text -glabel sub_GAME_7F052D8C -/* 0878BC 7F052D8C 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0878C0 7F052D90 AFBF003C */ sw $ra, 0x3c($sp) -/* 0878C4 7F052D94 AFBE0038 */ sw $fp, 0x38($sp) -/* 0878C8 7F052D98 AFB70034 */ sw $s7, 0x34($sp) -/* 0878CC 7F052D9C AFB60030 */ sw $s6, 0x30($sp) -/* 0878D0 7F052DA0 AFB5002C */ sw $s5, 0x2c($sp) -/* 0878D4 7F052DA4 AFB40028 */ sw $s4, 0x28($sp) -/* 0878D8 7F052DA8 AFB30024 */ sw $s3, 0x24($sp) -/* 0878DC 7F052DAC AFB20020 */ sw $s2, 0x20($sp) -/* 0878E0 7F052DB0 AFB1001C */ sw $s1, 0x1c($sp) -/* 0878E4 7F052DB4 AFB00018 */ sw $s0, 0x18($sp) -/* 0878E8 7F052DB8 948E0098 */ lhu $t6, 0x98($a0) -/* 0878EC 7F052DBC 0080B025 */ move $s6, $a0 -/* 0878F0 7F052DC0 31CF0004 */ andi $t7, $t6, 4 -/* 0878F4 7F052DC4 51E001E9 */ beql $t7, $zero, .L7F05356C -/* 0878F8 7F052DC8 8FBF003C */ lw $ra, 0x3c($sp) -/* 0878FC 7F052DCC 8C840014 */ lw $a0, 0x14($a0) -/* 087900 7F052DD0 8C980008 */ lw $t8, 8($a0) -/* 087904 7F052DD4 8F190000 */ lw $t9, ($t8) -/* 087908 7F052DD8 8F2E0014 */ lw $t6, 0x14($t9) -/* 08790C 7F052DDC 8DC50014 */ lw $a1, 0x14($t6) -/* 087910 7F052DE0 0FC1B1E7 */ jal modelGetNodeRwData -/* 087914 7F052DE4 8CB50004 */ lw $s5, 4($a1) -/* 087918 7F052DE8 96CF009A */ lhu $t7, 0x9a($s6) -/* 08791C 7F052DEC 24140004 */ li $s4, 4 -/* 087920 7F052DF0 0040B825 */ move $s7, $v0 -/* 087924 7F052DF4 168F000B */ bne $s4, $t7, .L7F052E24 -/* 087928 7F052DF8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 08792C 7F052DFC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 087930 7F052E00 44813000 */ mtc1 $at, $f6 -/* 087934 7F052E04 C6C400E0 */ lwc1 $f4, 0xe0($s6) -/* 087938 7F052E08 46062200 */ add.s $f8, $f4, $f6 -/* 08793C 7F052E0C 4600428D */ trunc.w.s $f10, $f8 -/* 087940 7F052E10 440D5000 */ mfc1 $t5, $f10 -/* 087944 7F052E14 00000000 */ nop -/* 087948 7F052E18 000DCC00 */ sll $t9, $t5, 0x10 -/* 08794C 7F052E1C 1000000A */ b .L7F052E48 -/* 087950 7F052E20 00196C03 */ sra $t5, $t9, 0x10 -.L7F052E24: -/* 087954 7F052E24 C6D000D4 */ lwc1 $f16, 0xd4($s6) -/* 087958 7F052E28 44819000 */ mtc1 $at, $f18 -/* 08795C 7F052E2C 00000000 */ nop -/* 087960 7F052E30 46128100 */ add.s $f4, $f16, $f18 -/* 087964 7F052E34 4600218D */ trunc.w.s $f6, $f4 -/* 087968 7F052E38 440D3000 */ mfc1 $t5, $f6 -/* 08796C 7F052E3C 00000000 */ nop -/* 087970 7F052E40 000DC400 */ sll $t8, $t5, 0x10 -/* 087974 7F052E44 00186C03 */ sra $t5, $t8, 0x10 -.L7F052E48: -/* 087978 7F052E48 86A4000C */ lh $a0, 0xc($s5) -/* 08797C 7F052E4C 0FC2F5B1 */ jal dynAllocate7F0BD6C4 -/* 087980 7F052E50 A7AD0042 */ sh $t5, 0x42($sp) -/* 087984 7F052E54 87AD0042 */ lh $t5, 0x42($sp) -/* 087988 7F052E58 AEE20000 */ sw $v0, ($s7) -/* 08798C 7F052E5C 86AE000C */ lh $t6, 0xc($s5) -/* 087990 7F052E60 00001825 */ move $v1, $zero -/* 087994 7F052E64 0000F025 */ move $fp, $zero -/* 087998 7F052E68 05C10003 */ bgez $t6, .L7F052E78 -/* 08799C 7F052E6C 000E7883 */ sra $t7, $t6, 2 -/* 0879A0 7F052E70 25C10003 */ addiu $at, $t6, 3 -/* 0879A4 7F052E74 00017883 */ sra $t7, $at, 2 -.L7F052E78: -/* 0879A8 7F052E78 19E001BB */ blez $t7, .L7F053568 -/* 0879AC 7F052E7C 00001825 */ move $v1, $zero -.L7F052E80: -/* 0879B0 7F052E80 001E9900 */ sll $s3, $fp, 4 -.L7F052E84: -/* 0879B4 7F052E84 8EF80000 */ lw $t8, ($s7) -/* 0879B8 7F052E88 24670002 */ addiu $a3, $v1, 2 -/* 0879BC 7F052E8C 246C0003 */ addiu $t4, $v1, 3 -/* 0879C0 7F052E90 03131021 */ addu $v0, $t8, $s3 -/* 0879C4 7F052E94 24720001 */ addiu $s2, $v1, 1 -/* 0879C8 7F052E98 00032100 */ sll $a0, $v1, 4 -/* 0879CC 7F052E9C 00445821 */ addu $t3, $v0, $a0 -/* 0879D0 7F052EA0 06410004 */ bgez $s2, .L7F052EB4 -/* 0879D4 7F052EA4 32450003 */ andi $a1, $s2, 3 -/* 0879D8 7F052EA8 10A00002 */ beqz $a1, .L7F052EB4 -/* 0879DC 7F052EAC 00000000 */ nop -/* 0879E0 7F052EB0 24A5FFFC */ addiu $a1, $a1, -4 -.L7F052EB4: -/* 0879E4 7F052EB4 0005C900 */ sll $t9, $a1, 4 -/* 0879E8 7F052EB8 03202825 */ move $a1, $t9 -/* 0879EC 7F052EBC 0059F821 */ addu $ra, $v0, $t9 -/* 0879F0 7F052EC0 04E10004 */ bgez $a3, .L7F052ED4 -/* 0879F4 7F052EC4 30EE0003 */ andi $t6, $a3, 3 -/* 0879F8 7F052EC8 11C00002 */ beqz $t6, .L7F052ED4 -/* 0879FC 7F052ECC 00000000 */ nop -/* 087A00 7F052ED0 25CEFFFC */ addiu $t6, $t6, -4 -.L7F052ED4: -/* 087A04 7F052ED4 000E7900 */ sll $t7, $t6, 4 -/* 087A08 7F052ED8 8EAE0008 */ lw $t6, 8($s5) -/* 087A0C 7F052EDC 01E03825 */ move $a3, $t7 -/* 087A10 7F052EE0 004F8021 */ addu $s0, $v0, $t7 -/* 087A14 7F052EE4 01D34821 */ addu $t1, $t6, $s3 -/* 087A18 7F052EE8 05810004 */ bgez $t4, .L7F052EFC -/* 087A1C 7F052EEC 31980003 */ andi $t8, $t4, 3 -/* 087A20 7F052EF0 13000002 */ beqz $t8, .L7F052EFC -/* 087A24 7F052EF4 00000000 */ nop -/* 087A28 7F052EF8 2718FFFC */ addiu $t8, $t8, -4 -.L7F052EFC: -/* 087A2C 7F052EFC 00186100 */ sll $t4, $t8, 4 -/* 087A30 7F052F00 01275021 */ addu $t2, $t1, $a3 -/* 087A34 7F052F04 004C8821 */ addu $s1, $v0, $t4 -/* 087A38 7F052F08 01243021 */ addu $a2, $t1, $a0 -/* 087A3C 7F052F0C 01254021 */ addu $t0, $t1, $a1 -/* 087A40 7F052F10 14600021 */ bnez $v1, .L7F052F98 -/* 087A44 7F052F14 012C3821 */ addu $a3, $t1, $t4 -/* 087A48 7F052F18 8CC10000 */ lw $at, ($a2) -/* 087A4C 7F052F1C AD610000 */ sw $at, ($t3) -/* 087A50 7F052F20 8CD80004 */ lw $t8, 4($a2) -/* 087A54 7F052F24 AD780004 */ sw $t8, 4($t3) -/* 087A58 7F052F28 8CC10008 */ lw $at, 8($a2) -/* 087A5C 7F052F2C AD610008 */ sw $at, 8($t3) -/* 087A60 7F052F30 8CD8000C */ lw $t8, 0xc($a2) -/* 087A64 7F052F34 AD78000C */ sw $t8, 0xc($t3) -/* 087A68 7F052F38 8D010000 */ lw $at, ($t0) -/* 087A6C 7F052F3C AFE10000 */ sw $at, ($ra) -/* 087A70 7F052F40 8D0E0004 */ lw $t6, 4($t0) -/* 087A74 7F052F44 AFEE0004 */ sw $t6, 4($ra) -/* 087A78 7F052F48 8D010008 */ lw $at, 8($t0) -/* 087A7C 7F052F4C AFE10008 */ sw $at, 8($ra) -/* 087A80 7F052F50 8D0E000C */ lw $t6, 0xc($t0) -/* 087A84 7F052F54 AFEE000C */ sw $t6, 0xc($ra) -/* 087A88 7F052F58 8D410000 */ lw $at, ($t2) -/* 087A8C 7F052F5C AE010000 */ sw $at, ($s0) -/* 087A90 7F052F60 8D580004 */ lw $t8, 4($t2) -/* 087A94 7F052F64 AE180004 */ sw $t8, 4($s0) -/* 087A98 7F052F68 8D410008 */ lw $at, 8($t2) -/* 087A9C 7F052F6C AE010008 */ sw $at, 8($s0) -/* 087AA0 7F052F70 8D58000C */ lw $t8, 0xc($t2) -/* 087AA4 7F052F74 AE18000C */ sw $t8, 0xc($s0) -/* 087AA8 7F052F78 8CE10000 */ lw $at, ($a3) -/* 087AAC 7F052F7C AE210000 */ sw $at, ($s1) -/* 087AB0 7F052F80 8CEE0004 */ lw $t6, 4($a3) -/* 087AB4 7F052F84 AE2E0004 */ sw $t6, 4($s1) -/* 087AB8 7F052F88 8CE10008 */ lw $at, 8($a3) -/* 087ABC 7F052F8C AE210008 */ sw $at, 8($s1) -/* 087AC0 7F052F90 8CEE000C */ lw $t6, 0xc($a3) -/* 087AC4 7F052F94 AE2E000C */ sw $t6, 0xc($s1) -.L7F052F98: -/* 087AC8 7F052F98 96CF009A */ lhu $t7, 0x9a($s6) -/* 087ACC 7F052F9C 568F00B5 */ bnel $s4, $t7, .L7F053274 -/* 087AD0 7F052FA0 84C50000 */ lh $a1, ($a2) -/* 087AD4 7F052FA4 84C40002 */ lh $a0, 2($a2) -/* 087AD8 7F052FA8 008D082A */ slt $at, $a0, $t5 -/* 087ADC 7F052FAC 14200162 */ bnez $at, .L7F053538 -/* 087AE0 7F052FB0 00000000 */ nop -/* 087AE4 7F052FB4 84C50000 */ lh $a1, ($a2) -/* 087AE8 7F052FB8 85180000 */ lh $t8, ($t0) -/* 087AEC 7F052FBC 57050039 */ bnel $t8, $a1, .L7F0530A4 -/* 087AF0 7F052FC0 85590000 */ lh $t9, ($t2) -/* 087AF4 7F052FC4 85190004 */ lh $t9, 4($t0) -/* 087AF8 7F052FC8 84CE0004 */ lh $t6, 4($a2) -/* 087AFC 7F052FCC 572E0035 */ bnel $t9, $t6, .L7F0530A4 -/* 087B00 7F052FD0 85590000 */ lh $t9, ($t2) -/* 087B04 7F052FD4 85090002 */ lh $t1, 2($t0) -/* 087B08 7F052FD8 51240032 */ beql $t1, $a0, .L7F0530A4 -/* 087B0C 7F052FDC 85590000 */ lh $t9, ($t2) -/* 087B10 7F052FE0 84C20008 */ lh $v0, 8($a2) -/* 087B14 7F052FE4 85180008 */ lh $t8, 8($t0) -/* 087B18 7F052FE8 008D7823 */ subu $t7, $a0, $t5 -/* 087B1C 7F052FEC 0302C823 */ subu $t9, $t8, $v0 -/* 087B20 7F052FF0 01F90019 */ multu $t7, $t9 -/* 087B24 7F052FF4 0089C023 */ subu $t8, $a0, $t1 -/* 087B28 7F052FF8 00007012 */ mflo $t6 -/* 087B2C 7F052FFC 00000000 */ nop -/* 087B30 7F053000 00000000 */ nop -/* 087B34 7F053004 01D8001A */ div $zero, $t6, $t8 -/* 087B38 7F053008 00007812 */ mflo $t7 -/* 087B3C 7F05300C 01E2C821 */ addu $t9, $t7, $v0 -/* 087B40 7F053010 A5790008 */ sh $t9, 8($t3) -/* 087B44 7F053014 17000002 */ bnez $t8, .L7F053020 -/* 087B48 7F053018 00000000 */ nop -/* 087B4C 7F05301C 0007000D */ break 7 -.L7F053020: -/* 087B50 7F053020 2401FFFF */ li $at, -1 -/* 087B54 7F053024 17010004 */ bne $t8, $at, .L7F053038 -/* 087B58 7F053028 3C018000 */ lui $at, 0x8000 -/* 087B5C 7F05302C 15C10002 */ bne $t6, $at, .L7F053038 -/* 087B60 7F053030 00000000 */ nop -/* 087B64 7F053034 0006000D */ break 6 -.L7F053038: -/* 087B68 7F053038 8518000A */ lh $t8, 0xa($t0) -/* 087B6C 7F05303C 84C3000A */ lh $v1, 0xa($a2) -/* 087B70 7F053040 84C40002 */ lh $a0, 2($a2) -/* 087B74 7F053044 03037823 */ subu $t7, $t8, $v1 -/* 087B78 7F053048 008D7023 */ subu $t6, $a0, $t5 -/* 087B7C 7F05304C 01CF0019 */ multu $t6, $t7 -/* 087B80 7F053050 85180002 */ lh $t8, 2($t0) -/* 087B84 7F053054 00987023 */ subu $t6, $a0, $t8 -/* 087B88 7F053058 0000C812 */ mflo $t9 -/* 087B8C 7F05305C 00000000 */ nop -/* 087B90 7F053060 00000000 */ nop -/* 087B94 7F053064 032E001A */ div $zero, $t9, $t6 -/* 087B98 7F053068 00007812 */ mflo $t7 -/* 087B9C 7F05306C 01E3C021 */ addu $t8, $t7, $v1 -/* 087BA0 7F053070 15C00002 */ bnez $t6, .L7F05307C -/* 087BA4 7F053074 00000000 */ nop -/* 087BA8 7F053078 0007000D */ break 7 -.L7F05307C: -/* 087BAC 7F05307C 2401FFFF */ li $at, -1 -/* 087BB0 7F053080 15C10004 */ bne $t6, $at, .L7F053094 -/* 087BB4 7F053084 3C018000 */ lui $at, 0x8000 -/* 087BB8 7F053088 17210002 */ bne $t9, $at, .L7F053094 -/* 087BBC 7F05308C 00000000 */ nop -/* 087BC0 7F053090 0006000D */ break 6 -.L7F053094: -/* 087BC4 7F053094 A578000A */ sh $t8, 0xa($t3) -/* 087BC8 7F053098 10000073 */ b .L7F053268 -/* 087BCC 7F05309C 00000000 */ nop -/* 087BD0 7F0530A0 85590000 */ lh $t9, ($t2) -.L7F0530A4: -/* 087BD4 7F0530A4 57250039 */ bnel $t9, $a1, .L7F05318C -/* 087BD8 7F0530A8 84EE0000 */ lh $t6, ($a3) -/* 087BDC 7F0530AC 854E0004 */ lh $t6, 4($t2) -/* 087BE0 7F0530B0 84CF0004 */ lh $t7, 4($a2) -/* 087BE4 7F0530B4 55CF0035 */ bnel $t6, $t7, .L7F05318C -/* 087BE8 7F0530B8 84EE0000 */ lh $t6, ($a3) -/* 087BEC 7F0530BC 85480002 */ lh $t0, 2($t2) -/* 087BF0 7F0530C0 51040032 */ beql $t0, $a0, .L7F05318C -/* 087BF4 7F0530C4 84EE0000 */ lh $t6, ($a3) -/* 087BF8 7F0530C8 84C20008 */ lh $v0, 8($a2) -/* 087BFC 7F0530CC 85590008 */ lh $t9, 8($t2) -/* 087C00 7F0530D0 008DC023 */ subu $t8, $a0, $t5 -/* 087C04 7F0530D4 03227023 */ subu $t6, $t9, $v0 -/* 087C08 7F0530D8 030E0019 */ multu $t8, $t6 -/* 087C0C 7F0530DC 0088C823 */ subu $t9, $a0, $t0 -/* 087C10 7F0530E0 00007812 */ mflo $t7 -/* 087C14 7F0530E4 00000000 */ nop -/* 087C18 7F0530E8 00000000 */ nop -/* 087C1C 7F0530EC 01F9001A */ div $zero, $t7, $t9 -/* 087C20 7F0530F0 0000C012 */ mflo $t8 -/* 087C24 7F0530F4 03027021 */ addu $t6, $t8, $v0 -/* 087C28 7F0530F8 A56E0008 */ sh $t6, 8($t3) -/* 087C2C 7F0530FC 17200002 */ bnez $t9, .L7F053108 -/* 087C30 7F053100 00000000 */ nop -/* 087C34 7F053104 0007000D */ break 7 -.L7F053108: -/* 087C38 7F053108 2401FFFF */ li $at, -1 -/* 087C3C 7F05310C 17210004 */ bne $t9, $at, .L7F053120 -/* 087C40 7F053110 3C018000 */ lui $at, 0x8000 -/* 087C44 7F053114 15E10002 */ bne $t7, $at, .L7F053120 -/* 087C48 7F053118 00000000 */ nop -/* 087C4C 7F05311C 0006000D */ break 6 -.L7F053120: -/* 087C50 7F053120 8559000A */ lh $t9, 0xa($t2) -/* 087C54 7F053124 84C3000A */ lh $v1, 0xa($a2) -/* 087C58 7F053128 84C40002 */ lh $a0, 2($a2) -/* 087C5C 7F05312C 0323C023 */ subu $t8, $t9, $v1 -/* 087C60 7F053130 008D7823 */ subu $t7, $a0, $t5 -/* 087C64 7F053134 01F80019 */ multu $t7, $t8 -/* 087C68 7F053138 85590002 */ lh $t9, 2($t2) -/* 087C6C 7F05313C 00997823 */ subu $t7, $a0, $t9 -/* 087C70 7F053140 00007012 */ mflo $t6 -/* 087C74 7F053144 00000000 */ nop -/* 087C78 7F053148 00000000 */ nop -/* 087C7C 7F05314C 01CF001A */ div $zero, $t6, $t7 -/* 087C80 7F053150 0000C012 */ mflo $t8 -/* 087C84 7F053154 0303C821 */ addu $t9, $t8, $v1 -/* 087C88 7F053158 15E00002 */ bnez $t7, .L7F053164 -/* 087C8C 7F05315C 00000000 */ nop -/* 087C90 7F053160 0007000D */ break 7 -.L7F053164: -/* 087C94 7F053164 2401FFFF */ li $at, -1 -/* 087C98 7F053168 15E10004 */ bne $t7, $at, .L7F05317C -/* 087C9C 7F05316C 3C018000 */ lui $at, 0x8000 -/* 087CA0 7F053170 15C10002 */ bne $t6, $at, .L7F05317C -/* 087CA4 7F053174 00000000 */ nop -/* 087CA8 7F053178 0006000D */ break 6 -.L7F05317C: -/* 087CAC 7F05317C A579000A */ sh $t9, 0xa($t3) -/* 087CB0 7F053180 10000039 */ b .L7F053268 -/* 087CB4 7F053184 00000000 */ nop -/* 087CB8 7F053188 84EE0000 */ lh $t6, ($a3) -.L7F05318C: -/* 087CBC 7F05318C 15C50036 */ bne $t6, $a1, .L7F053268 -/* 087CC0 7F053190 00000000 */ nop -/* 087CC4 7F053194 84EF0004 */ lh $t7, 4($a3) -/* 087CC8 7F053198 84D80004 */ lh $t8, 4($a2) -/* 087CCC 7F05319C 15F80032 */ bne $t7, $t8, .L7F053268 -/* 087CD0 7F0531A0 00000000 */ nop -/* 087CD4 7F0531A4 84E50002 */ lh $a1, 2($a3) -/* 087CD8 7F0531A8 10A4002F */ beq $a1, $a0, .L7F053268 -/* 087CDC 7F0531AC 00000000 */ nop -/* 087CE0 7F0531B0 84C20008 */ lh $v0, 8($a2) -/* 087CE4 7F0531B4 84EE0008 */ lh $t6, 8($a3) -/* 087CE8 7F0531B8 008DC823 */ subu $t9, $a0, $t5 -/* 087CEC 7F0531BC 01C27823 */ subu $t7, $t6, $v0 -/* 087CF0 7F0531C0 032F0019 */ multu $t9, $t7 -/* 087CF4 7F0531C4 00857023 */ subu $t6, $a0, $a1 -/* 087CF8 7F0531C8 0000C012 */ mflo $t8 -/* 087CFC 7F0531CC 00000000 */ nop -/* 087D00 7F0531D0 00000000 */ nop -/* 087D04 7F0531D4 030E001A */ div $zero, $t8, $t6 -/* 087D08 7F0531D8 0000C812 */ mflo $t9 -/* 087D0C 7F0531DC 03227821 */ addu $t7, $t9, $v0 -/* 087D10 7F0531E0 A56F0008 */ sh $t7, 8($t3) -/* 087D14 7F0531E4 15C00002 */ bnez $t6, .L7F0531F0 -/* 087D18 7F0531E8 00000000 */ nop -/* 087D1C 7F0531EC 0007000D */ break 7 -.L7F0531F0: -/* 087D20 7F0531F0 2401FFFF */ li $at, -1 -/* 087D24 7F0531F4 15C10004 */ bne $t6, $at, .L7F053208 -/* 087D28 7F0531F8 3C018000 */ lui $at, 0x8000 -/* 087D2C 7F0531FC 17010002 */ bne $t8, $at, .L7F053208 -/* 087D30 7F053200 00000000 */ nop -/* 087D34 7F053204 0006000D */ break 6 -.L7F053208: -/* 087D38 7F053208 84EE000A */ lh $t6, 0xa($a3) -/* 087D3C 7F05320C 84C3000A */ lh $v1, 0xa($a2) -/* 087D40 7F053210 84C40002 */ lh $a0, 2($a2) -/* 087D44 7F053214 01C3C823 */ subu $t9, $t6, $v1 -/* 087D48 7F053218 008DC023 */ subu $t8, $a0, $t5 -/* 087D4C 7F05321C 03190019 */ multu $t8, $t9 -/* 087D50 7F053220 84EE0002 */ lh $t6, 2($a3) -/* 087D54 7F053224 008EC023 */ subu $t8, $a0, $t6 -/* 087D58 7F053228 00007812 */ mflo $t7 -/* 087D5C 7F05322C 00000000 */ nop -/* 087D60 7F053230 00000000 */ nop -/* 087D64 7F053234 01F8001A */ div $zero, $t7, $t8 -/* 087D68 7F053238 0000C812 */ mflo $t9 -/* 087D6C 7F05323C 03237021 */ addu $t6, $t9, $v1 -/* 087D70 7F053240 A56E000A */ sh $t6, 0xa($t3) -/* 087D74 7F053244 17000002 */ bnez $t8, .L7F053250 -/* 087D78 7F053248 00000000 */ nop -/* 087D7C 7F05324C 0007000D */ break 7 -.L7F053250: -/* 087D80 7F053250 2401FFFF */ li $at, -1 -/* 087D84 7F053254 17010004 */ bne $t8, $at, .L7F053268 -/* 087D88 7F053258 3C018000 */ lui $at, 0x8000 -/* 087D8C 7F05325C 15E10002 */ bne $t7, $at, .L7F053268 -/* 087D90 7F053260 00000000 */ nop -/* 087D94 7F053264 0006000D */ break 6 -.L7F053268: -/* 087D98 7F053268 100000B3 */ b .L7F053538 -/* 087D9C 7F05326C A56D0002 */ sh $t5, 2($t3) -/* 087DA0 7F053270 84C50000 */ lh $a1, ($a2) -.L7F053274: -/* 087DA4 7F053274 01A5082A */ slt $at, $t5, $a1 -/* 087DA8 7F053278 142000AF */ bnez $at, .L7F053538 -/* 087DAC 7F05327C 00000000 */ nop -/* 087DB0 7F053280 84C40002 */ lh $a0, 2($a2) -/* 087DB4 7F053284 850F0002 */ lh $t7, 2($t0) -/* 087DB8 7F053288 55E40039 */ bnel $t7, $a0, .L7F053370 -/* 087DBC 7F05328C 85580002 */ lh $t8, 2($t2) -/* 087DC0 7F053290 85180004 */ lh $t8, 4($t0) -/* 087DC4 7F053294 84D90004 */ lh $t9, 4($a2) -/* 087DC8 7F053298 57190035 */ bnel $t8, $t9, .L7F053370 -/* 087DCC 7F05329C 85580002 */ lh $t8, 2($t2) -/* 087DD0 7F0532A0 85090000 */ lh $t1, ($t0) -/* 087DD4 7F0532A4 51250032 */ beql $t1, $a1, .L7F053370 -/* 087DD8 7F0532A8 85580002 */ lh $t8, 2($t2) -/* 087DDC 7F0532AC 84C20008 */ lh $v0, 8($a2) -/* 087DE0 7F0532B0 850F0008 */ lh $t7, 8($t0) -/* 087DE4 7F0532B4 01A57023 */ subu $t6, $t5, $a1 -/* 087DE8 7F0532B8 01E2C023 */ subu $t8, $t7, $v0 -/* 087DEC 7F0532BC 01D80019 */ multu $t6, $t8 -/* 087DF0 7F0532C0 01257823 */ subu $t7, $t1, $a1 -/* 087DF4 7F0532C4 0000C812 */ mflo $t9 -/* 087DF8 7F0532C8 00000000 */ nop -/* 087DFC 7F0532CC 00000000 */ nop -/* 087E00 7F0532D0 032F001A */ div $zero, $t9, $t7 -/* 087E04 7F0532D4 00007012 */ mflo $t6 -/* 087E08 7F0532D8 01C2C021 */ addu $t8, $t6, $v0 -/* 087E0C 7F0532DC A5780008 */ sh $t8, 8($t3) -/* 087E10 7F0532E0 15E00002 */ bnez $t7, .L7F0532EC -/* 087E14 7F0532E4 00000000 */ nop -/* 087E18 7F0532E8 0007000D */ break 7 -.L7F0532EC: -/* 087E1C 7F0532EC 2401FFFF */ li $at, -1 -/* 087E20 7F0532F0 15E10004 */ bne $t7, $at, .L7F053304 -/* 087E24 7F0532F4 3C018000 */ lui $at, 0x8000 -/* 087E28 7F0532F8 17210002 */ bne $t9, $at, .L7F053304 -/* 087E2C 7F0532FC 00000000 */ nop -/* 087E30 7F053300 0006000D */ break 6 -.L7F053304: -/* 087E34 7F053304 850F000A */ lh $t7, 0xa($t0) -/* 087E38 7F053308 84C3000A */ lh $v1, 0xa($a2) -/* 087E3C 7F05330C 84C50000 */ lh $a1, ($a2) -/* 087E40 7F053310 01E37023 */ subu $t6, $t7, $v1 -/* 087E44 7F053314 01A5C823 */ subu $t9, $t5, $a1 -/* 087E48 7F053318 032E0019 */ multu $t9, $t6 -/* 087E4C 7F05331C 850F0000 */ lh $t7, ($t0) -/* 087E50 7F053320 01E5C823 */ subu $t9, $t7, $a1 -/* 087E54 7F053324 0000C012 */ mflo $t8 -/* 087E58 7F053328 00000000 */ nop -/* 087E5C 7F05332C 00000000 */ nop -/* 087E60 7F053330 0319001A */ div $zero, $t8, $t9 -/* 087E64 7F053334 00007012 */ mflo $t6 -/* 087E68 7F053338 01C37821 */ addu $t7, $t6, $v1 -/* 087E6C 7F05333C 17200002 */ bnez $t9, .L7F053348 -/* 087E70 7F053340 00000000 */ nop -/* 087E74 7F053344 0007000D */ break 7 -.L7F053348: -/* 087E78 7F053348 2401FFFF */ li $at, -1 -/* 087E7C 7F05334C 17210004 */ bne $t9, $at, .L7F053360 -/* 087E80 7F053350 3C018000 */ lui $at, 0x8000 -/* 087E84 7F053354 17010002 */ bne $t8, $at, .L7F053360 -/* 087E88 7F053358 00000000 */ nop -/* 087E8C 7F05335C 0006000D */ break 6 -.L7F053360: -/* 087E90 7F053360 A56F000A */ sh $t7, 0xa($t3) -/* 087E94 7F053364 10000074 */ b .L7F053538 -/* 087E98 7F053368 A56D0000 */ sh $t5, ($t3) -/* 087E9C 7F05336C 85580002 */ lh $t8, 2($t2) -.L7F053370: -/* 087EA0 7F053370 57040039 */ bnel $t8, $a0, .L7F053458 -/* 087EA4 7F053374 84F90002 */ lh $t9, 2($a3) -/* 087EA8 7F053378 85590004 */ lh $t9, 4($t2) -/* 087EAC 7F05337C 84CE0004 */ lh $t6, 4($a2) -/* 087EB0 7F053380 572E0035 */ bnel $t9, $t6, .L7F053458 -/* 087EB4 7F053384 84F90002 */ lh $t9, 2($a3) -/* 087EB8 7F053388 85480000 */ lh $t0, ($t2) -/* 087EBC 7F05338C 51050032 */ beql $t0, $a1, .L7F053458 -/* 087EC0 7F053390 84F90002 */ lh $t9, 2($a3) -/* 087EC4 7F053394 84C20008 */ lh $v0, 8($a2) -/* 087EC8 7F053398 85580008 */ lh $t8, 8($t2) -/* 087ECC 7F05339C 01A57823 */ subu $t7, $t5, $a1 -/* 087ED0 7F0533A0 0302C823 */ subu $t9, $t8, $v0 -/* 087ED4 7F0533A4 01F90019 */ multu $t7, $t9 -/* 087ED8 7F0533A8 0105C023 */ subu $t8, $t0, $a1 -/* 087EDC 7F0533AC 00007012 */ mflo $t6 -/* 087EE0 7F0533B0 00000000 */ nop -/* 087EE4 7F0533B4 00000000 */ nop -/* 087EE8 7F0533B8 01D8001A */ div $zero, $t6, $t8 -/* 087EEC 7F0533BC 00007812 */ mflo $t7 -/* 087EF0 7F0533C0 01E2C821 */ addu $t9, $t7, $v0 -/* 087EF4 7F0533C4 A5790008 */ sh $t9, 8($t3) -/* 087EF8 7F0533C8 17000002 */ bnez $t8, .L7F0533D4 -/* 087EFC 7F0533CC 00000000 */ nop -/* 087F00 7F0533D0 0007000D */ break 7 -.L7F0533D4: -/* 087F04 7F0533D4 2401FFFF */ li $at, -1 -/* 087F08 7F0533D8 17010004 */ bne $t8, $at, .L7F0533EC -/* 087F0C 7F0533DC 3C018000 */ lui $at, 0x8000 -/* 087F10 7F0533E0 15C10002 */ bne $t6, $at, .L7F0533EC -/* 087F14 7F0533E4 00000000 */ nop -/* 087F18 7F0533E8 0006000D */ break 6 -.L7F0533EC: -/* 087F1C 7F0533EC 8558000A */ lh $t8, 0xa($t2) -/* 087F20 7F0533F0 84C3000A */ lh $v1, 0xa($a2) -/* 087F24 7F0533F4 84C50000 */ lh $a1, ($a2) -/* 087F28 7F0533F8 03037823 */ subu $t7, $t8, $v1 -/* 087F2C 7F0533FC 01A57023 */ subu $t6, $t5, $a1 -/* 087F30 7F053400 01CF0019 */ multu $t6, $t7 -/* 087F34 7F053404 85580000 */ lh $t8, ($t2) -/* 087F38 7F053408 03057023 */ subu $t6, $t8, $a1 -/* 087F3C 7F05340C 0000C812 */ mflo $t9 -/* 087F40 7F053410 00000000 */ nop -/* 087F44 7F053414 00000000 */ nop -/* 087F48 7F053418 032E001A */ div $zero, $t9, $t6 -/* 087F4C 7F05341C 00007812 */ mflo $t7 -/* 087F50 7F053420 01E3C021 */ addu $t8, $t7, $v1 -/* 087F54 7F053424 15C00002 */ bnez $t6, .L7F053430 -/* 087F58 7F053428 00000000 */ nop -/* 087F5C 7F05342C 0007000D */ break 7 -.L7F053430: -/* 087F60 7F053430 2401FFFF */ li $at, -1 -/* 087F64 7F053434 15C10004 */ bne $t6, $at, .L7F053448 -/* 087F68 7F053438 3C018000 */ lui $at, 0x8000 -/* 087F6C 7F05343C 17210002 */ bne $t9, $at, .L7F053448 -/* 087F70 7F053440 00000000 */ nop -/* 087F74 7F053444 0006000D */ break 6 -.L7F053448: -/* 087F78 7F053448 A578000A */ sh $t8, 0xa($t3) -/* 087F7C 7F05344C 1000003A */ b .L7F053538 -/* 087F80 7F053450 A56D0000 */ sh $t5, ($t3) -/* 087F84 7F053454 84F90002 */ lh $t9, 2($a3) -.L7F053458: -/* 087F88 7F053458 57240037 */ bnel $t9, $a0, .L7F053538 -/* 087F8C 7F05345C A56D0000 */ sh $t5, ($t3) -/* 087F90 7F053460 84EE0004 */ lh $t6, 4($a3) -/* 087F94 7F053464 84CF0004 */ lh $t7, 4($a2) -/* 087F98 7F053468 55CF0033 */ bnel $t6, $t7, .L7F053538 -/* 087F9C 7F05346C A56D0000 */ sh $t5, ($t3) -/* 087FA0 7F053470 84E40000 */ lh $a0, ($a3) -/* 087FA4 7F053474 50850030 */ beql $a0, $a1, .L7F053538 -/* 087FA8 7F053478 A56D0000 */ sh $t5, ($t3) -/* 087FAC 7F05347C 84C20008 */ lh $v0, 8($a2) -/* 087FB0 7F053480 84F90008 */ lh $t9, 8($a3) -/* 087FB4 7F053484 01A5C023 */ subu $t8, $t5, $a1 -/* 087FB8 7F053488 03227023 */ subu $t6, $t9, $v0 -/* 087FBC 7F05348C 030E0019 */ multu $t8, $t6 -/* 087FC0 7F053490 0085C823 */ subu $t9, $a0, $a1 -/* 087FC4 7F053494 00007812 */ mflo $t7 -/* 087FC8 7F053498 00000000 */ nop -/* 087FCC 7F05349C 00000000 */ nop -/* 087FD0 7F0534A0 01F9001A */ div $zero, $t7, $t9 -/* 087FD4 7F0534A4 0000C012 */ mflo $t8 -/* 087FD8 7F0534A8 03027021 */ addu $t6, $t8, $v0 -/* 087FDC 7F0534AC A56E0008 */ sh $t6, 8($t3) -/* 087FE0 7F0534B0 17200002 */ bnez $t9, .L7F0534BC -/* 087FE4 7F0534B4 00000000 */ nop -/* 087FE8 7F0534B8 0007000D */ break 7 -.L7F0534BC: -/* 087FEC 7F0534BC 2401FFFF */ li $at, -1 -/* 087FF0 7F0534C0 17210004 */ bne $t9, $at, .L7F0534D4 -/* 087FF4 7F0534C4 3C018000 */ lui $at, 0x8000 -/* 087FF8 7F0534C8 15E10002 */ bne $t7, $at, .L7F0534D4 -/* 087FFC 7F0534CC 00000000 */ nop -/* 088000 7F0534D0 0006000D */ break 6 -.L7F0534D4: -/* 088004 7F0534D4 84F9000A */ lh $t9, 0xa($a3) -/* 088008 7F0534D8 84C3000A */ lh $v1, 0xa($a2) -/* 08800C 7F0534DC 84C50000 */ lh $a1, ($a2) -/* 088010 7F0534E0 0323C023 */ subu $t8, $t9, $v1 -/* 088014 7F0534E4 01A57823 */ subu $t7, $t5, $a1 -/* 088018 7F0534E8 01F80019 */ multu $t7, $t8 -/* 08801C 7F0534EC 84F90000 */ lh $t9, ($a3) -/* 088020 7F0534F0 03257823 */ subu $t7, $t9, $a1 -/* 088024 7F0534F4 00007012 */ mflo $t6 -/* 088028 7F0534F8 00000000 */ nop -/* 08802C 7F0534FC 00000000 */ nop -/* 088030 7F053500 01CF001A */ div $zero, $t6, $t7 -/* 088034 7F053504 0000C012 */ mflo $t8 -/* 088038 7F053508 0303C821 */ addu $t9, $t8, $v1 -/* 08803C 7F05350C A579000A */ sh $t9, 0xa($t3) -/* 088040 7F053510 15E00002 */ bnez $t7, .L7F05351C -/* 088044 7F053514 00000000 */ nop -/* 088048 7F053518 0007000D */ break 7 -.L7F05351C: -/* 08804C 7F05351C 2401FFFF */ li $at, -1 -/* 088050 7F053520 15E10004 */ bne $t7, $at, .L7F053534 -/* 088054 7F053524 3C018000 */ lui $at, 0x8000 -/* 088058 7F053528 15C10002 */ bne $t6, $at, .L7F053534 -/* 08805C 7F05352C 00000000 */ nop -/* 088060 7F053530 0006000D */ break 6 -.L7F053534: -/* 088064 7F053534 A56D0000 */ sh $t5, ($t3) -.L7F053538: -/* 088068 7F053538 1654FE52 */ bne $s2, $s4, .L7F052E84 -/* 08806C 7F05353C 02401825 */ move $v1, $s2 -/* 088070 7F053540 86A2000C */ lh $v0, 0xc($s5) -/* 088074 7F053544 27DE0004 */ addiu $fp, $fp, 4 -/* 088078 7F053548 04410003 */ bgez $v0, .L7F053558 -/* 08807C 7F05354C 00027083 */ sra $t6, $v0, 2 -/* 088080 7F053550 24410003 */ addiu $at, $v0, 3 -/* 088084 7F053554 00017083 */ sra $t6, $at, 2 -.L7F053558: -/* 088088 7F053558 000E1880 */ sll $v1, $t6, 2 -/* 08808C 7F05355C 03C3082A */ slt $at, $fp, $v1 -/* 088090 7F053560 5420FE47 */ bnezl $at, .L7F052E80 -/* 088094 7F053564 00001825 */ move $v1, $zero -.L7F053568: -/* 088098 7F053568 8FBF003C */ lw $ra, 0x3c($sp) -.L7F05356C: -/* 08809C 7F05356C 8FB00018 */ lw $s0, 0x18($sp) -/* 0880A0 7F053570 8FB1001C */ lw $s1, 0x1c($sp) -/* 0880A4 7F053574 8FB20020 */ lw $s2, 0x20($sp) -/* 0880A8 7F053578 8FB30024 */ lw $s3, 0x24($sp) -/* 0880AC 7F05357C 8FB40028 */ lw $s4, 0x28($sp) -/* 0880B0 7F053580 8FB5002C */ lw $s5, 0x2c($sp) -/* 0880B4 7F053584 8FB60030 */ lw $s6, 0x30($sp) -/* 0880B8 7F053588 8FB70034 */ lw $s7, 0x34($sp) -/* 0880BC 7F05358C 8FBE0038 */ lw $fp, 0x38($sp) -/* 0880C0 7F053590 03E00008 */ jr $ra -/* 0880C4 7F053594 27BD0058 */ addiu $sp, $sp, 0x58 -) -#endif - /** * objToggleDoorPortal / doorActivatePortal @@ -37230,11 +12557,11 @@ PropRecord* doorInit(DoorRecord* door, coord3d* pos, Mtxf* mtx, StandTile* stan, } door->speed = 0.0f; - door->openstate = 0; + door->openstate = DOORSTATE_STATIONARY; door->unkbd = 0; door->linkedDoor = NULL; - if (door->doorFlags & 4) { + if (door->doorFlags & DOORFLAG_CLIP_TO_BBOX) { union ModelRoData *rodata = door->model->obj->RootNode->Child->Child->Data; door->unkcc = mempAllocBytesInBank(rodata->DisplayListCollisions.numVertices * sizeof(Vertex), MEMPOOL_STAGE); } else { @@ -37257,8 +12584,8 @@ PropRecord* doorInit(DoorRecord* door, coord3d* pos, Mtxf* mtx, StandTile* stan, door->runtime_pos.z = centre->z; door->flags |= PROPFLAG_00000100; - door7F052B00(door); - sub_GAME_7F052D8C(door); + doorUpdateBbox(door); + doorBuildClippedVertices(door); sub_GAME_7F0402B4(door->prop, &door->nextcol); door->shadecol.r = door->nextcol.r; @@ -37781,20 +13108,20 @@ void doorPlayCloseSound1(DoorRecord *door) */ void doorStartOpen(DoorRecord *door) { - door->flags &= ~DOORFLAG_KEEPOPEN; + door->flags &= ~PROPFLAG_DOOR_KEEPOPEN; door->runtime_bitflags |= RUNTIMEBITFLAG_BEENOPENED; doorPlayOpenSound0(door); doorActivatePortal(door); - if (door->doorType == 8) + if (door->doorType == DOORTYPE_FALLAWAY) { struct collision_data *col = door->ptr_allocated_collisiondata_block; - door->flags |= DOORFLAG_CANNOT_ACTIVATE; + door->flags |= PROPFLAG_CANNOT_ACTIVATE; door->perimFrac = 0; if (col) { col->edges = 0; } - door->flags &= ~DOORFLAG_100; + door->flags &= ~PROPFLAG_00000100; } } @@ -37804,7 +13131,7 @@ void doorStartOpen(DoorRecord *door) */ void doorStartClose(DoorRecord *door) { - door->flags &= ~DOORFLAG_KEEPOPEN; + door->flags &= ~PROPFLAG_DOOR_KEEPOPEN; doorPlayOpenSound1(door); } @@ -37813,11 +13140,11 @@ void doorFinishOpen(DoorRecord *door) { doorPlayCloseSound0(door); - if (door->doorType == 8) + if (door->doorType == DOORTYPE_FALLAWAY) { sub_GAME_7F03FDA8(door->prop); - if (door->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) + if (door->runtime_bitflags & RUNTIMEBITFLAG_HASPROJECTILE) { door->projectile->flags |= 1; matrix_4x4_set_identity(&door->projectile->mtx); @@ -37906,8 +13233,13 @@ bool doorIsClosed(DoorRecord *door) return ((door->openstate == DOORSTATE_STATIONARY) || (door->openstate == DOORSTATE_WAITING)) && (door->openPosition <= 0.0f); } - -s32 sub_GAME_7F054A64(PropRecord *prop, bbox2d *bbox) +/* +* Address: 7F054A64 +* Description: Computes the 2D bounding box for every room the prop is in +* so it can be used for scissors. Returns true when the prop +* has at least one room bounding box. +*/ +s32 getPropCombinedRoomsBBox2D(PropRecord *prop, bbox2d *bbox) { s32 room_ids[8]; s32 *rooms; @@ -38030,8 +13362,11 @@ bool sub_GAME_7F054C58(coord3d *coord, f32 arg1) return result; } -// PD: func0f08e8ac -bool sub_GAME_7F054D6C(PropRecord *prop, coord3d *pos, f32 arg2, bool arg3) + +/** + * Address: 7F054D6C + */ +bool posIsOnScreen(PropRecord *prop, coord3d *pos, f32 arg2, bool arg3) { s32 room_ids[8]; s32 *rooms; @@ -38050,7 +13385,7 @@ bool sub_GAME_7F054D6C(PropRecord *prop, coord3d *pos, f32 arg2, bool arg3) { if (fogPositionIsVisibleThroughFog(pos, arg2) && (!arg3 || sub_GAME_7F054C58(pos, arg2))) { - if (sub_GAME_7F054A64(prop, &bbox) != 0) + if (getPropCombinedRoomsBBox2D(prop, &bbox) != 0) { result = camIsPosInScreenBox(pos, arg2, &bbox); } @@ -38174,7 +13509,7 @@ void door7F054FB4(DoorRecord *door) { while (var_s1 != NULL) { - door7F052B00(var_s1); + doorUpdateBbox(var_s1); var_s5 = sub_GAME_7F0448A8(var_s1->prop); if (var_s5 == 0) @@ -38198,20 +13533,20 @@ void door7F054FB4(DoorRecord *door) { if (var_s5 != 0) { - if (var_s1->openstate == DOORMODE_OPENING) + if (var_s1->openstate == DOORSTATE_OPENING) { if (var_s1->maxFrac <= var_s1->openPosition) { - var_s1->openstate = 0; + var_s1->openstate = DOORSTATE_STATIONARY; var_s1->speed = 0.0f; var_s1->openedTime = (u32) g_GlobalTimer; doorFinishOpen(var_s1); } } - else if ((var_s1->openstate == DOORMODE_CLOSING) && (var_s1->openPosition <= 0.0f)) + else if ((var_s1->openstate == DOORSTATE_CLOSING) && (var_s1->openPosition <= 0.0f)) { - var_s1->openstate = 0; + var_s1->openstate = DOORSTATE_STATIONARY; var_s1->speed = 0.0f; var_s1->openedTime = 0; @@ -38225,12 +13560,12 @@ void door7F054FB4(DoorRecord *door) var_s1->speed = 0.0f; var_s1->openPosition = var_s1->lastcalc60f; - door7F052B00(var_s1); + doorUpdateBbox(var_s1); } - sub_GAME_7F052D8C(var_s1); + doorBuildClippedVertices(var_s1); } - else if (var_s1->doorFlags & DOORFLAG_0004) + else if (var_s1->doorFlags & DOORFLAG_CLIP_TO_BBOX) { temp_a0 = var_s1->model; temp_a1 = temp_a0->obj->RootNode->Child->Child; @@ -38267,7 +13602,7 @@ void door7F05522C(DoorRecord *door, f32 *arg1, f32 *arg2, s32 altcoordsystem) f32 anglediff; PropRecord *playerprop; BoundPadRecord *pad; - coord3d field_10; + coord3d backImpactPuffCount; coord3d normal; f32 xmin; f32 xmax; @@ -38284,7 +13619,7 @@ void door7F05522C(DoorRecord *door, f32 *arg1, f32 *arg2, s32 altcoordsystem) f32 xbound; pad = &g_CurrentSetup.boundpads[door->pad]; - playerprop = get_curplayer_positiondata(); + playerprop = getCurrentPlayerProp(); if (1) { scale = 1.0f; } playerpos.f[0] = (((g_CurrentPlayer->field_488.theta_transform.x * 30.0f) * scale) * 0.75f) + playerprop->pos.x; @@ -38312,7 +13647,7 @@ void door7F05522C(DoorRecord *door, f32 *arg1, f32 *arg2, s32 altcoordsystem) y1 = (pad->pos.z + (normal.z * xmin)) - playerpos.z; angle = atan2f(x1, y1); - playerangle = get_curplay_horizontal_rotation_in_degrees(); + playerangle = bondviewGetPlayerYawRadians(); anglediff = angle - playerangle; scale = (angle - playerangle) + M_TAU_F; @@ -38326,9 +13661,10 @@ void door7F05522C(DoorRecord *door, f32 *arg1, f32 *arg2, s32 altcoordsystem) anglediff = anglediff - M_TAU_F; } - if (door->doorType == 5) + if (door->doorType == DOORTYPE_SWINGING) { angle2 = (door->openPosition * M_TAU_F) / 360.0f; + if (door->flags & 0x20000000) { angle2 = M_TAU_F - angle2; @@ -38342,7 +13678,7 @@ void door7F05522C(DoorRecord *door, f32 *arg1, f32 *arg2, s32 altcoordsystem) y1 = ((pad->pos.z + (normal.z * xmin)) + (xbound * (((-normal.x) * sine) + (normal.z * cosine)))) - playerpos.z; angle = atan2f(x1, y1); - playerangle = get_curplay_horizontal_rotation_in_degrees(); + playerangle = bondviewGetPlayerYawRadians(); anglediff2 = angle - playerangle; if (angle < playerangle) @@ -38360,7 +13696,7 @@ void door7F05522C(DoorRecord *door, f32 *arg1, f32 *arg2, s32 altcoordsystem) y1 = (pad->pos.z + (normal.z * xmax)) - playerpos.z; angle = atan2f(x1, y1); - playerangle = get_curplay_horizontal_rotation_in_degrees(); + playerangle = bondviewGetPlayerYawRadians(); anglediff2 = angle - playerangle; @@ -38469,7 +13805,7 @@ bool doorTestForInteract(PropRecord *prop) && (prop->flags & PROPFLAG_ONSCREEN)) { maybe = FALSE; - playerprop = get_curplayer_positiondata(); + playerprop = getCurrentPlayerProp(); xdiff = door->runtime_pos.x - playerprop->pos.x; ydiff = door->runtime_pos.y - playerprop->pos.y; @@ -38486,7 +13822,7 @@ bool doorTestForInteract(PropRecord *prop) if (sub_GAME_7F03DB70((s32*)rooms1, (s32*)rooms2) != 0) { boundpads = &g_CurrentSetup.boundpads[door->pad]; - if (sub_GAME_7F03F598(&playerprop->pos, 150.0f, boundpads) != 0) + if (chrpropTestPointInPaddedBoundPad(&playerprop->pos, 150.0f, boundpads)) { maybe = TRUE; } @@ -38537,125 +13873,45 @@ void doorActivateWrapper(PropRecord *prop) //#MATCH } - - -#ifdef NONMATCHING -// https://decomp.me/scratch/B63wV 79.17% -s32 posIsInFrontOfDoor(PropRecord* prop, DoorRecord* door) +bool posIsInFrontOfDoor(PropRecord *prop, DoorRecord *door) { - BoundPadRecord* pad; - f32 other; - struct coord3d normal; - f32 value = 0; + BoundPadRecord *pad; + coord3d diff; + coord3d normal; + f32 dot; + f32 side; - pad = (BoundPadRecord*)&g_CurrentSetup.boundpads[door->pad]; + pad = &g_CurrentSetup.boundpads[((ObjectRecord *) door)->pad]; - normal.f[0] = (pad->up.f[1] * pad->look.f[2]) - (pad->up.f[2] * pad->look.f[1]); - normal.f[1] = (pad->up.f[2] * pad->look.f[0]) - (pad->up.f[0] * pad->look.f[2]); - normal.f[2] = (pad->up.f[0] * pad->look.f[1]) - (pad->up.f[1] * pad->look.f[0]); + normal.f[0] = (pad->up.y * pad->look.z) - (pad->look.y * pad->up.z); + normal.f[1] = (pad->up.z * pad->look.x) - (pad->look.z * pad->up.x); + normal.f[2] = (pad->up.x * pad->look.y) - (pad->look.x * pad->up.y); - value += (normal.f[0] * (prop->pos.f[0] - pad->pos.f[0])); - value += (normal.f[1] * (prop->pos.f[1] - pad->pos.f[1])); - value += (normal.f[2] * (prop->pos.f[2] - pad->pos.f[2])); + diff.x = prop->pos.x - pad->pos.x; + diff.y = prop->pos.y - pad->pos.y; + diff.z = prop->pos.z - pad->pos.z; - other = value; + dot = (side = ((diff.x * normal.f[0]) + (diff.y * normal.f[1])) + (diff.z * normal.f[2])); - if (door->doorFlags & 8) + if (door->doorFlags & DOORFLAG_FLIP) { - other = -value; + side = -dot; } - if (other < 0) + if (side < 0.0f) { - return 0; + return FALSE; } - - if (other > 0) + else if (side > 0.0f) { - return 1; + return TRUE; + } + else + { + return TRUE; } - - - return 1; } -#else -s32 posIsInFrontOfDoor(PropRecord* prop, DoorRecord* door); -GLOBAL_ASM( -.text -glabel posIsInFrontOfDoor -/* 08A5A0 7F055A70 84AE0006 */ lh $t6, 6($a1) -/* 08A5A4 7F055A74 3C188007 */ lui $t8, %hi(g_CurrentSetup+0x1C) -/* 08A5A8 7F055A78 8F185D1C */ lw $t8, %lo(g_CurrentSetup+0x1C)($t8) -/* 08A5AC 7F055A7C 000E7900 */ sll $t7, $t6, 4 -/* 08A5B0 7F055A80 01EE7821 */ addu $t7, $t7, $t6 -/* 08A5B4 7F055A84 000F7880 */ sll $t7, $t7, 2 -/* 08A5B8 7F055A88 01F81021 */ addu $v0, $t7, $t8 -/* 08A5BC 7F055A8C C4440010 */ lwc1 $f4, 0x10($v0) -/* 08A5C0 7F055A90 C4460020 */ lwc1 $f6, 0x20($v0) -/* 08A5C4 7F055A94 C44A001C */ lwc1 $f10, 0x1c($v0) -/* 08A5C8 7F055A98 C4520014 */ lwc1 $f18, 0x14($v0) -/* 08A5CC 7F055A9C 46062202 */ mul.s $f8, $f4, $f6 -/* 08A5D0 7F055AA0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 08A5D4 7F055AA4 46125102 */ mul.s $f4, $f10, $f18 -/* 08A5D8 7F055AA8 46044181 */ sub.s $f6, $f8, $f4 -/* 08A5DC 7F055AAC E7A60004 */ swc1 $f6, 4($sp) -/* 08A5E0 7F055AB0 C4520018 */ lwc1 $f18, 0x18($v0) -/* 08A5E4 7F055AB4 C44A0014 */ lwc1 $f10, 0x14($v0) -/* 08A5E8 7F055AB8 C4440020 */ lwc1 $f4, 0x20($v0) -/* 08A5EC 7F055ABC 46125202 */ mul.s $f8, $f10, $f18 -/* 08A5F0 7F055AC0 C44A000C */ lwc1 $f10, 0xc($v0) -/* 08A5F4 7F055AC4 460A2482 */ mul.s $f18, $f4, $f10 -/* 08A5F8 7F055AC8 46124101 */ sub.s $f4, $f8, $f18 -/* 08A5FC 7F055ACC E7A40008 */ swc1 $f4, 8($sp) -/* 08A600 7F055AD0 C448001C */ lwc1 $f8, 0x1c($v0) -/* 08A604 7F055AD4 C44A000C */ lwc1 $f10, 0xc($v0) -/* 08A608 7F055AD8 46085482 */ mul.s $f18, $f10, $f8 -/* 08A60C 7F055ADC C4480010 */ lwc1 $f8, 0x10($v0) -/* 08A610 7F055AE0 C44A0018 */ lwc1 $f10, 0x18($v0) -/* 08A614 7F055AE4 46085282 */ mul.s $f10, $f10, $f8 -/* 08A618 7F055AE8 460A9201 */ sub.s $f8, $f18, $f10 -/* 08A61C 7F055AEC E7A8000C */ swc1 $f8, 0xc($sp) -/* 08A620 7F055AF0 C44A0000 */ lwc1 $f10, ($v0) -/* 08A624 7F055AF4 C4920008 */ lwc1 $f18, 8($a0) -/* 08A628 7F055AF8 94B90098 */ lhu $t9, 0x98($a1) -/* 08A62C 7F055AFC 460A9001 */ sub.s $f0, $f18, $f10 -/* 08A630 7F055B00 C44A0004 */ lwc1 $f10, 4($v0) -/* 08A634 7F055B04 C492000C */ lwc1 $f18, 0xc($a0) -/* 08A638 7F055B08 33280008 */ andi $t0, $t9, 8 -/* 08A63C 7F055B0C 460A9081 */ sub.s $f2, $f18, $f10 -/* 08A640 7F055B10 C44A0008 */ lwc1 $f10, 8($v0) -/* 08A644 7F055B14 C4920010 */ lwc1 $f18, 0x10($a0) -/* 08A648 7F055B18 460A9301 */ sub.s $f12, $f18, $f10 -/* 08A64C 7F055B1C 46060482 */ mul.s $f18, $f0, $f6 -/* 08A650 7F055B20 44800000 */ mtc1 $zero, $f0 -/* 08A654 7F055B24 46041282 */ mul.s $f10, $f2, $f4 -/* 08A658 7F055B28 460A9180 */ add.s $f6, $f18, $f10 -/* 08A65C 7F055B2C 460C4102 */ mul.s $f4, $f8, $f12 -/* 08A660 7F055B30 46062400 */ add.s $f16, $f4, $f6 -/* 08A664 7F055B34 11000002 */ beqz $t0, .L7F055B40 -/* 08A668 7F055B38 46008386 */ mov.s $f14, $f16 -/* 08A66C 7F055B3C 46008387 */ neg.s $f14, $f16 -.L7F055B40: -/* 08A670 7F055B40 4600703C */ c.lt.s $f14, $f0 -/* 08A674 7F055B44 00000000 */ nop -/* 08A678 7F055B48 45020004 */ bc1fl .L7F055B5C -/* 08A67C 7F055B4C 460E003C */ c.lt.s $f0, $f14 -/* 08A680 7F055B50 10000007 */ b .L7F055B70 -/* 08A684 7F055B54 00001025 */ move $v0, $zero -/* 08A688 7F055B58 460E003C */ c.lt.s $f0, $f14 -.L7F055B5C: -/* 08A68C 7F055B5C 24020001 */ li $v0, 1 -/* 08A690 7F055B60 45000003 */ bc1f .L7F055B70 -/* 08A694 7F055B64 00000000 */ nop -/* 08A698 7F055B68 10000001 */ b .L7F055B70 -/* 08A69C 7F055B6C 24020001 */ li $v0, 1 -.L7F055B70: -/* 08A6A0 7F055B70 03E00008 */ jr $ra -/* 08A6A4 7F055B74 27BD0020 */ addiu $sp, $sp, 0x20 -) -#endif - void doorsChooseSwingDirection(PropRecord *chrprop, DoorRecord *door) { @@ -38664,7 +13920,7 @@ void doorsChooseSwingDirection(PropRecord *chrprop, DoorRecord *door) bool infront = posIsInFrontOfDoor(chrprop, door); u32 wantflag = 0; - if ((door->doorFlags & 8) == 0) + if ((door->doorFlags & DOORFLAG_FLIP) == 0) { if (!infront) { @@ -38695,7 +13951,7 @@ void doorsChooseSwingDirection(PropRecord *chrprop, DoorRecord *door) } -s32 propdoorInteract(PropRecord* doorprop) +TICKOP propdoorInteract(PropRecord* doorprop) { s32 unused; s32 sp28; @@ -38705,7 +13961,7 @@ s32 propdoorInteract(PropRecord* doorprop) door = doorprop->door; sp28 = 0; - playerprop = get_curplayer_positiondata(); + playerprop = getCurrentPlayerProp(); if (door->keyflags == 0) { @@ -38768,7 +14024,8 @@ s32 propdoorInteract(PropRecord* doorprop) } #endif } - return 0; + + return TICKOP_NONE; } @@ -38780,6 +14037,7 @@ void alarmActivate(void) return; } + void deactivate_alarm_sound_effect(void) { if ((ptr_alarm_sfx != 0) && (sndGetPlayingState(ptr_alarm_sfx) != AL_STOPPED)) { @@ -38788,6 +14046,7 @@ void deactivate_alarm_sound_effect(void) return; } + void alarmDeactivate(void) { alarm_timer = 0; @@ -38795,15 +14054,13 @@ void alarmDeactivate(void) return; } + bool alarmIsActive(void) { return (0 < alarm_timer); } - - - void init_trigger_toxic_gas_effect(coord3d *source) //#MATCH { activate_gas_sound_timer = TRUE; @@ -38822,10 +14079,6 @@ void init_trigger_toxic_gas_effect(coord3d *source) //#MATCH } - - - - void check_deactivate_gas_sound(void) { if ((ptr_gas_sound != NULL) && (sndGetPlayingState(ptr_gas_sound) != AL_STOPPED)) { @@ -38835,7 +14088,6 @@ void check_deactivate_gas_sound(void) } - bool check_if_toxic_gas_activated() //#MATCH { return (toxic_gas_sound_timer > 0); @@ -38854,7 +14106,7 @@ void handle_gas_damage(void) } } - if (toxic_gas_sound_timer > 0.0f && g_PlayerInvincible == 0) + if (toxic_gas_sound_timer > 0.0f && g_PlayerInvincible == FALSE) { fogSwitchToSolosky2(toxic_gas_sound_timer / gasTimeToFullOpacity); @@ -38953,8 +14205,8 @@ const char D_80052A44[] = ":\n"; Timer value is set using countdownTimerSetValue() */ -Gfx *countdownTimerRender(Gfx *DL) { - +Gfx *countdownTimerRender(Gfx *DL) +{ s32 mins; s32 secs; s32 ms; @@ -39005,6 +14257,7 @@ Gfx *countdownTimerRender(Gfx *DL) { return DL; } + void handle_alarm_gas_timer_calldamage(void) { if (alarmIsActive() != 0) @@ -39031,132 +14284,48 @@ void handle_alarm_gas_timer_calldamage(void) } - - - -#ifdef NONMATCHING -// https://decomp.me/scratch/COEsd 99.07% void sub_GAME_7F056690(void) { - Model *temp_s3; - PropRecord *var_s2; - ObjectRecord *temp_s1; - ModelNode *temp_v0_2; - struct ModelRoData_DisplayList_CollisionRecord *temp_s0; + Model *s3; + PropRecord *s2; + ObjectRecord *s1; + union ModelRwData **new_var; + ModelNode *t0; + ModelRoData_DisplayList_CollisionRecord *s0; - var_s2 = get_ptr_obj_pos_list_current_entry(); - - for (; var_s2 != NULL; var_s2 = var_s2->prev) + s2 = chrpropGetActiveTail(); + for (; s2 != NULL; s2 = s2->prev) { - if ((var_s2->type == 1) && !(var_s2->flags & 2) ) + if ((s2->type == 1) && ((s2->flags & 2) == 0)) { - temp_s1 = var_s2->obj; - - if (temp_s1->state & 0x80) + s1 = s2->obj; + if (s1->state & 0x80) { - temp_s3 = temp_s1->model; - temp_v0_2 = sub_GAME_7F04B478(temp_s1); - - if (temp_v0_2 != NULL) + s3 = s1->model; + t0 = sub_GAME_7F04B478(s1); + if (t0 == NULL) { - temp_s0 = (struct ModelRoData_DisplayList_CollisionRecord *)temp_v0_2->Data; - if (temp_s0 != NULL) + return; + t0 = sub_GAME_7F04B478(s1); + } + s0 = (ModelRoData_DisplayList_CollisionRecord *)t0->Data; + if (s0 == NULL) + { + return; + } + if (sub_GAME_7F04B590(s1->model->obj, t0) != 0) + { + new_var = &s3->datas[s0->RwDataIndex]; + if ((s32)s0->Vertices != (s32)*new_var) { - if (sub_GAME_7F04B590(temp_s1->model->obj, temp_v0_2)) - { - // temp_s3->datas should be struct ModelRwData_DisplayList_CollisionRecord here. - struct ModelRwData_DisplayList_CollisionRecord **cr = (struct ModelRwData_DisplayList_CollisionRecord**)temp_s3->datas; - - if (temp_s0->Vertices != (Vertex*)cr[temp_s0->RwDataIndex]) - { - objFreePermanently(temp_s1, 1); - return; - } - } - - //continue; + objFreePermanently(s1, 1); + return; } } } - - // break; } } - } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F056690 -/* 08B1C0 7F056690 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 08B1C4 7F056694 AFBF002C */ sw $ra, 0x2c($sp) -/* 08B1C8 7F056698 AFB40028 */ sw $s4, 0x28($sp) -/* 08B1CC 7F05669C AFB30024 */ sw $s3, 0x24($sp) -/* 08B1D0 7F0566A0 AFB20020 */ sw $s2, 0x20($sp) -/* 08B1D4 7F0566A4 AFB1001C */ sw $s1, 0x1c($sp) -/* 08B1D8 7F0566A8 0FC0E909 */ jal get_ptr_obj_pos_list_current_entry -/* 08B1DC 7F0566AC AFB00018 */ sw $s0, 0x18($sp) -/* 08B1E0 7F0566B0 1040002A */ beqz $v0, .L7F05675C -/* 08B1E4 7F0566B4 00409025 */ move $s2, $v0 -/* 08B1E8 7F0566B8 24140001 */ li $s4, 1 -/* 08B1EC 7F0566BC 924E0000 */ lbu $t6, ($s2) -.L7F0566C0: -/* 08B1F0 7F0566C0 568E0024 */ bnel $s4, $t6, .L7F056754 -/* 08B1F4 7F0566C4 8E520024 */ lw $s2, 0x24($s2) -/* 08B1F8 7F0566C8 924F0001 */ lbu $t7, 1($s2) -/* 08B1FC 7F0566CC 31F80002 */ andi $t8, $t7, 2 -/* 08B200 7F0566D0 57000020 */ bnezl $t8, .L7F056754 -/* 08B204 7F0566D4 8E520024 */ lw $s2, 0x24($s2) -/* 08B208 7F0566D8 8E510004 */ lw $s1, 4($s2) -/* 08B20C 7F0566DC 92390002 */ lbu $t9, 2($s1) -/* 08B210 7F0566E0 02202025 */ move $a0, $s1 -/* 08B214 7F0566E4 33280080 */ andi $t0, $t9, 0x80 -/* 08B218 7F0566E8 5100001A */ beql $t0, $zero, .L7F056754 -/* 08B21C 7F0566EC 8E520024 */ lw $s2, 0x24($s2) -/* 08B220 7F0566F0 0FC12D1E */ jal sub_GAME_7F04B478 -/* 08B224 7F0566F4 8E330014 */ lw $s3, 0x14($s1) -/* 08B228 7F0566F8 10400018 */ beqz $v0, .L7F05675C -/* 08B22C 7F0566FC 00402825 */ move $a1, $v0 -/* 08B230 7F056700 8C500004 */ lw $s0, 4($v0) -/* 08B234 7F056704 52000016 */ beql $s0, $zero, .L7F056760 -/* 08B238 7F056708 8FBF002C */ lw $ra, 0x2c($sp) -/* 08B23C 7F05670C 8E290014 */ lw $t1, 0x14($s1) -/* 08B240 7F056710 0FC12D64 */ jal sub_GAME_7F04B590 -/* 08B244 7F056714 8D240008 */ lw $a0, 8($t1) -/* 08B248 7F056718 5040000E */ beql $v0, $zero, .L7F056754 -/* 08B24C 7F05671C 8E520024 */ lw $s2, 0x24($s2) -/* 08B250 7F056720 960B001A */ lhu $t3, 0x1a($s0) -/* 08B254 7F056724 8E6A0010 */ lw $t2, 0x10($s3) -/* 08B258 7F056728 8E0D0008 */ lw $t5, 8($s0) -/* 08B25C 7F05672C 000B6080 */ sll $t4, $t3, 2 -/* 08B260 7F056730 014C1021 */ addu $v0, $t2, $t4 -/* 08B264 7F056734 8C4E0000 */ lw $t6, ($v0) -/* 08B268 7F056738 11AE0005 */ beq $t5, $t6, .L7F056750 -/* 08B26C 7F05673C 02202025 */ move $a0, $s1 -/* 08B270 7F056740 0FC10409 */ jal objFreePermanently -/* 08B274 7F056744 24050001 */ li $a1, 1 -/* 08B278 7F056748 10000005 */ b .L7F056760 -/* 08B27C 7F05674C 8FBF002C */ lw $ra, 0x2c($sp) -.L7F056750: -/* 08B280 7F056750 8E520024 */ lw $s2, 0x24($s2) -.L7F056754: -/* 08B284 7F056754 5640FFDA */ bnezl $s2, .L7F0566C0 -/* 08B288 7F056758 924E0000 */ lbu $t6, ($s2) -.L7F05675C: -/* 08B28C 7F05675C 8FBF002C */ lw $ra, 0x2c($sp) -.L7F056760: -/* 08B290 7F056760 8FB00018 */ lw $s0, 0x18($sp) -/* 08B294 7F056764 8FB1001C */ lw $s1, 0x1c($sp) -/* 08B298 7F056768 8FB20020 */ lw $s2, 0x20($sp) -/* 08B29C 7F05676C 8FB30024 */ lw $s3, 0x24($sp) -/* 08B2A0 7F056770 8FB40028 */ lw $s4, 0x28($sp) -/* 08B2A4 7F056774 03E00008 */ jr $ra -/* 08B2A8 7F056778 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif - - - void drop_inventory(void) @@ -39187,4 +14356,3 @@ void drop_inventory(void) } } } - diff --git a/src/game/propobj.h b/src/game/propobj.h index 8fcc42a6..2b2356b8 100644 --- a/src/game/propobj.h +++ b/src/game/propobj.h @@ -4,37 +4,24 @@ #include #include #include -#include +#include -struct ShotData { - // temporary definition for GE: - /*0x00*/ s32 unk00[13]; - /*0x34*/ f32 unk34; +#ifdef VERSION_EU - // the following is from PD, it seems to line up: - /*0x00*/ //struct coord unk00; - /*0x0c*/ //struct coord unk0c; - /*0x18*/ //struct gset gset; - /*0x1c*/ //struct coord gunpos; - /*0x28*/ //struct coord dir; - /*0x34*/ //f32 unk34; - /*0x38*/ //s32 penetration; - /*0x3c*/ //struct hit hits[10]; -}; +#define CHROBJ_TIMETOREGEN 50 +#define CHROBJ_TIMETOREGEN_F 50.0f +#define CHROBJ_GAS_TIMER 0x5dc /* 1500 */ -struct HitThing { - // the following is taken from PD - // may need adjustments - coord3d unk00; - coord3d unk0c; - Vertex *unk18; - Vertex *unk1c; - Vertex *unk20; - Gfx *tricmd; - s16 unk28; - s16 texturenum; - s16 unk2c; -}; +#define PLASTIQUE_EXPLOSION_DELAY_TICKS 100 + +#else + +#define CHROBJ_TIMETOREGEN 60 +#define CHROBJ_TIMETOREGEN_F 60.0f +#define CHROBJ_GAS_TIMER 0x708 /* 1800 */ +#define PLASTIQUE_EXPLOSION_DELAY_TICKS 120 + +#endif extern f32 F_80030B14; extern f32 F_80030B18; @@ -62,12 +49,17 @@ extern LockDoorRecord *g_LevelLoadPropLockDoor; extern ObjectRecord *g_LevelLoadPropSafeItem; extern struct PropRecord *D_80030B0C; extern s32 bodypartshot; -extern f32 F_80030B14; -extern f32 F_80030B18; extern f32 g_AutogunPendingDamageTick; extern f32 g_AutogunDamageScalar; -extern f32 F_80030B24; extern f32 g_SoloAmmoMultiplier; +extern struct Model *g_CurrentProjectileModel; +extern struct ModelNode *dword_CODE_bss_80075B74; + +#if defined(VERSION_EU) +extern ExplosionDetailsRecordEuList object_explosion_details; +#else +extern ExplosionDetailsRecord object_explosion_details[]; +#endif /** * @param arg0: Prop for tank @@ -79,30 +71,31 @@ void objFreePermanently(struct ObjectRecord *obj, bool freeprop) void chrobjApplySpeed(f32 *openPosition, f32 maxFrac, f32 *speedPtr, f32 accel, f32 decel, f32 maxSpeed); void chrobjCallsApplySpeed(f32 *openPosition, f32 maxFrac, f32 *speedPtr, f32 accel, f32 decel, f32 maxSpeed); -Gfx *sub_GAME_7F049B58(Gfx *arg0); -void set_color_shading_from_tile(PropRecord *, rgba_u8 *); +Gfx *weaponRenderTracers(Gfx *gdl); +void set_color_shading_from_tile(PropRecord *prop, u8 col[4]); void propobjSetDropped(PropRecord *prop, DROPTYPE droptype); +void objDropRecursively(PropRecord *prop); void chrobjSndCreatePostEventDefault(ALSoundState *, coord3d *); void alarmActivate(void); void weaponSetGunfireVisible(PropRecord *prop, s32 firing); s32 weaponIsGunfireVisible(PropRecord *); s32 sub_GAME_7F0539E4(coord3d *pos); //getVolume? -ObjectRecord *create_new_item_instance_of_model(PROP propid, s32 arg1); -void maybe_detonate_object(ObjectRecord *obj, f32 damage, coord3d *pos, ITEM_IDS item, s32 owner); +ObjectRecord *create_new_item_instance_of_model(PROP modelnum, s32 weaponid); +void objApplyDamage(ObjectRecord *obj, f32 damage, coord3d *pos, ITEM_IDS, s32 playernum); void chrobjMaybeDetonateObjectIfFlags(ObjectRecord *arg0, f32 arg1, coord3d *arg2, ITEM_IDS item, s32 arg4); void sub_GAME_7F03FDA8(PropRecord *); void projectileSetSticky(PropRecord *); void chrobjCollisionRelated(ObjectRecord *); void objChangeShading(ObjectRecord *, coord3d *, Mtxf *, StandTile *); -s32 sub_GAME_7F041074(coord3d *arg0, coord3d *arg1, coord3d *arg2, f32 arg3); +s32 projectileTestPropBoundingSphere(coord3d *arg0, coord3d *arg1, coord3d *arg2, f32 arg3); void sub_GAME_7F04F244(PropRecord *arg0, struct rect4f **arg1, s32 *arg2, f32 *arg3, f32 *arg4); void doorActivate(DoorRecord *door, DOORSTATE State); -s32 posIsInFrontOfDoor(PropRecord *arg0, DoorRecord *arg1); +bool posIsInFrontOfDoor(PropRecord *prop, DoorRecord *door); void doorsChooseSwingDirection(PropRecord *arg0, DoorRecord *arg1); Gfx *chrobjRenderProp(PropRecord *arg0, Gfx *arg1, s32 arg2); f32 chrobjFogVisRangeRelated(PropRecord *prop, f32 size); -s32 sub_GAME_7F054A64(PropRecord *prop, bbox2d *bbox); +s32 getPropCombinedRoomsBBox2D(PropRecord *prop, bbox2d *bbox); // note: rgba to rgb void lerp_rgba_s32_with_rgba_f32(rgba_s32 *arg0, s32 arg1, rgba_f32 *arg2); @@ -110,12 +103,13 @@ void trigger_remote_mine_detonation(void); void objDetach(PropRecord *prop); void objFreeEmbedmentOrProjectile(PropRecord *); +void objBounce(ObjectRecord *obj, coord3d *arg1); bool alarmIsActive(void); void init_trigger_toxic_gas_effect(coord3d *source); void chrSetWeaponFlag4(ChrRecord *chr, GUNHAND hand); void door7F053B10(DoorRecord *door); void doorActivatePortal(DoorRecord *door); -void door7F052B00(DoorRecord *door); +void doorUpdateBbox(DoorRecord *door); s32 sub_GAME_7F0539B8(f32 vol); void monitorSetImageByNum(MonitorRecord *mon, s32 monAnimID); void propweaponSetDual(WeaponObjRecord *leftweapon, WeaponObjRecord *rightweapon); @@ -124,34 +118,48 @@ bool countdownTimerIsRunning(void); void countdownTimerSetRunning(bool enable); void countdownTimerSetValue(f32 time); void countdownTimerSetVisible(int clocklockbits, bool unset); -void sub_GAME_7F04088C(ObjectRecord *baseobj, struct coord3d *pad, Mtxf *matrix, StandTile *stan, struct coord3d *pos2); -void sub_GAME_7F040BA0(ObjectRecord *obj, struct coord3d *pos, Mtxf *arg2, StandTile *stan2, struct coord3d *pos2); +void sub_GAME_7F04088C(ObjectRecord *baseobj, struct coord3d *pad, Mtxf *matrix, StandTile *stan, struct coord3d *pos2); +void sub_GAME_7F040BA0(ObjectRecord *obj, struct coord3d *pos, Mtxf *arg2, StandTile *stan2, struct coord3d *pos2); bool chrEquipWeapon(WeaponObjRecord *wep, ChrRecord *chr); -INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, bool showstring); -INV_ITEM_TYPE propobjInteract(PropRecord *prop); +bool objIsCollectable(PropDefHeaderRecord *obj); +TICKOP propPickupByPlayer(PropRecord *prop, bool showstring); +TICKOP propobjInteract(PropRecord *prop); s32 objGetDestroyedLevel(ObjectRecord *obj); void doorActivateWrapper(PropRecord *prop); bool objIsHealthy(ObjectRecord *self); -KeyRecord *weaponFindThrown(s32 ID); +bool objIsMortal(ObjectRecord* obj); +KeyRecord *weaponFindThrown(s32 ID); bool check_if_toxic_gas_activated(void); HatRecord *hatCreate(bool musthaveprop, bool musthavemodel, ModelFileHeader *modeldef); PropRecord* objInitWithAutoModel(ObjectRecord* obj); -PropRecord* objInitWithModelDef(ObjectRecord* object, ModelFileHeader* header); +PropRecord* objInitWithModelDef(ObjectRecord* object, ModelFileHeader* header); Embedment *embedmentAllocate(void); -void objDetach(PropRecord *prop); -void sub_GAME_7F043650(struct WeaponObjRecord *arg0); -s32 chrobjTestPolygonsTouchingOrOverlap2D(struct rect4f *arg0, s32 arg1, struct rect4f *arg2, s32 arg3); -s32 chrobjTestPointPolygonCollision(struct coord3d *arg0, f32 arg1, struct rect4f *arg2, s32 arg3); -void maybe_detonate_object_and_its_children(PropRecord *arg0, f32 arg1, struct coord3d *arg2, s32 arg3, s32 owner); +void objDetach(PropRecord *prop); +void objUpdateThrowKnifeSound(ObjectRecord *obj); +s32 chrobjTestPolygonsTouchingOrOverlap2D(struct rect4f *arg0, s32 arg1, struct rect4f *arg2, s32 arg3); +s32 chrobjTestPointPolygonCollision(struct coord3d *arg0, f32 arg1, struct rect4f *arg2, s32 arg3); +void maybe_detonate_object_and_its_children(PropRecord *arg0, f32 arg1, struct coord3d *arg2, s32 arg3, s32 owner); struct ModelRoData_BoundingBoxRecord* chrobjGetBboxFromObjectRecord(ObjectRecord *arg0); -void deactivate_alarm_sound_effect(void); -s32 sub_GAME_7F03F598(coord3d* pos, f32 arg1, BoundPadRecord *boundpads); -void sub_GAME_7F0A1DA0(f32*, f32*, f32*, f32*, f32, f32, f32, f32, f32, f32); -void sub_GAME_7F03F90C(Model *model, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4); -s32 sub_GAME_7F0448A8(struct PropRecord *arg0); -PropRecord* sub_GAME_7F051DD8(struct ObjectRecord* arg0, ModelFileHeader* arg1); -void sub_GAME_7F052030(WeaponObjRecord* arg0, ChrRecord* arg1); -void drop_inventory(void); -void sub_GAME_7F056690(void); +void deactivate_alarm_sound_effect(void); +bool chrpropTestPointInPaddedBoundPad(coord3d* pos, f32 arg1, BoundPadRecord *boundpads); +void sub_GAME_7F0A1DA0(f32*, f32*, f32*, f32*, f32, f32, f32, f32, f32, f32); +void modelGetXYExtents(Model *model, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4); +s32 sub_GAME_7F0448A8(struct PropRecord *arg0); +PropRecord* sub_GAME_7F051DD8(struct ObjectRecord* arg0, ModelFileHeader* arg1); +void sub_GAME_7F052030(WeaponObjRecord* arg0, ChrRecord* arg1); +void drop_inventory(void); +void sub_GAME_7F056690(void); +f32 bondviewGetPlayerPitchRadians(void); +TICKOP objTickPlayer(struct PropRecord* arg0); +TICKOP weaponTickPlayer(struct PropRecord* arg0); +void sub_GAME_7F04DD68(DoorRecord *door); +bool posIsOnScreen(PropRecord *prop, coord3d *pos, f32 arg2, bool arg3); +void update_color_shading(rgba_u8 *dest, rgba_u8 *src); +void chrRenderHeldWeapon(void *renderContext, GUNHAND hand, Gfx **gdl); +HATTYPE get_hat_model(PropRecord *prop); +s32 objDrop(PropRecord *prop); +void sub_GAME_7F050DE8(Model* model); +PropRecord *something_with_generating_object(ChrRecord *self, s32 propid, ITEM_IDS itemid, s32 flags, WeaponObjRecord *weapon, ItemModelFileRecord *prop_header); +Gfx *countdownTimerRender(Gfx *DL); #endif diff --git a/src/game/ramromreplay.c b/src/game/ramromreplay.c index 27e779af..45031175 100644 --- a/src/game/ramromreplay.c +++ b/src/game/ramromreplay.c @@ -11,6 +11,7 @@ #include "file2.h" #include #include "joy.h" +#include "frametiming.h" //D:800483F0 struct ramrom_struct @@ -191,10 +192,7 @@ void load_ramrom_from_devtool(void) -#ifdef NONMATCHING // Address 0x7F0BFE5C NTSC -// -// https://decomp.me/scratch/RNdWO 93% void record_player_input_as_packet(struct contsample *arg0, s32 arg1, s32 arg2) { s32 temp_t5; @@ -229,7 +227,7 @@ void record_player_input_as_packet(struct contsample *arg0, s32 arg1, s32 arg2) temp_v0->stick_x = arg0->pads[var_a2*4 + var_a0].stick_x; temp_v0->stick_y = arg0->pads[var_a2*4 + var_a0].stick_y; - temp_v0->button_low = arg0->pads[var_a2*4 + var_a0].button; + temp_v0->button_low = arg0->pads[var_a2*4 + var_a0].button & 0xFF; temp_v0->button_high = arg0->pads[var_a2*4 + var_a0].button >> 8; var_a3 += (u8) ( @@ -238,7 +236,6 @@ void record_player_input_as_packet(struct contsample *arg0, s32 arg1, s32 arg2) + temp_v0->button_low + temp_v0->button_high); } - var_t2++; if (var_a2 == arg2) @@ -263,157 +260,6 @@ void record_player_input_as_packet(struct contsample *arg0, s32 arg1, s32 arg2) address_demo_loaded += align_addr_even(temp_s0 + 1); } -#else -GLOBAL_ASM( -.text -glabel record_player_input_as_packet -/* 0F498C 7F0BFE5C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0F4990 7F0BFE60 3C0E8005 */ lui $t6, %hi(ptr_active_demofile) -/* 0F4994 7F0BFE64 3C0F8009 */ lui $t7, %hi(ramrom_data_target + 0x1F8) -/* 0F4998 7F0BFE68 8DCE8468 */ lw $t6, %lo(ptr_active_demofile)($t6) -/* 0F499C 7F0BFE6C 25EFC468 */ addiu $t7, %lo(ramrom_data_target + 0x1F8) # addiu $t7, $t7, -0x3b98 -/* 0F49A0 7F0BFE70 25F8000F */ addiu $t8, $t7, 0xf -/* 0F49A4 7F0BFE74 AFBF001C */ sw $ra, 0x1c($sp) -/* 0F49A8 7F0BFE78 AFB10018 */ sw $s1, 0x18($sp) -/* 0F49AC 7F0BFE7C AFB00014 */ sw $s0, 0x14($sp) -/* 0F49B0 7F0BFE80 3719000F */ ori $t9, $t8, 0xf -/* 0F49B4 7F0BFE84 3C088005 */ lui $t0, %hi(ramrom_blkbuf_3) -/* 0F49B8 7F0BFE88 3C0C8005 */ lui $t4, %hi(ramrom_blkbuf_2) -/* 0F49BC 7F0BFE8C 3B2D000F */ xori $t5, $t9, 0xf -/* 0F49C0 7F0BFE90 8DC90018 */ lw $t1, 0x18($t6) -/* 0F49C4 7F0BFE94 258C846C */ addiu $t4, %lo(ramrom_blkbuf_2) # addiu $t4, $t4, -0x7b94 -/* 0F49C8 7F0BFE98 25088470 */ addiu $t0, %lo(ramrom_blkbuf_3) # addiu $t0, $t0, -0x7b90 -/* 0F49CC 7F0BFE9C 25AE0004 */ addiu $t6, $t5, 4 -/* 0F49D0 7F0BFEA0 00C08025 */ move $s0, $a2 -/* 0F49D4 7F0BFEA4 00808825 */ move $s1, $a0 -/* 0F49D8 7F0BFEA8 00005025 */ move $t2, $zero -/* 0F49DC 7F0BFEAC 00003825 */ move $a3, $zero -/* 0F49E0 7F0BFEB0 AD8D0000 */ sw $t5, ($t4) -/* 0F49E4 7F0BFEB4 AD0E0000 */ sw $t6, ($t0) -/* 0F49E8 7F0BFEB8 10A60048 */ beq $a1, $a2, .L7F0BFFDC -/* 0F49EC 7F0BFEBC 01A01025 */ move $v0, $t5 -/* 0F49F0 7F0BFEC0 240B0014 */ li $t3, 20 -/* 0F49F4 7F0BFEC4 24AF0001 */ addiu $t7, $a1, 1 -/* 0F49F8 7F0BFEC8 01EB001A */ div $zero, $t7, $t3 -/* 0F49FC 7F0BFECC 00003010 */ mfhi $a2 -/* 0F4A00 7F0BFED0 00002025 */ move $a0, $zero -/* 0F4A04 7F0BFED4 15600002 */ bnez $t3, .L7F0BFEE0 -/* 0F4A08 7F0BFED8 00000000 */ nop -/* 0F4A0C 7F0BFEDC 0007000D */ break 7 -.L7F0BFEE0: -/* 0F4A10 7F0BFEE0 2401FFFF */ li $at, -1 -/* 0F4A14 7F0BFEE4 15610004 */ bne $t3, $at, .L7F0BFEF8 -/* 0F4A18 7F0BFEE8 3C018000 */ lui $at, 0x8000 -/* 0F4A1C 7F0BFEEC 15E10002 */ bne $t7, $at, .L7F0BFEF8 -/* 0F4A20 7F0BFEF0 00000000 */ nop -/* 0F4A24 7F0BFEF4 0006000D */ break 6 -.L7F0BFEF8: -/* 0F4A28 7F0BFEF8 19200025 */ blez $t1, .L7F0BFF90 -/* 0F4A2C 7F0BFEFC 00000000 */ nop -/* 0F4A30 7F0BFF00 01490019 */ multu $t2, $t1 -/* 0F4A34 7F0BFF04 0006C880 */ sll $t9, $a2, 2 -/* 0F4A38 7F0BFF08 00196880 */ sll $t5, $t9, 2 -/* 0F4A3C 7F0BFF0C 01B96823 */ subu $t5, $t5, $t9 -/* 0F4A40 7F0BFF10 000D6840 */ sll $t5, $t5, 1 -/* 0F4A44 7F0BFF14 022D1821 */ addu $v1, $s1, $t5 -/* 0F4A48 7F0BFF18 00002812 */ mflo $a1 -/* 0F4A4C 7F0BFF1C 0005C080 */ sll $t8, $a1, 2 -/* 0F4A50 7F0BFF20 03002825 */ move $a1, $t8 -.L7F0BFF24: -/* 0F4A54 7F0BFF24 8D0E0000 */ lw $t6, ($t0) -/* 0F4A58 7F0BFF28 80790002 */ lb $t9, 2($v1) -/* 0F4A5C 7F0BFF2C 0004C080 */ sll $t8, $a0, 2 -/* 0F4A60 7F0BFF30 00AE7821 */ addu $t7, $a1, $t6 -/* 0F4A64 7F0BFF34 01F81021 */ addu $v0, $t7, $t8 -/* 0F4A68 7F0BFF38 A0590000 */ sb $t9, ($v0) -/* 0F4A6C 7F0BFF3C 806D0003 */ lb $t5, 3($v1) -/* 0F4A70 7F0BFF40 24840001 */ addiu $a0, $a0, 1 -/* 0F4A74 7F0BFF44 24630006 */ addiu $v1, $v1, 6 -/* 0F4A78 7F0BFF48 A04D0001 */ sb $t5, 1($v0) -/* 0F4A7C 7F0BFF4C 946FFFFA */ lhu $t7, -6($v1) -/* 0F4A80 7F0BFF50 904E0001 */ lbu $t6, 1($v0) -/* 0F4A84 7F0BFF54 904D0000 */ lbu $t5, ($v0) -/* 0F4A88 7F0BFF58 A04F0002 */ sb $t7, 2($v0) -/* 0F4A8C 7F0BFF5C 9478FFFA */ lhu $t8, -6($v1) -/* 0F4A90 7F0BFF60 01AE7821 */ addu $t7, $t5, $t6 -/* 0F4A94 7F0BFF64 0018CA03 */ sra $t9, $t8, 8 -/* 0F4A98 7F0BFF68 90580002 */ lbu $t8, 2($v0) -/* 0F4A9C 7F0BFF6C A0590003 */ sb $t9, 3($v0) -/* 0F4AA0 7F0BFF70 904D0003 */ lbu $t5, 3($v0) -/* 0F4AA4 7F0BFF74 01F8C821 */ addu $t9, $t7, $t8 -/* 0F4AA8 7F0BFF78 032D7021 */ addu $t6, $t9, $t5 -/* 0F4AAC 7F0BFF7C 31CF00FF */ andi $t7, $t6, 0xff -/* 0F4AB0 7F0BFF80 00EF3821 */ addu $a3, $a3, $t7 -/* 0F4AB4 7F0BFF84 30F800FF */ andi $t8, $a3, 0xff -/* 0F4AB8 7F0BFF88 1489FFE6 */ bne $a0, $t1, .L7F0BFF24 -/* 0F4ABC 7F0BFF8C 03003825 */ move $a3, $t8 -.L7F0BFF90: -/* 0F4AC0 7F0BFF90 14D00003 */ bne $a2, $s0, .L7F0BFFA0 -/* 0F4AC4 7F0BFF94 254A0001 */ addiu $t2, $t2, 1 -/* 0F4AC8 7F0BFF98 10000010 */ b .L7F0BFFDC -/* 0F4ACC 7F0BFF9C 8D820000 */ lw $v0, ($t4) -.L7F0BFFA0: -/* 0F4AD0 7F0BFFA0 24D90001 */ addiu $t9, $a2, 1 -/* 0F4AD4 7F0BFFA4 032B001A */ div $zero, $t9, $t3 -/* 0F4AD8 7F0BFFA8 00003010 */ mfhi $a2 -/* 0F4ADC 7F0BFFAC 00002025 */ move $a0, $zero -/* 0F4AE0 7F0BFFB0 15600002 */ bnez $t3, .L7F0BFFBC -/* 0F4AE4 7F0BFFB4 00000000 */ nop -/* 0F4AE8 7F0BFFB8 0007000D */ break 7 -.L7F0BFFBC: -/* 0F4AEC 7F0BFFBC 2401FFFF */ li $at, -1 -/* 0F4AF0 7F0BFFC0 15610004 */ bne $t3, $at, .L7F0BFFD4 -/* 0F4AF4 7F0BFFC4 3C018000 */ lui $at, 0x8000 -/* 0F4AF8 7F0BFFC8 17210002 */ bne $t9, $at, .L7F0BFFD4 -/* 0F4AFC 7F0BFFCC 00000000 */ nop -/* 0F4B00 7F0BFFD0 0006000D */ break 6 -.L7F0BFFD4: -/* 0F4B04 7F0BFFD4 1000FFC8 */ b .L7F0BFEF8 -/* 0F4B08 7F0BFFD8 00000000 */ nop -.L7F0BFFDC: -/* 0F4B0C 7F0BFFDC A04A0001 */ sb $t2, 1($v0) -/* 0F4B10 7F0BFFE0 3C0D8005 */ lui $t5, %hi(speedgraphframes) -/* 0F4B14 7F0BFFE4 8DAD8498 */ lw $t5, %lo(speedgraphframes)($t5) -/* 0F4B18 7F0BFFE8 8D8E0000 */ lw $t6, ($t4) -/* 0F4B1C 7F0BFFEC 3C198002 */ lui $t9, %hi(g_randomSeed + 0x4) -/* 0F4B20 7F0BFFF0 3C118009 */ lui $s1, %hi(address_demo_loaded) -/* 0F4B24 7F0BFFF4 A1CD0000 */ sb $t5, ($t6) -/* 0F4B28 7F0BFFF8 8D8D0000 */ lw $t5, ($t4) -/* 0F4B2C 7F0BFFFC 8F394464 */ lw $t9, %lo(g_randomSeed + 0x4)($t9) -/* 0F4B30 7F0C0000 2631C5F4 */ addiu $s1, %lo(address_demo_loaded) # addiu $s1, $s1, -0x3a0c -/* 0F4B34 7F0C0004 A1B90002 */ sb $t9, 2($t5) -/* 0F4B38 7F0C0008 8D820000 */ lw $v0, ($t4) -/* 0F4B3C 7F0C000C 904E0000 */ lbu $t6, ($v0) -/* 0F4B40 7F0C0010 90580001 */ lbu $t8, 1($v0) -/* 0F4B44 7F0C0014 904F0002 */ lbu $t7, 2($v0) -/* 0F4B48 7F0C0018 01D8C821 */ addu $t9, $t6, $t8 -/* 0F4B4C 7F0C001C 032F7021 */ addu $t6, $t9, $t7 -/* 0F4B50 7F0C0020 0009C880 */ sll $t9, $t1, 2 -/* 0F4B54 7F0C0024 032A0019 */ multu $t9, $t2 -/* 0F4B58 7F0C0028 00EEC021 */ addu $t8, $a3, $t6 -/* 0F4B5C 7F0C002C A0580003 */ sb $t8, 3($v0) -/* 0F4B60 7F0C0030 8E250000 */ lw $a1, ($s1) -/* 0F4B64 7F0C0034 8D840000 */ lw $a0, ($t4) -/* 0F4B68 7F0C0038 00008012 */ mflo $s0 -/* 0F4B6C 7F0C003C 26100004 */ addiu $s0, $s0, 4 -/* 0F4B70 7F0C0040 2606000F */ addiu $a2, $s0, 0xf -/* 0F4B74 7F0C0044 34CF000F */ ori $t7, $a2, 0xf -/* 0F4B78 7F0C0048 0C001742 */ jal romWrite -/* 0F4B7C 7F0C004C 39E6000F */ xori $a2, $t7, 0xf -/* 0F4B80 7F0C0050 8E2E0000 */ lw $t6, ($s1) -/* 0F4B84 7F0C0054 26180001 */ addiu $t8, $s0, 1 -/* 0F4B88 7F0C0058 8FBF001C */ lw $ra, 0x1c($sp) -/* 0F4B8C 7F0C005C 37190001 */ ori $t9, $t8, 1 -/* 0F4B90 7F0C0060 3B2F0001 */ xori $t7, $t9, 1 -/* 0F4B94 7F0C0064 3C018009 */ lui $at, %hi(address_demo_loaded) -/* 0F4B98 7F0C0068 8FB00014 */ lw $s0, 0x14($sp) -/* 0F4B9C 7F0C006C 8FB10018 */ lw $s1, 0x18($sp) -/* 0F4BA0 7F0C0070 01CF6821 */ addu $t5, $t6, $t7 -/* 0F4BA4 7F0C0074 AC2DC5F4 */ sw $t5, %lo(address_demo_loaded)($at) -/* 0F4BA8 7F0C0078 03E00008 */ jr $ra -/* 0F4BAC 7F0C007C 27BD0020 */ addiu $sp, $sp, 0x20 -) -#endif diff --git a/src/game/rle.c b/src/game/rle.c index 8d597699..82141bca 100644 --- a/src/game/rle.c +++ b/src/game/rle.c @@ -1,70 +1,42 @@ #include - -#ifdef NONMATCHING -void rle_expand_8bit(void *src, u8 *dst) +/** + * Decode RLE-compressed 8-bit image data into a raw byte buffer. + */ +void rle_expand_8bit(u8 *src, u8 *dst) { - u8 *p; - u16 w; - u16 h; - u32 remaining; - u8 *run; - u8 count; + u8 *in; + s32 remaining; + s32 count; + s32 more; + u16 w, h; u8 value; - u32 i; - p = (u8 *)src; - w = *(u16 *)(p + 0); - h = *(u16 *)(p + 2); - remaining = (u32)w * (u32)h; - run = p + 0xA; + w = *(u16 *)&src[0]; + h = *(u16 *)&src[2]; + remaining = w * h; + in = &src[10]; - while (remaining > 0) { - count = run[0]; - value = run[1]; - run += 2; - remaining -= (u32)count; - i = (u32)count; - while (i > 0) { + do { + count = *in++; + value = *in++; + remaining -= count; + count--; + + do { + more = 0 < count; + count--; *dst++ = value; - i--; - } - } + } while (more); + } while (remaining > 0); } -#else -GLOBAL_ASM( -.text -glabel rle_expand_8bit -/* 04FC10 7F01B0E0 94820000 */ lhu $v0, ($a0) -/* 04FC14 7F01B0E4 94830002 */ lhu $v1, 2($a0) -/* 04FC18 7F01B0E8 2487000A */ addiu $a3, $a0, 0xa -/* 04FC1C 7F01B0EC 00430019 */ multu $v0, $v1 -/* 04FC20 7F01B0F0 00003012 */ mflo $a2 -/* 04FC24 7F01B0F4 00000000 */ nop -/* 04FC28 7F01B0F8 00000000 */ nop -/* 04FC2C 7F01B0FC 90E20000 */ lbu $v0, ($a3) -.L7F01B100: -/* 04FC30 7F01B100 90E30001 */ lbu $v1, 1($a3) -/* 04FC34 7F01B104 24E70002 */ addiu $a3, $a3, 2 -/* 04FC38 7F01B108 00C23023 */ subu $a2, $a2, $v0 -/* 04FC3C 7F01B10C 2442FFFF */ addiu $v0, $v0, -1 -.L7F01B110: -/* 04FC40 7F01B110 0002202A */ slt $a0, $zero, $v0 -/* 04FC44 7F01B114 2442FFFF */ addiu $v0, $v0, -1 -/* 04FC48 7F01B118 A0A30000 */ sb $v1, ($a1) -/* 04FC4C 7F01B11C 1480FFFC */ bnez $a0, .L7F01B110 -/* 04FC50 7F01B120 24A50001 */ addiu $a1, $a1, 1 -/* 04FC54 7F01B124 5CC0FFF6 */ bgtzl $a2, .L7F01B100 -/* 04FC58 7F01B128 90E20000 */ lbu $v0, ($a3) -/* 04FC5C 7F01B12C 03E00008 */ jr $ra -/* 04FC60 7F01B130 00000000 */ nop -) -#endif /** * Decode RLE-compressed RGB data into RGBA5551 pixels. + * + * Unreferenced */ void rle_expand_rgb_to_u16_5551(u8 *src, u16 *dst) { @@ -96,8 +68,11 @@ void rle_expand_rgb_to_u16_5551(u8 *src, u16 *dst) } while (remaining > 0); } + /** * Decode RLE-compressed RGB data into RGBA32 pixels. + * + * Unreferenced */ void rle_expand_rgb_to_rgba32(u8 *src, u8 *dst) { @@ -130,4 +105,4 @@ void rle_expand_rgb_to_rgba32(u8 *src, u8 *dst) out += 4; } while (count-- > 0); } while (remaining > 0); -} \ No newline at end of file +} diff --git a/src/game/rle.h b/src/game/rle.h index b91eac5b..ef12d4e7 100644 --- a/src/game/rle.h +++ b/src/game/rle.h @@ -3,7 +3,7 @@ #include -void rle_expand_8bit(void *src, u8 *dst); -void rle_expand_rgb_to_u16_5551(void *src, u16 *dst); -void rle_expand_rgb_to_rgba32(void *src, u8 *dst) +void rle_expand_8bit(u8 *src, u8 *dst); +void rle_expand_rgb_to_u16_5551(u8 *src, u16 *dst); +void rle_expand_rgb_to_rgba32(u8 *src, u8 *dst); #endif diff --git a/src/game/sky.c b/src/game/sky.c index 52bc20c3..4e299495 100644 --- a/src/game/sky.c +++ b/src/game/sky.c @@ -30,7 +30,7 @@ void skyGetWorldPosFromScreenPos(f32 offset_x, f32 offset_y, coord3d* out) { coord2d coords; f32 screen_top; - player_mtxf = currentPlayerGetMatrix10D4(); + player_mtxf = currentPlayerGetViewToWorldMtxf(); coords.x = getPlayer_c_screenleft() + offset_x; screen_top = getPlayer_c_screentop(); coords.y = fogGetCurrentEnvironmentp()->WaterConcavity + (offset_y + screen_top); @@ -50,7 +50,7 @@ bool skyIsScreenCornerInSky(coord3d *corner3dpos, coord3d *dstpos, f32 *dstfrac) f32 sp24; u32 stack[2]; #ifdef DEBUG - assert(eye[1] < fogGetCurrentEnvironmentp()->skyheight); + assert(eye[1] < fogGetCurrentEnvironmentp()->skyheight); //canonically bgFogGet() #endif if (f12 > 1.0f) @@ -253,6 +253,8 @@ void skyTick(void) } } +Gfx* sub_GAME_7F09343C(Gfx*, s32); + Gfx *skyRender(Gfx *gdl) { coord3d sp6a4; diff --git a/src/game/spectrum.c b/src/game/spectrum.c index 53d044e5..29f223d9 100644 --- a/src/game/spectrum.c +++ b/src/game/spectrum.c @@ -1,4 +1,5 @@ #include +#include #include #include "spectrum.h" #include "spectrum_hw.h" @@ -45,6 +46,8 @@ s32 sub_GAME_7F0D37DC(u32 cycles, u8 specA, u8 port, u8 value); // data s8 D_8004EC30 = 0x0; +extern u8 spec_keyboard_row_caps_z_x_c_v; +#pragma weak spec_keyboard_row_caps_z_x_c_v = spec_keyboard_buffer u8 spec_keyboard_buffer[] = { 0xFF, 0xFF, 0xFF, 0xFF, @@ -52,7 +55,7 @@ u8 spec_keyboard_buffer[] = 0xFF }; -u8 D_8004EC40 = 0; +u8 spec_kempston_joystick_state = 0; s16 D_8004EC44[] = { @@ -234,406 +237,135 @@ void sub_GAME_7F0D2A84(u8 *spec, u8 *alloc_ptr) } } - - - - -#ifdef NONMATCHING -https://decomp.me/scratch/bXZNh 99.95% void spectrum_p1controller_to_kempston(void) { - s32 sp34; - s32 sp30; - s32 sp2C; - s32 sp28; - s32 sp24; - s32 sp20; - s32 sp1C; - s32 temp_v0; + s32 kempston_up; + s32 kempston_down; + s32 kempston_left; + s32 kempston_right; + s32 kempston_fire; + s32 buttons; + s32 stick_x; + s32 stick_y; - s32 i; - u8 *arr; + s32 index; + + kempston_up = 0; + kempston_down = 0; + kempston_left = 0; + kempston_right = 0; + kempston_fire = 0; - sp34 = 0; - sp30 = 0; - sp2C = 0; - sp28 = 0; - sp24 = 0; - joyConsumeSamplesWrapper(); - sp20 = joyGetButtons(PLAYER_1, ANY_BUTTON); - sp1C = joyGetStickXInRange(PLAYER_1, -3, 3); - temp_v0 = joyGetStickYInRange(PLAYER_1, -3, 3); + buttons = joyGetButtons(PLAYER_1, ANY_BUTTON); + stick_x = joyGetStickXInRange(PLAYER_1, -3, 3); + stick_y = joyGetStickYInRange(PLAYER_1, -3, 3); - /* - // It's natural to write something like this for loop, but - // this iterates the address each loop iteration. Need to generate - // 4 different `sb` at -3, -2, -1, and -4 offset. - for (i = 0; i < 9; i++) + for (index = 1; index != 9; index += 4) { - spec_keyboard_buffer[i] = 0xff; + spec_keyboard_row_caps_z_x_c_v = 0xff; + spec_keyboard_buffer[index + 1] = 0xff; + spec_keyboard_buffer[index + 2] = 0xff; + spec_keyboard_buffer[index + 3] = 0xff; + spec_keyboard_buffer[index] = 0xff; } - // - // Maybe there's a double for loop? This will generate the correct `sb` - // but also add a lot of other stuff. - // for (i = 0; i < 2; i += 4) - // for (j = 1; j < 5; j ++) - // spec_keyboard_buffer[i*4 + j] = 0xff; - // - // Other things to note are: - // 1) the address goes from spec_keyboard_buffer+1 to spec_keyboard_buffer+9. - // And the spec_keyboard_buffer[0] uses the `at` register. - // 2) spectrum_input_handling function iterates spec_keyboard_buffer from 0 to 8. - // - // very early disasm looked like the following: - // 10780C 7F0D2CDC 3C018005 // lui $at, %hi(D_8004EC34) # $at, 0x8005 - // 107810 7F0D2CE0 3C048005 // lui $a0, %hi(D_8004EC34+1) # $a0, 0x8005 - // 107814 7F0D2CE4 3C058005 // lui $a1, %hi(D_8004EC3C+1) # $a1, 0x8005 - // 107818 7F0D2CE8 8FA70020 // lw $a3, 0x20($sp) - // 10781C 7F0D2CEC 8FA8001C // lw $t0, 0x1c($sp) - // 107820 7F0D2CF0 24A5EC3D // addiu $a1, %lo(D_8004EC3C+1) # addiu $a1, $a1, -0x13c3 - // 107824 7F0D2CF4 2484EC35 // addiu $a0, %lo(D_8004EC34+1) # addiu $a0, $a0, -0x13cb - // 107828 7F0D2CF8 A02EEC34 // sb $t6, %lo(D_8004EC34)($at) - */ - // Closest match. - // fake match? start at 1??? - // fake match? i != 9 - for (i = 1; i != 9; i+=4) + if (buttons & Z_TRIG) { - vvv[0] = 0xff; // hrmm - - // this seems awkward to arrive at this by hand: - spec_keyboard_buffer[i+1] = 0xff; - spec_keyboard_buffer[i+2] = 0xff; - spec_keyboard_buffer[i+3] = 0xff; - spec_keyboard_buffer[i] = 0xff; + kempston_fire = 1; } - - if (sp20 & Z_TRIG) { - sp24 = 1; + if ((buttons & (L_JPAD | L_CBUTTONS)) || (stick_x < -1)) + { + kempston_left = 1; } - if ((sp20 & (L_JPAD | L_CBUTTONS)) || (sp1C < -1)) { - sp2C = 1; + if ((buttons & (R_JPAD | R_CBUTTONS)) || (stick_x >= 2)) + { + kempston_right = 1; } - if ((sp20 & (R_JPAD | R_CBUTTONS)) || (sp1C >= 2)) { - sp28 = 1; + if ((buttons & (U_JPAD | U_CBUTTONS)) || (stick_y >= 2)) + { + kempston_up = 1; } - if ((sp20 & (U_JPAD | U_CBUTTONS)) || (temp_v0 >= 2)) { - sp34 = 1; + if ((buttons & (D_JPAD | D_CBUTTONS)) || (stick_y < -1)) + { + kempston_down = 1; } - if ((sp20 & (D_JPAD | D_CBUTTONS)) || (temp_v0 < -1)) { - sp30 = 1; + if ((spec_cur_rom_id == ROM_JETPAC) && (buttons & (A_BUTTON | B_BUTTON))) + { + kempston_up = 1; } - if ((spec_cur_rom_id == ROM_JETPAC) && (sp20 & (A_BUTTON | B_BUTTON))) { - sp34 = 1; + if (((spec_cur_rom_id == ROM_ALIEN8) || (spec_cur_rom_id == ROM_KNIGHTLORE)) && (buttons & (A_BUTTON | B_BUTTON))) + { + kempston_down = 1; } - if (((spec_cur_rom_id == ROM_ALIEN8) || (spec_cur_rom_id == ROM_KNIGHTLORE)) && (sp20 & (A_BUTTON | B_BUTTON))) { - sp30 = 1; + if (((spec_cur_rom_id == ROM_SABRE) || (spec_cur_rom_id == ROM_ATIC) || (spec_cur_rom_id == ROM_UNDER) || (spec_cur_rom_id == ROM_COOKIE) || (spec_cur_rom_id == ROM_ALIEN8) || (spec_cur_rom_id == ROM_KNIGHTLORE)) && (buttons & (A_BUTTON | B_BUTTON))) + { + spec_keyboard_buffer[4] = (u8)(spec_keyboard_buffer[4] & 0xFE); } - if (((spec_cur_rom_id == ROM_SABRE) || (spec_cur_rom_id == ROM_ATIC) || (spec_cur_rom_id == ROM_UNDER) || (spec_cur_rom_id == ROM_COOKIE) || (spec_cur_rom_id == ROM_ALIEN8) || (spec_cur_rom_id == ROM_KNIGHTLORE)) && (sp20 & (A_BUTTON | B_BUTTON))) { - spec_keyboard_buffer[4] = (u8) (spec_keyboard_buffer[4] & 0xFE); + if (((spec_cur_rom_id == ROM_JETPAC) || (spec_cur_rom_id == ROM_PSSST)) && (buttons & (A_BUTTON | B_BUTTON))) + { + spec_keyboard_buffer[3] = (u8)(spec_keyboard_buffer[3] & 0xEF); } - if (((spec_cur_rom_id == ROM_JETPAC) || (spec_cur_rom_id == ROM_PSSST)) && (sp20 & (A_BUTTON | B_BUTTON))) { - spec_keyboard_buffer[3] = (u8) (spec_keyboard_buffer[3] & 0xEF); + if ((spec_cur_rom_id == ROM_GUNFRIGHT) && (buttons & (A_BUTTON | B_BUTTON))) + { + spec_keyboard_buffer[3] = (u8)(spec_keyboard_buffer[3] & 0xFB); } - if ((spec_cur_rom_id == ROM_GUNFRIGHT) && (sp20 & (A_BUTTON | B_BUTTON))) { - spec_keyboard_buffer[3] = (u8) (spec_keyboard_buffer[3] & 0xFB); - } - if (spec_cur_rom_id == ROM_JETMAN) { - if (sp20 & (A_BUTTON | B_BUTTON)) { - spec_keyboard_buffer[4] = (u8) (spec_keyboard_buffer[4] & 0xEF); - } - if (sp20 & A_BUTTON) { - spec_keyboard_buffer[0] = (u8) (spec_keyboard_buffer[0] & 0xFD); - } - if (sp20 & B_BUTTON) { - spec_keyboard_buffer[7] = (u8) (spec_keyboard_buffer[7] & 0xFE); - } - } - if (spec_cur_rom_id == ROM_UNDER) { - if (sp20 & A_BUTTON) { - sp34 = 1; - } - if (sp20 & B_BUTTON) { - spec_keyboard_buffer[7] = (u8) (spec_keyboard_buffer[7] & 0xFE); - } - } - if (spec_cur_rom_id == ROM_ATIC) { - if (sp20 & (A_BUTTON | B_BUTTON)) { - spec_keyboard_buffer[0] = (u8) (spec_keyboard_buffer[0] & 0xFD); - } - if (sp20 & L_JPAD) { - spec_keyboard_buffer[3] = (u8) (spec_keyboard_buffer[3] & 0xF7); - } - if (sp20 & D_JPAD) { - spec_keyboard_buffer[3] = (u8) (spec_keyboard_buffer[3] & 0xEF); - } - if (sp20 & R_JPAD) { - spec_keyboard_buffer[4] = (u8) (spec_keyboard_buffer[4] & 0xEF); - } - } - - if (sp20 & L_TRIG) { - - for (i = 0; i < B_BUTTON; i++) + if (spec_cur_rom_id == ROM_JETMAN) + { + if (buttons & (A_BUTTON | B_BUTTON)) { - ptr_spectrum_roms[i] = 0; + spec_keyboard_buffer[4] = (u8)(spec_keyboard_buffer[4] & 0xEF); + } + if (buttons & A_BUTTON) + { + spec_keyboard_buffer[0] = (u8)(spec_keyboard_buffer[0] & 0xFD); + } + if (buttons & B_BUTTON) + { + spec_keyboard_buffer[7] = (u8)(spec_keyboard_buffer[7] & 0xFE); + } + } + if (spec_cur_rom_id == ROM_UNDER) + { + if (buttons & A_BUTTON) + { + kempston_up = 1; + } + if (buttons & B_BUTTON) + { + spec_keyboard_buffer[7] = (u8)(spec_keyboard_buffer[7] & 0xFE); + } + } + if (spec_cur_rom_id == ROM_ATIC) + { + if (buttons & (A_BUTTON | B_BUTTON)) + { + spec_keyboard_buffer[0] = (u8)(spec_keyboard_buffer[0] & 0xFD); + } + if (buttons & L_JPAD) + { + spec_keyboard_buffer[3] = (u8)(spec_keyboard_buffer[3] & 0xF7); + } + if (buttons & D_JPAD) + { + spec_keyboard_buffer[3] = (u8)(spec_keyboard_buffer[3] & 0xEF); + } + if (buttons & R_JPAD) + { + spec_keyboard_buffer[4] = (u8)(spec_keyboard_buffer[4] & 0xEF); } } - - D_8004EC40 = (sp24 << 4) | (sp34 << 3) | (sp30 << 2) | (sp2C << 1) | sp28; -} -#else -GLOBAL_ASM( -.text -glabel spectrum_p1controller_to_kempston -/* 1077B4 7F0D2C84 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 1077B8 7F0D2C88 AFBF0014 */ sw $ra, 0x14($sp) -/* 1077BC 7F0D2C8C AFA00034 */ sw $zero, 0x34($sp) -/* 1077C0 7F0D2C90 AFA00030 */ sw $zero, 0x30($sp) -/* 1077C4 7F0D2C94 AFA0002C */ sw $zero, 0x2c($sp) -/* 1077C8 7F0D2C98 AFA00028 */ sw $zero, 0x28($sp) -/* 1077CC 7F0D2C9C 0C002F43 */ jal joyConsumeSamplesWrapper -/* 1077D0 7F0D2CA0 AFA00024 */ sw $zero, 0x24($sp) -/* 1077D4 7F0D2CA4 00002025 */ move $a0, $zero -/* 1077D8 7F0D2CA8 0C0030C3 */ jal joyGetButtons -/* 1077DC 7F0D2CAC 3405FFFF */ li $a1, 65535 -/* 1077E0 7F0D2CB0 00002025 */ move $a0, $zero -/* 1077E4 7F0D2CB4 2405FFFD */ li $a1, -3 -/* 1077E8 7F0D2CB8 24060003 */ li $a2, 3 -/* 1077EC 7F0D2CBC 0C00312D */ jal joyGetStickXInRange -/* 1077F0 7F0D2CC0 AFA20020 */ sw $v0, 0x20($sp) -/* 1077F4 7F0D2CC4 00002025 */ move $a0, $zero -/* 1077F8 7F0D2CC8 2405FFFD */ li $a1, -3 -/* 1077FC 7F0D2CCC 24060003 */ li $a2, 3 -/* 107800 7F0D2CD0 0C00314A */ jal joyGetStickYInRange -/* 107804 7F0D2CD4 AFA2001C */ sw $v0, 0x1c($sp) -/* 107808 7F0D2CD8 240E00FF */ li $t6, 255 -/* 10780C 7F0D2CDC 3C018005 */ lui $at, %hi(spec_keyboard_buffer) -/* 107810 7F0D2CE0 3C048005 */ lui $a0, %hi(spec_keyboard_buffer+1) -/* 107814 7F0D2CE4 3C058005 */ lui $a1, %hi(spec_keyboard_buffer+9) -/* 107818 7F0D2CE8 8FA70020 */ lw $a3, 0x20($sp) -/* 10781C 7F0D2CEC 8FA8001C */ lw $t0, 0x1c($sp) -/* 107820 7F0D2CF0 24A5EC3D */ addiu $a1, %lo(spec_keyboard_buffer+9) # addiu $a1, $a1, -0x13c3 -/* 107824 7F0D2CF4 2484EC35 */ addiu $a0, %lo(spec_keyboard_buffer+1) # addiu $a0, $a0, -0x13cb -/* 107828 7F0D2CF8 A02EEC34 */ sb $t6, %lo(spec_keyboard_buffer)($at) -/* 10782C 7F0D2CFC 240300FF */ li $v1, 255 -.L7F0D2D00: -/* 107830 7F0D2D00 24840004 */ addiu $a0, $a0, 4 -/* 107834 7F0D2D04 A083FFFD */ sb $v1, -3($a0) -/* 107838 7F0D2D08 A083FFFE */ sb $v1, -2($a0) -/* 10783C 7F0D2D0C A083FFFF */ sb $v1, -1($a0) -/* 107840 7F0D2D10 1485FFFB */ bne $a0, $a1, .L7F0D2D00 -/* 107844 7F0D2D14 A083FFFC */ sb $v1, -4($a0) -/* 107848 7F0D2D18 30EF2000 */ andi $t7, $a3, 0x2000 -/* 10784C 7F0D2D1C 11E00003 */ beqz $t7, .L7F0D2D2C -/* 107850 7F0D2D20 30F90202 */ andi $t9, $a3, 0x202 -/* 107854 7F0D2D24 24180001 */ li $t8, 1 -/* 107858 7F0D2D28 AFB80024 */ sw $t8, 0x24($sp) -.L7F0D2D2C: -/* 10785C 7F0D2D2C 17200003 */ bnez $t9, .L7F0D2D3C -/* 107860 7F0D2D30 30EA0101 */ andi $t2, $a3, 0x101 -/* 107864 7F0D2D34 2901FFFF */ slti $at, $t0, -1 -/* 107868 7F0D2D38 10200002 */ beqz $at, .L7F0D2D44 -.L7F0D2D3C: -/* 10786C 7F0D2D3C 24090001 */ li $t1, 1 -/* 107870 7F0D2D40 AFA9002C */ sw $t1, 0x2c($sp) -.L7F0D2D44: -/* 107874 7F0D2D44 15400003 */ bnez $t2, .L7F0D2D54 -/* 107878 7F0D2D48 30EC0808 */ andi $t4, $a3, 0x808 -/* 10787C 7F0D2D4C 29010002 */ slti $at, $t0, 2 -/* 107880 7F0D2D50 14200002 */ bnez $at, .L7F0D2D5C -.L7F0D2D54: -/* 107884 7F0D2D54 240B0001 */ li $t3, 1 -/* 107888 7F0D2D58 AFAB0028 */ sw $t3, 0x28($sp) -.L7F0D2D5C: -/* 10788C 7F0D2D5C 15800003 */ bnez $t4, .L7F0D2D6C -/* 107890 7F0D2D60 30ED0404 */ andi $t5, $a3, 0x404 -/* 107894 7F0D2D64 28410002 */ slti $at, $v0, 2 -/* 107898 7F0D2D68 14200002 */ bnez $at, .L7F0D2D74 -.L7F0D2D6C: -/* 10789C 7F0D2D6C 24050001 */ li $a1, 1 -/* 1078A0 7F0D2D70 AFA50034 */ sw $a1, 0x34($sp) -.L7F0D2D74: -/* 1078A4 7F0D2D74 15A00003 */ bnez $t5, .L7F0D2D84 -/* 1078A8 7F0D2D78 8FA50034 */ lw $a1, 0x34($sp) -/* 1078AC 7F0D2D7C 2841FFFF */ slti $at, $v0, -1 -/* 1078B0 7F0D2D80 10200002 */ beqz $at, .L7F0D2D8C -.L7F0D2D84: -/* 1078B4 7F0D2D84 24060001 */ li $a2, 1 -/* 1078B8 7F0D2D88 AFA60030 */ sw $a2, 0x30($sp) -.L7F0D2D8C: -/* 1078BC 7F0D2D8C 3C038009 */ lui $v1, %hi(spec_cur_rom_id) -/* 1078C0 7F0D2D90 9063E34D */ lbu $v1, %lo(spec_cur_rom_id)($v1) -/* 1078C4 7F0D2D94 24040002 */ li $a0, 2 -/* 1078C8 7F0D2D98 8FA60030 */ lw $a2, 0x30($sp) -/* 1078CC 7F0D2D9C 14830005 */ bne $a0, $v1, .L7F0D2DB4 -/* 1078D0 7F0D2DA0 24020004 */ li $v0, 4 -/* 1078D4 7F0D2DA4 30EEC000 */ andi $t6, $a3, 0xc000 -/* 1078D8 7F0D2DA8 11C00002 */ beqz $t6, .L7F0D2DB4 -/* 1078DC 7F0D2DAC 00000000 */ nop -/* 1078E0 7F0D2DB0 24050001 */ li $a1, 1 -.L7F0D2DB4: -/* 1078E4 7F0D2DB4 10430002 */ beq $v0, $v1, .L7F0D2DC0 -/* 1078E8 7F0D2DB8 24010007 */ li $at, 7 -/* 1078EC 7F0D2DBC 14610004 */ bne $v1, $at, .L7F0D2DD0 -.L7F0D2DC0: -/* 1078F0 7F0D2DC0 30EFC000 */ andi $t7, $a3, 0xc000 -/* 1078F4 7F0D2DC4 11E00002 */ beqz $t7, .L7F0D2DD0 -/* 1078F8 7F0D2DC8 00000000 */ nop -/* 1078FC 7F0D2DCC 24060001 */ li $a2, 1 -.L7F0D2DD0: -/* 107900 7F0D2DD0 1060000A */ beqz $v1, .L7F0D2DFC -/* 107904 7F0D2DD4 24010001 */ li $at, 1 -/* 107908 7F0D2DD8 10610008 */ beq $v1, $at, .L7F0D2DFC -/* 10790C 7F0D2DDC 24010006 */ li $at, 6 -/* 107910 7F0D2DE0 10610006 */ beq $v1, $at, .L7F0D2DFC -/* 107914 7F0D2DE4 24010009 */ li $at, 9 -/* 107918 7F0D2DE8 50610005 */ beql $v1, $at, .L7F0D2E00 -/* 10791C 7F0D2DEC 30F8C000 */ andi $t8, $a3, 0xc000 -/* 107920 7F0D2DF0 10430002 */ beq $v0, $v1, .L7F0D2DFC -/* 107924 7F0D2DF4 24010007 */ li $at, 7 -/* 107928 7F0D2DF8 14610007 */ bne $v1, $at, .L7F0D2E18 -.L7F0D2DFC: -/* 10792C 7F0D2DFC 30F8C000 */ andi $t8, $a3, 0xc000 -.L7F0D2E00: -/* 107930 7F0D2E00 13000005 */ beqz $t8, .L7F0D2E18 -/* 107934 7F0D2E04 3C028005 */ lui $v0, %hi(spec_keyboard_buffer) -/* 107938 7F0D2E08 2442EC34 */ addiu $v0, %lo(spec_keyboard_buffer) # addiu $v0, $v0, -0x13cc -/* 10793C 7F0D2E0C 90590004 */ lbu $t9, 4($v0) -/* 107940 7F0D2E10 332900FE */ andi $t1, $t9, 0xfe -/* 107944 7F0D2E14 A0490004 */ sb $t1, 4($v0) -.L7F0D2E18: -/* 107948 7F0D2E18 3C028005 */ lui $v0, %hi(spec_keyboard_buffer) -/* 10794C 7F0D2E1C 10830003 */ beq $a0, $v1, .L7F0D2E2C -/* 107950 7F0D2E20 2442EC34 */ addiu $v0, %lo(spec_keyboard_buffer) # addiu $v0, $v0, -0x13cc -/* 107954 7F0D2E24 24010008 */ li $at, 8 -/* 107958 7F0D2E28 14610006 */ bne $v1, $at, .L7F0D2E44 -.L7F0D2E2C: -/* 10795C 7F0D2E2C 30EAC000 */ andi $t2, $a3, 0xc000 -/* 107960 7F0D2E30 51400005 */ beql $t2, $zero, .L7F0D2E48 -/* 107964 7F0D2E34 24010005 */ li $at, 5 -/* 107968 7F0D2E38 904B0003 */ lbu $t3, 3($v0) -/* 10796C 7F0D2E3C 316C00EF */ andi $t4, $t3, 0xef -/* 107970 7F0D2E40 A04C0003 */ sb $t4, 3($v0) -.L7F0D2E44: -/* 107974 7F0D2E44 24010005 */ li $at, 5 -.L7F0D2E48: -/* 107978 7F0D2E48 14610006 */ bne $v1, $at, .L7F0D2E64 -/* 10797C 7F0D2E4C 30EDC000 */ andi $t5, $a3, 0xc000 -/* 107980 7F0D2E50 51A00005 */ beql $t5, $zero, .L7F0D2E68 -/* 107984 7F0D2E54 24010003 */ li $at, 3 -/* 107988 7F0D2E58 904E0003 */ lbu $t6, 3($v0) -/* 10798C 7F0D2E5C 31CF00FB */ andi $t7, $t6, 0xfb -/* 107990 7F0D2E60 A04F0003 */ sb $t7, 3($v0) -.L7F0D2E64: -/* 107994 7F0D2E64 24010003 */ li $at, 3 -.L7F0D2E68: -/* 107998 7F0D2E68 14610010 */ bne $v1, $at, .L7F0D2EAC -/* 10799C 7F0D2E6C 30F8C000 */ andi $t8, $a3, 0xc000 -/* 1079A0 7F0D2E70 13000004 */ beqz $t8, .L7F0D2E84 -/* 1079A4 7F0D2E74 30EA8000 */ andi $t2, $a3, 0x8000 -/* 1079A8 7F0D2E78 90590004 */ lbu $t9, 4($v0) -/* 1079AC 7F0D2E7C 332900EF */ andi $t1, $t9, 0xef -/* 1079B0 7F0D2E80 A0490004 */ sb $t1, 4($v0) -.L7F0D2E84: -/* 1079B4 7F0D2E84 11400004 */ beqz $t2, .L7F0D2E98 -/* 1079B8 7F0D2E88 30ED4000 */ andi $t5, $a3, 0x4000 -/* 1079BC 7F0D2E8C 904B0000 */ lbu $t3, ($v0) -/* 1079C0 7F0D2E90 316C00FD */ andi $t4, $t3, 0xfd -/* 1079C4 7F0D2E94 A04C0000 */ sb $t4, ($v0) -.L7F0D2E98: -/* 1079C8 7F0D2E98 51A00005 */ beql $t5, $zero, .L7F0D2EB0 -/* 1079CC 7F0D2E9C 24010006 */ li $at, 6 -/* 1079D0 7F0D2EA0 904E0007 */ lbu $t6, 7($v0) -/* 1079D4 7F0D2EA4 31CF00FE */ andi $t7, $t6, 0xfe -/* 1079D8 7F0D2EA8 A04F0007 */ sb $t7, 7($v0) -.L7F0D2EAC: -/* 1079DC 7F0D2EAC 24010006 */ li $at, 6 -.L7F0D2EB0: -/* 1079E0 7F0D2EB0 14610009 */ bne $v1, $at, .L7F0D2ED8 -/* 1079E4 7F0D2EB4 30F88000 */ andi $t8, $a3, 0x8000 -/* 1079E8 7F0D2EB8 13000002 */ beqz $t8, .L7F0D2EC4 -/* 1079EC 7F0D2EBC 30E44000 */ andi $a0, $a3, 0x4000 -/* 1079F0 7F0D2EC0 24050001 */ li $a1, 1 -.L7F0D2EC4: -/* 1079F4 7F0D2EC4 50800005 */ beql $a0, $zero, .L7F0D2EDC -/* 1079F8 7F0D2EC8 24010001 */ li $at, 1 -/* 1079FC 7F0D2ECC 90590007 */ lbu $t9, 7($v0) -/* 107A00 7F0D2ED0 332900FE */ andi $t1, $t9, 0xfe -/* 107A04 7F0D2ED4 A0490007 */ sb $t1, 7($v0) -.L7F0D2ED8: -/* 107A08 7F0D2ED8 24010001 */ li $at, 1 -.L7F0D2EDC: -/* 107A0C 7F0D2EDC 14610015 */ bne $v1, $at, .L7F0D2F34 -/* 107A10 7F0D2EE0 30EAC000 */ andi $t2, $a3, 0xc000 -/* 107A14 7F0D2EE4 11400004 */ beqz $t2, .L7F0D2EF8 -/* 107A18 7F0D2EE8 30ED0200 */ andi $t5, $a3, 0x200 -/* 107A1C 7F0D2EEC 904B0000 */ lbu $t3, ($v0) -/* 107A20 7F0D2EF0 316C00FD */ andi $t4, $t3, 0xfd -/* 107A24 7F0D2EF4 A04C0000 */ sb $t4, ($v0) -.L7F0D2EF8: -/* 107A28 7F0D2EF8 11A00004 */ beqz $t5, .L7F0D2F0C -/* 107A2C 7F0D2EFC 30F80400 */ andi $t8, $a3, 0x400 -/* 107A30 7F0D2F00 904E0003 */ lbu $t6, 3($v0) -/* 107A34 7F0D2F04 31CF00F7 */ andi $t7, $t6, 0xf7 -/* 107A38 7F0D2F08 A04F0003 */ sb $t7, 3($v0) -.L7F0D2F0C: -/* 107A3C 7F0D2F0C 13000004 */ beqz $t8, .L7F0D2F20 -/* 107A40 7F0D2F10 30EA0100 */ andi $t2, $a3, 0x100 -/* 107A44 7F0D2F14 90590003 */ lbu $t9, 3($v0) -/* 107A48 7F0D2F18 332900EF */ andi $t1, $t9, 0xef -/* 107A4C 7F0D2F1C A0490003 */ sb $t1, 3($v0) -.L7F0D2F20: -/* 107A50 7F0D2F20 51400005 */ beql $t2, $zero, .L7F0D2F38 -/* 107A54 7F0D2F24 30ED0020 */ andi $t5, $a3, 0x20 -/* 107A58 7F0D2F28 904B0004 */ lbu $t3, 4($v0) -/* 107A5C 7F0D2F2C 316C00EF */ andi $t4, $t3, 0xef -/* 107A60 7F0D2F30 A04C0004 */ sb $t4, 4($v0) -.L7F0D2F34: -/* 107A64 7F0D2F34 30ED0020 */ andi $t5, $a3, 0x20 -.L7F0D2F38: -/* 107A68 7F0D2F38 11A00013 */ beqz $t5, .L7F0D2F88 -/* 107A6C 7F0D2F3C 3C018005 */ lui $at, %hi(D_8004EC40) -/* 107A70 7F0D2F40 3C028009 */ lui $v0, %hi(ptr_spectrum_roms) -/* 107A74 7F0D2F44 2442E328 */ addiu $v0, %lo(ptr_spectrum_roms) # addiu $v0, $v0, -0x1cd8 -/* 107A78 7F0D2F48 00001825 */ move $v1, $zero -/* 107A7C 7F0D2F4C 24044000 */ li $a0, 16384 -.L7F0D2F50: -/* 107A80 7F0D2F50 8C4E0000 */ lw $t6, ($v0) -/* 107A84 7F0D2F54 01C37821 */ addu $t7, $t6, $v1 -/* 107A88 7F0D2F58 A1E00000 */ sb $zero, ($t7) -/* 107A8C 7F0D2F5C 8C580000 */ lw $t8, ($v0) -/* 107A90 7F0D2F60 0303C821 */ addu $t9, $t8, $v1 -/* 107A94 7F0D2F64 A3200001 */ sb $zero, 1($t9) -/* 107A98 7F0D2F68 8C490000 */ lw $t1, ($v0) -/* 107A9C 7F0D2F6C 01235021 */ addu $t2, $t1, $v1 -/* 107AA0 7F0D2F70 A1400002 */ sb $zero, 2($t2) -/* 107AA4 7F0D2F74 8C4B0000 */ lw $t3, ($v0) -/* 107AA8 7F0D2F78 01636021 */ addu $t4, $t3, $v1 -/* 107AAC 7F0D2F7C 24630004 */ addiu $v1, 4 # addiu $v1, $v1, 4 -/* 107AB0 7F0D2F80 1464FFF3 */ bne $v1, $a0, .L7F0D2F50 -/* 107AB4 7F0D2F84 A1800003 */ sb $zero, 3($t4) -.L7F0D2F88: -/* 107AB8 7F0D2F88 8FAD0024 */ lw $t5, 0x24($sp) -/* 107ABC 7F0D2F8C 8FAA002C */ lw $t2, 0x2c($sp) -/* 107AC0 7F0D2F90 000578C0 */ sll $t7, $a1, 3 -/* 107AC4 7F0D2F94 000D7100 */ sll $t6, $t5, 4 -/* 107AC8 7F0D2F98 8FAD0028 */ lw $t5, 0x28($sp) -/* 107ACC 7F0D2F9C 01CFC025 */ or $t8, $t6, $t7 -/* 107AD0 7F0D2FA0 0006C880 */ sll $t9, $a2, 2 -/* 107AD4 7F0D2FA4 8FBF0014 */ lw $ra, 0x14($sp) -/* 107AD8 7F0D2FA8 03194825 */ or $t1, $t8, $t9 -/* 107ADC 7F0D2FAC 000A5840 */ sll $t3, $t2, 1 -/* 107AE0 7F0D2FB0 012B6025 */ or $t4, $t1, $t3 -/* 107AE4 7F0D2FB4 018D7025 */ or $t6, $t4, $t5 -/* 107AE8 7F0D2FB8 A02EEC40 */ sb $t6, %lo(D_8004EC40)($at) -/* 107AEC 7F0D2FBC 03E00008 */ jr $ra -/* 107AF0 7F0D2FC0 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif + if (buttons & L_TRIG) + { + for (index = 0; index < B_BUTTON; index++) + { + ptr_spectrum_roms[index] = 0; + } + } + + spec_kempston_joystick_state = (kempston_fire << 4) | (kempston_up << 3) | (kempston_down << 2) | (kempston_left << 1) | kempston_right; +} void init_spectrum_game(s32 arg0) @@ -830,7 +562,7 @@ u8 spectrum_input_handling(s32 arg0, u8 arg1, u8 arg2) if (arg2 == 0x1F) { - return D_8004EC40; + return spec_kempston_joystick_state; } return 0xFFU; @@ -9164,4 +8896,4 @@ void spectrum_hw_emulation(void) #undef SPEC_XM_SET_INDEX_R #undef SPEC_XM_GET_INDEX_R -} \ No newline at end of file +} diff --git a/src/game/stan.c b/src/game/stan.c index 92a79795..498f54c5 100644 --- a/src/game/stan.c +++ b/src/game/stan.c @@ -8,6 +8,8 @@ #include "stanintersection.h" #include "assert.h" +void getTileMidPoint(StandTile *tile, coord3d *out); + // bss struct StanPrefixRecord { //CODE.bss:8007B120 @@ -16,33 +18,20 @@ struct StanPrefixRecord { StandTile *ptr_firstroom; // read as offset 4, hence the struct }; -struct StanPrefixRecord stan_prefix; - - +struct StanPrefixRecord *stan_prefix; +s32 dword_CODE_bss_8007B124; //CODE.bss:8007B128 -s32 firststaninroom; -//CODE.bss:8007B12C -s32 dword_CODE_bss_8007B12C; -//CODE.bss:8007B130 -s32 dword_CODE_bss_8007B130; //stanladder s1 -//CODE.bss:8007B134 -char dword_CODE_bss_8007B134; -char dword_CODE_bss_8007B135; -char dword_CODE_bss_8007B136; -char dword_CODE_bss_8007B137; -char dword_CODE_bss_8007B138[0x21C]; +StandTile *firststaninroom[139]; //CODE.bss:8007B354 s32 dword_CODE_bss_8007B354; //CODE.bss:8007B358 //stan list array -s32 dword_CODE_bss_8007B358[0x1a1]; +StanRoomBounds g_StanRoomBounds[139]; //CODE.bss:8007B9DC s32 dword_CODE_bss_8007B9DC; //region? //CODE.bss:8007B9E0 s32 dword_CODE_bss_8007B9E0; - - // All relating to a saved collision, but not one struct //CODE.bss:8007B9E4 StandTile *stanSavedColl_tile; @@ -60,7 +49,6 @@ f32 stanSavedColl_someMin; //CODE.bss:8007BA04 PropRecord * stanSavedColl_posData; - //CODE.bss:8007BA08 s32 dword_CODE_bss_8007BA08; //CODE.bss:8007BA0C @@ -71,8 +59,9 @@ StandTile *bfsTileStack[352]; // data -//D:80040F30 //stanladder related -u8 D_80040F30[] = { +//D:80040F30 +// Indexed by StandTile.mid.headerMid.special. +u8 g_StanTileSpecialFlags[] = { 0x8D, 0x86, 0x04, 0xC5, 0x9D, 0xA4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -96,7 +85,7 @@ struct StandTile * standTileStart = NULL; //D:80040F5C s32 ptr_firstroom_0 = 0; //D:80040F60 -struct StanPrefixRecord* D_80040F60 = 0; +struct StandTile* stanTileEnd = NULL; //D:80040F64 s32 D_80040F64[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //D:80040FAC @@ -148,23 +137,14 @@ const char aStanlinelog[] = "-stanlinelog"; // forward declarations s32 stanIsSpecialBit1Set(StandTile *arg0, struct StandTileLocusCallbackRecord* arg1); -s32 sub_GAME_7F0B2274(StandTile *arg0, s32 arg1, f32 arg2, f32 arg3, s32 arg4, struct StandTileLocusCallbackRecord *arg5); -s32 sub_GAME_7F0B21B0(StandTile **tileStack, f32 target_x, f32 target_z, f32 unknown, s32 unk00, s32 *count_rtn, s32 bufMax); - -s32 sub_GAME_7F0B1DDC( - struct StandTile**, - f32, - f32, - f32, - standTileLocusCallback_A_t, - standTileLocusCallback_B_t, - standTileLocusCallback_C_t, - struct StandTileLocusCallbackRecord* -); -s32 sub_GAME_7F0B2110(StandTile *tile, struct StandTileLocusCallbackRecord*); +s32 stanCheckLinkedSpecialTile(StandTile *tile, s32 pointIdx, s32 arg2, s32 arg3, s32 arg4, s32 *outFlags); +s32 sub_GAME_7F0B21B0(StandTile **tileStack, f32 target_x, f32 target_z, f32 radius, s32 *rooms, s32 *count_rtn, s32 bufMax); +f32 getShortest2dDispToInfTripleEdge(StandTile *tile, s32 start3index, f32 p_x, f32 p_z); +StanCollisionResult sub_GAME_7F0B1DDC(struct StandTile**, f32, f32, f32, standTileLocusCallback_A_t, standTileLocusCallback_B_t, standTileLocusCallback_C_t, struct StandTileLocusCallbackRecord*); +s32 stanLocusAddTileRoomIfNew(StandTile *tile, struct StandTileLocusCallbackRecord *rec); s32 stanGetLocusField0(struct StandTileLocusCallbackRecord *arg0); s32 stanGetLocusCount(struct StandTileLocusCallbackRecord *arg0); -s32 sub_GAME_7F0B260C(StandTile *tile, s32 index, f32 p_x, f32 p_z, s32 arg4, struct StandTileLocusCallbackRecord *arg5); +bool stanLocusEdgeIsAboveY(StandTile *tile, s32 edgeIndex, f32 edgeDist, f32 distToPointA, f32 distToPointB, f32 *yThreshold); // end forward declarations @@ -174,1401 +154,565 @@ s32 stanBitwiseCastF32(f32 arg0) return *(s32*)&arg0; } -#ifdef NONMATCHING + // maybe getstanroomID and returns a string -s32 sub_GAME_7F0AEF3C(void *arg0) { - s32 sp24; - s32 temp_a1; - s32 phi_v0; - - // Node 0 - sp24 = (s32) ((D_80040FAC * 9) + &D_80040F64); - temp_a1 = (arg0->unk2 & 7); - D_80040FAC = (s32) ((D_80040FAC + 1) & 7); - if (temp_a1 == 0) +char *sub_GAME_7F0AEF3C(StandTile *tile) +{ + char *buffer; + s32 nextidx; + s32 type; + s32 letter; + s32 digit_raw; + s32 masked_number; + s32 idpart1; + u8 idpart2; + s32 idx; + + idx = D_80040FAC; + buffer = (char *)D_80040F64 + (idx * 9); + + idpart1 = *((u16 *) tile); + digit_raw = ((u8 *) tile)[2]; + idpart2 = digit_raw; + + letter = idpart2 >> 3; + idx = (idx + 1) & 7; + masked_number = idpart1 & 0x7fff; + type = (idpart1 >> 15) & 1; + letter &= 0x1f; + nextidx = idx; + digit_raw = idpart2 & 7; + + if (digit_raw) { - // Node 1 - phi_v0 = 0; + idpart1 = *((u16 *) tile); } - else + + D_80040FAC = nextidx; + + if (!digit_raw) { - // Node 2 - phi_v0 = (temp_a1 + 0x30); + if (digit_raw && digit_raw); + + idpart1 = 0; } - // Node 3 - sprintf(sp24, &aCDCC, ((((s32) *arg0 >> 0xf) & 1) + 0x70), (*arg0 & 0x7fff), (s32) ((((s32) arg0->unk2 >> 3) & 0x1f) + 0x61), (s32) phi_v0); - return sp24; + else + { + idpart1 = digit_raw + '0'; + } + + sprintf(buffer, aCDCC, type + 'p', masked_number, letter + 'a', idpart1); + + return buffer; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AEF3C -/* 0E3A6C 7F0AEF3C 3C068004 */ lui $a2, %hi(D_80040FAC) -/* 0E3A70 7F0AEF40 8CC60FAC */ lw $a2, %lo(D_80040FAC)($a2) -/* 0E3A74 7F0AEF44 3C0F8004 */ lui $t7, %hi(D_80040F64) -/* 0E3A78 7F0AEF48 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0E3A7C 7F0AEF4C 000670C0 */ sll $t6, $a2, 3 -/* 0E3A80 7F0AEF50 25EF0F64 */ addiu $t7, %lo(D_80040F64) # addiu $t7, $t7, 0xf64 -/* 0E3A84 7F0AEF54 01C67021 */ addu $t6, $t6, $a2 -/* 0E3A88 7F0AEF58 01CFC021 */ addu $t8, $t6, $t7 -/* 0E3A8C 7F0AEF5C AFBF001C */ sw $ra, 0x1c($sp) -/* 0E3A90 7F0AEF60 AFB80024 */ sw $t8, 0x24($sp) -/* 0E3A94 7F0AEF64 94820000 */ lhu $v0, ($a0) -/* 0E3A98 7F0AEF68 90830002 */ lbu $v1, 2($a0) -/* 0E3A9C 7F0AEF6C 24C60001 */ addiu $a2, $a2, 1 -/* 0E3AA0 7F0AEF70 000243C3 */ sra $t0, $v0, 0xf -/* 0E3AA4 7F0AEF74 000348C3 */ sra $t1, $v1, 3 -/* 0E3AA8 7F0AEF78 30D90007 */ andi $t9, $a2, 7 -/* 0E3AAC 7F0AEF7C 310A0001 */ andi $t2, $t0, 1 -/* 0E3AB0 7F0AEF80 312B001F */ andi $t3, $t1, 0x1f -/* 0E3AB4 7F0AEF84 3C018004 */ lui $at, %hi(D_80040FAC) -/* 0E3AB8 7F0AEF88 30650007 */ andi $a1, $v1, 7 -/* 0E3ABC 7F0AEF8C 01404025 */ move $t0, $t2 -/* 0E3AC0 7F0AEF90 01604825 */ move $t1, $t3 -/* 0E3AC4 7F0AEF94 AC390FAC */ sw $t9, %lo(D_80040FAC)($at) -/* 0E3AC8 7F0AEF98 14A00003 */ bnez $a1, .L7F0AEFA8 -/* 0E3ACC 7F0AEF9C 30477FFF */ andi $a3, $v0, 0x7fff -/* 0E3AD0 7F0AEFA0 10000002 */ b .L7F0AEFAC -/* 0E3AD4 7F0AEFA4 00001025 */ move $v0, $zero -.L7F0AEFA8: -/* 0E3AD8 7F0AEFA8 24A20030 */ addiu $v0, $a1, 0x30 -.L7F0AEFAC: -/* 0E3ADC 7F0AEFAC 3C058006 */ lui $a1, %hi(aCDCC) -/* 0E3AE0 7F0AEFB0 252C0061 */ addiu $t4, $t1, 0x61 -/* 0E3AE4 7F0AEFB4 AFAC0010 */ sw $t4, 0x10($sp) -/* 0E3AE8 7F0AEFB8 24A585A0 */ addiu $a1, %lo(aCDCC) # addiu $a1, $a1, -0x7a60 -/* 0E3AEC 7F0AEFBC 8FA40024 */ lw $a0, 0x24($sp) -/* 0E3AF0 7F0AEFC0 25060070 */ addiu $a2, $t0, 0x70 -/* 0E3AF4 7F0AEFC4 0C002B25 */ jal sprintf -/* 0E3AF8 7F0AEFC8 AFA20014 */ sw $v0, 0x14($sp) -/* 0E3AFC 7F0AEFCC 8FBF001C */ lw $ra, 0x1c($sp) -/* 0E3B00 7F0AEFD0 8FA20024 */ lw $v0, 0x24($sp) -/* 0E3B04 7F0AEFD4 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0E3B08 7F0AEFD8 03E00008 */ jr $ra -/* 0E3B0C 7F0AEFDC 00000000 */ nop -) -#endif - - - -void sub_GAME_7F0AEFE0(void) { - sub_GAME_7F0AEF3C(); //maybe getstanroomID +/** + * Unreferenced. + */ +void sub_GAME_7F0AEFE0(StandTile *tile) +{ + sub_GAME_7F0AEF3C(tile); //maybe getstanroomID } + //stanChecksf -u32 stanRemovedAnimationRoutine(s32 arg0) { +u32 stanRemovedAnimationRoutine(s32 arg0) +{ #ifdef DEBUG if (arg0 < ptr_firstroom_0) { osSyncPrintf("checksf: ERROR line %d %08x<%08x", __LINE__, arg0, ptr_firstroom_0); } - if (D_80040F60 < arg0) + if (stanTileEnd < arg0) { - osSyncPrintf("checksf: ERROR line %d %08x>%08x", __LINE__, arg0, D_80040F60); + osSyncPrintf("checksf: ERROR line %d %08x>%08x", __LINE__, arg0, stanTileEnd); } #endif return 0; } -void stanInit(void) { - debTryAdd(&stan_c_debug_notice_list_entry, &aStan_c_debug);//"stan_c_debug"); -} - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0AF038(void) { - void *temp_v1; - s32 temp_s0; - s32 temp_a2; - void *temp_s0_2; - s32 temp_s0_4; - s16 temp_s0_3; - s32 temp_s2; - s32 temp_v1_2; - s32 temp_s0_5; - void *temp_a0; - void *phi_v1; - s32 curroom; - void *firststan; - void *phi_s3; - void *phi_s5; - s16 phi_s0; - s32 phi_s2; - s32 phi_v1_2; - s32 phi_s0_2; - void *phi_s1; - s32 phi_a2; - - // Node 0 - dword_CODE_bss_8007B9DC = 0; - dword_CODE_bss_8007B12C = 0; - dword_CODE_bss_8007B12C = 0; - dword_CODE_bss_8007B130 = 0; - phi_v1 = &dword_CODE_bss_8007B134; -loop_1: - // Node 1 - temp_v1 = (phi_v1 + 0x10); - temp_v1->unk-10 = 0; - temp_v1->unk-C = 0; - temp_v1->unk-8 = 0; - temp_v1->unk-4 = 0; - phi_v1 = temp_v1; - if (temp_v1 != &dword_CODE_bss_8007B354) - { - goto loop_1; - } - // Node 2 - if (*stan_prefix.ptr_firstroom != 0) - { - // Node 3 - curroom = 0xff; - firststan = stan_prefix.ptr_firstroom; - curroom = 0xff; -loop_4: - // Node 4 - temp_s0 = firststan->unk3; - curroom = curroom; - if (curroom != temp_s0) - { - // Node 5 - curroom = (temp_s0 & 0xff); - //assert(curroom= dword_CODE_bss_8007B9DC) - { - // Node 6 - dword_CODE_bss_8007B9DC = (s32) (curroom + 1); - } - // assert(firststaninroom[curroom]==NULL); - // Node 7 - *(&firststaninroom + (curroom * 4)) = (void *) firststan; - temp_s0_2 = (&dword_CODE_bss_8007B358 + (curroom * 0xc)); - temp_s0_2->unk4 = (u16)0x7fff; - temp_s0_2->unkA = (u16)-0x8000; - temp_s0_2->unk2 = (s16) temp_s0_2->unk4; - *temp_s0_2 = (s16) temp_s0_2->unk4; - temp_s0_2->unk8 = (s16) temp_s0_2->unkA; - temp_s0_2->unk6 = (s16) temp_s0_2->unkA; - curroom = curroom; - curroom = curroom; - } - // Node 8 - temp_s0_4 = (((s32) firststan->unk6 >> 0xc) & 0xf); - phi_s0_2 = temp_s0_4; - if (temp_s0_4 > 0) - { - // Node 9 - phi_v1_2 = 0; - phi_s1 = firststan; -loop_10: - // Node 10 - phi_s3 = phi_s1; - phi_s5 = (&dword_CODE_bss_8007B358 + (((curroom * 4) - curroom) * 4)); - phi_s2 = 0; -loop_11: - // Node 11 - temp_s0_3 = phi_s3->unk8; - temp_s2 = (phi_s2 + 2); - phi_s0 = temp_s0_3; - if (temp_s0_3 < *phi_s5) - { - // Node 12 - *phi_s5 = temp_s0_3; - phi_s0 = phi_s3->unk8; - } - // Node 13 - if (phi_s5->unk6 < phi_s0) - { - // Node 14 - phi_s5->unk6 = (s16) phi_s0; - } - // Node 15 - phi_s3 = (phi_s3 + 2); - phi_s5 = (phi_s5 + 2); - phi_s2 = temp_s2; - if (temp_s2 != 6) - { - goto loop_11; - } - // Node 16 - temp_v1_2 = (phi_v1_2 + 1); - temp_s0_5 = (((s32) firststan->unk6 >> 0xc) & 0xf); - phi_v1_2 = temp_v1_2; - phi_s0_2 = temp_s0_5; - phi_s1 = (phi_s1 + 8); - if (temp_v1_2 < temp_s0_5) - { - goto loop_10; - } - } - // Node 17 - temp_a0 = (*(&list_of_tilesizes + phi_s0_2) + firststan); - firststan = temp_a0; - curroom = curroom; - if (*temp_a0 != 0) - { - goto loop_4; - } - } - // Node 18 - // Error: assert not self.is_leaf - return; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AF038 -/* 0E3B68 7F0AF038 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0E3B6C 7F0AF03C 3C078008 */ lui $a3, %hi(dword_CODE_bss_8007B9DC) -/* 0E3B70 7F0AF040 24E7B9DC */ addiu $a3, %lo(dword_CODE_bss_8007B9DC) # addiu $a3, $a3, -0x4624 -/* 0E3B74 7F0AF044 ACE00000 */ sw $zero, ($a3) -/* 0E3B78 7F0AF048 3C018008 */ lui $at, %hi(dword_CODE_bss_8007B12C) -/* 0E3B7C 7F0AF04C AC20B128 */ sw $zero, %lo(firststaninroom)($at) -/* 0E3B80 7F0AF050 AC20B12C */ sw $zero, %lo(dword_CODE_bss_8007B12C)($at) -/* 0E3B84 7F0AF054 3C018008 */ lui $at, %hi(dword_CODE_bss_8007B130) -/* 0E3B88 7F0AF058 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007B134) -/* 0E3B8C 7F0AF05C 3C028008 */ lui $v0, %hi(dword_CODE_bss_8007B354) -/* 0E3B90 7F0AF060 AFB5001C */ sw $s5, 0x1c($sp) -/* 0E3B94 7F0AF064 AFB40018 */ sw $s4, 0x18($sp) -/* 0E3B98 7F0AF068 AFB30014 */ sw $s3, 0x14($sp) -/* 0E3B9C 7F0AF06C AFB20010 */ sw $s2, 0x10($sp) -/* 0E3BA0 7F0AF070 AFB1000C */ sw $s1, 0xc($sp) -/* 0E3BA4 7F0AF074 AFB00008 */ sw $s0, 8($sp) -/* 0E3BA8 7F0AF078 240600FF */ li $a2, 255 -/* 0E3BAC 7F0AF07C 2442B354 */ addiu $v0, %lo(dword_CODE_bss_8007B354) # addiu $v0, $v0, -0x4cac -/* 0E3BB0 7F0AF080 2463B134 */ addiu $v1, %lo(dword_CODE_bss_8007B134) # addiu $v1, $v1, -0x4ecc -/* 0E3BB4 7F0AF084 AC20B130 */ sw $zero, %lo(dword_CODE_bss_8007B130)($at) -.L7F0AF088: -/* 0E3BB8 7F0AF088 24630010 */ addiu $v1, $v1, 0x10 -/* 0E3BBC 7F0AF08C AC60FFF0 */ sw $zero, -0x10($v1) -/* 0E3BC0 7F0AF090 AC60FFF4 */ sw $zero, -0xc($v1) -/* 0E3BC4 7F0AF094 AC60FFF8 */ sw $zero, -8($v1) -/* 0E3BC8 7F0AF098 1462FFFB */ bne $v1, $v0, .L7F0AF088 -/* 0E3BCC 7F0AF09C AC60FFFC */ sw $zero, -4($v1) -/* 0E3BD0 7F0AF0A0 3C0E8008 */ lui $t6, %hi(stan_prefix) -/* 0E3BD4 7F0AF0A4 8DCEB120 */ lw $t6, %lo(stan_prefix)($t6) -/* 0E3BD8 7F0AF0A8 3C0D8004 */ lui $t5, %hi(list_of_tilesizes) -/* 0E3BDC 7F0AF0AC 25AD0F4C */ addiu $t5, %lo(list_of_tilesizes) # addiu $t5, $t5, 0xf4c -/* 0E3BE0 7F0AF0B0 8DC40004 */ lw $a0, 4($t6) -/* 0E3BE4 7F0AF0B4 00C02825 */ move $a1, $a2 -/* 0E3BE8 7F0AF0B8 240C8000 */ li $t4, -32768 -/* 0E3BEC 7F0AF0BC 8C8F0000 */ lw $t7, ($a0) -/* 0E3BF0 7F0AF0C0 240B7FFF */ li $t3, 32767 -/* 0E3BF4 7F0AF0C4 240A000C */ li $t2, 12 -/* 0E3BF8 7F0AF0C8 11E00048 */ beqz $t7, .L7F0AF1EC -/* 0E3BFC 7F0AF0CC 3C098008 */ lui $t1, %hi(dword_CODE_bss_8007B358) -/* 0E3C00 7F0AF0D0 3C088008 */ lui $t0, %hi(firststaninroom) -/* 0E3C04 7F0AF0D4 2508B128 */ addiu $t0, %lo(firststaninroom) # addiu $t0, $t0, -0x4ed8 -/* 0E3C08 7F0AF0D8 2529B358 */ addiu $t1, %lo(dword_CODE_bss_8007B358) # addiu $t1, $t1, -0x4ca8 -/* 0E3C0C 7F0AF0DC 24020006 */ li $v0, 6 -/* 0E3C10 7F0AF0E0 90900003 */ lbu $s0, 3($a0) -.L7F0AF0E4: -/* 0E3C14 7F0AF0E4 00001825 */ move $v1, $zero -/* 0E3C18 7F0AF0E8 50B00017 */ beql $a1, $s0, .L7F0AF148 -/* 0E3C1C 7F0AF0EC 84900006 */ lh $s0, 6($a0) -/* 0E3C20 7F0AF0F0 8CF80000 */ lw $t8, ($a3) -/* 0E3C24 7F0AF0F4 320600FF */ andi $a2, $s0, 0xff -/* 0E3C28 7F0AF0F8 00C02825 */ move $a1, $a2 -/* 0E3C2C 7F0AF0FC 00D8082A */ slt $at, $a2, $t8 -/* 0E3C30 7F0AF100 14200002 */ bnez $at, .L7F0AF10C -/* 0E3C34 7F0AF104 24B90001 */ addiu $t9, $a1, 1 -/* 0E3C38 7F0AF108 ACF90000 */ sw $t9, ($a3) -.L7F0AF10C: -/* 0E3C3C 7F0AF10C 00CA0019 */ multu $a2, $t2 -/* 0E3C40 7F0AF110 00067080 */ sll $t6, $a2, 2 -/* 0E3C44 7F0AF114 010E7821 */ addu $t7, $t0, $t6 -/* 0E3C48 7F0AF118 ADE40000 */ sw $a0, ($t7) -/* 0E3C4C 7F0AF11C 0000C012 */ mflo $t8 -/* 0E3C50 7F0AF120 01388021 */ addu $s0, $t1, $t8 -/* 0E3C54 7F0AF124 A60B0004 */ sh $t3, 4($s0) -/* 0E3C58 7F0AF128 86110004 */ lh $s1, 4($s0) -/* 0E3C5C 7F0AF12C A60C000A */ sh $t4, 0xa($s0) -/* 0E3C60 7F0AF130 A6110002 */ sh $s1, 2($s0) -/* 0E3C64 7F0AF134 A6110000 */ sh $s1, ($s0) -/* 0E3C68 7F0AF138 8611000A */ lh $s1, 0xa($s0) -/* 0E3C6C 7F0AF13C A6110008 */ sh $s1, 8($s0) -/* 0E3C70 7F0AF140 A6110006 */ sh $s1, 6($s0) -/* 0E3C74 7F0AF144 84900006 */ lh $s0, 6($a0) -.L7F0AF148: -/* 0E3C78 7F0AF148 00067880 */ sll $t7, $a2, 2 -/* 0E3C7C 7F0AF14C 01E67823 */ subu $t7, $t7, $a2 -/* 0E3C80 7F0AF150 0010CB03 */ sra $t9, $s0, 0xc -/* 0E3C84 7F0AF154 3330000F */ andi $s0, $t9, 0xf -/* 0E3C88 7F0AF158 1A00001E */ blez $s0, .L7F0AF1D4 -/* 0E3C8C 7F0AF15C 00808825 */ move $s1, $a0 -/* 0E3C90 7F0AF160 000F7880 */ sll $t7, $t7, 2 -/* 0E3C94 7F0AF164 012FA021 */ addu $s4, $t1, $t7 -/* 0E3C98 7F0AF168 00009025 */ move $s2, $zero -.L7F0AF16C: -/* 0E3C9C 7F0AF16C 02209825 */ move $s3, $s1 -/* 0E3CA0 7F0AF170 0280A825 */ move $s5, $s4 -.L7F0AF174: -/* 0E3CA4 7F0AF174 86700008 */ lh $s0, 8($s3) -/* 0E3CA8 7F0AF178 86B80000 */ lh $t8, ($s5) -/* 0E3CAC 7F0AF17C 26520002 */ addiu $s2, $s2, 2 -/* 0E3CB0 7F0AF180 0218082A */ slt $at, $s0, $t8 -/* 0E3CB4 7F0AF184 50200004 */ beql $at, $zero, .L7F0AF198 -/* 0E3CB8 7F0AF188 86B90006 */ lh $t9, 6($s5) -/* 0E3CBC 7F0AF18C A6B00000 */ sh $s0, ($s5) -/* 0E3CC0 7F0AF190 86700008 */ lh $s0, 8($s3) -/* 0E3CC4 7F0AF194 86B90006 */ lh $t9, 6($s5) -.L7F0AF198: -/* 0E3CC8 7F0AF198 26730002 */ addiu $s3, $s3, 2 -/* 0E3CCC 7F0AF19C 0330082A */ slt $at, $t9, $s0 -/* 0E3CD0 7F0AF1A0 10200002 */ beqz $at, .L7F0AF1AC -/* 0E3CD4 7F0AF1A4 00000000 */ nop -/* 0E3CD8 7F0AF1A8 A6B00006 */ sh $s0, 6($s5) -.L7F0AF1AC: -/* 0E3CDC 7F0AF1AC 1642FFF1 */ bne $s2, $v0, .L7F0AF174 -/* 0E3CE0 7F0AF1B0 26B50002 */ addiu $s5, $s5, 2 -/* 0E3CE4 7F0AF1B4 84900006 */ lh $s0, 6($a0) -/* 0E3CE8 7F0AF1B8 24630001 */ addiu $v1, $v1, 1 -/* 0E3CEC 7F0AF1BC 26310008 */ addiu $s1, $s1, 8 -/* 0E3CF0 7F0AF1C0 00107303 */ sra $t6, $s0, 0xc -/* 0E3CF4 7F0AF1C4 31D0000F */ andi $s0, $t6, 0xf -/* 0E3CF8 7F0AF1C8 0070082A */ slt $at, $v1, $s0 -/* 0E3CFC 7F0AF1CC 5420FFE7 */ bnezl $at, .L7F0AF16C -/* 0E3D00 7F0AF1D0 00009025 */ move $s2, $zero -.L7F0AF1D4: -/* 0E3D04 7F0AF1D4 01B0C021 */ addu $t8, $t5, $s0 -/* 0E3D08 7F0AF1D8 93190000 */ lbu $t9, ($t8) -/* 0E3D0C 7F0AF1DC 03242021 */ addu $a0, $t9, $a0 -/* 0E3D10 7F0AF1E0 8C8E0000 */ lw $t6, ($a0) -/* 0E3D14 7F0AF1E4 55C0FFBF */ bnezl $t6, .L7F0AF0E4 -/* 0E3D18 7F0AF1E8 90900003 */ lbu $s0, 3($a0) -.L7F0AF1EC: -/* 0E3D1C 7F0AF1EC 8FB00008 */ lw $s0, 8($sp) -/* 0E3D20 7F0AF1F0 8FB1000C */ lw $s1, 0xc($sp) -/* 0E3D24 7F0AF1F4 8FB20010 */ lw $s2, 0x10($sp) -/* 0E3D28 7F0AF1F8 8FB30014 */ lw $s3, 0x14($sp) -/* 0E3D2C 7F0AF1FC 8FB40018 */ lw $s4, 0x18($sp) -/* 0E3D30 7F0AF200 8FB5001C */ lw $s5, 0x1c($sp) -/* 0E3D34 7F0AF204 03E00008 */ jr $ra -/* 0E3D38 7F0AF208 27BD0020 */ addiu $sp, $sp, 0x20 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0AF20C(void) +void stanInit(void) { - float fVar1; - bool bVar2; - int iVar3; - double dVar4; - float *pfStack00000014; - int iStack0000001c; - float *pfStack00000024; - dword local_c0; - dword local_70; - dword local_6c; - int *local_68; - int *local_64; - short local_60; - short local_5e; - short local_5c; - float local_58; - float local_54; - float local_50; - float local_48 [2]; - float local_40; - float local_3c; - uint local_38; - int local_34; - float local_30; - int *local_2c; - int local_28; - float local_24; - qword local_20; - qword local_18; - qword local_10; - dword local_8; - - local_68 = NULL; - local_3c = -3.402823e+38; - bVar2 = false; - local_58 = *param_1 * level_scale; - local_54 = param_1[1] * level_scale; - local_50 = param_1[2] * level_scale; - if (32767.0 < local_54) { - local_54 = 32767.0; - } - if (local_54 < -32767.0) { - local_54 = -32767.0; - } - local_20._6_2_ = local_58; - local_60 = local_20._6_2_; - local_18._6_2_ = local_54; - local_5e = local_18._6_2_; - local_10._6_2_ = local_50; - local_5c = local_10._6_2_; - local_38 = 0; - pfStack00000014 = param_1; - iStack0000001c = param_2; - pfStack00000024 = param_3; - do { - if (DAT_83aa0290 <= local_38) { - if ((local_68 != NULL) && (pfStack00000024 != NULL)) { - *pfStack00000024 = local_3c; - } - return local_68; - } - if (((((firststaninroom[local_38] != NULL) && - (stanfileRecord_ARRAY_83aa0a58[local_38].id <= local_60)) && - (local_60 <= stanfileRecord_ARRAY_83aa0a58[local_38].tail)) && - ((stanfileRecord_ARRAY_83aa0a58[local_38].mid <= local_5c && - (local_5c <= *(&stanfileRecord_ARRAY_83aa0a58[local_38].points + 2))))) && - (stanfileRecord_ARRAY_83aa0a58[local_38].id2 <= local_5e)) { - if (iStack0000001c == 0) { -LAB_8238358c: - for (local_2c = firststaninroom[local_38]; (*local_2c != 0 && (*(local_2c + 3) == local_38)) - ; local_2c = getNextStan(local_2c)) { - for (local_28 = 0; local_28 < 3; local_28 = local_28 + 1) { - dVar4 = getShortest2dDispToInfTripleEdge(local_58,local_50,local_2c,local_28); - if (dVar4 < -2.0) goto LAB_823835a8; - if (dVar4 < 2.0) { - bVar2 = true; - } - } - iVar3 = sub_GAME_7F0AF760(local_2c); - if (iVar3 == 0) { - if (bVar2) { - getTileMidPoint(local_2c,local_48); - local_64 = local_2c; - iVar3 = walkTilesBetweenPoints_NoCallback - (local_48[0],local_40,*pfStack00000014,pfStack00000014[2],&local_64) - ; - if ((iVar3 == 0) || (local_64 != local_2c)) goto LAB_823835a8; - } - dVar4 = stanGetPositionYValue(*pfStack00000014,pfStack00000014[2],local_2c); - fVar1 = dVar4; - if ((fVar1 <= pfStack00000014[1]) && (local_3c < fVar1)) { - local_68 = local_2c; - local_3c = fVar1; - } - } -LAB_823835a8: - } - } - else { - for (local_28 = 0; (*(iStack0000001c + local_28) != -1 && (local_28 < 4)); - local_28 = local_28 + 1) { - if (*(iStack0000001c + local_28) == local_38) goto LAB_8238358c; - } - } - } - local_38 = local_38 + 1; - } while( true ); + debTryAdd(&stan_c_debug_notice_list_entry, &aStan_c_debug); //"stan_c_debug"); } -#else -GLOBAL_ASM( -.late_rodata -glabel D_800585CC -.word 0x46fffe00 /*32767.0*/ -glabel D_800585D0 -.word 0xff7fffff /*-3.4028235e38*/ -glabel D_800585D4 -.word 0xc6fffe00 /*-32767.0*/ -.text -glabel sub_GAME_7F0AF20C -/* 0E3D3C 7F0AF20C 27BDFF38 */ addiu $sp, $sp, -0xc8 -/* 0E3D40 7F0AF210 3C018006 */ lui $at, %hi(D_800585CC) -/* 0E3D44 7F0AF214 C42285CC */ lwc1 $f2, %lo(D_800585CC)($at) -/* 0E3D48 7F0AF218 F7B80030 */ sdc1 $f24, 0x30($sp) -/* 0E3D4C 7F0AF21C 3C018006 */ lui $at, %hi(D_800585D0) -/* 0E3D50 7F0AF220 C43885D0 */ lwc1 $f24, %lo(D_800585D0)($at) -/* 0E3D54 7F0AF224 AFBF005C */ sw $ra, 0x5c($sp) -/* 0E3D58 7F0AF228 AFBE0058 */ sw $fp, 0x58($sp) -/* 0E3D5C 7F0AF22C AFB70054 */ sw $s7, 0x54($sp) -/* 0E3D60 7F0AF230 AFB60050 */ sw $s6, 0x50($sp) -/* 0E3D64 7F0AF234 AFB5004C */ sw $s5, 0x4c($sp) -/* 0E3D68 7F0AF238 AFB40048 */ sw $s4, 0x48($sp) -/* 0E3D6C 7F0AF23C AFB30044 */ sw $s3, 0x44($sp) -/* 0E3D70 7F0AF240 AFB20040 */ sw $s2, 0x40($sp) -/* 0E3D74 7F0AF244 AFB1003C */ sw $s1, 0x3c($sp) -/* 0E3D78 7F0AF248 AFB00038 */ sw $s0, 0x38($sp) -/* 0E3D7C 7F0AF24C F7B60028 */ sdc1 $f22, 0x28($sp) -/* 0E3D80 7F0AF250 F7B40020 */ sdc1 $f20, 0x20($sp) -/* 0E3D84 7F0AF254 AFA500CC */ sw $a1, 0xcc($sp) -/* 0E3D88 7F0AF258 AFA600D0 */ sw $a2, 0xd0($sp) -/* 0E3D8C 7F0AF25C AFA0009C */ sw $zero, 0x9c($sp) -/* 0E3D90 7F0AF260 3C018004 */ lui $at, %hi(level_scale) -/* 0E3D94 7F0AF264 C4200F44 */ lwc1 $f0, %lo(level_scale)($at) -/* 0E3D98 7F0AF268 C4840000 */ lwc1 $f4, ($a0) -/* 0E3D9C 7F0AF26C 0080A025 */ move $s4, $a0 -/* 0E3DA0 7F0AF270 3C178004 */ lui $s7, %hi(list_of_tilesizes) -/* 0E3DA4 7F0AF274 46002182 */ mul.s $f6, $f4, $f0 -/* 0E3DA8 7F0AF278 3C0A8008 */ lui $t2, %hi(firststaninroom) -/* 0E3DAC 7F0AF27C 3C018006 */ lui $at, %hi(D_800585D4) -/* 0E3DB0 7F0AF280 254AB128 */ addiu $t2, %lo(firststaninroom) # addiu $t2, $t2, -0x4ed8 -/* 0E3DB4 7F0AF284 26F70F4C */ addiu $s7, %lo(list_of_tilesizes) # addiu $s7, $s7, 0xf4c -/* 0E3DB8 7F0AF288 24130003 */ li $s3, 3 -/* 0E3DBC 7F0AF28C 241600FF */ li $s6, 255 -/* 0E3DC0 7F0AF290 E7A600B8 */ swc1 $f6, 0xb8($sp) -/* 0E3DC4 7F0AF294 C4880004 */ lwc1 $f8, 4($a0) -/* 0E3DC8 7F0AF298 27BE007C */ addiu $fp, $sp, 0x7c -/* 0E3DCC 7F0AF29C 46004282 */ mul.s $f10, $f8, $f0 -/* 0E3DD0 7F0AF2A0 E7AA00BC */ swc1 $f10, 0xbc($sp) -/* 0E3DD4 7F0AF2A4 C4900008 */ lwc1 $f16, 8($a0) -/* 0E3DD8 7F0AF2A8 C7A400BC */ lwc1 $f4, 0xbc($sp) -/* 0E3DDC 7F0AF2AC 24040004 */ li $a0, 4 -/* 0E3DE0 7F0AF2B0 46008482 */ mul.s $f18, $f16, $f0 -/* 0E3DE4 7F0AF2B4 4604103C */ c.lt.s $f2, $f4 -/* 0E3DE8 7F0AF2B8 00000000 */ nop -/* 0E3DEC 7F0AF2BC 45000002 */ bc1f .L7F0AF2C8 -/* 0E3DF0 7F0AF2C0 E7B200C0 */ swc1 $f18, 0xc0($sp) -/* 0E3DF4 7F0AF2C4 E7A200BC */ swc1 $f2, 0xbc($sp) -.L7F0AF2C8: -/* 0E3DF8 7F0AF2C8 C42085D4 */ lwc1 $f0, %lo(D_800585D4)($at) -/* 0E3DFC 7F0AF2CC C7AC00BC */ lwc1 $f12, 0xbc($sp) -/* 0E3E00 7F0AF2D0 C7A200C0 */ lwc1 $f2, 0xc0($sp) -/* 0E3E04 7F0AF2D4 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0E3E08 7F0AF2D8 4600603C */ c.lt.s $f12, $f0 -/* 0E3E0C 7F0AF2DC 0000A825 */ move $s5, $zero -/* 0E3E10 7F0AF2E0 3C068008 */ lui $a2, %hi(dword_CODE_bss_8007B9DC) -/* 0E3E14 7F0AF2E4 4600128D */ trunc.w.s $f10, $f2 -/* 0E3E18 7F0AF2E8 45020003 */ bc1fl .L7F0AF2F8 -/* 0E3E1C 7F0AF2EC C7A000B8 */ lwc1 $f0, 0xb8($sp) -/* 0E3E20 7F0AF2F0 46000306 */ mov.s $f12, $f0 -/* 0E3E24 7F0AF2F4 C7A000B8 */ lwc1 $f0, 0xb8($sp) -.L7F0AF2F8: -/* 0E3E28 7F0AF2F8 4600620D */ trunc.w.s $f8, $f12 -/* 0E3E2C 7F0AF2FC 8CC6B9DC */ lw $a2, %lo(dword_CODE_bss_8007B9DC)($a2) -/* 0E3E30 7F0AF300 44095000 */ mfc1 $t1, $f10 -/* 0E3E34 7F0AF304 4600018D */ trunc.w.s $f6, $f0 -/* 0E3E38 7F0AF308 44194000 */ mfc1 $t9, $f8 -/* 0E3E3C 7F0AF30C E7AC00BC */ swc1 $f12, 0xbc($sp) -/* 0E3E40 7F0AF310 A7A900B0 */ sh $t1, 0xb0($sp) -/* 0E3E44 7F0AF314 440F3000 */ mfc1 $t7, $f6 -/* 0E3E48 7F0AF318 A7B900AE */ sh $t9, 0xae($sp) -/* 0E3E4C 7F0AF31C 18C0008F */ blez $a2, .L7F0AF55C -/* 0E3E50 7F0AF320 A7AF00AC */ sh $t7, 0xac($sp) -/* 0E3E54 7F0AF324 4481B000 */ mtc1 $at, $f22 -/* 0E3E58 7F0AF328 3C01C000 */ li $at, 0xC0000000 # -2.000000 -/* 0E3E5C 7F0AF32C 4481A000 */ mtc1 $at, $f20 -/* 0E3E60 7F0AF330 AFAA0070 */ sw $t2, 0x70($sp) -/* 0E3E64 7F0AF334 8FB20088 */ lw $s2, 0x88($sp) -.L7F0AF338: -/* 0E3E68 7F0AF338 8FAB0070 */ lw $t3, 0x70($sp) -/* 0E3E6C 7F0AF33C 00156080 */ sll $t4, $s5, 2 -/* 0E3E70 7F0AF340 01956023 */ subu $t4, $t4, $s5 -/* 0E3E74 7F0AF344 8D650000 */ lw $a1, ($t3) -/* 0E3E78 7F0AF348 3C0D8008 */ lui $t5, %hi(dword_CODE_bss_8007B358) -/* 0E3E7C 7F0AF34C 25ADB358 */ addiu $t5, %lo(dword_CODE_bss_8007B358) # addiu $t5, $t5, -0x4ca8 -/* 0E3E80 7F0AF350 10A0007B */ beqz $a1, .L7F0AF540 -/* 0E3E84 7F0AF354 000C6080 */ sll $t4, $t4, 2 -/* 0E3E88 7F0AF358 018D1021 */ addu $v0, $t4, $t5 -/* 0E3E8C 7F0AF35C 844F0000 */ lh $t7, ($v0) -/* 0E3E90 7F0AF360 87AE00AC */ lh $t6, 0xac($sp) -/* 0E3E94 7F0AF364 87B900AC */ lh $t9, 0xac($sp) -/* 0E3E98 7F0AF368 01CF082A */ slt $at, $t6, $t7 -/* 0E3E9C 7F0AF36C 54200075 */ bnezl $at, .L7F0AF544 -/* 0E3EA0 7F0AF370 8FAE0070 */ lw $t6, 0x70($sp) -/* 0E3EA4 7F0AF374 84580006 */ lh $t8, 6($v0) -/* 0E3EA8 7F0AF378 87A800B0 */ lh $t0, 0xb0($sp) -/* 0E3EAC 7F0AF37C 0319082A */ slt $at, $t8, $t9 -/* 0E3EB0 7F0AF380 54200070 */ bnezl $at, .L7F0AF544 -/* 0E3EB4 7F0AF384 8FAE0070 */ lw $t6, 0x70($sp) -/* 0E3EB8 7F0AF388 84490004 */ lh $t1, 4($v0) -/* 0E3EBC 7F0AF38C 87AB00B0 */ lh $t3, 0xb0($sp) -/* 0E3EC0 7F0AF390 0109082A */ slt $at, $t0, $t1 -/* 0E3EC4 7F0AF394 5420006B */ bnezl $at, .L7F0AF544 -/* 0E3EC8 7F0AF398 8FAE0070 */ lw $t6, 0x70($sp) -/* 0E3ECC 7F0AF39C 844A000A */ lh $t2, 0xa($v0) -/* 0E3ED0 7F0AF3A0 87AC00AE */ lh $t4, 0xae($sp) -/* 0E3ED4 7F0AF3A4 014B082A */ slt $at, $t2, $t3 -/* 0E3ED8 7F0AF3A8 54200066 */ bnezl $at, .L7F0AF544 -/* 0E3EDC 7F0AF3AC 8FAE0070 */ lw $t6, 0x70($sp) -/* 0E3EE0 7F0AF3B0 844D0002 */ lh $t5, 2($v0) -/* 0E3EE4 7F0AF3B4 8FAE00CC */ lw $t6, 0xcc($sp) -/* 0E3EE8 7F0AF3B8 018D082A */ slt $at, $t4, $t5 -/* 0E3EEC 7F0AF3BC 54200061 */ bnezl $at, .L7F0AF544 -/* 0E3EF0 7F0AF3C0 8FAE0070 */ lw $t6, 0x70($sp) -/* 0E3EF4 7F0AF3C4 51C00015 */ beql $t6, $zero, .L7F0AF41C -/* 0E3EF8 7F0AF3C8 8CB80000 */ lw $t8, ($a1) -/* 0E3EFC 7F0AF3CC 91CF0000 */ lbu $t7, ($t6) -/* 0E3F00 7F0AF3D0 00008025 */ move $s0, $zero -/* 0E3F04 7F0AF3D4 01C01021 */ addu $v0, $t6, $zero -/* 0E3F08 7F0AF3D8 12CF000D */ beq $s6, $t7, .L7F0AF410 -/* 0E3F0C 7F0AF3DC 00000000 */ nop -/* 0E3F10 7F0AF3E0 91C30000 */ lbu $v1, ($t6) -.L7F0AF3E4: -/* 0E3F14 7F0AF3E4 56A30004 */ bnel $s5, $v1, .L7F0AF3F8 -/* 0E3F18 7F0AF3E8 90430001 */ lbu $v1, 1($v0) -/* 0E3F1C 7F0AF3EC 1000000B */ b .L7F0AF41C -/* 0E3F20 7F0AF3F0 8CB80000 */ lw $t8, ($a1) -/* 0E3F24 7F0AF3F4 90430001 */ lbu $v1, 1($v0) -.L7F0AF3F8: -/* 0E3F28 7F0AF3F8 26100001 */ addiu $s0, $s0, 1 -/* 0E3F2C 7F0AF3FC 24420001 */ addiu $v0, $v0, 1 -/* 0E3F30 7F0AF400 12C30003 */ beq $s6, $v1, .L7F0AF410 -/* 0E3F34 7F0AF404 00000000 */ nop -/* 0E3F38 7F0AF408 1604FFF6 */ bne $s0, $a0, .L7F0AF3E4 -/* 0E3F3C 7F0AF40C 00000000 */ nop -.L7F0AF410: -/* 0E3F40 7F0AF410 1000004C */ b .L7F0AF544 -/* 0E3F44 7F0AF414 8FAE0070 */ lw $t6, 0x70($sp) -/* 0E3F48 7F0AF418 8CB80000 */ lw $t8, ($a1) -.L7F0AF41C: -/* 0E3F4C 7F0AF41C 00A08825 */ move $s1, $a1 -/* 0E3F50 7F0AF420 13000044 */ beqz $t8, .L7F0AF534 -/* 0E3F54 7F0AF424 00000000 */ nop -/* 0E3F58 7F0AF428 90B90003 */ lbu $t9, 3($a1) -/* 0E3F5C 7F0AF42C 16B90041 */ bne $s5, $t9, .L7F0AF534 -/* 0E3F60 7F0AF430 00008025 */ move $s0, $zero -.L7F0AF434: -/* 0E3F64 7F0AF434 C7A000B8 */ lwc1 $f0, 0xb8($sp) -.L7F0AF438: -/* 0E3F68 7F0AF438 C7A200C0 */ lwc1 $f2, 0xc0($sp) -/* 0E3F6C 7F0AF43C 02202025 */ move $a0, $s1 -/* 0E3F70 7F0AF440 44060000 */ mfc1 $a2, $f0 -/* 0E3F74 7F0AF444 44071000 */ mfc1 $a3, $f2 -/* 0E3F78 7F0AF448 0FC2BF9C */ jal getShortest2dDispToInfTripleEdge -/* 0E3F7C 7F0AF44C 02002825 */ move $a1, $s0 -/* 0E3F80 7F0AF450 4614003C */ c.lt.s $f0, $f20 -/* 0E3F84 7F0AF454 26100001 */ addiu $s0, $s0, 1 -/* 0E3F88 7F0AF458 4503002B */ bc1tl .L7F0AF508 -/* 0E3F8C 7F0AF45C 86220006 */ lh $v0, 6($s1) -/* 0E3F90 7F0AF460 4616003C */ c.lt.s $f0, $f22 -/* 0E3F94 7F0AF464 00000000 */ nop -/* 0E3F98 7F0AF468 45000002 */ bc1f .L7F0AF474 -/* 0E3F9C 7F0AF46C 00000000 */ nop -/* 0E3FA0 7F0AF470 24120001 */ li $s2, 1 -.L7F0AF474: -/* 0E3FA4 7F0AF474 5613FFF0 */ bnel $s0, $s3, .L7F0AF438 -/* 0E3FA8 7F0AF478 C7A000B8 */ lwc1 $f0, 0xb8($sp) -/* 0E3FAC 7F0AF47C 0FC2BDD8 */ jal sub_GAME_7F0AF760 -/* 0E3FB0 7F0AF480 02202025 */ move $a0, $s1 -/* 0E3FB4 7F0AF484 54400020 */ bnezl $v0, .L7F0AF508 -/* 0E3FB8 7F0AF488 86220006 */ lh $v0, 6($s1) -/* 0E3FBC 7F0AF48C 1240000E */ beqz $s2, .L7F0AF4C8 -/* 0E3FC0 7F0AF490 02202025 */ move $a0, $s1 -/* 0E3FC4 7F0AF494 0FC2BE49 */ jal getTileMidPoint -/* 0E3FC8 7F0AF498 03C02825 */ move $a1, $fp -/* 0E3FCC 7F0AF49C AFB100A0 */ sw $s1, 0xa0($sp) -/* 0E3FD0 7F0AF4A0 C6900008 */ lwc1 $f16, 8($s4) -/* 0E3FD4 7F0AF4A4 8E870000 */ lw $a3, ($s4) -/* 0E3FD8 7F0AF4A8 27A400A0 */ addiu $a0, $sp, 0xa0 -/* 0E3FDC 7F0AF4AC 8FA5007C */ lw $a1, 0x7c($sp) -/* 0E3FE0 7F0AF4B0 8FA60084 */ lw $a2, 0x84($sp) -/* 0E3FE4 7F0AF4B4 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 0E3FE8 7F0AF4B8 E7B00010 */ swc1 $f16, 0x10($sp) -/* 0E3FEC 7F0AF4BC 10400011 */ beqz $v0, .L7F0AF504 -/* 0E3FF0 7F0AF4C0 8FA800A0 */ lw $t0, 0xa0($sp) -/* 0E3FF4 7F0AF4C4 1511000F */ bne $t0, $s1, .L7F0AF504 -.L7F0AF4C8: -/* 0E3FF8 7F0AF4C8 02202025 */ move $a0, $s1 -/* 0E3FFC 7F0AF4CC 8E850000 */ lw $a1, ($s4) -/* 0E4000 7F0AF4D0 0FC2CA5C */ jal stanGetPositionYValue -/* 0E4004 7F0AF4D4 8E860008 */ lw $a2, 8($s4) -/* 0E4008 7F0AF4D8 C6920004 */ lwc1 $f18, 4($s4) -/* 0E400C 7F0AF4DC 4600903C */ c.lt.s $f18, $f0 -/* 0E4010 7F0AF4E0 00000000 */ nop -/* 0E4014 7F0AF4E4 45030008 */ bc1tl .L7F0AF508 -/* 0E4018 7F0AF4E8 86220006 */ lh $v0, 6($s1) -/* 0E401C 7F0AF4EC 4600C03C */ c.lt.s $f24, $f0 -/* 0E4020 7F0AF4F0 00000000 */ nop -/* 0E4024 7F0AF4F4 45020004 */ bc1fl .L7F0AF508 -/* 0E4028 7F0AF4F8 86220006 */ lh $v0, 6($s1) -/* 0E402C 7F0AF4FC AFB1009C */ sw $s1, 0x9c($sp) -/* 0E4030 7F0AF500 46000606 */ mov.s $f24, $f0 -.L7F0AF504: -/* 0E4034 7F0AF504 86220006 */ lh $v0, 6($s1) -.L7F0AF508: -/* 0E4038 7F0AF508 00024B03 */ sra $t1, $v0, 0xc -/* 0E403C 7F0AF50C 312A000F */ andi $t2, $t1, 0xf -/* 0E4040 7F0AF510 02EA5821 */ addu $t3, $s7, $t2 -/* 0E4044 7F0AF514 916C0000 */ lbu $t4, ($t3) -/* 0E4048 7F0AF518 01918821 */ addu $s1, $t4, $s1 -/* 0E404C 7F0AF51C 8E2D0000 */ lw $t5, ($s1) -/* 0E4050 7F0AF520 11A00004 */ beqz $t5, .L7F0AF534 -/* 0E4054 7F0AF524 00000000 */ nop -/* 0E4058 7F0AF528 922F0003 */ lbu $t7, 3($s1) -/* 0E405C 7F0AF52C 52AFFFC1 */ beql $s5, $t7, .L7F0AF434 -/* 0E4060 7F0AF530 00008025 */ move $s0, $zero -.L7F0AF534: -/* 0E4064 7F0AF534 3C068008 */ lui $a2, %hi(dword_CODE_bss_8007B9DC) -/* 0E4068 7F0AF538 8CC6B9DC */ lw $a2, %lo(dword_CODE_bss_8007B9DC)($a2) -/* 0E406C 7F0AF53C 24040004 */ li $a0, 4 -.L7F0AF540: -/* 0E4070 7F0AF540 8FAE0070 */ lw $t6, 0x70($sp) -.L7F0AF544: -/* 0E4074 7F0AF544 26B50001 */ addiu $s5, $s5, 1 -/* 0E4078 7F0AF548 02A6082A */ slt $at, $s5, $a2 -/* 0E407C 7F0AF54C 25D80004 */ addiu $t8, $t6, 4 -/* 0E4080 7F0AF550 1420FF79 */ bnez $at, .L7F0AF338 -/* 0E4084 7F0AF554 AFB80070 */ sw $t8, 0x70($sp) -/* 0E4088 7F0AF558 AFB20088 */ sw $s2, 0x88($sp) -.L7F0AF55C: -/* 0E408C 7F0AF55C 8FB9009C */ lw $t9, 0x9c($sp) -/* 0E4090 7F0AF560 8FA800D0 */ lw $t0, 0xd0($sp) -/* 0E4094 7F0AF564 53200005 */ beql $t9, $zero, .L7F0AF57C -/* 0E4098 7F0AF568 8FBF005C */ lw $ra, 0x5c($sp) -/* 0E409C 7F0AF56C 51000003 */ beql $t0, $zero, .L7F0AF57C -/* 0E40A0 7F0AF570 8FBF005C */ lw $ra, 0x5c($sp) -/* 0E40A4 7F0AF574 E5180000 */ swc1 $f24, ($t0) -/* 0E40A8 7F0AF578 8FBF005C */ lw $ra, 0x5c($sp) -.L7F0AF57C: -/* 0E40AC 7F0AF57C 8FA2009C */ lw $v0, 0x9c($sp) -/* 0E40B0 7F0AF580 D7B40020 */ ldc1 $f20, 0x20($sp) -/* 0E40B4 7F0AF584 D7B60028 */ ldc1 $f22, 0x28($sp) -/* 0E40B8 7F0AF588 D7B80030 */ ldc1 $f24, 0x30($sp) -/* 0E40BC 7F0AF58C 8FB00038 */ lw $s0, 0x38($sp) -/* 0E40C0 7F0AF590 8FB1003C */ lw $s1, 0x3c($sp) -/* 0E40C4 7F0AF594 8FB20040 */ lw $s2, 0x40($sp) -/* 0E40C8 7F0AF598 8FB30044 */ lw $s3, 0x44($sp) -/* 0E40CC 7F0AF59C 8FB40048 */ lw $s4, 0x48($sp) -/* 0E40D0 7F0AF5A0 8FB5004C */ lw $s5, 0x4c($sp) -/* 0E40D4 7F0AF5A4 8FB60050 */ lw $s6, 0x50($sp) -/* 0E40D8 7F0AF5A8 8FB70054 */ lw $s7, 0x54($sp) -/* 0E40DC 7F0AF5AC 8FBE0058 */ lw $fp, 0x58($sp) -/* 0E40E0 7F0AF5B0 03E00008 */ jr $ra -/* 0E40E4 7F0AF5B4 27BD00C8 */ addiu $sp, $sp, 0xc8 -) -#endif +/** + * Address: 7F0AF038 + */ +void stanBuildRoomData(void) +{ + StandTile *tile; + u8 lastRoom; + s32 i; + s32 j; + s32 k; + + lastRoom = 0xff; + dword_CODE_bss_8007B9DC = 0; + + // Must remain on one line for matching. + for (k = 0; k < 139; k++) firststaninroom[k] = NULL; + + tile = stan_prefix->ptr_firstroom; + + while (*(u32 *)tile) + { + if (tile->room != lastRoom) + { + lastRoom = tile->room; + + if (dword_CODE_bss_8007B9DC <= lastRoom) + { + dword_CODE_bss_8007B9DC = lastRoom + 1; + } + + firststaninroom[lastRoom] = tile; + + g_StanRoomBounds[lastRoom].min[0] = g_StanRoomBounds[lastRoom].min[1] = g_StanRoomBounds[lastRoom].min[2] = 0x7fff; + g_StanRoomBounds[lastRoom].max[0] = g_StanRoomBounds[lastRoom].max[1] = g_StanRoomBounds[lastRoom].max[2] = -0x8000; + } + + for (i = 0; i < (tile->tail.hdrTail.pointCount & 0xf); i++) + { + for (j = 0; j < 3; j++) + { + if (tile->points[i].AsArray[j] < g_StanRoomBounds[lastRoom].min[j]) + { + g_StanRoomBounds[lastRoom].min[j] = tile->points[i].AsArray[j]; + } + + if (tile->points[i].AsArray[j] > g_StanRoomBounds[lastRoom].max[j]) + { + g_StanRoomBounds[lastRoom].max[j] = tile->points[i].AsArray[j]; + } + } + } + + tile = (StandTile *)(((u8 *)tile) + list_of_tilesizes[tile->tail.hdrTail.pointCount & 0xf]); + } +} +/** + * Address: 7F0AF20C + * + * Finds the highest stan file beneath pos. If a tile is found, yRtn is set to the tile + * height beneath pos. + * @returns NULL if no suitable tile is found. + */ +StandTile *stanFindTileBelowPos(coord3d *pos, u8 *rooms, f32 *yRtn) +{ + StandTile *firstTile; + f32 scaled[3]; + StandTile *tile; + s16 scaledShort[3]; + coord3d *midPointPtr; + u8 *tileSizes; + StandTile *tileStack; + StandTile *bestTile; + f32 maxY; + f32 bestY; + f32 edgeDist; + f32 tileY; + s32 nearEdge; + coord3d midPoint; + s32 tailhalf; + s32 room; + StandTile **roomFirstTiles; + s32 i; + + maxY = 32767.0f; + bestY = -3.4028235e38f; + bestTile = NULL; + + scaled[0] = pos->x * level_scale; + scaled[1] = pos->y * level_scale; + scaled[2] = pos->z * level_scale; + + if (maxY < scaled[1]) + { + scaled[1] = maxY; + } + + if (scaled[1] < -32767.0f) + { + scaled[1] = -32767.0f; + } + + scaledShort[0] = scaled[0]; + scaledShort[1] = scaled[1]; + scaledShort[2] = scaled[2]; + + tileSizes = list_of_tilesizes; + midPointPtr = &midPoint; + room = 0; \ + if (dword_CODE_bss_8007B9DC > 0) \ + { \ + roomFirstTiles = (StandTile **) &firststaninroom; \ + do + { + firstTile = *roomFirstTiles; + + if (firstTile != NULL) + { + if (scaledShort[0] < (&((StanRoomBounds *) g_StanRoomBounds)[room])->minX) + { + goto next_room; + } + + if ((&((StanRoomBounds *) g_StanRoomBounds)[room])->maxX < scaledShort[0]) + { + goto next_room; + } + + if (scaledShort[2] < (&((StanRoomBounds *) g_StanRoomBounds)[room])->minZ) + { + goto next_room; + } + + if ((&((StanRoomBounds *) g_StanRoomBounds)[room])->maxZ < scaledShort[2]) + { + goto next_room; + } + + if (scaledShort[1] < (&((StanRoomBounds *) g_StanRoomBounds)[room])->minY) + { + goto next_room; + } + + if (rooms != NULL) + { + for (i = 0; (rooms[i] != 0xff) && (i != 4); i++) + { + if (room == rooms[i]) + { + goto found_room; + } + } + goto next_room; +found_room: + ; + } + + tile = firstTile; + firstTile = *roomFirstTiles; + + while (((*((u32 *) tile)) != 0) && (tile->room == room)) + { + for (i = 0; i < 3; i++) + { + edgeDist = getShortest2dDispToInfTripleEdge(tile, i, scaled[0], scaled[2]); + + if (edgeDist < -2.0f) + { + goto nexttile; + } + + if (edgeDist < 2.0f) + { + nearEdge = 1; + } + } + + if (stanTileHasZeroArea(tile)) + { + goto nexttile; + } + + if (nearEdge) + { + getTileMidPoint(tile, midPointPtr); + tileStack = tile; + + if (!walkTilesBetweenPoints_NoCallback(&tileStack, midPointPtr->x, midPointPtr->z, pos->x, pos->z)) + { + goto nexttile; + } + + if (tileStack != tile) + { + goto nexttile; + } + } + + tileY = stanGetPositionYValue(tile, pos->x, pos->z); + + if (pos->y < tileY) + { + goto nexttile; + } + + if (bestY < tileY) + { + bestTile = tile; + bestY = tileY; + } +nexttile: + tailhalf = tile->tail.half; + tile = (StandTile *) (((u8 *) tile) + list_of_tilesizes[(tailhalf >> 12) & 0xf]); \ + } \ +next_room: + ; + } + + room++; + roomFirstTiles++; + } while (room < dword_CODE_bss_8007B9DC); + } + + if ((bestTile != NULL) && (yRtn != NULL)) + { + *yRtn = bestY; + } + + return bestTile; +} +void stanLoadFile(struct StanPrefixRecord *file) +{ + struct StanPrefixRecord *prefix = &stan_prefix; + s32 tokenIndexMask; -#ifdef NONMATCHING -void stanLoadFile(StanPrefixRecord *arg0) { m_stanRegion = 1; - stan_prefix.stanfile = arg0; - standTileStart = (s32) (arg0->ptr_firstroom + -0x10); - if (tokenFind(1, "-stanlinelog") != 0) + tokenIndexMask = !file->ptr_firstroom; + prefix->stanfile = file; + tokenIndexMask = 1; + + /* + * Matching artifacts. + */ + if (prefix); + if (prefix); + if (prefix); + + standTileStart = (StandTile *)(((u8 *)file->ptr_firstroom) - 0x80); + + if (tokenFind(tokenIndexMask, aStanlinelog)) { stanlinelog_flag = 1; } - sub_GAME_7F0AF038(); - setLevelScale(1.0); + + stanBuildRoomData(); + setLevelScale(1.0f); } -#else -GLOBAL_ASM( -.text -glabel stanLoadFile -/* 0E40E8 7F0AF5B8 3C028008 */ lui $v0, %hi(stan_prefix) -/* 0E40EC 7F0AF5BC 240E0001 */ li $t6, 1 -/* 0E40F0 7F0AF5C0 3C018004 */ lui $at, %hi(m_stanRegion) -/* 0E40F4 7F0AF5C4 2442B120 */ addiu $v0, %lo(stan_prefix) # addiu $v0, $v0, -0x4ee0 -/* 0E40F8 7F0AF5C8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0E40FC 7F0AF5CC AC2E0FB0 */ sw $t6, %lo(m_stanRegion)($at) -/* 0E4100 7F0AF5D0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E4104 7F0AF5D4 AC440000 */ sw $a0, ($v0) -/* 0E4108 7F0AF5D8 8C980004 */ lw $t8, 4($a0) -/* 0E410C 7F0AF5DC 3C018004 */ lui $at, %hi(standTileStart) -/* 0E4110 7F0AF5E0 3C058006 */ lui $a1, %hi(aStanlinelog) -/* 0E4114 7F0AF5E4 2719FF80 */ addiu $t9, $t8, -0x80 -/* 0E4118 7F0AF5E8 AC390F58 */ sw $t9, %lo(standTileStart)($at) -/* 0E411C 7F0AF5EC 24A585BC */ addiu $a1, %lo(aStanlinelog) # addiu $a1, $a1, -0x7a44 -/* 0E4120 7F0AF5F0 0C0029A8 */ jal tokenFind -/* 0E4124 7F0AF5F4 24040001 */ li $a0, 1 -/* 0E4128 7F0AF5F8 10400003 */ beqz $v0, .L7F0AF608 -/* 0E412C 7F0AF5FC 24080001 */ li $t0, 1 -/* 0E4130 7F0AF600 3C018004 */ lui $at, %hi(stanlinelog_flag) -/* 0E4134 7F0AF604 AC280FB4 */ sw $t0, %lo(stanlinelog_flag)($at) -.L7F0AF608: -/* 0E4138 7F0AF608 0FC2BC0E */ jal sub_GAME_7F0AF038 -/* 0E413C 7F0AF60C 00000000 */ nop -/* 0E4140 7F0AF610 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0E4144 7F0AF614 44816000 */ mtc1 $at, $f12 -/* 0E4148 7F0AF618 0FC2CA54 */ jal setLevelScale -/* 0E414C 7F0AF61C 00000000 */ nop -/* 0E4150 7F0AF620 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E4154 7F0AF624 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0E4158 7F0AF628 03E00008 */ jr $ra -/* 0E415C 7F0AF62C 00000000 */ nop -) -#endif - - - - //stanRegion() void sub_GAME_7F0AF630(s32 arg0) { #ifdef DEBUG + StandTile **rooms; + + rooms = &stan_prefix->ptr_firstroom; if (arg0 < 0) { - if (*(stan_prefix->ptr_firstroom)[m_stanRegion - 1]) + if (rooms[m_stanRegion - 1] != NULL) { - m_stanRegion --; + m_stanRegion--; } } - else if (arg0 < 1) + else if (arg0 == 0) { - if (arg0 == 0) - { - m_stanRegion = 1; - } + m_stanRegion = 1; } - else if (*(stan_prefix->stanfile)[m_stanRegion + 1]) + else if (rooms[m_stanRegion] != NULL) { - m_stanRegion ++; + m_stanRegion++; } - osSyncPrintf("stanRegion(): region=%d",m_stanRegion); + + osSyncPrintf("stanRegion(): region=%d", m_stanRegion); #endif return; } - - - - -#ifdef NONMATCHING -//stanFillin() -s32 sub_GAME_7F0AF638(s32 arg0, s32 arg1, void *arg2) { - s32 temp_s4; - void *temp_s3; - s32 temp_s1; - void *temp_s2; - s32 temp_a1; - s32 temp_v0; - s32 temp_s0; - void *temp_v1; - void *phi_s2; - s32 phi_a1; - void *phi_a0; - void *phi_s2_2; - s32 phi_s0; - s32 phi_a1_2; - s32 phi_s1; - s32 phi_s7; - void *phi_s2_3; - s32 phi_a1_3; - s32 phi_s1_2; - s32 phi_s1_3; - s32 phi_s7_2; - s32 phi_s7_3; - s32 phi_s1_4; - - // Node 0 - temp_s4 = (arg1 & 0xff); - *arg2 = arg0; - phi_s2 = (arg2 + 4); - phi_a1 = arg1; - phi_s1_3 = 1; - phi_s7_3 = 0; -loop_1: - // Node 1 - temp_s3 = phi_s2->unk-4; - temp_s1 = (phi_s1_3 + -1); - temp_s2 = (phi_s2 + -4); - phi_s1 = temp_s1; - phi_s7 = phi_s7_3; - phi_s2 = temp_s2; - phi_a1 = phi_a1; - if (temp_s4 != (((s32) *temp_s3 >> 0xf) & 1)) - { - // Node 2 - *temp_s3 = (s16) (*temp_s3 ^ 0x8000); - phi_s7_2 = phi_s7_3; - if (sub_GAME_7F0AF760(temp_s3, phi_a1) == 0) - { - // Node 3 - phi_s7_2 = (phi_s7_3 + 1); - } - // Node 4 - temp_a1 = (((s32) temp_s3->unk6 >> 0xc) & 0xf); - phi_a0 = temp_s3; - phi_s2_2 = temp_s2; - phi_s0 = 0; - phi_s1 = temp_s1; - phi_s7 = phi_s7_2; - phi_s2 = temp_s2; - phi_a1 = temp_a1; - phi_a1_3 = temp_a1; - phi_s1_4 = temp_s1; - if (temp_a1 > 0) - { -loop_5: - // Node 5 - temp_v0 = phi_a0->unkE; - temp_s0 = (phi_s0 + 1); - phi_a1_2 = phi_a1_3; - phi_s2_3 = phi_s2_2; - phi_s1_2 = phi_s1_4; - if ((temp_v0 >> 4) != 0) - { - // Node 6 - temp_v1 = ((temp_v0 * 8) + standTileStart); - phi_a1_2 = phi_a1_3; - phi_s2_3 = phi_s2_2; - phi_s1_2 = phi_s1_4; - if (temp_s4 != (((s32) *temp_v1 >> 0xf) & 1)) - { - // Node 7 - *phi_s2_2 = temp_v1; - phi_a1_2 = (((s32) temp_s3->unk6 >> 0xc) & 0xf); - phi_s2_3 = (phi_s2_2 + 4); - phi_s1_2 = (phi_s1_4 + 1); - } - } - // Node 8 - phi_a0 = (phi_a0 + 8); - phi_s2_2 = phi_s2_3; - phi_s0 = temp_s0; - phi_s1 = phi_s1_2; - phi_s7 = phi_s7_2; - phi_s2 = phi_s2_3; - phi_a1 = phi_a1_2; - phi_a1_3 = phi_a1_2; - phi_s1_4 = phi_s1_2; - if (temp_s0 < phi_a1_2) - { - goto loop_5; - } - } - } - // Node 9 - phi_s1_3 = phi_s1; - phi_s7_3 = phi_s7; - if (phi_s1 != 0) - { - goto loop_1; - } - // Node 10 - return phi_s7; - - /*somewhere in this function a loop is checked for overflow - if (i < param4) - { - printf("stanFillin: Stack overflow %d>%d",local_20,uStack); - } - */ -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AF638 -/* 0E4168 7F0AF638 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0E416C 7F0AF63C AFB70030 */ sw $s7, 0x30($sp) -/* 0E4170 7F0AF640 AFB6002C */ sw $s6, 0x2c($sp) -/* 0E4174 7F0AF644 AFB40024 */ sw $s4, 0x24($sp) -/* 0E4178 7F0AF648 AFB2001C */ sw $s2, 0x1c($sp) -/* 0E417C 7F0AF64C AFB10018 */ sw $s1, 0x18($sp) -/* 0E4180 7F0AF650 AFBF0034 */ sw $ra, 0x34($sp) -/* 0E4184 7F0AF654 AFB50028 */ sw $s5, 0x28($sp) -/* 0E4188 7F0AF658 AFB30020 */ sw $s3, 0x20($sp) -/* 0E418C 7F0AF65C AFB00014 */ sw $s0, 0x14($sp) -/* 0E4190 7F0AF660 AFA5003C */ sw $a1, 0x3c($sp) -/* 0E4194 7F0AF664 3C168004 */ lui $s6, %hi(standTileStart) -/* 0E4198 7F0AF668 30B400FF */ andi $s4, $a1, 0xff -/* 0E419C 7F0AF66C 0000B825 */ move $s7, $zero -/* 0E41A0 7F0AF670 ACC40000 */ sw $a0, ($a2) -/* 0E41A4 7F0AF674 24110001 */ li $s1, 1 -/* 0E41A8 7F0AF678 26D60F58 */ addiu $s6, %lo(standTileStart) # addiu $s6, $s6, 0xf58 -/* 0E41AC 7F0AF67C 24D20004 */ addiu $s2, $a2, 4 -/* 0E41B0 7F0AF680 8E53FFFC */ lw $s3, -4($s2) -.L7F0AF684: -/* 0E41B4 7F0AF684 2631FFFF */ addiu $s1, $s1, -1 -/* 0E41B8 7F0AF688 2652FFFC */ addiu $s2, $s2, -4 -/* 0E41BC 7F0AF68C 96620000 */ lhu $v0, ($s3) -/* 0E41C0 7F0AF690 00008025 */ move $s0, $zero -/* 0E41C4 7F0AF694 02602025 */ move $a0, $s3 -/* 0E41C8 7F0AF698 00027BC3 */ sra $t7, $v0, 0xf -/* 0E41CC 7F0AF69C 31F80001 */ andi $t8, $t7, 1 -/* 0E41D0 7F0AF6A0 12980021 */ beq $s4, $t8, .L7F0AF728 -/* 0E41D4 7F0AF6A4 38598000 */ xori $t9, $v0, 0x8000 -/* 0E41D8 7F0AF6A8 0FC2BDD8 */ jal sub_GAME_7F0AF760 -/* 0E41DC 7F0AF6AC A6790000 */ sh $t9, ($s3) -/* 0E41E0 7F0AF6B0 14400002 */ bnez $v0, .L7F0AF6BC -/* 0E41E4 7F0AF6B4 02602025 */ move $a0, $s3 -/* 0E41E8 7F0AF6B8 26F70001 */ addiu $s7, $s7, 1 -.L7F0AF6BC: -/* 0E41EC 7F0AF6BC 86650006 */ lh $a1, 6($s3) -/* 0E41F0 7F0AF6C0 00054303 */ sra $t0, $a1, 0xc -/* 0E41F4 7F0AF6C4 3105000F */ andi $a1, $t0, 0xf -/* 0E41F8 7F0AF6C8 18A00017 */ blez $a1, .L7F0AF728 -/* 0E41FC 7F0AF6CC 00000000 */ nop -.L7F0AF6D0: -/* 0E4200 7F0AF6D0 9482000E */ lhu $v0, 0xe($a0) -/* 0E4204 7F0AF6D4 26100001 */ addiu $s0, $s0, 1 -/* 0E4208 7F0AF6D8 00025103 */ sra $t2, $v0, 4 -/* 0E420C 7F0AF6DC 51400010 */ beql $t2, $zero, .L7F0AF720 -/* 0E4210 7F0AF6E0 0205082A */ slt $at, $s0, $a1 -/* 0E4214 7F0AF6E4 8ECC0000 */ lw $t4, ($s6) -/* 0E4218 7F0AF6E8 000258C0 */ sll $t3, $v0, 3 -/* 0E421C 7F0AF6EC 016C1821 */ addu $v1, $t3, $t4 -/* 0E4220 7F0AF6F0 946D0000 */ lhu $t5, ($v1) -/* 0E4224 7F0AF6F4 000D73C3 */ sra $t6, $t5, 0xf -/* 0E4228 7F0AF6F8 31CF0001 */ andi $t7, $t6, 1 -/* 0E422C 7F0AF6FC 528F0008 */ beql $s4, $t7, .L7F0AF720 -/* 0E4230 7F0AF700 0205082A */ slt $at, $s0, $a1 -/* 0E4234 7F0AF704 AE430000 */ sw $v1, ($s2) -/* 0E4238 7F0AF708 86650006 */ lh $a1, 6($s3) -/* 0E423C 7F0AF70C 26310001 */ addiu $s1, $s1, 1 -/* 0E4240 7F0AF710 26520004 */ addiu $s2, $s2, 4 -/* 0E4244 7F0AF714 0005C303 */ sra $t8, $a1, 0xc -/* 0E4248 7F0AF718 3305000F */ andi $a1, $t8, 0xf -/* 0E424C 7F0AF71C 0205082A */ slt $at, $s0, $a1 -.L7F0AF720: -/* 0E4250 7F0AF720 1420FFEB */ bnez $at, .L7F0AF6D0 -/* 0E4254 7F0AF724 24840008 */ addiu $a0, $a0, 8 -.L7F0AF728: -/* 0E4258 7F0AF728 5620FFD6 */ bnezl $s1, .L7F0AF684 -/* 0E425C 7F0AF72C 8E53FFFC */ lw $s3, -4($s2) -/* 0E4260 7F0AF730 8FBF0034 */ lw $ra, 0x34($sp) -/* 0E4264 7F0AF734 02E01025 */ move $v0, $s7 -/* 0E4268 7F0AF738 8FB70030 */ lw $s7, 0x30($sp) -/* 0E426C 7F0AF73C 8FB00014 */ lw $s0, 0x14($sp) -/* 0E4270 7F0AF740 8FB10018 */ lw $s1, 0x18($sp) -/* 0E4274 7F0AF744 8FB2001C */ lw $s2, 0x1c($sp) -/* 0E4278 7F0AF748 8FB30020 */ lw $s3, 0x20($sp) -/* 0E427C 7F0AF74C 8FB40024 */ lw $s4, 0x24($sp) -/* 0E4280 7F0AF750 8FB50028 */ lw $s5, 0x28($sp) -/* 0E4284 7F0AF754 8FB6002C */ lw $s6, 0x2c($sp) -/* 0E4288 7F0AF758 03E00008 */ jr $ra -/* 0E428C 7F0AF75C 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif - - - - - -#ifdef NONMATCHING - -// A decent start, mostly my code isn't saving the AB.x and AB.z to the stack - -struct int3 { - s32 x; - s32 y; - s32 z; -}; - -s32 sub_GAME_7F0AF760(StandTile *tile) { - // Perhaps it's a coincidence but there is a gap between their uses of x and z - // Suggests there could be an unused y, which makes sense when their points are 3D - - u32 iA; - u32 iB; - u32 iC; - - s32 crossProduct; - - struct int3 AB; - struct int3 AC; - - - iA = (tile->hdrTail >> 0x8 & 0xf); // t1 - iB = (tile->hdrTail >> 0x4 & 0xf); // t0 - // Actually saving iC somewhere has prevented it being computed early - iC = (tile->hdrTail & 0xf); // t2 - - AB.x = (tile->points[iB].x - tile->points[iA].x); - AB.y = 0; - AB.z = (tile->points[iB].z - tile->points[iA].z); - - - AC.x = (tile->points[iC].x - tile->points[iA].x); - AC.y = 0; - AC.z = (tile->points[iC].z - tile->points[iA].z); - - crossProduct = ((AB.z * AC.x) - (AB.x * AC.z)); // potential overflow. - - return (crossProduct == 0); -} - - -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AF760 -/* 0E4290 7F0AF760 84850006 */ lh $a1, 6($a0) -/* 0E4294 7F0AF764 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0E4298 7F0AF768 00051A03 */ sra $v1, $a1, 8 -/* 0E429C 7F0AF76C 00053103 */ sra $a2, $a1, 4 -/* 0E42A0 7F0AF770 306E000F */ andi $t6, $v1, 0xf -/* 0E42A4 7F0AF774 30CF000F */ andi $t7, $a2, 0xf -/* 0E42A8 7F0AF778 000FC0C0 */ sll $t8, $t7, 3 -/* 0E42AC 7F0AF77C 000EC8C0 */ sll $t9, $t6, 3 -/* 0E42B0 7F0AF780 00994821 */ addu $t1, $a0, $t9 -/* 0E42B4 7F0AF784 00984021 */ addu $t0, $a0, $t8 -/* 0E42B8 7F0AF788 850B0008 */ lh $t3, 8($t0) -/* 0E42BC 7F0AF78C 852C0008 */ lh $t4, 8($t1) -/* 0E42C0 7F0AF790 30A7000F */ andi $a3, $a1, 0xf -/* 0E42C4 7F0AF794 0007C8C0 */ sll $t9, $a3, 3 -/* 0E42C8 7F0AF798 016C6823 */ subu $t5, $t3, $t4 -/* 0E42CC 7F0AF79C AFAD0014 */ sw $t5, 0x14($sp) -/* 0E42D0 7F0AF7A0 852F000C */ lh $t7, 0xc($t1) -/* 0E42D4 7F0AF7A4 850E000C */ lh $t6, 0xc($t0) -/* 0E42D8 7F0AF7A8 00995021 */ addu $t2, $a0, $t9 -/* 0E42DC 7F0AF7AC 01CFC023 */ subu $t8, $t6, $t7 -/* 0E42E0 7F0AF7B0 AFB8001C */ sw $t8, 0x1c($sp) -/* 0E42E4 7F0AF7B4 852C0008 */ lh $t4, 8($t1) -/* 0E42E8 7F0AF7B8 854B0008 */ lh $t3, 8($t2) -/* 0E42EC 7F0AF7BC 8FB9001C */ lw $t9, 0x1c($sp) -/* 0E42F0 7F0AF7C0 016C6823 */ subu $t5, $t3, $t4 -/* 0E42F4 7F0AF7C4 032D0019 */ multu $t9, $t5 -/* 0E42F8 7F0AF7C8 AFAD0008 */ sw $t5, 8($sp) -/* 0E42FC 7F0AF7CC 852F000C */ lh $t7, 0xc($t1) -/* 0E4300 7F0AF7D0 854E000C */ lh $t6, 0xc($t2) -/* 0E4304 7F0AF7D4 01CFC023 */ subu $t8, $t6, $t7 -/* 0E4308 7F0AF7D8 8FAE0014 */ lw $t6, 0x14($sp) -/* 0E430C 7F0AF7DC AFB80010 */ sw $t8, 0x10($sp) -/* 0E4310 7F0AF7E0 00006012 */ mflo $t4 -/* 0E4314 7F0AF7E4 00000000 */ nop -/* 0E4318 7F0AF7E8 00000000 */ nop -/* 0E431C 7F0AF7EC 030E0019 */ multu $t8, $t6 -/* 0E4320 7F0AF7F0 00007812 */ mflo $t7 -/* 0E4324 7F0AF7F4 018FC023 */ subu $t8, $t4, $t7 -/* 0E4328 7F0AF7F8 AFB80000 */ sw $t8, ($sp) -/* 0E432C 7F0AF7FC 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0E4330 7F0AF800 03E00008 */ jr $ra -/* 0E4334 7F0AF804 2F020001 */ sltiu $v0, $t8, 1 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0AF808(void) { - -// Still quite a long way off. -StandTile *sub_GAME_7F0AF808(f32 f1,f32 f2,f32 f3,f32 f4) +/** + * Address: 7F0AF638 + * + * Unreferenced + * + * Somewhere in this function a loop is checked for overflow + * if (i < param4) + * { + * printf("stanFillin: Stack overflow %d>%d",local_20,uStack); + * } + */ +s32 stanFillin(StandTile *starttile, u8 targetbit, StandTile **stack) // Canonical function name { - // 'findSomeTile' atm - // It seems a silly thing to be doing during runtime. - StandTile *tile; + StandTile *linkedtile; + StandTilePoint *point; + u16 *tmp; + s32 pointcount; + s32 link; + s32 result; + s32 count; + s32 i; + s32 stackcount; + + count = 0; + stack[0] = starttile; + stackcount = 1; + + for (stack += stackcount; stackcount != 0;) + { + tile = stack[-1]; + stackcount--; + stack--; + i = 0; + + if (targetbit != (((*((u16 *) tile)) >> 15) & 1)) + { + tmp = (u16 *) tile; + *tmp ^= 0x8000; + result = stanTileHasZeroArea(tile); + point = (StandTilePoint *) tile; + + if (stackcount); + + if (result == 0) + { + count++; + } + + pointcount = ((&tile->tail)->half >> 12) & 0xf; + + if (pointcount > 0) + { + do + { + link = point[1].link; + i++; + + if (stackcount); + + if ((link >> 4) != 0) + { + linkedtile = (StandTile *) (((u8 *) standTileStart) + (((0, link)) << 3)); + + if (targetbit != (((*((u16 *) linkedtile)) >> 15) & 1)) + { + *stack = linkedtile; + pointcount = (tile->tail.half >> 12) & 0xf; + stackcount++; + stack++; + } + } + + point++; + + if (starttile); + } + while (i < pointcount); + } + } + } + + return count; +} + + +/** + * Address: 7F0AF760 + * + * Returns true if x/z coords from the three point indices out of tile->tail.half are colinear i.e. the triangle has zero horizontal area. + */ +bool stanTileHasZeroArea(StandTile *tile) +{ + s32 AB[3]; + s32 AC[3]; + u32 crossStore[2]; + s32 temp1, temp2, temp3; + + + temp1 = (tile->tail.half >> 8) & 0xf; + temp2 = (tile->tail.half >> 4) & 0xf; + temp3 = (tile->tail.half) & 0xf; + + AB[0] = tile->points[temp2].x - tile->points[temp1].x; + AB[2] = tile->points[temp2].z - tile->points[temp1].z; + + AC[0] = tile->points[temp3].x - tile->points[temp1].x; + AC[2] = tile->points[temp3].z - tile->points[temp1].z; + + crossStore[0] = (AB[2] * AC[0]) - (AB[0] * AC[2]); + + return crossStore[0] == 0; +} + + +/** + * Address: 7F0AF808 + * + * Unreferenced. + */ +StandTile *stanFindFloorTileBelowY(f32 x, f32 maxY, f32 z, f32 radius) +{ StandTile *tileStack[2]; + StandTile *tile; + s32 temp; - tile = stan_prefix.ptr_firstroom; + tile = stan_prefix->ptr_firstroom; - // this test may be reading a field but it could well look like this, - // since 0 signals that there is no more data, so 'tile' isn't really a StandTile -* - while (*(u32*)tile != 0) + while (*(u32 *)tile != 0) { tileStack[0] = tile; - if ( - (!sub_GAME_7F0AF760(tile)) && - (isPointInsideTriStandTileUnscaled_Maybe(tile,f1,f3) != 0) && - (FUN_7f0b20d0(tileStack,f1,f3,f4) != 0) && - (tile == tileStack[0]) && - (getCrossProductY_and_distToPlaneMaybe(tile,f1,f3) < f2) - ) + if (stanTileHasZeroArea(tile) == 0) { - return tile; + if (isPointInsideTriStandTileUnscaled_Maybe(tile, x, z)) + { + if (sub_GAME_7F0B20D0(tileStack, x, z, radius)) + { + if (tileStack[0] == tile) + { + if (stanGetPositionYValue(tile, x, z) < maxY) + { + return tile; + } + } + } + } } - tile = (struct StandTile*) ( - ((s32)tile) + list_of_tilesizes[STAN_POINT_COUNT(tile)] - ); - + temp = tile->tail.hdrTail.pointCount; + tile = (StandTile *)((u8 *)tile + list_of_tilesizes[temp & 0xf]); } - return (struct StandTile*)0x0; + return NULL; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AF808 -/* 0E4338 7F0AF808 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0E433C 7F0AF80C 3C0E8008 */ lui $t6, %hi(stan_prefix) -/* 0E4340 7F0AF810 8DCEB120 */ lw $t6, %lo(stan_prefix)($t6) -/* 0E4344 7F0AF814 AFBF0044 */ sw $ra, 0x44($sp) -/* 0E4348 7F0AF818 AFB20040 */ sw $s2, 0x40($sp) -/* 0E434C 7F0AF81C AFB1003C */ sw $s1, 0x3c($sp) -/* 0E4350 7F0AF820 AFB00038 */ sw $s0, 0x38($sp) -/* 0E4354 7F0AF824 F7BA0030 */ sdc1 $f26, 0x30($sp) -/* 0E4358 7F0AF828 F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0E435C 7F0AF82C F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0E4360 7F0AF830 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0E4364 7F0AF834 8DD00004 */ lw $s0, 4($t6) -/* 0E4368 7F0AF838 4486B000 */ mtc1 $a2, $f22 -/* 0E436C 7F0AF83C 4487C000 */ mtc1 $a3, $f24 -/* 0E4370 7F0AF840 8E0F0000 */ lw $t7, ($s0) -/* 0E4374 7F0AF844 46006506 */ mov.s $f20, $f12 -/* 0E4378 7F0AF848 46007686 */ mov.s $f26, $f14 -/* 0E437C 7F0AF84C 11E0002A */ beqz $t7, .L7F0AF8F8 -/* 0E4380 7F0AF850 3C128004 */ lui $s2, %hi(list_of_tilesizes) -/* 0E4384 7F0AF854 26520F4C */ addiu $s2, %lo(list_of_tilesizes) # addiu $s2, $s2, 0xf4c -/* 0E4388 7F0AF858 27B10050 */ addiu $s1, $sp, 0x50 -/* 0E438C 7F0AF85C AFB00050 */ sw $s0, 0x50($sp) -.L7F0AF860: -/* 0E4390 7F0AF860 0FC2BDD8 */ jal sub_GAME_7F0AF760 -/* 0E4394 7F0AF864 02002025 */ move $a0, $s0 -/* 0E4398 7F0AF868 5440001B */ bnezl $v0, .L7F0AF8D8 -/* 0E439C 7F0AF86C 86020006 */ lh $v0, 6($s0) -/* 0E43A0 7F0AF870 4405A000 */ mfc1 $a1, $f20 -/* 0E43A4 7F0AF874 4406B000 */ mfc1 $a2, $f22 -/* 0E43A8 7F0AF878 0FC2C0DB */ jal isPointInsideTriStandTileUnscaled_Maybe -/* 0E43AC 7F0AF87C 02002025 */ move $a0, $s0 -/* 0E43B0 7F0AF880 50400015 */ beql $v0, $zero, .L7F0AF8D8 -/* 0E43B4 7F0AF884 86020006 */ lh $v0, 6($s0) -/* 0E43B8 7F0AF888 4405A000 */ mfc1 $a1, $f20 -/* 0E43BC 7F0AF88C 4406B000 */ mfc1 $a2, $f22 -/* 0E43C0 7F0AF890 4407C000 */ mfc1 $a3, $f24 -/* 0E43C4 7F0AF894 0FC2C834 */ jal sub_GAME_7F0B20D0 -/* 0E43C8 7F0AF898 02202025 */ move $a0, $s1 -/* 0E43CC 7F0AF89C 1040000D */ beqz $v0, .L7F0AF8D4 -/* 0E43D0 7F0AF8A0 8FB80050 */ lw $t8, 0x50($sp) -/* 0E43D4 7F0AF8A4 5618000C */ bnel $s0, $t8, .L7F0AF8D8 -/* 0E43D8 7F0AF8A8 86020006 */ lh $v0, 6($s0) -/* 0E43DC 7F0AF8AC 4405A000 */ mfc1 $a1, $f20 -/* 0E43E0 7F0AF8B0 4406B000 */ mfc1 $a2, $f22 -/* 0E43E4 7F0AF8B4 0FC2CA5C */ jal stanGetPositionYValue -/* 0E43E8 7F0AF8B8 02002025 */ move $a0, $s0 -/* 0E43EC 7F0AF8BC 461A003C */ c.lt.s $f0, $f26 -/* 0E43F0 7F0AF8C0 00000000 */ nop -/* 0E43F4 7F0AF8C4 45020004 */ bc1fl .L7F0AF8D8 -/* 0E43F8 7F0AF8C8 86020006 */ lh $v0, 6($s0) -/* 0E43FC 7F0AF8CC 1000000B */ b .L7F0AF8FC -/* 0E4400 7F0AF8D0 02001025 */ move $v0, $s0 -.L7F0AF8D4: -/* 0E4404 7F0AF8D4 86020006 */ lh $v0, 6($s0) -.L7F0AF8D8: -/* 0E4408 7F0AF8D8 0002CB03 */ sra $t9, $v0, 0xc -/* 0E440C 7F0AF8DC 3328000F */ andi $t0, $t9, 0xf -/* 0E4410 7F0AF8E0 02484821 */ addu $t1, $s2, $t0 -/* 0E4414 7F0AF8E4 912A0000 */ lbu $t2, ($t1) -/* 0E4418 7F0AF8E8 01508021 */ addu $s0, $t2, $s0 -/* 0E441C 7F0AF8EC 8E0B0000 */ lw $t3, ($s0) -/* 0E4420 7F0AF8F0 5560FFDB */ bnezl $t3, .L7F0AF860 -/* 0E4424 7F0AF8F4 AFB00050 */ sw $s0, 0x50($sp) -.L7F0AF8F8: -/* 0E4428 7F0AF8F8 00001025 */ move $v0, $zero -.L7F0AF8FC: -/* 0E442C 7F0AF8FC 8FBF0044 */ lw $ra, 0x44($sp) -/* 0E4430 7F0AF900 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0E4434 7F0AF904 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0E4438 7F0AF908 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0E443C 7F0AF90C D7BA0030 */ ldc1 $f26, 0x30($sp) -/* 0E4440 7F0AF910 8FB00038 */ lw $s0, 0x38($sp) -/* 0E4444 7F0AF914 8FB1003C */ lw $s1, 0x3c($sp) -/* 0E4448 7F0AF918 8FB20040 */ lw $s2, 0x40($sp) -/* 0E444C 7F0AF91C 03E00008 */ jr $ra -/* 0E4450 7F0AF920 27BD0058 */ addiu $sp, $sp, 0x58 -) -#endif - - - - - -#ifdef NONMATCHING -// 2 instructions swapped, regalloc. -// I've tried all orderings of the A,B,C assignments, both as indices and as pointers to StandTilePoints -// Summing the x,y,z components first just makes more regalloc issues -// Placing the macros directly in the indexing doesn't help either. -// Making midPnt a f32* did nothing. - -// I'm out of ideas. -void getTileMidPoint(StandTile *tile, coord3d *midPnt) +void getTileMidPoint(StandTile *tile, coord3d *out) { - short headerTail; - // may be RGB - s32 indexA; - s32 indexB; - s32 indexC; + u16 tail; + u8 indexA; + u32 indexB; + u32 indexC; + StandTilePoint *pointA; + StandTilePoint *pointB; + unsigned int new_var2; + StandTilePoint *pointC; + s16 *new_var3; - indexA = STAN_TRIPLE_TO_PNT_INDEX(tile, 0); - indexB = STAN_TRIPLE_TO_PNT_INDEX(tile, 1); - indexC = STAN_TRIPLE_TO_PNT_INDEX(tile, 2); - - midPnt->x = ((f32)tile->points[indexA].x + tile->points[indexB].x + tile->points[indexC].x) / 3 * inv_level_scale; - midPnt->y = ((f32)tile->points[indexA].y + tile->points[indexB].y + tile->points[indexC].y) / 3 * inv_level_scale; - midPnt->z = ((f32)tile->points[indexA].z + tile->points[indexB].z + tile->points[indexC].z) / 3 * inv_level_scale; - - return; + tail = (indexC = tile->tail.half); + new_var2 = (tail & 0xFFFF) >> 4; + indexA = (tail >> 8) & 0xf; + indexB = new_var2 & 0xf; + indexC = indexC & 0xf; + new_var3 = &(&tile->points[indexC])->x; + pointA = &tile->points[indexA]; + pointB = &tile->points[indexB]; + out->x = (((((f32) pointA->x) + ((f32) pointB->x)) + ((f32) (*new_var3))) / 3.0f) * inv_level_scale; + out->y = (((((f32) (&tile->points[indexA])->y) + ((f32) pointB->y)) + ((f32) (&tile->points[indexC])->y)) / 3.0f) * inv_level_scale; + out->z = (((((f32) (&tile->points[indexA])->z) + ((f32) pointB->z)) + ((f32) ((float) (&tile->points[indexC])->z))) / 3.0f) * inv_level_scale; } -#else -GLOBAL_ASM( -.text -glabel getTileMidPoint -/* 0E4454 7F0AF924 84870006 */ lh $a3, 6($a0) -/* 0E4458 7F0AF928 3C014040 */ li $at, 0x40400000 # 3.000000 -/* 0E445C 7F0AF92C 44810000 */ mtc1 $at, $f0 -/* 0E4460 7F0AF930 00077203 */ sra $t6, $a3, 8 -/* 0E4464 7F0AF934 31CF000F */ andi $t7, $t6, 0xf -/* 0E4468 7F0AF938 0007C103 */ sra $t8, $a3, 4 -/* 0E446C 7F0AF93C 3319000F */ andi $t9, $t8, 0xf -/* 0E4470 7F0AF940 000F70C0 */ sll $t6, $t7, 3 -/* 0E4474 7F0AF944 001978C0 */ sll $t7, $t9, 3 -/* 0E4478 7F0AF948 008F5021 */ addu $t2, $a0, $t7 -/* 0E447C 7F0AF94C 008E4821 */ addu $t1, $a0, $t6 -/* 0E4480 7F0AF950 85380008 */ lh $t8, 8($t1) -/* 0E4484 7F0AF954 85590008 */ lh $t9, 8($t2) -/* 0E4488 7F0AF958 30EC000F */ andi $t4, $a3, 0xf -/* 0E448C 7F0AF95C 000C68C0 */ sll $t5, $t4, 3 -/* 0E4490 7F0AF960 44982000 */ mtc1 $t8, $f4 -/* 0E4494 7F0AF964 44994000 */ mtc1 $t9, $f8 -/* 0E4498 7F0AF968 008D4021 */ addu $t0, $a0, $t5 -/* 0E449C 7F0AF96C 850C0008 */ lh $t4, 8($t0) -/* 0E44A0 7F0AF970 468021A0 */ cvt.s.w $f6, $f4 -/* 0E44A4 7F0AF974 3C0B8004 */ lui $t3, %hi(inv_level_scale) -/* 0E44A8 7F0AF978 448C9000 */ mtc1 $t4, $f18 -/* 0E44AC 7F0AF97C 256B0F48 */ addiu $t3, %lo(inv_level_scale) # addiu $t3, $t3, 0xf48 -/* 0E44B0 7F0AF980 468042A0 */ cvt.s.w $f10, $f8 -/* 0E44B4 7F0AF984 46809120 */ cvt.s.w $f4, $f18 -/* 0E44B8 7F0AF988 460A3400 */ add.s $f16, $f6, $f10 -/* 0E44BC 7F0AF98C C56A0000 */ lwc1 $f10, ($t3) -/* 0E44C0 7F0AF990 46102200 */ add.s $f8, $f4, $f16 -/* 0E44C4 7F0AF994 46004183 */ div.s $f6, $f8, $f0 -/* 0E44C8 7F0AF998 460A3482 */ mul.s $f18, $f6, $f10 -/* 0E44CC 7F0AF99C E4B20000 */ swc1 $f18, ($a1) -/* 0E44D0 7F0AF9A0 854E000A */ lh $t6, 0xa($t2) -/* 0E44D4 7F0AF9A4 852D000A */ lh $t5, 0xa($t1) -/* 0E44D8 7F0AF9A8 850F000A */ lh $t7, 0xa($t0) -/* 0E44DC 7F0AF9AC 448E4000 */ mtc1 $t6, $f8 -/* 0E44E0 7F0AF9B0 448D2000 */ mtc1 $t5, $f4 -/* 0E44E4 7F0AF9B4 448F9000 */ mtc1 $t7, $f18 -/* 0E44E8 7F0AF9B8 468041A0 */ cvt.s.w $f6, $f8 -/* 0E44EC 7F0AF9BC 46802420 */ cvt.s.w $f16, $f4 -/* 0E44F0 7F0AF9C0 46809120 */ cvt.s.w $f4, $f18 -/* 0E44F4 7F0AF9C4 46068280 */ add.s $f10, $f16, $f6 -/* 0E44F8 7F0AF9C8 C5660000 */ lwc1 $f6, ($t3) -/* 0E44FC 7F0AF9CC 460A2200 */ add.s $f8, $f4, $f10 -/* 0E4500 7F0AF9D0 46004403 */ div.s $f16, $f8, $f0 -/* 0E4504 7F0AF9D4 46068482 */ mul.s $f18, $f16, $f6 -/* 0E4508 7F0AF9D8 E4B20004 */ swc1 $f18, 4($a1) -/* 0E450C 7F0AF9DC 8559000C */ lh $t9, 0xc($t2) -/* 0E4510 7F0AF9E0 8538000C */ lh $t8, 0xc($t1) -/* 0E4514 7F0AF9E4 850C000C */ lh $t4, 0xc($t0) -/* 0E4518 7F0AF9E8 44994000 */ mtc1 $t9, $f8 -/* 0E451C 7F0AF9EC 44982000 */ mtc1 $t8, $f4 -/* 0E4520 7F0AF9F0 448C9000 */ mtc1 $t4, $f18 -/* 0E4524 7F0AF9F4 46804420 */ cvt.s.w $f16, $f8 -/* 0E4528 7F0AF9F8 468022A0 */ cvt.s.w $f10, $f4 -/* 0E452C 7F0AF9FC 46809120 */ cvt.s.w $f4, $f18 -/* 0E4530 7F0AFA00 46105180 */ add.s $f6, $f10, $f16 -/* 0E4534 7F0AFA04 C5700000 */ lwc1 $f16, ($t3) -/* 0E4538 7F0AFA08 46062200 */ add.s $f8, $f4, $f6 -/* 0E453C 7F0AFA0C 46004283 */ div.s $f10, $f8, $f0 -/* 0E4540 7F0AFA10 46105482 */ mul.s $f18, $f10, $f16 -/* 0E4544 7F0AFA14 03E00008 */ jr $ra -/* 0E4548 7F0AFA18 E4B20008 */ swc1 $f18, 8($a1) -) -#endif - - - - -#ifdef NONMATCHING -// Saves a1 (tripleIndex) to the stack completely unnecessarily -// Otherwise just regalloc, but maybe that alone fixes it. -void getPointJustInsideOfTileTriple(StandTile *tile, s32 tripleIndex /*canonically c */, coord3d* pnt) +void getPointJustInsideOfTileTriple(StandTile *tile, s32 tripleIndex /*canonically c */, coord3d *out) { coord3d midPoint; s32 pntIndex; @@ -1577,99 +721,22 @@ void getPointJustInsideOfTileTriple(StandTile *tile, s32 tripleIndex /*canonical assert(c<3); #endif - pntIndex = STAN_TRIPLE_TO_PNT_INDEX(tile, tripleIndex); - - pnt->x = tile->points[pntIndex].x * inv_level_scale; - pnt->y = tile->points[pntIndex].y * inv_level_scale; - pnt->z = tile->points[pntIndex].z * inv_level_scale; - - getTileMidPoint(tile,&midPoint); - + pntIndex = (tile->tail.half >> (8 - (tripleIndex * 4))) & 0xf; + + if (1); + if (&midPoint); + + out->x = ((f32) tile->points[pntIndex].x) * inv_level_scale; + out->y = ((f32) tile->points[pntIndex].y) * inv_level_scale; + out->z = ((f32) tile->points[pntIndex].z) * inv_level_scale; + + getTileMidPoint(tile, &midPoint); + // 10% of the way from the actual tile point towards the tile's centre. - pnt->x = midPoint.x * 0.1f + pnt->x * 0.9f; - pnt->y = midPoint.y * 0.1f + pnt->y * 0.9f; - pnt->z = midPoint.z * 0.1f + pnt->z * 0.9f; - - return; + out->x = (midPoint.x * 0.1f) + (0.9f * out->x); + out->y = (midPoint.y * 0.1f) + (0.9f * out->y); + out->z = (midPoint.z * 0.1f) + (0.9f * out->z); } -#else -GLOBAL_ASM( -.late_rodata -glabel D_800585D8 -.word 0x3dcccccd /*0.1*/ -glabel D_800585DC -.word 0x3f666666 /*0.89999998*/ -.text -glabel getPointJustInsideOfTileTriple -/* 0E454C 7F0AFA1C 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0E4550 7F0AFA20 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E4554 7F0AFA24 848E0006 */ lh $t6, 6($a0) -/* 0E4558 7F0AFA28 00057880 */ sll $t7, $a1, 2 -/* 0E455C 7F0AFA2C 24180008 */ li $t8, 8 -/* 0E4560 7F0AFA30 030FC823 */ subu $t9, $t8, $t7 -/* 0E4564 7F0AFA34 032E3807 */ srav $a3, $t6, $t9 -/* 0E4568 7F0AFA38 30E8000F */ andi $t0, $a3, 0xf -/* 0E456C 7F0AFA3C 000848C0 */ sll $t1, $t0, 3 -/* 0E4570 7F0AFA40 00891021 */ addu $v0, $a0, $t1 -/* 0E4574 7F0AFA44 844A0008 */ lh $t2, 8($v0) -/* 0E4578 7F0AFA48 3C038004 */ lui $v1, %hi(inv_level_scale) -/* 0E457C 7F0AFA4C 24630F48 */ addiu $v1, %lo(inv_level_scale) # addiu $v1, $v1, 0xf48 -/* 0E4580 7F0AFA50 448A2000 */ mtc1 $t2, $f4 -/* 0E4584 7F0AFA54 C4680000 */ lwc1 $f8, ($v1) -/* 0E4588 7F0AFA58 27A5001C */ addiu $a1, $sp, 0x1c -/* 0E458C 7F0AFA5C 468021A0 */ cvt.s.w $f6, $f4 -/* 0E4590 7F0AFA60 46083282 */ mul.s $f10, $f6, $f8 -/* 0E4594 7F0AFA64 E4CA0000 */ swc1 $f10, ($a2) -/* 0E4598 7F0AFA68 844B000A */ lh $t3, 0xa($v0) -/* 0E459C 7F0AFA6C C4640000 */ lwc1 $f4, ($v1) -/* 0E45A0 7F0AFA70 448B8000 */ mtc1 $t3, $f16 -/* 0E45A4 7F0AFA74 00000000 */ nop -/* 0E45A8 7F0AFA78 468084A0 */ cvt.s.w $f18, $f16 -/* 0E45AC 7F0AFA7C 46049182 */ mul.s $f6, $f18, $f4 -/* 0E45B0 7F0AFA80 E4C60004 */ swc1 $f6, 4($a2) -/* 0E45B4 7F0AFA84 844C000C */ lh $t4, 0xc($v0) -/* 0E45B8 7F0AFA88 C4700000 */ lwc1 $f16, ($v1) -/* 0E45BC 7F0AFA8C 448C4000 */ mtc1 $t4, $f8 -/* 0E45C0 7F0AFA90 00000000 */ nop -/* 0E45C4 7F0AFA94 468042A0 */ cvt.s.w $f10, $f8 -/* 0E45C8 7F0AFA98 46105482 */ mul.s $f18, $f10, $f16 -/* 0E45CC 7F0AFA9C E4D20008 */ swc1 $f18, 8($a2) -/* 0E45D0 7F0AFAA0 0FC2BE49 */ jal getTileMidPoint -/* 0E45D4 7F0AFAA4 AFA60030 */ sw $a2, 0x30($sp) -/* 0E45D8 7F0AFAA8 3C018006 */ lui $at, %hi(D_800585D8) -/* 0E45DC 7F0AFAAC C42085D8 */ lwc1 $f0, %lo(D_800585D8)($at) -/* 0E45E0 7F0AFAB0 8FA60030 */ lw $a2, 0x30($sp) -/* 0E45E4 7F0AFAB4 C7A4001C */ lwc1 $f4, 0x1c($sp) -/* 0E45E8 7F0AFAB8 3C018006 */ lui $at, %hi(D_800585DC) -/* 0E45EC 7F0AFABC C42285DC */ lwc1 $f2, %lo(D_800585DC)($at) -/* 0E45F0 7F0AFAC0 46002182 */ mul.s $f6, $f4, $f0 -/* 0E45F4 7F0AFAC4 C4C80000 */ lwc1 $f8, ($a2) -/* 0E45F8 7F0AFAC8 46081282 */ mul.s $f10, $f2, $f8 -/* 0E45FC 7F0AFACC C4C80004 */ lwc1 $f8, 4($a2) -/* 0E4600 7F0AFAD0 460A3400 */ add.s $f16, $f6, $f10 -/* 0E4604 7F0AFAD4 E4D00000 */ swc1 $f16, ($a2) -/* 0E4608 7F0AFAD8 C7B20020 */ lwc1 $f18, 0x20($sp) -/* 0E460C 7F0AFADC 46009102 */ mul.s $f4, $f18, $f0 -/* 0E4610 7F0AFAE0 00000000 */ nop -/* 0E4614 7F0AFAE4 46081182 */ mul.s $f6, $f2, $f8 -/* 0E4618 7F0AFAE8 C4C80008 */ lwc1 $f8, 8($a2) -/* 0E461C 7F0AFAEC 46062280 */ add.s $f10, $f4, $f6 -/* 0E4620 7F0AFAF0 E4CA0004 */ swc1 $f10, 4($a2) -/* 0E4624 7F0AFAF4 C7B00024 */ lwc1 $f16, 0x24($sp) -/* 0E4628 7F0AFAF8 46008482 */ mul.s $f18, $f16, $f0 -/* 0E462C 7F0AFAFC 00000000 */ nop -/* 0E4630 7F0AFB00 46081102 */ mul.s $f4, $f2, $f8 -/* 0E4634 7F0AFB04 46049180 */ add.s $f6, $f18, $f4 -/* 0E4638 7F0AFB08 E4C60008 */ swc1 $f6, 8($a2) -/* 0E463C 7F0AFB0C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E4640 7F0AFB10 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0E4644 7F0AFB14 03E00008 */ jr $ra -/* 0E4648 7F0AFB18 00000000 */ nop -) -#endif - - - /* @@ -1689,136 +756,80 @@ f32 sub_GAME_7F0AFB1C(coord3d *p,coord3d *q) } +StandTile *sub_GAME_7F0AFB78(f32 *x, f32 *y, f32 *z, f32 arg3) +{ + StandTile *tile; + s32 tileTail; + StandTile *stack[1]; + StandTile *bestTile; + s32 i; + s32 midpointIndex; + coord3d original; + coord3d candidate; + f32 bestDist; + f32 dist; + bestTile = NULL; + original.x = *x; + original.y = *y; + original.z = *z; + midpointIndex = 3; + bestDist = M_U32_MAX_VALUE_F; + if (&original); + tile = stan_prefix->ptr_firstroom; -#ifdef NONMATCHING -void sub_GAME_7F0AFB78(void) { + if (*((u32 *) tile)) + { + do + { + if (((((u16 *) tile)[0] >> 15) & 1) != 1) + { + if (stanTileHasZeroArea(tile) == FALSE) + { + for (i = 0; i != 4; i++) + { + if (i == midpointIndex) + { + getTileMidPoint(tile, &candidate); + } + else + { + getPointJustInsideOfTileTriple(tile, i, &candidate); + } + stack[0] = tile; + + if (sub_GAME_7F0B20D0(stack, candidate.x, candidate.z, arg3) < 0) + { + if (x); + if (y); + if (z); + + dist = sub_GAME_7F0AFB1C(&candidate, &original); + + if (dist < bestDist) + { + bestTile = tile; + bestDist = dist; + *x = candidate.x; + *y = candidate.y; + *z = candidate.z; + } + } + } + } + } + + tileTail = tile->tail.half; + tile = (StandTile *) (((u8 *) tile) + list_of_tilesizes[(tileTail >> 12) & 0xf]); + + } while (*((u32 *) tile)); + } + + return bestTile; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AFB78 -/* 0E46A8 7F0AFB78 27BDFF78 */ addiu $sp, $sp, -0x88 -/* 0E46AC 7F0AFB7C AFBF004C */ sw $ra, 0x4c($sp) -/* 0E46B0 7F0AFB80 AFBE0048 */ sw $fp, 0x48($sp) -/* 0E46B4 7F0AFB84 AFB70044 */ sw $s7, 0x44($sp) -/* 0E46B8 7F0AFB88 AFB60040 */ sw $s6, 0x40($sp) -/* 0E46BC 7F0AFB8C AFB5003C */ sw $s5, 0x3c($sp) -/* 0E46C0 7F0AFB90 AFB40038 */ sw $s4, 0x38($sp) -/* 0E46C4 7F0AFB94 AFB30034 */ sw $s3, 0x34($sp) -/* 0E46C8 7F0AFB98 AFB20030 */ sw $s2, 0x30($sp) -/* 0E46CC 7F0AFB9C AFB1002C */ sw $s1, 0x2c($sp) -/* 0E46D0 7F0AFBA0 AFB00028 */ sw $s0, 0x28($sp) -/* 0E46D4 7F0AFBA4 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0E46D8 7F0AFBA8 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0E46DC 7F0AFBAC AFA00078 */ sw $zero, 0x78($sp) -/* 0E46E0 7F0AFBB0 C4840000 */ lwc1 $f4, ($a0) -/* 0E46E4 7F0AFBB4 3C0E8008 */ lui $t6, %hi(stan_prefix) -/* 0E46E8 7F0AFBB8 8DCEB120 */ lw $t6, %lo(stan_prefix)($t6) -/* 0E46EC 7F0AFBBC E7A40064 */ swc1 $f4, 0x64($sp) -/* 0E46F0 7F0AFBC0 C4A60000 */ lwc1 $f6, ($a1) -/* 0E46F4 7F0AFBC4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0E46F8 7F0AFBC8 4487B000 */ mtc1 $a3, $f22 -/* 0E46FC 7F0AFBCC E7A60068 */ swc1 $f6, 0x68($sp) -/* 0E4700 7F0AFBD0 C4C80000 */ lwc1 $f8, ($a2) -/* 0E4704 7F0AFBD4 4481A000 */ mtc1 $at, $f20 -/* 0E4708 7F0AFBD8 00809825 */ move $s3, $a0 -/* 0E470C 7F0AFBDC E7A8006C */ swc1 $f8, 0x6c($sp) -/* 0E4710 7F0AFBE0 8DD10004 */ lw $s1, 4($t6) -/* 0E4714 7F0AFBE4 00A0A025 */ move $s4, $a1 -/* 0E4718 7F0AFBE8 00C0A825 */ move $s5, $a2 -/* 0E471C 7F0AFBEC 8E2F0000 */ lw $t7, ($s1) -/* 0E4720 7F0AFBF0 24160003 */ li $s6, 3 -/* 0E4724 7F0AFBF4 27B7007C */ addiu $s7, $sp, 0x7c -/* 0E4728 7F0AFBF8 11E00039 */ beqz $t7, .L7F0AFCE0 -/* 0E472C 7F0AFBFC 241E0004 */ li $fp, 4 -/* 0E4730 7F0AFC00 27B20058 */ addiu $s2, $sp, 0x58 -/* 0E4734 7F0AFC04 96380000 */ lhu $t8, ($s1) -.L7F0AFC08: -/* 0E4738 7F0AFC08 24010001 */ li $at, 1 -/* 0E473C 7F0AFC0C 0018CBC3 */ sra $t9, $t8, 0xf -/* 0E4740 7F0AFC10 33280001 */ andi $t0, $t9, 1 -/* 0E4744 7F0AFC14 51010029 */ beql $t0, $at, .L7F0AFCBC -/* 0E4748 7F0AFC18 86220006 */ lh $v0, 6($s1) -/* 0E474C 7F0AFC1C 0FC2BDD8 */ jal sub_GAME_7F0AF760 -/* 0E4750 7F0AFC20 02202025 */ move $a0, $s1 -/* 0E4754 7F0AFC24 14400024 */ bnez $v0, .L7F0AFCB8 -/* 0E4758 7F0AFC28 00008025 */ move $s0, $zero -.L7F0AFC2C: -/* 0E475C 7F0AFC2C 16160006 */ bne $s0, $s6, .L7F0AFC48 -/* 0E4760 7F0AFC30 02202025 */ move $a0, $s1 -/* 0E4764 7F0AFC34 02202025 */ move $a0, $s1 -/* 0E4768 7F0AFC38 0FC2BE49 */ jal getTileMidPoint -/* 0E476C 7F0AFC3C 02402825 */ move $a1, $s2 -/* 0E4770 7F0AFC40 10000005 */ b .L7F0AFC58 -/* 0E4774 7F0AFC44 4407B000 */ mfc1 $a3, $f22 -.L7F0AFC48: -/* 0E4778 7F0AFC48 02002825 */ move $a1, $s0 -/* 0E477C 7F0AFC4C 0FC2BE87 */ jal getPointJustInsideOfTileTriple -/* 0E4780 7F0AFC50 02403025 */ move $a2, $s2 -/* 0E4784 7F0AFC54 4407B000 */ mfc1 $a3, $f22 -.L7F0AFC58: -/* 0E4788 7F0AFC58 AFB1007C */ sw $s1, 0x7c($sp) -/* 0E478C 7F0AFC5C 02E02025 */ move $a0, $s7 -/* 0E4790 7F0AFC60 8FA50058 */ lw $a1, 0x58($sp) -/* 0E4794 7F0AFC64 0FC2C834 */ jal sub_GAME_7F0B20D0 -/* 0E4798 7F0AFC68 8FA60060 */ lw $a2, 0x60($sp) -/* 0E479C 7F0AFC6C 0441000F */ bgez $v0, .L7F0AFCAC -/* 0E47A0 7F0AFC70 02402025 */ move $a0, $s2 -/* 0E47A4 7F0AFC74 0FC2BEC7 */ jal sub_GAME_7F0AFB1C -/* 0E47A8 7F0AFC78 27A50064 */ addiu $a1, $sp, 0x64 -/* 0E47AC 7F0AFC7C 4614003C */ c.lt.s $f0, $f20 -/* 0E47B0 7F0AFC80 00000000 */ nop -/* 0E47B4 7F0AFC84 4502000A */ bc1fl .L7F0AFCB0 -/* 0E47B8 7F0AFC88 26100001 */ addiu $s0, $s0, 1 -/* 0E47BC 7F0AFC8C C7AA0058 */ lwc1 $f10, 0x58($sp) -/* 0E47C0 7F0AFC90 AFB10078 */ sw $s1, 0x78($sp) -/* 0E47C4 7F0AFC94 46000506 */ mov.s $f20, $f0 -/* 0E47C8 7F0AFC98 E66A0000 */ swc1 $f10, ($s3) -/* 0E47CC 7F0AFC9C C7B0005C */ lwc1 $f16, 0x5c($sp) -/* 0E47D0 7F0AFCA0 E6900000 */ swc1 $f16, ($s4) -/* 0E47D4 7F0AFCA4 C7B20060 */ lwc1 $f18, 0x60($sp) -/* 0E47D8 7F0AFCA8 E6B20000 */ swc1 $f18, ($s5) -.L7F0AFCAC: -/* 0E47DC 7F0AFCAC 26100001 */ addiu $s0, $s0, 1 -.L7F0AFCB0: -/* 0E47E0 7F0AFCB0 161EFFDE */ bne $s0, $fp, .L7F0AFC2C -/* 0E47E4 7F0AFCB4 00000000 */ nop -.L7F0AFCB8: -/* 0E47E8 7F0AFCB8 86220006 */ lh $v0, 6($s1) -.L7F0AFCBC: -/* 0E47EC 7F0AFCBC 3C0B8004 */ lui $t3, %hi(list_of_tilesizes) -/* 0E47F0 7F0AFCC0 00024B03 */ sra $t1, $v0, 0xc -/* 0E47F4 7F0AFCC4 312A000F */ andi $t2, $t1, 0xf -/* 0E47F8 7F0AFCC8 016A5821 */ addu $t3, $t3, $t2 -/* 0E47FC 7F0AFCCC 916B0F4C */ lbu $t3, %lo(list_of_tilesizes)($t3) -/* 0E4800 7F0AFCD0 01718821 */ addu $s1, $t3, $s1 -/* 0E4804 7F0AFCD4 8E2C0000 */ lw $t4, ($s1) -/* 0E4808 7F0AFCD8 5580FFCB */ bnezl $t4, .L7F0AFC08 -/* 0E480C 7F0AFCDC 96380000 */ lhu $t8, ($s1) -.L7F0AFCE0: -/* 0E4810 7F0AFCE0 8FBF004C */ lw $ra, 0x4c($sp) -/* 0E4814 7F0AFCE4 8FA20078 */ lw $v0, 0x78($sp) -/* 0E4818 7F0AFCE8 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0E481C 7F0AFCEC D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0E4820 7F0AFCF0 8FB00028 */ lw $s0, 0x28($sp) -/* 0E4824 7F0AFCF4 8FB1002C */ lw $s1, 0x2c($sp) -/* 0E4828 7F0AFCF8 8FB20030 */ lw $s2, 0x30($sp) -/* 0E482C 7F0AFCFC 8FB30034 */ lw $s3, 0x34($sp) -/* 0E4830 7F0AFD00 8FB40038 */ lw $s4, 0x38($sp) -/* 0E4834 7F0AFD04 8FB5003C */ lw $s5, 0x3c($sp) -/* 0E4838 7F0AFD08 8FB60040 */ lw $s6, 0x40($sp) -/* 0E483C 7F0AFD0C 8FB70044 */ lw $s7, 0x44($sp) -/* 0E4840 7F0AFD10 8FBE0048 */ lw $fp, 0x48($sp) -/* 0E4844 7F0AFD14 03E00008 */ jr $ra -/* 0E4848 7F0AFD18 27BD0088 */ addiu $sp, $sp, 0x88 -) -#endif - - // Returns the shortest distance from (p_x,p_z) to the infinite extention of tile's index-th edge, projected into XZ. @@ -1882,181 +893,52 @@ f32 getShortest2dDispToInfTileEdge(StandTile *tile,s32 index,f32 p_x,f32 p_z) } -// Sig needed for caller matches. -f32 getShortest2dDispToInfTripleEdge(StandTile *tile,s32 start3index,f32 p_x,f32 p_z); - -#ifdef NONMATCHING -// Only regalloc incorrect essentially. Any change I make seems to make things much worse though, -// and my ability to reorder statements is very limited. - -// Similar to getShortest2dDispToInfTileEdge -// 2nd arg must be in {0,1,2} -// New name needed though: getShortest2dDispToInfTripleEdge -//same as above, tile is sf, index is ei -f32 getShortest2dDispToInfTripleEdge(StandTile *tile,s32 start3index,f32 p_x,f32 p_z) +f32 getShortest2dDispToInfTripleEdge(StandTile *tile, s32 start3index, f32 p_x, f32 p_z) { - s32 end3index; // types seem correct, changing introduces more instructions - - f32 edge_x; // 0x40 (8) - f32 edge_z; // 0x3C - f32 edge_len; - + f32 dx; + f32 edgeX; + f32 edgeZ; + f32 edgeLen; + f32 dz; + f32 crossProduct; + s32 end3index; s32 currPntI; s32 nextPntI; - - f32 v_x; - f32 v_z; - f32 crossProduct; + s32 tail; #ifdef DEBUG assert(eitail.half >> (8 - (start3index << nextPntI))) & 0xf; + end3index = (tile->tail.half >> (8 - (end3index << nextPntI))) & 0xf; - edge_x = (f32)(tile->points[nextPntI].x - tile->points[currPntI].x); - edge_z = (f32)(tile->points[nextPntI].z - tile->points[currPntI].z); + edgeX = tile->points[end3index].x - tile->points[start3index].x; + edgeZ = tile->points[end3index].z - tile->points[start3index].z; + edgeLen = sqrtf((edgeX * edgeX) + (edgeZ * edgeZ)); - - // Identical to getShortest2dDispToInfTileEdge from here - - edge_len = sqrtf(edge_x * edge_x + edge_z * edge_z); - - if (edge_len == 0) { - // Degenerate case, edge is vertical - // They just return the distance between the points, which is sensible and the correct value in 3 dimensions. - v_x = p_x - (f32)tile->points[nextPntI].x; - v_z = p_z - (f32)tile->points[nextPntI].z; - return sqrtf(v_x * v_x + v_z * v_z); + if (edgeLen == 0.0f) { + dx = p_x - tile->points[end3index].x; + dz = p_z - tile->points[end3index].z; + return sqrtf((dx * dx) + (dz * dz)); } - else - { - #ifdef DEBUG - assert(d>0.0f); - #endif - // - (AP x AB) / ||AB|| = ||PA|| sin(a) - crossProduct = ( - edge_z * (p_x - (f32)tile->points[currPntI].x) - + - -edge_x * (p_z - (f32)tile->points[currPntI].z) - ); - return crossProduct / edge_len; - } + #ifdef DEBUG + assert(d>0.0f); + #endif + + crossProduct = (edgeZ * (p_x - tile->points[start3index].x)) + (-edgeX * (p_z - tile->points[start3index].z)); + return crossProduct / edgeLen; } -#else -GLOBAL_ASM( -.text -glabel getShortest2dDispToInfTripleEdge -/* 0E49A0 7F0AFE70 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0E49A4 7F0AFE74 AFA70054 */ sw $a3, 0x54($sp) -/* 0E49A8 7F0AFE78 24010002 */ li $at, 2 -/* 0E49AC 7F0AFE7C 00803825 */ move $a3, $a0 -/* 0E49B0 7F0AFE80 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E49B4 7F0AFE84 AFA40048 */ sw $a0, 0x48($sp) -/* 0E49B8 7F0AFE88 10A10003 */ beq $a1, $at, .L7F0AFE98 -/* 0E49BC 7F0AFE8C AFA60050 */ sw $a2, 0x50($sp) -/* 0E49C0 7F0AFE90 10000002 */ b .L7F0AFE9C -/* 0E49C4 7F0AFE94 24A30001 */ addiu $v1, $a1, 1 -.L7F0AFE98: -/* 0E49C8 7F0AFE98 00001825 */ move $v1, $zero -.L7F0AFE9C: -/* 0E49CC 7F0AFE9C 84E20006 */ lh $v0, 6($a3) -/* 0E49D0 7F0AFEA0 24080008 */ li $t0, 8 -/* 0E49D4 7F0AFEA4 00057080 */ sll $t6, $a1, 2 -/* 0E49D8 7F0AFEA8 0003C880 */ sll $t9, $v1, 2 -/* 0E49DC 7F0AFEAC 010E7823 */ subu $t7, $t0, $t6 -/* 0E49E0 7F0AFEB0 01194823 */ subu $t1, $t0, $t9 -/* 0E49E4 7F0AFEB4 01E22807 */ srav $a1, $v0, $t7 -/* 0E49E8 7F0AFEB8 01221807 */ srav $v1, $v0, $t1 -/* 0E49EC 7F0AFEBC 30B8000F */ andi $t8, $a1, 0xf -/* 0E49F0 7F0AFEC0 306A000F */ andi $t2, $v1, 0xf -/* 0E49F4 7F0AFEC4 000A58C0 */ sll $t3, $t2, 3 -/* 0E49F8 7F0AFEC8 001860C0 */ sll $t4, $t8, 3 -/* 0E49FC 7F0AFECC 00EC3021 */ addu $a2, $a3, $t4 -/* 0E4A00 7F0AFED0 00EB2021 */ addu $a0, $a3, $t3 -/* 0E4A04 7F0AFED4 848D0008 */ lh $t5, 8($a0) -/* 0E4A08 7F0AFED8 84CE0008 */ lh $t6, 8($a2) -/* 0E4A0C 7F0AFEDC 8498000C */ lh $t8, 0xc($a0) -/* 0E4A10 7F0AFEE0 84D9000C */ lh $t9, 0xc($a2) -/* 0E4A14 7F0AFEE4 01AE7823 */ subu $t7, $t5, $t6 -/* 0E4A18 7F0AFEE8 448F2000 */ mtc1 $t7, $f4 -/* 0E4A1C 7F0AFEEC 03194823 */ subu $t1, $t8, $t9 -/* 0E4A20 7F0AFEF0 44893000 */ mtc1 $t1, $f6 -/* 0E4A24 7F0AFEF4 468020A0 */ cvt.s.w $f2, $f4 -/* 0E4A28 7F0AFEF8 AFA60018 */ sw $a2, 0x18($sp) -/* 0E4A2C 7F0AFEFC AFA4001C */ sw $a0, 0x1c($sp) -/* 0E4A30 7F0AFF00 468033A0 */ cvt.s.w $f14, $f6 -/* 0E4A34 7F0AFF04 46021202 */ mul.s $f8, $f2, $f2 -/* 0E4A38 7F0AFF08 E7A20040 */ swc1 $f2, 0x40($sp) -/* 0E4A3C 7F0AFF0C 460E7282 */ mul.s $f10, $f14, $f14 -/* 0E4A40 7F0AFF10 E7AE003C */ swc1 $f14, 0x3c($sp) -/* 0E4A44 7F0AFF14 0C007DF8 */ jal sqrtf -/* 0E4A48 7F0AFF18 460A4300 */ add.s $f12, $f8, $f10 -/* 0E4A4C 7F0AFF1C 44802000 */ mtc1 $zero, $f4 -/* 0E4A50 7F0AFF20 8FA4001C */ lw $a0, 0x1c($sp) -/* 0E4A54 7F0AFF24 8FA60018 */ lw $a2, 0x18($sp) -/* 0E4A58 7F0AFF28 46040032 */ c.eq.s $f0, $f4 -/* 0E4A5C 7F0AFF2C C7A20040 */ lwc1 $f2, 0x40($sp) -/* 0E4A60 7F0AFF30 C7AE003C */ lwc1 $f14, 0x3c($sp) -/* 0E4A64 7F0AFF34 C7B20050 */ lwc1 $f18, 0x50($sp) -/* 0E4A68 7F0AFF38 45000011 */ bc1f .L7F0AFF80 -/* 0E4A6C 7F0AFF3C 46000406 */ mov.s $f16, $f0 -/* 0E4A70 7F0AFF40 848A0008 */ lh $t2, 8($a0) -/* 0E4A74 7F0AFF44 848B000C */ lh $t3, 0xc($a0) -/* 0E4A78 7F0AFF48 C7AA0054 */ lwc1 $f10, 0x54($sp) -/* 0E4A7C 7F0AFF4C 448A3000 */ mtc1 $t2, $f6 -/* 0E4A80 7F0AFF50 448B2000 */ mtc1 $t3, $f4 -/* 0E4A84 7F0AFF54 46803220 */ cvt.s.w $f8, $f6 -/* 0E4A88 7F0AFF58 468021A0 */ cvt.s.w $f6, $f4 -/* 0E4A8C 7F0AFF5C 46089001 */ sub.s $f0, $f18, $f8 -/* 0E4A90 7F0AFF60 46065081 */ sub.s $f2, $f10, $f6 -/* 0E4A94 7F0AFF64 46000202 */ mul.s $f8, $f0, $f0 -/* 0E4A98 7F0AFF68 00000000 */ nop -/* 0E4A9C 7F0AFF6C 46021102 */ mul.s $f4, $f2, $f2 -/* 0E4AA0 7F0AFF70 0C007DF8 */ jal sqrtf -/* 0E4AA4 7F0AFF74 46044300 */ add.s $f12, $f8, $f4 -/* 0E4AA8 7F0AFF78 10000011 */ b .L7F0AFFC0 -/* 0E4AAC 7F0AFF7C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0AFF80: -/* 0E4AB0 7F0AFF80 84CC000C */ lh $t4, 0xc($a2) -/* 0E4AB4 7F0AFF84 C7AA0054 */ lwc1 $f10, 0x54($sp) -/* 0E4AB8 7F0AFF88 84CD0008 */ lh $t5, 8($a2) -/* 0E4ABC 7F0AFF8C 448C3000 */ mtc1 $t4, $f6 -/* 0E4AC0 7F0AFF90 00000000 */ nop -/* 0E4AC4 7F0AFF94 46803220 */ cvt.s.w $f8, $f6 -/* 0E4AC8 7F0AFF98 46001187 */ neg.s $f6, $f2 -/* 0E4ACC 7F0AFF9C 46085101 */ sub.s $f4, $f10, $f8 -/* 0E4AD0 7F0AFFA0 448D4000 */ mtc1 $t5, $f8 -/* 0E4AD4 7F0AFFA4 46062282 */ mul.s $f10, $f4, $f6 -/* 0E4AD8 7F0AFFA8 46804120 */ cvt.s.w $f4, $f8 -/* 0E4ADC 7F0AFFAC 46049181 */ sub.s $f6, $f18, $f4 -/* 0E4AE0 7F0AFFB0 46067202 */ mul.s $f8, $f14, $f6 -/* 0E4AE4 7F0AFFB4 46085300 */ add.s $f12, $f10, $f8 -/* 0E4AE8 7F0AFFB8 46106003 */ div.s $f0, $f12, $f16 -/* 0E4AEC 7F0AFFBC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0AFFC0: -/* 0E4AF0 7F0AFFC0 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0E4AF4 7F0AFFC4 03E00008 */ jr $ra -/* 0E4AF8 7F0AFFC8 00000000 */ nop -) -#endif - - - - f32 getShortest2dDispToInfTileEdgeUnscaled(StandTile *tile, int index,f32 x,f32 z) { @@ -2067,10 +949,6 @@ f32 getShortest2dDispToInfTileEdgeUnscaled(StandTile *tile, int index,f32 x,f32 } - - - - f32 getShortest2dDispToInfTripleEdgeUnscaled(StandTile *tile,s32 start3index,f32 p_x,f32 p_z) { f32 disp; @@ -2080,8 +958,6 @@ f32 getShortest2dDispToInfTripleEdgeUnscaled(StandTile *tile,s32 start3index,f32 } - - f32 distToTilePnt2D(StandTile *tile,int pntI,f32 p_x,f32 p_z) { f32 len; @@ -2092,290 +968,92 @@ f32 distToTilePnt2D(StandTile *tile,int pntI,f32 p_x,f32 p_z) } - - -#ifdef NONMATCHING -f32 sub_GAME_7F0B00C4(StandTile *tile,s32 index,f32 p_x,f32 p_z) +/** + * Unreferenced. + */ +f32 sub_GAME_7F0B00C4(StandTile *tile, s32 pntI, f32 p_x, f32 p_z) { - f32 v_x; - f32 v_z; - f32 dist; + p_x *= level_scale; + p_z *= level_scale; - v_x = p_x * level_scale - (f32)tile->points[index].x; - v_z = p_z * level_scale - (f32)tile->points[index].z; - dist = sqrtf(v_x * v_x + v_z * v_z); + p_x -= tile->points[pntI].x; + p_z -= tile->points[pntI].z; - return dist * inv_level_scale; + return sqrtf((p_x * p_x) + (p_z * p_z)) * inv_level_scale; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B00C4 -/* 0E4BF4 7F0B00C4 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0E4BF8 7F0B00C8 000570C0 */ sll $t6, $a1, 3 -/* 0E4BFC 7F0B00CC AFBF001C */ sw $ra, 0x1c($sp) -/* 0E4C00 7F0B00D0 F7B40010 */ sdc1 $f20, 0x10($sp) -/* 0E4C04 7F0B00D4 008E1021 */ addu $v0, $a0, $t6 -/* 0E4C08 7F0B00D8 844F0008 */ lh $t7, 8($v0) -/* 0E4C0C 7F0B00DC 3C018004 */ lui $at, %hi(level_scale) -/* 0E4C10 7F0B00E0 44867000 */ mtc1 $a2, $f14 -/* 0E4C14 7F0B00E4 C4200F44 */ lwc1 $f0, %lo(level_scale)($at) -/* 0E4C18 7F0B00E8 8458000C */ lh $t8, 0xc($v0) -/* 0E4C1C 7F0B00EC 448F2000 */ mtc1 $t7, $f4 -/* 0E4C20 7F0B00F0 46007382 */ mul.s $f14, $f14, $f0 -/* 0E4C24 7F0B00F4 4487A000 */ mtc1 $a3, $f20 -/* 0E4C28 7F0B00F8 44984000 */ mtc1 $t8, $f8 -/* 0E4C2C 7F0B00FC 4600A502 */ mul.s $f20, $f20, $f0 -/* 0E4C30 7F0B0100 468021A0 */ cvt.s.w $f6, $f4 -/* 0E4C34 7F0B0104 468042A0 */ cvt.s.w $f10, $f8 -/* 0E4C38 7F0B0108 46067381 */ sub.s $f14, $f14, $f6 -/* 0E4C3C 7F0B010C 460AA501 */ sub.s $f20, $f20, $f10 -/* 0E4C40 7F0B0110 460E7402 */ mul.s $f16, $f14, $f14 -/* 0E4C44 7F0B0114 00000000 */ nop -/* 0E4C48 7F0B0118 4614A482 */ mul.s $f18, $f20, $f20 -/* 0E4C4C 7F0B011C 0C007DF8 */ jal sqrtf -/* 0E4C50 7F0B0120 46128300 */ add.s $f12, $f16, $f18 -/* 0E4C54 7F0B0124 3C018004 */ lui $at, %hi(inv_level_scale) -/* 0E4C58 7F0B0128 C4240F48 */ lwc1 $f4, %lo(inv_level_scale)($at) -/* 0E4C5C 7F0B012C 8FBF001C */ lw $ra, 0x1c($sp) -/* 0E4C60 7F0B0130 D7B40010 */ ldc1 $f20, 0x10($sp) -/* 0E4C64 7F0B0134 46040002 */ mul.s $f0, $f0, $f4 -/* 0E4C68 7F0B0138 03E00008 */ jr $ra -/* 0E4C6C 7F0B013C 27BD0020 */ addiu $sp, $sp, 0x20 -) -#endif - - - -#ifdef NONMATCHING - -// dot product -f32 sub_GAME_7F0B0140(StandTile *tile, s32 index, f32 p_x, f32 p_z) +/** + * Address: 7F0B0140 + * + * Unreferenced. + */ +f32 stanPointDot2D(StandTile *tile, s32 index, f32 x, f32 z) { - f32 d_x; - f32 d_z; + StandTilePoint *point; - d_x = (p_x * level_scale) * tile->points[index].x; - d_z = (p_z * level_scale) * tile->points[index].z; // was originally commuted + point = &tile->points[index]; - return (d_x + d_z) * inv_level_scale); -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B0140 -/* 0E4C70 7F0B0140 3C018004 */ lui $at, %hi(level_scale) -/* 0E4C74 7F0B0144 000570C0 */ sll $t6, $a1, 3 -/* 0E4C78 7F0B0148 44866000 */ mtc1 $a2, $f12 -/* 0E4C7C 7F0B014C C4220F44 */ lwc1 $f2, %lo(level_scale)($at) -/* 0E4C80 7F0B0150 008E1021 */ addu $v0, $a0, $t6 -/* 0E4C84 7F0B0154 844F000C */ lh $t7, 0xc($v0) -/* 0E4C88 7F0B0158 46026302 */ mul.s $f12, $f12, $f2 -/* 0E4C8C 7F0B015C 44877000 */ mtc1 $a3, $f14 -/* 0E4C90 7F0B0160 84580008 */ lh $t8, 8($v0) -/* 0E4C94 7F0B0164 448F2000 */ mtc1 $t7, $f4 -/* 0E4C98 7F0B0168 46027382 */ mul.s $f14, $f14, $f2 -/* 0E4C9C 7F0B016C 44985000 */ mtc1 $t8, $f10 -/* 0E4CA0 7F0B0170 3C018004 */ lui $at, %hi(inv_level_scale) -/* 0E4CA4 7F0B0174 468021A0 */ cvt.s.w $f6, $f4 -/* 0E4CA8 7F0B0178 46805420 */ cvt.s.w $f16, $f10 -/* 0E4CAC 7F0B017C 460E3202 */ mul.s $f8, $f6, $f14 -/* 0E4CB0 7F0B0180 C4260F48 */ lwc1 $f6, %lo(inv_level_scale)($at) -/* 0E4CB4 7F0B0184 46106482 */ mul.s $f18, $f12, $f16 -/* 0E4CB8 7F0B0188 46124100 */ add.s $f4, $f8, $f18 -/* 0E4CBC 7F0B018C 46062002 */ mul.s $f0, $f4, $f6 -/* 0E4CC0 7F0B0190 03E00008 */ jr $ra -/* 0E4CC4 7F0B0194 00000000 */ nop -) -#endif + x *= level_scale; + z *= level_scale; - - - - -#ifdef NONMATCHING -// Similar to others -f32 sub_GAME_7F0B0198(void *arg0, s32 arg1, f32 arg2, f32 arg3) { - void *temp_v0; - void *temp_v0_2; - f32 temp_f0; - f32 temp_f2; - f32 temp_f12; - f32 temp_f14; - f32 temp_f18; - f32 temp_f6; - f32 temp_f2_2; - f32 temp_f0_2; - s32 phi_v0; - s32 phi_v0_2; - s32 phi_v0_3; - - // Node 0 - temp_v0 = (arg0 + (arg1 * 8)); - temp_v0_2 = (arg0 + (((s32) (arg1 + 1) % (s32) (((s32) arg0->unk6 >> 0xc) & 0xf)) * 8)); - temp_f0 = (f32) temp_v0->unk8; - temp_f2 = (f32) temp_v0->unkC; - temp_f12 = ((f32) temp_v0_2->unk8 - temp_f0); - temp_f14 = ((f32) temp_v0_2->unkC - temp_f2); - temp_f18 = (arg2 - temp_f0); - temp_f6 = (arg3 - temp_f2); - arg2 = temp_f18; - arg3 = temp_f6; - temp_f2_2 = ((temp_f12 * temp_f12) + (temp_f14 * temp_f14)); - temp_f0_2 = ((temp_f18 * temp_f12) + (temp_f6 * temp_f14)); - phi_v0 = 0; - if (temp_f2_2 < temp_f0_2) - { - // Node 1 - phi_v0 = 1; - } - // Node 2 - if ((phi_v0 != 0) && (temp_f0_2 < 0.0f)) - { - // Node 4 - phi_v0_2 = 1; - // Node 5 - if (phi_v0_2 == 0) - { - // Node 6 - phi_v0_3 = 0; - if (0.0f < temp_f0_2) - { - // Node 7 - phi_v0_3 = 1; - } - // Node 8 - if (phi_v0_3 != 0) - { - // Node 9 - if (temp_f0_2 < temp_f2_2) - { - // Node 10 - } - } - } - } - else - { - // Node 6 - phi_v0_3 = 0; - if (0.0f < temp_f0_2) - { - // Node 7 - phi_v0_3 = 1; - } - // Node 8 - if (phi_v0_3 != 0) - { - // Node 9 - if (temp_f0_2 < temp_f2_2) - { - // Node 10 - } - } - } - // Node 11 - return temp_f0_2; + return (((f32)point->z * z) + (x * (f32)point->x)) * inv_level_scale; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B0198 -/* 0E4CC8 7F0B0198 AFA60008 */ sw $a2, 8($sp) -/* 0E4CCC 7F0B019C AFA7000C */ sw $a3, 0xc($sp) -/* 0E4CD0 7F0B01A0 84880006 */ lh $t0, 6($a0) -/* 0E4CD4 7F0B01A4 24B90001 */ addiu $t9, $a1, 1 -/* 0E4CD8 7F0B01A8 000570C0 */ sll $t6, $a1, 3 -/* 0E4CDC 7F0B01AC 00084B03 */ sra $t1, $t0, 0xc -/* 0E4CE0 7F0B01B0 312A000F */ andi $t2, $t1, 0xf -/* 0E4CE4 7F0B01B4 032A001A */ div $zero, $t9, $t2 -/* 0E4CE8 7F0B01B8 008E1021 */ addu $v0, $a0, $t6 -/* 0E4CEC 7F0B01BC 00002810 */ mfhi $a1 -/* 0E4CF0 7F0B01C0 844F0008 */ lh $t7, 8($v0) -/* 0E4CF4 7F0B01C4 8458000C */ lh $t8, 0xc($v0) -/* 0E4CF8 7F0B01C8 000558C0 */ sll $t3, $a1, 3 -/* 0E4CFC 7F0B01CC 008B1021 */ addu $v0, $a0, $t3 -/* 0E4D00 7F0B01D0 844C0008 */ lh $t4, 8($v0) -/* 0E4D04 7F0B01D4 844D000C */ lh $t5, 0xc($v0) -/* 0E4D08 7F0B01D8 448F2000 */ mtc1 $t7, $f4 -/* 0E4D0C 7F0B01DC 448C4000 */ mtc1 $t4, $f8 -/* 0E4D10 7F0B01E0 44983000 */ mtc1 $t8, $f6 -/* 0E4D14 7F0B01E4 46802020 */ cvt.s.w $f0, $f4 -/* 0E4D18 7F0B01E8 448D5000 */ mtc1 $t5, $f10 -/* 0E4D1C 7F0B01EC C7B00008 */ lwc1 $f16, 8($sp) -/* 0E4D20 7F0B01F0 C7A4000C */ lwc1 $f4, 0xc($sp) -/* 0E4D24 7F0B01F4 00001025 */ move $v0, $zero -/* 0E4D28 7F0B01F8 46804320 */ cvt.s.w $f12, $f8 -/* 0E4D2C 7F0B01FC 468030A0 */ cvt.s.w $f2, $f6 -/* 0E4D30 7F0B0200 15400002 */ bnez $t2, .L7F0B020C -/* 0E4D34 7F0B0204 00000000 */ nop -/* 0E4D38 7F0B0208 0007000D */ break 7 -.L7F0B020C: -/* 0E4D3C 7F0B020C 2401FFFF */ li $at, -1 -/* 0E4D40 7F0B0210 15410004 */ bne $t2, $at, .L7F0B0224 -/* 0E4D44 7F0B0214 3C018000 */ lui $at, 0x8000 -/* 0E4D48 7F0B0218 17210002 */ bne $t9, $at, .L7F0B0224 -/* 0E4D4C 7F0B021C 00000000 */ nop -/* 0E4D50 7F0B0220 0006000D */ break 6 -.L7F0B0224: -/* 0E4D54 7F0B0224 468053A0 */ cvt.s.w $f14, $f10 -/* 0E4D58 7F0B0228 46006301 */ sub.s $f12, $f12, $f0 -/* 0E4D5C 7F0B022C 46027381 */ sub.s $f14, $f14, $f2 -/* 0E4D60 7F0B0230 460C6202 */ mul.s $f8, $f12, $f12 -/* 0E4D64 7F0B0234 46008481 */ sub.s $f18, $f16, $f0 -/* 0E4D68 7F0B0238 460E7282 */ mul.s $f10, $f14, $f14 -/* 0E4D6C 7F0B023C 46022181 */ sub.s $f6, $f4, $f2 -/* 0E4D70 7F0B0240 460C9402 */ mul.s $f16, $f18, $f12 -/* 0E4D74 7F0B0244 E7B20008 */ swc1 $f18, 8($sp) -/* 0E4D78 7F0B0248 460E3102 */ mul.s $f4, $f6, $f14 -/* 0E4D7C 7F0B024C E7A6000C */ swc1 $f6, 0xc($sp) -/* 0E4D80 7F0B0250 460A4080 */ add.s $f2, $f8, $f10 -/* 0E4D84 7F0B0254 46048000 */ add.s $f0, $f16, $f4 -/* 0E4D88 7F0B0258 4600103C */ c.lt.s $f2, $f0 -/* 0E4D8C 7F0B025C 00000000 */ nop -/* 0E4D90 7F0B0260 45000002 */ bc1f .L7F0B026C -/* 0E4D94 7F0B0264 00000000 */ nop -/* 0E4D98 7F0B0268 24020001 */ li $v0, 1 -.L7F0B026C: -/* 0E4D9C 7F0B026C 5040000B */ beql $v0, $zero, .L7F0B029C -/* 0E4DA0 7F0B0270 44805000 */ mtc1 $zero, $f10 -/* 0E4DA4 7F0B0274 44804000 */ mtc1 $zero, $f8 -/* 0E4DA8 7F0B0278 00001025 */ move $v0, $zero -/* 0E4DAC 7F0B027C 4608003C */ c.lt.s $f0, $f8 -/* 0E4DB0 7F0B0280 00000000 */ nop -/* 0E4DB4 7F0B0284 45000002 */ bc1f .L7F0B0290 -/* 0E4DB8 7F0B0288 00000000 */ nop -/* 0E4DBC 7F0B028C 24020001 */ li $v0, 1 -.L7F0B0290: -/* 0E4DC0 7F0B0290 1440000F */ bnez $v0, .L7F0B02D0 -/* 0E4DC4 7F0B0294 00000000 */ nop -/* 0E4DC8 7F0B0298 44805000 */ mtc1 $zero, $f10 -.L7F0B029C: -/* 0E4DCC 7F0B029C 00001025 */ move $v0, $zero -/* 0E4DD0 7F0B02A0 4600503C */ c.lt.s $f10, $f0 -/* 0E4DD4 7F0B02A4 00000000 */ nop -/* 0E4DD8 7F0B02A8 45000002 */ bc1f .L7F0B02B4 -/* 0E4DDC 7F0B02AC 00000000 */ nop -/* 0E4DE0 7F0B02B0 24020001 */ li $v0, 1 -.L7F0B02B4: -/* 0E4DE4 7F0B02B4 10400006 */ beqz $v0, .L7F0B02D0 -/* 0E4DE8 7F0B02B8 00000000 */ nop -/* 0E4DEC 7F0B02BC 4602003C */ c.lt.s $f0, $f2 -/* 0E4DF0 7F0B02C0 00001025 */ move $v0, $zero -/* 0E4DF4 7F0B02C4 45000002 */ bc1f .L7F0B02D0 -/* 0E4DF8 7F0B02C8 00000000 */ nop -/* 0E4DFC 7F0B02CC 24020001 */ li $v0, 1 -.L7F0B02D0: -/* 0E4E00 7F0B02D0 03E00008 */ jr $ra -/* 0E4E04 7F0B02D4 00000000 */ nop -) -#endif +/** + * Address: 7F0B0198 + * + * Returns true if the perpendicular projection of the X/Z point onto the + * tile edge's infinite line falls between the edge endpoints. + * + * Example: + * + * A -------- B + * | + * | + * P + * + * P is not on the edge, but its projection lands between A and B. + */ +bool stanPointProjectsOntoTileEdge(StandTile *tile, s32 edgeIndex, f32 p_x, f32 p_z) +{ + StandTilePoint *point; + f32 edgeXCopy; + f32 startX; + f32 startZ; + f32 edgeX; + f32 edgeZ; + StandTilePoint *nextPoint; + point = &tile->points[edgeIndex]; + startX = point->x; + startZ = point->z; + + edgeIndex = (edgeIndex + 1) % ((tile->tail.half >> 12) & 0xf); + + point = (nextPoint = &tile->points[edgeIndex]); + + edgeX = point->x; + edgeX = edgeX - startX; + + edgeZ = point->z; + edgeZ = edgeZ - startZ; + + p_x -= startX; + p_z -= startZ; + + edgeXCopy = edgeX; + + startZ = (edgeXCopy * edgeXCopy) + (edgeZ * edgeZ); + startX = (p_x * edgeXCopy) + (p_z * edgeZ); + + edgeZ = startX; + + return ((startZ < edgeZ) && (edgeZ < 0.0f)) + || ((0.0f < edgeZ) && (edgeZ < startZ)); +} // Determines if inside (presumably - it effectively does an && of the checks on signs of cross products) @@ -2510,78 +1188,77 @@ int getRotationalDirectionBetween(f32 a_x,f32 a_z,f32 b_x,f32 b_z) } - - - -s32 sub_GAME_7F0B0688(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7) +/** + * Address: 7F0B0688 + * + * Test if two 2D line segments intersect. + * + * Segment 1 runs from start1 -> end1. Segment 2 runs from start2 -> end2. + * + * This function acts as a gate for calculateSegmentIntersectionFraction, + * so callers can decide if it's worth computing where along segment 1 the crossing lands. + */ +bool doSegmentsIntersect(f32 start1X, f32 start1Z, f32 end1X, f32 end1Z, f32 start2X, f32 start2Z, f32 end2X, f32 end2Z) { s32 unused1; s32 unused2; - f32 sp24; - f32 sp20; - f32 sp1C; - f32 sp18; - - sp24 = arg0 - arg4; - sp20 = arg1 - arg5; - sp1C = arg2 - arg0; - sp18 = arg3 - arg1; - + f32 start1RelX; + f32 start1RelZ; + f32 seg1Dx; + f32 seg1Dz; + + start1RelX = start1X - start2X; + start1RelZ = start1Z - start2Z; + seg1Dx = end1X - start1X; + seg1Dz = end1Z - start1Z; + return ( - (getRotationalDirectionBetween(sp1C, sp18, -sp24, -sp20) - * getRotationalDirectionBetween(sp1C, sp18, arg6 - arg0, arg7 - arg1)) < 1) + (getRotationalDirectionBetween(seg1Dx, seg1Dz, -start1RelX, -start1RelZ) + * getRotationalDirectionBetween(seg1Dx, seg1Dz, end2X - start1X, end2Z - start1Z)) < 1) && ( - (getRotationalDirectionBetween(arg6 - arg4, arg7 - arg5, sp24, sp20) - * getRotationalDirectionBetween(arg6 - arg4, arg7 - arg5, arg2 - arg4, arg3 - arg5)) < 1) + (getRotationalDirectionBetween(end2X - start2X, end2Z - start2Z, start1RelX, start1RelZ) + * getRotationalDirectionBetween(end2X - start2X, end2Z - start2Z, end1X - start2X, end1Z - start2Z)) < 1) ; } - - #if defined(LEFTOVERDEBUG) -#ifdef NONMATCHING -/* 99.44% match, only the stack is slightly wrong */ -s32 sub_GAME_7F0B07BC(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, s32 arg8) { - f32 c_z2; - f32 a_x2; - f32 b_x2; - f32 a_z2; - s32 val2; - f32 c_x; - s32 val1; - f32 b_x; - s32 rc; - f32 c_x2; - f32 a_z; - f32 b_z; - f32 b_z2; +s32 sub_GAME_7F0B07BC(f32 arg0, f32 arg1, f32 arg2, f32 arg3, + f32 arg4, f32 arg5, f32 arg6, f32 arg7, s32 arg8) { f32 a_x; + f32 a_z; + f32 b_x; + f32 b_z; + f32 c_x; f32 c_z; + s32 val1; + s32 unused4; + s32 rc; + s32 unused5; + s32 unused6; + s32 val2; + s32 unused7; + s32 unused8; + s32 tmp; rc = 1; - b_x = -(arg0 - arg4); - c_z = arg7 - arg1; - c_x = arg6 - arg0; + + b_x = arg0 - arg4; + b_z = arg1 - arg5; a_x = arg2 - arg0; a_z = arg3 - arg1; - b_z = -(arg1 - arg5); + tmp = getRotationalDirectionBetween(a_x, a_z, -b_x, -b_z); + val1 = tmp * getRotationalDirectionBetween(a_x, a_z, arg6 - arg0, arg7 - arg1); - val1 = getRotationalDirectionBetween(a_x, a_z, b_x, b_z) * getRotationalDirectionBetween(a_x, a_z, c_x, c_z); + c_x = arg6 - arg4; + c_z = arg7 - arg5; - b_z2 = arg1 - arg5; - c_x2 = arg2 - arg4; - b_x2 = arg0 - arg4; - c_z2 = arg3 - arg5; - a_x2 = arg6 - arg4; - a_z2 = arg7 - arg5; - - - val2 = getRotationalDirectionBetween(a_x2, a_z2, b_x2, b_z2) * getRotationalDirectionBetween(a_x2, a_z2, c_x2, c_z2); + tmp = getRotationalDirectionBetween(c_x, c_z, b_x, b_z); + val2 = tmp * getRotationalDirectionBetween(c_x, c_z, arg2 - arg4, arg3 - arg5); if (val1 >= arg8) { rc = 0; @@ -2593,105 +1270,7 @@ s32 sub_GAME_7F0B07BC(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5 return rc; } - #else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B07BC -/* 0E52EC 7F0B07BC 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 0E52F0 7F0B07C0 E7AC0068 */ swc1 $f12, 0x68($sp) -/* 0E52F4 7F0B07C4 AFA60070 */ sw $a2, 0x70($sp) -/* 0E52F8 7F0B07C8 C7A40070 */ lwc1 $f4, 0x70($sp) -/* 0E52FC 7F0B07CC C7A60068 */ lwc1 $f6, 0x68($sp) -/* 0E5300 7F0B07D0 E7AE006C */ swc1 $f14, 0x6c($sp) -/* 0E5304 7F0B07D4 C7AA006C */ lwc1 $f10, 0x6c($sp) -/* 0E5308 7F0B07D8 46062301 */ sub.s $f12, $f4, $f6 -/* 0E530C 7F0B07DC C7A4007C */ lwc1 $f4, 0x7c($sp) -/* 0E5310 7F0B07E0 C7B00078 */ lwc1 $f16, 0x78($sp) -/* 0E5314 7F0B07E4 AFA70074 */ sw $a3, 0x74($sp) -/* 0E5318 7F0B07E8 46045081 */ sub.s $f2, $f10, $f4 -/* 0E531C 7F0B07EC C7A80074 */ lwc1 $f8, 0x74($sp) -/* 0E5320 7F0B07F0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E5324 7F0B07F4 46103001 */ sub.s $f0, $f6, $f16 -/* 0E5328 7F0B07F8 240E0001 */ li $t6, 1 -/* 0E532C 7F0B07FC AFAE0044 */ sw $t6, 0x44($sp) -/* 0E5330 7F0B0800 460A4381 */ sub.s $f14, $f8, $f10 -/* 0E5334 7F0B0804 E7A00028 */ swc1 $f0, 0x28($sp) -/* 0E5338 7F0B0808 E7A20024 */ swc1 $f2, 0x24($sp) -/* 0E533C 7F0B080C 46001207 */ neg.s $f8, $f2 -/* 0E5340 7F0B0810 46000487 */ neg.s $f18, $f0 -/* 0E5344 7F0B0814 44074000 */ mfc1 $a3, $f8 -/* 0E5348 7F0B0818 44069000 */ mfc1 $a2, $f18 -/* 0E534C 7F0B081C E7AE001C */ swc1 $f14, 0x1c($sp) -/* 0E5350 7F0B0820 0FC2C170 */ jal getRotationalDirectionBetween -/* 0E5354 7F0B0824 E7AC0020 */ swc1 $f12, 0x20($sp) -/* 0E5358 7F0B0828 C7A60080 */ lwc1 $f6, 0x80($sp) -/* 0E535C 7F0B082C C7B00068 */ lwc1 $f16, 0x68($sp) -/* 0E5360 7F0B0830 C7AA0084 */ lwc1 $f10, 0x84($sp) -/* 0E5364 7F0B0834 C7A4006C */ lwc1 $f4, 0x6c($sp) -/* 0E5368 7F0B0838 46103481 */ sub.s $f18, $f6, $f16 -/* 0E536C 7F0B083C C7AC0020 */ lwc1 $f12, 0x20($sp) -/* 0E5370 7F0B0840 C7AE001C */ lwc1 $f14, 0x1c($sp) -/* 0E5374 7F0B0844 46045201 */ sub.s $f8, $f10, $f4 -/* 0E5378 7F0B0848 44069000 */ mfc1 $a2, $f18 -/* 0E537C 7F0B084C AFA2002C */ sw $v0, 0x2c($sp) -/* 0E5380 7F0B0850 44074000 */ mfc1 $a3, $f8 -/* 0E5384 7F0B0854 0FC2C170 */ jal getRotationalDirectionBetween -/* 0E5388 7F0B0858 00000000 */ nop -/* 0E538C 7F0B085C 8FAF002C */ lw $t7, 0x2c($sp) -/* 0E5390 7F0B0860 C7A60080 */ lwc1 $f6, 0x80($sp) -/* 0E5394 7F0B0864 C7B00078 */ lwc1 $f16, 0x78($sp) -/* 0E5398 7F0B0868 004F0019 */ multu $v0, $t7 -/* 0E539C 7F0B086C C7B20084 */ lwc1 $f18, 0x84($sp) -/* 0E53A0 7F0B0870 C7AA007C */ lwc1 $f10, 0x7c($sp) -/* 0E53A4 7F0B0874 46103301 */ sub.s $f12, $f6, $f16 -/* 0E53A8 7F0B0878 8FA60028 */ lw $a2, 0x28($sp) -/* 0E53AC 7F0B087C 8FA70024 */ lw $a3, 0x24($sp) -/* 0E53B0 7F0B0880 460A9381 */ sub.s $f14, $f18, $f10 -/* 0E53B4 7F0B0884 E7AC0020 */ swc1 $f12, 0x20($sp) -/* 0E53B8 7F0B0888 0000C012 */ mflo $t8 -/* 0E53BC 7F0B088C AFB8004C */ sw $t8, 0x4c($sp) -/* 0E53C0 7F0B0890 0FC2C170 */ jal getRotationalDirectionBetween -/* 0E53C4 7F0B0894 E7AE001C */ swc1 $f14, 0x1c($sp) -/* 0E53C8 7F0B0898 C7A40070 */ lwc1 $f4, 0x70($sp) -/* 0E53CC 7F0B089C C7A80078 */ lwc1 $f8, 0x78($sp) -/* 0E53D0 7F0B08A0 C7B00074 */ lwc1 $f16, 0x74($sp) -/* 0E53D4 7F0B08A4 C7B2007C */ lwc1 $f18, 0x7c($sp) -/* 0E53D8 7F0B08A8 46082181 */ sub.s $f6, $f4, $f8 -/* 0E53DC 7F0B08AC C7AC0020 */ lwc1 $f12, 0x20($sp) -/* 0E53E0 7F0B08B0 C7AE001C */ lwc1 $f14, 0x1c($sp) -/* 0E53E4 7F0B08B4 46128281 */ sub.s $f10, $f16, $f18 -/* 0E53E8 7F0B08B8 44063000 */ mfc1 $a2, $f6 -/* 0E53EC 7F0B08BC AFA2002C */ sw $v0, 0x2c($sp) -/* 0E53F0 7F0B08C0 44075000 */ mfc1 $a3, $f10 -/* 0E53F4 7F0B08C4 0FC2C170 */ jal getRotationalDirectionBetween -/* 0E53F8 7F0B08C8 00000000 */ nop -/* 0E53FC 7F0B08CC 8FA30088 */ lw $v1, 0x88($sp) -/* 0E5400 7F0B08D0 8FB9004C */ lw $t9, 0x4c($sp) -/* 0E5404 7F0B08D4 0323082A */ slt $at, $t9, $v1 -/* 0E5408 7F0B08D8 54200003 */ bnezl $at, .L7F0B08E8 -/* 0E540C 7F0B08DC 8FA8002C */ lw $t0, 0x2c($sp) -/* 0E5410 7F0B08E0 AFA00044 */ sw $zero, 0x44($sp) -/* 0E5414 7F0B08E4 8FA8002C */ lw $t0, 0x2c($sp) -.L7F0B08E8: -/* 0E5418 7F0B08E8 8FA40044 */ lw $a0, 0x44($sp) -/* 0E541C 7F0B08EC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E5420 7F0B08F0 00480019 */ multu $v0, $t0 -/* 0E5424 7F0B08F4 27BD0068 */ addiu $sp, $sp, 0x68 -/* 0E5428 7F0B08F8 00004812 */ mflo $t1 -/* 0E542C 7F0B08FC 0123082A */ slt $at, $t1, $v1 -/* 0E5430 7F0B0900 14200002 */ bnez $at, .L7F0B090C -/* 0E5434 7F0B0904 00000000 */ nop -/* 0E5438 7F0B0908 00002025 */ move $a0, $zero -.L7F0B090C: -/* 0E543C 7F0B090C 03E00008 */ jr $ra -/* 0E5440 7F0B0910 00801025 */ move $v0, $a0 -) -#endif -#endif - -#if !defined(LEFTOVERDEBUG) - s32 sub_GAME_7F0B07BC(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7, s32 arg8) { f32 a_z; f32 a_x; @@ -2735,345 +1314,120 @@ s32 sub_GAME_7F0B07BC(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5 #endif - - -// 'walkTilesBetweenPoints_withCallback' -// sig declared for caller matches -bool sub_GAME_7F0B0914(StandTile **tileStack, f32 start_x, f32 start_z, f32 dest_x, f32 dest_z, - standTileWalkCallback_t func, struct StandTileWalkCallbackRecord *funcData); - - -#ifdef NONMATCHING -bool sub_GAME_7F0B0914(StandTile **tileStack, f32 start_x, f32 start_z, f32 dest_x, f32 dest_z, - standTileWalkCallback_t func, struct StandTileWalkCallbackRecord *funcData) +bool sub_GAME_7F0B0914(StandTile **tileStack, f32 start_x, f32 start_z, f32 dest_x, f32 dest_z, standTileWalkCallback_t callback, struct StandTileWalkCallbackRecord *callbackData) { - s32 sp8C; - StandTile *tileStackTop; - StandTile *temp_v0_2; - StandTile *var_s0; - StandTile *var_s3; - StandTile *var_s6; - StandTile *var_s7; - f32 scaled_startX; - f32 scaled_startZ; - f32 scaled_destX; - f32 scaled_destZ; - f32 zDist; - f32 xDist; - s16 point2_z; - s16 startpoint2_z; - s16 point2_x; - s16 startpoint2_x; - s32 temp_s2; - s32 temp_t5; - s32 pointcount; - s32 nextTile; - s32 pointcount2; - s32 var_fp; - s32 var_s1; - s32 var_s4; - s32 trynexttile; - u16 temp_v1; + StandTile *tile; + StandTile *previousTile; + StandTile *previousPreviousTile; + StandTile *linkedTile; + StandTile *nextTile; + f32 lineNegDz; + f32 lineDx; + s32 uninitialized; + s32 edgeIndex; + s32 crossings; + s32 iterationCount; + s32 savedPointIndex; + StandTilePoint *nextPoint; + StandTilePoint *curPoint; + s32 nextPointIndex; + s32 hasLink; + start_x *= level_scale; + start_z *= level_scale; + dest_x *= level_scale; + dest_z *= level_scale; - scaled_startX = start_x * level_scale; - scaled_startZ = start_z * level_scale; - scaled_destX = dest_x * level_scale; - scaled_destZ = dest_z * level_scale; - tileStackTop = *tileStack; - trynexttile = 0; - sp8C = 0; - zDist = -(scaled_destZ - scaled_startZ); - xDist = scaled_destX - scaled_startX; - var_s1 = 0; - var_s4 = 0; - var_fp = sp98; - var_s3 = tileStackTop; - var_s6 = tileStackTop; - var_s7 = tileStackTop; + tile = *tileStack; + previousTile = *tileStack; + previousPreviousTile = *tileStack; + lineNegDz = -(dest_z - start_z); + crossings = 0; + nextTile = NULL; + iterationCount = 0; + lineDx = dest_x - start_x; - while (true) + savedPointIndex = uninitialized;\ + while (1) { - if (func != NULL) - { - func(var_s3, var_s6, funcData); - #ifdef DEBUG - ossyncPrintf("{\"%s\",0x%08x,0x%08x,0x%08x,0x%08x},\t/* %8.3f %8.3f %8.3f %8.3f */\n", GetStanRoomID(*tilestack), start_x, start_z, dest_x, dest_z, start_x, start_z); - #endif + crossings = 0; - } - var_s0 = var_s3; - pointcount = (var_s3->tail.half >> 0xC) & 0xF; //pointcount - pointcount2 = pointcount; - if (pointcount > 0) + if (callback) { - do + callback(tile, previousTile, callbackData); +#ifdef DEBUG + ossyncPrintf("{\"%s\",0x%08x,0x%08x,0x%08x,0x%08x},\t/* %8.3f %8.3f %8.3f %8.3f */\n", GetStanRoomID(*tilestack), start_x, start_z, dest_x, dest_z, start_x, start_z); +#endif + } + + curPoint = (StandTilePoint *) tile; + + for (edgeIndex = 0; edgeIndex < (tile->tail.hdrTail.pointCount & 0xF); edgeIndex++, curPoint++) + { + nextPointIndex = (edgeIndex + 1) % (tile->tail.hdrTail.pointCount & 0xF); + nextPoint = &((StandTilePoint *) tile)[nextPointIndex]; + + if (((lineNegDz * (nextPoint[1].x - curPoint[1].x)) + (lineDx * (nextPoint[1].z - curPoint[1].z))) <= 0.0f) { - temp_s2 = var_s1 + 1; - temp_v0_2 = &var_s3[temp_s2 % pointcount2]; - point2_z = temp_v0_2->unkC; - startpoint2_z = var_s0->unkC; - point2_x = temp_v0_2->unk8; - startpoint2_x = var_s0->unk8; - if (((((point2_z - startpoint2_z) * xDist) + (zDist * (point2_x - startpoint2_x))) <= 0.0f) && (sub_GAME_7F0B07BC(scaled_startX, scaled_startZ, pointcount2, point2_z, scaled_destX, scaled_destZ, startpoint2_x, startpoint2_z, point2_x, point2_z, (var_s0->unkE >> 4) != 0) != 0)) + hasLink = curPoint[1].link >> 4 != 0; + + if (sub_GAME_7F0B07BC(start_x, start_z, dest_x, dest_z, curPoint[1].x, curPoint[1].z, nextPoint[1].x, nextPoint[1].z, hasLink)) { - temp_v1 = var_s0->unkE; - var_s4 += 1; - nextTile = (temp_v1 * 8) + standTileStart; - if ((var_s6 != nextTile) && (var_s7 != nextTile)) + linkedTile = &standTileStart[curPoint[1].link]; + crossings++; + + if (previousTile != linkedTile && previousPreviousTile != linkedTile) + { + savedPointIndex = edgeIndex; + nextTile = curPoint[1].link >> 4 != 0 ? linkedTile : NULL; + } + + // Optimized away but required to allocate edgeIndex to the target register. + if (edgeIndex && edgeIndex && edgeIndex) { - var_fp = var_s1; - if ((temp_v1 >> 4) != 0) - { - trynexttile = nextTile; - } - else - { - trynexttile = NULL; - } } } - var_s1 = temp_s2; - var_s0 += 8; - temp_t5 = (var_s3->tail.half >> 0xC) & 0xF; - pointcount2 = temp_t5; - } while (temp_s2 < temp_t5); + } } - var_s7 = var_s6; - var_s6 = var_s3; - var_s3 = trynexttile; - #ifdef DEBUG - assert(intersections != 0); - assert(intersections != 3); - osSyncPrintf("sf: stanLineDo %d %5.1f %5.1f %5.1f %5.1f %s %s %s\n", 3, start_x, start_z, dest_x, dest_z, GetStanRoomID(*tilestack), GetStanRoomID(puVar3)); - #endif - if ((var_s3 ^ trynexttile) == 0) + +#ifdef DEBUG + assert(crossings != 0); + assert(crossings != 3); + osSyncPrintf("sf: stanLineDo %d %5.1f %5.1f %5.1f %5.1f %s %s %s\n", 3, start_x, start_z, dest_x, dest_z, sub_GAME_7F0AEF3C(tile), sub_GAME_7F0AEF3C(previousTile), sub_GAME_7F0AEF3C(previousPreviousTile)); +#endif + + previousPreviousTile = previousTile; + previousTile = tile; + + if (tile == nextTile) { - var_s4 = 0; + crossings = 0; } - if (var_s4 == 0) + + tile = nextTile; + + if (crossings == 0) { return TRUE; } - sp8C += 1; - if ((((sp8C < 0x1F5) ^ 1) != 0) || (trynexttile == 0) || (var_s1 = 0, (var_s4 == 0))) + + if (iterationCount++ >= 0x1f5 || nextTile == NULL || crossings == 0) { - stanSavedColl_tile = var_s6; - stanSavedColl_pointI = var_fp; - #ifdef DEBUG + stanSavedColl_tile = previousTile; + stanSavedColl_pointI = savedPointIndex; +#ifdef DEBUG osSyncPrintf("stanLine: Looping; ret=0\n"); - #endif +#endif return FALSE; } - *tileStack = trynexttile; - var_s4 = 0; + + *tileStack = nextTile; } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B0914 -/* 0E5444 7F0B0914 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 0E5448 7F0B0918 F7B40030 */ sdc1 $f20, 0x30($sp) -/* 0E544C 7F0B091C 3C018004 */ lui $at, %hi(level_scale) -/* 0E5450 7F0B0920 4485A000 */ mtc1 $a1, $f20 -/* 0E5454 7F0B0924 C4200F44 */ lwc1 $f0, %lo(level_scale)($at) -/* 0E5458 7F0B0928 F7B60038 */ sdc1 $f22, 0x38($sp) -/* 0E545C 7F0B092C 4486B000 */ mtc1 $a2, $f22 -/* 0E5460 7F0B0930 4600A502 */ mul.s $f20, $f20, $f0 -/* 0E5464 7F0B0934 F7B80040 */ sdc1 $f24, 0x40($sp) -/* 0E5468 7F0B0938 4487C000 */ mtc1 $a3, $f24 -/* 0E546C 7F0B093C 4600B582 */ mul.s $f22, $f22, $f0 -/* 0E5470 7F0B0940 F7BA0048 */ sdc1 $f26, 0x48($sp) -/* 0E5474 7F0B0944 C7BA00C8 */ lwc1 $f26, 0xc8($sp) -/* 0E5478 7F0B0948 4600C602 */ mul.s $f24, $f24, $f0 -/* 0E547C 7F0B094C AFBF0084 */ sw $ra, 0x84($sp) -/* 0E5480 7F0B0950 AFBE0080 */ sw $fp, 0x80($sp) -/* 0E5484 7F0B0954 4600D682 */ mul.s $f26, $f26, $f0 -/* 0E5488 7F0B0958 AFB7007C */ sw $s7, 0x7c($sp) -/* 0E548C 7F0B095C AFB60078 */ sw $s6, 0x78($sp) -/* 0E5490 7F0B0960 AFB50074 */ sw $s5, 0x74($sp) -/* 0E5494 7F0B0964 AFB40070 */ sw $s4, 0x70($sp) -/* 0E5498 7F0B0968 AFB3006C */ sw $s3, 0x6c($sp) -/* 0E549C 7F0B096C AFB20068 */ sw $s2, 0x68($sp) -/* 0E54A0 7F0B0970 AFB10064 */ sw $s1, 0x64($sp) -/* 0E54A4 7F0B0974 AFB00060 */ sw $s0, 0x60($sp) -/* 0E54A8 7F0B0978 F7BE0058 */ sdc1 $f30, 0x58($sp) -/* 0E54AC 7F0B097C F7BC0050 */ sdc1 $f28, 0x50($sp) -/* 0E54B0 7F0B0980 AFA400B8 */ sw $a0, 0xb8($sp) -/* 0E54B4 7F0B0984 8C820000 */ lw $v0, ($a0) -/* 0E54B8 7F0B0988 4616D701 */ sub.s $f28, $f26, $f22 -/* 0E54BC 7F0B098C 00807025 */ move $t6, $a0 -/* 0E54C0 7F0B0990 0000A825 */ move $s5, $zero -/* 0E54C4 7F0B0994 AFA0008C */ sw $zero, 0x8c($sp) -/* 0E54C8 7F0B0998 4600E707 */ neg.s $f28, $f28 -/* 0E54CC 7F0B099C 4614C781 */ sub.s $f30, $f24, $f20 -/* 0E54D0 7F0B09A0 00008825 */ move $s1, $zero -/* 0E54D4 7F0B09A4 0000A025 */ move $s4, $zero -/* 0E54D8 7F0B09A8 8FBE0098 */ lw $fp, 0x98($sp) -/* 0E54DC 7F0B09AC 00409825 */ move $s3, $v0 -/* 0E54E0 7F0B09B0 0040B025 */ move $s6, $v0 -/* 0E54E4 7F0B09B4 0040B825 */ move $s7, $v0 -.L7F0B09B8: -/* 0E54E8 7F0B09B8 8FAF00CC */ lw $t7, 0xcc($sp) -/* 0E54EC 7F0B09BC 02602025 */ move $a0, $s3 -/* 0E54F0 7F0B09C0 51E00005 */ beql $t7, $zero, .L7F0B09D8 -/* 0E54F4 7F0B09C4 86640006 */ lh $a0, 6($s3) -/* 0E54F8 7F0B09C8 02C02825 */ move $a1, $s6 -/* 0E54FC 7F0B09CC 01E0F809 */ jalr $t7 -/* 0E5500 7F0B09D0 8FA600D0 */ lw $a2, 0xd0($sp) -/* 0E5504 7F0B09D4 86640006 */ lh $a0, 6($s3) -.L7F0B09D8: -/* 0E5508 7F0B09D8 02608025 */ move $s0, $s3 -/* 0E550C 7F0B09DC 0004C303 */ sra $t8, $a0, 0xc -/* 0E5510 7F0B09E0 3319000F */ andi $t9, $t8, 0xf -/* 0E5514 7F0B09E4 1B200051 */ blez $t9, .L7F0B0B2C -/* 0E5518 7F0B09E8 03202025 */ move $a0, $t9 -.L7F0B09EC: -/* 0E551C 7F0B09EC 26320001 */ addiu $s2, $s1, 1 -/* 0E5520 7F0B09F0 0244001A */ div $zero, $s2, $a0 -/* 0E5524 7F0B09F4 00001810 */ mfhi $v1 -/* 0E5528 7F0B09F8 000358C0 */ sll $t3, $v1, 3 -/* 0E552C 7F0B09FC 026B1021 */ addu $v0, $s3, $t3 -/* 0E5530 7F0B0A00 8445000C */ lh $a1, 0xc($v0) -/* 0E5534 7F0B0A04 8608000C */ lh $t0, 0xc($s0) -/* 0E5538 7F0B0A08 84490008 */ lh $t1, 8($v0) -/* 0E553C 7F0B0A0C 860A0008 */ lh $t2, 8($s0) -/* 0E5540 7F0B0A10 00A86023 */ subu $t4, $a1, $t0 -/* 0E5544 7F0B0A14 448C3000 */ mtc1 $t4, $f6 -/* 0E5548 7F0B0A18 012A6823 */ subu $t5, $t1, $t2 -/* 0E554C 7F0B0A1C 448D8000 */ mtc1 $t5, $f16 -/* 0E5550 7F0B0A20 46803220 */ cvt.s.w $f8, $f6 -/* 0E5554 7F0B0A24 44802000 */ mtc1 $zero, $f4 -/* 0E5558 7F0B0A28 14800002 */ bnez $a0, .L7F0B0A34 -/* 0E555C 7F0B0A2C 00000000 */ nop -/* 0E5560 7F0B0A30 0007000D */ break 7 -.L7F0B0A34: -/* 0E5564 7F0B0A34 2401FFFF */ li $at, -1 -/* 0E5568 7F0B0A38 14810004 */ bne $a0, $at, .L7F0B0A4C -/* 0E556C 7F0B0A3C 3C018000 */ lui $at, 0x8000 -/* 0E5570 7F0B0A40 16410002 */ bne $s2, $at, .L7F0B0A4C -/* 0E5574 7F0B0A44 00000000 */ nop -/* 0E5578 7F0B0A48 0006000D */ break 6 -.L7F0B0A4C: -/* 0E557C 7F0B0A4C 468084A0 */ cvt.s.w $f18, $f16 -/* 0E5580 7F0B0A50 461E4282 */ mul.s $f10, $f8, $f30 -/* 0E5584 7F0B0A54 00000000 */ nop -/* 0E5588 7F0B0A58 4612E182 */ mul.s $f6, $f28, $f18 -/* 0E558C 7F0B0A5C 46065200 */ add.s $f8, $f10, $f6 -/* 0E5590 7F0B0A60 4604403E */ c.le.s $f8, $f4 -/* 0E5594 7F0B0A64 00000000 */ nop -/* 0E5598 7F0B0A68 45000028 */ bc1f .L7F0B0B0C -/* 0E559C 7F0B0A6C 00000000 */ nop -/* 0E55A0 7F0B0A70 448A8000 */ mtc1 $t2, $f16 -/* 0E55A4 7F0B0A74 44885000 */ mtc1 $t0, $f10 -/* 0E55A8 7F0B0A78 44892000 */ mtc1 $t1, $f4 -/* 0E55AC 7F0B0A7C 468084A0 */ cvt.s.w $f18, $f16 -/* 0E55B0 7F0B0A80 44858000 */ mtc1 $a1, $f16 -/* 0E55B4 7F0B0A84 9602000E */ lhu $v0, 0xe($s0) -/* 0E55B8 7F0B0A88 4406C000 */ mfc1 $a2, $f24 -/* 0E55BC 7F0B0A8C 4407D000 */ mfc1 $a3, $f26 -/* 0E55C0 7F0B0A90 468051A0 */ cvt.s.w $f6, $f10 -/* 0E55C4 7F0B0A94 E7B20010 */ swc1 $f18, 0x10($sp) -/* 0E55C8 7F0B0A98 00027103 */ sra $t6, $v0, 4 -/* 0E55CC 7F0B0A9C 000E782B */ sltu $t7, $zero, $t6 -/* 0E55D0 7F0B0AA0 AFAF0020 */ sw $t7, 0x20($sp) -/* 0E55D4 7F0B0AA4 46802220 */ cvt.s.w $f8, $f4 -/* 0E55D8 7F0B0AA8 E7A60014 */ swc1 $f6, 0x14($sp) -/* 0E55DC 7F0B0AAC 4600A306 */ mov.s $f12, $f20 -/* 0E55E0 7F0B0AB0 4600B386 */ mov.s $f14, $f22 -/* 0E55E4 7F0B0AB4 468084A0 */ cvt.s.w $f18, $f16 -/* 0E55E8 7F0B0AB8 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0E55EC 7F0B0ABC 0FC2C1EF */ jal sub_GAME_7F0B07BC -/* 0E55F0 7F0B0AC0 E7B2001C */ swc1 $f18, 0x1c($sp) -/* 0E55F4 7F0B0AC4 50400012 */ beql $v0, $zero, .L7F0B0B10 -/* 0E55F8 7F0B0AC8 86640006 */ lh $a0, 6($s3) -/* 0E55FC 7F0B0ACC 9603000E */ lhu $v1, 0xe($s0) -/* 0E5600 7F0B0AD0 3C198004 */ lui $t9, %hi(standTileStart) -/* 0E5604 7F0B0AD4 8F390F58 */ lw $t9, %lo(standTileStart)($t9) -/* 0E5608 7F0B0AD8 0003C0C0 */ sll $t8, $v1, 3 -/* 0E560C 7F0B0ADC 26940001 */ addiu $s4, $s4, 1 -/* 0E5610 7F0B0AE0 03191021 */ addu $v0, $t8, $t9 -/* 0E5614 7F0B0AE4 12C20009 */ beq $s6, $v0, .L7F0B0B0C -/* 0E5618 7F0B0AE8 00000000 */ nop -/* 0E561C 7F0B0AEC 12E20007 */ beq $s7, $v0, .L7F0B0B0C -/* 0E5620 7F0B0AF0 00000000 */ nop -/* 0E5624 7F0B0AF4 00035903 */ sra $t3, $v1, 4 -/* 0E5628 7F0B0AF8 11600003 */ beqz $t3, .L7F0B0B08 -/* 0E562C 7F0B0AFC 0220F025 */ move $fp, $s1 -/* 0E5630 7F0B0B00 10000002 */ b .L7F0B0B0C -/* 0E5634 7F0B0B04 0040A825 */ move $s5, $v0 -.L7F0B0B08: -/* 0E5638 7F0B0B08 0000A825 */ move $s5, $zero -.L7F0B0B0C: -/* 0E563C 7F0B0B0C 86640006 */ lh $a0, 6($s3) -.L7F0B0B10: -/* 0E5640 7F0B0B10 02408825 */ move $s1, $s2 -/* 0E5644 7F0B0B14 26100008 */ addiu $s0, $s0, 8 -/* 0E5648 7F0B0B18 00046303 */ sra $t4, $a0, 0xc -/* 0E564C 7F0B0B1C 318D000F */ andi $t5, $t4, 0xf -/* 0E5650 7F0B0B20 024D082A */ slt $at, $s2, $t5 -/* 0E5654 7F0B0B24 1420FFB1 */ bnez $at, .L7F0B09EC -/* 0E5658 7F0B0B28 01A02025 */ move $a0, $t5 -.L7F0B0B2C: -/* 0E565C 7F0B0B2C 02C0B825 */ move $s7, $s6 -/* 0E5660 7F0B0B30 0260B025 */ move $s6, $s3 -/* 0E5664 7F0B0B34 02751026 */ xor $v0, $s3, $s5 -/* 0E5668 7F0B0B38 14400002 */ bnez $v0, .L7F0B0B44 -/* 0E566C 7F0B0B3C 02A09825 */ move $s3, $s5 -/* 0E5670 7F0B0B40 0000A025 */ move $s4, $zero -.L7F0B0B44: -/* 0E5674 7F0B0B44 16800003 */ bnez $s4, .L7F0B0B54 -/* 0E5678 7F0B0B48 8FAE008C */ lw $t6, 0x8c($sp) -/* 0E567C 7F0B0B4C 10000013 */ b .L7F0B0B9C -/* 0E5680 7F0B0B50 24020001 */ li $v0, 1 -.L7F0B0B54: -/* 0E5684 7F0B0B54 29C201F5 */ slti $v0, $t6, 0x1f5 -/* 0E5688 7F0B0B58 38420001 */ xori $v0, $v0, 1 -/* 0E568C 7F0B0B5C 25CF0001 */ addiu $t7, $t6, 1 -/* 0E5690 7F0B0B60 14400005 */ bnez $v0, .L7F0B0B78 -/* 0E5694 7F0B0B64 AFAF008C */ sw $t7, 0x8c($sp) -/* 0E5698 7F0B0B68 12A00003 */ beqz $s5, .L7F0B0B78 -/* 0E569C 7F0B0B6C 8FB800B8 */ lw $t8, 0xb8($sp) -/* 0E56A0 7F0B0B70 16800007 */ bnez $s4, .L7F0B0B90 -/* 0E56A4 7F0B0B74 00008825 */ move $s1, $zero -.L7F0B0B78: -/* 0E56A8 7F0B0B78 3C018008 */ lui $at, %hi(stanSavedColl_tile) -/* 0E56AC 7F0B0B7C AC36B9E4 */ sw $s6, %lo(stanSavedColl_tile)($at) -/* 0E56B0 7F0B0B80 3C018008 */ lui $at, %hi(stanSavedColl_pointI) -/* 0E56B4 7F0B0B84 AC3EB9E8 */ sw $fp, %lo(stanSavedColl_pointI)($at) -/* 0E56B8 7F0B0B88 10000004 */ b .L7F0B0B9C -/* 0E56BC 7F0B0B8C 00001025 */ move $v0, $zero -.L7F0B0B90: -/* 0E56C0 7F0B0B90 AF150000 */ sw $s5, ($t8) -/* 0E56C4 7F0B0B94 1000FF88 */ b .L7F0B09B8 -/* 0E56C8 7F0B0B98 0000A025 */ move $s4, $zero -.L7F0B0B9C: -/* 0E56CC 7F0B0B9C 8FBF0084 */ lw $ra, 0x84($sp) -/* 0E56D0 7F0B0BA0 D7B40030 */ ldc1 $f20, 0x30($sp) -/* 0E56D4 7F0B0BA4 D7B60038 */ ldc1 $f22, 0x38($sp) -/* 0E56D8 7F0B0BA8 D7B80040 */ ldc1 $f24, 0x40($sp) -/* 0E56DC 7F0B0BAC D7BA0048 */ ldc1 $f26, 0x48($sp) -/* 0E56E0 7F0B0BB0 D7BC0050 */ ldc1 $f28, 0x50($sp) -/* 0E56E4 7F0B0BB4 D7BE0058 */ ldc1 $f30, 0x58($sp) -/* 0E56E8 7F0B0BB8 8FB00060 */ lw $s0, 0x60($sp) -/* 0E56EC 7F0B0BBC 8FB10064 */ lw $s1, 0x64($sp) -/* 0E56F0 7F0B0BC0 8FB20068 */ lw $s2, 0x68($sp) -/* 0E56F4 7F0B0BC4 8FB3006C */ lw $s3, 0x6c($sp) -/* 0E56F8 7F0B0BC8 8FB40070 */ lw $s4, 0x70($sp) -/* 0E56FC 7F0B0BCC 8FB50074 */ lw $s5, 0x74($sp) -/* 0E5700 7F0B0BD0 8FB60078 */ lw $s6, 0x78($sp) -/* 0E5704 7F0B0BD4 8FB7007C */ lw $s7, 0x7c($sp) -/* 0E5708 7F0B0BD8 8FBE0080 */ lw $fp, 0x80($sp) -/* 0E570C 7F0B0BDC 03E00008 */ jr $ra -/* 0E5710 7F0B0BE0 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif - -// 'walkTilesBetweenPoints_NoCallback' /** + * Name: walkTilesBetweenPoints_NoCallback * Address 0x7F0B0BE4. */ s32 walkTilesBetweenPoints_NoCallback(StandTile **tileStack, f32 start_x, f32 start_z, f32 dest_x, f32 dest_z) @@ -3082,9 +1436,10 @@ s32 walkTilesBetweenPoints_NoCallback(StandTile **tileStack, f32 start_x, f32 st } - - -// 'walkTilesBetweenPoints_NotingRooms' +/** + * Name: walkTilesBetweenPoints_NotingRooms + * Address 0x7F0B0BE4. +*/ s32 sub_GAME_7F0B0C24(StandTile **tileStack, f32 start_x, f32 start_z, f32 dest_x, f32 dest_z, s32 *roomBuffer, s32 *rtnCountSize, s32 maxBufSize) { struct StandTileWalkCallbackRecord callbackData; @@ -3103,7 +1458,9 @@ s32 sub_GAME_7F0B0C24(StandTile **tileStack, f32 start_x, f32 start_z, f32 dest_ } - +/* +* Address: 0x0x7f0b0c98 +*/ void noteTileRoomIfDifferentToPrev(StandTile *tile, StandTile *unused, struct StandTileWalkCallbackRecord *data) { s32 newRoom; @@ -3122,163 +1479,73 @@ void noteTileRoomIfDifferentToPrev(StandTile *tile, StandTile *unused, struct St - +/* +* Address: 0x7f0b0cec +*/ void noteTileRoomIfDifferentToPrev_2(StandTile *tile, StandTile *unused, struct StandTileWalkCallbackRecord *data) { noteTileRoomIfDifferentToPrev(tile, unused, data); } - - - - -#ifdef NONMATCHING -// Not too close - -s32 sub_GAME_7F0B0D0C(StandTile *tile, f32 start_x, f32 start_z, StandTile **tilePtr, - f32 end_x, f32 end_z, s32 *roomBuf, s32 maxBufSize) +/** + * Builds a list of room IDs between a start position and a destination position. + * Only used for objects on set paths e.g. patrolling guards. + */ +s32 sub_GAME_7F0B0D0C(StandTile *tile, f32 start_x, f32 start_z, StandTile **destTile, f32 dest_x, f32 dest_z, s32 *roomBuffer, s32 maxBufSize) { - s32 roomA; - s32 roomB; - s32 bufCount; - StandTile* tileStack[2]; // unknown size - StandTile* unkTile; + StandTile *savedTile; + s32 count; + savedTile = tile; + count = 0; - bufCount = 0; - tileStack[0] = tile; - - if (*tilePtr != 0x0) { + if (*destTile != NULL) { + u8 roomA; // Source tile's room + u8 roomB; // Destination tile's room roomA = tile->room; - roomB = (*tilePtr)->room; + roomB = (*destTile)->room; - if (roomA == roomB) { - *roomBuf = roomA; + // Fast path: start and destination tiles are in the same room, return a count of 1. + if (roomB == roomA) { + roomBuffer[0] = roomA; return 1; - } + } - // function related to portals - // funny & 0xFFs here which we can't reproduce - if (FUN_7f0b8fd0(roomA & 0xFF, roomB & 0xFF) != 0) { - *roomBuf = (s32)tile->room; - roomBuf[1] = (s32)(*tilePtr)->room; + // Next fastest case: both rooms directly connected by a portal, write two room IDs and return a count of 2. + if (bgRoomsSharePortal(roomA & 0xff, roomB & 0xff)) { + roomBuffer[0] = tile->room; + roomBuffer[1] = (*destTile)->room; return 2; - } - - } - - if (sub_GAME_7F0B0C24(tileStack,start_x,start_z,end_x,end_z, - roomBuf,&bufCount,maxBufSize) == 0 ) - { - bufCount = 0; - } - else { - if (maxBufSize < bufCount) { - bufCount = maxBufSize; } + } - // Not sure what's going on here. - unkTile = *tilePtr; + /** + * Full path check needed. Find the rooms between the points, store them in roomBuffer, and save the number of rooms in count. + * If the path check fails, return 0. + */ + if (!sub_GAME_7F0B0C24(&savedTile, start_x, start_z, dest_x, dest_z, roomBuffer, &count, maxBufSize)) { + return 0; + } - if (unkTile == 0) { - *tilePtr = tileStack[0]; - unkTile = tileStack[0]; - } + if (maxBufSize < count) { + count = maxBufSize; + } - if (tileStack[0] != unkTile) { - bufCount = 0; - #ifdef DEBUG - osSyncPrintf("stan %s(%d) != %s(%d) from=%s\n", GetStanRoomID(tileStack[0]), /*funcForTileNumber(tileStack[0])*/,GetStanRoomID(tile), /*funcForTileNumber(tile)*/,GetStanRoomID(roomBuf)); - #endif - } - } + if (*destTile == NULL) { + *destTile = savedTile; + } - return bufCount; + if (savedTile != *destTile) { + #ifdef DEBUG + osSyncPrintf("stan %s(%d) != %s(%d) from=%s\n", GetStanRoomID(savedTile), + /*funcForTileNumber(savedTile)*/, GetStanRoomID(tile), /*funcForTileNumber(tile)*/, GetStanRoomID(roomBuffer)); + #endif + return 0; + } + + return count; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B0D0C -/* 0E583C 7F0B0D0C 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0E5840 7F0B0D10 AFBF002C */ sw $ra, 0x2c($sp) -/* 0E5844 7F0B0D14 AFB00028 */ sw $s0, 0x28($sp) -/* 0E5848 7F0B0D18 AFA40048 */ sw $a0, 0x48($sp) -/* 0E584C 7F0B0D1C AFA5004C */ sw $a1, 0x4c($sp) -/* 0E5850 7F0B0D20 AFA60050 */ sw $a2, 0x50($sp) -/* 0E5854 7F0B0D24 AFA40044 */ sw $a0, 0x44($sp) -/* 0E5858 7F0B0D28 AFA00040 */ sw $zero, 0x40($sp) -/* 0E585C 7F0B0D2C 8CE20000 */ lw $v0, ($a3) -/* 0E5860 7F0B0D30 00E08025 */ move $s0, $a3 -/* 0E5864 7F0B0D34 50400016 */ beql $v0, $zero, .L7F0B0D90 -/* 0E5868 7F0B0D38 8FA30060 */ lw $v1, 0x60($sp) -/* 0E586C 7F0B0D3C 90860003 */ lbu $a2, 3($a0) -/* 0E5870 7F0B0D40 90470003 */ lbu $a3, 3($v0) -/* 0E5874 7F0B0D44 8FA30060 */ lw $v1, 0x60($sp) -/* 0E5878 7F0B0D48 24020001 */ li $v0, 1 -/* 0E587C 7F0B0D4C 14C70003 */ bne $a2, $a3, .L7F0B0D5C -/* 0E5880 7F0B0D50 30C400FF */ andi $a0, $a2, 0xff -/* 0E5884 7F0B0D54 1000002E */ b .L7F0B0E10 -/* 0E5888 7F0B0D58 AC660000 */ sw $a2, ($v1) -.L7F0B0D5C: -/* 0E588C 7F0B0D5C 0FC2E3F4 */ jal sub_GAME_7F0B8FD0 -/* 0E5890 7F0B0D60 30E500FF */ andi $a1, $a3, 0xff -/* 0E5894 7F0B0D64 10400009 */ beqz $v0, .L7F0B0D8C -/* 0E5898 7F0B0D68 8FAF0048 */ lw $t7, 0x48($sp) -/* 0E589C 7F0B0D6C 8FA30060 */ lw $v1, 0x60($sp) -/* 0E58A0 7F0B0D70 91F80003 */ lbu $t8, 3($t7) -/* 0E58A4 7F0B0D74 24020002 */ li $v0, 2 -/* 0E58A8 7F0B0D78 AC780000 */ sw $t8, ($v1) -/* 0E58AC 7F0B0D7C 8E190000 */ lw $t9, ($s0) -/* 0E58B0 7F0B0D80 93280003 */ lbu $t0, 3($t9) -/* 0E58B4 7F0B0D84 10000022 */ b .L7F0B0E10 -/* 0E58B8 7F0B0D88 AC680004 */ sw $t0, 4($v1) -.L7F0B0D8C: -/* 0E58BC 7F0B0D8C 8FA30060 */ lw $v1, 0x60($sp) -.L7F0B0D90: -/* 0E58C0 7F0B0D90 C7A4005C */ lwc1 $f4, 0x5c($sp) -/* 0E58C4 7F0B0D94 8FAA0064 */ lw $t2, 0x64($sp) -/* 0E58C8 7F0B0D98 27A90040 */ addiu $t1, $sp, 0x40 -/* 0E58CC 7F0B0D9C AFA90018 */ sw $t1, 0x18($sp) -/* 0E58D0 7F0B0DA0 27A40044 */ addiu $a0, $sp, 0x44 -/* 0E58D4 7F0B0DA4 8FA5004C */ lw $a1, 0x4c($sp) -/* 0E58D8 7F0B0DA8 8FA60050 */ lw $a2, 0x50($sp) -/* 0E58DC 7F0B0DAC 8FA70058 */ lw $a3, 0x58($sp) -/* 0E58E0 7F0B0DB0 AFA30014 */ sw $v1, 0x14($sp) -/* 0E58E4 7F0B0DB4 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0E58E8 7F0B0DB8 0FC2C309 */ jal sub_GAME_7F0B0C24 -/* 0E58EC 7F0B0DBC AFAA001C */ sw $t2, 0x1c($sp) -/* 0E58F0 7F0B0DC0 14400003 */ bnez $v0, .L7F0B0DD0 -/* 0E58F4 7F0B0DC4 8FA30064 */ lw $v1, 0x64($sp) -/* 0E58F8 7F0B0DC8 10000011 */ b .L7F0B0E10 -/* 0E58FC 7F0B0DCC 00001025 */ move $v0, $zero -.L7F0B0DD0: -/* 0E5900 7F0B0DD0 8FAB0040 */ lw $t3, 0x40($sp) -/* 0E5904 7F0B0DD4 006B082A */ slt $at, $v1, $t3 -/* 0E5908 7F0B0DD8 50200003 */ beql $at, $zero, .L7F0B0DE8 -/* 0E590C 7F0B0DDC 8E020000 */ lw $v0, ($s0) -/* 0E5910 7F0B0DE0 AFA30040 */ sw $v1, 0x40($sp) -/* 0E5914 7F0B0DE4 8E020000 */ lw $v0, ($s0) -.L7F0B0DE8: -/* 0E5918 7F0B0DE8 54400004 */ bnezl $v0, .L7F0B0DFC -/* 0E591C 7F0B0DEC 8FAD0044 */ lw $t5, 0x44($sp) -/* 0E5920 7F0B0DF0 8FA20044 */ lw $v0, 0x44($sp) -/* 0E5924 7F0B0DF4 AE020000 */ sw $v0, ($s0) -/* 0E5928 7F0B0DF8 8FAD0044 */ lw $t5, 0x44($sp) -.L7F0B0DFC: -/* 0E592C 7F0B0DFC 51A20004 */ beql $t5, $v0, .L7F0B0E10 -/* 0E5930 7F0B0E00 8FA20040 */ lw $v0, 0x40($sp) -/* 0E5934 7F0B0E04 10000002 */ b .L7F0B0E10 -/* 0E5938 7F0B0E08 00001025 */ move $v0, $zero -/* 0E593C 7F0B0E0C 8FA20040 */ lw $v0, 0x40($sp) -.L7F0B0E10: -/* 0E5940 7F0B0E10 8FBF002C */ lw $ra, 0x2c($sp) -/* 0E5944 7F0B0E14 8FB00028 */ lw $s0, 0x28($sp) -/* 0E5948 7F0B0E18 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0E594C 7F0B0E1C 03E00008 */ jr $ra -/* 0E5950 7F0B0E20 00000000 */ nop -) -#endif /** @@ -3378,7 +1645,7 @@ s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f3 for (spB8 = ptr_list_object_lookup_indices; *spB8 >= 0; spB8++) { - prop = &pos_data_entry[*spB8]; + prop = &g_Props[*spB8]; if (propIsOfCdType(prop, cdtypes) != 0) { @@ -3390,7 +1657,7 @@ s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f3 { next = (i + 1) % numvertices0; - if (sub_GAME_7F0B0688(p_x, p_z, dest_x, dest_z, polygon->points[i].f[0], polygon->points[i].f[1], polygon->points[next].f[0], polygon->points[next].f[1]) != 0) + if (doSegmentsIntersect(p_x, p_z, dest_x, dest_z, polygon->points[i].f[0], polygon->points[i].f[1], polygon->points[next].f[0], polygon->points[next].f[1]) != 0) { sp134.f[0] = polygon->points[i].f[0]; sp134.f[1] = polygon->points[i].f[1]; @@ -3486,219 +1753,130 @@ s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f3 } +PropRecord *sub_GAME_7F0B1410(StandTile *t, f32 start_x, f32 start_z, f32 end_x, f32 end_z, s32 cdtypes) +{ + f32 frac; + PropRecord *prop; + coord2d lineStart; + coord2d lineEnd; + struct coord2d *tmp; + s32 pad; + coord2d edgeStart; + coord2d edgeEnd; + s32 i; + StandTile *tile; + s32 roomCount; + s32 roomBuffer[21]; + s16 *propIndexPtr; + struct rect4f *polygon; + s32 numEdges; + PropRecord *bestProp; + s32 next; + f32 bestFrac; + bestProp = NULL; + bestFrac = 1.0f; + tile = t; + roomCount = 0; -#ifdef NONMATCHING -void sub_GAME_7F0B1410(void) { - //osSyncPrintf("stanLineDoor: %d rooms is more than %d\n"); + sub_GAME_7F0B0C24(&tile, start_x, start_z, end_x, end_z, roomBuffer, &roomCount, 20); + + if (roomCount >= 21) + { + // The comment below was in the unmatched function. I have left it where I think it was most likely meant to go. + //osSyncPrintf("stanLineDoor: %d rooms is more than %d\n"); + roomCount = 20; + } + + lineStart.f[0] = start_x; + lineStart.f[1] = start_z; + lineEnd.f[0] = end_x; + lineEnd.f[1] = end_z; + + if (cdtypes != 0) + { + roomBuffer[roomCount] = -1; + roomGetProps(roomBuffer); + + propIndexPtr = ptr_list_object_lookup_indices; + + // Fake but needed for matching. + if (polygon); + + if (*propIndexPtr >= 0) + { + do + { + prop = &g_Props[*propIndexPtr]; + + if (propIsOfCdType(prop, cdtypes)) + { + chraiGetCollisionBoundsWithoutY(prop, &polygon, &numEdges); + + if (numEdges > 0) + { + i = 0; + + while (i < numEdges) + { + next = (i + 1) % numEdges; + + if (doSegmentsIntersect(start_x, start_z, end_x, end_z, polygon->points[i].f[0], polygon->points[i].f[1], polygon->points[next].f[0], polygon->points[next].f[1])) + { + edgeStart.f[0] = polygon->points[i].f[0]; + tmp = &polygon->points[i]; + edgeStart.f[1] = (*tmp).f[1]; + + edgeEnd.f[0] = polygon->points[next].f[0]; + edgeEnd.f[1] = polygon->points[next].f[1]; + + frac = calculateSegmentIntersectionFraction(&lineStart, &lineEnd, &edgeStart, &edgeEnd); + + if (frac < bestFrac) + { + bestFrac = frac; + bestProp = prop; + } + } + + i++; + } + } + } + + propIndexPtr++; + } + while (*propIndexPtr >= 0); + } + } + + return bestProp; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B1410 -/* 0E5F40 7F0B1410 27BDFED8 */ addiu $sp, $sp, -0x128 -/* 0E5F44 7F0B1414 F7BA0040 */ sdc1 $f26, 0x40($sp) -/* 0E5F48 7F0B1418 F7B80038 */ sdc1 $f24, 0x38($sp) -/* 0E5F4C 7F0B141C F7B60030 */ sdc1 $f22, 0x30($sp) -/* 0E5F50 7F0B1420 4485B000 */ mtc1 $a1, $f22 -/* 0E5F54 7F0B1424 4486C000 */ mtc1 $a2, $f24 -/* 0E5F58 7F0B1428 4487D000 */ mtc1 $a3, $f26 -/* 0E5F5C 7F0B142C F7BC0048 */ sdc1 $f28, 0x48($sp) -/* 0E5F60 7F0B1430 C7BC0138 */ lwc1 $f28, 0x138($sp) -/* 0E5F64 7F0B1434 AFB10054 */ sw $s1, 0x54($sp) -/* 0E5F68 7F0B1438 F7B40028 */ sdc1 $f20, 0x28($sp) -/* 0E5F6C 7F0B143C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0E5F70 7F0B1440 27B10098 */ addiu $s1, $sp, 0x98 -/* 0E5F74 7F0B1444 AFBF0074 */ sw $ra, 0x74($sp) -/* 0E5F78 7F0B1448 AFBE0070 */ sw $fp, 0x70($sp) -/* 0E5F7C 7F0B144C 4481A000 */ mtc1 $at, $f20 -/* 0E5F80 7F0B1450 AFA400F0 */ sw $a0, 0xf0($sp) -/* 0E5F84 7F0B1454 27AE00EC */ addiu $t6, $sp, 0xec -/* 0E5F88 7F0B1458 240F0014 */ li $t7, 20 -/* 0E5F8C 7F0B145C 4405B000 */ mfc1 $a1, $f22 -/* 0E5F90 7F0B1460 4406C000 */ mfc1 $a2, $f24 -/* 0E5F94 7F0B1464 4407D000 */ mfc1 $a3, $f26 -/* 0E5F98 7F0B1468 AFB7006C */ sw $s7, 0x6c($sp) -/* 0E5F9C 7F0B146C AFB60068 */ sw $s6, 0x68($sp) -/* 0E5FA0 7F0B1470 AFB50064 */ sw $s5, 0x64($sp) -/* 0E5FA4 7F0B1474 AFB40060 */ sw $s4, 0x60($sp) -/* 0E5FA8 7F0B1478 AFB3005C */ sw $s3, 0x5c($sp) -/* 0E5FAC 7F0B147C AFB20058 */ sw $s2, 0x58($sp) -/* 0E5FB0 7F0B1480 AFB00050 */ sw $s0, 0x50($sp) -/* 0E5FB4 7F0B1484 0000F025 */ move $fp, $zero -/* 0E5FB8 7F0B1488 AFAF001C */ sw $t7, 0x1c($sp) -/* 0E5FBC 7F0B148C AFAE0018 */ sw $t6, 0x18($sp) -/* 0E5FC0 7F0B1490 27A400F0 */ addiu $a0, $sp, 0xf0 -/* 0E5FC4 7F0B1494 AFB10014 */ sw $s1, 0x14($sp) -/* 0E5FC8 7F0B1498 AFA000EC */ sw $zero, 0xec($sp) -/* 0E5FCC 7F0B149C 0FC2C309 */ jal sub_GAME_7F0B0C24 -/* 0E5FD0 7F0B14A0 E7BC0010 */ swc1 $f28, 0x10($sp) -/* 0E5FD4 7F0B14A4 8FA300EC */ lw $v1, 0xec($sp) -/* 0E5FD8 7F0B14A8 2419FFFF */ li $t9, -1 -/* 0E5FDC 7F0B14AC 02202025 */ move $a0, $s1 -/* 0E5FE0 7F0B14B0 28610015 */ slti $at, $v1, 0x15 -/* 0E5FE4 7F0B14B4 54200003 */ bnezl $at, .L7F0B14C4 -/* 0E5FE8 7F0B14B8 8FB8013C */ lw $t8, 0x13c($sp) -/* 0E5FEC 7F0B14BC 24030014 */ li $v1, 20 -/* 0E5FF0 7F0B14C0 8FB8013C */ lw $t8, 0x13c($sp) -.L7F0B14C4: -/* 0E5FF4 7F0B14C4 E7B60118 */ swc1 $f22, 0x118($sp) -/* 0E5FF8 7F0B14C8 E7B8011C */ swc1 $f24, 0x11c($sp) -/* 0E5FFC 7F0B14CC E7BA0110 */ swc1 $f26, 0x110($sp) -/* 0E6000 7F0B14D0 1300006A */ beqz $t8, .L7F0B167C -/* 0E6004 7F0B14D4 E7BC0114 */ swc1 $f28, 0x114($sp) -/* 0E6008 7F0B14D8 00034080 */ sll $t0, $v1, 2 -/* 0E600C 7F0B14DC 02284821 */ addu $t1, $s1, $t0 -/* 0E6010 7F0B14E0 AD390000 */ sw $t9, ($t1) -/* 0E6014 7F0B14E4 0FC0F8FF */ jal roomGetProps -/* 0E6018 7F0B14E8 AFA300EC */ sw $v1, 0xec($sp) -/* 0E601C 7F0B14EC 3C038007 */ lui $v1, %hi(ptr_list_object_lookup_indices) -/* 0E6020 7F0B14F0 8C639C30 */ lw $v1, %lo(ptr_list_object_lookup_indices)($v1) -/* 0E6024 7F0B14F4 27B700F8 */ addiu $s7, $sp, 0xf8 -/* 0E6028 7F0B14F8 27B60100 */ addiu $s6, $sp, 0x100 -/* 0E602C 7F0B14FC 84620000 */ lh $v0, ($v1) -/* 0E6030 7F0B1500 27B50110 */ addiu $s5, $sp, 0x110 -/* 0E6034 7F0B1504 27B40118 */ addiu $s4, $sp, 0x118 -/* 0E6038 7F0B1508 0442005D */ bltzl $v0, .L7F0B1680 -/* 0E603C 7F0B150C 8FBF0074 */ lw $ra, 0x74($sp) -/* 0E6040 7F0B1510 AFA30094 */ sw $v1, 0x94($sp) -/* 0E6044 7F0B1514 00025080 */ sll $t2, $v0, 2 -.L7F0B1518: -/* 0E6048 7F0B1518 01425023 */ subu $t2, $t2, $v0 -/* 0E604C 7F0B151C 000A5080 */ sll $t2, $t2, 2 -/* 0E6050 7F0B1520 01425021 */ addu $t2, $t2, $v0 -/* 0E6054 7F0B1524 3C0B8007 */ lui $t3, %hi(pos_data_entry) -/* 0E6058 7F0B1528 256B9C38 */ addiu $t3, %lo(pos_data_entry) # addiu $t3, $t3, -0x63c8 -/* 0E605C 7F0B152C 000A5080 */ sll $t2, $t2, 2 -/* 0E6060 7F0B1530 014B9821 */ addu $s3, $t2, $t3 -/* 0E6064 7F0B1534 02602025 */ move $a0, $s3 -/* 0E6068 7F0B1538 0FC0F694 */ jal propIsOfCdType -/* 0E606C 7F0B153C 8FA5013C */ lw $a1, 0x13c($sp) -/* 0E6070 7F0B1540 10400048 */ beqz $v0, .L7F0B1664 -/* 0E6074 7F0B1544 02602025 */ move $a0, $s3 -/* 0E6078 7F0B1548 27A50090 */ addiu $a1, $sp, 0x90 -/* 0E607C 7F0B154C 0FC0F32C */ jal chraiGetCollisionBoundsWithoutY -/* 0E6080 7F0B1550 27A6008C */ addiu $a2, $sp, 0x8c -/* 0E6084 7F0B1554 8FA2008C */ lw $v0, 0x8c($sp) -/* 0E6088 7F0B1558 58400043 */ blezl $v0, .L7F0B1668 -/* 0E608C 7F0B155C 8FA30094 */ lw $v1, 0x94($sp) -/* 0E6090 7F0B1560 18400040 */ blez $v0, .L7F0B1664 -/* 0E6094 7F0B1564 00002825 */ move $a1, $zero -/* 0E6098 7F0B1568 00008025 */ move $s0, $zero -/* 0E609C 7F0B156C 8FAC008C */ lw $t4, 0x8c($sp) -.L7F0B1570: -/* 0E60A0 7F0B1570 24B20001 */ addiu $s2, $a1, 1 -/* 0E60A4 7F0B1574 8FAD0090 */ lw $t5, 0x90($sp) -/* 0E60A8 7F0B1578 024C001A */ div $zero, $s2, $t4 -/* 0E60AC 7F0B157C 01B01821 */ addu $v1, $t5, $s0 -/* 0E60B0 7F0B1580 C4640000 */ lwc1 $f4, ($v1) -/* 0E60B4 7F0B1584 00001010 */ mfhi $v0 -/* 0E60B8 7F0B1588 000270C0 */ sll $t6, $v0, 3 -/* 0E60BC 7F0B158C E7A40010 */ swc1 $f4, 0x10($sp) -/* 0E60C0 7F0B1590 C4660004 */ lwc1 $f6, 4($v1) -/* 0E60C4 7F0B1594 01AE2021 */ addu $a0, $t5, $t6 -/* 0E60C8 7F0B1598 4406D000 */ mfc1 $a2, $f26 -/* 0E60CC 7F0B159C E7A60014 */ swc1 $f6, 0x14($sp) -/* 0E60D0 7F0B15A0 C4880000 */ lwc1 $f8, ($a0) -/* 0E60D4 7F0B15A4 4407E000 */ mfc1 $a3, $f28 -/* 0E60D8 7F0B15A8 15800002 */ bnez $t4, .L7F0B15B4 -/* 0E60DC 7F0B15AC 00000000 */ nop -/* 0E60E0 7F0B15B0 0007000D */ break 7 -.L7F0B15B4: -/* 0E60E4 7F0B15B4 2401FFFF */ li $at, -1 -/* 0E60E8 7F0B15B8 15810004 */ bne $t4, $at, .L7F0B15CC -/* 0E60EC 7F0B15BC 3C018000 */ lui $at, 0x8000 -/* 0E60F0 7F0B15C0 16410002 */ bne $s2, $at, .L7F0B15CC -/* 0E60F4 7F0B15C4 00000000 */ nop -/* 0E60F8 7F0B15C8 0006000D */ break 6 -.L7F0B15CC: -/* 0E60FC 7F0B15CC E7A80018 */ swc1 $f8, 0x18($sp) -/* 0E6100 7F0B15D0 C48A0004 */ lwc1 $f10, 4($a0) -/* 0E6104 7F0B15D4 00408825 */ move $s1, $v0 -/* 0E6108 7F0B15D8 4600B306 */ mov.s $f12, $f22 -/* 0E610C 7F0B15DC 4600C386 */ mov.s $f14, $f24 -/* 0E6110 7F0B15E0 0FC2C1A2 */ jal sub_GAME_7F0B0688 -/* 0E6114 7F0B15E4 E7AA001C */ swc1 $f10, 0x1c($sp) -/* 0E6118 7F0B15E8 50400019 */ beql $v0, $zero, .L7F0B1650 -/* 0E611C 7F0B15EC 8FA2008C */ lw $v0, 0x8c($sp) -/* 0E6120 7F0B15F0 8FAF0090 */ lw $t7, 0x90($sp) -/* 0E6124 7F0B15F4 0011C0C0 */ sll $t8, $s1, 3 -/* 0E6128 7F0B15F8 02802025 */ move $a0, $s4 -/* 0E612C 7F0B15FC 01F01821 */ addu $v1, $t7, $s0 -/* 0E6130 7F0B1600 C4700000 */ lwc1 $f16, ($v1) -/* 0E6134 7F0B1604 01F81021 */ addu $v0, $t7, $t8 -/* 0E6138 7F0B1608 02A02825 */ move $a1, $s5 -/* 0E613C 7F0B160C E7B00100 */ swc1 $f16, 0x100($sp) -/* 0E6140 7F0B1610 C4720004 */ lwc1 $f18, 4($v1) -/* 0E6144 7F0B1614 02C03025 */ move $a2, $s6 -/* 0E6148 7F0B1618 02E03825 */ move $a3, $s7 -/* 0E614C 7F0B161C E7B20104 */ swc1 $f18, 0x104($sp) -/* 0E6150 7F0B1620 C4440000 */ lwc1 $f4, ($v0) -/* 0E6154 7F0B1624 E7A400F8 */ swc1 $f4, 0xf8($sp) -/* 0E6158 7F0B1628 C4460004 */ lwc1 $f6, 4($v0) -/* 0E615C 7F0B162C 0FC2CC80 */ jal calculateSegmentIntersectionFraction -/* 0E6160 7F0B1630 E7A600FC */ swc1 $f6, 0xfc($sp) -/* 0E6164 7F0B1634 4614003C */ c.lt.s $f0, $f20 -/* 0E6168 7F0B1638 00000000 */ nop -/* 0E616C 7F0B163C 45020004 */ bc1fl .L7F0B1650 -/* 0E6170 7F0B1640 8FA2008C */ lw $v0, 0x8c($sp) -/* 0E6174 7F0B1644 46000506 */ mov.s $f20, $f0 -/* 0E6178 7F0B1648 0260F025 */ move $fp, $s3 -/* 0E617C 7F0B164C 8FA2008C */ lw $v0, 0x8c($sp) -.L7F0B1650: -/* 0E6180 7F0B1650 02402825 */ move $a1, $s2 -/* 0E6184 7F0B1654 26100008 */ addiu $s0, $s0, 8 -/* 0E6188 7F0B1658 0242082A */ slt $at, $s2, $v0 -/* 0E618C 7F0B165C 5420FFC4 */ bnezl $at, .L7F0B1570 -/* 0E6190 7F0B1660 8FAC008C */ lw $t4, 0x8c($sp) -.L7F0B1664: -/* 0E6194 7F0B1664 8FA30094 */ lw $v1, 0x94($sp) -.L7F0B1668: -/* 0E6198 7F0B1668 84620002 */ lh $v0, 2($v1) -/* 0E619C 7F0B166C 24630002 */ addiu $v1, $v1, 2 -/* 0E61A0 7F0B1670 AFA30094 */ sw $v1, 0x94($sp) -/* 0E61A4 7F0B1674 0443FFA8 */ bgezl $v0, .L7F0B1518 -/* 0E61A8 7F0B1678 00025080 */ sll $t2, $v0, 2 -.L7F0B167C: -/* 0E61AC 7F0B167C 8FBF0074 */ lw $ra, 0x74($sp) -.L7F0B1680: -/* 0E61B0 7F0B1680 03C01025 */ move $v0, $fp -/* 0E61B4 7F0B1684 8FBE0070 */ lw $fp, 0x70($sp) -/* 0E61B8 7F0B1688 D7B40028 */ ldc1 $f20, 0x28($sp) -/* 0E61BC 7F0B168C D7B60030 */ ldc1 $f22, 0x30($sp) -/* 0E61C0 7F0B1690 D7B80038 */ ldc1 $f24, 0x38($sp) -/* 0E61C4 7F0B1694 D7BA0040 */ ldc1 $f26, 0x40($sp) -/* 0E61C8 7F0B1698 D7BC0048 */ ldc1 $f28, 0x48($sp) -/* 0E61CC 7F0B169C 8FB00050 */ lw $s0, 0x50($sp) -/* 0E61D0 7F0B16A0 8FB10054 */ lw $s1, 0x54($sp) -/* 0E61D4 7F0B16A4 8FB20058 */ lw $s2, 0x58($sp) -/* 0E61D8 7F0B16A8 8FB3005C */ lw $s3, 0x5c($sp) -/* 0E61DC 7F0B16AC 8FB40060 */ lw $s4, 0x60($sp) -/* 0E61E0 7F0B16B0 8FB50064 */ lw $s5, 0x64($sp) -/* 0E61E4 7F0B16B4 8FB60068 */ lw $s6, 0x68($sp) -/* 0E61E8 7F0B16B8 8FB7006C */ lw $s7, 0x6c($sp) -/* 0E61EC 7F0B16BC 03E00008 */ jr $ra -/* 0E61F0 7F0B16C0 27BD0128 */ addiu $sp, $sp, 0x128 -) -#endif -f32 sub_GAME_7F0B16C4(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3) +/** + * Address: 7F0B16C4 + * + * Computes the signed perpendicular distance from point P to the infinite + * line that goes through point A and point B. + * The sign indicates which side of the line the point is on. + */ +f32 stanGetSignedPointLineDistance(f32 a_x, f32 a_z, f32 b_x, f32 b_z, f32 p_x, f32 p_z) { u32 stack[8]; f32 result; //d - result = sqrtf((x2 - x1) * (x2 - x1) + (z2 - z1) * (z2 - z1)); + result = sqrtf((b_x - a_x) * (b_x - a_x) + (b_z - a_z) * (b_z - a_z)); if (result == 0.0f) { - return sqrtf((x3 - x2) * (x3 - x2) + (z3 - z2) * (z3 - z2)); + return sqrtf((p_x - b_x) * (p_x - b_x) + (p_z - b_z) * (p_z - b_z)); } #ifdef DEBUG assert(d>0.0F); #endif - return ((z2 - z1) * (x3 - x1) + -(x2 - x1) * (z3 - z1)) / result; + return ((b_z - a_z) * (p_x - a_x) + -(b_x - a_x) * (p_z - a_z)) / result; } @@ -3710,32 +1888,32 @@ f32 distBetweenPoints2d(f32 o_x,f32 o_z,f32 p_x,f32 p_z) } - - - -bool sub_GAME_7F0B17E4(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3) +/** + * Address: 7F0B17E4 + * + * Tests whether a point P's perpendicular projection onto the infinite line + * going through points A and B falls inside the finite edge segment. + */ +bool stanPointProjectsOntoEdge(f32 a_x, f32 a_z, f32 b_x, f32 b_z, f32 p_x, f32 p_z) { f32 f0; f32 f2; f32 f16; f32 f18; - x3 -= x1; - z3 -= z1; + p_x -= a_x; + p_z -= a_z; - f0 = x2 - x1; - f2 = z2 - z1; + f0 = b_x - a_x; + f2 = b_z - a_z; - f16 = x3 * f0 + z3 * f2; + f16 = p_x * f0 + p_z * f2; f18 = f0 * f0 + f2 * f2; return (f18 < f16 && f16 < 0) || (f16 > 0 && f16 < f18); } - - - /** * Can change global variables * - D_800413BC @@ -3807,7 +1985,7 @@ s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 cdtypes, for (sp100 = ptr_list_object_lookup_indices; *sp100 >= 0; sp100++) { - prop = &pos_data_entry[*sp100]; + prop = &g_Props[*sp100]; if (propIsOfCdType(prop, cdtypes) != 0) { @@ -3821,7 +1999,7 @@ s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 cdtypes, { next = (i + 1) % numvertices0; - var_f20 = sub_GAME_7F0B16C4(polygon->points[i].f[0], polygon->points[i].f[1], polygon->points[next].f[0], polygon->points[next].f[1], arg1, arg2); + var_f20 = stanGetSignedPointLineDistance(polygon->points[i].f[0], polygon->points[i].f[1], polygon->points[next].f[0], polygon->points[next].f[1], arg1, arg2); if (var_f20 < 0.0f) { @@ -3837,7 +2015,7 @@ s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 cdtypes, && ( (temp_f0_2 < arg3) || (temp_f0_3 < arg3) - || (sub_GAME_7F0B17E4(polygon->points[i].f[0], polygon->points[i].f[1], polygon->points[next].f[0], polygon->points[next].f[1], arg1, arg2) != 0))) + || (stanPointProjectsOntoEdge(polygon->points[i].f[0], polygon->points[i].f[1], polygon->points[next].f[0], polygon->points[next].f[1], arg1, arg2) != 0))) { D_800413BC = 1; var_f24 = var_f20; @@ -3875,7 +2053,7 @@ s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 cdtypes, //stanResetHits -void sub_GAME_7F0B1CC4(void) { +void stanResetHits(void) { stanSavedColl_tile = 0; stanSavedColl_pointI = 0; D_800413BC = 0; @@ -3899,326 +2077,151 @@ s32 sub_GAME_7F0B1CEC(void) } -// sig for caller matches -void getTileEdgePoints(StandTile *tile, s32 pointI, coord3d *currPntRtn, coord3d *nextPointRtn); - -#ifdef NONMATCHING -// Not debugged at all - can't be far wrong though. void getTileEdgePoints(StandTile *tile, s32 pointI, coord3d *currPntRtn, coord3d *nextPointRtn) { - StandTilePoint *tilePntA; - StandTilePoint *tilePntB; - s32 pointCount; + f32 scale; - tilePntA = &tile->points[pointI]; + scale = inv_level_scale; - currPntRtn->x = (f32)tilePntA->x * inv_level_scale; - currPntRtn->y = (f32)tilePntA->y * inv_level_scale; - currPntRtn->z = (f32)tilePntA->z * inv_level_scale; + currPntRtn->x = tile->points[pointI].x * scale; + currPntRtn->y = tile->points[pointI].y * scale; + currPntRtn->z = tile->points[pointI].z * scale; - pointCount = STAN_POINT_COUNT(tile); - tilePntB = &tile->points[(pointI + 1) % pointCount]; - - - nextPointRtn->x = (f32)tilePntB->x * inv_level_scale; - nextPointRtn->y = (f32)tilePntB->y * inv_level_scale; - nextPointRtn->z = (f32)tilePntB->z * inv_level_scale; + /** + * This line could potentially become: + * pointI = (pointI + 1) % STAN_POINT_COUNT(tile); + * + * If STAN_POINT_COUNT were redefined as: + * #define STAN_POINT_COUNT(tile) (((tile)->tail.half >> 12) & 0xf) + * Something to consider? + */ + pointI = (pointI + 1) % ((tile->tail.half >> 12) & 0xf); + nextPointRtn->x = tile->points[pointI].x * scale; + nextPointRtn->y = tile->points[pointI].y * scale; + nextPointRtn->z = tile->points[pointI].z * scale; } -#else -GLOBAL_ASM( -.text -glabel getTileEdgePoints -/* 0E6828 7F0B1CF8 000570C0 */ sll $t6, $a1, 3 -/* 0E682C 7F0B1CFC 008E1021 */ addu $v0, $a0, $t6 -/* 0E6830 7F0B1D00 844F0008 */ lh $t7, 8($v0) -/* 0E6834 7F0B1D04 3C018004 */ lui $at, %hi(inv_level_scale) -/* 0E6838 7F0B1D08 C4200F48 */ lwc1 $f0, %lo(inv_level_scale)($at) -/* 0E683C 7F0B1D0C 448F2000 */ mtc1 $t7, $f4 -/* 0E6840 7F0B1D10 24A80001 */ addiu $t0, $a1, 1 -/* 0E6844 7F0B1D14 468021A0 */ cvt.s.w $f6, $f4 -/* 0E6848 7F0B1D18 46003202 */ mul.s $f8, $f6, $f0 -/* 0E684C 7F0B1D1C E4C80000 */ swc1 $f8, ($a2) -/* 0E6850 7F0B1D20 8458000A */ lh $t8, 0xa($v0) -/* 0E6854 7F0B1D24 44985000 */ mtc1 $t8, $f10 -/* 0E6858 7F0B1D28 00000000 */ nop -/* 0E685C 7F0B1D2C 46805420 */ cvt.s.w $f16, $f10 -/* 0E6860 7F0B1D30 46008482 */ mul.s $f18, $f16, $f0 -/* 0E6864 7F0B1D34 E4D20004 */ swc1 $f18, 4($a2) -/* 0E6868 7F0B1D38 8459000C */ lh $t9, 0xc($v0) -/* 0E686C 7F0B1D3C 44992000 */ mtc1 $t9, $f4 -/* 0E6870 7F0B1D40 00000000 */ nop -/* 0E6874 7F0B1D44 468021A0 */ cvt.s.w $f6, $f4 -/* 0E6878 7F0B1D48 46003202 */ mul.s $f8, $f6, $f0 -/* 0E687C 7F0B1D4C E4C80008 */ swc1 $f8, 8($a2) -/* 0E6880 7F0B1D50 84890006 */ lh $t1, 6($a0) -/* 0E6884 7F0B1D54 00095303 */ sra $t2, $t1, 0xc -/* 0E6888 7F0B1D58 314B000F */ andi $t3, $t2, 0xf -/* 0E688C 7F0B1D5C 010B001A */ div $zero, $t0, $t3 -/* 0E6890 7F0B1D60 00002810 */ mfhi $a1 -/* 0E6894 7F0B1D64 000560C0 */ sll $t4, $a1, 3 -/* 0E6898 7F0B1D68 008C1021 */ addu $v0, $a0, $t4 -/* 0E689C 7F0B1D6C 844D0008 */ lh $t5, 8($v0) -/* 0E68A0 7F0B1D70 15600002 */ bnez $t3, .L7F0B1D7C -/* 0E68A4 7F0B1D74 00000000 */ nop -/* 0E68A8 7F0B1D78 0007000D */ break 7 -.L7F0B1D7C: -/* 0E68AC 7F0B1D7C 2401FFFF */ li $at, -1 -/* 0E68B0 7F0B1D80 15610004 */ bne $t3, $at, .L7F0B1D94 -/* 0E68B4 7F0B1D84 3C018000 */ lui $at, 0x8000 -/* 0E68B8 7F0B1D88 15010002 */ bne $t0, $at, .L7F0B1D94 -/* 0E68BC 7F0B1D8C 00000000 */ nop -/* 0E68C0 7F0B1D90 0006000D */ break 6 -.L7F0B1D94: -/* 0E68C4 7F0B1D94 448D5000 */ mtc1 $t5, $f10 -/* 0E68C8 7F0B1D98 00000000 */ nop -/* 0E68CC 7F0B1D9C 46805420 */ cvt.s.w $f16, $f10 -/* 0E68D0 7F0B1DA0 46008482 */ mul.s $f18, $f16, $f0 -/* 0E68D4 7F0B1DA4 E4F20000 */ swc1 $f18, ($a3) -/* 0E68D8 7F0B1DA8 844E000A */ lh $t6, 0xa($v0) -/* 0E68DC 7F0B1DAC 448E2000 */ mtc1 $t6, $f4 -/* 0E68E0 7F0B1DB0 00000000 */ nop -/* 0E68E4 7F0B1DB4 468021A0 */ cvt.s.w $f6, $f4 -/* 0E68E8 7F0B1DB8 46003202 */ mul.s $f8, $f6, $f0 -/* 0E68EC 7F0B1DBC E4E80004 */ swc1 $f8, 4($a3) -/* 0E68F0 7F0B1DC0 844F000C */ lh $t7, 0xc($v0) -/* 0E68F4 7F0B1DC4 448F5000 */ mtc1 $t7, $f10 -/* 0E68F8 7F0B1DC8 00000000 */ nop -/* 0E68FC 7F0B1DCC 46805420 */ cvt.s.w $f16, $f10 -/* 0E6900 7F0B1DD0 46008482 */ mul.s $f18, $f16, $f0 -/* 0E6904 7F0B1DD4 03E00008 */ jr $ra -/* 0E6908 7F0B1DD8 E4F20008 */ swc1 $f18, 8($a3) -) -#endif - -#ifdef NONMATCHING -s32 sub_GAME_7F0B1DDC(void) +/** + * Traverses linked stan tiles that intersect a circle at the given X/Z + * position. The callbacks can observe visited tiles, reject linked edges, or + * allow traversal to continue after encountering a blocking edge. + * + * @return STAN_COLLISION_FOUND when a blocking edge is found, + * STAN_COLLISION_TRAVERSAL_LIMIT when the tile stack limit is reached, or + * STAN_COLLISION_NONE when traversal completes without a collision. + */ +StanCollisionResult sub_GAME_7F0B1DDC(StandTile **startTile, f32 x, f32 z, f32 radius, standTileLocusCallback_A_t callbackA, standTileLocusCallback_B_t callbackB, standTileLocusCallback_C_t callbackC, struct StandTileLocusCallbackRecord *record) { - #ifdef DEBUG - if (cat>= 0x190) + s32 i; + StandTile *tileStack[39]; + StandTile *tile; + StandTile *linkedTile; + s32 visitedCount; + s32 cat; + s32 pointI; + s32 pointINext; + s32 nextPointI; + f32 edgeDist; + f32 pointDistA; + f32 pointDistB; + + x *= level_scale; + z *= level_scale; + radius *= level_scale; + visitedCount = 0; + cat = 1; + tileStack[0] = *startTile; + + do { - osSyncPrintf("cat=%d !!!!!!!!!!!!!!!!!!!! NEED TO INCREASE ARRAY SIZE\n",cat); - } - #endif - if (cat >= 0x320) - { - return 5; //error value? - } -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B1DDC -/* 0E690C 7F0B1DDC 27BDFEB0 */ addiu $sp, $sp, -0x150 -/* 0E6910 7F0B1DE0 F7BA0038 */ sdc1 $f26, 0x38($sp) -/* 0E6914 7F0B1DE4 3C018004 */ lui $at, %hi(level_scale) -/* 0E6918 7F0B1DE8 4485D000 */ mtc1 $a1, $f26 -/* 0E691C 7F0B1DEC C4200F44 */ lwc1 $f0, %lo(level_scale)($at) -/* 0E6920 7F0B1DF0 F7BC0040 */ sdc1 $f28, 0x40($sp) -/* 0E6924 7F0B1DF4 4486E000 */ mtc1 $a2, $f28 -/* 0E6928 7F0B1DF8 4600D682 */ mul.s $f26, $f26, $f0 -/* 0E692C 7F0B1DFC F7BE0048 */ sdc1 $f30, 0x48($sp) -/* 0E6930 7F0B1E00 4487F000 */ mtc1 $a3, $f30 -/* 0E6934 7F0B1E04 4600E702 */ mul.s $f28, $f28, $f0 -/* 0E6938 7F0B1E08 AFBF0074 */ sw $ra, 0x74($sp) -/* 0E693C 7F0B1E0C AFBE0070 */ sw $fp, 0x70($sp) -/* 0E6940 7F0B1E10 AFB7006C */ sw $s7, 0x6c($sp) -/* 0E6944 7F0B1E14 AFB60068 */ sw $s6, 0x68($sp) -/* 0E6948 7F0B1E18 AFB50064 */ sw $s5, 0x64($sp) -/* 0E694C 7F0B1E1C AFB40060 */ sw $s4, 0x60($sp) -/* 0E6950 7F0B1E20 AFB3005C */ sw $s3, 0x5c($sp) -/* 0E6954 7F0B1E24 AFB20058 */ sw $s2, 0x58($sp) -/* 0E6958 7F0B1E28 AFB10054 */ sw $s1, 0x54($sp) -/* 0E695C 7F0B1E2C AFB00050 */ sw $s0, 0x50($sp) -/* 0E6960 7F0B1E30 F7B80030 */ sdc1 $f24, 0x30($sp) -/* 0E6964 7F0B1E34 F7B60028 */ sdc1 $f22, 0x28($sp) -/* 0E6968 7F0B1E38 F7B40020 */ sdc1 $f20, 0x20($sp) -/* 0E696C 7F0B1E3C AFA000A4 */ sw $zero, 0xa4($sp) -/* 0E6970 7F0B1E40 8C8E0000 */ lw $t6, ($a0) -/* 0E6974 7F0B1E44 27AF00B0 */ addiu $t7, $sp, 0xb0 -/* 0E6978 7F0B1E48 4600F782 */ mul.s $f30, $f30, $f0 -/* 0E697C 7F0B1E4C 24140001 */ li $s4, 1 -/* 0E6980 7F0B1E50 AFAF0084 */ sw $t7, 0x84($sp) -/* 0E6984 7F0B1E54 27B200B0 */ addiu $s2, $sp, 0xb0 -/* 0E6988 7F0B1E58 8FB60164 */ lw $s6, 0x164($sp) -/* 0E698C 7F0B1E5C 8FB7016C */ lw $s7, 0x16c($sp) -/* 0E6990 7F0B1E60 8FBE0168 */ lw $fp, 0x168($sp) -/* 0E6994 7F0B1E64 AFAE00B0 */ sw $t6, 0xb0($sp) -/* 0E6998 7F0B1E68 8FB80084 */ lw $t8, 0x84($sp) -.L7F0B1E6C: -/* 0E699C 7F0B1E6C 8FB900A4 */ lw $t9, 0xa4($sp) -/* 0E69A0 7F0B1E70 8FAA0160 */ lw $t2, 0x160($sp) -/* 0E69A4 7F0B1E74 8F130000 */ lw $s3, ($t8) -/* 0E69A8 7F0B1E78 27090004 */ addiu $t1, $t8, 4 -/* 0E69AC 7F0B1E7C 27280001 */ addiu $t0, $t9, 1 -/* 0E69B0 7F0B1E80 AFA800A4 */ sw $t0, 0xa4($sp) -/* 0E69B4 7F0B1E84 AFA90084 */ sw $t1, 0x84($sp) -/* 0E69B8 7F0B1E88 11400004 */ beqz $t2, .L7F0B1E9C -/* 0E69BC 7F0B1E8C 00008025 */ move $s0, $zero -/* 0E69C0 7F0B1E90 02602025 */ move $a0, $s3 -/* 0E69C4 7F0B1E94 0140F809 */ jalr $t2 -/* 0E69C8 7F0B1E98 02E02825 */ move $a1, $s7 -.L7F0B1E9C: -/* 0E69CC 7F0B1E9C 86620006 */ lh $v0, 6($s3) -/* 0E69D0 7F0B1EA0 00025B03 */ sra $t3, $v0, 0xc -/* 0E69D4 7F0B1EA4 316C000F */ andi $t4, $t3, 0xf -/* 0E69D8 7F0B1EA8 19800069 */ blez $t4, .L7F0B2050 -/* 0E69DC 7F0B1EAC 01801025 */ move $v0, $t4 -.L7F0B1EB0: -/* 0E69E0 7F0B1EB0 26150001 */ addiu $s5, $s0, 1 -/* 0E69E4 7F0B1EB4 02A2001A */ div $zero, $s5, $v0 -/* 0E69E8 7F0B1EB8 00008810 */ mfhi $s1 -/* 0E69EC 7F0B1EBC 4406D000 */ mfc1 $a2, $f26 -/* 0E69F0 7F0B1EC0 14400002 */ bnez $v0, .L7F0B1ECC -/* 0E69F4 7F0B1EC4 00000000 */ nop -/* 0E69F8 7F0B1EC8 0007000D */ break 7 -.L7F0B1ECC: -/* 0E69FC 7F0B1ECC 2401FFFF */ li $at, -1 -/* 0E6A00 7F0B1ED0 14410004 */ bne $v0, $at, .L7F0B1EE4 -/* 0E6A04 7F0B1ED4 3C018000 */ lui $at, 0x8000 -/* 0E6A08 7F0B1ED8 16A10002 */ bne $s5, $at, .L7F0B1EE4 -/* 0E6A0C 7F0B1EDC 00000000 */ nop -/* 0E6A10 7F0B1EE0 0006000D */ break 6 -.L7F0B1EE4: -/* 0E6A14 7F0B1EE4 4407E000 */ mfc1 $a3, $f28 -/* 0E6A18 7F0B1EE8 02602025 */ move $a0, $s3 -/* 0E6A1C 7F0B1EEC 0FC2BF47 */ jal getShortest2dDispToInfTileEdge -/* 0E6A20 7F0B1EF0 02002825 */ move $a1, $s0 -/* 0E6A24 7F0B1EF4 4406D000 */ mfc1 $a2, $f26 -/* 0E6A28 7F0B1EF8 4407E000 */ mfc1 $a3, $f28 -/* 0E6A2C 7F0B1EFC 46000586 */ mov.s $f22, $f0 -/* 0E6A30 7F0B1F00 02602025 */ move $a0, $s3 -/* 0E6A34 7F0B1F04 0FC2C019 */ jal distToTilePnt2D -/* 0E6A38 7F0B1F08 02002825 */ move $a1, $s0 -/* 0E6A3C 7F0B1F0C 4406D000 */ mfc1 $a2, $f26 -/* 0E6A40 7F0B1F10 4407E000 */ mfc1 $a3, $f28 -/* 0E6A44 7F0B1F14 46000506 */ mov.s $f20, $f0 -/* 0E6A48 7F0B1F18 02602025 */ move $a0, $s3 -/* 0E6A4C 7F0B1F1C 0FC2C019 */ jal distToTilePnt2D -/* 0E6A50 7F0B1F20 02202825 */ move $a1, $s1 -/* 0E6A54 7F0B1F24 461EB03C */ c.lt.s $f22, $f30 -/* 0E6A58 7F0B1F28 46000606 */ mov.s $f24, $f0 -/* 0E6A5C 7F0B1F2C 45020042 */ bc1fl .L7F0B2038 -/* 0E6A60 7F0B1F30 86620006 */ lh $v0, 6($s3) -/* 0E6A64 7F0B1F34 461EA03C */ c.lt.s $f20, $f30 -/* 0E6A68 7F0B1F38 00000000 */ nop -/* 0E6A6C 7F0B1F3C 4501000B */ bc1t .L7F0B1F6C -/* 0E6A70 7F0B1F40 00000000 */ nop -/* 0E6A74 7F0B1F44 461E003C */ c.lt.s $f0, $f30 -/* 0E6A78 7F0B1F48 02602025 */ move $a0, $s3 -/* 0E6A7C 7F0B1F4C 45010007 */ bc1t .L7F0B1F6C -/* 0E6A80 7F0B1F50 00000000 */ nop -/* 0E6A84 7F0B1F54 4406D000 */ mfc1 $a2, $f26 -/* 0E6A88 7F0B1F58 4407E000 */ mfc1 $a3, $f28 -/* 0E6A8C 7F0B1F5C 0FC2C066 */ jal sub_GAME_7F0B0198 -/* 0E6A90 7F0B1F60 02002825 */ move $a1, $s0 -/* 0E6A94 7F0B1F64 50400034 */ beql $v0, $zero, .L7F0B2038 -/* 0E6A98 7F0B1F68 86620006 */ lh $v0, 6($s3) -.L7F0B1F6C: -/* 0E6A9C 7F0B1F6C 12C00008 */ beqz $s6, .L7F0B1F90 -/* 0E6AA0 7F0B1F70 02602025 */ move $a0, $s3 -/* 0E6AA4 7F0B1F74 4406B000 */ mfc1 $a2, $f22 -/* 0E6AA8 7F0B1F78 4407A000 */ mfc1 $a3, $f20 -/* 0E6AAC 7F0B1F7C 02002825 */ move $a1, $s0 -/* 0E6AB0 7F0B1F80 E7B80010 */ swc1 $f24, 0x10($sp) -/* 0E6AB4 7F0B1F84 02C0F809 */ jalr $s6 -/* 0E6AB8 7F0B1F88 AFB70014 */ sw $s7, 0x14($sp) -/* 0E6ABC 7F0B1F8C 1440001B */ bnez $v0, .L7F0B1FFC -.L7F0B1F90: -/* 0E6AC0 7F0B1F90 001068C0 */ sll $t5, $s0, 3 -/* 0E6AC4 7F0B1F94 026D7021 */ addu $t6, $s3, $t5 -/* 0E6AC8 7F0B1F98 95C4000E */ lhu $a0, 0xe($t6) -/* 0E6ACC 7F0B1F9C 3C088004 */ lui $t0, %hi(standTileStart) -/* 0E6AD0 7F0B1FA0 2682FFFF */ addiu $v0, $s4, -1 -/* 0E6AD4 7F0B1FA4 00047903 */ sra $t7, $a0, 4 -/* 0E6AD8 7F0B1FA8 11E00014 */ beqz $t7, .L7F0B1FFC -/* 0E6ADC 7F0B1FAC 0004C8C0 */ sll $t9, $a0, 3 -/* 0E6AE0 7F0B1FB0 8D080F58 */ lw $t0, %lo(standTileStart)($t0) -/* 0E6AE4 7F0B1FB4 00402825 */ move $a1, $v0 -/* 0E6AE8 7F0B1FB8 0440000B */ bltz $v0, .L7F0B1FE8 -/* 0E6AEC 7F0B1FBC 03281821 */ addu $v1, $t9, $t0 -/* 0E6AF0 7F0B1FC0 0002C080 */ sll $t8, $v0, 2 -/* 0E6AF4 7F0B1FC4 27A900B0 */ addiu $t1, $sp, 0xb0 -/* 0E6AF8 7F0B1FC8 03091021 */ addu $v0, $t8, $t1 -/* 0E6AFC 7F0B1FCC 8C4A0000 */ lw $t2, ($v0) -.L7F0B1FD0: -/* 0E6B00 7F0B1FD0 2442FFFC */ addiu $v0, $v0, -4 -/* 0E6B04 7F0B1FD4 0052082B */ sltu $at, $v0, $s2 -/* 0E6B08 7F0B1FD8 506A0017 */ beql $v1, $t2, .L7F0B2038 -/* 0E6B0C 7F0B1FDC 86620006 */ lh $v0, 6($s3) -/* 0E6B10 7F0B1FE0 5020FFFB */ beql $at, $zero, .L7F0B1FD0 -/* 0E6B14 7F0B1FE4 8C4A0000 */ lw $t2, ($v0) -.L7F0B1FE8: -/* 0E6B18 7F0B1FE8 00145880 */ sll $t3, $s4, 2 -/* 0E6B1C 7F0B1FEC 03AB6021 */ addu $t4, $sp, $t3 -/* 0E6B20 7F0B1FF0 AD8300B0 */ sw $v1, 0xb0($t4) -/* 0E6B24 7F0B1FF4 1000000F */ b .L7F0B2034 -/* 0E6B28 7F0B1FF8 26940001 */ addiu $s4, $s4, 1 -.L7F0B1FFC: -/* 0E6B2C 7F0B1FFC 3C018008 */ lui $at, %hi(stanSavedColl_tile) -/* 0E6B30 7F0B2000 AC33B9E4 */ sw $s3, %lo(stanSavedColl_tile)($at) -/* 0E6B34 7F0B2004 3C018008 */ lui $at, %hi(stanSavedColl_pointI) -/* 0E6B38 7F0B2008 13C00008 */ beqz $fp, .L7F0B202C -/* 0E6B3C 7F0B200C AC30B9E8 */ sw $s0, %lo(stanSavedColl_pointI)($at) -/* 0E6B40 7F0B2010 27A400B0 */ addiu $a0, $sp, 0xb0 -/* 0E6B44 7F0B2014 02802825 */ move $a1, $s4 -/* 0E6B48 7F0B2018 03C0F809 */ jalr $fp -/* 0E6B4C 7F0B201C 02E03025 */ move $a2, $s7 -/* 0E6B50 7F0B2020 24010001 */ li $at, 1 -/* 0E6B54 7F0B2024 50410004 */ beql $v0, $at, .L7F0B2038 -/* 0E6B58 7F0B2028 86620006 */ lh $v0, 6($s3) -.L7F0B202C: -/* 0E6B5C 7F0B202C 10000016 */ b .L7F0B2088 -/* 0E6B60 7F0B2030 24020002 */ li $v0, 2 -.L7F0B2034: -/* 0E6B64 7F0B2034 86620006 */ lh $v0, 6($s3) -.L7F0B2038: -/* 0E6B68 7F0B2038 02A08025 */ move $s0, $s5 -/* 0E6B6C 7F0B203C 00026B03 */ sra $t5, $v0, 0xc -/* 0E6B70 7F0B2040 31AE000F */ andi $t6, $t5, 0xf -/* 0E6B74 7F0B2044 02AE082A */ slt $at, $s5, $t6 -/* 0E6B78 7F0B2048 1420FF99 */ bnez $at, .L7F0B1EB0 -/* 0E6B7C 7F0B204C 01C01025 */ move $v0, $t6 -.L7F0B2050: -/* 0E6B80 7F0B2050 2E810029 */ sltiu $at, $s4, 0x29 -/* 0E6B84 7F0B2054 14200003 */ bnez $at, .L7F0B2064 -/* 0E6B88 7F0B2058 8FAF00A4 */ lw $t7, 0xa4($sp) -/* 0E6B8C 7F0B205C 1000000A */ b .L7F0B2088 -/* 0E6B90 7F0B2060 24020005 */ li $v0, 5 -.L7F0B2064: -/* 0E6B94 7F0B2064 01F4082A */ slt $at, $t7, $s4 -/* 0E6B98 7F0B2068 5420FF80 */ bnezl $at, .L7F0B1E6C -/* 0E6B9C 7F0B206C 8FB80084 */ lw $t8, 0x84($sp) -/* 0E6BA0 7F0B2070 13C00004 */ beqz $fp, .L7F0B2084 -/* 0E6BA4 7F0B2074 27A400B0 */ addiu $a0, $sp, 0xb0 -/* 0E6BA8 7F0B2078 02802825 */ move $a1, $s4 -/* 0E6BAC 7F0B207C 03C0F809 */ jalr $fp -/* 0E6BB0 7F0B2080 02E03025 */ move $a2, $s7 -.L7F0B2084: -/* 0E6BB4 7F0B2084 2402FFFE */ li $v0, -2 -.L7F0B2088: -/* 0E6BB8 7F0B2088 8FBF0074 */ lw $ra, 0x74($sp) -/* 0E6BBC 7F0B208C D7B40020 */ ldc1 $f20, 0x20($sp) -/* 0E6BC0 7F0B2090 D7B60028 */ ldc1 $f22, 0x28($sp) -/* 0E6BC4 7F0B2094 D7B80030 */ ldc1 $f24, 0x30($sp) -/* 0E6BC8 7F0B2098 D7BA0038 */ ldc1 $f26, 0x38($sp) -/* 0E6BCC 7F0B209C D7BC0040 */ ldc1 $f28, 0x40($sp) -/* 0E6BD0 7F0B20A0 D7BE0048 */ ldc1 $f30, 0x48($sp) -/* 0E6BD4 7F0B20A4 8FB00050 */ lw $s0, 0x50($sp) -/* 0E6BD8 7F0B20A8 8FB10054 */ lw $s1, 0x54($sp) -/* 0E6BDC 7F0B20AC 8FB20058 */ lw $s2, 0x58($sp) -/* 0E6BE0 7F0B20B0 8FB3005C */ lw $s3, 0x5c($sp) -/* 0E6BE4 7F0B20B4 8FB40060 */ lw $s4, 0x60($sp) -/* 0E6BE8 7F0B20B8 8FB50064 */ lw $s5, 0x64($sp) -/* 0E6BEC 7F0B20BC 8FB60068 */ lw $s6, 0x68($sp) -/* 0E6BF0 7F0B20C0 8FB7006C */ lw $s7, 0x6c($sp) -/* 0E6BF4 7F0B20C4 8FBE0070 */ lw $fp, 0x70($sp) -/* 0E6BF8 7F0B20C8 03E00008 */ jr $ra -/* 0E6BFC 7F0B20CC 27BD0150 */ addiu $sp, $sp, 0x150 -) + tile = tileStack[visitedCount++]; + pointI = 0; + + if (callbackA != NULL) + { + callbackA(tile, record); + } + + if (((tile->tail.half >> 12) & 0xf) > 0) + { + do + { + pointINext = pointI; + do + { + i = cat; + pointINext = pointINext + 1; + if (i); + + nextPointI = pointINext; + nextPointI %= (tile->tail.half >> 12) & 0xf; + edgeDist = getShortest2dDispToInfTileEdge(tile, pointI, x, z); + pointDistA = distToTilePnt2D(tile, pointI, x, z); + pointDistB = distToTilePnt2D(tile, nextPointI, x, z); + + if (edgeDist < radius && (pointDistA < radius || pointDistB < radius || stanPointProjectsOntoTileEdge(tile, pointI, x, z))) + { + if ((callbackB == NULL || !callbackB(tile, pointI, edgeDist, pointDistA, pointDistB, record)) && (tile->points[pointI].link >> 4)) + { + linkedTile = ((u32) standTileStart) + (tile->points[pointI].link << 3); + for (i = cat - 1; i >= 0; i--) + { + if (linkedTile == tileStack[i]) + { + goto next_point; + } + } + tileStack[cat] = linkedTile; + cat++; + goto next_point; + } + + stanSavedColl_tile = tile; + stanSavedColl_pointI = pointI; + if (callbackC != NULL && callbackC(tileStack, cat, record) == 1) + { + goto next_point; + } + return STAN_COLLISION_FOUND; + } + next_point: + pointI = pointINext; + } + while (FALSE); + } + while (pointINext < (((*tile).tail.half >> 12) & 0xf)); + } + +#ifdef DEBUG + if (cat>= 0x190) + { + osSyncPrintf("cat=%d !!!!!!!!!!!!!!!!!!!! NEED TO INCREASE ARRAY SIZE\n",cat); + } #endif + // if (cat >= 0x320) + // { + // return 5; //error value? + // } + + if (((u32) cat) >= 41) + { + return STAN_COLLISION_TRAVERSAL_LIMIT; + } + } + while (visitedCount < cat); + + visitedCount = radius; + + if (callbackC != NULL) + { + if (visitedCount); + callbackC(tileStack, cat, record); + } + + return STAN_COLLISION_NONE; +} @@ -4228,80 +2231,59 @@ s32 sub_GAME_7F0B20D0(StandTile **tileStack, f32 target_x, f32 target_z, f32 unk } - - -#ifdef NONMATCHING - -// Regalloc and a little reordering to solve, but there just seems to be nothing to work with in the loop. -// Indexing roomBuf makes sense and generates closer code. -// 'addTileRoomIfNew' -s32 sub_GAME_7F0B2110(StandTile *tile, struct StandTileLocusCallbackRecord* data) +/** + * Address: 7F0B2110 + * + * Callback for stan locus traversal. + * + * Adds the current tile's room ID to the caller-provided room list if it + * has not already been recorded. The callback always returns 0 so traversal + * continues. + */ +s32 stanLocusAddTileRoomIfNew(StandTile *tile, struct StandTileLocusCallbackRecord *rec) { - s32 i; + s32 roomCount; s32 room; - - for (i = 0; i < data->count; i++) + StandTile *t; + struct StandTileLocusCallbackRecord *record; + s32 i; + s32 *ptr; + + record = rec; + i = 0; + roomCount = record->count; + t = tile; + + // Only search for duplicates if more than 0 rooms have been collected. + if (roomCount > 0) { - if (data->roomBuf[i] == tile->room) { - return 0; + room = t->room; + ptr = record->rooms; + + //If the tile's room is already in the room list, return immediately. + do + { + if (room == (*ptr)) + { + return 0; + } + + i++; + ptr++; } + while (i < record->count); } - - if (data->count < data->bufMax) { - data->roomBuf[data->count] = tile->room; - data->count++; + + // The room has not been collected yet so append it. + if (roomCount < rec->bufMax) + { + rec->rooms[roomCount] = tile->room; + rec->count = rec->count + 1; } - + return 0; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B2110 -/* 0E6C40 7F0B2110 8CA60004 */ lw $a2, 4($a1) -/* 0E6C44 7F0B2114 00A01025 */ move $v0, $a1 -/* 0E6C48 7F0B2118 00001825 */ move $v1, $zero -/* 0E6C4C 7F0B211C 58C0000F */ blezl $a2, .L7F0B215C -/* 0E6C50 7F0B2120 8CB80008 */ lw $t8, 8($a1) -/* 0E6C54 7F0B2124 90870003 */ lbu $a3, 3($a0) -/* 0E6C58 7F0B2128 8CA80000 */ lw $t0, ($a1) -/* 0E6C5C 7F0B212C 8D0E0000 */ lw $t6, ($t0) -.L7F0B2130: -/* 0E6C60 7F0B2130 54EE0004 */ bnel $a3, $t6, .L7F0B2144 -/* 0E6C64 7F0B2134 8C4F0004 */ lw $t7, 4($v0) -/* 0E6C68 7F0B2138 03E00008 */ jr $ra -/* 0E6C6C 7F0B213C 00001025 */ move $v0, $zero - -/* 0E6C70 7F0B2140 8C4F0004 */ lw $t7, 4($v0) -.L7F0B2144: -/* 0E6C74 7F0B2144 24630001 */ addiu $v1, $v1, 1 -/* 0E6C78 7F0B2148 25080004 */ addiu $t0, $t0, 4 -/* 0E6C7C 7F0B214C 006F082A */ slt $at, $v1, $t7 -/* 0E6C80 7F0B2150 5420FFF7 */ bnezl $at, .L7F0B2130 -/* 0E6C84 7F0B2154 8D0E0000 */ lw $t6, ($t0) -/* 0E6C88 7F0B2158 8CB80008 */ lw $t8, 8($a1) -.L7F0B215C: -/* 0E6C8C 7F0B215C 00001025 */ move $v0, $zero -/* 0E6C90 7F0B2160 00D8082A */ slt $at, $a2, $t8 -/* 0E6C94 7F0B2164 10200009 */ beqz $at, .L7F0B218C -/* 0E6C98 7F0B2168 00000000 */ nop -/* 0E6C9C 7F0B216C 8CA90000 */ lw $t1, ($a1) -/* 0E6CA0 7F0B2170 90990003 */ lbu $t9, 3($a0) -/* 0E6CA4 7F0B2174 00065080 */ sll $t2, $a2, 2 -/* 0E6CA8 7F0B2178 012A5821 */ addu $t3, $t1, $t2 -/* 0E6CAC 7F0B217C AD790000 */ sw $t9, ($t3) -/* 0E6CB0 7F0B2180 8CAC0004 */ lw $t4, 4($a1) -/* 0E6CB4 7F0B2184 258D0001 */ addiu $t5, $t4, 1 -/* 0E6CB8 7F0B2188 ACAD0004 */ sw $t5, 4($a1) -.L7F0B218C: -/* 0E6CBC 7F0B218C 03E00008 */ jr $ra -/* 0E6CC0 7F0B2190 00000000 */ nop -) -#endif - - - s32 incrNearEdgeCount(StandTile **tileStack, s32 stackHeight, struct StandTileLocusCallbackRecord* data) { data->nearEdgeCount += 1; @@ -4309,20 +2291,21 @@ s32 incrNearEdgeCount(StandTile **tileStack, s32 stackHeight, struct StandTileLo } - -// maybe stanCircleLegalXFObjTypeY -s32 sub_GAME_7F0B21B0(StandTile **tileStack, f32 target_x, f32 target_z, f32 unknown, s32 unk00, s32 *count_rtn, s32 bufMax) +/** + * Address: 7F0B21B0 + */ +s32 sub_GAME_7F0B21B0(StandTile **tileStack, f32 target_x, f32 target_z, f32 radius, s32 *rooms, s32 *count_rtn, s32 bufMax) { struct StandTileLocusCallbackRecord data; s32 rtn; - data.unk00 = unk00; + data.rooms = rooms; data.count = 0; data.bufMax = bufMax; data.nearEdgeCount = 0; - rtn = sub_GAME_7F0B1DDC(tileStack, target_x, target_z, unknown, - sub_GAME_7F0B2110, NULL, incrNearEdgeCount, &data + rtn = sub_GAME_7F0B1DDC(tileStack, target_x, target_z, radius, + stanLocusAddTileRoomIfNew, NULL, incrNearEdgeCount, &data ); *count_rtn = data.count; @@ -4335,124 +2318,53 @@ s32 sub_GAME_7F0B21B0(StandTile **tileStack, f32 target_x, f32 target_z, f32 unk } - - - - /** * Address 0x7F0B2244. */ s32 stanIsSpecialBit1Set(StandTile *arg0, struct StandTileLocusCallbackRecord *arg1) { s32 val = arg0->mid.half >> 0xC; - if (D_80040F30[val] & 2) + if (g_StanTileSpecialFlags[val] & STANTILEFLAG_FORCECROUCH) { - arg1->unk00 = 1; + arg1->rooms = 1; } return 0; } - - -#ifdef NONMATCHING /** - * Address 0x7F0B2274. - * - * decomp status: - * - compiles: yes - * - stack resize: ok - * - identical instructions: no - * - identical registers: fail - * - * Notes: the SRA 0xc needs to be calculated twice, but below is a move instruction from previous SRA 0xc. - * Seems to match other than that. -*/ -s32 sub_GAME_7F0B2274(StandTile *arg0, s32 arg1, f32 arg2, f32 arg3, s32 arg4, struct StandTileLocusCallbackRecord *arg5) + * Address: 7F0B2274 + */ +s32 stanCheckLinkedSpecialTile(StandTile *tile, s32 pointIdx, s32 arg2, s32 arg3, s32 arg4, s32 *outFlags) { - s32 temp_v0; - StandTile *temp_v1; - s32 val; + u16 link; + StandTile *target; + s32 mid; - temp_v0 = arg0->points[arg1].link; + link = tile->points[pointIdx].link; - if ((temp_v0 >> 4) != 0) - { - temp_v1 = &standTileStart[temp_v0]; + if ((link >> 4) != 0) { + target = (StandTile *)(link + (StandTile *)standTileStart); - val = temp_v1->mid.half >> 0xc; - if (D_80040F30[val] & 2) - { - arg5->unk00 = 1; + mid = target->mid.half; + + if (g_StanTileSpecialFlags[mid >> 0xc] & STANTILEFLAG_FORCECROUCH) { + outFlags[0] = 1; return 1; } - val = temp_v1->mid.half >> 0xc; - if (D_80040F30[val] & 0x40) - { - dword_CODE_bss_8007BA0C = temp_v1; - arg5->count = 1; + mid = target->mid.half; + + if (g_StanTileSpecialFlags[mid >> 0xc] & STANTILEFLAG_LADDER) { + dword_CODE_bss_8007BA0C = target; + outFlags[1] = 1; return 0; } } return 0; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B2274 -/* 0E6DA4 7F0B2274 000570C0 */ sll $t6, $a1, 3 -/* 0E6DA8 7F0B2278 AFA60008 */ sw $a2, 8($sp) -/* 0E6DAC 7F0B227C AFA7000C */ sw $a3, 0xc($sp) -/* 0E6DB0 7F0B2280 008E7821 */ addu $t7, $a0, $t6 -/* 0E6DB4 7F0B2284 95E2000E */ lhu $v0, 0xe($t7) -/* 0E6DB8 7F0B2288 3C088004 */ lui $t0, %hi(standTileStart) -/* 0E6DBC 7F0B228C 0002C103 */ sra $t8, $v0, 4 -/* 0E6DC0 7F0B2290 5300001E */ beql $t8, $zero, .L7F0B230C -/* 0E6DC4 7F0B2294 00001025 */ move $v0, $zero -/* 0E6DC8 7F0B2298 8D080F58 */ lw $t0, %lo(standTileStart)($t0) -/* 0E6DCC 7F0B229C 0002C8C0 */ sll $t9, $v0, 3 -/* 0E6DD0 7F0B22A0 3C058004 */ lui $a1, %hi(D_80040F30) -/* 0E6DD4 7F0B22A4 03281821 */ addu $v1, $t9, $t0 -/* 0E6DD8 7F0B22A8 84640004 */ lh $a0, 4($v1) -/* 0E6DDC 7F0B22AC 24A50F30 */ addiu $a1, %lo(D_80040F30) # addiu $a1, $a1, 0xf30 -/* 0E6DE0 7F0B22B0 240D0001 */ li $t5, 1 -/* 0E6DE4 7F0B22B4 00044B03 */ sra $t1, $a0, 0xc -/* 0E6DE8 7F0B22B8 00A95021 */ addu $t2, $a1, $t1 -/* 0E6DEC 7F0B22BC 914B0000 */ lbu $t3, ($t2) -/* 0E6DF0 7F0B22C0 00047B03 */ sra $t7, $a0, 0xc -/* 0E6DF4 7F0B22C4 8FAE0014 */ lw $t6, 0x14($sp) -/* 0E6DF8 7F0B22C8 316C0002 */ andi $t4, $t3, 2 -/* 0E6DFC 7F0B22CC 11800004 */ beqz $t4, .L7F0B22E0 -/* 0E6E00 7F0B22D0 00AFC021 */ addu $t8, $a1, $t7 -/* 0E6E04 7F0B22D4 ADCD0000 */ sw $t5, ($t6) -/* 0E6E08 7F0B22D8 03E00008 */ jr $ra -/* 0E6E0C 7F0B22DC 24020001 */ li $v0, 1 - -.L7F0B22E0: -/* 0E6E10 7F0B22E0 93190000 */ lbu $t9, ($t8) -/* 0E6E14 7F0B22E4 3C018008 */ lui $at, %hi(dword_CODE_bss_8007BA0C) -/* 0E6E18 7F0B22E8 24090001 */ li $t1, 1 -/* 0E6E1C 7F0B22EC 33280040 */ andi $t0, $t9, 0x40 -/* 0E6E20 7F0B22F0 11000005 */ beqz $t0, .L7F0B2308 -/* 0E6E24 7F0B22F4 00001025 */ move $v0, $zero -/* 0E6E28 7F0B22F8 8FAA0014 */ lw $t2, 0x14($sp) -/* 0E6E2C 7F0B22FC AC23BA0C */ sw $v1, %lo(dword_CODE_bss_8007BA0C)($at) -/* 0E6E30 7F0B2300 03E00008 */ jr $ra -/* 0E6E34 7F0B2304 AD490004 */ sw $t1, 4($t2) - -.L7F0B2308: -/* 0E6E38 7F0B2308 00001025 */ move $v0, $zero -.L7F0B230C: -/* 0E6E3C 7F0B230C 03E00008 */ jr $ra -/* 0E6E40 7F0B2310 00000000 */ nop -) -#endif - - - /** @@ -4484,546 +2396,336 @@ s32 stanTileDistanceRelated(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, stru } */ - return sub_GAME_7F0B1DDC(arg0, arg1, arg2, arg3, stanIsSpecialBit1Set, sub_GAME_7F0B2274, NULL, arg4); + return sub_GAME_7F0B1DDC(arg0, arg1, arg2, arg3, stanIsSpecialBit1Set, stanCheckLinkedSpecialTile, NULL, arg4); } - s32 stanGetLocusField0(struct StandTileLocusCallbackRecord *arg0) { - return arg0->unk00; + return arg0->rooms; } + s32 stanGetLocusCount(struct StandTileLocusCallbackRecord *arg0) { return arg0->count; } - - - -#ifdef NONMATCHING -// regalloc only really -// Duplicating the macro does nothing -void sub_GAME_7F0B23AC(StandTile *tile, s32 tripleIndex, coord3d *pnt) -{ - s32 pntIndex = STAN_TRIPLE_TO_PNT_INDEX(tile, tripleIndex); - - pnt->x = (f32)tile->points[pntIndex].x * inv_level_scale; - pnt->y = (f32)tile->points[pntIndex].y * inv_level_scale; - pnt->z = (f32)tile->points[pntIndex].z * inv_level_scale; - return; -} - -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B23AC -/* 0E6EDC 7F0B23AC 848E0006 */ lh $t6, 6($a0) -/* 0E6EE0 7F0B23B0 00057880 */ sll $t7, $a1, 2 -/* 0E6EE4 7F0B23B4 24180008 */ li $t8, 8 -/* 0E6EE8 7F0B23B8 030FC823 */ subu $t9, $t8, $t7 -/* 0E6EEC 7F0B23BC 032E2807 */ srav $a1, $t6, $t9 -/* 0E6EF0 7F0B23C0 30A8000F */ andi $t0, $a1, 0xf -/* 0E6EF4 7F0B23C4 000848C0 */ sll $t1, $t0, 3 -/* 0E6EF8 7F0B23C8 00891021 */ addu $v0, $a0, $t1 -/* 0E6EFC 7F0B23CC 844A0008 */ lh $t2, 8($v0) -/* 0E6F00 7F0B23D0 3C018004 */ lui $at, %hi(inv_level_scale) -/* 0E6F04 7F0B23D4 C4200F48 */ lwc1 $f0, %lo(inv_level_scale)($at) -/* 0E6F08 7F0B23D8 448A2000 */ mtc1 $t2, $f4 -/* 0E6F0C 7F0B23DC 00000000 */ nop -/* 0E6F10 7F0B23E0 468021A0 */ cvt.s.w $f6, $f4 -/* 0E6F14 7F0B23E4 46003202 */ mul.s $f8, $f6, $f0 -/* 0E6F18 7F0B23E8 E4C80000 */ swc1 $f8, ($a2) -/* 0E6F1C 7F0B23EC 844B000A */ lh $t3, 0xa($v0) -/* 0E6F20 7F0B23F0 448B5000 */ mtc1 $t3, $f10 -/* 0E6F24 7F0B23F4 00000000 */ nop -/* 0E6F28 7F0B23F8 46805420 */ cvt.s.w $f16, $f10 -/* 0E6F2C 7F0B23FC 46008482 */ mul.s $f18, $f16, $f0 -/* 0E6F30 7F0B2400 E4D20004 */ swc1 $f18, 4($a2) -/* 0E6F34 7F0B2404 844C000C */ lh $t4, 0xc($v0) -/* 0E6F38 7F0B2408 448C2000 */ mtc1 $t4, $f4 -/* 0E6F3C 7F0B240C 00000000 */ nop -/* 0E6F40 7F0B2410 468021A0 */ cvt.s.w $f6, $f4 -/* 0E6F44 7F0B2414 46003202 */ mul.s $f8, $f6, $f0 -/* 0E6F48 7F0B2418 03E00008 */ jr $ra -/* 0E6F4C 7F0B241C E4C80008 */ swc1 $f8, 8($a2) -) -#endif - - - - - -#ifdef NONMATCHING -// TODO -void stanGetMoveBondCollisionTiles(void) { - #ifdef DEBUG - assert(getsides(s1)==3); - #endif - - //if side++ > getsides - #ifdef DEBUG - osSyncPrintf("Ladder %s has no neighbouring ladder stan\n", GetStanRoomID(arg0)); - #endif - return; - - - // for rotate = 0 to 12 - // next - - //ran out of rotating tiles - just end - #ifdef DEBUG - osSyncPrintf("rotate==12\n"); - #endif -} -#else -GLOBAL_ASM( -.text -glabel stanGetMoveBondCollisionTiles -/* 0E6F50 7F0B2420 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0E6F54 7F0B2424 3C098008 */ lui $t1, %hi(dword_CODE_bss_8007BA0C) -/* 0E6F58 7F0B2428 8D29BA0C */ lw $t1, %lo(dword_CODE_bss_8007BA0C)($t1) -/* 0E6F5C 7F0B242C AFBF003C */ sw $ra, 0x3c($sp) -/* 0E6F60 7F0B2430 AFBE0038 */ sw $fp, 0x38($sp) -/* 0E6F64 7F0B2434 AFB70034 */ sw $s7, 0x34($sp) -/* 0E6F68 7F0B2438 AFB60030 */ sw $s6, 0x30($sp) -/* 0E6F6C 7F0B243C AFB5002C */ sw $s5, 0x2c($sp) -/* 0E6F70 7F0B2440 AFB40028 */ sw $s4, 0x28($sp) -/* 0E6F74 7F0B2444 AFB30024 */ sw $s3, 0x24($sp) -/* 0E6F78 7F0B2448 AFB20020 */ sw $s2, 0x20($sp) -/* 0E6F7C 7F0B244C AFB1001C */ sw $s1, 0x1c($sp) -/* 0E6F80 7F0B2450 AFB00018 */ sw $s0, 0x18($sp) -/* 0E6F84 7F0B2454 85280006 */ lh $t0, 6($t1) -/* 0E6F88 7F0B2458 00808025 */ move $s0, $a0 -/* 0E6F8C 7F0B245C 00A08825 */ move $s1, $a1 -/* 0E6F90 7F0B2460 00087303 */ sra $t6, $t0, 0xc -/* 0E6F94 7F0B2464 31C8000F */ andi $t0, $t6, 0xf -/* 0E6F98 7F0B2468 00C0A825 */ move $s5, $a2 -/* 0E6F9C 7F0B246C 1900005B */ blez $t0, .L7F0B25DC -/* 0E6FA0 7F0B2470 00003825 */ move $a3, $zero -/* 0E6FA4 7F0B2474 3C048004 */ lui $a0, %hi(standTileStart) -/* 0E6FA8 7F0B2478 3C058004 */ lui $a1, %hi(D_80040F30) -/* 0E6FAC 7F0B247C 24A50F30 */ addiu $a1, %lo(D_80040F30) # addiu $a1, $a1, 0xf30 -/* 0E6FB0 7F0B2480 8C840F58 */ lw $a0, %lo(standTileStart)($a0) -/* 0E6FB4 7F0B2484 01201825 */ move $v1, $t1 -.L7F0B2488: -/* 0E6FB8 7F0B2488 9462000E */ lhu $v0, 0xe($v1) -/* 0E6FBC 7F0B248C 0002C0C0 */ sll $t8, $v0, 3 -/* 0E6FC0 7F0B2490 0002C903 */ sra $t9, $v0, 4 -/* 0E6FC4 7F0B2494 1320004D */ beqz $t9, .L7F0B25CC -/* 0E6FC8 7F0B2498 0304B021 */ addu $s6, $t8, $a0 -/* 0E6FCC 7F0B249C 86C20004 */ lh $v0, 4($s6) -/* 0E6FD0 7F0B24A0 00025303 */ sra $t2, $v0, 0xc -/* 0E6FD4 7F0B24A4 00AA5821 */ addu $t3, $a1, $t2 -/* 0E6FD8 7F0B24A8 916C0000 */ lbu $t4, ($t3) -/* 0E6FDC 7F0B24AC 318D0040 */ andi $t5, $t4, 0x40 -/* 0E6FE0 7F0B24B0 11A00046 */ beqz $t5, .L7F0B25CC -/* 0E6FE4 7F0B24B4 24FE0002 */ addiu $fp, $a3, 2 -/* 0E6FE8 7F0B24B8 24010003 */ li $at, 3 -/* 0E6FEC 7F0B24BC 03C1001A */ div $zero, $fp, $at -/* 0E6FF0 7F0B24C0 AE090000 */ sw $t1, ($s0) -/* 0E6FF4 7F0B24C4 00007010 */ mfhi $t6 -/* 0E6FF8 7F0B24C8 AE360000 */ sw $s6, ($s1) -/* 0E6FFC 7F0B24CC 0000B825 */ move $s7, $zero -/* 0E7000 7F0B24D0 AFA90040 */ sw $t1, 0x40($sp) -/* 0E7004 7F0B24D4 01C0F025 */ move $fp, $t6 -/* 0E7008 7F0B24D8 2414000C */ li $s4, 12 -/* 0E700C 7F0B24DC 24130003 */ li $s3, 3 -/* 0E7010 7F0B24E0 00008025 */ move $s0, $zero -.L7F0B24E4: -/* 0E7014 7F0B24E4 00179083 */ sra $s2, $s7, 2 -/* 0E7018 7F0B24E8 02E08825 */ move $s1, $s7 -.L7F0B24EC: -/* 0E701C 7F0B24EC 02507821 */ addu $t7, $s2, $s0 -/* 0E7020 7F0B24F0 01F3001A */ div $zero, $t7, $s3 -/* 0E7024 7F0B24F4 00002810 */ mfhi $a1 -/* 0E7028 7F0B24F8 32380003 */ andi $t8, $s1, 3 -/* 0E702C 7F0B24FC 02C02025 */ move $a0, $s6 -/* 0E7030 7F0B2500 03140019 */ multu $t8, $s4 -/* 0E7034 7F0B2504 16600002 */ bnez $s3, .L7F0B2510 -/* 0E7038 7F0B2508 00000000 */ nop -/* 0E703C 7F0B250C 0007000D */ break 7 -.L7F0B2510: -/* 0E7040 7F0B2510 2401FFFF */ li $at, -1 -/* 0E7044 7F0B2514 16610004 */ bne $s3, $at, .L7F0B2528 -/* 0E7048 7F0B2518 3C018000 */ lui $at, 0x8000 -/* 0E704C 7F0B251C 15E10002 */ bne $t7, $at, .L7F0B2528 -/* 0E7050 7F0B2520 00000000 */ nop -/* 0E7054 7F0B2524 0006000D */ break 6 -.L7F0B2528: -/* 0E7058 7F0B2528 0000C812 */ mflo $t9 -/* 0E705C 7F0B252C 02B93021 */ addu $a2, $s5, $t9 -/* 0E7060 7F0B2530 0FC2C8EB */ jal sub_GAME_7F0B23AC -/* 0E7064 7F0B2534 00000000 */ nop -/* 0E7068 7F0B2538 26100001 */ addiu $s0, $s0, 1 -/* 0E706C 7F0B253C 1613FFEB */ bne $s0, $s3, .L7F0B24EC -/* 0E7070 7F0B2540 26310001 */ addiu $s1, $s1, 1 -/* 0E7074 7F0B2544 26EA0003 */ addiu $t2, $s7, 3 -/* 0E7078 7F0B2548 314B0003 */ andi $t3, $t2, 3 -/* 0E707C 7F0B254C 01740019 */ multu $t3, $s4 -/* 0E7080 7F0B2550 8FA40040 */ lw $a0, 0x40($sp) -/* 0E7084 7F0B2554 03C02825 */ move $a1, $fp -/* 0E7088 7F0B2558 00006012 */ mflo $t4 -/* 0E708C 7F0B255C 02AC3021 */ addu $a2, $s5, $t4 -/* 0E7090 7F0B2560 0FC2C8EB */ jal sub_GAME_7F0B23AC -/* 0E7094 7F0B2564 00000000 */ nop -/* 0E7098 7F0B2568 26F70001 */ addiu $s7, $s7, 1 -/* 0E709C 7F0B256C 52F4001C */ beql $s7, $s4, .L7F0B25E0 -/* 0E70A0 7F0B2570 8FBF003C */ lw $ra, 0x3c($sp) -/* 0E70A4 7F0B2574 C6A0001C */ lwc1 $f0, 0x1c($s5) -/* 0E70A8 7F0B2578 C6A20004 */ lwc1 $f2, 4($s5) -/* 0E70AC 7F0B257C 4602003C */ c.lt.s $f0, $f2 -/* 0E70B0 7F0B2580 00000000 */ nop -/* 0E70B4 7F0B2584 4503FFD7 */ bc1tl .L7F0B24E4 -/* 0E70B8 7F0B2588 00008025 */ move $s0, $zero -/* 0E70BC 7F0B258C C6AC0010 */ lwc1 $f12, 0x10($s5) -/* 0E70C0 7F0B2590 460C003C */ c.lt.s $f0, $f12 -/* 0E70C4 7F0B2594 00000000 */ nop -/* 0E70C8 7F0B2598 4503FFD2 */ bc1tl .L7F0B24E4 -/* 0E70CC 7F0B259C 00008025 */ move $s0, $zero -/* 0E70D0 7F0B25A0 C6A00028 */ lwc1 $f0, 0x28($s5) -/* 0E70D4 7F0B25A4 4602003C */ c.lt.s $f0, $f2 -/* 0E70D8 7F0B25A8 00000000 */ nop -/* 0E70DC 7F0B25AC 4503FFCD */ bc1tl .L7F0B24E4 -/* 0E70E0 7F0B25B0 00008025 */ move $s0, $zero -/* 0E70E4 7F0B25B4 460C003C */ c.lt.s $f0, $f12 -/* 0E70E8 7F0B25B8 00000000 */ nop -/* 0E70EC 7F0B25BC 4503FFC9 */ bc1tl .L7F0B24E4 -/* 0E70F0 7F0B25C0 00008025 */ move $s0, $zero -/* 0E70F4 7F0B25C4 10000006 */ b .L7F0B25E0 -/* 0E70F8 7F0B25C8 8FBF003C */ lw $ra, 0x3c($sp) -.L7F0B25CC: -/* 0E70FC 7F0B25CC 24E70001 */ addiu $a3, $a3, 1 -/* 0E7100 7F0B25D0 00E8082A */ slt $at, $a3, $t0 -/* 0E7104 7F0B25D4 1420FFAC */ bnez $at, .L7F0B2488 -/* 0E7108 7F0B25D8 24630008 */ addiu $v1, $v1, 8 -.L7F0B25DC: -/* 0E710C 7F0B25DC 8FBF003C */ lw $ra, 0x3c($sp) -.L7F0B25E0: -/* 0E7110 7F0B25E0 8FB00018 */ lw $s0, 0x18($sp) -/* 0E7114 7F0B25E4 8FB1001C */ lw $s1, 0x1c($sp) -/* 0E7118 7F0B25E8 8FB20020 */ lw $s2, 0x20($sp) -/* 0E711C 7F0B25EC 8FB30024 */ lw $s3, 0x24($sp) -/* 0E7120 7F0B25F0 8FB40028 */ lw $s4, 0x28($sp) -/* 0E7124 7F0B25F4 8FB5002C */ lw $s5, 0x2c($sp) -/* 0E7128 7F0B25F8 8FB60030 */ lw $s6, 0x30($sp) -/* 0E712C 7F0B25FC 8FB70034 */ lw $s7, 0x34($sp) -/* 0E7130 7F0B2600 8FBE0038 */ lw $fp, 0x38($sp) -/* 0E7134 7F0B2604 03E00008 */ jr $ra -/* 0E7138 7F0B2608 27BD0048 */ addiu $sp, $sp, 0x48 -) -#endif - - - - - -#ifdef NONMATCHING /** - * arg5 type is wrong, first offset needs to be a float -*/ -s32 sub_GAME_7F0B260C(StandTile *tile, s32 index, f32 p_x, f32 p_z, s32 arg4, struct StandTileLocusCallbackRecord *arg5) + * Address: 7F0B23AC + */ +void stanGetTileOrderedPointWorldPos(StandTile *tile, s32 pointnum, coord3d *out) { - if (arg5->unk00 < (f32)tile->points[index].y - && arg5->unk00 < (f32)tile->points[(index + 1) % STAN_TAIL_E(tile)].y) + StandTilePoint *point; + f32 scale; + + pointnum = tile->tail.half >> (8 - (pointnum * 4)); + + point = &tile->points[pointnum & 0xf]; + + scale = inv_level_scale; + + out->x = point->x * scale; + out->y = point->y * scale; + out->z = point->z * scale; +} + + +void stanGetMoveBondCollisionTiles(StandTile **tile1, StandTile **tile2, coord3d *coords) +{ + StandTile *curtileStore; + StandTile *baseTile; + StandTile *linktile; + s32 curtilePointI; + s32 i; + s32 j; + s32 k; + s32 target; + + baseTile = dword_CODE_bss_8007BA0C; + + target = baseTile->tail.hdrTail.pointCount & 0xf; + + i = 0; + + if (i < target) { - return 1; + do + { + linktile = (StandTile *)((u8 *)standTileStart + (baseTile->points[i].link << 3)); + + if ((baseTile->points[i].link >> 4) != 0) + { + s32 linkTileMid; + + linkTileMid = linktile->mid.half; + + if (g_StanTileSpecialFlags[linkTileMid >> 12] & STANTILEFLAG_LADDER) + { +#ifdef DEBUG + assert(getsides(linktile) == 3); +#endif + curtilePointI = (i + 2) % 3; + + *tile1 = baseTile; + *tile2 = linktile; + + j = 0; + curtileStore = baseTile; + + while (1) + { + for (k = 0; k < 3; k++) + { + stanGetTileOrderedPointWorldPos( + linktile, + ((j >> 2) + k) % 3, + (coord3d *)((s32)coords + (((j + k) & 3) * 0xc))); + } + + stanGetTileOrderedPointWorldPos( + curtileStore, + curtilePointI, + (coord3d *)((s32)coords + (((j + 3) & 3) * 0xc))); + + j++; + + if (j == 12) + { +#ifdef DEBUG + osSyncPrintf("rotate==12\n"); +#endif + break; + } + + if (!(coords[2].y < coords[0].y) + && !(coords[2].y < coords[1].y) + && !(coords[3].y < coords[0].y) + && !(coords[3].y < coords[1].y)) + { + break; + } + } + + return; + } + } + + i++; + + if (i < target) + { + continue; + } + + break; + } + while (TRUE); + } +#ifdef DEBUG + osSyncPrintf("Ladder %s has no neighbouring ladder stan\n", GetStanRoomID(baseTile)); +#endif +} + + +/** + * Address: 7F0B260C + * + * Callback function. + * + * For a given edge, return true if the edge is vertically above yThreshold. + */ +bool stanLocusEdgeIsAboveY(StandTile *tile, s32 edgeIndex, f32 edgeDist, f32 distToPointA, f32 distToPointB, f32 *yThreshold) +{ + s32 nextIndex; + s32 pointCount; + f32 *threshold; + s32 pointCountReload; + + threshold = yThreshold; + + if (*yThreshold < (f32)tile->points[edgeIndex].y) + { + /** + * The duplicated point count calculation is required for matching. + * This is really just nextIndex = (edgeIndex + 1) % pointCount; + */ + pointCount = (tile->tail.half >> 12) & 0xf; + pointCountReload = (tile->tail.half >> 12) & 0xf; + + nextIndex = (edgeIndex + 1) % pointCount; + + pointCount = pointCountReload; + + if (*threshold < (f32)tile->points[nextIndex].y) + { + return TRUE; + } } - return 0; - + return FALSE; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B260C -/* 0E713C 7F0B260C 000570C0 */ sll $t6, $a1, 3 -/* 0E7140 7F0B2610 AFA60008 */ sw $a2, 8($sp) -/* 0E7144 7F0B2614 AFA7000C */ sw $a3, 0xc($sp) -/* 0E7148 7F0B2618 008E7821 */ addu $t7, $a0, $t6 -/* 0E714C 7F0B261C 85F8000A */ lh $t8, 0xa($t7) -/* 0E7150 7F0B2620 8FA60014 */ lw $a2, 0x14($sp) -/* 0E7154 7F0B2624 44982000 */ mtc1 $t8, $f4 -/* 0E7158 7F0B2628 C4C00000 */ lwc1 $f0, ($a2) -/* 0E715C 7F0B262C 468021A0 */ cvt.s.w $f6, $f4 -/* 0E7160 7F0B2630 4606003C */ c.lt.s $f0, $f6 -/* 0E7164 7F0B2634 00000000 */ nop -/* 0E7168 7F0B2638 4502001D */ bc1fl .L7F0B26B0 -/* 0E716C 7F0B263C 00001025 */ move $v0, $zero -/* 0E7170 7F0B2640 84880006 */ lh $t0, 6($a0) -/* 0E7174 7F0B2644 24B90001 */ addiu $t9, $a1, 1 -/* 0E7178 7F0B2648 00084B03 */ sra $t1, $t0, 0xc -/* 0E717C 7F0B264C 312A000F */ andi $t2, $t1, 0xf -/* 0E7180 7F0B2650 032A001A */ div $zero, $t9, $t2 -/* 0E7184 7F0B2654 00001010 */ mfhi $v0 -/* 0E7188 7F0B2658 000258C0 */ sll $t3, $v0, 3 -/* 0E718C 7F0B265C 008B6021 */ addu $t4, $a0, $t3 -/* 0E7190 7F0B2660 858D000A */ lh $t5, 0xa($t4) -/* 0E7194 7F0B2664 15400002 */ bnez $t2, .L7F0B2670 -/* 0E7198 7F0B2668 00000000 */ nop -/* 0E719C 7F0B266C 0007000D */ break 7 -.L7F0B2670: -/* 0E71A0 7F0B2670 2401FFFF */ li $at, -1 -/* 0E71A4 7F0B2674 15410004 */ bne $t2, $at, .L7F0B2688 -/* 0E71A8 7F0B2678 3C018000 */ lui $at, 0x8000 -/* 0E71AC 7F0B267C 17210002 */ bne $t9, $at, .L7F0B2688 -/* 0E71B0 7F0B2680 00000000 */ nop -/* 0E71B4 7F0B2684 0006000D */ break 6 -.L7F0B2688: -/* 0E71B8 7F0B2688 448D4000 */ mtc1 $t5, $f8 -/* 0E71BC 7F0B268C 00000000 */ nop -/* 0E71C0 7F0B2690 468042A0 */ cvt.s.w $f10, $f8 -/* 0E71C4 7F0B2694 460A003C */ c.lt.s $f0, $f10 -/* 0E71C8 7F0B2698 00000000 */ nop -/* 0E71CC 7F0B269C 45020004 */ bc1fl .L7F0B26B0 -/* 0E71D0 7F0B26A0 00001025 */ move $v0, $zero -/* 0E71D4 7F0B26A4 03E00008 */ jr $ra -/* 0E71D8 7F0B26A8 24020001 */ li $v0, 1 - -/* 0E71DC 7F0B26AC 00001025 */ move $v0, $zero -.L7F0B26B0: -/* 0E71E0 7F0B26B0 03E00008 */ jr $ra -/* 0E71E4 7F0B26B4 00000000 */ nop -) -#endif - - - /** * US address 7F0B26B8. */ -s32 sub_GAME_7F0B26B8(StandTile **tile, f32 target_x, f32 target_z, f32 b_z, f32 param_5) +s32 stanTestLocusEdgeAboveY(StandTile **tile, f32 target_x, f32 target_z, f32 radius, f32 yThreshold) { f32 data; - data = param_5 * level_scale; + data = yThreshold * level_scale; /// TODO: Why is this cast wrong? - return sub_GAME_7F0B1DDC(tile, target_x, target_z, b_z, NULL, sub_GAME_7F0B260C, NULL, (struct StandTileLocusCallbackRecord*)&data); + return sub_GAME_7F0B1DDC(tile, target_x, target_z, radius, NULL, stanLocusEdgeIsAboveY, NULL, (struct StandTileLocusCallbackRecord*)&data); } -#ifdef NONMATCHING +typedef struct BfsSearchLocals { + StandTile **stackptr; + s32 pad48; + s32 pad4c; + s32 pad50; + s32 pad54; + s32 lastnumtiles; +} BfsSearchLocals; + + // Horrifc BFS on tiles -// stanFillSearch() -StandTile *sub_GAME_7F0B2718(StandTile *srcTile, tilePredicate_t tilePred) +// +// Four things look like they could be improved +// 1. The outer loop always restarts at bfsTileStack[0]. +// The next 'wave' will process tiles it already scanned in the second wave +// Neighbors are checked again needlessly +// This has a high cost if the waypoint the game is trying to find +// is far away on the stans +// Should reset to the previous value of loc.lastnumtiles +// 2. 'seenCount' can become really big because it's all the stans discovered so far +// Neighbor checks thus become exponentially expensive +// There could be a faster way to check that a stan was already visited +// 3. The closest pad to a tile is something that could be precomputed +// because it's static and never changes at run-time +// 4. This function is called at one single location and the second arg +// is always the same. It could return the result from tilePred already. +StandTile *stanFillSearch(StandTile *starttile, tilePredicate_t predicate) // stanFillSearch is the canonical name for this function { - StandTile *tile; - u32 i; - u32 pointCount; - s32 link; - StandTile *linkTile; - - s32 countForIter; - - s32 pntI; + StandTile **stackbase; + BfsSearchLocals loc; + StandTile **tileStartAddr; + StandTilePoint *point; + StandTile *linkedtile; s32 seenCount; - s32 linkI; - s32 linkOffset; - s32 madeProgress; // bool + s32 pointindex; + s32 pointcount; + s32 link; + s32 i; + s32 stackindex; + StandTile **tileStack; - // 0x44(sp) looks to be the ptr onto the stack - - // madeProgress = - if (tilePred(srcTile)) { - return srcTile; + if (predicate(starttile)) + { + return starttile; } - bfsTileStack[0] = srcTile; + tileStartAddr = &standTileStart; + + // Add the starting tile to the discovered tile stack. + bfsTileStack[0] = starttile; seenCount = 1; - countForIter = seenCount; - do { - // Loop over everyone for this iteration - for(pntI=0; pntI < countForIter; pntI++) + // Process the discovered tiles in waves. loc.lastnumtiles is the number of tiles that existed at the beginning of the current wave. + for (loc.lastnumtiles = 1, tileStack = bfsTileStack, stackbase = tileStack;; loc.lastnumtiles = seenCount) + { + stackindex = 0; + + if (seenCount > 0) { + // This restarts at the beginning of the stack for every wave rather than beginning at the new frontier. + loc.stackptr = tileStack; - tile = bfsTileStack[pntI]; - pointCount = STAN_POINT_COUNT(tile); - - // Loop over linked tiles - for (linkI = 0; linkI < pointCount; linkI++) + do { - link = tile->points[linkI].link; - linkOffset = link * 8; // somehow it's doing this << 3 before testing the >> 4, but this isn't working. + pointindex = 0; + starttile = *loc.stackptr; + point = (StandTilePoint *)starttile; + pointcount = (starttile->tail.half >> 12) & 0xf; - if (link >> 4 != 0) { - linkTile = (struct StandTile*)((s32)standTileStart + linkOffset); - - // Loop to see if this is a new tile (disgusting) - // If was a < and the while was a != though - for (i = 0; i < seenCount; i++) + // Loop over the tile's linked points. + if (pointcount > 0) + { + do { - if (bfsTileStack[i] == linkTile) { - goto LAB_7f0b283c; // continue named loop? + link = point[1].link; + + // This assignment is logically redundant but needed for matching. + tileStartAddr = &standTileStart; + + // Keep this expression as written. Simplifying it to "link << 3" changes register usage. + linkedtile = (StandTile *)(((u8 *)(*tileStartAddr)) + (link << ((0, 3)))); + + // A zero high portion indicates that there is no valid linked tile to visit. + if ((link >> 4) != 0) + { + // Loop to see if this is a new tile (disgusting) + for (i = 0; i < seenCount; i++) + { + if (linkedtile == tileStack[i]) + { + goto nextpoint; + } + } + + // Return as soon as a matching tile is found. + if (predicate(linkedtile)) + { + return linkedtile; + } + + // Add the newly discovered tile to the stack. + stackbase[seenCount] = linkedtile; + seenCount++; + + if ((u32)seenCount >= 351) + { + #ifdef DEBUG + osSyncPrintf("Out of confs[] in stanFillSearch()\n"); + #endif + return 0; + } + + pointcount = (starttile->tail.half >> 12) & 0xf; } + +nextpoint: + pointindex++; + point++; } - - if (tilePred(linkTile)) { - return linkTile; - } - - bfsTileStack[seenCount] = linkTile; - if (350 < seenCount + 1) - { // as written - #ifdef DEBUG - osSyncPrintf("Out of confs[] in stanFillSearch()\n"); - #endif - return 0; - } - - pointCount = STAN_POINT_COUNT(tile); - seenCount = seenCount + 1; - + while (pointindex < pointcount); } - // they may also have needed something to put by the label - LAB_7f0b283c: linkI = linkI; + stackindex++; + loc.stackptr++; } - + while (stackindex < loc.lastnumtiles); } + if (predicate || tileStartAddr); + // We only continue if we made progress with this iteration - if (seenCount == countForIter){ - break; + if (seenCount != loc.lastnumtiles) + { + // This is logically redundant because both pointers refer to bfsTileStack, but it's still needed for matching. + stackbase = tileStack; + + continue; } - // does appear to be down here - two li,X,1s initially and a mov zero in the delay slot - countForIter = seenCount; - - } while (1); - - - return 0; + // No new tiles were discovered so the search is exhausted. + return 0; + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B2718 -/* 0E7248 7F0B2718 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0E724C 7F0B271C AFBF003C */ sw $ra, 0x3c($sp) -/* 0E7250 7F0B2720 AFB5002C */ sw $s5, 0x2c($sp) -/* 0E7254 7F0B2724 AFB40028 */ sw $s4, 0x28($sp) -/* 0E7258 7F0B2728 0080A025 */ move $s4, $a0 -/* 0E725C 7F0B272C 00A0A825 */ move $s5, $a1 -/* 0E7260 7F0B2730 AFBE0038 */ sw $fp, 0x38($sp) -/* 0E7264 7F0B2734 AFB70034 */ sw $s7, 0x34($sp) -/* 0E7268 7F0B2738 AFB60030 */ sw $s6, 0x30($sp) -/* 0E726C 7F0B273C AFB30024 */ sw $s3, 0x24($sp) -/* 0E7270 7F0B2740 AFB20020 */ sw $s2, 0x20($sp) -/* 0E7274 7F0B2744 AFB1001C */ sw $s1, 0x1c($sp) -/* 0E7278 7F0B2748 00A0F809 */ jalr $a1 -/* 0E727C 7F0B274C AFB00018 */ sw $s0, 0x18($sp) -/* 0E7280 7F0B2750 10400003 */ beqz $v0, .L7F0B2760 -/* 0E7284 7F0B2754 3C018008 */ lui $at, %hi(bfsTileStack) -/* 0E7288 7F0B2758 10000049 */ b .L7F0B2880 -/* 0E728C 7F0B275C 02801025 */ move $v0, $s4 -.L7F0B2760: -/* 0E7290 7F0B2760 240E0001 */ li $t6, 1 -/* 0E7294 7F0B2764 3C178008 */ lui $s7, %hi(bfsTileStack) -/* 0E7298 7F0B2768 3C168004 */ lui $s6, %hi(standTileStart) -/* 0E729C 7F0B276C AC34BA10 */ sw $s4, %lo(bfsTileStack)($at) -/* 0E72A0 7F0B2770 24110001 */ li $s1, 1 -/* 0E72A4 7F0B2774 26D60F58 */ addiu $s6, %lo(standTileStart) # addiu $s6, $s6, 0xf58 -/* 0E72A8 7F0B2778 26F7BA10 */ addiu $s7, %lo(bfsTileStack) # addiu $s7, $s7, -0x45f0 -/* 0E72AC 7F0B277C AFAE0058 */ sw $t6, 0x58($sp) -/* 0E72B0 7F0B2780 0000F025 */ move $fp, $zero -.L7F0B2784: -/* 0E72B4 7F0B2784 1A200037 */ blez $s1, .L7F0B2864 -/* 0E72B8 7F0B2788 3C0F8008 */ lui $t7, %hi(bfsTileStack) -/* 0E72BC 7F0B278C 25EFBA10 */ addiu $t7, %lo(bfsTileStack) # addiu $t7, $t7, -0x45f0 -/* 0E72C0 7F0B2790 AFAF0044 */ sw $t7, 0x44($sp) -.L7F0B2794: -/* 0E72C4 7F0B2794 8FB80044 */ lw $t8, 0x44($sp) -/* 0E72C8 7F0B2798 00009025 */ move $s2, $zero -/* 0E72CC 7F0B279C 8F140000 */ lw $s4, ($t8) -/* 0E72D0 7F0B27A0 86840006 */ lh $a0, 6($s4) -/* 0E72D4 7F0B27A4 02809825 */ move $s3, $s4 -/* 0E72D8 7F0B27A8 0004CB03 */ sra $t9, $a0, 0xc -/* 0E72DC 7F0B27AC 3324000F */ andi $a0, $t9, 0xf -/* 0E72E0 7F0B27B0 58800026 */ blezl $a0, .L7F0B284C -/* 0E72E4 7F0B27B4 8FB90044 */ lw $t9, 0x44($sp) -.L7F0B27B8: -/* 0E72E8 7F0B27B8 9662000E */ lhu $v0, 0xe($s3) -/* 0E72EC 7F0B27BC 8ECA0000 */ lw $t2, ($s6) -/* 0E72F0 7F0B27C0 000248C0 */ sll $t1, $v0, 3 -/* 0E72F4 7F0B27C4 00025903 */ sra $t3, $v0, 4 -/* 0E72F8 7F0B27C8 1160001B */ beqz $t3, .L7F0B2838 -/* 0E72FC 7F0B27CC 012A8021 */ addu $s0, $t1, $t2 -/* 0E7300 7F0B27D0 1A200009 */ blez $s1, .L7F0B27F8 -/* 0E7304 7F0B27D4 00001025 */ move $v0, $zero -/* 0E7308 7F0B27D8 3C038008 */ lui $v1, %hi(bfsTileStack) -/* 0E730C 7F0B27DC 2463BA10 */ addiu $v1, %lo(bfsTileStack) # addiu $v1, $v1, -0x45f0 -.L7F0B27E0: -/* 0E7310 7F0B27E0 8C6C0000 */ lw $t4, ($v1) -/* 0E7314 7F0B27E4 24420001 */ addiu $v0, $v0, 1 -/* 0E7318 7F0B27E8 520C0014 */ beql $s0, $t4, .L7F0B283C -/* 0E731C 7F0B27EC 26520001 */ addiu $s2, $s2, 1 -/* 0E7320 7F0B27F0 1451FFFB */ bne $v0, $s1, .L7F0B27E0 -/* 0E7324 7F0B27F4 24630004 */ addiu $v1, $v1, 4 -.L7F0B27F8: -/* 0E7328 7F0B27F8 02A0F809 */ jalr $s5 -/* 0E732C 7F0B27FC 02002025 */ move $a0, $s0 -/* 0E7330 7F0B2800 10400003 */ beqz $v0, .L7F0B2810 -/* 0E7334 7F0B2804 00116880 */ sll $t5, $s1, 2 -/* 0E7338 7F0B2808 1000001D */ b .L7F0B2880 -/* 0E733C 7F0B280C 02001025 */ move $v0, $s0 -.L7F0B2810: -/* 0E7340 7F0B2810 26310001 */ addiu $s1, $s1, 1 -/* 0E7344 7F0B2814 02ED7021 */ addu $t6, $s7, $t5 -/* 0E7348 7F0B2818 2E21015F */ sltiu $at, $s1, 0x15f -/* 0E734C 7F0B281C 14200003 */ bnez $at, .L7F0B282C -/* 0E7350 7F0B2820 ADD00000 */ sw $s0, ($t6) -/* 0E7354 7F0B2824 10000016 */ b .L7F0B2880 -/* 0E7358 7F0B2828 00001025 */ move $v0, $zero -.L7F0B282C: -/* 0E735C 7F0B282C 86840006 */ lh $a0, 6($s4) -/* 0E7360 7F0B2830 00047B03 */ sra $t7, $a0, 0xc -/* 0E7364 7F0B2834 31E4000F */ andi $a0, $t7, 0xf -.L7F0B2838: -/* 0E7368 7F0B2838 26520001 */ addiu $s2, $s2, 1 -.L7F0B283C: -/* 0E736C 7F0B283C 0244082A */ slt $at, $s2, $a0 -/* 0E7370 7F0B2840 1420FFDD */ bnez $at, .L7F0B27B8 -/* 0E7374 7F0B2844 26730008 */ addiu $s3, $s3, 8 -/* 0E7378 7F0B2848 8FB90044 */ lw $t9, 0x44($sp) -.L7F0B284C: -/* 0E737C 7F0B284C 8FA90058 */ lw $t1, 0x58($sp) -/* 0E7380 7F0B2850 27DE0001 */ addiu $fp, $fp, 1 -/* 0E7384 7F0B2854 27280004 */ addiu $t0, $t9, 4 -/* 0E7388 7F0B2858 03C9082A */ slt $at, $fp, $t1 -/* 0E738C 7F0B285C 1420FFCD */ bnez $at, .L7F0B2794 -/* 0E7390 7F0B2860 AFA80044 */ sw $t0, 0x44($sp) -.L7F0B2864: -/* 0E7394 7F0B2864 8FAA0058 */ lw $t2, 0x58($sp) -/* 0E7398 7F0B2868 0000F025 */ move $fp, $zero -/* 0E739C 7F0B286C 522A0004 */ beql $s1, $t2, .L7F0B2880 -/* 0E73A0 7F0B2870 00001025 */ move $v0, $zero -/* 0E73A4 7F0B2874 1000FFC3 */ b .L7F0B2784 -/* 0E73A8 7F0B2878 AFB10058 */ sw $s1, 0x58($sp) -/* 0E73AC 7F0B287C 00001025 */ move $v0, $zero -.L7F0B2880: -/* 0E73B0 7F0B2880 8FBF003C */ lw $ra, 0x3c($sp) -/* 0E73B4 7F0B2884 8FB00018 */ lw $s0, 0x18($sp) -/* 0E73B8 7F0B2888 8FB1001C */ lw $s1, 0x1c($sp) -/* 0E73BC 7F0B288C 8FB20020 */ lw $s2, 0x20($sp) -/* 0E73C0 7F0B2890 8FB30024 */ lw $s3, 0x24($sp) -/* 0E73C4 7F0B2894 8FB40028 */ lw $s4, 0x28($sp) -/* 0E73C8 7F0B2898 8FB5002C */ lw $s5, 0x2c($sp) -/* 0E73CC 7F0B289C 8FB60030 */ lw $s6, 0x30($sp) -/* 0E73D0 7F0B28A0 8FB70034 */ lw $s7, 0x34($sp) -/* 0E73D4 7F0B28A4 8FBE0038 */ lw $fp, 0x38($sp) -/* 0E73D8 7F0B28A8 03E00008 */ jr $ra -/* 0E73DC 7F0B28AC 27BD0060 */ addiu $sp, $sp, 0x60 -) -#endif - - /** @@ -5140,103 +2842,83 @@ void copy_tile_RGB_as_24bit(StandTile *tile, f32 p_x, f32 p_z, u8 *rtn) } -f32 sub_GAME_7F0B2C74(StandTile *tile, f32 *heights); - -#ifdef NONMATCHING - -// Very interesting. The target has a load of filler crap including instructions like "c.lt.S f2,f2" -// Presumably something has been generated from a macro but using the fixed value 0 - -f32 sub_GAME_7F0B2C74(StandTile *tile, f32 *heights) +/** + * Address: 7F0B2C74 + */ +void stanGetTileHeaderCYBounds(StandTile *tile, f32 *out) { - f32 y; + f32 y0; + f32 y1; + f32 y2; + f32 min; + f32 max; - y = tile->points[STAN_TRIPLE_TO_PNT_INDEX(tile, 0)].y; + /* + * This seems like a bug. + * The function is structured like it wants the min/max Y of the + * three packed indices headerC/headerD/headerE, but + * all three reads use headerC: (tail >> 8) & 0xf. + * + * Ultimately the function call chain leads nowhere so this is + * dead code and the bug doesn't matter. + */ + y0 = (f32)tile->points[(tile->tail.half >> 8) & 0xf].y; + y1 = (f32)tile->points[(tile->tail.half >> 8) & 0xf].y; + y2 = (f32)tile->points[(tile->tail.half >> 8) & 0xf].y; - heights[0] = y * inv_level_scale; - heights[1] = y * inv_level_scale; + min = y1; - return; + if (y0 < y1) + { + min = y0; + } + if (y2 < min) + { + min = y2; + } + + max = y0; + + if (y0 < y1) + { + max = y1; + } + + if (max < y2) + { + max = y2; + } + + out[0] = min * inv_level_scale; + out[1] = max * inv_level_scale; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B2C74 -/* 0E77A4 7F0B2C74 848E0006 */ lh $t6, 6($a0) -/* 0E77A8 7F0B2C78 3C028004 */ lui $v0, %hi(inv_level_scale) -/* 0E77AC 7F0B2C7C 24420F48 */ addiu $v0, %lo(inv_level_scale) # addiu $v0, $v0, 0xf48 -/* 0E77B0 7F0B2C80 000E7A03 */ sra $t7, $t6, 8 -/* 0E77B4 7F0B2C84 31F8000F */ andi $t8, $t7, 0xf -/* 0E77B8 7F0B2C88 0018C8C0 */ sll $t9, $t8, 3 -/* 0E77BC 7F0B2C8C 00994021 */ addu $t0, $a0, $t9 -/* 0E77C0 7F0B2C90 8509000A */ lh $t1, 0xa($t0) -/* 0E77C4 7F0B2C94 44892000 */ mtc1 $t1, $f4 -/* 0E77C8 7F0B2C98 00000000 */ nop -/* 0E77CC 7F0B2C9C 468020A0 */ cvt.s.w $f2, $f4 -/* 0E77D0 7F0B2CA0 4602103C */ c.lt.s $f2, $f2 -/* 0E77D4 7F0B2CA4 46001006 */ mov.s $f0, $f2 -/* 0E77D8 7F0B2CA8 46001306 */ mov.s $f12, $f2 -/* 0E77DC 7F0B2CAC 46001386 */ mov.s $f14, $f2 -/* 0E77E0 7F0B2CB0 45000002 */ bc1f .L7F0B2CBC -/* 0E77E4 7F0B2CB4 46001406 */ mov.s $f16, $f2 -/* 0E77E8 7F0B2CB8 46001406 */ mov.s $f16, $f2 -.L7F0B2CBC: -/* 0E77EC 7F0B2CBC 4610703C */ c.lt.s $f14, $f16 -/* 0E77F0 7F0B2CC0 00000000 */ nop -/* 0E77F4 7F0B2CC4 45020003 */ bc1fl .L7F0B2CD4 -/* 0E77F8 7F0B2CC8 460C003C */ c.lt.s $f0, $f12 -/* 0E77FC 7F0B2CCC 46007406 */ mov.s $f16, $f14 -/* 0E7800 7F0B2CD0 460C003C */ c.lt.s $f0, $f12 -.L7F0B2CD4: -/* 0E7804 7F0B2CD4 46000086 */ mov.s $f2, $f0 -/* 0E7808 7F0B2CD8 45020003 */ bc1fl .L7F0B2CE8 -/* 0E780C 7F0B2CDC 460E103C */ c.lt.s $f2, $f14 -/* 0E7810 7F0B2CE0 46006086 */ mov.s $f2, $f12 -/* 0E7814 7F0B2CE4 460E103C */ c.lt.s $f2, $f14 -.L7F0B2CE8: -/* 0E7818 7F0B2CE8 00000000 */ nop -/* 0E781C 7F0B2CEC 45020003 */ bc1fl .L7F0B2CFC -/* 0E7820 7F0B2CF0 C4460000 */ lwc1 $f6, ($v0) -/* 0E7824 7F0B2CF4 46007086 */ mov.s $f2, $f14 -/* 0E7828 7F0B2CF8 C4460000 */ lwc1 $f6, ($v0) -.L7F0B2CFC: -/* 0E782C 7F0B2CFC 46068202 */ mul.s $f8, $f16, $f6 -/* 0E7830 7F0B2D00 E4A80000 */ swc1 $f8, ($a1) -/* 0E7834 7F0B2D04 C44A0000 */ lwc1 $f10, ($v0) -/* 0E7838 7F0B2D08 460A1482 */ mul.s $f18, $f2, $f10 -/* 0E783C 7F0B2D0C 03E00008 */ jr $ra -/* 0E7840 7F0B2D10 E4B20004 */ swc1 $f18, 4($a1) -) -#endif - - - -f32 sub_GAME_7F0B2D14(StandTile *tile) { +/** + * Address: 7F0B2D14 + */ +f32 stanGetTileHeaderCMinY(StandTile *tile) { f32 vs[2]; - sub_GAME_7F0B2C74(tile, vs); + stanGetTileHeaderCYBounds(tile, vs); return vs[0]; } - - void debugStanView(s8 joyX, s8 joyY, u16 joyBtns) { return; } -Gfx * sub_GAME_7F0B2D48(Gfx *arg0) { + +/** + * Address: 7F0B2D48 + */ +Gfx * stanRenderDebugStanView(Gfx *arg0) { return arg0; } - - - - /** * Get 24bit id stanIdHi from id string * @param stanIdHi: 1bit Type, 15bit Integer ID. @@ -5334,66 +3016,35 @@ void stanPackId(char *id, u16 *stanIdHi, u8 *stanIdLo) } +struct StandTilePoint *stanMatchTileName(char *id) +{ + StandTilePoint *tile; + u16 stanIdHi; + u8 stanIdLo; + s16 tmp; + if (*id == '\0') { + return NULL; + } + stanPackId(id, &stanIdHi, &stanIdLo); -#ifdef NONMATCHING -// TODO -void stanMatchTileName(void) { + tile = stan_prefix->ptr_firstroom; + while (*(u32 *)tile != 0) { + if ((u16)tile->x == stanIdHi) { + if (*((u8 *)&tile->y) == stanIdLo) { + return tile; + } + } + + tmp = tile->link; + tile = (StandTilePoint *)((u8 *)tile + + list_of_tilesizes[(tmp >> 12) & 0xf]); + } + + return NULL; } -#else -GLOBAL_ASM( -.text -glabel stanMatchTileName -/* 0E7988 7F0B2E58 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0E798C 7F0B2E5C AFBF0014 */ sw $ra, 0x14($sp) -/* 0E7990 7F0B2E60 908E0000 */ lbu $t6, ($a0) -/* 0E7994 7F0B2E64 27A50022 */ addiu $a1, $sp, 0x22 -/* 0E7998 7F0B2E68 15C00003 */ bnez $t6, .L7F0B2E78 -/* 0E799C 7F0B2E6C 00000000 */ nop -/* 0E79A0 7F0B2E70 1000001F */ b .L7F0B2EF0 -/* 0E79A4 7F0B2E74 00001025 */ move $v0, $zero -.L7F0B2E78: -/* 0E79A8 7F0B2E78 0FC2CB54 */ jal stanPackId -/* 0E79AC 7F0B2E7C 27A60021 */ addiu $a2, $sp, 0x21 -/* 0E79B0 7F0B2E80 3C0F8008 */ lui $t7, %hi(stan_prefix) -/* 0E79B4 7F0B2E84 8DEFB120 */ lw $t7, %lo(stan_prefix)($t7) -/* 0E79B8 7F0B2E88 3C058004 */ lui $a1, %hi(list_of_tilesizes) -/* 0E79BC 7F0B2E8C 24A50F4C */ addiu $a1, %lo(list_of_tilesizes) # addiu $a1, $a1, 0xf4c -/* 0E79C0 7F0B2E90 8DE30004 */ lw $v1, 4($t7) -/* 0E79C4 7F0B2E94 97A40022 */ lhu $a0, 0x22($sp) -/* 0E79C8 7F0B2E98 8C780000 */ lw $t8, ($v1) -/* 0E79CC 7F0B2E9C 53000014 */ beql $t8, $zero, .L7F0B2EF0 -/* 0E79D0 7F0B2EA0 00001025 */ move $v0, $zero -/* 0E79D4 7F0B2EA4 94790000 */ lhu $t9, ($v1) -.L7F0B2EA8: -/* 0E79D8 7F0B2EA8 93A80021 */ lbu $t0, 0x21($sp) -/* 0E79DC 7F0B2EAC 54990007 */ bnel $a0, $t9, .L7F0B2ECC -/* 0E79E0 7F0B2EB0 84620006 */ lh $v0, 6($v1) -/* 0E79E4 7F0B2EB4 90690002 */ lbu $t1, 2($v1) -/* 0E79E8 7F0B2EB8 55090004 */ bnel $t0, $t1, .L7F0B2ECC -/* 0E79EC 7F0B2EBC 84620006 */ lh $v0, 6($v1) -/* 0E79F0 7F0B2EC0 1000000B */ b .L7F0B2EF0 -/* 0E79F4 7F0B2EC4 00601025 */ move $v0, $v1 -/* 0E79F8 7F0B2EC8 84620006 */ lh $v0, 6($v1) -.L7F0B2ECC: -/* 0E79FC 7F0B2ECC 00025303 */ sra $t2, $v0, 0xc -/* 0E7A00 7F0B2ED0 314B000F */ andi $t3, $t2, 0xf -/* 0E7A04 7F0B2ED4 00AB6021 */ addu $t4, $a1, $t3 -/* 0E7A08 7F0B2ED8 918D0000 */ lbu $t5, ($t4) -/* 0E7A0C 7F0B2EDC 01A31821 */ addu $v1, $t5, $v1 -/* 0E7A10 7F0B2EE0 8C6E0000 */ lw $t6, ($v1) -/* 0E7A14 7F0B2EE4 55C0FFF0 */ bnezl $t6, .L7F0B2EA8 -/* 0E7A18 7F0B2EE8 94790000 */ lhu $t9, ($v1) -/* 0E7A1C 7F0B2EEC 00001025 */ move $v0, $zero -.L7F0B2EF0: -/* 0E7A20 7F0B2EF0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E7A24 7F0B2EF4 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0E7A28 7F0B2EF8 03E00008 */ jr $ra -/* 0E7A2C 7F0B2EFC 00000000 */ nop -) -#endif #ifdef XBLADEBUG @@ -5418,95 +3069,60 @@ StandTile RemovedDebugFunctionOrXBLAUnique_7F0B2EFC() #endif - void sub_GAME_7F0B2F00(StandTilePoint** arg0) { *arg0 = stanMatchTileName(*arg0); } - - - -#ifdef NONMATCHING -// To try -void *stanDetermineEOF(struct StanPrefixRecord *r, s32 arg1, s32 arg2) +void stanDetermineEOF(struct StanPrefixRecord *file /* canonically r */, s32 origBase, u8 *newBase) { - int iVar1; - StandTile *local_20; - StandTile **local_18; + s32 delta; + void **roomPtr; + StandTile *tile; + u8 *tileSizes; + + delta = ((s32) newBase) - origBase; + stan_prefix = file; + + #ifdef DEBUG + assert(*r==0); + #endif + + standTileStart = (StandTile *)(((s32)file->ptr_firstroom + delta) - 0x80); + ptr_firstroom_0 = (s32)file->ptr_firstroom + delta; + + newBase = list_of_tilesizes; + roomPtr = (void **)&file->ptr_firstroom; + + if (file->ptr_firstroom != NULL) + { + do + { + *roomPtr = (void *) ((s32) (*roomPtr) + delta); + roomPtr++; + } + while (*roomPtr != NULL); + } + + tile = (StandTile *) (roomPtr + ((0, 1))); + + if ((*(s32 *) tile) != 0) + { + do + { + stanTileEnd = tile; - iVar1 = param_3._4_4_ - param_2._4_4_; - stanTileStart = r->ptr_firstroom + iVar1 + -0x80; - ptr_firstroom_0 = r->ptr_firstroom + iVar1; - stanPrefix = r; - #ifdef DEBUG - assert(*r==0); - #endif - - for (local_18 = &r->ptr_firstroom; *local_18 != NULL; local_18 = local_18 + 1) - { - *local_18 = *local_18 + iVar1; - } - for (local_20 = local_18 + 1; *local_20 != 0; local_20 = getNextStan(local_20)) - { - D_80040F60 = local_20; - } - stanPrefix = r; - return; + // Fake but required for matching. + if (tile->tail.half); + + tile = (StandTile *)((s32)tile + + (tileSizes = newBase)[(tile->tail.half >> 0xc) & 0xf]); + } + while (*(s32 *) tile != 0); + } + + stan_prefix = file; } -#else -GLOBAL_ASM( -.text -glabel stanDetermineEOF -/* 0E7A5C 7F0B2F2C 3C088008 */ lui $t0, %hi(stan_prefix) -/* 0E7A60 7F0B2F30 2508B120 */ addiu $t0, %lo(stan_prefix) # addiu $t0, $t0, -0x4ee0 -/* 0E7A64 7F0B2F34 AD040000 */ sw $a0, ($t0) -/* 0E7A68 7F0B2F38 8C8E0004 */ lw $t6, 4($a0) -/* 0E7A6C 7F0B2F3C 00C51023 */ subu $v0, $a2, $a1 -/* 0E7A70 7F0B2F40 3C018004 */ lui $at, %hi(standTileStart) -/* 0E7A74 7F0B2F44 01C27821 */ addu $t7, $t6, $v0 -/* 0E7A78 7F0B2F48 25F8FF80 */ addiu $t8, $t7, -0x80 -/* 0E7A7C 7F0B2F4C AC380F58 */ sw $t8, %lo(standTileStart)($at) -/* 0E7A80 7F0B2F50 8C990004 */ lw $t9, 4($a0) -/* 0E7A84 7F0B2F54 3C018004 */ lui $at, %hi(ptr_firstroom_0) -/* 0E7A88 7F0B2F58 3C068004 */ lui $a2, %hi(list_of_tilesizes) -/* 0E7A8C 7F0B2F5C 03224821 */ addu $t1, $t9, $v0 -/* 0E7A90 7F0B2F60 AC290F5C */ sw $t1, %lo(ptr_firstroom_0)($at) -/* 0E7A94 7F0B2F64 8C8A0004 */ lw $t2, 4($a0) -/* 0E7A98 7F0B2F68 24870004 */ addiu $a3, $a0, 4 -/* 0E7A9C 7F0B2F6C 24C60F4C */ addiu $a2, %lo(list_of_tilesizes) # addiu $a2, $a2, 0xf4c -/* 0E7AA0 7F0B2F70 11400008 */ beqz $t2, .L7F0B2F94 -/* 0E7AA4 7F0B2F74 3C058004 */ lui $a1, %hi(D_80040F60) -/* 0E7AA8 7F0B2F78 8CE30000 */ lw $v1, ($a3) -/* 0E7AAC 7F0B2F7C 00625821 */ addu $t3, $v1, $v0 -.L7F0B2F80: -/* 0E7AB0 7F0B2F80 8CE30004 */ lw $v1, 4($a3) -/* 0E7AB4 7F0B2F84 ACEB0000 */ sw $t3, ($a3) -/* 0E7AB8 7F0B2F88 24E70004 */ addiu $a3, $a3, 4 -/* 0E7ABC 7F0B2F8C 5460FFFC */ bnezl $v1, .L7F0B2F80 -/* 0E7AC0 7F0B2F90 00625821 */ addu $t3, $v1, $v0 -.L7F0B2F94: -/* 0E7AC4 7F0B2F94 24E20004 */ addiu $v0, $a3, 4 -/* 0E7AC8 7F0B2F98 8C4C0000 */ lw $t4, ($v0) -/* 0E7ACC 7F0B2F9C 24A50F60 */ addiu $a1, %lo(D_80040F60) # addiu $a1, $a1, 0xf60 -/* 0E7AD0 7F0B2FA0 1180000B */ beqz $t4, .L7F0B2FD0 -/* 0E7AD4 7F0B2FA4 00000000 */ nop -/* 0E7AD8 7F0B2FA8 ACA20000 */ sw $v0, ($a1) -.L7F0B2FAC: -/* 0E7ADC 7F0B2FAC 84430006 */ lh $v1, 6($v0) -/* 0E7AE0 7F0B2FB0 00036B03 */ sra $t5, $v1, 0xc -/* 0E7AE4 7F0B2FB4 31AE000F */ andi $t6, $t5, 0xf -/* 0E7AE8 7F0B2FB8 00CE7821 */ addu $t7, $a2, $t6 -/* 0E7AEC 7F0B2FBC 91F80000 */ lbu $t8, ($t7) -/* 0E7AF0 7F0B2FC0 03021021 */ addu $v0, $t8, $v0 -/* 0E7AF4 7F0B2FC4 8C590000 */ lw $t9, ($v0) -/* 0E7AF8 7F0B2FC8 5720FFF8 */ bnezl $t9, .L7F0B2FAC -/* 0E7AFC 7F0B2FCC ACA20000 */ sw $v0, ($a1) -.L7F0B2FD0: -/* 0E7B00 7F0B2FD0 03E00008 */ jr $ra -/* 0E7B04 7F0B2FD4 AD040000 */ sw $a0, ($t0) -) -#endif /** @@ -5533,8 +3149,13 @@ s32 sub_GAME_7F0B2FE0(StandTile *tile) return sub_GAME_7F0B4F9C(room); } -f32 sub_GAME_7F0B3004(StandTile *tile) { - return sub_GAME_7F0B2D14(tile); +/** + * Address: 7F0B3004 + * + * Unused. + */ +f32 stanGetTileHeaderCMinYWrapper(StandTile *tile) { + return stanGetTileHeaderCMinY(tile); } Gfx * sub_GAME_7F0B3024(Gfx *ptrdl, StandTilePoint *tile_point, u32 RGBAColor) { @@ -5617,7 +3238,7 @@ Gfx * sub_GAME_7F0B312C(Gfx *arg0, s32 arg1) psStack0000001c = ppuStack0000002c[local_30]; } while (*psStack0000001c >> 0xf == cStack00000027); *psStack0000001c = *psStack0000001c ^ 0x8000; - sub_GAME_7F0AF760(psStack0000001c); + stanTileHasZeroArea(psStack0000001c); iVar3 = sub_GAME_7F0B3044(); if (iVar3 != 0) { Function_8238AC90(psStack0000001c,uStack00000014,uVar5,param_4,param_5,param_6,uVar6); @@ -5652,50 +3273,17 @@ Gfx * sub_GAME_7F0B312C(Gfx *arg0, s32 arg1) return arg0; } -#ifdef NONMATCHING -// Only difference is an extra sw a1,0x34(sp) appearing. -// There is the unused first argument which may have the wrong type -int sub_GAME_7F0B3138(void* unused, StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, - int cdtypes, f32 unkHeight, f32 unkA) { - return stanTestLineUnobstructed(pTile, p_x, p_z, dest_x, dest_z, cdtypes, unkHeight, unkA, 0, 1); +/** + * Unreferenced. + */ +s32 sub_GAME_7F0B3138(StandTile *tile, StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, s32 cdtypes, f32 unkHeight, f32 unkA) +{ + // Fake but needed for matching. + if (pTile); + + return stanTestLineUnobstructed(pTile, p_x, p_z, dest_x, dest_z, cdtypes, unkHeight, unkA, 0.0f, 1.0f); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B3138 -/* 0E7C68 7F0B3138 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0E7C6C 7F0B313C 44866000 */ mtc1 $a2, $f12 -/* 0E7C70 7F0B3140 44877000 */ mtc1 $a3, $f14 -/* 0E7C74 7F0B3144 AFA40030 */ sw $a0, 0x30($sp) -/* 0E7C78 7F0B3148 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0E7C7C 7F0B314C 44818000 */ mtc1 $at, $f16 -/* 0E7C80 7F0B3150 C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0E7C84 7F0B3154 8FAE0048 */ lw $t6, 0x48($sp) -/* 0E7C88 7F0B3158 C7A6004C */ lwc1 $f6, 0x4c($sp) -/* 0E7C8C 7F0B315C C7A80050 */ lwc1 $f8, 0x50($sp) -/* 0E7C90 7F0B3160 44805000 */ mtc1 $zero, $f10 -/* 0E7C94 7F0B3164 00A02025 */ move $a0, $a1 -/* 0E7C98 7F0B3168 AFBF002C */ sw $ra, 0x2c($sp) -/* 0E7C9C 7F0B316C 44056000 */ mfc1 $a1, $f12 -/* 0E7CA0 7F0B3170 44067000 */ mfc1 $a2, $f14 -/* 0E7CA4 7F0B3174 8FA70040 */ lw $a3, 0x40($sp) -/* 0E7CA8 7F0B3178 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0E7CAC 7F0B317C E7B00024 */ swc1 $f16, 0x24($sp) -/* 0E7CB0 7F0B3180 AFAE0014 */ sw $t6, 0x14($sp) -/* 0E7CB4 7F0B3184 E7A60018 */ swc1 $f6, 0x18($sp) -/* 0E7CB8 7F0B3188 E7A8001C */ swc1 $f8, 0x1c($sp) -/* 0E7CBC 7F0B318C 0FC2C389 */ jal stanTestLineUnobstructed -/* 0E7CC0 7F0B3190 E7AA0020 */ swc1 $f10, 0x20($sp) -/* 0E7CC4 7F0B3194 8FBF002C */ lw $ra, 0x2c($sp) -/* 0E7CC8 7F0B3198 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0E7CCC 7F0B319C 03E00008 */ jr $ra -/* 0E7CD0 7F0B31A0 00000000 */ nop -) -#endif - - - void sub_GAME_7F0B31A4(s32 arg0, StandTile *arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5, f32 arg6, f32 arg7) { diff --git a/src/game/stan.h b/src/game/stan.h index c136d70f..d7860878 100644 --- a/src/game/stan.h +++ b/src/game/stan.h @@ -26,6 +26,28 @@ struct move_bond_collision { struct coord3d sp1A8; }; +typedef enum StanCollisionResult { + STAN_COLLISION_NONE = -2, + STAN_COLLISION_FOUND = 2, + STAN_COLLISION_TRAVERSAL_LIMIT = 5 +} StanCollisionResult; + +typedef struct StanRoomBounds { + union { + struct { + s16 minX; + s16 minY; + s16 minZ; + s16 maxX; + s16 maxY; + s16 maxZ; + }; + struct { + s16 min[3]; + s16 max[3]; + }; + }; +} StanRoomBounds; ///////////////// // extern @@ -34,6 +56,9 @@ extern f32 stanSavedColl_someMin; extern PropRecord *stanSavedColl_posData; extern struct StandTile *standTileStart; extern s32 stanlinelog_flag; +extern StandTile *firststaninroom[139]; +extern StanRoomBounds g_StanRoomBounds[139]; +extern s32 dword_CODE_bss_8007B9DC; ///////////////// // prototypes @@ -42,11 +67,11 @@ extern s32 stanlinelog_flag; void noteTileRoomIfDifferentToPrev( StandTile *tile, StandTile *unused, struct StandTileWalkCallbackRecord *data); void stanInit(void); - +void setLevelScale(f32 ls); void debugStanView(s8 joyX, s8 joyY, u16 joyBtns); void sub_GAME_7F0AF630(s32 arg0); -void sub_GAME_7F0B1CC4(void); -Gfx * sub_GAME_7F0B2D48(Gfx *arg0); +void stanResetHits(void); +Gfx * stanRenderDebugStanView(Gfx *arg0); Gfx * sub_GAME_7F0B303C(Gfx *arg0); Gfx * sub_GAME_7F0B3034(Gfx *arg0); Gfx * sub_GAME_7F0B312C(Gfx *arg0, s32 arg1); @@ -55,12 +80,12 @@ s32 walkTilesBetweenPoints_NoCallback(StandTile **tileStack, f32 start_x, f32 st s32 stanTestPointWithinTileBoundsMaybe(StandTile *tile, f32 p_x, f32 p_z); f32 stanGetPositionYValue(StandTile* tile, f32 p_x, f32 p_z); s32 getCollisionEdge_maybe(coord3d *pntA, coord3d *pntB); -s32 sub_GAME_7F0B26B8(StandTile **tile, f32 target_x, f32 target_z, f32 b_z, f32 param_5); +s32 stanTestLocusEdgeAboveY(StandTile **tile, f32 target_x, f32 target_z, f32 radius, f32 yThreshold); s32 sub_GAME_7F0B20D0(StandTile** tileStack, f32 target_x, f32 target_z, f32 unknown); s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, int cdtypes, f32 unkHeight, f32 unkA, f32 unkB, f32 unkC); -StandTile* sub_GAME_7F0B2718(StandTile* srcTile, tilePredicate_t tilePred); -s32 sub_GAME_7F0B0D0C(StandTile *tile, f32 start_x, f32 start_z, StandTile **tilePtr, f32 end_x, f32 end_z, s32 *roomBuf, s32 maxBufSize); +StandTile* stanFillSearch(StandTile* srcTile, tilePredicate_t tilePred); +s32 sub_GAME_7F0B0D0C(StandTile *tile, f32 start_x, f32 start_z, StandTile **destTile, f32 dest_x, f32 dest_z, s32 *roomBuffer, s32 maxBufSize); s32 sub_GAME_7F0B0C24(StandTile **tileStack, f32 start_x, f32 start_z, f32 dest_x, f32 dest_z, s32 *roomBuffer, s32 *rtnCountSize, s32 maxBufSize); s32 stanTestVolume(StandTile **, f32 posX, f32 posY, f32 radius, s32 cdtypes, f32 float1, f32 float2); s32 getTileRoom(StandTile* tile); @@ -70,11 +95,13 @@ s32 stanTileDistanceRelated(struct StandTile **arg0, f32 arg1, f32 arg2, f32 arg s32 stanGetLocusField0(struct StandTileLocusCallbackRecord *arg0); s32 stanGetLocusCount(struct StandTileLocusCallbackRecord *arg0); f32 distBetweenPoints2d(f32 o_x,f32 o_z,f32 p_x,f32 p_z); -bool sub_GAME_7F0B17E4(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3); -f32 sub_GAME_7F0B16C4(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3); -void stanGetMoveBondCollisionTiles(struct StandTile **arg0, struct StandTile **arg1, struct move_bond_collision *arg2); +bool stanPointProjectsOntoEdge(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3); +f32 stanGetSignedPointLineDistance(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3); +void stanGetMoveBondCollisionTiles(StandTile **tile1, StandTile **tile2, coord3d *coords); struct StandTile *sub_GAME_7F0AFB78(f32 *arg_x, f32 *arg_y, f32 *arg_z, f32 arg3); -s32 sub_GAME_7F0B0688(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7); -struct StandTile *stanMatchTileName(char *); +bool doSegmentsIntersect(f32 start1X, f32 start1Z, f32 end1X, f32 end1Z, f32 start2X, f32 start2Z, f32 end2X, f32 end2Z); +struct StandTilePoint *stanMatchTileName(char *id); s32 isPointInsideTriStandTileUnscaled_Maybe(struct StandTile *tile, f32 p_x, f32 p_z); +s32 sub_GAME_7F0B21B0(StandTile **tileStack, f32 target_x, f32 target_z, f32 radius, s32 *rooms, s32 *count_rtn, s32 bufMax); +StandTile *stanFindTileBelowPos(coord3d *pos, u8 *rooms, f32 *yRtn); #endif diff --git a/src/game/sub_GAME_7F01D1C0.s b/src/game/sub_GAME_7F01D1C0.s new file mode 100644 index 00000000..181192c9 --- /dev/null +++ b/src/game/sub_GAME_7F01D1C0.s @@ -0,0 +1,93 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +# +# Address: 7F01D1C0 +# +# Unreferenced. +# +# The j instruction in the assembly indicates this is likely hand-written assembly +# since the IDO compiler wouldn't typically emit that instruction in this situation. +# + +.section .text, "ax" +.balign 16 +glabel sub_GAME_7F01D1C0 +/* 051CF0 7F01D1C0 27BDFFF0 */ addiu $sp, $sp, -0x10 +/* 051CF4 7F01D1C4 240C00FF */ li $t4, 255 +/* 051CF8 7F01D1C8 90880000 */ lbu $t0, ($a0) +/* 051CFC 7F01D1CC 24840001 */ addiu $a0, $a0, 1 +.L7F01D1D0: +/* 051D00 7F01D1D0 90890000 */ lbu $t1, ($a0) +/* 051D04 7F01D1D4 24840001 */ addiu $a0, $a0, 1 +/* 051D08 7F01D1D8 152C001A */ bne $t1, $t4, .L7F01D244 +/* 051D0C 7F01D1DC 240B00FF */ li $t3, 255 +/* 051D10 7F01D1E0 90890000 */ lbu $t1, ($a0) +/* 051D14 7F01D1E4 240A0000 */ li $t2, 0 +/* 051D18 7F01D1E8 112C000C */ beq $t1, $t4, .L7F01D21C +/* 051D1C 7F01D1EC 24840001 */ addiu $a0, $a0, 1 +.L7F01D1F0: +/* 051D20 7F01D1F0 01495021 */ addu $t2, $t2, $t1 +/* 051D24 7F01D1F4 19200005 */ blez $t1, .L7F01D20C +/* 051D28 7F01D1F8 2529FFFF */ addiu $t1, $t1, -1 +.L7F01D1FC: +/* 051D2C 7F01D1FC A0EB0000 */ sb $t3, ($a3) +/* 051D30 7F01D200 24E70001 */ addiu $a3, $a3, 1 +/* 051D34 7F01D204 1D20FFFD */ bgtz $t1, .L7F01D1FC +/* 051D38 7F01D208 2529FFFF */ addiu $t1, $t1, -1 +.L7F01D20C: +/* 051D3C 7F01D20C 90890000 */ lbu $t1, ($a0) +/* 051D40 7F01D210 396B00FF */ xori $t3, $t3, 0xff +/* 051D44 7F01D214 152CFFF6 */ bne $t1, $t4, .L7F01D1F0 +/* 051D48 7F01D218 24840001 */ addiu $a0, $a0, 1 +.L7F01D21C: +/* 051D4C 7F01D21C 0145082A */ slt $at, $t2, $a1 +/* 051D50 7F01D220 10200006 */ beqz $at, .L7F01D23C +/* 051D54 7F01D224 254A0001 */ addiu $t2, $t2, 1 +.L7F01D228: +/* 051D58 7F01D228 A0EB0000 */ sb $t3, ($a3) +/* 051D5C 7F01D22C 24E70001 */ addiu $a3, $a3, 1 +/* 051D60 7F01D230 0145082A */ slt $at, $t2, $a1 +/* 051D64 7F01D234 1420FFFC */ bnez $at, .L7F01D228 +/* 051D68 7F01D238 254A0001 */ addiu $t2, $t2, 1 +.L7F01D23C: +/* 051D6C 7F01D23C 0BC074A7 */ j .L7F01D29C +/* 051D70 7F01D240 24C6FFFF */ addiu $a2, $a2, -1 + +.L7F01D244: +/* 051D74 7F01D244 312A001F */ andi $t2, $t1, 0x1f +/* 051D78 7F01D248 01485021 */ addu $t2, $t2, $t0 +/* 051D7C 7F01D24C 00094942 */ srl $t1, $t1, 5 +/* 051D80 7F01D250 25290001 */ addiu $t1, $t1, 1 +/* 051D84 7F01D254 00C93023 */ subu $a2, $a2, $t1 +.L7F01D258: +/* 051D88 7F01D258 01405825 */ move $t3, $t2 +/* 051D8C 7F01D25C 19600005 */ blez $t3, .L7F01D274 +/* 051D90 7F01D260 256BFFFF */ addiu $t3, $t3, -1 +.L7F01D264: +/* 051D94 7F01D264 A0EC0000 */ sb $t4, ($a3) +/* 051D98 7F01D268 24E70001 */ addiu $a3, $a3, 1 +/* 051D9C 7F01D26C 1D60FFFD */ bgtz $t3, .L7F01D264 +/* 051DA0 7F01D270 256BFFFF */ addiu $t3, $t3, -1 +.L7F01D274: +/* 051DA4 7F01D274 00AA5823 */ subu $t3, $a1, $t2 +/* 051DA8 7F01D278 19600005 */ blez $t3, .L7F01D290 +/* 051DAC 7F01D27C 256BFFFF */ addiu $t3, $t3, -1 +.L7F01D280: +/* 051DB0 7F01D280 A0E00000 */ sb $zero, ($a3) +/* 051DB4 7F01D284 24E70001 */ addiu $a3, $a3, 1 +/* 051DB8 7F01D288 1D60FFFD */ bgtz $t3, .L7F01D280 +/* 051DBC 7F01D28C 256BFFFF */ addiu $t3, $t3, -1 +.L7F01D290: +/* 051DC0 7F01D290 2529FFFF */ addiu $t1, $t1, -1 +/* 051DC4 7F01D294 1D20FFF0 */ bgtz $t1, .L7F01D258 +/* 051DC8 7F01D298 00000000 */ nop +.L7F01D29C: +/* 051DCC 7F01D29C 1CC0FFCC */ bgtz $a2, .L7F01D1D0 +/* 051DD0 7F01D2A0 00801025 */ move $v0, $a0 +/* 051DD4 7F01D2A4 03E00008 */ jr $ra +/* 051DD8 7F01D2A8 27BD0010 */ addiu $sp, $sp, 0x10 diff --git a/src/game/tex.c b/src/game/tex.c index 5d4e5b08..12c3ec11 100644 --- a/src/game/tex.c +++ b/src/game/tex.c @@ -1,116 +1,109 @@ #include #include "gbi_extension.h" +#include "lightfixture.h" #include "lv.h" #include "image.h" #include "tex.h" -// bss -//8008D140 s32 g_TexLutMode; -//8008D144 -s32 dword_CODE_bss_8008D144; -//8008D148 +s32 dword_CODE_bss_8008D144; // unused/padding s_bss_8008D148 g_TexTileStates[8]; //[0x160]; //8 entries of 0x2c ea -//8008D2A8 s_bss_8008D2A8 g_TexTileSizes[8]; //[0xA0]; //8 entries of 0x14 ea -//8008D348 -s32 dword_CODE_bss_8008D348; +s32 dword_CODE_bss_8008D348; // unused/padding - -// data //D:8004E760 -u16 D_8004E760[] = {HIT_BULLET_STONE1_SFX, HIT_BULLET_STONE2_SFX}; +u16 default_hit_sfx[] = {HIT_BULLET_STONE1_SFX, HIT_BULLET_STONE2_SFX}; //D:8004E764 -u8 D_8004E764[] = {0x7, 0x0, 0x0, 0x0}; +u8 default_impact_types[] = {0x7, 0x0, 0x0, 0x0}; //D:8004E768 -struct image_sound isnd_default = {&D_8004E760, &D_8004E764, 0x0, 0x1}; +struct image_sound isnd_default = {default_hit_sfx, default_impact_types, 0x0, 0x1}; //D:8004E774 -u16 D_8004E774[] = {HIT_BULLET_STONE1_SFX, HIT_BULLET_STONE2_SFX}; +u16 stone_hit_sfx[] = {HIT_BULLET_STONE1_SFX, HIT_BULLET_STONE2_SFX}; //D:8004E778 -u8 D_8004E778[] = {0x1, 0x0, 0x0, 0x0}; +u8 stone_impact_types[] = {0x1, 0x0, 0x0, 0x0}; //D:8004E77C -struct image_sound isnd_stone = {&D_8004E774, &D_8004E778, 0x2, 0x1}; +struct image_sound isnd_stone = {stone_hit_sfx, stone_impact_types, 0x2, 0x1}; //D:8004E788 -u16 D_8004E788[] = {HIT_BULLET_WOOD_SFX, HIT_BULLET_WOOD2_SFX}; +u16 wood_hit_sfx[] = {HIT_BULLET_WOOD_SFX, HIT_BULLET_WOOD2_SFX}; //D:8004E78C -u8 D_8004E78C[] = {0x1, 0x0, 0x0, 0x0}; +u8 wood_impact_types[] = {0x1, 0x0, 0x0, 0x0}; //D:8004E790 -struct image_sound isnd_wood = {&D_8004E788, &D_8004E78C, 0x2, 0x1}; +struct image_sound isnd_wood = {wood_hit_sfx, wood_impact_types, 0x2, 0x1}; //D:8004E79C -u16 D_8004E79C[] = {HIT_BULLET_METAL_A_SFX, HIT_BULLET_METAL_A4_SFX, HIT_BULLET_METAL_A3_SFX, 0x00}; +u16 metal_hit_sfx[] = {HIT_BULLET_METAL_A_SFX, HIT_BULLET_METAL_A4_SFX, HIT_BULLET_METAL_A3_SFX, 0x00}; //D:8004E7A4 -u8 D_8004E7A4[] = {0x7, 0x0, 0x0, 0x0}; +u8 metal_impact_types[] = {0x7, 0x0, 0x0, 0x0}; //D:8004E7A8 -struct image_sound isnd_metal = {&D_8004E79C, &D_8004E7A4, 0x3, 0x1}; +struct image_sound isnd_metal = {metal_hit_sfx, metal_impact_types, 0x3, 0x1}; //D:8004E7B4 -u16 D_8004E7B4[] = {HIT_BULLET_GLASS_SFX, 0x00}; +u16 glass_hit_sfx[] = {HIT_BULLET_GLASS_SFX, 0x00}; //D:8004E7B8 -u8 D_8004E7B8[] = {0x4, 0x5, 0x6, 0x0}; +u8 glass_impact_types[] = {0x4, 0x5, 0x6, 0x0}; //D:8004E7BC -struct image_sound isnd_glass = {&D_8004E7B4, &D_8004E7B8, 0x1, 0x3}; +struct image_sound isnd_glass = {glass_hit_sfx, glass_impact_types, 0x1, 0x3}; //D:8004E7C8 -u16 D_8004E7C8[] = {HIT_BULLET_WATER_SFX, 0x00}; +u16 water_hit_sfx[] = {HIT_BULLET_WATER_SFX, 0x00}; //D:8004E7CC -u8 D_8004E7CC[] = {0, 0, 0, 0}; +u8 water_impact_types[] = {0, 0, 0, 0}; //D:8004E7D0 -struct image_sound isnd_water = {&D_8004E7C8, &D_8004E7CC, 0x1, 0x0}; +struct image_sound isnd_water = {water_hit_sfx, water_impact_types, 0x1, 0x0}; //D:8004E7DC -u16 D_8004E7DC[] = {HIT_BULLET_SNOW_SFX, 0x00}; +u16 snow_hit_sfx[] = {HIT_BULLET_SNOW_SFX, 0x00}; //D:8004E7E0 -u8 D_8004E7E0[] = {0x1, 0x0, 0x0, 0x0}; +u8 snow_impact_types[] = {0x1, 0x0, 0x0, 0x0}; //D:8004E7E4 -struct image_sound isnd_snow = {&D_8004E7DC, &D_8004E7E0, 0x1, 0x1}; +struct image_sound isnd_snow = {snow_hit_sfx, snow_impact_types, 0x1, 0x1}; //D:8004E7F0 -u16 D_8004E7F0[] = {HIT_BULLET_DIRT1_SFX, HIT_BULLET_DIRT2_SFX}; +u16 dirt_hit_sfx[] = {HIT_BULLET_DIRT1_SFX, HIT_BULLET_DIRT2_SFX}; //D:8004E7F4 -u8 D_8004E7F4[] = {0x2, 0x0, 0x0, 0x0}; +u8 dirt_impact_types[] = {0x2, 0x0, 0x0, 0x0}; //D:8004E7F8 -struct image_sound isnd_dirt = {&D_8004E7F0, &D_8004E7F4, 0x2, 0x1}; +struct image_sound isnd_dirt = {dirt_hit_sfx, dirt_impact_types, 0x2, 0x1}; //D:8004E804 -u16 D_8004E804[] = {HIT_BULLET_MUD1_SFX, HIT_BULLET_MUD2_SFX, HIT_BULLET_MUD3_SFX, 0x00}; +u16 mud_hit_sfx[] = {HIT_BULLET_MUD1_SFX, HIT_BULLET_MUD2_SFX, HIT_BULLET_MUD3_SFX, 0x00}; //D:8004E80C -u8 D_8004E80C[] = {0x2, 0x0, 0x0, 0x0}; +u8 mud_impact_types[] = {0x2, 0x0, 0x0, 0x0}; //D:8004E810 -struct image_sound isnd_mud = {&D_8004E804, &D_8004E80C, 0x3, 0x1}; +struct image_sound isnd_mud = {mud_hit_sfx, mud_impact_types, 0x3, 0x1}; //D:8004E81C -u16 D_8004E81C[] = {HIT_BULLET_TILE_SFX, 0x00}; +u16 tile_hit_sfx[] = {HIT_BULLET_TILE_SFX, 0x00}; //D:8004E820 -u8 D_8004E820[] = {0x1, 0x0, 0x0, 0x0}; +u8 tile_impact_types[] = {0x1, 0x0, 0x0, 0x0}; //D:8004E824 -struct image_sound isnd_tile = {&D_8004E81C, &D_8004E820, 0x1, 0x1}; +struct image_sound isnd_tile = {tile_hit_sfx, tile_impact_types, 0x1, 0x1}; //D:8004E830 -u16 D_8004E830[] = {HIT_METAL_OBJECT1_SFX, HIT_METAL_OBJECT2_SFX}; +u16 metal_object_hit_sfx[] = {HIT_METAL_OBJECT1_SFX, HIT_METAL_OBJECT2_SFX}; //D:8004E834 -u8 D_8004E834[] = {0x1, 0x7, 0x0, 0x0}; +u8 metal_object_impact_types[] = {0x1, 0x7, 0x0, 0x0}; //D:8004E838 -struct image_sound isnd_metalobj = {&D_8004E830, &D_8004E834, 0x2, 0x2}; +struct image_sound isnd_metalobj = {metal_object_hit_sfx, metal_object_impact_types, 0x2, 0x2}; //D:8004E844 -u16 D_8004E844[] = {HIT_BULLET_FLESH_SFX, 0x00}; +u16 character_hit_sfx[] = {HIT_BULLET_FLESH_SFX, 0x00}; //D:8004E848 -u8 D_8004E848[] = {0x2, 0x0, 0x0, 0x0}; +u8 character_impact_types[] = {0x2, 0x0, 0x0, 0x0}; //D:8004E84C -struct image_sound isnd_chr = {&D_8004E844, &D_8004E848, 0x1, 0x1}; +struct image_sound isnd_chr = {character_hit_sfx, character_impact_types, 0x1, 0x1}; //D:8004E858 -u16 D_8004E858[] = {HIT_BULLET_GLASS_SFX, 0x00}; +u16 translucent_glass_hit_sfx[] = {HIT_BULLET_GLASS_SFX, 0x00}; //D:8004E85C -u8 D_8004E85C[] = {0x11, 0x12, 0x13, 0x0}; +u8 translucent_glass_impact_types[] = {0x11, 0x12, 0x13, 0x0}; //D:8004E860 -struct image_sound isnd_glass_xlu = {&D_8004E858, &D_8004E85C, 0x1, 0x3}; +struct image_sound isnd_glass_xlu = {translucent_glass_hit_sfx, translucent_glass_impact_types, 0x1, 0x3}; //D:8004E86C -struct image_sound *D_8004E86C[] = { +struct image_sound *g_HitTypeSounds[] = { &isnd_default, &isnd_stone, &isnd_wood, @@ -143,7 +136,6 @@ char * image_sound_names[] = { }; - void nullsub_47(void) { return; } @@ -251,7 +243,7 @@ s32 texGetWidthAtLod(struct tex *tex, s32 lod) return width; } - if (tex->unk0c_02) + if (tex->hasExplicitLods) { for (i = 0; i < g_TexCacheCount; i++) { @@ -283,7 +275,7 @@ s32 texGetHeightAtLod(struct tex *tex, s32 lod) return height; } - if (tex->unk0c_02) + if (tex->hasExplicitLods) { for (i = 0; i < g_TexCacheCount; i++) { @@ -454,10 +446,10 @@ Gfx *texWriteTileFromDefinition(Gfx *gdl, struct tex *tex, s32 offset, s32 shift texModeToGbiMode(0), sp88 - s0->flag5, shifts); } - uls = (offset == 2 && !tex->unk0c_02 ? 2 : 0) + 0; - ult = (offset == 2 && !tex->unk0c_02 ? 2 : 0) + 0; - lrs = (offset == 2 && !tex->unk0c_02 ? 2 : 0) + ((tex->width - 1) << 2); - lrt = (offset == 2 && !tex->unk0c_02 ? 2 : 0) + ((tex->height - 1) << 2); + uls = (offset == 2 && !tex->hasExplicitLods ? 2 : 0) + 0; + ult = (offset == 2 && !tex->hasExplicitLods ? 2 : 0) + 0; + lrs = (offset == 2 && !tex->hasExplicitLods ? 2 : 0) + ((tex->width - 1) << 2); + lrt = (offset == 2 && !tex->hasExplicitLods ? 2 : 0) + ((tex->height - 1) << 2); if (texTrySetTileSize(0, uls, ult, lrs, lrt)) { @@ -499,7 +491,6 @@ Gfx* texWriteTextureCmd(Gfx* arg0, Gfx* arg1, struct tex* tex, s32 arg3) } -#ifdef NONMATCHING Gfx *texWriteLoadToTmemAddr(Gfx *gdl, struct tex *tex, s32 tmemoffset) { s32 depth; @@ -507,832 +498,178 @@ Gfx *texWriteLoadToTmemAddr(Gfx *gdl, struct tex *tex, s32 tmemoffset) texGetDepthAndSize(tex, &depth, &len); - if (tex->lutmodeindex == 0) { + if (tex->lutmodeindex == 0) + { gDPSetTextureImage(gdl++, tex->gbiformat, depth, 1, tex->data); - if (!g_TexPipeSynced) { - gDPPipeSync(gdl++); - g_TexPipeSynced = true; - } - - if (depth == G_IM_SIZ_16b && tmemoffset == 0) { - gDPLoadSync(gdl++); - gDPLoadBlock(gdl++, G_TX_LOADTILE, 0, 0, len - 1, 0); - } else { - if (texTrySetTileState(5, 0, depth, 0, tmemoffset, 0, 0, 0, 0, 0, 0)) { - gDPSetTile(gdl++, G_IM_FMT_RGBA, depth, 0, tmemoffset, 5, 0, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - } - - gDPLoadSync(gdl++); - gDPLoadBlock(gdl++, 5, 0, 0, len - 1, 0); - } - } else { - gDPSetTextureImage(gdl++, tex->gbiformat, depth, 1, tex->data); - - if (!g_TexPipeSynced) { - gDPPipeSync(gdl++); - g_TexPipeSynced = true; - } - - if (depth == G_IM_SIZ_16b && tmemoffset == 0) { - gDPLoadSync(gdl++); - gDPLoadBlock(gdl++, G_TX_LOADTILE, 0, 0, len - 1, 0); - } else { - if (texTrySetTileState(5, 0, depth, 0, tmemoffset, 0, 0, 0, 0, 0, 0)) { - gDPSetTile(gdl++, G_IM_FMT_RGBA, depth, 0, tmemoffset, 5, 0, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - } - - gDPLoadSync(gdl++); - gDPLoadBlock(gdl++, 5, 0, 0, len - 1, 0); - } - + if (texTrySetTileState(7, tex->gbiformat, depth, 0, tmemoffset, 0, 0, 0, 0, 0, 0)) { - s32 tmp = len; - s32 a2 = (u32)(0x3ff - tex->unk0a) < len ? (u32)(0x3ff - tex->unk0a) : 0; - - tmp -= a2; - - gDPLoadSync(gdl++); - gDPLoadTLUT06(gdl++, tmp, a2, tex->unk0a + tmp, a2); + gDPSetTile(gdl++, tex->gbiformat, depth, 0, tmemoffset, 7, 0, 0, 0, 0, 0, 0, 0); } + + gDPLoadSync(gdl++); + gDPLoadBlock(gdl++, 7, 0, 0, len - 1, 0); + gDPPipeSync(gdl++); + } + else + { + u32 uls; + u32 ult; + + gDPSetTextureImage(gdl++, tex->gbiformat, depth, 1, tex->data); + + if (texTrySetTileState(7, tex->gbiformat, depth, 0, tmemoffset, 0, 0, 0, 0, 0, 0)) + { + gDPSetTile(gdl++, tex->gbiformat, depth, 0, tmemoffset, 7, 0, 0, 0, 0, 0, 0, 0); + } + + gDPLoadSync(gdl++); + gDPLoadBlock(gdl++, 7, 0, 0, len - 1, 0); + gDPPipeSync(gdl++); + + uls = len; + + if ((u32)(0x3ff - tex->unk0a) < uls) + { + ult = 0x3ff - tex->unk0a; + } + else + { + ult = 0; + } + + uls -= ult; + + if (texTrySetTileState(7, 0, 0, 1, 0x100, 0, 0, 0, 0, 0, 0)) + { + gDPSetTile(gdl++, 0, 0, 1, 0x100, 7, 0, 0, 0, 0, 0, 0, 0); + } + + gDPLoadSync(gdl++); + gDPLoadTLUT07(gdl++, uls, ult, tex->unk0a + uls, ult); + gDPPipeSync(gdl++); } return gdl; } -#else -GLOBAL_ASM( -.text -glabel texWriteLoadToTmemAddr -/* 101BA8 7F0CD078 27BDFF70 */ addiu $sp, $sp, -0x90 -/* 101BAC 7F0CD07C AFB00034 */ sw $s0, 0x34($sp) -/* 101BB0 7F0CD080 00808025 */ move $s0, $a0 -/* 101BB4 7F0CD084 AFB10038 */ sw $s1, 0x38($sp) -/* 101BB8 7F0CD088 00A08825 */ move $s1, $a1 -/* 101BBC 7F0CD08C AFBF003C */ sw $ra, 0x3c($sp) -/* 101BC0 7F0CD090 AFA60098 */ sw $a2, 0x98($sp) -/* 101BC4 7F0CD094 00A02025 */ move $a0, $a1 -/* 101BC8 7F0CD098 27A5008C */ addiu $a1, $sp, 0x8c -/* 101BCC 7F0CD09C 0FC33275 */ jal texGetDepthAndSize -/* 101BD0 7F0CD0A0 27A60088 */ addiu $a2, $sp, 0x88 -/* 101BD4 7F0CD0A4 8E2E000C */ lw $t6, 0xc($s1) -/* 101BD8 7F0CD0A8 24040007 */ li $a0, 7 -/* 101BDC 7F0CD0AC 02001025 */ move $v0, $s0 -/* 101BE0 7F0CD0B0 000E7F82 */ srl $t7, $t6, 0x1e -/* 101BE4 7F0CD0B4 15E0004E */ bnez $t7, .L7F0CD1F0 -/* 101BE8 7F0CD0B8 3C01FD00 */ lui $at, 0xfd00 -/* 101BEC 7F0CD0BC 8E380008 */ lw $t8, 8($s1) -/* 101BF0 7F0CD0C0 8FAF008C */ lw $t7, 0x8c($sp) -/* 101BF4 7F0CD0C4 3C01FD00 */ lui $at, 0xfd00 -/* 101BF8 7F0CD0C8 0018CEC0 */ sll $t9, $t8, 0x1b -/* 101BFC 7F0CD0CC 00195F42 */ srl $t3, $t9, 0x1d -/* 101C00 7F0CD0D0 316C0007 */ andi $t4, $t3, 7 -/* 101C04 7F0CD0D4 000C6D40 */ sll $t5, $t4, 0x15 -/* 101C08 7F0CD0D8 31F80003 */ andi $t8, $t7, 3 -/* 101C0C 7F0CD0DC 0018CCC0 */ sll $t9, $t8, 0x13 -/* 101C10 7F0CD0E0 01A17025 */ or $t6, $t5, $at -/* 101C14 7F0CD0E4 01D95825 */ or $t3, $t6, $t9 -/* 101C18 7F0CD0E8 02001025 */ move $v0, $s0 -/* 101C1C 7F0CD0EC AC4B0000 */ sw $t3, ($v0) -/* 101C20 7F0CD0F0 8E2C0004 */ lw $t4, 4($s1) -/* 101C24 7F0CD0F4 26100008 */ addiu $s0, $s0, 8 -/* 101C28 7F0CD0F8 00003825 */ move $a3, $zero -/* 101C2C 7F0CD0FC AC4C0004 */ sw $t4, 4($v0) -/* 101C30 7F0CD100 8E250008 */ lw $a1, 8($s1) -/* 101C34 7F0CD104 8FB80098 */ lw $t8, 0x98($sp) -/* 101C38 7F0CD108 AFA00028 */ sw $zero, 0x28($sp) -/* 101C3C 7F0CD10C 00056EC0 */ sll $t5, $a1, 0x1b -/* 101C40 7F0CD110 000D2F42 */ srl $a1, $t5, 0x1d -/* 101C44 7F0CD114 AFA00024 */ sw $zero, 0x24($sp) -/* 101C48 7F0CD118 AFA00020 */ sw $zero, 0x20($sp) -/* 101C4C 7F0CD11C AFA0001C */ sw $zero, 0x1c($sp) -/* 101C50 7F0CD120 AFA00018 */ sw $zero, 0x18($sp) -/* 101C54 7F0CD124 AFA00014 */ sw $zero, 0x14($sp) -/* 101C58 7F0CD128 8FA6008C */ lw $a2, 0x8c($sp) -/* 101C5C 7F0CD12C 0FC3315D */ jal texTrySetTileState -/* 101C60 7F0CD130 AFB80010 */ sw $t8, 0x10($sp) -/* 101C64 7F0CD134 10400013 */ beqz $v0, .L7F0CD184 -/* 101C68 7F0CD138 3C0A0700 */ lui $t2, 0x700 -/* 101C6C 7F0CD13C 8E2E0008 */ lw $t6, 8($s1) -/* 101C70 7F0CD140 8FB8008C */ lw $t8, 0x8c($sp) -/* 101C74 7F0CD144 3C01F500 */ lui $at, 0xf500 -/* 101C78 7F0CD148 000ECEC0 */ sll $t9, $t6, 0x1b -/* 101C7C 7F0CD14C 00195F42 */ srl $t3, $t9, 0x1d -/* 101C80 7F0CD150 316C0007 */ andi $t4, $t3, 7 -/* 101C84 7F0CD154 000C6D40 */ sll $t5, $t4, 0x15 -/* 101C88 7F0CD158 8FAC0098 */ lw $t4, 0x98($sp) -/* 101C8C 7F0CD15C 01A17825 */ or $t7, $t5, $at -/* 101C90 7F0CD160 330E0003 */ andi $t6, $t8, 3 -/* 101C94 7F0CD164 000ECCC0 */ sll $t9, $t6, 0x13 -/* 101C98 7F0CD168 02001025 */ move $v0, $s0 -/* 101C9C 7F0CD16C 01F95825 */ or $t3, $t7, $t9 -/* 101CA0 7F0CD170 318D01FF */ andi $t5, $t4, 0x1ff -/* 101CA4 7F0CD174 016DC025 */ or $t8, $t3, $t5 -/* 101CA8 7F0CD178 AC580000 */ sw $t8, ($v0) -/* 101CAC 7F0CD17C AC4A0004 */ sw $t2, 4($v0) -/* 101CB0 7F0CD180 26100008 */ addiu $s0, $s0, 8 -.L7F0CD184: /*LoadTexture(){gDPLoadSync(); gDPLoadBlock();}*/ -/* 101CB4 7F0CD184 02001025 */ move $v0, $s0 -/* 101CB8 7F0CD188 26100008 */ addiu $s0, $s0, 8 -/* 101CBC 7F0CD18C 3C0EE600 */ lui $t6, 0xe600 -/* 101CC0 7F0CD190 AC4E0000 */ sw $t6, ($v0) -/* 101CC4 7F0CD194 AC400004 */ sw $zero, 4($v0) -/* 101CC8 7F0CD198 02002825 */ move $a1, $s0 -/* 101CCC 7F0CD19C 3C0FF300 */ lui $t7, 0xf300 -/* 101CD0 7F0CD1A0 ACAF0000 */ sw $t7, ($a1) -/* 101CD4 7F0CD1A4 8FA30088 */ lw $v1, 0x88($sp) -/* 101CD8 7F0CD1A8 26100008 */ addiu $s0, $s0, 8 -/* 101CDC 7F0CD1AC 3C0A0700 */ lui $t2, 0x700 -/* 101CE0 7F0CD1B0 2463FFFF */ addiu $v1, $v1, -1 -/* 101CE4 7F0CD1B4 286107FF */ slti $at, $v1, 0x7ff -/* 101CE8 7F0CD1B8 10200003 */ beqz $at, .L7F0CD1C8 -/* 101CEC 7F0CD1BC 02001025 */ move $v0, $s0 -/* 101CF0 7F0CD1C0 10000002 */ b .L7F0CD1CC -/* 101CF4 7F0CD1C4 00602025 */ move $a0, $v1 -.L7F0CD1C8: -/* 101CF8 7F0CD1C8 240407FF */ li $a0, 2047 -.L7F0CD1CC: -/* 101CFC 7F0CD1CC 30990FFF */ andi $t9, $a0, 0xfff -/* 101D00 7F0CD1D0 00196300 */ sll $t4, $t9, 0xc -/* 101D04 7F0CD1D4 018A5825 */ or $t3, $t4, $t2 -/* 101D08 7F0CD1D8 ACAB0004 */ sw $t3, 4($a1) -/* 101D0C 7F0CD1DC 3C0DE700 */ lui $t5, 0xe700 -/* 101D10 7F0CD1E0 AC4D0000 */ sw $t5, ($v0) -/* 101D14 7F0CD1E4 AC400004 */ sw $zero, 4($v0) -/* 101D18 7F0CD1E8 1000008B */ b .L7F0CD418 -/* 101D1C 7F0CD1EC 26100008 */ addiu $s0, $s0, 8 -.L7F0CD1F0: -/* 101D20 7F0CD1F0 8E380008 */ lw $t8, 8($s1) -/* 101D24 7F0CD1F4 8FAD008C */ lw $t5, 0x8c($sp) -/* 101D28 7F0CD1F8 26100008 */ addiu $s0, $s0, 8 -/* 101D2C 7F0CD1FC 001876C0 */ sll $t6, $t8, 0x1b -/* 101D30 7F0CD200 000E7F42 */ srl $t7, $t6, 0x1d -/* 101D34 7F0CD204 31F90007 */ andi $t9, $t7, 7 -/* 101D38 7F0CD208 00196540 */ sll $t4, $t9, 0x15 -/* 101D3C 7F0CD20C 31B80003 */ andi $t8, $t5, 3 -/* 101D40 7F0CD210 001874C0 */ sll $t6, $t8, 0x13 -/* 101D44 7F0CD214 01815825 */ or $t3, $t4, $at -/* 101D48 7F0CD218 016E7825 */ or $t7, $t3, $t6 -/* 101D4C 7F0CD21C AC4F0000 */ sw $t7, ($v0) -/* 101D50 7F0CD220 8E390004 */ lw $t9, 4($s1) -/* 101D54 7F0CD224 24040007 */ li $a0, 7 -/* 101D58 7F0CD228 00003825 */ move $a3, $zero -/* 101D5C 7F0CD22C AC590004 */ sw $t9, 4($v0) -/* 101D60 7F0CD230 8E250008 */ lw $a1, 8($s1) -/* 101D64 7F0CD234 8FB80098 */ lw $t8, 0x98($sp) -/* 101D68 7F0CD238 AFA00028 */ sw $zero, 0x28($sp) -/* 101D6C 7F0CD23C 000566C0 */ sll $t4, $a1, 0x1b -/* 101D70 7F0CD240 000C2F42 */ srl $a1, $t4, 0x1d -/* 101D74 7F0CD244 AFA00024 */ sw $zero, 0x24($sp) -/* 101D78 7F0CD248 AFA00020 */ sw $zero, 0x20($sp) -/* 101D7C 7F0CD24C AFA0001C */ sw $zero, 0x1c($sp) -/* 101D80 7F0CD250 AFA00018 */ sw $zero, 0x18($sp) -/* 101D84 7F0CD254 AFA00014 */ sw $zero, 0x14($sp) -/* 101D88 7F0CD258 8FA6008C */ lw $a2, 0x8c($sp) -/* 101D8C 7F0CD25C 0FC3315D */ jal texTrySetTileState -/* 101D90 7F0CD260 AFB80010 */ sw $t8, 0x10($sp) -/* 101D94 7F0CD264 10400014 */ beqz $v0, .L7F0CD2B8 -/* 101D98 7F0CD268 00003025 */ move $a2, $zero -/* 101D9C 7F0CD26C 8E2B0008 */ lw $t3, 8($s1) -/* 101DA0 7F0CD270 8FB8008C */ lw $t8, 0x8c($sp) -/* 101DA4 7F0CD274 3C01F500 */ lui $at, 0xf500 -/* 101DA8 7F0CD278 000B76C0 */ sll $t6, $t3, 0x1b -/* 101DAC 7F0CD27C 000E7F42 */ srl $t7, $t6, 0x1d -/* 101DB0 7F0CD280 31F90007 */ andi $t9, $t7, 7 -/* 101DB4 7F0CD284 00196540 */ sll $t4, $t9, 0x15 -/* 101DB8 7F0CD288 8FB90098 */ lw $t9, 0x98($sp) -/* 101DBC 7F0CD28C 01816825 */ or $t5, $t4, $at -/* 101DC0 7F0CD290 330B0003 */ andi $t3, $t8, 3 -/* 101DC4 7F0CD294 000B74C0 */ sll $t6, $t3, 0x13 -/* 101DC8 7F0CD298 02001025 */ move $v0, $s0 -/* 101DCC 7F0CD29C 01AE7825 */ or $t7, $t5, $t6 -/* 101DD0 7F0CD2A0 332C01FF */ andi $t4, $t9, 0x1ff -/* 101DD4 7F0CD2A4 3C0A0700 */ lui $t2, 0x700 -/* 101DD8 7F0CD2A8 01ECC025 */ or $t8, $t7, $t4 -/* 101DDC 7F0CD2AC AC580000 */ sw $t8, ($v0) -/* 101DE0 7F0CD2B0 AC4A0004 */ sw $t2, 4($v0) -/* 101DE4 7F0CD2B4 26100008 */ addiu $s0, $s0, 8 -.L7F0CD2B8: -/* 101DE8 7F0CD2B8 02001025 */ move $v0, $s0 -/* 101DEC 7F0CD2BC 26100008 */ addiu $s0, $s0, 8 -/* 101DF0 7F0CD2C0 3C0BE600 */ lui $t3, 0xe600 -/* 101DF4 7F0CD2C4 AC4B0000 */ sw $t3, ($v0) -/* 101DF8 7F0CD2C8 AC400004 */ sw $zero, 4($v0) -/* 101DFC 7F0CD2CC 02002825 */ move $a1, $s0 -/* 101E00 7F0CD2D0 3C0DF300 */ lui $t5, 0xf300 -/* 101E04 7F0CD2D4 ACAD0000 */ sw $t5, ($a1) -/* 101E08 7F0CD2D8 8FA30088 */ lw $v1, 0x88($sp) -/* 101E0C 7F0CD2DC 26100008 */ addiu $s0, $s0, 8 -/* 101E10 7F0CD2E0 3C0A0700 */ lui $t2, 0x700 -/* 101E14 7F0CD2E4 2463FFFF */ addiu $v1, $v1, -1 -/* 101E18 7F0CD2E8 286107FF */ slti $at, $v1, 0x7ff -/* 101E1C 7F0CD2EC 10200003 */ beqz $at, .L7F0CD2FC -/* 101E20 7F0CD2F0 02001025 */ move $v0, $s0 -/* 101E24 7F0CD2F4 10000002 */ b .L7F0CD300 -/* 101E28 7F0CD2F8 00602025 */ move $a0, $v1 -.L7F0CD2FC: -/* 101E2C 7F0CD2FC 240407FF */ li $a0, 2047 -.L7F0CD300: -/* 101E30 7F0CD300 308E0FFF */ andi $t6, $a0, 0xfff -/* 101E34 7F0CD304 000ECB00 */ sll $t9, $t6, 0xc -/* 101E38 7F0CD308 032A7825 */ or $t7, $t9, $t2 -/* 101E3C 7F0CD30C ACAF0004 */ sw $t7, 4($a1) -/* 101E40 7F0CD310 3C0CE700 */ lui $t4, 0xe700 -/* 101E44 7F0CD314 AC4C0000 */ sw $t4, ($v0) -/* 101E48 7F0CD318 AC400004 */ sw $zero, 4($v0) -/* 101E4C 7F0CD31C 9238000A */ lbu $t8, 0xa($s1) -/* 101E50 7F0CD320 8FA80088 */ lw $t0, 0x88($sp) -/* 101E54 7F0CD324 240B03FF */ li $t3, 1023 -/* 101E58 7F0CD328 01781823 */ subu $v1, $t3, $t8 -/* 101E5C 7F0CD32C 0068082B */ sltu $at, $v1, $t0 -/* 101E60 7F0CD330 10200003 */ beqz $at, .L7F0CD340 -/* 101E64 7F0CD334 26100008 */ addiu $s0, $s0, 8 -/* 101E68 7F0CD338 10000002 */ b .L7F0CD344 -/* 101E6C 7F0CD33C 00604825 */ move $t1, $v1 -.L7F0CD340: -/* 101E70 7F0CD340 00004825 */ move $t1, $zero -.L7F0CD344: -/* 101E74 7F0CD344 01094023 */ subu $t0, $t0, $t1 -/* 101E78 7F0CD348 240E0100 */ li $t6, 256 -/* 101E7C 7F0CD34C AFAE0010 */ sw $t6, 0x10($sp) -/* 101E80 7F0CD350 AFA80070 */ sw $t0, 0x70($sp) -/* 101E84 7F0CD354 24040007 */ li $a0, 7 -/* 101E88 7F0CD358 00002825 */ move $a1, $zero -/* 101E8C 7F0CD35C 24070001 */ li $a3, 1 -/* 101E90 7F0CD360 AFA00014 */ sw $zero, 0x14($sp) -/* 101E94 7F0CD364 AFA00018 */ sw $zero, 0x18($sp) -/* 101E98 7F0CD368 AFA0001C */ sw $zero, 0x1c($sp) -/* 101E9C 7F0CD36C AFA00020 */ sw $zero, 0x20($sp) -/* 101EA0 7F0CD370 AFA00024 */ sw $zero, 0x24($sp) -/* 101EA4 7F0CD374 AFA00028 */ sw $zero, 0x28($sp) -/* 101EA8 7F0CD378 0FC3315D */ jal texTrySetTileState -/* 101EAC 7F0CD37C AFA9006C */ sw $t1, 0x6c($sp) -/* 101EB0 7F0CD380 8FA80070 */ lw $t0, 0x70($sp) -/* 101EB4 7F0CD384 8FA9006C */ lw $t1, 0x6c($sp) -/* 101EB8 7F0CD388 10400007 */ beqz $v0, .L7F0CD3A8 -/* 101EBC 7F0CD38C 3C0A0700 */ lui $t2, 0x700 -/* 101EC0 7F0CD390 02001025 */ move $v0, $s0 -/* 101EC4 7F0CD394 3C19F500 */ lui $t9, (0xF5000300 >> 16) # lui $t9, 0xf500 -/* 101EC8 7F0CD398 37390300 */ ori $t9, (0xF5000300 & 0xFFFF) # ori $t9, $t9, 0x300 -/* 101ECC 7F0CD39C AC590000 */ sw $t9, ($v0) -/* 101ED0 7F0CD3A0 AC4A0004 */ sw $t2, 4($v0) -/* 101ED4 7F0CD3A4 26100008 */ addiu $s0, $s0, 8 -.L7F0CD3A8: -/* 101ED8 7F0CD3A8 02001025 */ move $v0, $s0 -/* 101EDC 7F0CD3AC 310B03FF */ andi $t3, $t0, 0x3ff -/* 101EE0 7F0CD3B0 000BC380 */ sll $t8, $t3, 0xe -/* 101EE4 7F0CD3B4 312403FF */ andi $a0, $t1, 0x3ff -/* 101EE8 7F0CD3B8 3C01F000 */ lui $at, 0xf000 -/* 101EEC 7F0CD3BC 26100008 */ addiu $s0, $s0, 8 -/* 101EF0 7F0CD3C0 3C0FE600 */ lui $t7, 0xe600 -/* 101EF4 7F0CD3C4 03016825 */ or $t5, $t8, $at -/* 101EF8 7F0CD3C8 00046080 */ sll $t4, $a0, 2 -/* 101EFC 7F0CD3CC AC4F0000 */ sw $t7, ($v0) -/* 101F00 7F0CD3D0 AC400004 */ sw $zero, 4($v0) -/* 101F04 7F0CD3D4 01AC7025 */ or $t6, $t5, $t4 -/* 101F08 7F0CD3D8 02001825 */ move $v1, $s0 -/* 101F0C 7F0CD3DC AC6E0000 */ sw $t6, ($v1) -/* 101F10 7F0CD3E0 9239000A */ lbu $t9, 0xa($s1) -/* 101F14 7F0CD3E4 01802025 */ move $a0, $t4 -/* 101F18 7F0CD3E8 26100008 */ addiu $s0, $s0, 8 -/* 101F1C 7F0CD3EC 03287821 */ addu $t7, $t9, $t0 -/* 101F20 7F0CD3F0 31EC03FF */ andi $t4, $t7, 0x3ff -/* 101F24 7F0CD3F4 000C5B80 */ sll $t3, $t4, 0xe -/* 101F28 7F0CD3F8 016AC025 */ or $t8, $t3, $t2 -/* 101F2C 7F0CD3FC 03046825 */ or $t5, $t8, $a0 -/* 101F30 7F0CD400 02002825 */ move $a1, $s0 -/* 101F34 7F0CD404 AC6D0004 */ sw $t5, 4($v1) -/* 101F38 7F0CD408 3C0EE700 */ lui $t6, 0xe700 -/* 101F3C 7F0CD40C ACAE0000 */ sw $t6, ($a1) -/* 101F40 7F0CD410 ACA00004 */ sw $zero, 4($a1) -/* 101F44 7F0CD414 26100008 */ addiu $s0, $s0, 8 -.L7F0CD418: -/* 101F48 7F0CD418 8FBF003C */ lw $ra, 0x3c($sp) -/* 101F4C 7F0CD41C 02001025 */ move $v0, $s0 -/* 101F50 7F0CD420 8FB00034 */ lw $s0, 0x34($sp) -/* 101F54 7F0CD424 8FB10038 */ lw $s1, 0x38($sp) -/* 101F58 7F0CD428 03E00008 */ jr $ra -/* 101F5C 7F0CD42C 27BD0090 */ addiu $sp, $sp, 0x90 -) -#endif +Gfx *texWriteTileLods(Gfx *gdl, struct tex *tex, s32 smode, s32 tmode, s32 offset, s32 basetile, s32 tmemaddr) +{ + s32 tmem; + s32 masks; + s32 tile; + s32 maskt; + s32 line; + s32 ult; + s32 lrs; + s32 lrt; + s32 lod; + s32 uls; + bool hasExplicitLods; + s32 end; + s32 pad; + s32 size; + s32 pad2; + tmem = tmemaddr; + end = tex->maxlod; + end = end + basetile; + for (tile = basetile; tile < (end ^ 0); tile++) + { + pad2 = basetile; + lod = tile - pad2; + masks = texDimensionToMask(texGetWidthAtLod(tex, lod)); + maskt = texDimensionToMask(texGetHeightAtLod(tex, lod)); + line = texGetLineSizeInBytes(tex, lod); + size = texGetSizeInBytes(tex, lod); + hasExplicitLods = tex->hasExplicitLods; -#ifdef NONMATCHING -void texWriteTileLods(void) { + if (texSetLutMode(tex->lutmodeindex << 14)) + { + gDPSetTextureLUT(gdl++, tex->lutmodeindex << G_MDSFT_TEXTLUT); + } + if (texTrySetTileState(tile, tex->gbiformat, tex->depth, line, tmem, smode, tmode, masks, maskt, tile - pad2, tile - pad2)) + { + gDPSetTile(gdl++, tex->gbiformat, tex->depth, line, tmem, tile, 0, texModeToGbiMode(tmode), maskt, lod, texModeToGbiMode(smode), masks, tile - basetile); + } + + uls = (((offset == 2) && (hasExplicitLods == 0)) ? (2) : (0)) + 0; + ult = (((offset == 2) && (hasExplicitLods == 0)) ? (2) : (0)) + 0; + lrs = ((texGetWidthAtLod(tex, lod) - 1) << 2) + (((offset == 2) && (hasExplicitLods == 0)) ? (2) : (0)); + lrt = ((texGetHeightAtLod(tex, lod) - 1) << 2) + (((offset == 2) && (hasExplicitLods == 0)) ? (2) : (0)); + + if (texTrySetTileSize(tile, uls, ult, lrs, lrt)) + { + gDPSetTileSize(gdl++, tile, uls, ult, lrs, lrt); + } + + tmem += size; + } + + lod = tile - pad2; + + return gdl; } -#else -GLOBAL_ASM( -.text -glabel texWriteTileLods -/* 101F60 7F0CD430 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 101F64 7F0CD434 8FAE00D0 */ lw $t6, 0xd0($sp) -/* 101F68 7F0CD438 AFBF005C */ sw $ra, 0x5c($sp) -/* 101F6C 7F0CD43C AFBE0058 */ sw $fp, 0x58($sp) -/* 101F70 7F0CD440 AFB70054 */ sw $s7, 0x54($sp) -/* 101F74 7F0CD444 AFB60050 */ sw $s6, 0x50($sp) -/* 101F78 7F0CD448 AFB5004C */ sw $s5, 0x4c($sp) -/* 101F7C 7F0CD44C AFB40048 */ sw $s4, 0x48($sp) -/* 101F80 7F0CD450 AFB30044 */ sw $s3, 0x44($sp) -/* 101F84 7F0CD454 AFB20040 */ sw $s2, 0x40($sp) -/* 101F88 7F0CD458 AFB1003C */ sw $s1, 0x3c($sp) -/* 101F8C 7F0CD45C AFB00038 */ sw $s0, 0x38($sp) -/* 101F90 7F0CD460 AFA600C0 */ sw $a2, 0xc0($sp) -/* 101F94 7F0CD464 AFA700C4 */ sw $a3, 0xc4($sp) -/* 101F98 7F0CD468 AFAE00B4 */ sw $t6, 0xb4($sp) -/* 101F9C 7F0CD46C 90A2000B */ lbu $v0, 0xb($a1) -/* 101FA0 7F0CD470 8FB000CC */ lw $s0, 0xcc($sp) -/* 101FA4 7F0CD474 00A0A825 */ move $s5, $a1 -/* 101FA8 7F0CD478 00027942 */ srl $t7, $v0, 5 -/* 101FAC 7F0CD47C 01F04021 */ addu $t0, $t7, $s0 -/* 101FB0 7F0CD480 0208082A */ slt $at, $s0, $t0 -/* 101FB4 7F0CD484 102000BC */ beqz $at, .L7F0CD778 -/* 101FB8 7F0CD488 0080B025 */ move $s6, $a0 -/* 101FBC 7F0CD48C 02109023 */ subu $s2, $s0, $s0 -/* 101FC0 7F0CD490 AFB000AC */ sw $s0, 0xac($sp) -/* 101FC4 7F0CD494 AFA80064 */ sw $t0, 0x64($sp) -.L7F0CD498: -/* 101FC8 7F0CD498 02A02025 */ move $a0, $s5 -/* 101FCC 7F0CD49C 0FC331C5 */ jal texGetWidthAtLod -/* 101FD0 7F0CD4A0 02402825 */ move $a1, $s2 -/* 101FD4 7F0CD4A4 0FC332A7 */ jal texDimensionToMask -/* 101FD8 7F0CD4A8 00402025 */ move $a0, $v0 -/* 101FDC 7F0CD4AC 00409825 */ move $s3, $v0 -/* 101FE0 7F0CD4B0 02A02025 */ move $a0, $s5 -/* 101FE4 7F0CD4B4 0FC331FF */ jal texGetHeightAtLod -/* 101FE8 7F0CD4B8 02402825 */ move $a1, $s2 -/* 101FEC 7F0CD4BC 0FC332A7 */ jal texDimensionToMask -/* 101FF0 7F0CD4C0 00402025 */ move $a0, $v0 -/* 101FF4 7F0CD4C4 0040A025 */ move $s4, $v0 -/* 101FF8 7F0CD4C8 02A02025 */ move $a0, $s5 -/* 101FFC 7F0CD4CC 0FC33239 */ jal texGetLineSizeInBytes -/* 102000 7F0CD4D0 02402825 */ move $a1, $s2 -/* 102004 7F0CD4D4 00408025 */ move $s0, $v0 -/* 102008 7F0CD4D8 02A02025 */ move $a0, $s5 -/* 10200C 7F0CD4DC 0FC33265 */ jal texGetSizeInBytes -/* 102010 7F0CD4E0 02402825 */ move $a1, $s2 -/* 102014 7F0CD4E4 AFA20080 */ sw $v0, 0x80($sp) -/* 102018 7F0CD4E8 8EA3000C */ lw $v1, 0xc($s5) -/* 10201C 7F0CD4EC 0003F080 */ sll $fp, $v1, 2 -/* 102020 7F0CD4F0 00032782 */ srl $a0, $v1, 0x1e -/* 102024 7F0CD4F4 001EC7C2 */ srl $t8, $fp, 0x1f -/* 102028 7F0CD4F8 0004CB80 */ sll $t9, $a0, 0xe -/* 10202C 7F0CD4FC 0300F025 */ move $fp, $t8 -/* 102030 7F0CD500 0FC33152 */ jal texSetLutMode -/* 102034 7F0CD504 03202025 */ move $a0, $t9 -/* 102038 7F0CD508 1040000A */ beqz $v0, .L7F0CD534 -/* 10203C 7F0CD50C 02003825 */ move $a3, $s0 -/* 102040 7F0CD510 3C09BA00 */ lui $t1, (0xBA000E02 >> 16) # lui $t1, 0xba00 -/* 102044 7F0CD514 35290E02 */ ori $t1, (0xBA000E02 & 0xFFFF) # ori $t1, $t1, 0xe02 -/* 102048 7F0CD518 02C01025 */ move $v0, $s6 -/* 10204C 7F0CD51C AC490000 */ sw $t1, ($v0) -/* 102050 7F0CD520 8EAA000C */ lw $t2, 0xc($s5) -/* 102054 7F0CD524 26D60008 */ addiu $s6, $s6, 8 -/* 102058 7F0CD528 000A5F82 */ srl $t3, $t2, 0x1e -/* 10205C 7F0CD52C 000B6380 */ sll $t4, $t3, 0xe -/* 102060 7F0CD530 AC4C0004 */ sw $t4, 4($v0) -.L7F0CD534: -/* 102064 7F0CD534 8EA20008 */ lw $v0, 8($s5) -/* 102068 7F0CD538 8FAE00B4 */ lw $t6, 0xb4($sp) -/* 10206C 7F0CD53C 8FAF00C0 */ lw $t7, 0xc0($sp) -/* 102070 7F0CD540 8FB800C4 */ lw $t8, 0xc4($sp) -/* 102074 7F0CD544 00022EC0 */ sll $a1, $v0, 0x1b -/* 102078 7F0CD548 00056F42 */ srl $t5, $a1, 0x1d -/* 10207C 7F0CD54C 01A02825 */ move $a1, $t5 -/* 102080 7F0CD550 AFB20028 */ sw $s2, 0x28($sp) -/* 102084 7F0CD554 AFB20024 */ sw $s2, 0x24($sp) -/* 102088 7F0CD558 AFB40020 */ sw $s4, 0x20($sp) -/* 10208C 7F0CD55C AFB3001C */ sw $s3, 0x1c($sp) -/* 102090 7F0CD560 8FA400AC */ lw $a0, 0xac($sp) -/* 102094 7F0CD564 30460003 */ andi $a2, $v0, 3 -/* 102098 7F0CD568 AFAE0010 */ sw $t6, 0x10($sp) -/* 10209C 7F0CD56C AFAF0014 */ sw $t7, 0x14($sp) -/* 1020A0 7F0CD570 0FC3315D */ jal texTrySetTileState -/* 1020A4 7F0CD574 AFB80018 */ sw $t8, 0x18($sp) -/* 1020A8 7F0CD578 1040002D */ beqz $v0, .L7F0CD630 -/* 1020AC 7F0CD57C 02C08825 */ move $s1, $s6 -/* 1020B0 7F0CD580 8EAD0008 */ lw $t5, 8($s5) -/* 1020B4 7F0CD584 3C01F500 */ lui $at, 0xf500 -/* 1020B8 7F0CD588 26D60008 */ addiu $s6, $s6, 8 -/* 1020BC 7F0CD58C 000DCEC0 */ sll $t9, $t5, 0x1b -/* 1020C0 7F0CD590 00194F42 */ srl $t1, $t9, 0x1d -/* 1020C4 7F0CD594 312A0007 */ andi $t2, $t1, 7 -/* 1020C8 7F0CD598 000A5D40 */ sll $t3, $t2, 0x15 -/* 1020CC 7F0CD59C 01616025 */ or $t4, $t3, $at -/* 1020D0 7F0CD5A0 8FAB00B4 */ lw $t3, 0xb4($sp) -/* 1020D4 7F0CD5A4 31AE0003 */ andi $t6, $t5, 3 -/* 1020D8 7F0CD5A8 000E7CC0 */ sll $t7, $t6, 0x13 -/* 1020DC 7F0CD5AC 321901FF */ andi $t9, $s0, 0x1ff -/* 1020E0 7F0CD5B0 00194A40 */ sll $t1, $t9, 9 -/* 1020E4 7F0CD5B4 018FC025 */ or $t8, $t4, $t7 -/* 1020E8 7F0CD5B8 03095025 */ or $t2, $t8, $t1 -/* 1020EC 7F0CD5BC 316D01FF */ andi $t5, $t3, 0x1ff -/* 1020F0 7F0CD5C0 014D7025 */ or $t6, $t2, $t5 -/* 1020F4 7F0CD5C4 AE2E0000 */ sw $t6, ($s1) -/* 1020F8 7F0CD5C8 0FC332B3 */ jal texModeToGbiMode -/* 1020FC 7F0CD5CC 8FA400C4 */ lw $a0, 0xc4($sp) -/* 102100 7F0CD5D0 00408025 */ move $s0, $v0 -/* 102104 7F0CD5D4 0FC332B3 */ jal texModeToGbiMode -/* 102108 7F0CD5D8 8FA400C0 */ lw $a0, 0xc0($sp) -/* 10210C 7F0CD5DC 8FB900AC */ lw $t9, 0xac($sp) -/* 102110 7F0CD5E0 304C0003 */ andi $t4, $v0, 3 -/* 102114 7F0CD5E4 000C7A00 */ sll $t7, $t4, 8 -/* 102118 7F0CD5E8 33380007 */ andi $t8, $t9, 7 -/* 10211C 7F0CD5EC 00184E00 */ sll $t1, $t8, 0x18 -/* 102120 7F0CD5F0 01E95825 */ or $t3, $t7, $t1 -/* 102124 7F0CD5F4 320A0003 */ andi $t2, $s0, 3 -/* 102128 7F0CD5F8 000A6C80 */ sll $t5, $t2, 0x12 -/* 10212C 7F0CD5FC 016D7025 */ or $t6, $t3, $t5 -/* 102130 7F0CD600 328C000F */ andi $t4, $s4, 0xf -/* 102134 7F0CD604 000CCB80 */ sll $t9, $t4, 0xe -/* 102138 7F0CD608 324F000F */ andi $t7, $s2, 0xf -/* 10213C 7F0CD60C 000F4A80 */ sll $t1, $t7, 0xa -/* 102140 7F0CD610 01D9C025 */ or $t8, $t6, $t9 -/* 102144 7F0CD614 326B000F */ andi $t3, $s3, 0xf -/* 102148 7F0CD618 000B6900 */ sll $t5, $t3, 4 -/* 10214C 7F0CD61C 03095025 */ or $t2, $t8, $t1 -/* 102150 7F0CD620 014D6025 */ or $t4, $t2, $t5 -/* 102154 7F0CD624 324E000F */ andi $t6, $s2, 0xf -/* 102158 7F0CD628 018EC825 */ or $t9, $t4, $t6 -/* 10215C 7F0CD62C AE390004 */ sw $t9, 4($s1) -.L7F0CD630: -/* 102160 7F0CD630 8FA200C8 */ lw $v0, 0xc8($sp) -/* 102164 7F0CD634 24030002 */ li $v1, 2 -/* 102168 7F0CD638 02A02025 */ move $a0, $s5 -/* 10216C 7F0CD63C 14430005 */ bne $v0, $v1, .L7F0CD654 -/* 102170 7F0CD640 02402825 */ move $a1, $s2 -/* 102174 7F0CD644 57C00004 */ bnezl $fp, .L7F0CD658 -/* 102178 7F0CD648 00008025 */ move $s0, $zero -/* 10217C 7F0CD64C 10000002 */ b .L7F0CD658 -/* 102180 7F0CD650 00608025 */ move $s0, $v1 -.L7F0CD654: -/* 102184 7F0CD654 00008025 */ move $s0, $zero -.L7F0CD658: -/* 102188 7F0CD658 14430005 */ bne $v0, $v1, .L7F0CD670 -/* 10218C 7F0CD65C AFB00090 */ sw $s0, 0x90($sp) -/* 102190 7F0CD660 57C00004 */ bnezl $fp, .L7F0CD674 -/* 102194 7F0CD664 00008025 */ move $s0, $zero -/* 102198 7F0CD668 10000002 */ b .L7F0CD674 -/* 10219C 7F0CD66C 00608025 */ move $s0, $v1 -.L7F0CD670: -/* 1021A0 7F0CD670 00008025 */ move $s0, $zero -.L7F0CD674: -/* 1021A4 7F0CD674 0FC331C5 */ jal texGetWidthAtLod -/* 1021A8 7F0CD678 0200B825 */ move $s7, $s0 -/* 1021AC 7F0CD67C 8FAF00C8 */ lw $t7, 0xc8($sp) -/* 1021B0 7F0CD680 00409825 */ move $s3, $v0 -/* 1021B4 7F0CD684 24010002 */ li $at, 2 -/* 1021B8 7F0CD688 15E10005 */ bne $t7, $at, .L7F0CD6A0 -/* 1021BC 7F0CD68C 2678FFFF */ addiu $t8, $s3, -1 -/* 1021C0 7F0CD690 57C00004 */ bnezl $fp, .L7F0CD6A4 -/* 1021C4 7F0CD694 00008025 */ move $s0, $zero -/* 1021C8 7F0CD698 10000002 */ b .L7F0CD6A4 -/* 1021CC 7F0CD69C 24100002 */ li $s0, 2 -.L7F0CD6A0: -/* 1021D0 7F0CD6A0 00008025 */ move $s0, $zero -.L7F0CD6A4: -/* 1021D4 7F0CD6A4 00184880 */ sll $t1, $t8, 2 -/* 1021D8 7F0CD6A8 0209A021 */ addu $s4, $s0, $t1 -/* 1021DC 7F0CD6AC 02A02025 */ move $a0, $s5 -/* 1021E0 7F0CD6B0 0FC331FF */ jal texGetHeightAtLod -/* 1021E4 7F0CD6B4 02402825 */ move $a1, $s2 -/* 1021E8 7F0CD6B8 8FAB00C8 */ lw $t3, 0xc8($sp) -/* 1021EC 7F0CD6BC 24010002 */ li $at, 2 -/* 1021F0 7F0CD6C0 00409825 */ move $s3, $v0 -/* 1021F4 7F0CD6C4 15610005 */ bne $t3, $at, .L7F0CD6DC -/* 1021F8 7F0CD6C8 8FA400AC */ lw $a0, 0xac($sp) -/* 1021FC 7F0CD6CC 57C00004 */ bnezl $fp, .L7F0CD6E0 -/* 102200 7F0CD6D0 00008025 */ move $s0, $zero -/* 102204 7F0CD6D4 10000002 */ b .L7F0CD6E0 -/* 102208 7F0CD6D8 24100002 */ li $s0, 2 -.L7F0CD6DC: -/* 10220C 7F0CD6DC 00008025 */ move $s0, $zero -.L7F0CD6E0: -/* 102210 7F0CD6E0 266AFFFF */ addiu $t2, $s3, -1 -/* 102214 7F0CD6E4 000A6880 */ sll $t5, $t2, 2 -/* 102218 7F0CD6E8 020D8821 */ addu $s1, $s0, $t5 -/* 10221C 7F0CD6EC AFB10010 */ sw $s1, 0x10($sp) -/* 102220 7F0CD6F0 8FA50090 */ lw $a1, 0x90($sp) -/* 102224 7F0CD6F4 02E03025 */ move $a2, $s7 -/* 102228 7F0CD6F8 0FC331A4 */ jal texTrySetTileSize -/* 10222C 7F0CD6FC 02803825 */ move $a3, $s4 -/* 102230 7F0CD700 10400014 */ beqz $v0, .L7F0CD754 -/* 102234 7F0CD704 26520001 */ addiu $s2, $s2, 1 -/* 102238 7F0CD708 8FAC0090 */ lw $t4, 0x90($sp) -/* 10223C 7F0CD70C 3C01F200 */ lui $at, 0xf200 -/* 102240 7F0CD710 32F80FFF */ andi $t8, $s7, 0xfff -/* 102244 7F0CD714 318E0FFF */ andi $t6, $t4, 0xfff -/* 102248 7F0CD718 000ECB00 */ sll $t9, $t6, 0xc -/* 10224C 7F0CD71C 03217825 */ or $t7, $t9, $at -/* 102250 7F0CD720 01F84825 */ or $t1, $t7, $t8 -/* 102254 7F0CD724 02C01025 */ move $v0, $s6 -/* 102258 7F0CD728 AC490000 */ sw $t1, ($v0) -/* 10225C 7F0CD72C 8FAB00AC */ lw $t3, 0xac($sp) -/* 102260 7F0CD730 328C0FFF */ andi $t4, $s4, 0xfff -/* 102264 7F0CD734 000C7300 */ sll $t6, $t4, 0xc -/* 102268 7F0CD738 316A0007 */ andi $t2, $t3, 7 -/* 10226C 7F0CD73C 000A6E00 */ sll $t5, $t2, 0x18 -/* 102270 7F0CD740 01AEC825 */ or $t9, $t5, $t6 -/* 102274 7F0CD744 322F0FFF */ andi $t7, $s1, 0xfff -/* 102278 7F0CD748 032FC025 */ or $t8, $t9, $t7 -/* 10227C 7F0CD74C AC580004 */ sw $t8, 4($v0) -/* 102280 7F0CD750 26D60008 */ addiu $s6, $s6, 8 -.L7F0CD754: -/* 102284 7F0CD754 8FAC00AC */ lw $t4, 0xac($sp) -/* 102288 7F0CD758 8FA900B4 */ lw $t1, 0xb4($sp) -/* 10228C 7F0CD75C 8FAB0080 */ lw $t3, 0x80($sp) -/* 102290 7F0CD760 8FAE0064 */ lw $t6, 0x64($sp) -/* 102294 7F0CD764 258D0001 */ addiu $t5, $t4, 1 -/* 102298 7F0CD768 012B5021 */ addu $t2, $t1, $t3 -/* 10229C 7F0CD76C AFAD00AC */ sw $t5, 0xac($sp) -/* 1022A0 7F0CD770 15AEFF49 */ bne $t5, $t6, .L7F0CD498 -/* 1022A4 7F0CD774 AFAA00B4 */ sw $t2, 0xb4($sp) -.L7F0CD778: -/* 1022A8 7F0CD778 8FBF005C */ lw $ra, 0x5c($sp) -/* 1022AC 7F0CD77C 02C01025 */ move $v0, $s6 -/* 1022B0 7F0CD780 8FB60050 */ lw $s6, 0x50($sp) -/* 1022B4 7F0CD784 8FB00038 */ lw $s0, 0x38($sp) -/* 1022B8 7F0CD788 8FB1003C */ lw $s1, 0x3c($sp) -/* 1022BC 7F0CD78C 8FB20040 */ lw $s2, 0x40($sp) -/* 1022C0 7F0CD790 8FB30044 */ lw $s3, 0x44($sp) -/* 1022C4 7F0CD794 8FB40048 */ lw $s4, 0x48($sp) -/* 1022C8 7F0CD798 8FB5004C */ lw $s5, 0x4c($sp) -/* 1022CC 7F0CD79C 8FB70054 */ lw $s7, 0x54($sp) -/* 1022D0 7F0CD7A0 8FBE0058 */ lw $fp, 0x58($sp) -/* 1022D4 7F0CD7A4 03E00008 */ jr $ra -/* 1022D8 7F0CD7A8 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif +Gfx *texWriteLoadToTmemZero(Gfx *gdl, struct tex *tex) +{ + s32 depth; + s32 len; + s32 dxt; + dxt = sub_GAME_7F0CCB38((s32 *)tex); + texGetDepthAndSize(tex, &depth, &len); + if (tex->lutmodeindex == 0) + { + gDPSetTextureImage(gdl++, tex->gbiformat, depth, 1, tex->data); + if (texTrySetTileState(7, tex->gbiformat, depth, 0, 0, 0, 0, 0, 0, 0, 0)) + { + gDPSetTile(gdl++, tex->gbiformat, depth, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0); + } + gDPLoadSync(gdl++); + gDPLoadBlock(gdl++, 7, 0, 0, len - 1, dxt); + gDPPipeSync(gdl++); + } + else + { + u32 uls; + u32 ult; -#ifdef NONMATCHING -void texWriteLoadToTmemZero(void) { + gDPSetTextureImage(gdl++, tex->gbiformat, depth, 1, tex->data); + if (texTrySetTileState(7, tex->gbiformat, depth, 0, 0, 0, 0, 0, 0, 0, 0)) + { + gDPSetTile(gdl++, tex->gbiformat, depth, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0); + } + gDPLoadSync(gdl++); + gDPLoadBlock(gdl++, 7, 0, 0, len - 1, dxt); + gDPPipeSync(gdl++); + uls = len; + if ((u32)(0x3ff - tex->unk0a) < uls) + { + ult = 0x3ff - tex->unk0a; + } + else + { + ult = 0; + } + uls -= ult; + if (texTrySetTileState(7, 0, 0, 1, 0x100, 0, 0, 0, 0, 0, 0)) + { + gDPSetTile(gdl++, 0, 0, 1, 0x100, 7, 0, 0, 0, 0, 0, 0, 0); + } + gDPLoadSync(gdl++); + gDPLoadTLUT07(gdl++, uls, ult, tex->unk0a + uls, ult); + gDPPipeSync(gdl++); + } + + return gdl; } -#else -GLOBAL_ASM( -.text -glabel texWriteLoadToTmemZero -/* 1022DC 7F0CD7AC 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 1022E0 7F0CD7B0 AFB00034 */ sw $s0, 0x34($sp) -/* 1022E4 7F0CD7B4 00808025 */ move $s0, $a0 -/* 1022E8 7F0CD7B8 AFBF003C */ sw $ra, 0x3c($sp) -/* 1022EC 7F0CD7BC AFB10038 */ sw $s1, 0x38($sp) -/* 1022F0 7F0CD7C0 00A08825 */ move $s1, $a1 -/* 1022F4 7F0CD7C4 0FC332CE */ jal sub_GAME_7F0CCB38 -/* 1022F8 7F0CD7C8 00A02025 */ move $a0, $a1 -/* 1022FC 7F0CD7CC AFA2008C */ sw $v0, 0x8c($sp) -/* 102300 7F0CD7D0 02202025 */ move $a0, $s1 -/* 102304 7F0CD7D4 27A50094 */ addiu $a1, $sp, 0x94 -/* 102308 7F0CD7D8 0FC33275 */ jal texGetDepthAndSize -/* 10230C 7F0CD7DC 27A60090 */ addiu $a2, $sp, 0x90 -/* 102310 7F0CD7E0 8E2E000C */ lw $t6, 0xc($s1) -/* 102314 7F0CD7E4 24040007 */ li $a0, 7 -/* 102318 7F0CD7E8 02001025 */ move $v0, $s0 -/* 10231C 7F0CD7EC 000E7F82 */ srl $t7, $t6, 0x1e -/* 102320 7F0CD7F0 15E0004D */ bnez $t7, .L7F0CD928 -/* 102324 7F0CD7F4 3C01FD00 */ lui $at, 0xfd00 -/* 102328 7F0CD7F8 8E380008 */ lw $t8, 8($s1) -/* 10232C 7F0CD7FC 8FAF0094 */ lw $t7, 0x94($sp) -/* 102330 7F0CD800 3C01FD00 */ lui $at, 0xfd00 -/* 102334 7F0CD804 0018CEC0 */ sll $t9, $t8, 0x1b -/* 102338 7F0CD808 00195F42 */ srl $t3, $t9, 0x1d -/* 10233C 7F0CD80C 316C0007 */ andi $t4, $t3, 7 -/* 102340 7F0CD810 000C6D40 */ sll $t5, $t4, 0x15 -/* 102344 7F0CD814 31F80003 */ andi $t8, $t7, 3 -/* 102348 7F0CD818 0018CCC0 */ sll $t9, $t8, 0x13 -/* 10234C 7F0CD81C 01A17025 */ or $t6, $t5, $at -/* 102350 7F0CD820 01D95825 */ or $t3, $t6, $t9 -/* 102354 7F0CD824 02001025 */ move $v0, $s0 -/* 102358 7F0CD828 AC4B0000 */ sw $t3, ($v0) -/* 10235C 7F0CD82C 8E2C0004 */ lw $t4, 4($s1) -/* 102360 7F0CD830 26100008 */ addiu $s0, $s0, 8 -/* 102364 7F0CD834 00003825 */ move $a3, $zero -/* 102368 7F0CD838 AC4C0004 */ sw $t4, 4($v0) -/* 10236C 7F0CD83C 8E250008 */ lw $a1, 8($s1) -/* 102370 7F0CD840 AFA00028 */ sw $zero, 0x28($sp) -/* 102374 7F0CD844 AFA00024 */ sw $zero, 0x24($sp) -/* 102378 7F0CD848 00056EC0 */ sll $t5, $a1, 0x1b -/* 10237C 7F0CD84C 000D2F42 */ srl $a1, $t5, 0x1d -/* 102380 7F0CD850 AFA00020 */ sw $zero, 0x20($sp) -/* 102384 7F0CD854 AFA0001C */ sw $zero, 0x1c($sp) -/* 102388 7F0CD858 AFA00018 */ sw $zero, 0x18($sp) -/* 10238C 7F0CD85C AFA00014 */ sw $zero, 0x14($sp) -/* 102390 7F0CD860 AFA00010 */ sw $zero, 0x10($sp) -/* 102394 7F0CD864 0FC3315D */ jal texTrySetTileState -/* 102398 7F0CD868 8FA60094 */ lw $a2, 0x94($sp) -/* 10239C 7F0CD86C 10400010 */ beqz $v0, .L7F0CD8B0 -/* 1023A0 7F0CD870 3C0A0700 */ lui $t2, 0x700 -/* 1023A4 7F0CD874 8E380008 */ lw $t8, 8($s1) -/* 1023A8 7F0CD878 8FAF0094 */ lw $t7, 0x94($sp) -/* 1023AC 7F0CD87C 02001025 */ move $v0, $s0 -/* 1023B0 7F0CD880 001876C0 */ sll $t6, $t8, 0x1b -/* 1023B4 7F0CD884 000ECF42 */ srl $t9, $t6, 0x1d -/* 1023B8 7F0CD888 332B0007 */ andi $t3, $t9, 7 -/* 1023BC 7F0CD88C 000B6540 */ sll $t4, $t3, 0x15 -/* 1023C0 7F0CD890 3C01F500 */ lui $at, 0xf500 -/* 1023C4 7F0CD894 31F80003 */ andi $t8, $t7, 3 -/* 1023C8 7F0CD898 001874C0 */ sll $t6, $t8, 0x13 -/* 1023CC 7F0CD89C 01816825 */ or $t5, $t4, $at -/* 1023D0 7F0CD8A0 01AEC825 */ or $t9, $t5, $t6 -/* 1023D4 7F0CD8A4 AC590000 */ sw $t9, ($v0) -/* 1023D8 7F0CD8A8 AC4A0004 */ sw $t2, 4($v0) -/* 1023DC 7F0CD8AC 26100008 */ addiu $s0, $s0, 8 -.L7F0CD8B0: -/* 1023E0 7F0CD8B0 02001025 */ move $v0, $s0 -/* 1023E4 7F0CD8B4 26100008 */ addiu $s0, $s0, 8 -/* 1023E8 7F0CD8B8 3C0BE600 */ lui $t3, 0xe600 -/* 1023EC 7F0CD8BC AC4B0000 */ sw $t3, ($v0) -/* 1023F0 7F0CD8C0 AC400004 */ sw $zero, 4($v0) -/* 1023F4 7F0CD8C4 02002825 */ move $a1, $s0 -/* 1023F8 7F0CD8C8 3C0CF300 */ lui $t4, 0xf300 -/* 1023FC 7F0CD8CC ACAC0000 */ sw $t4, ($a1) -/* 102400 7F0CD8D0 8FA30090 */ lw $v1, 0x90($sp) -/* 102404 7F0CD8D4 3C0A0700 */ lui $t2, 0x700 -/* 102408 7F0CD8D8 8FAE008C */ lw $t6, 0x8c($sp) -/* 10240C 7F0CD8DC 2463FFFF */ addiu $v1, $v1, -1 -/* 102410 7F0CD8E0 286107FF */ slti $at, $v1, 0x7ff -/* 102414 7F0CD8E4 10200003 */ beqz $at, .L7F0CD8F4 -/* 102418 7F0CD8E8 26100008 */ addiu $s0, $s0, 8 -/* 10241C 7F0CD8EC 10000002 */ b .L7F0CD8F8 -/* 102420 7F0CD8F0 00602025 */ move $a0, $v1 -.L7F0CD8F4: -/* 102424 7F0CD8F4 240407FF */ li $a0, 2047 -.L7F0CD8F8: -/* 102428 7F0CD8F8 308F0FFF */ andi $t7, $a0, 0xfff -/* 10242C 7F0CD8FC 000FC300 */ sll $t8, $t7, 0xc -/* 102430 7F0CD900 030A6825 */ or $t5, $t8, $t2 -/* 102434 7F0CD904 31D90FFF */ andi $t9, $t6, 0xfff -/* 102438 7F0CD908 01B95825 */ or $t3, $t5, $t9 -/* 10243C 7F0CD90C 02001025 */ move $v0, $s0 -/* 102440 7F0CD910 ACAB0004 */ sw $t3, 4($a1) -/* 102444 7F0CD914 3C0CE700 */ lui $t4, 0xe700 -/* 102448 7F0CD918 AC4C0000 */ sw $t4, ($v0) -/* 10244C 7F0CD91C AC400004 */ sw $zero, 4($v0) -/* 102450 7F0CD920 1000008A */ b .L7F0CDB4C -/* 102454 7F0CD924 26100008 */ addiu $s0, $s0, 8 -.L7F0CD928: -/* 102458 7F0CD928 8E2F0008 */ lw $t7, 8($s1) -/* 10245C 7F0CD92C 8FAC0094 */ lw $t4, 0x94($sp) -/* 102460 7F0CD930 26100008 */ addiu $s0, $s0, 8 -/* 102464 7F0CD934 000FC6C0 */ sll $t8, $t7, 0x1b -/* 102468 7F0CD938 00187742 */ srl $t6, $t8, 0x1d -/* 10246C 7F0CD93C 31CD0007 */ andi $t5, $t6, 7 -/* 102470 7F0CD940 000DCD40 */ sll $t9, $t5, 0x15 -/* 102474 7F0CD944 318F0003 */ andi $t7, $t4, 3 -/* 102478 7F0CD948 000FC4C0 */ sll $t8, $t7, 0x13 -/* 10247C 7F0CD94C 03215825 */ or $t3, $t9, $at -/* 102480 7F0CD950 01787025 */ or $t6, $t3, $t8 -/* 102484 7F0CD954 AC4E0000 */ sw $t6, ($v0) -/* 102488 7F0CD958 8E2D0004 */ lw $t5, 4($s1) -/* 10248C 7F0CD95C 24040007 */ li $a0, 7 -/* 102490 7F0CD960 00003825 */ move $a3, $zero -/* 102494 7F0CD964 AC4D0004 */ sw $t5, 4($v0) -/* 102498 7F0CD968 8E250008 */ lw $a1, 8($s1) -/* 10249C 7F0CD96C AFA00028 */ sw $zero, 0x28($sp) -/* 1024A0 7F0CD970 AFA00024 */ sw $zero, 0x24($sp) -/* 1024A4 7F0CD974 0005CEC0 */ sll $t9, $a1, 0x1b -/* 1024A8 7F0CD978 00192F42 */ srl $a1, $t9, 0x1d -/* 1024AC 7F0CD97C AFA00020 */ sw $zero, 0x20($sp) -/* 1024B0 7F0CD980 AFA0001C */ sw $zero, 0x1c($sp) -/* 1024B4 7F0CD984 AFA00018 */ sw $zero, 0x18($sp) -/* 1024B8 7F0CD988 AFA00014 */ sw $zero, 0x14($sp) -/* 1024BC 7F0CD98C AFA00010 */ sw $zero, 0x10($sp) -/* 1024C0 7F0CD990 0FC3315D */ jal texTrySetTileState -/* 1024C4 7F0CD994 8FA60094 */ lw $a2, 0x94($sp) -/* 1024C8 7F0CD998 10400011 */ beqz $v0, .L7F0CD9E0 -/* 1024CC 7F0CD99C 00003025 */ move $a2, $zero -/* 1024D0 7F0CD9A0 8E2F0008 */ lw $t7, 8($s1) -/* 1024D4 7F0CD9A4 8FAC0094 */ lw $t4, 0x94($sp) -/* 1024D8 7F0CD9A8 02001025 */ move $v0, $s0 -/* 1024DC 7F0CD9AC 000F5EC0 */ sll $t3, $t7, 0x1b -/* 1024E0 7F0CD9B0 000BC742 */ srl $t8, $t3, 0x1d -/* 1024E4 7F0CD9B4 330E0007 */ andi $t6, $t8, 7 -/* 1024E8 7F0CD9B8 000E6D40 */ sll $t5, $t6, 0x15 -/* 1024EC 7F0CD9BC 3C01F500 */ lui $at, 0xf500 -/* 1024F0 7F0CD9C0 318F0003 */ andi $t7, $t4, 3 -/* 1024F4 7F0CD9C4 000F5CC0 */ sll $t3, $t7, 0x13 -/* 1024F8 7F0CD9C8 01A1C825 */ or $t9, $t5, $at -/* 1024FC 7F0CD9CC 3C0A0700 */ lui $t2, 0x700 -/* 102500 7F0CD9D0 032BC025 */ or $t8, $t9, $t3 -/* 102504 7F0CD9D4 AC580000 */ sw $t8, ($v0) -/* 102508 7F0CD9D8 AC4A0004 */ sw $t2, 4($v0) -/* 10250C 7F0CD9DC 26100008 */ addiu $s0, $s0, 8 -.L7F0CD9E0: -/* 102510 7F0CD9E0 02001025 */ move $v0, $s0 -/* 102514 7F0CD9E4 26100008 */ addiu $s0, $s0, 8 -/* 102518 7F0CD9E8 3C0EE600 */ lui $t6, 0xe600 -/* 10251C 7F0CD9EC AC4E0000 */ sw $t6, ($v0) -/* 102520 7F0CD9F0 AC400004 */ sw $zero, 4($v0) -/* 102524 7F0CD9F4 02002825 */ move $a1, $s0 -/* 102528 7F0CD9F8 3C0DF300 */ lui $t5, 0xf300 -/* 10252C 7F0CD9FC ACAD0000 */ sw $t5, ($a1) -/* 102530 7F0CDA00 8FA30090 */ lw $v1, 0x90($sp) -/* 102534 7F0CDA04 3C0A0700 */ lui $t2, 0x700 -/* 102538 7F0CDA08 8FAB008C */ lw $t3, 0x8c($sp) -/* 10253C 7F0CDA0C 2463FFFF */ addiu $v1, $v1, -1 -/* 102540 7F0CDA10 286107FF */ slti $at, $v1, 0x7ff -/* 102544 7F0CDA14 10200003 */ beqz $at, .L7F0CDA24 -/* 102548 7F0CDA18 26100008 */ addiu $s0, $s0, 8 -/* 10254C 7F0CDA1C 10000002 */ b .L7F0CDA28 -/* 102550 7F0CDA20 00602025 */ move $a0, $v1 -.L7F0CDA24: -/* 102554 7F0CDA24 240407FF */ li $a0, 2047 -.L7F0CDA28: -/* 102558 7F0CDA28 308C0FFF */ andi $t4, $a0, 0xfff -/* 10255C 7F0CDA2C 000C7B00 */ sll $t7, $t4, 0xc -/* 102560 7F0CDA30 01EAC825 */ or $t9, $t7, $t2 -/* 102564 7F0CDA34 31780FFF */ andi $t8, $t3, 0xfff -/* 102568 7F0CDA38 03387025 */ or $t6, $t9, $t8 -/* 10256C 7F0CDA3C ACAE0004 */ sw $t6, 4($a1) -/* 102570 7F0CDA40 02001025 */ move $v0, $s0 -/* 102574 7F0CDA44 3C0DE700 */ lui $t5, 0xe700 -/* 102578 7F0CDA48 AC4D0000 */ sw $t5, ($v0) -/* 10257C 7F0CDA4C AC400004 */ sw $zero, 4($v0) -/* 102580 7F0CDA50 922C000A */ lbu $t4, 0xa($s1) -/* 102584 7F0CDA54 8FA80090 */ lw $t0, 0x90($sp) -/* 102588 7F0CDA58 240F03FF */ li $t7, 1023 -/* 10258C 7F0CDA5C 01EC1823 */ subu $v1, $t7, $t4 -/* 102590 7F0CDA60 0068082B */ sltu $at, $v1, $t0 -/* 102594 7F0CDA64 10200003 */ beqz $at, .L7F0CDA74 -/* 102598 7F0CDA68 26100008 */ addiu $s0, $s0, 8 -/* 10259C 7F0CDA6C 10000002 */ b .L7F0CDA78 -/* 1025A0 7F0CDA70 00604825 */ move $t1, $v1 -.L7F0CDA74: -/* 1025A4 7F0CDA74 00004825 */ move $t1, $zero -.L7F0CDA78: -/* 1025A8 7F0CDA78 01094023 */ subu $t0, $t0, $t1 -/* 1025AC 7F0CDA7C 24190100 */ li $t9, 256 -/* 1025B0 7F0CDA80 AFB90010 */ sw $t9, 0x10($sp) -/* 1025B4 7F0CDA84 AFA80074 */ sw $t0, 0x74($sp) -/* 1025B8 7F0CDA88 24040007 */ li $a0, 7 -/* 1025BC 7F0CDA8C 00002825 */ move $a1, $zero -/* 1025C0 7F0CDA90 24070001 */ li $a3, 1 -/* 1025C4 7F0CDA94 AFA00014 */ sw $zero, 0x14($sp) -/* 1025C8 7F0CDA98 AFA00018 */ sw $zero, 0x18($sp) -/* 1025CC 7F0CDA9C AFA0001C */ sw $zero, 0x1c($sp) -/* 1025D0 7F0CDAA0 AFA00020 */ sw $zero, 0x20($sp) -/* 1025D4 7F0CDAA4 AFA00024 */ sw $zero, 0x24($sp) -/* 1025D8 7F0CDAA8 AFA00028 */ sw $zero, 0x28($sp) -/* 1025DC 7F0CDAAC 0FC3315D */ jal texTrySetTileState -/* 1025E0 7F0CDAB0 AFA90070 */ sw $t1, 0x70($sp) -/* 1025E4 7F0CDAB4 8FA80074 */ lw $t0, 0x74($sp) -/* 1025E8 7F0CDAB8 8FA90070 */ lw $t1, 0x70($sp) -/* 1025EC 7F0CDABC 10400007 */ beqz $v0, .L7F0CDADC -/* 1025F0 7F0CDAC0 3C0A0700 */ lui $t2, 0x700 -/* 1025F4 7F0CDAC4 02001025 */ move $v0, $s0 -/* 1025F8 7F0CDAC8 3C18F500 */ lui $t8, (0xF5000300 >> 16) # lui $t8, 0xf500 -/* 1025FC 7F0CDACC 37180300 */ ori $t8, (0xF5000300 & 0xFFFF) # ori $t8, $t8, 0x300 -/* 102600 7F0CDAD0 AC580000 */ sw $t8, ($v0) -/* 102604 7F0CDAD4 AC4A0004 */ sw $t2, 4($v0) -/* 102608 7F0CDAD8 26100008 */ addiu $s0, $s0, 8 -.L7F0CDADC: -/* 10260C 7F0CDADC 02001025 */ move $v0, $s0 -/* 102610 7F0CDAE0 310F03FF */ andi $t7, $t0, 0x3ff -/* 102614 7F0CDAE4 000F6380 */ sll $t4, $t7, 0xe -/* 102618 7F0CDAE8 312403FF */ andi $a0, $t1, 0x3ff -/* 10261C 7F0CDAEC 3C01F000 */ lui $at, 0xf000 -/* 102620 7F0CDAF0 26100008 */ addiu $s0, $s0, 8 -/* 102624 7F0CDAF4 3C0EE600 */ lui $t6, 0xe600 -/* 102628 7F0CDAF8 01815825 */ or $t3, $t4, $at -/* 10262C 7F0CDAFC 00046880 */ sll $t5, $a0, 2 -/* 102630 7F0CDB00 AC4E0000 */ sw $t6, ($v0) -/* 102634 7F0CDB04 AC400004 */ sw $zero, 4($v0) -/* 102638 7F0CDB08 016DC825 */ or $t9, $t3, $t5 -/* 10263C 7F0CDB0C 02001825 */ move $v1, $s0 -/* 102640 7F0CDB10 AC790000 */ sw $t9, ($v1) -/* 102644 7F0CDB14 9238000A */ lbu $t8, 0xa($s1) -/* 102648 7F0CDB18 01A02025 */ move $a0, $t5 -/* 10264C 7F0CDB1C 26100008 */ addiu $s0, $s0, 8 -/* 102650 7F0CDB20 03087021 */ addu $t6, $t8, $t0 -/* 102654 7F0CDB24 31CD03FF */ andi $t5, $t6, 0x3ff -/* 102658 7F0CDB28 000D7B80 */ sll $t7, $t5, 0xe -/* 10265C 7F0CDB2C 01EA6025 */ or $t4, $t7, $t2 -/* 102660 7F0CDB30 01845825 */ or $t3, $t4, $a0 -/* 102664 7F0CDB34 02002825 */ move $a1, $s0 -/* 102668 7F0CDB38 AC6B0004 */ sw $t3, 4($v1) -/* 10266C 7F0CDB3C 3C19E700 */ lui $t9, 0xe700 -/* 102670 7F0CDB40 ACB90000 */ sw $t9, ($a1) -/* 102674 7F0CDB44 ACA00004 */ sw $zero, 4($a1) -/* 102678 7F0CDB48 26100008 */ addiu $s0, $s0, 8 -.L7F0CDB4C: -/* 10267C 7F0CDB4C 8FBF003C */ lw $ra, 0x3c($sp) -/* 102680 7F0CDB50 02001025 */ move $v0, $s0 -/* 102684 7F0CDB54 8FB00034 */ lw $s0, 0x34($sp) -/* 102688 7F0CDB58 8FB10038 */ lw $s1, 0x38($sp) -/* 10268C 7F0CDB5C 03E00008 */ jr $ra -/* 102690 7F0CDB60 27BD0098 */ addiu $sp, $sp, 0x98 -) -#endif Gfx *texWriteTile(Gfx *gdl, struct tex *tex, s32 arg2, s32 arg3, s32 arg4, s32 tile) @@ -1349,7 +686,7 @@ Gfx *texWriteTile(Gfx *gdl, struct tex *tex, s32 arg2, s32 arg3, s32 arg4, s32 t masks = texDimensionToMask(tex->width); maskt = texDimensionToMask(tex->height); line = texGetLineSizeInBytes(tex, 0); - sp50 = tex->unk0c_02; + sp50 = tex->hasExplicitLods; if (texSetLutMode(tex->lutmodeindex << G_MDSFT_TEXTLUT)) { @@ -1437,494 +774,270 @@ Gfx * texHandleType3(Gfx *DL,u32 *arg1,s32 arg2,s32 arg3,s32 arg4) -#ifdef NONMATCHING -void texLoadFromGdl(void) { +const char PADDINGHACKING[4] = ""; +s32 texLoadFromGdl(Gfx *src, s32 srcsize, Gfx *dst, void *texpool) +{ + s32 texnum; + struct tex *tex; + Gfx *saved = NULL; + s32 count; + s32 valid = FALSE; + s32 texnum2; + s32 syncEmitted = FALSE; + s32 smode; + s32 tmode; + s32 offset; + s32 shifts; + s32 shiftt; + s32 min; + s32 pad; + s32 writeTexFlag = TRUE; + s32 lightPending = FALSE; + Gfx *in = src; + Gfx *out = dst; + + count = srcsize >> 3; + + sub_GAME_7F0CC4C8(); + + if (texpool == NULL) + { + texpool = &ptr_texture_alloc_start; + } + + while (count > 0) + { + switch (*(u8 *)in) + { + case G_NOOP: + if (!syncEmitted) + { + gDPPipeSync(out++); + syncEmitted = TRUE; + } + + if (lightPending) + { + lightFixtureEntryEnd(out); + lightPending = FALSE; + } + + texnum = in->words.w1 & 0xfff; + + if ((texnum == D_800483C4) && (D_800483C8 != NULL)) + { + if (D_800483C8[texnum].unk_0_0 < 0xffU) + { + valid = TRUE; + } + else + { + valid = FALSE; + } + } + else + { + valid = FALSE; + } + + texLoadFromTextureNum(texnum, texpool); + tex = texFindInPool(texnum, texpool); + + if (tex != NULL) + { + out = texWriteTextureCmd(out, saved, tex, writeTexFlag); + writeTexFlag = FALSE; + + switch (in->words.w0 & 7) + { + case TEXTURETYPE_LOD: + min = (in->words.w1 >> 24) & 0xff; + smode = (in->words.w0 >> 22) & 3; + tmode = (in->words.w0 >> 20) & 3; + offset = (in->words.w0 >> 18) & 3; + shifts = (in->words.w0 >> 14) & 0xf; + shiftt = (in->words.w0 >> 10) & 0xf; + + if ((D_800483C8 != NULL) && (D_800483C8[texnum].unk_0_0 == 0xff)) + { + do + { + if (TRUE) {} + } while (FALSE); + + D_800483C8[texnum].unk_0_0 = min; + D_800483C8[texnum].unk_1_3 = 15 - shifts; + D_800483C8[texnum].unk_1_0 = 15 - shiftt; + } + + if (valid) + { + out = texHandleType0( + out, + tex, + smode, + tmode, + offset, + 15 - D_800483C8[texnum].unk_1_3, + 15 - D_800483C8[texnum].unk_1_0, + D_800483C8[texnum].unk_0_0); + + gDPSetCycleType(out++, G_CYC_2CYCLE); + gDPSetTextureLOD(out++, G_TL_LOD); + gDPSetTextureDetail(out++, G_TD_DETAIL); + } + else + { + out = texHandleType0(out, tex, smode, tmode, offset, shifts, shiftt, min); + } + break; + + case TEXTURETYPE_DETAIL: + { + struct tex *tex2; + + texnum2 = (in->words.w1 >> 12) & 0xfff; + + texLoadFromTextureNum(texnum2, texpool); + tex2 = texFindInPool(texnum2, texpool); + + if (tex2 != NULL) + { + min = ((*in).words.w1 >> 24) & 0xff; + smode = (in->words.w0 >> 22) & 3; + tmode = (in->words.w0 >> 20) & 3; + offset = (in->words.w0 >> 18) & 3; + shifts = (in->words.w0 >> 14) & 0xf; + shiftt = (in->words.w0 >> 10) & 0xf; + + out = texHandleType1(out, tex, smode, tmode, offset, tex2, shifts, shiftt, min); + } + break; + } + + case TEXTURETYPE_MIPMAP: + smode = (in->words.w0 >> 22) & 3; + tmode = (in->words.w0 >> 20) & 3; + offset = (in->words.w0 >> 18) & 3; + + if (valid) + { + out = texHandleType0( + out, + tex, + smode, + tmode, + offset, + 15 - D_800483C8[texnum].unk_1_3, + 15 - D_800483C8[texnum].unk_1_0, + D_800483C8[texnum].unk_0_0); + + gDPSetCycleType(out++, G_CYC_2CYCLE); + gDPSetTextureLOD(out++, G_TL_LOD); + gDPSetTextureDetail(out++, G_TD_DETAIL); + } + else + { + out = texHandleType2(out, tex, smode, tmode, offset); + } + break; + + case TEXTURETYPE_TILE: + smode = (in->words.w0 >> 22) & 3; + tmode = (in->words.w0 >> 20) & 3; + offset = (in->words.w0 >> 18) & 3; + out = texHandleType3(out, tex, smode, tmode, offset); + break; + + case TEXTURETYPE_TILE_PRESWAPPED: + smode = (in->words.w0 >> 22) & 3; + tmode = (in->words.w0 >> 20) & 3; + offset = (in->words.w0 >> 18) & 3; + out = texHandleType4(out, tex, smode, tmode, offset); + break; + } + + // Caverns water + if (texnum == 1508) + { + out = sub_GAME_7F09343C(out, TRUE); + sub_GAME_7F0CC4C8(); + } + + /** + * This texture is used on the water in Dam and Complex. You can't actually + * see the texture in Complex because it's at the bottom of the pits and the + * vertex coloring is pitch black. You can still tell it's water by + * the splash sound it makes when shot. + */ + if (texnum == 1511) + { + out = sub_GAME_7F09365C(out, TRUE); + sub_GAME_7F0CC4C8(); + } + + if (check_if_imageID_is_light(texnum)) + { + lightFixtureEntryBegin(out); + lightPending = TRUE; + } + } + + in++; + break; + + case G_RDPPIPESYNC: + syncEmitted = TRUE; + *(out++) = *(in++); + break; + + case 0xb1: + case 0xbf: + writeTexFlag = TRUE; + syncEmitted = FALSE; + *(out++) = *(in++); + break; + + case 0xbb: + saved = out; + writeTexFlag = FALSE; + *(out++) = *(in++); + break; + + case 0xba: + if (valid) + { + if ((((*(((s8 *)in) + 2)) == 17) || ((*(((s8 *)in) + 2)) == 20)) || ((*(((s8 *)in) + 2)) == 16)) + { + in++; + } + else + { + *(out++) = *(in++); + } + } + else + { + *(out++) = *(in++); + } + break; + + default: + *(out++) = *(in++); + break; + } + + count--; + } + + if (lightPending) + { + lightFixtureEntryEnd(out); + } + + return ((s32)out) - ((s32)dst); } -#else -GLOBAL_ASM( -.late_rodata -glabel PADDINGHACKING -.word 0 -/*D:8005BF20*/ -glabel jpt_tlb_ptrDL_type_B1toC0 -.word .L7F0CE66C -.word .L7F0CE720 -.word .L7F0CE720 -.word .L7F0CE720 -.word .L7F0CE720 -.word .L7F0CE720 -.word .L7F0CE720 -.word .L7F0CE720 -.word .L7F0CE720 -.word .L7F0CE6B8 -.word .L7F0CE694 -.word .L7F0CE720 -.word .L7F0CE720 -.word .L7F0CE720 -.word .L7F0CE66C -.word .L7F0CE1D8 - -/*D:8005BF60*/ -glabel jpt_tlb_ptr_C0_image_recall_types -.word .L7F0CE2BC -.word .L7F0CE428 -.word .L7F0CE4B8 -.word .L7F0CE584 -.word .L7F0CE5BC -.text -glabel texLoadFromGdl -/* 102C48 7F0CE118 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 102C4C 7F0CE11C AFB20038 */ sw $s2, 0x38($sp) -/* 102C50 7F0CE120 AFBF0054 */ sw $ra, 0x54($sp) -/* 102C54 7F0CE124 AFBE0050 */ sw $fp, 0x50($sp) -/* 102C58 7F0CE128 AFB60048 */ sw $s6, 0x48($sp) -/* 102C5C 7F0CE12C AFB40040 */ sw $s4, 0x40($sp) -/* 102C60 7F0CE130 AFB10034 */ sw $s1, 0x34($sp) -/* 102C64 7F0CE134 AFB00030 */ sw $s0, 0x30($sp) -/* 102C68 7F0CE138 240E0001 */ li $t6, 1 -/* 102C6C 7F0CE13C 000590C3 */ sra $s2, $a1, 3 -/* 102C70 7F0CE140 00E0B025 */ move $s6, $a3 -/* 102C74 7F0CE144 AFB7004C */ sw $s7, 0x4c($sp) -/* 102C78 7F0CE148 AFB50044 */ sw $s5, 0x44($sp) -/* 102C7C 7F0CE14C AFB3003C */ sw $s3, 0x3c($sp) -/* 102C80 7F0CE150 AFA600A0 */ sw $a2, 0xa0($sp) -/* 102C84 7F0CE154 AFA0008C */ sw $zero, 0x8c($sp) -/* 102C88 7F0CE158 0000A025 */ move $s4, $zero -/* 102C8C 7F0CE15C 0000F025 */ move $fp, $zero -/* 102C90 7F0CE160 AFAE005C */ sw $t6, 0x5c($sp) -/* 102C94 7F0CE164 AFA00058 */ sw $zero, 0x58($sp) -/* 102C98 7F0CE168 00808825 */ move $s1, $a0 -/* 102C9C 7F0CE16C 00C08025 */ move $s0, $a2 -/* 102CA0 7F0CE170 0FC33132 */ jal sub_GAME_7F0CC4C8 -/* 102CA4 7F0CE174 AFB20088 */ sw $s2, 0x88($sp) -/* 102CA8 7F0CE178 16C00003 */ bnez $s6, .L7F0CE188 -/* 102CAC 7F0CE17C 2417000F */ li $s7, 15 -/* 102CB0 7F0CE180 3C168009 */ lui $s6, %hi(ptr_texture_alloc_start) -/* 102CB4 7F0CE184 26D6C720 */ addiu $s6, %lo(ptr_texture_alloc_start) # addiu $s6, $s6, -0x38e0 -.L7F0CE188: -/* 102CB8 7F0CE188 1A40016F */ blez $s2, .L7F0CE748 -/* 102CBC 7F0CE18C 3C158005 */ lui $s5, %hi(D_800483C8) -/* 102CC0 7F0CE190 26B583C8 */ addiu $s5, %lo(D_800483C8) # addiu $s5, $s5, -0x7c38 -.L7F0CE194: -/* 102CC4 7F0CE194 92220000 */ lbu $v0, ($s1) -/* 102CC8 7F0CE198 284100C1 */ slti $at, $v0, 0xc1 -/* 102CCC 7F0CE19C 14200006 */ bnez $at, .L7F0CE1B8 -/* 102CD0 7F0CE1A0 244FFF4F */ addiu $t7, $v0, -0xb1 -/* 102CD4 7F0CE1A4 240100E7 */ li $at, 231 -/* 102CD8 7F0CE1A8 50410129 */ beql $v0, $at, .L7F0CE650 -/* 102CDC 7F0CE1AC 8E210000 */ lw $at, ($s1) -/* 102CE0 7F0CE1B0 1000015C */ b .L7F0CE724 -/* 102CE4 7F0CE1B4 8E210000 */ lw $at, ($s1) -.L7F0CE1B8: -/* 102CE8 7F0CE1B8 2DE10010 */ sltiu $at, $t7, 0x10 -/* 102CEC 7F0CE1BC 10200158 */ beqz $at, .L7F0CE720 -/* 102CF0 7F0CE1C0 000F7880 */ sll $t7, $t7, 2 -/* 102CF4 7F0CE1C4 3C018006 */ lui $at, %hi(jpt_tlb_ptrDL_type_B1toC0) -/* 102CF8 7F0CE1C8 002F0821 */ addu $at, $at, $t7 -/* 102CFC 7F0CE1CC 8C2FBF20 */ lw $t7, %lo(jpt_tlb_ptrDL_type_B1toC0)($at) -/* 102D00 7F0CE1D0 01E00008 */ jr $t7 -/* 102D04 7F0CE1D4 00000000 */ nop -.L7F0CE1D8: -/* 102D08 7F0CE1D8 17C00006 */ bnez $fp, .L7F0CE1F4 -/* 102D0C 7F0CE1DC 02001025 */ move $v0, $s0 -/* 102D10 7F0CE1E0 3C18E700 */ lui $t8, 0xe700 -/* 102D14 7F0CE1E4 AC580000 */ sw $t8, ($v0) -/* 102D18 7F0CE1E8 26100008 */ addiu $s0, $s0, 8 -/* 102D1C 7F0CE1EC AC400004 */ sw $zero, 4($v0) -/* 102D20 7F0CE1F0 241E0001 */ li $fp, 1 -.L7F0CE1F4: -/* 102D24 7F0CE1F4 8FB90058 */ lw $t9, 0x58($sp) -/* 102D28 7F0CE1F8 02002025 */ move $a0, $s0 -/* 102D2C 7F0CE1FC 53200004 */ beql $t9, $zero, .L7F0CE210 -/* 102D30 7F0CE200 8E330004 */ lw $s3, 4($s1) -/* 102D34 7F0CE204 0FC2ED80 */ jal save_ptrDL_enpoint_to_current_init_lightfixture_table -/* 102D38 7F0CE208 AFA00058 */ sw $zero, 0x58($sp) -/* 102D3C 7F0CE20C 8E330004 */ lw $s3, 4($s1) -.L7F0CE210: -/* 102D40 7F0CE210 3C0E8005 */ lui $t6, %hi(D_800483C4) -/* 102D44 7F0CE214 8DCE83C4 */ lw $t6, %lo(D_800483C4)($t6) -/* 102D48 7F0CE218 326D0FFF */ andi $t5, $s3, 0xfff -/* 102D4C 7F0CE21C 01A09825 */ move $s3, $t5 -/* 102D50 7F0CE220 15AE000D */ bne $t5, $t6, .L7F0CE258 -/* 102D54 7F0CE224 02C02825 */ move $a1, $s6 -/* 102D58 7F0CE228 8EA40000 */ lw $a0, ($s5) -/* 102D5C 7F0CE22C 000D7880 */ sll $t7, $t5, 2 -/* 102D60 7F0CE230 10800009 */ beqz $a0, .L7F0CE258 -/* 102D64 7F0CE234 008FC021 */ addu $t8, $a0, $t7 -/* 102D68 7F0CE238 93190000 */ lbu $t9, ($t8) -/* 102D6C 7F0CE23C 2F2100FF */ sltiu $at, $t9, 0xff -/* 102D70 7F0CE240 10200003 */ beqz $at, .L7F0CE250 -/* 102D74 7F0CE244 00000000 */ nop -/* 102D78 7F0CE248 10000004 */ b .L7F0CE25C -/* 102D7C 7F0CE24C 24140001 */ li $s4, 1 -.L7F0CE250: -/* 102D80 7F0CE250 10000002 */ b .L7F0CE25C -/* 102D84 7F0CE254 0000A025 */ move $s4, $zero -.L7F0CE258: -/* 102D88 7F0CE258 0000A025 */ move $s4, $zero -.L7F0CE25C: -/* 102D8C 7F0CE25C 0FC32FBA */ jal texLoadFromTextureNum -/* 102D90 7F0CE260 02602025 */ move $a0, $s3 -/* 102D94 7F0CE264 02602025 */ move $a0, $s3 -/* 102D98 7F0CE268 0FC32EC3 */ jal texFindInPool -/* 102D9C 7F0CE26C 02C02825 */ move $a1, $s6 -/* 102DA0 7F0CE270 104000F4 */ beqz $v0, .L7F0CE644 -/* 102DA4 7F0CE274 00409025 */ move $s2, $v0 -/* 102DA8 7F0CE278 8FA7005C */ lw $a3, 0x5c($sp) -/* 102DAC 7F0CE27C AFA0005C */ sw $zero, 0x5c($sp) -/* 102DB0 7F0CE280 02002025 */ move $a0, $s0 -/* 102DB4 7F0CE284 8FA5008C */ lw $a1, 0x8c($sp) -/* 102DB8 7F0CE288 0FC333EF */ jal texWriteTextureCmd -/* 102DBC 7F0CE28C 00403025 */ move $a2, $v0 -/* 102DC0 7F0CE290 8E230000 */ lw $v1, ($s1) -/* 102DC4 7F0CE294 00408025 */ move $s0, $v0 -/* 102DC8 7F0CE298 306D0007 */ andi $t5, $v1, 7 -/* 102DCC 7F0CE29C 2DA10005 */ sltiu $at, $t5, 5 -/* 102DD0 7F0CE2A0 102000D3 */ beqz $at, .L7F0CE5F0 -/* 102DD4 7F0CE2A4 000D6880 */ sll $t5, $t5, 2 -/* 102DD8 7F0CE2A8 3C018006 */ lui $at, %hi(jpt_tlb_ptr_C0_image_recall_types) -/* 102DDC 7F0CE2AC 002D0821 */ addu $at, $at, $t5 -/* 102DE0 7F0CE2B0 8C2DBF60 */ lw $t5, %lo(jpt_tlb_ptr_C0_image_recall_types)($at) -/* 102DE4 7F0CE2B4 01A00008 */ jr $t5 -/* 102DE8 7F0CE2B8 00000000 */ nop -.L7F0CE2BC: -/* 102DEC 7F0CE2BC 8E290004 */ lw $t1, 4($s1) -/* 102DF0 7F0CE2C0 8EA40000 */ lw $a0, ($s5) -/* 102DF4 7F0CE2C4 00033582 */ srl $a2, $v1, 0x16 -/* 102DF8 7F0CE2C8 00097602 */ srl $t6, $t1, 0x18 -/* 102DFC 7F0CE2CC 31C900FF */ andi $t1, $t6, 0xff -/* 102E00 7F0CE2D0 00033D02 */ srl $a3, $v1, 0x14 -/* 102E04 7F0CE2D4 00034482 */ srl $t0, $v1, 0x12 -/* 102E08 7F0CE2D8 00035382 */ srl $t2, $v1, 0xe -/* 102E0C 7F0CE2DC 00035A82 */ srl $t3, $v1, 0xa -/* 102E10 7F0CE2E0 30D80003 */ andi $t8, $a2, 3 -/* 102E14 7F0CE2E4 30F90003 */ andi $t9, $a3, 3 -/* 102E18 7F0CE2E8 310D0003 */ andi $t5, $t0, 3 -/* 102E1C 7F0CE2EC 314E000F */ andi $t6, $t2, 0xf -/* 102E20 7F0CE2F0 316F000F */ andi $t7, $t3, 0xf -/* 102E24 7F0CE2F4 03003025 */ move $a2, $t8 -/* 102E28 7F0CE2F8 03203825 */ move $a3, $t9 -/* 102E2C 7F0CE2FC 01A04025 */ move $t0, $t5 -/* 102E30 7F0CE300 01C05025 */ move $t2, $t6 -/* 102E34 7F0CE304 1080001B */ beqz $a0, .L7F0CE374 -/* 102E38 7F0CE308 01E05825 */ move $t3, $t7 -/* 102E3C 7F0CE30C 00131880 */ sll $v1, $s3, 2 -/* 102E40 7F0CE310 00831021 */ addu $v0, $a0, $v1 -/* 102E44 7F0CE314 90580000 */ lbu $t8, ($v0) -/* 102E48 7F0CE318 240100FF */ li $at, 255 -/* 102E4C 7F0CE31C 17010015 */ bne $t8, $at, .L7F0CE374 -/* 102E50 7F0CE320 00000000 */ nop -/* 102E54 7F0CE324 A0490000 */ sb $t1, ($v0) -/* 102E58 7F0CE328 8EB90000 */ lw $t9, ($s5) -/* 102E5C 7F0CE32C 2404000F */ li $a0, 15 -/* 102E60 7F0CE330 008E6823 */ subu $t5, $a0, $t6 -/* 102E64 7F0CE334 03231021 */ addu $v0, $t9, $v1 -/* 102E68 7F0CE338 90590001 */ lbu $t9, 1($v0) -/* 102E6C 7F0CE33C 01A07025 */ move $t6, $t5 -/* 102E70 7F0CE340 000EC140 */ sll $t8, $t6, 5 -/* 102E74 7F0CE344 332DFF1F */ andi $t5, $t9, 0xff1f -/* 102E78 7F0CE348 030D7025 */ or $t6, $t8, $t5 -/* 102E7C 7F0CE34C A04E0001 */ sb $t6, 1($v0) -/* 102E80 7F0CE350 8EAF0000 */ lw $t7, ($s5) -/* 102E84 7F0CE354 008BC023 */ subu $t8, $a0, $t3 -/* 102E88 7F0CE358 00186880 */ sll $t5, $t8, 2 -/* 102E8C 7F0CE35C 01E31021 */ addu $v0, $t7, $v1 -/* 102E90 7F0CE360 904F0001 */ lbu $t7, 1($v0) -/* 102E94 7F0CE364 31AE001C */ andi $t6, $t5, 0x1c -/* 102E98 7F0CE368 31F9FFE3 */ andi $t9, $t7, 0xffe3 -/* 102E9C 7F0CE36C 01D9C025 */ or $t8, $t6, $t9 -/* 102EA0 7F0CE370 A0580001 */ sb $t8, 1($v0) -.L7F0CE374: -/* 102EA4 7F0CE374 12800024 */ beqz $s4, .L7F0CE408 -/* 102EA8 7F0CE378 02002025 */ move $a0, $s0 -/* 102EAC 7F0CE37C 8EAD0000 */ lw $t5, ($s5) -/* 102EB0 7F0CE380 00137880 */ sll $t7, $s3, 2 -/* 102EB4 7F0CE384 AFA80010 */ sw $t0, 0x10($sp) -/* 102EB8 7F0CE388 01AF1021 */ addu $v0, $t5, $t7 -/* 102EBC 7F0CE38C 904E0001 */ lbu $t6, 1($v0) -/* 102EC0 7F0CE390 02002025 */ move $a0, $s0 -/* 102EC4 7F0CE394 02402825 */ move $a1, $s2 -/* 102EC8 7F0CE398 000EC942 */ srl $t9, $t6, 5 -/* 102ECC 7F0CE39C 02F9C023 */ subu $t8, $s7, $t9 -/* 102ED0 7F0CE3A0 AFB80014 */ sw $t8, 0x14($sp) -/* 102ED4 7F0CE3A4 8C4D0000 */ lw $t5, ($v0) -/* 102ED8 7F0CE3A8 000D7AC0 */ sll $t7, $t5, 0xb -/* 102EDC 7F0CE3AC 000F7742 */ srl $t6, $t7, 0x1d -/* 102EE0 7F0CE3B0 02EEC823 */ subu $t9, $s7, $t6 -/* 102EE4 7F0CE3B4 AFB90018 */ sw $t9, 0x18($sp) -/* 102EE8 7F0CE3B8 90580000 */ lbu $t8, ($v0) -/* 102EEC 7F0CE3BC 0FC337EA */ jal texHandleType0 -/* 102EF0 7F0CE3C0 AFB8001C */ sw $t8, 0x1c($sp) -/* 102EF4 7F0CE3C4 3C0DBA00 */ lui $t5, (0xBA001402 >> 16) # lui $t5, 0xba00 -/* 102EF8 7F0CE3C8 35AD1402 */ ori $t5, (0xBA001402 & 0xFFFF) # ori $t5, $t5, 0x1402 -/* 102EFC 7F0CE3CC AC4D0000 */ sw $t5, ($v0) -/* 102F00 7F0CE3D0 3C0EBA00 */ lui $t6, (0xBA001001 >> 16) # lui $t6, 0xba00 -/* 102F04 7F0CE3D4 3C18BA00 */ lui $t8, (0xBA001102 >> 16) # lui $t8, 0xba00 -/* 102F08 7F0CE3D8 3C0F0010 */ lui $t7, 0x10 -/* 102F0C 7F0CE3DC 35CE1001 */ ori $t6, (0xBA001001 & 0xFFFF) # ori $t6, $t6, 0x1001 -/* 102F10 7F0CE3E0 3C190001 */ lui $t9, 1 -/* 102F14 7F0CE3E4 37181102 */ ori $t8, (0xBA001102 & 0xFFFF) # ori $t8, $t8, 0x1102 -/* 102F18 7F0CE3E8 3C0D0004 */ lui $t5, 4 -/* 102F1C 7F0CE3EC AC4F0004 */ sw $t7, 4($v0) -/* 102F20 7F0CE3F0 AC59000C */ sw $t9, 0xc($v0) -/* 102F24 7F0CE3F4 AC4E0008 */ sw $t6, 8($v0) -/* 102F28 7F0CE3F8 AC4D0014 */ sw $t5, 0x14($v0) -/* 102F2C 7F0CE3FC AC580010 */ sw $t8, 0x10($v0) -/* 102F30 7F0CE400 1000007B */ b .L7F0CE5F0 -/* 102F34 7F0CE404 24500018 */ addiu $s0, $v0, 0x18 -.L7F0CE408: -/* 102F38 7F0CE408 02402825 */ move $a1, $s2 -/* 102F3C 7F0CE40C AFA80010 */ sw $t0, 0x10($sp) -/* 102F40 7F0CE410 AFAA0014 */ sw $t2, 0x14($sp) -/* 102F44 7F0CE414 AFAB0018 */ sw $t3, 0x18($sp) -/* 102F48 7F0CE418 0FC337EA */ jal texHandleType0 -/* 102F4C 7F0CE41C AFA9001C */ sw $t1, 0x1c($sp) -/* 102F50 7F0CE420 10000073 */ b .L7F0CE5F0 -/* 102F54 7F0CE424 00408025 */ move $s0, $v0 -.L7F0CE428: -/* 102F58 7F0CE428 8E240004 */ lw $a0, 4($s1) -/* 102F5C 7F0CE42C 02C02825 */ move $a1, $s6 -/* 102F60 7F0CE430 00047B02 */ srl $t7, $a0, 0xc -/* 102F64 7F0CE434 31E40FFF */ andi $a0, $t7, 0xfff -/* 102F68 7F0CE438 0FC32FBA */ jal texLoadFromTextureNum -/* 102F6C 7F0CE43C AFA40080 */ sw $a0, 0x80($sp) -/* 102F70 7F0CE440 8FA40080 */ lw $a0, 0x80($sp) -/* 102F74 7F0CE444 0FC32EC3 */ jal texFindInPool -/* 102F78 7F0CE448 02C02825 */ move $a1, $s6 -/* 102F7C 7F0CE44C 10400068 */ beqz $v0, .L7F0CE5F0 -/* 102F80 7F0CE450 02002025 */ move $a0, $s0 -/* 102F84 7F0CE454 8E230000 */ lw $v1, ($s1) -/* 102F88 7F0CE458 8E290004 */ lw $t1, 4($s1) -/* 102F8C 7F0CE45C AFA20014 */ sw $v0, 0x14($sp) -/* 102F90 7F0CE460 00033582 */ srl $a2, $v1, 0x16 -/* 102F94 7F0CE464 0009CE02 */ srl $t9, $t1, 0x18 -/* 102F98 7F0CE468 332900FF */ andi $t1, $t9, 0xff -/* 102F9C 7F0CE46C 00033D02 */ srl $a3, $v1, 0x14 -/* 102FA0 7F0CE470 00034482 */ srl $t0, $v1, 0x12 -/* 102FA4 7F0CE474 00035382 */ srl $t2, $v1, 0xe -/* 102FA8 7F0CE478 00035A82 */ srl $t3, $v1, 0xa -/* 102FAC 7F0CE47C 30CD0003 */ andi $t5, $a2, 3 -/* 102FB0 7F0CE480 30EF0003 */ andi $t7, $a3, 3 -/* 102FB4 7F0CE484 310E0003 */ andi $t6, $t0, 3 -/* 102FB8 7F0CE488 3159000F */ andi $t9, $t2, 0xf -/* 102FBC 7F0CE48C 3178000F */ andi $t8, $t3, 0xf -/* 102FC0 7F0CE490 01A03025 */ move $a2, $t5 -/* 102FC4 7F0CE494 01E03825 */ move $a3, $t7 -/* 102FC8 7F0CE498 AFB8001C */ sw $t8, 0x1c($sp) -/* 102FCC 7F0CE49C AFB90018 */ sw $t9, 0x18($sp) -/* 102FD0 7F0CE4A0 AFAE0010 */ sw $t6, 0x10($sp) -/* 102FD4 7F0CE4A4 AFA90020 */ sw $t1, 0x20($sp) -/* 102FD8 7F0CE4A8 0FC337AA */ jal texHandleType1 -/* 102FDC 7F0CE4AC 02402825 */ move $a1, $s2 -/* 102FE0 7F0CE4B0 1000004F */ b .L7F0CE5F0 -/* 102FE4 7F0CE4B4 00408025 */ move $s0, $v0 -.L7F0CE4B8: -/* 102FE8 7F0CE4B8 00033582 */ srl $a2, $v1, 0x16 -/* 102FEC 7F0CE4BC 00033D02 */ srl $a3, $v1, 0x14 -/* 102FF0 7F0CE4C0 00034482 */ srl $t0, $v1, 0x12 -/* 102FF4 7F0CE4C4 30CD0003 */ andi $t5, $a2, 3 -/* 102FF8 7F0CE4C8 30EF0003 */ andi $t7, $a3, 3 -/* 102FFC 7F0CE4CC 310E0003 */ andi $t6, $t0, 3 -/* 103000 7F0CE4D0 01A03025 */ move $a2, $t5 -/* 103004 7F0CE4D4 01E03825 */ move $a3, $t7 -/* 103008 7F0CE4D8 12800024 */ beqz $s4, .L7F0CE56C -/* 10300C 7F0CE4DC 01C04025 */ move $t0, $t6 -/* 103010 7F0CE4E0 8EB90000 */ lw $t9, ($s5) -/* 103014 7F0CE4E4 0013C080 */ sll $t8, $s3, 2 -/* 103018 7F0CE4E8 AFAE0010 */ sw $t6, 0x10($sp) -/* 10301C 7F0CE4EC 03381021 */ addu $v0, $t9, $t8 -/* 103020 7F0CE4F0 904D0001 */ lbu $t5, 1($v0) -/* 103024 7F0CE4F4 02002025 */ move $a0, $s0 -/* 103028 7F0CE4F8 02402825 */ move $a1, $s2 -/* 10302C 7F0CE4FC 000D7942 */ srl $t7, $t5, 5 -/* 103030 7F0CE500 02EF7023 */ subu $t6, $s7, $t7 -/* 103034 7F0CE504 AFAE0014 */ sw $t6, 0x14($sp) -/* 103038 7F0CE508 8C590000 */ lw $t9, ($v0) -/* 10303C 7F0CE50C 0019C2C0 */ sll $t8, $t9, 0xb -/* 103040 7F0CE510 00186F42 */ srl $t5, $t8, 0x1d -/* 103044 7F0CE514 02ED7823 */ subu $t7, $s7, $t5 -/* 103048 7F0CE518 AFAF0018 */ sw $t7, 0x18($sp) -/* 10304C 7F0CE51C 904E0000 */ lbu $t6, ($v0) -/* 103050 7F0CE520 0FC337EA */ jal texHandleType0 -/* 103054 7F0CE524 AFAE001C */ sw $t6, 0x1c($sp) -/* 103058 7F0CE528 3C19BA00 */ lui $t9, (0xBA001402 >> 16) # lui $t9, 0xba00 -/* 10305C 7F0CE52C 37391402 */ ori $t9, (0xBA001402 & 0xFFFF) # ori $t9, $t9, 0x1402 -/* 103060 7F0CE530 AC590000 */ sw $t9, ($v0) -/* 103064 7F0CE534 3C0DBA00 */ lui $t5, (0xBA001001 >> 16) # lui $t5, 0xba00 -/* 103068 7F0CE538 3C0EBA00 */ lui $t6, (0xBA001102 >> 16) # lui $t6, 0xba00 -/* 10306C 7F0CE53C 3C180010 */ lui $t8, 0x10 -/* 103070 7F0CE540 35AD1001 */ ori $t5, (0xBA001001 & 0xFFFF) # ori $t5, $t5, 0x1001 -/* 103074 7F0CE544 3C0F0001 */ lui $t7, 1 -/* 103078 7F0CE548 35CE1102 */ ori $t6, (0xBA001102 & 0xFFFF) # ori $t6, $t6, 0x1102 -/* 10307C 7F0CE54C 3C190004 */ lui $t9, 4 -/* 103080 7F0CE550 AC580004 */ sw $t8, 4($v0) -/* 103084 7F0CE554 AC4F000C */ sw $t7, 0xc($v0) -/* 103088 7F0CE558 AC4D0008 */ sw $t5, 8($v0) -/* 10308C 7F0CE55C AC590014 */ sw $t9, 0x14($v0) -/* 103090 7F0CE560 AC4E0010 */ sw $t6, 0x10($v0) -/* 103094 7F0CE564 10000022 */ b .L7F0CE5F0 -/* 103098 7F0CE568 24500018 */ addiu $s0, $v0, 0x18 -.L7F0CE56C: -/* 10309C 7F0CE56C 02002025 */ move $a0, $s0 -/* 1030A0 7F0CE570 02402825 */ move $a1, $s2 -/* 1030A4 7F0CE574 0FC33786 */ jal texHandleType2 -/* 1030A8 7F0CE578 AFA80010 */ sw $t0, 0x10($sp) -/* 1030AC 7F0CE57C 1000001C */ b .L7F0CE5F0 -/* 1030B0 7F0CE580 00408025 */ move $s0, $v0 -.L7F0CE584: -/* 1030B4 7F0CE584 00033582 */ srl $a2, $v1, 0x16 -/* 1030B8 7F0CE588 00033D02 */ srl $a3, $v1, 0x14 -/* 1030BC 7F0CE58C 00034482 */ srl $t0, $v1, 0x12 -/* 1030C0 7F0CE590 30D80003 */ andi $t8, $a2, 3 -/* 1030C4 7F0CE594 30ED0003 */ andi $t5, $a3, 3 -/* 1030C8 7F0CE598 310F0003 */ andi $t7, $t0, 3 -/* 1030CC 7F0CE59C 03003025 */ move $a2, $t8 -/* 1030D0 7F0CE5A0 01A03825 */ move $a3, $t5 -/* 1030D4 7F0CE5A4 AFAF0010 */ sw $t7, 0x10($sp) -/* 1030D8 7F0CE5A8 02002025 */ move $a0, $s0 -/* 1030DC 7F0CE5AC 0FC3382B */ jal texHandleType3 -/* 1030E0 7F0CE5B0 02402825 */ move $a1, $s2 -/* 1030E4 7F0CE5B4 1000000E */ b .L7F0CE5F0 -/* 1030E8 7F0CE5B8 00408025 */ move $s0, $v0 -.L7F0CE5BC: -/* 1030EC 7F0CE5BC 00033582 */ srl $a2, $v1, 0x16 -/* 1030F0 7F0CE5C0 00033D02 */ srl $a3, $v1, 0x14 -/* 1030F4 7F0CE5C4 00034482 */ srl $t0, $v1, 0x12 -/* 1030F8 7F0CE5C8 30CE0003 */ andi $t6, $a2, 3 -/* 1030FC 7F0CE5CC 30F90003 */ andi $t9, $a3, 3 -/* 103100 7F0CE5D0 31180003 */ andi $t8, $t0, 3 -/* 103104 7F0CE5D4 01C03025 */ move $a2, $t6 -/* 103108 7F0CE5D8 03203825 */ move $a3, $t9 -/* 10310C 7F0CE5DC AFB80010 */ sw $t8, 0x10($sp) -/* 103110 7F0CE5E0 02002025 */ move $a0, $s0 -/* 103114 7F0CE5E4 0FC33819 */ jal texHandleType4 -/* 103118 7F0CE5E8 02402825 */ move $a1, $s2 -/* 10311C 7F0CE5EC 00408025 */ move $s0, $v0 -def_7F0CE2B4: -.L7F0CE5F0: -/* 103120 7F0CE5F0 240105E4 */ li $at, 1508 -/* 103124 7F0CE5F4 16610005 */ bne $s3, $at, .L7F0CE60C -/* 103128 7F0CE5F8 02002025 */ move $a0, $s0 -/* 10312C 7F0CE5FC 0FC24D0F */ jal sub_GAME_7F09343C -/* 103130 7F0CE600 24050001 */ li $a1, 1 -/* 103134 7F0CE604 0FC33132 */ jal sub_GAME_7F0CC4C8 -/* 103138 7F0CE608 00408025 */ move $s0, $v0 -.L7F0CE60C: -/* 10313C 7F0CE60C 240105E7 */ li $at, 1511 -/* 103140 7F0CE610 16610005 */ bne $s3, $at, .L7F0CE628 -/* 103144 7F0CE614 02002025 */ move $a0, $s0 -/* 103148 7F0CE618 0FC24D97 */ jal sub_GAME_7F09365C -/* 10314C 7F0CE61C 24050001 */ li $a1, 1 -/* 103150 7F0CE620 0FC33132 */ jal sub_GAME_7F0CC4C8 -/* 103154 7F0CE624 00408025 */ move $s0, $v0 -.L7F0CE628: -/* 103158 7F0CE628 0FC2ED8C */ jal check_if_imageID_is_light -/* 10315C 7F0CE62C 02602025 */ move $a0, $s3 -/* 103160 7F0CE630 10400004 */ beqz $v0, .L7F0CE644 -/* 103164 7F0CE634 02002025 */ move $a0, $s0 -/* 103168 7F0CE638 240D0001 */ li $t5, 1 -/* 10316C 7F0CE63C 0FC2ED67 */ jal add_entry_to_init_lightfixture_table -/* 103170 7F0CE640 AFAD0058 */ sw $t5, 0x58($sp) -.L7F0CE644: -/* 103174 7F0CE644 1000003C */ b .L7F0CE738 -/* 103178 7F0CE648 26310008 */ addiu $s1, $s1, 8 -/* 10317C 7F0CE64C 8E210000 */ lw $at, ($s1) -.L7F0CE650: -/* 103180 7F0CE650 241E0001 */ li $fp, 1 -/* 103184 7F0CE654 26100008 */ addiu $s0, $s0, 8 -/* 103188 7F0CE658 AE01FFF8 */ sw $at, -8($s0) -/* 10318C 7F0CE65C 8E390004 */ lw $t9, 4($s1) -/* 103190 7F0CE660 26310008 */ addiu $s1, $s1, 8 -/* 103194 7F0CE664 10000034 */ b .L7F0CE738 -/* 103198 7F0CE668 AE19FFFC */ sw $t9, -4($s0) -.L7F0CE66C: -/* 10319C 7F0CE66C 24180001 */ li $t8, 1 -/* 1031A0 7F0CE670 AFB8005C */ sw $t8, 0x5c($sp) -/* 1031A4 7F0CE674 8E210000 */ lw $at, ($s1) -/* 1031A8 7F0CE678 0000F025 */ move $fp, $zero -/* 1031AC 7F0CE67C 26100008 */ addiu $s0, $s0, 8 -/* 1031B0 7F0CE680 AE01FFF8 */ sw $at, -8($s0) -/* 1031B4 7F0CE684 8E2F0004 */ lw $t7, 4($s1) -/* 1031B8 7F0CE688 26310008 */ addiu $s1, $s1, 8 -/* 1031BC 7F0CE68C 1000002A */ b .L7F0CE738 -/* 1031C0 7F0CE690 AE0FFFFC */ sw $t7, -4($s0) -.L7F0CE694: -/* 1031C4 7F0CE694 AFB0008C */ sw $s0, 0x8c($sp) -/* 1031C8 7F0CE698 AFA0005C */ sw $zero, 0x5c($sp) -/* 1031CC 7F0CE69C 8E210000 */ lw $at, ($s1) -/* 1031D0 7F0CE6A0 26100008 */ addiu $s0, $s0, 8 -/* 1031D4 7F0CE6A4 26310008 */ addiu $s1, $s1, 8 -/* 1031D8 7F0CE6A8 AE01FFF8 */ sw $at, -8($s0) -/* 1031DC 7F0CE6AC 8E2EFFFC */ lw $t6, -4($s1) -/* 1031E0 7F0CE6B0 10000021 */ b .L7F0CE738 -/* 1031E4 7F0CE6B4 AE0EFFFC */ sw $t6, -4($s0) -.L7F0CE6B8: -/* 1031E8 7F0CE6B8 52800013 */ beql $s4, $zero, .L7F0CE708 -/* 1031EC 7F0CE6BC 8E210000 */ lw $at, ($s1) -/* 1031F0 7F0CE6C0 82220002 */ lb $v0, 2($s1) -/* 1031F4 7F0CE6C4 24010011 */ li $at, 17 -/* 1031F8 7F0CE6C8 10410005 */ beq $v0, $at, .L7F0CE6E0 -/* 1031FC 7F0CE6CC 24010014 */ li $at, 20 -/* 103200 7F0CE6D0 10410003 */ beq $v0, $at, .L7F0CE6E0 -/* 103204 7F0CE6D4 24010010 */ li $at, 16 -/* 103208 7F0CE6D8 54410004 */ bnel $v0, $at, .L7F0CE6EC -/* 10320C 7F0CE6DC 8E210000 */ lw $at, ($s1) -.L7F0CE6E0: -/* 103210 7F0CE6E0 10000015 */ b .L7F0CE738 -/* 103214 7F0CE6E4 26310008 */ addiu $s1, $s1, 8 -/* 103218 7F0CE6E8 8E210000 */ lw $at, ($s1) -.L7F0CE6EC: -/* 10321C 7F0CE6EC 26100008 */ addiu $s0, $s0, 8 -/* 103220 7F0CE6F0 26310008 */ addiu $s1, $s1, 8 -/* 103224 7F0CE6F4 AE01FFF8 */ sw $at, -8($s0) -/* 103228 7F0CE6F8 8E2FFFFC */ lw $t7, -4($s1) -/* 10322C 7F0CE6FC 1000000E */ b .L7F0CE738 -/* 103230 7F0CE700 AE0FFFFC */ sw $t7, -4($s0) -/* 103234 7F0CE704 8E210000 */ lw $at, ($s1) -.L7F0CE708: -/* 103238 7F0CE708 26100008 */ addiu $s0, $s0, 8 -/* 10323C 7F0CE70C 26310008 */ addiu $s1, $s1, 8 -/* 103240 7F0CE710 AE01FFF8 */ sw $at, -8($s0) -/* 103244 7F0CE714 8E39FFFC */ lw $t9, -4($s1) -/* 103248 7F0CE718 10000007 */ b .L7F0CE738 -/* 10324C 7F0CE71C AE19FFFC */ sw $t9, -4($s0) -.L7F0CE720: -/* 103250 7F0CE720 8E210000 */ lw $at, ($s1) -.L7F0CE724: -/* 103254 7F0CE724 26100008 */ addiu $s0, $s0, 8 -/* 103258 7F0CE728 26310008 */ addiu $s1, $s1, 8 -/* 10325C 7F0CE72C AE01FFF8 */ sw $at, -8($s0) -/* 103260 7F0CE730 8E2DFFFC */ lw $t5, -4($s1) -/* 103264 7F0CE734 AE0DFFFC */ sw $t5, -4($s0) -.L7F0CE738: -/* 103268 7F0CE738 8FAF0088 */ lw $t7, 0x88($sp) -/* 10326C 7F0CE73C 25F8FFFF */ addiu $t8, $t7, -1 -/* 103270 7F0CE740 1F00FE94 */ bgtz $t8, .L7F0CE194 -/* 103274 7F0CE744 AFB80088 */ sw $t8, 0x88($sp) -.L7F0CE748: -/* 103278 7F0CE748 8FB90058 */ lw $t9, 0x58($sp) -/* 10327C 7F0CE74C 53200004 */ beql $t9, $zero, .L7F0CE760 -/* 103280 7F0CE750 8FAE00A0 */ lw $t6, 0xa0($sp) -/* 103284 7F0CE754 0FC2ED80 */ jal save_ptrDL_enpoint_to_current_init_lightfixture_table -/* 103288 7F0CE758 02002025 */ move $a0, $s0 -/* 10328C 7F0CE75C 8FAE00A0 */ lw $t6, 0xa0($sp) -.L7F0CE760: -/* 103290 7F0CE760 8FBF0054 */ lw $ra, 0x54($sp) -/* 103294 7F0CE764 8FB10034 */ lw $s1, 0x34($sp) -/* 103298 7F0CE768 020E1023 */ subu $v0, $s0, $t6 -/* 10329C 7F0CE76C 8FB00030 */ lw $s0, 0x30($sp) -/* 1032A0 7F0CE770 8FB20038 */ lw $s2, 0x38($sp) -/* 1032A4 7F0CE774 8FB3003C */ lw $s3, 0x3c($sp) -/* 1032A8 7F0CE778 8FB40040 */ lw $s4, 0x40($sp) -/* 1032AC 7F0CE77C 8FB50044 */ lw $s5, 0x44($sp) -/* 1032B0 7F0CE780 8FB60048 */ lw $s6, 0x48($sp) -/* 1032B4 7F0CE784 8FB7004C */ lw $s7, 0x4c($sp) -/* 1032B8 7F0CE788 8FBE0050 */ lw $fp, 0x50($sp) -/* 1032BC 7F0CE78C 03E00008 */ jr $ra -/* 1032C0 7F0CE790 27BD0098 */ addiu $sp, $sp, 0x98 -) -#endif /*** diff --git a/src/game/tex.h b/src/game/tex.h index 62f2bddc..5cd11095 100644 --- a/src/game/tex.h +++ b/src/game/tex.h @@ -21,7 +21,7 @@ struct image_sound /** * Number of items in thing2 array. */ - u16 thing2_len; + s16 thing2_len; }; typedef struct s_bss_8008D148 @@ -49,11 +49,11 @@ typedef struct s_bss_8008D2A8 } s_bss_8008D2A8; -extern struct image_sound *D_8004E86C[]; - -s32 texGetHeightAtLod(struct tex *tex, s32 lod); -void texGetDepthAndSize(struct tex *tex, s32 *deptharg, s32 *lenarg); +extern struct image_sound *g_HitTypeSounds[]; void texCopyGdls(Gfx *arg0, Gfx *arg1, s32 arg2); +void texGetDepthAndSize(struct tex *tex, s32 *deptharg, s32 *lenarg); +s32 texGetHeightAtLod(struct tex *tex, s32 lod); +s32 texLoadFromGdl(Gfx *src, s32 srcsize, Gfx *dst, void *texpool); #endif diff --git a/src/game/title.c b/src/game/title.c index 13a340d3..8d9d8f7e 100644 --- a/src/game/title.c +++ b/src/game/title.c @@ -8,28 +8,28 @@ #include #include #include -#include "matrixmath.h" #include "blood_animation.h" +#include "bondtypes.h" #include "chr.h" #include "chr_b.h" -#include "math_floor.h" -#include "title.h" -#include "unk_01B240.h" -#include "unk_01BAE0.h" -#include "bondtypes.h" -#include "image.h" -#include "math.h" -#include "objecthandler.h" -#include "ob.h" -#include "chr_b.h" -#include "initanitable.h" #include "chrobjdata.h" +#include "image.h" +#include "initanitable.h" +#include "math.h" +#include "math_floor.h" +#include "matrixmath.h" #include "model.h" - +#include "music.h" +#include "ob.h" +#include "objecthandler.h" +#include "title.h" +#include "title2.h" +#include "title3.h" extern signed short sins(unsigned short x); + // bss //CODE.bss:80069550 s32 barrelDisplayListPtr; @@ -70,39 +70,21 @@ s32 virtualaddress; * Address 80069594 * EU .bss 800684D4 */ -s32 dword_CODE_bss_80069594; +s32 gunbarrelTimer; // data u32 D_8002A7D0 = 0; u8 gunbarrel_mode = 0x3; u32 D_8002A7D8 = 0; -/* -s32 D_8002A7DC[3] = {0x00, 0x00, 0x00}; -s32 D_8002A7E8[3] = {0xFF, 0xFF, 0xFF}; -*/ -struct FolderSelect D_8002A7DC = { 0x00, 0x00, 0x00 }; -struct FolderSelect D_8002A7E8 = { 0xFF, 0xFF, 0xFF }; + +struct FolderSelectColour g_FolderGradientBlack = { 0x00, 0x00, 0x00 }; +struct FolderSelectColour g_FolderGradientWhite = { 0xFF, 0xFF, 0xFF }; Model *chrModelInstance = NULL; Model *gunModelInstance = NULL; -u32 D_8002A7FC = 0; -u32 D_8002A800 = 1; -u32 D_8002A804 = 3; -u32 D_8002A808 = 0; -u32 D_8002A80C = 0; -u32 D_8002A810 = 0; -u32 D_8002A814 = 0; -u32 D_8002A818 = 0; -u32 D_8002A81C = 0; -u32 D_8002A820 = 0; -u32 D_8002A824 = 0; -u32 D_8002A828 = 0; -u32 D_8002A82C = 0; -u32 D_8002A830 = 0; -u32 D_8002A834 = 0; -u32 D_8002A838 = 0; +ModelRenderData gunbarrelRenderData = { NULL, TRUE, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, {0, 0, 0, 0}, CULLMODE_BOTH }; f32 gunbarrelPosition1[3] = {1758.2957f, 220.0f, 684.28143f}; f32 gunbarrelPosition2[3] = {-0.97f, 0.0f, 0.24f}; @@ -132,7 +114,7 @@ Gfx *manipulateGunbarrelAndLogoMatrices(Gfx *gdl) guTranslate(&matrixBufferGunbarrel1[D_8002A7D0], titleTransitionX, titleTransitionY, -5.0f); gSPDisplayList(gdl++, &dlBasicGeometry); - gdl = sub_GAME_7F01C1A4(insert_imageDL(gdl)); + gdl = sub_GAME_7F01C1A4(clear_framebuffer_black(gdl)); gDPSetCombineMode(gdl++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetPrimColor(gdl++, 0, 0, 0xE6, 0xE6, 0xE6, 0x00); @@ -158,7 +140,11 @@ Gfx *insert_sight_backdrop_eye_intro(Gfx *gdl) return gdl; } -Gfx *sub_GAME_7F007CC8(Gfx *gdl, s32 arg1, struct FolderSelect *arg2, struct FolderSelect *arg3) + +/** + * Address: 7F007CC8 + */ +Gfx *titleRenderFolderMenuBackground(Gfx *gdl, s32 xOffset, struct FolderSelectColour *topColour, struct FolderSelectColour *bottomColour) { gDPSetRenderMode(gdl++, G_RM_OPA_SURF, G_RM_OPA_SURF2); gDPSetCycleType(gdl++, G_CYC_1CYCLE); @@ -166,23 +152,25 @@ Gfx *sub_GAME_7F007CC8(Gfx *gdl, s32 arg1, struct FolderSelect *arg2, struct Fol gDPSetTextureFilter(gdl++, G_TF_POINT); gDPPipeSync(gdl++); - return sub_GAME_7F01B240(gdl, OS_K0_TO_PHYSICAL(dword_CODE_bss_8006958C), arg1, arg2, arg3); + return titleRenderFolderMenuBackgroundLines(gdl, OS_K0_TO_PHYSICAL(dword_CODE_bss_8006958C), xOffset, topColour, bottomColour); } + Gfx *insert_sniper_sight_eye_intro(Gfx *gdl) { - struct FolderSelect sp3C = D_8002A7DC; - struct FolderSelect sp30 = D_8002A7E8; + struct FolderSelectColour topGradientColour = g_FolderGradientBlack; + struct FolderSelectColour bottomGradientColour = g_FolderGradientWhite; gSPDisplayList(gdl++, &dlBasicGeometry); - gdl = insert_imageDL(gdl); + gdl = clear_framebuffer_black(gdl); gDPSetCombineMode(gdl++, G_CC_MODULATEI_PRIM, G_CC_MODULATEI_PRIM); - return sub_GAME_7F007CC8(gdl, floorFloat((viGetX() * g_TitleX) / 1280.0f), &sp3C, &sp30); + return titleRenderFolderMenuBackground(gdl, floorFloat((viGetX() * g_TitleX) / 1280.0f), &topGradientColour, &bottomGradientColour); } + Gfx *sub_GAME_7F007E70(Gfx *gdl, u32 alpha) { gdl = sub_GAME_7F01C1A4(gdl); @@ -196,518 +184,115 @@ Gfx *sub_GAME_7F007E70(Gfx *gdl, u32 alpha) return gdl; } -#ifdef NONMATCHING -Gfx *sub_GAME_7F007F30(Gfx*, s32, s32) { -} +/** + * Address: 7F007F30 + */ +Gfx *sub_GAME_7F007F30(Gfx *gdl, s32 count, Mtxf *matrix) +{ +#if defined(REFRESH_PAL) + #define BOND_EYE_ANIM_START 114 + #define BOND_EYE_ANIM_SPEEDUP 176 + #define BOND_EYE_FIRE_SHOT 191 #else -Gfx *sub_GAME_7F007F30(Gfx*, s32, s32); - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_8004F2D0 -.word 0x3f68f5c3 -.text -glabel sub_GAME_7F007F30 -/* 03CA60 7F007F30 27BDFEE0 */ addiu $sp, $sp, -0x120 -/* 03CA64 7F007F34 3C0F8003 */ lui $t7, %hi(D_8002A7FC) -/* 03CA68 7F007F38 25EFA7FC */ addiu $t7, %lo(D_8002A7FC) # addiu $t7, $t7, -0x5804 -/* 03CA6C 7F007F3C AFBF0034 */ sw $ra, 0x34($sp) -/* 03CA70 7F007F40 AFB50030 */ sw $s5, 0x30($sp) -/* 03CA74 7F007F44 AFB4002C */ sw $s4, 0x2c($sp) -/* 03CA78 7F007F48 AFB30028 */ sw $s3, 0x28($sp) -/* 03CA7C 7F007F4C AFB20024 */ sw $s2, 0x24($sp) -/* 03CA80 7F007F50 AFB10020 */ sw $s1, 0x20($sp) -/* 03CA84 7F007F54 AFB0001C */ sw $s0, 0x1c($sp) -/* 03CA88 7F007F58 AFA40120 */ sw $a0, 0x120($sp) -/* 03CA8C 7F007F5C AFA50124 */ sw $a1, 0x124($sp) -/* 03CA90 7F007F60 AFA60128 */ sw $a2, 0x128($sp) -/* 03CA94 7F007F64 25E8003C */ addiu $t0, $t7, 0x3c -/* 03CA98 7F007F68 27AE00DC */ addiu $t6, $sp, 0xdc -.L7F007F6C: -/* 03CA9C 7F007F6C 8DE10000 */ lw $at, ($t7) -/* 03CAA0 7F007F70 25EF000C */ addiu $t7, $t7, 0xc -/* 03CAA4 7F007F74 25CE000C */ addiu $t6, $t6, 0xc -/* 03CAA8 7F007F78 ADC1FFF4 */ sw $at, -0xc($t6) -/* 03CAAC 7F007F7C 8DE1FFF8 */ lw $at, -8($t7) -/* 03CAB0 7F007F80 ADC1FFF8 */ sw $at, -8($t6) -/* 03CAB4 7F007F84 8DE1FFFC */ lw $at, -4($t7) -/* 03CAB8 7F007F88 15E8FFF8 */ bne $t7, $t0, .L7F007F6C -/* 03CABC 7F007F8C ADC1FFFC */ sw $at, -4($t6) -/* 03CAC0 7F007F90 8DE10000 */ lw $at, ($t7) -/* 03CAC4 7F007F94 0000A825 */ move $s5, $zero -/* 03CAC8 7F007F98 00009025 */ move $s2, $zero -/* 03CACC 7F007F9C ADC10000 */ sw $at, ($t6) -/* 03CAD0 7F007FA0 8FA90124 */ lw $t1, 0x124($sp) -/* 03CAD4 7F007FA4 19200034 */ blez $t1, .L7F008078 -/* 03CAD8 7F007FA8 3C140000 */ lui $s4, 0 -/* 03CADC 7F007FAC 3C138003 */ lui $s3, %hi(chrModelInstance) -/* 03CAE0 7F007FB0 3C108007 */ lui $s0, %hi(dword_CODE_bss_80069594) -/* 03CAE4 7F007FB4 26109594 */ addiu $s0, %lo(dword_CODE_bss_80069594) # addiu $s0, $s0, -0x6a6c -/* 03CAE8 7F007FB8 2673A7F4 */ addiu $s3, %lo(chrModelInstance) # addiu $s3, $s3, -0x580c -/* 03CAEC 7F007FBC 26944298 */ addiu $s4, $s4, 0x4298 -/* 03CAF0 7F007FC0 24110089 */ li $s1, 137 -/* 03CAF4 7F007FC4 8E020000 */ lw $v0, ($s0) -.L7F007FC8: -/* 03CAF8 7F007FC8 04400019 */ bltz $v0, .L7F008030 -/* 03CAFC 7F007FCC 244A0001 */ addiu $t2, $v0, 1 -/* 03CB00 7F007FD0 AE0A0000 */ sw $t2, ($s0) -/* 03CB04 7F007FD4 162A000F */ bne $s1, $t2, .L7F008014 -/* 03CB08 7F007FD8 01401025 */ move $v0, $t2 -/* 03CB0C 7F007FDC 3C018005 */ lui $at, %hi(D_8004F2D0) -/* 03CB10 7F007FE0 C424F2D0 */ lwc1 $f4, %lo(D_8004F2D0)($at) -/* 03CB14 7F007FE4 3C014180 */ li $at, 0x41800000 # 16.000000 -/* 03CB18 7F007FE8 3C0B8007 */ lui $t3, %hi(ptr_animation_table) -/* 03CB1C 7F007FEC 8D6B9538 */ lw $t3, %lo(ptr_animation_table)($t3) -/* 03CB20 7F007FF0 44813000 */ mtc1 $at, $f6 -/* 03CB24 7F007FF4 8E640000 */ lw $a0, ($s3) -/* 03CB28 7F007FF8 00003025 */ move $a2, $zero -/* 03CB2C 7F007FFC 3C074000 */ lui $a3, 0x4000 -/* 03CB30 7F008000 E7A40010 */ swc1 $f4, 0x10($sp) -/* 03CB34 7F008004 028B2821 */ addu $a1, $s4, $t3 -/* 03CB38 7F008008 0FC1BF2A */ jal modelSetAnimation -/* 03CB3C 7F00800C E7A60014 */ swc1 $f6, 0x14($sp) -/* 03CB40 7F008010 8E020000 */ lw $v0, ($s0) -.L7F008014: -/* 03CB44 7F008014 240100D4 */ li $at, 212 -/* 03CB48 7F008018 14410005 */ bne $v0, $at, .L7F008030 -/* 03CB4C 7F00801C 3C053FCC */ lui $a1, (0x3FCCCCCD >> 16) # lui $a1, 0x3fcc -/* 03CB50 7F008020 8E640000 */ lw $a0, ($s3) -/* 03CB54 7F008024 34A5CCCD */ ori $a1, (0x3FCCCCCD & 0xFFFF) # ori $a1, $a1, 0xcccd -/* 03CB58 7F008028 0FC1BF93 */ jal modelSetAnimSpeed -/* 03CB5C 7F00802C 3C064100 */ lui $a2, 0x4100 -.L7F008030: -/* 03CB60 7F008030 8E640000 */ lw $a0, ($s3) -/* 03CB64 7F008034 24050001 */ li $a1, 1 -/* 03CB68 7F008038 0FC1C2BB */ jal modelTickAnimQuarterSpeed -/* 03CB6C 7F00803C 24060001 */ li $a2, 1 -/* 03CB70 7F008040 8E0C0000 */ lw $t4, ($s0) -/* 03CB74 7F008044 240100E6 */ li $at, 230 -/* 03CB78 7F008048 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 03CB7C 7F00804C 15810005 */ bne $t4, $at, .L7F008064 -/* 03CB80 7F008050 2405006F */ li $a1, 111 -/* 03CB84 7F008054 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 03CB88 7F008058 00003025 */ move $a2, $zero -/* 03CB8C 7F00805C 0C002382 */ jal sndPlaySfx -/* 03CB90 7F008060 24150001 */ li $s5, 1 -.L7F008064: -/* 03CB94 7F008064 8FAD0124 */ lw $t5, 0x124($sp) -/* 03CB98 7F008068 26520001 */ addiu $s2, $s2, 1 -/* 03CB9C 7F00806C 564DFFD6 */ bnel $s2, $t5, .L7F007FC8 -/* 03CBA0 7F008070 8E020000 */ lw $v0, ($s0) -/* 03CBA4 7F008074 00009025 */ move $s2, $zero -.L7F008078: -/* 03CBA8 7F008078 3C138003 */ lui $s3, %hi(chrModelInstance) -/* 03CBAC 7F00807C 2673A7F4 */ addiu $s3, %lo(chrModelInstance) # addiu $s3, $s3, -0x580c -/* 03CBB0 7F008080 0FC1B100 */ jal modelSetDistanceDisabled -/* 03CBB4 7F008084 24040001 */ li $a0, 1 -/* 03CBB8 7F008088 0FC1CFF2 */ jal sub_GAME_7F073FC8 -/* 03CBBC 7F00808C 24040050 */ li $a0, 80 -/* 03CBC0 7F008090 0FC1B5AC */ jal subcalcpos -/* 03CBC4 7F008094 8E640000 */ lw $a0, ($s3) -/* 03CBC8 7F008098 3C148003 */ lui $s4, %hi(gunModelInstance) -/* 03CBCC 7F00809C 2694A7F8 */ addiu $s4, %lo(gunModelInstance) # addiu $s4, $s4, -0x5808 -/* 03CBD0 7F0080A0 8E860000 */ lw $a2, ($s4) -/* 03CBD4 7F0080A4 8CD90008 */ lw $t9, 8($a2) -/* 03CBD8 7F0080A8 8F230008 */ lw $v1, 8($t9) -/* 03CBDC 7F0080AC 8C650000 */ lw $a1, ($v1) -/* 03CBE0 7F0080B0 50A00008 */ beql $a1, $zero, .L7F0080D4 -/* 03CBE4 7F0080B4 8C650008 */ lw $a1, 8($v1) -/* 03CBE8 7F0080B8 0FC1B1E7 */ jal modelGetNodeRwData -/* 03CBEC 7F0080BC 00C02025 */ move $a0, $a2 -/* 03CBF0 7F0080C0 A4550000 */ sh $s5, ($v0) -/* 03CBF4 7F0080C4 8E860000 */ lw $a2, ($s4) -/* 03CBF8 7F0080C8 8CD80008 */ lw $t8, 8($a2) -/* 03CBFC 7F0080CC 8F030008 */ lw $v1, 8($t8) -/* 03CC00 7F0080D0 8C650008 */ lw $a1, 8($v1) -.L7F0080D4: -/* 03CC04 7F0080D4 50A00005 */ beql $a1, $zero, .L7F0080EC -/* 03CC08 7F0080D8 8FA80128 */ lw $t0, 0x128($sp) -/* 03CC0C 7F0080DC 0FC1B1E7 */ jal modelGetNodeRwData -/* 03CC10 7F0080E0 00C02025 */ move $a0, $a2 -/* 03CC14 7F0080E4 AC550000 */ sw $s5, ($v0) -/* 03CC18 7F0080E8 8FA80128 */ lw $t0, 0x128($sp) -.L7F0080EC: -/* 03CC1C 7F0080EC 8E6F0000 */ lw $t7, ($s3) -/* 03CC20 7F0080F0 AFA800DC */ sw $t0, 0xdc($sp) -/* 03CC24 7F0080F4 8DEE0008 */ lw $t6, 8($t7) -/* 03CC28 7F0080F8 85C4000E */ lh $a0, 0xe($t6) -/* 03CC2C 7F0080FC 00044980 */ sll $t1, $a0, 6 -/* 03CC30 7F008100 0FC2F5C5 */ jal dynAllocate -/* 03CC34 7F008104 01202025 */ move $a0, $t1 -/* 03CC38 7F008108 AFA200EC */ sw $v0, 0xec($sp) -/* 03CC3C 7F00810C 27A400DC */ addiu $a0, $sp, 0xdc -/* 03CC40 7F008110 0FC1BCBE */ jal subcalcmatrices -/* 03CC44 7F008114 8E650000 */ lw $a1, ($s3) -/* 03CC48 7F008118 8E8A0000 */ lw $t2, ($s4) -/* 03CC4C 7F00811C 8E640000 */ lw $a0, ($s3) -/* 03CC50 7F008120 00003025 */ move $a2, $zero -/* 03CC54 7F008124 0FC1B198 */ jal modelFindNodeMtx -/* 03CC58 7F008128 8D45001C */ lw $a1, 0x1c($t2) -/* 03CC5C 7F00812C 8E8B0000 */ lw $t3, ($s4) -/* 03CC60 7F008130 AFA200DC */ sw $v0, 0xdc($sp) -/* 03CC64 7F008134 8D6C0008 */ lw $t4, 8($t3) -/* 03CC68 7F008138 8584000E */ lh $a0, 0xe($t4) -/* 03CC6C 7F00813C 00046980 */ sll $t5, $a0, 6 -/* 03CC70 7F008140 0FC2F5C5 */ jal dynAllocate -/* 03CC74 7F008144 01A02025 */ move $a0, $t5 -/* 03CC78 7F008148 AFA200EC */ sw $v0, 0xec($sp) -/* 03CC7C 7F00814C 27A400DC */ addiu $a0, $sp, 0xdc -/* 03CC80 7F008150 0FC1BC92 */ jal instcalcmatrices -/* 03CC84 7F008154 8E850000 */ lw $a1, ($s4) -/* 03CC88 7F008158 00002025 */ move $a0, $zero -/* 03CC8C 7F00815C 0FC1AC48 */ jal sub_GAME_7F06B120 -/* 03CC90 7F008160 8E650000 */ lw $a1, ($s3) -/* 03CC94 7F008164 00402025 */ move $a0, $v0 -/* 03CC98 7F008168 0FC1AC48 */ jal sub_GAME_7F06B120 -/* 03CC9C 7F00816C 8E850000 */ lw $a1, ($s4) -/* 03CCA0 7F008170 00408025 */ move $s0, $v0 -/* 03CCA4 7F008174 0FC1ACA7 */ jal sub_GAME_7F06B29C -/* 03CCA8 7F008178 00402025 */ move $a0, $v0 -/* 03CCAC 7F00817C 0FC1AECA */ jal sub_GAME_7F06BB28 -/* 03CCB0 7F008180 02002025 */ move $a0, $s0 -/* 03CCB4 7F008184 8FB80120 */ lw $t8, 0x120($sp) -/* 03CCB8 7F008188 24190007 */ li $t9, 7 -/* 03CCBC 7F00818C 24080001 */ li $t0, 1 -/* 03CCC0 7F008190 00408025 */ move $s0, $v0 -/* 03CCC4 7F008194 AFB9010C */ sw $t9, 0x10c($sp) -/* 03CCC8 7F008198 AFA000E0 */ sw $zero, 0xe0($sp) -/* 03CCCC 7F00819C AFA800E4 */ sw $t0, 0xe4($sp) -/* 03CCD0 7F0081A0 27A400DC */ addiu $a0, $sp, 0xdc -/* 03CCD4 7F0081A4 00402825 */ move $a1, $v0 -/* 03CCD8 7F0081A8 0FC1AF03 */ jal drawjointlist -/* 03CCDC 7F0081AC AFB800E8 */ sw $t8, 0xe8($sp) -/* 03CCE0 7F0081B0 240F0002 */ li $t7, 2 -/* 03CCE4 7F0081B4 AFAF00E4 */ sw $t7, 0xe4($sp) -/* 03CCE8 7F0081B8 27A400DC */ addiu $a0, $sp, 0xdc -/* 03CCEC 7F0081BC 0FC1AF03 */ jal drawjointlist -/* 03CCF0 7F0081C0 02002825 */ move $a1, $s0 -/* 03CCF4 7F0081C4 0FC1B100 */ jal modelSetDistanceDisabled -/* 03CCF8 7F0081C8 00002025 */ move $a0, $zero -/* 03CCFC 7F0081CC 0FC1AC92 */ jal sub_GAME_7F06B248 -/* 03CD00 7F0081D0 02002025 */ move $a0, $s0 -/* 03CD04 7F0081D4 8E620000 */ lw $v0, ($s3) -/* 03CD08 7F0081D8 00008025 */ move $s0, $zero -/* 03CD0C 7F0081DC 27B10088 */ addiu $s1, $sp, 0x88 -/* 03CD10 7F0081E0 8C4E0008 */ lw $t6, 8($v0) -/* 03CD14 7F0081E4 85C9000E */ lh $t1, 0xe($t6) -/* 03CD18 7F0081E8 59200015 */ blezl $t1, .L7F008240 -/* 03CD1C 7F0081EC 8E860000 */ lw $a2, ($s4) -/* 03CD20 7F0081F0 8C4A000C */ lw $t2, 0xc($v0) -.L7F0081F4: -/* 03CD24 7F0081F4 02202825 */ move $a1, $s1 -/* 03CD28 7F0081F8 0FC16008 */ jal matrix_4x4_copy -/* 03CD2C 7F0081FC 01502021 */ addu $a0, $t2, $s0 -/* 03CD30 7F008200 8E6B0000 */ lw $t3, ($s3) -/* 03CD34 7F008204 00126980 */ sll $t5, $s2, 6 -/* 03CD38 7F008208 02202025 */ move $a0, $s1 -/* 03CD3C 7F00820C 8D6C000C */ lw $t4, 0xc($t3) -/* 03CD40 7F008210 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 03CD44 7F008214 018D2821 */ addu $a1, $t4, $t5 -/* 03CD48 7F008218 8E620000 */ lw $v0, ($s3) -/* 03CD4C 7F00821C 26520001 */ addiu $s2, $s2, 1 -/* 03CD50 7F008220 26100040 */ addiu $s0, $s0, 0x40 -/* 03CD54 7F008224 8C590008 */ lw $t9, 8($v0) -/* 03CD58 7F008228 8738000E */ lh $t8, 0xe($t9) -/* 03CD5C 7F00822C 0258082A */ slt $at, $s2, $t8 -/* 03CD60 7F008230 5420FFF0 */ bnezl $at, .L7F0081F4 -/* 03CD64 7F008234 8C4A000C */ lw $t2, 0xc($v0) -/* 03CD68 7F008238 00009025 */ move $s2, $zero -/* 03CD6C 7F00823C 8E860000 */ lw $a2, ($s4) -.L7F008240: -/* 03CD70 7F008240 00008025 */ move $s0, $zero -/* 03CD74 7F008244 27B10048 */ addiu $s1, $sp, 0x48 -/* 03CD78 7F008248 8CC80008 */ lw $t0, 8($a2) -/* 03CD7C 7F00824C 850F000E */ lh $t7, 0xe($t0) -/* 03CD80 7F008250 59E00014 */ blezl $t7, .L7F0082A4 -/* 03CD84 7F008254 8FBF0034 */ lw $ra, 0x34($sp) -/* 03CD88 7F008258 8CCE000C */ lw $t6, 0xc($a2) -.L7F00825C: -/* 03CD8C 7F00825C 02202825 */ move $a1, $s1 -/* 03CD90 7F008260 0FC16008 */ jal matrix_4x4_copy -/* 03CD94 7F008264 01D02021 */ addu $a0, $t6, $s0 -/* 03CD98 7F008268 8E890000 */ lw $t1, ($s4) -/* 03CD9C 7F00826C 00125980 */ sll $t3, $s2, 6 -/* 03CDA0 7F008270 02202025 */ move $a0, $s1 -/* 03CDA4 7F008274 8D2A000C */ lw $t2, 0xc($t1) -/* 03CDA8 7F008278 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 03CDAC 7F00827C 014B2821 */ addu $a1, $t2, $t3 -/* 03CDB0 7F008280 8E860000 */ lw $a2, ($s4) -/* 03CDB4 7F008284 26520001 */ addiu $s2, $s2, 1 -/* 03CDB8 7F008288 26100040 */ addiu $s0, $s0, 0x40 -/* 03CDBC 7F00828C 8CCC0008 */ lw $t4, 8($a2) -/* 03CDC0 7F008290 858D000E */ lh $t5, 0xe($t4) -/* 03CDC4 7F008294 024D082A */ slt $at, $s2, $t5 -/* 03CDC8 7F008298 5420FFF0 */ bnezl $at, .L7F00825C -/* 03CDCC 7F00829C 8CCE000C */ lw $t6, 0xc($a2) -/* 03CDD0 7F0082A0 8FBF0034 */ lw $ra, 0x34($sp) -.L7F0082A4: -/* 03CDD4 7F0082A4 8FA200E8 */ lw $v0, 0xe8($sp) -/* 03CDD8 7F0082A8 8FB0001C */ lw $s0, 0x1c($sp) -/* 03CDDC 7F0082AC 8FB10020 */ lw $s1, 0x20($sp) -/* 03CDE0 7F0082B0 8FB20024 */ lw $s2, 0x24($sp) -/* 03CDE4 7F0082B4 8FB30028 */ lw $s3, 0x28($sp) -/* 03CDE8 7F0082B8 8FB4002C */ lw $s4, 0x2c($sp) -/* 03CDEC 7F0082BC 8FB50030 */ lw $s5, 0x30($sp) -/* 03CDF0 7F0082C0 03E00008 */ jr $ra -/* 03CDF4 7F0082C4 27BD0120 */ addiu $sp, $sp, 0x120 -) + #define BOND_EYE_ANIM_START 137 + #define BOND_EYE_ANIM_SPEEDUP 212 + #define BOND_EYE_FIRE_SHOT 230 #endif + u32 pad; + ModelRenderData renderData; + u32 pad2[2]; + ModelHitEntry *entry; + bool playedShot; + s32 i; -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_80047720 -.word 0x3f68f5c3 -.text -glabel sub_GAME_7F007F30 -/* 03A8A0 7F007EB0 27BDFEE0 */ addiu $sp, $sp, -0x120 -/* 03A8A4 7F007EB4 3C0F8002 */ lui $t7, %hi(D_8002A7FC) # $t7, 0x8002 -/* 03A8A8 7F007EB8 25EF5D4C */ addiu $t7, %lo(D_8002A7FC) # addiu $t7, $t7, 0x5d4c -/* 03A8AC 7F007EBC AFBF0034 */ sw $ra, 0x34($sp) -/* 03A8B0 7F007EC0 AFB50030 */ sw $s5, 0x30($sp) -/* 03A8B4 7F007EC4 AFB4002C */ sw $s4, 0x2c($sp) -/* 03A8B8 7F007EC8 AFB30028 */ sw $s3, 0x28($sp) -/* 03A8BC 7F007ECC AFB20024 */ sw $s2, 0x24($sp) -/* 03A8C0 7F007ED0 AFB10020 */ sw $s1, 0x20($sp) -/* 03A8C4 7F007ED4 AFB0001C */ sw $s0, 0x1c($sp) -/* 03A8C8 7F007ED8 AFA40120 */ sw $a0, 0x120($sp) -/* 03A8CC 7F007EDC AFA50124 */ sw $a1, 0x124($sp) -/* 03A8D0 7F007EE0 AFA60128 */ sw $a2, 0x128($sp) -/* 03A8D4 7F007EE4 25E8003C */ addiu $t0, $t7, 0x3c -/* 03A8D8 7F007EE8 27AE00DC */ addiu $t6, $sp, 0xdc -.L7F007EEC: -/* 03A8DC 7F007EEC 8DE10000 */ lw $at, ($t7) -/* 03A8E0 7F007EF0 25EF000C */ addiu $t7, $t7, 0xc -/* 03A8E4 7F007EF4 25CE000C */ addiu $t6, $t6, 0xc -/* 03A8E8 7F007EF8 ADC1FFF4 */ sw $at, -0xc($t6) -/* 03A8EC 7F007EFC 8DE1FFF8 */ lw $at, -8($t7) -/* 03A8F0 7F007F00 ADC1FFF8 */ sw $at, -8($t6) -/* 03A8F4 7F007F04 8DE1FFFC */ lw $at, -4($t7) -/* 03A8F8 7F007F08 15E8FFF8 */ bne $t7, $t0, .L7F007EEC -/* 03A8FC 7F007F0C ADC1FFFC */ sw $at, -4($t6) -/* 03A900 7F007F10 8DE10000 */ lw $at, ($t7) -/* 03A904 7F007F14 0000A825 */ move $s5, $zero -/* 03A908 7F007F18 00009025 */ move $s2, $zero -/* 03A90C 7F007F1C ADC10000 */ sw $at, ($t6) -/* 03A910 7F007F20 8FA90124 */ lw $t1, 0x124($sp) -/* 03A914 7F007F24 19200034 */ blez $t1, .L7F007FF8 -/* 03A918 7F007F28 3C140000 */ lui $s4, 0 # $s4, 0 -/* 03A91C 7F007F2C 3C138002 */ lui $s3, %hi(chrModelInstance) # $s3, 0x8002 -/* 03A920 7F007F30 3C108006 */ lui $s0, %hi(dword_CODE_bss_80069594) # $s0, 0x8006 -/* 03A924 7F007F34 261084D4 */ addiu $s0, %lo(dword_CODE_bss_80069594) # addiu $s0, $s0, -0x7b2c -/* 03A928 7F007F38 26735D44 */ addiu $s3, %lo(chrModelInstance) # addiu $s3, $s3, 0x5d44 -/* 03A92C 7F007F3C 26944298 */ addiu $s4, 0x4298 # addiu $s4, $s4, 0x4298 -/* 03A930 7F007F40 24110072 */ li $s1, 114 -/* 03A934 7F007F44 8E020000 */ lw $v0, ($s0) -.L7F007F48: -/* 03A938 7F007F48 04400019 */ bltz $v0, .L7F007FB0 -/* 03A93C 7F007F4C 244A0001 */ addiu $t2, $v0, 1 -/* 03A940 7F007F50 AE0A0000 */ sw $t2, ($s0) -/* 03A944 7F007F54 162A000F */ bne $s1, $t2, .L7F007F94 -/* 03A948 7F007F58 01401025 */ move $v0, $t2 -/* 03A94C 7F007F5C 3C018004 */ lui $at, %hi(D_80047720) # $at, 0x8004 -/* 03A950 7F007F60 C4247720 */ lwc1 $f4, %lo(D_80047720)($at) -/* 03A954 7F007F64 3C014180 */ li $at, 0x41800000 # 16.000000 -/* 03A958 7F007F68 3C0B8006 */ lui $t3, %hi(ptr_animation_table) # $t3, 0x8006 -/* 03A95C 7F007F6C 8D6B8478 */ lw $t3, %lo(ptr_animation_table)($t3) -/* 03A960 7F007F70 44813000 */ mtc1 $at, $f6 -/* 03A964 7F007F74 8E640000 */ lw $a0, ($s3) -/* 03A968 7F007F78 00003025 */ move $a2, $zero -/* 03A96C 7F007F7C 3C074000 */ lui $a3, 0x4000 -/* 03A970 7F007F80 E7A40010 */ swc1 $f4, 0x10($sp) -/* 03A974 7F007F84 028B2821 */ addu $a1, $s4, $t3 -/* 03A978 7F007F88 0FC1BF92 */ jal modelSetAnimation -/* 03A97C 7F007F8C E7A60014 */ swc1 $f6, 0x14($sp) -/* 03A980 7F007F90 8E020000 */ lw $v0, ($s0) -.L7F007F94: -/* 03A984 7F007F94 240100B0 */ li $at, 176 -/* 03A988 7F007F98 14410005 */ bne $v0, $at, .L7F007FB0 -/* 03A98C 7F007F9C 3C053FCC */ lui $a1, (0x3FCCCCCD >> 16) # lui $a1, 0x3fcc -/* 03A990 7F007FA0 8E640000 */ lw $a0, ($s3) -/* 03A994 7F007FA4 34A5CCCD */ ori $a1, (0x3FCCCCCD & 0xFFFF) # ori $a1, $a1, 0xcccd -/* 03A998 7F007FA8 0FC1BFFB */ jal modelSetAnimSpeed -/* 03A99C 7F007FAC 3C064100 */ lui $a2, 0x4100 -.L7F007FB0: -/* 03A9A0 7F007FB0 8E640000 */ lw $a0, ($s3) -/* 03A9A4 7F007FB4 24050001 */ li $a1, 1 -/* 03A9A8 7F007FB8 0FC1C323 */ jal modelTickAnimQuarterSpeed -/* 03A9AC 7F007FBC 24060001 */ li $a2, 1 -/* 03A9B0 7F007FC0 8E0C0000 */ lw $t4, ($s0) -/* 03A9B4 7F007FC4 240100BF */ li $at, 191 -/* 03A9B8 7F007FC8 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 03A9BC 7F007FCC 15810005 */ bne $t4, $at, .L7F007FE4 -/* 03A9C0 7F007FD0 2405006F */ li $a1, 111 -/* 03A9C4 7F007FD4 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 03A9C8 7F007FD8 00003025 */ move $a2, $zero -/* 03A9CC 7F007FDC 0C00209A */ jal sndPlaySfx -/* 03A9D0 7F007FE0 24150001 */ li $s5, 1 -.L7F007FE4: -/* 03A9D4 7F007FE4 8FAD0124 */ lw $t5, 0x124($sp) -/* 03A9D8 7F007FE8 26520001 */ addiu $s2, $s2, 1 -/* 03A9DC 7F007FEC 564DFFD6 */ bnel $s2, $t5, .L7F007F48 -/* 03A9E0 7F007FF0 8E020000 */ lw $v0, ($s0) -/* 03A9E4 7F007FF4 00009025 */ move $s2, $zero -.L7F007FF8: -/* 03A9E8 7F007FF8 3C138002 */ lui $s3, %hi(chrModelInstance) # $s3, 0x8002 -/* 03A9EC 7F007FFC 26735D44 */ addiu $s3, %lo(chrModelInstance) # addiu $s3, $s3, 0x5d44 -/* 03A9F0 7F008000 0FC1B2D0 */ jal modelSetDistanceDisabled -/* 03A9F4 7F008004 24040001 */ li $a0, 1 -/* 03A9F8 7F008008 0FC1D037 */ jal sub_GAME_7F073FC8 -/* 03A9FC 7F00800C 24040050 */ li $a0, 80 -/* 03AA00 7F008010 0FC1B6B8 */ jal subcalcpos -/* 03AA04 7F008014 8E640000 */ lw $a0, ($s3) -/* 03AA08 7F008018 3C148002 */ lui $s4, %hi(gunModelInstance) # $s4, 0x8002 -/* 03AA0C 7F00801C 26945D48 */ addiu $s4, %lo(gunModelInstance) # addiu $s4, $s4, 0x5d48 -/* 03AA10 7F008020 8E860000 */ lw $a2, ($s4) -/* 03AA14 7F008024 8CD90008 */ lw $t9, 8($a2) -/* 03AA18 7F008028 8F230008 */ lw $v1, 8($t9) -/* 03AA1C 7F00802C 8C650000 */ lw $a1, ($v1) -/* 03AA20 7F008030 50A00008 */ beql $a1, $zero, .L7F008054 -/* 03AA24 7F008034 8C650008 */ lw $a1, 8($v1) -/* 03AA28 7F008038 0FC1B3A3 */ jal modelGetNodeRwData -/* 03AA2C 7F00803C 00C02025 */ move $a0, $a2 -/* 03AA30 7F008040 A4550000 */ sh $s5, ($v0) -/* 03AA34 7F008044 8E860000 */ lw $a2, ($s4) -/* 03AA38 7F008048 8CD80008 */ lw $t8, 8($a2) -/* 03AA3C 7F00804C 8F030008 */ lw $v1, 8($t8) -/* 03AA40 7F008050 8C650008 */ lw $a1, 8($v1) -.L7F008054: -/* 03AA44 7F008054 50A00005 */ beql $a1, $zero, .L7F00806C -/* 03AA48 7F008058 8FA80128 */ lw $t0, 0x128($sp) -/* 03AA4C 7F00805C 0FC1B3A3 */ jal modelGetNodeRwData -/* 03AA50 7F008060 00C02025 */ move $a0, $a2 -/* 03AA54 7F008064 AC550000 */ sw $s5, ($v0) -/* 03AA58 7F008068 8FA80128 */ lw $t0, 0x128($sp) -.L7F00806C: -/* 03AA5C 7F00806C 8E6F0000 */ lw $t7, ($s3) -/* 03AA60 7F008070 AFA800DC */ sw $t0, 0xdc($sp) -/* 03AA64 7F008074 8DEE0008 */ lw $t6, 8($t7) -/* 03AA68 7F008078 85C4000E */ lh $a0, 0xe($t6) -/* 03AA6C 7F00807C 00044980 */ sll $t1, $a0, 6 -/* 03AA70 7F008080 0FC2F2B1 */ jal dynAllocate -/* 03AA74 7F008084 01202025 */ move $a0, $t1 -/* 03AA78 7F008088 AFA200EC */ sw $v0, 0xec($sp) -/* 03AA7C 7F00808C 27A400DC */ addiu $a0, $sp, 0xdc -/* 03AA80 7F008090 0FC1BD9C */ jal subcalcmatrices -/* 03AA84 7F008094 8E650000 */ lw $a1, ($s3) -/* 03AA88 7F008098 8E8A0000 */ lw $t2, ($s4) -/* 03AA8C 7F00809C 8E640000 */ lw $a0, ($s3) -/* 03AA90 7F0080A0 00003025 */ move $a2, $zero -/* 03AA94 7F0080A4 0FC1B366 */ jal modelFindNodeMtx -/* 03AA98 7F0080A8 8D45001C */ lw $a1, 0x1c($t2) -/* 03AA9C 7F0080AC 8E8B0000 */ lw $t3, ($s4) -/* 03AAA0 7F0080B0 AFA200DC */ sw $v0, 0xdc($sp) -/* 03AAA4 7F0080B4 8D6C0008 */ lw $t4, 8($t3) -/* 03AAA8 7F0080B8 8584000E */ lh $a0, 0xe($t4) -/* 03AAAC 7F0080BC 00046980 */ sll $t5, $a0, 6 -/* 03AAB0 7F0080C0 0FC2F2B1 */ jal dynAllocate -/* 03AAB4 7F0080C4 01A02025 */ move $a0, $t5 -/* 03AAB8 7F0080C8 AFA200EC */ sw $v0, 0xec($sp) -/* 03AABC 7F0080CC 27A400DC */ addiu $a0, $sp, 0xdc -/* 03AAC0 7F0080D0 0FC1BD8D */ jal instcalcmatrices -/* 03AAC4 7F0080D4 8E850000 */ lw $a1, ($s4) -/* 03AAC8 7F0080D8 00002025 */ move $a0, $zero -/* 03AACC 7F0080DC 0FC1AE34 */ jal sub_GAME_7F06B120 -/* 03AAD0 7F0080E0 8E650000 */ lw $a1, ($s3) -/* 03AAD4 7F0080E4 00402025 */ move $a0, $v0 -/* 03AAD8 7F0080E8 0FC1AE34 */ jal sub_GAME_7F06B120 -/* 03AADC 7F0080EC 8E850000 */ lw $a1, ($s4) -/* 03AAE0 7F0080F0 00408025 */ move $s0, $v0 -/* 03AAE4 7F0080F4 0FC1AE93 */ jal sub_GAME_7F06B29C -/* 03AAE8 7F0080F8 00402025 */ move $a0, $v0 -/* 03AAEC 7F0080FC 0FC1B0B6 */ jal sub_GAME_7F06BB28 -/* 03AAF0 7F008100 02002025 */ move $a0, $s0 -/* 03AAF4 7F008104 8FB80120 */ lw $t8, 0x120($sp) -/* 03AAF8 7F008108 24190007 */ li $t9, 7 -/* 03AAFC 7F00810C 24080001 */ li $t0, 1 -/* 03AB00 7F008110 00408025 */ move $s0, $v0 -/* 03AB04 7F008114 AFB9010C */ sw $t9, 0x10c($sp) -/* 03AB08 7F008118 AFA000E0 */ sw $zero, 0xe0($sp) -/* 03AB0C 7F00811C AFA800E4 */ sw $t0, 0xe4($sp) -/* 03AB10 7F008120 27A400DC */ addiu $a0, $sp, 0xdc -/* 03AB14 7F008124 00402825 */ move $a1, $v0 -/* 03AB18 7F008128 0FC1B0EF */ jal drawjointlist -/* 03AB1C 7F00812C AFB800E8 */ sw $t8, 0xe8($sp) -/* 03AB20 7F008130 240F0002 */ li $t7, 2 -/* 03AB24 7F008134 AFAF00E4 */ sw $t7, 0xe4($sp) -/* 03AB28 7F008138 27A400DC */ addiu $a0, $sp, 0xdc -/* 03AB2C 7F00813C 0FC1B0EF */ jal drawjointlist -/* 03AB30 7F008140 02002825 */ move $a1, $s0 -/* 03AB34 7F008144 0FC1B2D0 */ jal modelSetDistanceDisabled -/* 03AB38 7F008148 00002025 */ move $a0, $zero -/* 03AB3C 7F00814C 0FC1AE7E */ jal sub_GAME_7F06B248 -/* 03AB40 7F008150 02002025 */ move $a0, $s0 -/* 03AB44 7F008154 8E620000 */ lw $v0, ($s3) -/* 03AB48 7F008158 00008025 */ move $s0, $zero -/* 03AB4C 7F00815C 27B10088 */ addiu $s1, $sp, 0x88 -/* 03AB50 7F008160 8C4E0008 */ lw $t6, 8($v0) -/* 03AB54 7F008164 85C9000E */ lh $t1, 0xe($t6) -/* 03AB58 7F008168 59200015 */ blezl $t1, .L7F0081C0 -/* 03AB5C 7F00816C 8E860000 */ lw $a2, ($s4) -/* 03AB60 7F008170 8C4A000C */ lw $t2, 0xc($v0) -.L7F008174: -/* 03AB64 7F008174 02202825 */ move $a1, $s1 -/* 03AB68 7F008178 0FC16132 */ jal matrix_4x4_copy -/* 03AB6C 7F00817C 01502021 */ addu $a0, $t2, $s0 -/* 03AB70 7F008180 8E6B0000 */ lw $t3, ($s3) -/* 03AB74 7F008184 00126980 */ sll $t5, $s2, 6 -/* 03AB78 7F008188 02202025 */ move $a0, $s1 -/* 03AB7C 7F00818C 8D6C000C */ lw $t4, 0xc($t3) -/* 03AB80 7F008190 0FC16451 */ jal matrix_4x4_f32_to_s32 -/* 03AB84 7F008194 018D2821 */ addu $a1, $t4, $t5 -/* 03AB88 7F008198 8E620000 */ lw $v0, ($s3) -/* 03AB8C 7F00819C 26520001 */ addiu $s2, $s2, 1 -/* 03AB90 7F0081A0 26100040 */ addiu $s0, $s0, 0x40 -/* 03AB94 7F0081A4 8C590008 */ lw $t9, 8($v0) -/* 03AB98 7F0081A8 8738000E */ lh $t8, 0xe($t9) -/* 03AB9C 7F0081AC 0258082A */ slt $at, $s2, $t8 -/* 03ABA0 7F0081B0 5420FFF0 */ bnezl $at, .L7F008174 -/* 03ABA4 7F0081B4 8C4A000C */ lw $t2, 0xc($v0) -/* 03ABA8 7F0081B8 00009025 */ move $s2, $zero -/* 03ABAC 7F0081BC 8E860000 */ lw $a2, ($s4) -.L7F0081C0: -/* 03ABB0 7F0081C0 00008025 */ move $s0, $zero -/* 03ABB4 7F0081C4 27B10048 */ addiu $s1, $sp, 0x48 -/* 03ABB8 7F0081C8 8CC80008 */ lw $t0, 8($a2) -/* 03ABBC 7F0081CC 850F000E */ lh $t7, 0xe($t0) -/* 03ABC0 7F0081D0 59E00014 */ blezl $t7, .L7F008224 -/* 03ABC4 7F0081D4 8FBF0034 */ lw $ra, 0x34($sp) -/* 03ABC8 7F0081D8 8CCE000C */ lw $t6, 0xc($a2) -.L7F0081DC: -/* 03ABCC 7F0081DC 02202825 */ move $a1, $s1 -/* 03ABD0 7F0081E0 0FC16132 */ jal matrix_4x4_copy -/* 03ABD4 7F0081E4 01D02021 */ addu $a0, $t6, $s0 -/* 03ABD8 7F0081E8 8E890000 */ lw $t1, ($s4) -/* 03ABDC 7F0081EC 00125980 */ sll $t3, $s2, 6 -/* 03ABE0 7F0081F0 02202025 */ move $a0, $s1 -/* 03ABE4 7F0081F4 8D2A000C */ lw $t2, 0xc($t1) -/* 03ABE8 7F0081F8 0FC16451 */ jal matrix_4x4_f32_to_s32 -/* 03ABEC 7F0081FC 014B2821 */ addu $a1, $t2, $t3 -/* 03ABF0 7F008200 8E860000 */ lw $a2, ($s4) -/* 03ABF4 7F008204 26520001 */ addiu $s2, $s2, 1 -/* 03ABF8 7F008208 26100040 */ addiu $s0, $s0, 0x40 -/* 03ABFC 7F00820C 8CCC0008 */ lw $t4, 8($a2) -/* 03AC00 7F008210 858D000E */ lh $t5, 0xe($t4) -/* 03AC04 7F008214 024D082A */ slt $at, $s2, $t5 -/* 03AC08 7F008218 5420FFF0 */ bnezl $at, .L7F0081DC -/* 03AC0C 7F00821C 8CCE000C */ lw $t6, 0xc($a2) -/* 03AC10 7F008220 8FBF0034 */ lw $ra, 0x34($sp) -.L7F008224: -/* 03AC14 7F008224 8FA200E8 */ lw $v0, 0xe8($sp) -/* 03AC18 7F008228 8FB0001C */ lw $s0, 0x1c($sp) -/* 03AC1C 7F00822C 8FB10020 */ lw $s1, 0x20($sp) -/* 03AC20 7F008230 8FB20024 */ lw $s2, 0x24($sp) -/* 03AC24 7F008234 8FB30028 */ lw $s3, 0x28($sp) -/* 03AC28 7F008238 8FB4002C */ lw $s4, 0x2c($sp) -/* 03AC2C 7F00823C 8FB50030 */ lw $s5, 0x30($sp) -/* 03AC30 7F008240 03E00008 */ jr $ra -/* 03AC34 7F008244 27BD0120 */ addiu $sp, $sp, 0x120 -) -#endif + renderData = gunbarrelRenderData; + playedShot = FALSE; + + for (i = 0; i < count; i++) + { + if (gunbarrelTimer >= 0) + { + gunbarrelTimer++; + + if (gunbarrelTimer == BOND_EYE_ANIM_START) + { + modelSetAnimation(chrModelInstance, (struct ModelAnimation *) ((s32) &ANIM_DATA_bond_eye_fire + (s32) &ptr_animation_table->data), 0, 2.0f, 0.910000026f, 16.0f); + } + + if (gunbarrelTimer == BOND_EYE_ANIM_SPEEDUP) + { + modelSetAnimSpeed(chrModelInstance, 1.6f, 8.0f); + } + } + + modelTickAnim(chrModelInstance, 1, 1); + + if (gunbarrelTimer == BOND_EYE_FIRE_SHOT) + { + sndPlaySfx(g_musicSfxBufferPtr, GUN_RIFLE7BIG_1_SFX, NULL); + playedShot = TRUE; + } + } + + modelSetDistanceDisabled(1); + sub_GAME_7F073FC8(80); + subcalcpos(chrModelInstance); + + if (gunModelInstance->obj->Switches[0] != NULL) + { + modelGetNodeRwData(gunModelInstance, gunModelInstance->obj->Switches[0])->Gunfire.visible = playedShot; + } + + if (gunModelInstance->obj->Switches[2] != NULL) + { + modelGetNodeRwData(gunModelInstance, gunModelInstance->obj->Switches[2])->Switch.visible = playedShot; + } + + renderData.basemtx = matrix; + renderData.mtxlist = dynAllocate(chrModelInstance->obj->numMatrices << 6); + subcalcmatrices(&renderData, chrModelInstance); + + renderData.basemtx = modelFindNodeMtx(chrModelInstance, gunModelInstance->attachedto_objinst, 0); + renderData.mtxlist = dynAllocate(gunModelInstance->obj->numMatrices << 6); + instcalcmatrices(&renderData, gunModelInstance); + + entry = sub_GAME_7F06B120(NULL, chrModelInstance); + entry = sub_GAME_7F06B120(entry, gunModelInstance); + sub_GAME_7F06B29C(entry); + entry = sub_GAME_7F06BB28(entry); + + renderData.PropType = 7; + renderData.zbufferenabled = FALSE; + renderData.gdl = gdl; + renderData.flags = 1; + drawjointlist(&renderData, entry); + + renderData.flags = 2; + drawjointlist(&renderData, entry); + + modelSetDistanceDisabled(0); + sub_GAME_7F06B248(entry); + + for (i = 0; i < chrModelInstance->obj->numMatrices; i++) + { + Mtxf sp88; + + matrix_4x4_copy((Mtxf *) &((s8 *) chrModelInstance->render_pos)[i * sizeof(Mtxf)], &sp88); + matrix_4x4_f32_to_s32(&sp88, &((Mtxf *) chrModelInstance->render_pos)[i]); + } + + for (i = 0; i < gunModelInstance->obj->numMatrices; i++) + { + Mtxf sp48; + + matrix_4x4_copy((Mtxf *) &((s8 *) gunModelInstance->render_pos)[i * sizeof(Mtxf)], &sp48); + matrix_4x4_f32_to_s32(&sp48, &((Mtxf *) gunModelInstance->render_pos)[i]); + } + + return renderData.gdl; +} -#endif Gfx *insert_bond_eye_intro(Gfx *gdl) { Mtxf matrix; @@ -729,15 +314,17 @@ Gfx *insert_bond_eye_intro(Gfx *gdl) { #endif } + extern Gfx *D_020043E8; extern Gfx *DL_RAREWARETEXT; extern Gfx *D_02004758; extern u8 *D_02004FE8; extern u8 *D_02005FF0; + Gfx *load_display_rare_logo(Gfx *gdl, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { cameraPosition1[2] = arg3; gSPDisplayList(gdl++, &dlBasicGeometry); - gdl = insert_imageDL(gdl); + gdl = clear_framebuffer_black(gdl); { u16 perspNorm; guPerspective(&matrixBufferRareLogo0[D_8002A7D0], &perspNorm, 60.0f, (320.0f / 240.0f), 100.0f, 5000.0f, 1.0f); @@ -780,6 +367,7 @@ Gfx *load_display_rare_logo(Gfx *gdl, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { return gdl; } + extern void *_rarewarelogoSegmentRomStart; extern void *_rarewarelogoSegmentStart; extern void *_rarewarelogoSegmentEnd; @@ -792,6 +380,7 @@ void setupRarewareLogoData(s32 address, s32 size) { romCopy(virtualaddress, &_rarewarelogoSegmentRomStart, ALIGN64_V2((u32)&_rarewarelogoSegmentEnd - (u32)&_rarewarelogoSegmentStart)); } + Gfx *retrieve_display_rareware_logo(Gfx *gdl) { #if defined(REFRESH_PAL) @@ -839,11 +428,12 @@ Gfx *retrieve_display_rareware_logo(Gfx *gdl) return gdl; } + s32 isGunBarrelInMode2(void) { return (gunbarrel_mode == 2); } -void rle_expand_8bit(s32, s32); + extern void *unknown2; extern void *unknown2_end; void sub_GAME_7F008DE4(u8 **addr, s32 *size) { @@ -856,9 +446,6 @@ void sub_GAME_7F008DE4(u8 **addr, s32 *size) { } - - - void initializeGunBarrelIntro(u8 *gfxBuffer, s32 bufferSize) { struct ModelAnimation *animation; @@ -914,7 +501,7 @@ void initializeGunBarrelIntro(u8 *gfxBuffer, s32 bufferSize) chrModelInstance = setup_chr_instance(BODY_Brosnan_Tuxedo, BODY_Male_Pierce_Bond_Tuxedo, c_item_entries[BODY_Brosnan_Tuxedo].header, c_item_entries[BODY_Male_Pierce_Bond_Tuxedo].header, 0); modelSetScale(chrModelInstance, 0.18779343f); - sub_GAME_7F06CE84(chrModelInstance, 1.0f); + modelSetAnimTranslationScale(chrModelInstance, 1.0f); setsuboffset(chrModelInstance, &sp50); setsubroty(chrModelInstance, 0.0f); #if defined(VERSION_EU) @@ -941,13 +528,13 @@ void initializeGunBarrelIntro(u8 *gfxBuffer, s32 bufferSize) modelCalculateRwDataLen(PitemZ_entries[191].header); - gunModelInstance = get_obj_instance_controller_for_header(PitemZ_entries[PROP_CHRWPPK].header); + gunModelInstance = modelmgrInstantiateModel(PitemZ_entries[PROP_CHRWPPK].header); modelSetScale(gunModelInstance, 0.18779343f); gunModelInstance->attachedto = chrModelInstance; gunModelInstance->attachedto_objinst = chrModelInstance->obj->Switches[3]; - dword_CODE_bss_80069594 = 0; + gunbarrelTimer = 0; } @@ -1014,11 +601,11 @@ Gfx *renderGunbarrelEyeIntroSequence (Gfx *gdl) { case 1: #if defined(LEFTOVERDEBUG) gSPDisplayList(gdl++, &dlBasicGeometry); - gdl = insert_imageDL(gdl++); - gdl = insert_imageDL(gdl++); - gdl = insert_imageDL(gdl++); - gdl = insert_imageDL(gdl++); - gdl = insert_imageDL(gdl++); + gdl = clear_framebuffer_black(gdl++); + gdl = clear_framebuffer_black(gdl++); + gdl = clear_framebuffer_black(gdl++); + gdl = clear_framebuffer_black(gdl++); + gdl = clear_framebuffer_black(gdl++); #endif gdl = insert_sniper_sight_eye_intro(gdl++); gdl = insert_sight_backdrop_eye_intro(gdl++); @@ -1098,7 +685,7 @@ Gfx *renderGunbarrelEyeIntroSequence (Gfx *gdl) { case 6: gSPDisplayList(gdl++, &dlBasicGeometry); - gdl = insert_imageDL(gdl); + gdl = clear_framebuffer_black(gdl); if (intro_eye_counter++ >= INTRO_EYE_COUNTER_CASE_6) { intro_eye_counter = 0; gunbarrel_mode++; @@ -1109,6 +696,7 @@ Gfx *renderGunbarrelEyeIntroSequence (Gfx *gdl) { return gdl; } + s32 isGunBarrelInMode9(void) { return (gunbarrel_mode == 9); } diff --git a/src/game/title.h b/src/game/title.h index d0d72308..c464cae3 100644 --- a/src/game/title.h +++ b/src/game/title.h @@ -19,9 +19,9 @@ extern s16 word_CODE_bss_80069584; extern s32 dword_CODE_bss_80069588; extern s32 dword_CODE_bss_8006958C; extern s32 virtualaddress; -extern s32 dword_CODE_bss_80069594; +extern s32 gunbarrelTimer; extern u32 D_8002A7D0; -Gfx *sub_GAME_7F007CC8(Gfx *gdl, s32 arg1, struct FolderSelect *arg2, struct FolderSelect *arg3); +Gfx *titleRenderFolderMenuBackground(Gfx *gdl, s32 xOffset, struct FolderSelectColour *topColour, struct FolderSelectColour *bottomColour); #endif diff --git a/src/game/title2.c b/src/game/title2.c new file mode 100644 index 00000000..97fb5968 --- /dev/null +++ b/src/game/title2.c @@ -0,0 +1,130 @@ +#include +#include "title2.h" + + +f32 D_8002BB00 = 0; // Set but never read +f32 D_8002BB04 = 0; // Set but never read +f32 D_8002BB08 = 0; // Set but never read +f32 D_8002BB0C = 255.0; // Set but never read +f32 D_8002BB10 = 255.0; // Set but never read +f32 D_8002BB14 = 255.0; // Set but never read + + +/** + * Address: 7F01B240 + * + * Render the gun barrel background in the folder select menu. + * Like all front end screens, this screen renders at the high res 440x330 resolution. + * The 440x299 8-bit background texture is far too large to fit in the N64's 4KB texture cache (TMEM), + * so instead the texture is read one 440 x 1 pixel row at a time. That row of pixels is then applied to a rectangle and the game + * renders 299 one pixel tall rectangles, moving down the screen, until the screen is filled. + * + * The game also gives the rectangles a color, starting darker at the top and lighter towards the bottom, creating a smooth vertical gradient. + */ +Gfx* titleRenderFolderMenuBackgroundLines(Gfx* gdl, u8 *image, s32 xOffset, struct FolderSelectColour* topColour, struct FolderSelectColour* bottomColour) +{ + f32 topRed; + f32 topGreen; + f32 topBlue; + f32 bottomRed; + f32 bottomGreen; + f32 bottomBlue; + f32 temp_f14_2; // unused + s32 i; + + topRed = topColour->red; + topGreen = topColour->green; + topBlue = topColour->blue; + bottomRed = bottomColour->red; + bottomGreen = bottomColour->green; + bottomBlue = bottomColour->blue; + D_8002BB0C = bottomRed; + D_8002BB10 = bottomGreen; + D_8002BB14 = bottomBlue; + + i = 0; + + while ((i + 1) < 300) + { + // Load a 440 wide by 1 pixel tall 8-bit intensity texture. + gDPLoadTextureBlock( + gdl++, image, G_IM_FMT_I, G_IM_SIZ_8b, 440, 1, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, + G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD + ); + + gDPSetPrimColor( + gdl++, 0, 0, topRed + (((bottomRed - topRed) * i) / 299.0f), + topGreen + (((bottomGreen - topGreen) * i) / 299.0f), topBlue + (((bottomBlue - topBlue) * i) / 299.0f), 255 + ); + + if (xOffset < 0) + { + gSPTextureRectangle( + gdl++, 0, (i + 0x10) << 2, (440 << 2) - 1, ((((i + 1) + 0x10)) << 2) - 1, G_TX_RENDERTILE, (-xOffset) << 5, 0, + 1 << 10, 1 << 10 + ); + } + else + { + gSPTextureRectangle( + gdl++, xOffset << 2, (i + 0x10) << 2, (440 << 2) - 1, ((((i + 1) + 0x10)) << 2) - 1, G_TX_RENDERTILE, 0, 0, + 1 << 10, 1 << 10 + ); + } + + i++; + image += 440; // Advance the image data by 440 bytes, since each texel is 1 byte. + } + + D_8002BB08 = topBlue; + D_8002BB04 = topGreen; + D_8002BB00 = topRed; + + return gdl; +} + + +/** + * Unreferenced. + */ +Gfx *sub_GAME_7F01B6E0(Gfx *gdl, u8 *image, s32 arg2) +{ + static f32 D_8002BB2C = 0; + static f32 D_8002BB28 = 0; + static f32 D_8002BB24 = 0; + static f32 D_8002BB20 = 0; + static f32 D_8002BB1C = 0; + static f32 D_8002BB18 = 0; + s32 i; + s32 xOffset; + + i = 0; + xOffset = 0; + D_8002BB2C = arg2; + D_8002BB28 = arg2; + D_8002BB24 = arg2; + D_8002BB20 = arg2; + D_8002BB1C = arg2; + D_8002BB18 = arg2; + + while ((i + 1) < 218) + { + gDPLoadTextureBlock(gdl++, image, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, 1, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK,G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + + gDPSetPrimColor(gdl++, 0, 0, D_8002BB2C + (((D_8002BB20 - arg2) * i) / 217.0f), D_8002BB28 + (((D_8002BB1C - arg2) * i) / 217.0f), D_8002BB24 + (((D_8002BB18 - arg2) * i) / 217.0f), 0xff); + + if (xOffset < 0) + { + gSPTextureRectangle(gdl++, 0, (i + 12) << 2, (320 << 2) - 1, ((i + 13) << 2) - 1, G_TX_RENDERTILE, (-xOffset) << 5, 0, 1 << 10, 1 << 10); + } + else + { + gSPTextureRectangle(gdl++, xOffset << 2, (i + 12) << 2, (320 << 2) - 1, ((i + 13) << 2) - 1, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + } + + i++; + image += 0x280; + } + + return gdl; +} \ No newline at end of file diff --git a/src/game/title2.h b/src/game/title2.h new file mode 100644 index 00000000..e392e6e1 --- /dev/null +++ b/src/game/title2.h @@ -0,0 +1,11 @@ +#ifndef _TITLE2_H +#define _TITLE2_H +#include "ultra64.h" + +#include "include/PR/gbi.h" + +#include "bondtypes.h" + +Gfx* titleRenderFolderMenuBackgroundLines(Gfx* gdl, u8 *image, s32 x, struct FolderSelectColour* arg3, struct FolderSelectColour* arg4); + +#endif diff --git a/src/game/unk_01BAE0.c b/src/game/title3.c similarity index 100% rename from src/game/unk_01BAE0.c rename to src/game/title3.c diff --git a/src/game/unk_01BAE0.h b/src/game/title3.h similarity index 82% rename from src/game/unk_01BAE0.h rename to src/game/title3.h index 7599897e..a7996c0c 100644 --- a/src/game/unk_01BAE0.h +++ b/src/game/title3.h @@ -1,5 +1,5 @@ -#ifndef UNK_01BAE0_H -#define UNK_01BAE0_H +#ifndef TITLE3_H +#define TITLE3_H #include #include "bondtypes.h" diff --git a/src/game/unk_01B240.c b/src/game/unk_01B240.c deleted file mode 100644 index 6a163099..00000000 --- a/src/game/unk_01B240.c +++ /dev/null @@ -1,393 +0,0 @@ -#include -#include "unk_01B240.h" - - -f32 D_8002BB00 = 0; -f32 D_8002BB04 = 0; -f32 D_8002BB08 = 0; -f32 D_8002BB0C = 255.0; -f32 D_8002BB10 = 255.0; -f32 D_8002BB14 = 255.0; -s32 D_8002BB18 = 0; -s32 D_8002BB1C = 0; -s32 D_8002BB20 = 0; -s32 D_8002BB24 = 0; -s32 D_8002BB28 = 0; -s32 D_8002BB2C = 0; - - - - - - - - - - - -/* -* Address: 0x7F01B240 -*/ -Gfx* sub_GAME_7F01B240(Gfx* gdl, s32 imgIndex, s32 x, struct FolderSelect* arg3, struct FolderSelect* arg4) { - f32 temp_f0; - f32 temp_f12; - f32 temp_f14; - f32 temp_f14_2; - f32 temp_f16; - f32 temp_f18; - f32 temp_f2; - s32 i; - - temp_f0 = arg3->unk00; - temp_f2 = arg3->unk04; - temp_f12 = arg3->unk08; - temp_f14 = arg4->unk00; - temp_f16 = arg4->unk04; - temp_f18 = arg4->unk08; - D_8002BB0C = temp_f14; - D_8002BB10 = temp_f16; - D_8002BB14 = temp_f18; - - i = 0; - while ((i + 1) < 300) { - gDPLoadTextureBlock( - gdl++, imgIndex, G_IM_FMT_I, G_IM_SIZ_8b, 440, 1, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, - G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD - ); - - gDPSetPrimColor( - gdl++, 0, 0, temp_f0 + (((temp_f14 - temp_f0) * i) / 299.0f), - temp_f2 + (((temp_f16 - temp_f2) * i) / 299.0f), temp_f12 + (((temp_f18 - temp_f12) * i) / 299.0f), 255 - ); - - if (x < 0) { - gSPTextureRectangle( - gdl++, 0, (i + 0x10) << 2, (440 << 2) - 1, ((((i + 1) + 0x10)) << 2) - 1, G_TX_RENDERTILE, (-x) << 5, 0, - 1 << 10, 1 << 10 - ); - } else { - gSPTextureRectangle( - gdl++, x << 2, (i + 0x10) << 2, (440 << 2) - 1, ((((i + 1) + 0x10)) << 2) - 1, G_TX_RENDERTILE, 0, 0, - 1 << 10, 1 << 10 - ); - } - i++; - imgIndex += 440; - } - D_8002BB08 = temp_f12; - D_8002BB04 = temp_f2; - D_8002BB00 = temp_f0; - - return gdl; -} - - - - -#ifdef NONMATCHING -// 38% https://decomp.me/scratch/fxkRS -Gfx *sub_GAME_7F01B6E0(Gfx *gdl, s32 arg1, s32 arg2) -{ - s32 i; - f32 temp_f14 = arg2; - - D_8002BB2C = temp_f14; - D_8002BB24 = temp_f14; - D_8002BB28 = temp_f14; - - for (i = 0; i + 1 < 218; i++) - { - gDPLoadTextureBlock(gdl++, arg1, G_IM_FMT_RGBA, G_IM_SIZ_16b, 320, 1, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - - arg1 += 0x280; - - gDPSetPrimColor(gdl++, - 0, - 0, - (temp_f14 + (((temp_f14 - temp_f14) * i) / 217.0f)), - (temp_f14 + (((temp_f14 - temp_f14) * i) / 217.0f)), - (temp_f14 + (((D_8002BB2C - temp_f14) * i) / 217.0f)), - 0xff); - - gSPTextureRectangle(gdl++, 0, (i + 12) << 2, 0, ((i + 13) << 2) - 1, G_TX_RENDERTILE, 0, 0, 1024, 1024); - } - - D_8002BB20 = temp_f14; - D_8002BB1C = temp_f14; - D_8002BB18 = temp_f14; - - return gdl; -} -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F01B6E0 -/* 050210 7F01B6E0 44862000 */ mtc1 $a2, $f4 -/* 050214 7F01B6E4 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 050218 7F01B6E8 3C018003 */ lui $at, %hi(D_8002BB2C) -/* 05021C 7F01B6EC 468023A0 */ cvt.s.w $f14, $f4 -/* 050220 7F01B6F0 AFBF0044 */ sw $ra, 0x44($sp) -/* 050224 7F01B6F4 AFBE0040 */ sw $fp, 0x40($sp) -/* 050228 7F01B6F8 AFB60038 */ sw $s6, 0x38($sp) -/* 05022C 7F01B6FC AFB3002C */ sw $s3, 0x2c($sp) -/* 050230 7F01B700 AFB7003C */ sw $s7, 0x3c($sp) -/* 050234 7F01B704 E42EBB2C */ swc1 $f14, %lo(D_8002BB2C)($at) -/* 050238 7F01B708 C426BB2C */ lwc1 $f6, %lo(D_8002BB2C)($at) -/* 05023C 7F01B70C 46007406 */ mov.s $f16, $f14 -/* 050240 7F01B710 3C018003 */ lui $at, %hi(D_8002BB24) -/* 050244 7F01B714 E430BB24 */ swc1 $f16, %lo(D_8002BB24)($at) -/* 050248 7F01B718 3C018003 */ lui $at, %hi(D_8002BB28) -/* 05024C 7F01B71C E42EBB28 */ swc1 $f14, %lo(D_8002BB28)($at) -/* 050250 7F01B720 3C014359 */ li $at, 0x43590000 # 217.000000 -/* 050254 7F01B724 AFB50034 */ sw $s5, 0x34($sp) -/* 050258 7F01B728 AFB40030 */ sw $s4, 0x30($sp) -/* 05025C 7F01B72C AFB20028 */ sw $s2, 0x28($sp) -/* 050260 7F01B730 AFB10024 */ sw $s1, 0x24($sp) -/* 050264 7F01B734 AFB00020 */ sw $s0, 0x20($sp) -/* 050268 7F01B738 F7B80018 */ sdc1 $f24, 0x18($sp) -/* 05026C 7F01B73C F7B60010 */ sdc1 $f22, 0x10($sp) -/* 050270 7F01B740 F7B40008 */ sdc1 $f20, 8($sp) -/* 050274 7F01B744 3C130708 */ lui $s3, (0x07080200 >> 16) # lui $s3, 0x708 -/* 050278 7F01B748 3C160713 */ lui $s6, (0x0713F01A >> 16) # lui $s6, 0x713 -/* 05027C 7F01B74C 3C1EF510 */ lui $fp, (0xF510A000 >> 16) # lui $fp, 0xf510 -/* 050280 7F01B750 3C1F0008 */ lui $ra, (0x00080200 >> 16) # lui $ra, 8 -/* 050284 7F01B754 3C0D0400 */ lui $t5, (0x04000400 >> 16) # lui $t5, 0x400 -/* 050288 7F01B758 3C0AE44F */ lui $t2, (0xE44FF000 >> 16) # lui $t2, 0xe44f -/* 05028C 7F01B75C 44818000 */ mtc1 $at, $f16 -/* 050290 7F01B760 00A08025 */ move $s0, $a1 -/* 050294 7F01B764 00003825 */ move $a3, $zero -/* 050298 7F01B768 46007006 */ mov.s $f0, $f14 -/* 05029C 7F01B76C 46007306 */ mov.s $f12, $f14 -/* 0502A0 7F01B770 354AF000 */ ori $t2, (0xE44FF000 & 0xFFFF) # ori $t2, $t2, 0xf000 -/* 0502A4 7F01B774 35AD0400 */ ori $t5, (0x04000400 & 0xFFFF) # ori $t5, $t5, 0x400 -/* 0502A8 7F01B778 37FF0200 */ ori $ra, (0x00080200 & 0xFFFF) # ori $ra, $ra, 0x200 -/* 0502AC 7F01B77C 37DEA000 */ ori $fp, (0xF510A000 & 0xFFFF) # ori $fp, $fp, 0xa000 -/* 0502B0 7F01B780 36D6F01A */ ori $s6, (0x0713F01A & 0xFFFF) # ori $s6, $s6, 0xf01a -/* 0502B4 7F01B784 36730200 */ ori $s3, (0x07080200 & 0xFFFF) # ori $s3, $s3, 0x200 -/* 0502B8 7F01B788 460E7501 */ sub.s $f20, $f14, $f14 -/* 0502BC 7F01B78C 3C11FD10 */ lui $s1, 0xfd10 -/* 0502C0 7F01B790 3C12F510 */ lui $s2, 0xf510 -/* 0502C4 7F01B794 460E7581 */ sub.s $f22, $f14, $f14 -/* 0502C8 7F01B798 3C14E600 */ lui $s4, 0xe600 -/* 0502CC 7F01B79C 3C15F300 */ lui $s5, 0xf300 -/* 0502D0 7F01B7A0 3C17E700 */ lui $s7, 0xe700 -/* 0502D4 7F01B7A4 24090001 */ li $t1, 1 -/* 0502D8 7F01B7A8 3C0CB300 */ lui $t4, 0xb300 -/* 0502DC 7F01B7AC 3C0BB400 */ lui $t3, 0xb400 -/* 0502E0 7F01B7B0 460E3601 */ sub.s $f24, $f6, $f14 -.L7F01B7B4: -/* 0502E4 7F01B7B4 44874000 */ mtc1 $a3, $f8 -/* 0502E8 7F01B7B8 00801025 */ move $v0, $a0 -/* 0502EC 7F01B7BC 24840008 */ addiu $a0, $a0, 8 -/* 0502F0 7F01B7C0 468040A0 */ cvt.s.w $f2, $f8 -/* 0502F4 7F01B7C4 00801825 */ move $v1, $a0 -/* 0502F8 7F01B7C8 AC510000 */ sw $s1, ($v0) -/* 0502FC 7F01B7CC AC500004 */ sw $s0, 4($v0) -/* 050300 7F01B7D0 24840008 */ addiu $a0, $a0, 8 -/* 050304 7F01B7D4 00802825 */ move $a1, $a0 -/* 050308 7F01B7D8 4602A282 */ mul.s $f10, $f20, $f2 -/* 05030C 7F01B7DC AC730004 */ sw $s3, 4($v1) -/* 050310 7F01B7E0 AC720000 */ sw $s2, ($v1) -/* 050314 7F01B7E4 24840008 */ addiu $a0, $a0, 8 -/* 050318 7F01B7E8 00803025 */ move $a2, $a0 -/* 05031C 7F01B7EC 24840008 */ addiu $a0, $a0, 8 -/* 050320 7F01B7F0 ACB40000 */ sw $s4, ($a1) -/* 050324 7F01B7F4 46105103 */ div.s $f4, $f10, $f16 -/* 050328 7F01B7F8 ACA00004 */ sw $zero, 4($a1) -/* 05032C 7F01B7FC 00804025 */ move $t0, $a0 -/* 050330 7F01B800 24840008 */ addiu $a0, $a0, 8 -/* 050334 7F01B804 ACD60004 */ sw $s6, 4($a2) -/* 050338 7F01B808 ACD50000 */ sw $s5, ($a2) -/* 05033C 7F01B80C 00801025 */ move $v0, $a0 -/* 050340 7F01B810 AD000004 */ sw $zero, 4($t0) -/* 050344 7F01B814 AD170000 */ sw $s7, ($t0) -/* 050348 7F01B818 24840008 */ addiu $a0, $a0, 8 -/* 05034C 7F01B81C 00801825 */ move $v1, $a0 -/* 050350 7F01B820 AC5F0004 */ sw $ra, 4($v0) -/* 050354 7F01B824 AC5E0000 */ sw $fp, ($v0) -/* 050358 7F01B828 3C0EF200 */ lui $t6, 0xf200 -/* 05035C 7F01B82C AC6E0000 */ sw $t6, ($v1) -/* 050360 7F01B830 240E0001 */ li $t6, 1 -/* 050364 7F01B834 24840008 */ addiu $a0, $a0, 8 -/* 050368 7F01B838 00802825 */ move $a1, $a0 -/* 05036C 7F01B83C 3C0F004F */ lui $t7, (0x004FC000 >> 16) # lui $t7, 0x4f -/* 050370 7F01B840 24840008 */ addiu $a0, $a0, 8 -/* 050374 7F01B844 35EFC000 */ ori $t7, (0x004FC000 & 0xFFFF) # ori $t7, $t7, 0xc000 -/* 050378 7F01B848 00801025 */ move $v0, $a0 -/* 05037C 7F01B84C AC6F0004 */ sw $t7, 4($v1) -/* 050380 7F01B850 46002180 */ add.s $f6, $f4, $f0 -/* 050384 7F01B854 24840008 */ addiu $a0, $a0, 8 -/* 050388 7F01B858 3C18FA00 */ lui $t8, 0xfa00 -/* 05038C 7F01B85C 00801825 */ move $v1, $a0 -/* 050390 7F01B860 4459F800 */ cfc1 $t9, $31 -/* 050394 7F01B864 44CEF800 */ ctc1 $t6, $31 -/* 050398 7F01B868 ACB80000 */ sw $t8, ($a1) -/* 05039C 7F01B86C 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0503A0 7F01B870 46003224 */ cvt.w.s $f8, $f6 -/* 0503A4 7F01B874 24840008 */ addiu $a0, $a0, 8 -/* 0503A8 7F01B878 26100280 */ addiu $s0, $s0, 0x280 -/* 0503AC 7F01B87C 444EF800 */ cfc1 $t6, $31 -/* 0503B0 7F01B880 00000000 */ nop -/* 0503B4 7F01B884 31CE0078 */ andi $t6, $t6, 0x78 -/* 0503B8 7F01B888 51C00013 */ beql $t6, $zero, .L7F01B8D8 -/* 0503BC 7F01B88C 440E4000 */ mfc1 $t6, $f8 -/* 0503C0 7F01B890 44814000 */ mtc1 $at, $f8 -/* 0503C4 7F01B894 240E0001 */ li $t6, 1 -/* 0503C8 7F01B898 46083201 */ sub.s $f8, $f6, $f8 -/* 0503CC 7F01B89C 44CEF800 */ ctc1 $t6, $31 -/* 0503D0 7F01B8A0 00000000 */ nop -/* 0503D4 7F01B8A4 46004224 */ cvt.w.s $f8, $f8 -/* 0503D8 7F01B8A8 444EF800 */ cfc1 $t6, $31 -/* 0503DC 7F01B8AC 00000000 */ nop -/* 0503E0 7F01B8B0 31CE0078 */ andi $t6, $t6, 0x78 -/* 0503E4 7F01B8B4 15C00005 */ bnez $t6, .L7F01B8CC -/* 0503E8 7F01B8B8 00000000 */ nop -/* 0503EC 7F01B8BC 440E4000 */ mfc1 $t6, $f8 -/* 0503F0 7F01B8C0 3C018000 */ lui $at, 0x8000 -/* 0503F4 7F01B8C4 10000007 */ b .L7F01B8E4 -/* 0503F8 7F01B8C8 01C17025 */ or $t6, $t6, $at -.L7F01B8CC: -/* 0503FC 7F01B8CC 10000005 */ b .L7F01B8E4 -/* 050400 7F01B8D0 240EFFFF */ li $t6, -1 -/* 050404 7F01B8D4 440E4000 */ mfc1 $t6, $f8 -.L7F01B8D8: -/* 050408 7F01B8D8 00000000 */ nop -/* 05040C 7F01B8DC 05C0FFFB */ bltz $t6, .L7F01B8CC -/* 050410 7F01B8E0 00000000 */ nop -.L7F01B8E4: -/* 050414 7F01B8E4 44D9F800 */ ctc1 $t9, $31 -/* 050418 7F01B8E8 01C07825 */ move $t7, $t6 -/* 05041C 7F01B8EC 240E0001 */ li $t6, 1 -/* 050420 7F01B8F0 4602B282 */ mul.s $f10, $f22, $f2 -/* 050424 7F01B8F4 000FC600 */ sll $t8, $t7, 0x18 -/* 050428 7F01B8F8 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 05042C 7F01B8FC 46105103 */ div.s $f4, $f10, $f16 -/* 050430 7F01B900 46046180 */ add.s $f6, $f12, $f4 -/* 050434 7F01B904 4459F800 */ cfc1 $t9, $31 -/* 050438 7F01B908 44CEF800 */ ctc1 $t6, $31 -/* 05043C 7F01B90C 00000000 */ nop -/* 050440 7F01B910 46003224 */ cvt.w.s $f8, $f6 -/* 050444 7F01B914 444EF800 */ cfc1 $t6, $31 -/* 050448 7F01B918 00000000 */ nop -/* 05044C 7F01B91C 31CE0078 */ andi $t6, $t6, 0x78 -/* 050450 7F01B920 51C00013 */ beql $t6, $zero, .L7F01B970 -/* 050454 7F01B924 440E4000 */ mfc1 $t6, $f8 -/* 050458 7F01B928 44814000 */ mtc1 $at, $f8 -/* 05045C 7F01B92C 240E0001 */ li $t6, 1 -/* 050460 7F01B930 46083201 */ sub.s $f8, $f6, $f8 -/* 050464 7F01B934 44CEF800 */ ctc1 $t6, $31 -/* 050468 7F01B938 00000000 */ nop -/* 05046C 7F01B93C 46004224 */ cvt.w.s $f8, $f8 -/* 050470 7F01B940 444EF800 */ cfc1 $t6, $31 -/* 050474 7F01B944 00000000 */ nop -/* 050478 7F01B948 31CE0078 */ andi $t6, $t6, 0x78 -/* 05047C 7F01B94C 15C00005 */ bnez $t6, .L7F01B964 -/* 050480 7F01B950 00000000 */ nop -/* 050484 7F01B954 440E4000 */ mfc1 $t6, $f8 -/* 050488 7F01B958 3C018000 */ lui $at, 0x8000 -/* 05048C 7F01B95C 10000007 */ b .L7F01B97C -/* 050490 7F01B960 01C17025 */ or $t6, $t6, $at -.L7F01B964: -/* 050494 7F01B964 10000005 */ b .L7F01B97C -/* 050498 7F01B968 240EFFFF */ li $t6, -1 -/* 05049C 7F01B96C 440E4000 */ mfc1 $t6, $f8 -.L7F01B970: -/* 0504A0 7F01B970 00000000 */ nop -/* 0504A4 7F01B974 05C0FFFB */ bltz $t6, .L7F01B964 -/* 0504A8 7F01B978 00000000 */ nop -.L7F01B97C: -/* 0504AC 7F01B97C 44D9F800 */ ctc1 $t9, $31 -/* 0504B0 7F01B980 31CF00FF */ andi $t7, $t6, 0xff -/* 0504B4 7F01B984 000FCC00 */ sll $t9, $t7, 0x10 -/* 0504B8 7F01B988 4602C282 */ mul.s $f10, $f24, $f2 -/* 0504BC 7F01B98C 03197025 */ or $t6, $t8, $t9 -/* 0504C0 7F01B990 24180001 */ li $t8, 1 -/* 0504C4 7F01B994 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0504C8 7F01B998 46105103 */ div.s $f4, $f10, $f16 -/* 0504CC 7F01B99C 46047180 */ add.s $f6, $f14, $f4 -/* 0504D0 7F01B9A0 444FF800 */ cfc1 $t7, $31 -/* 0504D4 7F01B9A4 44D8F800 */ ctc1 $t8, $31 -/* 0504D8 7F01B9A8 00000000 */ nop -/* 0504DC 7F01B9AC 46003224 */ cvt.w.s $f8, $f6 -/* 0504E0 7F01B9B0 4458F800 */ cfc1 $t8, $31 -/* 0504E4 7F01B9B4 00000000 */ nop -/* 0504E8 7F01B9B8 33180078 */ andi $t8, $t8, 0x78 -/* 0504EC 7F01B9BC 53000013 */ beql $t8, $zero, .L7F01BA0C -/* 0504F0 7F01B9C0 44184000 */ mfc1 $t8, $f8 -/* 0504F4 7F01B9C4 44814000 */ mtc1 $at, $f8 -/* 0504F8 7F01B9C8 24180001 */ li $t8, 1 -/* 0504FC 7F01B9CC 46083201 */ sub.s $f8, $f6, $f8 -/* 050500 7F01B9D0 44D8F800 */ ctc1 $t8, $31 -/* 050504 7F01B9D4 00000000 */ nop -/* 050508 7F01B9D8 46004224 */ cvt.w.s $f8, $f8 -/* 05050C 7F01B9DC 4458F800 */ cfc1 $t8, $31 -/* 050510 7F01B9E0 00000000 */ nop -/* 050514 7F01B9E4 33180078 */ andi $t8, $t8, 0x78 -/* 050518 7F01B9E8 17000005 */ bnez $t8, .L7F01BA00 -/* 05051C 7F01B9EC 00000000 */ nop -/* 050520 7F01B9F0 44184000 */ mfc1 $t8, $f8 -/* 050524 7F01B9F4 3C018000 */ lui $at, 0x8000 -/* 050528 7F01B9F8 10000007 */ b .L7F01BA18 -/* 05052C 7F01B9FC 0301C025 */ or $t8, $t8, $at -.L7F01BA00: -/* 050530 7F01BA00 10000005 */ b .L7F01BA18 -/* 050534 7F01BA04 2418FFFF */ li $t8, -1 -/* 050538 7F01BA08 44184000 */ mfc1 $t8, $f8 -.L7F01BA0C: -/* 05053C 7F01BA0C 00000000 */ nop -/* 050540 7F01BA10 0700FFFB */ bltz $t8, .L7F01BA00 -/* 050544 7F01BA14 00000000 */ nop -.L7F01BA18: -/* 050548 7F01BA18 44CFF800 */ ctc1 $t7, $31 -/* 05054C 7F01BA1C 331900FF */ andi $t9, $t8, 0xff -/* 050550 7F01BA20 00197A00 */ sll $t7, $t9, 8 -/* 050554 7F01BA24 01CFC025 */ or $t8, $t6, $t7 -/* 050558 7F01BA28 371900FF */ ori $t9, $t8, 0xff -/* 05055C 7F01BA2C 24EE000D */ addiu $t6, $a3, 0xd -/* 050560 7F01BA30 000E7880 */ sll $t7, $t6, 2 -/* 050564 7F01BA34 ACB90004 */ sw $t9, 4($a1) -/* 050568 7F01BA38 25F8FFFF */ addiu $t8, $t7, -1 -/* 05056C 7F01BA3C 33190FFF */ andi $t9, $t8, 0xfff -/* 050570 7F01BA40 24EF000C */ addiu $t7, $a3, 0xc -/* 050574 7F01BA44 000FC080 */ sll $t8, $t7, 2 -/* 050578 7F01BA48 032A7025 */ or $t6, $t9, $t2 -/* 05057C 7F01BA4C 33190FFF */ andi $t9, $t8, 0xfff -/* 050580 7F01BA50 AC590004 */ sw $t9, 4($v0) -/* 050584 7F01BA54 AC4E0000 */ sw $t6, ($v0) -/* 050588 7F01BA58 01203825 */ move $a3, $t1 -/* 05058C 7F01BA5C 00802825 */ move $a1, $a0 -/* 050590 7F01BA60 25290001 */ addiu $t1, $t1, 1 -/* 050594 7F01BA64 AC600004 */ sw $zero, 4($v1) -/* 050598 7F01BA68 AC6B0000 */ sw $t3, ($v1) -/* 05059C 7F01BA6C 292100DA */ slti $at, $t1, 0xda -/* 0505A0 7F01BA70 ACAD0004 */ sw $t5, 4($a1) -/* 0505A4 7F01BA74 ACAC0000 */ sw $t4, ($a1) -/* 0505A8 7F01BA78 1420FF4E */ bnez $at, .L7F01B7B4 -/* 0505AC 7F01BA7C 24840008 */ addiu $a0, $a0, 8 -/* 0505B0 7F01BA80 3C018003 */ lui $at, %hi(D_8002BB20) -/* 0505B4 7F01BA84 E42EBB20 */ swc1 $f14, %lo(D_8002BB20)($at) -/* 0505B8 7F01BA88 8FBF0044 */ lw $ra, 0x44($sp) -/* 0505BC 7F01BA8C 3C018003 */ lui $at, %hi(D_8002BB1C) -/* 0505C0 7F01BA90 E42CBB1C */ swc1 $f12, %lo(D_8002BB1C)($at) -/* 0505C4 7F01BA94 3C018003 */ lui $at, %hi(D_8002BB18) -/* 0505C8 7F01BA98 D7B40008 */ ldc1 $f20, 8($sp) -/* 0505CC 7F01BA9C D7B60010 */ ldc1 $f22, 0x10($sp) -/* 0505D0 7F01BAA0 D7B80018 */ ldc1 $f24, 0x18($sp) -/* 0505D4 7F01BAA4 8FB00020 */ lw $s0, 0x20($sp) -/* 0505D8 7F01BAA8 8FB10024 */ lw $s1, 0x24($sp) -/* 0505DC 7F01BAAC 8FB20028 */ lw $s2, 0x28($sp) -/* 0505E0 7F01BAB0 8FB3002C */ lw $s3, 0x2c($sp) -/* 0505E4 7F01BAB4 8FB40030 */ lw $s4, 0x30($sp) -/* 0505E8 7F01BAB8 8FB50034 */ lw $s5, 0x34($sp) -/* 0505EC 7F01BABC 8FB60038 */ lw $s6, 0x38($sp) -/* 0505F0 7F01BAC0 8FB7003C */ lw $s7, 0x3c($sp) -/* 0505F4 7F01BAC4 8FBE0040 */ lw $fp, 0x40($sp) -/* 0505F8 7F01BAC8 E420BB18 */ swc1 $f0, %lo(D_8002BB18)($at) -/* 0505FC 7F01BACC 27BD0048 */ addiu $sp, $sp, 0x48 -/* 050600 7F01BAD0 03E00008 */ jr $ra -/* 050604 7F01BAD4 00801025 */ move $v0, $a0 -) -#endif - - diff --git a/src/game/unk_01B240.h b/src/game/unk_01B240.h deleted file mode 100644 index e4448383..00000000 --- a/src/game/unk_01B240.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _UNK_01B240_H -#define _UNK_01B240_H -#include "ultra64.h" - -#include "include/PR/gbi.h" - -#include "bondtypes.h" - -Gfx* sub_GAME_7F01B240(Gfx* gdl, s32 imgIndex, s32 x, struct FolderSelect* arg3, struct FolderSelect* arg4); - -#endif diff --git a/src/game/unk_092E50.c b/src/game/unk_092E50.c index 997bd704..a39b414c 100644 --- a/src/game/unk_092E50.c +++ b/src/game/unk_092E50.c @@ -1,4 +1,6 @@ #include +#include "bondview.h" +#include "lv.h" #include "unk_092E50.h" // bss @@ -51,1227 +53,274 @@ u32 D_8003FD90 = 0; f32 g_SkyCloudOffset = 0; f32 D_8003FD98[] = { 0, 0 }; -// TODO: D_8003FDA0 is actually a `struct hand` -u32 D_8003FDA0[] = { - 0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x3F800000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x3F800000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x3F800000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x3F800000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xBF800000, 0x00000000, 0x3F800000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, +struct hand D_8003FDA0 = { + 0, /* weaponnum */ + -1, /* weaponnum_watchmenu */ + 0, /* previous_weapon */ + 0, /* weapon_firing_status */ + 0, /* field_87D */ + 1, /* field_87E */ + 0, /* field_87F */ + 0, /* weapon_hold_time */ + 0, /* field_884 */ + 0, /* field_888 */ + 0, /* field_88C */ + 0, /* field_890 */ + 0, /* weapon_action_state */ + 0, /* weapon_current_animation */ + 0, /* weapon_ammo_in_magazine */ + 0, /* field_8A0 */ + 0, /* numvisibleshells */ + 0, /* field_8A8 */ + 0, /* weapon_next_weapon */ + 0, /* field_8B0 */ + 0, /* weapon_animation_trigger */ + 0, /* field_8B8 */ + 0, /* field_8BC */ + 0, /* field_8C0 */ + 0, /* field_8C4 */ + 0, /* field_8C8 */ + 0, /* field_8CC */ + 0, /* field_8D0 */ + 0, /* field_8D4 */ + 0, /* field_8D8 */ + 0, /* field_8DC */ + 0, /* field_8E0 */ + 0, /* field_8E4 */ + 0, /* field_8E8 */ + { { {1.0f,0.0f,0.0f,0.0f}, {0.0f,1.0f,0.0f,0.0f}, {0.0f,0.0f,1.0f,0.0f}, {0.0f,0.0f,0.0f,1.0f} } }, /* field_8EC (identity) */ + 0, /* field_92C */ + 0, /* sway_pos_x */ + 0, /* sway_pos_y */ + 0, /* sway_pos_z */ + 0, /* sway_look_x */ + 0, /* sway_look_y */ + -1.0f, /* sway_look_z */ + 0, /* sway_up_x */ + 1.0f, /* sway_up_y */ + 0, /* sway_up_z */ + 0, /* spring_pos_x */ + 0, /* spring_pos_y */ + 0, /* spring_pos_z */ + 0, /* spring_look_x */ + 0, /* spring_look_y */ + /* spring_look_z = 1 / GUN_SPRING_SCALE, so the derived sway vector starts unit-length */ #if defined(BUGFIX_R2) - 0x00000000, 0x00000000, 0XC18600DA, 0x00000000, - 0X418600DA, 0x00000000, 0x00000000, 0x00000000, + -16.7504158f, #else - 0x00000000, 0x00000000, 0xC19FFFFE, 0x00000000, - 0x419FFFFE, 0x00000000, 0x00000000, 0x00000000, + -19.999996f, #endif - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0xBF800000, 0x00000000, 0x00000000, 0xBF800000, - 0x00000000, 0x00000000, 0xBF800000, 0x00000000, - 0x00000000, 0xBF800000, 0x00000000, 0x3F800000, - 0x00000000, 0x00000000, 0x3F800000, 0x00000000, - 0x00000000, 0x3F800000, 0x00000000, 0x00000000, - 0x3F800000, 0x00000000, 0x00000000, 0x00000000, - 0x3F800000, 0x3F800000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x447A0000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0xFF000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000 + 0, /* spring_up_x */ + /* spring_up_y = 1 / GUN_SPRING_SCALE */ +#if defined(BUGFIX_R2) + 16.7504158f, +#else + 19.999996f, +#endif + 0, /* spring_up_z */ + { {{0,0,0}}, {{0,0,0}}, {{0,0,0}}, {{0,0,0}} }, /* blendpos[4] */ + { {{0,0,-1.0f}}, {{0,0,-1.0f}}, {{0,0,-1.0f}}, {{0,0,-1.0f}} }, /* blendlook[4] */ + { {{0,1.0f,0}}, {{0,1.0f,0}}, {{0,1.0f,0}}, {{0,1.0f,0}} }, /* blendup[4] */ + 0, /* curblendpos */ + 0, /* dampt */ + 1.0f, /* blendscale */ + 1.0f, /* blendscale1 */ + 0, /* sideflag */ + 0, /* weapon_theta_displacement */ + 0, /* weapon_verta_displacement */ + 0, /* field_A24 */ + 0, /* gunofs2_x */ + 0, /* gunofs2_y */ + 0, /* gunofs2_z */ + 0, /* field_A34 */ + 0, /* field_A38 */ + 0, /* field_A3C */ + 1000.0f, /* field_A40 */ + 0, /* audioHandle */ + 0, /* field_A48 */ + 0, /* field_A4C */ + 0, /* field_A50 */ + { -1, 0, 0, 0, {{0,0,0}}, {{0,0,0}}, 0.0f, 0.0f, 0.0f, 0.0f }, /* weapon_beam */ + 0, /* noise */ + 0, /* field_A84 */ + 0, /* field_A88 */ + 0, /* field_A8C */ + 0, /* rocket */ + 0, /* firedrocket */ + 0, /* gunmtx_camspace.m[0][0] */ + 0, /* gunmtx_camspace.m[0][1] */ + 0, /* gunmtx_camspace.m[0][2] */ + 0, /* gunmtx_camspace.m[0][3] */ + 0, /* gunmtx_camspace.m[1][0] */ + 0, /* gunmtx_camspace.m[1][1] */ + 0, /* gunmtx_camspace.m[1][2] */ + 0, /* gunmtx_camspace.m[1][3] */ + 0, /* gunmtx_camspace.m[2][0] */ + 0, /* gunmtx_camspace.m[2][1] */ + 0, /* gunmtx_camspace.m[2][2] */ + 0, /* gunmtx_camspace.m[2][3] */ + 0, /* gunmtx_camspace.m[3][0] */ + 0, /* gunmtx_camspace.m[3][1] */ + 0, /* gunmtx_camspace.m[3][2] */ + 0, /* gunmtx_camspace.m[3][3] */ + { { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} } }, /* throw_item_pos_related */ + { { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} } }, /* throw_item_pos_related_prev */ + { {0,0,0} }, /* field_B58 */ + 0, /* field_B64 */ + 0, /* field_B68 */ + 0, /* field_B6C */ + 0, /* field_B70 */ + 0, /* mtxlist */ + 0, /* field_B78 */ + 0, /* field_B7C */ + 0, /* field_B80 */ + 0, /* field_B84 */ + 0, /* modeldatas */ + 0, /* field_B8C */ + 0, /* field_B90 */ + 0, /* field_B94 */ + 0, /* field_B98 */ + 0, /* field_B9C */ + 0, /* field_BA0 */ + 0, /* field_BA4 */ + 0, /* field_BA8 */ + 0, /* field_BAC */ + 0, /* field_BB0 */ + 0, /* field_BB4 */ + 0, /* field_BB8 */ + 0, /* field_BBC */ + 0, /* field_BC0 */ + 0, /* field_BC4 */ + 0, /* field_BC8 */ + 0, /* field_BCC */ + 0, /* field_BD0 */ + 0, /* field_BD4 */ + 0, /* field_BD8 */ + 0, /* field_BDC */ + 0, /* field_BE0 */ + 0, /* field_BE4 */ + 0, /* field_BE8 */ + 0, /* field_BEC */ + 0, /* field_BF0 */ + 0, /* field_BF4 */ + 0, /* field_BF8 */ + 0, /* field_BFC */ + 0, /* field_C00 */ + 0, /* field_C04 */ + 0, /* volley */ + { {0,0,0} }, /* item_related */ }; -u64 D_80040148[] = { 0, 0, 0 }; -#ifdef NONMATCHING -void sub_GAME_7F092E50(void) { +u64 D_80040148[] = { 0, 0, 0 }; // Unused. -} -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80057510 -.word 0x3dcccccd /*0.1*/ -glabel D_80057514 -.word 0x40c90fd0 /*6.2831802*/ -glabel D_80057518 -.word 0x3d23d70a /*0.039999999*/ -.text -glabel sub_GAME_7F092E50 -/* 0C7980 7F092E50 3C0E8005 */ lui $t6, %hi(g_ClockTimer) -/* 0C7984 7F092E54 8DCE8374 */ lw $t6, %lo(g_ClockTimer)($t6) -/* 0C7988 7F092E58 3C014380 */ li $at, 0x43800000 # 256.000000 -/* 0C798C 7F092E5C 44810000 */ mtc1 $at, $f0 -/* 0C7990 7F092E60 448E2000 */ mtc1 $t6, $f4 -/* 0C7994 7F092E64 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 0C7998 7F092E68 44814000 */ mtc1 $at, $f8 -/* 0C799C 7F092E6C 46802420 */ cvt.s.w $f16, $f4 -/* 0C79A0 7F092E70 3C088008 */ lui $t0, %hi(flt_CODE_bss_80079E80) -/* 0C79A4 7F092E74 25089E80 */ addiu $t0, %lo(flt_CODE_bss_80079E80) # addiu $t0, $t0, -0x6180 -/* 0C79A8 7F092E78 C5060000 */ lwc1 $f6, ($t0) -/* 0C79AC 7F092E7C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0C79B0 7F092E80 44809000 */ mtc1 $zero, $f18 -/* 0C79B4 7F092E84 46088282 */ mul.s $f10, $f16, $f8 -/* 0C79B8 7F092E88 AFBF0014 */ sw $ra, 0x14($sp) -/* 0C79BC 7F092E8C 3C018005 */ lui $at, %hi(D_80057510) -/* 0C79C0 7F092E90 24180001 */ li $t8, 1 -/* 0C79C4 7F092E94 460A3100 */ add.s $f4, $f6, $f10 -/* 0C79C8 7F092E98 E5040000 */ swc1 $f4, ($t0) -/* 0C79CC 7F092E9C C50E0000 */ lwc1 $f14, ($t0) -/* 0C79D0 7F092EA0 460E003E */ c.le.s $f0, $f14 -/* 0C79D4 7F092EA4 00000000 */ nop -/* 0C79D8 7F092EA8 45020005 */ bc1fl .L7F092EC0 -/* 0C79DC 7F092EAC 4612703C */ c.lt.s $f14, $f18 -/* 0C79E0 7F092EB0 46007201 */ sub.s $f8, $f14, $f0 -/* 0C79E4 7F092EB4 E5080000 */ swc1 $f8, ($t0) -/* 0C79E8 7F092EB8 C50E0000 */ lwc1 $f14, ($t0) -/* 0C79EC 7F092EBC 4612703C */ c.lt.s $f14, $f18 -.L7F092EC0: -/* 0C79F0 7F092EC0 00000000 */ nop -/* 0C79F4 7F092EC4 45000004 */ bc1f .L7F092ED8 -/* 0C79F8 7F092EC8 00000000 */ nop -/* 0C79FC 7F092ECC 46007180 */ add.s $f6, $f14, $f0 -/* 0C7A00 7F092ED0 E5060000 */ swc1 $f6, ($t0) -/* 0C7A04 7F092ED4 C50E0000 */ lwc1 $f14, ($t0) -.L7F092ED8: -/* 0C7A08 7F092ED8 C4247510 */ lwc1 $f4, %lo(D_80057510)($at) -/* 0C7A0C 7F092EDC 3C078008 */ lui $a3, %hi(flt_CODE_bss_80079E84) -/* 0C7A10 7F092EE0 24E79E84 */ addiu $a3, %lo(flt_CODE_bss_80079E84) # addiu $a3, $a3, -0x617c -/* 0C7A14 7F092EE4 46048202 */ mul.s $f8, $f16, $f4 -/* 0C7A18 7F092EE8 C4EA0000 */ lwc1 $f10, ($a3) -/* 0C7A1C 7F092EEC 3C018005 */ lui $at, %hi(D_80057514) -/* 0C7A20 7F092EF0 46085180 */ add.s $f6, $f10, $f8 -/* 0C7A24 7F092EF4 E4E60000 */ swc1 $f6, ($a3) -/* 0C7A28 7F092EF8 C4E20000 */ lwc1 $f2, ($a3) -/* 0C7A2C 7F092EFC 4602003E */ c.le.s $f0, $f2 -/* 0C7A30 7F092F00 00000000 */ nop -/* 0C7A34 7F092F04 45020005 */ bc1fl .L7F092F1C -/* 0C7A38 7F092F08 4612103C */ c.lt.s $f2, $f18 -/* 0C7A3C 7F092F0C 46001101 */ sub.s $f4, $f2, $f0 -/* 0C7A40 7F092F10 E4E40000 */ swc1 $f4, ($a3) -/* 0C7A44 7F092F14 C4E20000 */ lwc1 $f2, ($a3) -/* 0C7A48 7F092F18 4612103C */ c.lt.s $f2, $f18 -.L7F092F1C: -/* 0C7A4C 7F092F1C 00000000 */ nop -/* 0C7A50 7F092F20 45000004 */ bc1f .L7F092F34 -/* 0C7A54 7F092F24 00000000 */ nop -/* 0C7A58 7F092F28 46001280 */ add.s $f10, $f2, $f0 -/* 0C7A5C 7F092F2C E4EA0000 */ swc1 $f10, ($a3) -/* 0C7A60 7F092F30 C4E20000 */ lwc1 $f2, ($a3) -.L7F092F34: -/* 0C7A64 7F092F34 C4207514 */ lwc1 $f0, %lo(D_80057514)($at) -/* 0C7A68 7F092F38 3C018005 */ lui $at, %hi(D_80057518) -/* 0C7A6C 7F092F3C C4267518 */ lwc1 $f6, %lo(D_80057518)($at) -/* 0C7A70 7F092F40 3C068008 */ lui $a2, %hi(flt_CODE_bss_80079E88) -/* 0C7A74 7F092F44 24C69E88 */ addiu $a2, %lo(flt_CODE_bss_80079E88) # addiu $a2, $a2, -0x6178 -/* 0C7A78 7F092F48 46068102 */ mul.s $f4, $f16, $f6 -/* 0C7A7C 7F092F4C C4C80000 */ lwc1 $f8, ($a2) -/* 0C7A80 7F092F50 46044280 */ add.s $f10, $f8, $f4 -/* 0C7A84 7F092F54 E4CA0000 */ swc1 $f10, ($a2) -/* 0C7A88 7F092F58 C4CC0000 */ lwc1 $f12, ($a2) -/* 0C7A8C 7F092F5C 460C003E */ c.le.s $f0, $f12 -/* 0C7A90 7F092F60 00000000 */ nop -/* 0C7A94 7F092F64 45020005 */ bc1fl .L7F092F7C -/* 0C7A98 7F092F68 4612603C */ c.lt.s $f12, $f18 -/* 0C7A9C 7F092F6C 46006181 */ sub.s $f6, $f12, $f0 -/* 0C7AA0 7F092F70 E4C60000 */ swc1 $f6, ($a2) -/* 0C7AA4 7F092F74 C4CC0000 */ lwc1 $f12, ($a2) -/* 0C7AA8 7F092F78 4612603C */ c.lt.s $f12, $f18 -.L7F092F7C: -/* 0C7AAC 7F092F7C 00000000 */ nop -/* 0C7AB0 7F092F80 45020005 */ bc1fl .L7F092F98 -/* 0C7AB4 7F092F84 444FF800 */ cfc1 $t7, $31 -/* 0C7AB8 7F092F88 46006200 */ add.s $f8, $f12, $f0 -/* 0C7ABC 7F092F8C E4C80000 */ swc1 $f8, ($a2) -/* 0C7AC0 7F092F90 C4CC0000 */ lwc1 $f12, ($a2) -/* 0C7AC4 7F092F94 444FF800 */ cfc1 $t7, $31 -.L7F092F98: -/* 0C7AC8 7F092F98 44D8F800 */ ctc1 $t8, $31 -/* 0C7ACC 7F092F9C 3C028004 */ lui $v0, %hi(MipMap2C_Something_Setup) -/* 0C7AD0 7F092FA0 2442FCC0 */ addiu $v0, %lo(MipMap2C_Something_Setup) # addiu $v0, $v0, -0x340 -/* 0C7AD4 7F092FA4 46007124 */ cvt.w.s $f4, $f14 -/* 0C7AD8 7F092FA8 8C430010 */ lw $v1, 0x10($v0) -/* 0C7ADC 7F092FAC 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C7AE0 7F092FB0 4458F800 */ cfc1 $t8, $31 -/* 0C7AE4 7F092FB4 00000000 */ nop -/* 0C7AE8 7F092FB8 33180078 */ andi $t8, $t8, 0x78 -/* 0C7AEC 7F092FBC 53000013 */ beql $t8, $zero, .L7F09300C -/* 0C7AF0 7F092FC0 44182000 */ mfc1 $t8, $f4 -/* 0C7AF4 7F092FC4 44812000 */ mtc1 $at, $f4 -/* 0C7AF8 7F092FC8 24180001 */ li $t8, 1 -/* 0C7AFC 7F092FCC 46047101 */ sub.s $f4, $f14, $f4 -/* 0C7B00 7F092FD0 44D8F800 */ ctc1 $t8, $31 -/* 0C7B04 7F092FD4 00000000 */ nop -/* 0C7B08 7F092FD8 46002124 */ cvt.w.s $f4, $f4 -/* 0C7B0C 7F092FDC 4458F800 */ cfc1 $t8, $31 -/* 0C7B10 7F092FE0 00000000 */ nop -/* 0C7B14 7F092FE4 33180078 */ andi $t8, $t8, 0x78 -/* 0C7B18 7F092FE8 17000005 */ bnez $t8, .L7F093000 -/* 0C7B1C 7F092FEC 00000000 */ nop -/* 0C7B20 7F092FF0 44182000 */ mfc1 $t8, $f4 -/* 0C7B24 7F092FF4 3C018000 */ lui $at, 0x8000 -/* 0C7B28 7F092FF8 10000007 */ b .L7F093018 -/* 0C7B2C 7F092FFC 0301C025 */ or $t8, $t8, $at -.L7F093000: -/* 0C7B30 7F093000 10000005 */ b .L7F093018 -/* 0C7B34 7F093004 2418FFFF */ li $t8, -1 -/* 0C7B38 7F093008 44182000 */ mfc1 $t8, $f4 -.L7F09300C: -/* 0C7B3C 7F09300C 00000000 */ nop -/* 0C7B40 7F093010 0700FFFB */ bltz $t8, .L7F093000 -/* 0C7B44 7F093014 00000000 */ nop -.L7F093018: -/* 0C7B48 7F093018 44CFF800 */ ctc1 $t7, $31 -/* 0C7B4C 7F09301C 240F0001 */ li $t7, 1 -/* 0C7B50 7F093020 00034B02 */ srl $t1, $v1, 0xc -/* 0C7B54 7F093024 03095026 */ xor $t2, $t8, $t1 -/* 0C7B58 7F093028 444EF800 */ cfc1 $t6, $31 -/* 0C7B5C 7F09302C 44CFF800 */ ctc1 $t7, $31 -/* 0C7B60 7F093030 000A5D00 */ sll $t3, $t2, 0x14 -/* 0C7B64 7F093034 000B6202 */ srl $t4, $t3, 8 -/* 0C7B68 7F093038 460012A4 */ cvt.w.s $f10, $f2 -/* 0C7B6C 7F09303C 01836826 */ xor $t5, $t4, $v1 -/* 0C7B70 7F093040 AC4D0010 */ sw $t5, 0x10($v0) -/* 0C7B74 7F093044 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C7B78 7F093048 444FF800 */ cfc1 $t7, $31 -/* 0C7B7C 7F09304C 00000000 */ nop -/* 0C7B80 7F093050 31EF0078 */ andi $t7, $t7, 0x78 -/* 0C7B84 7F093054 51E00013 */ beql $t7, $zero, .L7F0930A4 -/* 0C7B88 7F093058 440F5000 */ mfc1 $t7, $f10 -/* 0C7B8C 7F09305C 44815000 */ mtc1 $at, $f10 -/* 0C7B90 7F093060 240F0001 */ li $t7, 1 -/* 0C7B94 7F093064 460A1281 */ sub.s $f10, $f2, $f10 -/* 0C7B98 7F093068 44CFF800 */ ctc1 $t7, $31 -/* 0C7B9C 7F09306C 00000000 */ nop -/* 0C7BA0 7F093070 460052A4 */ cvt.w.s $f10, $f10 -/* 0C7BA4 7F093074 444FF800 */ cfc1 $t7, $31 -/* 0C7BA8 7F093078 00000000 */ nop -/* 0C7BAC 7F09307C 31EF0078 */ andi $t7, $t7, 0x78 -/* 0C7BB0 7F093080 15E00005 */ bnez $t7, .L7F093098 -/* 0C7BB4 7F093084 00000000 */ nop -/* 0C7BB8 7F093088 440F5000 */ mfc1 $t7, $f10 -/* 0C7BBC 7F09308C 3C018000 */ lui $at, 0x8000 -/* 0C7BC0 7F093090 10000007 */ b .L7F0930B0 -/* 0C7BC4 7F093094 01E17825 */ or $t7, $t7, $at -.L7F093098: -/* 0C7BC8 7F093098 10000005 */ b .L7F0930B0 -/* 0C7BCC 7F09309C 240FFFFF */ li $t7, -1 -/* 0C7BD0 7F0930A0 440F5000 */ mfc1 $t7, $f10 -.L7F0930A4: -/* 0C7BD4 7F0930A4 00000000 */ nop -/* 0C7BD8 7F0930A8 05E0FFFB */ bltz $t7, .L7F093098 -/* 0C7BDC 7F0930AC 00000000 */ nop -.L7F0930B0: -/* 0C7BE0 7F0930B0 44CEF800 */ ctc1 $t6, $31 -/* 0C7BE4 7F0930B4 94490012 */ lhu $t1, 0x12($v0) -/* 0C7BE8 7F0930B8 8C440018 */ lw $a0, 0x18($v0) -/* 0C7BEC 7F0930BC 4600718D */ trunc.w.s $f6, $f14 -/* 0C7BF0 7F0930C0 31F90FFF */ andi $t9, $t7, 0xfff -/* 0C7BF4 7F0930C4 312AF000 */ andi $t2, $t1, 0xf000 -/* 0C7BF8 7F0930C8 032A5825 */ or $t3, $t9, $t2 -/* 0C7BFC 7F0930CC 440D3000 */ mfc1 $t5, $f6 -/* 0C7C00 7F0930D0 00044B02 */ srl $t1, $a0, 0xc -/* 0C7C04 7F0930D4 4600120D */ trunc.w.s $f8, $f2 -/* 0C7C08 7F0930D8 25AE005A */ addiu $t6, $t5, 0x5a -/* 0C7C0C 7F0930DC 31D800FF */ andi $t8, $t6, 0xff -/* 0C7C10 7F0930E0 0309C826 */ xor $t9, $t8, $t1 -/* 0C7C14 7F0930E4 A44B0012 */ sh $t3, 0x12($v0) -/* 0C7C18 7F0930E8 00195500 */ sll $t2, $t9, 0x14 -/* 0C7C1C 7F0930EC 000A5A02 */ srl $t3, $t2, 8 -/* 0C7C20 7F0930F0 01646026 */ xor $t4, $t3, $a0 -/* 0C7C24 7F0930F4 440E4000 */ mfc1 $t6, $f8 -/* 0C7C28 7F0930F8 AC4C0018 */ sw $t4, 0x18($v0) -/* 0C7C2C 7F0930FC 944A001A */ lhu $t2, 0x1a($v0) -/* 0C7C30 7F093100 25C90096 */ addiu $t1, $t6, 0x96 -/* 0C7C34 7F093104 313900FF */ andi $t9, $t1, 0xff -/* 0C7C38 7F093108 314BF000 */ andi $t3, $t2, 0xf000 -/* 0C7C3C 7F09310C 032B6025 */ or $t4, $t9, $t3 -/* 0C7C40 7F093110 0FC15FAB */ jal sinf -/* 0C7C44 7F093114 A44C001A */ sh $t4, 0x1a($v0) -/* 0C7C48 7F093118 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0C7C4C 7F09311C 44812000 */ mtc1 $at, $f4 -/* 0C7C50 7F093120 3C014300 */ li $at, 0x43000000 # 128.000000 -/* 0C7C54 7F093124 44813000 */ mtc1 $at, $f6 -/* 0C7C58 7F093128 46040282 */ mul.s $f10, $f0, $f4 -/* 0C7C5C 7F09312C 240E0001 */ li $t6, 1 -/* 0C7C60 7F093130 3C028004 */ lui $v0, %hi(MipMap2C_Something_Setup) -/* 0C7C64 7F093134 3C038004 */ lui $v1, %hi(MipMap2C_Something2_Setup) -/* 0C7C68 7F093138 3C068008 */ lui $a2, %hi(flt_CODE_bss_80079E88) -/* 0C7C6C 7F09313C 3C078008 */ lui $a3, %hi(flt_CODE_bss_80079E84) -/* 0C7C70 7F093140 3C088008 */ lui $t0, %hi(flt_CODE_bss_80079E80) -/* 0C7C74 7F093144 46065200 */ add.s $f8, $f10, $f6 -/* 0C7C78 7F093148 25089E80 */ addiu $t0, %lo(flt_CODE_bss_80079E80) # addiu $t0, $t0, -0x6180 -/* 0C7C7C 7F09314C 24E79E84 */ addiu $a3, %lo(flt_CODE_bss_80079E84) # addiu $a3, $a3, -0x617c -/* 0C7C80 7F093150 24C69E88 */ addiu $a2, %lo(flt_CODE_bss_80079E88) # addiu $a2, $a2, -0x6178 -/* 0C7C84 7F093154 444DF800 */ cfc1 $t5, $31 -/* 0C7C88 7F093158 44CEF800 */ ctc1 $t6, $31 -/* 0C7C8C 7F09315C 2463FD28 */ addiu $v1, %lo(MipMap2C_Something2_Setup) # addiu $v1, $v1, -0x2d8 -/* 0C7C90 7F093160 2442FCC0 */ addiu $v0, %lo(MipMap2C_Something_Setup) # addiu $v0, $v0, -0x340 -/* 0C7C94 7F093164 46004124 */ cvt.w.s $f4, $f8 -/* 0C7C98 7F093168 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C7C9C 7F09316C 444EF800 */ cfc1 $t6, $31 -/* 0C7CA0 7F093170 00000000 */ nop -/* 0C7CA4 7F093174 31CE0078 */ andi $t6, $t6, 0x78 -/* 0C7CA8 7F093178 51C00013 */ beql $t6, $zero, .L7F0931C8 -/* 0C7CAC 7F09317C 440E2000 */ mfc1 $t6, $f4 -/* 0C7CB0 7F093180 44812000 */ mtc1 $at, $f4 -/* 0C7CB4 7F093184 240E0001 */ li $t6, 1 -/* 0C7CB8 7F093188 46044101 */ sub.s $f4, $f8, $f4 -/* 0C7CBC 7F09318C 44CEF800 */ ctc1 $t6, $31 -/* 0C7CC0 7F093190 00000000 */ nop -/* 0C7CC4 7F093194 46002124 */ cvt.w.s $f4, $f4 -/* 0C7CC8 7F093198 444EF800 */ cfc1 $t6, $31 -/* 0C7CCC 7F09319C 00000000 */ nop -/* 0C7CD0 7F0931A0 31CE0078 */ andi $t6, $t6, 0x78 -/* 0C7CD4 7F0931A4 15C00005 */ bnez $t6, .L7F0931BC -/* 0C7CD8 7F0931A8 00000000 */ nop -/* 0C7CDC 7F0931AC 440E2000 */ mfc1 $t6, $f4 -/* 0C7CE0 7F0931B0 3C018000 */ lui $at, 0x8000 -/* 0C7CE4 7F0931B4 10000007 */ b .L7F0931D4 -/* 0C7CE8 7F0931B8 01C17025 */ or $t6, $t6, $at -.L7F0931BC: -/* 0C7CEC 7F0931BC 10000005 */ b .L7F0931D4 -/* 0C7CF0 7F0931C0 240EFFFF */ li $t6, -1 -/* 0C7CF4 7F0931C4 440E2000 */ mfc1 $t6, $f4 -.L7F0931C8: -/* 0C7CF8 7F0931C8 00000000 */ nop -/* 0C7CFC 7F0931CC 05C0FFFB */ bltz $t6, .L7F0931BC -/* 0C7D00 7F0931D0 00000000 */ nop -.L7F0931D4: -/* 0C7D04 7F0931D4 44CDF800 */ ctc1 $t5, $31 -/* 0C7D08 7F0931D8 24190001 */ li $t9, 1 -/* 0C7D0C 7F0931DC C50E0000 */ lwc1 $f14, ($t0) -/* 0C7D10 7F0931E0 8C4F0020 */ lw $t7, 0x20($v0) -/* 0C7D14 7F0931E4 444AF800 */ cfc1 $t2, $31 -/* 0C7D18 7F0931E8 44D9F800 */ ctc1 $t9, $31 -/* 0C7D1C 7F0931EC 2401FF00 */ li $at, -256 -/* 0C7D20 7F0931F0 01E1C024 */ and $t8, $t7, $at -/* 0C7D24 7F0931F4 460072A4 */ cvt.w.s $f10, $f14 -/* 0C7D28 7F0931F8 01D84825 */ or $t1, $t6, $t8 -/* 0C7D2C 7F0931FC AC490020 */ sw $t1, 0x20($v0) -/* 0C7D30 7F093200 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C7D34 7F093204 4459F800 */ cfc1 $t9, $31 -/* 0C7D38 7F093208 8C640010 */ lw $a0, 0x10($v1) -/* 0C7D3C 7F09320C 33390078 */ andi $t9, $t9, 0x78 -/* 0C7D40 7F093210 53200013 */ beql $t9, $zero, .L7F093260 -/* 0C7D44 7F093214 44195000 */ mfc1 $t9, $f10 -/* 0C7D48 7F093218 44815000 */ mtc1 $at, $f10 -/* 0C7D4C 7F09321C 24190001 */ li $t9, 1 -/* 0C7D50 7F093220 460A7281 */ sub.s $f10, $f14, $f10 -/* 0C7D54 7F093224 44D9F800 */ ctc1 $t9, $31 -/* 0C7D58 7F093228 00000000 */ nop -/* 0C7D5C 7F09322C 460052A4 */ cvt.w.s $f10, $f10 -/* 0C7D60 7F093230 4459F800 */ cfc1 $t9, $31 -/* 0C7D64 7F093234 00000000 */ nop -/* 0C7D68 7F093238 33390078 */ andi $t9, $t9, 0x78 -/* 0C7D6C 7F09323C 17200005 */ bnez $t9, .L7F093254 -/* 0C7D70 7F093240 00000000 */ nop -/* 0C7D74 7F093244 44195000 */ mfc1 $t9, $f10 -/* 0C7D78 7F093248 3C018000 */ lui $at, 0x8000 -/* 0C7D7C 7F09324C 10000007 */ b .L7F09326C -/* 0C7D80 7F093250 0321C825 */ or $t9, $t9, $at -.L7F093254: -/* 0C7D84 7F093254 10000005 */ b .L7F09326C -/* 0C7D88 7F093258 2419FFFF */ li $t9, -1 -/* 0C7D8C 7F09325C 44195000 */ mfc1 $t9, $f10 -.L7F093260: -/* 0C7D90 7F093260 00000000 */ nop -/* 0C7D94 7F093264 0720FFFB */ bltz $t9, .L7F093254 -/* 0C7D98 7F093268 00000000 */ nop -.L7F09326C: -/* 0C7D9C 7F09326C 44CAF800 */ ctc1 $t2, $31 -/* 0C7DA0 7F093270 240A0001 */ li $t2, 1 -/* 0C7DA4 7F093274 C4E20000 */ lwc1 $f2, ($a3) -/* 0C7DA8 7F093278 00046302 */ srl $t4, $a0, 0xc -/* 0C7DAC 7F09327C 4449F800 */ cfc1 $t1, $31 -/* 0C7DB0 7F093280 44CAF800 */ ctc1 $t2, $31 -/* 0C7DB4 7F093284 032C6826 */ xor $t5, $t9, $t4 -/* 0C7DB8 7F093288 000D7D00 */ sll $t7, $t5, 0x14 -/* 0C7DBC 7F09328C 460011A4 */ cvt.w.s $f6, $f2 -/* 0C7DC0 7F093290 000F7202 */ srl $t6, $t7, 8 -/* 0C7DC4 7F093294 01C4C026 */ xor $t8, $t6, $a0 -/* 0C7DC8 7F093298 AC780010 */ sw $t8, 0x10($v1) -/* 0C7DCC 7F09329C 444AF800 */ cfc1 $t2, $31 -/* 0C7DD0 7F0932A0 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C7DD4 7F0932A4 314A0078 */ andi $t2, $t2, 0x78 -/* 0C7DD8 7F0932A8 51400013 */ beql $t2, $zero, .L7F0932F8 -/* 0C7DDC 7F0932AC 440A3000 */ mfc1 $t2, $f6 -/* 0C7DE0 7F0932B0 44813000 */ mtc1 $at, $f6 -/* 0C7DE4 7F0932B4 240A0001 */ li $t2, 1 -/* 0C7DE8 7F0932B8 46061181 */ sub.s $f6, $f2, $f6 -/* 0C7DEC 7F0932BC 44CAF800 */ ctc1 $t2, $31 -/* 0C7DF0 7F0932C0 00000000 */ nop -/* 0C7DF4 7F0932C4 460031A4 */ cvt.w.s $f6, $f6 -/* 0C7DF8 7F0932C8 444AF800 */ cfc1 $t2, $31 -/* 0C7DFC 7F0932CC 00000000 */ nop -/* 0C7E00 7F0932D0 314A0078 */ andi $t2, $t2, 0x78 -/* 0C7E04 7F0932D4 15400005 */ bnez $t2, .L7F0932EC -/* 0C7E08 7F0932D8 00000000 */ nop -/* 0C7E0C 7F0932DC 440A3000 */ mfc1 $t2, $f6 -/* 0C7E10 7F0932E0 3C018000 */ lui $at, 0x8000 -/* 0C7E14 7F0932E4 10000007 */ b .L7F093304 -/* 0C7E18 7F0932E8 01415025 */ or $t2, $t2, $at -.L7F0932EC: -/* 0C7E1C 7F0932EC 10000005 */ b .L7F093304 -/* 0C7E20 7F0932F0 240AFFFF */ li $t2, -1 -/* 0C7E24 7F0932F4 440A3000 */ mfc1 $t2, $f6 -.L7F0932F8: -/* 0C7E28 7F0932F8 00000000 */ nop -/* 0C7E2C 7F0932FC 0540FFFB */ bltz $t2, .L7F0932EC -/* 0C7E30 7F093300 00000000 */ nop -.L7F093304: -/* 0C7E34 7F093304 44C9F800 */ ctc1 $t1, $31 -/* 0C7E38 7F093308 946C0012 */ lhu $t4, 0x12($v1) -/* 0C7E3C 7F09330C 8C650018 */ lw $a1, 0x18($v1) -/* 0C7E40 7F093310 4600720D */ trunc.w.s $f8, $f14 -/* 0C7E44 7F093314 314B0FFF */ andi $t3, $t2, 0xfff -/* 0C7E48 7F093318 318DF000 */ andi $t5, $t4, 0xf000 -/* 0C7E4C 7F09331C 016D7825 */ or $t7, $t3, $t5 -/* 0C7E50 7F093320 44184000 */ mfc1 $t8, $f8 -/* 0C7E54 7F093324 00056302 */ srl $t4, $a1, 0xc -/* 0C7E58 7F093328 4600110D */ trunc.w.s $f4, $f2 -/* 0C7E5C 7F09332C 2709005A */ addiu $t1, $t8, 0x5a -/* 0C7E60 7F093330 313900FF */ andi $t9, $t1, 0xff -/* 0C7E64 7F093334 032C5826 */ xor $t3, $t9, $t4 -/* 0C7E68 7F093338 A46F0012 */ sh $t7, 0x12($v1) -/* 0C7E6C 7F09333C 000B6D00 */ sll $t5, $t3, 0x14 -/* 0C7E70 7F093340 000D7A02 */ srl $t7, $t5, 8 -/* 0C7E74 7F093344 01E57026 */ xor $t6, $t7, $a1 -/* 0C7E78 7F093348 44092000 */ mfc1 $t1, $f4 -/* 0C7E7C 7F09334C AC6E0018 */ sw $t6, 0x18($v1) -/* 0C7E80 7F093350 946D001A */ lhu $t5, 0x1a($v1) -/* 0C7E84 7F093354 252C0096 */ addiu $t4, $t1, 0x96 -/* 0C7E88 7F093358 318B00FF */ andi $t3, $t4, 0xff -/* 0C7E8C 7F09335C 31AFF000 */ andi $t7, $t5, 0xf000 -/* 0C7E90 7F093360 016F7025 */ or $t6, $t3, $t7 -/* 0C7E94 7F093364 A46E001A */ sh $t6, 0x1a($v1) -/* 0C7E98 7F093368 0FC15FAB */ jal sinf -/* 0C7E9C 7F09336C C4CC0000 */ lwc1 $f12, ($a2) -/* 0C7EA0 7F093370 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0C7EA4 7F093374 44815000 */ mtc1 $at, $f10 -/* 0C7EA8 7F093378 3C014300 */ li $at, 0x43000000 # 128.000000 -/* 0C7EAC 7F09337C 44814000 */ mtc1 $at, $f8 -/* 0C7EB0 7F093380 460A0182 */ mul.s $f6, $f0, $f10 -/* 0C7EB4 7F093384 24090001 */ li $t1, 1 -/* 0C7EB8 7F093388 3C028004 */ lui $v0, %hi(MipMap2C_Something_Setup) -/* 0C7EBC 7F09338C 3C038004 */ lui $v1, %hi(MipMap2C_Something2_Setup) -/* 0C7EC0 7F093390 2463FD28 */ addiu $v1, %lo(MipMap2C_Something2_Setup) # addiu $v1, $v1, -0x2d8 -/* 0C7EC4 7F093394 2442FCC0 */ addiu $v0, %lo(MipMap2C_Something_Setup) # addiu $v0, $v0, -0x340 -/* 0C7EC8 7F093398 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C7ECC 7F09339C 46083100 */ add.s $f4, $f6, $f8 -/* 0C7ED0 7F0933A0 4458F800 */ cfc1 $t8, $31 -/* 0C7ED4 7F0933A4 44C9F800 */ ctc1 $t1, $31 -/* 0C7ED8 7F0933A8 00000000 */ nop -/* 0C7EDC 7F0933AC 460022A4 */ cvt.w.s $f10, $f4 -/* 0C7EE0 7F0933B0 4449F800 */ cfc1 $t1, $31 -/* 0C7EE4 7F0933B4 00000000 */ nop -/* 0C7EE8 7F0933B8 31290078 */ andi $t1, $t1, 0x78 -/* 0C7EEC 7F0933BC 51200013 */ beql $t1, $zero, .L7F09340C -/* 0C7EF0 7F0933C0 44095000 */ mfc1 $t1, $f10 -/* 0C7EF4 7F0933C4 44815000 */ mtc1 $at, $f10 -/* 0C7EF8 7F0933C8 24090001 */ li $t1, 1 -/* 0C7EFC 7F0933CC 460A2281 */ sub.s $f10, $f4, $f10 -/* 0C7F00 7F0933D0 44C9F800 */ ctc1 $t1, $31 -/* 0C7F04 7F0933D4 00000000 */ nop -/* 0C7F08 7F0933D8 460052A4 */ cvt.w.s $f10, $f10 -/* 0C7F0C 7F0933DC 4449F800 */ cfc1 $t1, $31 -/* 0C7F10 7F0933E0 00000000 */ nop -/* 0C7F14 7F0933E4 31290078 */ andi $t1, $t1, 0x78 -/* 0C7F18 7F0933E8 15200005 */ bnez $t1, .L7F093400 -/* 0C7F1C 7F0933EC 00000000 */ nop -/* 0C7F20 7F0933F0 44095000 */ mfc1 $t1, $f10 -/* 0C7F24 7F0933F4 3C018000 */ lui $at, 0x8000 -/* 0C7F28 7F0933F8 10000007 */ b .L7F093418 -/* 0C7F2C 7F0933FC 01214825 */ or $t1, $t1, $at -.L7F093400: -/* 0C7F30 7F093400 10000005 */ b .L7F093418 -/* 0C7F34 7F093404 2409FFFF */ li $t1, -1 -/* 0C7F38 7F093408 44095000 */ mfc1 $t1, $f10 -.L7F09340C: -/* 0C7F3C 7F09340C 00000000 */ nop -/* 0C7F40 7F093410 0520FFFB */ bltz $t1, .L7F093400 -/* 0C7F44 7F093414 00000000 */ nop -.L7F093418: -/* 0C7F48 7F093418 8C4A0020 */ lw $t2, 0x20($v0) -/* 0C7F4C 7F09341C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0C7F50 7F093420 2401FF00 */ li $at, -256 -/* 0C7F54 7F093424 0141C824 */ and $t9, $t2, $at -/* 0C7F58 7F093428 01396025 */ or $t4, $t1, $t9 -/* 0C7F5C 7F09342C 44D8F800 */ ctc1 $t8, $31 -/* 0C7F60 7F093430 AC6C0020 */ sw $t4, 0x20($v1) -/* 0C7F64 7F093434 03E00008 */ jr $ra -/* 0C7F68 7F093438 27BD0018 */ addiu $sp, $sp, 0x18 -) -#endif + +// Water animation controller. +void sub_GAME_7F092E50(void) +{ #ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80057510 -.word 0x3dcccccd /*0.1*/ -glabel D_80057514 -.word 0x40c90fd0 /*6.2831802*/ -glabel D_80057518 -.word 0x3d23d70a /*0.039999999*/ -.text -glabel sub_GAME_7F092E50 -/* 0C4D80 7F092390 3C014380 */ li $at, 0x43800000 # 256.000000 -/* 0C4D84 7F092394 44810000 */ mtc1 $at, $f0 -/* 0C4D88 7F092398 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 -/* 0C4D8C 7F09239C C4301004 */ lwc1 $f16, %lo(g_GlobalTimerDelta)($at) -/* 0C4D90 7F0923A0 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 0C4D94 7F0923A4 44813000 */ mtc1 $at, $f6 -/* 0C4D98 7F0923A8 3C088007 */ lui $t0, %hi(flt_CODE_bss_80079E80) # $t0, 0x8007 -/* 0C4D9C 7F0923AC 25088990 */ addiu $t0, %lo(flt_CODE_bss_80079E80) # addiu $t0, $t0, -0x7670 -/* 0C4DA0 7F0923B0 46068202 */ mul.s $f8, $f16, $f6 -/* 0C4DA4 7F0923B4 C5040000 */ lwc1 $f4, ($t0) -/* 0C4DA8 7F0923B8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0C4DAC 7F0923BC 44809000 */ mtc1 $zero, $f18 -/* 0C4DB0 7F0923C0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0C4DB4 7F0923C4 3C018005 */ lui $at, %hi(D_80057510) # $at, 0x8005 -/* 0C4DB8 7F0923C8 240F0001 */ li $t7, 1 -/* 0C4DBC 7F0923CC 46082280 */ add.s $f10, $f4, $f8 -/* 0C4DC0 7F0923D0 E50A0000 */ swc1 $f10, ($t0) -/* 0C4DC4 7F0923D4 C50E0000 */ lwc1 $f14, ($t0) -/* 0C4DC8 7F0923D8 460E003E */ c.le.s $f0, $f14 -/* 0C4DCC 7F0923DC 00000000 */ nop -/* 0C4DD0 7F0923E0 45020005 */ bc1fl .L7F0923F8 -/* 0C4DD4 7F0923E4 4612703C */ c.lt.s $f14, $f18 -/* 0C4DD8 7F0923E8 46007181 */ sub.s $f6, $f14, $f0 -/* 0C4DDC 7F0923EC E5060000 */ swc1 $f6, ($t0) -/* 0C4DE0 7F0923F0 C50E0000 */ lwc1 $f14, ($t0) -/* 0C4DE4 7F0923F4 4612703C */ c.lt.s $f14, $f18 -.L7F0923F8: -/* 0C4DE8 7F0923F8 00000000 */ nop -/* 0C4DEC 7F0923FC 45000004 */ bc1f .L7F092410 -/* 0C4DF0 7F092400 00000000 */ nop -/* 0C4DF4 7F092404 46007100 */ add.s $f4, $f14, $f0 -/* 0C4DF8 7F092408 E5040000 */ swc1 $f4, ($t0) -/* 0C4DFC 7F09240C C50E0000 */ lwc1 $f14, ($t0) -.L7F092410: -/* 0C4E00 7F092410 C42ACBD0 */ lwc1 $f10, %lo(D_80057510)($at) -/* 0C4E04 7F092414 3C078007 */ lui $a3, %hi(flt_CODE_bss_80079E84) # $a3, 0x8007 -/* 0C4E08 7F092418 24E78994 */ addiu $a3, %lo(flt_CODE_bss_80079E84) # addiu $a3, $a3, -0x766c -/* 0C4E0C 7F09241C 460A8182 */ mul.s $f6, $f16, $f10 -/* 0C4E10 7F092420 C4E80000 */ lwc1 $f8, ($a3) -/* 0C4E14 7F092424 3C018005 */ lui $at, %hi(D_80057514) # $at, 0x8005 -/* 0C4E18 7F092428 46064100 */ add.s $f4, $f8, $f6 -/* 0C4E1C 7F09242C E4E40000 */ swc1 $f4, ($a3) -/* 0C4E20 7F092430 C4E20000 */ lwc1 $f2, ($a3) -/* 0C4E24 7F092434 4602003E */ c.le.s $f0, $f2 -/* 0C4E28 7F092438 00000000 */ nop -/* 0C4E2C 7F09243C 45020005 */ bc1fl .L7F092454 -/* 0C4E30 7F092440 4612103C */ c.lt.s $f2, $f18 -/* 0C4E34 7F092444 46001281 */ sub.s $f10, $f2, $f0 -/* 0C4E38 7F092448 E4EA0000 */ swc1 $f10, ($a3) -/* 0C4E3C 7F09244C C4E20000 */ lwc1 $f2, ($a3) -/* 0C4E40 7F092450 4612103C */ c.lt.s $f2, $f18 -.L7F092454: -/* 0C4E44 7F092454 00000000 */ nop -/* 0C4E48 7F092458 45000004 */ bc1f .L7F09246C -/* 0C4E4C 7F09245C 00000000 */ nop -/* 0C4E50 7F092460 46001200 */ add.s $f8, $f2, $f0 -/* 0C4E54 7F092464 E4E80000 */ swc1 $f8, ($a3) -/* 0C4E58 7F092468 C4E20000 */ lwc1 $f2, ($a3) -.L7F09246C: -/* 0C4E5C 7F09246C C420CBD4 */ lwc1 $f0, %lo(D_80057514)($at) -/* 0C4E60 7F092470 3C018005 */ lui $at, %hi(D_80057518) # $at, 0x8005 -/* 0C4E64 7F092474 C424CBD8 */ lwc1 $f4, %lo(D_80057518)($at) -/* 0C4E68 7F092478 3C068007 */ lui $a2, %hi(flt_CODE_bss_80079E88) # $a2, 0x8007 -/* 0C4E6C 7F09247C 24C68998 */ addiu $a2, %lo(flt_CODE_bss_80079E88) # addiu $a2, $a2, -0x7668 -/* 0C4E70 7F092480 46048282 */ mul.s $f10, $f16, $f4 -/* 0C4E74 7F092484 C4C60000 */ lwc1 $f6, ($a2) -/* 0C4E78 7F092488 460A3200 */ add.s $f8, $f6, $f10 -/* 0C4E7C 7F09248C E4C80000 */ swc1 $f8, ($a2) -/* 0C4E80 7F092490 C4CC0000 */ lwc1 $f12, ($a2) -/* 0C4E84 7F092494 460C003E */ c.le.s $f0, $f12 -/* 0C4E88 7F092498 00000000 */ nop -/* 0C4E8C 7F09249C 45020005 */ bc1fl .L7F0924B4 -/* 0C4E90 7F0924A0 4612603C */ c.lt.s $f12, $f18 -/* 0C4E94 7F0924A4 46006101 */ sub.s $f4, $f12, $f0 -/* 0C4E98 7F0924A8 E4C40000 */ swc1 $f4, ($a2) -/* 0C4E9C 7F0924AC C4CC0000 */ lwc1 $f12, ($a2) -/* 0C4EA0 7F0924B0 4612603C */ c.lt.s $f12, $f18 -.L7F0924B4: -/* 0C4EA4 7F0924B4 00000000 */ nop -/* 0C4EA8 7F0924B8 45020005 */ bc1fl .L7F0924D0 -/* 0C4EAC 7F0924BC 444EF800 */ cfc1 $t6, $31 -/* 0C4EB0 7F0924C0 46006180 */ add.s $f6, $f12, $f0 -/* 0C4EB4 7F0924C4 E4C60000 */ swc1 $f6, ($a2) -/* 0C4EB8 7F0924C8 C4CC0000 */ lwc1 $f12, ($a2) -/* 0C4EBC 7F0924CC 444EF800 */ cfc1 $t6, $31 -.L7F0924D0: -/* 0C4EC0 7F0924D0 44CFF800 */ ctc1 $t7, $31 -/* 0C4EC4 7F0924D4 3C028004 */ lui $v0, %hi(MipMap2C_Something_Setup) # $v0, 0x8004 -/* 0C4EC8 7F0924D8 24429910 */ addiu $v0, %lo(MipMap2C_Something_Setup) # addiu $v0, $v0, -0x66f0 -/* 0C4ECC 7F0924DC 460072A4 */ cvt.w.s $f10, $f14 -/* 0C4ED0 7F0924E0 8C430010 */ lw $v1, 0x10($v0) -/* 0C4ED4 7F0924E4 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C4ED8 7F0924E8 444FF800 */ cfc1 $t7, $31 -/* 0C4EDC 7F0924EC 00000000 */ nop -/* 0C4EE0 7F0924F0 31EF0078 */ andi $t7, $t7, 0x78 -/* 0C4EE4 7F0924F4 51E00013 */ beql $t7, $zero, .L7F092544 -/* 0C4EE8 7F0924F8 440F5000 */ mfc1 $t7, $f10 -/* 0C4EEC 7F0924FC 44815000 */ mtc1 $at, $f10 -/* 0C4EF0 7F092500 240F0001 */ li $t7, 1 -/* 0C4EF4 7F092504 460A7281 */ sub.s $f10, $f14, $f10 -/* 0C4EF8 7F092508 44CFF800 */ ctc1 $t7, $31 -/* 0C4EFC 7F09250C 00000000 */ nop -/* 0C4F00 7F092510 460052A4 */ cvt.w.s $f10, $f10 -/* 0C4F04 7F092514 444FF800 */ cfc1 $t7, $31 -/* 0C4F08 7F092518 00000000 */ nop -/* 0C4F0C 7F09251C 31EF0078 */ andi $t7, $t7, 0x78 -/* 0C4F10 7F092520 15E00005 */ bnez $t7, .L7F092538 -/* 0C4F14 7F092524 00000000 */ nop -/* 0C4F18 7F092528 440F5000 */ mfc1 $t7, $f10 -/* 0C4F1C 7F09252C 3C018000 */ lui $at, 0x8000 -/* 0C4F20 7F092530 10000007 */ b .L7F092550 -/* 0C4F24 7F092534 01E17825 */ or $t7, $t7, $at -.L7F092538: -/* 0C4F28 7F092538 10000005 */ b .L7F092550 -/* 0C4F2C 7F09253C 240FFFFF */ li $t7, -1 -/* 0C4F30 7F092540 440F5000 */ mfc1 $t7, $f10 -.L7F092544: -/* 0C4F34 7F092544 00000000 */ nop -/* 0C4F38 7F092548 05E0FFFB */ bltz $t7, .L7F092538 -/* 0C4F3C 7F09254C 00000000 */ nop -.L7F092550: -/* 0C4F40 7F092550 44CEF800 */ ctc1 $t6, $31 -/* 0C4F44 7F092554 240E0001 */ li $t6, 1 -/* 0C4F48 7F092558 0003CB02 */ srl $t9, $v1, 0xc -/* 0C4F4C 7F09255C 01F94826 */ xor $t1, $t7, $t9 -/* 0C4F50 7F092560 444DF800 */ cfc1 $t5, $31 -/* 0C4F54 7F092564 44CEF800 */ ctc1 $t6, $31 -/* 0C4F58 7F092568 00095500 */ sll $t2, $t1, 0x14 -/* 0C4F5C 7F09256C 000A5A02 */ srl $t3, $t2, 8 -/* 0C4F60 7F092570 46001224 */ cvt.w.s $f8, $f2 -/* 0C4F64 7F092574 01636026 */ xor $t4, $t3, $v1 -/* 0C4F68 7F092578 AC4C0010 */ sw $t4, 0x10($v0) -/* 0C4F6C 7F09257C 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C4F70 7F092580 444EF800 */ cfc1 $t6, $31 -/* 0C4F74 7F092584 00000000 */ nop -/* 0C4F78 7F092588 31CE0078 */ andi $t6, $t6, 0x78 -/* 0C4F7C 7F09258C 51C00013 */ beql $t6, $zero, .L7F0925DC -/* 0C4F80 7F092590 440E4000 */ mfc1 $t6, $f8 -/* 0C4F84 7F092594 44814000 */ mtc1 $at, $f8 -/* 0C4F88 7F092598 240E0001 */ li $t6, 1 -/* 0C4F8C 7F09259C 46081201 */ sub.s $f8, $f2, $f8 -/* 0C4F90 7F0925A0 44CEF800 */ ctc1 $t6, $31 -/* 0C4F94 7F0925A4 00000000 */ nop -/* 0C4F98 7F0925A8 46004224 */ cvt.w.s $f8, $f8 -/* 0C4F9C 7F0925AC 444EF800 */ cfc1 $t6, $31 -/* 0C4FA0 7F0925B0 00000000 */ nop -/* 0C4FA4 7F0925B4 31CE0078 */ andi $t6, $t6, 0x78 -/* 0C4FA8 7F0925B8 15C00005 */ bnez $t6, .L7F0925D0 -/* 0C4FAC 7F0925BC 00000000 */ nop -/* 0C4FB0 7F0925C0 440E4000 */ mfc1 $t6, $f8 -/* 0C4FB4 7F0925C4 3C018000 */ lui $at, 0x8000 -/* 0C4FB8 7F0925C8 10000007 */ b .L7F0925E8 -/* 0C4FBC 7F0925CC 01C17025 */ or $t6, $t6, $at -.L7F0925D0: -/* 0C4FC0 7F0925D0 10000005 */ b .L7F0925E8 -/* 0C4FC4 7F0925D4 240EFFFF */ li $t6, -1 -/* 0C4FC8 7F0925D8 440E4000 */ mfc1 $t6, $f8 -.L7F0925DC: -/* 0C4FCC 7F0925DC 00000000 */ nop -/* 0C4FD0 7F0925E0 05C0FFFB */ bltz $t6, .L7F0925D0 -/* 0C4FD4 7F0925E4 00000000 */ nop -.L7F0925E8: -/* 0C4FD8 7F0925E8 44CDF800 */ ctc1 $t5, $31 -/* 0C4FDC 7F0925EC 94590012 */ lhu $t9, 0x12($v0) -/* 0C4FE0 7F0925F0 8C440018 */ lw $a0, 0x18($v0) -/* 0C4FE4 7F0925F4 4600710D */ trunc.w.s $f4, $f14 -/* 0C4FE8 7F0925F8 31D80FFF */ andi $t8, $t6, 0xfff -/* 0C4FEC 7F0925FC 3329F000 */ andi $t1, $t9, 0xf000 -/* 0C4FF0 7F092600 03095025 */ or $t2, $t8, $t1 -/* 0C4FF4 7F092604 440C2000 */ mfc1 $t4, $f4 -/* 0C4FF8 7F092608 0004CB02 */ srl $t9, $a0, 0xc -/* 0C4FFC 7F09260C 4600118D */ trunc.w.s $f6, $f2 -/* 0C5000 7F092610 258D005A */ addiu $t5, $t4, 0x5a -/* 0C5004 7F092614 31AF00FF */ andi $t7, $t5, 0xff -/* 0C5008 7F092618 01F9C026 */ xor $t8, $t7, $t9 -/* 0C500C 7F09261C A44A0012 */ sh $t2, 0x12($v0) -/* 0C5010 7F092620 00184D00 */ sll $t1, $t8, 0x14 -/* 0C5014 7F092624 00095202 */ srl $t2, $t1, 8 -/* 0C5018 7F092628 01445826 */ xor $t3, $t2, $a0 -/* 0C501C 7F09262C 440D3000 */ mfc1 $t5, $f6 -/* 0C5020 7F092630 AC4B0018 */ sw $t3, 0x18($v0) -/* 0C5024 7F092634 9449001A */ lhu $t1, 0x1a($v0) -/* 0C5028 7F092638 25B90096 */ addiu $t9, $t5, 0x96 -/* 0C502C 7F09263C 333800FF */ andi $t8, $t9, 0xff -/* 0C5030 7F092640 312AF000 */ andi $t2, $t1, 0xf000 -/* 0C5034 7F092644 030A5825 */ or $t3, $t8, $t2 -/* 0C5038 7F092648 0FC1606B */ jal sinf -/* 0C503C 7F09264C A44B001A */ sh $t3, 0x1a($v0) -/* 0C5040 7F092650 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0C5044 7F092654 44815000 */ mtc1 $at, $f10 -/* 0C5048 7F092658 3C014300 */ li $at, 0x43000000 # 128.000000 -/* 0C504C 7F09265C 44812000 */ mtc1 $at, $f4 -/* 0C5050 7F092660 460A0202 */ mul.s $f8, $f0, $f10 -/* 0C5054 7F092664 240D0001 */ li $t5, 1 -/* 0C5058 7F092668 3C028004 */ lui $v0, %hi(MipMap2C_Something_Setup) # $v0, 0x8004 -/* 0C505C 7F09266C 3C038004 */ lui $v1, %hi(MipMap2C_Something2_Setup) # $v1, 0x8004 -/* 0C5060 7F092670 3C068007 */ lui $a2, %hi(flt_CODE_bss_80079E88) # $a2, 0x8007 -/* 0C5064 7F092674 3C078007 */ lui $a3, %hi(flt_CODE_bss_80079E84) # $a3, 0x8007 -/* 0C5068 7F092678 3C088007 */ lui $t0, %hi(flt_CODE_bss_80079E80) # $t0, 0x8007 -/* 0C506C 7F09267C 46044180 */ add.s $f6, $f8, $f4 -/* 0C5070 7F092680 25088990 */ addiu $t0, %lo(flt_CODE_bss_80079E80) # addiu $t0, $t0, -0x7670 -/* 0C5074 7F092684 24E78994 */ addiu $a3, %lo(flt_CODE_bss_80079E84) # addiu $a3, $a3, -0x766c -/* 0C5078 7F092688 24C68998 */ addiu $a2, %lo(flt_CODE_bss_80079E88) # addiu $a2, $a2, -0x7668 -/* 0C507C 7F09268C 444CF800 */ cfc1 $t4, $31 -/* 0C5080 7F092690 44CDF800 */ ctc1 $t5, $31 -/* 0C5084 7F092694 24639978 */ addiu $v1, %lo(MipMap2C_Something2_Setup) # addiu $v1, $v1, -0x6688 -/* 0C5088 7F092698 24429910 */ addiu $v0, %lo(MipMap2C_Something_Setup) # addiu $v0, $v0, -0x66f0 -/* 0C508C 7F09269C 460032A4 */ cvt.w.s $f10, $f6 -/* 0C5090 7F0926A0 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C5094 7F0926A4 444DF800 */ cfc1 $t5, $31 -/* 0C5098 7F0926A8 00000000 */ nop -/* 0C509C 7F0926AC 31AD0078 */ andi $t5, $t5, 0x78 -/* 0C50A0 7F0926B0 51A00013 */ beql $t5, $zero, .L7F092700 -/* 0C50A4 7F0926B4 440D5000 */ mfc1 $t5, $f10 -/* 0C50A8 7F0926B8 44815000 */ mtc1 $at, $f10 -/* 0C50AC 7F0926BC 240D0001 */ li $t5, 1 -/* 0C50B0 7F0926C0 460A3281 */ sub.s $f10, $f6, $f10 -/* 0C50B4 7F0926C4 44CDF800 */ ctc1 $t5, $31 -/* 0C50B8 7F0926C8 00000000 */ nop -/* 0C50BC 7F0926CC 460052A4 */ cvt.w.s $f10, $f10 -/* 0C50C0 7F0926D0 444DF800 */ cfc1 $t5, $31 -/* 0C50C4 7F0926D4 00000000 */ nop -/* 0C50C8 7F0926D8 31AD0078 */ andi $t5, $t5, 0x78 -/* 0C50CC 7F0926DC 15A00005 */ bnez $t5, .L7F0926F4 -/* 0C50D0 7F0926E0 00000000 */ nop -/* 0C50D4 7F0926E4 440D5000 */ mfc1 $t5, $f10 -/* 0C50D8 7F0926E8 3C018000 */ lui $at, 0x8000 -/* 0C50DC 7F0926EC 10000007 */ b .L7F09270C -/* 0C50E0 7F0926F0 01A16825 */ or $t5, $t5, $at -.L7F0926F4: -/* 0C50E4 7F0926F4 10000005 */ b .L7F09270C -/* 0C50E8 7F0926F8 240DFFFF */ li $t5, -1 -/* 0C50EC 7F0926FC 440D5000 */ mfc1 $t5, $f10 -.L7F092700: -/* 0C50F0 7F092700 00000000 */ nop -/* 0C50F4 7F092704 05A0FFFB */ bltz $t5, .L7F0926F4 -/* 0C50F8 7F092708 00000000 */ nop -.L7F09270C: -/* 0C50FC 7F09270C 44CCF800 */ ctc1 $t4, $31 -/* 0C5100 7F092710 24180001 */ li $t8, 1 -/* 0C5104 7F092714 C50E0000 */ lwc1 $f14, ($t0) -/* 0C5108 7F092718 8C4E0020 */ lw $t6, 0x20($v0) -/* 0C510C 7F09271C 4449F800 */ cfc1 $t1, $31 -/* 0C5110 7F092720 44D8F800 */ ctc1 $t8, $31 -/* 0C5114 7F092724 2401FF00 */ li $at, -256 -/* 0C5118 7F092728 01C17824 */ and $t7, $t6, $at -/* 0C511C 7F09272C 46007224 */ cvt.w.s $f8, $f14 -/* 0C5120 7F092730 01AFC825 */ or $t9, $t5, $t7 -/* 0C5124 7F092734 AC590020 */ sw $t9, 0x20($v0) -/* 0C5128 7F092738 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C512C 7F09273C 4458F800 */ cfc1 $t8, $31 -/* 0C5130 7F092740 8C640010 */ lw $a0, 0x10($v1) -/* 0C5134 7F092744 33180078 */ andi $t8, $t8, 0x78 -/* 0C5138 7F092748 53000013 */ beql $t8, $zero, .L7F092798 -/* 0C513C 7F09274C 44184000 */ mfc1 $t8, $f8 -/* 0C5140 7F092750 44814000 */ mtc1 $at, $f8 -/* 0C5144 7F092754 24180001 */ li $t8, 1 -/* 0C5148 7F092758 46087201 */ sub.s $f8, $f14, $f8 -/* 0C514C 7F09275C 44D8F800 */ ctc1 $t8, $31 -/* 0C5150 7F092760 00000000 */ nop -/* 0C5154 7F092764 46004224 */ cvt.w.s $f8, $f8 -/* 0C5158 7F092768 4458F800 */ cfc1 $t8, $31 -/* 0C515C 7F09276C 00000000 */ nop -/* 0C5160 7F092770 33180078 */ andi $t8, $t8, 0x78 -/* 0C5164 7F092774 17000005 */ bnez $t8, .L7F09278C -/* 0C5168 7F092778 00000000 */ nop -/* 0C516C 7F09277C 44184000 */ mfc1 $t8, $f8 -/* 0C5170 7F092780 3C018000 */ lui $at, 0x8000 -/* 0C5174 7F092784 10000007 */ b .L7F0927A4 -/* 0C5178 7F092788 0301C025 */ or $t8, $t8, $at -.L7F09278C: -/* 0C517C 7F09278C 10000005 */ b .L7F0927A4 -/* 0C5180 7F092790 2418FFFF */ li $t8, -1 -/* 0C5184 7F092794 44184000 */ mfc1 $t8, $f8 -.L7F092798: -/* 0C5188 7F092798 00000000 */ nop -/* 0C518C 7F09279C 0700FFFB */ bltz $t8, .L7F09278C -/* 0C5190 7F0927A0 00000000 */ nop -.L7F0927A4: -/* 0C5194 7F0927A4 44C9F800 */ ctc1 $t1, $31 -/* 0C5198 7F0927A8 24090001 */ li $t1, 1 -/* 0C519C 7F0927AC C4E20000 */ lwc1 $f2, ($a3) -/* 0C51A0 7F0927B0 00045B02 */ srl $t3, $a0, 0xc -/* 0C51A4 7F0927B4 4459F800 */ cfc1 $t9, $31 -/* 0C51A8 7F0927B8 44C9F800 */ ctc1 $t1, $31 -/* 0C51AC 7F0927BC 030B6026 */ xor $t4, $t8, $t3 -/* 0C51B0 7F0927C0 000C7500 */ sll $t6, $t4, 0x14 -/* 0C51B4 7F0927C4 46001124 */ cvt.w.s $f4, $f2 -/* 0C51B8 7F0927C8 000E6A02 */ srl $t5, $t6, 8 -/* 0C51BC 7F0927CC 01A47826 */ xor $t7, $t5, $a0 -/* 0C51C0 7F0927D0 AC6F0010 */ sw $t7, 0x10($v1) -/* 0C51C4 7F0927D4 4449F800 */ cfc1 $t1, $31 -/* 0C51C8 7F0927D8 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C51CC 7F0927DC 31290078 */ andi $t1, $t1, 0x78 -/* 0C51D0 7F0927E0 51200013 */ beql $t1, $zero, .L7F092830 -/* 0C51D4 7F0927E4 44092000 */ mfc1 $t1, $f4 -/* 0C51D8 7F0927E8 44812000 */ mtc1 $at, $f4 -/* 0C51DC 7F0927EC 24090001 */ li $t1, 1 -/* 0C51E0 7F0927F0 46041101 */ sub.s $f4, $f2, $f4 -/* 0C51E4 7F0927F4 44C9F800 */ ctc1 $t1, $31 -/* 0C51E8 7F0927F8 00000000 */ nop -/* 0C51EC 7F0927FC 46002124 */ cvt.w.s $f4, $f4 -/* 0C51F0 7F092800 4449F800 */ cfc1 $t1, $31 -/* 0C51F4 7F092804 00000000 */ nop -/* 0C51F8 7F092808 31290078 */ andi $t1, $t1, 0x78 -/* 0C51FC 7F09280C 15200005 */ bnez $t1, .L7F092824 -/* 0C5200 7F092810 00000000 */ nop -/* 0C5204 7F092814 44092000 */ mfc1 $t1, $f4 -/* 0C5208 7F092818 3C018000 */ lui $at, 0x8000 -/* 0C520C 7F09281C 10000007 */ b .L7F09283C -/* 0C5210 7F092820 01214825 */ or $t1, $t1, $at -.L7F092824: -/* 0C5214 7F092824 10000005 */ b .L7F09283C -/* 0C5218 7F092828 2409FFFF */ li $t1, -1 -/* 0C521C 7F09282C 44092000 */ mfc1 $t1, $f4 -.L7F092830: -/* 0C5220 7F092830 00000000 */ nop -/* 0C5224 7F092834 0520FFFB */ bltz $t1, .L7F092824 -/* 0C5228 7F092838 00000000 */ nop -.L7F09283C: -/* 0C522C 7F09283C 44D9F800 */ ctc1 $t9, $31 -/* 0C5230 7F092840 946B0012 */ lhu $t3, 0x12($v1) -/* 0C5234 7F092844 8C650018 */ lw $a1, 0x18($v1) -/* 0C5238 7F092848 4600718D */ trunc.w.s $f6, $f14 -/* 0C523C 7F09284C 312A0FFF */ andi $t2, $t1, 0xfff -/* 0C5240 7F092850 316CF000 */ andi $t4, $t3, 0xf000 -/* 0C5244 7F092854 014C7025 */ or $t6, $t2, $t4 -/* 0C5248 7F092858 440F3000 */ mfc1 $t7, $f6 -/* 0C524C 7F09285C 00055B02 */ srl $t3, $a1, 0xc -/* 0C5250 7F092860 4600128D */ trunc.w.s $f10, $f2 -/* 0C5254 7F092864 25F9005A */ addiu $t9, $t7, 0x5a -/* 0C5258 7F092868 333800FF */ andi $t8, $t9, 0xff -/* 0C525C 7F09286C 030B5026 */ xor $t2, $t8, $t3 -/* 0C5260 7F092870 A46E0012 */ sh $t6, 0x12($v1) -/* 0C5264 7F092874 000A6500 */ sll $t4, $t2, 0x14 -/* 0C5268 7F092878 000C7202 */ srl $t6, $t4, 8 -/* 0C526C 7F09287C 01C56826 */ xor $t5, $t6, $a1 -/* 0C5270 7F092880 44195000 */ mfc1 $t9, $f10 -/* 0C5274 7F092884 AC6D0018 */ sw $t5, 0x18($v1) -/* 0C5278 7F092888 946C001A */ lhu $t4, 0x1a($v1) -/* 0C527C 7F09288C 272B0096 */ addiu $t3, $t9, 0x96 -/* 0C5280 7F092890 316A00FF */ andi $t2, $t3, 0xff -/* 0C5284 7F092894 318EF000 */ andi $t6, $t4, 0xf000 -/* 0C5288 7F092898 014E6825 */ or $t5, $t2, $t6 -/* 0C528C 7F09289C A46D001A */ sh $t5, 0x1a($v1) -/* 0C5290 7F0928A0 0FC1606B */ jal sinf -/* 0C5294 7F0928A4 C4CC0000 */ lwc1 $f12, ($a2) -/* 0C5298 7F0928A8 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0C529C 7F0928AC 44814000 */ mtc1 $at, $f8 -/* 0C52A0 7F0928B0 3C014300 */ li $at, 0x43000000 # 128.000000 -/* 0C52A4 7F0928B4 44813000 */ mtc1 $at, $f6 -/* 0C52A8 7F0928B8 46080102 */ mul.s $f4, $f0, $f8 -/* 0C52AC 7F0928BC 24190001 */ li $t9, 1 -/* 0C52B0 7F0928C0 3C028004 */ lui $v0, %hi(MipMap2C_Something_Setup) # $v0, 0x8004 -/* 0C52B4 7F0928C4 3C038004 */ lui $v1, %hi(MipMap2C_Something2_Setup) # $v1, 0x8004 -/* 0C52B8 7F0928C8 24639978 */ addiu $v1, %lo(MipMap2C_Something2_Setup) # addiu $v1, $v1, -0x6688 -/* 0C52BC 7F0928CC 24429910 */ addiu $v0, %lo(MipMap2C_Something_Setup) # addiu $v0, $v0, -0x66f0 -/* 0C52C0 7F0928D0 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C52C4 7F0928D4 46062280 */ add.s $f10, $f4, $f6 -/* 0C52C8 7F0928D8 444FF800 */ cfc1 $t7, $31 -/* 0C52CC 7F0928DC 44D9F800 */ ctc1 $t9, $31 -/* 0C52D0 7F0928E0 00000000 */ nop -/* 0C52D4 7F0928E4 46005224 */ cvt.w.s $f8, $f10 -/* 0C52D8 7F0928E8 4459F800 */ cfc1 $t9, $31 -/* 0C52DC 7F0928EC 00000000 */ nop -/* 0C52E0 7F0928F0 33390078 */ andi $t9, $t9, 0x78 -/* 0C52E4 7F0928F4 53200013 */ beql $t9, $zero, .L7F092944 -/* 0C52E8 7F0928F8 44194000 */ mfc1 $t9, $f8 -/* 0C52EC 7F0928FC 44814000 */ mtc1 $at, $f8 -/* 0C52F0 7F092900 24190001 */ li $t9, 1 -/* 0C52F4 7F092904 46085201 */ sub.s $f8, $f10, $f8 -/* 0C52F8 7F092908 44D9F800 */ ctc1 $t9, $31 -/* 0C52FC 7F09290C 00000000 */ nop -/* 0C5300 7F092910 46004224 */ cvt.w.s $f8, $f8 -/* 0C5304 7F092914 4459F800 */ cfc1 $t9, $31 -/* 0C5308 7F092918 00000000 */ nop -/* 0C530C 7F09291C 33390078 */ andi $t9, $t9, 0x78 -/* 0C5310 7F092920 17200005 */ bnez $t9, .L7F092938 -/* 0C5314 7F092924 00000000 */ nop -/* 0C5318 7F092928 44194000 */ mfc1 $t9, $f8 -/* 0C531C 7F09292C 3C018000 */ lui $at, 0x8000 -/* 0C5320 7F092930 10000007 */ b .L7F092950 -/* 0C5324 7F092934 0321C825 */ or $t9, $t9, $at -.L7F092938: -/* 0C5328 7F092938 10000005 */ b .L7F092950 -/* 0C532C 7F09293C 2419FFFF */ li $t9, -1 -/* 0C5330 7F092940 44194000 */ mfc1 $t9, $f8 -.L7F092944: -/* 0C5334 7F092944 00000000 */ nop -/* 0C5338 7F092948 0720FFFB */ bltz $t9, .L7F092938 -/* 0C533C 7F09294C 00000000 */ nop -.L7F092950: -/* 0C5340 7F092950 8C490020 */ lw $t1, 0x20($v0) -/* 0C5344 7F092954 8FBF0014 */ lw $ra, 0x14($sp) -/* 0C5348 7F092958 2401FF00 */ li $at, -256 -/* 0C534C 7F09295C 0121C024 */ and $t8, $t1, $at -/* 0C5350 7F092960 03385825 */ or $t3, $t9, $t8 -/* 0C5354 7F092964 44CFF800 */ ctc1 $t7, $31 -/* 0C5358 7F092968 AC6B0020 */ sw $t3, 0x20($v1) -/* 0C535C 7F09296C 03E00008 */ jr $ra -/* 0C5360 7F092970 27BD0018 */ addiu $sp, $sp, 0x18 -) -#endif -#endif - - - - - -#ifdef NONMATCHING -// unsure of arguments -Gfx* sub_GAME_7F09343C(Gfx*, s32) { - -} + f32 delta = g_GlobalTimerDelta; #else -// unsure of arguments -Gfx* sub_GAME_7F09343C(Gfx*, s32); - -GLOBAL_ASM( -.text -glabel sub_GAME_7F09343C -/* 0C7F6C 7F09343C 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0C7F70 7F093440 10A00009 */ beqz $a1, .L7F093468 -/* 0C7F74 7F093444 AFBF0014 */ sw $ra, 0x14($sp) -/* 0C7F78 7F093448 00801025 */ move $v0, $a0 -/* 0C7F7C 7F09344C 3C0F8004 */ lui $t7, %hi(MipMap2C_Something_Setup) -/* 0C7F80 7F093450 25EFFCC0 */ addiu $t7, %lo(MipMap2C_Something_Setup) # addiu $t7, $t7, -0x340 -/* 0C7F84 7F093454 3C0E0600 */ lui $t6, 0x600 -/* 0C7F88 7F093458 AC4E0000 */ sw $t6, ($v0) -/* 0C7F8C 7F09345C AC4F0004 */ sw $t7, 4($v0) -/* 0C7F90 7F093460 10000079 */ b .L7F093648 -/* 0C7F94 7F093464 24840008 */ addiu $a0, $a0, 8 -.L7F093468: -/* 0C7F98 7F093468 3C08F510 */ lui $t0, %hi(0xF5100004) # $t0, 0xf510 -/* 0C7F9C 7F09346C 00801025 */ move $v0, $a0 -/* 0C7FA0 7F093470 3C180001 */ lui $t8, (0x00014050 >> 16) # lui $t8, 1 -/* 0C7FA4 7F093474 35080800 */ ori $t0, (0xF5100800 & 0xFFFF) # ori $t0, $t0, 0x800 -/* 0C7FA8 7F093478 37184050 */ ori $t8, (0x00014050 & 0xFFFF) # ori $t8, $t8, 0x4050 -/* 0C7FAC 7F09347C 24830008 */ addiu $v1, $a0, 8 -/* 0C7FB0 7F093480 AC580004 */ sw $t8, 4($v0) -/* 0C7FB4 7F093484 AC480000 */ sw $t0, ($v0) -/* 0C7FB8 7F093488 3C190101 */ lui $t9, (0x01014050 >> 16) # lui $t9, 0x101 -/* 0C7FBC 7F09348C 37394050 */ ori $t9, (0x01014050 & 0xFFFF) # ori $t9, $t9, 0x4050 -/* 0C7FC0 7F093490 24650008 */ addiu $a1, $v1, 8 -/* 0C7FC4 7F093494 AC790004 */ sw $t9, 4($v1) -/* 0C7FC8 7F093498 AC680000 */ sw $t0, ($v1) -/* 0C7FCC 7F09349C 24A60008 */ addiu $a2, $a1, 8 -/* 0C7FD0 7F0934A0 3C0AF200 */ lui $t2, 0xf200 -/* 0C7FD4 7F0934A4 ACAA0000 */ sw $t2, ($a1) -/* 0C7FD8 7F0934A8 ACA00004 */ sw $zero, 4($a1) -/* 0C7FDC 7F0934AC 3C0BF205 */ lui $t3, (0xF205A096 >> 16) # lui $t3, 0xf205 -/* 0C7FE0 7F0934B0 356BA096 */ ori $t3, (0xF205A096 & 0xFFFF) # ori $t3, $t3, 0xa096 -/* 0C7FE4 7F0934B4 3C0C0100 */ lui $t4, 0x100 -/* 0C7FE8 7F0934B8 ACCC0004 */ sw $t4, 4($a2) -/* 0C7FEC 7F0934BC ACCB0000 */ sw $t3, ($a2) -/* 0C7FF0 7F0934C0 24C70008 */ addiu $a3, $a2, 8 -/* 0C7FF4 7F0934C4 24E40008 */ addiu $a0, $a3, 8 -/* 0C7FF8 7F0934C8 3C018008 */ lui $at, %hi(flt_CODE_bss_80079E88) -/* 0C7FFC 7F0934CC C42C9E88 */ lwc1 $f12, %lo(flt_CODE_bss_80079E88)($at) -/* 0C8000 7F0934D0 AFA40030 */ sw $a0, 0x30($sp) -/* 0C8004 7F0934D4 0FC15FAB */ jal sinf -/* 0C8008 7F0934D8 AFA70018 */ sw $a3, 0x18($sp) -/* 0C800C 7F0934DC 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0C8010 7F0934E0 44812000 */ mtc1 $at, $f4 -/* 0C8014 7F0934E4 3C014300 */ li $at, 0x43000000 # 128.000000 -/* 0C8018 7F0934E8 44814000 */ mtc1 $at, $f8 -/* 0C801C 7F0934EC 46040182 */ mul.s $f6, $f0, $f4 -/* 0C8020 7F0934F0 240E0001 */ li $t6, 1 -/* 0C8024 7F0934F4 8FA40030 */ lw $a0, 0x30($sp) -/* 0C8028 7F0934F8 3C0ABA00 */ lui $t2, (0xBA001102 >> 16) # lui $t2, 0xba00 -/* 0C802C 7F0934FC 3C0BBA00 */ lui $t3, (0xBA000C02 >> 16) # lui $t3, 0xba00 -/* 0C8030 7F093500 00801025 */ move $v0, $a0 -/* 0C8034 7F093504 24840008 */ addiu $a0, $a0, 8 -/* 0C8038 7F093508 46083280 */ add.s $f10, $f6, $f8 -/* 0C803C 7F09350C 00801825 */ move $v1, $a0 -/* 0C8040 7F093510 24840008 */ addiu $a0, $a0, 8 -/* 0C8044 7F093514 00802825 */ move $a1, $a0 -/* 0C8048 7F093518 444DF800 */ cfc1 $t5, $31 -/* 0C804C 7F09351C 44CEF800 */ ctc1 $t6, $31 -/* 0C8050 7F093520 3C0CFC27 */ lui $t4, (0xFC272C04 >> 16) # lui $t4, 0xfc27 -/* 0C8054 7F093524 8FA70018 */ lw $a3, 0x18($sp) -/* 0C8058 7F093528 46005424 */ cvt.w.s $f16, $f10 -/* 0C805C 7F09352C 24092000 */ li $t1, 8192 -/* 0C8060 7F093530 2419FFFF */ li $t9, -1 -/* 0C8064 7F093534 354A1102 */ ori $t2, (0xBA001102 & 0xFFFF) # ori $t2, $t2, 0x1102 -/* 0C8068 7F093538 444EF800 */ cfc1 $t6, $31 -/* 0C806C 7F09353C 356B0C02 */ ori $t3, (0xBA000C02 & 0xFFFF) # ori $t3, $t3, 0xc02 -/* 0C8070 7F093540 358C2C04 */ ori $t4, (0xFC272C04 & 0xFFFF) # ori $t4, $t4, 0x2c04 -/* 0C8074 7F093544 31CE0078 */ andi $t6, $t6, 0x78 -/* 0C8078 7F093548 11C00013 */ beqz $t6, .L7F093598 -/* 0C807C 7F09354C 24840008 */ addiu $a0, $a0, 8 -/* 0C8080 7F093550 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C8084 7F093554 44818000 */ mtc1 $at, $f16 -/* 0C8088 7F093558 240E0001 */ li $t6, 1 -/* 0C808C 7F09355C 46105401 */ sub.s $f16, $f10, $f16 -/* 0C8090 7F093560 44CEF800 */ ctc1 $t6, $31 -/* 0C8094 7F093564 00000000 */ nop -/* 0C8098 7F093568 46008424 */ cvt.w.s $f16, $f16 -/* 0C809C 7F09356C 444EF800 */ cfc1 $t6, $31 -/* 0C80A0 7F093570 00000000 */ nop -/* 0C80A4 7F093574 31CE0078 */ andi $t6, $t6, 0x78 -/* 0C80A8 7F093578 15C00005 */ bnez $t6, .L7F093590 -/* 0C80AC 7F09357C 00000000 */ nop -/* 0C80B0 7F093580 440E8000 */ mfc1 $t6, $f16 -/* 0C80B4 7F093584 3C018000 */ lui $at, 0x8000 -/* 0C80B8 7F093588 10000007 */ b .L7F0935A8 -/* 0C80BC 7F09358C 01C17025 */ or $t6, $t6, $at -.L7F093590: -/* 0C80C0 7F093590 10000005 */ b .L7F0935A8 -/* 0C80C4 7F093594 240EFFFF */ li $t6, -1 -.L7F093598: -/* 0C80C8 7F093598 440E8000 */ mfc1 $t6, $f16 -/* 0C80CC 7F09359C 00000000 */ nop -/* 0C80D0 7F0935A0 05C0FFFB */ bltz $t6, .L7F093590 -/* 0C80D4 7F0935A4 00000000 */ nop -.L7F0935A8: -/* 0C80D8 7F0935A8 31CF00FF */ andi $t7, $t6, 0xff -/* 0C80DC 7F0935AC 3C01FA00 */ lui $at, 0xfa00 -/* 0C80E0 7F0935B0 01E1C025 */ or $t8, $t7, $at -/* 0C80E4 7F0935B4 ACF80000 */ sw $t8, ($a3) -/* 0C80E8 7F0935B8 ACF90004 */ sw $t9, 4($a3) -/* 0C80EC 7F0935BC AC400004 */ sw $zero, 4($v0) -/* 0C80F0 7F0935C0 AC4A0000 */ sw $t2, ($v0) -/* 0C80F4 7F0935C4 44CDF800 */ ctc1 $t5, $31 -/* 0C80F8 7F0935C8 AC690004 */ sw $t1, 4($v1) -/* 0C80FC 7F0935CC AC6B0000 */ sw $t3, ($v1) -/* 0C8100 7F0935D0 3C0D1F10 */ lui $t5, (0x1F1093FF >> 16) # lui $t5, 0x1f10 -/* 0C8104 7F0935D4 35AD93FF */ ori $t5, (0x1F1093FF & 0xFFFF) # ori $t5, $t5, 0x93ff -/* 0C8108 7F0935D8 00803025 */ move $a2, $a0 -/* 0C810C 7F0935DC ACAD0004 */ sw $t5, 4($a1) -/* 0C8110 7F0935E0 ACAC0000 */ sw $t4, ($a1) -/* 0C8114 7F0935E4 24840008 */ addiu $a0, $a0, 8 -/* 0C8118 7F0935E8 3C0F0C19 */ lui $t7, (0x0C192078 >> 16) # lui $t7, 0xc19 -/* 0C811C 7F0935EC 3C0EB900 */ lui $t6, (0xB900031D >> 16) # lui $t6, 0xb900 -/* 0C8120 7F0935F0 35CE031D */ ori $t6, (0xB900031D & 0xFFFF) # ori $t6, $t6, 0x31d -/* 0C8124 7F0935F4 35EF2078 */ ori $t7, (0x0C192078 & 0xFFFF) # ori $t7, $t7, 0x2078 -/* 0C8128 7F0935F8 00804025 */ move $t0, $a0 -/* 0C812C 7F0935FC ACCF0004 */ sw $t7, 4($a2) -/* 0C8130 7F093600 ACCE0000 */ sw $t6, ($a2) -/* 0C8134 7F093604 24840008 */ addiu $a0, $a0, 8 -/* 0C8138 7F093608 3C18BA00 */ lui $t8, (0xBA001001 >> 16) # lui $t8, 0xba00 -/* 0C813C 7F09360C 37181001 */ ori $t8, (0xBA001001 & 0xFFFF) # ori $t8, $t8, 0x1001 -/* 0C8140 7F093610 00801025 */ move $v0, $a0 -/* 0C8144 7F093614 AD180000 */ sw $t8, ($t0) -/* 0C8148 7F093618 AD000004 */ sw $zero, %lo(0xF5100004)($t0) -/* 0C814C 7F09361C 24840008 */ addiu $a0, $a0, 8 -/* 0C8150 7F093620 3C19BA00 */ lui $t9, (0xBA001402 >> 16) # lui $t9, 0xba00 -/* 0C8154 7F093624 37391402 */ ori $t9, (0xBA001402 & 0xFFFF) # ori $t9, $t9, 0x1402 -/* 0C8158 7F093628 3C0A0010 */ lui $t2, 0x10 -/* 0C815C 7F09362C 00801825 */ move $v1, $a0 -/* 0C8160 7F093630 AC4A0004 */ sw $t2, 4($v0) -/* 0C8164 7F093634 AC590000 */ sw $t9, ($v0) -/* 0C8168 7F093638 3C0BB700 */ lui $t3, 0xb700 -/* 0C816C 7F09363C AC6B0000 */ sw $t3, ($v1) -/* 0C8170 7F093640 AC690004 */ sw $t1, 4($v1) -/* 0C8174 7F093644 24840008 */ addiu $a0, $a0, 8 -.L7F093648: -/* 0C8178 7F093648 8FBF0014 */ lw $ra, 0x14($sp) -/* 0C817C 7F09364C 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0C8180 7F093650 00801025 */ move $v0, $a0 -/* 0C8184 7F093654 03E00008 */ jr $ra -/* 0C8188 7F093658 00000000 */ nop -) + f32 delta = g_ClockTimer; #endif + flt_CODE_bss_80079E80 += delta * 0.25f; + if (flt_CODE_bss_80079E80 >= 256.0f) + { + flt_CODE_bss_80079E80 -= 256.0f; + } + if (flt_CODE_bss_80079E80 < 0.0f) + { + flt_CODE_bss_80079E80 += 256.0f; + } + flt_CODE_bss_80079E84 += delta * 0.1f; -#ifdef NONMATCHING -void sub_GAME_7F09365C(void) { + if (flt_CODE_bss_80079E84 >= 256.0f) + { + flt_CODE_bss_80079E84 -= 256.0f; + } + if (flt_CODE_bss_80079E84 < 0.0f) + { + flt_CODE_bss_80079E84 += 256.0f; + } + + flt_CODE_bss_80079E88 += delta * 0.04f; + + // 6.2831802f is not quite equal to M_TAU_F. Leave as literal value here. + if (flt_CODE_bss_80079E88 >= 6.2831802f) + { + flt_CODE_bss_80079E88 -= 6.2831802f; + } + + if (flt_CODE_bss_80079E88 < 0.0f) + { + flt_CODE_bss_80079E88 += 6.2831802f; + } + + MipMap2C_Something_Setup[2].loadtile.sl = flt_CODE_bss_80079E80; + MipMap2C_Something_Setup[2].loadtile.tl = flt_CODE_bss_80079E84; + MipMap2C_Something_Setup[3].loadtile.sl = ((s32)flt_CODE_bss_80079E80 + 90) & 0xFF; + MipMap2C_Something_Setup[3].loadtile.tl = ((s32)flt_CODE_bss_80079E84 + 150) & 0xFF; + ((u32 *) MipMap2C_Something_Setup)[8] = (((u32 *) MipMap2C_Something_Setup)[8] & ~0xFF) | (u32) ((sinf(flt_CODE_bss_80079E88) * 127.0f) + 128.0f); + + MipMap2C_Something2_Setup[2].loadtile.sl = flt_CODE_bss_80079E80; + MipMap2C_Something2_Setup[2].loadtile.tl = flt_CODE_bss_80079E84; + MipMap2C_Something2_Setup[3].loadtile.sl = ((s32)flt_CODE_bss_80079E80 + 90) & 0xFF; + MipMap2C_Something2_Setup[3].loadtile.tl = ((s32)flt_CODE_bss_80079E84 + 150) & 0xFF; + ((u32 *) MipMap2C_Something2_Setup)[8] = (((u32 *) MipMap2C_Something_Setup)[8] & ~0xFF) | (u32) ((sinf(flt_CODE_bss_80079E88) * 127.0f) + 128.0f); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F09365C -/* 0C818C 7F09365C 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0C8190 7F093660 10A00009 */ beqz $a1, .L7F093688 -/* 0C8194 7F093664 AFBF0014 */ sw $ra, 0x14($sp) -/* 0C8198 7F093668 00801025 */ move $v0, $a0 -/* 0C819C 7F09366C 3C0F8004 */ lui $t7, %hi(MipMap2C_Something2_Setup) -/* 0C81A0 7F093670 25EFFD28 */ addiu $t7, %lo(MipMap2C_Something2_Setup) # addiu $t7, $t7, -0x2d8 -/* 0C81A4 7F093674 3C0E0600 */ lui $t6, 0x600 -/* 0C81A8 7F093678 AC4E0000 */ sw $t6, ($v0) -/* 0C81AC 7F09367C AC4F0004 */ sw $t7, 4($v0) -/* 0C81B0 7F093680 10000079 */ b .L7F093868 -/* 0C81B4 7F093684 24840008 */ addiu $a0, $a0, 8 -.L7F093688: -/* 0C81B8 7F093688 3C08F548 */ lui $t0, %hi(0xF5480004) # $t0, 0xf548 -/* 0C81BC 7F09368C 00801025 */ move $v0, $a0 -/* 0C81C0 7F093690 3C180001 */ lui $t8, (0x00014050 >> 16) # lui $t8, 1 -/* 0C81C4 7F093694 35080400 */ ori $t0, (0xF5480400 & 0xFFFF) # ori $t0, $t0, 0x400 -/* 0C81C8 7F093698 37184050 */ ori $t8, (0x00014050 & 0xFFFF) # ori $t8, $t8, 0x4050 -/* 0C81CC 7F09369C 24830008 */ addiu $v1, $a0, 8 -/* 0C81D0 7F0936A0 AC580004 */ sw $t8, 4($v0) -/* 0C81D4 7F0936A4 AC480000 */ sw $t0, ($v0) -/* 0C81D8 7F0936A8 3C190101 */ lui $t9, (0x01014050 >> 16) # lui $t9, 0x101 -/* 0C81DC 7F0936AC 37394050 */ ori $t9, (0x01014050 & 0xFFFF) # ori $t9, $t9, 0x4050 -/* 0C81E0 7F0936B0 24650008 */ addiu $a1, $v1, 8 -/* 0C81E4 7F0936B4 AC790004 */ sw $t9, 4($v1) -/* 0C81E8 7F0936B8 AC680000 */ sw $t0, ($v1) -/* 0C81EC 7F0936BC 24A60008 */ addiu $a2, $a1, 8 -/* 0C81F0 7F0936C0 3C0AF200 */ lui $t2, 0xf200 -/* 0C81F4 7F0936C4 ACAA0000 */ sw $t2, ($a1) -/* 0C81F8 7F0936C8 ACA00004 */ sw $zero, 4($a1) -/* 0C81FC 7F0936CC 3C0BF205 */ lui $t3, (0xF205A096 >> 16) # lui $t3, 0xf205 -/* 0C8200 7F0936D0 356BA096 */ ori $t3, (0xF205A096 & 0xFFFF) # ori $t3, $t3, 0xa096 -/* 0C8204 7F0936D4 3C0C0100 */ lui $t4, 0x100 -/* 0C8208 7F0936D8 ACCC0004 */ sw $t4, 4($a2) -/* 0C820C 7F0936DC ACCB0000 */ sw $t3, ($a2) -/* 0C8210 7F0936E0 24C70008 */ addiu $a3, $a2, 8 -/* 0C8214 7F0936E4 24E40008 */ addiu $a0, $a3, 8 -/* 0C8218 7F0936E8 3C018008 */ lui $at, %hi(flt_CODE_bss_80079E88) -/* 0C821C 7F0936EC C42C9E88 */ lwc1 $f12, %lo(flt_CODE_bss_80079E88)($at) -/* 0C8220 7F0936F0 AFA40030 */ sw $a0, 0x30($sp) -/* 0C8224 7F0936F4 0FC15FAB */ jal sinf -/* 0C8228 7F0936F8 AFA70018 */ sw $a3, 0x18($sp) -/* 0C822C 7F0936FC 3C0142FE */ li $at, 0x42FE0000 # 127.000000 -/* 0C8230 7F093700 44812000 */ mtc1 $at, $f4 -/* 0C8234 7F093704 3C014300 */ li $at, 0x43000000 # 128.000000 -/* 0C8238 7F093708 44814000 */ mtc1 $at, $f8 -/* 0C823C 7F09370C 46040182 */ mul.s $f6, $f0, $f4 -/* 0C8240 7F093710 240E0001 */ li $t6, 1 -/* 0C8244 7F093714 8FA40030 */ lw $a0, 0x30($sp) -/* 0C8248 7F093718 3C0ABA00 */ lui $t2, (0xBA001102 >> 16) # lui $t2, 0xba00 -/* 0C824C 7F09371C 3C0BBA00 */ lui $t3, (0xBA000C02 >> 16) # lui $t3, 0xba00 -/* 0C8250 7F093720 00801025 */ move $v0, $a0 -/* 0C8254 7F093724 24840008 */ addiu $a0, $a0, 8 -/* 0C8258 7F093728 46083280 */ add.s $f10, $f6, $f8 -/* 0C825C 7F09372C 00801825 */ move $v1, $a0 -/* 0C8260 7F093730 24840008 */ addiu $a0, $a0, 8 -/* 0C8264 7F093734 00802825 */ move $a1, $a0 -/* 0C8268 7F093738 444DF800 */ cfc1 $t5, $31 -/* 0C826C 7F09373C 44CEF800 */ ctc1 $t6, $31 -/* 0C8270 7F093740 3C0CFC27 */ lui $t4, (0xFC272C04 >> 16) # lui $t4, 0xfc27 -/* 0C8274 7F093744 8FA70018 */ lw $a3, 0x18($sp) -/* 0C8278 7F093748 46005424 */ cvt.w.s $f16, $f10 -/* 0C827C 7F09374C 24092000 */ li $t1, 8192 -/* 0C8280 7F093750 2419FFFF */ li $t9, -1 -/* 0C8284 7F093754 354A1102 */ ori $t2, (0xBA001102 & 0xFFFF) # ori $t2, $t2, 0x1102 -/* 0C8288 7F093758 444EF800 */ cfc1 $t6, $31 -/* 0C828C 7F09375C 356B0C02 */ ori $t3, (0xBA000C02 & 0xFFFF) # ori $t3, $t3, 0xc02 -/* 0C8290 7F093760 358C2C04 */ ori $t4, (0xFC272C04 & 0xFFFF) # ori $t4, $t4, 0x2c04 -/* 0C8294 7F093764 31CE0078 */ andi $t6, $t6, 0x78 -/* 0C8298 7F093768 11C00013 */ beqz $t6, .L7F0937B8 -/* 0C829C 7F09376C 24840008 */ addiu $a0, $a0, 8 -/* 0C82A0 7F093770 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0C82A4 7F093774 44818000 */ mtc1 $at, $f16 -/* 0C82A8 7F093778 240E0001 */ li $t6, 1 -/* 0C82AC 7F09377C 46105401 */ sub.s $f16, $f10, $f16 -/* 0C82B0 7F093780 44CEF800 */ ctc1 $t6, $31 -/* 0C82B4 7F093784 00000000 */ nop -/* 0C82B8 7F093788 46008424 */ cvt.w.s $f16, $f16 -/* 0C82BC 7F09378C 444EF800 */ cfc1 $t6, $31 -/* 0C82C0 7F093790 00000000 */ nop -/* 0C82C4 7F093794 31CE0078 */ andi $t6, $t6, 0x78 -/* 0C82C8 7F093798 15C00005 */ bnez $t6, .L7F0937B0 -/* 0C82CC 7F09379C 00000000 */ nop -/* 0C82D0 7F0937A0 440E8000 */ mfc1 $t6, $f16 -/* 0C82D4 7F0937A4 3C018000 */ lui $at, 0x8000 -/* 0C82D8 7F0937A8 10000007 */ b .L7F0937C8 -/* 0C82DC 7F0937AC 01C17025 */ or $t6, $t6, $at -.L7F0937B0: -/* 0C82E0 7F0937B0 10000005 */ b .L7F0937C8 -/* 0C82E4 7F0937B4 240EFFFF */ li $t6, -1 -.L7F0937B8: -/* 0C82E8 7F0937B8 440E8000 */ mfc1 $t6, $f16 -/* 0C82EC 7F0937BC 00000000 */ nop -/* 0C82F0 7F0937C0 05C0FFFB */ bltz $t6, .L7F0937B0 -/* 0C82F4 7F0937C4 00000000 */ nop -.L7F0937C8: -/* 0C82F8 7F0937C8 31CF00FF */ andi $t7, $t6, 0xff -/* 0C82FC 7F0937CC 3C01FA00 */ lui $at, 0xfa00 -/* 0C8300 7F0937D0 01E1C025 */ or $t8, $t7, $at -/* 0C8304 7F0937D4 ACF80000 */ sw $t8, ($a3) -/* 0C8308 7F0937D8 ACF90004 */ sw $t9, 4($a3) -/* 0C830C 7F0937DC AC400004 */ sw $zero, 4($v0) -/* 0C8310 7F0937E0 AC4A0000 */ sw $t2, ($v0) -/* 0C8314 7F0937E4 44CDF800 */ ctc1 $t5, $31 -/* 0C8318 7F0937E8 AC690004 */ sw $t1, 4($v1) -/* 0C831C 7F0937EC AC6B0000 */ sw $t3, ($v1) -/* 0C8320 7F0937F0 3C0D1F10 */ lui $t5, (0x1F1093FF >> 16) # lui $t5, 0x1f10 -/* 0C8324 7F0937F4 35AD93FF */ ori $t5, (0x1F1093FF & 0xFFFF) # ori $t5, $t5, 0x93ff -/* 0C8328 7F0937F8 00803025 */ move $a2, $a0 -/* 0C832C 7F0937FC ACAD0004 */ sw $t5, 4($a1) -/* 0C8330 7F093800 ACAC0000 */ sw $t4, ($a1) -/* 0C8334 7F093804 24840008 */ addiu $a0, $a0, 8 -/* 0C8338 7F093808 3C0F0C19 */ lui $t7, (0x0C192078 >> 16) # lui $t7, 0xc19 -/* 0C833C 7F09380C 3C0EB900 */ lui $t6, (0xB900031D >> 16) # lui $t6, 0xb900 -/* 0C8340 7F093810 35CE031D */ ori $t6, (0xB900031D & 0xFFFF) # ori $t6, $t6, 0x31d -/* 0C8344 7F093814 35EF2078 */ ori $t7, (0x0C192078 & 0xFFFF) # ori $t7, $t7, 0x2078 -/* 0C8348 7F093818 00804025 */ move $t0, $a0 -/* 0C834C 7F09381C ACCF0004 */ sw $t7, 4($a2) -/* 0C8350 7F093820 ACCE0000 */ sw $t6, ($a2) -/* 0C8354 7F093824 24840008 */ addiu $a0, $a0, 8 -/* 0C8358 7F093828 3C18BA00 */ lui $t8, (0xBA001001 >> 16) # lui $t8, 0xba00 -/* 0C835C 7F09382C 37181001 */ ori $t8, (0xBA001001 & 0xFFFF) # ori $t8, $t8, 0x1001 -/* 0C8360 7F093830 00801025 */ move $v0, $a0 -/* 0C8364 7F093834 AD180000 */ sw $t8, ($t0) -/* 0C8368 7F093838 AD000004 */ sw $zero, %lo(0xF5480004)($t0) -/* 0C836C 7F09383C 24840008 */ addiu $a0, $a0, 8 -/* 0C8370 7F093840 3C19BA00 */ lui $t9, (0xBA001402 >> 16) # lui $t9, 0xba00 -/* 0C8374 7F093844 37391402 */ ori $t9, (0xBA001402 & 0xFFFF) # ori $t9, $t9, 0x1402 -/* 0C8378 7F093848 3C0A0010 */ lui $t2, 0x10 -/* 0C837C 7F09384C 00801825 */ move $v1, $a0 -/* 0C8380 7F093850 AC4A0004 */ sw $t2, 4($v0) -/* 0C8384 7F093854 AC590000 */ sw $t9, ($v0) -/* 0C8388 7F093858 3C0BB700 */ lui $t3, 0xb700 -/* 0C838C 7F09385C AC6B0000 */ sw $t3, ($v1) -/* 0C8390 7F093860 AC690004 */ sw $t1, 4($v1) -/* 0C8394 7F093864 24840008 */ addiu $a0, $a0, 8 -.L7F093868: -/* 0C8398 7F093868 8FBF0014 */ lw $ra, 0x14($sp) -/* 0C839C 7F09386C 27BD0030 */ addiu $sp, $sp, 0x30 -/* 0C83A0 7F093870 00801025 */ move $v0, $a0 -/* 0C83A4 7F093874 03E00008 */ jr $ra -/* 0C83A8 7F093878 00000000 */ nop -) -#endif +Gfx* sub_GAME_7F09343C(Gfx *gdl, s32 arg1) +{ + if (arg1 != 0) + { + gSPDisplayList(gdl++, MipMap2C_Something_Setup); + } + else + { + gDPSetTile(gdl++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0, 0, 0, 0, 5, 0, 0, 5, 0); + gDPSetTile(gdl++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, 0, 1, 0, 0, 5, 0, 0, 5, 0); + gDPSetTileSize(gdl++, 0, 0, 0, 0, 0); + gDPSetTileSize(gdl++, 1, 90, 150, 0, 0); + gDPSetPrimColor(gdl++, 0, (sinf(flt_CODE_bss_80079E88) * 127.0f + 128.0f), 0xFF, 0xFF, 0xFF, 0xFF); + gDPSetTextureDetail(gdl++, G_TD_CLAMP); + gDPSetTextureFilter(gdl++, G_TF_BILERP); + gDPSetCombineLERP(gdl++, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0); + gDPSetRenderMode(gdl++, G_RM_PASS, G_RM_AA_ZB_OPA_SURF2); + gDPSetTextureLOD(gdl++, G_TL_TILE); + gDPSetCycleType(gdl++, G_CYC_2CYCLE); + gSPSetGeometryMode(gdl++, G_CULL_BACK); + } + return gdl; +} + + +Gfx* sub_GAME_7F09365C(Gfx *gdl, s32 arg1) +{ + if (arg1 != 0) + { + gSPDisplayList(gdl++, MipMap2C_Something2_Setup); + } + else + { + gDPSetTile(gdl++, G_IM_FMT_CI, G_IM_SIZ_8b, 2, 0, 0, 0, 0, 5, 0, 0, 5, 0); + gDPSetTile(gdl++, G_IM_FMT_CI, G_IM_SIZ_8b, 2, 0, 1, 0, 0, 5, 0, 0, 5, 0); + gDPSetTileSize(gdl++, 0, 0, 0, 0, 0); + gDPSetTileSize(gdl++, 1, 90, 150, 0, 0); + gDPSetPrimColor(gdl++, 0, (sinf(flt_CODE_bss_80079E88) * 127.0f + 128.0f), 0xFF, 0xFF, 0xFF, 0xFF); + gDPSetTextureDetail(gdl++, G_TD_CLAMP); + gDPSetTextureFilter(gdl++, G_TF_BILERP); + gDPSetCombineLERP(gdl++, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0); /* expands to FC272C04 1F1093FF */ + gDPSetRenderMode(gdl++, G_RM_PASS, G_RM_AA_ZB_OPA_SURF2); + gDPSetTextureLOD(gdl++, G_TL_TILE); + gDPSetCycleType(gdl++, G_CYC_2CYCLE); + gSPSetGeometryMode(gdl++, G_CULL_BACK); + } + + return gdl; +} diff --git a/src/game/unk_092E50.h b/src/game/unk_092E50.h index 61bfde7d..eef39b8c 100644 --- a/src/game/unk_092E50.h +++ b/src/game/unk_092E50.h @@ -1,15 +1,18 @@ #ifndef _UNK_092E50_H_ #define _UNK_092E50_H_ #include +#include "bondview.h" extern f32 g_SkyCloudOffset; -extern u32 D_8003FDA0[]; +extern struct hand D_8003FDA0; extern f32 flt_CODE_bss_80079E80; extern f32 flt_CODE_bss_80079E84; extern f32 flt_CODE_bss_80079E88; void sub_GAME_7F092E50(void); +Gfx* sub_GAME_7F09343C(Gfx *gdl, s32 arg1); +Gfx* sub_GAME_7F09365C(Gfx *gdl, s32 arg1); #endif diff --git a/src/game/unk_09B7A0.c b/src/game/unk_09B7A0.c deleted file mode 100644 index 3c1045c2..00000000 --- a/src/game/unk_09B7A0.c +++ /dev/null @@ -1,785 +0,0 @@ -#include -#include -#include "bondtypes.h" -#include "unk_09B7A0.h" -#include "propobj.h" -#include "model.h" - -// unsure if these structs are defined as something else, elsewhere -struct unk_09B7A0_struct_child { - s32 unk00; - s32 unk04; - s32 unk08; - s32 unk0C; -}; - -// unsure if these structs are defined as something else, elsewhere -struct unk_09B7A0_struct_parent { - struct unk_09B7A0_struct_child* unk00; - s32 unk04; - s32 unk08; - s16 unk0C; - s16 unk0E; - s16 unk10; - s16 unk12; -}; - -// bss -//CODE.bss:8007A0D0 -s32 dword_CODE_bss_8007A0D0; // item count for dword_CODE_bss_8007A0E0 -//CODE.bss:8007A0D4 -s32 dword_CODE_bss_8007A0D4; // item count for dword_CODE_bss_8007A0E8 -//CODE.bss:8007A0D8 -s32 dword_CODE_bss_8007A0D8; // item count for dword_CODE_bss_8007A0E4 -//CODE.bss:8007A0DC -s32 dword_CODE_bss_8007A0DC; // item count for dword_CODE_bss_8007A0EC -//CODE.bss:8007A0E0 -struct unk_09B7A0_struct_parent* dword_CODE_bss_8007A0E0; // array ( uses dword_CODE_bss_8007A0D0 as alloc count, item size 0x10 ) -//CODE.bss:8007A0E4 -struct unk_09B7A0_struct_parent* dword_CODE_bss_8007A0E4; // array ( uses dword_CODE_bss_8007A0D8 as alloc count, item size 0x10 ) -//CODE.bss:8007A0E8 -struct unk_09B7A0_struct_parent* dword_CODE_bss_8007A0E8; // array ( uses dword_CODE_bss_8007A0D4 as alloc count, item size 0x14 ) -//CODE.bss:8007A0EC -struct unk_09B7A0_struct_parent* dword_CODE_bss_8007A0EC; // array ( uses dword_CODE_bss_8007A0DC as alloc count, item size 0x14 ) -//CODE.bss:8007A0F0 -s16 word_CODE_bss_8007A0F0; -//CODE.bss:8007A0F2 -s16 word_CODE_bss_8007A0F2; - -void null_init_main_1(void) -{ - return; -} - - -void sub_GAME_7F09B7A8(void) -{ - s32 i; - for (i = 0; i < dword_CODE_bss_8007A0D4; i++) - { - if (dword_CODE_bss_8007A0E8[i].unk00); - } -} - -void sub_GAME_7F09B7E4(void) -{ - s32 i; - for (i = 0; i < dword_CODE_bss_8007A0DC; i++) - { - if (dword_CODE_bss_8007A0EC[i].unk00); - } -} - -void sub_GAME_7F09B820(void) -{ - u32 tmp; - s32 stage; - s32 i; - - tmp = 0x5DC; - - if (getPlayerCount() >= 2) - { - dword_CODE_bss_8007A0D0 = 0xBB8; - dword_CODE_bss_8007A0D4 = 0x50; - dword_CODE_bss_8007A0D8 = 0x1F4; - dword_CODE_bss_8007A0DC = 0x14; - } - else - { - stage = lvlGetCurrentStageToLoad(); - if ((stage != 0x1E) && (stage != 0x1D)) - { - dword_CODE_bss_8007A0D0 = 0x1F4; - dword_CODE_bss_8007A0D4 = 0x14; - dword_CODE_bss_8007A0D8 = tmp; - dword_CODE_bss_8007A0DC = 0x28; - } - else - { - dword_CODE_bss_8007A0D0 = 0x1F4; - dword_CODE_bss_8007A0D4 = 0x14; - dword_CODE_bss_8007A0D8 = 0x1F4; - dword_CODE_bss_8007A0DC = 0x14; - } - } - - tmp = 0x14; - dword_CODE_bss_8007A0E8 = mempAllocBytesInBank(dword_CODE_bss_8007A0D4 * tmp, MEMPOOL_STAGE); - dword_CODE_bss_8007A0E0 = mempAllocBytesInBank(dword_CODE_bss_8007A0D0 * 0x10, MEMPOOL_STAGE); - dword_CODE_bss_8007A0EC = mempAllocBytesInBank(dword_CODE_bss_8007A0DC * tmp, MEMPOOL_STAGE); - dword_CODE_bss_8007A0E4 = mempAllocBytesInBank(dword_CODE_bss_8007A0D8 * 0x10, MEMPOOL_STAGE); - - word_CODE_bss_8007A0F0 = (s16) dword_CODE_bss_8007A0D0; - dword_CODE_bss_8007A0E8->unk00 = (struct unk_09B7A0_struct_child *) dword_CODE_bss_8007A0E0; - dword_CODE_bss_8007A0E8->unk0C = (s16) dword_CODE_bss_8007A0D0; - dword_CODE_bss_8007A0E8->unk0E = 0; - dword_CODE_bss_8007A0E8->unk10 = -1; - dword_CODE_bss_8007A0E8->unk12 = -1; - - for (i = 1; i < dword_CODE_bss_8007A0D4; i++) - { - dword_CODE_bss_8007A0E8[i].unk0E = -1; - } - - word_CODE_bss_8007A0F2 = (s16) dword_CODE_bss_8007A0D8; - dword_CODE_bss_8007A0EC->unk00 = (struct unk_09B7A0_struct_child *) dword_CODE_bss_8007A0E4; - dword_CODE_bss_8007A0EC->unk0C = (s16) dword_CODE_bss_8007A0D8; - dword_CODE_bss_8007A0EC->unk0E = 0; - dword_CODE_bss_8007A0EC->unk10 = -1; - dword_CODE_bss_8007A0EC->unk12 = -1; - - for (i = 1; i < dword_CODE_bss_8007A0DC; i++) - { - dword_CODE_bss_8007A0EC[i].unk0E = -1; - } -} - - -#ifdef NONMATCHING -void sub_GAME_7F09BAC4(void) { - //s32 *modelGetNodeRwData(void *, void *); /* extern */ - //void *get_ptr_obj_pos_list_current_entry(); /* extern */ - - s32 *temp_v0_2; - void *temp_a0; - void *temp_a1; - void *temp_a1_2; - void *temp_s1; - void *temp_v0; - void *temp_v0_3; - void *temp_v0_4; - void *phi_s1; - void *phi_a1; - void *phi_a1_2; - void *phi_a1_3; - - temp_v0 = get_ptr_obj_pos_list_current_entry(); - phi_s1 = temp_v0; - if (temp_v0 != 0) { - do { - if (phi_s1->unk0 == 1) { - temp_a0 = phi_s1->unk4->unk14; - temp_a1 = *temp_a0->unk8; - phi_a1 = temp_a1; - if (temp_a1 != 0) { -loop_4: - phi_a1_2 = phi_a1; - phi_a1_3 = phi_a1; - if ((phi_a1->unk0 & 0xFF) == 0x18) { - temp_v0_2 = modelGetNodeRwData(temp_a0, phi_a1); - if (arg0 == *temp_v0_2) { - *temp_v0_2 = arg1; - } - } else { - temp_v0_3 = phi_a1->unk14; - if (temp_v0_3 != 0) { - phi_a1_3 = temp_v0_3; - } else if (phi_a1 != 0) { -loop_10: - temp_v0_4 = phi_a1_2->unkC; - if (temp_v0_4 != 0) { - phi_a1_3 = temp_v0_4; - } else { - temp_a1_2 = phi_a1_2->unk8; - phi_a1_2 = temp_a1_2; - phi_a1_3 = temp_a1_2; - if (temp_a1_2 != 0) { - goto loop_10; - } - } - } - phi_a1 = phi_a1_3; - if (phi_a1_3 != 0) { - goto loop_4; - } - } - } - } - temp_s1 = phi_s1->unk24; - phi_s1 = temp_s1; - } while (temp_s1 != 0); - } - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F09BAC4 -/* 0D05F4 7F09BAC4 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 0D05F8 7F09BAC8 AFBF002C */ sw $ra, 0x2c($sp) -/* 0D05FC 7F09BACC AFB40028 */ sw $s4, 0x28($sp) -/* 0D0600 7F09BAD0 AFB30024 */ sw $s3, 0x24($sp) -/* 0D0604 7F09BAD4 00809825 */ move $s3, $a0 -/* 0D0608 7F09BAD8 00A0A025 */ move $s4, $a1 -/* 0D060C 7F09BADC AFB20020 */ sw $s2, 0x20($sp) -/* 0D0610 7F09BAE0 AFB1001C */ sw $s1, 0x1c($sp) -/* 0D0614 7F09BAE4 0FC0E909 */ jal get_ptr_obj_pos_list_current_entry -/* 0D0618 7F09BAE8 AFB00018 */ sw $s0, 0x18($sp) -/* 0D061C 7F09BAEC 1040002B */ beqz $v0, .L7F09BB9C -/* 0D0620 7F09BAF0 00408825 */ move $s1, $v0 -/* 0D0624 7F09BAF4 24120001 */ li $s2, 1 -/* 0D0628 7F09BAF8 24100018 */ li $s0, 24 -/* 0D062C 7F09BAFC 922E0000 */ lbu $t6, ($s1) -.L7F09BB00: -/* 0D0630 7F09BB00 564E0024 */ bnel $s2, $t6, .L7F09BB94 -/* 0D0634 7F09BB04 8E310024 */ lw $s1, 0x24($s1) -/* 0D0638 7F09BB08 8E220004 */ lw $v0, 4($s1) -/* 0D063C 7F09BB0C 8C440014 */ lw $a0, 0x14($v0) -/* 0D0640 7F09BB10 8C830008 */ lw $v1, 8($a0) -/* 0D0644 7F09BB14 8C650000 */ lw $a1, ($v1) -/* 0D0648 7F09BB18 50A0001E */ beql $a1, $zero, .L7F09BB94 -/* 0D064C 7F09BB1C 8E310024 */ lw $s1, 0x24($s1) -/* 0D0650 7F09BB20 94A20000 */ lhu $v0, ($a1) -.L7F09BB24: -/* 0D0654 7F09BB24 304F00FF */ andi $t7, $v0, 0xff -/* 0D0658 7F09BB28 55F00009 */ bnel $t7, $s0, .L7F09BB50 -/* 0D065C 7F09BB2C 8CA20014 */ lw $v0, 0x14($a1) -/* 0D0660 7F09BB30 0FC1B1E7 */ jal modelGetNodeRwData -/* 0D0664 7F09BB34 00000000 */ nop -/* 0D0668 7F09BB38 8C580000 */ lw $t8, ($v0) -/* 0D066C 7F09BB3C 56780015 */ bnel $s3, $t8, .L7F09BB94 -/* 0D0670 7F09BB40 8E310024 */ lw $s1, 0x24($s1) -/* 0D0674 7F09BB44 10000012 */ b .L7F09BB90 -/* 0D0678 7F09BB48 AC540000 */ sw $s4, ($v0) -/* 0D067C 7F09BB4C 8CA20014 */ lw $v0, 0x14($a1) -.L7F09BB50: -/* 0D0680 7F09BB50 10400003 */ beqz $v0, .L7F09BB60 -/* 0D0684 7F09BB54 00000000 */ nop -/* 0D0688 7F09BB58 1000000B */ b .L7F09BB88 -/* 0D068C 7F09BB5C 00402825 */ move $a1, $v0 -.L7F09BB60: -/* 0D0690 7F09BB60 10A00009 */ beqz $a1, .L7F09BB88 -/* 0D0694 7F09BB64 00000000 */ nop -/* 0D0698 7F09BB68 8CA2000C */ lw $v0, 0xc($a1) -.L7F09BB6C: -/* 0D069C 7F09BB6C 50400004 */ beql $v0, $zero, .L7F09BB80 -/* 0D06A0 7F09BB70 8CA50008 */ lw $a1, 8($a1) -/* 0D06A4 7F09BB74 10000004 */ b .L7F09BB88 -/* 0D06A8 7F09BB78 00402825 */ move $a1, $v0 -/* 0D06AC 7F09BB7C 8CA50008 */ lw $a1, 8($a1) -.L7F09BB80: -/* 0D06B0 7F09BB80 54A0FFFA */ bnezl $a1, .L7F09BB6C -/* 0D06B4 7F09BB84 8CA2000C */ lw $v0, 0xc($a1) -.L7F09BB88: -/* 0D06B8 7F09BB88 54A0FFE6 */ bnezl $a1, .L7F09BB24 -/* 0D06BC 7F09BB8C 94A20000 */ lhu $v0, ($a1) -.L7F09BB90: -/* 0D06C0 7F09BB90 8E310024 */ lw $s1, 0x24($s1) -.L7F09BB94: -/* 0D06C4 7F09BB94 5620FFDA */ bnezl $s1, .L7F09BB00 -/* 0D06C8 7F09BB98 922E0000 */ lbu $t6, ($s1) -.L7F09BB9C: -/* 0D06CC 7F09BB9C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0D06D0 7F09BBA0 8FB00018 */ lw $s0, 0x18($sp) -/* 0D06D4 7F09BBA4 8FB1001C */ lw $s1, 0x1c($sp) -/* 0D06D8 7F09BBA8 8FB20020 */ lw $s2, 0x20($sp) -/* 0D06DC 7F09BBAC 8FB30024 */ lw $s3, 0x24($sp) -/* 0D06E0 7F09BBB0 8FB40028 */ lw $s4, 0x28($sp) -/* 0D06E4 7F09BBB4 03E00008 */ jr $ra -/* 0D06E8 7F09BBB8 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F09BBBC(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F09BBBC -/* 0D06EC 7F09BBBC 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0D06F0 7F09BBC0 AFB5002C */ sw $s5, 0x2c($sp) -/* 0D06F4 7F09BBC4 3C158008 */ lui $s5, %hi(word_CODE_bss_8007A0F2) -/* 0D06F8 7F09BBC8 3C0F8008 */ lui $t7, %hi(dword_CODE_bss_8007A0D8) -/* 0D06FC 7F09BBCC 8DEFA0D8 */ lw $t7, %lo(dword_CODE_bss_8007A0D8)($t7) -/* 0D0700 7F09BBD0 26B5A0F2 */ addiu $s5, %lo(word_CODE_bss_8007A0F2) # addiu $s5, $s5, -0x5f0e -/* 0D0704 7F09BBD4 86AE0000 */ lh $t6, ($s5) -/* 0D0708 7F09BBD8 000FC083 */ sra $t8, $t7, 2 -/* 0D070C 7F09BBDC AFB60030 */ sw $s6, 0x30($sp) -/* 0D0710 7F09BBE0 01D8082A */ slt $at, $t6, $t8 -/* 0D0714 7F09BBE4 AFBF003C */ sw $ra, 0x3c($sp) -/* 0D0718 7F09BBE8 AFBE0038 */ sw $fp, 0x38($sp) -/* 0D071C 7F09BBEC AFB70034 */ sw $s7, 0x34($sp) -/* 0D0720 7F09BBF0 AFB40028 */ sw $s4, 0x28($sp) -/* 0D0724 7F09BBF4 AFB30024 */ sw $s3, 0x24($sp) -/* 0D0728 7F09BBF8 AFB20020 */ sw $s2, 0x20($sp) -/* 0D072C 7F09BBFC AFB1001C */ sw $s1, 0x1c($sp) -/* 0D0730 7F09BC00 AFB00018 */ sw $s0, 0x18($sp) -/* 0D0734 7F09BC04 1020004B */ beqz $at, .L7F09BD34 -/* 0D0738 7F09BC08 0000B025 */ move $s6, $zero -/* 0D073C 7F09BC0C 3C048008 */ lui $a0, %hi(dword_CODE_bss_8007A0DC) -/* 0D0740 7F09BC10 8C84A0DC */ lw $a0, %lo(dword_CODE_bss_8007A0DC)($a0) -/* 0D0744 7F09BC14 0000F025 */ move $fp, $zero -/* 0D0748 7F09BC18 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007A0EC) -/* 0D074C 7F09BC1C 2485FFFF */ addiu $a1, $a0, -1 -/* 0D0750 7F09BC20 18A00044 */ blez $a1, .L7F09BD34 -/* 0D0754 7F09BC24 24170014 */ li $s7, 20 -/* 0D0758 7F09BC28 3C148008 */ lui $s4, %hi(dword_CODE_bss_8007A0EC) -/* 0D075C 7F09BC2C 2694A0EC */ addiu $s4, %lo(dword_CODE_bss_8007A0EC) # addiu $s4, $s4, -0x5f14 -/* 0D0760 7F09BC30 8C63A0EC */ lw $v1, %lo(dword_CODE_bss_8007A0EC)($v1) -.L7F09BC34: -/* 0D0764 7F09BC34 03D70019 */ multu $fp, $s7 -/* 0D0768 7F09BC38 27C20001 */ addiu $v0, $fp, 1 -/* 0D076C 7F09BC3C 00025400 */ sll $t2, $v0, 0x10 -/* 0D0770 7F09BC40 000A5C03 */ sra $t3, $t2, 0x10 -/* 0D0774 7F09BC44 00029400 */ sll $s2, $v0, 0x10 -/* 0D0778 7F09BC48 00124C03 */ sra $t1, $s2, 0x10 -/* 0D077C 7F09BC4C 0164082A */ slt $at, $t3, $a0 -/* 0D0780 7F09BC50 00009812 */ mflo $s3 -/* 0D0784 7F09BC54 0073C821 */ addu $t9, $v1, $s3 -/* 0D0788 7F09BC58 8728000E */ lh $t0, 0xe($t9) -/* 0D078C 7F09BC5C 59000030 */ blezl $t0, .L7F09BD20 -/* 0D0790 7F09BC60 27DE0001 */ addiu $fp, $fp, 1 -/* 0D0794 7F09BC64 1020002D */ beqz $at, .L7F09BD1C -/* 0D0798 7F09BC68 01209025 */ move $s2, $t1 -.L7F09BC6C: -/* 0D079C 7F09BC6C 02570019 */ multu $s2, $s7 -/* 0D07A0 7F09BC70 00738021 */ addu $s0, $v1, $s3 -/* 0D07A4 7F09BC74 00008812 */ mflo $s1 -/* 0D07A8 7F09BC78 00711021 */ addu $v0, $v1, $s1 -/* 0D07AC 7F09BC7C 844C000E */ lh $t4, 0xe($v0) -/* 0D07B0 7F09BC80 59800020 */ blezl $t4, .L7F09BD04 -/* 0D07B4 7F09BC84 26520001 */ addiu $s2, $s2, 1 -/* 0D07B8 7F09BC88 8E0D0004 */ lw $t5, 4($s0) -/* 0D07BC 7F09BC8C 8C4F0004 */ lw $t7, 4($v0) -/* 0D07C0 7F09BC90 55AF001C */ bnel $t5, $t7, .L7F09BD04 -/* 0D07C4 7F09BC94 26520001 */ addiu $s2, $s2, 1 -/* 0D07C8 7F09BC98 8E0E0008 */ lw $t6, 8($s0) -/* 0D07CC 7F09BC9C 8C580008 */ lw $t8, 8($v0) -/* 0D07D0 7F09BCA0 55D80018 */ bnel $t6, $t8, .L7F09BD04 -/* 0D07D4 7F09BCA4 26520001 */ addiu $s2, $s2, 1 -/* 0D07D8 7F09BCA8 8C440000 */ lw $a0, ($v0) -/* 0D07DC 7F09BCAC 8E050000 */ lw $a1, ($s0) -/* 0D07E0 7F09BCB0 0FC26EB1 */ jal sub_GAME_7F09BAC4 -/* 0D07E4 7F09BCB4 24160001 */ li $s6, 1 -/* 0D07E8 7F09BCB8 8E830000 */ lw $v1, ($s4) -/* 0D07EC 7F09BCBC 3C048008 */ lui $a0, %hi(dword_CODE_bss_8007A0DC) -/* 0D07F0 7F09BCC0 00738021 */ addu $s0, $v1, $s3 -/* 0D07F4 7F09BCC4 00714021 */ addu $t0, $v1, $s1 -/* 0D07F8 7F09BCC8 8509000E */ lh $t1, 0xe($t0) -/* 0D07FC 7F09BCCC 8619000E */ lh $t9, 0xe($s0) -/* 0D0800 7F09BCD0 03295021 */ addu $t2, $t9, $t1 -/* 0D0804 7F09BCD4 A60A000E */ sh $t2, 0xe($s0) -/* 0D0808 7F09BCD8 8E8B0000 */ lw $t3, ($s4) -/* 0D080C 7F09BCDC 01716021 */ addu $t4, $t3, $s1 -/* 0D0810 7F09BCE0 A580000E */ sh $zero, 0xe($t4) -/* 0D0814 7F09BCE4 8E830000 */ lw $v1, ($s4) -/* 0D0818 7F09BCE8 86AD0000 */ lh $t5, ($s5) -/* 0D081C 7F09BCEC 00717821 */ addu $t7, $v1, $s1 -/* 0D0820 7F09BCF0 85EE000C */ lh $t6, 0xc($t7) -/* 0D0824 7F09BCF4 01AEC021 */ addu $t8, $t5, $t6 -/* 0D0828 7F09BCF8 A6B80000 */ sh $t8, ($s5) -/* 0D082C 7F09BCFC 8C84A0DC */ lw $a0, %lo(dword_CODE_bss_8007A0DC)($a0) -/* 0D0830 7F09BD00 26520001 */ addiu $s2, $s2, 1 -.L7F09BD04: -/* 0D0834 7F09BD04 00124400 */ sll $t0, $s2, 0x10 -/* 0D0838 7F09BD08 00089403 */ sra $s2, $t0, 0x10 -/* 0D083C 7F09BD0C 0244082A */ slt $at, $s2, $a0 -/* 0D0840 7F09BD10 1420FFD6 */ bnez $at, .L7F09BC6C -/* 0D0844 7F09BD14 00000000 */ nop -/* 0D0848 7F09BD18 2485FFFF */ addiu $a1, $a0, -1 -.L7F09BD1C: -/* 0D084C 7F09BD1C 27DE0001 */ addiu $fp, $fp, 1 -.L7F09BD20: -/* 0D0850 7F09BD20 001E4C00 */ sll $t1, $fp, 0x10 -/* 0D0854 7F09BD24 0009F403 */ sra $fp, $t1, 0x10 -/* 0D0858 7F09BD28 03C5082A */ slt $at, $fp, $a1 -/* 0D085C 7F09BD2C 1420FFC1 */ bnez $at, .L7F09BC34 -/* 0D0860 7F09BD30 00000000 */ nop -.L7F09BD34: -/* 0D0864 7F09BD34 3C148008 */ lui $s4, %hi(dword_CODE_bss_8007A0EC) -/* 0D0868 7F09BD38 2694A0EC */ addiu $s4, %lo(dword_CODE_bss_8007A0EC) # addiu $s4, $s4, -0x5f14 -/* 0D086C 7F09BD3C 12C0002E */ beqz $s6, .L7F09BDF8 -/* 0D0870 7F09BD40 24170014 */ li $s7, 20 -/* 0D0874 7F09BD44 00002025 */ move $a0, $zero -/* 0D0878 7F09BD48 0000F025 */ move $fp, $zero -/* 0D087C 7F09BD4C 2405FFFF */ li $a1, -1 -.L7F09BD50: -/* 0D0880 7F09BD50 03D70019 */ multu $fp, $s7 -/* 0D0884 7F09BD54 8E830000 */ lw $v1, ($s4) -/* 0D0888 7F09BD58 00009812 */ mflo $s3 -/* 0D088C 7F09BD5C 00738021 */ addu $s0, $v1, $s3 -/* 0D0890 7F09BD60 86120010 */ lh $s2, 0x10($s0) -/* 0D0894 7F09BD64 06420022 */ bltzl $s2, .L7F09BDF0 -/* 0D0898 7F09BD68 24040001 */ li $a0, 1 -/* 0D089C 7F09BD6C 860B000E */ lh $t3, 0xe($s0) -/* 0D08A0 7F09BD70 5560001B */ bnezl $t3, .L7F09BDE0 -/* 0D08A4 7F09BD74 0012F400 */ sll $fp, $s2, 0x10 -/* 0D08A8 7F09BD78 02570019 */ multu $s2, $s7 -/* 0D08AC 7F09BD7C 00008812 */ mflo $s1 -/* 0D08B0 7F09BD80 00711021 */ addu $v0, $v1, $s1 -/* 0D08B4 7F09BD84 844C000E */ lh $t4, 0xe($v0) -/* 0D08B8 7F09BD88 55800015 */ bnezl $t4, .L7F09BDE0 -/* 0D08BC 7F09BD8C 0012F400 */ sll $fp, $s2, 0x10 -/* 0D08C0 7F09BD90 860F000C */ lh $t7, 0xc($s0) -/* 0D08C4 7F09BD94 844D000C */ lh $t5, 0xc($v0) -/* 0D08C8 7F09BD98 01ED7021 */ addu $t6, $t7, $t5 -/* 0D08CC 7F09BD9C A60E000C */ sh $t6, 0xc($s0) -/* 0D08D0 7F09BDA0 8E980000 */ lw $t8, ($s4) -/* 0D08D4 7F09BDA4 03114021 */ addu $t0, $t8, $s1 -/* 0D08D8 7F09BDA8 A505000E */ sh $a1, 0xe($t0) -/* 0D08DC 7F09BDAC 8E830000 */ lw $v1, ($s4) -/* 0D08E0 7F09BDB0 0071C821 */ addu $t9, $v1, $s1 -/* 0D08E4 7F09BDB4 87320010 */ lh $s2, 0x10($t9) -/* 0D08E8 7F09BDB8 00734821 */ addu $t1, $v1, $s3 -/* 0D08EC 7F09BDBC 0640000C */ bltz $s2, .L7F09BDF0 -/* 0D08F0 7F09BDC0 A5320010 */ sh $s2, 0x10($t1) -/* 0D08F4 7F09BDC4 02570019 */ multu $s2, $s7 -/* 0D08F8 7F09BDC8 8E8A0000 */ lw $t2, ($s4) -/* 0D08FC 7F09BDCC 00005812 */ mflo $t3 -/* 0D0900 7F09BDD0 014B6021 */ addu $t4, $t2, $t3 -/* 0D0904 7F09BDD4 10000006 */ b .L7F09BDF0 -/* 0D0908 7F09BDD8 A59E0012 */ sh $fp, 0x12($t4) -/* 0D090C 7F09BDDC 0012F400 */ sll $fp, $s2, 0x10 -.L7F09BDE0: -/* 0D0910 7F09BDE0 001E7C03 */ sra $t7, $fp, 0x10 -/* 0D0914 7F09BDE4 10000002 */ b .L7F09BDF0 -/* 0D0918 7F09BDE8 01E0F025 */ move $fp, $t7 -/* 0D091C 7F09BDEC 24040001 */ li $a0, 1 -.L7F09BDF0: -/* 0D0920 7F09BDF0 1080FFD7 */ beqz $a0, .L7F09BD50 -/* 0D0924 7F09BDF4 00000000 */ nop -.L7F09BDF8: -/* 0D0928 7F09BDF8 3C0E8008 */ lui $t6, %hi(dword_CODE_bss_8007A0D8) -/* 0D092C 7F09BDFC 8DCEA0D8 */ lw $t6, %lo(dword_CODE_bss_8007A0D8)($t6) -/* 0D0930 7F09BE00 86AD0000 */ lh $t5, ($s5) -/* 0D0934 7F09BE04 000EC083 */ sra $t8, $t6, 2 -/* 0D0938 7F09BE08 01B8082A */ slt $at, $t5, $t8 -/* 0D093C 7F09BE0C 50200004 */ beql $at, $zero, .L7F09BE20 -/* 0D0940 7F09BE10 8FBF003C */ lw $ra, 0x3c($sp) -/* 0D0944 7F09BE14 0FC159A4 */ jal sub_GAME_7F056690 -/* 0D0948 7F09BE18 00000000 */ nop -/* 0D094C 7F09BE1C 8FBF003C */ lw $ra, 0x3c($sp) -.L7F09BE20: -/* 0D0950 7F09BE20 8FB00018 */ lw $s0, 0x18($sp) -/* 0D0954 7F09BE24 8FB1001C */ lw $s1, 0x1c($sp) -/* 0D0958 7F09BE28 8FB20020 */ lw $s2, 0x20($sp) -/* 0D095C 7F09BE2C 8FB30024 */ lw $s3, 0x24($sp) -/* 0D0960 7F09BE30 8FB40028 */ lw $s4, 0x28($sp) -/* 0D0964 7F09BE34 8FB5002C */ lw $s5, 0x2c($sp) -/* 0D0968 7F09BE38 8FB60030 */ lw $s6, 0x30($sp) -/* 0D096C 7F09BE3C 8FB70034 */ lw $s7, 0x34($sp) -/* 0D0970 7F09BE40 8FBE0038 */ lw $fp, 0x38($sp) -/* 0D0974 7F09BE44 03E00008 */ jr $ra -/* 0D0978 7F09BE48 27BD0040 */ addiu $sp, $sp, 0x40 -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F09BE4C(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F09BE4C -/* 0D097C 7F09BE4C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D0980 7F09BE50 AFB00018 */ sw $s0, 0x18($sp) -/* 0D0984 7F09BE54 24010B0B */ li $at, 2827 -/* 0D0988 7F09BE58 00808025 */ move $s0, $a0 -/* 0D098C 7F09BE5C AFBF001C */ sw $ra, 0x1c($sp) -/* 0D0990 7F09BE60 AFA60028 */ sw $a2, 0x28($sp) -/* 0D0994 7F09BE64 10A1000A */ beq $a1, $at, .L7F09BE90 -/* 0D0998 7F09BE68 AFA7002C */ sw $a3, 0x2c($sp) -/* 0D099C 7F09BE6C 3401CCCC */ li $at, 52428 -/* 0D09A0 7F09BE70 14A1000E */ bne $a1, $at, .L7F09BEAC -/* 0D09A4 7F09BE74 3C088008 */ lui $t0, %hi(dword_CODE_bss_8007A0E8) -/* 0D09A8 7F09BE78 3C0B8008 */ lui $t3, %hi(word_CODE_bss_8007A0F0) -/* 0D09AC 7F09BE7C 3C068008 */ lui $a2, %hi(dword_CODE_bss_8007A0D4+2) -/* 0D09B0 7F09BE80 8D08A0E8 */ lw $t0, %lo(dword_CODE_bss_8007A0E8)($t0) -/* 0D09B4 7F09BE84 256BA0F0 */ addiu $t3, %lo(word_CODE_bss_8007A0F0) # addiu $t3, $t3, -0x5f10 -/* 0D09B8 7F09BE88 1000000A */ b .L7F09BEB4 -/* 0D09BC 7F09BE8C 84C6A0D6 */ lh $a2, %lo(dword_CODE_bss_8007A0D4+2)($a2) -.L7F09BE90: -/* 0D09C0 7F09BE90 3C088008 */ lui $t0, %hi(dword_CODE_bss_8007A0EC) -/* 0D09C4 7F09BE94 3C0B8008 */ lui $t3, %hi(word_CODE_bss_8007A0F2) -/* 0D09C8 7F09BE98 3C068008 */ lui $a2, %hi(dword_CODE_bss_8007A0DC+0x2) -/* 0D09CC 7F09BE9C 8D08A0EC */ lw $t0, %lo(dword_CODE_bss_8007A0EC)($t0) -/* 0D09D0 7F09BEA0 256BA0F2 */ addiu $t3, %lo(word_CODE_bss_8007A0F2) # addiu $t3, $t3, -0x5f0e -/* 0D09D4 7F09BEA4 10000003 */ b .L7F09BEB4 -/* 0D09D8 7F09BEA8 84C6A0DE */ lh $a2, %lo(dword_CODE_bss_8007A0DC+0x2)($a2) -.L7F09BEAC: -/* 0D09DC 7F09BEAC 10000060 */ b .L7F09C030 -/* 0D09E0 7F09BEB0 00001025 */ move $v0, $zero -.L7F09BEB4: -/* 0D09E4 7F09BEB4 00001825 */ move $v1, $zero -/* 0D09E8 7F09BEB8 00001025 */ move $v0, $zero -/* 0D09EC 7F09BEBC 00002825 */ move $a1, $zero -/* 0D09F0 7F09BEC0 24090014 */ li $t1, 20 -/* 0D09F4 7F09BEC4 2407FFFF */ li $a3, -1 -.L7F09BEC8: -/* 0D09F8 7F09BEC8 00A90019 */ multu $a1, $t1 -/* 0D09FC 7F09BECC 00007012 */ mflo $t6 -/* 0D0A00 7F09BED0 010E2021 */ addu $a0, $t0, $t6 -/* 0D0A04 7F09BED4 848F000E */ lh $t7, 0xe($a0) -/* 0D0A08 7F09BED8 55E00008 */ bnezl $t7, .L7F09BEFC -/* 0D0A0C 7F09BEDC 84850010 */ lh $a1, 0x10($a0) -/* 0D0A10 7F09BEE0 8498000C */ lh $t8, 0xc($a0) -/* 0D0A14 7F09BEE4 0310082A */ slt $at, $t8, $s0 -/* 0D0A18 7F09BEE8 54200004 */ bnezl $at, .L7F09BEFC -/* 0D0A1C 7F09BEEC 84850010 */ lh $a1, 0x10($a0) -/* 0D0A20 7F09BEF0 1000000B */ b .L7F09BF20 -/* 0D0A24 7F09BEF4 24030001 */ li $v1, 1 -/* 0D0A28 7F09BEF8 84850010 */ lh $a1, 0x10($a0) -.L7F09BEFC: -/* 0D0A2C 7F09BEFC 24420001 */ addiu $v0, $v0, 1 -/* 0D0A30 7F09BF00 00C2082A */ slt $at, $a2, $v0 -/* 0D0A34 7F09BF04 50A70004 */ beql $a1, $a3, .L7F09BF18 -/* 0D0A38 7F09BF08 00071C00 */ sll $v1, $a3, 0x10 -/* 0D0A3C 7F09BF0C 10200004 */ beqz $at, .L7F09BF20 -/* 0D0A40 7F09BF10 00000000 */ nop -/* 0D0A44 7F09BF14 00071C00 */ sll $v1, $a3, 0x10 -.L7F09BF18: -/* 0D0A48 7F09BF18 0003CC03 */ sra $t9, $v1, 0x10 -/* 0D0A4C 7F09BF1C 03201825 */ move $v1, $t9 -.L7F09BF20: -/* 0D0A50 7F09BF20 1060FFE9 */ beqz $v1, .L7F09BEC8 -/* 0D0A54 7F09BF24 00000000 */ nop -/* 0D0A58 7F09BF28 00C2082A */ slt $at, $a2, $v0 -/* 0D0A5C 7F09BF2C 50200008 */ beql $at, $zero, .L7F09BF50 -/* 0D0A60 7F09BF30 24010001 */ li $at, 1 -/* 0D0A64 7F09BF34 0FC26DEA */ jal sub_GAME_7F09B7A8 -/* 0D0A68 7F09BF38 00000000 */ nop -/* 0D0A6C 7F09BF3C 0FC26DF9 */ jal sub_GAME_7F09B7E4 -/* 0D0A70 7F09BF40 00000000 */ nop -/* 0D0A74 7F09BF44 1000003A */ b .L7F09C030 -/* 0D0A78 7F09BF48 00001025 */ move $v0, $zero -/* 0D0A7C 7F09BF4C 24010001 */ li $at, 1 -.L7F09BF50: -/* 0D0A80 7F09BF50 14610037 */ bne $v1, $at, .L7F09C030 -/* 0D0A84 7F09BF54 00001025 */ move $v0, $zero -/* 0D0A88 7F09BF58 00A90019 */ multu $a1, $t1 -/* 0D0A8C 7F09BF5C 8FAE0028 */ lw $t6, 0x28($sp) -/* 0D0A90 7F09BF60 00006025 */ move $t4, $zero -/* 0D0A94 7F09BF64 00006812 */ mflo $t5 -/* 0D0A98 7F09BF68 010D2021 */ addu $a0, $t0, $t5 -/* 0D0A9C 7F09BF6C 8498000E */ lh $t8, 0xe($a0) -/* 0D0AA0 7F09BF70 848A000C */ lh $t2, 0xc($a0) -/* 0D0AA4 7F09BF74 AC8E0004 */ sw $t6, 4($a0) -/* 0D0AA8 7F09BF78 8FAF002C */ lw $t7, 0x2c($sp) -/* 0D0AAC 7F09BF7C 27190001 */ addiu $t9, $t8, 1 -/* 0D0AB0 7F09BF80 A499000E */ sh $t9, 0xe($a0) -/* 0D0AB4 7F09BF84 1150001F */ beq $t2, $s0, .L7F09C004 -/* 0D0AB8 7F09BF88 AC8F0008 */ sw $t7, 8($a0) -/* 0D0ABC 7F09BF8C 18C0001D */ blez $a2, .L7F09C004 -/* 0D0AC0 7F09BF90 00001825 */ move $v1, $zero -/* 0D0AC4 7F09BF94 01001025 */ move $v0, $t0 -.L7F09BF98: -/* 0D0AC8 7F09BF98 844D000E */ lh $t5, 0xe($v0) -/* 0D0ACC 7F09BF9C 54ED0017 */ bnel $a3, $t5, .L7F09BFFC -/* 0D0AD0 7F09BFA0 24630001 */ addiu $v1, $v1, 1 -/* 0D0AD4 7F09BFA4 8C8E0000 */ lw $t6, ($a0) -/* 0D0AD8 7F09BFA8 A490000C */ sh $s0, 0xc($a0) -/* 0D0ADC 7F09BFAC 00107900 */ sll $t7, $s0, 4 -/* 0D0AE0 7F09BFB0 0150C823 */ subu $t9, $t2, $s0 -/* 0D0AE4 7F09BFB4 01CFC021 */ addu $t8, $t6, $t7 -/* 0D0AE8 7F09BFB8 AC580000 */ sw $t8, ($v0) -/* 0D0AEC 7F09BFBC A459000C */ sh $t9, 0xc($v0) -/* 0D0AF0 7F09BFC0 A440000E */ sh $zero, 0xe($v0) -/* 0D0AF4 7F09BFC4 A4450012 */ sh $a1, 0x12($v0) -/* 0D0AF8 7F09BFC8 848D0010 */ lh $t5, 0x10($a0) -/* 0D0AFC 7F09BFCC 240C0001 */ li $t4, 1 -/* 0D0B00 7F09BFD0 A44D0010 */ sh $t5, 0x10($v0) -/* 0D0B04 7F09BFD4 84820010 */ lh $v0, 0x10($a0) -/* 0D0B08 7F09BFD8 04400005 */ bltz $v0, .L7F09BFF0 -/* 0D0B0C 7F09BFDC 00000000 */ nop -/* 0D0B10 7F09BFE0 00490019 */ multu $v0, $t1 -/* 0D0B14 7F09BFE4 00007012 */ mflo $t6 -/* 0D0B18 7F09BFE8 010E7821 */ addu $t7, $t0, $t6 -/* 0D0B1C 7F09BFEC A5E30012 */ sh $v1, 0x12($t7) -.L7F09BFF0: -/* 0D0B20 7F09BFF0 10000004 */ b .L7F09C004 -/* 0D0B24 7F09BFF4 A4830010 */ sh $v1, 0x10($a0) -/* 0D0B28 7F09BFF8 24630001 */ addiu $v1, $v1, 1 -.L7F09BFFC: -/* 0D0B2C 7F09BFFC 1466FFE6 */ bne $v1, $a2, .L7F09BF98 -/* 0D0B30 7F09C000 24420014 */ addiu $v0, $v0, 0x14 -.L7F09C004: -/* 0D0B34 7F09C004 51800006 */ beql $t4, $zero, .L7F09C020 -/* 0D0B38 7F09C008 856D0000 */ lh $t5, ($t3) -/* 0D0B3C 7F09C00C 85780000 */ lh $t8, ($t3) -/* 0D0B40 7F09C010 0310C823 */ subu $t9, $t8, $s0 -/* 0D0B44 7F09C014 10000004 */ b .L7F09C028 -/* 0D0B48 7F09C018 A5790000 */ sh $t9, ($t3) -/* 0D0B4C 7F09C01C 856D0000 */ lh $t5, ($t3) -.L7F09C020: -/* 0D0B50 7F09C020 01AA7023 */ subu $t6, $t5, $t2 -/* 0D0B54 7F09C024 A56E0000 */ sh $t6, ($t3) -.L7F09C028: -/* 0D0B58 7F09C028 10000001 */ b .L7F09C030 -/* 0D0B5C 7F09C02C 8C820000 */ lw $v0, ($a0) -.L7F09C030: -/* 0D0B60 7F09C030 8FBF001C */ lw $ra, 0x1c($sp) -/* 0D0B64 7F09C034 8FB00018 */ lw $s0, 0x18($sp) -/* 0D0B68 7F09C038 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0D0B6C 7F09C03C 03E00008 */ jr $ra -/* 0D0B70 7F09C040 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F09C044(Vertex* arg0) { - -} -#else -void sub_GAME_7F09C044(Vertex* arg0); - -GLOBAL_ASM( -.text -glabel sub_GAME_7F09C044 -/* 0D0B74 7F09C044 3C028008 */ lui $v0, %hi(dword_CODE_bss_8007A0E0) -/* 0D0B78 7F09C048 8C42A0E0 */ lw $v0, %lo(dword_CODE_bss_8007A0E0)($v0) -/* 0D0B7C 7F09C04C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0D0B80 7F09C050 AFB00018 */ sw $s0, 0x18($sp) -/* 0D0B84 7F09C054 0082082B */ sltu $at, $a0, $v0 -/* 0D0B88 7F09C058 00808025 */ move $s0, $a0 -/* 0D0B8C 7F09C05C 1420000D */ bnez $at, .L7F09C094 -/* 0D0B90 7F09C060 AFBF001C */ sw $ra, 0x1c($sp) -/* 0D0B94 7F09C064 3C0E8008 */ lui $t6, %hi(dword_CODE_bss_8007A0D0) -/* 0D0B98 7F09C068 8DCEA0D0 */ lw $t6, %lo(dword_CODE_bss_8007A0D0)($t6) -/* 0D0B9C 7F09C06C 3C0A8008 */ lui $t2, %hi(word_CODE_bss_8007A0F0) -/* 0D0BA0 7F09C070 3C078008 */ lui $a3, %hi(dword_CODE_bss_8007A0E8) -/* 0D0BA4 7F09C074 25CFFFFF */ addiu $t7, $t6, -1 -/* 0D0BA8 7F09C078 000FC100 */ sll $t8, $t7, 4 -/* 0D0BAC 7F09C07C 0302C821 */ addu $t9, $t8, $v0 -/* 0D0BB0 7F09C080 0324082B */ sltu $at, $t9, $a0 -/* 0D0BB4 7F09C084 14200003 */ bnez $at, .L7F09C094 -/* 0D0BB8 7F09C088 254AA0F0 */ addiu $t2, %lo(word_CODE_bss_8007A0F0) # addiu $t2, $t2, -0x5f10 -/* 0D0BBC 7F09C08C 10000018 */ b .L7F09C0F0 -/* 0D0BC0 7F09C090 8CE7A0E8 */ lw $a3, %lo(dword_CODE_bss_8007A0E8)($a3) -.L7F09C094: -/* 0D0BC4 7F09C094 3C028008 */ lui $v0, %hi(dword_CODE_bss_8007A0E4) -/* 0D0BC8 7F09C098 8C42A0E4 */ lw $v0, %lo(dword_CODE_bss_8007A0E4)($v0) -/* 0D0BCC 7F09C09C 3C0B8008 */ lui $t3, %hi(dword_CODE_bss_8007A0D8) -/* 0D0BD0 7F09C0A0 0202082B */ sltu $at, $s0, $v0 -/* 0D0BD4 7F09C0A4 1420000C */ bnez $at, .L7F09C0D8 -/* 0D0BD8 7F09C0A8 00000000 */ nop -/* 0D0BDC 7F09C0AC 8D6BA0D8 */ lw $t3, %lo(dword_CODE_bss_8007A0D8)($t3) -/* 0D0BE0 7F09C0B0 3C0A8008 */ lui $t2, %hi(word_CODE_bss_8007A0F2) -/* 0D0BE4 7F09C0B4 3C078008 */ lui $a3, %hi(dword_CODE_bss_8007A0EC) -/* 0D0BE8 7F09C0B8 256CFFFF */ addiu $t4, $t3, -1 -/* 0D0BEC 7F09C0BC 000C6900 */ sll $t5, $t4, 4 -/* 0D0BF0 7F09C0C0 01A27021 */ addu $t6, $t5, $v0 -/* 0D0BF4 7F09C0C4 01D0082B */ sltu $at, $t6, $s0 -/* 0D0BF8 7F09C0C8 14200003 */ bnez $at, .L7F09C0D8 -/* 0D0BFC 7F09C0CC 254AA0F2 */ addiu $t2, %lo(word_CODE_bss_8007A0F2) # addiu $t2, $t2, -0x5f0e -/* 0D0C00 7F09C0D0 10000007 */ b .L7F09C0F0 -/* 0D0C04 7F09C0D4 8CE7A0EC */ lw $a3, %lo(dword_CODE_bss_8007A0EC)($a3) -.L7F09C0D8: -/* 0D0C08 7F09C0D8 0FC26DEA */ jal sub_GAME_7F09B7A8 -/* 0D0C0C 7F09C0DC 00000000 */ nop -/* 0D0C10 7F09C0E0 0FC26DF9 */ jal sub_GAME_7F09B7E4 -/* 0D0C14 7F09C0E4 00000000 */ nop -/* 0D0C18 7F09C0E8 10000053 */ b .L7F09C238 -/* 0D0C1C 7F09C0EC 8FBF001C */ lw $ra, 0x1c($sp) -.L7F09C0F0: -/* 0D0C20 7F09C0F0 00002825 */ move $a1, $zero -/* 0D0C24 7F09C0F4 00004025 */ move $t0, $zero -/* 0D0C28 7F09C0F8 2409FFFF */ li $t1, -1 -/* 0D0C2C 7F09C0FC 24060014 */ li $a2, 20 -.L7F09C100: -/* 0D0C30 7F09C100 00A60019 */ multu $a1, $a2 -/* 0D0C34 7F09C104 00007812 */ mflo $t7 -/* 0D0C38 7F09C108 00EF2021 */ addu $a0, $a3, $t7 -/* 0D0C3C 7F09C10C 8C980000 */ lw $t8, ($a0) -/* 0D0C40 7F09C110 56180043 */ bnel $s0, $t8, .L7F09C220 -/* 0D0C44 7F09C114 84850010 */ lh $a1, 0x10($a0) -/* 0D0C48 7F09C118 8482000E */ lh $v0, 0xe($a0) -/* 0D0C4C 7F09C11C 24080001 */ li $t0, 1 -/* 0D0C50 7F09C120 2459FFFF */ addiu $t9, $v0, -1 -/* 0D0C54 7F09C124 A499000E */ sh $t9, 0xe($a0) -/* 0D0C58 7F09C128 848B000E */ lh $t3, 0xe($a0) -/* 0D0C5C 7F09C12C 1560003F */ bnez $t3, .L7F09C22C -/* 0D0C60 7F09C130 00000000 */ nop -/* 0D0C64 7F09C134 854C0000 */ lh $t4, ($t2) -/* 0D0C68 7F09C138 848D000C */ lh $t5, 0xc($a0) -/* 0D0C6C 7F09C13C 018D7021 */ addu $t6, $t4, $t5 -/* 0D0C70 7F09C140 A54E0000 */ sh $t6, ($t2) -/* 0D0C74 7F09C144 84830010 */ lh $v1, 0x10($a0) -/* 0D0C78 7F09C148 04620016 */ bltzl $v1, .L7F09C1A4 -/* 0D0C7C 7F09C14C 84830012 */ lh $v1, 0x12($a0) -/* 0D0C80 7F09C150 00660019 */ multu $v1, $a2 -/* 0D0C84 7F09C154 00007812 */ mflo $t7 -/* 0D0C88 7F09C158 00EF1021 */ addu $v0, $a3, $t7 -/* 0D0C8C 7F09C15C 8458000E */ lh $t8, 0xe($v0) -/* 0D0C90 7F09C160 57000010 */ bnezl $t8, .L7F09C1A4 -/* 0D0C94 7F09C164 84830012 */ lh $v1, 0x12($a0) -/* 0D0C98 7F09C168 8499000C */ lh $t9, 0xc($a0) -/* 0D0C9C 7F09C16C 844B000C */ lh $t3, 0xc($v0) -/* 0D0CA0 7F09C170 032B6021 */ addu $t4, $t9, $t3 -/* 0D0CA4 7F09C174 A48C000C */ sh $t4, 0xc($a0) -/* 0D0CA8 7F09C178 844D0010 */ lh $t5, 0x10($v0) -/* 0D0CAC 7F09C17C A48D0010 */ sh $t5, 0x10($a0) -/* 0D0CB0 7F09C180 A449000E */ sh $t1, 0xe($v0) -/* 0D0CB4 7F09C184 84830010 */ lh $v1, 0x10($a0) -/* 0D0CB8 7F09C188 04620006 */ bltzl $v1, .L7F09C1A4 -/* 0D0CBC 7F09C18C 84830012 */ lh $v1, 0x12($a0) -/* 0D0CC0 7F09C190 00660019 */ multu $v1, $a2 -/* 0D0CC4 7F09C194 00007012 */ mflo $t6 -/* 0D0CC8 7F09C198 00EE7821 */ addu $t7, $a3, $t6 -/* 0D0CCC 7F09C19C A5E50012 */ sh $a1, 0x12($t7) -/* 0D0CD0 7F09C1A0 84830012 */ lh $v1, 0x12($a0) -.L7F09C1A4: -/* 0D0CD4 7F09C1A4 04600021 */ bltz $v1, .L7F09C22C -/* 0D0CD8 7F09C1A8 00000000 */ nop -/* 0D0CDC 7F09C1AC 00660019 */ multu $v1, $a2 -/* 0D0CE0 7F09C1B0 0000C012 */ mflo $t8 -/* 0D0CE4 7F09C1B4 00F81021 */ addu $v0, $a3, $t8 -/* 0D0CE8 7F09C1B8 8459000E */ lh $t9, 0xe($v0) -/* 0D0CEC 7F09C1BC 0003C400 */ sll $t8, $v1, 0x10 -/* 0D0CF0 7F09C1C0 1720001A */ bnez $t9, .L7F09C22C -/* 0D0CF4 7F09C1C4 0018CC03 */ sra $t9, $t8, 0x10 -/* 0D0CF8 7F09C1C8 03260019 */ multu $t9, $a2 -/* 0D0CFC 7F09C1CC 844B000C */ lh $t3, 0xc($v0) -/* 0D0D00 7F09C1D0 848C000C */ lh $t4, 0xc($a0) -/* 0D0D04 7F09C1D4 00032C00 */ sll $a1, $v1, 0x10 -/* 0D0D08 7F09C1D8 00057C03 */ sra $t7, $a1, 0x10 -/* 0D0D0C 7F09C1DC 016C6821 */ addu $t5, $t3, $t4 -/* 0D0D10 7F09C1E0 A44D000C */ sh $t5, 0xc($v0) -/* 0D0D14 7F09C1E4 848E0010 */ lh $t6, 0x10($a0) -/* 0D0D18 7F09C1E8 01E02825 */ move $a1, $t7 -/* 0D0D1C 7F09C1EC 00005812 */ mflo $t3 -/* 0D0D20 7F09C1F0 A44E0010 */ sh $t6, 0x10($v0) -/* 0D0D24 7F09C1F4 A489000E */ sh $t1, 0xe($a0) -/* 0D0D28 7F09C1F8 00EB6021 */ addu $t4, $a3, $t3 -/* 0D0D2C 7F09C1FC 85830010 */ lh $v1, 0x10($t4) -/* 0D0D30 7F09C200 0460000A */ bltz $v1, .L7F09C22C -/* 0D0D34 7F09C204 00000000 */ nop -/* 0D0D38 7F09C208 00660019 */ multu $v1, $a2 -/* 0D0D3C 7F09C20C 00006812 */ mflo $t5 -/* 0D0D40 7F09C210 00ED7021 */ addu $t6, $a3, $t5 -/* 0D0D44 7F09C214 10000005 */ b .L7F09C22C -/* 0D0D48 7F09C218 A5CF0012 */ sh $t7, 0x12($t6) -/* 0D0D4C 7F09C21C 84850010 */ lh $a1, 0x10($a0) -.L7F09C220: -/* 0D0D50 7F09C220 14A90002 */ bne $a1, $t1, .L7F09C22C -/* 0D0D54 7F09C224 00000000 */ nop -/* 0D0D58 7F09C228 24080001 */ li $t0, 1 -.L7F09C22C: -/* 0D0D5C 7F09C22C 1100FFB4 */ beqz $t0, .L7F09C100 -/* 0D0D60 7F09C230 00000000 */ nop -/* 0D0D64 7F09C234 8FBF001C */ lw $ra, 0x1c($sp) -.L7F09C238: -/* 0D0D68 7F09C238 8FB00018 */ lw $s0, 0x18($sp) -/* 0D0D6C 7F09C23C 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0D0D70 7F09C240 03E00008 */ jr $ra -/* 0D0D74 7F09C244 00000000 */ nop -) -#endif - - - diff --git a/src/game/unk_09B7A0.h b/src/game/unk_09B7A0.h deleted file mode 100644 index cfa103d7..00000000 --- a/src/game/unk_09B7A0.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _UNK_09B7A0_H_ -#define _UNK_09B7A0_H_ -#include - -void sub_GAME_7F09B820(void); -void sub_GAME_7F09BBBC(void); - -#endif diff --git a/src/game/viewport.c b/src/game/viewport.c index afe89361..cd8b5c11 100644 --- a/src/game/viewport.c +++ b/src/game/viewport.c @@ -21,6 +21,7 @@ void zbufDeallocate(void) { z_buffer = 0; } + /* * Address: 0x7f0d287c */ @@ -49,6 +50,7 @@ void zbufAllocate(void) z_buffer = ALIGN64_V1(z_buffer); } + /* * Address: 0x7f0d2938 */ @@ -58,6 +60,7 @@ void zbufSetBuffer(s32 buffer, s32 width, s32 height) { z_buffer_height = height; } + /* * Address: 0x7f0d2954 */ @@ -79,6 +82,7 @@ Gfx *zbufInit(Gfx *gdl) { return gdl; } + /* * Address: 0x7f0d2a08 */ diff --git a/src/game/vtxstore.c b/src/game/vtxstore.c new file mode 100644 index 00000000..fca37a65 --- /dev/null +++ b/src/game/vtxstore.c @@ -0,0 +1,428 @@ +#include +#include +#include "bondtypes.h" +#include "vtxstore.h" +#include "propobj.h" +#include "model.h" + +// unsure if these structs are defined as something else, elsewhere +struct unk_09B7A0_struct_parent { + Vertex* unk00; + s32 unk04; + s32 unk08; + s16 unk0C; + s16 unk0E; + s16 unk10; + s16 unk12; +}; + +// bss +//CODE.bss:8007A0D0 +s32 dword_CODE_bss_8007A0D0; // item count for dword_CODE_bss_8007A0E0 +//CODE.bss:8007A0D4 +s32 dword_CODE_bss_8007A0D4; // item count for dword_CODE_bss_8007A0E8 +//CODE.bss:8007A0D8 +s32 dword_CODE_bss_8007A0D8; // item count for dword_CODE_bss_8007A0E4 +//CODE.bss:8007A0DC +s32 dword_CODE_bss_8007A0DC; // item count for dword_CODE_bss_8007A0EC +//CODE.bss:8007A0E0 +Vertex* dword_CODE_bss_8007A0E0; // array ( uses dword_CODE_bss_8007A0D0 as alloc count, item size 0x10 ) +//CODE.bss:8007A0E4 +Vertex* dword_CODE_bss_8007A0E4; // array ( uses dword_CODE_bss_8007A0D8 as alloc count, item size 0x10 ) +//CODE.bss:8007A0E8 +struct unk_09B7A0_struct_parent* dword_CODE_bss_8007A0E8; // array ( uses dword_CODE_bss_8007A0D4 as alloc count, item size 0x14 ) +//CODE.bss:8007A0EC +struct unk_09B7A0_struct_parent* dword_CODE_bss_8007A0EC; // array ( uses dword_CODE_bss_8007A0DC as alloc count, item size 0x14 ) +//CODE.bss:8007A0F0 +s16 word_CODE_bss_8007A0F0; +//CODE.bss:8007A0F2 +s16 word_CODE_bss_8007A0F2; + +void null_init_main_1(void) +{ + return; +} + + +void sub_GAME_7F09B7A8(void) +{ + s32 i; + for (i = 0; i < dword_CODE_bss_8007A0D4; i++) + { + if (dword_CODE_bss_8007A0E8[i].unk00); + } +} + +void sub_GAME_7F09B7E4(void) +{ + s32 i; + for (i = 0; i < dword_CODE_bss_8007A0DC; i++) + { + if (dword_CODE_bss_8007A0EC[i].unk00); + } +} + +/* +* Address: 7F09B820( +* PD name: vtxstore_reset +*/ + +void sub_GAME_7F09B820(void) +{ + u32 tmp; + s32 stage; + s32 i; + + tmp = 0x5DC; + + if (getPlayerCount() >= 2) + { + dword_CODE_bss_8007A0D0 = 0xBB8; + dword_CODE_bss_8007A0D4 = 0x50; + dword_CODE_bss_8007A0D8 = 0x1F4; + dword_CODE_bss_8007A0DC = 0x14; + } + else + { + stage = lvlGetCurrentStageToLoad(); + if ((stage != 0x1E) && (stage != 0x1D)) + { + dword_CODE_bss_8007A0D0 = 0x1F4; + dword_CODE_bss_8007A0D4 = 0x14; + dword_CODE_bss_8007A0D8 = tmp; + dword_CODE_bss_8007A0DC = 0x28; + } + else + { + dword_CODE_bss_8007A0D0 = 0x1F4; + dword_CODE_bss_8007A0D4 = 0x14; + dword_CODE_bss_8007A0D8 = 0x1F4; + dword_CODE_bss_8007A0DC = 0x14; + } + } + + tmp = 0x14; + dword_CODE_bss_8007A0E8 = mempAllocBytesInBank(dword_CODE_bss_8007A0D4 * tmp, MEMPOOL_STAGE); + dword_CODE_bss_8007A0E0 = mempAllocBytesInBank(dword_CODE_bss_8007A0D0 * 0x10, MEMPOOL_STAGE); + dword_CODE_bss_8007A0EC = mempAllocBytesInBank(dword_CODE_bss_8007A0DC * tmp, MEMPOOL_STAGE); + dword_CODE_bss_8007A0E4 = mempAllocBytesInBank(dword_CODE_bss_8007A0D8 * 0x10, MEMPOOL_STAGE); + + word_CODE_bss_8007A0F0 = (s16) dword_CODE_bss_8007A0D0; + dword_CODE_bss_8007A0E8->unk00 = dword_CODE_bss_8007A0E0; + dword_CODE_bss_8007A0E8->unk0C = (s16) dword_CODE_bss_8007A0D0; + dword_CODE_bss_8007A0E8->unk0E = 0; + dword_CODE_bss_8007A0E8->unk10 = -1; + dword_CODE_bss_8007A0E8->unk12 = -1; + + for (i = 1; i < dword_CODE_bss_8007A0D4; i++) + { + dword_CODE_bss_8007A0E8[i].unk0E = -1; + } + + word_CODE_bss_8007A0F2 = (s16) dword_CODE_bss_8007A0D8; + dword_CODE_bss_8007A0EC->unk00 = dword_CODE_bss_8007A0E4; + dword_CODE_bss_8007A0EC->unk0C = (s16) dword_CODE_bss_8007A0D8; + dword_CODE_bss_8007A0EC->unk0E = 0; + dword_CODE_bss_8007A0EC->unk10 = -1; + dword_CODE_bss_8007A0EC->unk12 = -1; + + for (i = 1; i < dword_CODE_bss_8007A0DC; i++) + { + dword_CODE_bss_8007A0EC[i].unk0E = -1; + } +} + + +/* +* Address: 0x7F09BAC4 +* +* PD name: vtxstore_fix_refs +* PD description: +* Search all props and their model data for references to the `find` address +* and replace it with the `replacement` address. +*/ +void sub_GAME_7F09BAC4(s32 find, s32 replacement) { + PropRecord* var_s1; + ChrRecord* var_v0; + Model* temp_a0; + s32* temp_v0_2; + ModelNode* var_a1; + ModelFileHeader* var_v1; + s32 val; + + var_s1 = chrpropGetActiveTail(); + while (var_s1 != NULL) { + if (var_s1->type == 1) { + var_v0 = var_s1->chr; + var_v1 = ((Model*)var_v0->chrflags)->obj; + var_a1 = var_v1->RootNode; + while (var_a1 != NULL) { + val = var_a1->Opcode & 0xFF; + if (val == 0x18) { + temp_v0_2 = modelGetNodeRwData(var_v0->chrflags, var_a1); + if (find == *temp_v0_2) { + *temp_v0_2 = replacement; + } + break; + } else { + if (var_a1->Child != NULL) { + var_a1 = var_a1->Child; + } else { + while (var_a1 != NULL) { + if (var_a1->Next != NULL) { + var_a1 = var_a1->Next; + break; + } + var_a1 = var_a1->Parent; + } + } + } + } + } + + var_s1 = var_s1->prev; + } +} + + + + + +/* +* Address: 7F09BBBC +* PD name: vtxstore_tick +* Description: Merge duplicate batches. May free memory. +*/ +void sub_GAME_7F09BBBC(void) +{ + s16 temp_s2; + s16 var_fp; + s16 var_s2; + s32 stop; + s32 var_a1; + s32 var_s6; + + var_s6 = 0; + + if (word_CODE_bss_8007A0F2 < ((s32)dword_CODE_bss_8007A0D8 >> 2)) + { + for (var_fp = 0; var_fp < dword_CODE_bss_8007A0DC - 1; var_fp++) { + if (dword_CODE_bss_8007A0EC[var_fp].unk0E > 0) + { + for (var_s2 = var_fp + 1; var_s2 < dword_CODE_bss_8007A0DC; var_s2++) { + if ((dword_CODE_bss_8007A0EC[var_s2].unk0E > 0) && + (dword_CODE_bss_8007A0EC[var_fp].unk04 == dword_CODE_bss_8007A0EC[var_s2].unk04) && + (dword_CODE_bss_8007A0EC[var_fp].unk08 == dword_CODE_bss_8007A0EC[var_s2].unk08)) + { + sub_GAME_7F09BAC4((s32)dword_CODE_bss_8007A0EC[var_s2].unk00, (s32)dword_CODE_bss_8007A0EC[var_fp].unk00); + var_s6 = 1; + + dword_CODE_bss_8007A0EC[var_fp].unk0E += dword_CODE_bss_8007A0EC[var_s2].unk0E; + dword_CODE_bss_8007A0EC[var_s2].unk0E = 0; + + word_CODE_bss_8007A0F2 += dword_CODE_bss_8007A0EC[var_s2].unk0C; + } + } + } + } + } + + if (var_s6 != 0) { + stop = 0; + var_fp = 0; + + while (stop == 0) { + var_s2 = dword_CODE_bss_8007A0EC[var_fp].unk10; + + if (var_s2 >= 0) { + if (dword_CODE_bss_8007A0EC[var_fp].unk0E == 0) { + if (dword_CODE_bss_8007A0EC[var_s2].unk0E == 0) { + dword_CODE_bss_8007A0EC[var_fp].unk0C += dword_CODE_bss_8007A0EC[var_s2].unk0C; + dword_CODE_bss_8007A0EC[var_s2].unk0E = -1; + var_s2 = dword_CODE_bss_8007A0EC[var_s2].unk10; + dword_CODE_bss_8007A0EC[var_fp].unk10 = var_s2; + + if (var_s2 >= 0) { + dword_CODE_bss_8007A0EC[var_s2].unk12 = var_fp; + } + continue; + } + } + var_fp = var_s2; + } else { + stop = 1; + } + } + } + + if (word_CODE_bss_8007A0F2 < ((s32)dword_CODE_bss_8007A0D8 >> 2)) { + sub_GAME_7F056690(); + } +} + + +/* +* Address: 7F09BE4C +* PD name: vtxstore_allocate +* Description: Allocation for batches within the storage space +*/ +s32 vtxstore_allocate(s32 arg0, s32 type, s32 arg2, s32 arg3) +{ + s16* var_t3; + s16 temp_t2; + s32 var_a1; + s32 var_a2; + s32 var_t4; + s32 var_v0; + s32 var_v1; + s16 var_v1_2; + struct unk_09B7A0_struct_parent* var_t0; + + switch (type) { + case 0xCCCC: + var_t0 = dword_CODE_bss_8007A0E8; + var_t3 = &word_CODE_bss_8007A0F0; + var_a2 = ((s16 *)&dword_CODE_bss_8007A0D4)[1]; + break; + case 0xB0B: + var_t0 = dword_CODE_bss_8007A0EC; + var_t3 = &word_CODE_bss_8007A0F2; + var_a2 = ((s16 *)&dword_CODE_bss_8007A0DC)[1]; + break; + default: + return 0; + } + + var_v1_2 = 0; + var_v0 = 0; + var_a1 = 0; + + do { + if ((var_t0[var_a1].unk0E == 0) && (var_t0[var_a1].unk0C >= arg0)) { + var_v1_2 = 1; + } else { + var_a1 = var_t0[var_a1].unk10; + var_v0 += 1; + if ((var_a1 == -1) || (var_a2 < var_v0)) { + var_v1_2 = (s16)-1; + } + } + } while (var_v1_2 == 0); + if (var_a2 < var_v0) { + sub_GAME_7F09B7A8(); + sub_GAME_7F09B7E4(); + return 0; + } + // FAKE + if (var_v0) {} + if (var_v1_2 == 1) { + var_t4 = 0; + temp_t2 = var_t0[var_a1].unk0C; + var_t0[var_a1].unk04 = arg2; + var_t0[var_a1].unk08 = arg3; + var_t0[var_a1].unk0E++; + if (temp_t2 != arg0) { + for (var_v1 = 0; var_v1 < var_a2; var_v1++) { + if (var_t0[var_v1].unk0E == -1) { + var_t0[var_a1].unk0C = arg0; + var_t0[var_v1].unk00 = var_t0[var_a1].unk00 + arg0; + var_t0[var_v1].unk0C = temp_t2 - arg0; + var_t0[var_v1].unk0E = 0; + var_t0[var_v1].unk12 = var_a1; + var_t4 = 1; + var_t0[var_v1].unk10 = var_t0[var_a1].unk10; + if (var_t0[var_a1].unk10 >= 0) { + var_t0[var_t0[var_a1].unk10].unk12 = var_v1; + } + var_t0[var_a1].unk10 = var_v1; + break; + } + } + } + if (var_t4 != 0) { + *var_t3 -= arg0; + } else { + *var_t3 -= temp_t2; + } + return (s32)var_t0[var_a1].unk00; + } + return 0; +} + + +/* +* Address: 7F09C044 +* PD name: vtxstore_free (likely) +* Description: Either deforming a vertex or frees a vertex (deallocation) +*/ +void sub_GAME_7F09C044(Vertex* arg0) { + s16* var_t2; + struct unk_09B7A0_struct_parent* var_a3; + s16 var_a1; + s32 stop; + s32 var_v1; + + if ((arg0 >= dword_CODE_bss_8007A0E0) && + (arg0 <= dword_CODE_bss_8007A0E0 + (dword_CODE_bss_8007A0D0 - 1))) { + var_a3 = dword_CODE_bss_8007A0E8; + var_t2 = &word_CODE_bss_8007A0F0; + } else if ((arg0 >= dword_CODE_bss_8007A0E4) && + (arg0 <= dword_CODE_bss_8007A0E4 + (dword_CODE_bss_8007A0D8 - 1))) { + var_a3 = dword_CODE_bss_8007A0EC; + var_t2 = &word_CODE_bss_8007A0F2; + } else { + sub_GAME_7F09B7A8(); + sub_GAME_7F09B7E4(); + return; + } + + var_a1 = 0; + stop = 0; + + while (stop == 0) { + if (var_a3[var_a1].unk00 == arg0) { + stop = 1; + // FAKE + if (var_a3[var_a1].unk0E); + var_a3[var_a1].unk0E--; + if (var_a3[var_a1].unk0E == 0) { + *var_t2 += var_a3[var_a1].unk0C; + + // Merge with next free block + var_v1 = var_a3[var_a1].unk10; + if (var_v1 >= 0) { + if (var_a3[var_v1].unk0E == 0) { + var_a3[var_a1].unk0C += var_a3[var_v1].unk0C; + var_a3[var_a1].unk10 = var_a3[var_v1].unk10; + var_a3[var_v1].unk0E = -1; + var_v1 = var_a3[var_a1].unk10; + if (var_v1 >= 0) { + var_a3[var_v1].unk12 = var_a1; + } + } + } + + // Merge with prev free block + var_v1 = var_a3[var_a1].unk12; + if (var_v1 >= 0) { + if (var_a3[var_v1].unk0E == 0) { + var_a3[var_v1].unk0C += var_a3[var_a1].unk0C; + var_a3[var_v1].unk10 = var_a3[var_a1].unk10; + var_a3[var_a1].unk0E = -1; + var_a1 = var_v1; + var_v1 = var_a3[var_a1].unk10; + if (var_v1 >= 0) { + var_a3[var_v1].unk12 = var_a1; + } + } + } + } + } else { + var_a1 = var_a3[var_a1].unk10; + if (var_a1 == -1) { + stop = 1; + } + } + } +} + diff --git a/src/game/vtxstore.h b/src/game/vtxstore.h new file mode 100644 index 00000000..43432245 --- /dev/null +++ b/src/game/vtxstore.h @@ -0,0 +1,10 @@ +#ifndef _VTXSTORE_H_ +#define _VTXSTORE_H_ +#include + +void sub_GAME_7F09B820(void); +void sub_GAME_7F09BBBC(void); +s32 vtxstore_allocate(s32 arg0, s32 type, s32 arg2, s32 arg3); +void sub_GAME_7F09C044(Vertex* arg0); + +#endif diff --git a/src/joy.c b/src/joy.c index 3f6922de..6f3df064 100644 --- a/src/joy.c +++ b/src/joy.c @@ -117,8 +117,6 @@ u32 g_ContBadReadsStickY[MAXCONTROLLERS] = {0}; u32 g_ContBadReadsButtons[MAXCONTROLLERS] = {0}; u32 g_ContBadReadsButtonsPressed[MAXCONTROLLERS] = {0}; -s32 g_ContBadReadTimer60 = 0; // Static variable? - void joyInit(void) { s32 i; @@ -423,347 +421,114 @@ void joyConsumeSamplesWrapper(void) } } -#ifdef NONMATCHING -// Stack + Regalloc -// https://decomp.me/scratch/IOID3 97.27% + void joyPoll(void) { OSMesg msg; - - s32 padding[6]; - - static s32 count = 0; - s32 index; s8 i_s8; s32 i; + s32 index; + s32 padding[2]; // Check if there are any disable requests - if (osRecvMesg(&g_ContDisablePollSendMessageQueue, &msg, OS_MESG_NOBLOCK) == 0) + if (osRecvMesg(&g_ContDisablePollSendMessageQueue, &msg, 0) == 0) { if (g_ContBusy) { - osRecvMesg(&g_ContInputMessageQueue, &msg, OS_MESG_BLOCK); - g_ContBusy = FALSE; + osRecvMesg(&g_ContInputMessageQueue, &msg, 1); + g_ContBusy = 0; } - osSendMesg(&g_ContDisablePollReceiveMessageQueue, &msg, OS_MESG_NOBLOCK); + osSendMesg(&g_ContDisablePollReceiveMessageQueue, &msg, 0); g_ContPollDisableCount++; - return; } // Check if there are any enable requests - if (osRecvMesg(&g_ContEnablePollSendMessageQueue, &msg, OS_MESG_NOBLOCK) == 0) + if (osRecvMesg(&g_ContEnablePollSendMessageQueue, &msg, 0) == 0) { osContStartReadData(&g_ContInputMessageQueue); - g_ContBusy = TRUE; - osSendMesg(&g_ContEnablePollReceiveMessageQueue, &msg, OS_MESG_NOBLOCK); - + g_ContBusy = 1; + osSendMesg(&g_ContEnablePollReceiveMessageQueue, &msg, 0); g_ContPollDisableCount--; - return; } - if ((g_ContPollDisableCount == 0) && g_ContInitDone) + if (g_ContPollDisableCount) { - // Poll controller input from SI - if (osRecvMesg(&g_ContInputMessageQueue, &msg, OS_MESG_NOBLOCK) == 0) + return; + } + + // Poll controller input from SI + if (g_ContInitDone && osRecvMesg(&g_ContInputMessageQueue, &msg, 0) == 0) + { + static s32 count = 0; + + g_ContBusy = 0; + + index = (g_ContData[0].nextlast + 1) % 20; + + if (index == g_ContData[0].curstart) { - g_ContBusy = FALSE; - index = ((g_ContData[CONTDATA_REGULAR].nextlast + 1) % CONTSAMPLE_LEN); + index = g_ContData[0].nextlast; + } - if (index == g_ContData[CONTDATA_REGULAR].curstart) - { - index = g_ContData[CONTDATA_REGULAR].nextlast; - } + osContGetReadData(g_ContData[0].samples[index].pads); + g_ContData[0].nextlast = index; + g_ContData[0].nextsecondlast = (g_ContData[0].nextlast + 19) % 20; + g_ContCheckStatusTimer60++; - osContGetReadData(g_ContData[CONTDATA_REGULAR].samples[index].pads); - g_ContData[CONTDATA_REGULAR].nextlast = index; - g_ContData[CONTDATA_REGULAR].nextsecondlast = ((g_ContData[CONTDATA_REGULAR].nextlast + (CONTSAMPLE_LEN - 1)) % CONTSAMPLE_LEN); - g_ContCheckStatusTimer60++; + if ((g_ContCheckStatusTimer60 % 120) == 0) + { + joyCheckStatus(); + } - if ((g_ContCheckStatusTimer60 % 120) == 0) + for (i_s8 = 0; i_s8 < 4; i_s8++) + { + if (((g_ContData[0].samples[g_ContData[0].nextlast].pads[i_s8].errno == 0) && + (g_ContData[0].samples[g_ContData[0].nextsecondlast].pads[i_s8].errno != 0)) || + ((g_ContData[0].samples[g_ContData[0].nextlast].pads[i_s8].errno != 0) && + (g_ContData[0].samples[g_ContData[0].nextsecondlast].pads[i_s8].errno == 0))) { joyCheckStatus(); + break; } + } - for (i_s8 = 0; i_s8 < MAXCONTROLLERS; i_s8++) + joyRumblePakTick(); + osContStartReadData(&g_ContInputMessageQueue); + + g_ContBusy = 1; + count++; + + if (count >= 60) + { + for (i = 0; i < 4; i++) { - if (((g_ContData[CONTDATA_REGULAR].samples[g_ContData[CONTDATA_REGULAR].nextlast].pads[i_s8].errno == 0) && (g_ContData[CONTDATA_REGULAR].samples[g_ContData[CONTDATA_REGULAR].nextsecondlast].pads[i_s8].errno != 0)) || - ((g_ContData[CONTDATA_REGULAR].samples[g_ContData[CONTDATA_REGULAR].nextlast].pads[i_s8].errno != 0) && (g_ContData[CONTDATA_REGULAR].samples[g_ContData[CONTDATA_REGULAR].nextsecondlast].pads[i_s8].errno == 0))) + if (g_ContBadReadsStickX[i] != 0 + || g_ContBadReadsStickY[i] != 0 + || g_ContBadReadsButtons[i] != 0 + || g_ContBadReadsButtonsPressed[i] != 0) { - joyCheckStatus(); + // These empty checks are required for matching. + if (g_ContBadReadsStickX[i]); + if (g_ContBadReadsStickY[i]); + if (g_ContBadReadsButtons[i]); + if (g_ContBadReadsButtonsPressed[i]); - break; + g_ContBadReadsStickX[i] = 0; + g_ContBadReadsStickY[i] = 0; + g_ContBadReadsButtons[i] = 0; + g_ContBadReadsButtonsPressed[i] = 0; } } - joyRumblePakTick(); - osContStartReadData(&g_ContInputMessageQueue); - g_ContBusy = TRUE; - count++; - - if (count >= 60) - { - for (i = 0; i < MAXCONTROLLERS; i++) - { - if (g_ContBadReadsStickX[i] || g_ContBadReadsStickY[i] || g_ContBadReadsButtons[i] || g_ContBadReadsButtonsPressed[i]) - { - g_ContBadReadsStickX[i] = 0; - g_ContBadReadsStickY[i] = 0; - g_ContBadReadsButtons[i] = 0; - g_ContBadReadsButtonsPressed[i] = 0; - } - } - - count = 0; - } + count = 0; } } } -#else -void joyPoll(void); -GLOBAL_ASM( -.text -glabel joyPoll -/* 00C988 7000BD88 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 00C98C 7000BD8C AFBF0014 */ sw $ra, 0x14($sp) -/* 00C990 7000BD90 3C048006 */ lui $a0, %hi(g_ContDisablePollSendMessageQueue) -/* 00C994 7000BD94 24845370 */ addiu $a0, %lo(g_ContDisablePollSendMessageQueue) # addiu $a0, $a0, 0x5370 -/* 00C998 7000BD98 27A5004C */ addiu $a1, $sp, 0x4c -/* 00C99C 7000BD9C 0C003774 */ jal osRecvMesg -/* 00C9A0 7000BDA0 00003025 */ move $a2, $zero -/* 00C9A4 7000BDA4 14400015 */ bnez $v0, .L7000BDFC -/* 00C9A8 7000BDA8 3C0E8002 */ lui $t6, %hi(g_ContBusy) -/* 00C9AC 7000BDAC 8DCE68C8 */ lw $t6, %lo(g_ContBusy)($t6) -/* 00C9B0 7000BDB0 3C048006 */ lui $a0, %hi(g_ContInputMessageQueue) -/* 00C9B4 7000BDB4 24845350 */ addiu $a0, %lo(g_ContInputMessageQueue) # addiu $a0, $a0, 0x5350 -/* 00C9B8 7000BDB8 11C00005 */ beqz $t6, .L7000BDD0 -/* 00C9BC 7000BDBC 27A5004C */ addiu $a1, $sp, 0x4c -/* 00C9C0 7000BDC0 0C003774 */ jal osRecvMesg -/* 00C9C4 7000BDC4 24060001 */ li $a2, 1 -/* 00C9C8 7000BDC8 3C018002 */ lui $at, %hi(g_ContBusy) -/* 00C9CC 7000BDCC AC2068C8 */ sw $zero, %lo(g_ContBusy)($at) -.L7000BDD0: -/* 00C9D0 7000BDD0 3C048006 */ lui $a0, %hi(g_ContDisablePollReceiveMessageQueue) -/* 00C9D4 7000BDD4 24845390 */ addiu $a0, %lo(g_ContDisablePollReceiveMessageQueue) # addiu $a0, $a0, 0x5390 -/* 00C9D8 7000BDD8 27A5004C */ addiu $a1, $sp, 0x4c -/* 00C9DC 7000BDDC 0C0037C4 */ jal osSendMesg -/* 00C9E0 7000BDE0 00003025 */ move $a2, $zero -/* 00C9E4 7000BDE4 3C038002 */ lui $v1, %hi(g_ContPollDisableCount) -/* 00C9E8 7000BDE8 246368CC */ addiu $v1, %lo(g_ContPollDisableCount) # addiu $v1, $v1, 0x68cc -/* 00C9EC 7000BDEC 8C6F0000 */ lw $t7, ($v1) -/* 00C9F0 7000BDF0 25F80001 */ addiu $t8, $t7, 1 -/* 00C9F4 7000BDF4 100000B9 */ b .L7000C0DC -/* 00C9F8 7000BDF8 AC780000 */ sw $t8, ($v1) -.L7000BDFC: -/* 00C9FC 7000BDFC 3C048006 */ lui $a0, %hi(g_ContEnablePollSendMessageQueue) -/* 00CA00 7000BE00 248453B0 */ addiu $a0, %lo(g_ContEnablePollSendMessageQueue) # addiu $a0, $a0, 0x53b0 -/* 00CA04 7000BE04 27A5004C */ addiu $a1, $sp, 0x4c -/* 00CA08 7000BE08 0C003774 */ jal osRecvMesg -/* 00CA0C 7000BE0C 00003025 */ move $a2, $zero -/* 00CA10 7000BE10 14400011 */ bnez $v0, .L7000BE58 -/* 00CA14 7000BE14 3C048006 */ lui $a0, %hi(g_ContInputMessageQueue) -/* 00CA18 7000BE18 0C00535C */ jal osContStartReadData -/* 00CA1C 7000BE1C 24845350 */ addiu $a0, %lo(g_ContInputMessageQueue) # addiu $a0, $a0, 0x5350 -/* 00CA20 7000BE20 24190001 */ li $t9, 1 -/* 00CA24 7000BE24 3C018002 */ lui $at, %hi(g_ContBusy) -/* 00CA28 7000BE28 3C048006 */ lui $a0, %hi(g_ContEnablePollReceiveMessageQueue) -/* 00CA2C 7000BE2C AC3968C8 */ sw $t9, %lo(g_ContBusy)($at) -/* 00CA30 7000BE30 248453D0 */ addiu $a0, %lo(g_ContEnablePollReceiveMessageQueue) # addiu $a0, $a0, 0x53d0 -/* 00CA34 7000BE34 27A5004C */ addiu $a1, $sp, 0x4c -/* 00CA38 7000BE38 0C0037C4 */ jal osSendMesg -/* 00CA3C 7000BE3C 00003025 */ move $a2, $zero -/* 00CA40 7000BE40 3C038002 */ lui $v1, %hi(g_ContPollDisableCount) -/* 00CA44 7000BE44 246368CC */ addiu $v1, %lo(g_ContPollDisableCount) # addiu $v1, $v1, 0x68cc -/* 00CA48 7000BE48 8C6B0000 */ lw $t3, ($v1) -/* 00CA4C 7000BE4C 256CFFFF */ addiu $t4, $t3, -1 -/* 00CA50 7000BE50 100000A2 */ b .L7000C0DC -/* 00CA54 7000BE54 AC6C0000 */ sw $t4, ($v1) -.L7000BE58: -/* 00CA58 7000BE58 3C038002 */ lui $v1, %hi(g_ContPollDisableCount) -/* 00CA5C 7000BE5C 246368CC */ addiu $v1, %lo(g_ContPollDisableCount) # addiu $v1, $v1, 0x68cc -/* 00CA60 7000BE60 8C6D0000 */ lw $t5, ($v1) -/* 00CA64 7000BE64 3C0E8002 */ lui $t6, %hi(g_ContInitDone) -/* 00CA68 7000BE68 55A0009D */ bnezl $t5, .L7000C0E0 -/* 00CA6C 7000BE6C 8FBF0014 */ lw $ra, 0x14($sp) -/* 00CA70 7000BE70 8DCE691C */ lw $t6, %lo(g_ContInitDone)($t6) -/* 00CA74 7000BE74 3C048006 */ lui $a0, %hi(g_ContInputMessageQueue) -/* 00CA78 7000BE78 24845350 */ addiu $a0, %lo(g_ContInputMessageQueue) # addiu $a0, $a0, 0x5350 -/* 00CA7C 7000BE7C 11C00097 */ beqz $t6, .L7000C0DC -/* 00CA80 7000BE80 27A5004C */ addiu $a1, $sp, 0x4c -/* 00CA84 7000BE84 0C003774 */ jal osRecvMesg -/* 00CA88 7000BE88 00003025 */ move $a2, $zero -/* 00CA8C 7000BE8C 14400093 */ bnez $v0, .L7000C0DC -/* 00CA90 7000BE90 3C058006 */ lui $a1, %hi(g_ContData) -/* 00CA94 7000BE94 3C018002 */ lui $at, %hi(g_ContBusy) -/* 00CA98 7000BE98 24A54F30 */ addiu $a1, %lo(g_ContData) # addiu $a1, $a1, 0x4f30 -/* 00CA9C 7000BE9C AC2068C8 */ sw $zero, %lo(g_ContBusy)($at) -/* 00CAA0 7000BEA0 8CA201E8 */ lw $v0, 0x1e8($a1) -/* 00CAA4 7000BEA4 24010014 */ li $at, 20 -/* 00CAA8 7000BEA8 8CB801E4 */ lw $t8, 0x1e4($a1) -/* 00CAAC 7000BEAC 24430001 */ addiu $v1, $v0, 1 -/* 00CAB0 7000BEB0 0061001A */ div $zero, $v1, $at -/* 00CAB4 7000BEB4 00001810 */ mfhi $v1 -/* 00CAB8 7000BEB8 54780003 */ bnel $v1, $t8, .L7000BEC8 -/* 00CABC 7000BEBC 0003C880 */ sll $t9, $v1, 2 -/* 00CAC0 7000BEC0 00401825 */ move $v1, $v0 -/* 00CAC4 7000BEC4 0003C880 */ sll $t9, $v1, 2 -.L7000BEC8: -/* 00CAC8 7000BEC8 0323C823 */ subu $t9, $t9, $v1 -/* 00CACC 7000BECC 0019C8C0 */ sll $t9, $t9, 3 -/* 00CAD0 7000BED0 00B92021 */ addu $a0, $a1, $t9 -/* 00CAD4 7000BED4 0C00538D */ jal osContGetReadData -/* 00CAD8 7000BED8 AFA30040 */ sw $v1, 0x40($sp) -/* 00CADC 7000BEDC 8FA20040 */ lw $v0, 0x40($sp) -/* 00CAE0 7000BEE0 24010014 */ li $at, 20 -/* 00CAE4 7000BEE4 3C048002 */ lui $a0, %hi(g_ContCheckStatusTimer60) -/* 00CAE8 7000BEE8 244B0013 */ addiu $t3, $v0, 0x13 -/* 00CAEC 7000BEEC 0161001A */ div $zero, $t3, $at -/* 00CAF0 7000BEF0 24846920 */ addiu $a0, %lo(g_ContCheckStatusTimer60) # addiu $a0, $a0, 0x6920 -/* 00CAF4 7000BEF4 8C8D0000 */ lw $t5, ($a0) -/* 00CAF8 7000BEF8 00006010 */ mfhi $t4 -/* 00CAFC 7000BEFC 24010078 */ li $at, 120 -/* 00CB00 7000BF00 25AE0001 */ addiu $t6, $t5, 1 -/* 00CB04 7000BF04 01C1001A */ div $zero, $t6, $at -/* 00CB08 7000BF08 3C058006 */ lui $a1, %hi(g_ContData) -/* 00CB0C 7000BF0C 24A54F30 */ addiu $a1, %lo(g_ContData) # addiu $a1, $a1, 0x4f30 -/* 00CB10 7000BF10 0000C010 */ mfhi $t8 -/* 00CB14 7000BF14 ACAC01EC */ sw $t4, 0x1ec($a1) -/* 00CB18 7000BF18 AC8E0000 */ sw $t6, ($a0) -/* 00CB1C 7000BF1C 17000006 */ bnez $t8, .L7000BF38 -/* 00CB20 7000BF20 ACA201E8 */ sw $v0, 0x1e8($a1) -/* 00CB24 7000BF24 0C002E04 */ jal joyCheckStatus -/* 00CB28 7000BF28 00000000 */ nop -/* 00CB2C 7000BF2C 3C058006 */ lui $a1, %hi(g_ContData) -/* 00CB30 7000BF30 24A54F30 */ addiu $a1, %lo(g_ContData) # addiu $a1, $a1, 0x4f30 -/* 00CB34 7000BF34 8CA201E8 */ lw $v0, 0x1e8($a1) -.L7000BF38: -/* 00CB38 7000BF38 0002C880 */ sll $t9, $v0, 2 -/* 00CB3C 7000BF3C 0322C823 */ subu $t9, $t9, $v0 -/* 00CB40 7000BF40 0019C8C0 */ sll $t9, $t9, 3 -/* 00CB44 7000BF44 00B93021 */ addu $a2, $a1, $t9 -/* 00CB48 7000BF48 00002025 */ move $a0, $zero -/* 00CB4C 7000BF4C 24070006 */ li $a3, 6 -.L7000BF50: -/* 00CB50 7000BF50 00870019 */ multu $a0, $a3 -/* 00CB54 7000BF54 00001012 */ mflo $v0 -/* 00CB58 7000BF58 00C25821 */ addu $t3, $a2, $v0 -/* 00CB5C 7000BF5C 91630004 */ lbu $v1, 4($t3) -/* 00CB60 7000BF60 1460000A */ bnez $v1, .L7000BF8C -/* 00CB64 7000BF64 00000000 */ nop -/* 00CB68 7000BF68 8CAC01EC */ lw $t4, 0x1ec($a1) -/* 00CB6C 7000BF6C 000C6880 */ sll $t5, $t4, 2 -/* 00CB70 7000BF70 01AC6823 */ subu $t5, $t5, $t4 -/* 00CB74 7000BF74 000D68C0 */ sll $t5, $t5, 3 -/* 00CB78 7000BF78 00AD7021 */ addu $t6, $a1, $t5 -/* 00CB7C 7000BF7C 01C27821 */ addu $t7, $t6, $v0 -/* 00CB80 7000BF80 91F80004 */ lbu $t8, 4($t7) -/* 00CB84 7000BF84 1700000C */ bnez $t8, .L7000BFB8 -/* 00CB88 7000BF88 00000000 */ nop -.L7000BF8C: -/* 00CB8C 7000BF8C 1060000E */ beqz $v1, .L7000BFC8 -/* 00CB90 7000BF90 24840001 */ addiu $a0, $a0, 1 -/* 00CB94 7000BF94 8CB901EC */ lw $t9, 0x1ec($a1) -/* 00CB98 7000BF98 00195880 */ sll $t3, $t9, 2 -/* 00CB9C 7000BF9C 01795823 */ subu $t3, $t3, $t9 -/* 00CBA0 7000BFA0 000B58C0 */ sll $t3, $t3, 3 -/* 00CBA4 7000BFA4 00AB6021 */ addu $t4, $a1, $t3 -/* 00CBA8 7000BFA8 01826821 */ addu $t5, $t4, $v0 -/* 00CBAC 7000BFAC 91AE0004 */ lbu $t6, 4($t5) -/* 00CBB0 7000BFB0 55C00006 */ bnezl $t6, .L7000BFCC -/* 00CBB4 7000BFB4 00047E00 */ sll $t7, $a0, 0x18 -.L7000BFB8: -/* 00CBB8 7000BFB8 0C002E04 */ jal joyCheckStatus -/* 00CBBC 7000BFBC 00000000 */ nop -/* 00CBC0 7000BFC0 10000006 */ b .L7000BFDC -/* 00CBC4 7000BFC4 00000000 */ nop -.L7000BFC8: -/* 00CBC8 7000BFC8 00047E00 */ sll $t7, $a0, 0x18 -.L7000BFCC: -/* 00CBCC 7000BFCC 000F2603 */ sra $a0, $t7, 0x18 -/* 00CBD0 7000BFD0 28810004 */ slti $at, $a0, 4 -/* 00CBD4 7000BFD4 1420FFDE */ bnez $at, .L7000BF50 -/* 00CBD8 7000BFD8 00000000 */ nop -.L7000BFDC: -/* 00CBDC 7000BFDC 0C002E9F */ jal joyRumblePakTick -/* 00CBE0 7000BFE0 00000000 */ nop -/* 00CBE4 7000BFE4 3C048006 */ lui $a0, %hi(g_ContInputMessageQueue) -/* 00CBE8 7000BFE8 0C00535C */ jal osContStartReadData -/* 00CBEC 7000BFEC 24845350 */ addiu $a0, %lo(g_ContInputMessageQueue) # addiu $a0, $a0, 0x5350 -/* 00CBF0 7000BFF0 3C038002 */ lui $v1, %hi(g_ContBadReadTimer60) -/* 00CBF4 7000BFF4 8C636970 */ lw $v1, %lo(g_ContBadReadTimer60)($v1) -/* 00CBF8 7000BFF8 24190001 */ li $t9, 1 -/* 00CBFC 7000BFFC 3C018002 */ lui $at, %hi(g_ContBusy) -/* 00CC00 7000C000 AC3968C8 */ sw $t9, %lo(g_ContBusy)($at) -/* 00CC04 7000C004 3C018002 */ lui $at, %hi(g_ContBadReadTimer60) -/* 00CC08 7000C008 24630001 */ addiu $v1, $v1, 1 -/* 00CC0C 7000C00C AC236970 */ sw $v1, %lo(g_ContBadReadTimer60)($at) -/* 00CC10 7000C010 2861003C */ slti $at, $v1, 0x3c -/* 00CC14 7000C014 14200031 */ bnez $at, .L7000C0DC -/* 00CC18 7000C018 3C098002 */ lui $t1, %hi(g_ContBadReadsStickX) -/* 00CC1C 7000C01C 3C048002 */ lui $a0, %hi(g_ContBadReadsStickY) -/* 00CC20 7000C020 3C058002 */ lui $a1, %hi(g_ContBadReadsButtons) -/* 00CC24 7000C024 3C038002 */ lui $v1, %hi(g_ContBadReadsButtonsPressed) -/* 00CC28 7000C028 3C0A8002 */ lui $t2, %hi(g_ContBadReadTimer60) -/* 00CC2C 7000C02C 254A6970 */ addiu $t2, %lo(g_ContBadReadTimer60) # addiu $t2, $t2, 0x6970 -/* 00CC30 7000C030 24636960 */ addiu $v1, %lo(g_ContBadReadsButtonsPressed) # addiu $v1, $v1, 0x6960 -/* 00CC34 7000C034 24A56950 */ addiu $a1, %lo(g_ContBadReadsButtons) # addiu $a1, $a1, 0x6950 -/* 00CC38 7000C038 24846940 */ addiu $a0, %lo(g_ContBadReadsStickY) # addiu $a0, $a0, 0x6940 -/* 00CC3C 7000C03C 25296930 */ addiu $t1, %lo(g_ContBadReadsStickX) # addiu $t1, $t1, 0x6930 -.L7000C040: -/* 00CC40 7000C040 8D220000 */ lw $v0, ($t1) -/* 00CC44 7000C044 5440000B */ bnezl $v0, .L7000C074 -/* 00CC48 7000C048 AD200000 */ sw $zero, ($t1) -/* 00CC4C 7000C04C 8C8B0000 */ lw $t3, ($a0) -/* 00CC50 7000C050 55600008 */ bnezl $t3, .L7000C074 -/* 00CC54 7000C054 AD200000 */ sw $zero, ($t1) -/* 00CC58 7000C058 8CAC0000 */ lw $t4, ($a1) -/* 00CC5C 7000C05C 55800005 */ bnezl $t4, .L7000C074 -/* 00CC60 7000C060 AD200000 */ sw $zero, ($t1) -/* 00CC64 7000C064 8C6D0000 */ lw $t5, ($v1) -/* 00CC68 7000C068 51A00006 */ beql $t5, $zero, .L7000C084 -/* 00CC6C 7000C06C 8D220004 */ lw $v0, 4($t1) -/* 00CC70 7000C070 AD200000 */ sw $zero, ($t1) -.L7000C074: -/* 00CC74 7000C074 AC800000 */ sw $zero, ($a0) -/* 00CC78 7000C078 ACA00000 */ sw $zero, ($a1) -/* 00CC7C 7000C07C AC600000 */ sw $zero, ($v1) -/* 00CC80 7000C080 8D220004 */ lw $v0, 4($t1) -.L7000C084: -/* 00CC84 7000C084 5440000B */ bnezl $v0, .L7000C0B4 -/* 00CC88 7000C088 AD200004 */ sw $zero, 4($t1) -/* 00CC8C 7000C08C 8C8E0004 */ lw $t6, 4($a0) -/* 00CC90 7000C090 55C00008 */ bnezl $t6, .L7000C0B4 -/* 00CC94 7000C094 AD200004 */ sw $zero, 4($t1) -/* 00CC98 7000C098 8CAF0004 */ lw $t7, 4($a1) -/* 00CC9C 7000C09C 55E00005 */ bnezl $t7, .L7000C0B4 -/* 00CCA0 7000C0A0 AD200004 */ sw $zero, 4($t1) -/* 00CCA4 7000C0A4 8C780004 */ lw $t8, 4($v1) -/* 00CCA8 7000C0A8 53000006 */ beql $t8, $zero, .L7000C0C4 -/* 00CCAC 7000C0AC 24630008 */ addiu $v1, $v1, 8 -/* 00CCB0 7000C0B0 AD200004 */ sw $zero, 4($t1) -.L7000C0B4: -/* 00CCB4 7000C0B4 AC800004 */ sw $zero, 4($a0) -/* 00CCB8 7000C0B8 ACA00004 */ sw $zero, 4($a1) -/* 00CCBC 7000C0BC AC600004 */ sw $zero, 4($v1) -/* 00CCC0 7000C0C0 24630008 */ addiu $v1, $v1, 8 -.L7000C0C4: -/* 00CCC4 7000C0C4 25290008 */ addiu $t1, $t1, 8 -/* 00CCC8 7000C0C8 24840008 */ addiu $a0, $a0, 8 -/* 00CCCC 7000C0CC 146AFFDC */ bne $v1, $t2, .L7000C040 -/* 00CCD0 7000C0D0 24A50008 */ addiu $a1, $a1, 8 -/* 00CCD4 7000C0D4 3C018002 */ lui $at, %hi(g_ContBadReadTimer60) -/* 00CCD8 7000C0D8 AC206970 */ sw $zero, %lo(g_ContBadReadTimer60)($at) -.L7000C0DC: -/* 00CCDC 7000C0DC 8FBF0014 */ lw $ra, 0x14($sp) -.L7000C0E0: -/* 00CCE0 7000C0E0 27BD0050 */ addiu $sp, $sp, 0x50 -/* 00CCE4 7000C0E4 03E00008 */ jr $ra -/* 00CCE8 7000C0E8 00000000 */ nop -) -#endif + s8 joyGetStickX(s8 contpadnum) { diff --git a/src/libultrare/Makefile.libultrare b/src/libultrare/Makefile.libultrare index cdb59703..76203858 100644 --- a/src/libultrare/Makefile.libultrare +++ b/src/libultrare/Makefile.libultrare @@ -74,10 +74,10 @@ LIBULTRA_AUDIO_S_FILES := LIBULTRARE_AUDIO_C_FILES := \ drvrNew \ + env \ reverb -LIBULTRARE_AUDIO_S_FILES := \ - env +LIBULTRARE_AUDIO_S_FILES := # ################# # gt @@ -187,6 +187,7 @@ LIBULTRARE_IO_C_FILES := \ pfsisplug \ pimgr \ sptask \ + ultra80069080 \ vi \ vimgr \ vimodepallan1 \ diff --git a/src/libultrare/audio/env_wip.c b/src/libultrare/audio/env.c similarity index 92% rename from src/libultrare/audio/env_wip.c rename to src/libultrare/audio/env.c index e1314799..f0910d83 100644 --- a/src/libultrare/audio/env_wip.c +++ b/src/libultrare/audio/env.c @@ -60,13 +60,13 @@ static s16 eqpower[ EQPOWER_LENGTH ] = { */ static Acmd *_pullSubFrame(void *filter, s16 *inp, s16 *outp, s32 outCount, s32 sampleOffset, Acmd *p) ; static s16 _getRate(f32 vol, f32 tgt, s32 count, u16* ratel); +static f32 _getVol(f32 ivol, s32 samples, s16 ratem, u16 ratel); /*********************************************************************** * Enveloper filter public interfaces ***********************************************************************/ -// NONMATCHING Acmd *alEnvmixerPull(void *filter, s16 *outp, s32 outCount, s32 sampleOffset, Acmd *p) { Acmd *ptr = p; @@ -96,6 +96,7 @@ Acmd *alEnvmixerPull(void *filter, s16 *outp, s32 outCount, s32 sampleOffset, Ac if (samples > outCount) break; +#line 104 "env.c" assert(samples >= 0); assert(samples <= AL_MAX_RSP_SAMPLES); @@ -179,32 +180,8 @@ Acmd *alEnvmixerPull(void *filter, s16 *outp, s32 outCount, s32 sampleOffset, Ac * Estimate the current volume */ - // begin decomp problem area - - /** - * e->cvolL : 0x1c - * e->cvolR : 0x1e - * e->lratl : 0x24 - * e->lratm : 0x26 - * e->rratl : 0x2a - * e->rratm : 0x2c - * e->delta : 0x30 - */ - - //e->cvolL = _getVol(e->cvolL, e->delta, e->lratm, e->lratl); - //e->cvolR = _getVol(e->cvolR, e->delta, e->rratm, e->rratl); - - /** - e->cvolL = (f32)e->cvolL + (((((f32)(e->lratm<<16) + (f32)e->lratl) / 65536.0) * (f32)e->delta) * 0.125); - e->cvolR = (f32)e->cvolR + (((((f32)(e->rratm<<16) + (f32)e->rratl) / 65536.0) * (f32)e->delta) * 0.125); - */ - - s32 stack_padding[10]; - - e->cvolL = (f32)e->cvolL + (((((f32)(e->lratm<<16) + (f32)e->lratl) / 65536.0) * (f32)e->delta) * 0.125); - e->cvolR = (f32)e->cvolR + (((((f32)(e->rratm<<16) + (f32)e->rratl) / 65536.0) * (f32)e->delta) * 0.125); - - // end decomp problem area + e->cvolL = _getVol(e->cvolL, e->delta, e->lratm, e->lratl); + e->cvolR = _getVol(e->cvolR, e->delta, e->rratm, e->rratl); } /* @@ -402,6 +379,7 @@ static Acmd* _pullSubFrame(void *filter, s16 *inp, s16 *outp, s32 outCount, s32 * ask all filters upstream from us to build their command * lists. */ +#line 373 "env.c" assert(source); ptr = (*source->handler)(source, inp, outCount, sampleOffset, p); @@ -445,7 +423,6 @@ static Acmd* _pullSubFrame(void *filter, s16 *inp, s16 *outp, s32 outCount, s32 return ptr; } -/* match */ f64 _frexpf(f64 value, s32 *eptr) { f64 absvalue; @@ -461,7 +438,6 @@ f64 _frexpf(f64 value, s32 *eptr) return (value > 0.0 ? absvalue : -absvalue); } -/* match */ f64 _ldexpf(f64 in, s32 ex) { s32 exp; @@ -486,8 +462,15 @@ f64 _ldexpf(f64 in, s32 ex) RWW 28jun95 */ -/* match */ -/* ultra_7001AAF4 */ +static f32 _getVol(f32 ivol, s32 samples, s16 ratem, u16 ratel) +{ + f32 rate; + + rate = ((f32)(ratem << 16) + (f32)ratel) / 65536.0; + ivol += (rate * (f32)samples) * 0.125; + return ivol; +} + static s16 _getRate(f32 vol, f32 tgt, s32 count, u16* ratel) { f32 tempf2; @@ -527,4 +510,3 @@ static s16 _getRate(f32 vol, f32 tgt, s32 count, u16* ratel) - diff --git a/src/libultrare/audio/env.s b/src/libultrare/audio/env.s deleted file mode 100644 index 71cc96d4..00000000 --- a/src/libultrare/audio/env.s +++ /dev/null @@ -1,916 +0,0 @@ -# Goldeneye 007 (U) disassembly and split file -# generated by n64split v0.4a - N64 ROM splitter - -# c file -- needs decomp - -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - -.include "macros.inc" - - -.section .text, "ax" -.section .text -glabel _ldexpf -/* 01B500 7001A900 10C00007 */ beqz $a2, .L7001A920 -/* 01B504 7001A904 240E0001 */ li $t6, 1 -/* 01B508 7001A908 00CE7804 */ sllv $t7, $t6, $a2 -/* 01B50C 7001A90C 448F2000 */ mtc1 $t7, $f4 -/* 01B510 7001A910 00000000 */ nop -/* 01B514 7001A914 468021A1 */ cvt.d.w $f6, $f4 -/* 01B518 7001A918 46266302 */ mul.d $f12, $f12, $f6 -/* 01B51C 7001A91C 00000000 */ nop -.L7001A920: -/* 01B520 7001A920 03E00008 */ jr $ra -/* 01B524 7001A924 46206006 */ mov.d $f0, $f12 -.size _ldexpf, . - _ldexpf - -glabel _frexpf -/* 01B528 7001A928 44801800 */ mtc1 $zero, $f3 -/* 01B52C 7001A92C 44801000 */ mtc1 $zero, $f2 -/* 01B530 7001A930 ACC00000 */ sw $zero, ($a2) -/* 01B534 7001A934 3C013FF0 */ lui $at, 0x3ff0 -/* 01B538 7001A938 46226032 */ c.eq.d $f12, $f2 -/* 01B53C 7001A93C 00000000 */ nop -/* 01B540 7001A940 45020004 */ bc1fl .L7001A954 -/* 01B544 7001A944 462C103C */ c.lt.d $f2, $f12 -/* 01B548 7001A948 03E00008 */ jr $ra -/* 01B54C 7001A94C 46206006 */ mov.d $f0, $f12 -/* 01B550 7001A950 462C103C */ c.lt.d $f2, $f12 -.L7001A954: -/* 01B554 7001A954 44817800 */ mtc1 $at, $f15 -/* 01B558 7001A958 44807000 */ mtc1 $zero, $f14 -/* 01B55C 7001A95C 3C013FE0 */ lui $at, 0x3fe0 -/* 01B560 7001A960 45020004 */ bc1fl .L7001A974 -/* 01B564 7001A964 46206007 */ neg.d $f0, $f12 -/* 01B568 7001A968 10000002 */ b .L7001A974 -/* 01B56C 7001A96C 46206006 */ mov.d $f0, $f12 -/* 01B570 7001A970 46206007 */ neg.d $f0, $f12 -.L7001A974: -/* 01B574 7001A974 4620703E */ c.le.d $f14, $f0 -/* 01B578 7001A978 00000000 */ nop -/* 01B57C 7001A97C 4502000D */ bc1fl .L7001A9B4 -/* 01B580 7001A980 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 01B584 7001A984 44818800 */ mtc1 $at, $f17 -/* 01B588 7001A988 44808000 */ mtc1 $zero, $f16 -/* 01B58C 7001A98C 00000000 */ nop -.L7001A990: -/* 01B590 7001A990 46300002 */ mul.d $f0, $f0, $f16 -/* 01B594 7001A994 8CCE0000 */ lw $t6, ($a2) -/* 01B598 7001A998 25CF0001 */ addiu $t7, $t6, 1 -/* 01B59C 7001A99C ACCF0000 */ sw $t7, ($a2) -/* 01B5A0 7001A9A0 4620703E */ c.le.d $f14, $f0 -/* 01B5A4 7001A9A4 00000000 */ nop -/* 01B5A8 7001A9A8 4501FFF9 */ bc1t .L7001A990 -/* 01B5AC 7001A9AC 00000000 */ nop -/* 01B5B0 7001A9B0 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -.L7001A9B4: -/* 01B5B4 7001A9B4 44818800 */ mtc1 $at, $f17 -/* 01B5B8 7001A9B8 44808000 */ mtc1 $zero, $f16 -/* 01B5BC 7001A9BC 00000000 */ nop -/* 01B5C0 7001A9C0 4630003C */ c.lt.d $f0, $f16 -/* 01B5C4 7001A9C4 00000000 */ nop -/* 01B5C8 7001A9C8 45020009 */ bc1fl .L7001A9F0 -/* 01B5CC 7001A9CC 462C103C */ c.lt.d $f2, $f12 -/* 01B5D0 7001A9D0 46200000 */ add.d $f0, $f0, $f0 -.L7001A9D4: -/* 01B5D4 7001A9D4 8CD80000 */ lw $t8, ($a2) -/* 01B5D8 7001A9D8 4630003C */ c.lt.d $f0, $f16 -/* 01B5DC 7001A9DC 2719FFFF */ addiu $t9, $t8, -1 -/* 01B5E0 7001A9E0 ACD90000 */ sw $t9, ($a2) -/* 01B5E4 7001A9E4 4503FFFB */ bc1tl .L7001A9D4 -/* 01B5E8 7001A9E8 46200000 */ add.d $f0, $f0, $f0 -/* 01B5EC 7001A9EC 462C103C */ c.lt.d $f2, $f12 -.L7001A9F0: -/* 01B5F0 7001A9F0 00000000 */ nop -/* 01B5F4 7001A9F4 45020004 */ bc1fl .L7001AA08 -/* 01B5F8 7001A9F8 46200087 */ neg.d $f2, $f0 -/* 01B5FC 7001A9FC 10000002 */ b .L7001AA08 -/* 01B600 7001AA00 46200086 */ mov.d $f2, $f0 -/* 01B604 7001AA04 46200087 */ neg.d $f2, $f0 -.L7001AA08: -/* 01B608 7001AA08 46201006 */ mov.d $f0, $f2 -/* 01B60C 7001AA0C 03E00008 */ jr $ra -/* 01B610 7001AA10 00000000 */ nop -.size _frexpf, . - _frexpf - -glabel alEnvmixerParam -/* 01B614 7001AA14 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 01B618 7001AA18 24020001 */ li $v0, 1 -/* 01B61C 7001AA1C AFBF0014 */ sw $ra, 0x14($sp) -/* 01B620 7001AA20 10A20027 */ beq $a1, $v0, .L7001AAC0 -/* 01B624 7001AA24 00803825 */ move $a3, $a0 -/* 01B628 7001AA28 24010003 */ li $at, 3 -/* 01B62C 7001AA2C 10A10007 */ beq $a1, $at, .L7001AA4C -/* 01B630 7001AA30 24010004 */ li $at, 4 -/* 01B634 7001AA34 10A1000D */ beq $a1, $at, .L7001AA6C -/* 01B638 7001AA38 24010009 */ li $at, 9 -/* 01B63C 7001AA3C 50A10017 */ beql $a1, $at, .L7001AA9C -/* 01B640 7001AA40 8CE40000 */ lw $a0, ($a3) -/* 01B644 7001AA44 10000021 */ b .L7001AACC -/* 01B648 7001AA48 8CE40000 */ lw $a0, ($a3) -.L7001AA4C: -/* 01B64C 7001AA4C 8CE20040 */ lw $v0, 0x40($a3) -/* 01B650 7001AA50 50400004 */ beql $v0, $zero, .L7001AA64 -/* 01B654 7001AA54 ACE6003C */ sw $a2, 0x3c($a3) -/* 01B658 7001AA58 10000002 */ b .L7001AA64 -/* 01B65C 7001AA5C AC460000 */ sw $a2, ($v0) -/* 01B660 7001AA60 ACE6003C */ sw $a2, 0x3c($a3) -.L7001AA64: -/* 01B664 7001AA64 1000001E */ b .L7001AAE0 -/* 01B668 7001AA68 ACE60040 */ sw $a2, 0x40($a3) -.L7001AA6C: -/* 01B66C 7001AA6C 8CE40000 */ lw $a0, ($a3) -/* 01B670 7001AA70 ACE20038 */ sw $v0, 0x38($a3) -/* 01B674 7001AA74 ACE00048 */ sw $zero, 0x48($a3) -/* 01B678 7001AA78 10800019 */ beqz $a0, .L7001AAE0 -/* 01B67C 7001AA7C A4E2001A */ sh $v0, 0x1a($a3) -/* 01B680 7001AA80 8C990008 */ lw $t9, 8($a0) -/* 01B684 7001AA84 24050004 */ li $a1, 4 -/* 01B688 7001AA88 0320F809 */ jalr $t9 -/* 01B68C 7001AA8C 00000000 */ nop -/* 01B690 7001AA90 10000014 */ b .L7001AAE4 -/* 01B694 7001AA94 8FBF0014 */ lw $ra, 0x14($sp) -/* 01B698 7001AA98 8CE40000 */ lw $a0, ($a3) -.L7001AA9C: -/* 01B69C 7001AA9C ACE20048 */ sw $v0, 0x48($a3) -/* 01B6A0 7001AAA0 50800010 */ beql $a0, $zero, .L7001AAE4 -/* 01B6A4 7001AAA4 8FBF0014 */ lw $ra, 0x14($sp) -/* 01B6A8 7001AAA8 8C990008 */ lw $t9, 8($a0) -/* 01B6AC 7001AAAC 24050009 */ li $a1, 9 -/* 01B6B0 7001AAB0 0320F809 */ jalr $t9 -/* 01B6B4 7001AAB4 00000000 */ nop -/* 01B6B8 7001AAB8 1000000A */ b .L7001AAE4 -/* 01B6BC 7001AABC 8FBF0014 */ lw $ra, 0x14($sp) -.L7001AAC0: -/* 01B6C0 7001AAC0 10000007 */ b .L7001AAE0 -/* 01B6C4 7001AAC4 ACE60000 */ sw $a2, ($a3) -/* 01B6C8 7001AAC8 8CE40000 */ lw $a0, ($a3) -.L7001AACC: -/* 01B6CC 7001AACC 50800005 */ beql $a0, $zero, .L7001AAE4 -/* 01B6D0 7001AAD0 8FBF0014 */ lw $ra, 0x14($sp) -/* 01B6D4 7001AAD4 8C990008 */ lw $t9, 8($a0) -/* 01B6D8 7001AAD8 0320F809 */ jalr $t9 -/* 01B6DC 7001AADC 00000000 */ nop -.L7001AAE0: -/* 01B6E0 7001AAE0 8FBF0014 */ lw $ra, 0x14($sp) -.L7001AAE4: -/* 01B6E4 7001AAE4 27BD0018 */ addiu $sp, $sp, 0x18 -/* 01B6E8 7001AAE8 00001025 */ move $v0, $zero -/* 01B6EC 7001AAEC 03E00008 */ jr $ra -/* 01B6F0 7001AAF0 00000000 */ nop -.size alEnvmixerParam, . - alEnvmixerParam - -glabel ultra_7001AAF4 -/* 01B6F4 7001AAF4 5480000C */ bnezl $a0, .L7001AB28 -/* 01B6F8 7001AAF8 44843000 */ mtc1 $a0, $f6 -/* 01B6FC 7001AAFC 460C703E */ c.le.s $f14, $f12 -/* 01B700 7001AB00 340EFFFF */ li $t6, 65535 -/* 01B704 7001AB04 24028000 */ li $v0, -32768 -/* 01B708 7001AB08 45000004 */ bc1f .L7001AB1C -/* 01B70C 7001AB0C 00000000 */ nop -/* 01B710 7001AB10 A4AE0000 */ sh $t6, ($a1) -/* 01B714 7001AB14 03E00008 */ jr $ra -/* 01B718 7001AB18 24027FFF */ li $v0, 32767 -.L7001AB1C: -/* 01B71C 7001AB1C 03E00008 */ jr $ra -/* 01B720 7001AB20 A4A00000 */ sh $zero, ($a1) -/* 01B724 7001AB24 44843000 */ mtc1 $a0, $f6 -.L7001AB28: -/* 01B728 7001AB28 460E6101 */ sub.s $f4, $f12, $f14 -/* 01B72C 7001AB2C 3C014020 */ li $at, 0x40200000 # 2.500000 -/* 01B730 7001AB30 44812800 */ mtc1 $at, $f5 -/* 01B734 7001AB34 46803220 */ cvt.s.w $f8, $f6 -/* 01B738 7001AB38 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 01B73C 7001AB3C 46082283 */ div.s $f10, $f4, $f8 -/* 01B740 7001AB40 44802000 */ mtc1 $zero, $f4 -/* 01B744 7001AB44 460051A1 */ cvt.d.s $f6, $f10 -/* 01B748 7001AB48 44805000 */ mtc1 $zero, $f10 -/* 01B74C 7001AB4C 46243202 */ mul.d $f8, $f6, $f4 -/* 01B750 7001AB50 462040A0 */ cvt.s.d $f2, $f8 -/* 01B754 7001AB54 460A103C */ c.lt.s $f2, $f10 -/* 01B758 7001AB58 46001006 */ mov.s $f0, $f2 -/* 01B75C 7001AB5C 45020005 */ bc1fl .L7001AB74 -/* 01B760 7001AB60 4600010D */ trunc.w.s $f4, $f0 -/* 01B764 7001AB64 44813000 */ mtc1 $at, $f6 -/* 01B768 7001AB68 00000000 */ nop -/* 01B76C 7001AB6C 46061001 */ sub.s $f0, $f2, $f6 -/* 01B770 7001AB70 4600010D */ trunc.w.s $f4, $f0 -.L7001AB74: -/* 01B774 7001AB74 3C018003 */ lui $at, %hi(F32_80029964) -/* 01B778 7001AB78 44032000 */ mfc1 $v1, $f4 -/* 01B77C 7001AB7C C4249964 */ lwc1 $f4, %lo(F32_80029964)($at) -/* 01B780 7001AB80 0003C400 */ sll $t8, $v1, 0x10 -/* 01B784 7001AB84 00181403 */ sra $v0, $t8, 0x10 -/* 01B788 7001AB88 44824000 */ mtc1 $v0, $f8 -/* 01B78C 7001AB8C 00000000 */ nop -/* 01B790 7001AB90 468042A0 */ cvt.s.w $f10, $f8 -/* 01B794 7001AB94 460A0181 */ sub.s $f6, $f0, $f10 -/* 01B798 7001AB98 46043202 */ mul.s $f8, $f6, $f4 -/* 01B79C 7001AB9C 4600428D */ trunc.w.s $f10, $f8 -/* 01B7A0 7001ABA0 440F5000 */ mfc1 $t7, $f10 -/* 01B7A4 7001ABA4 00000000 */ nop -/* 01B7A8 7001ABA8 A4AF0000 */ sh $t7, ($a1) -/* 01B7AC 7001ABAC 03E00008 */ jr $ra -/* 01B7B0 7001ABB0 00000000 */ nop -.size ultra_7001AAF4, . - ultra_7001AAF4 - -glabel ultra_7001ABB4 -/* 01B7B4 7001ABB4 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 01B7B8 7001ABB8 AFBF001C */ sw $ra, 0x1c($sp) -/* 01B7BC 7001ABBC 16400003 */ bnez $s2, .L7001ABCC -/* 01B7C0 7001ABC0 8E110000 */ lw $s1, ($s0) -/* 01B7C4 7001ABC4 1000009F */ b .L7001AE44 -/* 01B7C8 7001ABC8 02801025 */ move $v0, $s4 -.L7001ABCC: -/* 01B7CC 7001ABCC 16200008 */ bnez $s1, .L7001ABF0 -/* 01B7D0 7001ABD0 3C048003 */ lui $a0, %hi(aAssertionFaultSSLineD_1) -/* 01B7D4 7001ABD4 3C058003 */ lui $a1, %hi(aSource) -/* 01B7D8 7001ABD8 3C068003 */ lui $a2, %hi(aEnv_c_1) -/* 01B7DC 7001ABDC 24C6995C */ addiu $a2, %lo(aEnv_c_1) # addiu $a2, $a2, -0x66a4 -/* 01B7E0 7001ABE0 24A59954 */ addiu $a1, %lo(aSource) # addiu $a1, $a1, -0x66ac -/* 01B7E4 7001ABE4 24849928 */ addiu $a0, %lo(aAssertionFaultSSLineD_1) # addiu $a0, $a0, -0x66d8 -/* 01B7E8 7001ABE8 0C0033D1 */ jal osSyncPrintf -/* 01B7EC 7001ABEC 24070175 */ li $a3, 373 -.L7001ABF0: -/* 01B7F0 7001ABF0 AFB40010 */ sw $s4, 0x10($sp) -/* 01B7F4 7001ABF4 8E390004 */ lw $t9, 4($s1) -/* 01B7F8 7001ABF8 02202025 */ move $a0, $s1 -/* 01B7FC 7001ABFC 02A02825 */ move $a1, $s5 -/* 01B800 7001AC00 02403025 */ move $a2, $s2 -/* 01B804 7001AC04 0320F809 */ jalr $t9 -/* 01B808 7001AC08 02C03825 */ move $a3, $s6 -/* 01B80C 7001AC0C 86AE0000 */ lh $t6, ($s5) -/* 01B810 7001AC10 3C010800 */ lui $at, 0x800 -/* 01B814 7001AC14 0012A040 */ sll $s4, $s2, 1 -/* 01B818 7001AC18 31CFFFFF */ andi $t7, $t6, 0xffff -/* 01B81C 7001AC1C 01E1C025 */ or $t8, $t7, $at -/* 01B820 7001AC20 AC580000 */ sw $t8, ($v0) -/* 01B824 7001AC24 86790000 */ lh $t9, ($s3) -/* 01B828 7001AC28 3C010808 */ lui $at, 0x808 -/* 01B82C 7001AC2C 24510010 */ addiu $s1, $v0, 0x10 -/* 01B830 7001AC30 272F0440 */ addiu $t7, $t9, 0x440 -/* 01B834 7001AC34 000FC400 */ sll $t8, $t7, 0x10 -/* 01B838 7001AC38 3299FFFF */ andi $t9, $s4, 0xffff -/* 01B83C 7001AC3C 03197025 */ or $t6, $t8, $t9 -/* 01B840 7001AC40 AC4E0004 */ sw $t6, 4($v0) -/* 01B844 7001AC44 866F0000 */ lh $t7, ($s3) -/* 01B848 7001AC48 02209025 */ move $s2, $s1 -/* 01B84C 7001AC4C 25F80580 */ addiu $t8, $t7, 0x580 -/* 01B850 7001AC50 3319FFFF */ andi $t9, $t8, 0xffff -/* 01B854 7001AC54 03217025 */ or $t6, $t9, $at -/* 01B858 7001AC58 AC4E0008 */ sw $t6, 8($v0) -/* 01B85C 7001AC5C 86630000 */ lh $v1, ($s3) -/* 01B860 7001AC60 246F0800 */ addiu $t7, $v1, 0x800 -/* 01B864 7001AC64 31F8FFFF */ andi $t8, $t7, 0xffff -/* 01B868 7001AC68 246E06C0 */ addiu $t6, $v1, 0x6c0 -/* 01B86C 7001AC6C 000E7C00 */ sll $t7, $t6, 0x10 -/* 01B870 7001AC70 030FC825 */ or $t9, $t8, $t7 -/* 01B874 7001AC74 AC59000C */ sw $t9, 0xc($v0) -/* 01B878 7001AC78 8E0E0038 */ lw $t6, 0x38($s0) -/* 01B87C 7001AC7C 3C198003 */ lui $t9, %hi(eqpower) -/* 01B880 7001AC80 51C00067 */ beql $t6, $zero, .L7001AE20 -/* 01B884 7001AC84 3C0E0308 */ lui $t6, 0x308 -/* 01B888 7001AC88 86180018 */ lh $t8, 0x18($s0) -/* 01B88C 7001AC8C AE000038 */ sw $zero, 0x38($s0) -/* 01B890 7001AC90 860E001A */ lh $t6, 0x1a($s0) -/* 01B894 7001AC94 00187840 */ sll $t7, $t8, 1 -/* 01B898 7001AC98 032FC821 */ addu $t9, $t9, $t7 -/* 01B89C 7001AC9C 873981E0 */ lh $t9, %lo(eqpower)($t9) -/* 01B8A0 7001ACA0 8E040034 */ lw $a0, 0x34($s0) -/* 01B8A4 7001ACA4 26050024 */ addiu $a1, $s0, 0x24 -/* 01B8A8 7001ACA8 032E0019 */ multu $t9, $t6 -/* 01B8AC 7001ACAC 8619001C */ lh $t9, 0x1c($s0) -/* 01B8B0 7001ACB0 44992000 */ mtc1 $t9, $f4 -/* 01B8B4 7001ACB4 00000000 */ nop -/* 01B8B8 7001ACB8 468023A0 */ cvt.s.w $f14, $f4 -/* 01B8BC 7001ACBC 0000C012 */ mflo $t8 -/* 01B8C0 7001ACC0 00187BC3 */ sra $t7, $t8, 0xf -/* 01B8C4 7001ACC4 A60F0028 */ sh $t7, 0x28($s0) -/* 01B8C8 7001ACC8 860E0028 */ lh $t6, 0x28($s0) -/* 01B8CC 7001ACCC 448E3000 */ mtc1 $t6, $f6 -/* 01B8D0 7001ACD0 0C006ABD */ jal ultra_7001AAF4 -/* 01B8D4 7001ACD4 46803320 */ cvt.s.w $f12, $f6 -/* 01B8D8 7001ACD8 86180018 */ lh $t8, 0x18($s0) -/* 01B8DC 7001ACDC 3C0E8003 */ lui $t6, %hi(eqpower+0xFE) -/* 01B8E0 7001ACE0 A6020026 */ sh $v0, 0x26($s0) -/* 01B8E4 7001ACE4 00187840 */ sll $t7, $t8, 1 -/* 01B8E8 7001ACE8 000FC823 */ negu $t9, $t7 -/* 01B8EC 7001ACEC 01D97021 */ addu $t6, $t6, $t9 -/* 01B8F0 7001ACF0 85CE82DE */ lh $t6, %lo(eqpower+0xFE)($t6) -/* 01B8F4 7001ACF4 8618001A */ lh $t8, 0x1a($s0) -/* 01B8F8 7001ACF8 8E040034 */ lw $a0, 0x34($s0) -/* 01B8FC 7001ACFC 2605002A */ addiu $a1, $s0, 0x2a -/* 01B900 7001AD00 01D80019 */ multu $t6, $t8 -/* 01B904 7001AD04 860E001E */ lh $t6, 0x1e($s0) -/* 01B908 7001AD08 448E4000 */ mtc1 $t6, $f8 -/* 01B90C 7001AD0C 00000000 */ nop -/* 01B910 7001AD10 468043A0 */ cvt.s.w $f14, $f8 -/* 01B914 7001AD14 00007812 */ mflo $t7 -/* 01B918 7001AD18 000FCBC3 */ sra $t9, $t7, 0xf -/* 01B91C 7001AD1C A619002E */ sh $t9, 0x2e($s0) -/* 01B920 7001AD20 8618002E */ lh $t8, 0x2e($s0) -/* 01B924 7001AD24 44985000 */ mtc1 $t8, $f10 -/* 01B928 7001AD28 0C006ABD */ jal ultra_7001AAF4 -/* 01B92C 7001AD2C 46805320 */ cvt.s.w $f12, $f10 -/* 01B930 7001AD30 860F001C */ lh $t7, 0x1c($s0) -/* 01B934 7001AD34 A602002C */ sh $v0, 0x2c($s0) -/* 01B938 7001AD38 02201825 */ move $v1, $s1 -/* 01B93C 7001AD3C 3C010906 */ lui $at, 0x906 -/* 01B940 7001AD40 31F9FFFF */ andi $t9, $t7, 0xffff -/* 01B944 7001AD44 03217025 */ or $t6, $t9, $at -/* 01B948 7001AD48 AC6E0000 */ sw $t6, ($v1) -/* 01B94C 7001AD4C AC600004 */ sw $zero, 4($v1) -/* 01B950 7001AD50 8618001E */ lh $t8, 0x1e($s0) -/* 01B954 7001AD54 26310008 */ addiu $s1, $s1, 8 -/* 01B958 7001AD58 02202025 */ move $a0, $s1 -/* 01B95C 7001AD5C 3C010904 */ lui $at, 0x904 -/* 01B960 7001AD60 330FFFFF */ andi $t7, $t8, 0xffff -/* 01B964 7001AD64 01E1C825 */ or $t9, $t7, $at -/* 01B968 7001AD68 AC990000 */ sw $t9, ($a0) -/* 01B96C 7001AD6C AC800004 */ sw $zero, 4($a0) -/* 01B970 7001AD70 860E0028 */ lh $t6, 0x28($s0) -/* 01B974 7001AD74 26310008 */ addiu $s1, $s1, 8 -/* 01B978 7001AD78 3C010902 */ lui $at, 0x902 -/* 01B97C 7001AD7C 31D8FFFF */ andi $t8, $t6, 0xffff -/* 01B980 7001AD80 03017825 */ or $t7, $t8, $at -/* 01B984 7001AD84 02202825 */ move $a1, $s1 -/* 01B988 7001AD88 ACAF0000 */ sw $t7, ($a1) -/* 01B98C 7001AD8C 860E0026 */ lh $t6, 0x26($s0) -/* 01B990 7001AD90 96190024 */ lhu $t9, 0x24($s0) -/* 01B994 7001AD94 26310008 */ addiu $s1, $s1, 8 -/* 01B998 7001AD98 000EC400 */ sll $t8, $t6, 0x10 -/* 01B99C 7001AD9C 03197025 */ or $t6, $t8, $t9 -/* 01B9A0 7001ADA0 ACAE0004 */ sw $t6, 4($a1) -/* 01B9A4 7001ADA4 860F002E */ lh $t7, 0x2e($s0) -/* 01B9A8 7001ADA8 3C010900 */ lui $at, 0x900 -/* 01B9AC 7001ADAC 02203025 */ move $a2, $s1 -/* 01B9B0 7001ADB0 31F8FFFF */ andi $t8, $t7, 0xffff -/* 01B9B4 7001ADB4 0301C825 */ or $t9, $t8, $at -/* 01B9B8 7001ADB8 ACD90000 */ sw $t9, ($a2) -/* 01B9BC 7001ADBC 860F002C */ lh $t7, 0x2c($s0) -/* 01B9C0 7001ADC0 960E002A */ lhu $t6, 0x2a($s0) -/* 01B9C4 7001ADC4 26310008 */ addiu $s1, $s1, 8 -/* 01B9C8 7001ADC8 000FC400 */ sll $t8, $t7, 0x10 -/* 01B9CC 7001ADCC 030E7825 */ or $t7, $t8, $t6 -/* 01B9D0 7001ADD0 ACCF0004 */ sw $t7, 4($a2) -/* 01B9D4 7001ADD4 86190020 */ lh $t9, 0x20($s0) -/* 01B9D8 7001ADD8 3C010908 */ lui $at, 0x908 -/* 01B9DC 7001ADDC 02201025 */ move $v0, $s1 -/* 01B9E0 7001ADE0 3338FFFF */ andi $t8, $t9, 0xffff -/* 01B9E4 7001ADE4 03017025 */ or $t6, $t8, $at -/* 01B9E8 7001ADE8 AC4E0000 */ sw $t6, ($v0) -/* 01B9EC 7001ADEC 860F0022 */ lh $t7, 0x22($s0) -/* 01B9F0 7001ADF0 26310008 */ addiu $s1, $s1, 8 -/* 01B9F4 7001ADF4 02209025 */ move $s2, $s1 -/* 01B9F8 7001ADF8 31F9FFFF */ andi $t9, $t7, 0xffff -/* 01B9FC 7001ADFC AC590004 */ sw $t9, 4($v0) -/* 01BA00 7001AE00 3C180309 */ lui $t8, 0x309 -/* 01BA04 7001AE04 AE580000 */ sw $t8, ($s2) -/* 01BA08 7001AE08 8E040014 */ lw $a0, 0x14($s0) -/* 01BA0C 7001AE0C 0C003A2C */ jal osVirtualToPhysical -/* 01BA10 7001AE10 26310008 */ addiu $s1, $s1, 8 -/* 01BA14 7001AE14 10000007 */ b .L7001AE34 -/* 01BA18 7001AE18 AE420004 */ sw $v0, 4($s2) -/* 01BA1C 7001AE1C 3C0E0308 */ lui $t6, 0x308 -.L7001AE20: -/* 01BA20 7001AE20 AE4E0000 */ sw $t6, ($s2) -/* 01BA24 7001AE24 8E040014 */ lw $a0, 0x14($s0) -/* 01BA28 7001AE28 0C003A2C */ jal osVirtualToPhysical -/* 01BA2C 7001AE2C 26310008 */ addiu $s1, $s1, 8 -/* 01BA30 7001AE30 AE420004 */ sw $v0, 4($s2) -.L7001AE34: -/* 01BA34 7001AE34 86AF0000 */ lh $t7, ($s5) -/* 01BA38 7001AE38 02201025 */ move $v0, $s1 -/* 01BA3C 7001AE3C 01F4C821 */ addu $t9, $t7, $s4 -/* 01BA40 7001AE40 A6B90000 */ sh $t9, ($s5) -.L7001AE44: -/* 01BA44 7001AE44 8FBF001C */ lw $ra, 0x1c($sp) -/* 01BA48 7001AE48 27BD0020 */ addiu $sp, $sp, 0x20 -/* 01BA4C 7001AE4C 03E00008 */ jr $ra -/* 01BA50 7001AE50 00000000 */ nop -.size ultra_7001ABB4, . - ultra_7001ABB4 - -/* 01BA54 7001AE54 03E00008 */ jr $ra -/* 01BA58 7001AE58 00000000 */ nop - -glabel alEnvmixerPull -/* 01BA5C 7001AE5C 27BDFF28 */ addiu $sp, $sp, -0xd8 -/* 01BA60 7001AE60 8FAE00E8 */ lw $t6, 0xe8($sp) -/* 01BA64 7001AE64 AFBF0054 */ sw $ra, 0x54($sp) -/* 01BA68 7001AE68 AFBE0050 */ sw $fp, 0x50($sp) -/* 01BA6C 7001AE6C AFB7004C */ sw $s7, 0x4c($sp) -/* 01BA70 7001AE70 AFB60048 */ sw $s6, 0x48($sp) -/* 01BA74 7001AE74 AFB50044 */ sw $s5, 0x44($sp) -/* 01BA78 7001AE78 AFB40040 */ sw $s4, 0x40($sp) -/* 01BA7C 7001AE7C AFB3003C */ sw $s3, 0x3c($sp) -/* 01BA80 7001AE80 AFB20038 */ sw $s2, 0x38($sp) -/* 01BA84 7001AE84 AFB10034 */ sw $s1, 0x34($sp) -/* 01BA88 7001AE88 AFB00030 */ sw $s0, 0x30($sp) -/* 01BA8C 7001AE8C F7B60028 */ sdc1 $f22, 0x28($sp) -/* 01BA90 7001AE90 F7B40020 */ sdc1 $f20, 0x20($sp) -/* 01BA94 7001AE94 AFA500DC */ sw $a1, 0xdc($sp) -/* 01BA98 7001AE98 AFA600E0 */ sw $a2, 0xe0($sp) -/* 01BA9C 7001AE9C AFA700E4 */ sw $a3, 0xe4($sp) -/* 01BAA0 7001AEA0 AFA400D0 */ sw $a0, 0xd0($sp) -/* 01BAA4 7001AEA4 AFA700C4 */ sw $a3, 0xc4($sp) -/* 01BAA8 7001AEA8 A7A000BE */ sh $zero, 0xbe($sp) -/* 01BAAC 7001AEAC A7A000CE */ sh $zero, 0xce($sp) -/* 01BAB0 7001AEB0 AFAE00D4 */ sw $t6, 0xd4($sp) -/* 01BAB4 7001AEB4 8C98003C */ lw $t8, 0x3c($a0) -/* 01BAB8 7001AEB8 0080B825 */ move $s7, $a0 -/* 01BABC 7001AEBC 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 -/* 01BAC0 7001AEC0 53000162 */ beql $t8, $zero, .L7001B44C -/* 01BAC4 7001AEC4 8EEE0048 */ lw $t6, 0x48($s7) -/* 01BAC8 7001AEC8 4481B800 */ mtc1 $at, $f23 -/* 01BACC 7001AECC 3C0140F0 */ li $at, 0x40F00000 # 7.500000 -/* 01BAD0 7001AED0 4481A800 */ mtc1 $at, $f21 -/* 01BAD4 7001AED4 4480B000 */ mtc1 $zero, $f22 -/* 01BAD8 7001AED8 4480A000 */ mtc1 $zero, $f20 -/* 01BADC 7001AEDC 24110001 */ li $s1, 1 -/* 01BAE0 7001AEE0 8EF9003C */ lw $t9, 0x3c($s7) -.L7001AEE4: -/* 01BAE4 7001AEE4 8FA200C4 */ lw $v0, 0xc4($sp) -/* 01BAE8 7001AEE8 8FB800E0 */ lw $t8, 0xe0($sp) -/* 01BAEC 7001AEEC 8F2E0004 */ lw $t6, 4($t9) -/* 01BAF0 7001AEF0 3C048003 */ lui $a0, %hi(aAssertionFaultSSLineD) -/* 01BAF4 7001AEF4 24849890 */ addiu $a0, %lo(aAssertionFaultSSLineD) # addiu $a0, $a0, -0x6770 -/* 01BAF8 7001AEF8 01C2F023 */ subu $fp, $t6, $v0 -/* 01BAFC 7001AEFC 031E082A */ slt $at, $t8, $fp -/* 01BB00 7001AF00 14200151 */ bnez $at, .L7001B448 -/* 01BB04 7001AF04 AFAE00C4 */ sw $t6, 0xc4($sp) -/* 01BB08 7001AF08 07C10006 */ bgez $fp, .L7001AF24 -/* 01BB0C 7001AF0C 3C058003 */ lui $a1, %hi(aSamples0) -/* 01BB10 7001AF10 3C068003 */ lui $a2, %hi(aEnv_c) -/* 01BB14 7001AF14 24C698CC */ addiu $a2, %lo(aEnv_c) # addiu $a2, $a2, -0x6734 -/* 01BB18 7001AF18 24A598BC */ addiu $a1, %lo(aSamples0) # addiu $a1, $a1, -0x6744 -/* 01BB1C 7001AF1C 0C0033D1 */ jal osSyncPrintf -/* 01BB20 7001AF20 24070068 */ li $a3, 104 -.L7001AF24: -/* 01BB24 7001AF24 2BC100A1 */ slti $at, $fp, 0xa1 -/* 01BB28 7001AF28 14200008 */ bnez $at, .L7001AF4C -/* 01BB2C 7001AF2C 3C048003 */ lui $a0, %hi(aAssertionFaultSSLineD_0) -/* 01BB30 7001AF30 3C058003 */ lui $a1, %hi(aSamplesAl_max_rsp_samples) -/* 01BB34 7001AF34 3C068003 */ lui $a2, %hi(aEnv_c_0) -/* 01BB38 7001AF38 24C69920 */ addiu $a2, %lo(aEnv_c_0) # addiu $a2, $a2, -0x66e0 -/* 01BB3C 7001AF3C 24A59900 */ addiu $a1, %lo(aSamplesAl_max_rsp_samples) # addiu $a1, $a1, -0x6700 -/* 01BB40 7001AF40 248498D4 */ addiu $a0, %lo(aAssertionFaultSSLineD_0) # addiu $a0, $a0, -0x672c -/* 01BB44 7001AF44 0C0033D1 */ jal osSyncPrintf -/* 01BB48 7001AF48 24070069 */ li $a3, 105 -.L7001AF4C: -/* 01BB4C 7001AF4C 8EE3003C */ lw $v1, 0x3c($s7) -/* 01BB50 7001AF50 94790008 */ lhu $t9, 8($v1) -/* 01BB54 7001AF54 2F210011 */ sltiu $at, $t9, 0x11 -/* 01BB58 7001AF58 10200117 */ beqz $at, .L7001B3B8 -/* 01BB5C 7001AF5C 0019C880 */ sll $t9, $t9, 2 -/* 01BB60 7001AF60 3C018003 */ lui $at, %hi(jpt_80029968) -/* 01BB64 7001AF64 00390821 */ addu $at, $at, $t9 -/* 01BB68 7001AF68 8C399968 */ lw $t9, %lo(jpt_80029968)($at) -/* 01BB6C 7001AF6C 03200008 */ jr $t9 -/* 01BB70 7001AF70 00000000 */ nop -.L7001AF74: -/* 01BB74 7001AF74 846E000A */ lh $t6, 0xa($v1) -/* 01BB78 7001AF78 00608025 */ move $s0, $v1 -/* 01BB7C 7001AF7C 51C00007 */ beql $t6, $zero, .L7001AF9C -/* 01BB80 7001AF80 8EF90008 */ lw $t9, 8($s7) -/* 01BB84 7001AF84 8EF90008 */ lw $t9, 8($s7) -/* 01BB88 7001AF88 02E02025 */ move $a0, $s7 -/* 01BB8C 7001AF8C 24050008 */ li $a1, 8 -/* 01BB90 7001AF90 0320F809 */ jalr $t9 -/* 01BB94 7001AF94 00003025 */ move $a2, $zero -/* 01BB98 7001AF98 8EF90008 */ lw $t9, 8($s7) -.L7001AF9C: -/* 01BB9C 7001AF9C 02E02025 */ move $a0, $s7 -/* 01BBA0 7001AFA0 24050005 */ li $a1, 5 -/* 01BBA4 7001AFA4 0320F809 */ jalr $t9 -/* 01BBA8 7001AFA8 8E060018 */ lw $a2, 0x18($s0) -/* 01BBAC 7001AFAC 8EF90008 */ lw $t9, 8($s7) -/* 01BBB0 7001AFB0 02E02025 */ move $a0, $s7 -/* 01BBB4 7001AFB4 24050009 */ li $a1, 9 -/* 01BBB8 7001AFB8 0320F809 */ jalr $t9 -/* 01BBBC 7001AFBC 00003025 */ move $a2, $zero -/* 01BBC0 7001AFC0 AEF10038 */ sw $s1, 0x38($s7) -/* 01BBC4 7001AFC4 AEE00030 */ sw $zero, 0x30($s7) -/* 01BBC8 7001AFC8 8E0F0014 */ lw $t7, 0x14($s0) -/* 01BBCC 7001AFCC AEEF0034 */ sw $t7, 0x34($s7) -/* 01BBD0 7001AFD0 86030010 */ lh $v1, 0x10($s0) -/* 01BBD4 7001AFD4 00630019 */ multu $v1, $v1 -/* 01BBD8 7001AFD8 00002012 */ mflo $a0 -/* 01BBDC 7001AFDC 0004C3C3 */ sra $t8, $a0, 0xf -/* 01BBE0 7001AFE0 A6F8001A */ sh $t8, 0x1a($s7) -/* 01BBE4 7001AFE4 920E0012 */ lbu $t6, 0x12($s0) -/* 01BBE8 7001AFE8 3C188003 */ lui $t8, %hi(eqpower) -/* 01BBEC 7001AFEC A6EE0018 */ sh $t6, 0x18($s7) -/* 01BBF0 7001AFF0 92190013 */ lbu $t9, 0x13($s0) -/* 01BBF4 7001AFF4 00197840 */ sll $t7, $t9, 1 -/* 01BBF8 7001AFF8 030FC021 */ addu $t8, $t8, $t7 -/* 01BBFC 7001AFFC 871881E0 */ lh $t8, %lo(eqpower)($t8) -/* 01BC00 7001B000 A6F80020 */ sh $t8, 0x20($s7) -/* 01BC04 7001B004 920E0013 */ lbu $t6, 0x13($s0) -/* 01BC08 7001B008 3C188003 */ lui $t8, %hi(eqpower+0xFE) -/* 01BC0C 7001B00C 000EC840 */ sll $t9, $t6, 1 -/* 01BC10 7001B010 00197823 */ negu $t7, $t9 -/* 01BC14 7001B014 030FC021 */ addu $t8, $t8, $t7 -/* 01BC18 7001B018 871882DE */ lh $t8, %lo(eqpower+0xFE)($t8) -/* 01BC1C 7001B01C A6F80022 */ sh $t8, 0x22($s7) -/* 01BC20 7001B020 8E0E0014 */ lw $t6, 0x14($s0) -/* 01BC24 7001B024 51C00005 */ beql $t6, $zero, .L7001B03C -/* 01BC28 7001B028 86E20018 */ lh $v0, 0x18($s7) -/* 01BC2C 7001B02C A6F1001C */ sh $s1, 0x1c($s7) -/* 01BC30 7001B030 10000013 */ b .L7001B080 -/* 01BC34 7001B034 A6F1001E */ sh $s1, 0x1e($s7) -/* 01BC38 7001B038 86E20018 */ lh $v0, 0x18($s7) -.L7001B03C: -/* 01BC3C 7001B03C 3C0F8003 */ lui $t7, %hi(eqpower) -/* 01BC40 7001B040 86E3001A */ lh $v1, 0x1a($s7) -/* 01BC44 7001B044 0002C840 */ sll $t9, $v0, 1 -/* 01BC48 7001B048 01F97821 */ addu $t7, $t7, $t9 -/* 01BC4C 7001B04C 85EF81E0 */ lh $t7, %lo(eqpower)($t7) -/* 01BC50 7001B050 0019C823 */ negu $t9, $t9 -/* 01BC54 7001B054 01E30019 */ multu $t7, $v1 -/* 01BC58 7001B058 3C0F8003 */ lui $t7, %hi(eqpower+0xFE) -/* 01BC5C 7001B05C 01F97821 */ addu $t7, $t7, $t9 -/* 01BC60 7001B060 0000C012 */ mflo $t8 -/* 01BC64 7001B064 001873C3 */ sra $t6, $t8, 0xf -/* 01BC68 7001B068 A6EE001C */ sh $t6, 0x1c($s7) -/* 01BC6C 7001B06C 85EF82DE */ lh $t7, %lo(eqpower+0xFE)($t7) -/* 01BC70 7001B070 01E30019 */ multu $t7, $v1 -/* 01BC74 7001B074 0000C012 */ mflo $t8 -/* 01BC78 7001B078 001873C3 */ sra $t6, $t8, 0xf -/* 01BC7C 7001B07C A6EE001E */ sh $t6, 0x1e($s7) -.L7001B080: -/* 01BC80 7001B080 8EF90000 */ lw $t9, ($s7) -/* 01BC84 7001B084 532000DF */ beql $t9, $zero, .L7001B404 -/* 01BC88 7001B088 87B800BE */ lh $t8, 0xbe($sp) -/* 01BC8C 7001B08C C604000C */ lwc1 $f4, 0xc($s0) -/* 01BC90 7001B090 24050007 */ li $a1, 7 -/* 01BC94 7001B094 E7A400A4 */ swc1 $f4, 0xa4($sp) -/* 01BC98 7001B098 8EE40000 */ lw $a0, ($s7) -/* 01BC9C 7001B09C 8FA600A4 */ lw $a2, 0xa4($sp) -/* 01BCA0 7001B0A0 8C990008 */ lw $t9, 8($a0) -/* 01BCA4 7001B0A4 0320F809 */ jalr $t9 -/* 01BCA8 7001B0A8 00000000 */ nop -/* 01BCAC 7001B0AC 100000D5 */ b .L7001B404 -/* 01BCB0 7001B0B0 87B800BE */ lh $t8, 0xbe($sp) -.L7001B0B4: -/* 01BCB4 7001B0B4 02E08025 */ move $s0, $s7 -/* 01BCB8 7001B0B8 27B500CE */ addiu $s5, $sp, 0xce -/* 01BCBC 7001B0BC 27B300BE */ addiu $s3, $sp, 0xbe -/* 01BCC0 7001B0C0 03C09025 */ move $s2, $fp -/* 01BCC4 7001B0C4 8FB600E4 */ lw $s6, 0xe4($sp) -/* 01BCC8 7001B0C8 0C006AED */ jal ultra_7001ABB4 -/* 01BCCC 7001B0CC 8FB400D4 */ lw $s4, 0xd4($sp) -/* 01BCD0 7001B0D0 AFA200D4 */ sw $v0, 0xd4($sp) -/* 01BCD4 7001B0D4 8EEF0030 */ lw $t7, 0x30($s7) -/* 01BCD8 7001B0D8 8EE40034 */ lw $a0, 0x34($s7) -/* 01BCDC 7001B0DC 24110001 */ li $s1, 1 -/* 01BCE0 7001B0E0 01FE2821 */ addu $a1, $t7, $fp -/* 01BCE4 7001B0E4 00A4082A */ slt $at, $a1, $a0 -/* 01BCE8 7001B0E8 14200019 */ bnez $at, .L7001B150 -/* 01BCEC 7001B0EC AEE50030 */ sw $a1, 0x30($s7) -/* 01BCF0 7001B0F0 86E20018 */ lh $v0, 0x18($s7) -/* 01BCF4 7001B0F4 3C198003 */ lui $t9, %hi(eqpower) -/* 01BCF8 7001B0F8 86E3001A */ lh $v1, 0x1a($s7) -/* 01BCFC 7001B0FC 00027040 */ sll $t6, $v0, 1 -/* 01BD00 7001B100 032EC821 */ addu $t9, $t9, $t6 -/* 01BD04 7001B104 873981E0 */ lh $t9, %lo(eqpower)($t9) -/* 01BD08 7001B108 000E7023 */ negu $t6, $t6 -/* 01BD0C 7001B10C 03230019 */ multu $t9, $v1 -/* 01BD10 7001B110 3C198003 */ lui $t9, %hi(eqpower+0xFE) -/* 01BD14 7001B114 032EC821 */ addu $t9, $t9, $t6 -/* 01BD18 7001B118 00007812 */ mflo $t7 -/* 01BD1C 7001B11C 000FC3C3 */ sra $t8, $t7, 0xf -/* 01BD20 7001B120 A6F80028 */ sh $t8, 0x28($s7) -/* 01BD24 7001B124 873982DE */ lh $t9, %lo(eqpower+0xFE)($t9) -/* 01BD28 7001B128 86EE0028 */ lh $t6, 0x28($s7) -/* 01BD2C 7001B12C AEE40030 */ sw $a0, 0x30($s7) -/* 01BD30 7001B130 03230019 */ multu $t9, $v1 -/* 01BD34 7001B134 A6EE001C */ sh $t6, 0x1c($s7) -/* 01BD38 7001B138 00007812 */ mflo $t7 -/* 01BD3C 7001B13C 000FC3C3 */ sra $t8, $t7, 0xf -/* 01BD40 7001B140 A6F8002E */ sh $t8, 0x2e($s7) -/* 01BD44 7001B144 86F9002E */ lh $t9, 0x2e($s7) -/* 01BD48 7001B148 10000040 */ b .L7001B24C -/* 01BD4C 7001B14C A6F9001E */ sh $t9, 0x1e($s7) -.L7001B150: -/* 01BD50 7001B150 86EF001C */ lh $t7, 0x1c($s7) -/* 01BD54 7001B154 86E30026 */ lh $v1, 0x26($s7) -/* 01BD58 7001B158 96E40024 */ lhu $a0, 0x24($s7) -/* 01BD5C 7001B15C 448F3000 */ mtc1 $t7, $f6 -/* 01BD60 7001B160 0003C400 */ sll $t8, $v1, 0x10 -/* 01BD64 7001B164 44984000 */ mtc1 $t8, $f8 -/* 01BD68 7001B168 44842000 */ mtc1 $a0, $f4 -/* 01BD6C 7001B16C 46803320 */ cvt.s.w $f12, $f6 -/* 01BD70 7001B170 00A01025 */ move $v0, $a1 -/* 01BD74 7001B174 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 01BD78 7001B178 468042A0 */ cvt.s.w $f10, $f8 -/* 01BD7C 7001B17C 04810004 */ bgez $a0, .L7001B190 -/* 01BD80 7001B180 468021A0 */ cvt.s.w $f6, $f4 -/* 01BD84 7001B184 44814000 */ mtc1 $at, $f8 -/* 01BD88 7001B188 00000000 */ nop -/* 01BD8C 7001B18C 46083180 */ add.s $f6, $f6, $f8 -.L7001B190: -/* 01BD90 7001B190 46065100 */ add.s $f4, $f10, $f6 -/* 01BD94 7001B194 86EF001E */ lh $t7, 0x1e($s7) -/* 01BD98 7001B198 86E3002C */ lh $v1, 0x2c($s7) -/* 01BD9C 7001B19C 96E4002A */ lhu $a0, 0x2a($s7) -/* 01BDA0 7001B1A0 46002221 */ cvt.d.s $f8, $f4 -/* 01BDA4 7001B1A4 44822000 */ mtc1 $v0, $f4 -/* 01BDA8 7001B1A8 46344283 */ div.d $f10, $f8, $f20 -/* 01BDAC 7001B1AC 0003C400 */ sll $t8, $v1, 0x10 -/* 01BDB0 7001B1B0 00A01025 */ move $v0, $a1 -/* 01BDB4 7001B1B4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 01BDB8 7001B1B8 46802220 */ cvt.s.w $f8, $f4 -/* 01BDBC 7001B1BC 462051A0 */ cvt.s.d $f6, $f10 -/* 01BDC0 7001B1C0 46083282 */ mul.s $f10, $f6, $f8 -/* 01BDC4 7001B1C4 46006221 */ cvt.d.s $f8, $f12 -/* 01BDC8 7001B1C8 46005121 */ cvt.d.s $f4, $f10 -/* 01BDCC 7001B1CC 46362182 */ mul.d $f6, $f4, $f22 -/* 01BDD0 7001B1D0 46264280 */ add.d $f10, $f8, $f6 -/* 01BDD4 7001B1D4 448F4000 */ mtc1 $t7, $f8 -/* 01BDD8 7001B1D8 44983000 */ mtc1 $t8, $f6 -/* 01BDDC 7001B1DC 46205320 */ cvt.s.d $f12, $f10 -/* 01BDE0 7001B1E0 468040A0 */ cvt.s.w $f2, $f8 -/* 01BDE4 7001B1E4 4600610D */ trunc.w.s $f4, $f12 -/* 01BDE8 7001B1E8 468032A0 */ cvt.s.w $f10, $f6 -/* 01BDEC 7001B1EC 44192000 */ mfc1 $t9, $f4 -/* 01BDF0 7001B1F0 44842000 */ mtc1 $a0, $f4 -/* 01BDF4 7001B1F4 A6F9001C */ sh $t9, 0x1c($s7) -/* 01BDF8 7001B1F8 04810004 */ bgez $a0, .L7001B20C -/* 01BDFC 7001B1FC 46802220 */ cvt.s.w $f8, $f4 -/* 01BE00 7001B200 44813000 */ mtc1 $at, $f6 -/* 01BE04 7001B204 00000000 */ nop -/* 01BE08 7001B208 46064200 */ add.s $f8, $f8, $f6 -.L7001B20C: -/* 01BE0C 7001B20C 46085100 */ add.s $f4, $f10, $f8 -/* 01BE10 7001B210 460021A1 */ cvt.d.s $f6, $f4 -/* 01BE14 7001B214 44822000 */ mtc1 $v0, $f4 -/* 01BE18 7001B218 46343283 */ div.d $f10, $f6, $f20 -/* 01BE1C 7001B21C 468021A0 */ cvt.s.w $f6, $f4 -/* 01BE20 7001B220 46205220 */ cvt.s.d $f8, $f10 -/* 01BE24 7001B224 46064282 */ mul.s $f10, $f8, $f6 -/* 01BE28 7001B228 460011A1 */ cvt.d.s $f6, $f2 -/* 01BE2C 7001B22C 46005121 */ cvt.d.s $f4, $f10 -/* 01BE30 7001B230 46362202 */ mul.d $f8, $f4, $f22 -/* 01BE34 7001B234 46283280 */ add.d $f10, $f6, $f8 -/* 01BE38 7001B238 462050A0 */ cvt.s.d $f2, $f10 -/* 01BE3C 7001B23C 4600110D */ trunc.w.s $f4, $f2 -/* 01BE40 7001B240 44192000 */ mfc1 $t9, $f4 -/* 01BE44 7001B244 00000000 */ nop -/* 01BE48 7001B248 A6F9001E */ sh $t9, 0x1e($s7) -.L7001B24C: -/* 01BE4C 7001B24C 86EF001C */ lh $t7, 0x1c($s7) -/* 01BE50 7001B250 55E00003 */ bnezl $t7, .L7001B260 -/* 01BE54 7001B254 86F8001E */ lh $t8, 0x1e($s7) -/* 01BE58 7001B258 A6F1001C */ sh $s1, 0x1c($s7) -/* 01BE5C 7001B25C 86F8001E */ lh $t8, 0x1e($s7) -.L7001B260: -/* 01BE60 7001B260 57000003 */ bnezl $t8, .L7001B270 -/* 01BE64 7001B264 8EE3003C */ lw $v1, 0x3c($s7) -/* 01BE68 7001B268 A6F1001E */ sh $s1, 0x1e($s7) -/* 01BE6C 7001B26C 8EE3003C */ lw $v1, 0x3c($s7) -.L7001B270: -/* 01BE70 7001B270 2401000C */ li $at, 12 -/* 01BE74 7001B274 84640008 */ lh $a0, 8($v1) -/* 01BE78 7001B278 54810005 */ bnel $a0, $at, .L7001B290 -/* 01BE7C 7001B27C 2401000B */ li $at, 11 -/* 01BE80 7001B280 8C6E000C */ lw $t6, 0xc($v1) -/* 01BE84 7001B284 A6EE0018 */ sh $t6, 0x18($s7) -/* 01BE88 7001B288 84640008 */ lh $a0, 8($v1) -/* 01BE8C 7001B28C 2401000B */ li $at, 11 -.L7001B290: -/* 01BE90 7001B290 5481000B */ bnel $a0, $at, .L7001B2C0 -/* 01BE94 7001B294 24010010 */ li $at, 16 -/* 01BE98 7001B298 AEE00030 */ sw $zero, 0x30($s7) -/* 01BE9C 7001B29C 8C62000C */ lw $v0, 0xc($v1) -/* 01BEA0 7001B2A0 00420019 */ multu $v0, $v0 -/* 01BEA4 7001B2A4 00001012 */ mflo $v0 -/* 01BEA8 7001B2A8 0002CBC3 */ sra $t9, $v0, 0xf -/* 01BEAC 7001B2AC A6F9001A */ sh $t9, 0x1a($s7) -/* 01BEB0 7001B2B0 8C6F0010 */ lw $t7, 0x10($v1) -/* 01BEB4 7001B2B4 AEEF0034 */ sw $t7, 0x34($s7) -/* 01BEB8 7001B2B8 84640008 */ lh $a0, 8($v1) -/* 01BEBC 7001B2BC 24010010 */ li $at, 16 -.L7001B2C0: -/* 01BEC0 7001B2C0 1481000E */ bne $a0, $at, .L7001B2FC -/* 01BEC4 7001B2C4 00000000 */ nop -/* 01BEC8 7001B2C8 8C78000C */ lw $t8, 0xc($v1) -/* 01BECC 7001B2CC 3C198003 */ lui $t9, %hi(eqpower) -/* 01BED0 7001B2D0 00187040 */ sll $t6, $t8, 1 -/* 01BED4 7001B2D4 032EC821 */ addu $t9, $t9, $t6 -/* 01BED8 7001B2D8 873981E0 */ lh $t9, %lo(eqpower)($t9) -/* 01BEDC 7001B2DC A6F90020 */ sh $t9, 0x20($s7) -/* 01BEE0 7001B2E0 8C6F000C */ lw $t7, 0xc($v1) -/* 01BEE4 7001B2E4 3C198003 */ lui $t9, %hi(eqpower+0xFE) -/* 01BEE8 7001B2E8 000FC040 */ sll $t8, $t7, 1 -/* 01BEEC 7001B2EC 00187023 */ negu $t6, $t8 -/* 01BEF0 7001B2F0 032EC821 */ addu $t9, $t9, $t6 -/* 01BEF4 7001B2F4 873982DE */ lh $t9, %lo(eqpower+0xFE)($t9) -/* 01BEF8 7001B2F8 A6F90022 */ sh $t9, 0x22($s7) -.L7001B2FC: -/* 01BEFC 7001B2FC 10000040 */ b .L7001B400 -/* 01BF00 7001B300 AEF10038 */ sw $s1, 0x38($s7) -.L7001B304: -/* 01BF04 7001B304 846F000A */ lh $t7, 0xa($v1) -/* 01BF08 7001B308 00608025 */ move $s0, $v1 -/* 01BF0C 7001B30C 51E00007 */ beql $t7, $zero, .L7001B32C -/* 01BF10 7001B310 8EF90008 */ lw $t9, 8($s7) -/* 01BF14 7001B314 8EF90008 */ lw $t9, 8($s7) -/* 01BF18 7001B318 02E02025 */ move $a0, $s7 -/* 01BF1C 7001B31C 24050008 */ li $a1, 8 -/* 01BF20 7001B320 0320F809 */ jalr $t9 -/* 01BF24 7001B324 00003025 */ move $a2, $zero -/* 01BF28 7001B328 8EF90008 */ lw $t9, 8($s7) -.L7001B32C: -/* 01BF2C 7001B32C 02E02025 */ move $a0, $s7 -/* 01BF30 7001B330 24050005 */ li $a1, 5 -/* 01BF34 7001B334 0320F809 */ jalr $t9 -/* 01BF38 7001B338 8E06000C */ lw $a2, 0xc($s0) -/* 01BF3C 7001B33C 8EF90008 */ lw $t9, 8($s7) -/* 01BF40 7001B340 02E02025 */ move $a0, $s7 -/* 01BF44 7001B344 24050009 */ li $a1, 9 -/* 01BF48 7001B348 0320F809 */ jalr $t9 -/* 01BF4C 7001B34C 00003025 */ move $a2, $zero -/* 01BF50 7001B350 1000002C */ b .L7001B404 -/* 01BF54 7001B354 87B800BE */ lh $t8, 0xbe($sp) -.L7001B358: -/* 01BF58 7001B358 02E08025 */ move $s0, $s7 -/* 01BF5C 7001B35C 27B500CE */ addiu $s5, $sp, 0xce -/* 01BF60 7001B360 27B300BE */ addiu $s3, $sp, 0xbe -/* 01BF64 7001B364 03C09025 */ move $s2, $fp -/* 01BF68 7001B368 8FB600E4 */ lw $s6, 0xe4($sp) -/* 01BF6C 7001B36C 0C006AED */ jal ultra_7001ABB4 -/* 01BF70 7001B370 8FB400D4 */ lw $s4, 0xd4($sp) -/* 01BF74 7001B374 AFA200D4 */ sw $v0, 0xd4($sp) -/* 01BF78 7001B378 8EF90008 */ lw $t9, 8($s7) -/* 01BF7C 7001B37C 24110001 */ li $s1, 1 -/* 01BF80 7001B380 02E02025 */ move $a0, $s7 -/* 01BF84 7001B384 24050004 */ li $a1, 4 -/* 01BF88 7001B388 0320F809 */ jalr $t9 -/* 01BF8C 7001B38C 00003025 */ move $a2, $zero -/* 01BF90 7001B390 1000001C */ b .L7001B404 -/* 01BF94 7001B394 87B800BE */ lh $t8, 0xbe($sp) -.L7001B398: -/* 01BF98 7001B398 8C78000C */ lw $t8, 0xc($v1) -/* 01BF9C 7001B39C 3C048002 */ lui $a0, %hi(alGlobals) -/* 01BFA0 7001B3A0 8C8476E0 */ lw $a0, %lo(alGlobals)($a0) -/* 01BFA4 7001B3A4 AF0000D8 */ sw $zero, 0xd8($t8) -/* 01BFA8 7001B3A8 0C003C08 */ jal _freePVoice -/* 01BFAC 7001B3AC 8C65000C */ lw $a1, 0xc($v1) -/* 01BFB0 7001B3B0 10000014 */ b .L7001B404 -/* 01BFB4 7001B3B4 87B800BE */ lh $t8, 0xbe($sp) -.L7001B3B8: -/* 01BFB8 7001B3B8 02E08025 */ move $s0, $s7 -/* 01BFBC 7001B3BC 27B500CE */ addiu $s5, $sp, 0xce -/* 01BFC0 7001B3C0 27B300BE */ addiu $s3, $sp, 0xbe -/* 01BFC4 7001B3C4 03C09025 */ move $s2, $fp -/* 01BFC8 7001B3C8 8FB600E4 */ lw $s6, 0xe4($sp) -/* 01BFCC 7001B3CC 0C006AED */ jal ultra_7001ABB4 -/* 01BFD0 7001B3D0 8FB400D4 */ lw $s4, 0xd4($sp) -/* 01BFD4 7001B3D4 AFA200D4 */ sw $v0, 0xd4($sp) -/* 01BFD8 7001B3D8 8EEE0030 */ lw $t6, 0x30($s7) -/* 01BFDC 7001B3DC 8EF90008 */ lw $t9, 8($s7) -/* 01BFE0 7001B3E0 8EE3003C */ lw $v1, 0x3c($s7) -/* 01BFE4 7001B3E4 01DE7821 */ addu $t7, $t6, $fp -/* 01BFE8 7001B3E8 AEEF0030 */ sw $t7, 0x30($s7) -/* 01BFEC 7001B3EC 24110001 */ li $s1, 1 -/* 01BFF0 7001B3F0 02E02025 */ move $a0, $s7 -/* 01BFF4 7001B3F4 8C66000C */ lw $a2, 0xc($v1) -/* 01BFF8 7001B3F8 0320F809 */ jalr $t9 -/* 01BFFC 7001B3FC 84650008 */ lh $a1, 8($v1) -.L7001B400: -/* 01C000 7001B400 87B800BE */ lh $t8, 0xbe($sp) -.L7001B404: -/* 01C004 7001B404 8FB900E0 */ lw $t9, 0xe0($sp) -/* 01C008 7001B408 001E7040 */ sll $t6, $fp, 1 -/* 01C00C 7001B40C 030E7821 */ addu $t7, $t8, $t6 -/* 01C010 7001B410 033EC023 */ subu $t8, $t9, $fp -/* 01C014 7001B414 A7AF00BE */ sh $t7, 0xbe($sp) -/* 01C018 7001B418 AFB800E0 */ sw $t8, 0xe0($sp) -/* 01C01C 7001B41C 8EE4003C */ lw $a0, 0x3c($s7) -/* 01C020 7001B420 8C8E0000 */ lw $t6, ($a0) -/* 01C024 7001B424 15C00002 */ bnez $t6, .L7001B430 -/* 01C028 7001B428 AEEE003C */ sw $t6, 0x3c($s7) -/* 01C02C 7001B42C AEE00040 */ sw $zero, 0x40($s7) -.L7001B430: -/* 01C030 7001B430 0C003C2E */ jal __freeParam -/* 01C034 7001B434 00000000 */ nop -/* 01C038 7001B438 8FB900D0 */ lw $t9, 0xd0($sp) -/* 01C03C 7001B43C 8F38003C */ lw $t8, 0x3c($t9) -/* 01C040 7001B440 5700FEA8 */ bnezl $t8, .L7001AEE4 -/* 01C044 7001B444 8EF9003C */ lw $t9, 0x3c($s7) -.L7001B448: -/* 01C048 7001B448 8EEE0048 */ lw $t6, 0x48($s7) -.L7001B44C: -/* 01C04C 7001B44C 24110001 */ li $s1, 1 -/* 01C050 7001B450 02E08025 */ move $s0, $s7 -/* 01C054 7001B454 162E000B */ bne $s1, $t6, .L7001B484 -/* 01C058 7001B458 27B500CE */ addiu $s5, $sp, 0xce -/* 01C05C 7001B45C 27B300BE */ addiu $s3, $sp, 0xbe -/* 01C060 7001B460 8FB200E0 */ lw $s2, 0xe0($sp) -/* 01C064 7001B464 8FB600E4 */ lw $s6, 0xe4($sp) -/* 01C068 7001B468 0C006AED */ jal ultra_7001ABB4 -/* 01C06C 7001B46C 8FB400D4 */ lw $s4, 0xd4($sp) -/* 01C070 7001B470 AFA200D4 */ sw $v0, 0xd4($sp) -/* 01C074 7001B474 8EEF0030 */ lw $t7, 0x30($s7) -/* 01C078 7001B478 8FB900E0 */ lw $t9, 0xe0($sp) -/* 01C07C 7001B47C 01F9C021 */ addu $t8, $t7, $t9 -/* 01C080 7001B480 AEF80030 */ sw $t8, 0x30($s7) -.L7001B484: -/* 01C084 7001B484 8EE40034 */ lw $a0, 0x34($s7) -/* 01C088 7001B488 8EEE0030 */ lw $t6, 0x30($s7) -/* 01C08C 7001B48C 008E082A */ slt $at, $a0, $t6 -/* 01C090 7001B490 50200003 */ beql $at, $zero, .L7001B4A0 -/* 01C094 7001B494 8FBF0054 */ lw $ra, 0x54($sp) -/* 01C098 7001B498 AEE40030 */ sw $a0, 0x30($s7) -/* 01C09C 7001B49C 8FBF0054 */ lw $ra, 0x54($sp) -.L7001B4A0: -/* 01C0A0 7001B4A0 8FA200D4 */ lw $v0, 0xd4($sp) -/* 01C0A4 7001B4A4 D7B40020 */ ldc1 $f20, 0x20($sp) -/* 01C0A8 7001B4A8 D7B60028 */ ldc1 $f22, 0x28($sp) -/* 01C0AC 7001B4AC 8FB00030 */ lw $s0, 0x30($sp) -/* 01C0B0 7001B4B0 8FB10034 */ lw $s1, 0x34($sp) -/* 01C0B4 7001B4B4 8FB20038 */ lw $s2, 0x38($sp) -/* 01C0B8 7001B4B8 8FB3003C */ lw $s3, 0x3c($sp) -/* 01C0BC 7001B4BC 8FB40040 */ lw $s4, 0x40($sp) -/* 01C0C0 7001B4C0 8FB50044 */ lw $s5, 0x44($sp) -/* 01C0C4 7001B4C4 8FB60048 */ lw $s6, 0x48($sp) -/* 01C0C8 7001B4C8 8FB7004C */ lw $s7, 0x4c($sp) -/* 01C0CC 7001B4CC 8FBE0050 */ lw $fp, 0x50($sp) -/* 01C0D0 7001B4D0 03E00008 */ jr $ra -/* 01C0D4 7001B4D4 27BD00D8 */ addiu $sp, $sp, 0xd8 -.size alEnvmixerPull, . - alEnvmixerPull -/* 01C0D8 7001B4D8 00000000 */ nop -/* 01C0DC 7001B4DC 00000000 */ nop - -.section .data -glabel eqpower -.half 32767,32764,32757,32744,32727,32704,32677,32644 -.half 32607,32564,32517,32464,32407,32344,32277,32205 -.half 32127,32045,31958,31866,31770,31668,31561,31450 -.half 31334,31213,31087,30957,30822,30682,30537,30388 -.half 30234,30075,29912,29744,29572,29395,29214,29028 -.half 28838,28643,28444,28241,28033,27821,27605,27385 -.half 27160,26931,26698,26461,26220,25975,25726,25473 -.half 25216,24956,24691,24423,24151,23875,23596,23313 -.half 23026,22736,22442,22145,21845,21541,21234,20924 -.half 20610,20294,19974,19651,19325,18997,18665,18331 -.half 17993,17653,17310,16965,16617,16266,15913,15558 -.half 15200,14840,14477,14113,13746,13377,13006,12633 -.half 12258,11881,11503,11122,10740,10357, 9971, 9584 -.half 9196, 8806, 8415, 8023, 7630, 7235, 6839, 6442 -.half 6044, 5646, 5246, 4845, 4444, 4042, 3640, 3237 -.half 2833, 2429, 2025, 1620, 1216, 810, 405, 0 -.size eqpower, . - eqpower - -.section .rodata -glabel aAssertionFaultSSLineD -.asciiz "\n--- ASSERTION FAULT - %s - %s, line %d\n\n" -.align 2 -glabel aSamples0 -.asciiz "samples >= 0" -.align 2 -glabel aEnv_c -.asciiz "env.c" -.align 2 -glabel aAssertionFaultSSLineD_0 -.asciiz "\n--- ASSERTION FAULT - %s - %s, line %d\n\n" -.align 4 -glabel aSamplesAl_max_rsp_samples -.asciiz "samples <= AL_MAX_RSP_SAMPLES" -.align 4 -glabel aEnv_c_0 -.asciiz "env.c" -.align 2 -glabel aAssertionFaultSSLineD_1 -.asciiz "\n--- ASSERTION FAULT - %s - %s, line %d\n\n" -.align 2 -glabel aSource -.asciiz "source" -.align 2 -glabel aEnv_c_1 -.asciiz "env.c" -.align 2 -glabel F32_80029964 -.float 65535.0 -glabel jpt_80029968 -.word .L7001B398 -.word .L7001B3B8 -.word .L7001B3B8 -.word .L7001B3B8 -.word .L7001B3B8 -.word .L7001B3B8 -.word .L7001B3B8 -.word .L7001B3B8 -.word .L7001B3B8 -.word .L7001B3B8 -.word .L7001B3B8 -.word .L7001B0B4 -.word .L7001B0B4 -.word .L7001AF74 -.word .L7001B304 -.word .L7001B358 -.word .L7001B0B4 -.align 4 diff --git a/src/libultrare/io/ultra80069080.c b/src/libultrare/io/ultra80069080.c new file mode 100644 index 00000000..e1d0c924 --- /dev/null +++ b/src/libultrare/io/ultra80069080.c @@ -0,0 +1,8 @@ +#include + + +u32 unused1 = 0x10; +u32 unused2 = 0x10; +u32 unused3 = 0x20; + +u32 unusedarray[60]; diff --git a/src/libultrare/ultra80069080.s b/src/libultrare/ultra80069080.s deleted file mode 100644 index dc1ef962..00000000 --- a/src/libultrare/ultra80069080.s +++ /dev/null @@ -1,117 +0,0 @@ -# Goldeneye 007 (U) disassembly and split file -# generated by n64split v0.4a - N64 ROM splitter - -# assembler directives -.set noat # allow manual use of $at -.set noreorder # don't insert nops after branches -.set gp=64 - - -.include "macros.inc" -.section .data -.word 0x10,0x10,0x20,0 - -.section .bss -glabel D_80069080 -.word 0 -glabel D_80069084 -.word 0 -glabel D_80069088 -.word 0 -glabel D_8006908C -.word 0 -glabel D_80069090 -.word 0 -glabel D_80069094 -.word 0 -glabel D_80069098 -.word 0 -glabel D_8006909C -.word 0 -glabel D_800690a0 -.word 0 -glabel D_800690a4 -.word 0 -glabel D_800690a8 -.word 0 -glabel D_800690ac -.word 0 -glabel D_800690b0 -.word 0 -glabel D_800690b4 -.word 0 -glabel D_800690b8 -.word 0 -glabel D_800690BC -.word 0 -glabel D_800690c0 -.word 0 -glabel D_800690C4 -.word 0 -glabel D_800690c8 -.word 0 -glabel D_800690cc -.word 0 -glabel D_800690D0 -.word 0 -glabel D_800690D4 -.word 0 -glabel D_800690D8 -.word 0 -glabel D_800690DC -.word 0 -glabel D_800690E0 -.word 0 -.word 0 -glabel D_800690E8 -.word 0 -glabel D_800690EC -.word 0 -glabel D_800690F0 -.word 0 -glabel D_800690F4 -.word 0 -glabel D_800690F8 -.word 0 -glabel D_800690FC -.word 0 -glabel D_80069100 -.word 0 -glabel D_80069104 -.word 0 -glabel D_80069108 -.word 0 -glabel D_8006910C -.word 0 -glabel D_80069110 -.word 0 -glabel D_80069114 -.word 0 -glabel D_80069118 -.word 0 -glabel D_8006911C -.word 0 -glabel D_80069120 -.word 0 -glabel D_80069124 -.word 0 -glabel D_80069128 -.word 0 -.word 0 -glabel D_80069130 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 -.word 0 diff --git a/src/mema.c b/src/mema.c index 86eae2c5..e50583ac 100644 --- a/src/mema.c +++ b/src/mema.c @@ -317,25 +317,45 @@ void *memaAlloc(u32 amount) { return (void*)addr; } - -#ifdef NONMATCHING -// Find the memaspace of the given address and reduce its size by the given +// Find the memaspace of the given address and reduce its size by the given // amount. If successful, return the same address, otherwise 0. - -// Only regalloc problems left. Called memaGrow in PD - -// https://decomp.me/scratch/tGfms 93.83% -s32 memaGrow(s32 addr, u32 amount) +s32 memaGrow(u32 addr, u32 amount) { - memaspace *curr = &g_MemoryAllocations[2]; + u32 size = 0; + s32 new_addr; + memaspace *curr; + short __unused_1 = addr + 3; + u32 __unused_2; + s32 __unused_3; + short __unused_4; + short __unused_5; + + if (addr) {} + if (__unused_1) {} + + curr = &g_MemoryAllocations.spaces[0]; + new_addr = addr; + __unused_2 = !new_addr; while (curr->addr != -1) - { - if (curr->addr == addr && curr->size >= amount) + { + __unused_1 = __unused_2; + if (__unused_1) {} + + __unused_3 = __unused_2 + 1; + if ((double)__unused_3) {} + + if (curr->addr == new_addr && curr->size >= amount) { goto found; } + if (__unused_3) {} + __unused_4 = new_addr + 2; + if ((double)__unused_4) {} + __unused_5 = new_addr + 3; + if ((double)__unused_5) {} + curr++; } @@ -345,55 +365,15 @@ found: curr->addr += amount; curr->size -= amount; - if (curr->size == 0) + size = curr->size; + + if (size == 0) { curr->addr = 0; } - return addr; + return new_addr; } -#else -GLOBAL_ASM( -.text -glabel memaGrow -/* 00ABA8 70009FA8 3C198006 */ lui $t9, %hi(g_MemoryAllocations + 0x10) -/* 00ABAC 70009FAC 8F393C38 */ lw $t9, %lo(g_MemoryAllocations + 0x10)($t9) -/* 00ABB0 70009FB0 3C188006 */ lui $t8, %hi(g_MemoryAllocations + 0x10) -/* 00ABB4 70009FB4 240AFFFF */ li $t2, -1 -/* 00ABB8 70009FB8 27183C38 */ addiu $t8, %lo(g_MemoryAllocations + 0x10) # addiu $t8, $t8, 0x3c38 -/* 00ABBC 70009FBC 00A03825 */ move $a3, $a1 -/* 00ABC0 70009FC0 1159000C */ beq $t2, $t9, .L70009FF4 -/* 00ABC4 70009FC4 03001825 */ move $v1, $t8 -/* 00ABC8 70009FC8 8F050000 */ lw $a1, ($t8) -.L70009FCC: -/* 00ABCC 70009FCC 54850006 */ bnel $a0, $a1, .L70009FE8 -/* 00ABD0 70009FD0 8C650008 */ lw $a1, 8($v1) -/* 00ABD4 70009FD4 8C660004 */ lw $a2, 4($v1) -/* 00ABD8 70009FD8 00C7082B */ sltu $at, $a2, $a3 -/* 00ABDC 70009FDC 50200008 */ beql $at, $zero, .L7000A000 -/* 00ABE0 70009FE0 00A75821 */ addu $t3, $a1, $a3 -/* 00ABE4 70009FE4 8C650008 */ lw $a1, 8($v1) -.L70009FE8: -/* 00ABE8 70009FE8 24630008 */ addiu $v1, $v1, 8 -/* 00ABEC 70009FEC 1545FFF7 */ bne $t2, $a1, .L70009FCC -/* 00ABF0 70009FF0 00000000 */ nop -.L70009FF4: -/* 00ABF4 70009FF4 03E00008 */ jr $ra -/* 00ABF8 70009FF8 00001025 */ move $v0, $zero - -/* 00ABFC 70009FFC 00A75821 */ addu $t3, $a1, $a3 -.L7000A000: -/* 00AC00 7000A000 00C76023 */ subu $t4, $a2, $a3 -/* 00AC04 7000A004 AC6B0000 */ sw $t3, ($v1) -/* 00AC08 7000A008 15800002 */ bnez $t4, .L7000A014 -/* 00AC0C 7000A00C AC6C0004 */ sw $t4, 4($v1) -/* 00AC10 7000A010 AC600000 */ sw $zero, ($v1) -.L7000A014: -/* 00AC14 7000A014 00801025 */ move $v0, $a0 -/* 00AC18 7000A018 03E00008 */ jr $ra -/* 00AC1C 7000A01C 00000000 */ nop -) -#endif void memaFree(void *addr, s32 size) { diff --git a/src/memp.c b/src/memp.c index 8b81e22c..3a84aa4f 100644 --- a/src/memp.c +++ b/src/memp.c @@ -135,257 +135,120 @@ void mempSetBankStarts(s32 poolSizes[MEMPOOL_COUNT+1]) */ } + +void *mempAllocBytesInBank(u32 bytes, u8 poolnum) +{ + /* + * Retain this address expression. Using + * &g_mempPools[poolnum] changes regalloc. + */ + MemoryPool *pool = (MemoryPool *)(((u8 **)g_mempPools) + ((poolnum * 2) << 1)); + u8 *allocation = pool->pos; + +#ifdef DEBUG + if ((poolnum < 0) || (4 < poolnum)) + { + osSyncPrintf("mempAllocBytesInBank from invalid heap %d!", poolnum); + } +#endif + + if (pool->pos == NULL) + { + while (1); + } + + if (pool->pos > pool->end) + { + nulled_mempLoopAllMemBanks(); + + while (1); + } + + if (pool->pos + bytes > pool->end) + { + if (g_mempPools[MEMPOOL_PERMANENT].pos + bytes <= g_mempPools[MEMPOOL_PERMANENT].end) + { + /* + * There was probably debug code in the original that got mostly + * stripped, but it still perturbs register allocation. These + * statements fill t1/t3/t4 so the registers match. + */ + if (needmemallocation); + if (&D_8002440C == &D_80024408); + if (needmemallocation); + if (&D_80024410 == &D_80024408); + if (!needmemallocation); + + needmemallocation = TRUE; + + return mempAllocBytesInBank(bytes, MEMPOOL_PERMANENT); + } + + nulled_mempLoopAllMemBanks(); + + while (1); + } + + pool->pos += bytes; + pool->prevpos = allocation; + + if (needmemallocation); + + return allocation; +} + + /** - * A320 70009720 - * V0=p->A0 bytes of memory allocated in bank A1; fries: AT,V0,V1,A0,A1,A2,A3,T0,T2,T5,T6,T7,T8,T9 - * accepts: A0=size, A1=bank + * Resize the most recent allocation in a pool without moving it. */ -#ifdef NONMATCHING -// https://decomp.me/scratch/cdPCZ -// Non-matching - maybe asm? -void *mempAllocBytesInBank(s32 bytes, u8 heap) +MEMP_ADD_ENTRY_RESULT mempAddEntryOfSizeToBank(void *allocation, s32 newsize, u8 poolnum) { -# ifdef DEBUG - if ((heap < 0) || (4 < heap)) + MemoryPool *pool; + s32 origsize; + s32 growsize; + + if (needmemallocation && allocation == g_mempPools[MEMPOOL_PERMANENT].prevpos) { - osSyncPrintf(__FILE__, __LINE__, "mempAllocBytesInBank from invalid heap %d!", heap); + poolnum = MEMPOOL_PERMANENT; } -# endif - for (;;) + + allocation = (void *)(u64)allocation; + pool = &g_mempPools[poolnum]; + + if (pool->pos == 0) { - u8 *allocation = g_mempPools[heap].pos; - - if (g_mempPools[heap].pos == 0) // uninitialized - { - for (;;); - } - else - { - if (g_mempPools[heap].pos > g_mempPools[heap].end) // overflow - { - nulled_mempLoopAllMemBanks(); - for (;;); - } - - if (g_mempPools[heap].pos + bytes > g_mempPools[heap].end) // Overflow, try pool 6 - { - heap = MEMPOOL_PERMANENT; - - if (g_mempPools[MEMPOOL_PERMANENT].pos + bytes <= g_mempPools[MEMPOOL_PERMANENT].end) // good - { - u32 v0 = needmemallocation; - if (1); - needmemallocation = TRUE; - - if (v0 == 0); - } - else // overflow - { - nulled_mempLoopAllMemBanks(); - for (;;); - } - } - else // good, allocate the mem and exit - { - g_mempPools[heap].pos += bytes; - g_mempPools[heap].prevpos = allocation; - - if (1); - - return allocation; - } - } - } -} -#else -GLOBAL_ASM( -.text -glabel mempAllocBytesInBank -/* 00A320 70009720 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 00A324 70009724 AFA5001C */ sw $a1, 0x1c($sp) -/* 00A328 70009728 30A700FF */ andi $a3, $a1, 0xff -/* 00A32C 7000972C 3C058006 */ lui $a1, %hi(g_mempPools) -/* 00A330 70009730 3C0A8002 */ lui $t2, %hi(needmemallocation) -/* 00A334 70009734 254A4404 */ addiu $t2, %lo(needmemallocation) # addiu $t2, $t2, 0x4404 -/* 00A338 70009738 24A53BB0 */ addiu $a1, %lo(g_mempPools) # addiu $a1, $a1, 0x3bb0 -/* 00A33C 7000973C AFBF0014 */ sw $ra, 0x14($sp) -/* 00A340 70009740 00803025 */ move $a2, $a0 -/* 00A344 70009744 0007C100 */ sll $t8, $a3, 4 -.L70009748: -/* 00A348 70009748 00B81821 */ addu $v1, $a1, $t8 -/* 00A34C 7000974C 8C620004 */ lw $v0, 4($v1) -/* 00A350 70009750 14400006 */ bnez $v0, .L7000976C -/* 00A354 70009754 00404025 */ move $t0, $v0 -/* 00A358 70009758 24190001 */ li $t9, 1 -/* 00A35C 7000975C 3C018002 */ lui $at, %hi(needmemallocation) -/* 00A360 70009760 AC394404 */ sw $t9, %lo(needmemallocation)($at) -.L70009764: -/* 00A364 70009764 1000FFFF */ b .L70009764 -/* 00A368 70009768 00000000 */ nop -.L7000976C: -/* 00A36C 7000976C 8C640008 */ lw $a0, 8($v1) -/* 00A370 70009770 00466821 */ addu $t5, $v0, $a2 -/* 00A374 70009774 0082082B */ sltu $at, $a0, $v0 -/* 00A378 70009778 50200006 */ beql $at, $zero, .L70009794 -/* 00A37C 7000977C 008D082B */ sltu $at, $a0, $t5 -/* 00A380 70009780 0C00263C */ jal nulled_mempLoopAllMemBanks -/* 00A384 70009784 24070006 */ li $a3, 6 -.L70009788: -/* 00A388 70009788 1000FFFF */ b .L70009788 -/* 00A38C 7000978C 00000000 */ nop -/* 00A390 70009790 008D082B */ sltu $at, $a0, $t5 -.L70009794: -/* 00A394 70009794 50200014 */ beql $at, $zero, .L700097E8 -/* 00A398 70009798 00466821 */ addu $t5, $v0, $a2 -/* 00A39C 7000979C 8CAF0064 */ lw $t7, 0x64($a1) -/* 00A3A0 700097A0 8CAE0068 */ lw $t6, 0x68($a1) -/* 00A3A4 700097A4 24070006 */ li $a3, 6 -/* 00A3A8 700097A8 01E6C021 */ addu $t8, $t7, $a2 -/* 00A3AC 700097AC 01D8082B */ sltu $at, $t6, $t8 -/* 00A3B0 700097B0 14200008 */ bnez $at, .L700097D4 -/* 00A3B4 700097B4 00000000 */ nop -/* 00A3B8 700097B8 8D420000 */ lw $v0, ($t2) -/* 00A3BC 700097BC 24190001 */ li $t9, 1 -/* 00A3C0 700097C0 AD590000 */ sw $t9, ($t2) -/* 00A3C4 700097C4 5440FFE0 */ bnezl $v0, .L70009748 -/* 00A3C8 700097C8 0007C100 */ sll $t8, $a3, 4 -/* 00A3CC 700097CC 1000FFDE */ b .L70009748 -/* 00A3D0 700097D0 0007C100 */ sll $t8, $a3, 4 -.L700097D4: -/* 00A3D4 700097D4 0C00263C */ jal nulled_mempLoopAllMemBanks -/* 00A3D8 700097D8 00000000 */ nop -.L700097DC: -/* 00A3DC 700097DC 1000FFFF */ b .L700097DC -/* 00A3E0 700097E0 00000000 */ nop -/* 00A3E4 700097E4 00466821 */ addu $t5, $v0, $a2 -.L700097E8: -/* 00A3E8 700097E8 AC6D0004 */ sw $t5, 4($v1) -/* 00A3EC 700097EC AC68000C */ sw $t0, 0xc($v1) -/* 00A3F0 700097F0 8FBF0014 */ lw $ra, 0x14($sp) -/* 00A3F4 700097F4 27BD0018 */ addiu $sp, $sp, 0x18 -/* 00A3F8 700097F8 01001025 */ move $v0, $t0 -/* 00A3FC 700097FC 03E00008 */ jr $ra -/* 00A400 70009800 00000000 */ nop -) -#endif - -#ifdef NONMATCHING -// Mostly regalloc -// https://decomp.me/scratch/IkY1t 98.98% -s32 mempAddEntryOfSizeToBank(u8* ptrdata, u32 newsize, u8 bank) -{ - s32 oldsize; - s32 diffsize; - - if (needmemallocation && (ptrdata == (u8*)g_mempPools[6].prevpos)) { - bank = 6; + while (TRUE); } - if (g_mempPools[bank].pos == 0) { - while(TRUE) {} + if (allocation != pool->prevpos) + { + return MEMP_ADD_ENTRY_NOT_LAST_ALLOCATION; } - if (ptrdata != (u8*)g_mempPools[bank].prevpos) { - return 2; + origsize = pool->pos - pool->prevpos; + growsize = newsize - origsize; + + if (growsize <= 0) + { + pool->pos += growsize; + return MEMP_ADD_ENTRY_SUCCESS; } - oldsize = (g_mempPools[bank].pos - g_mempPools[bank].prevpos); - diffsize = (newsize - oldsize); - - if (diffsize <= 0) { - g_mempPools[bank].pos += diffsize; - return 1; - } - - if (g_mempPools[bank].pos > g_mempPools[bank].end) { + if (pool->pos > pool->end) + { nulled_mempLoopAllMemBanks(); - while(TRUE) {} + while (TRUE); } - if (g_mempPools[bank].pos + diffsize > g_mempPools[bank].end) { + if (pool->pos + growsize > pool->end) + { nulled_mempLoopAllMemBanks(); - while(TRUE) {} + while (TRUE); } - g_mempPools[bank].pos += diffsize; - - return 1; + pool->pos += growsize; + return MEMP_ADD_ENTRY_SUCCESS; } -#else -GLOBAL_ASM( -.text -glabel mempAddEntryOfSizeToBank -/* 00A404 70009804 3C0F8002 */ lui $t7, %hi(needmemallocation) -/* 00A408 70009808 8DEF4404 */ lw $t7, %lo(needmemallocation)($t7) -/* 00A40C 7000980C 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 00A410 70009810 AFA60020 */ sw $a2, 0x20($sp) -/* 00A414 70009814 30CE00FF */ andi $t6, $a2, 0xff -/* 00A418 70009818 01C03025 */ move $a2, $t6 -/* 00A41C 7000981C AFBF0014 */ sw $ra, 0x14($sp) -/* 00A420 70009820 AFA5001C */ sw $a1, 0x1c($sp) -/* 00A424 70009824 11E00006 */ beqz $t7, .L70009840 -/* 00A428 70009828 00803825 */ move $a3, $a0 -/* 00A42C 7000982C 3C188006 */ lui $t8, %hi(g_mempPools+0x6C) -/* 00A430 70009830 8F183C1C */ lw $t8, %lo(g_mempPools+0x6C)($t8) -/* 00A434 70009834 14980002 */ bne $a0, $t8, .L70009840 -/* 00A438 70009838 00000000 */ nop -/* 00A43C 7000983C 24060006 */ li $a2, 6 -.L70009840: -/* 00A440 70009840 3C0A8006 */ lui $t2, %hi(g_mempPools) -/* 00A444 70009844 254A3BB0 */ addiu $t2, %lo(g_mempPools) # addiu $t2, $t2, 0x3bb0 -/* 00A448 70009848 0006C900 */ sll $t9, $a2, 4 -/* 00A44C 7000984C 032A2821 */ addu $a1, $t9, $t2 -/* 00A450 70009850 8CA40004 */ lw $a0, 4($a1) -/* 00A454 70009854 54800004 */ bnezl $a0, .L70009868 -/* 00A458 70009858 8CA6000C */ lw $a2, 0xc($a1) -.L7000985C: -/* 00A45C 7000985C 1000FFFF */ b .L7000985C -/* 00A460 70009860 00000000 */ nop -/* 00A464 70009864 8CA6000C */ lw $a2, 0xc($a1) -.L70009868: -/* 00A468 70009868 8FAB001C */ lw $t3, 0x1c($sp) -/* 00A46C 7000986C 50E60004 */ beql $a3, $a2, .L70009880 -/* 00A470 70009870 00861023 */ subu $v0, $a0, $a2 -/* 00A474 70009874 1000001A */ b .L700098E0 -/* 00A478 70009878 24020002 */ li $v0, 2 -/* 00A47C 7000987C 00861023 */ subu $v0, $a0, $a2 -.L70009880: -/* 00A480 70009880 01621823 */ subu $v1, $t3, $v0 -/* 00A484 70009884 1C600004 */ bgtz $v1, .L70009898 -/* 00A488 70009888 00836021 */ addu $t4, $a0, $v1 -/* 00A48C 7000988C ACAC0004 */ sw $t4, 4($a1) -/* 00A490 70009890 10000013 */ b .L700098E0 -/* 00A494 70009894 24020001 */ li $v0, 1 -.L70009898: -/* 00A498 70009898 8CA20008 */ lw $v0, 8($a1) -/* 00A49C 7000989C 00836821 */ addu $t5, $a0, $v1 -/* 00A4A0 700098A0 0044082B */ sltu $at, $v0, $a0 -/* 00A4A4 700098A4 50200006 */ beql $at, $zero, .L700098C0 -/* 00A4A8 700098A8 004D082B */ sltu $at, $v0, $t5 -/* 00A4AC 700098AC 0C00263C */ jal nulled_mempLoopAllMemBanks -/* 00A4B0 700098B0 24060006 */ li $a2, 6 -.L700098B4: -/* 00A4B4 700098B4 1000FFFF */ b .L700098B4 -/* 00A4B8 700098B8 00000000 */ nop -/* 00A4BC 700098BC 004D082B */ sltu $at, $v0, $t5 -.L700098C0: -/* 00A4C0 700098C0 10200005 */ beqz $at, .L700098D8 -/* 00A4C4 700098C4 00837021 */ addu $t6, $a0, $v1 -/* 00A4C8 700098C8 0C00263C */ jal nulled_mempLoopAllMemBanks -/* 00A4CC 700098CC 24060006 */ li $a2, 6 -.L700098D0: -/* 00A4D0 700098D0 1000FFFF */ b .L700098D0 -/* 00A4D4 700098D4 00000000 */ nop -.L700098D8: -/* 00A4D8 700098D8 ACAE0004 */ sw $t6, 4($a1) -/* 00A4DC 700098DC 24020001 */ li $v0, 1 -.L700098E0: -/* 00A4E0 700098E0 8FBF0014 */ lw $ra, 0x14($sp) -/* 00A4E4 700098E4 27BD0018 */ addiu $sp, $sp, 0x18 -/* 00A4E8 700098E8 03E00008 */ jr $ra -/* 00A4EC 700098EC 00000000 */ nop -) -#endif void nulled_mempLoopAllMemBanks(void) { u8 bank; diff --git a/src/memp.h b/src/memp.h index 95c2594d..9faf5031 100644 --- a/src/memp.h +++ b/src/memp.h @@ -9,10 +9,10 @@ #define ALIGN16_b(val) (((val) | 0xf) ^ 0xf) typedef struct MemoryPool { - s32 start; - s32 pos; - s32 end; - s32 prevpos; + u8 *start; + u8 *pos; + u8 *end; + u8 *prevpos; } MemoryPool; typedef struct s_mempMVALS { //mempSizes @@ -39,11 +39,17 @@ enum MEMPOOL MEMPOOL_COUNT }; +typedef enum MEMP_ADD_ENTRY_RESULT +{ + MEMP_ADD_ENTRY_SUCCESS = 1, + MEMP_ADD_ENTRY_NOT_LAST_ALLOCATION = 2 +} MEMP_ADD_ENTRY_RESULT; + void mempInit(void); void mempCheckMemflagTokens(int bstart,int bsize); void mempSetBankStarts(s32 banks[8]); void *mempAllocBytesInBank(u32 bytes,u8 bank); -s32 mempAddEntryOfSizeToBank(u8* ptrdata, u32 size, u8 bank); +MEMP_ADD_ENTRY_RESULT mempAddEntryOfSizeToBank(void *allocation, s32 newsize, u8 poolnum); void nulled_mempLoopAllMemBanks(void); s32 mempGetBankSizeLeft(u8 bank); u32 mempAllocPackedBytesInBank(u32 param_1); diff --git a/src/random.c b/src/random.c deleted file mode 100644 index f805e8ba..00000000 --- a/src/random.c +++ /dev/null @@ -1,130 +0,0 @@ -#include - -/** - * EU .data, offset from start of data_seg : 0x36a0 -*/ - -/** - * @file random.c - * This file contains code to get a random value and set the next seed. - * The methods here are the same as in tlb_random and chrObjRandom (but different globals). - */ - -u64 g_randomSeed = 0xAB8D9F7781280783; - -#ifdef NONMATCHING -// https://decomp.me/scratch/4prWp -// -mips3 -O2 -/** - * Iterates the current random seed and returns a 32 bit value. - * Same assembly instructions as tlbRandomGetNext and chrObjRandomGetNext, but different globals. - */ -u32 randomGetNext(void) { - // best -O1 guess - // g_randomSeed ^= (((((g_randomSeed << 0x3f) >> 0x1f) | ((g_randomSeed << 0x1f) >> 0x20)) ^ ((g_randomSeed << 0x2c) >> 0x20)) >> 0x14) & 0xfff; - // return (s32)(g_randomSeed); - - // best -O2 guess - // u64 t = ((g_randomSeed << 0x3f) >> 0x1f); - // t |= ((g_randomSeed << 0x1f) >> 0x20); - // t ^= ((g_randomSeed << 0x2c) >> 0x20); - // t = g_randomSeed ^ ((t >> 0x14) & 0xfff); - // g_randomSeed = t; - // return (s32)(t); -} -#else -GLOBAL_ASM( -.text -glabel randomGetNext -/* 00B050 7000A450 3C048002 */ lui $a0, %hi(g_randomSeed) -/* 00B054 7000A454 DC844460 */ ld $a0, %lo(g_randomSeed)($a0) -/* 00B058 7000A458 3C018002 */ lui $at, %hi(g_randomSeed) -/* 00B05C 7000A45C 000437FC */ dsll32 $a2, $a0, 0x1f -/* 00B060 7000A460 00042FF8 */ dsll $a1, $a0, 0x1f -/* 00B064 7000A464 000637FA */ dsrl $a2, $a2, 0x1f -/* 00B068 7000A468 0005283E */ dsrl32 $a1, $a1, 0 -/* 00B06C 7000A46C 0004233C */ dsll32 $a0, $a0, 0xc -/* 00B070 7000A470 00C53025 */ or $a2, $a2, $a1 -/* 00B074 7000A474 0004203E */ dsrl32 $a0, $a0, 0 -/* 00B078 7000A478 00C43026 */ xor $a2, $a2, $a0 -/* 00B07C 7000A47C 0006253A */ dsrl $a0, $a2, 0x14 -/* 00B080 7000A480 30840FFF */ andi $a0, $a0, 0xfff -/* 00B084 7000A484 00862026 */ xor $a0, $a0, $a2 -/* 00B088 7000A488 0004103C */ dsll32 $v0, $a0, 0 -/* 00B08C 7000A48C FC244460 */ sd $a0, %lo(g_randomSeed)($at) -/* 00B090 7000A490 03E00008 */ jr $ra -/* 00B094 7000A494 0002103F */ dsra32 $v0, $v0, 0 -) -#endif - - - -#ifdef NONMATCHING -/** - * This sets the global random seed. This is called from boss mainloop by randomSetSeed(osGetCount()), - * so the argument may just be 32bit. - * - * Assembly assigns zero to $a0 at the end of the function, which seems odd. - * - * Same assembly instructions as chrObjRandomSetSeed. - */ -void randomSetSeed(u64 param_1) { - g_randomSeed = param_1 + 1; -} -#else -GLOBAL_ASM( -.text -glabel randomSetSeed -/* 00B098 7000A498 64840001 */ daddiu $a0, $a0, 1 -/* 00B09C 7000A49C 3C018002 */ lui $at, %hi(g_randomSeed) -/* 00B0A0 7000A4A0 FC244460 */ sd $a0, %lo(g_randomSeed)($at) -/* 00B0A4 7000A4A4 03E00008 */ jr $ra -/* 00B0A8 7000A4A8 24040000 */ li $a0, 0 -) -#endif - - - -#ifdef NONMATCHING -/** - * Iterates the parameter as if it were the random seed and returns the next 32 bit random value. - * This uses the same logic as randomGetNext. - */ -u32 randomGetNextFrom(u64 *param_1) { - // best -O1 guess - // *param_1 ^= (((((*param_1 << 0x3f) >> 0x1f) | ((*param_1 << 0x1f) >> 0x20)) ^ ((*param_1 << 0x2c) >> 0x20)) >> 0x14) & 0xfff; - // return (s32)(*param_1); - - // best -O2 guess - // u64 t = ((*param_1 << 0x3f) >> 0x1f); - // t |= ((*param_1 << 0x1f) >> 0x20); - // t ^= ((*param_1 << 0x2c) >> 0x20); - // t = *param_1 ^ ((t >> 0x14) & 0xfff); - // *param_1 = t; - // return (s32)(t); -} -#else -GLOBAL_ASM( -.text -glabel randomGetNextFrom -/* 00B0AC 7000A4AC DC870000 */ ld $a3, ($a0) -/* 00B0B0 7000A4B0 000737FC */ dsll32 $a2, $a3, 0x1f -/* 00B0B4 7000A4B4 00072FF8 */ dsll $a1, $a3, 0x1f -/* 00B0B8 7000A4B8 000637FA */ dsrl $a2, $a2, 0x1f -/* 00B0BC 7000A4BC 0005283E */ dsrl32 $a1, $a1, 0 -/* 00B0C0 7000A4C0 00073B3C */ dsll32 $a3, $a3, 0xc -/* 00B0C4 7000A4C4 00C53025 */ or $a2, $a2, $a1 -/* 00B0C8 7000A4C8 0007383E */ dsrl32 $a3, $a3, 0 -/* 00B0CC 7000A4CC 00C73026 */ xor $a2, $a2, $a3 -/* 00B0D0 7000A4D0 00063D3A */ dsrl $a3, $a2, 0x14 -/* 00B0D4 7000A4D4 30E70FFF */ andi $a3, $a3, 0xfff -/* 00B0D8 7000A4D8 00E63826 */ xor $a3, $a3, $a2 -/* 00B0DC 7000A4DC 0007103C */ dsll32 $v0, $a3, 0 -/* 00B0E0 7000A4E0 FC870000 */ sd $a3, ($a0) -/* 00B0E4 7000A4E4 03E00008 */ jr $ra -/* 00B0E8 7000A4E8 0002103F */ dsra32 $v0, $v0, 0 -) -#endif - - - diff --git a/src/random.h b/src/random.h index 232add96..ad813084 100644 --- a/src/random.h +++ b/src/random.h @@ -2,6 +2,8 @@ #define _RANDOM_H_ #include +extern u64 g_randomSeed; + void randomSetSeed(u32 param_1); u32 randomGetNext(void); u32 randomGetNextFrom(u64 *param_1); diff --git a/src/random.s b/src/random.s new file mode 100644 index 00000000..192e90fb --- /dev/null +++ b/src/random.s @@ -0,0 +1,58 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .data +.balign 8 +glabel g_randomSeed +.word 0xAB8D9F77 +.word 0x81280783 + +.section .text, "ax" +glabel randomGetNext +/* 00B050 7000A450 3C048002 */ lui $a0, %hi(g_randomSeed) +/* 00B054 7000A454 DC844460 */ ld $a0, %lo(g_randomSeed)($a0) +/* 00B058 7000A458 3C018002 */ lui $at, %hi(g_randomSeed) +/* 00B05C 7000A45C 000437FC */ dsll32 $a2, $a0, 0x1f +/* 00B060 7000A460 00042FF8 */ dsll $a1, $a0, 0x1f +/* 00B064 7000A464 000637FA */ dsrl $a2, $a2, 0x1f +/* 00B068 7000A468 0005283E */ dsrl32 $a1, $a1, 0 +/* 00B06C 7000A46C 0004233C */ dsll32 $a0, $a0, 0xc +/* 00B070 7000A470 00C53025 */ or $a2, $a2, $a1 +/* 00B074 7000A474 0004203E */ dsrl32 $a0, $a0, 0 +/* 00B078 7000A478 00C43026 */ xor $a2, $a2, $a0 +/* 00B07C 7000A47C 0006253A */ dsrl $a0, $a2, 0x14 +/* 00B080 7000A480 30840FFF */ andi $a0, $a0, 0xfff +/* 00B084 7000A484 00862026 */ xor $a0, $a0, $a2 +/* 00B088 7000A488 0004103C */ dsll32 $v0, $a0, 0 +/* 00B08C 7000A48C FC244460 */ sd $a0, %lo(g_randomSeed)($at) +/* 00B090 7000A490 03E00008 */ jr $ra +/* 00B094 7000A494 0002103F */ dsra32 $v0, $v0, 0 + +glabel randomSetSeed +/* 00B098 7000A498 64840001 */ daddiu $a0, $a0, 1 +/* 00B09C 7000A49C 3C018002 */ lui $at, %hi(g_randomSeed) +/* 00B0A0 7000A4A0 FC244460 */ sd $a0, %lo(g_randomSeed)($at) +/* 00B0A4 7000A4A4 03E00008 */ jr $ra +/* 00B0A8 7000A4A8 24040000 */ li $a0, 0 + +glabel randomGetNextFrom +/* 00B0AC 7000A4AC DC870000 */ ld $a3, ($a0) +/* 00B0B0 7000A4B0 000737FC */ dsll32 $a2, $a3, 0x1f +/* 00B0B4 7000A4B4 00072FF8 */ dsll $a1, $a3, 0x1f +/* 00B0B8 7000A4B8 000637FA */ dsrl $a2, $a2, 0x1f +/* 00B0BC 7000A4BC 0005283E */ dsrl32 $a1, $a1, 0 +/* 00B0C0 7000A4C0 00073B3C */ dsll32 $a3, $a3, 0xc +/* 00B0C4 7000A4C4 00C53025 */ or $a2, $a2, $a1 +/* 00B0C8 7000A4C8 0007383E */ dsrl32 $a3, $a3, 0 +/* 00B0CC 7000A4CC 00C73026 */ xor $a2, $a2, $a3 +/* 00B0D0 7000A4D0 00063D3A */ dsrl $a3, $a2, 0x14 +/* 00B0D4 7000A4D4 30E70FFF */ andi $a3, $a3, 0xfff +/* 00B0D8 7000A4D8 00E63826 */ xor $a3, $a3, $a2 +/* 00B0DC 7000A4DC 0007103C */ dsll32 $v0, $a3, 0 +/* 00B0E0 7000A4E0 FC870000 */ sd $a3, ($a0) +/* 00B0E4 7000A4E4 03E00008 */ jr $ra +/* 00B0E8 7000A4E8 0002103F */ dsra32 $v0, $v0, 0 \ No newline at end of file diff --git a/src/snd.c b/src/snd.c index 6c986637..7ade16dd 100644 --- a/src/snd.c +++ b/src/snd.c @@ -242,1235 +242,282 @@ ALMicroTime sndPlayerVoiceHandler(void *node) } -/** - * 8A80 70007E80 - * - * Draws inspiration from n64devkit\ultra\usr\src\pr\libsrc\libultra\audio\sndplayer.c - * method _handleEvent - * - * decomp status: - * - compiles: yes - * - stack resize: ok - * - identical instructions: yes - * - identical registers: fail - * - * Notes: - * - all floating point registers match - * - there's a few places with temp variables and MIN,MAX macros, stuffing it all into one - * line generally causes increase of +2 lines to match, but the temp registers seem - * to get more shifted. I don't know if that's an improvement. - * - ran decomp-permuter on the whole method for ~12 hours, and then targetting just - * the areas before and after the switch block for ~12 hours, but it never found - * any improvements. - * - there's an assigment `voice = &state->voice;` that I factored out. Doesn't seem - * to make a difference, it's present in sndplayer.c _handleEvent ... - */ -#ifdef NONMATCHING -// https://decomp.me/scratch/2v3fu 97.63% -void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) -{ - // declarations +void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) { + ALVoiceConfig config; + ALVoice *voice; // dead but load-bearing. Do not remove. + s32 delta; + s32 limitReached; + ALSndpEvent spAC; + ALSndpEvent nextStateEvent; + ALSound *sound; + ALKeyMap *keyMap; + s32 volume; + s32 fxMix; + s32 isEventForSingleSound; + ALPan pan; + s32 lastInSequence; + s32 isVoiceAllocated; + ALSoundState *soundState; + ALSoundState *nextState; - //// - //// "..." means not explicitly referenced by stack offset - //// - ALVoiceConfig vc; // sp 0xc8; priority=200, fxBus=202, unityPitch=204 - ALSoundState *state; // ... - ALSoundState *tstate; // ... - s32 stack_size_3; // ... - ALVoice *voice_factored_out; // ... - s16 tmp; // ... - s16 vol; // ... - union ALSndpSmallEvent_u stopEvent; // sp 0xac = 172,176 - ALSndpEvent evt; // sp 0x9c; 156,160,164,168 - ALSound *snd; // ... - ALKeyMap *keyMap; // ... - s32 vtmp; // sp 0x90 = 144 - ALMicroTime delta; // ... - s32 msgtype; // ... - u8 aaa; // using "pan" u8 space - ALPan pan; // ... - s32 done_state; // sp 0x80 = 128 - s32 allocVoiceSuccess; // sp 0x7c = 124 - ALSoundState *prevState; // sp 0x78 = 120 - ALSoundState *nextState; // sp 0x74 = 116 ; could also be ALLink (with sp78) - s16 sp72; // sp 0x72 = 114 - s16 sp70; // sp 0x70 = 112 - ALSoundState *loopCheckVar[1]; // sp 0x6c = 108 - s32 compare_result; // ... - s32 stack_size_4; - union ALSndpSmallEvent_u playAllocEvent; // sp 0x5c = 92,96 - - // done with declarations - - done_state = 1; - allocVoiceSuccess = 0; + lastInSequence = TRUE; + isVoiceAllocated = FALSE; nextState = NULL; - // // typo/mistake, prevState is unitialized. - state = (void*)prevState; - while (1) - { - if (nextState) - { - evt.common.state = state; - evt.common.type = event->common.type; - evt.unks32.val8 = event->unks32.val8; - event = (ALSndpEvent *)&evt; + do { + if (nextState != NULL) { + // NB: soundState is uninitialised on the first pass — original bug, preserved. + nextStateEvent.common.state = soundState; + nextStateEvent.common.type = event->common.type; + nextStateEvent.vol.vol = event->vol.vol; + event = &nextStateEvent; } - state = event->common.state; - snd = state->sound; + soundState = event->common.state; + sound = soundState->sound; - if (snd == NULL) - { - sndCountAllocList(&sp72, &sp70); + if (sound == NULL) { + s16 numFree, numAlloc; + sndCountAllocList(&numFree, &numAlloc); return; } - keyMap = snd->keyMap; - nextState = (ALSoundState *)state->link.next; + keyMap = sound->keyMap; + nextState = (ALSoundState *) soundState->link.next; - switch (event->common.type) - { - case (AL_SNDP_PLAY_EVT): - { - if ((state->playingState == AL_UNKOWN_5) || (state->playingState == AL_UNKOWN_4)) - { - // comment copied from sndplayer: effect buss 0 - vc.fxBus = 0; - vc.priority = state->priority; - vc.unityPitch = 0; - //voice = &state->voice; - - compare_result = ((s32)g_sndAllocatedVoicesCount >= sndp->maxSounds); - - if ((!compare_result) || (state->unk3e & 0x10)) - { - allocVoiceSuccess = alSynAllocVoice(sndp->drvr, &state->voice, &vc); - } - - if (!allocVoiceSuccess) - { - if ((state->unk3e & 0x12) || (state->unk38 > 0)) - { - state->playingState = AL_UNKOWN_4; - state->unk38--; - alEvtqPostEvent(&sndp->evtq, (ALEvent*)event, DELTA_33_MS); - - return; - } - - if (compare_result) - { - tstate = (ALSoundState*)D_800243E4.node.prev; - do - { - if ( - ((state->unk3e & 0x12) == 0) - && (state->unk3e & 4) - && (tstate->playingState != AL_UNKOWN_3)) - { - playAllocEvent.common.type = AL_SNDP_END_EVT; - playAllocEvent.msg.state = tstate; - tstate->playingState = AL_UNKOWN_3; - compare_result = 0; - loopCheckVar[0] = tstate; - - alEvtqPostEvent(&sndp->evtq, (ALEvent *)&playAllocEvent, DELTA_1_MS); - - tstate = loopCheckVar[0]; - //voice = &tstate->voice; - alSynSetVol(sndp->drvr, (ALVoice*)&tstate->voice, 0, DELTA_1_MS); - - tstate = loopCheckVar[0]; - } - - tstate = (ALSoundState *)tstate->link.prev; - } - while (compare_result != 0 && tstate != NULL); - - if (compare_result == 0) - { - state->unk38 = 2; - alEvtqPostEvent(&sndp->evtq, (ALEvent*)event, DELTA_1_MS + 1); - return; - } - - sndDisposeSound(state); - return; - } - - sndDisposeSound(state); - return; - } - - state->unk3e = state->unk3e | 4; - alSynStartVoice(sndp->drvr, &state->voice, snd->wavetable); - - state->playingState = AL_PLAYING; - g_sndAllocatedVoicesCount++; - - delta = (ALMicroTime)((f32)snd->envelope->attackTime / state->pitch_2c / state->pitch_28); - - aaa = keyMap->keyMin & 0x3f; - tmp = g_sndSfxSlotVolume[aaa]; - vol = state->vol; - vtmp = ((vol * (snd->envelope->attackVolume * snd->sampleVolume)) / (AL_VOL_FULL * AL_VOL_FULL)) * tmp; - vtmp = vtmp / 0x7fff; - vtmp = MAX(0, vtmp - 1); - - // vtmp = MAX(0, (vol * (snd->envelope->attackVolume * snd->sampleVolume) - // / (AL_VOL_FULL * AL_VOL_FULL) - // * tmp - // / 0x7fff) - 1); - - alSynSetVol(sndp->drvr, &state->voice, 0, 0); - alSynSetVol(sndp->drvr, &state->voice, vtmp, delta); - - vtmp = state->pan - AL_PAN_CENTER + snd->samplePan; - pan = (ALPan) MIN(MAX(vtmp, AL_PAN_LEFT), AL_PAN_RIGHT); - //pan = (ALPan) MIN(MAX(state->pan - AL_PAN_CENTER + snd->samplePan, AL_PAN_LEFT), AL_PAN_RIGHT); - - alSynSetPan(sndp->drvr, &state->voice, pan); - alSynSetPitch(sndp->drvr, &state->voice, state->pitch_2c * state->pitch_28); - - vtmp = (state->fxMix + (keyMap->keyMax & 0xf)) * 8; - vtmp = MIN(AL_VOL_FULL, MAX(AL_DEFAULT_FXMIX, vtmp)); - //vtmp = MIN(AL_VOL_FULL, MAX(AL_DEFAULT_FXMIX, (state->fxMix + (keyMap->keyMax & 0xf)) * 8)); - alSynSetFXMix(sndp->drvr, &state->voice, vtmp); - - stopEvent.common.type = AL_SNDP_DECAY_EVT; - stopEvent.msg.state = state; - delta = (ALMicroTime)((f32)snd->envelope->attackTime / state->pitch_2c / state->pitch_28); - alEvtqPostEvent(&sndp->evtq, (ALEvent *)&stopEvent, delta); - } - else - { + switch (event->common.type) { + case AL_SNDP_PLAY_EVT: + if (1) {} // fake to get s5/s6 swapped + if (soundState->playingState != SOUND_STATE_INIT && soundState->playingState != SOUND_STATE_WAIT_VOICE) { return; } - } - break; - case (AL_SNDP_DEACTIVATE_EVT): // fallthrough - case (AL_SNDP_UNKNOWN_12_EVT): // fallthrough - case (AL_SNDP_STOP_EVT): - { - if (event->common.type != AL_SNDP_UNKNOWN_12_EVT - || (state->unk3e & 0x2) - ) - { - switch (state->playingState) - { - case (AL_PLAYING): - { - sndRemoveEvents(&sndp->evtq, state, AL_SNDP_DECAY_EVT); + config.fxBus = 0; + config.priority = soundState->priority; + config.unityPitch = 0; - delta = (ALMicroTime)((f32)snd->envelope->releaseTime / state->pitch_28 / state->pitch_2c); - alSynSetVol(sndp->drvr, (ALVoice *)&state->voice, 0, delta); + limitReached = sndp->maxSounds <= g_sndAllocatedVoicesCount; - if (delta) - { - stopEvent.common.type = AL_SNDP_END_EVT; - stopEvent.msg.state = state; - alEvtqPostEvent(&sndp->evtq, (ALEvent *)&stopEvent, delta); - state->playingState = AL_STOPPING; - } - else - { - sndDisposeSound(state); + if (!limitReached || (soundState->unk3e & SOUND_FLAG_RETRIGGER)) { + // for retriggered sounds, ignore the limit + isVoiceAllocated = alSynAllocVoice(sndp->drvr, &soundState->voice, &config); + } + + if (!isVoiceAllocated) { + // No free voices available, wait for another sound to stop. + if ((soundState->unk3e & (SOUND_FLAG_RETRIGGER | SOUND_FLAG_LOOPED)) || soundState->unk38 > 0) { + // Retry on the next frame. + // For looped and retriggered sounds, keep retrying on each frame. + soundState->playingState = SOUND_STATE_WAIT_VOICE; + soundState->unk38--; + alEvtqPostEvent(&sndp->evtq, (ALEvent *) event, DELTA_33_MS); + } else { + // Not a looped or retriggered sound, and all retries have been exhausted. + if (limitReached) { + // Check if we can preempt a lower-priority sound. + ALSoundState *iterState = (ALSoundState *) D_800243E4.node.prev; + + do { + if (!(iterState->unk3e & 0x12) && (iterState->unk3e & 0x4) && + iterState->playingState != SOUND_STATE_PREEMPT) { + // Found a lower-priority sound; it can be preempted + ALSndpEvent interruptEvent; + + interruptEvent.common.type = AL_SNDP_END_EVT; + interruptEvent.common.state = iterState; + iterState->playingState = SOUND_STATE_PREEMPT; + limitReached = FALSE; + alEvtqPostEvent(&sndp->evtq, (ALEvent *) &interruptEvent, DELTA_1_MS); + alSynSetVol(sndp->drvr, &iterState->voice, (soundState->playingState == 1) * 0, DELTA_1_MS); // FAKE + } + iterState = (ALSoundState *) iterState->link.prev; + } while (limitReached && iterState != NULL); + + if (!limitReached) { + // Retry the sound that was preempted. + soundState->unk38 = 2; + alEvtqPostEvent(&sndp->evtq, (ALEvent *) event, DELTA_1_MS + 1); + } else { + // No lower-priority sound to preempt, so stop the sound. + sndDisposeSound(soundState); } + } else { + // It seems the developers made a mistake with the logic here. + // Should we stop the sound immediately if the maximum number of sounds hasn't been reached? + // Perhaps it would be better to look for a sound to preempt, just like when the limit is + // reached. It's strange that we only check for sounds to preempt when the limit is reached, + // but not when it hasn't been. + sndDisposeSound(soundState); } - break; - - case (AL_UNKOWN_4): // fallthrough - case (AL_UNKOWN_5): - { - sndDisposeSound(state); - } - break; - - default: - // nothing to do - break; } + return; + } - if (event->common.type == AL_SNDP_STOP_EVT) - { + // Set volume + soundState->unk3e |= SOUND_FLAG_PLAYING; + alSynStartVoice(sndp->drvr, &soundState->voice, sound->wavetable); + soundState->playingState = SOUND_STATE_PLAYING; + g_sndAllocatedVoicesCount++; + + delta = sound->envelope->attackTime / soundState->pitch_2c / soundState->pitch_28; + volume = + MAX(0, g_sndSfxSlotVolume[SOUND_PARAM_GROUP(keyMap)] * + (sound->envelope->attackVolume * soundState->vol * sound->sampleVolume / 16129) / + AL_SNDP_GROUP_VOLUME_MAX - 1); + alSynSetVol(sndp->drvr, &soundState->voice, 0, 0); + alSynSetVol(sndp->drvr, &soundState->voice, volume, delta); + + // Set pan + pan = MIN(MAX((soundState->pan + sound->samplePan - AL_PAN_CENTER), AL_PAN_LEFT), AL_PAN_RIGHT); + alSynSetPan(sndp->drvr, &soundState->voice, pan); + + // Set pitch + alSynSetPitch(sndp->drvr, &soundState->voice, soundState->pitch_2c * soundState->pitch_28); + + // Set FX mix + //!@bug: SOUND_PARAM_FXMIX is allocated only four bits, so it needs to be multiplied by 8 + // to scale it to a range of 0 to 127. + // However, it's unclear why soundState->fxmix also needs to be multiplied by 8. + // The same issue appears in the AL_SNDP_FX_EVT handler. + fxMix = (soundState->fxMix + SOUND_PARAM_FXMIX(keyMap)) * 8; + fxMix = MIN(127, MAX(0, fxMix)); + alSynSetFXMix(sndp->drvr, &soundState->voice, fxMix); + + // Queue the decay event + spAC.common.type = AL_SNDP_DECAY_EVT; + spAC.common.state = soundState; + alEvtqPostEvent(&sndp->evtq, (ALEvent *) &spAC, + sound->envelope->attackTime / soundState->pitch_2c / soundState->pitch_28); + break; + case AL_SNDP_STOP_EVT: + case AL_SNDP_DEACTIVATE_EVT: + case AL_SNDP_UNKNOWN_12_EVT: + // If any sound in the composite sound is in the release phase, ignore this event for all other sounds + // in the sequence, because they haven't started yet. + // However, if the other sound is looped, process the event anyway. + // + // The purpose of checking for a looped sound seems unclear. + // Does it imply that a composite sound can't contain looped simple sounds? + // It seems logical, but the check may still be redundant. + if (event->common.type != AL_SNDP_UNKNOWN_12_EVT || (soundState->unk3e & SOUND_FLAG_LOOPED)) { + switch (soundState->playingState) { + case SOUND_STATE_PLAYING: + sndRemoveEvents(&sndp->evtq, soundState, AL_SNDP_DECAY_EVT); + delta = sound->envelope->releaseTime / soundState->pitch_28 / soundState->pitch_2c; + alSynSetVol(sndp->drvr, &soundState->voice, 0, delta); + if (delta != 0) { + spAC.common.type = AL_SNDP_END_EVT; + spAC.common.state = soundState; + alEvtqPostEvent(&sndp->evtq, (ALEvent *) &spAC, delta); + soundState->playingState = SOUND_STATE_STOPPING; + } else { + sndDisposeSound(soundState); + } + break; + case SOUND_STATE_WAIT_VOICE: + case SOUND_STATE_INIT: + sndDisposeSound(soundState); + break; + } + if (event->common.type == AL_SNDP_STOP_EVT) { event->common.type = AL_SNDP_UNKNOWN_12_EVT; } } - } - break; - - case (AL_SNDP_PAN_EVT): - { - state->pan = event->pan32.pan32; - - if (state->playingState == AL_PLAYING) - { - vtmp = state->pan - AL_PAN_CENTER + snd->samplePan; - pan = (ALPan) MIN(MAX(vtmp, AL_PAN_LEFT), AL_PAN_RIGHT); - //pan = (ALPan) MIN(MAX(state->pan - AL_PAN_CENTER + snd->samplePan, AL_PAN_LEFT), AL_PAN_RIGHT); - - alSynSetPan(sndp->drvr, &state->voice, pan); + break; + case AL_SNDP_PAN_EVT: + soundState->pan = event->pan32.pan32; + if (soundState->playingState == SOUND_STATE_PLAYING) { + pan = MIN(MAX((soundState->pan + sound->samplePan - AL_PAN_CENTER), AL_PAN_LEFT), AL_PAN_RIGHT); + alSynSetPan(sndp->drvr, &soundState->voice, pan); } - } - break; - - case (AL_SNDP_PITCH_EVT): - { - state->pitch_2c = event->pitch.pitch; - - if (state->playingState == AL_PLAYING) - { - alSynSetPitch(sndp->drvr, &state->voice, state->pitch_2c * state->pitch_28); - - if (state->unk3e & 0x20) - { - sndCreatePitchEvent(state); + break; + case AL_SNDP_PITCH_EVT: + soundState->pitch_2c = event->pitch.pitch; + if (soundState->playingState == SOUND_STATE_PLAYING) { + alSynSetPitch(sndp->drvr, &soundState->voice, soundState->pitch_2c * soundState->pitch_28); + if (soundState->unk3e & SOUND_FLAG_PITCH_SLIDE) { + sndCreatePitchEvent(soundState); } } - } - break; - - case (AL_SNDP_FX_EVT): - { - state->fxMix = event->fx32.mix32; - - if (state->playingState == AL_PLAYING) - { - vtmp = (state->fxMix + (keyMap->keyMax & 0xf)) * 8; - vtmp = MIN(AL_VOL_FULL, MAX(AL_DEFAULT_FXMIX, vtmp)); - //vtmp = MIN(AL_VOL_FULL, MAX(AL_DEFAULT_FXMIX, (state->fxMix + (keyMap->keyMax & 0xf)) * 8)); - - alSynSetFXMix(sndp->drvr, &state->voice, vtmp); + break; + case AL_SNDP_FX_EVT: + soundState->fxMix = event->fx32.mix32; + if (soundState->playingState == SOUND_STATE_PLAYING) { + //!@bug: unnecessary multiplication by 8, as in AL_SNDP_PLAY_EVT. + // The same issue appears in the AL_SNDP_PLAY_EVT handler. + fxMix = (soundState->fxMix + SOUND_PARAM_FXMIX(keyMap)) * 8; + fxMix = MIN(127, MAX(0, fxMix)); + alSynSetFXMix(sndp->drvr, &soundState->voice, fxMix); } - } - break; - - case (AL_SNDP_VOL_EVT): - { - state->vol = event->vol.vol; - if (state->playingState == AL_PLAYING) - { - tmp = g_sndSfxSlotVolume[keyMap->keyMin & 0x3f]; - vol = state->vol; - vtmp = - vol * (snd->envelope->decayVolume * snd->sampleVolume) - / (AL_VOL_FULL * AL_VOL_FULL) - * tmp - / 0x7fff; - vtmp = MAX(0, vtmp - 1); - - // vtmp = MAX(0, (vol * (snd->envelope->decayVolume * snd->sampleVolume) - // / (AL_VOL_FULL * AL_VOL_FULL) - // * tmp - // / 0x7fff) - 1); - - alSynSetVol(sndp->drvr, (ALVoice *)&state->voice, vtmp, DELTA_1_MS); + break; + case AL_SNDP_VOL_EVT: + soundState->vol = event->vol.vol; + if (soundState->playingState == SOUND_STATE_PLAYING) { + volume = MAX( + 0, g_sndSfxSlotVolume[SOUND_PARAM_GROUP(keyMap)] * + (sound->envelope->decayVolume * soundState->vol * sound->sampleVolume / 16129) / + AL_SNDP_GROUP_VOLUME_MAX - + 1); + alSynSetVol(sndp->drvr, &soundState->voice, volume, 1000); } - } - break; - - // case 0x20 (AL_SNDP_API_EVT) - // handled in sndPlayerVoiceHandler - - case (AL_SNDP_RELEASE_EVT): - { - if (state->playingState == AL_PLAYING) - { - delta = ((f32)snd->envelope->releaseTime / state->pitch_28 / state->pitch_2c); - - tmp = g_sndSfxSlotVolume[keyMap->keyMin & 0x3f]; - vol = state->vol; - vtmp = - vol * (snd->envelope->decayVolume * snd->sampleVolume) - / (AL_VOL_FULL * AL_VOL_FULL) - * tmp - / 0x7fff; - vtmp = MAX(0, vtmp - 1); - - // vtmp = MAX(0, (vol * (snd->envelope->decayVolume * snd->sampleVolume) - // / (AL_VOL_FULL * AL_VOL_FULL) - // * tmp - // / 0x7fff) - 1); - - alSynSetVol(sndp->drvr, &state->voice, vtmp, delta); + break; + case AL_SNDP_RELEASE_EVT: + if (soundState->playingState == SOUND_STATE_PLAYING) { + delta = sound->envelope->releaseTime / soundState->pitch_28 / soundState->pitch_2c; + volume = MAX( + 0, g_sndSfxSlotVolume[SOUND_PARAM_GROUP(keyMap)] * + (sound->envelope->decayVolume * soundState->vol * sound->sampleVolume / 16129) / + AL_SNDP_GROUP_VOLUME_MAX - + 1); + alSynSetVol(sndp->drvr, &soundState->voice, volume, delta); } - } - break; + break; + case AL_SNDP_DECAY_EVT: + /* + * The voice has theoretically reached its attack velocity, + * set up callback for release envelope - except for a looped sound + */ + if (!(soundState->unk3e & SOUND_FLAG_LOOPED)) { + volume = MAX( + 0, g_sndSfxSlotVolume[SOUND_PARAM_GROUP(keyMap)] * + (sound->envelope->decayVolume * soundState->vol * sound->sampleVolume / 16129) / + AL_SNDP_GROUP_VOLUME_MAX - + 1); + delta = sound->envelope->decayTime / soundState->pitch_28 / soundState->pitch_2c; + alSynSetVol(sndp->drvr, &soundState->voice, volume, delta); - case (AL_SNDP_DECAY_EVT): - { - if ((state->unk3e & 2) == 0) - { - tmp = g_sndSfxSlotVolume[keyMap->keyMin & 0x3f]; - vol = state->vol; - vtmp = - (vol * (snd->envelope->decayVolume * snd->sampleVolume) - / (AL_VOL_FULL * AL_VOL_FULL)) - * tmp - / 0x7fff; + spAC.common.type = AL_SNDP_STOP_EVT; + spAC.common.state = soundState; + alEvtqPostEvent(&sndp->evtq, (ALEvent *) &spAC, delta); - vtmp = MAX(0, vtmp - 1); - - // can't seem to combine this volume computation into one line with the macro. - - delta = (ALMicroTime)((f32)snd->envelope->decayTime / state->pitch_28 / state->pitch_2c); - alSynSetVol(sndp->drvr, &state->voice, vtmp, delta); - - stopEvent.common.type = AL_SNDP_STOP_EVT; - stopEvent.msg.state = state; - alEvtqPostEvent(&sndp->evtq, (ALEvent *)&stopEvent, delta); - - if ((state->unk3e & 0x20) != 0) - { - sndCreatePitchEvent(state); + // Start applying the pitch slide only when the decay phase is reached. + if (soundState->unk3e & SOUND_FLAG_PITCH_SLIDE) { + sndCreatePitchEvent(soundState); } } - } - break; - - case (AL_SNDP_END_EVT): - { - sndDisposeSound(state); - } - break; - - case (AL_SNDP_PLAY_SFX_EVT): - { - if ((state->unk3e & 0x10) != 0) - { - sndPlaySfx((struct ALBankAlt_s *)event->playSfx.soundBank, event->playSfx.soundIndex, state->state); + break; + case AL_SNDP_END_EVT: + sndDisposeSound(soundState); + break; + case AL_SNDP_PLAY_SFX_EVT: + if (soundState->unk3e & SOUND_FLAG_RETRIGGER) { + sndPlaySfx(event->playSfx.soundBank, event->playSfx.soundIndex, soundState->state); } - } - break; - + break; default: - // not supported - break; + break; } - msgtype = event->common.type & 0x2d1; - state = nextState; + soundState = nextState; + isEventForSingleSound = event->common.type & (AL_SNDP_PLAY_EVT | AL_SNDP_PITCH_EVT | AL_SNDP_DECAY_EVT | + AL_SNDP_END_EVT | AL_SNDP_PLAY_SFX_EVT); - if (state == NULL || msgtype != 0) - { - // do nothing - } - else - { - done_state = - // best guess at cast to get offset 0x3e ... - ((ALSoundState*)event)->unk3e & 0x1; + if (soundState != NULL && !isEventForSingleSound) { + lastInSequence = soundState->unk3e & SOUND_FLAG_FINAL_IN_SEQUENCE; } - if (done_state || state == NULL) - { - break; - } - else if (msgtype == 0) - { - continue; - } - else - { - prevState = state; - break; - } - } - - if (prevState) - { - // removed - } + } while (!lastInSequence && soundState != NULL && !isEventForSingleSound); } -#else -GLOBAL_ASM( -.text -glabel sndHandleEvent -/* 008A80 70007E80 27BDFF30 */ addiu $sp, $sp, -0xd0 -/* 008A84 70007E84 AFBE0038 */ sw $fp, 0x38($sp) -/* 008A88 70007E88 AFB70034 */ sw $s7, 0x34($sp) -/* 008A8C 70007E8C AFB5002C */ sw $s5, 0x2c($sp) -/* 008A90 70007E90 AFB1001C */ sw $s1, 0x1c($sp) -/* 008A94 70007E94 240E0001 */ li $t6, 1 -/* 008A98 70007E98 00A0A825 */ move $s5, $a1 -/* 008A9C 70007E9C 0080B825 */ move $s7, $a0 -/* 008AA0 70007EA0 AFBF003C */ sw $ra, 0x3c($sp) -/* 008AA4 70007EA4 AFB60030 */ sw $s6, 0x30($sp) -/* 008AA8 70007EA8 AFB40028 */ sw $s4, 0x28($sp) -/* 008AAC 70007EAC AFB30024 */ sw $s3, 0x24($sp) -/* 008AB0 70007EB0 AFB20020 */ sw $s2, 0x20($sp) -/* 008AB4 70007EB4 AFB00018 */ sw $s0, 0x18($sp) -/* 008AB8 70007EB8 AFAE0080 */ sw $t6, 0x80($sp) -/* 008ABC 70007EBC AFA0007C */ sw $zero, 0x7c($sp) -/* 008AC0 70007EC0 AFA00074 */ sw $zero, 0x74($sp) -/* 008AC4 70007EC4 8FB10078 */ lw $s1, 0x78($sp) -/* 008AC8 70007EC8 241E0001 */ li $fp, 1 -/* 008ACC 70007ECC 8FAF0074 */ lw $t7, 0x74($sp) -.L70007ED0: -/* 008AD0 70007ED0 51E00008 */ beql $t7, $zero, .L70007EF4 -/* 008AD4 70007ED4 8EB10004 */ lw $s1, 4($s5) -/* 008AD8 70007ED8 AFB100A0 */ sw $s1, 0xa0($sp) -/* 008ADC 70007EDC 96B80000 */ lhu $t8, ($s5) -/* 008AE0 70007EE0 A7B8009C */ sh $t8, 0x9c($sp) -/* 008AE4 70007EE4 8EB90008 */ lw $t9, 8($s5) -/* 008AE8 70007EE8 27B5009C */ addiu $s5, $sp, 0x9c -/* 008AEC 70007EEC AFB900A4 */ sw $t9, 0xa4($sp) -/* 008AF0 70007EF0 8EB10004 */ lw $s1, 4($s5) -.L70007EF4: -/* 008AF4 70007EF4 8E320008 */ lw $s2, 8($s1) -/* 008AF8 70007EF8 16400005 */ bnez $s2, .L70007F10 -/* 008AFC 70007EFC 27A40072 */ addiu $a0, $sp, 0x72 -/* 008B00 70007F00 0C0022BC */ jal sndCountAllocList -/* 008B04 70007F04 27A50070 */ addiu $a1, $sp, 0x70 -/* 008B08 70007F08 10000284 */ b .L7000891C -/* 008B0C 70007F0C 8FBF003C */ lw $ra, 0x3c($sp) -.L70007F10: -/* 008B10 70007F10 8E280000 */ lw $t0, ($s1) -/* 008B14 70007F14 8E560004 */ lw $s6, 4($s2) -/* 008B18 70007F18 AFA80074 */ sw $t0, 0x74($sp) -/* 008B1C 70007F1C 96A30000 */ lhu $v1, ($s5) -/* 008B20 70007F20 28610101 */ slti $at, $v1, 0x101 -/* 008B24 70007F24 1420000C */ bnez $at, .L70007F58 -/* 008B28 70007F28 00601025 */ move $v0, $v1 -/* 008B2C 70007F2C 24010200 */ li $at, 512 -/* 008B30 70007F30 1041025D */ beq $v0, $at, .L700088A8 -/* 008B34 70007F34 24010400 */ li $at, 1024 -/* 008B38 70007F38 10410113 */ beq $v0, $at, .L70008388 -/* 008B3C 70007F3C 24010800 */ li $at, 2048 -/* 008B40 70007F40 104101D3 */ beq $v0, $at, .L70008690 -/* 008B44 70007F44 24011000 */ li $at, 4096 -/* 008B48 70007F48 50410110 */ beql $v0, $at, .L7000838C -/* 008B4C 70007F4C 24011000 */ li $at, 4096 -/* 008B50 70007F50 10000261 */ b .L700088D8 -/* 008B54 70007F54 306202D1 */ andi $v0, $v1, 0x2d1 -.L70007F58: -/* 008B58 70007F58 28410041 */ slti $at, $v0, 0x41 -/* 008B5C 70007F5C 14200007 */ bnez $at, .L70007F7C -/* 008B60 70007F60 24010080 */ li $at, 128 -/* 008B64 70007F64 1041024A */ beq $v0, $at, .L70008890 -/* 008B68 70007F68 24010100 */ li $at, 256 -/* 008B6C 70007F6C 50410177 */ beql $v0, $at, .L7000854C -/* 008B70 70007F70 922E003F */ lbu $t6, 0x3f($s1) -/* 008B74 70007F74 10000258 */ b .L700088D8 -/* 008B78 70007F78 306202D1 */ andi $v0, $v1, 0x2d1 -.L70007F7C: -/* 008B7C 70007F7C 28410011 */ slti $at, $v0, 0x11 -/* 008B80 70007F80 14200006 */ bnez $at, .L70007F9C -/* 008B84 70007F84 2449FFFF */ addiu $t1, $v0, -1 -/* 008B88 70007F88 24010040 */ li $at, 64 -/* 008B8C 70007F8C 504101F8 */ beql $v0, $at, .L70008770 -/* 008B90 70007F90 9239003E */ lbu $t9, 0x3e($s1) -/* 008B94 70007F94 10000250 */ b .L700088D8 -/* 008B98 70007F98 306202D1 */ andi $v0, $v1, 0x2d1 -.L70007F9C: -/* 008B9C 70007F9C 2D210010 */ sltiu $at, $t1, 0x10 -/* 008BA0 70007FA0 1020024C */ beqz $at, .L700088D4 -/* 008BA4 70007FA4 00094880 */ sll $t1, $t1, 2 -/* 008BA8 70007FA8 3C018003 */ lui $at, %hi(jpt_80029160) -/* 008BAC 70007FAC 00290821 */ addu $at, $at, $t1 -/* 008BB0 70007FB0 8C299160 */ lw $t1, %lo(jpt_80029160)($at) # lw $t1, -0x6ea0($at) -/* 008BB4 70007FB4 01200008 */ jr $t1 -/* 008BB8 70007FB8 00000000 */ nop -glabel .L70007FBC -/* 008BBC 70007FBC 9222003F */ lbu $v0, 0x3f($s1) -/* 008BC0 70007FC0 24010005 */ li $at, 5 -/* 008BC4 70007FC4 3C0B8002 */ lui $t3, %hi(g_sndAllocatedVoicesCount) -/* 008BC8 70007FC8 10410003 */ beq $v0, $at, .L70007FD8 -/* 008BCC 70007FCC 24010004 */ li $at, 4 -/* 008BD0 70007FD0 54410252 */ bnel $v0, $at, .L7000891C -/* 008BD4 70007FD4 8FBF003C */ lw $ra, 0x3c($sp) -.L70007FD8: -/* 008BD8 70007FD8 A7A000CA */ sh $zero, 0xca($sp) -/* 008BDC 70007FDC 922A0036 */ lbu $t2, 0x36($s1) -/* 008BE0 70007FE0 A3A000CC */ sb $zero, 0xcc($sp) -/* 008BE4 70007FE4 856B43F4 */ lh $t3, %lo(g_sndAllocatedVoicesCount)($t3) -/* 008BE8 70007FE8 A7AA00C8 */ sh $t2, 0xc8($sp) -/* 008BEC 70007FEC 8EEC0044 */ lw $t4, 0x44($s7) -/* 008BF0 70007FF0 2625000C */ addiu $a1, $s1, 0xc -/* 008BF4 70007FF4 27A600C8 */ addiu $a2, $sp, 0xc8 -/* 008BF8 70007FF8 016C802A */ slt $s0, $t3, $t4 -/* 008BFC 70007FFC 3A100001 */ xori $s0, $s0, 1 -/* 008C00 70008000 12000005 */ beqz $s0, .L70008018 -/* 008C04 70008004 00000000 */ nop -/* 008C08 70008008 9223003E */ lbu $v1, 0x3e($s1) -/* 008C0C 7000800C 306D0010 */ andi $t5, $v1, 0x10 -/* 008C10 70008010 51A00006 */ beql $t5, $zero, .L7000802C -/* 008C14 70008014 8FAE007C */ lw $t6, 0x7c($sp) -.L70008018: -/* 008C18 70008018 0C004C96 */ jal alSynAllocVoice -/* 008C1C 7000801C 8EE40038 */ lw $a0, 0x38($s7) -/* 008C20 70008020 AFA2007C */ sw $v0, 0x7c($sp) -/* 008C24 70008024 9223003E */ lbu $v1, 0x3e($s1) -/* 008C28 70008028 8FAE007C */ lw $t6, 0x7c($sp) -.L7000802C: -/* 008C2C 7000802C 2633000C */ addiu $s3, $s1, 0xc -/* 008C30 70008030 346F0004 */ ori $t7, $v1, 4 -/* 008C34 70008034 15C00045 */ bnez $t6, .L7000814C -/* 008C38 70008038 02602825 */ move $a1, $s3 -/* 008C3C 7000803C 306F0012 */ andi $t7, $v1, 0x12 -/* 008C40 70008040 15E00004 */ bnez $t7, .L70008054 -/* 008C44 70008044 24190004 */ li $t9, 4 -/* 008C48 70008048 8E380038 */ lw $t8, 0x38($s1) -/* 008C4C 7000804C 1B00000B */ blez $t8, .L7000807C -/* 008C50 70008050 00000000 */ nop -.L70008054: -/* 008C54 70008054 8E280038 */ lw $t0, 0x38($s1) -/* 008C58 70008058 A239003F */ sb $t9, 0x3f($s1) -/* 008C5C 7000805C 26E40014 */ addiu $a0, $s7, 0x14 -/* 008C60 70008060 2509FFFF */ addiu $t1, $t0, -1 -/* 008C64 70008064 AE290038 */ sw $t1, 0x38($s1) -/* 008C68 70008068 02A02825 */ move $a1, $s5 -/* 008C6C 7000806C 0C004BBF */ jal alEvtqPostEvent -/* 008C70 70008070 34068235 */ li $a2, 33333 -/* 008C74 70008074 10000229 */ b .L7000891C -/* 008C78 70008078 8FBF003C */ lw $ra, 0x3c($sp) -.L7000807C: -/* 008C7C 7000807C 1200002F */ beqz $s0, .L7000813C -/* 008C80 70008080 3C028002 */ lui $v0, %hi(D_800243E4) -/* 008C84 70008084 8C4243E8 */ lw $v0, %lo(D_800243E4+4)($v0) -/* 008C88 70008088 27B4005C */ addiu $s4, $sp, 0x5c -/* 008C8C 7000808C 24130003 */ li $s3, 3 -/* 008C90 70008090 24120003 */ li $s2, 3 -/* 008C94 70008094 9043003E */ lbu $v1, 0x3e($v0) -.L70008098: -/* 008C98 70008098 306A0012 */ andi $t2, $v1, 0x12 -/* 008C9C 7000809C 15400016 */ bnez $t2, .L700080F8 -/* 008CA0 700080A0 306B0004 */ andi $t3, $v1, 4 -/* 008CA4 700080A4 11600014 */ beqz $t3, .L700080F8 -/* 008CA8 700080A8 00000000 */ nop -/* 008CAC 700080AC 904C003F */ lbu $t4, 0x3f($v0) -/* 008CB0 700080B0 240D0080 */ li $t5, 128 -/* 008CB4 700080B4 26E40014 */ addiu $a0, $s7, 0x14 -/* 008CB8 700080B8 124C000F */ beq $s2, $t4, .L700080F8 -/* 008CBC 700080BC 02802825 */ move $a1, $s4 -/* 008CC0 700080C0 A7AD005C */ sh $t5, 0x5c($sp) -/* 008CC4 700080C4 AFA20060 */ sw $v0, 0x60($sp) -/* 008CC8 700080C8 A053003F */ sb $s3, 0x3f($v0) -/* 008CCC 700080CC 00008025 */ move $s0, $zero -/* 008CD0 700080D0 AFA2006C */ sw $v0, 0x6c($sp) -/* 008CD4 700080D4 0C004BBF */ jal alEvtqPostEvent -/* 008CD8 700080D8 240603E8 */ li $a2, 1000 -/* 008CDC 700080DC 8FA2006C */ lw $v0, 0x6c($sp) -/* 008CE0 700080E0 8EE40038 */ lw $a0, 0x38($s7) -/* 008CE4 700080E4 00003025 */ move $a2, $zero -/* 008CE8 700080E8 240703E8 */ li $a3, 1000 -/* 008CEC 700080EC 0C004CE8 */ jal alSynSetVol -/* 008CF0 700080F0 2445000C */ addiu $a1, $v0, 0xc -/* 008CF4 700080F4 8FA2006C */ lw $v0, 0x6c($sp) -.L700080F8: -/* 008CF8 700080F8 12000003 */ beqz $s0, .L70008108 -/* 008CFC 700080FC 8C420004 */ lw $v0, 4($v0) -/* 008D00 70008100 5440FFE5 */ bnezl $v0, .L70008098 -/* 008D04 70008104 9043003E */ lbu $v1, 0x3e($v0) -.L70008108: -/* 008D08 70008108 16000008 */ bnez $s0, .L7000812C -/* 008D0C 7000810C 240E0002 */ li $t6, 2 -/* 008D10 70008110 AE2E0038 */ sw $t6, 0x38($s1) -/* 008D14 70008114 26E40014 */ addiu $a0, $s7, 0x14 -/* 008D18 70008118 02A02825 */ move $a1, $s5 -/* 008D1C 7000811C 0C004BBF */ jal alEvtqPostEvent -/* 008D20 70008120 240603E9 */ li $a2, 1001 -/* 008D24 70008124 100001FD */ b .L7000891C -/* 008D28 70008128 8FBF003C */ lw $ra, 0x3c($sp) -.L7000812C: -/* 008D2C 7000812C 0C002252 */ jal sndDisposeSound -/* 008D30 70008130 02202025 */ move $a0, $s1 -/* 008D34 70008134 100001F9 */ b .L7000891C -/* 008D38 70008138 8FBF003C */ lw $ra, 0x3c($sp) -.L7000813C: -/* 008D3C 7000813C 0C002252 */ jal sndDisposeSound -/* 008D40 70008140 02202025 */ move $a0, $s1 -/* 008D44 70008144 100001F5 */ b .L7000891C -/* 008D48 70008148 8FBF003C */ lw $ra, 0x3c($sp) -.L7000814C: -/* 008D4C 7000814C A22F003E */ sb $t7, 0x3e($s1) -/* 008D50 70008150 8E460008 */ lw $a2, 8($s2) -/* 008D54 70008154 8EE40038 */ lw $a0, 0x38($s7) -/* 008D58 70008158 0C004D10 */ jal alSynStartVoice -/* 008D5C 7000815C 26F40014 */ addiu $s4, $s7, 0x14 -/* 008D60 70008160 24180001 */ li $t8, 1 -/* 008D64 70008164 A238003F */ sb $t8, 0x3f($s1) -/* 008D68 70008168 3C198002 */ lui $t9, %hi(g_sndAllocatedVoicesCount) -/* 008D6C 7000816C 873943F4 */ lh $t9, %lo(g_sndAllocatedVoicesCount)($t9) -/* 008D70 70008170 3C018002 */ lui $at, %hi(g_sndAllocatedVoicesCount) -/* 008D74 70008174 3C0B8006 */ lui $t3, %hi(g_sndSfxSlotVolume) -/* 008D78 70008178 27280001 */ addiu $t0, $t9, 1 -/* 008D7C 7000817C A42843F4 */ sh $t0, %lo(g_sndAllocatedVoicesCount)($at) -/* 008D80 70008180 8E420000 */ lw $v0, ($s2) -/* 008D84 70008184 86280034 */ lh $t0, 0x34($s1) -/* 008D88 70008188 924A000D */ lbu $t2, 0xd($s2) -/* 008D8C 7000818C 9059000C */ lbu $t9, 0xc($v0) -/* 008D90 70008190 8C490000 */ lw $t1, ($v0) -/* 008D94 70008194 92CC0002 */ lbu $t4, 2($s6) -/* 008D98 70008198 03280019 */ multu $t9, $t0 -/* 008D9C 7000819C 44892000 */ mtc1 $t1, $f4 -/* 008DA0 700081A0 318D003F */ andi $t5, $t4, 0x3f -/* 008DA4 700081A4 24013F01 */ li $at, 16129 -/* 008DA8 700081A8 8D6B3BA4 */ lw $t3, %lo(g_sndSfxSlotVolume)($t3) -/* 008DAC 700081AC 000D7040 */ sll $t6, $t5, 1 -/* 008DB0 700081B0 468021A0 */ cvt.s.w $f6, $f4 -/* 008DB4 700081B4 016E7821 */ addu $t7, $t3, $t6 -/* 008DB8 700081B8 85F80000 */ lh $t8, ($t7) -/* 008DBC 700081BC C628002C */ lwc1 $f8, 0x2c($s1) -/* 008DC0 700081C0 00004812 */ mflo $t1 -/* 008DC4 700081C4 C6300028 */ lwc1 $f16, 0x28($s1) -/* 008DC8 700081C8 46083283 */ div.s $f10, $f6, $f8 -/* 008DCC 700081CC 012A0019 */ multu $t1, $t2 -/* 008DD0 700081D0 02602825 */ move $a1, $s3 -/* 008DD4 700081D4 00003025 */ move $a2, $zero -/* 008DD8 700081D8 00003825 */ move $a3, $zero -/* 008DDC 700081DC 00006012 */ mflo $t4 -/* 008DE0 700081E0 00000000 */ nop -/* 008DE4 700081E4 00000000 */ nop -/* 008DE8 700081E8 0181001A */ div $zero, $t4, $at -/* 008DEC 700081EC 00006812 */ mflo $t5 -/* 008DF0 700081F0 24017FFF */ li $at, 32767 -/* 008DF4 700081F4 46105483 */ div.s $f18, $f10, $f16 -/* 008DF8 700081F8 030D0019 */ multu $t8, $t5 -/* 008DFC 700081FC 00002012 */ mflo $a0 -/* 008E00 70008200 00000000 */ nop -/* 008E04 70008204 00000000 */ nop -/* 008E08 70008208 0081001A */ div $zero, $a0, $at -/* 008E0C 7000820C 4600910D */ trunc.w.s $f4, $f18 -/* 008E10 70008210 00005812 */ mflo $t3 -/* 008E14 70008214 2564FFFF */ addiu $a0, $t3, -1 -/* 008E18 70008218 00801825 */ move $v1, $a0 -/* 008E1C 7000821C 44102000 */ mfc1 $s0, $f4 -/* 008E20 70008220 04810003 */ bgez $a0, .L70008230 -/* 008E24 70008224 00000000 */ nop -/* 008E28 70008228 10000001 */ b .L70008230 -/* 008E2C 7000822C 00001825 */ move $v1, $zero -.L70008230: -/* 008E30 70008230 8EE40038 */ lw $a0, 0x38($s7) -/* 008E34 70008234 0C004CE8 */ jal alSynSetVol -/* 008E38 70008238 AFA30090 */ sw $v1, 0x90($sp) -/* 008E3C 7000823C 8FA30090 */ lw $v1, 0x90($sp) -/* 008E40 70008240 8EE40038 */ lw $a0, 0x38($s7) -/* 008E44 70008244 02602825 */ move $a1, $s3 -/* 008E48 70008248 00033400 */ sll $a2, $v1, 0x10 -/* 008E4C 7000824C 00067403 */ sra $t6, $a2, 0x10 -/* 008E50 70008250 01C03025 */ move $a2, $t6 -/* 008E54 70008254 0C004CE8 */ jal alSynSetVol -/* 008E58 70008258 02003825 */ move $a3, $s0 -/* 008E5C 7000825C 922F003C */ lbu $t7, 0x3c($s1) -/* 008E60 70008260 9259000C */ lbu $t9, 0xc($s2) -/* 008E64 70008264 00001025 */ move $v0, $zero -/* 008E68 70008268 2406007F */ li $a2, 127 -/* 008E6C 7000826C 01F91821 */ addu $v1, $t7, $t9 -/* 008E70 70008270 2463FFC0 */ addiu $v1, $v1, -0x40 -/* 008E74 70008274 18600003 */ blez $v1, .L70008284 -/* 008E78 70008278 02602825 */ move $a1, $s3 -/* 008E7C 7000827C 10000001 */ b .L70008284 -/* 008E80 70008280 00601025 */ move $v0, $v1 -.L70008284: -/* 008E84 70008284 2841007F */ slti $at, $v0, 0x7f -/* 008E88 70008288 10200007 */ beqz $at, .L700082A8 -/* 008E8C 7000828C 00000000 */ nop -/* 008E90 70008290 18600003 */ blez $v1, .L700082A0 -/* 008E94 70008294 00001025 */ move $v0, $zero -/* 008E98 70008298 10000003 */ b .L700082A8 -/* 008E9C 7000829C 306600FF */ andi $a2, $v1, 0xff -.L700082A0: -/* 008EA0 700082A0 10000001 */ b .L700082A8 -/* 008EA4 700082A4 304600FF */ andi $a2, $v0, 0xff -.L700082A8: -/* 008EA8 700082A8 0C004D34 */ jal alSynSetPan -/* 008EAC 700082AC 8EE40038 */ lw $a0, 0x38($s7) -/* 008EB0 700082B0 C626002C */ lwc1 $f6, 0x2c($s1) -/* 008EB4 700082B4 C6280028 */ lwc1 $f8, 0x28($s1) -/* 008EB8 700082B8 8EE40038 */ lw $a0, 0x38($s7) -/* 008EBC 700082BC 02602825 */ move $a1, $s3 -/* 008EC0 700082C0 46083282 */ mul.s $f10, $f6, $f8 -/* 008EC4 700082C4 44065000 */ mfc1 $a2, $f10 -/* 008EC8 700082C8 0C004D58 */ jal alSynSetPitch -/* 008ECC 700082CC 00000000 */ nop -/* 008ED0 700082D0 92C90003 */ lbu $t1, 3($s6) -/* 008ED4 700082D4 9228003D */ lbu $t0, 0x3d($s1) -/* 008ED8 700082D8 02602825 */ move $a1, $s3 -/* 008EDC 700082DC 312A000F */ andi $t2, $t1, 0xf -/* 008EE0 700082E0 010A1821 */ addu $v1, $t0, $t2 -/* 008EE4 700082E4 000360C0 */ sll $t4, $v1, 3 -/* 008EE8 700082E8 05810003 */ bgez $t4, .L700082F8 -/* 008EEC 700082EC 01801825 */ move $v1, $t4 -/* 008EF0 700082F0 10000002 */ b .L700082FC -/* 008EF4 700082F4 00001025 */ move $v0, $zero -.L700082F8: -/* 008EF8 700082F8 00601025 */ move $v0, $v1 -.L700082FC: -/* 008EFC 700082FC 28410080 */ slti $at, $v0, 0x80 -/* 008F00 70008300 14200003 */ bnez $at, .L70008310 -/* 008F04 70008304 00000000 */ nop -/* 008F08 70008308 10000006 */ b .L70008324 -/* 008F0C 7000830C 2403007F */ li $v1, 127 -.L70008310: -/* 008F10 70008310 04610003 */ bgez $v1, .L70008320 -/* 008F14 70008314 00601025 */ move $v0, $v1 -/* 008F18 70008318 10000001 */ b .L70008320 -/* 008F1C 7000831C 00001025 */ move $v0, $zero -.L70008320: -/* 008F20 70008320 00401825 */ move $v1, $v0 -.L70008324: -/* 008F24 70008324 8EE40038 */ lw $a0, 0x38($s7) -/* 008F28 70008328 0C004D7C */ jal alSynSetFXMix -/* 008F2C 7000832C 306600FF */ andi $a2, $v1, 0xff -/* 008F30 70008330 24180040 */ li $t8, 64 -/* 008F34 70008334 A7B800AC */ sh $t8, 0xac($sp) -/* 008F38 70008338 AFB100B0 */ sw $s1, 0xb0($sp) -/* 008F3C 7000833C 8E4D0000 */ lw $t5, ($s2) -/* 008F40 70008340 C624002C */ lwc1 $f4, 0x2c($s1) -/* 008F44 70008344 C6280028 */ lwc1 $f8, 0x28($s1) -/* 008F48 70008348 8DAB0000 */ lw $t3, ($t5) -/* 008F4C 7000834C 02802025 */ move $a0, $s4 -/* 008F50 70008350 27A500AC */ addiu $a1, $sp, 0xac -/* 008F54 70008354 448B8000 */ mtc1 $t3, $f16 -/* 008F58 70008358 00000000 */ nop -/* 008F5C 7000835C 468084A0 */ cvt.s.w $f18, $f16 -/* 008F60 70008360 46049183 */ div.s $f6, $f18, $f4 -/* 008F64 70008364 46083283 */ div.s $f10, $f6, $f8 -/* 008F68 70008368 4600540D */ trunc.w.s $f16, $f10 -/* 008F6C 7000836C 44068000 */ mfc1 $a2, $f16 -/* 008F70 70008370 0C004BBF */ jal alEvtqPostEvent -/* 008F74 70008374 00000000 */ nop -/* 008F78 70008378 96A20000 */ lhu $v0, ($s5) -/* 008F7C 7000837C 304F02D1 */ andi $t7, $v0, 0x2d1 -/* 008F80 70008380 10000155 */ b .L700088D8 -/* 008F84 70008384 01E01025 */ move $v0, $t7 -glabel .L70008388 -/* 008F88 70008388 24011000 */ li $at, 4096 -.L7000838C: -/* 008F8C 7000838C 54610006 */ bnel $v1, $at, .L700083A8 -/* 008F90 70008390 9222003F */ lbu $v0, 0x3f($s1) -/* 008F94 70008394 9239003E */ lbu $t9, 0x3e($s1) -/* 008F98 70008398 33290002 */ andi $t1, $t9, 2 -/* 008F9C 7000839C 11200035 */ beqz $t1, .L70008474 -/* 008FA0 700083A0 00000000 */ nop -/* 008FA4 700083A4 9222003F */ lbu $v0, 0x3f($s1) -.L700083A8: -/* 008FA8 700083A8 26F40014 */ addiu $s4, $s7, 0x14 -/* 008FAC 700083AC 02802025 */ move $a0, $s4 -/* 008FB0 700083B0 105E0008 */ beq $v0, $fp, .L700083D4 -/* 008FB4 700083B4 02202825 */ move $a1, $s1 -/* 008FB8 700083B8 24010004 */ li $at, 4 -/* 008FBC 700083BC 10410025 */ beq $v0, $at, .L70008454 -/* 008FC0 700083C0 24010005 */ li $at, 5 -/* 008FC4 700083C4 10410023 */ beq $v0, $at, .L70008454 -/* 008FC8 700083C8 00000000 */ nop -/* 008FCC 700083CC 10000025 */ b .L70008464 -/* 008FD0 700083D0 24010002 */ li $at, 2 -.L700083D4: -/* 008FD4 700083D4 0C00228C */ jal sndRemoveEvents -/* 008FD8 700083D8 24060040 */ li $a2, 64 -/* 008FDC 700083DC 8E480000 */ lw $t0, ($s2) -/* 008FE0 700083E0 C6260028 */ lwc1 $f6, 0x28($s1) -/* 008FE4 700083E4 C62A002C */ lwc1 $f10, 0x2c($s1) -/* 008FE8 700083E8 8D0A0008 */ lw $t2, 8($t0) -/* 008FEC 700083EC 8EE40038 */ lw $a0, 0x38($s7) -/* 008FF0 700083F0 2625000C */ addiu $a1, $s1, 0xc -/* 008FF4 700083F4 448A9000 */ mtc1 $t2, $f18 -/* 008FF8 700083F8 00003025 */ move $a2, $zero -/* 008FFC 700083FC 46809120 */ cvt.s.w $f4, $f18 -/* 009000 70008400 46062203 */ div.s $f8, $f4, $f6 -/* 009004 70008404 460A4403 */ div.s $f16, $f8, $f10 -/* 009008 70008408 4600848D */ trunc.w.s $f18, $f16 -/* 00900C 7000840C 44109000 */ mfc1 $s0, $f18 -/* 009010 70008410 0C004CE8 */ jal alSynSetVol -/* 009014 70008414 02003825 */ move $a3, $s0 -/* 009018 70008418 1200000A */ beqz $s0, .L70008444 -/* 00901C 7000841C 24180080 */ li $t8, 128 -/* 009020 70008420 A7B800AC */ sh $t8, 0xac($sp) -/* 009024 70008424 AFB100B0 */ sw $s1, 0xb0($sp) -/* 009028 70008428 02802025 */ move $a0, $s4 -/* 00902C 7000842C 27A500AC */ addiu $a1, $sp, 0xac -/* 009030 70008430 0C004BBF */ jal alEvtqPostEvent -/* 009034 70008434 02003025 */ move $a2, $s0 -/* 009038 70008438 240D0002 */ li $t5, 2 -/* 00903C 7000843C 10000003 */ b .L7000844C -/* 009040 70008440 A22D003F */ sb $t5, 0x3f($s1) -.L70008444: -/* 009044 70008444 0C002252 */ jal sndDisposeSound -/* 009048 70008448 02202025 */ move $a0, $s1 -.L7000844C: -/* 00904C 7000844C 10000004 */ b .L70008460 -/* 009050 70008450 96A30000 */ lhu $v1, ($s5) -.L70008454: -/* 009054 70008454 0C002252 */ jal sndDisposeSound -/* 009058 70008458 02202025 */ move $a0, $s1 -/* 00905C 7000845C 96A30000 */ lhu $v1, ($s5) -.L70008460: -/* 009060 70008460 24010002 */ li $at, 2 -.L70008464: -/* 009064 70008464 14610003 */ bne $v1, $at, .L70008474 -/* 009068 70008468 240B1000 */ li $t3, 4096 -/* 00906C 7000846C A6AB0000 */ sh $t3, ($s5) -/* 009070 70008470 3163FFFF */ andi $v1, $t3, 0xffff -.L70008474: -/* 009074 70008474 10000118 */ b .L700088D8 -/* 009078 70008478 306202D1 */ andi $v0, $v1, 0x2d1 -glabel .L7000847C -/* 00907C 7000847C 922F003F */ lbu $t7, 0x3f($s1) -/* 009080 70008480 8EAE0008 */ lw $t6, 8($s5) -/* 009084 70008484 2625000C */ addiu $a1, $s1, 0xc -/* 009088 70008488 17CF0015 */ bne $fp, $t7, .L700084E0 -/* 00908C 7000848C A22E003C */ sb $t6, 0x3c($s1) -/* 009090 70008490 9249000C */ lbu $t1, 0xc($s2) -/* 009094 70008494 31D900FF */ andi $t9, $t6, 0xff -/* 009098 70008498 00001025 */ move $v0, $zero -/* 00909C 7000849C 03291821 */ addu $v1, $t9, $t1 -/* 0090A0 700084A0 2463FFC0 */ addiu $v1, $v1, -0x40 -/* 0090A4 700084A4 18600003 */ blez $v1, .L700084B4 -/* 0090A8 700084A8 2406007F */ li $a2, 127 -/* 0090AC 700084AC 10000001 */ b .L700084B4 -/* 0090B0 700084B0 00601025 */ move $v0, $v1 -.L700084B4: -/* 0090B4 700084B4 2841007F */ slti $at, $v0, 0x7f -/* 0090B8 700084B8 10200007 */ beqz $at, .L700084D8 -/* 0090BC 700084BC 00000000 */ nop -/* 0090C0 700084C0 18600003 */ blez $v1, .L700084D0 -/* 0090C4 700084C4 00001025 */ move $v0, $zero -/* 0090C8 700084C8 10000003 */ b .L700084D8 -/* 0090CC 700084CC 306600FF */ andi $a2, $v1, 0xff -.L700084D0: -/* 0090D0 700084D0 10000001 */ b .L700084D8 -/* 0090D4 700084D4 304600FF */ andi $a2, $v0, 0xff -.L700084D8: -/* 0090D8 700084D8 0C004D34 */ jal alSynSetPan -/* 0090DC 700084DC 8EE40038 */ lw $a0, 0x38($s7) -.L700084E0: -/* 0090E0 700084E0 96A20000 */ lhu $v0, ($s5) -/* 0090E4 700084E4 304802D1 */ andi $t0, $v0, 0x2d1 -/* 0090E8 700084E8 100000FB */ b .L700088D8 -/* 0090EC 700084EC 01001025 */ move $v0, $t0 -glabel .L700084F0 -/* 0090F0 700084F0 922A003F */ lbu $t2, 0x3f($s1) -/* 0090F4 700084F4 C6A40008 */ lwc1 $f4, 8($s5) -/* 0090F8 700084F8 17CA000F */ bne $fp, $t2, .L70008538 -/* 0090FC 700084FC E624002C */ swc1 $f4, 0x2c($s1) -/* 009100 70008500 C626002C */ lwc1 $f6, 0x2c($s1) -/* 009104 70008504 C6280028 */ lwc1 $f8, 0x28($s1) -/* 009108 70008508 8EE40038 */ lw $a0, 0x38($s7) -/* 00910C 7000850C 2625000C */ addiu $a1, $s1, 0xc -/* 009110 70008510 46083282 */ mul.s $f10, $f6, $f8 -/* 009114 70008514 44065000 */ mfc1 $a2, $f10 -/* 009118 70008518 0C004D58 */ jal alSynSetPitch -/* 00911C 7000851C 00000000 */ nop -/* 009120 70008520 922C003E */ lbu $t4, 0x3e($s1) -/* 009124 70008524 31980020 */ andi $t8, $t4, 0x20 -/* 009128 70008528 53000004 */ beql $t8, $zero, .L7000853C -/* 00912C 7000852C 96A20000 */ lhu $v0, ($s5) -/* 009130 70008530 0C002271 */ jal sndCreatePitchEvent -/* 009134 70008534 02202025 */ move $a0, $s1 -.L70008538: -/* 009138 70008538 96A20000 */ lhu $v0, ($s5) -.L7000853C: -/* 00913C 7000853C 304D02D1 */ andi $t5, $v0, 0x2d1 -/* 009140 70008540 100000E5 */ b .L700088D8 -/* 009144 70008544 01A01025 */ move $v0, $t5 -/* 009148 70008548 922E003F */ lbu $t6, 0x3f($s1) -.L7000854C: -/* 00914C 7000854C 8EAB0008 */ lw $t3, 8($s5) -/* 009150 70008550 2625000C */ addiu $a1, $s1, 0xc -/* 009154 70008554 17CE0018 */ bne $fp, $t6, .L700085B8 -/* 009158 70008558 A22B003D */ sb $t3, 0x3d($s1) -/* 00915C 7000855C 92D90003 */ lbu $t9, 3($s6) -/* 009160 70008560 316F00FF */ andi $t7, $t3, 0xff -/* 009164 70008564 3329000F */ andi $t1, $t9, 0xf -/* 009168 70008568 01E91821 */ addu $v1, $t7, $t1 -/* 00916C 7000856C 000340C0 */ sll $t0, $v1, 3 -/* 009170 70008570 05010003 */ bgez $t0, .L70008580 -/* 009174 70008574 01001825 */ move $v1, $t0 -/* 009178 70008578 10000002 */ b .L70008584 -/* 00917C 7000857C 00001025 */ move $v0, $zero -.L70008580: -/* 009180 70008580 00601025 */ move $v0, $v1 -.L70008584: -/* 009184 70008584 28410080 */ slti $at, $v0, 0x80 -/* 009188 70008588 14200003 */ bnez $at, .L70008598 -/* 00918C 7000858C 00000000 */ nop -/* 009190 70008590 10000006 */ b .L700085AC -/* 009194 70008594 2403007F */ li $v1, 127 -.L70008598: -/* 009198 70008598 04610003 */ bgez $v1, .L700085A8 -/* 00919C 7000859C 00601025 */ move $v0, $v1 -/* 0091A0 700085A0 10000001 */ b .L700085A8 -/* 0091A4 700085A4 00001025 */ move $v0, $zero -.L700085A8: -/* 0091A8 700085A8 00401825 */ move $v1, $v0 -.L700085AC: -/* 0091AC 700085AC 8EE40038 */ lw $a0, 0x38($s7) -/* 0091B0 700085B0 0C004D7C */ jal alSynSetFXMix -/* 0091B4 700085B4 306600FF */ andi $a2, $v1, 0xff -.L700085B8: -/* 0091B8 700085B8 96A20000 */ lhu $v0, ($s5) -/* 0091BC 700085BC 304A02D1 */ andi $t2, $v0, 0x2d1 -/* 0091C0 700085C0 100000C5 */ b .L700088D8 -/* 0091C4 700085C4 01401025 */ move $v0, $t2 -glabel .L700085C8 -/* 0091C8 700085C8 9238003F */ lbu $t8, 0x3f($s1) -/* 0091CC 700085CC 8EAC0008 */ lw $t4, 8($s5) -/* 0091D0 700085D0 2625000C */ addiu $a1, $s1, 0xc -/* 0091D4 700085D4 17D8002A */ bne $fp, $t8, .L70008680 -/* 0091D8 700085D8 A62C0034 */ sh $t4, 0x34($s1) -/* 0091DC 700085DC 8E480000 */ lw $t0, ($s2) -/* 0091E0 700085E0 862C0034 */ lh $t4, 0x34($s1) -/* 0091E4 700085E4 92CB0002 */ lbu $t3, 2($s6) -/* 0091E8 700085E8 910A000D */ lbu $t2, 0xd($t0) -/* 0091EC 700085EC 24013F01 */ li $at, 16129 -/* 0091F0 700085F0 316E003F */ andi $t6, $t3, 0x3f -/* 0091F4 700085F4 014C0019 */ multu $t2, $t4 -/* 0091F8 700085F8 924B000D */ lbu $t3, 0xd($s2) -/* 0091FC 700085FC 000EC840 */ sll $t9, $t6, 1 -/* 009200 70008600 3C0D8006 */ lui $t5, %hi(g_sndSfxSlotVolume) -/* 009204 70008604 8DAD3BA4 */ lw $t5, %lo(g_sndSfxSlotVolume)($t5) -/* 009208 70008608 240703E8 */ li $a3, 1000 -/* 00920C 7000860C 01B97821 */ addu $t7, $t5, $t9 -/* 009210 70008610 85E90000 */ lh $t1, ($t7) -/* 009214 70008614 0000C012 */ mflo $t8 -/* 009218 70008618 00000000 */ nop -/* 00921C 7000861C 00000000 */ nop -/* 009220 70008620 030B0019 */ multu $t8, $t3 -/* 009224 70008624 00007012 */ mflo $t6 -/* 009228 70008628 00000000 */ nop -/* 00922C 7000862C 00000000 */ nop -/* 009230 70008630 01C1001A */ div $zero, $t6, $at -/* 009234 70008634 00006812 */ mflo $t5 -/* 009238 70008638 24017FFF */ li $at, 32767 -/* 00923C 7000863C 00000000 */ nop -/* 009240 70008640 012D0019 */ multu $t1, $t5 -/* 009244 70008644 00002012 */ mflo $a0 -/* 009248 70008648 00000000 */ nop -/* 00924C 7000864C 00000000 */ nop -/* 009250 70008650 0081001A */ div $zero, $a0, $at -/* 009254 70008654 0000C812 */ mflo $t9 -/* 009258 70008658 2724FFFF */ addiu $a0, $t9, -1 -/* 00925C 7000865C 04810003 */ bgez $a0, .L7000866C -/* 009260 70008660 00801825 */ move $v1, $a0 -/* 009264 70008664 10000001 */ b .L7000866C -/* 009268 70008668 00001825 */ move $v1, $zero -.L7000866C: -/* 00926C 7000866C 00033400 */ sll $a2, $v1, 0x10 -/* 009270 70008670 00067C03 */ sra $t7, $a2, 0x10 -/* 009274 70008674 01E03025 */ move $a2, $t7 -/* 009278 70008678 0C004CE8 */ jal alSynSetVol -/* 00927C 7000867C 8EE40038 */ lw $a0, 0x38($s7) -.L70008680: -/* 009280 70008680 96A20000 */ lhu $v0, ($s5) -/* 009284 70008684 304802D1 */ andi $t0, $v0, 0x2d1 -/* 009288 70008688 10000093 */ b .L700088D8 -/* 00928C 7000868C 01001025 */ move $v0, $t0 -.L70008690: -/* 009290 70008690 922A003F */ lbu $t2, 0x3f($s1) -/* 009294 70008694 2625000C */ addiu $a1, $s1, 0xc -/* 009298 70008698 17CA0032 */ bne $fp, $t2, .L70008764 -/* 00929C 7000869C 00000000 */ nop -/* 0092A0 700086A0 8E420000 */ lw $v0, ($s2) -/* 0092A4 700086A4 862A0034 */ lh $t2, 0x34($s1) -/* 0092A8 700086A8 9258000D */ lbu $t8, 0xd($s2) -/* 0092AC 700086AC 9048000D */ lbu $t0, 0xd($v0) -/* 0092B0 700086B0 8C4C0008 */ lw $t4, 8($v0) -/* 0092B4 700086B4 92CE0002 */ lbu $t6, 2($s6) -/* 0092B8 700086B8 010A0019 */ multu $t0, $t2 -/* 0092BC 700086BC 448C8000 */ mtc1 $t4, $f16 -/* 0092C0 700086C0 31C9003F */ andi $t1, $t6, 0x3f -/* 0092C4 700086C4 24013F01 */ li $at, 16129 -/* 0092C8 700086C8 3C0B8006 */ lui $t3, %hi(g_sndSfxSlotVolume) -/* 0092CC 700086CC 8D6B3BA4 */ lw $t3, %lo(g_sndSfxSlotVolume)($t3) -/* 0092D0 700086D0 00096840 */ sll $t5, $t1, 1 -/* 0092D4 700086D4 468084A0 */ cvt.s.w $f18, $f16 -/* 0092D8 700086D8 016DC821 */ addu $t9, $t3, $t5 -/* 0092DC 700086DC 872F0000 */ lh $t7, ($t9) -/* 0092E0 700086E0 00006012 */ mflo $t4 -/* 0092E4 700086E4 C6240028 */ lwc1 $f4, 0x28($s1) -/* 0092E8 700086E8 C628002C */ lwc1 $f8, 0x2c($s1) -/* 0092EC 700086EC 01980019 */ multu $t4, $t8 -/* 0092F0 700086F0 46049183 */ div.s $f6, $f18, $f4 -/* 0092F4 700086F4 00007012 */ mflo $t6 -/* 0092F8 700086F8 00000000 */ nop -/* 0092FC 700086FC 00000000 */ nop -/* 009300 70008700 01C1001A */ div $zero, $t6, $at -/* 009304 70008704 00004812 */ mflo $t1 -/* 009308 70008708 24017FFF */ li $at, 32767 -/* 00930C 7000870C 46083283 */ div.s $f10, $f6, $f8 -/* 009310 70008710 01E90019 */ multu $t7, $t1 -/* 009314 70008714 00002012 */ mflo $a0 -/* 009318 70008718 00000000 */ nop -/* 00931C 7000871C 00000000 */ nop -/* 009320 70008720 0081001A */ div $zero, $a0, $at -/* 009324 70008724 4600540D */ trunc.w.s $f16, $f10 -/* 009328 70008728 00005812 */ mflo $t3 -/* 00932C 7000872C 2564FFFF */ addiu $a0, $t3, -1 -/* 009330 70008730 00801825 */ move $v1, $a0 -/* 009334 70008734 44108000 */ mfc1 $s0, $f16 -/* 009338 70008738 04810003 */ bgez $a0, .L70008748 -/* 00933C 7000873C 00000000 */ nop -/* 009340 70008740 10000001 */ b .L70008748 -/* 009344 70008744 00001825 */ move $v1, $zero -.L70008748: -/* 009348 70008748 00033400 */ sll $a2, $v1, 0x10 -/* 00934C 7000874C 00066C03 */ sra $t5, $a2, 0x10 -/* 009350 70008750 01A03025 */ move $a2, $t5 -/* 009354 70008754 8EE40038 */ lw $a0, 0x38($s7) -/* 009358 70008758 0C004CE8 */ jal alSynSetVol -/* 00935C 7000875C 02003825 */ move $a3, $s0 -/* 009360 70008760 96A30000 */ lhu $v1, ($s5) -.L70008764: -/* 009364 70008764 1000005C */ b .L700088D8 -/* 009368 70008768 306202D1 */ andi $v0, $v1, 0x2d1 -/* 00936C 7000876C 9239003E */ lbu $t9, 0x3e($s1) -.L70008770: -/* 009370 70008770 33280002 */ andi $t0, $t9, 2 -/* 009374 70008774 55000043 */ bnezl $t0, .L70008884 -/* 009378 70008778 96A20000 */ lhu $v0, ($s5) -/* 00937C 7000877C 8E420000 */ lw $v0, ($s2) -/* 009380 70008780 862D0034 */ lh $t5, 0x34($s1) -/* 009384 70008784 9248000D */ lbu $t0, 0xd($s2) -/* 009388 70008788 904B000D */ lbu $t3, 0xd($v0) -/* 00938C 7000878C 92CC0002 */ lbu $t4, 2($s6) -/* 009390 70008790 24013F01 */ li $at, 16129 -/* 009394 70008794 016D0019 */ multu $t3, $t5 -/* 009398 70008798 3198003F */ andi $t8, $t4, 0x3f -/* 00939C 7000879C 3C0A8006 */ lui $t2, %hi(g_sndSfxSlotVolume) -/* 0093A0 700087A0 8D4A3BA4 */ lw $t2, %lo(g_sndSfxSlotVolume)($t2) -/* 0093A4 700087A4 00187040 */ sll $t6, $t8, 1 -/* 0093A8 700087A8 26F40014 */ addiu $s4, $s7, 0x14 -/* 0093AC 700087AC 014E7821 */ addu $t7, $t2, $t6 -/* 0093B0 700087B0 85E90000 */ lh $t1, ($t7) -/* 0093B4 700087B4 0000C812 */ mflo $t9 -/* 0093B8 700087B8 00000000 */ nop -/* 0093BC 700087BC 00000000 */ nop -/* 0093C0 700087C0 03280019 */ multu $t9, $t0 -/* 0093C4 700087C4 00006012 */ mflo $t4 -/* 0093C8 700087C8 00000000 */ nop -/* 0093CC 700087CC 00000000 */ nop -/* 0093D0 700087D0 0181001A */ div $zero, $t4, $at -/* 0093D4 700087D4 0000C012 */ mflo $t8 -/* 0093D8 700087D8 24017FFF */ li $at, 32767 -/* 0093DC 700087DC 00000000 */ nop -/* 0093E0 700087E0 01380019 */ multu $t1, $t8 -/* 0093E4 700087E4 00002012 */ mflo $a0 -/* 0093E8 700087E8 00000000 */ nop -/* 0093EC 700087EC 00000000 */ nop -/* 0093F0 700087F0 0081001A */ div $zero, $a0, $at -/* 0093F4 700087F4 00005012 */ mflo $t2 -/* 0093F8 700087F8 2544FFFF */ addiu $a0, $t2, -1 -/* 0093FC 700087FC 04810003 */ bgez $a0, .L7000880C -/* 009400 70008800 00801825 */ move $v1, $a0 -/* 009404 70008804 10000001 */ b .L7000880C -/* 009408 70008808 00001825 */ move $v1, $zero -.L7000880C: -/* 00940C 7000880C 8C4E0004 */ lw $t6, 4($v0) -/* 009410 70008810 C6260028 */ lwc1 $f6, 0x28($s1) -/* 009414 70008814 C62A002C */ lwc1 $f10, 0x2c($s1) -/* 009418 70008818 448E9000 */ mtc1 $t6, $f18 -/* 00941C 7000881C 00033400 */ sll $a2, $v1, 0x10 -/* 009420 70008820 00065C03 */ sra $t3, $a2, 0x10 -/* 009424 70008824 46809120 */ cvt.s.w $f4, $f18 -/* 009428 70008828 01603025 */ move $a2, $t3 -/* 00942C 7000882C 8EE40038 */ lw $a0, 0x38($s7) -/* 009430 70008830 2625000C */ addiu $a1, $s1, 0xc -/* 009434 70008834 46062203 */ div.s $f8, $f4, $f6 -/* 009438 70008838 460A4403 */ div.s $f16, $f8, $f10 -/* 00943C 7000883C 4600848D */ trunc.w.s $f18, $f16 -/* 009440 70008840 44109000 */ mfc1 $s0, $f18 -/* 009444 70008844 0C004CE8 */ jal alSynSetVol -/* 009448 70008848 02003825 */ move $a3, $s0 -/* 00944C 7000884C 240D0002 */ li $t5, 2 -/* 009450 70008850 A7AD00AC */ sh $t5, 0xac($sp) -/* 009454 70008854 AFB100B0 */ sw $s1, 0xb0($sp) -/* 009458 70008858 02802025 */ move $a0, $s4 -/* 00945C 7000885C 27A500AC */ addiu $a1, $sp, 0xac -/* 009460 70008860 0C004BBF */ jal alEvtqPostEvent -/* 009464 70008864 02003025 */ move $a2, $s0 -/* 009468 70008868 9239003E */ lbu $t9, 0x3e($s1) -/* 00946C 7000886C 33280020 */ andi $t0, $t9, 0x20 -/* 009470 70008870 51000004 */ beql $t0, $zero, .L70008884 -/* 009474 70008874 96A20000 */ lhu $v0, ($s5) -/* 009478 70008878 0C002271 */ jal sndCreatePitchEvent -/* 00947C 7000887C 02202025 */ move $a0, $s1 -/* 009480 70008880 96A20000 */ lhu $v0, ($s5) -.L70008884: -/* 009484 70008884 304C02D1 */ andi $t4, $v0, 0x2d1 -/* 009488 70008888 10000013 */ b .L700088D8 -/* 00948C 7000888C 01801025 */ move $v0, $t4 -.L70008890: -/* 009490 70008890 0C002252 */ jal sndDisposeSound -/* 009494 70008894 02202025 */ move $a0, $s1 -/* 009498 70008898 96A20000 */ lhu $v0, ($s5) -/* 00949C 7000889C 304902D1 */ andi $t1, $v0, 0x2d1 -/* 0094A0 700088A0 1000000D */ b .L700088D8 -/* 0094A4 700088A4 01201025 */ move $v0, $t1 -.L700088A8: -/* 0094A8 700088A8 9238003E */ lbu $t8, 0x3e($s1) -/* 0094AC 700088AC 330A0010 */ andi $t2, $t8, 0x10 -/* 0094B0 700088B0 11400006 */ beqz $t2, .L700088CC -/* 0094B4 700088B4 00000000 */ nop -/* 0094B8 700088B8 8EA4000C */ lw $a0, 0xc($s5) -/* 0094BC 700088BC 86A5000A */ lh $a1, 0xa($s5) -/* 0094C0 700088C0 0C002382 */ jal sndPlaySfx -/* 0094C4 700088C4 8E260030 */ lw $a2, 0x30($s1) -/* 0094C8 700088C8 96A30000 */ lhu $v1, ($s5) -.L700088CC: -/* 0094CC 700088CC 10000002 */ b .L700088D8 -/* 0094D0 700088D0 306202D1 */ andi $v0, $v1, 0x2d1 -glabel .L700088D4 -/* 0094D4 700088D4 306202D1 */ andi $v0, $v1, 0x2d1 -.L700088D8: -/* 0094D8 700088D8 8FA30074 */ lw $v1, 0x74($sp) -/* 0094DC 700088DC 10600006 */ beqz $v1, .L700088F8 -/* 0094E0 700088E0 00608825 */ move $s1, $v1 -/* 0094E4 700088E4 54400005 */ bnezl $v0, .L700088FC -/* 0094E8 700088E8 8FAB0080 */ lw $t3, 0x80($sp) -/* 0094EC 700088EC 906E003E */ lbu $t6, 0x3e($v1) -/* 0094F0 700088F0 31CF0001 */ andi $t7, $t6, 1 -/* 0094F4 700088F4 AFAF0080 */ sw $t7, 0x80($sp) -.L700088F8: -/* 0094F8 700088F8 8FAB0080 */ lw $t3, 0x80($sp) -.L700088FC: -/* 0094FC 700088FC 55600007 */ bnezl $t3, .L7000891C -/* 009500 70008900 8FBF003C */ lw $ra, 0x3c($sp) -/* 009504 70008904 50600005 */ beql $v1, $zero, .L7000891C -/* 009508 70008908 8FBF003C */ lw $ra, 0x3c($sp) -/* 00950C 7000890C 5040FD70 */ beql $v0, $zero, .L70007ED0 -/* 009510 70008910 8FAF0074 */ lw $t7, 0x74($sp) -/* 009514 70008914 AFB10078 */ sw $s1, 0x78($sp) -/* 009518 70008918 8FBF003C */ lw $ra, 0x3c($sp) -.L7000891C: -/* 00951C 7000891C 8FB00018 */ lw $s0, 0x18($sp) -/* 009520 70008920 8FB1001C */ lw $s1, 0x1c($sp) -/* 009524 70008924 8FB20020 */ lw $s2, 0x20($sp) -/* 009528 70008928 8FB30024 */ lw $s3, 0x24($sp) -/* 00952C 7000892C 8FB40028 */ lw $s4, 0x28($sp) -/* 009530 70008930 8FB5002C */ lw $s5, 0x2c($sp) -/* 009534 70008934 8FB60030 */ lw $s6, 0x30($sp) -/* 009538 70008938 8FB70034 */ lw $s7, 0x34($sp) -/* 00953C 7000893C 8FBE0038 */ lw $fp, 0x38($sp) -/* 009540 70008940 03E00008 */ jr $ra -/* 009544 70008944 27BD00D0 */ addiu $sp, $sp, 0xd0 - -.late_rodata -glabel jpt_80029160 - .word .L70007FBC - .word .L70008388 - .word .L700088D4 - .word .L7000847C - .word .L700088D4 - .word .L700088D4 - .word .L700088D4 - .word .L700085C8 - .word .L700088D4 - .word .L700088D4 - .word .L700088D4 - .word .L700088D4 - .word .L700088D4 - .word .L700088D4 - .word .L700088D4 - .word .L700084F0 - .size jpt_80029160, . - jpt_80029160 -) -#endif /** diff --git a/src/snd.h b/src/snd.h index d4f1706e..46899b38 100644 --- a/src/snd.h +++ b/src/snd.h @@ -9,6 +9,27 @@ #define SFX_SLOT_COUNT 7 +enum SoundFlags { + SOUND_FLAG_FINAL_IN_SEQUENCE = 1 << 0, + SOUND_FLAG_LOOPED = 1 << 1, + SOUND_FLAG_PLAYING = 1 << 2, + SOUND_FLAG_RETRIGGER = 1 << 4, + SOUND_FLAG_PITCH_SLIDE = 1 << 5 +}; + +#define SOUND_PARAM_GROUP(m) ((m)->keyMin & 0x3F) +#define SOUND_PARAM_FXMIX(m) ((m)->keyMax & 0xF) +#define AL_SNDP_GROUP_VOLUME_MAX 32767 + +enum SoundState { + SOUND_STATE_NONE, + SOUND_STATE_PLAYING, + SOUND_STATE_STOPPING, + SOUND_STATE_PREEMPT, + SOUND_STATE_WAIT_VOICE, + SOUND_STATE_INIT +}; + /** * Based on n64devkit\ultra\usr\src\pr\libsrc\libultra\audio\sndp.h * enum ALSndpMsgType, diff --git a/src/tlb_random.c b/src/tlb_random.c deleted file mode 100644 index e019b706..00000000 --- a/src/tlb_random.c +++ /dev/null @@ -1,56 +0,0 @@ -#include - -/** - * @file tlb_random.c - * This file contains code to get a random tlb value. - * The methods here are the same as in random and chrObjRandom (but different globals). - */ - -u64 g_tlbRandomSeed = 0xAB8D9F7781280783; - -/** - * 2710 70001B10 - * V0= random value for TLB random entries [800230E0] - * Same assembly instructions as randomGetNext and chrObjRandomGetNext, but different globals. - */ -#ifdef NONMATCHING -s32 tlbRandomGetNext(void) -{ - // best guess comments copied from random.c - - // best -O1 guess - // g_randomSeed ^= (((((g_randomSeed << 0x3f) >> 0x1f) | ((g_randomSeed << 0x1f) >> 0x20)) ^ ((g_randomSeed << 0x2c) >> 0x20)) >> 0x14) & 0xfff; - // return (s32)(g_randomSeed); - - // best -O2 guess - // u64 t = ((g_randomSeed << 0x3f) >> 0x1f); - // t |= ((g_randomSeed << 0x1f) >> 0x20); - // t ^= ((g_randomSeed << 0x2c) >> 0x20); - // t = g_randomSeed ^ ((t >> 0x14) & 0xfff); - // g_randomSeed = t; - // return (s32)(t); -} -#else -GLOBAL_ASM( -.text -glabel tlbRandomGetNext -/* 002710 70001B10 3C048002 */ lui $a0, %hi(g_tlbRandomSeed) -/* 002714 70001B14 DC8430E0 */ ld $a0, %lo(g_tlbRandomSeed)($a0) -/* 002718 70001B18 3C018002 */ lui $at, %hi(g_tlbRandomSeed) -/* 00271C 70001B1C 000437FC */ dsll32 $a2, $a0, 0x1f -/* 002720 70001B20 00042FF8 */ dsll $a1, $a0, 0x1f -/* 002724 70001B24 000637FA */ dsrl $a2, $a2, 0x1f -/* 002728 70001B28 0005283E */ dsrl32 $a1, $a1, 0 -/* 00272C 70001B2C 0004233C */ dsll32 $a0, $a0, 0xc -/* 002730 70001B30 00C53025 */ or $a2, $a2, $a1 -/* 002734 70001B34 0004203E */ dsrl32 $a0, $a0, 0 -/* 002738 70001B38 00C43026 */ xor $a2, $a2, $a0 -/* 00273C 70001B3C 0006253A */ dsrl $a0, $a2, 0x14 -/* 002740 70001B40 30840FFF */ andi $a0, $a0, 0xfff -/* 002744 70001B44 00862026 */ xor $a0, $a0, $a2 -/* 002748 70001B48 0004103C */ dsll32 $v0, $a0, 0 -/* 00274C 70001B4C FC2430E0 */ sd $a0, %lo(g_tlbRandomSeed)($at) -/* 002750 70001B50 03E00008 */ jr $ra -/* 002754 70001B54 0002103F */ dsra32 $v0, $v0, 0 -) -#endif diff --git a/src/tlb_random.h b/src/tlb_random.h index 6a33ddae..0dda7a8f 100644 --- a/src/tlb_random.h +++ b/src/tlb_random.h @@ -2,6 +2,7 @@ #define _TLB_RANDOM_H_ #include +extern u64 g_tlbRandomSeed; extern u32 tlbRandomGetNext(void); diff --git a/src/tlb_random.s b/src/tlb_random.s new file mode 100644 index 00000000..f5850f9e --- /dev/null +++ b/src/tlb_random.s @@ -0,0 +1,33 @@ +# assembler directives +.set noat # allow manual use of $at +.set noreorder # don't insert nops after branches +.set gp=64 + +.include "macros.inc" + +.section .data +.balign 8 +glabel g_tlbRandomSeed +.word 0xAB8D9F77 +.word 0x81280783 + +.section .text, "ax" +glabel tlbRandomGetNext +/* 002710 70001B10 3C048002 */ lui $a0, %hi(g_tlbRandomSeed) +/* 002714 70001B14 DC8430E0 */ ld $a0, %lo(g_tlbRandomSeed)($a0) +/* 002718 70001B18 3C018002 */ lui $at, %hi(g_tlbRandomSeed) +/* 00271C 70001B1C 000437FC */ dsll32 $a2, $a0, 0x1f +/* 002720 70001B20 00042FF8 */ dsll $a1, $a0, 0x1f +/* 002724 70001B24 000637FA */ dsrl $a2, $a2, 0x1f +/* 002728 70001B28 0005283E */ dsrl32 $a1, $a1, 0 +/* 00272C 70001B2C 0004233C */ dsll32 $a0, $a0, 0xc +/* 002730 70001B30 00C53025 */ or $a2, $a2, $a1 +/* 002734 70001B34 0004203E */ dsrl32 $a0, $a0, 0 +/* 002738 70001B38 00C43026 */ xor $a2, $a2, $a0 +/* 00273C 70001B3C 0006253A */ dsrl $a0, $a2, 0x14 +/* 002740 70001B40 30840FFF */ andi $a0, $a0, 0xfff +/* 002744 70001B44 00862026 */ xor $a0, $a0, $a2 +/* 002748 70001B48 0004103C */ dsll32 $v0, $a0, 0 +/* 00274C 70001B4C FC2430E0 */ sd $a0, %lo(g_tlbRandomSeed)($at) +/* 002750 70001B50 03E00008 */ jr $ra +/* 002754 70001B54 0002103F */ dsra32 $v0, $v0, 0 \ No newline at end of file diff --git a/tools/Makefile b/tools/Makefile index 3bd250ba..49671ac3 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -13,7 +13,7 @@ endif default: all armips: armips.cpp - $(CXX) $(CXXFLAGS) -fno-exceptions -fno-rtti -pipe $^ -o $@ -lpthread $(ARMIPS_FLAGS) + $(CXX) $(CXXFLAGS) -fmax-errors=2 -fno-exceptions -fno-rtti -pipe $^ -o $@ -lpthread $(ARMIPS_FLAGS) n64cksum_SOURCES := n64cksum.c utils.c n64cksum_CFLAGS := -DN64CKSUM_STANDALONE diff --git a/tools/__pycache__/diff_settings.cpython-312.pyc b/tools/__pycache__/diff_settings.cpython-312.pyc new file mode 100644 index 00000000..cae2a548 Binary files /dev/null and b/tools/__pycache__/diff_settings.cpython-312.pyc differ diff --git a/tools/armips.cpp b/tools/armips.cpp index 702b6c0d..f50c40b5 100644 --- a/tools/armips.cpp +++ b/tools/armips.cpp @@ -56,6 +56,7 @@ SOFTWARE. #include #include #include +#include #include #include diff --git a/tools/asm-processor/asm_processor.py b/tools/asm-processor/asm_processor.py index bc26402a..b30ede30 100644 --- a/tools/asm-processor/asm_processor.py +++ b/tools/asm-processor/asm_processor.py @@ -486,7 +486,7 @@ class GlobalState: address = (8 * self.valuectr) & 0x7FFF return 'v{} := p{}({}); v{}^ := {};'.format(tp, tp, address, tp, val) -Function = namedtuple('Function', ['text_glabels', 'asm_conts', 'late_rodata_dummy_bytes', 'jtbl_rodata_size', 'late_rodata_asm_conts', 'fn_desc', 'data']) +Function = namedtuple('Function', ['text_glabels', 'asm_conts', 'late_rodata_dummy_bytes', 'jtbl_rodata_size', 'late_rodata_asm_conts', 'late_rodata_carrier', 'fn_desc', 'data']) class GlobalAsmBlock: @@ -773,7 +773,17 @@ class GlobalAsmBlock: late_rodata_fn_output.append('') text_name = None - if self.fn_section_sizes['.text'] > 0 or late_rodata_fn_output: + late_rodata_carrier = None + if self.fn_section_sizes['.text'] == 0 and late_rodata_fn_output: + # Keep the dummy constants at this point in the compiler's rodata + # stream. The generated function is removed again in fixup_objfile. + late_rodata_carrier = state.make_name('late_rodata_carrier') + src[0] = ' '.join( + [state.func_prologue(late_rodata_carrier)] + + late_rodata_fn_output + + [state.func_epilogue()] + ) + elif self.fn_section_sizes['.text'] > 0: text_name = state.make_name('func') src[0] = state.func_prologue(text_name) src[self.num_lines] = state.func_epilogue() @@ -855,6 +865,7 @@ class GlobalAsmBlock: late_rodata_dummy_bytes=late_rodata_dummy_bytes, jtbl_rodata_size=jtbl_rodata_size, late_rodata_asm_conts=self.late_rodata_asm_conts, + late_rodata_carrier=late_rodata_carrier, fn_desc=self.fn_desc, data={ '.text': (text_name, self.fn_section_sizes['.text']), @@ -1078,12 +1089,33 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d late_rodata_source_name_start = None late_rodata_source_name_end = None + late_rodata_carrier_ranges = [] + omitted_late_rodata_carriers = set() + text_section = objfile.find_section('.text') + for function in functions: + if function.late_rodata_carrier is None: + continue + carrier = next( + (symbol for symbol in objfile.symbol_entries + if symbol.name == function.late_rodata_carrier), + None) + if carrier is None: + # The surrounding preprocessor condition omitted this block. + omitted_late_rodata_carriers.add(function.late_rodata_carrier) + continue + if carrier.st_shndx != text_section.index or carrier.st_size == 0: + raise Failure("could not determine generated late rodata carrier size, " + function.fn_desc) + late_rodata_carrier_ranges.append( + (carrier.st_value, carrier.st_value + carrier.st_size)) + # Generate an assembly file with all the assembly we need to fill in. For # simplicity we pad with nops/.space so that addresses match exactly, so we # don't have to fix up relocations/symbol references. all_text_glabels = set() func_sizes = {} for function in functions: + if function.late_rodata_carrier in omitted_late_rodata_carriers: + continue ifdefed = False for sectype, (temp_name, size) in function.data.items(): if temp_name is None: @@ -1452,8 +1484,98 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d sh_type=reltab.sh_type, sh_flags=0, sh_link=objfile.symtab.index, sh_info=target.index, sh_addralign=4, sh_entsize=sh_entsize, data=b'') + target.relocated_by.append(target_reltab) + target_reltab.relocations = [] + target_reltab.relocations.extend(reltab.relocations) target_reltab.data += new_data + # Data-only .late_rodata blocks use temporary C functions to make IDO + # emit their dummy constants at the right point in .rodata. Remove + # those functions and close the gaps in later text symbols and + # relocation offsets. + if late_rodata_carrier_ranges: + ranges = sorted(late_rodata_carrier_ranges) + for (_, end), (next_start, _) in zip(ranges, ranges[1:]): + if end > next_start: + raise Failure("overlapping generated late rodata carriers") + + def removed_before(pos): + return sum(end - start for start, end in ranges if end <= pos) + + def inside_carrier(pos): + return any(start <= pos < end for start, end in ranges) + + new_text = bytearray() + cursor = 0 + for start, end in ranges: + new_text.extend(text_section.data[cursor:start]) + cursor = end + new_text.extend(text_section.data[cursor:]) + text_section.data = bytes(new_text) + + # REL relocations store their addends in section contents. Adjust + # section-relative text pointers (most notably jump tables) before + # shifting the symbols they are based on. + for target_section in objfile.sections: + section_data = bytearray(target_section.data) + changed = False + for reltab in target_section.relocated_by: + for rel in reltab.relocations: + symbol = new_syms[rel.sym_index] + if symbol.st_shndx != text_section.index or \ + rel.rel_type != R_MIPS_32: + continue + addend, = fmt.unpack( + 'I', section_data[rel.r_offset:rel.r_offset + 4]) + target = symbol.st_value + addend + addend -= ( + removed_before(target) - + removed_before(symbol.st_value) + ) + section_data[rel.r_offset:rel.r_offset + 4] = \ + fmt.pack('I', addend) + changed = True + if changed: + target_section.data = bytes(section_data) + + for symbol in new_syms: + if symbol.st_shndx != text_section.index: + continue + if symbol.st_type == STT_SECTION and symbol.st_value == 0: + continue + elif not inside_carrier(symbol.st_value): + symbol.st_value -= removed_before(symbol.st_value) + + text_end = max( + (symbol.st_value + symbol.st_size + for symbol in new_syms + if symbol.st_shndx == text_section.index and + symbol.st_type != STT_SECTION), + default=0 + ) + aligned_text_end = ( + (text_end + text_section.sh_addralign - 1) // + text_section.sh_addralign * text_section.sh_addralign + ) + text_section.data = text_section.data[:aligned_text_end] + text_section.data += b'\0' * (aligned_text_end - len(text_section.data)) + for symbol in new_syms: + if symbol.st_shndx == text_section.index and \ + symbol.st_type == STT_SECTION and symbol.st_value == 0: + symbol.st_size = len(text_section.data) + + for reltab in text_section.relocated_by: + relocations = [] + for rel in reltab.relocations: + if inside_carrier(rel.r_offset): + continue + rel.r_offset -= removed_before(rel.r_offset) + relocations.append(rel) + reltab.relocations = relocations + reltab.data = b''.join(rel.to_bin() for rel in relocations) + + objfile.symtab.data = b''.join(symbol.to_bin() for symbol in new_syms) + objfile.write(objfile_name) finally: s_file.close() diff --git a/tools/ge-stats.py b/tools/ge-stats.py index f151b1ac..1bbf70ca 100644 --- a/tools/ge-stats.py +++ b/tools/ge-stats.py @@ -290,13 +290,13 @@ def apply_build_map(stats: StatResults, version: str): # followed by a hex address (capturing everything after "0x"), followed by any whitespace (at least one). # It then matches a build path, based on version, capturing everything after the version and slash # up to the file extension, followed by end of line. - p1 = re.compile(r"^ \.text\s+0x00000000([0-9a-f]{8})\s+0x([0-9a-f]+)\s+build\/" + re.escape(version_code) + r"\/([^\s]+)$") + p1 = re.compile(r"^ \.text\s+0x(?:00000000)?([0-9a-f]{8})\s+0x([0-9a-f]+)\s+build\/" + re.escape(version_code) + r"\/([^\s]+)$") # regex to match subsequent lines after the above regex matches. This will # match any whitespace, then 64 bit address (capturing the lower 32 bits), then # any whitespace (at least one), then capture the remaining non-whitespace-text until end of line (in capture group). # That last capture group is the function name. - p2 = re.compile(r"^\s+0x00000000([0-9a-f]{8})\s+(\S+)$") + p2 = re.compile(r"^\s+0x(?:00000000)?([0-9a-f]{8})\s+(\S+)$") current_sfc = None current_fi = None @@ -675,8 +675,8 @@ def main(): if print_method == 'non_matching' and not run_report: mtime_use_os = True - if not qlocal: - print(subprocess.run(['git', 'diff', 'origin/master', '--name-only', '"@{10 minutes ago}"']).stdout) + #if not qlocal: + # print(subprocess.run(['git', 'diff', 'origin/master', '--name-only', '"@{10 minutes ago}"']).stdout) # Default to using git log to get the file's modified date. # Git log will be much slower, but cloning a new repo (i.e., github actions online) # will reset all the modified timestamps to the same value, so will need to @@ -698,20 +698,27 @@ def main(): src_completed_list = [ '_start.s', 'aspboot.s', + 'boot.s', 'bootcode.s', 'getra.s', 'gspboot.s', 'osMapTLB.s', + 'random.s', 'rom_header.s', 'rspboot.s', + 'tlb_random.s', 'tlb_hardwire.s', 'tlb_resolve.s'] + # files to count as complete, in src/libultrare directory + src_libultrare_completed_list = [ + 'ultra80069080.s'] + search = [] search.append(SearchDir('src', False, completed=src_completed_list)) search.append(SearchDir('src/game', False)) search.append(SearchDir('src/inflate', False)) - search.append(SearchDir('src/libultrare', True)) + search.append(SearchDir('src/libultrare', True, completed=src_libultrare_completed_list)) stats = StatResults() diff --git a/tools/ido5.3_recomp/Makefile b/tools/ido5.3_recomp/Makefile index ce6f6715..a648b500 100644 --- a/tools/ido5.3_recomp/Makefile +++ b/tools/ido5.3_recomp/Makefile @@ -1,5 +1,15 @@ IRIX_ROOT := ../irix/root +# Vendored from https://github.com/Decompollaborate/rabbitizer (pinned at +# decompals/ido-static-recomp @ d5aec59's subrepo commit +# 72bf240f468d30286888212b5fb773fae94340f6) - replaces the old libcapstone +# dependency as of the decompals rewrite (2022-10-16). +RABBITIZER := rabbitizer +RABBITIZER_LIB := $(RABBITIZER)/build/librabbitizerpp.a + +# Source pinned to decompals/ido-static-recomp @ d5aec59 +RECOMP_PACKAGE_VERSION := decompals/ido-static-recomp @ d5aec59 + cc: OPT_CFLAGS := -O2 cfe: OPT_CFLAGS := -O2 uopt: OPT_CFLAGS := -O2 @@ -14,14 +24,24 @@ ugen_c.c: RECOMP_FLAGS := --conservative all: cc cfe uopt ugen as1 acpp copt ujoin uld umerge usplit err.english.cc clean: - $(RM) cc* cfe* uopt* ugen* as1* acpp* copt* ujoin* uld* umerge* usplit* err.english.cc $(RECOMP) libc_impl.o + $(RM) cc* cfe* uopt* ugen* as1* acpp* copt* ujoin* uld* umerge* usplit* err.english.cc $(RECOMP) libc_impl.o version_info.o + $(MAKE) -C $(RABBITIZER) distclean -$(RECOMP): recomp.cpp - $(CXX) $^ -o $@ -std=c++11 -O2 -Wno-switch `pkg-config --cflags --libs capstone` +$(RABBITIZER_LIB): + $(MAKE) -C $(RABBITIZER) static CC=$(CC) CXX=$(CXX) DEBUG=0 + +$(RECOMP): recomp.cpp $(RABBITIZER_LIB) + $(CXX) recomp.cpp -o $@ -std=c++17 -O2 -Wno-switch \ + -I $(RABBITIZER)/include -I $(RABBITIZER)/cplusplus/include \ + -L $(RABBITIZER)/build -lrabbitizerpp -ldl -Wl,-export-dynamic libc_impl.o: libc_impl.c libc_impl.h $(CC) $< -c -fno-strict-aliasing -O2 -DIDO53 +version_info.o: version_info.c + $(CC) $< -c -O2 -DIDO53 \ + -DPACKAGE_VERSION='"$(RECOMP_PACKAGE_VERSION)"' -DDATETIME='"n/a"' + err.english.cc: $(IRIX_ROOT)/usr/lib/err.english.cc cp $^ $@ @@ -31,7 +51,7 @@ cc_c.c: $(IRIX_ROOT)/usr/bin/cc $(RECOMP) %_c.c: $(IRIX_ROOT)/usr/lib/% $(RECOMP) ./$(RECOMP) $(RECOMP_FLAGS) $< > $@ -%: %_c.c libc_impl.o - $(CC) libc_impl.o $< -o $@ $(OPT_CFLAGS) -fno-strict-aliasing -lm -no-pie +%: %_c.c libc_impl.o version_info.o + $(CC) libc_impl.o version_info.o $< -o $@ $(OPT_CFLAGS) -fno-strict-aliasing -lm -no-pie .PHONY: all clean diff --git a/tools/ido5.3_recomp/README.md b/tools/ido5.3_recomp/README.md new file mode 100644 index 00000000..99199739 --- /dev/null +++ b/tools/ido5.3_recomp/README.md @@ -0,0 +1,150 @@ +# `ido5.3_recomp` + +This directory builds a native x86-64 Linux copy of the original SGI IRIX +5.3 IDO compiler toolchain (`cc`, `cfe`, `uopt`, `ugen`, `as1`, `acpp`, +`copt`, `ujoin`, `uld`, `umerge`, `usplit`, plus the `err.english.cc` +message table `cc` reads at runtime). This is what the root `Makefile` +invokes when building with `IDO_RECOMP=YES` (the default) — see +[`docs/SetupGuide.md`](../../docs/SetupGuide.md#recompile-ido) for how that +fits into the overall build. + +## Where this comes from + +The original IDO 5.3 binaries only ever ran on real IRIX (MIPS) hardware or +under an emulator like `qemu-irix`. [`decompals/ido-static-recomp` +](https://github.com/decompals/ido-static-recomp) is a *static +recompiler*: a tool (`recomp.cpp` in this directory) that disassembles one +of those original MIPS ELF binaries and emits equivalent C source, which is +then compiled normally with a host C compiler (`gcc`). The result is a +program that behaves like the original IRIX binary but runs natively, +without any emulation overhead — much faster to compile GoldenEye's C +source with than running the real thing under `qemu-irix`. + +`decompals/ido-static-recomp` is itself a fork of +[`Emill/ido-static-recomp`](https://github.com/Emill/ido-static-recomp) +(the original author's repo) that has become the actively maintained +version. **This directory's source is a vendored copy of +`decompals/ido-static-recomp`, not a submodule** — the relevant files +(`recomp.cpp`, `libc_impl.c`, `libc_impl.h`, `header.h`, `helpers.h`, +`elf.h`, `version_info.c`) are copied in directly rather than referenced as +a git submodule or fetched at build time, so this repo can be built +offline/reproducibly without depending on that repo staying available. + +## What's tracked here vs. generated + +Only source files and this `Makefile`/`README.md` are committed to git: + +* `recomp.cpp`, `libc_impl.c`, `libc_impl.h`, `header.h`, `helpers.h`, + `elf.h`, `version_info.c` — the recompiler and the IRIX-syscall runtime + shim (`libc_impl.*`) the recompiled binaries link against +* `rabbitizer/` — vendored dependency, see below +* `Makefile`, `.gitignore`, this `README.md` + +Everything else in this directory when you look at it locally (`recomp`, +`cc`, `cfe`, `uopt`, `ugen`, `as1`, `acpp`, `copt`, `ujoin`, `uld`, +`umerge`, `usplit`, `err.english.cc`, the intermediate `*_c.c` files, +`*.o`) is build output, covered by `.gitignore`, and gets regenerated from +scratch by `make`. + +## Building + +### Automatically (normal case) + +A plain `make` from the repo root builds this toolchain automatically if +`tools/ido5.3_recomp/cc` doesn't exist yet — wired up via `tools/Makefile` +(`$(MAKE) -C ido5.3_recomp` runs as a dependency whenever `cc` is missing) +and `scripts/make/build_tools.sh`, which the root `Makefile`'s +`prerequisites` target calls. You don't need to do anything extra for this +in the common case. + +### Manually + +```bash +cd tools/ido5.3_recomp +make +``` + +This requires the original SGI IRIX 5.3 IDO binaries to be present at +`../irix/root/usr/{bin,lib}/*` (checked into this repo — `cc` is under +`usr/bin`, everything else recompiled is under `usr/lib`). The recipe +(per binary): run `./recomp > _c.c`, then compile that +generated C against `libc_impl.o` (the IRIX syscall/runtime shim) and +`version_info.o` with `gcc`. + +`ugen` needs `recomp --conservative` specifically — the original `ugen` +binary relies on undefined-behavior stack reads, and `--conservative` +makes `recomp` emit C that reproduces that behavior safely instead of +leaving it to chance under a different compiler/optimization level. + +`make clean` removes all generated binaries/intermediate files and also +runs `make -C rabbitizer distclean`. + +## Rabbitizer (the vendored dependency) + +`recomp` needs a MIPS instruction disassembler to make sense of the +original IRIX binaries' machine code before it can emit equivalent C. +Older versions of this tool used the general-purpose `libcapstone` +library for that (a system package, `libcapstone-dev`). As of decompals' +rewrite in October 2022, upstream replaced Capstone with +[`rabbitizer`](https://github.com/Decompollaborate/rabbitizer) — a small, +purpose-built MIPS/RSP/R5900 disassembly library maintained by the same +decompilation-tooling group, with better support for the instruction +quirks recomp actually cares about. + +**"Vendored in" means the `rabbitizer/` subdirectory here is a plain copy +of rabbitizer's source**, not a git submodule/subrepo and not a system +package — there's nothing to `apt install` for it. Upstream +`decompals/ido-static-recomp` tracks rabbitizer as a `git subrepo` (see +their `tools/rabbitizer/.gitrepo`) pinned at commit +`72bf240f468d30286888212b5fb773fae94340f6`; the copy here was taken from +that same commit, with the Python bindings directory and standalone test +programs stripped out (`recomp` only needs the C/C++ static library, not +rabbitizer's Python module or its own test suite). + +It's built automatically as a dependency of `recomp` — the `Makefile` +here runs `make -C rabbitizer static` first, which produces +`rabbitizer/build/librabbitizer.a` and `librabbitizerpp.a` (both +gitignored build output), and `recomp` links against the C++ one. + +To refresh rabbitizer to a newer version: check what commit current +`decompals/ido-static-recomp` pins in `tools/rabbitizer/.gitrepo`, fetch +[`Decompollaborate/rabbitizer`](https://github.com/Decompollaborate/rabbitizer) +at that commit, and replace this `rabbitizer/` directory with it (again +trimming the Python bindings/tests if you want to keep the vendored copy +minimal — they aren't required for `make static`). + +## Version pinning / updating to a newer decompals release + +The recompiler source here is currently pinned to +`decompals/ido-static-recomp` @ commit `d5aec59` (`origin/main` HEAD at +the time it was last updated, 17 commits past tag `v1.2`). This is +recorded in two places: a comment at the top of this `Makefile`, and the +`RECOMP_PACKAGE_VERSION` variable baked into every built binary — check it +with `./cc --version` (or any other built binary) after building. + +To pick up a newer version: + +1. Clone or update a local checkout of + [`decompals/ido-static-recomp`](https://github.com/decompals/ido-static-recomp) + and check out whatever commit/tag you want to move to. +2. Copy `recomp.cpp`, `libc_impl.c`, `libc_impl.h`, `header.h`, + `helpers.h`, `elf.h`, and `version_info.c` from that checkout over the + copies in this directory. Diff first — upstream's `main` root `Makefile` + is much bigger than this one (it builds IDO 7.1 too, multiple binary + sets, universal macOS builds, etc.); this `Makefile` only needs to keep + pace with whatever those individual source files require to compile. +3. If rabbitizer's pinned commit changed upstream, refresh `rabbitizer/` + per the section above. +4. Update the pinned-commit comment at the top of this `Makefile` and the + `RECOMP_PACKAGE_VERSION` variable. +5. `make clean && make` here, then — **this is the important part** — do a + full clean rebuild of the ROM for all three regions from the repo root + (`make clean && make VERSION=US && make VERSION=EU && make VERSION=JP`) + and confirm `scripts/make/checksum.sh` still reports `MATCH!` for each. + This project's entire premise is a byte-identical ROM; a recomp version + bump that changes how any of these programs behaves when compiling + GoldenEye's actual source is a real regression even if everything + "builds successfully." If a mismatch shows up, bisect by swapping + individual binaries (`cc`, `cfe`, `uopt`, `ugen`, `as1`, `uld`, + `umerge`, `ujoin`, `usplit`, `acpp`, `copt`) between old and new builds + to isolate which one changed behavior. diff --git a/tools/ido5.3_recomp/header.h b/tools/ido5.3_recomp/header.h index b4cd0d31..fd469e01 100644 --- a/tools/ido5.3_recomp/header.h +++ b/tools/ido5.3_recomp/header.h @@ -13,18 +13,42 @@ #define RM_RP 2 #define RM_RM 3 -union FloatReg { - float f[2]; - uint32_t w[2]; - double d; -}; - #define cvt_w_d(f) \ ((fcsr & RM_RZ) ? ((isnan(f) || f <= -2147483649.0 || f >= 2147483648.0) ? (fcsr |= 0x40, 2147483647) : (int)f) : (assert(0), 0)) #define cvt_w_s(f) cvt_w_d((double)f) -static union FloatReg f0 = {{0, 0}}, f2 = {{0, 0}}, f4 = {{0, 0}}, f6 = {{0, 0}}, f8 = {{0, 0}}, -f10 = {{0, 0}}, f12 = {{0, 0}}, f14 = {{0, 0}}, f16 = {{0, 0}}, f18 = {{0, 0}}, f20 = {{0, 0}}, -f22 = {{0, 0}}, f24 = {{0, 0}}, f26 = {{0, 0}}, f28 = {{0, 0}}, f30 = {{0, 0}}; +static union FloatReg + f0 = {{0, 0}}, + f1 = {{0, 0}}, + f2 = {{0, 0}}, + f3 = {{0, 0}}, + f4 = {{0, 0}}, + f5 = {{0, 0}}, + f6 = {{0, 0}}, + f7 = {{0, 0}}, + f8 = {{0, 0}}, + f9 = {{0, 0}}, + f10 = {{0, 0}}, + f11 = {{0, 0}}, + f12 = {{0, 0}}, + f13 = {{0, 0}}, + f14 = {{0, 0}}, + f15 = {{0, 0}}, + f16 = {{0, 0}}, + f17 = {{0, 0}}, + f18 = {{0, 0}}, + f19 = {{0, 0}}, + f20 = {{0, 0}}, + f21 = {{0, 0}}, + f22 = {{0, 0}}, + f23 = {{0, 0}}, + f24 = {{0, 0}}, + f25 = {{0, 0}}, + f26 = {{0, 0}}, + f27 = {{0, 0}}, + f28 = {{0, 0}}, + f29 = {{0, 0}}, + f30 = {{0, 0}}, + f31 = {{0, 0}}; static uint32_t fcsr = 1; diff --git a/tools/ido5.3_recomp/helpers.h b/tools/ido5.3_recomp/helpers.h index b2bd2351..29c7e995 100644 --- a/tools/ido5.3_recomp/helpers.h +++ b/tools/ido5.3_recomp/helpers.h @@ -3,6 +3,8 @@ #include +#define MEM_F64(a) (double_from_memory(mem, a)) +#define MEM_F32(a) (*(float *)(mem + a)) #define MEM_U32(a) (*(uint32_t *)(mem + a)) #define MEM_S32(a) (*(int32_t *)(mem + a)) #define MEM_U16(a) (*(uint16_t *)(mem + ((a) ^ 2))) @@ -10,4 +12,28 @@ #define MEM_U8(a) (*(uint8_t *)(mem + ((a) ^ 3))) #define MEM_S8(a) (*(int8_t *)(mem + ((a) ^ 3))) +#if !defined(__GNUC__) && !defined(__clang__) +#define __attribute__(x) +#endif + +#if __STDC_VERSION__ >= 202000L +#define FALLTHROUGH [[fallthrough]] +#define NODISCARD [[nodiscard]] +#define NORETURN [[noreturn]] +#define UNUSED [[maybe_unused]] +#else +#define FALLTHROUGH __attribute__((fallthrough)) +#define NODISCARD __attribute__((warn_unused_result)) +#define NORETURN _Noreturn +#define UNUSED __attribute__((unused)) +#endif + +#if defined(_MSC_VER) +# define UNREACHABLE __assume(0) +#elif defined(__GNUC__) || defined(__clang__) +# define UNREACHABLE __builtin_unreachable() +#else +# define UNREACHABLE +#endif + #endif diff --git a/tools/ido5.3_recomp/libc_impl.c b/tools/ido5.3_recomp/libc_impl.c index af4ca713..a2d58b53 100644 --- a/tools/ido5.3_recomp/libc_impl.c +++ b/tools/ido5.3_recomp/libc_impl.c @@ -16,8 +16,14 @@ #ifdef __CYGWIN__ #include #endif + #ifdef __APPLE__ - #include +#include +#include +#endif + +#ifdef __FreeBSD__ +#include #endif #include @@ -37,13 +43,14 @@ #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) -#define STRING(param) size_t param##_len = wrapper_strlen(mem, param##_addr); \ - char param[param##_len + 1]; \ - for (size_t i = 0; i <= param##_len; i++) { \ - param[i] = MEM_S8(param##_addr + i); \ +#define STRING(param) \ + size_t param##_len = wrapper_strlen(mem, param##_addr); \ + char param[param##_len + 1]; \ + for (size_t __i = 0; __i <= param##_len; __i++) { \ + param[__i] = MEM_S8(param##_addr + __i); \ } -#if !defined(IDO53) && !defined(IDO71) +#if !defined(IDO53) && !defined(IDO71) && !defined(IDO72) #define IDO71 #endif @@ -57,6 +64,10 @@ #define CTYPE_ADDR 0x0fb504f0 #define LIBC_ADDR 0x0fb50000 #define LIBC_SIZE 0x3000 +#define OPTERR_ADDR 0x0fb522e0 +#define OPTIND_ADDR 0x0fb522e4 +#define OPTOPT_ADDR 0x0fb522e8 +#define OPTARG_ADDR 0x0fb522ec #endif #ifdef IDO71 @@ -66,32 +77,51 @@ #define CTYPE_ADDR 0x0fb4cba0 #define LIBC_ADDR 0x0fb4c000 #define LIBC_SIZE 0x3000 +#define OPTERR_ADDR 0x0fb436a0 +#define OPTIND_ADDR 0x0fb436a4 +#define OPTOPT_ADDR 0x0fb436a8 +#define OPTARG_ADDR 0x0fb436ac +#endif + +#ifdef IDO72 +// IDO 7.2 +#define IOB_ADDR 0x0fb49454 +#define ERRNO_ADDR 0x0fb49290 +#define CTYPE_ADDR 0x0fb46db0 +#define LIBC_ADDR 0x0fb46000 +#define LIBC_SIZE 0x4000 +// #define OPTERR_ADDR +// #define OPTIND_ADDR +// #define OPTOPT_ADDR +// #define OPTARG_ADDR #endif #define STDIN_ADDR IOB_ADDR #define STDOUT_ADDR (IOB_ADDR + 0x10) #define STDERR_ADDR (IOB_ADDR + 0x20) -#define STDIN ((struct FILE_irix *)&MEM_U32(STDIN_ADDR)) -#define STDOUT ((struct FILE_irix *)&MEM_U32(STDOUT_ADDR)) -#define STDERR ((struct FILE_irix *)&MEM_U32(STDERR_ADDR)) +#define STDIN ((struct FILE_irix*)&MEM_U32(STDIN_ADDR)) +#define STDOUT ((struct FILE_irix*)&MEM_U32(STDOUT_ADDR)) +#define STDERR ((struct FILE_irix*)&MEM_U32(STDERR_ADDR)) #define MALLOC_BINS_ADDR custom_libc_data_addr #define STRTOK_DATA_ADDR (MALLOC_BINS_ADDR + (30 - 3) * 4) #define INTBUF_ADDR (STRTOK_DATA_ADDR + 4) +// INTBUF has size at least 0x1000 - 4 - (30 - 3) * 4, treat it as having size 0x400 +#define INTBUF_SIZE 0x400 #define SIGNAL_HANDLER_STACK_START LIBC_ADDR #define NFILE 100 -#define IOFBF 0000 /* full buffered */ -#define IOLBF 0100 /* line buffered */ -#define IONBF 0004 /* not buffered */ -#define IOEOF 0020 /* EOF reached on read */ -#define IOERR 0040 /* I/O error from system */ +#define IOFBF 0000 /* full buffered */ +#define IOLBF 0100 /* line buffered */ +#define IONBF 0004 /* not buffered */ +#define IOEOF 0020 /* EOF reached on read */ +#define IOERR 0040 /* I/O error from system */ -#define IOREAD 0001 /* currently reading */ -#define IOWRT 0002 /* currently writing */ -#define IORW 0200 /* opened for reading and writing */ +#define IOREAD 0001 /* currently reading */ +#define IOWRT 0002 /* currently writing */ +#define IORW 0200 /* opened for reading and writing */ #define IOMYBUF 0010 /* stdio malloc()'d buffer */ #define STDIO_BUFSIZE 16384 @@ -112,8 +142,8 @@ struct FILE_irix { static struct { struct { - uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest); - uint8_t *mem; + fptr_trampoline trampoline; + uint8_t* mem; uint32_t fp_dest; } handlers[65]; volatile uint32_t recursion_level; @@ -132,102 +162,121 @@ static uint32_t custom_libc_data_addr; #define _B 0100 /* Blank */ #define _X 0200 /* heXadecimal digit */ -static char ctype[] = { 0, - -/* 0 1 2 3 4 5 6 7 */ - -/* 0*/ _C, _C, _C, _C, _C, _C, _C, _C, -/* 10*/ _C, _S|_C, _S|_C, _S|_C, _S|_C, _S|_C, _C, _C, -/* 20*/ _C, _C, _C, _C, _C, _C, _C, _C, -/* 30*/ _C, _C, _C, _C, _C, _C, _C, _C, -/* 40*/ _S|_B, _P, _P, _P, _P, _P, _P, _P, -/* 50*/ _P, _P, _P, _P, _P, _P, _P, _P, -/* 60*/ _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, -/* 70*/ _N|_X, _N|_X, _P, _P, _P, _P, _P, _P, -/*100*/ _P, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U, -/*110*/ _U, _U, _U, _U, _U, _U, _U, _U, -/*120*/ _U, _U, _U, _U, _U, _U, _U, _U, -/*130*/ _U, _U, _U, _P, _P, _P, _P, _P, -/*140*/ _P, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L, -/*150*/ _L, _L, _L, _L, _L, _L, _L, _L, -/*160*/ _L, _L, _L, _L, _L, _L, _L, _L, -/*170*/ _L, _L, _L, _P, _P, _P, _P, _C, -/*200*/ 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0 +static unsigned char ctype[] = { + 0, + // clang-format off +/* 00 01 02 03 04 05 06 07 */ +/* 0 */ _C, _C, _C, _C, _C, _C, _C, _C, +/* 010 */ _C, _S|_C, _S|_C, _S|_C, _S|_C, _S|_C, _C, _C, +/* 020 */ _C, _C, _C, _C, _C, _C, _C, _C, +/* 030 */ _C, _C, _C, _C, _C, _C, _C, _C, +/* 040 */ _S|_B, _P, _P, _P, _P, _P, _P, _P, +/* 050 */ _P, _P, _P, _P, _P, _P, _P, _P, +/* 060 */ _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, _N|_X, +/* 070 */ _N|_X, _N|_X, _P, _P, _P, _P, _P, _P, +/* 0100 */ _P, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U, +/* 0110 */ _U, _U, _U, _U, _U, _U, _U, _U, +/* 0120 */ _U, _U, _U, _U, _U, _U, _U, _U, +/* 0130 */ _U, _U, _U, _P, _P, _P, _P, _P, +/* 0140 */ _P, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L, +/* 0150 */ _L, _L, _L, _L, _L, _L, _L, _L, +/* 0160 */ _L, _L, _L, _L, _L, _L, _L, _L, +/* 0170 */ _L, _L, _L, _P, _P, _P, _P, _C, +/* 0200 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0210 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0220 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0230 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0240 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0250 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0260 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0270 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0300 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0310 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0320 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0330 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0340 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0350 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0360 */ 0, 0, 0, 0, 0, 0, 0, 0, +/* 0370 */ 0, 0, 0, 0, 0, 0, 0, 0, + // clang-format on }; -#define REDIRECT_USR_LIB +static char usr_lib_redirect[PATH_MAX + 1]; +static char usr_include_redirect[PATH_MAX + 1]; -#ifdef REDIRECT_USR_LIB -static char bin_dir[PATH_MAX + 1]; -#endif static int g_file_max = 3; -#if defined(__CYGWIN__) || defined(__APPLE__) +/* Compilation Target/Emulation Host Page Size Determination */ +#if defined(__CYGWIN__) || (defined(__linux__) && defined(__aarch64__)) +#define RUNTIME_PAGESIZE +/* ARM64 linux can have page sizes of 4kb, 16kb, or 64kb */ +/* Set in main before running the translated code */ static size_t g_Pagesize; + +#define TRUNC_PAGE(x) ((x) & ~(g_Pagesize - 1)) +#define ROUND_PAGE(x) (TRUNC_PAGE((x) + (g_Pagesize - 1))) + +#elif defined(__APPLE__) +/* https://developer.apple.com/documentation/apple-silicon/addressing-architectural-differences-in-your-macos-code */ +#define TRUNC_PAGE(x) (trunc_page((x))) +#define ROUND_PAGE(x) (round_page((x))) + +#else +/* A fixed 4KB page size for x64 linux (is there anything else?) */ +#define TRUNC_PAGE(x) ((x) & ~(0x1000 - 1)) +#define ROUND_PAGE(x) (TRUNC_PAGE((x) + (0x1000 - 1))) +#endif /* PageSize Macros */ + +static uint8_t* memory_map(size_t length) { +#ifdef __CYGWIN__ + uint8_t* mem = mmap(0, length, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); +#else + uint8_t* mem = mmap(0, length, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); #endif -static uint8_t *memory_map(size_t length) -{ -#if defined(__CYGWIN__) || defined(__APPLE__) - uint8_t *mem = mmap(0, length, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0); - g_Pagesize = sysconf(_SC_PAGESIZE); - assert(((uintptr_t)mem & (g_Pagesize-1)) == 0); -#else - uint8_t *mem = mmap(0, length, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); -#endif + assert(TRUNC_PAGE((uintptr_t)mem) == (uintptr_t)mem && + "Page size too small, try increasing `page_size` in recomp.cpp"); if (mem == MAP_FAILED) { - perror("mmap"); + perror("mmap (memory_map)"); exit(1); } return mem; } -static void memory_allocate(uint8_t *mem, uint32_t start, uint32_t end) -{ +static void memory_allocate(uint8_t* mem, uint32_t start, uint32_t end) { assert(start >= MEM_REGION_START); assert(end <= MEM_REGION_START + MEM_REGION_SIZE); -#if defined(__CYGWIN__) || defined(__APPLE__) - uintptr_t _start = ((uintptr_t)mem + start) & ~(g_Pagesize-1); - uintptr_t _end = ((uintptr_t)mem + end + (g_Pagesize-1)) & ~(g_Pagesize-1); + // `start` will be passed to mmap, + // so it has to be host aligned in order to keep the guest's pages valid + assert(start == TRUNC_PAGE(start) && "Page size too small, try increasing `page_size` in recomp.cpp"); +#ifdef __CYGWIN__ + uintptr_t _start = TRUNC_PAGE((uintptr_t)mem + start); + uintptr_t _end = ROUND_PAGE((uintptr_t)mem + end); - if(mprotect((void*)_start, _end - _start, PROT_READ | PROT_WRITE) < 0) { - perror("mprotect"); + if (mprotect((void*)_start, _end - _start, PROT_READ | PROT_WRITE) < 0) { + perror("mprotect (memory_allocate)"); exit(1); } #else - if (mmap(mem + start, end - start, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) == MAP_FAILED) { - perror("mmap"); + void* addr = (void*)TRUNC_PAGE((uintptr_t)mem + start); + size_t len = end - start; + + if (mmap(addr, len, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0) == MAP_FAILED) { + perror("mmap (memory_allocate)"); exit(1); } -#endif +#endif /* __CYGWIN__ */ } -static void memory_unmap(uint8_t *mem, size_t length) -{ +static void memory_unmap(uint8_t* mem, size_t length) { if (munmap(mem, length)) { perror("munmap"); exit(1); } } - -static void free_all_file_bufs(uint8_t *mem) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(IOB_ADDR); +static void free_all_file_bufs(uint8_t* mem) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(IOB_ADDR); for (int i = 0; i < g_file_max; i++) { if (f[i]._flag & IOMYBUF) { wrapper_free(mem, f[i]._base_addr); @@ -235,10 +284,31 @@ static void free_all_file_bufs(uint8_t *mem) { } } -static void find_bin_dir(void) { -#ifdef REDIRECT_USR_LIB +void get_env_var(char* out, char* name) { + char* env = getenv(name); + + if (env == NULL) { // No environment variable found, so just return empty string + out[0] = '\0'; + return; + } + + if (snprintf(out, PATH_MAX, "%s", env) >= PATH_MAX) { + fprintf(stderr, "Error: Environment variable %s is too large\n", name); + exit(1); + } +} + +static void init_usr_lib_redirect(void) { + char path[PATH_MAX + 1] = { 0 }; + + get_env_var(path, "USR_LIB"); + + if (path[0] != '\0') { + strcpy(usr_lib_redirect, path); + return; + } + // gets the current executable's path - char path[PATH_MAX + 1] = {0}; #ifdef __CYGWIN__ uint32_t size = GetModuleFileName(NULL, path, PATH_MAX); if (size == 0 || size == PATH_MAX) { @@ -249,6 +319,21 @@ static void find_bin_dir(void) { if (_NSGetExecutablePath(path, &size) < 0) { return; } +#elif defined __FreeBSD__ + // Get the current executable's path name using a management information buffer + int mib[4]; + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PATHNAME; + mib[3] = -1; + + size_t len = sizeof(path); + int success = sysctl(mib, 4, path, &len, NULL, 0); + + if (success != 0) { + perror("sysctl"); + return; + } #else ssize_t size = readlink("/proc/self/exe", path, PATH_MAX); if (size < 0 || size == PATH_MAX) { @@ -256,37 +341,162 @@ static void find_bin_dir(void) { } #endif - strcpy(bin_dir, dirname(path)); -#endif + strcpy(usr_lib_redirect, dirname(path)); } -int main(int argc, char *argv[]) { - int ret; +static void init_usr_include_redirect(void) { + char path[PATH_MAX + 1] = { 0 }; - find_bin_dir(); + get_env_var(path, "USR_INCLUDE"); - uint8_t *mem = memory_map(MEM_REGION_SIZE); - mem -= MEM_REGION_START; - int run(uint8_t *mem, int argc, char *argv[]); - ret = run(mem, argc, argv); + strcpy(usr_include_redirect, path); +} + +static void init_redirect_paths(void) { + init_usr_lib_redirect(); + init_usr_include_redirect(); +} + +/** + * Redirects `path` by replacing the initial segment `from` by `to`. The result is placed in `out`, and true returned + * If `path` does not have `from` as its initial segment, or there is no `to`, false is returned. + * If an error occurs, an error message will be printed, and the program exited. + */ +bool redirect_path(char* out, const char* path, const char* from, const char* to) { + int from_len = strlen(from); + + if ((strncmp(path, from, from_len) == 0) && (to[0] != '\0')) { + char redirected_path[PATH_MAX + 1] = { 0 }; + int n; + + n = snprintf(redirected_path, sizeof(redirected_path), "%s%s", to, path + from_len); + + if ((n >= 0) && ((size_t)n < sizeof(redirected_path))) { + strcpy(out, redirected_path); + return true; + } + + // Redirection failed + fprintf(stderr, "Error: Unable to redirect %s->%s for %s\n", from, to, path); + exit(1); + } + + return false; +} + +typedef struct GlobalArgs { + int argc; + char** argv; +} GlobalArgs; + +static GlobalArgs global_args = { 0, NULL }; + +static void init_global_args(int argc, char** argv) { + assert(global_args.argc == 0); + assert(global_args.argv == NULL); + + global_args.argc = argc; + global_args.argv = malloc((argc + 1) * sizeof(char*)); + for (int i = 0; i < argc; i++) { + global_args.argv[i] = malloc((strlen(argv[i]) + 1) * sizeof(char)); + strcpy(global_args.argv[i], argv[i]); + } + global_args.argv[argc] = NULL; +} + +static void destroy_global_args(void) { + assert(global_args.argc != 0); + assert(global_args.argv != NULL); + + for (int i = 0; i < global_args.argc; i++) { + free(global_args.argv[i]); + } + + free(global_args.argv); + global_args.argc = 0; +} + +static char** make_argv_from_mem(uint8_t* mem, int argc, uint32_t argv_addr) { + char** argv = malloc((argc + 1) * sizeof(char*)); + + for (int i = 0; i < argc; i++) { + uint32_t str_addr = MEM_U32(argv_addr + i * sizeof(uint32_t)); + uint32_t len = wrapper_strlen(mem, str_addr) + 1; + + argv[i] = malloc(len * sizeof(char)); + char* pos = argv[i]; + while (len--) { + *pos++ = MEM_S8(str_addr); + ++str_addr; + } + } + + argv[argc] = NULL; + + return argv; +} + +static void free_argv(int argc, char** argv) { + for (int i = 0; i < argc; i++) { + free(argv[i]); + } + + free(argv); +} + +void final_cleanup(uint8_t* mem) { wrapper_fflush(mem, 0); free_all_file_bufs(mem); mem += MEM_REGION_START; memory_unmap(mem, MEM_REGION_SIZE); + destroy_global_args(); +} + +void print_version_info(void); +const char* progname; + +int main(int argc, char* argv[]) { + int ret; + progname = argv[0]; + + for (int i = 1; i < argc; i++) { + if (strcmp(argv[i], "--version") == 0) { + print_version_info(); + return 0; + } + } + + init_redirect_paths(); +#ifdef RUNTIME_PAGESIZE + g_Pagesize = sysconf(_SC_PAGESIZE); +#endif /* RUNTIME_PAGESIZE */ + + uint8_t* mem = memory_map(MEM_REGION_SIZE); + mem -= MEM_REGION_START; + init_global_args(argc, argv); + int run(uint8_t * mem, int argc, char* argv[]); + ret = run(mem, argc, argv); + final_cleanup(mem); return ret; } -void mmap_initial_data_range(uint8_t *mem, uint32_t start, uint32_t end) { +void mmap_initial_data_range(uint8_t* mem, uint32_t start, uint32_t end) { custom_libc_data_addr = end; +#ifdef __APPLE__ + end += vm_page_size; +#elif defined RUNTIME_PAGESIZE + end += g_Pagesize; +#else end += 4096; +#endif /* __APPLE__ */ memory_allocate(mem, start, end); cur_sbrk = end; } -void setup_libc_data(uint8_t *mem) { +void setup_libc_data(uint8_t* mem) { memory_allocate(mem, LIBC_ADDR, (LIBC_ADDR + LIBC_SIZE)); for (size_t i = 0; i < sizeof(ctype); i++) { - MEM_S8(CTYPE_ADDR + i) = ctype[i]; + MEM_U8(CTYPE_ADDR + i) = ctype[i]; } STDIN->_flag = IOREAD; STDIN->_file = 0; @@ -296,7 +506,17 @@ void setup_libc_data(uint8_t *mem) { STDERR->_file = 2; } -static uint32_t strcpy1(uint8_t *mem, uint32_t dest_addr, const char *str) { +static uint32_t memcpy_str2mem(uint8_t* mem, uint32_t dest_addr, const char* str, size_t count) { + uint32_t p = dest_addr; + + while (count--) { + MEM_S8(p) = *str++; + p++; + } + return dest_addr; +} + +static uint32_t strcpy_str2mem(uint8_t* mem, uint32_t dest_addr, const char* str) { for (;;) { char c = *str; ++str; @@ -308,60 +528,25 @@ static uint32_t strcpy1(uint8_t *mem, uint32_t dest_addr, const char *str) { } } -static uint32_t strcpy2(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr) { +static char* strcpy_mem2str(uint8_t* mem, char* dest, uint32_t src_addr) { for (;;) { char c = MEM_S8(src_addr); - ++src_addr; - MEM_S8(dest_addr) = c; - ++dest_addr; + src_addr++; + *dest++ = c; if (c == '\0') { - return dest_addr - 1; + return dest - 1; } } } -uint32_t wrapper_sbrk(uint8_t *mem, int increment) { +uint32_t wrapper_sbrk(uint8_t* mem, int increment) { uint32_t old = cur_sbrk; - memory_allocate(mem, old, (old + increment)); - cur_sbrk += increment; + size_t alignedInc = ROUND_PAGE(old + increment) - old; + memory_allocate(mem, old, old + alignedInc); + cur_sbrk += alignedInc; return old; } -#if 0 -uint32_t wrapper_malloc(uint8_t *mem, uint32_t size) { - uint32_t orig_size = size; - size += 8; - size = (size + 0xfff) & ~0xfff; - uint32_t ret = wrapper_sbrk(mem, size); - MEM_U32(ret) = orig_size; - return ret + 8; -} - -uint32_t wrapper_calloc(uint8_t *mem, uint32_t num, uint32_t size) { - uint64_t new_size = (uint64_t)num * size; - assert(new_size == (uint32_t)new_size); - uint32_t ret = wrapper_malloc(mem, new_size); - return wrapper_memset(mem, ret, 0, new_size); -} - -uint32_t wrapper_realloc(uint8_t *mem, uint32_t data_addr, uint32_t size) { - if (data_addr == 0) { - return wrapper_malloc(mem, size); - } - uint32_t orig_size = MEM_U32(data_addr - 8); - if (size < orig_size || orig_size < 4088 && size < 4088) { - MEM_U32(data_addr - 8) = size; - return data_addr; - } - uint32_t new_addr = wrapper_malloc(mem, size); - return wrapper_memcpy(mem, new_addr, data_addr, MIN(size, orig_size)); -} - -void wrapper_free(uint8_t *mem, uint32_t data_addr) { - // NOP -} -#else - /* Simple bin-based malloc algorithm @@ -404,14 +589,16 @@ size_t mem_allocated; size_t max_mem_used; size_t num_sbrks; size_t num_allocs; -uint32_t wrapper_malloc(uint8_t *mem, uint32_t size) { +uint32_t wrapper_malloc(uint8_t* mem, uint32_t size) { int bin = -1; + for (int i = 3; i < 30; i++) { - if (size <= (1 << i)) { + if (size <= (1U << i)) { bin = i; break; } } + if (bin == -1) { return 0; } @@ -425,10 +612,10 @@ uint32_t wrapper_malloc(uint8_t *mem, uint32_t size) { uint32_t sbrk_request = 0x10000; if (8 + item_size > sbrk_request) { sbrk_request = 8 + item_size; - sbrk_request = (sbrk_request + 0xfff) & ~0xfff; + sbrk_request = ROUND_PAGE(sbrk_request); } uint32_t left_over = sbrk_request % (8 + item_size); - sbrk_request -= left_over & ~0xfff; + sbrk_request -= left_over & ~(4096 - 1); mem_allocated += sbrk_request; ++num_sbrks; node_ptr = wrapper_sbrk(mem, sbrk_request); @@ -450,14 +637,14 @@ uint32_t wrapper_malloc(uint8_t *mem, uint32_t size) { return node_ptr + 8; } -uint32_t wrapper_calloc(uint8_t *mem, uint32_t num, uint32_t size) { +uint32_t wrapper_calloc(uint8_t* mem, uint32_t num, uint32_t size) { uint64_t new_size = (uint64_t)num * size; assert(new_size == (uint32_t)new_size); uint32_t ret = wrapper_malloc(mem, new_size); return wrapper_memset(mem, ret, 0, new_size); } -uint32_t wrapper_realloc(uint8_t *mem, uint32_t data_addr, uint32_t size) { +uint32_t wrapper_realloc(uint8_t* mem, uint32_t data_addr, uint32_t size) { if (data_addr == 0) { return wrapper_malloc(mem, size); } else { @@ -480,23 +667,31 @@ uint32_t wrapper_realloc(uint8_t *mem, uint32_t data_addr, uint32_t size) { } } -void wrapper_free(uint8_t *mem, uint32_t data_addr) { +void wrapper_free(uint8_t* mem, uint32_t data_addr) { + if (data_addr == 0) { + return; + } uint32_t node_ptr = data_addr - 8; int bin = MEM_U32(node_ptr); uint32_t size = MEM_U32(node_ptr + 4); + if (size == 0) { + // Double free. IDO 5.3 strip relies on this. + fprintf(stderr, "warning: double free: 0x%x\n", data_addr); + return; + } uint32_t list_ptr = MALLOC_BINS_ADDR + (bin - 3) * 4; assert(bin >= 3 && bin < 30); - assert(size <= (1 << bin)); + assert(size <= (1U << bin)); MEM_U32(node_ptr) = MEM_U32(list_ptr); MEM_U32(node_ptr + 4) = 0; MEM_U32(list_ptr) = node_ptr; mem_used -= size; } -#endif -int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); - STRING(format) // for debug +int wrapper_fscanf(uint8_t* mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp) { + UNUSED struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); + STRING(format) + (void)format; int ret = 0; char c; @@ -517,12 +712,11 @@ int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_ return ret; } if (!isspace(ch)) { - //wrapper_ungetc(mem, ch, fp_addr); break; } } bool l = false; - continue_format: + continue_format: switch (c) { case 'l': assert(!l && "ll not implemented in fscanf"); @@ -530,8 +724,7 @@ int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_ c = MEM_S8(format_addr); ++format_addr; goto continue_format; - case 'd': - { + case 'd': { int64_t num = 0; int sign = 1; bool found_first = false; @@ -572,7 +765,7 @@ int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_ } else if (c == '\0') { break; } else { - percent: + percent: ch = wrapper_fgetc(mem, fp_addr); if (ch == -1) { break; @@ -586,242 +779,270 @@ int wrapper_fscanf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_ return ret; } -int wrapper_printf(uint8_t *mem, uint32_t format_addr, uint32_t sp) { - STRING(format) - if (!strcmp(format, " child died due to signal %d.\n")) { - printf(format, MEM_U32(sp + 4)); - return 1; - } - assert(0 && "printf not implemented"); - return 0; +/* printf wrappers and auxiliary functions */ + +typedef int (*prout)(uint8_t* mem, uint32_t* out, uint32_t in_addr, uint32_t count); + +int prout_file(uint8_t* mem, uint32_t* fp_addr, uint32_t in_addr, uint32_t count) { + return wrapper_fwrite(mem, in_addr, 1, count, *fp_addr); } -int wrapper_sprintf(uint8_t *mem, uint32_t str_addr, uint32_t format_addr, uint32_t sp) { - STRING(format) // for debug - char temp[32]; +int prout_mem(uint8_t* mem, uint32_t* dest_addr, uint32_t in_addr, uint32_t count) { + wrapper_memcpy(mem, *dest_addr, in_addr, count); + MEM_U8(*dest_addr + count) = '\0'; + *dest_addr += count; + return count; +} - if (!strcmp(format, "%.16e")) { - union { - uint32_t w[2]; - double d; - } d; - d.w[1] = MEM_U32(sp + 2 * 4); - d.w[0] = MEM_U32(sp + 3 * 4); - sprintf(temp, "%.16e", d.d); - strcpy1(mem, str_addr, temp); - return 1; - } - if (!strcmp(format, "\\%03o")) { - sprintf(temp, "\\%03o", MEM_U32(sp + 2 * 4)); - strcpy1(mem, str_addr, temp); - return 1; - } - if (!strcmp(format, "%*ld=")) { - sprintf(temp, "%*d=", MEM_U32(sp + 2 * 4), MEM_U32(sp + 3 * 4)); - strcpy1(mem, str_addr, temp); - return 1; - } - - uint32_t orig_str_addr = str_addr; - uint32_t pos = 0; - int ret = 0; - char c; - sp += 2 * 4; - for (;;) { - c = MEM_S8(format_addr + pos); - ++pos; - if (c == '%') { - bool l = false; - c = MEM_S8(format_addr + pos); - ++pos; - uint32_t zeros = 0; - bool zero_prefix = false; - continue_format: - switch (c) { - case '0': - do { - c = MEM_S8(format_addr + pos); - ++pos; - if (c >= '0' && c <= '9') { - zeros *= 10; - zeros += c - '0'; - } - } while (c >= '0' && c <= '9'); - goto continue_format; - case '#': - c = MEM_S8(format_addr + pos); - ++pos; - zero_prefix = true; - goto continue_format; - break; - case 'l': - assert(!l && "ll not implemented in fscanf"); - c = MEM_S8(format_addr + pos); - ++pos; - l = true; - goto continue_format; - break; - case 'd': - if (zeros != 0) { - char temp1[32]; - sprintf(temp1, "%%0%dd", zeros); - sprintf(temp, temp1, MEM_S32(sp)); - } else { - sprintf(temp, "%d", MEM_S32(sp)); - } - sp += 4; - str_addr = strcpy1(mem, str_addr, temp); - ++ret; - break; - case 'o': - if (zero_prefix) { - sprintf(temp, "%#o", MEM_S32(sp)); - } else { - sprintf(temp, "%o", MEM_S32(sp)); - } - sp += 4; - str_addr = strcpy1(mem, str_addr, temp); - ++ret; - break; - case 'x': - if (zero_prefix) { - sprintf(temp, "%#x", MEM_S32(sp)); - } else { - sprintf(temp, "%x", MEM_S32(sp)); - } - sp += 4; - str_addr = strcpy1(mem, str_addr, temp); - ++ret; - break; - case 'u': - sprintf(temp, "%u", MEM_S32(sp)); - sp += 4; - str_addr = strcpy1(mem, str_addr, temp); - ++ret; - break; - case 's': - str_addr = strcpy2(mem, str_addr, MEM_U32(sp)); - sp += 4; - ++ret; - break; - case 'c': - MEM_S8(str_addr) = (char)MEM_U32(sp); - ++str_addr; - sp += 4; - ++ret; - break; - case '%': - MEM_S8(str_addr) = '%'; - ++str_addr; - break; - default: - fprintf(stderr, "%s\n", format); - assert(0 && "non-implemented sprintf format"); - } - } else if (c == '\0') { +/** + * Get the arguments corresponding to the minwidth and precision ("*", ".*" or "*.*") + */ +static uint32_t get_asterisk_args(uint8_t* mem, int count, int args[2], uint32_t sp) { + switch (count) { + case 1: + args[0] = MEM_U32(sp); + sp += 4; break; - } else { - MEM_S8(str_addr) = c; - ++str_addr; - } - } - MEM_S8(str_addr) = '\0'; - STRING(orig_str) // for debug - //printf("result: '%s' '%s'\n", format, orig_str); - return ret; + case 2: + args[0] = MEM_U32(sp); + sp += 4; + args[1] = MEM_U32(sp); + sp += 4; + break; + + default: + break; + } + return sp; } -int wrapper_fprintf(uint8_t *mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); - STRING(format) - sp += 8; - /*if (!strcmp(format, "%s")) { - uint32_t s_addr = MEM_U32(sp); - STRING(s) - if (fp_addr == STDERR_ADDR) { - fprintf(stderr, "%s", s); - fflush(stderr); - return 1; - } +// Macro is the only way to pass `data` into sprintf since it can vary in type. +#define ASTERISK_PRINTF(num_printed, buf, format_specifier, asterisk_count, ast_args, data) \ + switch (asterisk_count) { \ + case 0: \ + num_printed = sprintf(buf, format_specifier, data); \ + break; \ + case 1: \ + num_printed = sprintf(buf, format_specifier, ast_args[0], data); \ + break; \ + case 2: \ + num_printed = sprintf(buf, format_specifier, ast_args[0], ast_args[1], data); \ + break; \ } - if (!strcmp(format, "%s: %s: ")) { - uint32_t s1_addr = MEM_U32(sp), s2_addr = MEM_U32(sp + 4); - STRING(s1) - STRING(s2) - if (fp_addr == STDERR_ADDR) { - fprintf(stderr, "%s: %s: ", s1, s2); - fflush(stderr); - return 1; - } - }*/ + +/** + * printf internal that takes `mem` as input. + */ +int _mprintf(prout prout_func, uint8_t* mem, uint32_t* out, uint32_t format_addr, uint32_t sp) { + STRING(format) + int ret = 0; - for (;;) { + uint32_t sp_incr = 4; + size_t buf_len = 0x1000; + char* buf = malloc(buf_len); + size_t str_len = 0x1000; + char* str = malloc(str_len); + + while (true) { uint32_t pos = format_addr; - char ch = MEM_S8(pos); - while (ch != '%' && ch != '\0') { - ++pos; - ch = MEM_S8(pos); + char c = MEM_U8(pos); + int asterisk_count = 0; + int ast_args[2] = { 0, 0 }; + char format_specifier[0x100] = { '%' }; + int step_chars_printed = 0; + + // print non-format parts + while ((c != '%') && (c != '\0')) { + pos++; + c = MEM_U8(pos); } if (format_addr != pos) { - if (wrapper_fwrite(mem, format_addr, 1, pos - format_addr, fp_addr) != pos - format_addr) { - break; + if (prout_func(mem, out, format_addr, pos - format_addr) != (int)(pos - format_addr)) { + return -1; } } - if (ch == '\0') { + + if (c == '\0') { break; } - ++pos; - ch = MEM_S8(pos); - switch (ch) { - case 'd': - { - char buf[32]; - sprintf(buf, "%d", MEM_U32(sp)); - strcpy1(mem, INTBUF_ADDR, buf); - if (wrapper_fputs(mem, INTBUF_ADDR, fp_addr) == -1) { - return ret; - } - sp += 4; - ++ret; - break; + + format_addr = pos; + // Copy next format specifier and prepare the ground + int i; + for (i = 1; c != '\0'; i++) { + pos++; + c = MEM_U8(pos); + format_specifier[i] = c; + switch (c) { + // need an extra argument + case '*': + asterisk_count++; + continue; + + // flags + case '+': + case '-': + case '#': + case '0': + // precision indicator + case '.': + // length modifiers (others exist, but only in >=C99) + case 'h': + case 'l': + case 'L': + // minimum field widths + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + continue; + + default: + break; } - case 's': - { - if (wrapper_fputs(mem, MEM_U32(sp), fp_addr) == -1) { - return ret; - } - sp += 4; - ++ret; + i++; + break; + } /* for (i = 1; c != '\0'; i++) */ + format_specifier[i] = '\0'; + + // format and print + switch (c) { + case '%': + step_chars_printed = sprintf(buf, "%c", '%'); break; - } + case 'c': - { - char buf[32]; - sprintf(buf, "%c", MEM_U32(sp)); - strcpy1(mem, INTBUF_ADDR, buf); - if (wrapper_fputs(mem, INTBUF_ADDR, fp_addr) == -1) { - return ret; - } - sp += 4; - ++ret; + case 'd': + case 'i': + case 'o': + case 'X': + case 'x': + case 'u': + sp = get_asterisk_args(mem, asterisk_count, ast_args, sp); + ASTERISK_PRINTF(step_chars_printed, buf, format_specifier, asterisk_count, ast_args, MEM_U32(sp)); break; - } + + case 'F': + case 'f': + case 'G': + case 'g': + case 'E': + case 'e': + sp = get_asterisk_args(mem, asterisk_count, ast_args, sp); + + // align to position of float promoted to double + if ((sp % 8) != 0) { + sp += 4; + } + + ASTERISK_PRINTF(step_chars_printed, buf, format_specifier, asterisk_count, ast_args, MEM_F64(sp)); + + // Increment an extra time to leap over the second half of the double + sp += sp_incr; + break; + + case 's': + // Special handling for most common case + if (strcmp(format_specifier, "%s") == 0) { + uint32_t str_addr = MEM_U32(sp); + size_t len = wrapper_strlen(mem, str_addr); + step_chars_printed = prout_func(mem, out, str_addr, len); + goto increments; + } + + sp = get_asterisk_args(mem, asterisk_count, ast_args, sp); + + // Copy string into normal memory to be able to pass it to normal printf functions + step_chars_printed = wrapper_strlen(mem, MEM_U32(sp)); + if (step_chars_printed + 1 > (int)str_len) { + str_len = step_chars_printed + 1; + str = realloc(str, str_len); + } + strcpy_mem2str(mem, str, MEM_U32(sp)); + + // Work out the actual length to print + switch (asterisk_count) { + case 0: + step_chars_printed = snprintf(NULL, 0, format_specifier, str); + break; + + case 1: + step_chars_printed = snprintf(NULL, 0, format_specifier, ast_args[0], str); + break; + + case 2: + step_chars_printed = snprintf(NULL, 0, format_specifier, ast_args[0], ast_args[1], str); + break; + } + if (step_chars_printed + 1 > (int)buf_len) { + buf_len = step_chars_printed + 1; + buf = realloc(buf, buf_len); + } + + ASTERISK_PRINTF(step_chars_printed, buf, format_specifier, asterisk_count, ast_args, str); + break; + default: fprintf(stderr, "missing format: '%s'\n", format); - assert(0 && "non-implemented fprintf format"); + assert(0 && "non-implemented printf format"); + break; } - format_addr = ++pos; - } + + int chars_printed = 0; + while (chars_printed < step_chars_printed) { + int in_count = MIN(INTBUF_SIZE, step_chars_printed - chars_printed); + + memcpy_str2mem(mem, INTBUF_ADDR, buf + chars_printed, in_count); + + int out_count = prout_func(mem, out, INTBUF_ADDR, in_count); + if (out_count != in_count) { + fprintf(stderr, "Did not print %s successfully\n", format); + return ret; + } + chars_printed += out_count; + } + + increments: + sp += sp_incr; + ret += step_chars_printed; + pos++; + format_addr = pos; + } /* while (true) */ + free(buf); + free(str); + return ret; } -int wrapper__doprnt(uint8_t *mem, uint32_t format_addr, uint32_t params_addr, uint32_t fp_addr) { +int wrapper_fprintf(uint8_t* mem, uint32_t fp_addr, uint32_t format_addr, uint32_t sp) { + sp += 8; + return _mprintf(prout_file, mem, &fp_addr, format_addr, sp); +} + +int wrapper_printf(uint8_t* mem, uint32_t format_addr, uint32_t sp) { + uint32_t fp_addr = STDOUT_ADDR; + + sp += 4; + return _mprintf(prout_file, mem, &fp_addr, format_addr, sp); +} + +int wrapper_sprintf(uint8_t* mem, uint32_t str_addr, uint32_t format_addr, uint32_t sp) { + sp += 8; + return _mprintf(prout_mem, mem, &str_addr, format_addr, sp); +} + +int wrapper__doprnt(uint8_t* mem, uint32_t format_addr, uint32_t params_addr, uint32_t fp_addr) { assert(0 && "_doprnt not implemented"); return 0; } -uint32_t wrapper_strlen(uint8_t *mem, uint32_t str_addr) { +uint32_t wrapper_strlen(uint8_t* mem, uint32_t str_addr) { uint32_t len = 0; while (MEM_S8(str_addr) != '\0') { ++str_addr; @@ -830,8 +1051,18 @@ uint32_t wrapper_strlen(uint8_t *mem, uint32_t str_addr) { return len; } -int wrapper_open(uint8_t *mem, uint32_t pathname_addr, int flags, int mode) { - STRING(pathname) +int wrapper_open(uint8_t* mem, uint32_t path_addr, int flags, int mode) { + STRING(path) + + char rpath[PATH_MAX + 1]; + char* pathPtr = path; + + if (redirect_path(rpath, path, "/usr/include", usr_include_redirect) || + redirect_path(rpath, path, "/usr/lib", usr_lib_redirect) || + redirect_path(rpath, path, "/lib", usr_lib_redirect) ) { + pathPtr = rpath; + } + int f = flags & O_ACCMODE; if (flags & 0x100) { f |= O_CREAT; @@ -848,13 +1079,15 @@ int wrapper_open(uint8_t *mem, uint32_t pathname_addr, int flags, int mode) { if (flags & 0x08) { f |= O_APPEND; } - int fd = open(pathname, f, mode); + + int fd = open(pathPtr, f, mode); MEM_U32(ERRNO_ADDR) = errno; return fd; } -int wrapper_creat(uint8_t *mem, uint32_t pathname_addr, int mode) { +int wrapper_creat(uint8_t* mem, uint32_t pathname_addr, int mode) { STRING(pathname) + int ret = creat(pathname, mode); if (ret < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -862,7 +1095,7 @@ int wrapper_creat(uint8_t *mem, uint32_t pathname_addr, int mode) { return ret; } -int wrapper_access(uint8_t *mem, uint32_t pathname_addr, int mode) { +int wrapper_access(uint8_t* mem, uint32_t pathname_addr, int mode) { STRING(pathname) int ret = access(pathname, mode); if (ret != 0) { @@ -871,7 +1104,7 @@ int wrapper_access(uint8_t *mem, uint32_t pathname_addr, int mode) { return ret; } -int wrapper_rename(uint8_t *mem, uint32_t oldpath_addr, uint32_t newpath_addr) { +int wrapper_rename(uint8_t* mem, uint32_t oldpath_addr, uint32_t newpath_addr) { STRING(oldpath) STRING(newpath) int ret = rename(oldpath, newpath); @@ -881,9 +1114,9 @@ int wrapper_rename(uint8_t *mem, uint32_t oldpath_addr, uint32_t newpath_addr) { return ret; } -int wrapper_utime(uint8_t *mem, uint32_t filename_addr, uint32_t times_addr) { +int wrapper_utime(uint8_t* mem, uint32_t filename_addr, uint32_t times_addr) { STRING(filename) - struct utimbuf buf = {0, 0}; + struct utimbuf buf = { 0, 0 }; int ret = utime(filename, times_addr == 0 ? NULL : &buf); if (ret == 0) { if (times_addr != 0) { @@ -896,7 +1129,7 @@ int wrapper_utime(uint8_t *mem, uint32_t filename_addr, uint32_t times_addr) { return ret; } -int wrapper_flock(uint8_t *mem, int fd, int operation) { +int wrapper_flock(uint8_t* mem, int fd, int operation) { int ret = flock(fd, operation); if (ret != 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -904,7 +1137,7 @@ int wrapper_flock(uint8_t *mem, int fd, int operation) { return ret; } -int wrapper_chmod(uint8_t *mem, uint32_t path_addr, uint32_t mode) { +int wrapper_chmod(uint8_t* mem, uint32_t path_addr, uint32_t mode) { STRING(path) int ret = chmod(path, mode); if (ret < 0) { @@ -917,11 +1150,11 @@ int wrapper_umask(int mode) { return umask(mode); } -uint32_t wrapper_ecvt(uint8_t *mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr) { +uint32_t wrapper_ecvt(uint8_t* mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr) { assert(0); } -uint32_t wrapper_fcvt(uint8_t *mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr) { +uint32_t wrapper_fcvt(uint8_t* mem, double number, int ndigits, uint32_t decpt_addr, uint32_t sign_addr) { assert(0); } @@ -933,23 +1166,23 @@ float wrapper_sqrtf(float v) { return sqrtf(v); } -int wrapper_atoi(uint8_t *mem, uint32_t nptr_addr) { +int wrapper_atoi(uint8_t* mem, uint32_t nptr_addr) { STRING(nptr) return atoi(nptr); } -int wrapper_atol(uint8_t *mem, uint32_t nptr_addr) { +int wrapper_atol(uint8_t* mem, uint32_t nptr_addr) { return wrapper_atoi(mem, nptr_addr); } -double wrapper_atof(uint8_t *mem, uint32_t nptr_addr) { +double wrapper_atof(uint8_t* mem, uint32_t nptr_addr) { STRING(nptr); return atof(nptr); } -int wrapper_strtol(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { +int wrapper_strtol(uint8_t* mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { STRING(nptr) - char *endptr = NULL; + char* endptr = NULL; int64_t res = strtoll(nptr, endptr_addr != 0 ? &endptr : NULL, base); if (res > INT_MAX) { MEM_U32(ERRNO_ADDR) = ERANGE; @@ -965,9 +1198,9 @@ int wrapper_strtol(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int b return res; } -uint32_t wrapper_strtoul(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { +uint32_t wrapper_strtoul(uint8_t* mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { STRING(nptr) - char *endptr = NULL; + char* endptr = NULL; uint64_t res = strtoull(nptr, endptr_addr != 0 ? &endptr : NULL, base); if (res > INT_MAX) { MEM_U32(ERRNO_ADDR) = ERANGE; @@ -979,9 +1212,37 @@ uint32_t wrapper_strtoul(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, return res; } -double wrapper_strtod(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr) { +int64_t wrapper_strtoll(uint8_t* mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { STRING(nptr) - char *endptr = NULL; + char* endptr = NULL; + errno = 0; + int64_t res = strtoll(nptr, endptr_addr != 0 ? &endptr : NULL, base); + if (errno != 0) { + MEM_U32(ERRNO_ADDR) = errno; + } + if (endptr != NULL) { + MEM_U32(endptr_addr) = nptr_addr + (uint32_t)(endptr - nptr); + } + return res; +} + +uint64_t wrapper_strtoull(uint8_t* mem, uint32_t nptr_addr, uint32_t endptr_addr, int base) { + STRING(nptr) + char* endptr = NULL; + errno = 0; + uint64_t res = strtoull(nptr, endptr_addr != 0 ? &endptr : NULL, base); + if (errno != 0) { + MEM_U32(ERRNO_ADDR) = errno; + } + if (endptr != NULL) { + MEM_U32(endptr_addr) = nptr_addr + (uint32_t)(endptr - nptr); + } + return res; +} + +double wrapper_strtod(uint8_t* mem, uint32_t nptr_addr, uint32_t endptr_addr) { + STRING(nptr) + char* endptr = NULL; errno = 0; double res = strtod(nptr, endptr_addr != 0 ? &endptr : NULL); if (errno != 0) { @@ -993,7 +1254,7 @@ double wrapper_strtod(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr) { return res; } -uint32_t wrapper_strchr(uint8_t *mem, uint32_t str_addr, int c) { +uint32_t wrapper_strchr(uint8_t* mem, uint32_t str_addr, int c) { c = c & 0xff; for (;;) { unsigned char ch = MEM_U8(str_addr); @@ -1007,7 +1268,7 @@ uint32_t wrapper_strchr(uint8_t *mem, uint32_t str_addr, int c) { } } -uint32_t wrapper_strrchr(uint8_t *mem, uint32_t str_addr, int c) { +uint32_t wrapper_strrchr(uint8_t* mem, uint32_t str_addr, int c) { c = c & 0xff; uint32_t ret = 0; for (;;) { @@ -1022,13 +1283,14 @@ uint32_t wrapper_strrchr(uint8_t *mem, uint32_t str_addr, int c) { } } -uint32_t wrapper_strcspn(uint8_t *mem, uint32_t str_addr, uint32_t invalid_addr) { +uint32_t wrapper_strcspn(uint8_t* mem, uint32_t str_addr, uint32_t invalid_addr) { STRING(invalid) - uint32_t n = strlen(invalid); + size_t n = strlen(invalid); uint32_t pos = 0; char c; - while ((c = MEM_S8(str_addr)) != 0) { - for (int i = 0; i < n; i++) { + + while ((c = MEM_U8(str_addr)) != 0) { + for (size_t i = 0; i < n; i++) { if (c == invalid[i]) { return pos; } @@ -1039,12 +1301,13 @@ uint32_t wrapper_strcspn(uint8_t *mem, uint32_t str_addr, uint32_t invalid_addr) return pos; } -uint32_t wrapper_strpbrk(uint8_t *mem, uint32_t str_addr, uint32_t accept_addr) { +uint32_t wrapper_strpbrk(uint8_t* mem, uint32_t str_addr, uint32_t accept_addr) { STRING(accept) - uint32_t n = strlen(accept); + size_t n = strlen(accept); char c; + while ((c = MEM_S8(str_addr)) != 0) { - for (int i = 0; i < n; i++) { + for (size_t i = 0; i < n; i++) { if (c == accept[i]) { return str_addr; } @@ -1054,7 +1317,7 @@ uint32_t wrapper_strpbrk(uint8_t *mem, uint32_t str_addr, uint32_t accept_addr) return 0; } -static void stat_common(uint8_t *mem, uint32_t buf_addr, struct stat *statbuf) { +static void stat_common(uint8_t* mem, uint32_t buf_addr, struct stat* statbuf) { struct irix_stat { int st_dev; int pad1[3]; @@ -1089,17 +1352,17 @@ static void stat_common(uint8_t *mem, uint32_t buf_addr, struct stat *statbuf) { s.st_ctim.tv_sec = statbuf->st_ctimespec.tv_sec; s.st_ctim.tv_nsec = statbuf->st_ctimespec.tv_nsec; #else - s.st_atim.tv_sec = statbuf->st_atim.tv_sec; - s.st_atim.tv_nsec = statbuf->st_atim.tv_nsec; - s.st_mtim.tv_sec = statbuf->st_mtim.tv_sec; - s.st_mtim.tv_nsec = statbuf->st_mtim.tv_nsec; - s.st_ctim.tv_sec = statbuf->st_ctim.tv_sec; - s.st_ctim.tv_nsec = statbuf->st_ctim.tv_nsec; + s.st_atim.tv_sec = statbuf->st_atim.tv_sec; + s.st_atim.tv_nsec = statbuf->st_atim.tv_nsec; + s.st_mtim.tv_sec = statbuf->st_mtim.tv_sec; + s.st_mtim.tv_nsec = statbuf->st_mtim.tv_nsec; + s.st_ctim.tv_sec = statbuf->st_ctim.tv_sec; + s.st_ctim.tv_nsec = statbuf->st_ctim.tv_nsec; #endif memcpy(&MEM_U32(buf_addr), &s, sizeof(s)); } -int wrapper_fstat(uint8_t *mem, int fildes, uint32_t buf_addr) { +int wrapper_fstat(uint8_t* mem, int fildes, uint32_t buf_addr) { struct stat statbuf; if (fstat(fildes, &statbuf) < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1110,7 +1373,7 @@ int wrapper_fstat(uint8_t *mem, int fildes, uint32_t buf_addr) { } } -int wrapper_stat(uint8_t *mem, uint32_t pathname_addr, uint32_t buf_addr) { +int wrapper_stat(uint8_t* mem, uint32_t pathname_addr, uint32_t buf_addr) { STRING(pathname) struct stat statbuf; if (stat(pathname, &statbuf) < 0) { @@ -1122,7 +1385,7 @@ int wrapper_stat(uint8_t *mem, uint32_t pathname_addr, uint32_t buf_addr) { } } -int wrapper_ftruncate(uint8_t *mem, int fd, int length) { +int wrapper_ftruncate(uint8_t* mem, int fd, int length) { int ret = ftruncate(fd, length); if (ret != 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1130,25 +1393,52 @@ int wrapper_ftruncate(uint8_t *mem, int fd, int length) { return ret; } -void wrapper_bcopy(uint8_t *mem, uint32_t src_addr, uint32_t dst_addr, uint32_t len) { - wrapper_memcpy(mem, dst_addr, src_addr, len); +int wrapper_truncate(uint8_t* mem, uint32_t pathname_addr, int length) { + STRING(pathname) + int ret = truncate(pathname, length); + if (ret != 0) { + MEM_U32(ERRNO_ADDR) = errno; + } + return ret; } -uint32_t wrapper_memcpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, uint32_t len) { - uint32_t saved = dst_addr; +void wrapper_bcopy(uint8_t* mem, uint32_t src_addr, uint32_t dst_addr, uint32_t len) { if (dst_addr % 4 == 0 && src_addr % 4 == 0 && len % 4 == 0) { - memcpy(&MEM_U32(dst_addr), &MEM_U32(src_addr), len); + // Use memmove to copy regions that are 4-byte aligned. + // This prevents the byte-swapped mem from causing issues when copying normally. + // Memmove handles overlapping copies correctly, so overlap does not need to be checked. + memmove(&MEM_U32(dst_addr), &MEM_U32(src_addr), len); + } else if (dst_addr > src_addr) { + // Perform a reverse byte-swapped copy when the destination is ahead of the source. + // This prevents overwriting the source contents before they're read. + dst_addr += len - 1; + src_addr += len - 1; + while (len--) { + MEM_U8(dst_addr) = MEM_U8(src_addr); + --dst_addr; + --src_addr; + } } else { + // Otherwise, perform a normal byte-swapped copy. while (len--) { MEM_U8(dst_addr) = MEM_U8(src_addr); ++dst_addr; ++src_addr; } } - return saved; } -uint32_t wrapper_memccpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, int c, uint32_t len) { +/** + * IRIX's memcpy seems to allow overlapping destination and source pointers, while the C standard dictates + * both pointer should not overlap, (UB otherwise). + * Because of this, we only use host bcopy since it can handle overlapping regions + */ +uint32_t wrapper_memcpy(uint8_t* mem, uint32_t dst_addr, uint32_t src_addr, uint32_t len) { + wrapper_bcopy(mem, src_addr, dst_addr, len); + return dst_addr; +} + +uint32_t wrapper_memccpy(uint8_t* mem, uint32_t dst_addr, uint32_t src_addr, int c, uint32_t len) { while (len--) { uint8_t ch = MEM_U8(src_addr); MEM_U8(dst_addr) = ch; @@ -1161,8 +1451,8 @@ uint32_t wrapper_memccpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, int return 0; } -int wrapper_read(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes) { - uint8_t *buf = (uint8_t *)malloc(nbytes); +int wrapper_read(uint8_t* mem, int fd, uint32_t buf_addr, uint32_t nbytes) { + uint8_t* buf = (uint8_t*)malloc(nbytes); ssize_t ret = read(fd, buf, nbytes); if (ret < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1175,8 +1465,8 @@ int wrapper_read(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes) { return (int)ret; } -int wrapper_write(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes) { - uint8_t *buf = (uint8_t *)malloc(nbytes); +int wrapper_write(uint8_t* mem, int fd, uint32_t buf_addr, uint32_t nbytes) { + uint8_t* buf = (uint8_t*)malloc(nbytes); for (size_t i = 0; i < nbytes; i++) { buf[i] = MEM_U8(buf_addr + i); } @@ -1188,7 +1478,7 @@ int wrapper_write(uint8_t *mem, int fd, uint32_t buf_addr, uint32_t nbytes) { return (int)ret; } -static uint32_t init_file(uint8_t *mem, int fd, int i, const char *path, const char *mode) { +static uint32_t init_file(uint8_t* mem, int fd, int i, const char* path, const char* mode) { int flags = O_RDONLY; if (strcmp(mode, "r") == 0 || strcmp(mode, "rb") == 0) { flags = O_RDONLY; @@ -1203,24 +1493,24 @@ static uint32_t init_file(uint8_t *mem, int fd, int i, const char *path, const c } else if (strcmp(mode, "a+") == 0 || strcmp(mode, "a+b") == 0) { flags = O_RDWR | O_CREAT | O_APPEND; } - if (fd == -1) { -#ifdef REDIRECT_USR_LIB - char fixed_path[PATH_MAX + 1]; - if (!strcmp(path, "/usr/lib/err.english.cc") && bin_dir[0] != '\0') { - int n = snprintf(fixed_path, sizeof(fixed_path), "%s/err.english.cc", bin_dir); - if (n >= 0 && n < sizeof(fixed_path)) { - path = fixed_path; - } + if (fd == -1) { + char rpath[PATH_MAX + 1]; + const char* pathPtr = path; + + if (redirect_path(rpath, path, "/usr/lib/DCC", usr_lib_redirect) || + redirect_path(rpath, path, "/usr/lib", usr_lib_redirect)) { + pathPtr = rpath; } -#endif - fd = open(path, flags, 0666); + + fd = open(pathPtr, flags, 0666); + if (fd < 0) { MEM_U32(ERRNO_ADDR) = errno; return 0; } } - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(IOB_ADDR); + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(IOB_ADDR); uint32_t ret = 0; if (i == -1) { for (i = 3; i < NFILE; i++) { @@ -1243,22 +1533,29 @@ static uint32_t init_file(uint8_t *mem, int fd, int i, const char *path, const c return ret; } -uint32_t wrapper_fopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr) { +uint32_t wrapper_fopen(uint8_t* mem, uint32_t path_addr, uint32_t mode_addr) { + if (path_addr == 0) { + return 0; + } + assert(mode_addr != 0); + STRING(path) STRING(mode) + return init_file(mem, -1, -1, path, mode); } -uint32_t wrapper_freopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr, uint32_t fp_addr) { +uint32_t wrapper_freopen(uint8_t* mem, uint32_t path_addr, uint32_t mode_addr, uint32_t fp_addr) { STRING(path) STRING(mode) - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); + + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); wrapper_fclose(mem, fp_addr); - return init_file(mem, -1, f - (struct FILE_irix *)&MEM_U32(IOB_ADDR), path, mode); + return init_file(mem, -1, f - (struct FILE_irix*)&MEM_U32(IOB_ADDR), path, mode); } -int wrapper_fclose(uint8_t *mem, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_fclose(uint8_t* mem, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); wrapper_fflush(mem, fp_addr); if (f->_flag & IOMYBUF) { wrapper_free(mem, f->_base_addr); @@ -1268,8 +1565,8 @@ int wrapper_fclose(uint8_t *mem, uint32_t fp_addr) { return 0; } -static int flush_all(uint8_t *mem) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(IOB_ADDR); +static int flush_all(uint8_t* mem) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(IOB_ADDR); int ret = 0; for (int i = 0; i < g_file_max; i++) { if (f[i]._flag & IOWRT) { @@ -1279,12 +1576,12 @@ static int flush_all(uint8_t *mem) { return ret; } -int wrapper_fflush(uint8_t *mem, uint32_t fp_addr) { +int wrapper_fflush(uint8_t* mem, uint32_t fp_addr) { if (fp_addr == 0) { // Flush all return flush_all(mem); } - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (f->_flag & IOWRT) { int p = 0; int to_flush = f->_ptr_addr - f->_base_addr; @@ -1304,8 +1601,16 @@ int wrapper_fflush(uint8_t *mem, uint32_t fp_addr) { return 0; } -int wrapper_ftell(uint8_t *mem, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_fchown(uint8_t* mem, int fd, int owner, int group) { + int ret = fchown(fd, owner, group); + if (ret != 0) { + MEM_U32(ERRNO_ADDR) = errno; + } + return ret; +} + +int wrapper_ftell(uint8_t* mem, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); int adjust; if (f->_cnt < 0) { f->_cnt = 0; @@ -1327,26 +1632,28 @@ int wrapper_ftell(uint8_t *mem, uint32_t fp_addr) { return res; } -void wrapper_rewind(uint8_t *mem, uint32_t fp_addr) { +void wrapper_rewind(uint8_t* mem, uint32_t fp_addr) { (void)wrapper_fseek(mem, fp_addr, 0, SEEK_SET); - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); f->_flag &= ~IOERR; } -int wrapper_fseek(uint8_t *mem, uint32_t fp_addr, int offset, int origin) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_fseek(uint8_t* mem, uint32_t fp_addr, int offset, int origin) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); int c, p; f->_flag &= ~IOEOF; if (f->_flag & IOREAD) { if (origin < SEEK_END && f->_base_addr && !(f->_flag & IONBF)) { c = f->_cnt; p = offset; + if (origin == SEEK_SET) { p += c - lseek(f->_file, 0L, SEEK_CUR); } else { offset -= c; } - if (!(f->_flag & IORW) && c > 0 && p <= c && p >= f->_base_addr - f->_ptr_addr) { + + if (!(f->_flag & IORW) && c > 0 && p <= c && (uint32_t)p >= f->_base_addr - f->_ptr_addr) { f->_ptr_addr += p; f->_cnt -= p; return 0; @@ -1366,7 +1673,10 @@ int wrapper_fseek(uint8_t *mem, uint32_t fp_addr, int offset, int origin) { f->_ptr_addr = f->_base_addr; } p = lseek(f->_file, offset, origin); + } else { + assert(0 && "This code should be unreachable"); } + if (p < 0) { MEM_U32(ERRNO_ADDR) = errno; return p; @@ -1374,7 +1684,7 @@ int wrapper_fseek(uint8_t *mem, uint32_t fp_addr, int offset, int origin) { return 0; } -int wrapper_lseek(uint8_t *mem, int fd, int offset, int whence) { +int wrapper_lseek(uint8_t* mem, int fd, int offset, int whence) { int ret = (int)lseek(fd, offset, whence); if (ret == -1) { MEM_U32(ERRNO_ADDR) = errno; @@ -1382,7 +1692,7 @@ int wrapper_lseek(uint8_t *mem, int fd, int offset, int whence) { return ret; } -int wrapper_dup(uint8_t *mem, int fd) { +int wrapper_dup(uint8_t* mem, int fd) { fd = dup(fd); if (fd < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1390,7 +1700,7 @@ int wrapper_dup(uint8_t *mem, int fd) { return fd; } -int wrapper_dup2(uint8_t *mem, int oldfd, int newfd) { +int wrapper_dup2(uint8_t* mem, int oldfd, int newfd) { int fd = dup2(oldfd, newfd); if (fd < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1398,7 +1708,7 @@ int wrapper_dup2(uint8_t *mem, int oldfd, int newfd) { return fd; } -int wrapper_pipe(uint8_t *mem, uint32_t pipefd_addr) { +int wrapper_pipe(uint8_t* mem, uint32_t pipefd_addr) { int pipefd[2]; int ret = pipe(pipefd); if (ret == 0) { @@ -1410,17 +1720,18 @@ int wrapper_pipe(uint8_t *mem, uint32_t pipefd_addr) { return ret; } -void wrapper_perror(uint8_t *mem, uint32_t str_addr) { +void wrapper_perror(uint8_t* mem, uint32_t str_addr) { STRING(str) perror(str); } -int wrapper_fdopen(uint8_t *mem, int fd, uint32_t mode_addr) { +int wrapper_fdopen(uint8_t* mem, int fd, uint32_t mode_addr) { STRING(mode) + return init_file(mem, fd, -1, NULL, mode); } -uint32_t wrapper_memset(uint8_t *mem, uint32_t dest_addr, int byte, uint32_t n) { +uint32_t wrapper_memset(uint8_t* mem, uint32_t dest_addr, int byte, uint32_t n) { uint32_t saved = dest_addr; if (dest_addr % 4 == 0 && n % 4 == 0) { memset(&MEM_U32(dest_addr), byte, n); @@ -1433,7 +1744,7 @@ uint32_t wrapper_memset(uint8_t *mem, uint32_t dest_addr, int byte, uint32_t n) return saved; } -int wrapper_bcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { +int wrapper_bcmp(uint8_t* mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { while (n--) { if (MEM_U8(s1_addr) != MEM_U8(s2_addr)) { return 1; @@ -1444,7 +1755,7 @@ int wrapper_bcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { return 0; } -int wrapper_memcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { +int wrapper_memcmp(uint8_t* mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { while (n--) { unsigned char c1 = MEM_U8(s1_addr); unsigned char c2 = MEM_U8(s2_addr); @@ -1464,7 +1775,7 @@ int wrapper_getpid(void) { return getpid(); } -int wrapper_getpgrp(uint8_t *mem) { +int wrapper_getpgrp(uint8_t* mem) { int ret = getpgrp(); if (ret == -1) { MEM_U32(ERRNO_ADDR) = errno; @@ -1472,7 +1783,7 @@ int wrapper_getpgrp(uint8_t *mem) { return ret; } -int wrapper_remove(uint8_t *mem, uint32_t path_addr) { +int wrapper_remove(uint8_t* mem, uint32_t path_addr) { STRING(path) int ret = remove(path); if (ret < 0) { @@ -1481,9 +1792,9 @@ int wrapper_remove(uint8_t *mem, uint32_t path_addr) { return ret; } -int wrapper_unlink(uint8_t *mem, uint32_t path_addr) { +int wrapper_unlink(uint8_t* mem, uint32_t path_addr) { if (path_addr == 0) { - fprintf(stderr, "Warning: unlink with NULL as arguement\n"); + fprintf(stderr, "Warning: unlink with NULL as argument\n"); MEM_U32(ERRNO_ADDR) = EFAULT; return -1; } @@ -1495,7 +1806,7 @@ int wrapper_unlink(uint8_t *mem, uint32_t path_addr) { return ret; } -int wrapper_close(uint8_t *mem, int fd) { +int wrapper_close(uint8_t* mem, int fd) { int ret = close(fd); if (ret < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1503,7 +1814,7 @@ int wrapper_close(uint8_t *mem, int fd) { return ret; } -int wrapper_strcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr) { +int wrapper_strcmp(uint8_t* mem, uint32_t s1_addr, uint32_t s2_addr) { for (;;) { char c1 = MEM_S8(s1_addr); char c2 = MEM_S8(s2_addr); @@ -1518,7 +1829,7 @@ int wrapper_strcmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr) { } } -int wrapper_strncmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { +int wrapper_strncmp(uint8_t* mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n) { if (n == 0) { return 0; } @@ -1536,7 +1847,7 @@ int wrapper_strncmp(uint8_t *mem, uint32_t s1_addr, uint32_t s2_addr, uint32_t n } } -uint32_t wrapper_strcpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr) { +uint32_t wrapper_strcpy(uint8_t* mem, uint32_t dest_addr, uint32_t src_addr) { uint32_t saved = dest_addr; for (;;) { char c = MEM_S8(src_addr); @@ -1549,7 +1860,7 @@ uint32_t wrapper_strcpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr) { } } -uint32_t wrapper_strncpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n) { +uint32_t wrapper_strncpy(uint8_t* mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n) { uint32_t i; for (i = 0; i < n && MEM_S8(src_addr) != '\0'; i++) { MEM_S8(dest_addr + i) = MEM_S8(src_addr + i); @@ -1560,7 +1871,7 @@ uint32_t wrapper_strncpy(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, ui return dest_addr; } -uint32_t wrapper_strcat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr) { +uint32_t wrapper_strcat(uint8_t* mem, uint32_t dest_addr, uint32_t src_addr) { uint32_t saved = dest_addr; while (MEM_S8(dest_addr) != '\0') { ++dest_addr; @@ -1574,7 +1885,7 @@ uint32_t wrapper_strcat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr) { return saved; } -uint32_t wrapper_strncat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n) { +uint32_t wrapper_strncat(uint8_t* mem, uint32_t dest_addr, uint32_t src_addr, uint32_t n) { uint32_t saved = dest_addr; while (MEM_S8(dest_addr) != '\0') { ++dest_addr; @@ -1588,7 +1899,7 @@ uint32_t wrapper_strncat(uint8_t *mem, uint32_t dest_addr, uint32_t src_addr, ui return saved; } -uint32_t wrapper_strtok(uint8_t *mem, uint32_t str_addr, uint32_t delimiters_addr) { +uint32_t wrapper_strtok(uint8_t* mem, uint32_t str_addr, uint32_t delimiters_addr) { if (str_addr == 0) { str_addr = MEM_U32(STRTOK_DATA_ADDR); } @@ -1599,8 +1910,7 @@ uint32_t wrapper_strtok(uint8_t *mem, uint32_t str_addr, uint32_t delimiters_add uint32_t p; for (p = str_addr; MEM_S8(p) != '\0'; p++) { uint32_t q; - for (q = delimiters_addr; MEM_S8(q) != '\0' && MEM_S8(q) != MEM_S8(p); q++) { - } + for (q = delimiters_addr; MEM_S8(q) != '\0' && MEM_S8(q) != MEM_S8(p); q++) {} if (MEM_S8(q) == '\0') { break; } @@ -1611,8 +1921,7 @@ uint32_t wrapper_strtok(uint8_t *mem, uint32_t str_addr, uint32_t delimiters_add uint32_t ret = p; for (;;) { uint32_t q; - for (q = delimiters_addr; MEM_S8(q) != '\0' && MEM_S8(q) != MEM_S8(p); q++) { - } + for (q = delimiters_addr; MEM_S8(q) != '\0' && MEM_S8(q) != MEM_S8(p); q++) {} if (MEM_S8(q) != '\0') { MEM_S8(p) = '\0'; MEM_U32(STRTOK_DATA_ADDR) = ++p; @@ -1627,7 +1936,7 @@ uint32_t wrapper_strtok(uint8_t *mem, uint32_t str_addr, uint32_t delimiters_add } } -uint32_t wrapper_strstr(uint8_t *mem, uint32_t str1_addr, uint32_t str2_addr) { +uint32_t wrapper_strstr(uint8_t* mem, uint32_t str1_addr, uint32_t str2_addr) { for (;;) { if (MEM_S8(str1_addr) == '\0') { return 0; @@ -1650,7 +1959,7 @@ uint32_t wrapper_strstr(uint8_t *mem, uint32_t str1_addr, uint32_t str2_addr) { } } -uint32_t wrapper_strdup(uint8_t *mem, uint32_t str_addr) { +uint32_t wrapper_strdup(uint8_t* mem, uint32_t str_addr) { uint32_t len = wrapper_strlen(mem, str_addr) + 1; uint32_t ret = wrapper_malloc(mem, len); if (ret == 0) { @@ -1668,8 +1977,8 @@ int wrapper_tolower(int c) { return tolower(c); } -int wrapper_gethostname(uint8_t *mem, uint32_t name_addr, uint32_t len) { - char buf[256] = {0}; +int wrapper_gethostname(uint8_t* mem, uint32_t name_addr, uint32_t len) { + char buf[256] = { 0 }; if (len > 256) { len = 256; } @@ -1684,7 +1993,7 @@ int wrapper_gethostname(uint8_t *mem, uint32_t name_addr, uint32_t len) { return ret; } -int wrapper_isatty(uint8_t *mem, int fd) { +int wrapper_isatty(uint8_t* mem, int fd) { int ret = isatty(fd); if (ret == 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -1692,28 +2001,23 @@ int wrapper_isatty(uint8_t *mem, int fd) { return ret; } -uint32_t wrapper_strftime(uint8_t *mem, uint32_t ptr_addr, uint32_t maxsize, uint32_t format_addr, uint32_t timeptr_addr) { - //assert(0 && "strftime not implemented"); +uint32_t wrapper_strftime(uint8_t* mem, uint32_t ptr_addr, uint32_t maxsize, uint32_t format_addr, + uint32_t timeptr_addr) { MEM_S8(ptr_addr) = 0; return 0; } -int wrapper_times(uint8_t *mem, uint32_t buffer_addr) { - struct tms_irix { - int tms_utime; - int tms_stime; - int tms_cutime; - int tms_cstime; - } r; +int wrapper_times(uint8_t* mem, uint32_t buffer_addr) { struct tms t; clock_t ret = times(&t); + if (ret == (clock_t)-1) { MEM_U32(ERRNO_ADDR) = errno; } else { - r.tms_utime = t.tms_utime; - r.tms_stime = t.tms_stime; - r.tms_cutime = t.tms_cutime; - r.tms_cstime = t.tms_cstime; + MEM_U32(buffer_addr + 0x0) = t.tms_utime; + MEM_U32(buffer_addr + 0x4) = t.tms_stime; + MEM_U32(buffer_addr + 0x8) = t.tms_cutime; + MEM_U32(buffer_addr + 0xC) = t.tms_cstime; } return (int)ret; } @@ -1722,9 +2026,9 @@ int wrapper_clock(void) { return (int)clock(); } -uint32_t wrapper_ctime(uint8_t *mem, uint32_t timep_addr) { +uint32_t wrapper_ctime(uint8_t* mem, uint32_t timep_addr) { time_t t = MEM_S32(timep_addr); - char *res = ctime(&t); + char* res = ctime(&t); size_t len = strlen(res) + 1; uint32_t ret_addr = wrapper_malloc(mem, len); uint32_t pos = ret_addr; @@ -1734,11 +2038,9 @@ uint32_t wrapper_ctime(uint8_t *mem, uint32_t timep_addr) { ++res; } return ret_addr; - //assert(0 && "ctime not implemented"); - //return 0; } -uint32_t wrapper_localtime(uint8_t *mem, uint32_t timep_addr) { +uint32_t wrapper_localtime(uint8_t* mem, uint32_t timep_addr) { time_t t = MEM_S32(timep_addr); struct irix_tm { int tm_sec; @@ -1752,8 +2054,8 @@ uint32_t wrapper_localtime(uint8_t *mem, uint32_t timep_addr) { int tm_isdst; }; uint32_t ret = wrapper_malloc(mem, sizeof(struct irix_tm)); - struct irix_tm *r = (struct irix_tm *)&MEM_U32(ret); - struct tm *l = localtime(&t); + struct irix_tm* r = (struct irix_tm*)&MEM_U32(ret); + struct tm* l = localtime(&t); r->tm_sec = l->tm_sec; r->tm_min = l->tm_min; r->tm_hour = l->tm_hour; @@ -1766,14 +2068,21 @@ uint32_t wrapper_localtime(uint8_t *mem, uint32_t timep_addr) { return ret; } -int wrapper_setvbuf(uint8_t *mem, uint32_t fp_addr, uint32_t buf_addr, int mode, uint32_t size) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_setvbuf(uint8_t* mem, uint32_t fp_addr, uint32_t buf_addr, int mode, uint32_t size) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); wrapper_fflush(mem, fp_addr); if ((f->_flag & IOMYBUF) && f->_base_addr != 0) { wrapper_free(mem, f->_base_addr); } size &= ~0xf; f->_flag &= ~IOMYBUF; + + if (buf_addr == 0) { + assert(size > 0); + buf_addr = wrapper_malloc(mem, size); + f->_flag |= IOMYBUF; + } + f->_base_addr = buf_addr; f->_ptr_addr = buf_addr; f->_cnt = 0; @@ -1781,16 +2090,16 @@ int wrapper_setvbuf(uint8_t *mem, uint32_t fp_addr, uint32_t buf_addr, int mode, return 0; } -int wrapper___semgetc(uint8_t *mem, uint32_t fp_addr) { +int wrapper___semgetc(uint8_t* mem, uint32_t fp_addr) { assert(0); } -int wrapper___semputc(uint8_t *mem, int c, uint32_t fp_addr) { +int wrapper___semputc(uint8_t* mem, int c, uint32_t fp_addr) { assert(0); } -int wrapper_fgetc(uint8_t *mem, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_fgetc(uint8_t* mem, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (--f->_cnt < 0) { return wrapper___filbuf(mem, fp_addr); } else { @@ -1800,7 +2109,7 @@ int wrapper_fgetc(uint8_t *mem, uint32_t fp_addr) { } } -int wrapper_fgets(uint8_t *mem, uint32_t str_addr, int count, uint32_t fp_addr) { +int wrapper_fgets(uint8_t* mem, uint32_t str_addr, int count, uint32_t fp_addr) { bool modified = false; uint32_t saved = str_addr; for (count--; count > 0; count--) { @@ -1820,16 +2129,16 @@ int wrapper_fgets(uint8_t *mem, uint32_t str_addr, int count, uint32_t fp_addr) return saved; } -static void file_assign_buffer(uint8_t *mem, struct FILE_irix *f) { +static void file_assign_buffer(uint8_t* mem, struct FILE_irix* f) { f->_base_addr = wrapper_malloc(mem, STDIO_BUFSIZE); f->_ptr_addr = f->_base_addr; f->_flag |= IOMYBUF; f->_cnt = 0; - bufendtab[f - (struct FILE_irix *)&MEM_U32(IOB_ADDR)] = STDIO_BUFSIZE; + bufendtab[f - (struct FILE_irix*)&MEM_U32(IOB_ADDR)] = STDIO_BUFSIZE; } -int wrapper___filbuf(uint8_t *mem, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper___filbuf(uint8_t* mem, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (!(f->_flag & IOREAD)) { if (f->_flag & IORW) { f->_flag |= IOREAD; @@ -1858,14 +2167,14 @@ int wrapper___filbuf(uint8_t *mem, uint32_t fp_addr) { return ret; } -int wrapper___flsbuf(uint8_t *mem, int ch, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper___flsbuf(uint8_t* mem, int ch, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (wrapper_fflush(mem, fp_addr) != 0) { return -1; } if (f->_base_addr == 0) { file_assign_buffer(mem, f); - f->_cnt = bufendtab[f - (struct FILE_irix *)&MEM_U32(IOB_ADDR)]; + f->_cnt = bufendtab[f - (struct FILE_irix*)&MEM_U32(IOB_ADDR)]; } MEM_U8(f->_ptr_addr) = ch; ++f->_ptr_addr; @@ -1879,8 +2188,8 @@ int wrapper___flsbuf(uint8_t *mem, int ch, uint32_t fp_addr) { return ch; } -int wrapper_ungetc(uint8_t *mem, int ch, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +int wrapper_ungetc(uint8_t* mem, int ch, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (ch == -1 || f->_ptr_addr == f->_base_addr) { return -1; } @@ -1891,7 +2200,7 @@ int wrapper_ungetc(uint8_t *mem, int ch, uint32_t fp_addr) { return ch; } -uint32_t wrapper_gets(uint8_t *mem, uint32_t str_addr) { +uint32_t wrapper_gets(uint8_t* mem, uint32_t str_addr) { uint32_t p, str0 = str_addr; int n; @@ -1924,10 +2233,16 @@ uint32_t wrapper_gets(uint8_t *mem, uint32_t str_addr) { return str0; } -uint32_t wrapper_fread(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +uint32_t wrapper_fread(uint8_t* mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); int nleft = count * size; int n; + + // Special case for reading 0 bytes + if (nleft == 0) { + return 0; + } + for (;;) { if (f->_cnt <= 0) { if (wrapper___filbuf(mem, fp_addr) == -1) { @@ -1946,11 +2261,11 @@ uint32_t wrapper_fread(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t } } -uint32_t wrapper_fwrite(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr) { - struct FILE_irix *f = (struct FILE_irix *)&MEM_U32(fp_addr); +uint32_t wrapper_fwrite(uint8_t* mem, uint32_t data_addr, uint32_t size, uint32_t count, uint32_t fp_addr) { + struct FILE_irix* f = (struct FILE_irix*)&MEM_U32(fp_addr); if (size > 0 && count > 0 && f->_base_addr == 0) { file_assign_buffer(mem, f); - f->_cnt = bufendtab[f - (struct FILE_irix *)&MEM_U32(IOB_ADDR)]; + f->_cnt = bufendtab[f - (struct FILE_irix*)&MEM_U32(IOB_ADDR)]; f->_flag |= IOWRT; } uint32_t num_written = 0; @@ -1980,18 +2295,20 @@ uint32_t wrapper_fwrite(uint8_t *mem, uint32_t data_addr, uint32_t size, uint32_ return num_written; } -int wrapper_fputs(uint8_t *mem, uint32_t str_addr, uint32_t fp_addr) { +int wrapper_fputs(uint8_t* mem, uint32_t str_addr, uint32_t fp_addr) { + assert(str_addr != 0); + uint32_t len = wrapper_strlen(mem, str_addr); uint32_t ret = wrapper_fwrite(mem, str_addr, 1, len, fp_addr); return ret == 0 && len != 0 ? -1 : 0; } -int wrapper_puts(uint8_t *mem, uint32_t str_addr) { +int wrapper_puts(uint8_t* mem, uint32_t str_addr) { int ret = wrapper_fputs(mem, str_addr, STDOUT_ADDR); if (ret != 0) { return ret; } - struct FILE_irix *f = STDOUT; + struct FILE_irix* f = STDOUT; if (--f->_cnt < 0) { if (wrapper___flsbuf(mem, '\n', STDOUT_ADDR) != '\n') { return -1; @@ -2003,7 +2320,7 @@ int wrapper_puts(uint8_t *mem, uint32_t str_addr) { return 0; } -uint32_t wrapper_getcwd(uint8_t *mem, uint32_t buf_addr, uint32_t size) { +uint32_t wrapper_getcwd(uint8_t* mem, uint32_t buf_addr, uint32_t size) { char buf[size]; if (getcwd(buf, size) == NULL) { MEM_U32(ERRNO_ADDR) = errno; @@ -2012,12 +2329,12 @@ uint32_t wrapper_getcwd(uint8_t *mem, uint32_t buf_addr, uint32_t size) { if (buf_addr == 0) { buf_addr = wrapper_malloc(mem, size); } - strcpy1(mem, buf_addr, buf); + strcpy_str2mem(mem, buf_addr, buf); return buf_addr; } } -int wrapper_time(uint8_t *mem, uint32_t tloc_addr) { +int wrapper_time(uint8_t* mem, uint32_t tloc_addr) { time_t ret = time(NULL); if (ret == (time_t)-1) { MEM_U32(ERRNO_ADDR) = errno; @@ -2027,7 +2344,7 @@ int wrapper_time(uint8_t *mem, uint32_t tloc_addr) { return ret; } -void wrapper_bzero(uint8_t *mem, uint32_t str_addr, uint32_t n) { +void wrapper_bzero(uint8_t* mem, uint32_t str_addr, uint32_t n) { while (n--) { MEM_U8(str_addr) = 0; ++str_addr; @@ -2040,7 +2357,7 @@ int wrapper_fp_class_d(double d) { double d; } bits; bits.d = d; - uint32_t a2 = bits.w[1]; + uint32_t a2 = bits.w[1]; uint32_t a1 = a2 >> 20; uint32_t a0 = a1; a2 &= 0xfffff; @@ -2067,7 +2384,7 @@ double wrapper_ldexp(double d, int i) { return ldexp(d, i); } -int64_t wrapper___ll_mul(int64_t a0, int64_t a1) { +uint64_t wrapper___ll_mul(uint64_t a0, uint64_t a1) { return a0 * a1; } @@ -2079,12 +2396,12 @@ int64_t wrapper___ll_rem(uint64_t a0, int64_t a1) { return a0 % a1; } -int64_t wrapper___ll_lshift(int64_t a0, uint64_t shift) { - return a0 << (shift & 0x3f); +uint64_t wrapper___ll_lshift(uint64_t a0, uint64_t shift) { + return a0 << (shift & 0x3F); } int64_t wrapper___ll_rshift(int64_t a0, uint64_t shift) { - return a0 >> (shift & 0x3f); + return a0 >> (shift & 0x3F); } uint64_t wrapper___ull_div(uint64_t a0, uint64_t a1) { @@ -2131,42 +2448,43 @@ double wrapper___ll_to_d(int64_t v) { return v; } -void wrapper_abort(uint8_t *mem) { +void wrapper_abort(uint8_t* mem) { abort(); } -void wrapper_exit(uint8_t *mem, int status) { +void wrapper_exit(uint8_t* mem, int status) { + final_cleanup(mem); exit(status); } -void wrapper__exit(uint8_t *mem, int status) { +void wrapper__exit(uint8_t* mem, int status) { assert(0 && "_exit not implemented"); // exit() is already overridden } -void wrapper__cleanup(uint8_t *mem) { +void wrapper__cleanup(uint8_t* mem) { } -uint32_t wrapper__rld_new_interface(uint8_t *mem, uint32_t operation, uint32_t sp) { +uint32_t wrapper__rld_new_interface(uint8_t* mem, uint32_t operation, uint32_t sp) { assert(0 && "_rld_new_interface not implemented"); return 0; } -void wrapper__exithandle(uint8_t *mem) { +void wrapper__exithandle(uint8_t* mem) { assert(0 && "_exithandle not implemented"); } -int wrapper__prctl(uint8_t *mem, int operation, uint32_t sp) { +int wrapper__prctl(uint8_t* mem, int operation, uint32_t sp) { assert(0 && "_prctl not implemented"); return 0; } -double wrapper__atod(uint8_t *mem, uint32_t buffer_addr, int ndigits, int dexp) { +double wrapper__atod(uint8_t* mem, uint32_t buffer_addr, int ndigits, int dexp) { // ftp://atoum.hst.nerim.net/irix/src/irix-6.5.5-src/6.5.5/m/irix/lib/libc/src/math/atod.c assert(0 && "_atod not implemented"); return 0.0; } -int wrapper_pathconf(uint8_t *mem, uint32_t path_addr, int name) { +int wrapper_pathconf(uint8_t* mem, uint32_t path_addr, int name) { STRING(path) if (name == 5) { errno = 0; @@ -2180,81 +2498,109 @@ int wrapper_pathconf(uint8_t *mem, uint32_t path_addr, int name) { return 0; } -uint32_t wrapper_getenv(uint8_t *mem, uint32_t name_addr) { - // Return null for everything, for now - return 0; +uint32_t wrapper_getenv(uint8_t* mem, uint32_t name_addr) { + STRING(name); + const char* value = getenv(name); + +#ifdef __FreeBSD__ + // If cc asks for TMPDIR and it's not set, we redirect it to /var/tmp instead of /tmp + if (strncmp(name, "TMPDIR", 7) == 0 && value == NULL) { + setenv("TMPDIR", "/var/tmp", 0); + wrapper_getenv(mem, name_addr); + } +#endif + + if (value == NULL) { + return 0; + } + size_t value_size = strlen(value) + 1; + uint32_t buf_addr = wrapper_malloc(mem, value_size); + strcpy_str2mem(mem, buf_addr, value); + return buf_addr; } -uint32_t wrapper_gettxt(uint8_t *mem, uint32_t msgid_addr, uint32_t default_str_addr) { +uint32_t wrapper_gettxt(uint8_t* mem, uint32_t msgid_addr, uint32_t default_str_addr) { // Return default for now return default_str_addr; } -uint32_t wrapper_setlocale(uint8_t *mem, int category, uint32_t locale_addr) { +uint32_t wrapper_setlocale(uint8_t* mem, int category, uint32_t locale_addr) { assert(locale_addr != 0); STRING(locale) assert(category == 6); // LC_ALL - char *ret = setlocale(LC_ALL, locale); + UNUSED char* ret = setlocale(LC_ALL, locale); // Let's hope the caller doesn't use the return value return 0; } -uint32_t wrapper_mmap(uint8_t *mem, uint32_t addr, uint32_t length, int prot, int flags, int fd, int offset) { +uint32_t wrapper_mmap(uint8_t* mem, uint32_t addr, uint32_t length, int prot, int flags, int fd, int offset) { + if (addr == 0 && prot == (prot & 3) && flags == 2) { + // Read/write, map private. Just make a copy. + uint8_t* ptr = mmap(0, length, PROT_READ, MAP_PRIVATE, fd, offset); + if (ptr == MAP_FAILED) { + MEM_U32(ERRNO_ADDR) = errno; + return -1; + } + uint32_t out = wrapper_malloc(mem, length); + for (uint32_t i = 0; i < length; i++) { + MEM_S8(out + i) = ptr[i]; + } + munmap(ptr, length); + return out; + } assert(0 && "mmap not implemented"); return 0; } -int wrapper_munmap(uint8_t *mem, uint32_t addr, uint32_t length) { - assert(0 && "munmap not implemented"); +int wrapper_munmap(uint8_t* mem, uint32_t addr, uint32_t length) { return 0; } -int wrapper_mprotect(uint8_t *mem, uint32_t addr, uint32_t length, int prot) { +int wrapper_mprotect(uint8_t* mem, uint32_t addr, uint32_t length, int prot) { assert(0 && "mprotect not implemented"); return 0; } -int wrapper_sysconf(uint8_t *mem, int name) { +int wrapper_sysconf(uint8_t* mem, int name) { assert(0 && "sysconf not implemented"); return 0; } -int wrapper_getpagesize(uint8_t *mem) { +int wrapper_getpagesize(uint8_t* mem) { return 4096; } -int wrapper_strerror(uint8_t *mem, int errnum) { +int wrapper_strerror(uint8_t* mem, int errnum) { errno = errnum; perror("strerror"); assert(0 && "strerror not implemented"); return 0; } -int wrapper_ioctl(uint8_t *mem, int fd, uint32_t request, uint32_t sp) { +int wrapper_ioctl(uint8_t* mem, int fd, uint32_t request, uint32_t sp) { assert(0 && "ioctl not implemented"); return 0; } -int wrapper_fcntl(uint8_t *mem, int fd, int cmd, uint32_t sp) { +int wrapper_fcntl(uint8_t* mem, int fd, int cmd, uint32_t sp) { assert(0 && "fcntl not implemented"); return 0; } static void signal_handler(int signum) { uint32_t level = signal_context.recursion_level++; - uint8_t *mem = signal_context.handlers[signum].mem; + uint8_t* mem = signal_context.handlers[signum].mem; uint32_t fp_dest = signal_context.handlers[signum].fp_dest; uint32_t sp = SIGNAL_HANDLER_STACK_START - 16 - level * 0x1000; signal_context.handlers[signum].trampoline(mem, sp, signum, 0, 0, 0, fp_dest); signal_context.recursion_level--; } -uint32_t wrapper_signal(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t handler_addr, uint32_t sp) { - //assert(0 && "signal not implemented"); +uint32_t wrapper_signal(uint8_t* mem, int signum, fptr_trampoline trampoline, uint32_t handler_addr, uint32_t sp) { return 0; } -uint32_t wrapper_sigset(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t disp_addr, uint32_t sp) { +uint32_t wrapper_sigset(uint8_t* mem, int signum, fptr_trampoline trampoline, uint32_t disp_addr, uint32_t sp) { void (*handler)(int) = signal_handler; if ((int)disp_addr >= -1 && (int)disp_addr <= 1) { @@ -2284,29 +2630,27 @@ uint32_t wrapper_sigset(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t return (uint32_t)(uintptr_t)sigset(signum, handler); // for now only support SIG_DFL etc. as return value } -int wrapper_get_fpc_csr(uint8_t *mem) { - //assert(0 && "get_fpc_csr not implemented"); +int wrapper_get_fpc_csr(uint8_t* mem) { return 0; } -int wrapper_set_fpc_csr(uint8_t *mem, int csr) { - //assert(0 && "set_fpc_csr not implemented"); +int wrapper_set_fpc_csr(uint8_t* mem, int csr) { return 0; } -int wrapper_setjmp(uint8_t *mem, uint32_t addr) { +int wrapper_setjmp(uint8_t* mem, uint32_t addr) { return 0; } -void wrapper_longjmp(uint8_t *mem, uint32_t addr, int status) { +void wrapper_longjmp(uint8_t* mem, uint32_t addr, int status) { assert(0 && "longjmp not implemented"); } -uint32_t wrapper_tempnam(uint8_t *mem, uint32_t dir_addr, uint32_t pfx_addr) { +uint32_t wrapper_tempnam(uint8_t* mem, uint32_t dir_addr, uint32_t pfx_addr) { STRING(dir) STRING(pfx) - char *ret = tempnam(dir, pfx); - char *ret_saved = ret; + char* ret = tempnam(dir, pfx); + char* ret_saved = ret; if (ret == NULL) { MEM_U32(ERRNO_ADDR) = errno; return 0; @@ -2323,39 +2667,52 @@ uint32_t wrapper_tempnam(uint8_t *mem, uint32_t dir_addr, uint32_t pfx_addr) { return ret_addr; } -uint32_t wrapper_tmpnam(uint8_t *mem, uint32_t str_addr) { +uint32_t wrapper_tmpnam(uint8_t* mem, uint32_t str_addr) { char buf[1024]; assert(str_addr != 0 && "s NULL not implemented for tmpnam"); - char *ret = tmpnam(buf); + char* ret = tmpnam(buf); if (ret == NULL) { return 0; } else { - strcpy1(mem, str_addr, ret); + strcpy_str2mem(mem, str_addr, ret); return str_addr; } } -uint32_t wrapper_mktemp(uint8_t *mem, uint32_t template_addr) { +uint32_t wrapper_mktemp(uint8_t* mem, uint32_t template_addr) { STRING(template) mktemp(template); - strcpy1(mem, template_addr, template); + strcpy_str2mem(mem, template_addr, template); return template_addr; } -int wrapper_mkstemp(uint8_t *mem, uint32_t name_addr) { +int wrapper_mkstemp(uint8_t* mem, uint32_t name_addr) { STRING(name) int fd = mkstemp(name); if (fd < 0) { MEM_U32(ERRNO_ADDR) = errno; } else { - strcpy1(mem, name_addr, name); + strcpy_str2mem(mem, name_addr, name); } return fd; } -uint32_t wrapper_tmpfile(uint8_t *mem) { +uint32_t wrapper_tmpfile(uint8_t* mem) { // create and fopen a temporary file that is removed when the program exits - char name[] = "/tmp/copt_temp_XXXXXX"; + const char* tmpdir = getenv("TMPDIR"); + if (tmpdir == NULL) { + tmpdir = "/tmp"; + } + + char name[PATH_MAX + 1] = { 0 }; + int n = snprintf(name, sizeof(name), "%s/copt_temp_XXXXXX", tmpdir); + + if (n < 0 || (size_t)n >= sizeof(name)) { + // This isn't the best errno code, but it is one that can be returned by tmpfile + MEM_U32(ERRNO_ADDR) = EACCES; + return 0; + } + int fd = mkstemp(name); if (fd < 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -2373,14 +2730,14 @@ uint32_t wrapper_tmpfile(uint8_t *mem) { return ret; } -int wrapper_wait(uint8_t *mem, uint32_t wstatus_addr) { +int wrapper_wait(uint8_t* mem, uint32_t wstatus_addr) { int wstatus; pid_t ret = wait(&wstatus); MEM_S32(wstatus_addr) = wstatus; return ret; } -int wrapper_kill(uint8_t *mem, int pid, int sig) { +int wrapper_kill(uint8_t* mem, int pid, int sig) { int ret = kill(pid, sig); if (ret != 0) { MEM_U32(ERRNO_ADDR) = errno; @@ -2388,84 +2745,51 @@ int wrapper_kill(uint8_t *mem, int pid, int sig) { return ret; } -int wrapper_execlp(uint8_t *mem, uint32_t file_addr, uint32_t sp) { +int wrapper_execlp(uint8_t* mem, uint32_t file_addr, uint32_t sp) { uint32_t argv_addr = sp + 4; return wrapper_execvp(mem, file_addr, argv_addr); } -int wrapper_execv(uint8_t *mem, uint32_t pathname_addr, uint32_t argv_addr) { +int wrapper_execv(uint8_t* mem, uint32_t pathname_addr, uint32_t argv_addr) { STRING(pathname) uint32_t argc = 0; while (MEM_U32(argv_addr + argc * 4) != 0) { ++argc; } - char *argv[argc + 1]; - for (uint32_t i = 0; i < argc; i++) { - uint32_t str_addr = MEM_U32(argv_addr + i * 4); - uint32_t len = wrapper_strlen(mem, str_addr) + 1; - argv[i] = (char *)malloc(len); - char *pos = argv[i]; - while (len--) { - *pos++ = MEM_S8(str_addr); - ++str_addr; - } - } - argv[argc] = NULL; + char** argv = make_argv_from_mem(mem, argc, argv_addr); + execv(pathname, argv); MEM_U32(ERRNO_ADDR) = errno; - for (uint32_t i = 0; i < argc; i++) { - free(argv[i]); - } + + free_argv(argc, argv); return -1; } -int wrapper_execvp(uint8_t *mem, uint32_t file_addr, uint32_t argv_addr) { +int wrapper_execvp(uint8_t* mem, uint32_t file_addr, uint32_t argv_addr) { STRING(file) uint32_t argc = 0; while (MEM_U32(argv_addr + argc * 4) != 0) { ++argc; } - char *argv[argc + 1]; - for (uint32_t i = 0; i < argc; i++) { - uint32_t str_addr = MEM_U32(argv_addr + i * 4); - uint32_t len = wrapper_strlen(mem, str_addr) + 1; - argv[i] = (char *)malloc(len); - char *pos = argv[i]; - while (len--) { - *pos++ = MEM_S8(str_addr); - ++str_addr; - } - } - argv[argc] = NULL; + char** argv = make_argv_from_mem(mem, argc, argv_addr); -#ifdef REDIRECT_USR_LIB - if (!strncmp(file, "/usr/lib/", 9) && bin_dir[0] != '\0') { - char fixed_path[PATH_MAX + 1]; -#ifdef __CYGWIN__ - int n = snprintf(fixed_path, sizeof(fixed_path), "%s/%s.exe", bin_dir, file + 9); -#else - int n = snprintf(fixed_path, sizeof(fixed_path), "%s/%s", bin_dir, file + 9); -#endif - if (n > 0 && n < sizeof(fixed_path)) { - execvp(fixed_path, argv); - } else { - execvp(file, argv); - } - } else { - execvp(file, argv); + char rfile[PATH_MAX + 1]; + char* filePtr = file; + + if (redirect_path(rfile, file, "/usr/lib/DCC", usr_lib_redirect) || + redirect_path(rfile, file, "/usr/lib", usr_lib_redirect)) { + filePtr = rfile; } -#else - execvp(file, argv); -#endif + + execvp(filePtr, argv); MEM_U32(ERRNO_ADDR) = errno; - for (uint32_t i = 0; i < argc; i++) { - free(argv[i]); - } + + free_argv(argc, argv); return -1; } -int wrapper_fork(uint8_t *mem) { +int wrapper_fork(uint8_t* mem) { int ret = fork(); if (ret == -1) { MEM_U32(ERRNO_ADDR) = errno; @@ -2473,19 +2797,16 @@ int wrapper_fork(uint8_t *mem) { return ret; } -int wrapper_system(uint8_t *mem, uint32_t command_addr) { +int wrapper_system(uint8_t* mem, uint32_t command_addr) { STRING(command) return system(command); // no errno } -static int name_compare(uint8_t *mem, uint32_t a_addr, uint32_t b_addr) { - //printf("pc=0x00438180\n"); +static int name_compare(uint8_t* mem, uint32_t a_addr, uint32_t b_addr) { return wrapper_strcmp(mem, MEM_U32(a_addr), MEM_U32(b_addr)); } -static uint32_t tsearch_tfind(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr, bool insert) { - //assert(compar_addr == 0x438180); // name_compare in as1 - +static uint32_t tsearch_tfind(uint8_t* mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr, bool insert) { if (rootp_addr == 0) { return 0; } @@ -2510,34 +2831,461 @@ static uint32_t tsearch_tfind(uint8_t *mem, uint32_t key_addr, uint32_t rootp_ad return 0; } -uint32_t wrapper_tsearch(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr) { +uint32_t wrapper_tsearch(uint8_t* mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr) { return tsearch_tfind(mem, key_addr, rootp_addr, compar_addr, true); } -uint32_t wrapper_tfind(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr) { +uint32_t wrapper_tfind(uint8_t* mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr) { return tsearch_tfind(mem, key_addr, rootp_addr, compar_addr, false); } -uint32_t wrapper_qsort(uint8_t *mem, uint32_t base_addr, uint32_t num, uint32_t size, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t compare_addr, uint32_t sp) { - assert(0 && "qsort not implemented"); +// qsort implementation from SGI libc, originally derived from +// https://people.ece.ubc.ca/~eddieh/glu_dox/d7/da4/qsort_8c_source.html (public domain) + +#define CMP(x, y) (int32_t)(trampoline(mem, sp, (x), (y), 0, 0, compare_addr) >> 32) + +static void qst(uint8_t* mem, uint32_t start, uint32_t end, fptr_trampoline trampoline, uint32_t compare_addr, + uint32_t sp, uint32_t size, uint32_t minSortSize, uint32_t medianOfThreeThreshold); + +uint32_t wrapper_qsort(uint8_t* mem, uint32_t base_addr, uint32_t count, uint32_t size, fptr_trampoline trampoline, + uint32_t compare_addr, uint32_t sp) { + uint32_t end; + uint32_t it; + uint32_t prevIt; + uint32_t byteIt; + uint32_t hi; + uint32_t insPos; + uint32_t cur; + uint32_t smallest; + uint8_t temp; + + if (count < 2) { + return 0; + } + + end = base_addr + (count * size); + + if (count >= 4) { + // run a rough quicksort + qst(mem, base_addr, end, trampoline, compare_addr, sp, size, size * 4, size * 6); + // the smallest element will be one of the first 4 + hi = base_addr + size * 4; + } else { + hi = end; + } + + // Find the smallest element and swap it to the front + smallest = base_addr; + for (it = base_addr + size; it < hi; it += size) { + if (CMP(smallest, it) > 0) { + smallest = it; + } + } + + if (smallest != base_addr) { + for (it = base_addr; it < base_addr + size; smallest++, it++) { + temp = MEM_U8(smallest); + MEM_U8(smallest) = MEM_U8(it); + MEM_U8(it) = temp; + } + } + + // Do insertion sort on the rest of the elements + for (cur = base_addr + size; cur < end; cur += size) { + + // Find where cur should go + insPos = cur - size; + while (CMP(insPos, cur) > 0) { + if (base_addr == insPos) { + // This isn't logically possible, because we've put the smallest element first. + // But it can happen if the comparator function is faulty, and it's best not to + // write out of bounds in that situation. + break; + } + insPos -= size; + } + insPos += size; + + if (insPos == cur) { + continue; + } + + for (byteIt = cur + size; --byteIt >= cur;) { + temp = MEM_U8(byteIt); + prevIt = byteIt; + for (it = byteIt - size; it >= insPos; it -= size) { + MEM_U8(prevIt) = MEM_U8(it); + prevIt = it; + } + MEM_U8(prevIt) = temp; + } + } + return 0; } -uint32_t wrapper_regcmp(uint8_t *mem, uint32_t string1_addr, uint32_t sp) { +static void qst(uint8_t* mem, uint32_t start, uint32_t end, fptr_trampoline trampoline, uint32_t compare_addr, + uint32_t sp, uint32_t size, uint32_t minSortSize, uint32_t medianOfThreeThreshold) { + uint32_t sizeAfterPivot; + uint32_t sizeBeforePivot; + uint32_t totalSize; + int32_t i; + uint32_t afterPivot; + uint32_t last; + uint32_t newPartitionFirst; + uint32_t median; + uint32_t partitionFirst; + uint32_t partitionLast; + uint32_t pivot; + uint32_t swapWith; + uint8_t temp; + + totalSize = end - start; + do { + last = end - size; + pivot = partitionFirst = (((totalSize / size) >> 1) * size) + start; + if (totalSize >= medianOfThreeThreshold) { + // compute median of three + median = CMP(start, pivot) > 0 ? start : pivot; + if (CMP(median, last) > 0) { + median = median == start ? pivot : start; + median = CMP(median, last) < 0 ? last : median; + } + + // swap the median so it ends up in the middle + if (median != pivot) { + // Fake-match: use partitionFirst here instead of e.g. swapWith. + i = size; + do { + temp = MEM_U8(partitionFirst); + MEM_U8(partitionFirst) = MEM_U8(median); + MEM_U8(median) = temp; + partitionFirst++; + median++; + i--; + } while (i != 0); + } + } + + // Partition the elements start, ..., pivot, ..., last, such that values smaller than the + // pivot are on the left, and values greater than the pivot are on the right (equal ones can + // go wherever). The pivot may end up getting swapped into another position in the process. + + partitionFirst = start; + partitionLast = last; + + // Loop invariant: Elements partitionFirst, ..., partitionLast remain to be partitioned, + // and pivot is in that range. + for (;;) { + while (partitionFirst < pivot && CMP(partitionFirst, pivot) < 0) { + // Skip over smaller values on the left. + partitionFirst += size; + } + + while (pivot < partitionLast) { + if (CMP(pivot, partitionLast) < 0) { + // Skip over greater values on the right. + partitionLast -= size; + } else { + // We have found a value we cannot skip over. Put it at the front. + // If the pivot was at the front, it gets swapped to the last position, + // otherwise, the value at the front is something we know isn't smaller + // than the pivot, so we can skip partitioning it. + newPartitionFirst = partitionFirst + size; + if (partitionFirst == pivot) { + swapWith = partitionLast; + pivot = partitionLast; + } else { + swapWith = partitionLast; + partitionLast -= size; + } + goto swapFront; + } + } + + // We have hit up against the pivot at the end. Swap it to the front to we can + // skip over it. The front element is known to not be smaller than the pivot, + // except if the pivot is at the front also, i.e. if the range has been reduced + // down to size 1 -- in that case it's time to break out of the loop. + partitionLast -= size; + if (partitionFirst == pivot) { + break; + } + swapWith = pivot; + pivot = partitionFirst; + newPartitionFirst = partitionFirst; + + swapFront: + i = size; + do { + temp = MEM_U8(partitionFirst); + MEM_U8(partitionFirst) = MEM_U8(swapWith); + MEM_U8(swapWith) = temp; + partitionFirst++; + swapWith++; + i--; + } while (i != 0); + partitionFirst = newPartitionFirst; + } + + afterPivot = pivot + size; + sizeBeforePivot = pivot - start; + sizeAfterPivot = end - afterPivot; + totalSize = sizeBeforePivot; + if (sizeAfterPivot >= sizeBeforePivot) { + if (sizeBeforePivot >= minSortSize) { + qst(mem, start, pivot, trampoline, compare_addr, sp, size, minSortSize, medianOfThreeThreshold); + } + start = afterPivot; + totalSize = sizeAfterPivot; + } else { + if (sizeAfterPivot >= minSortSize) { + qst(mem, afterPivot, end, trampoline, compare_addr, sp, size, minSortSize, medianOfThreeThreshold); + } + end = pivot; + } + } while (totalSize >= minSortSize); +} + +#undef CMP + +uint32_t wrapper_regcmp(uint8_t* mem, uint32_t string1_addr, uint32_t sp) { STRING(string1); fprintf(stderr, "regex string: %s\n", string1); assert(0 && "regcmp not implemented"); return 0; } -uint32_t wrapper_regex(uint8_t *mem, uint32_t re_addr, uint32_t subject_addr, uint32_t sp) { +uint32_t wrapper_regex(uint8_t* mem, uint32_t re_addr, uint32_t subject_addr, uint32_t sp) { STRING(subject); + (void)subject; assert(0 && "regex not implemented"); return 0; } -void wrapper___assert(uint8_t *mem, uint32_t assertion_addr, uint32_t file_addr, int line) { +void wrapper___assert(uint8_t* mem, uint32_t assertion_addr, uint32_t file_addr, int line) { STRING(assertion) STRING(file) + + #ifdef __FreeBSD__ + __assert(assertion, file, line, NULL); + #else __assert(assertion, file, line); + #endif +} + +// https://linux.die.net/man/3/twalk +void wrapper_twalk(uint8_t* mem, uint32_t root_addr, fptr_trampoline trampoline, uint32_t action_addr, uint32_t sp) { + assert(0 && "twalk not implemented"); +} + +// https://linux.die.net/man/3/msync +int32_t wrapper_msync(uint8_t* mem, uint32_t addr_addr, uint32_t len, int32_t flags) { + assert(0 && "msync not implemented"); +} + +// https://linux.die.net/man/3/mkdir +int32_t wrapper_mkdir(uint8_t* mem, uint32_t path_addr, uint32_t mode) { + assert(0 && "mkdir not implemented"); +} + +// https://en.cppreference.com/w/c/io/fputc +int32_t wrapper_fputc(uint8_t* mem, int32_t ch, uint32_t stream_addr) { + int32_t ret; + + if (stream_addr == STDOUT_ADDR) { + ret = fputc(ch, stdout); + } else if (stream_addr == STDERR_ADDR) { + ret = fputc(ch, stderr); + } else { + fprintf(stderr, "%s: ch %i\n", __func__, ch); + fprintf(stderr, "%s: stream_addr %X\n", __func__, stream_addr); + assert(0 && "fputc with custom stream is not implemented"); + } + + return ret; +} + +// https://linux.die.net/man/3/getopt +int32_t wrapper_getopt(uint8_t* mem, int32_t argc, uint32_t argv_addr, uint32_t optstring_addr) { + bool optargFound = false; + STRING(optstring); + int32_t ret; + uint32_t argv_mem_new[argc]; + + assert(argc == global_args.argc); + + if ((optarg != NULL) && (MEM_U32(OPTARG_ADDR) != 0)) { + // optarg points to an old argv value which is no longer valid, we need to update it before calling getopt + bool optarg_from_memory_found = false; + uint32_t optarg_mem_addr = MEM_U32(OPTARG_ADDR); + STRING(optarg_mem); + + for (int32_t i = 0; i < global_args.argc && !optarg_from_memory_found; i++) { + size_t arg_len = strlen(global_args.argv[i]); + + for (size_t j = 0; j < arg_len; j++) { + if (strcmp(&global_args.argv[i][j], optarg_mem) == 0) { + + optarg = &global_args.argv[i][j]; + optarg_from_memory_found = true; + break; + } + } + } + + assert(optarg_from_memory_found); + } + + ret = getopt(global_args.argc, global_args.argv, optstring); + + MEM_S32(OPTERR_ADDR) = opterr; + MEM_S32(OPTIND_ADDR) = optind; + MEM_S32(OPTOPT_ADDR) = optopt; + + if (optarg == NULL) { + optargFound = true; + MEM_U32(OPTARG_ADDR) = 0; + } + + for (int32_t i = 0; i < global_args.argc; i++) { + size_t arg_len = strlen(global_args.argv[i]); + + // We need to find optarg + for (size_t j = 0; j < arg_len && !optargFound; j++) { + if (strcmp(&global_args.argv[i][j], optarg) == 0) { + uint32_t str_addr = MEM_U32(argv_addr + i * sizeof(uint32_t)) + j; + + MEM_U32(OPTARG_ADDR) = str_addr; + optargFound = true; + } + } + + // find the permuted argvs and put them in a temp array + for (int32_t j = 0; j < global_args.argc; j++) { + uint32_t str_addr = MEM_U32(argv_addr + j * sizeof(uint32_t)); + STRING(str); + + if ((strcmp(global_args.argv[i], str) == 0)) { + argv_mem_new[i] = str_addr; + break; + } + } + } + + // copy the temp array into the real argv + for (int32_t j = 0; j < global_args.argc; j++) { + MEM_U32(argv_addr + j * sizeof(uint32_t)) = argv_mem_new[j]; + } + + return ret; +} + +// https://linux.die.net/man/2/link +int32_t wrapper_link(uint8_t* mem, uint32_t oldpath_addr, uint32_t newpath_addr) { + assert(0 && "link not implemented"); +} + +// https://en.cppreference.com/w/c/io/vfprintf +int32_t wrapper_vsprintf(uint8_t* mem, uint32_t buffer_addr, uint32_t format_addr, uint32_t vlist_addr) { + assert(0 && "vsprintf not implemented"); +} + +// https://linux.die.net/man/3/fabs +double wrapper_fabs(double x) { + return fabs(x); +} + +// Non standard function +int32_t wrapper_sysid(uint8_t* mem, uint32_t unknown_parameter_addr) { + assert(0 && "sysid not implemented"); +} + +// https://linux.die.net/man/3/realpath +uint32_t wrapper_realpath(uint8_t* mem, uint32_t path_addr, uint32_t resolved_path_addr) { + assert(0 && "realpath not implemented"); +} + +// https://linux.die.net/man/2/fsync +int32_t wrapper_fsync(uint8_t* mem, int32_t fd) { + assert(0 && "fsync not implemented"); +} + +// https://linux.die.net/man/3/sleep +uint32_t wrapper_sleep(uint8_t* mem, uint32_t seconds) { + assert(0 && "sleep not implemented"); +} + +// https://linux.die.net/man/2/socket +int32_t wrapper_socket(uint8_t* mem, int32_t domain, int32_t type, int32_t protocol) { + assert(0 && "socket not implemented"); +} + +// https://linux.die.net/man/2/connect +int32_t wrapper_connect(uint8_t* mem, int32_t sockfd, uint32_t addr_addr, uint32_t addrlen) { + assert(0 && "connect not implemented"); +} + +// https://linux.die.net/man/2/recv +int32_t wrapper_recv(uint8_t* mem, int32_t sockfd, uint32_t buf_addr, uint32_t len, int32_t flags) { + assert(0 && "recv not implemented"); +} + +// https://linux.die.net/man/2/send +int32_t wrapper_send(uint8_t* mem, int32_t sockfd, uint32_t buf_addr, uint32_t len, int32_t flags) { + assert(0 && "send not implemented"); +} + +// https://linux.die.net/man/3/shutdown +int32_t wrapper_shutdown(uint8_t* mem, int32_t socket, int32_t how) { + assert(0 && "shutdown not implemented"); +} + +// https://linux.die.net/man/3/sscanf +int32_t wrapper_sscanf(uint8_t* mem, uint32_t str_addr, uint32_t format_addr, uint32_t sp) { + assert(0 && "sscanf not implemented"); +} + +// C++ functions +uint32_t wrapper___nw__FUi(uint8_t* mem, uint32_t size) { + return wrapper_malloc(mem, size); +} + +void wrapper___dl__FPv(uint8_t* mem, uint32_t data_addr) { + wrapper_free(mem, data_addr); +} + +union host_doubleword { + uint64_t ww; + double d; +}; + +union FloatReg FloatReg_from_double(double d) { + union host_doubleword val; + union FloatReg floatreg; + + val.d = d; + + floatreg.w[0] = val.ww & 0xFFFFFFFF; + floatreg.w[1] = (val.ww >> 32) & 0xFFFFFFFF; + + return floatreg; +} + +double double_from_FloatReg(union FloatReg floatreg) { + union host_doubleword val; + + val.ww = floatreg.w[1]; + val.ww <<= 32; + val.ww |= floatreg.w[0]; + return val.d; +} + +double double_from_memory(uint8_t* mem, uint32_t address) { + union host_doubleword val; + + val.ww = MEM_U32(address); + val.ww <<= 32; + val.ww |= MEM_U32(address + 4); + return val.d; } diff --git a/tools/ido5.3_recomp/libc_impl.h b/tools/ido5.3_recomp/libc_impl.h index 0f1d920f..34fa0e21 100644 --- a/tools/ido5.3_recomp/libc_impl.h +++ b/tools/ido5.3_recomp/libc_impl.h @@ -1,5 +1,18 @@ +#ifndef LIBC_IMPL_H +#define LIBC_IMPL_H + #include +union FloatReg { + float f[2]; + uint32_t w[2]; + //double d; +}; + +typedef uint64_t (*fptr_trampoline)(uint8_t* mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, + uint32_t fp_dest); + + void mmap_initial_data_range(uint8_t *mem, uint32_t start, uint32_t end); void setup_libc_data(uint8_t *mem); @@ -31,6 +44,8 @@ int wrapper_atol(uint8_t *mem, uint32_t nptr_addr); double wrapper_atof(uint8_t *mem, uint32_t nptr_addr); int wrapper_strtol(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base); uint32_t wrapper_strtoul(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base); +int64_t wrapper_strtoll(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base); +uint64_t wrapper_strtoull(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr, int base); double wrapper_strtod(uint8_t *mem, uint32_t nptr_addr, uint32_t endptr_addr); uint32_t wrapper_strchr(uint8_t *mem, uint32_t str_addr, int c); uint32_t wrapper_strrchr(uint8_t *mem, uint32_t str_addr, int c); @@ -39,6 +54,7 @@ uint32_t wrapper_strpbrk(uint8_t *mem, uint32_t str_addr, uint32_t accept_addr); int wrapper_fstat(uint8_t *mem, int fildes, uint32_t buf_addr); int wrapper_stat(uint8_t *mem, uint32_t pathname_addr, uint32_t buf_addr); int wrapper_ftruncate(uint8_t *mem, int fd, int length); +int wrapper_truncate(uint8_t *mem, uint32_t pathname_addr, int length); void wrapper_bcopy(uint8_t *mem, uint32_t src_addr, uint32_t dst_addr, uint32_t len); uint32_t wrapper_memcpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, uint32_t len); uint32_t wrapper_memccpy(uint8_t *mem, uint32_t dst_addr, uint32_t src_addr, int c, uint32_t len); @@ -48,6 +64,7 @@ uint32_t wrapper_fopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr); uint32_t wrapper_freopen(uint8_t *mem, uint32_t path_addr, uint32_t mode_addr, uint32_t fp_addr); int wrapper_fclose(uint8_t *mem, uint32_t fp_addr); int wrapper_fflush(uint8_t *mem, uint32_t fp_addr); +int wrapper_fchown(uint8_t *mem, int fd, int owner, int group); int wrapper_ftell(uint8_t *mem, uint32_t fp_addr); void wrapper_rewind(uint8_t *mem, uint32_t fp_addr); int wrapper_fseek(uint8_t *mem, uint32_t fp_addr, int offset, int origin); @@ -101,10 +118,10 @@ int wrapper_time(uint8_t *mem, uint32_t tloc_addr); void wrapper_bzero(uint8_t *mem, uint32_t str_addr, uint32_t n); int wrapper_fp_class_d(double d); double wrapper_ldexp(double d, int i); -int64_t wrapper___ll_mul(int64_t a0, int64_t a1); +uint64_t wrapper___ll_mul(uint64_t a0, uint64_t a1); int64_t wrapper___ll_div(int64_t a0, int64_t a1); int64_t wrapper___ll_rem(uint64_t a0, int64_t a1); -int64_t wrapper___ll_lshift(int64_t a0, uint64_t shift); +uint64_t wrapper___ll_lshift(uint64_t a0, uint64_t shift); int64_t wrapper___ll_rshift(int64_t a0, uint64_t shift); uint64_t wrapper___ull_div(uint64_t a0, uint64_t a1); uint64_t wrapper___ull_rem(uint64_t a0, uint64_t a1); @@ -137,8 +154,8 @@ int wrapper_getpagesize(uint8_t *mem); int wrapper_strerror(uint8_t *mem, int errnum); int wrapper_ioctl(uint8_t *mem, int fd, uint32_t request, uint32_t sp); int wrapper_fcntl(uint8_t *mem, int fd, int cmd, uint32_t sp); -uint32_t wrapper_signal(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t handler_addr, uint32_t sp); -uint32_t wrapper_sigset(uint8_t *mem, int signum, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t disp_addr, uint32_t sp); +uint32_t wrapper_signal(uint8_t *mem, int signum, fptr_trampoline trampoline, uint32_t handler_addr, uint32_t sp); +uint32_t wrapper_sigset(uint8_t *mem, int signum, fptr_trampoline trampoline, uint32_t disp_addr, uint32_t sp); int wrapper_get_fpc_csr(uint8_t *mem); int wrapper_set_fpc_csr(uint8_t *mem, int csr); int wrapper_setjmp(uint8_t *mem, uint32_t addr); @@ -157,7 +174,35 @@ int wrapper_fork(uint8_t *mem); int wrapper_system(uint8_t *mem, uint32_t command_addr); uint32_t wrapper_tsearch(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr); uint32_t wrapper_tfind(uint8_t *mem, uint32_t key_addr, uint32_t rootp_addr, uint32_t compar_addr); -uint32_t wrapper_qsort(uint8_t *mem, uint32_t base_addr, uint32_t num, uint32_t size, uint64_t (*trampoline)(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest), uint32_t compare_addr, uint32_t sp); +uint32_t wrapper_qsort(uint8_t *mem, uint32_t base_addr, uint32_t num, uint32_t size, fptr_trampoline trampoline, uint32_t compare_addr, uint32_t sp); uint32_t wrapper_regcmp(uint8_t *mem, uint32_t string1_addr, uint32_t sp); uint32_t wrapper_regex(uint8_t *mem, uint32_t re_addr, uint32_t subject_addr, uint32_t sp); void wrapper___assert(uint8_t *mem, uint32_t assertion_addr, uint32_t file_addr, int line); +void wrapper_twalk(uint8_t *mem, uint32_t root_addr, fptr_trampoline trampoline, uint32_t action_addr, uint32_t sp); +int32_t wrapper_msync(uint8_t *mem, uint32_t addr_addr, uint32_t len, int32_t flags); +int32_t wrapper_mkdir(uint8_t *mem, uint32_t path_addr, uint32_t mode); +int32_t wrapper_fputc(uint8_t *mem, int32_t ch, uint32_t stream_addr); +int32_t wrapper_getopt(uint8_t *mem, int32_t argc, uint32_t argv_addr, uint32_t optstring_addr); +int32_t wrapper_link(uint8_t *mem, uint32_t oldpath_addr, uint32_t newpath_addr); +int32_t wrapper_vsprintf(uint8_t *mem, uint32_t buffer_addr, uint32_t format_addr, uint32_t vlist_addr); +double wrapper_fabs(double x); +int32_t wrapper_sysid(uint8_t *mem, uint32_t unknown_parameter_addr); +uint32_t wrapper_realpath(uint8_t *mem, uint32_t path_addr, uint32_t resolved_path_addr); +int32_t wrapper_fsync(uint8_t *mem, int32_t fd); +uint32_t wrapper_sleep(uint8_t *mem, uint32_t seconds); +int32_t wrapper_socket(uint8_t *mem, int32_t domain, int32_t type, int32_t protocol); +int32_t wrapper_connect(uint8_t *mem, int32_t sockfd, uint32_t addr_addr, uint32_t addrlen); +int32_t wrapper_recv(uint8_t *mem, int32_t sockfd, uint32_t buf_addr, uint32_t len, int32_t flags); +int32_t wrapper_send(uint8_t *mem, int32_t sockfd, uint32_t buf_addr, uint32_t len, int32_t flags); +int32_t wrapper_shutdown(uint8_t *mem, int32_t socket, int32_t how); +int32_t wrapper_sscanf(uint8_t *mem, uint32_t str_addr, uint32_t format_addr, uint32_t sp); + +// C++ functions +uint32_t wrapper___nw__FUi(uint8_t *mem, uint32_t size); +void wrapper___dl__FPv(uint8_t *mem, uint32_t data_addr); + +union FloatReg FloatReg_from_double(double d); +double double_from_FloatReg(union FloatReg floatreg); +double double_from_memory(uint8_t *mem, uint32_t address); + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/.gitignore b/tools/ido5.3_recomp/rabbitizer/.gitignore new file mode 100644 index 00000000..e433d8d7 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/.gitignore @@ -0,0 +1,215 @@ +# https://raw.githubusercontent.com/github/gitignore/main/C.gitignore +# https://raw.githubusercontent.com/github/gitignore/main/Python.gitignore + +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf + + + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + + +.vscode/ + diff --git a/tools/ido5.3_recomp/rabbitizer/LICENSE b/tools/ido5.3_recomp/rabbitizer/LICENSE new file mode 100644 index 00000000..10a2aa35 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Decompollaborate + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tools/ido5.3_recomp/rabbitizer/Makefile b/tools/ido5.3_recomp/rabbitizer/Makefile new file mode 100644 index 00000000..e0b92c36 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/Makefile @@ -0,0 +1,140 @@ +# Build options can be changed by modifying the makefile or by building with 'make SETTING=value'. +DEBUG ?= 0 +WERROR ?= 0 +ASAN ?= 0 +EXPERIMENTAL ?= 0 +SANITY_CHECKS ?= 1 + +CC := clang +CXX := clang++ +AR := ar +IINC := -I include +IINC_XX := -I include -I cplusplus/include +CSTD := -std=c11 +CXXSTD := -std=c++17 +CFLAGS := -fPIC +CXXFLAGS := -fPIC +LDFLAGS := -Lbuild -lrabbitizer +LDXXFLAGS := -Lbuild -lrabbitizerpp +WARNINGS := -Wall -Wextra -Wpedantic +# WARNINGS := -Wall -Wextra -Wpedantic -Wpadded +WARNINGS += -Werror=vla -Werror=switch -Werror=implicit-fallthrough -Werror=unused-function -Werror=unused-parameter -Werror=shadow +WARNINGS_C := -Werror=implicit-function-declaration -Werror=incompatible-pointer-types +WARNINGS_CXX := + +ifeq ($(CC),gcc) + WARNINGS += -Wno-cast-function-type +endif + +ifeq ($(DEBUG),0) + OPTFLAGS := -Os -g +else + OPTFLAGS := -O0 -g3 + CFLAGS += -DDEVELOPMENT=1 + CXXFLAGS += -DDEVELOPMENT=1 +endif + +ifneq ($(WERROR),0) + WARNINGS += -Werror +endif + +ifneq ($(ASAN),0) + CFLAGS += -fsanitize=address -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=undefined + CXXFLAGS += -fsanitize=address -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=undefined +endif + +ifneq ($(EXPERIMENTAL),0) + CFLAGS += -DEXPERIMENTAL + CXXFLAGS += -DEXPERIMENTAL +endif + +ifneq ($(SANITY_CHECKS),0) + CFLAGS += -DRAB_SANITY_CHECKS=1 + CXXFLAGS += -DRAB_SANITY_CHECKS=1 +endif + + +SRC_DIRS := $(shell find src -type d) +C_FILES := $(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)) +H_FILES := $(foreach dir,$(IINC),$(wildcard $(dir)/**/*.h)) +O_FILES := $(foreach f,$(C_FILES:.c=.o),build/$f) + +SRCXX_DIRS := $(shell find cplusplus/src -type d) +CXX_FILES := $(foreach dir,$(SRCXX_DIRS),$(wildcard $(dir)/*.cpp)) +HXX_FILES := $(foreach dir,$(IINC_XX),$(wildcard $(dir)/**/*.hpp)) +OXX_FILES := $(foreach f,$(CXX_FILES:.cpp=.o),build/$f) + +DEP_FILES := $(O_FILES:%.o=%.d) $(OXX_FILES:%.o=%.d) + +TESTS_DIRS := $(shell find tests -type d) + +STATIC_LIB := build/librabbitizer.a +DYNAMIC_LIB := build/librabbitizer.so + +STATIC_LIB_XX := build/librabbitizerpp.a +DYNAMIC_LIB_XX := build/librabbitizerpp.so + +# create build directories +$(shell mkdir -p $(foreach dir,$(SRC_DIRS) $(SRCXX_DIRS) $(TESTS_DIRS),build/$(dir))) + + +# Dependencies of libraries + +$(STATIC_LIB): $(O_FILES) +$(DYNAMIC_LIB): $(O_FILES) + +$(STATIC_LIB_XX): $(O_FILES) $(OXX_FILES) +$(DYNAMIC_LIB_XX): $(O_FILES) $(OXX_FILES) + + +#### Main Targets ### + +all: static tests + +static: $(STATIC_LIB) $(STATIC_LIB_XX) +dynamic: $(DYNAMIC_LIB) $(DYNAMIC_LIB_XX) + +clean: + $(RM) -rf build + +distclean: clean + $(RM) -rf dist rabbitizer.egg-info .mypy_cache + +format: + clang-format-11 -i -style=file $(C_FILES) + clang-format-11 -i -style=file $(CXX_FILES) + +tidy: + clang-tidy-11 -p . --fix --fix-errors $(C_FILES) $(H_FILES) -- $(CSTD) $(OPTFLAGS) $(IINC) $(WARNINGS) $(WARNINGS_C) $(CFLAGS) + +tests: build/test.elf build/rsptest.elf build/r5900test.elf build/registersTrackerTest.elf build/tests/cplusplus/test.elf + +.PHONY: all clean distclean format tidy tests +.DEFAULT_GOAL := all +.SECONDARY: + + +#### Various Recipes #### + +build/%.elf: %.c | $(STATIC_LIB) + $(CC) -MMD $(CSTD) $(OPTFLAGS) $(IINC) $(WARNINGS) $(WARNINGS_C) $(CFLAGS) -o $@ $^ $(LDFLAGS) + +build/%.elf: %.cpp | $(STATIC_LIB_XX) + $(CXX) -MMD $(CXXSTD) $(OPTFLAGS) $(IINC_XX) $(WARNINGS) $(WARNINGS_CXX) $(CXXFLAGS) -o $@ $^ $(LDXXFLAGS) + +build/%.a: + $(AR) rcs $@ $^ + +build/%.so: + $(CC) -shared -o $@ $^ + +build/%.o: %.c +# The -MMD flags additionaly creates a .d file with the same name as the .o file. + $(CC) -MMD -c $(CSTD) $(OPTFLAGS) $(IINC) $(WARNINGS) $(WARNINGS_C) $(CFLAGS) -o $@ $< + +build/%.o: %.cpp +# The -MMD flags additionaly creates a .d file with the same name as the .o file. + $(CXX) -MMD -c $(CXXSTD) $(OPTFLAGS) $(IINC_XX) $(WARNINGS) $(WARNINGS_CXX) $(CXXFLAGS) -o $@ $< + + +-include $(DEP_FILES) diff --git a/tools/ido5.3_recomp/rabbitizer/README.md b/tools/ido5.3_recomp/rabbitizer/README.md new file mode 100644 index 00000000..18bc794c --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/README.md @@ -0,0 +1,55 @@ +# rabbitizer + +[![PyPI - Downloads](https://img.shields.io/pypi/dm/rabbitizer)](https://pypi.org/project/rabbitizer/) +![GitHub](https://img.shields.io/github/license/Decompollaborate/rabbitizer) +![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/Decompollaborate/rabbitizer) +![PyPI](https://img.shields.io/pypi/v/rabbitizer) +![GitHub contributors](https://img.shields.io/github/contributors/Decompollaborate/rabbitizer?logo=purple) + +A MIPS instruction decoder API. + +Currently supports all the CPU instructions for MIPS I, II, III and IV. + +## Installing + +The recommended way to install is using from the PyPi release, via `pip`: + +```bash +pip install rabbitizer +``` + +In case you want to mess with the latest development version without wanting to clone the repository, then you could use the following command: + +```bash +pip install git+https://github.com/Decompollaborate/rabbitizer.git@develop +``` + +NOTE: Installing the development version is not recommended. Proceed at your own risk. + +## Features + +- Should produces matching assembly. +- Fully written in C for fast decoding. +- Python bindings. + - The minimal Python version is 3.7, older versions are not guaranteed to work. +- Includes some minor tools to build your own pointer/symbol detection. +- Configurable, many features can be turned on and off. +- MIPS instructions features: + - Named registers for MIPS VR4300's coprocessors. + - Support for many pseudoinstructions. + - Properly handle move to/from coprocessor instructions. + - Support for numeric, o32, n32 and n64 ABI register names. +- Some workarounds for some specific compilers/assemblers: + - `SN64`: + - `div`/`divu` fix: tweaks a bit the produced `div`, `divu` and `break` instructions. +- N64 RSP instruction decoding support. + - RSP decoding has been tested to build back to matching assemblies with [armips](https://github.com/Kingcom/armips/). +- R5900 (PS2's Emotion Engine processor) decoding support. + +## References + +- R5900: + - EmotionEngine instruction decoding: + - Official documentation from Toshiba: + - VU instruction manual: + - GNU binutils: diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/include/analysis/LoPairingInfo.hpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/analysis/LoPairingInfo.hpp new file mode 100644 index 00000000..020761a5 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/analysis/LoPairingInfo.hpp @@ -0,0 +1,36 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_LO_PAIRING_INFO_HPP +#define RABBITIZER_LO_PAIRING_INFO_HPP +#pragma once + +#include "analysis/RabbitizerLoPairingInfo.h" + + +namespace rabbitizer { + class LoPairingInfo { + protected: + RabbitizerLoPairingInfo pairingInfo; + + public: + LoPairingInfo(); + LoPairingInfo(const RabbitizerLoPairingInfo &pairingInfo); + + /** + * Returns a pointer to the inner RabbitizerLoPairingInfo. + * It is recommended to not mess with it unless you know what you are doing. + */ + RabbitizerLoPairingInfo *getCPtr(); + const RabbitizerLoPairingInfo *getCPtr() const; + + int getInstrOffset() const; + int64_t getValue() const; + bool shouldProcess() const; + bool isGpRel() const; + bool isGpGot() const; + }; +}; + + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/include/analysis/RegistersTracker.hpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/analysis/RegistersTracker.hpp new file mode 100644 index 00000000..d3e1cb9e --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/analysis/RegistersTracker.hpp @@ -0,0 +1,49 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_REGISTERS_TRACKER_HPP +#define RABBITIZER_REGISTERS_TRACKER_HPP +#pragma once + +#include "analysis/RabbitizerRegistersTracker.h" + +#include "analysis/LoPairingInfo.hpp" +#include "instructions/InstructionBase.hpp" + + +namespace rabbitizer { + class RegistersTracker { + protected: + RabbitizerRegistersTracker tracker; + + public: + RegistersTracker(); + RegistersTracker(const RegistersTracker &other); + virtual ~RegistersTracker(); + + /** + * Returns a pointer to the inner RabbitizerRegistersTracker. + * It is recommended to not mess with it unless you know what you are doing. + */ + RabbitizerRegistersTracker *getCPtr(); + const RabbitizerRegistersTracker *getCPtr() const; + + bool moveRegisters(const InstructionBase &instr); + void overwriteRegisters(const InstructionBase &instr, int instrOffset); + void unsetRegistersAfterFuncCall(const InstructionBase &instr, const InstructionBase &prevInstr); + bool getAddressIfCanSetType(const InstructionBase &instr, int instrOffset, uint32_t *dstAddress) const; + bool getJrInfo(const InstructionBase &instr, int *dstOffset, uint32_t *dstAddress) const; + + void processLui(const InstructionBase &instr, int instrOffset); + void processLui(const InstructionBase &instr, int instrOffset, const InstructionBase &prevInstr); + void processGpLoad(const InstructionBase &instr, int instrOffset); + bool getLuiOffsetForConstant(const InstructionBase &instr, int *dstOffset) const; + void processConstant(const InstructionBase &instr, uint32_t value, int offset); + LoPairingInfo preprocessLoAndGetInfo(const InstructionBase &instr, int instrOffset); + void processLo(const InstructionBase &instr, uint32_t value, int offset); + bool hasLoButNoHi(const InstructionBase &instr) const; + }; +}; + + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstrId.hpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstrId.hpp new file mode 100644 index 00000000..59bf46f5 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstrId.hpp @@ -0,0 +1,38 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRID_HPP +#define RABBITIZER_INSTRID_HPP +#pragma once + +#include + + +namespace rabbitizer { + namespace InstrId { + #define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) \ + prefix##_##name, + + #define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) \ + RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + + enum class UniqueId { + #include "instructions/instr_id/RabbitizerInstrId_cpu.inc" + + #include "instructions/instr_id/RabbitizerInstrId_rsp.inc" + + #include "instructions/instr_id/RabbitizerInstrId_r5900.inc" + + ALL_MAX = RABBITIZER_DEF_INSTR_ID(r5900, , MAX, ) + }; + + #undef RABBITIZER_DEF_INSTR_ID + #undef RABBITIZER_DEF_INSTR_ID_ALTNAME + + + std::string getOpcodeName(UniqueId uniqueId); + }; +}; + + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionBase.hpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionBase.hpp new file mode 100644 index 00000000..ced9901a --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionBase.hpp @@ -0,0 +1,253 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_BASE_HPP +#define RABBITIZER_INSTRUCTION_BASE_HPP +#pragma once + +#include +#include + +#include "instructions/RabbitizerInstruction.h" + +#include "instructions/Registers.hpp" +#include "instructions/OperandType.hpp" +#include "instructions/InstrId.hpp" + + +namespace rabbitizer { + class InstructionBase { + protected: + RabbitizerInstruction instr; + + InstructionBase() = default; + virtual ~InstructionBase() = default; + + public: + /** + * Returns a pointer to the inner RabbitizerInstruction. + * It is recommended to not mess with it unless you know what you are doing. + */ + RabbitizerInstruction *getCPtr(); + const RabbitizerInstruction *getCPtr() const; + + /* getters */ + + uint8_t Get_opcode() const; + uint8_t Get_sa() const; + uint8_t Get_function() const; + + Registers::Cpu::GprO32 GetO32_rs() const; + Registers::Cpu::GprO32 GetO32_rt() const; + Registers::Cpu::GprO32 GetO32_rd() const; + + Registers::Cpu::GprN32 GetN32_rs() const; + Registers::Cpu::GprN32 GetN32_rt() const; + Registers::Cpu::GprN32 GetN32_rd() const; + + Registers::Cpu::Cop0 Get_cop0d() const; + + uint32_t Get_instr_index() const; + uint16_t Get_immediate() const; + + Registers::Cpu::Cop1O32 GetO32_fs() const; + Registers::Cpu::Cop1O32 GetO32_ft() const; + Registers::Cpu::Cop1O32 GetO32_fd() const; + + Registers::Cpu::Cop1N32 GetN32_fs() const; + Registers::Cpu::Cop1N32 GetN32_ft() const; + Registers::Cpu::Cop1N32 GetN32_fd() const; + + Registers::Cpu::Cop1N64 GetN64_fs() const; + Registers::Cpu::Cop1N64 GetN64_ft() const; + Registers::Cpu::Cop1N64 GetN64_fd() const; + + Registers::Cpu::Cop1Control Get_cop1cs() const; + + Registers::Cpu::Cop2 Get_cop2t() const; + + uint8_t Get_op() const; + + uint32_t Get_code() const; + uint32_t Get_code_upper() const; + uint32_t Get_code_lower() const; + + uint32_t Get_copraw() const; + + uint8_t Get_fmt() const; + uint8_t Get_fc() const; + uint8_t Get_cond() const; + + uint8_t Get_tf() const; + uint8_t Get_nd() const; + uint8_t Get_bc_fmt() const; + + uint8_t Get_stype() const; + + /* getters */ + + + /* setters */ + + void Set_opcode(uint8_t val); + void Set_sa(uint8_t val); + void Set_function(uint8_t val); + + void Set_rs(Registers::Cpu::GprO32 val); + void Set_rt(Registers::Cpu::GprO32 val); + void Set_rd(Registers::Cpu::GprO32 val); + + void Set_rs(Registers::Cpu::GprN32 val); + void Set_rt(Registers::Cpu::GprN32 val); + void Set_rd(Registers::Cpu::GprN32 val); + + void Set_cop0d(Registers::Cpu::Cop0 val); + + void Set_instr_index(uint32_t val); + void Set_immediate(uint16_t val); + + void Set_fs(Registers::Cpu::Cop1O32 val); + void Set_ft(Registers::Cpu::Cop1O32 val); + void Set_fd(Registers::Cpu::Cop1O32 val); + + void Set_fs(Registers::Cpu::Cop1N32 val); + void Set_ft(Registers::Cpu::Cop1N32 val); + void Set_fd(Registers::Cpu::Cop1N32 val); + + void Set_fs(Registers::Cpu::Cop1N64 val); + void Set_ft(Registers::Cpu::Cop1N64 val); + void Set_fd(Registers::Cpu::Cop1N64 val); + + void Set_cop1cs(Registers::Cpu::Cop1Control val); + + void Set_cop2t(Registers::Cpu::Cop2 val); + + void Set_op(uint8_t val); + + void Set_code(uint32_t val); + void Set_code_upper(uint32_t val); + void Set_code_lower(uint32_t val); + + void Set_copraw(uint32_t val); + + void Set_fmt(uint8_t val); + void Set_fc(uint8_t val); + void Set_cond(uint8_t val); + + void Set_tf(uint8_t val); + void Set_nd(uint8_t val); + void Set_bc_fmt(uint8_t val); + + void Set_stype(uint8_t val); + + /* setters */ + + + /* more getters */ + + uint32_t getRaw() const; + + InstrId::UniqueId getUniqueId() const; + uint32_t getVram() const; + bool isInHandwrittenFunction() const; + + int32_t getProcessedImmediate() const; + uint32_t getInstrIndexAsVram() const; + + int32_t getBranchOffset() const; + int32_t getGenericBranchOffset(uint32_t currentVram) const; + + + std::string getOpcodeName() const; + + /* more getters */ + + + /* */ + + void blankOut(); + + + /* Instruction examination */ + + bool isImplemented() const; + bool isLikelyHandwritten() const; + bool isNop() const; + bool isUnconditionalBranch() const; + bool isJrRa() const; + bool isJrNotRa() const; + bool hasDelaySlot() const; + + std::string mapInstrToType() const; + + bool sameOpcode(const InstructionBase &other) const; + bool sameOpcodeButDifferentArguments(const InstructionBase &other) const; + + bool hasOperand(OperandType operand) const; + bool hasOperandAlias(OperandType operand) const; + + uint32_t getValidBits() const; + bool isValid() const; + + /* Instruction examination */ + + + /* Instruction descriptor */ + + bool isUnknownType() const; + bool isJType() const; + bool isIType() const; + bool isRType() const; + bool isRegimmType() const; + + // TODO + // RabbitizerInstrSuffix instrSuffix() const; + + bool isBranch() const; + bool isBranchLikely() const; + bool isJump() const; + bool isTrap() const; + + bool isFloat() const; + bool isDouble() const; + + bool isUnsigned() const; + + bool modifiesRt() const; + bool modifiesRd() const; + + bool notEmitedByCompilers() const; + + bool canBeHi() const; + bool canBeLo() const; + bool doesLink() const; + bool doesDereference() const; + bool doesLoad() const; + bool doesStore() const; + bool maybeIsMove() const; + + bool isPseudo() const; + + /* Instruction descriptor */ + + + /* Disassembly */ + + bool mustDisasmAsData() const; + + std::string disassembleOperands() const; + std::string disassembleOperands(std::string_view immOverride) const; + + std::string disassembleInstruction(int extraLJust) const; + std::string disassembleInstruction(int extraLJust, std::string_view immOverride) const; + + std::string disassembleAsData(int extraLJust) const; + + std::string disassemble(int extraLJust) const; + std::string disassemble(int extraLJust, std::string_view immOverride) const; + + /* Disassembly */ + }; +}; + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionCpu.hpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionCpu.hpp new file mode 100644 index 00000000..ef2eec54 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionCpu.hpp @@ -0,0 +1,20 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_CPU_HPP +#define RABBITIZER_INSTRUCTION_CPU_HPP +#pragma once + +#include "InstructionBase.hpp" + + +namespace rabbitizer { + class InstructionCpu : public InstructionBase { + public: + InstructionCpu(uint32_t word, uint32_t vram); + virtual ~InstructionCpu(); + }; +}; + + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionR5900.hpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionR5900.hpp new file mode 100644 index 00000000..0be3a271 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionR5900.hpp @@ -0,0 +1,41 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_R5900_HPP +#define RABBITIZER_INSTRUCTION_R5900_HPP +#pragma once + +#include "InstructionBase.hpp" + + +namespace rabbitizer { + class InstructionR5900 : public InstructionBase { + public: + InstructionR5900(uint32_t word, uint32_t vram); + virtual ~InstructionR5900(); + + Registers::R5900::VF GetR5900_vfs() const; + Registers::R5900::VF GetR5900_vft() const; + Registers::R5900::VF GetR5900_vfd() const; + + Registers::R5900::VI GetR5900_vis() const; + Registers::R5900::VI GetR5900_vit() const; + Registers::R5900::VI GetR5900_vid() const; + + uint8_t GetR5900_mmi_function() const; + uint8_t GetR5900_fhi_flo() const; + + uint8_t GetR5900_xyzw_x() const; + uint8_t GetR5900_xyzw_y() const; + uint8_t GetR5900_xyzw_z() const; + uint8_t GetR5900_xyzw_w() const; + uint8_t GetR5900_n() const; + uint8_t GetR5900_l() const; + uint8_t GetR5900_m() const; + + uint8_t GetR5900_imm5() const; + }; +}; + + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionRsp.hpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionRsp.hpp new file mode 100644 index 00000000..f2d32a13 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/InstructionRsp.hpp @@ -0,0 +1,40 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_RSP_HPP +#define RABBITIZER_INSTRUCTION_RSP_HPP +#pragma once + +#include "InstructionBase.hpp" + + +namespace rabbitizer { + class InstructionRsp : public InstructionBase { + public: + InstructionRsp(uint32_t word, uint32_t vram); + virtual ~InstructionRsp(); + + Registers::Rsp::Gpr GetRsp_rs() const; + Registers::Rsp::Gpr GetRsp_rt() const; + Registers::Rsp::Gpr GetRsp_rd() const; + + Registers::Rsp::Cop0 GetRsp_cop0d() const; + + Registers::Rsp::Cop2 GetRsp_cop2t() const; + + Registers::Rsp::Cop2Control GetRsp_cop2cd() const; + + Registers::Rsp::Vector GetRsp_vs() const; + Registers::Rsp::Vector GetRsp_vt() const; + Registers::Rsp::Vector GetRsp_vd() const; + + uint8_t GetRsp_elementhigh() const; + uint8_t GetRsp_elementlow() const; + + uint8_t GetRsp_index() const; + uint8_t GetRsp_de() const; + }; +}; + + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/OperandType.hpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/OperandType.hpp new file mode 100644 index 00000000..abd728ad --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/OperandType.hpp @@ -0,0 +1,27 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_OPERAND_TYPE_HPP +#define RABBITIZER_OPERAND_TYPE_HPP +#pragma once + + +namespace rabbitizer { + #define RAB_DEF_OPERAND(prefix, operand) \ + prefix##_##operand, + + enum class OperandType { + RAB_DEF_OPERAND(ALL, INVALID) + + #include "instructions/operands/RabbitizerOperandType_cpu.inc" + #include "instructions/operands/RabbitizerOperandType_rsp.inc" + #include "instructions/operands/RabbitizerOperandType_r5900.inc" + + RAB_DEF_OPERAND(ALL, MAX) + }; + + #undef RAB_DEF_OPERAND +}; + + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/Registers.hpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/Registers.hpp new file mode 100644 index 00000000..ceddd8f8 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/instructions/Registers.hpp @@ -0,0 +1,94 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_REGISTER_HPP +#define RABBITIZER_REGISTER_HPP +#pragma once + + +namespace rabbitizer { + + namespace Registers { + #define RABBITIZER_DEF_REG(prefix, name, numeric) \ + prefix##_##name + + #define RABBITIZER_DEF_REG_NODOLLAR(prefix, name, numeric) \ + prefix##_##name + + namespace Cpu { + enum class GprO32 { + #include "instructions/registers/RabbitizerRegister_GprO32.inc" + }; + + enum class GprN32 { + #include "instructions/registers/RabbitizerRegister_GprN32.inc" + }; + + + enum class Cop0 { + #include "instructions/registers/RabbitizerRegister_Cop0.inc" + }; + + // Float registers + enum class Cop1O32 { + #include "instructions/registers/RabbitizerRegister_Cop1O32.inc" + }; + + enum class Cop1N32 { + #include "instructions/registers/RabbitizerRegister_Cop1N32.inc" + }; + + enum class Cop1N64 { + #include "instructions/registers/RabbitizerRegister_Cop1N64.inc" + }; + + enum class Cop1Control { + #include "instructions/registers/RabbitizerRegister_Cop1Control.inc" + }; + + enum class Cop2 { + #include "instructions/registers/RabbitizerRegister_Cop2.inc" + }; + }; + + + namespace Rsp { + enum class Gpr { + #include "instructions/registers/RabbitizerRegister_RspGpr.inc" + }; + + enum class Cop0 { + #include "instructions/registers/RabbitizerRegister_RspCop0.inc" + }; + + enum class Cop2 { + #include "instructions/registers/RabbitizerRegister_RspCop2.inc" + }; + + enum class Cop2Control { + #include "instructions/registers/RabbitizerRegister_RspCop2Control.inc" + }; + + enum class Vector { + #include "instructions/registers/RabbitizerRegister_RspVector.inc" + }; + }; + + + namespace R5900 { + enum class VF { + #include "instructions/registers/RabbitizerRegister_R5900VF.inc" + }; + + enum class VI { + #include "instructions/registers/RabbitizerRegister_R5900VI.inc" + }; + }; + + #undef RABBITIZER_DEF_REG + #undef RABBITIZER_DEF_REG_NODOLLAR + }; +}; + + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/include/rabbitizer.hpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/rabbitizer.hpp new file mode 100644 index 00000000..332101e8 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/include/rabbitizer.hpp @@ -0,0 +1,26 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_HPP +#define RABBITIZER_HPP +#pragma once + + +#include "common/RabbitizerVersion.h" +#include "common/RabbitizerConfig.h" + +#include "instructions/OperandType.hpp" +#include "instructions/InstrId.hpp" +//#include "instructions/InstrSuffix.hpp" +//#include "instructions/InstrDescriptor.hpp" +#include "instructions/Registers.hpp" +#include "instructions/InstructionBase.hpp" +#include "instructions/InstructionCpu.hpp" +#include "instructions/InstructionRsp.hpp" +#include "instructions/InstructionR5900.hpp" + +#include "analysis/LoPairingInfo.hpp" +#include "analysis/RegistersTracker.hpp" + + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/src/analysis/LoPairingInfo.cpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/analysis/LoPairingInfo.cpp new file mode 100644 index 00000000..d6fba253 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/analysis/LoPairingInfo.cpp @@ -0,0 +1,34 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "analysis/LoPairingInfo.hpp" + +using namespace rabbitizer; + +LoPairingInfo::LoPairingInfo() : pairingInfo{} { +} +LoPairingInfo::LoPairingInfo(const RabbitizerLoPairingInfo &newPairingInfo) : pairingInfo{ newPairingInfo } { +} + +RabbitizerLoPairingInfo *LoPairingInfo::getCPtr() { + return &this->pairingInfo; +} +const RabbitizerLoPairingInfo *LoPairingInfo::getCPtr() const { + return &this->pairingInfo; +} + +int LoPairingInfo::getInstrOffset() const { + return this->pairingInfo.instrOffset; +} +int64_t LoPairingInfo::getValue() const { + return this->pairingInfo.value; +} +bool LoPairingInfo::shouldProcess() const { + return this->pairingInfo.shouldProcess; +} +bool LoPairingInfo::isGpRel() const { + return this->pairingInfo.isGpRel; +} +bool LoPairingInfo::isGpGot() const { + return this->pairingInfo.isGpGot; +} diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/src/analysis/RegistersTracker.cpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/analysis/RegistersTracker.cpp new file mode 100644 index 00000000..5294d58f --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/analysis/RegistersTracker.cpp @@ -0,0 +1,64 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "analysis/RegistersTracker.hpp" + +using namespace rabbitizer; + +RegistersTracker::RegistersTracker() { + RabbitizerRegistersTracker_init(&this->tracker, NULL); +} +RegistersTracker::RegistersTracker(const RegistersTracker &other) { + RabbitizerRegistersTracker_init(&this->tracker, &other.tracker); +} +RegistersTracker::~RegistersTracker() { + RabbitizerRegistersTracker_destroy(&this->tracker); +} + +RabbitizerRegistersTracker *RegistersTracker::getCPtr() { + return &this->tracker; +} +const RabbitizerRegistersTracker *RegistersTracker::getCPtr() const { + return &this->tracker; +} + +bool RegistersTracker::moveRegisters(const InstructionBase &instr) { + return RabbitizerRegistersTracker_moveRegisters(&this->tracker, instr.getCPtr()); +} +void RegistersTracker::overwriteRegisters(const InstructionBase &instr, int instrOffset) { + RabbitizerRegistersTracker_overwriteRegisters(&this->tracker, instr.getCPtr(), instrOffset); +} +void RegistersTracker::unsetRegistersAfterFuncCall(const InstructionBase &instr, const InstructionBase &prevInstr) { + RabbitizerRegistersTracker_unsetRegistersAfterFuncCall(&this->tracker, instr.getCPtr(), prevInstr.getCPtr()); +} +bool RegistersTracker::getAddressIfCanSetType(const InstructionBase &instr, int instrOffset, uint32_t *dstAddress) const { + return RabbitizerRegistersTracker_getAddressIfCanSetType(&this->tracker, instr.getCPtr(), instrOffset, dstAddress); +} +bool RegistersTracker::getJrInfo(const InstructionBase &instr, int *dstOffset, uint32_t *dstAddress) const { + return RabbitizerRegistersTracker_getJrInfo(&this->tracker, instr.getCPtr(), dstOffset, dstAddress); +} + +void RegistersTracker::processLui(const InstructionBase &instr, int instrOffset) { + RabbitizerRegistersTracker_processLui(&this->tracker, instr.getCPtr(), instrOffset, NULL); +} +void RegistersTracker::processLui(const InstructionBase &instr, int instrOffset, const InstructionBase &prevInstr) { + RabbitizerRegistersTracker_processLui(&this->tracker, instr.getCPtr(), instrOffset, prevInstr.getCPtr()); +} +void RegistersTracker::processGpLoad(const InstructionBase &instr, int instrOffset) { + RabbitizerRegistersTracker_processGpLoad(&this->tracker, instr.getCPtr(), instrOffset); +} +bool RegistersTracker::getLuiOffsetForConstant(const InstructionBase &instr, int *dstOffset) const { + return RabbitizerRegistersTracker_getLuiOffsetForConstant(&this->tracker, instr.getCPtr(), dstOffset); +} +void RegistersTracker::processConstant(const InstructionBase &instr, uint32_t value, int offset) { + RabbitizerRegistersTracker_processConstant(&this->tracker, instr.getCPtr(), value, offset); +} +LoPairingInfo RegistersTracker::preprocessLoAndGetInfo(const InstructionBase &instr, int instrOffset) { + return RabbitizerRegistersTracker_preprocessLoAndGetInfo(&this->tracker, instr.getCPtr(), instrOffset); +} +void RegistersTracker::processLo(const InstructionBase &instr, uint32_t value, int offset) { + RabbitizerRegistersTracker_processLo(&this->tracker, instr.getCPtr(), value, offset); +} +bool RegistersTracker::hasLoButNoHi(const InstructionBase &instr) const { + return RabbitizerRegistersTracker_hasLoButNoHi(&this->tracker, instr.getCPtr()); +} diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstrId.cpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstrId.cpp new file mode 100644 index 00000000..03e28d01 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstrId.cpp @@ -0,0 +1,14 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/InstrId.hpp" + +#include "instructions/RabbitizerInstrId.h" + +using namespace rabbitizer; + +std::string InstrId::getOpcodeName(InstrId::UniqueId uniqueId) { + RabbitizerInstrId id = static_cast(uniqueId); + + return std::string(RabbitizerInstrId_getOpcodeName(id)); +} diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionBase.cpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionBase.cpp new file mode 100644 index 00000000..4f5ad5be --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionBase.cpp @@ -0,0 +1,1036 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/InstructionBase.hpp" + +#include + +#include "instructions/RabbitizerInstruction.h" +#include "instructions/RabbitizerInstructionR5900.h" + +using namespace rabbitizer; + +RabbitizerInstruction *InstructionBase::getCPtr() { + return &this->instr; +} +const RabbitizerInstruction *InstructionBase::getCPtr() const { + return &this->instr; +} + +/* getters */ + +uint8_t InstructionBase::Get_opcode() const { + return RAB_INSTR_GET_opcode(&this->instr); +} +uint8_t InstructionBase::Get_sa() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_sa)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'sa' operand."); + } +#endif + + return RAB_INSTR_GET_sa(&this->instr); +} +uint8_t InstructionBase::Get_function() const { + /* + #ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_function)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'function' operand."); + } + #endif + */ + + return RAB_INSTR_GET_function(&this->instr); +} + +Registers::Cpu::GprO32 InstructionBase::GetO32_rs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rs(&this->instr)); +} +Registers::Cpu::GprO32 InstructionBase::GetO32_rt() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rt' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rt(&this->instr)); +} +Registers::Cpu::GprO32 InstructionBase::GetO32_rd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rd(&this->instr)); +} + +Registers::Cpu::GprN32 InstructionBase::GetN32_rs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rs(&this->instr)); +} +Registers::Cpu::GprN32 InstructionBase::GetN32_rt() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rt' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rt(&this->instr)); +} +Registers::Cpu::GprN32 InstructionBase::GetN32_rd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rd(&this->instr)); +} + +Registers::Cpu::Cop0 InstructionBase::Get_cop0d() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop0d)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop0d' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_cop0d(&this->instr)); +} + +uint32_t InstructionBase::Get_instr_index() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_label)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'label' operand."); + } +#endif + + return RAB_INSTR_GET_instr_index(&this->instr); +} +uint16_t InstructionBase::Get_immediate() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_immediate)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'immediate' operand."); + } +#endif + + return RAB_INSTR_GET_immediate(&this->instr); +} + +Registers::Cpu::Cop1O32 InstructionBase::GetO32_fs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fs(&this->instr)); +} +Registers::Cpu::Cop1O32 InstructionBase::GetO32_ft() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_ft(&this->instr)); +} +Registers::Cpu::Cop1O32 InstructionBase::GetO32_fd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fd(&this->instr)); +} + +Registers::Cpu::Cop1N32 InstructionBase::GetN32_fs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fs(&this->instr)); +} +Registers::Cpu::Cop1N32 InstructionBase::GetN32_ft() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_ft(&this->instr)); +} +Registers::Cpu::Cop1N32 InstructionBase::GetN32_fd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fd(&this->instr)); +} + +Registers::Cpu::Cop1N64 InstructionBase::GetN64_fs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fs(&this->instr)); +} +Registers::Cpu::Cop1N64 InstructionBase::GetN64_ft() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_ft(&this->instr)); +} +Registers::Cpu::Cop1N64 InstructionBase::GetN64_fd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_fd(&this->instr)); +} + +Registers::Cpu::Cop1Control InstructionBase::Get_cop1cs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop1cs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop1cs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_cop1cs(&this->instr)); +} + +Registers::Cpu::Cop2 InstructionBase::Get_cop2t() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop2t)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop2t' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_cop2t(&this->instr)); +} + +uint8_t InstructionBase::Get_op() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_op)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'op' operand."); + } +#endif + + return RAB_INSTR_GET_op(&this->instr); +} + +uint32_t InstructionBase::Get_code() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code' operand."); + } +#endif + + return RAB_INSTR_GET_code(&this->instr); +} +uint32_t InstructionBase::Get_code_upper() const { +#if 0 +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code_upper)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code_upper' operand."); + } +#endif +#endif + + return RAB_INSTR_GET_code_upper(&this->instr); +} +uint32_t InstructionBase::Get_code_lower() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code_lower)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code_lower' operand."); + } +#endif + + return RAB_INSTR_GET_code_lower(&this->instr); +} + +uint32_t InstructionBase::Get_copraw() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_copraw)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'copraw' operand."); + } +#endif + + return RAB_INSTR_GET_copraw(&this->instr); +} + +uint8_t InstructionBase::Get_fmt() const { + return RAB_INSTR_GET_fmt(&this->instr); +} +uint8_t InstructionBase::Get_fc() const { + return RAB_INSTR_GET_fc(&this->instr); +} +uint8_t InstructionBase::Get_cond() const { + return RAB_INSTR_GET_cond(&this->instr); +} + +uint8_t InstructionBase::Get_tf() const { + return RAB_INSTR_GET_tf(&this->instr); +} +uint8_t InstructionBase::Get_nd() const { + return RAB_INSTR_GET_nd(&this->instr); +} +uint8_t InstructionBase::Get_bc_fmt() const { + return RAB_INSTR_GET_bc_fmt(&this->instr); +} + +uint8_t InstructionBase::Get_stype() const { + return RAB_INSTR_GET_stype(&this->instr); +} + +/* getters */ + +/* setters */ + +void InstructionBase::Set_opcode(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_opcode(this->instr.word, val); +} +void InstructionBase::Set_sa(uint8_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_sa)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'sa' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_sa(this->instr.word, val); +} +void InstructionBase::Set_function(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_function(this->instr.word, val); +} + +void InstructionBase::Set_rs(Registers::Cpu::GprO32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rs(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_rt(Registers::Cpu::GprO32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rt' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rt(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_rd(Registers::Cpu::GprO32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rd' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rd(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_rs(Registers::Cpu::GprN32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rs(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_rt(Registers::Cpu::GprN32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rt' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rt(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_rd(Registers::Cpu::GprN32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rd' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_rd(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_cop0d(Registers::Cpu::Cop0 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop0d)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop0d' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_cop0d(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_instr_index(uint32_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_label)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'label' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_instr_index(this->instr.word, val); +} +void InstructionBase::Set_immediate(uint16_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_immediate)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'immediate' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_immediate(this->instr.word, val); +} + +void InstructionBase::Set_fs(Registers::Cpu::Cop1O32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fs(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_ft(Registers::Cpu::Cop1O32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_ft(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_fd(Registers::Cpu::Cop1O32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fd(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_fs(Registers::Cpu::Cop1N32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fs(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_ft(Registers::Cpu::Cop1N32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_ft(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_fd(Registers::Cpu::Cop1N32 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fd(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_fs(Registers::Cpu::Cop1N64 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fs(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_ft(Registers::Cpu::Cop1N64 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_ft)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'ft' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_ft(this->instr.word, static_cast(val)); +} +void InstructionBase::Set_fd(Registers::Cpu::Cop1N64 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_fd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'fd' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_fd(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_cop1cs(Registers::Cpu::Cop1Control val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop1cs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop1cs' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_cop1cs(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_cop2t(Registers::Cpu::Cop2 val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_cop2t)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop2t' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_cop2t(this->instr.word, static_cast(val)); +} + +void InstructionBase::Set_op(uint8_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_op)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'op' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_op(this->instr.word, val); +} + +void InstructionBase::Set_code(uint32_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_code(this->instr.word, val); +} + +void InstructionBase::Set_code_upper(uint32_t val) { +#if 0 +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code_upper)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code_upper' operand."); + } +#endif +#endif + + this->instr.word = RAB_INSTR_PACK_code_upper(this->instr.word, val); +} + +void InstructionBase::Set_code_lower(uint32_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_code_lower)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'code_lower' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_code_lower(this->instr.word, val); +} + +void InstructionBase::Set_copraw(uint32_t val) { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_copraw)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'copraw' operand."); + } +#endif + + this->instr.word = RAB_INSTR_PACK_copraw(this->instr.word, val); +} + +void InstructionBase::Set_fmt(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_fmt(this->instr.word, val); +} +void InstructionBase::Set_fc(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_fc(this->instr.word, val); +} +void InstructionBase::Set_cond(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_cond(this->instr.word, val); +} + +void InstructionBase::Set_tf(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_tf(this->instr.word, val); +} +void InstructionBase::Set_nd(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_nd(this->instr.word, val); +} +void InstructionBase::Set_bc_fmt(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_bc_fmt(this->instr.word, val); +} + +void InstructionBase::Set_stype(uint8_t val) { + this->instr.word = RAB_INSTR_PACK_stype(this->instr.word, val); +} + +/* setters */ + +/* more getters */ + +uint32_t InstructionBase::getRaw() const { + return RabbitizerInstruction_getRaw(&this->instr); +} + +InstrId::UniqueId InstructionBase::getUniqueId() const { + return static_cast(this->instr.uniqueId); +} +uint32_t InstructionBase::getVram() const { + return this->instr.vram; +} +bool InstructionBase::isInHandwrittenFunction() const { + return this->instr.inHandwrittenFunction; +} + +int32_t InstructionBase::getProcessedImmediate() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_immediate)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'immediate' operand."); + } +#endif + + return RabbitizerInstruction_getProcessedImmediate(&this->instr); +} +uint32_t InstructionBase::getInstrIndexAsVram() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_label)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'label' operand."); + } +#endif + + return RabbitizerInstruction_getInstrIndexAsVram(&this->instr); +} + +int32_t InstructionBase::getBranchOffset() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_branch_target_label)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'branch_target_label' operand."); + } +#endif + + return RabbitizerInstruction_getBranchOffset(&this->instr); +} +int32_t InstructionBase::getGenericBranchOffset(uint32_t currentVram) const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::cpu_branch_target_label) && !hasOperandAlias(OperandType::cpu_label)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have either 'branch_target_label' or 'label' operands."); + } +#endif + + return RabbitizerInstruction_getGenericBranchOffset(&this->instr, currentVram); +} + +std::string InstructionBase::getOpcodeName() const { + return InstrId::getOpcodeName(getUniqueId()); +} + +/* more getters */ + +/* */ + +void InstructionBase::blankOut() { + RabbitizerInstruction_blankOut(&this->instr); +} + +/* Instruction examination */ + +bool InstructionBase::isImplemented() const { + return RabbitizerInstruction_isImplemented(&this->instr); +} +bool InstructionBase::isLikelyHandwritten() const { + return RabbitizerInstruction_isLikelyHandwritten(&this->instr); +} +bool InstructionBase::isNop() const { + return RabbitizerInstruction_isNop(&this->instr); +} +bool InstructionBase::isUnconditionalBranch() const { + return RabbitizerInstruction_isUnconditionalBranch(&this->instr); +} +bool InstructionBase::isJrRa() const { + return RabbitizerInstruction_isJrRa(&this->instr); +} +bool InstructionBase::isJrNotRa() const { + return RabbitizerInstruction_isJrNotRa(&this->instr); +} +bool InstructionBase::hasDelaySlot() const { + return RabbitizerInstruction_hasDelaySlot(&this->instr); +} + +std::string InstructionBase::mapInstrToType() const { + return std::string(RabbitizerInstruction_mapInstrToType(&this->instr)); +} + +bool InstructionBase::sameOpcode(const InstructionBase &other) const { + return RabbitizerInstruction_sameOpcode(&this->instr, &other.instr); +} +bool InstructionBase::sameOpcodeButDifferentArguments(const InstructionBase &other) const { + return RabbitizerInstruction_sameOpcodeButDifferentArguments(&this->instr, &other.instr); +} + +bool InstructionBase::hasOperand(OperandType operand) const { + return RabbitizerInstruction_hasOperand(&this->instr, static_cast(operand)); +} +bool InstructionBase::hasOperandAlias(OperandType operand) const { + return RabbitizerInstruction_hasOperandAlias(&this->instr, static_cast(operand)); +} + +uint32_t InstructionBase::getValidBits() const { + return RabbitizerInstruction_getValidBits(&this->instr); +} +bool InstructionBase::isValid() const { + return RabbitizerInstruction_isValid(&this->instr); +} + +/* Instruction examination */ + +/* Instruction descriptor */ + +bool InstructionBase::isUnknownType() const { + return RabbitizerInstrDescriptor_isUnknownType(this->instr.descriptor); +} +bool InstructionBase::isJType() const { + return RabbitizerInstrDescriptor_isJType(this->instr.descriptor); +} +bool InstructionBase::isIType() const { + return RabbitizerInstrDescriptor_isIType(this->instr.descriptor); +} +bool InstructionBase::isRType() const { + return RabbitizerInstrDescriptor_isRType(this->instr.descriptor); +} +bool InstructionBase::isRegimmType() const { + return RabbitizerInstrDescriptor_isRegimmType(this->instr.descriptor); +} + +// TODO +// RabbitizerInstrSuffix instrSuffix() const; + +bool InstructionBase::isBranch() const { + return RabbitizerInstrDescriptor_isBranch(this->instr.descriptor); +} +bool InstructionBase::isBranchLikely() const { + return RabbitizerInstrDescriptor_isBranchLikely(this->instr.descriptor); +} +bool InstructionBase::isJump() const { + return RabbitizerInstrDescriptor_isJump(this->instr.descriptor); +} +bool InstructionBase::isTrap() const { + return RabbitizerInstrDescriptor_isTrap(this->instr.descriptor); +} + +bool InstructionBase::isFloat() const { + return RabbitizerInstrDescriptor_isFloat(this->instr.descriptor); +} +bool InstructionBase::isDouble() const { + return RabbitizerInstrDescriptor_isDouble(this->instr.descriptor); +} + +bool InstructionBase::isUnsigned() const { + return RabbitizerInstrDescriptor_isUnsigned(this->instr.descriptor); +} + +bool InstructionBase::modifiesRt() const { + return RabbitizerInstrDescriptor_modifiesRt(this->instr.descriptor); +} +bool InstructionBase::modifiesRd() const { + return RabbitizerInstrDescriptor_modifiesRd(this->instr.descriptor); +} + +bool InstructionBase::notEmitedByCompilers() const { + return RabbitizerInstrDescriptor_notEmitedByCompilers(this->instr.descriptor); +} + +bool InstructionBase::canBeHi() const { + return RabbitizerInstrDescriptor_canBeHi(this->instr.descriptor); +} +bool InstructionBase::canBeLo() const { + return RabbitizerInstrDescriptor_canBeLo(this->instr.descriptor); +} +bool InstructionBase::doesLink() const { + return RabbitizerInstrDescriptor_doesLink(this->instr.descriptor); +} +bool InstructionBase::doesDereference() const { + return RabbitizerInstrDescriptor_doesDereference(this->instr.descriptor); +} +bool InstructionBase::doesLoad() const { + return RabbitizerInstrDescriptor_doesLoad(this->instr.descriptor); +} +bool InstructionBase::doesStore() const { + return RabbitizerInstrDescriptor_doesStore(this->instr.descriptor); +} +bool InstructionBase::maybeIsMove() const { + return RabbitizerInstrDescriptor_maybeIsMove(this->instr.descriptor); +} + +bool InstructionBase::isPseudo() const { + return RabbitizerInstrDescriptor_isPseudo(this->instr.descriptor); +} + +/* Instruction descriptor */ + +/* Disassembly */ + +bool InstructionBase::mustDisasmAsData() const { + return RabbitizerInstruction_mustDisasmAsData(&this->instr); +} + +std::string InstructionBase::disassembleOperands() const { + const char *immOverridePtr = NULL; + size_t immOverrideLength = 0; + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBufferOperandsDisasm(&instr, immOverrideLength); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassembleOperands(&instr, buffer, immOverridePtr, immOverrideLength); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} +std::string InstructionBase::disassembleOperands(std::string_view immOverride) const { + const char *immOverridePtr = immOverride.data(); + size_t immOverrideLength = immOverride.size(); + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBufferOperandsDisasm(&instr, immOverrideLength); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassembleOperands(&instr, buffer, immOverridePtr, immOverrideLength); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} + +std::string InstructionBase::disassembleInstruction(int extraLJust) const { + const char *immOverridePtr = NULL; + size_t immOverrideLength = 0; + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBufferInstrDisasm(&instr, immOverrideLength, extraLJust); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassembleInstruction(&instr, buffer, immOverridePtr, immOverrideLength, extraLJust); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} +std::string InstructionBase::disassembleInstruction(int extraLJust, std::string_view immOverride) const { + const char *immOverridePtr = immOverride.data(); + size_t immOverrideLength = immOverride.size(); + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBufferInstrDisasm(&instr, immOverrideLength, extraLJust); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassembleInstruction(&instr, buffer, immOverridePtr, immOverrideLength, extraLJust); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} + +std::string InstructionBase::disassembleAsData(int extraLJust) const { + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBufferDataDisasm(&instr, extraLJust); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassembleAsData(&instr, buffer, extraLJust); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} + +std::string InstructionBase::disassemble(int extraLJust) const { + const char *immOverridePtr = NULL; + size_t immOverrideLength = 0; + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBuffer(&instr, immOverrideLength, extraLJust); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassemble(&instr, buffer, immOverridePtr, immOverrideLength, extraLJust); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} + +std::string InstructionBase::disassemble(int extraLJust, std::string_view immOverride) const { + const char *immOverridePtr = immOverride.data(); + size_t immOverrideLength = immOverride.size(); + size_t bufferSize; + size_t disassmbledSize; + char *buffer; + + bufferSize = RabbitizerInstruction_getSizeForBuffer(&instr, immOverrideLength, extraLJust); + + buffer = (char *)malloc(bufferSize + 1); + if (buffer == NULL) { + throw std::runtime_error("buffer == NULL"); + } + + disassmbledSize = RabbitizerInstruction_disassemble(&instr, buffer, immOverridePtr, immOverrideLength, extraLJust); + + std::string output(buffer); + free(buffer); + + if (disassmbledSize > bufferSize) { + throw std::runtime_error("disassmbledSize > bufferSize"); + } + + return output; +} diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionCpu.cpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionCpu.cpp new file mode 100644 index 00000000..9488b9a3 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionCpu.cpp @@ -0,0 +1,15 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/InstructionCpu.hpp" + +using namespace rabbitizer; + +InstructionCpu::InstructionCpu(uint32_t word, uint32_t vram) : InstructionBase() { + RabbitizerInstruction_init(&this->instr, word, vram); + RabbitizerInstruction_processUniqueId(&this->instr); +} + +InstructionCpu::~InstructionCpu() { + RabbitizerInstruction_destroy(&this->instr); +} diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionR5900.cpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionR5900.cpp new file mode 100644 index 00000000..0fe00630 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionR5900.cpp @@ -0,0 +1,118 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/InstructionR5900.hpp" + +#include + +#include "instructions/RabbitizerInstructionR5900.h" + +using namespace rabbitizer; + +InstructionR5900::InstructionR5900(uint32_t word, uint32_t vram) : InstructionBase() { + RabbitizerInstructionR5900_init(&this->instr, word, vram); + RabbitizerInstructionR5900_processUniqueId(&this->instr); +} + +InstructionR5900::~InstructionR5900() { + RabbitizerInstructionR5900_destroy(&this->instr); +} + +Registers::R5900::VF InstructionR5900::GetR5900_vfs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vfs' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vfs(&this->instr)); +} + +Registers::R5900::VF InstructionR5900::GetR5900_vft() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vft' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vft(&this->instr)); +} + +Registers::R5900::VF InstructionR5900::GetR5900_vfd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vfd' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vfd(&this->instr)); +} + +Registers::R5900::VI InstructionR5900::GetR5900_vis() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vis' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vis(&this->instr)); +} + +Registers::R5900::VI InstructionR5900::GetR5900_vit() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vit' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vit(&this->instr)); +} + +Registers::R5900::VI InstructionR5900::GetR5900_vid() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vid' operand."); + } +#endif + + return static_cast(RAB_INSTR_R5900_GET_vid(&this->instr)); +} + +uint8_t InstructionR5900::GetR5900_mmi_function() const { + return RAB_INSTR_R5900_GET_mmi_function(&this->instr); +} +uint8_t InstructionR5900::GetR5900_fhi_flo() const { + return RAB_INSTR_R5900_GET_fhi_flo(&this->instr); +} + +uint8_t InstructionR5900::GetR5900_xyzw_x() const { + return RAB_INSTR_R5900_GET_xyzw_x(&this->instr); +} +uint8_t InstructionR5900::GetR5900_xyzw_y() const { + return RAB_INSTR_R5900_GET_xyzw_y(&this->instr); +} +uint8_t InstructionR5900::GetR5900_xyzw_z() const { + return RAB_INSTR_R5900_GET_xyzw_z(&this->instr); +} +uint8_t InstructionR5900::GetR5900_xyzw_w() const { + return RAB_INSTR_R5900_GET_xyzw_w(&this->instr); +} +uint8_t InstructionR5900::GetR5900_n() const { + return RAB_INSTR_R5900_GET_n(&this->instr); +} +uint8_t InstructionR5900::GetR5900_l() const { + return RAB_INSTR_R5900_GET_l(&this->instr); +} +uint8_t InstructionR5900::GetR5900_m() const { + return RAB_INSTR_R5900_GET_m(&this->instr); +} + +uint8_t InstructionR5900::GetR5900_imm5() const { + return RAB_INSTR_R5900_GET_imm5(&this->instr); +} diff --git a/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionRsp.cpp b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionRsp.cpp new file mode 100644 index 00000000..891a0351 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/cplusplus/src/instructions/InstructionRsp.cpp @@ -0,0 +1,128 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/InstructionRsp.hpp" + +#include + +#include "instructions/RabbitizerInstructionRsp.h" + +using namespace rabbitizer; + +InstructionRsp::InstructionRsp(uint32_t word, uint32_t vram) : InstructionBase() { + RabbitizerInstructionRsp_init(&this->instr, word, vram); + RabbitizerInstructionRsp_processUniqueId(&this->instr); +} + +InstructionRsp::~InstructionRsp() { + RabbitizerInstructionRsp_destroy(&this->instr); +} + +Registers::Rsp::Gpr InstructionRsp::GetRsp_rs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rs' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rs(&this->instr)); +} +Registers::Rsp::Gpr InstructionRsp::GetRsp_rt() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rt' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rt(&this->instr)); +} +Registers::Rsp::Gpr InstructionRsp::GetRsp_rd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_rd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'rd' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_rd(&this->instr)); +} + +Registers::Rsp::Cop0 InstructionRsp::GetRsp_cop0d() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_cop0d)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop0d' operand."); + } +#endif + + return static_cast(RAB_INSTR_GET_cop0d(&this->instr)); +} + +Registers::Rsp::Cop2 InstructionRsp::GetRsp_cop2t() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_cop2t)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop2t' operand."); + } +#endif + + return static_cast(RAB_INSTR_RSP_GET_cop2t(&this->instr)); +} + +Registers::Rsp::Cop2Control InstructionRsp::GetRsp_cop2cd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_cop2t)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'cop2cd' operand."); + } +#endif + + return static_cast(RAB_INSTR_RSP_GET_cop2cd(&this->instr)); +} + +Registers::Rsp::Vector InstructionRsp::GetRsp_vs() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_vs)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vs' operand."); + } +#endif + + return static_cast(RAB_INSTR_RSP_GET_vs(&this->instr)); +} +Registers::Rsp::Vector InstructionRsp::GetRsp_vt() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_vt)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vt' operand."); + } +#endif + + return static_cast(RAB_INSTR_RSP_GET_vt(&this->instr)); +} +Registers::Rsp::Vector InstructionRsp::GetRsp_vd() const { +#ifdef RAB_SANITY_CHECKS + if (!hasOperandAlias(OperandType::rsp_vd)) { + // TODO: make a rabbitizer exception class + throw std::runtime_error("Instruction '" + getOpcodeName() + "' does not have 'vd' operand."); + } +#endif + + return static_cast(RAB_INSTR_RSP_GET_vd(&this->instr)); +} + +uint8_t InstructionRsp::GetRsp_elementhigh() const { + return RAB_INSTR_RSP_GET_elementhigh(&this->instr); +} +uint8_t InstructionRsp::GetRsp_elementlow() const { + return RAB_INSTR_RSP_GET_elementlow(&this->instr); +} + +uint8_t InstructionRsp::GetRsp_index() const { + return RAB_INSTR_RSP_GET_index(&this->instr); +} +uint8_t InstructionRsp::GetRsp_de() const { + return RAB_INSTR_RSP_GET_de(&this->instr); +} diff --git a/tools/ido5.3_recomp/rabbitizer/include/analysis/RabbitizerLoPairingInfo.h b/tools/ido5.3_recomp/rabbitizer/include/analysis/RabbitizerLoPairingInfo.h new file mode 100644 index 00000000..b6a70ed2 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/analysis/RabbitizerLoPairingInfo.h @@ -0,0 +1,34 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_LO_PAIRING_INFO_H +#define RABBITIZER_LO_PAIRING_INFO_H +#pragma once + +#include + +#include "common/Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct RabbitizerLoPairingInfo { + int instrOffset; + int64_t value; // could be either an unsigned 32 bits number or a signed one, so use 64 bits to ensure it fits + bool shouldProcess; + bool isGpRel; + bool isGpGot; +} RabbitizerLoPairingInfo; + + +NON_NULL(1) +void RabbitizerLoPairingInfo_Init(RabbitizerLoPairingInfo *self); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/analysis/RabbitizerRegistersTracker.h b/tools/ido5.3_recomp/rabbitizer/include/analysis/RabbitizerRegistersTracker.h new file mode 100644 index 00000000..36ccbd56 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/analysis/RabbitizerRegistersTracker.h @@ -0,0 +1,65 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_REGISTERS_TRACKER_H +#define RABBITIZER_REGISTERS_TRACKER_H +#pragma once + +#include "common/Utils.h" +#include "RabbitizerTrackedRegisterState.h" +#include "RabbitizerLoPairingInfo.h" +#include "instructions/RabbitizerInstruction.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define RAB_REGISTERS_COUNT 32 + + +typedef struct RabbitizerRegistersTracker { + RabbitizerTrackedRegisterState registers[RAB_REGISTERS_COUNT]; +} RabbitizerRegistersTracker; + +// TODO: Change functions which use parameters as a way to return values into actual structs returned by the functions + +NON_NULL(1) +void RabbitizerRegistersTracker_init(RabbitizerRegistersTracker *self, const RabbitizerRegistersTracker *other); +NON_NULL(1) +void RabbitizerRegistersTracker_destroy(RabbitizerRegistersTracker *self); + +NON_NULL(1, 2) +bool RabbitizerRegistersTracker_moveRegisters(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr); +NON_NULL(1, 2) +void RabbitizerRegistersTracker_overwriteRegisters(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset); +NON_NULL(1, 2, 3) +void RabbitizerRegistersTracker_unsetRegistersAfterFuncCall(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, const RabbitizerInstruction *prevInstr); +NON_NULL(1, 2, 4) +bool RabbitizerRegistersTracker_getAddressIfCanSetType(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, uint32_t *dstAddress); +NON_NULL(1, 2, 3, 4) +bool RabbitizerRegistersTracker_getJrInfo(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int *dstOffset, uint32_t *dstAddress); + +// prevInstr can be NULL +NON_NULL(1, 2) +void RabbitizerRegistersTracker_processLui(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, const RabbitizerInstruction *prevInstr); +NON_NULL(1, 2) +void RabbitizerRegistersTracker_processGpLoad(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset); +NON_NULL(1, 2, 3) +bool RabbitizerRegistersTracker_getLuiOffsetForConstant(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int *dstOffset); +NON_NULL(1, 2) +void RabbitizerRegistersTracker_processConstant(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, uint32_t value, int offset); +NON_NULL(1, 2, 4, 5) // deprecated +bool RabbitizerRegistersTracker_getLuiOffsetForLo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, int *dstOffset, bool *dstIsGp); +NODISCARD NON_NULL(1, 2) +RabbitizerLoPairingInfo RabbitizerRegistersTracker_preprocessLoAndGetInfo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset); +NON_NULL(1, 2) +void RabbitizerRegistersTracker_processLo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, uint32_t value, int offset); +NON_NULL(1, 2) +bool RabbitizerRegistersTracker_hasLoButNoHi(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/analysis/RabbitizerTrackedRegisterState.h b/tools/ido5.3_recomp/rabbitizer/include/analysis/RabbitizerTrackedRegisterState.h new file mode 100644 index 00000000..daf4b2da --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/analysis/RabbitizerTrackedRegisterState.h @@ -0,0 +1,80 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_TRACKED_REGISTER_STATE_H +#define RABBITIZER_TRACKED_REGISTER_STATE_H +#pragma once + +#include +#include +#include + +#include "common/Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef struct RabbitizerTrackedRegisterState { + int registerNum; + + bool hasLuiValue; + int luiOffset; // The offset of last lui which set a value to this register + bool luiSetOnBranchLikely; + + bool hasGpGot; + int gpGotOffset; + + bool hasLoValue; + int loOffset; + bool dereferenced; + int dereferenceOffset; + + uint32_t value; +} RabbitizerTrackedRegisterState; + + +NON_NULL(1) +void RabbitizerTrackedRegisterState_init(RabbitizerTrackedRegisterState *self, int registerNum); +NON_NULL(1) +void RabbitizerTrackedRegisterState_destroy(RabbitizerTrackedRegisterState *self); + +NON_NULL(1) +void RabbitizerTrackedRegisterState_clear(RabbitizerTrackedRegisterState *self); +NON_NULL(1) +void RabbitizerTrackedRegisterState_clearHi(RabbitizerTrackedRegisterState *self); +NON_NULL(1) +void RabbitizerTrackedRegisterState_clearGp(RabbitizerTrackedRegisterState *self); +NON_NULL(1) +void RabbitizerTrackedRegisterState_clearLo(RabbitizerTrackedRegisterState *self); + +NON_NULL(1, 2) +void RabbitizerTrackedRegisterState_copyState(RabbitizerTrackedRegisterState *self, const RabbitizerTrackedRegisterState *other); + +NON_NULL(1) +void RabbitizerTrackedRegisterState_setHi(RabbitizerTrackedRegisterState *self, uint32_t value, int offset); +NON_NULL(1) +void RabbitizerTrackedRegisterState_setGpLoad(RabbitizerTrackedRegisterState *self, uint32_t value, int offset); +NON_NULL(1) +void RabbitizerTrackedRegisterState_setLo(RabbitizerTrackedRegisterState *self, uint32_t value, int offset); + +NON_NULL(1) +void RabbitizerTrackedRegisterState_deref(RabbitizerTrackedRegisterState *self, int offset); +NON_NULL(1, 2) +void RabbitizerTrackedRegisterState_dereferenceState(RabbitizerTrackedRegisterState *self, const RabbitizerTrackedRegisterState *other, int offset); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerTrackedRegisterState_hasAnyValue(const RabbitizerTrackedRegisterState *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerTrackedRegisterState_wasSetInCurrentOffset(const RabbitizerTrackedRegisterState *self, int offset); + +NON_NULL(1) +void RabbitizerTrackedRegisterState_fprint(const RabbitizerTrackedRegisterState *self, FILE* outFile); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/common/Abi.inc b/tools/ido5.3_recomp/rabbitizer/include/common/Abi.inc new file mode 100644 index 00000000..fa01d92f --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/common/Abi.inc @@ -0,0 +1,7 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_ABI(NUMERIC), +RABBITIZER_DEF_ABI(O32), +RABBITIZER_DEF_ABI(N32), +RABBITIZER_DEF_ABI(N64), diff --git a/tools/ido5.3_recomp/rabbitizer/include/common/RabbitizerConfig.h b/tools/ido5.3_recomp/rabbitizer/include/common/RabbitizerConfig.h new file mode 100644 index 00000000..8b9def78 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/common/RabbitizerConfig.h @@ -0,0 +1,83 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_CONFIG_H +#define RABBITIZER_CONFIG_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RABBITIZER_DEF_ABI(name) RABBITIZER_ABI_##name + +typedef enum RabbitizerAbi { + #include "Abi.inc" + + RABBITIZER_DEF_ABI(MAX), +} RabbitizerAbi; + +#undef RABBITIZER_DEF_ABI + +RabbitizerAbi RabbitizerAbi_fromStr(const char *name); + + +typedef struct RabbitizerConfig_RegisterNames { + bool namedRegisters; // Enables using named registers. This option takes precedence over the other named register options + RabbitizerAbi gprAbiNames; // The ABI names to be used for general purpose registers when disassembling the main processor's instructions + RabbitizerAbi fprAbiNames; // The ABI names to be used for floating point registers when disassembling the floating point (coprocessor 1) instructions + bool userFpcCsr; // Use FpcCsr as register $31 for the FP control/status register + bool vr4300Cop0NamedRegisters; // Use named registers for VR4300's coprocessor 0 registers + bool vr4300RspCop0NamedRegisters; // Use named registers for VR4300's RSP's coprocessor 0 registers +} RabbitizerConfig_RegisterNames; + +typedef struct RabbitizerConfig_PseudoInstr { + bool enablePseudos; // Produce pseudo instructions (like `move` or `b`) whenever those may match the desired original instruction + bool pseudoBeqz; + bool pseudoBnez; + bool pseudoB; + bool pseudoMove; + bool pseudoNot; + bool pseudoNegu; + bool pseudoBal; +} RabbitizerConfig_PseudoInstr; + +typedef struct RabbitizerConfig_ToolchainTweaks { + bool treatJAsUnconditionalBranch; //! @deprecated + /** + * Enables a few fixes for SN64's assembler related to div/divu instructions + * + * - SN64's assembler doesn't like assembling `div $0, a, b` with .set noat active. + * Removing the $0 fixes this issue (but not for handwritten asm) + * + * - SN64's assembler expands div to have break if dividing by zero + * However, the break it generates is different than the one it generates with `break N` + * So we replace break instrutions for SN64 with the exact word that the assembler generates when expanding div + */ + bool sn64DivFix; +} RabbitizerConfig_ToolchainTweaks; + +typedef struct RabbitizerConfig_Misc { + int opcodeLJust; // The minimal number of characters to left-align the opcode name + bool unknownInstrComment; // Generate a pseudo-disassembly comment when disassembling non implemented instructions + bool omit0XOnSmallImm; + bool upperCaseImm; +} RabbitizerConfig_Misc; + +typedef struct RabbitizerConfig { + RabbitizerConfig_RegisterNames regNames; + RabbitizerConfig_PseudoInstr pseudos; + RabbitizerConfig_ToolchainTweaks toolchainTweaks; + RabbitizerConfig_Misc misc; +} RabbitizerConfig; + +extern RabbitizerConfig RabbitizerConfig_Cfg; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/common/RabbitizerVersion.h b/tools/ido5.3_recomp/rabbitizer/include/common/RabbitizerVersion.h new file mode 100644 index 00000000..d59e716f --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/common/RabbitizerVersion.h @@ -0,0 +1,33 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_VERSION_H +#define RABBITIZER_VERSION_H + +#include "Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +// Header version +#define RAB_VERSION_MAJOR 1 +#define RAB_VERSION_MINOR 2 +#define RAB_VERSION_PATCH 3 + +#define RAB_VERSION_STR RAB_STRINGIFY(RAB_VERSION_MAJOR) "." RAB_STRINGIFY(RAB_VERSION_MINOR) "." RAB_STRINGIFY(RAB_VERSION_PATCH) + +// Compiled library version +extern const int RabVersion_Major; +extern const int RabVersion_Minor; +extern const int RabVersion_Patch; + +extern const char RabVersion_Str[]; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/common/Utils.h b/tools/ido5.3_recomp/rabbitizer/include/common/Utils.h new file mode 100644 index 00000000..6255a04a --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/common/Utils.h @@ -0,0 +1,116 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_UTILS_H +#define RABBITIZER_UTILS_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#if !defined(__GNUC__) && !defined(__clang__) +#define __attribute__(x) +#endif + +#if __STDC_VERSION__ >= 202000L +#define CONST [[gnu::const]] +#define DEPRECATED(reason) [[deprecated (reason)]] +#define FALLTHROUGH [[fallthrough]] +#define NODISCARD [[nodiscard]] +#define NORETURN [[noreturn]] +#define NON_NULL(...) [[gnu::nonnull (__VA_ARGS__)]] +#define PURE [[gnu::pure]] +#define RETURNS_NON_NULL [[gnu::returns_nonnull]] +#define UNUSED [[maybe_unused]] +#else +#define CONST __attribute__((const)) +#define DEPRECATED(reason) __attribute__((deprecated (reason))) +#define FALLTHROUGH __attribute__((fallthrough)) +#define NODISCARD __attribute__((warn_unused_result)) +#define NORETURN _Noreturn +#define NON_NULL(...) __attribute__((nonnull (__VA_ARGS__))) +#define PURE __attribute__((pure)) +#define RETURNS_NON_NULL __attribute__((returns_nonnull)) +#define UNUSED __attribute__((unused)) +#endif + + +#if defined(_MSC_VER) +# define UNREACHABLE __assume(0) +#elif defined(__GNUC__) || defined(__clang__) +# define UNREACHABLE __builtin_unreachable() +#else +# define UNREACHABLE +#endif + + +#define ARRAY_COUNT(arr) (sizeof(arr) / sizeof((arr)[0])) + +#define RAB_STRINGIFY(x) #x + +#define MASK(v, w) ((v) & ((1 << (w)) - 1)) + +/* + * the SHIFT macros take a value, a shift amount, and a width. + * + * For the left shift, the lower bits of the value are masked, + * then shifted left. + * + * For the right shift, the value is shifted right, then the lower bits + * are masked. + * + * (NOTE: SHIFTL(v, 0, 32) won't work, just use an assignment) + * + */ +#define SHIFTL(v, s, w) (MASK((v), (w)) << (s)) +#define SHIFTR(v, s, w) (MASK((v) >> (s), (w))) + +#define BITREPACK(fullword, v, s, w) ((SHIFTR((fullword), (s)+(w), 32-((s)+(w))) << ((s)+(w))) | SHIFTL((v), (s), (w)) | MASK((fullword), (s))) +#define BITREPACK_RIGHT(fullword, v, s, w) (SHIFTL((v), (s), (w)) | MASK((fullword), (s))) + + +#define RABUTILS_BUFFER_ADVANCE(buffer, totalSize, expression) \ + do { \ + size_t __tempSize = expression; \ + (buffer) += __tempSize; \ + (totalSize) += __tempSize; \ + } while (0) + +#define RABUTILS_BUFFER_WRITE_CHAR(buffer, totalSize, character) \ + do { \ + *(buffer) = (character); \ + RABUTILS_BUFFER_ADVANCE(buffer, totalSize, 1); \ + } while (0) + +#define RABUTILS_BUFFER_SPRINTF(buffer, totalSize, format, ...) \ + do { \ + int _len = sprintf(buffer, format, __VA_ARGS__); \ + assert(_len > 0); \ + RABUTILS_BUFFER_ADVANCE(buffer, totalSize, _len); \ + } while (0) + +#define RABUTILS_BUFFER_CPY(buffer, totalSize, string) \ + do { \ + size_t _tempSize = strlen(string); \ + memcpy(buffer, string, _tempSize); \ + RABUTILS_BUFFER_ADVANCE(buffer, totalSize, _tempSize); \ + } while (0) + + +CONST NODISCARD +int32_t RabbitizerUtils_From2Complement(uint32_t number, int bits); +NON_NULL(1) +size_t RabbitizerUtils_CharFill(char *dst, int count, char fillchar); +NON_NULL(1, 3) +size_t RabbitizerUtils_escapeString(char *dst, size_t dstSize, const char *src, size_t srcSize); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/InstrCategory.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/InstrCategory.inc new file mode 100644 index 00000000..9a6d85c1 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/InstrCategory.inc @@ -0,0 +1,6 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_INSTR_CATEGORY(CPU), +RABBITIZER_DEF_INSTR_CATEGORY(RSP), // N64 +RABBITIZER_DEF_INSTR_CATEGORY(R5900), // PS2's Emotion Engine diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstrDescriptor.h b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstrDescriptor.h new file mode 100644 index 00000000..e92f7971 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstrDescriptor.h @@ -0,0 +1,141 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRDESCRIPTOR_H +#define RABBITIZER_INSTRDESCRIPTOR_H +#pragma once + +#include + +#include "common/Utils.h" +#include "RabbitizerOperandType.h" +#include "RabbitizerInstrId.h" +#include "RabbitizerInstrSuffix.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef enum RabbitizerInstrType { + RABBITIZER_INSTR_TYPE_UNKNOWN, + RABBITIZER_INSTR_TYPE_J, + RABBITIZER_INSTR_TYPE_I, + RABBITIZER_INSTR_TYPE_R, + RABBITIZER_INSTR_TYPE_REGIMM, + RABBITIZER_INSTR_TYPE_MAX, +} RabbitizerInstrType; + +typedef enum RabbitizerArchitectureVersion { + RABBITIZER_ARCHVERSION_INVALID=-1, + RABBITIZER_ARCHVERSION_UNKNOWN, + RABBITIZER_ARCHVERSION_MIPS_I, + RABBITIZER_ARCHVERSION_MIPS_II, + RABBITIZER_ARCHVERSION_MIPS_III, + RABBITIZER_ARCHVERSION_MIPS_IV +} RabbitizerArchitectureVersion; + +typedef struct RabbitizerInstrDescriptor { + RabbitizerOperandType operands[4]; + RabbitizerInstrType instrType; + + RabbitizerInstrSuffix instrSuffix; + + bool isBranch; + bool isBranchLikely; + bool isJump; + bool isTrap; + + bool isFloat; + bool isDouble; + + bool isUnsigned; + + bool modifiesRt; + bool modifiesRd; + + bool notEmitedByCompilers; + + bool canBeHi; + bool canBeLo; + bool doesLink; // "and link" family of instructions + bool doesDereference; + bool doesLoad; // loads data from memory + bool doesStore; // stores data to memory + bool maybeIsMove; + + bool isPseudo; + + RabbitizerArchitectureVersion architectureVersion; // TODO: consider removing +} RabbitizerInstrDescriptor; + +// TODO: less redundant name +extern const RabbitizerInstrDescriptor RabbitizerInstrDescriptor_Descriptors[]; + + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isUnknownType(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isJType(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isIType(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isRType(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isRegimmType(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +RabbitizerInstrSuffix RabbitizerInstrDescriptor_instrSuffix(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isBranch(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isBranchLikely(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isJump(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isTrap(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isFloat(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isDouble(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isUnsigned(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_modifiesRt(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_modifiesRd(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_notEmitedByCompilers(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_canBeHi(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_canBeLo(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_doesLink(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_doesDereference(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_doesLoad(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_doesStore(const RabbitizerInstrDescriptor *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_maybeIsMove(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstrDescriptor_isPseudo(const RabbitizerInstrDescriptor *self); + +NODISCARD NON_NULL(1) PURE +RabbitizerArchitectureVersion RabbitizerInstrDescriptor_getArchitectureVersion(const RabbitizerInstrDescriptor *self); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstrId.h b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstrId.h new file mode 100644 index 00000000..c3838211 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstrId.h @@ -0,0 +1,46 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRID_H +#define RABBITIZER_INSTRID_H +#pragma once + +#include "common/Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) \ + RABBITIZER_INSTR_ID_##prefix##_##name, + +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) \ + RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + +typedef enum RabbitizerInstrId { + #include "instructions/instr_id/RabbitizerInstrId_cpu.inc" + + #include "instructions/instr_id/RabbitizerInstrId_rsp.inc" + + #include "instructions/instr_id/RabbitizerInstrId_r5900.inc" + + RABBITIZER_INSTR_ID_ALL_MAX = RABBITIZER_DEF_INSTR_ID(r5900, , MAX, ) +} RabbitizerInstrId; + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + + +extern const char *RabbitizerInstrId_Names[]; + + +CONST NODISCARD RETURNS_NON_NULL +const char *RabbitizerInstrId_getOpcodeName(RabbitizerInstrId uniqueId); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstrSuffix.h b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstrSuffix.h new file mode 100644 index 00000000..7c59e334 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstrSuffix.h @@ -0,0 +1,36 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRSUFFIX_H +#define RABBITIZER_INSTRSUFFIX_H +#pragma once + +#include "common/Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +struct RabbitizerInstruction; + +typedef enum RabbitizerInstrSuffix { + RABINSTRSUFFIX_NONE, + + RABINSTRSUFFIX_R5900_xyzw, + + RABINSTRSUFFIX_MAX +} RabbitizerInstrSuffix; + +CONST NODISCARD NON_NULL(1) +size_t RabbitizerInstrSuffix_getSizeForBuffer(const struct RabbitizerInstruction *self, RabbitizerInstrSuffix instrSuffix); + +CONST NODISCARD NON_NULL(1, 2) +size_t RabbitizerInstrSuffix_processSuffix(const struct RabbitizerInstruction *self, char *dst, RabbitizerInstrSuffix instrSuffix); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstruction.h b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstruction.h new file mode 100644 index 00000000..17e3bab9 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstruction.h @@ -0,0 +1,263 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_H +#define RABBITIZER_INSTRUCTION_H +#pragma once + +#include +#include +#include + +#include "common/Utils.h" + +#include "RabbitizerInstrId.h" +#include "RabbitizerInstrDescriptor.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RABBITIZER_DEF_INSTR_CATEGORY(name) RABBITIZER_INSTRCAT_##name + +typedef enum RabbitizerInstrCategory { + #include "instructions/InstrCategory.inc" + + RABBITIZER_DEF_INSTR_CATEGORY(MAX), +} RabbitizerInstrCategory; + +#undef RABBITIZER_DEF_INSTR_CATEGORY + + +typedef struct RabbitizerInstruction { + uint32_t word; + uint32_t _mandatorybits; + + RabbitizerInstrId uniqueId; + const RabbitizerInstrDescriptor *descriptor; + + uint32_t vram; + bool _handwrittenCategory; + bool inHandwrittenFunction; + RabbitizerInstrCategory category; +} RabbitizerInstruction; + + +#define RAB_INSTR_GET_opcode(self) (SHIFTR((self)->word, 26, 6)) +#define RAB_INSTR_GET_rs(self) (SHIFTR((self)->word, 21, 5)) +#define RAB_INSTR_GET_rt(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_GET_rd(self) (SHIFTR((self)->word, 11, 5)) +#define RAB_INSTR_GET_sa(self) (SHIFTR((self)->word, 6, 5)) +#define RAB_INSTR_GET_function(self) (SHIFTR((self)->word, 0, 6)) + +#define RAB_INSTR_GET_cop0d(self) (SHIFTR((self)->word, 11, 5)) + +#define RAB_INSTR_GET_instr_index(self) (SHIFTR((self)->word, 0, 26)) +#define RAB_INSTR_GET_immediate(self) (SHIFTR((self)->word, 0, 16)) + +#define RAB_INSTR_GET_fs(self) (SHIFTR((self)->word, 11, 5)) +#define RAB_INSTR_GET_ft(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_GET_fd(self) (SHIFTR((self)->word, 6, 5)) +#define RAB_INSTR_GET_cop1cs(self) (SHIFTR((self)->word, 11, 5)) + +#define RAB_INSTR_GET_op(self) (SHIFTR((self)->word, 16, 5)) + +#define RAB_INSTR_GET_code(self) (SHIFTR((self)->word, 6, 20)) +#define RAB_INSTR_GET_code_upper(self) (SHIFTR((self)->word, 16, 10)) +#define RAB_INSTR_GET_code_lower(self) (SHIFTR((self)->word, 6, 10)) + +#define RAB_INSTR_GET_copraw(self) (SHIFTR((self)->word, 0, 25)) + +#define RAB_INSTR_GET_fmt(self) (SHIFTR((self)->word, 21, 5)) +#define RAB_INSTR_GET_fc(self) (SHIFTR((self)->word, 4, 2)) +#define RAB_INSTR_GET_cond(self) (SHIFTR((self)->word, 0, 4)) + +#define RAB_INSTR_GET_cop2t(self) (SHIFTR((self)->word, 16, 5)) + +#define RAB_INSTR_GET_tf(self) (SHIFTR((self)->word, 16, 1)) +#define RAB_INSTR_GET_nd(self) (SHIFTR((self)->word, 17, 1)) +#define RAB_INSTR_GET_bc_fmt(self) (SHIFTR((self)->word, 16, 5)) + +#define RAB_INSTR_GET_stype(self) (SHIFTR((self)->word, 6, 5)) + + +#define RAB_INSTR_PACK_opcode(word, value) (BITREPACK_RIGHT((word), (value), 26, 6)) +#define RAB_INSTR_PACK_rs(word, value) (BITREPACK((word), (value), 21, 5)) +#define RAB_INSTR_PACK_rt(word, value) (BITREPACK((word), (value), 16, 5)) +#define RAB_INSTR_PACK_rd(word, value) (BITREPACK((word), (value), 11, 5)) +#define RAB_INSTR_PACK_sa(word, value) (BITREPACK((word), (value), 6, 5)) +#define RAB_INSTR_PACK_function(word, value) (BITREPACK((word), (value), 0, 6)) + +#define RAB_INSTR_PACK_cop0d(word, value) (BITREPACK((word), (value), 11, 5)) + +#define RAB_INSTR_PACK_instr_index(word, value) (BITREPACK((word), (value), 0, 26)) +#define RAB_INSTR_PACK_immediate(word, value) (BITREPACK((word), (value), 0, 16)) + +#define RAB_INSTR_PACK_code(word, value) (BITREPACK((word), (value), 6, 20)) +#define RAB_INSTR_PACK_code_upper(word, value) (BITREPACK((word), (value), 16, 10)) +#define RAB_INSTR_PACK_code_lower(word, value) (BITREPACK((word), (value), 6, 10)) + +#define RAB_INSTR_PACK_copraw(word, value) (BITREPACK((word), (value), 0, 25)) + +#define RAB_INSTR_PACK_fmt(word, value) (BITREPACK((word), (value), 21, 5)) +#define RAB_INSTR_PACK_fc(word, value) (BITREPACK((word), (value), 4, 2)) +#define RAB_INSTR_PACK_cond(word, value) (BITREPACK((word), (value), 0, 4)) + +#define RAB_INSTR_PACK_fs(word, value) (BITREPACK((word), (value), 11, 5)) +#define RAB_INSTR_PACK_ft(word, value) (BITREPACK((word), (value), 16, 5)) +#define RAB_INSTR_PACK_fd(word, value) (BITREPACK((word), (value), 6, 5)) +#define RAB_INSTR_PACK_cop1cs(word, value) (BITREPACK((word), (value), 11, 5)) + +#define RAB_INSTR_PACK_op(word, value) (BITREPACK((word), (value), 16, 5)) + +#define RAB_INSTR_PACK_cop2t(word, value) (BITREPACK((word), (value), 16, 5)) + +#define RAB_INSTR_PACK_tf(word, value) (BITREPACK((word), (value), 16, 1)) +#define RAB_INSTR_PACK_nd(word, value) (BITREPACK((word), (value), 17, 1)) +#define RAB_INSTR_PACK_bc_fmt(word, value) (BITREPACK((word), (value), 16, 5)) + +#define RAB_INSTR_PACK_stype(word, value) (BITREPACK((word), (value), 6, 5)) + + +NON_NULL(1) +void RabbitizerInstruction_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram); +NON_NULL(1) +void RabbitizerInstruction_destroy(RabbitizerInstruction* self); + + +/* Process uniqueId */ + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Normal(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Special(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Regimm(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor0_BC0(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor0_Tlb(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor0(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1_BC1(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuS(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuD(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuW(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuL(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor1(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstruction_processUniqueId_Coprocessor2(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstruction_processUniqueId(RabbitizerInstruction *self); + +/* Process uniqueId */ + + +/* General getters */ + +NODISCARD NON_NULL(1) PURE +uint32_t RabbitizerInstruction_getRaw(const RabbitizerInstruction *self); + +NODISCARD NON_NULL(1) PURE +uint32_t RabbitizerInstruction_getImmediate(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +int32_t RabbitizerInstruction_getProcessedImmediate(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +uint32_t RabbitizerInstruction_getInstrIndex(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +uint32_t RabbitizerInstruction_getInstrIndexAsVram(const RabbitizerInstruction *self); + +NODISCARD NON_NULL(1) PURE +int32_t RabbitizerInstruction_getBranchOffset(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +int32_t RabbitizerInstruction_getGenericBranchOffset(const RabbitizerInstruction *self, uint32_t currentVram); + +/* General getters */ + +NON_NULL(1) +void RabbitizerInstruction_blankOut(RabbitizerInstruction *self); + + +/* Instruction examination */ + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isImplemented(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isLikelyHandwritten(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isNop(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isUnconditionalBranch(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isJrRa(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isJrNotRa(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_hasDelaySlot(const RabbitizerInstruction *self); + +NODISCARD NON_NULL(1) PURE +const char *RabbitizerInstruction_mapInstrToType(const RabbitizerInstruction *self); + +NODISCARD NON_NULL(1, 2) PURE +bool RabbitizerInstruction_sameOpcode(const RabbitizerInstruction *self, const RabbitizerInstruction *other); +NODISCARD NON_NULL(1, 2) PURE +bool RabbitizerInstruction_sameOpcodeButDifferentArguments(const RabbitizerInstruction *self, const RabbitizerInstruction *other); + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_hasOperand(const RabbitizerInstruction *self, RabbitizerOperandType operand); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_hasOperandAlias(const RabbitizerInstruction *self, RabbitizerOperandType operand); + +NODISCARD NON_NULL(1) PURE +uint32_t RabbitizerInstruction_getValidBits(const RabbitizerInstruction *self); +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_isValid(const RabbitizerInstruction *self); + +/* Instruction examination */ + + +/* Disassembly */ + +NODISCARD NON_NULL(1) PURE +bool RabbitizerInstruction_mustDisasmAsData(const RabbitizerInstruction *self); + +NODISCARD NON_NULL(1) PURE +size_t RabbitizerInstruction_getSizeForBufferOperandsDisasm(const RabbitizerInstruction *self, size_t immOverrideLength); +NON_NULL(1, 2) +size_t RabbitizerInstruction_disassembleOperands(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength); + +NODISCARD NON_NULL(1) PURE +size_t RabbitizerInstruction_getSizeForBufferInstrDisasm(const RabbitizerInstruction *self, size_t immOverrideLength, int extraLJust); +NON_NULL(1, 2) +size_t RabbitizerInstruction_disassembleInstruction(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength, int extraLJust); + +NODISCARD NON_NULL(1) PURE +size_t RabbitizerInstruction_getSizeForBufferDataDisasm(const RabbitizerInstruction *self, int extraLJust); +NON_NULL(1, 2) +size_t RabbitizerInstruction_disassembleAsData(const RabbitizerInstruction *self, char *dst, int extraLJust); + +NODISCARD NON_NULL(1) PURE +size_t RabbitizerInstruction_getSizeForBuffer(const RabbitizerInstruction *self, size_t immOverrideLength, int extraLJust); +NON_NULL(1, 2) +size_t RabbitizerInstruction_disassemble(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength, int extraLJust); + +/* Disassembly */ + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstructionR5900.h b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstructionR5900.h new file mode 100644 index 00000000..af5e809e --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstructionR5900.h @@ -0,0 +1,87 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_R5900_H +#define RABBITIZER_INSTRUCTION_R5900_H +#pragma once + +#include "RabbitizerInstruction.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RAB_INSTR_R5900_GET_mmi_function(self) (SHIFTR((self)->word, 6, 5)) +#define RAB_INSTR_R5900_GET_fhi_flo(self) ((SHIFTR((self)->word, 6, 5) << 2) | SHIFTR((self)->word, 0, 2)) + +#define RAB_INSTR_R5900_GET_vfs(self) (SHIFTR((self)->word, 11, 5)) +#define RAB_INSTR_R5900_GET_vft(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_R5900_GET_vfd(self) (SHIFTR((self)->word, 6, 5)) + +#define RAB_INSTR_R5900_GET_xyzw_x(self) (SHIFTR((self)->word, 24, 1)) +#define RAB_INSTR_R5900_GET_xyzw_y(self) (SHIFTR((self)->word, 23, 1)) +#define RAB_INSTR_R5900_GET_xyzw_z(self) (SHIFTR((self)->word, 22, 1)) +#define RAB_INSTR_R5900_GET_xyzw_w(self) (SHIFTR((self)->word, 21, 1)) +#define RAB_INSTR_R5900_GET_n(self) (SHIFTR((self)->word, 0, 2)) +#define RAB_INSTR_R5900_GET_l(self) (SHIFTR((self)->word, 21, 2)) +#define RAB_INSTR_R5900_GET_m(self) (SHIFTR((self)->word, 23, 2)) + +#define RAB_INSTR_R5900_GET_vis(self) (SHIFTR((self)->word, 11, 5)) +#define RAB_INSTR_R5900_GET_vit(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_R5900_GET_vid(self) (SHIFTR((self)->word, 6, 5)) + +#define RAB_INSTR_R5900_GET_imm5(self) (SHIFTR((self)->word, 6, 5)) + + +#define RAB_INSTR_R5900_PACK_mmi_function(word, value) (BITREPACK((word), (value), 6, 5)) +#define RAB_INSTR_R5900_PACK_fhi_flo(word, value) (BITREPACK(BITREPACK((word), (value) >> 2, 6, 5), (value), 0, 2)) + +#define RAB_INSTR_R5900_PACK_vfs(word, value) (BITREPACK((word), (value), 11, 5)) +#define RAB_INSTR_R5900_PACK_vft(word, value) (BITREPACK((word), (value), 16, 5)) +#define RAB_INSTR_R5900_PACK_vfd(word, value) (BITREPACK((word), (value), 6, 5)) + +#define RAB_INSTR_R5900_PACK_xyzw_x(word, value) (BITREPACK((word), (value), 24, 1)) +#define RAB_INSTR_R5900_PACK_xyzw_y(word, value) (BITREPACK((word), (value), 23, 1)) +#define RAB_INSTR_R5900_PACK_xyzw_z(word, value) (BITREPACK((word), (value), 22, 1)) +#define RAB_INSTR_R5900_PACK_xyzw_w(word, value) (BITREPACK((word), (value), 21, 1)) +#define RAB_INSTR_R5900_PACK_n(word, value) (BITREPACK((word), (value), 0, 2)) +#define RAB_INSTR_R5900_PACK_l(word, value) (BITREPACK((word), (value), 21, 2)) +#define RAB_INSTR_R5900_PACK_m(word, value) (BITREPACK((word), (value), 23, 2)) + +#define RAB_INSTR_R5900_PACK_vis(word, value) (BITREPACK((word), (value), 11, 5)) +#define RAB_INSTR_R5900_PACK_vit(word, value) (BITREPACK((word), (value), 16, 5)) +#define RAB_INSTR_R5900_PACK_vid(word, value) (BITREPACK((word), (value), 6, 5)) + +#define RAB_INSTR_R5900_PACK_imm5(word, value) (BITREPACK((word), (value), 6, 5)) + + +NON_NULL(1) +void RabbitizerInstructionR5900_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram); +NON_NULL(1) +void RabbitizerInstructionR5900_destroy(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Normal(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Special(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Regimm(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Coprocessor0(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Coprocessor1(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_Coprocessor2(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId_MMI(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstructionR5900_processUniqueId(RabbitizerInstruction *self); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstructionRsp.h b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstructionRsp.h new file mode 100644 index 00000000..b2fb40d5 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerInstructionRsp.h @@ -0,0 +1,70 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_INSTRUCTION_RSP_H +#define RABBITIZER_INSTRUCTION_RSP_H +#pragma once + +#include "RabbitizerInstruction.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RAB_INSTR_RSP_GET_cop2t(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_RSP_GET_cop2cd(self) (SHIFTR((self)->word, 11, 5)) + +#define RAB_INSTR_RSP_GET_vs(self) (SHIFTR((self)->word, 11, 5)) +#define RAB_INSTR_RSP_GET_vt(self) (SHIFTR((self)->word, 16, 5)) +#define RAB_INSTR_RSP_GET_vd(self) (SHIFTR((self)->word, 6, 5)) + +#define RAB_INSTR_RSP_GET_elementhigh(self) (SHIFTR((self)->word, 21, 4)) +#define RAB_INSTR_RSP_GET_elementlow(self) (SHIFTR((self)->word, 7, 4)) +#define RAB_INSTR_RSP_GET_OFFSET_VECTOR_RAW(self) (SHIFTR((self)->word, 0, 7)) + +#define RAB_INSTR_RSP_GET_index(self) (SHIFTR((self)->word, 7, 4)) +#define RAB_INSTR_RSP_GET_de(self) (SHIFTR((self)->word, 11, 5)) + + +#define RAB_INSTR_RSP_PACK_cop2t(word, value) (BITREPACK((word), value, 16, 5)) +#define RAB_INSTR_RSP_PACK_cop2cd(word, value) (BITREPACK((word), value, 11, 5)) + +#define RAB_INSTR_RSP_PACK_vs(word, value) (BITREPACK((word), value, 11, 5)) +#define RAB_INSTR_RSP_PACK_vt(word, value) (BITREPACK((word), value, 16, 5)) +#define RAB_INSTR_RSP_PACK_vd(word, value) (BITREPACK((word), value, 6, 5)) + +#define RAB_INSTR_RSP_PACK_elementhigh(word, value) (BITREPACK((word), value, 21, 4)) +#define RAB_INSTR_RSP_PACK_elementlow(word, value) (BITREPACK((word), value, 7, 4)) + +#define RAB_INSTR_RSP_PACK_index(word, value) (BITREPACK((word), value, 7, 4)) +#define RAB_INSTR_RSP_PACK_offset(word, value) (BITREPACK((word), value, 0, 7)) +#define RAB_INSTR_RSP_PACK_de(word, value) (BITREPACK((word), value, 11, 5)) + + +NON_NULL(1) +void RabbitizerInstructionRsp_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram); +NON_NULL(1) +void RabbitizerInstructionRsp_destroy(RabbitizerInstruction *self); + + +NON_NULL(1) +void RabbitizerInstructionRsp_processUniqueId_Normal(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionRsp_processUniqueId_Special(RabbitizerInstruction *self); +NON_NULL(1) +void RabbitizerInstructionRsp_processUniqueId_Regimm(RabbitizerInstruction *self); + +NON_NULL(1) +void RabbitizerInstructionRsp_processUniqueId(RabbitizerInstruction *self); + + +NODISCARD NON_NULL(1) PURE +uint16_t RabbitizerInstructionRsp_GetOffsetVector(const RabbitizerInstruction *self); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerOperandType.h b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerOperandType.h new file mode 100644 index 00000000..58c26594 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerOperandType.h @@ -0,0 +1,33 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_OPERAND_TYPE_H +#define RABBITIZER_OPERAND_TYPE_H +#pragma once + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RAB_DEF_OPERAND(prefix, operand) \ + RAB_OPERAND_##prefix##_##operand, + +typedef enum RabbitizerOperandType { + RAB_DEF_OPERAND(ALL, INVALID) + +#include "operands/RabbitizerOperandType_cpu.inc" +#include "operands/RabbitizerOperandType_rsp.inc" +#include "operands/RabbitizerOperandType_r5900.inc" + + RAB_DEF_OPERAND(ALL, MAX) +} RabbitizerOperandType; + +#undef RAB_DEF_OPERAND + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerRegister.h b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerRegister.h new file mode 100644 index 00000000..1c6421cd --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/RabbitizerRegister.h @@ -0,0 +1,143 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_REGISTER_H +#define RABBITIZER_REGISTER_H +#pragma once + +#include + +#include "common/Utils.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +#define RABBITIZER_DEF_REG(prefix, name, numeric) \ + RABBITIZER_REG_##prefix##_##name + +#define RABBITIZER_DEF_REG_NODOLLAR(prefix, name, numeric) \ + RABBITIZER_REG_##prefix##_##name + + +typedef enum RabbitizerRegister_GprO32 { + #include "instructions/registers/RabbitizerRegister_GprO32.inc" +} RabbitizerRegister_GprO32; + +typedef enum RabbitizerRegister_GprN32 { + #include "instructions/registers/RabbitizerRegister_GprN32.inc" +} RabbitizerRegister_GprN32; + +typedef enum RabbitizerRegister_Cop0 { + #include "instructions/registers/RabbitizerRegister_Cop0.inc" +} RabbitizerRegister_Cop0; + +// Float registers +typedef enum RabbitizerRegister_Cop1O32 { + #include "instructions/registers/RabbitizerRegister_Cop1O32.inc" +} RabbitizerRegister_Cop1O32; + +typedef enum RabbitizerRegister_Cop1N32 { + #include "instructions/registers/RabbitizerRegister_Cop1N32.inc" +} RabbitizerRegister_Cop1N32; + +typedef enum RabbitizerRegister_Cop1N64 { + #include "instructions/registers/RabbitizerRegister_Cop1N64.inc" +} RabbitizerRegister_Cop1N64; + +typedef enum RabbitizerRegister_Cop1Control { + #include "instructions/registers/RabbitizerRegister_Cop1Control.inc" +} RabbitizerRegister_Cop1Control; + +typedef enum RabbitizerRegister_Cop2 { + #include "instructions/registers/RabbitizerRegister_Cop2.inc" +} RabbitizerRegister_Cop2; + + +/* RSP */ + +typedef enum RabbitizerRegister_RspGpr { + #include "instructions/registers/RabbitizerRegister_RspGpr.inc" +} RabbitizerRegister_RspGpr; + +typedef enum RabbitizerRegister_RspCop0 { + #include "instructions/registers/RabbitizerRegister_RspCop0.inc" +} RabbitizerRegister_RspCop0; + +typedef enum RabbitizerRegister_RspCop2 { + #include "instructions/registers/RabbitizerRegister_RspCop2.inc" +} RabbitizerRegister_RspCop2; + +typedef enum RabbitizerRegister_RspCop2Control { + #include "instructions/registers/RabbitizerRegister_RspCop2Control.inc" +} RabbitizerRegister_RspCop2Control; + +typedef enum RabbitizerRegister_RspVector { + #include "instructions/registers/RabbitizerRegister_RspVector.inc" +} RabbitizerRegister_RspVector; + +/* RSP */ + +/* R5900 */ + +typedef enum RabbitizerRegister_R5900VF { + #include "instructions/registers/RabbitizerRegister_R5900VF.inc" +} RabbitizerRegister_R5900VF; + +typedef enum RabbitizerRegister_R5900VI { + #include "instructions/registers/RabbitizerRegister_R5900VI.inc" +} RabbitizerRegister_R5900VI; + +/* R5900 */ + + +#undef RABBITIZER_DEF_REG +#undef RABBITIZER_DEF_REG_NODOLLAR + + +extern const char *RabbitizerRegister_GprO32_Names[][2]; +extern const char *RabbitizerRegister_GprN32_Names[][2]; +extern const char *RabbitizerRegister_Cop0_Names[][2]; +extern const char *RabbitizerRegister_Cop1O32_Names[][2]; +extern const char *RabbitizerRegister_Cop1N32_Names[][2]; +extern const char *RabbitizerRegister_Cop1N64_Names[][2]; +extern const char *RabbitizerRegister_Cop2_Names[][2]; +extern const char *RabbitizerRegister_RspGpr_Names[][2]; +extern const char *RabbitizerRegister_RspCop0_Names[][2]; +extern const char *RabbitizerRegister_RspVector_Names[][2]; + + +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameGpr(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameCop0(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameCop1(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameCop1Control(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameCop2(uint8_t regValue); + +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameRspGpr(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameRspCop0(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameRspCop2(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameRspCop2Control(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameRspVector(uint8_t regValue); + +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameR5900VF(uint8_t regValue); +NODISCARD PURE RETURNS_NON_NULL +const char *RabbitizerRegister_getNameR5900VI(uint8_t regValue); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_cpu.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_cpu.inc new file mode 100644 index 00000000..dbbb9818 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_cpu.inc @@ -0,0 +1,40 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_INSTR_ID(cpu, , INVALID, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate}) + +#include "instructions/instr_id/cpu/cpu_normal.inc" +#include "instructions/instr_id/cpu/cpu_special.inc" +#include "instructions/instr_id/cpu/cpu_regimm.inc" +#include "instructions/instr_id/cpu/cpu_cop0.inc" +#include "instructions/instr_id/cpu/cpu_cop0_bc0.inc" +#include "instructions/instr_id/cpu/cpu_cop0_tlb.inc" +#include "instructions/instr_id/cpu/cpu_cop1.inc" +#include "instructions/instr_id/cpu/cpu_cop1_bc1.inc" +#include "instructions/instr_id/cpu/cpu_cop1_fpu_s.inc" +#include "instructions/instr_id/cpu/cpu_cop1_fpu_d.inc" +#include "instructions/instr_id/cpu/cpu_cop1_fpu_w.inc" +#include "instructions/instr_id/cpu/cpu_cop1_fpu_l.inc" + +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_00, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_01, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_02, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_03, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_04, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_05, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_06, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_07, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_08, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_09, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_10, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_11, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_12, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_13, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_14, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_15, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_16, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_17, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_18, .operands={0}) +RABBITIZER_DEF_INSTR_ID(cpu, , USERDEF_19, .operands={0}) + +RABBITIZER_DEF_INSTR_ID(cpu, , MAX, .operands={0}) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_r5900.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_r5900.inc new file mode 100644 index 00000000..10f11126 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_r5900.inc @@ -0,0 +1,46 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_INSTR_ID(r5900, , INVALID, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .architectureVersion=-1) + +#include "instructions/instr_id/r5900/r5900_normal.inc" +#include "instructions/instr_id/r5900/r5900_special.inc" +#include "instructions/instr_id/r5900/r5900_regimm.inc" + +#include "instructions/instr_id/r5900/r5900_mmi.inc" +#include "instructions/instr_id/r5900/r5900_mmi_0.inc" +#include "instructions/instr_id/r5900/r5900_mmi_1.inc" +#include "instructions/instr_id/r5900/r5900_mmi_2.inc" +#include "instructions/instr_id/r5900/r5900_mmi_3.inc" + +#include "instructions/instr_id/r5900/r5900_cop0_tlb.inc" + +#include "instructions/instr_id/r5900/r5900_cop1_fpu_s.inc" + +#include "instructions/instr_id/r5900/r5900_cop2.inc" +#include "instructions/instr_id/r5900/r5900_cop2_bc2.inc" +#include "instructions/instr_id/r5900/r5900_cop2_special1.inc" +#include "instructions/instr_id/r5900/r5900_cop2_special2.inc" + +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_00, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_01, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_02, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_03, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_04, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_05, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_06, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_07, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_08, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_09, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_10, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_11, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_12, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_13, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_14, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_15, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_16, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_17, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_18, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, , USERDEF_19, .operands={0}) + +RABBITIZER_DEF_INSTR_ID(r5900, , MAX, .operands={0}) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_rsp.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_rsp.inc new file mode 100644 index 00000000..2fcaa854 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/RabbitizerInstrId_rsp.inc @@ -0,0 +1,41 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// RSP instructions +RABBITIZER_DEF_INSTR_ID(rsp, , INVALID, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) + +#include "instructions/instr_id/rsp/rsp_cop2.inc" +#include "instructions/instr_id/rsp/rsp_cop2_vu.inc" + +#include "instructions/instr_id/rsp/rsp_normal_lwc2.inc" +#include "instructions/instr_id/rsp/rsp_normal_swc2.inc" + +// CPU instructions but with rsp registers + +#include "instructions/instr_id/rsp/rsp_normal.inc" +#include "instructions/instr_id/rsp/rsp_special.inc" +#include "instructions/instr_id/rsp/rsp_regimm.inc" +#include "instructions/instr_id/rsp/rsp_cop0.inc" + +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_00, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_01, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_02, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_03, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_04, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_05, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_06, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_07, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_08, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_09, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_10, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_11, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_12, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_13, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_14, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_15, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_16, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_17, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_18, .operands={0}) +RABBITIZER_DEF_INSTR_ID(rsp, , USERDEF_19, .operands={0}) + +RABBITIZER_DEF_INSTR_ID(rsp, , MAX, .operands={0}) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0.inc new file mode 100644 index 00000000..0aa3df49 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0.inc @@ -0,0 +1,10 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rt, cop0d +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, mfc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true, .notEmitedByCompilers=true) // Move word From CP0 +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, dmfc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true) // Doubleword Move From CP0 +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, cfc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true) // Move control word From CP0 +RABBITIZER_DEF_INSTR_ID(cpu, 0x04, mtc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Move word to CP0 +RABBITIZER_DEF_INSTR_ID(cpu, 0x05, dmtc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN) // Doubleword Move To CP0 +RABBITIZER_DEF_INSTR_ID(cpu, 0x06, ctc0, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN) // Move control word To CP0 diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_bc0.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_bc0.inc new file mode 100644 index 00000000..0165039b --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_bc0.inc @@ -0,0 +1,8 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, bc0f, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true) // Branch on FP False +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, bc0t, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true) // Branch on FP True +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, bc0fl, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true) // Branch on FP False Likely +RABBITIZER_DEF_INSTR_ID(cpu, 0x03, bc0tl, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true) // Branch on FP True Likely diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_tlb.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_tlb.inc new file mode 100644 index 00000000..65b808e3 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop0_tlb.inc @@ -0,0 +1,12 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, tlbr, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Read Indexed TLB Entry +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, tlbwi, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Write Indexed TLB Entry + +RABBITIZER_DEF_INSTR_ID(cpu, 0x06, tlbwr, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN) // Write Random TLB Entry + +RABBITIZER_DEF_INSTR_ID(cpu, 0x08, tlbp, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Probe TLB for Matching Entry + +RABBITIZER_DEF_INSTR_ID(cpu, 0x18, eret, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Return from Exception diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1.inc new file mode 100644 index 00000000..e6defc81 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1.inc @@ -0,0 +1,12 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rt, fs +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, mfc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true) // Move Word From Floating-Point +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, dmfc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true) // Doubleword Move From Floating-Point +RABBITIZER_DEF_INSTR_ID(cpu, 0x04, mtc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Move Word to Floating-Point +RABBITIZER_DEF_INSTR_ID(cpu, 0x05, dmtc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Doubleword Move To Floating-Point + +// OP rt, cop1cs +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, cfc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop1cs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .modifiesRt=true) // Move Control Word from Floating-Point +RABBITIZER_DEF_INSTR_ID(cpu, 0x06, ctc1, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_cop1cs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Move Control Word to Floating-Point diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_bc1.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_bc1.inc new file mode 100644 index 00000000..e339cd4d --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_bc1.inc @@ -0,0 +1,8 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, bc1f, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true) +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, bc1t, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true) +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, bc1fl, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true) +RABBITIZER_DEF_INSTR_ID(cpu, 0x03, bc1tl, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isBranch=true, .isBranchLikely=true) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_d.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_d.inc new file mode 100644 index 00000000..a512496c --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_d.inc @@ -0,0 +1,48 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP fd, fs, ft +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x00, add_d, add.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Add +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x01, sub_d, sub.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Sub +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x02, mul_d, mul.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Multiply +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x03, div_d, div.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Divide + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x04, sqrt_d, sqrt.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Square Root +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x05, abs_d, abs.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Absolute Value +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x06, mov_d, mov.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Move +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x07, neg_d, neg.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Negate + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x08, round_l_d, round.l.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Round to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x09, trunc_l_d, trunc.l.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Truncate to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0A, ceil_l_d, ceil.l.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Ceiling Convert to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0B, floor_l_d, floor.l.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Floor Convert to Long Fixed-Point + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0C, round_w_d, round.w.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Round to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0D, trunc_w_d, trunc.w.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Truncate to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0E, ceil_w_d, ceil.w.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Ceiling Convert to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0F, floor_w_d, floor.w.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Floor Convert to Word Fixed-Point + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x20, cvt_s_d, cvt.s.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x24, cvt_w_d, cvt.w.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x25, cvt_l_d, cvt.l.d, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) + +// OP fs, ft +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x30, c_f_d, c.f.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x31, c_un_d, c.un.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x32, c_eq_d, c.eq.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x33, c_ueq_d, c.ueq.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x34, c_olt_d, c.olt.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x35, c_ult_d, c.ult.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x36, c_ole_d, c.ole.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x37, c_ule_d, c.ule.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x38, c_df_d, c.df.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x39, c_ngle_d, c.ngle.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3A, c_deq_d, c.deq.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3B, c_ngl_d, c.ngl.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3C, c_lt_d, c.lt.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3D, c_nge_d, c.nge.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3E, c_le_d, c.le.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3F, c_ngt_d, c.ngt.d, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_l.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_l.inc new file mode 100644 index 00000000..48eea054 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_l.inc @@ -0,0 +1,6 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x20, cvt_s_l, cvt.s.l, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x21, cvt_d_l, cvt.d.l, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_s.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_s.inc new file mode 100644 index 00000000..4271429b --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_s.inc @@ -0,0 +1,48 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP fd, fs, ft +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x00, add_s, add.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Add +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x01, sub_s, sub.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Sub +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x02, mul_s, mul.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Multiply +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x03, div_s, div.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Divide + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x04, sqrt_s, sqrt.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Square Root +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x05, abs_s, abs.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Absolute Value +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x06, mov_s, mov.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Move +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x07, neg_s, neg.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Negate + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x08, round_l_s, round.l.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Round to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x09, trunc_l_s, trunc.l.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Truncate to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0A, ceil_l_s, ceil.l.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Ceiling Convert to Long Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0B, floor_l_s, floor.l.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Floor Convert to Long Fixed-Point + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0C, round_w_s, round.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Round to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0D, trunc_w_s, trunc.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Truncate to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0E, ceil_w_s, ceil.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Ceiling Convert to Word Fixed-Point +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x0F, floor_w_s, floor.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) // Floating-Point Floor Convert to Word Fixed-Point + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x21, cvt_d_s, cvt.d.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x24, cvt_w_s, cvt.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x25, cvt_l_s, cvt.l.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) + +// OP fs, ft +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x30, c_f_s, c.f.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x31, c_un_s, c.un.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x32, c_eq_s, c.eq.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x33, c_ueq_s, c.ueq.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x34, c_olt_s, c.olt.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x35, c_ult_s, c.ult.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x36, c_ole_s, c.ole.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x37, c_ule_s, c.ule.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x38, c_sf_s, c.sf.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x39, c_ngle_s, c.ngle.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3A, c_seq_s, c.seq.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3B, c_ngl_s, c.ngl.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3C, c_lt_s, c.lt.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3D, c_nge_s, c.nge.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3E, c_le_s, c.le.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x3F, c_ngt_s, c.ngt.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_w.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_w.inc new file mode 100644 index 00000000..9d07b6dc --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_cop1_fpu_w.inc @@ -0,0 +1,6 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP fd, fs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x20, cvt_s_w, cvt.s.w, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, 0x21, cvt_d_w, cvt.d.w, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .isFloat=true, .isDouble=true) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_normal.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_normal.inc new file mode 100644 index 00000000..cc93fa5c --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_normal.inc @@ -0,0 +1,83 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP LABEL +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, j, .operands={RAB_OPERAND_cpu_label}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Jump +RABBITIZER_DEF_INSTR_ID(cpu, 0x03, jal, .operands={RAB_OPERAND_cpu_label}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Jump And Link + +// OP rs, rt, IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x04, beq, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on EQual +RABBITIZER_DEF_INSTR_ID(cpu, 0x05, bne, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Not Equal +RABBITIZER_DEF_INSTR_ID(cpu, 0x14, beql, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on EQual Likely +RABBITIZER_DEF_INSTR_ID(cpu, 0x15, bnel, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Not Equal Likely + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x06, blez, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Less than or Equal to Zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x16, blezl, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Less than or Equal to Zero Likely +RABBITIZER_DEF_INSTR_ID(cpu, 0x07, bgtz, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Greater Than Zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x17, bgtzl, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Greater Than Zero Likely + +// OP rt, rs, IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x08, addi, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .notEmitedByCompilers=true, .canBeLo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Add Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x09, addiu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Add Immediate Unsigned Word +RABBITIZER_DEF_INSTR_ID(cpu, 0x0A, slti, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Set on Less Than Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x0B, sltiu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Set on Less Than Immediate Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x0C, andi, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // And Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x0D, ori, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .canBeLo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Or Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x0E, xori, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // eXclusive OR Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x18, daddi, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword add Immediate +RABBITIZER_DEF_INSTR_ID(cpu, 0x19, daddiu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword add Immediate Unsigned + +// OP rt, IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x0F, lui, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .canBeHi=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Upper Immediate + +// OP rt, IMM(base) +RABBITIZER_DEF_INSTR_ID(cpu, 0x1A, ldl, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Load Doubleword Left +RABBITIZER_DEF_INSTR_ID(cpu, 0x1B, ldr, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Load Doubleword Right +RABBITIZER_DEF_INSTR_ID(cpu, 0x20, lb, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Byte +RABBITIZER_DEF_INSTR_ID(cpu, 0x21, lh, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Halfword +RABBITIZER_DEF_INSTR_ID(cpu, 0x22, lwl, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word Left +RABBITIZER_DEF_INSTR_ID(cpu, 0x23, lw, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word +RABBITIZER_DEF_INSTR_ID(cpu, 0x24, lbu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Byte Insigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x25, lhu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Halfword Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x26, lwr, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word Right +RABBITIZER_DEF_INSTR_ID(cpu, 0x27, lwu, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Load Word Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x28, sb, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Byte +RABBITIZER_DEF_INSTR_ID(cpu, 0x29, sh, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Halfword +RABBITIZER_DEF_INSTR_ID(cpu, 0x2A, swl, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word Left +RABBITIZER_DEF_INSTR_ID(cpu, 0x2B, sw, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word +RABBITIZER_DEF_INSTR_ID(cpu, 0x2C, sdl, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Store Doubleword Left +RABBITIZER_DEF_INSTR_ID(cpu, 0x2D, sdr, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Store Doubleword Right +RABBITIZER_DEF_INSTR_ID(cpu, 0x2E, swr, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word Right +RABBITIZER_DEF_INSTR_ID(cpu, 0x30, ll, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Load Linked word +RABBITIZER_DEF_INSTR_ID(cpu, 0x33, pref, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_IV) // Prefetch +RABBITIZER_DEF_INSTR_ID(cpu, 0x34, lld, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Load Linked Doubleword +RABBITIZER_DEF_INSTR_ID(cpu, 0x37, ld, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Load Doubleword +RABBITIZER_DEF_INSTR_ID(cpu, 0x38, sc, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Store Conditional word +RABBITIZER_DEF_INSTR_ID(cpu, 0x3C, scd, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Store Conditional Doubleword +RABBITIZER_DEF_INSTR_ID(cpu, 0x3F, sd, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Store Doubleword + +// OP op, IMM(base) +RABBITIZER_DEF_INSTR_ID(cpu, 0x2F, cache, .operands={RAB_OPERAND_cpu_op, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .notEmitedByCompilers=true) // Cache + +// OP ft, IMM(base) +RABBITIZER_DEF_INSTR_ID(cpu, 0x31, lwc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word to Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x35, ldc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .isDouble=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Load Doubleword to Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x39, swc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word from Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x3D, sdc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .isDouble=true, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Store Doubleword from Coprocessor z + +// OP cop2t, IMM(base) +RABBITIZER_DEF_INSTR_ID(cpu, 0x32, lwc2, .operands={RAB_OPERAND_cpu_cop2t, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word to Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x36, ldc2, .operands={RAB_OPERAND_cpu_cop2t, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Load Doubleword to Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x3A, swc2, .operands={RAB_OPERAND_cpu_cop2t, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word from Coprocessor z +RABBITIZER_DEF_INSTR_ID(cpu, 0x3E, sdc2, .operands={RAB_OPERAND_cpu_cop2t, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Store Doubleword from Coprocessor z + + +// Pseudo-Instruction Unique IDs + +// OP IMM +RABBITIZER_DEF_INSTR_ID(cpu, -0x03, b, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isPseudo=true) // Branch (unconditional) + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(cpu, -0x04, beqz, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isPseudo=true) // Branch on EQual Zero +RABBITIZER_DEF_INSTR_ID(cpu, -0x05, bnez, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_I, .isBranch=true, .isPseudo=true) // Branch on Not Equal Zero diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_regimm.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_regimm.inc new file mode 100644 index 00000000..4d47123b --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_regimm.inc @@ -0,0 +1,25 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, bltz, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Less Than Zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x01, bgez, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Greater than or Equal to Zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, bltzl, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Less Than Zero Likely +RABBITIZER_DEF_INSTR_ID(cpu, 0x03, bgezl, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Greater than or Equal to Zero Likely + +RABBITIZER_DEF_INSTR_ID(cpu, 0x08, tgei, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) +RABBITIZER_DEF_INSTR_ID(cpu, 0x09, tgeiu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) +RABBITIZER_DEF_INSTR_ID(cpu, 0x0A, tlti, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) +RABBITIZER_DEF_INSTR_ID(cpu, 0x0B, tltiu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) +RABBITIZER_DEF_INSTR_ID(cpu, 0x0C, teqi, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) +RABBITIZER_DEF_INSTR_ID(cpu, 0x0E, tnei, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) + +RABBITIZER_DEF_INSTR_ID(cpu, 0x10, bltzal, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Less Than Zero and Link +RABBITIZER_DEF_INSTR_ID(cpu, 0x11, bgezal, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch on Greater Than or Equal to Zero and Link +RABBITIZER_DEF_INSTR_ID(cpu, 0x12, bltzall, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Less Than Zero and Link Likely +RABBITIZER_DEF_INSTR_ID(cpu, 0x13, bgezall, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .isBranchLikely=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Branch on Greater Than or Equal to Zero and Link Likely + + +// Pseudo-Instruction Unique IDs + +RABBITIZER_DEF_INSTR_ID(cpu, -0x11, bal, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true, .isPseudo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch and Link diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_special.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_special.inc new file mode 100644 index 00000000..1adb970a --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/cpu/cpu_special.inc @@ -0,0 +1,93 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rd, rt, sa +RABBITIZER_DEF_INSTR_ID(cpu, 0x00, sll, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Left Logical +RABBITIZER_DEF_INSTR_ID(cpu, 0x02, srl, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Right Logical +RABBITIZER_DEF_INSTR_ID(cpu, 0x03, sra, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Right Arithmetic +RABBITIZER_DEF_INSTR_ID(cpu, 0x38, dsll, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Left Logical +RABBITIZER_DEF_INSTR_ID(cpu, 0x3A, dsrl, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Logical +RABBITIZER_DEF_INSTR_ID(cpu, 0x3B, dsra, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Arithmetic +RABBITIZER_DEF_INSTR_ID(cpu, 0x3C, dsll32, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Left Logical plus 32 +RABBITIZER_DEF_INSTR_ID(cpu, 0x3E, dsrl32, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Logical plus 32 +RABBITIZER_DEF_INSTR_ID(cpu, 0x3F, dsra32, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Arithmetic plus 32 + +// OP rd, rt, rs +RABBITIZER_DEF_INSTR_ID(cpu, 0x14, dsllv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Left Logical Variable +RABBITIZER_DEF_INSTR_ID(cpu, 0x16, dsrlv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Logical Variable +RABBITIZER_DEF_INSTR_ID(cpu, 0x17, dsrav, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Shift Right Arithmetic Variable +RABBITIZER_DEF_INSTR_ID(cpu, 0x04, sllv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Left Logical Variable +RABBITIZER_DEF_INSTR_ID(cpu, 0x06, srlv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Right Logical Variable +RABBITIZER_DEF_INSTR_ID(cpu, 0x07, srav, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Shift word Right Arithmetic Variable + +// OP rs +RABBITIZER_DEF_INSTR_ID(cpu, 0x11, mthi, .operands={RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Move To HI register +RABBITIZER_DEF_INSTR_ID(cpu, 0x13, mtlo, .operands={RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Move To LO register +RABBITIZER_DEF_INSTR_ID(cpu, 0x08, jr, .operands={RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Jump Register +RABBITIZER_DEF_INSTR_ID(cpu, 0x09, jalr, .operands={RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Jump And Link Register + +// OP rd, rs +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, -0x09, jalr_rd, jalr, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true, .doesLink=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Jump And Link Register // Special case for rd != 31 + +// OP rd +RABBITIZER_DEF_INSTR_ID(cpu, 0x10, mfhi, .operands={RAB_OPERAND_cpu_rd}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Move From HI register +RABBITIZER_DEF_INSTR_ID(cpu, 0x12, mflo, .operands={RAB_OPERAND_cpu_rd}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Move From LO register + +// OP rd, rs, rt +RABBITIZER_DEF_INSTR_ID(cpu, 0x0A, movz, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_IV) // MOVe conditional on Zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x0B, movn, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_IV) // MOVe conditional on Not zero +RABBITIZER_DEF_INSTR_ID(cpu, 0x1A, div, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // DIVide word +RABBITIZER_DEF_INSTR_ID(cpu, 0x1B, divu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // DIVide Unsigned word + +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, -0x1A, sn64_div, div, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // DIVide word +RABBITIZER_DEF_INSTR_ID_ALTNAME(cpu, -0x1B, sn64_divu, divu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // DIVide Unsigned word + +RABBITIZER_DEF_INSTR_ID(cpu, 0x1E, ddiv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword DIVide +RABBITIZER_DEF_INSTR_ID(cpu, 0x1F, ddivu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword DIVide Unsigned +// RABBITIZER_DEF_INSTR_ID(cpu, , ddiv, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) +// RABBITIZER_DEF_INSTR_ID(cpu, , ddivu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) +RABBITIZER_DEF_INSTR_ID(cpu, 0x20, add, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .notEmitedByCompilers=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // ADD word +RABBITIZER_DEF_INSTR_ID(cpu, 0x21, addu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .maybeIsMove=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // ADD Unsigned word +RABBITIZER_DEF_INSTR_ID(cpu, 0x22, sub, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Subtract word +RABBITIZER_DEF_INSTR_ID(cpu, 0x23, subu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // SUBtract Unsigned word +RABBITIZER_DEF_INSTR_ID(cpu, 0x24, and, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // AND +RABBITIZER_DEF_INSTR_ID(cpu, 0x25, or, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .maybeIsMove=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // OR +RABBITIZER_DEF_INSTR_ID(cpu, 0x26, xor, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // eXclusive OR +RABBITIZER_DEF_INSTR_ID(cpu, 0x27, nor, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Not OR +RABBITIZER_DEF_INSTR_ID(cpu, 0x2A, slt, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Set on Less Than +RABBITIZER_DEF_INSTR_ID(cpu, 0x2B, sltu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Set on Less Than Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x2C, dadd, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Add +RABBITIZER_DEF_INSTR_ID(cpu, 0x2D, daddu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .maybeIsMove=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword Add Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x2E, dsub, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword SUBtract +RABBITIZER_DEF_INSTR_ID(cpu, 0x2F, dsubu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword SUBtract Unsigned + +// OP code +RABBITIZER_DEF_INSTR_ID(cpu, 0x0C, syscall, .operands={RAB_OPERAND_cpu_code}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // SYStem CALL +RABBITIZER_DEF_INSTR_ID(cpu, 0x0D, break, .operands={RAB_OPERAND_cpu_code}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Break +RABBITIZER_DEF_INSTR_ID(cpu, 0x0F, sync, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Sync + +// OP rs, rt +RABBITIZER_DEF_INSTR_ID(cpu, 0x18, mult, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // MULTtiply word +RABBITIZER_DEF_INSTR_ID(cpu, 0x19, multu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // MULTtiply Unsigned word +RABBITIZER_DEF_INSTR_ID(cpu, 0x1C, dmult, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword MULTiply +RABBITIZER_DEF_INSTR_ID(cpu, 0x1D, dmultu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_III) // Doubleword MULTiply Unsigned + +RABBITIZER_DEF_INSTR_ID(cpu, 0x30, tge, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if Greater or Equal +RABBITIZER_DEF_INSTR_ID(cpu, 0x31, tgeu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if Greater or Equal Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x32, tlt, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if Less Than +RABBITIZER_DEF_INSTR_ID(cpu, 0x33, tltu, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if Less Than Unsigned +RABBITIZER_DEF_INSTR_ID(cpu, 0x34, teq, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if EQual +RABBITIZER_DEF_INSTR_ID(cpu, 0x36, tne, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_code_lower}, .instrType=RABBITIZER_INSTR_TYPE_R, .isTrap=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Trap if Not Equal + + +// Pseudo-Instruction Unique IDs + +// OP +RABBITIZER_DEF_INSTR_ID(cpu, -0x01, nop, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_R, .isPseudo=true) // No OPeration + +// OP rd, rs +RABBITIZER_DEF_INSTR_ID(cpu, -0x25, move, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .maybeIsMove=true, .isPseudo=true) // Move +RABBITIZER_DEF_INSTR_ID(cpu, -0x27, not, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .isPseudo=true) // Not + +// OP rd, rt +RABBITIZER_DEF_INSTR_ID(cpu, -0x23, negu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .isPseudo=true) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop0_tlb.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop0_tlb.inc new file mode 100644 index 00000000..5173361a --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop0_tlb.inc @@ -0,0 +1,23 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31--------26-25------21--------------------------------5--------0 + | = COP0 | TLB | | fmt | + ------6----------5----------------------------------------------- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 | --- | TLBR | TLBWI | --- | --- | --- | TLBWR | --- | +001 | TLBP | --- | --- | --- | --- | --- | --- | --- | +010 | --- | --- | --- | --- | --- | --- | --- | --- | +011 | ERET | --- | --- | --- | --- | --- | --- | --- | +100 | --- | --- | --- | --- | --- | --- | --- | --- | +101 | --- | --- | --- | --- | --- | --- | --- | --- | +110 | --- | --- | --- | --- | --- | --- | --- | --- | +111 | EI | DI | --- | --- | --- | --- | --- | --- | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// The other instructions are implemented using the main CPU table + +RABBITIZER_DEF_INSTR_ID(r5900, 0x38, ei, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x39, di, .operands={0}) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop1_fpu_s.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop1_fpu_s.inc new file mode 100644 index 00000000..730e7e91 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop1_fpu_s.inc @@ -0,0 +1,46 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31--------26-25------21 -------------------------------5--------0 + | = COP1 | = S | | function| + ------6----------5-----------------------------------------6----- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 | ADD.S | SUB.S | MUL.S | DIV.S | SQRT.S| ABS.S | MOV.S | NEG.S | +001 | --- | --- | --- | --- | --- | --- | --- | --- | +010 | --- | --- | --- | --- | --- | --- |RSQRT.S| --- | +011 | ADDA.S| SUBA.S| MULA.S| --- | MADD.S| MSUB.S|MADDA.S|MSUBA.S| +100 | --- | --- | --- | --- | CVT.W | --- | --- | --- | +101 | MAX.S | MIN.S | --- | --- | --- | --- | --- | --- | +110 | C.F | --- | C.EQ | --- | C.LT | --- | C.LE | --- | +111 | --- | --- | --- | --- | --- | --- | --- | --- | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// The other instructions are implemented using the main CPU table + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x04, c1__sqrt_s, c1, .operands={RAB_OPERAND_cpu_copraw}) + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x16, rsqrt_s, rsqrt.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point Reciprocal SQuare RooT + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x18, adda_s, adda.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point ADD to Accumulator +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x19, suba_s, suba.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point SUBtract to Accumulator +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x1A, mula_s, mula.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point MULtiply to Accumulator + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x1C, madd_s, madd.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point Multiply-ADD +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x1D, msub_s, msub.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point Multiply abd SUBtract +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x1E, madda_s, madda.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point Multiply-ADD Accumulator +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x1F, msuba_s, msuba.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point Multiply SUBtract from Accumulator + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x28, max_s, max.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point MAXimum +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x29, min_s, min.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) // floating point MINimum + +// Due to the R5900's FPU being non properly complaint the instruction cvt.w.s always behaves as trunc.w.s because is because EE can only do round-to-zero. +// Assemblers like GAS workaround this issue by decoding cvt.w.s as trunc.w.s, so we mimic that behaviour to allow assembling with GAS. +// Here's some reading about the binutils rationale: +// https://sourceware.org/legacy-ml/binutils/2012-11/msg00360.html +// https://sourceware.org/pipermail/binutils/2013-January/079863.html +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x24, trunc_w_s, trunc.w.s, .operands={RAB_OPERAND_cpu_fd, RAB_OPERAND_cpu_fs}, .isFloat=true) // Floating-Point Truncate to Word Fixed-Point + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x34, c_lt_s, c.lt.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, 0x36, c_le_s, c.le.s, .operands={RAB_OPERAND_cpu_fs, RAB_OPERAND_cpu_ft}, .isFloat=true) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2.inc new file mode 100644 index 00000000..fae81904 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2.inc @@ -0,0 +1,21 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31--------26-25------21 ----------------------------------------0 + | = COP2 | fmt | | + ------6----------5----------------------------------------------- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo + 00 | --- | QMFC2 | CFC2 | --- | --- | QMTC2 | CTC2 | --- | + 01 | *1 | --- | --- | --- | --- | --- | --- | --- | + 10 | *2 | *2 | *2 | *2 | *2 | *2 | *2 | *2 | + 11 | *2 | *2 | *2 | *2 | *2 | *2 | *2 | *2 | + hi |-------|-------|-------|-------|-------|-------|-------|-------| + *1 = BC instructions, see BC2 list *2 =see special1 table +*/ + +// TODO: properties +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, qmfc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_r5900_vfs}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, cfc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_r5900_vis}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x05, qmtc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_r5900_vfs}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x06, ctc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_r5900_vis}) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_bc2.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_bc2.inc new file mode 100644 index 00000000..734e0d4f --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_bc2.inc @@ -0,0 +1,21 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31--------26-25------21-20------16------------------------------0 + | = COP0 | BC2 | fmt | | + ------6----------5----------5------------------------------------ + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo + 00 | BC2F | BC2T | BC2FL | BC2TL | --- | --- | --- | --- | + 01 | --- | --- | --- | --- | --- | --- | --- | --- | + 10 | --- | --- | --- | --- | --- | --- | --- | --- | + 11 | --- | --- | --- | --- | --- | --- | --- | --- | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// TODO: operands and properties + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, bc2f, .operands={RAB_OPERAND_cpu_branch_target_label}, .isBranch=true) +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, bc2t, .operands={RAB_OPERAND_cpu_branch_target_label}, .isBranch=true) +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, bc2fl, .operands={RAB_OPERAND_cpu_branch_target_label}, .isBranch=true, .isBranchLikely=true) +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, bc2tl, .operands={RAB_OPERAND_cpu_branch_target_label}, .isBranch=true, .isBranchLikely=true) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special1.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special1.inc new file mode 100644 index 00000000..043c911f --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special1.inc @@ -0,0 +1,82 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26-25-----21-20-----------------------------5--------0 + | =COP2 | Special1 | |function| + ------6----------5------------------------------------------6---- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 |VADDx |VADDy |VADDz |VADDw |VSUBx |VSUBy |VSUBz |VSUBw | +001 |VMADDx |VMADDy |VMADDz |VMADDw |VMSUBx |VMSUBy |VMSUBz |VMSUBw | +010 |VMAXx |VMAXy |VMAXz |VMAXw |VMINIx |VMINIy |VMINIz |VMINIw | +011 |VMULx |VMULy |VMULz |VMULw |VMULq |VMAXi |VMULi |VMINIi | +100 |VADDq |VMADDq |VADDi |VMADDi |VSUBq |VMSUBq |VSUbi |VMSUBi | +101 |VADD |VMADD |VMUL |VMAX |VSUB |VMSUB |VOPMSUB|VMINI | +110 |VIADD |VISUB |VIADDI | --- |VIAND |VIOR | --- | --- | +111 |VCALLMS|VCALLMSR| --- | --- | *1 | *1 | *1 | *1 | + hi |-------|-------|-------|-------|-------|-------|-------|-------| + *1=see special2 table +*/ + +// TODO: properties + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, vaddx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, vaddy, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, vaddz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, vaddw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, vsubx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x05, vsuby, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x06, vsubz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x07, vsubw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x08, vmaddx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x09, vmaddy, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, vmaddz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0B, vmaddw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0C, vmsubx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0D, vmsuby, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0E, vmsubz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0F, vmsubw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract broadcast + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, vmaxx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, vmaxy, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, vmaxz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, vmaxw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x14, vminix, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x15, vminiy, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x16, vminiz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x17, vminiw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINimum broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, vmulx, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, vmuly, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, vmulz, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, vmulw, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x1C, vmulq, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x1D, vmaxi, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum I +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, vmuli, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply I +RABBITIZER_DEF_INSTR_ID(r5900, 0x1F, vminii, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINImum I + +RABBITIZER_DEF_INSTR_ID(r5900, 0x20, vaddq, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x21, vmaddq, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x22, vaddi, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD I +RABBITIZER_DEF_INSTR_ID(r5900, 0x23, vmaddi, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD I +RABBITIZER_DEF_INSTR_ID(r5900, 0x24, vsubq, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x25, vmsubq, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x26, vsubi, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract I +RABBITIZER_DEF_INSTR_ID(r5900, 0x27, vmsubi, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract I +RABBITIZER_DEF_INSTR_ID(r5900, 0x28, vadd, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // ADD +RABBITIZER_DEF_INSTR_ID(r5900, 0x29, vmadd, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-ADD +RABBITIZER_DEF_INSTR_ID(r5900, 0x2A, vmul, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MULtiply +RABBITIZER_DEF_INSTR_ID(r5900, 0x2B, vmax, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MAXimum +RABBITIZER_DEF_INSTR_ID(r5900, 0x2C, vsub, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // SUBtract +RABBITIZER_DEF_INSTR_ID(r5900, 0x2D, vmsub, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply-SUBtract +RABBITIZER_DEF_INSTR_ID(r5900, 0x2E, vopmsub, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Outer product post decrement +RABBITIZER_DEF_INSTR_ID(r5900, 0x2F, vmini, .operands={RAB_OPERAND_r5900_vfdxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // MINImum + +RABBITIZER_DEF_INSTR_ID(r5900, 0x30, viadd, .operands={RAB_OPERAND_r5900_vid, RAB_OPERAND_r5900_vis, RAB_OPERAND_r5900_vit}) // Integer ADD +RABBITIZER_DEF_INSTR_ID(r5900, 0x31, visub, .operands={RAB_OPERAND_r5900_vid, RAB_OPERAND_r5900_vis, RAB_OPERAND_r5900_vit}) // Integer SUBtract +RABBITIZER_DEF_INSTR_ID(r5900, 0x32, viaddi, .operands={RAB_OPERAND_r5900_vit, RAB_OPERAND_r5900_vis, RAB_OPERAND_r5900_immediate5}) // Integer ADD Immediate +RABBITIZER_DEF_INSTR_ID(r5900, 0x34, viand, .operands={RAB_OPERAND_r5900_vid, RAB_OPERAND_r5900_vis, RAB_OPERAND_r5900_vit}) // Integer AND +RABBITIZER_DEF_INSTR_ID(r5900, 0x35, vior, .operands={RAB_OPERAND_r5900_vid, RAB_OPERAND_r5900_vis, RAB_OPERAND_r5900_vit}) // Integer OR + +// TODO: operands and properties +RABBITIZER_DEF_INSTR_ID(r5900, 0x38, vcallms, .operands={0}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x39, vcallmsr, .operands={RAB_OPERAND_r5900_vis}) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special2.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special2.inc new file mode 100644 index 00000000..6558540f --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_cop2_special2.inc @@ -0,0 +1,125 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26-25-----21-20------------------11-10------6-5-2-1--0 + | =COP2 | Special2 | | fhi |1111|flo| + ------6----------5----------------------------------------------- +Note: opcode is flo | (fhi * 4). + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +0000 |VADDAx |VADDAy |VADDAz |VADDAw |VSUBAx |VSUBAy |VSUBAz |VSUBAw | +0001 |VMADDAx|VMADDAy|VMADDAz|VMADDAw|VMSUBAx|VMSUBAy|VMSUBAz|VMSUBAw| +0010 |VITOF0 |VITOF4 |VITOF12|VITOF15|VFTOI0 |VFTOI4 |VFTOI12|VFTOI15| +0011 |VMULAx |VMULAy |VMULAz |VMULAw |VMULAq |VABS |VMULAi |VCLIPw | +0100 |VADDAq |VMADDAq|VADDAi |VMADDAi|VSUBAq |VMSUBAq|VSUBAi |VMSUBAi| +0101 |VADDA |VMADDA |VMULA | --- |VSUBA |VMSUBA |VOPMULA|VNOP | +0110 |VMOVE |VMR32 | --- | --- |VLQI |VSQI |VLQD |VSQD | +0111 |VDIV |VSQRT |VRSQRT |VWAITQ |VMTIR |VMFIR |VILWR |VISWR | +1000 |VRNEXT |VRGET |VRINIT |VRXOR | --- | --- | --- | --- | +1001 | --- | --- | --- | --- | --- | --- | --- | --- | +1010 | --- | --- | --- | --- | --- | --- | --- | --- | +1011 | --- | --- | --- | --- | --- | --- | --- | --- | +1100 | --- | --- | --- | --- | --- | --- | --- | --- | +1101 | --- | --- | --- | --- | --- | --- | --- | --- | +1110 | --- | --- | --- | --- | --- | --- | --- | --- | +1111 | --- | --- | --- | --- | --- | --- | --- | --- | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// TODO: operands and properties + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, vaddax, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, vadday, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, vaddaz, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, vaddaw, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, vsubax, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x05, vsubay, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x06, vsubaz, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x07, vsubaw, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x08, vmaddax, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) // Multiply and add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x09, vmadday, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) // Multiply and add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, vmaddaz, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) // Multiply and add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0B, vmaddaw, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) // Multiply and add accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0C, vmsubax, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0D, vmsubay, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0E, vmsubaz, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast +RABBITIZER_DEF_INSTR_ID(r5900, 0x0F, vmsubaw, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator broadcast + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, vitof0, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Integer to floating point +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, vitof4, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Integer to floating point +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, vitof12, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Integer to floating point +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, vitof15, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Integer to floating point +RABBITIZER_DEF_INSTR_ID(r5900, 0x14, vftoi0, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Floating to integer +RABBITIZER_DEF_INSTR_ID(r5900, 0x15, vftoi4, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Floating to integer +RABBITIZER_DEF_INSTR_ID(r5900, 0x16, vftoi12, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Floating to integer +RABBITIZER_DEF_INSTR_ID(r5900, 0x17, vftoi15, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Floating to integer + +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, vmulax, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, vmulay, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, vmulaz, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, vmulaw, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) +// TODO +RABBITIZER_DEF_INSTR_ID(r5900, 0x1C, vmulaq, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1D, vabs, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Absolute + +// TODO +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, vmulai, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1F, vclipw, .operands={RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftn}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Clip + +RABBITIZER_DEF_INSTR_ID(r5900, 0x20, vaddaq, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x21, vmaddaq, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and add accumulator Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x22, vaddai, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator I +RABBITIZER_DEF_INSTR_ID(r5900, 0x23, vmaddai, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and add accumulator I +RABBITIZER_DEF_INSTR_ID(r5900, 0x24, vsubaq, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Subtract accumulator Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x25, vmsubaq, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_Q}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and Subtract accumulator Q +RABBITIZER_DEF_INSTR_ID(r5900, 0x26, vsubai, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Subtract accumulator I +RABBITIZER_DEF_INSTR_ID(r5900, 0x27, vmsubai, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_I}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and Subtract accumulator I +RABBITIZER_DEF_INSTR_ID(r5900, 0x28, vadda, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Add accumulator +RABBITIZER_DEF_INSTR_ID(r5900, 0x29, vmadda, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and add accumulator + +// TODO +RABBITIZER_DEF_INSTR_ID(r5900, 0x2A, vmula, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x2C, vsuba, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) +RABBITIZER_DEF_INSTR_ID(r5900, 0x2D, vmsuba, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Multiply and substract accumulator +RABBITIZER_DEF_INSTR_ID(r5900, 0x2E, vopmula, .operands={RAB_OPERAND_r5900_ACCxyzw, RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vftxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Outer product pre increment +RABBITIZER_DEF_INSTR_ID(r5900, 0x2F, vnop, .operands={0}) // No operation + +RABBITIZER_DEF_INSTR_ID(r5900, 0x30, vmove, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Move floating point registers +RABBITIZER_DEF_INSTR_ID(r5900, 0x31, vmr32, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vfsxyzw}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Move and rotate per word +RABBITIZER_DEF_INSTR_ID(r5900, 0x34, vlqi, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vis_postincr}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Load quadraword post increment +RABBITIZER_DEF_INSTR_ID(r5900, 0x35, vsqi, .operands={RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vit_postincr}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Store quadraword post increment +RABBITIZER_DEF_INSTR_ID(r5900, 0x36, vlqd, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vis_predecr}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Load quadraword pre decrement +RABBITIZER_DEF_INSTR_ID(r5900, 0x37, vsqd, .operands={RAB_OPERAND_r5900_vfsxyzw, RAB_OPERAND_r5900_vit_predecr}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Store quadraword pre decrement + +RABBITIZER_DEF_INSTR_ID(r5900, 0x38, vdiv, .operands={RAB_OPERAND_r5900_Q, RAB_OPERAND_r5900_vfsl, RAB_OPERAND_r5900_vftm}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x39, vsqrt, .operands={RAB_OPERAND_r5900_Q, RAB_OPERAND_r5900_vftm}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x3A, vrsqrt, .operands={RAB_OPERAND_r5900_Q, RAB_OPERAND_r5900_vfsl,RAB_OPERAND_r5900_vftm}) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3B, vwaitq, .operands={0}) // Wait Q operation + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3C, vmtir, .operands={RAB_OPERAND_r5900_vit, RAB_OPERAND_r5900_vfsl}) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3D, vmfir, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_vis}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // Move from integer register + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3E, vilwr, .operands={RAB_OPERAND_r5900_vit, RAB_OPERAND_r5900_vis}, .isFloat=true, .doesDereference=true, .doesLoad=true) // Integer load word register +RABBITIZER_DEF_INSTR_ID(r5900, 0x3F, viswr, .operands={RAB_OPERAND_r5900_vit, RAB_OPERAND_r5900_vis}, .isFloat=true, .doesDereference=true, .doesStore=true) // Integer store word register +/* +"vilwr.w", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"vilwr.x", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"vilwr.y", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"vilwr.z", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"viswr.w", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"viswr.x", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"viswr.y", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +"viswr.z", RAB_OPERAND_r5900_vit,(RAB_OPERAND_r5900_vis) +*/ + +RABBITIZER_DEF_INSTR_ID(r5900, 0x40, vrnext, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_R}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // R next +RABBITIZER_DEF_INSTR_ID(r5900, 0x41, vrget, .operands={RAB_OPERAND_r5900_vftxyzw, RAB_OPERAND_r5900_R}, .instrSuffix=RABINSTRSUFFIX_R5900_xyzw, .isFloat=true) // R move + +// TODO +RABBITIZER_DEF_INSTR_ID(r5900, 0x42, vrinit, .operands={RAB_OPERAND_r5900_R, RAB_OPERAND_r5900_vfsl}) +RABBITIZER_DEF_INSTR_ID(r5900, 0x43, vrxor, .operands={RAB_OPERAND_r5900_R, RAB_OPERAND_r5900_vfsl}) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi.inc new file mode 100644 index 00000000..1cc9bf5c --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi.inc @@ -0,0 +1,49 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------------------5--------0 + | = MMI | | function| + ------6----------------------------------------------------6----- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 | MADD | MADDU | --- | --- | PLZCW | --- | --- | --- | +001 | *1 | *2 | --- | --- | --- | --- | --- | --- | +010 | MFHI1 | MTHI1 | MFLO1 | MTLO1 | --- | --- | --- | --- | +011 | MULT1 | MULTU1| DIV1 | DIVU1 | --- | --- | --- | --- | +100 | MADD1 | MADDU1| --- | --- | --- | --- | --- | --- | +101 | *3 | *4 | --- | --- | --- | --- | --- | --- | +110 | PMFHL | PMTHL | --- | --- | PSLLH | --- | PSRLH | PSRAH | +111 | --- | --- | --- | --- | PSLLW | --- | PSRLW | PSRAW | + hi |-------|-------|-------|-------|-------|-------|-------|-------| + *1 = MMI0 list *2 = MMI2 list + *3 = MMI1 list *4 = MMI3 list +*/ + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, madd, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Multiply-ADD word +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, maddu, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Multiply-ADD Unsigned word +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, plzcw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs}, .modifiesRd=true) // Parallel Leading Zero or one Count Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, mfhi1, .operands={RAB_OPERAND_cpu_rd}, .modifiesRd=true) // Move From HI1 register +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, mthi1, .operands={RAB_OPERAND_cpu_rs}) // Move To HI1 register +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, mflo1, .operands={RAB_OPERAND_cpu_rd}) // Move From LO1 register +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, mtlo1, .operands={RAB_OPERAND_cpu_rs}) // Move To LO1 register + +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, mult1, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // MULTiply word pipeline 1 +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, multu1, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // MULTiply Unsigned word pipeline 1 +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, div1, .operands={RAB_OPERAND_cpu_zero, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}) // DIVide word pipeline 1 +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, divu1, .operands={RAB_OPERAND_cpu_zero, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}) // DIVide Unsigned word pipeline 1 + +RABBITIZER_DEF_INSTR_ID(r5900, 0x20, madd1, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Multiply-ADD word pipeline 1 +RABBITIZER_DEF_INSTR_ID(r5900, 0x21, maddu1, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Multiply-ADD Unsigned word pipeline 1 + +// TODO: check this two instruction, it is supposed to have an extra .fmt +RABBITIZER_DEF_INSTR_ID(r5900, 0x30, pmfhl, .operands={RAB_OPERAND_cpu_rd}, .modifiesRd=true) // Parallel Move From Hi/Lo register +RABBITIZER_DEF_INSTR_ID(r5900, 0x31, pmthl, .operands={RAB_OPERAND_cpu_rs}) // Parallel Move To Hi/Lo register + +RABBITIZER_DEF_INSTR_ID(r5900, 0x34, psllh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Left Logical Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x36, psrlh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Right Logical Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x37, psrah, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Right Arithmetic Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3C, psllw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Left Logical Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x3E, psrlw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Right Logical Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x3F, psraw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_sa}, .modifiesRd=true) // Parallel Shift Right Arithmetic Word diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_0.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_0.inc new file mode 100644 index 00000000..d9203e52 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_0.inc @@ -0,0 +1,50 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------10--------6-5--------0 + | | |function | MMI0 | + ------6----------------------------------------------------6----- + |---00--|---01--|---10--|---11--| lo +000 |PADDW | PSUBW | PCGTW | PMAXW | +001 |PADDH | PSUBH | PCGTH | PMAXH | +010 |PADDB | PSUBB | PCGTB | --- | +011 | --- | --- | --- | --- | +100 |PADDSW |PSUBSW |PEXTLW | PPACW | +101 |PADDSH |PSUBSH |PEXTLH | PPACH | +110 |PADDSB |PSUBSB |PEXTLB | PPACB | +111 | --- | --- | PEXT5 | PPAC5 | + hi |-------|-------|-------|-------| +*/ + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, paddw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, psubw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, pcgtw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for Greater Than Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, pmaxw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MAXimum Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, paddh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x05, psubh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x06, pcgth, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for Greater Than Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x07, pmaxh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MAXimum Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x08, paddb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Byte +RABBITIZER_DEF_INSTR_ID(r5900, 0x09, psubb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Byte +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, pcgtb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for Greater Than Byte + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, paddsw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD with Signed saturation Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, psubsw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract with Signed saturation Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, pextlw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Lower from Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, ppacw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel PACk to Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x14, paddsh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD with Signed saturation Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x15, psubsh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract with Signed saturation Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x16, pextlh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Lower from Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x17, ppach, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel PACk to Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, paddsb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD with Signed saturation Bytes +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, psubsb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract with Signed saturation Bytes +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, pextlb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Lower from Bytes +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, ppacb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel PACk to Bytes + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, pext5, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend from 5-bits +RABBITIZER_DEF_INSTR_ID(r5900, 0x1F, ppac5, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel PACk to 5-bits diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_1.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_1.inc new file mode 100644 index 00000000..64573223 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_1.inc @@ -0,0 +1,43 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------------------5--------0 + | | |function | MMI1 | + ------6----------------------------------------------------6----- + |---00--|---01--|---10--|---11--| lo +000 | --- | PABSW | PCEQW | PMINW | +001 |PADSBH | PABSH | PCEQH | PMINH | +010 | --- | --- | PCEQB | --- | +011 | --- | --- | --- | --- | +100 |PADDUW |PSUBUW |PEXTUW | --- | +101 |PADDUH |PSUBUH |PEXTUH | --- | +110 |PADDUB |PSUBUB |PEXTUB | QFSRV | +111 | --- | --- | --- | --- | + hi |-------|-------|-------|-------| +*/ + +// TODO: operands and properties +RABBITIZER_DEF_INSTR_ID(r5900, 0x01, pabsw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ABSolute Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, pceqw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for EQual Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, pminw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MINimum Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, padsbh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADd/SuBtract Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x05, pabsh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ABSolute Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x06, pceqh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for EQual Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x07, pminh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MINimum Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, pceqb, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Compare for EQual Byte + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, padduw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Unsigned saturation Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, psubuw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Unsigned saturation Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, pextuw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Upper from Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x14, padduh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Unsigned saturation Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x15, psubuh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Unsigned saturation Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x16, pextuh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Upper from Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, paddub, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ADD Unsigned saturation Byte +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, psubub, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel SUBtract Unsigned saturation Byte +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, pextub, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXTend Upper from Byte +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, qfsrv, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Quadword Funnel Shift Right Variable diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_2.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_2.inc new file mode 100644 index 00000000..a7cd357f --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_2.inc @@ -0,0 +1,48 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------------------5--------0 + | | |function | MMI2 | + ------6----------------------------------------------------6----- + |---00--|---01--|---10--|---11--| lo +000 |PMADDW | --- |PSLLVW |PSRLVW | +001 |PMSUBW | --- | --- | --- | +010 |PMFHI |PMFLO |PINTH | --- | +011 |PMULTW |PDIVW |PCPYLD | --- | +100 |PMADDH |PHMADH | PAND | PXOR | +101 |PMSUBH |PHMSBH | --- | --- | +110 | --- | --- | PEXEH | PREVH | +111 |PMULTH |PDIVBW | PEXEW |PROT3W | + hi |-------|-------|-------|-------| +*/ + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, pmaddw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply-ADD Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x02, psllvw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .modifiesRd=true) // Parallel Shift Left Logical Variable Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, psrlvw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .modifiesRd=true) // Parallel Shift Right Logical Variable Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x04, pmsubw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply-SUBtract Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x08, pmfhi, .operands={RAB_OPERAND_cpu_rd}, .modifiesRd=true) // Parallel Move From HI register +RABBITIZER_DEF_INSTR_ID(r5900, 0x09, pmflo, .operands={RAB_OPERAND_cpu_rd}, .modifiesRd=true) // Parallel Move From LO register +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, pinth, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel INTerleave Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x0C, pmultw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MULTiply Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x0D, pdivw, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}) // Parallel DIVide Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x0E, pcpyld, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel CoPY Lower Doubleword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x10, pmaddh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply-ADD Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x11, phmadh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Horizontal Multiply-ADd Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, pand, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel AND +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, pxor, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel eXclusive OR + +RABBITIZER_DEF_INSTR_ID(r5900, 0x14, pmsubh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply-SUBtract Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x15, phmsbh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Horizontal Multiply-Subtract Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, pexeh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXchange Even Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, prevh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel REVerse Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1C, pmulth, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x1D, pdivbw, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel DIVide Broadcast Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, pexew, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXchange Even Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x1F, prot3w, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel ROTate 3 Words left diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_3.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_3.inc new file mode 100644 index 00000000..21edadd5 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_mmi_3.inc @@ -0,0 +1,37 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------------------5--------0 + | | |function | MMI3 | + ------6----------------------------------------------------6----- + |---00--|---01--|---10--|---11--| lo +000 |PMADDUW| --- | --- |PSRAVW | +001 | --- | --- | --- | --- | +010 |PMTHI | PMTLO |PINTEH | --- | +011 |PMULTUW| PDIVUW|PCPYUD | --- | +100 | --- | --- | POR | PNOR | +101 | --- | --- | --- | --- | +110 | --- | --- | PEXCH | PCPYH | +111 | --- | --- | PEXCW | --- | + hi |-------|-------|-------|-------| +*/ + +RABBITIZER_DEF_INSTR_ID(r5900, 0x00, pmadduw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Multiply-ADD Unsigned Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x03, psravw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_rs}, .modifiesRd=true) // Parallel Shift Right Arithmetic Variable Word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x08, pmthi, .operands={RAB_OPERAND_cpu_rs}) // Parallel Move To HI register +RABBITIZER_DEF_INSTR_ID(r5900, 0x09, pmtlo, .operands={RAB_OPERAND_cpu_rs}) // Parallel Move To LO register +RABBITIZER_DEF_INSTR_ID(r5900, 0x0A, pinteh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel INTerleave Even Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x0C, pmultuw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel MULTiply Unsigned Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x0D, pdivuw, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}) // Prallel DIVide Unsigned Word +RABBITIZER_DEF_INSTR_ID(r5900, 0x0E, pcpyud, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel CoPY Upper Doubleword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x12, por, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel OR +RABBITIZER_DEF_INSTR_ID(r5900, 0x13, pnor, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel Not OR + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1A, pexch, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXchange Center Halfword +RABBITIZER_DEF_INSTR_ID(r5900, 0x1B, pcpyh, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel CoPY Halfword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, pexcw, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rt}, .modifiesRd=true) // Parallel EXchange Center Word diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_normal.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_normal.inc new file mode 100644 index 00000000..d5bd5c23 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_normal.inc @@ -0,0 +1,31 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26---------------------------------------------------0 + | opcode | | + ------6---------------------------------------------------------- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 | *1 | *2 | J | JAL | BEQ | BNE | BLEZ | BGTZ | +001 | ADDI | ADDIU | SLTI | SLTIU | ANDI | ORI | XORI | LUI | +010 | *3 | *4 | *5 | --- | BEQL | BNEL | BLEZL | BGTZL | +011 | DADDI |DADDIU | LDL | LDR | *6 | --- | LQ | SQ | +100 | LB | LH | LWL | LW | LBU | LHU | LWR | LWU | +101 | SB | SH | SWL | SW | SDL | SDR | SWR | CACHE | +110 | --- | LWC1 | --- | PREF | --- | --- | LQC2 | LD | +111 | --- | SWC1 | --- | --- | --- | --- | SQC2 | SD | + hi |-------|-------|-------|-------|-------|-------|-------|-------| + *1 = SPECIAL, see SPECIAL list *2 = REGIMM, see REGIMM list + *3 = COP0 *4 = COP1 + *5 = COP2 *6 = MMI table +*/ + +// The other instructions are implemented using the main CPU table + + +RABBITIZER_DEF_INSTR_ID(r5900, 0x1E, lq, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true) // Load Quadword +RABBITIZER_DEF_INSTR_ID(r5900, 0x1F, sq, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_cpu_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true) // Store Quadword + +RABBITIZER_DEF_INSTR_ID(r5900, 0x36, lqc2, .operands={RAB_OPERAND_r5900_vft, RAB_OPERAND_cpu_immediate_base}, .canBeLo=true, .doesDereference=true, .doesLoad=true) + +RABBITIZER_DEF_INSTR_ID(r5900, 0x3E, sqc2, .operands={RAB_OPERAND_r5900_vft, RAB_OPERAND_cpu_immediate_base}, .canBeLo=true, .doesDereference=true, .doesStore=true) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_regimm.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_regimm.inc new file mode 100644 index 00000000..c1f27a2a --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_regimm.inc @@ -0,0 +1,20 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26----------20-------16------------------------------0 + | = REGIMM | | rt | | + ------6---------------------5------------------------------------ + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo + 00 | BLTZ | BGEZ | BLTZL | BGEZL | --- | --- | --- | --- | + 01 | TGEI | TGEIU | TLTI | TLTIU | TEQI | --- | TNEI | --- | + 10 | BLTZAL| BGEZAL|BLTZALL|BGEZALL| --- | --- | --- | --- | + 11 | MTSAB | MTSAH | --- | --- | --- | --- | --- | --- | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// The other instructions are implemented using the main CPU table + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, mtsab, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM) +RABBITIZER_DEF_INSTR_ID(r5900, 0x19, mtsah, .operands={RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_special.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_special.inc new file mode 100644 index 00000000..22e1bb73 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/r5900/r5900_special.inc @@ -0,0 +1,27 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +/* + 31---------26------------------------------------------5--------0 + | = SPECIAL | | function| + ------6----------------------------------------------------6----- + |--000--|--001--|--010--|--011--|--100--|--101--|--110--|--111--| lo +000 | SLL | --- | SRL | SRA | SLLV | --- | SRLV | SRAV | +001 | JR | JALR | MOVZ | MOVN |SYSCALL| BREAK | --- | SYNC | +010 | MFHI | MTHI | MFLO | MTLO | DSLLV | --- | DSRLV | DSRAV | +011 | MULT | MULTU | DIV | DIVU | ---- | --- | ---- | ----- | +100 | ADD | ADDU | SUB | SUBU | AND | OR | XOR | NOR | +101 | MFSA | MTSA | SLT | SLTU | DADD | DADDU | DSUB | DSUBU | +110 | TGE | TGEU | TLT | TLTU | TEQ | --- | TNE | --- | +111 | DSLL | --- | DSRL | DSRA |DSLL32 | --- |DSRL32 |DSRA32 | + hi |-------|-------|-------|-------|-------|-------|-------|-------| +*/ + +// The other instructions are implemented using the main CPU table + +RABBITIZER_DEF_INSTR_ID_ALTNAME(r5900, -0x0F, sync_p, sync.p, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_R, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_II) // Sync + +RABBITIZER_DEF_INSTR_ID(r5900, 0x18, mult, .operands={RAB_OPERAND_cpu_rd, RAB_OPERAND_cpu_rs, RAB_OPERAND_cpu_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // MULTtiply word + +RABBITIZER_DEF_INSTR_ID(r5900, 0x28, mfsa, .operands={RAB_OPERAND_cpu_rd}, .modifiesRd=true) // Move From Shift Amount register +RABBITIZER_DEF_INSTR_ID(r5900, 0x29, mtsa, .operands={RAB_OPERAND_cpu_rs}) // Move To Shift Amount register diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_cop0.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_cop0.inc new file mode 100644 index 00000000..c6c7d0ea --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_cop0.inc @@ -0,0 +1,6 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rt, cop0d +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, mfc0, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .modifiesRt=true, .notEmitedByCompilers=true) // Move word From CP0 +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, mtc0, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_cop0d}, .instrType=RABBITIZER_INSTR_TYPE_UNKNOWN, .notEmitedByCompilers=true) // Move word to CP0 diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2.inc new file mode 100644 index 00000000..344891db --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2.inc @@ -0,0 +1,10 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP cop2t, vd[index] +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, mfc2, .operands={RAB_OPERAND_rsp_cop2t, RAB_OPERAND_rsp_vs_index}, .modifiesRt=true) +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, mtc2, .operands={RAB_OPERAND_rsp_cop2t, RAB_OPERAND_rsp_vs_index}) + +// OP rt, cop2cd +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, cfc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_rsp_cop2cd}, .modifiesRt=true) +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, ctc2, .operands={RAB_OPERAND_cpu_rt, RAB_OPERAND_rsp_cop2cd}) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2_vu.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2_vu.inc new file mode 100644 index 00000000..4a927a59 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_cop2_vu.inc @@ -0,0 +1,53 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP vd, vs, vt[elementhigh] +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, vmulf, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x01, vmulu, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, vrndp, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x03, vmulq, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, vmudl, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x05, vmudm, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, vmudn, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x07, vmudh, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x08, vmacf, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x09, vmacu, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0A, vrndn, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0B, vmacq, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0C, vmadl, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0D, vmadm, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0E, vmadn, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0F, vmadh, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x10, vadd, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x11, vsub, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x13, vabs, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x14, vaddc, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x15, vsubc, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x1D, vsar, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x28, vand, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x29, vnand, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x2A, vor, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x2B, vnor, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x2C, vxor, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x2D, vnxor, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) + +RABBITIZER_DEF_INSTR_ID(rsp, 0x20, vlt, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x21, veq, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x22, vne, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x23, vge, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x24, vcl, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x25, vch, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x26, vcr, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x27, vmrg, .operands={RAB_OPERAND_rsp_vd, RAB_OPERAND_rsp_vs, RAB_OPERAND_rsp_vt_elementhigh}) + +// OP vd[de], vt[elementhigh] +RABBITIZER_DEF_INSTR_ID(rsp, 0x30, vrcp, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x31, vrcpl, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) // operands may be wrong +RABBITIZER_DEF_INSTR_ID(rsp, 0x32, vrcph, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x33, vmov, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x34, vrsq, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x35, vrsql, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x36, vrsqh, .operands={RAB_OPERAND_rsp_vd_de, RAB_OPERAND_rsp_vt_elementhigh}) + +// OP +RABBITIZER_DEF_INSTR_ID(rsp, 0x37, vnop, .operands={0}) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_normal.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_normal.inc new file mode 100644 index 00000000..be73f5a0 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_normal.inc @@ -0,0 +1,53 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP LABEL +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, j, .operands={RAB_OPERAND_cpu_label}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true) // Jump +RABBITIZER_DEF_INSTR_ID(rsp, 0x03, jal, .operands={RAB_OPERAND_cpu_label}, .instrType=RABBITIZER_INSTR_TYPE_J, .isJump=true, .doesLink=true) // Jump And Link + +// OP rs, rt, IMM +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, beq, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on EQual +RABBITIZER_DEF_INSTR_ID(rsp, 0x05, bne, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Not Equal + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, blez, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Less than or Equal to Zero +RABBITIZER_DEF_INSTR_ID(rsp, 0x07, bgtz, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Greater Than Zero + +// OP rt, rs, IMM +RABBITIZER_DEF_INSTR_ID(rsp, 0x08, addi, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .notEmitedByCompilers=true, .canBeLo=true) // Add Immediate +RABBITIZER_DEF_INSTR_ID(rsp, 0x09, addiu, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true) // Add Immediate Unsigned Word +RABBITIZER_DEF_INSTR_ID(rsp, 0x0A, slti, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true) // Set on Less Than Immediate +RABBITIZER_DEF_INSTR_ID(rsp, 0x0B, sltiu, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true) // Set on Less Than Immediate Unsigned +RABBITIZER_DEF_INSTR_ID(rsp, 0x0C, andi, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true) // And Immediate +RABBITIZER_DEF_INSTR_ID(rsp, 0x0D, ori, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .canBeLo=true) // Or Immediate +RABBITIZER_DEF_INSTR_ID(rsp, 0x0E, xori, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true) // eXclusive OR Immediate + +// OP rt, IMM +RABBITIZER_DEF_INSTR_ID(rsp, 0x0F, lui, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_immediate}, .instrType=RABBITIZER_INSTR_TYPE_I, .isUnsigned=true, .modifiesRt=true, .canBeHi=true) // Load Upper Immediate + +// OP rt, IMM(base) +RABBITIZER_DEF_INSTR_ID(rsp, 0x20, lb, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Byte +RABBITIZER_DEF_INSTR_ID(rsp, 0x21, lh, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Halfword +RABBITIZER_DEF_INSTR_ID(rsp, 0x23, lw, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word +RABBITIZER_DEF_INSTR_ID(rsp, 0x24, lbu, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Byte Insigned +RABBITIZER_DEF_INSTR_ID(rsp, 0x25, lhu, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Halfword Unsigned +RABBITIZER_DEF_INSTR_ID(rsp, 0x28, sb, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Byte +RABBITIZER_DEF_INSTR_ID(rsp, 0x29, sh, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Halfword +RABBITIZER_DEF_INSTR_ID(rsp, 0x2B, sw, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word +RABBITIZER_DEF_INSTR_ID(rsp, 0x33, pref, .operands={RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .modifiesRt=true, .canBeLo=true, .doesDereference=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_IV) // Prefetch + +RABBITIZER_DEF_INSTR_ID(rsp, 0x2F, cache, .operands={RAB_OPERAND_cpu_op, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .notEmitedByCompilers=true) // Cache + +// OP ft, IMM(base) +RABBITIZER_DEF_INSTR_ID(rsp, 0x31, lwc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .canBeLo=true, .doesDereference=true, .doesLoad=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Load Word to Coprocessor z +RABBITIZER_DEF_INSTR_ID(rsp, 0x39, swc1, .operands={RAB_OPERAND_cpu_ft, RAB_OPERAND_rsp_immediate_base}, .instrType=RABBITIZER_INSTR_TYPE_I, .isFloat=true, .canBeLo=true, .doesDereference=true, .doesStore=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Store Word from Coprocessor z + + +// Pseudo-Instruction Unique IDs + +// OP IMM +RABBITIZER_DEF_INSTR_ID(rsp, -0x03, b, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch (unconditional) + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(rsp, -0x04, beqz, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on EQual Zero +RABBITIZER_DEF_INSTR_ID(rsp, -0x05, bnez, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Not Equal Zero diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_lwc2.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_lwc2.inc new file mode 100644 index 00000000..4440fb09 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_lwc2.inc @@ -0,0 +1,15 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP vt[elementlow], offset(vs) +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, lbv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x01, lsv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, llv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x03, ldv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, lqv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x05, lrv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, lpv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x07, luv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x08, lhv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x09, lfv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0B, ltv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_swc2.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_swc2.inc new file mode 100644 index 00000000..996c69f2 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_normal_swc2.inc @@ -0,0 +1,17 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP vt[elementlow], offset(vs) +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, sbv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x01, ssv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, slv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x03, sdv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, sqv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x05, srv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, spv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x07, suv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x08, shv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x09, sfv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) +RABBITIZER_DEF_INSTR_ID(rsp, 0x0B, stv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) + +RABBITIZER_DEF_INSTR_ID(rsp, -0x07, swv, .operands={RAB_OPERAND_rsp_vt_elementlow, RAB_OPERAND_rsp_offset_rs}) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_regimm.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_regimm.inc new file mode 100644 index 00000000..c2132f94 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_regimm.inc @@ -0,0 +1,14 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rs, IMM +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, bltz, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Less Than Zero +RABBITIZER_DEF_INSTR_ID(rsp, 0x01, bgez, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true) // Branch on Greater than or Equal to Zero + +RABBITIZER_DEF_INSTR_ID(rsp, 0x10, bltzal, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true) // Branch on Less Than Zero and Link +RABBITIZER_DEF_INSTR_ID(rsp, 0x11, bgezal, .operands={RAB_OPERAND_rsp_rs, RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true) // Branch on Greater Than or Equal to Zero and Link + + +// Pseudo-Instruction Unique IDs + +RABBITIZER_DEF_INSTR_ID(rsp, -0x11, bal, .operands={RAB_OPERAND_cpu_branch_target_label}, .instrType=RABBITIZER_INSTR_TYPE_REGIMM, .isBranch=true, .doesLink=true, .isPseudo=true, .architectureVersion=RABBITIZER_ARCHVERSION_MIPS_I) // Branch and Link diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_special.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_special.inc new file mode 100644 index 00000000..9f12212d --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/instr_id/rsp/rsp_special.inc @@ -0,0 +1,49 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +// OP rd, rt, sa +RABBITIZER_DEF_INSTR_ID(rsp, 0x00, sll, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Left Logical +RABBITIZER_DEF_INSTR_ID(rsp, 0x02, srl, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Right Logical +RABBITIZER_DEF_INSTR_ID(rsp, 0x03, sra, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_cpu_sa}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Right Arithmetic + +// OP rd, rt, rs +RABBITIZER_DEF_INSTR_ID(rsp, 0x04, sllv, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Left Logical Variable +RABBITIZER_DEF_INSTR_ID(rsp, 0x06, srlv, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Right Logical Variable +RABBITIZER_DEF_INSTR_ID(rsp, 0x07, srav, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Shift word Right Arithmetic Variable + +// OP rs +RABBITIZER_DEF_INSTR_ID(rsp, 0x08, jr, .operands={RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true) // Jump Register +RABBITIZER_DEF_INSTR_ID(rsp, 0x09, jalr, .operands={RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true, .doesLink=true) // Jump And Link Register + +// OP rd, rs +RABBITIZER_DEF_INSTR_ID_ALTNAME(rsp, -0x09, jalr_rd, jalr, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .isJump=true, .modifiesRd=true, .doesLink=true) // Jump And Link Register // Special case for rd != 31 + +// OP rd, rs, rt +RABBITIZER_DEF_INSTR_ID(rsp, 0x0A, movz, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // MOVe conditional on Zero +RABBITIZER_DEF_INSTR_ID(rsp, 0x0B, movn, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // MOVe conditional on Not zero + +RABBITIZER_DEF_INSTR_ID(rsp, 0x20, add, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true, .notEmitedByCompilers=true) // ADD word +RABBITIZER_DEF_INSTR_ID(rsp, 0x21, addu, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // ADD Unsigned word +RABBITIZER_DEF_INSTR_ID(rsp, 0x22, sub, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Subtract word +RABBITIZER_DEF_INSTR_ID(rsp, 0x23, subu, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // SUBtract Unsigned word +RABBITIZER_DEF_INSTR_ID(rsp, 0x24, and, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // AND +RABBITIZER_DEF_INSTR_ID(rsp, 0x25, or, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // OR +RABBITIZER_DEF_INSTR_ID(rsp, 0x26, xor, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // eXclusive OR +RABBITIZER_DEF_INSTR_ID(rsp, 0x27, nor, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Not OR +RABBITIZER_DEF_INSTR_ID(rsp, 0x2A, slt, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Set on Less Than +RABBITIZER_DEF_INSTR_ID(rsp, 0x2B, sltu, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Set on Less Than Unsigned + +// OP code +RABBITIZER_DEF_INSTR_ID(rsp, 0x0D, break, .operands={RAB_OPERAND_cpu_code}, .instrType=RABBITIZER_INSTR_TYPE_R) // Break + + +// Pseudo-Instruction Unique IDs +// OP +RABBITIZER_DEF_INSTR_ID(rsp, -0x01, nop, .operands={0}, .instrType=RABBITIZER_INSTR_TYPE_R) // No OPeration + +// OP rd, rs +RABBITIZER_DEF_INSTR_ID(rsp, -0x25, move, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Move +RABBITIZER_DEF_INSTR_ID(rsp, -0x27, not, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rs}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) // Not + +// OP rd, rt +RABBITIZER_DEF_INSTR_ID(rsp, -0x23, negu, .operands={RAB_OPERAND_rsp_rd, RAB_OPERAND_rsp_rt}, .instrType=RABBITIZER_INSTR_TYPE_R, .modifiesRd=true) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/operands/RabbitizerOperandType_cpu.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/operands/RabbitizerOperandType_cpu.inc new file mode 100644 index 00000000..bb863366 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/operands/RabbitizerOperandType_cpu.inc @@ -0,0 +1,25 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RAB_DEF_OPERAND(cpu, rs) +RAB_DEF_OPERAND(cpu, rt) +RAB_DEF_OPERAND(cpu, rd) +RAB_DEF_OPERAND(cpu, sa) +RAB_DEF_OPERAND(cpu, zero) // $zero +// RAB_DEF_OPERAND(cpu, function) +RAB_DEF_OPERAND(cpu, cop0d) +RAB_DEF_OPERAND(cpu, fs) +RAB_DEF_OPERAND(cpu, ft) +RAB_DEF_OPERAND(cpu, fd) +RAB_DEF_OPERAND(cpu, cop1cs) // Coprocessor 1 control fs +RAB_DEF_OPERAND(cpu, cop2t) +RAB_DEF_OPERAND(cpu, op) +RAB_DEF_OPERAND(cpu, code) +RAB_DEF_OPERAND(cpu, code_lower) +RAB_DEF_OPERAND(cpu, copraw) +RAB_DEF_OPERAND(cpu, label) +RAB_DEF_OPERAND(cpu, immediate) +RAB_DEF_OPERAND(cpu, branch_target_label) + +// composed/aliased operands +RAB_DEF_OPERAND(cpu, immediate_base) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/operands/RabbitizerOperandType_r5900.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/operands/RabbitizerOperandType_r5900.inc new file mode 100644 index 00000000..36cb6efc --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/operands/RabbitizerOperandType_r5900.inc @@ -0,0 +1,33 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RAB_DEF_OPERAND(r5900, I) +RAB_DEF_OPERAND(r5900, Q) +RAB_DEF_OPERAND(r5900, R) +RAB_DEF_OPERAND(r5900, ACC) +RAB_DEF_OPERAND(r5900, ACCxyzw) +RAB_DEF_OPERAND(r5900, vfs) +RAB_DEF_OPERAND(r5900, vft) +RAB_DEF_OPERAND(r5900, vfd) +RAB_DEF_OPERAND(r5900, vfsxyzw) +RAB_DEF_OPERAND(r5900, vftxyzw) +RAB_DEF_OPERAND(r5900, vfdxyzw) +RAB_DEF_OPERAND(r5900, vfsn) +RAB_DEF_OPERAND(r5900, vftn) +RAB_DEF_OPERAND(r5900, vfdn) +RAB_DEF_OPERAND(r5900, vfsl) +RAB_DEF_OPERAND(r5900, vftl) +RAB_DEF_OPERAND(r5900, vfdl) +RAB_DEF_OPERAND(r5900, vfsm) +RAB_DEF_OPERAND(r5900, vftm) +RAB_DEF_OPERAND(r5900, vfdm) +RAB_DEF_OPERAND(r5900, vis) +RAB_DEF_OPERAND(r5900, vit) +RAB_DEF_OPERAND(r5900, vid) +RAB_DEF_OPERAND(r5900, vis_predecr) +RAB_DEF_OPERAND(r5900, vit_predecr) +RAB_DEF_OPERAND(r5900, vid_predecr) +RAB_DEF_OPERAND(r5900, vis_postincr) +RAB_DEF_OPERAND(r5900, vit_postincr) +RAB_DEF_OPERAND(r5900, vid_postincr) +RAB_DEF_OPERAND(r5900, immediate5) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/operands/RabbitizerOperandType_rsp.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/operands/RabbitizerOperandType_rsp.inc new file mode 100644 index 00000000..7bae435d --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/operands/RabbitizerOperandType_rsp.inc @@ -0,0 +1,24 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RAB_DEF_OPERAND(rsp, rs) +RAB_DEF_OPERAND(rsp, rt) +RAB_DEF_OPERAND(rsp, rd) +RAB_DEF_OPERAND(rsp, cop0d) +RAB_DEF_OPERAND(rsp, cop2t) +RAB_DEF_OPERAND(rsp, cop2cd) // Coprocessor 2 control rd +RAB_DEF_OPERAND(rsp, vs) +RAB_DEF_OPERAND(rsp, vt) +RAB_DEF_OPERAND(rsp, vd) +// RAB_DEF_OPERAND(rsp, elementhigh) +// RAB_DEF_OPERAND(rsp, elementlow) +// RAB_DEF_OPERAND(rsp, index) +// RAB_DEF_OPERAND(rsp, offset) + +// composed/aliased operands +RAB_DEF_OPERAND(rsp, vt_elementhigh) +RAB_DEF_OPERAND(rsp, vt_elementlow) +RAB_DEF_OPERAND(rsp, vd_de) +RAB_DEF_OPERAND(rsp, vs_index) +RAB_DEF_OPERAND(rsp, offset_rs) +RAB_DEF_OPERAND(rsp, immediate_base) diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop0.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop0.inc new file mode 100644 index 00000000..9d3d63d2 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop0.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG_NODOLLAR(COP0, Index, 0), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Random, 1), + RABBITIZER_DEF_REG_NODOLLAR(COP0, EntryLo0, 2), + RABBITIZER_DEF_REG_NODOLLAR(COP0, EntryLo1, 3), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Context, 4), + RABBITIZER_DEF_REG_NODOLLAR(COP0, PageMask, 5), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Wired, 6), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved07, 7), + RABBITIZER_DEF_REG_NODOLLAR(COP0, BadVaddr, 8), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Count, 9), + RABBITIZER_DEF_REG_NODOLLAR(COP0, EntryHi, 10), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Compare, 11), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Status, 12), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Cause, 13), + RABBITIZER_DEF_REG_NODOLLAR(COP0, EPC, 14), + RABBITIZER_DEF_REG_NODOLLAR(COP0, PRevID, 15), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Config, 16), + RABBITIZER_DEF_REG_NODOLLAR(COP0, LLAddr, 17), + RABBITIZER_DEF_REG_NODOLLAR(COP0, WatchLo, 18), + RABBITIZER_DEF_REG_NODOLLAR(COP0, WatchHi, 19), + RABBITIZER_DEF_REG_NODOLLAR(COP0, XContext, 20), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved21, 21), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved22, 22), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved23, 23), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved24, 24), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved25, 25), + RABBITIZER_DEF_REG_NODOLLAR(COP0, PErr, 26), + RABBITIZER_DEF_REG_NODOLLAR(COP0, CacheErr, 27), + RABBITIZER_DEF_REG_NODOLLAR(COP0, TagLo, 28), + RABBITIZER_DEF_REG_NODOLLAR(COP0, TagHi, 29), + RABBITIZER_DEF_REG_NODOLLAR(COP0, ErrorEPC, 30), + RABBITIZER_DEF_REG_NODOLLAR(COP0, Reserved31, 31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1Control.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1Control.inc new file mode 100644 index 00000000..cad6bde5 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1Control.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(COP1_CONTROL, 0, 0), + RABBITIZER_DEF_REG(COP1_CONTROL, 1, 1), + RABBITIZER_DEF_REG(COP1_CONTROL, 2, 2), + RABBITIZER_DEF_REG(COP1_CONTROL, 3, 3), + RABBITIZER_DEF_REG(COP1_CONTROL, 4, 4), + RABBITIZER_DEF_REG(COP1_CONTROL, 5, 5), + RABBITIZER_DEF_REG(COP1_CONTROL, 6, 6), + RABBITIZER_DEF_REG(COP1_CONTROL, 7, 7), + RABBITIZER_DEF_REG(COP1_CONTROL, 8, 8), + RABBITIZER_DEF_REG(COP1_CONTROL, 9, 9), + RABBITIZER_DEF_REG(COP1_CONTROL, 10, 10), + RABBITIZER_DEF_REG(COP1_CONTROL, 11, 11), + RABBITIZER_DEF_REG(COP1_CONTROL, 12, 12), + RABBITIZER_DEF_REG(COP1_CONTROL, 13, 13), + RABBITIZER_DEF_REG(COP1_CONTROL, 14, 14), + RABBITIZER_DEF_REG(COP1_CONTROL, 15, 15), + RABBITIZER_DEF_REG(COP1_CONTROL, 16, 16), + RABBITIZER_DEF_REG(COP1_CONTROL, 17, 17), + RABBITIZER_DEF_REG(COP1_CONTROL, 18, 18), + RABBITIZER_DEF_REG(COP1_CONTROL, 19, 19), + RABBITIZER_DEF_REG(COP1_CONTROL, 20, 20), + RABBITIZER_DEF_REG(COP1_CONTROL, 21, 21), + RABBITIZER_DEF_REG(COP1_CONTROL, 22, 22), + RABBITIZER_DEF_REG(COP1_CONTROL, 23, 23), + RABBITIZER_DEF_REG(COP1_CONTROL, 24, 24), + RABBITIZER_DEF_REG(COP1_CONTROL, 25, 25), + RABBITIZER_DEF_REG(COP1_CONTROL, 26, 26), + RABBITIZER_DEF_REG(COP1_CONTROL, 27, 27), + RABBITIZER_DEF_REG(COP1_CONTROL, 28, 28), + RABBITIZER_DEF_REG(COP1_CONTROL, 29, 29), + RABBITIZER_DEF_REG(COP1_CONTROL, 30, 30), + RABBITIZER_DEF_REG(COP1_CONTROL, FpcCsr, 31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N32.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N32.inc new file mode 100644 index 00000000..affe4948 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N32.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(COP1_N32, fv0, f0), + RABBITIZER_DEF_REG(COP1_N32, ft14, f1), + RABBITIZER_DEF_REG(COP1_N32, fv1, f2), + RABBITIZER_DEF_REG(COP1_N32, ft15, f3), + RABBITIZER_DEF_REG(COP1_N32, ft0, f4), + RABBITIZER_DEF_REG(COP1_N32, ft1, f5), + RABBITIZER_DEF_REG(COP1_N32, ft2, f6), + RABBITIZER_DEF_REG(COP1_N32, ft3, f7), + RABBITIZER_DEF_REG(COP1_N32, ft4, f8), + RABBITIZER_DEF_REG(COP1_N32, ft5, f9), + RABBITIZER_DEF_REG(COP1_N32, ft6, f10), + RABBITIZER_DEF_REG(COP1_N32, ft7, f11), + RABBITIZER_DEF_REG(COP1_N32, fa0, f12), + RABBITIZER_DEF_REG(COP1_N32, fa1, f13), + RABBITIZER_DEF_REG(COP1_N32, fa2, f14), + RABBITIZER_DEF_REG(COP1_N32, fa3, f15), + RABBITIZER_DEF_REG(COP1_N32, fa4, f16), + RABBITIZER_DEF_REG(COP1_N32, fa5, f17), + RABBITIZER_DEF_REG(COP1_N32, fa6, f18), + RABBITIZER_DEF_REG(COP1_N32, fa7, f19), + RABBITIZER_DEF_REG(COP1_N32, fs0, f20), + RABBITIZER_DEF_REG(COP1_N32, ft8, f21), + RABBITIZER_DEF_REG(COP1_N32, fs1, f22), + RABBITIZER_DEF_REG(COP1_N32, ft9, f23), + RABBITIZER_DEF_REG(COP1_N32, fs2, f24), + RABBITIZER_DEF_REG(COP1_N32, ft10, f25), + RABBITIZER_DEF_REG(COP1_N32, fs3, f26), + RABBITIZER_DEF_REG(COP1_N32, ft11, f27), + RABBITIZER_DEF_REG(COP1_N32, fs4, f28), + RABBITIZER_DEF_REG(COP1_N32, ft12, f29), + RABBITIZER_DEF_REG(COP1_N32, fs5, f30), + RABBITIZER_DEF_REG(COP1_N32, ft13, f31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N64.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N64.inc new file mode 100644 index 00000000..1388c93d --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1N64.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(COP1_N64, fv0, f0), + RABBITIZER_DEF_REG(COP1_N64, ft12, f1), + RABBITIZER_DEF_REG(COP1_N64, fv1, f2), + RABBITIZER_DEF_REG(COP1_N64, ft13, f3), + RABBITIZER_DEF_REG(COP1_N64, ft0, f4), + RABBITIZER_DEF_REG(COP1_N64, ft1, f5), + RABBITIZER_DEF_REG(COP1_N64, ft2, f6), + RABBITIZER_DEF_REG(COP1_N64, ft3, f7), + RABBITIZER_DEF_REG(COP1_N64, ft4, f8), + RABBITIZER_DEF_REG(COP1_N64, ft5, f9), + RABBITIZER_DEF_REG(COP1_N64, ft6, f10), + RABBITIZER_DEF_REG(COP1_N64, ft7, f11), + RABBITIZER_DEF_REG(COP1_N64, fa0, f12), + RABBITIZER_DEF_REG(COP1_N64, fa1, f13), + RABBITIZER_DEF_REG(COP1_N64, fa2, f14), + RABBITIZER_DEF_REG(COP1_N64, fa3, f15), + RABBITIZER_DEF_REG(COP1_N64, fa4, f16), + RABBITIZER_DEF_REG(COP1_N64, fa5, f17), + RABBITIZER_DEF_REG(COP1_N64, fa6, f18), + RABBITIZER_DEF_REG(COP1_N64, fa7, f19), + RABBITIZER_DEF_REG(COP1_N64, ft8, f20), + RABBITIZER_DEF_REG(COP1_N64, ft9, f21), + RABBITIZER_DEF_REG(COP1_N64, ft10, f22), + RABBITIZER_DEF_REG(COP1_N64, ft11, f23), + RABBITIZER_DEF_REG(COP1_N64, fs0, f24), + RABBITIZER_DEF_REG(COP1_N64, fs1, f25), + RABBITIZER_DEF_REG(COP1_N64, fs2, f26), + RABBITIZER_DEF_REG(COP1_N64, fs3, f27), + RABBITIZER_DEF_REG(COP1_N64, fs4, f28), + RABBITIZER_DEF_REG(COP1_N64, fs5, f29), + RABBITIZER_DEF_REG(COP1_N64, fs6, f30), + RABBITIZER_DEF_REG(COP1_N64, fs7, f31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1O32.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1O32.inc new file mode 100644 index 00000000..44ba53e1 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop1O32.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(COP1_O32, fv0, f0), + RABBITIZER_DEF_REG(COP1_O32, fv0f, f1), + RABBITIZER_DEF_REG(COP1_O32, fv1, f2), + RABBITIZER_DEF_REG(COP1_O32, fv1f, f3), + RABBITIZER_DEF_REG(COP1_O32, ft0, f4), + RABBITIZER_DEF_REG(COP1_O32, ft0f, f5), + RABBITIZER_DEF_REG(COP1_O32, ft1, f6), + RABBITIZER_DEF_REG(COP1_O32, ft1f, f7), + RABBITIZER_DEF_REG(COP1_O32, ft2, f8), + RABBITIZER_DEF_REG(COP1_O32, ft2f, f9), + RABBITIZER_DEF_REG(COP1_O32, ft3, f10), + RABBITIZER_DEF_REG(COP1_O32, ft3f, f11), + RABBITIZER_DEF_REG(COP1_O32, fa0, f12), + RABBITIZER_DEF_REG(COP1_O32, fa0f, f13), + RABBITIZER_DEF_REG(COP1_O32, fa1, f14), + RABBITIZER_DEF_REG(COP1_O32, fa1f, f15), + RABBITIZER_DEF_REG(COP1_O32, ft4, f16), + RABBITIZER_DEF_REG(COP1_O32, ft4f, f17), + RABBITIZER_DEF_REG(COP1_O32, ft5, f18), + RABBITIZER_DEF_REG(COP1_O32, ft5f, f19), + RABBITIZER_DEF_REG(COP1_O32, fs0, f20), + RABBITIZER_DEF_REG(COP1_O32, fs0f, f21), + RABBITIZER_DEF_REG(COP1_O32, fs1, f22), + RABBITIZER_DEF_REG(COP1_O32, fs1f, f23), + RABBITIZER_DEF_REG(COP1_O32, fs2, f24), + RABBITIZER_DEF_REG(COP1_O32, fs2f, f25), + RABBITIZER_DEF_REG(COP1_O32, fs3, f26), + RABBITIZER_DEF_REG(COP1_O32, fs3f, f27), + RABBITIZER_DEF_REG(COP1_O32, fs4, f28), + RABBITIZER_DEF_REG(COP1_O32, fs4f, f29), + RABBITIZER_DEF_REG(COP1_O32, fs5, f30), + RABBITIZER_DEF_REG(COP1_O32, fs5f, f31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop2.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop2.inc new file mode 100644 index 00000000..84e40f32 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_Cop2.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(COP2, 0, 0), + RABBITIZER_DEF_REG(COP2, 1, 1), + RABBITIZER_DEF_REG(COP2, 2, 2), + RABBITIZER_DEF_REG(COP2, 3, 3), + RABBITIZER_DEF_REG(COP2, 4, 4), + RABBITIZER_DEF_REG(COP2, 5, 5), + RABBITIZER_DEF_REG(COP2, 6, 6), + RABBITIZER_DEF_REG(COP2, 7, 7), + RABBITIZER_DEF_REG(COP2, 8, 8), + RABBITIZER_DEF_REG(COP2, 9, 9), + RABBITIZER_DEF_REG(COP2, 10, 10), + RABBITIZER_DEF_REG(COP2, 11, 11), + RABBITIZER_DEF_REG(COP2, 12, 12), + RABBITIZER_DEF_REG(COP2, 13, 13), + RABBITIZER_DEF_REG(COP2, 14, 14), + RABBITIZER_DEF_REG(COP2, 15, 15), + RABBITIZER_DEF_REG(COP2, 16, 16), + RABBITIZER_DEF_REG(COP2, 17, 17), + RABBITIZER_DEF_REG(COP2, 18, 18), + RABBITIZER_DEF_REG(COP2, 19, 19), + RABBITIZER_DEF_REG(COP2, 20, 20), + RABBITIZER_DEF_REG(COP2, 21, 21), + RABBITIZER_DEF_REG(COP2, 22, 22), + RABBITIZER_DEF_REG(COP2, 23, 23), + RABBITIZER_DEF_REG(COP2, 24, 24), + RABBITIZER_DEF_REG(COP2, 25, 25), + RABBITIZER_DEF_REG(COP2, 26, 26), + RABBITIZER_DEF_REG(COP2, 27, 27), + RABBITIZER_DEF_REG(COP2, 28, 28), + RABBITIZER_DEF_REG(COP2, 29, 29), + RABBITIZER_DEF_REG(COP2, 30, 30), + RABBITIZER_DEF_REG(COP2, 31, 31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_GprN32.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_GprN32.inc new file mode 100644 index 00000000..a937136b --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_GprN32.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(GPR_N32, zero, 0), + RABBITIZER_DEF_REG(GPR_N32, at, 1), + RABBITIZER_DEF_REG(GPR_N32, v0, 2), + RABBITIZER_DEF_REG(GPR_N32, v1, 3), + RABBITIZER_DEF_REG(GPR_N32, a0, 4), + RABBITIZER_DEF_REG(GPR_N32, a1, 5), + RABBITIZER_DEF_REG(GPR_N32, a2, 6), + RABBITIZER_DEF_REG(GPR_N32, a3, 7), + RABBITIZER_DEF_REG(GPR_N32, a4, 8), + RABBITIZER_DEF_REG(GPR_N32, a5, 9), + RABBITIZER_DEF_REG(GPR_N32, a6, 10), + RABBITIZER_DEF_REG(GPR_N32, a7, 11), + RABBITIZER_DEF_REG(GPR_N32, t0, 12), + RABBITIZER_DEF_REG(GPR_N32, t1, 13), + RABBITIZER_DEF_REG(GPR_N32, t2, 14), + RABBITIZER_DEF_REG(GPR_N32, t3, 15), + RABBITIZER_DEF_REG(GPR_N32, s0, 16), + RABBITIZER_DEF_REG(GPR_N32, s1, 17), + RABBITIZER_DEF_REG(GPR_N32, s2, 18), + RABBITIZER_DEF_REG(GPR_N32, s3, 19), + RABBITIZER_DEF_REG(GPR_N32, s4, 20), + RABBITIZER_DEF_REG(GPR_N32, s5, 21), + RABBITIZER_DEF_REG(GPR_N32, s6, 22), + RABBITIZER_DEF_REG(GPR_N32, s7, 23), + RABBITIZER_DEF_REG(GPR_N32, t8, 24), + RABBITIZER_DEF_REG(GPR_N32, t9, 25), + RABBITIZER_DEF_REG(GPR_N32, k0, 26), + RABBITIZER_DEF_REG(GPR_N32, k1, 27), + RABBITIZER_DEF_REG(GPR_N32, gp, 28), + RABBITIZER_DEF_REG(GPR_N32, sp, 29), + RABBITIZER_DEF_REG(GPR_N32, fp, 30), + RABBITIZER_DEF_REG(GPR_N32, ra, 31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_GprO32.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_GprO32.inc new file mode 100644 index 00000000..26685fe5 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_GprO32.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(GPR_O32, zero, 0), + RABBITIZER_DEF_REG(GPR_O32, at, 1), + RABBITIZER_DEF_REG(GPR_O32, v0, 2), + RABBITIZER_DEF_REG(GPR_O32, v1, 3), + RABBITIZER_DEF_REG(GPR_O32, a0, 4), + RABBITIZER_DEF_REG(GPR_O32, a1, 5), + RABBITIZER_DEF_REG(GPR_O32, a2, 6), + RABBITIZER_DEF_REG(GPR_O32, a3, 7), + RABBITIZER_DEF_REG(GPR_O32, t0, 8), + RABBITIZER_DEF_REG(GPR_O32, t1, 9), + RABBITIZER_DEF_REG(GPR_O32, t2, 10), + RABBITIZER_DEF_REG(GPR_O32, t3, 11), + RABBITIZER_DEF_REG(GPR_O32, t4, 12), + RABBITIZER_DEF_REG(GPR_O32, t5, 13), + RABBITIZER_DEF_REG(GPR_O32, t6, 14), + RABBITIZER_DEF_REG(GPR_O32, t7, 15), + RABBITIZER_DEF_REG(GPR_O32, s0, 16), + RABBITIZER_DEF_REG(GPR_O32, s1, 17), + RABBITIZER_DEF_REG(GPR_O32, s2, 18), + RABBITIZER_DEF_REG(GPR_O32, s3, 19), + RABBITIZER_DEF_REG(GPR_O32, s4, 20), + RABBITIZER_DEF_REG(GPR_O32, s5, 21), + RABBITIZER_DEF_REG(GPR_O32, s6, 22), + RABBITIZER_DEF_REG(GPR_O32, s7, 23), + RABBITIZER_DEF_REG(GPR_O32, t8, 24), + RABBITIZER_DEF_REG(GPR_O32, t9, 25), + RABBITIZER_DEF_REG(GPR_O32, k0, 26), + RABBITIZER_DEF_REG(GPR_O32, k1, 27), + RABBITIZER_DEF_REG(GPR_O32, gp, 28), + RABBITIZER_DEF_REG(GPR_O32, sp, 29), + RABBITIZER_DEF_REG(GPR_O32, fp, 30), + RABBITIZER_DEF_REG(GPR_O32, ra, 31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VF.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VF.inc new file mode 100644 index 00000000..afb88dd5 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VF.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_REG(R5900_VF, vf0, 0), +RABBITIZER_DEF_REG(R5900_VF, vf1, 1), +RABBITIZER_DEF_REG(R5900_VF, vf2, 2), +RABBITIZER_DEF_REG(R5900_VF, vf3, 3), +RABBITIZER_DEF_REG(R5900_VF, vf4, 4), +RABBITIZER_DEF_REG(R5900_VF, vf5, 5), +RABBITIZER_DEF_REG(R5900_VF, vf6, 6), +RABBITIZER_DEF_REG(R5900_VF, vf7, 7), +RABBITIZER_DEF_REG(R5900_VF, vf8, 8), +RABBITIZER_DEF_REG(R5900_VF, vf9, 9), +RABBITIZER_DEF_REG(R5900_VF, vf10, 10), +RABBITIZER_DEF_REG(R5900_VF, vf11, 11), +RABBITIZER_DEF_REG(R5900_VF, vf12, 12), +RABBITIZER_DEF_REG(R5900_VF, vf13, 13), +RABBITIZER_DEF_REG(R5900_VF, vf14, 14), +RABBITIZER_DEF_REG(R5900_VF, vf15, 15), +RABBITIZER_DEF_REG(R5900_VF, vf16, 16), +RABBITIZER_DEF_REG(R5900_VF, vf17, 17), +RABBITIZER_DEF_REG(R5900_VF, vf18, 18), +RABBITIZER_DEF_REG(R5900_VF, vf19, 19), +RABBITIZER_DEF_REG(R5900_VF, vf20, 20), +RABBITIZER_DEF_REG(R5900_VF, vf21, 21), +RABBITIZER_DEF_REG(R5900_VF, vf22, 22), +RABBITIZER_DEF_REG(R5900_VF, vf23, 23), +RABBITIZER_DEF_REG(R5900_VF, vf24, 24), +RABBITIZER_DEF_REG(R5900_VF, vf25, 25), +RABBITIZER_DEF_REG(R5900_VF, vf26, 26), +RABBITIZER_DEF_REG(R5900_VF, vf27, 27), +RABBITIZER_DEF_REG(R5900_VF, vf28, 28), +RABBITIZER_DEF_REG(R5900_VF, vf29, 29), +RABBITIZER_DEF_REG(R5900_VF, vf30, 30), +RABBITIZER_DEF_REG(R5900_VF, vf31, 31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VI.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VI.inc new file mode 100644 index 00000000..3e8e9f82 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_R5900VI.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +RABBITIZER_DEF_REG(R5900_VI, vi0, 0), +RABBITIZER_DEF_REG(R5900_VI, vi1, 1), +RABBITIZER_DEF_REG(R5900_VI, vi2, 2), +RABBITIZER_DEF_REG(R5900_VI, vi3, 3), +RABBITIZER_DEF_REG(R5900_VI, vi4, 4), +RABBITIZER_DEF_REG(R5900_VI, vi5, 5), +RABBITIZER_DEF_REG(R5900_VI, vi6, 6), +RABBITIZER_DEF_REG(R5900_VI, vi7, 7), +RABBITIZER_DEF_REG(R5900_VI, vi8, 8), +RABBITIZER_DEF_REG(R5900_VI, vi9, 9), +RABBITIZER_DEF_REG(R5900_VI, vi10, 10), +RABBITIZER_DEF_REG(R5900_VI, vi11, 11), +RABBITIZER_DEF_REG(R5900_VI, vi12, 12), +RABBITIZER_DEF_REG(R5900_VI, vi13, 13), +RABBITIZER_DEF_REG(R5900_VI, vi14, 14), +RABBITIZER_DEF_REG(R5900_VI, vi15, 15), +RABBITIZER_DEF_REG(R5900_VI, vi16, 16), +RABBITIZER_DEF_REG(R5900_VI, vi17, 17), +RABBITIZER_DEF_REG(R5900_VI, vi18, 18), +RABBITIZER_DEF_REG(R5900_VI, vi19, 19), +RABBITIZER_DEF_REG(R5900_VI, vi20, 20), +RABBITIZER_DEF_REG(R5900_VI, vi21, 21), +RABBITIZER_DEF_REG(R5900_VI, vi22, 22), +RABBITIZER_DEF_REG(R5900_VI, vi23, 23), +RABBITIZER_DEF_REG(R5900_VI, vi24, 24), +RABBITIZER_DEF_REG(R5900_VI, vi25, 25), +RABBITIZER_DEF_REG(R5900_VI, vi26, 26), +RABBITIZER_DEF_REG(R5900_VI, vi27, 27), +RABBITIZER_DEF_REG(R5900_VI, vi28, 28), +RABBITIZER_DEF_REG(R5900_VI, vi29, 29), +RABBITIZER_DEF_REG(R5900_VI, vi30, 30), +RABBITIZER_DEF_REG(R5900_VI, vi31, 31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop0.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop0.inc new file mode 100644 index 00000000..fdac94d1 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop0.inc @@ -0,0 +1,19 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_MEM_ADDR, 0), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_DRAM_ADDR, 1), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_RD_LEN, 2), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_WR_LEN, 3), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_STATUS, 4), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_DMA_FULL, 5), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_DMA_BUSY, 6), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, SP_SEMAPHORE, 7), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_START, 8), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_END, 9), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_CURRENT, 10), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_STATUS, 11), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_CLOCK, 12), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_BUFBUSY, 13), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_PIPEBUSY, 14), + RABBITIZER_DEF_REG_NODOLLAR(RSP_COP0, DPC_TMEM, 15), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2.inc new file mode 100644 index 00000000..d22b673f --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(RSP_COP2, 0, 0), + RABBITIZER_DEF_REG(RSP_COP2, 1, 1), + RABBITIZER_DEF_REG(RSP_COP2, 2, 2), + RABBITIZER_DEF_REG(RSP_COP2, 3, 3), + RABBITIZER_DEF_REG(RSP_COP2, 4, 4), + RABBITIZER_DEF_REG(RSP_COP2, 5, 5), + RABBITIZER_DEF_REG(RSP_COP2, 6, 6), + RABBITIZER_DEF_REG(RSP_COP2, 7, 7), + RABBITIZER_DEF_REG(RSP_COP2, 8, 8), + RABBITIZER_DEF_REG(RSP_COP2, 9, 9), + RABBITIZER_DEF_REG(RSP_COP2, 10, 10), + RABBITIZER_DEF_REG(RSP_COP2, 11, 11), + RABBITIZER_DEF_REG(RSP_COP2, 12, 12), + RABBITIZER_DEF_REG(RSP_COP2, 13, 13), + RABBITIZER_DEF_REG(RSP_COP2, 14, 14), + RABBITIZER_DEF_REG(RSP_COP2, 15, 15), + RABBITIZER_DEF_REG(RSP_COP2, 16, 16), + RABBITIZER_DEF_REG(RSP_COP2, 17, 17), + RABBITIZER_DEF_REG(RSP_COP2, 18, 18), + RABBITIZER_DEF_REG(RSP_COP2, 19, 19), + RABBITIZER_DEF_REG(RSP_COP2, 20, 20), + RABBITIZER_DEF_REG(RSP_COP2, 21, 21), + RABBITIZER_DEF_REG(RSP_COP2, 22, 22), + RABBITIZER_DEF_REG(RSP_COP2, 23, 23), + RABBITIZER_DEF_REG(RSP_COP2, 24, 24), + RABBITIZER_DEF_REG(RSP_COP2, 25, 25), + RABBITIZER_DEF_REG(RSP_COP2, 26, 26), + RABBITIZER_DEF_REG(RSP_COP2, 27, 27), + RABBITIZER_DEF_REG(RSP_COP2, 28, 28), + RABBITIZER_DEF_REG(RSP_COP2, 29, 29), + RABBITIZER_DEF_REG(RSP_COP2, 30, 30), + RABBITIZER_DEF_REG(RSP_COP2, 31, 31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2Control.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2Control.inc new file mode 100644 index 00000000..0f730f31 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspCop2Control.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 0, 0), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 1, 1), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 2, 2), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 3, 3), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 4, 4), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 5, 5), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 6, 6), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 7, 7), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 8, 8), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 9, 9), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 10, 10), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 11, 11), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 12, 12), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 13, 13), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 14, 14), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 15, 15), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 16, 16), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 17, 17), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 18, 18), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 19, 19), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 20, 20), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 21, 21), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 22, 22), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 23, 23), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 24, 24), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 25, 25), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 26, 26), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 27, 27), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 28, 28), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 29, 29), + RABBITIZER_DEF_REG(RSP_COP2_CONTROL, 30, 30), + RABBITIZER_DEF_REG(COP1_CONTROL, 31, 31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspGpr.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspGpr.inc new file mode 100644 index 00000000..490926cd --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspGpr.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(RSP_GPR, zero, 0), + RABBITIZER_DEF_REG(RSP_GPR, 1, 1), + RABBITIZER_DEF_REG(RSP_GPR, 2, 2), + RABBITIZER_DEF_REG(RSP_GPR, 3, 3), + RABBITIZER_DEF_REG(RSP_GPR, 4, 4), + RABBITIZER_DEF_REG(RSP_GPR, 5, 5), + RABBITIZER_DEF_REG(RSP_GPR, 6, 6), + RABBITIZER_DEF_REG(RSP_GPR, 7, 7), + RABBITIZER_DEF_REG(RSP_GPR, 8, 8), + RABBITIZER_DEF_REG(RSP_GPR, 9, 9), + RABBITIZER_DEF_REG(RSP_GPR, 10, 10), + RABBITIZER_DEF_REG(RSP_GPR, 11, 11), + RABBITIZER_DEF_REG(RSP_GPR, 12, 12), + RABBITIZER_DEF_REG(RSP_GPR, 13, 13), + RABBITIZER_DEF_REG(RSP_GPR, 14, 14), + RABBITIZER_DEF_REG(RSP_GPR, 15, 15), + RABBITIZER_DEF_REG(RSP_GPR, 16, 16), + RABBITIZER_DEF_REG(RSP_GPR, 17, 17), + RABBITIZER_DEF_REG(RSP_GPR, 18, 18), + RABBITIZER_DEF_REG(RSP_GPR, 19, 19), + RABBITIZER_DEF_REG(RSP_GPR, 20, 20), + RABBITIZER_DEF_REG(RSP_GPR, 21, 21), + RABBITIZER_DEF_REG(RSP_GPR, 22, 22), + RABBITIZER_DEF_REG(RSP_GPR, 23, 23), + RABBITIZER_DEF_REG(RSP_GPR, 24, 24), + RABBITIZER_DEF_REG(RSP_GPR, 25, 25), + RABBITIZER_DEF_REG(RSP_GPR, 26, 26), + RABBITIZER_DEF_REG(RSP_GPR, 27, 27), + RABBITIZER_DEF_REG(RSP_GPR, 28, 28), + RABBITIZER_DEF_REG(RSP_GPR, 29, 29), + RABBITIZER_DEF_REG(RSP_GPR, 30, 30), + RABBITIZER_DEF_REG(RSP_GPR, ra, 31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspVector.inc b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspVector.inc new file mode 100644 index 00000000..c2676d91 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/instructions/registers/RabbitizerRegister_RspVector.inc @@ -0,0 +1,35 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + + RABBITIZER_DEF_REG(RSP_VECTOR, v0, 0), + RABBITIZER_DEF_REG(RSP_VECTOR, v1, 1), + RABBITIZER_DEF_REG(RSP_VECTOR, v2, 2), + RABBITIZER_DEF_REG(RSP_VECTOR, v3, 3), + RABBITIZER_DEF_REG(RSP_VECTOR, v4, 4), + RABBITIZER_DEF_REG(RSP_VECTOR, v5, 5), + RABBITIZER_DEF_REG(RSP_VECTOR, v6, 6), + RABBITIZER_DEF_REG(RSP_VECTOR, v7, 7), + RABBITIZER_DEF_REG(RSP_VECTOR, v8, 8), + RABBITIZER_DEF_REG(RSP_VECTOR, v9, 9), + RABBITIZER_DEF_REG(RSP_VECTOR, v10, 10), + RABBITIZER_DEF_REG(RSP_VECTOR, v11, 11), + RABBITIZER_DEF_REG(RSP_VECTOR, v12, 12), + RABBITIZER_DEF_REG(RSP_VECTOR, v13, 13), + RABBITIZER_DEF_REG(RSP_VECTOR, v14, 14), + RABBITIZER_DEF_REG(RSP_VECTOR, v15, 15), + RABBITIZER_DEF_REG(RSP_VECTOR, v16, 16), + RABBITIZER_DEF_REG(RSP_VECTOR, v17, 17), + RABBITIZER_DEF_REG(RSP_VECTOR, v18, 18), + RABBITIZER_DEF_REG(RSP_VECTOR, v19, 19), + RABBITIZER_DEF_REG(RSP_VECTOR, v20, 20), + RABBITIZER_DEF_REG(RSP_VECTOR, v21, 21), + RABBITIZER_DEF_REG(RSP_VECTOR, v22, 22), + RABBITIZER_DEF_REG(RSP_VECTOR, v23, 23), + RABBITIZER_DEF_REG(RSP_VECTOR, v24, 24), + RABBITIZER_DEF_REG(RSP_VECTOR, v25, 25), + RABBITIZER_DEF_REG(RSP_VECTOR, v26, 26), + RABBITIZER_DEF_REG(RSP_VECTOR, v27, 27), + RABBITIZER_DEF_REG(RSP_VECTOR, v28, 28), + RABBITIZER_DEF_REG(RSP_VECTOR, v29, 29), + RABBITIZER_DEF_REG(RSP_VECTOR, v30, 30), + RABBITIZER_DEF_REG(RSP_VECTOR, v31, 31), diff --git a/tools/ido5.3_recomp/rabbitizer/include/rabbitizer.h b/tools/ido5.3_recomp/rabbitizer/include/rabbitizer.h new file mode 100644 index 00000000..5bae2d58 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/include/rabbitizer.h @@ -0,0 +1,25 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#ifndef RABBITIZER_H +#define RABBITIZER_H +#pragma once + +#include "common/Utils.h" +#include "common/RabbitizerVersion.h" +#include "common/RabbitizerConfig.h" + +#include "instructions/RabbitizerOperandType.h" +#include "instructions/RabbitizerInstrId.h" +#include "instructions/RabbitizerInstrSuffix.h" +#include "instructions/RabbitizerInstrDescriptor.h" +#include "instructions/RabbitizerRegister.h" +#include "instructions/RabbitizerInstruction.h" +#include "instructions/RabbitizerInstructionRsp.h" +#include "instructions/RabbitizerInstructionR5900.h" + +#include "analysis/RabbitizerTrackedRegisterState.h" +#include "analysis/RabbitizerLoPairingInfo.h" +#include "analysis/RabbitizerRegistersTracker.h" + +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/src/analysis/RabbitizerLoPairingInfo.c b/tools/ido5.3_recomp/rabbitizer/src/analysis/RabbitizerLoPairingInfo.c new file mode 100644 index 00000000..0b4dc795 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/analysis/RabbitizerLoPairingInfo.c @@ -0,0 +1,14 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "analysis/RabbitizerLoPairingInfo.h" + +void RabbitizerLoPairingInfo_Init(RabbitizerLoPairingInfo *self) { + *self = (RabbitizerLoPairingInfo){ + .instrOffset = 0, + .value = 0, + .shouldProcess = false, + .isGpRel = false, + .isGpGot = false, + }; +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/analysis/RabbitizerRegistersTracker.c b/tools/ido5.3_recomp/rabbitizer/src/analysis/RabbitizerRegistersTracker.c new file mode 100644 index 00000000..82913688 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/analysis/RabbitizerRegistersTracker.c @@ -0,0 +1,425 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "analysis/RabbitizerRegistersTracker.h" + +#include + +#include "common/Utils.h" +#include "common/RabbitizerConfig.h" +#include "instructions/RabbitizerRegister.h" + +// TODO: abi checks + +void RabbitizerRegistersTracker_init(RabbitizerRegistersTracker *self, const RabbitizerRegistersTracker *other) { + size_t i; + + for (i = 0; i < ARRAY_COUNT(self->registers); i++) { + RabbitizerTrackedRegisterState_init(&self->registers[i], i); + if (other != NULL) { + RabbitizerTrackedRegisterState_copyState(&self->registers[i], &other->registers[i]); + } + } +} + +void RabbitizerRegistersTracker_destroy(RabbitizerRegistersTracker *self) { + for (size_t i = 0; i < ARRAY_COUNT(self->registers); i++) { + RabbitizerTrackedRegisterState_destroy(&self->registers[i]); + } +} + +// TODO: simplify logic +bool RabbitizerRegistersTracker_moveRegisters(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr) { + RabbitizerTrackedRegisterState *dstState; + RabbitizerTrackedRegisterState *srcState; + uint8_t reg; + uint8_t rd = RAB_INSTR_GET_rd(instr); + uint8_t rs = RAB_INSTR_GET_rs(instr); + uint8_t rt = RAB_INSTR_GET_rt(instr); + + if (!RabbitizerInstrDescriptor_maybeIsMove(instr->descriptor)) { + return false; + } + if (rt == 0 && rs == 0) { + // ? + // RabbitizerTrackedRegisterState_clear(dstState); + return false; + } + + if (rt == 0) { + reg = rs; + } else if (rs == 0) { + reg = rt; + } else { + if (RabbitizerTrackedRegisterState_hasAnyValue(&self->registers[rs]) && !RabbitizerTrackedRegisterState_hasAnyValue(&self->registers[rt])) { + reg = rs; + } else if (RabbitizerTrackedRegisterState_hasAnyValue(&self->registers[rt]) && !RabbitizerTrackedRegisterState_hasAnyValue(&self->registers[rs])) { + reg = rt; + } else if (rd == rs) { // Check stuff like `addu $3, $3, $2` + reg = rt; + if (self->registers[rs].hasLuiValue || self->registers[rs].hasGpGot) { + reg = rs; + } + } else if (rd == rt) { + reg = rs; + if (self->registers[rt].hasLuiValue || self->registers[rt].hasGpGot) { + reg = rt; + } + } else { + // ? + // RabbitizerTrackedRegisterState_clear(dstState); + return false; + } + + srcState = &self->registers[reg]; + RabbitizerTrackedRegisterState_copyState(&self->registers[rd], srcState); + return true; + } + + srcState = &self->registers[reg]; + dstState = &self->registers[rd]; + + if (RabbitizerTrackedRegisterState_hasAnyValue(srcState)) { + RabbitizerTrackedRegisterState_copyState(dstState, srcState); + return true; + } + + RabbitizerTrackedRegisterState_clear(dstState); + return false; +} + +void RabbitizerRegistersTracker_overwriteRegisters(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset) { + bool shouldRemove = false; + uint8_t reg = 0; + RabbitizerTrackedRegisterState *state = NULL; + + if (RabbitizerRegistersTracker_moveRegisters(self, instr)) { + return; + } + + if (RabbitizerInstrDescriptor_isFloat(instr->descriptor)) { + switch (instr->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_mtc1: + case RABBITIZER_INSTR_ID_cpu_dmtc1: + case RABBITIZER_INSTR_ID_cpu_ctc1: + // IDO usually use a reg as a temp when loading a constant value + // into the float coprocessor, after that IDO never re-uses the value + // in that reg for anything else + shouldRemove = true; + reg = RAB_INSTR_GET_rt(instr); + break; + + default: + break; + } + } else if (RabbitizerInstrDescriptor_isRType(instr->descriptor) || + (RabbitizerInstrDescriptor_isBranch(instr->descriptor) && RabbitizerInstrDescriptor_isIType(instr->descriptor))) { + // $at usually is a one-use reg + uint8_t at = 0; + + if (RAB_INSTR_GET_rs(instr) == 1) { + at = RAB_INSTR_GET_rs(instr); + } else if (RAB_INSTR_GET_rt(instr) == 1) { + at = RAB_INSTR_GET_rt(instr); + } + + state = &self->registers[at]; + if (state->hasLoValue || state->hasLuiValue || state->hasGpGot) { + shouldRemove = true; + reg = at; + } + } + + if (RabbitizerInstrDescriptor_modifiesRt(instr->descriptor)) { + shouldRemove = true; + reg = RAB_INSTR_GET_rt(instr); + if (RabbitizerInstrDescriptor_canBeHi(instr->descriptor)) { + RabbitizerTrackedRegisterState_clearLo(&self->registers[RAB_INSTR_GET_rt(instr)]); + shouldRemove = false; + } + } + if (RabbitizerInstrDescriptor_modifiesRd(instr->descriptor)) { + shouldRemove = true; + reg = RAB_INSTR_GET_rd(instr); + } + + if (shouldRemove) { + state = &self->registers[reg]; +#if 0 + if (state->hasLuiValue) { + self->_printDebugInfo_clearRegister(instr, reg) + } +#endif + + RabbitizerTrackedRegisterState_clearHi(state); + if (!RabbitizerTrackedRegisterState_wasSetInCurrentOffset(state, instrOffset)) { + RabbitizerTrackedRegisterState_clearGp(state); + RabbitizerTrackedRegisterState_clearLo(state); + } + } +} + +void RabbitizerRegistersTracker_unsetRegistersAfterFuncCall(RabbitizerRegistersTracker *self, UNUSED const RabbitizerInstruction *instr, + const RabbitizerInstruction *prevInstr) { + RabbitizerTrackedRegisterState *state = NULL; + + if (!RabbitizerInstrDescriptor_doesLink(prevInstr->descriptor)) { + return; + } + + if (RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_O32 || RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_NUMERIC) { + for (size_t reg = 0; reg < ARRAY_COUNT(self->registers); reg++) { + switch (reg) { + case RABBITIZER_REG_GPR_O32_at: + case RABBITIZER_REG_GPR_O32_v0: + case RABBITIZER_REG_GPR_O32_v1: + case RABBITIZER_REG_GPR_O32_a0: + case RABBITIZER_REG_GPR_O32_a1: + case RABBITIZER_REG_GPR_O32_a2: + case RABBITIZER_REG_GPR_O32_a3: + case RABBITIZER_REG_GPR_O32_t0: + case RABBITIZER_REG_GPR_O32_t1: + case RABBITIZER_REG_GPR_O32_t2: + case RABBITIZER_REG_GPR_O32_t3: + case RABBITIZER_REG_GPR_O32_t4: + case RABBITIZER_REG_GPR_O32_t5: + case RABBITIZER_REG_GPR_O32_t6: + case RABBITIZER_REG_GPR_O32_t7: + case RABBITIZER_REG_GPR_O32_t8: + case RABBITIZER_REG_GPR_O32_t9: + case RABBITIZER_REG_GPR_O32_ra: + state = &self->registers[reg]; +#if 0 + if (state.hasLuiValue) { + self->_printDebugInfo_clearRegister(instr, reg) + } +#endif + RabbitizerTrackedRegisterState_clear(state); + break; + + default: + break; + } + } + } else if (RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_N32 || RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_N64) { + for (size_t reg = 0; reg < ARRAY_COUNT(self->registers); reg++) { + switch (reg) { + case RABBITIZER_REG_GPR_N32_at: + case RABBITIZER_REG_GPR_N32_v0: + case RABBITIZER_REG_GPR_N32_v1: + case RABBITIZER_REG_GPR_N32_a0: + case RABBITIZER_REG_GPR_N32_a1: + case RABBITIZER_REG_GPR_N32_a2: + case RABBITIZER_REG_GPR_N32_a3: + case RABBITIZER_REG_GPR_N32_a4: + case RABBITIZER_REG_GPR_N32_a5: + case RABBITIZER_REG_GPR_N32_a6: + case RABBITIZER_REG_GPR_N32_a7: + case RABBITIZER_REG_GPR_N32_t0: + case RABBITIZER_REG_GPR_N32_t1: + case RABBITIZER_REG_GPR_N32_t2: + case RABBITIZER_REG_GPR_N32_t3: + case RABBITIZER_REG_GPR_N32_t8: + case RABBITIZER_REG_GPR_N32_t9: + case RABBITIZER_REG_GPR_N32_ra: + state = &self->registers[reg]; +#if 0 + if (state.hasLuiValue) { + self->_printDebugInfo_clearRegister(instr, reg) + } +#endif + RabbitizerTrackedRegisterState_clear(state); + break; + + default: + break; + } + } + } +} + +bool RabbitizerRegistersTracker_getAddressIfCanSetType(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, + uint32_t *dstAddress) { + const RabbitizerTrackedRegisterState *state = &self->registers[RAB_INSTR_GET_rs(instr)]; + + if (!state->hasLoValue) { + return false; + } + + if (!state->dereferenced || instrOffset == state->dereferenceOffset) { + *dstAddress = state->value; + return true; + } + + return false; +} + +bool RabbitizerRegistersTracker_getJrInfo(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int *dstOffset, uint32_t *dstAddress) { + const RabbitizerTrackedRegisterState *state = &self->registers[RAB_INSTR_GET_rs(instr)]; + + if (!state->hasLoValue || !state->dereferenced) { + return false; + } + + *dstOffset = state->loOffset; + *dstAddress = state->value; + return true; +} + +// prevInstr can be NULL +void RabbitizerRegistersTracker_processLui(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, + const RabbitizerInstruction *prevInstr) { + RabbitizerTrackedRegisterState *state = NULL; + + assert(RabbitizerInstrDescriptor_canBeHi(instr->descriptor)); + + state = &self->registers[RAB_INSTR_GET_rt(instr)]; + RabbitizerTrackedRegisterState_clear(state); + RabbitizerTrackedRegisterState_setHi(state, RabbitizerInstruction_getImmediate(instr), instrOffset); + + if (prevInstr != NULL) { + // If the previous instructions is a branch likely, then nulify + // the effects of this instruction for future analysis + state->luiSetOnBranchLikely = RabbitizerInstrDescriptor_isBranchLikely(prevInstr->descriptor) || RabbitizerInstruction_isUnconditionalBranch(prevInstr); + } +} + +void RabbitizerRegistersTracker_processGpLoad(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset) { + RabbitizerTrackedRegisterState *state = NULL; + + assert(RabbitizerInstrDescriptor_canBeLo(instr->descriptor)); + + state = &self->registers[RAB_INSTR_GET_rt(instr)]; + + RabbitizerTrackedRegisterState_clear(state); + RabbitizerTrackedRegisterState_setGpLoad(state, RabbitizerInstruction_getImmediate(instr), instrOffset); +} + +bool RabbitizerRegistersTracker_getLuiOffsetForConstant(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int *dstOffset) { + const RabbitizerTrackedRegisterState *state = &self->registers[RAB_INSTR_GET_rs(instr)]; + + if (!state->hasLuiValue) { + return false; + } + + *dstOffset = state->luiOffset; + return true; +} + +void RabbitizerRegistersTracker_processConstant(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, uint32_t value, int offset) { + RabbitizerTrackedRegisterState *stateDst = &self->registers[RAB_INSTR_GET_rt(instr)]; + + RabbitizerTrackedRegisterState_setLo(stateDst, value, offset); +} + +// TODO: this function should not be changing the state of the tracker +bool RabbitizerRegistersTracker_getLuiOffsetForLo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, int instrOffset, int *dstOffset, + bool *dstIsGp) { + const RabbitizerTrackedRegisterState *state = &self->registers[RAB_INSTR_GET_rs(instr)]; + + if (state->hasLuiValue && !state->luiSetOnBranchLikely) { + *dstOffset = state->luiOffset; + *dstIsGp = false; + return true; + } + + // TODO: abi + if (RAB_INSTR_GET_rs(instr) == 28) { // $gp + *dstOffset = 0; + *dstIsGp = true; + return true; + } + + if (RabbitizerInstrDescriptor_modifiesRt(instr->descriptor) && RabbitizerInstrDescriptor_doesDereference(instr->descriptor)) { + if (state->hasLoValue && !state->dereferenced) { + // Simulate a dereference + RabbitizerTrackedRegisterState_dereferenceState(&self->registers[RAB_INSTR_GET_rt(instr)], state, instrOffset); + } + } + + return false; +} + +RabbitizerLoPairingInfo RabbitizerRegistersTracker_preprocessLoAndGetInfo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, + int instrOffset) { + const RabbitizerTrackedRegisterState *state = &self->registers[RAB_INSTR_GET_rs(instr)]; + RabbitizerLoPairingInfo pairingInfo; + + RabbitizerLoPairingInfo_Init(&pairingInfo); + + if (state->hasLuiValue && !state->luiSetOnBranchLikely) { + pairingInfo.instrOffset = state->luiOffset; + pairingInfo.value = state->value; + pairingInfo.shouldProcess = true; + return pairingInfo; + } + + if ((RAB_INSTR_GET_rs(instr) == RABBITIZER_REG_GPR_O32_gp) || (RAB_INSTR_GET_rs(instr) == RABBITIZER_REG_GPR_N32_gp)) { + pairingInfo.value = state->value; + pairingInfo.isGpRel = true; + pairingInfo.shouldProcess = true; + return pairingInfo; + } + + if (state->hasGpGot) { + pairingInfo.instrOffset = state->gpGotOffset; + pairingInfo.value = state->value; + pairingInfo.shouldProcess = true; + pairingInfo.isGpGot = true; + return pairingInfo; + } + + if (RabbitizerInstrDescriptor_modifiesRt(instr->descriptor) && RabbitizerInstrDescriptor_doesDereference(instr->descriptor)) { + if (state->hasLoValue && !state->dereferenced) { + // Simulate a dereference + RabbitizerTrackedRegisterState_dereferenceState(&self->registers[RAB_INSTR_GET_rt(instr)], state, instrOffset); + } + } + + return pairingInfo; +} + +void RabbitizerRegistersTracker_processLo(RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr, uint32_t value, int offset) { + RabbitizerTrackedRegisterState *stateDst; + + if (!RabbitizerInstrDescriptor_modifiesRt(instr->descriptor)) { + return; + } + + stateDst = &self->registers[RAB_INSTR_GET_rt(instr)]; + RabbitizerTrackedRegisterState_setLo(stateDst, value, offset); + if (RabbitizerInstrDescriptor_doesDereference(instr->descriptor)) { + RabbitizerTrackedRegisterState_deref(stateDst, offset); + } + if (RAB_INSTR_GET_rt(instr) == RAB_INSTR_GET_rs(instr)) { + RabbitizerTrackedRegisterState_clearHi(stateDst); + RabbitizerTrackedRegisterState_clearGp(stateDst); + } +} + +bool RabbitizerRegistersTracker_hasLoButNoHi(const RabbitizerRegistersTracker *self, const RabbitizerInstruction *instr) { + const RabbitizerTrackedRegisterState *state; + + assert(instr != NULL); + + state = &self->registers[RAB_INSTR_GET_rs(instr)]; + return state->hasLoValue && !state->hasLuiValue; +} + +#if 0 +def _printDebugInfo_clearRegister(self, instr: rabbitizer.Instruction, reg: int, currentVram: int|None=None) -> None: + if not common.GlobalConfig.PRINT_SYMBOL_FINDER_DEBUG_INFO: + return + + if currentVram is None: + return + + print("Clearing reg:") + // print() + print(f"vram: {currentVram:X}") + print(instr) + print(self->registers) + // TODO + // print(f"deleting {reg} / {instr->getRegisterName(reg)}") + print() +#endif diff --git a/tools/ido5.3_recomp/rabbitizer/src/analysis/RabbitizerTrackedRegisterState.c b/tools/ido5.3_recomp/rabbitizer/src/analysis/RabbitizerTrackedRegisterState.c new file mode 100644 index 00000000..91298945 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/analysis/RabbitizerTrackedRegisterState.c @@ -0,0 +1,142 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "analysis/RabbitizerTrackedRegisterState.h" + +#include + +#include "common/Utils.h" +#include "instructions/RabbitizerRegister.h" + +void RabbitizerTrackedRegisterState_init(RabbitizerTrackedRegisterState *self, int registerNum) { + self->registerNum = registerNum; + + self->hasLuiValue = false; + self->luiOffset = 0; + self->luiSetOnBranchLikely = false; + + self->hasGpGot = false; + self->gpGotOffset = 0; + + self->hasLoValue = false; + self->loOffset = 0; + self->dereferenced = false; + self->dereferenceOffset = 0; + + self->value = 0; +} + +void RabbitizerTrackedRegisterState_destroy(UNUSED RabbitizerTrackedRegisterState *self) { +} + +void RabbitizerTrackedRegisterState_clear(RabbitizerTrackedRegisterState *self) { + self->hasLuiValue = false; + self->luiOffset = 0; + self->luiSetOnBranchLikely = false; + + self->hasGpGot = false; + self->gpGotOffset = 0; + + self->hasLoValue = false; + self->loOffset = 0; + self->dereferenced = false; + self->dereferenceOffset = 0; + self->value = 0; +} + +void RabbitizerTrackedRegisterState_clearHi(RabbitizerTrackedRegisterState *self) { + self->hasLuiValue = false; + self->luiOffset = 0; + self->luiSetOnBranchLikely = false; +} + +void RabbitizerTrackedRegisterState_clearGp(RabbitizerTrackedRegisterState *self) { + self->hasGpGot = false; + self->gpGotOffset = 0; +} + +void RabbitizerTrackedRegisterState_clearLo(RabbitizerTrackedRegisterState *self) { + self->hasLoValue = false; + self->loOffset = 0; + self->dereferenced = false; + self->dereferenceOffset = 0; +} + +void RabbitizerTrackedRegisterState_copyState(RabbitizerTrackedRegisterState *self, const RabbitizerTrackedRegisterState *other) { + self->hasLuiValue = other->hasLuiValue; + self->luiOffset = other->luiOffset; + self->luiSetOnBranchLikely = other->luiSetOnBranchLikely; + + self->hasGpGot = other->hasGpGot; + self->gpGotOffset = other->gpGotOffset; + + self->hasLoValue = other->hasLoValue; + self->loOffset = other->loOffset; + self->dereferenced = other->dereferenced; + self->dereferenceOffset = other->dereferenceOffset; + + self->value = other->value; +} + +void RabbitizerTrackedRegisterState_setHi(RabbitizerTrackedRegisterState *self, uint32_t value, int offset) { + assert(!self->hasGpGot); + + self->hasLuiValue = true; + self->luiOffset = offset; + self->value = value << 16; +} + +void RabbitizerTrackedRegisterState_setGpLoad(RabbitizerTrackedRegisterState *self, uint32_t value, int offset) { + assert(!self->hasLuiValue); + + self->hasGpGot = true; + self->gpGotOffset = offset; + self->value = value; +} + +void RabbitizerTrackedRegisterState_setLo(RabbitizerTrackedRegisterState *self, uint32_t value, int offset) { + self->value = value; + self->loOffset = offset; + self->hasLoValue = true; + self->dereferenced = false; + self->dereferenceOffset = 0; +} + +void RabbitizerTrackedRegisterState_deref(RabbitizerTrackedRegisterState *self, int offset) { + self->dereferenced = true; + self->dereferenceOffset = offset; +} + +void RabbitizerTrackedRegisterState_dereferenceState(RabbitizerTrackedRegisterState *self, const RabbitizerTrackedRegisterState *other, int offset) { + assert(other->hasLoValue); + assert(!other->dereferenced); + + RabbitizerTrackedRegisterState_copyState(self, other); + RabbitizerTrackedRegisterState_deref(self, offset); +} + +bool RabbitizerTrackedRegisterState_hasAnyValue(const RabbitizerTrackedRegisterState *self) { + return self->hasLuiValue || self->hasLoValue || self->hasGpGot; +} + +bool RabbitizerTrackedRegisterState_wasSetInCurrentOffset(const RabbitizerTrackedRegisterState *self, int offset) { + return self->loOffset == offset || self->dereferenceOffset == offset; +} + +void RabbitizerTrackedRegisterState_fprint(const RabbitizerTrackedRegisterState *self, FILE *outFile) { + fprintf(outFile, "TrackedRegisterState(%i / %s)\n", self->registerNum, RabbitizerRegister_getNameGpr(self->registerNum)); + + fprintf(outFile, " hasLuiValue: %s\n", self->hasLuiValue ? "true" : "false"); + fprintf(outFile, " luiOffset: 0x%X\n", self->luiOffset); + fprintf(outFile, " luiSetOnBranchLikely: %s\n", self->luiSetOnBranchLikely ? "true" : "false"); + + fprintf(outFile, " hasGpGot: %s\n", self->hasGpGot ? "true" : "false"); + fprintf(outFile, " gpGotOffset: 0x%X\n", self->gpGotOffset); + + fprintf(outFile, " hasLoValue: %s\n", self->hasLoValue ? "true" : "false"); + fprintf(outFile, " loOffset: %X\n", self->loOffset); + fprintf(outFile, " dereferenced: %s\n", self->dereferenced ? "true" : "false"); + fprintf(outFile, " dereferenceOffset: %X\n", self->dereferenceOffset); + + fprintf(outFile, " value: %X\n", self->value); +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/common/RabbitizerConfig.c b/tools/ido5.3_recomp/rabbitizer/src/common/RabbitizerConfig.c new file mode 100644 index 00000000..88b554db --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/common/RabbitizerConfig.c @@ -0,0 +1,50 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "common/RabbitizerConfig.h" + +#include + +RabbitizerAbi RabbitizerAbi_fromStr(const char *name) { + if (name == NULL || strcmp(name, "32") == 0 || strcmp(name, "o32") == 0 || strcmp(name, "O32") == 0) { + return RABBITIZER_ABI_O32; + } + if (strcmp(name, "n32") == 0 || strcmp(name, "N32") == 0) { + return RABBITIZER_ABI_N32; + } + if (strcmp(name, "64") == 0 || strcmp(name, "n64") == 0 || strcmp(name, "N64") == 0) { + return RABBITIZER_ABI_N64; + } + return RABBITIZER_ABI_NUMERIC; +} + +RabbitizerConfig RabbitizerConfig_Cfg = { + .regNames = { + .namedRegisters = true, + .gprAbiNames = RABBITIZER_ABI_O32, + .fprAbiNames = RABBITIZER_ABI_NUMERIC, + .userFpcCsr = true, + .vr4300Cop0NamedRegisters = true, + .vr4300RspCop0NamedRegisters = true, + }, + .pseudos = { + .enablePseudos = true, + .pseudoBeqz = true, + .pseudoBnez = true, + .pseudoB = true, + .pseudoMove = true, + .pseudoNot = true, + .pseudoNegu = true, + .pseudoBal = true, + }, + .toolchainTweaks = { + .treatJAsUnconditionalBranch = false, + .sn64DivFix = false, + }, + .misc = { + .opcodeLJust = 7+4, + .unknownInstrComment = true, + .omit0XOnSmallImm = false, + .upperCaseImm = true, + } +}; diff --git a/tools/ido5.3_recomp/rabbitizer/src/common/RabbitizerVersion.c b/tools/ido5.3_recomp/rabbitizer/src/common/RabbitizerVersion.c new file mode 100644 index 00000000..f700fbfe --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/common/RabbitizerVersion.c @@ -0,0 +1,10 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "common/RabbitizerVersion.h" + +const int RabVersion_Major = RAB_VERSION_MAJOR; +const int RabVersion_Minor = RAB_VERSION_MINOR; +const int RabVersion_Patch = RAB_VERSION_PATCH; + +const char RabVersion_Str[] = RAB_VERSION_STR; diff --git a/tools/ido5.3_recomp/rabbitizer/src/common/Utils.c b/tools/ido5.3_recomp/rabbitizer/src/common/Utils.c new file mode 100644 index 00000000..7dd02622 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/common/Utils.c @@ -0,0 +1,78 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "common/Utils.h" + +#include +#include + +int32_t RabbitizerUtils_From2Complement(uint32_t number, int bits) { + bool isNegative = number & (1ULL << (bits - 1)); + + if (isNegative) { + return -((~number + 1) & ((1ULL << bits) - 1)); + } + + return number; +} + +size_t RabbitizerUtils_CharFill(char *dst, int count, char fillchar) { + if (count <= 0) { + return 0; + } + + memset(dst, fillchar, count); + + return count; +} + +size_t RabbitizerUtils_escapeString(char *dst, size_t dstSize, const char *src, size_t srcSize) { + size_t srcPos = 0; + size_t dstpos = 0; + + for (; srcPos < srcSize && dstpos < dstSize; srcPos++, src++) { + // The cases of this switch are sorted by ASCII order + switch (*src) { + case '\a': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, 'a'); + break; + + case '\t': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, 't'); + break; + + case '\n': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, 'n'); + break; + + case '\f': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, 'f'); + break; + + case '\r': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, 'r'); + break; + + case '"': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '"'); + break; + + case '\\': + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, '\\'); + break; + + default: + RABUTILS_BUFFER_WRITE_CHAR(dst, dstpos, *src); + break; + } + } + + return dstpos; +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstrDescriptor.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstrDescriptor.c new file mode 100644 index 00000000..a6e143f9 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstrDescriptor.c @@ -0,0 +1,104 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstrDescriptor.h" + +#include "instructions/RabbitizerInstruction.h" + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) [RABBITIZER_INSTR_ID_##prefix##_##name] = { __VA_ARGS__ }, + +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + +const RabbitizerInstrDescriptor RabbitizerInstrDescriptor_Descriptors[] = { +#include "instructions/instr_id/RabbitizerInstrId_cpu.inc" +#include "instructions/instr_id/RabbitizerInstrId_rsp.inc" +#include "instructions/instr_id/RabbitizerInstrId_r5900.inc" +}; + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + +bool RabbitizerInstrDescriptor_isUnknownType(const RabbitizerInstrDescriptor *self) { + return self->instrType == RABBITIZER_INSTR_TYPE_UNKNOWN; +} +bool RabbitizerInstrDescriptor_isJType(const RabbitizerInstrDescriptor *self) { + return self->instrType == RABBITIZER_INSTR_TYPE_J; +} +bool RabbitizerInstrDescriptor_isIType(const RabbitizerInstrDescriptor *self) { + return self->instrType == RABBITIZER_INSTR_TYPE_I; +} +bool RabbitizerInstrDescriptor_isRType(const RabbitizerInstrDescriptor *self) { + return self->instrType == RABBITIZER_INSTR_TYPE_R; +} +bool RabbitizerInstrDescriptor_isRegimmType(const RabbitizerInstrDescriptor *self) { + return self->instrType == RABBITIZER_INSTR_TYPE_REGIMM; +} + +RabbitizerInstrSuffix RabbitizerInstrDescriptor_instrSuffix(const RabbitizerInstrDescriptor *self) { + return self->instrSuffix; +} + +bool RabbitizerInstrDescriptor_isBranch(const RabbitizerInstrDescriptor *self) { + return self->isBranch; +} +bool RabbitizerInstrDescriptor_isBranchLikely(const RabbitizerInstrDescriptor *self) { + return self->isBranchLikely; +} +bool RabbitizerInstrDescriptor_isJump(const RabbitizerInstrDescriptor *self) { + return self->isJump; +} +bool RabbitizerInstrDescriptor_isTrap(const RabbitizerInstrDescriptor *self) { + return self->isTrap; +} + +bool RabbitizerInstrDescriptor_isFloat(const RabbitizerInstrDescriptor *self) { + return self->isFloat; +} +bool RabbitizerInstrDescriptor_isDouble(const RabbitizerInstrDescriptor *self) { + return self->isDouble; +} + +bool RabbitizerInstrDescriptor_isUnsigned(const RabbitizerInstrDescriptor *self) { + return self->isUnsigned; +} + +bool RabbitizerInstrDescriptor_modifiesRt(const RabbitizerInstrDescriptor *self) { + return self->modifiesRt; +} +bool RabbitizerInstrDescriptor_modifiesRd(const RabbitizerInstrDescriptor *self) { + return self->modifiesRd; +} + +bool RabbitizerInstrDescriptor_notEmitedByCompilers(const RabbitizerInstrDescriptor *self) { + return self->notEmitedByCompilers; +} + +bool RabbitizerInstrDescriptor_canBeHi(const RabbitizerInstrDescriptor *self) { + return self->canBeHi; +} +bool RabbitizerInstrDescriptor_canBeLo(const RabbitizerInstrDescriptor *self) { + return self->canBeLo; +} +bool RabbitizerInstrDescriptor_doesLink(const RabbitizerInstrDescriptor *self) { + return self->doesLink; +} +bool RabbitizerInstrDescriptor_doesDereference(const RabbitizerInstrDescriptor *self) { + return self->doesDereference; +} +bool RabbitizerInstrDescriptor_doesLoad(const RabbitizerInstrDescriptor *self) { + return self->doesLoad; +} +bool RabbitizerInstrDescriptor_doesStore(const RabbitizerInstrDescriptor *self) { + return self->doesStore; +} +bool RabbitizerInstrDescriptor_maybeIsMove(const RabbitizerInstrDescriptor *self) { + return self->maybeIsMove; +} + +bool RabbitizerInstrDescriptor_isPseudo(const RabbitizerInstrDescriptor *self) { + return self->isPseudo; +} + +RabbitizerArchitectureVersion RabbitizerInstrDescriptor_getArchitectureVersion(const RabbitizerInstrDescriptor *self) { + return self->architectureVersion; +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstrId.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstrId.c new file mode 100644 index 00000000..b8643314 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstrId.c @@ -0,0 +1,28 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstrId.h" + +#include + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) [RABBITIZER_INSTR_ID_##prefix##_##name] = #name, + +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) [RABBITIZER_INSTR_ID_##prefix##_##name] = #altname, + +const char *RabbitizerInstrId_Names[] = { +#include "instructions/instr_id/RabbitizerInstrId_cpu.inc" +#include "instructions/instr_id/RabbitizerInstrId_rsp.inc" +#include "instructions/instr_id/RabbitizerInstrId_r5900.inc" +}; + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + +const char *RabbitizerInstrId_getOpcodeName(RabbitizerInstrId uniqueId) { + assert(uniqueId >= RABBITIZER_INSTR_ID_cpu_INVALID && uniqueId < RABBITIZER_INSTR_ID_ALL_MAX); + assert(uniqueId != RABBITIZER_INSTR_ID_cpu_MAX); + assert(uniqueId != RABBITIZER_INSTR_ID_rsp_MAX); + assert(uniqueId != RABBITIZER_INSTR_ID_r5900_MAX); + + return RabbitizerInstrId_Names[uniqueId]; +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstrSuffix.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstrSuffix.c new file mode 100644 index 00000000..cef16b30 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstrSuffix.c @@ -0,0 +1,62 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstrSuffix.h" + +#include + +#include "common/Utils.h" +#include "instructions/RabbitizerInstruction.h" +#include "instructions/RabbitizerInstructionRsp.h" +#include "instructions/RabbitizerInstructionR5900.h" + +typedef size_t (*InstrSuffixCallback)(const RabbitizerInstruction *self, char *dst); + +size_t RabbitizerInstrSuffix_None(UNUSED const RabbitizerInstruction *self, UNUSED char *dst) { + return 0; +} + +size_t RabbitizerInstrSuffixR5900_xyzw(const RabbitizerInstruction *self, char *dst) { + size_t totalSize = 0; + + if (RAB_INSTR_R5900_GET_xyzw_x(self) || RAB_INSTR_R5900_GET_xyzw_y(self) || RAB_INSTR_R5900_GET_xyzw_z(self) || RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '.'); + } + + if (RAB_INSTR_R5900_GET_xyzw_x(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'x'); + } + if (RAB_INSTR_R5900_GET_xyzw_y(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'y'); + } + if (RAB_INSTR_R5900_GET_xyzw_z(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'z'); + } + if (RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'w'); + } + + return totalSize; +} +const InstrSuffixCallback instrSuffixCallbacks[] = { + [RABINSTRSUFFIX_NONE] = RabbitizerInstrSuffix_None, + + [RABINSTRSUFFIX_R5900_xyzw] = RabbitizerInstrSuffixR5900_xyzw, +}; + +size_t RabbitizerInstrSuffix_getSizeForBuffer(UNUSED const RabbitizerInstruction *self, UNUSED RabbitizerInstrSuffix instrSuffix) { + // Just hardcode the size of the bigger possible suffix, faster than actually computing it. + return 5; +} + +size_t RabbitizerInstrSuffix_processSuffix(const RabbitizerInstruction *self, char *dst, RabbitizerInstrSuffix instrSuffix) { + InstrSuffixCallback callback; + + assert(instrSuffix >= RABINSTRSUFFIX_NONE); + assert(instrSuffix < RABINSTRSUFFIX_MAX); + + callback = instrSuffixCallbacks[instrSuffix]; + assert(callback != NULL); + + return callback(self, dst); +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction.c new file mode 100644 index 00000000..5e0bf056 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction.c @@ -0,0 +1,368 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstruction.h" + +#include + +#include "common/RabbitizerConfig.h" +#include "instructions/RabbitizerRegister.h" +#include "instructions/RabbitizerInstructionRsp.h" +#include "instructions/RabbitizerInstructionR5900.h" + +void RabbitizerInstruction_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram) { + self->word = word; + self->_mandatorybits = 0; + + self->uniqueId = RABBITIZER_INSTR_ID_cpu_INVALID; + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + + self->vram = vram; + self->_handwrittenCategory = false; + self->inHandwrittenFunction = false; + self->category = RABBITIZER_INSTRCAT_CPU; +} + +void RabbitizerInstruction_destroy(UNUSED RabbitizerInstruction *self) { +} + +/* General getters */ + +uint32_t RabbitizerInstruction_getRaw(const RabbitizerInstruction *self) { + return self->word; +} + +uint32_t RabbitizerInstruction_getImmediate(const RabbitizerInstruction *self) { + return RAB_INSTR_GET_immediate(self); +} +int32_t RabbitizerInstruction_getProcessedImmediate(const RabbitizerInstruction *self) { + if (RabbitizerInstrDescriptor_isUnsigned(self->descriptor)) { + return RAB_INSTR_GET_immediate(self); + } + return RabbitizerUtils_From2Complement(RAB_INSTR_GET_immediate(self), 16); +} + +uint32_t RabbitizerInstruction_getInstrIndex(const RabbitizerInstruction *self) { + return RAB_INSTR_GET_instr_index(self); +} + +uint32_t RabbitizerInstruction_getInstrIndexAsVram(const RabbitizerInstruction *self) { + uint32_t vram = RabbitizerInstruction_getInstrIndex(self) << 2; + + if (self->vram == 0) { + vram |= 0x80000000; + } else { + // Jumps are PC-region branches. The upper bits are filled with the address in the delay slot + vram |= (self->vram + 4) & 0xFF000000; + } + return vram; +} + +int32_t RabbitizerInstruction_getBranchOffset(const RabbitizerInstruction *self) { + int32_t diff = RabbitizerUtils_From2Complement(RabbitizerInstruction_getImmediate(self), 16); + + return diff * 4 + 4; +} + +int32_t RabbitizerInstruction_getGenericBranchOffset(const RabbitizerInstruction *self, uint32_t currentVram) { + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_j) { + return RabbitizerInstruction_getInstrIndexAsVram(self) - currentVram; + } + return RabbitizerInstruction_getBranchOffset(self); +} + +/* General getters */ + +void RabbitizerInstruction_blankOut(RabbitizerInstruction *self) { + size_t i; + + for (i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID; i++) { + switch (self->descriptor->operands[i]) { + case RAB_OPERAND_cpu_rs: + self->word = RAB_INSTR_PACK_rs(self->word, 0); + break; + + case RAB_OPERAND_cpu_rt: + self->word = RAB_INSTR_PACK_rt(self->word, 0); + break; + + case RAB_OPERAND_cpu_rd: + self->word = RAB_INSTR_PACK_rd(self->word, 0); + break; + + case RAB_OPERAND_cpu_sa: + self->word = RAB_INSTR_PACK_sa(self->word, 0); + break; + + case RAB_OPERAND_cpu_zero: + break; + + case RAB_OPERAND_cpu_cop0d: + self->word = RAB_INSTR_PACK_cop0d(self->word, 0); + break; + + case RAB_OPERAND_cpu_fs: + self->word = RAB_INSTR_PACK_fs(self->word, 0); + break; + + case RAB_OPERAND_cpu_ft: + self->word = RAB_INSTR_PACK_ft(self->word, 0); + break; + + case RAB_OPERAND_cpu_fd: + self->word = RAB_INSTR_PACK_fd(self->word, 0); + break; + + case RAB_OPERAND_cpu_cop1cs: + self->word = RAB_INSTR_PACK_cop1cs(self->word, 0); + break; + + case RAB_OPERAND_cpu_cop2t: + self->word = RAB_INSTR_PACK_cop2t(self->word, 0); + break; + + case RAB_OPERAND_cpu_op: + self->word = RAB_INSTR_PACK_op(self->word, 0); + break; + + case RAB_OPERAND_cpu_code: + self->word = RAB_INSTR_PACK_code(self->word, 0); + break; + + case RAB_OPERAND_cpu_code_lower: + self->word = RAB_INSTR_PACK_code_lower(self->word, 0); + break; + + case RAB_OPERAND_cpu_copraw: + self->word = RAB_INSTR_PACK_copraw(self->word, 0); + break; + + case RAB_OPERAND_cpu_label: + self->word = RAB_INSTR_PACK_instr_index(self->word, 0); + break; + + case RAB_OPERAND_cpu_immediate: + self->word = RAB_INSTR_PACK_immediate(self->word, 0); + break; + + case RAB_OPERAND_cpu_branch_target_label: + self->word = RAB_INSTR_PACK_immediate(self->word, 0); + break; + + case RAB_OPERAND_cpu_immediate_base: + self->word = RAB_INSTR_PACK_rs(self->word, 0); + self->word = RAB_INSTR_PACK_immediate(self->word, 0); + break; + + /* rsp */ + case RAB_OPERAND_rsp_rs: + self->word = RAB_INSTR_PACK_rs(self->word, 0); + break; + + case RAB_OPERAND_rsp_rt: + self->word = RAB_INSTR_PACK_rt(self->word, 0); + break; + + case RAB_OPERAND_rsp_rd: + self->word = RAB_INSTR_PACK_rd(self->word, 0); + break; + + case RAB_OPERAND_rsp_cop0d: + self->word = RAB_INSTR_PACK_cop0d(self->word, 0); + break; + + case RAB_OPERAND_rsp_cop2t: + self->word = RAB_INSTR_RSP_PACK_cop2t(self->word, 0); + break; + + case RAB_OPERAND_rsp_cop2cd: + self->word = RAB_INSTR_RSP_PACK_cop2cd(self->word, 0); + break; + + case RAB_OPERAND_rsp_vs: + self->word = RAB_INSTR_RSP_PACK_vs(self->word, 0); + break; + + case RAB_OPERAND_rsp_vt: + self->word = RAB_INSTR_RSP_PACK_vt(self->word, 0); + break; + + case RAB_OPERAND_rsp_vd: + self->word = RAB_INSTR_RSP_PACK_vd(self->word, 0); + break; + + case RAB_OPERAND_rsp_vt_elementhigh: + self->word = RAB_INSTR_RSP_PACK_vt(self->word, 0); + self->word = RAB_INSTR_RSP_PACK_elementhigh(self->word, 0); + break; + + case RAB_OPERAND_rsp_vt_elementlow: + self->word = RAB_INSTR_RSP_PACK_vt(self->word, 0); + self->word = RAB_INSTR_RSP_PACK_elementlow(self->word, 0); + break; + + case RAB_OPERAND_rsp_vd_de: + self->word = RAB_INSTR_RSP_PACK_vd(self->word, 0); + self->word = RAB_INSTR_RSP_PACK_de(self->word, 0); + break; + + case RAB_OPERAND_rsp_vs_index: + self->word = RAB_INSTR_RSP_PACK_vs(self->word, 0); + self->word = RAB_INSTR_RSP_PACK_index(self->word, 0); + break; + + case RAB_OPERAND_rsp_offset_rs: + self->word = RAB_INSTR_RSP_PACK_offset(self->word, 0); + self->word = RAB_INSTR_PACK_rs(self->word, 0); + break; + + case RAB_OPERAND_rsp_immediate_base: + self->word = RAB_INSTR_PACK_rs(self->word, 0); + self->word = RAB_INSTR_PACK_immediate(self->word, 0); + break; + /* rsp */ + + /* r5900 */ + case RAB_OPERAND_r5900_I: + case RAB_OPERAND_r5900_Q: + case RAB_OPERAND_r5900_R: + case RAB_OPERAND_r5900_ACC: + // Not real registers encoded on the instruction itself + break; + + case RAB_OPERAND_r5900_ACCxyzw: + self->word = RAB_INSTR_R5900_PACK_xyzw_x(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_y(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_z(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_w(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfs: + self->word = RAB_INSTR_R5900_PACK_vfs(self->word, 0); + break; + + case RAB_OPERAND_r5900_vft: + self->word = RAB_INSTR_R5900_PACK_vft(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfd: + self->word = RAB_INSTR_R5900_PACK_vfd(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfsxyzw: + self->word = RAB_INSTR_R5900_PACK_vfs(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_x(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_y(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_z(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_w(self->word, 0); + break; + + case RAB_OPERAND_r5900_vftxyzw: + self->word = RAB_INSTR_R5900_PACK_vft(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_x(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_y(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_z(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_w(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfdxyzw: + self->word = RAB_INSTR_R5900_PACK_vfd(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_x(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_y(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_z(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_xyzw_w(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfsn: + self->word = RAB_INSTR_R5900_PACK_vfs(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_n(self->word, 0); + break; + + case RAB_OPERAND_r5900_vftn: + self->word = RAB_INSTR_R5900_PACK_vft(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_n(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfdn: + self->word = RAB_INSTR_R5900_PACK_vfd(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_n(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfsl: + self->word = RAB_INSTR_R5900_PACK_vfs(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_l(self->word, 0); + break; + + case RAB_OPERAND_r5900_vftl: + self->word = RAB_INSTR_R5900_PACK_vft(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_l(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfdl: + self->word = RAB_INSTR_R5900_PACK_vfd(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_l(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfsm: + self->word = RAB_INSTR_R5900_PACK_vfs(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_m(self->word, 0); + break; + + case RAB_OPERAND_r5900_vftm: + self->word = RAB_INSTR_R5900_PACK_vft(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_m(self->word, 0); + break; + + case RAB_OPERAND_r5900_vfdm: + self->word = RAB_INSTR_R5900_PACK_vfd(self->word, 0); + self->word = RAB_INSTR_R5900_PACK_m(self->word, 0); + break; + + case RAB_OPERAND_r5900_vis: + self->word = RAB_INSTR_R5900_PACK_vis(self->word, 0); + break; + + case RAB_OPERAND_r5900_vit: + self->word = RAB_INSTR_R5900_PACK_vit(self->word, 0); + break; + + case RAB_OPERAND_r5900_vid: + self->word = RAB_INSTR_R5900_PACK_vid(self->word, 0); + break; + + case RAB_OPERAND_r5900_vis_predecr: + self->word = RAB_INSTR_R5900_PACK_vis(self->word, 0); + break; + + case RAB_OPERAND_r5900_vit_predecr: + self->word = RAB_INSTR_R5900_PACK_vit(self->word, 0); + break; + + case RAB_OPERAND_r5900_vid_predecr: + self->word = RAB_INSTR_R5900_PACK_vid(self->word, 0); + break; + + case RAB_OPERAND_r5900_vis_postincr: + self->word = RAB_INSTR_R5900_PACK_vis(self->word, 0); + break; + + case RAB_OPERAND_r5900_vit_postincr: + self->word = RAB_INSTR_R5900_PACK_vit(self->word, 0); + break; + + case RAB_OPERAND_r5900_vid_postincr: + self->word = RAB_INSTR_R5900_PACK_vid(self->word, 0); + break; + + case RAB_OPERAND_r5900_immediate5: + self->word = RAB_INSTR_R5900_PACK_imm5(self->word, 0); + break; + /* r5900 */ + + case RAB_OPERAND_ALL_INVALID: + case RAB_OPERAND_ALL_MAX: + assert(self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID && self->descriptor->operands[i] != RAB_OPERAND_ALL_MAX); + break; + } + } +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Disassemble.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Disassemble.c new file mode 100644 index 00000000..3f94401c --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Disassemble.c @@ -0,0 +1,986 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstruction.h" +#include "instructions/RabbitizerInstructionRsp.h" +#include "instructions/RabbitizerInstructionR5900.h" + +#include +#include +#include + +#include "common/Utils.h" +#include "common/RabbitizerConfig.h" +#include "instructions/RabbitizerRegister.h" +#include "instructions/RabbitizerInstrSuffix.h" + +typedef size_t (*OperandCallback)(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength); + +size_t RabbitizerOperandType_process_cpu_rs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameGpr(RAB_INSTR_GET_rs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_rt(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameGpr(RAB_INSTR_GET_rt(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_rd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameGpr(RAB_INSTR_GET_rd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_zero(UNUSED const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameGpr(0); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_cop0d(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop0(RAB_INSTR_GET_cop0d(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_fs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop1(RAB_INSTR_GET_fs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_ft(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop1(RAB_INSTR_GET_ft(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_fd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop1(RAB_INSTR_GET_fd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_cop1cs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop1Control(RAB_INSTR_GET_cop1cs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_cop2t(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameCop2(RAB_INSTR_GET_cop2t(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_sa(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + +// TODO: consider making this a proper configuration +#if 0 + if (RAB_INSTR_GET_sa(self) < 10) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", RAB_INSTR_GET_sa(self)); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%x", RAB_INSTR_GET_sa(self)); + } +#endif + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", RAB_INSTR_GET_sa(self)); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_op(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + +// TODO: consider making this a proper configuration +#if 0 + if (RAB_INSTR_GET_op(self) < 10) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", RAB_INSTR_GET_op(self)); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%x", RAB_INSTR_GET_op(self)); + } +#endif + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%02X", RAB_INSTR_GET_op(self)); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_code(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + int code = RAB_INSTR_GET_code_upper(self); + int lower = RAB_INSTR_GET_code_lower(self); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", code); + if (lower) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, ", %i", lower); + } + + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_code_lower(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + int code_lower = RAB_INSTR_GET_code_lower(self); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", code_lower); + + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_copraw(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%X", RAB_INSTR_GET_copraw(self)); + + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_label(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + if ((immOverride != NULL) && (immOverrideLength > 0)) { + memcpy(dst, immOverride, immOverrideLength); + return immOverrideLength; + } + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "func_%06X", RabbitizerInstruction_getInstrIndexAsVram(self)); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_immediate(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + int32_t number; + + if ((immOverride != NULL) && (immOverrideLength > 0)) { + memcpy(dst, immOverride, immOverrideLength); + return immOverrideLength; + } + + number = RabbitizerInstruction_getProcessedImmediate(self); + if (RabbitizerConfig_Cfg.misc.omit0XOnSmallImm) { + if (number > -10 && number < 10) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", number); + return totalSize; + } + } + if (number < 0) { + if (RabbitizerConfig_Cfg.misc.upperCaseImm) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "-0x%X", -number); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "-0x%x", -number); + } + } else { + if (RabbitizerConfig_Cfg.misc.upperCaseImm) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%X", number); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%x", number); + } + } + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_branch_target_label(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + if ((immOverride != NULL) && (immOverrideLength > 0)) { + memcpy(dst, immOverride, immOverrideLength); + return immOverrideLength; + } + + RABUTILS_BUFFER_CPY(dst, totalSize, ". + 4 + ("); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_immediate(self, dst, NULL, 0)); + RABUTILS_BUFFER_CPY(dst, totalSize, " << 2)"); + return totalSize; +} + +size_t RabbitizerOperandType_process_cpu_immediate_base(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + +// TODO: consider making this a proper configuration +#if 0 + if ((immOverride != NULL) && (immOverrideLength > 0) || RAB_INSTR_GET_immediate(self) != 0) { + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_immediate(self, dst, immOverride, immOverrideLength)); + } +#endif + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_immediate(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_rs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_rs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspGpr(RAB_INSTR_GET_rs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_rt(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspGpr(RAB_INSTR_GET_rt(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_rd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspGpr(RAB_INSTR_GET_rd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_cop0d(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspCop0(RAB_INSTR_GET_cop0d(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_cop2t(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspCop2(RAB_INSTR_RSP_GET_cop2t(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_cop2cd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspCop2Control(RAB_INSTR_RSP_GET_cop2cd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspVector(RAB_INSTR_RSP_GET_vs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vt(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspVector(RAB_INSTR_RSP_GET_vt(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameRspVector(RAB_INSTR_RSP_GET_vd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vt_elementhigh(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t element; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_vt(self, dst, immOverride, immOverrideLength)); + + element = RAB_INSTR_RSP_GET_elementhigh(self); + if (element != 0) { + if ((element & 0x8) == 0x8) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", element & 7); + } else if ((element & 0xC) == 0x4) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%ih]", element & (~0xC)); + } else if ((element & 0xE) == 0x2) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%iq]", element & (~0xE)); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", element); + } + } + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vt_elementlow(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_vt(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", RAB_INSTR_RSP_GET_elementlow(self)); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vd_de(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t de; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_vd(self, dst, immOverride, immOverrideLength)); + + de = RAB_INSTR_RSP_GET_de(self); + if ((de & 0x8) == 0x8) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", de & (~0x8)); + } else if ((de & 0xC) == 0x4) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%ih]", de & (~0xC)); + } else if ((de & 0xE) == 0x2) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%iq]", de & (~0xE)); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", de); + } + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_vs_index(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_vs(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "[%i]", RAB_INSTR_RSP_GET_index(self)); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_offset_rs(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%X", RabbitizerInstructionRsp_GetOffsetVector(self)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_rs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + return totalSize; +} + +size_t RabbitizerOperandType_process_rsp_immediate_base(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + +// TODO: consider making this a proper configuration +#if 0 + if ((immOverride != NULL) && (immOverrideLength > 0) || RAB_INSTR_GET_immediate(self) != 0) { + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_immediate(self, dst, immOverride, immOverrideLength)); + } +#endif + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_cpu_immediate(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_rsp_rs(self, dst, immOverride, immOverrideLength)); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_I(UNUSED const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_CPY(dst, totalSize, "$I"); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_Q(UNUSED const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_CPY(dst, totalSize, "$Q"); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_R(UNUSED const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_CPY(dst, totalSize, "$R"); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_ACC(UNUSED const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, + UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_CPY(dst, totalSize, "$ACC"); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_ACCxyzw(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_ACC(self, dst, immOverride, immOverrideLength)); + +#if 0 + if (RAB_INSTR_R5900_GET_xyzw_x(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'x'); + } + if (RAB_INSTR_R5900_GET_xyzw_y(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'y'); + } + if (RAB_INSTR_R5900_GET_xyzw_z(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'z'); + } + if (RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'w'); + } +#endif + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfs(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VF(RAB_INSTR_R5900_GET_vfs(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vft(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VF(RAB_INSTR_R5900_GET_vft(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfd(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VF(RAB_INSTR_R5900_GET_vfd(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfsxyzw(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfs(self, dst, immOverride, immOverrideLength)); + +#if 0 + if (RAB_INSTR_R5900_GET_xyzw_x(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'x'); + } + if (RAB_INSTR_R5900_GET_xyzw_y(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'y'); + } + if (RAB_INSTR_R5900_GET_xyzw_z(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'z'); + } + if (RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'w'); + } +#endif + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vftxyzw(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vft(self, dst, immOverride, immOverrideLength)); + +#if 0 + if (RAB_INSTR_R5900_GET_xyzw_x(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'x'); + } + if (RAB_INSTR_R5900_GET_xyzw_y(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'y'); + } + if (RAB_INSTR_R5900_GET_xyzw_z(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'z'); + } + if (RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'w'); + } +#endif + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfdxyzw(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfd(self, dst, immOverride, immOverrideLength)); + +#if 0 + if (RAB_INSTR_R5900_GET_xyzw_x(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'x'); + } + if (RAB_INSTR_R5900_GET_xyzw_y(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'y'); + } + if (RAB_INSTR_R5900_GET_xyzw_z(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'z'); + } + if (RAB_INSTR_R5900_GET_xyzw_w(self)) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, 'w'); + } +#endif + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfsn(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfs(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_n(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vftn(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vft(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_n(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfdn(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfd(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_n(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfsl(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfs(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_l(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vftl(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vft(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_l(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfdl(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfd(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_l(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfsm(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfs(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_m(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vftm(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vft(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_m(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vfdm(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + uint8_t n; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vfd(self, dst, immOverride, immOverrideLength)); + + n = RAB_INSTR_R5900_GET_m(self); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, "xyzw"[n]); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vis(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VI(RAB_INSTR_R5900_GET_vis(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vit(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VI(RAB_INSTR_R5900_GET_vit(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vid(const RabbitizerInstruction *self, char *dst, UNUSED const char *immOverride, UNUSED size_t immOverrideLength) { + size_t totalSize = 0; + const char *reg = RabbitizerRegister_getNameR5900VI(RAB_INSTR_R5900_GET_vid(self)); + + RABUTILS_BUFFER_CPY(dst, totalSize, reg); + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vis_predecr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vis(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vit_predecr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vit(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vid_predecr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '-'); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vid(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vis_postincr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vis(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vit_postincr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vit(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_vid_postincr(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '('); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerOperandType_process_r5900_vid(self, dst, immOverride, immOverrideLength)); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '+'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ')'); + + return totalSize; +} + +size_t RabbitizerOperandType_process_r5900_immediate5(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + int32_t number; + + if ((immOverride != NULL) && (immOverrideLength > 0)) { + memcpy(dst, immOverride, immOverrideLength); + return immOverrideLength; + } + + number = RAB_INSTR_R5900_GET_imm5(self); + if (RabbitizerConfig_Cfg.misc.omit0XOnSmallImm) { + if (number > -10 && number < 10) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "%i", number); + return totalSize; + } + } + if (number < 0) { + if (RabbitizerConfig_Cfg.misc.upperCaseImm) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "-0x%X", -number); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "-0x%x", -number); + } + } else { + if (RabbitizerConfig_Cfg.misc.upperCaseImm) { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%X", number); + } else { + RABUTILS_BUFFER_SPRINTF(dst, totalSize, "0x%x", number); + } + } + return totalSize; +} + +#define RAB_DEF_OPERAND(prefix, operand) [RAB_OPERAND_##prefix##_##operand] = RabbitizerOperandType_process_##prefix##_##operand, + +const OperandCallback instrOpercandCallbacks[] = { +#include "instructions/operands/RabbitizerOperandType_cpu.inc" +#include "instructions/operands/RabbitizerOperandType_rsp.inc" +#include "instructions/operands/RabbitizerOperandType_r5900.inc" +}; + +#undef RAB_DEF_OPERAND + +size_t RabbitizerInstruction_getSizeForBufferOperandsDisasm(const RabbitizerInstruction *self, size_t immOverrideLength) { + size_t totalSize = 0; + char auxBuffer[0x100] = { 0 }; + char immOverride[0x100] = { 0 }; + + for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID; i++) { + RabbitizerOperandType operand; + OperandCallback callback; + + if (i != 0) { + totalSize += 2; + } + + operand = self->descriptor->operands[i]; + assert(operand > RAB_OPERAND_ALL_INVALID); + assert(operand < RAB_OPERAND_ALL_MAX); + + callback = instrOpercandCallbacks[operand]; + assert(callback != NULL); + totalSize += callback(self, auxBuffer, immOverride, immOverrideLength); + } + + return totalSize; +} + +size_t RabbitizerInstruction_disassembleOperands(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength) { + size_t totalSize = 0; + + for (size_t i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID; i++) { + RabbitizerOperandType operand; + OperandCallback callback; + + if (i != 0) { + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ','); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ' '); + } + + operand = self->descriptor->operands[i]; + assert(operand > RAB_OPERAND_ALL_INVALID); + assert(operand < RAB_OPERAND_ALL_MAX); + + callback = instrOpercandCallbacks[operand]; + assert(callback != NULL); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, callback(self, dst, immOverride, immOverrideLength)); + } + + *dst = '\0'; + return totalSize; +} + +size_t RabbitizerInstruction_getSizeForBufferInstrDisasm(const RabbitizerInstruction *self, size_t immOverrideLength, int extraLJust) { + size_t totalSize = 0; + size_t opcodeNameLength; + + opcodeNameLength = strlen(RabbitizerInstrId_getOpcodeName(self->uniqueId)); + + totalSize += opcodeNameLength; + + totalSize += RabbitizerInstrSuffix_getSizeForBuffer(self, self->descriptor->instrSuffix); + + if (self->descriptor->operands[0] == RAB_OPERAND_ALL_INVALID) { + // There are no operands + return totalSize; + } + + if (RabbitizerConfig_Cfg.misc.opcodeLJust > 0) { + totalSize += RabbitizerConfig_Cfg.misc.opcodeLJust; + } + if (extraLJust > 0) { + totalSize += extraLJust; + } + totalSize++; + + totalSize += RabbitizerInstruction_getSizeForBufferOperandsDisasm(self, immOverrideLength); + + return totalSize; +} + +size_t RabbitizerInstruction_disassembleInstruction(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength, + int extraLJust) { + size_t totalSize = 0; + const char *opcodeName = RabbitizerInstrId_getOpcodeName(self->uniqueId); + + RABUTILS_BUFFER_CPY(dst, totalSize, opcodeName); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerInstrSuffix_processSuffix(self, dst, self->descriptor->instrSuffix)); + + if (self->descriptor->operands[0] == RAB_OPERAND_ALL_INVALID) { + // There are no operands + *dst = '\0'; + return totalSize; + } + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerUtils_CharFill(dst, RabbitizerConfig_Cfg.misc.opcodeLJust + extraLJust - totalSize, ' ')); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ' '); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerInstruction_disassembleOperands(self, dst, immOverride, immOverrideLength)); + + *dst = '\0'; + return totalSize; +} + +size_t RabbitizerInstruction_getSizeForBufferDataDisasm(UNUSED const RabbitizerInstruction *self, int extraLJust) { + size_t totalSize = 0; + + totalSize += strlen(".word"); + totalSize += RabbitizerConfig_Cfg.misc.opcodeLJust + extraLJust; + totalSize += 11; + return totalSize; +} + +size_t RabbitizerInstruction_disassembleAsData(const RabbitizerInstruction *self, char *dst, int extraLJust) { + size_t totalSize = 0; + + RABUTILS_BUFFER_CPY(dst, totalSize, ".word"); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerUtils_CharFill(dst, RabbitizerConfig_Cfg.misc.opcodeLJust + extraLJust - totalSize, ' ')); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, " 0x%08X", RabbitizerInstruction_getRaw(self)); + return totalSize; +} + +bool RabbitizerInstruction_mustDisasmAsData(const RabbitizerInstruction *self) { + if (RabbitizerConfig_Cfg.toolchainTweaks.sn64DivFix) { + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_break) { + return true; + } + } + + if (!RabbitizerInstruction_isValid(self)) { + return true; + } + return false; +} + +size_t RabbitizerInstruction_getSizeForBuffer(const RabbitizerInstruction *self, size_t immOverrideLength, int extraLJust) { + if (!RabbitizerInstruction_isImplemented(self) || RabbitizerInstruction_mustDisasmAsData(self)) { + size_t totalSize = RabbitizerInstruction_getSizeForBufferDataDisasm(self, extraLJust); + + if (RabbitizerConfig_Cfg.misc.unknownInstrComment) { + totalSize += 40; + totalSize += 3; + totalSize += RabbitizerInstruction_getSizeForBufferInstrDisasm(self, immOverrideLength, extraLJust); + totalSize += 11; + } + return totalSize; + } + + return RabbitizerInstruction_getSizeForBufferInstrDisasm(self, immOverrideLength, extraLJust); +} + +size_t RabbitizerInstruction_disassemble(const RabbitizerInstruction *self, char *dst, const char *immOverride, size_t immOverrideLength, int extraLJust) { + assert(dst != NULL); + + if (!RabbitizerInstruction_isImplemented(self) || RabbitizerInstruction_mustDisasmAsData(self)) { + size_t totalSize = 0; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerInstruction_disassembleAsData(self, dst, extraLJust)); + + if (RabbitizerConfig_Cfg.misc.unknownInstrComment) { + uint32_t validBits; + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerUtils_CharFill(dst, 40 - totalSize, ' ')); + + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ' '); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, '#'); + RABUTILS_BUFFER_WRITE_CHAR(dst, totalSize, ' '); + + RABUTILS_BUFFER_ADVANCE(dst, totalSize, RabbitizerInstruction_disassembleInstruction(self, dst, immOverride, immOverrideLength, extraLJust)); + + validBits = RabbitizerInstruction_getValidBits(self); + + RABUTILS_BUFFER_SPRINTF(dst, totalSize, " # %08X", ((~validBits) & self->word)); + } + + return totalSize; + } + + return RabbitizerInstruction_disassembleInstruction(self, dst, immOverride, immOverrideLength, extraLJust); +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c new file mode 100644 index 00000000..136e4aa6 --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_Examination.c @@ -0,0 +1,840 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstruction.h" + +#include + +#include "common/RabbitizerConfig.h" +#include "instructions/RabbitizerInstructionRsp.h" +#include "instructions/RabbitizerInstructionR5900.h" +#include "instructions/RabbitizerRegister.h" + +bool RabbitizerInstruction_isImplemented(const RabbitizerInstruction *self) { + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_INVALID: + case RABBITIZER_INSTR_ID_rsp_INVALID: + case RABBITIZER_INSTR_ID_r5900_INVALID: + return false; + + default: + return true; + } +} + +bool RabbitizerInstruction_isLikelyHandwritten(const RabbitizerInstruction *self) { + if (self->_handwrittenCategory) { + return true; + } + + if (RabbitizerInstrDescriptor_isIType(self->descriptor) && !RabbitizerInstrDescriptor_isFloat(self->descriptor)) { + if (RAB_INSTR_GET_rs(self) == RABBITIZER_REG_GPR_O32_k0 || RAB_INSTR_GET_rs(self) == RABBITIZER_REG_GPR_O32_k1) { + return true; + } + if (RAB_INSTR_GET_rt(self) == RABBITIZER_REG_GPR_O32_k0 || RAB_INSTR_GET_rt(self) == RABBITIZER_REG_GPR_O32_k1) { + return true; + } + } + + if (RabbitizerInstrDescriptor_notEmitedByCompilers(self->descriptor)) { + return true; + } + + return false; +} + +bool RabbitizerInstruction_isNop(const RabbitizerInstruction *self) { + return self->word == 0; +} + +bool RabbitizerInstruction_isUnconditionalBranch(const RabbitizerInstruction *self) { + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_b) { + return true; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_beq && RAB_INSTR_GET_rt(self) == 0 && RAB_INSTR_GET_rs(self) == 0) { + return true; + } + if (RabbitizerConfig_Cfg.toolchainTweaks.treatJAsUnconditionalBranch && self->uniqueId == RABBITIZER_INSTR_ID_cpu_j) { + return true; + } + return false; +} + +bool RabbitizerInstruction_isJrRa(const RabbitizerInstruction *self) { + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_jr) { + // TODO: abi stuffs + return RAB_INSTR_GET_rs(self) == RABBITIZER_REG_GPR_O32_ra; + } + return false; +} + +bool RabbitizerInstruction_isJrNotRa(const RabbitizerInstruction *self) { + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_jr) { + // TODO: abi stuffs + return RAB_INSTR_GET_rs(self) != RABBITIZER_REG_GPR_O32_ra; + } + return false; +} + +bool RabbitizerInstruction_hasDelaySlot(const RabbitizerInstruction *self) { + return RabbitizerInstrDescriptor_isBranch(self->descriptor) || RabbitizerInstrDescriptor_isJump(self->descriptor); +} + +const char *RabbitizerInstruction_mapInstrToType(const RabbitizerInstruction *self) { + if (RabbitizerInstrDescriptor_isDouble(self->descriptor)) { + return "f64"; + } + if (RabbitizerInstrDescriptor_isFloat(self->descriptor)) { + return "f32"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_lwu) { + return "u32"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_lh || self->uniqueId == RABBITIZER_INSTR_ID_cpu_sh) { + return "s16"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_lhu) { + return "u16"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_lb || self->uniqueId == RABBITIZER_INSTR_ID_cpu_sb) { + return "s8"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_lbu) { + return "u8"; + } + if (self->uniqueId == RABBITIZER_INSTR_ID_cpu_ld || self->uniqueId == RABBITIZER_INSTR_ID_cpu_sd) { + return "s64"; + } + return NULL; +} + +bool RabbitizerInstruction_sameOpcode(const RabbitizerInstruction *self, const RabbitizerInstruction *other) { + if (!RabbitizerInstruction_isImplemented(self) || !RabbitizerInstruction_isImplemented(other)) { + return false; + } + return self->uniqueId == other->uniqueId; +} + +bool RabbitizerInstruction_sameOpcodeButDifferentArguments(const RabbitizerInstruction *self, const RabbitizerInstruction *other) { + if (!RabbitizerInstruction_sameOpcode(self, other)) { + return false; + } + return RabbitizerInstruction_getRaw(self) != RabbitizerInstruction_getRaw(other); +} + +bool RabbitizerInstruction_hasOperand(const RabbitizerInstruction *self, RabbitizerOperandType operand) { + size_t i; + + for (i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID; i++) { + if (self->descriptor->operands[i] == operand) { + return true; + } + } + + return false; +} + +bool RabbitizerInstruction_hasOperandAlias(const RabbitizerInstruction *self, RabbitizerOperandType operand) { + switch (operand) { + case RAB_OPERAND_cpu_rs: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_immediate_base)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_offset_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_immediate_base)) { + return true; + } + break; + + case RAB_OPERAND_cpu_immediate: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_immediate_base)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_branch_target_label)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_immediate_base)) { + return true; + } + break; + + case RAB_OPERAND_cpu_rt: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_rt)) { + return true; + } + break; + + case RAB_OPERAND_cpu_rd: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_rd)) { + return true; + } + break; + + case RAB_OPERAND_cpu_sa: + case RAB_OPERAND_cpu_zero: + // case RAB_OPERAND_cpu_function: + case RAB_OPERAND_cpu_cop0d: + case RAB_OPERAND_cpu_fs: + case RAB_OPERAND_cpu_ft: + case RAB_OPERAND_cpu_fd: + case RAB_OPERAND_cpu_cop1cs: + case RAB_OPERAND_cpu_cop2t: + case RAB_OPERAND_cpu_op: + case RAB_OPERAND_cpu_code: + case RAB_OPERAND_cpu_code_lower: + case RAB_OPERAND_cpu_copraw: + case RAB_OPERAND_cpu_label: + break; + + case RAB_OPERAND_cpu_branch_target_label: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_cpu_immediate)) { + return true; + } + break; + + case RAB_OPERAND_cpu_immediate_base: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_cpu_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_cpu_immediate)) { + return true; + } + break; + + /* rsp */ + case RAB_OPERAND_rsp_rs: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_offset_rs)) { + return true; + } + break; + + case RAB_OPERAND_rsp_rt: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_rt)) { + return true; + } + break; + + case RAB_OPERAND_rsp_rd: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_cpu_rd)) { + return true; + } + break; + + case RAB_OPERAND_rsp_cop0d: + case RAB_OPERAND_rsp_cop2t: + case RAB_OPERAND_rsp_cop2cd: + break; + + // case RAB_OPERAND_rsp_elementhigh: + // case RAB_OPERAND_rsp_elementlow: + // case RAB_OPERAND_rsp_index: + // case RAB_OPERAND_rsp_offset: + + case RAB_OPERAND_rsp_vs: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_vs_index)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vt: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_vt_elementhigh)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_vt_elementlow)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vd: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_rsp_vd_de)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vt_elementhigh: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_vt)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vt_elementlow: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_vt)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vd_de: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_vd)) { + return true; + } + break; + + case RAB_OPERAND_rsp_vs_index: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_vs)) { + return true; + } + break; + + case RAB_OPERAND_rsp_offset_rs: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_rs)) { + return true; + } + break; + + case RAB_OPERAND_rsp_immediate_base: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_rsp_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_cpu_rs)) { + return true; + } + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_cpu_immediate)) { + return true; + } + break; + /* rsp */ + + /* r5900 */ + case RAB_OPERAND_r5900_I: + case RAB_OPERAND_r5900_Q: + case RAB_OPERAND_r5900_R: + break; + + case RAB_OPERAND_r5900_ACC: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_ACCxyzw)) { + return true; + } + break; + + case RAB_OPERAND_r5900_ACCxyzw: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_ACC)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfs: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsxyzw)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsn)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsl)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsm)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vft: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftxyzw)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftn)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftl)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftm)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfd: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdxyzw)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdn)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdl)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdm)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfsxyzw: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfs)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsn)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vftxyzw: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vft)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftn)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfdxyzw: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfd)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdn)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfsn: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfs)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfsxyzw)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vftn: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vft)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vftxyzw)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfdn: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfd)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vfdxyzw)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfsl: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vfs)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vftl: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vft)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfdl: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vfd)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfsm: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vfs)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vftm: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vft)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vfdm: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vfd)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vis: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vis_predecr)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vis_postincr)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vit: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vit_predecr)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vit_postincr)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vid: + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vid_predecr)) { + return true; + } + if (RabbitizerInstruction_hasOperand(self, RAB_OPERAND_r5900_vid_postincr)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vis_predecr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vis)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vit_predecr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vit)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vid_predecr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vid)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vis_postincr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vis)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vit_postincr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vit)) { + return true; + } + break; + + case RAB_OPERAND_r5900_vid_postincr: + if (RabbitizerInstruction_hasOperandAlias(self, RAB_OPERAND_r5900_vid)) { + return true; + } + break; + + case RAB_OPERAND_r5900_immediate5: + break; + /* r5900 */ + + case RAB_OPERAND_ALL_INVALID: + case RAB_OPERAND_ALL_MAX: + assert(operand != RAB_OPERAND_ALL_INVALID && operand != RAB_OPERAND_ALL_MAX); + break; + } + + return RabbitizerInstruction_hasOperand(self, operand); +} + +uint32_t RabbitizerInstruction_getValidBits(const RabbitizerInstruction *self) { + size_t i; + uint32_t validbits; + + validbits = self->_mandatorybits; + + for (i = 0; i < ARRAY_COUNT(self->descriptor->operands) && self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID; i++) { + + switch (self->descriptor->operands[i]) { + case RAB_OPERAND_cpu_rs: + validbits = RAB_INSTR_PACK_rs(validbits, ~0); + break; + + case RAB_OPERAND_cpu_rt: + validbits = RAB_INSTR_PACK_rt(validbits, ~0); + break; + + case RAB_OPERAND_cpu_rd: + validbits = RAB_INSTR_PACK_rd(validbits, ~0); + break; + + case RAB_OPERAND_cpu_sa: + validbits = RAB_INSTR_PACK_sa(validbits, ~0); + break; + + case RAB_OPERAND_cpu_zero: + break; + + case RAB_OPERAND_cpu_cop0d: + validbits = RAB_INSTR_PACK_cop0d(validbits, ~0); + break; + + case RAB_OPERAND_cpu_fs: + validbits = RAB_INSTR_PACK_fs(validbits, ~0); + break; + + case RAB_OPERAND_cpu_ft: + validbits = RAB_INSTR_PACK_ft(validbits, ~0); + break; + + case RAB_OPERAND_cpu_fd: + validbits = RAB_INSTR_PACK_fd(validbits, ~0); + break; + + case RAB_OPERAND_cpu_cop1cs: + validbits = RAB_INSTR_PACK_cop1cs(validbits, ~0); + break; + + case RAB_OPERAND_cpu_cop2t: + validbits = RAB_INSTR_PACK_cop2t(validbits, ~0); + break; + + case RAB_OPERAND_cpu_op: + validbits = RAB_INSTR_PACK_op(validbits, ~0); + break; + + case RAB_OPERAND_cpu_code: + validbits = RAB_INSTR_PACK_code(validbits, ~0); + break; + + case RAB_OPERAND_cpu_code_lower: + validbits = RAB_INSTR_PACK_code_lower(validbits, ~0); + break; + + case RAB_OPERAND_cpu_copraw: + validbits = RAB_INSTR_PACK_copraw(validbits, ~0); + break; + + case RAB_OPERAND_cpu_label: + validbits = RAB_INSTR_PACK_instr_index(validbits, ~0); + break; + + case RAB_OPERAND_cpu_immediate: + validbits = RAB_INSTR_PACK_immediate(validbits, ~0); + break; + + case RAB_OPERAND_cpu_branch_target_label: + validbits = RAB_INSTR_PACK_immediate(validbits, ~0); + break; + + case RAB_OPERAND_cpu_immediate_base: + validbits = RAB_INSTR_PACK_immediate(validbits, ~0); + validbits = RAB_INSTR_PACK_rs(validbits, ~0); + break; + + /* rsp */ + case RAB_OPERAND_rsp_rs: + validbits = RAB_INSTR_PACK_rs(validbits, ~0); + break; + + case RAB_OPERAND_rsp_rt: + validbits = RAB_INSTR_PACK_rt(validbits, ~0); + break; + + case RAB_OPERAND_rsp_rd: + validbits = RAB_INSTR_PACK_rd(validbits, ~0); + break; + + case RAB_OPERAND_rsp_cop0d: + validbits = RAB_INSTR_PACK_cop0d(validbits, ~0); + break; + + case RAB_OPERAND_rsp_cop2t: + validbits = RAB_INSTR_RSP_PACK_cop2t(validbits, ~0); + break; + + case RAB_OPERAND_rsp_cop2cd: + validbits = RAB_INSTR_RSP_PACK_cop2cd(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vs: + validbits = RAB_INSTR_RSP_PACK_vs(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vt: + validbits = RAB_INSTR_RSP_PACK_vt(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vd: + validbits = RAB_INSTR_RSP_PACK_vd(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vt_elementhigh: + validbits = RAB_INSTR_RSP_PACK_vt(validbits, ~0); + validbits = RAB_INSTR_RSP_PACK_elementhigh(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vt_elementlow: + validbits = RAB_INSTR_RSP_PACK_vt(validbits, ~0); + validbits = RAB_INSTR_RSP_PACK_elementlow(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vd_de: + validbits = RAB_INSTR_RSP_PACK_vd(validbits, ~0); + validbits = RAB_INSTR_RSP_PACK_de(validbits, ~0); + break; + + case RAB_OPERAND_rsp_vs_index: + validbits = RAB_INSTR_RSP_PACK_vs(validbits, ~0); + validbits = RAB_INSTR_RSP_PACK_index(validbits, ~0); + break; + + case RAB_OPERAND_rsp_offset_rs: + validbits = RAB_INSTR_RSP_PACK_offset(validbits, ~0); + validbits = RAB_INSTR_PACK_rs(validbits, ~0); + break; + + case RAB_OPERAND_rsp_immediate_base: + validbits = RAB_INSTR_PACK_immediate(validbits, ~0); + validbits = RAB_INSTR_PACK_rs(validbits, ~0); + break; + /* rsp */ + + /* r5900 */ + case RAB_OPERAND_r5900_I: + case RAB_OPERAND_r5900_Q: + case RAB_OPERAND_r5900_R: + case RAB_OPERAND_r5900_ACC: + // Not real registers encoded on the instruction itself + break; + + case RAB_OPERAND_r5900_ACCxyzw: + validbits = RAB_INSTR_R5900_PACK_xyzw_x(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_y(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_z(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_w(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfs: + validbits = RAB_INSTR_R5900_PACK_vfs(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vft: + validbits = RAB_INSTR_R5900_PACK_vft(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfd: + validbits = RAB_INSTR_R5900_PACK_vfd(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfsxyzw: + validbits = RAB_INSTR_R5900_PACK_vfs(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_x(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_y(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_z(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_w(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vftxyzw: + validbits = RAB_INSTR_R5900_PACK_vft(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_x(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_y(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_z(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_w(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfdxyzw: + validbits = RAB_INSTR_R5900_PACK_vfd(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_x(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_y(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_z(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_xyzw_w(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfsn: + validbits = RAB_INSTR_R5900_PACK_vfs(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_n(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vftn: + validbits = RAB_INSTR_R5900_PACK_vft(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_n(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfdn: + validbits = RAB_INSTR_R5900_PACK_vfd(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_n(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfsl: + validbits = RAB_INSTR_R5900_PACK_vfs(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_l(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vftl: + validbits = RAB_INSTR_R5900_PACK_vft(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_l(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfdl: + validbits = RAB_INSTR_R5900_PACK_vfd(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_l(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfsm: + validbits = RAB_INSTR_R5900_PACK_vfs(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_m(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vftm: + validbits = RAB_INSTR_R5900_PACK_vft(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_m(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vfdm: + validbits = RAB_INSTR_R5900_PACK_vfd(validbits, ~0); + validbits = RAB_INSTR_R5900_PACK_m(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vis: + validbits = RAB_INSTR_R5900_PACK_vis(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vit: + validbits = RAB_INSTR_R5900_PACK_vit(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vid: + validbits = RAB_INSTR_R5900_PACK_vid(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vis_predecr: + validbits = RAB_INSTR_R5900_PACK_vis(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vit_predecr: + validbits = RAB_INSTR_R5900_PACK_vit(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vid_predecr: + validbits = RAB_INSTR_R5900_PACK_vid(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vis_postincr: + validbits = RAB_INSTR_R5900_PACK_vis(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vit_postincr: + validbits = RAB_INSTR_R5900_PACK_vit(validbits, ~0); + break; + + case RAB_OPERAND_r5900_vid_postincr: + validbits = RAB_INSTR_R5900_PACK_vid(validbits, ~0); + break; + + case RAB_OPERAND_r5900_immediate5: + validbits = RAB_INSTR_R5900_PACK_imm5(validbits, ~0); + break; + /* r5900 */ + + case RAB_OPERAND_ALL_INVALID: + case RAB_OPERAND_ALL_MAX: + assert(self->descriptor->operands[i] != RAB_OPERAND_ALL_INVALID && self->descriptor->operands[i] != RAB_OPERAND_ALL_MAX); + break; + } + } + + return validbits; +} + +bool RabbitizerInstruction_isValid(const RabbitizerInstruction *self) { + uint32_t validbits; + + validbits = RabbitizerInstruction_getValidBits(self); + + return ((~validbits) & self->word) == 0; +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_ProcessUniqueId.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_ProcessUniqueId.c new file mode 100644 index 00000000..0d71c6dd --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstruction/RabbitizerInstruction_ProcessUniqueId.c @@ -0,0 +1,319 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstruction.h" + +#include "common/RabbitizerConfig.h" +#include "instructions/RabbitizerRegister.h" + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) \ + case (caseBits): \ + self->uniqueId = RABBITIZER_INSTR_ID_##prefix##_##name; \ + break; +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + +void RabbitizerInstruction_processUniqueId_Normal(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + switch (opcode) { +#include "instructions/instr_id/cpu/cpu_normal.inc" + } + + if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_beq: + if (RAB_INSTR_GET_rt(self) == 0) { + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoB) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_b; + } + } else { + if (RabbitizerConfig_Cfg.pseudos.pseudoBeqz) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_beqz; + } + } + } + break; + + case RABBITIZER_INSTR_ID_cpu_bne: + if (RAB_INSTR_GET_rt(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoBnez) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_bnez; + } + } + break; + + default: + break; + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstruction_processUniqueId_Special(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_special.inc" + } + + if (RabbitizerInstruction_isNop(self)) { + // NOP is special enough + self->uniqueId = RABBITIZER_INSTR_ID_cpu_nop; + } else if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_or: + if (RAB_INSTR_GET_rt(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoMove) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_move; + } + } + break; + + case RABBITIZER_INSTR_ID_cpu_nor: + if (RAB_INSTR_GET_rt(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoNot) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_not; + } + } + break; + + case RABBITIZER_INSTR_ID_cpu_subu: + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoNegu) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_negu; + } + } + break; + + default: + break; + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_jalr: + self->_mandatorybits = RAB_INSTR_PACK_rd(self->_mandatorybits, RAB_INSTR_GET_rd(self)); + + if (RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_NUMERIC || RabbitizerConfig_Cfg.regNames.gprAbiNames == RABBITIZER_ABI_O32) { + if (RAB_INSTR_GET_rd(self) != RABBITIZER_REG_GPR_O32_ra) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[RABBITIZER_INSTR_ID_cpu_jalr_rd]; + } + } else { + if (RAB_INSTR_GET_rd(self) != RABBITIZER_REG_GPR_N32_ra) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[RABBITIZER_INSTR_ID_cpu_jalr_rd]; + } + } + break; + + case RABBITIZER_INSTR_ID_cpu_div: + if (RabbitizerConfig_Cfg.toolchainTweaks.sn64DivFix && !self->inHandwrittenFunction) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[RABBITIZER_INSTR_ID_cpu_sn64_div]; + } + break; + + case RABBITIZER_INSTR_ID_cpu_divu: + if (RabbitizerConfig_Cfg.toolchainTweaks.sn64DivFix && !self->inHandwrittenFunction) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[RABBITIZER_INSTR_ID_cpu_sn64_divu]; + } + break; + + default: + break; + } +} + +void RabbitizerInstruction_processUniqueId_Regimm(RabbitizerInstruction *self) { + uint32_t rt = RAB_INSTR_GET_rt(self); + + self->_mandatorybits = RAB_INSTR_PACK_rt(self->_mandatorybits, rt); + + switch (rt) { +#include "instructions/instr_id/cpu/cpu_regimm.inc" + } + + if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_bgezal: + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoBal) { + self->uniqueId = RABBITIZER_INSTR_ID_cpu_bal; + } + } + break; + + default: + break; + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstruction_processUniqueId_Coprocessor0_BC0(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_bc_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_bc_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop0_bc0.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor0_Tlb(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_cop0_tlb.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor0(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + self->_handwrittenCategory = true; + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop0.inc" + + case 0x08: + RabbitizerInstruction_processUniqueId_Coprocessor0_BC0(self); + break; + + case 0x10: + RabbitizerInstruction_processUniqueId_Coprocessor0_Tlb(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1_BC1(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_bc_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_bc_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop1_bc1.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuS(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_cop1_fpu_s.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuD(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_cop1_fpu_d.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuW(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_cop1_fpu_w.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1_FpuL(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/cpu/cpu_cop1_fpu_l.inc" + } +} + +void RabbitizerInstruction_processUniqueId_Coprocessor1(RabbitizerInstruction *self) { + uint8_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop1.inc" + + case 0x08: // fmt = BC + RabbitizerInstruction_processUniqueId_Coprocessor1_BC1(self); + break; + + case 0x10: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuS(self); + break; + + case 0x11: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuD(self); + break; + + case 0x14: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuW(self); + break; + + case 0x15: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuL(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstruction_processUniqueId_Coprocessor2(RabbitizerInstruction *self) { + self->_handwrittenCategory = true; + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + +void RabbitizerInstruction_processUniqueId(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + self->uniqueId = RABBITIZER_INSTR_ID_cpu_INVALID; + + switch (opcode) { + default: + RabbitizerInstruction_processUniqueId_Normal(self); + break; + case 0x00: + RabbitizerInstruction_processUniqueId_Special(self); + break; + case 0x01: + RabbitizerInstruction_processUniqueId_Regimm(self); + break; + case 0x10: + RabbitizerInstruction_processUniqueId_Coprocessor0(self); + break; + case 0x11: + RabbitizerInstruction_processUniqueId_Coprocessor1(self); + break; + case 0x12: + RabbitizerInstruction_processUniqueId_Coprocessor2(self); + break; + } +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900.c new file mode 100644 index 00000000..3b9bd2ce --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900.c @@ -0,0 +1,17 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstructionR5900.h" + +void RabbitizerInstructionR5900_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram) { + RabbitizerInstruction_init(self, word, vram); + + self->uniqueId = RABBITIZER_INSTR_ID_r5900_INVALID; + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + + self->category = RABBITIZER_INSTRCAT_R5900; +} + +void RabbitizerInstructionR5900_destroy(RabbitizerInstruction *self) { + RabbitizerInstruction_destroy(self); +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900_ProcessUniqueId.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900_ProcessUniqueId.c new file mode 100644 index 00000000..1972f3fa --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionR5900/RabbitizerInstructionR5900_ProcessUniqueId.c @@ -0,0 +1,328 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstructionR5900.h" + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) \ + case (caseBits): \ + self->uniqueId = RABBITIZER_INSTR_ID_##prefix##_##name; \ + break; +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + +void RabbitizerInstructionR5900_processUniqueId_Normal(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + bool fetchDescriptor = true; + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + switch (opcode) { +#include "instructions/instr_id/r5900/r5900_normal.inc" + + default: + RabbitizerInstruction_processUniqueId_Normal(self); + fetchDescriptor = false; + break; + } + + if (fetchDescriptor) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Special(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + bool fetchDescriptor = true; + uint32_t stype; + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_special.inc" + + default: + RabbitizerInstruction_processUniqueId_Special(self); + fetchDescriptor = false; + break; + } + + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_cpu_sync: + stype = RAB_INSTR_GET_stype(self); + self->_mandatorybits = RAB_INSTR_PACK_stype(self->_mandatorybits, stype); + if ((stype & 0x10) == 0x10) { + self->uniqueId = RABBITIZER_INSTR_ID_r5900_sync_p; + fetchDescriptor = true; + } + break; + + default: + break; + } + + if (fetchDescriptor) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Regimm(RabbitizerInstruction *self) { + uint32_t rt = RAB_INSTR_GET_rt(self); + bool fetchDescriptor = true; + + self->_mandatorybits = RAB_INSTR_PACK_rt(self->_mandatorybits, rt); + + switch (rt) { +#include "instructions/instr_id/r5900/r5900_regimm.inc" + + default: + RabbitizerInstruction_processUniqueId_Regimm(self); + fetchDescriptor = false; + break; + } + + if (fetchDescriptor) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor0_Tlb(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_cop0_tlb.inc" + + default: + RabbitizerInstruction_processUniqueId_Coprocessor0_Tlb(self); + break; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor0(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + self->_handwrittenCategory = true; + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop0.inc" + + case 0x08: + RabbitizerInstruction_processUniqueId_Coprocessor0_BC0(self); + break; + + case 0x10: + RabbitizerInstructionR5900_processUniqueId_Coprocessor0_Tlb(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor1_FpuS(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_cop1_fpu_s.inc" + + default: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuS(self); + break; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor1(RabbitizerInstruction *self) { + uint8_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop1.inc" + + case 0x08: // fmt = BC + RabbitizerInstruction_processUniqueId_Coprocessor1_BC1(self); + break; + + case 0x10: + RabbitizerInstructionR5900_processUniqueId_Coprocessor1_FpuS(self); + break; + + case 0x14: + RabbitizerInstruction_processUniqueId_Coprocessor1_FpuW(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstruction_processUniqueId_Coprocessor2_BC2(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_bc_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_bc_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/r5900/r5900_cop2_bc2.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor2_Special2(UNUSED RabbitizerInstruction *self) { + uint32_t fhiflo = RAB_INSTR_R5900_GET_fhi_flo(self); + + self->_mandatorybits = RAB_INSTR_R5900_PACK_fhi_flo(self->_mandatorybits, fhiflo); + + switch (fhiflo) { +#include "instructions/instr_id/r5900/r5900_cop2_special2.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor2_Special1(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_cop2_special1.inc" + + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + RabbitizerInstructionR5900_processUniqueId_Coprocessor2_Special2(self); + break; + } +} + +void RabbitizerInstructionR5900_processUniqueId_Coprocessor2(RabbitizerInstruction *self) { + uint8_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/r5900/r5900_cop2.inc" + + case 0x08: + RabbitizerInstruction_processUniqueId_Coprocessor2_BC2(self); + break; + + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + RabbitizerInstructionR5900_processUniqueId_Coprocessor2_Special1(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstructionR5900_processUniqueId_MMI_0(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_R5900_GET_mmi_function(self); + + self->_mandatorybits = RAB_INSTR_R5900_PACK_mmi_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_mmi_0.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_MMI_1(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_R5900_GET_mmi_function(self); + + self->_mandatorybits = RAB_INSTR_R5900_PACK_mmi_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_mmi_1.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_MMI_2(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_R5900_GET_mmi_function(self); + + self->_mandatorybits = RAB_INSTR_R5900_PACK_mmi_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_mmi_2.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_MMI_3(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_R5900_GET_mmi_function(self); + + self->_mandatorybits = RAB_INSTR_R5900_PACK_mmi_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_mmi_3.inc" + } +} + +void RabbitizerInstructionR5900_processUniqueId_MMI(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/r5900/r5900_mmi.inc" + + case 0x08: + RabbitizerInstructionR5900_processUniqueId_MMI_0(self); + break; + case 0x09: + RabbitizerInstructionR5900_processUniqueId_MMI_2(self); + break; + case 0x28: + RabbitizerInstructionR5900_processUniqueId_MMI_1(self); + break; + case 0x29: + RabbitizerInstructionR5900_processUniqueId_MMI_3(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + +void RabbitizerInstructionR5900_processUniqueId(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + switch (opcode) { + default: + RabbitizerInstructionR5900_processUniqueId_Normal(self); + break; + case 0x00: + RabbitizerInstructionR5900_processUniqueId_Special(self); + break; + case 0x01: + RabbitizerInstructionR5900_processUniqueId_Regimm(self); + break; + case 0x10: + RabbitizerInstructionR5900_processUniqueId_Coprocessor0(self); + break; + case 0x11: + RabbitizerInstructionR5900_processUniqueId_Coprocessor1(self); + break; + case 0x12: + RabbitizerInstructionR5900_processUniqueId_Coprocessor2(self); + break; + case 0x1C: + RabbitizerInstructionR5900_processUniqueId_MMI(self); + break; + } +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp.c new file mode 100644 index 00000000..1e63453c --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp.c @@ -0,0 +1,56 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstructionRsp.h" + +void RabbitizerInstructionRsp_init(RabbitizerInstruction *self, uint32_t word, uint32_t vram) { + RabbitizerInstruction_init(self, word, vram); + + self->uniqueId = RABBITIZER_INSTR_ID_rsp_INVALID; + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + + self->_handwrittenCategory = true; + self->category = RABBITIZER_INSTRCAT_RSP; +} + +void RabbitizerInstructionRsp_destroy(RabbitizerInstruction *self) { + RabbitizerInstruction_destroy(self); +} + +uint16_t RabbitizerInstructionRsp_GetOffsetVector(const RabbitizerInstruction *self) { + uint16_t offset = RAB_INSTR_RSP_GET_OFFSET_VECTOR_RAW(self); + + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_rsp_lsv: + case RABBITIZER_INSTR_ID_rsp_ssv: + return offset << 1; + + case RABBITIZER_INSTR_ID_rsp_llv: + case RABBITIZER_INSTR_ID_rsp_slv: + return offset << 2; + + case RABBITIZER_INSTR_ID_rsp_ldv: + case RABBITIZER_INSTR_ID_rsp_sdv: + case RABBITIZER_INSTR_ID_rsp_lpv: + case RABBITIZER_INSTR_ID_rsp_spv: + case RABBITIZER_INSTR_ID_rsp_luv: + case RABBITIZER_INSTR_ID_rsp_suv: + return offset << 3; + + case RABBITIZER_INSTR_ID_rsp_lqv: + case RABBITIZER_INSTR_ID_rsp_sqv: + case RABBITIZER_INSTR_ID_rsp_lrv: + case RABBITIZER_INSTR_ID_rsp_srv: + case RABBITIZER_INSTR_ID_rsp_lhv: + case RABBITIZER_INSTR_ID_rsp_shv: + case RABBITIZER_INSTR_ID_rsp_lfv: + case RABBITIZER_INSTR_ID_rsp_sfv: + case RABBITIZER_INSTR_ID_rsp_ltv: + case RABBITIZER_INSTR_ID_rsp_stv: + case RABBITIZER_INSTR_ID_rsp_swv: + return offset << 4; + + default: + return offset; + } +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp_ProcessUniqueId.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp_ProcessUniqueId.c new file mode 100644 index 00000000..e491f1be --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerInstructionRsp/RabbitizerInstructionRsp_ProcessUniqueId.c @@ -0,0 +1,233 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerInstructionRsp.h" + +#include "common/RabbitizerConfig.h" + +#define RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, ...) \ + case (caseBits): \ + self->uniqueId = RABBITIZER_INSTR_ID_##prefix##_##name; \ + break; +#define RABBITIZER_DEF_INSTR_ID_ALTNAME(prefix, caseBits, name, altname, ...) RABBITIZER_DEF_INSTR_ID(prefix, caseBits, name, __VA_ARGS__) + +void RabbitizerInstructionRsp_processUniqueId_Normal_Lwc2(RabbitizerInstruction *self) { + uint32_t rd = RAB_INSTR_GET_rd(self); + + self->_mandatorybits = RAB_INSTR_PACK_rd(self->_mandatorybits, rd); + + switch (rd) { +#include "instructions/instr_id/rsp/rsp_normal_lwc2.inc" + } +} + +void RabbitizerInstructionRsp_processUniqueId_Normal_Swc2(RabbitizerInstruction *self) { + uint32_t rd = RAB_INSTR_GET_rd(self); + uint32_t elementlow; + + self->_mandatorybits = RAB_INSTR_PACK_rd(self->_mandatorybits, rd); + + switch (rd) { +#include "instructions/instr_id/rsp/rsp_normal_swc2.inc" + } + + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_rsp_suv: + elementlow = RAB_INSTR_RSP_GET_elementlow(self); + self->_mandatorybits = RAB_INSTR_RSP_PACK_elementlow(self->_mandatorybits, elementlow); + if (elementlow != 0) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_swv; + } + break; + + default: + break; + } +} + +void RabbitizerInstructionRsp_processUniqueId_Normal(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + switch (opcode) { +#include "instructions/instr_id/rsp/rsp_normal.inc" + + // new rsp stuff + case 0x32: + RabbitizerInstructionRsp_processUniqueId_Normal_Lwc2(self); + break; + + case 0x3A: + RabbitizerInstructionRsp_processUniqueId_Normal_Swc2(self); + break; + } + + if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + if (RAB_INSTR_GET_rt(self) == 0) { + if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_beq) { + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoB) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_b; + } + } else { + if (RabbitizerConfig_Cfg.pseudos.pseudoBeqz) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_beqz; + } + } + } else if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_bne) { + if (RabbitizerConfig_Cfg.pseudos.pseudoBnez) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_bnez; + } + } + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstructionRsp_processUniqueId_Special(RabbitizerInstruction *self) { + uint32_t function = RAB_INSTR_GET_function(self); + + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/rsp/rsp_special.inc" + } + + if (RabbitizerInstruction_isNop(self)) { + // NOP is special enough + self->uniqueId = RABBITIZER_INSTR_ID_rsp_nop; + } else if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + if (RAB_INSTR_GET_rt(self) == 0) { + if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_or) { + if (RabbitizerConfig_Cfg.pseudos.pseudoMove) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_move; + } + } else if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_nor) { + if (RabbitizerConfig_Cfg.pseudos.pseudoNot) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_not; + } + } + } else if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_subu) { + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoNegu) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_negu; + } + } + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; + + if (self->uniqueId == RABBITIZER_INSTR_ID_rsp_jalr) { + // $ra + if (RAB_INSTR_GET_rd(self) != 31) { + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[RABBITIZER_INSTR_ID_rsp_jalr_rd]; + } + } +} + +void RabbitizerInstructionRsp_processUniqueId_Regimm(RabbitizerInstruction *self) { + uint32_t rt = RAB_INSTR_GET_rt(self); + + self->_mandatorybits = RAB_INSTR_PACK_rt(self->_mandatorybits, rt); + + switch (rt) { +#include "instructions/instr_id/rsp/rsp_regimm.inc" + } + + if (RabbitizerConfig_Cfg.pseudos.enablePseudos) { + switch (self->uniqueId) { + case RABBITIZER_INSTR_ID_rsp_bgezal: + if (RAB_INSTR_GET_rs(self) == 0) { + if (RabbitizerConfig_Cfg.pseudos.pseudoBal) { + self->uniqueId = RABBITIZER_INSTR_ID_rsp_bal; + } + } + break; + + default: + break; + } + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstructionRsp_processUniqueId_Coprocessor0(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop0.inc" + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +void RabbitizerInstructionRsp_processUniqueId_Coprocessor2_Vu(RabbitizerInstruction *self) { + uint32_t aux = SHIFTR(self->word, 25, 1); + uint32_t function = RAB_INSTR_GET_function(self); + + if (aux != 1) { + return; + } + + // TODO: name this bit range + self->_mandatorybits = BITREPACK(self->_mandatorybits, aux, 25, 1); + self->_mandatorybits = RAB_INSTR_PACK_function(self->_mandatorybits, function); + + switch (function) { +#include "instructions/instr_id/rsp/rsp_cop2_vu.inc" + } +} + +void RabbitizerInstructionRsp_processUniqueId_Coprocessor2(RabbitizerInstruction *self) { + uint32_t fmt = RAB_INSTR_GET_fmt(self); + + self->_mandatorybits = RAB_INSTR_PACK_fmt(self->_mandatorybits, fmt); + + switch (fmt) { +#include "instructions/instr_id/cpu/cpu_cop0.inc" + + default: + RabbitizerInstructionRsp_processUniqueId_Coprocessor2_Vu(self); + break; + } + + self->descriptor = &RabbitizerInstrDescriptor_Descriptors[self->uniqueId]; +} + +#undef RABBITIZER_DEF_INSTR_ID +#undef RABBITIZER_DEF_INSTR_ID_ALTNAME + +void RabbitizerInstructionRsp_processUniqueId(RabbitizerInstruction *self) { + uint32_t opcode = RAB_INSTR_GET_opcode(self); + + self->_mandatorybits = RAB_INSTR_PACK_opcode(self->_mandatorybits, opcode); + + self->uniqueId = RABBITIZER_INSTR_ID_rsp_INVALID; + + switch (opcode) { + default: + RabbitizerInstructionRsp_processUniqueId_Normal(self); + break; + case 0x00: + RabbitizerInstructionRsp_processUniqueId_Special(self); + break; + case 0x01: + RabbitizerInstructionRsp_processUniqueId_Regimm(self); + break; + case 0x10: + RabbitizerInstructionRsp_processUniqueId_Coprocessor0(self); + break; + // case 0x11: + // RabbitizerInstructionRsp_processUniqueId_Coprocessor1(self); + // break; + case 0x12: + RabbitizerInstructionRsp_processUniqueId_Coprocessor2(self); + break; + } +} diff --git a/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerRegister.c b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerRegister.c new file mode 100644 index 00000000..4d16024f --- /dev/null +++ b/tools/ido5.3_recomp/rabbitizer/src/instructions/RabbitizerRegister.c @@ -0,0 +1,181 @@ +/* SPDX-FileCopyrightText: © 2022 Decompollaborate */ +/* SPDX-License-Identifier: MIT */ + +#include "instructions/RabbitizerRegister.h" + +#include + +#include "common/Utils.h" +#include "common/RabbitizerConfig.h" + +#define RABBITIZER_DEF_REG(prefix, name, numeric) [RABBITIZER_REG_##prefix##_##name] = { "$" #numeric, "$" #name } + +#define RABBITIZER_DEF_REG_NODOLLAR(prefix, name, numeric) [RABBITIZER_REG_##prefix##_##name] = { "$" #numeric, #name } + +// numeric, named + +const char *RabbitizerRegister_GprO32_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_GprO32.inc" +}; + +const char *RabbitizerRegister_GprN32_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_GprN32.inc" +}; + +const char *RabbitizerRegister_Cop0_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop0.inc" +}; + +const char *RabbitizerRegister_Cop1O32_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop1O32.inc" +}; + +const char *RabbitizerRegister_Cop1N32_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop1N32.inc" +}; + +const char *RabbitizerRegister_Cop1N64_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop1N64.inc" +}; + +const char *RabbitizerRegister_Cop1Control_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop1Control.inc" +}; + +const char *RabbitizerRegister_Cop2_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_Cop2.inc" +}; + +/* RSP */ + +const char *RabbitizerRegister_RspGpr_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_RspGpr.inc" +}; + +const char *RabbitizerRegister_RspCop0_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_RspCop0.inc" +}; + +const char *RabbitizerRegister_RspCop2_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_RspCop2.inc" +}; + +const char *RabbitizerRegister_RspCop2Control_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_RspCop2Control.inc" +}; + +const char *RabbitizerRegister_RspVector_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_RspVector.inc" +}; + +/* RSP */ + +/* R5900 */ + +const char *RabbitizerRegister_R5900VF_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_R5900VF.inc" +}; + +const char *RabbitizerRegister_R5900VI_Names[][2] = { +#include "instructions/registers/RabbitizerRegister_R5900VI.inc" +}; + +/* R5900 */ + +const char *RabbitizerRegister_getNameGpr(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_GprO32_Names)); + + switch (RabbitizerConfig_Cfg.regNames.gprAbiNames) { + case RABBITIZER_ABI_NUMERIC: + return RabbitizerRegister_GprO32_Names[regValue][0]; + + default: + case RABBITIZER_ABI_O32: + return RabbitizerRegister_GprO32_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; + + case RABBITIZER_ABI_N32: + case RABBITIZER_ABI_N64: + return RabbitizerRegister_GprN32_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; + } +} + +const char *RabbitizerRegister_getNameCop0(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_Cop0_Names)); + + return RabbitizerRegister_Cop0_Names[regValue] + [RabbitizerConfig_Cfg.regNames.namedRegisters && RabbitizerConfig_Cfg.regNames.vr4300Cop0NamedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameCop1(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_Cop1O32_Names)); + + switch (RabbitizerConfig_Cfg.regNames.fprAbiNames) { + default: + case RABBITIZER_ABI_NUMERIC: + return RabbitizerRegister_Cop1O32_Names[regValue][0]; + + case RABBITIZER_ABI_O32: + return RabbitizerRegister_Cop1O32_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; + + case RABBITIZER_ABI_N32: + return RabbitizerRegister_Cop1N32_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; + + case RABBITIZER_ABI_N64: + return RabbitizerRegister_Cop1N64_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; + } +} + +const char *RabbitizerRegister_getNameCop1Control(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_Cop1Control_Names)); + + return RabbitizerRegister_Cop1Control_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters && RabbitizerConfig_Cfg.regNames.userFpcCsr ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameCop2(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_Cop2_Names)); + + return RabbitizerRegister_Cop2_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameRspGpr(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_RspGpr_Names)); + + return RabbitizerRegister_RspGpr_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameRspCop0(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_RspCop0_Names)); + + return RabbitizerRegister_RspCop0_Names[regValue] + [RabbitizerConfig_Cfg.regNames.namedRegisters && RabbitizerConfig_Cfg.regNames.vr4300RspCop0NamedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameRspCop2(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_RspCop2_Names)); + + return RabbitizerRegister_RspCop2_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameRspCop2Control(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_RspCop2Control_Names)); + + return RabbitizerRegister_RspCop2Control_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameRspVector(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_RspVector_Names)); + + return RabbitizerRegister_RspVector_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameR5900VF(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_R5900VF_Names)); + + return RabbitizerRegister_R5900VF_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} + +const char *RabbitizerRegister_getNameR5900VI(uint8_t regValue) { + assert(regValue < ARRAY_COUNT(RabbitizerRegister_R5900VI_Names)); + + return RabbitizerRegister_R5900VI_Names[regValue][RabbitizerConfig_Cfg.regNames.namedRegisters ? 1 : 0]; +} diff --git a/tools/ido5.3_recomp/recomp.cpp b/tools/ido5.3_recomp/recomp.cpp index 2bf6e132..da44c779 100644 --- a/tools/ido5.3_recomp/recomp.cpp +++ b/tools/ido5.3_recomp/recomp.cpp @@ -1,20 +1,47 @@ -#include -#include -#include -#include -#include - #include +#include +#include +#include +#include +#include +#include + #include #include #include #include +#include -#include +#include "rabbitizer.hpp" +#include "rabbitizer.h" #include "elf.h" -#define INSPECT_FUNCTION_POINTERS 0 // set this to 1 when testing a new program, to verify that no false function pointers are found +#if defined(_WIN32) && !defined(__CYGWIN__) +#include +#endif /* _WIN32 && !__CYGWIN__ */ + +#if !defined(_MSC_VER) && !defined(__CYGWIN__) && !defined(_WIN32) +#define UNIX_PLATFORM +#endif + +#ifdef UNIX_PLATFORM +// TODO: determine if any of those headers are not required +#include +#include +#include // for __cxa_demangle +#include // for dladdr +#include +#include +#endif + +#ifndef FULL_TRACEBACK +// Change to non-zero to have full traceback, including names not exported +#define FULL_TRACEBACK 0 +#endif + +// set this to 1 when testing a new program, to verify that no false function pointers are found +#define INSPECT_FUNCTION_POINTERS 0 #ifndef TRACE #define TRACE 0 @@ -22,484 +49,680 @@ #define LABELS_64_BIT 1 +#ifndef DUMP_INSTRUCTIONS +// Set to non-zero to dump actual disassembly when dumping C code +#define DUMP_INSTRUCTIONS 0 +#endif + #define u32be(x) (uint32_t)(((x & 0xff) << 24) + ((x & 0xff00) << 8) + ((x & 0xff0000) >> 8) + ((uint32_t)(x) >> 24)) #define u16be(x) (uint16_t)(((x & 0xff) << 8) + ((x & 0xff00) >> 8)) #define read_u32_be(buf) (uint32_t)(((buf)[0] << 24) + ((buf)[1] << 16) + ((buf)[2] << 8) + ((buf)[3])) +#define UniqueId_cpu_li rabbitizer::InstrId::UniqueId::cpu_USERDEF_00 +#define UniqueId_cpu_la rabbitizer::InstrId::UniqueId::cpu_USERDEF_01 + using namespace std; +enum class EdgeType { + NORMAL, // normal control flow within a function + FUNCTION_EXIT, // returns from a function + FUNCTION_ENTRY, // goes into a function + FUNCTION_CALL, // skips an internal function call + EXTERN_FUNCTION_CALL, // skips an external function call + FUNCTION_POINTER_CALL, // skips a function pointer call +}; + struct Edge { uint32_t i; - uint8_t function_entry: 1; - uint8_t function_exit: 1; - uint8_t extern_function: 1; - uint8_t function_pointer: 1; + EdgeType edge_type; }; struct Insn { - uint32_t id; - uint8_t op_count; - string mnemonic; - string op_str; - cs_mips_op operands[8]; + // base instruction + rabbitizer::InstructionCpu instruction; - uint8_t is_jump: 1; - uint8_t is_global_got_memop: 1; - uint8_t no_following_successor: 1; + // + bool is_global_got_memop; + bool no_following_successor; + + // patching instructions + bool patched; + // lui pairs + uint32_t patched_addr; + // immediates are 16 bits wide, but they can be either signed or unsigned + // a 32 bits signed member can hold all those possible values + int32_t patched_imms; + rabbitizer::Registers::Cpu::GprO32 lila_dst_reg; int linked_insn; union { uint32_t linked_value; float linked_float; }; + + // jumptable instructions uint32_t jtbl_addr; uint32_t num_cases; - mips_reg index_reg; + rabbitizer::Registers::Cpu::GprO32 index_reg; + bool jtbl_is_pic; + + // graph vector successors; vector predecessors; uint64_t b_liveout; uint64_t b_livein; uint64_t f_livein; uint64_t f_liveout; + + Insn(uint32_t word, uint32_t vram) : instruction(word, vram) { + this->is_global_got_memop = false; + this->no_following_successor = false; + + this->patched = false; + this->patched_addr = 0; + this->patched_imms = 0; + this->lila_dst_reg = rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero; + this->linked_insn = -1; + this->linked_value = 0; + + this->jtbl_addr = 0; + this->num_cases = 0; + this->index_reg = rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero; + this->jtbl_is_pic = false; + + this->b_liveout = 0; + this->b_livein = 0; + this->f_livein = 0; + this->f_liveout = 0; + } + + void patchInstruction(rabbitizer::InstrId::UniqueId instructionId) { + this->patched = true; + RabbitizerInstruction* innerInstr = this->instruction.getCPtr(); + innerInstr->uniqueId = (RabbitizerInstrId)(instructionId); + innerInstr->descriptor = &RabbitizerInstrDescriptor_Descriptors[innerInstr->uniqueId]; + } + + void patchAddress(rabbitizer::InstrId::UniqueId instructionId, uint32_t newAddress) { + this->patchInstruction(instructionId); + this->patched_addr = newAddress; + } + + uint32_t getAddress() const { + if (this->patched && this->patched_addr != 0) { + return this->patched_addr; + } + + if (this->instruction.hasOperandAlias(rabbitizer::OperandType::cpu_label)) { + return this->instruction.getInstrIndexAsVram(); + } + + if (this->instruction.isBranch()) { + return this->instruction.getVram() + this->instruction.getBranchOffset(); + } + + assert(!"unreachable code"); + } + + void patchImmediate(int32_t newImmediate) { + this->patched = true; + this->patched_imms = newImmediate; + } + + int32_t getImmediate() const { + if (this->patched) { + return this->patched_imms; + } + + return this->instruction.getProcessedImmediate(); + } + + std::string disassemble() const { + char buffer[0x1000]; + int32_t imm; + + switch (this->instruction.getUniqueId()) { + case UniqueId_cpu_li: + imm = this->getImmediate(); + if (imm >= 0) { + sprintf(buffer, "li %s, 0x%X", RabbitizerRegister_getNameGpr((int)this->lila_dst_reg), + imm); + } else { + sprintf(buffer, "li %s, %i", RabbitizerRegister_getNameGpr((int)this->lila_dst_reg), imm); + } + return buffer; + + case UniqueId_cpu_la: + sprintf(buffer, "la %s, 0x%X", RabbitizerRegister_getNameGpr((int)this->lila_dst_reg), + this->getAddress()); + return buffer; + + default: + return this->instruction.disassembleInstruction(0); + } + } }; struct Function { - vector returns; //points to delay slots - uint32_t end_addr; //address after end + vector returns; // points to delay slots + uint32_t end_addr; // address after end uint32_t nargs; uint32_t nret; bool v0_in; bool referenced_by_function_pointer; }; -static bool conservative; +bool conservative; +bool n32; -static csh handle; +const uint8_t* text_section; +uint32_t text_section_len; +uint32_t text_vaddr; -static const uint8_t *text_section; -static uint32_t text_section_len; -static uint32_t text_vaddr; +const uint8_t* rodata_section; +uint32_t rodata_section_len; +uint32_t rodata_vaddr; -static const uint8_t *rodata_section; -static uint32_t rodata_section_len; -static uint32_t rodata_vaddr; +const uint8_t* data_section; +uint32_t data_section_len; +uint32_t data_vaddr; -static const uint8_t *data_section; -static uint32_t data_section_len; -static uint32_t data_vaddr; +uint32_t bss_section_len; +uint32_t bss_vaddr; -static uint32_t bss_section_len; -static uint32_t bss_vaddr; +const uint8_t* srdata_section; +uint32_t srdata_section_len; +uint32_t srdata_vaddr; -static vector insns; -static set label_addresses; -static vector got_globals; -static vector got_locals; -static uint32_t gp_value; -static uint32_t gp_value_adj; +const uint8_t* sdata_section; +uint32_t sdata_section_len; +uint32_t sdata_vaddr; -static map symbol_names; +uint32_t sbss_section_len; +uint32_t sbss_vaddr; -static vector> data_function_pointers; -static set li_function_pointers; -static map functions; -static uint32_t main_addr; -static uint32_t mcount_addr; -static uint32_t procedure_table_start; -static uint32_t procedure_table_len; +vector insns; +set label_addresses; // labels, both branch labels and jump table labels +vector got_globals; +vector got_locals; +uint32_t gp_value; +uint32_t gp_value_adj; + +map symbol_names; + +vector> data_function_pointers; +set la_function_pointers; +map functions; +uint32_t main_addr; +uint32_t mcount_addr; +uint32_t procedure_table_start; +uint32_t procedure_table_len; #define FLAG_NO_MEM 1 #define FLAG_VARARG 2 -static const struct { - const char *name; - const char *params; +/** + * Struct containing information on external functions that are called using the wrappers in `libc_impl.c`. + * + * name: function name + * params: first char is return type, subsequent chars are argument types. Key to chars used: + * - 'v' void + * - 'i' signed int (int32_t) + * - 'u' unsigned int (uint32_t) + * - 'p' pointer (uintptr_t) + * - 'f' float + * - 'd' double + * - 'l' signed long long (int64_t) + * - 'j' unsigned long long (uint64_t) + * - 't' trampoline + * + * flags: use defines above + */ +const struct ExternFunction { + const char* name; + const char* params; int flags; } extern_functions[] = { - {"exit", "vi"}, // override exit from application - {"abort", "v"}, - {"sbrk", "pi"}, - {"malloc", "pu"}, - {"calloc", "puu"}, - {"realloc", "ppu"}, - {"free", "vp"}, - {"fscanf", "ipp", FLAG_VARARG}, - {"printf", "ip", FLAG_VARARG}, - {"sprintf", "ipp", FLAG_VARARG}, - {"fprintf", "ipp", FLAG_VARARG}, - {"_doprnt", "ippp"}, - {"strlen", "up"}, - {"open", "ipii"}, - {"creat", "ipi"}, - {"access", "ipi"}, - {"rename", "ipp"}, - {"utime", "ipp"}, - {"flock", "iii"}, - {"chmod", "ipu"}, - {"umask", "ii", FLAG_NO_MEM}, - {"ecvt", "pdipp"}, - {"fcvt", "pdipp"}, - {"sqrt", "dd", FLAG_NO_MEM}, - {"sqrtf", "ff", FLAG_NO_MEM}, - {"atoi", "ip"}, - {"atol", "ip"}, - {"atof", "dp"}, - {"strtol", "ippi"}, - {"strtoul", "uppi"}, - {"strtod", "dpp"}, - {"strchr", "ppi"}, - {"strrchr", "ppi"}, - {"strcspn", "upp"}, - {"strpbrk", "ppp"}, - {"fstat", "iip"}, - {"stat", "ipp"}, - {"ftruncate", "iii"}, - {"bcopy", "vppu"}, - {"memcpy", "pppu"}, - {"memccpy", "pppiu"}, - {"read", "iipu"}, - {"write", "iipu"}, - {"fopen", "ppp"}, - {"freopen", "pppp"}, - {"fclose", "ip"}, - {"ftell", "ip"}, - {"rewind", "vp"}, - {"fseek", "ipii"}, - {"lseek", "iiii"}, - {"fflush", "ip"}, - {"dup", "ii"}, - {"dup2", "iii"}, - {"pipe", "ip"}, - {"perror", "vp"}, - {"fdopen", "iip"}, - {"memset", "ppiu"}, - {"bcmp", "ippu"}, - {"memcmp", "ippu"}, - {"getpid", "i", FLAG_NO_MEM}, - {"getpgrp", "i"}, - {"remove", "ip"}, - {"unlink", "ip"}, - {"close", "ii"}, - {"strcmp", "ipp"}, - {"strncmp", "ippu"}, - {"strcpy", "ppp"}, - {"strncpy", "pppu"}, - {"strcat", "ppp"}, - {"strncat", "pppu"}, - {"strtok", "ppp"}, - {"strstr", "ppp"}, - {"strdup", "pp"}, - {"toupper", "ii", FLAG_NO_MEM}, - {"tolower", "ii", FLAG_NO_MEM}, - {"gethostname", "ipu"}, - {"isatty", "ii"}, - {"strftime", "upupp"}, - {"times", "ip"}, - {"clock", "i", FLAG_NO_MEM}, - {"ctime", "pp"}, - {"localtime", "pp"}, - {"setvbuf", "ippiu"}, - {"__semgetc", "ip"}, - {"__semputc", "iip"}, - {"fgetc", "ip"}, - {"fgets", "ipip"}, - {"__filbuf", "ip"}, - {"__flsbuf", "iip"}, - {"ungetc", "iip"}, - {"gets", "pp"}, - {"fread", "upuup"}, - {"fwrite", "upuup"}, - {"fputs", "ipp"}, - {"puts", "ip"}, - {"getcwd", "ppu"}, - {"time", "ip"}, - {"bzero", "vpu"}, - {"fp_class_d", "id", FLAG_NO_MEM}, - {"ldexp", "ddi", FLAG_NO_MEM}, - {"__ll_mul", "lll", FLAG_NO_MEM}, - {"__ll_div", "lll", FLAG_NO_MEM}, - {"__ll_rem", "ljl", FLAG_NO_MEM}, - {"__ll_lshift", "llj", FLAG_NO_MEM}, - {"__ll_rshift", "llj", FLAG_NO_MEM}, - {"__ull_div", "jjj", FLAG_NO_MEM}, - {"__ull_rem", "jjj", FLAG_NO_MEM}, - {"__ull_rshift", "jjj", FLAG_NO_MEM}, - {"__d_to_ull", "jd", FLAG_NO_MEM}, - {"__d_to_ll", "ld", FLAG_NO_MEM}, - {"__f_to_ull", "jf", FLAG_NO_MEM}, - {"__f_to_ll", "lf", FLAG_NO_MEM}, - {"__ull_to_f", "fj", FLAG_NO_MEM}, - {"__ll_to_f", "fl", FLAG_NO_MEM}, - {"__ull_to_d", "dj", FLAG_NO_MEM}, - {"__ll_to_d", "dl", FLAG_NO_MEM}, - {"_exit", "vi"}, - {"_cleanup", "v"}, - {"_rld_new_interface", "pu", FLAG_VARARG}, - {"_exithandle", "v"}, - {"_prctl", "ii", FLAG_VARARG}, - {"_atod", "dpii"}, - {"pathconf", "ipi"}, - {"getenv", "pp"}, - {"gettxt", "ppp"}, - {"setlocale", "pip"}, - {"mmap", "ppuiiii"}, - {"munmap", "ipu"}, - {"mprotect", "ipui"}, - {"sysconf", "ii"}, - {"getpagesize", "i"}, - {"strerror", "pi"}, - {"ioctl", "iiu", FLAG_VARARG}, - {"fcntl", "iii", FLAG_VARARG}, - {"signal", "pit"}, - {"sigset", "pit"}, - {"get_fpc_csr", "i"}, - {"set_fpc_csr", "ii"}, - {"setjmp", "ip"}, - {"longjmp", "vpi"}, - {"tempnam", "ppp"}, - {"tmpnam", "pp"}, - {"mktemp", "pp"}, - {"mkstemp", "ip"}, - {"tmpfile", "p"}, - {"wait", "ip"}, - {"kill", "iii"}, - {"execlp", "ip", FLAG_VARARG}, - {"execv", "ipp"}, - {"execvp", "ipp"}, - {"fork", "i"}, - {"system", "ip"}, - {"tsearch", "pppp"}, - {"tfind", "pppp"}, - {"qsort", "vpuut"}, - {"regcmp", "pp", FLAG_VARARG}, - {"regex", "ppp", FLAG_VARARG}, - {"__assert", "vppi"}, + { "exit", "vi", 0 }, // override exit from application + { "abort", "v", 0 }, + { "sbrk", "pi", 0 }, + { "malloc", "pu", 0 }, + { "calloc", "puu", 0 }, + { "realloc", "ppu", 0 }, + { "free", "vp", 0 }, + { "fscanf", "ipp", FLAG_VARARG }, + { "printf", "ip", FLAG_VARARG }, + { "sprintf", "ipp", FLAG_VARARG }, + { "fprintf", "ipp", FLAG_VARARG }, + { "_doprnt", "ippp", 0 }, + { "strlen", "up", 0 }, + { "open", "ipii", 0 }, + { "creat", "ipi", 0 }, + { "access", "ipi", 0 }, + { "rename", "ipp", 0 }, + { "utime", "ipp", 0 }, + { "flock", "iii", 0 }, + { "chmod", "ipu", 0 }, + { "umask", "ii", FLAG_NO_MEM }, + { "ecvt", "pdipp", 0 }, + { "fcvt", "pdipp", 0 }, + { "sqrt", "dd", FLAG_NO_MEM }, + { "sqrtf", "ff", FLAG_NO_MEM }, + { "atoi", "ip", 0 }, + { "atol", "ip", 0 }, + { "atof", "dp", 0 }, + { "strtol", "ippi", 0 }, + { "strtoul", "uppi", 0 }, + { "strtoll", "lppi", 0 }, + { "strtoull", "jppi", 0 }, + { "strtod", "dpp", 0 }, + { "strchr", "ppi", 0 }, + { "strrchr", "ppi", 0 }, + { "strcspn", "upp", 0 }, + { "strpbrk", "ppp", 0 }, + { "fstat", "iip", 0 }, + { "stat", "ipp", 0 }, + { "ftruncate", "iii", 0 }, + { "truncate", "ipi", 0 }, + { "bcopy", "vppu", 0 }, + { "memcpy", "pppu", 0 }, + { "memccpy", "pppiu", 0 }, + { "read", "iipu", 0 }, + { "write", "iipu", 0 }, + { "fopen", "ppp", 0 }, + { "freopen", "pppp", 0 }, + { "fclose", "ip", 0 }, + { "ftell", "ip", 0 }, + { "rewind", "vp", 0 }, + { "fseek", "ipii", 0 }, + { "lseek", "iiii", 0 }, + { "fflush", "ip", 0 }, + { "fchown", "iiii", 0 }, + { "dup", "ii", 0 }, + { "dup2", "iii", 0 }, + { "pipe", "ip", 0 }, + { "perror", "vp", 0 }, + { "fdopen", "iip", 0 }, + { "memset", "ppiu", 0 }, + { "bcmp", "ippu", 0 }, + { "memcmp", "ippu", 0 }, + { "getpid", "i", FLAG_NO_MEM }, + { "getpgrp", "i", 0 }, + { "remove", "ip", 0 }, + { "unlink", "ip", 0 }, + { "close", "ii", 0 }, + { "strcmp", "ipp", 0 }, + { "strncmp", "ippu", 0 }, + { "strcpy", "ppp", 0 }, + { "strncpy", "pppu", 0 }, + { "strcat", "ppp", 0 }, + { "strncat", "pppu", 0 }, + { "strtok", "ppp", 0 }, + { "strstr", "ppp", 0 }, + { "strdup", "pp", 0 }, + { "toupper", "ii", FLAG_NO_MEM }, + { "tolower", "ii", FLAG_NO_MEM }, + { "gethostname", "ipu", 0 }, + { "isatty", "ii", 0 }, + { "strftime", "upupp", 0 }, + { "times", "ip", 0 }, + { "clock", "i", FLAG_NO_MEM }, + { "ctime", "pp", 0 }, + { "localtime", "pp", 0 }, + { "setvbuf", "ippiu", 0 }, + { "__semgetc", "ip", 0 }, + { "__semputc", "iip", 0 }, + { "fgetc", "ip", 0 }, + { "fgets", "ipip", 0 }, + { "__filbuf", "ip", 0 }, + { "__flsbuf", "iip", 0 }, + { "ungetc", "iip", 0 }, + { "gets", "pp", 0 }, + { "fread", "upuup", 0 }, + { "fwrite", "upuup", 0 }, + { "fputs", "ipp", 0 }, + { "puts", "ip", 0 }, + { "getcwd", "ppu", 0 }, + { "time", "ip", 0 }, + { "bzero", "vpu", 0 }, + { "fp_class_d", "id", FLAG_NO_MEM }, + { "ldexp", "ddi", FLAG_NO_MEM }, + { "__ll_mul", "lll", FLAG_NO_MEM }, + { "__ll_div", "lll", FLAG_NO_MEM }, + { "__ll_rem", "ljl", FLAG_NO_MEM }, + { "__ll_lshift", "llj", FLAG_NO_MEM }, + { "__ll_rshift", "llj", FLAG_NO_MEM }, + { "__ull_div", "jjj", FLAG_NO_MEM }, + { "__ull_rem", "jjj", FLAG_NO_MEM }, + { "__ull_rshift", "jjj", FLAG_NO_MEM }, + { "__d_to_ull", "jd", FLAG_NO_MEM }, + { "__d_to_ll", "ld", FLAG_NO_MEM }, + { "__f_to_ull", "jf", FLAG_NO_MEM }, + { "__f_to_ll", "lf", FLAG_NO_MEM }, + { "__ull_to_f", "fj", FLAG_NO_MEM }, + { "__ll_to_f", "fl", FLAG_NO_MEM }, + { "__ull_to_d", "dj", FLAG_NO_MEM }, + { "__ll_to_d", "dl", FLAG_NO_MEM }, + { "_exit", "vi", 0 }, + { "_cleanup", "v", 0 }, + { "_rld_new_interface", "pu", FLAG_VARARG }, + { "_exithandle", "v", 0 }, + { "_prctl", "ii", FLAG_VARARG }, + { "_atod", "dpii", 0 }, + { "pathconf", "ipi", 0 }, + { "getenv", "pp", 0 }, + { "gettxt", "ppp", 0 }, + { "setlocale", "pip", 0 }, + { "mmap", "ppuiiii", 0 }, + { "munmap", "ipu", 0 }, + { "mprotect", "ipui", 0 }, + { "sysconf", "ii", 0 }, + { "getpagesize", "i", 0 }, + { "strerror", "pi", 0 }, + { "ioctl", "iiu", FLAG_VARARG }, + { "fcntl", "iii", FLAG_VARARG }, + { "signal", "pit", 0 }, + { "sigset", "pit", 0 }, + { "get_fpc_csr", "i", 0 }, + { "set_fpc_csr", "ii", 0 }, + { "setjmp", "ip", 0 }, + { "longjmp", "vpi", 0 }, + { "tempnam", "ppp", 0 }, + { "tmpnam", "pp", 0 }, + { "mktemp", "pp", 0 }, + { "mkstemp", "ip", 0 }, + { "tmpfile", "p", 0 }, + { "wait", "ip", 0 }, + { "kill", "iii", 0 }, + { "execlp", "ip", FLAG_VARARG }, + { "execv", "ipp", 0 }, + { "execvp", "ipp", 0 }, + { "fork", "i", 0 }, + { "system", "ip", 0 }, + { "tsearch", "pppp", 0 }, + { "tfind", "pppp", 0 }, + { "qsort", "vpuut", 0 }, + { "regcmp", "pp", FLAG_VARARG }, + { "regex", "ppp", FLAG_VARARG }, + { "__assert", "vppi", 0 }, + { "twalk", "vpt", 0 }, + { "msync", "ipui", 0 }, + { "mkdir", "ipu", 0 }, + { "fputc", "iip", 0 }, + { "getopt", "iipp", 0 }, + { "link", "ipp", 0 }, + { "vsprintf", "ippp", 0 }, + { "fabs", "dd", FLAG_NO_MEM }, + { "sysid", "ip", 0 }, + { "realpath", "ppp", 0 }, + { "fsync", "ii", 0 }, + { "sleep", "uu", 0 }, + { "socket", "iiii", 0 }, + { "connect", "iipu", 0 }, + { "recv", "iipui", 0 }, + { "send", "iipui", 0 }, + { "shutdown", "iii", 0 }, + { "sscanf", "ipp", FLAG_VARARG }, + + // C++ functions + { "__nw__FUi", "pu", 0 }, + { "__dl__FPv", "vp", 0 }, }; -static void disassemble(void) { - csh handle; - cs_insn *disasm; - size_t disasm_size = 0; - assert(cs_open(CS_ARCH_MIPS, (cs_mode)(CS_MODE_MIPS64 | CS_MODE_BIG_ENDIAN), &handle) == CS_ERR_OK); - cs_option(handle, CS_OPT_DETAIL, CS_OPT_ON); +void disassemble(void) { + uint32_t i; + + RabbitizerConfig_Cfg.misc.omit0XOnSmallImm = true; + RabbitizerConfig_Cfg.misc.opcodeLJust -= 8; + RabbitizerConfig_Cfg.misc.upperCaseImm = false; insns.reserve(1 + text_section_len / sizeof(uint32_t)); // +1 for dummy instruction - while (text_section_len > disasm_size * sizeof(uint32_t)) { - size_t disasm_len = disasm_size * sizeof(uint32_t); - size_t remaining = text_section_len - disasm_len; - size_t current_len = std::min(remaining, 1024); - size_t cur_disasm_size = cs_disasm(handle, &text_section[disasm_len], current_len, text_vaddr + disasm_len, 0, &disasm); - disasm_size += cur_disasm_size; - for (size_t i = 0; i < cur_disasm_size; i++) { - insns.push_back(Insn()); - Insn& insn = insns.back(); - insn.id = disasm[i].id; - insn.mnemonic = disasm[i].mnemonic; - insn.op_str = disasm[i].op_str; - if (disasm[i].detail != nullptr && disasm[i].detail->mips.op_count > 0) { - insn.op_count = disasm[i].detail->mips.op_count; - memcpy(insn.operands, disasm[i].detail->mips.operands, sizeof(insn.operands)); - } - insn.is_jump = cs_insn_group(handle, &disasm[i], MIPS_GRP_JUMP) || insn.id == MIPS_INS_JAL || insn.id == MIPS_INS_BAL || insn.id == MIPS_INS_JALR; - insn.linked_insn = -1; - } - cs_free(disasm, cur_disasm_size); + + for (i = 0; i < text_section_len; i += sizeof(uint32_t)) { + uint32_t word = read_u32_be(&text_section[i]); + Insn insn(word, text_vaddr + i); + insns.push_back(insn); } - cs_close(&handle); { - // Add dummy instruction to avoid out of bounds - insns.push_back(Insn()); - Insn& insn = insns.back(); - insn.id = MIPS_INS_NOP; - insn.mnemonic = "nop"; + // Add dummy NOP instruction to avoid out of bounds + Insn insn(0x00000000, text_vaddr + i); insn.no_following_successor = true; + insns.push_back(insn); } } -static void add_function(uint32_t addr) { +void add_function(uint32_t addr) { if (addr >= text_vaddr && addr < text_vaddr + text_section_len) { - functions[addr]; + functions.insert({ addr, {} }); } } -static map::iterator find_function(uint32_t addr) { +map::iterator find_function(uint32_t addr) { if (functions.size() == 0) { return functions.end(); } + auto it = functions.upper_bound(addr); + if (it == functions.begin()) { return functions.end(); } + --it; return it; } +rabbitizer::Registers::Cpu::GprO32 get_dest_reg(const Insn& insn) { + switch (insn.instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_jalr: + // jalr technically modifies rd, so an empty case is here to avoid crashing + break; + + case UniqueId_cpu_li: + case UniqueId_cpu_la: + return insn.lila_dst_reg; + + default: + if (insn.instruction.modifiesRt()) { + return insn.instruction.GetO32_rt(); + } else if (insn.instruction.modifiesRd()) { + return insn.instruction.GetO32_rd(); + } + break; + } + + return rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero; +} + +uint32_t jump_table_target(Insn& insn, uint32_t case_index) { + assert(insn.jtbl_addr != 0); + + uint32_t case_addr = insn.jtbl_addr + case_index * 4; + uint32_t target_addr; + + if (rodata_vaddr <= case_addr && case_addr < rodata_vaddr + rodata_section_len) { + target_addr = read_u32_be(rodata_section + (case_addr - rodata_vaddr)); + } else if (srdata_vaddr <= case_addr && case_addr < srdata_vaddr + srdata_section_len) { + target_addr = read_u32_be(srdata_section + (case_addr - srdata_vaddr)); + } else { + assert(0 && "jump table not in .rodata or .srdata"); + } + + if (insn.jtbl_is_pic) { + target_addr += gp_value; + } + + return target_addr; +} + // try to find a matching LUI for a given register -static void link_with_lui(int offset, uint32_t reg, int mem_imm) -{ +void link_with_lui(int offset, rabbitizer::Registers::Cpu::GprO32 reg, int mem_imm) { #define MAX_LOOKBACK 128 // don't attempt to compute addresses for zero offset // end search after some sane max number of instructions int end_search = std::max(0, offset - MAX_LOOKBACK); + for (int search = offset - 1; search >= end_search; search--) { - // use an `if` instead of `case` block to allow breaking out of the `for` loop - if (insns[search].id == MIPS_INS_LUI) { - uint32_t rd = insns[search].operands[0].reg; - if (reg == rd) { - break; - } - } else if (insns[search].id == MIPS_INS_LW || - insns[search].id == MIPS_INS_LD || - insns[search].id == MIPS_INS_ADDIU || - //insns[search].id == MIPS_INS_ADDU || used in jump tables for offset - insns[search].id == MIPS_INS_ADD || - insns[search].id == MIPS_INS_SUB || - insns[search].id == MIPS_INS_SUBU) { - uint32_t rd = insns[search].operands[0].reg; - if (reg == rd) { - if (insns[search].id == MIPS_INS_LW && insns[search].operands[1].mem.base == MIPS_REG_GP) { - int mem_imm0 = (int)insns[search].operands[1].mem.disp; - uint32_t got_entry = (mem_imm0 + gp_value_adj) / sizeof(uint32_t); - if (got_entry < got_locals.size()) { - // used for static functions - char buf[32]; - uint32_t addr = got_locals[got_entry] + mem_imm; - insns[search].linked_insn = offset; - insns[search].linked_value = addr; - insns[offset].linked_insn = search; - insns[offset].linked_value = addr; - - //vaddr_references[addr].insert(text_vaddr + offset * 4); - - insns[search].id = MIPS_INS_LI; - insns[search].mnemonic = "li"; - sprintf(buf, "$%s, 0x%x", cs_reg_name(handle, rd), addr); - insns[search].op_str = buf; - insns[search].operands[1].type = MIPS_OP_IMM; - insns[search].operands[1].imm = addr; - - switch (insns[offset].id) { - case MIPS_INS_ADDIU: - insns[offset].id = MIPS_INS_MOVE; - insns[offset].operands[1].type = MIPS_OP_REG; - insns[offset].mnemonic = "move"; - sprintf(buf, "$%s, $%s", cs_reg_name(handle, insns[offset].operands[0].reg), cs_reg_name(handle, rd)); - insns[offset].op_str = buf; - if (addr >= text_vaddr && addr < text_vaddr + text_section_len) { - add_function(addr); - } - break; - case MIPS_INS_LB: - case MIPS_INS_LBU: - case MIPS_INS_SB: - case MIPS_INS_LH: - case MIPS_INS_LHU: - case MIPS_INS_SH: - case MIPS_INS_LW: - case MIPS_INS_SW: - case MIPS_INS_LDC1: - case MIPS_INS_LWC1: - case MIPS_INS_SWC1: - insns[offset].operands[1].mem.disp = 0; - sprintf(buf, "$%s, ($%s)", cs_reg_name(handle, insns[offset].operands[0].reg), cs_reg_name(handle, rd)); - insns[offset].op_str = buf; - break; - default: - assert(0); - } - } - break; - } else { - // ignore: reg is pointer, offset is probably struct data member - break; + switch (insns[search].instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_lui: + if (reg == insns[search].instruction.GetO32_rt()) { + goto loop_end; } - } - } else if (insns[search].id == MIPS_INS_JR && - insns[search].operands[0].reg == MIPS_REG_RA && offset - search >= 2) { - // stop looking when previous `jr ra` is hit, - // but ignore if `offset` is branch delay slot for this `jr ra` - break; + continue; + + case rabbitizer::InstrId::UniqueId::cpu_lw: + case rabbitizer::InstrId::UniqueId::cpu_ld: + case rabbitizer::InstrId::UniqueId::cpu_addiu: + case rabbitizer::InstrId::UniqueId::cpu_add: + case rabbitizer::InstrId::UniqueId::cpu_sub: + case rabbitizer::InstrId::UniqueId::cpu_subu: + if (reg == get_dest_reg(insns[search])) { + if ((insns[search].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_lw) && + insns[search].instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp) { + int mem_imm0 = insns[search].instruction.getProcessedImmediate(); + uint32_t got_entry = (mem_imm0 + gp_value_adj) / sizeof(uint32_t); + + if (got_entry < got_locals.size()) { + // used for static functions + uint32_t addr = got_locals[got_entry] + mem_imm; + insns[search].linked_insn = offset; + insns[search].linked_value = addr; + insns[offset].linked_insn = search; + insns[offset].linked_value = addr; + + // Patch instruction to contain full address + insns[search].lila_dst_reg = get_dest_reg(insns[search]); + insns[search].patchAddress(UniqueId_cpu_la, addr); + + // Patch instruction to have offset 0 + switch (insns[offset].instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_addiu: { + rabbitizer::Registers::Cpu::GprO32 dst_reg = insns[offset].instruction.GetO32_rt(); + insns[offset].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_move); + // Patch the destination register too + insns[offset].instruction.Set_rd(dst_reg); + } + + if (addr >= text_vaddr && addr < text_vaddr + text_section_len) { + add_function(addr); + } + goto loop_end; + + case rabbitizer::InstrId::UniqueId::cpu_lb: + case rabbitizer::InstrId::UniqueId::cpu_lbu: + case rabbitizer::InstrId::UniqueId::cpu_sb: + case rabbitizer::InstrId::UniqueId::cpu_lh: + case rabbitizer::InstrId::UniqueId::cpu_lhu: + case rabbitizer::InstrId::UniqueId::cpu_sh: + case rabbitizer::InstrId::UniqueId::cpu_lw: + case rabbitizer::InstrId::UniqueId::cpu_sw: + case rabbitizer::InstrId::UniqueId::cpu_ldc1: + case rabbitizer::InstrId::UniqueId::cpu_lwc1: + case rabbitizer::InstrId::UniqueId::cpu_swc1: + insns[offset].patchImmediate(0); + goto loop_end; + + default: + assert(0 && "Unsupported instruction type"); + } + } + goto loop_end; + } else { + // ignore: reg is pointer, offset is probably struct data member + goto loop_end; + } + } + + continue; + + case rabbitizer::InstrId::UniqueId::cpu_jr: + if ((insns[search].instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra) && + (offset - search >= 2)) { + // stop looking when previous `jr ra` is hit, + // but ignore if `offset` is branch delay slot for this `jr ra` + goto loop_end; + } + continue; + + default: + continue; } } +loop_end:; } // for a given `jalr t9`, find the matching t9 load -static void link_with_jalr(int offset) -{ +void link_with_jalr(int offset) { // end search after some sane max number of instructions int end_search = std::max(0, offset - MAX_LOOKBACK); + for (int search = offset - 1; search >= end_search; search--) { - if (insns[search].operands[0].reg == MIPS_REG_T9) { - if (insns[search].id == MIPS_INS_LW || insns[search].id == MIPS_INS_LI) { - if (insns[search].is_global_got_memop || insns[search].id == MIPS_INS_LI) { - char buf[32]; - sprintf(buf, "0x%x", insns[search].linked_value); - insns[search].linked_insn = offset; - insns[offset].linked_insn = search; - insns[offset].linked_value = insns[search].linked_value; - //insns[offset].label = insns[search].label; - //function_entry_points.insert(insns[search].linked_value); - insns[offset].id = MIPS_INS_JAL; - insns[offset].mnemonic = "jal"; - insns[offset].op_str = buf; - insns[offset].operands[0].type = MIPS_OP_IMM; - insns[offset].operands[0].imm = insns[search].linked_value; - insns[search].id = MIPS_INS_NOP; - insns[search].mnemonic = "nop"; - insns[search].op_str = ""; - insns[search].is_global_got_memop = false; - add_function(insns[search].linked_value); - } - break; - } else if (insns[search].id == MIPS_INS_ADDIU) { - if (insns[search].linked_insn != -1) { - //function_entry_points.insert(insns[search].linked_value); - uint32_t first = insns[search].linked_insn; - insns[search].linked_insn = offset; - insns[offset].linked_insn = first; - insns[offset].linked_value = insns[search].linked_value; - } - break; - } else if (insns[search].id == MIPS_INS_LI) { - if (insns[search].linked_insn != -1) { - //function_entry_points.insert(insns[search].linked_value); - uint32_t first = insns[search].linked_insn; - insns[search].linked_insn = offset; - insns[offset].linked_insn = first; - insns[offset].linked_value = insns[search].linked_value; - insns[search].id = MIPS_INS_NOP; - insns[search].mnemonic = "nop"; - insns[search].op_str = ""; - } - break; - } else if (insns[search].id == MIPS_INS_LD || - insns[search].id == MIPS_INS_ADDU || - insns[search].id == MIPS_INS_ADD || - insns[search].id == MIPS_INS_SUB || - insns[search].id == MIPS_INS_SUBU) { - break; + if (get_dest_reg(insns[search]) == rabbitizer::Registers::Cpu::GprO32::GPR_O32_t9) { + // should be a switch with returns + switch (insns[search].instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_lw: + case UniqueId_cpu_la: + if (insns[search].is_global_got_memop || + (insns[search].instruction.getUniqueId() == UniqueId_cpu_la)) { + insns[search].linked_insn = offset; + insns[offset].linked_insn = search; + insns[offset].linked_value = insns[search].linked_value; + + insns[offset].patchAddress(rabbitizer::InstrId::UniqueId::cpu_jal, insns[search].linked_value); + + insns[search].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); + insns[search].is_global_got_memop = false; + + add_function(insns[search].linked_value); + } + return; + + case rabbitizer::InstrId::UniqueId::cpu_addiu: + if (insns[search].linked_insn != -1) { + uint32_t first = insns[search].linked_insn; + + // not describing as patched since instruction not edited + insns[search].linked_insn = offset; + insns[offset].linked_insn = first; + insns[offset].linked_value = insns[search].linked_value; + } + return; + + case rabbitizer::InstrId::UniqueId::cpu_ld: + case rabbitizer::InstrId::UniqueId::cpu_addu: + case rabbitizer::InstrId::UniqueId::cpu_add: + case rabbitizer::InstrId::UniqueId::cpu_sub: + case rabbitizer::InstrId::UniqueId::cpu_subu: + return; + + default: + break; } - } else if (insns[search].id == MIPS_INS_JR && - insns[search].operands[0].reg == MIPS_REG_RA) - { + } else if ((insns[search].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jr) && + (insns[search].instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra)) { // stop looking when previous `jr ra` is hit - break; + return; } } } -static void pass1(void) { +// TODO: uniformise use of insn vs insns[i] +void pass1(void) { for (size_t i = 0; i < insns.size(); i++) { Insn& insn = insns[i]; - if (insn.id == MIPS_INS_BAL) { - insn.id = MIPS_INS_JAL; - insn.mnemonic = "jal"; - } - if (insn.is_jump) { - if (insn.id == MIPS_INS_JAL || insn.id == MIPS_INS_J) { - uint32_t target = (uint32_t)insn.operands[0].imm; + + if (insn.instruction.isJump() || insn.instruction.isBranch()) { + if (insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jal || + insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_j || + insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_bal || + insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_bltzal || + insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_bgezal || + insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_bltzall || + insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_bgezall) { + uint32_t target = insn.getAddress(); + label_addresses.insert(target); add_function(target); - } else if (insn.id == MIPS_INS_JR) { + } else if (insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jr) { // sltiu $at, $ty, z // sw $reg, offset($sp) (very seldom, one or more, usually in func entry) // lw $gp, offset($sp) (if PIC, and very seldom) @@ -514,33 +737,40 @@ static void pass1(void) { // jr $tx // IDO 7.1: - //lw at,offset(gp) - //andi t9,t8,0x3f - //sll t9,t9,0x2 - //addu at,at,t9 - //lw t9,offset(at) - //addu t9,t9,gp - //jr t9 + // lw at,offset(gp) + // andi t9,t8,0x3f + // sll t9,t9,0x2 + // addu at,at,t9 + // lw t9,offset(at) + // addu t9,t9,gp + // jr t9 // IDO 5.3: - //lw at,offset(gp) - //andi t3,t2,0x3f - //sll t3,t3,0x2 - //addu at,at,t3 - //something - //lw t3,offset(at) - //something - //addu t3,t3,gp - //jr t3 + // lw at,offset(gp) + // andi t3,t2,0x3f + // sll t3,t3,0x2 + // addu at,at,t3 + // something + // lw t3,offset(at) + // something + // addu t3,t3,gp + // jr t3 if (i >= 7 && rodata_section != NULL) { - bool is_pic = insns[i - 1].id == MIPS_INS_ADDU && insns[i - 1].operands[2].reg == MIPS_REG_GP; - bool has_nop = insns[i - is_pic - 1].id == MIPS_INS_NOP; - bool has_extra = insns[i - is_pic - has_nop - 5].id != MIPS_INS_BEQZ; - int lw = i - is_pic - has_nop - 1; - if (insns[lw].id != MIPS_INS_LW) { + bool is_pic = + (insns[i - 1].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_addu) && + (insns[i - 1].instruction.GetO32_rt() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp); + bool has_nop = + insns[i - is_pic - 1].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_nop; + bool has_extra = insns[i - is_pic - has_nop - 5].instruction.getUniqueId() != + rabbitizer::InstrId::UniqueId::cpu_beqz; + int lw = i - (int)is_pic - (int)has_nop - 1; + + if (insns[lw].instruction.getUniqueId() != rabbitizer::InstrId::UniqueId::cpu_lw) { --lw; } - if (insns[lw].id == MIPS_INS_LW && insns[lw].linked_insn != -1) { + + if ((insns[lw].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_lw) && + (insns[lw].linked_insn != -1)) { int sltiu_index = -1; int andi_index = -1; uint32_t addu_index = lw - 1; @@ -548,49 +778,61 @@ static void pass1(void) { bool found = false; bool and_variant = false; int end = 14; - if (insns[addu_index].id != MIPS_INS_ADDU) { + + if (insns[addu_index].instruction.getUniqueId() != rabbitizer::InstrId::UniqueId::cpu_addu) { --addu_index; } - mips_reg index_reg = (mips_reg)insns[addu_index - 1].operands[1].reg; - if (insns[addu_index].id != MIPS_INS_ADDU) { + + if (insns[addu_index].instruction.getUniqueId() != rabbitizer::InstrId::UniqueId::cpu_addu) { goto skip; } - if (insns[addu_index - 1].id != MIPS_INS_SLL) { + + if (insns[addu_index - 1].instruction.getUniqueId() != rabbitizer::InstrId::UniqueId::cpu_sll) { goto skip; } - if (insns[addu_index - 1].operands[0].reg != insn.operands[0].reg) { + + if (get_dest_reg(insns[addu_index - 1]) != insn.instruction.GetO32_rs()) { goto skip; } + for (int j = 3; j <= 4; j++) { - if (insns[lw - j].id == MIPS_INS_ANDI) { + if (insns[lw - j].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_andi) { andi_index = lw - j; break; } } + if (i == 368393) { // In copt end = 18; } + for (int j = 5; j <= end; j++) { - if (insns[lw - has_extra - j].id == MIPS_INS_SLTIU && - insns[lw - has_extra - j].operands[0].reg == MIPS_REG_AT) - { + if ((insns[lw - has_extra - j].instruction.getUniqueId() == + rabbitizer::InstrId::UniqueId::cpu_sltiu) && + (insns[lw - has_extra - j].instruction.GetO32_rt() == + rabbitizer::Registers::Cpu::GprO32::GPR_O32_at)) { sltiu_index = j; break; } - if (insns[lw - has_extra - j].id == MIPS_INS_JR) { + + if (insns[lw - has_extra - j].instruction.getUniqueId() == + rabbitizer::InstrId::UniqueId::cpu_jr) { // Prevent going into a previous switch break; } } + if (sltiu_index != -1) { andi_index = -1; } - if (sltiu_index != -1 && insns[lw - has_extra - sltiu_index].id == MIPS_INS_SLTIU) { - num_cases = insns[lw - has_extra - sltiu_index].operands[2].imm; + + if (sltiu_index != -1 && insns[lw - has_extra - sltiu_index].instruction.getUniqueId() == + rabbitizer::InstrId::UniqueId::cpu_sltiu) { + num_cases = insns[lw - has_extra - sltiu_index].instruction.getProcessedImmediate(); found = true; } else if (andi_index != -1) { - num_cases = insns[andi_index].operands[2].imm + 1; + num_cases = insns[andi_index].instruction.getProcessedImmediate() + 1; found = true; and_variant = true; } else if (i == 219382) { @@ -601,211 +843,248 @@ static void pass1(void) { // Special hard case in copt where the initial sltiu is in another basic block found = true; num_cases = 12; + } else if (i == 37743) { + // Special hard case in edgcpfe where the initial sltiu is in another basic block + if ((lw == 37740) && (addu_index == 37739)) { + // few extra checks to try to ensure we are in edgcpfe + if ((insns[lw].instruction.getRaw() == 0x8C3970A4) && + (insns[addu_index].instruction.getRaw() == 0x00390821)) { + found = true; + num_cases = 6; + } + } + } else if (i == 208684) { + // Special hard case in edgcpfe where the initial sltiu is in another basic block + if ((lw == 208681) && (addu_index == 208680)) { + // few extra checks to try to ensure we are in edgcpfe + if ((insns[lw].instruction.getRaw() == 0x8C2B227C) && + (insns[addu_index].instruction.getRaw() == 0x002B0821)) { + found = true; + num_cases = 8; + } + } } + if (found) { uint32_t jtbl_addr = insns[lw].linked_value; + if (is_pic) { - insns[i - 1].id = MIPS_INS_NOP; - } - //printf("jump table at %08x, size %u\n", jtbl_addr, num_cases); - insn.jtbl_addr = jtbl_addr; - insn.num_cases = num_cases; - insn.index_reg = index_reg; - insns[lw].id = MIPS_INS_NOP; - insns[addu_index].id = MIPS_INS_NOP; - insns[addu_index - 1].id = MIPS_INS_NOP; - if (!and_variant) { - insns[addu_index - 2].id = MIPS_INS_NOP; + insns[i - 1].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); } - if (jtbl_addr < rodata_vaddr || jtbl_addr + num_cases * sizeof(uint32_t) > rodata_vaddr + rodata_section_len) { - fprintf(stderr, "jump table outside rodata\n"); - exit(EXIT_FAILURE); + insn.jtbl_addr = jtbl_addr; + insn.num_cases = num_cases; + insn.index_reg = insns[addu_index - 1].instruction.GetO32_rt(); + insn.jtbl_is_pic = is_pic; + insns[lw].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); + + insns[addu_index].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); + + insns[addu_index - 1].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); + + if (!and_variant) { + insns[addu_index - 2].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); } - for (uint32_t i = 0; i < num_cases; i++) { - uint32_t target_addr = read_u32_be(rodata_section + (jtbl_addr - rodata_vaddr) + i * sizeof(uint32_t)); - target_addr += gp_value; - //printf("%08X\n", target_addr); - label_addresses.insert(target_addr); + + for (uint32_t case_index = 0; case_index < num_cases; case_index++) { + label_addresses.insert(jump_table_target(insn, case_index)); } } - skip:; + skip:; } } + } else if (insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jalr) { + // empty + } else if (insn.instruction.isBranch()) { + uint32_t target = insn.getAddress(); + + label_addresses.insert(target); } else { - for (int j = 0; j < insn.op_count; j++) { - if (insn.operands[j].type == MIPS_OP_IMM) { - uint32_t target = (uint32_t)insn.operands[j].imm; - label_addresses.insert(target); - } - } + assert(!"Unreachable code"); } } - switch (insns[i].id) { + + switch (insns[i].instruction.getUniqueId()) { // find floating point LI - case MIPS_INS_MTC1: - { - unsigned int rt = insns[i].operands[0].reg; + case rabbitizer::InstrId::UniqueId::cpu_mtc1: { + rabbitizer::Registers::Cpu::GprO32 rt = insns[i].instruction.GetO32_rt(); + for (int s = i - 1; s >= 0; s--) { - if (insns[s].id == MIPS_INS_LUI && insns[s].operands[0].reg == rt) { - float f; - uint32_t lui_imm = (uint32_t)(insns[s].operands[1].imm << 16); - memcpy(&f, &lui_imm, sizeof(f)); - insns[s].operands[1].imm <<= 16; - // link up the LUI with this instruction and the float - insns[s].linked_insn = i; - insns[s].linked_float = f; - // rewrite LUI instruction to be LI - insns[s].id = MIPS_INS_LI; - insns[s].mnemonic = "li"; - break; - } else if (insns[s].id == MIPS_INS_LW || - insns[s].id == MIPS_INS_LD || - insns[s].id == MIPS_INS_LH || - insns[s].id == MIPS_INS_LHU || - insns[s].id == MIPS_INS_LB || - insns[s].id == MIPS_INS_LBU || - insns[s].id == MIPS_INS_ADDIU || - insns[s].id == MIPS_INS_ADD || - insns[s].id == MIPS_INS_SUB || - insns[s].id == MIPS_INS_SUBU) { - unsigned int rd = insns[s].operands[0].reg; - if (rt == rd) { - break; - } - } else if (insns[s].id == MIPS_INS_JR && - insns[s].operands[0].reg == MIPS_REG_RA) { - // stop looking when previous `jr ra` is hit - break; + switch (insns[s].instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_lui: + if (insns[s].instruction.GetO32_rt() == rt) { + float f; + uint32_t lui_imm = insns[s].instruction.getProcessedImmediate() << 16; + + memcpy(&f, &lui_imm, sizeof(f)); + // link up the LUI with this instruction and the float + insns[s].linked_insn = i; + insns[s].linked_float = f; + // rewrite LUI instruction to be LI + insns[s].lila_dst_reg = get_dest_reg(insns[s]); + insns[s].patchInstruction(UniqueId_cpu_li); + insns[s].patchImmediate(lui_imm); + } + goto loop_end; + + case rabbitizer::InstrId::UniqueId::cpu_lw: + case rabbitizer::InstrId::UniqueId::cpu_ld: + case rabbitizer::InstrId::UniqueId::cpu_lh: + case rabbitizer::InstrId::UniqueId::cpu_lhu: + case rabbitizer::InstrId::UniqueId::cpu_lb: + case rabbitizer::InstrId::UniqueId::cpu_lbu: + case rabbitizer::InstrId::UniqueId::cpu_addiu: + if (rt == insns[s].instruction.GetO32_rt()) { + goto loop_end; + } + continue; + + case rabbitizer::InstrId::UniqueId::cpu_add: + case rabbitizer::InstrId::UniqueId::cpu_sub: + case rabbitizer::InstrId::UniqueId::cpu_subu: + if (rt == insns[s].instruction.GetO32_rd()) { + goto loop_end; + } + continue; + + case rabbitizer::InstrId::UniqueId::cpu_jr: + if (insns[s].instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra) { + goto loop_end; + } + continue; + + default: + continue; } } - break; - } - case MIPS_INS_SD: - case MIPS_INS_SW: - case MIPS_INS_SH: - case MIPS_INS_SB: - case MIPS_INS_LB: - case MIPS_INS_LBU: - case MIPS_INS_LD: - case MIPS_INS_LDL: - case MIPS_INS_LDR: - case MIPS_INS_LH: - case MIPS_INS_LHU: - case MIPS_INS_LW: - case MIPS_INS_LWU: - case MIPS_INS_LDC1: - case MIPS_INS_LWC1: - case MIPS_INS_LWC2: - case MIPS_INS_LWC3: - case MIPS_INS_SWC1: - case MIPS_INS_SWC2: - case MIPS_INS_SWC3: - { - unsigned int mem_rs = insns[i].operands[1].mem.base; - int mem_imm = (int)insns[i].operands[1].mem.disp; - if (mem_rs == MIPS_REG_GP) { + loop_end:; + } break; + + case rabbitizer::InstrId::UniqueId::cpu_sd: + case rabbitizer::InstrId::UniqueId::cpu_sw: + case rabbitizer::InstrId::UniqueId::cpu_sh: + case rabbitizer::InstrId::UniqueId::cpu_sb: + case rabbitizer::InstrId::UniqueId::cpu_lb: + case rabbitizer::InstrId::UniqueId::cpu_lbu: + case rabbitizer::InstrId::UniqueId::cpu_ld: + case rabbitizer::InstrId::UniqueId::cpu_ldl: + case rabbitizer::InstrId::UniqueId::cpu_ldr: + case rabbitizer::InstrId::UniqueId::cpu_lh: + case rabbitizer::InstrId::UniqueId::cpu_lhu: + case rabbitizer::InstrId::UniqueId::cpu_lw: + case rabbitizer::InstrId::UniqueId::cpu_lwu: + case rabbitizer::InstrId::UniqueId::cpu_ldc1: + case rabbitizer::InstrId::UniqueId::cpu_lwc1: + case rabbitizer::InstrId::UniqueId::cpu_lwc2: + case rabbitizer::InstrId::UniqueId::cpu_swc1: + case rabbitizer::InstrId::UniqueId::cpu_swc2: { + rabbitizer::Registers::Cpu::GprO32 mem_rs = insns[i].instruction.GetO32_rs(); + int32_t mem_imm = insns[i].instruction.getProcessedImmediate(); + + if (mem_rs == rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp) { unsigned int got_entry = (mem_imm + gp_value_adj) / sizeof(unsigned int); + if (got_entry >= got_locals.size()) { got_entry -= got_locals.size(); if (got_entry < got_globals.size()) { - assert(insn.id == MIPS_INS_LW); - //printf("gp 0x%08x %s\n", mem_imm, got_globals[got_entry].name); + assert(insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_lw); unsigned int dest_vaddr = got_globals[got_entry]; + insns[i].is_global_got_memop = true; insns[i].linked_value = dest_vaddr; - //insns[i].label = got_globals[got_entry].name; - //vaddr_references[dest_vaddr].insert(vaddr + i * 4); - //disasm_add_data_addr(state, dest_vaddr); - insns[i].id = MIPS_INS_LI; - insns[i].operands[1].imm = dest_vaddr; - char buf[32]; - sprintf(buf, "$%s, 0x%x", cs_reg_name(handle, insn.operands[0].reg), dest_vaddr); - insns[i].op_str = buf; + // patch to LA + insns[i].lila_dst_reg = get_dest_reg(insns[i]); + insns[i].patchAddress(UniqueId_cpu_la, dest_vaddr); } } } else { link_with_lui(i, mem_rs, mem_imm); } - break; - } - case MIPS_INS_ADDIU: - case MIPS_INS_ORI: - { - unsigned int rd = insns[i].operands[0].reg; - unsigned int rs = insns[i].operands[1].reg; - int64_t imm = insns[i].operands[2].imm; - if (rs == MIPS_REG_ZERO) { // becomes LI - char buf[32]; - insns[i].id = MIPS_INS_LI; - insns[i].operands[1].imm = imm; - insns[i].mnemonic = "li"; - sprintf(buf, "$%s, %" PRIi64, cs_reg_name(handle, rd), imm); - insns[i].op_str = buf; - } else if (/*rd == rs &&*/ rd != MIPS_REG_GP) { // only look for LUI if rd and rs are the same - link_with_lui(i, rs, (int)imm); + } break; + + case rabbitizer::InstrId::UniqueId::cpu_addiu: + case rabbitizer::InstrId::UniqueId::cpu_ori: { + // could be insn? + rabbitizer::Registers::Cpu::GprO32 rt = insns[i].instruction.GetO32_rt(); + rabbitizer::Registers::Cpu::GprO32 rs = insns[i].instruction.GetO32_rs(); + int32_t imm = insns[i].instruction.getProcessedImmediate(); + + if (rs == rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero) { // becomes LI + insns[i].lila_dst_reg = get_dest_reg(insns[i]); + insns[i].patchInstruction(UniqueId_cpu_li); + insns[i].patchImmediate(imm); + } else if (rt != rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp) { // only look for LUI if rt and rs are + // the same + link_with_lui(i, rs, imm); } - break; - } - case MIPS_INS_JALR: - { - unsigned int r = insn.operands[0].reg; - if (r == MIPS_REG_T9) { + } break; + + case rabbitizer::InstrId::UniqueId::cpu_jalr: { + rabbitizer::Registers::Cpu::GprO32 rs = insn.instruction.GetO32_rs(); + + if (rs == rabbitizer::Registers::Cpu::GprO32::GPR_O32_t9) { link_with_jalr(i); if (insn.linked_insn != -1) { - char buf[32]; - sprintf(buf, "0x%x", insn.linked_value); - insn.id = MIPS_INS_JAL; - insn.mnemonic = "jal"; - insn.op_str = buf; - insn.operands[0].type = MIPS_OP_IMM; - insn.operands[0].imm = insn.linked_value; + insn.patchAddress(rabbitizer::InstrId::UniqueId::cpu_jal, insn.linked_value); + label_addresses.insert(insn.linked_value); add_function(insn.linked_value); } } + } break; + + default: break; - } } - if (insn.id == MIPS_INS_ADDU && insn.operands[0].reg == MIPS_REG_GP && insn.operands[1].reg == MIPS_REG_GP && insn.operands[2].reg == MIPS_REG_T9 && i >= 2) { - //state->function_entry_points.insert(vaddr + (i - 2) * 4); - for (int j = i - 2; j <= i; j++) { - insns[j].id = MIPS_INS_NOP; - insns[j].mnemonic = "nop"; - insns[j].op_str = ""; + + if ((insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_addu) && + (insn.instruction.GetO32_rd() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp) && + (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_gp) && + (insn.instruction.GetO32_rt() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_t9) && i >= 2) { + for (size_t j = i - 2; j <= i; j++) { + insns[j].patchInstruction(rabbitizer::InstrId::UniqueId::cpu_nop); } } } } -static uint32_t addr_to_i(uint32_t addr) { +uint32_t addr_to_i(uint32_t addr) { return (addr - text_vaddr) / 4; } -static void pass2(void) { +void pass2(void) { // Find returns in each function for (size_t i = 0; i < insns.size(); i++) { uint32_t addr = text_vaddr + i * 4; Insn& insn = insns[i]; - if (insn.id == MIPS_INS_JR && insn.operands[0].reg == MIPS_REG_RA) { + + if ((insn.instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jr) && + (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra)) { auto it = find_function(addr); assert(it != functions.end()); + it->second.returns.push_back(addr + 4); } - if (insn.is_global_got_memop && text_vaddr <= insn.operands[1].imm && insn.operands[1].imm < text_vaddr + text_section_len) { - uint32_t faddr = insn.operands[1].imm; - li_function_pointers.insert(faddr); - functions[faddr].referenced_by_function_pointer = true; + + if (insn.instruction.getUniqueId() == UniqueId_cpu_la) { + uint32_t faddr = insn.getAddress(); + + if ((text_vaddr <= faddr) && (faddr < text_vaddr + text_section_len)) { + la_function_pointers.insert(faddr); + functions.at(faddr).referenced_by_function_pointer = true; #if INSPECT_FUNCTION_POINTERS - fprintf(stderr, "li function pointer: 0x%x at 0x%x\n", faddr, addr); + fprintf(stderr, "la function pointer: 0x%x at 0x%x\n", faddr, addr); #endif + } } } + for (auto it = functions.begin(); it != functions.end(); ++it) { if (it->second.returns.size() == 0) { uint32_t i = addr_to_i(it->first); auto str_it = symbol_names.find(it->first); + if (str_it != symbol_names.end() && str_it->second == "__start") { } else if (str_it != symbol_names.end() && str_it->second == "xmalloc") { @@ -825,14 +1104,14 @@ static void pass2(void) { // jr $ra // nop uint32_t alloc_new_addr = text_vaddr + (i + 7) * 4; - insns[i].id = MIPS_INS_JAL; - insns[i].op_count = 1; - insns[i].mnemonic = "jal"; - insns[i].op_str = "alloc_new"; - insns[i].operands[0].imm = alloc_new_addr; - assert(symbol_names.count(alloc_new_addr) && symbol_names[alloc_new_addr] == "alloc_new"); + + insns[i].patchAddress(rabbitizer::InstrId::UniqueId::cpu_jal, alloc_new_addr); + + assert(symbol_names.at(alloc_new_addr) == "alloc_new"); i++; - if (insns[i + 5].id == MIPS_INS_LI) { + + // LA + if (insns[i + 5].instruction.getUniqueId() == UniqueId_cpu_la) { // 7.1 insns[i] = insns[i + 5]; } else { @@ -840,17 +1119,17 @@ static void pass2(void) { insns[i] = insns[i + 3]; } i++; - insns[i].id = MIPS_INS_JR; - insns[i].op_count = 1; - insns[i].mnemonic = "jr"; - insns[i].op_str = "$ra"; - insns[i].operands[0].reg = MIPS_REG_RA; + + // JR $RA + insns[i].patched = true; + insns[i].instruction = rabbitizer::InstructionCpu(0x03E00008, insns[i].instruction.getVram()); it->second.returns.push_back(text_vaddr + i * 4 + 4); i++; + for (uint32_t j = 0; j < 4; j++) { - insns[i].id = MIPS_INS_NOP; - insns[i].op_count = 0; - insns[i].mnemonic = "nop"; + // NOP + insns[i].patched = true; + insns[i].instruction = rabbitizer::InstructionCpu(0, insns[i].instruction.getVram()); i++; } } else if (str_it != symbol_names.end() && str_it->second == "xfree") { @@ -859,29 +1138,31 @@ static void pass2(void) { // jr $ra // nop uint32_t alloc_dispose_addr = text_vaddr + (i + 4) * 4; - if (symbol_names.count(alloc_dispose_addr + 4) && symbol_names[alloc_dispose_addr + 4] == "alloc_dispose") { + + if (symbol_names.count(alloc_dispose_addr + 4) && + symbol_names.at(alloc_dispose_addr + 4) == "alloc_dispose") { alloc_dispose_addr += 4; } - insns[i].id = MIPS_INS_JAL; - insns[i].op_count = 1; - insns[i].mnemonic = "jal"; - insns[i].op_str = "alloc_dispose"; - insns[i].operands[0].imm = alloc_dispose_addr; - assert(symbol_names.count(alloc_dispose_addr) && symbol_names[alloc_dispose_addr] == "alloc_dispose"); + + insns[i].patchAddress(rabbitizer::InstrId::UniqueId::cpu_jal, alloc_dispose_addr); + assert(symbol_names.at(alloc_dispose_addr) == "alloc_dispose"); i++; + insns[i] = insns[i + 2]; i++; - insns[i].id = MIPS_INS_JR; - insns[i].op_count = 1; - insns[i].mnemonic = "jr"; - insns[i].op_str = "$ra"; - insns[i].operands[0].reg = MIPS_REG_RA; + + // JR $RA + insns[i].patched = true; + insns[i].instruction = rabbitizer::InstructionCpu(0x03E00008, insns[i].instruction.getVram()); it->second.returns.push_back(text_vaddr + i * 4 + 4); i++; - insns[i].id = MIPS_INS_NOP; - insns[i].op_count = 0; - insns[i].mnemonic = "nop"; - } else if (insns[i].id == MIPS_INS_LW && insns[i + 1].id == MIPS_INS_MOVE && insns[i + 2].id == MIPS_INS_JALR) { + + // NOP + insns[i].patched = true; + insns[i].instruction = rabbitizer::InstructionCpu(0, insns[i].instruction.getVram()); + } else if ((insns[i].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_lw) && + (insns[i + 1].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_move) && + (insns[i + 2].instruction.getUniqueId() == rabbitizer::InstrId::UniqueId::cpu_jalr)) { /* 408f50: 8f998010 lw t9,-32752(gp) 408f54: 03e07821 move t7,ra @@ -892,7 +1173,9 @@ static void pass2(void) { abort(); } } + auto next = it; + ++next; if (next == functions.end()) { it->second.end_addr = text_vaddr + text_section_len; @@ -902,103 +1185,119 @@ static void pass2(void) { } } -static void add_edge(uint32_t from, uint32_t to, bool function_entry = false, bool function_exit = false, bool extern_function = false, bool function_pointer = false) { +void add_edge(uint32_t from, uint32_t to, EdgeType edge_type = EdgeType::NORMAL) { Edge fe = Edge(), be = Edge(); + fe.i = to; be.i = from; - fe.function_entry = function_entry; - be.function_entry = function_entry; - fe.function_exit = function_exit; - be.function_exit = function_exit; - fe.extern_function = extern_function; - be.extern_function = extern_function; - fe.function_pointer = function_pointer; - be.function_pointer = function_pointer; + fe.edge_type = edge_type; + be.edge_type = edge_type; insns[from].successors.push_back(fe); insns[to].predecessors.push_back(be); } -static void pass3(void) { +void pass3(void) { // Build graph for (size_t i = 0; i < insns.size(); i++) { - uint32_t addr = text_vaddr + i * 4; Insn& insn = insns[i]; + if (insn.no_following_successor) { continue; } - switch (insn.id) { - case MIPS_INS_BEQ: - case MIPS_INS_BGEZ: - case MIPS_INS_BGTZ: - case MIPS_INS_BLEZ: - case MIPS_INS_BLTZ: - case MIPS_INS_BNE: - case MIPS_INS_BEQZ: - case MIPS_INS_BNEZ: - case MIPS_INS_BC1F: - case MIPS_INS_BC1T: + + switch (insn.instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_beq: + case rabbitizer::InstrId::UniqueId::cpu_bgez: + case rabbitizer::InstrId::UniqueId::cpu_bgtz: + case rabbitizer::InstrId::UniqueId::cpu_blez: + case rabbitizer::InstrId::UniqueId::cpu_bltz: + case rabbitizer::InstrId::UniqueId::cpu_bne: + case rabbitizer::InstrId::UniqueId::cpu_beqz: + case rabbitizer::InstrId::UniqueId::cpu_bnez: + case rabbitizer::InstrId::UniqueId::cpu_bc1f: + case rabbitizer::InstrId::UniqueId::cpu_bc1t: add_edge(i, i + 1); - add_edge(i + 1, addr_to_i((uint32_t)insn.operands[insn.op_count - 1].imm)); + add_edge(i + 1, addr_to_i(insn.getAddress())); break; - case MIPS_INS_BEQL: - case MIPS_INS_BGEZL: - case MIPS_INS_BGTZL: - case MIPS_INS_BLEZL: - case MIPS_INS_BLTZL: - case MIPS_INS_BNEL: - case MIPS_INS_BC1FL: - case MIPS_INS_BC1TL: + case rabbitizer::InstrId::UniqueId::cpu_beql: + case rabbitizer::InstrId::UniqueId::cpu_bgezl: + case rabbitizer::InstrId::UniqueId::cpu_bgtzl: + case rabbitizer::InstrId::UniqueId::cpu_blezl: + case rabbitizer::InstrId::UniqueId::cpu_bltzl: + case rabbitizer::InstrId::UniqueId::cpu_bnel: + case rabbitizer::InstrId::UniqueId::cpu_bc1fl: + case rabbitizer::InstrId::UniqueId::cpu_bc1tl: add_edge(i, i + 1); add_edge(i, i + 2); - add_edge(i + 1, addr_to_i((uint32_t)insn.operands[insn.op_count - 1].imm)); + add_edge(i + 1, addr_to_i(insn.getAddress())); insns[i + 1].no_following_successor = true; // don't inspect delay slot break; - case MIPS_INS_B: - case MIPS_INS_J: + case rabbitizer::InstrId::UniqueId::cpu_b: + case rabbitizer::InstrId::UniqueId::cpu_j: add_edge(i, i + 1); - add_edge(i + 1, addr_to_i((uint32_t)insn.operands[0].imm)); + add_edge(i + 1, addr_to_i(insn.getAddress())); insns[i + 1].no_following_successor = true; // don't inspect delay slot break; - case MIPS_INS_JR: { + case rabbitizer::InstrId::UniqueId::cpu_jr: { add_edge(i, i + 1); + if (insn.jtbl_addr != 0) { - uint32_t jtbl_pos = insn.jtbl_addr - rodata_vaddr; - assert(jtbl_pos < rodata_section_len && jtbl_pos + insn.num_cases * 4 <= rodata_section_len); for (uint32_t j = 0; j < insn.num_cases; j++) { - uint32_t dest_addr = read_u32_be(rodata_section + jtbl_pos + j * 4) + gp_value; + uint32_t dest_addr = jump_table_target(insn, j); + add_edge(i + 1, addr_to_i(dest_addr)); } } else { - assert(insn.operands[0].reg == MIPS_REG_RA && "jump to address in register not supported"); + assert(insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra && + "jump to address in register not supported"); } + insns[i + 1].no_following_successor = true; // don't inspect delay slot break; } - case MIPS_INS_JAL: { + case rabbitizer::InstrId::UniqueId::cpu_jal: + case rabbitizer::InstrId::UniqueId::cpu_bal: + case rabbitizer::InstrId::UniqueId::cpu_bltzal: + case rabbitizer::InstrId::UniqueId::cpu_bgezal: + case rabbitizer::InstrId::UniqueId::cpu_bltzall: + case rabbitizer::InstrId::UniqueId::cpu_bgezall: { + uint32_t dest = insn.getAddress(); + add_edge(i, i + 1); - uint32_t dest = (uint32_t)insn.operands[0].imm; + if (dest > mcount_addr && dest >= text_vaddr && dest < text_vaddr + text_section_len) { - add_edge(i + 1, addr_to_i(dest), true); + if (insn.instruction.isBranchLikely()) { + add_edge(i, i + 2, EdgeType::FUNCTION_CALL); + } else { + add_edge(i + 1, i + 2, EdgeType::FUNCTION_CALL); + } + + // function entry and exits + add_edge(i + 1, addr_to_i(dest), EdgeType::FUNCTION_ENTRY); + auto it = functions.find(dest); assert(it != functions.end()); + for (uint32_t ret_instr : it->second.returns) { - add_edge(addr_to_i(ret_instr), i + 2, false, true); + add_edge(addr_to_i(ret_instr), i + 2, EdgeType::FUNCTION_EXIT); } } else { - add_edge(i + 1, i + 2, false, false, true); + // external function call + add_edge(i + 1, i + 2, EdgeType::EXTERN_FUNCTION_CALL); } + insns[i + 1].no_following_successor = true; // don't inspect delay slot break; } - case MIPS_INS_JALR: + case rabbitizer::InstrId::UniqueId::cpu_jalr: // function pointer add_edge(i, i + 1); - add_edge(i + 1, i + 2, false, false, false, true); + add_edge(i + 1, i + 2, EdgeType::FUNCTION_POINTER_CALL); insns[i + 1].no_following_successor = true; // don't inspect delay slot break; @@ -1009,419 +1308,499 @@ static void pass3(void) { } } -static uint64_t map_reg(int32_t reg) { - if (reg > MIPS_REG_31) { - if (reg == MIPS_REG_HI) { - reg = MIPS_REG_31 + 1; - } else if (reg == MIPS_REG_LO) { - reg = MIPS_REG_31 + 2; - } else { - return 0; - } - } - return (uint64_t)1 << (reg - MIPS_REG_0 + 1); +#define GPR_O32_hi (rabbitizer::Registers::Cpu::GprO32)((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra + 1) +#define GPR_O32_lo (rabbitizer::Registers::Cpu::GprO32)((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra + 2) + +uint64_t map_reg(rabbitizer::Registers::Cpu::GprO32 reg) { + return (uint64_t)1 << ((int)reg - (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero + 1); } -static uint64_t temporary_regs(void) { +uint64_t temporary_regs(void) { + // clang-format off return - map_reg(MIPS_REG_T0) | - map_reg(MIPS_REG_T1) | - map_reg(MIPS_REG_T2) | - map_reg(MIPS_REG_T3) | - map_reg(MIPS_REG_T4) | - map_reg(MIPS_REG_T5) | - map_reg(MIPS_REG_T6) | - map_reg(MIPS_REG_T7) | - map_reg(MIPS_REG_T8) | - map_reg(MIPS_REG_T9); + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t4) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t5) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t6) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t7) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t8) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_t9); + // clang-format on } typedef enum { - TYPE_NOP, - TYPE_1S, - TYPE_2S, - TYPE_1D, - TYPE_1D_1S, - TYPE_1D_2S, - TYPE_D_LO_HI_2S, - TYPE_1S_POS1 + /* 0 */ TYPE_NOP, // No arguments + /* 1 */ TYPE_S, // in + /* 2 */ TYPE_D, // 1 out + /* 3 */ TYPE_D_S, // out, in } TYPE; -static TYPE insn_to_type(Insn& i) { - switch (i.id) { - case MIPS_INS_ADD: - case MIPS_INS_ADDU: - if (i.mnemonic != "add.s" && i.mnemonic != "add.d") { - return TYPE_1D_2S; - } else { + +TYPE insn_to_type(Insn& insn) { + switch (insn.instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_add_s: + case rabbitizer::InstrId::UniqueId::cpu_add_d: + return TYPE_NOP; + + case rabbitizer::InstrId::UniqueId::cpu_add: + case rabbitizer::InstrId::UniqueId::cpu_addu: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_addi: + case rabbitizer::InstrId::UniqueId::cpu_addiu: + case rabbitizer::InstrId::UniqueId::cpu_andi: + case rabbitizer::InstrId::UniqueId::cpu_ori: + case rabbitizer::InstrId::UniqueId::cpu_lb: + case rabbitizer::InstrId::UniqueId::cpu_lbu: + case rabbitizer::InstrId::UniqueId::cpu_lh: + case rabbitizer::InstrId::UniqueId::cpu_lhu: + case rabbitizer::InstrId::UniqueId::cpu_lw: + case rabbitizer::InstrId::UniqueId::cpu_lwl: + // case rabbitizer::InstrId::UniqueId::cpu_lwr: + case rabbitizer::InstrId::UniqueId::cpu_move: + case rabbitizer::InstrId::UniqueId::cpu_negu: + case rabbitizer::InstrId::UniqueId::cpu_not: + case rabbitizer::InstrId::UniqueId::cpu_sll: + case rabbitizer::InstrId::UniqueId::cpu_slti: + case rabbitizer::InstrId::UniqueId::cpu_sltiu: + case rabbitizer::InstrId::UniqueId::cpu_sra: + case rabbitizer::InstrId::UniqueId::cpu_srl: + case rabbitizer::InstrId::UniqueId::cpu_xori: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_mfhi: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_mflo: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_and: + case rabbitizer::InstrId::UniqueId::cpu_or: + case rabbitizer::InstrId::UniqueId::cpu_nor: + case rabbitizer::InstrId::UniqueId::cpu_sllv: + case rabbitizer::InstrId::UniqueId::cpu_slt: + case rabbitizer::InstrId::UniqueId::cpu_sltu: + case rabbitizer::InstrId::UniqueId::cpu_srav: + case rabbitizer::InstrId::UniqueId::cpu_srlv: + case rabbitizer::InstrId::UniqueId::cpu_subu: + case rabbitizer::InstrId::UniqueId::cpu_xor: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_cfc1: + case rabbitizer::InstrId::UniqueId::cpu_mfc1: + case UniqueId_cpu_li: + case UniqueId_cpu_la: + case rabbitizer::InstrId::UniqueId::cpu_lui: + return TYPE_D; + + case rabbitizer::InstrId::UniqueId::cpu_ctc1: + case rabbitizer::InstrId::UniqueId::cpu_bgez: + case rabbitizer::InstrId::UniqueId::cpu_bgezl: + case rabbitizer::InstrId::UniqueId::cpu_bgezal: + case rabbitizer::InstrId::UniqueId::cpu_bgezall: + case rabbitizer::InstrId::UniqueId::cpu_bgtz: + case rabbitizer::InstrId::UniqueId::cpu_bgtzl: + case rabbitizer::InstrId::UniqueId::cpu_blez: + case rabbitizer::InstrId::UniqueId::cpu_blezl: + case rabbitizer::InstrId::UniqueId::cpu_bltz: + case rabbitizer::InstrId::UniqueId::cpu_bltzl: + case rabbitizer::InstrId::UniqueId::cpu_bltzal: + case rabbitizer::InstrId::UniqueId::cpu_bltzall: + case rabbitizer::InstrId::UniqueId::cpu_beqz: + case rabbitizer::InstrId::UniqueId::cpu_bnez: + case rabbitizer::InstrId::UniqueId::cpu_mtc1: + return TYPE_S; + + case rabbitizer::InstrId::UniqueId::cpu_beq: + case rabbitizer::InstrId::UniqueId::cpu_beql: + case rabbitizer::InstrId::UniqueId::cpu_bne: + case rabbitizer::InstrId::UniqueId::cpu_bnel: + case rabbitizer::InstrId::UniqueId::cpu_sb: + case rabbitizer::InstrId::UniqueId::cpu_sh: + case rabbitizer::InstrId::UniqueId::cpu_sw: + case rabbitizer::InstrId::UniqueId::cpu_swl: + // case rabbitizer::InstrId::UniqueId::cpu_swr: + case rabbitizer::InstrId::UniqueId::cpu_tne: + case rabbitizer::InstrId::UniqueId::cpu_teq: + case rabbitizer::InstrId::UniqueId::cpu_tge: + case rabbitizer::InstrId::UniqueId::cpu_tgeu: + case rabbitizer::InstrId::UniqueId::cpu_tlt: + return TYPE_S; + + case rabbitizer::InstrId::UniqueId::cpu_div: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_div_s: + case rabbitizer::InstrId::UniqueId::cpu_div_d: + return TYPE_NOP; + + case rabbitizer::InstrId::UniqueId::cpu_divu: + case rabbitizer::InstrId::UniqueId::cpu_mult: + case rabbitizer::InstrId::UniqueId::cpu_multu: + return TYPE_D_S; + + case rabbitizer::InstrId::UniqueId::cpu_neg_s: + case rabbitizer::InstrId::UniqueId::cpu_neg_d: + return TYPE_NOP; + + case rabbitizer::InstrId::UniqueId::cpu_jalr: + return TYPE_S; + + case rabbitizer::InstrId::UniqueId::cpu_jr: + if (insn.jtbl_addr != 0) { + insn.instruction.Set_rs(insn.index_reg); + } + if (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra) { return TYPE_NOP; } + return TYPE_S; - case MIPS_INS_ADDI: - case MIPS_INS_ADDIU: - case MIPS_INS_ANDI: - case MIPS_INS_ORI: - case MIPS_INS_LB: - case MIPS_INS_LBU: - case MIPS_INS_LH: - case MIPS_INS_LHU: - case MIPS_INS_LW: - case MIPS_INS_LWL: - //case MIPS_INS_LWR: - case MIPS_INS_MOVE: - case MIPS_INS_NEGU: - case MIPS_INS_NOT: - case MIPS_INS_SLL: - case MIPS_INS_SLTI: - case MIPS_INS_SLTIU: - case MIPS_INS_SRA: - case MIPS_INS_SRL: - case MIPS_INS_XORI: - return TYPE_1D_1S; - - case MIPS_INS_MFHI: - i.operands[1].reg = MIPS_REG_HI; - return TYPE_1D_1S; - - case MIPS_INS_MFLO: - i.operands[1].reg = MIPS_REG_LO; - return TYPE_1D_1S; - - case MIPS_INS_AND: - case MIPS_INS_OR: - case MIPS_INS_NOR: - case MIPS_INS_SLLV: - case MIPS_INS_SLT: - case MIPS_INS_SLTU: - case MIPS_INS_SRAV: - case MIPS_INS_SRLV: - case MIPS_INS_SUBU: - case MIPS_INS_XOR: - return TYPE_1D_2S; - - case MIPS_INS_CFC1: - case MIPS_INS_MFC1: - case MIPS_INS_LI: - case MIPS_INS_LUI: - return TYPE_1D; - - case MIPS_INS_CTC1: - case MIPS_INS_BGEZ: - case MIPS_INS_BGEZL: - case MIPS_INS_BGTZ: - case MIPS_INS_BGTZL: - case MIPS_INS_BLEZ: - case MIPS_INS_BLEZL: - case MIPS_INS_BLTZ: - case MIPS_INS_BLTZL: - case MIPS_INS_BEQZ: - case MIPS_INS_BNEZ: - case MIPS_INS_MTC1: - return TYPE_1S; - - case MIPS_INS_BEQ: - case MIPS_INS_BEQL: - case MIPS_INS_BNE: - case MIPS_INS_BNEL: - case MIPS_INS_SB: - case MIPS_INS_SH: - case MIPS_INS_SW: - case MIPS_INS_SWL: - //case MIPS_INS_SWR: - case MIPS_INS_TNE: - case MIPS_INS_TEQ: - case MIPS_INS_TGE: - case MIPS_INS_TGEU: - case MIPS_INS_TLT: - return TYPE_2S; - - case MIPS_INS_DIV: - if (i.mnemonic != "div.s" && i.mnemonic != "div.d") { - return TYPE_D_LO_HI_2S; - } else { - return TYPE_NOP; - } - - case MIPS_INS_DIVU: - case MIPS_INS_MULT: - case MIPS_INS_MULTU: - return TYPE_D_LO_HI_2S; - - case MIPS_INS_NEG: - if (i.mnemonic != "neg.s" && i.mnemonic != "neg.d") { - return TYPE_1D_1S; - } else { - return TYPE_NOP; - } - - case MIPS_INS_JALR: - return TYPE_1S; - - case MIPS_INS_JR: - if (i.jtbl_addr != 0) { - i.operands[0].reg = i.index_reg; - } - if (i.operands[0].reg == MIPS_REG_RA) { - return TYPE_NOP; - } - return TYPE_1S; - - case MIPS_INS_LWC1: - case MIPS_INS_LDC1: - case MIPS_INS_SWC1: - case MIPS_INS_SDC1: - return TYPE_1S_POS1; + case rabbitizer::InstrId::UniqueId::cpu_lwc1: + case rabbitizer::InstrId::UniqueId::cpu_ldc1: + case rabbitizer::InstrId::UniqueId::cpu_swc1: + case rabbitizer::InstrId::UniqueId::cpu_sdc1: + return TYPE_S; default: return TYPE_NOP; } } -static void pass4(void) { - vector q; - uint64_t livein_func_start = 1U | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | map_reg(MIPS_REG_SP) | map_reg(MIPS_REG_ZERO); +uint64_t get_dest_reg_mask(const Insn& insn) { + switch (insn.instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_div: + case rabbitizer::InstrId::UniqueId::cpu_divu: + case rabbitizer::InstrId::UniqueId::cpu_mult: + case rabbitizer::InstrId::UniqueId::cpu_multu: + return map_reg(GPR_O32_lo) | map_reg(GPR_O32_hi); + + default: + return map_reg(get_dest_reg(insn)); + } +} + +uint64_t get_single_source_reg_mask(const rabbitizer::InstructionCpu& instr) { + switch (instr.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_mflo: + return map_reg(GPR_O32_lo); + case rabbitizer::InstrId::UniqueId::cpu_mfhi: + return map_reg(GPR_O32_hi); + + default: + break; + } + if (instr.hasOperandAlias(rabbitizer::OperandType::cpu_rs)) { + return map_reg(instr.GetO32_rs()); + } else if (instr.hasOperandAlias(rabbitizer::OperandType::cpu_rt)) { + return map_reg(instr.GetO32_rt()); + } else { + return 0; + } +} + +uint64_t get_all_source_reg_mask(const rabbitizer::InstructionCpu& instr) { + uint64_t ret = 0; + + switch (instr.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_mflo: + ret |= map_reg(GPR_O32_lo); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mfhi: + ret |= map_reg(GPR_O32_hi); + break; + + default: + break; + } + + if (instr.hasOperandAlias(rabbitizer::OperandType::cpu_rs)) { + ret |= map_reg(instr.GetO32_rs()); + } + if (instr.hasOperandAlias(rabbitizer::OperandType::cpu_rt) && !instr.modifiesRt()) { + ret |= map_reg(instr.GetO32_rt()); + } + return ret; +} + +void pass4(void) { + vector q; // "queue" + uint64_t livein_func_start = 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_sp) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero); q.push_back(main_addr); insns[addr_to_i(main_addr)].f_livein = livein_func_start; for (auto& it : data_function_pointers) { q.push_back(it.second); - insns[addr_to_i(it.second)].f_livein = livein_func_start | map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3); + insns[addr_to_i(it.second)].f_livein = livein_func_start | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3); } - for (auto& addr : li_function_pointers) { + + for (auto& addr : la_function_pointers) { q.push_back(addr); - insns[addr_to_i(addr)].f_livein = livein_func_start | map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3); + insns[addr_to_i(addr)].f_livein = livein_func_start | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3); } while (!q.empty()) { uint32_t addr = q.back(); q.pop_back(); - uint32_t idx = addr_to_i(addr); - Insn& i = insns[idx]; - uint64_t live = i.f_livein | 1; - switch (insn_to_type(i)) { - case TYPE_1D: - live |= map_reg(i.operands[0].reg); + uint32_t i = addr_to_i(addr); + Insn& insn = insns[i]; + uint64_t live = insn.f_livein | 1U; + uint64_t src_regs_map; + + switch (insn_to_type(insn)) { + case TYPE_D: + live |= get_dest_reg_mask(insn); break; - case TYPE_1D_1S: - if (live & map_reg(i.operands[1].reg)) { - live |= map_reg(i.operands[0].reg); + case TYPE_D_S: + src_regs_map = get_all_source_reg_mask(insn.instruction); + if ((live & src_regs_map) == src_regs_map) { + live |= get_dest_reg_mask(insn); } break; - case TYPE_1D_2S: - if ((live & map_reg(i.operands[1].reg)) && (live & map_reg(i.operands[2].reg))) { - live |= map_reg(i.operands[0].reg); - } - break; - - case TYPE_D_LO_HI_2S: - if ((live & map_reg(i.operands[0].reg)) && (live & map_reg(i.operands[1].reg))) { - live |= map_reg(MIPS_REG_LO); - live |= map_reg(MIPS_REG_HI); - } + case TYPE_S: + case TYPE_NOP: break; } - if ((i.f_liveout | live) == i.f_liveout) { + + if ((insn.f_liveout | live) == insn.f_liveout) { // No new bits continue; } - live |= i.f_liveout; - i.f_liveout = live; - bool function_entry = false; - for (Edge& e : i.successors) { + live |= insn.f_liveout; + insn.f_liveout = live; + + for (Edge& e : insn.successors) { uint64_t new_live = live; - if (e.function_exit) { - new_live &= 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1) | map_reg(MIPS_REG_ZERO); - } else if (e.function_entry) { - new_live &= 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_SP) | map_reg(MIPS_REG_ZERO); - function_entry = true; - } else if (e.extern_function) { - string name; - bool is_extern_function = false; - size_t extern_function_id; - auto it = symbol_names.find(insns[idx - 1].operands[0].imm); + + if (e.edge_type == EdgeType::FUNCTION_EXIT) { + new_live &= 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero); + } else if (e.edge_type == EdgeType::FUNCTION_ENTRY) { + new_live &= 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_sp) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero); + } else if (e.edge_type == EdgeType::FUNCTION_CALL) { + new_live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); + } else if (e.edge_type == EdgeType::EXTERN_FUNCTION_CALL) { + string_view name; + uint32_t address = insns[i - 1].getAddress(); + + // TODO: Can this only ever be a J-type instruction? + auto it = symbol_names.find(address); + const ExternFunction* found_fn = nullptr; + if (it != symbol_names.end()) { name = it->second; - for (size_t i = 0; i < sizeof(extern_functions) / sizeof(extern_functions[0]); i++) { - if (name == extern_functions[i].name) { - is_extern_function = true; - extern_function_id = i; + + for (auto& fn : extern_functions) { + if (name == fn.name) { + found_fn = &fn; break; } } - if (!is_extern_function) { - fprintf(stderr, "missing extern function: %s\n", name.c_str()); + + if (found_fn == nullptr) { + fprintf(stderr, "missing extern function: %s\n", string(name).c_str()); } } - assert(is_extern_function); - auto& fn = extern_functions[extern_function_id]; - char ret_type = fn.params[0]; - new_live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); + + assert(found_fn); + + char ret_type = found_fn->params[0]; + + new_live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); + switch (ret_type) { case 'i': case 'u': case 'p': - new_live |= map_reg(MIPS_REG_V0); + new_live |= map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0); break; + case 'f': break; + case 'd': break; + case 'v': break; + case 'l': case 'j': - new_live |= map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1); + new_live |= map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1); break; } - } else if (e.function_pointer) { - new_live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); - new_live |= map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1); + } else if (e.edge_type == EdgeType::FUNCTION_POINTER_CALL) { + new_live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); + new_live |= map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1); } + if ((insns[e.i].f_livein | new_live) != insns[e.i].f_livein) { insns[e.i].f_livein |= new_live; - q.push_back(text_vaddr + e.i * 4); - } - } - if (function_entry) { - // add one edge that skips the function call, for callee-saved register liveness propagation - live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); - if ((insns[idx + 1].f_livein | live) != insns[idx + 1].f_livein) { - insns[idx + 1].f_livein |= live; - q.push_back(text_vaddr + (idx + 1) * 4); + q.push_back(text_vaddr + e.i * sizeof(uint32_t)); } } } } -static void pass5(void) { - vector q; +void pass5(void) { + vector q; // "queue" assert(functions.count(main_addr)); - q = functions[main_addr].returns; + q = functions.at(main_addr).returns; for (auto addr : q) { - insns[addr_to_i(addr)].b_liveout = 1U | map_reg(MIPS_REG_V0); + insns[addr_to_i(addr)].b_liveout = 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0); } + for (auto& it : data_function_pointers) { - for (auto addr : functions[it.second].returns) { + for (auto addr : functions.at(it.second).returns) { q.push_back(addr); - insns[addr_to_i(addr)].b_liveout = 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1); + insns[addr_to_i(addr)].b_liveout = 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1); } } - for (auto& func_addr : li_function_pointers) { - for (auto addr : functions[func_addr].returns) { + + for (auto& func_addr : la_function_pointers) { + for (auto addr : functions.at(func_addr).returns) { q.push_back(addr); - insns[addr_to_i(addr)].b_liveout = 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1); + insns[addr_to_i(addr)].b_liveout = 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1); } } - for (size_t i = 0; i < insns.size(); i++) { - if (insns[i].f_livein != 0) { - // Instruction is reachable - q.push_back(text_vaddr + i * 4); + + for (auto& insn : insns) { + if (insn.f_livein != 0) { + q.push_back(insn.instruction.getVram()); } } while (!q.empty()) { uint32_t addr = q.back(); + q.pop_back(); - uint32_t idx = addr_to_i(addr); - Insn& i = insns[idx]; - uint64_t live = i.b_liveout | 1; - switch (insn_to_type(i)) { - case TYPE_1S: - live |= map_reg(i.operands[0].reg); + + uint32_t i = addr_to_i(addr); + Insn& insn = insns[i]; + uint64_t live = insn.b_liveout | 1; + + switch (insn_to_type(insn)) { + case TYPE_S: + live |= get_all_source_reg_mask(insn.instruction); break; - case TYPE_1S_POS1: - live |= map_reg(i.operands[1].reg); + case TYPE_D: + live &= ~get_dest_reg_mask(insn); break; - case TYPE_2S: - live |= map_reg(i.operands[0].reg); - live |= map_reg(i.operands[1].reg); - break; - - case TYPE_1D: - live &= ~map_reg(i.operands[0].reg); - break; - - case TYPE_1D_1S: - if (live & map_reg(i.operands[0].reg)) { - live &= ~map_reg(i.operands[0].reg); - live |= map_reg(i.operands[1].reg); + case TYPE_D_S: + if (live & get_dest_reg_mask(insn)) { + live &= ~get_dest_reg_mask(insn); + live |= get_all_source_reg_mask(insn.instruction); } break; - case TYPE_1D_2S: - if (live & map_reg(i.operands[0].reg)) { - live &= ~map_reg(i.operands[0].reg); - live |= map_reg(i.operands[1].reg); - live |= map_reg(i.operands[2].reg); - } + case TYPE_NOP: break; - - case TYPE_D_LO_HI_2S: { - bool used = (live & map_reg(MIPS_REG_LO)) || (live & map_reg(MIPS_REG_HI)); - live &= ~map_reg(MIPS_REG_LO); - live &= ~map_reg(MIPS_REG_HI); - if (used) { - live |= map_reg(i.operands[0].reg); - live |= map_reg(i.operands[1].reg); - } - break; - } } - if ((i.b_livein | live) == i.b_livein) { + + if ((insn.b_livein | live) == insn.b_livein) { // No new bits continue; } - live |= i.b_livein; - i.b_livein = live; - bool function_exit = false; - for (Edge& e : i.predecessors) { + live |= insn.b_livein; + insn.b_livein = live; + + for (Edge& e : insn.predecessors) { uint64_t new_live = live; - if (e.function_exit) { - new_live &= 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_V1); - function_exit = true; - } else if (e.function_entry) { - new_live &= 1U | map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_SP); - } else if (e.extern_function) { - string name; - bool is_extern_function = false; - size_t extern_function_id; - auto it = symbol_names.find(insns[idx - 2].operands[0].imm); + + if (e.edge_type == EdgeType::FUNCTION_EXIT) { + new_live &= 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1); + } else if (e.edge_type == EdgeType::FUNCTION_ENTRY) { + new_live &= 1U | map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_sp); + } else if (e.edge_type == EdgeType::FUNCTION_CALL) { + new_live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); + } else if (e.edge_type == EdgeType::EXTERN_FUNCTION_CALL) { + string_view name; + const ExternFunction* found_fn = nullptr; + uint32_t address = insns[i - 2].getAddress(); + // TODO: Can this only ever be a J-type instruction? + auto it = symbol_names.find(address); + if (it != symbol_names.end()) { name = it->second; - for (size_t i = 0; i < sizeof(extern_functions) / sizeof(extern_functions[0]); i++) { - if (name == extern_functions[i].name) { - is_extern_function = true; - extern_function_id = i; + for (auto& fn : extern_functions) { + if (name == fn.name) { + found_fn = &fn; break; } } } - assert(is_extern_function); - auto& fn = extern_functions[extern_function_id]; + + assert(found_fn); + uint64_t args = 1U; - if (fn.flags & FLAG_VARARG) { + + if (found_fn->flags & FLAG_VARARG) { // Assume the worst, that all four registers are used for (int j = 0; j < 4; j++) { - args |= map_reg(MIPS_REG_A0 + j); + args |= map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + j)); } } + int pos = 0; int pos_float = 0; bool only_floats_so_far = true; - for (const char *p = fn.params + 1; *p != '\0'; ++p) { + + for (const char* p = found_fn->params + 1; *p != '\0'; ++p) { switch (*p) { case 'i': case 'u': @@ -1429,29 +1808,38 @@ static void pass5(void) { case 't': only_floats_so_far = false; if (pos < 4) { - args |= map_reg(MIPS_REG_A0 + pos); + args |= map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)); } ++pos; break; + case 'f': if (only_floats_so_far && pos_float < 4) { pos_float += 2; } else if (pos < 4) { - args |= map_reg(MIPS_REG_A0 + pos); + args |= map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)); } ++pos; break; + case 'd': + // !!! if (pos % 1 != 0) { ++pos; } if (only_floats_so_far && pos_float < 4) { pos_float += 2; } else if (pos < 4) { - args |= map_reg(MIPS_REG_A0 + pos) | map_reg(MIPS_REG_A0 + pos + 1); + args |= map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)) | + map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos + 1)); } pos += 2; break; + case 'l': case 'j': if (pos % 1 != 0) { @@ -1459,64 +1847,86 @@ static void pass5(void) { } only_floats_so_far = false; if (pos < 4) { - args |= map_reg(MIPS_REG_A0 + pos) | map_reg(MIPS_REG_A0 + pos + 1); + args |= map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)) | + map_reg((rabbitizer::Registers::Cpu::GprO32)( + (int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos + 1)); } pos += 2; break; } } - args |= map_reg(MIPS_REG_SP); - new_live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); + args |= map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_sp); + new_live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); new_live |= args; - } else if (e.function_pointer) { - new_live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); - new_live |= map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3); + } else if (e.edge_type == EdgeType::FUNCTION_POINTER_CALL) { + new_live &= ~(map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1) | temporary_regs()); + new_live |= map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2) | + map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3); } + if ((insns[e.i].b_liveout | new_live) != insns[e.i].b_liveout) { insns[e.i].b_liveout |= new_live; - q.push_back(text_vaddr + e.i * 4); - } - } - if (function_exit) { - // add one edge that skips the function call, for callee-saved register liveness propagation - live &= ~(map_reg(MIPS_REG_V0) | map_reg(MIPS_REG_A0) | map_reg(MIPS_REG_A1) | - map_reg(MIPS_REG_A2) | map_reg(MIPS_REG_A3) | map_reg(MIPS_REG_V1) | temporary_regs()); - if ((insns[idx - 1].b_liveout | live) != insns[idx - 1].b_liveout) { - insns[idx - 1].b_liveout |= live; - q.push_back(text_vaddr + (idx - 1) * 4); + q.push_back(text_vaddr + e.i * sizeof(uint32_t)); } } } } -static void pass6(void) { +void pass6(void) { for (auto& it : functions) { uint32_t addr = it.first; Function& f = it.second; + + // Hardcode type of main to avoid relying on analyzing __start + if (addr == main_addr) { + f.nargs = 2; + f.nret = 1; + f.v0_in = false; + continue; + } + for (uint32_t ret : f.returns) { Insn& i = insns[addr_to_i(ret)]; - if (i.f_liveout & i.b_liveout & map_reg(MIPS_REG_V1)) { + + if (i.f_liveout & i.b_liveout & map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1)) { f.nret = 2; - } else if ((i.f_liveout & i.b_liveout & map_reg(MIPS_REG_V0)) && f.nret == 0) { + } else if ((i.f_liveout & i.b_liveout & map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)) && + f.nret == 0) { f.nret = 1; } } + Insn& insn = insns.at(addr_to_i(addr)); + for (int i = 0; i < 4; i++) { - if (insn.f_livein & insn.b_livein & map_reg(MIPS_REG_A0 + i)) { + if (insn.f_livein & insn.b_livein & + map_reg( + (rabbitizer::Registers::Cpu::GprO32)((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + i))) { f.nargs = 1 + i; } } - f.v0_in = (insn.f_livein & insn.b_livein & map_reg(MIPS_REG_V0)) != 0 && !f.referenced_by_function_pointer; + f.v0_in = (insn.f_livein & insn.b_livein & map_reg(rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)) != 0 && + !f.referenced_by_function_pointer; } } -static void dump(void) { +void dump(void) { for (size_t i = 0; i < insns.size(); i++) { Insn& insn = insns[i]; - uint32_t vaddr = text_vaddr + i * 4; + uint32_t vaddr = text_vaddr + i * sizeof(uint32_t); if (label_addresses.count(vaddr)) { if (symbol_names.count(vaddr)) { printf("L%08x: //%s\n", vaddr, symbol_names[vaddr].c_str()); @@ -1524,102 +1934,360 @@ static void dump(void) { printf("L%08x:\n", vaddr); } } - printf("\t%s %s\n", insn.mnemonic.c_str(), insn.op_str.c_str()); + + // TODO: construct an immediate override for the instructions + printf("\t%s", insn.disassemble().c_str()); + if (insn.patched) { + printf("\t[patched, immediate now 0x%X]", insn.patched_addr); + } + printf("\n"); } } -static const char *r(uint32_t reg) { - return cs_reg_name(handle, reg); -} - -static const char *wr(uint32_t reg) { - static const char *regs[] = { - "f0.w[0]", "f0.w[1]", - "f2.w[0]", "f2.w[1]", - "f4.w[0]", "f4.w[1]", - "f6.w[0]", "f6.w[1]", - "f8.w[0]", "f8.w[1]", - "f10.w[0]", "f10.w[1]", - "f12.w[0]", "f12.w[1]", - "f14.w[0]", "f14.w[1]", - "f16.w[0]", "f16.w[1]", - "f18.w[0]", "f18.w[1]", - "f20.w[0]", "f20.w[1]", - "f22.w[0]", "f22.w[1]", - "f24.w[0]", "f24.w[1]", - "f26.w[0]", "f26.w[1]", - "f28.w[0]", "f28.w[1]", - "f30.w[0]", "f30.w[1]" +const char* r(uint32_t reg) { + static const char* regs[] = { + /* */ "zero", "at", "v0", "v1", + /* */ "a0", "a1", "a2", "a3", + /* */ "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", + /* */ "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", + /* */ "t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra", }; - assert(reg >= MIPS_REG_F0 && reg <= MIPS_REG_F31); - return regs[reg - MIPS_REG_F0]; + + assert(reg < std::size(regs)); + return regs[reg]; } -static const char *fr(uint32_t reg) { +const char* wr(uint32_t reg) { + // clang-format off static const char *regs[] = { - "f0.f[0]", "f0.f[1]", - "f2.f[0]", "f2.f[1]", - "f4.f[0]", "f4.f[1]", - "f6.f[0]", "f6.f[1]", - "f8.f[0]", "f8.f[1]", - "f10.f[0]", "f10.f[1]", - "f12.f[0]", "f12.f[1]", - "f14.f[0]", "f14.f[1]", - "f16.f[0]", "f16.f[1]", - "f18.f[0]", "f18.f[1]", - "f20.f[0]", "f20.f[1]", - "f22.f[0]", "f22.f[1]", - "f24.f[0]", "f24.f[1]", - "f26.f[0]", "f26.f[1]", - "f28.f[0]", "f28.f[1]", - "f30.f[0]", "f30.f[1]" + "f0.w[0]", "f0.w[1]", "f1.w[0]", "f1.w[1]", + "f2.w[0]", "f2.w[1]", "f3.w[0]", "f3.w[1]", + "f4.w[0]", "f4.w[1]", "f5.w[0]", "f5.w[1]", + "f6.w[0]", "f6.w[1]", "f7.w[0]", "f7.w[1]", + "f8.w[0]", "f8.w[1]", "f9.w[0]", "f9.w[1]", + "f10.w[0]", "f10.w[1]", "f11.w[0]", "f11.w[1]", + "f12.w[0]", "f12.w[1]", "f13.w[0]", "f13.w[1]", + "f14.w[0]", "f14.w[1]", "f15.w[0]", "f15.w[1]", + "f16.w[0]", "f16.w[1]", "f17.w[0]", "f17.w[1]", + "f18.w[0]", "f18.w[1]", "f19.w[0]", "f19.w[1]", + "f20.w[0]", "f20.w[1]", "f21.w[0]", "f21.w[1]", + "f22.w[0]", "f22.w[1]", "f23.w[0]", "f23.w[1]", + "f24.w[0]", "f24.w[1]", "f25.w[0]", "f25.w[1]", + "f26.w[0]", "f26.w[1]", "f27.w[0]", "f27.w[1]", + "f28.w[0]", "f28.w[1]", "f29.w[0]", "f29.w[1]", + "f30.w[0]", "f30.w[1]", "f31.w[0]", "f31.w[1]", }; - assert(reg >= MIPS_REG_F0 && reg <= MIPS_REG_F31); - return regs[reg - MIPS_REG_F0]; -} + // clang-format on -static const char *dr(uint32_t reg) { - static const char *regs[] = { - "f0.d", - "f2.d", - "f4.d", - "f6.d", - "f8.d", - "f10.d", - "f12.d", - "f14.d", - "f16.d", - "f18.d", - "f20.d", - "f22.d", - "f24.d", - "f26.d", - "f28.d", - "f30.d" - }; - assert(reg >= MIPS_REG_F0 && reg <= MIPS_REG_F31 && (reg - MIPS_REG_F0) % 2 == 0); - return regs[(reg - MIPS_REG_F0) / 2]; -} + size_t index; -static void dump_instr(int i); - -static void dump_cond_branch(int i, const char *lhs, const char *op, const char *rhs) { - Insn& insn = insns[i]; - const char *cast1 = ""; - const char *cast2 = ""; - if (strcmp(op, "==") && strcmp(op, "!=")) { - cast1 = "(int)"; - if (strcmp(rhs, "0")) { - cast2 = "(int)"; + if (n32) { + // In N32, all registers access the lower half of the register + index = reg * 2; + } else { + // In O32, odd registers alias the upper half of the previous register + if (reg % 2 == 0) { + index = reg * 2; + } else { + index = (reg - 1) * 2 + 1; } } - printf("if (%s%s %s %s%s) {", cast1, lhs, op, cast2, rhs); - dump_instr(i + 1); - printf("goto L%x;}\n", (uint32_t)insn.operands[insn.op_count - 1].imm); + + assert(index < std::size(regs)); + return regs[index]; } -static void dump_cond_branch_likely(int i, const char *lhs, const char *op, const char *rhs) { - uint32_t target = text_vaddr + (i + 2) * 4; +const char* fr(uint32_t reg) { + // clang-format off + static const char *regs[] = { + "f0.f[0]", "f0.f[1]", "f1.f[0]", "f1.f[1]", + "f2.f[0]", "f2.f[1]", "f3.f[0]", "f3.f[1]", + "f4.f[0]", "f4.f[1]", "f5.f[0]", "f5.f[1]", + "f6.f[0]", "f6.f[1]", "f7.f[0]", "f7.f[1]", + "f8.f[0]", "f8.f[1]", "f9.f[0]", "f9.f[1]", + "f10.f[0]", "f10.f[1]", "f11.f[0]", "f11.f[1]", + "f12.f[0]", "f12.f[1]", "f13.f[0]", "f13.f[1]", + "f14.f[0]", "f14.f[1]", "f15.f[0]", "f15.f[1]", + "f16.f[0]", "f16.f[1]", "f17.f[0]", "f17.f[1]", + "f18.f[0]", "f18.f[1]", "f19.f[0]", "f19.f[1]", + "f20.f[0]", "f20.f[1]", "f21.f[0]", "f21.f[1]", + "f22.f[0]", "f22.f[1]", "f23.f[0]", "f23.f[1]", + "f24.f[0]", "f24.f[1]", "f25.f[0]", "f25.f[1]", + "f26.f[0]", "f26.f[1]", "f27.f[0]", "f27.f[1]", + "f28.f[0]", "f28.f[1]", "f29.f[0]", "f29.f[1]", + "f30.f[0]", "f30.f[1]", "f31.f[0]", "f31.f[1]", + }; + // clang-format on + + size_t index; + + if (n32) { + // In N32, all registers access the lower half of the register + index = reg * 2; + } else { + // In O32, odd registers alias the upper half of the previous register + if (reg % 2 == 0) { + index = reg * 2; + } else { + index = (reg - 1) * 2 + 1; + } + } + + assert(index < std::size(regs)); + return regs[index]; +} + +const char* dr(uint32_t reg) { + // clang-format off + static const char *regs[] = { + "f0", "f1", + "f2", "f3", + "f4", "f5", + "f6", "f7", + "f8", "f9", + "f10", "f11", + "f12", "f13", + "f14", "f15", + "f16", "f17", + "f18", "f19", + "f20", "f21", + "f22", "f23", + "f24", "f25", + "f26", "f27", + "f28", "f29", + "f30", "f31", + }; + // clang-format on + + size_t index = reg; + + if (!n32) { + // In O32, only even registers can be used as double registers + assert(reg % 2 == 0); + } + + assert(index < std::size(regs)); + return regs[index]; +} + +void dump_instr(int i); + +void dump_function_name(uint32_t vaddr) { + auto name_it = symbol_names.find(vaddr); + + if (name_it != symbol_names.end()) { + std::string name = name_it->second; + // Some names are mangled like set_tblmap..PAN + // Replace . with _ to make it a valid C identifier + std::replace(name.begin(), name.end(), '.', '_'); + printf("f_%s", name.c_str()); + } else { + printf("func_%x", vaddr); + } +} + +void dump_jal(int i, uint32_t imm) { + string_view name; + auto it = symbol_names.find(imm); + const ExternFunction* found_fn = nullptr; + + // Check for an external function at the address in the immediate. If it does not exist, function is internal + if (it != symbol_names.end()) { + name = it->second; + for (auto& fn : extern_functions) { + if (name == fn.name) { + found_fn = &fn; + break; + } + } + } + + dump_instr(i + 1); + + if (found_fn != nullptr) { + if (found_fn->flags & FLAG_VARARG) { + for (int j = 0; j < 4; j++) { + printf("MEM_U32(sp + %d) = %s;\n", j * 4, r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + j)); + } + } + + const char ret_type = found_fn->params[0]; + + switch (ret_type) { + case 'v': + break; + + case 'i': + case 'u': + case 'p': + printf("%s = ", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); + break; + + case 'f': + printf("%s = ", fr((int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fv0)); + break; + + case 'd': + printf("tempf64 = "); + break; + + case 'l': + case 'j': + printf("temp64 = "); + break; + } + + printf("wrapper_%s(", string(name).c_str()); + + bool first = true; + + if (!(found_fn->flags & FLAG_NO_MEM)) { + printf("mem"); + first = false; + } + + int pos = 0; + int pos_float = 0; + bool only_floats_so_far = true; + bool needs_sp = false; + + for (const char* p = &found_fn->params[1]; *p != '\0'; ++p) { + if (!first) { + printf(", "); + } + + first = false; + + switch (*p) { + case 't': + printf("trampoline, "); + needs_sp = true; + // fallthrough + case 'i': + case 'u': + case 'p': + only_floats_so_far = false; + if (pos < 4) { + printf("%s", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)); + } else { + printf("MEM_%c32(sp + %d)", *p == 'i' ? 'S' : 'U', pos * 4); + } + ++pos; + break; + + case 'f': + if (only_floats_so_far && pos_float < 4) { + printf("%s", fr((int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fa0 + pos_float)); + pos_float += 2; + } else if (pos < 4) { + printf("BITCAST_U32_TO_F32(%s)", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos)); + } else { + printf("BITCAST_U32_TO_F32(MEM_U32(sp + %d))", pos * 4); + } + ++pos; + break; + + case 'd': + if (pos % 1 != 0) { + ++pos; + } + if (only_floats_so_far && pos_float < 4) { + printf("double_from_FloatReg(%s)", + dr((int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fa0 + pos_float)); + pos_float += 2; + } else if (pos < 4) { + printf("BITCAST_U64_TO_F64(((uint64_t)%s << 32) | (uint64_t)%s)", + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos), + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos + 1)); + } else { + printf("BITCAST_U64_TO_F64(((uint64_t)MEM_U32(sp + %d) << 32) | " + "(uint64_t)MEM_U32(sp + " + "%d))", + pos * 4, (pos + 1) * 4); + } + pos += 2; + break; + + case 'l': + case 'j': + if (pos % 1 != 0) { + ++pos; + } + only_floats_so_far = false; + if (*p == 'l') { + printf("(int64_t)"); + } + if (pos < 4) { + printf("(((uint64_t)%s << 32) | (uint64_t)%s)", + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos), + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + pos + 1)); + } else { + printf("(((uint64_t)MEM_U32(sp + %d) << 32) | (uint64_t)MEM_U32(sp + %d))", pos * 4, + (pos + 1) * 4); + } + pos += 2; + break; + } + } + + if ((found_fn->flags & FLAG_VARARG) || needs_sp) { + printf("%s%s", first ? "" : ", ", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_sp)); + } + + printf(");\n"); + + if (ret_type == 'l' || ret_type == 'j') { + printf("%s = (uint32_t)(temp64 >> 32);\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); + printf("%s = (uint32_t)temp64;\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1)); + } else if (ret_type == 'd') { + printf("%s = FloatReg_from_double(tempf64);\n", dr((int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fv0)); + } + } else { + Function& f = functions.find(imm)->second; + + if (f.nret == 1) { + printf("v0 = "); + } else if (f.nret == 2) { + printf("temp64 = "); + } + + dump_function_name(imm); + printf("(mem, sp"); + + if (f.v0_in) { + printf(", %s", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); + } + + for (uint32_t arg_index = 0; arg_index < f.nargs; arg_index++) { + printf(", %s", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + arg_index)); + } + + printf(");\n"); + + if (f.nret == 2) { + printf("%s = (uint32_t)(temp64 >> 32);\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); + printf("%s = (uint32_t)temp64;\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1)); + } + } + + printf("goto L%x;\n", text_vaddr + (i + 2) * 4); + label_addresses.insert(text_vaddr + (i + 2) * 4); +} + +void dump_cond_branch(int i, const char* lhs, const char* op, const char* rhs) { + Insn& insn = insns[i]; + + printf("if ((int32_t)%s %s (int32_t)%s) {\n", lhs, op, rhs); + dump_instr(i + 1); + + uint32_t addr = insn.getAddress(); + + printf("goto L%x;}\n", addr); +} + +void dump_cond_branch_likely(int i, const char* lhs, const char* op, const char* rhs) { + uint32_t target = text_vaddr + (i + 2) * sizeof(uint32_t); + dump_cond_branch(i, lhs, op, rhs); if (!TRACE) { printf("else goto L%x;\n", target); @@ -1629,462 +2297,457 @@ static void dump_cond_branch_likely(int i, const char *lhs, const char *op, cons label_addresses.insert(target); } -static void dump_instr(int i) { - const char *symbol_name = NULL; - if (symbol_names.count(text_vaddr + i * 4) != 0) { - symbol_name = symbol_names[text_vaddr + i * 4].c_str(); +void dump_cond_branch_and_link(int i, const char* lhs, const char* op, const char* rhs) { + Insn& insn = insns[i]; + uint32_t target = text_vaddr + (i + 2) * sizeof(uint32_t); + + printf("if ((int32_t)%s %s (int32_t)%s) {\n", lhs, op, rhs); + dump_instr(i + 1); + + uint32_t addr = insn.getAddress(); + dump_jal(i, addr); + + printf("goto L%x;}\n", target); + label_addresses.insert(target); +} + +void dump_cond_branch_and_link_likely(int i, const char* lhs, const char* op, const char* rhs) { + uint32_t target = text_vaddr + (i + 2) * sizeof(uint32_t); + + dump_cond_branch_and_link(i, lhs, op, rhs); + if (!TRACE) { + printf("else goto L%x;\n", target); + } else { + printf("else {printf(\"pc=0x%08x (ignored)\\n\"); goto L%x;}\n", text_vaddr + (i + 1) * 4, target); + } + label_addresses.insert(target); +} + +void dump_instr(int i) { + Insn& insn = insns[i]; + + const char* symbol_name = NULL; + if (symbol_names.count(text_vaddr + i * sizeof(uint32_t)) != 0) { + symbol_name = symbol_names.at(text_vaddr + i * sizeof(uint32_t)).c_str(); printf("//%s:\n", symbol_name); } + if (TRACE) { - printf("++cnt; printf(\"pc=0x%08x%s%s\\n\"); ", text_vaddr + i * 4, symbol_name ? " " : "", symbol_name ? symbol_name : ""); + printf("++cnt; printf(\"pc=0x%08x%s%s\\n\"); ", text_vaddr + i * 4, symbol_name ? " " : "", + symbol_name ? symbol_name : ""); } - Insn& insn = insns[i]; - if (!insn.is_jump && !conservative) { + + uint64_t src_regs_map; + if (!insn.instruction.isJump() && !insn.instruction.isBranch() && !conservative) { switch (insn_to_type(insn)) { - case TYPE_1S: - if (!(insn.f_livein & map_reg(insn.operands[0].reg))) { + case TYPE_S: + src_regs_map = get_all_source_reg_mask(insn.instruction); + if (!((insn.f_livein & src_regs_map) == src_regs_map)) { printf("// fdead %llx ", (unsigned long long)insn.f_livein); } break; - case TYPE_1S_POS1: - if (!(insn.f_livein & map_reg(insn.operands[1].reg))) { - printf("// fdead %llx ", (unsigned long long)insn.f_livein); - } - break; - case TYPE_2S: - if (!(insn.f_livein & map_reg(insn.operands[0].reg)) || !(insn.f_livein & map_reg(insn.operands[1].reg))) { - printf("// fdead %llx ", (unsigned long long)insn.f_livein); - } - break; - case TYPE_1D_2S: - if (!(insn.f_livein & map_reg(insn.operands[2].reg))) { + + case TYPE_D_S: { + uint64_t reg_mask = get_all_source_reg_mask(insn.instruction); + + if ((insn.f_livein & reg_mask) != reg_mask) { printf("// fdead %llx ", (unsigned long long)insn.f_livein); break; } + } // fallthrough - case TYPE_1D_1S: - if (!(insn.f_livein & map_reg(insn.operands[1].reg))) { - printf("// fdead %llx ", (unsigned long long)insn.f_livein); - break; - } - // fallthrough - case TYPE_1D: - if (!(insn.b_liveout & map_reg(insn.operands[0].reg))) { + case TYPE_D: + if (!(insn.b_liveout & get_dest_reg_mask(insn))) { +#if 0 + printf("// %i bdead %llx %llx ", i, (unsigned long long)insn.b_liveout, + (unsigned long long)get_dest_reg_mask(insn)); +#else printf("// bdead %llx ", (unsigned long long)insn.b_liveout); +#endif } break; - case TYPE_D_LO_HI_2S: - if (!(insn.f_livein & map_reg(insn.operands[0].reg)) || !(insn.f_livein & map_reg(insn.operands[1].reg))) { - printf("// fdead %llx ", (unsigned long long)insn.f_livein); - break; - } - if (!(insn.b_liveout & (map_reg(MIPS_REG_LO) | map_reg(MIPS_REG_HI)))) { - printf("// bdead %llx ", (unsigned long long)insn.b_liveout); - } + + case TYPE_NOP: break; } } - switch (insn.id) { - case MIPS_INS_ADD: - case MIPS_INS_ADDU: - if (insn.mnemonic == "add.s") { - printf("%s = %s + %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg), fr(insn.operands[2].reg)); - } else if (insn.mnemonic == "add.d") { - printf("%s = %s + %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg), dr(insn.operands[2].reg)); + + int32_t imm; + switch (insn.instruction.getUniqueId()) { + case rabbitizer::InstrId::UniqueId::cpu_add: + case rabbitizer::InstrId::UniqueId::cpu_addu: + if (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero) { + printf("%s = %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt())); + } else if (insn.instruction.GetO32_rt() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero) { + printf("%s = %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs())); } else { - printf("%s = %s + %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); + printf("%s = %s + %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); } break; - case MIPS_INS_ADDI: - case MIPS_INS_ADDIU: - printf("%s = %s + 0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); + + case rabbitizer::InstrId::UniqueId::cpu_add_s: + printf("%s = %s + %s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs()), + fr((int)insn.instruction.GetO32_ft())); break; - case MIPS_INS_AND: - printf("%s = %s & %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_add_d: + printf("%s = FloatReg_from_double(double_from_FloatReg(%s) + double_from_FloatReg(%s));\n", + dr((int)insn.instruction.GetO32_fd()), dr((int)insn.instruction.GetO32_fs()), + dr((int)insn.instruction.GetO32_ft())); break; - case MIPS_INS_ANDI: - printf("%s = %s & 0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); + + case rabbitizer::InstrId::UniqueId::cpu_addi: + case rabbitizer::InstrId::UniqueId::cpu_addiu: + imm = insn.getImmediate(); + if (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero) { + printf("%s = 0x%x;\n", r((int)insn.instruction.GetO32_rt()), imm); + } else { + printf("%s = %s + 0x%x;\n", r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs()), + imm); + } break; - case MIPS_INS_BEQ: - dump_cond_branch(i, r(insn.operands[0].reg), "==", r(insn.operands[1].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_and: + printf("%s = %s & %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); break; - case MIPS_INS_BEQL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "==", r(insn.operands[1].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_andi: + imm = insn.getImmediate(); + printf("%s = %s & 0x%x;\n", r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs()), + imm); break; - case MIPS_INS_BGEZ: - dump_cond_branch(i, r(insn.operands[0].reg), ">=", "0"); + + case rabbitizer::InstrId::UniqueId::cpu_beq: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "==", r((int)insn.instruction.GetO32_rt())); break; - case MIPS_INS_BGEZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), ">=", "0"); + + case rabbitizer::InstrId::UniqueId::cpu_beql: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), + "==", r((int)insn.instruction.GetO32_rt())); break; - case MIPS_INS_BGTZ: - dump_cond_branch(i, r(insn.operands[0].reg), ">", "0"); + + case rabbitizer::InstrId::UniqueId::cpu_bgez: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), ">=", "0"); break; - case MIPS_INS_BGTZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), ">", "0"); + + case rabbitizer::InstrId::UniqueId::cpu_bgezl: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), ">=", "0"); break; - case MIPS_INS_BLEZ: - dump_cond_branch(i, r(insn.operands[0].reg), "<=", "0"); + + case rabbitizer::InstrId::UniqueId::cpu_bgtz: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), ">", "0"); break; - case MIPS_INS_BLEZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "<=", "0"); + + case rabbitizer::InstrId::UniqueId::cpu_bgtzl: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), ">", "0"); break; - case MIPS_INS_BLTZ: - dump_cond_branch(i, r(insn.operands[0].reg), "<", "0"); + + case rabbitizer::InstrId::UniqueId::cpu_blez: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "<=", "0"); break; - case MIPS_INS_BLTZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "<", "0"); + + case rabbitizer::InstrId::UniqueId::cpu_blezl: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), "<=", "0"); break; - case MIPS_INS_BNE: - dump_cond_branch(i, r(insn.operands[0].reg), "!=", r(insn.operands[1].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_bltz: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "<", "0"); break; - case MIPS_INS_BNEL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "!=", insn.mnemonic == "bnezl" ? "0" : r(insn.operands[1].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_bltzl: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), "<", "0"); break; - case MIPS_INS_BREAK: + + case rabbitizer::InstrId::UniqueId::cpu_bne: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "!=", r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bnel: + dump_cond_branch_likely(i, r((int)insn.instruction.GetO32_rs()), + "!=", r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_break: printf("abort();\n"); break; - case MIPS_INS_BEQZ: - dump_cond_branch(i, r(insn.operands[0].reg), "==", "0"); + + case rabbitizer::InstrId::UniqueId::cpu_beqz: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "==", "0"); break; - /*case MIPS_INS_BEQZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "==", "0"); - break;*/ - case MIPS_INS_B: + + case rabbitizer::InstrId::UniqueId::cpu_b: dump_instr(i + 1); - printf("goto L%x;\n", (int32_t)insn.operands[0].imm); + imm = insn.getAddress(); + printf("goto L%x;\n", imm); break; - case MIPS_INS_BC1F: - case MIPS_INS_BC1T: - printf("if (%scf) {", insn.id == MIPS_INS_BC1F ? "!" : ""); + + case rabbitizer::InstrId::UniqueId::cpu_bc1f: + printf("if (!cf) {\n"); dump_instr(i + 1); - printf("goto L%x;}\n", (int32_t)insn.operands[0].imm); + imm = insn.getAddress(); + printf("goto L%x;}\n", imm); break; - case MIPS_INS_BC1FL: - case MIPS_INS_BC1TL: - { - uint32_t target = text_vaddr + (i + 2) * 4; - printf("if (%scf) {", insn.id == MIPS_INS_BC1FL ? "!" : ""); + + case rabbitizer::InstrId::UniqueId::cpu_bc1t: + printf("if (cf) {\n"); dump_instr(i + 1); - printf("goto L%x;}\n", (int32_t)insn.operands[0].imm); + imm = insn.getAddress(); + printf("goto L%x;}\n", imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bc1fl: { + uint32_t target = text_vaddr + (i + 2) * sizeof(uint32_t); + printf("if (!cf) {\n"); + dump_instr(i + 1); + imm = insn.getAddress(); + printf("goto L%x;}\n", imm); if (!TRACE) { printf("else goto L%x;\n", target); } else { printf("else {printf(\"pc=0x%08x (ignored)\\n\"); goto L%x;}\n", text_vaddr + (i + 1) * 4, target); } label_addresses.insert(target); - break; - } - case MIPS_INS_BNEZ: - dump_cond_branch(i, r(insn.operands[0].reg), "!=", "0"); - break; - /*case MIPS_INS_BNEZL: - dump_cond_branch_likely(i, r(insn.operands[0].reg), "!=", "0"); - break;*/ - case MIPS_INS_C: - if (insn.mnemonic == "c.lt.s") { - printf("cf = %s < %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "c.le.s") { - printf("cf = %s <= %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "c.eq.s") { - printf("cf = %s == %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "c.lt.d") { - printf("cf = %s < %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else if (insn.mnemonic == "c.le.d") { - printf("cf = %s <= %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else if (insn.mnemonic == "c.eq.d") { - printf("cf = %s == %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } - break; - case MIPS_INS_CVT: - if (insn.mnemonic == "cvt.s.w") { - printf("%s = (int)%s;\n", fr(insn.operands[0].reg), wr(insn.operands[1].reg)); - } else if (insn.mnemonic == "cvt.d.w") { - printf("%s = (int)%s;\n", dr(insn.operands[0].reg), wr(insn.operands[1].reg)); - } else if (insn.mnemonic == "cvt.d.s") { - printf("%s = %s;\n", dr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "cvt.s.d") { - printf("%s = %s;\n", fr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else if (insn.mnemonic == "cvt.w.d") { - printf("%s = cvt_w_d(%s);\n", wr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else if (insn.mnemonic == "cvt.w.s") { - printf("%s = cvt_w_s(%s);\n", wr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else { - goto unimplemented; - } - break; - case MIPS_INS_CFC1: - assert(insn.operands[1].reg == MIPS_REG_31); - printf("%s = fcsr;\n", r(insn.operands[0].reg)); - break; - case MIPS_INS_CTC1: - assert(insn.operands[1].reg == MIPS_REG_31); - printf("fcsr = %s;\n", r(insn.operands[0].reg)); - break; - case MIPS_INS_DIV: - if (insn.mnemonic == "div.s") { - assert(insn.op_count == 3); - printf("%s = %s / %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg), fr(insn.operands[2].reg)); - } else if (insn.mnemonic == "div.d") { - assert(insn.op_count == 3); - printf("%s = %s / %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg), dr(insn.operands[2].reg)); - } else { - assert(insn.op_count == 2); - printf("lo = (int)%s / (int)%s; ", r(insn.operands[0].reg), r(insn.operands[1].reg)); - printf("hi = (int)%s %% (int)%s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - } - break; - case MIPS_INS_DIVU: - assert(insn.op_count == 2); - printf("lo = %s / %s; ", r(insn.operands[0].reg), r(insn.operands[1].reg)); - printf("hi = %s %% %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - break; - case MIPS_INS_MOV: - if (insn.mnemonic == "mov.s") { - printf("%s = %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "mov.d") { - printf("%s = %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else { - goto unimplemented; - } - break; - case MIPS_INS_MUL: - if (insn.mnemonic == "mul.s") { - printf("%s = %s * %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg), fr(insn.operands[2].reg)); - } else if (insn.mnemonic == "mul.d") { - printf("%s = %s * %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg), dr(insn.operands[2].reg)); - } else { - goto unimplemented; - } - break; - case MIPS_INS_NEG: - if (insn.mnemonic == "neg.s") { - printf("%s = -%s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "neg.d") { - printf("%s = -%s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else { - printf("%s = -%s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - } - break; - case MIPS_INS_SUB: - if (insn.mnemonic == "sub.s") { - printf("%s = %s - %s;\n", fr(insn.operands[0].reg), fr(insn.operands[1].reg), fr(insn.operands[2].reg)); - } else if (insn.mnemonic == "sub.d") { - printf("%s = %s - %s;\n", dr(insn.operands[0].reg), dr(insn.operands[1].reg), dr(insn.operands[2].reg)); - } else { - goto unimplemented; - } - break; - case MIPS_INS_J: + } break; + + case rabbitizer::InstrId::UniqueId::cpu_bc1tl: { + uint32_t target = text_vaddr + (i + 2) * sizeof(uint32_t); + printf("if (cf) {\n"); dump_instr(i + 1); - printf("goto L%x;\n", (uint32_t)insn.operands[0].imm); - break; - case MIPS_INS_JAL: - { - string name; - bool is_extern_function = false; - size_t extern_function_id; - auto it = symbol_names.find(insn.operands[0].imm); - if (it != symbol_names.end()) { - name = it->second; - for (size_t i = 0; i < sizeof(extern_functions) / sizeof(extern_functions[0]); i++) { - if (name == extern_functions[i].name) { - is_extern_function = true; - extern_function_id = i; - break; - } - } - } - dump_instr(i + 1); - if (is_extern_function) { - auto& fn = extern_functions[extern_function_id]; - if (fn.flags & FLAG_VARARG) { - for (int j = 0; j < 4; j++) { - printf("MEM_U32(sp + %d) = %s;\n", j * 4, r(MIPS_REG_A0 + j)); - } - } - char ret_type = fn.params[0]; - if (ret_type != 'v') { - switch (ret_type) { - case 'i': - case 'u': - case 'p': - printf("%s = ", r(MIPS_REG_V0)); - break; - case 'f': - printf("%s = ", fr(MIPS_REG_F0)); - break; - case 'd': - printf("%s = ", dr(MIPS_REG_F0)); - break; - case 'l': - case 'j': - printf("temp64 = "); - break; - } - } - printf("wrapper_%s(", name.c_str()); - bool first = true; - if (!(fn.flags & FLAG_NO_MEM)) { - printf("mem"); - first = false; - } - int pos = 0; - int pos_float = 0; - bool only_floats_so_far = true; - bool needs_sp = false; - for (const char *p = fn.params + 1; *p != '\0'; ++p) { - if (!first) { - printf(", "); - } - first = false; - switch (*p) { - case 't': - printf("trampoline, "); - needs_sp = true; - // fallthrough - case 'i': - case 'u': - case 'p': - only_floats_so_far = false; - if (pos < 4) { - printf("%s", r(MIPS_REG_A0 + pos)); - } else { - printf("MEM_%c32(sp + %d)", *p == 'i' ? 'S' : 'U', pos * 4); - } - ++pos; - break; - case 'f': - if (only_floats_so_far && pos_float < 4) { - printf("%s", fr(MIPS_REG_F12 + pos_float)); - pos_float += 2; - } else if (pos < 4) { - printf("BITCAST_U32_TO_F32(%s)", r(MIPS_REG_A0 + pos)); - } else { - printf("BITCAST_U32_TO_F32(MEM_U32(sp + %d))", pos * 4); - } - ++pos; - break; - case 'd': - if (pos % 1 != 0) { - ++pos; - } - if (only_floats_so_far && pos_float < 4) { - printf("%s", dr(MIPS_REG_F12 + pos_float)); - pos_float += 2; - } else if (pos < 4) { - printf("BITCAST_U64_TO_F64(((uint64_t)%s << 32) | (uint64_t)%s)", r(MIPS_REG_A0 + pos), r(MIPS_REG_A0 + pos + 1)); - } else { - printf("BITCAST_U64_TO_F64(((uint64_t)MEM_U32(sp + %d) << 32) | (uint64_t)MEM_U32(sp + %d))", pos * 4, (pos + 1) * 4); - } - pos += 2; - break; - case 'l': - case 'j': - if (pos % 1 != 0) { - ++pos; - } - only_floats_so_far = false; - if (*p == 'l') { - printf("(int64_t)"); - } - if (pos < 4) { - printf("(((uint64_t)%s << 32) | (uint64_t)%s)", r(MIPS_REG_A0 + pos), r(MIPS_REG_A0 + pos + 1)); - } else { - printf("(((uint64_t)MEM_U32(sp + %d) << 32) | (uint64_t)MEM_U32(sp + %d))", pos * 4, (pos + 1) * 4); - } - pos += 2; - break; - } - } - if ((fn.flags & FLAG_VARARG) || needs_sp) { - printf("%s%s", first ? "" : ", ", r(MIPS_REG_SP)); - } - printf(");\n"); - if (ret_type == 'l' || ret_type == 'j') { - printf("%s = (uint32_t)(temp64 >> 32);\n", r(MIPS_REG_V0)); - printf("%s = (uint32_t)temp64;\n", r(MIPS_REG_V1)); - } - if (!name.empty()) { - //printf("printf(\"%s %%x\\n\", %s);\n", name.c_str(), r(MIPS_REG_A0)); - } + imm = insn.getAddress(); + printf("goto L%x;}\n", imm); + if (!TRACE) { + printf("else goto L%x;\n", target); } else { - Function& f = functions.find((uint32_t)insn.operands[0].imm)->second; - if (f.nret == 1) { - printf("v0 = "); - } else if (f.nret == 2) { - printf("temp64 = "); - } - if (!name.empty()) { - //printf("printf(\"%s %%x\\n\", %s);\n", name.c_str(), r(MIPS_REG_A0)); - printf("f_%s", name.c_str()); - } else { - printf("func_%x", (uint32_t)insn.operands[0].imm); - } - printf("(mem, sp"); - if (f.v0_in) { - printf(", %s", r(MIPS_REG_V0)); - } - for (uint32_t i = 0; i < f.nargs; i++) { - printf(", %s", r(MIPS_REG_A0 + i)); - } - printf(");\n"); - if (f.nret == 2) { - printf("%s = (uint32_t)(temp64 >> 32);\n", r(MIPS_REG_V0)); - printf("%s = (uint32_t)temp64;\n", r(MIPS_REG_V1)); - } + printf("else {printf(\"pc=0x%08x (ignored)\\n\"); goto L%x;}\n", text_vaddr + (i + 1) * 4, target); } - printf("goto L%x;\n", text_vaddr + (i + 2) * 4); - label_addresses.insert(text_vaddr + (i + 2) * 4); + label_addresses.insert(target); + } break; + + case rabbitizer::InstrId::UniqueId::cpu_bnez: + dump_cond_branch(i, r((int)insn.instruction.GetO32_rs()), "!=", "0"); break; - } - case MIPS_INS_JALR: - printf("fp_dest = %s;\n", r(insn.operands[0].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_c_lt_s: + printf("cf = %s < %s;\n", fr((int)insn.instruction.GetO32_fs()), fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_c_le_s: + printf("cf = %s <= %s;\n", fr((int)insn.instruction.GetO32_fs()), fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_c_eq_s: + printf("cf = %s == %s;\n", fr((int)insn.instruction.GetO32_fs()), fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_c_lt_d: + printf("cf = double_from_FloatReg(%s) < double_from_FloatReg(%s);\n", dr((int)insn.instruction.GetO32_fs()), + dr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_c_le_d: + printf("cf = double_from_FloatReg(%s) <= double_from_FloatReg(%s);\n", + dr((int)insn.instruction.GetO32_fs()), dr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_c_eq_d: + printf("cf = double_from_FloatReg(%s) == double_from_FloatReg(%s);\n", + dr((int)insn.instruction.GetO32_fs()), dr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_s_w: + printf("%s = (int)%s;\n", fr((int)insn.instruction.GetO32_fd()), wr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_d_w: + printf("%s = FloatReg_from_double((int)%s);\n", dr((int)insn.instruction.GetO32_fd()), + wr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_d_s: + printf("%s = FloatReg_from_double(%s);\n", dr((int)insn.instruction.GetO32_fd()), + fr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_s_d: + printf("%s = double_from_FloatReg(%s);\n", fr((int)insn.instruction.GetO32_fd()), + dr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_w_d: + printf("%s = cvt_w_d(double_from_FloatReg(%s));\n", wr((int)insn.instruction.GetO32_fd()), + dr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_w_s: + printf("%s = cvt_w_s(%s);\n", wr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_cvt_l_d: + case rabbitizer::InstrId::UniqueId::cpu_cvt_l_s: + case rabbitizer::InstrId::UniqueId::cpu_cvt_s_l: + case rabbitizer::InstrId::UniqueId::cpu_cvt_d_l: + goto unimplemented; + + case rabbitizer::InstrId::UniqueId::cpu_cfc1: + assert(insn.instruction.Get_cop1cs() == rabbitizer::Registers::Cpu::Cop1Control::COP1_CONTROL_FpcCsr); + printf("%s = fcsr;\n", r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_ctc1: + assert(insn.instruction.Get_cop1cs() == rabbitizer::Registers::Cpu::Cop1Control::COP1_CONTROL_FpcCsr); + printf("fcsr = %s;\n", r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_div: + printf("lo = (int)%s / (int)%s; ", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + printf("hi = (int)%s %% (int)%s;\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_divu: + printf("lo = %s / %s; ", r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + printf("hi = %s %% %s;\n", r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_div_s: + printf("%s = %s / %s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs()), + fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_div_d: + printf("%s = FloatReg_from_double(double_from_FloatReg(%s) / double_from_FloatReg(%s));\n", + dr((int)insn.instruction.GetO32_fd()), dr((int)insn.instruction.GetO32_fs()), + dr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mov_s: + printf("%s = %s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mov_d: + printf("%s = %s;\n", dr((int)insn.instruction.GetO32_fd()), dr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mul_s: + printf("%s = %s * %s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs()), + fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mul_d: + printf("%s = FloatReg_from_double(double_from_FloatReg(%s) * double_from_FloatReg(%s));\n", + dr((int)insn.instruction.GetO32_fd()), dr((int)insn.instruction.GetO32_fs()), + dr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_negu: + printf("%s = -%s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_neg_s: + printf("%s = -%s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_neg_d: + printf("%s = FloatReg_from_double(-double_from_FloatReg(%s));\n", dr((int)insn.instruction.GetO32_fd()), + dr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sub: + if (insn.instruction.GetO32_rs() == rabbitizer::Registers::Cpu::GprO32::GPR_O32_zero) { + printf("%s = -%s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt())); + break; + } else { + goto unimplemented; + } + + case rabbitizer::InstrId::UniqueId::cpu_sub_s: + printf("%s = %s - %s;\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs()), + fr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sub_d: + printf("%s = FloatReg_from_double(double_from_FloatReg(%s) - double_from_FloatReg(%s));\n", + dr((int)insn.instruction.GetO32_fd()), dr((int)insn.instruction.GetO32_fs()), + dr((int)insn.instruction.GetO32_ft())); + break; + + // Jumps + + case rabbitizer::InstrId::UniqueId::cpu_j: + dump_instr(i + 1); + imm = insn.getAddress(); + printf("goto L%x;\n", imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_jal: + case rabbitizer::InstrId::UniqueId::cpu_bal: + imm = insn.getAddress(); + dump_jal(i, imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bltzal: + imm = insn.getAddress(); + dump_cond_branch_and_link(i, r((int)insn.instruction.GetO32_rs()), "<", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bltzall: + imm = insn.getAddress(); + dump_cond_branch_and_link_likely(i, r((int)insn.instruction.GetO32_rs()), "<", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bgezal: + imm = insn.getAddress(); + dump_cond_branch_and_link(i, r((int)insn.instruction.GetO32_rs()), ">=", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_bgezall: + imm = insn.getAddress(); + dump_cond_branch_and_link_likely(i, r((int)insn.instruction.GetO32_rs()), ">=", "0"); + break; + + case rabbitizer::InstrId::UniqueId::cpu_jalr: + printf("fp_dest = %s;\n", r((int)insn.instruction.GetO32_rs())); dump_instr(i + 1); printf("temp64 = trampoline(mem, sp, %s, %s, %s, %s, fp_dest);\n", - r(MIPS_REG_A0), r(MIPS_REG_A1), r(MIPS_REG_A2), r(MIPS_REG_A3)); - printf("%s = (uint32_t)(temp64 >> 32);\n", r(MIPS_REG_V0)); - printf("%s = (uint32_t)temp64;\n", r(MIPS_REG_V1)); + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0), + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a1), + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a2), + r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a3)); + printf("%s = (uint32_t)(temp64 >> 32);\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); + printf("%s = (uint32_t)temp64;\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v1)); printf("goto L%x;\n", text_vaddr + (i + 2) * 4); label_addresses.insert(text_vaddr + (i + 2) * 4); break; - case MIPS_INS_JR: + + case rabbitizer::InstrId::UniqueId::cpu_jr: if (insn.jtbl_addr != 0) { - uint32_t jtbl_pos = insn.jtbl_addr - rodata_vaddr; - assert(jtbl_pos < rodata_section_len && jtbl_pos + insn.num_cases * 4 <= rodata_section_len); -#if 1 - printf(";static void *const Lswitch%x[] = {\n", insn.jtbl_addr); - for (uint32_t i = 0; i < insn.num_cases; i++) { - uint32_t dest_addr = read_u32_be(rodata_section + jtbl_pos + i * 4) + gp_value; - printf("&&L%x,\n", dest_addr); - label_addresses.insert(dest_addr); - } - printf("};\n"); - printf("dest = Lswitch%x[%s];\n", insn.jtbl_addr, r(insn.index_reg)); + printf("jtbl_index = %s;\n", r((int)insn.index_reg)); dump_instr(i + 1); - printf("goto *dest;\n"); -#else - assert(insns[i + 1].id == MIPS_INS_NOP); - printf("switch (%s) {\n", r(insn.index_reg)); - for (uint32_t i = 0; i < insn.num_cases; i++) { - uint32_t dest_addr = read_u32_be(rodata_section + jtbl_pos + i * 4) + gp_value; - printf("case %u: goto L%x;\n", i, dest_addr); - label_addresses.insert(dest_addr); + printf("switch (jtbl_index) {\n"); + + for (uint32_t case_index = 0; case_index < insn.num_cases; case_index++) { + printf("case %u: goto L%x;\n", case_index, jump_table_target(insn, case_index)); } + + printf("default: __builtin_unreachable();\n"); printf("}\n"); -#endif } else { - if (insn.operands[0].reg != MIPS_REG_RA) { - printf("UNSUPPORTED JR %s %s\n", insn.op_str.c_str(), r(insn.operands[0].reg)); + if (insn.instruction.GetO32_rs() != rabbitizer::Registers::Cpu::GprO32::GPR_O32_ra) { + printf("UNSUPPORTED JR %s (no jumptable available)\n", r((int)insn.instruction.GetO32_rs())); } else { dump_instr(i + 1); - switch (find_function(text_vaddr + i * 4)->second.nret) { + switch (find_function(text_vaddr + i * sizeof(uint32_t))->second.nret) { case 0: printf("return;\n"); break; + case 1: printf("return v0;\n"); break; + case 2: printf("return ((uint64_t)v0 << 32) | v1;\n"); break; @@ -2092,248 +2755,384 @@ static void dump_instr(int i) { } } break; - case MIPS_INS_LB: - printf("%s = MEM_S8(%s + %d);\n", r(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); + + case rabbitizer::InstrId::UniqueId::cpu_lb: + imm = insn.getImmediate(); + printf("%s = MEM_S8(%s + %d);\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); break; - case MIPS_INS_LBU: - printf("%s = MEM_U8(%s + %d);\n", r(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); + + case rabbitizer::InstrId::UniqueId::cpu_lbu: + imm = insn.getImmediate(); + printf("%s = MEM_U8(%s + %d);\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); break; - case MIPS_INS_LH: - printf("%s = MEM_S16(%s + %d);\n", r(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); + + case rabbitizer::InstrId::UniqueId::cpu_lh: + imm = insn.getImmediate(); + printf("%s = MEM_S16(%s + %d);\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); break; - case MIPS_INS_LHU: - printf("%s = MEM_U16(%s + %d);\n", r(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); + + case rabbitizer::InstrId::UniqueId::cpu_lhu: + imm = insn.getImmediate(); + printf("%s = MEM_U16(%s + %d);\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); break; - case MIPS_INS_LUI: - printf("%s = 0x%x;\n", r(insn.operands[0].reg), ((uint32_t)insn.operands[1].imm) << 16); + + case rabbitizer::InstrId::UniqueId::cpu_lui: + imm = insn.getImmediate(); + printf("%s = 0x%x;\n", r((int)insn.instruction.GetO32_rt()), imm << 16); break; - case MIPS_INS_LW: - printf("%s = MEM_U32(%s + %d);\n", r(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); + + case rabbitizer::InstrId::UniqueId::cpu_lw: + imm = insn.getImmediate(); + printf("%s = MEM_U32(%s + %d);\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); break; - case MIPS_INS_LWC1: - printf("%s = MEM_U32(%s + %d);\n", wr(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); + + case rabbitizer::InstrId::UniqueId::cpu_lwc1: + imm = insn.getImmediate(); + printf("%s = MEM_U32(%s + %d);\n", wr((int)insn.instruction.GetO32_ft()), + r((int)insn.instruction.GetO32_rs()), imm); break; - case MIPS_INS_LDC1: - assert((insn.operands[0].reg - MIPS_REG_F0) % 2 == 0); - printf("%s = MEM_U32(%s + %d);\n", wr(insn.operands[0].reg + 1), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); - printf("%s = MEM_U32(%s + %d + 4);\n", wr(insn.operands[0].reg), r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); + + case rabbitizer::InstrId::UniqueId::cpu_ldc1: + imm = insn.getImmediate(); + assert(((int)insn.instruction.GetO32_ft() - (int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fv0) % 2 == + 0); + printf("%s = MEM_U32(%s + %d);\n", wr((int)insn.instruction.GetO32_ft() + 1), + r((int)insn.instruction.GetO32_rs()), imm); + printf("%s = MEM_U32(%s + %d + 4);\n", wr((int)insn.instruction.GetO32_ft()), + r((int)insn.instruction.GetO32_rs()), imm); break; - case MIPS_INS_LWL: - { - const char *reg = r(insn.operands[0].reg); - printf("%s = %s + %d; ", reg, r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp); - printf("%s = (MEM_U8(%s) << 24) | (MEM_U8(%s + 1) << 16) | (MEM_U8(%s + 2) << 8) | MEM_U8(%s + 3);\n", reg, reg, reg, reg, reg); + + case rabbitizer::InstrId::UniqueId::cpu_lwl: { + const char* reg = r((int)insn.instruction.GetO32_rt()); + + imm = insn.getImmediate(); + + printf("%s = %s + %d; ", reg, r((int)insn.instruction.GetO32_rs()), imm); + printf("%s = ((uint32_t)MEM_U8(%s) << 24) | (MEM_U8(%s + 1) << 16) | (MEM_U8(%s + 2) << 8) | MEM_U8(%s + " + "3);\n", + reg, reg, reg, reg, reg); + } break; + + case rabbitizer::InstrId::UniqueId::cpu_lwr: + printf("//%s\n", insn.disassemble().c_str()); break; - } - case MIPS_INS_LWR: - printf("//lwr %s\n", insn.op_str.c_str()); + + case UniqueId_cpu_la: { + uint32_t addr = insn.getAddress(); + + printf("%s = 0x%x;", r((int)insn.lila_dst_reg), addr); + if ((text_vaddr <= addr) && (addr < text_vaddr + text_section_len)) { + printf(" // function pointer"); + label_addresses.insert(addr); + } + printf("\n"); + } break; + + case UniqueId_cpu_li: + imm = insn.getImmediate(); + + printf("%s = 0x%x;\n", r((int)insn.lila_dst_reg), imm); break; - case MIPS_INS_LI: - if (insn.is_global_got_memop && text_vaddr <= insn.operands[1].imm && insn.operands[1].imm < text_vaddr + text_section_len) { - printf("%s = 0x%x; // function pointer\n", r(insn.operands[0].reg), (uint32_t)insn.operands[1].imm); - label_addresses.insert((uint32_t)insn.operands[1].imm); - } else { - printf("%s = 0x%x;\n", r(insn.operands[0].reg), (uint32_t)insn.operands[1].imm); + + case rabbitizer::InstrId::UniqueId::cpu_mfc1: + printf("%s = %s;\n", r((int)insn.instruction.GetO32_rt()), wr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mfhi: + printf("%s = hi;\n", r((int)insn.instruction.GetO32_rd())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mflo: + printf("%s = lo;\n", r((int)insn.instruction.GetO32_rd())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_move: + printf("%s = %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mtc1: + printf("%s = %s;\n", wr((int)insn.instruction.GetO32_fs()), r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_mult: + printf("lo = %s * %s;\n", r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + printf("hi = (uint32_t)((int64_t)(int)%s * (int64_t)(int)%s >> 32);\n", + r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_multu: + printf("lo = %s * %s;\n", r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + printf("hi = (uint32_t)((uint64_t)%s * (uint64_t)%s >> 32);\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sqrt_s: + printf("%s = sqrtf(%s);\n", fr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_nor: + printf("%s = ~(%s | %s);\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_not: + printf("%s = ~%s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_or: + printf("%s = %s | %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_ori: + imm = insn.getImmediate(); + printf("%s = %s | 0x%x;\n", r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs()), + imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sb: + imm = insn.getImmediate(); + printf("MEM_U8(%s + %d) = (uint8_t)%s;\n", r((int)insn.instruction.GetO32_rs()), imm, + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sh: + imm = insn.getImmediate(); + printf("MEM_U16(%s + %d) = (uint16_t)%s;\n", r((int)insn.instruction.GetO32_rs()), imm, + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sll: + printf("%s = %s << %d;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt()), + insn.instruction.Get_sa()); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sllv: + printf("%s = %s << (%s & 0x1f);\n", r((int)insn.instruction.GetO32_rd()), + r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_slt: + printf("%s = (int)%s < (int)%s;\n", r((int)insn.instruction.GetO32_rd()), + r((int)insn.instruction.GetO32_rs()), r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_slti: + imm = insn.getImmediate(); + printf("%s = (int)%s < (int)0x%x;\n", r((int)insn.instruction.GetO32_rt()), + r((int)insn.instruction.GetO32_rs()), imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sltiu: + imm = insn.getImmediate(); + printf("%s = %s < 0x%x;\n", r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs()), + imm); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sltu: + printf("%s = %s < %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sra: + printf("%s = (int)%s >> %d;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt()), + insn.instruction.Get_sa()); + break; + + case rabbitizer::InstrId::UniqueId::cpu_srav: + printf("%s = (int)%s >> (%s & 0x1f);\n", r((int)insn.instruction.GetO32_rd()), + r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_srl: + printf("%s = %s >> %d;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rt()), + insn.instruction.Get_sa()); + break; + + case rabbitizer::InstrId::UniqueId::cpu_srlv: + printf("%s = %s >> (%s & 0x1f);\n", r((int)insn.instruction.GetO32_rd()), + r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_subu: + printf("%s = %s - %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sw: + imm = insn.getImmediate(); + printf("MEM_U32(%s + %d) = %s;\n", r((int)insn.instruction.GetO32_rs()), imm, + r((int)insn.instruction.GetO32_rt())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_swc1: + imm = insn.getImmediate(); + printf("MEM_U32(%s + %d) = %s;\n", r((int)insn.instruction.GetO32_rs()), imm, + wr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_sdc1: + assert(((int)insn.instruction.GetO32_ft() - (int)rabbitizer::Registers::Cpu::Cop1O32::COP1_O32_fv0) % 2 == + 0); + imm = insn.getImmediate(); + printf("MEM_U32(%s + %d) = %s;\n", r((int)insn.instruction.GetO32_rs()), imm, + wr((int)insn.instruction.GetO32_ft() + 1)); + printf("MEM_U32(%s + %d + 4) = %s;\n", r((int)insn.instruction.GetO32_rs()), imm, + wr((int)insn.instruction.GetO32_ft())); + break; + + case rabbitizer::InstrId::UniqueId::cpu_swl: + imm = insn.getImmediate(); + for (int j = 0; j < 4; j++) { + printf("MEM_U8(%s + %d + %d) = (uint8_t)(%s >> %d);\n", r((int)insn.instruction.GetO32_rs()), imm, j, + r((int)insn.instruction.GetO32_rt()), (3 - j) * 8); } break; - case MIPS_INS_MFC1: - printf("%s = %s;\n", r(insn.operands[0].reg), wr(insn.operands[1].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_swr: + printf("//%s\n", insn.disassemble().c_str()); break; - case MIPS_INS_MFHI: - printf("%s = hi;\n", r(insn.operands[0].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_trunc_w_s: + printf("%s = (int)%s;\n", wr((int)insn.instruction.GetO32_fd()), fr((int)insn.instruction.GetO32_fs())); break; - case MIPS_INS_MFLO: - printf("%s = lo;\n", r(insn.operands[0].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_trunc_w_d: + printf("%s = (int)double_from_FloatReg(%s);\n", wr((int)insn.instruction.GetO32_fd()), + dr((int)insn.instruction.GetO32_fs())); break; - case MIPS_INS_MOVE: - printf("%s = %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_trunc_l_d: + case rabbitizer::InstrId::UniqueId::cpu_trunc_l_s: + goto unimplemented; + + case rabbitizer::InstrId::UniqueId::cpu_xor: + printf("%s = %s ^ %s;\n", r((int)insn.instruction.GetO32_rd()), r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt())); break; - case MIPS_INS_MTC1: - printf("%s = %s;\n", wr(insn.operands[1].reg), r(insn.operands[0].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_xori: + imm = insn.getImmediate(); + printf("%s = %s ^ 0x%x;\n", r((int)insn.instruction.GetO32_rt()), r((int)insn.instruction.GetO32_rs()), + imm); break; - case MIPS_INS_MULT: - printf("lo = %s * %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - printf("hi = (uint32_t)((int64_t)(int)%s * (int64_t)(int)%s >> 32);\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_tne: + imm = insn.instruction.Get_code_lower(); + printf("assert(%s == %s && \"tne %d\");\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt()), imm); break; - case MIPS_INS_MULTU: - printf("lo = %s * %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); - printf("hi = (uint32_t)((uint64_t)%s * (uint64_t)%s >> 32);\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_teq: + imm = insn.instruction.Get_code_lower(); + printf("assert(%s != %s && \"teq %d\");\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt()), imm); break; - case MIPS_INS_NEGU: - printf("%s = -%s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_tge: + imm = insn.instruction.Get_code_lower(); + printf("assert((int)%s < (int)%s && \"tge %d\");\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt()), imm); break; - case MIPS_INS_NOR: - printf("%s = ~(%s | %s);\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_tgeu: + imm = insn.instruction.Get_code_lower(); + printf("assert(%s < %s && \"tgeu %d\");\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt()), imm); break; - case MIPS_INS_NOT: - printf("%s = ~%s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg)); + + case rabbitizer::InstrId::UniqueId::cpu_tlt: + imm = insn.instruction.Get_code_lower(); + printf("assert((int)%s >= (int)%s && \"tlt %d\");\n", r((int)insn.instruction.GetO32_rs()), + r((int)insn.instruction.GetO32_rt()), imm); break; - case MIPS_INS_OR: - printf("%s = %s | %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_ORI: - printf("%s = %s | 0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SB: - printf("MEM_U8(%s + %d) = (uint8_t)%s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, r(insn.operands[0].reg)); - break; - case MIPS_INS_SH: - printf("MEM_U16(%s + %d) = (uint16_t)%s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, r(insn.operands[0].reg)); - break; - case MIPS_INS_SLL: - printf("%s = %s << %d;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SLLV: - printf("%s = %s << (%s & 0x1f);\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SLT: - printf("%s = (int)%s < (int)%s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SLTI: - printf("%s = (int)%s < (int)0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SLTIU: - printf("%s = %s < 0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SLTU: - printf("%s = %s < %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SRA: - printf("%s = (int)%s >> %d;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SRAV: - printf("%s = (int)%s >> (%s & 0x1f);\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SRL: - printf("%s = %s >> %d;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_SRLV: - printf("%s = %s >> (%s & 0x1f);\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SUBU: - printf("%s = %s - %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_SW: - printf("MEM_U32(%s + %d) = %s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, r(insn.operands[0].reg)); - break; - case MIPS_INS_SWC1: - printf("MEM_U32(%s + %d) = %s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, wr(insn.operands[0].reg)); - break; - case MIPS_INS_SDC1: - assert((insn.operands[0].reg - MIPS_REG_F0) % 2 == 0); - printf("MEM_U32(%s + %d) = %s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, wr(insn.operands[0].reg + 1)); - printf("MEM_U32(%s + %d + 4) = %s;\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, wr(insn.operands[0].reg)); - break; - case MIPS_INS_SWL: - for (int i = 0; i < 4; i++) { - printf("MEM_U8(%s + %d + %d) = (uint8_t)(%s >> %d);\n", r(insn.operands[1].mem.base), (int)insn.operands[1].mem.disp, i, r(insn.operands[0].reg), (3 - i) * 8); - } - break; - case MIPS_INS_SWR: - printf("//swr %s\n", insn.op_str.c_str()); - break; - case MIPS_INS_TRUNC: - if (insn.mnemonic == "trunc.w.s") { - printf("%s = (int)%s;\n", wr(insn.operands[0].reg), fr(insn.operands[1].reg)); - } else if (insn.mnemonic == "trunc.w.d") { - printf("%s = (int)%s;\n", wr(insn.operands[0].reg), dr(insn.operands[1].reg)); - } else { - goto unimplemented; - } - break; - case MIPS_INS_XOR: - printf("%s = %s ^ %s;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), r(insn.operands[2].reg)); - break; - case MIPS_INS_XORI: - printf("%s = %s ^ 0x%x;\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (uint32_t)insn.operands[2].imm); - break; - case MIPS_INS_TNE: - printf("assert(%s == %s && \"tne %d\");\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (int)insn.operands[2].imm); - break; - case MIPS_INS_TEQ: - printf("assert(%s != %s && \"teq %d\");\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (int)insn.operands[2].imm); - break; - case MIPS_INS_TGE: - printf("assert((int)%s < (int)%s && \"tge %d\");\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (int)insn.operands[2].imm); - break; - case MIPS_INS_TGEU: - printf("assert(%s < %s && \"tgeu %d\");\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (int)insn.operands[2].imm); - break; - case MIPS_INS_TLT: - printf("assert((int)%s >= (int)%s && \"tlt %d\");\n", r(insn.operands[0].reg), r(insn.operands[1].reg), (int)insn.operands[2].imm); - break; - case MIPS_INS_NOP: + + case rabbitizer::InstrId::UniqueId::cpu_nop: printf("//nop;\n"); break; + default: - unimplemented: - printf("UNIMPLEMENTED %s %s\n", insn.mnemonic.c_str(), insn.op_str.c_str()); + unimplemented: + printf("UNIMPLEMENTED 0x%X : %s\n", insn.instruction.getRaw(), insn.disassemble().c_str()); break; } } -static void inspect_data_function_pointers(vector>& ret, const uint8_t *section, uint32_t section_vaddr, uint32_t len) { +void inspect_data_function_pointers(vector>& ret, const uint8_t* section, + uint32_t section_vaddr, uint32_t len) { for (uint32_t i = 0; i < len; i += 4) { uint32_t addr = read_u32_be(section + i); + if (addr == 0x430b00 || addr == 0x433b00) { // in as1, not function pointers (normal integers) continue; } + if (addr == 0x4a0000) { // in copt continue; } - if (section_vaddr + i >= procedure_table_start && section_vaddr + i < procedure_table_start + procedure_table_len) { + + if (section_vaddr + i >= procedure_table_start && + section_vaddr + i < procedure_table_start + procedure_table_len) { // some linking table with a "all" functions, in as1 5.3 continue; } - if (addr >= text_vaddr && addr < text_vaddr + text_section_len && addr % 4 == 0) { + + if ((addr >= text_vaddr) && (addr < text_vaddr + text_section_len) && ((addr % 4) == 0)) { #if INSPECT_FUNCTION_POINTERS fprintf(stderr, "assuming function pointer 0x%x at 0x%x\n", addr, section_vaddr + i); #endif ret.push_back(make_pair(section_vaddr + i, addr)); - label_addresses.insert(addr); - functions[addr].referenced_by_function_pointer = true; + add_function(addr); + functions.at(addr).referenced_by_function_pointer = true; } } } -static void dump_function_signature(Function& f, uint32_t vaddr) { +void dump_function_signature(Function& f, uint32_t vaddr) { printf("static "); switch (f.nret) { case 0: printf("void "); break; + case 1: printf("uint32_t "); break; + case 2: printf("uint64_t "); break; } - auto name_it = symbol_names.find(vaddr); - if (name_it != symbol_names.end()) { - printf("f_%s", name_it->second.c_str()); - } else { - printf("func_%x", vaddr); - } + + dump_function_name(vaddr); printf("(uint8_t *mem, uint32_t sp"); + if (f.v0_in) { - printf(", uint32_t %s", r(MIPS_REG_V0)); + printf(", uint32_t %s", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_v0)); } + for (uint32_t i = 0; i < f.nargs; i++) { - printf(", uint32_t %s", r(MIPS_REG_A0 + i)); + printf(", uint32_t %s", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + i)); } + printf(")"); } -static void dump_c(void) { +void dump_c(void) { map symbol_names_inv; + for (auto& it : symbol_names) { symbol_names_inv[it.second] = it.first; } - uint32_t min_addr = ~0; + uint32_t min_addr = UINT32_MAX; uint32_t max_addr = 0; if (data_section_len > 0) { @@ -2344,86 +3143,133 @@ static void dump_c(void) { min_addr = std::min(min_addr, rodata_vaddr); max_addr = std::max(max_addr, rodata_vaddr + rodata_section_len); } - if (bss_section_len) { + if (bss_section_len > 0) { min_addr = std::min(min_addr, bss_vaddr); max_addr = std::max(max_addr, bss_vaddr + bss_section_len); } + if (sdata_section_len > 0) { + min_addr = std::min(min_addr, sdata_vaddr); + max_addr = std::max(max_addr, sdata_vaddr + sdata_section_len); + } + if (srdata_section_len > 0) { + min_addr = std::min(min_addr, srdata_vaddr); + max_addr = std::max(max_addr, srdata_vaddr + srdata_section_len); + } + if (sbss_section_len > 0) { + min_addr = std::min(min_addr, sbss_vaddr); + max_addr = std::max(max_addr, sbss_vaddr + sbss_section_len); + } - min_addr = min_addr & ~0xfff; - max_addr = (max_addr + 0xfff) & ~0xfff; + // 64 kB. Supposedly the worst-case smallest permitted page size, increase if necessary. + // Ensures the hardcoded min_addr and max_addr are sufficiently aligned for the machine running the + // recompiled binaries (and not just the one doing the original recomp build). + uint32_t page_size = 0x10000; + + min_addr = min_addr & ~(page_size - 1); + max_addr = (max_addr + (page_size - 1)) & ~(page_size - 1); uint32_t stack_bottom = min_addr; - min_addr -= 1 * 1024 * 1024; // 1 MB stack - stack_bottom -= 16; // for main's stack frame + min_addr -= 0x100000; // 1 MB stack + stack_bottom -= 0x10; // for main's stack frame printf("#include \"header.h\"\n"); + if (conservative) { printf("static uint32_t s0, s1, s2, s3, s4, s5, s6, s7, fp;\n"); } - printf("static const uint32_t rodata[] = {\n"); - for (size_t i = 0; i < rodata_section_len; i += 4) { - printf("0x%x,%s", read_u32_be(rodata_section + i), i % 32 == 28 ? "\n" : ""); - } - printf("};\n"); - printf("static const uint32_t data[] = {\n"); - for (size_t i = 0; i < data_section_len; i += 4) { - printf("0x%x,%s", read_u32_be(data_section + i), i % 32 == 28 ? "\n" : ""); - } - printf("};\n"); - /*if (!data_function_pointers.empty()) { + if (rodata_section_len > 0) { + printf("static const uint32_t rodata[] = {\n"); + for (size_t i = 0; i < rodata_section_len; i += 4) { + printf("0x%x,%s", read_u32_be(rodata_section + i), i % 32 == 28 ? "\n" : ""); + } + printf("};\n"); + } + if (data_section_len > 0) { + printf("static const uint32_t data[] = {\n"); + for (size_t i = 0; i < data_section_len; i += 4) { + printf("0x%x,%s", read_u32_be(data_section + i), i % 32 == 28 ? "\n" : ""); + } + printf("};\n"); + } + if (srdata_section_len > 0) { + printf("static const uint32_t srdata[] = {\n"); + for (size_t i = 0; i < srdata_section_len; i += 4) { + printf("0x%x,%s", read_u32_be(srdata_section + i), i % 32 == 28 ? "\n" : ""); + } + printf("};\n"); + } + if (sdata_section_len > 0) { + printf("static const uint32_t sdata[] = {\n"); + for (size_t i = 0; i < sdata_section_len; i += 4) { + printf("0x%x,%s", read_u32_be(sdata_section + i), i % 32 == 28 ? "\n" : ""); + } + printf("};\n"); + } + + /* if (!data_function_pointers.empty()) { printf("static const struct { uint32_t orig_addr; void *recompiled_addr; } data_function_pointers[] = {\n"); for (auto item : data_function_pointers) { printf("{0x%x, &&L%x},\n", item.first, item.second); } printf("};\n"); - }*/ + } */ if (TRACE) { printf("static unsigned long long int cnt = 0;\n"); } for (auto& f_it : functions) { - if (insns[addr_to_i(f_it.first)].f_livein != 0) { + uint32_t addr = f_it.first; + auto& ins = insns.at(addr_to_i(addr)); + + if (ins.f_livein != 0) { // Function is used - dump_function_signature(f_it.second, f_it.first); + dump_function_signature(f_it.second, addr); printf(";\n"); } } - if (!data_function_pointers.empty() || !li_function_pointers.empty()) { - printf("uint64_t trampoline(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t fp_dest) {\n"); + if (!data_function_pointers.empty() || !la_function_pointers.empty()) { + printf("uint64_t trampoline(uint8_t *mem, uint32_t sp, uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, " + "uint32_t fp_dest) {\n"); printf("switch (fp_dest) {\n"); + for (auto& it : functions) { Function& f = it.second; + if (f.referenced_by_function_pointer) { printf("case 0x%x: ", it.first); + if (f.nret == 1) { printf("return (uint64_t)"); } else if (f.nret == 2) { printf("return "); } - auto name_it = symbol_names.find(it.first); - if (name_it != symbol_names.end()) { - printf("f_%s", name_it->second.c_str()); - } else { - printf("func_%x", it.first); - } + + dump_function_name(it.first); printf("(mem, sp"); - for (int i = 0; i < f.nargs; i++) { + + for (unsigned int i = 0; i < f.nargs; i++) { printf(", a%d", i); } + printf(")"); + if (f.nret == 1) { printf(" << 32"); } + printf(";"); + if (f.nret == 0) { printf(" return 0;"); } + printf("\n"); } } + printf("default: abort();"); printf("}\n"); printf("}\n"); @@ -2432,16 +3278,28 @@ static void dump_c(void) { printf("int run(uint8_t *mem, int argc, char *argv[]) {\n"); printf("mmap_initial_data_range(mem, 0x%x, 0x%x);\n", min_addr, max_addr); - printf("memcpy(mem + 0x%x, rodata, 0x%x);\n", rodata_vaddr, rodata_section_len); - printf("memcpy(mem + 0x%x, data, 0x%x);\n", data_vaddr, data_section_len); + if (rodata_section_len > 0) { + printf("memcpy(mem + 0x%x, rodata, 0x%x);\n", rodata_vaddr, rodata_section_len); + } + if (data_section_len > 0) { + printf("memcpy(mem + 0x%x, data, 0x%x);\n", data_vaddr, data_section_len); + } + if (srdata_section_len > 0) { + printf("memcpy(mem + 0x%x, srdata, 0x%x);\n", srdata_vaddr, srdata_section_len); + } + if (sdata_section_len > 0) { + printf("memcpy(mem + 0x%x, sdata, 0x%x);\n", sdata_vaddr, sdata_section_len); + } - /*if (!data_function_pointers.empty()) { + /* if (!data_function_pointers.empty()) { if (!LABELS_64_BIT) { - printf("for (int i = 0; i < %d; i++) MEM_U32(data_function_pointers[i].orig_addr) = (uint32_t)(uintptr_t)data_function_pointers[i].recompiled_addr;\n", (int)data_function_pointers.size()); - } else { - printf("for (int i = 0; i < %d; i++) MEM_U32(data_function_pointers[i].orig_addr) = (uint32_t)((uintptr_t)data_function_pointers[i].recompiled_addr - (uintptr_t)&&Loffset);\n", (int)data_function_pointers.size()); + printf("for (int i = 0; i < %d; i++) MEM_U32(data_function_pointers[i].orig_addr) = + (uint32_t)(uintptr_t)data_function_pointers[i].recompiled_addr;\n", (int)data_function_pointers.size()); } else { + printf("for (int i = 0; i < %d; i++) MEM_U32(data_function_pointers[i].orig_addr) = + (uint32_t)((uintptr_t)data_function_pointers[i].recompiled_addr - (uintptr_t)&&Loffset);\n", + (int)data_function_pointers.size()); } - }*/ + } */ printf("MEM_S32(0x%x) = argc;\n", symbol_names_inv.at("__Argc")); printf("MEM_S32(0x%x) = argc;\n", stack_bottom); @@ -2450,24 +3308,19 @@ static void dump_c(void) { printf("MEM_U32(0x%x) = arg_addr;\n", symbol_names_inv.at("__Argv")); printf("MEM_U32(0x%x) = arg_addr;\n", stack_bottom + 4); printf("uint32_t arg_strpos = arg_addr + argc * 4;\n"); - printf("for (int i = 0; i < argc; i++) {MEM_U32(arg_addr + i * 4) = arg_strpos; uint32_t p = 0; do { MEM_S8(arg_strpos) = argv[i][p]; ++arg_strpos; } while (argv[i][p++] != '\\0');}\n"); + printf("for (int i = 0; i < argc; i++) {MEM_U32(arg_addr + i * 4) = arg_strpos; uint32_t p = 0; do { " + "MEM_S8(arg_strpos) = argv[i][p]; ++arg_strpos; } while (argv[i][p++] != '\\0');}\n"); printf("setup_libc_data(mem);\n"); - //printf("gp = 0x%x;\n", gp_value); // only to recreate the outcome when ugen reads uninitialized stack memory + // printf("gp = 0x%x;\n", gp_value); // only to recreate the outcome when ugen reads uninitialized stack memory + + printf("int ret = f_main(mem, 0x%x, argc, arg_addr);\n", stack_bottom); - printf("int ret = f_main(mem, 0x%x", stack_bottom); - Function& main_func = functions[main_addr]; - if (main_func.nargs >= 1) { - printf(", argc"); - } - if (main_func.nargs >= 2) { - printf(", arg_addr"); - } - printf(");\n"); if (TRACE) { printf("end: fprintf(stderr, \"cnt: %%llu\\n\", cnt);\n"); } + printf("return ret;\n"); printf("}\n"); @@ -2485,6 +3338,7 @@ static void dump_c(void) { dump_function_signature(f, start_addr); printf(" {\n"); printf("const uint32_t zero = 0;\n"); + if (!conservative) { printf("uint32_t at = 0, v1 = 0, t0 = 0, t1 = 0, t2 = 0,\n"); printf("t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, s0 = 0, s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0,\n"); @@ -2493,60 +3347,79 @@ static void dump_c(void) { printf("uint32_t at = 0, v1 = 0, t0 = 0, t1 = 0, t2 = 0,\n"); printf("t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, gp = 0x10000, ra = 0x10000;\n"); } + printf("uint32_t lo = 0, hi = 0;\n"); printf("int cf = 0;\n"); printf("uint64_t temp64;\n"); + printf("double tempf64;\n"); printf("uint32_t fp_dest;\n"); - printf("void *dest;\n"); + printf("uint32_t jtbl_index;\n"); + if (!f.v0_in) { printf("uint32_t v0 = 0;\n"); } + for (uint32_t j = f.nargs; j < 4; j++) { - printf("uint32_t %s = 0;\n", r(MIPS_REG_A0 + j)); + printf("uint32_t %s = 0;\n", r((int)rabbitizer::Registers::Cpu::GprO32::GPR_O32_a0 + j)); } for (size_t i = addr_to_i(start_addr), end_i = addr_to_i(end_addr); i < end_i; i++) { - Insn& insn = insns[i]; uint32_t vaddr = text_vaddr + i * 4; + if (label_addresses.count(vaddr)) { printf("L%x:\n", vaddr); } +#if DUMP_INSTRUCTIONS + Insn& insn = insns[i]; + printf("// %s:\n", insn.disassemble().c_str()); +#endif dump_instr(i); } printf("}\n"); } - /*for (size_t i = 0; i < insns.size(); i++) { + /* for (size_t i = 0; i < insns.size(); i++) { Insn& insn = insns[i]; uint32_t vaddr = text_vaddr + i * 4; auto fn_it = functions.find(vaddr); + if (fn_it != functions.end()) { Function& f = fn_it->second; + printf("}\n\n"); + switch (f.nret) { case 0: printf("void "); break; + case 1: printf("uint32_t "); break; + case 2: printf("uint64_t "); break; } + auto name_it = symbol_names.find(vaddr); + if (name_it != symbol_names.end()) { printf("%s", name_it->second.c_str()); } else { printf("func_%x", vaddr); } + printf("(uint8_t *mem, uint32_t sp"); + if (f.v0_in) { printf(", uint32_t %s", r(MIPS_REG_V0)); } + for (uint32_t i = 0; i < f.nargs; i++) { printf(", uint32_t %s", r(MIPS_REG_A0 + i)); } + printf(") {\n"); printf("const uint32_t zero = 0;\n"); printf("uint32_t at = 0, v1 = 0, t0 = 0, t1 = 0, t2 = 0,\n"); @@ -2554,23 +3427,28 @@ static void dump_c(void) { printf("s6 = 0, s7 = 0, t8 = 0, t9 = 0, gp = 0, fp = 0, s8 = 0, ra = 0;\n"); printf("uint32_t lo = 0, hi = 0;\n"); printf("int cf = 0;\n"); + if (!f.v0_in) { printf("uint32_t v0 = 0;\n"); } + for (uint32_t j = f.nargs; j < 4; j++) { printf("uint32_t %s = 0;\n", r(MIPS_REG_A0 + j)); } } + if (label_addresses.count(vaddr)) { printf("L%x:\n", vaddr); } + dump_instr(i); - }*/ + } */ } -static void parse_elf(const uint8_t *data, size_t file_len) { - Elf32_Ehdr *ehdr; - Elf32_Shdr *shdr, *str_shdr, *sym_shdr = NULL, *dynsym_shdr, *dynamic_shdr, *reginfo_shdr, *got_shdr, *sym_strtab, *sym_dynstr; +void parse_elf(const uint8_t* data, size_t file_len) { + Elf32_Ehdr* ehdr; + Elf32_Shdr *shdr, *str_shdr, *sym_shdr = NULL, *dynsym_shdr, *dynamic_shdr, *reginfo_shdr, *got_shdr, + *sym_strtab = NULL, *sym_dynstr; int text_section_index = -1; int symtab_section_index = -1; int dynsym_section_index = -1; @@ -2580,6 +3458,9 @@ static void parse_elf(const uint8_t *data, size_t file_len) { int rodata_section_index = -1; int data_section_index = -1; int bss_section_index = -1; + int srdata_section_index = -1; + int sdata_section_index = -1; + int sbss_section_index = -1; uint32_t text_offset = 0; uint32_t vaddr_adj = 0; @@ -2588,25 +3469,33 @@ static void parse_elf(const uint8_t *data, size_t file_len) { exit(EXIT_FAILURE); } - ehdr = (Elf32_Ehdr *) data; + ehdr = (Elf32_Ehdr*)data; if (ehdr->e_ident[EI_DATA] != 2 || u16be(ehdr->e_machine) != 8) { fprintf(stderr, "Not big-endian MIPS.\n"); exit(EXIT_FAILURE); } + if (u32be(ehdr->e_flags) & 0x20) { // N32 (abi2) + n32 = true; + } else { // O32 + n32 = false; + } + if (u16be(ehdr->e_shstrndx) == 0) { // (We could look at program headers instead in this case.) fprintf(stderr, "Missing section headers; stripped binaries are not yet supported.\n"); exit(EXIT_FAILURE); } -#define SECTION(index) (Elf32_Shdr *)(data + u32be(ehdr->e_shoff) + (index) * u16be(ehdr->e_shentsize)) -#define STR(strtab, offset) (const char *)(data + u32be(strtab->sh_offset) + offset) +#define SECTION(index) (Elf32_Shdr*)(data + u32be(ehdr->e_shoff) + (index)*u16be(ehdr->e_shentsize)) +#define STR(strtab, offset) (const char*)(data + u32be(strtab->sh_offset) + offset) str_shdr = SECTION(u16be(ehdr->e_shstrndx)); for (int i = 0; i < u16be(ehdr->e_shnum); i++) { shdr = SECTION(i); - const char *name = STR(str_shdr, u32be(shdr->sh_name)); + + const char* name = STR(str_shdr, u32be(shdr->sh_name)); + if (strcmp(name, ".text") == 0) { text_offset = u32be(shdr->sh_offset); text_vaddr = u32be(shdr->sh_addr); @@ -2615,30 +3504,50 @@ static void parse_elf(const uint8_t *data, size_t file_len) { text_section = data + text_offset; text_section_index = i; } + if (u32be(shdr->sh_type) == SHT_SYMTAB) { symtab_section_index = i; } + if (u32be(shdr->sh_type) == SHT_DYNSYM) { dynsym_section_index = i; } + if (u32be(shdr->sh_type) == SHT_MIPS_REGINFO) { reginfo_section_index = i; } + if (u32be(shdr->sh_type) == SHT_DYNAMIC) { dynamic_section_index = i; } + if (strcmp(name, ".got") == 0) { got_section_index = i; } + if (strcmp(name, ".rodata") == 0) { rodata_section_index = i; } + if (strcmp(name, ".data") == 0) { data_section_index = i; } + if (strcmp(name, ".bss") == 0) { bss_section_index = i; } + + if (strcmp(name, ".srdata") == 0) { + srdata_section_index = i; + } + + if (strcmp(name, ".sdata") == 0) { + sdata_section_index = i; + } + + if (strcmp(name, ".sbss") == 0) { + sbss_section_index = i; + } } if (text_section_index == -1) { @@ -2656,24 +3565,18 @@ static void parse_elf(const uint8_t *data, size_t file_len) { fprintf(stderr, "Missing .reginfo section.\n"); exit(EXIT_FAILURE); } + if (dynamic_section_index == -1) { fprintf(stderr, "Missing .dynamic section.\n"); exit(EXIT_FAILURE); } + if (got_section_index == -1) { fprintf(stderr, "Missing .got section.\n"); exit(EXIT_FAILURE); } } - if (rodata_section_index != -1) { - shdr = SECTION(rodata_section_index); - uint32_t size = u32be(shdr->sh_size); - rodata_section = data + u32be(shdr->sh_offset); - rodata_section_len = size; - rodata_vaddr = u32be(shdr->sh_addr); - } - if (data_section_index != -1) { shdr = SECTION(data_section_index); uint32_t size = u32be(shdr->sh_size); @@ -2689,6 +3592,36 @@ static void parse_elf(const uint8_t *data, size_t file_len) { bss_vaddr = u32be(shdr->sh_addr); } + if (rodata_section_index != -1) { + shdr = SECTION(rodata_section_index); + uint32_t size = u32be(shdr->sh_size); + rodata_section = data + u32be(shdr->sh_offset); + rodata_section_len = size; + rodata_vaddr = u32be(shdr->sh_addr); + } + + if (srdata_section_index != -1) { + shdr = SECTION(srdata_section_index); + uint32_t size = u32be(shdr->sh_size); + srdata_section = data + u32be(shdr->sh_offset); + srdata_section_len = size; + srdata_vaddr = u32be(shdr->sh_addr); + } + + if (sdata_section_index != -1) { + shdr = SECTION(sdata_section_index); + uint32_t size = u32be(shdr->sh_size); + sdata_section = data + u32be(shdr->sh_offset); + sdata_section_len = size; + sdata_vaddr = u32be(shdr->sh_addr); + } + + if (sbss_section_index != -1) { + shdr = SECTION(sbss_section_index); + uint32_t size = u32be(shdr->sh_size); + sbss_section_len = size; + sbss_vaddr = u32be(shdr->sh_addr); + } // add symbols if (symtab_section_index != -1) { @@ -2698,14 +3631,16 @@ static void parse_elf(const uint8_t *data, size_t file_len) { assert(u32be(sym_shdr->sh_entsize) == sizeof(Elf32_Sym)); for (uint32_t i = 0; i < u32be(sym_shdr->sh_size); i += sizeof(Elf32_Sym)) { - Elf32_Sym *sym = (Elf32_Sym *)(data + u32be(sym_shdr->sh_offset) + i); - const char *name = STR(sym_strtab, u32be(sym->st_name)); + Elf32_Sym* sym = (Elf32_Sym*)(data + u32be(sym_shdr->sh_offset) + i); + const char* name = STR(sym_strtab, u32be(sym->st_name)); uint32_t addr = u32be(sym->st_value); + if (u16be(sym->st_shndx) != text_section_index || name[0] == '.') { continue; } + addr += vaddr_adj; - //disasm_label_add(state, name, addr, u32be(sym->st_size), true); + // disasm_label_add(state, name, addr, u32be(sym->st_size), true); } } @@ -2716,7 +3651,7 @@ static void parse_elf(const uint8_t *data, size_t file_len) { dynamic_shdr = SECTION(dynamic_section_index); got_shdr = SECTION(got_section_index); - Elf32_RegInfo *reg_info = (Elf32_RegInfo *)(data + u32be(reginfo_shdr->sh_offset)); + Elf32_RegInfo* reg_info = (Elf32_RegInfo*)(data + u32be(reginfo_shdr->sh_offset)); uint32_t gp_base = u32be(reg_info->ri_gp_value); // gp should have this value through the program run uint32_t got_start = 0; uint32_t local_got_no = 0; @@ -2725,16 +3660,20 @@ static void parse_elf(const uint8_t *data, size_t file_len) { assert(u32be(dynamic_shdr->sh_entsize) == sizeof(Elf32_Dyn)); for (uint32_t i = 0; i < u32be(dynamic_shdr->sh_size); i += sizeof(Elf32_Dyn)) { - Elf32_Dyn *dyn = (Elf32_Dyn *)(data + u32be(dynamic_shdr->sh_offset) + i); + Elf32_Dyn* dyn = (Elf32_Dyn*)(data + u32be(dynamic_shdr->sh_offset) + i); + if (u32be(dyn->d_tag) == DT_PLTGOT) { got_start = u32be(dyn->d_un.d_ptr); } + if (u32be(dyn->d_tag) == DT_MIPS_LOCAL_GOTNO) { local_got_no = u32be(dyn->d_un.d_val); } + if (u32be(dyn->d_tag) == DT_MIPS_GOTSYM) { first_got_sym = u32be(dyn->d_un.d_val); } + if (u32be(dyn->d_tag) == DT_MIPS_SYMTABNO) { dynsym_no = u32be(dyn->d_un.d_val); } @@ -2744,87 +3683,103 @@ static void parse_elf(const uint8_t *data, size_t file_len) { // value to add to asm gp offset, for example 32752, if -32752(gp) refers to the first entry in got. uint32_t gp_adj = gp_base - got_start; + assert(gp_adj < 0x10000); assert(u32be(dynsym_shdr->sh_entsize) == sizeof(Elf32_Sym)); + uint32_t global_got_no = dynsym_no - first_got_sym; - //global_got_entry *global_entries = (global_got_entry *)calloc(global_got_no, sizeof(global_got_entry)); + // global_got_entry *global_entries = (global_got_entry *)calloc(global_got_no, sizeof(global_got_entry)); + got_globals.resize(global_got_no); uint32_t common_start = ~0U; vector common_order; for (uint32_t i = 0; i < dynsym_no; i++) { - Elf32_Sym *sym = (Elf32_Sym *)(data + u32be(dynsym_shdr->sh_offset) + i * sizeof(Elf32_Sym)); - const char *name = STR(sym_dynstr, u32be(sym->st_name)); + Elf32_Sym* sym = (Elf32_Sym*)(data + u32be(dynsym_shdr->sh_offset) + i * sizeof(Elf32_Sym)); + const char* name = STR(sym_dynstr, u32be(sym->st_name)); uint32_t addr = u32be(sym->st_value); + addr += vaddr_adj; + uint8_t type = ELF32_ST_TYPE(sym->st_info); + if (!strcmp(name, "_procedure_table")) { procedure_table_start = addr; } else if (!strcmp(name, "_procedure_table_size")) { procedure_table_len = 40 * u32be(sym->st_value); } + if ((u16be(sym->st_shndx) == SHN_MIPS_TEXT && type == STT_FUNC) || - (type == STT_OBJECT && (u16be(sym->st_shndx) == SHN_MIPS_ACOMMON || u16be(sym->st_shndx) == SHN_MIPS_DATA))) - { - //disasm_label_add(state, name, addr, u32be(sym->st_size), true); - if (type == STT_OBJECT) { - } + (type == STT_OBJECT && + (u16be(sym->st_shndx) == SHN_MIPS_ACOMMON || u16be(sym->st_shndx) == SHN_MIPS_DATA))) { + // disasm_label_add(state, name, addr, u32be(sym->st_size), true); + if (type == STT_OBJECT) {} + if (u16be(sym->st_shndx) == SHN_MIPS_ACOMMON) { if (addr < common_start) { common_start = addr; } + common_order.push_back(name); } + if (type == STT_FUNC) { add_function(addr); + if (strcmp(name, "main") == 0) { main_addr = addr; } + if (strcmp(name, "_mcount") == 0) { mcount_addr = addr; } + symbol_names[addr] = name; } } + if (i >= first_got_sym) { - uint32_t got_value = u32be(*(uint32_t *)(data + u32be(got_shdr->sh_offset) + (local_got_no + (i - first_got_sym)) * sizeof(uint32_t))); + uint32_t got_value = u32be(*(uint32_t*)(data + u32be(got_shdr->sh_offset) + + (local_got_no + (i - first_got_sym)) * sizeof(uint32_t))); + if (u16be(sym->st_shndx) == SHN_MIPS_TEXT && type == STT_FUNC) { - //got_globals[i - first_got_sym] = got_value; - //label_addresses.insert(got_value); + // got_globals[i - first_got_sym] = got_value; + // label_addresses.insert(got_value); got_globals[i - first_got_sym] = addr; // to include the 3 instr gp header thing label_addresses.insert(addr); - } else if (type == STT_OBJECT && (u16be(sym->st_shndx) == SHN_UNDEF || u16be(sym->st_shndx) == SHN_COMMON)) { + } else if (type == STT_OBJECT && + (u16be(sym->st_shndx) == SHN_UNDEF || u16be(sym->st_shndx) == SHN_COMMON)) { // symbol defined externally (for example in libc) got_globals[i - first_got_sym] = got_value; } else { got_globals[i - first_got_sym] = addr; } + symbol_names[got_globals[i - first_got_sym]] = name; } } - uint32_t *local_entries = (uint32_t *)calloc(local_got_no, sizeof(uint32_t)); + uint32_t* local_entries = (uint32_t*)calloc(local_got_no, sizeof(uint32_t)); got_locals.resize(local_got_no); for (uint32_t i = 0; i < local_got_no; i++) { - uint32_t *entry = (uint32_t *)(data + u32be(got_shdr->sh_offset) + i * sizeof(uint32_t)); + uint32_t* entry = (uint32_t*)(data + u32be(got_shdr->sh_offset) + i * sizeof(uint32_t)); got_locals[i] = u32be(*entry); } gp_value = gp_base; gp_value_adj = gp_adj; - //disasm_got_entries_set(state, gp_base, gp_adj, local_entries, local_got_no, global_entries, global_got_no); - //out_range.common_start = common_start; - //out_range.common_order.swap(common_order); + free(local_entries); } // add relocations for (int i = 0; i < u16be(ehdr->e_shnum); i++) { - Elf32_Rel *prevHi = NULL; + Elf32_Rel* prevHi = NULL; + shdr = SECTION(i); - if (u32be(shdr->sh_type) != SHT_REL || u32be(shdr->sh_info) != (uint32_t) text_section_index) + if (u32be(shdr->sh_type) != SHT_REL || u32be(shdr->sh_info) != (uint32_t)text_section_index) continue; if (sym_shdr == NULL) { @@ -2832,49 +3787,47 @@ static void parse_elf(const uint8_t *data, size_t file_len) { exit(EXIT_FAILURE); } - assert(u32be(shdr->sh_link) == (uint32_t) symtab_section_index); + assert(u32be(shdr->sh_link) == (uint32_t)symtab_section_index); assert(u32be(shdr->sh_entsize) == sizeof(Elf32_Rel)); - for (uint32_t i = 0; i < u32be(shdr->sh_size); i += sizeof(Elf32_Rel)) { - Elf32_Rel *rel = (Elf32_Rel *)(data + u32be(shdr->sh_offset) + i); + + for (uint32_t rel_index = 0; rel_index < u32be(shdr->sh_size); rel_index++) { + Elf32_Rel* rel = (Elf32_Rel*)(data + u32be(shdr->sh_offset) + rel_index * sizeof(Elf32_Rel)); uint32_t offset = text_offset + u32be(rel->r_offset); - uint32_t symIndex = ELF32_R_SYM(u32be(rel->r_info)); uint32_t rtype = ELF32_R_TYPE(u32be(rel->r_info)); - const char *symName = "0"; - if (symIndex != STN_UNDEF) { - Elf32_Sym *sym = (Elf32_Sym *)(data + u32be(sym_shdr->sh_offset) + symIndex * sizeof(Elf32_Sym)); - symName = STR(sym_strtab, u32be(sym->st_name)); - } if (rtype == R_MIPS_HI16) { if (prevHi != NULL) { fprintf(stderr, "Consecutive R_MIPS_HI16.\n"); exit(EXIT_FAILURE); } + prevHi = rel; continue; } + if (rtype == R_MIPS_LO16) { int32_t addend = (int16_t)((data[offset + 2] << 8) + data[offset + 3]); + if (prevHi != NULL) { uint32_t offset2 = text_offset + u32be(prevHi->r_offset); + addend += (uint32_t)((data[offset2 + 2] << 8) + data[offset2 + 3]) << 16; - //add_reloc(state, offset2, symName, addend, out_range.vaddr); } prevHi = NULL; - //add_reloc(state, offset, symName, addend, out_range.vaddr); - } - else if (rtype == R_MIPS_26) { + } else if (rtype == R_MIPS_26) { int32_t addend = (u32be(*(uint32_t*)(data + offset)) & ((1 << 26) - 1)) << 2; + if (addend >= (1 << 27)) { addend -= 1 << 28; } - //add_reloc(state, offset, symName, addend, out_range.vaddr); } + else { fprintf(stderr, "Bad relocation type %d.\n", rtype); exit(EXIT_FAILURE); } } + if (prevHi != NULL) { fprintf(stderr, "R_MIPS_HI16 without matching R_MIPS_LO16.\n"); exit(EXIT_FAILURE); @@ -2884,11 +3837,12 @@ static void parse_elf(const uint8_t *data, size_t file_len) { #undef SECTION #undef STR -size_t read_file(const char *file_name, uint8_t **data) { - FILE *in; - uint8_t *in_buf = NULL; +size_t read_file(const char* file_name, uint8_t** data) { + FILE* in; + uint8_t* in_buf = NULL; long file_size; long bytes_read; + in = fopen(file_name, "rb"); assert(in != nullptr); @@ -2897,7 +3851,7 @@ size_t read_file(const char *file_name, uint8_t **data) { file_size = ftell(in); assert(file_size != -1L); - in_buf = (uint8_t *)malloc(file_size); + in_buf = (uint8_t*)malloc(file_size); fseek(in, 0, SEEK_SET); // read bytes @@ -2909,18 +3863,108 @@ size_t read_file(const char *file_name, uint8_t **data) { return bytes_read; } -int main(int argc, char *argv[]) { - const char *filename = argv[1]; - if (strcmp(filename, "--conservative") == 0) { - conservative = true; - filename = argv[2]; +#ifdef UNIX_PLATFORM +void crashHandler(int sig) { + void* array[4096]; + const size_t nMaxFrames = std::size(array); + size_t size = backtrace(array, nMaxFrames); + char** symbols = backtrace_symbols(array, nMaxFrames); + + fprintf(stderr, "\n recomp crashed. (Signal: %i)\n", sig); + + // Feel free to add more crash messages. + const char* crashEasterEgg[] = { + "\tIT'S A SECRET TO EVERYBODY. \n\tBut it shouldn't be, you'd better ask about it!", + "\tI AM ERROR.", + "\tGRUMBLE,GRUMBLE...", + "\tDODONGO DISLIKES SMOKE \n\tAnd recomp dislikes whatever you fed it.", + "\tMay the way of the Hero lead \n\tto the debugger.", + "\tTHE WIND FISH SLUMBERS LONG... \n\tTHE HERO'S LIFE GONE... ", + "\tSEA BEARS FOAM, SLEEP BEARS DREAMS. \n\tBOTH END IN THE SAME WAY CRASSSH!", + "\tYou've met with a terrible fate, haven't you?", + "\tMaster, I calculate a 100% probability that recomp has crashed. \n\tAdditionally, the " + "batteries in your Wii Remote are nearly depleted.", + "\t CONGRATURATIONS! \n" + "\tAll Pages are displayed.\n" + "\t THANK YOU! \n" + "\t You are great debugger!", + "\tRCP is HUNG UP!!\n" + "\tOh! MY GOD!!", + }; + + srand(time(nullptr)); + auto easterIndex = rand() % std::size(crashEasterEgg); + + fprintf(stderr, "\n%s\n\n", crashEasterEgg[easterIndex]); + + fprintf(stderr, "Traceback:\n"); + for (size_t i = 1; i < size; i++) { + Dl_info info; + uint32_t gotAddress = dladdr(array[i], &info); + std::string functionName(symbols[i]); + + if (gotAddress != 0 && info.dli_sname != nullptr) { + int32_t status; + char* demangled = abi::__cxa_demangle(info.dli_sname, nullptr, nullptr, &status); + const char* nameFound = info.dli_sname; + + if (status == 0) { + nameFound = demangled; + } + + { + char auxBuffer[0x8000]; + + snprintf(auxBuffer, std::size(auxBuffer), "%s (+0x%lX)", nameFound, + (char*)array[i] - (char*)info.dli_saddr); + functionName = auxBuffer; + } + free(demangled); + +#if FULL_TRACEBACK == 0 + fprintf(stderr, "%-3zd %s\n", i, functionName.c_str()); +#endif + } + +#if FULL_TRACEBACK != 0 + fprintf(stderr, "%-3zd %s\n", i, functionName.c_str()); +#endif } - uint8_t *data; + fprintf(stderr, "\n"); + + free(symbols); + exit(1); +} +#endif + +int main(int argc, char* argv[]) { + int argi; + + for (argi = 1; argi < argc; argi++) { + if (strcmp(argv[argi], "--conservative") == 0) { + conservative = true; + } else { + break; + } + } + + if (argi != argc - 1) { + fprintf(stderr, "Usage: %s [--conservative] \n", argv[0]); + return 1; + } + + const char* filename = argv[argi]; + +#ifdef UNIX_PLATFORM + signal(SIGSEGV, crashHandler); + signal(SIGABRT, crashHandler); +#endif + + uint8_t* data; size_t len = read_file(filename, &data); + parse_elf(data, len); - assert(cs_open(CS_ARCH_MIPS, (cs_mode)(CS_MODE_MIPS64 | CS_MODE_BIG_ENDIAN), &handle) == CS_ERR_OK); - cs_option(handle, CS_OPT_DETAIL, CS_OPT_ON); disassemble(); inspect_data_function_pointers(data_function_pointers, rodata_section, rodata_vaddr, rodata_section_len); inspect_data_function_pointers(data_function_pointers, data_section, data_vaddr, data_section_len); @@ -2930,9 +3974,9 @@ int main(int argc, char *argv[]) { pass4(); pass5(); pass6(); - //dump(); + // dump(); dump_c(); free(data); - cs_close(&handle); -} + return 0; +} diff --git a/tools/ido5.3_recomp/version_info.c b/tools/ido5.3_recomp/version_info.c new file mode 100644 index 00000000..b811b4cd --- /dev/null +++ b/tools/ido5.3_recomp/version_info.c @@ -0,0 +1,64 @@ +/** + * Function that prints version info. This file should be compiled with the following defined: + * - PACKAGE_VERSION, e.g. with `-DPACKAGE_VERSION="\"$(LC_ALL=C git --git-dir .git describe --tags --dirty)\""` + * - DATETIME, e.g. with `-DDATETIME="\"$(date +'%F %T UTC%z')\""` + * + * The code in this file is mostly taken from + * - CPython: https://github.com/python/cpython/, licensed under the PSF, available here: https://docs.python.org/3/license.html + * - The Ocarina of Time practice rom, gz: https://github.com/glankk/gz/ + */ +#include +#include +#include +#include + +#if defined(IDO53) +#define IDO_VERSION "IDO 5.3" +#elif defined(IDO71) +#define IDO_VERSION "IDO 7.1" +#else +#define IDO_VERSION "" +#endif + +#ifndef COMPILER + +// Note the __clang__ conditional has to come before the __GNUC__ one because +// clang pretends to be GCC. +#if defined(__clang__) +#define COMPILER "Clang " __clang_version__ +#elif defined(__GNUC__) +#define COMPILER "GCC " __VERSION__ +// Generic fallbacks. +#elif defined(__cplusplus) +#define COMPILER "C++" +#else +#define COMPILER "C" +#endif + +#endif /* !COMPILER */ + +/* git */ +#ifndef PACKAGE_VERSION +#define PACKAGE_VERSION "Unknown version" +#endif + +/* Date and time */ +#ifndef DATETIME +#define DATETIME "Unknown date" +#endif + +extern char* progname; + +void print_version_info(void) { + char* buf = malloc(strlen(progname) + 1); + strcpy(buf, progname); + char* name = basename(buf); + + printf("%s `%s` static recompilation, Decompals version\n", IDO_VERSION, name); + printf("Source: https://github.com/decompals/ido-static-recomp\n"); + printf("Version: %s\n", PACKAGE_VERSION); + printf("Build date: %s\n", DATETIME); + printf("Compiler: %s\n", COMPILER); + + free(buf); +}